1 /* 2 * THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. 3 */ 4 5 /* $OpenBSD: busop.c,v 1.2 2010/04/04 12:50:00 miod Exp $ */ 6 7 /* 8 * Copyright (c) 2003 Henric Jungheim 9 * All rights reserved. 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. The name of the author may not be used to endorse or promote products 20 * derived from this software without specific prior written permission. 21 * 22 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 23 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 24 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 25 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 26 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 27 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 31 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 34 #include <sys/param.h> 35 #include <sys/systm.h> 36 #include <sys/kernel.h> 37 38 #include <machine/bus.h> 39 40 /* 41 * Implementing u_int16_t 42 */ 43 44 45 void 46 bus_space_read_multi_2(bus_space_tag_t t, bus_space_handle_t h, 47 bus_size_t o, 48 u_int16_t *a, bus_size_t c) 49 { 50 u_int16_t *p = a; 51 52 BUS_SPACE_ASSERT(t, h, o, 2); 53 BUS_SPACE_TRACE(t, h, 54 ("bsrm2(%llx + %llx, %x, %x) ->", (long long)h.bh_ptr, 55 (long long)o, t->asi, c)); 56 57 ++c; /* Looping on "--c" is slightly faster than on "c--" */ 58 asi_set(t->asi); 59 while (--c > 0) { 60 u_int16_t r = lduha_asi(h.bh_ptr + o); 61 BUS_SPACE_TRACE(t, h, (" %4.4x", r)); 62 *p++ = r; 63 } 64 65 BUS_SPACE_TRACE(t, h, ("\n")); 66 } 67 68 void 69 bus_space_write_multi_2(bus_space_tag_t t, bus_space_handle_t h, 70 bus_size_t o, 71 const u_int16_t *a, bus_size_t c) 72 { 73 const u_int16_t *p = a; 74 75 BUS_SPACE_ASSERT(t, h, o, 2); 76 BUS_SPACE_TRACE(t, h, 77 ("bswm2(%llx + %llx, %x, %x) <-", (long long)h.bh_ptr, 78 (long long)o, t->asi, c)); 79 80 ++c; /* Looping on "--c" is slightly faster than on "c--" */ 81 asi_set(t->asi); 82 while (--c > 0) { 83 u_int16_t r = *p++; 84 BUS_SPACE_TRACE(t, h, (" %4.4x", r)); 85 stha_asi(h.bh_ptr + o, r); 86 } 87 88 BUS_SPACE_TRACE(t, h, ("\n")); 89 } 90 91 void 92 bus_space_set_multi_2(bus_space_tag_t t, bus_space_handle_t h, 93 bus_size_t o, u_int16_t v, 94 bus_size_t c) 95 { 96 BUS_SPACE_ASSERT(t, h, o, 2); 97 BUS_SPACE_TRACE(t, h, 98 ("bssm2(%llx + %llx, %x, %x) <- %4.4x\n", (long long)h.bh_ptr, 99 (long long)o, t->asi, c, v)); 100 101 ++c; /* Looping on "--c" is slightly faster than on "c--" */ 102 asi_set(t->asi); 103 while (--c > 0) 104 stha_asi(h.bh_ptr + o, v); 105 } 106 107 void 108 bus_space_read_region_2(bus_space_tag_t t, bus_space_handle_t h, 109 bus_size_t o, 110 u_int16_t *a, bus_size_t c) 111 { 112 u_int16_t *p = a; 113 paddr_t ptr = h.bh_ptr + o; 114 115 BUS_SPACE_ASSERT(t, h, o, 2); 116 BUS_SPACE_TRACE(t, h, 117 ("bsrr2(%llx + %llx, %x, %x) <- \n", (long long)h.bh_ptr, 118 (long long)o, t->asi, c)); 119 120 asi_set(t->asi); 121 for (; c; p++, c--, ptr += 2) { 122 u_int16_t r = lduha_asi(ptr); 123 BUS_SPACE_TRACE(t, h, (" %4.4x", r)); 124 *p = r; 125 } 126 127 BUS_SPACE_TRACE(t, h, ("\n")); 128 } 129 130 void 131 bus_space_write_region_2(bus_space_tag_t t, bus_space_handle_t h, 132 bus_size_t o, 133 const u_int16_t *a, bus_size_t c) 134 { 135 const u_int16_t *p = a; 136 paddr_t ptr = h.bh_ptr + o; 137 138 BUS_SPACE_ASSERT(t, h, o, 2); 139 BUS_SPACE_TRACE(t, h, 140 ("bswr2(%llx + %llx, %x, %x) <-", (long long)h.bh_ptr, 141 (long long)o, t->asi, c)); 142 143 asi_set(t->asi); 144 for (; c; p++, c--, ptr += 2) { 145 u_int16_t r = *p; 146 BUS_SPACE_TRACE(t, h, (" %4.4x", r)); 147 stha_asi(ptr, r); 148 } 149 150 BUS_SPACE_TRACE(t, h, ("\n")); 151 } 152 153 void 154 bus_space_set_region_2(bus_space_tag_t t, bus_space_handle_t h, 155 bus_size_t o, u_int16_t v, 156 bus_size_t c) 157 { 158 paddr_t ptr = h.bh_ptr + o; 159 160 BUS_SPACE_ASSERT(t, h, o, 2); 161 BUS_SPACE_TRACE(t, h, 162 ("bssr2(%llx + %llx, %x, %x) <- %4.4x\n", (long long)h.bh_ptr, 163 (long long)o, t->asi, c, v)); 164 165 asi_set(t->asi); 166 for (; c; c--, ptr += 2) 167 stha_asi(ptr, v); 168 } 169 170 void 171 bus_space_copy_2(bus_space_tag_t t, bus_space_handle_t h1, 172 bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, 173 bus_size_t c) 174 { 175 paddr_t ptr1 = h1.bh_ptr + o1; 176 paddr_t ptr2 = h2.bh_ptr + o2; 177 178 BUS_SPACE_ASSERT(t, h1, o2, 2); 179 BUS_SPACE_ASSERT(t, h2, o2, 2); 180 BUS_SPACE_TRACE(t, h1, 181 ("bscr2(%llx + %llx, %llx + %llx, %x, %x) <-> \n", 182 (long long)h1.bh_ptr, (long long)o1, 183 (long long)h2.bh_ptr, (long long)o2, 184 t->asi, c)); 185 186 asi_set(t->asi); 187 for (; c; c--, ptr1 += 2, ptr2 += 2) { 188 u_int16_t r = lduha_asi(ptr2); 189 BUS_SPACE_TRACE(t, h1, (" %4.4x", r)); 190 stha_asi(ptr1, r); 191 } 192 BUS_SPACE_TRACE(t, h1, ("\n")); 193 } 194 195 196 /* 197 * Implementing u_int32_t 198 */ 199 200 201 void 202 bus_space_read_multi_4(bus_space_tag_t t, bus_space_handle_t h, 203 bus_size_t o, 204 u_int32_t *a, bus_size_t c) 205 { 206 u_int32_t *p = a; 207 208 BUS_SPACE_ASSERT(t, h, o, 4); 209 BUS_SPACE_TRACE(t, h, 210 ("bsrm4(%llx + %llx, %x, %x) ->", (long long)h.bh_ptr, 211 (long long)o, t->asi, c)); 212 213 ++c; /* Looping on "--c" is slightly faster than on "c--" */ 214 asi_set(t->asi); 215 while (--c > 0) { 216 u_int32_t r = lduwa_asi(h.bh_ptr + o); 217 BUS_SPACE_TRACE(t, h, (" %8.8x", r)); 218 *p++ = r; 219 } 220 221 BUS_SPACE_TRACE(t, h, ("\n")); 222 } 223 224 void 225 bus_space_write_multi_4(bus_space_tag_t t, bus_space_handle_t h, 226 bus_size_t o, 227 const u_int32_t *a, bus_size_t c) 228 { 229 const u_int32_t *p = a; 230 231 BUS_SPACE_ASSERT(t, h, o, 4); 232 BUS_SPACE_TRACE(t, h, 233 ("bswm4(%llx + %llx, %x, %x) <-", (long long)h.bh_ptr, 234 (long long)o, t->asi, c)); 235 236 ++c; /* Looping on "--c" is slightly faster than on "c--" */ 237 asi_set(t->asi); 238 while (--c > 0) { 239 u_int32_t r = *p++; 240 BUS_SPACE_TRACE(t, h, (" %8.8x", r)); 241 stwa_asi(h.bh_ptr + o, r); 242 } 243 244 BUS_SPACE_TRACE(t, h, ("\n")); 245 } 246 247 void 248 bus_space_set_multi_4(bus_space_tag_t t, bus_space_handle_t h, 249 bus_size_t o, u_int32_t v, 250 bus_size_t c) 251 { 252 BUS_SPACE_ASSERT(t, h, o, 4); 253 BUS_SPACE_TRACE(t, h, 254 ("bssm4(%llx + %llx, %x, %x) <- %8.8x\n", (long long)h.bh_ptr, 255 (long long)o, t->asi, c, v)); 256 257 ++c; /* Looping on "--c" is slightly faster than on "c--" */ 258 asi_set(t->asi); 259 while (--c > 0) 260 stwa_asi(h.bh_ptr + o, v); 261 } 262 263 void 264 bus_space_read_region_4(bus_space_tag_t t, bus_space_handle_t h, 265 bus_size_t o, 266 u_int32_t *a, bus_size_t c) 267 { 268 u_int32_t *p = a; 269 paddr_t ptr = h.bh_ptr + o; 270 271 BUS_SPACE_ASSERT(t, h, o, 4); 272 BUS_SPACE_TRACE(t, h, 273 ("bsrr4(%llx + %llx, %x, %x) <- \n", (long long)h.bh_ptr, 274 (long long)o, t->asi, c)); 275 276 asi_set(t->asi); 277 for (; c; p++, c--, ptr += 4) { 278 u_int32_t r = lduwa_asi(ptr); 279 BUS_SPACE_TRACE(t, h, (" %8.8x", r)); 280 *p = r; 281 } 282 283 BUS_SPACE_TRACE(t, h, ("\n")); 284 } 285 286 void 287 bus_space_write_region_4(bus_space_tag_t t, bus_space_handle_t h, 288 bus_size_t o, 289 const u_int32_t *a, bus_size_t c) 290 { 291 const u_int32_t *p = a; 292 paddr_t ptr = h.bh_ptr + o; 293 294 BUS_SPACE_ASSERT(t, h, o, 4); 295 BUS_SPACE_TRACE(t, h, 296 ("bswr4(%llx + %llx, %x, %x) <-", (long long)h.bh_ptr, 297 (long long)o, t->asi, c)); 298 299 asi_set(t->asi); 300 for (; c; p++, c--, ptr += 4) { 301 u_int32_t r = *p; 302 BUS_SPACE_TRACE(t, h, (" %8.8x", r)); 303 stwa_asi(ptr, r); 304 } 305 306 BUS_SPACE_TRACE(t, h, ("\n")); 307 } 308 309 void 310 bus_space_set_region_4(bus_space_tag_t t, bus_space_handle_t h, 311 bus_size_t o, u_int32_t v, 312 bus_size_t c) 313 { 314 paddr_t ptr = h.bh_ptr + o; 315 316 BUS_SPACE_ASSERT(t, h, o, 4); 317 BUS_SPACE_TRACE(t, h, 318 ("bssr4(%llx + %llx, %x, %x) <- %8.8x\n", (long long)h.bh_ptr, 319 (long long)o, t->asi, c, v)); 320 321 asi_set(t->asi); 322 for (; c; c--, ptr += 4) 323 stwa_asi(ptr, v); 324 } 325 326 void 327 bus_space_copy_4(bus_space_tag_t t, bus_space_handle_t h1, 328 bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, 329 bus_size_t c) 330 { 331 paddr_t ptr1 = h1.bh_ptr + o1; 332 paddr_t ptr2 = h2.bh_ptr + o2; 333 334 BUS_SPACE_ASSERT(t, h1, o2, 4); 335 BUS_SPACE_ASSERT(t, h2, o2, 4); 336 BUS_SPACE_TRACE(t, h1, 337 ("bscr4(%llx + %llx, %llx + %llx, %x, %x) <-> \n", 338 (long long)h1.bh_ptr, (long long)o1, 339 (long long)h2.bh_ptr, (long long)o2, 340 t->asi, c)); 341 342 asi_set(t->asi); 343 for (; c; c--, ptr1 += 4, ptr2 += 4) { 344 u_int32_t r = lduwa_asi(ptr2); 345 BUS_SPACE_TRACE(t, h1, (" %8.8x", r)); 346 stwa_asi(ptr1, r); 347 } 348 BUS_SPACE_TRACE(t, h1, ("\n")); 349 } 350 351 352 /* 353 * Implementing u_int64_t 354 */ 355 356 357 void 358 bus_space_read_multi_8(bus_space_tag_t t, bus_space_handle_t h, 359 bus_size_t o, 360 u_int64_t *a, bus_size_t c) 361 { 362 u_int64_t *p = a; 363 364 BUS_SPACE_ASSERT(t, h, o, 8); 365 BUS_SPACE_TRACE(t, h, 366 ("bsrm8(%llx + %llx, %x, %x) ->", (long long)h.bh_ptr, 367 (long long)o, t->asi, c)); 368 369 ++c; /* Looping on "--c" is slightly faster than on "c--" */ 370 asi_set(t->asi); 371 while (--c > 0) { 372 u_int64_t r = ldxa_asi(h.bh_ptr + o); 373 BUS_SPACE_TRACE(t, h, (" %16.16llx", r)); 374 *p++ = r; 375 } 376 377 BUS_SPACE_TRACE(t, h, ("\n")); 378 } 379 380 void 381 bus_space_write_multi_8(bus_space_tag_t t, bus_space_handle_t h, 382 bus_size_t o, 383 const u_int64_t *a, bus_size_t c) 384 { 385 const u_int64_t *p = a; 386 387 BUS_SPACE_ASSERT(t, h, o, 8); 388 BUS_SPACE_TRACE(t, h, 389 ("bswm8(%llx + %llx, %x, %x) <-", (long long)h.bh_ptr, 390 (long long)o, t->asi, c)); 391 392 ++c; /* Looping on "--c" is slightly faster than on "c--" */ 393 asi_set(t->asi); 394 while (--c > 0) { 395 u_int64_t r = *p++; 396 BUS_SPACE_TRACE(t, h, (" %16.16llx", r)); 397 stxa_asi(h.bh_ptr + o, r); 398 } 399 400 BUS_SPACE_TRACE(t, h, ("\n")); 401 } 402 403 void 404 bus_space_set_multi_8(bus_space_tag_t t, bus_space_handle_t h, 405 bus_size_t o, u_int64_t v, 406 bus_size_t c) 407 { 408 BUS_SPACE_ASSERT(t, h, o, 8); 409 BUS_SPACE_TRACE(t, h, 410 ("bssm8(%llx + %llx, %x, %x) <- %16.16llx\n", (long long)h.bh_ptr, 411 (long long)o, t->asi, c, v)); 412 413 ++c; /* Looping on "--c" is slightly faster than on "c--" */ 414 asi_set(t->asi); 415 while (--c > 0) 416 stxa_asi(h.bh_ptr + o, v); 417 } 418 419 void 420 bus_space_read_region_8(bus_space_tag_t t, bus_space_handle_t h, 421 bus_size_t o, 422 u_int64_t *a, bus_size_t c) 423 { 424 u_int64_t *p = a; 425 paddr_t ptr = h.bh_ptr + o; 426 427 BUS_SPACE_ASSERT(t, h, o, 8); 428 BUS_SPACE_TRACE(t, h, 429 ("bsrr8(%llx + %llx, %x, %x) <- \n", (long long)h.bh_ptr, 430 (long long)o, t->asi, c)); 431 432 asi_set(t->asi); 433 for (; c; p++, c--, ptr += 8) { 434 u_int64_t r = ldxa_asi(ptr); 435 BUS_SPACE_TRACE(t, h, (" %16.16llx", r)); 436 *p = r; 437 } 438 439 BUS_SPACE_TRACE(t, h, ("\n")); 440 } 441 442 void 443 bus_space_write_region_8(bus_space_tag_t t, bus_space_handle_t h, 444 bus_size_t o, 445 const u_int64_t *a, bus_size_t c) 446 { 447 const u_int64_t *p = a; 448 paddr_t ptr = h.bh_ptr + o; 449 450 BUS_SPACE_ASSERT(t, h, o, 8); 451 BUS_SPACE_TRACE(t, h, 452 ("bswr8(%llx + %llx, %x, %x) <-", (long long)h.bh_ptr, 453 (long long)o, t->asi, c)); 454 455 asi_set(t->asi); 456 for (; c; p++, c--, ptr += 8) { 457 u_int64_t r = *p; 458 BUS_SPACE_TRACE(t, h, (" %16.16llx", r)); 459 stxa_asi(ptr, r); 460 } 461 462 BUS_SPACE_TRACE(t, h, ("\n")); 463 } 464 465 void 466 bus_space_set_region_8(bus_space_tag_t t, bus_space_handle_t h, 467 bus_size_t o, u_int64_t v, 468 bus_size_t c) 469 { 470 paddr_t ptr = h.bh_ptr + o; 471 472 BUS_SPACE_ASSERT(t, h, o, 8); 473 BUS_SPACE_TRACE(t, h, 474 ("bssr8(%llx + %llx, %x, %x) <- %16.16llx\n", (long long)h.bh_ptr, 475 (long long)o, t->asi, c, v)); 476 477 asi_set(t->asi); 478 for (; c; c--, ptr += 8) 479 stxa_asi(ptr, v); 480 } 481 482 void 483 bus_space_copy_8(bus_space_tag_t t, bus_space_handle_t h1, 484 bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, 485 bus_size_t c) 486 { 487 paddr_t ptr1 = h1.bh_ptr + o1; 488 paddr_t ptr2 = h2.bh_ptr + o2; 489 490 BUS_SPACE_ASSERT(t, h1, o2, 8); 491 BUS_SPACE_ASSERT(t, h2, o2, 8); 492 BUS_SPACE_TRACE(t, h1, 493 ("bscr8(%llx + %llx, %llx + %llx, %x, %x) <-> \n", 494 (long long)h1.bh_ptr, (long long)o1, 495 (long long)h2.bh_ptr, (long long)o2, 496 t->asi, c)); 497 498 asi_set(t->asi); 499 for (; c; c--, ptr1 += 8, ptr2 += 8) { 500 u_int64_t r = ldxa_asi(ptr2); 501 BUS_SPACE_TRACE(t, h1, (" %16.16llx", r)); 502 stxa_asi(ptr1, r); 503 } 504 BUS_SPACE_TRACE(t, h1, ("\n")); 505 } 506 507 508 /* 509 * Implementing u_int8_t 510 */ 511 512 513 void 514 bus_space_read_multi_1(bus_space_tag_t t, bus_space_handle_t h, 515 bus_size_t o, 516 u_int8_t *a, bus_size_t c) 517 { 518 u_int8_t *p = a; 519 520 BUS_SPACE_ASSERT(t, h, o, 1); 521 BUS_SPACE_TRACE(t, h, 522 ("bsrm1(%llx + %llx, %x, %x) ->", (long long)h.bh_ptr, 523 (long long)o, t->asi, c)); 524 525 ++c; /* Looping on "--c" is slightly faster than on "c--" */ 526 asi_set(t->asi); 527 while (--c > 0) { 528 u_int8_t r = lduba_asi(h.bh_ptr + o); 529 BUS_SPACE_TRACE(t, h, (" %2.2x", r)); 530 *p++ = r; 531 } 532 533 BUS_SPACE_TRACE(t, h, ("\n")); 534 } 535 536 void 537 bus_space_write_multi_1(bus_space_tag_t t, bus_space_handle_t h, 538 bus_size_t o, 539 const u_int8_t *a, bus_size_t c) 540 { 541 const u_int8_t *p = a; 542 543 BUS_SPACE_ASSERT(t, h, o, 1); 544 BUS_SPACE_TRACE(t, h, 545 ("bswm1(%llx + %llx, %x, %x) <-", (long long)h.bh_ptr, 546 (long long)o, t->asi, c)); 547 548 ++c; /* Looping on "--c" is slightly faster than on "c--" */ 549 asi_set(t->asi); 550 while (--c > 0) { 551 u_int8_t r = *p++; 552 BUS_SPACE_TRACE(t, h, (" %2.2x", r)); 553 stba_asi(h.bh_ptr + o, r); 554 } 555 556 BUS_SPACE_TRACE(t, h, ("\n")); 557 } 558 559 void 560 bus_space_set_multi_1(bus_space_tag_t t, bus_space_handle_t h, 561 bus_size_t o, u_int8_t v, 562 bus_size_t c) 563 { 564 BUS_SPACE_ASSERT(t, h, o, 1); 565 BUS_SPACE_TRACE(t, h, 566 ("bssm1(%llx + %llx, %x, %x) <- %2.2x\n", (long long)h.bh_ptr, 567 (long long)o, t->asi, c, v)); 568 569 ++c; /* Looping on "--c" is slightly faster than on "c--" */ 570 asi_set(t->asi); 571 while (--c > 0) 572 stba_asi(h.bh_ptr + o, v); 573 } 574 575 void 576 bus_space_read_region_1(bus_space_tag_t t, bus_space_handle_t h, 577 bus_size_t o, 578 u_int8_t *a, bus_size_t c) 579 { 580 u_int8_t *p = a; 581 paddr_t ptr = h.bh_ptr + o; 582 583 BUS_SPACE_ASSERT(t, h, o, 1); 584 BUS_SPACE_TRACE(t, h, 585 ("bsrr1(%llx + %llx, %x, %x) <- \n", (long long)h.bh_ptr, 586 (long long)o, t->asi, c)); 587 588 asi_set(t->asi); 589 for (; c; p++, c--, ptr += 1) { 590 u_int8_t r = lduba_asi(ptr); 591 BUS_SPACE_TRACE(t, h, (" %2.2x", r)); 592 *p = r; 593 } 594 595 BUS_SPACE_TRACE(t, h, ("\n")); 596 } 597 598 void 599 bus_space_write_region_1(bus_space_tag_t t, bus_space_handle_t h, 600 bus_size_t o, 601 const u_int8_t *a, bus_size_t c) 602 { 603 const u_int8_t *p = a; 604 paddr_t ptr = h.bh_ptr + o; 605 606 BUS_SPACE_ASSERT(t, h, o, 1); 607 BUS_SPACE_TRACE(t, h, 608 ("bswr1(%llx + %llx, %x, %x) <-", (long long)h.bh_ptr, 609 (long long)o, t->asi, c)); 610 611 asi_set(t->asi); 612 for (; c; p++, c--, ptr += 1) { 613 u_int8_t r = *p; 614 BUS_SPACE_TRACE(t, h, (" %2.2x", r)); 615 stba_asi(ptr, r); 616 } 617 618 BUS_SPACE_TRACE(t, h, ("\n")); 619 } 620 621 void 622 bus_space_set_region_1(bus_space_tag_t t, bus_space_handle_t h, 623 bus_size_t o, u_int8_t v, 624 bus_size_t c) 625 { 626 paddr_t ptr = h.bh_ptr + o; 627 628 BUS_SPACE_ASSERT(t, h, o, 1); 629 BUS_SPACE_TRACE(t, h, 630 ("bssr1(%llx + %llx, %x, %x) <- %2.2x\n", (long long)h.bh_ptr, 631 (long long)o, t->asi, c, v)); 632 633 asi_set(t->asi); 634 for (; c; c--, ptr += 1) 635 stba_asi(ptr, v); 636 } 637 638 void 639 bus_space_copy_1(bus_space_tag_t t, bus_space_handle_t h1, 640 bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, 641 bus_size_t c) 642 { 643 paddr_t ptr1 = h1.bh_ptr + o1; 644 paddr_t ptr2 = h2.bh_ptr + o2; 645 646 BUS_SPACE_ASSERT(t, h1, o2, 1); 647 BUS_SPACE_ASSERT(t, h2, o2, 1); 648 BUS_SPACE_TRACE(t, h1, 649 ("bscr1(%llx + %llx, %llx + %llx, %x, %x) <-> \n", 650 (long long)h1.bh_ptr, (long long)o1, 651 (long long)h2.bh_ptr, (long long)o2, 652 t->asi, c)); 653 654 asi_set(t->asi); 655 for (; c; c--, ptr1 += 1, ptr2 += 1) { 656 u_int8_t r = lduba_asi(ptr2); 657 BUS_SPACE_TRACE(t, h1, (" %2.2x", r)); 658 stba_asi(ptr1, r); 659 } 660 BUS_SPACE_TRACE(t, h1, ("\n")); 661 } 662 663 664 /* 665 * Implementing u_int16_t 666 */ 667 668 669 void 670 bus_space_read_raw_multi_2(bus_space_tag_t t, bus_space_handle_t h, 671 bus_size_t o, 672 void *a, size_t c) 673 { 674 u_int16_t *p = a; 675 676 BUS_SPACE_ASSERT(t, h, o, 2); 677 BUS_SPACE_TRACE(t, h, 678 ("bsrm2(%llx + %llx, %x, %x) ->", (long long)h.bh_ptr, 679 (long long)o, t->sasi, c)); 680 c /= sizeof(u_int16_t); 681 682 ++c; /* Looping on "--c" is slightly faster than on "c--" */ 683 asi_set(t->sasi); 684 while (--c > 0) { 685 u_int16_t r = lduha_asi(h.bh_ptr + o); 686 BUS_SPACE_TRACE(t, h, (" %4.4x", r)); 687 *p++ = r; 688 } 689 690 BUS_SPACE_TRACE(t, h, ("\n")); 691 } 692 693 void 694 bus_space_write_raw_multi_2(bus_space_tag_t t, bus_space_handle_t h, 695 bus_size_t o, 696 const void *a, size_t c) 697 { 698 const u_int16_t *p = a; 699 700 BUS_SPACE_ASSERT(t, h, o, 2); 701 BUS_SPACE_TRACE(t, h, 702 ("bswm2(%llx + %llx, %x, %x) <-", (long long)h.bh_ptr, 703 (long long)o, t->sasi, c)); 704 c /= sizeof(u_int16_t); 705 706 ++c; /* Looping on "--c" is slightly faster than on "c--" */ 707 asi_set(t->sasi); 708 while (--c > 0) { 709 u_int16_t r = *p++; 710 BUS_SPACE_TRACE(t, h, (" %4.4x", r)); 711 stha_asi(h.bh_ptr + o, r); 712 } 713 714 BUS_SPACE_TRACE(t, h, ("\n")); 715 } 716 717 void 718 bus_space_set_raw_multi_2(bus_space_tag_t t, bus_space_handle_t h, 719 bus_size_t o, u_int16_t v, 720 size_t c) 721 { 722 BUS_SPACE_ASSERT(t, h, o, 2); 723 BUS_SPACE_TRACE(t, h, 724 ("bssm2(%llx + %llx, %x, %x) <- %4.4x\n", (long long)h.bh_ptr, 725 (long long)o, t->sasi, c, v)); 726 c /= sizeof(u_int16_t); 727 728 ++c; /* Looping on "--c" is slightly faster than on "c--" */ 729 asi_set(t->sasi); 730 while (--c > 0) 731 stha_asi(h.bh_ptr + o, v); 732 } 733 734 void 735 bus_space_read_raw_region_2(bus_space_tag_t t, bus_space_handle_t h, 736 bus_size_t o, 737 void *a, size_t c) 738 { 739 u_int16_t *p = a; 740 paddr_t ptr = h.bh_ptr + o; 741 742 BUS_SPACE_ASSERT(t, h, o, 2); 743 BUS_SPACE_TRACE(t, h, 744 ("bsrr2(%llx + %llx, %x, %x) <- \n", (long long)h.bh_ptr, 745 (long long)o, t->sasi, c)); 746 c /= sizeof(u_int16_t); 747 748 asi_set(t->sasi); 749 for (; c; p++, c--, ptr += 2) { 750 u_int16_t r = lduha_asi(ptr); 751 BUS_SPACE_TRACE(t, h, (" %4.4x", r)); 752 *p = r; 753 } 754 755 BUS_SPACE_TRACE(t, h, ("\n")); 756 } 757 758 void 759 bus_space_write_raw_region_2(bus_space_tag_t t, bus_space_handle_t h, 760 bus_size_t o, 761 const void *a, size_t c) 762 { 763 const u_int16_t *p = a; 764 paddr_t ptr = h.bh_ptr + o; 765 766 BUS_SPACE_ASSERT(t, h, o, 2); 767 BUS_SPACE_TRACE(t, h, 768 ("bswr2(%llx + %llx, %x, %x) <-", (long long)h.bh_ptr, 769 (long long)o, t->sasi, c)); 770 c /= sizeof(u_int16_t); 771 772 asi_set(t->sasi); 773 for (; c; p++, c--, ptr += 2) { 774 u_int16_t r = *p; 775 BUS_SPACE_TRACE(t, h, (" %4.4x", r)); 776 stha_asi(ptr, r); 777 } 778 779 BUS_SPACE_TRACE(t, h, ("\n")); 780 } 781 782 void 783 bus_space_set_raw_region_2(bus_space_tag_t t, bus_space_handle_t h, 784 bus_size_t o, u_int16_t v, 785 size_t c) 786 { 787 paddr_t ptr = h.bh_ptr + o; 788 789 BUS_SPACE_ASSERT(t, h, o, 2); 790 BUS_SPACE_TRACE(t, h, 791 ("bssr2(%llx + %llx, %x, %x) <- %4.4x\n", (long long)h.bh_ptr, 792 (long long)o, t->sasi, c, v)); 793 c /= sizeof(u_int16_t); 794 795 asi_set(t->sasi); 796 for (; c; c--, ptr += 2) 797 stha_asi(ptr, v); 798 } 799 800 801 802 /* 803 * Implementing u_int32_t 804 */ 805 806 807 void 808 bus_space_read_raw_multi_4(bus_space_tag_t t, bus_space_handle_t h, 809 bus_size_t o, 810 void *a, size_t c) 811 { 812 u_int32_t *p = a; 813 814 BUS_SPACE_ASSERT(t, h, o, 4); 815 BUS_SPACE_TRACE(t, h, 816 ("bsrm4(%llx + %llx, %x, %x) ->", (long long)h.bh_ptr, 817 (long long)o, t->sasi, c)); 818 c /= sizeof(u_int32_t); 819 820 ++c; /* Looping on "--c" is slightly faster than on "c--" */ 821 asi_set(t->sasi); 822 while (--c > 0) { 823 u_int32_t r = lduwa_asi(h.bh_ptr + o); 824 BUS_SPACE_TRACE(t, h, (" %8.8x", r)); 825 *p++ = r; 826 } 827 828 BUS_SPACE_TRACE(t, h, ("\n")); 829 } 830 831 void 832 bus_space_write_raw_multi_4(bus_space_tag_t t, bus_space_handle_t h, 833 bus_size_t o, 834 const void *a, size_t c) 835 { 836 const u_int32_t *p = a; 837 838 BUS_SPACE_ASSERT(t, h, o, 4); 839 BUS_SPACE_TRACE(t, h, 840 ("bswm4(%llx + %llx, %x, %x) <-", (long long)h.bh_ptr, 841 (long long)o, t->sasi, c)); 842 c /= sizeof(u_int32_t); 843 844 ++c; /* Looping on "--c" is slightly faster than on "c--" */ 845 asi_set(t->sasi); 846 while (--c > 0) { 847 u_int32_t r = *p++; 848 BUS_SPACE_TRACE(t, h, (" %8.8x", r)); 849 stwa_asi(h.bh_ptr + o, r); 850 } 851 852 BUS_SPACE_TRACE(t, h, ("\n")); 853 } 854 855 void 856 bus_space_set_raw_multi_4(bus_space_tag_t t, bus_space_handle_t h, 857 bus_size_t o, u_int32_t v, 858 size_t c) 859 { 860 BUS_SPACE_ASSERT(t, h, o, 4); 861 BUS_SPACE_TRACE(t, h, 862 ("bssm4(%llx + %llx, %x, %x) <- %8.8x\n", (long long)h.bh_ptr, 863 (long long)o, t->sasi, c, v)); 864 c /= sizeof(u_int32_t); 865 866 ++c; /* Looping on "--c" is slightly faster than on "c--" */ 867 asi_set(t->sasi); 868 while (--c > 0) 869 stwa_asi(h.bh_ptr + o, v); 870 } 871 872 void 873 bus_space_read_raw_region_4(bus_space_tag_t t, bus_space_handle_t h, 874 bus_size_t o, 875 void *a, size_t c) 876 { 877 u_int32_t *p = a; 878 paddr_t ptr = h.bh_ptr + o; 879 880 BUS_SPACE_ASSERT(t, h, o, 4); 881 BUS_SPACE_TRACE(t, h, 882 ("bsrr4(%llx + %llx, %x, %x) <- \n", (long long)h.bh_ptr, 883 (long long)o, t->sasi, c)); 884 c /= sizeof(u_int32_t); 885 886 asi_set(t->sasi); 887 for (; c; p++, c--, ptr += 4) { 888 u_int32_t r = lduwa_asi(ptr); 889 BUS_SPACE_TRACE(t, h, (" %8.8x", r)); 890 *p = r; 891 } 892 893 BUS_SPACE_TRACE(t, h, ("\n")); 894 } 895 896 void 897 bus_space_write_raw_region_4(bus_space_tag_t t, bus_space_handle_t h, 898 bus_size_t o, 899 const void *a, size_t c) 900 { 901 const u_int32_t *p = a; 902 paddr_t ptr = h.bh_ptr + o; 903 904 BUS_SPACE_ASSERT(t, h, o, 4); 905 BUS_SPACE_TRACE(t, h, 906 ("bswr4(%llx + %llx, %x, %x) <-", (long long)h.bh_ptr, 907 (long long)o, t->sasi, c)); 908 c /= sizeof(u_int32_t); 909 910 asi_set(t->sasi); 911 for (; c; p++, c--, ptr += 4) { 912 u_int32_t r = *p; 913 BUS_SPACE_TRACE(t, h, (" %8.8x", r)); 914 stwa_asi(ptr, r); 915 } 916 917 BUS_SPACE_TRACE(t, h, ("\n")); 918 } 919 920 void 921 bus_space_set_raw_region_4(bus_space_tag_t t, bus_space_handle_t h, 922 bus_size_t o, u_int32_t v, 923 size_t c) 924 { 925 paddr_t ptr = h.bh_ptr + o; 926 927 BUS_SPACE_ASSERT(t, h, o, 4); 928 BUS_SPACE_TRACE(t, h, 929 ("bssr4(%llx + %llx, %x, %x) <- %8.8x\n", (long long)h.bh_ptr, 930 (long long)o, t->sasi, c, v)); 931 c /= sizeof(u_int32_t); 932 933 asi_set(t->sasi); 934 for (; c; c--, ptr += 4) 935 stwa_asi(ptr, v); 936 } 937 938 939 940 /* 941 * Implementing u_int64_t 942 */ 943 944 945 void 946 bus_space_read_raw_multi_8(bus_space_tag_t t, bus_space_handle_t h, 947 bus_size_t o, 948 void *a, size_t c) 949 { 950 u_int64_t *p = a; 951 952 BUS_SPACE_ASSERT(t, h, o, 8); 953 BUS_SPACE_TRACE(t, h, 954 ("bsrm8(%llx + %llx, %x, %x) ->", (long long)h.bh_ptr, 955 (long long)o, t->sasi, c)); 956 c /= sizeof(u_int64_t); 957 958 ++c; /* Looping on "--c" is slightly faster than on "c--" */ 959 asi_set(t->sasi); 960 while (--c > 0) { 961 u_int64_t r = ldxa_asi(h.bh_ptr + o); 962 BUS_SPACE_TRACE(t, h, (" %16.16llx", r)); 963 *p++ = r; 964 } 965 966 BUS_SPACE_TRACE(t, h, ("\n")); 967 } 968 969 void 970 bus_space_write_raw_multi_8(bus_space_tag_t t, bus_space_handle_t h, 971 bus_size_t o, 972 const void *a, size_t c) 973 { 974 const u_int64_t *p = a; 975 976 BUS_SPACE_ASSERT(t, h, o, 8); 977 BUS_SPACE_TRACE(t, h, 978 ("bswm8(%llx + %llx, %x, %x) <-", (long long)h.bh_ptr, 979 (long long)o, t->sasi, c)); 980 c /= sizeof(u_int64_t); 981 982 ++c; /* Looping on "--c" is slightly faster than on "c--" */ 983 asi_set(t->sasi); 984 while (--c > 0) { 985 u_int64_t r = *p++; 986 BUS_SPACE_TRACE(t, h, (" %16.16llx", r)); 987 stxa_asi(h.bh_ptr + o, r); 988 } 989 990 BUS_SPACE_TRACE(t, h, ("\n")); 991 } 992 993 void 994 bus_space_set_raw_multi_8(bus_space_tag_t t, bus_space_handle_t h, 995 bus_size_t o, u_int64_t v, 996 size_t c) 997 { 998 BUS_SPACE_ASSERT(t, h, o, 8); 999 BUS_SPACE_TRACE(t, h, 1000 ("bssm8(%llx + %llx, %x, %x) <- %16.16llx\n", (long long)h.bh_ptr, 1001 (long long)o, t->sasi, c, v)); 1002 c /= sizeof(u_int64_t); 1003 1004 ++c; /* Looping on "--c" is slightly faster than on "c--" */ 1005 asi_set(t->sasi); 1006 while (--c > 0) 1007 stxa_asi(h.bh_ptr + o, v); 1008 } 1009 1010 void 1011 bus_space_read_raw_region_8(bus_space_tag_t t, bus_space_handle_t h, 1012 bus_size_t o, 1013 void *a, size_t c) 1014 { 1015 u_int64_t *p = a; 1016 paddr_t ptr = h.bh_ptr + o; 1017 1018 BUS_SPACE_ASSERT(t, h, o, 8); 1019 BUS_SPACE_TRACE(t, h, 1020 ("bsrr8(%llx + %llx, %x, %x) <- \n", (long long)h.bh_ptr, 1021 (long long)o, t->sasi, c)); 1022 c /= sizeof(u_int64_t); 1023 1024 asi_set(t->sasi); 1025 for (; c; p++, c--, ptr += 8) { 1026 u_int64_t r = ldxa_asi(ptr); 1027 BUS_SPACE_TRACE(t, h, (" %16.16llx", r)); 1028 *p = r; 1029 } 1030 1031 BUS_SPACE_TRACE(t, h, ("\n")); 1032 } 1033 1034 void 1035 bus_space_write_raw_region_8(bus_space_tag_t t, bus_space_handle_t h, 1036 bus_size_t o, 1037 const void *a, size_t c) 1038 { 1039 const u_int64_t *p = a; 1040 paddr_t ptr = h.bh_ptr + o; 1041 1042 BUS_SPACE_ASSERT(t, h, o, 8); 1043 BUS_SPACE_TRACE(t, h, 1044 ("bswr8(%llx + %llx, %x, %x) <-", (long long)h.bh_ptr, 1045 (long long)o, t->sasi, c)); 1046 c /= sizeof(u_int64_t); 1047 1048 asi_set(t->sasi); 1049 for (; c; p++, c--, ptr += 8) { 1050 u_int64_t r = *p; 1051 BUS_SPACE_TRACE(t, h, (" %16.16llx", r)); 1052 stxa_asi(ptr, r); 1053 } 1054 1055 BUS_SPACE_TRACE(t, h, ("\n")); 1056 } 1057 1058 void 1059 bus_space_set_raw_region_8(bus_space_tag_t t, bus_space_handle_t h, 1060 bus_size_t o, u_int64_t v, 1061 size_t c) 1062 { 1063 paddr_t ptr = h.bh_ptr + o; 1064 1065 BUS_SPACE_ASSERT(t, h, o, 8); 1066 BUS_SPACE_TRACE(t, h, 1067 ("bssr8(%llx + %llx, %x, %x) <- %16.16llx\n", (long long)h.bh_ptr, 1068 (long long)o, t->sasi, c, v)); 1069 c /= sizeof(u_int64_t); 1070 1071 asi_set(t->sasi); 1072 for (; c; c--, ptr += 8) 1073 stxa_asi(ptr, v); 1074 } 1075 1076 1077 1078 /* 1079 * Implementing u_int8_t 1080 */ 1081 1082 1083 void 1084 bus_space_read_raw_multi_1(bus_space_tag_t t, bus_space_handle_t h, 1085 bus_size_t o, 1086 void *a, size_t c) 1087 { 1088 u_int8_t *p = a; 1089 1090 BUS_SPACE_ASSERT(t, h, o, 1); 1091 BUS_SPACE_TRACE(t, h, 1092 ("bsrm1(%llx + %llx, %x, %x) ->", (long long)h.bh_ptr, 1093 (long long)o, t->sasi, c)); 1094 c /= sizeof(u_int8_t); 1095 1096 ++c; /* Looping on "--c" is slightly faster than on "c--" */ 1097 asi_set(t->sasi); 1098 while (--c > 0) { 1099 u_int8_t r = lduba_asi(h.bh_ptr + o); 1100 BUS_SPACE_TRACE(t, h, (" %2.2x", r)); 1101 *p++ = r; 1102 } 1103 1104 BUS_SPACE_TRACE(t, h, ("\n")); 1105 } 1106 1107 void 1108 bus_space_write_raw_multi_1(bus_space_tag_t t, bus_space_handle_t h, 1109 bus_size_t o, 1110 const void *a, size_t c) 1111 { 1112 const u_int8_t *p = a; 1113 1114 BUS_SPACE_ASSERT(t, h, o, 1); 1115 BUS_SPACE_TRACE(t, h, 1116 ("bswm1(%llx + %llx, %x, %x) <-", (long long)h.bh_ptr, 1117 (long long)o, t->sasi, c)); 1118 c /= sizeof(u_int8_t); 1119 1120 ++c; /* Looping on "--c" is slightly faster than on "c--" */ 1121 asi_set(t->sasi); 1122 while (--c > 0) { 1123 u_int8_t r = *p++; 1124 BUS_SPACE_TRACE(t, h, (" %2.2x", r)); 1125 stba_asi(h.bh_ptr + o, r); 1126 } 1127 1128 BUS_SPACE_TRACE(t, h, ("\n")); 1129 } 1130 1131 void 1132 bus_space_set_raw_multi_1(bus_space_tag_t t, bus_space_handle_t h, 1133 bus_size_t o, u_int8_t v, 1134 size_t c) 1135 { 1136 BUS_SPACE_ASSERT(t, h, o, 1); 1137 BUS_SPACE_TRACE(t, h, 1138 ("bssm1(%llx + %llx, %x, %x) <- %2.2x\n", (long long)h.bh_ptr, 1139 (long long)o, t->sasi, c, v)); 1140 c /= sizeof(u_int8_t); 1141 1142 ++c; /* Looping on "--c" is slightly faster than on "c--" */ 1143 asi_set(t->sasi); 1144 while (--c > 0) 1145 stba_asi(h.bh_ptr + o, v); 1146 } 1147 1148 void 1149 bus_space_read_raw_region_1(bus_space_tag_t t, bus_space_handle_t h, 1150 bus_size_t o, 1151 void *a, size_t c) 1152 { 1153 u_int8_t *p = a; 1154 paddr_t ptr = h.bh_ptr + o; 1155 1156 BUS_SPACE_ASSERT(t, h, o, 1); 1157 BUS_SPACE_TRACE(t, h, 1158 ("bsrr1(%llx + %llx, %x, %x) <- \n", (long long)h.bh_ptr, 1159 (long long)o, t->sasi, c)); 1160 c /= sizeof(u_int8_t); 1161 1162 asi_set(t->sasi); 1163 for (; c; p++, c--, ptr += 1) { 1164 u_int8_t r = lduba_asi(ptr); 1165 BUS_SPACE_TRACE(t, h, (" %2.2x", r)); 1166 *p = r; 1167 } 1168 1169 BUS_SPACE_TRACE(t, h, ("\n")); 1170 } 1171 1172 void 1173 bus_space_write_raw_region_1(bus_space_tag_t t, bus_space_handle_t h, 1174 bus_size_t o, 1175 const void *a, size_t c) 1176 { 1177 const u_int8_t *p = a; 1178 paddr_t ptr = h.bh_ptr + o; 1179 1180 BUS_SPACE_ASSERT(t, h, o, 1); 1181 BUS_SPACE_TRACE(t, h, 1182 ("bswr1(%llx + %llx, %x, %x) <-", (long long)h.bh_ptr, 1183 (long long)o, t->sasi, c)); 1184 c /= sizeof(u_int8_t); 1185 1186 asi_set(t->sasi); 1187 for (; c; p++, c--, ptr += 1) { 1188 u_int8_t r = *p; 1189 BUS_SPACE_TRACE(t, h, (" %2.2x", r)); 1190 stba_asi(ptr, r); 1191 } 1192 1193 BUS_SPACE_TRACE(t, h, ("\n")); 1194 } 1195 1196 void 1197 bus_space_set_raw_region_1(bus_space_tag_t t, bus_space_handle_t h, 1198 bus_size_t o, u_int8_t v, 1199 size_t c) 1200 { 1201 paddr_t ptr = h.bh_ptr + o; 1202 1203 BUS_SPACE_ASSERT(t, h, o, 1); 1204 BUS_SPACE_TRACE(t, h, 1205 ("bssr1(%llx + %llx, %x, %x) <- %2.2x\n", (long long)h.bh_ptr, 1206 (long long)o, t->sasi, c, v)); 1207 c /= sizeof(u_int8_t); 1208 1209 asi_set(t->sasi); 1210 for (; c; c--, ptr += 1) 1211 stba_asi(ptr, v); 1212 } 1213 1214 1215 1216