From 45f420a338ea02225bb8a98c9aca5eed8d6a23ae Mon Sep 17 00:00:00 2001 From: Steven Le Rouzic Date: Sun, 2 Jun 2024 00:26:57 +0200 Subject: Initial commit --- kernel/start.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 kernel/start.c (limited to 'kernel/start.c') diff --git a/kernel/start.c b/kernel/start.c new file mode 100644 index 0000000..b7170ae --- /dev/null +++ b/kernel/start.c @@ -0,0 +1,51 @@ +#include "kernel/lib.h" +#include "kernel/riscv.h" +#include "kernel/kalloc.h" +#include "kernel/vm.h" +#include "kernel/cpu.h" + +Cpu cpus[MAX_CPU]; + +extern uint32_t _bss_start; +extern uint32_t _bss_end; +extern uint32_t _ram_end; + +void kstrap() +{ + panic("kstrap"); +} + +void kstart() +{ + kalloc_init(); + kvm_init(); + + panic("kstart: end"); +} + +void kinit() +{ + // @Todo Initialize CPUs + Cpu null_cpu = {0}; + cpus[0] = null_cpu; + + // Clear the BSS section + for (uint32_t* ptr = &_bss_start; ptr < &_bss_end; ++ptr) + { + *ptr = 0U; + } + + w_mideleg(0xFFFF); + w_medeleg(0xFFFF); + + w_sstatus(SSTATUS_SPIE | SSTATUS_SPP_S); + w_sie(SIE_SEIE); + w_sepc(&kstart); + w_stvec(&kstrap); + + w_pmpcfg0(PMPCFG_RW | PMPCFG_X | PMPCFG_TOR); + w_pmpaddr0(((uint32_t)&_ram_end) >> PMPADDR_SHIFT); + + __asm__ volatile("sret"); +} + -- cgit