diff options
Diffstat (limited to 'kernel/mm/virtual_mm')
| -rw-r--r-- | kernel/mm/virtual_mm/page_table_allocator.c (renamed from kernel/mm/virtual_mm/page_table_allocator.cc) | 23 | ||||
| -rw-r--r-- | kernel/mm/virtual_mm/pages.c (renamed from kernel/mm/virtual_mm/pages.cc) | 17 | ||||
| -rw-r--r-- | kernel/mm/virtual_mm/virtual_mm.c (renamed from kernel/mm/virtual_mm/virtual_mm.cc) | 33 |
3 files changed, 29 insertions, 44 deletions
diff --git a/kernel/mm/virtual_mm/page_table_allocator.cc b/kernel/mm/virtual_mm/page_table_allocator.c index 057724c..5c0bdcd 100644 --- a/kernel/mm/virtual_mm/page_table_allocator.cc +++ b/kernel/mm/virtual_mm/page_table_allocator.c @@ -24,10 +24,7 @@ #include <mm/virtual_mm.h> #include <stddef.h> -namespace PageTableAllocator -{ - -uint32_t *l_page_directory = 0; +static uint32_t *l_page_directory = 0; uint32_t *l_heap = NULL; uint16_t l_table_index = 0; @@ -36,10 +33,10 @@ make_table(uint32_t *table_address) { uint32_t *table = table_address; for (uint32_t i = 0; i < 1024; i++) - table[i] = PTE_FRAME((uint32_t) PhysicalMM::allocate_block()) - | PTE_PRESENT(1) | PTE_WRITABLE(1); + table[i] = PTE_FRAME((uint32_t) pmm_allocate_block()) | PTE_PRESENT(1) + | PTE_WRITABLE(1); - void *starting_address = VirtualMM::find_free_pages(1); + void *starting_address = vmm_find_free_pages(1); uint32_t *pd_entry = &l_page_directory[GET_PD_INDEX(starting_address)]; *pd_entry = PDE_FRAME((uint32_t) table) | PDE_PRESENT(1) | PDE_WRITABLE(1); @@ -48,13 +45,13 @@ make_table(uint32_t *table_address) } void -initialize(void) +pta_initialize(void) { /* We can't just do this in allocate() because make_table() depends on - * VirtualMM::find_free_pages() */ + * find_free_pages() */ - if (l_page_directory != VirtualMM::get_page_directory()) - l_page_directory = VirtualMM::get_page_directory(); + if (l_page_directory != vmm_get_page_directory()) + l_page_directory = vmm_get_page_directory(); /* Initial table */ if (l_heap == NULL) @@ -62,11 +59,9 @@ initialize(void) } uint32_t * -allocate(void) +pta_allocate(void) { uint32_t *next_table = l_heap + (l_table_index * 4 * KiB); l_table_index++; return next_table; } - -} diff --git a/kernel/mm/virtual_mm/pages.cc b/kernel/mm/virtual_mm/pages.c index 6046dea..fb90f98 100644 --- a/kernel/mm/virtual_mm/pages.cc +++ b/kernel/mm/virtual_mm/pages.c @@ -24,30 +24,25 @@ #include <stdbool.h> #include <stdint.h> -namespace VirtualMM -{ - void * -alloc_pages(uint32_t n_pages) +vmm_alloc_pages(uint32_t n_pages) { - uint32_t starting_address = (uint32_t) find_free_pages(n_pages); + uint32_t starting_address = (uint32_t) vmm_find_free_pages(n_pages); if (!starting_address) return NULL; for (uint32_t i = 0; i < n_pages; i++) { - void *physical_address = PhysicalMM::allocate_block(); + void *physical_address = pmm_allocate_block(); void *virtual_address = (void *) (starting_address + (i * PAGE_SIZE)); - map_page(physical_address, virtual_address); + vmm_map_page(physical_address, virtual_address); } return (void *) starting_address; } void -free_pages(void *starting_address, uint32_t n_pages) +vmm_free_pages(void *starting_address, uint32_t n_pages) { for (uint32_t i = 0; i < n_pages; i++) - unmap_page((void *) (((uint32_t) starting_address) + (i * 4096))); -} - + vmm_unmap_page((void *) (((uint32_t) starting_address) + (i * 4096))); } diff --git a/kernel/mm/virtual_mm/virtual_mm.cc b/kernel/mm/virtual_mm/virtual_mm.c index 0b4ce18..953d23e 100644 --- a/kernel/mm/virtual_mm/virtual_mm.cc +++ b/kernel/mm/virtual_mm/virtual_mm.c @@ -26,40 +26,37 @@ #include <stdbool.h> #include <stdint.h> -namespace VirtualMM -{ - extern uint32_t kernel_start; extern uint32_t kernel_end; uint32_t *l_current_page_directory = 0; /* Kernel's page directory */ -uint32_t l_page_directory[1024] ALIGNED(4096); +static uint32_t l_page_directory[1024] ALIGNED(4096); /* Page table for the first 4 MiB */ -uint32_t l_fourMiB_page_table[1024] ALIGNED(4096); +static uint32_t l_fourMiB_page_table[1024] ALIGNED(4096); /* Page table for the next 4 MiB */ -uint32_t l_eightMiB_page_table[1024] ALIGNED(4096); +static uint32_t l_eightMiB_page_table[1024] ALIGNED(4096); uint32_t * -get_page_directory(void) +vmm_get_page_directory(void) { return l_current_page_directory; } ALWAYS_INLINE void -load_page_directory(uint32_t *page_directory) +vmm_load_page_directory(uint32_t *page_directory) { __asm__ volatile("movl %0, %%cr3" ::"r"(page_directory)); } bool -switch_page_directory(uint32_t *page_directory) +vmm_switch_page_directory(uint32_t *page_directory) { if (!page_directory) return false; l_current_page_directory = page_directory; - load_page_directory(page_directory); + vmm_load_page_directory(page_directory); return true; } @@ -74,7 +71,7 @@ enable_paging(void) } void -initialize(void) +vmm_initialize(void) { /* Zero out the page tables and directories */ for (uint32_t i = 0; i < 1024; i++) { @@ -103,16 +100,16 @@ initialize(void) *eightMiB_pd_entry = PDE_FRAME((uint32_t) l_eightMiB_page_table) | PDE_PRESENT(1) | PDE_WRITABLE(1); - switch_page_directory(l_page_directory); + vmm_switch_page_directory(l_page_directory); enable_paging(); - PageTableAllocator::initialize(); + pta_initialize(); } uint32_t * make_table(uint32_t *pd_entry) { - uint32_t *table = PageTableAllocator::allocate(); + uint32_t *table = pta_allocate(); for (uint32_t i = 0; i < 1024; i++) table[i] = 0x0; @@ -135,7 +132,7 @@ get_or_make_table(uint32_t *pd_entry) } void -map_page(void *physical_address, void *virtual_address) +vmm_map_page(void *physical_address, void *virtual_address) { uint32_t *pd_entry = &l_current_page_directory[GET_PD_INDEX(virtual_address)]; @@ -151,7 +148,7 @@ map_page(void *physical_address, void *virtual_address) } void -unmap_page(void *virtual_address) +vmm_unmap_page(void *virtual_address) { uint32_t *pd_entry = &l_current_page_directory[GET_PD_INDEX(virtual_address)]; @@ -169,7 +166,7 @@ unmap_page(void *virtual_address) } void * -find_free_pages(uint32_t n_pages) +vmm_find_free_pages(uint32_t n_pages) { /* Skip the first two page directory entries; we don't wanna touch the first * 8MiB. */ @@ -227,5 +224,3 @@ find_free_pages(uint32_t n_pages) ASSERT_NOT_REACHED(); return 0; } - -} |
