-void
-vmm_unset_mapping(void* va) {
- __vmm_unmap_internal(0, va, false);
-}
-
-void
-vmm_unmap_page(pid_t pid, void* va)
-{
- __vmm_unmap_internal(pid, va, true);
-}
-
-v_mapping
-vmm_lookup(void* va)
-{
- assert(((uintptr_t)va & 0xFFFU) == 0);
-
- uint32_t l1_index = L1_INDEX(va);
- uint32_t l2_index = L2_INDEX(va);
-
- x86_page_table* l1pt = (x86_page_table*)L1_BASE_VADDR;
- x86_pte_t l1pte = l1pt->entry[l1_index];
-
- v_mapping mapping = { .flags = 0, .pa = 0, .pn = 0 };
- if (l1pte) {
- x86_pte_t* l2pte =
- &((x86_page_table*)L2_VADDR(l1_index))->entry[l2_index];
- if (l2pte) {
- mapping.flags = PG_ENTRY_FLAGS(*l2pte);
- mapping.pa = PG_ENTRY_ADDR(*l2pte);
- mapping.pn = mapping.pa >> PG_SIZE_BITS;
- mapping.pte = l2pte;
- }