[PATCH] paravirt place holder for ecall

dave.patel at riscstar.com dave.patel at riscstar.com
Fri Feb 13 09:13:59 PST 2026


From: Dave Patel <dave.patel at riscstar.com>

Signed-off-by: Dave Patel <dave.patel at riscstar.com>
---
 include/sbi/sbi_ecall_interface.h |  2 ++
 lib/sbi/Kconfig                   |  4 +++
 lib/sbi/objects.mk                |  3 ++
 lib/sbi/sbi_ecall_addn.c          | 54 +++++++++++++++++++++++++++++++
 4 files changed, 63 insertions(+)
 create mode 100644 lib/sbi/sbi_ecall_addn.c

diff --git a/include/sbi/sbi_ecall_interface.h b/include/sbi/sbi_ecall_interface.h
index 76624e3f..5abfee28 100644
--- a/include/sbi/sbi_ecall_interface.h
+++ b/include/sbi/sbi_ecall_interface.h
@@ -38,6 +38,7 @@
 #define SBI_EXT_SSE				0x535345
 #define SBI_EXT_FWFT				0x46574654
 #define SBI_EXT_MPXY				0x4D505859
+#define SBI_EXT_ADDN				0x3342634E
 
 /* SBI function IDs for BASE extension*/
 #define SBI_EXT_BASE_GET_SPEC_VERSION		0x0
@@ -468,6 +469,7 @@ enum sbi_sse_state {
 #define SBI_EXT_MPXY_SEND_MSG_WITH_RESP		0x5
 #define SBI_EXT_MPXY_SEND_MSG_WITHOUT_RESP	0x6
 #define SBI_EXT_MPXY_GET_NOTIFICATION_EVENTS	0x7
+#define MPXY_FUNC_ADD 0x8
 
 /* SBI base specification related macros */
 #define SBI_SPEC_VERSION_MAJOR_OFFSET		24
diff --git a/lib/sbi/Kconfig b/lib/sbi/Kconfig
index c6cc04bc..e9117046 100644
--- a/lib/sbi/Kconfig
+++ b/lib/sbi/Kconfig
@@ -10,6 +10,10 @@ config SBI_ECALL_TIME
 	bool "Timer extension"
 	default y
 
+config SBI_ECALL_ADDN
+	bool "Debug ADDN extension"
+	default y
+
 config SBI_ECALL_RFENCE
 	bool "RFENCE extension"
 	default y
diff --git a/lib/sbi/objects.mk b/lib/sbi/objects.mk
index bfe196c9..3e9d1569 100644
--- a/lib/sbi/objects.mk
+++ b/lib/sbi/objects.mk
@@ -19,6 +19,9 @@ libsbi-objs-y += sbi_ecall_exts.carray.o
 carray-sbi_ecall_exts-$(CONFIG_SBI_ECALL_TIME) += ecall_time
 libsbi-objs-$(CONFIG_SBI_ECALL_TIME) += sbi_ecall_time.o
 
+carray-sbi_ecall_exts-$(CONFIG_SBI_ECALL_DBCN) += ecall_addn
+libsbi-objs-$(CONFIG_SBI_ECALL_DBCN) += sbi_ecall_addn.o
+
 carray-sbi_ecall_exts-$(CONFIG_SBI_ECALL_RFENCE) += ecall_rfence
 libsbi-objs-$(CONFIG_SBI_ECALL_RFENCE) += sbi_ecall_rfence.o
 
diff --git a/lib/sbi/sbi_ecall_addn.c b/lib/sbi/sbi_ecall_addn.c
new file mode 100644
index 00000000..73e7dd53
--- /dev/null
+++ b/lib/sbi/sbi_ecall_addn.c
@@ -0,0 +1,54 @@
+/* SPDX-License-Identifier: GPL-2.0
+ *
+ * Copyright (c) 2026 RISCstar Solutions.
+ *
+ * Authors:
+ *     Dave Patel <dave.patel at riscstar.com>
+ */
+
+#include <sbi/sbi_console.h>
+#include <sbi/sbi_domain.h>
+#include <sbi/sbi_error.h>
+#include <sbi/sbi_ecall.h>
+#include <sbi/sbi_ecall_interface.h>
+#include <sbi/sbi_trap.h>
+#include <sbi/riscv_asm.h>
+#include <sbi/sbi_hart_protection.h>
+#include <sbi_utils/irqchip/aplic.h>
+
+static int sbi_ecall_addn_handler(unsigned long extid,
+                                 unsigned long funcid,
+                                 struct sbi_trap_regs *regs,
+                                 struct sbi_ecall_return *out)
+{
+       /*
+       // This is were the virtirq vlaue is fetched
+       if (prev_mode == PRV_S && sbi_emulate_irq_read(&irq_val))
+               return truly_illegal_insn(insn, regs);
+       */
+
+    unsigned long a = regs->a0;
+    unsigned long b = regs->a1;
+
+    unsigned long result = a + b;
+
+    out->value = result;
+
+    return SBI_SUCCESS;
+}
+
+
+struct sbi_ecall_extension ecall_addn;
+
+static int sbi_ecall_addn_register_extensions(void)
+{
+    return sbi_ecall_register_extension(&ecall_addn);
+}
+
+struct sbi_ecall_extension ecall_addn = {
+    .name                   = "addn",
+    .extid_start            = SBI_EXT_ADDN,
+    .extid_end              = SBI_EXT_ADDN,
+    .register_extensions    = sbi_ecall_addn_register_extensions,
+    .handle         = sbi_ecall_addn_handler,
+};
-- 
2.43.0




More information about the opensbi mailing list