diff options
author | Olivier Houchard <cognet@FreeBSD.org> | 2006-05-18 22:03:47 +0000 |
---|---|---|
committer | Olivier Houchard <cognet@FreeBSD.org> | 2006-05-18 22:03:47 +0000 |
commit | ac895519de31f30f7f477a9a6fd5a9ad94776e59 (patch) | |
tree | bd0be90a60994f8091d4ad5208af1c0a984e418c /sys/arm/sa11x0 | |
parent | b012edd4ed42f3793e4894bc9598477910aa7a40 (diff) | |
download | src-ac895519de31f30f7f477a9a6fd5a9ad94776e59.tar.gz src-ac895519de31f30f7f477a9a6fd5a9ad94776e59.zip |
Implement sa11x0_bs_unmap.
Submitted by: kevlo
Notes
Notes:
svn path=/head/; revision=158733
Diffstat (limited to 'sys/arm/sa11x0')
-rw-r--r-- | sys/arm/sa11x0/sa11x0_io.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/sys/arm/sa11x0/sa11x0_io.c b/sys/arm/sa11x0/sa11x0_io.c index e88af0c938cd..964e18257cf0 100644 --- a/sys/arm/sa11x0/sa11x0_io.c +++ b/sys/arm/sa11x0/sa11x0_io.c @@ -188,9 +188,21 @@ sa11x0_bs_unmap(t, size) void *t; bus_size_t size; { - /* - * Temporary implementation - */ + vm_offset_t va, endva; + + if (pmap_devmap_find_va((vm_offset_t)t, size) != NULL) { + /* Device was statically mapped; nothing to do. */ + return; + } + + va = trunc_page((vm_offset_t)t); + endva = round_page((vm_offset_t)t + size); + + while (va < endva) { + pmap_kremove(va); + va += PAGE_SIZE; + } + kmem_free(kernel_map, va, endva - va); } void |