summaryrefslogtreecommitdiff
path: root/src/arch/amd64/paging.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/amd64/paging.c')
-rw-r--r--src/arch/amd64/paging.c69
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;