Get rid of question mark, the vendor ID is correct.
[dragonfly.git] / sys / dev / sound / isa / i386 / dev_table.h
1 /*
2  * dev_table.h
3  * 
4  * Global definitions for device call tables
5  * 
6  * Copyright by Hannu Savolainen 1993
7  * 
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions are
10  * met: 1. Redistributions of source code must retain the above copyright
11  * notice, this list of conditions and the following disclaimer. 2.
12  * Redistributions in binary form must reproduce the above copyright notice,
13  * this list of conditions and the following disclaimer in the documentation
14  * and/or other materials provided with the distribution.
15  * 
16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19  * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
20  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
23  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26  * SUCH DAMAGE.
27  * 
28  */
29
30 #ifndef _DEV_TABLE_H_
31 #define _DEV_TABLE_H_
32
33 /*
34  * NOTE!        NOTE!   NOTE!   NOTE!
35  * 
36  * If you modify this file, please check the dev_table.c also.
37  * 
38  * NOTE!        NOTE!   NOTE!   NOTE!
39  */
40
41 extern int      sound_started;
42
43 struct driver_info {
44         char    *driver_id;
45         int      card_subtype;  /* Driver specific. Usually 0 */
46         int      card_type;     /* From soundcard.h      */
47         char    *name;
48         void    (*attach) (struct address_info * hw_config);
49         int     (*probe) (struct address_info * hw_config);
50 };
51
52 struct card_info {
53         int     card_type;      /* Link (search key) to the driver list */
54         struct address_info config;
55         int     enabled;
56 };
57
58 typedef struct pnp_sounddev {
59         int     id;
60         void    (*setup) (void *dev);
61         char    *driver_name;
62 }               pnp_sounddev;
63
64 /*
65  * Device specific parameters (used only by dmabuf.c)
66  */
67 #define MAX_SUB_BUFFERS         (32*MAX_REALTIME_FACTOR)
68
69 #define DMODE_NONE              0
70 #define DMODE_OUTPUT            1
71 #define DMODE_INPUT             2
72
73 struct dma_buffparms {
74         int     dma_mode;       /* DMODE_INPUT, DMODE_OUTPUT or DMODE_NONE */
75
76         char    *raw_buf;       /* Pointers to raw buffers */
77         u_long  raw_buf_phys;
78
79         /*
80          * Device state tables
81          */
82
83         u_long  flags;
84 #define DMA_BUSY        0x00000001
85 #define DMA_RESTART     0x00000002
86 #define DMA_ACTIVE      0x00000004
87 #define DMA_STARTED     0x00000008
88 #define DMA_ALLOC_DONE  0x00000020
89
90         int     open_mode;
91
92         /*
93          * Queue parameters.
94          */
95         int             qlen;
96         int             qhead;
97         int             qtail;
98
99         int             nbufs;
100         int             counts[MAX_SUB_BUFFERS];
101         int             subdivision;
102
103         int             fragment_size;
104         int             max_fragments;
105
106         int             bytes_in_use;
107
108         int             underrun_count;
109         int             byte_counter;
110
111         int             mapping_flags;
112 #define                 DMA_MAP_MAPPED          0x00000001
113         char            neutral_byte;
114         int             dma_chan;
115 };
116
117 /*
118  * Structure for use with various microcontrollers and DSP processors in the
119  * recent soundcards.
120  */
121 typedef struct coproc_operations {
122         char    name[32];
123         int     (*open) (void *devc, int sub_device);
124         void    (*close) (void *devc, int sub_device);
125         int     (*ioctl) (void *devc, u_int cmd, ioctl_arg arg, int local);
126         void    (*reset) (void *devc);
127
128         void    *devc;  /* Driver specific info */
129 }       coproc_operations;
130
131 struct audio_operations {
132         char            name[32];
133         int             flags;
134 #define NOTHING_SPECIAL         0
135 #define NEEDS_RESTART           1
136 #define DMA_AUTOMODE            2
137 #define DMA_DUPLEX              4
138 #define DMA_DISABLE             8
139         int     format_mask;    /* Bitmask for supported audio formats */
140         void    *devc;  /* Driver specific info */
141         int     (*open) (int dev, int mode);
142         void    (*close) (int dev);
143         void    (*output_block) (int dev, unsigned long buf,
144                 int count, int intrflag, int dma_restart);
145         void    (*start_input) (int dev, unsigned long buf,
146                 int count, int intrflag, int dma_restart);
147         int     (*ioctl) (int dev, u_int cmd, ioctl_arg arg, int local);
148         int     (*prepare_for_input) (int dev, int bufsize, int nbufs);
149         int     (*prepare_for_output) (int dev, int bufsize, int nbufs);
150         void    (*reset) (int dev);
151         void    (*halt_xfer) (int dev);
152         int     (*local_qlen) (int dev);
153         void    (*copy_from_user) (int dev, char *localbuf, int localoffs,
154                 snd_rw_buf * userbuf, int useroffs, int len);
155         void    (*halt_input) (int dev);
156         void    (*halt_output) (int dev);
157         void    (*trigger) (int dev, int bits);
158         long    buffsize;
159         int     dmachan1, dmachan2;
160         struct dma_buffparms *dmap_in, *dmap_out;
161         struct coproc_operations *coproc;
162         int     mixer_dev;
163         int     enable_bits;
164         int     open_mode;
165         int     go;
166         int     otherside;
167         int     busy;
168 };
169
170 struct mixer_operations {
171         char    name[32];
172         int     (*ioctl) (int dev, unsigned int cmd, ioctl_arg arg);
173 };
174
175 struct synth_operations {
176         struct synth_info *info;
177         int     midi_dev;
178         int     synth_type;
179         int     synth_subtype;
180
181         int     (*open) (int dev, int mode);
182         void    (*close) (int dev);
183         int     (*ioctl) (int dev, unsigned int cmd, ioctl_arg arg);
184         int     (*kill_note) (int dev, int voice, int note, int velocity);
185         int     (*start_note) (int dev, int voice, int note, int velocity);
186         int     (*set_instr) (int dev, int voice, int instr);
187         void    (*reset) (int dev);
188         void    (*hw_control) (int dev, unsigned char *event);
189         int     (*load_patch) (int dev, int format, snd_rw_buf * addr,
190                 int offs, int count, int pmgr_flag);
191         void    (*aftertouch) (int dev, int voice, int pressure);
192         void    (*controller) (int dev, int voice, int ctrl_num, int value);
193         void    (*panning) (int dev, int voice, int value);
194         void    (*volume_method) (int dev, int mode);
195         int     (*pmgr_interface) (int dev, struct patmgr_info * info);
196         void    (*bender) (int dev, int chn, int value);
197         int     (*alloc_voice) (int dev, int chn, int note, struct voice_alloc_info * alloc);
198         void    (*setup_voice) (int dev, int voice, int chn);
199         int     (*send_sysex) (int dev, unsigned char *bytes, int len);
200
201         struct voice_alloc_info alloc;
202         struct channel_info chn_info[16];
203 };
204
205 struct midi_input_info {        /* MIDI input scanner variables */
206 #define MI_MAX  10
207         int             m_busy;
208         unsigned char   m_buf[MI_MAX];
209         unsigned char   m_prev_status;  /* For running status */
210         int             m_ptr;
211 #define MST_INIT                        0
212 #define MST_DATA                        1
213 #define MST_SYSEX                       2
214         int             m_state;
215         int             m_left;
216 };
217
218 struct midi_operations {
219         struct midi_info info;
220         struct synth_operations *converter;
221         struct midi_input_info in_info;
222         int     (*open) (int dev, int mode,
223                 void (*inputintr) (int dev, unsigned char data),
224                 void (*outputintr) (int dev) );
225         void    (*close) (int dev);
226         int     (*ioctl) (int dev, unsigned int cmd, ioctl_arg arg);
227         int     (*putc) (int dev, unsigned char data);
228         int     (*start_read) (int dev);
229         int     (*end_read) (int dev);
230         void    (*kick) (int dev);
231         int     (*command) (int dev, unsigned char *data);
232         int     (*buffer_status) (int dev);
233         int     (*prefix_cmd) (int dev, unsigned char status);
234         struct coproc_operations *coproc;
235 };
236
237 struct sound_lowlev_timer {
238         int     dev;
239         u_int   (*tmr_start) (int dev, unsigned int usecs);
240         void    (*tmr_disable) (int dev);
241         void    (*tmr_restart) (int dev);
242 };
243
244 struct sound_timer_operations {
245         struct sound_timer_info info;
246         int     priority;
247         int     devlink;
248         int     (*open) (int dev, int mode);
249         void    (*close) (int dev);
250         int     (*event) (int dev, unsigned char *ev);
251         u_long  (*get_time) (int dev);
252         int     (*ioctl) (int dev, unsigned int cmd, ioctl_arg arg);
253         void    (*arm_timer) (int dev, long time);
254 };
255
256 #ifdef _DEV_TABLE_C_
257 struct audio_operations *audio_devs[MAX_AUDIO_DEV] = {NULL};
258 int     num_audiodevs = 0;
259 struct mixer_operations *mixer_devs[MAX_MIXER_DEV] = {NULL};
260 int     num_mixers = 0;
261 struct synth_operations *synth_devs[MAX_SYNTH_DEV + MAX_MIDI_DEV] = {NULL};
262 int     num_synths = 0;
263 struct midi_operations *midi_devs[MAX_MIDI_DEV] = {NULL};
264 int     num_midis = 0;
265
266 #ifdef CONFIG_SEQUENCER
267 extern struct sound_timer_operations default_sound_timer;
268 struct sound_timer_operations *sound_timer_devs[MAX_TIMER_DEV] =
269         {&default_sound_timer, NULL};
270 int             num_sound_timers = 1;
271 #else
272 struct sound_timer_operations *sound_timer_devs[MAX_TIMER_DEV] = {NULL};
273 int             num_sound_timers = 0;
274 #endif
275
276 /*
277  * List of low level drivers compiled into the kernel.
278  *
279  * remember, each entry contains:
280
281         char    *driver_id;
282         int      card_subtype;  (Driver specific. Usually 0)
283         int      card_type;     (From soundcard.h)
284         char    *name;
285         void    (*attach) (struct address_info * hw_config);
286         int     (*probe) (struct address_info * hw_config);
287  *
288  */
289
290 struct driver_info sound_drivers[] = {
291
292 #ifdef CONFIG_PSS
293     {"PSSECHO", 0, SNDCARD_PSS, "Echo Personal Sound System PSS (ESC614)",
294                 attach_pss, probe_pss},
295     {"PSSMPU", 0, SNDCARD_PSS_MPU, "PSS-MPU",
296                 attach_pss_mpu, probe_pss_mpu},
297     {"PSSMSS", 0, SNDCARD_PSS_MSS, "PSS-MSS",
298                 attach_pss_mss, probe_pss_mss},
299 #endif
300
301 #ifdef CONFIG_MSS
302     /* XXX changed type from 0 to 1 -lr 970705 */
303     {"MSS", 1, SNDCARD_MSS, "MS Sound System",
304                 attach_mss, probe_mss},
305     /* MSS without IRQ/DMA config registers (for DEC Alphas) */
306     {"PCXBJ", 1, SNDCARD_PSEUDO_MSS, "MS Sound System (AXP)",
307                 attach_mss, probe_mss},
308 #endif
309
310 #ifdef CONFIG_MAD16
311     {"MAD16", 0, SNDCARD_MAD16, "MAD16/Mozart (MSS)",
312                 attach_mad16, probe_mad16},
313     {"MAD16MPU", 0, SNDCARD_MAD16_MPU, "MAD16/Mozart (MPU)",
314                 attach_mad16_mpu, probe_mad16_mpu},
315 #endif
316
317 #ifdef CONFIG_CS4232
318     {"CS4232", 0, SNDCARD_CS4232, "CS4232",
319                 attach_cs4232, probe_cs4232},
320     {"CS4232MPU", 0, SNDCARD_CS4232_MPU, "CS4232 MIDI",
321                 attach_cs4232_mpu, probe_cs4232_mpu},
322 #endif
323
324 #ifdef CONFIG_YM3812
325     {"OPL3", 0, SNDCARD_ADLIB, "OPL-2/OPL-3 FM",
326                 attach_adlib_card, probe_adlib},
327 #endif
328
329 #ifdef CONFIG_PAS
330     {"PAS16", 0, SNDCARD_PAS, "ProAudioSpectrum",
331                 attach_pas_card, probe_pas},
332 #endif
333
334 #if defined(CONFIG_MPU401) && defined(CONFIG_MIDI)
335     {"MPU401", 0, SNDCARD_MPU401, "Roland MPU-401",
336                 attach_mpu401, probe_mpu401},
337 #endif
338
339 #if defined(CONFIG_MAUI)
340     {"MAUI", 0, SNDCARD_MAUI, "TB Maui",
341                 attach_maui, probe_maui},
342 #endif
343
344 #if defined(CONFIG_UART6850) && defined(CONFIG_MIDI)
345     {"MIDI6850", 0, SNDCARD_UART6850, "6860 UART Midi",
346                 attach_uart6850, probe_uart6850},
347 #endif
348
349 #ifdef CONFIG_SB
350     {"SBLAST", 0, SNDCARD_SB, "SoundBlaster",
351                 attach_sb_card, probe_sb},
352 #endif
353
354 #if defined(CONFIG_SB) && defined(CONFIG_SB16)
355 #ifdef CONFIG_AUDIO
356     {"SB16", 0, SNDCARD_SB16, "SoundBlaster16",
357                 sb16_dsp_init, sb16_dsp_detect},
358 #endif
359 #ifdef CONFIG_AWE32
360     {"AWE32", 0, SNDCARD_AWE32,     "AWE32 Synth",
361                  attach_awe, probe_awe},
362 #endif
363 #ifdef CONFIG_MIDI
364     {"SB16MIDI", 0, SNDCARD_SB16MIDI, "SB16 MIDI",
365                 attach_sb16midi, probe_sb16midi},
366 #endif
367 #endif
368
369 #ifdef CONFIG_GUS16
370     {"GUS16", 0, SNDCARD_GUS16, "Ultrasound 16-bit opt.",
371                 attach_gus_db16, probe_gus_db16},
372 #endif
373
374 #ifdef CONFIG_GUS
375     {"GUS", 0, SNDCARD_GUS, "Gravis Ultrasound",
376                 attach_gus_card, probe_gus},
377 #endif
378
379 #ifdef CONFIG_SSCAPE
380     {"SSCAPE", 0, SNDCARD_SSCAPE, "Ensoniq Soundscape",
381                 attach_sscape, probe_sscape},
382     {"SSCAPEMSS", 0, SNDCARD_SSCAPE_MSS, "MS Sound System (SoundScape)",
383                 attach_ss_mss, probe_ss_mss},
384 #endif
385
386 #if     NTRIX > 0
387     {"TRXPRO", 0, SNDCARD_TRXPRO, "MediaTriX AudioTriX Pro",
388                 attach_trix_wss, probe_trix_wss},
389     {"TRXPROSB", 0, SNDCARD_TRXPRO_SB, "AudioTriX (SB mode)",
390                 attach_trix_sb, probe_trix_sb},
391     {"TRXPROMPU", 0, SNDCARD_TRXPRO_MPU, "AudioTriX MIDI",
392                 attach_trix_mpu, probe_trix_mpu},
393 #endif
394
395 #ifdef CONFIG_PNP
396     {"AD1848", 0, 500, "PnP MSS",
397                 attach_pnp_ad1848, probe_pnp_ad1848},
398 #endif
399
400 #ifdef CONFIG_NSS
401     {"NSS", 0, SNDCARD_NSS, "NEC PC-9801-86 Sound System",
402                 attach_nss, probe_nss},
403 #endif
404
405     {NULL, 0, 0, "*?*", NULL, NULL}
406 };
407
408 int             num_sound_drivers =
409 sizeof(sound_drivers) / sizeof(struct driver_info);
410 int             max_sound_drivers =
411 sizeof(sound_drivers) / sizeof(struct driver_info);
412
413 #define FULL_SOUND
414
415 #ifndef FULL_SOUND
416 /*
417  * List of devices actually configured in the system.
418  * 
419  * Note! The detection order is significant. Don't change it.
420  *
421  * remember, the list contains
422  *
423  *      int     card_type;      (Link (search key) to the driver list)
424  *      struct address_info config;
425  *              io_base, irq, dma, dma2,
426  *              always_detect, char *name, struct... *osp
427  *      int     enabled;
428  *      void    *for_driver_use;
429  *
430  */
431
432 struct card_info snd_installed_cards[] = {
433 #ifdef CONFIG_PSS
434     {SNDCARD_PSS, {PSS_BASE, 0, -1, -1}, SND_DEFAULT_ENABLE},
435 #ifdef PSS_MPU_BASE
436     {SNDCARD_PSS_MPU, {PSS_MPU_BASE, PSS_MPU_IRQ, 0, -1}, SND_DEFAULT_ENABLE},
437 #endif
438 #ifdef PSS_MSS_BASE
439     {SNDCARD_PSS_MSS, {PSS_MSS_BASE, PSS_MSS_IRQ, PSS_MSS_DMA, -1}, SND_DEFAULT_ENABLE},
440 #endif
441 #endif  /* config PSS */
442
443 #if     NTRIX > 0
444     {SNDCARD_TRXPRO, {TRIX_BASE, TRIX_IRQ, TRIX_DMA, TRIX_DMA2}, SND_DEFAULT_ENABLE},
445 #ifdef TRIX_SB_BASE
446     {SNDCARD_TRXPRO_SB, {TRIX_SB_BASE, TRIX_SB_IRQ, TRIX_SB_DMA, -1}, SND_DEFAULT_ENABLE},
447 #endif
448 #ifdef TRIX_MPU_BASE
449     {SNDCARD_TRXPRO_MPU, {TRIX_MPU_BASE, TRIX_MPU_IRQ, 0, -1}, SND_DEFAULT_ENABLE},
450 #endif
451 #endif  /*      NTRIX > 0       */
452
453 #ifdef CONFIG_SSCAPE
454     {SNDCARD_SSCAPE, {SSCAPE_BASE, SSCAPE_IRQ, SSCAPE_DMA, -1}, SND_DEFAULT_ENABLE},
455     {SNDCARD_SSCAPE_MSS, {SSCAPE_MSS_BASE, SSCAPE_MSS_IRQ, SSCAPE_MSS_DMA, -1}, SND_DEFAULT_ENABLE},
456 #endif
457
458 #ifdef CONFIG_MAD16
459     {SNDCARD_MAD16, {MAD16_BASE, MAD16_IRQ, MAD16_DMA, MAD16_DMA2}, SND_DEFAULT_ENABLE},
460 #ifdef MAD16_MPU_BASE
461     {SNDCARD_MAD16_MPU, {MAD16_MPU_BASE, MAD16_MPU_IRQ, 0, -1}, SND_DEFAULT_ENABLE},
462 #endif
463 #endif  /* CONFIG_MAD16 */
464
465 #ifdef CONFIG_CS4232
466 #ifdef CS4232_MPU_BASE
467     {SNDCARD_CS4232_MPU, {CS4232_MPU_BASE, CS4232_MPU_IRQ, 0, -1}, SND_DEFAULT_ENABLE},
468 #endif
469     {SNDCARD_CS4232, {CS4232_BASE, CS4232_IRQ, CS4232_DMA, CS4232_DMA2}, SND_DEFAULT_ENABLE},
470 #endif
471
472 #ifdef CONFIG_MSS
473 #ifdef PSEUDO_MSS
474     {SNDCARD_MSS, {MSS_BASE, MSS_IRQ, MSS_DMA, -1}, SND_DEFAULT_ENABLE},
475 #else
476     {SNDCARD_PSEUDO_MSS, {MSS_BASE, MSS_IRQ, MSS_DMA, -1}, SND_DEFAULT_ENABLE},
477 #endif
478 #ifdef MSS2_BASE
479     {SNDCARD_MSS, {MSS2_BASE, MSS2_IRQ, MSS2_DMA, -1}, SND_DEFAULT_ENABLE},
480 #endif
481 #endif  /* CONFIG_MSS */
482
483 #ifdef CONFIG_PAS
484     {SNDCARD_PAS, {PAS_BASE, PAS_IRQ, PAS_DMA, -1}, SND_DEFAULT_ENABLE},
485 #endif
486
487 #ifdef CONFIG_SB
488 #ifndef SBC_DMA
489 #define SBC_DMA         1
490 #endif
491     {SNDCARD_SB, {SBC_BASE, SBC_IRQ, SBC_DMA, -1}, SND_DEFAULT_ENABLE},
492 #endif
493
494 #if defined(CONFIG_MAUI)
495     {SNDCARD_MAUI, {MAUI_BASE, MAUI_IRQ, 0, -1}, SND_DEFAULT_ENABLE},
496 #endif
497
498 #if defined(CONFIG_MPU401) && defined(CONFIG_MIDI)
499     {SNDCARD_MPU401, {MPU_BASE, MPU_IRQ, 0, -1}, SND_DEFAULT_ENABLE},
500 #ifdef MPU2_BASE
501     {SNDCARD_MPU401, {MPU2_BASE, MPU2_IRQ, 0, -1}, SND_DEFAULT_ENABLE},
502 #endif
503 #ifdef MPU3_BASE
504     {SNDCARD_MPU401, {MPU3_BASE, MPU2_IRQ, 0, -1}, SND_DEFAULT_ENABLE},
505 #endif
506 #endif
507
508 #if defined(CONFIG_UART6850) && defined(CONFIG_MIDI)
509     {SNDCARD_UART6850, {U6850_BASE, U6850_IRQ, 0, -1}, SND_DEFAULT_ENABLE},
510 #endif
511
512 #if defined(CONFIG_SB) && defined(CONFIG_SB16)
513 #ifdef CONFIG_AUDIO
514     {SNDCARD_SB16, {SBC_BASE, SBC_IRQ, SB16_DMA, -1}, SND_DEFAULT_ENABLE},
515 #endif
516 #ifdef CONFIG_MIDI
517     {SNDCARD_SB16MIDI, {SB16MIDI_BASE, SBC_IRQ, 0, -1}, SND_DEFAULT_ENABLE},
518 #endif
519 #ifdef CONFIG_AWE32
520     {SNDCARD_AWE32,{AWE32_BASE, 0, 0, -1}, SND_DEFAULT_ENABLE},
521 #endif
522 #endif
523
524 #ifdef CONFIG_GUS
525 #ifdef CONFIG_GUS16
526     {SNDCARD_GUS16, {GUS16_BASE, GUS16_IRQ, GUS16_DMA, -1}, SND_DEFAULT_ENABLE},
527 #endif
528     {SNDCARD_GUS, {GUS_BASE, GUS_IRQ, GUS_DMA, GUS_DMA2}, SND_DEFAULT_ENABLE},
529 #endif
530
531 #ifdef CONFIG_YM3812
532     {SNDCARD_ADLIB, {FM_MONO, 0, 0, -1}, SND_DEFAULT_ENABLE},
533 #endif
534
535 #ifdef CONFIG_NSS
536     {SNDCARD_NSS, {NSS_BASE, NSS_IRQ, 0, -1}, SND_DEFAULT_ENABLE},
537 #endif
538     /* Define some expansion space */
539     {0, {0}, 0},
540     {0, {0}, 0},
541     {0, {0}, 0},
542     {0, {0}, 0},
543     {0, {0}, 0}
544 };
545
546 int num_sound_cards = sizeof(snd_installed_cards) / sizeof(struct card_info);
547 int max_sound_cards = sizeof(snd_installed_cards) / sizeof(struct card_info);
548
549 #else
550 int num_sound_cards = 0;
551 struct card_info snd_installed_cards[20] = {{0}};
552 int max_sound_cards = 20;
553 #endif
554
555 #ifdef MODULE
556 int trace_init = 0;
557 #else
558 int trace_init = 1;
559 #endif
560
561 #else
562 extern struct audio_operations *audio_devs[MAX_AUDIO_DEV];
563 extern int num_audiodevs;
564 extern struct mixer_operations *mixer_devs[MAX_MIXER_DEV];
565 extern int      num_mixers;
566 extern struct synth_operations *synth_devs[MAX_SYNTH_DEV + MAX_MIDI_DEV];
567 extern int      num_synths;
568 extern struct midi_operations *midi_devs[MAX_MIDI_DEV];
569 extern int      num_midis;
570 extern struct sound_timer_operations *sound_timer_devs[MAX_TIMER_DEV];
571 extern int      num_sound_timers;
572
573 extern struct driver_info sound_drivers[];
574 extern int      num_sound_drivers;
575 extern int      max_sound_drivers;
576 extern struct card_info snd_installed_cards[];
577 extern int      num_sound_cards;
578 extern int      max_sound_cards;
579
580 extern int      trace_init;
581
582 void            sndtable_init(void);
583 int             sndtable_get_cardcount(void);
584 struct address_info *sound_getconf(int card_type);
585 void            sound_chconf(int card_type, int ioaddr, int irq, int dma);
586 int             snd_find_driver(int type);
587 int             sndtable_identify_card(char *name);
588 void            sound_setup(char *str, int *ints);
589
590 int             sound_alloc_dmap(int dev, struct dma_buffparms * dmap, int chan);
591 void            sound_free_dmap(int dev, struct dma_buffparms * dmap);
592 extern int      soud_map_buffer(int dev, struct dma_buffparms * dmap, buffmem_desc * info);
593 void            install_pnp_sounddrv(struct pnp_sounddev * drv);
594 int             sndtable_probe(int unit, struct address_info * hw_config);
595 int             sndtable_init_card(int unit, struct address_info * hw_config);
596 void            sound_timer_init(struct sound_lowlev_timer * t, char *name);
597 int 
598 sound_start_dma(int dev, struct dma_buffparms * dmap, int chan,
599                 unsigned long physaddr,
600                 int count, int dma_mode, int autoinit);
601 void            sound_dma_intr(int dev, struct dma_buffparms * dmap, int chan);
602
603 #endif                          /* _DEV_TABLE_C_ */
604 #endif                          /* _DEV_TABLE_H_ */