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