mirror of
https://github.com/Tom-on64/kern.git
synced 2026-11-03 18:22:22 +00:00
Changed camelCase to snake_case
This commit is contained in:
+39
-39
@@ -6,10 +6,10 @@
|
||||
|
||||
#define PAGE_DIR_COUNT 256
|
||||
static uint32_t pagedirs[PAGE_DIR_COUNT][1024] __align(4096);
|
||||
static uint8_t pagedirUsed[PAGE_DIR_COUNT];
|
||||
static uint8_t pagedir_used[PAGE_DIR_COUNT];
|
||||
|
||||
// TODO: Should this be initialized? If so, to what?
|
||||
size_t pag_pageCount = 0;
|
||||
size_t pag_page_count = 0;
|
||||
|
||||
// Invalidates the pagedir entry in the CPUs TLB cache
|
||||
static inline void invalidate(uint32_t vaddr) {
|
||||
@@ -17,11 +17,11 @@ static inline void invalidate(uint32_t vaddr) {
|
||||
}
|
||||
|
||||
// Temp paging thing
|
||||
uint32_t tempFrameStart;
|
||||
void pag_registerTempFrame(uint32_t target) { tempFrameStart = target; }
|
||||
uint32_t pag_tempFrame(void) {
|
||||
uint32_t fin = tempFrameStart;
|
||||
tempFrameStart += PAGE_SIZE;
|
||||
uint32_t temp_frame_start;
|
||||
void pag_register_temp_frame(uint32_t target) { temp_frame_start = target; }
|
||||
uint32_t pag_temp_frame(void) {
|
||||
uint32_t fin = temp_frame_start;
|
||||
temp_frame_start += PAGE_SIZE;
|
||||
return fin;
|
||||
}
|
||||
|
||||
@@ -42,21 +42,21 @@ int pag_init(void) {
|
||||
|
||||
// TODO: This sometimes causes a #PF
|
||||
memset(pagedirs, 0, PAGE_SIZE * PAGE_DIR_COUNT);
|
||||
memset(pagedirUsed, 0, PAGE_DIR_COUNT);
|
||||
memset(pagedir_used, 0, PAGE_DIR_COUNT);
|
||||
|
||||
debugf("[pag] Paging initalized.\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void pag_mapPage(uint32_t vaddr, uint32_t paddr, uint32_t flags) {
|
||||
void pag_map(uint32_t vaddr, uint32_t paddr, uint32_t flags) {
|
||||
// Save the pagedir we were in
|
||||
uint32_t* prevpd = NULL;
|
||||
|
||||
// Switch to the init pagedir if in kernel memory
|
||||
if (vaddr >= KERNEL_BASE) {
|
||||
prevpd = pag_getPagedir();
|
||||
if (prevpd != init_pagedir) pag_setPagedir(init_pagedir);
|
||||
prevpd = pag_get_pagedir();
|
||||
if (prevpd != init_pagedir) pag_set_pagedir(init_pagedir);
|
||||
}
|
||||
|
||||
// Extract indecies
|
||||
@@ -68,7 +68,7 @@ void pag_mapPage(uint32_t vaddr, uint32_t paddr, uint32_t flags) {
|
||||
|
||||
// Allocate a pagetab if it didn't exist
|
||||
if (!(pagedir[pdi] & PAGE_FLAG_PRESENT)) {
|
||||
uint32_t tabaddr = pmm_bitmap.ready ? (uint32_t)pmm_allocPage() : pag_tempFrame();
|
||||
uint32_t tabaddr = pmm_bitmap.ready ? (uint32_t)pmm_alloc() : pag_temp_frame();
|
||||
|
||||
pagedir[pdi] = tabaddr |
|
||||
PAGE_FLAG_PRESENT | PAGE_FLAG_WRITE | PAGE_FLAG_OWNER | flags;
|
||||
@@ -83,23 +83,23 @@ void pag_mapPage(uint32_t vaddr, uint32_t paddr, uint32_t flags) {
|
||||
|
||||
// The actuall mapping
|
||||
pagetab[pti] = paddr | PAGE_FLAG_PRESENT | flags;
|
||||
pag_pageCount++;
|
||||
pag_page_count++;
|
||||
invalidate(vaddr);
|
||||
|
||||
// Do we need to return to the original pagedir?
|
||||
if (prevpd != NULL) {
|
||||
pag_syncPagedir(); // Sync it to other pagedirs
|
||||
if (prevpd != init_pagedir) pag_setPagedir(prevpd);
|
||||
pag_sync_pagedir(); // Sync it to other pagedirs
|
||||
if (prevpd != init_pagedir) pag_set_pagedir(prevpd);
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t pag_umapPage(uint32_t vaddr) {
|
||||
// Same saving as in pag_mapPage()
|
||||
uint32_t pag_umap(uint32_t vaddr) {
|
||||
// Same saving as in pag_map()
|
||||
uint32_t* prevpd = NULL;
|
||||
|
||||
if (vaddr >= KERNEL_BASE) {
|
||||
prevpd = pag_getPagedir();
|
||||
if (prevpd != init_pagedir) pag_setPagedir(init_pagedir);
|
||||
prevpd = pag_get_pagedir();
|
||||
if (prevpd != init_pagedir) pag_set_pagedir(init_pagedir);
|
||||
}
|
||||
|
||||
// Extract indecies
|
||||
@@ -111,7 +111,7 @@ uint32_t pag_umapPage(uint32_t vaddr) {
|
||||
|
||||
uint32_t pte = pagetab[pti];
|
||||
pagetab[pti] = 0;
|
||||
pag_pageCount--;
|
||||
pag_page_count--;
|
||||
|
||||
// Look if we can free the pagetab
|
||||
int remove = 1;
|
||||
@@ -125,24 +125,24 @@ uint32_t pag_umapPage(uint32_t vaddr) {
|
||||
uint32_t pde = pagedir[pdi];
|
||||
if (remove && pde & PAGE_FLAG_OWNER) {
|
||||
uint32_t tabaddr = PHYS_ADDR(pde);
|
||||
pmm_freePage((void*)tabaddr);
|
||||
pmm_free((void*)tabaddr);
|
||||
pagedir[pdi] = 0;
|
||||
}
|
||||
|
||||
invalidate(vaddr);
|
||||
|
||||
// Free the page frame
|
||||
if (pte & PAGE_FLAG_OWNER) pmm_freePage((void*)PHYS_ADDR(pte));
|
||||
if (pte & PAGE_FLAG_OWNER) pmm_free((void*)PHYS_ADDR(pte));
|
||||
|
||||
if (prevpd != NULL) {
|
||||
pag_syncPagedir(); // Sync it to other pagedirs
|
||||
if (prevpd != init_pagedir) pag_setPagedir(prevpd);
|
||||
pag_sync_pagedir(); // Sync it to other pagedirs
|
||||
if (prevpd != init_pagedir) pag_set_pagedir(prevpd);
|
||||
}
|
||||
|
||||
return pte;
|
||||
}
|
||||
|
||||
void* pag_virtToPhys(uint32_t vaddr) {
|
||||
void* pag_virt_to_phys(uint32_t vaddr) {
|
||||
uint32_t pdi = vaddr >> 22;
|
||||
uint32_t pti = vaddr >> 12 & 0x3FF;
|
||||
|
||||
@@ -151,14 +151,14 @@ void* pag_virtToPhys(uint32_t vaddr) {
|
||||
return (void*)((pagetab[pti] & ~0xFFF) + ((uint32_t)vaddr & 0xFFF));
|
||||
}
|
||||
|
||||
uint32_t* pag_getPagedir() {
|
||||
uint32_t* pag_get_pagedir() {
|
||||
uint32_t pagedir;
|
||||
__asm__ volatile ("mov %%cr3, %0" : "=r"(pagedir));
|
||||
pagedir += KERNEL_BASE;
|
||||
return (uint32_t*)pagedir;
|
||||
}
|
||||
|
||||
void pag_setPagedir(uint32_t* pagedir) {
|
||||
void pag_set_pagedir(uint32_t* pagedir) {
|
||||
pagedir = (uint32_t*)((uint32_t)pagedir - KERNEL_BASE);
|
||||
__asm__ volatile (
|
||||
"mov %0, %%eax\n"
|
||||
@@ -167,9 +167,9 @@ void pag_setPagedir(uint32_t* pagedir) {
|
||||
);
|
||||
}
|
||||
|
||||
void pag_syncPagedir() {
|
||||
void pag_sync_pagedir() {
|
||||
for (size_t i = 0; i < PAGE_DIR_COUNT; i++) {
|
||||
if (!pagedirUsed[i]) continue;
|
||||
if (!pagedir_used[i]) continue;
|
||||
|
||||
uint32_t* pagedir = pagedirs[i];
|
||||
|
||||
@@ -181,11 +181,11 @@ void pag_syncPagedir() {
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t* pag_allocPagedir() {
|
||||
uint32_t* pag_alloc_pagedir() {
|
||||
// Find the first unused page
|
||||
for (size_t i = 0; i < PAGE_DIR_COUNT; i++) {
|
||||
if (pagedirUsed[i]) continue;
|
||||
pagedirUsed[i] = 1;
|
||||
if (pagedir_used[i]) continue;
|
||||
pagedir_used[i] = 1;
|
||||
|
||||
uint32_t* pagedir = pagedirs[i];
|
||||
memset(pagedir, 0, PAGE_SIZE);
|
||||
@@ -207,9 +207,9 @@ uint32_t* pag_allocPagedir() {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void pag_freePagedir(uint32_t* pagedir) {
|
||||
uint32_t* prevpd = pag_getPagedir();
|
||||
pag_setPagedir(pagedir);
|
||||
void pag_free_pagedir(uint32_t* pagedir) {
|
||||
uint32_t* prevpd = pag_get_pagedir();
|
||||
pag_set_pagedir(pagedir);
|
||||
|
||||
uint32_t pdi = (uint32_t)pagedir - (uint32_t)pagedirs;
|
||||
pdi /= PAGE_SIZE;
|
||||
@@ -224,15 +224,15 @@ void pag_freePagedir(uint32_t* pagedir) {
|
||||
for (size_t j = 0; j < 1024; j++) {
|
||||
uint32_t pte = pagetab[j];
|
||||
|
||||
if (pte & PAGE_FLAG_OWNER) pmm_freePage((void*)PHYS_ADDR(pte));
|
||||
if (pte & PAGE_FLAG_OWNER) pmm_free((void*)PHYS_ADDR(pte));
|
||||
}
|
||||
memset(pagetab, 0, PAGE_SIZE);
|
||||
|
||||
if (pde & PAGE_FLAG_OWNER) pmm_freePage((void*)PHYS_ADDR(pde));
|
||||
if (pde & PAGE_FLAG_OWNER) pmm_free((void*)PHYS_ADDR(pde));
|
||||
pd[i] = 0;
|
||||
}
|
||||
|
||||
pagedirUsed[pdi] = 0;
|
||||
pag_setPagedir(prevpd);
|
||||
pagedir_used[pdi] = 0;
|
||||
pag_set_pagedir(prevpd);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user