bus.h revision 226501
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 * 3. All advertising materials mentioning features or use of this software 20178172Simp * must display the following acknowledgement: 21178172Simp * This product includes software developed by the NetBSD 22178172Simp * Foundation, Inc. and its contributors. 23178172Simp * 4. Neither the name of The NetBSD Foundation nor the names of its 24178172Simp * contributors may be used to endorse or promote products derived 25178172Simp * from this software without specific prior written permission. 26178172Simp * 27178172Simp * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 28178172Simp * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 29178172Simp * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 30178172Simp * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 31178172Simp * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 32178172Simp * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 33178172Simp * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 34178172Simp * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 35178172Simp * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 36178172Simp * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 37178172Simp * POSSIBILITY OF SUCH DAMAGE. 38178172Simp */ 39178172Simp 40202031Simp/*- 41178172Simp * Copyright (c) 1996 Charles M. Hannum. All rights reserved. 42178172Simp * Copyright (c) 1996 Christopher G. Demetriou. All rights reserved. 43178172Simp * 44178172Simp * Redistribution and use in source and binary forms, with or without 45178172Simp * modification, are permitted provided that the following conditions 46178172Simp * are met: 47178172Simp * 1. Redistributions of source code must retain the above copyright 48178172Simp * notice, this list of conditions and the following disclaimer. 49178172Simp * 2. Redistributions in binary form must reproduce the above copyright 50178172Simp * notice, this list of conditions and the following disclaimer in the 51178172Simp * documentation and/or other materials provided with the distribution. 52178172Simp * 3. All advertising materials mentioning features or use of this software 53178172Simp * must display the following acknowledgement: 54178172Simp * This product includes software developed by Christopher G. Demetriou 55178172Simp * for the NetBSD Project. 56178172Simp * 4. The name of the author may not be used to endorse or promote products 57178172Simp * derived from this software without specific prior written permission 58178172Simp * 59178172Simp * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 60178172Simp * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 61178172Simp * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 62178172Simp * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 63178172Simp * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 64178172Simp * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 65178172Simp * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 66178172Simp * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 67178172Simp * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 68178172Simp * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 69178172Simp * 70178172Simp * $FreeBSD: head/sys/mips/include/bus.h 226501 2011-10-18 08:10:23Z jchandra $ 71202044Simp */ 72178172Simp 73178172Simp#ifndef _MACHINE_BUS_H_ 74202044Simp#define _MACHINE_BUS_H_ 75178172Simp 76178172Simp#include <machine/_bus.h> 77178172Simp 78202044Simpstruct bus_space { 79202044Simp /* cookie */ 80202044Simp void *bs_cookie; 81178172Simp 82202044Simp /* mapping/unmapping */ 83202044Simp int (*bs_map) (void *, bus_addr_t, bus_size_t, 84202044Simp int, bus_space_handle_t *); 85202044Simp void (*bs_unmap) (void *, bus_space_handle_t, bus_size_t); 86202044Simp int (*bs_subregion) (void *, bus_space_handle_t, 87202044Simp bus_size_t, bus_size_t, bus_space_handle_t *); 88178172Simp 89202044Simp /* allocation/deallocation */ 90202044Simp int (*bs_alloc) (void *, bus_addr_t, bus_addr_t, 91202044Simp bus_size_t, bus_size_t, bus_size_t, int, 92202044Simp bus_addr_t *, bus_space_handle_t *); 93202044Simp void (*bs_free) (void *, bus_space_handle_t, 94202044Simp bus_size_t); 95178172Simp 96202044Simp /* get kernel virtual address */ 97202044Simp /* barrier */ 98202044Simp void (*bs_barrier) (void *, bus_space_handle_t, 99202044Simp bus_size_t, bus_size_t, int); 100178172Simp 101202044Simp /* read (single) */ 102202044Simp u_int8_t (*bs_r_1) (void *, bus_space_handle_t, bus_size_t); 103202044Simp u_int16_t (*bs_r_2) (void *, bus_space_handle_t, bus_size_t); 104202044Simp u_int32_t (*bs_r_4) (void *, bus_space_handle_t, bus_size_t); 105202044Simp u_int64_t (*bs_r_8) (void *, bus_space_handle_t, bus_size_t); 106178172Simp 107202044Simp /* read multiple */ 108202044Simp void (*bs_rm_1) (void *, bus_space_handle_t, bus_size_t, 109202044Simp u_int8_t *, bus_size_t); 110202044Simp void (*bs_rm_2) (void *, bus_space_handle_t, bus_size_t, 111202044Simp u_int16_t *, bus_size_t); 112202044Simp void (*bs_rm_4) (void *, bus_space_handle_t, 113202044Simp bus_size_t, u_int32_t *, bus_size_t); 114202044Simp void (*bs_rm_8) (void *, bus_space_handle_t, 115202044Simp bus_size_t, u_int64_t *, bus_size_t); 116202044Simp 117202044Simp /* read region */ 118202044Simp void (*bs_rr_1) (void *, bus_space_handle_t, 119202044Simp bus_size_t, u_int8_t *, bus_size_t); 120202044Simp void (*bs_rr_2) (void *, bus_space_handle_t, 121202044Simp bus_size_t, u_int16_t *, bus_size_t); 122202044Simp void (*bs_rr_4) (void *, bus_space_handle_t, 123202044Simp bus_size_t, u_int32_t *, bus_size_t); 124202044Simp void (*bs_rr_8) (void *, bus_space_handle_t, 125202044Simp bus_size_t, u_int64_t *, bus_size_t); 126202044Simp 127202044Simp /* write (single) */ 128202044Simp void (*bs_w_1) (void *, bus_space_handle_t, 129202044Simp bus_size_t, u_int8_t); 130202044Simp void (*bs_w_2) (void *, bus_space_handle_t, 131202044Simp bus_size_t, u_int16_t); 132202044Simp void (*bs_w_4) (void *, bus_space_handle_t, 133202044Simp bus_size_t, u_int32_t); 134202044Simp void (*bs_w_8) (void *, bus_space_handle_t, 135202044Simp bus_size_t, u_int64_t); 136178172Simp 137202044Simp /* write multiple */ 138202044Simp void (*bs_wm_1) (void *, bus_space_handle_t, 139202044Simp bus_size_t, const u_int8_t *, bus_size_t); 140202044Simp void (*bs_wm_2) (void *, bus_space_handle_t, 141202044Simp bus_size_t, const u_int16_t *, bus_size_t); 142202044Simp void (*bs_wm_4) (void *, bus_space_handle_t, 143202044Simp bus_size_t, const u_int32_t *, bus_size_t); 144202044Simp void (*bs_wm_8) (void *, bus_space_handle_t, 145202044Simp bus_size_t, const u_int64_t *, bus_size_t); 146202044Simp 147202044Simp /* write region */ 148202044Simp void (*bs_wr_1) (void *, bus_space_handle_t, 149202044Simp bus_size_t, const u_int8_t *, bus_size_t); 150202044Simp void (*bs_wr_2) (void *, bus_space_handle_t, 151202044Simp bus_size_t, const u_int16_t *, bus_size_t); 152202044Simp void (*bs_wr_4) (void *, bus_space_handle_t, 153202044Simp bus_size_t, const u_int32_t *, bus_size_t); 154202044Simp void (*bs_wr_8) (void *, bus_space_handle_t, 155202044Simp bus_size_t, const u_int64_t *, bus_size_t); 156178172Simp 157202044Simp /* set multiple */ 158202044Simp void (*bs_sm_1) (void *, bus_space_handle_t, 159202044Simp bus_size_t, u_int8_t, bus_size_t); 160202044Simp void (*bs_sm_2) (void *, bus_space_handle_t, 161202044Simp bus_size_t, u_int16_t, bus_size_t); 162202044Simp void (*bs_sm_4) (void *, bus_space_handle_t, 163202044Simp bus_size_t, u_int32_t, bus_size_t); 164202044Simp void (*bs_sm_8) (void *, bus_space_handle_t, 165202044Simp bus_size_t, u_int64_t, bus_size_t); 166178172Simp 167202044Simp /* set region */ 168202044Simp void (*bs_sr_1) (void *, bus_space_handle_t, 169202044Simp bus_size_t, u_int8_t, bus_size_t); 170202044Simp void (*bs_sr_2) (void *, bus_space_handle_t, 171202044Simp bus_size_t, u_int16_t, bus_size_t); 172202044Simp void (*bs_sr_4) (void *, bus_space_handle_t, 173202044Simp bus_size_t, u_int32_t, bus_size_t); 174202044Simp void (*bs_sr_8) (void *, bus_space_handle_t, 175202044Simp bus_size_t, u_int64_t, bus_size_t); 176178172Simp 177202044Simp /* copy */ 178202044Simp void (*bs_c_1) (void *, bus_space_handle_t, bus_size_t, 179202044Simp bus_space_handle_t, bus_size_t, bus_size_t); 180202044Simp void (*bs_c_2) (void *, bus_space_handle_t, bus_size_t, 181202044Simp bus_space_handle_t, bus_size_t, bus_size_t); 182202044Simp void (*bs_c_4) (void *, bus_space_handle_t, bus_size_t, 183202044Simp bus_space_handle_t, bus_size_t, bus_size_t); 184202044Simp void (*bs_c_8) (void *, bus_space_handle_t, bus_size_t, 185202044Simp bus_space_handle_t, bus_size_t, bus_size_t); 186178172Simp 187202044Simp /* read stream (single) */ 188202044Simp u_int8_t (*bs_r_1_s) (void *, bus_space_handle_t, bus_size_t); 189202044Simp u_int16_t (*bs_r_2_s) (void *, bus_space_handle_t, bus_size_t); 190202044Simp u_int32_t (*bs_r_4_s) (void *, bus_space_handle_t, bus_size_t); 191202044Simp u_int64_t (*bs_r_8_s) (void *, bus_space_handle_t, bus_size_t); 192178172Simp 193202044Simp /* read multiple stream */ 194202044Simp void (*bs_rm_1_s) (void *, bus_space_handle_t, bus_size_t, 195202044Simp u_int8_t *, bus_size_t); 196202044Simp void (*bs_rm_2_s) (void *, bus_space_handle_t, bus_size_t, 197202044Simp u_int16_t *, bus_size_t); 198202044Simp void (*bs_rm_4_s) (void *, bus_space_handle_t, 199202044Simp bus_size_t, u_int32_t *, bus_size_t); 200202044Simp void (*bs_rm_8_s) (void *, bus_space_handle_t, 201202044Simp bus_size_t, u_int64_t *, bus_size_t); 202202044Simp 203202044Simp /* read region stream */ 204202044Simp void (*bs_rr_1_s) (void *, bus_space_handle_t, 205202044Simp bus_size_t, u_int8_t *, bus_size_t); 206202044Simp void (*bs_rr_2_s) (void *, bus_space_handle_t, 207202044Simp bus_size_t, u_int16_t *, bus_size_t); 208202044Simp void (*bs_rr_4_s) (void *, bus_space_handle_t, 209202044Simp bus_size_t, u_int32_t *, bus_size_t); 210202044Simp void (*bs_rr_8_s) (void *, bus_space_handle_t, 211202044Simp bus_size_t, u_int64_t *, bus_size_t); 212202044Simp 213202044Simp /* write stream (single) */ 214202044Simp void (*bs_w_1_s) (void *, bus_space_handle_t, 215202044Simp bus_size_t, u_int8_t); 216202044Simp void (*bs_w_2_s) (void *, bus_space_handle_t, 217202044Simp bus_size_t, u_int16_t); 218202044Simp void (*bs_w_4_s) (void *, bus_space_handle_t, 219202044Simp bus_size_t, u_int32_t); 220202044Simp void (*bs_w_8_s) (void *, bus_space_handle_t, 221202044Simp bus_size_t, u_int64_t); 222178172Simp 223202044Simp /* write multiple stream */ 224202044Simp void (*bs_wm_1_s) (void *, bus_space_handle_t, 225202044Simp bus_size_t, const u_int8_t *, bus_size_t); 226202044Simp void (*bs_wm_2_s) (void *, bus_space_handle_t, 227202044Simp bus_size_t, const u_int16_t *, bus_size_t); 228202044Simp void (*bs_wm_4_s) (void *, bus_space_handle_t, 229202044Simp bus_size_t, const u_int32_t *, bus_size_t); 230202044Simp void (*bs_wm_8_s) (void *, bus_space_handle_t, 231202044Simp bus_size_t, const u_int64_t *, bus_size_t); 232202044Simp 233202044Simp /* write region stream */ 234202044Simp void (*bs_wr_1_s) (void *, bus_space_handle_t, 235202044Simp bus_size_t, const u_int8_t *, bus_size_t); 236202044Simp void (*bs_wr_2_s) (void *, bus_space_handle_t, 237202044Simp bus_size_t, const u_int16_t *, bus_size_t); 238202044Simp void (*bs_wr_4_s) (void *, bus_space_handle_t, 239202044Simp bus_size_t, const u_int32_t *, bus_size_t); 240202044Simp void (*bs_wr_8_s) (void *, bus_space_handle_t, 241202044Simp bus_size_t, const u_int64_t *, bus_size_t); 242202044Simp}; 243178172Simp 244178172Simp 245178172Simp/* 246202044Simp * Utility macros; INTERNAL USE ONLY. 247178172Simp */ 248202044Simp#define __bs_c(a,b) __CONCAT(a,b) 249202044Simp#define __bs_opname(op,size) __bs_c(__bs_c(__bs_c(bs_,op),_),size) 250178172Simp 251202044Simp#define __bs_rs(sz, t, h, o) \ 252202044Simp (*(t)->__bs_opname(r,sz))((t)->bs_cookie, h, o) 253202044Simp#define __bs_ws(sz, t, h, o, v) \ 254202044Simp (*(t)->__bs_opname(w,sz))((t)->bs_cookie, h, o, v) 255202044Simp#define __bs_nonsingle(type, sz, t, h, o, a, c) \ 256202044Simp (*(t)->__bs_opname(type,sz))((t)->bs_cookie, h, o, a, c) 257202044Simp#define __bs_set(type, sz, t, h, o, v, c) \ 258202044Simp (*(t)->__bs_opname(type,sz))((t)->bs_cookie, h, o, v, c) 259202044Simp#define __bs_copy(sz, t, h1, o1, h2, o2, cnt) \ 260202044Simp (*(t)->__bs_opname(c,sz))((t)->bs_cookie, h1, o1, h2, o2, cnt) 261178172Simp 262202044Simp#define __bs_opname_s(op,size) __bs_c(__bs_c(__bs_c(__bs_c(bs_,op),_),size),_s) 263202044Simp#define __bs_rs_s(sz, t, h, o) \ 264202044Simp (*(t)->__bs_opname_s(r,sz))((t)->bs_cookie, h, o) 265202044Simp#define __bs_ws_s(sz, t, h, o, v) \ 266202044Simp (*(t)->__bs_opname_s(w,sz))((t)->bs_cookie, h, o, v) 267202044Simp#define __bs_nonsingle_s(type, sz, t, h, o, a, c) \ 268202044Simp (*(t)->__bs_opname_s(type,sz))((t)->bs_cookie, h, o, a, c) 269178172Simp 270202044Simp 271178172Simp/* 272202044Simp * Mapping and unmapping operations. 273178172Simp */ 274202044Simp#define bus_space_map(t, a, s, c, hp) \ 275202044Simp (*(t)->bs_map)((t)->bs_cookie, (a), (s), (c), (hp)) 276202044Simp#define bus_space_unmap(t, h, s) \ 277202044Simp (*(t)->bs_unmap)((t)->bs_cookie, (h), (s)) 278202044Simp#define bus_space_subregion(t, h, o, s, hp) \ 279202044Simp (*(t)->bs_subregion)((t)->bs_cookie, (h), (o), (s), (hp)) 280178172Simp 281178172Simp 282202044Simp/* 283202044Simp * Allocation and deallocation operations. 284202044Simp */ 285202044Simp#define bus_space_alloc(t, rs, re, s, a, b, c, ap, hp) \ 286202044Simp (*(t)->bs_alloc)((t)->bs_cookie, (rs), (re), (s), (a), (b), \ 287202044Simp (c), (ap), (hp)) 288202044Simp#define bus_space_free(t, h, s) \ 289202044Simp (*(t)->bs_free)((t)->bs_cookie, (h), (s)) 290178172Simp 291202044Simp/* 292202044Simp * Bus barrier operations. 293202044Simp */ 294202044Simp#define bus_space_barrier(t, h, o, l, f) \ 295202044Simp (*(t)->bs_barrier)((t)->bs_cookie, (h), (o), (l), (f)) 296178172Simp 297202044Simp#define BUS_SPACE_BARRIER_READ 0x01 298202044Simp#define BUS_SPACE_BARRIER_WRITE 0x02 299178172Simp 300202044Simp/* 301202044Simp * Bus read (single) operations. 302202044Simp */ 303202044Simp#define bus_space_read_1(t, h, o) __bs_rs(1,(t),(h),(o)) 304202044Simp#define bus_space_read_2(t, h, o) __bs_rs(2,(t),(h),(o)) 305202044Simp#define bus_space_read_4(t, h, o) __bs_rs(4,(t),(h),(o)) 306202044Simp#define bus_space_read_8(t, h, o) __bs_rs(8,(t),(h),(o)) 307178172Simp 308202044Simp#define bus_space_read_stream_1(t, h, o) __bs_rs_s(1,(t), (h), (o)) 309202044Simp#define bus_space_read_stream_2(t, h, o) __bs_rs_s(2,(t), (h), (o)) 310202044Simp#define bus_space_read_stream_4(t, h, o) __bs_rs_s(4,(t), (h), (o)) 311202044Simp#define bus_space_read_stream_8(t, h, o) __bs_rs_s(8,8,(t),(h),(o)) 312178172Simp 313202044Simp/* 314202044Simp * Bus read multiple operations. 315202044Simp */ 316202044Simp#define bus_space_read_multi_1(t, h, o, a, c) \ 317202044Simp __bs_nonsingle(rm,1,(t),(h),(o),(a),(c)) 318202044Simp#define bus_space_read_multi_2(t, h, o, a, c) \ 319202044Simp __bs_nonsingle(rm,2,(t),(h),(o),(a),(c)) 320202044Simp#define bus_space_read_multi_4(t, h, o, a, c) \ 321202044Simp __bs_nonsingle(rm,4,(t),(h),(o),(a),(c)) 322202044Simp#define bus_space_read_multi_8(t, h, o, a, c) \ 323202044Simp __bs_nonsingle(rm,8,(t),(h),(o),(a),(c)) 324178172Simp 325202044Simp#define bus_space_read_multi_stream_1(t, h, o, a, c) \ 326202044Simp __bs_nonsingle_s(rm,1,(t),(h),(o),(a),(c)) 327202044Simp#define bus_space_read_multi_stream_2(t, h, o, a, c) \ 328202044Simp __bs_nonsingle_s(rm,2,(t),(h),(o),(a),(c)) 329202044Simp#define bus_space_read_multi_stream_4(t, h, o, a, c) \ 330202044Simp __bs_nonsingle_s(rm,4,(t),(h),(o),(a),(c)) 331202044Simp#define bus_space_read_multi_stream_8(t, h, o, a, c) \ 332202044Simp __bs_nonsingle_s(rm,8,(t),(h),(o),(a),(c)) 333178172Simp 334178172Simp 335178172Simp/* 336202044Simp * Bus read region operations. 337178172Simp */ 338202044Simp#define bus_space_read_region_1(t, h, o, a, c) \ 339202044Simp __bs_nonsingle(rr,1,(t),(h),(o),(a),(c)) 340202044Simp#define bus_space_read_region_2(t, h, o, a, c) \ 341202044Simp __bs_nonsingle(rr,2,(t),(h),(o),(a),(c)) 342202044Simp#define bus_space_read_region_4(t, h, o, a, c) \ 343202044Simp __bs_nonsingle(rr,4,(t),(h),(o),(a),(c)) 344202044Simp#define bus_space_read_region_8(t, h, o, a, c) \ 345202044Simp __bs_nonsingle(rr,8,(t),(h),(o),(a),(c)) 346178172Simp 347202044Simp#define bus_space_read_region_stream_1(t, h, o, a, c) \ 348202044Simp __bs_nonsingle_s(rr,1,(t),(h),(o),(a),(c)) 349202044Simp#define bus_space_read_region_stream_2(t, h, o, a, c) \ 350202044Simp __bs_nonsingle_s(rr,2,(t),(h),(o),(a),(c)) 351202044Simp#define bus_space_read_region_stream_4(t, h, o, a, c) \ 352202044Simp __bs_nonsingle_s(rr,4,(t),(h),(o),(a),(c)) 353202044Simp#define bus_space_read_region_stream_8(t, h, o, a, c) \ 354202044Simp __bs_nonsingle_s(rr,8,(t),(h),(o),(a),(c)) 355178172Simp 356178172Simp 357202044Simp/* 358202044Simp * Bus write (single) operations. 359202044Simp */ 360202044Simp#define bus_space_write_1(t, h, o, v) __bs_ws(1,(t),(h),(o),(v)) 361202044Simp#define bus_space_write_2(t, h, o, v) __bs_ws(2,(t),(h),(o),(v)) 362202044Simp#define bus_space_write_4(t, h, o, v) __bs_ws(4,(t),(h),(o),(v)) 363202044Simp#define bus_space_write_8(t, h, o, v) __bs_ws(8,(t),(h),(o),(v)) 364178172Simp 365202044Simp#define bus_space_write_stream_1(t, h, o, v) __bs_ws_s(1,(t),(h),(o),(v)) 366202044Simp#define bus_space_write_stream_2(t, h, o, v) __bs_ws_s(2,(t),(h),(o),(v)) 367202044Simp#define bus_space_write_stream_4(t, h, o, v) __bs_ws_s(4,(t),(h),(o),(v)) 368202044Simp#define bus_space_write_stream_8(t, h, o, v) __bs_ws_s(8,(t),(h),(o),(v)) 369178172Simp 370178172Simp 371202044Simp/* 372202044Simp * Bus write multiple operations. 373202044Simp */ 374202044Simp#define bus_space_write_multi_1(t, h, o, a, c) \ 375202044Simp __bs_nonsingle(wm,1,(t),(h),(o),(a),(c)) 376202044Simp#define bus_space_write_multi_2(t, h, o, a, c) \ 377202044Simp __bs_nonsingle(wm,2,(t),(h),(o),(a),(c)) 378202044Simp#define bus_space_write_multi_4(t, h, o, a, c) \ 379202044Simp __bs_nonsingle(wm,4,(t),(h),(o),(a),(c)) 380202044Simp#define bus_space_write_multi_8(t, h, o, a, c) \ 381202044Simp __bs_nonsingle(wm,8,(t),(h),(o),(a),(c)) 382178172Simp 383202044Simp#define bus_space_write_multi_stream_1(t, h, o, a, c) \ 384202044Simp __bs_nonsingle_s(wm,1,(t),(h),(o),(a),(c)) 385202044Simp#define bus_space_write_multi_stream_2(t, h, o, a, c) \ 386202044Simp __bs_nonsingle_s(wm,2,(t),(h),(o),(a),(c)) 387202044Simp#define bus_space_write_multi_stream_4(t, h, o, a, c) \ 388202044Simp __bs_nonsingle_s(wm,4,(t),(h),(o),(a),(c)) 389202044Simp#define bus_space_write_multi_stream_8(t, h, o, a, c) \ 390202044Simp __bs_nonsingle_s(wm,8,(t),(h),(o),(a),(c)) 391178172Simp 392178172Simp 393178172Simp/* 394202044Simp * Bus write region operations. 395178172Simp */ 396202044Simp#define bus_space_write_region_1(t, h, o, a, c) \ 397202044Simp __bs_nonsingle(wr,1,(t),(h),(o),(a),(c)) 398202044Simp#define bus_space_write_region_2(t, h, o, a, c) \ 399202044Simp __bs_nonsingle(wr,2,(t),(h),(o),(a),(c)) 400202044Simp#define bus_space_write_region_4(t, h, o, a, c) \ 401202044Simp __bs_nonsingle(wr,4,(t),(h),(o),(a),(c)) 402202044Simp#define bus_space_write_region_8(t, h, o, a, c) \ 403202044Simp __bs_nonsingle(wr,8,(t),(h),(o),(a),(c)) 404178172Simp 405202044Simp#define bus_space_write_region_stream_1(t, h, o, a, c) \ 406202044Simp __bs_nonsingle_s(wr,1,(t),(h),(o),(a),(c)) 407202044Simp#define bus_space_write_region_stream_2(t, h, o, a, c) \ 408202044Simp __bs_nonsingle_s(wr,2,(t),(h),(o),(a),(c)) 409202044Simp#define bus_space_write_region_stream_4(t, h, o, a, c) \ 410202044Simp __bs_nonsingle_s(wr,4,(t),(h),(o),(a),(c)) 411202044Simp#define bus_space_write_region_stream_8(t, h, o, a, c) \ 412202044Simp __bs_nonsingle_s(wr,8,(t),(h),(o),(a),(c)) 413178172Simp 414178172Simp 415202044Simp/* 416202044Simp * Set multiple operations. 417202044Simp */ 418216143Sbrucec#define bus_space_set_multi_1(t, h, o, v, c) \ 419202044Simp __bs_set(sm,1,(t),(h),(o),(v),(c)) 420216143Sbrucec#define bus_space_set_multi_2(t, h, o, v, c) \ 421202044Simp __bs_set(sm,2,(t),(h),(o),(v),(c)) 422216143Sbrucec#define bus_space_set_multi_4(t, h, o, v, c) \ 423202044Simp __bs_set(sm,4,(t),(h),(o),(v),(c)) 424216143Sbrucec#define bus_space_set_multi_8(t, h, o, v, c) \ 425202044Simp __bs_set(sm,8,(t),(h),(o),(v),(c)) 426178172Simp 427178172Simp 428202044Simp/* 429202044Simp * Set region operations. 430202044Simp */ 431202044Simp#define bus_space_set_region_1(t, h, o, v, c) \ 432202044Simp __bs_set(sr,1,(t),(h),(o),(v),(c)) 433202044Simp#define bus_space_set_region_2(t, h, o, v, c) \ 434202044Simp __bs_set(sr,2,(t),(h),(o),(v),(c)) 435202044Simp#define bus_space_set_region_4(t, h, o, v, c) \ 436202044Simp __bs_set(sr,4,(t),(h),(o),(v),(c)) 437202044Simp#define bus_space_set_region_8(t, h, o, v, c) \ 438202044Simp __bs_set(sr,8,(t),(h),(o),(v),(c)) 439178172Simp 440178172Simp 441178172Simp/* 442202044Simp * Copy operations. 443178172Simp */ 444216143Sbrucec#define bus_space_copy_region_1(t, h1, o1, h2, o2, c) \ 445202044Simp __bs_copy(1, t, h1, o1, h2, o2, c) 446216143Sbrucec#define bus_space_copy_region_2(t, h1, o1, h2, o2, c) \ 447202044Simp __bs_copy(2, t, h1, o1, h2, o2, c) 448216143Sbrucec#define bus_space_copy_region_4(t, h1, o1, h2, o2, c) \ 449202044Simp __bs_copy(4, t, h1, o1, h2, o2, c) 450216143Sbrucec#define bus_space_copy_region_8(t, h1, o1, h2, o2, c) \ 451202044Simp __bs_copy(8, t, h1, o1, h2, o2, c) 452178172Simp 453178172Simp/* 454202044Simp * Macros to provide prototypes for all the functions used in the 455202044Simp * bus_space structure 456178172Simp */ 457178172Simp 458202044Simp#define bs_map_proto(f) \ 459202044Simpint __bs_c(f,_bs_map) (void *t, bus_addr_t addr, \ 460202044Simp bus_size_t size, int cacheable, bus_space_handle_t *bshp); 461178172Simp 462202044Simp#define bs_unmap_proto(f) \ 463202044Simpvoid __bs_c(f,_bs_unmap) (void *t, bus_space_handle_t bsh, \ 464202044Simp bus_size_t size); 465178172Simp 466202044Simp#define bs_subregion_proto(f) \ 467202044Simpint __bs_c(f,_bs_subregion) (void *t, bus_space_handle_t bsh, \ 468202044Simp bus_size_t offset, bus_size_t size, \ 469202044Simp bus_space_handle_t *nbshp); 470178172Simp 471202044Simp#define bs_alloc_proto(f) \ 472202044Simpint __bs_c(f,_bs_alloc) (void *t, bus_addr_t rstart, \ 473202044Simp bus_addr_t rend, bus_size_t size, bus_size_t align, \ 474202044Simp bus_size_t boundary, int cacheable, bus_addr_t *addrp, \ 475202044Simp bus_space_handle_t *bshp); 476178172Simp 477202044Simp#define bs_free_proto(f) \ 478202044Simpvoid __bs_c(f,_bs_free) (void *t, bus_space_handle_t bsh, \ 479202044Simp bus_size_t size); 480178172Simp 481202044Simp#define bs_barrier_proto(f) \ 482202044Simpvoid __bs_c(f,_bs_barrier) (void *t, bus_space_handle_t bsh, \ 483202044Simp bus_size_t offset, bus_size_t len, int flags); 484178172Simp 485202044Simp#define bs_r_1_proto(f) \ 486202044Simpu_int8_t __bs_c(f,_bs_r_1) (void *t, bus_space_handle_t bsh, \ 487202044Simp bus_size_t offset); 488178172Simp 489202044Simp#define bs_r_2_proto(f) \ 490202044Simpu_int16_t __bs_c(f,_bs_r_2) (void *t, bus_space_handle_t bsh, \ 491202044Simp bus_size_t offset); 492178172Simp 493202044Simp#define bs_r_4_proto(f) \ 494202044Simpu_int32_t __bs_c(f,_bs_r_4) (void *t, bus_space_handle_t bsh, \ 495202044Simp bus_size_t offset); 496178172Simp 497202044Simp#define bs_r_8_proto(f) \ 498202044Simpu_int64_t __bs_c(f,_bs_r_8) (void *t, bus_space_handle_t bsh, \ 499202044Simp bus_size_t offset); 500178172Simp 501202044Simp#define bs_r_1_s_proto(f) \ 502202044Simpu_int8_t __bs_c(f,_bs_r_1_s) (void *t, bus_space_handle_t bsh, \ 503202044Simp bus_size_t offset); 504178172Simp 505202044Simp#define bs_r_2_s_proto(f) \ 506202044Simpu_int16_t __bs_c(f,_bs_r_2_s) (void *t, bus_space_handle_t bsh, \ 507202044Simp bus_size_t offset); 508178172Simp 509202044Simp#define bs_r_4_s_proto(f) \ 510202044Simpu_int32_t __bs_c(f,_bs_r_4_s) (void *t, bus_space_handle_t bsh, \ 511202044Simp bus_size_t offset); 512178172Simp 513202044Simp#define bs_w_1_proto(f) \ 514202044Simpvoid __bs_c(f,_bs_w_1) (void *t, bus_space_handle_t bsh, \ 515202044Simp bus_size_t offset, u_int8_t value); 516178172Simp 517202044Simp#define bs_w_2_proto(f) \ 518202044Simpvoid __bs_c(f,_bs_w_2) (void *t, bus_space_handle_t bsh, \ 519202044Simp bus_size_t offset, u_int16_t value); 520178172Simp 521202044Simp#define bs_w_4_proto(f) \ 522202044Simpvoid __bs_c(f,_bs_w_4) (void *t, bus_space_handle_t bsh, \ 523202044Simp bus_size_t offset, u_int32_t value); 524178172Simp 525202044Simp#define bs_w_8_proto(f) \ 526202044Simpvoid __bs_c(f,_bs_w_8) (void *t, bus_space_handle_t bsh, \ 527202044Simp bus_size_t offset, u_int64_t value); 528178172Simp 529202044Simp#define bs_w_1_s_proto(f) \ 530202044Simpvoid __bs_c(f,_bs_w_1_s) (void *t, bus_space_handle_t bsh, \ 531202044Simp bus_size_t offset, u_int8_t value); 532178172Simp 533202044Simp#define bs_w_2_s_proto(f) \ 534202044Simpvoid __bs_c(f,_bs_w_2_s) (void *t, bus_space_handle_t bsh, \ 535202044Simp bus_size_t offset, u_int16_t value); 536178172Simp 537202044Simp#define bs_w_4_s_proto(f) \ 538202044Simpvoid __bs_c(f,_bs_w_4_s) (void *t, bus_space_handle_t bsh, \ 539202044Simp bus_size_t offset, u_int32_t value); 540178172Simp 541202044Simp#define bs_rm_1_proto(f) \ 542202044Simpvoid __bs_c(f,_bs_rm_1) (void *t, bus_space_handle_t bsh, \ 543202044Simp bus_size_t offset, u_int8_t *addr, bus_size_t count); 544178172Simp 545202044Simp#define bs_rm_2_proto(f) \ 546202044Simpvoid __bs_c(f,_bs_rm_2) (void *t, bus_space_handle_t bsh, \ 547202044Simp bus_size_t offset, u_int16_t *addr, bus_size_t count); 548178172Simp 549202044Simp#define bs_rm_4_proto(f) \ 550202044Simpvoid __bs_c(f,_bs_rm_4) (void *t, bus_space_handle_t bsh, \ 551202044Simp bus_size_t offset, u_int32_t *addr, bus_size_t count); 552178172Simp 553202044Simp#define bs_rm_8_proto(f) \ 554202044Simpvoid __bs_c(f,_bs_rm_8) (void *t, bus_space_handle_t bsh, \ 555202044Simp bus_size_t offset, u_int64_t *addr, bus_size_t count); 556178172Simp 557202044Simp#define bs_wm_1_proto(f) \ 558202044Simpvoid __bs_c(f,_bs_wm_1) (void *t, bus_space_handle_t bsh, \ 559202044Simp bus_size_t offset, const u_int8_t *addr, bus_size_t count); 560178172Simp 561202044Simp#define bs_wm_2_proto(f) \ 562202044Simpvoid __bs_c(f,_bs_wm_2) (void *t, bus_space_handle_t bsh, \ 563202044Simp bus_size_t offset, const u_int16_t *addr, bus_size_t count); 564178172Simp 565202044Simp#define bs_wm_4_proto(f) \ 566202044Simpvoid __bs_c(f,_bs_wm_4) (void *t, bus_space_handle_t bsh, \ 567202044Simp bus_size_t offset, const u_int32_t *addr, bus_size_t count); 568178172Simp 569202044Simp#define bs_wm_8_proto(f) \ 570202044Simpvoid __bs_c(f,_bs_wm_8) (void *t, bus_space_handle_t bsh, \ 571202044Simp bus_size_t offset, const u_int64_t *addr, bus_size_t count); 572178172Simp 573202044Simp#define bs_rr_1_proto(f) \ 574202044Simpvoid __bs_c(f, _bs_rr_1) (void *t, bus_space_handle_t bsh, \ 575202044Simp bus_size_t offset, u_int8_t *addr, bus_size_t count); 576178172Simp 577202044Simp#define bs_rr_2_proto(f) \ 578202044Simpvoid __bs_c(f, _bs_rr_2) (void *t, bus_space_handle_t bsh, \ 579202044Simp bus_size_t offset, u_int16_t *addr, bus_size_t count); 580178172Simp 581202044Simp#define bs_rr_4_proto(f) \ 582202044Simpvoid __bs_c(f, _bs_rr_4) (void *t, bus_space_handle_t bsh, \ 583202044Simp bus_size_t offset, u_int32_t *addr, bus_size_t count); 584178172Simp 585202044Simp#define bs_rr_8_proto(f) \ 586202044Simpvoid __bs_c(f, _bs_rr_8) (void *t, bus_space_handle_t bsh, \ 587202044Simp bus_size_t offset, u_int64_t *addr, bus_size_t count); 588178172Simp 589202044Simp#define bs_wr_1_proto(f) \ 590202044Simpvoid __bs_c(f, _bs_wr_1) (void *t, bus_space_handle_t bsh, \ 591202044Simp bus_size_t offset, const u_int8_t *addr, bus_size_t count); 592178172Simp 593202044Simp#define bs_wr_2_proto(f) \ 594202044Simpvoid __bs_c(f, _bs_wr_2) (void *t, bus_space_handle_t bsh, \ 595202044Simp bus_size_t offset, const u_int16_t *addr, bus_size_t count); 596178172Simp 597202044Simp#define bs_wr_4_proto(f) \ 598202044Simpvoid __bs_c(f, _bs_wr_4) (void *t, bus_space_handle_t bsh, \ 599202044Simp bus_size_t offset, const u_int32_t *addr, bus_size_t count); 600178172Simp 601202044Simp#define bs_wr_8_proto(f) \ 602202044Simpvoid __bs_c(f, _bs_wr_8) (void *t, bus_space_handle_t bsh, \ 603202044Simp bus_size_t offset, const u_int64_t *addr, bus_size_t count); 604178172Simp 605202044Simp#define bs_sm_1_proto(f) \ 606202044Simpvoid __bs_c(f,_bs_sm_1) (void *t, bus_space_handle_t bsh, \ 607202044Simp bus_size_t offset, u_int8_t value, bus_size_t count); 608178172Simp 609202044Simp#define bs_sm_2_proto(f) \ 610202044Simpvoid __bs_c(f,_bs_sm_2) (void *t, bus_space_handle_t bsh, \ 611202044Simp bus_size_t offset, u_int16_t value, bus_size_t count); 612178172Simp 613202044Simp#define bs_sm_4_proto(f) \ 614202044Simpvoid __bs_c(f,_bs_sm_4) (void *t, bus_space_handle_t bsh, \ 615202044Simp bus_size_t offset, u_int32_t value, bus_size_t count); 616178172Simp 617202044Simp#define bs_sm_8_proto(f) \ 618202044Simpvoid __bs_c(f,_bs_sm_8) (void *t, bus_space_handle_t bsh, \ 619202044Simp bus_size_t offset, u_int64_t value, bus_size_t count); 620178172Simp 621202044Simp#define bs_sr_1_proto(f) \ 622202044Simpvoid __bs_c(f,_bs_sr_1) (void *t, bus_space_handle_t bsh, \ 623202044Simp bus_size_t offset, u_int8_t value, bus_size_t count); 624178172Simp 625202044Simp#define bs_sr_2_proto(f) \ 626202044Simpvoid __bs_c(f,_bs_sr_2) (void *t, bus_space_handle_t bsh, \ 627202044Simp bus_size_t offset, u_int16_t value, bus_size_t count); 628178172Simp 629202044Simp#define bs_sr_4_proto(f) \ 630202044Simpvoid __bs_c(f,_bs_sr_4) (void *t, bus_space_handle_t bsh, \ 631202044Simp bus_size_t offset, u_int32_t value, bus_size_t count); 632178172Simp 633202044Simp#define bs_sr_8_proto(f) \ 634202044Simpvoid __bs_c(f,_bs_sr_8) (void *t, bus_space_handle_t bsh, \ 635202044Simp bus_size_t offset, u_int64_t value, bus_size_t count); 636178172Simp 637202044Simp#define bs_c_1_proto(f) \ 638202044Simpvoid __bs_c(f,_bs_c_1) (void *t, bus_space_handle_t bsh1, \ 639202044Simp bus_size_t offset1, bus_space_handle_t bsh2, \ 640202044Simp bus_size_t offset2, bus_size_t count); 641178172Simp 642202044Simp#define bs_c_2_proto(f) \ 643202044Simpvoid __bs_c(f,_bs_c_2) (void *t, bus_space_handle_t bsh1, \ 644202044Simp bus_size_t offset1, bus_space_handle_t bsh2, \ 645202044Simp bus_size_t offset2, bus_size_t count); 646178172Simp 647202044Simp#define bs_c_4_proto(f) \ 648202044Simpvoid __bs_c(f,_bs_c_4) (void *t, bus_space_handle_t bsh1, \ 649202044Simp bus_size_t offset1, bus_space_handle_t bsh2, \ 650202044Simp bus_size_t offset2, bus_size_t count); 651178172Simp 652202044Simp#define bs_c_8_proto(f) \ 653202044Simpvoid __bs_c(f,_bs_c_8) (void *t, bus_space_handle_t bsh1, \ 654202044Simp bus_size_t offset1, bus_space_handle_t bsh2, \ 655202044Simp bus_size_t offset2, bus_size_t count); 656178172Simp 657202044Simp#define DECLARE_BUS_SPACE_PROTOTYPES(f) \ 658202044Simp bs_map_proto(f); \ 659202044Simp bs_unmap_proto(f); \ 660202044Simp bs_subregion_proto(f); \ 661202044Simp bs_alloc_proto(f); \ 662202044Simp bs_free_proto(f); \ 663202044Simp bs_barrier_proto(f); \ 664202044Simp bs_r_1_proto(f); \ 665202044Simp bs_r_2_proto(f); \ 666202044Simp bs_r_4_proto(f); \ 667202044Simp bs_r_8_proto(f); \ 668202044Simp bs_r_1_s_proto(f); \ 669202044Simp bs_r_2_s_proto(f); \ 670202044Simp bs_r_4_s_proto(f); \ 671202044Simp bs_w_1_proto(f); \ 672202044Simp bs_w_2_proto(f); \ 673202044Simp bs_w_4_proto(f); \ 674202044Simp bs_w_8_proto(f); \ 675202044Simp bs_w_1_s_proto(f); \ 676202044Simp bs_w_2_s_proto(f); \ 677202044Simp bs_w_4_s_proto(f); \ 678202044Simp bs_rm_1_proto(f); \ 679202044Simp bs_rm_2_proto(f); \ 680202044Simp bs_rm_4_proto(f); \ 681202044Simp bs_rm_8_proto(f); \ 682202044Simp bs_wm_1_proto(f); \ 683202044Simp bs_wm_2_proto(f); \ 684202044Simp bs_wm_4_proto(f); \ 685202044Simp bs_wm_8_proto(f); \ 686202044Simp bs_rr_1_proto(f); \ 687202044Simp bs_rr_2_proto(f); \ 688202044Simp bs_rr_4_proto(f); \ 689202044Simp bs_rr_8_proto(f); \ 690202044Simp bs_wr_1_proto(f); \ 691202044Simp bs_wr_2_proto(f); \ 692202044Simp bs_wr_4_proto(f); \ 693202044Simp bs_wr_8_proto(f); \ 694202044Simp bs_sm_1_proto(f); \ 695202044Simp bs_sm_2_proto(f); \ 696202044Simp bs_sm_4_proto(f); \ 697202044Simp bs_sm_8_proto(f); \ 698202044Simp bs_sr_1_proto(f); \ 699202044Simp bs_sr_2_proto(f); \ 700202044Simp bs_sr_4_proto(f); \ 701202044Simp bs_sr_8_proto(f); \ 702202044Simp bs_c_1_proto(f); \ 703202044Simp bs_c_2_proto(f); \ 704202044Simp bs_c_4_proto(f); \ 705202044Simp bs_c_8_proto(f); 706178172Simp 707202044Simp#define BUS_SPACE_ALIGNED_POINTER(p, t) ALIGNED_POINTER(p, t) 708178172Simp 709202044Simp#define BUS_SPACE_MAXADDR_24BIT 0xFFFFFF 710202044Simp#define BUS_SPACE_MAXADDR_32BIT 0xFFFFFFFF 711202044Simp#define BUS_SPACE_MAXADDR 0xFFFFFFFF 712202044Simp#define BUS_SPACE_MAXSIZE_24BIT 0xFFFFFF 713202044Simp#define BUS_SPACE_MAXSIZE_32BIT 0xFFFFFFFF 714202044Simp#define BUS_SPACE_MAXSIZE 0xFFFFFFFF 715178172Simp 716206404Simp#define BUS_SPACE_UNRESTRICTED (~0) 717206404Simp 718202044Simp/* 719202044Simp * declare generic bus space, it suits all needs in 720202044Simp */ 721202044SimpDECLARE_BUS_SPACE_PROTOTYPES(generic); 722202044Simpextern bus_space_tag_t mips_bus_space_generic; 723202044Simp/* Special bus space for RMI processors */ 724224115Sjchandra#if defined(CPU_RMI) || defined (CPU_NLM) 725202044Simpextern bus_space_tag_t rmi_bus_space; 726204577Srrsextern bus_space_tag_t rmi_pci_bus_space; 727226501Sjchandraextern bus_space_tag_t rmi_uart_bus_space; 728178172Simp#endif 729178172Simp 730178172Simp#include <machine/bus_dma.h> 731178172Simp 732202044Simp#endif /* _MACHINE_BUS_H_ */ 733