diff options
| author | Aleksa Vuckovic <aleksa@vuckovic.cc> | 2023-02-25 06:56:01 +0100 |
|---|---|---|
| committer | Aleksa Vuckovic <aleksa@vuckovic.cc> | 2023-02-25 08:45:09 +0100 |
| commit | 239900af293f192931391dc5579afab39a43e6c6 (patch) | |
| tree | 72d7f87ee6adf5aa84b78436197e03e61fba8d97 /kernel/src/mem/paging.c | |
| parent | aaa23fffd02fb49cdbc56a480dbb5a8fa95bff38 (diff) | |
clang-format
Diffstat (limited to 'kernel/src/mem/paging.c')
| -rw-r--r-- | kernel/src/mem/paging.c | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/kernel/src/mem/paging.c b/kernel/src/mem/paging.c index b8c44c0..aa61c5d 100644 --- a/kernel/src/mem/paging.c +++ b/kernel/src/mem/paging.c @@ -1,7 +1,6 @@ #include <types.h> #include <paging.h> #include <panic.h> - #include <heap.h> #include <libk/serial_stdio.h> #include <libk/stdio.h> @@ -21,24 +20,28 @@ void map_addr(uint64_t virt, uint64_t phys, uint32_t flags) size_t pt_lvl4_i = (virt >> 39) % 0x200; // 512gb entry size_t pt_lvl3_i = (virt >> 30) % 0x200; // 1gb entry size_t pt_lvl2_i = (virt >> 21) % 0x200; // 2mb entry -// size_t pt_lvl1_i = (virt >> 12) % 0x200; // 4kb entry + // size_t pt_lvl1_i = (virt >> 12) % 0x200; // 4kb entry - uint64_t* pt_lvl3 = (uint64_t*)(page_table_lvl4[pt_lvl4_i] + KERNEL_VMA); + uint64_t *pt_lvl3 = + (uint64_t *)(page_table_lvl4[pt_lvl4_i] + KERNEL_VMA); if (!((uint64_t)pt_lvl3 & FLAG_PRESENT)) { - pt_lvl3 = (uint64_t*)kalloc(4096); + pt_lvl3 = (uint64_t *)kalloc(4096); memset(pt_lvl3, 0, 4096); - page_table_lvl4[pt_lvl4_i] = ((uint64_t)pt_lvl3 - KERNEL_VMA) | flags; + page_table_lvl4[pt_lvl4_i] = ((uint64_t)pt_lvl3 - KERNEL_VMA) | + flags; } else { - pt_lvl3 = (uint64_t*)((uint64_t)pt_lvl3 - (uint64_t)pt_lvl3 % 4096); + pt_lvl3 = (uint64_t *)((uint64_t)pt_lvl3 - + (uint64_t)pt_lvl3 % 4096); } - uint64_t* pt_lvl2 = (uint64_t*)(pt_lvl3[pt_lvl3_i] + KERNEL_VMA); + uint64_t *pt_lvl2 = (uint64_t *)(pt_lvl3[pt_lvl3_i] + KERNEL_VMA); if (!((uint64_t)pt_lvl2 & FLAG_PRESENT)) { - pt_lvl2 = (uint64_t*)kalloc(4096); + pt_lvl2 = (uint64_t *)kalloc(4096); memset(pt_lvl2, 0, 4096); pt_lvl3[pt_lvl3_i] = ((uint64_t)pt_lvl2 - KERNEL_VMA) | flags; } else { - pt_lvl2 = (uint64_t*)((uint64_t)pt_lvl2 - (uint64_t)pt_lvl2 % 4096); + pt_lvl2 = (uint64_t *)((uint64_t)pt_lvl2 - + (uint64_t)pt_lvl2 % 4096); } pt_lvl2[pt_lvl2_i] = phys | flags | FLAG_HUGE; @@ -46,11 +49,15 @@ void map_addr(uint64_t virt, uint64_t phys, uint32_t flags) void init_paging(void) { - page_table_lvl4[511] = (uint64_t)page_table_lvl3 - KERNEL_VMA + (FLAG_PRESENT | FLAG_WRITABLE | FLAG_USER); - page_table_lvl3[510] = (uint64_t)page_table_lvl2 - KERNEL_VMA + (FLAG_PRESENT | FLAG_WRITABLE | FLAG_USER); + page_table_lvl4[511] = (uint64_t)page_table_lvl3 - KERNEL_VMA + + (FLAG_PRESENT | FLAG_WRITABLE | FLAG_USER); + page_table_lvl3[510] = (uint64_t)page_table_lvl2 - KERNEL_VMA + + (FLAG_PRESENT | FLAG_WRITABLE | FLAG_USER); // 16mb kernel + 32mb heap + 2mb (32kb stack * 64 threads) = first 50mb for (size_t i = 0; i < 25; i++) { - page_table_lvl2[i] = (uint64_t)0x0 + PAGE_SIZE * i + (FLAG_PRESENT | FLAG_WRITABLE | FLAG_USER | FLAG_HUGE); + page_table_lvl2[i] = + (uint64_t)0x0 + PAGE_SIZE * i + + (FLAG_PRESENT | FLAG_WRITABLE | FLAG_USER | FLAG_HUGE); } load_pt_lvl4(page_table_lvl4); @@ -59,7 +66,7 @@ void init_paging(void) void page_fault(uint64_t error) { uint64_t addr; - __asm__ __volatile__ ("mov %%cr2, %0;" : "=r"(addr) : : "memory"); + __asm__ __volatile__("mov %%cr2, %0;" : "=r"(addr) : : "memory"); printf("address: 0x%x, error code: 0x%x\n", addr, error); |
