summaryrefslogtreecommitdiffstats
path: root/sys/i386/isa/sound/iwdefs.h
blob: 60f50fc50028eb564673bf6fd8ecd74e048b1ff0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
/*#######################################################################*/
/*  FILE   : iwdefs.h*/
/**/
/*  REMARKS: This file contains all defines used by DDK functions. It*/
/*           should be included by all applications and should be*/
/*           referenced by programmers to make their code easy to read*/
/*           and understand.*/
/**/
/*  UPDATE: 3/21/95*/
/*          7/10/95 --- added #def DRAM_HOLES*/
/*#######################################################################*/
#ifndef IWDEFS
#define IWDEFS
/*#######################################################################*/
/**/
/* Macros for use in loading Synth Addr Regs*/
/**/
/*#######################################################################*/
#define ADDR_HIGH(x)    (short)(x>>7)
#define ADDR_LOW(x)     (short)(x<<9)
/*#######################################################################*/
/**/
/*     Defines for DMA Controllers*/
/**/
/*#######################################################################*/
/* DMA Controler #1 (8-bit controller) */
#define DMA1_STAT         0x08          /* read status register */
#define DMA1_WCMD         0x08          /* write command register */
#define DMA1_WREQ         0x09          /* write request register */
#define DMA1_SNGL         0x0A          /* write single bit register */
#define DMA1_MODE         0x0B          /* write mode register */
#define DMA1_CLRFF        0x0C          /* clear byte ptr flip/flop */
#define DMA1_MCLR         0x0D          /* master clear register */
#define DMA1_CLRM         0x0E          /* clear mask register */
#define DMA1_WRTALL       0x0F          /* write all mask register */

/* DMA Controler #2 (16-bit controller) */
#define DMA2_STAT         0xD0          /* read status register */
#define DMA2_WCMD         0xD0          /* write command register */
#define DMA2_WREQ         0xD2          /* write request register */
#define DMA2_SNGL         0xD4          /* write single bit register */
#define DMA2_MODE         0xD6          /* write mode register */
#define DMA2_CLRFF        0xD8          /* clear byte ptr flip/flop */
#define DMA2_MCLR         0xDA          /* master clear register */
#define DMA2_CLRM         0xDC          /* clear mask register */
#define DMA2_WRTALL       0xDE          /* write all mask register */

#define DMA0_ADDR         0x00          /* chan 0 base adddress */
#define DMA0_CNT          0x01          /* chan 0 base count */
#define DMA1_ADDR         0x02          /* chan 1 base adddress */
#define DMA1_CNT          0x03          /* chan 1 base count */
#define DMA2_ADDR         0x04          /* chan 2 base adddress */
#define DMA2_CNT          0x05          /* chan 2 base count */
#define DMA3_ADDR         0x06          /* chan 3 base adddress */
#define DMA3_CNT          0x07          /* chan 3 base count */
#define DMA4_ADDR         0xC0          /* chan 4 base adddress */
#define DMA4_CNT          0xC2          /* chan 4 base count */
#define DMA5_ADDR         0xC4          /* chan 5 base adddress */
#define DMA5_CNT          0xC6          /* chan 5 base count */
#define DMA6_ADDR         0xC8          /* chan 6 base adddress */
#define DMA6_CNT          0xCA          /* chan 6 base count */
#define DMA7_ADDR         0xCC          /* chan 7 base adddress */
#define DMA7_CNT          0xCE          /* chan 7 base count */

