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