-/* Populates the page directory and page table with the kernel
- virtual mapping. */
-static void
-init_page_table (void)
-{
- uint32_t *pd, *pt;
- uint32_t paddr;
-
- pd = palloc_get (PAL_ASSERT | PAL_ZERO);
- pt = NULL;
- for (paddr = 0; paddr < NBPG * ram_pages; paddr += NBPG)
- {
- uint32_t vaddr = paddr + PHYS_BASE;
- size_t pde_idx = PDENO(vaddr);
- size_t pte_idx = PTENO(vaddr);
-
- if (pd[pde_idx] == 0)
- {
- pt = palloc_get (PAL_ASSERT | PAL_ZERO);
- pd[pde_idx] = (uint32_t) vtop (pt) | PG_U | PG_W | PG_P;
- }
-
- pt[pte_idx] = paddr | PG_U | PG_W | PG_P;
- }
-
- /* Set the page table. */
- asm volatile ("movl %0,%%cr3" :: "r" (vtop (pd)));
-}
-