diff options
author | Marvin Borner | 2019-10-15 22:22:23 +0200 |
---|---|---|
committer | GitHub | 2019-10-15 22:22:23 +0200 |
commit | 2e988c84fc9b282e7618ba89a5c3b2ef9406121e (patch) | |
tree | 6e9741c6b2117796a2e40da1f0fade84c090aac7 /src/kernel/paging | |
parent | 8754542ce074bef0984f91ce1b1cd8aff9b3d5e9 (diff) | |
parent | 0e75de0452774c1d4f9a16ff593d9ec2fac829bc (diff) |
Merged VESA-paging fix
Fixed paging activation before initialization of VESA driver
Diffstat (limited to 'src/kernel/paging')
-rw-r--r-- | src/kernel/paging/kheap.h | 4 | ||||
-rw-r--r-- | src/kernel/paging/paging.c | 12 | ||||
-rw-r--r-- | src/kernel/paging/paging.h | 12 |
3 files changed, 23 insertions, 5 deletions
diff --git a/src/kernel/paging/kheap.h b/src/kernel/paging/kheap.h index a1d946c..a2254be 100644 --- a/src/kernel/paging/kheap.h +++ b/src/kernel/paging/kheap.h @@ -105,8 +105,4 @@ uint32_t kmalloc_ap(uint32_t sz, uint32_t *phys); */ uint32_t kmalloc(uint32_t sz); -/** - General deallocation function. -**/ - #endif diff --git a/src/kernel/paging/paging.c b/src/kernel/paging/paging.c index 4bb69d0..1712f7e 100644 --- a/src/kernel/paging/paging.c +++ b/src/kernel/paging/paging.c @@ -105,6 +105,18 @@ void initialise_paging() { switch_page_directory(current_directory); } +void disable_paging() { + uint32_t cr0; + asm volatile("mov %%cr0, %0": "=r"(cr0)); + cr0 &= 0x7fffffff; + asm volatile("mov %0, %%cr0"::"r"(cr0)); +} + +void enable_paging() { + switch_page_directory(kernel_directory); + switch_page_directory(current_directory); +} + void switch_page_directory(page_directory_t *dir) { current_directory = dir; asm volatile("mov %0, %%cr3"::"r"(dir->physicalAddr)); diff --git a/src/kernel/paging/paging.h b/src/kernel/paging/paging.h index 51f407f..681b84e 100644 --- a/src/kernel/paging/paging.h +++ b/src/kernel/paging/paging.h @@ -25,11 +25,21 @@ typedef struct page_directory { } page_directory_t; /** - * Initialize the environment and enables paging + * Initialize the environment and enable paging */ void initialise_paging(); /** + * Enable paging bit in CR0 (without initializing) + */ +void enable_paging(); + +/** + * Disable paging bit in CR0 + */ +void disable_paging(); + +/** * Load the page directory into the CR3 register * @param new The page directory */ |