#define DMA0_PAGE         0x87          /* chan 0 page register (refresh)*/
#define DMA1_PAGE         0x83          /* chan 1 page register */
#define DMA2_PAGE         0x81          /* chan 2 page register */
#define DMA3_PAGE         0x82          /* chan 3 page register */
#define DMA4_PAGE         0x8F          /* chan 4 page register (unusable)*/
#define DMA5_PAGE         0x8B          /* chan 5 page register */
#define DMA6_PAGE         0x89          /* chan 6 page register */
#define DMA7_PAGE         0x8A          /* chan 7 page register */
/*#######################################################################*/
/**/
/* Defines for register UISR (Interrupt Status)*/
/**/
/*#######################################################################*/
#define MIDI_TX_IRQ       0x01
#define MIDI_RX_IRQ       0x02
#define ALIB_TIMER1_IRQ   0x04
#define ALIB_TIMER2_IRQ   0x08
#define _UASBCI           0x45          /* UASBCI index */
#define SAMPLE_CONTROL    0x49          /* Not used by IW */
#define SET_VOICES        0x0E
#define WAVETABLE_IRQ     0x20
#define ENVELOPE_IRQ      0x40
#define DMA_TC_IRQ        0x80
/*#######################################################################*/
/**/
/*            Synthesizer-related defines*/
/**/
/*#######################################################################*/
#define GEN_INDEX         0x03           /* IGIDX offset into p3xr */
#define VOICE_SELECT      0x02           /* SVSR offset into p3xr */
#define VOICE_IRQS        0x8F           /* SVII index (read) */
#define _URSTI            0x4C           /* URSTI index */
#define GF1_SET           0x01           /* URSTI[0] */
#define GF1_OUT_ENABLE    0x02           /* URSTI[1] */
#define GF1_IRQ_ENABLE    0x04           /* URSTI[2] */
#define GF1_RESET         0xFE           /* URSTI[0]=0 */
#define VOICE_VOLUME_IRQ  0x04           /* SVII[2] */
#define VOICE_WAVE_IRQ    0x08           /* SVII[3] */
#define VC_IRQ_ENABLE     0x20           /* SACI[5] or SVCI[5]*/
#define VOICE_NUMBER      0x1F           /* Mask for SVII[4:0] */
#define VC_IRQ_PENDING    0x80           /* SACI[7] or SVCI[7] */
#define VC_DIRECT         0x40           /* SACI[6] or SVCI[6]*/
#define VC_DATA_WIDTH     0x04           /* SACI[2] */
#define VOICE_STOP        0x02           /* SACI[1] */
#define VOICE_STOPPED     0x01           /* SACI[0] */
#define VOLUME_STOP       0x02           /* SVCI[1] */
#define VOLUME_STOPPED    0x01           /* SVCI[0] */
#define VC_ROLLOVER       0x04           /* SVCI[2] */
#define VC_LOOP_ENABLE    0x08           /* SVCI[3] or SACI[3]*/
#define VC_BI_LOOP        0x10           /* SVCI[4] or SACI[4]*/
#define VOICE_OFFSET      0x20           /* SMSI[5] */
#define VOLUME_RATE0      0x00           /* SVRI[7:6]=(0,0) */
#define VOLUME_RATE1      0x40           /* SVRI[7:6]=(0,1) */
#define VOLUME_RATE2      0x80           /* SVRI[7:6]=(1,0) */
#define VOLUME_RATE3      0xC0           /* SVRI[7:6]=(1,1) */
/*#######################################################################*/
/**/
/*         Power-Mode Control Defines*/
/**/
/*#######################################################################*/
#define SHUT_DOWN         0x7E           /* shuts InterWave down */
#define POWER_UP          0xFE           /* enables all modules */
#define CODEC_PWR_UP      0x81           /* enables Codec Analog Ckts */
#define CODEC_PWR_DOWN    0x01           /* disables Codec Analog Ckts */
#define CODEC_REC_UP      0x82           /* Enables Record Path */
#define CODEC_REC_DOWN    0x02           /* Disables Record Path */
#define CODEC_PLAY_UP     0x84           /* Enables Playback Path */
#define CODEC_PLAY_DOWN   0x04           /* Disables Playback Path */
#define CODEC_IRQ_ENABLE  0x02           /* CEXTI[2] */
#define CODEC_TIMER_IRQ   0x40           /* CSR3I[6] */
#define CODEC_REC_IRQ     0x20           /* CSR3I[5] */
#define CODEC_PLAY_IRQ    0x10           /* CSR3I[4] */
#define CODEC_INT         0x01           /* CSR1R[0] */
#define MONO_INPUT        0x80           /* CMONOI[7] */
#define MONO_OUTPUT       0x40           /* CMONOI[6] */
#define MIDI_UP           0x88           /* Enables MIDI ports */
#define MIDI_DOWN         0x08           /* Disables MIDI ports */
#define SYNTH_UP          0x90           /* Enables Synthesizer */
#define SYNTH_DOWN        0x10           /* Disables Synthesizer */
#define LMC_UP            0xA0           /* Enables LM Module */
#define LMC_DOWN          0x20           /* Disbales LM Module */
#define XTAL24_UP         0xC0           /* Enables 24MHz Osc */
#define XTAL24_DOWN       0x40           /* Disables 24MHz Osc */
#define _PPWRI            0xF2           /* PPWRI index */
#define PLAY              0x0F
#define REC               0x1F
#define LEFT_AUX1_INPUT   0x02
#define RIGHT_AUX1_INPUT  0x03
#define LEFT_AUX2_INPUT   0x04
#define RIGHT_AUX2_INPUT  0x05
#define LEFT_LINE_IN      0x12
#define RIGHT_LINE_IN     0x13
#define LEFT_LINE_OUT     0x19
#define RIGHT_LINE_OUT    0x1B
#define LEFT_SOURCE       0x00
#define RIGHT_SOURCE      0x01
#define LINE_IN           0x00
#define AUX1_IN           0x40
#define MIC_IN            0x80
#define MIX_IN            0xC0
#define LEFT_DAC          0x06
#define RIGHT_DAC         0x07
#define LEFT_MIC_IN       0x16
#define RIGHT_MIC_IN      0x17
#define _CUPCTI           0x0E
#define _CLPCTI           0x0F
#define _CURCTI           0x1E
#define _CLRCTI           0x1F
#define _CLAX1I           0x02
#define _CRAX1I           0x03
#define _CLAX2I           0x04
#define _CRAX2I           0x05
#define _CLLICI           0x12
#define _CRLICI           0x13
#define _CLOAI            0x19
#define _CROAI            0x1B
#define _CLICI            0x00
#define _CRICI            0x01
#define _CLDACI           0x06
#define _CRDACI           0x07
#define _CPVFI            0x1D
/*#######################################################################*/
/**/
/* Defines for DMA transfer related operations*/
/**/
/*#######################################################################*/
#define MAX_DMA         0x07
#define DMA_DECREMENT   0x20
#define AUTO_INIT       0x10
#define DMA_READ        0x01
#define DMA_WRITE       0x02
#define AUTO_READ       0x03
#define AUTO_WRITE      0x04
#define IDMA_INV        0x0400
#define IDMA_WIDTH_16   0x0100
/*#######################################################################*/
/**/
/* Bits for dma flags within a DMA structure.*/
/**/
/*#######################################################################*/
#define DMA_USED        0x0001

