[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