Added SBI functions support

master
vhaudiquet 1 year ago
parent 3f6657fe00
commit 9da9b5045f
  1. 11
      src/devices/sbi/sbi.c
  2. 11
      src/devices/sbi/sbi.h

@ -10,6 +10,11 @@ void sbi_call(rv32_cpu_t* cpu, uint32_t extension_id, uint32_t func_id)
{ {
switch(func_id) switch(func_id)
{ {
case SBI_FUNCTION_GET_SPEC_VERSION:
// Format: [31(reserved,0) 7 bits(major) 24 bits(minor)]
// Version 2.0
cpu->regs.a0 = 0x2000000;
break;
case SBI_FUNCTION_GET_MVENDOR_ID: case SBI_FUNCTION_GET_MVENDOR_ID:
cpu->regs.a0 = 0; cpu->regs.a0 = 0;
break; break;
@ -25,6 +30,12 @@ void sbi_call(rv32_cpu_t* cpu, uint32_t extension_id, uint32_t func_id)
} }
break; break;
} }
case SBI_EXTENSION_SET_TIMER:
{
// TODO : Correctly implement that
cpu->regs.a0 = 0;
break;
}
case SBI_EXTENSION_LEGACY_CONSOLE_PUTCHAR: case SBI_EXTENSION_LEGACY_CONSOLE_PUTCHAR:
{ {
printf("%c", cpu->regs.a0); printf("%c", cpu->regs.a0);

@ -3,6 +3,17 @@
#include "cpu/rv32cpu.h" #include "cpu/rv32cpu.h"
/* SBI Base extension */
#define SBI_EXTENSION_BASE 0x10
#define SBI_FUNCTION_GET_SPEC_VERSION 0x0
#define SBI_FUNCTION_GET_IMPL_ID 0x1
#define SBI_FUNCTION_GET_IMPL_VERSION 0x2
#define SBI_FUNCTION_PROBE_EXTENSION 0x3
#define SBI_FUNCTION_GET_MVENDOR_ID 0x4
#define SBI_FUNCTION_GET_MARCH_ID 0x5
#define SBI_FUNCTION_GET_MIMPL_ID 0x6
#define SBI_EXTENSION_SET_TIMER 0x0
#define SBI_EXTENSION_LEGACY_CONSOLE_PUTCHAR 0x1 #define SBI_EXTENSION_LEGACY_CONSOLE_PUTCHAR 0x1
#define SBI_EXTENSION_LEGACY_SHUTDOWN 0x8 #define SBI_EXTENSION_LEGACY_SHUTDOWN 0x8

Loading…
Cancel
Save