#define DMA_SPLIT       0x0004    /* DMA Controller Page Crossover*/
#define CODEC_DMA       0x0008    /* Indicates a Codec DMA*/
#define DMA_WAIT        0x0020    /* Wait for DMA xfer to complete*/
#define DMA_DOWN        0x0040    /* DMA xfer from PC to InterWave*/
#define DRAM_HOLES      0x8000    /* Indicates Non-contiguous RAM configuration*/
#define DMA_UP          0xFFBF    /* DMA xfer from InterWave to PC */
/*#######################################################################*/
/**/
/* Bits for DMA Control Register (LDMACI)*/
/**/
/*#######################################################################*/
#define _LDMACI         0x41  /* Index */
#define DMA_INV         0x80
#define DMA_IRQ_ENABLE  0x20
#define DMA_IRQ_PENDING 0x40  /* on reads of LDMACI[6] */
#define DMA_DATA_16     0x40  /* on writes to LDMACI[6] */
#define DMA_WIDTH_16    0x04  /* 1=16-bit, 0=8-bit (DMA channel) */
#define DMA_RATE        0x18  /* 00=fastest,...,11=slowest */
#define DMA_UPLOAD      0x02  /* From LM to PC */
#define DMA_ENABLE      0x01
/*#######################################################################*/
/**/
/*    DMA Transfer Rates*/
/**/
/*#######################################################################*/
#define DMA_R0          0xE7    /* Fastest (use ANDing to set) */
#define DMA_R1          0x08
#define DMA_R2          0x10
#define DMA_R3          0x18    /* Slowest */
/*#######################################################################*/
/**/
/*    Interrupt Controller Defines*/
/**/
/*#######################################################################*/
#define IW_HANDLERS_ON  0x80    /* Flag for when IVT is modified */
#define EOI             0x20
#define OCR1            0x20    /* 8259-1 Operation Control Reg. */
#define IMR1            0x21    /* 8259-1 Interrupt Mask Reg. */
#define OCR2            0xA0    /* 8259-2 Operation Control Reg. */
#define IMR2            0xA1    /* 8259-2 Interrupt Mask Reg. */
#define IRQ0_UNMASK     0xFE    /* Mask to clear bit 0 in IMR */
#define IRQ1_UNMASK     0xFD
#define IRQ2_UNMASK     0xFB
#define IRQ3_UNMASK     0xF7
#define IRQ4_UNMASK     0xEF
#define IRQ5_UNMASK     0xDF
#define IRQ6_UNMASK     0xBF
#define IRQ7_UNMASK     0x7F
#define IRQ8_UNMASK     0xFE    /* Mask to clear bit 0 in IMR */
#define IRQ9_UNMASK     0xFD
#define IRQ10_UNMASK    0xFB
#define IRQ11_UNMASK    0xF7
#define IRQ12_UNMASK    0xEF
#define IRQ13_UNMASK    0xDF
#define IRQ14_UNMASK    0xBF
#define IRQ15_UNMASK    0x7F
#define IRQ0_EOI        0x60    /* Spec EOI for IRQ0 */
#define IRQ1_EOI        0x61
#define IRQ2_EOI        0x62
#define IRQ3_EOI        0x63
#define IRQ4_EOI        0x64
#define IRQ5_EOI        0x65
#define IRQ6_EOI        0x66
#define IRQ7_EOI        0x67
#define IRQ8_EOI        0x60    /* Spec EOI for IRQ8 */
#define IRQ9_EOI        0x61
#define IRQ10_EOI       0x62
#define IRQ11_EOI       0x63
#define IRQ12_EOI       0x64
#define IRQ13_EOI       0x65
#define IRQ14_EOI       0x66
#define IRQ15_EOI       0x67
/*#######################################################################*/
/**/
/*     Generic defines*/
/**/
/*#######################################################################*/
/**/
#define MEMBANK0      0L                 /* Addr of Memory Bank 0*/
#define MEMBANK1      4194304L           /* Addr of Memory Bank 1*/
#define MEMBANK2      8388608L           /* Addr of Memory Bank 2*/
#define MEMBANK3     12582912L           /* Addr of Memory Bank 3*/
#define IRQ_UNAVAIL       0x0000
#define IRQ_AVAIL         0x0001
#define IRQ_USED          0x0002
#define MAX_IRQ           16
#define NEXT_OFFSET       0L
#define PREV_OFFSET       4L
#define SIZE_OFFSET       8L
#define MEM_HEADER_SIZE  12L
#define GF1_POOL         (usigned long)(256L*1024L)
#define GUS_MODE          0x00           /* SGMI[0]=0*/
#define ENH_MODE          0x01           /* SGMI[0]=1*/
#define ENABLE_LFOS       0x02           /* SGMI[1]*/
#define NO_WAVETABLE      0x04           /* SGMI[2]*/
#define RAM_TEST          0x08           /* SGMI[3]*/
#define TRUE              1
#define FALSE             0
#define ON                1
#define OFF               0
#define AUDIO             0
#define EXT               1
#define GAME              2
#define EMULATION         3
#define MPU401            4
#define AUDIO_EXT         2
#define ALLOC_FAILURE     0xFFFFFFFFL
#define MEM_EXHAUSTED     0xFFFFFFFFL
#define RAM_MAX           16777216L
#define RAM_STEP          65536L
#define BANK_MAX          4194304L
#define ILLEGAL_SIZE      -1
#define MEM_INIT           1
#define NO_NEXT           0xFFFFFFFFL
#define NO_PREV           NO_NEXT
#define DMA_BAD_ADDR     -1
#define DMA_ON           -1
#define DMA_OK            1
#define MIDI_TX_IRQ       0x01
#define MIDI_RX_IRQ       0x02
#define ALIB_TIMER1_IRQ   0x04
#define ALIB_TIMER2_IRQ   0x08
#define WAVETABLE_IRQ     0x20
#define ENVELOPE_IRQ      0x40
#define DMA_TC_IRQ        0x80
#define DMA_SET_MASK      0x04
#define PNP_DATA_RDY       1          /* PRESSI[0] */
#define IWAVE_ABSENT      2
#define IWAVE_OPEN        4
#define IWAVE_OK          5
#define BAD_VOICES        -1
#define PNP_ABSENT        0xFF        /* No PNP cards in system */
#define DPMI_INT          0x31
#define _PCCCI            0x02
#define _PCSNI            0x06
#define _PIDXR            0x279
#define _PNPWRP           0xA79
#define _LDSALI           0x42
#define _LDSAHI           0x50
#define _LMALI            0x43
#define _LMAHI            0x44
#define _LMCFI            0x52
#define _LMCI             0x53
#define _LDIBI            0x58
#define _LDICI            0x57
#define _LMSBAI           0x51
#define _SVCI_RD          0x8D
#define _SVCI_WR          0x0D
#define _SACI_RD          0x80
#define _SACI_WR          0x00
#define _SALI_RD          0x8B
#define _SALI_WR          0x0B
#define _SAHI_RD          0x8A
#define _SAHI_WR          0x0A
#define _SASHI_RD         0x82
#define _SASHI_WR         0x02
#define _SASLI_RD         0x83
#define _SASLI_WR         0x03
#define _SAEHI_RD         0x84
#define _SAEHI_WR         0x04
#define _SAELI_RD         0x85
#define _SAELI_WR         0x05
#define _SVRI_RD          0x86
#define _SVRI_WR          0x06
#define _SVSI_RD          0x87
#define _SVSI_WR          0x07
#define _SVEI_RD          0x88
#define _SVEI_WR          0x08
#define _SVLI_RD          0x89
#define _SVLI_WR          0x09
#define _SROI_RD          0x8C
#define _SROI_WR          0x0C
#define _SLOI_RD          0x93
#define _SLOI_WR          0x13
#define _SMSI_RD          0x95
#define _SMSI_WR          0x15
#define _SGMI_RD          0x99
#define _SGMI_WR          0x19
#define _SFCI_RD          0x81
#define _SFCI_WR          0x01
#define _SUAI_RD          0x90
#define _SUAI_WR          0x10
#define _SVII             0x8F          
#define _CMODEI           0x0C        /* index for CMODEI */
#define _CFIG3I           0x11
#define _CFIG2I           0x10
#define _CLTIMI           0x14
#define _CUTIMI           0x15
#define _CSR3I            0x18        /* Index to CSR3I (Interrupt Status) */
#define _CEXTI            0x0A        /* Index to External Control Register */
#define _CFIG1I           0x09        /* Index to Codec Conf Reg 1 */
#define _CSR2I            0x0B        /* Index to Codec Stat Reg 2 */
#define _CPDFI            0x08        /* Index to Play Data Format Reg */
#define _CRDFI            0x1C        /* Index to Rec Data Format Reg */
#define _CLMICI           0x16        /* Index to Left Mic Input Ctrl Register */
#define _CRMICI           0x17        /* Index to Right Mic Input Ctrl Register */
#define _CLCI             0x0D        /* Index to Loopback Ctrl Register */
#define _IVERI            0x5B        /* Index to register IVERI */
#define CODEC_MODE1       0x00
#define CODEC_MODE2       0x40
#define CODEC_MODE3       0x6C        /* Enhanced Mode */
#define CODEC_STATUS1     0x01
#define CODEC_STATUS2     0x0B        /* Index to CSR2I */
#define CODEC_STATUS3     0x18        /* Index to CSR3I */
#define PLAYBACK          0x01        /* Enable playback path CFIG1I[0]=1*/
#define RECORD            0x02        /* Enable Record path CFIG1I[1]=1*/
#define TIMER_ENABLE      0x40        /* CFIG2I[6] */
#define CODEC_MCE         0x40        /* CIDXR[6] */
#define CALIB_IN_PROGRESS 0x20        /* CSR2I[5] */
#define CODEC_INIT        0x80        /* CIDXR[7] */
#define BIT16_BIG         0xC0        /* 16-bit signed, big endian */
#define IMA_ADPCM         0xA0        /* IMA-compliant ADPCM */
#define BIT8_ALAW         0x60        /* 8-bit A-law */
#define BIT16_LITTLE      0x40        /* 16-bit signed, lillte endian */
#define BIT8_ULAW         0x20        /* 8-bit u-law */
#define BIT8_LINEAR       0x00        /* 8-bit unsigned */
#define REC_DFORMAT       0x1C
#define PLAY_DFORMAT      0x08
#define DMA_ACCESS        0x00
#define PIO_ACCESS        0xC0
#define DMA_SIMPLEX       0x04
#define STEREO            0x10        /* CxDFI[4] */
#define XTAL1             0x00        /* CxDFI[4]=0 selects 24.5Mhz XTAL */
#define XTAL2             0x01        /* CxDFI[4]=1 selects 16.9Mhz XTAL */
#define AUTOCALIB         0x08        /* CFIG1I[3] */
#define ROM_IO            0x02        /* ROM I/O cycles - LMCI[1]=1 */
#define DRAM_IO           0x4D        /* DRAM I/O cycles - LMCI[1]=0 */
#define AUTOI             0x01        /* LMCI[0]=1 */
#define _PLDNI            0x07
#define ACTIVATE_DEV      0x30
#define _PWAKEI           0x03        /* Index for PWAKEI */
#define _PISOCI           0x01        /* Index for PISOCI */
#define _PSECI            0xF1        /* Index for PSECI */
#define RANGE_IOCHK       0x31        /* PURCI or PRRCI Index */
#define MIDI_RESET        0x03
#define IO_OK             5           /* No IO conflict flag */
#define IO_CONFLICT       6           /* IO Conflict detected */
#define IO_0x55           0x01
#define IO_0xAA           0xFE          
/*#######################################################################*/
/**/
/* Defines for Sound Handlers in "iw".*/
/**/
/*#######################################################################*/
#define PLAY_DMA_HANDLER     0x01
#define REC_DMA_HANDLER      0x02
#define MIDI_TX_HANDLER      0x03
#define MIDI_RX_HANDLER      0x04
#define TIMER1_HANDLER       0x05
#define TIMER2_HANDLER       0x06
#define WAVE_HANDLER         0x07
#define VOLUME_HANDLER       0x08
#define CODEC_TIMER_HANDLER  0x09
#define CODEC_PLAY_HANDLER   0x0A
#define CODEC_REC_HANDLER    0x0B
#define AUX_HANDLER          0x0C
/*#######################################################################*/
/**/
/*     Mapping for System Control Regs.*/
/**/
/*#######################################################################*/
#define UMCR            0x00010000    /* Mix Control Reg.*/
#define UISR            0x00020006    /* IRQ Stat Reg. (read) */
#define U2X6R           0x00030006    /* SB 2X6 reg */
#define UACWR           0x00040008    /* AdLib Command Write Reg */
#define UASRR           0x00050008    /* AdLib Stat Read Reg */
#define UADR            0x00060009    /* AdLib Data Register */
#define UACRR           0x0007000A    /* AdLib Cmd Read Reg */
#define UASWR           0x0008000A    /* AdLib Stat Write Reg */
#define UHRDP           0x0009000B    /* Hidden Reg Data Port */
#define UI2XCR          0x000A000C    /* SB IRQ 2xC Reg */
#define U2XCR           0x000B000D    /* SB 2xC Reg. (No IRQ) */
#define U2XER           0x000C000E    /* SB 2xE Reg. */
#define URCR            0x000D000F    /* Reg Control Register */
#define USRR            0x000E000F    /* Status Read Register */
#define UDCI            0x000F000B    /* DMA Channel Control Reg */
#define UICI            0x0010000B    /* Interrupt Ctrl Reg */
#define UGP1I           0x0011010B    /* GP Reg 1 (Back Door) */
#define UGP2I           0x0012020B    /* GP Reg 2 (Back Door) */
#define UGPA1I          0x0013030B    /* GP reg 1 Address */
#define UGPA2I          0x0014040B    /* GP reg 2 Address */
#define UCLRII          0x0015050B    /* Clear Interrupt Reg */
#define UJMPI           0x0016060B    /* Jumper Register */
#define UGP1II          0x0017000B    /* Gen. Purp Reg 1(Emulation) */
#define UGP2II          0x0018000B    /* Gen. Purp Reg 2(Emulation) */
#define GGCR            0x00190201    /* Game Control Register */
#define GMCR            0x001A0000    /* MIDI Control Register */
#define GMSR            0x001B0000    /* MIDI Status Reg. */
#define GMTDR           0x001C0001    /* MIDI xmit data reg */
#define GMRDR           0x001D0001    /* MIDI rcv data reg */
#define SVSR            0x001E0002    /* Synth Voice Select Reg */
#define IGIDXR          0x001F0003    /* General Index Register */
#define I16DP           0x00200004    /* General 16-bit Data Port */
#define I8DP            0x00210005    /* General 8-bit Data Port */
/*#######################################################################*/
/**/
/*             Synth defines*/
/**/
/*#######################################################################*/
#define SACI            0x00220005    /* Synth Addr Control */
#define SFCI            0x00230104    /* Synth Freq Control */
#define SASHI           0x00240204    /* Synth Addr Start High */
#define SASLI           0x00250304    /* Synth Addr Start Low */
#define SAEHI           0x00260404    /* Synth Addr End High */
#define SAELI           0x00270504    /* Synth Addr End Low */
#define SVRI            0x00280605    /* Synth Volume Rate */
#define SVSI            0x00290705    /* Synth Volume Start */
#define SVEI            0x002A0805    /* Synth Volume End */
#define SVLI            0x002B0904    /* Synth Volume Level */
#define SAHI            0x002C0A04    /* Synth Address High */
#define SALI            0x002D0B04    /* Synth Address Low */
#define SROI            0x002E0C04    /* Synth Right Offset */
#define SVCI            0x002F0D05    /* Synth Volume Control */
#define SAVI            0x00300E05    /* Synth Active Voices */
#define SVII            0x00318F05    /* Synth Voice IRQ */
#define SUAI            0x00321005    /* Synth Upper Addr */
#define SEAHI           0x00331104    /* Synth Effect Addr High */
#define SEALI           0x00341204    /* Synth Effect Addr Low */
#define SLOI            0x00351304    /* Synth Left Offset */
#define SEASI           0x00361405    /* Synth Effects Accum Sel */
#define SMSI            0x00371505    /* Synth Mode Select */
#define SEVI            0x00381604    /* Synth Effect Volume */
#define SFLFOI          0x00391705    /* Synth Freq LFO */
#define SVLFOI          0x003A1805    /* Synth Vol LFO */
#define SGMI            0x003B1905    /* Synth Global Mode */
#define SLFOBI          0x003C1A04    /* Synth LFO Base Address */
#define SROFI           0x003D1B04
#define SLOFI           0x003E1C04
#define SEVFI           0x003F1D04
#define SVIRI           0x00409F05    /* Synth Voice Read IRQ */
#define LDMACI          0x00414105    /* DMA Control Reg. */
#define LDSALI          0x00424204    /* LMC DMA Start Addr. Low Reg. */
#define LMALI           0x00434304    /* LMC Addr Low (I/O) */
#define LMAHI           0x00444405    /* LMC Addr High (I/O) */
#define UASBCI          0x00454505    /* Adlib-SB Control */
#define UAT1I           0x00464605    /* AdLib Timer 1 Count */
#define UAT2I           0x00474705    /* AdLib Timer 2 Count */
#define USCI            0x00484905    /* Sample Control Reg */
#define GJTDI           0x00494B05
#define URSTI           0x004A4C05
#define LDSAHI          0x004B5005
#define LMSBAI          0x004C5104
#define LMCFI           0x004D5204
#define LMCI            0x004E5305
#define LMRFAI          0x004F5404
#define LMPFAI          0x00505504
#define LMSFI           0x00515604
#define LDICI           0x00525704
#define LDIBI           0x00535804
#define ICMPTI          0x00545905
#define IDECI           0x00555A05
#define IVERI           0x00565B05
#define IEMUAI          0x00575C05
#define IEMUBI          0x00585D05
#define GMRFAI          0x00595E05
#define ITCI            0x005A5F05
#define IEIRQI          0x005B6005
#define LMBDR           0x005C0007
/*##########################################################*/
/* Mnemonics for Codec Registers*/
/*##########################################################*/
#define CIDXR           0x005D0000
#define CDATAP          0x005E0001
#define CSR1R           0x005F0002
#define CPDR            0x00600003
#define CRDR            0x00610003
#define CLICI           0x00620001
#define CRICI           0x00630101
#define CLAX1I          0x00640201
#define CRAX1I          0x00650301
#define CLAX2I          0x00660401
#define CRAX2I          0x00670501
#define CLDACI          0x00680601
#define CRDACI          0x00690701
#define CPDFI           0x006A0801
#define CFIG1I          0x006B0901
#define CEXTI           0x006C0A01
#define CSR2I           0x006D0B01
#define CMODEI          0x006E0C01
#define CLCI            0x006F0D01
#define CUPCTI          0x00700E01
#define CLPCTI          0x00710F01
#define CFIG2I          0x00721001
#define CFIG3I          0x00731101
#define CLLICI          0x00741201
#define CRLICI          0x00751301
#define CLTIMI          0x00761401
#define CUTIMI          0x00771501
#define CLMICI          0x00781601
#define CRMICI          0x00791701
#define CSR3I           0x007A1801
#define CLOAI           0x007B1901
#define CMONOI          0x007C1A01
#define CROAI           0x007D1B01
#define CRDFI           0x007E1C01
#define CPVFI           0x007F1D01
#define CURCTI          0x00801E01
#define CLRCTI          0x00811F01
/*##########################################################*/
/* Mnemonics for PnP Registers*/
/*##########################################################*/
#define PCSNBR          0x00820201
#define PIDXR           0x00830279
#define PNPWRP          0x00840A79
#define PNPRDP          0x00850000
#define PSRPAI          0x00860000
#define PISOCI          0x00870100
#define PCCCI           0x00880200
#define PWAKEI          0x00890300
#define PRESDI          0x008A0400
#define PRESSI          0x008B0500
#define PCSNI           0x008C0600
#define PLDNI           0x008D0700
#define PUACTI          0x008E3000
#define PURCI           0x008F3100
#define P2X0HI          0x00906000
#define P2X0LI          0x00916100
#define P3X0HI          0x00926200
#define P3X0LI          0x00936300
#define PHCAI           0x00946400
#define PLCAI           0x00956500
#define PUI1SI          0x00967000
#define PUI1TI          0x00977100
#define PUI2SI          0x00987200
#define PUI2TI          0x00997300
#define PUD1SI          0x009A7400
#define PUD2SI          0x009B7500
#define PSEENI          0x009CF000
#define PSECI           0x009DF100
#define PPWRI           0x009EF200
#define PRACTI          0x009F3001
#define PRRCI           0x00A03101
#define PRAHI           0x00A16001
#define PRALI           0x00A26101
#define PATAHI          0x00A36201
#define PATALI          0x00A46301
#define PRISI           0x00A57001
#define PRITI           0x00A67101
#define PRDSI           0x00A77401
#define PGACTI          0x00A83002
#define PGRCI           0x00A93102
#define P201HI          0x00AA6002
#define P201LI          0x00AB6102
#define PSACTI          0x00AC3003
#define PSRCI           0x00AD3103
#define P388HI          0x00AE6003
#define P388LI          0x00AF6103
#define PSBISI          0x00B07003
#define PSBITI          0x00B17103
#define PMACTI          0x00B23004
#define PMRCI           0x00B33104
#define P401HI          0x00B46004
#define P401LI          0x00B56104
#define PMISI           0x00B67004
#define PMITI           0x00B77104

