diff --git a/include/sbi/sbi_ipi.h b/include/sbi/sbi_ipi.h index e99bfdb..45f655c 100644 --- a/include/sbi/sbi_ipi.h +++ b/include/sbi/sbi_ipi.h @@ -25,6 +25,8 @@ struct sbi_scratch; int sbi_ipi_send_many(struct sbi_scratch *scratch, ulong hmask, ulong hbase, u32 event, void *data); +int sbi_ipi_send_smode(struct sbi_scratch *scratch, ulong hmask, ulong hbase); + void sbi_ipi_clear_smode(struct sbi_scratch *scratch); void sbi_ipi_process(struct sbi_scratch *scratch); diff --git a/lib/sbi/sbi_ecall.c b/lib/sbi/sbi_ecall.c index 30e47c3..6bf33ad 100644 --- a/lib/sbi/sbi_ecall.c +++ b/lib/sbi/sbi_ecall.c @@ -155,8 +155,7 @@ int sbi_ecall_ipi_handler(struct sbi_scratch *scratch, unsigned long funcid, int ret = 0; if (funcid == SBI_EXT_IPI_SEND_IPI) - ret = sbi_ipi_send_many(scratch, args[0], args[1], - SBI_IPI_EVENT_SOFT, NULL); + ret = sbi_ipi_send_smode(scratch, args[0], args[1]); else ret = SBI_ENOTSUPP; @@ -282,8 +281,7 @@ int sbi_ecall_0_1_handler(struct sbi_scratch *scratch, unsigned long extid, ret = sbi_load_hart_mask_unpriv(scratch, (ulong *)args[0], &hmask, out_trap); if (ret != SBI_ETRAP) - ret = sbi_ipi_send_many(scratch, hmask, 0, - SBI_IPI_EVENT_SOFT, NULL); + ret = sbi_ipi_send_smode(scratch, hmask, 0); break; case SBI_EXT_0_1_REMOTE_FENCE_I: tlb_info.start = 0; diff --git a/lib/sbi/sbi_ipi.c b/lib/sbi/sbi_ipi.c index e5ebfb5..701b49b 100644 --- a/lib/sbi/sbi_ipi.c +++ b/lib/sbi/sbi_ipi.c @@ -101,6 +101,12 @@ int sbi_ipi_send_many(struct sbi_scratch *scratch, ulong hmask, ulong hbase, return 0; } +int sbi_ipi_send_smode(struct sbi_scratch *scratch, ulong hmask, ulong hbase) +{ + return sbi_ipi_send_many(scratch, hmask, hbase, + SBI_IPI_EVENT_SOFT, NULL); +} + void sbi_ipi_clear_smode(struct sbi_scratch *scratch) { csr_clear(CSR_MIP, MIP_SSIP);