Import 2.2.0pre6
[davej-history.git] / drivers / sound / sb.h
blobda0d91655c1b1b04ff61362fa170a4d37ad744cb
1 #include <linux/config.h>
2 #include "legacy.h"
4 #ifdef CONFIG_SBDSP
5 #define DSP_RESET (devc->base + 0x6)
6 #define DSP_READ (devc->base + 0xA)
7 #define DSP_WRITE (devc->base + 0xC)
8 #define DSP_COMMAND (devc->base + 0xC)
9 #define DSP_STATUS (devc->base + 0xC)
10 #define DSP_DATA_AVAIL (devc->base + 0xE)
11 #define DSP_DATA_AVL16 (devc->base + 0xF)
12 #define MIXER_ADDR (devc->base + 0x4)
13 #define MIXER_DATA (devc->base + 0x5)
14 #define OPL3_LEFT (devc->base + 0x0)
15 #define OPL3_RIGHT (devc->base + 0x2)
16 #define OPL3_BOTH (devc->base + 0x8)
17 /* DSP Commands */
19 #define DSP_CMD_SPKON 0xD1
20 #define DSP_CMD_SPKOFF 0xD3
21 #define DSP_CMD_DMAON 0xD0
22 #define DSP_CMD_DMAOFF 0xD4
24 #define IMODE_NONE 0
25 #define IMODE_OUTPUT PCM_ENABLE_OUTPUT
26 #define IMODE_INPUT PCM_ENABLE_INPUT
27 #define IMODE_INIT 3
28 #define IMODE_MIDI 4
30 #define NORMAL_MIDI 0
31 #define UART_MIDI 1
35 * Device models
37 #define MDL_NONE 0
38 #define MDL_SB1 1 /* SB1.0 or 1.5 */
39 #define MDL_SB2 2 /* SB2.0 */
40 #define MDL_SB201 3 /* SB2.01 */
41 #define MDL_SBPRO 4 /* SB Pro */
42 #define MDL_SB16 5 /* SB16/32/AWE */
43 #define MDL_SBPNP 6 /* SB16/32/AWE PnP */
44 #define MDL_JAZZ 10 /* Media Vision Jazz16 */
45 #define MDL_SMW 11 /* Logitech SoundMan Wave (Jazz16) */
46 #define MDL_ESS 12 /* ESS ES688 and ES1688 */
47 #define MDL_AZTECH 13 /* Aztech Sound Galaxy family */
48 #define MDL_ES1868MIDI 14 /* MIDI port of ESS1868 */
49 #define MDL_AEDSP 15 /* Audio Excel DSP 16 */
51 #define SUBMDL_ES1788 0x10 /* Subtype ES1788 for specific handling */
52 #define SUBMDL_ES1868 0x11 /* Subtype ES1868 for specific handling */
53 #define SUBMDL_ES1869 0x12 /* Subtype ES1869 for specific handling */
54 #define SUBMDL_ES1878 0x13 /* Subtype ES1878 for specific handling */
55 #define SUBMDL_ES188X 0x14 /* Subtype ES1887 for specific handling */
56 #define SUBMDL_ALS007 42 /* ALS-007 differs from SB16 only in mixer */
57 /* register assignment */
59 * Config flags
61 #define SB_NO_MIDI 0x00000001
62 #define SB_NO_MIXER 0x00000002
63 #define SB_NO_AUDIO 0x00000004
64 #define SB_NO_RECORDING 0x00000008 /* No audio recording */
65 #define SB_MIDI_ONLY (SB_NO_AUDIO|SB_NO_MIXER)
67 struct mixer_def {
68 unsigned int regno: 8;
69 unsigned int bitoffs:4;
70 unsigned int nbits:4;
73 typedef struct mixer_def mixer_tab[32][2];
74 typedef struct mixer_def mixer_ent;
76 typedef struct sb_devc {
77 int dev;
79 /* Hardware parameters */
80 int *osp;
81 int minor, major;
82 int type;
83 int model, submodel;
84 int caps;
85 # define SBCAP_STEREO 0x00000001
86 # define SBCAP_16BITS 0x00000002
88 /* Hardware resources */
89 int base;
90 int irq;
91 int dma8, dma16;
93 /* State variables */
94 int opened;
95 /* new audio fields for full duplex support */
96 int fullduplex;
97 int duplex;
98 int speed, bits, channels;
99 volatile int irq_ok;
100 volatile int intr_active, irq_mode;
101 /* duplicate audio fields for full duplex support */
102 volatile int intr_active_16, irq_mode_16;
104 /* Mixer fields */
105 int *levels;
106 mixer_tab *iomap;
107 int mixer_caps, recmask, outmask, supported_devices;
108 int supported_rec_devices, supported_out_devices;
109 int my_mixerdev;
110 int sbmixnum;
112 /* Audio fields */
113 unsigned long trg_buf;
114 int trigger_bits;
115 int trg_bytes;
116 int trg_intrflag;
117 int trg_restart;
118 /* duplicate audio fields for full duplex support */
119 unsigned long trg_buf_16;
120 int trigger_bits_16;
121 int trg_bytes_16;
122 int trg_intrflag_16;
123 int trg_restart_16;
125 unsigned char tconst;
126 int my_dev;
128 /* MIDI fields */
129 int my_mididev;
130 int input_opened;
131 int midi_broken;
132 void (*midi_input_intr) (int dev, unsigned char data);
133 void *midi_irq_cookie; /* IRQ cookie for the midi */
134 } sb_devc;
136 int sb_dsp_command (sb_devc *devc, unsigned char val);
137 int sb_dsp_reset (sb_devc *devc);
138 void sb_setmixer (sb_devc *devc, unsigned int port, unsigned int value);
139 unsigned int sb_getmixer (sb_devc *devc, unsigned int port);
140 int sb_dsp_detect (struct address_info *hw_config);
141 int sb_dsp_init (struct address_info *hw_config);
142 void sb_dsp_unload(struct address_info *hw_config, int sbmpu);
143 int sb_mixer_init(sb_devc *devc);
144 void sb_mixer_set_stereo (sb_devc *devc, int mode);
145 void smw_mixer_init(sb_devc *devc);
146 void sb_dsp_midi_init (sb_devc *devc);
147 void sb_audio_init (sb_devc *devc, char *name);
148 void sb_midi_interrupt (sb_devc *devc);
149 int ess_write (sb_devc *devc, unsigned char reg, unsigned char data);
150 int ess_read (sb_devc *devc, unsigned char reg);
151 void ess_mixer_reload (sb_devc * devc, int dev);
153 extern int acer;
154 extern sb_devc *last_sb;
155 #endif