aboutsummaryrefslogtreecommitdiff
path: root/src/kernel/paging
diff options
context:
space:
mode:
authorMarvin Borner2019-10-15 22:22:23 +0200
committerGitHub2019-10-15 22:22:23 +0200
commit2e988c84fc9b282e7618ba89a5c3b2ef9406121e (patch)
tree6e9741c6b2117796a2e40da1f0fade84c090aac7 /src/kernel/paging
parent8754542ce074bef0984f91ce1b1cd8aff9b3d5e9 (diff)
parent0e75de0452774c1d4f9a16ff593d9ec2fac829bc (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.h4
-rw-r--r--src/kernel/paging/paging.c12
-rw-r--r--src/kernel/paging/paging.h12
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
*/