xref: /netbsd-src/sys/arch/x68k/dev/mfp.h (revision 274254cdae52594c1aa480a736aef78313d15c9c)
1 /*	$NetBSD: mfp.h,v 1.8 2009/01/17 10:02:23 isaki Exp $	*/
2 
3 /*
4  *
5  * Copyright (c) 1998 NetBSD Foundation, Inc.
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  * 3. All advertising materials mentioning features or use of this software
17  *    must display the following acknowledgement:
18  *      This product includes software developed by Charles D. Cranor and
19  *      Washington University.
20  * 4. The name of the author may not be used to endorse or promote products
21  *    derived from this software without specific prior written permission.
22  *
23  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
24  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
25  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
26  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
27  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
28  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
32  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33  */
34 
35 #define MFP_ADDR	0x00e88000
36 #define MFP_INTR	0x40
37 
38 struct mfp_softc {
39 	bus_space_tag_t	sc_bst;
40 	bus_space_handle_t	sc_bht;
41 	int		sc_intr;
42 };
43 
44 /*
45  * MFP registers
46  */
47 #define MFP_GPIP	0x01
48 #define MFP_AER		0x03
49 #define MFP_DDR		0x05
50 #define MFP_IERA	0x07
51 #define MFP_IERB	0x09
52 #define MFP_IPRA	0x0b
53 #define MFP_IPRB	0x0d
54 #define MFP_ISRA	0x0f
55 #define MFP_ISRB	0x11
56 #define MFP_IMRA	0x13
57 #define MFP_IMRB	0x15
58 #define MFP_VR		0x17
59 #define MFP_TACR	0x19
60 #define MFP_TIMERA_STOP  0
61 #define MFP_TIMERA_RESET 0x10
62 #define MFP_TBCR	0x1b
63 #define MFP_TIMERB_STOP  0
64 #define MFP_TIMERB_RESET 0x10
65 #define MFP_TCDCR	0x1d
66 #define MFP_TADR	0x1f
67 #define MFP_TBDR	0x21
68 #define MFP_TCDR	0x23
69 #define MFP_TDDR	0x25
70 #define MFP_UCR		0x29
71 #define MFP_UCR_EVENP		0x02
72 #define MFP_UCR_PARENB		0x04
73 #define MFP_UCR_SYNCMODE	0x00
74 #define MFP_UCR_ONESB		0x08
75 #define MFP_UCR_1P5SB		0x10
76 #define MFP_UCR_TWOSB		0x18
77 #define MFP_UCR_RW_5		0x60
78 #define MFP_UCR_RW_6		0x40
79 #define MFP_UCR_RW_7		0x20
80 #define MFP_UCR_RW_8		0x00
81 #define MFP_UCR_CLKX16		0x80
82 #define MFP_RSR		0x2b
83 #define MFP_RSR_BF		0x80
84 #define MFP_RSR_OE		0x40
85 #define MFP_RSR_PE		0x20
86 #define MFP_RSR_FE		0x10
87 #define MFP_RSR_SS		0x02
88 #define MFP_RSR_RE		0x01
89 #define MFP_TSR		0x2d
90 #define MFP_TSR_BE		0x80
91 #define MFP_TSR_TE		0x01
92 #define MFP_UDR		0x2f
93 
94 
95 /*
96  * machine dependent definitions
97  */
98 
99 /* GPIP port bitmap */
100 #define MFP_GPIP_HSYNC		0x80
101 #define MFP_GPIP_CRTC		0x40
102 #define MFP_GPIP_UNUSED1	0x20
103 #define MFP_GPIP_VDISP		0x10
104 #define MFP_GPIP_OPM		0x08
105 #define MFP_GPIP_FRONT_SWITCH	0x04
106 #define MFP_GPIP_EXPWON		0x02
107 #define MFP_GPIP_RTC_ALARM	0x01
108 
109 /* interrupt A */
110 #define MFP_INTR_HSYNC		0x80
111 #define MFP_INTR_CRTC		0x40
112 #define MFP_INTR_TIMER_A	0x20
113 #define MFP_INTR_RCV_FULL	0x10
114 #define MFP_INTR_RCV_ERROR	0x08
115 #define MFP_INTR_XMIT_EMPTY	0x04
116 #define MFP_INTR_XMIT_ERROR	0x02
117 #define MFP_INTR_TIMER_B	0x01
118 
119 /* interrupt B */
120 #define MFP_INTR_VDISP		0x40
121 #define MFP_INTR_TIMER_C	0x20
122 #define MFP_INTR_TIMER_D	0x10
123 #define MFP_INTR_OPM		0x08
124 #define MFP_INTR_FRONT_SWITCH	0x04
125 #define MFP_INTR_EXPWON		0x02
126 #define MFP_INTR_RTC_ALARM	0x01
127 
128 
129 /* XXX */
130 #include <arch/x68k/dev/intiovar.h>
131 #define mfp_base	((volatile uint8_t *)IIOV(MFP_ADDR))
132 #define mfp_set_aer(a) \
133 	mfp_base[MFP_AER] = ((u_int8_t) (a))
134 #define mfp_set_ddr(a) \
135 	mfp_base[MFP_DDR] = ((u_int8_t) (a))
136 #define mfp_set_iera(a) \
137 	mfp_base[MFP_IERA] = ((u_int8_t) (a))
138 #define mfp_set_ierb(a) \
139 	mfp_base[MFP_IERB] = ((u_int8_t) (a))
140 #define mfp_set_ipra(a) \
141 	mfp_base[MFP_IPRA] = ((u_int8_t) (a))
142 #define mfp_set_iprb(a) \
143 	mfp_base[MFP_IPRB] = ((u_int8_t) (a))
144 #define mfp_set_isra(a) \
145 	mfp_base[MFP_ISRA] = ((u_int8_t) (a))
146 #define mfp_set_isrb(a) \
147 	mfp_base[MFP_ISRB] = ((u_int8_t) (a))
148 #define mfp_set_imra(a) \
149 	mfp_base[MFP_IMRA] = ((u_int8_t) (a))
150 #define mfp_set_imrb(a) \
151 	mfp_base[MFP_IMRB] = ((u_int8_t) (a))
152 #define mfp_set_vr(a) \
153 	mfp_base[MFP_VR] = ((u_int8_t) (a))
154 #define mfp_set_tacr(a) \
155 	mfp_base[MFP_TACR] = ((u_int8_t) (a))
156 #define mfp_set_tbcr(a) \
157 	mfp_base[MFP_TBCR] = ((u_int8_t) (a))
158 #define mfp_set_tcdcr(a) \
159 	mfp_base[MFP_TCDCR] = ((u_int8_t) (a))
160 #define mfp_set_tadr(a) \
161 	mfp_base[MFP_TADR] = ((u_int8_t) (a))
162 #define mfp_set_tbdr(a) \
163 	mfp_base[MFP_TBDR] = ((u_int8_t) (a))
164 #define mfp_set_tcdr(a) \
165 	mfp_base[MFP_TCDR] = ((u_int8_t) (a))
166 #define mfp_set_tddr(a) \
167 	mfp_base[MFP_TDDR] = ((u_int8_t) (a))
168 #define mfp_set_ucr(a) \
169 	mfp_base[MFP_UCR] = ((u_int8_t) (a))
170 #define mfp_set_rsr(a) \
171 	mfp_base[MFP_RSR] = ((u_int8_t) (a))
172 #define mfp_set_tsr(a) \
173 	mfp_base[MFP_TSR] = ((u_int8_t) (a))
174 #define mfp_set_udr(a) \
175 	mfp_base[MFP_UDR] = ((u_int8_t) (a))
176 
177 #define mfp_get_gpip() (mfp_base[MFP_GPIP])
178 #define mfp_get_aer() (mfp_base[MFP_AER])
179 #define mfp_get_ddr() (mfp_base[MFP_DDR])
180 #define mfp_get_iera() (mfp_base[MFP_IERA])
181 #define mfp_get_ierb() (mfp_base[MFP_IERB])
182 #define mfp_get_ipra() (mfp_base[MFP_IPRA])
183 #define mfp_get_iprb() (mfp_base[MFP_IPRB])
184 #define mfp_get_isra() (mfp_base[MFP_ISRA])
185 #define mfp_get_isrb() (mfp_base[MFP_ISRB])
186 #define mfp_get_imra() (mfp_base[MFP_IMRA])
187 #define mfp_get_imrb() (mfp_base[MFP_IMRB])
188 #define mfp_get_vr() (mfp_base[MFP_VR])
189 #define mfp_get_tacr() (mfp_base[MFP_TACR])
190 #define mfp_get_tbcr() (mfp_base[MFP_TBCR])
191 #define mfp_get_tcdcr() (mfp_base[MFP_TCDCR])
192 #define mfp_get_tadr() (mfp_base[MFP_TADR])
193 #define mfp_get_tbdr() (mfp_base[MFP_TBDR])
194 #define mfp_get_tcdr() (mfp_base[MFP_TCDR])
195 #define mfp_get_tddr() (mfp_base[MFP_TDDR])
196 #define mfp_get_ucr() (mfp_base[MFP_UCR])
197 #define mfp_get_rsr() (mfp_base[MFP_RSR])
198 #define mfp_get_tsr() (mfp_base[MFP_TSR])
199 #define mfp_get_udr() (mfp_base[MFP_UDR])
200 
201 #define mfp_bit_set(reg,bits) (mfp_base[(reg)] |= (bits))
202 #define mfp_bit_clear(reg,bits) (mfp_base[(reg)] &= (~(bits)))
203 
204 #define mfp_bit_set_gpip(bits) mfp_bit_set(MFP_GPIP, (bits))
205 #define mfp_bit_clear_gpip(bits) mfp_bit_clear(MFP_GPIP, (bits))
206 #define mfp_bit_set_aer(bits) mfp_bit_set(MFP_AER, (bits))
207 #define mfp_bit_clear_aer(bits) mfp_bit_clear(MFP_AER, (bits))
208 #define mfp_bit_set_iera(bits) mfp_bit_set(MFP_IERA, (bits))
209 #define mfp_bit_clear_iera(bits) mfp_bit_clear(MFP_IERA, (bits))
210 #define mfp_bit_set_ierb(bits) mfp_bit_set(MFP_IERB, (bits))
211 #define mfp_bit_clear_ierb(bits) mfp_bit_clear(MFP_IERB, (bits))
212 
213 void mfp_wait_for_hsync(void);
214 int mfp_send_usart(int);
215 int mfp_receive_usart(void);
216