From 082d2dcd4f60b202a1b0000a46167e74f4eab736 Mon Sep 17 00:00:00 2001 From: vhaudiquet Date: Fri, 20 Oct 2023 11:28:12 +0200 Subject: [PATCH] Added mock SBI_EXTENSION_TIMER --- src/devices/sbi/sbi.c | 26 ++++++++++++++++++++++++++ src/devices/sbi/sbi.h | 5 +++++ 2 files changed, 31 insertions(+) diff --git a/src/devices/sbi/sbi.c b/src/devices/sbi/sbi.c index 4f05820..04cb57d 100644 --- a/src/devices/sbi/sbi.c +++ b/src/devices/sbi/sbi.c @@ -16,6 +16,19 @@ void sbi_call(rv32_cpu_t* cpu, uint32_t extension_id, uint32_t func_id) cpu->regs.a0 = 0; cpu->regs.a1 = 0x2000000; break; + case SBI_FUNCTION_GET_IMPL_ID: + cpu->regs.a0 = 0; + cpu->regs.a1 = 0; + break; + case SBI_FUNCTION_GET_IMPL_VERSION: + cpu->regs.a0 = 0; + cpu->regs.a1 = 0; + break; + case SBI_FUNCTION_PROBE_EXTENSION: + // For now, we say that everything is available + cpu->regs.a0 = 0; + cpu->regs.a1 = 1; + break; case SBI_FUNCTION_GET_MVENDOR_ID: cpu->regs.a0 = 0; cpu->regs.a1 = 0; @@ -34,6 +47,19 @@ void sbi_call(rv32_cpu_t* cpu, uint32_t extension_id, uint32_t func_id) } break; } + case SBI_EXTENSION_TIMER: + { + switch(func_id) + { + case SBI_FUNCTION_SET_TIMER: + cpu->regs.a0 = 0; + cpu->regs.a1 = 0; + break; + default: + fprintf(stderr, "sbi_call: unknown function id 0x%x for timer extension\n", func_id); + break; + } + } case SBI_EXTENSION_SET_TIMER: { // TODO : Correctly implement that diff --git a/src/devices/sbi/sbi.h b/src/devices/sbi/sbi.h index 45d8e34..0609c42 100644 --- a/src/devices/sbi/sbi.h +++ b/src/devices/sbi/sbi.h @@ -13,6 +13,11 @@ #define SBI_FUNCTION_GET_MARCH_ID 0x5 #define SBI_FUNCTION_GET_MIMPL_ID 0x6 +/* SBI Timer extension */ +#define SBI_EXTENSION_TIMER 0x54494d45 +#define SBI_FUNCTION_SET_TIMER 0x0 + +/* SBI legacy */ #define SBI_EXTENSION_SET_TIMER 0x0 #define SBI_EXTENSION_LEGACY_CONSOLE_PUTCHAR 0x1 #define SBI_EXTENSION_LEGACY_SHUTDOWN 0x8