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 792cd0c529SMike Karels #define BUS_SPACE_MAXADDR_40BIT 0xFFFFFFFFFFUL 80e5acd89cSAndrew Turner #define BUS_SPACE_MAXSIZE_24BIT 0xFFFFFFUL 81e5acd89cSAndrew Turner #define BUS_SPACE_MAXSIZE_32BIT 0xFFFFFFFFUL 822cd0c529SMike Karels #define BUS_SPACE_MAXSIZE_40BIT 0xFFFFFFFFFFUL 83e5acd89cSAndrew Turner 84e5acd89cSAndrew Turner #define BUS_SPACE_MAXADDR 0xFFFFFFFFFFFFFFFFUL 85e5acd89cSAndrew Turner #define BUS_SPACE_MAXSIZE 0xFFFFFFFFFFFFFFFFUL 86e5acd89cSAndrew Turner 87e5acd89cSAndrew Turner #define BUS_SPACE_MAP_CACHEABLE 0x01 88e5acd89cSAndrew Turner #define BUS_SPACE_MAP_LINEAR 0x02 89e5acd89cSAndrew Turner #define BUS_SPACE_MAP_PREFETCHABLE 0x04 902abd4f85SAndrew Turner #define BUS_SPACE_MAP_NONPOSTED 0x08 91e5acd89cSAndrew Turner 92e5acd89cSAndrew Turner #define BUS_SPACE_UNRESTRICTED (~0) 93e5acd89cSAndrew Turner 94e5acd89cSAndrew Turner #define BUS_SPACE_BARRIER_READ 0x01 95e5acd89cSAndrew Turner #define BUS_SPACE_BARRIER_WRITE 0x02 96e5acd89cSAndrew Turner 97e5acd89cSAndrew Turner struct bus_space { 98e5acd89cSAndrew Turner /* cookie */ 99e5acd89cSAndrew Turner void *bs_cookie; 100e5acd89cSAndrew Turner 101e5acd89cSAndrew Turner /* mapping/unmapping */ 102e5acd89cSAndrew Turner int (*bs_map) (void *, bus_addr_t, bus_size_t, 103e5acd89cSAndrew Turner int, bus_space_handle_t *); 104e5acd89cSAndrew Turner void (*bs_unmap) (void *, bus_space_handle_t, bus_size_t); 105e5acd89cSAndrew Turner int (*bs_subregion) (void *, bus_space_handle_t, 106e5acd89cSAndrew Turner bus_size_t, bus_size_t, bus_space_handle_t *); 107e5acd89cSAndrew Turner 108e5acd89cSAndrew Turner /* allocation/deallocation */ 109e5acd89cSAndrew Turner int (*bs_alloc) (void *, bus_addr_t, bus_addr_t, 110e5acd89cSAndrew Turner bus_size_t, bus_size_t, bus_size_t, int, 111e5acd89cSAndrew Turner bus_addr_t *, bus_space_handle_t *); 112e5acd89cSAndrew Turner void (*bs_free) (void *, bus_space_handle_t, 113e5acd89cSAndrew Turner bus_size_t); 114e5acd89cSAndrew Turner 115e5acd89cSAndrew Turner /* get kernel virtual address */ 116e5acd89cSAndrew Turner /* barrier */ 117e5acd89cSAndrew Turner void (*bs_barrier) (void *, bus_space_handle_t, 118e5acd89cSAndrew Turner bus_size_t, bus_size_t, int); 119e5acd89cSAndrew Turner 120e5acd89cSAndrew Turner /* read single */ 121e5acd89cSAndrew Turner u_int8_t (*bs_r_1) (void *, bus_space_handle_t, bus_size_t); 122e5acd89cSAndrew Turner u_int16_t (*bs_r_2) (void *, bus_space_handle_t, bus_size_t); 123e5acd89cSAndrew Turner u_int32_t (*bs_r_4) (void *, bus_space_handle_t, bus_size_t); 124e5acd89cSAndrew Turner u_int64_t (*bs_r_8) (void *, bus_space_handle_t, bus_size_t); 125e5acd89cSAndrew Turner 126e5acd89cSAndrew Turner /* read multiple */ 127e5acd89cSAndrew Turner void (*bs_rm_1) (void *, bus_space_handle_t, bus_size_t, 128e5acd89cSAndrew Turner u_int8_t *, bus_size_t); 129e5acd89cSAndrew Turner void (*bs_rm_2) (void *, bus_space_handle_t, bus_size_t, 130e5acd89cSAndrew Turner u_int16_t *, bus_size_t); 131e5acd89cSAndrew Turner void (*bs_rm_4) (void *, bus_space_handle_t, 132e5acd89cSAndrew Turner bus_size_t, u_int32_t *, bus_size_t); 133e5acd89cSAndrew Turner void (*bs_rm_8) (void *, bus_space_handle_t, 134e5acd89cSAndrew Turner bus_size_t, u_int64_t *, bus_size_t); 135e5acd89cSAndrew Turner 136e5acd89cSAndrew Turner /* read region */ 137e5acd89cSAndrew Turner void (*bs_rr_1) (void *, bus_space_handle_t, 138e5acd89cSAndrew Turner bus_size_t, u_int8_t *, bus_size_t); 139e5acd89cSAndrew Turner void (*bs_rr_2) (void *, bus_space_handle_t, 140e5acd89cSAndrew Turner bus_size_t, u_int16_t *, bus_size_t); 141e5acd89cSAndrew Turner void (*bs_rr_4) (void *, bus_space_handle_t, 142e5acd89cSAndrew Turner bus_size_t, u_int32_t *, bus_size_t); 143e5acd89cSAndrew Turner void (*bs_rr_8) (void *, bus_space_handle_t, 144e5acd89cSAndrew Turner bus_size_t, u_int64_t *, bus_size_t); 145e5acd89cSAndrew Turner 146e5acd89cSAndrew Turner /* write single */ 147e5acd89cSAndrew Turner void (*bs_w_1) (void *, bus_space_handle_t, 148e5acd89cSAndrew Turner bus_size_t, u_int8_t); 149e5acd89cSAndrew Turner void (*bs_w_2) (void *, bus_space_handle_t, 150e5acd89cSAndrew Turner bus_size_t, u_int16_t); 151e5acd89cSAndrew Turner void (*bs_w_4) (void *, bus_space_handle_t, 152e5acd89cSAndrew Turner bus_size_t, u_int32_t); 153e5acd89cSAndrew Turner void (*bs_w_8) (void *, bus_space_handle_t, 154e5acd89cSAndrew Turner bus_size_t, u_int64_t); 155e5acd89cSAndrew Turner 156e5acd89cSAndrew Turner /* write multiple */ 157e5acd89cSAndrew Turner void (*bs_wm_1) (void *, bus_space_handle_t, 158e5acd89cSAndrew Turner bus_size_t, const u_int8_t *, bus_size_t); 159e5acd89cSAndrew Turner void (*bs_wm_2) (void *, bus_space_handle_t, 160e5acd89cSAndrew Turner bus_size_t, const u_int16_t *, bus_size_t); 161e5acd89cSAndrew Turner void (*bs_wm_4) (void *, bus_space_handle_t, 162e5acd89cSAndrew Turner bus_size_t, const u_int32_t *, bus_size_t); 163e5acd89cSAndrew Turner void (*bs_wm_8) (void *, bus_space_handle_t, 164e5acd89cSAndrew Turner bus_size_t, const u_int64_t *, bus_size_t); 165e5acd89cSAndrew Turner 166e5acd89cSAndrew Turner /* write region */ 167e5acd89cSAndrew Turner void (*bs_wr_1) (void *, bus_space_handle_t, 168e5acd89cSAndrew Turner bus_size_t, const u_int8_t *, bus_size_t); 169e5acd89cSAndrew Turner void (*bs_wr_2) (void *, bus_space_handle_t, 170e5acd89cSAndrew Turner bus_size_t, const u_int16_t *, bus_size_t); 171e5acd89cSAndrew Turner void (*bs_wr_4) (void *, bus_space_handle_t, 172e5acd89cSAndrew Turner bus_size_t, const u_int32_t *, bus_size_t); 173e5acd89cSAndrew Turner void (*bs_wr_8) (void *, bus_space_handle_t, 174e5acd89cSAndrew Turner bus_size_t, const u_int64_t *, bus_size_t); 175e5acd89cSAndrew Turner 176e5acd89cSAndrew Turner /* set multiple */ 177e5acd89cSAndrew Turner void (*bs_sm_1) (void *, bus_space_handle_t, 178e5acd89cSAndrew Turner bus_size_t, u_int8_t, bus_size_t); 179e5acd89cSAndrew Turner void (*bs_sm_2) (void *, bus_space_handle_t, 180e5acd89cSAndrew Turner bus_size_t, u_int16_t, bus_size_t); 181e5acd89cSAndrew Turner void (*bs_sm_4) (void *, bus_space_handle_t, 182e5acd89cSAndrew Turner bus_size_t, u_int32_t, bus_size_t); 183e5acd89cSAndrew Turner void (*bs_sm_8) (void *, bus_space_handle_t, 184e5acd89cSAndrew Turner bus_size_t, u_int64_t, bus_size_t); 185e5acd89cSAndrew Turner 186e5acd89cSAndrew Turner /* set region */ 187e5acd89cSAndrew Turner void (*bs_sr_1) (void *, bus_space_handle_t, 188e5acd89cSAndrew Turner bus_size_t, u_int8_t, bus_size_t); 189e5acd89cSAndrew Turner void (*bs_sr_2) (void *, bus_space_handle_t, 190e5acd89cSAndrew Turner bus_size_t, u_int16_t, bus_size_t); 191e5acd89cSAndrew Turner void (*bs_sr_4) (void *, bus_space_handle_t, 192e5acd89cSAndrew Turner bus_size_t, u_int32_t, bus_size_t); 193e5acd89cSAndrew Turner void (*bs_sr_8) (void *, bus_space_handle_t, 194e5acd89cSAndrew Turner bus_size_t, u_int64_t, bus_size_t); 195e5acd89cSAndrew Turner 196e5acd89cSAndrew Turner /* copy */ 197e5acd89cSAndrew Turner void (*bs_c_1) (void *, bus_space_handle_t, bus_size_t, 198e5acd89cSAndrew Turner bus_space_handle_t, bus_size_t, bus_size_t); 199e5acd89cSAndrew Turner void (*bs_c_2) (void *, bus_space_handle_t, bus_size_t, 200e5acd89cSAndrew Turner bus_space_handle_t, bus_size_t, bus_size_t); 201e5acd89cSAndrew Turner void (*bs_c_4) (void *, bus_space_handle_t, bus_size_t, 202e5acd89cSAndrew Turner bus_space_handle_t, bus_size_t, bus_size_t); 203e5acd89cSAndrew Turner void (*bs_c_8) (void *, bus_space_handle_t, bus_size_t, 204e5acd89cSAndrew Turner bus_space_handle_t, bus_size_t, bus_size_t); 205e5acd89cSAndrew Turner 206e5acd89cSAndrew Turner /* read single stream */ 207e5acd89cSAndrew Turner u_int8_t (*bs_r_1_s) (void *, bus_space_handle_t, bus_size_t); 208e5acd89cSAndrew Turner u_int16_t (*bs_r_2_s) (void *, bus_space_handle_t, bus_size_t); 209e5acd89cSAndrew Turner u_int32_t (*bs_r_4_s) (void *, bus_space_handle_t, bus_size_t); 210e5acd89cSAndrew Turner u_int64_t (*bs_r_8_s) (void *, bus_space_handle_t, bus_size_t); 211e5acd89cSAndrew Turner 212e5acd89cSAndrew Turner /* read multiple stream */ 213e5acd89cSAndrew Turner void (*bs_rm_1_s) (void *, bus_space_handle_t, bus_size_t, 214e5acd89cSAndrew Turner u_int8_t *, bus_size_t); 215e5acd89cSAndrew Turner void (*bs_rm_2_s) (void *, bus_space_handle_t, bus_size_t, 216e5acd89cSAndrew Turner u_int16_t *, bus_size_t); 217e5acd89cSAndrew Turner void (*bs_rm_4_s) (void *, bus_space_handle_t, 218e5acd89cSAndrew Turner bus_size_t, u_int32_t *, bus_size_t); 219e5acd89cSAndrew Turner void (*bs_rm_8_s) (void *, bus_space_handle_t, 220e5acd89cSAndrew Turner bus_size_t, u_int64_t *, bus_size_t); 221e5acd89cSAndrew Turner 222e5acd89cSAndrew Turner /* read region stream */ 223e5acd89cSAndrew Turner void (*bs_rr_1_s) (void *, bus_space_handle_t, 224e5acd89cSAndrew Turner bus_size_t, u_int8_t *, bus_size_t); 225e5acd89cSAndrew Turner void (*bs_rr_2_s) (void *, bus_space_handle_t, 226e5acd89cSAndrew Turner bus_size_t, u_int16_t *, bus_size_t); 227e5acd89cSAndrew Turner void (*bs_rr_4_s) (void *, bus_space_handle_t, 228e5acd89cSAndrew Turner bus_size_t, u_int32_t *, bus_size_t); 229e5acd89cSAndrew Turner void (*bs_rr_8_s) (void *, bus_space_handle_t, 230e5acd89cSAndrew Turner bus_size_t, u_int64_t *, bus_size_t); 231e5acd89cSAndrew Turner 232e5acd89cSAndrew Turner /* write single stream */ 233e5acd89cSAndrew Turner void (*bs_w_1_s) (void *, bus_space_handle_t, 234e5acd89cSAndrew Turner bus_size_t, u_int8_t); 235e5acd89cSAndrew Turner void (*bs_w_2_s) (void *, bus_space_handle_t, 236e5acd89cSAndrew Turner bus_size_t, u_int16_t); 237e5acd89cSAndrew Turner void (*bs_w_4_s) (void *, bus_space_handle_t, 238e5acd89cSAndrew Turner bus_size_t, u_int32_t); 239e5acd89cSAndrew Turner void (*bs_w_8_s) (void *, bus_space_handle_t, 240e5acd89cSAndrew Turner bus_size_t, u_int64_t); 241e5acd89cSAndrew Turner 242e5acd89cSAndrew Turner /* write multiple stream */ 243e5acd89cSAndrew Turner void (*bs_wm_1_s) (void *, bus_space_handle_t, 244e5acd89cSAndrew Turner bus_size_t, const u_int8_t *, bus_size_t); 245e5acd89cSAndrew Turner void (*bs_wm_2_s) (void *, bus_space_handle_t, 246e5acd89cSAndrew Turner bus_size_t, const u_int16_t *, bus_size_t); 247e5acd89cSAndrew Turner void (*bs_wm_4_s) (void *, bus_space_handle_t, 248e5acd89cSAndrew Turner bus_size_t, const u_int32_t *, bus_size_t); 249e5acd89cSAndrew Turner void (*bs_wm_8_s) (void *, bus_space_handle_t, 250e5acd89cSAndrew Turner bus_size_t, const u_int64_t *, bus_size_t); 251e5acd89cSAndrew Turner 252e5acd89cSAndrew Turner /* write region stream */ 253e5acd89cSAndrew Turner void (*bs_wr_1_s) (void *, bus_space_handle_t, 254e5acd89cSAndrew Turner bus_size_t, const u_int8_t *, bus_size_t); 255e5acd89cSAndrew Turner void (*bs_wr_2_s) (void *, bus_space_handle_t, 256e5acd89cSAndrew Turner bus_size_t, const u_int16_t *, bus_size_t); 257e5acd89cSAndrew Turner void (*bs_wr_4_s) (void *, bus_space_handle_t, 258e5acd89cSAndrew Turner bus_size_t, const u_int32_t *, bus_size_t); 259e5acd89cSAndrew Turner void (*bs_wr_8_s) (void *, bus_space_handle_t, 260e5acd89cSAndrew Turner bus_size_t, const u_int64_t *, bus_size_t); 2615998328eSAndrew Turner 26295a85c12SMichal Meloun /* peek */ 26395a85c12SMichal Meloun int (*bs_peek_1)(void *, bus_space_handle_t, 26495a85c12SMichal Meloun bus_size_t , uint8_t *); 26595a85c12SMichal Meloun int (*bs_peek_2)(void *, bus_space_handle_t, 26695a85c12SMichal Meloun bus_size_t , uint16_t *); 26795a85c12SMichal Meloun int (*bs_peek_4)(void *, bus_space_handle_t, 26895a85c12SMichal Meloun bus_size_t , uint32_t *); 26995a85c12SMichal Meloun int (*bs_peek_8)(void *, bus_space_handle_t, 27095a85c12SMichal Meloun bus_size_t , uint64_t *); 2715998328eSAndrew Turner 27295a85c12SMichal Meloun /* poke */ 27395a85c12SMichal Meloun int (*bs_poke_1)(void *, bus_space_handle_t, 27495a85c12SMichal Meloun bus_size_t, uint8_t); 27595a85c12SMichal Meloun int (*bs_poke_2)(void *, bus_space_handle_t, 27695a85c12SMichal Meloun bus_size_t, uint16_t); 27795a85c12SMichal Meloun int (*bs_poke_4)(void *, bus_space_handle_t, 27895a85c12SMichal Meloun bus_size_t, uint32_t); 27995a85c12SMichal Meloun int (*bs_poke_8)(void *, bus_space_handle_t, 28095a85c12SMichal Meloun bus_size_t, uint64_t); 281e5acd89cSAndrew Turner }; 282e5acd89cSAndrew Turner 283c5500a01SMitchell Horne #if defined(SAN_NEEDS_INTERCEPTORS) && !defined(SAN_RUNTIME) 284c5500a01SMitchell Horne #include <sys/bus_san.h> 285c5500a01SMitchell Horne #else 286c5500a01SMitchell Horne 287e5acd89cSAndrew Turner /* 288e5acd89cSAndrew Turner * Utility macros; INTERNAL USE ONLY. 289e5acd89cSAndrew Turner */ 290e5acd89cSAndrew Turner #define __bs_c(a,b) __CONCAT(a,b) 291e5acd89cSAndrew Turner #define __bs_opname(op,size) __bs_c(__bs_c(__bs_c(bs_,op),_),size) 292e5acd89cSAndrew Turner 293e5acd89cSAndrew Turner #define __bs_rs(sz, t, h, o) \ 294e5acd89cSAndrew Turner (*(t)->__bs_opname(r,sz))((t)->bs_cookie, h, o) 295e5acd89cSAndrew Turner #define __bs_ws(sz, t, h, o, v) \ 296e5acd89cSAndrew Turner (*(t)->__bs_opname(w,sz))((t)->bs_cookie, h, o, v) 297e5acd89cSAndrew Turner #define __bs_nonsingle(type, sz, t, h, o, a, c) \ 298e5acd89cSAndrew Turner (*(t)->__bs_opname(type,sz))((t)->bs_cookie, h, o, a, c) 299e5acd89cSAndrew Turner #define __bs_set(type, sz, t, h, o, v, c) \ 300e5acd89cSAndrew Turner (*(t)->__bs_opname(type,sz))((t)->bs_cookie, h, o, v, c) 301e5acd89cSAndrew Turner #define __bs_copy(sz, t, h1, o1, h2, o2, cnt) \ 302e5acd89cSAndrew Turner (*(t)->__bs_opname(c,sz))((t)->bs_cookie, h1, o1, h2, o2, cnt) 303e5acd89cSAndrew Turner 304e5acd89cSAndrew Turner #define __bs_opname_s(op,size) __bs_c(__bs_c(__bs_c(__bs_c(bs_,op),_),size),_s) 305e5acd89cSAndrew Turner #define __bs_rs_s(sz, t, h, o) \ 306e5acd89cSAndrew Turner (*(t)->__bs_opname_s(r,sz))((t)->bs_cookie, h, o) 307e5acd89cSAndrew Turner #define __bs_ws_s(sz, t, h, o, v) \ 308e5acd89cSAndrew Turner (*(t)->__bs_opname_s(w,sz))((t)->bs_cookie, h, o, v) 30995a85c12SMichal Meloun #define __bs_peek(sz, t, h, o, vp) \ 31095a85c12SMichal Meloun (*(t)->__bs_opname(peek, sz))((t)->bs_cookie, h, o, vp) 31195a85c12SMichal Meloun #define __bs_poke(sz, t, h, o, v) \ 31295a85c12SMichal Meloun (*(t)->__bs_opname(poke, sz))((t)->bs_cookie, h, o, v) 313e5acd89cSAndrew Turner #define __bs_nonsingle_s(type, sz, t, h, o, a, c) \ 314e5acd89cSAndrew Turner (*(t)->__bs_opname_s(type,sz))((t)->bs_cookie, h, o, a, c) 315e5acd89cSAndrew Turner 316e5acd89cSAndrew Turner /* 317e5acd89cSAndrew Turner * Mapping and unmapping operations. 318e5acd89cSAndrew Turner */ 319e5acd89cSAndrew Turner #define bus_space_map(t, a, s, c, hp) \ 320e5acd89cSAndrew Turner (*(t)->bs_map)((t)->bs_cookie, (a), (s), (c), (hp)) 321e5acd89cSAndrew Turner #define bus_space_unmap(t, h, s) \ 322e5acd89cSAndrew Turner (*(t)->bs_unmap)((t)->bs_cookie, (h), (s)) 323e5acd89cSAndrew Turner #define bus_space_subregion(t, h, o, s, hp) \ 324e5acd89cSAndrew Turner (*(t)->bs_subregion)((t)->bs_cookie, (h), (o), (s), (hp)) 325e5acd89cSAndrew Turner 326e5acd89cSAndrew Turner /* 327e5acd89cSAndrew Turner * Allocation and deallocation operations. 328e5acd89cSAndrew Turner */ 329e5acd89cSAndrew Turner #define bus_space_alloc(t, rs, re, s, a, b, c, ap, hp) \ 330e5acd89cSAndrew Turner (*(t)->bs_alloc)((t)->bs_cookie, (rs), (re), (s), (a), (b), \ 331e5acd89cSAndrew Turner (c), (ap), (hp)) 332e5acd89cSAndrew Turner #define bus_space_free(t, h, s) \ 333e5acd89cSAndrew Turner (*(t)->bs_free)((t)->bs_cookie, (h), (s)) 334e5acd89cSAndrew Turner 335e5acd89cSAndrew Turner /* 336e5acd89cSAndrew Turner * Bus barrier operations. 337e5acd89cSAndrew Turner */ 338e5acd89cSAndrew Turner #define bus_space_barrier(t, h, o, l, f) \ 339e5acd89cSAndrew Turner (*(t)->bs_barrier)((t)->bs_cookie, (h), (o), (l), (f)) 340e5acd89cSAndrew Turner 341e5acd89cSAndrew Turner /* 342e5acd89cSAndrew Turner * Bus read (single) operations. 343e5acd89cSAndrew Turner */ 344e5acd89cSAndrew Turner #define bus_space_read_1(t, h, o) __bs_rs(1,(t),(h),(o)) 345e5acd89cSAndrew Turner #define bus_space_read_2(t, h, o) __bs_rs(2,(t),(h),(o)) 346e5acd89cSAndrew Turner #define bus_space_read_4(t, h, o) __bs_rs(4,(t),(h),(o)) 347e5acd89cSAndrew Turner #define bus_space_read_8(t, h, o) __bs_rs(8,(t),(h),(o)) 348e5acd89cSAndrew Turner 349e5acd89cSAndrew Turner #define bus_space_read_stream_1(t, h, o) __bs_rs_s(1,(t), (h), (o)) 350e5acd89cSAndrew Turner #define bus_space_read_stream_2(t, h, o) __bs_rs_s(2,(t), (h), (o)) 351e5acd89cSAndrew Turner #define bus_space_read_stream_4(t, h, o) __bs_rs_s(4,(t), (h), (o)) 352a2bb7f7aSAndrew Turner #define bus_space_read_stream_8(t, h, o) __bs_rs_s(8,(t), (h), (o)) 353e5acd89cSAndrew Turner 354e5acd89cSAndrew Turner /* 355e5acd89cSAndrew Turner * Bus read multiple operations. 356e5acd89cSAndrew Turner */ 357e5acd89cSAndrew Turner #define bus_space_read_multi_1(t, h, o, a, c) \ 358e5acd89cSAndrew Turner __bs_nonsingle(rm,1,(t),(h),(o),(a),(c)) 359e5acd89cSAndrew Turner #define bus_space_read_multi_2(t, h, o, a, c) \ 360e5acd89cSAndrew Turner __bs_nonsingle(rm,2,(t),(h),(o),(a),(c)) 361e5acd89cSAndrew Turner #define bus_space_read_multi_4(t, h, o, a, c) \ 362e5acd89cSAndrew Turner __bs_nonsingle(rm,4,(t),(h),(o),(a),(c)) 363e5acd89cSAndrew Turner #define bus_space_read_multi_8(t, h, o, a, c) \ 364e5acd89cSAndrew Turner __bs_nonsingle(rm,8,(t),(h),(o),(a),(c)) 365e5acd89cSAndrew Turner 366e5acd89cSAndrew Turner #define bus_space_read_multi_stream_1(t, h, o, a, c) \ 367e5acd89cSAndrew Turner __bs_nonsingle_s(rm,1,(t),(h),(o),(a),(c)) 368e5acd89cSAndrew Turner #define bus_space_read_multi_stream_2(t, h, o, a, c) \ 369e5acd89cSAndrew Turner __bs_nonsingle_s(rm,2,(t),(h),(o),(a),(c)) 370e5acd89cSAndrew Turner #define bus_space_read_multi_stream_4(t, h, o, a, c) \ 371e5acd89cSAndrew Turner __bs_nonsingle_s(rm,4,(t),(h),(o),(a),(c)) 372e5acd89cSAndrew Turner #define bus_space_read_multi_stream_8(t, h, o, a, c) \ 373e5acd89cSAndrew Turner __bs_nonsingle_s(rm,8,(t),(h),(o),(a),(c)) 374e5acd89cSAndrew Turner 375e5acd89cSAndrew Turner /* 376e5acd89cSAndrew Turner * Bus read region operations. 377e5acd89cSAndrew Turner */ 378e5acd89cSAndrew Turner #define bus_space_read_region_1(t, h, o, a, c) \ 379e5acd89cSAndrew Turner __bs_nonsingle(rr,1,(t),(h),(o),(a),(c)) 380e5acd89cSAndrew Turner #define bus_space_read_region_2(t, h, o, a, c) \ 381e5acd89cSAndrew Turner __bs_nonsingle(rr,2,(t),(h),(o),(a),(c)) 382e5acd89cSAndrew Turner #define bus_space_read_region_4(t, h, o, a, c) \ 383e5acd89cSAndrew Turner __bs_nonsingle(rr,4,(t),(h),(o),(a),(c)) 384e5acd89cSAndrew Turner #define bus_space_read_region_8(t, h, o, a, c) \ 385e5acd89cSAndrew Turner __bs_nonsingle(rr,8,(t),(h),(o),(a),(c)) 386e5acd89cSAndrew Turner 387e5acd89cSAndrew Turner #define bus_space_read_region_stream_1(t, h, o, a, c) \ 388e5acd89cSAndrew Turner __bs_nonsingle_s(rr,1,(t),(h),(o),(a),(c)) 389e5acd89cSAndrew Turner #define bus_space_read_region_stream_2(t, h, o, a, c) \ 390e5acd89cSAndrew Turner __bs_nonsingle_s(rr,2,(t),(h),(o),(a),(c)) 391e5acd89cSAndrew Turner #define bus_space_read_region_stream_4(t, h, o, a, c) \ 392e5acd89cSAndrew Turner __bs_nonsingle_s(rr,4,(t),(h),(o),(a),(c)) 393e5acd89cSAndrew Turner #define bus_space_read_region_stream_8(t, h, o, a, c) \ 394e5acd89cSAndrew Turner __bs_nonsingle_s(rr,8,(t),(h),(o),(a),(c)) 395e5acd89cSAndrew Turner 396e5acd89cSAndrew Turner /* 397e5acd89cSAndrew Turner * Bus write (single) operations. 398e5acd89cSAndrew Turner */ 399e5acd89cSAndrew Turner #define bus_space_write_1(t, h, o, v) __bs_ws(1,(t),(h),(o),(v)) 400e5acd89cSAndrew Turner #define bus_space_write_2(t, h, o, v) __bs_ws(2,(t),(h),(o),(v)) 401e5acd89cSAndrew Turner #define bus_space_write_4(t, h, o, v) __bs_ws(4,(t),(h),(o),(v)) 402e5acd89cSAndrew Turner #define bus_space_write_8(t, h, o, v) __bs_ws(8,(t),(h),(o),(v)) 403e5acd89cSAndrew Turner 404e5acd89cSAndrew Turner #define bus_space_write_stream_1(t, h, o, v) __bs_ws_s(1,(t),(h),(o),(v)) 405e5acd89cSAndrew Turner #define bus_space_write_stream_2(t, h, o, v) __bs_ws_s(2,(t),(h),(o),(v)) 406e5acd89cSAndrew Turner #define bus_space_write_stream_4(t, h, o, v) __bs_ws_s(4,(t),(h),(o),(v)) 407e5acd89cSAndrew Turner #define bus_space_write_stream_8(t, h, o, v) __bs_ws_s(8,(t),(h),(o),(v)) 408e5acd89cSAndrew Turner 409e5acd89cSAndrew Turner /* 410e5acd89cSAndrew Turner * Bus write multiple operations. 411e5acd89cSAndrew Turner */ 412e5acd89cSAndrew Turner #define bus_space_write_multi_1(t, h, o, a, c) \ 413e5acd89cSAndrew Turner __bs_nonsingle(wm,1,(t),(h),(o),(a),(c)) 414e5acd89cSAndrew Turner #define bus_space_write_multi_2(t, h, o, a, c) \ 415e5acd89cSAndrew Turner __bs_nonsingle(wm,2,(t),(h),(o),(a),(c)) 416e5acd89cSAndrew Turner #define bus_space_write_multi_4(t, h, o, a, c) \ 417e5acd89cSAndrew Turner __bs_nonsingle(wm,4,(t),(h),(o),(a),(c)) 418e5acd89cSAndrew Turner #define bus_space_write_multi_8(t, h, o, a, c) \ 419e5acd89cSAndrew Turner __bs_nonsingle(wm,8,(t),(h),(o),(a),(c)) 420e5acd89cSAndrew Turner 421e5acd89cSAndrew Turner #define bus_space_write_multi_stream_1(t, h, o, a, c) \ 422e5acd89cSAndrew Turner __bs_nonsingle_s(wm,1,(t),(h),(o),(a),(c)) 423e5acd89cSAndrew Turner #define bus_space_write_multi_stream_2(t, h, o, a, c) \ 424e5acd89cSAndrew Turner __bs_nonsingle_s(wm,2,(t),(h),(o),(a),(c)) 425e5acd89cSAndrew Turner #define bus_space_write_multi_stream_4(t, h, o, a, c) \ 426e5acd89cSAndrew Turner __bs_nonsingle_s(wm,4,(t),(h),(o),(a),(c)) 427e5acd89cSAndrew Turner #define bus_space_write_multi_stream_8(t, h, o, a, c) \ 428e5acd89cSAndrew Turner __bs_nonsingle_s(wm,8,(t),(h),(o),(a),(c)) 429e5acd89cSAndrew Turner 430e5acd89cSAndrew Turner /* 431e5acd89cSAndrew Turner * Bus write region operations. 432e5acd89cSAndrew Turner */ 433e5acd89cSAndrew Turner #define bus_space_write_region_1(t, h, o, a, c) \ 434e5acd89cSAndrew Turner __bs_nonsingle(wr,1,(t),(h),(o),(a),(c)) 435e5acd89cSAndrew Turner #define bus_space_write_region_2(t, h, o, a, c) \ 436e5acd89cSAndrew Turner __bs_nonsingle(wr,2,(t),(h),(o),(a),(c)) 437e5acd89cSAndrew Turner #define bus_space_write_region_4(t, h, o, a, c) \ 438e5acd89cSAndrew Turner __bs_nonsingle(wr,4,(t),(h),(o),(a),(c)) 439e5acd89cSAndrew Turner #define bus_space_write_region_8(t, h, o, a, c) \ 440e5acd89cSAndrew Turner __bs_nonsingle(wr,8,(t),(h),(o),(a),(c)) 441e5acd89cSAndrew Turner 442e5acd89cSAndrew Turner #define bus_space_write_region_stream_1(t, h, o, a, c) \ 443e5acd89cSAndrew Turner __bs_nonsingle_s(wr,1,(t),(h),(o),(a),(c)) 444e5acd89cSAndrew Turner #define bus_space_write_region_stream_2(t, h, o, a, c) \ 445e5acd89cSAndrew Turner __bs_nonsingle_s(wr,2,(t),(h),(o),(a),(c)) 446e5acd89cSAndrew Turner #define bus_space_write_region_stream_4(t, h, o, a, c) \ 447e5acd89cSAndrew Turner __bs_nonsingle_s(wr,4,(t),(h),(o),(a),(c)) 448e5acd89cSAndrew Turner #define bus_space_write_region_stream_8(t, h, o, a, c) \ 449e5acd89cSAndrew Turner __bs_nonsingle_s(wr,8,(t),(h),(o),(a),(c)) 450e5acd89cSAndrew Turner 451e5acd89cSAndrew Turner /* 452e5acd89cSAndrew Turner * Set multiple operations. 453e5acd89cSAndrew Turner */ 454e5acd89cSAndrew Turner #define bus_space_set_multi_1(t, h, o, v, c) \ 455e5acd89cSAndrew Turner __bs_set(sm,1,(t),(h),(o),(v),(c)) 456e5acd89cSAndrew Turner #define bus_space_set_multi_2(t, h, o, v, c) \ 457e5acd89cSAndrew Turner __bs_set(sm,2,(t),(h),(o),(v),(c)) 458e5acd89cSAndrew Turner #define bus_space_set_multi_4(t, h, o, v, c) \ 459e5acd89cSAndrew Turner __bs_set(sm,4,(t),(h),(o),(v),(c)) 460e5acd89cSAndrew Turner #define bus_space_set_multi_8(t, h, o, v, c) \ 461e5acd89cSAndrew Turner __bs_set(sm,8,(t),(h),(o),(v),(c)) 462e5acd89cSAndrew Turner 463f8e38b42SMitchell Horne #define bus_space_set_multi_stream_1(t, h, o, v, c) \ 464f8e38b42SMitchell Horne bus_space_set_multi_1((t), (h), (o), (v), (c)) 465f8e38b42SMitchell Horne #define bus_space_set_multi_stream_2(t, h, o, v, c) \ 466f8e38b42SMitchell Horne bus_space_set_multi_2((t), (h), (o), (v), (c)) 467f8e38b42SMitchell Horne #define bus_space_set_multi_stream_4(t, h, o, v, c) \ 468f8e38b42SMitchell Horne bus_space_set_multi_4((t), (h), (o), (v), (c)) 469f8e38b42SMitchell Horne #define bus_space_set_multi_stream_8(t, h, o, v, c) \ 470f8e38b42SMitchell Horne bus_space_set_multi_8((t), (h), (o), (v), (c)) 471f8e38b42SMitchell Horne 472e5acd89cSAndrew Turner /* 473e5acd89cSAndrew Turner * Set region operations. 474e5acd89cSAndrew Turner */ 475e5acd89cSAndrew Turner #define bus_space_set_region_1(t, h, o, v, c) \ 476e5acd89cSAndrew Turner __bs_set(sr,1,(t),(h),(o),(v),(c)) 477e5acd89cSAndrew Turner #define bus_space_set_region_2(t, h, o, v, c) \ 478e5acd89cSAndrew Turner __bs_set(sr,2,(t),(h),(o),(v),(c)) 479e5acd89cSAndrew Turner #define bus_space_set_region_4(t, h, o, v, c) \ 480e5acd89cSAndrew Turner __bs_set(sr,4,(t),(h),(o),(v),(c)) 481e5acd89cSAndrew Turner #define bus_space_set_region_8(t, h, o, v, c) \ 482e5acd89cSAndrew Turner __bs_set(sr,8,(t),(h),(o),(v),(c)) 483e5acd89cSAndrew Turner 484f8e38b42SMitchell Horne #define bus_space_set_region_stream_1(t, h, o, v, c) \ 485f8e38b42SMitchell Horne bus_space_set_region_1((t), (h), (o), (v), (c)) 486f8e38b42SMitchell Horne #define bus_space_set_region_stream_2(t, h, o, v, c) \ 487f8e38b42SMitchell Horne bus_space_set_region_2((t), (h), (o), (v), (c)) 488f8e38b42SMitchell Horne #define bus_space_set_region_stream_4(t, h, o, v, c) \ 489f8e38b42SMitchell Horne bus_space_set_region_4((t), (h), (o), (v), (c)) 490f8e38b42SMitchell Horne #define bus_space_set_region_stream_8(t, h, o, v, c) \ 491f8e38b42SMitchell Horne bus_space_set_region_8((t), (h), (o), (v), (c)) 492f8e38b42SMitchell Horne 493e5acd89cSAndrew Turner /* 494e5acd89cSAndrew Turner * Copy operations. 495e5acd89cSAndrew Turner */ 496e5acd89cSAndrew Turner #define bus_space_copy_region_1(t, h1, o1, h2, o2, c) \ 497e5acd89cSAndrew Turner __bs_copy(1, t, h1, o1, h2, o2, c) 498e5acd89cSAndrew Turner #define bus_space_copy_region_2(t, h1, o1, h2, o2, c) \ 499e5acd89cSAndrew Turner __bs_copy(2, t, h1, o1, h2, o2, c) 500e5acd89cSAndrew Turner #define bus_space_copy_region_4(t, h1, o1, h2, o2, c) \ 501e5acd89cSAndrew Turner __bs_copy(4, t, h1, o1, h2, o2, c) 502e5acd89cSAndrew Turner #define bus_space_copy_region_8(t, h1, o1, h2, o2, c) \ 503e5acd89cSAndrew Turner __bs_copy(8, t, h1, o1, h2, o2, c) 504e5acd89cSAndrew Turner 50595a85c12SMichal Meloun /* 50695a85c12SMichal Meloun * Poke (checked write) operations. 50795a85c12SMichal Meloun */ 50895a85c12SMichal Meloun #define bus_space_poke_1(t, h, o, v) __bs_poke(1, (t), (h), (o), (v)) 50995a85c12SMichal Meloun #define bus_space_poke_2(t, h, o, v) __bs_poke(2, (t), (h), (o), (v)) 51095a85c12SMichal Meloun #define bus_space_poke_4(t, h, o, v) __bs_poke(4, (t), (h), (o), (v)) 51195a85c12SMichal Meloun #define bus_space_poke_8(t, h, o, v) __bs_poke(8, (t), (h), (o), (v)) 51295a85c12SMichal Meloun 51395a85c12SMichal Meloun /* 51495a85c12SMichal Meloun * Peek (checked read) operations. 51595a85c12SMichal Meloun */ 51695a85c12SMichal Meloun #define bus_space_peek_1(t, h, o, vp) __bs_peek(1, (t), (h), (o), (vp)) 51795a85c12SMichal Meloun #define bus_space_peek_2(t, h, o, vp) __bs_peek(2, (t), (h), (o), (vp)) 51895a85c12SMichal Meloun #define bus_space_peek_4(t, h, o, vp) __bs_peek(4, (t), (h), (o), (vp)) 51995a85c12SMichal Meloun #define bus_space_peek_8(t, h, o, vp) __bs_peek(8, (t), (h), (o), (vp)) 52095a85c12SMichal Meloun 521a90d053bSMark Johnston #endif /* !SAN_NEEDS_INTERCEPTORS */ 522849aef49SAndrew Turner 523e5acd89cSAndrew Turner #include <machine/bus_dma.h> 524e5acd89cSAndrew Turner 525e5acd89cSAndrew Turner #endif /* _MACHINE_BUS_H_ */ 526d5d97bedSMike Karels 527d5d97bedSMike Karels #endif /* !__arm__ */ 528