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 +#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"); \ diff --git a/include/sbi/sbi_ecall_interface.h b/include/sbi/sbi_ecall_interface.h index 6c12272..0d8e5ea 100644 --- a/include/sbi/sbi_ecall_interface.h +++ b/include/sbi/sbi_ecall_interface.h @@ -24,29 +24,4 @@ /* clang-format on */ -#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++); -} - #endif