void setup_paging(void) { struct page *page = alloc_page_table(PTE_LOW); DBG_ASSERT(page != 0); const phys_t paddr = page_paddr(page); pte_t *pt = va(paddr); DBG_ASSERT(setup_fixed_mapping(pt) == 0); DBG_ASSERT(setup_kernel_mapping(pt) == 0); DBG_ASSERT(setup_kmap_mapping(pt) == 0); store_pml4(paddr); }
void map_init() { pml4 = get_mem(PAGE_SIZE, PAGE_SIZE); for (phys_t i = 0; i < memory_map[memory_map_size - 1].base_addr + memory_map[memory_map_size - 1].length; i += (1 << 21)) { map_adr(i + HIGH_BASE, i, USE_BIG_PAGE | USE_BOOT_ALLOCATE | NOT_FLUSH_TLB); if (i + KERNEL_BASE > HIGH_BASE) { map_adr(i + KERNEL_BASE, i, USE_BIG_PAGE | USE_BOOT_ALLOCATE | NOT_FLUSH_TLB); } } puts("init page mapping"); store_pml4(pa(pml4)); }
void paging_ummap_region(paging_map_region * region) { __paging_ummap_region(region); store_pml4(pa(pml4)); }
void paging_mmap_region(paging_map_region * region, int flags){ __paging_mmap_region(pml4, region, flags); store_pml4(pa(pml4)); }