summaryrefslogtreecommitdiff
path: root/kernel/src/mem/paging.c
diff options
context:
space:
mode:
authorAleksa Vuckovic <aleksa@vuckovic.cc>2023-02-25 06:56:01 +0100
committerAleksa Vuckovic <aleksa@vuckovic.cc>2023-02-25 08:45:09 +0100
commit239900af293f192931391dc5579afab39a43e6c6 (patch)
tree72d7f87ee6adf5aa84b78436197e03e61fba8d97 /kernel/src/mem/paging.c
parentaaa23fffd02fb49cdbc56a480dbb5a8fa95bff38 (diff)
clang-format
Diffstat (limited to 'kernel/src/mem/paging.c')
-rw-r--r--kernel/src/mem/paging.c33
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);