ixp425_space.c (164426) | ixp425_space.c (177887) |
---|---|
1/* $NetBSD: ixp425_space.c,v 1.6 2006/04/10 03:36:03 simonb Exp $ */ 2 3/* 4 * Copyright (c) 2003 5 * Ichiro FUKUHARA <ichiro@ichiro.org>. 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 20 unchanged lines hidden (view full) --- 29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33 * SUCH DAMAGE. 34 */ 35 36#include <sys/cdefs.h> | 1/* $NetBSD: ixp425_space.c,v 1.6 2006/04/10 03:36:03 simonb Exp $ */ 2 3/* 4 * Copyright (c) 2003 5 * Ichiro FUKUHARA <ichiro@ichiro.org>. 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 20 unchanged lines hidden (view full) --- 29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33 * SUCH DAMAGE. 34 */ 35 36#include <sys/cdefs.h> |
37__FBSDID("$FreeBSD: head/sys/arm/xscale/ixp425/ixp425_space.c 164426 2006-11-19 23:55:23Z sam $"); | 37__FBSDID("$FreeBSD: head/sys/arm/xscale/ixp425/ixp425_space.c 177887 2008-04-03 18:22:08Z raj $"); |
38 39/* 40 * bus_space I/O functions for ixp425 41 */ 42 43#include <sys/param.h> 44#include <sys/systm.h> 45#include <sys/bus.h> --- 7 unchanged lines hidden (view full) --- 53#include <vm/vm_extern.h> 54 55#include <machine/bus.h> 56 57#include <arm/xscale/ixp425/ixp425reg.h> 58#include <arm/xscale/ixp425/ixp425var.h> 59 60/* Proto types for all the bus_space structure functions */ | 38 39/* 40 * bus_space I/O functions for ixp425 41 */ 42 43#include <sys/param.h> 44#include <sys/systm.h> 45#include <sys/bus.h> --- 7 unchanged lines hidden (view full) --- 53#include <vm/vm_extern.h> 54 55#include <machine/bus.h> 56 57#include <arm/xscale/ixp425/ixp425reg.h> 58#include <arm/xscale/ixp425/ixp425var.h> 59 60/* Proto types for all the bus_space structure functions */ |
61bs_protos(ixp425); | |
62bs_protos(generic); 63bs_protos(generic_armv4); 64 65struct bus_space ixp425_bs_tag = { 66 /* cookie */ 67 .bs_cookie = (void *) 0, 68 69 /* mapping/unmapping */ | 61bs_protos(generic); 62bs_protos(generic_armv4); 63 64struct bus_space ixp425_bs_tag = { 65 /* cookie */ 66 .bs_cookie = (void *) 0, 67 68 /* mapping/unmapping */ |
70 .bs_map = ixp425_bs_map, 71 .bs_unmap = ixp425_bs_unmap, 72 .bs_subregion = ixp425_bs_subregion, | 69 .bs_map = generic_bs_map, 70 .bs_unmap = generic_bs_unmap, 71 .bs_subregion = generic_bs_subregion, |
73 74 /* allocation/deallocation */ | 72 73 /* allocation/deallocation */ |
75 .bs_alloc = ixp425_bs_alloc, 76 .bs_free = ixp425_bs_free, | 74 .bs_alloc = generic_bs_alloc, 75 .bs_free = generic_bs_free, |
77 78 /* barrier */ | 76 77 /* barrier */ |
79 .bs_barrier = ixp425_bs_barrier, | 78 .bs_barrier = generic_bs_barrier, |
80 81 /* read (single) */ 82 .bs_r_1 = generic_bs_r_1, 83 .bs_r_2 = generic_armv4_bs_r_2, 84 .bs_r_4 = generic_bs_r_4, 85 .bs_r_8 = NULL, 86 87 /* read multiple */ --- 36 unchanged lines hidden (view full) --- 124 .bs_sr_8 = NULL, 125 126 /* copy */ 127 .bs_c_1 = NULL, 128 .bs_c_2 = generic_armv4_bs_c_2, 129 .bs_c_4 = NULL, 130 .bs_c_8 = NULL, 131}; | 79 80 /* read (single) */ 81 .bs_r_1 = generic_bs_r_1, 82 .bs_r_2 = generic_armv4_bs_r_2, 83 .bs_r_4 = generic_bs_r_4, 84 .bs_r_8 = NULL, 85 86 /* read multiple */ --- 36 unchanged lines hidden (view full) --- 123 .bs_sr_8 = NULL, 124 125 /* copy */ 126 .bs_c_1 = NULL, 127 .bs_c_2 = generic_armv4_bs_c_2, 128 .bs_c_4 = NULL, 129 .bs_c_8 = NULL, 130}; |
132 133int 134ixp425_bs_map(void *t, bus_addr_t bpa, bus_size_t size, 135 int cacheable, bus_space_handle_t *bshp) 136{ 137 const struct pmap_devmap *pd; 138 vm_paddr_t startpa, endpa, pa, offset; 139 vm_offset_t va; 140 pt_entry_t *pte; 141 142 if ((pd = pmap_devmap_find_pa(bpa, size)) != NULL) { 143 /* Device was statically mapped. */ 144 *bshp = pd->pd_va + (bpa - pd->pd_pa); 145 return (0); 146 } 147 148 endpa = round_page(bpa + size); 149 offset = bpa & PAGE_MASK; 150 startpa = trunc_page(bpa); 151 152 va = kmem_alloc(kernel_map, endpa - startpa); 153 if (va == 0) 154 return (ENOMEM); 155 156 *bshp = va + offset; 157 158 for (pa = startpa; pa < endpa; pa += PAGE_SIZE, va += PAGE_SIZE) { 159 pmap_kenter(va, pa); 160 pte = vtopte(va); 161 *pte &= ~L2_S_CACHE_MASK; 162 PTE_SYNC(pte); 163 } 164 165 return (0); 166} 167 168void 169ixp425_bs_unmap(void *t, bus_space_handle_t h, bus_size_t size) 170{ 171 vm_offset_t va, endva; 172 173 if (pmap_devmap_find_va((vm_offset_t)t, size) != NULL) { 174 /* Device was statically mapped; nothing to do. */ 175 return; 176 } 177 178 endva = round_page((vm_offset_t)t + size); 179 va = trunc_page((vm_offset_t)t); 180 181 while (va < endva) { 182 pmap_kremove(va); 183 va += PAGE_SIZE; 184 } 185 kmem_free(kernel_map, va, endva - va); 186} 187 188int 189ixp425_bs_alloc(void *t, bus_addr_t rstart, bus_addr_t rend, 190 bus_size_t size, bus_size_t alignment, bus_size_t boundary, int cacheable, 191 bus_addr_t *bpap, bus_space_handle_t *bshp) 192{ 193 panic("ixp425_bs_alloc(): not implemented"); 194} 195 196void 197ixp425_bs_free(void *t, bus_space_handle_t bsh, bus_size_t size) 198{ 199 panic("ixp425_bs_free(): not implemented"); 200} 201 202int 203ixp425_bs_subregion(void *t, bus_space_handle_t bsh, bus_size_t offset, 204 bus_size_t size, bus_space_handle_t *nbshp) 205{ 206 *nbshp = bsh + offset; 207 return (0); 208} 209 210void 211ixp425_bs_barrier(void *t, bus_space_handle_t bsh, bus_size_t offset, 212 bus_size_t len, int flags) 213{ 214 /* Nothing to do. */ 215} | |