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 /sys/arm/sa11x0 | |
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)
Diffstat (limited to 'sys/arm/sa11x0')
-rw-r--r-- | sys/arm/sa11x0/files.sa11x0 | 1 | ||||
-rw-r--r-- | sys/arm/sa11x0/sa11x0_io.c | 127 |
2 files changed, 8 insertions, 120 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 */ |