patch-2.3.50 linux/drivers/sound/dev_table.c
Next file: linux/drivers/sound/dev_table.h
Previous file: linux/drivers/sound/cs4232.h
Back to the patch index
Back to the overall index
- Lines: 413
- Date:
Tue Mar 7 13:40:24 2000
- Orig file:
v2.3.49/linux/drivers/sound/dev_table.c
- Orig date:
Sat Feb 26 22:31:49 2000
diff -u --recursive --new-file v2.3.49/linux/drivers/sound/dev_table.c linux/drivers/sound/dev_table.c
@@ -2,9 +2,8 @@
* sound/dev_table.c
*
* Device call tables.
- */
-
-/*
+ *
+ *
* Copyright (C) by Hannu Savolainen 1993-1997
*
* OSS/Free for Linux is distributed under the GNU GENERAL PUBLIC LICENSE (GPL)
@@ -15,7 +14,6 @@
#include <linux/config.h>
#include <linux/init.h>
-
#define _DEV_TABLE_C_
#include "sound_config.h"
@@ -23,387 +21,6 @@
int sound_started = 0;
int sndtable_get_cardcount(void);
-int snd_find_driver(int type)
-{
- int i, n = num_sound_drivers;
-
- for (i = 0; i < n; i++)
- if (sound_drivers[i].card_type == type)
- return i;
-
- return -1;
-}
-
-static void start_services(void)
-{
-#ifdef FIXME
- int soundcards_installed;
-
- if (!(soundcards_installed = sndtable_get_cardcount()))
- return; /* No cards detected */
-#endif
-
- if (num_audiodevs) /* Audio devices present */
- {
- int dev;
- for (dev = 0; dev < num_audiodevs; dev++)
- {
- }
- audio_init_devices();
- }
-
- return;
-}
-
-static void
-start_cards(void)
-{
- int i, n = num_sound_cards;
- int drv;
-
- sound_started = 1;
- if (trace_init)
- printk(KERN_DEBUG "Sound initialization started\n");
-
-#ifdef CONFIG_LOWLEVEL_SOUND
- {
- extern void sound_preinit_lowlevel_drivers(void);
- sound_preinit_lowlevel_drivers();
- }
-#endif
-
-/*
- * Check the number of cards actually defined in the table
- */
-
- for (i = 0; i < n && snd_installed_cards[i].card_type; i++)
- num_sound_cards = i + 1;
-
- for (i = 0; i < n && snd_installed_cards[i].card_type; i++)
- {
- if (snd_installed_cards[i].enabled)
- {
- snd_installed_cards[i].for_driver_use = NULL;
-
- if ((drv = snd_find_driver(snd_installed_cards[i].card_type)) == -1)
- {
- snd_installed_cards[i].enabled = 0; /*
- * Mark as not detected
- */
- continue;
- }
- snd_installed_cards[i].config.card_subtype =
- sound_drivers[drv].card_subtype;
-
- if (sound_drivers[drv].probe(&snd_installed_cards[i].config))
- sound_drivers[drv].attach(&snd_installed_cards[i].config);
- else
- snd_installed_cards[i].enabled = 0; /*
- * Mark as not detected
- */
- }
- }
-#ifdef CONFIG_LOWLEVEL_SOUND
- {
- extern void sound_init_lowlevel_drivers(void);
- sound_init_lowlevel_drivers();
- }
-#endif
- if (trace_init)
- printk(KERN_DEBUG "Sound initialization complete\n");
-}
-
-void sndtable_init(void)
-{
- start_cards();
-}
-
-
-void sound_unload_drivers(void)
-{
- int i, n = num_sound_cards;
- int drv;
-
- if (!sound_started)
- return;
-
- if (trace_init)
- printk(KERN_DEBUG "Sound unload started\n");
-
-
- for (i = 0; i < n && snd_installed_cards[i].card_type; i++)
- {
- if (snd_installed_cards[i].enabled)
- {
- if ((drv = snd_find_driver(snd_installed_cards[i].card_type)) != -1)
- {
- if (sound_drivers[drv].unload)
- {
- sound_drivers[drv].unload(&snd_installed_cards[i].config);
- snd_installed_cards[i].enabled = 0;
- }
- }
- }
- }
-
- for (i=0;i<num_audiodevs;i++)
- DMAbuf_deinit(i);
-
- if (trace_init)
- printk(KERN_DEBUG "Sound unload complete\n");
-}
-
-void sound_unload_driver(int type)
-{
- int i, drv = -1, n = num_sound_cards;
-
-
- DEB(printk("unload driver %d: ", type));
-
- for (i = 0; i < n && snd_installed_cards[i].card_type; i++)
- {
- if (snd_installed_cards[i].card_type == type)
- {
- if (snd_installed_cards[i].enabled)
- {
- if ((drv = snd_find_driver(type)) != -1)
- {
- DEB(printk(" card %d", i));
- if (sound_drivers[drv].unload)
- {
- sound_drivers[drv].unload(&snd_installed_cards[i].config);
- snd_installed_cards[i].enabled = 0;
- }
- }
- }
- }
- }
- DEB(printk("\n"));
-}
-
-
-int sndtable_probe(int unit, struct address_info *hw_config)
-{
- int sel = -1;
-
- DEB(printk(KERN_DEBUG "sndtable_probe(%d)\n", unit));
-
- if (!unit)
- return 1;
-
-
- if (sel == -1 && num_sound_cards < max_sound_cards)
- {
- int i;
- i = sel = (num_sound_cards++);
- snd_installed_cards[sel].card_type = unit;
- snd_installed_cards[sel].enabled = 1;
- }
- if (sel != -1)
- {
- int drv;
-
- snd_installed_cards[sel].for_driver_use = NULL;
- snd_installed_cards[sel].config.io_base = hw_config->io_base;
- snd_installed_cards[sel].config.irq = hw_config->irq;
- snd_installed_cards[sel].config.dma = hw_config->dma;
- snd_installed_cards[sel].config.dma2 = hw_config->dma2;
- snd_installed_cards[sel].config.name = hw_config->name;
- snd_installed_cards[sel].config.always_detect = hw_config->always_detect;
- snd_installed_cards[sel].config.driver_use_1 = hw_config->driver_use_1;
- snd_installed_cards[sel].config.driver_use_2 = hw_config->driver_use_2;
- snd_installed_cards[sel].config.card_subtype = hw_config->card_subtype;
-
- if ((drv = snd_find_driver(snd_installed_cards[sel].card_type)) == -1)
- {
- snd_installed_cards[sel].enabled = 0;
- DEB(printk(KERN_DEBUG "Failed to find driver\n"));
- return 0;
- }
- DEB(printk(KERN_DEBUG "Driver name '%s'\n", sound_drivers[drv].name));
-
- hw_config->card_subtype = snd_installed_cards[sel].config.card_subtype = sound_drivers[drv].card_subtype;
-
- if (sound_drivers[drv].probe(hw_config))
- {
- DEB(printk(KERN_DEBUG "Hardware probed OK\n"));
- return 1;
- }
- DEB(printk("Failed to find hardware\n"));
- snd_installed_cards[sel].enabled = 0; /*
- * Mark as not detected
- */
- return 0;
- }
- return 0;
-}
-
-
-int sndtable_init_card(int unit, struct address_info *hw_config)
-{
- int i, n = num_sound_cards;
-
- DEB(printk("sndtable_init_card(%d) entered\n", unit));
-
- if (!unit)
- {
- sndtable_init();
- return 1;
- }
- for (i = 0; i < n && snd_installed_cards[i].card_type; i++)
- {
- if (snd_installed_cards[i].card_type == unit)
- {
- int drv;
-
- snd_installed_cards[i].config.io_base = hw_config->io_base;
- snd_installed_cards[i].config.irq = hw_config->irq;
- snd_installed_cards[i].config.dma = hw_config->dma;
- snd_installed_cards[i].config.dma2 = hw_config->dma2;
- snd_installed_cards[i].config.name = hw_config->name;
- snd_installed_cards[i].config.always_detect = hw_config->always_detect;
- snd_installed_cards[i].config.driver_use_1 = hw_config->driver_use_1;
- snd_installed_cards[i].config.driver_use_2 = hw_config->driver_use_2;
- snd_installed_cards[i].config.card_subtype = hw_config->card_subtype;
-
- if ((drv = snd_find_driver(snd_installed_cards[i].card_type)) == -1)
- snd_installed_cards[i].enabled = 0; /*
- * Mark as not detected
- */
- else
- {
- DEB(printk(KERN_DEBUG "Located card - calling attach routine\n"));
- sound_drivers[drv].attach(hw_config);
-
- DEB(printk("attach routine finished\n"));
- }
- start_services();
- return 1;
- }
- }
- DEB(printk("sndtable_init_card: No card defined with type=%d, num cards: %d\n", unit, num_sound_cards));
- return 0;
-}
-
-int sndtable_get_cardcount(void)
-{
- return num_audiodevs + num_mixers + num_synths + num_midis;
-}
-
-int sndtable_identify_card(char *name)
-{
- int i, n = num_sound_drivers;
-
- if (name == NULL)
- return 0;
-
- for (i = 0; i < n; i++)
- {
- if (sound_drivers[i].driver_id != NULL)
- {
- char *id = sound_drivers[i].driver_id;
- int j;
-
- for (j = 0; j < 80 && name[j] == id[j]; j++)
- if (id[j] == 0 && name[j] == 0) /* Match */
- return sound_drivers[i].card_type;
- }
- }
- return 0;
-}
-
-static int __init sound_setup(char *str)
-{
- int i, n = num_sound_cards;
- int ints[32];
-
- str = get_options(str, ARRAY_SIZE(ints), ints);
-
- /*
- * First disable all drivers
- */
-
- for (i = 0; i < n && snd_installed_cards[i].card_type; i++)
- snd_installed_cards[i].enabled = 0;
-
- if (ints[0] == 0 || ints[1] == 0)
- return 1;
- /*
- * Then enable them one by time
- */
-
- for (i = 1; i <= ints[0]; i++)
- {
- int card_type, ioaddr, irq, dma, dma2, ptr, j;
- unsigned int val;
-
- val = (unsigned int) ints[i];
- card_type = (val & 0x0ff00000) >> 20;
-
- if (card_type > 127)
- {
- /*
- * Add any future extensions here
- */
- return 1;
- }
- ioaddr = (val & 0x000fff00) >> 8;
- irq = (val & 0x000000f0) >> 4;
- dma = (val & 0x0000000f);
- dma2 = (val & 0xf0000000) >> 28;
-
- ptr = -1;
- for (j = 0; j < n && ptr == -1; j++)
- {
- if (snd_installed_cards[j].card_type == card_type &&
- !snd_installed_cards[j].enabled)/*
- * Not already found
- */
- ptr = j;
- }
-
- if (ptr == -1)
- printk(KERN_ERR "Sound: Invalid setup parameter 0x%08x\n", val);
- else
- {
- snd_installed_cards[ptr].enabled = 1;
- snd_installed_cards[ptr].config.io_base = ioaddr;
- snd_installed_cards[ptr].config.irq = irq;
- snd_installed_cards[ptr].config.dma = dma;
- snd_installed_cards[ptr].config.dma2 = dma2;
- snd_installed_cards[ptr].config.name = NULL;
- snd_installed_cards[ptr].config.always_detect = 0;
- snd_installed_cards[ptr].config.driver_use_1 = 0;
- snd_installed_cards[ptr].config.driver_use_2 = 0;
- snd_installed_cards[ptr].config.card_subtype = 0;
- }
- }
-
- return 1;
-}
-
-__setup("sound=", sound_setup);
-
-
-struct address_info * sound_getconf(int card_type)
-{
- int j, ptr;
- int n = num_sound_cards;
-
- ptr = -1;
- for (j = 0; j < n && ptr == -1 && snd_installed_cards[j].card_type; j++)
- {
- if (snd_installed_cards[j].card_type == card_type)
- ptr = j;
- }
- if (ptr == -1)
- return (struct address_info *) NULL;
-
- return &snd_installed_cards[ptr].config;
-}
-
-
-
int sound_install_audiodrv(int vers, char *name, struct audio_driver *driver,
int driver_size, int flags, unsigned int format_mask,
void *devc, int dma1, int dma2)
@@ -619,4 +236,3 @@
if (dev != -1)
sound_timer_devs[dev] = NULL;
}
-
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)