void obio_bs_unmap(void *t, bus_space_handle_t bsh, bus_size_t size) { vaddr_t va, endva; if (pmap_devmap_find_va(bsh, size) != NULL) { /* Device was statically mapped; nothing to do. */ return; } endva = round_page(bsh + size); va = trunc_page(bsh); pmap_kremove(va, endva - va); uvm_km_free(kernel_map, va, endva - va, UVM_KMF_VAONLY); }
void i80321_bs_unmap(void *t, bus_space_handle_t bsh, bus_size_t size) { vaddr_t va, endva; if (pmap_devmap_find_va(bsh, size) != NULL) { /* Device was statically mapped; nothing to do. */ return; } va = trunc_page((vaddr_t)bsh); endva = round_page(bsh + size); pmap_kremove(va, endva - va); pmap_update(pmap_kernel()); km_free((void *)va, endva - va, &kv_any, &kp_none); }
void ifpga_mem_bs_unmap(void *t, bus_space_handle_t bsh, bus_size_t size) { vaddr_t startva, endva; if (pmap_devmap_find_va(bsh, size) != NULL) { /* Device was statically mapped; nothing to do. */ return; } startva = trunc_page(bsh); endva = round_page(bsh + size); pmap_remove(pmap_kernel(), startva, endva); pmap_update(pmap_kernel()); uvm_km_free(kernel_map, startva, endva - startva, UVM_KMF_VAONLY); }
void mpcore_bs_unmap(void *t, bus_space_handle_t bsh, bus_size_t size) { vaddr_t va; vsize_t sz; if (pmap_devmap_find_va(bsh, size) != NULL) { /* Device was statically mapped; nothing to do. */ return; } va = trunc_page(bsh); sz = round_page(bsh + size) - va; pmap_kremove(va, sz); pmap_update(pmap_kernel()); uvm_km_free(kernel_map, va, sz, UVM_KMF_VAONLY); }
void generic_bs_unmap(void *t, bus_space_handle_t h, bus_size_t size) { vm_offset_t va, endva; if (pmap_devmap_find_va((vm_offset_t)t, size) != NULL) { /* Device was statically mapped; nothing to do. */ return; } endva = round_page((vm_offset_t)t + size); va = trunc_page((vm_offset_t)t); while (va < endva) { pmap_kremove(va); va += PAGE_SIZE; } kmem_free(kernel_map, va, endva - va); }