summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorInochi Amaoto <[email protected]>2023-08-30 08:34:43 +0800
committerAnup Patel <[email protected]>2023-09-06 16:50:50 +0530
commita9cffd65324caf5512e3ebb5b08d5b85efd0a23c (patch)
tree420d1271ba3718c98485f290759e1f8e34209152
parentee1f83ca848d3639b808e52719bc7111f5a1be7c (diff)
firmware: payload: test: Change to SBI v2.0 DBCN ecalls
As the the "Console Putchar" extension is already legacy and may be removed in the furture. So replace it with the SBI v2.0 "DBCN" extension. Signed-off-by: Inochi Amaoto <[email protected]> Reviewed-by: Anup Patel <[email protected]>
-rw-r--r--firmware/payloads/test_main.c49
1 files changed, 30 insertions, 19 deletions
diff --git a/firmware/payloads/test_main.c b/firmware/payloads/test_main.c
index ae2ed4f5..194dbbe6 100644
--- a/firmware/payloads/test_main.c
+++ b/firmware/payloads/test_main.c
@@ -8,31 +8,42 @@
*/
#include <sbi/sbi_ecall_interface.h>
+#include <sbi/sbi_string.h>
-#define SBI_ECALL(__eid, __fid, __a0, __a1, __a2) \
- ({ \
- register unsigned long a0 asm("a0") = (unsigned long)(__a0); \
- register unsigned long a1 asm("a1") = (unsigned long)(__a1); \
- register unsigned long a2 asm("a2") = (unsigned long)(__a2); \
- register unsigned long a6 asm("a6") = (unsigned long)(__fid); \
- register unsigned long a7 asm("a7") = (unsigned long)(__eid); \
- asm volatile("ecall" \
- : "+r"(a0) \
- : "r"(a1), "r"(a2), "r"(a6), "r"(a7) \
- : "memory"); \
- a0; \
- })
+struct sbiret {
+ unsigned long error;
+ unsigned long value;
+};
-#define SBI_ECALL_0(__eid, __fid) SBI_ECALL(__eid, __fid, 0, 0, 0)
-#define SBI_ECALL_1(__eid, __fid, __a0) SBI_ECALL(__eid, __fid, __a0, 0, 0)
-#define SBI_ECALL_2(__eid, __fid, __a0, __a1) SBI_ECALL(__eid, __fid, __a0, __a1, 0)
+struct sbiret sbi_ecall(int ext, int fid, unsigned long arg0,
+ unsigned long arg1, unsigned long arg2,
+ unsigned long arg3, unsigned long arg4,
+ unsigned long arg5)
+{
+ struct sbiret ret;
+
+ register unsigned long a0 asm ("a0") = (unsigned long)(arg0);
+ register unsigned long a1 asm ("a1") = (unsigned long)(arg1);
+ register unsigned long a2 asm ("a2") = (unsigned long)(arg2);
+ register unsigned long a3 asm ("a3") = (unsigned long)(arg3);
+ register unsigned long a4 asm ("a4") = (unsigned long)(arg4);
+ register unsigned long a5 asm ("a5") = (unsigned long)(arg5);
+ register unsigned long a6 asm ("a6") = (unsigned long)(fid);
+ register unsigned long a7 asm ("a7") = (unsigned long)(ext);
+ asm volatile ("ecall"
+ : "+r" (a0), "+r" (a1)
+ : "r" (a2), "r" (a3), "r" (a4), "r" (a5), "r" (a6), "r" (a7)
+ : "memory");
+ ret.error = a0;
+ ret.value = a1;
-#define sbi_ecall_console_putc(c) SBI_ECALL_1(SBI_EXT_0_1_CONSOLE_PUTCHAR, 0, (c))
+ return ret;
+}
static inline void sbi_ecall_console_puts(const char *str)
{
- while (str && *str)
- sbi_ecall_console_putc(*str++);
+ sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE,
+ sbi_strlen(str), (unsigned long)str, 0, 0, 0, 0);
}
#define wfi() \