1 #include <klibc/string.h>
2 #include <lunaix/mm/page.h>
3 #include <lunaix/spike.h>
4 #include <lunaix/syslog.h>
7 #include <asm/mm_defs.h>
12 vmm_tryptep(pte_t* ptep, size_t lvl_size)
14 ptr_t va = ptep_va(ptep, lvl_size);
15 pte_t* _ptep = mkl0tep(ptep);
18 if (pte_isnull(pte = *_ptep) || _ptep == ptep)
22 _ptep = getl1tep(_ptep, va);
23 if (_ptep == ptep || pte_isnull(pte = *_ptep))
27 _ptep = getl2tep(_ptep, va);
28 if (_ptep == ptep || pte_isnull(pte = *_ptep))
32 _ptep = getl3tep(_ptep, va);
33 if (_ptep == ptep || pte_isnull(pte = *_ptep))
36 _ptep = getlftep(_ptep, va);
41 vms_mount(ptr_t mnt, ptr_t vms_root)
45 pte_t* ptep = mkl0tep_va(VMS_SELF, mnt);
46 set_pte(ptep, mkpte(vms_root, KERNEL_PGTAB));
47 tlb_flush_kernel(mnt);
52 vms_unmount(ptr_t mnt)
54 pte_t* ptep = mkl0tep_va(VMS_SELF, mnt);
55 set_pte(ptep, null_pte);
56 tlb_flush_kernel(mnt);
62 ptep_alloc_hierarchy(pte_t* ptep, ptr_t va, pte_attr_t prot)
66 _ptep = mkl0tep(ptep);
71 _ptep = mkl1t(_ptep, va, prot);
76 _ptep = mkl2t(_ptep, va, prot);
81 _ptep = mkl3t(_ptep, va, prot);
86 _ptep = mklft(_ptep, va, prot);
87 assert(_ptep == ptep);