[PATCH v3 5/6] include: sbi: add emulate_load/store handler to platform ops

Bo Gan ganboing at gmail.com
Sat Mar 2 03:25:24 PST 2024


This patch allows the platform to define load/store emulators. This
enables a platform to trap-and-emulate special devices or filter
access to existing physical devices.

Signed-off-by: Bo Gan <ganboing at gmail.com>
---
 include/sbi/sbi_platform.h | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/include/sbi/sbi_platform.h b/include/sbi/sbi_platform.h
index 2fb33e1..06247dc 100644
--- a/include/sbi/sbi_platform.h
+++ b/include/sbi/sbi_platform.h
@@ -53,6 +53,8 @@ struct sbi_domain_memregion;
 struct sbi_ecall_return;
 struct sbi_trap_regs;
 struct sbi_hart_features;
+struct sbi_trap_info;
+union sbi_reg_data;
 
 /** Possible feature flags of a platform */
 enum sbi_platform_features {
@@ -139,6 +141,15 @@ struct sbi_platform_operations {
 	int (*vendor_ext_provider)(long funcid,
 				   struct sbi_trap_regs *regs,
 				   struct sbi_ecall_return *out);
+
+	/** platform specific handler to fixup load fault */
+	int (*emulate_load)(int rlen, union sbi_reg_data *out_val,
+			    struct sbi_trap_regs *regs,
+			    const struct sbi_trap_info *orig_trap);
+	/** platform specific handler to fixup store fault */
+	int (*emulate_store)(int wlen, union sbi_reg_data in_val,
+			     struct sbi_trap_regs *regs,
+			     const struct sbi_trap_info *orig_trap);
 };
 
 /** Platform default per-HART stack size for exception/interrupt handling */
-- 
2.7.4




More information about the opensbi mailing list