From c9a1266d219a83882735a3a8304f3824e0219cdb Mon Sep 17 00:00:00 2001 From: Benji Dial Date: Mon, 15 Jan 2024 15:44:20 -0500 Subject: redo application paging and system calls, rename mercury to hilbert --- kernel/paging.cpp | 37 ++++++++++--------------------------- 1 file changed, 10 insertions(+), 27 deletions(-) (limited to 'kernel/paging.cpp') diff --git a/kernel/paging.cpp b/kernel/paging.cpp index 17b61f4..d8869fc 100644 --- a/kernel/paging.cpp +++ b/kernel/paging.cpp @@ -1,5 +1,5 @@ -#include -#include +#include +#include //see also ../documentation/memory.txt @@ -7,7 +7,7 @@ extern "C" { uint64_t __kernel_p4_paddr; } -namespace mercury::kernel::paging { +namespace hilbert::kernel::paging { static constexpr uint64_t kernel_vram_start = 0xffffffffc0000000; static constexpr uint64_t kernel_vram_end = 0xffffffffffe00000; @@ -38,11 +38,9 @@ namespace mercury::kernel::paging { uint64_t kernel_p4e; - uint64_t encode_pte( - uint64_t addr, bool user, bool write, bool execute, bool ps - ) { + uint64_t encode_pte(uint64_t addr, bool user, bool write, bool execute) { return (addr & 0x0000ffffffffffff) | (execute ? 0 : (1ULL << 63)) - | (ps << 7) | (user << 2) | (write << 1) | 1; + | (user << 2) | (write << 1) | 1; } void init_kernel_page_tables(uint64_t kernel_offset) { @@ -50,15 +48,15 @@ namespace mercury::kernel::paging { for (int i = 0; i < 511; ++i) kernel_p4[i] = 0; kernel_p4e = encode_pte( - (uint64_t)kernel_p3 - kernel_offset, false, true, true, false); + (uint64_t)kernel_p3 - kernel_offset, false, true, true); kernel_p4[511] = kernel_p4e; for (int i = 0; i < 511; ++i) kernel_p3[i] = 0; kernel_p3[511] = encode_pte( - (uint64_t)kernel_p2 - kernel_offset, false, true, true, false); + (uint64_t)kernel_p2 - kernel_offset, false, true, true); for (int i = 0; i < 512; ++i) kernel_p2[i] = encode_pte( - (uint64_t)kernel_p1s + 4096 * i - kernel_offset, false, true, true, false); + (uint64_t)kernel_p1s + 4096 * i - kernel_offset, false, true, true); for (int i = 0; i < 512 * 512; ++i) kernel_p1s[i] = 0; } @@ -66,7 +64,7 @@ namespace mercury::kernel::paging { void map_kernel_page( uint64_t paddr, uint64_t vaddr, bool write, bool execute) { uint64_t i = (vaddr - kernel_vram_start) / 4096; - kernel_p1s[i] = encode_pte(paddr, false, write, execute, false); + kernel_p1s[i] = encode_pte(paddr, false, write, execute); } void unmap_kernel_page(uint64_t vaddr) { @@ -77,7 +75,7 @@ namespace mercury::kernel::paging { ); } - static uint64_t take_pram_page() { + uint64_t take_pram_page() { for (uint64_t i = 0; i < pram_pages / 64; ++i) if (~pram_usage_bitmap[i] != 0) for (int j = 0; j < 64; ++j) @@ -89,21 +87,6 @@ namespace mercury::kernel::paging { return 0; } - uint64_t take_2mib_pram_page() { - for (uint64_t i = 0; i < pram_pages / 512; ++i) { - for (int j = 0; j < 8; ++j) - if (pram_usage_bitmap[i * 8 + j] != 0) - goto next_i; - for (int j = 0; j < 8; ++j) - pram_usage_bitmap[i * 8 + j] = ~0ULL; - return 0x200000 * i; - next_i: - ; - } - //TODO: handle error - return 0; - } - void map_kernel_stacks() { for (uint64_t vaddr = syscall_stack_bottom; vaddr < syscall_stack_top; vaddr += 4096) -- cgit v1.2.3