diff options
author | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
commit | 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (patch) | |
tree | 0bba044c4ce775e45a88a51686b5d9f90697ea9d /sound/oss/dev_table.h |
Linux-2.6.12-rc2v2.6.12-rc2
Initial git repository build. I'm not bothering with the full history,
even though we have it. We can create a separate "historical" git
archive of that later if we want to, and in the meantime it's about
3.2GB when imported into git - space that would just make the early
git days unnecessarily complicated, when we don't have a lot of good
infrastructure for it.
Let it rip!
Diffstat (limited to 'sound/oss/dev_table.h')
-rw-r--r-- | sound/oss/dev_table.h | 405 |
1 files changed, 405 insertions, 0 deletions
diff --git a/sound/oss/dev_table.h b/sound/oss/dev_table.h new file mode 100644 index 000000000000..adf1d625b576 --- /dev/null +++ b/sound/oss/dev_table.h | |||
@@ -0,0 +1,405 @@ | |||
1 | /* | ||
2 | * dev_table.h | ||
3 | * | ||
4 | * Global definitions for device call tables | ||
5 | * | ||
6 | * | ||
7 | * Copyright (C) by Hannu Savolainen 1993-1997 | ||
8 | * | ||
9 | * OSS/Free for Linux is distributed under the GNU GENERAL PUBLIC LICENSE (GPL) | ||
10 | * Version 2 (June 1991). See the "COPYING" file distributed with this software | ||
11 | * for more info. | ||
12 | */ | ||
13 | |||
14 | |||
15 | #ifndef _DEV_TABLE_H_ | ||
16 | #define _DEV_TABLE_H_ | ||
17 | |||
18 | #include <linux/spinlock.h> | ||
19 | /* | ||
20 | * Sound card numbers 27 to 999. (1 to 26 are defined in soundcard.h) | ||
21 | * Numbers 1000 to N are reserved for driver's internal use. | ||
22 | */ | ||
23 | |||
24 | #define SNDCARD_DESKPROXL 27 /* Compaq Deskpro XL */ | ||
25 | #define SNDCARD_VIDC 28 /* ARMs VIDC */ | ||
26 | #define SNDCARD_SBPNP 29 | ||
27 | #define SNDCARD_SOFTOSS 36 | ||
28 | #define SNDCARD_VMIDI 37 | ||
29 | #define SNDCARD_OPL3SA1 38 /* Note: clash in msnd.h */ | ||
30 | #define SNDCARD_OPL3SA1_SB 39 | ||
31 | #define SNDCARD_OPL3SA1_MPU 40 | ||
32 | #define SNDCARD_WAVEFRONT 41 | ||
33 | #define SNDCARD_OPL3SA2 42 | ||
34 | #define SNDCARD_OPL3SA2_MPU 43 | ||
35 | #define SNDCARD_WAVEARTIST 44 /* Waveartist */ | ||
36 | #define SNDCARD_OPL3SA2_MSS 45 /* Originally missed */ | ||
37 | #define SNDCARD_AD1816 88 | ||
38 | |||
39 | /* | ||
40 | * NOTE! NOTE! NOTE! NOTE! | ||
41 | * | ||
42 | * If you modify this file, please check the dev_table.c also. | ||
43 | * | ||
44 | * NOTE! NOTE! NOTE! NOTE! | ||
45 | */ | ||
46 | |||
47 | struct driver_info | ||
48 | { | ||
49 | char *driver_id; | ||
50 | int card_subtype; /* Driver specific. Usually 0 */ | ||
51 | int card_type; /* From soundcard.h */ | ||
52 | char *name; | ||
53 | void (*attach) (struct address_info *hw_config); | ||
54 | int (*probe) (struct address_info *hw_config); | ||
55 | void (*unload) (struct address_info *hw_config); | ||
56 | }; | ||
57 | |||
58 | struct card_info | ||
59 | { | ||
60 | int card_type; /* Link (search key) to the driver list */ | ||
61 | struct address_info config; | ||
62 | int enabled; | ||
63 | void *for_driver_use; | ||
64 | }; | ||
65 | |||
66 | |||
67 | /* | ||
68 | * Device specific parameters (used only by dmabuf.c) | ||
69 | */ | ||
70 | #define MAX_SUB_BUFFERS (32*MAX_REALTIME_FACTOR) | ||
71 | |||
72 | #define DMODE_NONE 0 | ||
73 | #define DMODE_OUTPUT PCM_ENABLE_OUTPUT | ||
74 | #define DMODE_INPUT PCM_ENABLE_INPUT | ||
75 | |||
76 | struct dma_buffparms | ||
77 | { | ||
78 | int dma_mode; /* DMODE_INPUT, DMODE_OUTPUT or DMODE_NONE */ | ||
79 | int closing; | ||
80 | |||
81 | /* | ||
82 | * Pointers to raw buffers | ||
83 | */ | ||
84 | |||
85 | char *raw_buf; | ||
86 | unsigned long raw_buf_phys; | ||
87 | int buffsize; | ||
88 | |||
89 | /* | ||
90 | * Device state tables | ||
91 | */ | ||
92 | |||
93 | unsigned long flags; | ||
94 | #define DMA_BUSY 0x00000001 | ||
95 | #define DMA_RESTART 0x00000002 | ||
96 | #define DMA_ACTIVE 0x00000004 | ||
97 | #define DMA_STARTED 0x00000008 | ||
98 | #define DMA_EMPTY 0x00000010 | ||
99 | #define DMA_ALLOC_DONE 0x00000020 | ||
100 | #define DMA_SYNCING 0x00000040 | ||
101 | #define DMA_DIRTY 0x00000080 | ||
102 | #define DMA_POST 0x00000100 | ||
103 | #define DMA_NODMA 0x00000200 | ||
104 | #define DMA_NOTIMEOUT 0x00000400 | ||
105 | |||
106 | int open_mode; | ||
107 | |||
108 | /* | ||
109 | * Queue parameters. | ||
110 | */ | ||
111 | int qlen; | ||
112 | int qhead; | ||
113 | int qtail; | ||
114 | spinlock_t lock; | ||
115 | |||
116 | int cfrag; /* Current incomplete fragment (write) */ | ||
117 | |||
118 | int nbufs; | ||
119 | int counts[MAX_SUB_BUFFERS]; | ||
120 | int subdivision; | ||
121 | |||
122 | int fragment_size; | ||
123 | int needs_reorg; | ||
124 | int max_fragments; | ||
125 | |||
126 | int bytes_in_use; | ||
127 | |||
128 | int underrun_count; | ||
129 | unsigned long byte_counter; | ||
130 | unsigned long user_counter; | ||
131 | unsigned long max_byte_counter; | ||
132 | int data_rate; /* Bytes/second */ | ||
133 | |||
134 | int mapping_flags; | ||
135 | #define DMA_MAP_MAPPED 0x00000001 | ||
136 | char neutral_byte; | ||
137 | int dma; /* DMA channel */ | ||
138 | |||
139 | int applic_profile; /* Application profile (APF_*) */ | ||
140 | /* Interrupt callback stuff */ | ||
141 | void (*audio_callback) (int dev, int parm); | ||
142 | int callback_parm; | ||
143 | |||
144 | int buf_flags[MAX_SUB_BUFFERS]; | ||
145 | #define BUFF_EOF 0x00000001 /* Increment eof count */ | ||
146 | #define BUFF_DIRTY 0x00000002 /* Buffer written */ | ||
147 | }; | ||
148 | |||
149 | /* | ||
150 | * Structure for use with various microcontrollers and DSP processors | ||
151 | * in the recent sound cards. | ||
152 | */ | ||
153 | typedef struct coproc_operations | ||
154 | { | ||
155 | char name[64]; | ||
156 | struct module *owner; | ||
157 | int (*open) (void *devc, int sub_device); | ||
158 | void (*close) (void *devc, int sub_device); | ||
159 | int (*ioctl) (void *devc, unsigned int cmd, void __user * arg, int local); | ||
160 | void (*reset) (void *devc); | ||
161 | |||
162 | void *devc; /* Driver specific info */ | ||
163 | } coproc_operations; | ||
164 | |||
165 | struct audio_driver | ||
166 | { | ||
167 | struct module *owner; | ||
168 | int (*open) (int dev, int mode); | ||
169 | void (*close) (int dev); | ||
170 | void (*output_block) (int dev, unsigned long buf, | ||
171 | int count, int intrflag); | ||
172 | void (*start_input) (int dev, unsigned long buf, | ||
173 | int count, int intrflag); | ||
174 | int (*ioctl) (int dev, unsigned int cmd, void __user * arg); | ||
175 | int (*prepare_for_input) (int dev, int bufsize, int nbufs); | ||
176 | int (*prepare_for_output) (int dev, int bufsize, int nbufs); | ||
177 | void (*halt_io) (int dev); | ||
178 | int (*local_qlen)(int dev); | ||
179 | void (*copy_user) (int dev, | ||
180 | char *localbuf, int localoffs, | ||
181 | const char __user *userbuf, int useroffs, | ||
182 | int max_in, int max_out, | ||
183 | int *used, int *returned, | ||
184 | int len); | ||
185 | void (*halt_input) (int dev); | ||
186 | void (*halt_output) (int dev); | ||
187 | void (*trigger) (int dev, int bits); | ||
188 | int (*set_speed)(int dev, int speed); | ||
189 | unsigned int (*set_bits)(int dev, unsigned int bits); | ||
190 | short (*set_channels)(int dev, short channels); | ||
191 | void (*postprocess_write)(int dev); /* Device spesific postprocessing for written data */ | ||
192 | void (*preprocess_read)(int dev); /* Device spesific preprocessing for read data */ | ||
193 | void (*mmap)(int dev); | ||
194 | }; | ||
195 | |||
196 | struct audio_operations | ||
197 | { | ||
198 | char name[128]; | ||
199 | int flags; | ||
200 | #define NOTHING_SPECIAL 0x00 | ||
201 | #define NEEDS_RESTART 0x01 | ||
202 | #define DMA_AUTOMODE 0x02 | ||
203 | #define DMA_DUPLEX 0x04 | ||
204 | #define DMA_PSEUDO_AUTOMODE 0x08 | ||
205 | #define DMA_HARDSTOP 0x10 | ||
206 | #define DMA_EXACT 0x40 | ||
207 | #define DMA_NORESET 0x80 | ||
208 | int format_mask; /* Bitmask for supported audio formats */ | ||
209 | void *devc; /* Driver specific info */ | ||
210 | struct audio_driver *d; | ||
211 | void *portc; /* Driver specific info */ | ||
212 | struct dma_buffparms *dmap_in, *dmap_out; | ||
213 | struct coproc_operations *coproc; | ||
214 | int mixer_dev; | ||
215 | int enable_bits; | ||
216 | int open_mode; | ||
217 | int go; | ||
218 | int min_fragment; /* 0 == unlimited */ | ||
219 | int max_fragment; /* 0 == unlimited */ | ||
220 | int parent_dev; /* 0 -> no parent, 1 to n -> parent=parent_dev+1 */ | ||
221 | |||
222 | /* fields formerly in dmabuf.c */ | ||
223 | wait_queue_head_t in_sleeper; | ||
224 | wait_queue_head_t out_sleeper; | ||
225 | wait_queue_head_t poll_sleeper; | ||
226 | |||
227 | /* fields formerly in audio.c */ | ||
228 | int audio_mode; | ||
229 | |||
230 | #define AM_NONE 0 | ||
231 | #define AM_WRITE OPEN_WRITE | ||
232 | #define AM_READ OPEN_READ | ||
233 | |||
234 | int local_format; | ||
235 | int audio_format; | ||
236 | int local_conversion; | ||
237 | #define CNV_MU_LAW 0x00000001 | ||
238 | |||
239 | /* large structures at the end to keep offsets small */ | ||
240 | struct dma_buffparms dmaps[2]; | ||
241 | }; | ||
242 | |||
243 | int *load_mixer_volumes(char *name, int *levels, int present); | ||
244 | |||
245 | struct mixer_operations | ||
246 | { | ||
247 | struct module *owner; | ||
248 | char id[16]; | ||
249 | char name[64]; | ||
250 | int (*ioctl) (int dev, unsigned int cmd, void __user * arg); | ||
251 | |||
252 | void *devc; | ||
253 | int modify_counter; | ||
254 | }; | ||
255 | |||
256 | struct synth_operations | ||
257 | { | ||
258 | struct module *owner; | ||
259 | char *id; /* Unique identifier (ASCII) max 29 char */ | ||
260 | struct synth_info *info; | ||
261 | int midi_dev; | ||
262 | int synth_type; | ||
263 | int synth_subtype; | ||
264 | |||
265 | int (*open) (int dev, int mode); | ||
266 | void (*close) (int dev); | ||
267 | int (*ioctl) (int dev, unsigned int cmd, void __user * arg); | ||
268 | int (*kill_note) (int dev, int voice, int note, int velocity); | ||
269 | int (*start_note) (int dev, int voice, int note, int velocity); | ||
270 | int (*set_instr) (int dev, int voice, int instr); | ||
271 | void (*reset) (int dev); | ||
272 | void (*hw_control) (int dev, unsigned char *event); | ||
273 | int (*load_patch) (int dev, int format, const char __user *addr, | ||
274 | int offs, int count, int pmgr_flag); | ||
275 | void (*aftertouch) (int dev, int voice, int pressure); | ||
276 | void (*controller) (int dev, int voice, int ctrl_num, int value); | ||
277 | void (*panning) (int dev, int voice, int value); | ||
278 | void (*volume_method) (int dev, int mode); | ||
279 | void (*bender) (int dev, int chn, int value); | ||
280 | int (*alloc_voice) (int dev, int chn, int note, struct voice_alloc_info *alloc); | ||
281 | void (*setup_voice) (int dev, int voice, int chn); | ||
282 | int (*send_sysex)(int dev, unsigned char *bytes, int len); | ||
283 | |||
284 | struct voice_alloc_info alloc; | ||
285 | struct channel_info chn_info[16]; | ||
286 | int emulation; | ||
287 | #define EMU_GM 1 /* General MIDI */ | ||
288 | #define EMU_XG 2 /* Yamaha XG */ | ||
289 | #define MAX_SYSEX_BUF 64 | ||
290 | unsigned char sysex_buf[MAX_SYSEX_BUF]; | ||
291 | int sysex_ptr; | ||
292 | }; | ||
293 | |||
294 | struct midi_input_info | ||
295 | { | ||
296 | /* MIDI input scanner variables */ | ||
297 | #define MI_MAX 10 | ||
298 | volatile int m_busy; | ||
299 | unsigned char m_buf[MI_MAX]; | ||
300 | unsigned char m_prev_status; /* For running status */ | ||
301 | int m_ptr; | ||
302 | #define MST_INIT 0 | ||
303 | #define MST_DATA 1 | ||
304 | #define MST_SYSEX 2 | ||
305 | int m_state; | ||
306 | int m_left; | ||
307 | }; | ||
308 | |||
309 | struct midi_operations | ||
310 | { | ||
311 | struct module *owner; | ||
312 | struct midi_info info; | ||
313 | struct synth_operations *converter; | ||
314 | struct midi_input_info in_info; | ||
315 | int (*open) (int dev, int mode, | ||
316 | void (*inputintr)(int dev, unsigned char data), | ||
317 | void (*outputintr)(int dev) | ||
318 | ); | ||
319 | void (*close) (int dev); | ||
320 | int (*ioctl) (int dev, unsigned int cmd, void __user * arg); | ||
321 | int (*outputc) (int dev, unsigned char data); | ||
322 | int (*start_read) (int dev); | ||
323 | int (*end_read) (int dev); | ||
324 | void (*kick)(int dev); | ||
325 | int (*command) (int dev, unsigned char *data); | ||
326 | int (*buffer_status) (int dev); | ||
327 | int (*prefix_cmd) (int dev, unsigned char status); | ||
328 | struct coproc_operations *coproc; | ||
329 | void *devc; | ||
330 | }; | ||
331 | |||
332 | struct sound_lowlev_timer | ||
333 | { | ||
334 | int dev; | ||
335 | int priority; | ||
336 | unsigned int (*tmr_start)(int dev, unsigned int usecs); | ||
337 | void (*tmr_disable)(int dev); | ||
338 | void (*tmr_restart)(int dev); | ||
339 | }; | ||
340 | |||
341 | struct sound_timer_operations | ||
342 | { | ||
343 | struct module *owner; | ||
344 | struct sound_timer_info info; | ||
345 | int priority; | ||
346 | int devlink; | ||
347 | int (*open)(int dev, int mode); | ||
348 | void (*close)(int dev); | ||
349 | int (*event)(int dev, unsigned char *ev); | ||
350 | unsigned long (*get_time)(int dev); | ||
351 | int (*ioctl) (int dev, unsigned int cmd, void __user * arg); | ||
352 | void (*arm_timer)(int dev, long time); | ||
353 | }; | ||
354 | |||
355 | #ifdef _DEV_TABLE_C_ | ||
356 | struct audio_operations *audio_devs[MAX_AUDIO_DEV]; | ||
357 | int num_audiodevs; | ||
358 | struct mixer_operations *mixer_devs[MAX_MIXER_DEV]; | ||
359 | int num_mixers; | ||
360 | struct synth_operations *synth_devs[MAX_SYNTH_DEV+MAX_MIDI_DEV]; | ||
361 | int num_synths; | ||
362 | struct midi_operations *midi_devs[MAX_MIDI_DEV]; | ||
363 | int num_midis; | ||
364 | |||
365 | extern struct sound_timer_operations default_sound_timer; | ||
366 | struct sound_timer_operations *sound_timer_devs[MAX_TIMER_DEV] = { | ||
367 | &default_sound_timer, NULL | ||
368 | }; | ||
369 | int num_sound_timers = 1; | ||
370 | #else | ||
371 | extern struct audio_operations *audio_devs[MAX_AUDIO_DEV]; | ||
372 | extern int num_audiodevs; | ||
373 | extern struct mixer_operations *mixer_devs[MAX_MIXER_DEV]; | ||
374 | extern int num_mixers; | ||
375 | extern struct synth_operations *synth_devs[MAX_SYNTH_DEV+MAX_MIDI_DEV]; | ||
376 | extern int num_synths; | ||
377 | extern struct midi_operations *midi_devs[MAX_MIDI_DEV]; | ||
378 | extern int num_midis; | ||
379 | extern struct sound_timer_operations * sound_timer_devs[MAX_TIMER_DEV]; | ||
380 | extern int num_sound_timers; | ||
381 | #endif /* _DEV_TABLE_C_ */ | ||
382 | |||
383 | extern int sound_map_buffer (int dev, struct dma_buffparms *dmap, buffmem_desc *info); | ||
384 | void sound_timer_init (struct sound_lowlev_timer *t, char *name); | ||
385 | void sound_dma_intr (int dev, struct dma_buffparms *dmap, int chan); | ||
386 | |||
387 | #define AUDIO_DRIVER_VERSION 2 | ||
388 | #define MIXER_DRIVER_VERSION 2 | ||
389 | int sound_install_audiodrv(int vers, char *name, struct audio_driver *driver, | ||
390 | int driver_size, int flags, unsigned int format_mask, | ||
391 | void *devc, int dma1, int dma2); | ||
392 | int sound_install_mixer(int vers, char *name, struct mixer_operations *driver, | ||
393 | int driver_size, void *devc); | ||
394 | |||
395 | void sound_unload_audiodev(int dev); | ||
396 | void sound_unload_mixerdev(int dev); | ||
397 | void sound_unload_mididev(int dev); | ||
398 | void sound_unload_synthdev(int dev); | ||
399 | void sound_unload_timerdev(int dev); | ||
400 | int sound_alloc_mixerdev(void); | ||
401 | int sound_alloc_timerdev(void); | ||
402 | int sound_alloc_synthdev(void); | ||
403 | int sound_alloc_mididev(void); | ||
404 | #endif /* _DEV_TABLE_H_ */ | ||
405 | |||