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