diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/sbi/sbi_ipi.h | 34 | ||||
| -rw-r--r-- | include/sbi/sbi_tlb.h | 6 |
2 files changed, 31 insertions, 9 deletions
diff --git a/include/sbi/sbi_ipi.h b/include/sbi/sbi_ipi.h index 4a1bed0a..d6801487 100644 --- a/include/sbi/sbi_ipi.h +++ b/include/sbi/sbi_ipi.h @@ -14,17 +14,45 @@ /* clang-format off */ -#define SBI_IPI_EVENT_SOFT 0x1 -#define SBI_IPI_EVENT_FENCE 0x2 -#define SBI_IPI_EVENT_HALT 0x10 +#define SBI_IPI_EVENT_MAX __riscv_xlen /* clang-format on */ struct sbi_scratch; +/** IPI event operations or callbacks */ +struct sbi_ipi_event_ops { + /** Name of the IPI event operations */ + char name[32]; + + /** Update callback to save/enqueue data for remote HART + * Note: This is an optional callback and it is called just before + * triggering IPI to remote HART. + */ + int (* update)(struct sbi_scratch *scratch, + struct sbi_scratch *remote_scratch, + u32 remote_hartid, void *data); + + /** Sync callback to wait for remote HART + * Note: This is an optional callback and it is called just after + * triggering IPI to remote HART. + */ + void (* sync)(struct sbi_scratch *scratch); + + /** Process callback to handle IPI event + * Note: This is a mandatory callback and it is called on the + * remote HART after IPI is triggered. + */ + void (* process)(struct sbi_scratch *scratch); +}; + int sbi_ipi_send_many(struct sbi_scratch *scratch, ulong hmask, ulong hbase, u32 event, void *data); +int sbi_ipi_event_create(const struct sbi_ipi_event_ops *ops); + +void sbi_ipi_event_destroy(u32 event); + int sbi_ipi_send_smode(struct sbi_scratch *scratch, ulong hmask, ulong hbase); void sbi_ipi_clear_smode(struct sbi_scratch *scratch); diff --git a/include/sbi/sbi_tlb.h b/include/sbi/sbi_tlb.h index 38a9418e..c8d24ef2 100644 --- a/include/sbi/sbi_tlb.h +++ b/include/sbi/sbi_tlb.h @@ -43,12 +43,6 @@ struct sbi_tlb_info { #define SBI_TLB_INFO_SIZE sizeof(struct sbi_tlb_info) -int sbi_tlb_fifo_update(struct sbi_scratch *scratch, u32 hartid, void *data); - -void sbi_tlb_fifo_process(struct sbi_scratch *scratch); - -void sbi_tlb_fifo_sync(struct sbi_scratch *scratch); - int sbi_tlb_fifo_request(struct sbi_scratch *scratch, ulong hmask, ulong hbase, struct sbi_tlb_info *tinfo); |
