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