feat: vmm_vmap/ioremap/iounmap to make MMIO more flexible and easy
[lunaix-os.git] / lunaix-os / kernel / mm / mmio.c
diff --git a/lunaix-os/kernel/mm/mmio.c b/lunaix-os/kernel/mm/mmio.c
new file mode 100644 (file)
index 0000000..f6d5368
--- /dev/null
@@ -0,0 +1,18 @@
+#include <lunaix/mm/mmio.h>
+#include <lunaix/mm/pmm.h>
+#include <lunaix/mm/vmm.h>
+
+void*
+ioremap(uintptr_t paddr, uint32_t size)
+{
+    return vmm_vmap(paddr, size, PG_PREM_RW, PP_FGPERSIST);
+}
+
+void*
+iounmap(uintptr_t vaddr, uint32_t size)
+{
+    for (size_t i = 0; i < size; i += PG_SIZE) {
+        uintptr_t paddr = vmm_del_mapping(PD_REFERENCED, vaddr + i);
+        pmm_free_page(KERNEL_PID, paddr);
+    }
+}
\ No newline at end of file