Initial import from FreeBSD RELENG_4:
[dragonfly.git] / sys / platform / pc32 / isa / sound / iwdefs.h
1 /*#######################################################################*/
2 /*  FILE   : iwdefs.h*/
3 /**/
4 /*  REMARKS: This file contains all defines used by DDK functions. It*/
5 /*           should be included by all applications and should be*/
6 /*           referenced by programmers to make their code easy to read*/
7 /*           and understand.*/
8 /**/
9 /*  UPDATE: 3/21/95*/
10 /*          7/10/95 --- added #def DRAM_HOLES*/
11 /*#######################################################################*/
12 #ifndef IWDEFS
13 #define IWDEFS
14 /*#######################################################################*/
15 /**/
16 /* Macros for use in loading Synth Addr Regs*/
17 /**/
18 /*#######################################################################*/
19 #define ADDR_HIGH(x)    (short)(x>>7)
20 #define ADDR_LOW(x)     (short)(x<<9)
21 /*#######################################################################*/
22 /**/
23 /*     Defines for DMA Controllers*/
24 /**/
25 /*#######################################################################*/
26 /* DMA Controler #1 (8-bit controller) */
27 #define DMA1_STAT         0x08          /* read status register */
28 #define DMA1_WCMD         0x08          /* write command register */
29 #define DMA1_WREQ         0x09          /* write request register */
30 #define DMA1_SNGL         0x0A          /* write single bit register */
31 #define DMA1_MODE         0x0B          /* write mode register */
32 #define DMA1_CLRFF        0x0C          /* clear byte ptr flip/flop */
33 #define DMA1_MCLR         0x0D          /* master clear register */
34 #define DMA1_CLRM         0x0E          /* clear mask register */
35 #define DMA1_WRTALL       0x0F          /* write all mask register */
36
37 /* DMA Controler #2 (16-bit controller) */
38 #define DMA2_STAT         0xD0          /* read status register */
39 #define DMA2_WCMD         0xD0          /* write command register */
40 #define DMA2_WREQ         0xD2          /* write request register */
41 #define DMA2_SNGL         0xD4          /* write single bit register */
42 #define DMA2_MODE         0xD6          /* write mode register */
43 #define DMA2_CLRFF        0xD8          /* clear byte ptr flip/flop */
44 #define DMA2_MCLR         0xDA          /* master clear register */
45 #define DMA2_CLRM         0xDC          /* clear mask register */
46 #define DMA2_WRTALL       0xDE          /* write all mask register */
47
48 #define DMA0_ADDR         0x00          /* chan 0 base adddress */
49 #define DMA0_CNT          0x01          /* chan 0 base count */
50 #define DMA1_ADDR         0x02          /* chan 1 base adddress */
51 #define DMA1_CNT          0x03          /* chan 1 base count */
52 #define DMA2_ADDR         0x04          /* chan 2 base adddress */
53 #define DMA2_CNT          0x05          /* chan 2 base count */
54 #define DMA3_ADDR         0x06          /* chan 3 base adddress */
55 #define DMA3_CNT          0x07          /* chan 3 base count */
56 #define DMA4_ADDR         0xC0          /* chan 4 base adddress */
57 #define DMA4_CNT          0xC2          /* chan 4 base count */
58 #define DMA5_ADDR         0xC4          /* chan 5 base adddress */
59 #define DMA5_CNT          0xC6          /* chan 5 base count */
60 #define DMA6_ADDR         0xC8          /* chan 6 base adddress */
61 #define DMA6_CNT          0xCA          /* chan 6 base count */
62 #define DMA7_ADDR         0xCC          /* chan 7 base adddress */
63 #define DMA7_CNT          0xCE          /* chan 7 base count */
64
65 #define DMA0_PAGE         0x87          /* chan 0 page register (refresh)*/
66 #define DMA1_PAGE         0x83          /* chan 1 page register */
67 #define DMA2_PAGE         0x81          /* chan 2 page register */
68 #define DMA3_PAGE         0x82          /* chan 3 page register */
69 #define DMA4_PAGE         0x8F          /* chan 4 page register (unusable)*/
70 #define DMA5_PAGE         0x8B          /* chan 5 page register */
71 #define DMA6_PAGE         0x89          /* chan 6 page register */
72 #define DMA7_PAGE         0x8A          /* chan 7 page register */
73 /*#######################################################################*/
74 /**/
75 /* Defines for register UISR (Interrupt Status)*/
76 /**/
77 /*#######################################################################*/
78 #define MIDI_TX_IRQ       0x01
79 #define MIDI_RX_IRQ       0x02
80 #define ALIB_TIMER1_IRQ   0x04
81 #define ALIB_TIMER2_IRQ   0x08
82 #define _UASBCI           0x45          /* UASBCI index */
83 #define SAMPLE_CONTROL    0x49          /* Not used by IW */
84 #define SET_VOICES        0x0E
85 #define WAVETABLE_IRQ     0x20
86 #define ENVELOPE_IRQ      0x40
87 #define DMA_TC_IRQ        0x80
88 /*#######################################################################*/
89 /**/
90 /*            Synthesizer-related defines*/
91 /**/
92 /*#######################################################################*/
93 #define GEN_INDEX         0x03           /* IGIDX offset into p3xr */
94 #define VOICE_SELECT      0x02           /* SVSR offset into p3xr */
95 #define VOICE_IRQS        0x8F           /* SVII index (read) */
96 #define _URSTI            0x4C           /* URSTI index */
97 #define GF1_SET           0x01           /* URSTI[0] */
98 #define GF1_OUT_ENABLE    0x02           /* URSTI[1] */
99 #define GF1_IRQ_ENABLE    0x04           /* URSTI[2] */
100 #define GF1_RESET         0xFE           /* URSTI[0]=0 */
101 #define VOICE_VOLUME_IRQ  0x04           /* SVII[2] */
102 #define VOICE_WAVE_IRQ    0x08           /* SVII[3] */
103 #define VC_IRQ_ENABLE     0x20           /* SACI[5] or SVCI[5]*/
104 #define VOICE_NUMBER      0x1F           /* Mask for SVII[4:0] */
105 #define VC_IRQ_PENDING    0x80           /* SACI[7] or SVCI[7] */
106 #define VC_DIRECT         0x40           /* SACI[6] or SVCI[6]*/
107 #define VC_DATA_WIDTH     0x04           /* SACI[2] */
108 #define VOICE_STOP        0x02           /* SACI[1] */
109 #define VOICE_STOPPED     0x01           /* SACI[0] */
110 #define VOLUME_STOP       0x02           /* SVCI[1] */
111 #define VOLUME_STOPPED    0x01           /* SVCI[0] */
112 #define VC_ROLLOVER       0x04           /* SVCI[2] */
113 #define VC_LOOP_ENABLE    0x08           /* SVCI[3] or SACI[3]*/
114 #define VC_BI_LOOP        0x10           /* SVCI[4] or SACI[4]*/
115 #define VOICE_OFFSET      0x20           /* SMSI[5] */
116 #define VOLUME_RATE0      0x00           /* SVRI[7:6]=(0,0) */
117 #define VOLUME_RATE1      0x40           /* SVRI[7:6]=(0,1) */
118 #define VOLUME_RATE2      0x80           /* SVRI[7:6]=(1,0) */
119 #define VOLUME_RATE3      0xC0           /* SVRI[7:6]=(1,1) */
120 /*#######################################################################*/
121 /**/
122 /*         Power-Mode Control Defines*/
123 /**/
124 /*#######################################################################*/
125 #define SHUT_DOWN         0x7E           /* shuts InterWave down */
126 #define POWER_UP          0xFE           /* enables all modules */
127 #define CODEC_PWR_UP      0x81           /* enables Codec Analog Ckts */
128 #define CODEC_PWR_DOWN    0x01           /* disables Codec Analog Ckts */
129 #define CODEC_REC_UP      0x82           /* Enables Record Path */
130 #define CODEC_REC_DOWN    0x02           /* Disables Record Path */
131 #define CODEC_PLAY_UP     0x84           /* Enables Playback Path */
132 #define CODEC_PLAY_DOWN   0x04           /* Disables Playback Path */
133 #define CODEC_IRQ_ENABLE  0x02           /* CEXTI[2] */
134 #define CODEC_TIMER_IRQ   0x40           /* CSR3I[6] */
135 #define CODEC_REC_IRQ     0x20           /* CSR3I[5] */
136 #define CODEC_PLAY_IRQ    0x10           /* CSR3I[4] */
137 #define CODEC_INT         0x01           /* CSR1R[0] */
138 #define MONO_INPUT        0x80           /* CMONOI[7] */
139 #define MONO_OUTPUT       0x40           /* CMONOI[6] */
140 #define MIDI_UP           0x88           /* Enables MIDI ports */
141 #define MIDI_DOWN         0x08           /* Disables MIDI ports */
142 #define SYNTH_UP          0x90           /* Enables Synthesizer */
143 #define SYNTH_DOWN        0x10           /* Disables Synthesizer */
144 #define LMC_UP            0xA0           /* Enables LM Module */
145 #define LMC_DOWN          0x20           /* Disbales LM Module */
146 #define XTAL24_UP         0xC0           /* Enables 24MHz Osc */
147 #define XTAL24_DOWN       0x40           /* Disables 24MHz Osc */
148 #define _PPWRI            0xF2           /* PPWRI index */
149 #define PLAY              0x0F
150 #define REC               0x1F
151 #define LEFT_AUX1_INPUT   0x02
152 #define RIGHT_AUX1_INPUT  0x03
153 #define LEFT_AUX2_INPUT   0x04
154 #define RIGHT_AUX2_INPUT  0x05
155 #define LEFT_LINE_IN      0x12
156 #define RIGHT_LINE_IN     0x13
157 #define LEFT_LINE_OUT     0x19
158 #define RIGHT_LINE_OUT    0x1B
159 #define LEFT_SOURCE       0x00
160 #define RIGHT_SOURCE      0x01
161 #define LINE_IN           0x00
162 #define AUX1_IN           0x40
163 #define MIC_IN            0x80
164 #define MIX_IN            0xC0
165 #define LEFT_DAC          0x06
166 #define RIGHT_DAC         0x07
167 #define LEFT_MIC_IN       0x16
168 #define RIGHT_MIC_IN      0x17
169 #define _CUPCTI           0x0E
170 #define _CLPCTI           0x0F
171 #define _CURCTI           0x1E
172 #define _CLRCTI           0x1F
173 #define _CLAX1I           0x02
174 #define _CRAX1I           0x03
175 #define _CLAX2I           0x04
176 #define _CRAX2I           0x05
177 #define _CLLICI           0x12
178 #define _CRLICI           0x13
179 #define _CLOAI            0x19
180 #define _CROAI            0x1B
181 #define _CLICI            0x00
182 #define _CRICI            0x01
183 #define _CLDACI           0x06
184 #define _CRDACI           0x07
185 #define _CPVFI            0x1D
186 /*#######################################################################*/
187 /**/
188 /* Defines for DMA transfer related operations*/
189 /**/
190 /*#######################################################################*/
191 #define MAX_DMA         0x07
192 #define DMA_DECREMENT   0x20
193 #define AUTO_INIT       0x10
194 #define DMA_READ        0x01
195 #define DMA_WRITE       0x02
196 #define AUTO_READ       0x03
197 #define AUTO_WRITE      0x04
198 #define IDMA_INV        0x0400
199 #define IDMA_WIDTH_16   0x0100
200 /*#######################################################################*/
201 /**/
202 /* Bits for dma flags within a DMA structure.*/
203 /**/
204 /*#######################################################################*/
205 #define DMA_USED        0x0001
206
207 #define DMA_SPLIT       0x0004    /* DMA Controller Page Crossover*/
208 #define CODEC_DMA       0x0008    /* Indicates a Codec DMA*/
209 #define DMA_WAIT        0x0020    /* Wait for DMA xfer to complete*/
210 #define DMA_DOWN        0x0040    /* DMA xfer from PC to InterWave*/
211 #define DRAM_HOLES      0x8000    /* Indicates Non-contiguous RAM configuration*/
212 #define DMA_UP          0xFFBF    /* DMA xfer from InterWave to PC */
213 /*#######################################################################*/
214 /**/
215 /* Bits for DMA Control Register (LDMACI)*/
216 /**/
217 /*#######################################################################*/
218 #define _LDMACI         0x41  /* Index */
219 #define DMA_INV         0x80
220 #define DMA_IRQ_ENABLE  0x20
221 #define DMA_IRQ_PENDING 0x40  /* on reads of LDMACI[6] */
222 #define DMA_DATA_16     0x40  /* on writes to LDMACI[6] */
223 #define DMA_WIDTH_16    0x04  /* 1=16-bit, 0=8-bit (DMA channel) */
224 #define DMA_RATE        0x18  /* 00=fastest,...,11=slowest */
225 #define DMA_UPLOAD      0x02  /* From LM to PC */
226 #define DMA_ENABLE      0x01
227 /*#######################################################################*/
228 /**/
229 /*    DMA Transfer Rates*/
230 /**/
231 /*#######################################################################*/
232 #define DMA_R0          0xE7    /* Fastest (use ANDing to set) */
233 #define DMA_R1          0x08
234 #define DMA_R2          0x10
235 #define DMA_R3          0x18    /* Slowest */
236 /*#######################################################################*/
237 /**/
238 /*    Interrupt Controller Defines*/
239 /**/
240 /*#######################################################################*/
241 #define IW_HANDLERS_ON  0x80    /* Flag for when IVT is modified */
242 #define EOI             0x20
243 #define OCR1            0x20    /* 8259-1 Operation Control Reg. */
244 #define IMR1            0x21    /* 8259-1 Interrupt Mask Reg. */
245 #define OCR2            0xA0    /* 8259-2 Operation Control Reg. */
246 #define IMR2            0xA1    /* 8259-2 Interrupt Mask Reg. */
247 #define IRQ0_UNMASK     0xFE    /* Mask to clear bit 0 in IMR */
248 #define IRQ1_UNMASK     0xFD
249 #define IRQ2_UNMASK     0xFB
250 #define IRQ3_UNMASK     0xF7
251 #define IRQ4_UNMASK     0xEF
252 #define IRQ5_UNMASK     0xDF
253 #define IRQ6_UNMASK     0xBF
254 #define IRQ7_UNMASK     0x7F
255 #define IRQ8_UNMASK     0xFE    /* Mask to clear bit 0 in IMR */
256 #define IRQ9_UNMASK     0xFD
257 #define IRQ10_UNMASK    0xFB
258 #define IRQ11_UNMASK    0xF7
259 #define IRQ12_UNMASK    0xEF
260 #define IRQ13_UNMASK    0xDF
261 #define IRQ14_UNMASK    0xBF
262 #define IRQ15_UNMASK    0x7F
263 #define IRQ0_EOI        0x60    /* Spec EOI for IRQ0 */
264 #define IRQ1_EOI        0x61
265 #define IRQ2_EOI        0x62
266 #define IRQ3_EOI        0x63
267 #define IRQ4_EOI        0x64
268 #define IRQ5_EOI        0x65
269 #define IRQ6_EOI        0x66
270 #define IRQ7_EOI        0x67
271 #define IRQ8_EOI        0x60    /* Spec EOI for IRQ8 */
272 #define IRQ9_EOI        0x61
273 #define IRQ10_EOI       0x62
274 #define IRQ11_EOI       0x63
275 #define IRQ12_EOI       0x64
276 #define IRQ13_EOI       0x65
277 #define IRQ14_EOI       0x66
278 #define IRQ15_EOI       0x67
279 /*#######################################################################*/
280 /**/
281 /*     Generic defines*/
282 /**/
283 /*#######################################################################*/
284 /**/
285 #define MEMBANK0      0L                 /* Addr of Memory Bank 0*/
286 #define MEMBANK1      4194304L           /* Addr of Memory Bank 1*/
287 #define MEMBANK2      8388608L           /* Addr of Memory Bank 2*/
288 #define MEMBANK3     12582912L           /* Addr of Memory Bank 3*/
289 #define IRQ_UNAVAIL       0x0000
290 #define IRQ_AVAIL         0x0001
291 #define IRQ_USED          0x0002
292 #define MAX_IRQ           16
293 #define NEXT_OFFSET       0L
294 #define PREV_OFFSET       4L
295 #define SIZE_OFFSET       8L
296 #define MEM_HEADER_SIZE  12L
297 #define GF1_POOL         (usigned long)(256L*1024L)
298 #define GUS_MODE          0x00           /* SGMI[0]=0*/
299 #define ENH_MODE          0x01           /* SGMI[0]=1*/
300 #define ENABLE_LFOS       0x02           /* SGMI[1]*/
301 #define NO_WAVETABLE      0x04           /* SGMI[2]*/
302 #define RAM_TEST          0x08           /* SGMI[3]*/
303 #define TRUE              1
304 #define FALSE             0
305 #define ON                1
306 #define OFF               0
307 #define AUDIO             0
308 #define EXT               1
309 #define GAME              2
310 #define EMULATION         3
311 #define MPU401            4
312 #define AUDIO_EXT         2
313 #define ALLOC_FAILURE     0xFFFFFFFFL
314 #define MEM_EXHAUSTED     0xFFFFFFFFL
315 #define RAM_MAX           16777216L
316 #define RAM_STEP          65536L
317 #define BANK_MAX          4194304L
318 #define ILLEGAL_SIZE      -1
319 #define MEM_INIT           1
320 #define NO_NEXT           0xFFFFFFFFL
321 #define NO_PREV           NO_NEXT
322 #define DMA_BAD_ADDR     -1
323 #define DMA_ON           -1
324 #define DMA_OK            1
325 #define MIDI_TX_IRQ       0x01
326 #define MIDI_RX_IRQ       0x02
327 #define ALIB_TIMER1_IRQ   0x04
328 #define ALIB_TIMER2_IRQ   0x08
329 #define WAVETABLE_IRQ     0x20
330 #define ENVELOPE_IRQ      0x40
331 #define DMA_TC_IRQ        0x80
332 #define DMA_SET_MASK      0x04
333 #define PNP_DATA_RDY       1          /* PRESSI[0] */
334 #define IWAVE_ABSENT      2
335 #define IWAVE_OPEN        4
336 #define IWAVE_OK          5
337 #define BAD_VOICES        -1
338 #define PNP_ABSENT        0xFF        /* No PNP cards in system */
339 #define DPMI_INT          0x31
340 #define _PCCCI            0x02
341 #define _PCSNI            0x06
342 #define _PIDXR            0x279
343 #define _PNPWRP           0xA79
344 #define _LDSALI           0x42
345 #define _LDSAHI           0x50
346 #define _LMALI            0x43
347 #define _LMAHI            0x44
348 #define _LMCFI            0x52
349 #define _LMCI             0x53
350 #define _LDIBI            0x58
351 #define _LDICI            0x57
352 #define _LMSBAI           0x51
353 #define _SVCI_RD          0x8D
354 #define _SVCI_WR          0x0D
355 #define _SACI_RD          0x80
356 #define _SACI_WR          0x00
357 #define _SALI_RD          0x8B
358 #define _SALI_WR          0x0B
359 #define _SAHI_RD          0x8A
360 #define _SAHI_WR          0x0A
361 #define _SASHI_RD         0x82
362 #define _SASHI_WR         0x02
363 #define _SASLI_RD         0x83
364 #define _SASLI_WR         0x03
365 #define _SAEHI_RD         0x84
366 #define _SAEHI_WR         0x04
367 #define _SAELI_RD         0x85
368 #define _SAELI_WR         0x05
369 #define _SVRI_RD          0x86
370 #define _SVRI_WR          0x06
371 #define _SVSI_RD          0x87
372 #define _SVSI_WR          0x07
373 #define _SVEI_RD          0x88
374 #define _SVEI_WR          0x08
375 #define _SVLI_RD          0x89
376 #define _SVLI_WR          0x09
377 #define _SROI_RD          0x8C
378 #define _SROI_WR          0x0C
379 #define _SLOI_RD          0x93
380 #define _SLOI_WR          0x13
381 #define _SMSI_RD          0x95
382 #define _SMSI_WR          0x15
383 #define _SGMI_RD          0x99
384 #define _SGMI_WR          0x19
385 #define _SFCI_RD          0x81
386 #define _SFCI_WR          0x01
387 #define _SUAI_RD          0x90
388 #define _SUAI_WR          0x10
389 #define _SVII             0x8F          
390 #define _CMODEI           0x0C        /* index for CMODEI */
391 #define _CFIG3I           0x11
392 #define _CFIG2I           0x10
393 #define _CLTIMI           0x14
394 #define _CUTIMI           0x15
395 #define _CSR3I            0x18        /* Index to CSR3I (Interrupt Status) */
396 #define _CEXTI            0x0A        /* Index to External Control Register */
397 #define _CFIG1I           0x09        /* Index to Codec Conf Reg 1 */
398 #define _CSR2I            0x0B        /* Index to Codec Stat Reg 2 */
399 #define _CPDFI            0x08        /* Index to Play Data Format Reg */
400 #define _CRDFI            0x1C        /* Index to Rec Data Format Reg */
401 #define _CLMICI           0x16        /* Index to Left Mic Input Ctrl Register */
402 #define _CRMICI           0x17        /* Index to Right Mic Input Ctrl Register */
403 #define _CLCI             0x0D        /* Index to Loopback Ctrl Register */
404 #define _IVERI            0x5B        /* Index to register IVERI */
405 #define CODEC_MODE1       0x00
406 #define CODEC_MODE2       0x40
407 #define CODEC_MODE3       0x6C        /* Enhanced Mode */
408 #define CODEC_STATUS1     0x01
409 #define CODEC_STATUS2     0x0B        /* Index to CSR2I */
410 #define CODEC_STATUS3     0x18        /* Index to CSR3I */
411 #define PLAYBACK          0x01        /* Enable playback path CFIG1I[0]=1*/
412 #define RECORD            0x02        /* Enable Record path CFIG1I[1]=1*/
413 #define TIMER_ENABLE      0x40        /* CFIG2I[6] */
414 #define CODEC_MCE         0x40        /* CIDXR[6] */
415 #define CALIB_IN_PROGRESS 0x20        /* CSR2I[5] */
416 #define CODEC_INIT        0x80        /* CIDXR[7] */
417 #define BIT16_BIG         0xC0        /* 16-bit signed, big endian */
418 #define IMA_ADPCM         0xA0        /* IMA-compliant ADPCM */
419 #define BIT8_ALAW         0x60        /* 8-bit A-law */
420 #define BIT16_LITTLE      0x40        /* 16-bit signed, lillte endian */
421 #define BIT8_ULAW         0x20        /* 8-bit u-law */
422 #define BIT8_LINEAR       0x00        /* 8-bit unsigned */
423 #define REC_DFORMAT       0x1C
424 #define PLAY_DFORMAT      0x08
425 #define DMA_ACCESS        0x00
426 #define PIO_ACCESS        0xC0
427 #define DMA_SIMPLEX       0x04
428 #define STEREO            0x10        /* CxDFI[4] */
429 #define XTAL1             0x00        /* CxDFI[4]=0 selects 24.5Mhz XTAL */
430 #define XTAL2             0x01        /* CxDFI[4]=1 selects 16.9Mhz XTAL */
431 #define AUTOCALIB         0x08        /* CFIG1I[3] */
432 #define ROM_IO            0x02        /* ROM I/O cycles - LMCI[1]=1 */
433 #define DRAM_IO           0x4D        /* DRAM I/O cycles - LMCI[1]=0 */
434 #define AUTOI             0x01        /* LMCI[0]=1 */
435 #define _PLDNI            0x07
436 #define ACTIVATE_DEV      0x30
437 #define _PWAKEI           0x03        /* Index for PWAKEI */
438 #define _PISOCI           0x01        /* Index for PISOCI */
439 #define _PSECI            0xF1        /* Index for PSECI */
440 #define RANGE_IOCHK       0x31        /* PURCI or PRRCI Index */
441 #define MIDI_RESET        0x03
442 #define IO_OK             5           /* No IO conflict flag */
443 #define IO_CONFLICT       6           /* IO Conflict detected */
444 #define IO_0x55           0x01
445 #define IO_0xAA           0xFE          
446 /*#######################################################################*/
447 /**/
448 /* Defines for Sound Handlers in "iw".*/
449 /**/
450 /*#######################################################################*/
451 #define PLAY_DMA_HANDLER     0x01
452 #define REC_DMA_HANDLER      0x02
453 #define MIDI_TX_HANDLER      0x03
454 #define MIDI_RX_HANDLER      0x04
455 #define TIMER1_HANDLER       0x05
456 #define TIMER2_HANDLER       0x06
457 #define WAVE_HANDLER         0x07
458 #define VOLUME_HANDLER       0x08
459 #define CODEC_TIMER_HANDLER  0x09
460 #define CODEC_PLAY_HANDLER   0x0A
461 #define CODEC_REC_HANDLER    0x0B
462 #define AUX_HANDLER          0x0C
463 /*#######################################################################*/
464 /**/
465 /*     Mapping for System Control Regs.*/
466 /**/
467 /*#######################################################################*/
468 #define UMCR            0x00010000    /* Mix Control Reg.*/
469 #define UISR            0x00020006    /* IRQ Stat Reg. (read) */
470 #define U2X6R           0x00030006    /* SB 2X6 reg */
471 #define UACWR           0x00040008    /* AdLib Command Write Reg */
472 #define UASRR           0x00050008    /* AdLib Stat Read Reg */
473 #define UADR            0x00060009    /* AdLib Data Register */
474 #define UACRR           0x0007000A    /* AdLib Cmd Read Reg */
475 #define UASWR           0x0008000A    /* AdLib Stat Write Reg */
476 #define UHRDP           0x0009000B    /* Hidden Reg Data Port */
477 #define UI2XCR          0x000A000C    /* SB IRQ 2xC Reg */
478 #define U2XCR           0x000B000D    /* SB 2xC Reg. (No IRQ) */
479 #define U2XER           0x000C000E    /* SB 2xE Reg. */
480 #define URCR            0x000D000F    /* Reg Control Register */
481 #define USRR            0x000E000F    /* Status Read Register */
482 #define UDCI            0x000F000B    /* DMA Channel Control Reg */
483 #define UICI            0x0010000B    /* Interrupt Ctrl Reg */
484 #define UGP1I           0x0011010B    /* GP Reg 1 (Back Door) */
485 #define UGP2I           0x0012020B    /* GP Reg 2 (Back Door) */
486 #define UGPA1I          0x0013030B    /* GP reg 1 Address */
487 #define UGPA2I          0x0014040B    /* GP reg 2 Address */
488 #define UCLRII          0x0015050B    /* Clear Interrupt Reg */
489 #define UJMPI           0x0016060B    /* Jumper Register */
490 #define UGP1II          0x0017000B    /* Gen. Purp Reg 1(Emulation) */
491 #define UGP2II          0x0018000B    /* Gen. Purp Reg 2(Emulation) */
492 #define GGCR            0x00190201    /* Game Control Register */
493 #define GMCR            0x001A0000    /* MIDI Control Register */
494 #define GMSR            0x001B0000    /* MIDI Status Reg. */
495 #define GMTDR           0x001C0001    /* MIDI xmit data reg */
496 #define GMRDR           0x001D0001    /* MIDI rcv data reg */
497 #define SVSR            0x001E0002    /* Synth Voice Select Reg */
498 #define IGIDXR          0x001F0003    /* General Index Register */
499 #define I16DP           0x00200004    /* General 16-bit Data Port */
500 #define I8DP            0x00210005    /* General 8-bit Data Port */
501 /*#######################################################################*/
502 /**/
503 /*             Synth defines*/
504 /**/
505 /*#######################################################################*/
506 #define SACI            0x00220005    /* Synth Addr Control */
507 #define SFCI            0x00230104    /* Synth Freq Control */
508 #define SASHI           0x00240204    /* Synth Addr Start High */
509 #define SASLI           0x00250304    /* Synth Addr Start Low */
510 #define SAEHI           0x00260404    /* Synth Addr End High */
511 #define SAELI           0x00270504    /* Synth Addr End Low */
512 #define SVRI            0x00280605    /* Synth Volume Rate */
513 #define SVSI            0x00290705    /* Synth Volume Start */
514 #define SVEI            0x002A0805    /* Synth Volume End */
515 #define SVLI            0x002B0904    /* Synth Volume Level */
516 #define SAHI            0x002C0A04    /* Synth Address High */
517 #define SALI            0x002D0B04    /* Synth Address Low */
518 #define SROI            0x002E0C04    /* Synth Right Offset */
519 #define SVCI            0x002F0D05    /* Synth Volume Control */
520 #define SAVI            0x00300E05    /* Synth Active Voices */
521 #define SVII            0x00318F05    /* Synth Voice IRQ */
522 #define SUAI            0x00321005    /* Synth Upper Addr */
523 #define SEAHI           0x00331104    /* Synth Effect Addr High */
524 #define SEALI           0x00341204    /* Synth Effect Addr Low */
525 #define SLOI            0x00351304    /* Synth Left Offset */
526 #define SEASI           0x00361405    /* Synth Effects Accum Sel */
527 #define SMSI            0x00371505    /* Synth Mode Select */
528 #define SEVI            0x00381604    /* Synth Effect Volume */
529 #define SFLFOI          0x00391705    /* Synth Freq LFO */
530 #define SVLFOI          0x003A1805    /* Synth Vol LFO */
531 #define SGMI            0x003B1905    /* Synth Global Mode */
532 #define SLFOBI          0x003C1A04    /* Synth LFO Base Address */
533 #define SROFI           0x003D1B04
534 #define SLOFI           0x003E1C04
535 #define SEVFI           0x003F1D04
536 #define SVIRI           0x00409F05    /* Synth Voice Read IRQ */
537 #define LDMACI          0x00414105    /* DMA Control Reg. */
538 #define LDSALI          0x00424204    /* LMC DMA Start Addr. Low Reg. */
539 #define LMALI           0x00434304    /* LMC Addr Low (I/O) */
540 #define LMAHI           0x00444405    /* LMC Addr High (I/O) */
541 #define UASBCI          0x00454505    /* Adlib-SB Control */
542 #define UAT1I           0x00464605    /* AdLib Timer 1 Count */
543 #define UAT2I           0x00474705    /* AdLib Timer 2 Count */
544 #define USCI            0x00484905    /* Sample Control Reg */
545 #define GJTDI           0x00494B05
546 #define URSTI           0x004A4C05
547 #define LDSAHI          0x004B5005
548 #define LMSBAI          0x004C5104
549 #define LMCFI           0x004D5204
550 #define LMCI            0x004E5305
551 #define LMRFAI          0x004F5404
552 #define LMPFAI          0x00505504
553 #define LMSFI           0x00515604
554 #define LDICI           0x00525704
555 #define LDIBI           0x00535804
556 #define ICMPTI          0x00545905
557 #define IDECI           0x00555A05
558 #define IVERI           0x00565B05
559 #define IEMUAI          0x00575C05
560 #define IEMUBI          0x00585D05
561 #define GMRFAI          0x00595E05
562 #define ITCI            0x005A5F05
563 #define IEIRQI          0x005B6005
564 #define LMBDR           0x005C0007
565 /*##########################################################*/
566 /* Mnemonics for Codec Registers*/
567 /*##########################################################*/
568 #define CIDXR           0x005D0000
569 #define CDATAP          0x005E0001
570 #define CSR1R           0x005F0002
571 #define CPDR            0x00600003
572 #define CRDR            0x00610003
573 #define CLICI           0x00620001
574 #define CRICI           0x00630101
575 #define CLAX1I          0x00640201
576 #define CRAX1I          0x00650301
577 #define CLAX2I          0x00660401
578 #define CRAX2I          0x00670501
579 #define CLDACI          0x00680601
580 #define CRDACI          0x00690701
581 #define CPDFI           0x006A0801
582 #define CFIG1I          0x006B0901
583 #define CEXTI           0x006C0A01
584 #define CSR2I           0x006D0B01
585 #define CMODEI          0x006E0C01
586 #define CLCI            0x006F0D01
587 #define CUPCTI          0x00700E01
588 #define CLPCTI          0x00710F01
589 #define CFIG2I          0x00721001
590 #define CFIG3I          0x00731101
591 #define CLLICI          0x00741201
592 #define CRLICI          0x00751301
593 #define CLTIMI          0x00761401
594 #define CUTIMI          0x00771501
595 #define CLMICI          0x00781601
596 #define CRMICI          0x00791701
597 #define CSR3I           0x007A1801
598 #define CLOAI           0x007B1901
599 #define CMONOI          0x007C1A01
600 #define CROAI           0x007D1B01
601 #define CRDFI           0x007E1C01
602 #define CPVFI           0x007F1D01
603 #define CURCTI          0x00801E01
604 #define CLRCTI          0x00811F01
605 /*##########################################################*/
606 /* Mnemonics for PnP Registers*/
607 /*##########################################################*/
608 #define PCSNBR          0x00820201
609 #define PIDXR           0x00830279
610 #define PNPWRP          0x00840A79
611 #define PNPRDP          0x00850000
612 #define PSRPAI          0x00860000
613 #define PISOCI          0x00870100
614 #define PCCCI           0x00880200
615 #define PWAKEI          0x00890300
616 #define PRESDI          0x008A0400
617 #define PRESSI          0x008B0500
618 #define PCSNI           0x008C0600
619 #define PLDNI           0x008D0700
620 #define PUACTI          0x008E3000
621 #define PURCI           0x008F3100
622 #define P2X0HI          0x00906000
623 #define P2X0LI          0x00916100
624 #define P3X0HI          0x00926200
625 #define P3X0LI          0x00936300
626 #define PHCAI           0x00946400
627 #define PLCAI           0x00956500
628 #define PUI1SI          0x00967000
629 #define PUI1TI          0x00977100
630 #define PUI2SI          0x00987200
631 #define PUI2TI          0x00997300
632 #define PUD1SI          0x009A7400
633 #define PUD2SI          0x009B7500
634 #define PSEENI          0x009CF000
635 #define PSECI           0x009DF100
636 #define PPWRI           0x009EF200
637 #define PRACTI          0x009F3001
638 #define PRRCI           0x00A03101
639 #define PRAHI           0x00A16001
640 #define PRALI           0x00A26101
641 #define PATAHI          0x00A36201
642 #define PATALI          0x00A46301
643 #define PRISI           0x00A57001
644 #define PRITI           0x00A67101
645 #define PRDSI           0x00A77401
646 #define PGACTI          0x00A83002
647 #define PGRCI           0x00A93102
648 #define P201HI          0x00AA6002
649 #define P201LI          0x00AB6102
650 #define PSACTI          0x00AC3003
651 #define PSRCI           0x00AD3103
652 #define P388HI          0x00AE6003
653 #define P388LI          0x00AF6103
654 #define PSBISI          0x00B07003
655 #define PSBITI          0x00B17103
656 #define PMACTI          0x00B23004
657 #define PMRCI           0x00B33104
658 #define P401HI          0x00B46004
659 #define P401LI          0x00B56104
660 #define PMISI           0x00B67004
661 #define PMITI           0x00B77104
662
663 typedef unsigned char  BYTE;
664 typedef unsigned short WORD;
665 typedef unsigned short PORT;
666 typedef unsigned long  DWORD;
667 typedef unsigned long  ADDRESS;
668 typedef int BOOL;
669 typedef int FLAG;
670
671 typedef struct
672  {
673         short flags;              /* InterWave stat flags */
674         PORT pcodar;                      /* Base Port for Codec */
675         PORT pcdrar;                      /* Base Port for Ext Device */
676         PORT p2xr;                        /* Compatibility Base Port */
677         PORT p3xr;                        /* MIDI and Synth Base Port */
678         PORT p401ar;                      /* Gen Purpose Reg. 1 address */
679         PORT p201ar;                      /* Game Ctrl normally at 0x201 */
680         PORT pataar;                      /* Base Address for ATAPI I/O Space */
681         PORT p388ar;                      /* Base Port for AdLib. It should be 388h */
682         PORT pnprdp;                      /* PNP read data port */
683         PORT igidxr;                      /* Gen Index Reg at P3XR+0x03 */
684         PORT i16dp;                       /* 16-bit data port at P3XR+0x04  */
685         PORT i8dp;                        /* 8-bit data port at P3XR+0x05 */
686         PORT svsr;                        /* Synth Voice Select at P3XR+0x02 */
687         PORT cdatap;                      /* Codec Indexed Data Port at PCODAR+0x01 */
688         PORT csr1r;                       /* Codec Stat Reg 1 at PCODAR+0x02 */
689         PORT cxdr;                        /* Play or Record Data Reg at PCODAR+0x03 */
690         PORT gmxr;                        /* GMCR or GMSR at P3XR+0x00 */
691         PORT gmxdr;                       /* GMTDR or GMRDR at P3XR+0x01 */
692         PORT lmbdr;                       /* LMBDR at P3XR+0x07 */
693         BYTE csn;                         /* Card Select Number */
694         BYTE cmode;                       /* Codec Operation Mode */
695         int dma1_chan;                    /* DMA channel 1 (local DMA & codec rec) */
696         int dma2_chan;                    /* DMA channel 2 (codec play) */
697         int ext_chan;                     /* Ext Dev DMA channel */
698         BYTE voices;                      /* Number of active voices */
699         DWORD vendor;                     /* Vendor ID and Product Identifier */
700         int synth_irq;                    /* Synth IRQ number */
701         int midi_irq;                     /* MIDI IRQ number */
702         int ext_irq;                      /* Ext Dev IRQ  */
703         int mpu_irq;                      /* MPU401 Dev IRQ */
704         int emul_irq;                     /* Sound Blaster/AdLib Dev IRQ */
705         ADDRESS  free_mem;                /* Address of First Free LM Block */
706         DWORD reserved_mem;               /* Amount of LM reserved by app. */
707         BYTE smode;                       /* Synth Mode */
708         WORD  size_mem;                   /* Total LM in Kbytes */
709
710  } IWAVE;
711
712 #endif