From 28fd88e0dd66728b22cd792deb5a1e8636f36ed3 Mon Sep 17 00:00:00 2001 From: Richard Qin Date: Sat, 13 Dec 2025 23:21:03 +0800 Subject: feat: add preemptive scheduling, SBI timer support and FDT parser. --- src/kernel/sbi.cc | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/kernel/sbi.cc (limited to 'src/kernel/sbi.cc') diff --git a/src/kernel/sbi.cc b/src/kernel/sbi.cc new file mode 100644 index 0000000..442d219 --- /dev/null +++ b/src/kernel/sbi.cc @@ -0,0 +1,34 @@ +#include "common/types.h" + +namespace SBI +{ + struct sbiret + { + long error; + long value; + }; + + struct sbiret sbi_call(int ext, int fid, uint64 arg0, uint64 arg1, uint64 arg2) + { + struct sbiret ret; + register uint64 a0 asm("a0") = arg0; + register uint64 a1 asm("a1") = arg1; + register uint64 a2 asm("a2") = arg2; + register uint64 a6 asm("a6") = fid; + register uint64 a7 asm("a7") = ext; + + asm volatile( + "ecall" + : "=r"(a0), "=r"(a1) + : "r"(a0), "r"(a1), "r"(a2), "r"(a6), "r"(a7) + : "memory"); + ret.error = a0; + ret.value = a1; + return ret; + } + + void set_timer(uint64 stime_value) + { + sbi_call(0x54494D45, 0, stime_value, 0, 0); + } +} \ No newline at end of file -- cgit v1.2.3