typedef unsigned char  BYTE;
typedef unsigned short WORD;
typedef unsigned short PORT;
typedef unsigned long  DWORD;
typedef unsigned long  ADDRESS;
typedef int BOOL;
typedef int FLAG;

typedef struct
 {
	short flags;              /* InterWave stat flags */
	PORT pcodar;                      /* Base Port for Codec */
	PORT pcdrar;                      /* Base Port for Ext Device */
	PORT p2xr;                        /* Compatibility Base Port */
	PORT p3xr;                        /* MIDI and Synth Base Port */
	PORT p401ar;                      /* Gen Purpose Reg. 1 address */
	PORT p201ar;                      /* Game Ctrl normally at 0x201 */
	PORT pataar;                      /* Base Address for ATAPI I/O Space */
	PORT p388ar;                      /* Base Port for AdLib. It should be 388h */
	PORT pnprdp;                      /* PNP read data port */
	PORT igidxr;                      /* Gen Index Reg at P3XR+0x03 */
	PORT i16dp;                       /* 16-bit data port at P3XR+0x04  */
	PORT i8dp;                        /* 8-bit data port at P3XR+0x05 */
	PORT svsr;                        /* Synth Voice Select at P3XR+0x02 */
	PORT cdatap;                      /* Codec Indexed Data Port at PCODAR+0x01 */
	PORT csr1r;                       /* Codec Stat Reg 1 at PCODAR+0x02 */
	PORT cxdr;                        /* Play or Record Data Reg at PCODAR+0x03 */
	PORT gmxr;                        /* GMCR or GMSR at P3XR+0x00 */
	PORT gmxdr;                       /* GMTDR or GMRDR at P3XR+0x01 */
	PORT lmbdr;                       /* LMBDR at P3XR+0x07 */
	BYTE csn;                         /* Card Select Number */
	BYTE cmode;                       /* Codec Operation Mode */
	int dma1_chan;                    /* DMA channel 1 (local DMA & codec rec) */
	int dma2_chan;                    /* DMA channel 2 (codec play) */
	int ext_chan;                     /* Ext Dev DMA channel */
	BYTE voices;                      /* Number of active voices */
	DWORD vendor;                     /* Vendor ID and Product Identifier */
	int synth_irq;                    /* Synth IRQ number */
	int midi_irq;                     /* MIDI IRQ number */
	int ext_irq;                      /* Ext Dev IRQ  */
	int mpu_irq;                      /* MPU401 Dev IRQ */
	int emul_irq;                     /* Sound Blaster/AdLib Dev IRQ */
	ADDRESS  free_mem;                /* Address of First Free LM Block */
	DWORD reserved_mem;               /* Amount of LM reserved by app. */
	BYTE smode;                       /* Synth Mode */
	WORD  size_mem;                   /* Total LM in Kbytes */

 } IWAVE;

#endif
OpenPOWER on IntegriCloud