-pte_t
-vmm_alloc_page(pte_t* ptep, pte_t pte)
-{
- ptr_t pa = pmm_alloc_page(PP_FGPERSIST);
- if (!pa) {
- return null_pte;
- }
-
- pte = pte_setpaddr(pte, pa);
- pte = pte_mkloaded(pte);
- set_pte(ptep, pte);
-
- mount_page(PG_MOUNT_1, pa);
- memset((void*)PG_MOUNT_1, 0, LFT_SIZE);
- unmount_page(PG_MOUNT_1);
-
- cpu_flush_page((ptr_t)ptep);
-
- return pte;
-}
-
-int
-vmm_set_mapping(ptr_t mnt, ptr_t va, ptr_t pa, pte_attr_t prot)
-{
- assert(!va_offset(va));
-
- pte_t* ptep = mkptep_va(mnt, va);
- pte_t pte = mkpte(pa, prot);
-
- set_pte(ptep, pte);
-
- return 1;
-}
-
-ptr_t
-vmm_del_mapping(ptr_t mnt, ptr_t va)
-{
- assert(!va_offset(va));
-
- pte_t* ptep = mkptep_va(mnt, va);
-
- pte_t old = *ptep;
-
- set_pte(ptep, null_pte);
-
- return pte_paddr(old);
-}
-