1 /* $NetBSD: bus_proto.h,v 1.14 2022/01/15 07:11:26 skrll 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 * 20 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 21 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 22 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 23 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 24 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30 * POSSIBILITY OF SUCH DAMAGE. 31 */ 32 33 /* 34 * Copyright (c) 1996 Charles M. Hannum. All rights reserved. 35 * Copyright (c) 1996 Christopher G. Demetriou. All rights reserved. 36 * 37 * Redistribution and use in source and binary forms, with or without 38 * modification, are permitted provided that the following conditions 39 * are met: 40 * 1. Redistributions of source code must retain the above copyright 41 * notice, this list of conditions and the following disclaimer. 42 * 2. Redistributions in binary form must reproduce the above copyright 43 * notice, this list of conditions and the following disclaimer in the 44 * documentation and/or other materials provided with the distribution. 45 * 3. All advertising materials mentioning features or use of this software 46 * must display the following acknowledgement: 47 * This product includes software developed by Christopher G. Demetriou 48 * for the NetBSD Project. 49 * 4. The name of the author may not be used to endorse or promote products 50 * derived from this software without specific prior written permission 51 * 52 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 53 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 54 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 55 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 56 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 57 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 58 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 59 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 60 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 61 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 62 */ 63 64 #ifndef _SYS_BUS_PROTO_H_ 65 #define _SYS_BUS_PROTO_H_ 66 67 #ifdef _KERNEL_OPT 68 #include "opt_kasan.h" 69 #include "opt_kcsan.h" 70 #include "opt_kmsan.h" 71 #endif 72 73 /* 74 * Forwards needed by prototypes below. 75 */ 76 struct mbuf; 77 struct uio; 78 79 /* 80 * bus_space(9) 81 */ 82 83 /* Map types. */ 84 #define BUS_SPACE_MAP_CACHEABLE 0x01 85 #define BUS_SPACE_MAP_LINEAR 0x02 86 #define BUS_SPACE_MAP_PREFETCHABLE 0x04 87 88 /* Bus read/write barrier methods. */ 89 #define BUS_SPACE_BARRIER_READ 0x01 /* force read barrier */ 90 #define BUS_SPACE_BARRIER_WRITE 0x02 /* force write barrier */ 91 92 int bus_space_map(bus_space_tag_t, bus_addr_t, bus_size_t, int, 93 bus_space_handle_t *); 94 95 void bus_space_unmap(bus_space_tag_t, bus_space_handle_t, bus_size_t); 96 97 int bus_space_subregion(bus_space_tag_t, bus_space_handle_t, 98 bus_size_t, bus_size_t, bus_space_handle_t *); 99 100 int bus_space_alloc(bus_space_tag_t, bus_addr_t, bus_addr_t, 101 bus_size_t, bus_size_t, bus_size_t, 102 int, bus_addr_t *, bus_space_handle_t *); 103 104 void bus_space_free(bus_space_tag_t, bus_space_handle_t, bus_size_t); 105 106 paddr_t bus_space_mmap(bus_space_tag_t, bus_addr_t, off_t, int, int); 107 108 void *bus_space_vaddr(bus_space_tag_t, bus_space_handle_t); 109 110 void bus_space_barrier(bus_space_tag_t tag, bus_space_handle_t bsh, 111 bus_size_t offset, bus_size_t len, int flags); 112 113 /* 114 * bus_space(9) accessors 115 */ 116 117 uint8_t bus_space_read_1(bus_space_tag_t, bus_space_handle_t, 118 bus_size_t); 119 uint8_t bus_space_read_stream_1(bus_space_tag_t, bus_space_handle_t, 120 bus_size_t); 121 122 uint16_t bus_space_read_2(bus_space_tag_t, bus_space_handle_t, 123 bus_size_t); 124 uint16_t bus_space_read_stream_2(bus_space_tag_t, bus_space_handle_t, 125 bus_size_t); 126 127 uint32_t bus_space_read_4(bus_space_tag_t, bus_space_handle_t, 128 bus_size_t); 129 uint32_t bus_space_read_stream_4(bus_space_tag_t, bus_space_handle_t, 130 bus_size_t); 131 132 #ifdef __HAVE_BUS_SPACE_8 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 #endif 138 139 #if defined(KASAN) && defined(__HAVE_KASAN_INSTR_BUS) 140 #define BUS_SPACE_READ_MEM_PROTOS(bytes, bits) \ 141 void kasan_bus_space_read_multi_##bytes(bus_space_tag_t, bus_space_handle_t, \ 142 bus_size_t, uint##bits##_t *, bus_size_t); \ 143 void kasan_bus_space_read_multi_stream_##bytes(bus_space_tag_t, \ 144 bus_space_handle_t, bus_size_t, uint##bits##_t *, bus_size_t); \ 145 void kasan_bus_space_read_region_##bytes(bus_space_tag_t, bus_space_handle_t, \ 146 bus_size_t, uint##bits##_t *, bus_size_t); \ 147 void kasan_bus_space_read_region_stream_##bytes(bus_space_tag_t, \ 148 bus_space_handle_t, bus_size_t, uint##bits##_t *, bus_size_t); 149 #define bus_space_read_multi_1 kasan_bus_space_read_multi_1 150 #define bus_space_read_multi_2 kasan_bus_space_read_multi_2 151 #define bus_space_read_multi_4 kasan_bus_space_read_multi_4 152 #define bus_space_read_multi_8 kasan_bus_space_read_multi_8 153 #define bus_space_read_multi_stream_1 kasan_bus_space_read_multi_stream_1 154 #define bus_space_read_multi_stream_2 kasan_bus_space_read_multi_stream_2 155 #define bus_space_read_multi_stream_4 kasan_bus_space_read_multi_stream_4 156 #define bus_space_read_multi_stream_8 kasan_bus_space_read_multi_stream_8 157 #define bus_space_read_region_1 kasan_bus_space_read_region_1 158 #define bus_space_read_region_2 kasan_bus_space_read_region_2 159 #define bus_space_read_region_4 kasan_bus_space_read_region_4 160 #define bus_space_read_region_8 kasan_bus_space_read_region_8 161 #define bus_space_read_region_stream_1 kasan_bus_space_read_region_stream_1 162 #define bus_space_read_region_stream_2 kasan_bus_space_read_region_stream_2 163 #define bus_space_read_region_stream_4 kasan_bus_space_read_region_stream_4 164 #define bus_space_read_region_stream_8 kasan_bus_space_read_region_stream_8 165 #elif defined(KCSAN) 166 #define BUS_SPACE_READ_MEM_PROTOS(bytes, bits) \ 167 void kcsan_bus_space_read_multi_##bytes(bus_space_tag_t, bus_space_handle_t, \ 168 bus_size_t, uint##bits##_t *, bus_size_t); \ 169 void kcsan_bus_space_read_multi_stream_##bytes(bus_space_tag_t, \ 170 bus_space_handle_t, bus_size_t, uint##bits##_t *, bus_size_t); \ 171 void kcsan_bus_space_read_region_##bytes(bus_space_tag_t, bus_space_handle_t, \ 172 bus_size_t, uint##bits##_t *, bus_size_t); \ 173 void kcsan_bus_space_read_region_stream_##bytes(bus_space_tag_t, \ 174 bus_space_handle_t, bus_size_t, uint##bits##_t *, bus_size_t); 175 #define bus_space_read_multi_1 kcsan_bus_space_read_multi_1 176 #define bus_space_read_multi_2 kcsan_bus_space_read_multi_2 177 #define bus_space_read_multi_4 kcsan_bus_space_read_multi_4 178 #define bus_space_read_multi_8 kcsan_bus_space_read_multi_8 179 #define bus_space_read_multi_stream_1 kcsan_bus_space_read_multi_stream_1 180 #define bus_space_read_multi_stream_2 kcsan_bus_space_read_multi_stream_2 181 #define bus_space_read_multi_stream_4 kcsan_bus_space_read_multi_stream_4 182 #define bus_space_read_multi_stream_8 kcsan_bus_space_read_multi_stream_8 183 #define bus_space_read_region_1 kcsan_bus_space_read_region_1 184 #define bus_space_read_region_2 kcsan_bus_space_read_region_2 185 #define bus_space_read_region_4 kcsan_bus_space_read_region_4 186 #define bus_space_read_region_8 kcsan_bus_space_read_region_8 187 #define bus_space_read_region_stream_1 kcsan_bus_space_read_region_stream_1 188 #define bus_space_read_region_stream_2 kcsan_bus_space_read_region_stream_2 189 #define bus_space_read_region_stream_4 kcsan_bus_space_read_region_stream_4 190 #define bus_space_read_region_stream_8 kcsan_bus_space_read_region_stream_8 191 #elif defined(KMSAN) 192 #define BUS_SPACE_READ_MEM_PROTOS(bytes, bits) \ 193 void kmsan_bus_space_read_multi_##bytes(bus_space_tag_t, bus_space_handle_t, \ 194 bus_size_t, uint##bits##_t *, bus_size_t); \ 195 void kmsan_bus_space_read_multi_stream_##bytes(bus_space_tag_t, \ 196 bus_space_handle_t, bus_size_t, uint##bits##_t *, bus_size_t); \ 197 void kmsan_bus_space_read_region_##bytes(bus_space_tag_t, bus_space_handle_t, \ 198 bus_size_t, uint##bits##_t *, bus_size_t); \ 199 void kmsan_bus_space_read_region_stream_##bytes(bus_space_tag_t, \ 200 bus_space_handle_t, bus_size_t, uint##bits##_t *, bus_size_t); 201 #define bus_space_read_multi_1 kmsan_bus_space_read_multi_1 202 #define bus_space_read_multi_2 kmsan_bus_space_read_multi_2 203 #define bus_space_read_multi_4 kmsan_bus_space_read_multi_4 204 #define bus_space_read_multi_8 kmsan_bus_space_read_multi_8 205 #define bus_space_read_multi_stream_1 kmsan_bus_space_read_multi_stream_1 206 #define bus_space_read_multi_stream_2 kmsan_bus_space_read_multi_stream_2 207 #define bus_space_read_multi_stream_4 kmsan_bus_space_read_multi_stream_4 208 #define bus_space_read_multi_stream_8 kmsan_bus_space_read_multi_stream_8 209 #define bus_space_read_region_1 kmsan_bus_space_read_region_1 210 #define bus_space_read_region_2 kmsan_bus_space_read_region_2 211 #define bus_space_read_region_4 kmsan_bus_space_read_region_4 212 #define bus_space_read_region_8 kmsan_bus_space_read_region_8 213 #define bus_space_read_region_stream_1 kmsan_bus_space_read_region_stream_1 214 #define bus_space_read_region_stream_2 kmsan_bus_space_read_region_stream_2 215 #define bus_space_read_region_stream_4 kmsan_bus_space_read_region_stream_4 216 #define bus_space_read_region_stream_8 kmsan_bus_space_read_region_stream_8 217 #else 218 #define BUS_SPACE_READ_MEM_PROTOS(bytes, bits) \ 219 void bus_space_read_multi_##bytes(bus_space_tag_t, bus_space_handle_t, \ 220 bus_size_t, uint##bits##_t *, bus_size_t); \ 221 void bus_space_read_multi_stream_##bytes(bus_space_tag_t, \ 222 bus_space_handle_t, bus_size_t, uint##bits##_t *, bus_size_t); \ 223 void bus_space_read_region_##bytes(bus_space_tag_t, bus_space_handle_t, \ 224 bus_size_t, uint##bits##_t *, bus_size_t); \ 225 void bus_space_read_region_stream_##bytes(bus_space_tag_t, \ 226 bus_space_handle_t, bus_size_t, uint##bits##_t *, bus_size_t); 227 #endif 228 229 BUS_SPACE_READ_MEM_PROTOS(1, 8) 230 BUS_SPACE_READ_MEM_PROTOS(2, 16) 231 BUS_SPACE_READ_MEM_PROTOS(4, 32) 232 BUS_SPACE_READ_MEM_PROTOS(8, 64) 233 234 void bus_space_write_1(bus_space_tag_t, bus_space_handle_t, 235 bus_size_t, uint8_t); 236 void bus_space_write_stream_1(bus_space_tag_t, bus_space_handle_t, 237 bus_size_t, uint8_t); 238 239 void bus_space_write_2(bus_space_tag_t, bus_space_handle_t, 240 bus_size_t, uint16_t); 241 void bus_space_write_stream_2(bus_space_tag_t, bus_space_handle_t, 242 bus_size_t, uint16_t); 243 244 void bus_space_write_4(bus_space_tag_t, bus_space_handle_t, 245 bus_size_t, uint32_t); 246 void bus_space_write_stream_4(bus_space_tag_t, bus_space_handle_t, 247 bus_size_t, uint32_t); 248 249 #ifdef __HAVE_BUS_SPACE_8 250 void bus_space_write_8(bus_space_tag_t, bus_space_handle_t, 251 bus_size_t, uint64_t); 252 void bus_space_write_stream_8(bus_space_tag_t, bus_space_handle_t, 253 bus_size_t, uint64_t); 254 #endif 255 256 #if defined(KASAN) && defined(__HAVE_KASAN_INSTR_BUS) 257 #define BUS_SPACE_WRITE_MEM_PROTOS(bytes, bits) \ 258 void kasan_bus_space_write_multi_##bytes(bus_space_tag_t, bus_space_handle_t, \ 259 bus_size_t, const uint##bits##_t *, bus_size_t); \ 260 void kasan_bus_space_write_multi_stream_##bytes(bus_space_tag_t, \ 261 bus_space_handle_t, bus_size_t, const uint##bits##_t *, bus_size_t); \ 262 void kasan_bus_space_write_region_##bytes(bus_space_tag_t, bus_space_handle_t, \ 263 bus_size_t, const uint##bits##_t *, bus_size_t); \ 264 void kasan_bus_space_write_region_stream_##bytes(bus_space_tag_t, \ 265 bus_space_handle_t, bus_size_t, const uint##bits##_t *, bus_size_t); 266 #define bus_space_write_multi_1 kasan_bus_space_write_multi_1 267 #define bus_space_write_multi_2 kasan_bus_space_write_multi_2 268 #define bus_space_write_multi_4 kasan_bus_space_write_multi_4 269 #define bus_space_write_multi_8 kasan_bus_space_write_multi_8 270 #define bus_space_write_multi_stream_1 kasan_bus_space_write_multi_stream_1 271 #define bus_space_write_multi_stream_2 kasan_bus_space_write_multi_stream_2 272 #define bus_space_write_multi_stream_4 kasan_bus_space_write_multi_stream_4 273 #define bus_space_write_multi_stream_8 kasan_bus_space_write_multi_stream_8 274 #define bus_space_write_region_1 kasan_bus_space_write_region_1 275 #define bus_space_write_region_2 kasan_bus_space_write_region_2 276 #define bus_space_write_region_4 kasan_bus_space_write_region_4 277 #define bus_space_write_region_8 kasan_bus_space_write_region_8 278 #define bus_space_write_region_stream_1 kasan_bus_space_write_region_stream_1 279 #define bus_space_write_region_stream_2 kasan_bus_space_write_region_stream_2 280 #define bus_space_write_region_stream_4 kasan_bus_space_write_region_stream_4 281 #define bus_space_write_region_stream_8 kasan_bus_space_write_region_stream_8 282 #elif defined(KCSAN) 283 #define BUS_SPACE_WRITE_MEM_PROTOS(bytes, bits) \ 284 void kcsan_bus_space_write_multi_##bytes(bus_space_tag_t, bus_space_handle_t, \ 285 bus_size_t, const uint##bits##_t *, bus_size_t); \ 286 void kcsan_bus_space_write_multi_stream_##bytes(bus_space_tag_t, \ 287 bus_space_handle_t, bus_size_t, const uint##bits##_t *, bus_size_t); \ 288 void kcsan_bus_space_write_region_##bytes(bus_space_tag_t, bus_space_handle_t, \ 289 bus_size_t, const uint##bits##_t *, bus_size_t); \ 290 void kcsan_bus_space_write_region_stream_##bytes(bus_space_tag_t, \ 291 bus_space_handle_t, bus_size_t, const uint##bits##_t *, bus_size_t); 292 #define bus_space_write_multi_1 kcsan_bus_space_write_multi_1 293 #define bus_space_write_multi_2 kcsan_bus_space_write_multi_2 294 #define bus_space_write_multi_4 kcsan_bus_space_write_multi_4 295 #define bus_space_write_multi_8 kcsan_bus_space_write_multi_8 296 #define bus_space_write_multi_stream_1 kcsan_bus_space_write_multi_stream_1 297 #define bus_space_write_multi_stream_2 kcsan_bus_space_write_multi_stream_2 298 #define bus_space_write_multi_stream_4 kcsan_bus_space_write_multi_stream_4 299 #define bus_space_write_multi_stream_8 kcsan_bus_space_write_multi_stream_8 300 #define bus_space_write_region_1 kcsan_bus_space_write_region_1 301 #define bus_space_write_region_2 kcsan_bus_space_write_region_2 302 #define bus_space_write_region_4 kcsan_bus_space_write_region_4 303 #define bus_space_write_region_8 kcsan_bus_space_write_region_8 304 #define bus_space_write_region_stream_1 kcsan_bus_space_write_region_stream_1 305 #define bus_space_write_region_stream_2 kcsan_bus_space_write_region_stream_2 306 #define bus_space_write_region_stream_4 kcsan_bus_space_write_region_stream_4 307 #define bus_space_write_region_stream_8 kcsan_bus_space_write_region_stream_8 308 #elif defined(KMSAN) 309 #define BUS_SPACE_WRITE_MEM_PROTOS(bytes, bits) \ 310 void kmsan_bus_space_write_multi_##bytes(bus_space_tag_t, bus_space_handle_t, \ 311 bus_size_t, const uint##bits##_t *, bus_size_t); \ 312 void kmsan_bus_space_write_multi_stream_##bytes(bus_space_tag_t, \ 313 bus_space_handle_t, bus_size_t, const uint##bits##_t *, bus_size_t); \ 314 void kmsan_bus_space_write_region_##bytes(bus_space_tag_t, bus_space_handle_t, \ 315 bus_size_t, const uint##bits##_t *, bus_size_t); \ 316 void kmsan_bus_space_write_region_stream_##bytes(bus_space_tag_t, \ 317 bus_space_handle_t, bus_size_t, const uint##bits##_t *, bus_size_t); 318 #define bus_space_write_multi_1 kmsan_bus_space_write_multi_1 319 #define bus_space_write_multi_2 kmsan_bus_space_write_multi_2 320 #define bus_space_write_multi_4 kmsan_bus_space_write_multi_4 321 #define bus_space_write_multi_8 kmsan_bus_space_write_multi_8 322 #define bus_space_write_multi_stream_1 kmsan_bus_space_write_multi_stream_1 323 #define bus_space_write_multi_stream_2 kmsan_bus_space_write_multi_stream_2 324 #define bus_space_write_multi_stream_4 kmsan_bus_space_write_multi_stream_4 325 #define bus_space_write_multi_stream_8 kmsan_bus_space_write_multi_stream_8 326 #define bus_space_write_region_1 kmsan_bus_space_write_region_1 327 #define bus_space_write_region_2 kmsan_bus_space_write_region_2 328 #define bus_space_write_region_4 kmsan_bus_space_write_region_4 329 #define bus_space_write_region_8 kmsan_bus_space_write_region_8 330 #define bus_space_write_region_stream_1 kmsan_bus_space_write_region_stream_1 331 #define bus_space_write_region_stream_2 kmsan_bus_space_write_region_stream_2 332 #define bus_space_write_region_stream_4 kmsan_bus_space_write_region_stream_4 333 #define bus_space_write_region_stream_8 kmsan_bus_space_write_region_stream_8 334 #else 335 #define BUS_SPACE_WRITE_MEM_PROTOS(bytes, bits) \ 336 void bus_space_write_multi_##bytes(bus_space_tag_t, bus_space_handle_t, \ 337 bus_size_t, const uint##bits##_t *, bus_size_t); \ 338 void bus_space_write_multi_stream_##bytes(bus_space_tag_t, \ 339 bus_space_handle_t, bus_size_t, const uint##bits##_t *, bus_size_t);\ 340 void bus_space_write_region_##bytes(bus_space_tag_t, bus_space_handle_t,\ 341 bus_size_t, const uint##bits##_t *, bus_size_t); \ 342 void bus_space_write_region_stream_##bytes(bus_space_tag_t, \ 343 bus_space_handle_t, bus_size_t, const uint##bits##_t *, bus_size_t); 344 #endif 345 346 BUS_SPACE_WRITE_MEM_PROTOS(1, 8) 347 BUS_SPACE_WRITE_MEM_PROTOS(2, 16) 348 BUS_SPACE_WRITE_MEM_PROTOS(4, 32) 349 BUS_SPACE_WRITE_MEM_PROTOS(8, 64) 350 351 void bus_space_set_multi_1(bus_space_tag_t, bus_space_handle_t, 352 bus_size_t, u_int8_t, bus_size_t); 353 void bus_space_set_multi_2(bus_space_tag_t, bus_space_handle_t, 354 bus_size_t, u_int16_t, bus_size_t); 355 void bus_space_set_multi_4(bus_space_tag_t, bus_space_handle_t, 356 bus_size_t, u_int32_t, bus_size_t); 357 #ifdef __HAVE_BUS_SPACE_8 358 void bus_space_set_multi_8(bus_space_tag_t, bus_space_handle_t, 359 bus_size_t, u_int64_t, bus_size_t); 360 #endif 361 362 void bus_space_set_multi_stream_1(bus_space_tag_t, bus_space_handle_t, 363 bus_size_t, u_int8_t, bus_size_t); 364 void bus_space_set_multi_stream_2(bus_space_tag_t, bus_space_handle_t, 365 bus_size_t, u_int16_t, bus_size_t); 366 void bus_space_set_multi_stream_4(bus_space_tag_t, bus_space_handle_t, 367 bus_size_t, u_int32_t, bus_size_t); 368 #ifdef __HAVE_BUS_SPACE_8 369 void bus_space_set_multi_stream_8(bus_space_tag_t, bus_space_handle_t, 370 bus_size_t, u_int64_t, bus_size_t); 371 #endif 372 373 void bus_space_set_region_1(bus_space_tag_t, bus_space_handle_t, 374 bus_size_t, u_int8_t, bus_size_t); 375 void bus_space_set_region_2(bus_space_tag_t, bus_space_handle_t, 376 bus_size_t, u_int16_t, bus_size_t); 377 void bus_space_set_region_4(bus_space_tag_t, bus_space_handle_t, 378 bus_size_t, u_int32_t, bus_size_t); 379 #ifdef __HAVE_BUS_SPACE_8 380 void bus_space_set_region_8(bus_space_tag_t, bus_space_handle_t, 381 bus_size_t, u_int64_t, bus_size_t); 382 #endif 383 384 void bus_space_set_region_stream_1(bus_space_tag_t, bus_space_handle_t, 385 bus_size_t, u_int8_t, bus_size_t); 386 void bus_space_set_region_stream_2(bus_space_tag_t, bus_space_handle_t, 387 bus_size_t, u_int16_t, bus_size_t); 388 void bus_space_set_region_stream_4(bus_space_tag_t, bus_space_handle_t, 389 bus_size_t, u_int32_t, bus_size_t); 390 #ifdef __HAVE_BUS_SPACE_8 391 void bus_space_set_region_stream_8(bus_space_tag_t, bus_space_handle_t, 392 bus_size_t, u_int64_t, bus_size_t); 393 #endif 394 395 void bus_space_copy_region_1(bus_space_tag_t, bus_space_handle_t, 396 bus_size_t, bus_space_handle_t, 397 bus_size_t, bus_size_t); 398 void bus_space_copy_region_2(bus_space_tag_t, bus_space_handle_t, 399 bus_size_t, bus_space_handle_t, 400 bus_size_t, bus_size_t); 401 void bus_space_copy_region_4(bus_space_tag_t, bus_space_handle_t, 402 bus_size_t, bus_space_handle_t, 403 bus_size_t, bus_size_t); 404 #ifdef __HAVE_BUS_SPACE_8 405 void bus_space_copy_region_8(bus_space_tag_t, bus_space_handle_t, 406 bus_size_t, bus_space_handle_t, 407 bus_size_t, bus_size_t); 408 #endif 409 410 void bus_space_copy_region_stream_1(bus_space_tag_t, bus_space_handle_t, 411 bus_size_t, bus_space_handle_t, 412 bus_size_t, bus_size_t); 413 void bus_space_copy_region_stream_2(bus_space_tag_t, bus_space_handle_t, 414 bus_size_t, bus_space_handle_t, 415 bus_size_t, bus_size_t); 416 void bus_space_copy_region_stream_4(bus_space_tag_t, bus_space_handle_t, 417 bus_size_t, bus_space_handle_t, 418 bus_size_t, bus_size_t); 419 #ifdef __HAVE_BUS_SPACE_8 420 void bus_space_copy_region_stream_8(bus_space_tag_t, bus_space_handle_t, 421 bus_size_t, bus_space_handle_t, 422 bus_size_t, bus_size_t); 423 #endif 424 425 bool bus_space_is_equal(bus_space_tag_t, bus_space_tag_t); 426 bool bus_space_handle_is_equal(bus_space_tag_t, bus_space_handle_t, 427 bus_space_handle_t); 428 429 /* 430 * bus_dma(9) 431 */ 432 433 /* Flags used in various bus DMA methods. */ 434 #define BUS_DMA_WAITOK 0x000 /* safe to sleep (pseudo-flag) */ 435 #define BUS_DMA_NOWAIT 0x001 /* not safe to sleep */ 436 #define BUS_DMA_ALLOCNOW 0x002 /* perform resource allocation now */ 437 #define BUS_DMA_COHERENT 0x004 /* hint: map memory DMA coherent */ 438 #define BUS_DMA_STREAMING 0x008 /* hint: sequential, unidirectional */ 439 #define BUS_DMA_BUS1 0x010 /* placeholders for bus functions... */ 440 #define BUS_DMA_BUS2 0x020 441 #define BUS_DMA_BUS3 0x040 442 #define BUS_DMA_BUS4 0x080 443 #define BUS_DMA_READ 0x100 /* mapping is device -> memory only */ 444 #define BUS_DMA_WRITE 0x200 /* mapping is memory -> device only */ 445 #define BUS_DMA_NOCACHE 0x400 /* hint: map non-cached memory */ 446 #define BUS_DMA_PREFETCHABLE 0x800 /* hint: map non-cached but allow 447 * things like write combining */ 448 449 /* Operations performed by bus_dmamap_sync(). */ 450 #define BUS_DMASYNC_PREREAD 0x01 /* pre-read synchronization */ 451 #define BUS_DMASYNC_POSTREAD 0x02 /* post-read synchronization */ 452 #define BUS_DMASYNC_PREWRITE 0x04 /* pre-write synchronization */ 453 #define BUS_DMASYNC_POSTWRITE 0x08 /* post-write synchronization */ 454 455 int bus_dmamap_create(bus_dma_tag_t, bus_size_t, int, bus_size_t, 456 bus_size_t, int, bus_dmamap_t *); 457 void bus_dmamap_destroy(bus_dma_tag_t, bus_dmamap_t); 458 int bus_dmamap_load(bus_dma_tag_t, bus_dmamap_t, void *, bus_size_t, 459 struct proc *, int); 460 int bus_dmamap_load_mbuf(bus_dma_tag_t, bus_dmamap_t, 461 struct mbuf *, int); 462 int bus_dmamap_load_uio(bus_dma_tag_t, bus_dmamap_t, 463 struct uio *, int); 464 int bus_dmamap_load_raw(bus_dma_tag_t, bus_dmamap_t, 465 bus_dma_segment_t *, int, bus_size_t, int); 466 void bus_dmamap_unload(bus_dma_tag_t, bus_dmamap_t); 467 void bus_dmamap_sync(bus_dma_tag_t, bus_dmamap_t, bus_addr_t, 468 bus_size_t, int); 469 470 int bus_dmamem_alloc(bus_dma_tag_t, bus_size_t, bus_size_t, 471 bus_size_t, bus_dma_segment_t *, 472 int, int *, int); 473 void bus_dmamem_free(bus_dma_tag_t, bus_dma_segment_t *, int); 474 int bus_dmamem_map(bus_dma_tag_t, bus_dma_segment_t *, int, 475 size_t, void **, int); 476 void bus_dmamem_unmap(bus_dma_tag_t, void *, size_t); 477 paddr_t bus_dmamem_mmap(bus_dma_tag_t, bus_dma_segment_t *, int, 478 off_t, int, int); 479 480 int bus_dmatag_subregion(bus_dma_tag_t, bus_addr_t, bus_addr_t, 481 bus_dma_tag_t *, int); 482 void bus_dmatag_destroy(bus_dma_tag_t); 483 484 #endif /* _SYS_BUS_PROTO_H_ */ 485