aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBo Gan <ganboing@gmail.com>2024-03-05 18:35:39 -0800
committerAnup Patel <anup@brainfault.org>2024-03-11 10:54:14 +0530
commitddf3b649f1edd9eb5ad171c7faadf34acfb942f0 (patch)
tree14caafa4a0f166ba645e2f81aadd5e337ea470f6
parent4c112650bbb0611de4939c749e2a34c8168e09f7 (diff)
downloadopensbi-ddf3b649f1edd9eb5ad171c7faadf34acfb942f0.zip
opensbi-ddf3b649f1edd9eb5ad171c7faadf34acfb942f0.tar.gz
opensbi-ddf3b649f1edd9eb5ad171c7faadf34acfb942f0.tar.bz2
include: sbi: add emulate_load/store handler to platform ops
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@gmail.com> Reviewed-by: Anup Patel <anup@brainfault.org>
-rw-r--r--include/sbi/sbi_platform.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/include/sbi/sbi_platform.h b/include/sbi/sbi_platform.h
index 2fb33e1..f962aa4 100644
--- a/include/sbi/sbi_platform.h
+++ b/include/sbi/sbi_platform.h
@@ -53,6 +53,7 @@ struct sbi_domain_memregion;
struct sbi_ecall_return;
struct sbi_trap_regs;
struct sbi_hart_features;
+union sbi_ldst_data;
/** Possible feature flags of a platform */
enum sbi_platform_features {
@@ -139,6 +140,13 @@ 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, unsigned long addr,
+ union sbi_ldst_data *out_val);
+ /** platform specific handler to fixup store fault */
+ int (*emulate_store)(int wlen, unsigned long addr,
+ union sbi_ldst_data in_val);
};
/** Platform default per-HART stack size for exception/interrupt handling */