aboutsummaryrefslogtreecommitdiff
path: root/sys/arm/sa11x0
diff options
context:
space:
mode:
authorOlivier Houchard <cognet@FreeBSD.org>2006-05-18 22:03:47 +0000
committerOlivier Houchard <cognet@FreeBSD.org>2006-05-18 22:03:47 +0000
commitac895519de31f30f7f477a9a6fd5a9ad94776e59 (patch)
treebd0be90a60994f8091d4ad5208af1c0a984e418c /sys/arm/sa11x0
parentb012edd4ed42f3793e4894bc9598477910aa7a40 (diff)
downloadsrc-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.c18
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