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.
18 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
19 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
20 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
22 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 * POSSIBILITY OF SUCH DAMAGE.
31 * Copyright (c) 1997-1999 Eduardo E. Horvath. All rights reserved.
32 * Copyright (c) 1996 Charles M. Hannum. All rights reserved.
33 * Copyright (c) 1996 Christopher G. Demetriou. All rights reserved.
35 * Redistribution and use in source and binary forms, with or without
36 * modification, are permitted provided that the following conditions
38 * 1. Redistributions of source code must retain the above copyright
39 * notice, this list of conditions and the following disclaimer.
40 * 2. Redistributions in binary form must reproduce the above copyright
41 * notice, this list of conditions and the following disclaimer in the
42 * documentation and/or other materials provided with the distribution.
43 * 3. All advertising materials mentioning features or use of this software
44 * must display the following acknowledgement:
45 * This product includes software developed by Christopher G. Demetriou
46 * for the NetBSD Project.
47 * 4. The name of the author may not be used to endorse or promote products
48 * derived from this software without specific prior written permission
50 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
51 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
52 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
53 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
54 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
55 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
56 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
57 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
58 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
59 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
61 * from: NetBSD: bus.h,v 1.58 2008/04/28 20:23:36 martin Exp
63 * from: FreeBSD: src/sys/alpha/include/bus.h,v 1.9 2001/01/09
68 #ifndef _MACHINE_BUS_H_
69 #define _MACHINE_BUS_H_
71 #ifdef BUS_SPACE_DEBUG
75 #include <machine/_bus.h>
76 #include <machine/cpufunc.h>
79 * Nexus and SBus spaces are non-cached and big endian
80 * (except for RAM and PROM)
82 * PCI spaces are non-cached and little endian
84 #define NEXUS_BUS_SPACE 0
85 #define SBUS_BUS_SPACE 1
86 #define PCI_CONFIG_BUS_SPACE 2
87 #define PCI_IO_BUS_SPACE 3
88 #define PCI_MEMORY_BUS_SPACE 4
89 #define LAST_BUS_SPACE 5
91 extern const int bus_type_asi[];
92 extern const int bus_stream_asi[];
94 #define __BUS_SPACE_HAS_STREAM_METHODS 1
96 #define BUS_SPACE_MAXSIZE_24BIT 0xFFFFFF
97 #define BUS_SPACE_MAXSIZE_32BIT 0xFFFFFFFF
98 #define BUS_SPACE_MAXSIZE 0xFFFFFFFFFFFFFFFF
99 #define BUS_SPACE_MAXADDR_24BIT 0xFFFFFF
100 #define BUS_SPACE_MAXADDR_32BIT 0xFFFFFFFF
101 #define BUS_SPACE_MAXADDR 0xFFFFFFFF
103 #define BUS_SPACE_UNRESTRICTED (~0)
105 struct bus_space_tag {
107 bus_space_tag_t bst_parent;
110 void (*bst_bus_barrier)(bus_space_tag_t, bus_space_handle_t,
111 bus_size_t, bus_size_t, int);
115 * Bus space function prototypes.
117 static void bus_space_barrier(bus_space_tag_t, bus_space_handle_t, bus_size_t,
119 static int bus_space_subregion(bus_space_tag_t, bus_space_handle_t,
120 bus_size_t, bus_size_t, bus_space_handle_t *);
123 * Map a region of device bus space into CPU virtual address space.
126 static __inline int bus_space_map(bus_space_tag_t t, bus_addr_t addr,
127 bus_size_t size, int flags, bus_space_handle_t *bshp);
130 bus_space_map(bus_space_tag_t t __unused, bus_addr_t addr,
131 bus_size_t size __unused, int flags __unused, bus_space_handle_t *bshp)
139 * Unmap a region of device bus space.
141 static __inline void bus_space_unmap(bus_space_tag_t t, bus_space_handle_t bsh,
145 bus_space_unmap(bus_space_tag_t t __unused, bus_space_handle_t bsh __unused,
146 bus_size_t size __unused)
151 /* This macro finds the first "upstream" implementation of method `f' */
152 #define _BS_CALL(t,f) \
153 while (t->f == NULL) \
158 bus_space_barrier(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
162 _BS_CALL(t, bst_bus_barrier)(t, h, o, s, f);
166 bus_space_subregion(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
167 bus_size_t s, bus_space_handle_t *hp)
174 /* flags for bus space map functions */
175 #define BUS_SPACE_MAP_CACHEABLE 0x0001
176 #define BUS_SPACE_MAP_LINEAR 0x0002
177 #define BUS_SPACE_MAP_READONLY 0x0004
178 #define BUS_SPACE_MAP_PREFETCHABLE 0x0008
179 /* placeholders for bus functions... */
180 #define BUS_SPACE_MAP_BUS1 0x0100
181 #define BUS_SPACE_MAP_BUS2 0x0200
182 #define BUS_SPACE_MAP_BUS3 0x0400
183 #define BUS_SPACE_MAP_BUS4 0x0800
185 /* flags for bus_space_barrier() */
186 #define BUS_SPACE_BARRIER_READ 0x01 /* force read barrier */
187 #define BUS_SPACE_BARRIER_WRITE 0x02 /* force write barrier */
189 #ifdef BUS_SPACE_DEBUG
190 #define KTR_BUS KTR_SPARE2
191 #define __BUS_DEBUG_ACCESS(h, o, desc, sz) do { \
192 CTR4(KTR_BUS, "bus space: %s %d: handle %#lx, offset %#lx", \
193 (desc), (sz), (h), (o)); \
196 #define __BUS_DEBUG_ACCESS(h, o, desc, sz)
199 static __inline uint8_t
200 bus_space_read_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o)
203 __BUS_DEBUG_ACCESS(h, o, "read", 1);
204 return (lduba_nc((caddr_t)(h + o), bus_type_asi[t->bst_type]));
207 static __inline uint16_t
208 bus_space_read_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o)
211 __BUS_DEBUG_ACCESS(h, o, "read", 2);
212 return (lduha_nc((caddr_t)(h + o), bus_type_asi[t->bst_type]));
215 static __inline uint32_t
216 bus_space_read_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o)
219 __BUS_DEBUG_ACCESS(h, o, "read", 4);
220 return (lduwa_nc((caddr_t)(h + o), bus_type_asi[t->bst_type]));
223 static __inline uint64_t
224 bus_space_read_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o)
227 __BUS_DEBUG_ACCESS(h, o, "read", 8);
228 return (ldxa_nc((caddr_t)(h + o), bus_type_asi[t->bst_type]));
232 bus_space_read_multi_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
233 uint8_t *a, size_t c)
237 *a++ = bus_space_read_1(t, h, o);
241 bus_space_read_multi_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
242 uint16_t *a, size_t c)
246 *a++ = bus_space_read_2(t, h, o);
250 bus_space_read_multi_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
251 uint32_t *a, size_t c)
255 *a++ = bus_space_read_4(t, h, o);
259 bus_space_read_multi_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
260 uint64_t *a, size_t c)
264 *a++ = bus_space_read_8(t, h, o);
268 bus_space_write_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
272 __BUS_DEBUG_ACCESS(h, o, "write", 1);
273 stba_nc((caddr_t)(h + o), bus_type_asi[t->bst_type], v);
277 bus_space_write_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
281 __BUS_DEBUG_ACCESS(h, o, "write", 2);
282 stha_nc((caddr_t)(h + o), bus_type_asi[t->bst_type], v);
286 bus_space_write_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
290 __BUS_DEBUG_ACCESS(h, o, "write", 4);
291 stwa_nc((caddr_t)(h + o), bus_type_asi[t->bst_type], v);
295 bus_space_write_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
299 __BUS_DEBUG_ACCESS(h, o, "write", 8);
300 stxa_nc((caddr_t)(h + o), bus_type_asi[t->bst_type], v);
304 bus_space_write_multi_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
305 const uint8_t *a, size_t c)
309 bus_space_write_1(t, h, o, *a++);
313 bus_space_write_multi_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
314 const uint16_t *a, size_t c)
318 bus_space_write_2(t, h, o, *a++);
322 bus_space_write_multi_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
323 const uint32_t *a, size_t c)
327 bus_space_write_4(t, h, o, *a++);
331 bus_space_write_multi_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
332 const uint64_t *a, size_t c)
336 bus_space_write_8(t, h, o, *a++);
340 bus_space_set_multi_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
345 bus_space_write_1(t, h, o, v);
349 bus_space_set_multi_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
350 uint16_t v, size_t c)
354 bus_space_write_2(t, h, o, v);
358 bus_space_set_multi_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
359 uint32_t v, size_t c)
363 bus_space_write_4(t, h, o, v);
367 bus_space_set_multi_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
368 uint64_t v, size_t c)
372 bus_space_write_8(t, h, o, v);
376 bus_space_read_region_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
377 uint8_t *a, bus_size_t c)
380 for (; c; a++, c--, o++)
381 *a = bus_space_read_1(t, h, o);
385 bus_space_read_region_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
386 uint16_t *a, bus_size_t c)
389 for (; c; a++, c--, o += 2)
390 *a = bus_space_read_2(t, h, o);
394 bus_space_read_region_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
395 uint32_t *a, bus_size_t c)
398 for (; c; a++, c--, o += 4)
399 *a = bus_space_read_4(t, h, o);
403 bus_space_read_region_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
404 uint64_t *a, bus_size_t c)
407 for (; c; a++, c--, o += 8)
408 *a = bus_space_read_8(t, h, o);
412 bus_space_write_region_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
413 const uint8_t *a, bus_size_t c)
416 for (; c; a++, c--, o++)
417 bus_space_write_1(t, h, o, *a);
421 bus_space_write_region_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
422 const uint16_t *a, bus_size_t c)
425 for (; c; a++, c--, o += 2)
426 bus_space_write_2(t, h, o, *a);
430 bus_space_write_region_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
431 const uint32_t *a, bus_size_t c)
434 for (; c; a++, c--, o += 4)
435 bus_space_write_4(t, h, o, *a);
439 bus_space_write_region_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
440 const uint64_t *a, bus_size_t c)
443 for (; c; a++, c--, o += 8)
444 bus_space_write_8(t, h, o, *a);
448 bus_space_set_region_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
449 const uint8_t v, bus_size_t c)
453 bus_space_write_1(t, h, o, v);
457 bus_space_set_region_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
458 const uint16_t v, bus_size_t c)
461 for (; c; c--, o += 2)
462 bus_space_write_2(t, h, o, v);
466 bus_space_set_region_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
467 const uint32_t v, bus_size_t c)
470 for (; c; c--, o += 4)
471 bus_space_write_4(t, h, o, v);
475 bus_space_set_region_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
476 const uint64_t v, bus_size_t c)
479 for (; c; c--, o += 8)
480 bus_space_write_8(t, h, o, v);
484 bus_space_copy_region_1(bus_space_tag_t t, bus_space_handle_t h1,
485 bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c)
488 for (; c; c--, o1++, o2++)
489 bus_space_write_1(t, h1, o1, bus_space_read_1(t, h2, o2));
493 bus_space_copy_region_2(bus_space_tag_t t, bus_space_handle_t h1,
494 bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c)
497 for (; c; c--, o1 += 2, o2 += 2)
498 bus_space_write_2(t, h1, o1, bus_space_read_2(t, h2, o2));
502 bus_space_copy_region_4(bus_space_tag_t t, bus_space_handle_t h1,
503 bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c)
506 for (; c; c--, o1 += 4, o2 += 4)
507 bus_space_write_4(t, h1, o1, bus_space_read_4(t, h2, o2));
511 bus_space_copy_region_8(bus_space_tag_t t, bus_space_handle_t h1,
512 bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c)
515 for (; c; c--, o1 += 8, o2 += 8)
516 bus_space_write_8(t, h1, o1, bus_space_read_8(t, h2, o2));
519 static __inline uint8_t
520 bus_space_read_stream_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o)
523 __BUS_DEBUG_ACCESS(h, o, "read stream", 1);
524 return (lduba_nc((caddr_t)(h + o), bus_stream_asi[t->bst_type]));
527 static __inline uint16_t
528 bus_space_read_stream_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o)
531 __BUS_DEBUG_ACCESS(h, o, "read stream", 2);
532 return (lduha_nc((caddr_t)(h + o), bus_stream_asi[t->bst_type]));
535 static __inline uint32_t
536 bus_space_read_stream_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o)
539 __BUS_DEBUG_ACCESS(h, o, "read stream", 4);
540 return (lduwa_nc((caddr_t)(h + o), bus_stream_asi[t->bst_type]));
543 static __inline uint64_t
544 bus_space_read_stream_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o)
547 __BUS_DEBUG_ACCESS(h, o, "read stream", 8);
548 return (ldxa_nc((caddr_t)(h + o), bus_stream_asi[t->bst_type]));
552 bus_space_read_multi_stream_1(bus_space_tag_t t, bus_space_handle_t h,
553 bus_size_t o, uint8_t *a, size_t c)
557 *a++ = bus_space_read_stream_1(t, h, o);
561 bus_space_read_multi_stream_2(bus_space_tag_t t, bus_space_handle_t h,
562 bus_size_t o, uint16_t *a, size_t c)
566 *a++ = bus_space_read_stream_2(t, h, o);
570 bus_space_read_multi_stream_4(bus_space_tag_t t, bus_space_handle_t h,
571 bus_size_t o, uint32_t *a, size_t c)
575 *a++ = bus_space_read_stream_4(t, h, o);
579 bus_space_read_multi_stream_8(bus_space_tag_t t, bus_space_handle_t h,
580 bus_size_t o, uint64_t *a, size_t c)
584 *a++ = bus_space_read_stream_8(t, h, o);
588 bus_space_write_stream_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
592 __BUS_DEBUG_ACCESS(h, o, "write stream", 1);
593 stba_nc((caddr_t)(h + o), bus_stream_asi[t->bst_type], v);
597 bus_space_write_stream_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
601 __BUS_DEBUG_ACCESS(h, o, "write stream", 2);
602 stha_nc((caddr_t)(h + o), bus_stream_asi[t->bst_type], v);
606 bus_space_write_stream_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
610 __BUS_DEBUG_ACCESS(h, o, "write stream", 4);
611 stwa_nc((caddr_t)(h + o), bus_stream_asi[t->bst_type], v);
615 bus_space_write_stream_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
619 __BUS_DEBUG_ACCESS(h, o, "write stream", 8);
620 stxa_nc((caddr_t)(h + o), bus_stream_asi[t->bst_type], v);
624 bus_space_write_multi_stream_1(bus_space_tag_t t, bus_space_handle_t h,
625 bus_size_t o, const uint8_t *a, size_t c)
629 bus_space_write_stream_1(t, h, o, *a++);
633 bus_space_write_multi_stream_2(bus_space_tag_t t, bus_space_handle_t h,
634 bus_size_t o, const uint16_t *a, size_t c)
638 bus_space_write_stream_2(t, h, o, *a++);
642 bus_space_write_multi_stream_4(bus_space_tag_t t, bus_space_handle_t h,
643 bus_size_t o, const uint32_t *a, size_t c)
647 bus_space_write_stream_4(t, h, o, *a++);
651 bus_space_write_multi_stream_8(bus_space_tag_t t, bus_space_handle_t h,
652 bus_size_t o, const uint64_t *a, size_t c)
656 bus_space_write_stream_8(t, h, o, *a++);
660 bus_space_set_multi_stream_1(bus_space_tag_t t, bus_space_handle_t h,
661 bus_size_t o, uint8_t v, size_t c)
665 bus_space_write_stream_1(t, h, o, v);
669 bus_space_set_multi_stream_2(bus_space_tag_t t, bus_space_handle_t h,
670 bus_size_t o, uint16_t v, size_t c)
674 bus_space_write_stream_2(t, h, o, v);
678 bus_space_set_multi_stream_4(bus_space_tag_t t, bus_space_handle_t h,
679 bus_size_t o, uint32_t v, size_t c)
683 bus_space_write_stream_4(t, h, o, v);
687 bus_space_set_multi_stream_8(bus_space_tag_t t, bus_space_handle_t h,
688 bus_size_t o, uint64_t v, size_t c)
692 bus_space_write_stream_8(t, h, o, v);
696 bus_space_read_region_stream_1(bus_space_tag_t t, bus_space_handle_t h,
697 bus_size_t o, uint8_t *a, bus_size_t c)
700 for (; c; a++, c--, o++)
701 *a = bus_space_read_stream_1(t, h, o);
705 bus_space_read_region_stream_2(bus_space_tag_t t, bus_space_handle_t h,
706 bus_size_t o, uint16_t *a, bus_size_t c)
709 for (; c; a++, c--, o += 2)
710 *a = bus_space_read_stream_2(t, h, o);
714 bus_space_read_region_stream_4(bus_space_tag_t t, bus_space_handle_t h,
715 bus_size_t o, uint32_t *a, bus_size_t c)
718 for (; c; a++, c--, o += 4)
719 *a = bus_space_read_stream_4(t, h, o);
723 bus_space_read_region_stream_8(bus_space_tag_t t, bus_space_handle_t h,
724 bus_size_t o, uint64_t *a, bus_size_t c)
727 for (; c; a++, c--, o += 8)
728 *a = bus_space_read_stream_8(t, h, o);
732 bus_space_write_region_stream_1(bus_space_tag_t t, bus_space_handle_t h,
733 bus_size_t o, const uint8_t *a, bus_size_t c)
736 for (; c; a++, c--, o++)
737 bus_space_write_stream_1(t, h, o, *a);
741 bus_space_write_region_stream_2(bus_space_tag_t t, bus_space_handle_t h,
742 bus_size_t o, const uint16_t *a, bus_size_t c)
745 for (; c; a++, c--, o += 2)
746 bus_space_write_stream_2(t, h, o, *a);
750 bus_space_write_region_stream_4(bus_space_tag_t t, bus_space_handle_t h,
751 bus_size_t o, const uint32_t *a, bus_size_t c)
754 for (; c; a++, c--, o += 4)
755 bus_space_write_stream_4(t, h, o, *a);
759 bus_space_write_region_stream_8(bus_space_tag_t t, bus_space_handle_t h,
760 bus_size_t o, const uint64_t *a, bus_size_t c)
763 for (; c; a++, c--, o += 8)
764 bus_space_write_stream_8(t, h, o, *a);
768 bus_space_set_region_stream_1(bus_space_tag_t t, bus_space_handle_t h,
769 bus_size_t o, const uint8_t v, bus_size_t c)
773 bus_space_write_stream_1(t, h, o, v);
777 bus_space_set_region_stream_2(bus_space_tag_t t, bus_space_handle_t h,
778 bus_size_t o, const uint16_t v, bus_size_t c)
781 for (; c; c--, o += 2)
782 bus_space_write_stream_2(t, h, o, v);
786 bus_space_set_region_stream_4(bus_space_tag_t t, bus_space_handle_t h,
787 bus_size_t o, const uint32_t v, bus_size_t c)
790 for (; c; c--, o += 4)
791 bus_space_write_stream_4(t, h, o, v);
795 bus_space_set_region_stream_8(bus_space_tag_t t, bus_space_handle_t h,
796 bus_size_t o, const uint64_t v, bus_size_t c)
799 for (; c; c--, o += 8)
800 bus_space_write_stream_8(t, h, o, v);
804 bus_space_copy_region_stream_1(bus_space_tag_t t, bus_space_handle_t h1,
805 bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c)
808 for (; c; c--, o1++, o2++)
809 bus_space_write_stream_1(t, h1, o1, bus_space_read_stream_1(t, h2,
814 bus_space_copy_region_stream_2(bus_space_tag_t t, bus_space_handle_t h1,
815 bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c)
818 for (; c; c--, o1 += 2, o2 += 2)
819 bus_space_write_stream_2(t, h1, o1, bus_space_read_stream_2(t, h2,
824 bus_space_copy_region_stream_4(bus_space_tag_t t, bus_space_handle_t h1,
825 bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c)
828 for (; c; c--, o1 += 4, o2 += 4)
829 bus_space_write_stream_4(t, h1, o1, bus_space_read_stream_4(t, h2,
834 bus_space_copy_region_stream_8(bus_space_tag_t t, bus_space_handle_t h1,
835 bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c)
838 for (; c; c--, o1 += 8, o2 += 8)
839 bus_space_write_stream_8(t, h1, o1, bus_space_read_8(t, h2, o2));
843 bus_space_peek_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
847 __BUS_DEBUG_ACCESS(h, o, "peek", 1);
848 return (fasword8(bus_type_asi[t->bst_type], (caddr_t)(h + o), a));
852 bus_space_peek_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
856 __BUS_DEBUG_ACCESS(h, o, "peek", 2);
857 return (fasword16(bus_type_asi[t->bst_type], (caddr_t)(h + o), a));
861 bus_space_peek_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
865 __BUS_DEBUG_ACCESS(h, o, "peek", 4);
866 return (fasword32(bus_type_asi[t->bst_type], (caddr_t)(h + o), a));
869 #include <machine/bus_dma.h>
871 #endif /* !_MACHINE_BUS_H_ */