1de2fa7b8SMarcel Moolenaar /* $NetBSD: bus.h,v 1.11 2003/07/28 17:35:54 thorpej Exp $ */ 2de2fa7b8SMarcel Moolenaar 3f9bac91bSBenno Rice /*- 4b61a5730SWarner Losh * SPDX-License-Identifier: BSD-2-Clause AND BSD-4-Clause 571e3c308SPedro F. Giffuni * 6de2fa7b8SMarcel Moolenaar * Copyright (c) 1996, 1997, 1998, 2001 The NetBSD Foundation, Inc. 7f9bac91bSBenno Rice * All rights reserved. 8f9bac91bSBenno Rice * 9f9bac91bSBenno Rice * This code is derived from software contributed to The NetBSD Foundation 10f9bac91bSBenno Rice * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility, 11f9bac91bSBenno Rice * NASA Ames Research Center. 12f9bac91bSBenno Rice * 13f9bac91bSBenno Rice * Redistribution and use in source and binary forms, with or without 14f9bac91bSBenno Rice * modification, are permitted provided that the following conditions 15f9bac91bSBenno Rice * are met: 16f9bac91bSBenno Rice * 1. Redistributions of source code must retain the above copyright 17f9bac91bSBenno Rice * notice, this list of conditions and the following disclaimer. 18f9bac91bSBenno Rice * 2. Redistributions in binary form must reproduce the above copyright 19f9bac91bSBenno Rice * notice, this list of conditions and the following disclaimer in the 20f9bac91bSBenno Rice * documentation and/or other materials provided with the distribution. 21f9bac91bSBenno Rice * 22f9bac91bSBenno Rice * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 23f9bac91bSBenno Rice * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 24f9bac91bSBenno Rice * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 25f9bac91bSBenno Rice * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 26f9bac91bSBenno Rice * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 27f9bac91bSBenno Rice * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 28f9bac91bSBenno Rice * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 29f9bac91bSBenno Rice * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 30f9bac91bSBenno Rice * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 31f9bac91bSBenno Rice * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 32f9bac91bSBenno Rice * POSSIBILITY OF SUCH DAMAGE. 33f9bac91bSBenno Rice */ 34f9bac91bSBenno Rice 3560727d8bSWarner Losh /*- 36f9bac91bSBenno Rice * Copyright (c) 1996 Charles M. Hannum. All rights reserved. 37f9bac91bSBenno Rice * Copyright (c) 1996 Christopher G. Demetriou. All rights reserved. 38f9bac91bSBenno Rice * 39f9bac91bSBenno Rice * Redistribution and use in source and binary forms, with or without 40f9bac91bSBenno Rice * modification, are permitted provided that the following conditions 41f9bac91bSBenno Rice * are met: 42f9bac91bSBenno Rice * 1. Redistributions of source code must retain the above copyright 43f9bac91bSBenno Rice * notice, this list of conditions and the following disclaimer. 44f9bac91bSBenno Rice * 2. Redistributions in binary form must reproduce the above copyright 45f9bac91bSBenno Rice * notice, this list of conditions and the following disclaimer in the 46f9bac91bSBenno Rice * documentation and/or other materials provided with the distribution. 47f9bac91bSBenno Rice * 3. All advertising materials mentioning features or use of this software 48f9bac91bSBenno Rice * must display the following acknowledgement: 49f9bac91bSBenno Rice * This product includes software developed by Christopher G. Demetriou 50f9bac91bSBenno Rice * for the NetBSD Project. 51f9bac91bSBenno Rice * 4. The name of the author may not be used to endorse or promote products 52f9bac91bSBenno Rice * derived from this software without specific prior written permission 53f9bac91bSBenno Rice * 54f9bac91bSBenno Rice * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 55f9bac91bSBenno Rice * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 56f9bac91bSBenno Rice * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 57f9bac91bSBenno Rice * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 58f9bac91bSBenno Rice * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 59f9bac91bSBenno Rice * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 60f9bac91bSBenno Rice * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 61f9bac91bSBenno Rice * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 62f9bac91bSBenno Rice * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 63f9bac91bSBenno Rice * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 64f9bac91bSBenno Rice */ 65f9bac91bSBenno Rice 66de2fa7b8SMarcel Moolenaar #ifndef _MACHINE_BUS_H_ 67de2fa7b8SMarcel Moolenaar #define _MACHINE_BUS_H_ 68f9bac91bSBenno Rice 6906db52b6SWarner Losh #include <machine/_bus.h> 70911e488aSPeter Grehan 71f9bac91bSBenno Rice #define BUS_SPACE_ALIGNED_POINTER(p, t) ALIGNED_POINTER(p, t) 72f9bac91bSBenno Rice 73c3e289e1SNathan Whitehorn #define BUS_SPACE_MAXADDR_24BIT 0xFFFFFFUL 74c3e289e1SNathan Whitehorn #define BUS_SPACE_MAXADDR_32BIT 0xFFFFFFFFUL 75c3e289e1SNathan Whitehorn #define BUS_SPACE_MAXSIZE_24BIT 0xFFFFFFUL 76c3e289e1SNathan Whitehorn #define BUS_SPACE_MAXSIZE_32BIT 0xFFFFFFFFUL 77c3e289e1SNathan Whitehorn 78c3e289e1SNathan Whitehorn #ifdef __powerpc64__ 79c3e289e1SNathan Whitehorn #define BUS_SPACE_MAXADDR 0xFFFFFFFFFFFFFFFFUL 80c3e289e1SNathan Whitehorn #define BUS_SPACE_MAXSIZE 0xFFFFFFFFFFFFFFFFUL 81c3e289e1SNathan Whitehorn #else 821c81bc83SJustin Hibbits #ifdef BOOKE 831c81bc83SJustin Hibbits #define BUS_SPACE_MAXADDR 0xFFFFFFFFFULL 841c81bc83SJustin Hibbits #define BUS_SPACE_MAXSIZE 0xFFFFFFFFUL 851c81bc83SJustin Hibbits #else 86c3e289e1SNathan Whitehorn #define BUS_SPACE_MAXADDR 0xFFFFFFFFUL 87c3e289e1SNathan Whitehorn #define BUS_SPACE_MAXSIZE 0xFFFFFFFFUL 88c3e289e1SNathan Whitehorn #endif 891c81bc83SJustin Hibbits #endif 90de2fa7b8SMarcel Moolenaar 91de2fa7b8SMarcel Moolenaar #define BUS_SPACE_MAP_CACHEABLE 0x01 92de2fa7b8SMarcel Moolenaar #define BUS_SPACE_MAP_LINEAR 0x02 93de2fa7b8SMarcel Moolenaar #define BUS_SPACE_MAP_PREFETCHABLE 0x04 94de2fa7b8SMarcel Moolenaar 95de2fa7b8SMarcel Moolenaar #define BUS_SPACE_UNRESTRICTED (~0) 96de2fa7b8SMarcel Moolenaar 97de2fa7b8SMarcel Moolenaar #define BUS_SPACE_BARRIER_READ 0x01 98de2fa7b8SMarcel Moolenaar #define BUS_SPACE_BARRIER_WRITE 0x02 99de2fa7b8SMarcel Moolenaar 100de2fa7b8SMarcel Moolenaar struct bus_space_access; 101de2fa7b8SMarcel Moolenaar 102de2fa7b8SMarcel Moolenaar struct bus_space { 103de2fa7b8SMarcel Moolenaar /* mapping/unmapping */ 104de2fa7b8SMarcel Moolenaar int (*bs_map)(bus_addr_t, bus_size_t, int, 105de2fa7b8SMarcel Moolenaar bus_space_handle_t *); 106*a3d6e0deSJohn Baldwin void (*bs_unmap)(bus_space_handle_t, bus_size_t); 107de2fa7b8SMarcel Moolenaar int (*bs_subregion)(bus_space_handle_t, bus_size_t, 108de2fa7b8SMarcel Moolenaar bus_size_t, bus_space_handle_t *); 109de2fa7b8SMarcel Moolenaar 110de2fa7b8SMarcel Moolenaar /* allocation/deallocation */ 111de2fa7b8SMarcel Moolenaar int (*bs_alloc)(bus_addr_t, bus_addr_t, bus_size_t, 112de2fa7b8SMarcel Moolenaar bus_size_t, bus_size_t, int, bus_addr_t *, bus_space_handle_t *); 113de2fa7b8SMarcel Moolenaar void (*bs_free)(bus_space_handle_t, bus_size_t); 114de2fa7b8SMarcel Moolenaar 115de2fa7b8SMarcel Moolenaar void (*bs_barrier)(bus_space_handle_t, bus_size_t, 116de2fa7b8SMarcel Moolenaar bus_size_t, int); 117de2fa7b8SMarcel Moolenaar 118de2fa7b8SMarcel Moolenaar /* Read single. */ 119de2fa7b8SMarcel Moolenaar uint8_t (*bs_r_1)(bus_space_handle_t, bus_size_t); 120de2fa7b8SMarcel Moolenaar uint16_t (*bs_r_2)(bus_space_handle_t, bus_size_t); 121de2fa7b8SMarcel Moolenaar uint32_t (*bs_r_4)(bus_space_handle_t, bus_size_t); 122de2fa7b8SMarcel Moolenaar uint64_t (*bs_r_8)(bus_space_handle_t, bus_size_t); 123de2fa7b8SMarcel Moolenaar 124de2fa7b8SMarcel Moolenaar uint16_t (*bs_r_s_2)(bus_space_handle_t, bus_size_t); 125de2fa7b8SMarcel Moolenaar uint32_t (*bs_r_s_4)(bus_space_handle_t, bus_size_t); 126de2fa7b8SMarcel Moolenaar uint64_t (*bs_r_s_8)(bus_space_handle_t, bus_size_t); 127de2fa7b8SMarcel Moolenaar 128de2fa7b8SMarcel Moolenaar /* read multiple */ 129de2fa7b8SMarcel Moolenaar void (*bs_rm_1)(bus_space_handle_t, bus_size_t, uint8_t *, 130de2fa7b8SMarcel Moolenaar bus_size_t); 131de2fa7b8SMarcel Moolenaar void (*bs_rm_2)(bus_space_handle_t, bus_size_t, uint16_t *, 132de2fa7b8SMarcel Moolenaar bus_size_t); 133de2fa7b8SMarcel Moolenaar void (*bs_rm_4)(bus_space_handle_t, bus_size_t, uint32_t *, 134de2fa7b8SMarcel Moolenaar bus_size_t); 135de2fa7b8SMarcel Moolenaar void (*bs_rm_8)(bus_space_handle_t, bus_size_t, uint64_t *, 136de2fa7b8SMarcel Moolenaar bus_size_t); 137de2fa7b8SMarcel Moolenaar 138de2fa7b8SMarcel Moolenaar void (*bs_rm_s_2)(bus_space_handle_t, bus_size_t, uint16_t *, 139de2fa7b8SMarcel Moolenaar bus_size_t); 140de2fa7b8SMarcel Moolenaar void (*bs_rm_s_4)(bus_space_handle_t, bus_size_t, uint32_t *, 141de2fa7b8SMarcel Moolenaar bus_size_t); 142de2fa7b8SMarcel Moolenaar void (*bs_rm_s_8)(bus_space_handle_t, bus_size_t, uint64_t *, 143de2fa7b8SMarcel Moolenaar bus_size_t); 144de2fa7b8SMarcel Moolenaar 145de2fa7b8SMarcel Moolenaar /* read region */ 146de2fa7b8SMarcel Moolenaar void (*bs_rr_1)(bus_space_handle_t, bus_size_t, uint8_t *, 147de2fa7b8SMarcel Moolenaar bus_size_t); 148de2fa7b8SMarcel Moolenaar void (*bs_rr_2)(bus_space_handle_t, bus_size_t, uint16_t *, 149de2fa7b8SMarcel Moolenaar bus_size_t); 150de2fa7b8SMarcel Moolenaar void (*bs_rr_4)(bus_space_handle_t, bus_size_t, uint32_t *, 151de2fa7b8SMarcel Moolenaar bus_size_t); 152de2fa7b8SMarcel Moolenaar void (*bs_rr_8)(bus_space_handle_t, bus_size_t, uint64_t *, 153de2fa7b8SMarcel Moolenaar bus_size_t); 154de2fa7b8SMarcel Moolenaar 155de2fa7b8SMarcel Moolenaar void (*bs_rr_s_2)(bus_space_handle_t, bus_size_t, uint16_t *, 156de2fa7b8SMarcel Moolenaar bus_size_t); 157de2fa7b8SMarcel Moolenaar void (*bs_rr_s_4)(bus_space_handle_t, bus_size_t, uint32_t *, 158de2fa7b8SMarcel Moolenaar bus_size_t); 159de2fa7b8SMarcel Moolenaar void (*bs_rr_s_8)(bus_space_handle_t, bus_size_t, uint64_t *, 160de2fa7b8SMarcel Moolenaar bus_size_t); 161de2fa7b8SMarcel Moolenaar 162de2fa7b8SMarcel Moolenaar /* write */ 163de2fa7b8SMarcel Moolenaar void (*bs_w_1)(bus_space_handle_t, bus_size_t, uint8_t); 164de2fa7b8SMarcel Moolenaar void (*bs_w_2)(bus_space_handle_t, bus_size_t, uint16_t); 165de2fa7b8SMarcel Moolenaar void (*bs_w_4)(bus_space_handle_t, bus_size_t, uint32_t); 166de2fa7b8SMarcel Moolenaar void (*bs_w_8)(bus_space_handle_t, bus_size_t, uint64_t); 167de2fa7b8SMarcel Moolenaar 168de2fa7b8SMarcel Moolenaar void (*bs_w_s_2)(bus_space_handle_t, bus_size_t, uint16_t); 169de2fa7b8SMarcel Moolenaar void (*bs_w_s_4)(bus_space_handle_t, bus_size_t, uint32_t); 170de2fa7b8SMarcel Moolenaar void (*bs_w_s_8)(bus_space_handle_t, bus_size_t, uint64_t); 171de2fa7b8SMarcel Moolenaar 172de2fa7b8SMarcel Moolenaar /* write multiple */ 173de2fa7b8SMarcel Moolenaar void (*bs_wm_1)(bus_space_handle_t, bus_size_t, 174de2fa7b8SMarcel Moolenaar const uint8_t *, bus_size_t); 175de2fa7b8SMarcel Moolenaar void (*bs_wm_2)(bus_space_handle_t, bus_size_t, 176de2fa7b8SMarcel Moolenaar const uint16_t *, bus_size_t); 177de2fa7b8SMarcel Moolenaar void (*bs_wm_4)(bus_space_handle_t, bus_size_t, 178de2fa7b8SMarcel Moolenaar const uint32_t *, bus_size_t); 179de2fa7b8SMarcel Moolenaar void (*bs_wm_8)(bus_space_handle_t, bus_size_t, 180de2fa7b8SMarcel Moolenaar const uint64_t *, bus_size_t); 181de2fa7b8SMarcel Moolenaar 182de2fa7b8SMarcel Moolenaar void (*bs_wm_s_2)(bus_space_handle_t, bus_size_t, 183de2fa7b8SMarcel Moolenaar const uint16_t *, bus_size_t); 184de2fa7b8SMarcel Moolenaar void (*bs_wm_s_4)(bus_space_handle_t, bus_size_t, 185de2fa7b8SMarcel Moolenaar const uint32_t *, bus_size_t); 186de2fa7b8SMarcel Moolenaar void (*bs_wm_s_8)(bus_space_handle_t, bus_size_t, 187de2fa7b8SMarcel Moolenaar const uint64_t *, bus_size_t); 188de2fa7b8SMarcel Moolenaar 189de2fa7b8SMarcel Moolenaar /* write region */ 190de2fa7b8SMarcel Moolenaar void (*bs_wr_1)(bus_space_handle_t, bus_size_t, 191de2fa7b8SMarcel Moolenaar const uint8_t *, bus_size_t); 192de2fa7b8SMarcel Moolenaar void (*bs_wr_2)(bus_space_handle_t, bus_size_t, 193de2fa7b8SMarcel Moolenaar const uint16_t *, bus_size_t); 194de2fa7b8SMarcel Moolenaar void (*bs_wr_4)(bus_space_handle_t, bus_size_t, 195de2fa7b8SMarcel Moolenaar const uint32_t *, bus_size_t); 196de2fa7b8SMarcel Moolenaar void (*bs_wr_8)(bus_space_handle_t, bus_size_t, 197de2fa7b8SMarcel Moolenaar const uint64_t *, bus_size_t); 198de2fa7b8SMarcel Moolenaar 199de2fa7b8SMarcel Moolenaar void (*bs_wr_s_2)(bus_space_handle_t, bus_size_t, 200de2fa7b8SMarcel Moolenaar const uint16_t *, bus_size_t); 201de2fa7b8SMarcel Moolenaar void (*bs_wr_s_4)(bus_space_handle_t, bus_size_t, 202de2fa7b8SMarcel Moolenaar const uint32_t *, bus_size_t); 203de2fa7b8SMarcel Moolenaar void (*bs_wr_s_8)(bus_space_handle_t, bus_size_t, 204de2fa7b8SMarcel Moolenaar const uint64_t *, bus_size_t); 205de2fa7b8SMarcel Moolenaar 206de2fa7b8SMarcel Moolenaar /* set multiple */ 207de2fa7b8SMarcel Moolenaar void (*bs_sm_1)(bus_space_handle_t, bus_size_t, uint8_t, 208de2fa7b8SMarcel Moolenaar bus_size_t); 209de2fa7b8SMarcel Moolenaar void (*bs_sm_2)(bus_space_handle_t, bus_size_t, uint16_t, 210de2fa7b8SMarcel Moolenaar bus_size_t); 211de2fa7b8SMarcel Moolenaar void (*bs_sm_4)(bus_space_handle_t, bus_size_t, uint32_t, 212de2fa7b8SMarcel Moolenaar bus_size_t); 213de2fa7b8SMarcel Moolenaar void (*bs_sm_8)(bus_space_handle_t, bus_size_t, uint64_t, 214de2fa7b8SMarcel Moolenaar bus_size_t); 215de2fa7b8SMarcel Moolenaar 216de2fa7b8SMarcel Moolenaar void (*bs_sm_s_2)(bus_space_handle_t, bus_size_t, uint16_t, 217de2fa7b8SMarcel Moolenaar bus_size_t); 218de2fa7b8SMarcel Moolenaar void (*bs_sm_s_4)(bus_space_handle_t, bus_size_t, uint32_t, 219de2fa7b8SMarcel Moolenaar bus_size_t); 220de2fa7b8SMarcel Moolenaar void (*bs_sm_s_8)(bus_space_handle_t, bus_size_t, uint64_t, 221de2fa7b8SMarcel Moolenaar bus_size_t); 222de2fa7b8SMarcel Moolenaar 223de2fa7b8SMarcel Moolenaar /* set region */ 224de2fa7b8SMarcel Moolenaar void (*bs_sr_1)(bus_space_handle_t, bus_size_t, uint8_t, 225de2fa7b8SMarcel Moolenaar bus_size_t); 226de2fa7b8SMarcel Moolenaar void (*bs_sr_2)(bus_space_handle_t, bus_size_t, uint16_t, 227de2fa7b8SMarcel Moolenaar bus_size_t); 228de2fa7b8SMarcel Moolenaar void (*bs_sr_4)(bus_space_handle_t, bus_size_t, uint32_t, 229de2fa7b8SMarcel Moolenaar bus_size_t); 230de2fa7b8SMarcel Moolenaar void (*bs_sr_8)(bus_space_handle_t, bus_size_t, uint64_t, 231de2fa7b8SMarcel Moolenaar bus_size_t); 232de2fa7b8SMarcel Moolenaar 233de2fa7b8SMarcel Moolenaar void (*bs_sr_s_2)(bus_space_handle_t, bus_size_t, uint16_t, 234de2fa7b8SMarcel Moolenaar bus_size_t); 235de2fa7b8SMarcel Moolenaar void (*bs_sr_s_4)(bus_space_handle_t, bus_size_t, uint32_t, 236de2fa7b8SMarcel Moolenaar bus_size_t); 237de2fa7b8SMarcel Moolenaar void (*bs_sr_s_8)(bus_space_handle_t, bus_size_t, uint64_t, 238de2fa7b8SMarcel Moolenaar bus_size_t); 239de2fa7b8SMarcel Moolenaar 240de2fa7b8SMarcel Moolenaar /* copy region */ 241de2fa7b8SMarcel Moolenaar void (*bs_cr_1)(bus_space_handle_t, bus_size_t, 242de2fa7b8SMarcel Moolenaar bus_space_handle_t, bus_size_t, bus_size_t); 243de2fa7b8SMarcel Moolenaar void (*bs_cr_2)(bus_space_handle_t, bus_size_t, 244de2fa7b8SMarcel Moolenaar bus_space_handle_t, bus_size_t, bus_size_t); 245de2fa7b8SMarcel Moolenaar void (*bs_cr_4)(bus_space_handle_t, bus_size_t, 246de2fa7b8SMarcel Moolenaar bus_space_handle_t, bus_size_t, bus_size_t); 247de2fa7b8SMarcel Moolenaar void (*bs_cr_8)(bus_space_handle_t, bus_size_t, 248de2fa7b8SMarcel Moolenaar bus_space_handle_t, bus_size_t, bus_size_t); 249de2fa7b8SMarcel Moolenaar 250de2fa7b8SMarcel Moolenaar void (*bs_cr_s_2)(bus_space_handle_t, bus_size_t, 251de2fa7b8SMarcel Moolenaar bus_space_handle_t, bus_size_t, bus_size_t); 252de2fa7b8SMarcel Moolenaar void (*bs_cr_s_4)(bus_space_handle_t, bus_size_t, 253de2fa7b8SMarcel Moolenaar bus_space_handle_t, bus_size_t, bus_size_t); 254de2fa7b8SMarcel Moolenaar void (*bs_cr_s_8)(bus_space_handle_t, bus_size_t, 255de2fa7b8SMarcel Moolenaar bus_space_handle_t, bus_size_t, bus_size_t); 256de2fa7b8SMarcel Moolenaar }; 257de2fa7b8SMarcel Moolenaar 258de2fa7b8SMarcel Moolenaar extern struct bus_space bs_be_tag; 259de2fa7b8SMarcel Moolenaar extern struct bus_space bs_le_tag; 260de2fa7b8SMarcel Moolenaar 261de2fa7b8SMarcel Moolenaar #define __bs_c(a,b) __CONCAT(a,b) 262de2fa7b8SMarcel Moolenaar #define __bs_opname(op,size) __bs_c(__bs_c(__bs_c(bs_,op),_),size) 263de2fa7b8SMarcel Moolenaar 264de2fa7b8SMarcel Moolenaar #define __bs_rs(sz, t, h, o) \ 265de2fa7b8SMarcel Moolenaar (*(t)->__bs_opname(r,sz))(h, o) 266de2fa7b8SMarcel Moolenaar #define __bs_ws(sz, t, h, o, v) \ 267de2fa7b8SMarcel Moolenaar (*(t)->__bs_opname(w,sz))(h, o, v) 268de2fa7b8SMarcel Moolenaar #define __bs_nonsingle(type, sz, t, h, o, a, c) \ 269de2fa7b8SMarcel Moolenaar (*(t)->__bs_opname(type,sz))(h, o, a, c) 270de2fa7b8SMarcel Moolenaar #define __bs_set(type, sz, t, h, o, v, c) \ 271de2fa7b8SMarcel Moolenaar (*(t)->__bs_opname(type,sz))(h, o, v, c) 272de2fa7b8SMarcel Moolenaar #define __bs_copy(sz, t, h1, o1, h2, o2, cnt) \ 273de2fa7b8SMarcel Moolenaar (*(t)->__bs_opname(c,sz))(h1, o1, h2, o2, cnt) 274de2fa7b8SMarcel Moolenaar 275de2fa7b8SMarcel Moolenaar /* 276de2fa7b8SMarcel Moolenaar * Mapping and unmapping operations. 277de2fa7b8SMarcel Moolenaar */ 278de2fa7b8SMarcel Moolenaar #define bus_space_map(t, a, s, c, hp) (*(t)->bs_map)(a, s, c, hp) 279de2fa7b8SMarcel Moolenaar #define bus_space_unmap(t, h, s) (*(t)->bs_unmap)(h, s) 280de2fa7b8SMarcel Moolenaar #define bus_space_subregion(t, h, o, s, hp) (*(t)->bs_subregion)(h, o, s, hp) 281de2fa7b8SMarcel Moolenaar 282de2fa7b8SMarcel Moolenaar /* 283de2fa7b8SMarcel Moolenaar * Allocation and deallocation operations. 284de2fa7b8SMarcel Moolenaar */ 285de2fa7b8SMarcel Moolenaar #define bus_space_alloc(t, rs, re, s, a, b, c, ap, hp) \ 286de2fa7b8SMarcel Moolenaar (*(t)->bs_alloc)(rs, re, s, a, b, c, ap, hp) 287de2fa7b8SMarcel Moolenaar #define bus_space_free(t, h, s) \ 288de2fa7b8SMarcel Moolenaar (*(t)->bs_free)(h, s) 289de2fa7b8SMarcel Moolenaar 290de2fa7b8SMarcel Moolenaar /* 291de2fa7b8SMarcel Moolenaar * Bus barrier operations. 292de2fa7b8SMarcel Moolenaar */ 293de2fa7b8SMarcel Moolenaar #define bus_space_barrier(t, h, o, l, f) (*(t)->bs_barrier)(h, o, l, f) 294de2fa7b8SMarcel Moolenaar 295de2fa7b8SMarcel Moolenaar /* 296de2fa7b8SMarcel Moolenaar * Bus read (single) operations. 297de2fa7b8SMarcel Moolenaar */ 298de2fa7b8SMarcel Moolenaar #define bus_space_read_1(t, h, o) __bs_rs(1,t,h,o) 299de2fa7b8SMarcel Moolenaar #define bus_space_read_2(t, h, o) __bs_rs(2,t,h,o) 300de2fa7b8SMarcel Moolenaar #define bus_space_read_4(t, h, o) __bs_rs(4,t,h,o) 301de2fa7b8SMarcel Moolenaar #define bus_space_read_8(t, h, o) __bs_rs(8,t,h,o) 302de2fa7b8SMarcel Moolenaar 303de2fa7b8SMarcel Moolenaar #define bus_space_read_stream_1 bus_space_read_1 304de2fa7b8SMarcel Moolenaar #define bus_space_read_stream_2(t, h, o) __bs_rs(s_2,t,h,o) 305de2fa7b8SMarcel Moolenaar #define bus_space_read_stream_4(t, h, o) __bs_rs(s_4,t,h,o) 306de2fa7b8SMarcel Moolenaar #define bus_space_read_stream_8(t, h, o) __bs_rs(s_8,t,h,o) 307de2fa7b8SMarcel Moolenaar 308de2fa7b8SMarcel Moolenaar /* 309de2fa7b8SMarcel Moolenaar * Bus read multiple operations. 310de2fa7b8SMarcel Moolenaar */ 311de2fa7b8SMarcel Moolenaar #define bus_space_read_multi_1(t, h, o, a, c) \ 312de2fa7b8SMarcel Moolenaar __bs_nonsingle(rm,1,(t),(h),(o),(a),(c)) 313de2fa7b8SMarcel Moolenaar #define bus_space_read_multi_2(t, h, o, a, c) \ 314de2fa7b8SMarcel Moolenaar __bs_nonsingle(rm,2,(t),(h),(o),(a),(c)) 315de2fa7b8SMarcel Moolenaar #define bus_space_read_multi_4(t, h, o, a, c) \ 316de2fa7b8SMarcel Moolenaar __bs_nonsingle(rm,4,(t),(h),(o),(a),(c)) 317de2fa7b8SMarcel Moolenaar #define bus_space_read_multi_8(t, h, o, a, c) \ 318de2fa7b8SMarcel Moolenaar __bs_nonsingle(rm,8,(t),(h),(o),(a),(c)) 319de2fa7b8SMarcel Moolenaar 320de2fa7b8SMarcel Moolenaar #define bus_space_read_multi_stream_1 bus_space_read_multi_1 321de2fa7b8SMarcel Moolenaar #define bus_space_read_multi_stream_2(t, h, o, a, c) \ 322de2fa7b8SMarcel Moolenaar __bs_nonsingle(rm,s_2,(t),(h),(o),(a),(c)) 323de2fa7b8SMarcel Moolenaar #define bus_space_read_multi_stream_4(t, h, o, a, c) \ 324de2fa7b8SMarcel Moolenaar __bs_nonsingle(rm,s_4,(t),(h),(o),(a),(c)) 325de2fa7b8SMarcel Moolenaar #define bus_space_read_multi_stream_8(t, h, o, a, c) \ 326de2fa7b8SMarcel Moolenaar __bs_nonsingle(rm,s_8,(t),(h),(o),(a),(c)) 327de2fa7b8SMarcel Moolenaar 328de2fa7b8SMarcel Moolenaar /* 329de2fa7b8SMarcel Moolenaar * Bus read region operations. 330de2fa7b8SMarcel Moolenaar */ 331de2fa7b8SMarcel Moolenaar #define bus_space_read_region_1(t, h, o, a, c) \ 332de2fa7b8SMarcel Moolenaar __bs_nonsingle(rr,1,(t),(h),(o),(a),(c)) 333de2fa7b8SMarcel Moolenaar #define bus_space_read_region_2(t, h, o, a, c) \ 334de2fa7b8SMarcel Moolenaar __bs_nonsingle(rr,2,(t),(h),(o),(a),(c)) 335de2fa7b8SMarcel Moolenaar #define bus_space_read_region_4(t, h, o, a, c) \ 336de2fa7b8SMarcel Moolenaar __bs_nonsingle(rr,4,(t),(h),(o),(a),(c)) 337de2fa7b8SMarcel Moolenaar #define bus_space_read_region_8(t, h, o, a, c) \ 338de2fa7b8SMarcel Moolenaar __bs_nonsingle(rr,8,(t),(h),(o),(a),(c)) 339de2fa7b8SMarcel Moolenaar 340de2fa7b8SMarcel Moolenaar #define bus_space_read_region_stream_1 bus_space_read_region_1 341de2fa7b8SMarcel Moolenaar #define bus_space_read_region_stream_2(t, h, o, a, c) \ 342de2fa7b8SMarcel Moolenaar __bs_nonsingle(rr,s_2,(t),(h),(o),(a),(c)) 343de2fa7b8SMarcel Moolenaar #define bus_space_read_region_stream_4(t, h, o, a, c) \ 344de2fa7b8SMarcel Moolenaar __bs_nonsingle(rr,s_4,(t),(h),(o),(a),(c)) 345de2fa7b8SMarcel Moolenaar #define bus_space_read_region_stream_8(t, h, o, a, c) \ 346de2fa7b8SMarcel Moolenaar __bs_nonsingle(rr,s_8,(t),(h),(o),(a),(c)) 347de2fa7b8SMarcel Moolenaar 348de2fa7b8SMarcel Moolenaar /* 349de2fa7b8SMarcel Moolenaar * Bus write (single) operations. 350de2fa7b8SMarcel Moolenaar */ 351de2fa7b8SMarcel Moolenaar #define bus_space_write_1(t, h, o, v) __bs_ws(1,(t),(h),(o),(v)) 352de2fa7b8SMarcel Moolenaar #define bus_space_write_2(t, h, o, v) __bs_ws(2,(t),(h),(o),(v)) 353de2fa7b8SMarcel Moolenaar #define bus_space_write_4(t, h, o, v) __bs_ws(4,(t),(h),(o),(v)) 354de2fa7b8SMarcel Moolenaar #define bus_space_write_8(t, h, o, v) __bs_ws(8,(t),(h),(o),(v)) 355de2fa7b8SMarcel Moolenaar 356de2fa7b8SMarcel Moolenaar #define bus_space_write_stream_1 bus_space_write_1 357de2fa7b8SMarcel Moolenaar #define bus_space_write_stream_2(t, h, o, v) __bs_ws(s_2,(t),(h),(o),(v)) 358de2fa7b8SMarcel Moolenaar #define bus_space_write_stream_4(t, h, o, v) __bs_ws(s_4,(t),(h),(o),(v)) 359de2fa7b8SMarcel Moolenaar #define bus_space_write_stream_8(t, h, o, v) __bs_ws(s_8,(t),(h),(o),(v)) 360de2fa7b8SMarcel Moolenaar 361de2fa7b8SMarcel Moolenaar /* 362de2fa7b8SMarcel Moolenaar * Bus write multiple operations. 363de2fa7b8SMarcel Moolenaar */ 364de2fa7b8SMarcel Moolenaar #define bus_space_write_multi_1(t, h, o, a, c) \ 365de2fa7b8SMarcel Moolenaar __bs_nonsingle(wm,1,(t),(h),(o),(a),(c)) 366de2fa7b8SMarcel Moolenaar #define bus_space_write_multi_2(t, h, o, a, c) \ 367de2fa7b8SMarcel Moolenaar __bs_nonsingle(wm,2,(t),(h),(o),(a),(c)) 368de2fa7b8SMarcel Moolenaar #define bus_space_write_multi_4(t, h, o, a, c) \ 369de2fa7b8SMarcel Moolenaar __bs_nonsingle(wm,4,(t),(h),(o),(a),(c)) 370de2fa7b8SMarcel Moolenaar #define bus_space_write_multi_8(t, h, o, a, c) \ 371de2fa7b8SMarcel Moolenaar __bs_nonsingle(wm,8,(t),(h),(o),(a),(c)) 372de2fa7b8SMarcel Moolenaar 373de2fa7b8SMarcel Moolenaar #define bus_space_write_multi_stream_1 bus_space_write_multi_1 374de2fa7b8SMarcel Moolenaar #define bus_space_write_multi_stream_2(t, h, o, a, c) \ 375de2fa7b8SMarcel Moolenaar __bs_nonsingle(wm,s_2,(t),(h),(o),(a),(c)) 376de2fa7b8SMarcel Moolenaar #define bus_space_write_multi_stream_4(t, h, o, a, c) \ 377de2fa7b8SMarcel Moolenaar __bs_nonsingle(wm,s_4,(t),(h),(o),(a),(c)) 378de2fa7b8SMarcel Moolenaar #define bus_space_write_multi_stream_8(t, h, o, a, c) \ 379de2fa7b8SMarcel Moolenaar __bs_nonsingle(wm,s_8,(t),(h),(o),(a),(c)) 380de2fa7b8SMarcel Moolenaar 381de2fa7b8SMarcel Moolenaar /* 382de2fa7b8SMarcel Moolenaar * Bus write region operations. 383de2fa7b8SMarcel Moolenaar */ 384de2fa7b8SMarcel Moolenaar #define bus_space_write_region_1(t, h, o, a, c) \ 385de2fa7b8SMarcel Moolenaar __bs_nonsingle(wr,1,(t),(h),(o),(a),(c)) 386de2fa7b8SMarcel Moolenaar #define bus_space_write_region_2(t, h, o, a, c) \ 387de2fa7b8SMarcel Moolenaar __bs_nonsingle(wr,2,(t),(h),(o),(a),(c)) 388de2fa7b8SMarcel Moolenaar #define bus_space_write_region_4(t, h, o, a, c) \ 389de2fa7b8SMarcel Moolenaar __bs_nonsingle(wr,4,(t),(h),(o),(a),(c)) 390de2fa7b8SMarcel Moolenaar #define bus_space_write_region_8(t, h, o, a, c) \ 391de2fa7b8SMarcel Moolenaar __bs_nonsingle(wr,8,(t),(h),(o),(a),(c)) 392de2fa7b8SMarcel Moolenaar 393de2fa7b8SMarcel Moolenaar #define bus_space_write_region_stream_1 bus_space_write_region_1 394de2fa7b8SMarcel Moolenaar #define bus_space_write_region_stream_2(t, h, o, a, c) \ 395de2fa7b8SMarcel Moolenaar __bs_nonsingle(wr,s_2,(t),(h),(o),(a),(c)) 396de2fa7b8SMarcel Moolenaar #define bus_space_write_region_stream_4(t, h, o, a, c) \ 397de2fa7b8SMarcel Moolenaar __bs_nonsingle(wr,s_4,(t),(h),(o),(a),(c)) 398de2fa7b8SMarcel Moolenaar #define bus_space_write_region_stream_8(t, h, o, a, c) \ 399de2fa7b8SMarcel Moolenaar __bs_nonsingle(wr,s_8,(t),(h),(o),(a),(c)) 400de2fa7b8SMarcel Moolenaar 401de2fa7b8SMarcel Moolenaar /* 402de2fa7b8SMarcel Moolenaar * Set multiple operations. 403de2fa7b8SMarcel Moolenaar */ 404de2fa7b8SMarcel Moolenaar #define bus_space_set_multi_1(t, h, o, v, c) \ 405de2fa7b8SMarcel Moolenaar __bs_set(sm,1,(t),(h),(o),(v),(c)) 406de2fa7b8SMarcel Moolenaar #define bus_space_set_multi_2(t, h, o, v, c) \ 407de2fa7b8SMarcel Moolenaar __bs_set(sm,2,(t),(h),(o),(v),(c)) 408de2fa7b8SMarcel Moolenaar #define bus_space_set_multi_4(t, h, o, v, c) \ 409de2fa7b8SMarcel Moolenaar __bs_set(sm,4,(t),(h),(o),(v),(c)) 410de2fa7b8SMarcel Moolenaar #define bus_space_set_multi_8(t, h, o, v, c) \ 411de2fa7b8SMarcel Moolenaar __bs_set(sm,8,(t),(h),(o),(v),(c)) 412de2fa7b8SMarcel Moolenaar 413de2fa7b8SMarcel Moolenaar #define bus_space_set_multi_stream_1 bus_space_set_multi_1 414de2fa7b8SMarcel Moolenaar #define bus_space_set_multi_stream_2(t, h, o, v, c) \ 415de2fa7b8SMarcel Moolenaar __bs_set(sm,s_2,(t),(h),(o),(v),(c)) 416de2fa7b8SMarcel Moolenaar #define bus_space_set_multi_stream_4(t, h, o, v, c) \ 417de2fa7b8SMarcel Moolenaar __bs_set(sm,s_4,(t),(h),(o),(v),(c)) 418de2fa7b8SMarcel Moolenaar #define bus_space_set_multi_stream_8(t, h, o, v, c) \ 419de2fa7b8SMarcel Moolenaar __bs_set(sm,s_8,(t),(h),(o),(v),(c)) 420de2fa7b8SMarcel Moolenaar 421de2fa7b8SMarcel Moolenaar /* 422de2fa7b8SMarcel Moolenaar * Set region operations. 423de2fa7b8SMarcel Moolenaar */ 424de2fa7b8SMarcel Moolenaar #define bus_space_set_region_1(t, h, o, v, c) \ 425de2fa7b8SMarcel Moolenaar __bs_set(sr,1,(t),(h),(o),(v),(c)) 426de2fa7b8SMarcel Moolenaar #define bus_space_set_region_2(t, h, o, v, c) \ 427de2fa7b8SMarcel Moolenaar __bs_set(sr,2,(t),(h),(o),(v),(c)) 428de2fa7b8SMarcel Moolenaar #define bus_space_set_region_4(t, h, o, v, c) \ 429de2fa7b8SMarcel Moolenaar __bs_set(sr,4,(t),(h),(o),(v),(c)) 430de2fa7b8SMarcel Moolenaar #define bus_space_set_region_8(t, h, o, v, c) \ 431de2fa7b8SMarcel Moolenaar __bs_set(sr,8,(t),(h),(o),(v),(c)) 432de2fa7b8SMarcel Moolenaar 433de2fa7b8SMarcel Moolenaar #define bus_space_set_region_stream_1 bus_space_set_region_1 434de2fa7b8SMarcel Moolenaar #define bus_space_set_region_stream_2(t, h, o, v, c) \ 435de2fa7b8SMarcel Moolenaar __bs_set(sr,s_2,(t),(h),(o),(v),(c)) 436de2fa7b8SMarcel Moolenaar #define bus_space_set_region_stream_4(t, h, o, v, c) \ 437de2fa7b8SMarcel Moolenaar __bs_set(sr,s_4,(t),(h),(o),(v),(c)) 438de2fa7b8SMarcel Moolenaar #define bus_space_set_region_stream_8(t, h, o, v, c) \ 439de2fa7b8SMarcel Moolenaar __bs_set(sr,s_8,(t),(h),(o),(v),(c)) 440de2fa7b8SMarcel Moolenaar 441de2fa7b8SMarcel Moolenaar #if 0 442de2fa7b8SMarcel Moolenaar /* 443de2fa7b8SMarcel Moolenaar * Copy operations. 444de2fa7b8SMarcel Moolenaar */ 445de2fa7b8SMarcel Moolenaar #define bus_space_copy_region_1(t, h1, o1, h2, o2, c) \ 446de2fa7b8SMarcel Moolenaar __bs_copy(1, t, h1, o1, h2, o2, c) 447de2fa7b8SMarcel Moolenaar #define bus_space_copy_region_2(t, h1, o1, h2, o2, c) \ 448de2fa7b8SMarcel Moolenaar __bs_copy(2, t, h1, o1, h2, o2, c) 449de2fa7b8SMarcel Moolenaar #define bus_space_copy_region_4(t, h1, o1, h2, o2, c) \ 450de2fa7b8SMarcel Moolenaar __bs_copy(4, t, h1, o1, h2, o2, c) 451de2fa7b8SMarcel Moolenaar #define bus_space_copy_region_8(t, h1, o1, h2, o2, c) \ 452de2fa7b8SMarcel Moolenaar __bs_copy(8, t, h1, o1, h2, o2, c) 453de2fa7b8SMarcel Moolenaar 454de2fa7b8SMarcel Moolenaar #define bus_space_copy_region_stream_1 bus_space_copy_region_1 455de2fa7b8SMarcel Moolenaar #define bus_space_copy_region_stream_2(t, h1, o1, h2, o2, c) \ 456de2fa7b8SMarcel Moolenaar __bs_copy(s_2, t, h1, o1, h2, o2, c) 457de2fa7b8SMarcel Moolenaar #define bus_space_copy_region_stream_4(t, h1, o1, h2, o2, c) \ 458de2fa7b8SMarcel Moolenaar __bs_copy(s_4, t, h1, o1, h2, o2, c) 459de2fa7b8SMarcel Moolenaar #define bus_space_copy_region_stream_8(t, h1, o1, h2, o2, c) \ 460de2fa7b8SMarcel Moolenaar __bs_copy(s_8, t, h1, o1, h2, o2, c) 461de2fa7b8SMarcel Moolenaar #endif 462de2fa7b8SMarcel Moolenaar 46395a85c12SMichal Meloun #define BUS_PEEK_FUNC(width, type) \ 46495a85c12SMichal Meloun static inline int \ 46595a85c12SMichal Meloun bus_space_peek_##width(bus_space_tag_t tag, \ 46695a85c12SMichal Meloun bus_space_handle_t hnd, bus_size_t offset, type *value) \ 46795a85c12SMichal Meloun { \ 46895a85c12SMichal Meloun type tmp; \ 46995a85c12SMichal Meloun tmp = bus_space_read_##width(tag, hnd, offset); \ 47031820621SMichal Meloun *value = (type)tmp; \ 47195a85c12SMichal Meloun return (0); \ 47295a85c12SMichal Meloun } 47395a85c12SMichal Meloun BUS_PEEK_FUNC(1, uint8_t) 47495a85c12SMichal Meloun BUS_PEEK_FUNC(2, uint16_t) 47595a85c12SMichal Meloun BUS_PEEK_FUNC(4, uint32_t) 47695a85c12SMichal Meloun BUS_PEEK_FUNC(8, uint64_t) 47795a85c12SMichal Meloun 47895a85c12SMichal Meloun #define BUS_POKE_FUNC(width, type) \ 47995a85c12SMichal Meloun static inline int \ 48095a85c12SMichal Meloun bus_space_poke_##width(bus_space_tag_t tag, \ 48195a85c12SMichal Meloun bus_space_handle_t hnd, bus_size_t offset, type value) \ 48295a85c12SMichal Meloun { \ 48395a85c12SMichal Meloun bus_space_write_##width(tag, hnd, offset, value); \ 48495a85c12SMichal Meloun return (0); \ 48595a85c12SMichal Meloun } 48695a85c12SMichal Meloun BUS_POKE_FUNC(1, uint8_t) 48795a85c12SMichal Meloun BUS_POKE_FUNC(2, uint16_t) 48895a85c12SMichal Meloun BUS_POKE_FUNC(4, uint32_t) 48995a85c12SMichal Meloun BUS_POKE_FUNC(8, uint64_t) 49095a85c12SMichal Meloun 4915974e5c7SScott Long #include <machine/bus_dma.h> 492f9bac91bSBenno Rice 493de2fa7b8SMarcel Moolenaar #endif /* _MACHINE_BUS_H_ */ 494