Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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));
}
Exemplo n.º 3
0
Arquivo: paging.c Projeto: imbd/OS
void paging_ummap_region(paging_map_region * region) {
	__paging_ummap_region(region);
	store_pml4(pa(pml4));
}
Exemplo n.º 4
0
Arquivo: paging.c Projeto: imbd/OS
void paging_mmap_region(paging_map_region * region, int flags){
	__paging_mmap_region(pml4, region, flags);
	store_pml4(pa(pml4));
}