1e5acd89cSAndrew Turner /* $NetBSD: bus.h,v 1.11 2003/07/28 17:35:54 thorpej Exp $ */ 2e5acd89cSAndrew Turner 3e5acd89cSAndrew Turner /*- 4e5acd89cSAndrew Turner * Copyright (c) 1996, 1997, 1998, 2001 The NetBSD Foundation, Inc. 5e5acd89cSAndrew Turner * All rights reserved. 6e5acd89cSAndrew Turner * 7e5acd89cSAndrew Turner * This code is derived from software contributed to The NetBSD Foundation 8e5acd89cSAndrew Turner * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility, 9e5acd89cSAndrew Turner * NASA Ames Research Center. 10e5acd89cSAndrew Turner * 11e5acd89cSAndrew Turner * Redistribution and use in source and binary forms, with or without 12e5acd89cSAndrew Turner * modification, are permitted provided that the following conditions 13e5acd89cSAndrew Turner * are met: 14e5acd89cSAndrew Turner * 1. Redistributions of source code must retain the above copyright 15e5acd89cSAndrew Turner * notice, this list of conditions and the following disclaimer. 16e5acd89cSAndrew Turner * 2. Redistributions in binary form must reproduce the above copyright 17e5acd89cSAndrew Turner * notice, this list of conditions and the following disclaimer in the 18e5acd89cSAndrew Turner * documentation and/or other materials provided with the distribution. 19e5acd89cSAndrew Turner * 20e5acd89cSAndrew Turner * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 21e5acd89cSAndrew Turner * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 22e5acd89cSAndrew Turner * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 23e5acd89cSAndrew Turner * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 24e5acd89cSAndrew Turner * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25e5acd89cSAndrew Turner * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26e5acd89cSAndrew Turner * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27e5acd89cSAndrew Turner * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28e5acd89cSAndrew Turner * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29e5acd89cSAndrew Turner * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30e5acd89cSAndrew Turner * POSSIBILITY OF SUCH DAMAGE. 31e5acd89cSAndrew Turner */ 32e5acd89cSAndrew Turner 33e5acd89cSAndrew Turner /*- 34e5acd89cSAndrew Turner * Copyright (c) 1996 Charles M. Hannum. All rights reserved. 35e5acd89cSAndrew Turner * Copyright (c) 1996 Christopher G. Demetriou. All rights reserved. 36e5acd89cSAndrew Turner * 37e5acd89cSAndrew Turner * Redistribution and use in source and binary forms, with or without 38e5acd89cSAndrew Turner * modification, are permitted provided that the following conditions 39e5acd89cSAndrew Turner * are met: 40e5acd89cSAndrew Turner * 1. Redistributions of source code must retain the above copyright 41e5acd89cSAndrew Turner * notice, this list of conditions and the following disclaimer. 42e5acd89cSAndrew Turner * 2. Redistributions in binary form must reproduce the above copyright 43e5acd89cSAndrew Turner * notice, this list of conditions and the following disclaimer in the 44e5acd89cSAndrew Turner * documentation and/or other materials provided with the distribution. 45e5acd89cSAndrew Turner * 3. All advertising materials mentioning features or use of this software 46e5acd89cSAndrew Turner * must display the following acknowledgement: 47e5acd89cSAndrew Turner * This product includes software developed by Christopher G. Demetriou 48e5acd89cSAndrew Turner * for the NetBSD Project. 49e5acd89cSAndrew Turner * 4. The name of the author may not be used to endorse or promote products 50e5acd89cSAndrew Turner * derived from this software without specific prior written permission 51e5acd89cSAndrew Turner * 52e5acd89cSAndrew Turner * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 53e5acd89cSAndrew Turner * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 54e5acd89cSAndrew Turner * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 55e5acd89cSAndrew Turner * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 56e5acd89cSAndrew Turner * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 57e5acd89cSAndrew Turner * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 58e5acd89cSAndrew Turner * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 59e5acd89cSAndrew Turner * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 60e5acd89cSAndrew Turner * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 61e5acd89cSAndrew Turner * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 62e5acd89cSAndrew Turner * 63e5acd89cSAndrew Turner * From: sys/arm/include/bus.h 64e5acd89cSAndrew Turner */ 65e5acd89cSAndrew Turner 66d5d97bedSMike Karels #ifdef __arm__ 67d5d97bedSMike Karels #include <arm/bus.h> 68d5d97bedSMike Karels #else /* !__arm__ */ 69d5d97bedSMike Karels 70e5acd89cSAndrew Turner #ifndef _MACHINE_BUS_H_ 71e5acd89cSAndrew Turner #define _MACHINE_BUS_H_ 72e5acd89cSAndrew Turner 73e5acd89cSAndrew Turner #include <machine/_bus.h> 74e5acd89cSAndrew Turner 75e5acd89cSAndrew Turner #define BUS_SPACE_ALIGNED_POINTER(p, t) ALIGNED_POINTER(p, t) 76e5acd89cSAndrew Turner 77e5acd89cSAndrew Turner #define BUS_SPACE_MAXADDR_24BIT 0xFFFFFFUL 78e5acd89cSAndrew Turner #define BUS_SPACE_MAXADDR_32BIT 0xFFFFFFFFUL 79*5484c3d6SKa Ho Ng #define BUS_SPACE_MAXADDR_36BIT 0xFFFFFFFFFUL 802cd0c529SMike Karels #define BUS_SPACE_MAXADDR_40BIT 0xFFFFFFFFFFUL 81e5acd89cSAndrew Turner #define BUS_SPACE_MAXSIZE_24BIT 0xFFFFFFUL 82e5acd89cSAndrew Turner #define BUS_SPACE_MAXSIZE_32BIT 0xFFFFFFFFUL 832cd0c529SMike Karels #define BUS_SPACE_MAXSIZE_40BIT 0xFFFFFFFFFFUL 84e5acd89cSAndrew Turner 85e5acd89cSAndrew Turner #define BUS_SPACE_MAXADDR 0xFFFFFFFFFFFFFFFFUL 86e5acd89cSAndrew Turner #define BUS_SPACE_MAXSIZE 0xFFFFFFFFFFFFFFFFUL 87e5acd89cSAndrew Turner 88e5acd89cSAndrew Turner #define BUS_SPACE_MAP_CACHEABLE 0x01 89e5acd89cSAndrew Turner #define BUS_SPACE_MAP_LINEAR 0x02 90e5acd89cSAndrew Turner #define BUS_SPACE_MAP_PREFETCHABLE 0x04 912abd4f85SAndrew Turner #define BUS_SPACE_MAP_NONPOSTED 0x08 92e5acd89cSAndrew Turner 93e5acd89cSAndrew Turner #define BUS_SPACE_UNRESTRICTED (~0) 94e5acd89cSAndrew Turner 95e5acd89cSAndrew Turner #define BUS_SPACE_BARRIER_READ 0x01 96e5acd89cSAndrew Turner #define BUS_SPACE_BARRIER_WRITE 0x02 97e5acd89cSAndrew Turner 98e5acd89cSAndrew Turner struct bus_space { 99e5acd89cSAndrew Turner /* cookie */ 100e5acd89cSAndrew Turner void *bs_cookie; 101e5acd89cSAndrew Turner 102e5acd89cSAndrew Turner /* mapping/unmapping */ 103e5acd89cSAndrew Turner int (*bs_map) (void *, bus_addr_t, bus_size_t, 104e5acd89cSAndrew Turner int, bus_space_handle_t *); 105e5acd89cSAndrew Turner void (*bs_unmap) (void *, bus_space_handle_t, bus_size_t); 106e5acd89cSAndrew Turner int (*bs_subregion) (void *, bus_space_handle_t, 107e5acd89cSAndrew Turner bus_size_t, bus_size_t, bus_space_handle_t *); 108e5acd89cSAndrew Turner 109e5acd89cSAndrew Turner /* allocation/deallocation */ 110e5acd89cSAndrew Turner int (*bs_alloc) (void *, bus_addr_t, bus_addr_t, 111e5acd89cSAndrew Turner bus_size_t, bus_size_t, bus_size_t, int, 112e5acd89cSAndrew Turner bus_addr_t *, bus_space_handle_t *); 113e5acd89cSAndrew Turner void (*bs_free) (void *, bus_space_handle_t, 114e5acd89cSAndrew Turner bus_size_t); 115e5acd89cSAndrew Turner 116e5acd89cSAndrew Turner /* get kernel virtual address */ 117e5acd89cSAndrew Turner /* barrier */ 118e5acd89cSAndrew Turner void (*bs_barrier) (void *, bus_space_handle_t, 119e5acd89cSAndrew Turner bus_size_t, bus_size_t, int); 120e5acd89cSAndrew Turner 121e5acd89cSAndrew Turner /* read single */ 122e5acd89cSAndrew Turner u_int8_t (*bs_r_1) (void *, bus_space_handle_t, bus_size_t); 123e5acd89cSAndrew Turner u_int16_t (*bs_r_2) (void *, bus_space_handle_t, bus_size_t); 124e5acd89cSAndrew Turner u_int32_t (*bs_r_4) (void *, bus_space_handle_t, bus_size_t); 125e5acd89cSAndrew Turner u_int64_t (*bs_r_8) (void *, bus_space_handle_t, bus_size_t); 126e5acd89cSAndrew Turner 127e5acd89cSAndrew Turner /* read multiple */ 128e5acd89cSAndrew Turner void (*bs_rm_1) (void *, bus_space_handle_t, bus_size_t, 129e5acd89cSAndrew Turner u_int8_t *, bus_size_t); 130e5acd89cSAndrew Turner void (*bs_rm_2) (void *, bus_space_handle_t, bus_size_t, 131e5acd89cSAndrew Turner u_int16_t *, bus_size_t); 132e5acd89cSAndrew Turner void (*bs_rm_4) (void *, bus_space_handle_t, 133e5acd89cSAndrew Turner bus_size_t, u_int32_t *, bus_size_t); 134e5acd89cSAndrew Turner void (*bs_rm_8) (void *, bus_space_handle_t, 135e5acd89cSAndrew Turner bus_size_t, u_int64_t *, bus_size_t); 136e5acd89cSAndrew Turner 137e5acd89cSAndrew Turner /* read region */ 138e5acd89cSAndrew Turner void (*bs_rr_1) (void *, bus_space_handle_t, 139e5acd89cSAndrew Turner bus_size_t, u_int8_t *, bus_size_t); 140e5acd89cSAndrew Turner void (*bs_rr_2) (void *, bus_space_handle_t, 141e5acd89cSAndrew Turner bus_size_t, u_int16_t *, bus_size_t); 142e5acd89cSAndrew Turner void (*bs_rr_4) (void *, bus_space_handle_t, 143e5acd89cSAndrew Turner bus_size_t, u_int32_t *, bus_size_t); 144e5acd89cSAndrew Turner void (*bs_rr_8) (void *, bus_space_handle_t, 145e5acd89cSAndrew Turner bus_size_t, u_int64_t *, bus_size_t); 146e5acd89cSAndrew Turner 147e5acd89cSAndrew Turner /* write single */ 148e5acd89cSAndrew Turner void (*bs_w_1) (void *, bus_space_handle_t, 149e5acd89cSAndrew Turner bus_size_t, u_int8_t); 150e5acd89cSAndrew Turner void (*bs_w_2) (void *, bus_space_handle_t, 151e5acd89cSAndrew Turner bus_size_t, u_int16_t); 152e5acd89cSAndrew Turner void (*bs_w_4) (void *, bus_space_handle_t, 153e5acd89cSAndrew Turner bus_size_t, u_int32_t); 154e5acd89cSAndrew Turner void (*bs_w_8) (void *, bus_space_handle_t, 155e5acd89cSAndrew Turner bus_size_t, u_int64_t); 156e5acd89cSAndrew Turner 157e5acd89cSAndrew Turner /* write multiple */ 158e5acd89cSAndrew Turner void (*bs_wm_1) (void *, bus_space_handle_t, 159e5acd89cSAndrew Turner bus_size_t, const u_int8_t *, bus_size_t); 160e5acd89cSAndrew Turner void (*bs_wm_2) (void *, bus_space_handle_t, 161e5acd89cSAndrew Turner bus_size_t, const u_int16_t *, bus_size_t); 162e5acd89cSAndrew Turner void (*bs_wm_4) (void *, bus_space_handle_t, 163e5acd89cSAndrew Turner bus_size_t, const u_int32_t *, bus_size_t); 164e5acd89cSAndrew Turner void (*bs_wm_8) (void *, bus_space_handle_t, 165e5acd89cSAndrew Turner bus_size_t, const u_int64_t *, bus_size_t); 166e5acd89cSAndrew Turner 167e5acd89cSAndrew Turner /* write region */ 168e5acd89cSAndrew Turner void (*bs_wr_1) (void *, bus_space_handle_t, 169e5acd89cSAndrew Turner bus_size_t, const u_int8_t *, bus_size_t); 170e5acd89cSAndrew Turner void (*bs_wr_2) (void *, bus_space_handle_t, 171e5acd89cSAndrew Turner bus_size_t, const u_int16_t *, bus_size_t); 172e5acd89cSAndrew Turner void (*bs_wr_4) (void *, bus_space_handle_t, 173e5acd89cSAndrew Turner bus_size_t, const u_int32_t *, bus_size_t); 174e5acd89cSAndrew Turner void (*bs_wr_8) (void *, bus_space_handle_t, 175e5acd89cSAndrew Turner bus_size_t, const u_int64_t *, bus_size_t); 176e5acd89cSAndrew Turner 177e5acd89cSAndrew Turner /* set multiple */ 178e5acd89cSAndrew Turner void (*bs_sm_1) (void *, bus_space_handle_t, 179e5acd89cSAndrew Turner bus_size_t, u_int8_t, bus_size_t); 180e5acd89cSAndrew Turner void (*bs_sm_2) (void *, bus_space_handle_t, 181e5acd89cSAndrew Turner bus_size_t, u_int16_t, bus_size_t); 182e5acd89cSAndrew Turner void (*bs_sm_4) (void *, bus_space_handle_t, 183e5acd89cSAndrew Turner bus_size_t, u_int32_t, bus_size_t); 184e5acd89cSAndrew Turner void (*bs_sm_8) (void *, bus_space_handle_t, 185e5acd89cSAndrew Turner bus_size_t, u_int64_t, bus_size_t); 186e5acd89cSAndrew Turner 187e5acd89cSAndrew Turner /* set region */ 188e5acd89cSAndrew Turner void (*bs_sr_1) (void *, bus_space_handle_t, 189e5acd89cSAndrew Turner bus_size_t, u_int8_t, bus_size_t); 190e5acd89cSAndrew Turner void (*bs_sr_2) (void *, bus_space_handle_t, 191e5acd89cSAndrew Turner bus_size_t, u_int16_t, bus_size_t); 192e5acd89cSAndrew Turner void (*bs_sr_4) (void *, bus_space_handle_t, 193e5acd89cSAndrew Turner bus_size_t, u_int32_t, bus_size_t); 194e5acd89cSAndrew Turner void (*bs_sr_8) (void *, bus_space_handle_t, 195e5acd89cSAndrew Turner bus_size_t, u_int64_t, bus_size_t); 196e5acd89cSAndrew Turner 197e5acd89cSAndrew Turner /* copy */ 198e5acd89cSAndrew Turner void (*bs_c_1) (void *, bus_space_handle_t, bus_size_t, 199e5acd89cSAndrew Turner bus_space_handle_t, bus_size_t, bus_size_t); 200e5acd89cSAndrew Turner void (*bs_c_2) (void *, bus_space_handle_t, bus_size_t, 201e5acd89cSAndrew Turner bus_space_handle_t, bus_size_t, bus_size_t); 202e5acd89cSAndrew Turner void (*bs_c_4) (void *, bus_space_handle_t, bus_size_t, 203e5acd89cSAndrew Turner bus_space_handle_t, bus_size_t, bus_size_t); 204e5acd89cSAndrew Turner void (*bs_c_8) (void *, bus_space_handle_t, bus_size_t, 205e5acd89cSAndrew Turner bus_space_handle_t, bus_size_t, bus_size_t); 206e5acd89cSAndrew Turner 207e5acd89cSAndrew Turner /* read single stream */ 208e5acd89cSAndrew Turner u_int8_t (*bs_r_1_s) (void *, bus_space_handle_t, bus_size_t); 209e5acd89cSAndrew Turner u_int16_t (*bs_r_2_s) (void *, bus_space_handle_t, bus_size_t); 210e5acd89cSAndrew Turner u_int32_t (*bs_r_4_s) (void *, bus_space_handle_t, bus_size_t); 211e5acd89cSAndrew Turner u_int64_t (*bs_r_8_s) (void *, bus_space_handle_t, bus_size_t); 212e5acd89cSAndrew Turner 213e5acd89cSAndrew Turner /* read multiple stream */ 214e5acd89cSAndrew Turner void (*bs_rm_1_s) (void *, bus_space_handle_t, bus_size_t, 215e5acd89cSAndrew Turner u_int8_t *, bus_size_t); 216e5acd89cSAndrew Turner void (*bs_rm_2_s) (void *, bus_space_handle_t, bus_size_t, 217e5acd89cSAndrew Turner u_int16_t *, bus_size_t); 218e5acd89cSAndrew Turner void (*bs_rm_4_s) (void *, bus_space_handle_t, 219e5acd89cSAndrew Turner bus_size_t, u_int32_t *, bus_size_t); 220e5acd89cSAndrew Turner void (*bs_rm_8_s) (void *, bus_space_handle_t, 221e5acd89cSAndrew Turner bus_size_t, u_int64_t *, bus_size_t); 222e5acd89cSAndrew Turner 223e5acd89cSAndrew Turner /* read region stream */ 224e5acd89cSAndrew Turner void (*bs_rr_1_s) (void *, bus_space_handle_t, 225e5acd89cSAndrew Turner bus_size_t, u_int8_t *, bus_size_t); 226e5acd89cSAndrew Turner void (*bs_rr_2_s) (void *, bus_space_handle_t, 227e5acd89cSAndrew Turner bus_size_t, u_int16_t *, bus_size_t); 228e5acd89cSAndrew Turner void (*bs_rr_4_s) (void *, bus_space_handle_t, 229e5acd89cSAndrew Turner bus_size_t, u_int32_t *, bus_size_t); 230e5acd89cSAndrew Turner void (*bs_rr_8_s) (void *, bus_space_handle_t, 231e5acd89cSAndrew Turner bus_size_t, u_int64_t *, bus_size_t); 232e5acd89cSAndrew Turner 233e5acd89cSAndrew Turner /* write single stream */ 234e5acd89cSAndrew Turner void (*bs_w_1_s) (void *, bus_space_handle_t, 235e5acd89cSAndrew Turner bus_size_t, u_int8_t); 236e5acd89cSAndrew Turner void (*bs_w_2_s) (void *, bus_space_handle_t, 237e5acd89cSAndrew Turner bus_size_t, u_int16_t); 238e5acd89cSAndrew Turner void (*bs_w_4_s) (void *, bus_space_handle_t, 239e5acd89cSAndrew Turner bus_size_t, u_int32_t); 240e5acd89cSAndrew Turner void (*bs_w_8_s) (void *, bus_space_handle_t, 241e5acd89cSAndrew Turner bus_size_t, u_int64_t); 242e5acd89cSAndrew Turner 243e5acd89cSAndrew Turner /* write multiple stream */ 244e5acd89cSAndrew Turner void (*bs_wm_1_s) (void *, bus_space_handle_t, 245e5acd89cSAndrew Turner bus_size_t, const u_int8_t *, bus_size_t); 246e5acd89cSAndrew Turner void (*bs_wm_2_s) (void *, bus_space_handle_t, 247e5acd89cSAndrew Turner bus_size_t, const u_int16_t *, bus_size_t); 248e5acd89cSAndrew Turner void (*bs_wm_4_s) (void *, bus_space_handle_t, 249e5acd89cSAndrew Turner bus_size_t, const u_int32_t *, bus_size_t); 250e5acd89cSAndrew Turner void (*bs_wm_8_s) (void *, bus_space_handle_t, 251e5acd89cSAndrew Turner bus_size_t, const u_int64_t *, bus_size_t); 252e5acd89cSAndrew Turner 253e5acd89cSAndrew Turner /* write region stream */ 254e5acd89cSAndrew Turner void (*bs_wr_1_s) (void *, bus_space_handle_t, 255e5acd89cSAndrew Turner bus_size_t, const u_int8_t *, bus_size_t); 256e5acd89cSAndrew Turner void (*bs_wr_2_s) (void *, bus_space_handle_t, 257e5acd89cSAndrew Turner bus_size_t, const u_int16_t *, bus_size_t); 258e5acd89cSAndrew Turner void (*bs_wr_4_s) (void *, bus_space_handle_t, 259e5acd89cSAndrew Turner bus_size_t, const u_int32_t *, bus_size_t); 260e5acd89cSAndrew Turner void (*bs_wr_8_s) (void *, bus_space_handle_t, 261e5acd89cSAndrew Turner bus_size_t, const u_int64_t *, bus_size_t); 2625998328eSAndrew Turner 26395a85c12SMichal Meloun /* peek */ 26495a85c12SMichal Meloun int (*bs_peek_1)(void *, bus_space_handle_t, 26595a85c12SMichal Meloun bus_size_t , uint8_t *); 26695a85c12SMichal Meloun int (*bs_peek_2)(void *, bus_space_handle_t, 26795a85c12SMichal Meloun bus_size_t , uint16_t *); 26895a85c12SMichal Meloun int (*bs_peek_4)(void *, bus_space_handle_t, 26995a85c12SMichal Meloun bus_size_t , uint32_t *); 27095a85c12SMichal Meloun int (*bs_peek_8)(void *, bus_space_handle_t, 27195a85c12SMichal Meloun bus_size_t , uint64_t *); 2725998328eSAndrew Turner 27395a85c12SMichal Meloun /* poke */ 27495a85c12SMichal Meloun int (*bs_poke_1)(void *, bus_space_handle_t, 27595a85c12SMichal Meloun bus_size_t, uint8_t); 27695a85c12SMichal Meloun int (*bs_poke_2)(void *, bus_space_handle_t, 27795a85c12SMichal Meloun bus_size_t, uint16_t); 27895a85c12SMichal Meloun int (*bs_poke_4)(void *, bus_space_handle_t, 27995a85c12SMichal Meloun bus_size_t, uint32_t); 28095a85c12SMichal Meloun int (*bs_poke_8)(void *, bus_space_handle_t, 28195a85c12SMichal Meloun bus_size_t, uint64_t); 282e5acd89cSAndrew Turner }; 283e5acd89cSAndrew Turner 284c5500a01SMitchell Horne #if defined(SAN_NEEDS_INTERCEPTORS) && !defined(SAN_RUNTIME) 285c5500a01SMitchell Horne #include <sys/bus_san.h> 286c5500a01SMitchell Horne #else 287c5500a01SMitchell Horne 288e5acd89cSAndrew Turner /* 289e5acd89cSAndrew Turner * Utility macros; INTERNAL USE ONLY. 290e5acd89cSAndrew Turner */ 291e5acd89cSAndrew Turner #define __bs_c(a,b) __CONCAT(a,b) 292e5acd89cSAndrew Turner #define __bs_opname(op,size) __bs_c(__bs_c(__bs_c(bs_,op),_),size) 293e5acd89cSAndrew Turner 294e5acd89cSAndrew Turner #define __bs_rs(sz, t, h, o) \ 295e5acd89cSAndrew Turner (*(t)->__bs_opname(r,sz))((t)->bs_cookie, h, o) 296e5acd89cSAndrew Turner #define __bs_ws(sz, t, h, o, v) \ 297e5acd89cSAndrew Turner (*(t)->__bs_opname(w,sz))((t)->bs_cookie, h, o, v) 298e5acd89cSAndrew Turner #define __bs_nonsingle(type, sz, t, h, o, a, c) \ 299e5acd89cSAndrew Turner (*(t)->__bs_opname(type,sz))((t)->bs_cookie, h, o, a, c) 300e5acd89cSAndrew Turner #define __bs_set(type, sz, t, h, o, v, c) \ 301e5acd89cSAndrew Turner (*(t)->__bs_opname(type,sz))((t)->bs_cookie, h, o, v, c) 302e5acd89cSAndrew Turner #define __bs_copy(sz, t, h1, o1, h2, o2, cnt) \ 303e5acd89cSAndrew Turner (*(t)->__bs_opname(c,sz))((t)->bs_cookie, h1, o1, h2, o2, cnt) 304e5acd89cSAndrew Turner 305e5acd89cSAndrew Turner #define __bs_opname_s(op,size) __bs_c(__bs_c(__bs_c(__bs_c(bs_,op),_),size),_s) 306e5acd89cSAndrew Turner #define __bs_rs_s(sz, t, h, o) \ 307e5acd89cSAndrew Turner (*(t)->__bs_opname_s(r,sz))((t)->bs_cookie, h, o) 308e5acd89cSAndrew Turner #define __bs_ws_s(sz, t, h, o, v) \ 309e5acd89cSAndrew Turner (*(t)->__bs_opname_s(w,sz))((t)->bs_cookie, h, o, v) 31095a85c12SMichal Meloun #define __bs_peek(sz, t, h, o, vp) \ 31195a85c12SMichal Meloun (*(t)->__bs_opname(peek, sz))((t)->bs_cookie, h, o, vp) 31295a85c12SMichal Meloun #define __bs_poke(sz, t, h, o, v) \ 31395a85c12SMichal Meloun (*(t)->__bs_opname(poke, sz))((t)->bs_cookie, h, o, v) 314e5acd89cSAndrew Turner #define __bs_nonsingle_s(type, sz, t, h, o, a, c) \ 315e5acd89cSAndrew Turner (*(t)->__bs_opname_s(type,sz))((t)->bs_cookie, h, o, a, c) 316e5acd89cSAndrew Turner 317e5acd89cSAndrew Turner /* 318e5acd89cSAndrew Turner * Mapping and unmapping operations. 319e5acd89cSAndrew Turner */ 320e5acd89cSAndrew Turner #define bus_space_map(t, a, s, c, hp) \ 321e5acd89cSAndrew Turner (*(t)->bs_map)((t)->bs_cookie, (a), (s), (c), (hp)) 322e5acd89cSAndrew Turner #define bus_space_unmap(t, h, s) \ 323e5acd89cSAndrew Turner (*(t)->bs_unmap)((t)->bs_cookie, (h), (s)) 324e5acd89cSAndrew Turner #define bus_space_subregion(t, h, o, s, hp) \ 325e5acd89cSAndrew Turner (*(t)->bs_subregion)((t)->bs_cookie, (h), (o), (s), (hp)) 326e5acd89cSAndrew Turner 327e5acd89cSAndrew Turner /* 328e5acd89cSAndrew Turner * Allocation and deallocation operations. 329e5acd89cSAndrew Turner */ 330e5acd89cSAndrew Turner #define bus_space_alloc(t, rs, re, s, a, b, c, ap, hp) \ 331e5acd89cSAndrew Turner (*(t)->bs_alloc)((t)->bs_cookie, (rs), (re), (s), (a), (b), \ 332e5acd89cSAndrew Turner (c), (ap), (hp)) 333e5acd89cSAndrew Turner #define bus_space_free(t, h, s) \ 334e5acd89cSAndrew Turner (*(t)->bs_free)((t)->bs_cookie, (h), (s)) 335e5acd89cSAndrew Turner 336e5acd89cSAndrew Turner /* 337e5acd89cSAndrew Turner * Bus barrier operations. 338e5acd89cSAndrew Turner */ 339e5acd89cSAndrew Turner #define bus_space_barrier(t, h, o, l, f) \ 340e5acd89cSAndrew Turner (*(t)->bs_barrier)((t)->bs_cookie, (h), (o), (l), (f)) 341e5acd89cSAndrew Turner 342e5acd89cSAndrew Turner /* 343e5acd89cSAndrew Turner * Bus read (single) operations. 344e5acd89cSAndrew Turner */ 345e5acd89cSAndrew Turner #define bus_space_read_1(t, h, o) __bs_rs(1,(t),(h),(o)) 346e5acd89cSAndrew Turner #define bus_space_read_2(t, h, o) __bs_rs(2,(t),(h),(o)) 347e5acd89cSAndrew Turner #define bus_space_read_4(t, h, o) __bs_rs(4,(t),(h),(o)) 348e5acd89cSAndrew Turner #define bus_space_read_8(t, h, o) __bs_rs(8,(t),(h),(o)) 349e5acd89cSAndrew Turner 350e5acd89cSAndrew Turner #define bus_space_read_stream_1(t, h, o) __bs_rs_s(1,(t), (h), (o)) 351e5acd89cSAndrew Turner #define bus_space_read_stream_2(t, h, o) __bs_rs_s(2,(t), (h), (o)) 352e5acd89cSAndrew Turner #define bus_space_read_stream_4(t, h, o) __bs_rs_s(4,(t), (h), (o)) 353a2bb7f7aSAndrew Turner #define bus_space_read_stream_8(t, h, o) __bs_rs_s(8,(t), (h), (o)) 354e5acd89cSAndrew Turner 355e5acd89cSAndrew Turner /* 356e5acd89cSAndrew Turner * Bus read multiple operations. 357e5acd89cSAndrew Turner */ 358e5acd89cSAndrew Turner #define bus_space_read_multi_1(t, h, o, a, c) \ 359e5acd89cSAndrew Turner __bs_nonsingle(rm,1,(t),(h),(o),(a),(c)) 360e5acd89cSAndrew Turner #define bus_space_read_multi_2(t, h, o, a, c) \ 361e5acd89cSAndrew Turner __bs_nonsingle(rm,2,(t),(h),(o),(a),(c)) 362e5acd89cSAndrew Turner #define bus_space_read_multi_4(t, h, o, a, c) \ 363e5acd89cSAndrew Turner __bs_nonsingle(rm,4,(t),(h),(o),(a),(c)) 364e5acd89cSAndrew Turner #define bus_space_read_multi_8(t, h, o, a, c) \ 365e5acd89cSAndrew Turner __bs_nonsingle(rm,8,(t),(h),(o),(a),(c)) 366e5acd89cSAndrew Turner 367e5acd89cSAndrew Turner #define bus_space_read_multi_stream_1(t, h, o, a, c) \ 368e5acd89cSAndrew Turner __bs_nonsingle_s(rm,1,(t),(h),(o),(a),(c)) 369e5acd89cSAndrew Turner #define bus_space_read_multi_stream_2(t, h, o, a, c) \ 370e5acd89cSAndrew Turner __bs_nonsingle_s(rm,2,(t),(h),(o),(a),(c)) 371e5acd89cSAndrew Turner #define bus_space_read_multi_stream_4(t, h, o, a, c) \ 372e5acd89cSAndrew Turner __bs_nonsingle_s(rm,4,(t),(h),(o),(a),(c)) 373e5acd89cSAndrew Turner #define bus_space_read_multi_stream_8(t, h, o, a, c) \ 374e5acd89cSAndrew Turner __bs_nonsingle_s(rm,8,(t),(h),(o),(a),(c)) 375e5acd89cSAndrew Turner 376e5acd89cSAndrew Turner /* 377e5acd89cSAndrew Turner * Bus read region operations. 378e5acd89cSAndrew Turner */ 379e5acd89cSAndrew Turner #define bus_space_read_region_1(t, h, o, a, c) \ 380e5acd89cSAndrew Turner __bs_nonsingle(rr,1,(t),(h),(o),(a),(c)) 381e5acd89cSAndrew Turner #define bus_space_read_region_2(t, h, o, a, c) \ 382e5acd89cSAndrew Turner __bs_nonsingle(rr,2,(t),(h),(o),(a),(c)) 383e5acd89cSAndrew Turner #define bus_space_read_region_4(t, h, o, a, c) \ 384e5acd89cSAndrew Turner __bs_nonsingle(rr,4,(t),(h),(o),(a),(c)) 385e5acd89cSAndrew Turner #define bus_space_read_region_8(t, h, o, a, c) \ 386e5acd89cSAndrew Turner __bs_nonsingle(rr,8,(t),(h),(o),(a),(c)) 387e5acd89cSAndrew Turner 388e5acd89cSAndrew Turner #define bus_space_read_region_stream_1(t, h, o, a, c) \ 389e5acd89cSAndrew Turner __bs_nonsingle_s(rr,1,(t),(h),(o),(a),(c)) 390e5acd89cSAndrew Turner #define bus_space_read_region_stream_2(t, h, o, a, c) \ 391e5acd89cSAndrew Turner __bs_nonsingle_s(rr,2,(t),(h),(o),(a),(c)) 392e5acd89cSAndrew Turner #define bus_space_read_region_stream_4(t, h, o, a, c) \ 393e5acd89cSAndrew Turner __bs_nonsingle_s(rr,4,(t),(h),(o),(a),(c)) 394e5acd89cSAndrew Turner #define bus_space_read_region_stream_8(t, h, o, a, c) \ 395e5acd89cSAndrew Turner __bs_nonsingle_s(rr,8,(t),(h),(o),(a),(c)) 396e5acd89cSAndrew Turner 397e5acd89cSAndrew Turner /* 398e5acd89cSAndrew Turner * Bus write (single) operations. 399e5acd89cSAndrew Turner */ 400e5acd89cSAndrew Turner #define bus_space_write_1(t, h, o, v) __bs_ws(1,(t),(h),(o),(v)) 401e5acd89cSAndrew Turner #define bus_space_write_2(t, h, o, v) __bs_ws(2,(t),(h),(o),(v)) 402e5acd89cSAndrew Turner #define bus_space_write_4(t, h, o, v) __bs_ws(4,(t),(h),(o),(v)) 403e5acd89cSAndrew Turner #define bus_space_write_8(t, h, o, v) __bs_ws(8,(t),(h),(o),(v)) 404e5acd89cSAndrew Turner 405e5acd89cSAndrew Turner #define bus_space_write_stream_1(t, h, o, v) __bs_ws_s(1,(t),(h),(o),(v)) 406e5acd89cSAndrew Turner #define bus_space_write_stream_2(t, h, o, v) __bs_ws_s(2,(t),(h),(o),(v)) 407e5acd89cSAndrew Turner #define bus_space_write_stream_4(t, h, o, v) __bs_ws_s(4,(t),(h),(o),(v)) 408e5acd89cSAndrew Turner #define bus_space_write_stream_8(t, h, o, v) __bs_ws_s(8,(t),(h),(o),(v)) 409e5acd89cSAndrew Turner 410e5acd89cSAndrew Turner /* 411e5acd89cSAndrew Turner * Bus write multiple operations. 412e5acd89cSAndrew Turner */ 413e5acd89cSAndrew Turner #define bus_space_write_multi_1(t, h, o, a, c) \ 414e5acd89cSAndrew Turner __bs_nonsingle(wm,1,(t),(h),(o),(a),(c)) 415e5acd89cSAndrew Turner #define bus_space_write_multi_2(t, h, o, a, c) \ 416e5acd89cSAndrew Turner __bs_nonsingle(wm,2,(t),(h),(o),(a),(c)) 417e5acd89cSAndrew Turner #define bus_space_write_multi_4(t, h, o, a, c) \ 418e5acd89cSAndrew Turner __bs_nonsingle(wm,4,(t),(h),(o),(a),(c)) 419e5acd89cSAndrew Turner #define bus_space_write_multi_8(t, h, o, a, c) \ 420e5acd89cSAndrew Turner __bs_nonsingle(wm,8,(t),(h),(o),(a),(c)) 421e5acd89cSAndrew Turner 422e5acd89cSAndrew Turner #define bus_space_write_multi_stream_1(t, h, o, a, c) \ 423e5acd89cSAndrew Turner __bs_nonsingle_s(wm,1,(t),(h),(o),(a),(c)) 424e5acd89cSAndrew Turner #define bus_space_write_multi_stream_2(t, h, o, a, c) \ 425e5acd89cSAndrew Turner __bs_nonsingle_s(wm,2,(t),(h),(o),(a),(c)) 426e5acd89cSAndrew Turner #define bus_space_write_multi_stream_4(t, h, o, a, c) \ 427e5acd89cSAndrew Turner __bs_nonsingle_s(wm,4,(t),(h),(o),(a),(c)) 428e5acd89cSAndrew Turner #define bus_space_write_multi_stream_8(t, h, o, a, c) \ 429e5acd89cSAndrew Turner __bs_nonsingle_s(wm,8,(t),(h),(o),(a),(c)) 430e5acd89cSAndrew Turner 431e5acd89cSAndrew Turner /* 432e5acd89cSAndrew Turner * Bus write region operations. 433e5acd89cSAndrew Turner */ 434e5acd89cSAndrew Turner #define bus_space_write_region_1(t, h, o, a, c) \ 435e5acd89cSAndrew Turner __bs_nonsingle(wr,1,(t),(h),(o),(a),(c)) 436e5acd89cSAndrew Turner #define bus_space_write_region_2(t, h, o, a, c) \ 437e5acd89cSAndrew Turner __bs_nonsingle(wr,2,(t),(h),(o),(a),(c)) 438e5acd89cSAndrew Turner #define bus_space_write_region_4(t, h, o, a, c) \ 439e5acd89cSAndrew Turner __bs_nonsingle(wr,4,(t),(h),(o),(a),(c)) 440e5acd89cSAndrew Turner #define bus_space_write_region_8(t, h, o, a, c) \ 441e5acd89cSAndrew Turner __bs_nonsingle(wr,8,(t),(h),(o),(a),(c)) 442e5acd89cSAndrew Turner 443e5acd89cSAndrew Turner #define bus_space_write_region_stream_1(t, h, o, a, c) \ 444e5acd89cSAndrew Turner __bs_nonsingle_s(wr,1,(t),(h),(o),(a),(c)) 445e5acd89cSAndrew Turner #define bus_space_write_region_stream_2(t, h, o, a, c) \ 446e5acd89cSAndrew Turner __bs_nonsingle_s(wr,2,(t),(h),(o),(a),(c)) 447e5acd89cSAndrew Turner #define bus_space_write_region_stream_4(t, h, o, a, c) \ 448e5acd89cSAndrew Turner __bs_nonsingle_s(wr,4,(t),(h),(o),(a),(c)) 449e5acd89cSAndrew Turner #define bus_space_write_region_stream_8(t, h, o, a, c) \ 450e5acd89cSAndrew Turner __bs_nonsingle_s(wr,8,(t),(h),(o),(a),(c)) 451e5acd89cSAndrew Turner 452e5acd89cSAndrew Turner /* 453e5acd89cSAndrew Turner * Set multiple operations. 454e5acd89cSAndrew Turner */ 455e5acd89cSAndrew Turner #define bus_space_set_multi_1(t, h, o, v, c) \ 456e5acd89cSAndrew Turner __bs_set(sm,1,(t),(h),(o),(v),(c)) 457e5acd89cSAndrew Turner #define bus_space_set_multi_2(t, h, o, v, c) \ 458e5acd89cSAndrew Turner __bs_set(sm,2,(t),(h),(o),(v),(c)) 459e5acd89cSAndrew Turner #define bus_space_set_multi_4(t, h, o, v, c) \ 460e5acd89cSAndrew Turner __bs_set(sm,4,(t),(h),(o),(v),(c)) 461e5acd89cSAndrew Turner #define bus_space_set_multi_8(t, h, o, v, c) \ 462e5acd89cSAndrew Turner __bs_set(sm,8,(t),(h),(o),(v),(c)) 463e5acd89cSAndrew Turner 464f8e38b42SMitchell Horne #define bus_space_set_multi_stream_1(t, h, o, v, c) \ 465f8e38b42SMitchell Horne bus_space_set_multi_1((t), (h), (o), (v), (c)) 466f8e38b42SMitchell Horne #define bus_space_set_multi_stream_2(t, h, o, v, c) \ 467f8e38b42SMitchell Horne bus_space_set_multi_2((t), (h), (o), (v), (c)) 468f8e38b42SMitchell Horne #define bus_space_set_multi_stream_4(t, h, o, v, c) \ 469f8e38b42SMitchell Horne bus_space_set_multi_4((t), (h), (o), (v), (c)) 470f8e38b42SMitchell Horne #define bus_space_set_multi_stream_8(t, h, o, v, c) \ 471f8e38b42SMitchell Horne bus_space_set_multi_8((t), (h), (o), (v), (c)) 472f8e38b42SMitchell Horne 473e5acd89cSAndrew Turner /* 474e5acd89cSAndrew Turner * Set region operations. 475e5acd89cSAndrew Turner */ 476e5acd89cSAndrew Turner #define bus_space_set_region_1(t, h, o, v, c) \ 477e5acd89cSAndrew Turner __bs_set(sr,1,(t),(h),(o),(v),(c)) 478e5acd89cSAndrew Turner #define bus_space_set_region_2(t, h, o, v, c) \ 479e5acd89cSAndrew Turner __bs_set(sr,2,(t),(h),(o),(v),(c)) 480e5acd89cSAndrew Turner #define bus_space_set_region_4(t, h, o, v, c) \ 481e5acd89cSAndrew Turner __bs_set(sr,4,(t),(h),(o),(v),(c)) 482e5acd89cSAndrew Turner #define bus_space_set_region_8(t, h, o, v, c) \ 483e5acd89cSAndrew Turner __bs_set(sr,8,(t),(h),(o),(v),(c)) 484e5acd89cSAndrew Turner 485f8e38b42SMitchell Horne #define bus_space_set_region_stream_1(t, h, o, v, c) \ 486f8e38b42SMitchell Horne bus_space_set_region_1((t), (h), (o), (v), (c)) 487f8e38b42SMitchell Horne #define bus_space_set_region_stream_2(t, h, o, v, c) \ 488f8e38b42SMitchell Horne bus_space_set_region_2((t), (h), (o), (v), (c)) 489f8e38b42SMitchell Horne #define bus_space_set_region_stream_4(t, h, o, v, c) \ 490f8e38b42SMitchell Horne bus_space_set_region_4((t), (h), (o), (v), (c)) 491f8e38b42SMitchell Horne #define bus_space_set_region_stream_8(t, h, o, v, c) \ 492f8e38b42SMitchell Horne bus_space_set_region_8((t), (h), (o), (v), (c)) 493f8e38b42SMitchell Horne 494e5acd89cSAndrew Turner /* 495e5acd89cSAndrew Turner * Copy operations. 496e5acd89cSAndrew Turner */ 497e5acd89cSAndrew Turner #define bus_space_copy_region_1(t, h1, o1, h2, o2, c) \ 498e5acd89cSAndrew Turner __bs_copy(1, t, h1, o1, h2, o2, c) 499e5acd89cSAndrew Turner #define bus_space_copy_region_2(t, h1, o1, h2, o2, c) \ 500e5acd89cSAndrew Turner __bs_copy(2, t, h1, o1, h2, o2, c) 501e5acd89cSAndrew Turner #define bus_space_copy_region_4(t, h1, o1, h2, o2, c) \ 502e5acd89cSAndrew Turner __bs_copy(4, t, h1, o1, h2, o2, c) 503e5acd89cSAndrew Turner #define bus_space_copy_region_8(t, h1, o1, h2, o2, c) \ 504e5acd89cSAndrew Turner __bs_copy(8, t, h1, o1, h2, o2, c) 505e5acd89cSAndrew Turner 50695a85c12SMichal Meloun /* 50795a85c12SMichal Meloun * Poke (checked write) operations. 50895a85c12SMichal Meloun */ 50995a85c12SMichal Meloun #define bus_space_poke_1(t, h, o, v) __bs_poke(1, (t), (h), (o), (v)) 51095a85c12SMichal Meloun #define bus_space_poke_2(t, h, o, v) __bs_poke(2, (t), (h), (o), (v)) 51195a85c12SMichal Meloun #define bus_space_poke_4(t, h, o, v) __bs_poke(4, (t), (h), (o), (v)) 51295a85c12SMichal Meloun #define bus_space_poke_8(t, h, o, v) __bs_poke(8, (t), (h), (o), (v)) 51395a85c12SMichal Meloun 51495a85c12SMichal Meloun /* 51595a85c12SMichal Meloun * Peek (checked read) operations. 51695a85c12SMichal Meloun */ 51795a85c12SMichal Meloun #define bus_space_peek_1(t, h, o, vp) __bs_peek(1, (t), (h), (o), (vp)) 51895a85c12SMichal Meloun #define bus_space_peek_2(t, h, o, vp) __bs_peek(2, (t), (h), (o), (vp)) 51995a85c12SMichal Meloun #define bus_space_peek_4(t, h, o, vp) __bs_peek(4, (t), (h), (o), (vp)) 52095a85c12SMichal Meloun #define bus_space_peek_8(t, h, o, vp) __bs_peek(8, (t), (h), (o), (vp)) 52195a85c12SMichal Meloun 522a90d053bSMark Johnston #endif /* !SAN_NEEDS_INTERCEPTORS */ 523849aef49SAndrew Turner 524e5acd89cSAndrew Turner #include <machine/bus_dma.h> 525e5acd89cSAndrew Turner 526e5acd89cSAndrew Turner #endif /* _MACHINE_BUS_H_ */ 527d5d97bedSMike Karels 528d5d97bedSMike Karels #endif /* !__arm__ */ 529