|
2 | 2 | #include <stdbigos/types.h> |
3 | 3 |
|
4 | 4 | #include "stdbigos/error.h" |
| 5 | +#include "virtual_memory/pmm.h" |
5 | 6 | #include "virtual_memory/ram_map.h" |
6 | 7 | #include "virtual_memory/vmm.h" |
7 | 8 |
|
8 | | -//TEST: |
9 | | -#include <stdbigos/csr.h> |
10 | | - |
11 | 9 | #define PANIC(err) if(err) { DEBUG_PRINTF("PANIC - error: %s", get_error_msg(err)); for(;;){continue;} } |
12 | 10 |
|
13 | | -extern void kmain(); |
14 | | - |
| 11 | +//TEST: |
| 12 | +#include <stdbigos/csr.h> |
15 | 13 | extern void trap_vector(); |
16 | | - |
17 | 14 | void handle_trap(uint64_t scause, uint64_t sepc, uint64_t stval) { |
18 | 15 | DEBUG_PRINTF("Trap! scause=0x%lx, sepc=0x%lx, stval=0x%lx\n", scause, sepc, stval); |
19 | 16 | for(;;); |
20 | 17 | } |
21 | 18 |
|
| 19 | + |
| 20 | +extern void kmain(); |
| 21 | + |
22 | 22 | [[noreturn]] void kinit(u64 kernel_adr, u64 kernel_size, u64 kernel_stack_adr, u64 kernel_stack_size, u64 ram_start, u64 ram_size) { |
23 | | - DEBUG_PRINTF("kinit() run\r\n"); |
| 23 | + ram_size = 64; //HACK: this will be later retrieved from device tree |
| 24 | + DEBUG_PRINTF("kinit() run. ram_size: %lu\r\n", ram_size); |
24 | 25 | //TEST: |
25 | 26 | //CSR_WRITE(stvec, ((uintptr_t)trap_vector & ~0x3ULL)); |
26 | 27 |
|
27 | 28 |
|
| 29 | + error_t err = initialize_pmm(VMS_SV_48, ram_size); |
| 30 | + PANIC(err); |
28 | 31 | set_ram_map_address((void*)ram_start); |
29 | | - error_t err = initialize_virtual_memory(VMS_SV_48); |
| 32 | + err = initialize_virtual_memory(VMS_SV_48); |
30 | 33 | PANIC(err); |
31 | 34 | asid_t kernel_asid = 0; |
32 | 35 | err = kernel_asid = create_address_space(PAGE_SIZE_2MB, true, false, &kernel_asid); |
33 | 36 | PANIC(err); |
34 | 37 | //TODO: Here kernel maps in VM must be created |
| 38 | + |
35 | 39 | //err = enable_virtual_memory(kernel_asid); |
36 | 40 | PANIC(err); |
37 | 41 | kmain(); |
|
0 commit comments