diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/sbi/sbi_ecall.h | 12 | ||||
| -rw-r--r-- | include/sbi/sbi_platform.h | 19 |
2 files changed, 16 insertions, 15 deletions
diff --git a/include/sbi/sbi_ecall.h b/include/sbi/sbi_ecall.h index 027213cb..0bf42d16 100644 --- a/include/sbi/sbi_ecall.h +++ b/include/sbi/sbi_ecall.h @@ -20,6 +20,13 @@ struct sbi_trap_regs; struct sbi_trap_info; +struct sbi_ecall_return { + /* Return flag to skip register update */ + bool skip_regs_update; + /* Return value */ + unsigned long value; +}; + struct sbi_ecall_extension { /* head is used by the extension list */ struct sbi_dlist head; @@ -62,9 +69,8 @@ struct sbi_ecall_extension { * never invoked with an invalid or unavailable extension ID. */ int (* handle)(unsigned long extid, unsigned long funcid, - const struct sbi_trap_regs *regs, - unsigned long *out_val, - struct sbi_trap_info *out_trap); + struct sbi_trap_regs *regs, + struct sbi_ecall_return *out); }; u16 sbi_ecall_version_major(void); diff --git a/include/sbi/sbi_platform.h b/include/sbi/sbi_platform.h index 58b9069d..2fb33e16 100644 --- a/include/sbi/sbi_platform.h +++ b/include/sbi/sbi_platform.h @@ -50,7 +50,7 @@ #include <sbi/sbi_version.h> struct sbi_domain_memregion; -struct sbi_trap_info; +struct sbi_ecall_return; struct sbi_trap_regs; struct sbi_hart_features; @@ -137,9 +137,8 @@ struct sbi_platform_operations { bool (*vendor_ext_check)(void); /** platform specific SBI extension implementation provider */ int (*vendor_ext_provider)(long funcid, - const struct sbi_trap_regs *regs, - unsigned long *out_value, - struct sbi_trap_info *out_trap); + struct sbi_trap_regs *regs, + struct sbi_ecall_return *out); }; /** Platform default per-HART stack size for exception/interrupt handling */ @@ -666,16 +665,12 @@ static inline bool sbi_platform_vendor_ext_check( static inline int sbi_platform_vendor_ext_provider( const struct sbi_platform *plat, long funcid, - const struct sbi_trap_regs *regs, - unsigned long *out_value, - struct sbi_trap_info *out_trap) + struct sbi_trap_regs *regs, + struct sbi_ecall_return *out) { - if (plat && sbi_platform_ops(plat)->vendor_ext_provider) { + if (plat && sbi_platform_ops(plat)->vendor_ext_provider) return sbi_platform_ops(plat)->vendor_ext_provider(funcid, - regs, - out_value, - out_trap); - } + regs, out); return SBI_ENOTSUPP; } |
