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.
125 int bus_space_map(bus_space_tag_t tag, bus_addr_t address, bus_size_t size,
126 int flags, bus_space_handle_t *handlep);
129 * Unmap a region of device bus space.
131 void bus_space_unmap(bus_space_tag_t tag, bus_space_handle_t handle,
134 /* This macro finds the first "upstream" implementation of method `f' */
135 #define _BS_CALL(t,f) \
136 while (t->f == NULL) \
141 bus_space_barrier(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
145 _BS_CALL(t, bst_bus_barrier)(t, h, o, s, f);
149 bus_space_subregion(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
150 bus_size_t s, bus_space_handle_t *hp)
157 /* flags for bus space map functions */
158 #define BUS_SPACE_MAP_CACHEABLE 0x0001
159 #define BUS_SPACE_MAP_LINEAR 0x0002
160 #define BUS_SPACE_MAP_READONLY 0x0004
161 #define BUS_SPACE_MAP_PREFETCHABLE 0x0008
162 /* placeholders for bus functions... */
163 #define BUS_SPACE_MAP_BUS1 0x0100
164 #define BUS_SPACE_MAP_BUS2 0x0200
165 #define BUS_SPACE_MAP_BUS3 0x0400
166 #define BUS_SPACE_MAP_BUS4 0x0800
168 /* flags for bus_space_barrier() */
169 #define BUS_SPACE_BARRIER_READ 0x01 /* force read barrier */
170 #define BUS_SPACE_BARRIER_WRITE 0x02 /* force write barrier */
172 #ifdef BUS_SPACE_DEBUG
173 #define KTR_BUS KTR_SPARE2
174 #define __BUS_DEBUG_ACCESS(h, o, desc, sz) do { \
175 CTR4(KTR_BUS, "bus space: %s %d: handle %#lx, offset %#lx", \
176 (desc), (sz), (h), (o)); \
179 #define __BUS_DEBUG_ACCESS(h, o, desc, sz)
182 static __inline uint8_t
183 bus_space_read_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o)
186 __BUS_DEBUG_ACCESS(h, o, "read", 1);
187 return (lduba_nc((caddr_t)(h + o), bus_type_asi[t->bst_type]));
190 static __inline uint16_t
191 bus_space_read_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o)
194 __BUS_DEBUG_ACCESS(h, o, "read", 2);
195 return (lduha_nc((caddr_t)(h + o), bus_type_asi[t->bst_type]));
198 static __inline uint32_t
199 bus_space_read_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o)
202 __BUS_DEBUG_ACCESS(h, o, "read", 4);
203 return (lduwa_nc((caddr_t)(h + o), bus_type_asi[t->bst_type]));
206 static __inline uint64_t
207 bus_space_read_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o)
210 __BUS_DEBUG_ACCESS(h, o, "read", 8);
211 return (ldxa_nc((caddr_t)(h + o), bus_type_asi[t->bst_type]));
215 bus_space_read_multi_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
216 uint8_t *a, size_t c)
220 *a++ = bus_space_read_1(t, h, o);
224 bus_space_read_multi_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
225 uint16_t *a, size_t c)
229 *a++ = bus_space_read_2(t, h, o);
233 bus_space_read_multi_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
234 uint32_t *a, size_t c)
238 *a++ = bus_space_read_4(t, h, o);
242 bus_space_read_multi_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
243 uint64_t *a, size_t c)
247 *a++ = bus_space_read_8(t, h, o);
251 bus_space_write_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
255 __BUS_DEBUG_ACCESS(h, o, "write", 1);
256 stba_nc((caddr_t)(h + o), bus_type_asi[t->bst_type], v);
260 bus_space_write_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
264 __BUS_DEBUG_ACCESS(h, o, "write", 2);
265 stha_nc((caddr_t)(h + o), bus_type_asi[t->bst_type], v);
269 bus_space_write_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
273 __BUS_DEBUG_ACCESS(h, o, "write", 4);
274 stwa_nc((caddr_t)(h + o), bus_type_asi[t->bst_type], v);
278 bus_space_write_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
282 __BUS_DEBUG_ACCESS(h, o, "write", 8);
283 stxa_nc((caddr_t)(h + o), bus_type_asi[t->bst_type], v);
287 bus_space_write_multi_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
288 const uint8_t *a, size_t c)
292 bus_space_write_1(t, h, o, *a++);
296 bus_space_write_multi_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
297 const uint16_t *a, size_t c)
301 bus_space_write_2(t, h, o, *a++);
305 bus_space_write_multi_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
306 const uint32_t *a, size_t c)
310 bus_space_write_4(t, h, o, *a++);
314 bus_space_write_multi_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
315 const uint64_t *a, size_t c)
319 bus_space_write_8(t, h, o, *a++);
323 bus_space_set_multi_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
328 bus_space_write_1(t, h, o, v);
332 bus_space_set_multi_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
333 uint16_t v, size_t c)
337 bus_space_write_2(t, h, o, v);
341 bus_space_set_multi_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
342 uint32_t v, size_t c)
346 bus_space_write_4(t, h, o, v);
350 bus_space_set_multi_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
351 uint64_t v, size_t c)
355 bus_space_write_8(t, h, o, v);
359 bus_space_read_region_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
360 uint8_t *a, bus_size_t c)
363 for (; c; a++, c--, o++)
364 *a = bus_space_read_1(t, h, o);
368 bus_space_read_region_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
369 uint16_t *a, bus_size_t c)
372 for (; c; a++, c--, o += 2)
373 *a = bus_space_read_2(t, h, o);
377 bus_space_read_region_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
378 uint32_t *a, bus_size_t c)
381 for (; c; a++, c--, o += 4)
382 *a = bus_space_read_4(t, h, o);
386 bus_space_read_region_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
387 uint64_t *a, bus_size_t c)
390 for (; c; a++, c--, o += 8)
391 *a = bus_space_read_8(t, h, o);
395 bus_space_write_region_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
396 const uint8_t *a, bus_size_t c)
399 for (; c; a++, c--, o++)
400 bus_space_write_1(t, h, o, *a);
404 bus_space_write_region_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
405 const uint16_t *a, bus_size_t c)
408 for (; c; a++, c--, o += 2)
409 bus_space_write_2(t, h, o, *a);
413 bus_space_write_region_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
414 const uint32_t *a, bus_size_t c)
417 for (; c; a++, c--, o += 4)
418 bus_space_write_4(t, h, o, *a);
422 bus_space_write_region_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
423 const uint64_t *a, bus_size_t c)
426 for (; c; a++, c--, o += 8)
427 bus_space_write_8(t, h, o, *a);
431 bus_space_set_region_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
432 const uint8_t v, bus_size_t c)
436 bus_space_write_1(t, h, o, v);
440 bus_space_set_region_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
441 const uint16_t v, bus_size_t c)
444 for (; c; c--, o += 2)
445 bus_space_write_2(t, h, o, v);
449 bus_space_set_region_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
450 const uint32_t v, bus_size_t c)
453 for (; c; c--, o += 4)
454 bus_space_write_4(t, h, o, v);
458 bus_space_set_region_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
459 const uint64_t v, bus_size_t c)
462 for (; c; c--, o += 8)
463 bus_space_write_8(t, h, o, v);
467 bus_space_copy_region_1(bus_space_tag_t t, bus_space_handle_t h1,
468 bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c)
471 for (; c; c--, o1++, o2++)
472 bus_space_write_1(t, h1, o1, bus_space_read_1(t, h2, o2));
476 bus_space_copy_region_2(bus_space_tag_t t, bus_space_handle_t h1,
477 bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c)
480 for (; c; c--, o1 += 2, o2 += 2)
481 bus_space_write_2(t, h1, o1, bus_space_read_2(t, h2, o2));
485 bus_space_copy_region_4(bus_space_tag_t t, bus_space_handle_t h1,
486 bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c)
489 for (; c; c--, o1 += 4, o2 += 4)
490 bus_space_write_4(t, h1, o1, bus_space_read_4(t, h2, o2));
494 bus_space_copy_region_8(bus_space_tag_t t, bus_space_handle_t h1,
495 bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c)
498 for (; c; c--, o1 += 8, o2 += 8)
499 bus_space_write_8(t, h1, o1, bus_space_read_8(t, h2, o2));
502 static __inline uint8_t
503 bus_space_read_stream_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o)
506 __BUS_DEBUG_ACCESS(h, o, "read stream", 1);
507 return (lduba_nc((caddr_t)(h + o), bus_stream_asi[t->bst_type]));
510 static __inline uint16_t
511 bus_space_read_stream_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o)
514 __BUS_DEBUG_ACCESS(h, o, "read stream", 2);
515 return (lduha_nc((caddr_t)(h + o), bus_stream_asi[t->bst_type]));
518 static __inline uint32_t
519 bus_space_read_stream_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o)
522 __BUS_DEBUG_ACCESS(h, o, "read stream", 4);
523 return (lduwa_nc((caddr_t)(h + o), bus_stream_asi[t->bst_type]));
526 static __inline uint64_t
527 bus_space_read_stream_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o)
530 __BUS_DEBUG_ACCESS(h, o, "read stream", 8);
531 return (ldxa_nc((caddr_t)(h + o), bus_stream_asi[t->bst_type]));
535 bus_space_read_multi_stream_1(bus_space_tag_t t, bus_space_handle_t h,
536 bus_size_t o, uint8_t *a, size_t c)
540 *a++ = bus_space_read_stream_1(t, h, o);
544 bus_space_read_multi_stream_2(bus_space_tag_t t, bus_space_handle_t h,
545 bus_size_t o, uint16_t *a, size_t c)
549 *a++ = bus_space_read_stream_2(t, h, o);
553 bus_space_read_multi_stream_4(bus_space_tag_t t, bus_space_handle_t h,
554 bus_size_t o, uint32_t *a, size_t c)
558 *a++ = bus_space_read_stream_4(t, h, o);
562 bus_space_read_multi_stream_8(bus_space_tag_t t, bus_space_handle_t h,
563 bus_size_t o, uint64_t *a, size_t c)
567 *a++ = bus_space_read_stream_8(t, h, o);
571 bus_space_write_stream_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
575 __BUS_DEBUG_ACCESS(h, o, "write stream", 1);
576 stba_nc((caddr_t)(h + o), bus_stream_asi[t->bst_type], v);
580 bus_space_write_stream_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
584 __BUS_DEBUG_ACCESS(h, o, "write stream", 2);
585 stha_nc((caddr_t)(h + o), bus_stream_asi[t->bst_type], v);
589 bus_space_write_stream_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
593 __BUS_DEBUG_ACCESS(h, o, "write stream", 4);
594 stwa_nc((caddr_t)(h + o), bus_stream_asi[t->bst_type], v);
598 bus_space_write_stream_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
602 __BUS_DEBUG_ACCESS(h, o, "write stream", 8);
603 stxa_nc((caddr_t)(h + o), bus_stream_asi[t->bst_type], v);
607 bus_space_write_multi_stream_1(bus_space_tag_t t, bus_space_handle_t h,
608 bus_size_t o, const uint8_t *a, size_t c)
612 bus_space_write_stream_1(t, h, o, *a++);
616 bus_space_write_multi_stream_2(bus_space_tag_t t, bus_space_handle_t h,
617 bus_size_t o, const uint16_t *a, size_t c)
621 bus_space_write_stream_2(t, h, o, *a++);
625 bus_space_write_multi_stream_4(bus_space_tag_t t, bus_space_handle_t h,
626 bus_size_t o, const uint32_t *a, size_t c)
630 bus_space_write_stream_4(t, h, o, *a++);
634 bus_space_write_multi_stream_8(bus_space_tag_t t, bus_space_handle_t h,
635 bus_size_t o, const uint64_t *a, size_t c)
639 bus_space_write_stream_8(t, h, o, *a++);
643 bus_space_set_multi_stream_1(bus_space_tag_t t, bus_space_handle_t h,
644 bus_size_t o, uint8_t v, size_t c)
648 bus_space_write_stream_1(t, h, o, v);
652 bus_space_set_multi_stream_2(bus_space_tag_t t, bus_space_handle_t h,
653 bus_size_t o, uint16_t v, size_t c)
657 bus_space_write_stream_2(t, h, o, v);
661 bus_space_set_multi_stream_4(bus_space_tag_t t, bus_space_handle_t h,
662 bus_size_t o, uint32_t v, size_t c)
666 bus_space_write_stream_4(t, h, o, v);
670 bus_space_set_multi_stream_8(bus_space_tag_t t, bus_space_handle_t h,
671 bus_size_t o, uint64_t v, size_t c)
675 bus_space_write_stream_8(t, h, o, v);
679 bus_space_read_region_stream_1(bus_space_tag_t t, bus_space_handle_t h,
680 bus_size_t o, uint8_t *a, bus_size_t c)
683 for (; c; a++, c--, o++)
684 *a = bus_space_read_stream_1(t, h, o);
688 bus_space_read_region_stream_2(bus_space_tag_t t, bus_space_handle_t h,
689 bus_size_t o, uint16_t *a, bus_size_t c)
692 for (; c; a++, c--, o += 2)
693 *a = bus_space_read_stream_2(t, h, o);
697 bus_space_read_region_stream_4(bus_space_tag_t t, bus_space_handle_t h,
698 bus_size_t o, uint32_t *a, bus_size_t c)
701 for (; c; a++, c--, o += 4)
702 *a = bus_space_read_stream_4(t, h, o);
706 bus_space_read_region_stream_8(bus_space_tag_t t, bus_space_handle_t h,
707 bus_size_t o, uint64_t *a, bus_size_t c)
710 for (; c; a++, c--, o += 8)
711 *a = bus_space_read_stream_8(t, h, o);
715 bus_space_write_region_stream_1(bus_space_tag_t t, bus_space_handle_t h,
716 bus_size_t o, const uint8_t *a, bus_size_t c)
719 for (; c; a++, c--, o++)
720 bus_space_write_stream_1(t, h, o, *a);
724 bus_space_write_region_stream_2(bus_space_tag_t t, bus_space_handle_t h,
725 bus_size_t o, const uint16_t *a, bus_size_t c)
728 for (; c; a++, c--, o += 2)
729 bus_space_write_stream_2(t, h, o, *a);
733 bus_space_write_region_stream_4(bus_space_tag_t t, bus_space_handle_t h,
734 bus_size_t o, const uint32_t *a, bus_size_t c)
737 for (; c; a++, c--, o += 4)
738 bus_space_write_stream_4(t, h, o, *a);
742 bus_space_write_region_stream_8(bus_space_tag_t t, bus_space_handle_t h,
743 bus_size_t o, const uint64_t *a, bus_size_t c)
746 for (; c; a++, c--, o += 8)
747 bus_space_write_stream_8(t, h, o, *a);
751 bus_space_set_region_stream_1(bus_space_tag_t t, bus_space_handle_t h,
752 bus_size_t o, const uint8_t v, bus_size_t c)
756 bus_space_write_stream_1(t, h, o, v);
760 bus_space_set_region_stream_2(bus_space_tag_t t, bus_space_handle_t h,
761 bus_size_t o, const uint16_t v, bus_size_t c)
764 for (; c; c--, o += 2)
765 bus_space_write_stream_2(t, h, o, v);
769 bus_space_set_region_stream_4(bus_space_tag_t t, bus_space_handle_t h,
770 bus_size_t o, const uint32_t v, bus_size_t c)
773 for (; c; c--, o += 4)
774 bus_space_write_stream_4(t, h, o, v);
778 bus_space_set_region_stream_8(bus_space_tag_t t, bus_space_handle_t h,
779 bus_size_t o, const uint64_t v, bus_size_t c)
782 for (; c; c--, o += 8)
783 bus_space_write_stream_8(t, h, o, v);
787 bus_space_copy_region_stream_1(bus_space_tag_t t, bus_space_handle_t h1,
788 bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c)
791 for (; c; c--, o1++, o2++)
792 bus_space_write_stream_1(t, h1, o1, bus_space_read_stream_1(t, h2,
797 bus_space_copy_region_stream_2(bus_space_tag_t t, bus_space_handle_t h1,
798 bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c)
801 for (; c; c--, o1 += 2, o2 += 2)
802 bus_space_write_stream_2(t, h1, o1, bus_space_read_stream_2(t, h2,
807 bus_space_copy_region_stream_4(bus_space_tag_t t, bus_space_handle_t h1,
808 bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c)
811 for (; c; c--, o1 += 4, o2 += 4)
812 bus_space_write_stream_4(t, h1, o1, bus_space_read_stream_4(t, h2,
817 bus_space_copy_region_stream_8(bus_space_tag_t t, bus_space_handle_t h1,
818 bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c)
821 for (; c; c--, o1 += 8, o2 += 8)
822 bus_space_write_stream_8(t, h1, o1, bus_space_read_8(t, h2, o2));
826 bus_space_peek_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
830 __BUS_DEBUG_ACCESS(h, o, "peek", 1);
831 return (fasword8(bus_type_asi[t->bst_type], (caddr_t)(h + o), a));
835 bus_space_peek_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
839 __BUS_DEBUG_ACCESS(h, o, "peek", 2);
840 return (fasword16(bus_type_asi[t->bst_type], (caddr_t)(h + o), a));
844 bus_space_peek_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
848 __BUS_DEBUG_ACCESS(h, o, "peek", 4);
849 return (fasword32(bus_type_asi[t->bst_type], (caddr_t)(h + o), a));
852 #include <machine/bus_dma.h>
854 #endif /* !_MACHINE_BUS_H_ */