1 /* $NetBSD: bus.h,v 1.13 2000/01/25 22:13:22 drochner Exp $ */ 2 3 /*- 4 * Copyright (c) 1996, 1997, 1998 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. 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) 1997 Scott Reynolds. All rights reserved. 42 * 43 * Redistribution and use in source and binary forms, with or without 44 * modification, are permitted provided that the following conditions 45 * are met: 46 * 1. Redistributions of source code must retain the above copyright 47 * notice, this list of conditions and the following disclaimer. 48 * 2. Redistributions in binary form must reproduce the above copyright 49 * notice, this list of conditions and the following disclaimer in the 50 * documentation and/or other materials provided with the distribution. 51 * 3. 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 #ifndef _MAC68K_BUS_H_ 67 #define _MAC68K_BUS_H_ 68 69 /* 70 * Value for the mac68k bus space tag, not to be used directly by MI code. 71 */ 72 #define MAC68K_BUS_SPACE_MEM 0 /* space is mem space */ 73 74 /* 75 * Bus address and size types 76 */ 77 typedef u_long bus_addr_t; 78 typedef u_long bus_size_t; 79 80 /* 81 * Access methods for bus resources and address space. 82 */ 83 typedef int bus_space_tag_t; 84 typedef u_long bus_space_handle_t; 85 86 /* 87 * int bus_space_map __P((bus_space_tag_t t, bus_addr_t addr, 88 * bus_size_t size, int flags, bus_space_handle_t *bshp)); 89 * 90 * Map a region of bus space. 91 */ 92 93 #define BUS_SPACE_MAP_CACHEABLE 0x01 94 #define BUS_SPACE_MAP_LINEAR 0x02 95 #define BUS_SPACE_MAP_PREFETCHABLE 0x04 96 97 int bus_space_map __P((bus_space_tag_t, bus_addr_t, bus_size_t, 98 int, bus_space_handle_t *)); 99 100 /* 101 * void bus_space_unmap __P((bus_space_tag_t t, 102 * bus_space_handle_t bsh, bus_size_t size)); 103 * 104 * Unmap a region of bus space. 105 */ 106 107 void bus_space_unmap __P((bus_space_tag_t, bus_space_handle_t, bus_size_t)); 108 109 /* 110 * int bus_space_subregion __P((bus_space_tag_t t, 111 * bus_space_handle_t bsh, bus_size_t offset, bus_size_t size, 112 * bus_space_handle_t *nbshp)); 113 * 114 * Get a new handle for a subregion of an already-mapped area of bus space. 115 */ 116 117 int bus_space_subregion __P((bus_space_tag_t t, bus_space_handle_t bsh, 118 bus_size_t offset, bus_size_t size, bus_space_handle_t *nbshp)); 119 120 /* 121 * int bus_space_alloc __P((bus_space_tag_t t, bus_addr_t, rstart, 122 * bus_addr_t rend, bus_size_t size, bus_size_t align, 123 * bus_size_t boundary, int flags, bus_addr_t *addrp, 124 * bus_space_handle_t *bshp)); 125 * 126 * Allocate a region of bus space. 127 */ 128 129 int bus_space_alloc __P((bus_space_tag_t t, bus_addr_t rstart, 130 bus_addr_t rend, bus_size_t size, bus_size_t align, 131 bus_size_t boundary, int cacheable, bus_addr_t *addrp, 132 bus_space_handle_t *bshp)); 133 134 /* 135 * int bus_space_free __P((bus_space_tag_t t, 136 * bus_space_handle_t bsh, bus_size_t size)); 137 * 138 * Free a region of bus space. 139 */ 140 141 void bus_space_free __P((bus_space_tag_t t, bus_space_handle_t bsh, 142 bus_size_t size)); 143 144 /* 145 * int mac68k_bus_space_probe __P((bus_space_tag_t t, 146 * bus_space_handle_t bsh, bus_size_t offset, int sz)); 147 * 148 * Probe the bus at t/bsh/offset, using sz as the size of the load. 149 * 150 * This is a machine-dependent extension, and is not to be used by 151 * machine-independent code. 152 */ 153 154 int mac68k_bus_space_probe __P((bus_space_tag_t t, 155 bus_space_handle_t bsh, bus_size_t offset, int sz)); 156 157 /* 158 * u_intN_t bus_space_read_N __P((bus_space_tag_t tag, 159 * bus_space_handle_t bsh, bus_size_t offset)); 160 * 161 * Read a 1, 2, 4, or 8 byte quantity from bus space 162 * described by tag/handle/offset. 163 */ 164 165 #define bus_space_read_1(t, h, o) \ 166 ((void) t, (*(volatile u_int8_t *)((h) + (o)))) 167 168 #define bus_space_read_2(t, h, o) \ 169 ((void) t, (*(volatile u_int16_t *)((h) + (o)))) 170 171 #define bus_space_read_4(t, h, o) \ 172 ((void) t, (*(volatile u_int32_t *)((h) + (o)))) 173 174 #if 0 /* Cause a link error for bus_space_read_8 */ 175 #define bus_space_read_8(t, h, o) !!! bus_space_read_8 unimplemented !!! 176 #endif 177 178 /* 179 * void bus_space_read_multi_N __P((bus_space_tag_t tag, 180 * bus_space_handle_t bsh, bus_size_t offset, 181 * u_intN_t *addr, size_t count)); 182 * 183 * Read `count' 1, 2, 4, or 8 byte quantities from bus space 184 * described by tag/handle/offset and copy into buffer provided. 185 */ 186 187 #define bus_space_read_multi_1(t, h, o, a, c) do { \ 188 (void) t; \ 189 __asm __volatile (" \ 190 movl %0,a0 ; \ 191 movl %1,a1 ; \ 192 movl %2,d0 ; \ 193 1: movb a0@,a1@+ ; \ 194 subql #1,d0 ; \ 195 jne 1b" : \ 196 : \ 197 "r" ((h) + (o)), "g" (a), "g" ((size_t)(c)) : \ 198 "a0","a1","d0"); \ 199 } while (0) 200 201 #define bus_space_read_multi_2(t, h, o, a, c) do { \ 202 (void) t; \ 203 __asm __volatile (" \ 204 movl %0,a0 ; \ 205 movl %1,a1 ; \ 206 movl %2,d0 ; \ 207 1: movw a0@,a1@+ ; \ 208 subql #1,d0 ; \ 209 jne 1b" : \ 210 : \ 211 "r" ((h) + (o)), "g" (a), "g" ((size_t)(c)) : \ 212 "a0","a1","d0"); \ 213 } while (0) 214 215 #define bus_space_read_multi_4(t, h, o, a, c) do { \ 216 (void) t; \ 217 __asm __volatile (" \ 218 movl %0,a0 ; \ 219 movl %1,a1 ; \ 220 movl %2,d0 ; \ 221 1: movl a0@,a1@+ ; \ 222 subql #1,d0 ; \ 223 jne 1b" : \ 224 : \ 225 "r" ((h) + (o)), "g" (a), "g" ((size_t)(c)) : \ 226 "a0","a1","d0"); \ 227 } while (0) 228 229 #if 0 /* Cause a link error for bus_space_read_multi_8 */ 230 #define bus_space_read_multi_8 !!! bus_space_read_multi_8 unimplemented !!! 231 #endif 232 233 /* 234 * void bus_space_read_region_N __P((bus_space_tag_t tag, 235 * bus_space_handle_t bsh, bus_size_t offset, 236 * u_intN_t *addr, size_t count)); 237 * 238 * Read `count' 1, 2, 4, or 8 byte quantities from bus space 239 * described by tag/handle and starting at `offset' and copy into 240 * buffer provided. 241 */ 242 243 #define bus_space_read_region_1(t, h, o, a, c) do { \ 244 (void) t; \ 245 __asm __volatile (" \ 246 movl %0,a0 ; \ 247 movl %1,a1 ; \ 248 movl %2,d0 ; \ 249 1: movb a0@+,a1@+ ; \ 250 subql #1,d0 ; \ 251 jne 1b" : \ 252 : \ 253 "r" ((h) + (o)), "g" (a), "g" ((size_t)(c)) : \ 254 "a0","a1","d0"); \ 255 } while (0) 256 257 #define bus_space_read_region_2(t, h, o, a, c) do { \ 258 (void) t; \ 259 __asm __volatile (" \ 260 movl %0,a0 ; \ 261 movl %1,a1 ; \ 262 movl %2,d0 ; \ 263 1: movw a0@+,a1@+ ; \ 264 subql #1,d0 ; \ 265 jne 1b" : \ 266 : \ 267 "r" ((h) + (o)), "g" (a), "g" ((size_t)(c)) : \ 268 "a0","a1","d0"); \ 269 } while (0) 270 271 #define bus_space_read_region_4(t, h, o, a, c) do { \ 272 (void) t; \ 273 __asm __volatile (" \ 274 movl %0,a0 ; \ 275 movl %1,a1 ; \ 276 movl %2,d0 ; \ 277 1: movl a0@+,a1@+ ; \ 278 subql #1,d0 ; \ 279 jne 1b" : \ 280 : \ 281 "r" ((h) + (o)), "g" (a), "g" ((size_t)(c)) : \ 282 "a0","a1","d0"); \ 283 } while (0) 284 285 #if 0 /* Cause a link error for bus_space_read_region_8 */ 286 #define bus_space_read_region_8 !!! bus_space_read_region_8 unimplemented !!! 287 #endif 288 289 /* 290 * void bus_space_write_N __P((bus_space_tag_t tag, 291 * bus_space_handle_t bsh, bus_size_t offset, 292 * u_intN_t value)); 293 * 294 * Write the 1, 2, 4, or 8 byte value `value' to bus space 295 * described by tag/handle/offset. 296 */ 297 298 #define bus_space_write_1(t, h, o, v) \ 299 ((void) t, ((void)(*(volatile u_int8_t *)((h) + (o)) = (v)))) 300 301 #define bus_space_write_2(t, h, o, v) \ 302 ((void) t, ((void)(*(volatile u_int16_t *)((h) + (o)) = (v)))) 303 304 #define bus_space_write_4(t, h, o, v) \ 305 ((void) t, ((void)(*(volatile u_int32_t *)((h) + (o)) = (v)))) 306 307 #if 0 /* Cause a link error for bus_space_write_8 */ 308 #define bus_space_write_8 !!! bus_space_write_8 not implemented !!! 309 #endif 310 311 /* 312 * void bus_space_write_multi_N __P((bus_space_tag_t tag, 313 * bus_space_handle_t bsh, bus_size_t offset, 314 * const u_intN_t *addr, size_t count)); 315 * 316 * Write `count' 1, 2, 4, or 8 byte quantities from the buffer 317 * provided to bus space described by tag/handle/offset. 318 */ 319 320 #define bus_space_write_multi_1(t, h, o, a, c) do { \ 321 (void) t; \ 322 __asm __volatile (" \ 323 movl %0,a0 ; \ 324 movl %1,a1 ; \ 325 movl %2,d0 ; \ 326 1: movb a1@+,a0@ ; \ 327 subql #1,d0 ; \ 328 jne 1b" : \ 329 : \ 330 "r" ((h) + (o)), "g" (a), "g" ((size_t)(c)) : \ 331 "a0","a1","d0"); \ 332 } while (0) 333 334 #define bus_space_write_multi_2(t, h, o, a, c) do { \ 335 (void) t; \ 336 __asm __volatile (" \ 337 movl %0,a0 ; \ 338 movl %1,a1 ; \ 339 movl %2,d0 ; \ 340 1: movw a1@+,a0@ ; \ 341 subql #1,d0 ; \ 342 jne 1b" : \ 343 : \ 344 "r" ((h) + (o)), "g" (a), "g" ((size_t)(c)) : \ 345 "a0","a1","d0"); \ 346 } while (0) 347 348 #define bus_space_write_multi_4(t, h, o, a, c) do { \ 349 (void) t; \ 350 __asm __volatile (" \ 351 movl %0,a0 ; \ 352 movl %1,a1 ; \ 353 movl %2,d0 ; \ 354 1: movl a1@+,a0@ ; \ 355 subql #1,d0 ; \ 356 jne 1b" : \ 357 : \ 358 "r" ((h) + (o)), "g" (a), "g" ((size_t)(c)) : \ 359 "a0","a1","d0"); \ 360 } while (0) 361 362 #if 0 /* Cause a link error for bus_space_write_8 */ 363 #define bus_space_write_multi_8(t, h, o, a, c) \ 364 !!! bus_space_write_multi_8 unimplimented !!! 365 #endif 366 367 /* 368 * void bus_space_write_region_N __P((bus_space_tag_t tag, 369 * bus_space_handle_t bsh, bus_size_t offset, 370 * const u_intN_t *addr, size_t count)); 371 * 372 * Write `count' 1, 2, 4, or 8 byte quantities from the buffer provided 373 * to bus space described by tag/handle starting at `offset'. 374 */ 375 376 #define bus_space_write_region_1(t, h, o, a, c) do { \ 377 (void) t; \ 378 __asm __volatile (" \ 379 movl %0,a0 ; \ 380 movl %1,a1 ; \ 381 movl %2,d0 ; \ 382 1: movb a1@+,a0@+ ; \ 383 subql #1,d0 ; \ 384 jne 1b" : \ 385 : \ 386 "r" ((h) + (o)), "g" (a), "g" ((size_t)(c)) : \ 387 "a0","a1","d0"); \ 388 } while (0) 389 390 #define bus_space_write_region_2(t, h, o, a, c) do { \ 391 (void) t; \ 392 __asm __volatile (" \ 393 movl %0,a0 ; \ 394 movl %1,a1 ; \ 395 movl %2,d0 ; \ 396 1: movw a1@+,a0@+ ; \ 397 subql #1,d0 ; \ 398 jne 1b" : \ 399 : \ 400 "r" ((h) + (o)), "g" (a), "g" ((size_t)(c)) : \ 401 "a0","a1","d0"); \ 402 } while (0) 403 404 #define bus_space_write_region_4(t, h, o, a, c) do { \ 405 (void) t; \ 406 __asm __volatile (" \ 407 movl %0,a0 ; \ 408 movl %1,a1 ; \ 409 movl %2,d0 ; \ 410 1: movl a1@+,a0@+ ; \ 411 subql #1,d0 ; \ 412 jne 1b" : \ 413 : \ 414 "r" ((h) + (o)), "g" (a), "g" ((size_t)(c)) : \ 415 "a0","a1","d0"); \ 416 } while (0) 417 418 #if 0 /* Cause a link error for bus_space_write_region_8 */ 419 #define bus_space_write_region_8 \ 420 !!! bus_space_write_region_8 unimplemented !!! 421 #endif 422 423 /* 424 * void bus_space_set_multi_N __P((bus_space_tag_t tag, 425 * bus_space_handle_t bsh, bus_size_t offset, u_intN_t val, 426 * size_t count)); 427 * 428 * Write the 1, 2, 4, or 8 byte value `val' to bus space described 429 * by tag/handle/offset `count' times. 430 */ 431 432 #define bus_space_set_multi_1(t, h, o, val, c) do { \ 433 (void) t; \ 434 __asm __volatile (" \ 435 movl %0,a0 ; \ 436 movl %1,d1 ; \ 437 movl %2,d0 ; \ 438 1: movb d1,a0@ ; \ 439 subql #1,d0 ; \ 440 jne 1b" : \ 441 : \ 442 "r" ((h)+(o)), "g" ((u_long)val), \ 443 "g" ((size_t)(c)) : \ 444 "a0","d0","d1"); \ 445 } while (0) 446 447 #define bus_space_set_multi_2(t, h, o, val, c) do { \ 448 (void) t; \ 449 __asm __volatile (" \ 450 movl %0,a0 ; \ 451 movl %1,d1 ; \ 452 movl %2,d0 ; \ 453 1: movw d1,a0@ ; \ 454 subql #1,d0 ; \ 455 jne 1b" : \ 456 : \ 457 "r" ((h)+(o)), "g" ((u_long)val), \ 458 "g" ((size_t)(c)) : \ 459 "a0","d0","d1"); \ 460 } while (0) 461 462 #define bus_space_set_multi_4(t, h, o, val, c) do { \ 463 (void) t; \ 464 __asm __volatile (" \ 465 movl %0,a0 ; \ 466 movl %1,d1 ; \ 467 movl %2,d0 ; \ 468 1: movl d1,a0@ ; \ 469 subql #1,d0 ; \ 470 jne 1b" : \ 471 : \ 472 "r" ((h)+(o)), "g" ((u_long)val), \ 473 "g" ((size_t)(c)) : \ 474 "a0","d0","d1"); \ 475 } while (0) 476 477 #if 0 /* Cause a link error for bus_space_set_multi_8 */ 478 #define bus_space_set_multi_8 \ 479 !!! bus_space_set_multi_8 unimplemented !!! 480 #endif 481 482 /* 483 * void bus_space_set_region_N __P((bus_space_tag_t tag, 484 * bus_space_handle_t bsh, bus_size_t offset, u_intN_t val, 485 * size_t count)); 486 * 487 * Write `count' 1, 2, 4, or 8 byte value `val' to bus space described 488 * by tag/handle starting at `offset'. 489 */ 490 491 #define bus_space_set_region_1(t, h, o, val, c) do { \ 492 (void) t; \ 493 __asm __volatile (" \ 494 movl %0,a0 ; \ 495 movl %1,d1 ; \ 496 movl %2,d0 ; \ 497 1: movb d1,a0@+ ; \ 498 subql #1,d0 ; \ 499 jne 1b" : \ 500 : \ 501 "r" ((h)+(o)), "g" ((u_long)val), \ 502 "g" ((size_t)(c)) : \ 503 "a0","d0","d1"); \ 504 } while (0) 505 506 #define bus_space_set_region_2(t, h, o, val, c) do { \ 507 (void) t; \ 508 __asm __volatile (" \ 509 movl %0,a0 ; \ 510 movl %1,d1 ; \ 511 movl %2,d0 ; \ 512 1: movw d1,a0@+ ; \ 513 subql #1,d0 ; \ 514 jne 1b" : \ 515 : \ 516 "r" ((h)+(o)), "g" ((u_long)val), \ 517 "g" ((size_t)(c)) : \ 518 "a0","d0","d1"); \ 519 } while (0) 520 521 #define bus_space_set_region_4(t, h, o, val, c) do { \ 522 (void) t; \ 523 __asm __volatile (" \ 524 movl %0,a0 ; \ 525 movl %1,d1 ; \ 526 movl %2,d0 ; \ 527 1: movl d1,a0@+ ; \ 528 subql #1,d0 ; \ 529 jne 1b" : \ 530 : \ 531 "r" ((h)+(o)), "g" ((u_long)val), \ 532 "g" ((size_t)(c)) : \ 533 "a0","d0","d1"); \ 534 } while (0) 535 536 #if 0 /* Cause a link error for bus_space_set_region_8 */ 537 #define bus_space_set_region_8 \ 538 !!! bus_space_set_region_8 unimplemented !!! 539 #endif 540 541 /* 542 * void bus_space_copy_N __P((bus_space_tag_t tag, 543 * bus_space_handle_t bsh1, bus_size_t off1, 544 * bus_space_handle_t bsh2, bus_size_t off2, 545 * size_t count)); 546 * 547 * Copy `count' 1, 2, 4, or 8 byte values from bus space starting 548 * at tag/bsh1/off1 to bus space starting at tag/bsh2/off2. 549 */ 550 551 #define __MAC68K_copy_region_N(BYTES) \ 552 static __inline void __CONCAT(bus_space_copy_region_,BYTES) \ 553 __P((bus_space_tag_t, \ 554 bus_space_handle_t bsh1, bus_size_t off1, \ 555 bus_space_handle_t bsh2, bus_size_t off2, \ 556 bus_size_t count)); \ 557 \ 558 static __inline void \ 559 __CONCAT(bus_space_copy_region_,BYTES)(t, h1, o1, h2, o2, c) \ 560 bus_space_tag_t t; \ 561 bus_space_handle_t h1, h2; \ 562 bus_size_t o1, o2, c; \ 563 { \ 564 bus_size_t o; \ 565 \ 566 if ((h1 + o1) >= (h2 + o2)) { \ 567 /* src after dest: copy forward */ \ 568 for (o = 0; c != 0; c--, o += BYTES) \ 569 __CONCAT(bus_space_write_,BYTES)(t, h2, o2 + o, \ 570 __CONCAT(bus_space_read_,BYTES)(t, h1, o1 + o)); \ 571 } else { \ 572 /* dest after src: copy backwards */ \ 573 for (o = (c - 1) * BYTES; c != 0; c--, o -= BYTES) \ 574 __CONCAT(bus_space_write_,BYTES)(t, h2, o2 + o, \ 575 __CONCAT(bus_space_read_,BYTES)(t, h1, o1 + o)); \ 576 } \ 577 } 578 __MAC68K_copy_region_N(1) 579 __MAC68K_copy_region_N(2) 580 __MAC68K_copy_region_N(4) 581 #if 0 /* Cause a link error for bus_space_copy_8 */ 582 #define bus_space_copy_8 \ 583 !!! bus_space_copy_8 unimplemented !!! 584 #endif 585 586 #undef __MAC68K_copy_region_N 587 588 /* 589 * Bus read/write barrier methods. 590 * 591 * void bus_space_barrier __P((bus_space_tag_t tag, 592 * bus_space_handle_t bsh, bus_size_t offset, 593 * bus_size_t len, int flags)); 594 * 595 * Note: the 680x0 does not currently require barriers, but we must 596 * provide the flags to MI code. 597 */ 598 #define bus_space_barrier(t, h, o, l, f) \ 599 ((void)((void)(t), (void)(h), (void)(o), (void)(l), (void)(f))) 600 #define BUS_SPACE_BARRIER_READ 0x01 /* force read barrier */ 601 #define BUS_SPACE_BARRIER_WRITE 0x02 /* force write barrier */ 602 603 #define BUS_SPACE_ALIGNED_POINTER(p, t) ALIGNED_POINTER(p, t) 604 605 #endif /* _MAC68K_BUS_H_ */ 606