1202031Simp/* $NetBSD: bus.h,v 1.11 2003/07/28 17:35:54 thorpej Exp $ */ 2202031Simp 3178172Simp/*- 4202031Simp * Copyright (c) 1996, 1997, 1998, 2001 The NetBSD Foundation, Inc. 5178172Simp * All rights reserved. 6178172Simp * 7178172Simp * This code is derived from software contributed to The NetBSD Foundation 8178172Simp * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility, 9178172Simp * NASA Ames Research Center. 10178172Simp * 11178172Simp * Redistribution and use in source and binary forms, with or without 12178172Simp * modification, are permitted provided that the following conditions 13178172Simp * are met: 14178172Simp * 1. Redistributions of source code must retain the above copyright 15178172Simp * notice, this list of conditions and the following disclaimer. 16178172Simp * 2. Redistributions in binary form must reproduce the above copyright 17178172Simp * notice, this list of conditions and the following disclaimer in the 18178172Simp * documentation and/or other materials provided with the distribution. 19178172Simp * 20178172Simp * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 21178172Simp * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 22178172Simp * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 23178172Simp * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 24178172Simp * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25178172Simp * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26178172Simp * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27178172Simp * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28178172Simp * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29178172Simp * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30178172Simp * POSSIBILITY OF SUCH DAMAGE. 31178172Simp */ 32178172Simp 33202031Simp/*- 34178172Simp * Copyright (c) 1996 Charles M. Hannum. All rights reserved. 35178172Simp * Copyright (c) 1996 Christopher G. Demetriou. All rights reserved. 36178172Simp * 37178172Simp * Redistribution and use in source and binary forms, with or without 38178172Simp * modification, are permitted provided that the following conditions 39178172Simp * are met: 40178172Simp * 1. Redistributions of source code must retain the above copyright 41178172Simp * notice, this list of conditions and the following disclaimer. 42178172Simp * 2. Redistributions in binary form must reproduce the above copyright 43178172Simp * notice, this list of conditions and the following disclaimer in the 44178172Simp * documentation and/or other materials provided with the distribution. 45178172Simp * 3. All advertising materials mentioning features or use of this software 46178172Simp * must display the following acknowledgement: 47178172Simp * This product includes software developed by Christopher G. Demetriou 48178172Simp * for the NetBSD Project. 49178172Simp * 4. The name of the author may not be used to endorse or promote products 50178172Simp * derived from this software without specific prior written permission 51178172Simp * 52178172Simp * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 53178172Simp * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 54178172Simp * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 55178172Simp * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 56178172Simp * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 57178172Simp * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 58178172Simp * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 59178172Simp * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 60178172Simp * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 61178172Simp * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 62178172Simp * 63178172Simp * $FreeBSD$ 64202044Simp */ 65178172Simp 66178172Simp#ifndef _MACHINE_BUS_H_ 67202044Simp#define _MACHINE_BUS_H_ 68178172Simp 69178172Simp#include <machine/_bus.h> 70178172Simp 71202044Simpstruct bus_space { 72202044Simp /* cookie */ 73202044Simp void *bs_cookie; 74178172Simp 75202044Simp /* mapping/unmapping */ 76202044Simp int (*bs_map) (void *, bus_addr_t, bus_size_t, 77202044Simp int, bus_space_handle_t *); 78202044Simp void (*bs_unmap) (void *, bus_space_handle_t, bus_size_t); 79202044Simp int (*bs_subregion) (void *, bus_space_handle_t, 80202044Simp bus_size_t, bus_size_t, bus_space_handle_t *); 81178172Simp 82202044Simp /* allocation/deallocation */ 83202044Simp int (*bs_alloc) (void *, bus_addr_t, bus_addr_t, 84202044Simp bus_size_t, bus_size_t, bus_size_t, int, 85202044Simp bus_addr_t *, bus_space_handle_t *); 86202044Simp void (*bs_free) (void *, bus_space_handle_t, 87202044Simp bus_size_t); 88178172Simp 89202044Simp /* get kernel virtual address */ 90202044Simp /* barrier */ 91202044Simp void (*bs_barrier) (void *, bus_space_handle_t, 92202044Simp bus_size_t, bus_size_t, int); 93178172Simp 94202044Simp /* read (single) */ 95202044Simp u_int8_t (*bs_r_1) (void *, bus_space_handle_t, bus_size_t); 96202044Simp u_int16_t (*bs_r_2) (void *, bus_space_handle_t, bus_size_t); 97202044Simp u_int32_t (*bs_r_4) (void *, bus_space_handle_t, bus_size_t); 98202044Simp u_int64_t (*bs_r_8) (void *, bus_space_handle_t, bus_size_t); 99178172Simp 100202044Simp /* read multiple */ 101202044Simp void (*bs_rm_1) (void *, bus_space_handle_t, bus_size_t, 102202044Simp u_int8_t *, bus_size_t); 103202044Simp void (*bs_rm_2) (void *, bus_space_handle_t, bus_size_t, 104202044Simp u_int16_t *, bus_size_t); 105202044Simp void (*bs_rm_4) (void *, bus_space_handle_t, 106202044Simp bus_size_t, u_int32_t *, bus_size_t); 107202044Simp void (*bs_rm_8) (void *, bus_space_handle_t, 108202044Simp bus_size_t, u_int64_t *, bus_size_t); 109202044Simp 110202044Simp /* read region */ 111202044Simp void (*bs_rr_1) (void *, bus_space_handle_t, 112202044Simp bus_size_t, u_int8_t *, bus_size_t); 113202044Simp void (*bs_rr_2) (void *, bus_space_handle_t, 114202044Simp bus_size_t, u_int16_t *, bus_size_t); 115202044Simp void (*bs_rr_4) (void *, bus_space_handle_t, 116202044Simp bus_size_t, u_int32_t *, bus_size_t); 117202044Simp void (*bs_rr_8) (void *, bus_space_handle_t, 118202044Simp bus_size_t, u_int64_t *, bus_size_t); 119202044Simp 120202044Simp /* write (single) */ 121202044Simp void (*bs_w_1) (void *, bus_space_handle_t, 122202044Simp bus_size_t, u_int8_t); 123202044Simp void (*bs_w_2) (void *, bus_space_handle_t, 124202044Simp bus_size_t, u_int16_t); 125202044Simp void (*bs_w_4) (void *, bus_space_handle_t, 126202044Simp bus_size_t, u_int32_t); 127202044Simp void (*bs_w_8) (void *, bus_space_handle_t, 128202044Simp bus_size_t, u_int64_t); 129178172Simp 130202044Simp /* write multiple */ 131202044Simp void (*bs_wm_1) (void *, bus_space_handle_t, 132202044Simp bus_size_t, const u_int8_t *, bus_size_t); 133202044Simp void (*bs_wm_2) (void *, bus_space_handle_t, 134202044Simp bus_size_t, const u_int16_t *, bus_size_t); 135202044Simp void (*bs_wm_4) (void *, bus_space_handle_t, 136202044Simp bus_size_t, const u_int32_t *, bus_size_t); 137202044Simp void (*bs_wm_8) (void *, bus_space_handle_t, 138202044Simp bus_size_t, const u_int64_t *, bus_size_t); 139202044Simp 140202044Simp /* write region */ 141202044Simp void (*bs_wr_1) (void *, bus_space_handle_t, 142202044Simp bus_size_t, const u_int8_t *, bus_size_t); 143202044Simp void (*bs_wr_2) (void *, bus_space_handle_t, 144202044Simp bus_size_t, const u_int16_t *, bus_size_t); 145202044Simp void (*bs_wr_4) (void *, bus_space_handle_t, 146202044Simp bus_size_t, const u_int32_t *, bus_size_t); 147202044Simp void (*bs_wr_8) (void *, bus_space_handle_t, 148202044Simp bus_size_t, const u_int64_t *, bus_size_t); 149178172Simp 150202044Simp /* set multiple */ 151202044Simp void (*bs_sm_1) (void *, bus_space_handle_t, 152202044Simp bus_size_t, u_int8_t, bus_size_t); 153202044Simp void (*bs_sm_2) (void *, bus_space_handle_t, 154202044Simp bus_size_t, u_int16_t, bus_size_t); 155202044Simp void (*bs_sm_4) (void *, bus_space_handle_t, 156202044Simp bus_size_t, u_int32_t, bus_size_t); 157202044Simp void (*bs_sm_8) (void *, bus_space_handle_t, 158202044Simp bus_size_t, u_int64_t, bus_size_t); 159178172Simp 160202044Simp /* set region */ 161202044Simp void (*bs_sr_1) (void *, bus_space_handle_t, 162202044Simp bus_size_t, u_int8_t, bus_size_t); 163202044Simp void (*bs_sr_2) (void *, bus_space_handle_t, 164202044Simp bus_size_t, u_int16_t, bus_size_t); 165202044Simp void (*bs_sr_4) (void *, bus_space_handle_t, 166202044Simp bus_size_t, u_int32_t, bus_size_t); 167202044Simp void (*bs_sr_8) (void *, bus_space_handle_t, 168202044Simp bus_size_t, u_int64_t, bus_size_t); 169178172Simp 170202044Simp /* copy */ 171202044Simp void (*bs_c_1) (void *, bus_space_handle_t, bus_size_t, 172202044Simp bus_space_handle_t, bus_size_t, bus_size_t); 173202044Simp void (*bs_c_2) (void *, bus_space_handle_t, bus_size_t, 174202044Simp bus_space_handle_t, bus_size_t, bus_size_t); 175202044Simp void (*bs_c_4) (void *, bus_space_handle_t, bus_size_t, 176202044Simp bus_space_handle_t, bus_size_t, bus_size_t); 177202044Simp void (*bs_c_8) (void *, bus_space_handle_t, bus_size_t, 178202044Simp bus_space_handle_t, bus_size_t, bus_size_t); 179178172Simp 180202044Simp /* read stream (single) */ 181202044Simp u_int8_t (*bs_r_1_s) (void *, bus_space_handle_t, bus_size_t); 182202044Simp u_int16_t (*bs_r_2_s) (void *, bus_space_handle_t, bus_size_t); 183202044Simp u_int32_t (*bs_r_4_s) (void *, bus_space_handle_t, bus_size_t); 184202044Simp u_int64_t (*bs_r_8_s) (void *, bus_space_handle_t, bus_size_t); 185178172Simp 186202044Simp /* read multiple stream */ 187202044Simp void (*bs_rm_1_s) (void *, bus_space_handle_t, bus_size_t, 188202044Simp u_int8_t *, bus_size_t); 189202044Simp void (*bs_rm_2_s) (void *, bus_space_handle_t, bus_size_t, 190202044Simp u_int16_t *, bus_size_t); 191202044Simp void (*bs_rm_4_s) (void *, bus_space_handle_t, 192202044Simp bus_size_t, u_int32_t *, bus_size_t); 193202044Simp void (*bs_rm_8_s) (void *, bus_space_handle_t, 194202044Simp bus_size_t, u_int64_t *, bus_size_t); 195202044Simp 196202044Simp /* read region stream */ 197202044Simp void (*bs_rr_1_s) (void *, bus_space_handle_t, 198202044Simp bus_size_t, u_int8_t *, bus_size_t); 199202044Simp void (*bs_rr_2_s) (void *, bus_space_handle_t, 200202044Simp bus_size_t, u_int16_t *, bus_size_t); 201202044Simp void (*bs_rr_4_s) (void *, bus_space_handle_t, 202202044Simp bus_size_t, u_int32_t *, bus_size_t); 203202044Simp void (*bs_rr_8_s) (void *, bus_space_handle_t, 204202044Simp bus_size_t, u_int64_t *, bus_size_t); 205202044Simp 206202044Simp /* write stream (single) */ 207202044Simp void (*bs_w_1_s) (void *, bus_space_handle_t, 208202044Simp bus_size_t, u_int8_t); 209202044Simp void (*bs_w_2_s) (void *, bus_space_handle_t, 210202044Simp bus_size_t, u_int16_t); 211202044Simp void (*bs_w_4_s) (void *, bus_space_handle_t, 212202044Simp bus_size_t, u_int32_t); 213202044Simp void (*bs_w_8_s) (void *, bus_space_handle_t, 214202044Simp bus_size_t, u_int64_t); 215178172Simp 216202044Simp /* write multiple stream */ 217202044Simp void (*bs_wm_1_s) (void *, bus_space_handle_t, 218202044Simp bus_size_t, const u_int8_t *, bus_size_t); 219202044Simp void (*bs_wm_2_s) (void *, bus_space_handle_t, 220202044Simp bus_size_t, const u_int16_t *, bus_size_t); 221202044Simp void (*bs_wm_4_s) (void *, bus_space_handle_t, 222202044Simp bus_size_t, const u_int32_t *, bus_size_t); 223202044Simp void (*bs_wm_8_s) (void *, bus_space_handle_t, 224202044Simp bus_size_t, const u_int64_t *, bus_size_t); 225202044Simp 226202044Simp /* write region stream */ 227202044Simp void (*bs_wr_1_s) (void *, bus_space_handle_t, 228202044Simp bus_size_t, const u_int8_t *, bus_size_t); 229202044Simp void (*bs_wr_2_s) (void *, bus_space_handle_t, 230202044Simp bus_size_t, const u_int16_t *, bus_size_t); 231202044Simp void (*bs_wr_4_s) (void *, bus_space_handle_t, 232202044Simp bus_size_t, const u_int32_t *, bus_size_t); 233202044Simp void (*bs_wr_8_s) (void *, bus_space_handle_t, 234202044Simp bus_size_t, const u_int64_t *, bus_size_t); 235202044Simp}; 236178172Simp 237178172Simp 238178172Simp/* 239202044Simp * Utility macros; INTERNAL USE ONLY. 240178172Simp */ 241202044Simp#define __bs_c(a,b) __CONCAT(a,b) 242202044Simp#define __bs_opname(op,size) __bs_c(__bs_c(__bs_c(bs_,op),_),size) 243178172Simp 244202044Simp#define __bs_rs(sz, t, h, o) \ 245202044Simp (*(t)->__bs_opname(r,sz))((t)->bs_cookie, h, o) 246202044Simp#define __bs_ws(sz, t, h, o, v) \ 247202044Simp (*(t)->__bs_opname(w,sz))((t)->bs_cookie, h, o, v) 248202044Simp#define __bs_nonsingle(type, sz, t, h, o, a, c) \ 249202044Simp (*(t)->__bs_opname(type,sz))((t)->bs_cookie, h, o, a, c) 250202044Simp#define __bs_set(type, sz, t, h, o, v, c) \ 251202044Simp (*(t)->__bs_opname(type,sz))((t)->bs_cookie, h, o, v, c) 252202044Simp#define __bs_copy(sz, t, h1, o1, h2, o2, cnt) \ 253202044Simp (*(t)->__bs_opname(c,sz))((t)->bs_cookie, h1, o1, h2, o2, cnt) 254178172Simp 255202044Simp#define __bs_opname_s(op,size) __bs_c(__bs_c(__bs_c(__bs_c(bs_,op),_),size),_s) 256202044Simp#define __bs_rs_s(sz, t, h, o) \ 257202044Simp (*(t)->__bs_opname_s(r,sz))((t)->bs_cookie, h, o) 258202044Simp#define __bs_ws_s(sz, t, h, o, v) \ 259202044Simp (*(t)->__bs_opname_s(w,sz))((t)->bs_cookie, h, o, v) 260202044Simp#define __bs_nonsingle_s(type, sz, t, h, o, a, c) \ 261202044Simp (*(t)->__bs_opname_s(type,sz))((t)->bs_cookie, h, o, a, c) 262178172Simp 263202044Simp 264178172Simp/* 265202044Simp * Mapping and unmapping operations. 266178172Simp */ 267202044Simp#define bus_space_map(t, a, s, c, hp) \ 268202044Simp (*(t)->bs_map)((t)->bs_cookie, (a), (s), (c), (hp)) 269202044Simp#define bus_space_unmap(t, h, s) \ 270202044Simp (*(t)->bs_unmap)((t)->bs_cookie, (h), (s)) 271202044Simp#define bus_space_subregion(t, h, o, s, hp) \ 272202044Simp (*(t)->bs_subregion)((t)->bs_cookie, (h), (o), (s), (hp)) 273178172Simp 274178172Simp 275202044Simp/* 276202044Simp * Allocation and deallocation operations. 277202044Simp */ 278202044Simp#define bus_space_alloc(t, rs, re, s, a, b, c, ap, hp) \ 279202044Simp (*(t)->bs_alloc)((t)->bs_cookie, (rs), (re), (s), (a), (b), \ 280202044Simp (c), (ap), (hp)) 281202044Simp#define bus_space_free(t, h, s) \ 282202044Simp (*(t)->bs_free)((t)->bs_cookie, (h), (s)) 283178172Simp 284202044Simp/* 285202044Simp * Bus barrier operations. 286202044Simp */ 287202044Simp#define bus_space_barrier(t, h, o, l, f) \ 288202044Simp (*(t)->bs_barrier)((t)->bs_cookie, (h), (o), (l), (f)) 289178172Simp 290202044Simp#define BUS_SPACE_BARRIER_READ 0x01 291202044Simp#define BUS_SPACE_BARRIER_WRITE 0x02 292178172Simp 293202044Simp/* 294202044Simp * Bus read (single) operations. 295202044Simp */ 296202044Simp#define bus_space_read_1(t, h, o) __bs_rs(1,(t),(h),(o)) 297202044Simp#define bus_space_read_2(t, h, o) __bs_rs(2,(t),(h),(o)) 298202044Simp#define bus_space_read_4(t, h, o) __bs_rs(4,(t),(h),(o)) 299202044Simp#define bus_space_read_8(t, h, o) __bs_rs(8,(t),(h),(o)) 300178172Simp 301202044Simp#define bus_space_read_stream_1(t, h, o) __bs_rs_s(1,(t), (h), (o)) 302202044Simp#define bus_space_read_stream_2(t, h, o) __bs_rs_s(2,(t), (h), (o)) 303202044Simp#define bus_space_read_stream_4(t, h, o) __bs_rs_s(4,(t), (h), (o)) 304202044Simp#define bus_space_read_stream_8(t, h, o) __bs_rs_s(8,8,(t),(h),(o)) 305178172Simp 306202044Simp/* 307202044Simp * Bus read multiple operations. 308202044Simp */ 309202044Simp#define bus_space_read_multi_1(t, h, o, a, c) \ 310202044Simp __bs_nonsingle(rm,1,(t),(h),(o),(a),(c)) 311202044Simp#define bus_space_read_multi_2(t, h, o, a, c) \ 312202044Simp __bs_nonsingle(rm,2,(t),(h),(o),(a),(c)) 313202044Simp#define bus_space_read_multi_4(t, h, o, a, c) \ 314202044Simp __bs_nonsingle(rm,4,(t),(h),(o),(a),(c)) 315202044Simp#define bus_space_read_multi_8(t, h, o, a, c) \ 316202044Simp __bs_nonsingle(rm,8,(t),(h),(o),(a),(c)) 317178172Simp 318202044Simp#define bus_space_read_multi_stream_1(t, h, o, a, c) \ 319202044Simp __bs_nonsingle_s(rm,1,(t),(h),(o),(a),(c)) 320202044Simp#define bus_space_read_multi_stream_2(t, h, o, a, c) \ 321202044Simp __bs_nonsingle_s(rm,2,(t),(h),(o),(a),(c)) 322202044Simp#define bus_space_read_multi_stream_4(t, h, o, a, c) \ 323202044Simp __bs_nonsingle_s(rm,4,(t),(h),(o),(a),(c)) 324202044Simp#define bus_space_read_multi_stream_8(t, h, o, a, c) \ 325202044Simp __bs_nonsingle_s(rm,8,(t),(h),(o),(a),(c)) 326178172Simp 327178172Simp 328178172Simp/* 329202044Simp * Bus read region operations. 330178172Simp */ 331202044Simp#define bus_space_read_region_1(t, h, o, a, c) \ 332202044Simp __bs_nonsingle(rr,1,(t),(h),(o),(a),(c)) 333202044Simp#define bus_space_read_region_2(t, h, o, a, c) \ 334202044Simp __bs_nonsingle(rr,2,(t),(h),(o),(a),(c)) 335202044Simp#define bus_space_read_region_4(t, h, o, a, c) \ 336202044Simp __bs_nonsingle(rr,4,(t),(h),(o),(a),(c)) 337202044Simp#define bus_space_read_region_8(t, h, o, a, c) \ 338202044Simp __bs_nonsingle(rr,8,(t),(h),(o),(a),(c)) 339178172Simp 340202044Simp#define bus_space_read_region_stream_1(t, h, o, a, c) \ 341202044Simp __bs_nonsingle_s(rr,1,(t),(h),(o),(a),(c)) 342202044Simp#define bus_space_read_region_stream_2(t, h, o, a, c) \ 343202044Simp __bs_nonsingle_s(rr,2,(t),(h),(o),(a),(c)) 344202044Simp#define bus_space_read_region_stream_4(t, h, o, a, c) \ 345202044Simp __bs_nonsingle_s(rr,4,(t),(h),(o),(a),(c)) 346202044Simp#define bus_space_read_region_stream_8(t, h, o, a, c) \ 347202044Simp __bs_nonsingle_s(rr,8,(t),(h),(o),(a),(c)) 348178172Simp 349178172Simp 350202044Simp/* 351202044Simp * Bus write (single) operations. 352202044Simp */ 353202044Simp#define bus_space_write_1(t, h, o, v) __bs_ws(1,(t),(h),(o),(v)) 354202044Simp#define bus_space_write_2(t, h, o, v) __bs_ws(2,(t),(h),(o),(v)) 355202044Simp#define bus_space_write_4(t, h, o, v) __bs_ws(4,(t),(h),(o),(v)) 356202044Simp#define bus_space_write_8(t, h, o, v) __bs_ws(8,(t),(h),(o),(v)) 357178172Simp 358202044Simp#define bus_space_write_stream_1(t, h, o, v) __bs_ws_s(1,(t),(h),(o),(v)) 359202044Simp#define bus_space_write_stream_2(t, h, o, v) __bs_ws_s(2,(t),(h),(o),(v)) 360202044Simp#define bus_space_write_stream_4(t, h, o, v) __bs_ws_s(4,(t),(h),(o),(v)) 361202044Simp#define bus_space_write_stream_8(t, h, o, v) __bs_ws_s(8,(t),(h),(o),(v)) 362178172Simp 363178172Simp 364202044Simp/* 365202044Simp * Bus write multiple operations. 366202044Simp */ 367202044Simp#define bus_space_write_multi_1(t, h, o, a, c) \ 368202044Simp __bs_nonsingle(wm,1,(t),(h),(o),(a),(c)) 369202044Simp#define bus_space_write_multi_2(t, h, o, a, c) \ 370202044Simp __bs_nonsingle(wm,2,(t),(h),(o),(a),(c)) 371202044Simp#define bus_space_write_multi_4(t, h, o, a, c) \ 372202044Simp __bs_nonsingle(wm,4,(t),(h),(o),(a),(c)) 373202044Simp#define bus_space_write_multi_8(t, h, o, a, c) \ 374202044Simp __bs_nonsingle(wm,8,(t),(h),(o),(a),(c)) 375178172Simp 376202044Simp#define bus_space_write_multi_stream_1(t, h, o, a, c) \ 377202044Simp __bs_nonsingle_s(wm,1,(t),(h),(o),(a),(c)) 378202044Simp#define bus_space_write_multi_stream_2(t, h, o, a, c) \ 379202044Simp __bs_nonsingle_s(wm,2,(t),(h),(o),(a),(c)) 380202044Simp#define bus_space_write_multi_stream_4(t, h, o, a, c) \ 381202044Simp __bs_nonsingle_s(wm,4,(t),(h),(o),(a),(c)) 382202044Simp#define bus_space_write_multi_stream_8(t, h, o, a, c) \ 383202044Simp __bs_nonsingle_s(wm,8,(t),(h),(o),(a),(c)) 384178172Simp 385178172Simp 386178172Simp/* 387202044Simp * Bus write region operations. 388178172Simp */ 389202044Simp#define bus_space_write_region_1(t, h, o, a, c) \ 390202044Simp __bs_nonsingle(wr,1,(t),(h),(o),(a),(c)) 391202044Simp#define bus_space_write_region_2(t, h, o, a, c) \ 392202044Simp __bs_nonsingle(wr,2,(t),(h),(o),(a),(c)) 393202044Simp#define bus_space_write_region_4(t, h, o, a, c) \ 394202044Simp __bs_nonsingle(wr,4,(t),(h),(o),(a),(c)) 395202044Simp#define bus_space_write_region_8(t, h, o, a, c) \ 396202044Simp __bs_nonsingle(wr,8,(t),(h),(o),(a),(c)) 397178172Simp 398202044Simp#define bus_space_write_region_stream_1(t, h, o, a, c) \ 399202044Simp __bs_nonsingle_s(wr,1,(t),(h),(o),(a),(c)) 400202044Simp#define bus_space_write_region_stream_2(t, h, o, a, c) \ 401202044Simp __bs_nonsingle_s(wr,2,(t),(h),(o),(a),(c)) 402202044Simp#define bus_space_write_region_stream_4(t, h, o, a, c) \ 403202044Simp __bs_nonsingle_s(wr,4,(t),(h),(o),(a),(c)) 404202044Simp#define bus_space_write_region_stream_8(t, h, o, a, c) \ 405202044Simp __bs_nonsingle_s(wr,8,(t),(h),(o),(a),(c)) 406178172Simp 407178172Simp 408202044Simp/* 409202044Simp * Set multiple operations. 410202044Simp */ 411216143Sbrucec#define bus_space_set_multi_1(t, h, o, v, c) \ 412202044Simp __bs_set(sm,1,(t),(h),(o),(v),(c)) 413216143Sbrucec#define bus_space_set_multi_2(t, h, o, v, c) \ 414202044Simp __bs_set(sm,2,(t),(h),(o),(v),(c)) 415216143Sbrucec#define bus_space_set_multi_4(t, h, o, v, c) \ 416202044Simp __bs_set(sm,4,(t),(h),(o),(v),(c)) 417216143Sbrucec#define bus_space_set_multi_8(t, h, o, v, c) \ 418202044Simp __bs_set(sm,8,(t),(h),(o),(v),(c)) 419178172Simp 420178172Simp 421202044Simp/* 422202044Simp * Set region operations. 423202044Simp */ 424202044Simp#define bus_space_set_region_1(t, h, o, v, c) \ 425202044Simp __bs_set(sr,1,(t),(h),(o),(v),(c)) 426202044Simp#define bus_space_set_region_2(t, h, o, v, c) \ 427202044Simp __bs_set(sr,2,(t),(h),(o),(v),(c)) 428202044Simp#define bus_space_set_region_4(t, h, o, v, c) \ 429202044Simp __bs_set(sr,4,(t),(h),(o),(v),(c)) 430202044Simp#define bus_space_set_region_8(t, h, o, v, c) \ 431202044Simp __bs_set(sr,8,(t),(h),(o),(v),(c)) 432178172Simp 433178172Simp 434178172Simp/* 435202044Simp * Copy operations. 436178172Simp */ 437216143Sbrucec#define bus_space_copy_region_1(t, h1, o1, h2, o2, c) \ 438202044Simp __bs_copy(1, t, h1, o1, h2, o2, c) 439216143Sbrucec#define bus_space_copy_region_2(t, h1, o1, h2, o2, c) \ 440202044Simp __bs_copy(2, t, h1, o1, h2, o2, c) 441216143Sbrucec#define bus_space_copy_region_4(t, h1, o1, h2, o2, c) \ 442202044Simp __bs_copy(4, t, h1, o1, h2, o2, c) 443216143Sbrucec#define bus_space_copy_region_8(t, h1, o1, h2, o2, c) \ 444202044Simp __bs_copy(8, t, h1, o1, h2, o2, c) 445178172Simp 446178172Simp/* 447202044Simp * Macros to provide prototypes for all the functions used in the 448202044Simp * bus_space structure 449178172Simp */ 450178172Simp 451202044Simp#define bs_map_proto(f) \ 452202044Simpint __bs_c(f,_bs_map) (void *t, bus_addr_t addr, \ 453202044Simp bus_size_t size, int cacheable, bus_space_handle_t *bshp); 454178172Simp 455202044Simp#define bs_unmap_proto(f) \ 456202044Simpvoid __bs_c(f,_bs_unmap) (void *t, bus_space_handle_t bsh, \ 457202044Simp bus_size_t size); 458178172Simp 459202044Simp#define bs_subregion_proto(f) \ 460202044Simpint __bs_c(f,_bs_subregion) (void *t, bus_space_handle_t bsh, \ 461202044Simp bus_size_t offset, bus_size_t size, \ 462202044Simp bus_space_handle_t *nbshp); 463178172Simp 464202044Simp#define bs_alloc_proto(f) \ 465202044Simpint __bs_c(f,_bs_alloc) (void *t, bus_addr_t rstart, \ 466202044Simp bus_addr_t rend, bus_size_t size, bus_size_t align, \ 467202044Simp bus_size_t boundary, int cacheable, bus_addr_t *addrp, \ 468202044Simp bus_space_handle_t *bshp); 469178172Simp 470202044Simp#define bs_free_proto(f) \ 471202044Simpvoid __bs_c(f,_bs_free) (void *t, bus_space_handle_t bsh, \ 472202044Simp bus_size_t size); 473178172Simp 474202044Simp#define bs_barrier_proto(f) \ 475202044Simpvoid __bs_c(f,_bs_barrier) (void *t, bus_space_handle_t bsh, \ 476202044Simp bus_size_t offset, bus_size_t len, int flags); 477178172Simp 478202044Simp#define bs_r_1_proto(f) \ 479202044Simpu_int8_t __bs_c(f,_bs_r_1) (void *t, bus_space_handle_t bsh, \ 480202044Simp bus_size_t offset); 481178172Simp 482202044Simp#define bs_r_2_proto(f) \ 483202044Simpu_int16_t __bs_c(f,_bs_r_2) (void *t, bus_space_handle_t bsh, \ 484202044Simp bus_size_t offset); 485178172Simp 486202044Simp#define bs_r_4_proto(f) \ 487202044Simpu_int32_t __bs_c(f,_bs_r_4) (void *t, bus_space_handle_t bsh, \ 488202044Simp bus_size_t offset); 489178172Simp 490202044Simp#define bs_r_8_proto(f) \ 491202044Simpu_int64_t __bs_c(f,_bs_r_8) (void *t, bus_space_handle_t bsh, \ 492202044Simp bus_size_t offset); 493178172Simp 494202044Simp#define bs_r_1_s_proto(f) \ 495202044Simpu_int8_t __bs_c(f,_bs_r_1_s) (void *t, bus_space_handle_t bsh, \ 496202044Simp bus_size_t offset); 497178172Simp 498202044Simp#define bs_r_2_s_proto(f) \ 499202044Simpu_int16_t __bs_c(f,_bs_r_2_s) (void *t, bus_space_handle_t bsh, \ 500202044Simp bus_size_t offset); 501178172Simp 502202044Simp#define bs_r_4_s_proto(f) \ 503202044Simpu_int32_t __bs_c(f,_bs_r_4_s) (void *t, bus_space_handle_t bsh, \ 504202044Simp bus_size_t offset); 505178172Simp 506202044Simp#define bs_w_1_proto(f) \ 507202044Simpvoid __bs_c(f,_bs_w_1) (void *t, bus_space_handle_t bsh, \ 508202044Simp bus_size_t offset, u_int8_t value); 509178172Simp 510202044Simp#define bs_w_2_proto(f) \ 511202044Simpvoid __bs_c(f,_bs_w_2) (void *t, bus_space_handle_t bsh, \ 512202044Simp bus_size_t offset, u_int16_t value); 513178172Simp 514202044Simp#define bs_w_4_proto(f) \ 515202044Simpvoid __bs_c(f,_bs_w_4) (void *t, bus_space_handle_t bsh, \ 516202044Simp bus_size_t offset, u_int32_t value); 517178172Simp 518202044Simp#define bs_w_8_proto(f) \ 519202044Simpvoid __bs_c(f,_bs_w_8) (void *t, bus_space_handle_t bsh, \ 520202044Simp bus_size_t offset, u_int64_t value); 521178172Simp 522202044Simp#define bs_w_1_s_proto(f) \ 523202044Simpvoid __bs_c(f,_bs_w_1_s) (void *t, bus_space_handle_t bsh, \ 524202044Simp bus_size_t offset, u_int8_t value); 525178172Simp 526202044Simp#define bs_w_2_s_proto(f) \ 527202044Simpvoid __bs_c(f,_bs_w_2_s) (void *t, bus_space_handle_t bsh, \ 528202044Simp bus_size_t offset, u_int16_t value); 529178172Simp 530202044Simp#define bs_w_4_s_proto(f) \ 531202044Simpvoid __bs_c(f,_bs_w_4_s) (void *t, bus_space_handle_t bsh, \ 532202044Simp bus_size_t offset, u_int32_t value); 533178172Simp 534202044Simp#define bs_rm_1_proto(f) \ 535202044Simpvoid __bs_c(f,_bs_rm_1) (void *t, bus_space_handle_t bsh, \ 536202044Simp bus_size_t offset, u_int8_t *addr, bus_size_t count); 537178172Simp 538202044Simp#define bs_rm_2_proto(f) \ 539202044Simpvoid __bs_c(f,_bs_rm_2) (void *t, bus_space_handle_t bsh, \ 540202044Simp bus_size_t offset, u_int16_t *addr, bus_size_t count); 541178172Simp 542202044Simp#define bs_rm_4_proto(f) \ 543202044Simpvoid __bs_c(f,_bs_rm_4) (void *t, bus_space_handle_t bsh, \ 544202044Simp bus_size_t offset, u_int32_t *addr, bus_size_t count); 545178172Simp 546202044Simp#define bs_rm_8_proto(f) \ 547202044Simpvoid __bs_c(f,_bs_rm_8) (void *t, bus_space_handle_t bsh, \ 548202044Simp bus_size_t offset, u_int64_t *addr, bus_size_t count); 549178172Simp 550202044Simp#define bs_wm_1_proto(f) \ 551202044Simpvoid __bs_c(f,_bs_wm_1) (void *t, bus_space_handle_t bsh, \ 552202044Simp bus_size_t offset, const u_int8_t *addr, bus_size_t count); 553178172Simp 554202044Simp#define bs_wm_2_proto(f) \ 555202044Simpvoid __bs_c(f,_bs_wm_2) (void *t, bus_space_handle_t bsh, \ 556202044Simp bus_size_t offset, const u_int16_t *addr, bus_size_t count); 557178172Simp 558202044Simp#define bs_wm_4_proto(f) \ 559202044Simpvoid __bs_c(f,_bs_wm_4) (void *t, bus_space_handle_t bsh, \ 560202044Simp bus_size_t offset, const u_int32_t *addr, bus_size_t count); 561178172Simp 562202044Simp#define bs_wm_8_proto(f) \ 563202044Simpvoid __bs_c(f,_bs_wm_8) (void *t, bus_space_handle_t bsh, \ 564202044Simp bus_size_t offset, const u_int64_t *addr, bus_size_t count); 565178172Simp 566202044Simp#define bs_rr_1_proto(f) \ 567202044Simpvoid __bs_c(f, _bs_rr_1) (void *t, bus_space_handle_t bsh, \ 568202044Simp bus_size_t offset, u_int8_t *addr, bus_size_t count); 569178172Simp 570202044Simp#define bs_rr_2_proto(f) \ 571202044Simpvoid __bs_c(f, _bs_rr_2) (void *t, bus_space_handle_t bsh, \ 572202044Simp bus_size_t offset, u_int16_t *addr, bus_size_t count); 573178172Simp 574202044Simp#define bs_rr_4_proto(f) \ 575202044Simpvoid __bs_c(f, _bs_rr_4) (void *t, bus_space_handle_t bsh, \ 576202044Simp bus_size_t offset, u_int32_t *addr, bus_size_t count); 577178172Simp 578202044Simp#define bs_rr_8_proto(f) \ 579202044Simpvoid __bs_c(f, _bs_rr_8) (void *t, bus_space_handle_t bsh, \ 580202044Simp bus_size_t offset, u_int64_t *addr, bus_size_t count); 581178172Simp 582202044Simp#define bs_wr_1_proto(f) \ 583202044Simpvoid __bs_c(f, _bs_wr_1) (void *t, bus_space_handle_t bsh, \ 584202044Simp bus_size_t offset, const u_int8_t *addr, bus_size_t count); 585178172Simp 586202044Simp#define bs_wr_2_proto(f) \ 587202044Simpvoid __bs_c(f, _bs_wr_2) (void *t, bus_space_handle_t bsh, \ 588202044Simp bus_size_t offset, const u_int16_t *addr, bus_size_t count); 589178172Simp 590202044Simp#define bs_wr_4_proto(f) \ 591202044Simpvoid __bs_c(f, _bs_wr_4) (void *t, bus_space_handle_t bsh, \ 592202044Simp bus_size_t offset, const u_int32_t *addr, bus_size_t count); 593178172Simp 594202044Simp#define bs_wr_8_proto(f) \ 595202044Simpvoid __bs_c(f, _bs_wr_8) (void *t, bus_space_handle_t bsh, \ 596202044Simp bus_size_t offset, const u_int64_t *addr, bus_size_t count); 597178172Simp 598202044Simp#define bs_sm_1_proto(f) \ 599202044Simpvoid __bs_c(f,_bs_sm_1) (void *t, bus_space_handle_t bsh, \ 600202044Simp bus_size_t offset, u_int8_t value, bus_size_t count); 601178172Simp 602202044Simp#define bs_sm_2_proto(f) \ 603202044Simpvoid __bs_c(f,_bs_sm_2) (void *t, bus_space_handle_t bsh, \ 604202044Simp bus_size_t offset, u_int16_t value, bus_size_t count); 605178172Simp 606202044Simp#define bs_sm_4_proto(f) \ 607202044Simpvoid __bs_c(f,_bs_sm_4) (void *t, bus_space_handle_t bsh, \ 608202044Simp bus_size_t offset, u_int32_t value, bus_size_t count); 609178172Simp 610202044Simp#define bs_sm_8_proto(f) \ 611202044Simpvoid __bs_c(f,_bs_sm_8) (void *t, bus_space_handle_t bsh, \ 612202044Simp bus_size_t offset, u_int64_t value, bus_size_t count); 613178172Simp 614202044Simp#define bs_sr_1_proto(f) \ 615202044Simpvoid __bs_c(f,_bs_sr_1) (void *t, bus_space_handle_t bsh, \ 616202044Simp bus_size_t offset, u_int8_t value, bus_size_t count); 617178172Simp 618202044Simp#define bs_sr_2_proto(f) \ 619202044Simpvoid __bs_c(f,_bs_sr_2) (void *t, bus_space_handle_t bsh, \ 620202044Simp bus_size_t offset, u_int16_t value, bus_size_t count); 621178172Simp 622202044Simp#define bs_sr_4_proto(f) \ 623202044Simpvoid __bs_c(f,_bs_sr_4) (void *t, bus_space_handle_t bsh, \ 624202044Simp bus_size_t offset, u_int32_t value, bus_size_t count); 625178172Simp 626202044Simp#define bs_sr_8_proto(f) \ 627202044Simpvoid __bs_c(f,_bs_sr_8) (void *t, bus_space_handle_t bsh, \ 628202044Simp bus_size_t offset, u_int64_t value, bus_size_t count); 629178172Simp 630202044Simp#define bs_c_1_proto(f) \ 631202044Simpvoid __bs_c(f,_bs_c_1) (void *t, bus_space_handle_t bsh1, \ 632202044Simp bus_size_t offset1, bus_space_handle_t bsh2, \ 633202044Simp bus_size_t offset2, bus_size_t count); 634178172Simp 635202044Simp#define bs_c_2_proto(f) \ 636202044Simpvoid __bs_c(f,_bs_c_2) (void *t, bus_space_handle_t bsh1, \ 637202044Simp bus_size_t offset1, bus_space_handle_t bsh2, \ 638202044Simp bus_size_t offset2, bus_size_t count); 639178172Simp 640202044Simp#define bs_c_4_proto(f) \ 641202044Simpvoid __bs_c(f,_bs_c_4) (void *t, bus_space_handle_t bsh1, \ 642202044Simp bus_size_t offset1, bus_space_handle_t bsh2, \ 643202044Simp bus_size_t offset2, bus_size_t count); 644178172Simp 645202044Simp#define bs_c_8_proto(f) \ 646202044Simpvoid __bs_c(f,_bs_c_8) (void *t, bus_space_handle_t bsh1, \ 647202044Simp bus_size_t offset1, bus_space_handle_t bsh2, \ 648202044Simp bus_size_t offset2, bus_size_t count); 649178172Simp 650202044Simp#define DECLARE_BUS_SPACE_PROTOTYPES(f) \ 651202044Simp bs_map_proto(f); \ 652202044Simp bs_unmap_proto(f); \ 653202044Simp bs_subregion_proto(f); \ 654202044Simp bs_alloc_proto(f); \ 655202044Simp bs_free_proto(f); \ 656202044Simp bs_barrier_proto(f); \ 657202044Simp bs_r_1_proto(f); \ 658202044Simp bs_r_2_proto(f); \ 659202044Simp bs_r_4_proto(f); \ 660202044Simp bs_r_8_proto(f); \ 661202044Simp bs_r_1_s_proto(f); \ 662202044Simp bs_r_2_s_proto(f); \ 663202044Simp bs_r_4_s_proto(f); \ 664202044Simp bs_w_1_proto(f); \ 665202044Simp bs_w_2_proto(f); \ 666202044Simp bs_w_4_proto(f); \ 667202044Simp bs_w_8_proto(f); \ 668202044Simp bs_w_1_s_proto(f); \ 669202044Simp bs_w_2_s_proto(f); \ 670202044Simp bs_w_4_s_proto(f); \ 671202044Simp bs_rm_1_proto(f); \ 672202044Simp bs_rm_2_proto(f); \ 673202044Simp bs_rm_4_proto(f); \ 674202044Simp bs_rm_8_proto(f); \ 675202044Simp bs_wm_1_proto(f); \ 676202044Simp bs_wm_2_proto(f); \ 677202044Simp bs_wm_4_proto(f); \ 678202044Simp bs_wm_8_proto(f); \ 679202044Simp bs_rr_1_proto(f); \ 680202044Simp bs_rr_2_proto(f); \ 681202044Simp bs_rr_4_proto(f); \ 682202044Simp bs_rr_8_proto(f); \ 683202044Simp bs_wr_1_proto(f); \ 684202044Simp bs_wr_2_proto(f); \ 685202044Simp bs_wr_4_proto(f); \ 686202044Simp bs_wr_8_proto(f); \ 687202044Simp bs_sm_1_proto(f); \ 688202044Simp bs_sm_2_proto(f); \ 689202044Simp bs_sm_4_proto(f); \ 690202044Simp bs_sm_8_proto(f); \ 691202044Simp bs_sr_1_proto(f); \ 692202044Simp bs_sr_2_proto(f); \ 693202044Simp bs_sr_4_proto(f); \ 694202044Simp bs_sr_8_proto(f); \ 695202044Simp bs_c_1_proto(f); \ 696202044Simp bs_c_2_proto(f); \ 697202044Simp bs_c_4_proto(f); \ 698202044Simp bs_c_8_proto(f); 699178172Simp 700202044Simp#define BUS_SPACE_ALIGNED_POINTER(p, t) ALIGNED_POINTER(p, t) 701178172Simp 702202044Simp#define BUS_SPACE_MAXADDR_24BIT 0xFFFFFF 703232881Sjmallett#define BUS_SPACE_MAXSIZE_24BIT 0xFFFFFF 704232881Sjmallett 705202044Simp#define BUS_SPACE_MAXADDR_32BIT 0xFFFFFFFF 706202044Simp#define BUS_SPACE_MAXSIZE_32BIT 0xFFFFFFFF 707178172Simp 708232881Sjmallett#if defined(__mips_n64) 709232881Sjmallett#define BUS_SPACE_MAXADDR 0xFFFFFFFFFFFFFFFFUL 710232881Sjmallett#define BUS_SPACE_MAXSIZE 0xFFFFFFFFFFFFFFFFUL 711232881Sjmallett#else 712232881Sjmallett#define BUS_SPACE_MAXADDR 0xFFFFFFFFUL 713232881Sjmallett#define BUS_SPACE_MAXSIZE 0xFFFFFFFFUL 714232881Sjmallett#endif 715232881Sjmallett 716232881Sjmallett 717206404Simp#define BUS_SPACE_UNRESTRICTED (~0) 718206404Simp 719202044Simp/* 720202044Simp * declare generic bus space, it suits all needs in 721202044Simp */ 722202044SimpDECLARE_BUS_SPACE_PROTOTYPES(generic); 723202044Simpextern bus_space_tag_t mips_bus_space_generic; 724245332Srwatson 725202044Simp/* Special bus space for RMI processors */ 726224115Sjchandra#if defined(CPU_RMI) || defined (CPU_NLM) 727202044Simpextern bus_space_tag_t rmi_bus_space; 728204577Srrsextern bus_space_tag_t rmi_pci_bus_space; 729226501Sjchandraextern bus_space_tag_t rmi_uart_bus_space; 730178172Simp#endif 731178172Simp 732178172Simp#include <machine/bus_dma.h> 733178172Simp 734202044Simp#endif /* _MACHINE_BUS_H_ */ 735