From ffc782f8740027d21793c37c6094ebed06d1dfd2 Mon Sep 17 00:00:00 2001 From: Danny Holman Date: Wed, 29 May 2024 00:26:59 -0500 Subject: arch: i386: fix several bugs in paging subsystem Fix several triple-faulting bugs in the paging initialization routines. These include causing a page fault during physical memory manager initialization, causing a page fault during paging initialization and other double-faulting and triple-faulting bugs. Signed-off-by: Danny Holman --- arch/i386/include/kernel/paging.h | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'arch/i386/include') diff --git a/arch/i386/include/kernel/paging.h b/arch/i386/include/kernel/paging.h index e949e32..5999986 100644 --- a/arch/i386/include/kernel/paging.h +++ b/arch/i386/include/kernel/paging.h @@ -3,7 +3,6 @@ #include #include -#include #include #define PD_PRES 0x0001 @@ -26,15 +25,18 @@ #define PGROUNDUP(size) (((size)+PAGE_SIZE-1) & ~(PAGE_SIZE-1)) #define PGROUNDDN(size) (((size)) & ~(PAGE_SIZE-1)) -int init_page_directory(uintptr_t *pd, int user); -void enable_paging(uintptr_t pd_addr); +#define GET_PADDR(x) (((uint32_t)(x)) - 0xC0000000) +#define GET_VADDR(x) (((uint32_t)(x)) + 0xC0000000) -void paging_init(void); -void page_fault_handler(struct regs *regs); +#define GET_PDX(x) (((uintptr_t)(x) >> 22) & 0x3FF) +#define GET_PTX(x) (((uintptr_t)(x) >> 12) & 0x3FF) -uint32_t get_vaddr(uintptr_t paddr); +uintptr_t* init_page_table(void); +void paging_init(void); void map_page(uint32_t *pd, uintptr_t paddr, uintptr_t vaddr, uint32_t flags); void unmap_page(uint32_t *pd, uintptr_t vaddr); +void page_fault_handler(struct isr_frame *frame); + #endif -- cgit v1.2.3