bus.h revision 157224
180708Sjake/*- 286228Stmm * Copyright (c) 1996, 1997, 1998, 2001 The NetBSD Foundation, Inc. 380708Sjake * All rights reserved. 480708Sjake * 586228Stmm * This code is derived from software contributed to The NetBSD Foundation 686228Stmm * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility, 786228Stmm * NASA Ames Research Center. 886228Stmm * 980708Sjake * Redistribution and use in source and binary forms, with or without 1080708Sjake * modification, are permitted provided that the following conditions 1180708Sjake * are met: 1280708Sjake * 1. Redistributions of source code must retain the above copyright 1380708Sjake * notice, this list of conditions and the following disclaimer. 1480708Sjake * 2. Redistributions in binary form must reproduce the above copyright 1580708Sjake * notice, this list of conditions and the following disclaimer in the 1680708Sjake * documentation and/or other materials provided with the distribution. 1786228Stmm * 3. All advertising materials mentioning features or use of this software 1886228Stmm * must display the following acknowledgement: 1986228Stmm * This product includes software developed by the NetBSD 2086228Stmm * Foundation, Inc. and its contributors. 2186228Stmm * 4. Neither the name of The NetBSD Foundation nor the names of its 2286228Stmm * contributors may be used to endorse or promote products derived 2386228Stmm * from this software without specific prior written permission. 2480708Sjake * 2586228Stmm * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 2686228Stmm * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 2786228Stmm * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 2886228Stmm * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 2986228Stmm * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 3086228Stmm * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 3186228Stmm * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 3286228Stmm * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 3386228Stmm * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 3486228Stmm * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 3586228Stmm * POSSIBILITY OF SUCH DAMAGE. 3686228Stmm */ 3786228Stmm/* 3886228Stmm * Copyright (c) 1997-1999 Eduardo E. Horvath. All rights reserved. 3986228Stmm * Copyright (c) 1996 Charles M. Hannum. All rights reserved. 4086228Stmm * Copyright (c) 1996 Christopher G. Demetriou. All rights reserved. 4180708Sjake * 4286228Stmm * Redistribution and use in source and binary forms, with or without 4386228Stmm * modification, are permitted provided that the following conditions 4486228Stmm * are met: 4586228Stmm * 1. Redistributions of source code must retain the above copyright 4686228Stmm * notice, this list of conditions and the following disclaimer. 4786228Stmm * 2. Redistributions in binary form must reproduce the above copyright 4886228Stmm * notice, this list of conditions and the following disclaimer in the 4986228Stmm * documentation and/or other materials provided with the distribution. 5086228Stmm * 3. All advertising materials mentioning features or use of this software 5186228Stmm * must display the following acknowledgement: 5286228Stmm * This product includes software developed by Christopher G. Demetriou 5386228Stmm * for the NetBSD Project. 5486228Stmm * 4. The name of the author may not be used to endorse or promote products 5586228Stmm * derived from this software without specific prior written permission 5686228Stmm * 5786228Stmm * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 5886228Stmm * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 5986228Stmm * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 6086228Stmm * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 6186228Stmm * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 6286228Stmm * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 6386228Stmm * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 6486228Stmm * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 6586228Stmm * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 6686228Stmm * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 6786228Stmm * 6886228Stmm * from: NetBSD: bus.h,v 1.28 2001/07/19 15:32:19 thorpej Exp 6986228Stmm * and 7086228Stmm * from: FreeBSD: src/sys/alpha/include/bus.h,v 1.9 2001/01/09 7186228Stmm * 7280708Sjake * $FreeBSD: head/sys/sparc64/include/bus.h 157224 2006-03-28 19:19:37Z marius $ 7380708Sjake */ 7480708Sjake 7580708Sjake#ifndef _MACHINE_BUS_H_ 7680708Sjake#define _MACHINE_BUS_H_ 7780708Sjake 7890615Stmm#ifdef BUS_SPACE_DEBUG 7990615Stmm#include <sys/ktr.h> 8090615Stmm#endif 8190615Stmm 82145253Simp#include <machine/_bus.h> 8386228Stmm#include <machine/cpufunc.h> 8490615Stmm#include <machine/upa.h> 8580708Sjake 8686228Stmm/* 8786228Stmm * UPA and SBUS spaces are non-cached and big endian 8886228Stmm * (except for RAM and PROM) 8986228Stmm * 9086228Stmm * PCI spaces are non-cached and little endian 9186228Stmm */ 9286228Stmm#define UPA_BUS_SPACE 0 9386228Stmm#define SBUS_BUS_SPACE 1 9486228Stmm#define PCI_CONFIG_BUS_SPACE 2 9586228Stmm#define PCI_IO_BUS_SPACE 3 9686228Stmm#define PCI_MEMORY_BUS_SPACE 4 9786228Stmm#define LAST_BUS_SPACE 5 9886228Stmm 9986228Stmmextern int bus_type_asi[]; 10086228Stmmextern int bus_stream_asi[]; 10186228Stmm 10286228Stmm#define __BUS_SPACE_HAS_STREAM_METHODS 1 10386228Stmm 10486228Stmm#define BUS_SPACE_MAXSIZE_24BIT 0xFFFFFF 10586228Stmm#define BUS_SPACE_MAXSIZE_32BIT 0xFFFFFFFF 106111524Smux#define BUS_SPACE_MAXSIZE 0xFFFFFFFFFFFFFFFF 10786228Stmm#define BUS_SPACE_MAXADDR_24BIT 0xFFFFFF 10886228Stmm#define BUS_SPACE_MAXADDR_32BIT 0xFFFFFFFF 10986228Stmm#define BUS_SPACE_MAXADDR 0xFFFFFFFF 11086228Stmm 111140982Sru#define BUS_SPACE_UNRESTRICTED (~0) 11286228Stmm 11386228Stmm/* 11486228Stmm * Access methods for bus resources and address space. 11586228Stmm */ 11686228Stmmtypedef struct bus_space_tag *bus_space_tag_t; 11786228Stmm 11886228Stmmstruct bus_space_tag { 119108815Stmm void *bst_cookie; 120108815Stmm bus_space_tag_t bst_parent; 121108815Stmm int bst_type; 12286228Stmm 123108815Stmm void (*bst_bus_barrier)(bus_space_tag_t, bus_space_handle_t, 12493052Stmm bus_size_t, bus_size_t, int); 12586228Stmm}; 12686228Stmm 12786228Stmm/* 12886228Stmm * Bus space function prototypes. 12986228Stmm */ 13093052Stmmstatic void bus_space_barrier(bus_space_tag_t, bus_space_handle_t, bus_size_t, 13193052Stmm bus_size_t, int); 132108917Sjakestatic int bus_space_subregion(bus_space_tag_t, bus_space_handle_t, 133108917Sjake bus_size_t, bus_size_t, bus_space_handle_t *); 134120375Snyan 135111347Sobrien/* 136120375Snyan * Map a region of device bus space into CPU virtual address space. 137120375Snyan */ 138120375Snyan 139120375Snyanstatic __inline int bus_space_map(bus_space_tag_t t, bus_addr_t addr, 140120375Snyan bus_size_t size, int flags, 141120375Snyan bus_space_handle_t *bshp); 142120375Snyan 143120375Snyanstatic __inline int 144120375Snyanbus_space_map(bus_space_tag_t t __unused, bus_addr_t addr, 145120375Snyan bus_size_t size __unused, int flags __unused, 146120375Snyan bus_space_handle_t *bshp) 147120375Snyan{ 148120375Snyan 149120375Snyan *bshp = addr; 150120375Snyan return (0); 151120375Snyan} 152120375Snyan 153120375Snyan/* 154111347Sobrien * Unmap a region of device bus space. 155111347Sobrien */ 156111347Sobrienstatic __inline void bus_space_unmap(bus_space_tag_t t, bus_space_handle_t bsh, 157111347Sobrien bus_size_t size); 15886228Stmm 159111347Sobrienstatic __inline void 160111347Sobrienbus_space_unmap(bus_space_tag_t t __unused, bus_space_handle_t bsh __unused, 161111347Sobrien bus_size_t size __unused) 162111347Sobrien{ 163111347Sobrien} 164111347Sobrien 16586228Stmm/* This macro finds the first "upstream" implementation of method `f' */ 16693052Stmm#define _BS_CALL(t,f) \ 16793052Stmm while (t->f == NULL) \ 168108815Stmm t = t->bst_parent; \ 16986228Stmm return (*(t)->f) 17086228Stmm 17193052Stmmstatic __inline void 17293052Stmmbus_space_barrier(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 17393052Stmm bus_size_t s, int f) 17486228Stmm{ 175108815Stmm _BS_CALL(t, bst_bus_barrier)(t, h, o, s, f); 17686228Stmm} 17786228Stmm 178108917Sjakestatic __inline int 179108917Sjakebus_space_subregion(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 180108917Sjake bus_size_t s, bus_space_handle_t *hp) 181108917Sjake{ 182108917Sjake *hp = h + o; 183108917Sjake return (0); 184108917Sjake} 185108917Sjake 18686228Stmm/* flags for bus space map functions */ 18786228Stmm#define BUS_SPACE_MAP_CACHEABLE 0x0001 18886228Stmm#define BUS_SPACE_MAP_LINEAR 0x0002 18986228Stmm#define BUS_SPACE_MAP_READONLY 0x0004 19086228Stmm#define BUS_SPACE_MAP_PREFETCHABLE 0x0008 19186228Stmm/* placeholders for bus functions... */ 19286228Stmm#define BUS_SPACE_MAP_BUS1 0x0100 19386228Stmm#define BUS_SPACE_MAP_BUS2 0x0200 19486228Stmm#define BUS_SPACE_MAP_BUS3 0x0400 19586228Stmm#define BUS_SPACE_MAP_BUS4 0x0800 19686228Stmm 19786228Stmm/* flags for bus_space_barrier() */ 19886228Stmm#define BUS_SPACE_BARRIER_READ 0x01 /* force read barrier */ 19986228Stmm#define BUS_SPACE_BARRIER_WRITE 0x02 /* force write barrier */ 20086228Stmm 20190615Stmm#ifdef BUS_SPACE_DEBUG 20290615Stmm#define KTR_BUS KTR_CT2 20390615Stmm#define BUS_HANDLE_MIN UPA_MEMSTART 20490615Stmm#define __BUS_DEBUG_ACCESS(h, o, desc, sz) do { \ 20590615Stmm CTR4(KTR_BUS, "bus space: %s %d: handle %#lx, offset %#lx", \ 20690615Stmm (desc), (sz), (h), (o)); \ 20790615Stmm if ((h) + (o) < BUS_HANDLE_MIN) \ 20890615Stmm panic("bus space access at %#lx out of range", \ 20990615Stmm (h) + (o)); \ 21090615Stmm} while (0) 21190615Stmm#else 21290615Stmm#define __BUS_DEBUG_ACCESS(h, o, desc, sz) 21390615Stmm#endif 21490615Stmm 215104304Sjakestatic __inline uint8_t 216104304Sjakebus_space_read_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o) 217104304Sjake{ 21886228Stmm 219104304Sjake __BUS_DEBUG_ACCESS(h, o, "read", 1); 220108815Stmm return (lduba_nc((caddr_t)(h + o), bus_type_asi[t->bst_type])); 221104304Sjake} 22286228Stmm 223104304Sjakestatic __inline uint16_t 224104304Sjakebus_space_read_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o) 225104304Sjake{ 22686228Stmm 227104304Sjake __BUS_DEBUG_ACCESS(h, o, "read", 2); 228108815Stmm return (lduha_nc((caddr_t)(h + o), bus_type_asi[t->bst_type])); 229104304Sjake} 23086228Stmm 231104304Sjakestatic __inline uint32_t 232104304Sjakebus_space_read_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o) 233104304Sjake{ 23486228Stmm 235104304Sjake __BUS_DEBUG_ACCESS(h, o, "read", 4); 236108815Stmm return (lduwa_nc((caddr_t)(h + o), bus_type_asi[t->bst_type])); 237104304Sjake} 23886228Stmm 239104304Sjakestatic __inline uint64_t 240104304Sjakebus_space_read_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o) 241104304Sjake{ 24286228Stmm 243104304Sjake __BUS_DEBUG_ACCESS(h, o, "read", 8); 244108815Stmm return (ldxa_nc((caddr_t)(h + o), bus_type_asi[t->bst_type])); 245104304Sjake} 24686228Stmm 247104304Sjakestatic __inline void 248104304Sjakebus_space_read_multi_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 249104304Sjake uint8_t *a, size_t c) 250104304Sjake{ 25186228Stmm 252104304Sjake while (c-- > 0) 253104304Sjake *a++ = bus_space_read_1(t, h, o); 254104304Sjake} 25586228Stmm 256104304Sjakestatic __inline void 257104304Sjakebus_space_read_multi_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 258104304Sjake uint16_t *a, size_t c) 259104304Sjake{ 26086228Stmm 261104304Sjake while (c-- > 0) 262104304Sjake *a++ = bus_space_read_2(t, h, o); 263104304Sjake} 26486228Stmm 265104304Sjakestatic __inline void 266104304Sjakebus_space_read_multi_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 267104304Sjake uint32_t *a, size_t c) 268104304Sjake{ 26986228Stmm 270104304Sjake while (c-- > 0) 271104304Sjake *a++ = bus_space_read_4(t, h, o); 272104304Sjake} 27386228Stmm 274104304Sjakestatic __inline void 275104304Sjakebus_space_read_multi_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 276104304Sjake uint64_t *a, size_t c) 277104304Sjake{ 27886228Stmm 279104304Sjake while (c-- > 0) 280104304Sjake *a++ = bus_space_read_8(t, h, o); 281104304Sjake} 28286228Stmm 283104304Sjakestatic __inline void 284104304Sjakebus_space_write_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 285104304Sjake uint8_t v) 286104304Sjake{ 28786228Stmm 288104304Sjake __BUS_DEBUG_ACCESS(h, o, "write", 1); 289108815Stmm stba_nc((caddr_t)(h + o), bus_type_asi[t->bst_type], v); 290104304Sjake} 29186228Stmm 292104304Sjakestatic __inline void 293104304Sjakebus_space_write_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 294104304Sjake uint16_t v) 295104304Sjake{ 29686228Stmm 297104304Sjake __BUS_DEBUG_ACCESS(h, o, "write", 2); 298108815Stmm stha_nc((caddr_t)(h + o), bus_type_asi[t->bst_type], v); 299104304Sjake} 30086228Stmm 30193052Stmmstatic __inline void 302104304Sjakebus_space_write_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 303104304Sjake uint32_t v) 304104304Sjake{ 305104304Sjake 306104304Sjake __BUS_DEBUG_ACCESS(h, o, "write", 4); 307108815Stmm stwa_nc((caddr_t)(h + o), bus_type_asi[t->bst_type], v); 308104304Sjake} 309104304Sjake 310104304Sjakestatic __inline void 311104304Sjakebus_space_write_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 312104304Sjake uint64_t v) 313104304Sjake{ 314104304Sjake 315104304Sjake __BUS_DEBUG_ACCESS(h, o, "write", 8); 316108815Stmm stxa_nc((caddr_t)(h + o), bus_type_asi[t->bst_type], v); 317104304Sjake} 318104304Sjake 319104304Sjakestatic __inline void 320104304Sjakebus_space_write_multi_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 321157224Smarius const uint8_t *a, size_t c) 322104304Sjake{ 323104304Sjake 324104304Sjake while (c-- > 0) 325104304Sjake bus_space_write_1(t, h, o, *a++); 326104304Sjake} 327104304Sjake 328104304Sjakestatic __inline void 329104304Sjakebus_space_write_multi_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 330157224Smarius const uint16_t *a, size_t c) 331104304Sjake{ 332104304Sjake 333104304Sjake while (c-- > 0) 334104304Sjake bus_space_write_2(t, h, o, *a++); 335104304Sjake} 336104304Sjake 337104304Sjakestatic __inline void 338104304Sjakebus_space_write_multi_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 339157224Smarius const uint32_t *a, size_t c) 340104304Sjake{ 341104304Sjake 342104304Sjake while (c-- > 0) 343104304Sjake bus_space_write_4(t, h, o, *a++); 344104304Sjake} 345104304Sjake 346104304Sjakestatic __inline void 347104304Sjakebus_space_write_multi_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 348157224Smarius const uint64_t *a, size_t c) 349104304Sjake{ 350104304Sjake 351104304Sjake while (c-- > 0) 352104304Sjake bus_space_write_8(t, h, o, *a++); 353104304Sjake} 354104304Sjake 355104304Sjakestatic __inline void 356104304Sjakebus_space_set_multi_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 357104304Sjake uint8_t v, size_t c) 358104304Sjake{ 359104304Sjake 360104304Sjake while (c-- > 0) 361104304Sjake bus_space_write_1(t, h, o, v); 362104304Sjake} 363104304Sjake 364104304Sjakestatic __inline void 365104304Sjakebus_space_set_multi_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 366104304Sjake uint16_t v, size_t c) 367104304Sjake{ 368104304Sjake 369104304Sjake while (c-- > 0) 370104304Sjake bus_space_write_2(t, h, o, v); 371104304Sjake} 372104304Sjake 373104304Sjakestatic __inline void 374104304Sjakebus_space_set_multi_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 375104304Sjake uint32_t v, size_t c) 376104304Sjake{ 377104304Sjake 378104304Sjake while (c-- > 0) 379104304Sjake bus_space_write_4(t, h, o, v); 380104304Sjake} 381104304Sjake 382104304Sjakestatic __inline void 383104304Sjakebus_space_set_multi_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 384104304Sjake uint64_t v, size_t c) 385104304Sjake{ 386104304Sjake 387104304Sjake while (c-- > 0) 388104304Sjake bus_space_write_8(t, h, o, v); 389104304Sjake} 390104304Sjake 391104304Sjakestatic __inline void 39293052Stmmbus_space_read_region_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 39393052Stmm u_int8_t *a, bus_size_t c) 39486228Stmm{ 39586228Stmm for (; c; a++, c--, o++) 39686228Stmm *a = bus_space_read_1(t, h, o); 39786228Stmm} 39886228Stmm 39993052Stmmstatic __inline void 40093052Stmmbus_space_read_region_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 40193052Stmm u_int16_t *a, bus_size_t c) 40286228Stmm{ 40386228Stmm for (; c; a++, c--, o+=2) 40486228Stmm *a = bus_space_read_2(t, h, o); 40586228Stmm} 40686228Stmm 40793052Stmmstatic __inline void 40893052Stmmbus_space_read_region_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 40993052Stmm u_int32_t *a, bus_size_t c) 41086228Stmm{ 41186228Stmm for (; c; a++, c--, o+=4) 41286228Stmm *a = bus_space_read_4(t, h, o); 41386228Stmm} 41486228Stmm 41593052Stmmstatic __inline void 41693052Stmmbus_space_read_region_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 41793052Stmm u_int64_t *a, bus_size_t c) 41886228Stmm{ 41986228Stmm for (; c; a++, c--, o+=8) 42086228Stmm *a = bus_space_read_8(t, h, o); 42186228Stmm} 42286228Stmm 42393052Stmmstatic __inline void 42493052Stmmbus_space_write_region_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 42593052Stmm const u_int8_t *a, bus_size_t c) 42686228Stmm{ 42786228Stmm for (; c; a++, c--, o++) 42886228Stmm bus_space_write_1(t, h, o, *a); 42986228Stmm} 43086228Stmm 43193052Stmmstatic __inline void 43293052Stmmbus_space_write_region_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 43393052Stmm const u_int16_t *a, bus_size_t c) 43486228Stmm{ 43586228Stmm for (; c; a++, c--, o+=2) 43686228Stmm bus_space_write_2(t, h, o, *a); 43786228Stmm} 43886228Stmm 43993052Stmmstatic __inline void 44093052Stmmbus_space_write_region_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 44193052Stmm const u_int32_t *a, bus_size_t c) 44286228Stmm{ 44386228Stmm for (; c; a++, c--, o+=4) 44486228Stmm bus_space_write_4(t, h, o, *a); 44586228Stmm} 44686228Stmm 44793052Stmmstatic __inline void 44893052Stmmbus_space_write_region_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 44993052Stmm const u_int64_t *a, bus_size_t c) 45086228Stmm{ 45186228Stmm for (; c; a++, c--, o+=8) 45286228Stmm bus_space_write_8(t, h, o, *a); 45386228Stmm} 45486228Stmm 45593052Stmmstatic __inline void 45693052Stmmbus_space_set_region_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 45793052Stmm const u_int8_t v, bus_size_t c) 45886228Stmm{ 45986228Stmm for (; c; c--, o++) 46086228Stmm bus_space_write_1(t, h, o, v); 46186228Stmm} 46286228Stmm 46393052Stmmstatic __inline void 46493052Stmmbus_space_set_region_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 46593052Stmm const u_int16_t v, bus_size_t c) 46686228Stmm{ 46786228Stmm for (; c; c--, o+=2) 46886228Stmm bus_space_write_2(t, h, o, v); 46986228Stmm} 47086228Stmm 47193052Stmmstatic __inline void 47293052Stmmbus_space_set_region_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 47393052Stmm const u_int32_t v, bus_size_t c) 47486228Stmm{ 47586228Stmm for (; c; c--, o+=4) 47686228Stmm bus_space_write_4(t, h, o, v); 47786228Stmm} 47886228Stmm 47993052Stmmstatic __inline void 48093052Stmmbus_space_set_region_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 48193052Stmm const u_int64_t v, bus_size_t c) 48286228Stmm{ 48386228Stmm for (; c; c--, o+=8) 48486228Stmm bus_space_write_8(t, h, o, v); 48586228Stmm} 48686228Stmm 48793052Stmmstatic __inline void 48893052Stmmbus_space_copy_region_1(bus_space_tag_t t, bus_space_handle_t h1, 48993052Stmm bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c) 49086228Stmm{ 49186228Stmm for (; c; c--, o1++, o2++) 49286228Stmm bus_space_write_1(t, h1, o1, bus_space_read_1(t, h2, o2)); 49386228Stmm} 49486228Stmm 49593052Stmmstatic __inline void 49693052Stmmbus_space_copy_region_2(bus_space_tag_t t, bus_space_handle_t h1, 49793052Stmm bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c) 49886228Stmm{ 49986228Stmm for (; c; c--, o1+=2, o2+=2) 50086228Stmm bus_space_write_2(t, h1, o1, bus_space_read_2(t, h2, o2)); 50186228Stmm} 50286228Stmm 50393052Stmmstatic __inline void 50493052Stmmbus_space_copy_region_4(bus_space_tag_t t, bus_space_handle_t h1, 50593052Stmm bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c) 50686228Stmm{ 50786228Stmm for (; c; c--, o1+=4, o2+=4) 50886228Stmm bus_space_write_4(t, h1, o1, bus_space_read_4(t, h2, o2)); 50986228Stmm} 51086228Stmm 51193052Stmmstatic __inline void 51293052Stmmbus_space_copy_region_8(bus_space_tag_t t, bus_space_handle_t h1, 51393052Stmm bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c) 51486228Stmm{ 51586228Stmm for (; c; c--, o1+=8, o2+=8) 51686228Stmm bus_space_write_8(t, h1, o1, bus_space_read_8(t, h2, o2)); 51786228Stmm} 51886228Stmm 519104304Sjakestatic __inline uint8_t 520104304Sjakebus_space_read_stream_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o) 521104304Sjake{ 52286228Stmm 523104304Sjake __BUS_DEBUG_ACCESS(h, o, "read stream", 1); 524108815Stmm return (lduba_nc((caddr_t)(h + o), bus_stream_asi[t->bst_type])); 525104304Sjake} 52686228Stmm 527104304Sjakestatic __inline uint16_t 528104304Sjakebus_space_read_stream_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o) 529104304Sjake{ 53086228Stmm 531104304Sjake __BUS_DEBUG_ACCESS(h, o, "read stream", 2); 532108815Stmm return (lduha_nc((caddr_t)(h + o), bus_stream_asi[t->bst_type])); 533104304Sjake} 53486228Stmm 535104304Sjakestatic __inline uint32_t 536104304Sjakebus_space_read_stream_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o) 537104304Sjake{ 53886228Stmm 539104304Sjake __BUS_DEBUG_ACCESS(h, o, "read stream", 4); 540108815Stmm return (lduwa_nc((caddr_t)(h + o), bus_stream_asi[t->bst_type])); 541104304Sjake} 54286228Stmm 543104304Sjakestatic __inline uint64_t 544104304Sjakebus_space_read_stream_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o) 545104304Sjake{ 54686228Stmm 547104304Sjake __BUS_DEBUG_ACCESS(h, o, "read stream", 8); 548108815Stmm return (ldxa_nc((caddr_t)(h + o), bus_stream_asi[t->bst_type])); 549104304Sjake} 55086228Stmm 551104304Sjakestatic __inline void 552104304Sjakebus_space_read_multi_stream_1(bus_space_tag_t t, bus_space_handle_t h, 553104304Sjake bus_size_t o, uint8_t *a, size_t c) 554104304Sjake{ 55586228Stmm 556104304Sjake while (c-- > 0) 557104304Sjake *a++ = bus_space_read_stream_1(t, h, o); 558104304Sjake} 55986228Stmm 560104304Sjakestatic __inline void 561104304Sjakebus_space_read_multi_stream_2(bus_space_tag_t t, bus_space_handle_t h, 562104304Sjake bus_size_t o, uint16_t *a, size_t c) 563104304Sjake{ 56486228Stmm 565104304Sjake while (c-- > 0) 566104304Sjake *a++ = bus_space_read_stream_2(t, h, o); 567104304Sjake} 56886228Stmm 569104304Sjakestatic __inline void 570104304Sjakebus_space_read_multi_stream_4(bus_space_tag_t t, bus_space_handle_t h, 571104304Sjake bus_size_t o, uint32_t *a, size_t c) 572104304Sjake{ 57386228Stmm 574104304Sjake while (c-- > 0) 575104304Sjake *a++ = bus_space_read_stream_4(t, h, o); 576104304Sjake} 57786228Stmm 578104304Sjakestatic __inline void 579104304Sjakebus_space_read_multi_stream_8(bus_space_tag_t t, bus_space_handle_t h, 580104304Sjake bus_size_t o, uint64_t *a, size_t c) 581104304Sjake{ 58286228Stmm 583104304Sjake while (c-- > 0) 584104304Sjake *a++ = bus_space_read_stream_8(t, h, o); 585104304Sjake} 58686228Stmm 587104304Sjakestatic __inline void 588104304Sjakebus_space_write_stream_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 589104304Sjake uint8_t v) 590104304Sjake{ 59186228Stmm 592104304Sjake __BUS_DEBUG_ACCESS(h, o, "write stream", 1); 593108815Stmm stba_nc((caddr_t)(h + o), bus_stream_asi[t->bst_type], v); 594104304Sjake} 59586228Stmm 596104304Sjakestatic __inline void 597104304Sjakebus_space_write_stream_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 598104304Sjake uint16_t v) 599104304Sjake{ 60086228Stmm 601104304Sjake __BUS_DEBUG_ACCESS(h, o, "write stream", 2); 602108815Stmm stha_nc((caddr_t)(h + o), bus_stream_asi[t->bst_type], v); 603104304Sjake} 60486228Stmm 60593052Stmmstatic __inline void 606104304Sjakebus_space_write_stream_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 607104304Sjake uint32_t v) 608104304Sjake{ 609104304Sjake 610104304Sjake __BUS_DEBUG_ACCESS(h, o, "write stream", 4); 611108815Stmm stwa_nc((caddr_t)(h + o), bus_stream_asi[t->bst_type], v); 612104304Sjake} 613104304Sjake 614104304Sjakestatic __inline void 615104304Sjakebus_space_write_stream_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 616104304Sjake uint64_t v) 617104304Sjake{ 618104304Sjake 619104304Sjake __BUS_DEBUG_ACCESS(h, o, "write stream", 8); 620108815Stmm stxa_nc((caddr_t)(h + o), bus_stream_asi[t->bst_type], v); 621104304Sjake} 622104304Sjake 623104304Sjakestatic __inline void 624104304Sjakebus_space_write_multi_stream_1(bus_space_tag_t t, bus_space_handle_t h, 625111383Sobrien bus_size_t o, const uint8_t *a, size_t c) 626104304Sjake{ 627104304Sjake 628104304Sjake while (c-- > 0) 629104304Sjake bus_space_write_stream_1(t, h, o, *a++); 630104304Sjake} 631104304Sjake 632104304Sjakestatic __inline void 633104304Sjakebus_space_write_multi_stream_2(bus_space_tag_t t, bus_space_handle_t h, 634111353Sobrien bus_size_t o, const uint16_t *a, size_t c) 635104304Sjake{ 636104304Sjake 637104304Sjake while (c-- > 0) 638104304Sjake bus_space_write_stream_2(t, h, o, *a++); 639104304Sjake} 640104304Sjake 641104304Sjakestatic __inline void 642104304Sjakebus_space_write_multi_stream_4(bus_space_tag_t t, bus_space_handle_t h, 643111383Sobrien bus_size_t o, const uint32_t *a, size_t c) 644104304Sjake{ 645104304Sjake 646104304Sjake while (c-- > 0) 647104304Sjake bus_space_write_stream_4(t, h, o, *a++); 648104304Sjake} 649104304Sjake 650104304Sjakestatic __inline void 651104304Sjakebus_space_write_multi_stream_8(bus_space_tag_t t, bus_space_handle_t h, 652111383Sobrien bus_size_t o, const uint64_t *a, size_t c) 653104304Sjake{ 654104304Sjake 655104304Sjake while (c-- > 0) 656104304Sjake bus_space_write_stream_8(t, h, o, *a++); 657104304Sjake} 658104304Sjake 659104304Sjakestatic __inline void 660104304Sjakebus_space_set_multi_stream_1(bus_space_tag_t t, bus_space_handle_t h, 661104304Sjake bus_size_t o, uint8_t v, size_t c) 662104304Sjake{ 663104304Sjake 664104304Sjake while (c-- > 0) 665104304Sjake bus_space_write_stream_1(t, h, o, v); 666104304Sjake} 667104304Sjake 668104304Sjakestatic __inline void 669104304Sjakebus_space_set_multi_stream_2(bus_space_tag_t t, bus_space_handle_t h, 670104304Sjake bus_size_t o, uint16_t v, size_t c) 671104304Sjake{ 672104304Sjake 673104304Sjake while (c-- > 0) 674104304Sjake bus_space_write_stream_2(t, h, o, v); 675104304Sjake} 676104304Sjake 677104304Sjakestatic __inline void 678104304Sjakebus_space_set_multi_stream_4(bus_space_tag_t t, bus_space_handle_t h, 679104304Sjake bus_size_t o, uint32_t v, size_t c) 680104304Sjake{ 681104304Sjake 682104304Sjake while (c-- > 0) 683104304Sjake bus_space_write_stream_4(t, h, o, v); 684104304Sjake} 685104304Sjake 686104304Sjakestatic __inline void 687104304Sjakebus_space_set_multi_stream_8(bus_space_tag_t t, bus_space_handle_t h, 688104304Sjake bus_size_t o, uint64_t v, size_t c) 689104304Sjake{ 690104304Sjake 691104304Sjake while (c-- > 0) 692104304Sjake bus_space_write_stream_8(t, h, o, v); 693104304Sjake} 694104304Sjake 695104304Sjakestatic __inline void 69693052Stmmbus_space_read_region_stream_1(bus_space_tag_t t, bus_space_handle_t h, 69793052Stmm bus_size_t o, u_int8_t *a, bus_size_t c) 69886228Stmm{ 69986228Stmm for (; c; a++, c--, o++) 70086228Stmm *a = bus_space_read_stream_1(t, h, o); 70186228Stmm} 70286228Stmm 70393052Stmmstatic __inline void 70493052Stmmbus_space_read_region_stream_2(bus_space_tag_t t, bus_space_handle_t h, 70593052Stmm bus_size_t o, u_int16_t *a, bus_size_t c) 70686228Stmm{ 70786228Stmm for (; c; a++, c--, o+=2) 70886228Stmm *a = bus_space_read_stream_2(t, h, o); 70986228Stmm} 71086228Stmm 71193052Stmmstatic __inline void 71293052Stmmbus_space_read_region_stream_4(bus_space_tag_t t, bus_space_handle_t h, 71393052Stmm bus_size_t o, u_int32_t *a, bus_size_t c) 71486228Stmm{ 71586228Stmm for (; c; a++, c--, o+=4) 71686228Stmm *a = bus_space_read_stream_4(t, h, o); 71786228Stmm} 71886228Stmm 71993052Stmmstatic __inline void 72093052Stmmbus_space_read_region_stream_8(bus_space_tag_t t, bus_space_handle_t h, 72193052Stmm bus_size_t o, u_int64_t *a, bus_size_t c) 72286228Stmm{ 72386228Stmm for (; c; a++, c--, o+=8) 72486228Stmm *a = bus_space_read_stream_8(t, h, o); 72586228Stmm} 72686228Stmm 72793052Stmmstatic __inline void 72893052Stmmbus_space_write_region_stream_1(bus_space_tag_t t, bus_space_handle_t h, 72993052Stmm bus_size_t o, const u_int8_t *a, bus_size_t c) 73086228Stmm{ 73186228Stmm for (; c; a++, c--, o++) 73286228Stmm bus_space_write_stream_1(t, h, o, *a); 73386228Stmm} 73486228Stmm 73593052Stmmstatic __inline void 73693052Stmmbus_space_write_region_stream_2(bus_space_tag_t t, bus_space_handle_t h, 73793052Stmm bus_size_t o, const u_int16_t *a, bus_size_t c) 73886228Stmm{ 73986228Stmm for (; c; a++, c--, o+=2) 74086228Stmm bus_space_write_stream_2(t, h, o, *a); 74186228Stmm} 74286228Stmm 74393052Stmmstatic __inline void 74493052Stmmbus_space_write_region_stream_4(bus_space_tag_t t, bus_space_handle_t h, 74593052Stmm bus_size_t o, const u_int32_t *a, bus_size_t c) 74686228Stmm{ 74786228Stmm for (; c; a++, c--, o+=4) 74886228Stmm bus_space_write_stream_4(t, h, o, *a); 74986228Stmm} 75086228Stmm 75193052Stmmstatic __inline void 75293052Stmmbus_space_write_region_stream_8(bus_space_tag_t t, bus_space_handle_t h, 75393052Stmm bus_size_t o, const u_int64_t *a, bus_size_t c) 75486228Stmm{ 75586228Stmm for (; c; a++, c--, o+=8) 75686228Stmm bus_space_write_stream_8(t, h, o, *a); 75786228Stmm} 75886228Stmm 75993052Stmmstatic __inline void 76093052Stmmbus_space_set_region_stream_1(bus_space_tag_t t, bus_space_handle_t h, 76193052Stmm bus_size_t o, const u_int8_t v, bus_size_t c) 76286228Stmm{ 76386228Stmm for (; c; c--, o++) 76486228Stmm bus_space_write_stream_1(t, h, o, v); 76586228Stmm} 76686228Stmm 76793052Stmmstatic __inline void 76893052Stmmbus_space_set_region_stream_2(bus_space_tag_t t, bus_space_handle_t h, 76993052Stmm bus_size_t o, const u_int16_t v, bus_size_t c) 77086228Stmm{ 77186228Stmm for (; c; c--, o+=2) 77286228Stmm bus_space_write_stream_2(t, h, o, v); 77386228Stmm} 77486228Stmm 77593052Stmmstatic __inline void 77693052Stmmbus_space_set_region_stream_4(bus_space_tag_t t, bus_space_handle_t h, 77793052Stmm bus_size_t o, const u_int32_t v, bus_size_t c) 77886228Stmm{ 77986228Stmm for (; c; c--, o+=4) 78086228Stmm bus_space_write_stream_4(t, h, o, v); 78186228Stmm} 78286228Stmm 78393052Stmmstatic __inline void 78493052Stmmbus_space_set_region_stream_8(bus_space_tag_t t, bus_space_handle_t h, 78593052Stmm bus_size_t o, const u_int64_t v, bus_size_t c) 78686228Stmm{ 78786228Stmm for (; c; c--, o+=8) 78886228Stmm bus_space_write_stream_8(t, h, o, v); 78986228Stmm} 79086228Stmm 79193052Stmmstatic __inline void 79293052Stmmbus_space_copy_region_stream_1(bus_space_tag_t t, bus_space_handle_t h1, 79393052Stmm bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c) 79486228Stmm{ 79586228Stmm for (; c; c--, o1++, o2++) 79686228Stmm bus_space_write_stream_1(t, h1, o1, bus_space_read_stream_1(t, h2, 79786228Stmm o2)); 79886228Stmm} 79986228Stmm 80093052Stmmstatic __inline void 80193052Stmmbus_space_copy_region_stream_2(bus_space_tag_t t, bus_space_handle_t h1, 80293052Stmm bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c) 80386228Stmm{ 80486228Stmm for (; c; c--, o1+=2, o2+=2) 80586228Stmm bus_space_write_stream_2(t, h1, o1, bus_space_read_stream_2(t, h2, 80686228Stmm o2)); 80786228Stmm} 80886228Stmm 80993052Stmmstatic __inline void 81093052Stmmbus_space_copy_region_stream_4(bus_space_tag_t t, bus_space_handle_t h1, 81193052Stmm bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c) 81286228Stmm{ 81386228Stmm for (; c; c--, o1+=4, o2+=4) 81486228Stmm bus_space_write_stream_4(t, h1, o1, bus_space_read_stream_4(t, h2, 81586228Stmm o2)); 81686228Stmm} 81786228Stmm 81893052Stmmstatic __inline void 81993052Stmmbus_space_copy_region_stream_8(bus_space_tag_t t, bus_space_handle_t h1, 82093052Stmm bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c) 82186228Stmm{ 82286228Stmm for (; c; c--, o1+=8, o2+=8) 82386228Stmm bus_space_write_stream_8(t, h1, o1, bus_space_read_8(t, h2, o2)); 82486228Stmm} 82586228Stmm 826116659Sjmgstatic __inline int 827116659Sjmgbus_space_peek_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 828116659Sjmg u_int8_t *a) 829116659Sjmg{ 830116659Sjmg 831116659Sjmg __BUS_DEBUG_ACCESS(h, o, "peek", 1); 832116659Sjmg return (fasword8(bus_type_asi[t->bst_type], (caddr_t)(h + o), a)); 833116659Sjmg} 834116659Sjmg 835116659Sjmgstatic __inline int 836116659Sjmgbus_space_peek_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 837116659Sjmg u_int16_t *a) 838116659Sjmg{ 839116659Sjmg 840116659Sjmg __BUS_DEBUG_ACCESS(h, o, "peek", 2); 841116659Sjmg return (fasword16(bus_type_asi[t->bst_type], (caddr_t)(h + o), a)); 842116659Sjmg} 843116659Sjmg 844116659Sjmgstatic __inline int 845116659Sjmgbus_space_peek_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, 846116659Sjmg u_int32_t *a) 847116659Sjmg{ 848116659Sjmg 849116659Sjmg __BUS_DEBUG_ACCESS(h, o, "peek", 4); 850116659Sjmg return (fasword32(bus_type_asi[t->bst_type], (caddr_t)(h + o), a)); 851116659Sjmg} 852116659Sjmg 85386228Stmm/* Back-compat functions for old ISA drivers */ 85486228Stmmextern bus_space_tag_t isa_io_bt; 85586228Stmmextern bus_space_handle_t isa_io_hdl; 85686228Stmmextern bus_space_tag_t isa_mem_bt; 85786228Stmmextern bus_space_handle_t isa_mem_hdl; 85886228Stmm 85986228Stmm#define inb(o) bus_space_read_1(isa_io_bt, isa_io_hdl, o) 86086228Stmm#define inw(o) bus_space_read_2(isa_io_bt, isa_io_hdl, o) 86186228Stmm#define inl(o) bus_space_read_4(isa_io_bt, isa_io_hdl, o) 86290615Stmm#define outb(o, v) bus_space_write_1(isa_io_bt, isa_io_hdl, o, v) 86386228Stmm#define outw(o, v) bus_space_write_2(isa_io_bt, isa_io_hdl, o, v) 86486228Stmm#define outl(o, v) bus_space_write_4(isa_io_bt, isa_io_hdl, o, v) 86586228Stmm 86686228Stmm#define readb(o) bus_space_read_1(isa_mem_bt, isa_mem_hdl, o) 86786228Stmm#define readw(o) bus_space_read_2(isa_mem_bt, isa_mem_hdl, o) 86886228Stmm#define readl(o) bus_space_read_4(isa_mem_bt, isa_mem_hdl, o) 86986228Stmm#define writeb(o, v) bus_space_write_1(isa_mem_bt, isa_mem_hdl, o, v) 87086228Stmm#define writew(o, v) bus_space_write_2(isa_mem_bt, isa_mem_hdl, o, v) 87186228Stmm#define writel(o, v) bus_space_write_4(isa_mem_bt, isa_mem_hdl, o, v) 87286228Stmm 87386228Stmm#define insb(o, a, c) \ 87486228Stmm bus_space_read_multi_1(isa_io_bt, isa_io_hdl, o, (void*)a, c) 87586228Stmm#define insw(o, a, c) \ 87686228Stmm bus_space_read_multi_2(isa_io_bt, isa_io_hdl, o, (void*)a, c) 87786228Stmm#define insl(o, a, c) \ 87886228Stmm bus_space_read_multi_4(isa_io_bt, isa_io_hdl, o, (void*)a, c) 87986228Stmm#define outsb(o, a, c) \ 88086228Stmm bus_space_write_multi_1(isa_io_bt, isa_io_hdl, o, (void*)a, c) 88186228Stmm#define outsw(o, a, c) \ 88286228Stmm bus_space_write_multi_2(isa_io_bt, isa_io_hdl, o, (void*)a, c) 88386228Stmm#define outsl(o, a, c) \ 88486228Stmm bus_space_write_multi_4(isa_io_bt, isa_io_hdl, o, (void*)a, c) 88586228Stmm 88686228Stmm#define memcpy_fromio(d, s, c) \ 88786228Stmm bus_space_read_region_1(isa_mem_bt, isa_mem_hdl, s, d, c) 88886228Stmm#define memcpy_toio(d, s, c) \ 88986228Stmm bus_space_write_region_1(isa_mem_bt, isa_mem_hdl, d, s, c) 89086228Stmm#define memcpy_io(d, s, c) \ 89186228Stmm bus_space_copy_region_1(isa_mem_bt, isa_mem_hdl, s, isa_mem_hdl, d, c) 89286228Stmm#define memset_io(d, v, c) \ 89386228Stmm bus_space_set_region_1(isa_mem_bt, isa_mem_hdl, d, v, c) 89486228Stmm#define memsetw_io(d, v, c) \ 89586228Stmm bus_space_set_region_2(isa_mem_bt, isa_mem_hdl, d, v, c) 89686228Stmm 89786228Stmmstatic __inline void 89886228Stmmmemsetw(void *d, int val, size_t size) 89986228Stmm{ 90086228Stmm u_int16_t *sp = d; 90186228Stmm 90286228Stmm while (size--) 90386228Stmm *sp++ = val; 90486228Stmm} 90586228Stmm 906143598Sscottl#include <machine/bus_dma.h> 90786228Stmm 90880708Sjake#endif /* !_MACHINE_BUS_H_ */ 909