1f9bac91bSBenno Rice /*- 2f9bac91bSBenno Rice * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc. 3f9bac91bSBenno Rice * All rights reserved. 4f9bac91bSBenno Rice * 5f9bac91bSBenno Rice * This code is derived from software contributed to The NetBSD Foundation 6f9bac91bSBenno Rice * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility, 7f9bac91bSBenno Rice * NASA Ames Research Center. 8f9bac91bSBenno Rice * 9f9bac91bSBenno Rice * Redistribution and use in source and binary forms, with or without 10f9bac91bSBenno Rice * modification, are permitted provided that the following conditions 11f9bac91bSBenno Rice * are met: 12f9bac91bSBenno Rice * 1. Redistributions of source code must retain the above copyright 13f9bac91bSBenno Rice * notice, this list of conditions and the following disclaimer. 14f9bac91bSBenno Rice * 2. Redistributions in binary form must reproduce the above copyright 15f9bac91bSBenno Rice * notice, this list of conditions and the following disclaimer in the 16f9bac91bSBenno Rice * documentation and/or other materials provided with the distribution. 17f9bac91bSBenno Rice * 3. All advertising materials mentioning features or use of this software 18f9bac91bSBenno Rice * must display the following acknowledgement: 19f9bac91bSBenno Rice * This product includes software developed by the NetBSD 20f9bac91bSBenno Rice * Foundation, Inc. and its contributors. 21f9bac91bSBenno Rice * 4. Neither the name of The NetBSD Foundation nor the names of its 22f9bac91bSBenno Rice * contributors may be used to endorse or promote products derived 23f9bac91bSBenno Rice * from this software without specific prior written permission. 24f9bac91bSBenno Rice * 25f9bac91bSBenno Rice * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 26f9bac91bSBenno Rice * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 27f9bac91bSBenno Rice * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 28f9bac91bSBenno Rice * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 29f9bac91bSBenno Rice * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 30f9bac91bSBenno Rice * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 31f9bac91bSBenno Rice * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 32f9bac91bSBenno Rice * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 33f9bac91bSBenno Rice * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 34f9bac91bSBenno Rice * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 35f9bac91bSBenno Rice * POSSIBILITY OF SUCH DAMAGE. 36f9bac91bSBenno Rice */ 37f9bac91bSBenno Rice 3860727d8bSWarner Losh /*- 39f9bac91bSBenno Rice * Copyright (c) 1996 Charles M. Hannum. All rights reserved. 40f9bac91bSBenno Rice * Copyright (c) 1996 Christopher G. Demetriou. All rights reserved. 41f9bac91bSBenno Rice * 42f9bac91bSBenno Rice * Redistribution and use in source and binary forms, with or without 43f9bac91bSBenno Rice * modification, are permitted provided that the following conditions 44f9bac91bSBenno Rice * are met: 45f9bac91bSBenno Rice * 1. Redistributions of source code must retain the above copyright 46f9bac91bSBenno Rice * notice, this list of conditions and the following disclaimer. 47f9bac91bSBenno Rice * 2. Redistributions in binary form must reproduce the above copyright 48f9bac91bSBenno Rice * notice, this list of conditions and the following disclaimer in the 49f9bac91bSBenno Rice * documentation and/or other materials provided with the distribution. 50f9bac91bSBenno Rice * 3. All advertising materials mentioning features or use of this software 51f9bac91bSBenno Rice * must display the following acknowledgement: 52f9bac91bSBenno Rice * This product includes software developed by Christopher G. Demetriou 53f9bac91bSBenno Rice * for the NetBSD Project. 54f9bac91bSBenno Rice * 4. The name of the author may not be used to endorse or promote products 55f9bac91bSBenno Rice * derived from this software without specific prior written permission 56f9bac91bSBenno Rice * 57f9bac91bSBenno Rice * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 58f9bac91bSBenno Rice * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 59f9bac91bSBenno Rice * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 60f9bac91bSBenno Rice * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 61f9bac91bSBenno Rice * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 62f9bac91bSBenno Rice * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 63f9bac91bSBenno Rice * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 64f9bac91bSBenno Rice * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 65f9bac91bSBenno Rice * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 66f9bac91bSBenno Rice * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 67f9bac91bSBenno Rice * 68f9bac91bSBenno Rice * $NetBSD: bus.h,v 1.9.4.1 2000/06/30 16:27:30 simonb Exp $ 69f9bac91bSBenno Rice * $FreeBSD$ 70f9bac91bSBenno Rice */ 71f9bac91bSBenno Rice 72f9bac91bSBenno Rice #ifndef _MACPPC_BUS_H_ 73f9bac91bSBenno Rice #define _MACPPC_BUS_H_ 74f9bac91bSBenno Rice 75f9bac91bSBenno Rice #include <machine/pio.h> 76f9bac91bSBenno Rice 7725b60a3bSBenno Rice #define BUS_SPACE_MAXSIZE_24BIT 0xFFFFFF 7825b60a3bSBenno Rice #define BUS_SPACE_MAXSIZE_32BIT 0xFFFFFFFF 79f6c912ddSMaxime Henrion #define BUS_SPACE_MAXSIZE 0xFFFFFFFF 8025b60a3bSBenno Rice #define BUS_SPACE_MAXADDR_24BIT 0xFFFFFF 8125b60a3bSBenno Rice #define BUS_SPACE_MAXADDR_32BIT 0xFFFFFFFF 8225b60a3bSBenno Rice #define BUS_SPACE_MAXADDR 0xFFFFFFFF 8325b60a3bSBenno Rice 8425b60a3bSBenno Rice #define BUS_SPACE_UNRESTRICTED (~0) 8525b60a3bSBenno Rice 86f9bac91bSBenno Rice /* 87f9bac91bSBenno Rice * Values for the macppc bus space tag, not to be used directly by MI code. 88f9bac91bSBenno Rice */ 89f9bac91bSBenno Rice 90a5550be8SPeter Grehan #define __BUS_SPACE_HAS_STREAM_METHODS 1 91f9bac91bSBenno Rice 9225b60a3bSBenno Rice /* 93f9bac91bSBenno Rice * Bus address and size types 94f9bac91bSBenno Rice */ 95f9bac91bSBenno Rice typedef u_int32_t bus_addr_t; 96f9bac91bSBenno Rice typedef u_int32_t bus_size_t; 97f9bac91bSBenno Rice 98f9bac91bSBenno Rice /* 991e1e0032SPeter Grehan * Define the PPC tag values 1001e1e0032SPeter Grehan */ 1011e1e0032SPeter Grehan #define PPC_BUS_SPACE_MEM 1 /* space is mem space */ 1021e1e0032SPeter Grehan #define PPC_BUS_SPACE_IO 2 /* space is io space */ 1031e1e0032SPeter Grehan 1041e1e0032SPeter Grehan /* 105f9bac91bSBenno Rice * Access methods for bus resources and address space. 106f9bac91bSBenno Rice */ 107f9bac91bSBenno Rice typedef u_int32_t bus_space_tag_t; 108f9bac91bSBenno Rice typedef u_int32_t bus_space_handle_t; 109f9bac91bSBenno Rice 11025b60a3bSBenno Rice static __inline void * 1111e1e0032SPeter Grehan __ppc_ba(bus_space_tag_t tag __unused, bus_space_handle_t handle, 1121e1e0032SPeter Grehan bus_size_t offset) 11325b60a3bSBenno Rice { 1141e1e0032SPeter Grehan return ((void *)(handle + offset)); 11525b60a3bSBenno Rice } 11625b60a3bSBenno Rice 117f9bac91bSBenno Rice /* 118812344bcSAlfred Perlstein * int bus_space_map(bus_space_tag_t t, bus_addr_t addr, 119f9bac91bSBenno Rice * bus_size_t size, int flags, bus_space_handle_t *bshp)); 120f9bac91bSBenno Rice * 121f9bac91bSBenno Rice * Map a region of bus space. 122f9bac91bSBenno Rice */ 12325b60a3bSBenno Rice #if 0 12425b60a3bSBenno Rice bus_space_map(t, addr, size, flags, bshp) ! not implemented ! 12525b60a3bSBenno Rice #endif 126f9bac91bSBenno Rice 127f9bac91bSBenno Rice /* 128812344bcSAlfred Perlstein * int bus_space_unmap(bus_space_tag_t t, 129f9bac91bSBenno Rice * bus_space_handle_t bsh, bus_size_t size)); 130f9bac91bSBenno Rice * 131f9bac91bSBenno Rice * Unmap a region of bus space. 132f9bac91bSBenno Rice */ 133f9bac91bSBenno Rice 1341e1e0032SPeter Grehan static __inline void 1351e1e0032SPeter Grehan bus_space_unmap(bus_space_tag_t t __unused, bus_space_handle_t bsh __unused, 1361e1e0032SPeter Grehan bus_size_t size __unused) 1371e1e0032SPeter Grehan { 1381e1e0032SPeter Grehan } 139f9bac91bSBenno Rice 140f9bac91bSBenno Rice /* 141812344bcSAlfred Perlstein * int bus_space_subregion(bus_space_tag_t t, 142f9bac91bSBenno Rice * bus_space_handle_t bsh, bus_size_t offset, bus_size_t size, 143f9bac91bSBenno Rice * bus_space_handle_t *nbshp)); 144f9bac91bSBenno Rice * 145f9bac91bSBenno Rice * Get a new handle for a subregion of an already-mapped area of bus space. 146f9bac91bSBenno Rice */ 147f9bac91bSBenno Rice 1481e1e0032SPeter Grehan static __inline int 1491e1e0032SPeter Grehan bus_space_subregion(bus_space_tag_t t __unused, bus_space_handle_t bsh, 1501e1e0032SPeter Grehan bus_size_t offset, bus_size_t size __unused, bus_space_handle_t *nbshp) 1511e1e0032SPeter Grehan { 1521e1e0032SPeter Grehan *nbshp = bsh + offset; 1531e1e0032SPeter Grehan return (0); 1541e1e0032SPeter Grehan } 1551e1e0032SPeter Grehan 156f9bac91bSBenno Rice /* 157812344bcSAlfred Perlstein * int bus_space_alloc(bus_space_tag_t t, bus_addr_t rstart, 158f9bac91bSBenno Rice * bus_addr_t rend, bus_size_t size, bus_size_t align, 159f9bac91bSBenno Rice * bus_size_t boundary, int flags, bus_addr_t *addrp, 160f9bac91bSBenno Rice * bus_space_handle_t *bshp)); 161f9bac91bSBenno Rice * 162f9bac91bSBenno Rice * Allocate a region of bus space. 163f9bac91bSBenno Rice */ 164f9bac91bSBenno Rice 165f9bac91bSBenno Rice #if 0 166f9bac91bSBenno Rice #define bus_space_alloc(t, rs, re, s, a, b, f, ap, hp) !!! unimplemented !!! 167f9bac91bSBenno Rice #endif 168f9bac91bSBenno Rice 169f9bac91bSBenno Rice /* 170812344bcSAlfred Perlstein * int bus_space_free(bus_space_tag_t t, 171f9bac91bSBenno Rice * bus_space_handle_t bsh, bus_size_t size)); 172f9bac91bSBenno Rice * 173f9bac91bSBenno Rice * Free a region of bus space. 174f9bac91bSBenno Rice */ 175f9bac91bSBenno Rice #if 0 176f9bac91bSBenno Rice #define bus_space_free(t, h, s) !!! unimplemented !!! 177f9bac91bSBenno Rice #endif 178f9bac91bSBenno Rice 179f9bac91bSBenno Rice /* 180812344bcSAlfred Perlstein * u_intN_t bus_space_read_N(bus_space_tag_t tag, 181f9bac91bSBenno Rice * bus_space_handle_t bsh, bus_size_t offset)); 182f9bac91bSBenno Rice * 183f9bac91bSBenno Rice * Read a 1, 2, 4, or 8 byte quantity from bus space 184f9bac91bSBenno Rice * described by tag/handle/offset. 185f9bac91bSBenno Rice */ 186f9bac91bSBenno Rice 1871e1e0032SPeter Grehan static __inline u_int8_t 1881e1e0032SPeter Grehan bus_space_read_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o) 1891e1e0032SPeter Grehan { 1901e1e0032SPeter Grehan return (in8(__ppc_ba(t, h, o))); 1911e1e0032SPeter Grehan } 1921e1e0032SPeter Grehan 1931e1e0032SPeter Grehan static __inline u_int16_t 1941e1e0032SPeter Grehan bus_space_read_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o) 1951e1e0032SPeter Grehan { 1961e1e0032SPeter Grehan return (in16rb(__ppc_ba(t, h, o))); 1971e1e0032SPeter Grehan } 1981e1e0032SPeter Grehan 1991e1e0032SPeter Grehan static __inline u_int32_t 2001e1e0032SPeter Grehan bus_space_read_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o) 2011e1e0032SPeter Grehan { 2021e1e0032SPeter Grehan return (in32rb(__ppc_ba(t, h, o))); 2031e1e0032SPeter Grehan } 2041e1e0032SPeter Grehan 205f9bac91bSBenno Rice #if 0 /* Cause a link error for bus_space_read_8 */ 206f9bac91bSBenno Rice #define bus_space_read_8(t, h, o) !!! unimplemented !!! 207f9bac91bSBenno Rice #endif 208f9bac91bSBenno Rice 2091e1e0032SPeter Grehan static __inline u_int8_t 2101e1e0032SPeter Grehan bus_space_read_stream_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o) 2111e1e0032SPeter Grehan { 2121e1e0032SPeter Grehan return (in8(__ppc_ba(t, h, o))); 2131e1e0032SPeter Grehan } 2141e1e0032SPeter Grehan 2151e1e0032SPeter Grehan static __inline u_int16_t 2161e1e0032SPeter Grehan bus_space_read_stream_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o) 2171e1e0032SPeter Grehan { 2181e1e0032SPeter Grehan return (in16(__ppc_ba(t, h, o))); 2191e1e0032SPeter Grehan } 2201e1e0032SPeter Grehan 2211e1e0032SPeter Grehan static __inline u_int32_t 2221e1e0032SPeter Grehan bus_space_read_stream_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o) 2231e1e0032SPeter Grehan { 2241e1e0032SPeter Grehan return (in32(__ppc_ba(t, h, o))); 2251e1e0032SPeter Grehan } 2261e1e0032SPeter Grehan 227f9bac91bSBenno Rice #if 0 /* Cause a link error for bus_space_read_stream_8 */ 228a5550be8SPeter Grehan #define bus_space_read_stream_8(t, h, o) !!! unimplemented !!! 229f9bac91bSBenno Rice #endif 230f9bac91bSBenno Rice 231f9bac91bSBenno Rice /* 232812344bcSAlfred Perlstein * void bus_space_read_multi_N(bus_space_tag_t tag, 233f9bac91bSBenno Rice * bus_space_handle_t bsh, bus_size_t offset, 234f9bac91bSBenno Rice * u_intN_t *addr, size_t count)); 235f9bac91bSBenno Rice * 236f9bac91bSBenno Rice * Read `count' 1, 2, 4, or 8 byte quantities from bus space 237f9bac91bSBenno Rice * described by tag/handle/offset and copy into buffer provided. 238f9bac91bSBenno Rice */ 239f9bac91bSBenno Rice 2401e1e0032SPeter Grehan static __inline void 2411e1e0032SPeter Grehan bus_space_read_multi_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 2421e1e0032SPeter Grehan u_int8_t *a, size_t c) 2431e1e0032SPeter Grehan { 2441e1e0032SPeter Grehan ins8(__ppc_ba(t, h, o), a, c); 2451e1e0032SPeter Grehan } 246f9bac91bSBenno Rice 2471e1e0032SPeter Grehan static __inline void 2481e1e0032SPeter Grehan bus_space_read_multi_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 2491e1e0032SPeter Grehan u_int16_t *a, size_t c) 2501e1e0032SPeter Grehan { 2511e1e0032SPeter Grehan ins16rb(__ppc_ba(t, h, o), a, c); 2521e1e0032SPeter Grehan } 253f9bac91bSBenno Rice 2541e1e0032SPeter Grehan static __inline void 2551e1e0032SPeter Grehan bus_space_read_multi_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 2561e1e0032SPeter Grehan u_int32_t *a, size_t c) 2571e1e0032SPeter Grehan { 2581e1e0032SPeter Grehan ins32rb(__ppc_ba(t, h, o), a, c); 2591e1e0032SPeter Grehan } 260f9bac91bSBenno Rice 261f9bac91bSBenno Rice #if 0 /* Cause a link error for bus_space_read_multi_8 */ 262f9bac91bSBenno Rice #define bus_space_read_multi_8 !!! unimplemented !!! 263f9bac91bSBenno Rice #endif 264f9bac91bSBenno Rice 2651e1e0032SPeter Grehan static __inline void 2661e1e0032SPeter Grehan bus_space_read_multi_stream_1(bus_space_tag_t t, bus_space_handle_t h, 2671e1e0032SPeter Grehan bus_size_t o, u_int8_t *a, size_t c) 2681e1e0032SPeter Grehan { 2691e1e0032SPeter Grehan ins8(__ppc_ba(t, h, o), a, c); 2701e1e0032SPeter Grehan } 271f9bac91bSBenno Rice 2721e1e0032SPeter Grehan static __inline void 2731e1e0032SPeter Grehan bus_space_read_multi_stream_2(bus_space_tag_t t, bus_space_handle_t h, 2741e1e0032SPeter Grehan bus_size_t o, u_int16_t *a, size_t c) 2751e1e0032SPeter Grehan { 2761e1e0032SPeter Grehan ins16(__ppc_ba(t, h, o), a, c); 2771e1e0032SPeter Grehan } 278f9bac91bSBenno Rice 2791e1e0032SPeter Grehan static __inline void 2801e1e0032SPeter Grehan bus_space_read_multi_stream_4(bus_space_tag_t t, bus_space_handle_t h, 2811e1e0032SPeter Grehan bus_size_t o, u_int32_t *a, size_t c) 2821e1e0032SPeter Grehan { 2831e1e0032SPeter Grehan ins32(__ppc_ba(t, h, o), a, c); 2841e1e0032SPeter Grehan } 285f9bac91bSBenno Rice 286f9bac91bSBenno Rice #if 0 /* Cause a link error for bus_space_read_multi_stream_8 */ 287f9bac91bSBenno Rice #define bus_space_read_multi_stream_8 !!! unimplemented !!! 288f9bac91bSBenno Rice #endif 289f9bac91bSBenno Rice 290f9bac91bSBenno Rice /* 291812344bcSAlfred Perlstein * void bus_space_read_region_N(bus_space_tag_t tag, 292f9bac91bSBenno Rice * bus_space_handle_t bsh, bus_size_t offset, 293f9bac91bSBenno Rice * u_intN_t *addr, size_t count)); 294f9bac91bSBenno Rice * 295f9bac91bSBenno Rice * Read `count' 1, 2, 4, or 8 byte quantities from bus space 296f9bac91bSBenno Rice * described by tag/handle and starting at `offset' and copy into 297f9bac91bSBenno Rice * buffer provided. 298f9bac91bSBenno Rice */ 299f9bac91bSBenno Rice 300f9bac91bSBenno Rice static __inline void 301f9bac91bSBenno Rice bus_space_read_region_1(bus_space_tag_t tag, bus_space_handle_t bsh, 302f9bac91bSBenno Rice bus_size_t offset, u_int8_t *addr, size_t count) 303f9bac91bSBenno Rice { 30425b60a3bSBenno Rice volatile u_int8_t *s = __ppc_ba(tag, bsh, offset); 305f9bac91bSBenno Rice 306f9bac91bSBenno Rice while (count--) 307f9bac91bSBenno Rice *addr++ = *s++; 308f9bac91bSBenno Rice __asm __volatile("eieio; sync"); 309f9bac91bSBenno Rice } 310f9bac91bSBenno Rice 311f9bac91bSBenno Rice static __inline void 312f9bac91bSBenno Rice bus_space_read_region_2(bus_space_tag_t tag, bus_space_handle_t bsh, 313f9bac91bSBenno Rice bus_size_t offset, u_int16_t *addr, size_t count) 314f9bac91bSBenno Rice { 31525b60a3bSBenno Rice volatile u_int16_t *s = __ppc_ba(tag, bsh, offset); 316f9bac91bSBenno Rice 317f9bac91bSBenno Rice while (count--) 318f9bac91bSBenno Rice __asm __volatile("lhbrx %0, 0, %1" : 319f9bac91bSBenno Rice "=r"(*addr++) : "r"(s++)); 320f9bac91bSBenno Rice __asm __volatile("eieio; sync"); 321f9bac91bSBenno Rice } 322f9bac91bSBenno Rice 323f9bac91bSBenno Rice static __inline void 324f9bac91bSBenno Rice bus_space_read_region_4(bus_space_tag_t tag, bus_space_handle_t bsh, 325f9bac91bSBenno Rice bus_size_t offset, u_int32_t *addr, size_t count) 326f9bac91bSBenno Rice { 32725b60a3bSBenno Rice volatile u_int32_t *s = __ppc_ba(tag, bsh, offset); 328f9bac91bSBenno Rice 329f9bac91bSBenno Rice while (count--) 330f9bac91bSBenno Rice __asm __volatile("lwbrx %0, 0, %1" : 331f9bac91bSBenno Rice "=r"(*addr++) : "r"(s++)); 332f9bac91bSBenno Rice __asm __volatile("eieio; sync"); 333f9bac91bSBenno Rice } 334f9bac91bSBenno Rice 335f9bac91bSBenno Rice #if 0 /* Cause a link error for bus_space_read_region_8 */ 336f9bac91bSBenno Rice #define bus_space_read_region_8 !!! unimplemented !!! 337f9bac91bSBenno Rice #endif 338f9bac91bSBenno Rice 339f9bac91bSBenno Rice static __inline void 340f9bac91bSBenno Rice bus_space_read_region_stream_2(bus_space_tag_t tag, bus_space_handle_t bsh, 341f9bac91bSBenno Rice bus_size_t offset, u_int16_t *addr, size_t count) 342f9bac91bSBenno Rice { 34325b60a3bSBenno Rice volatile u_int16_t *s = __ppc_ba(tag, bsh, offset); 344f9bac91bSBenno Rice 345f9bac91bSBenno Rice while (count--) 346f9bac91bSBenno Rice *addr++ = *s++; 347f9bac91bSBenno Rice __asm __volatile("eieio; sync"); 348f9bac91bSBenno Rice } 349f9bac91bSBenno Rice 350f9bac91bSBenno Rice static __inline void 351f9bac91bSBenno Rice bus_space_read_region_stream_4(bus_space_tag_t tag, bus_space_handle_t bsh, 352f9bac91bSBenno Rice bus_size_t offset, u_int32_t *addr, size_t count) 353f9bac91bSBenno Rice { 35425b60a3bSBenno Rice volatile u_int32_t *s = __ppc_ba(tag, bsh, offset); 355f9bac91bSBenno Rice 356f9bac91bSBenno Rice while (count--) 357f9bac91bSBenno Rice *addr++ = *s++; 358f9bac91bSBenno Rice __asm __volatile("eieio; sync"); 359f9bac91bSBenno Rice } 360f9bac91bSBenno Rice 361f9bac91bSBenno Rice #if 0 /* Cause a link error */ 362f9bac91bSBenno Rice #define bus_space_read_region_stream_8 !!! unimplemented !!! 363f9bac91bSBenno Rice #endif 364f9bac91bSBenno Rice 365f9bac91bSBenno Rice /* 366812344bcSAlfred Perlstein * void bus_space_write_N(bus_space_tag_t tag, 367f9bac91bSBenno Rice * bus_space_handle_t bsh, bus_size_t offset, 368f9bac91bSBenno Rice * u_intN_t value)); 369f9bac91bSBenno Rice * 370f9bac91bSBenno Rice * Write the 1, 2, 4, or 8 byte value `value' to bus space 371f9bac91bSBenno Rice * described by tag/handle/offset. 372f9bac91bSBenno Rice */ 373f9bac91bSBenno Rice 3741e1e0032SPeter Grehan static __inline void 3751e1e0032SPeter Grehan bus_space_write_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 3761e1e0032SPeter Grehan uint8_t v) 3771e1e0032SPeter Grehan { 3781e1e0032SPeter Grehan out8(__ppc_ba(t, h, o), v); 3791e1e0032SPeter Grehan } 380f9bac91bSBenno Rice 3811e1e0032SPeter Grehan static __inline void 3821e1e0032SPeter Grehan bus_space_write_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 3831e1e0032SPeter Grehan uint16_t v) 3841e1e0032SPeter Grehan { 3851e1e0032SPeter Grehan out16rb(__ppc_ba(t, h, o), v); 3861e1e0032SPeter Grehan } 3871e1e0032SPeter Grehan 3881e1e0032SPeter Grehan static __inline void 3891e1e0032SPeter Grehan bus_space_write_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 3901e1e0032SPeter Grehan uint32_t v) 3911e1e0032SPeter Grehan { 3921e1e0032SPeter Grehan out32rb(__ppc_ba(t, h, o), v); 3931e1e0032SPeter Grehan } 394f9bac91bSBenno Rice 395f9bac91bSBenno Rice #if 0 /* Cause a link error for bus_space_write_8 */ 396f9bac91bSBenno Rice #define bus_space_write_8 !!! unimplemented !!! 397f9bac91bSBenno Rice #endif 398f9bac91bSBenno Rice 3991e1e0032SPeter Grehan static __inline void 4001e1e0032SPeter Grehan bus_space_write_stream_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 4011e1e0032SPeter Grehan uint8_t v) 4021e1e0032SPeter Grehan { 4031e1e0032SPeter Grehan out8(__ppc_ba(t, h, o), v); 4041e1e0032SPeter Grehan } 4051e1e0032SPeter Grehan 4061e1e0032SPeter Grehan static __inline void 4071e1e0032SPeter Grehan bus_space_write_stream_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 4081e1e0032SPeter Grehan uint16_t v) 4091e1e0032SPeter Grehan { 4101e1e0032SPeter Grehan out16(__ppc_ba(t, h, o), v); 4111e1e0032SPeter Grehan } 4121e1e0032SPeter Grehan 4131e1e0032SPeter Grehan static __inline void 4141e1e0032SPeter Grehan bus_space_write_stream_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 4151e1e0032SPeter Grehan uint32_t v) 4161e1e0032SPeter Grehan { 4171e1e0032SPeter Grehan out32(__ppc_ba(t, h, o), v); 4181e1e0032SPeter Grehan } 4191e1e0032SPeter Grehan 4201e1e0032SPeter Grehan #if 0 /* Cause a link error for bus_space_write_stream_8 */ 4211e1e0032SPeter Grehan #define bus_space_write_stream_8 !!! unimplemented !!! 4221e1e0032SPeter Grehan #endif 4231e1e0032SPeter Grehan 4241e1e0032SPeter Grehan 425f9bac91bSBenno Rice /* 426812344bcSAlfred Perlstein * void bus_space_write_multi_N(bus_space_tag_t tag, 427f9bac91bSBenno Rice * bus_space_handle_t bsh, bus_size_t offset, 428f9bac91bSBenno Rice * const u_intN_t *addr, size_t count)); 429f9bac91bSBenno Rice * 430f9bac91bSBenno Rice * Write `count' 1, 2, 4, or 8 byte quantities from the buffer 431f9bac91bSBenno Rice * provided to bus space described by tag/handle/offset. 432f9bac91bSBenno Rice */ 433f9bac91bSBenno Rice 4341e1e0032SPeter Grehan static __inline void 4351e1e0032SPeter Grehan bus_space_write_multi_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 4361e1e0032SPeter Grehan uint8_t *a, size_t c) 4371e1e0032SPeter Grehan { 4381e1e0032SPeter Grehan outsb(__ppc_ba(t, h, o), a, c); 4391e1e0032SPeter Grehan } 440f9bac91bSBenno Rice 4411e1e0032SPeter Grehan static __inline void 4421e1e0032SPeter Grehan bus_space_write_multi_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 4431e1e0032SPeter Grehan uint16_t *a, size_t c) 4441e1e0032SPeter Grehan { 4451e1e0032SPeter Grehan outsw(__ppc_ba(t, h, o), a, c); 4461e1e0032SPeter Grehan } 447f9bac91bSBenno Rice 4481e1e0032SPeter Grehan static __inline void 4491e1e0032SPeter Grehan bus_space_write_multi_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 4501e1e0032SPeter Grehan uint32_t *a, size_t c) 4511e1e0032SPeter Grehan { 4521e1e0032SPeter Grehan outsl(__ppc_ba(t, h, o), a, c); 4531e1e0032SPeter Grehan } 454f9bac91bSBenno Rice 455f9bac91bSBenno Rice #if 0 456f9bac91bSBenno Rice #define bus_space_write_multi_8 !!! unimplemented !!! 457f9bac91bSBenno Rice #endif 458f9bac91bSBenno Rice 4591e1e0032SPeter Grehan static __inline void 4601e1e0032SPeter Grehan bus_space_write_multi_stream_1(bus_space_tag_t t, bus_space_handle_t h, 4611e1e0032SPeter Grehan bus_size_t o, const u_int8_t *a, size_t c) 4621e1e0032SPeter Grehan { 4631e1e0032SPeter Grehan outsb(__ppc_ba(t, h, o), a, c); 4641e1e0032SPeter Grehan } 465f9bac91bSBenno Rice 4661e1e0032SPeter Grehan static __inline void 4671e1e0032SPeter Grehan bus_space_write_multi_stream_2(bus_space_tag_t t, bus_space_handle_t h, 4681e1e0032SPeter Grehan bus_size_t o, const u_int16_t *a, size_t c) 4691e1e0032SPeter Grehan { 4701e1e0032SPeter Grehan outsw(__ppc_ba(t, h, o), a, c); 4711e1e0032SPeter Grehan } 4721e1e0032SPeter Grehan 4731e1e0032SPeter Grehan static __inline void 4741e1e0032SPeter Grehan bus_space_write_multi_stream_4(bus_space_tag_t t, bus_space_handle_t h, 4751e1e0032SPeter Grehan bus_size_t o, const u_int32_t *a, size_t c) 4761e1e0032SPeter Grehan { 4771e1e0032SPeter Grehan outsl(__ppc_ba(t, h, o), a, c); 4781e1e0032SPeter Grehan } 479f9bac91bSBenno Rice 480f9bac91bSBenno Rice #if 0 481f9bac91bSBenno Rice #define bus_space_write_multi_stream_8 !!! unimplemented !!! 482f9bac91bSBenno Rice #endif 483f9bac91bSBenno Rice 484f9bac91bSBenno Rice /* 485812344bcSAlfred Perlstein * void bus_space_write_region_N(bus_space_tag_t tag, 486f9bac91bSBenno Rice * bus_space_handle_t bsh, bus_size_t offset, 487f9bac91bSBenno Rice * const u_intN_t *addr, size_t count)); 488f9bac91bSBenno Rice * 489f9bac91bSBenno Rice * Write `count' 1, 2, 4, or 8 byte quantities from the buffer provided 490f9bac91bSBenno Rice * to bus space described by tag/handle starting at `offset'. 491f9bac91bSBenno Rice */ 492f9bac91bSBenno Rice 493f9bac91bSBenno Rice static __inline void 494f9bac91bSBenno Rice bus_space_write_region_1(bus_space_tag_t tag, bus_space_handle_t bsh, 495f9bac91bSBenno Rice bus_size_t offset, const u_int8_t *addr, size_t count) 496f9bac91bSBenno Rice { 49725b60a3bSBenno Rice volatile u_int8_t *d = __ppc_ba(tag, bsh, offset); 498f9bac91bSBenno Rice 499f9bac91bSBenno Rice while (count--) 500f9bac91bSBenno Rice *d++ = *addr++; 501f9bac91bSBenno Rice __asm __volatile("eieio; sync"); 502f9bac91bSBenno Rice } 503f9bac91bSBenno Rice 504f9bac91bSBenno Rice static __inline void 505f9bac91bSBenno Rice bus_space_write_region_2(bus_space_tag_t tag, bus_space_handle_t bsh, 506f9bac91bSBenno Rice bus_size_t offset, const u_int16_t *addr, size_t count) 507f9bac91bSBenno Rice { 50825b60a3bSBenno Rice volatile u_int16_t *d = __ppc_ba(tag, bsh, offset); 509f9bac91bSBenno Rice 510f9bac91bSBenno Rice while (count--) 511f9bac91bSBenno Rice __asm __volatile("sthbrx %0, 0, %1" :: 512f9bac91bSBenno Rice "r"(*addr++), "r"(d++)); 513f9bac91bSBenno Rice __asm __volatile("eieio; sync"); 514f9bac91bSBenno Rice } 515f9bac91bSBenno Rice 516f9bac91bSBenno Rice static __inline void 517f9bac91bSBenno Rice bus_space_write_region_4(bus_space_tag_t tag, bus_space_handle_t bsh, 518f9bac91bSBenno Rice bus_size_t offset, const u_int32_t *addr, size_t count) 519f9bac91bSBenno Rice { 52025b60a3bSBenno Rice volatile u_int32_t *d = __ppc_ba(tag, bsh, offset); 521f9bac91bSBenno Rice 522f9bac91bSBenno Rice while (count--) 523f9bac91bSBenno Rice __asm __volatile("stwbrx %0, 0, %1" :: 524f9bac91bSBenno Rice "r"(*addr++), "r"(d++)); 525f9bac91bSBenno Rice __asm __volatile("eieio; sync"); 526f9bac91bSBenno Rice } 527f9bac91bSBenno Rice 528f9bac91bSBenno Rice #if 0 529f9bac91bSBenno Rice #define bus_space_write_region_8 !!! bus_space_write_region_8 unimplemented !!! 530f9bac91bSBenno Rice #endif 531f9bac91bSBenno Rice 532f9bac91bSBenno Rice static __inline void 533f9bac91bSBenno Rice bus_space_write_region_stream_2(bus_space_tag_t tag, bus_space_handle_t bsh, 534f9bac91bSBenno Rice bus_size_t offset, const u_int16_t *addr, size_t count) 535f9bac91bSBenno Rice { 53625b60a3bSBenno Rice volatile u_int16_t *d = __ppc_ba(tag, bsh, offset); 537f9bac91bSBenno Rice 538f9bac91bSBenno Rice while (count--) 539f9bac91bSBenno Rice *d++ = *addr++; 540f9bac91bSBenno Rice __asm __volatile("eieio; sync"); 541f9bac91bSBenno Rice } 542f9bac91bSBenno Rice 543f9bac91bSBenno Rice static __inline void 544f9bac91bSBenno Rice bus_space_write_region_stream_4(bus_space_tag_t tag, bus_space_handle_t bsh, 545f9bac91bSBenno Rice bus_size_t offset, const u_int32_t *addr, size_t count) 546f9bac91bSBenno Rice { 54725b60a3bSBenno Rice volatile u_int32_t *d = __ppc_ba(tag, bsh, offset); 548f9bac91bSBenno Rice 549f9bac91bSBenno Rice while (count--) 550f9bac91bSBenno Rice *d++ = *addr++; 551f9bac91bSBenno Rice __asm __volatile("eieio; sync"); 552f9bac91bSBenno Rice } 553f9bac91bSBenno Rice 554f9bac91bSBenno Rice #if 0 555f9bac91bSBenno Rice #define bus_space_write_region_stream_8 !!! unimplemented !!! 556f9bac91bSBenno Rice #endif 557f9bac91bSBenno Rice 558f9bac91bSBenno Rice /* 559812344bcSAlfred Perlstein * void bus_space_set_multi_N(bus_space_tag_t tag, 560f9bac91bSBenno Rice * bus_space_handle_t bsh, bus_size_t offset, u_intN_t val, 561f9bac91bSBenno Rice * size_t count)); 562f9bac91bSBenno Rice * 563f9bac91bSBenno Rice * Write the 1, 2, 4, or 8 byte value `val' to bus space described 564f9bac91bSBenno Rice * by tag/handle/offset `count' times. 565f9bac91bSBenno Rice */ 566f9bac91bSBenno Rice 567f9bac91bSBenno Rice static __inline void 568f9bac91bSBenno Rice bus_space_set_multi_1(bus_space_tag_t tag, bus_space_handle_t bsh, 569f9bac91bSBenno Rice bus_size_t offset, u_int8_t val, size_t count) 570f9bac91bSBenno Rice { 57125b60a3bSBenno Rice volatile u_int8_t *d = __ppc_ba(tag, bsh, offset); 572f9bac91bSBenno Rice 573f9bac91bSBenno Rice while (count--) 574f9bac91bSBenno Rice *d = val; 575f9bac91bSBenno Rice __asm __volatile("eieio; sync"); 576f9bac91bSBenno Rice } 577f9bac91bSBenno Rice 578f9bac91bSBenno Rice static __inline void 579f9bac91bSBenno Rice bus_space_set_multi_2(bus_space_tag_t tag, bus_space_handle_t bsh, 580f9bac91bSBenno Rice bus_size_t offset, u_int16_t val, size_t count) 581f9bac91bSBenno Rice { 58225b60a3bSBenno Rice volatile u_int16_t *d = __ppc_ba(tag, bsh, offset); 583f9bac91bSBenno Rice 584f9bac91bSBenno Rice while (count--) 585f9bac91bSBenno Rice __asm __volatile("sthbrx %0, 0, %1" :: 586f9bac91bSBenno Rice "r"(val), "r"(d)); 587f9bac91bSBenno Rice __asm __volatile("eieio; sync"); 588f9bac91bSBenno Rice } 589f9bac91bSBenno Rice 590f9bac91bSBenno Rice static __inline void 591f9bac91bSBenno Rice bus_space_set_multi_4(bus_space_tag_t tag, bus_space_handle_t bsh, 592f9bac91bSBenno Rice bus_size_t offset, u_int32_t val, size_t count) 593f9bac91bSBenno Rice { 59425b60a3bSBenno Rice volatile u_int32_t *d = __ppc_ba(tag, bsh, offset); 595f9bac91bSBenno Rice 596f9bac91bSBenno Rice while (count--) 597f9bac91bSBenno Rice __asm __volatile("stwbrx %0, 0, %1" :: 598f9bac91bSBenno Rice "r"(val), "r"(d)); 599f9bac91bSBenno Rice __asm __volatile("eieio; sync"); 600f9bac91bSBenno Rice } 601f9bac91bSBenno Rice 602f9bac91bSBenno Rice #if 0 603f9bac91bSBenno Rice #define bus_space_set_multi_8 !!! bus_space_set_multi_8 unimplemented !!! 604f9bac91bSBenno Rice #endif 605f9bac91bSBenno Rice 606f9bac91bSBenno Rice static __inline void 607f9bac91bSBenno Rice bus_space_set_multi_stream_2(bus_space_tag_t tag, bus_space_handle_t bsh, 608f9bac91bSBenno Rice bus_size_t offset, u_int16_t val, size_t count) 609f9bac91bSBenno Rice { 61025b60a3bSBenno Rice volatile u_int16_t *d = __ppc_ba(tag, bsh, offset); 611f9bac91bSBenno Rice 612f9bac91bSBenno Rice while (count--) 613f9bac91bSBenno Rice *d = val; 614f9bac91bSBenno Rice __asm __volatile("eieio; sync"); 615f9bac91bSBenno Rice } 616f9bac91bSBenno Rice 617f9bac91bSBenno Rice static __inline void 618f9bac91bSBenno Rice bus_space_set_multi_stream_4(bus_space_tag_t tag, bus_space_handle_t bsh, 619f9bac91bSBenno Rice bus_size_t offset, u_int32_t val, size_t count) 620f9bac91bSBenno Rice { 62125b60a3bSBenno Rice volatile u_int32_t *d = __ppc_ba(tag, bsh, offset); 622f9bac91bSBenno Rice 623f9bac91bSBenno Rice while (count--) 624f9bac91bSBenno Rice *d = val; 625f9bac91bSBenno Rice __asm __volatile("eieio; sync"); 626f9bac91bSBenno Rice } 627f9bac91bSBenno Rice 628f9bac91bSBenno Rice #if 0 629f9bac91bSBenno Rice #define bus_space_set_multi_stream_8 !!! unimplemented !!! 630f9bac91bSBenno Rice #endif 631f9bac91bSBenno Rice 632f9bac91bSBenno Rice /* 633812344bcSAlfred Perlstein * void bus_space_set_region_N(bus_space_tag_t tag, 634f9bac91bSBenno Rice * bus_space_handle_t bsh, bus_size_t offset, u_intN_t val, 635f9bac91bSBenno Rice * size_t count)); 636f9bac91bSBenno Rice * 637f9bac91bSBenno Rice * Write `count' 1, 2, 4, or 8 byte value `val' to bus space described 638f9bac91bSBenno Rice * by tag/handle starting at `offset'. 639f9bac91bSBenno Rice */ 640f9bac91bSBenno Rice 641f9bac91bSBenno Rice static __inline void 642f9bac91bSBenno Rice bus_space_set_region_1(bus_space_tag_t tag, bus_space_handle_t bsh, 643f9bac91bSBenno Rice bus_size_t offset, u_int8_t val, size_t count) 644f9bac91bSBenno Rice { 64525b60a3bSBenno Rice volatile u_int8_t *d = __ppc_ba(tag, bsh, offset); 646f9bac91bSBenno Rice 647f9bac91bSBenno Rice while (count--) 648f9bac91bSBenno Rice *d++ = val; 649f9bac91bSBenno Rice __asm __volatile("eieio; sync"); 650f9bac91bSBenno Rice } 651f9bac91bSBenno Rice 652f9bac91bSBenno Rice static __inline void 653f9bac91bSBenno Rice bus_space_set_region_2(bus_space_tag_t tag, bus_space_handle_t bsh, 654f9bac91bSBenno Rice bus_size_t offset, u_int16_t val, size_t count) 655f9bac91bSBenno Rice { 65625b60a3bSBenno Rice volatile u_int16_t *d = __ppc_ba(tag, bsh, offset); 657f9bac91bSBenno Rice 658f9bac91bSBenno Rice while (count--) 659f9bac91bSBenno Rice __asm __volatile("sthbrx %0, 0, %1" :: 660f9bac91bSBenno Rice "r"(val), "r"(d++)); 661f9bac91bSBenno Rice __asm __volatile("eieio; sync"); 662f9bac91bSBenno Rice } 663f9bac91bSBenno Rice 664f9bac91bSBenno Rice static __inline void 665f9bac91bSBenno Rice bus_space_set_region_4(bus_space_tag_t tag, bus_space_handle_t bsh, 666f9bac91bSBenno Rice bus_size_t offset, u_int32_t val, size_t count) 667f9bac91bSBenno Rice { 66825b60a3bSBenno Rice volatile u_int32_t *d = __ppc_ba(tag, bsh, offset); 669f9bac91bSBenno Rice 670f9bac91bSBenno Rice while (count--) 671f9bac91bSBenno Rice __asm __volatile("stwbrx %0, 0, %1" :: 672f9bac91bSBenno Rice "r"(val), "r"(d++)); 673f9bac91bSBenno Rice __asm __volatile("eieio; sync"); 674f9bac91bSBenno Rice } 675f9bac91bSBenno Rice 676f9bac91bSBenno Rice #if 0 677f9bac91bSBenno Rice #define bus_space_set_region_8 !!! bus_space_set_region_8 unimplemented !!! 678f9bac91bSBenno Rice #endif 679f9bac91bSBenno Rice 680f9bac91bSBenno Rice static __inline void 681f9bac91bSBenno Rice bus_space_set_region_stream_2(bus_space_tag_t tag, bus_space_handle_t bsh, 682f9bac91bSBenno Rice bus_size_t offset, u_int16_t val, size_t count) 683f9bac91bSBenno Rice { 68425b60a3bSBenno Rice volatile u_int16_t *d = __ppc_ba(tag, bsh, offset); 685f9bac91bSBenno Rice 686f9bac91bSBenno Rice while (count--) 687f9bac91bSBenno Rice *d++ = val; 688f9bac91bSBenno Rice __asm __volatile("eieio; sync"); 689f9bac91bSBenno Rice } 690f9bac91bSBenno Rice 691f9bac91bSBenno Rice static __inline void 692f9bac91bSBenno Rice bus_space_set_region_stream_4(bus_space_tag_t tag, bus_space_handle_t bsh, 693f9bac91bSBenno Rice bus_size_t offset, u_int32_t val, size_t count) 694f9bac91bSBenno Rice { 69525b60a3bSBenno Rice volatile u_int32_t *d = __ppc_ba(tag, bsh, offset); 696f9bac91bSBenno Rice 697f9bac91bSBenno Rice while (count--) 698f9bac91bSBenno Rice *d++ = val; 699f9bac91bSBenno Rice __asm __volatile("eieio; sync"); 700f9bac91bSBenno Rice } 701f9bac91bSBenno Rice 702f9bac91bSBenno Rice #if 0 703f9bac91bSBenno Rice #define bus_space_set_region_stream_8 !!! unimplemented !!! 704f9bac91bSBenno Rice #endif 705f9bac91bSBenno Rice 706f9bac91bSBenno Rice /* 707812344bcSAlfred Perlstein * void bus_space_copy_region_N(bus_space_tag_t tag, 708f9bac91bSBenno Rice * bus_space_handle_t bsh1, bus_size_t off1, 709f9bac91bSBenno Rice * bus_space_handle_t bsh2, bus_size_t off2, 710f9bac91bSBenno Rice * size_t count)); 711f9bac91bSBenno Rice * 712f9bac91bSBenno Rice * Copy `count' 1, 2, 4, or 8 byte values from bus space starting 713f9bac91bSBenno Rice * at tag/bsh1/off1 to bus space starting at tag/bsh2/off2. 714f9bac91bSBenno Rice */ 715f9bac91bSBenno Rice 716f9bac91bSBenno Rice /* XXX IMPLEMENT bus_space_copy_N() XXX */ 717f9bac91bSBenno Rice 718f9bac91bSBenno Rice /* 719f9bac91bSBenno Rice * Bus read/write barrier methods. 720f9bac91bSBenno Rice * 721812344bcSAlfred Perlstein * void bus_space_barrier(bus_space_tag_t tag, 722f9bac91bSBenno Rice * bus_space_handle_t bsh, bus_size_t offset, 723f9bac91bSBenno Rice * bus_size_t len, int flags)); 724f9bac91bSBenno Rice * 725f9bac91bSBenno Rice * Note: the macppc does not currently require barriers, but we must 726f9bac91bSBenno Rice * provide the flags to MI code. 727f9bac91bSBenno Rice */ 728f9bac91bSBenno Rice 729f9bac91bSBenno Rice #define BUS_SPACE_BARRIER_READ 0x01 /* force read barrier */ 730f9bac91bSBenno Rice #define BUS_SPACE_BARRIER_WRITE 0x02 /* force write barrier */ 731f9bac91bSBenno Rice 732911e488aSPeter Grehan static __inline void 733911e488aSPeter Grehan bus_space_barrier(bus_space_tag_t tag __unused, 734911e488aSPeter Grehan bus_space_handle_t bsh __unused, bus_size_t offset __unused, 735911e488aSPeter Grehan bus_size_t len __unused, int flags __unused) 736911e488aSPeter Grehan { 737911e488aSPeter Grehan __asm __volatile("" : : : "memory"); 738911e488aSPeter Grehan } 739911e488aSPeter Grehan 740911e488aSPeter Grehan 741f9bac91bSBenno Rice #define BUS_SPACE_ALIGNED_POINTER(p, t) ALIGNED_POINTER(p, t) 742f9bac91bSBenno Rice 7435974e5c7SScott Long #include <machine/bus_dma.h> 744f9bac91bSBenno Rice 745f9bac91bSBenno Rice #endif /* _MACPPC_BUS_H_ */ 746