diff options
author | raj <raj@FreeBSD.org> | 2008-04-03 18:22:08 +0000 |
---|---|---|
committer | raj <raj@FreeBSD.org> | 2008-04-03 18:22:08 +0000 |
commit | 87f84373e2c267e31d0ddfeadbc54f86b9c52ad6 (patch) | |
tree | cb1838993293644f3c16d2c0c9c602dd444e5fac | |
parent | 6eb81d8e9b498a67f3a1528af0cef34b760e2034 (diff) | |
download | FreeBSD-src-87f84373e2c267e31d0ddfeadbc54f86b9c52ad6.zip FreeBSD-src-87f84373e2c267e31d0ddfeadbc54f86b9c52ad6.tar.gz |
Refactor certain ARM bus space methods: instead of having multiple copies of
the same code introduce sys/arm/arm/bus_space_generic.c for a shared set of
routines.
Reviewed by: sam
Approved by: cognet (mentor)
-rw-r--r-- | sys/arm/sa11x0/files.sa11x0 | 1 | ||||
-rw-r--r-- | sys/arm/sa11x0/sa11x0_io.c | 127 | ||||
-rw-r--r-- | sys/arm/xscale/i80321/files.ep80219 | 1 | ||||
-rw-r--r-- | sys/arm/xscale/i80321/files.i80219 | 1 | ||||
-rw-r--r-- | sys/arm/xscale/i80321/files.i80321 | 1 | ||||
-rw-r--r-- | sys/arm/xscale/i80321/files.iq31244 | 1 | ||||
-rw-r--r-- | sys/arm/xscale/i80321/obio_space.c | 109 | ||||
-rw-r--r-- | sys/arm/xscale/i8134x/obio_space.c | 109 | ||||
-rw-r--r-- | sys/arm/xscale/ixp425/files.avila | 1 | ||||
-rw-r--r-- | sys/arm/xscale/ixp425/files.ixp425 | 1 | ||||
-rw-r--r-- | sys/arm/xscale/ixp425/ixp425_a4x_space.c | 13 | ||||
-rw-r--r-- | sys/arm/xscale/ixp425/ixp425_space.c | 97 |
12 files changed, 38 insertions, 424 deletions
diff --git a/sys/arm/sa11x0/files.sa11x0 b/sys/arm/sa11x0/files.sa11x0 index f466916..0706c27 100644 --- a/sys/arm/sa11x0/files.sa11x0 +++ b/sys/arm/sa11x0/files.sa11x0 @@ -1,4 +1,5 @@ # $FreeBSD$ +arm/arm/bus_space_generic.c standard arm/arm/cpufunc_asm_sa1.S standard arm/arm/cpufunc_asm_sa11x0.S standard arm/sa11x0/assabet_machdep.c optional assabet diff --git a/sys/arm/sa11x0/sa11x0_io.c b/sys/arm/sa11x0/sa11x0_io.c index 6e78729..ceeaffa 100644 --- a/sys/arm/sa11x0/sa11x0_io.c +++ b/sys/arm/sa11x0/sa11x0_io.c @@ -58,6 +58,7 @@ __FBSDID("$FreeBSD$"); /* Proto types for all the bus_space structure functions */ +bs_protos(generic); bs_protos(sa11x0); /* Declare the sa11x0 bus space tag */ @@ -67,16 +68,16 @@ struct bus_space sa11x0_bs_tag = { NULL, /* mapping/unmapping */ - sa11x0_bs_map, - sa11x0_bs_unmap, - sa11x0_bs_subregion, + generic_bs_map, + generic_bs_unmap, + generic_bs_subregion, /* allocation/deallocation */ - sa11x0_bs_alloc, - sa11x0_bs_free, + generic_bs_alloc, + generic_bs_free, /* barrier */ - sa11x0_bs_barrier, + generic_bs_barrier, /* read (single) */ sa11x0_bs_r_1, @@ -132,118 +133,4 @@ struct bus_space sa11x0_bs_tag = { NULL, }; -/* bus space functions */ - -int -sa11x0_bs_map(t, bpa, size, cacheable, bshp) - void *t; - bus_addr_t bpa; - bus_size_t size; - int cacheable; - bus_space_handle_t *bshp; -{ - u_long startpa, endpa, pa; - vm_offset_t va; - pt_entry_t *pte; - const struct pmap_devmap *pd; - - if ((pd = pmap_devmap_find_pa(bpa, size)) != NULL) { - /* Device was statically mapped. */ - *bshp = pd->pd_va + (bpa - pd->pd_pa); - return 0; - } - - startpa = trunc_page(bpa); - endpa = round_page(bpa + size); - - /* XXX use extent manager to check duplicate mapping */ - - va = kmem_alloc(kernel_map, endpa - startpa); - if (! va) - return(ENOMEM); - - *bshp = (bus_space_handle_t)(va + (bpa - startpa)); - - for(pa = startpa; pa < endpa; pa += PAGE_SIZE, va += PAGE_SIZE) { - pmap_kenter(va, pa); - pte = vtopte(va); - if (cacheable == 0) { - *pte &= ~L2_S_CACHE_MASK; - PTE_SYNC(pte); - } - } - return(0); -} - -int -sa11x0_bs_alloc(t, rstart, rend, size, alignment, boundary, cacheable, - bpap, bshp) - void *t; - bus_addr_t rstart, rend; - bus_size_t size, alignment, boundary; - int cacheable; - bus_addr_t *bpap; - bus_space_handle_t *bshp; -{ - panic("sa11x0_alloc(): Help!"); -} - - -void -sa11x0_bs_unmap(t, h, size) - void *t; - bus_space_handle_t h; - bus_size_t size; -{ - 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 -sa11x0_bs_free(t, bsh, size) - void *t; - bus_space_handle_t bsh; - bus_size_t size; -{ - - panic("sa11x0_free(): Help!"); - /* sa11x0_unmap() does all that we need to do. */ -/* sa11x0_unmap(t, bsh, size);*/ -} - -int -sa11x0_bs_subregion(t, bsh, offset, size, nbshp) - void *t; - bus_space_handle_t bsh; - bus_size_t offset, size; - bus_space_handle_t *nbshp; -{ - - *nbshp = bsh + offset; - return (0); -} - -void -sa11x0_bs_barrier(t, bsh, offset, len, flags) - void *t; - bus_space_handle_t bsh; - bus_size_t offset, len; - int flags; -{ -/* NULL */ -} - /* End of sa11x0_io.c */ diff --git a/sys/arm/xscale/i80321/files.ep80219 b/sys/arm/xscale/i80321/files.ep80219 index cbf2e39..731537e 100644 --- a/sys/arm/xscale/i80321/files.ep80219 +++ b/sys/arm/xscale/i80321/files.ep80219 @@ -3,6 +3,7 @@ # # EP80219 Board Specific # +arm/arm/bus_space_generic.c standard arm/xscale/i80321/iq80321.c standard arm/xscale/i80321/ep80219_machdep.c standard arm/xscale/i80321/obio.c standard diff --git a/sys/arm/xscale/i80321/files.i80219 b/sys/arm/xscale/i80321/files.i80219 index 87e961c..3983899 100644 --- a/sys/arm/xscale/i80321/files.i80219 +++ b/sys/arm/xscale/i80321/files.i80219 @@ -2,6 +2,7 @@ # # IOP Specific # +arm/arm/bus_space_generic.c standard arm/arm/cpufunc_asm_xscale.S standard arm/arm/irq_dispatch.S standard arm/xscale/i80321/i80321.c standard diff --git a/sys/arm/xscale/i80321/files.i80321 b/sys/arm/xscale/i80321/files.i80321 index d3acccd..509bcab 100644 --- a/sys/arm/xscale/i80321/files.i80321 +++ b/sys/arm/xscale/i80321/files.i80321 @@ -1,4 +1,5 @@ #$FreeBSD$ +arm/arm/bus_space_generic.c standard arm/arm/cpufunc_asm_xscale.S standard arm/arm/irq_dispatch.S standard arm/xscale/i80321/i80321.c standard diff --git a/sys/arm/xscale/i80321/files.iq31244 b/sys/arm/xscale/i80321/files.iq31244 index 66d89b3..fc24397 100644 --- a/sys/arm/xscale/i80321/files.iq31244 +++ b/sys/arm/xscale/i80321/files.iq31244 @@ -1,4 +1,5 @@ #$FreeBSD$ +arm/arm/bus_space_generic.c standard arm/xscale/i80321/iq80321.c standard arm/xscale/i80321/iq31244_machdep.c standard arm/xscale/i80321/iq31244_7seg.c optional iq31244_7seg diff --git a/sys/arm/xscale/i80321/obio_space.c b/sys/arm/xscale/i80321/obio_space.c index 252f2c6..8b7b35e 100644 --- a/sys/arm/xscale/i80321/obio_space.c +++ b/sys/arm/xscale/i80321/obio_space.c @@ -46,17 +46,9 @@ __FBSDID("$FreeBSD$"); #include <sys/systm.h> #include <sys/bus.h> -#include <machine/pcb.h> - -#include <vm/vm.h> -#include <vm/pmap.h> -#include <vm/vm_kern.h> -#include <vm/vm_extern.h> - #include <machine/bus.h> /* Prototypes for all the bus_space structure functions */ -bs_protos(obio); bs_protos(generic); bs_protos(generic_armv4); @@ -69,16 +61,16 @@ struct bus_space obio_bs_tag = { (void *) 0, /* mapping/unmapping */ - obio_bs_map, - obio_bs_unmap, - obio_bs_subregion, + generic_bs_map, + generic_bs_unmap, + generic_bs_subregion, /* allocation/deallocation */ - obio_bs_alloc, - obio_bs_free, + generic_bs_alloc, + generic_bs_free, /* barrier */ - obio_bs_barrier, + generic_bs_barrier, /* read (single) */ generic_bs_r_1, @@ -134,92 +126,3 @@ struct bus_space obio_bs_tag = { NULL, NULL, }; - -int -obio_bs_map(void *t, bus_addr_t bpa, bus_size_t size, int flags, - bus_space_handle_t *bshp) -{ - const struct pmap_devmap *pd; - vm_paddr_t startpa, endpa, pa, offset; - vm_offset_t va; - pt_entry_t *pte; - - if ((pd = pmap_devmap_find_pa(bpa, size)) != NULL) { - /* Device was statically mapped. */ - *bshp = pd->pd_va + (bpa - pd->pd_pa); - return (0); - } - - endpa = round_page(bpa + size); - offset = bpa & PAGE_MASK; - startpa = trunc_page(bpa); - - va = kmem_alloc(kernel_map, endpa - startpa); - if (va == 0) - return (ENOMEM); - - *bshp = va + offset; - - for (pa = startpa; pa < endpa; pa += PAGE_SIZE, va += PAGE_SIZE) { - pmap_kenter(va, pa); - pte = vtopte(va); - *pte &= ~L2_S_CACHE_MASK; - PTE_SYNC(pte); - } - - return (0); -} - -int -obio_bs_alloc(void *t, bus_addr_t rstart, bus_addr_t rend, bus_size_t size, - bus_size_t alignment, bus_size_t boundary, int flags, bus_addr_t *bpap, - bus_space_handle_t *bshp) -{ - - panic("obio_bs_alloc(): not implemented"); -} - - -void -obio_bs_unmap(void *t, bus_space_handle_t h, bus_size_t size) -{ - vm_offset_t va, endva; - - if (pmap_devmap_find_va((vm_offset_t)t, size) != NULL) { - /* Device was statically mapped; nothing to do. */ - return; - } - - endva = round_page((vm_offset_t)t + size); - va = trunc_page((vm_offset_t)t); - - while (va < endva) { - pmap_kremove(va); - va += PAGE_SIZE; - } - kmem_free(kernel_map, va, endva - va); -} - -void -obio_bs_free(void *t, bus_space_handle_t bsh, bus_size_t size) -{ - - panic("obio_bs_free(): not implemented"); -} - -int -obio_bs_subregion(void *t, bus_space_handle_t bsh, bus_size_t offset, - bus_size_t size, bus_space_handle_t *nbshp) -{ - - *nbshp = bsh + offset; - return (0); -} - -void -obio_bs_barrier(void *t, bus_space_handle_t bsh, bus_size_t offset, - bus_size_t len, int flags) -{ - - /* Nothing to do. */ -} diff --git a/sys/arm/xscale/i8134x/obio_space.c b/sys/arm/xscale/i8134x/obio_space.c index 252f2c6..8b7b35e 100644 --- a/sys/arm/xscale/i8134x/obio_space.c +++ b/sys/arm/xscale/i8134x/obio_space.c @@ -46,17 +46,9 @@ __FBSDID("$FreeBSD$"); #include <sys/systm.h> #include <sys/bus.h> -#include <machine/pcb.h> - -#include <vm/vm.h> -#include <vm/pmap.h> -#include <vm/vm_kern.h> -#include <vm/vm_extern.h> - #include <machine/bus.h> /* Prototypes for all the bus_space structure functions */ -bs_protos(obio); bs_protos(generic); bs_protos(generic_armv4); @@ -69,16 +61,16 @@ struct bus_space obio_bs_tag = { (void *) 0, /* mapping/unmapping */ - obio_bs_map, - obio_bs_unmap, - obio_bs_subregion, + generic_bs_map, + generic_bs_unmap, + generic_bs_subregion, /* allocation/deallocation */ - obio_bs_alloc, - obio_bs_free, + generic_bs_alloc, + generic_bs_free, /* barrier */ - obio_bs_barrier, + generic_bs_barrier, /* read (single) */ generic_bs_r_1, @@ -134,92 +126,3 @@ struct bus_space obio_bs_tag = { NULL, NULL, }; - -int -obio_bs_map(void *t, bus_addr_t bpa, bus_size_t size, int flags, - bus_space_handle_t *bshp) -{ - const struct pmap_devmap *pd; - vm_paddr_t startpa, endpa, pa, offset; - vm_offset_t va; - pt_entry_t *pte; - - if ((pd = pmap_devmap_find_pa(bpa, size)) != NULL) { - /* Device was statically mapped. */ - *bshp = pd->pd_va + (bpa - pd->pd_pa); - return (0); - } - - endpa = round_page(bpa + size); - offset = bpa & PAGE_MASK; - startpa = trunc_page(bpa); - - va = kmem_alloc(kernel_map, endpa - startpa); - if (va == 0) - return (ENOMEM); - - *bshp = va + offset; - - for (pa = startpa; pa < endpa; pa += PAGE_SIZE, va += PAGE_SIZE) { - pmap_kenter(va, pa); - pte = vtopte(va); - *pte &= ~L2_S_CACHE_MASK; - PTE_SYNC(pte); - } - - return (0); -} - -int -obio_bs_alloc(void *t, bus_addr_t rstart, bus_addr_t rend, bus_size_t size, - bus_size_t alignment, bus_size_t boundary, int flags, bus_addr_t *bpap, - bus_space_handle_t *bshp) -{ - - panic("obio_bs_alloc(): not implemented"); -} - - -void -obio_bs_unmap(void *t, bus_space_handle_t h, bus_size_t size) -{ - vm_offset_t va, endva; - - if (pmap_devmap_find_va((vm_offset_t)t, size) != NULL) { - /* Device was statically mapped; nothing to do. */ - return; - } - - endva = round_page((vm_offset_t)t + size); - va = trunc_page((vm_offset_t)t); - - while (va < endva) { - pmap_kremove(va); - va += PAGE_SIZE; - } - kmem_free(kernel_map, va, endva - va); -} - -void -obio_bs_free(void *t, bus_space_handle_t bsh, bus_size_t size) -{ - - panic("obio_bs_free(): not implemented"); -} - -int -obio_bs_subregion(void *t, bus_space_handle_t bsh, bus_size_t offset, - bus_size_t size, bus_space_handle_t *nbshp) -{ - - *nbshp = bsh + offset; - return (0); -} - -void -obio_bs_barrier(void *t, bus_space_handle_t bsh, bus_size_t offset, - bus_size_t len, int flags) -{ - - /* Nothing to do. */ -} diff --git a/sys/arm/xscale/ixp425/files.avila b/sys/arm/xscale/ixp425/files.avila index 50910ce..41f3f42 100644 --- a/sys/arm/xscale/ixp425/files.avila +++ b/sys/arm/xscale/ixp425/files.avila @@ -1,4 +1,5 @@ #$FreeBSD$ +arm/arm/bus_space_generic.c standard arm/xscale/ixp425/avila_machdep.c standard arm/xscale/ixp425/avila_ata.c optional avila_ata arm/xscale/ixp425/avila_led.c optional avila_led diff --git a/sys/arm/xscale/ixp425/files.ixp425 b/sys/arm/xscale/ixp425/files.ixp425 index c187832..d93524a 100644 --- a/sys/arm/xscale/ixp425/files.ixp425 +++ b/sys/arm/xscale/ixp425/files.ixp425 @@ -1,4 +1,5 @@ #$FreeBSD$ +arm/arm/bus_space_generic.c standard arm/arm/cpufunc_asm_xscale.S standard arm/arm/irq_dispatch.S standard arm/xscale/ixp425/ixp425.c standard diff --git a/sys/arm/xscale/ixp425/ixp425_a4x_space.c b/sys/arm/xscale/ixp425/ixp425_a4x_space.c index 1a6e28f..74239db 100644 --- a/sys/arm/xscale/ixp425/ixp425_a4x_space.c +++ b/sys/arm/xscale/ixp425/ixp425_a4x_space.c @@ -60,7 +60,6 @@ __FBSDID("$FreeBSD$"); #include <machine/bus.h> /* Prototypes for all the bus_space structure functions */ -bs_protos(ixp425); bs_protos(a4x); bs_protos(generic); bs_protos(generic_armv4); @@ -70,16 +69,16 @@ struct bus_space ixp425_a4x_bs_tag = { .bs_cookie = (void *) 0, /* mapping/unmapping */ - .bs_map = ixp425_bs_map, - .bs_unmap = ixp425_bs_unmap, - .bs_subregion = ixp425_bs_subregion, + .bs_map = generic_bs_map, + .bs_unmap = generic_bs_unmap, + .bs_subregion = generic_bs_subregion, /* allocation/deallocation */ - .bs_alloc = ixp425_bs_alloc, /* XXX not implemented */ - .bs_free = ixp425_bs_free, /* XXX not implemented */ + .bs_alloc = generic_bs_alloc, /* XXX not implemented */ + .bs_free = generic_bs_free, /* XXX not implemented */ /* barrier */ - .bs_barrier = ixp425_bs_barrier, + .bs_barrier = generic_bs_barrier, /* read (single) */ .bs_r_1 = a4x_bs_r_1, diff --git a/sys/arm/xscale/ixp425/ixp425_space.c b/sys/arm/xscale/ixp425/ixp425_space.c index 816ff50..982ad4b 100644 --- a/sys/arm/xscale/ixp425/ixp425_space.c +++ b/sys/arm/xscale/ixp425/ixp425_space.c @@ -58,7 +58,6 @@ __FBSDID("$FreeBSD$"); #include <arm/xscale/ixp425/ixp425var.h> /* Proto types for all the bus_space structure functions */ -bs_protos(ixp425); bs_protos(generic); bs_protos(generic_armv4); @@ -67,16 +66,16 @@ struct bus_space ixp425_bs_tag = { .bs_cookie = (void *) 0, /* mapping/unmapping */ - .bs_map = ixp425_bs_map, - .bs_unmap = ixp425_bs_unmap, - .bs_subregion = ixp425_bs_subregion, + .bs_map = generic_bs_map, + .bs_unmap = generic_bs_unmap, + .bs_subregion = generic_bs_subregion, /* allocation/deallocation */ - .bs_alloc = ixp425_bs_alloc, - .bs_free = ixp425_bs_free, + .bs_alloc = generic_bs_alloc, + .bs_free = generic_bs_free, /* barrier */ - .bs_barrier = ixp425_bs_barrier, + .bs_barrier = generic_bs_barrier, /* read (single) */ .bs_r_1 = generic_bs_r_1, @@ -129,87 +128,3 @@ struct bus_space ixp425_bs_tag = { .bs_c_4 = NULL, .bs_c_8 = NULL, }; - -int -ixp425_bs_map(void *t, bus_addr_t bpa, bus_size_t size, - int cacheable, bus_space_handle_t *bshp) -{ - const struct pmap_devmap *pd; - vm_paddr_t startpa, endpa, pa, offset; - vm_offset_t va; - pt_entry_t *pte; - - if ((pd = pmap_devmap_find_pa(bpa, size)) != NULL) { - /* Device was statically mapped. */ - *bshp = pd->pd_va + (bpa - pd->pd_pa); - return (0); - } - - endpa = round_page(bpa + size); - offset = bpa & PAGE_MASK; - startpa = trunc_page(bpa); - - va = kmem_alloc(kernel_map, endpa - startpa); - if (va == 0) - return (ENOMEM); - - *bshp = va + offset; - - for (pa = startpa; pa < endpa; pa += PAGE_SIZE, va += PAGE_SIZE) { - pmap_kenter(va, pa); - pte = vtopte(va); - *pte &= ~L2_S_CACHE_MASK; - PTE_SYNC(pte); - } - - return (0); -} - -void -ixp425_bs_unmap(void *t, bus_space_handle_t h, bus_size_t size) -{ - vm_offset_t va, endva; - - if (pmap_devmap_find_va((vm_offset_t)t, size) != NULL) { - /* Device was statically mapped; nothing to do. */ - return; - } - - endva = round_page((vm_offset_t)t + size); - va = trunc_page((vm_offset_t)t); - - while (va < endva) { - pmap_kremove(va); - va += PAGE_SIZE; - } - kmem_free(kernel_map, va, endva - va); -} - -int -ixp425_bs_alloc(void *t, bus_addr_t rstart, bus_addr_t rend, - bus_size_t size, bus_size_t alignment, bus_size_t boundary, int cacheable, - bus_addr_t *bpap, bus_space_handle_t *bshp) -{ - panic("ixp425_bs_alloc(): not implemented"); -} - -void -ixp425_bs_free(void *t, bus_space_handle_t bsh, bus_size_t size) -{ - panic("ixp425_bs_free(): not implemented"); -} - -int -ixp425_bs_subregion(void *t, bus_space_handle_t bsh, bus_size_t offset, - bus_size_t size, bus_space_handle_t *nbshp) -{ - *nbshp = bsh + offset; - return (0); -} - -void -ixp425_bs_barrier(void *t, bus_space_handle_t bsh, bus_size_t offset, - bus_size_t len, int flags) -{ - /* Nothing to do. */ -} |