1 /* $NetBSD: bus_proto.h,v 1.1 2007/09/26 19:48:39 ad Exp $ */ 2 3 /*- 4 * Copyright (c) 1996, 1997, 1998, 2001, 2007 The NetBSD Foundation, Inc. 5 * All rights reserved. 6 * 7 * This code is derived from software contributed to The NetBSD Foundation 8 * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility, 9 * NASA Ames Research Center, and by Andrew Doran. 10 * 11 * Redistribution and use in source and binary forms, with or without 12 * modification, are permitted provided that the following conditions 13 * are met: 14 * 1. Redistributions of source code must retain the above copyright 15 * notice, this list of conditions and the following disclaimer. 16 * 2. Redistributions in binary form must reproduce the above copyright 17 * notice, this list of conditions and the following disclaimer in the 18 * documentation and/or other materials provided with the distribution. 19 * 3. All advertising materials mentioning features or use of this software 20 * must display the following acknowledgement: 21 * This product includes software developed by the NetBSD 22 * Foundation, Inc. and its contributors. 23 * 4. Neither the name of The NetBSD Foundation nor the names of its 24 * contributors may be used to endorse or promote products derived 25 * from this software without specific prior written permission. 26 * 27 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 28 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 29 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 30 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 31 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 32 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 33 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 34 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 35 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 36 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 37 * POSSIBILITY OF SUCH DAMAGE. 38 */ 39 40 /* 41 * Copyright (c) 1996 Charles M. Hannum. All rights reserved. 42 * Copyright (c) 1996 Christopher G. Demetriou. All rights reserved. 43 * 44 * Redistribution and use in source and binary forms, with or without 45 * modification, are permitted provided that the following conditions 46 * are met: 47 * 1. Redistributions of source code must retain the above copyright 48 * notice, this list of conditions and the following disclaimer. 49 * 2. Redistributions in binary form must reproduce the above copyright 50 * notice, this list of conditions and the following disclaimer in the 51 * documentation and/or other materials provided with the distribution. 52 * 3. All advertising materials mentioning features or use of this software 53 * must display the following acknowledgement: 54 * This product includes software developed by Christopher G. Demetriou 55 * for the NetBSD Project. 56 * 4. The name of the author may not be used to endorse or promote products 57 * derived from this software without specific prior written permission 58 * 59 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 60 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 61 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 62 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 63 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 64 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 65 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 66 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 67 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 68 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 69 */ 70 71 #ifndef _SYS_BUS_PROTO_H_ 72 #define _SYS_BUS_PROTO_H_ 73 74 /* 75 * Forwards needed by prototypes below. 76 */ 77 struct mbuf; 78 struct uio; 79 80 /* 81 * bus_space(9) 82 */ 83 84 /* Map types. */ 85 #define BUS_SPACE_MAP_CACHEABLE 0x01 86 #define BUS_SPACE_MAP_LINEAR 0x02 87 #define BUS_SPACE_MAP_PREFETCHABLE 0x04 88 89 /* Bus read/write barrier methods. */ 90 #define BUS_SPACE_BARRIER_READ 0x01 /* force read barrier */ 91 #define BUS_SPACE_BARRIER_WRITE 0x02 /* force write barrier */ 92 93 int bus_space_map(bus_space_tag_t, bus_addr_t, bus_size_t, int, 94 bus_space_handle_t *); 95 96 void bus_space_unmap(bus_space_tag_t, bus_space_handle_t, bus_size_t); 97 98 int bus_space_subregion(bus_space_tag_t, bus_space_handle_t, 99 bus_size_t, bus_size_t, bus_space_handle_t *); 100 101 int bus_space_alloc(bus_space_tag_t, bus_addr_t, bus_addr_t, 102 bus_size_t, bus_size_t, bus_size_t, 103 int, bus_addr_t *, bus_space_handle_t *); 104 105 void bus_space_free(bus_space_tag_t, bus_space_handle_t, bus_size_t); 106 107 paddr_t bus_space_mmap(bus_space_tag_t, bus_addr_t, off_t, int, int); 108 109 void *bus_space_vaddr(bus_space_tag_t, bus_space_handle_t); 110 111 void bus_space_barrier(bus_space_tag_t tag, bus_space_handle_t bsh, 112 bus_size_t offset, bus_size_t len, int flags); 113 114 /* 115 * bus_space(9) accessors 116 */ 117 118 uint8_t bus_space_read_1(bus_space_tag_t, bus_space_handle_t, 119 bus_size_t); 120 uint8_t bus_space_read_stream_1(bus_space_tag_t, bus_space_handle_t, 121 bus_size_t); 122 123 uint16_t bus_space_read_2(bus_space_tag_t, bus_space_handle_t, 124 bus_size_t); 125 uint16_t bus_space_read_stream_2(bus_space_tag_t, bus_space_handle_t, 126 bus_size_t); 127 128 uint32_t bus_space_read_4(bus_space_tag_t, bus_space_handle_t, 129 bus_size_t); 130 uint32_t bus_space_read_stream_4(bus_space_tag_t, bus_space_handle_t, 131 bus_size_t); 132 133 uint64_t bus_space_read_8(bus_space_tag_t, bus_space_handle_t, 134 bus_size_t); 135 uint64_t bus_space_read_stream_8(bus_space_tag_t, bus_space_handle_t, 136 bus_size_t); 137 138 void bus_space_read_multi_1(bus_space_tag_t, bus_space_handle_t, 139 bus_size_t, uint8_t *, bus_size_t); 140 void bus_space_read_multi_stream_1(bus_space_tag_t, bus_space_handle_t, 141 bus_size_t, uint8_t *, bus_size_t); 142 void bus_space_read_region_1(bus_space_tag_t, bus_space_handle_t, 143 bus_size_t, uint8_t *, bus_size_t); 144 void bus_space_read_region_stream_1(bus_space_tag_t, bus_space_handle_t, 145 bus_size_t, uint8_t *, bus_size_t); 146 147 void bus_space_read_multi_2(bus_space_tag_t, bus_space_handle_t, 148 bus_size_t, uint16_t *, bus_size_t); 149 void bus_space_read_multi_stream_2(bus_space_tag_t, bus_space_handle_t, 150 bus_size_t, uint16_t *, bus_size_t); 151 void bus_space_read_region_2(bus_space_tag_t, bus_space_handle_t, 152 bus_size_t, uint16_t *, bus_size_t); 153 void bus_space_read_region_stream_2(bus_space_tag_t, bus_space_handle_t, 154 bus_size_t, uint16_t *, bus_size_t); 155 156 void bus_space_read_multi_4(bus_space_tag_t, bus_space_handle_t, 157 bus_size_t, uint32_t *, bus_size_t); 158 void bus_space_read_multi_stream_4(bus_space_tag_t, bus_space_handle_t, 159 bus_size_t, uint32_t *, bus_size_t); 160 void bus_space_read_region_4(bus_space_tag_t, bus_space_handle_t, 161 bus_size_t, uint32_t *, bus_size_t); 162 void bus_space_read_region_stream_4(bus_space_tag_t, bus_space_handle_t, 163 bus_size_t, uint32_t *, bus_size_t); 164 165 void bus_space_read_multi_8(bus_space_tag_t, bus_space_handle_t, 166 bus_size_t, uint32_t *, bus_size_t); 167 void bus_space_read_multi_stream_8(bus_space_tag_t, bus_space_handle_t, 168 bus_size_t, uint32_t *, bus_size_t); 169 void bus_space_read_region_8(bus_space_tag_t, bus_space_handle_t, 170 bus_size_t, uint64_t *, bus_size_t); 171 void bus_space_read_region_stream_8(bus_space_tag_t, bus_space_handle_t, 172 bus_size_t, uint64_t *, bus_size_t); 173 174 void bus_space_write_1(bus_space_tag_t, bus_space_handle_t, 175 bus_size_t, uint8_t); 176 void bus_space_write_stream_1(bus_space_tag_t, bus_space_handle_t, 177 bus_size_t, uint8_t); 178 179 void bus_space_write_2(bus_space_tag_t, bus_space_handle_t, 180 bus_size_t, uint16_t); 181 void bus_space_write_stream_2(bus_space_tag_t, bus_space_handle_t, 182 bus_size_t, uint16_t); 183 184 void bus_space_write_4(bus_space_tag_t, bus_space_handle_t, 185 bus_size_t, uint32_t); 186 void bus_space_write_stream_4(bus_space_tag_t, bus_space_handle_t, 187 bus_size_t, uint32_t); 188 189 void bus_space_write_8(bus_space_tag_t, bus_space_handle_t, 190 bus_size_t, uint64_t); 191 void bus_space_write_stream_8(bus_space_tag_t, bus_space_handle_t, 192 bus_size_t, uint64_t); 193 194 void bus_space_write_multi_1(bus_space_tag_t, bus_space_handle_t, 195 bus_size_t, const uint8_t *, 196 bus_size_t); 197 void bus_space_write_multi_stream_1(bus_space_tag_t, bus_space_handle_t, 198 bus_size_t, const uint8_t *, 199 bus_size_t); 200 void bus_space_write_region_1(bus_space_tag_t, bus_space_handle_t, 201 bus_size_t, const uint8_t *, 202 bus_size_t); 203 void bus_space_write_region_stream_1(bus_space_tag_t, bus_space_handle_t, 204 bus_size_t, const uint8_t *, 205 bus_size_t); 206 207 void bus_space_write_multi_2(bus_space_tag_t, bus_space_handle_t, 208 bus_size_t, const uint16_t *, 209 bus_size_t); 210 void bus_space_write_multi_stream_2(bus_space_tag_t, bus_space_handle_t, 211 bus_size_t, const uint16_t *, 212 bus_size_t); 213 void bus_space_write_region_2(bus_space_tag_t, bus_space_handle_t, 214 bus_size_t, const uint16_t *, 215 bus_size_t); 216 void bus_space_write_region_stream_2(bus_space_tag_t, bus_space_handle_t, 217 bus_size_t, const uint16_t *, 218 bus_size_t); 219 220 void bus_space_write_multi_4(bus_space_tag_t, bus_space_handle_t, 221 bus_size_t, const uint32_t *, 222 bus_size_t); 223 void bus_space_write_multi_stream_4(bus_space_tag_t, bus_space_handle_t, 224 bus_size_t, const uint32_t *, 225 bus_size_t); 226 void bus_space_write_region_4(bus_space_tag_t, bus_space_handle_t, 227 bus_size_t, const uint32_t *, 228 bus_size_t); 229 void bus_space_write_region_stream_4(bus_space_tag_t, bus_space_handle_t, 230 bus_size_t, const uint32_t *, 231 bus_size_t); 232 233 void bus_space_write_multi_8(bus_space_tag_t, bus_space_handle_t, 234 bus_size_t, const uint32_t *, 235 bus_size_t); 236 void bus_space_write_multi_stream_8(bus_space_tag_t, bus_space_handle_t, 237 bus_size_t, const uint32_t *, 238 bus_size_t); 239 void bus_space_write_region_8(bus_space_tag_t, bus_space_handle_t, 240 bus_size_t, const uint64_t *, 241 bus_size_t); 242 void bus_space_write_region_stream_8(bus_space_tag_t, bus_space_handle_t, 243 bus_size_t, const uint64_t *, 244 bus_size_t); 245 246 void bus_space_set_multi_1(bus_space_tag_t, bus_space_handle_t, 247 bus_size_t, u_int8_t, size_t); 248 void bus_space_set_multi_2(bus_space_tag_t, bus_space_handle_t, 249 bus_size_t, u_int16_t, size_t); 250 void bus_space_set_multi_4(bus_space_tag_t, bus_space_handle_t, 251 bus_size_t, u_int32_t, size_t); 252 void bus_space_set_multi_8(bus_space_tag_t, bus_space_handle_t, 253 bus_size_t, u_int64_t, size_t); 254 255 256 void bus_space_set_region_1(bus_space_tag_t, bus_space_handle_t, 257 bus_size_t, u_int8_t, size_t); 258 void bus_space_set_region_2(bus_space_tag_t, bus_space_handle_t, 259 bus_size_t, u_int16_t, size_t); 260 void bus_space_set_region_4(bus_space_tag_t, bus_space_handle_t, 261 bus_size_t, u_int32_t, size_t); 262 void bus_space_set_region_8(bus_space_tag_t, bus_space_handle_t, 263 bus_size_t, u_int64_t, size_t); 264 265 void bus_space_copy_region_1(bus_space_tag_t, bus_space_handle_t, 266 bus_size_t, bus_space_handle_t, 267 bus_size_t, size_t); 268 void bus_space_copy_region_2(bus_space_tag_t, bus_space_handle_t, 269 bus_size_t, bus_space_handle_t, 270 bus_size_t, size_t); 271 void bus_space_copy_region_4(bus_space_tag_t, bus_space_handle_t, 272 bus_size_t, bus_space_handle_t, 273 bus_size_t, size_t); 274 void bus_space_copy_region_8(bus_space_tag_t, bus_space_handle_t, 275 bus_size_t, bus_space_handle_t, 276 bus_size_t, size_t); 277 278 /* 279 * bus_dma(9) 280 */ 281 282 /* Flags used in various bus DMA methods. */ 283 #define BUS_DMA_WAITOK 0x000 /* safe to sleep (pseudo-flag) */ 284 #define BUS_DMA_NOWAIT 0x001 /* not safe to sleep */ 285 #define BUS_DMA_ALLOCNOW 0x002 /* perform resource allocation now */ 286 #define BUS_DMA_COHERENT 0x004 /* hint: map memory DMA coherent */ 287 #define BUS_DMA_STREAMING 0x008 /* hint: sequential, unidirectional */ 288 #define BUS_DMA_BUS1 0x010 /* placeholders for bus functions... */ 289 #define BUS_DMA_BUS2 0x020 290 #define BUS_DMA_BUS3 0x040 291 #define BUS_DMA_BUS4 0x080 292 #define BUS_DMA_READ 0x100 /* mapping is device -> memory only */ 293 #define BUS_DMA_WRITE 0x200 /* mapping is memory -> device only */ 294 #define BUS_DMA_NOCACHE 0x400 /* hint: map non-cached memory */ 295 296 /* Operations performed by bus_dmamap_sync(). */ 297 #define BUS_DMASYNC_PREREAD 0x01 /* pre-read synchronization */ 298 #define BUS_DMASYNC_POSTREAD 0x02 /* post-read synchronization */ 299 #define BUS_DMASYNC_PREWRITE 0x04 /* pre-write synchronization */ 300 #define BUS_DMASYNC_POSTWRITE 0x08 /* post-write synchronization */ 301 302 int bus_dmamap_create(bus_dma_tag_t, bus_size_t, int, bus_size_t, 303 bus_size_t, int, bus_dmamap_t *); 304 void bus_dmamap_destroy(bus_dma_tag_t, bus_dmamap_t); 305 int bus_dmamap_load(bus_dma_tag_t, bus_dmamap_t, void *, bus_size_t, 306 struct proc *, int); 307 int bus_dmamap_load_mbuf(bus_dma_tag_t, bus_dmamap_t, 308 struct mbuf *, int); 309 int bus_dmamap_load_uio(bus_dma_tag_t, bus_dmamap_t, 310 struct uio *, int); 311 int bus_dmamap_load_raw(bus_dma_tag_t, bus_dmamap_t, 312 bus_dma_segment_t *, int, bus_size_t, int); 313 void bus_dmamap_unload(bus_dma_tag_t, bus_dmamap_t); 314 void bus_dmamap_sync(bus_dma_tag_t, bus_dmamap_t, bus_addr_t, 315 bus_size_t, int); 316 317 int bus_dmamem_alloc(bus_dma_tag_t, bus_size_t, bus_size_t, 318 bus_size_t, bus_dma_segment_t *, 319 int, int *, int); 320 void bus_dmamem_free(bus_dma_tag_t, bus_dma_segment_t *, int); 321 int bus_dmamem_map(bus_dma_tag_t, bus_dma_segment_t *, int, 322 size_t, void **, int); 323 void bus_dmamem_unmap(bus_dma_tag_t, void *kva, size_t); 324 paddr_t bus_dmamem_mmap(bus_dma_tag_t, bus_dma_segment_t *, int, 325 off_t, int, int); 326 327 int bus_dmatag_subregion(bus_dma_tag_t, bus_addr_t, bus_addr_t, 328 bus_dma_tag_t *, int); 329 void bus_dmatag_destroy(bus_dma_tag_t); 330 331 #endif /* _SYS_BUS_PROTO_H_ */ 332