summaryrefslogtreecommitdiffstats
path: root/sys/arm/sa11x0
diff options
context:
space:
mode:
authorcognet <cognet@FreeBSD.org>2006-05-18 22:03:47 +0000
committercognet <cognet@FreeBSD.org>2006-05-18 22:03:47 +0000
commit703043e7e1773ce68893d426497319d6abeac98a (patch)
treebd0be90a60994f8091d4ad5208af1c0a984e418c /sys/arm/sa11x0
parent26f5546b6456e9711354275bebfb846d14bdffef (diff)
downloadFreeBSD-src-703043e7e1773ce68893d426497319d6abeac98a.zip
FreeBSD-src-703043e7e1773ce68893d426497319d6abeac98a.tar.gz
Implement sa11x0_bs_unmap.
Submitted by: kevlo
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 e88af0c..964e182 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
OpenPOWER on IntegriCloud