summaryrefslogtreecommitdiffstats
path: root/sys/arm/sa11x0
diff options
context:
space:
mode:
authorraj <raj@FreeBSD.org>2008-04-03 18:22:08 +0000
committerraj <raj@FreeBSD.org>2008-04-03 18:22:08 +0000
commit87f84373e2c267e31d0ddfeadbc54f86b9c52ad6 (patch)
treecb1838993293644f3c16d2c0c9c602dd444e5fac /sys/arm/sa11x0
parent6eb81d8e9b498a67f3a1528af0cef34b760e2034 (diff)
downloadFreeBSD-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.sa11x01
-rw-r--r--sys/arm/sa11x0/sa11x0_io.c127
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 */
OpenPOWER on IntegriCloud