1 #include <klibc/string.h>
2 #include <lunaix/mm/page.h>
3 #include <lunaix/spike.h>
4 #include <lunaix/syslog.h>
7 #include <sys/mm/mm_defs.h>
14 // XXX: something here?
18 vmm_tryptep(pte_t* ptep, size_t lvl_size)
20 ptr_t va = ptep_va(ptep, lvl_size);
21 pte_t* _ptep = mkl0tep(ptep);
24 if (pte_isnull(pte = *_ptep) || _ptep == ptep)
28 _ptep = getl1tep(_ptep, va);
29 if (_ptep == ptep || pte_isnull(pte = *_ptep))
33 _ptep = getl2tep(_ptep, va);
34 if (_ptep == ptep || pte_isnull(pte = *_ptep))
38 _ptep = getl3tep(_ptep, va);
39 if (_ptep == ptep || pte_isnull(pte = *_ptep))
42 _ptep = getlftep(_ptep, va);
47 vms_mount(ptr_t mnt, ptr_t vms_root)
51 pte_t* ptep = mkl0tep_va(VMS_SELF, mnt);
52 set_pte(ptep, mkpte(vms_root, KERNEL_PGTAB));
53 tlb_flush_kernel(mnt);
58 vms_unmount(ptr_t mnt)
60 pte_t* ptep = mkl0tep_va(VMS_SELF, mnt);
61 set_pte(ptep, null_pte);
62 tlb_flush_kernel(mnt);
68 ptep_alloc_hierarchy(pte_t* ptep, ptr_t va, pte_attr_t prot)
72 _ptep = mkl0tep(ptep);
77 _ptep = mkl1t(_ptep, va, prot);
82 _ptep = mkl2t(_ptep, va, prot);
87 _ptep = mkl3t(_ptep, va, prot);
92 _ptep = mklft(_ptep, va, prot);
93 assert(_ptep == ptep);