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