Merge with 2.4.0-test3-pre4.
[linux-2.6/linux-mips.git] / drivers / sound / sb.h
blobf0afbe177c49cb3b04fb73fb007bd932577d22bf
1 #define DSP_RESET (devc->base + 0x6)
2 #define DSP_READ (devc->base + 0xA)
3 #define DSP_WRITE (devc->base + 0xC)
4 #define DSP_COMMAND (devc->base + 0xC)
5 #define DSP_STATUS (devc->base + 0xC)
6 #define DSP_DATA_AVAIL (devc->base + 0xE)
7 #define DSP_DATA_AVL16 (devc->base + 0xF)
8 #define MIXER_ADDR (devc->base + 0x4)
9 #define MIXER_DATA (devc->base + 0x5)
10 #define OPL3_LEFT (devc->base + 0x0)
11 #define OPL3_RIGHT (devc->base + 0x2)
12 #define OPL3_BOTH (devc->base + 0x8)
13 /* DSP Commands */
15 #define DSP_CMD_SPKON 0xD1
16 #define DSP_CMD_SPKOFF 0xD3
17 #define DSP_CMD_DMAON 0xD0
18 #define DSP_CMD_DMAOFF 0xD4
20 #define IMODE_NONE 0
21 #define IMODE_OUTPUT PCM_ENABLE_OUTPUT
22 #define IMODE_INPUT PCM_ENABLE_INPUT
23 #define IMODE_INIT 3
24 #define IMODE_MIDI 4
26 #define NORMAL_MIDI 0
27 #define UART_MIDI 1
31 * Device models
33 #define MDL_NONE 0
34 #define MDL_SB1 1 /* SB1.0 or 1.5 */
35 #define MDL_SB2 2 /* SB2.0 */
36 #define MDL_SB201 3 /* SB2.01 */
37 #define MDL_SBPRO 4 /* SB Pro */
38 #define MDL_SB16 5 /* SB16/32/AWE */
39 #define MDL_SBPNP 6 /* SB16/32/AWE PnP */
40 #define MDL_JAZZ 10 /* Media Vision Jazz16 */
41 #define MDL_SMW 11 /* Logitech SoundMan Wave (Jazz16) */
42 #define MDL_ESS 12 /* ESS ES688 and ES1688 */
43 #define MDL_AZTECH 13 /* Aztech Sound Galaxy family */
44 #define MDL_ES1868MIDI 14 /* MIDI port of ESS1868 */
45 #define MDL_AEDSP 15 /* Audio Excel DSP 16 */
46 #define MDL_ESSPCI 16 /* ESS PCI card */
47 #define MDL_YMPCI 17 /* Yamaha PCI sb in emulation */
49 #define SUBMDL_ALS007 42 /* ALS-007 differs from SB16 only in mixer */
50 /* register assignment */
51 #define SUBMDL_ALS100 43 /* ALS-100 allows sampling rates of up */
52 /* to 48kHz */
55 * Config flags
57 #define SB_NO_MIDI 0x00000001
58 #define SB_NO_MIXER 0x00000002
59 #define SB_NO_AUDIO 0x00000004
60 #define SB_NO_RECORDING 0x00000008 /* No audio recording */
61 #define SB_MIDI_ONLY (SB_NO_AUDIO|SB_NO_MIXER)
62 #define SB_PCI_IRQ 0x00000010 /* PCI shared IRQ */
64 struct mixer_def {
65 unsigned int regno: 8;
66 unsigned int bitoffs:4;
67 unsigned int nbits:4;
70 typedef struct mixer_def mixer_tab[32][2];
71 typedef struct mixer_def mixer_ent;
73 struct sb_module_options
75 int esstype; /* ESS chip type */
76 int acer; /* Do acer notebook init? */
77 int sm_games; /* Logitech soundman games? */
80 typedef struct sb_devc {
81 int dev;
83 /* Hardware parameters */
84 int *osp;
85 int minor, major;
86 int type;
87 int model, submodel;
88 int caps;
89 # define SBCAP_STEREO 0x00000001
90 # define SBCAP_16BITS 0x00000002
92 /* Hardware resources */
93 int base;
94 int irq;
95 int dma8, dma16;
97 int pcibase; /* For ESS Maestro etc */
99 /* State variables */
100 int opened;
101 /* new audio fields for full duplex support */
102 int fullduplex;
103 int duplex;
104 int speed, bits, channels;
105 volatile int irq_ok;
106 volatile int intr_active, irq_mode;
107 /* duplicate audio fields for full duplex support */
108 volatile int intr_active_16, irq_mode_16;
110 /* Mixer fields */
111 int *levels;
112 mixer_tab *iomap;
113 int mixer_caps, recmask, outmask, supported_devices;
114 int supported_rec_devices, supported_out_devices;
115 int my_mixerdev;
116 int sbmixnum;
118 /* Audio fields */
119 unsigned long trg_buf;
120 int trigger_bits;
121 int trg_bytes;
122 int trg_intrflag;
123 int trg_restart;
124 /* duplicate audio fields for full duplex support */
125 unsigned long trg_buf_16;
126 int trigger_bits_16;
127 int trg_bytes_16;
128 int trg_intrflag_16;
129 int trg_restart_16;
131 unsigned char tconst;
133 /* MIDI fields */
134 int my_mididev;
135 int input_opened;
136 int midi_broken;
137 void (*midi_input_intr) (int dev, unsigned char data);
138 void *midi_irq_cookie; /* IRQ cookie for the midi */
140 struct sb_module_options sbmo; /* Module options */
142 } sb_devc;
145 * PCI card types
148 #define SB_PCI_ESSMAESTRO 1 /* ESS Maestro Legacy */
149 #define SB_PCI_YAMAHA 2 /* Yamaha Legacy */
152 * Functions
155 int sb_dsp_command (sb_devc *devc, unsigned char val);
156 int sb_dsp_get_byte(sb_devc * devc);
157 int sb_dsp_reset (sb_devc *devc);
158 void sb_setmixer (sb_devc *devc, unsigned int port, unsigned int value);
159 unsigned int sb_getmixer (sb_devc *devc, unsigned int port);
160 int sb_dsp_detect (struct address_info *hw_config, int pci, int pciio, struct sb_module_options *sbmo);
161 int sb_dsp_init (struct address_info *hw_config);
162 void sb_dsp_unload(struct address_info *hw_config, int sbmpu);
163 int sb_mixer_init(sb_devc *devc);
164 void sb_mixer_unload(sb_devc *devc);
165 void sb_mixer_set_stereo (sb_devc *devc, int mode);
166 void smw_mixer_init(sb_devc *devc);
167 void sb_dsp_midi_init (sb_devc *devc);
168 void sb_audio_init (sb_devc *devc, char *name);
169 void sb_midi_interrupt (sb_devc *devc);
170 void sb_chgmixer (sb_devc * devc, unsigned int reg, unsigned int mask, unsigned int val);
171 int sb_common_mixer_set(sb_devc * devc, int dev, int left, int right);
173 int sb_audio_open(int dev, int mode);
174 void sb_audio_close(int dev);
176 extern sb_devc *last_sb;
178 /* From sb_common.c */
179 void sb_dsp_disable_midi(int port);
180 void sb_dsp_disable_recording(int port);
181 void attach_sbmpu (struct address_info *hw_config);
182 int probe_sbmpu (struct address_info *hw_config);
183 void unload_sbmpu (struct address_info *hw_config);
185 void unload_sb16(struct address_info *hw_info);
186 void unload_sb16midi(struct address_info *hw_info);