18d7e7a98SRuslan Bukin /* $NetBSD: bus.h,v 1.11 2003/07/28 17:35:54 thorpej Exp $ */ 28d7e7a98SRuslan Bukin 38d7e7a98SRuslan Bukin /*- 48d7e7a98SRuslan Bukin * Copyright (c) 1996, 1997, 1998, 2001 The NetBSD Foundation, Inc. 58d7e7a98SRuslan Bukin * All rights reserved. 68d7e7a98SRuslan Bukin * 78d7e7a98SRuslan Bukin * This code is derived from software contributed to The NetBSD Foundation 88d7e7a98SRuslan Bukin * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility, 98d7e7a98SRuslan Bukin * NASA Ames Research Center. 108d7e7a98SRuslan Bukin * 118d7e7a98SRuslan Bukin * Redistribution and use in source and binary forms, with or without 128d7e7a98SRuslan Bukin * modification, are permitted provided that the following conditions 138d7e7a98SRuslan Bukin * are met: 148d7e7a98SRuslan Bukin * 1. Redistributions of source code must retain the above copyright 158d7e7a98SRuslan Bukin * notice, this list of conditions and the following disclaimer. 168d7e7a98SRuslan Bukin * 2. Redistributions in binary form must reproduce the above copyright 178d7e7a98SRuslan Bukin * notice, this list of conditions and the following disclaimer in the 188d7e7a98SRuslan Bukin * documentation and/or other materials provided with the distribution. 198d7e7a98SRuslan Bukin * 208d7e7a98SRuslan Bukin * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 218d7e7a98SRuslan Bukin * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 228d7e7a98SRuslan Bukin * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 238d7e7a98SRuslan Bukin * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 248d7e7a98SRuslan Bukin * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 258d7e7a98SRuslan Bukin * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 268d7e7a98SRuslan Bukin * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 278d7e7a98SRuslan Bukin * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 288d7e7a98SRuslan Bukin * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 298d7e7a98SRuslan Bukin * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 308d7e7a98SRuslan Bukin * POSSIBILITY OF SUCH DAMAGE. 318d7e7a98SRuslan Bukin */ 328d7e7a98SRuslan Bukin 338d7e7a98SRuslan Bukin /*- 348d7e7a98SRuslan Bukin * Copyright (c) 1996 Charles M. Hannum. All rights reserved. 358d7e7a98SRuslan Bukin * Copyright (c) 1996 Christopher G. Demetriou. All rights reserved. 368d7e7a98SRuslan Bukin * 378d7e7a98SRuslan Bukin * Redistribution and use in source and binary forms, with or without 388d7e7a98SRuslan Bukin * modification, are permitted provided that the following conditions 398d7e7a98SRuslan Bukin * are met: 408d7e7a98SRuslan Bukin * 1. Redistributions of source code must retain the above copyright 418d7e7a98SRuslan Bukin * notice, this list of conditions and the following disclaimer. 428d7e7a98SRuslan Bukin * 2. Redistributions in binary form must reproduce the above copyright 438d7e7a98SRuslan Bukin * notice, this list of conditions and the following disclaimer in the 448d7e7a98SRuslan Bukin * documentation and/or other materials provided with the distribution. 458d7e7a98SRuslan Bukin * 3. All advertising materials mentioning features or use of this software 468d7e7a98SRuslan Bukin * must display the following acknowledgement: 478d7e7a98SRuslan Bukin * This product includes software developed by Christopher G. Demetriou 488d7e7a98SRuslan Bukin * for the NetBSD Project. 498d7e7a98SRuslan Bukin * 4. The name of the author may not be used to endorse or promote products 508d7e7a98SRuslan Bukin * derived from this software without specific prior written permission 518d7e7a98SRuslan Bukin * 528d7e7a98SRuslan Bukin * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 538d7e7a98SRuslan Bukin * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 548d7e7a98SRuslan Bukin * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 558d7e7a98SRuslan Bukin * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 568d7e7a98SRuslan Bukin * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 578d7e7a98SRuslan Bukin * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 588d7e7a98SRuslan Bukin * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 598d7e7a98SRuslan Bukin * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 608d7e7a98SRuslan Bukin * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 618d7e7a98SRuslan Bukin * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 628d7e7a98SRuslan Bukin * 638d7e7a98SRuslan Bukin * From: sys/arm/include/bus.h 648d7e7a98SRuslan Bukin */ 658d7e7a98SRuslan Bukin 668d7e7a98SRuslan Bukin #ifndef _MACHINE_BUS_H_ 678d7e7a98SRuslan Bukin #define _MACHINE_BUS_H_ 688d7e7a98SRuslan Bukin 698d7e7a98SRuslan Bukin #include <machine/_bus.h> 708d7e7a98SRuslan Bukin 718d7e7a98SRuslan Bukin #define BUS_SPACE_ALIGNED_POINTER(p, t) ALIGNED_POINTER(p, t) 728d7e7a98SRuslan Bukin 738d7e7a98SRuslan Bukin #define BUS_SPACE_MAXADDR_24BIT 0xFFFFFFUL 748d7e7a98SRuslan Bukin #define BUS_SPACE_MAXADDR_32BIT 0xFFFFFFFFUL 758d7e7a98SRuslan Bukin #define BUS_SPACE_MAXSIZE_24BIT 0xFFFFFFUL 768d7e7a98SRuslan Bukin #define BUS_SPACE_MAXSIZE_32BIT 0xFFFFFFFFUL 778d7e7a98SRuslan Bukin 788d7e7a98SRuslan Bukin #define BUS_SPACE_MAXADDR 0xFFFFFFFFFFFFFFFFUL 798d7e7a98SRuslan Bukin #define BUS_SPACE_MAXSIZE 0xFFFFFFFFFFFFFFFFUL 808d7e7a98SRuslan Bukin 818d7e7a98SRuslan Bukin #define BUS_SPACE_MAP_CACHEABLE 0x01 828d7e7a98SRuslan Bukin #define BUS_SPACE_MAP_LINEAR 0x02 838d7e7a98SRuslan Bukin #define BUS_SPACE_MAP_PREFETCHABLE 0x04 848d7e7a98SRuslan Bukin 858d7e7a98SRuslan Bukin #define BUS_SPACE_UNRESTRICTED (~0) 868d7e7a98SRuslan Bukin 878d7e7a98SRuslan Bukin #define BUS_SPACE_BARRIER_READ 0x01 888d7e7a98SRuslan Bukin #define BUS_SPACE_BARRIER_WRITE 0x02 898d7e7a98SRuslan Bukin 908d7e7a98SRuslan Bukin struct bus_space { 918d7e7a98SRuslan Bukin /* cookie */ 928d7e7a98SRuslan Bukin void *bs_cookie; 938d7e7a98SRuslan Bukin 948d7e7a98SRuslan Bukin /* mapping/unmapping */ 958d7e7a98SRuslan Bukin int (*bs_map) (void *, bus_addr_t, bus_size_t, 968d7e7a98SRuslan Bukin int, bus_space_handle_t *); 978d7e7a98SRuslan Bukin void (*bs_unmap) (void *, bus_space_handle_t, bus_size_t); 988d7e7a98SRuslan Bukin int (*bs_subregion) (void *, bus_space_handle_t, 998d7e7a98SRuslan Bukin bus_size_t, bus_size_t, bus_space_handle_t *); 1008d7e7a98SRuslan Bukin 1018d7e7a98SRuslan Bukin /* allocation/deallocation */ 1028d7e7a98SRuslan Bukin int (*bs_alloc) (void *, bus_addr_t, bus_addr_t, 1038d7e7a98SRuslan Bukin bus_size_t, bus_size_t, bus_size_t, int, 1048d7e7a98SRuslan Bukin bus_addr_t *, bus_space_handle_t *); 1058d7e7a98SRuslan Bukin void (*bs_free) (void *, bus_space_handle_t, 1068d7e7a98SRuslan Bukin bus_size_t); 1078d7e7a98SRuslan Bukin 1088d7e7a98SRuslan Bukin /* get kernel virtual address */ 1098d7e7a98SRuslan Bukin /* barrier */ 1108d7e7a98SRuslan Bukin void (*bs_barrier) (void *, bus_space_handle_t, 1118d7e7a98SRuslan Bukin bus_size_t, bus_size_t, int); 1128d7e7a98SRuslan Bukin 1138d7e7a98SRuslan Bukin /* read single */ 1148d7e7a98SRuslan Bukin u_int8_t (*bs_r_1) (void *, bus_space_handle_t, bus_size_t); 1158d7e7a98SRuslan Bukin u_int16_t (*bs_r_2) (void *, bus_space_handle_t, bus_size_t); 1168d7e7a98SRuslan Bukin u_int32_t (*bs_r_4) (void *, bus_space_handle_t, bus_size_t); 1178d7e7a98SRuslan Bukin u_int64_t (*bs_r_8) (void *, bus_space_handle_t, bus_size_t); 1188d7e7a98SRuslan Bukin 1198d7e7a98SRuslan Bukin /* read multiple */ 1208d7e7a98SRuslan Bukin void (*bs_rm_1) (void *, bus_space_handle_t, bus_size_t, 1218d7e7a98SRuslan Bukin u_int8_t *, bus_size_t); 1228d7e7a98SRuslan Bukin void (*bs_rm_2) (void *, bus_space_handle_t, bus_size_t, 1238d7e7a98SRuslan Bukin u_int16_t *, bus_size_t); 1248d7e7a98SRuslan Bukin void (*bs_rm_4) (void *, bus_space_handle_t, 1258d7e7a98SRuslan Bukin bus_size_t, u_int32_t *, bus_size_t); 1268d7e7a98SRuslan Bukin void (*bs_rm_8) (void *, bus_space_handle_t, 1278d7e7a98SRuslan Bukin bus_size_t, u_int64_t *, bus_size_t); 1288d7e7a98SRuslan Bukin 1298d7e7a98SRuslan Bukin /* read region */ 1308d7e7a98SRuslan Bukin void (*bs_rr_1) (void *, bus_space_handle_t, 1318d7e7a98SRuslan Bukin bus_size_t, u_int8_t *, bus_size_t); 1328d7e7a98SRuslan Bukin void (*bs_rr_2) (void *, bus_space_handle_t, 1338d7e7a98SRuslan Bukin bus_size_t, u_int16_t *, bus_size_t); 1348d7e7a98SRuslan Bukin void (*bs_rr_4) (void *, bus_space_handle_t, 1358d7e7a98SRuslan Bukin bus_size_t, u_int32_t *, bus_size_t); 1368d7e7a98SRuslan Bukin void (*bs_rr_8) (void *, bus_space_handle_t, 1378d7e7a98SRuslan Bukin bus_size_t, u_int64_t *, bus_size_t); 1388d7e7a98SRuslan Bukin 1398d7e7a98SRuslan Bukin /* write single */ 1408d7e7a98SRuslan Bukin void (*bs_w_1) (void *, bus_space_handle_t, 1418d7e7a98SRuslan Bukin bus_size_t, u_int8_t); 1428d7e7a98SRuslan Bukin void (*bs_w_2) (void *, bus_space_handle_t, 1438d7e7a98SRuslan Bukin bus_size_t, u_int16_t); 1448d7e7a98SRuslan Bukin void (*bs_w_4) (void *, bus_space_handle_t, 1458d7e7a98SRuslan Bukin bus_size_t, u_int32_t); 1468d7e7a98SRuslan Bukin void (*bs_w_8) (void *, bus_space_handle_t, 1478d7e7a98SRuslan Bukin bus_size_t, u_int64_t); 1488d7e7a98SRuslan Bukin 1498d7e7a98SRuslan Bukin /* write multiple */ 1508d7e7a98SRuslan Bukin void (*bs_wm_1) (void *, bus_space_handle_t, 1518d7e7a98SRuslan Bukin bus_size_t, const u_int8_t *, bus_size_t); 1528d7e7a98SRuslan Bukin void (*bs_wm_2) (void *, bus_space_handle_t, 1538d7e7a98SRuslan Bukin bus_size_t, const u_int16_t *, bus_size_t); 1548d7e7a98SRuslan Bukin void (*bs_wm_4) (void *, bus_space_handle_t, 1558d7e7a98SRuslan Bukin bus_size_t, const u_int32_t *, bus_size_t); 1568d7e7a98SRuslan Bukin void (*bs_wm_8) (void *, bus_space_handle_t, 1578d7e7a98SRuslan Bukin bus_size_t, const u_int64_t *, bus_size_t); 1588d7e7a98SRuslan Bukin 1598d7e7a98SRuslan Bukin /* write region */ 1608d7e7a98SRuslan Bukin void (*bs_wr_1) (void *, bus_space_handle_t, 1618d7e7a98SRuslan Bukin bus_size_t, const u_int8_t *, bus_size_t); 1628d7e7a98SRuslan Bukin void (*bs_wr_2) (void *, bus_space_handle_t, 1638d7e7a98SRuslan Bukin bus_size_t, const u_int16_t *, bus_size_t); 1648d7e7a98SRuslan Bukin void (*bs_wr_4) (void *, bus_space_handle_t, 1658d7e7a98SRuslan Bukin bus_size_t, const u_int32_t *, bus_size_t); 1668d7e7a98SRuslan Bukin void (*bs_wr_8) (void *, bus_space_handle_t, 1678d7e7a98SRuslan Bukin bus_size_t, const u_int64_t *, bus_size_t); 1688d7e7a98SRuslan Bukin 1698d7e7a98SRuslan Bukin /* set multiple */ 1708d7e7a98SRuslan Bukin void (*bs_sm_1) (void *, bus_space_handle_t, 1718d7e7a98SRuslan Bukin bus_size_t, u_int8_t, bus_size_t); 1728d7e7a98SRuslan Bukin void (*bs_sm_2) (void *, bus_space_handle_t, 1738d7e7a98SRuslan Bukin bus_size_t, u_int16_t, bus_size_t); 1748d7e7a98SRuslan Bukin void (*bs_sm_4) (void *, bus_space_handle_t, 1758d7e7a98SRuslan Bukin bus_size_t, u_int32_t, bus_size_t); 1768d7e7a98SRuslan Bukin void (*bs_sm_8) (void *, bus_space_handle_t, 1778d7e7a98SRuslan Bukin bus_size_t, u_int64_t, bus_size_t); 1788d7e7a98SRuslan Bukin 1798d7e7a98SRuslan Bukin /* set region */ 1808d7e7a98SRuslan Bukin void (*bs_sr_1) (void *, bus_space_handle_t, 1818d7e7a98SRuslan Bukin bus_size_t, u_int8_t, bus_size_t); 1828d7e7a98SRuslan Bukin void (*bs_sr_2) (void *, bus_space_handle_t, 1838d7e7a98SRuslan Bukin bus_size_t, u_int16_t, bus_size_t); 1848d7e7a98SRuslan Bukin void (*bs_sr_4) (void *, bus_space_handle_t, 1858d7e7a98SRuslan Bukin bus_size_t, u_int32_t, bus_size_t); 1868d7e7a98SRuslan Bukin void (*bs_sr_8) (void *, bus_space_handle_t, 1878d7e7a98SRuslan Bukin bus_size_t, u_int64_t, bus_size_t); 1888d7e7a98SRuslan Bukin 1898d7e7a98SRuslan Bukin /* copy */ 1908d7e7a98SRuslan Bukin void (*bs_c_1) (void *, bus_space_handle_t, bus_size_t, 1918d7e7a98SRuslan Bukin bus_space_handle_t, bus_size_t, bus_size_t); 1928d7e7a98SRuslan Bukin void (*bs_c_2) (void *, bus_space_handle_t, bus_size_t, 1938d7e7a98SRuslan Bukin bus_space_handle_t, bus_size_t, bus_size_t); 1948d7e7a98SRuslan Bukin void (*bs_c_4) (void *, bus_space_handle_t, bus_size_t, 1958d7e7a98SRuslan Bukin bus_space_handle_t, bus_size_t, bus_size_t); 1968d7e7a98SRuslan Bukin void (*bs_c_8) (void *, bus_space_handle_t, bus_size_t, 1978d7e7a98SRuslan Bukin bus_space_handle_t, bus_size_t, bus_size_t); 1988d7e7a98SRuslan Bukin 1998d7e7a98SRuslan Bukin /* read single stream */ 2008d7e7a98SRuslan Bukin u_int8_t (*bs_r_1_s) (void *, bus_space_handle_t, bus_size_t); 2018d7e7a98SRuslan Bukin u_int16_t (*bs_r_2_s) (void *, bus_space_handle_t, bus_size_t); 2028d7e7a98SRuslan Bukin u_int32_t (*bs_r_4_s) (void *, bus_space_handle_t, bus_size_t); 2038d7e7a98SRuslan Bukin u_int64_t (*bs_r_8_s) (void *, bus_space_handle_t, bus_size_t); 2048d7e7a98SRuslan Bukin 2058d7e7a98SRuslan Bukin /* read multiple stream */ 2068d7e7a98SRuslan Bukin void (*bs_rm_1_s) (void *, bus_space_handle_t, bus_size_t, 2078d7e7a98SRuslan Bukin u_int8_t *, bus_size_t); 2088d7e7a98SRuslan Bukin void (*bs_rm_2_s) (void *, bus_space_handle_t, bus_size_t, 2098d7e7a98SRuslan Bukin u_int16_t *, bus_size_t); 2108d7e7a98SRuslan Bukin void (*bs_rm_4_s) (void *, bus_space_handle_t, 2118d7e7a98SRuslan Bukin bus_size_t, u_int32_t *, bus_size_t); 2128d7e7a98SRuslan Bukin void (*bs_rm_8_s) (void *, bus_space_handle_t, 2138d7e7a98SRuslan Bukin bus_size_t, u_int64_t *, bus_size_t); 2148d7e7a98SRuslan Bukin 2158d7e7a98SRuslan Bukin /* read region stream */ 2168d7e7a98SRuslan Bukin void (*bs_rr_1_s) (void *, bus_space_handle_t, 2178d7e7a98SRuslan Bukin bus_size_t, u_int8_t *, bus_size_t); 2188d7e7a98SRuslan Bukin void (*bs_rr_2_s) (void *, bus_space_handle_t, 2198d7e7a98SRuslan Bukin bus_size_t, u_int16_t *, bus_size_t); 2208d7e7a98SRuslan Bukin void (*bs_rr_4_s) (void *, bus_space_handle_t, 2218d7e7a98SRuslan Bukin bus_size_t, u_int32_t *, bus_size_t); 2228d7e7a98SRuslan Bukin void (*bs_rr_8_s) (void *, bus_space_handle_t, 2238d7e7a98SRuslan Bukin bus_size_t, u_int64_t *, bus_size_t); 2248d7e7a98SRuslan Bukin 2258d7e7a98SRuslan Bukin /* write single stream */ 2268d7e7a98SRuslan Bukin void (*bs_w_1_s) (void *, bus_space_handle_t, 2278d7e7a98SRuslan Bukin bus_size_t, u_int8_t); 2288d7e7a98SRuslan Bukin void (*bs_w_2_s) (void *, bus_space_handle_t, 2298d7e7a98SRuslan Bukin bus_size_t, u_int16_t); 2308d7e7a98SRuslan Bukin void (*bs_w_4_s) (void *, bus_space_handle_t, 2318d7e7a98SRuslan Bukin bus_size_t, u_int32_t); 2328d7e7a98SRuslan Bukin void (*bs_w_8_s) (void *, bus_space_handle_t, 2338d7e7a98SRuslan Bukin bus_size_t, u_int64_t); 2348d7e7a98SRuslan Bukin 2358d7e7a98SRuslan Bukin /* write multiple stream */ 2368d7e7a98SRuslan Bukin void (*bs_wm_1_s) (void *, bus_space_handle_t, 2378d7e7a98SRuslan Bukin bus_size_t, const u_int8_t *, bus_size_t); 2388d7e7a98SRuslan Bukin void (*bs_wm_2_s) (void *, bus_space_handle_t, 2398d7e7a98SRuslan Bukin bus_size_t, const u_int16_t *, bus_size_t); 2408d7e7a98SRuslan Bukin void (*bs_wm_4_s) (void *, bus_space_handle_t, 2418d7e7a98SRuslan Bukin bus_size_t, const u_int32_t *, bus_size_t); 2428d7e7a98SRuslan Bukin void (*bs_wm_8_s) (void *, bus_space_handle_t, 2438d7e7a98SRuslan Bukin bus_size_t, const u_int64_t *, bus_size_t); 2448d7e7a98SRuslan Bukin 2458d7e7a98SRuslan Bukin /* write region stream */ 2468d7e7a98SRuslan Bukin void (*bs_wr_1_s) (void *, bus_space_handle_t, 2478d7e7a98SRuslan Bukin bus_size_t, const u_int8_t *, bus_size_t); 2488d7e7a98SRuslan Bukin void (*bs_wr_2_s) (void *, bus_space_handle_t, 2498d7e7a98SRuslan Bukin bus_size_t, const u_int16_t *, bus_size_t); 2508d7e7a98SRuslan Bukin void (*bs_wr_4_s) (void *, bus_space_handle_t, 2518d7e7a98SRuslan Bukin bus_size_t, const u_int32_t *, bus_size_t); 2528d7e7a98SRuslan Bukin void (*bs_wr_8_s) (void *, bus_space_handle_t, 2538d7e7a98SRuslan Bukin bus_size_t, const u_int64_t *, bus_size_t); 2548d7e7a98SRuslan Bukin }; 2558d7e7a98SRuslan Bukin 2568d7e7a98SRuslan Bukin /* 2578d7e7a98SRuslan Bukin * Utility macros; INTERNAL USE ONLY. 2588d7e7a98SRuslan Bukin */ 2598d7e7a98SRuslan Bukin #define __bs_c(a,b) __CONCAT(a,b) 2608d7e7a98SRuslan Bukin #define __bs_opname(op,size) __bs_c(__bs_c(__bs_c(bs_,op),_),size) 2618d7e7a98SRuslan Bukin 2628d7e7a98SRuslan Bukin #define __bs_rs(sz, t, h, o) \ 2638d7e7a98SRuslan Bukin (*(t)->__bs_opname(r,sz))((t)->bs_cookie, h, o) 2648d7e7a98SRuslan Bukin #define __bs_ws(sz, t, h, o, v) \ 2658d7e7a98SRuslan Bukin (*(t)->__bs_opname(w,sz))((t)->bs_cookie, h, o, v) 2668d7e7a98SRuslan Bukin #define __bs_nonsingle(type, sz, t, h, o, a, c) \ 2678d7e7a98SRuslan Bukin (*(t)->__bs_opname(type,sz))((t)->bs_cookie, h, o, a, c) 2688d7e7a98SRuslan Bukin #define __bs_set(type, sz, t, h, o, v, c) \ 2698d7e7a98SRuslan Bukin (*(t)->__bs_opname(type,sz))((t)->bs_cookie, h, o, v, c) 2708d7e7a98SRuslan Bukin #define __bs_copy(sz, t, h1, o1, h2, o2, cnt) \ 2718d7e7a98SRuslan Bukin (*(t)->__bs_opname(c,sz))((t)->bs_cookie, h1, o1, h2, o2, cnt) 2728d7e7a98SRuslan Bukin 2738d7e7a98SRuslan Bukin #define __bs_opname_s(op,size) __bs_c(__bs_c(__bs_c(__bs_c(bs_,op),_),size),_s) 2748d7e7a98SRuslan Bukin #define __bs_rs_s(sz, t, h, o) \ 2758d7e7a98SRuslan Bukin (*(t)->__bs_opname_s(r,sz))((t)->bs_cookie, h, o) 2768d7e7a98SRuslan Bukin #define __bs_ws_s(sz, t, h, o, v) \ 2778d7e7a98SRuslan Bukin (*(t)->__bs_opname_s(w,sz))((t)->bs_cookie, h, o, v) 2788d7e7a98SRuslan Bukin #define __bs_nonsingle_s(type, sz, t, h, o, a, c) \ 2798d7e7a98SRuslan Bukin (*(t)->__bs_opname_s(type,sz))((t)->bs_cookie, h, o, a, c) 2808d7e7a98SRuslan Bukin 2818d7e7a98SRuslan Bukin /* 2828d7e7a98SRuslan Bukin * Mapping and unmapping operations. 2838d7e7a98SRuslan Bukin */ 2848d7e7a98SRuslan Bukin #define bus_space_map(t, a, s, c, hp) \ 2858d7e7a98SRuslan Bukin (*(t)->bs_map)((t)->bs_cookie, (a), (s), (c), (hp)) 2868d7e7a98SRuslan Bukin #define bus_space_unmap(t, h, s) \ 2878d7e7a98SRuslan Bukin (*(t)->bs_unmap)((t)->bs_cookie, (h), (s)) 2888d7e7a98SRuslan Bukin #define bus_space_subregion(t, h, o, s, hp) \ 2898d7e7a98SRuslan Bukin (*(t)->bs_subregion)((t)->bs_cookie, (h), (o), (s), (hp)) 2908d7e7a98SRuslan Bukin 2918d7e7a98SRuslan Bukin /* 2928d7e7a98SRuslan Bukin * Allocation and deallocation operations. 2938d7e7a98SRuslan Bukin */ 2948d7e7a98SRuslan Bukin #define bus_space_alloc(t, rs, re, s, a, b, c, ap, hp) \ 2958d7e7a98SRuslan Bukin (*(t)->bs_alloc)((t)->bs_cookie, (rs), (re), (s), (a), (b), \ 2968d7e7a98SRuslan Bukin (c), (ap), (hp)) 2978d7e7a98SRuslan Bukin #define bus_space_free(t, h, s) \ 2988d7e7a98SRuslan Bukin (*(t)->bs_free)((t)->bs_cookie, (h), (s)) 2998d7e7a98SRuslan Bukin 3008d7e7a98SRuslan Bukin /* 3018d7e7a98SRuslan Bukin * Bus barrier operations. 3028d7e7a98SRuslan Bukin */ 3038d7e7a98SRuslan Bukin #define bus_space_barrier(t, h, o, l, f) \ 3048d7e7a98SRuslan Bukin (*(t)->bs_barrier)((t)->bs_cookie, (h), (o), (l), (f)) 3058d7e7a98SRuslan Bukin 3068d7e7a98SRuslan Bukin /* 3078d7e7a98SRuslan Bukin * Bus read (single) operations. 3088d7e7a98SRuslan Bukin */ 3098d7e7a98SRuslan Bukin #define bus_space_read_1(t, h, o) __bs_rs(1,(t),(h),(o)) 3108d7e7a98SRuslan Bukin #define bus_space_read_2(t, h, o) __bs_rs(2,(t),(h),(o)) 3118d7e7a98SRuslan Bukin #define bus_space_read_4(t, h, o) __bs_rs(4,(t),(h),(o)) 3128d7e7a98SRuslan Bukin #define bus_space_read_8(t, h, o) __bs_rs(8,(t),(h),(o)) 3138d7e7a98SRuslan Bukin 3148d7e7a98SRuslan Bukin #define bus_space_read_stream_1(t, h, o) __bs_rs_s(1,(t), (h), (o)) 3158d7e7a98SRuslan Bukin #define bus_space_read_stream_2(t, h, o) __bs_rs_s(2,(t), (h), (o)) 3168d7e7a98SRuslan Bukin #define bus_space_read_stream_4(t, h, o) __bs_rs_s(4,(t), (h), (o)) 3178d7e7a98SRuslan Bukin #define bus_space_read_stream_8(t, h, o) __bs_rs_s(8,8,(t),(h),(o)) 3188d7e7a98SRuslan Bukin 3198d7e7a98SRuslan Bukin /* 3208d7e7a98SRuslan Bukin * Bus read multiple operations. 3218d7e7a98SRuslan Bukin */ 3228d7e7a98SRuslan Bukin #define bus_space_read_multi_1(t, h, o, a, c) \ 3238d7e7a98SRuslan Bukin __bs_nonsingle(rm,1,(t),(h),(o),(a),(c)) 3248d7e7a98SRuslan Bukin #define bus_space_read_multi_2(t, h, o, a, c) \ 3258d7e7a98SRuslan Bukin __bs_nonsingle(rm,2,(t),(h),(o),(a),(c)) 3268d7e7a98SRuslan Bukin #define bus_space_read_multi_4(t, h, o, a, c) \ 3278d7e7a98SRuslan Bukin __bs_nonsingle(rm,4,(t),(h),(o),(a),(c)) 3288d7e7a98SRuslan Bukin #define bus_space_read_multi_8(t, h, o, a, c) \ 3298d7e7a98SRuslan Bukin __bs_nonsingle(rm,8,(t),(h),(o),(a),(c)) 3308d7e7a98SRuslan Bukin 3318d7e7a98SRuslan Bukin #define bus_space_read_multi_stream_1(t, h, o, a, c) \ 3328d7e7a98SRuslan Bukin __bs_nonsingle_s(rm,1,(t),(h),(o),(a),(c)) 3338d7e7a98SRuslan Bukin #define bus_space_read_multi_stream_2(t, h, o, a, c) \ 3348d7e7a98SRuslan Bukin __bs_nonsingle_s(rm,2,(t),(h),(o),(a),(c)) 3358d7e7a98SRuslan Bukin #define bus_space_read_multi_stream_4(t, h, o, a, c) \ 3368d7e7a98SRuslan Bukin __bs_nonsingle_s(rm,4,(t),(h),(o),(a),(c)) 3378d7e7a98SRuslan Bukin #define bus_space_read_multi_stream_8(t, h, o, a, c) \ 3388d7e7a98SRuslan Bukin __bs_nonsingle_s(rm,8,(t),(h),(o),(a),(c)) 3398d7e7a98SRuslan Bukin 3408d7e7a98SRuslan Bukin /* 3418d7e7a98SRuslan Bukin * Bus read region operations. 3428d7e7a98SRuslan Bukin */ 3438d7e7a98SRuslan Bukin #define bus_space_read_region_1(t, h, o, a, c) \ 3448d7e7a98SRuslan Bukin __bs_nonsingle(rr,1,(t),(h),(o),(a),(c)) 3458d7e7a98SRuslan Bukin #define bus_space_read_region_2(t, h, o, a, c) \ 3468d7e7a98SRuslan Bukin __bs_nonsingle(rr,2,(t),(h),(o),(a),(c)) 3478d7e7a98SRuslan Bukin #define bus_space_read_region_4(t, h, o, a, c) \ 3488d7e7a98SRuslan Bukin __bs_nonsingle(rr,4,(t),(h),(o),(a),(c)) 3498d7e7a98SRuslan Bukin #define bus_space_read_region_8(t, h, o, a, c) \ 3508d7e7a98SRuslan Bukin __bs_nonsingle(rr,8,(t),(h),(o),(a),(c)) 3518d7e7a98SRuslan Bukin 3528d7e7a98SRuslan Bukin #define bus_space_read_region_stream_1(t, h, o, a, c) \ 3538d7e7a98SRuslan Bukin __bs_nonsingle_s(rr,1,(t),(h),(o),(a),(c)) 3548d7e7a98SRuslan Bukin #define bus_space_read_region_stream_2(t, h, o, a, c) \ 3558d7e7a98SRuslan Bukin __bs_nonsingle_s(rr,2,(t),(h),(o),(a),(c)) 3568d7e7a98SRuslan Bukin #define bus_space_read_region_stream_4(t, h, o, a, c) \ 3578d7e7a98SRuslan Bukin __bs_nonsingle_s(rr,4,(t),(h),(o),(a),(c)) 3588d7e7a98SRuslan Bukin #define bus_space_read_region_stream_8(t, h, o, a, c) \ 3598d7e7a98SRuslan Bukin __bs_nonsingle_s(rr,8,(t),(h),(o),(a),(c)) 3608d7e7a98SRuslan Bukin 3618d7e7a98SRuslan Bukin /* 3628d7e7a98SRuslan Bukin * Bus write (single) operations. 3638d7e7a98SRuslan Bukin */ 3648d7e7a98SRuslan Bukin #define bus_space_write_1(t, h, o, v) __bs_ws(1,(t),(h),(o),(v)) 3658d7e7a98SRuslan Bukin #define bus_space_write_2(t, h, o, v) __bs_ws(2,(t),(h),(o),(v)) 3668d7e7a98SRuslan Bukin #define bus_space_write_4(t, h, o, v) __bs_ws(4,(t),(h),(o),(v)) 3678d7e7a98SRuslan Bukin #define bus_space_write_8(t, h, o, v) __bs_ws(8,(t),(h),(o),(v)) 3688d7e7a98SRuslan Bukin 3698d7e7a98SRuslan Bukin #define bus_space_write_stream_1(t, h, o, v) __bs_ws_s(1,(t),(h),(o),(v)) 3708d7e7a98SRuslan Bukin #define bus_space_write_stream_2(t, h, o, v) __bs_ws_s(2,(t),(h),(o),(v)) 3718d7e7a98SRuslan Bukin #define bus_space_write_stream_4(t, h, o, v) __bs_ws_s(4,(t),(h),(o),(v)) 3728d7e7a98SRuslan Bukin #define bus_space_write_stream_8(t, h, o, v) __bs_ws_s(8,(t),(h),(o),(v)) 3738d7e7a98SRuslan Bukin 3748d7e7a98SRuslan Bukin /* 3758d7e7a98SRuslan Bukin * Bus write multiple operations. 3768d7e7a98SRuslan Bukin */ 3778d7e7a98SRuslan Bukin #define bus_space_write_multi_1(t, h, o, a, c) \ 3788d7e7a98SRuslan Bukin __bs_nonsingle(wm,1,(t),(h),(o),(a),(c)) 3798d7e7a98SRuslan Bukin #define bus_space_write_multi_2(t, h, o, a, c) \ 3808d7e7a98SRuslan Bukin __bs_nonsingle(wm,2,(t),(h),(o),(a),(c)) 3818d7e7a98SRuslan Bukin #define bus_space_write_multi_4(t, h, o, a, c) \ 3828d7e7a98SRuslan Bukin __bs_nonsingle(wm,4,(t),(h),(o),(a),(c)) 3838d7e7a98SRuslan Bukin #define bus_space_write_multi_8(t, h, o, a, c) \ 3848d7e7a98SRuslan Bukin __bs_nonsingle(wm,8,(t),(h),(o),(a),(c)) 3858d7e7a98SRuslan Bukin 3868d7e7a98SRuslan Bukin #define bus_space_write_multi_stream_1(t, h, o, a, c) \ 3878d7e7a98SRuslan Bukin __bs_nonsingle_s(wm,1,(t),(h),(o),(a),(c)) 3888d7e7a98SRuslan Bukin #define bus_space_write_multi_stream_2(t, h, o, a, c) \ 3898d7e7a98SRuslan Bukin __bs_nonsingle_s(wm,2,(t),(h),(o),(a),(c)) 3908d7e7a98SRuslan Bukin #define bus_space_write_multi_stream_4(t, h, o, a, c) \ 3918d7e7a98SRuslan Bukin __bs_nonsingle_s(wm,4,(t),(h),(o),(a),(c)) 3928d7e7a98SRuslan Bukin #define bus_space_write_multi_stream_8(t, h, o, a, c) \ 3938d7e7a98SRuslan Bukin __bs_nonsingle_s(wm,8,(t),(h),(o),(a),(c)) 3948d7e7a98SRuslan Bukin 3958d7e7a98SRuslan Bukin /* 3968d7e7a98SRuslan Bukin * Bus write region operations. 3978d7e7a98SRuslan Bukin */ 3988d7e7a98SRuslan Bukin #define bus_space_write_region_1(t, h, o, a, c) \ 3998d7e7a98SRuslan Bukin __bs_nonsingle(wr,1,(t),(h),(o),(a),(c)) 4008d7e7a98SRuslan Bukin #define bus_space_write_region_2(t, h, o, a, c) \ 4018d7e7a98SRuslan Bukin __bs_nonsingle(wr,2,(t),(h),(o),(a),(c)) 4028d7e7a98SRuslan Bukin #define bus_space_write_region_4(t, h, o, a, c) \ 4038d7e7a98SRuslan Bukin __bs_nonsingle(wr,4,(t),(h),(o),(a),(c)) 4048d7e7a98SRuslan Bukin #define bus_space_write_region_8(t, h, o, a, c) \ 4058d7e7a98SRuslan Bukin __bs_nonsingle(wr,8,(t),(h),(o),(a),(c)) 4068d7e7a98SRuslan Bukin 4078d7e7a98SRuslan Bukin #define bus_space_write_region_stream_1(t, h, o, a, c) \ 4088d7e7a98SRuslan Bukin __bs_nonsingle_s(wr,1,(t),(h),(o),(a),(c)) 4098d7e7a98SRuslan Bukin #define bus_space_write_region_stream_2(t, h, o, a, c) \ 4108d7e7a98SRuslan Bukin __bs_nonsingle_s(wr,2,(t),(h),(o),(a),(c)) 4118d7e7a98SRuslan Bukin #define bus_space_write_region_stream_4(t, h, o, a, c) \ 4128d7e7a98SRuslan Bukin __bs_nonsingle_s(wr,4,(t),(h),(o),(a),(c)) 4138d7e7a98SRuslan Bukin #define bus_space_write_region_stream_8(t, h, o, a, c) \ 4148d7e7a98SRuslan Bukin __bs_nonsingle_s(wr,8,(t),(h),(o),(a),(c)) 4158d7e7a98SRuslan Bukin 4168d7e7a98SRuslan Bukin /* 4178d7e7a98SRuslan Bukin * Set multiple operations. 4188d7e7a98SRuslan Bukin */ 4198d7e7a98SRuslan Bukin #define bus_space_set_multi_1(t, h, o, v, c) \ 4208d7e7a98SRuslan Bukin __bs_set(sm,1,(t),(h),(o),(v),(c)) 4218d7e7a98SRuslan Bukin #define bus_space_set_multi_2(t, h, o, v, c) \ 4228d7e7a98SRuslan Bukin __bs_set(sm,2,(t),(h),(o),(v),(c)) 4238d7e7a98SRuslan Bukin #define bus_space_set_multi_4(t, h, o, v, c) \ 4248d7e7a98SRuslan Bukin __bs_set(sm,4,(t),(h),(o),(v),(c)) 4258d7e7a98SRuslan Bukin #define bus_space_set_multi_8(t, h, o, v, c) \ 4268d7e7a98SRuslan Bukin __bs_set(sm,8,(t),(h),(o),(v),(c)) 4278d7e7a98SRuslan Bukin 4288d7e7a98SRuslan Bukin /* 4298d7e7a98SRuslan Bukin * Set region operations. 4308d7e7a98SRuslan Bukin */ 4318d7e7a98SRuslan Bukin #define bus_space_set_region_1(t, h, o, v, c) \ 4328d7e7a98SRuslan Bukin __bs_set(sr,1,(t),(h),(o),(v),(c)) 4338d7e7a98SRuslan Bukin #define bus_space_set_region_2(t, h, o, v, c) \ 4348d7e7a98SRuslan Bukin __bs_set(sr,2,(t),(h),(o),(v),(c)) 4358d7e7a98SRuslan Bukin #define bus_space_set_region_4(t, h, o, v, c) \ 4368d7e7a98SRuslan Bukin __bs_set(sr,4,(t),(h),(o),(v),(c)) 4378d7e7a98SRuslan Bukin #define bus_space_set_region_8(t, h, o, v, c) \ 4388d7e7a98SRuslan Bukin __bs_set(sr,8,(t),(h),(o),(v),(c)) 4398d7e7a98SRuslan Bukin 4408d7e7a98SRuslan Bukin /* 4418d7e7a98SRuslan Bukin * Copy operations. 4428d7e7a98SRuslan Bukin */ 4438d7e7a98SRuslan Bukin #define bus_space_copy_region_1(t, h1, o1, h2, o2, c) \ 4448d7e7a98SRuslan Bukin __bs_copy(1, t, h1, o1, h2, o2, c) 4458d7e7a98SRuslan Bukin #define bus_space_copy_region_2(t, h1, o1, h2, o2, c) \ 4468d7e7a98SRuslan Bukin __bs_copy(2, t, h1, o1, h2, o2, c) 4478d7e7a98SRuslan Bukin #define bus_space_copy_region_4(t, h1, o1, h2, o2, c) \ 4488d7e7a98SRuslan Bukin __bs_copy(4, t, h1, o1, h2, o2, c) 4498d7e7a98SRuslan Bukin #define bus_space_copy_region_8(t, h1, o1, h2, o2, c) \ 4508d7e7a98SRuslan Bukin __bs_copy(8, t, h1, o1, h2, o2, c) 4518d7e7a98SRuslan Bukin 45295a85c12SMichal Meloun #define BUS_PEEK_FUNC(width, type) \ 45395a85c12SMichal Meloun static inline int \ 45495a85c12SMichal Meloun bus_space_peek_##width(bus_space_tag_t tag, \ 45595a85c12SMichal Meloun bus_space_handle_t hnd, bus_size_t offset, type *value) \ 45695a85c12SMichal Meloun { \ 45795a85c12SMichal Meloun type tmp; \ 45895a85c12SMichal Meloun tmp = bus_space_read_##width(tag, hnd, offset); \ 459*31820621SMichal Meloun *value = (type)tmp; \ 46095a85c12SMichal Meloun return (0); \ 46195a85c12SMichal Meloun } 46295a85c12SMichal Meloun BUS_PEEK_FUNC(1, uint8_t) 46395a85c12SMichal Meloun BUS_PEEK_FUNC(2, uint16_t) 46495a85c12SMichal Meloun BUS_PEEK_FUNC(4, uint32_t) 46595a85c12SMichal Meloun BUS_PEEK_FUNC(8, uint64_t) 46695a85c12SMichal Meloun 46795a85c12SMichal Meloun #define BUS_POKE_FUNC(width, type) \ 46895a85c12SMichal Meloun static inline int \ 46995a85c12SMichal Meloun bus_space_poke_##width(bus_space_tag_t tag, \ 47095a85c12SMichal Meloun bus_space_handle_t hnd, bus_size_t offset, type value) \ 47195a85c12SMichal Meloun { \ 47295a85c12SMichal Meloun bus_space_write_##width(tag, hnd, offset, value); \ 47395a85c12SMichal Meloun return (0); \ 47495a85c12SMichal Meloun } 47595a85c12SMichal Meloun BUS_POKE_FUNC(1, uint8_t) 47695a85c12SMichal Meloun BUS_POKE_FUNC(2, uint16_t) 47795a85c12SMichal Meloun BUS_POKE_FUNC(4, uint32_t) 47895a85c12SMichal Meloun BUS_POKE_FUNC(8, uint64_t) 47995a85c12SMichal Meloun 4808d7e7a98SRuslan Bukin #include <machine/bus_dma.h> 4818d7e7a98SRuslan Bukin 4828d7e7a98SRuslan Bukin #endif /* _MACHINE_BUS_H_ */ 483