aboutsummaryrefslogtreecommitdiff
path: root/kernel/mm/virtual_mm/virtual_mm.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/mm/virtual_mm/virtual_mm.c')
-rw-r--r--kernel/mm/virtual_mm/virtual_mm.c34
1 files changed, 6 insertions, 28 deletions
diff --git a/kernel/mm/virtual_mm/virtual_mm.c b/kernel/mm/virtual_mm/virtual_mm.c
index cfa32e1..ba2f472 100644
--- a/kernel/mm/virtual_mm/virtual_mm.c
+++ b/kernel/mm/virtual_mm/virtual_mm.c
@@ -62,47 +62,25 @@ virtual_mm_initialize(void)
uint32_t *table = physical_mm_allocate_block();
if (!table)
ASSERT_NOT_REACHED();
+ printk("debug", "Page table is at: 0x%x", table);
for (uint32_t i = 0; i < 1024; i++)
table[i] = 0x2;
/* Identity map the first 4MiB (maps 4KiB 1024 times) */
- /* for (uint32_t i = 0, physical_addr = 0, virtual_addr = 0; i < 1024;
- i++, physical_addr += 4096, virtual_addr += 4096) {
- uint32_t pt_entry = 0;
- ADD_ATTRIB(&pt_entry, SET_PTE_PRESENT(1));
- ADD_ATTRIB(&pt_entry, SET_PTE_WRITABLE(1));
- ADD_ATTRIB(&pt_entry, SET_PTE_FRAME(physical_addr));
-
- table[PAGE_TABLE_INDEX(virtual_addr)] = pt_entry;
- }
- printk("debug", "Page table is at: 0x%x", table); */
-
- for (uint32_t i = 0; i < 1024; i++) {
- uint32_t pt_entry = 0;
- ADD_ATTRIB(&pt_entry, SET_PTE_PRESENT(1));
- ADD_ATTRIB(&pt_entry, SET_PTE_WRITABLE(1));
- ADD_ATTRIB(&pt_entry, SET_PTE_FRAME(i));
-
- table[i] = pt_entry;
- }
+ for (uint32_t i = 0; i < 1024; i++)
+ table[i] = PTE_FRAME(i) | PTE_PRESENT(1) | PTE_WRITABLE(1);
uint32_t *page_directory = physical_mm_allocate_block();
if (!page_directory)
ASSERT_NOT_REACHED();
+ printk("debug", "Page directory is at: 0x%x", page_directory);
for (uint32_t i = 0; i < 1024; i++)
page_directory[i] = 0;
- /* uint32_t *pd_entry = &page_directory[0];
- ADD_ATTRIB(pd_entry, SET_PDE_PRESENT(1));
- ADD_ATTRIB(pd_entry, SET_PDE_WRITABLE(1));
- ADD_ATTRIB(pd_entry, SET_PDE_FRAME((uint32_t) table)); */
- page_directory[0] = ((uint32_t) table) | 3;
-
- printk("debug", "Page directory is at: 0x%x", page_directory);
- // printk("debug", "pd_entry: 0x%x", pd_entry);
- printk("debug", "513th entry: 0x%x", table[513]);
+ uint32_t *pd_entry = &page_directory[0];
+ *pd_entry = PDE_FRAME((uint32_t) table) | PDE_PRESENT(1) | PDE_WRITABLE(1);
virtual_mm_switch_page_directory(page_directory);
virtual_mm_enable_paging();