include: sbi: add emulate_load/store handler to platform ops
authorBo Gan <ganboing@gmail.com>
Wed, 6 Mar 2024 02:35:39 +0000 (18:35 -0800)
committerAnup Patel <anup@brainfault.org>
Mon, 11 Mar 2024 05:24:14 +0000 (10:54 +0530)
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>
include/sbi/sbi_platform.h

index 2fb33e16e4ebb2416732c68f9b5aa8dbc2f8539f..f962aa46e166dac3dda3de2566404e81f1c42122 100644 (file)
@@ -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 */