2 * Copyright (c) 1996, 1997, 1998, 2001 The NetBSD Foundation, Inc.
5 * This code is derived from software contributed to The NetBSD Foundation
6 * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
7 * NASA Ames Research Center.
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright
15 * notice, this list of conditions and the following disclaimer in the
16 * documentation and/or other materials provided with the distribution.
17 * 3. All advertising materials mentioning features or use of this software
18 * must display the following acknowledgement:
19 * This product includes software developed by the NetBSD
20 * Foundation, Inc. and its contributors.
21 * 4. Neither the name of The NetBSD Foundation nor the names of its
22 * contributors may be used to endorse or promote products derived
23 * from this software without specific prior written permission.
25 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
26 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
27 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
29 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
30 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
31 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
32 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
33 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
34 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35 * POSSIBILITY OF SUCH DAMAGE.
38 * Copyright (c) 1997-1999 Eduardo E. Horvath. All rights reserved.
39 * Copyright (c) 1996 Charles M. Hannum. All rights reserved.
40 * Copyright (c) 1996 Christopher G. Demetriou. All rights reserved.
42 * Redistribution and use in source and binary forms, with or without
43 * modification, are permitted provided that the following conditions
45 * 1. Redistributions of source code must retain the above copyright
46 * notice, this list of conditions and the following disclaimer.
47 * 2. Redistributions in binary form must reproduce the above copyright
48 * notice, this list of conditions and the following disclaimer in the
49 * documentation and/or other materials provided with the distribution.
50 * 3. All advertising materials mentioning features or use of this software
51 * must display the following acknowledgement:
52 * This product includes software developed by Christopher G. Demetriou
53 * for the NetBSD Project.
54 * 4. The name of the author may not be used to endorse or promote products
55 * derived from this software without specific prior written permission
57 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
58 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
59 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
60 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
61 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
62 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
63 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
64 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
65 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
66 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
68 * from: NetBSD: bus.h,v 1.28 2001/07/19 15:32:19 thorpej Exp
70 * from: FreeBSD: src/sys/alpha/include/bus.h,v 1.9 2001/01/09
75 #ifndef _MACHINE_BUS_H_
76 #define _MACHINE_BUS_H_
78 #ifdef BUS_SPACE_DEBUG
82 #include <machine/_bus.h>
83 #include <machine/cpufunc.h>
86 * Nexus and SBus spaces are non-cached and big endian
87 * (except for RAM and PROM)
89 * PCI spaces are non-cached and little endian
91 #define NEXUS_BUS_SPACE 0
92 #define SBUS_BUS_SPACE 1
93 #define PCI_CONFIG_BUS_SPACE 2
94 #define PCI_IO_BUS_SPACE 3
95 #define PCI_MEMORY_BUS_SPACE 4
96 #define LAST_BUS_SPACE 5
98 extern const int bus_type_asi[];
99 extern const int bus_stream_asi[];
101 #define __BUS_SPACE_HAS_STREAM_METHODS 1
103 #define BUS_SPACE_MAXSIZE_24BIT 0xFFFFFF
104 #define BUS_SPACE_MAXSIZE_32BIT 0xFFFFFFFF
105 #define BUS_SPACE_MAXSIZE 0xFFFFFFFFFFFFFFFF
106 #define BUS_SPACE_MAXADDR_24BIT 0xFFFFFF
107 #define BUS_SPACE_MAXADDR_32BIT 0xFFFFFFFF
108 #define BUS_SPACE_MAXADDR 0xFFFFFFFF
110 #define BUS_SPACE_UNRESTRICTED (~0)
112 struct bus_space_tag {
114 bus_space_tag_t bst_parent;
117 void (*bst_bus_barrier)(bus_space_tag_t, bus_space_handle_t,
118 bus_size_t, bus_size_t, int);
122 * Bus space function prototypes.
124 static void bus_space_barrier(bus_space_tag_t, bus_space_handle_t, bus_size_t,
126 static int bus_space_subregion(bus_space_tag_t, bus_space_handle_t,
127 bus_size_t, bus_size_t, bus_space_handle_t *);
130 * Map a region of device bus space into CPU virtual address space.
133 static __inline int bus_space_map(bus_space_tag_t t, bus_addr_t addr,
134 bus_size_t size, int flags, bus_space_handle_t *bshp);
137 bus_space_map(bus_space_tag_t t __unused, bus_addr_t addr,
138 bus_size_t size __unused, int flags __unused, bus_space_handle_t *bshp)
146 * Unmap a region of device bus space.
148 static __inline void bus_space_unmap(bus_space_tag_t t, bus_space_handle_t bsh,
152 bus_space_unmap(bus_space_tag_t t __unused, bus_space_handle_t bsh __unused,
153 bus_size_t size __unused)
158 /* This macro finds the first "upstream" implementation of method `f' */
159 #define _BS_CALL(t,f) \
160 while (t->f == NULL) \
165 bus_space_barrier(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
169 _BS_CALL(t, bst_bus_barrier)(t, h, o, s, f);
173 bus_space_subregion(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
174 bus_size_t s, bus_space_handle_t *hp)
181 /* flags for bus space map functions */
182 #define BUS_SPACE_MAP_CACHEABLE 0x0001
183 #define BUS_SPACE_MAP_LINEAR 0x0002
184 #define BUS_SPACE_MAP_READONLY 0x0004
185 #define BUS_SPACE_MAP_PREFETCHABLE 0x0008
186 /* placeholders for bus functions... */
187 #define BUS_SPACE_MAP_BUS1 0x0100
188 #define BUS_SPACE_MAP_BUS2 0x0200
189 #define BUS_SPACE_MAP_BUS3 0x0400
190 #define BUS_SPACE_MAP_BUS4 0x0800
192 /* flags for bus_space_barrier() */
193 #define BUS_SPACE_BARRIER_READ 0x01 /* force read barrier */
194 #define BUS_SPACE_BARRIER_WRITE 0x02 /* force write barrier */
196 #ifdef BUS_SPACE_DEBUG
197 #define KTR_BUS KTR_CT2
198 #define __BUS_DEBUG_ACCESS(h, o, desc, sz) do { \
199 CTR4(KTR_BUS, "bus space: %s %d: handle %#lx, offset %#lx", \
200 (desc), (sz), (h), (o)); \
203 #define __BUS_DEBUG_ACCESS(h, o, desc, sz)
206 static __inline uint8_t
207 bus_space_read_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o)
210 __BUS_DEBUG_ACCESS(h, o, "read", 1);
211 return (lduba_nc((caddr_t)(h + o), bus_type_asi[t->bst_type]));
214 static __inline uint16_t
215 bus_space_read_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o)
218 __BUS_DEBUG_ACCESS(h, o, "read", 2);
219 return (lduha_nc((caddr_t)(h + o), bus_type_asi[t->bst_type]));
222 static __inline uint32_t
223 bus_space_read_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o)
226 __BUS_DEBUG_ACCESS(h, o, "read", 4);
227 return (lduwa_nc((caddr_t)(h + o), bus_type_asi[t->bst_type]));
230 static __inline uint64_t
231 bus_space_read_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o)
234 __BUS_DEBUG_ACCESS(h, o, "read", 8);
235 return (ldxa_nc((caddr_t)(h + o), bus_type_asi[t->bst_type]));
239 bus_space_read_multi_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
240 uint8_t *a, size_t c)
244 *a++ = bus_space_read_1(t, h, o);
248 bus_space_read_multi_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
249 uint16_t *a, size_t c)
253 *a++ = bus_space_read_2(t, h, o);
257 bus_space_read_multi_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
258 uint32_t *a, size_t c)
262 *a++ = bus_space_read_4(t, h, o);
266 bus_space_read_multi_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
267 uint64_t *a, size_t c)
271 *a++ = bus_space_read_8(t, h, o);
275 bus_space_write_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
279 __BUS_DEBUG_ACCESS(h, o, "write", 1);
280 stba_nc((caddr_t)(h + o), bus_type_asi[t->bst_type], v);
284 bus_space_write_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
288 __BUS_DEBUG_ACCESS(h, o, "write", 2);
289 stha_nc((caddr_t)(h + o), bus_type_asi[t->bst_type], v);
293 bus_space_write_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
297 __BUS_DEBUG_ACCESS(h, o, "write", 4);
298 stwa_nc((caddr_t)(h + o), bus_type_asi[t->bst_type], v);
302 bus_space_write_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
306 __BUS_DEBUG_ACCESS(h, o, "write", 8);
307 stxa_nc((caddr_t)(h + o), bus_type_asi[t->bst_type], v);
311 bus_space_write_multi_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
312 const uint8_t *a, size_t c)
316 bus_space_write_1(t, h, o, *a++);
320 bus_space_write_multi_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
321 const uint16_t *a, size_t c)
325 bus_space_write_2(t, h, o, *a++);
329 bus_space_write_multi_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
330 const uint32_t *a, size_t c)
334 bus_space_write_4(t, h, o, *a++);
338 bus_space_write_multi_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
339 const uint64_t *a, size_t c)
343 bus_space_write_8(t, h, o, *a++);
347 bus_space_set_multi_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
352 bus_space_write_1(t, h, o, v);
356 bus_space_set_multi_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
357 uint16_t v, size_t c)
361 bus_space_write_2(t, h, o, v);
365 bus_space_set_multi_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
366 uint32_t v, size_t c)
370 bus_space_write_4(t, h, o, v);
374 bus_space_set_multi_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
375 uint64_t v, size_t c)
379 bus_space_write_8(t, h, o, v);
383 bus_space_read_region_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
384 uint8_t *a, bus_size_t c)
387 for (; c; a++, c--, o++)
388 *a = bus_space_read_1(t, h, o);
392 bus_space_read_region_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
393 uint16_t *a, bus_size_t c)
396 for (; c; a++, c--, o += 2)
397 *a = bus_space_read_2(t, h, o);
401 bus_space_read_region_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
402 uint32_t *a, bus_size_t c)
405 for (; c; a++, c--, o += 4)
406 *a = bus_space_read_4(t, h, o);
410 bus_space_read_region_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
411 uint64_t *a, bus_size_t c)
414 for (; c; a++, c--, o += 8)
415 *a = bus_space_read_8(t, h, o);
419 bus_space_write_region_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
420 const uint8_t *a, bus_size_t c)
423 for (; c; a++, c--, o++)
424 bus_space_write_1(t, h, o, *a);
428 bus_space_write_region_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
429 const uint16_t *a, bus_size_t c)
432 for (; c; a++, c--, o += 2)
433 bus_space_write_2(t, h, o, *a);
437 bus_space_write_region_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
438 const uint32_t *a, bus_size_t c)
441 for (; c; a++, c--, o += 4)
442 bus_space_write_4(t, h, o, *a);
446 bus_space_write_region_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
447 const uint64_t *a, bus_size_t c)
450 for (; c; a++, c--, o += 8)
451 bus_space_write_8(t, h, o, *a);
455 bus_space_set_region_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
456 const uint8_t v, bus_size_t c)
460 bus_space_write_1(t, h, o, v);
464 bus_space_set_region_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
465 const uint16_t v, bus_size_t c)
468 for (; c; c--, o += 2)
469 bus_space_write_2(t, h, o, v);
473 bus_space_set_region_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
474 const uint32_t v, bus_size_t c)
477 for (; c; c--, o += 4)
478 bus_space_write_4(t, h, o, v);
482 bus_space_set_region_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
483 const uint64_t v, bus_size_t c)
486 for (; c; c--, o += 8)
487 bus_space_write_8(t, h, o, v);
491 bus_space_copy_region_1(bus_space_tag_t t, bus_space_handle_t h1,
492 bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c)
495 for (; c; c--, o1++, o2++)
496 bus_space_write_1(t, h1, o1, bus_space_read_1(t, h2, o2));
500 bus_space_copy_region_2(bus_space_tag_t t, bus_space_handle_t h1,
501 bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c)
504 for (; c; c--, o1 += 2, o2 += 2)
505 bus_space_write_2(t, h1, o1, bus_space_read_2(t, h2, o2));
509 bus_space_copy_region_4(bus_space_tag_t t, bus_space_handle_t h1,
510 bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c)
513 for (; c; c--, o1 += 4, o2 += 4)
514 bus_space_write_4(t, h1, o1, bus_space_read_4(t, h2, o2));
518 bus_space_copy_region_8(bus_space_tag_t t, bus_space_handle_t h1,
519 bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c)
522 for (; c; c--, o1 += 8, o2 += 8)
523 bus_space_write_8(t, h1, o1, bus_space_read_8(t, h2, o2));
526 static __inline uint8_t
527 bus_space_read_stream_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o)
530 __BUS_DEBUG_ACCESS(h, o, "read stream", 1);
531 return (lduba_nc((caddr_t)(h + o), bus_stream_asi[t->bst_type]));
534 static __inline uint16_t
535 bus_space_read_stream_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o)
538 __BUS_DEBUG_ACCESS(h, o, "read stream", 2);
539 return (lduha_nc((caddr_t)(h + o), bus_stream_asi[t->bst_type]));
542 static __inline uint32_t
543 bus_space_read_stream_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o)
546 __BUS_DEBUG_ACCESS(h, o, "read stream", 4);
547 return (lduwa_nc((caddr_t)(h + o), bus_stream_asi[t->bst_type]));
550 static __inline uint64_t
551 bus_space_read_stream_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o)
554 __BUS_DEBUG_ACCESS(h, o, "read stream", 8);
555 return (ldxa_nc((caddr_t)(h + o), bus_stream_asi[t->bst_type]));
559 bus_space_read_multi_stream_1(bus_space_tag_t t, bus_space_handle_t h,
560 bus_size_t o, uint8_t *a, size_t c)
564 *a++ = bus_space_read_stream_1(t, h, o);
568 bus_space_read_multi_stream_2(bus_space_tag_t t, bus_space_handle_t h,
569 bus_size_t o, uint16_t *a, size_t c)
573 *a++ = bus_space_read_stream_2(t, h, o);
577 bus_space_read_multi_stream_4(bus_space_tag_t t, bus_space_handle_t h,
578 bus_size_t o, uint32_t *a, size_t c)
582 *a++ = bus_space_read_stream_4(t, h, o);
586 bus_space_read_multi_stream_8(bus_space_tag_t t, bus_space_handle_t h,
587 bus_size_t o, uint64_t *a, size_t c)
591 *a++ = bus_space_read_stream_8(t, h, o);
595 bus_space_write_stream_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
599 __BUS_DEBUG_ACCESS(h, o, "write stream", 1);
600 stba_nc((caddr_t)(h + o), bus_stream_asi[t->bst_type], v);
604 bus_space_write_stream_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
608 __BUS_DEBUG_ACCESS(h, o, "write stream", 2);
609 stha_nc((caddr_t)(h + o), bus_stream_asi[t->bst_type], v);
613 bus_space_write_stream_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
617 __BUS_DEBUG_ACCESS(h, o, "write stream", 4);
618 stwa_nc((caddr_t)(h + o), bus_stream_asi[t->bst_type], v);
622 bus_space_write_stream_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
626 __BUS_DEBUG_ACCESS(h, o, "write stream", 8);
627 stxa_nc((caddr_t)(h + o), bus_stream_asi[t->bst_type], v);
631 bus_space_write_multi_stream_1(bus_space_tag_t t, bus_space_handle_t h,
632 bus_size_t o, const uint8_t *a, size_t c)
636 bus_space_write_stream_1(t, h, o, *a++);
640 bus_space_write_multi_stream_2(bus_space_tag_t t, bus_space_handle_t h,
641 bus_size_t o, const uint16_t *a, size_t c)
645 bus_space_write_stream_2(t, h, o, *a++);
649 bus_space_write_multi_stream_4(bus_space_tag_t t, bus_space_handle_t h,
650 bus_size_t o, const uint32_t *a, size_t c)
654 bus_space_write_stream_4(t, h, o, *a++);
658 bus_space_write_multi_stream_8(bus_space_tag_t t, bus_space_handle_t h,
659 bus_size_t o, const uint64_t *a, size_t c)
663 bus_space_write_stream_8(t, h, o, *a++);
667 bus_space_set_multi_stream_1(bus_space_tag_t t, bus_space_handle_t h,
668 bus_size_t o, uint8_t v, size_t c)
672 bus_space_write_stream_1(t, h, o, v);
676 bus_space_set_multi_stream_2(bus_space_tag_t t, bus_space_handle_t h,
677 bus_size_t o, uint16_t v, size_t c)
681 bus_space_write_stream_2(t, h, o, v);
685 bus_space_set_multi_stream_4(bus_space_tag_t t, bus_space_handle_t h,
686 bus_size_t o, uint32_t v, size_t c)
690 bus_space_write_stream_4(t, h, o, v);
694 bus_space_set_multi_stream_8(bus_space_tag_t t, bus_space_handle_t h,
695 bus_size_t o, uint64_t v, size_t c)
699 bus_space_write_stream_8(t, h, o, v);
703 bus_space_read_region_stream_1(bus_space_tag_t t, bus_space_handle_t h,
704 bus_size_t o, uint8_t *a, bus_size_t c)
707 for (; c; a++, c--, o++)
708 *a = bus_space_read_stream_1(t, h, o);
712 bus_space_read_region_stream_2(bus_space_tag_t t, bus_space_handle_t h,
713 bus_size_t o, uint16_t *a, bus_size_t c)
716 for (; c; a++, c--, o += 2)
717 *a = bus_space_read_stream_2(t, h, o);
721 bus_space_read_region_stream_4(bus_space_tag_t t, bus_space_handle_t h,
722 bus_size_t o, uint32_t *a, bus_size_t c)
725 for (; c; a++, c--, o += 4)
726 *a = bus_space_read_stream_4(t, h, o);
730 bus_space_read_region_stream_8(bus_space_tag_t t, bus_space_handle_t h,
731 bus_size_t o, uint64_t *a, bus_size_t c)
734 for (; c; a++, c--, o += 8)
735 *a = bus_space_read_stream_8(t, h, o);
739 bus_space_write_region_stream_1(bus_space_tag_t t, bus_space_handle_t h,
740 bus_size_t o, const uint8_t *a, bus_size_t c)
743 for (; c; a++, c--, o++)
744 bus_space_write_stream_1(t, h, o, *a);
748 bus_space_write_region_stream_2(bus_space_tag_t t, bus_space_handle_t h,
749 bus_size_t o, const uint16_t *a, bus_size_t c)
752 for (; c; a++, c--, o += 2)
753 bus_space_write_stream_2(t, h, o, *a);
757 bus_space_write_region_stream_4(bus_space_tag_t t, bus_space_handle_t h,
758 bus_size_t o, const uint32_t *a, bus_size_t c)
761 for (; c; a++, c--, o += 4)
762 bus_space_write_stream_4(t, h, o, *a);
766 bus_space_write_region_stream_8(bus_space_tag_t t, bus_space_handle_t h,
767 bus_size_t o, const uint64_t *a, bus_size_t c)
770 for (; c; a++, c--, o += 8)
771 bus_space_write_stream_8(t, h, o, *a);
775 bus_space_set_region_stream_1(bus_space_tag_t t, bus_space_handle_t h,
776 bus_size_t o, const uint8_t v, bus_size_t c)
780 bus_space_write_stream_1(t, h, o, v);
784 bus_space_set_region_stream_2(bus_space_tag_t t, bus_space_handle_t h,
785 bus_size_t o, const uint16_t v, bus_size_t c)
788 for (; c; c--, o += 2)
789 bus_space_write_stream_2(t, h, o, v);
793 bus_space_set_region_stream_4(bus_space_tag_t t, bus_space_handle_t h,
794 bus_size_t o, const uint32_t v, bus_size_t c)
797 for (; c; c--, o += 4)
798 bus_space_write_stream_4(t, h, o, v);
802 bus_space_set_region_stream_8(bus_space_tag_t t, bus_space_handle_t h,
803 bus_size_t o, const uint64_t v, bus_size_t c)
806 for (; c; c--, o += 8)
807 bus_space_write_stream_8(t, h, o, v);
811 bus_space_copy_region_stream_1(bus_space_tag_t t, bus_space_handle_t h1,
812 bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c)
815 for (; c; c--, o1++, o2++)
816 bus_space_write_stream_1(t, h1, o1, bus_space_read_stream_1(t, h2,
821 bus_space_copy_region_stream_2(bus_space_tag_t t, bus_space_handle_t h1,
822 bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c)
825 for (; c; c--, o1 += 2, o2 += 2)
826 bus_space_write_stream_2(t, h1, o1, bus_space_read_stream_2(t, h2,
831 bus_space_copy_region_stream_4(bus_space_tag_t t, bus_space_handle_t h1,
832 bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c)
835 for (; c; c--, o1 += 4, o2 += 4)
836 bus_space_write_stream_4(t, h1, o1, bus_space_read_stream_4(t, h2,
841 bus_space_copy_region_stream_8(bus_space_tag_t t, bus_space_handle_t h1,
842 bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c)
845 for (; c; c--, o1 += 8, o2 += 8)
846 bus_space_write_stream_8(t, h1, o1, bus_space_read_8(t, h2, o2));
850 bus_space_peek_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
854 __BUS_DEBUG_ACCESS(h, o, "peek", 1);
855 return (fasword8(bus_type_asi[t->bst_type], (caddr_t)(h + o), a));
859 bus_space_peek_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
863 __BUS_DEBUG_ACCESS(h, o, "peek", 2);
864 return (fasword16(bus_type_asi[t->bst_type], (caddr_t)(h + o), a));
868 bus_space_peek_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
872 __BUS_DEBUG_ACCESS(h, o, "peek", 4);
873 return (fasword32(bus_type_asi[t->bst_type], (caddr_t)(h + o), a));
876 #include <machine/bus_dma.h>
878 #endif /* !_MACHINE_BUS_H_ */