diff --git a/dev/acpi/uacpi_glue.c b/dev/acpi/uacpi_glue.c index 88a6875..baad859 100644 --- a/dev/acpi/uacpi_glue.c +++ b/dev/acpi/uacpi_glue.c @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -28,14 +29,20 @@ void* uacpi_kernel_map(uacpi_phys_addr addr, uacpi_size len) { return nullptr; for (size_t i = 0; i < aligned_len; i += arch_mem_page_size()) { - pmap_map(&kernel_vma.pmap, vaddr + i, aligned_addr + i, PROT_READ | PROT_WRITE, CACHE_ANY); + pmap_map(&kernel_vma.pmap, vaddr + i, aligned_addr + i, PTE_READ | PTE_WRITE, CACHE_ANY); } return (void*)(vaddr + difference); } void uacpi_kernel_unmap(void* addr, uacpi_size len) { - // TODO + uintptr_t aligned_addr = ALIGN_DOWN((uintptr_t)addr, arch_mem_page_size()); + uintptr_t difference = (uintptr_t)addr - aligned_addr; + size_t aligned_len = ALIGN_UP(len + difference, arch_mem_page_size()); + + for (size_t i = 0; i < aligned_len; i += arch_mem_page_size()) + pmap_unmap(&kernel_vma.pmap, aligned_addr + i); + vm_free(aligned_addr, aligned_len); } static enum log_level acpi_log_level(uacpi_log_level lvl) {