bus_space_rmi.c revision 198956
1/*- 2 * Copyright (c) 2009 RMI Corporation 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 * 26 * $FreeBSD$ 27 */ 28#include <sys/cdefs.h> 29__FBSDID("$FreeBSD$"); 30 31#include <sys/param.h> 32#include <sys/systm.h> 33#include <sys/bus.h> 34#include <sys/kernel.h> 35#include <sys/malloc.h> 36#include <sys/ktr.h> 37 38#include <vm/vm.h> 39#include <vm/pmap.h> 40#include <vm/vm_kern.h> 41#include <vm/vm_extern.h> 42 43#include <machine/bus.h> 44#include <machine/cache.h> 45void xlr_putc(char); 46void xlr_print_int(uint32_t); 47 48static int rmi_bus_space_map(void *t, bus_addr_t addr, 49 bus_size_t size, int flags, 50 bus_space_handle_t *bshp); 51 52 53static void rmi_bus_space_unmap(void *t, bus_space_handle_t bsh, 54 bus_size_t size); 55 56static int rmi_bus_space_subregion(void *t, 57 bus_space_handle_t bsh, 58 bus_size_t offset, bus_size_t size, 59 bus_space_handle_t *nbshp); 60 61static u_int8_t rmi_bus_space_read_1(void *t, 62 bus_space_handle_t handle, 63 bus_size_t offset); 64 65static u_int16_t rmi_bus_space_read_2(void *t, 66 bus_space_handle_t handle, 67 bus_size_t offset); 68 69static u_int32_t rmi_bus_space_read_4(void *t, 70 bus_space_handle_t handle, 71 bus_size_t offset); 72 73static void rmi_bus_space_read_multi_1(void *t, 74 bus_space_handle_t handle, 75 bus_size_t offset, u_int8_t *addr, 76 size_t count); 77 78static void rmi_bus_space_read_multi_2(void *t, 79 bus_space_handle_t handle, 80 bus_size_t offset, u_int16_t *addr, 81 size_t count); 82 83static void rmi_bus_space_read_multi_4(void *t, 84 bus_space_handle_t handle, 85 bus_size_t offset, u_int32_t *addr, 86 size_t count); 87 88static void rmi_bus_space_read_region_1(void *t, 89 bus_space_handle_t bsh, 90 bus_size_t offset, u_int8_t *addr, 91 size_t count); 92 93static void rmi_bus_space_read_region_2(void *t, 94 bus_space_handle_t bsh, 95 bus_size_t offset, u_int16_t *addr, 96 size_t count); 97 98static void rmi_bus_space_read_region_4(void *t, 99 bus_space_handle_t bsh, 100 bus_size_t offset, u_int32_t *addr, 101 size_t count); 102 103static void rmi_bus_space_write_1(void *t, 104 bus_space_handle_t handle, 105 bus_size_t offset, u_int8_t value); 106 107static void rmi_bus_space_write_2(void *t, 108 bus_space_handle_t handle, 109 bus_size_t offset, u_int16_t value); 110 111static void rmi_bus_space_write_4(void *t, 112 bus_space_handle_t handle, 113 bus_size_t offset, u_int32_t value); 114 115static void rmi_bus_space_write_multi_1(void *t, 116 bus_space_handle_t handle, 117 bus_size_t offset, 118 const u_int8_t *addr, 119 size_t count); 120static void rmi_bus_space_write_multi_2(void *t, 121 bus_space_handle_t handle, 122 bus_size_t offset, 123 const u_int16_t *addr, 124 size_t count); 125 126static void rmi_bus_space_write_multi_4(void *t, 127 bus_space_handle_t handle, 128 bus_size_t offset, 129 const u_int32_t *addr, 130 size_t count); 131 132static void rmi_bus_space_write_region_2(void *t, 133 bus_space_handle_t bsh, 134 bus_size_t offset, 135 const u_int16_t *addr, 136 size_t count); 137 138static void rmi_bus_space_write_region_4(void *t, 139 bus_space_handle_t bsh, 140 bus_size_t offset, 141 const u_int32_t *addr, 142 size_t count); 143 144 145static void rmi_bus_space_set_region_2(void *t, 146 bus_space_handle_t bsh, 147 bus_size_t offset, u_int16_t value, 148 size_t count); 149static void rmi_bus_space_set_region_4(void *t, 150 bus_space_handle_t bsh, 151 bus_size_t offset, u_int32_t value, 152 size_t count); 153 154static void rmi_bus_space_barrier(void *tag __unused, bus_space_handle_t bsh __unused, 155 bus_size_t offset __unused, bus_size_t len __unused, int flags); 156 157 158static void rmi_bus_space_copy_region_2(void *t, 159 bus_space_handle_t bsh1, 160 bus_size_t off1, 161 bus_space_handle_t bsh2, 162 bus_size_t off2, size_t count); 163 164u_int8_t rmi_bus_space_read_stream_1(void *t, bus_space_handle_t handle, 165 bus_size_t offset); 166 167static u_int16_t rmi_bus_space_read_stream_2(void *t, bus_space_handle_t handle, 168 bus_size_t offset); 169 170static u_int32_t rmi_bus_space_read_stream_4(void *t, bus_space_handle_t handle, 171 bus_size_t offset); 172static void rmi_bus_space_read_multi_stream_1(void *t, 173 bus_space_handle_t handle, 174 bus_size_t offset, u_int8_t *addr, 175 size_t count); 176 177static void rmi_bus_space_read_multi_stream_2(void *t, 178 bus_space_handle_t handle, 179 bus_size_t offset, u_int16_t *addr, 180 size_t count); 181 182static void rmi_bus_space_read_multi_stream_4(void *t, 183 bus_space_handle_t handle, 184 bus_size_t offset, u_int32_t *addr, 185 size_t count); 186 187void rmi_bus_space_write_stream_1(void *t, bus_space_handle_t bsh, 188 bus_size_t offset, u_int8_t value); 189static void rmi_bus_space_write_stream_2(void *t, bus_space_handle_t handle, 190 bus_size_t offset, u_int16_t value); 191 192static void rmi_bus_space_write_stream_4(void *t, bus_space_handle_t handle, 193 bus_size_t offset, u_int32_t value); 194 195static void rmi_bus_space_write_multi_stream_1(void *t, 196 bus_space_handle_t handle, 197 bus_size_t offset, 198 const u_int8_t *addr, 199 size_t count); 200static void rmi_bus_space_write_multi_stream_2(void *t, 201 bus_space_handle_t handle, 202 bus_size_t offset, 203 const u_int16_t *addr, 204 size_t count); 205 206static void rmi_bus_space_write_multi_stream_4(void *t, 207 bus_space_handle_t handle, 208 bus_size_t offset, 209 const u_int32_t *addr, 210 size_t count); 211 212 213static struct bus_space local_rmi_bus_space = { 214 /* cookie */ 215 (void *) 0, 216 217 /* mapping/unmapping */ 218 rmi_bus_space_map, 219 rmi_bus_space_unmap, 220 rmi_bus_space_subregion, 221 222 /* allocation/deallocation */ 223 NULL, 224 NULL, 225 226 /* barrier */ 227 rmi_bus_space_barrier, 228 229 /* read (single) */ 230 rmi_bus_space_read_1, 231 rmi_bus_space_read_2, 232 rmi_bus_space_read_4, 233 NULL, 234 235 /* read multiple */ 236 rmi_bus_space_read_multi_1, 237 rmi_bus_space_read_multi_2, 238 rmi_bus_space_read_multi_4, 239 NULL, 240 241 /* read region */ 242 rmi_bus_space_read_region_1, 243 rmi_bus_space_read_region_2, 244 rmi_bus_space_read_region_4, 245 NULL, 246 247 /* write (single) */ 248 rmi_bus_space_write_1, 249 rmi_bus_space_write_2, 250 rmi_bus_space_write_4, 251 NULL, 252 253 /* write multiple */ 254 rmi_bus_space_write_multi_1, 255 rmi_bus_space_write_multi_2, 256 rmi_bus_space_write_multi_4, 257 NULL, 258 259 /* write region */ 260 NULL, 261 rmi_bus_space_write_region_2, 262 rmi_bus_space_write_region_4, 263 NULL, 264 265 /* set multiple */ 266 NULL, 267 NULL, 268 NULL, 269 NULL, 270 271 /* set region */ 272 NULL, 273 rmi_bus_space_set_region_2, 274 rmi_bus_space_set_region_4, 275 NULL, 276 277 /* copy */ 278 NULL, 279 rmi_bus_space_copy_region_2, 280 NULL, 281 NULL, 282 283 /* read (single) stream */ 284 rmi_bus_space_read_stream_1, 285 rmi_bus_space_read_stream_2, 286 rmi_bus_space_read_stream_4, 287 NULL, 288 289 /* read multiple stream */ 290 rmi_bus_space_read_multi_stream_1, 291 rmi_bus_space_read_multi_stream_2, 292 rmi_bus_space_read_multi_stream_4, 293 NULL, 294 295 /* read region stream */ 296 rmi_bus_space_read_region_1, 297 rmi_bus_space_read_region_2, 298 rmi_bus_space_read_region_4, 299 NULL, 300 301 /* write (single) stream */ 302 rmi_bus_space_write_stream_1, 303 rmi_bus_space_write_stream_2, 304 rmi_bus_space_write_stream_4, 305 NULL, 306 307 /* write multiple stream */ 308 rmi_bus_space_write_multi_stream_1, 309 rmi_bus_space_write_multi_stream_2, 310 rmi_bus_space_write_multi_stream_4, 311 NULL, 312 313 /* write region stream */ 314 NULL, 315 rmi_bus_space_write_region_2, 316 rmi_bus_space_write_region_4, 317 NULL, 318}; 319 320/* generic bus_space tag */ 321bus_space_tag_t rmi_bus_space = &local_rmi_bus_space; 322 323#define MIPS_BUS_SPACE_IO 0 /* space is i/o space */ 324#define MIPS_BUS_SPACE_MEM 1 /* space is mem space */ 325#define MIPS_BUS_SPACE_PCI 10 /* avoid conflict with other spaces */ 326 327#define BUS_SPACE_UNRESTRICTED (~0) 328 329#define SWAP32(x)\ 330 (((x) & 0xff000000) >> 24) | \ 331 (((x) & 0x000000ff) << 24) | \ 332 (((x) & 0x0000ff00) << 8) | \ 333 (((x) & 0x00ff0000) >> 8) 334 335#define SWAP16(x)\ 336 (((x) & 0xff00) >> 8) | \ 337 (((x) & 0x00ff) << 8) 338 339/* 340 * Map a region of device bus space into CPU virtual address space. 341 */ 342 343 344static int 345rmi_bus_space_map(void *t __unused, bus_addr_t addr, 346 bus_size_t size __unused, int flags __unused, 347 bus_space_handle_t *bshp) 348{ 349 350 *bshp = addr; 351 return (0); 352} 353 354/* 355 * Unmap a region of device bus space. 356 */ 357static void 358rmi_bus_space_unmap(void *t __unused, bus_space_handle_t bsh __unused, 359 bus_size_t size __unused) 360{ 361} 362 363/* 364 * Get a new handle for a subregion of an already-mapped area of bus space. 365 */ 366 367static int 368rmi_bus_space_subregion(void *t __unused, bus_space_handle_t bsh, 369 bus_size_t offset, bus_size_t size __unused, 370 bus_space_handle_t *nbshp) 371{ 372 *nbshp = bsh + offset; 373 return (0); 374} 375 376/* 377 * Read a 1, 2, 4, or 8 byte quantity from bus space 378 * described by tag/handle/offset. 379 */ 380 381static u_int8_t 382rmi_bus_space_read_1(void *tag, bus_space_handle_t handle, 383 bus_size_t offset) 384{ 385 if ((int)tag == MIPS_BUS_SPACE_PCI) 386 return (u_int8_t)(*(volatile u_int8_t *)(handle + offset)); 387 else 388 return (u_int8_t)(*(volatile u_int32_t *)(handle + offset)); 389} 390 391static u_int16_t 392rmi_bus_space_read_2(void *tag, bus_space_handle_t handle, 393 bus_size_t offset) 394{ 395 if ((int)tag == MIPS_BUS_SPACE_PCI) 396 return SWAP16((u_int16_t)(*(volatile u_int16_t *)(handle + offset))); 397 else 398 return *(volatile u_int16_t *)(handle + offset); 399} 400 401static u_int32_t 402rmi_bus_space_read_4(void *tag, bus_space_handle_t handle, 403 bus_size_t offset) 404{ 405 if ((int)tag == MIPS_BUS_SPACE_PCI) 406 return SWAP32((*(volatile u_int32_t *)(handle + offset))); 407 else 408 return (*(volatile u_int32_t *)(handle + offset)); 409} 410 411 412 413/* 414 * Read `count' 1, 2, 4, or 8 byte quantities from bus space 415 * described by tag/handle/offset and copy into buffer provided. 416 */ 417static void 418rmi_bus_space_read_multi_1(void *tag, bus_space_handle_t handle, 419 bus_size_t offset, u_int8_t *addr, size_t count) 420{ 421 422 if ((int)tag != MIPS_BUS_SPACE_PCI) 423 return; 424 while (count--) { 425 *addr = (*(volatile u_int8_t *)(handle + offset)); 426 addr++; 427 } 428} 429 430static void 431rmi_bus_space_read_multi_2(void *tag, bus_space_handle_t handle, 432 bus_size_t offset, u_int16_t *addr, size_t count) 433{ 434 435 if ((int)tag != MIPS_BUS_SPACE_PCI) 436 return; 437 while (count--) { 438 *addr = *(volatile u_int16_t *)(handle + offset); 439 *addr = SWAP16(*addr); 440 addr++; 441 } 442} 443 444static void 445rmi_bus_space_read_multi_4(void *tag, bus_space_handle_t handle, 446 bus_size_t offset, u_int32_t *addr, size_t count) 447{ 448 449 if ((int)tag != MIPS_BUS_SPACE_PCI) 450 return; 451 while (count--) { 452 *addr = *(volatile u_int32_t *)(handle + offset); 453 *addr = SWAP32(*addr); 454 addr++; 455 } 456} 457 458/* 459 * Write the 1, 2, 4, or 8 byte value `value' to bus space 460 * described by tag/handle/offset. 461 */ 462 463 464static void 465rmi_bus_space_write_1(void *tag, bus_space_handle_t handle, 466 bus_size_t offset, u_int8_t value) 467{ 468 mips_sync(); 469 if ((int)tag == MIPS_BUS_SPACE_PCI) 470 *(volatile u_int8_t *)(handle + offset) = value; 471 else 472 *(volatile u_int32_t *)(handle + offset) = (u_int32_t)value; 473} 474 475static void 476rmi_bus_space_write_2(void *tag, bus_space_handle_t handle, 477 bus_size_t offset, u_int16_t value) 478{ 479 mips_sync(); 480 if ((int)tag == MIPS_BUS_SPACE_PCI) { 481 *(volatile u_int16_t *)(handle + offset) = SWAP16(value); 482 } else 483 *(volatile u_int16_t *)(handle + offset) = value; 484} 485 486 487static void 488rmi_bus_space_write_4(void *tag, bus_space_handle_t handle, 489 bus_size_t offset, u_int32_t value) 490{ 491 mips_sync(); 492 if ((int)tag == MIPS_BUS_SPACE_PCI) { 493 *(volatile u_int32_t *)(handle + offset) = SWAP32(value); 494 } else 495 *(volatile u_int32_t *)(handle + offset) = value; 496} 497 498 499 500/* 501 * Write `count' 1, 2, 4, or 8 byte quantities from the buffer 502 * provided to bus space described by tag/handle/offset. 503 */ 504 505 506static void 507rmi_bus_space_write_multi_1(void *tag, bus_space_handle_t handle, 508 bus_size_t offset, const u_int8_t *addr, size_t count) 509{ 510 mips_sync(); 511 if ((int)tag != MIPS_BUS_SPACE_PCI) 512 return; 513 while (count--) { 514 (*(volatile u_int8_t *)(handle + offset)) = *addr; 515 addr++; 516 } 517} 518 519static void 520rmi_bus_space_write_multi_2(void *tag, bus_space_handle_t handle, 521 bus_size_t offset, const u_int16_t *addr, size_t count) 522{ 523 mips_sync(); 524 if ((int)tag != MIPS_BUS_SPACE_PCI) 525 return; 526 while (count--) { 527 (*(volatile u_int16_t *)(handle + offset)) = SWAP16(*addr); 528 addr++; 529 } 530} 531 532static void 533rmi_bus_space_write_multi_4(void *tag, bus_space_handle_t handle, 534 bus_size_t offset, const u_int32_t *addr, size_t count) 535{ 536 mips_sync(); 537 if ((int)tag != MIPS_BUS_SPACE_PCI) 538 return; 539 while (count--) { 540 (*(volatile u_int32_t *)(handle + offset)) = SWAP32(*addr); 541 addr++; 542 } 543} 544 545/* 546 * Write `count' 1, 2, 4, or 8 byte value `val' to bus space described 547 * by tag/handle starting at `offset'. 548 */ 549 550static void 551rmi_bus_space_set_region_2(void *t, bus_space_handle_t bsh, 552 bus_size_t offset, u_int16_t value, size_t count) 553{ 554 bus_addr_t addr = bsh + offset; 555 556 for (; count != 0; count--, addr += 2) 557 (*(volatile u_int16_t *)(addr)) = value; 558} 559 560static void 561rmi_bus_space_set_region_4(void *t, bus_space_handle_t bsh, 562 bus_size_t offset, u_int32_t value, size_t count) 563{ 564 bus_addr_t addr = bsh + offset; 565 566 for (; count != 0; count--, addr += 4) 567 (*(volatile u_int32_t *)(addr)) = value; 568} 569 570 571/* 572 * Copy `count' 1, 2, 4, or 8 byte values from bus space starting 573 * at tag/bsh1/off1 to bus space starting at tag/bsh2/off2. 574 */ 575static void 576rmi_bus_space_copy_region_2(void *t, bus_space_handle_t bsh1, 577 bus_size_t off1, bus_space_handle_t bsh2, 578 bus_size_t off2, size_t count) 579{ 580 printf("bus_space_copy_region_2 - unimplemented\n"); 581} 582 583/* 584 * Read `count' 1, 2, 4, or 8 byte quantities from bus space 585 * described by tag/handle/offset and copy into buffer provided. 586 */ 587 588u_int8_t 589rmi_bus_space_read_stream_1(void *t, bus_space_handle_t handle, 590 bus_size_t offset) 591{ 592 593 return *((volatile u_int8_t *)(handle + offset)); 594} 595 596 597static u_int16_t 598rmi_bus_space_read_stream_2(void *t, bus_space_handle_t handle, 599 bus_size_t offset) 600{ 601 return *(volatile u_int16_t *)(handle + offset); 602} 603 604 605static u_int32_t 606rmi_bus_space_read_stream_4(void *t, bus_space_handle_t handle, 607 bus_size_t offset) 608{ 609 return (*(volatile u_int32_t *)(handle + offset)); 610} 611 612 613static void 614rmi_bus_space_read_multi_stream_1(void *tag, bus_space_handle_t handle, 615 bus_size_t offset, u_int8_t *addr, size_t count) 616{ 617 618 if ((int)tag != MIPS_BUS_SPACE_PCI) 619 return; 620 while (count--) { 621 *addr = (*(volatile u_int8_t *)(handle + offset)); 622 addr++; 623 } 624} 625 626static void 627rmi_bus_space_read_multi_stream_2(void *tag, bus_space_handle_t handle, 628 bus_size_t offset, u_int16_t *addr, size_t count) 629{ 630 631 if ((int)tag != MIPS_BUS_SPACE_PCI) 632 return; 633 while (count--) { 634 *addr = (*(volatile u_int16_t *)(handle + offset)); 635 addr++; 636 } 637} 638 639static void 640rmi_bus_space_read_multi_stream_4(void *tag, bus_space_handle_t handle, 641 bus_size_t offset, u_int32_t *addr, size_t count) 642{ 643 644 if ((int)tag != MIPS_BUS_SPACE_PCI) 645 return; 646 while (count--) { 647 *addr = (*(volatile u_int32_t *)(handle + offset)); 648 addr++; 649 } 650} 651 652 653 654/* 655 * Read `count' 1, 2, 4, or 8 byte quantities from bus space 656 * described by tag/handle and starting at `offset' and copy into 657 * buffer provided. 658 */ 659void 660rmi_bus_space_read_region_1(void *t, bus_space_handle_t bsh, 661 bus_size_t offset, u_int8_t *addr, size_t count) 662{ 663 bus_addr_t baddr = bsh + offset; 664 665 while (count--) { 666 *addr++ = (*(volatile u_int8_t *)(baddr)); 667 baddr += 1; 668 } 669} 670 671void 672rmi_bus_space_read_region_2(void *t, bus_space_handle_t bsh, 673 bus_size_t offset, u_int16_t *addr, size_t count) 674{ 675 bus_addr_t baddr = bsh + offset; 676 677 while (count--) { 678 *addr++ = (*(volatile u_int16_t *)(baddr)); 679 baddr += 2; 680 } 681} 682 683void 684rmi_bus_space_read_region_4(void *t, bus_space_handle_t bsh, 685 bus_size_t offset, u_int32_t *addr, size_t count) 686{ 687 bus_addr_t baddr = bsh + offset; 688 689 while (count--) { 690 *addr++ = (*(volatile u_int32_t *)(baddr)); 691 baddr += 4; 692 } 693} 694 695 696void 697rmi_bus_space_write_stream_1(void *t, bus_space_handle_t handle, 698 bus_size_t offset, u_int8_t value) 699{ 700 mips_sync(); 701 *(volatile u_int8_t *)(handle + offset) = value; 702} 703 704 705static void 706rmi_bus_space_write_stream_2(void *t, bus_space_handle_t handle, 707 bus_size_t offset, u_int16_t value) 708{ 709 mips_sync(); 710 *(volatile u_int16_t *)(handle + offset) = value; 711} 712 713 714static void 715rmi_bus_space_write_stream_4(void *t, bus_space_handle_t handle, 716 bus_size_t offset, u_int32_t value) 717{ 718 mips_sync(); 719 *(volatile u_int32_t *)(handle + offset) = value; 720} 721 722 723static void 724rmi_bus_space_write_multi_stream_1(void *tag, bus_space_handle_t handle, 725 bus_size_t offset, const u_int8_t *addr, size_t count) 726{ 727 mips_sync(); 728 if ((int)tag != MIPS_BUS_SPACE_PCI) 729 return; 730 while (count--) { 731 (*(volatile u_int8_t *)(handle + offset)) = *addr; 732 addr++; 733 } 734} 735 736static void 737rmi_bus_space_write_multi_stream_2(void *tag, bus_space_handle_t handle, 738 bus_size_t offset, const u_int16_t *addr, size_t count) 739{ 740 mips_sync(); 741 if ((int)tag != MIPS_BUS_SPACE_PCI) 742 return; 743 while (count--) { 744 (*(volatile u_int16_t *)(handle + offset)) = *addr; 745 addr++; 746 } 747} 748 749static void 750rmi_bus_space_write_multi_stream_4(void *tag, bus_space_handle_t handle, 751 bus_size_t offset, const u_int32_t *addr, size_t count) 752{ 753 mips_sync(); 754 if ((int)tag != MIPS_BUS_SPACE_PCI) 755 return; 756 while (count--) { 757 (*(volatile u_int32_t *)(handle + offset)) = *addr; 758 addr++; 759 } 760} 761 762void 763rmi_bus_space_write_region_2(void *t, 764 bus_space_handle_t bsh, 765 bus_size_t offset, 766 const u_int16_t *addr, 767 size_t count) 768{ 769 bus_addr_t baddr = (bus_addr_t)bsh + offset; 770 while (count--) { 771 (*(volatile u_int16_t *)(baddr)) = *addr; 772 addr++; 773 baddr += 2; 774 } 775} 776 777void 778rmi_bus_space_write_region_4(void *t, bus_space_handle_t bsh, 779 bus_size_t offset, const u_int32_t *addr, size_t count) 780{ 781 bus_addr_t baddr = bsh + offset; 782 783 while (count--) { 784 (*(volatile u_int32_t *)(baddr)) = *addr; 785 addr++; 786 baddr += 4; 787 } 788} 789 790static void 791rmi_bus_space_barrier(void *tag __unused, bus_space_handle_t bsh __unused, 792 bus_size_t offset __unused, bus_size_t len __unused, int flags) 793{ 794 795} 796