xref: /netbsd/sys/arch/x68k/x68k/iodevice.h (revision 6550d01e)
1 /*	$NetBSD: iodevice.h,v 1.17 2009/01/17 09:20:46 isaki Exp $	*/
2 
3 /*
4  * Copyright (c) 1993, 1994, 1995 Masaru Oki
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  * 3. All advertising materials mentioning features or use of this software
16  *    must display the following acknowledgement:
17  *      This product includes software developed by Masaru Oki.
18  * 4. The name of the author may not be used to endorse or promote products
19  *    derived from this software without specific prior written permission
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
22  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
23  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
24  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
25  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
26  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
30  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 
33 /*
34  * custom CRTC
35  */
36 struct crtc {
37 	unsigned short r00, r01, r02, r03, r04, r05, r06, r07;
38 	unsigned short r08, r09, r10, r11, r12, r13, r14, r15;
39 	unsigned short r16, r17, r18, r19, r20, r21, r22, r23;
40 	char pad0[0x0450];
41 	unsigned short crtctrl;
42 	char pad1[0x1b7e];
43 };
44 
45 /*
46  * custom VIDEO Controller
47  */
48 struct videoc {
49 	unsigned short r0;
50 	char pad1[0x00fe]; unsigned short r1;
51 	char pad2[0x00fe]; unsigned short r2;
52 	char pad3[0x19fe];
53 };
54 
55 /*
56  * Hitachi HD63450 DMA chip
57  */
58 struct dmac {
59 			unsigned char csr;
60 			unsigned char cer;
61 	char pad0[2];	unsigned char dcr;
62 			unsigned char ocr;
63 			unsigned char scr;
64 			unsigned char ccr;
65 	char pad1[2];	unsigned short mtc;
66 			unsigned long mar;
67 	char pad2[4];	unsigned long dar;
68 	char pad3[2];	unsigned short btc;
69 			unsigned long bar;
70 	char pad4[5];	unsigned char niv;
71 	char pad5[1];	unsigned char eiv;
72 	char pad6[1];	unsigned char mfc;
73 	char pad7[3];	unsigned char cpr;
74 	char pad8[3];	unsigned char dfc;
75 	char pad9[7];	unsigned char bfc;
76 	char pada[5];	unsigned char gcr;
77 };
78 
79 /*
80  * MC68901 Multi Function Periferal
81  */
82 struct mfp {
83 	char pad00; unsigned char gpip;
84 #define MFP_GPIP_HSYNC 0x80
85 #define MFP_GPIP_VDISP 0x10
86 	char pad01; unsigned char aer;
87 	char pad02; unsigned char ddr;
88 	char pad03; unsigned char iera;
89 #define MFP_TIMERA_STOP  0
90 #define MFP_TIMERA_RESET 0x10
91 	char pad04; unsigned char ierb;
92 #define MFP_TIMERB_STOP  0
93 #define MFP_TIMERB_RESET 0x10
94 	char pad05; unsigned char ipra;
95 	char pad06; unsigned char iprb;
96 	char pad07; unsigned char isra;
97 	char pad08; unsigned char isrb;
98 	char pad09; unsigned char imra;
99 	char pad0a; unsigned char imrb;
100 	char pad0b; unsigned char vr;
101 	char pad0c; unsigned char tacr;
102 	char pad0d; unsigned char tbcr;
103 	char pad0e; unsigned char tcdcr;
104 	char pad0f; unsigned char tadr;
105 	char pad10; unsigned char tbdr;
106 	char pad11; unsigned char tcdr;
107 	char pad12; unsigned char tddr;
108 	char pad13; unsigned char scr;
109 	char pad14; unsigned char ucr;
110 #define MFP_UCR_EVENP		0x02
111 #define MFP_UCR_PARENB		0x04
112 #define MFP_UCR_SYNCMODE	0x00
113 #define MFP_UCR_ONESB		0x08
114 #define MFP_UCR_1P5SB		0x10
115 #define MFP_UCR_TWOSB		0x18
116 #define MFP_UCR_RW_5		0x60
117 #define MFP_UCR_RW_6		0x40
118 #define MFP_UCR_RW_7		0x20
119 #define MFP_UCR_RW_8		0x00
120 #define MFP_UCR_CLKX16		0x80
121 	char pad15; unsigned char rsr;
122 #define MFP_RSR_BF		0x80
123 #define MFP_RSR_OE		0x40
124 #define MFP_RSR_PE		0x20
125 #define MFP_RSR_FE		0x10
126 #define MFP_RSR_SS		0x02
127 #define MFP_RSR_RE		0x01
128 	char pad16; unsigned char tsr;
129 #define MFP_TSR_BE		0x80
130 #define MFP_TSR_TE		0x01
131 	char pad17; unsigned char udr;
132 	char pad[0x1fd0];
133 };
134 
135 /*
136  * RICOH Real Time Clock RP5C15
137  */
138 union rtc {
139 	struct {
140 		char pad0; unsigned char sec;
141 		char pad1; unsigned char sec10;
142 		char pad2; unsigned char min;
143 		char pad3; unsigned char min10;
144 		char pad4; unsigned char hour;
145 		char pad5; unsigned char hour10;
146 		char pad6; unsigned char week;
147 		char pad7; unsigned char day;
148 		char pad8; unsigned char day10;
149 		char pad9; unsigned char mon;
150 		char pada; unsigned char mon10;
151 		char padb; unsigned char year;
152 		char padc; unsigned char year10;
153 		char padd; unsigned char mode;
154 		char pade; unsigned char test;
155 		char padf; unsigned char reset;
156 		char pad[0x1fe0];
157 	} bank0;
158 	struct {
159 		char pad0; unsigned char clkout;
160 		char pad1; unsigned char adjust;
161 		char pad2; unsigned char al_min;
162 		char pad3; unsigned char al_min10;
163 		char pad4; unsigned char al_hour;
164 		char pad5; unsigned char al_hour10;
165 		char pad6; unsigned char al_week;
166 		char pad7; unsigned char al_day;
167 		char pad8; unsigned char al_day10;
168 		char pad9; unsigned char unused;
169 		char pada; unsigned char ampm;
170 		char padb; unsigned char leep;
171 		char padc; unsigned char unused2;
172 		char padd; unsigned char mode;
173 		char pade; unsigned char test;
174 		char padf; unsigned char reset;
175 		char pad[0x1fe0];
176 	} bank1;
177 };
178 
179 /*
180  * Centronics printer port (output only)
181  */
182 struct centro {
183 	char pad0; unsigned char data;
184 	char pad1; unsigned char strobe;
185 	char pad[0x1ffc];
186 };
187 
188 /*
189  * system control port
190  */
191 struct sysport {
192 	char pad0; unsigned char contrast;
193 	char pad1; unsigned char tvctrl;
194 	char pad2; unsigned char imageunit;
195 	char pad3; unsigned char keyctrl;
196 	char pad4; unsigned char waitctrl; /* XXX: X68030 only */
197 	char pad5; unsigned char mpustat;
198 	char pad6; unsigned char sramwp;
199 	char pad7; unsigned char powoff;
200 	char pad[0x1ff0];
201 };
202 
203 /*
204  * YAMAHA (Operator type-M) chip.
205  */
206 struct opm {
207 	char pad0; unsigned char reg;
208 	char pad1; unsigned char data;
209 	char pad[0x1ffc];
210 };
211 
212 /*
213  * OKI MSM6258V ADPCM chip.
214  */
215 struct adpcm {
216 	char pad0; unsigned char stat;
217 	char pad1; unsigned char data;
218 	char pad[0x1ffc];
219 };
220 
221 /*
222  * NEC 72065 Floppy Disk Controller
223  */
224 struct fdc {
225 	char pad0; unsigned char stat;
226 	char pad1; unsigned char data;
227 	char pad2; unsigned char drvstat;
228 	char pad3; unsigned char select;
229 	char pad[0x1ff8];
230 };
231 
232 /*
233  * FUJITSU SCSI Protocol Controller MB89352
234  */
235 struct spc {
236 	char pad00; unsigned char bdid;
237 	char pad02; unsigned char sctl;
238 	char pad04; unsigned char scmd;
239 	char pad06; unsigned char tmod;
240 	char pad08; unsigned char ints;
241 	char pad0a; unsigned char psns;
242 	char pad0c; unsigned char ssts;
243 	char pad0e; unsigned char serr;
244 	char pad10; unsigned char pctl;
245 	char pad12; unsigned char mbc;
246 	char pad14; unsigned char dreg;
247 	char pad16; unsigned char temp;
248 	char pad18; unsigned char tch;
249 	char pad1a; unsigned char tcm;
250 	char pad1c; unsigned char tcl;
251 	char pad1e;
252 	char pad1f;
253 };
254 
255 /*
256  * Zilog scc.
257  */
258 struct zschan {
259 	unsigned char	zc_xxx0;
260 	unsigned char	zc_csr;		/* control and status, and indirect access */
261 	unsigned char	zc_xxx1;
262 	unsigned char	zc_data;	/* data */
263 };
264 
265 struct zsdevice {
266 	/* Yes, they are backwards. */
267 	struct zschan zs_chan_b;
268 	struct zschan zs_chan_a;
269 	char pad4; unsigned char bstat;   /* external only        : 2 bytes */
270 	char pad[6];			  /* ---                  : 6 bytes */
271 };
272 
273 struct ppi8255 {
274 	char pad0; unsigned char porta;
275 	char pad1; unsigned char portb;
276 	char pad2; unsigned char portc;
277 	char pad3; unsigned char ctrl;
278 	char pad[0x1ff8];
279 };
280 
281 struct ioctlr {
282 	char pad0; unsigned char intr;
283 	char pad1; unsigned char vect;
284 	char pad[0x1ffc];
285 };
286 
287 /*
288  * YAMAHA YM3802 MIDI chip.
289  */
290 struct midi {
291 	char pad0; unsigned char r00;
292 	char pad1; unsigned char r01;
293 	char pad2; unsigned char r02;
294 	char pad3; unsigned char r03;
295 	char pad4; unsigned char rn4;
296 	char pad5; unsigned char rn5;
297 	char pad6; unsigned char rn6;
298 	char pad7; unsigned char rn7;
299 };
300 
301 struct IODEVICE
302 {
303 	unsigned short gvram[0x100000]; /* 0x00c00000 */
304 	unsigned char  tvram[0x080000]; /* 0x00e00000 */
305 	struct crtc io_crtc;		/* 0x00e80000 */
306 	unsigned short gpalet[0x00100]; /* 0x00e82000 */
307 	unsigned short tpalet[0x00100]; /* 0x00e82200 */
308 	struct videoc io_videoc;	/* 0x00e82400 */
309 	struct dmac io_dma[4];		/* 0x00e84000 */
310 	char  dmapad[0x1f00];
311 	char areapad[0x2000];		/* 0x00e86000 */
312 	struct mfp io_mfp;		/* 0x00e88000 */
313 	union rtc io_rtc;		/* 0x00e8a000 */
314 	struct centro io_printer;	/* 0x00e8c000 */
315 	struct sysport io_sysport;	/* 0x00e8e000 */
316 	struct opm io_opm;		/* 0x00e90000 */
317 	struct adpcm io_adpcm;
318 	struct fdc io_fdc;
319 	char spcpad1[0x20];		/* 0x00e96000 */
320 	struct spc io_inspc;		/* 0x00e96020 */
321 	char spcpad2[0x1fc0];
322 	struct zsdevice io_inscc;
323 	char sccpad[0x1ff0];
324 	struct ppi8255 io_joyport;
325 	struct ioctlr io_ctlr;		/* 0x00e9c000 */
326 	char fpcprsv[0x2000];		/* 0x00e9e000 */
327 	struct spc io_exspc;		/* 0x00ea0000 */
328 	char exscsirom[0x1fe0];		/* */
329 	char sysiorsv1[0xda00];		/* 0x00ea2000 */
330 	struct midi io_midi[2];		/* 0x00eafa00 */
331 	char sysiorsv2[0x1e0];		/* 0x00eafa20 */
332 	struct zsdevice io_exscc[4];	/* 0x00eafc00 */
333 	char sysiorsv3[0x3c0];		/* 0x00eafc40 */
334 	char sprite[0x10000];		/* 0x00eb0000 */
335 	char usriorsv1[0xe000];		/* 0x00ec0000 */
336 	char neptune[0x400];		/* 0x00ece000 */
337 	char usriorsv2[0x1c00];		/* 0x00ece400 */
338 	char io_sram[0x10000];		/* 0x00ed0000 */
339 	char rsv[0x1ff00];		/* 0x00ee0000 */
340 	char psx16550[0x00020];		/* 0x00efff00 */
341 	char rsv2[0x000e0];		/* 0x00efff20 */
342 	char cgrom0_16x16[0x05e00];	/* 0x00f00000 */
343 	char cgrom1_16x16[0x17800];	/* 0x00f05e00 */
344 	char cgrom2_16x16[0x1b2c0];	/* 0x00f1d600 */
345 	char cgrom__rsv1 [0x01740];	/* 0x00f388c0 */
346 	char cgrom0_8x8  [0x00800];	/* 0x00f3a000 */
347 	char cgrom0_8x16 [0x01000];	/* 0x00f3a800 */
348 	char cgrom0_12x12[0x01800];	/* 0x00f3b800 */
349 	char cgrom0_12x24[0x03000];	/* 0x00f3d000 */
350 	char cgrom0_24x24[0x0d380];	/* 0x00f40000 */
351 	char cgrom1_24x24[0x34e00];	/* 0x00f4d380 */
352 	char cgrom2_24x24[0x3d230];	/* 0x00f82180 */
353 	char cgrom__rsv2 [0x00c50];	/* 0x00fbf3b0 */
354 	char inscsirom[0x2000];		/* 0x00fc0000 */
355 };
356 
357 #if defined(_KERNEL) && !defined(LOCORE)
358 extern volatile struct IODEVICE *IODEVbase;
359 #endif
360