Second Extended Filesystem (ext2) and other improvements (#33)
[lunaix-os.git] / lunaix-os / kernel / mm / mmio.c
index b91ab0e425c491a79f1e334aa1090d3aa4e728ea..dbb1870afe9083437f7656d177fe579542184618 100644 (file)
@@ -2,7 +2,7 @@
 #include <lunaix/mm/page.h>
 #include <lunaix/spike.h>
 
-void*
+ptr_t
 ioremap(ptr_t paddr, u32_t size)
 {
     // FIXME implement a page policy interface allow to decouple the 
@@ -14,21 +14,13 @@ ioremap(ptr_t paddr, u32_t size)
     // Ensure the range is reservable (not already in use)
     assert(pmm_onhold_range(start, npages));
 
-    return (void*)vmap_range(start, npages, KERNEL_DATA);
+    ptr_t addr = vmap_range(start, npages, KERNEL_DATA);
+    return addr + va_offset(paddr);
 }
 
 void
 iounmap(ptr_t vaddr, u32_t size)
 {
-    // FIXME
-    fail("need fix");
-
-    // pte_t* ptep = mkptep_va(VMS_SELF, vaddr);
-    // for (size_t i = 0; i < size; i += PAGE_SIZE, ptep++) {
-    //     pte_t pte = pte_at(ptep);
-
-    //     set_pte(ptep, null_pte);
-    //     if (pte_isloaded(pte))
-    //         return_page(ppage_pa(pte_paddr(pte)));
-    // }
+    assert(vaddr >= VMAP && vaddr < VMAP_END);
+    vunmap_range(pfn(vaddr), leaf_count(size));
 }
\ No newline at end of file