Sync usage with man page.
[netbsd-mini2440.git] / sys / arch / mac68k / include / bus.h
blob4255568c2eed2e3c89af90ff1695050ac24b4628
1 /* $NetBSD: bus.h,v 1.25 2006/09/09 06:01:48 tsutsui Exp $ */
3 /*-
4 * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc.
5 * All rights reserved.
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.
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.
20 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
21 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
24 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 * POSSIBILITY OF SUCH DAMAGE.
34 * Copyright (C) 1997 Scott Reynolds. All rights reserved.
36 * Redistribution and use in source and binary forms, with or without
37 * modification, are permitted provided that the following conditions
38 * are met:
39 * 1. Redistributions of source code must retain the above copyright
40 * notice, this list of conditions and the following disclaimer.
41 * 2. Redistributions in binary form must reproduce the above copyright
42 * notice, this list of conditions and the following disclaimer in the
43 * documentation and/or other materials provided with the distribution.
44 * 3. The name of the author may not be used to endorse or promote products
45 * derived from this software without specific prior written permission
47 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
48 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
49 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
50 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
51 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
52 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
53 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
54 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
55 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
56 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
59 #ifndef _MAC68K_BUS_H_
60 #define _MAC68K_BUS_H_
63 * Value for the mac68k bus space tag, not to be used directly by MI code.
65 #define MAC68K_BUS_SPACE_MEM 0 /* space is mem space */
67 #define __BUS_SPACE_HAS_STREAM_METHODS 1
70 * Bus address and size types
72 typedef u_long bus_addr_t;
73 typedef u_long bus_size_t;
76 * Access methods for bus resources and address space.
78 #define BSH_T struct bus_space_handle_s
79 typedef int bus_space_tag_t;
80 typedef struct bus_space_handle_s {
81 u_long base;
82 int swapped;
83 int stride;
85 u_int8_t (*bsr1)(bus_space_tag_t, BSH_T *, bus_size_t);
86 u_int16_t (*bsr2)(bus_space_tag_t, BSH_T *, bus_size_t);
87 u_int32_t (*bsr4)(bus_space_tag_t, BSH_T *, bus_size_t);
88 u_int8_t (*bsrs1)(bus_space_tag_t, BSH_T *, bus_size_t);
89 u_int16_t (*bsrs2)(bus_space_tag_t, BSH_T *, bus_size_t);
90 u_int32_t (*bsrs4)(bus_space_tag_t, BSH_T *, bus_size_t);
91 void (*bsrm1)(bus_space_tag_t, BSH_T *, bus_size_t,
92 u_int8_t *, size_t);
93 void (*bsrm2)(bus_space_tag_t, BSH_T *, bus_size_t,
94 u_int16_t *, size_t);
95 void (*bsrm4)(bus_space_tag_t, BSH_T *, bus_size_t,
96 u_int32_t *, size_t);
97 void (*bsrms1)(bus_space_tag_t, BSH_T *, bus_size_t,
98 u_int8_t *, size_t);
99 void (*bsrms2)(bus_space_tag_t, BSH_T *, bus_size_t,
100 u_int16_t *, size_t);
101 void (*bsrms4)(bus_space_tag_t, BSH_T *, bus_size_t,
102 u_int32_t *, size_t);
103 void (*bsrr1)(bus_space_tag_t, BSH_T *, bus_size_t,
104 u_int8_t *, size_t);
105 void (*bsrr2)(bus_space_tag_t, BSH_T *, bus_size_t,
106 u_int16_t *, size_t);
107 void (*bsrr4)(bus_space_tag_t, BSH_T *, bus_size_t,
108 u_int32_t *, size_t);
109 void (*bsrrs1)(bus_space_tag_t, BSH_T *, bus_size_t,
110 u_int8_t *, size_t);
111 void (*bsrrs2)(bus_space_tag_t, BSH_T *, bus_size_t,
112 u_int16_t *, size_t);
113 void (*bsrrs4)(bus_space_tag_t, BSH_T *, bus_size_t,
114 u_int32_t *, size_t);
115 void (*bsw1)(bus_space_tag_t, BSH_T *, bus_size_t, u_int8_t);
116 void (*bsw2)(bus_space_tag_t, BSH_T *, bus_size_t,
117 u_int16_t);
118 void (*bsw4)(bus_space_tag_t, BSH_T *, bus_size_t,
119 u_int32_t);
120 void (*bsws1)(bus_space_tag_t, BSH_T *, bus_size_t,
121 u_int8_t);
122 void (*bsws2)(bus_space_tag_t, BSH_T *, bus_size_t,
123 u_int16_t);
124 void (*bsws4)(bus_space_tag_t, BSH_T *, bus_size_t,
125 u_int32_t);
126 void (*bswm1)(bus_space_tag_t, BSH_T *, bus_size_t,
127 const u_int8_t *, size_t);
128 void (*bswm2)(bus_space_tag_t, BSH_T *, bus_size_t,
129 const u_int16_t *, size_t);
130 void (*bswm4)(bus_space_tag_t, BSH_T *, bus_size_t,
131 const u_int32_t *, size_t);
132 void (*bswms1)(bus_space_tag_t, BSH_T *, bus_size_t,
133 const u_int8_t *, size_t);
134 void (*bswms2)(bus_space_tag_t, BSH_T *, bus_size_t,
135 const u_int16_t *, size_t);
136 void (*bswms4)(bus_space_tag_t, BSH_T *, bus_size_t,
137 const u_int32_t *, size_t);
138 void (*bswr1)(bus_space_tag_t, BSH_T *, bus_size_t,
139 const u_int8_t *, size_t);
140 void (*bswr2)(bus_space_tag_t, BSH_T *, bus_size_t,
141 const u_int16_t *, size_t);
142 void (*bswr4)(bus_space_tag_t, BSH_T *, bus_size_t,
143 const u_int32_t *, size_t);
144 void (*bswrs1)(bus_space_tag_t, BSH_T *, bus_size_t,
145 const u_int8_t *, size_t);
146 void (*bswrs2)(bus_space_tag_t, BSH_T *, bus_size_t,
147 const u_int16_t *, size_t);
148 void (*bswrs4)(bus_space_tag_t, BSH_T *, bus_size_t,
149 const u_int32_t *, size_t);
150 void (*bssm1)(bus_space_tag_t, BSH_T *, bus_size_t,
151 u_int8_t v, size_t);
152 void (*bssm2)(bus_space_tag_t, BSH_T *, bus_size_t,
153 u_int16_t v, size_t);
154 void (*bssm4)(bus_space_tag_t, BSH_T *, bus_size_t,
155 u_int32_t v, size_t);
156 void (*bssr1)(bus_space_tag_t, BSH_T *, bus_size_t,
157 u_int8_t v, size_t);
158 void (*bssr2)(bus_space_tag_t, BSH_T *, bus_size_t,
159 u_int16_t v, size_t);
160 void (*bssr4)(bus_space_tag_t, BSH_T *, bus_size_t,
161 u_int32_t v, size_t);
162 } bus_space_handle_t;
163 #undef BSH_T
165 void mac68k_bus_space_handle_swapped(bus_space_tag_t,
166 bus_space_handle_t *);
167 void mac68k_bus_space_handle_set_stride(bus_space_tag_t,
168 bus_space_handle_t *, int);
171 * int bus_space_map(bus_space_tag_t t, bus_addr_t addr,
172 * bus_size_t size, int flags, bus_space_handle_t *bshp);
174 * Map a region of bus space.
177 #define BUS_SPACE_MAP_CACHEABLE 0x01
178 #define BUS_SPACE_MAP_LINEAR 0x02
179 #define BUS_SPACE_MAP_PREFETCHABLE 0x04
181 int bus_space_map(bus_space_tag_t, bus_addr_t, bus_size_t,
182 int, bus_space_handle_t *);
185 * void bus_space_unmap(bus_space_tag_t t, bus_space_handle_t bsh,
186 * bus_size_t size);
188 * Unmap a region of bus space.
191 void bus_space_unmap(bus_space_tag_t, bus_space_handle_t, bus_size_t);
194 * int bus_space_subregion(bus_space_tag_t t, bus_space_handle_t bsh,
195 * bus_size_t offset, bus_size_t size, bus_space_handle_t *nbshp);
197 * Get a new handle for a subregion of an already-mapped area of bus space.
200 int bus_space_subregion(bus_space_tag_t, bus_space_handle_t,
201 bus_size_t, bus_size_t size, bus_space_handle_t *);
204 * int bus_space_alloc(bus_space_tag_t t, bus_addr_t, rstart,
205 * bus_addr_t rend, bus_size_t size, bus_size_t align,
206 * bus_size_t boundary, int flags, bus_addr_t *addrp,
207 * bus_space_handle_t *bshp);
209 * Allocate a region of bus space.
212 int bus_space_alloc(bus_space_tag_t, bus_addr_t rstart,
213 bus_addr_t rend, bus_size_t size, bus_size_t align,
214 bus_size_t boundary, int cacheable, bus_addr_t *addrp,
215 bus_space_handle_t *bshp);
218 * int bus_space_free(bus_space_tag_t t, bus_space_handle_t bsh,
219 * bus_size_t size);
221 * Free a region of bus space.
224 void bus_space_free(bus_space_tag_t, bus_space_handle_t bsh,
225 bus_size_t size);
228 * int mac68k_bus_space_probe(bus_space_tag_t t, bus_space_handle_t bsh,
229 * bus_size_t offset, int sz);
231 * Probe the bus at t/bsh/offset, using sz as the size of the load.
233 * This is a machine-dependent extension, and is not to be used by
234 * machine-independent code.
237 int mac68k_bus_space_probe(bus_space_tag_t,
238 bus_space_handle_t bsh, bus_size_t, int sz);
241 * u_intN_t bus_space_read_N(bus_space_tag_t tag,
242 * bus_space_handle_t bsh, bus_size_t offset);
244 * Read a 1, 2, 4, or 8 byte quantity from bus space
245 * described by tag/handle/offset.
248 u_int8_t mac68k_bsr1(bus_space_tag_t, bus_space_handle_t *, bus_size_t);
249 u_int8_t mac68k_bsr1_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t);
250 u_int16_t mac68k_bsr2(bus_space_tag_t, bus_space_handle_t *, bus_size_t);
251 u_int16_t mac68k_bsr2_swap(bus_space_tag_t, bus_space_handle_t *, bus_size_t);
252 u_int16_t mac68k_bsr2_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t);
253 u_int16_t mac68k_bsrs2_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t);
254 u_int32_t mac68k_bsr4(bus_space_tag_t, bus_space_handle_t *, bus_size_t);
255 u_int32_t mac68k_bsr4_swap(bus_space_tag_t, bus_space_handle_t *, bus_size_t);
256 u_int32_t mac68k_bsr4_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t);
257 u_int32_t mac68k_bsrs4_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t);
259 #define bus_space_read_1(t,h,o) (h).bsr1((t), &(h), (o))
260 #define bus_space_read_2(t,h,o) (h).bsr2((t), &(h), (o))
261 #define bus_space_read_4(t,h,o) (h).bsr4((t), &(h), (o))
262 #define bus_space_read_stream_1(t,h,o) (h).bsrs1((t), &(h), (o))
263 #define bus_space_read_stream_2(t,h,o) (h).bsrs2((t), &(h), (o))
264 #define bus_space_read_stream_4(t,h,o) (h).bsrs4((t), &(h), (o))
266 #if 0 /* Cause a link error for bus_space_read_8 */
267 #define bus_space_read_8(t, h, o) !!! bus_space_read_8 unimplemented !!!
268 #define bus_space_read_stream_8(t, h, o) \
269 !!! bus_space_read_stream_8 unimplemented !!!
270 #endif
273 * void bus_space_read_multi_N(bus_space_tag_t tag,
274 * bus_space_handle_t bsh, bus_size_t offset, u_intN_t *addr,
275 * size_t count);
277 * Read `count' 1, 2, 4, or 8 byte quantities from bus space
278 * described by tag/handle/offset and copy into buffer provided.
281 void mac68k_bsrm1(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
282 u_int8_t *, size_t);
283 void mac68k_bsrm1_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
284 u_int8_t *, size_t);
285 void mac68k_bsrm2(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
286 u_int16_t *, size_t);
287 void mac68k_bsrm2_swap(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
288 u_int16_t *, size_t);
289 void mac68k_bsrm2_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
290 u_int16_t *, size_t);
291 void mac68k_bsrms2_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
292 u_int16_t *, size_t);
293 void mac68k_bsrm4(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
294 u_int32_t *, size_t);
295 void mac68k_bsrms4(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
296 u_int32_t *, size_t);
297 void mac68k_bsrm4_swap(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
298 u_int32_t *, size_t);
299 void mac68k_bsrm4_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
300 u_int32_t *, size_t);
301 void mac68k_bsrms4_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
302 u_int32_t *, size_t);
304 #if defined(DIAGNOSTIC)
305 #define bus_space_read_multi_1(t, h, o, a, c) do { \
306 if ((c) == 0) \
307 panic("bus_space_read_multi_1 called with zero count."); \
308 (h).bsrm1(t,&(h),o,a,c); } while (0)
309 #define bus_space_read_multi_2(t, h, o, a, c) do { \
310 if ((c) == 0) \
311 panic("bus_space_read_multi_2 called with zero count."); \
312 (h).bsrm2(t,&(h),o,a,c); } while (0)
313 #define bus_space_read_multi_4(t, h, o, a, c) do { \
314 if ((c) == 0) \
315 panic("bus_space_read_multi_4 called with zero count."); \
316 (h).bsrm4(t,&(h),o,a,c); } while (0)
317 #define bus_space_read_multi_stream_1(t, h, o, a, c) do { \
318 if ((c) == 0) \
319 panic("bus_space_read_multi_stream_1 called with count=0."); \
320 (h).bsrms1(t,&(h),o,a,c); } while (0)
321 #define bus_space_read_multi_stream_2(t, h, o, a, c) do { \
322 if ((c) == 0) \
323 panic("bus_space_read_multi_stream_2 called with count=0."); \
324 (h).bsrms2(t,&(h),o,a,c); } while (0)
325 #define bus_space_read_multi_stream_4(t, h, o, a, c) do { \
326 if ((c) == 0) \
327 panic("bus_space_read_multi_stream_4 called with count=0."); \
328 (h).bsrms4(t,&(h),o,a,c); } while (0)
329 #else
330 #define bus_space_read_multi_1(t, h, o, a, c) \
331 do { if (c) (h).bsrm1(t, &(h), o, a, c); } while (0)
332 #define bus_space_read_multi_2(t, h, o, a, c) \
333 do { if (c) (h).bsrm2(t, &(h), o, a, c); } while (0)
334 #define bus_space_read_multi_4(t, h, o, a, c) \
335 do { if (c) (h).bsrm4(t, &(h), o, a, c); } while (0)
336 #define bus_space_read_multi_stream_1(t, h, o, a, c) \
337 do { if (c) (h).bsrms1(t, &(h), o, a, c); } while (0)
338 #define bus_space_read_multi_stream_2(t, h, o, a, c) \
339 do { if (c) (h).bsrms2(t, &(h), o, a, c); } while (0)
340 #define bus_space_read_multi_stream_4(t, h, o, a, c) \
341 do { if (c) (h).bsrms4(t, &(h), o, a, c); } while (0)
342 #endif
344 #if 0 /* Cause a link error for bus_space_read_multi_8 */
345 #define bus_space_read_multi_8 !!! bus_space_read_multi_8 unimplemented !!!
346 #define bus_space_read_multi_stream_8 \
347 !!! bus_space_read_multi_stream_8 unimplemented !!!
348 #endif
351 * void bus_space_read_region_N(bus_space_tag_t tag,
352 * bus_space_handle_t bsh, bus_size_t offset,
353 * u_intN_t *addr, size_t count);
355 * Read `count' 1, 2, 4, or 8 byte quantities from bus space
356 * described by tag/handle and starting at `offset' and copy into
357 * buffer provided.
360 void mac68k_bsrr1(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
361 u_int8_t *, size_t);
362 void mac68k_bsrr1_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
363 u_int8_t *, size_t);
364 void mac68k_bsrr2(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
365 u_int16_t *, size_t);
366 void mac68k_bsrr2_swap(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
367 u_int16_t *, size_t);
368 void mac68k_bsrr2_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
369 u_int16_t *, size_t);
370 void mac68k_bsrrs2_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
371 u_int16_t *, size_t);
372 void mac68k_bsrr4(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
373 u_int32_t *, size_t);
374 void mac68k_bsrr4_swap(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
375 u_int32_t *, size_t);
376 void mac68k_bsrr4_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
377 u_int32_t *, size_t);
378 void mac68k_bsrrs4_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
379 u_int32_t *, size_t);
381 #if defined(DIAGNOSTIC)
382 #define bus_space_read_region_1(t, h, o, a, c) do { \
383 if ((c) == 0) \
384 panic("bus_space_read_region_1 called with zero count."); \
385 (h).bsrr1(t,&(h),o,a,c); } while (0)
386 #define bus_space_read_region_2(t, h, o, a, c) do { \
387 if ((c) == 0) \
388 panic("bus_space_read_region_2 called with zero count."); \
389 (h).bsrr2(t,&(h),o,a,c); } while (0)
390 #define bus_space_read_region_4(t, h, o, a, c) do { \
391 if ((c) == 0) \
392 panic("bus_space_read_region_4 called with zero count."); \
393 (h).bsrr4(t,&(h),o,a,c); } while (0)
394 #define bus_space_read_region_stream_1(t, h, o, a, c) do { \
395 if ((c) == 0) \
396 panic("bus_space_read_region_stream_1 called with count=0."); \
397 (h).bsrrs1(t,&(h),o,a,c); } while (0)
398 #define bus_space_read_region_stream_2(t, h, o, a, c) do { \
399 if ((c) == 0) \
400 panic("bus_space_read_region_stream_2 called with count=0."); \
401 (h).bsrrs2(t,&(h),o,a,c); } while (0)
402 #define bus_space_read_region_stream_4(t, h, o, a, c) do { \
403 if ((c) == 0) \
404 panic("bus_space_read_region_stream_4 called with count=0."); \
405 (h).bsrrs4(t,&(h),o,a,c); } while (0)
406 #else
407 #define bus_space_read_region_1(t, h, o, a, c) \
408 do { if (c) (h).bsrr1(t,&(h),o,a,c); } while (0)
409 #define bus_space_read_region_2(t, h, o, a, c) \
410 do { if (c) (h).bsrr2(t,&(h),o,a,c); } while (0)
411 #define bus_space_read_region_4(t, h, o, a, c) \
412 do { if (c) (h).bsrr4(t,&(h),o,a,c); } while (0)
413 #define bus_space_read_region_stream_1(t, h, o, a, c) \
414 do { if (c) (h).bsrrs1(t,&(h),o,a,c); } while (0)
415 #define bus_space_read_region_stream_2(t, h, o, a, c) \
416 do { if (c) (h).bsrrs2(t,&(h),o,a,c); } while (0)
417 #define bus_space_read_region_stream_4(t, h, o, a, c) \
418 do { if (c) (h).bsrrs4(t,&(h),o,a,c); } while (0)
419 #endif
421 #if 0 /* Cause a link error for bus_space_read_region_8 */
422 #define bus_space_read_region_8 !!! bus_space_read_region_8 unimplemented !!!
423 #define bus_space_read_region_stream_8 \
424 !!! bus_space_read_region_stream_8 unimplemented !!!
425 #endif
428 * void bus_space_write_N(bus_space_tag_t tag,
429 * bus_space_handle_t bsh, bus_size_t offset, u_intN_t value);
431 * Write the 1, 2, 4, or 8 byte value `value' to bus space
432 * described by tag/handle/offset.
435 void mac68k_bsw1(bus_space_tag_t, bus_space_handle_t *, bus_size_t, u_int8_t);
436 void mac68k_bsw1_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
437 u_int8_t);
438 void mac68k_bsw2(bus_space_tag_t, bus_space_handle_t *, bus_size_t, u_int16_t);
439 void mac68k_bsw2_swap(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
440 u_int16_t);
441 void mac68k_bsw2_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
442 u_int16_t);
443 void mac68k_bsws2_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
444 u_int16_t);
445 void mac68k_bsw4(bus_space_tag_t, bus_space_handle_t *, bus_size_t, u_int32_t);
446 void mac68k_bsw4_swap(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
447 u_int32_t);
448 void mac68k_bsw4_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
449 u_int32_t);
450 void mac68k_bsws4_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
451 u_int32_t);
453 #define bus_space_write_1(t, h, o, v) (h).bsw1(t, &(h), o, v)
454 #define bus_space_write_2(t, h, o, v) (h).bsw2(t, &(h), o, v)
455 #define bus_space_write_4(t, h, o, v) (h).bsw4(t, &(h), o, v)
456 #define bus_space_write_stream_1(t, h, o, v) (h).bsws1(t, &(h), o, v)
457 #define bus_space_write_stream_2(t, h, o, v) (h).bsws2(t, &(h), o, v)
458 #define bus_space_write_stream_4(t, h, o, v) (h).bsws4(t, &(h), o, v)
460 #if 0 /* Cause a link error for bus_space_write_8 */
461 #define bus_space_write_8 !!! bus_space_write_8 not implemented !!!
462 #define bus_space_write_stream_8 \
463 !!! bus_space_write_stream_8 not implemented !!!
464 #endif
467 * void bus_space_write_multi_N(bus_space_tag_t tag,
468 * bus_space_handle_t bsh, bus_size_t offset, const u_intN_t *addr,
469 * size_t count);
471 * Write `count' 1, 2, 4, or 8 byte quantities from the buffer
472 * provided to bus space described by tag/handle/offset.
475 void mac68k_bswm1(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
476 const u_int8_t *, size_t);
477 void mac68k_bswm1_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
478 const u_int8_t *, size_t);
479 void mac68k_bswm2(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
480 const u_int16_t *, size_t);
481 void mac68k_bswm2_swap(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
482 const u_int16_t *, size_t);
483 void mac68k_bswm2_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
484 const u_int16_t *, size_t);
485 void mac68k_bswms2_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
486 const u_int16_t *, size_t);
487 void mac68k_bswm4(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
488 const u_int32_t *, size_t);
489 void mac68k_bswm4_swap(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
490 const u_int32_t *, size_t);
491 void mac68k_bswm4_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
492 const u_int32_t *, size_t);
493 void mac68k_bswms4_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
494 const u_int32_t *, size_t);
496 #if defined(DIAGNOSTIC)
497 #define bus_space_write_multi_1(t, h, o, a, c) do { \
498 if ((c) == 0) \
499 panic("bus_space_write_multi_1 called with zero count."); \
500 (h).bswm1(t,&(h),o,a,c); } while (0)
501 #define bus_space_write_multi_2(t, h, o, a, c) do { \
502 if ((c) == 0) \
503 panic("bus_space_write_multi_2 called with zero count."); \
504 (h).bswm2(t,&(h),o,a,c); } while (0)
505 #define bus_space_write_multi_4(t, h, o, a, c) do { \
506 if ((c) == 0) \
507 panic("bus_space_write_multi_4 called with zero count."); \
508 (h).bswm4(t,&(h),o,a,c); } while (0)
509 #define bus_space_write_multi_stream_1(t, h, o, a, c) do { \
510 if ((c) == 0) \
511 panic("bus_space_write_multi_stream_1 called with count=0."); \
512 (h).bswms1(t,&(h),o,a,c); } while (0)
513 #define bus_space_write_multi_stream_2(t, h, o, a, c) do { \
514 if ((c) == 0) \
515 panic("bus_space_write_multi_stream_2 called with count=0."); \
516 (h).bswms2(t,&(h),o,a,c); } while (0)
517 #define bus_space_write_multi_stream_4(t, h, o, a, c) do { \
518 if ((c) == 0) \
519 panic("bus_space_write_multi_stream_4 called with count=0."); \
520 (h).bswms4(t,&(h),o,a,c); } while (0)
521 #else
522 #define bus_space_write_multi_1(t, h, o, a, c) \
523 do { if (c) (h).bswm1(t, &(h), o, a, c); } while (0)
524 #define bus_space_write_multi_2(t, h, o, a, c) \
525 do { if (c) (h).bswm2(t, &(h), o, a, c); } while (0)
526 #define bus_space_write_multi_4(t, h, o, a, c) \
527 do { if (c) (h).bswm4(t, &(h), o, a, c); } while (0)
528 #define bus_space_write_multi_stream_1(t, h, o, a, c) \
529 do { if (c) (h).bswms1(t, &(h), o, a, c); } while (0)
530 #define bus_space_write_multi_stream_2(t, h, o, a, c) \
531 do { if (c) (h).bswms2(t, &(h), o, a, c); } while (0)
532 #define bus_space_write_multi_stream_4(t, h, o, a, c) \
533 do { if (c) (h).bswms4(t, &(h), o, a, c); } while (0)
534 #endif
536 #if 0 /* Cause a link error for bus_space_write_8 */
537 #define bus_space_write_multi_8(t, h, o, a, c) \
538 !!! bus_space_write_multi_8 unimplimented !!!
539 #define bus_space_write_multi_stream_8(t, h, o, a, c) \
540 !!! bus_space_write_multi_stream_8 unimplimented !!!
541 #endif
544 * void bus_space_write_region_N(bus_space_tag_t tag,
545 * bus_space_handle_t bsh, bus_size_t offset, const u_intN_t *addr,
546 * size_t count);
548 * Write `count' 1, 2, 4, or 8 byte quantities from the buffer provided
549 * to bus space described by tag/handle starting at `offset'.
552 void mac68k_bswr1(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
553 const u_int8_t *, size_t);
554 void mac68k_bswr1_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
555 const u_int8_t *, size_t);
556 void mac68k_bswr2(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
557 const u_int16_t *, size_t);
558 void mac68k_bswr2_swap(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
559 const u_int16_t *, size_t);
560 void mac68k_bswr2_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
561 const u_int16_t *, size_t);
562 void mac68k_bswrs2_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
563 const u_int16_t *, size_t);
564 void mac68k_bswr4(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
565 const u_int32_t *, size_t);
566 void mac68k_bswr4_swap(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
567 const u_int32_t *, size_t);
568 void mac68k_bswr4_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
569 const u_int32_t *, size_t);
570 void mac68k_bswrs4_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
571 const u_int32_t *, size_t);
573 #if defined(DIAGNOSTIC)
574 #define bus_space_write_region_1(t, h, o, a, c) do { \
575 if ((c) == 0) \
576 panic("bus_space_write_region_1 called with zero count."); \
577 (h).bswr1(t,&(h),o,a,c); } while (0)
578 #define bus_space_write_region_2(t, h, o, a, c) do { \
579 if ((c) == 0) \
580 panic("bus_space_write_region_2 called with zero count."); \
581 (h).bswr2(t,&(h),o,a,c); } while (0)
582 #define bus_space_write_region_4(t, h, o, a, c) do { \
583 if ((c) == 0) \
584 panic("bus_space_write_region_4 called with zero count."); \
585 (h).bswr4(t,&(h),o,a,c); } while (0)
586 #define bus_space_write_region_stream_1(t, h, o, a, c) do { \
587 if ((c) == 0) \
588 panic("bus_space_write_region_stream_1 called with count=0."); \
589 (h).bswrs1(t,&(h),o,a,c); } while (0)
590 #define bus_space_write_region_stream_2(t, h, o, a, c) do { \
591 if ((c) == 0) \
592 panic("bus_space_write_region_stream_2 called with count=0."); \
593 (h).bswrs2(t,&(h),o,a,c); } while (0)
594 #define bus_space_write_region_stream_4(t, h, o, a, c) do { \
595 if ((c) == 0) \
596 panic("bus_space_write_region_stream_4 called with count=0."); \
597 (h).bswrs4(t,&(h),o,a,c); } while (0)
598 #else
599 #define bus_space_write_region_1(t, h, o, a, c) \
600 do { if (c) (h).bswr1(t,&(h),o,a,c); } while (0)
601 #define bus_space_write_region_2(t, h, o, a, c) \
602 do { if (c) (h).bswr2(t,&(h),o,a,c); } while (0)
603 #define bus_space_write_region_4(t, h, o, a, c) \
604 do { if (c) (h).bswr4(t,&(h),o,a,c); } while (0)
605 #define bus_space_write_region_stream_1(t, h, o, a, c) \
606 do { if (c) (h).bswrs1(t,&(h),o,a,c); } while (0)
607 #define bus_space_write_region_stream_2(t, h, o, a, c) \
608 do { if (c) (h).bswrs2(t,&(h),o,a,c); } while (0)
609 #define bus_space_write_region_stream_4(t, h, o, a, c) \
610 do { if (c) (h).bswrs4(t,&(h),o,a,c); } while (0)
611 #endif
613 #if 0 /* Cause a link error for bus_space_write_region_8 */
614 #define bus_space_write_region_8 \
615 !!! bus_space_write_region_8 unimplemented !!!
616 #define bus_space_write_region_stream_8 \
617 !!! bus_space_write_region_stream_8 unimplemented !!!
618 #endif
621 * void bus_space_set_multi_N(bus_space_tag_t tag,
622 * bus_space_handle_t bsh, bus_size_t offset, u_intN_t val,
623 * size_t count);
625 * Write the 1, 2, 4, or 8 byte value `val' to bus space described
626 * by tag/handle/offset `count' times.
629 void mac68k_bssm1(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
630 u_int8_t, size_t);
631 void mac68k_bssm1_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
632 u_int8_t, size_t);
633 void mac68k_bssm2(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
634 u_int16_t, size_t);
635 void mac68k_bssm2_swap(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
636 u_int16_t, size_t);
637 void mac68k_bssm2_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
638 u_int16_t, size_t);
639 void mac68k_bssm4(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
640 u_int32_t, size_t);
641 void mac68k_bssm4_swap(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
642 u_int32_t, size_t);
643 void mac68k_bssm4_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
644 u_int32_t, size_t);
646 #if defined(DIAGNOSTIC)
647 #define bus_space_set_multi_1(t, h, o, val, c) do { \
648 if ((c) == 0) \
649 panic("bus_space_set_multi_1 called with zero count."); \
650 (h).bssm1(t,&(h),o,val,c); } while (0)
651 #define bus_space_set_multi_2(t, h, o, val, c) do { \
652 if ((c) == 0) \
653 panic("bus_space_set_multi_2 called with zero count."); \
654 (h).bssm2(t,&(h),o,val,c); } while (0)
655 #define bus_space_set_multi_4(t, h, o, val, c) do { \
656 if ((c) == 0) \
657 panic("bus_space_set_multi_4 called with zero count."); \
658 (h).bssm4(t,&(h),o,val,c); } while (0)
659 #else
660 #define bus_space_set_multi_1(t, h, o, val, c) \
661 do { if (c) (h).bssm1(t,&(h),o,val,c); } while (0)
662 #define bus_space_set_multi_2(t, h, o, val, c) \
663 do { if (c) (h).bssm2(t,&(h),o,val,c); } while (0)
664 #define bus_space_set_multi_4(t, h, o, val, c) \
665 do { if (c) (h).bssm4(t,&(h),o,val,c); } while (0)
666 #endif
668 #if 0 /* Cause a link error for bus_space_set_multi_8 */
669 #define bus_space_set_multi_8 \
670 !!! bus_space_set_multi_8 unimplemented !!!
671 #endif
674 * void bus_space_set_region_N(bus_space_tag_t tag,
675 * bus_space_handle_t bsh, bus_size_t, u_intN_t val,
676 * size_t count);
678 * Write `count' 1, 2, 4, or 8 byte value `val' to bus space described
679 * by tag/handle starting at `offset'.
682 void mac68k_bssr1(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
683 u_int8_t, size_t);
684 void mac68k_bssr1_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
685 u_int8_t, size_t);
686 void mac68k_bssr2(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
687 u_int16_t, size_t);
688 void mac68k_bssr2_swap(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
689 u_int16_t, size_t);
690 void mac68k_bssr2_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
691 u_int16_t, size_t);
692 void mac68k_bssr4(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
693 u_int32_t, size_t);
694 void mac68k_bssr4_swap(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
695 u_int32_t, size_t);
696 void mac68k_bssr4_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
697 u_int32_t, size_t);
699 #if defined(DIAGNOSTIC)
700 #define bus_space_set_region_1(t, h, o, val, c) do { \
701 if ((c) == 0) \
702 panic("bus_space_set_region_1 called with zero count."); \
703 (h).bssr1(t,&(h),o,val,c); } while (0)
704 #define bus_space_set_region_2(t, h, o, val, c) do { \
705 if ((c) == 0) \
706 panic("bus_space_set_region_2 called with zero count."); \
707 (h).bssr2(t,&(h),o,val,c); } while (0)
708 #define bus_space_set_region_4(t, h, o, val, c) do { \
709 if ((c) == 0) \
710 panic("bus_space_set_region_4 called with zero count."); \
711 (h).bssr4(t,&(h),o,val,c); } while (0)
712 #else
713 #define bus_space_set_region_1(t, h, o, val, c) \
714 do { if (c) (h).bssr1(t,&(h),o,val,c); } while (0)
715 #define bus_space_set_region_2(t, h, o, val, c) \
716 do { if (c) (h).bssr2(t,&(h),o,val,c); } while (0)
717 #define bus_space_set_region_4(t, h, o, val, c) \
718 do { if (c) (h).bssr4(t,&(h),o,val,c); } while (0)
719 #endif
721 #if 0 /* Cause a link error for bus_space_set_region_8 */
722 #define bus_space_set_region_8 \
723 !!! bus_space_set_region_8 unimplemented !!!
724 #endif
727 * void bus_space_copy_N(bus_space_tag_t tag,
728 * bus_space_handle_t bsh1, bus_size_t off1,
729 * bus_space_handle_t bsh2, bus_size_t off2, size_t count);
731 * Copy `count' 1, 2, 4, or 8 byte values from bus space starting
732 * at tag/bsh1/off1 to bus space starting at tag/bsh2/off2.
735 #define __MAC68K_copy_region_N(BYTES) \
736 static __inline void __CONCAT(bus_space_copy_region_,BYTES) \
737 (bus_space_tag_t, \
738 bus_space_handle_t, bus_size_t, \
739 bus_space_handle_t, bus_size_t, \
740 bus_size_t); \
742 static __inline void \
743 __CONCAT(bus_space_copy_region_,BYTES)( \
744 bus_space_tag_t t, \
745 bus_space_handle_t h1, \
746 bus_size_t o1, \
747 bus_space_handle_t h2, \
748 bus_size_t o2, \
749 bus_size_t c) \
751 bus_size_t o; \
753 if ((h1.base + o1) >= (h2.base + o2)) { \
754 /* src after dest: copy forward */ \
755 for (o = 0; c != 0; c--, o += BYTES) \
756 __CONCAT(bus_space_write_,BYTES)(t, h2, o2 + o, \
757 __CONCAT(bus_space_read_,BYTES)(t, h1, o1 + o)); \
758 } else { \
759 /* dest after src: copy backwards */ \
760 for (o = (c - 1) * BYTES; c != 0; c--, o -= BYTES) \
761 __CONCAT(bus_space_write_,BYTES)(t, h2, o2 + o, \
762 __CONCAT(bus_space_read_,BYTES)(t, h1, o1 + o)); \
765 __MAC68K_copy_region_N(1)
766 __MAC68K_copy_region_N(2)
767 __MAC68K_copy_region_N(4)
768 #if 0 /* Cause a link error for bus_space_copy_8 */
769 #define bus_space_copy_8 \
770 !!! bus_space_copy_8 unimplemented !!!
771 #endif
773 #undef __MAC68K_copy_region_N
776 * Bus read/write barrier methods.
778 * void bus_space_barrier(bus_space_tag_t tag, bus_space_handle_t bsh,
779 * bus_size_t offset, bus_size_t len, int flags);
781 * Note: the 680x0 does not currently require barriers, but we must
782 * provide the flags to MI code.
784 #define bus_space_barrier(t, h, o, l, f) \
785 ((void)((void)(t), (void)(h), (void)(o), (void)(l), (void)(f)))
786 #define BUS_SPACE_BARRIER_READ 0x01 /* force read barrier */
787 #define BUS_SPACE_BARRIER_WRITE 0x02 /* force write barrier */
789 #define BUS_SPACE_ALIGNED_POINTER(p, t) ALIGNED_POINTER(p, t)
791 #include <m68k/bus_dma.h>
793 #endif /* _MAC68K_BUS_H_ */