diff options
author | swallace <swallace@FreeBSD.org> | 1995-03-12 23:34:12 +0000 |
---|---|---|
committer | swallace <swallace@FreeBSD.org> | 1995-03-12 23:34:12 +0000 |
commit | 918019dbbdac1461aa95629db3d864b7701860ff (patch) | |
tree | 27d81f18aab07907ea53bb67e00627773ac49366 /sys/i386/isa/sound/soundcard.c | |
parent | 1d684c7bdec8e2179021e431efa36a207446a54f (diff) | |
download | FreeBSD-src-918019dbbdac1461aa95629db3d864b7701860ff.zip FreeBSD-src-918019dbbdac1461aa95629db3d864b7701860ff.tar.gz |
Reorganize how sound devices are configured. Use a snd controller
with individual devices for each type of sound card:
opl, sb, sbxvi, sbmidi, pas, mpu, gus, gusxvi, gusmax, mss, uart
EXCLUDE_* options are no longer required to be included in the config file.
They are automatically determined by local.h depending on the devices
included.
Move #includes in local.h to os.h so files are included in the proper
order to avoid warnings.
soundcard.c now has additional code to reflect the device driver
routines needed.
Define new EXCLUDE_SB16MIDI for use in sb16_midi.c and dev_table.h.
#ifndef EXCLUDE_SEQUENCER or EXCLUDE_AUDIO have been added to
soundcard.c and sound_switch.c where appropriate.
Probe outputs changed to reflect new device names.
Readme.freebsd not needed. Update sound.doc with new config instructions.
Reviewed by: wollman
Diffstat (limited to 'sys/i386/isa/sound/soundcard.c')
-rw-r--r-- | sys/i386/isa/sound/soundcard.c | 75 |
1 files changed, 63 insertions, 12 deletions
diff --git a/sys/i386/isa/sound/soundcard.c b/sys/i386/isa/sound/soundcard.c index 69b62bf..83cf06e 100644 --- a/sys/i386/isa/sound/soundcard.c +++ b/sys/i386/isa/sound/soundcard.c @@ -26,7 +26,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: soundcard.c,v 1.21 1995/02/13 22:49:06 jkh Exp $ + * $Id: soundcard.c,v 1.23 1995/03/05 04:01:29 jkh Exp $ */ #include "sound_config.h" @@ -66,6 +66,18 @@ int sndwrite (int dev, struct uio *uio); int sndselect (int dev, int rw, struct proc *p); static void sound_mem_init(void); +struct isa_driver opldriver = {sndprobe, sndattach, "opl"}; +struct isa_driver sbdriver = {sndprobe, sndattach, "sb"}; +struct isa_driver sbxvidriver = {sndprobe, sndattach, "sbxvi"}; +struct isa_driver sbmididriver = {sndprobe, sndattach, "sbmidi"}; +struct isa_driver pasdriver = {sndprobe, sndattach, "pas"}; +struct isa_driver mpudriver = {sndprobe, sndattach, "mpu"}; +struct isa_driver gusdriver = {sndprobe, sndattach, "gus"}; +struct isa_driver gusxvidriver = {sndprobe, sndattach, "gusxvi"}; +struct isa_driver gusmaxdriver = {sndprobe, sndattach, "gusmax"}; +struct isa_driver uartdriver = {sndprobe, sndattach, "uart"}; +struct isa_driver mssdriver = {sndprobe, sndattach, "mss"}; + unsigned long get_time(void) @@ -192,38 +204,74 @@ ipri_to_irq (unsigned short ipri) return -1; /* Invalid argument */ } +static int +driver_to_voxunit(struct isa_driver *driver) +{ + /* converts a sound driver pointer into the equivalent + VoxWare device unit number */ + if(driver == &opldriver) + return(SNDCARD_ADLIB); + else if(driver == &sbdriver) + return(SNDCARD_SB); + else if(driver == &pasdriver) + return(SNDCARD_PAS); + else if(driver == &gusdriver) + return(SNDCARD_GUS); + else if(driver == &mpudriver) + return(SNDCARD_MPU401); + else if(driver == &sbxvidriver) + return(SNDCARD_SB16); + else if(driver == &sbmididriver) + return(SNDCARD_SB16MIDI); + else if(driver == &uartdriver) + return(SNDCARD_UART6850); + else if(driver == &gusdriver) + return(SNDCARD_GUS16); + else if(driver == &mssdriver) + return(SNDCARD_MSS); + else + return(0); +} + int sndprobe (struct isa_device *dev) { struct address_info hw_config; + int unit; + unit = driver_to_voxunit(dev->id_driver); hw_config.io_base = dev->id_iobase; hw_config.irq = ipri_to_irq (dev->id_irq); hw_config.dma = dev->id_drq; - return sndtable_probe (dev->id_unit, &hw_config); + if(unit) + return sndtable_probe (unit, &hw_config); + else + return 0; } int sndattach (struct isa_device *dev) { - int i; + int i, unit; static int midi_initialized = 0; static int seq_initialized = 0; static int generic_midi_initialized = 0; unsigned long mem_start = 0xefffffffUL; struct address_info hw_config; + unit = driver_to_voxunit(dev->id_driver); hw_config.io_base = dev->id_iobase; hw_config.irq = ipri_to_irq (dev->id_irq); hw_config.dma = dev->id_drq; - if (dev->id_unit) /* Card init */ - if (!sndtable_init_card (dev->id_unit, &hw_config)) - { - printf (" <Driver not configured>"); - return FALSE; - } + if(!unit) + return FALSE; + if (!sndtable_init_card (unit, &hw_config)) + { + printf (" <Driver not configured>"); + return FALSE; + } /* * Init the high level sound driver @@ -248,17 +296,21 @@ sndattach (struct isa_device *dev) soundcard_configured = 1; #endif +#ifndef EXCLUDE_MIDI if (num_midis && !midi_initialized) { midi_initialized = 1; mem_start = MIDIbuf_init (mem_start); } +#endif +#ifndef EXCLUDE_SEQUENCER if ((num_midis + num_synths) && !seq_initialized) { seq_initialized = 1; mem_start = sequencer_init (mem_start); } +#endif return TRUE; } @@ -272,6 +324,7 @@ tenmicrosec (void) inb (0x80); } +#ifndef EXCLUDE_SEQUENCER void request_sound_timer (int count) { @@ -305,6 +358,7 @@ sound_stop_timer (void) untimeout ((timeout_func_t)sequencer_timer, 0); timer_running = 0; } +#endif #ifndef EXCLUDE_AUDIO static void @@ -365,9 +419,6 @@ sound_mem_init (void) #endif -struct isa_driver snddriver = -{sndprobe, sndattach, "snd"}; - int snd_ioctl_return (int *addr, int value) { |