mirror of
https://github.com/riscv-software-src/opensbi.git
synced 2025-08-24 23:41:23 +01:00

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 <inochiama@outlook.com> Reviewed-by: Anup Patel <anup@brainfault.org>
61 lines
1.6 KiB
C
61 lines
1.6 KiB
C
/*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*
|
|
* Copyright (c) 2019 Western Digital Corporation or its affiliates.
|
|
*
|
|
* Authors:
|
|
* Anup Patel <anup.patel@wdc.com>
|
|
*/
|
|
|
|
#include <sbi/sbi_ecall_interface.h>
|
|
#include <sbi/sbi_string.h>
|
|
|
|
struct sbiret {
|
|
unsigned long error;
|
|
unsigned long value;
|
|
};
|
|
|
|
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;
|
|
|
|
return ret;
|
|
}
|
|
|
|
static inline void sbi_ecall_console_puts(const char *str)
|
|
{
|
|
sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE,
|
|
sbi_strlen(str), (unsigned long)str, 0, 0, 0, 0);
|
|
}
|
|
|
|
#define wfi() \
|
|
do { \
|
|
__asm__ __volatile__("wfi" ::: "memory"); \
|
|
} while (0)
|
|
|
|
void test_main(unsigned long a0, unsigned long a1)
|
|
{
|
|
sbi_ecall_console_puts("\nTest payload running\n");
|
|
|
|
while (1)
|
|
wfi();
|
|
}
|