diff options
author | cognet <cognet@FreeBSD.org> | 2006-05-18 22:03:47 +0000 |
---|---|---|
committer | cognet <cognet@FreeBSD.org> | 2006-05-18 22:03:47 +0000 |
commit | 703043e7e1773ce68893d426497319d6abeac98a (patch) | |
tree | bd0be90a60994f8091d4ad5208af1c0a984e418c /sys/arm/sa11x0 | |
parent | 26f5546b6456e9711354275bebfb846d14bdffef (diff) | |
download | FreeBSD-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.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 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 |