xref: /netbsd-src/sys/arch/amigappc/include/bus_funcs.h (revision cde8f271ec30c028c5652673e0e3c4a6298637d1)
1*cde8f271Sriastradh /*	$NetBSD: bus_funcs.h,v 1.2 2022/02/16 23:49:26 riastradh Exp $	*/
2f7f7c8b5Sdyoung 
3f7f7c8b5Sdyoung /*
4f7f7c8b5Sdyoung  * Copyright (c) 1996 Leo Weppelman.  All rights reserved.
5f7f7c8b5Sdyoung  *
6f7f7c8b5Sdyoung  * Redistribution and use in source and binary forms, with or without
7f7f7c8b5Sdyoung  * modification, are permitted provided that the following conditions
8f7f7c8b5Sdyoung  * are met:
9f7f7c8b5Sdyoung  * 1. Redistributions of source code must retain the above copyright
10f7f7c8b5Sdyoung  *    notice, this list of conditions and the following disclaimer.
11f7f7c8b5Sdyoung  * 2. Redistributions in binary form must reproduce the above copyright
12f7f7c8b5Sdyoung  *    notice, this list of conditions and the following disclaimer in the
13f7f7c8b5Sdyoung  *    documentation and/or other materials provided with the distribution.
14f7f7c8b5Sdyoung  *
15f7f7c8b5Sdyoung  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16f7f7c8b5Sdyoung  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17f7f7c8b5Sdyoung  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18f7f7c8b5Sdyoung  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19f7f7c8b5Sdyoung  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20f7f7c8b5Sdyoung  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21f7f7c8b5Sdyoung  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22f7f7c8b5Sdyoung  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23f7f7c8b5Sdyoung  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24f7f7c8b5Sdyoung  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25f7f7c8b5Sdyoung  */
26f7f7c8b5Sdyoung 
27f7f7c8b5Sdyoung #ifndef _AMIGAPPC_BUS_FUNCS_H_
28f7f7c8b5Sdyoung #define _AMIGAPPC_BUS_FUNCS_H_
29f7f7c8b5Sdyoung 
30f7f7c8b5Sdyoung /*
31f7f7c8b5Sdyoung  * Macro definition of map, unmap, etc.
32f7f7c8b5Sdyoung  */
33f7f7c8b5Sdyoung 
34f7f7c8b5Sdyoung #define bus_space_map(t, o, s, f, hp) \
35f7f7c8b5Sdyoung 	((t)->absm->bsm)((t), (o), (s), (f), (hp))
36f7f7c8b5Sdyoung 
37f7f7c8b5Sdyoung #define bus_space_subregion(t, h, o, s, hp) \
38f7f7c8b5Sdyoung 	((t)->absm->bsms)((h), (o), (s), (hp))
39f7f7c8b5Sdyoung 
40f7f7c8b5Sdyoung #define bus_space_unmap(t, h, s) \
41f7f7c8b5Sdyoung 	((t)->absm->bsu)((h), (s))
42f7f7c8b5Sdyoung 
43f7f7c8b5Sdyoung /*
44f7f7c8b5Sdyoung  * Macro definition of _2 functions as indirect method array calls
45f7f7c8b5Sdyoung  */
46f7f7c8b5Sdyoung 
47f7f7c8b5Sdyoung /* 0: Helper macros */
48f7f7c8b5Sdyoung 
49f7f7c8b5Sdyoung #define dbsdr(n, t, h, o)	((t)->absm->n)((h), (o))
50f7f7c8b5Sdyoung #define dbsdw(n, t, h, o, v)	((t)->absm->n)((h), (o), (v))
51f7f7c8b5Sdyoung #define dbsm(n, t, h, o, p, c)	((t)->absm->n)((h), (o), (p), (c))
52f7f7c8b5Sdyoung #define dbss(n, t, h, o, v, c)	((t)->absm->n)((h), (o), (v), (c))
53f7f7c8b5Sdyoung #define dbsc(n, t, h, o, v, c)	((t)->absm->n)((h), (o), (v), (c))
54f7f7c8b5Sdyoung 
55f7f7c8b5Sdyoung /* 1: byte-wide "functions" */
56f7f7c8b5Sdyoung 
57f7f7c8b5Sdyoung #define bus_space_read_1(t, h, o)		  dbsdr(bsr1, t, h, o)
58f7f7c8b5Sdyoung #define bus_space_write_1(t, h, o, v)		  dbsdw(bsw1, t, h, o, v)
59f7f7c8b5Sdyoung 
60f7f7c8b5Sdyoung #define bus_space_read_multi_1(t, h, o, p, c)	  dbsm(bsrm1, t, h, o, p, c)
61f7f7c8b5Sdyoung #define bus_space_write_multi_1(t, h, o, p, c)	  dbsm(bswm1, t, h, o, p, c)
62f7f7c8b5Sdyoung 
63f7f7c8b5Sdyoung #define bus_space_read_region_1(t, h, o, p, c)	  dbsm(bsrr1, t, h, o, p, c)
64f7f7c8b5Sdyoung #define bus_space_write_region_1(t, h, o, p, c)	  dbsm(bswr1, t, h, o, p, c)
65f7f7c8b5Sdyoung 
66f7f7c8b5Sdyoung #define bus_space_set_region_1(t, h, o, v, c)	  dbss(bssr1, t, h, o, v, c)
67f7f7c8b5Sdyoung #define bus_space_copy_region_1(t, h, o, g, q, c) dbss(bscr1, t, h, o, g, q, c)
68f7f7c8b5Sdyoung 
69f7f7c8b5Sdyoung 
70f7f7c8b5Sdyoung /* 2: word-wide "functions" */
71f7f7c8b5Sdyoung 
72f7f7c8b5Sdyoung #define bus_space_read_2(t, h, o)		  dbsdr(bsr2, t, h, o)
73f7f7c8b5Sdyoung #define bus_space_write_2(t, h, o, v)		  dbsdw(bsw2, t, h, o, v)
74f7f7c8b5Sdyoung #define bus_space_read_stream_2(t, h, o)	  dbsdr(bsrs2, t, h, o)
75f7f7c8b5Sdyoung #define bus_space_write_stream_2(t, h, o, v)	  dbsdw(bsws2, t, h, o, v)
76f7f7c8b5Sdyoung 
77f7f7c8b5Sdyoung #define bus_space_read_multi_2(t, h, o, p, c)	  dbsm(bsrm2, t, h, o, p, c)
78f7f7c8b5Sdyoung #define bus_space_write_multi_2(t, h, o, p, c)	  dbsm(bswm2, t, h, o, p, c)
79f7f7c8b5Sdyoung 
80f7f7c8b5Sdyoung #define bus_space_read_multi_stream_2(t, h, o, p, c) \
81f7f7c8b5Sdyoung 						  dbsm(bsrms2, t, h, o, p, c)
82f7f7c8b5Sdyoung 
83f7f7c8b5Sdyoung #define bus_space_write_multi_stream_2(t, h, o, p, c) \
84f7f7c8b5Sdyoung 						  dbsm(bswms2, t, h, o, p, c)
85f7f7c8b5Sdyoung 
86f7f7c8b5Sdyoung #define bus_space_read_region_2(t, h, o, p, c)	  dbsm(bsrr2, t, h, o, p, c)
87f7f7c8b5Sdyoung #define bus_space_write_region_2(t, h, o, p, c)	  dbsm(bswr2, t, h, o, p, c)
88f7f7c8b5Sdyoung 
89f7f7c8b5Sdyoung #define bus_space_read_region_stream_2(t, h, o, p, c) \
90f7f7c8b5Sdyoung 						  dbsm(bsrrs2, t, h, o, p, c)
91f7f7c8b5Sdyoung 
92f7f7c8b5Sdyoung #define bus_space_write_region_stream_2(t, h, o, p, c) \
93f7f7c8b5Sdyoung 						  dbsm(bswrs2, t, h, o, p, c)
94f7f7c8b5Sdyoung 
95f7f7c8b5Sdyoung #define bus_space_set_region_2(t, h, o, v, c)	  dbss(bssr2, t, h, o, v, c)
96f7f7c8b5Sdyoung #define bus_space_copy_region_2(t, h, o, g, q, c) dbss(bscr2, t, h, o, g, q, c)
97f7f7c8b5Sdyoung 
98f7f7c8b5Sdyoung /* 4: Fake 32-bit macros */
99f7f7c8b5Sdyoung 
100f7f7c8b5Sdyoung #define bus_space_read_4(t, h, o) \
101f7f7c8b5Sdyoung 	(panic("bus_space_read_4 not implemented"), 0)
102f7f7c8b5Sdyoung 
103f7f7c8b5Sdyoung #define bus_space_write_4(t, h, o, v) \
104f7f7c8b5Sdyoung 	panic("bus_space_write_4 not implemented")
105f7f7c8b5Sdyoung 
106f7f7c8b5Sdyoung #define bus_space_read_stream_4(t, h, o) \
107f7f7c8b5Sdyoung 	(panic("bus_space_read_stream_4 not implemented"), 0)
108f7f7c8b5Sdyoung 
109f7f7c8b5Sdyoung #define bus_space_write_stream_4(t, h, o, v) \
110f7f7c8b5Sdyoung 	panic("bus_space_read_stream_4 not implemented")
111f7f7c8b5Sdyoung 
112f7f7c8b5Sdyoung #define bus_space_read_multi_4(t, h, o, p, c) \
113f7f7c8b5Sdyoung 	panic("bus_space_read_multi_4 not implemented")
114f7f7c8b5Sdyoung 
115f7f7c8b5Sdyoung #define bus_space_write_multi_4(t, h, o, p, c) \
116f7f7c8b5Sdyoung 	panic("bus_space_write_multi_4 not implemented")
117f7f7c8b5Sdyoung 
118f7f7c8b5Sdyoung #define bus_space_read_multi_stream_4(t, h, o, p, c) \
119f7f7c8b5Sdyoung 	panic("bus_space_read_multi_stream_4 not implemented")
120f7f7c8b5Sdyoung 
121f7f7c8b5Sdyoung #define bus_space_write_multi_stream_4(t, h, o, p, c) \
122f7f7c8b5Sdyoung 	panic("bus_space_write_multi_stream_4 not implemented")
123f7f7c8b5Sdyoung 
124f7f7c8b5Sdyoung #define bus_space_read_region_stream_4(t, h, o, p, c) \
125f7f7c8b5Sdyoung 	panic("bus_space_read_region_stream_4 not implemented")
126f7f7c8b5Sdyoung 
127f7f7c8b5Sdyoung #define bus_space_write_region_stream_4(t, h, o, p, c) \
128f7f7c8b5Sdyoung 	panic("bus_space_write_region_stream_4 not implemented")
129f7f7c8b5Sdyoung 
130f7f7c8b5Sdyoung /*
131f7f7c8b5Sdyoung  * Bus read/write barrier methods.
132f7f7c8b5Sdyoung  *
133f7f7c8b5Sdyoung  *      void bus_space_barrier __P((bus_space_tag_t tag,
134f7f7c8b5Sdyoung  *          bus_space_handle_t bsh, bus_size_t offset,
135f7f7c8b5Sdyoung  *          bus_size_t len, int flags));
136f7f7c8b5Sdyoung  *
137f7f7c8b5Sdyoung  * Note: the 680x0 does not currently require barriers, but we must
138f7f7c8b5Sdyoung  * provide the flags to MI code.
139f7f7c8b5Sdyoung  */
140f7f7c8b5Sdyoung #define bus_space_barrier(t, h, o, l, f)        \
141f7f7c8b5Sdyoung         ((void)((void)(t), (void)(h), (void)(o), (void)(l), (void)(f)))
142f7f7c8b5Sdyoung 
143f7f7c8b5Sdyoung /* Instruction for enforcing reorder protection. */
144*cde8f271Sriastradh #define amiga_bus_reorder_protect() __asm volatile("eieio" ::: "memory")
145f7f7c8b5Sdyoung 
146f7f7c8b5Sdyoung #endif /* _AMIGAPPC_BUS_FUNCS_H_ */
147