Exemple #1
0
void
OS_UnmapPage(Mapping mapping)           // IN
{
   pmap_qremove((vm_offset_t)mapping, 1);
#if __FreeBSD_version < 1000000
   kmem_free(kernel_map, (vm_offset_t)mapping, PAGE_SIZE);
#else
   kva_free((vm_offset_t)mapping, PAGE_SIZE);
#endif
}
Exemple #2
0
static void
at91_bs_unmap(void *t, bus_space_handle_t h, bus_size_t size)
{
	vm_offset_t va, endva;

	va = trunc_page((vm_offset_t)t);
	endva = va + round_page(size);

	/* Free the kernel virtual mapping. */
	kva_free(va, endva - va);
}
Exemple #3
0
void
i81342_mem_bs_unmap(bus_space_tag_t tag, bus_space_handle_t h, bus_size_t size)
{
#if 0
	vm_offset_t va, endva;

	va = trunc_page((vm_offset_t)h);
	endva = va + round_page(size);

	/* Free the kernel virtual mapping. */
	kva_free(va, endva - va);
#endif
}
Exemple #4
0
/*
 * Unmap device memory and free the kva space.
 */
void
pmap_unmapdev(vm_offset_t va, vm_size_t size)
{
	vm_offset_t offset;

	/* Nothing to do if we find the mapping in the static table. */
	if (devmap_vtop((void*)va, size) != DEVMAP_PADDR_NOTFOUND)
		return;

	offset = va & PAGE_MASK;
	va = trunc_page(va);
	size = round_page(size + offset);

	pmap_kremove_device(va, size);
	kva_free(va, size);
}
Exemple #5
0
static int
spigen_close(struct cdev *cdev, int fflag, int devtype, struct thread *td)
{
    device_t dev = cdev->si_drv1;
    struct spigen_softc *sc = device_get_softc(dev);

    mtx_lock(&sc->sc_mtx);
    if (sc->sc_mmap_buffer != NULL) {
        pmap_qremove(sc->sc_mmap_kvaddr,
                     sc->sc_mmap_buffer_size / PAGE_SIZE);
        kva_free(sc->sc_mmap_kvaddr, sc->sc_mmap_buffer_size);
        sc->sc_mmap_kvaddr = 0;
        vm_object_deallocate(sc->sc_mmap_buffer);
        sc->sc_mmap_buffer = NULL;
        sc->sc_mmap_buffer_size = 0;
    }
    mtx_unlock(&sc->sc_mtx);
    return (0);
}
Exemple #6
0
int
sparc64_bus_mem_unmap(bus_space_tag_t tag, bus_space_handle_t handle,
    bus_size_t size)
{
	vm_offset_t sva;
	vm_offset_t va;
	vm_offset_t endva;

	if (tag->bst_cookie == NULL ||
	    (sva = (vm_offset_t)rman_get_virtual(tag->bst_cookie)) == 0)
		return (0);
	sva = trunc_page(sva);
	endva = sva + round_page(size);
	for (va = sva; va < endva; va += PAGE_SIZE)
		pmap_kremove_flags(va);
	tlb_range_demap(kernel_pmap, sva, sva + size - 1);
	kva_free(sva, size);
	return (0);
}