#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
// 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