add lunaix dynamic linker as submodule
[lunaix-os.git] / lunaix-os / kernel / mm / vmap.c
index 7507b1a86113a5364d6e6020d6e5a4724ca239a7..4b1b311f70afd31a3dce6e52154d19de2bb65ed3 100644 (file)
@@ -2,19 +2,18 @@
 #include <lunaix/mm/vmm.h>
 #include <lunaix/spike.h>
 
-#define VMAP_START PG_MOUNT_BASE + MEM_4MB
-#define VMAP_END PD_REFERENCED
+#include <sys/mm/mempart.h>
 
-static uintptr_t start = VMAP_START;
+static ptr_t start = VMAP;
 
 void*
-vmm_vmap(uintptr_t paddr, size_t size, pt_attr attr)
+vmm_vmap(ptr_t paddr, size_t size, pt_attr attr)
 {
     // next fit
     assert_msg((paddr & 0xfff) == 0, "vmap: bad alignment");
     size = ROUNDUP(size, PG_SIZE);
 
-    uintptr_t current_addr = start;
+    ptr_t current_addr = start;
     size_t examed_size = 0, wrapped = 0;
     x86_page_table* pd = (x86_page_table*)L1_BASE_VADDR;
 
@@ -47,17 +46,16 @@ vmm_vmap(uintptr_t paddr, size_t size, pt_attr attr)
         if (current_addr >= VMAP_END) {
             wrapped = 1;
             examed_size = 0;
-            current_addr = VMAP_START;
+            current_addr = VMAP;
         }
     }
 
     return NULL;
 
 done:
-    uintptr_t alloc_begin = current_addr - examed_size;
+    ptr_t alloc_begin = current_addr - examed_size;
     for (size_t i = 0; i < size; i += PG_SIZE) {
-        vmm_set_mapping(
-          PD_REFERENCED, alloc_begin + i, paddr + i, PG_PREM_RW, 0);
+        vmm_set_mapping(VMS_SELF, alloc_begin + i, paddr + i, attr, 0);
         pmm_ref_page(KERNEL_PID, paddr + i);
     }
     start = alloc_begin + size;