Skip to content

Commit aa888bc

Browse files
committed
working on pmm
1 parent 6ac98b0 commit aa888bc

5 files changed

Lines changed: 41 additions & 11 deletions

File tree

src/kernel/kinit.c

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,36 +2,40 @@
22
#include <stdbigos/types.h>
33

44
#include "stdbigos/error.h"
5+
#include "virtual_memory/pmm.h"
56
#include "virtual_memory/ram_map.h"
67
#include "virtual_memory/vmm.h"
78

8-
//TEST:
9-
#include <stdbigos/csr.h>
10-
119
#define PANIC(err) if(err) { DEBUG_PRINTF("PANIC - error: %s", get_error_msg(err)); for(;;){continue;} }
1210

13-
extern void kmain();
14-
11+
//TEST:
12+
#include <stdbigos/csr.h>
1513
extern void trap_vector();
16-
1714
void handle_trap(uint64_t scause, uint64_t sepc, uint64_t stval) {
1815
DEBUG_PRINTF("Trap! scause=0x%lx, sepc=0x%lx, stval=0x%lx\n", scause, sepc, stval);
1916
for(;;);
2017
}
2118

19+
20+
extern void kmain();
21+
2222
[[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);
2425
//TEST:
2526
//CSR_WRITE(stvec, ((uintptr_t)trap_vector & ~0x3ULL));
2627

2728

29+
error_t err = initialize_pmm(VMS_SV_48, ram_size);
30+
PANIC(err);
2831
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);
3033
PANIC(err);
3134
asid_t kernel_asid = 0;
3235
err = kernel_asid = create_address_space(PAGE_SIZE_2MB, true, false, &kernel_asid);
3336
PANIC(err);
3437
//TODO: Here kernel maps in VM must be created
38+
3539
//err = enable_virtual_memory(kernel_asid);
3640
PANIC(err);
3741
kmain();

src/kernel/kinit.s

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
sub a3, t0, a2
4242
la a4, ram_start
4343
jal ra, kinit
44-
mv a5, zero
44+
addi a5, zero, 1
4545

4646
halt:
4747
wfi

src/kernel/virtual_memory/pmm.c

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,31 @@
11
#include "pmm.h"
2+
#include "kmalloc.h"
3+
4+
#include <debug/debug_stdio.h>
5+
/*
6+
const i64 shift = 30 - 12 - i * 9; //(* sizeof(gb)) (/ 4 * sizeof(kb)) (/ sizeof(page_size[i]))
7+
const u64 size = (((shift < 0) ? (ram_size >> -shift) : ram_size << shift) + 63) >> 6; //ceil_div(x, 64);
8+
*/
9+
10+
// TODO: replace those functons with stdbit.h
11+
static int first_zero_bit_index(u64 x) {
12+
for(int i = 0; i < 64; ++i) {
13+
if(((x >> i) & 1) == 0) return i;
14+
}
15+
return -1;
16+
}
17+
//ENDTODO
18+
19+
static u64* kilo_page_frame_bitmap = nullptr;
20+
static u16* subpage_busy_counter[5] = { nullptr, nullptr, nullptr, nullptr, nullptr }; //[0] is always null for consistance indexing
21+
static u64
22+
23+
error_t initialize_pmm(virtual_memory_scheme_t vms, u64 ram_size) {
24+
25+
}
226

327
error_t allocate_page_frame(page_size_t page_size, ppn_t* ppnOUT) { // TODO:
4-
return ERR_NONE;
28+
//
529
}
630

731
error_t free_page_frame(ppn_t ppn) { // TODO:

src/kernel/virtual_memory/pmm.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
#include <stdbigos/types.h>
66

77
#include "mm_common.h"
8+
#include "vmm.h"
89

10+
[[nodiscard]] error_t initialize_pmm(virtual_memory_scheme_t vms, u64 ram_size);
911
[[nodiscard]] error_t allocate_page_frame(page_size_t page_size, ppn_t* ppnOUT);
1012
[[nodiscard]] error_t free_page_frame(ppn_t ppn);
1113
[[nodiscard]] error_t set_phisical_memory_region_busy(ppn_t ppn, u64 size_in_bytes);

src/kernel/virtual_memory/vmm.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ static address_space_t address_spaces[address_spaces_size] = {0};
1414
static u64 address_spaces_valid_bit[address_spaces_valid_bit_size] = {0};
1515

1616
// TODO: replace those functons with stdbit.h
17-
int first_zero_bit_index(u64 x) {
17+
static int first_zero_bit_index(u64 x) {
1818
for(int i = 0; i < 64; ++i) {
1919
if(((x >> i) & 1) == 0) return i;
2020
}

0 commit comments

Comments
 (0)