1de2fa7b8SMarcel Moolenaar /* $NetBSD: bus.h,v 1.11 2003/07/28 17:35:54 thorpej Exp $ */ 2de2fa7b8SMarcel Moolenaar 3f9bac91bSBenno Rice /*- 4*b61a5730SWarner 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 * $FreeBSD$ 66f9bac91bSBenno Rice */ 67f9bac91bSBenno Rice 68de2fa7b8SMarcel Moolenaar #ifndef _MACHINE_BUS_H_ 69de2fa7b8SMarcel Moolenaar #define _MACHINE_BUS_H_ 70f9bac91bSBenno Rice 7106db52b6SWarner Losh #include <machine/_bus.h> 72911e488aSPeter Grehan 73f9bac91bSBenno Rice #define BUS_SPACE_ALIGNED_POINTER(p, t) ALIGNED_POINTER(p, t) 74f9bac91bSBenno Rice 75c3e289e1SNathan Whitehorn #define BUS_SPACE_MAXADDR_24BIT 0xFFFFFFUL 76c3e289e1SNathan Whitehorn #define BUS_SPACE_MAXADDR_32BIT 0xFFFFFFFFUL 77c3e289e1SNathan Whitehorn #define BUS_SPACE_MAXSIZE_24BIT 0xFFFFFFUL 78c3e289e1SNathan Whitehorn #define BUS_SPACE_MAXSIZE_32BIT 0xFFFFFFFFUL 79c3e289e1SNathan Whitehorn 80c3e289e1SNathan Whitehorn #ifdef __powerpc64__ 81c3e289e1SNathan Whitehorn #define BUS_SPACE_MAXADDR 0xFFFFFFFFFFFFFFFFUL 82c3e289e1SNathan Whitehorn #define BUS_SPACE_MAXSIZE 0xFFFFFFFFFFFFFFFFUL 83c3e289e1SNathan Whitehorn #else 841c81bc83SJustin Hibbits #ifdef BOOKE 851c81bc83SJustin Hibbits #define BUS_SPACE_MAXADDR 0xFFFFFFFFFULL 861c81bc83SJustin Hibbits #define BUS_SPACE_MAXSIZE 0xFFFFFFFFUL 871c81bc83SJustin Hibbits #else 88c3e289e1SNathan Whitehorn #define BUS_SPACE_MAXADDR 0xFFFFFFFFUL 89c3e289e1SNathan Whitehorn #define BUS_SPACE_MAXSIZE 0xFFFFFFFFUL 90c3e289e1SNathan Whitehorn #endif 911c81bc83SJustin Hibbits #endif 92de2fa7b8SMarcel Moolenaar 93de2fa7b8SMarcel Moolenaar #define BUS_SPACE_MAP_CACHEABLE 0x01 94de2fa7b8SMarcel Moolenaar #define BUS_SPACE_MAP_LINEAR 0x02 95de2fa7b8SMarcel Moolenaar #define BUS_SPACE_MAP_PREFETCHABLE 0x04 96de2fa7b8SMarcel Moolenaar 97de2fa7b8SMarcel Moolenaar #define BUS_SPACE_UNRESTRICTED (~0) 98de2fa7b8SMarcel Moolenaar 99de2fa7b8SMarcel Moolenaar #define BUS_SPACE_BARRIER_READ 0x01 100de2fa7b8SMarcel Moolenaar #define BUS_SPACE_BARRIER_WRITE 0x02 101de2fa7b8SMarcel Moolenaar 102de2fa7b8SMarcel Moolenaar struct bus_space_access; 103de2fa7b8SMarcel Moolenaar 104de2fa7b8SMarcel Moolenaar struct bus_space { 105de2fa7b8SMarcel Moolenaar /* mapping/unmapping */ 106de2fa7b8SMarcel Moolenaar int (*bs_map)(bus_addr_t, bus_size_t, int, 107de2fa7b8SMarcel Moolenaar bus_space_handle_t *); 108de2fa7b8SMarcel Moolenaar void (*bs_unmap)(bus_size_t); 109de2fa7b8SMarcel Moolenaar int (*bs_subregion)(bus_space_handle_t, bus_size_t, 110de2fa7b8SMarcel Moolenaar bus_size_t, bus_space_handle_t *); 111de2fa7b8SMarcel Moolenaar 112de2fa7b8SMarcel Moolenaar /* allocation/deallocation */ 113de2fa7b8SMarcel Moolenaar int (*bs_alloc)(bus_addr_t, bus_addr_t, bus_size_t, 114de2fa7b8SMarcel Moolenaar bus_size_t, bus_size_t, int, bus_addr_t *, bus_space_handle_t *); 115de2fa7b8SMarcel Moolenaar void (*bs_free)(bus_space_handle_t, bus_size_t); 116de2fa7b8SMarcel Moolenaar 117de2fa7b8SMarcel Moolenaar void (*bs_barrier)(bus_space_handle_t, bus_size_t, 118de2fa7b8SMarcel Moolenaar bus_size_t, int); 119de2fa7b8SMarcel Moolenaar 120de2fa7b8SMarcel Moolenaar /* Read single. */ 121de2fa7b8SMarcel Moolenaar uint8_t (*bs_r_1)(bus_space_handle_t, bus_size_t); 122de2fa7b8SMarcel Moolenaar uint16_t (*bs_r_2)(bus_space_handle_t, bus_size_t); 123de2fa7b8SMarcel Moolenaar uint32_t (*bs_r_4)(bus_space_handle_t, bus_size_t); 124de2fa7b8SMarcel Moolenaar uint64_t (*bs_r_8)(bus_space_handle_t, bus_size_t); 125de2fa7b8SMarcel Moolenaar 126de2fa7b8SMarcel Moolenaar uint16_t (*bs_r_s_2)(bus_space_handle_t, bus_size_t); 127de2fa7b8SMarcel Moolenaar uint32_t (*bs_r_s_4)(bus_space_handle_t, bus_size_t); 128de2fa7b8SMarcel Moolenaar uint64_t (*bs_r_s_8)(bus_space_handle_t, bus_size_t); 129de2fa7b8SMarcel Moolenaar 130de2fa7b8SMarcel Moolenaar /* read multiple */ 131de2fa7b8SMarcel Moolenaar void (*bs_rm_1)(bus_space_handle_t, bus_size_t, uint8_t *, 132de2fa7b8SMarcel Moolenaar bus_size_t); 133de2fa7b8SMarcel Moolenaar void (*bs_rm_2)(bus_space_handle_t, bus_size_t, uint16_t *, 134de2fa7b8SMarcel Moolenaar bus_size_t); 135de2fa7b8SMarcel Moolenaar void (*bs_rm_4)(bus_space_handle_t, bus_size_t, uint32_t *, 136de2fa7b8SMarcel Moolenaar bus_size_t); 137de2fa7b8SMarcel Moolenaar void (*bs_rm_8)(bus_space_handle_t, bus_size_t, uint64_t *, 138de2fa7b8SMarcel Moolenaar bus_size_t); 139de2fa7b8SMarcel Moolenaar 140de2fa7b8SMarcel Moolenaar void (*bs_rm_s_2)(bus_space_handle_t, bus_size_t, uint16_t *, 141de2fa7b8SMarcel Moolenaar bus_size_t); 142de2fa7b8SMarcel Moolenaar void (*bs_rm_s_4)(bus_space_handle_t, bus_size_t, uint32_t *, 143de2fa7b8SMarcel Moolenaar bus_size_t); 144de2fa7b8SMarcel Moolenaar void (*bs_rm_s_8)(bus_space_handle_t, bus_size_t, uint64_t *, 145de2fa7b8SMarcel Moolenaar bus_size_t); 146de2fa7b8SMarcel Moolenaar 147de2fa7b8SMarcel Moolenaar /* read region */ 148de2fa7b8SMarcel Moolenaar void (*bs_rr_1)(bus_space_handle_t, bus_size_t, uint8_t *, 149de2fa7b8SMarcel Moolenaar bus_size_t); 150de2fa7b8SMarcel Moolenaar void (*bs_rr_2)(bus_space_handle_t, bus_size_t, uint16_t *, 151de2fa7b8SMarcel Moolenaar bus_size_t); 152de2fa7b8SMarcel Moolenaar void (*bs_rr_4)(bus_space_handle_t, bus_size_t, uint32_t *, 153de2fa7b8SMarcel Moolenaar bus_size_t); 154de2fa7b8SMarcel Moolenaar void (*bs_rr_8)(bus_space_handle_t, bus_size_t, uint64_t *, 155de2fa7b8SMarcel Moolenaar bus_size_t); 156de2fa7b8SMarcel Moolenaar 157de2fa7b8SMarcel Moolenaar void (*bs_rr_s_2)(bus_space_handle_t, bus_size_t, uint16_t *, 158de2fa7b8SMarcel Moolenaar bus_size_t); 159de2fa7b8SMarcel Moolenaar void (*bs_rr_s_4)(bus_space_handle_t, bus_size_t, uint32_t *, 160de2fa7b8SMarcel Moolenaar bus_size_t); 161de2fa7b8SMarcel Moolenaar void (*bs_rr_s_8)(bus_space_handle_t, bus_size_t, uint64_t *, 162de2fa7b8SMarcel Moolenaar bus_size_t); 163de2fa7b8SMarcel Moolenaar 164de2fa7b8SMarcel Moolenaar /* write */ 165de2fa7b8SMarcel Moolenaar void (*bs_w_1)(bus_space_handle_t, bus_size_t, uint8_t); 166de2fa7b8SMarcel Moolenaar void (*bs_w_2)(bus_space_handle_t, bus_size_t, uint16_t); 167de2fa7b8SMarcel Moolenaar void (*bs_w_4)(bus_space_handle_t, bus_size_t, uint32_t); 168de2fa7b8SMarcel Moolenaar void (*bs_w_8)(bus_space_handle_t, bus_size_t, uint64_t); 169de2fa7b8SMarcel Moolenaar 170de2fa7b8SMarcel Moolenaar void (*bs_w_s_2)(bus_space_handle_t, bus_size_t, uint16_t); 171de2fa7b8SMarcel Moolenaar void (*bs_w_s_4)(bus_space_handle_t, bus_size_t, uint32_t); 172de2fa7b8SMarcel Moolenaar void (*bs_w_s_8)(bus_space_handle_t, bus_size_t, uint64_t); 173de2fa7b8SMarcel Moolenaar 174de2fa7b8SMarcel Moolenaar /* write multiple */ 175de2fa7b8SMarcel Moolenaar void (*bs_wm_1)(bus_space_handle_t, bus_size_t, 176de2fa7b8SMarcel Moolenaar const uint8_t *, bus_size_t); 177de2fa7b8SMarcel Moolenaar void (*bs_wm_2)(bus_space_handle_t, bus_size_t, 178de2fa7b8SMarcel Moolenaar const uint16_t *, bus_size_t); 179de2fa7b8SMarcel Moolenaar void (*bs_wm_4)(bus_space_handle_t, bus_size_t, 180de2fa7b8SMarcel Moolenaar const uint32_t *, bus_size_t); 181de2fa7b8SMarcel Moolenaar void (*bs_wm_8)(bus_space_handle_t, bus_size_t, 182de2fa7b8SMarcel Moolenaar const uint64_t *, bus_size_t); 183de2fa7b8SMarcel Moolenaar 184de2fa7b8SMarcel Moolenaar void (*bs_wm_s_2)(bus_space_handle_t, bus_size_t, 185de2fa7b8SMarcel Moolenaar const uint16_t *, bus_size_t); 186de2fa7b8SMarcel Moolenaar void (*bs_wm_s_4)(bus_space_handle_t, bus_size_t, 187de2fa7b8SMarcel Moolenaar const uint32_t *, bus_size_t); 188de2fa7b8SMarcel Moolenaar void (*bs_wm_s_8)(bus_space_handle_t, bus_size_t, 189de2fa7b8SMarcel Moolenaar const uint64_t *, bus_size_t); 190de2fa7b8SMarcel Moolenaar 191de2fa7b8SMarcel Moolenaar /* write region */ 192de2fa7b8SMarcel Moolenaar void (*bs_wr_1)(bus_space_handle_t, bus_size_t, 193de2fa7b8SMarcel Moolenaar const uint8_t *, bus_size_t); 194de2fa7b8SMarcel Moolenaar void (*bs_wr_2)(bus_space_handle_t, bus_size_t, 195de2fa7b8SMarcel Moolenaar const uint16_t *, bus_size_t); 196de2fa7b8SMarcel Moolenaar void (*bs_wr_4)(bus_space_handle_t, bus_size_t, 197de2fa7b8SMarcel Moolenaar const uint32_t *, bus_size_t); 198de2fa7b8SMarcel Moolenaar void (*bs_wr_8)(bus_space_handle_t, bus_size_t, 199de2fa7b8SMarcel Moolenaar const uint64_t *, bus_size_t); 200de2fa7b8SMarcel Moolenaar 201de2fa7b8SMarcel Moolenaar void (*bs_wr_s_2)(bus_space_handle_t, bus_size_t, 202de2fa7b8SMarcel Moolenaar const uint16_t *, bus_size_t); 203de2fa7b8SMarcel Moolenaar void (*bs_wr_s_4)(bus_space_handle_t, bus_size_t, 204de2fa7b8SMarcel Moolenaar const uint32_t *, bus_size_t); 205de2fa7b8SMarcel Moolenaar void (*bs_wr_s_8)(bus_space_handle_t, bus_size_t, 206de2fa7b8SMarcel Moolenaar const uint64_t *, bus_size_t); 207de2fa7b8SMarcel Moolenaar 208de2fa7b8SMarcel Moolenaar /* set multiple */ 209de2fa7b8SMarcel Moolenaar void (*bs_sm_1)(bus_space_handle_t, bus_size_t, uint8_t, 210de2fa7b8SMarcel Moolenaar bus_size_t); 211de2fa7b8SMarcel Moolenaar void (*bs_sm_2)(bus_space_handle_t, bus_size_t, uint16_t, 212de2fa7b8SMarcel Moolenaar bus_size_t); 213de2fa7b8SMarcel Moolenaar void (*bs_sm_4)(bus_space_handle_t, bus_size_t, uint32_t, 214de2fa7b8SMarcel Moolenaar bus_size_t); 215de2fa7b8SMarcel Moolenaar void (*bs_sm_8)(bus_space_handle_t, bus_size_t, uint64_t, 216de2fa7b8SMarcel Moolenaar bus_size_t); 217de2fa7b8SMarcel Moolenaar 218de2fa7b8SMarcel Moolenaar void (*bs_sm_s_2)(bus_space_handle_t, bus_size_t, uint16_t, 219de2fa7b8SMarcel Moolenaar bus_size_t); 220de2fa7b8SMarcel Moolenaar void (*bs_sm_s_4)(bus_space_handle_t, bus_size_t, uint32_t, 221de2fa7b8SMarcel Moolenaar bus_size_t); 222de2fa7b8SMarcel Moolenaar void (*bs_sm_s_8)(bus_space_handle_t, bus_size_t, uint64_t, 223de2fa7b8SMarcel Moolenaar bus_size_t); 224de2fa7b8SMarcel Moolenaar 225de2fa7b8SMarcel Moolenaar /* set region */ 226de2fa7b8SMarcel Moolenaar void (*bs_sr_1)(bus_space_handle_t, bus_size_t, uint8_t, 227de2fa7b8SMarcel Moolenaar bus_size_t); 228de2fa7b8SMarcel Moolenaar void (*bs_sr_2)(bus_space_handle_t, bus_size_t, uint16_t, 229de2fa7b8SMarcel Moolenaar bus_size_t); 230de2fa7b8SMarcel Moolenaar void (*bs_sr_4)(bus_space_handle_t, bus_size_t, uint32_t, 231de2fa7b8SMarcel Moolenaar bus_size_t); 232de2fa7b8SMarcel Moolenaar void (*bs_sr_8)(bus_space_handle_t, bus_size_t, uint64_t, 233de2fa7b8SMarcel Moolenaar bus_size_t); 234de2fa7b8SMarcel Moolenaar 235de2fa7b8SMarcel Moolenaar void (*bs_sr_s_2)(bus_space_handle_t, bus_size_t, uint16_t, 236de2fa7b8SMarcel Moolenaar bus_size_t); 237de2fa7b8SMarcel Moolenaar void (*bs_sr_s_4)(bus_space_handle_t, bus_size_t, uint32_t, 238de2fa7b8SMarcel Moolenaar bus_size_t); 239de2fa7b8SMarcel Moolenaar void (*bs_sr_s_8)(bus_space_handle_t, bus_size_t, uint64_t, 240de2fa7b8SMarcel Moolenaar bus_size_t); 241de2fa7b8SMarcel Moolenaar 242de2fa7b8SMarcel Moolenaar /* copy region */ 243de2fa7b8SMarcel Moolenaar void (*bs_cr_1)(bus_space_handle_t, bus_size_t, 244de2fa7b8SMarcel Moolenaar bus_space_handle_t, bus_size_t, bus_size_t); 245de2fa7b8SMarcel Moolenaar void (*bs_cr_2)(bus_space_handle_t, bus_size_t, 246de2fa7b8SMarcel Moolenaar bus_space_handle_t, bus_size_t, bus_size_t); 247de2fa7b8SMarcel Moolenaar void (*bs_cr_4)(bus_space_handle_t, bus_size_t, 248de2fa7b8SMarcel Moolenaar bus_space_handle_t, bus_size_t, bus_size_t); 249de2fa7b8SMarcel Moolenaar void (*bs_cr_8)(bus_space_handle_t, bus_size_t, 250de2fa7b8SMarcel Moolenaar bus_space_handle_t, bus_size_t, bus_size_t); 251de2fa7b8SMarcel Moolenaar 252de2fa7b8SMarcel Moolenaar void (*bs_cr_s_2)(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_4)(bus_space_handle_t, bus_size_t, 255de2fa7b8SMarcel Moolenaar bus_space_handle_t, bus_size_t, bus_size_t); 256de2fa7b8SMarcel Moolenaar void (*bs_cr_s_8)(bus_space_handle_t, bus_size_t, 257de2fa7b8SMarcel Moolenaar bus_space_handle_t, bus_size_t, bus_size_t); 258de2fa7b8SMarcel Moolenaar }; 259de2fa7b8SMarcel Moolenaar 260de2fa7b8SMarcel Moolenaar extern struct bus_space bs_be_tag; 261de2fa7b8SMarcel Moolenaar extern struct bus_space bs_le_tag; 262de2fa7b8SMarcel Moolenaar 263de2fa7b8SMarcel Moolenaar #define __bs_c(a,b) __CONCAT(a,b) 264de2fa7b8SMarcel Moolenaar #define __bs_opname(op,size) __bs_c(__bs_c(__bs_c(bs_,op),_),size) 265de2fa7b8SMarcel Moolenaar 266de2fa7b8SMarcel Moolenaar #define __bs_rs(sz, t, h, o) \ 267de2fa7b8SMarcel Moolenaar (*(t)->__bs_opname(r,sz))(h, o) 268de2fa7b8SMarcel Moolenaar #define __bs_ws(sz, t, h, o, v) \ 269de2fa7b8SMarcel Moolenaar (*(t)->__bs_opname(w,sz))(h, o, v) 270de2fa7b8SMarcel Moolenaar #define __bs_nonsingle(type, sz, t, h, o, a, c) \ 271de2fa7b8SMarcel Moolenaar (*(t)->__bs_opname(type,sz))(h, o, a, c) 272de2fa7b8SMarcel Moolenaar #define __bs_set(type, sz, t, h, o, v, c) \ 273de2fa7b8SMarcel Moolenaar (*(t)->__bs_opname(type,sz))(h, o, v, c) 274de2fa7b8SMarcel Moolenaar #define __bs_copy(sz, t, h1, o1, h2, o2, cnt) \ 275de2fa7b8SMarcel Moolenaar (*(t)->__bs_opname(c,sz))(h1, o1, h2, o2, cnt) 276de2fa7b8SMarcel Moolenaar 277de2fa7b8SMarcel Moolenaar /* 278de2fa7b8SMarcel Moolenaar * Mapping and unmapping operations. 279de2fa7b8SMarcel Moolenaar */ 280de2fa7b8SMarcel Moolenaar #define bus_space_map(t, a, s, c, hp) (*(t)->bs_map)(a, s, c, hp) 281de2fa7b8SMarcel Moolenaar #define bus_space_unmap(t, h, s) (*(t)->bs_unmap)(h, s) 282de2fa7b8SMarcel Moolenaar #define bus_space_subregion(t, h, o, s, hp) (*(t)->bs_subregion)(h, o, s, hp) 283de2fa7b8SMarcel Moolenaar 284de2fa7b8SMarcel Moolenaar /* 285de2fa7b8SMarcel Moolenaar * Allocation and deallocation operations. 286de2fa7b8SMarcel Moolenaar */ 287de2fa7b8SMarcel Moolenaar #define bus_space_alloc(t, rs, re, s, a, b, c, ap, hp) \ 288de2fa7b8SMarcel Moolenaar (*(t)->bs_alloc)(rs, re, s, a, b, c, ap, hp) 289de2fa7b8SMarcel Moolenaar #define bus_space_free(t, h, s) \ 290de2fa7b8SMarcel Moolenaar (*(t)->bs_free)(h, s) 291de2fa7b8SMarcel Moolenaar 292de2fa7b8SMarcel Moolenaar /* 293de2fa7b8SMarcel Moolenaar * Bus barrier operations. 294de2fa7b8SMarcel Moolenaar */ 295de2fa7b8SMarcel Moolenaar #define bus_space_barrier(t, h, o, l, f) (*(t)->bs_barrier)(h, o, l, f) 296de2fa7b8SMarcel Moolenaar 297de2fa7b8SMarcel Moolenaar /* 298de2fa7b8SMarcel Moolenaar * Bus read (single) operations. 299de2fa7b8SMarcel Moolenaar */ 300de2fa7b8SMarcel Moolenaar #define bus_space_read_1(t, h, o) __bs_rs(1,t,h,o) 301de2fa7b8SMarcel Moolenaar #define bus_space_read_2(t, h, o) __bs_rs(2,t,h,o) 302de2fa7b8SMarcel Moolenaar #define bus_space_read_4(t, h, o) __bs_rs(4,t,h,o) 303de2fa7b8SMarcel Moolenaar #define bus_space_read_8(t, h, o) __bs_rs(8,t,h,o) 304de2fa7b8SMarcel Moolenaar 305de2fa7b8SMarcel Moolenaar #define bus_space_read_stream_1 bus_space_read_1 306de2fa7b8SMarcel Moolenaar #define bus_space_read_stream_2(t, h, o) __bs_rs(s_2,t,h,o) 307de2fa7b8SMarcel Moolenaar #define bus_space_read_stream_4(t, h, o) __bs_rs(s_4,t,h,o) 308de2fa7b8SMarcel Moolenaar #define bus_space_read_stream_8(t, h, o) __bs_rs(s_8,t,h,o) 309de2fa7b8SMarcel Moolenaar 310de2fa7b8SMarcel Moolenaar /* 311de2fa7b8SMarcel Moolenaar * Bus read multiple operations. 312de2fa7b8SMarcel Moolenaar */ 313de2fa7b8SMarcel Moolenaar #define bus_space_read_multi_1(t, h, o, a, c) \ 314de2fa7b8SMarcel Moolenaar __bs_nonsingle(rm,1,(t),(h),(o),(a),(c)) 315de2fa7b8SMarcel Moolenaar #define bus_space_read_multi_2(t, h, o, a, c) \ 316de2fa7b8SMarcel Moolenaar __bs_nonsingle(rm,2,(t),(h),(o),(a),(c)) 317de2fa7b8SMarcel Moolenaar #define bus_space_read_multi_4(t, h, o, a, c) \ 318de2fa7b8SMarcel Moolenaar __bs_nonsingle(rm,4,(t),(h),(o),(a),(c)) 319de2fa7b8SMarcel Moolenaar #define bus_space_read_multi_8(t, h, o, a, c) \ 320de2fa7b8SMarcel Moolenaar __bs_nonsingle(rm,8,(t),(h),(o),(a),(c)) 321de2fa7b8SMarcel Moolenaar 322de2fa7b8SMarcel Moolenaar #define bus_space_read_multi_stream_1 bus_space_read_multi_1 323de2fa7b8SMarcel Moolenaar #define bus_space_read_multi_stream_2(t, h, o, a, c) \ 324de2fa7b8SMarcel Moolenaar __bs_nonsingle(rm,s_2,(t),(h),(o),(a),(c)) 325de2fa7b8SMarcel Moolenaar #define bus_space_read_multi_stream_4(t, h, o, a, c) \ 326de2fa7b8SMarcel Moolenaar __bs_nonsingle(rm,s_4,(t),(h),(o),(a),(c)) 327de2fa7b8SMarcel Moolenaar #define bus_space_read_multi_stream_8(t, h, o, a, c) \ 328de2fa7b8SMarcel Moolenaar __bs_nonsingle(rm,s_8,(t),(h),(o),(a),(c)) 329de2fa7b8SMarcel Moolenaar 330de2fa7b8SMarcel Moolenaar /* 331de2fa7b8SMarcel Moolenaar * Bus read region operations. 332de2fa7b8SMarcel Moolenaar */ 333de2fa7b8SMarcel Moolenaar #define bus_space_read_region_1(t, h, o, a, c) \ 334de2fa7b8SMarcel Moolenaar __bs_nonsingle(rr,1,(t),(h),(o),(a),(c)) 335de2fa7b8SMarcel Moolenaar #define bus_space_read_region_2(t, h, o, a, c) \ 336de2fa7b8SMarcel Moolenaar __bs_nonsingle(rr,2,(t),(h),(o),(a),(c)) 337de2fa7b8SMarcel Moolenaar #define bus_space_read_region_4(t, h, o, a, c) \ 338de2fa7b8SMarcel Moolenaar __bs_nonsingle(rr,4,(t),(h),(o),(a),(c)) 339de2fa7b8SMarcel Moolenaar #define bus_space_read_region_8(t, h, o, a, c) \ 340de2fa7b8SMarcel Moolenaar __bs_nonsingle(rr,8,(t),(h),(o),(a),(c)) 341de2fa7b8SMarcel Moolenaar 342de2fa7b8SMarcel Moolenaar #define bus_space_read_region_stream_1 bus_space_read_region_1 343de2fa7b8SMarcel Moolenaar #define bus_space_read_region_stream_2(t, h, o, a, c) \ 344de2fa7b8SMarcel Moolenaar __bs_nonsingle(rr,s_2,(t),(h),(o),(a),(c)) 345de2fa7b8SMarcel Moolenaar #define bus_space_read_region_stream_4(t, h, o, a, c) \ 346de2fa7b8SMarcel Moolenaar __bs_nonsingle(rr,s_4,(t),(h),(o),(a),(c)) 347de2fa7b8SMarcel Moolenaar #define bus_space_read_region_stream_8(t, h, o, a, c) \ 348de2fa7b8SMarcel Moolenaar __bs_nonsingle(rr,s_8,(t),(h),(o),(a),(c)) 349de2fa7b8SMarcel Moolenaar 350de2fa7b8SMarcel Moolenaar /* 351de2fa7b8SMarcel Moolenaar * Bus write (single) operations. 352de2fa7b8SMarcel Moolenaar */ 353de2fa7b8SMarcel Moolenaar #define bus_space_write_1(t, h, o, v) __bs_ws(1,(t),(h),(o),(v)) 354de2fa7b8SMarcel Moolenaar #define bus_space_write_2(t, h, o, v) __bs_ws(2,(t),(h),(o),(v)) 355de2fa7b8SMarcel Moolenaar #define bus_space_write_4(t, h, o, v) __bs_ws(4,(t),(h),(o),(v)) 356de2fa7b8SMarcel Moolenaar #define bus_space_write_8(t, h, o, v) __bs_ws(8,(t),(h),(o),(v)) 357de2fa7b8SMarcel Moolenaar 358de2fa7b8SMarcel Moolenaar #define bus_space_write_stream_1 bus_space_write_1 359de2fa7b8SMarcel Moolenaar #define bus_space_write_stream_2(t, h, o, v) __bs_ws(s_2,(t),(h),(o),(v)) 360de2fa7b8SMarcel Moolenaar #define bus_space_write_stream_4(t, h, o, v) __bs_ws(s_4,(t),(h),(o),(v)) 361de2fa7b8SMarcel Moolenaar #define bus_space_write_stream_8(t, h, o, v) __bs_ws(s_8,(t),(h),(o),(v)) 362de2fa7b8SMarcel Moolenaar 363de2fa7b8SMarcel Moolenaar /* 364de2fa7b8SMarcel Moolenaar * Bus write multiple operations. 365de2fa7b8SMarcel Moolenaar */ 366de2fa7b8SMarcel Moolenaar #define bus_space_write_multi_1(t, h, o, a, c) \ 367de2fa7b8SMarcel Moolenaar __bs_nonsingle(wm,1,(t),(h),(o),(a),(c)) 368de2fa7b8SMarcel Moolenaar #define bus_space_write_multi_2(t, h, o, a, c) \ 369de2fa7b8SMarcel Moolenaar __bs_nonsingle(wm,2,(t),(h),(o),(a),(c)) 370de2fa7b8SMarcel Moolenaar #define bus_space_write_multi_4(t, h, o, a, c) \ 371de2fa7b8SMarcel Moolenaar __bs_nonsingle(wm,4,(t),(h),(o),(a),(c)) 372de2fa7b8SMarcel Moolenaar #define bus_space_write_multi_8(t, h, o, a, c) \ 373de2fa7b8SMarcel Moolenaar __bs_nonsingle(wm,8,(t),(h),(o),(a),(c)) 374de2fa7b8SMarcel Moolenaar 375de2fa7b8SMarcel Moolenaar #define bus_space_write_multi_stream_1 bus_space_write_multi_1 376de2fa7b8SMarcel Moolenaar #define bus_space_write_multi_stream_2(t, h, o, a, c) \ 377de2fa7b8SMarcel Moolenaar __bs_nonsingle(wm,s_2,(t),(h),(o),(a),(c)) 378de2fa7b8SMarcel Moolenaar #define bus_space_write_multi_stream_4(t, h, o, a, c) \ 379de2fa7b8SMarcel Moolenaar __bs_nonsingle(wm,s_4,(t),(h),(o),(a),(c)) 380de2fa7b8SMarcel Moolenaar #define bus_space_write_multi_stream_8(t, h, o, a, c) \ 381de2fa7b8SMarcel Moolenaar __bs_nonsingle(wm,s_8,(t),(h),(o),(a),(c)) 382de2fa7b8SMarcel Moolenaar 383de2fa7b8SMarcel Moolenaar /* 384de2fa7b8SMarcel Moolenaar * Bus write region operations. 385de2fa7b8SMarcel Moolenaar */ 386de2fa7b8SMarcel Moolenaar #define bus_space_write_region_1(t, h, o, a, c) \ 387de2fa7b8SMarcel Moolenaar __bs_nonsingle(wr,1,(t),(h),(o),(a),(c)) 388de2fa7b8SMarcel Moolenaar #define bus_space_write_region_2(t, h, o, a, c) \ 389de2fa7b8SMarcel Moolenaar __bs_nonsingle(wr,2,(t),(h),(o),(a),(c)) 390de2fa7b8SMarcel Moolenaar #define bus_space_write_region_4(t, h, o, a, c) \ 391de2fa7b8SMarcel Moolenaar __bs_nonsingle(wr,4,(t),(h),(o),(a),(c)) 392de2fa7b8SMarcel Moolenaar #define bus_space_write_region_8(t, h, o, a, c) \ 393de2fa7b8SMarcel Moolenaar __bs_nonsingle(wr,8,(t),(h),(o),(a),(c)) 394de2fa7b8SMarcel Moolenaar 395de2fa7b8SMarcel Moolenaar #define bus_space_write_region_stream_1 bus_space_write_region_1 396de2fa7b8SMarcel Moolenaar #define bus_space_write_region_stream_2(t, h, o, a, c) \ 397de2fa7b8SMarcel Moolenaar __bs_nonsingle(wr,s_2,(t),(h),(o),(a),(c)) 398de2fa7b8SMarcel Moolenaar #define bus_space_write_region_stream_4(t, h, o, a, c) \ 399de2fa7b8SMarcel Moolenaar __bs_nonsingle(wr,s_4,(t),(h),(o),(a),(c)) 400de2fa7b8SMarcel Moolenaar #define bus_space_write_region_stream_8(t, h, o, a, c) \ 401de2fa7b8SMarcel Moolenaar __bs_nonsingle(wr,s_8,(t),(h),(o),(a),(c)) 402de2fa7b8SMarcel Moolenaar 403de2fa7b8SMarcel Moolenaar /* 404de2fa7b8SMarcel Moolenaar * Set multiple operations. 405de2fa7b8SMarcel Moolenaar */ 406de2fa7b8SMarcel Moolenaar #define bus_space_set_multi_1(t, h, o, v, c) \ 407de2fa7b8SMarcel Moolenaar __bs_set(sm,1,(t),(h),(o),(v),(c)) 408de2fa7b8SMarcel Moolenaar #define bus_space_set_multi_2(t, h, o, v, c) \ 409de2fa7b8SMarcel Moolenaar __bs_set(sm,2,(t),(h),(o),(v),(c)) 410de2fa7b8SMarcel Moolenaar #define bus_space_set_multi_4(t, h, o, v, c) \ 411de2fa7b8SMarcel Moolenaar __bs_set(sm,4,(t),(h),(o),(v),(c)) 412de2fa7b8SMarcel Moolenaar #define bus_space_set_multi_8(t, h, o, v, c) \ 413de2fa7b8SMarcel Moolenaar __bs_set(sm,8,(t),(h),(o),(v),(c)) 414de2fa7b8SMarcel Moolenaar 415de2fa7b8SMarcel Moolenaar #define bus_space_set_multi_stream_1 bus_space_set_multi_1 416de2fa7b8SMarcel Moolenaar #define bus_space_set_multi_stream_2(t, h, o, v, c) \ 417de2fa7b8SMarcel Moolenaar __bs_set(sm,s_2,(t),(h),(o),(v),(c)) 418de2fa7b8SMarcel Moolenaar #define bus_space_set_multi_stream_4(t, h, o, v, c) \ 419de2fa7b8SMarcel Moolenaar __bs_set(sm,s_4,(t),(h),(o),(v),(c)) 420de2fa7b8SMarcel Moolenaar #define bus_space_set_multi_stream_8(t, h, o, v, c) \ 421de2fa7b8SMarcel Moolenaar __bs_set(sm,s_8,(t),(h),(o),(v),(c)) 422de2fa7b8SMarcel Moolenaar 423de2fa7b8SMarcel Moolenaar /* 424de2fa7b8SMarcel Moolenaar * Set region operations. 425de2fa7b8SMarcel Moolenaar */ 426de2fa7b8SMarcel Moolenaar #define bus_space_set_region_1(t, h, o, v, c) \ 427de2fa7b8SMarcel Moolenaar __bs_set(sr,1,(t),(h),(o),(v),(c)) 428de2fa7b8SMarcel Moolenaar #define bus_space_set_region_2(t, h, o, v, c) \ 429de2fa7b8SMarcel Moolenaar __bs_set(sr,2,(t),(h),(o),(v),(c)) 430de2fa7b8SMarcel Moolenaar #define bus_space_set_region_4(t, h, o, v, c) \ 431de2fa7b8SMarcel Moolenaar __bs_set(sr,4,(t),(h),(o),(v),(c)) 432de2fa7b8SMarcel Moolenaar #define bus_space_set_region_8(t, h, o, v, c) \ 433de2fa7b8SMarcel Moolenaar __bs_set(sr,8,(t),(h),(o),(v),(c)) 434de2fa7b8SMarcel Moolenaar 435de2fa7b8SMarcel Moolenaar #define bus_space_set_region_stream_1 bus_space_set_region_1 436de2fa7b8SMarcel Moolenaar #define bus_space_set_region_stream_2(t, h, o, v, c) \ 437de2fa7b8SMarcel Moolenaar __bs_set(sr,s_2,(t),(h),(o),(v),(c)) 438de2fa7b8SMarcel Moolenaar #define bus_space_set_region_stream_4(t, h, o, v, c) \ 439de2fa7b8SMarcel Moolenaar __bs_set(sr,s_4,(t),(h),(o),(v),(c)) 440de2fa7b8SMarcel Moolenaar #define bus_space_set_region_stream_8(t, h, o, v, c) \ 441de2fa7b8SMarcel Moolenaar __bs_set(sr,s_8,(t),(h),(o),(v),(c)) 442de2fa7b8SMarcel Moolenaar 443de2fa7b8SMarcel Moolenaar #if 0 444de2fa7b8SMarcel Moolenaar /* 445de2fa7b8SMarcel Moolenaar * Copy operations. 446de2fa7b8SMarcel Moolenaar */ 447de2fa7b8SMarcel Moolenaar #define bus_space_copy_region_1(t, h1, o1, h2, o2, c) \ 448de2fa7b8SMarcel Moolenaar __bs_copy(1, t, h1, o1, h2, o2, c) 449de2fa7b8SMarcel Moolenaar #define bus_space_copy_region_2(t, h1, o1, h2, o2, c) \ 450de2fa7b8SMarcel Moolenaar __bs_copy(2, t, h1, o1, h2, o2, c) 451de2fa7b8SMarcel Moolenaar #define bus_space_copy_region_4(t, h1, o1, h2, o2, c) \ 452de2fa7b8SMarcel Moolenaar __bs_copy(4, t, h1, o1, h2, o2, c) 453de2fa7b8SMarcel Moolenaar #define bus_space_copy_region_8(t, h1, o1, h2, o2, c) \ 454de2fa7b8SMarcel Moolenaar __bs_copy(8, t, h1, o1, h2, o2, c) 455de2fa7b8SMarcel Moolenaar 456de2fa7b8SMarcel Moolenaar #define bus_space_copy_region_stream_1 bus_space_copy_region_1 457de2fa7b8SMarcel Moolenaar #define bus_space_copy_region_stream_2(t, h1, o1, h2, o2, c) \ 458de2fa7b8SMarcel Moolenaar __bs_copy(s_2, t, h1, o1, h2, o2, c) 459de2fa7b8SMarcel Moolenaar #define bus_space_copy_region_stream_4(t, h1, o1, h2, o2, c) \ 460de2fa7b8SMarcel Moolenaar __bs_copy(s_4, t, h1, o1, h2, o2, c) 461de2fa7b8SMarcel Moolenaar #define bus_space_copy_region_stream_8(t, h1, o1, h2, o2, c) \ 462de2fa7b8SMarcel Moolenaar __bs_copy(s_8, t, h1, o1, h2, o2, c) 463de2fa7b8SMarcel Moolenaar #endif 464de2fa7b8SMarcel Moolenaar 46595a85c12SMichal Meloun #define BUS_PEEK_FUNC(width, type) \ 46695a85c12SMichal Meloun static inline int \ 46795a85c12SMichal Meloun bus_space_peek_##width(bus_space_tag_t tag, \ 46895a85c12SMichal Meloun bus_space_handle_t hnd, bus_size_t offset, type *value) \ 46995a85c12SMichal Meloun { \ 47095a85c12SMichal Meloun type tmp; \ 47195a85c12SMichal Meloun tmp = bus_space_read_##width(tag, hnd, offset); \ 47231820621SMichal Meloun *value = (type)tmp; \ 47395a85c12SMichal Meloun return (0); \ 47495a85c12SMichal Meloun } 47595a85c12SMichal Meloun BUS_PEEK_FUNC(1, uint8_t) 47695a85c12SMichal Meloun BUS_PEEK_FUNC(2, uint16_t) 47795a85c12SMichal Meloun BUS_PEEK_FUNC(4, uint32_t) 47895a85c12SMichal Meloun BUS_PEEK_FUNC(8, uint64_t) 47995a85c12SMichal Meloun 48095a85c12SMichal Meloun #define BUS_POKE_FUNC(width, type) \ 48195a85c12SMichal Meloun static inline int \ 48295a85c12SMichal Meloun bus_space_poke_##width(bus_space_tag_t tag, \ 48395a85c12SMichal Meloun bus_space_handle_t hnd, bus_size_t offset, type value) \ 48495a85c12SMichal Meloun { \ 48595a85c12SMichal Meloun bus_space_write_##width(tag, hnd, offset, value); \ 48695a85c12SMichal Meloun return (0); \ 48795a85c12SMichal Meloun } 48895a85c12SMichal Meloun BUS_POKE_FUNC(1, uint8_t) 48995a85c12SMichal Meloun BUS_POKE_FUNC(2, uint16_t) 49095a85c12SMichal Meloun BUS_POKE_FUNC(4, uint32_t) 49195a85c12SMichal Meloun BUS_POKE_FUNC(8, uint64_t) 49295a85c12SMichal Meloun 4935974e5c7SScott Long #include <machine/bus_dma.h> 494f9bac91bSBenno Rice 495de2fa7b8SMarcel Moolenaar #endif /* _MACHINE_BUS_H_ */ 496