diff options
Diffstat (limited to 'sound/oss/sb.h')
-rw-r--r-- | sound/oss/sb.h | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/sound/oss/sb.h b/sound/oss/sb.h new file mode 100644 index 000000000000..77e8891ce333 --- /dev/null +++ b/sound/oss/sb.h | |||
@@ -0,0 +1,185 @@ | |||
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 */ | ||
14 | |||
15 | #define DSP_CMD_SPKON 0xD1 | ||
16 | #define DSP_CMD_SPKOFF 0xD3 | ||
17 | #define DSP_CMD_DMAON 0xD0 | ||
18 | #define DSP_CMD_DMAOFF 0xD4 | ||
19 | |||
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 | ||
25 | |||
26 | #define NORMAL_MIDI 0 | ||
27 | #define UART_MIDI 1 | ||
28 | |||
29 | |||
30 | /* | ||
31 | * Device models | ||
32 | */ | ||
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 */ | ||
48 | |||
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 */ | ||
53 | |||
54 | /* | ||
55 | * Config flags | ||
56 | */ | ||
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 */ | ||
63 | |||
64 | struct mixer_def { | ||
65 | unsigned int regno: 8; | ||
66 | unsigned int bitoffs:4; | ||
67 | unsigned int nbits:4; | ||
68 | }; | ||
69 | |||
70 | typedef struct mixer_def mixer_tab[32][2]; | ||
71 | typedef struct mixer_def mixer_ent; | ||
72 | |||
73 | struct sb_module_options | ||
74 | { | ||
75 | int esstype; /* ESS chip type */ | ||
76 | int acer; /* Do acer notebook init? */ | ||
77 | int sm_games; /* Logitech soundman games? */ | ||
78 | }; | ||
79 | |||
80 | typedef struct sb_devc { | ||
81 | int dev; | ||
82 | |||
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 | ||
91 | |||
92 | /* Hardware resources */ | ||
93 | int base; | ||
94 | int irq; | ||
95 | int dma8, dma16; | ||
96 | |||
97 | int pcibase; /* For ESS Maestro etc */ | ||
98 | |||
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; | ||
109 | |||
110 | /* Mixer fields */ | ||
111 | int *levels; | ||
112 | mixer_tab *iomap; | ||
113 | size_t iomap_sz; /* number or records in the iomap table */ | ||
114 | int mixer_caps, recmask, outmask, supported_devices; | ||
115 | int supported_rec_devices, supported_out_devices; | ||
116 | int my_mixerdev; | ||
117 | int sbmixnum; | ||
118 | |||
119 | /* Audio fields */ | ||
120 | unsigned long trg_buf; | ||
121 | int trigger_bits; | ||
122 | int trg_bytes; | ||
123 | int trg_intrflag; | ||
124 | int trg_restart; | ||
125 | /* duplicate audio fields for full duplex support */ | ||
126 | unsigned long trg_buf_16; | ||
127 | int trigger_bits_16; | ||
128 | int trg_bytes_16; | ||
129 | int trg_intrflag_16; | ||
130 | int trg_restart_16; | ||
131 | |||
132 | unsigned char tconst; | ||
133 | |||
134 | /* MIDI fields */ | ||
135 | int my_mididev; | ||
136 | int input_opened; | ||
137 | int midi_broken; | ||
138 | void (*midi_input_intr) (int dev, unsigned char data); | ||
139 | void *midi_irq_cookie; /* IRQ cookie for the midi */ | ||
140 | |||
141 | spinlock_t lock; | ||
142 | |||
143 | struct sb_module_options sbmo; /* Module options */ | ||
144 | |||
145 | } sb_devc; | ||
146 | |||
147 | /* | ||
148 | * PCI card types | ||
149 | */ | ||
150 | |||
151 | #define SB_PCI_ESSMAESTRO 1 /* ESS Maestro Legacy */ | ||
152 | #define SB_PCI_YAMAHA 2 /* Yamaha Legacy */ | ||
153 | |||
154 | /* | ||
155 | * Functions | ||
156 | */ | ||
157 | |||
158 | int sb_dsp_command (sb_devc *devc, unsigned char val); | ||
159 | int sb_dsp_get_byte(sb_devc * devc); | ||
160 | int sb_dsp_reset (sb_devc *devc); | ||
161 | void sb_setmixer (sb_devc *devc, unsigned int port, unsigned int value); | ||
162 | unsigned int sb_getmixer (sb_devc *devc, unsigned int port); | ||
163 | int sb_dsp_detect (struct address_info *hw_config, int pci, int pciio, struct sb_module_options *sbmo); | ||
164 | int sb_dsp_init (struct address_info *hw_config, struct module *owner); | ||
165 | void sb_dsp_unload(struct address_info *hw_config, int sbmpu); | ||
166 | int sb_mixer_init(sb_devc *devc, struct module *owner); | ||
167 | void sb_mixer_unload(sb_devc *devc); | ||
168 | void sb_mixer_set_stereo (sb_devc *devc, int mode); | ||
169 | void smw_mixer_init(sb_devc *devc); | ||
170 | void sb_dsp_midi_init (sb_devc *devc, struct module *owner); | ||
171 | void sb_audio_init (sb_devc *devc, char *name, struct module *owner); | ||
172 | void sb_midi_interrupt (sb_devc *devc); | ||
173 | void sb_chgmixer (sb_devc * devc, unsigned int reg, unsigned int mask, unsigned int val); | ||
174 | int sb_common_mixer_set(sb_devc * devc, int dev, int left, int right); | ||
175 | |||
176 | int sb_audio_open(int dev, int mode); | ||
177 | void sb_audio_close(int dev); | ||
178 | |||
179 | /* From sb_common.c */ | ||
180 | void sb_dsp_disable_midi(int port); | ||
181 | int probe_sbmpu (struct address_info *hw_config, struct module *owner); | ||
182 | void unload_sbmpu (struct address_info *hw_config); | ||
183 | |||
184 | void unload_sb16(struct address_info *hw_info); | ||
185 | void unload_sb16midi(struct address_info *hw_info); | ||