1 /* $NetBSD: bus_funcs.h,v 1.1 2014/09/03 19:34:26 matt Exp $ */ 2 /* $OpenBSD: bus.h,v 1.1 1997/10/13 10:53:42 pefo Exp $ */ 3 4 /*- 5 * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc. 6 * All rights reserved. 7 * 8 * This code is derived from software contributed to The NetBSD Foundation 9 * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility, 10 * NASA Ames Research Center. 11 * 12 * Redistribution and use in source and binary forms, with or without 13 * modification, are permitted provided that the following conditions 14 * are met: 15 * 1. Redistributions of source code must retain the above copyright 16 * notice, this list of conditions and the following disclaimer. 17 * 2. Redistributions in binary form must reproduce the above copyright 18 * notice, this list of conditions and the following disclaimer in the 19 * documentation and/or other materials provided with the distribution. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 22 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 23 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 24 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 25 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 31 * POSSIBILITY OF SUCH DAMAGE. 32 */ 33 34 /* 35 * Copyright (c) 1996 Charles M. Hannum. All rights reserved. 36 * Copyright (c) 1996 Jason R. Thorpe. All rights reserved. 37 * Copyright (c) 1996 Christopher G. Demetriou. All rights reserved. 38 * 39 * Redistribution and use in source and binary forms, with or without 40 * modification, are permitted provided that the following conditions 41 * are met: 42 * 1. Redistributions of source code must retain the above copyright 43 * notice, this list of conditions and the following disclaimer. 44 * 2. Redistributions in binary form must reproduce the above copyright 45 * notice, this list of conditions and the following disclaimer in the 46 * documentation and/or other materials provided with the distribution. 47 * 3. All advertising materials mentioning features or use of this software 48 * must display the following acknowledgement: 49 * This product includes software developed by Christopher G. Demetriou 50 * for the NetBSD Project. 51 * 4. The name of the author may not be used to endorse or promote products 52 * derived from this software without specific prior written permission 53 * 54 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 55 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 56 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 57 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 58 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 59 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 60 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 61 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 62 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 63 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 64 */ 65 66 /* 67 * Copyright (c) 1997 Per Fogelstrom. All rights reserved. 68 * Copyright (c) 1996 Niklas Hallqvist. All rights reserved. 69 * 70 * Redistribution and use in source and binary forms, with or without 71 * modification, are permitted provided that the following conditions 72 * are met: 73 * 1. Redistributions of source code must retain the above copyright 74 * notice, this list of conditions and the following disclaimer. 75 * 2. Redistributions in binary form must reproduce the above copyright 76 * notice, this list of conditions and the following disclaimer in the 77 * documentation and/or other materials provided with the distribution. 78 * 3. All advertising materials mentioning features or use of this software 79 * must display the following acknowledgement: 80 * This product includes software developed by Christopher G. Demetriou 81 * for the NetBSD Project. 82 * 4. The name of the author may not be used to endorse or promote products 83 * derived from this software without specific prior written permission 84 * 85 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 86 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 87 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 88 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 89 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 90 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 91 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 92 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 93 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 94 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 95 */ 96 97 #ifndef _OR1K_BUS_FUNCS_H_ 98 #define _OR1K_BUS_FUNCS_H_ 99 100 #define CAT(a,b) a##b 101 #define CAT3(a,b,c) a##b##c 102 103 int bus_space_init(struct or1k_bus_space *, const char *, void *, size_t); 104 void bus_space_mallocok(void); 105 106 /* 107 * Access methods for bus resources 108 */ 109 110 /* 111 * void *bus_space_vaddr (bus_space_tag_t, bus_space_handle_t); 112 * 113 * Get the kernel virtual address for the mapped bus space. 114 * Only allowed for regions mapped with BUS_SPACE_MAP_LINEAR. 115 * (XXX not enforced) 116 */ 117 #define bus_space_vaddr(t, h) ((void *)(h)) 118 119 /* 120 * paddr_t bus_space_mmap (bus_space_tag_t t, bus_addr_t addr, 121 * off_t offset, int prot, int flags); 122 * 123 * Mmap a region of bus space. 124 */ 125 126 #define bus_space_mmap(t, b, o, p, f) \ 127 ((*(t)->pbs_mmap)((t), (b), (o), (p), (f))) 128 129 /* 130 * int bus_space_map (bus_space_tag_t t, bus_addr_t addr, 131 * bus_size_t size, int flags, bus_space_handle_t *bshp); 132 * 133 * Map a region of bus space. 134 */ 135 136 #define bus_space_map(t, a, s, f, hp) \ 137 ((*(t)->pbs_map)((t), (a), (s), (f), (hp))) 138 139 /* 140 * int bus_space_unmap (bus_space_tag_t t, 141 * bus_space_handle_t bsh, bus_size_t size); 142 * 143 * Unmap a region of bus space. 144 */ 145 146 #define bus_space_unmap(t, h, s) \ 147 ((void)(*(t)->pbs_unmap)((t), (h), (s))) 148 149 /* 150 * int bus_space_subregion (bus_space_tag_t t, 151 * bus_space_handle_t bsh, bus_size_t offset, bus_size_t size, 152 * bus_space_handle_t *nbshp); 153 * 154 * Get a new handle for a subregion of an already-mapped area of bus space. 155 */ 156 157 #define bus_space_subregion(t, h, o, s, hp) \ 158 ((*(t)->pbs_subregion)((t), (h), (o), (s), (hp))) 159 160 /* 161 * int bus_space_alloc (bus_space_tag_t t, bus_addr_t rstart, 162 * bus_addr_t rend, bus_size_t size, bus_size_t align, 163 * bus_size_t boundary, int flags, bus_addr_t *bpap, 164 * bus_space_handle_t *bshp); 165 * 166 * Allocate a region of bus space. 167 */ 168 169 #define bus_space_alloc(t, rs, re, s, a, b, f, ap, hp) \ 170 ((*(t)->pbs_alloc)((t), (rs), (re), (s), (a), (b), (f), (ap), (hp))) 171 172 /* 173 * int bus_space_free (bus_space_tag_t t, 174 * bus_space_handle_t bsh, bus_size_t size); 175 * 176 * Free a region of bus space. 177 */ 178 179 #define bus_space_free(t, h, s) \ 180 ((void)(*(t)->pbs_free)((t), (h), (s))) 181 182 /* 183 * uintN_t bus_space_read_N (bus_space_tag_t tag, 184 * bus_space_handle_t bsh, bus_size_t offset); 185 * 186 * Read a 1, 2, 4, or 8 byte quantity from bus space 187 * described by tag/handle/offset. 188 */ 189 190 #define bus_space_read_1(t, h, o) \ 191 ((*(t)->pbs_scalar.pbss_read_1)((t), (h), (o))) 192 #define bus_space_read_2(t, h, o) \ 193 ((*(t)->pbs_scalar.pbss_read_2)((t), (h), (o))) 194 #define bus_space_read_4(t, h, o) \ 195 ((*(t)->pbs_scalar.pbss_read_4)((t), (h), (o))) 196 #define bus_space_read_8(t, h, o) \ 197 ((*(t)->pbs_scalar.pbss_read_8)((t), (h), (o))) 198 199 /* 200 * uintN_t bus_space_read_stream_N (bus_space_tag_t tag, 201 * bus_space_handle_t bsh, bus_size_t offset); 202 * 203 * Read a 2, 4, or 8 byte quantity from bus space 204 * described by tag/handle/offset ignoring endianness. 205 */ 206 207 #define bus_space_read_stream_2(t, h, o) \ 208 ((*(t)->pbs_scalar_stream.pbss_read_2)((t), (h), (o))) 209 #define bus_space_read_stream_4(t, h, o) \ 210 ((*(t)->pbs_scalar_stream.pbss_read_4)((t), (h), (o))) 211 #define bus_space_read_stream_8(t, h, o) \ 212 ((*(t)->pbs_scalar_stream.pbss_read_8)((t), (h), (o))) 213 214 /* 215 * void bus_space_read_multi_N _P((bus_space_tag_t tag, 216 * bus_space_handle_t bsh, bus_size_t offset, 217 * uintN_t *addr, size_t count); 218 * 219 * Read `count' 1, 2, 4, or 8 byte quantities from bus space 220 * described by tag/handle/offset and copy into buffer provided. 221 */ 222 223 #define bus_space_read_multi_1(t, h, o, a, c) \ 224 ((*(t)->pbs_multi->pbsg_read_1)((t), (h), (o), (a), (c))) 225 #define bus_space_read_multi_2(t, h, o, a, c) \ 226 ((*(t)->pbs_multi->pbsg_read_2)((t), (h), (o), (a), (c))) 227 #define bus_space_read_multi_4(t, h, o, a, c) \ 228 ((*(t)->pbs_multi->pbsg_read_4)((t), (h), (o), (a), (c))) 229 #define bus_space_read_multi_8(t, h, o, a, c) \ 230 ((*(t)->pbs_multi->pbsg_read_8)((t), (h), (o), (a), (c))) 231 232 /* 233 * void bus_space_read_multi_stream_N (bus_space_tag_t tag, 234 * bus_space_handle_t bsh, bus_size_t offset, 235 * uintN_t *addr, size_t count); 236 * 237 * Read `count' 2, 4, or 8 byte stream quantities from bus space 238 * described by tag/handle/offset and copy into buffer provided. 239 */ 240 241 #define bus_space_read_multi_stream_2(t, h, o, a, c) \ 242 ((*(t)->pbs_multi_stream->pbsg_read_2)((t), (h), (o), (a), (c))) 243 #define bus_space_read_multi_stream_4(t, h, o, a, c) \ 244 ((*(t)->pbs_multi_stream->pbsg_read_4)((t), (h), (o), (a), (c))) 245 #define bus_space_read_multi_stream_8(t, h, o, a, c) \ 246 ((*(t)->pbs_multi_stream->pbsg_read_8)((t), (h), (o), (a), (c))) 247 248 /* 249 * void bus_space_write_N (bus_space_tag_t tag, 250 * bus_space_handle_t bsh, bus_size_t offset, 251 * uintN_t value); 252 * 253 * Write the 1, 2, 4, or 8 byte value `value' to bus space 254 * described by tag/handle/offset. 255 */ 256 257 #define bus_space_write_1(t, h, o, v) \ 258 ((*(t)->pbs_scalar.pbss_write_1)((t), (h), (o), (v))) 259 #define bus_space_write_2(t, h, o, v) \ 260 ((*(t)->pbs_scalar.pbss_write_2)((t), (h), (o), (v))) 261 #define bus_space_write_4(t, h, o, v) \ 262 ((*(t)->pbs_scalar.pbss_write_4)((t), (h), (o), (v))) 263 #define bus_space_write_8(t, h, o, v) \ 264 ((*(t)->pbs_scalar.pbss_write_8)((t), (h), (o), (v))) 265 266 /* 267 * void bus_space_write_stream_N (bus_space_tag_t tag, 268 * bus_space_handle_t bsh, bus_size_t offset, 269 * uintN_t value); 270 * 271 * Write the 2, 4, or 8 byte stream value `value' to bus space 272 * described by tag/handle/offset. 273 */ 274 275 #define bus_space_write_stream_1(t, h, o, v) \ 276 ((*(t)->pbs_scalar_stream.pbss_write_1)((t), (h), (o), (v))) 277 #define bus_space_write_stream_2(t, h, o, v) \ 278 ((*(t)->pbs_scalar_stream.pbss_write_2)((t), (h), (o), (v))) 279 #define bus_space_write_stream_4(t, h, o, v) \ 280 ((*(t)->pbs_scalar_stream.pbss_write_4)((t), (h), (o), (v))) 281 #define bus_space_write_stream_8(t, h, o, v) \ 282 ((*(t)->pbs_scalar_stream.pbss_write_8)((t), (h), (o), (v))) 283 284 /* 285 * void bus_space_write_multi_N (bus_space_tag_t tag, 286 * bus_space_handle_t bsh, bus_size_t offset, 287 * const uintN_t *addr, size_t count); 288 * 289 * Write `count' 1, 2, 4, or 8 byte quantities from the buffer 290 * provided to bus space described by tag/handle/offset. 291 */ 292 293 #define bus_space_write_multi_1(t, h, o, a, c) \ 294 ((*(t)->pbs_multi->pbsg_write_1)((t), (h), (o), (a), (c))) 295 #define bus_space_write_multi_2(t, h, o, a, c) \ 296 ((*(t)->pbs_multi->pbsg_write_2)((t), (h), (o), (a), (c))) 297 #define bus_space_write_multi_4(t, h, o, a, c) \ 298 ((*(t)->pbs_multi->pbsg_write_4)((t), (h), (o), (a), (c))) 299 #define bus_space_write_multi_8(t, h, o, a, c) \ 300 ((*(t)->pbs_multi->pbsg_write_8)((t), (h), (o), (a), (c))) 301 302 /* 303 * void bus_space_write_multi_stream_N (bus_space_tag_t tag, 304 * bus_space_handle_t bsh, bus_size_t offset, 305 * const uintN_t *addr, size_t count); 306 * 307 * Write `count' 2, 4, or 8 byte stream quantities from the buffer 308 * provided to bus space described by tag/handle/offset. 309 */ 310 311 #define bus_space_write_multi_stream_1(t, h, o, a, c) \ 312 ((*(t)->pbs_multi_stream->pbsg_write_1)((t), (h), (o), (a), (c))) 313 #define bus_space_write_multi_stream_2(t, h, o, a, c) \ 314 ((*(t)->pbs_multi_stream->pbsg_write_2)((t), (h), (o), (a), (c))) 315 #define bus_space_write_multi_stream_4(t, h, o, a, c) \ 316 ((*(t)->pbs_multi_stream->pbsg_write_4)((t), (h), (o), (a), (c))) 317 #define bus_space_write_multi_stream_8(t, h, o, a, c) \ 318 ((*(t)->pbs_multi_stream->pbsg_write_8)((t), (h), (o), (a), (c))) 319 320 /* 321 * void bus_space_read_region_N (bus_space_tag_t tag, 322 * bus_space_handle_t bsh, bus_size_t offset, 323 * uintN_t *addr, size_t count); 324 * 325 * Read `count' 1, 2, 4, or 8 byte quantities from bus space 326 * described by tag/handle and starting at `offset' and copy into 327 * buffer provided. 328 */ 329 #define bus_space_read_region_1(t, h, o, a, c) \ 330 ((*(t)->pbs_region->pbsg_read_1)((t), (h), (o), (a), (c))) 331 #define bus_space_read_region_2(t, h, o, a, c) \ 332 ((*(t)->pbs_region->pbsg_read_2)((t), (h), (o), (a), (c))) 333 #define bus_space_read_region_4(t, h, o, a, c) \ 334 ((*(t)->pbs_region->pbsg_read_4)((t), (h), (o), (a), (c))) 335 #define bus_space_read_region_8(t, h, o, a, c) \ 336 ((*(t)->pbs_region->pbsg_read_8)((t), (h), (o), (a), (c))) 337 338 /* 339 * void bus_space_read_region_stream_N (bus_space_tag_t tag, 340 * bus_space_handle_t bsh, bus_size_t offset, 341 * uintN_t *addr, size_t count); 342 * 343 * Read `count' 2, 4, or 8 byte stream quantities from bus space 344 * described by tag/handle and starting at `offset' and copy into 345 * buffer provided. 346 */ 347 #define bus_space_read_region_stream_2(t, h, o, a, c) \ 348 ((*(t)->pbs_region_stream->pbsg_read_2)((t), (h), (o), (a), (c))) 349 #define bus_space_read_region_stream_4(t, h, o, a, c) \ 350 ((*(t)->pbs_region_stream->pbsg_read_4)((t), (h), (o), (a), (c))) 351 #define bus_space_read_region_stream_8(t, h, o, a, c) \ 352 ((*(t)->pbs_region_stream->pbsg_read_8)((t), (h), (o), (a), (c))) 353 354 /* 355 * void bus_space_write_region_N (bus_space_tag_t tag, 356 * bus_space_handle_t bsh, bus_size_t offset, 357 * const uintN_t *addr, size_t count); 358 * 359 * Write `count' 1, 2, 4, or 8 byte quantities from the buffer provided 360 * to bus space described by tag/handle starting at `offset'. 361 */ 362 #define bus_space_write_region_1(t, h, o, a, c) \ 363 ((*(t)->pbs_region->pbsg_write_1)((t), (h), (o), (a), (c))) 364 #define bus_space_write_region_2(t, h, o, a, c) \ 365 ((*(t)->pbs_region->pbsg_write_2)((t), (h), (o), (a), (c))) 366 #define bus_space_write_region_4(t, h, o, a, c) \ 367 ((*(t)->pbs_region->pbsg_write_4)((t), (h), (o), (a), (c))) 368 #define bus_space_write_region_8(t, h, o, a, c) \ 369 ((*(t)->pbs_region->pbsg_write_8)((t), (h), (o), (a), (c))) 370 371 /* 372 * void bus_space_write_region_stream_N (bus_space_tag_t tag, 373 * bus_space_handle_t bsh, bus_size_t offset, 374 * const uintN_t *addr, size_t count); 375 * 376 * Write `count' 2, 4, or 8 byte stream quantities from the buffer provided 377 * to bus space described by tag/handle starting at `offset'. 378 */ 379 #define bus_space_write_region_stream_2(t, h, o, a, c) \ 380 ((*(t)->pbs_region_stream->pbsg_write_2)((t), (h), (o), (a), (c))) 381 #define bus_space_write_region_stream_4(t, h, o, a, c) \ 382 ((*(t)->pbs_region_stream->pbsg_write_4)((t), (h), (o), (a), (c))) 383 #define bus_space_write_region_stream_8(t, h, o, a, c) \ 384 ((*(t)->pbs_region_stream->pbsg_write_8)((t), (h), (o), (a), (c))) 385 386 #if 0 387 /* 388 * void bus_space_set_multi_N (bus_space_tag_t tag, 389 * bus_space_handle_t bsh, bus_size_t offset, uintN_t val, 390 * size_t count); 391 * 392 * Write the 1, 2, 4, or 8 byte value `val' to bus space described 393 * by tag/handle/offset `count' times. 394 */ 395 #define bus_space_set_multi_1(t, h, o, v, c) 396 ((*(t)->pbs_set_multi_1)((t), (h), (o), (v), (c))) 397 #define bus_space_set_multi_2(t, h, o, v, c) 398 ((*(t)->pbs_set_multi_2)((t), (h), (o), (v), (c))) 399 #define bus_space_set_multi_4(t, h, o, v, c) 400 ((*(t)->pbs_set_multi_4)((t), (h), (o), (v), (c))) 401 #define bus_space_set_multi_8(t, h, o, v, c) 402 ((*(t)->pbs_set_multi_8)((t), (h), (o), (v), (c))) 403 404 /* 405 * void bus_space_set_multi_stream_N (bus_space_tag_t tag, 406 * bus_space_handle_t bsh, bus_size_t offset, uintN_t val, 407 * size_t count); 408 * 409 * Write the 2, 4, or 8 byte stream value `val' to bus space described 410 * by tag/handle/offset `count' times. 411 */ 412 #define bus_space_set_multi_stream_2(t, h, o, v, c) 413 ((*(t)->pbs_set_multi_stream_2)((t), (h), (o), (v), (c))) 414 #define bus_space_set_multi_stream_4(t, h, o, v, c) 415 ((*(t)->pbs_set_multi_stream_4)((t), (h), (o), (v), (c))) 416 #define bus_space_set_multi_stream_8(t, h, o, v, c) 417 ((*(t)->pbs_set_multi_stream_8)((t), (h), (o), (v), (c))) 418 419 #endif 420 421 /* 422 * void bus_space_set_region_N (bus_space_tag_t tag, 423 * bus_space_handle_t bsh, bus_size_t offset, uintN_t val, 424 * size_t count); 425 * 426 * Write `count' 1, 2, 4, or 8 byte value `val' to bus space described 427 * by tag/handle starting at `offset'. 428 */ 429 #define bus_space_set_region_1(t, h, o, v, c) \ 430 ((*(t)->pbs_set->pbss_set_1)((t), (h), (o), (v), (c))) 431 #define bus_space_set_region_2(t, h, o, v, c) \ 432 ((*(t)->pbs_set->pbss_set_2)((t), (h), (o), (v), (c))) 433 #define bus_space_set_region_4(t, h, o, v, c) \ 434 ((*(t)->pbs_set->pbss_set_4)((t), (h), (o), (v), (c))) 435 #define bus_space_set_region_8(t, h, o, v, c) \ 436 ((*(t)->pbs_set->pbss_set_8)((t), (h), (o), (v), (c))) 437 438 /* 439 * void bus_space_set_region_stream_N (bus_space_tag_t tag, 440 * bus_space_handle_t bsh, bus_size_t offset, uintN_t val, 441 * size_t count); 442 * 443 * Write `count' 2, 4, or 8 byte stream value `val' to bus space described 444 * by tag/handle starting at `offset'. 445 */ 446 #define bus_space_set_region_stream_2(t, h, o, v, c) \ 447 ((*(t)->pbs_set_stream->pbss_set_2)((t), (h), (o), (v), (c))) 448 #define bus_space_set_region_stream_4(t, h, o, v, c) \ 449 ((*(t)->pbs_set_stream->pbss_set_4)((t), (h), (o), (v), (c))) 450 #define bus_space_set_region_stream_8(t, h, o, v, c) \ 451 ((*(t)->pbs_set_stream->pbss_set_8)((t), (h), (o), (v), (c))) 452 453 454 /* 455 * void bus_space_copy_region_N (bus_space_tag_t tag, 456 * bus_space_handle_t bsh1, bus_size_t off1, 457 * bus_space_handle_t bsh2, bus_size_t off2, 458 * size_t count); 459 * 460 * Copy `count' 1, 2, 4, or 8 byte values from bus space starting 461 * at tag/bsh1/off1 to bus space starting at tag/bsh2/off2. 462 */ 463 #define bus_space_copy_region_1(t, h1, o1, h2, o2, c) \ 464 ((*(t)->pbs_copy->pbsc_copy_1)((t), (h1), (o1), (h2), (o2), (c))) 465 #define bus_space_copy_region_2(t, h1, o1, h2, o2, c) \ 466 ((*(t)->pbs_copy->pbsc_copy_2)((t), (h1), (o1), (h2), (o2), (c))) 467 #define bus_space_copy_region_4(t, h1, o1, h2, o2, c) \ 468 ((*(t)->pbs_copy->pbsc_copy_4)((t), (h1), (o1), (h2), (o2), (c))) 469 #define bus_space_copy_region_8(t, h1, o1, h2, o2, c) \ 470 ((*(t)->pbs_copy->pbsc_copy_8)((t), (h1), (o1), (h2), (o2), (c))) 471 472 /* 473 * Bus read/write barrier methods. 474 * 475 * void bus_space_barrier (bus_space_tag_t tag, 476 * bus_space_handle_t bsh, bus_size_t offset, 477 * bus_size_t len, int flags); 478 * 479 */ 480 #define bus_space_barrier(t, h, o, l, f) \ 481 ((void)((void)(t), (void)(h), (void)(o), (void)(l), (void)(f))) 482 483 /* 484 * Bus DMA methods. 485 */ 486 487 /* Forwards needed by prototypes below. */ 488 struct proc; 489 struct mbuf; 490 struct uio; 491 492 #define bus_dmamap_create(t, s, n, m, b, f, p) \ 493 (*(t)->_dmamap_create)((t), (s), (n), (m), (b), (f), (p)) 494 #define bus_dmamap_destroy(t, p) \ 495 (*(t)->_dmamap_destroy)((t), (p)) 496 #define bus_dmamap_load(t, m, b, s, p, f) \ 497 (*(t)->_dmamap_load)((t), (m), (b), (s), (p), (f)) 498 #define bus_dmamap_load_mbuf(t, m, b, f) \ 499 (*(t)->_dmamap_load_mbuf)((t), (m), (b), (f)) 500 #define bus_dmamap_load_uio(t, m, u, f) \ 501 (*(t)->_dmamap_load_uio)((t), (m), (u), (f)) 502 #define bus_dmamap_load_raw(t, m, sg, n, s, f) \ 503 (*(t)->_dmamap_load_raw)((t), (m), (sg), (n), (s), (f)) 504 #define bus_dmamap_unload(t, p) \ 505 (*(t)->_dmamap_unload)((t), (p)) 506 #define bus_dmamap_sync(t, p, o, l, ops) \ 507 (void)((t)->_dmamap_sync ? \ 508 (*(t)->_dmamap_sync)((t), (p), (o), (l), (ops)) : (void)0) 509 510 #define bus_dmamem_alloc(t, s, a, b, sg, n, r, f) \ 511 (*(t)->_dmamem_alloc)((t), (s), (a), (b), (sg), (n), (r), (f)) 512 #define bus_dmamem_free(t, sg, n) \ 513 (*(t)->_dmamem_free)((t), (sg), (n)) 514 #define bus_dmamem_map(t, sg, n, s, k, f) \ 515 (*(t)->_dmamem_map)((t), (sg), (n), (s), (k), (f)) 516 #define bus_dmamem_unmap(t, k, s) \ 517 (*(t)->_dmamem_unmap)((t), (k), (s)) 518 #define bus_dmamem_mmap(t, sg, n, o, p, f) \ 519 (*(t)->_dmamem_mmap)((t), (sg), (n), (o), (p), (f)) 520 521 #define bus_dmatag_subregion(t, mna, mxa, nt, f) EOPNOTSUPP 522 #define bus_dmatag_destroy(t) 523 524 #ifdef _OR1K_BUS_DMA_PRIVATE 525 int _bus_dmamap_create (bus_dma_tag_t, bus_size_t, int, bus_size_t, 526 bus_size_t, int, bus_dmamap_t *); 527 void _bus_dmamap_destroy (bus_dma_tag_t, bus_dmamap_t); 528 int _bus_dmamap_load (bus_dma_tag_t, bus_dmamap_t, void *, 529 bus_size_t, struct proc *, int); 530 int _bus_dmamap_load_mbuf (bus_dma_tag_t, bus_dmamap_t, 531 struct mbuf *, int); 532 int _bus_dmamap_load_uio (bus_dma_tag_t, bus_dmamap_t, 533 struct uio *, int); 534 int _bus_dmamap_load_raw (bus_dma_tag_t, bus_dmamap_t, 535 bus_dma_segment_t *, int, bus_size_t, int); 536 void _bus_dmamap_unload (bus_dma_tag_t, bus_dmamap_t); 537 void _bus_dmamap_sync (bus_dma_tag_t, bus_dmamap_t, bus_addr_t, 538 bus_size_t, int); 539 540 int _bus_dmamem_alloc (bus_dma_tag_t tag, bus_size_t size, 541 bus_size_t alignment, bus_size_t boundary, 542 bus_dma_segment_t *segs, int nsegs, int *rsegs, int flags); 543 void _bus_dmamem_free (bus_dma_tag_t tag, bus_dma_segment_t *segs, 544 int nsegs); 545 int _bus_dmamem_map (bus_dma_tag_t tag, bus_dma_segment_t *segs, 546 int nsegs, size_t size, void **kvap, int flags); 547 void _bus_dmamem_unmap (bus_dma_tag_t tag, void *kva, 548 size_t size); 549 paddr_t _bus_dmamem_mmap (bus_dma_tag_t tag, bus_dma_segment_t *segs, 550 int nsegs, off_t off, int prot, int flags); 551 552 int _bus_dmamem_alloc_range (bus_dma_tag_t tag, bus_size_t size, 553 bus_size_t alignment, bus_size_t boundary, 554 bus_dma_segment_t *segs, int nsegs, int *rsegs, int flags, 555 paddr_t low, paddr_t high); 556 557 #endif /* _OR1K_BUS_DMA_PRIVATE */ 558 559 #endif /* _OR1K_BUS_FUNCS_H_ */ 560