diff options
Diffstat (limited to 'src/arch/amd64/paging.c')
-rw-r--r-- | src/arch/amd64/paging.c | 69 |
1 files changed, 18 insertions, 51 deletions
diff --git a/src/arch/amd64/paging.c b/src/arch/amd64/paging.c index 18eb079..607267e 100644 --- a/src/arch/amd64/paging.c +++ b/src/arch/amd64/paging.c @@ -68,25 +68,18 @@ static struct pdpte *pdpt_mapped = (void *) (uintptr_t) 0x201000; static struct pde *pd_mapped = (void *) (uintptr_t) 0x202000; static struct pte *pt_mapped = (void *) (uintptr_t) 0x203000; -static inline void -invlpg(void *addr) -{ +static inline void invlpg(void *addr) { __asm volatile("invlpg (%0)" ::"r" (addr) : "memory"); } -static void -load_addr(void *phys_addr) -{ +static void load_addr(void *phys_addr) { static struct pte *pt = &paging_pt[4]; pt->address = (uint64_t)phys_addr >> 12; pt->flags = F_PRESENT | F_WRITEABLE; invlpg(addr_mapped); } -static void -load_pml4( - void *phys -) { +static void load_pml4(void *phys) { static struct pte *pt = &paging_pt[0]; if ((uint64_t)phys >> 12 == pt->address) return; @@ -95,10 +88,7 @@ load_pml4( invlpg(pml4_mapped); } -static void -load_pdpt( - void *phys -) { +static void load_pdpt(void *phys) { static struct pte *pt = &paging_pt[1]; if ((uint64_t)phys >> 12 == pt->address) return; @@ -107,10 +97,7 @@ load_pdpt( invlpg(pdpt_mapped); } -static void -load_pd( - void *phys -) { +static void load_pd(void *phys) { static struct pte *pt = &paging_pt[2]; if ((uint64_t)phys >> 12 == pt->address) return; @@ -119,10 +106,7 @@ load_pd( invlpg(pdpt_mapped); } -static void -load_pt( - void *phys -) { +static void load_pt(void *phys) { static struct pte *pt = &paging_pt[3]; if ((uint64_t)phys >> 12 == pt->address) return; @@ -135,8 +119,7 @@ load_pt( #define PAG_CANNOT_ALLOC 1 #define PAG_NOT_PRESENT 2 -static int -select_pdpt( +static int select_pdpt( void *virt, unsigned int flags, struct pml4e *root, @@ -165,8 +148,7 @@ select_pdpt( return PAG_SUCCESS; } -static int -select_pd( +static int select_pd( void *virt, unsigned int flags, struct pdpte *pdpt, @@ -195,8 +177,7 @@ select_pd( return PAG_SUCCESS; } -static int -select_pt( +static int select_pt( void *virt, unsigned int flags, struct pde *pd, @@ -225,8 +206,7 @@ select_pt( return PAG_SUCCESS; } -static void -select_page( +static void select_page( void *virt, struct pte *pt, struct pte **res @@ -238,8 +218,7 @@ select_page( return; } -static inline void -try_unmap_pml4(void) { +static inline void try_unmap_pml4(void) { for (int i = 0; i < 512; i++) { if (pml4_mapped[i].flags & F_PRESENT) return; @@ -252,8 +231,7 @@ try_unmap_pml4(void) { } } -static inline void -try_unmap_pdpt(void) { +static inline void try_unmap_pdpt(void) { for (int i = 0; i < 512; i++) { if (pdpt_mapped[i].flags & F_PRESENT) return; @@ -267,8 +245,7 @@ try_unmap_pdpt(void) { try_unmap_pml4(); } -static inline void -try_unmap_pd(void) { +static inline void try_unmap_pd(void) { for (int i = 0; i < 512; i++) { if (pd_mapped[i].flags & F_PRESENT) return; @@ -282,8 +259,7 @@ try_unmap_pd(void) { try_unmap_pdpt(); } -static inline void -try_unmap_pt(void) { +static inline void try_unmap_pt(void) { for (int i = 0; i < 512; i++) { if (pt_mapped[i].flags & F_PRESENT) return; @@ -297,12 +273,10 @@ try_unmap_pt(void) { try_unmap_pd(); } -static void -unmap_page( +static void unmap_page( struct pml4e *root, void *virt ) { - struct pdpte *pdpt; struct pde *pd; struct pte *pt; @@ -331,13 +305,11 @@ unmap_page( return; } -static void -unmap_pages( +static void unmap_pages( struct pml4e *root, void *virt_start, long page_count ) { - uint64_t pml4_o = -1, pdpt_o = -1, pd_o = -1; @@ -397,14 +369,12 @@ unmap_pages( return; } -static int -map_page( +static int map_page( struct pml4e *root, void *virt, void *phys, unsigned int flags ) { - struct pdpte *pdpt; struct pde *pd; struct pte *pt; @@ -430,15 +400,13 @@ map_page( return 0; } -static int -map_pages( +static int map_pages( struct pml4e *root, void *virt_start, void *phys_start, unsigned int flags, long page_count ) { - uint64_t pml4_o = -1, pdpt_o = -1, pd_o = -1; @@ -502,7 +470,6 @@ failed: } void paging_init(void) { - kernel_pml4[0].flags = F_PRESENT | F_WRITEABLE; kernel_pml4[0].address = (uint64_t)(&kernel_pdpt_0) >> 12; |