Home | History | Annotate | Line # | Download | only in hpcmips
      1 /*	$NetBSD: bus_space_through.c,v 1.5 2023/09/09 21:01:57 andvar Exp $	*/
      2 
      3 /*-
      4  * Copyright (c) 2001 TAKEMRUA Shin. All rights reserved.
      5  *
      6  * Redistribution and use in source and binary forms, with or without
      7  * modification, are permitted provided that the following conditions
      8  * are met:
      9  * 1. Redistributions of source code must retain the above copyright
     10  *    notice, this list of conditions and the following disclaimer.
     11  * 2. Redistributions in binary form must reproduce the above copyright
     12  *    notice, this list of conditions and the following disclaimer in the
     13  *    documentation and/or other materials provided with the distribution.
     14  * 3. Neither the name of the project nor the names of its contributors
     15  *    may be used to endorse or promote products derived from this software
     16  *    without specific prior written permission.
     17  *
     18  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     19  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     20  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     21  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     22  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     23  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     24  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     25  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     26  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     27  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     28  * SUCH DAMAGE.
     29  *
     30  */
     31 
     32 #include <sys/cdefs.h>
     33 __KERNEL_RCSID(0, "$NetBSD: bus_space_through.c,v 1.5 2023/09/09 21:01:57 andvar Exp $");
     34 
     35 #include <sys/systm.h>
     36 #include <machine/bus.h>
     37 
     38 bus_space_protos(bs_through);
     39 /*
     40  * Mapping and unmapping operations.
     41  */
     42 int
     43 bs_through_bs_map(bus_space_tag_t t, bus_addr_t addr,
     44     bus_size_t size, int cacheable, bus_space_handle_t *bshp)
     45 {
     46 	return bus_space_map(t->bs_base, addr, size, cacheable, bshp);
     47 }
     48 
     49 void
     50 bs_through_bs_unmap(bus_space_tag_t t, bus_space_handle_t bsh, bus_size_t size)
     51 {
     52 	bus_space_unmap(t->bs_base, bsh, size);
     53 }
     54 
     55 int
     56 bs_through_bs_subregion(bus_space_tag_t t, bus_space_handle_t bsh,
     57     bus_size_t offset, bus_size_t size, bus_space_handle_t *nbshp)
     58 {
     59 	return bus_space_subregion(t->bs_base, bsh, offset, size, nbshp);
     60 }
     61 
     62 
     63 /*
     64  * Allocation and deallocation operations.
     65  */
     66 int
     67 bs_through_bs_alloc(bus_space_tag_t t, bus_addr_t rstart, bus_addr_t rend,
     68     bus_size_t size, bus_size_t align, bus_size_t boundary, int cacheable,
     69     bus_addr_t *addrp, bus_space_handle_t *bshp)
     70 {
     71 	return bus_space_alloc(t->bs_base, rstart, rend, size, align, boundary,
     72 	    cacheable, addrp, bshp);
     73 }
     74 
     75 void
     76 bs_through_bs_free(bus_space_tag_t t, bus_space_handle_t bsh, bus_size_t size)
     77 {
     78 	bus_space_free(t->bs_base, bsh, size);
     79 }
     80 
     81 
     82 /*
     83  * Get kernel virtual address for ranges mapped BUS_SPACE_MAP_LINEAR.
     84  */
     85 void *
     86 bs_through_bs_vaddr(bus_space_tag_t t, bus_space_handle_t bsh)
     87 {
     88 	return bus_space_vaddr(t->bs_base, bsh);
     89 }
     90 
     91 
     92 /*
     93  * MMap bus space for a user application.
     94  */
     95 paddr_t
     96 bs_through_bs_mmap(bus_space_tag_t t, bus_addr_t addr, off_t offset,
     97     int prot, int flags)
     98 {
     99 	return bus_space_mmap(t->bs_base, addr, offset, prot, flags);
    100 }
    101 
    102 
    103 /*
    104  * Bus barrier operations.
    105  */
    106 void
    107 bs_through_bs_barrier(bus_space_tag_t t, bus_space_handle_t bsh,
    108     bus_size_t offset, bus_size_t len, int flags)
    109 {
    110 	bus_space_barrier(t->bs_base, bsh, offset, len, flags);
    111 }
    112 
    113 
    114 /*
    115  * Bus probe operations.
    116  */
    117 int
    118 bs_through_bs_peek(bus_space_tag_t t, bus_space_handle_t bsh,
    119     bus_size_t offset, size_t size, void *ptr)
    120 {
    121 	return bus_space_peek(t->bs_base, bsh, offset, size, ptr);
    122 }
    123 
    124 int
    125 bs_through_bs_poke(bus_space_tag_t t, bus_space_handle_t bsh,
    126     bus_size_t offset, size_t size, u_int32_t val)
    127 {
    128 	return bus_space_poke(t->bs_base, bsh, offset, size, val);
    129 }
    130 
    131 
    132 /*
    133  * Bus read (single) operations.
    134  */
    135 u_int8_t
    136 bs_through_bs_r_1(bus_space_tag_t t, bus_space_handle_t bsh, bus_size_t offset)
    137 {
    138 	return bus_space_read_1(t->bs_base, bsh, offset);
    139 }
    140 
    141 u_int16_t
    142 bs_through_bs_r_2(bus_space_tag_t t, bus_space_handle_t bsh, bus_size_t offset)
    143 {
    144 	return bus_space_read_2(t->bs_base, bsh, offset);
    145 }
    146 
    147 u_int32_t
    148 bs_through_bs_r_4(bus_space_tag_t t, bus_space_handle_t bsh, bus_size_t offset)
    149 {
    150 	return bus_space_read_4(t->bs_base, bsh, offset);
    151 }
    152 
    153 u_int64_t
    154 bs_through_bs_r_8(bus_space_tag_t t, bus_space_handle_t bsh, bus_size_t offset)
    155 {
    156 	return bus_space_read_8(t->bs_base, bsh, offset);
    157 }
    158 
    159 
    160 /*
    161  * Bus read multiple operations.
    162  */
    163 void
    164 bs_through_bs_rm_1(bus_space_tag_t t, bus_space_handle_t bsh,
    165 	    bus_size_t offset, u_int8_t *addr, bus_size_t count)
    166 {
    167 	bus_space_read_multi_1(t->bs_base, bsh, offset, addr, count);
    168 }
    169 
    170 void
    171 bs_through_bs_rm_2(bus_space_tag_t t, bus_space_handle_t bsh,
    172 	    bus_size_t offset, u_int16_t *addr, bus_size_t count)
    173 {
    174 	bus_space_read_multi_2(t->bs_base, bsh, offset, addr, count);
    175 }
    176 
    177 void
    178 bs_through_bs_rm_4(bus_space_tag_t t, bus_space_handle_t bsh,
    179 	    bus_size_t offset, u_int32_t *addr, bus_size_t count)
    180 {
    181 	bus_space_read_multi_4(t->bs_base, bsh, offset, addr, count);
    182 }
    183 
    184 void
    185 bs_through_bs_rm_8(bus_space_tag_t t, bus_space_handle_t bsh,
    186 	    bus_size_t offset, u_int64_t *addr, bus_size_t count)
    187 {
    188 	bus_space_read_multi_8(t->bs_base, bsh, offset, addr, count);
    189 }
    190 
    191 
    192 /*
    193  * Bus read region operations.
    194  */
    195 void
    196 bs_through_bs_rr_1(bus_space_tag_t t, bus_space_handle_t bsh,
    197 	    bus_size_t offset, u_int8_t *addr, bus_size_t count)
    198 {
    199 	bus_space_read_region_1(t->bs_base, bsh, offset, addr, count);
    200 }
    201 
    202 void
    203 bs_through_bs_rr_2(bus_space_tag_t t, bus_space_handle_t bsh,
    204 	    bus_size_t offset, u_int16_t *addr, bus_size_t count)
    205 {
    206 	bus_space_read_region_2(t->bs_base, bsh, offset, addr, count);
    207 }
    208 
    209 void
    210 bs_through_bs_rr_4(bus_space_tag_t t, bus_space_handle_t bsh,
    211 	    bus_size_t offset, u_int32_t *addr, bus_size_t count)
    212 {
    213 	bus_space_read_region_4(t->bs_base, bsh, offset, addr, count);
    214 }
    215 
    216 void
    217 bs_through_bs_rr_8(bus_space_tag_t t, bus_space_handle_t bsh,
    218 	    bus_size_t offset, u_int64_t *addr, bus_size_t count)
    219 {
    220 	bus_space_read_region_8(t->bs_base, bsh, offset, addr, count);
    221 }
    222 
    223 
    224 /*
    225  * Bus write (single) operations.
    226  */
    227 void
    228 bs_through_bs_w_1(bus_space_tag_t t, bus_space_handle_t bsh, bus_size_t offset,
    229     u_int8_t value)
    230 {
    231 	bus_space_write_1(t->bs_base, bsh, offset, value);
    232 }
    233 
    234 void
    235 bs_through_bs_w_2(bus_space_tag_t t, bus_space_handle_t bsh, bus_size_t offset,
    236     u_int16_t value)
    237 {
    238 	bus_space_write_2(t->bs_base, bsh, offset, value);
    239 }
    240 
    241 void
    242 bs_through_bs_w_4(bus_space_tag_t t, bus_space_handle_t bsh, bus_size_t offset,
    243     u_int32_t value)
    244 {
    245 	bus_space_write_4(t->bs_base, bsh, offset, value);
    246 }
    247 
    248 void
    249 bs_through_bs_w_8(bus_space_tag_t t, bus_space_handle_t bsh, bus_size_t offset,
    250     u_int64_t value)
    251 {
    252 	bus_space_write_8(t->bs_base, bsh, offset, value);
    253 }
    254 
    255 
    256 /*
    257  * Bus write multiple operations.
    258  */
    259 void
    260 bs_through_bs_wm_1(bus_space_tag_t t, bus_space_handle_t bsh,
    261     bus_size_t offset, const u_int8_t *addr, bus_size_t count)
    262 {
    263 	bus_space_write_multi_1(t->bs_base, bsh, offset, addr, count);
    264 }
    265 
    266 void
    267 bs_through_bs_wm_2(bus_space_tag_t t, bus_space_handle_t bsh,
    268     bus_size_t offset, const u_int16_t *addr, bus_size_t count)
    269 {
    270 	bus_space_write_multi_2(t->bs_base, bsh, offset, addr, count);
    271 }
    272 
    273 void
    274 bs_through_bs_wm_4(bus_space_tag_t t, bus_space_handle_t bsh,
    275     bus_size_t offset, const u_int32_t *addr, bus_size_t count)
    276 {
    277 	bus_space_write_multi_4(t->bs_base, bsh, offset, addr, count);
    278 }
    279 
    280 void
    281 bs_through_bs_wm_8(bus_space_tag_t t, bus_space_handle_t bsh,
    282     bus_size_t offset, const u_int64_t *addr, bus_size_t count)
    283 {
    284 	bus_space_write_multi_8(t->bs_base, bsh, offset, addr, count);
    285 }
    286 
    287 
    288 /*
    289  * Bus write region operations.
    290  */
    291 void
    292 bs_through_bs_wr_1(bus_space_tag_t t, bus_space_handle_t bsh,
    293     bus_size_t offset, const u_int8_t *addr, bus_size_t count)
    294 {
    295 	bus_space_write_region_1(t->bs_base, bsh, offset, addr, count);
    296 }
    297 
    298 void
    299 bs_through_bs_wr_2(bus_space_tag_t t, bus_space_handle_t bsh,
    300     bus_size_t offset, const u_int16_t *addr, bus_size_t count)
    301 {
    302 	bus_space_write_region_2(t->bs_base, bsh, offset, addr, count);
    303 }
    304 
    305 void
    306 bs_through_bs_wr_4(bus_space_tag_t t, bus_space_handle_t bsh,
    307     bus_size_t offset, const u_int32_t *addr, bus_size_t count)
    308 {
    309 	bus_space_write_region_4(t->bs_base, bsh, offset, addr, count);
    310 }
    311 
    312 void
    313 bs_through_bs_wr_8(bus_space_tag_t t, bus_space_handle_t bsh,
    314     bus_size_t offset, const u_int64_t *addr, bus_size_t count)
    315 {
    316 	bus_space_write_region_8(t->bs_base, bsh, offset, addr, count);
    317 }
    318 
    319 #ifdef BUS_SPACE_HAS_REAL_STREAM_METHODS
    320 /*
    321  * Bus read (single) operations.
    322  */
    323 u_int8_t
    324 bs_through_bs_rs_1(bus_space_tag_t t, bus_space_handle_t bsh,
    325     bus_size_t offset)
    326 {
    327 	return bus_space_read_stream_1(t->bs_base, bsh, offset);
    328 }
    329 
    330 u_int16_t
    331 bs_through_bs_rs_2(bus_space_tag_t t, bus_space_handle_t bsh,
    332     bus_size_t offset)
    333 {
    334 	return bus_space_read_stream_2(t->bs_base, bsh, offset);
    335 }
    336 
    337 u_int32_t
    338 bs_through_bs_rs_4(bus_space_tag_t t, bus_space_handle_t bsh,
    339     bus_size_t offset)
    340 {
    341 	return bus_space_read_stream_4(t->bs_base, bsh, offset);
    342 }
    343 
    344 u_int64_t
    345 bs_through_bs_rs_8(bus_space_tag_t t, bus_space_handle_t bsh,
    346     bus_size_t offset)
    347 {
    348 	return bus_space_read_stream_8(t->bs_base, bsh, offset);
    349 }
    350 
    351 
    352 /*
    353  * Bus read multiple operations.
    354  */
    355 void
    356 bs_through_bs_rms_1(bus_space_tag_t t, bus_space_handle_t bsh,
    357 	    bus_size_t offset, u_int8_t *addr, bus_size_t count)
    358 {
    359 	bus_space_read_multi_stream_1(t->bs_base, bsh, offset, addr, count);
    360 }
    361 
    362 void
    363 bs_through_bs_rms_2(bus_space_tag_t t, bus_space_handle_t bsh,
    364 	    bus_size_t offset, u_int16_t *addr, bus_size_t count)
    365 {
    366 	bus_space_read_multi_stream_2(t->bs_base, bsh, offset, addr, count);
    367 }
    368 
    369 void
    370 bs_through_bs_rms_4(bus_space_tag_t t, bus_space_handle_t bsh,
    371 	    bus_size_t offset, u_int32_t *addr, bus_size_t count)
    372 {
    373 	bus_space_read_multi_stream_4(t->bs_base, bsh, offset, addr, count);
    374 }
    375 
    376 void
    377 bs_through_bs_rms_8(bus_space_tag_t t, bus_space_handle_t bsh,
    378 	    bus_size_t offset, u_int64_t *addr, bus_size_t count)
    379 {
    380 	bus_space_read_multi_stream_8(t->bs_base, bsh, offset, addr, count);
    381 }
    382 
    383 
    384 /*
    385  * Bus read region operations.
    386  */
    387 void
    388 bs_through_bs_rrs_1(bus_space_tag_t t, bus_space_handle_t bsh,
    389 	    bus_size_t offset, u_int8_t *addr, bus_size_t count)
    390 {
    391 	bus_space_read_region_stream_1(t->bs_base, bsh, offset, addr, count);
    392 }
    393 
    394 void
    395 bs_through_bs_rrs_2(bus_space_tag_t t, bus_space_handle_t bsh,
    396 	    bus_size_t offset, u_int16_t *addr, bus_size_t count)
    397 {
    398 	bus_space_read_region_stream_2(t->bs_base, bsh, offset, addr, count);
    399 }
    400 
    401 void
    402 bs_through_bs_rrs_4(bus_space_tag_t t, bus_space_handle_t bsh,
    403 	    bus_size_t offset, u_int32_t *addr, bus_size_t count)
    404 {
    405 	bus_space_read_region_stream_4(t->bs_base, bsh, offset, addr, count);
    406 }
    407 
    408 void
    409 bs_through_bs_rrs_8(bus_space_tag_t t, bus_space_handle_t bsh,
    410 	    bus_size_t offset, u_int64_t *addr, bus_size_t count)
    411 {
    412 	bus_space_read_region_stream_8(t->bs_base, bsh, offset, addr, count);
    413 }
    414 
    415 
    416 /*
    417  * Bus write (single) operations.
    418  */
    419 void
    420 bs_through_bs_ws_1(bus_space_tag_t t, bus_space_handle_t bsh,
    421     bus_size_t offset, u_int8_t value)
    422 {
    423 	bus_space_write_stream_1(t->bs_base, bsh, offset, value);
    424 }
    425 
    426 void
    427 bs_through_bs_ws_2(bus_space_tag_t t, bus_space_handle_t bsh,
    428     bus_size_t offset, u_int16_t value)
    429 {
    430 	bus_space_write_stream_2(t->bs_base, bsh, offset, value);
    431 }
    432 
    433 void
    434 bs_through_bs_ws_4(bus_space_tag_t t, bus_space_handle_t bsh,
    435     bus_size_t offset, u_int32_t value)
    436 {
    437 	bus_space_write_stream_4(t->bs_base, bsh, offset, value);
    438 }
    439 
    440 void
    441 bs_through_bs_ws_8(bus_space_tag_t t, bus_space_handle_t bsh,
    442     bus_size_t offset, u_int64_t value)
    443 {
    444 	bus_space_write_stream_8(t->bs_base, bsh, offset, value);
    445 }
    446 
    447 
    448 /*
    449  * Bus write multiple operations.
    450  */
    451 void
    452 bs_through_bs_wms_1(bus_space_tag_t t, bus_space_handle_t bsh,
    453     bus_size_t offset, const u_int8_t *addr, bus_size_t count)
    454 {
    455 	bus_space_write_multi_stream_1(t->bs_base, bsh, offset, addr, count);
    456 }
    457 
    458 void
    459 bs_through_bs_wms_2(bus_space_tag_t t, bus_space_handle_t bsh,
    460     bus_size_t offset, const u_int16_t *addr, bus_size_t count)
    461 {
    462 	bus_space_write_multi_stream_2(t->bs_base, bsh, offset, addr, count);
    463 }
    464 
    465 void
    466 bs_through_bs_wms_4(bus_space_tag_t t, bus_space_handle_t bsh,
    467     bus_size_t offset, const u_int32_t *addr, bus_size_t count)
    468 {
    469 	bus_space_write_multi_stream_4(t->bs_base, bsh, offset, addr, count);
    470 }
    471 
    472 void
    473 bs_through_bs_wms_8(bus_space_tag_t t, bus_space_handle_t bsh,
    474     bus_size_t offset, const u_int64_t *addr, bus_size_t count)
    475 {
    476 	bus_space_write_multi_stream_8(t->bs_base, bsh, offset, addr, count);
    477 }
    478 
    479 
    480 /*
    481  * Bus write region operations.
    482  */
    483 void
    484 bs_through_bs_wrs_1(bus_space_tag_t t, bus_space_handle_t bsh,
    485     bus_size_t offset, const u_int8_t *addr, bus_size_t count)
    486 {
    487 	bus_space_write_region_stream_1(t->bs_base, bsh, offset, addr, count);
    488 }
    489 
    490 void
    491 bs_through_bs_wrs_2(bus_space_tag_t t, bus_space_handle_t bsh,
    492     bus_size_t offset, const u_int16_t *addr, bus_size_t count)
    493 {
    494 	bus_space_write_region_stream_2(t->bs_base, bsh, offset, addr, count);
    495 }
    496 
    497 void
    498 bs_through_bs_wrs_4(bus_space_tag_t t, bus_space_handle_t bsh,
    499     bus_size_t offset, const u_int32_t *addr, bus_size_t count)
    500 {
    501 	bus_space_write_region_stream_4(t->bs_base, bsh, offset, addr, count);
    502 }
    503 
    504 void
    505 bs_through_bs_wrs_8(bus_space_tag_t t, bus_space_handle_t bsh,
    506     bus_size_t offset, const u_int64_t *addr, bus_size_t count)
    507 {
    508 	bus_space_write_region_stream_8(t->bs_base, bsh, offset, addr, count);
    509 }
    510 #endif /* ! BUS_SPACE_HAS_REAL_STREAM_METHODS */
    511 
    512 
    513 /*
    514  * Set multiple operations.
    515  */
    516 void
    517 bs_through_bs_sm_1(bus_space_tag_t t, bus_space_handle_t bsh,
    518     bus_size_t offset, u_int8_t value, bus_size_t count)
    519 {
    520 	bus_space_set_multi_1(t->bs_base, bsh, offset, value, count);
    521 }
    522 
    523 void
    524 bs_through_bs_sm_2(bus_space_tag_t t, bus_space_handle_t bsh,
    525     bus_size_t offset, u_int16_t value, bus_size_t count)
    526 {
    527 	bus_space_set_multi_2(t->bs_base, bsh, offset, value, count);
    528 }
    529 
    530 void
    531 bs_through_bs_sm_4(bus_space_tag_t t, bus_space_handle_t bsh,
    532     bus_size_t offset, u_int32_t value, bus_size_t count)
    533 {
    534 	bus_space_set_multi_4(t->bs_base, bsh, offset, value, count);
    535 }
    536 
    537 void
    538 bs_through_bs_sm_8(bus_space_tag_t t, bus_space_handle_t bsh,
    539     bus_size_t offset, u_int64_t value, bus_size_t count)
    540 {
    541 	bus_space_set_multi_8(t->bs_base, bsh, offset, value, count);
    542 }
    543 
    544 /*
    545  * Set region operations.
    546  */
    547 void
    548 bs_through_bs_sr_1(bus_space_tag_t t, bus_space_handle_t bsh,
    549     bus_size_t offset, u_int8_t value, bus_size_t count)
    550 {
    551 	bus_space_set_region_1(t->bs_base, bsh, offset, value, count);
    552 }
    553 
    554 void
    555 bs_through_bs_sr_2(bus_space_tag_t t, bus_space_handle_t bsh,
    556     bus_size_t offset, u_int16_t value, bus_size_t count)
    557 {
    558 	bus_space_set_region_2(t->bs_base, bsh, offset, value, count);
    559 }
    560 
    561 void
    562 bs_through_bs_sr_4(bus_space_tag_t t, bus_space_handle_t bsh,
    563     bus_size_t offset, u_int32_t value, bus_size_t count)
    564 {
    565 	bus_space_set_region_4(t->bs_base, bsh, offset, value, count);
    566 }
    567 
    568 void
    569 bs_through_bs_sr_8(bus_space_tag_t t, bus_space_handle_t bsh,
    570     bus_size_t offset, u_int64_t value, bus_size_t count)
    571 {
    572 	bus_space_set_region_8(t->bs_base, bsh, offset, value, count);
    573 }
    574 
    575 
    576 /*
    577  * Copy operations.
    578  */
    579 void
    580 bs_through_bs_c_1(bus_space_tag_t t, bus_space_handle_t bsh1,
    581     bus_size_t offset1, bus_space_handle_t bsh2,
    582     bus_size_t offset2, bus_size_t n)
    583 {
    584 	bus_space_copy_region_1(t->bs_base, bsh1, offset1, bsh2, offset2, n);
    585 }
    586 
    587 void
    588 bs_through_bs_c_2(bus_space_tag_t t, bus_space_handle_t bsh1,
    589     bus_size_t offset1, bus_space_handle_t bsh2,
    590     bus_size_t offset2, bus_size_t n)
    591 {
    592 	bus_space_copy_region_2(t->bs_base, bsh1, offset1, bsh2, offset2, n);
    593 }
    594 
    595 void
    596 bs_through_bs_c_4(bus_space_tag_t t, bus_space_handle_t bsh1,
    597     bus_size_t offset1, bus_space_handle_t bsh2,
    598     bus_size_t offset2, bus_size_t n)
    599 {
    600 	bus_space_copy_region_4(t->bs_base, bsh1, offset1, bsh2, offset2, n);
    601 }
    602 
    603 void
    604 bs_through_bs_c_8(bus_space_tag_t t, bus_space_handle_t bsh1,
    605     bus_size_t offset1, bus_space_handle_t bsh2,
    606     bus_size_t offset2, bus_size_t n)
    607 {
    608 	bus_space_copy_region_8(t->bs_base, bsh1, offset1, bsh2, offset2, n);
    609 }
    610