bus_space_rmi_pci.c revision 302408
11590Srgrimes/*- 21590Srgrimes * Copyright 2003-2011 Netlogic Microsystems (Netlogic). All rights 31590Srgrimes * reserved. 41590Srgrimes * 51590Srgrimes * Redistribution and use in source and binary forms, with or without 61590Srgrimes * modification, are permitted provided that the following conditions are 71590Srgrimes * met: 81590Srgrimes * 91590Srgrimes * 1. Redistributions of source code must retain the above copyright 101590Srgrimes * notice, this list of conditions and the following disclaimer. 111590Srgrimes * 2. Redistributions in binary form must reproduce the above copyright 121590Srgrimes * notice, this list of conditions and the following disclaimer in 131590Srgrimes * the documentation and/or other materials provided with the 141590Srgrimes * distribution. 151590Srgrimes * 161590Srgrimes * THIS SOFTWARE IS PROVIDED BY Netlogic Microsystems ``AS IS'' AND 171590Srgrimes * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 181590Srgrimes * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 191590Srgrimes * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NETLOGIC OR CONTRIBUTORS BE 201590Srgrimes * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 211590Srgrimes * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 221590Srgrimes * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 231590Srgrimes * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 241590Srgrimes * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 251590Srgrimes * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 261590Srgrimes * THE POSSIBILITY OF SUCH DAMAGE. 271590Srgrimes * 281590Srgrimes * NETLOGIC_BSD */ 291590Srgrimes 301590Srgrimes#include <sys/cdefs.h> 3187295Sdwmalone__FBSDID("$FreeBSD: stable/11/sys/mips/nlm/bus_space_rmi_pci.c 279387 2015-02-28 00:17:29Z jchandra $"); 321590Srgrimes 331590Srgrimes#include <sys/param.h> 341590Srgrimes#include <sys/systm.h> 351590Srgrimes#include <sys/bus.h> 3687628Sdwmalone#include <sys/kernel.h> 371590Srgrimes#include <sys/endian.h> 3887628Sdwmalone#include <sys/malloc.h> 391590Srgrimes#include <sys/ktr.h> 4087628Sdwmalone 411590Srgrimes#include <vm/vm.h> 4287628Sdwmalone#include <vm/pmap.h> 4387628Sdwmalone#include <vm/vm_kern.h> 4487628Sdwmalone#include <vm/vm_extern.h> 451590Srgrimes 461590Srgrimes#include <machine/bus.h> 471590Srgrimes#include <machine/cache.h> 48200462Sdelphij 49132245Stjrstatic int 501590Srgrimesrmi_pci_bus_space_map(void *t, bus_addr_t addr, 511590Srgrimes bus_size_t size, int flags, 52200462Sdelphij bus_space_handle_t * bshp); 5323690Speter 54132245Stjrstatic void 551590Srgrimesrmi_pci_bus_space_unmap(void *t, bus_space_handle_t bsh, 56179652Swkoszek bus_size_t size); 571590Srgrimes 581590Srgrimesstatic int 59102944Sdwmalonermi_pci_bus_space_subregion(void *t, 601590Srgrimes bus_space_handle_t bsh, 61132245Stjr bus_size_t offset, bus_size_t size, 62132245Stjr bus_space_handle_t * nbshp); 631590Srgrimes 641590Srgrimesstatic u_int8_t 651590Srgrimesrmi_pci_bus_space_read_1(void *t, 661590Srgrimes bus_space_handle_t handle, 67132245Stjr bus_size_t offset); 68132245Stjr 6924360Simpstatic u_int16_t 701590Srgrimesrmi_pci_bus_space_read_2(void *t, 711590Srgrimes bus_space_handle_t handle, 721590Srgrimes bus_size_t offset); 731590Srgrimes 741590Srgrimesstatic u_int32_t 751590Srgrimesrmi_pci_bus_space_read_4(void *t, 761590Srgrimes bus_space_handle_t handle, 771590Srgrimes bus_size_t offset); 781590Srgrimes 791590Srgrimesstatic void 801590Srgrimesrmi_pci_bus_space_read_multi_1(void *t, 811590Srgrimes bus_space_handle_t handle, 821590Srgrimes bus_size_t offset, u_int8_t * addr, 831590Srgrimes size_t count); 841590Srgrimes 851590Srgrimesstatic void 861590Srgrimesrmi_pci_bus_space_read_multi_2(void *t, 871590Srgrimes bus_space_handle_t handle, 881590Srgrimes bus_size_t offset, u_int16_t * addr, 891590Srgrimes size_t count); 901590Srgrimes 911590Srgrimesstatic void 92132245Stjrrmi_pci_bus_space_read_multi_4(void *t, 931590Srgrimes bus_space_handle_t handle, 941590Srgrimes bus_size_t offset, u_int32_t * addr, 951590Srgrimes size_t count); 96132245Stjr 97132245Stjrstatic void 981590Srgrimesrmi_pci_bus_space_read_region_1(void *t, 991590Srgrimes bus_space_handle_t bsh, 1001590Srgrimes bus_size_t offset, u_int8_t * addr, 101138883Sssouhlal size_t count); 1021590Srgrimes 1031590Srgrimesstatic void 1041590Srgrimesrmi_pci_bus_space_read_region_2(void *t, 1051590Srgrimes bus_space_handle_t bsh, 1061590Srgrimes bus_size_t offset, u_int16_t * addr, 1071590Srgrimes size_t count); 1081590Srgrimes 1091590Srgrimesstatic void 110102944Sdwmalonermi_pci_bus_space_read_region_4(void *t, 1111590Srgrimes bus_space_handle_t bsh, 1121590Srgrimes bus_size_t offset, u_int32_t * addr, 1131590Srgrimes size_t count); 1141590Srgrimes 115static void 116rmi_pci_bus_space_write_1(void *t, 117 bus_space_handle_t handle, 118 bus_size_t offset, u_int8_t value); 119 120static void 121rmi_pci_bus_space_write_2(void *t, 122 bus_space_handle_t handle, 123 bus_size_t offset, u_int16_t value); 124 125static void 126rmi_pci_bus_space_write_4(void *t, 127 bus_space_handle_t handle, 128 bus_size_t offset, u_int32_t value); 129 130static void 131rmi_pci_bus_space_write_multi_1(void *t, 132 bus_space_handle_t handle, 133 bus_size_t offset, 134 const u_int8_t * addr, 135 size_t count); 136 137static void 138rmi_pci_bus_space_write_multi_2(void *t, 139 bus_space_handle_t handle, 140 bus_size_t offset, 141 const u_int16_t * addr, 142 size_t count); 143 144static void 145rmi_pci_bus_space_write_multi_4(void *t, 146 bus_space_handle_t handle, 147 bus_size_t offset, 148 const u_int32_t * addr, 149 size_t count); 150 151static void 152rmi_pci_bus_space_write_region_2(void *t, 153 bus_space_handle_t bsh, 154 bus_size_t offset, 155 const u_int16_t * addr, 156 size_t count); 157 158static void 159rmi_pci_bus_space_write_region_4(void *t, 160 bus_space_handle_t bsh, 161 bus_size_t offset, 162 const u_int32_t * addr, 163 size_t count); 164 165static void 166rmi_pci_bus_space_set_region_2(void *t, 167 bus_space_handle_t bsh, 168 bus_size_t offset, u_int16_t value, 169 size_t count); 170 171static void 172rmi_pci_bus_space_set_region_4(void *t, 173 bus_space_handle_t bsh, 174 bus_size_t offset, u_int32_t value, 175 size_t count); 176 177static void 178rmi_pci_bus_space_barrier(void *tag __unused, bus_space_handle_t bsh __unused, 179 bus_size_t offset __unused, bus_size_t len __unused, int flags); 180 181static void 182rmi_pci_bus_space_copy_region_2(void *t, 183 bus_space_handle_t bsh1, 184 bus_size_t off1, 185 bus_space_handle_t bsh2, 186 bus_size_t off2, size_t count); 187 188u_int8_t 189rmi_pci_bus_space_read_stream_1(void *t, bus_space_handle_t handle, 190 bus_size_t offset); 191 192static u_int16_t 193rmi_pci_bus_space_read_stream_2(void *t, bus_space_handle_t handle, 194 bus_size_t offset); 195 196static u_int32_t 197rmi_pci_bus_space_read_stream_4(void *t, bus_space_handle_t handle, 198 bus_size_t offset); 199 200static void 201rmi_pci_bus_space_read_multi_stream_1(void *t, 202 bus_space_handle_t handle, 203 bus_size_t offset, u_int8_t * addr, 204 size_t count); 205 206static void 207rmi_pci_bus_space_read_multi_stream_2(void *t, 208 bus_space_handle_t handle, 209 bus_size_t offset, u_int16_t * addr, 210 size_t count); 211 212static void 213rmi_pci_bus_space_read_multi_stream_4(void *t, 214 bus_space_handle_t handle, 215 bus_size_t offset, u_int32_t * addr, 216 size_t count); 217 218void 219rmi_pci_bus_space_write_stream_1(void *t, bus_space_handle_t bsh, 220 bus_size_t offset, u_int8_t value); 221 222static void 223rmi_pci_bus_space_write_stream_2(void *t, bus_space_handle_t handle, 224 bus_size_t offset, u_int16_t value); 225 226static void 227rmi_pci_bus_space_write_stream_4(void *t, bus_space_handle_t handle, 228 bus_size_t offset, u_int32_t value); 229 230static void 231rmi_pci_bus_space_write_multi_stream_1(void *t, 232 bus_space_handle_t handle, 233 bus_size_t offset, 234 const u_int8_t * addr, 235 size_t count); 236 237static void 238rmi_pci_bus_space_write_multi_stream_2(void *t, 239 bus_space_handle_t handle, 240 bus_size_t offset, 241 const u_int16_t * addr, 242 size_t count); 243 244static void 245rmi_pci_bus_space_write_multi_stream_4(void *t, 246 bus_space_handle_t handle, 247 bus_size_t offset, 248 const u_int32_t * addr, 249 size_t count); 250 251#define TODO() printf("XLR memory bus space function '%s' unimplemented\n", __func__) 252 253static struct bus_space local_rmi_pci_bus_space = { 254 /* cookie */ 255 (void *)0, 256 257 /* mapping/unmapping */ 258 rmi_pci_bus_space_map, 259 rmi_pci_bus_space_unmap, 260 rmi_pci_bus_space_subregion, 261 262 /* allocation/deallocation */ 263 NULL, 264 NULL, 265 266 /* barrier */ 267 rmi_pci_bus_space_barrier, 268 269 /* read (single) */ 270 rmi_pci_bus_space_read_1, 271 rmi_pci_bus_space_read_2, 272 rmi_pci_bus_space_read_4, 273 NULL, 274 275 /* read multiple */ 276 rmi_pci_bus_space_read_multi_1, 277 rmi_pci_bus_space_read_multi_2, 278 rmi_pci_bus_space_read_multi_4, 279 NULL, 280 281 /* read region */ 282 rmi_pci_bus_space_read_region_1, 283 rmi_pci_bus_space_read_region_2, 284 rmi_pci_bus_space_read_region_4, 285 NULL, 286 287 /* write (single) */ 288 rmi_pci_bus_space_write_1, 289 rmi_pci_bus_space_write_2, 290 rmi_pci_bus_space_write_4, 291 NULL, 292 293 /* write multiple */ 294 rmi_pci_bus_space_write_multi_1, 295 rmi_pci_bus_space_write_multi_2, 296 rmi_pci_bus_space_write_multi_4, 297 NULL, 298 299 /* write region */ 300 NULL, 301 rmi_pci_bus_space_write_region_2, 302 rmi_pci_bus_space_write_region_4, 303 NULL, 304 305 /* set multiple */ 306 NULL, 307 NULL, 308 NULL, 309 NULL, 310 311 /* set region */ 312 NULL, 313 rmi_pci_bus_space_set_region_2, 314 rmi_pci_bus_space_set_region_4, 315 NULL, 316 317 /* copy */ 318 NULL, 319 rmi_pci_bus_space_copy_region_2, 320 NULL, 321 NULL, 322 323 /* read (single) stream */ 324 rmi_pci_bus_space_read_stream_1, 325 rmi_pci_bus_space_read_stream_2, 326 rmi_pci_bus_space_read_stream_4, 327 NULL, 328 329 /* read multiple stream */ 330 rmi_pci_bus_space_read_multi_stream_1, 331 rmi_pci_bus_space_read_multi_stream_2, 332 rmi_pci_bus_space_read_multi_stream_4, 333 NULL, 334 335 /* read region stream */ 336 rmi_pci_bus_space_read_region_1, 337 rmi_pci_bus_space_read_region_2, 338 rmi_pci_bus_space_read_region_4, 339 NULL, 340 341 /* write (single) stream */ 342 rmi_pci_bus_space_write_stream_1, 343 rmi_pci_bus_space_write_stream_2, 344 rmi_pci_bus_space_write_stream_4, 345 NULL, 346 347 /* write multiple stream */ 348 rmi_pci_bus_space_write_multi_stream_1, 349 rmi_pci_bus_space_write_multi_stream_2, 350 rmi_pci_bus_space_write_multi_stream_4, 351 NULL, 352 353 /* write region stream */ 354 NULL, 355 rmi_pci_bus_space_write_region_2, 356 rmi_pci_bus_space_write_region_4, 357 NULL, 358}; 359 360/* generic bus_space tag */ 361bus_space_tag_t rmi_pci_bus_space = &local_rmi_pci_bus_space; 362 363/* 364 * Map a region of device bus space into CPU virtual address space. 365 */ 366static int 367rmi_pci_bus_space_map(void *t __unused, bus_addr_t addr, 368 bus_size_t size __unused, int flags __unused, 369 bus_space_handle_t * bshp) 370{ 371 *bshp = addr; 372 return (0); 373} 374 375/* 376 * Unmap a region of device bus space. 377 */ 378static void 379rmi_pci_bus_space_unmap(void *t __unused, bus_space_handle_t bsh __unused, 380 bus_size_t size __unused) 381{ 382} 383 384/* 385 * Get a new handle for a subregion of an already-mapped area of bus space. 386 */ 387 388static int 389rmi_pci_bus_space_subregion(void *t __unused, bus_space_handle_t bsh, 390 bus_size_t offset, bus_size_t size __unused, 391 bus_space_handle_t * nbshp) 392{ 393 *nbshp = bsh + offset; 394 return (0); 395} 396 397/* 398 * Read a 1, 2, 4, or 8 byte quantity from bus space 399 * described by tag/handle/offset. 400 */ 401 402static u_int8_t 403rmi_pci_bus_space_read_1(void *tag, bus_space_handle_t handle, 404 bus_size_t offset) 405{ 406 return (u_int8_t) (*(volatile u_int8_t *)(handle + offset)); 407} 408 409static u_int16_t 410rmi_pci_bus_space_read_2(void *tag, bus_space_handle_t handle, 411 bus_size_t offset) 412{ 413 u_int16_t value; 414 415 value = *(volatile u_int16_t *)(handle + offset); 416 return bswap16(value); 417} 418 419static u_int32_t 420rmi_pci_bus_space_read_4(void *tag, bus_space_handle_t handle, 421 bus_size_t offset) 422{ 423 uint32_t value; 424 425 value = *(volatile u_int32_t *)(handle + offset); 426 return bswap32(value); 427} 428 429/* 430 * Read `count' 1, 2, 4, or 8 byte quantities from bus space 431 * described by tag/handle/offset and copy into buffer provided. 432 */ 433static void 434rmi_pci_bus_space_read_multi_1(void *tag, bus_space_handle_t handle, 435 bus_size_t offset, u_int8_t * addr, size_t count) 436{ 437 while (count--) { 438 *addr = *(volatile u_int8_t *)(handle + offset); 439 addr++; 440 } 441} 442 443static void 444rmi_pci_bus_space_read_multi_2(void *tag, bus_space_handle_t handle, 445 bus_size_t offset, u_int16_t * addr, size_t count) 446{ 447 448 while (count--) { 449 *addr = *(volatile u_int16_t *)(handle + offset); 450 *addr = bswap16(*addr); 451 addr++; 452 } 453} 454 455static void 456rmi_pci_bus_space_read_multi_4(void *tag, bus_space_handle_t handle, 457 bus_size_t offset, u_int32_t * addr, size_t count) 458{ 459 460 while (count--) { 461 *addr = *(volatile u_int32_t *)(handle + offset); 462 *addr = bswap32(*addr); 463 addr++; 464 } 465} 466 467/* 468 * Write the 1, 2, 4, or 8 byte value `value' to bus space 469 * described by tag/handle/offset. 470 */ 471 472static void 473rmi_pci_bus_space_write_1(void *tag, bus_space_handle_t handle, 474 bus_size_t offset, u_int8_t value) 475{ 476 mips_sync(); 477 *(volatile u_int8_t *)(handle + offset) = value; 478} 479 480static void 481rmi_pci_bus_space_write_2(void *tag, bus_space_handle_t handle, 482 bus_size_t offset, u_int16_t value) 483{ 484 mips_sync(); 485 *(volatile u_int16_t *)(handle + offset) = bswap16(value); 486} 487 488 489static void 490rmi_pci_bus_space_write_4(void *tag, bus_space_handle_t handle, 491 bus_size_t offset, u_int32_t value) 492{ 493 mips_sync(); 494 *(volatile u_int32_t *)(handle + offset) = bswap32(value); 495} 496 497/* 498 * Write `count' 1, 2, 4, or 8 byte quantities from the buffer 499 * provided to bus space described by tag/handle/offset. 500 */ 501 502 503static void 504rmi_pci_bus_space_write_multi_1(void *tag, bus_space_handle_t handle, 505 bus_size_t offset, const u_int8_t * addr, size_t count) 506{ 507 mips_sync(); 508 while (count--) { 509 (*(volatile u_int8_t *)(handle + offset)) = *addr; 510 addr++; 511 } 512} 513 514static void 515rmi_pci_bus_space_write_multi_2(void *tag, bus_space_handle_t handle, 516 bus_size_t offset, const u_int16_t * addr, size_t count) 517{ 518 mips_sync(); 519 while (count--) { 520 (*(volatile u_int16_t *)(handle + offset)) = bswap16(*addr); 521 addr++; 522 } 523} 524 525static void 526rmi_pci_bus_space_write_multi_4(void *tag, bus_space_handle_t handle, 527 bus_size_t offset, const u_int32_t * addr, size_t count) 528{ 529 mips_sync(); 530 while (count--) { 531 (*(volatile u_int32_t *)(handle + offset)) = bswap32(*addr); 532 addr++; 533 } 534} 535 536/* 537 * Write `count' 1, 2, 4, or 8 byte value `val' to bus space described 538 * by tag/handle starting at `offset'. 539 */ 540 541static void 542rmi_pci_bus_space_set_region_2(void *t, bus_space_handle_t bsh, 543 bus_size_t offset, u_int16_t value, size_t count) 544{ 545 bus_addr_t addr = bsh + offset; 546 547 for (; count != 0; count--, addr += 2) 548 (*(volatile u_int16_t *)(addr)) = value; 549} 550 551static void 552rmi_pci_bus_space_set_region_4(void *t, bus_space_handle_t bsh, 553 bus_size_t offset, u_int32_t value, size_t count) 554{ 555 bus_addr_t addr = bsh + offset; 556 557 for (; count != 0; count--, addr += 4) 558 (*(volatile u_int32_t *)(addr)) = value; 559} 560 561 562/* 563 * Copy `count' 1, 2, 4, or 8 byte values from bus space starting 564 * at tag/bsh1/off1 to bus space starting at tag/bsh2/off2. 565 */ 566static void 567rmi_pci_bus_space_copy_region_2(void *t, bus_space_handle_t bsh1, 568 bus_size_t off1, bus_space_handle_t bsh2, 569 bus_size_t off2, size_t count) 570{ 571 TODO(); 572} 573 574/* 575 * Read `count' 1, 2, 4, or 8 byte quantities from bus space 576 * described by tag/handle/offset and copy into buffer provided. 577 */ 578 579u_int8_t 580rmi_pci_bus_space_read_stream_1(void *t, bus_space_handle_t handle, 581 bus_size_t offset) 582{ 583 584 return *((volatile u_int8_t *)(handle + offset)); 585} 586 587 588static u_int16_t 589rmi_pci_bus_space_read_stream_2(void *t, bus_space_handle_t handle, 590 bus_size_t offset) 591{ 592 return *(volatile u_int16_t *)(handle + offset); 593} 594 595 596static u_int32_t 597rmi_pci_bus_space_read_stream_4(void *t, bus_space_handle_t handle, 598 bus_size_t offset) 599{ 600 return (*(volatile u_int32_t *)(handle + offset)); 601} 602 603 604static void 605rmi_pci_bus_space_read_multi_stream_1(void *tag, bus_space_handle_t handle, 606 bus_size_t offset, u_int8_t * addr, size_t count) 607{ 608 while (count--) { 609 *addr = (*(volatile u_int8_t *)(handle + offset)); 610 addr++; 611 } 612} 613 614static void 615rmi_pci_bus_space_read_multi_stream_2(void *tag, bus_space_handle_t handle, 616 bus_size_t offset, u_int16_t * addr, size_t count) 617{ 618 while (count--) { 619 *addr = (*(volatile u_int16_t *)(handle + offset)); 620 addr++; 621 } 622} 623 624static void 625rmi_pci_bus_space_read_multi_stream_4(void *tag, bus_space_handle_t handle, 626 bus_size_t offset, u_int32_t * addr, size_t count) 627{ 628 while (count--) { 629 *addr = (*(volatile u_int32_t *)(handle + offset)); 630 addr++; 631 } 632} 633 634 635 636/* 637 * Read `count' 1, 2, 4, or 8 byte quantities from bus space 638 * described by tag/handle and starting at `offset' and copy into 639 * buffer provided. 640 */ 641void 642rmi_pci_bus_space_read_region_1(void *t, bus_space_handle_t bsh, 643 bus_size_t offset, u_int8_t * addr, size_t count) 644{ 645 bus_addr_t baddr = bsh + offset; 646 647 while (count--) { 648 *addr++ = (*(volatile u_int8_t *)(baddr)); 649 baddr += 1; 650 } 651} 652 653void 654rmi_pci_bus_space_read_region_2(void *t, bus_space_handle_t bsh, 655 bus_size_t offset, u_int16_t * addr, size_t count) 656{ 657 bus_addr_t baddr = bsh + offset; 658 659 while (count--) { 660 *addr++ = (*(volatile u_int16_t *)(baddr)); 661 baddr += 2; 662 } 663} 664 665void 666rmi_pci_bus_space_read_region_4(void *t, bus_space_handle_t bsh, 667 bus_size_t offset, u_int32_t * addr, size_t count) 668{ 669 bus_addr_t baddr = bsh + offset; 670 671 while (count--) { 672 *addr++ = (*(volatile u_int32_t *)(baddr)); 673 baddr += 4; 674 } 675} 676 677 678void 679rmi_pci_bus_space_write_stream_1(void *t, bus_space_handle_t handle, 680 bus_size_t offset, u_int8_t value) 681{ 682 mips_sync(); 683 *(volatile u_int8_t *)(handle + offset) = value; 684} 685 686static void 687rmi_pci_bus_space_write_stream_2(void *t, bus_space_handle_t handle, 688 bus_size_t offset, u_int16_t value) 689{ 690 mips_sync(); 691 *(volatile u_int16_t *)(handle + offset) = value; 692} 693 694 695static void 696rmi_pci_bus_space_write_stream_4(void *t, bus_space_handle_t handle, 697 bus_size_t offset, u_int32_t value) 698{ 699 mips_sync(); 700 *(volatile u_int32_t *)(handle + offset) = value; 701} 702 703 704static void 705rmi_pci_bus_space_write_multi_stream_1(void *tag, bus_space_handle_t handle, 706 bus_size_t offset, const u_int8_t * addr, size_t count) 707{ 708 mips_sync(); 709 while (count--) { 710 (*(volatile u_int8_t *)(handle + offset)) = *addr; 711 addr++; 712 } 713} 714 715static void 716rmi_pci_bus_space_write_multi_stream_2(void *tag, bus_space_handle_t handle, 717 bus_size_t offset, const u_int16_t * addr, size_t count) 718{ 719 mips_sync(); 720 while (count--) { 721 (*(volatile u_int16_t *)(handle + offset)) = *addr; 722 addr++; 723 } 724} 725 726static void 727rmi_pci_bus_space_write_multi_stream_4(void *tag, bus_space_handle_t handle, 728 bus_size_t offset, const u_int32_t * addr, size_t count) 729{ 730 mips_sync(); 731 while (count--) { 732 (*(volatile u_int32_t *)(handle + offset)) = *addr; 733 addr++; 734 } 735} 736 737void 738rmi_pci_bus_space_write_region_2(void *t, 739 bus_space_handle_t bsh, 740 bus_size_t offset, 741 const u_int16_t * addr, 742 size_t count) 743{ 744 bus_addr_t baddr = (bus_addr_t) bsh + offset; 745 746 while (count--) { 747 (*(volatile u_int16_t *)(baddr)) = *addr; 748 addr++; 749 baddr += 2; 750 } 751} 752 753void 754rmi_pci_bus_space_write_region_4(void *t, bus_space_handle_t bsh, 755 bus_size_t offset, const u_int32_t * addr, size_t count) 756{ 757 bus_addr_t baddr = bsh + offset; 758 759 while (count--) { 760 (*(volatile u_int32_t *)(baddr)) = *addr; 761 addr++; 762 baddr += 4; 763 } 764} 765 766static void 767rmi_pci_bus_space_barrier(void *tag __unused, bus_space_handle_t bsh __unused, 768 bus_size_t offset __unused, bus_size_t len __unused, int flags) 769{ 770 771} 772