summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
authorAtish Patra <atish.patra@wdc.com>2019-10-02 23:59:35 +0300
committerAnup Patel <anup@brainfault.org>2019-10-03 06:21:39 +0300
commit8925e3865cf7317cae40a061ad2a3555b7ae27bf (patch)
tree3d08cbdc18c25a583279f72f4077a13794324a97 /firmware
parente561c6303639ed510183da25d3d54555a53371c9 (diff)
downloadopensbi-8925e3865cf7317cae40a061ad2a3555b7ae27bf.tar.xz
Test: Move test payload related code out of interface header
Test payload uses an SBI call and uses the macros defined in interface header which is not the correct place to have these definitions. The interface header file should be used to keep SBI specification related macros. Keep all the test payload related code in test itself. Signed-off-by: Atish Patra <atish.patra@wdc.com> Reviewed-by: Anup Patel <anup.patel@wdc.com>
Diffstat (limited to 'firmware')
-rw-r--r--firmware/payloads/test_main.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/firmware/payloads/test_main.c b/firmware/payloads/test_main.c
index 04a5be5..eba5e4d 100644
--- a/firmware/payloads/test_main.c
+++ b/firmware/payloads/test_main.c
@@ -9,6 +9,31 @@
#include <sbi/sbi_ecall_interface.h>
+#define SBI_ECALL(__num, __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 a7 asm("a7") = (unsigned long)(__num); \
+ asm volatile("ecall" \
+ : "+r"(a0) \
+ : "r"(a1), "r"(a2), "r"(a7) \
+ : "memory"); \
+ a0; \
+ })
+
+#define SBI_ECALL_0(__num) SBI_ECALL(__num, 0, 0, 0)
+#define SBI_ECALL_1(__num, __a0) SBI_ECALL(__num, __a0, 0, 0)
+#define SBI_ECALL_2(__num, __a0, __a1) SBI_ECALL(__num, __a0, __a1, 0)
+
+#define sbi_ecall_console_putc(c) SBI_ECALL_1(SBI_ECALL_CONSOLE_PUTCHAR, (c))
+
+static inline void sbi_ecall_console_puts(const char *str)
+{
+ while (str && *str)
+ sbi_ecall_console_putc(*str++);
+}
+
#define wfi() \
do { \
__asm__ __volatile__("wfi" ::: "memory"); \