xref: /freebsd/sys/arm/include/bus.h (revision 06db52b6098b8904169760c6b005f5175b6ad6b1)
1 /*	$NetBSD: bus.h,v 1.11 2003/07/28 17:35:54 thorpej Exp $	*/
2 
3 /*-
4  * Copyright (c) 1996, 1997, 1998, 2001 The NetBSD Foundation, Inc.
5  * All rights reserved.
6  *
7  * This code is derived from software contributed to The NetBSD Foundation
8  * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
9  * NASA Ames Research Center.
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  * 1. Redistributions of source code must retain the above copyright
15  *    notice, this list of conditions and the following disclaimer.
16  * 2. Redistributions in binary form must reproduce the above copyright
17  *    notice, this list of conditions and the following disclaimer in the
18  *    documentation and/or other materials provided with the distribution.
19  * 3. All advertising materials mentioning features or use of this software
20  *    must display the following acknowledgement:
21  *	This product includes software developed by the NetBSD
22  *	Foundation, Inc. and its contributors.
23  * 4. Neither the name of The NetBSD Foundation nor the names of its
24  *    contributors may be used to endorse or promote products derived
25  *    from this software without specific prior written permission.
26  *
27  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
28  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
29  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
30  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
31  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
32  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
33  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
34  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
35  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
36  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
37  * POSSIBILITY OF SUCH DAMAGE.
38  */
39 
40 /*-
41  * Copyright (c) 1996 Charles M. Hannum.  All rights reserved.
42  * Copyright (c) 1996 Christopher G. Demetriou.  All rights reserved.
43  *
44  * Redistribution and use in source and binary forms, with or without
45  * modification, are permitted provided that the following conditions
46  * are met:
47  * 1. Redistributions of source code must retain the above copyright
48  *    notice, this list of conditions and the following disclaimer.
49  * 2. Redistributions in binary form must reproduce the above copyright
50  *    notice, this list of conditions and the following disclaimer in the
51  *    documentation and/or other materials provided with the distribution.
52  * 3. All advertising materials mentioning features or use of this software
53  *    must display the following acknowledgement:
54  *      This product includes software developed by Christopher G. Demetriou
55  *	for the NetBSD Project.
56  * 4. The name of the author may not be used to endorse or promote products
57  *    derived from this software without specific prior written permission
58  *
59  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
60  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
61  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
62  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
63  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
64  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
65  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
66  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
67  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
68  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
69  *
70  * $FreeBSD$
71  */
72 
73 #ifndef _MACHINE_BUS_H_
74 #define _MACHINE_BUS_H_
75 
76 #include <machine/_bus.h>
77 
78 /*
79  *	int bus_space_map  (bus_space_tag_t t, bus_addr_t addr,
80  *	    bus_size_t size, int flags, bus_space_handle_t *bshp);
81  *
82  * Map a region of bus space.
83  */
84 
85 #define	BUS_SPACE_MAP_CACHEABLE		0x01
86 #define	BUS_SPACE_MAP_LINEAR		0x02
87 #define	BUS_SPACE_MAP_PREFETCHABLE     	0x04
88 
89 struct bus_space {
90 	/* cookie */
91 	void		*bs_cookie;
92 
93 	/* mapping/unmapping */
94 	int		(*bs_map) (void *, bus_addr_t, bus_size_t,
95 			    int, bus_space_handle_t *);
96 	void		(*bs_unmap) (void *, bus_size_t);
97 	int		(*bs_subregion) (void *, bus_space_handle_t,
98 			    bus_size_t, bus_size_t, bus_space_handle_t *);
99 
100 	/* allocation/deallocation */
101 	int		(*bs_alloc) (void *, bus_addr_t, bus_addr_t,
102 			    bus_size_t, bus_size_t, bus_size_t, int,
103 			    bus_addr_t *, bus_space_handle_t *);
104 	void		(*bs_free) (void *, bus_space_handle_t,
105 			    bus_size_t);
106 
107 	/* get kernel virtual address */
108 	/* barrier */
109 	void		(*bs_barrier) (void *, bus_space_handle_t,
110 			    bus_size_t, bus_size_t, int);
111 
112 	/* read (single) */
113 	u_int8_t	(*bs_r_1) (void *, bus_space_handle_t, bus_size_t);
114 	u_int16_t	(*bs_r_2) (void *, bus_space_handle_t, bus_size_t);
115 	u_int32_t	(*bs_r_4) (void *, bus_space_handle_t, bus_size_t);
116 	u_int64_t	(*bs_r_8) (void *, bus_space_handle_t, bus_size_t);
117 
118 	/* read multiple */
119 	void		(*bs_rm_1) (void *, bus_space_handle_t, bus_size_t,
120 	    u_int8_t *, bus_size_t);
121 	void		(*bs_rm_2) (void *, bus_space_handle_t, bus_size_t,
122 	    u_int16_t *, bus_size_t);
123 	void		(*bs_rm_4) (void *, bus_space_handle_t,
124 			    bus_size_t, u_int32_t *, bus_size_t);
125 	void		(*bs_rm_8) (void *, bus_space_handle_t,
126 			    bus_size_t, u_int64_t *, bus_size_t);
127 
128 	/* read region */
129 	void		(*bs_rr_1) (void *, bus_space_handle_t,
130 			    bus_size_t, u_int8_t *, bus_size_t);
131 	void		(*bs_rr_2) (void *, bus_space_handle_t,
132 			    bus_size_t, u_int16_t *, bus_size_t);
133 	void		(*bs_rr_4) (void *, bus_space_handle_t,
134 			    bus_size_t, u_int32_t *, bus_size_t);
135 	void		(*bs_rr_8) (void *, bus_space_handle_t,
136 			    bus_size_t, u_int64_t *, bus_size_t);
137 
138 	/* write (single) */
139 	void		(*bs_w_1) (void *, bus_space_handle_t,
140 			    bus_size_t, u_int8_t);
141 	void		(*bs_w_2) (void *, bus_space_handle_t,
142 			    bus_size_t, u_int16_t);
143 	void		(*bs_w_4) (void *, bus_space_handle_t,
144 			    bus_size_t, u_int32_t);
145 	void		(*bs_w_8) (void *, bus_space_handle_t,
146 			    bus_size_t, u_int64_t);
147 
148 	/* write multiple */
149 	void		(*bs_wm_1) (void *, bus_space_handle_t,
150 			    bus_size_t, const u_int8_t *, bus_size_t);
151 	void		(*bs_wm_2) (void *, bus_space_handle_t,
152 			    bus_size_t, const u_int16_t *, bus_size_t);
153 	void		(*bs_wm_4) (void *, bus_space_handle_t,
154 			    bus_size_t, const u_int32_t *, bus_size_t);
155 	void		(*bs_wm_8) (void *, bus_space_handle_t,
156 			    bus_size_t, const u_int64_t *, bus_size_t);
157 
158 	/* write region */
159 	void		(*bs_wr_1) (void *, bus_space_handle_t,
160 			    bus_size_t, const u_int8_t *, bus_size_t);
161 	void		(*bs_wr_2) (void *, bus_space_handle_t,
162 			    bus_size_t, const u_int16_t *, bus_size_t);
163 	void		(*bs_wr_4) (void *, bus_space_handle_t,
164 			    bus_size_t, const u_int32_t *, bus_size_t);
165 	void		(*bs_wr_8) (void *, bus_space_handle_t,
166 			    bus_size_t, const u_int64_t *, bus_size_t);
167 
168 	/* set multiple */
169 	void		(*bs_sm_1) (void *, bus_space_handle_t,
170 			    bus_size_t, u_int8_t, bus_size_t);
171 	void		(*bs_sm_2) (void *, bus_space_handle_t,
172 			    bus_size_t, u_int16_t, bus_size_t);
173 	void		(*bs_sm_4) (void *, bus_space_handle_t,
174 			    bus_size_t, u_int32_t, bus_size_t);
175 	void		(*bs_sm_8) (void *, bus_space_handle_t,
176 			    bus_size_t, u_int64_t, bus_size_t);
177 
178 	/* set region */
179 	void		(*bs_sr_1) (void *, bus_space_handle_t,
180 			    bus_size_t, u_int8_t, bus_size_t);
181 	void		(*bs_sr_2) (void *, bus_space_handle_t,
182 			    bus_size_t, u_int16_t, bus_size_t);
183 	void		(*bs_sr_4) (void *, bus_space_handle_t,
184 			    bus_size_t, u_int32_t, bus_size_t);
185 	void		(*bs_sr_8) (void *, bus_space_handle_t,
186 			    bus_size_t, u_int64_t, bus_size_t);
187 
188 	/* copy */
189 	void		(*bs_c_1) (void *, bus_space_handle_t, bus_size_t,
190 			    bus_space_handle_t, bus_size_t, bus_size_t);
191 	void		(*bs_c_2) (void *, bus_space_handle_t, bus_size_t,
192 			    bus_space_handle_t, bus_size_t, bus_size_t);
193 	void		(*bs_c_4) (void *, bus_space_handle_t, bus_size_t,
194 			    bus_space_handle_t, bus_size_t, bus_size_t);
195 	void		(*bs_c_8) (void *, bus_space_handle_t, bus_size_t,
196 			    bus_space_handle_t, bus_size_t, bus_size_t);
197 
198 };
199 
200 
201 /*
202  * Utility macros; INTERNAL USE ONLY.
203  */
204 #define	__bs_c(a,b)		__CONCAT(a,b)
205 #define	__bs_opname(op,size)	__bs_c(__bs_c(__bs_c(bs_,op),_),size)
206 
207 #define	__bs_rs(sz, t, h, o)						\
208 	(*(t)->__bs_opname(r,sz))((t)->bs_cookie, h, o)
209 #define	__bs_ws(sz, t, h, o, v)						\
210 	(*(t)->__bs_opname(w,sz))((t)->bs_cookie, h, o, v)
211 #define	__bs_nonsingle(type, sz, t, h, o, a, c)				\
212 	(*(t)->__bs_opname(type,sz))((t)->bs_cookie, h, o, a, c)
213 #define	__bs_set(type, sz, t, h, o, v, c)				\
214 	(*(t)->__bs_opname(type,sz))((t)->bs_cookie, h, o, v, c)
215 #define	__bs_copy(sz, t, h1, o1, h2, o2, cnt)				\
216 	(*(t)->__bs_opname(c,sz))((t)->bs_cookie, h1, o1, h2, o2, cnt)
217 
218 
219 /*
220  * Mapping and unmapping operations.
221  */
222 #define	bus_space_map(t, a, s, c, hp)					\
223 	(*(t)->bs_map)((t)->bs_cookie, (a), (s), (c), (hp))
224 #define	bus_space_unmap(t, h, s)					\
225 	(*(t)->bs_unmap)((t)->bs_cookie, (h), (s))
226 #define	bus_space_subregion(t, h, o, s, hp)				\
227 	(*(t)->bs_subregion)((t)->bs_cookie, (h), (o), (s), (hp))
228 
229 
230 /*
231  * Allocation and deallocation operations.
232  */
233 #define	bus_space_alloc(t, rs, re, s, a, b, c, ap, hp)			\
234 	(*(t)->bs_alloc)((t)->bs_cookie, (rs), (re), (s), (a), (b),	\
235 	    (c), (ap), (hp))
236 #define	bus_space_free(t, h, s)						\
237 	(*(t)->bs_free)((t)->bs_cookie, (h), (s))
238 
239 /*
240  * Bus barrier operations.
241  */
242 #define	bus_space_barrier(t, h, o, l, f)				\
243 	(*(t)->bs_barrier)((t)->bs_cookie, (h), (o), (l), (f))
244 
245 #define	BUS_SPACE_BARRIER_READ	0x01
246 #define	BUS_SPACE_BARRIER_WRITE	0x02
247 
248 /*
249  * Bus read (single) operations.
250  */
251 #define	bus_space_read_1(t, h, o)	__bs_rs(1,(t),(h),(o))
252 #define	bus_space_read_2(t, h, o)	__bs_rs(2,(t),(h),(o))
253 #define	bus_space_read_4(t, h, o)	__bs_rs(4,(t),(h),(o))
254 #define	bus_space_read_8(t, h, o)	__bs_rs(8,(t),(h),(o))
255 
256 
257 /*
258  * Bus read multiple operations.
259  */
260 #define	bus_space_read_multi_1(t, h, o, a, c)				\
261 	__bs_nonsingle(rm,1,(t),(h),(o),(a),(c))
262 #define	bus_space_read_multi_2(t, h, o, a, c)				\
263 	__bs_nonsingle(rm,2,(t),(h),(o),(a),(c))
264 #define	bus_space_read_multi_4(t, h, o, a, c)				\
265 	__bs_nonsingle(rm,4,(t),(h),(o),(a),(c))
266 #define	bus_space_read_multi_8(t, h, o, a, c)				\
267 	__bs_nonsingle(rm,8,(t),(h),(o),(a),(c))
268 
269 
270 /*
271  * Bus read region operations.
272  */
273 #define	bus_space_read_region_1(t, h, o, a, c)				\
274 	__bs_nonsingle(rr,1,(t),(h),(o),(a),(c))
275 #define	bus_space_read_region_2(t, h, o, a, c)				\
276 	__bs_nonsingle(rr,2,(t),(h),(o),(a),(c))
277 #define	bus_space_read_region_4(t, h, o, a, c)				\
278 	__bs_nonsingle(rr,4,(t),(h),(o),(a),(c))
279 #define	bus_space_read_region_8(t, h, o, a, c)				\
280 	__bs_nonsingle(rr,8,(t),(h),(o),(a),(c))
281 
282 
283 /*
284  * Bus write (single) operations.
285  */
286 #define	bus_space_write_1(t, h, o, v)	__bs_ws(1,(t),(h),(o),(v))
287 #define	bus_space_write_2(t, h, o, v)	__bs_ws(2,(t),(h),(o),(v))
288 #define	bus_space_write_4(t, h, o, v)	__bs_ws(4,(t),(h),(o),(v))
289 #define	bus_space_write_8(t, h, o, v)	__bs_ws(8,(t),(h),(o),(v))
290 
291 
292 /*
293  * Bus write multiple operations.
294  */
295 #define	bus_space_write_multi_1(t, h, o, a, c)				\
296 	__bs_nonsingle(wm,1,(t),(h),(o),(a),(c))
297 #define	bus_space_write_multi_2(t, h, o, a, c)				\
298 	__bs_nonsingle(wm,2,(t),(h),(o),(a),(c))
299 #define	bus_space_write_multi_4(t, h, o, a, c)				\
300 	__bs_nonsingle(wm,4,(t),(h),(o),(a),(c))
301 #define	bus_space_write_multi_8(t, h, o, a, c)				\
302 	__bs_nonsingle(wm,8,(t),(h),(o),(a),(c))
303 
304 
305 /*
306  * Bus write region operations.
307  */
308 #define	bus_space_write_region_1(t, h, o, a, c)				\
309 	__bs_nonsingle(wr,1,(t),(h),(o),(a),(c))
310 #define	bus_space_write_region_2(t, h, o, a, c)				\
311 	__bs_nonsingle(wr,2,(t),(h),(o),(a),(c))
312 #define	bus_space_write_region_4(t, h, o, a, c)				\
313 	__bs_nonsingle(wr,4,(t),(h),(o),(a),(c))
314 #define	bus_space_write_region_8(t, h, o, a, c)				\
315 	__bs_nonsingle(wr,8,(t),(h),(o),(a),(c))
316 
317 
318 /*
319  * Set multiple operations.
320  */
321 #define	bus_space_set_multi_1(t, h, o, v, c)				\
322 	__bs_set(sm,1,(t),(h),(o),(v),(c))
323 #define	bus_space_set_multi_2(t, h, o, v, c)				\
324 	__bs_set(sm,2,(t),(h),(o),(v),(c))
325 #define	bus_space_set_multi_4(t, h, o, v, c)				\
326 	__bs_set(sm,4,(t),(h),(o),(v),(c))
327 #define	bus_space_set_multi_8(t, h, o, v, c)				\
328 	__bs_set(sm,8,(t),(h),(o),(v),(c))
329 
330 
331 /*
332  * Set region operations.
333  */
334 #define	bus_space_set_region_1(t, h, o, v, c)				\
335 	__bs_set(sr,1,(t),(h),(o),(v),(c))
336 #define	bus_space_set_region_2(t, h, o, v, c)				\
337 	__bs_set(sr,2,(t),(h),(o),(v),(c))
338 #define	bus_space_set_region_4(t, h, o, v, c)				\
339 	__bs_set(sr,4,(t),(h),(o),(v),(c))
340 #define	bus_space_set_region_8(t, h, o, v, c)				\
341 	__bs_set(sr,8,(t),(h),(o),(v),(c))
342 
343 
344 /*
345  * Copy operations.
346  */
347 #define	bus_space_copy_region_1(t, h1, o1, h2, o2, c)				\
348 	__bs_copy(1, t, h1, o1, h2, o2, c)
349 #define	bus_space_copy_region_2(t, h1, o1, h2, o2, c)				\
350 	__bs_copy(2, t, h1, o1, h2, o2, c)
351 #define	bus_space_copy_region_4(t, h1, o1, h2, o2, c)				\
352 	__bs_copy(4, t, h1, o1, h2, o2, c)
353 #define	bus_space_copy_region_8(t, h1, o1, h2, o2, c)				\
354 	__bs_copy(8, t, h1, o1, h2, o2, c)
355 
356 /*
357  * Macros to provide prototypes for all the functions used in the
358  * bus_space structure
359  */
360 
361 #define bs_map_proto(f)							\
362 int	__bs_c(f,_bs_map) (void *t, bus_addr_t addr,		\
363 	    bus_size_t size, int cacheable, bus_space_handle_t *bshp);
364 
365 #define bs_unmap_proto(f)						\
366 void	__bs_c(f,_bs_unmap) (void *t, bus_size_t size);
367 
368 #define bs_subregion_proto(f)						\
369 int	__bs_c(f,_bs_subregion) (void *t, bus_space_handle_t bsh,	\
370 	    bus_size_t offset, bus_size_t size, 			\
371 	    bus_space_handle_t *nbshp);
372 
373 #define bs_alloc_proto(f)						\
374 int	__bs_c(f,_bs_alloc) (void *t, bus_addr_t rstart,		\
375 	    bus_addr_t rend, bus_size_t size, bus_size_t align,		\
376 	    bus_size_t boundary, int cacheable, bus_addr_t *addrp,	\
377 	    bus_space_handle_t *bshp);
378 
379 #define bs_free_proto(f)						\
380 void	__bs_c(f,_bs_free) (void *t, bus_space_handle_t bsh,	\
381 	    bus_size_t size);
382 
383 #define bs_mmap_proto(f)						\
384 int	__bs_c(f,_bs_mmap) (struct cdev *, vm_offset_t, vm_paddr_t *, int);
385 
386 #define bs_barrier_proto(f)						\
387 void	__bs_c(f,_bs_barrier) (void *t, bus_space_handle_t bsh,	\
388 	    bus_size_t offset, bus_size_t len, int flags);
389 
390 #define	bs_r_1_proto(f)							\
391 u_int8_t	__bs_c(f,_bs_r_1) (void *t, bus_space_handle_t bsh,	\
392 		    bus_size_t offset);
393 
394 #define	bs_r_2_proto(f)							\
395 u_int16_t	__bs_c(f,_bs_r_2) (void *t, bus_space_handle_t bsh,	\
396 		    bus_size_t offset);
397 
398 #define	bs_r_4_proto(f)							\
399 u_int32_t	__bs_c(f,_bs_r_4) (void *t, bus_space_handle_t bsh,	\
400 		    bus_size_t offset);
401 
402 #define	bs_r_8_proto(f)							\
403 u_int64_t	__bs_c(f,_bs_r_8) (void *t, bus_space_handle_t bsh,	\
404 		    bus_size_t offset);
405 
406 #define	bs_w_1_proto(f)							\
407 void	__bs_c(f,_bs_w_1) (void *t, bus_space_handle_t bsh,		\
408 	    bus_size_t offset, u_int8_t value);
409 
410 #define	bs_w_2_proto(f)							\
411 void	__bs_c(f,_bs_w_2) (void *t, bus_space_handle_t bsh,		\
412 	    bus_size_t offset, u_int16_t value);
413 
414 #define	bs_w_4_proto(f)							\
415 void	__bs_c(f,_bs_w_4) (void *t, bus_space_handle_t bsh,		\
416 	    bus_size_t offset, u_int32_t value);
417 
418 #define	bs_w_8_proto(f)							\
419 void	__bs_c(f,_bs_w_8) (void *t, bus_space_handle_t bsh,		\
420 	    bus_size_t offset, u_int64_t value);
421 
422 #define	bs_rm_1_proto(f)						\
423 void	__bs_c(f,_bs_rm_1) (void *t, bus_space_handle_t bsh,	\
424 	    bus_size_t offset, u_int8_t *addr, bus_size_t count);
425 
426 #define	bs_rm_2_proto(f)						\
427 void	__bs_c(f,_bs_rm_2) (void *t, bus_space_handle_t bsh,	\
428 	    bus_size_t offset, u_int16_t *addr, bus_size_t count);
429 
430 #define	bs_rm_4_proto(f)						\
431 void	__bs_c(f,_bs_rm_4) (void *t, bus_space_handle_t bsh,	\
432 	    bus_size_t offset, u_int32_t *addr, bus_size_t count);
433 
434 #define	bs_rm_8_proto(f)						\
435 void	__bs_c(f,_bs_rm_8) (void *t, bus_space_handle_t bsh,	\
436 	    bus_size_t offset, u_int64_t *addr, bus_size_t count);
437 
438 #define	bs_wm_1_proto(f)						\
439 void	__bs_c(f,_bs_wm_1) (void *t, bus_space_handle_t bsh,	\
440 	    bus_size_t offset, const u_int8_t *addr, bus_size_t count);
441 
442 #define	bs_wm_2_proto(f)						\
443 void	__bs_c(f,_bs_wm_2) (void *t, bus_space_handle_t bsh,	\
444 	    bus_size_t offset, const u_int16_t *addr, bus_size_t count);
445 
446 #define	bs_wm_4_proto(f)						\
447 void	__bs_c(f,_bs_wm_4) (void *t, bus_space_handle_t bsh,	\
448 	    bus_size_t offset, const u_int32_t *addr, bus_size_t count);
449 
450 #define	bs_wm_8_proto(f)						\
451 void	__bs_c(f,_bs_wm_8) (void *t, bus_space_handle_t bsh,	\
452 	    bus_size_t offset, const u_int64_t *addr, bus_size_t count);
453 
454 #define	bs_rr_1_proto(f)						\
455 void	__bs_c(f, _bs_rr_1) (void *t, bus_space_handle_t bsh,	\
456 	    bus_size_t offset, u_int8_t *addr, bus_size_t count);
457 
458 #define	bs_rr_2_proto(f)						\
459 void	__bs_c(f, _bs_rr_2) (void *t, bus_space_handle_t bsh,	\
460 	    bus_size_t offset, u_int16_t *addr, bus_size_t count);
461 
462 #define	bs_rr_4_proto(f)						\
463 void	__bs_c(f, _bs_rr_4) (void *t, bus_space_handle_t bsh,	\
464 	    bus_size_t offset, u_int32_t *addr, bus_size_t count);
465 
466 #define	bs_rr_8_proto(f)						\
467 void	__bs_c(f, _bs_rr_8) (void *t, bus_space_handle_t bsh,	\
468 	    bus_size_t offset, u_int64_t *addr, bus_size_t count);
469 
470 #define	bs_wr_1_proto(f)						\
471 void	__bs_c(f, _bs_wr_1) (void *t, bus_space_handle_t bsh,	\
472 	    bus_size_t offset, const u_int8_t *addr, bus_size_t count);
473 
474 #define	bs_wr_2_proto(f)						\
475 void	__bs_c(f, _bs_wr_2) (void *t, bus_space_handle_t bsh,	\
476 	    bus_size_t offset, const u_int16_t *addr, bus_size_t count);
477 
478 #define	bs_wr_4_proto(f)						\
479 void	__bs_c(f, _bs_wr_4) (void *t, bus_space_handle_t bsh,	\
480 	    bus_size_t offset, const u_int32_t *addr, bus_size_t count);
481 
482 #define	bs_wr_8_proto(f)						\
483 void	__bs_c(f, _bs_wr_8) (void *t, bus_space_handle_t bsh,	\
484 	    bus_size_t offset, const u_int64_t *addr, bus_size_t count);
485 
486 #define	bs_sm_1_proto(f)						\
487 void	__bs_c(f,_bs_sm_1) (void *t, bus_space_handle_t bsh,	\
488 	    bus_size_t offset, u_int8_t value, bus_size_t count);
489 
490 #define	bs_sm_2_proto(f)						\
491 void	__bs_c(f,_bs_sm_2) (void *t, bus_space_handle_t bsh,	\
492 	    bus_size_t offset, u_int16_t value, bus_size_t count);
493 
494 #define	bs_sm_4_proto(f)						\
495 void	__bs_c(f,_bs_sm_4) (void *t, bus_space_handle_t bsh,	\
496 	    bus_size_t offset, u_int32_t value, bus_size_t count);
497 
498 #define	bs_sm_8_proto(f)						\
499 void	__bs_c(f,_bs_sm_8) (void *t, bus_space_handle_t bsh,	\
500 	    bus_size_t offset, u_int64_t value, bus_size_t count);
501 
502 #define	bs_sr_1_proto(f)						\
503 void	__bs_c(f,_bs_sr_1) (void *t, bus_space_handle_t bsh,	\
504 	    bus_size_t offset, u_int8_t value, bus_size_t count);
505 
506 #define	bs_sr_2_proto(f)						\
507 void	__bs_c(f,_bs_sr_2) (void *t, bus_space_handle_t bsh,	\
508 	    bus_size_t offset, u_int16_t value, bus_size_t count);
509 
510 #define	bs_sr_4_proto(f)						\
511 void	__bs_c(f,_bs_sr_4) (void *t, bus_space_handle_t bsh,	\
512 	    bus_size_t offset, u_int32_t value, bus_size_t count);
513 
514 #define	bs_sr_8_proto(f)						\
515 void	__bs_c(f,_bs_sr_8) (void *t, bus_space_handle_t bsh,	\
516 	    bus_size_t offset, u_int64_t value, bus_size_t count);
517 
518 #define	bs_c_1_proto(f)							\
519 void	__bs_c(f,_bs_c_1) (void *t, bus_space_handle_t bsh1,	\
520 	    bus_size_t offset1, bus_space_handle_t bsh2,		\
521 	    bus_size_t offset2, bus_size_t count);
522 
523 #define	bs_c_2_proto(f)							\
524 void	__bs_c(f,_bs_c_2) (void *t, bus_space_handle_t bsh1,	\
525 	    bus_size_t offset1, bus_space_handle_t bsh2,		\
526 	    bus_size_t offset2, bus_size_t count);
527 
528 #define	bs_c_4_proto(f)							\
529 void	__bs_c(f,_bs_c_4) (void *t, bus_space_handle_t bsh1,	\
530 	    bus_size_t offset1, bus_space_handle_t bsh2,		\
531 	    bus_size_t offset2, bus_size_t count);
532 
533 #define	bs_c_8_proto(f)							\
534 void	__bs_c(f,_bs_c_8) (void *t, bus_space_handle_t bsh1,	\
535 	    bus_size_t offset1, bus_space_handle_t bsh2,		\
536 	    bus_size_t offset2, bus_size_t count);
537 
538 #define bs_protos(f)		\
539 bs_map_proto(f);		\
540 bs_unmap_proto(f);		\
541 bs_subregion_proto(f);		\
542 bs_alloc_proto(f);		\
543 bs_free_proto(f);		\
544 bs_mmap_proto(f);		\
545 bs_barrier_proto(f);		\
546 bs_r_1_proto(f);		\
547 bs_r_2_proto(f);		\
548 bs_r_4_proto(f);		\
549 bs_r_8_proto(f);		\
550 bs_w_1_proto(f);		\
551 bs_w_2_proto(f);		\
552 bs_w_4_proto(f);		\
553 bs_w_8_proto(f);		\
554 bs_rm_1_proto(f);		\
555 bs_rm_2_proto(f);		\
556 bs_rm_4_proto(f);		\
557 bs_rm_8_proto(f);		\
558 bs_wm_1_proto(f);		\
559 bs_wm_2_proto(f);		\
560 bs_wm_4_proto(f);		\
561 bs_wm_8_proto(f);		\
562 bs_rr_1_proto(f);		\
563 bs_rr_2_proto(f);		\
564 bs_rr_4_proto(f);		\
565 bs_rr_8_proto(f);		\
566 bs_wr_1_proto(f);		\
567 bs_wr_2_proto(f);		\
568 bs_wr_4_proto(f);		\
569 bs_wr_8_proto(f);		\
570 bs_sm_1_proto(f);		\
571 bs_sm_2_proto(f);		\
572 bs_sm_4_proto(f);		\
573 bs_sm_8_proto(f);		\
574 bs_sr_1_proto(f);		\
575 bs_sr_2_proto(f);		\
576 bs_sr_4_proto(f);		\
577 bs_sr_8_proto(f);		\
578 bs_c_1_proto(f);		\
579 bs_c_2_proto(f);		\
580 bs_c_4_proto(f);		\
581 bs_c_8_proto(f);
582 
583 #define BUS_SPACE_ALIGNED_POINTER(p, t) ALIGNED_POINTER(p, t)
584 
585 #define BUS_SPACE_MAXADDR_24BIT	0xFFFFFF
586 #define BUS_SPACE_MAXADDR_32BIT 0xFFFFFFFF
587 #define BUS_SPACE_MAXADDR 	0xFFFFFFFF
588 #define BUS_SPACE_MAXSIZE_24BIT	0xFFFFFF
589 #define BUS_SPACE_MAXSIZE_32BIT	0xFFFFFFFF
590 #define BUS_SPACE_MAXSIZE 	0xFFFFFFFF
591 
592 /* XXX: is this right ? */
593 #define bus_space_read_stream_1(t, h, o)        bus_space_read_1((t), (h), (o))
594 #define bus_space_read_stream_2(t, h, o)        bus_space_read_2((t), (h), (o))
595 #define bus_space_read_stream_4(t, h, o)        bus_space_read_4((t), (h), (o))
596 
597 #define bus_space_read_multi_stream_1(t, h, o, a, c) \
598         bus_space_read_multi_1((t), (h), (o), (a), (c))
599 #define bus_space_read_multi_stream_2(t, h, o, a, c) \
600 	        bus_space_read_multi_2((t), (h), (o), (a), (c))
601 #define bus_space_read_multi_stream_4(t, h, o, a, c) \
602 	        bus_space_read_multi_4((t), (h), (o), (a), (c))
603 
604 #define bus_space_write_stream_1(t, h, o, v) \
605 	        bus_space_write_1((t), (h), (o), (v))
606 #define bus_space_write_stream_2(t, h, o, v) \
607 	        bus_space_write_2((t), (h), (o), (v))
608 #define bus_space_write_stream_4(t, h, o, v) \
609 	        bus_space_write_4((t), (h), (o), (v))
610 
611 #define bus_space_write_multi_stream_1(t, h, o, a, c) \
612 	        bus_space_write_multi_1((t), (h), (o), (a), (c))
613 #define bus_space_write_multi_stream_2(t, h, o, a, c) \
614 	        bus_space_write_multi_2((t), (h), (o), (a), (c))
615 #define bus_space_write_multi_stream_4(t, h, o, a, c) \
616 	        bus_space_write_multi_4((t), (h), (o), (a), (c))
617 
618 
619 #include <machine/bus_dma.h>
620 
621 #endif /* _MACHINE_BUS_H_ */
622