From 37923c4a66180b2f7881d959cd631038e81dbfec Mon Sep 17 00:00:00 2001 From: Anup Patel Date: Thu, 16 Jan 2020 11:38:49 +0530 Subject: lib: Add dynamic registration of SBI extensions This patch extends our SBI ecall implementation to allow dynamic registration of various SBI extensions. Using this dynamic registration we can break-up SBI ecall implementation into multiple files and even register experimental/custom SBI extensions from platform code. Signed-off-by: Anup Patel Reviewed-by: Atish Patra --- include/sbi/sbi_ecall.h | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'include/sbi/sbi_ecall.h') diff --git a/include/sbi/sbi_ecall.h b/include/sbi/sbi_ecall.h index a5b47a1..e9a9ef6 100644 --- a/include/sbi/sbi_ecall.h +++ b/include/sbi/sbi_ecall.h @@ -11,15 +11,37 @@ #define __SBI_ECALL_H__ #include +#include struct sbi_trap_regs; +struct sbi_trap_info; struct sbi_scratch; +struct sbi_ecall_extension { + struct sbi_dlist head; + unsigned long extid_start; + unsigned long extid_end; + int (* probe)(struct sbi_scratch *scratch, + unsigned long extid, unsigned long *out_val); + int (* handle)(struct sbi_scratch *scratch, + unsigned long extid, unsigned long funcid, + unsigned long *args, unsigned long *out_val, + struct sbi_trap_info *out_trap); +}; + u16 sbi_ecall_version_major(void); u16 sbi_ecall_version_minor(void); +struct sbi_ecall_extension *sbi_ecall_find_extension(unsigned long extid); + +int sbi_ecall_register_extension(struct sbi_ecall_extension *ext); + +void sbi_ecall_unregister_extension(struct sbi_ecall_extension *ext); + int sbi_ecall_handler(u32 hartid, ulong mcause, struct sbi_trap_regs *regs, struct sbi_scratch *scratch); +int sbi_ecall_init(void); + #endif -- cgit v1.2.3