diff options
author | jkh <jkh@FreeBSD.org> | 1995-03-04 21:11:21 +0000 |
---|---|---|
committer | jkh <jkh@FreeBSD.org> | 1995-03-04 21:11:21 +0000 |
commit | fb377011224d3ca2cc8b0c4cf7324b7a94629b31 (patch) | |
tree | e74ef7542072ec71095dbb0496791d1eac674c74 /sys/i386/isa/sound | |
parent | a09fe2d23732f9ec6f4b73851ce89fae4346eb2d (diff) | |
download | FreeBSD-src-fb377011224d3ca2cc8b0c4cf7324b7a94629b31.zip FreeBSD-src-fb377011224d3ca2cc8b0c4cf7324b7a94629b31.tar.gz |
Upgrade the sound drivers to VoxWare pre-3.0 and fix a number of bugs.
Make the sound configuration a little neater
(see /sys/i386/isa/sound/Readme.freebsd)
Add support for the Microsoft Sound Source.
Document the sound options again.
Submitted by: Sujal Patel <smpatel@wam.umd.edu>
Obtained from: Voxware
Diffstat (limited to 'sys/i386/isa/sound')
54 files changed, 510 insertions, 426 deletions
diff --git a/sys/i386/isa/sound/CHANGELOG b/sys/i386/isa/sound/CHANGELOG index fcdbb8e..b04d7a8 100644 --- a/sys/i386/isa/sound/CHANGELOG +++ b/sys/i386/isa/sound/CHANGELOG @@ -52,7 +52,7 @@ Since 2.4 - MIDI recording for SB and SB Pro. (Untested). - Some other fixes. - SB16 MIDI and DSP drivers only initialized if SB16 actually installed. -- Implemented better detection for OPL-3. This should be usefull if you +- Implemented better detection for OPL-3. This should be useful if you have an old SB Pro (the non-OPL-3 one) or a SB 2.0 clone which has a OPL-3. - SVR4.2 support by Ian Hartas. Initial ALPHA TEST version (untested). diff --git a/sys/i386/isa/sound/README b/sys/i386/isa/sound/README index a4a0847..1c31ac6 100644 --- a/sys/i386/isa/sound/README +++ b/sys/i386/isa/sound/README @@ -38,14 +38,14 @@ Compatibility with the earlier versions This version is backward compatible with the version 2.X. All programs compiled with sys/soundcard.h of v2.X should work without problems. PROGRAMS COMPILED WITH THE sys/soundcard.h OF THIS VERSION WILL NOT -WORK WITH v2.X DRIVER. BE CAREFULL WHEN DISTRIBUTING BINARIES COMPILED +WORK WITH v2.X DRIVER. BE CAREFUL WHEN DISTRIBUTING BINARIES COMPILED FOR THIS VERSION. Contributors ------------ This driver contains code by several contributors. In addition several other -persons have given usefull suggestions. The following is a list of major +persons have given useful suggestions. The following is a list of major contributors. (I could have forgotten some names.) Craig Metz 1/2 of the PAS16 Mixer and PCM support @@ -74,7 +74,13 @@ Hannu Savolainen hannu@voxware.pp.fi Snail mail: Hannu Savolainen - Pallaksentie 4 A 2 - 00970 Helsinki + Hiekkalaiturintie 3 A 8 + 00980 Helsinki Finland -FAX: +358 0 395 1968 (usually not connected) +FAX: +358 0 341 6272 (answers if I have my machine (mgetty) on). + +NOTE! I probably don't answer to Snail mail or FAX messages. Sending answer + to each of them is simply too expensive and time consuming. However I + try to reply every email message I get (within a week). If you don't + get response, please check how your address is written in the message + header. I can't answer if I don't have a valid reply address. diff --git a/sys/i386/isa/sound/Readme.freebsd b/sys/i386/isa/sound/Readme.freebsd new file mode 100644 index 0000000..ef389d5 --- /dev/null +++ b/sys/i386/isa/sound/Readme.freebsd @@ -0,0 +1,35 @@ + +This driver was updated to VoxWare v3.0 pre-release and ad1848 support was +enabled (since it works for me :) + +To configure the sound driver, some resemblene of one or more of these in your +config file: + +device snd5 at isa? port 0x330 irq 6 vector mpuintr # MPU-401 +device snd4 at isa? port 0x220 irq 15 drq 6 vector gusintr # GUS +device snd3 at isa? port 0x388 irq 10 drq 6 vector pasintr # PAS +device snd2 at isa? port 0x220 irq 7 drq 1 vector sbintr # SB +device snd6 at isa? port 0x220 irq 7 drq 5 vector sbintr # SB16 ? +device snd7 at isa? port 0x300 # YM3812 ??? +device snd1 at isa? port 0x388 # ADLIB +device snd10 at isa? port 0x530 irq 10 drq 1 vector adintr # MSS + +The add some of these (no need for EXCLUDE_BLAH anymore): + +options AUDIO_PAS +options AUDIO_SB +options AUDIO_ADLIB +options AUDIO_GUS +options AUDIO_MPU401 +options AUDIO_UART6850 +options AUDIO_PSS +options AUDIO_GUS16 +options AUDIO_GUSMAX +options AUDIO_MSS +options AUDIO_SBPRO +options AUDIO_SB16 +options AUDIO_YM3812 + + + +-Sujal Patel (smpatel@wam.umd.edu) diff --git a/sys/i386/isa/sound/Readme.v30 b/sys/i386/isa/sound/Readme.v30 new file mode 100644 index 0000000..cade461 --- /dev/null +++ b/sys/i386/isa/sound/Readme.v30 @@ -0,0 +1,154 @@ +VoxWare v3.0 +------------ + +This is a PROTOTYPE of the VoxWare v3.0 to be released late 94. + +All features of v2.5 should work as earlier. There could be some +omissions but they are unintentional. I started this version thread +after v2.3 so all features implemented before it are there. + +Even this is a prototype, there should not be any fatal bugs. The +prototype just means that I don't have implemented all features +completely. Mainly in the /dev/sequencer2 driver. +For example recording from /dev/sequencer2 won't work +with other cards than a full features MPU-401 or clones. As well the +way how the MIDI controllers are handled will change. + +IMPORTANT!!!!!!!!!!!!!!!!! + +Don't distribute any binaries compiled with the soundcard.h of this version. +They will not work together with older drivers. + +New features +============ + +There are now two new device interfaces. The /dev/midi## is a raw +tty like interface to MIDI ports. There is a device file for each MIDI +port on your system. They are named (/dev/midi00 to /dev/midiNN). +The second addition is the /dev/sequencer2 which is higher level interface +than the old /dev/sequencer. It's intended for writing device independent +applications like sequencers. + +/dev/midi## +----------- + +This interface should be useful for applications like MIDI sysex librarians. +There are (currently) no timing features so making music could be impossible. + +There are as many /dev/midi## devices as there are MIDI ports in the system. +The /dev/midi00 is connected to the first one, /dev/midi01 to the second etc. + +These devices work like tty devices in raw mode. Everything written to them is +sent out to the MIDI port. There is currently an extra delay of at most +1/100th of sec but it will be removed later. + +The reading algorithm is little bit more complicated. There are two different +cases: + +1) There is at least one byte in the input buffer. + +The read returns as many bytes as it can without waiting for more bytes. +For example when a process reads 100 bytes and there are 10 bytes in the +buffer, the read returns just 10 bytes. + +2) The input buffer is empty when the process calls read. + +The read waits for the first byte and then continues as in case 1. By +default it waits infinitely but there is an ioctl for setting a timeout +for this. The ioctl(fd, SNDCTL_MIDI_PRETIME, &time) changes the timeout. +The time is given in 1/10th of seconds (10 means one second). + +Other ioctl calls: + +ioctl(fd, SNDCTL_MIDI_MPUMODE, &mode) is available for full MPU-401 +compatible devices such as MPU-IPC-T, MQ PC Midi Card or MQX-32. +It's not available for the so called MPU UART ports of some soundcards +(PAS16, SB16 etc). By default the MIDI port is in UART mode after open. +If this ioctl is called with mode=1, the interface is put to the intelligent +(coprocessor) mode. NOTE! The MIDI port will be reset when this ioctl is called. +It could have some strange effects if not called immediately after open. This +call returns EINVAL if the midi port doesn't support the MPU-401 intelligent +mode. + +ioctl(fd, SNDCTL_MIDI_MPUCMD, &cmdstruct) is valid only if the MIDI port +is put to the coprocessor mode using ioctl(SNDCTL_MIDI_MPUMODE). It's used to +send commands to a MPU-401 compatible MIDI cards. Please refer to the +MPU-401 Technical Reference Manual (or Music Quest Technical Reference +Manual) for descriptions of the commands. + +The argument of SNDCTL_MIDI_MPUCOMMAND is of type mpu_command_rec. It +has the following fields: + +typedef struct { + unsigned char cmd; + + char nr_args, nr_returns; + unsigned char data[30]; + } mpu_command_rec; + +where: + cmd Contains the command number. + nr_args Number of arguments of the command. + MUST BE INITIALIZED BEFORE CALL + nr_returns Number of bytes returned by the command. + MUST BE INITIALIZED BEFORE CALL + data Buffer for the command arguments and returned + data. + +Be extremely careful with the nr_args and nr_returns fields. They +must match the command. An incorrect value will put the card and +the driver out of sync. Refer to the MPU-401/MQX-32M documentation for further +details. + + + +/dev/sequencer2 (if you find a better name, please let me know). +--------------- + +This device file works much like the /dev/sequencer which has been present +since the beginning. The main differences are the following: + +- /dev/sequencer makes the MIDI ports to look like the synth devices. In fact +the result is somewhere between the MIDI specification and the synth devices of +/dev/sequencer. Both kind of devices are accessed using the SEQ_START_NOTE() +like macros. The voice number parameters of the API macros have been redefined +to denote MIDI channels. This means that the driver allocates voices for +the channels automatically (this is a responsibility/right of an application +with /dev/sequencer). The result is that a SEQ_START_NOTE() macro has +similar effects for a synth channel than on a MIDI port. This kind of +solution provides better device independence than the /dev/sequencer. The +drawback is that the new interface doesn't permit so low level access to the +device as the /dev/sequencer does. An application developer must choose between +these two interfaces. I think the old /dev/sequencer is better for applications +like module players while the new one is better for making generic sequencer +programs. + +- There are no separate MIDI devices with the /dev/sequencer2. The +ioctl(SNDCTL_SEQ_NRMIDIS) returns always zero. Instead the MIDI ports are +shown as synth devices. ioctl(SNDCTL_SEQ_NRSYNTHS) on /dev/sequencer2 will +return sum of internal synthesizers (GUS, OPL3) and MIDI ports in the systems. + +- The new interface is used much like the ordinary /dev/sequencer. The +event format is new so you have to use the API macros defined in the +sys/soundcard.h. The interface will probably change before the final 3.0 +release but using the API macros should ensure compatibility in source level. +The new event format is not recognized by version 2.X so don't try to +distribute binaries compiled with soundcard.h of v3.X. + +- The basic API usage is similar to the current one. There are some new +macros but the older ones should work as earlier. The most important +incompatibility is that the /dev/sequencer2 driver allocates voices itself. +The other one is that the application must send SEQ_START_TIMER() as it's +first event. Otherwise the timer is not started and the application waits +infinitely. + + +There are several new features but I don't document them here. There are +some info in the soundcard.h (near the end). I have also included some +sample code in the directory v30. Full documentation will +appear in the Hacker's Guide later. + +Don't hesitate to contact me in case you have questions or comments. + +Hannu Savolainen +hannu@voxware.pp.fi diff --git a/sys/i386/isa/sound/ad1848.c b/sys/i386/isa/sound/ad1848.c index 4ee4dfa..ec9e93e 100644 --- a/sys/i386/isa/sound/ad1848.c +++ b/sys/i386/isa/sound/ad1848.c @@ -29,7 +29,6 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: ad1848.c,v 1.2 1994/10/01 02:16:28 swallace Exp $ */ #define DEB(x) @@ -72,8 +71,9 @@ static char irq2dev[16] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}; -static int ad_format_mask[2 /*devc->mode*/ ] = +static int ad_format_mask[3 /*devc->mode*/ ] = { + 0, AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW, AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW | AFMT_U16_LE | AFMT_IMA_ADPCM }; @@ -209,7 +209,7 @@ ad1848_open (int dev, int mode) } if (devc->irq) /* Not managed by another driver */ - if ((err = snd_set_irq_handler (devc->irq, ad1848_interrupt)) < 0) + if ((err = snd_set_irq_handler (devc->irq, adintr)) < 0) { printk ("ad1848: IRQ in use\n"); RESTORE_INTR (flags); @@ -254,7 +254,7 @@ static int set_speed (ad1848_info * devc, int arg) { /* - * The sampling speed is encoded in the least significant nible of I8. The + * The sampling speed is encoded in the least significant nibble of I8. The * LSB selects the clock source (0=24.576 MHz, 1=16.9344 Mhz) and other * three bits select the divisor (indirectly): * @@ -602,7 +602,7 @@ ad1848_prepare_for_IO (int dev, int bsize, int bcount) ad_write (devc, 8, fs); /* - * Write to I8 starts resyncronization. Wait until it completes. + * Write to I8 starts resynchronization. Wait until it completes. */ timeout = 10000; while (timeout > 0 && INB (devc->base) == 0x80) @@ -624,7 +624,7 @@ ad1848_prepare_for_IO (int dev, int bsize, int bcount) ad_write (devc, 28, fs); /* - * Write to I28 starts resyncronization. Wait until it completes. + * Write to I28 starts resynchronization. Wait until it completes. */ timeout = 10000; while (timeout > 0 && INB (devc->base) == 0x80) @@ -660,7 +660,7 @@ int ad1848_detect (int io_base) { -#define SDDB(x) x +#define AUDIO_DDB(x) x unsigned char tmp; int i; @@ -691,7 +691,7 @@ ad1848_detect (int io_base) if ((INB (devc->base) & 0x80) != 0x00) /* Not a AD1884 */ { - SDDB (printk ("ad_detect_A\n")); + AUDIO_DDB (printk ("ad_detect_A\n")); return 0; } @@ -706,7 +706,7 @@ ad1848_detect (int io_base) if ((tmp1 = ad_read (devc, 0)) != 0xaa || (tmp2 = ad_read (devc, 1)) != 0x45) { - SDDB (printk ("ad_detect_B (%x/%x)\n", tmp1, tmp2)); + AUDIO_DDB (printk ("ad_detect_B (%x/%x)\n", tmp1, tmp2)); return 0; } @@ -715,7 +715,7 @@ ad1848_detect (int io_base) if ((tmp1 = ad_read (devc, 0)) != 0x45 || (tmp2 = ad_read (devc, 1)) != 0xaa) { - SDDB (printk ("ad_detect_C (%x/%x)\n", tmp1, tmp2)); + AUDIO_DDB (printk ("ad_detect_C (%x/%x)\n", tmp1, tmp2)); return 0; } @@ -729,7 +729,7 @@ ad1848_detect (int io_base) if ((tmp & 0x0f) != ((tmp1 = ad_read (devc, 12)) & 0x0f)) { - SDDB (printk ("ad_detect_D (%x)\n", tmp1)); + AUDIO_DDB (printk ("ad_detect_D (%x)\n", tmp1)); return 0; } @@ -750,7 +750,7 @@ ad1848_detect (int io_base) for (i = 0; i < 16; i++) if ((tmp1 = ad_read (devc, i)) != (tmp2 = ad_read (devc, i + 16))) { - SDDB (printk ("ad_detect_F(%d/%x/%x)\n", i, tmp1, tmp2)); + AUDIO_DDB (printk ("ad_detect_F(%d/%x/%x)\n", i, tmp1, tmp2)); return 0; } @@ -781,7 +781,7 @@ ad1848_detect (int io_base) ad_write (devc, 0, 0xaa); if ((tmp1 = ad_read (devc, 16)) == 0xaa) /* Rotten bits? */ { - SDDB (printk ("ad_detect_H(%x)\n", tmp1)); + AUDIO_DDB (printk ("ad_detect_H(%x)\n", tmp1)); return 0; } @@ -865,7 +865,7 @@ ad1848_init (char *name, int io_base, int irq, int dma_playback, int dma_capture } void -ad1848_interrupt (int irq) +adintr (int irq) { unsigned char status; ad1848_info *devc; diff --git a/sys/i386/isa/sound/adlib_card.c b/sys/i386/isa/sound/adlib_card.c index 36c2f5e..6365069 100644 --- a/sys/i386/isa/sound/adlib_card.c +++ b/sys/i386/isa/sound/adlib_card.c @@ -25,7 +25,6 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id$ */ #include "sound_config.h" diff --git a/sys/i386/isa/sound/audio.c b/sys/i386/isa/sound/audio.c index 0453bec..d5a4acc 100644 --- a/sys/i386/isa/sound/audio.c +++ b/sys/i386/isa/sound/audio.c @@ -25,7 +25,6 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: audio.c,v 1.5 1994/08/02 07:39:44 davidg Exp $ */ #include "sound_config.h" diff --git a/sys/i386/isa/sound/dev_table.c b/sys/i386/isa/sound/dev_table.c index f313b8c..1eb57bb 100644 --- a/sys/i386/isa/sound/dev_table.c +++ b/sys/i386/isa/sound/dev_table.c @@ -25,7 +25,6 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: dev_table.c,v 1.5 1994/08/02 07:39:46 davidg Exp $ */ #define _DEV_TABLE_C_ diff --git a/sys/i386/isa/sound/dev_table.h b/sys/i386/isa/sound/dev_table.h index 39b4e62..12b20ba 100644 --- a/sys/i386/isa/sound/dev_table.h +++ b/sys/i386/isa/sound/dev_table.h @@ -26,8 +26,8 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: dev_table.h,v 1.8 1994/10/01 02:16:33 swallace Exp $ - */ + +*/ #ifndef _DEV_TABLE_H_ #define _DEV_TABLE_H_ @@ -237,7 +237,7 @@ struct sound_timer_operations { #ifndef EXCLUDE_SB {SNDCARD_SB, "SoundBlaster", attach_sb_card, probe_sb}, #endif -#if !defined(EXCLUDE_SB) && !defined(EXCLUDE_SB16) && !defined(EXCLUDE_SBPRO) +#if !defined(EXCLUDE_SB) && !defined(EXCLUDE_SB16) #ifndef EXCLUDE_AUDIO {SNDCARD_SB16, "SoundBlaster16", sb16_dsp_init, sb16_dsp_detect}, #endif diff --git a/sys/i386/isa/sound/dmabuf.c b/sys/i386/isa/sound/dmabuf.c index fca7006..10ab0ba 100644 --- a/sys/i386/isa/sound/dmabuf.c +++ b/sys/i386/isa/sound/dmabuf.c @@ -25,7 +25,6 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: dmabuf.c,v 1.10 1994/11/01 17:26:49 ache Exp $ */ #include "sound_config.h" @@ -33,19 +32,16 @@ #ifdef CONFIGURE_SOUNDCARD #include "sound_calls.h" -#ifdef __FreeBSD__ -extern struct selinfo selinfo[SND_NDEVS>>4]; -#endif #if !defined(EXCLUDE_AUDIO) || !defined(EXCLUDE_GUS) DEFINE_WAIT_QUEUES (dev_sleeper[MAX_AUDIO_DEV], dev_sleep_flag[MAX_AUDIO_DEV]); static struct dma_buffparms dmaps[MAX_AUDIO_DEV] = -{0}; /* +{{0}}; /* * Primitive way to allocate * such a large array. - * Needs dynamic run-time alloction. + * Needs dynamic run-time allocation. */ static void @@ -82,7 +78,7 @@ reorganize_buffers (int dev) sz = sr * nc * sz; /* - * Compute a buffer size for time not exeeding 1 second. + * Compute a buffer size for time not exceeding 1 second. * Usually this algorithm gives a buffer size for 0.5 to 1.0 seconds * of sound (using the current speed, sample size and #channels). */ @@ -110,8 +106,8 @@ reorganize_buffers (int dev) else { /* - * The process has specified the buffer sice with SNDCTL_DSP_SETFRAGMENT or - * the buffer sice computation has already been done. + * The process has specified the buffer size with SNDCTL_DSP_SETFRAGMENT or + * the buffer size computation has already been done. */ if (dmap->fragment_size > audio_devs[dev]->buffsize) dmap->fragment_size = audio_devs[dev]->buffsize; @@ -298,10 +294,11 @@ DMAbuf_release (int dev, int mode) return 0; } -static int -DMAbuf_start_input(int dev) +int +DMAbuf_getrdbuffer (int dev, char **buf, int *len) { unsigned long flags; + int err = EIO; struct dma_buffparms *dmap = audio_devs[dev]->dmap; DISABLE_INTR (flags); @@ -323,7 +320,7 @@ DMAbuf_start_input(int dev) if (!(dmap->flags & DMA_ALLOC_DONE)) reorganize_buffers (dev); - if (dmap->dma_mode) + if (!dmap->dma_mode) { int err; @@ -344,32 +341,14 @@ DMAbuf_start_input(int dev) !(dmap->flags & DMA_STARTED)); dmap->flags |= DMA_ACTIVE | DMA_STARTED; } - } - RESTORE_INTR (flags); - - return 0; -} - -int -DMAbuf_getrdbuffer (int dev, char **buf, int *len) -{ - unsigned long flags; - int err = EIO; - struct dma_buffparms *dmap = audio_devs[dev]->dmap; - - DISABLE_INTR (flags); - if (!dmap->qlen) - { - if(err = DMAbuf_start_input(dev)) - return err; /* Wait for the next block */ - err = EIO; DO_SLEEP (dev_sleeper[dev], dev_sleep_flag[dev], 2 * HZ); if (TIMED_OUT (dev_sleeper[dev], dev_sleep_flag[dev])) { printk ("Sound: DMA timed out - IRQ/DRQ config error?\n"); + err = EIO; SET_ABORT_FLAG (dev_sleeper[dev], dev_sleep_flag[dev]); } else @@ -433,20 +412,6 @@ DMAbuf_ioctl (int dev, unsigned int cmd, unsigned int arg, int local) return IOCTL_OUT (arg, dmap->fragment_size); break; - case SNDCTL_DSP_SETBLKSIZE: - { - int size = IOCTL_IN (arg); - - if(!(dmap->flags & DMA_ALLOC_DONE) && size) - { - dmap->fragment_size = size; - return 0; - } - else - return RET_ERROR (EINVAL); /* Too late to change */ - } - break; - case SNDCTL_DSP_SUBDIVIDE: { int fact = IOCTL_IN (arg); @@ -460,7 +425,7 @@ DMAbuf_ioctl (int dev, unsigned int cmd, unsigned int arg, int local) } if (dmap->subdivision != 0 || - dmap->fragment_size)/* Loo late to change */ + dmap->fragment_size)/* Too late to change */ return RET_ERROR (EINVAL); if (fact > MAX_REALTIME_FACTOR) @@ -483,7 +448,7 @@ DMAbuf_ioctl (int dev, unsigned int cmd, unsigned int arg, int local) return RET_ERROR (EIO); if (dmap->subdivision != 0 || - dmap->fragment_size)/* Loo late to change */ + dmap->fragment_size)/* Too late to change */ return RET_ERROR (EINVAL); bytes = fact & 0xffff; @@ -517,7 +482,6 @@ DMAbuf_ioctl (int dev, unsigned int cmd, unsigned int arg, int local) return audio_devs[dev]->ioctl (dev, cmd, arg, local); } - /* NOTREACHED */ return RET_ERROR (EIO); } @@ -818,10 +782,6 @@ DMAbuf_outputintr (int dev, int event_type) WAKE_UP (dev_sleeper[dev], dev_sleep_flag[dev]); } RESTORE_INTR (flags); -#ifdef __FreeBSD__ - if(selinfo[dev].si_pid) - selwakeup(&selinfo[dev]); -#endif } void @@ -861,10 +821,6 @@ DMAbuf_inputintr (int dev) WAKE_UP (dev_sleeper[dev], dev_sleep_flag[dev]); } RESTORE_INTR (flags); -#ifdef __FreeBSD__ - if(selinfo[dev].si_pid) - selwakeup(&selinfo[dev]); -#endif } int @@ -904,49 +860,6 @@ DMAbuf_reset_dma (int chan) } /* - * Used by unix select system call to see if data is ready. - */ -int -DMAbuf_output_ready(int dev) -{ - struct dma_buffparms *dmap = audio_devs[dev]->dmap; - - if (!(dmap->flags & DMA_ALLOC_DONE)) - reorganize_buffers (dev); - return space_in_queue (dev); -} -int -DMAbuf_input_ready(int dev) -{ - int h,i,r; - struct dma_buffparms *dmap = audio_devs[dev]->dmap; - - r = 0; - if(dmap->qlen) - { - if(dmap->fragment_size) - { - for(i=0; i<dmap->qlen; i++) - { - h = (dmap->qhead + i) % dmap->nbufs; - r += dmap->fragment_size - dmap->counts[h]; - if(r >= dmap->fragment_size) - break; - } - if(r < dmap->fragment_size) - r = 0; - else - r = 1; - } - else - r = 1; - } - else - DMAbuf_start_input(dev); - - return(r); -} -/* * The sound_mem_init() is called by mem_init() immediately after mem_map is * initialized and before free_page_list is created. * @@ -972,24 +885,6 @@ DMAbuf_release (int dev, int mode) } int -DMAbuf_start_input (int dev) -{ - return RET_ERROR (EIO); -} - -int -DMAbuf_input_ready (int dev) -{ - return 0; -} - -int -DMAbuf_output_ready (int dev) -{ - return 0; -} - -int DMAbuf_getwrbuffer (int dev, char **buf, int *size) { return RET_ERROR (EIO); diff --git a/sys/i386/isa/sound/finetune.h b/sys/i386/isa/sound/finetune.h index 59e76fe..b86a0eb 100644 --- a/sys/i386/isa/sound/finetune.h +++ b/sys/i386/isa/sound/finetune.h @@ -23,7 +23,6 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id$ */ unsigned short finetune_table[128] = diff --git a/sys/i386/isa/sound/gus_card.c b/sys/i386/isa/sound/gus_card.c index 62df65b..1e2449d 100644 --- a/sys/i386/isa/sound/gus_card.c +++ b/sys/i386/isa/sound/gus_card.c @@ -25,7 +25,6 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: gus_card.c,v 1.10 1994/10/14 09:01:20 jkh Exp $ */ #include "sound_config.h" @@ -34,6 +33,8 @@ #include "gus_hw.h" +void gusintr (int); + int gus_base, gus_irq, gus_dma; extern int gus_wave_volume; extern int gus_pcm_volume; @@ -127,7 +128,7 @@ gusintr (int irq) #ifndef EXCLUDE_GUSMAX if (have_gus_max) - ad1848_interrupt (irq); + adintr (irq); #endif while (1) @@ -179,10 +180,8 @@ probe_gus_db16 (struct address_info *hw_config) long attach_gus_db16 (long mem_start, struct address_info *hw_config) { -#if !defined(EXCLUDE_GUS) gus_pcm_volume = 100; gus_wave_volume = 90; -#endif ad1848_init ("GUS 16 bit sampling", hw_config->io_base, hw_config->irq, diff --git a/sys/i386/isa/sound/gus_hw.h b/sys/i386/isa/sound/gus_hw.h index b3dc32f..f97a0b8 100644 --- a/sys/i386/isa/sound/gus_hw.h +++ b/sys/i386/isa/sound/gus_hw.h @@ -1,6 +1,4 @@ -/* - * $Id$ - */ + /* * I/O addresses */ diff --git a/sys/i386/isa/sound/gus_linearvol.h b/sys/i386/isa/sound/gus_linearvol.h index 6e41f09..7ad0c30 100644 --- a/sys/i386/isa/sound/gus_linearvol.h +++ b/sys/i386/isa/sound/gus_linearvol.h @@ -1,6 +1,3 @@ -/* - * $Id$ - */ static unsigned short gus_linearvol[128] = { 0x0000, 0x08ff, 0x09ff, 0x0a80, 0x0aff, 0x0b40, 0x0b80, 0x0bc0, 0x0bff, 0x0c20, 0x0c40, 0x0c60, 0x0c80, 0x0ca0, 0x0cc0, 0x0ce0, diff --git a/sys/i386/isa/sound/gus_midi.c b/sys/i386/isa/sound/gus_midi.c index 94a856f..87aea62 100644 --- a/sys/i386/isa/sound/gus_midi.c +++ b/sys/i386/isa/sound/gus_midi.c @@ -25,7 +25,6 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: gus_midi.c,v 1.5 1994/08/02 07:39:58 davidg Exp $ */ #include "sound_config.h" diff --git a/sys/i386/isa/sound/gus_vol.c b/sys/i386/isa/sound/gus_vol.c index 07c2c6e..055a117 100644 --- a/sys/i386/isa/sound/gus_vol.c +++ b/sys/i386/isa/sound/gus_vol.c @@ -2,8 +2,6 @@ * gus_vol.c - Compute volume for GUS. * * Greg Lee 1993. - * - * $Id: gus_vol.c,v 1.4 1994/08/02 07:39:59 davidg Exp $ */ #include "sound_config.h" #ifndef EXCLUDE_GUS diff --git a/sys/i386/isa/sound/gus_wave.c b/sys/i386/isa/sound/gus_wave.c index f24365b..f050725 100644 --- a/sys/i386/isa/sound/gus_wave.c +++ b/sys/i386/isa/sound/gus_wave.c @@ -25,20 +25,12 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: gus_wave.c,v 1.10 1994/10/01 02:16:42 swallace Exp $ */ #include "sound_config.h" -#ifdef __FreeBSD__ #include <machine/ultrasound.h> -#else -#include "ultrasound.h" -#endif #include "gus_hw.h" -#undef OUTB -#define OUTB(val, port) outb(port, val) - #if defined(CONFIGURE_SOUNDCARD) && !defined(EXCLUDE_GUS) #define MAX_SAMPLE 128 @@ -789,7 +781,7 @@ gus_initialize (void) gus_select_voice (0); /* This disables writes to IRQ/DMA reg */ - gusintr (0); /* Serve pending interrupts */ + gusintr (0,NULL); /* Serve pending interrupts */ RESTORE_INTR (flags); } @@ -2546,7 +2538,7 @@ guswave_patchmgr (int dev, struct patmgr_info *rec) */ offs += sample_ptrs[sample]; /* - * Begin offsess + offset to DRAM + * Begin offset + offset to DRAM */ for (n = 0; n < l; n++) @@ -2591,7 +2583,7 @@ guswave_patchmgr (int dev, struct patmgr_info *rec) */ offs += sample_ptrs[sample]; /* - * Begin offsess + offset to DRAM + * Begin offset + offset to DRAM */ for (n = 0; n < l; n++) @@ -2944,11 +2936,7 @@ gus_wave_init (long mem_start, int irq, int dma) } -#ifdef __FreeBSD__ - printk ("snd4: <Gravis UltraSound %s (%dk)>", model_num, (int) gus_mem_size / 1024); -#else /* __FreeBSD__ */ printk (" <Gravis UltraSound %s (%dk)>", model_num, (int) gus_mem_size / 1024); -#endif /* __FreeBSD__ */ #ifndef SCO sprintf (gus_info.name, "Gravis UltraSound %s (%dk)", model_num, (int) gus_mem_size / 1024); @@ -2988,12 +2976,7 @@ gus_wave_init (long mem_start, int irq, int dma) { audio_devs[gus_devnum = num_audiodevs++] = &gus_sampling_operations; audio_devs[gus_devnum]->dmachan = dma; -#ifndef NO_AUTODMA audio_devs[gus_devnum]->buffcount = 1; -#else - audio_devs[gus_devnum]->flags &= ~DMA_AUTOMODE; - audio_devs[gus_devnum]->buffcount = DSP_BUFFCOUNT; -#endif audio_devs[gus_devnum]->buffsize = DSP_BUFFSIZE; } else @@ -3069,7 +3052,6 @@ do_loop_irq (int voice) pcm_active = 0; /* Signal to the play_next_pcm_block routine */ case LMODE_PCM: { - int orig_qlen = pcm_qlen; int flag; /* 0 or 2 */ pcm_qlen--; @@ -3085,7 +3067,7 @@ do_loop_irq (int voice) pcm_active = 0; } - /* +/* * If the queue was full before this interrupt, the DMA transfer was * suspended. Let it continue now. */ diff --git a/sys/i386/isa/sound/ics2101.c b/sys/i386/isa/sound/ics2101.c index 899c94e..c2f1d21 100644 --- a/sys/i386/isa/sound/ics2101.c +++ b/sys/i386/isa/sound/ics2101.c @@ -25,17 +25,12 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: ics2101.c,v 1.3 1994/08/02 07:40:05 davidg Exp $ */ #include "sound_config.h" #if defined(CONFIGURE_SOUNDCARD) && !defined(EXCLUDE_GUS) -#ifdef __FreeBSD__ #include <machine/ultrasound.h> -#else -#include "ultrasound.h" -#endif #include "gus_hw.h" #define MIX_DEVS (SOUND_MASK_MIC|SOUND_MASK_LINE| \ diff --git a/sys/i386/isa/sound/local.h b/sys/i386/isa/sound/local.h index b7fba6d..43ca03e 100644 --- a/sys/i386/isa/sound/local.h +++ b/sys/i386/isa/sound/local.h @@ -1,6 +1,6 @@ /* for FreeBSD */ /* - * $Id: local.h,v 1.10 1994/10/01 02:16:44 swallace Exp $ + * local.h,v 1.11 1994/11/01 17:26:50 ache Exp */ #include "snd.h" @@ -21,9 +21,94 @@ #endif #define DSP_BUFFSIZE 65536 -#define SELECTED_SOUND_OPTIONS 0xffffffff +#define SELECTED_SOUND_OPTIONS 0xffffffff #define SOUND_VERSION_STRING "2.90-2" -#define SOUND_CONFIG_DATE "Thu Sep 29 15:33:39 PDT 1994" -#define SOUND_CONFIG_BY "swallace" -#define SOUND_CONFIG_HOST "pal-r32-a07b.slip.nts.uci.edu" -#define SOUND_CONFIG_DOMAIN "" +#define SOUND_CONFIG_DATE "Sun Feb 5 14:38:12 EST 1995" +#define SOUND_CONFIG_BY "smpatel" +#define SOUND_CONFIG_HOST "xi.dorm.umd.edu" +#define SOUND_CONFIG_DOMAIN "dorm.umd.edu" + + +/* Reversed the VoxWare EXCLUDE options -Sujal Patel (smpatel@wam.umd.edu) */ + +#ifndef EXCLUDE_PAS +#define EXCLUDE_PAS +#endif +#ifndef EXCLUDE_SB +#define EXCLUDE_SB +#endif +#ifndef EXCLUDE_ADLIB +#define EXCLUDE_ADLIB +#endif +#ifndef EXCLUDE_GUS +#define EXCLUDE_GUS +#endif +#ifndef EXCLUDE_MPU401 +#define EXCLUDE_MPU401 +#endif +#ifndef EXCLUDE_UART6850 +#define EXCLUDE_UART6850 +#endif +#ifndef EXCLUDE_PSS +#define EXCLUDE_PSS +#endif +#ifndef EXCLUDE_GUS16 +#define EXCLUDE_GUS16 +#endif +#ifndef EXCLUDE_GUSMAX +#define EXCLUDE_GUSMAX +#endif +#ifndef EXCLUDE_MSS +#define EXCLUDE_MSS +#endif +#ifndef EXCLUDE_SBPRO +#define EXCLUDE_SBPRO +#endif +#ifndef EXCLUDE_SB16 +#define EXCLUDE_SB16 +#endif +#ifndef EXCLUDE_YM3812 +#define EXCLUDE_YM3812 +#endif + +#ifdef AUDIO_PAS +#undef EXCLUDE_PAS +#endif +#ifdef AUDIO_SB +#undef EXCLUDE_SB +#endif +#ifdef AUDIO_ADLIB +#undef EXCLUDE_ADLIB +#endif +#ifdef AUDIO_GUS +#undef EXCLUDE_GUS +#endif +#ifdef AUDIO_MPU401 +#undef EXCLUDE_MPU401 +#endif +#ifdef AUDIO_UART6850 +#undef EXCLUDE_UART6850 +#endif +#ifdef AUDIO_PSS +#undef EXCLUDE_PSS +#endif +#ifdef AUDIO_GUS16 +#undef EXCLUDE_GUS16 +#endif +#ifdef AUDIO_GUSMAX +#undef EXCLUDE_GUSMAX +#endif +#ifdef AUDIO_MSS +#undef EXCLUDE_MSS +#endif +#ifdef AUDIO_SBPRO +#undef EXCLUDE_SBPRO +#undef EXCLUDE_SB +#endif +#ifdef AUDIO_SB16 +#undef EXCLUDE_SB16 +#undef EXCLUDE_SB +#endif +#ifdef AUDIO_YM3812 +#undef EXCLUDE_YM3812 +#endif diff --git a/sys/i386/isa/sound/midi_ctrl.h b/sys/i386/isa/sound/midi_ctrl.h index c7fdd0b..616b591 100644 --- a/sys/i386/isa/sound/midi_ctrl.h +++ b/sys/i386/isa/sound/midi_ctrl.h @@ -1,6 +1,3 @@ -/* - * $Id: midi_ctrl.c,v 1.7 1994/09/27 17:58:24 davidg Exp $ - */ static unsigned char ctrl_def_values[128] = { 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, /* 0 to 7 */ diff --git a/sys/i386/isa/sound/midi_synth.c b/sys/i386/isa/sound/midi_synth.c index 98f2672..fd6d8bd 100644 --- a/sys/i386/isa/sound/midi_synth.c +++ b/sys/i386/isa/sound/midi_synth.c @@ -25,7 +25,6 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: $ */ #include "sound_config.h" diff --git a/sys/i386/isa/sound/midi_synth.h b/sys/i386/isa/sound/midi_synth.h index e22bd5e..04075e2 100644 --- a/sys/i386/isa/sound/midi_synth.h +++ b/sys/i386/isa/sound/midi_synth.h @@ -1,6 +1,3 @@ -/* - * $Id: $ - */ int midi_synth_ioctl (int dev, unsigned int cmd, unsigned int arg); int midi_synth_kill_note (int dev, int channel, int note, int velocity); diff --git a/sys/i386/isa/sound/midibuf.c b/sys/i386/isa/sound/midibuf.c index 74067b6..ae0ddc3 100644 --- a/sys/i386/isa/sound/midibuf.c +++ b/sys/i386/isa/sound/midibuf.c @@ -25,7 +25,6 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: midibuf.c,v 1.5 1994/08/02 07:40:10 davidg Exp $ */ #include "sound_config.h" diff --git a/sys/i386/isa/sound/mpu401.c b/sys/i386/isa/sound/mpu401.c index 3728de5..40be066 100644 --- a/sys/i386/isa/sound/mpu401.c +++ b/sys/i386/isa/sound/mpu401.c @@ -25,7 +25,6 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: mpu401.c,v 1.8 1994/08/02 07:40:12 davidg Exp $ */ #define USE_SEQ_MACROS @@ -1049,11 +1048,7 @@ attach_mpu401 (long mem_start, struct address_info *hw_config) MPU_CAP_CLS | MPU_CAP_2PORT; revision_char = (devc->revision == 0x7f) ? 'M' : ' '; -#ifdef __FreeBSD__ - printk ("snd5: <MQX-%d%c MIDI Interface>", -#else printk (" <MQX-%d%c MIDI Interface>", -#endif ports, revision_char); #ifndef SCO @@ -1073,11 +1068,7 @@ attach_mpu401 (long mem_start, struct address_info *hw_config) devc->capabilities |= MPU_CAP_SYNC | MPU_CAP_FSK; -#ifdef __FreeBSD__ - printk ("snd5: <MPU-401 MIDI Interface %d.%d%c>", -#else printk (" <MPU-401 MIDI Interface %d.%d%c>", -#endif (devc->version & 0xf0) >> 4, devc->version & 0x0f, revision_char); diff --git a/sys/i386/isa/sound/opl3.c b/sys/i386/isa/sound/opl3.c index 00c27f2..0acd0c6 100644 --- a/sys/i386/isa/sound/opl3.c +++ b/sys/i386/isa/sound/opl3.c @@ -25,11 +25,12 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: opl3.c,v 1.6 1994/08/02 07:40:13 davidg Exp $ */ /* * Major improvements to the FM handling 30AUG92 by Rob Hooft, + */ +/* * hooft@chem.ruu.nl */ @@ -1174,11 +1175,7 @@ opl3_init (long mem_start) opl3_ok = 1; if (opl3_enabled) { -#ifdef __FreeBSD__ - printk ("snd1: <Yamaha OPL-3 FM>"); -#else printk (" <Yamaha OPL-3 FM>"); -#endif fm_model = 2; voice_alloc->max_voice = nr_voices = 18; fm_info.nr_drums = 0; @@ -1193,19 +1190,23 @@ opl3_init (long mem_start) else physical_voices[i].ioaddr = right_address; - /* Enable OPL-3 mode */ - opl3_command (right_address, OPL3_MODE_REGISTER, OPL3_ENABLE); - /* Select all 2-OP voices */ - opl3_command (right_address, CONNECTION_SELECT_REGISTER, 0x00); + opl3_command (right_address, OPL3_MODE_REGISTER, OPL3_ENABLE); /* + * Enable + * OPL-3 + * mode + */ + opl3_command (right_address, CONNECTION_SELECT_REGISTER, 0x00); /* + * Select + * all + * 2-OP + * * + * voices + */ } else { -#ifdef __FreeBSD__ - printk ("snd1: <Yamaha 2-OP FM>"); -#else printk (" <Yamaha 2-OP FM>"); -#endif fm_model = 1; voice_alloc->max_voice = nr_voices = 9; fm_info.nr_drums = 0; diff --git a/sys/i386/isa/sound/opl3.h b/sys/i386/isa/sound/opl3.h index ea7901f..21e6122 100644 --- a/sys/i386/isa/sound/opl3.h +++ b/sys/i386/isa/sound/opl3.h @@ -35,7 +35,7 @@ * * The percussive mode is implemented in the left side only. * - * With the above exeptions the both sides can be operated independently. + * With the above exceptions the both sides can be operated independently. * * A 4 OP voice can be created by setting the corresponding * bit at offset 4 of the right side. diff --git a/sys/i386/isa/sound/os.h b/sys/i386/isa/sound/os.h index 005b3c2..d35c7f5 100644 --- a/sys/i386/isa/sound/os.h +++ b/sys/i386/isa/sound/os.h @@ -37,7 +37,7 @@ * before making the changes. It's possible that I have already made the * change. * - * $Id: os.h,v 1.12 1994/09/27 17:58:21 davidg Exp $ + * os.h,v 1.13 1994/10/01 02:16:53 swallace Exp */ /* diff --git a/sys/i386/isa/sound/pas.h b/sys/i386/isa/sound/pas.h index 415c2bf..585bc64 100644 --- a/sys/i386/isa/sound/pas.h +++ b/sys/i386/isa/sound/pas.h @@ -1,6 +1,3 @@ -/* - * $Id: pas.h,v 1.5 1994/10/01 02:16:54 swallace Exp $ - */ /* */ /* Port addresses and bit fields for the Media Vision Pro AudioSpectrum second generation sound cards. */ /* */ @@ -83,7 +80,7 @@ #define OPERATION_MODE_1 0xEF8B /* R Control */ #define O_M_1_CDROM_TYPE 0x03 /* R CD-ROM 3=SCSI, 2=Sony, 0=no CD-ROM interface */ - #define O_M_1_FM_TYPE 0x04 /* R FM 1=sterero, 0=mono FM chip */ + #define O_M_1_FM_TYPE 0x04 /* R FM 1=stereo, 0=mono FM chip */ #define O_M_1_PCM_TYPE 0x08 /* R PCM 1=16-bit Codec, 0=8-bit DAC */ #define OPERATION_MODE_2 0xFF8B /* R Control */ #define O_M_2_PCS_ENABLED 0x02 /* R PC speaker PC speaker emulation 1=enabled, 0=disabled */ @@ -131,7 +128,6 @@ #define F_F_PCM_RATE_COUNTER 0x40 /* R W PCM 1=enable, 0=disable sample rate counter */ #define F_F_PCM_BUFFER_COUNTER 0x80 /* R W PCM 1=enable, 0=disable sample buffer counter */ -#define CHIP_REV 0xFF88 /* R Control 0=PAS, 1=PAS+, 2=CDPC, 3=PAS16C, 4=PAS16D */ #define PAS_NONE 0 #define PAS_PLUS 1 #define PAS_CDPC 2 diff --git a/sys/i386/isa/sound/pas2_card.c b/sys/i386/isa/sound/pas2_card.c index 96bf58d..1bfd73f 100644 --- a/sys/i386/isa/sound/pas2_card.c +++ b/sys/i386/isa/sound/pas2_card.c @@ -26,7 +26,6 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: pas2_card.c,v 1.10 1994/10/01 02:16:55 swallace Exp $ */ #include "sound_config.h" @@ -46,7 +45,6 @@ static int pas_intr_mask = 0; static int pas_irq = 0; static char pas_model; -static unsigned char board_rev_id; static char *pas_model_names[] = {"", "Pro AudioSpectrum+", "CDPC", "Pro AudioSpectrum 16", "Pro AudioSpectrum 16D"}; @@ -72,23 +70,6 @@ pas_write (unsigned char data, int ioaddr) OUTB (data, ioaddr ^ translat_code); } -/* - * The Revision D cards have a problem with their MVA508 interface. The - * kludge-o-rama fix is to make a 16-bit quantity with identical LSB and - * MSBs out of the output byte and to do a 16-bit out to the mixer port - - * 1. - */ - -void -mix_write (unsigned char data, int ioaddr) -{ - if (pas_model == PAS_16D) { - outw ((ioaddr ^ translat_code) - 1, data | (data << 8)); - outb (0, 0x80); - } else - OUTB (data, ioaddr ^ translat_code); -} - void pas2_msg (char *foo) { @@ -272,8 +253,8 @@ config_pas_hw (struct address_info *hw_config) else pas_write (0, PRESCALE_DIVIDER); - mix_write (P_M_MV508_ADDRESS | 5, PARALLEL_MIXER); - mix_write (5, PARALLEL_MIXER); + pas_write (P_M_MV508_ADDRESS | 5, PARALLEL_MIXER); + pas_write (5, PARALLEL_MIXER); #if !defined(EXCLUDE_SB_EMULATION) || !defined(EXCLUDE_SB) @@ -367,7 +348,7 @@ detect_pas_hw (struct address_info *hw_config) */ return 0; - pas_model = pas_read (CHIP_REV); + pas_model = O_M_1_to_card[pas_read (OPERATION_MODE_1) & 0x0f]; return pas_model; } @@ -380,14 +361,9 @@ attach_pas_card (long mem_start, struct address_info *hw_config) if (detect_pas_hw (hw_config)) { - board_rev_id = pas_read (BOARD_REV_ID); - if (pas_model = pas_read (CHIP_REV)) + if ((pas_model = O_M_1_to_card[pas_read (OPERATION_MODE_1) & 0x0f])) { -#ifdef __FreeBSD__ - printk ("snd3: <%s rev %d>", pas_model_names[(int) pas_model], board_rev_id); -#else /* __FreeBSD__ */ printk (" <%s rev %d>", pas_model_names[(int) pas_model], pas_read (BOARD_REV_ID)); -#endif /* __FreeBSD__ */ } if (config_pas_hw (hw_config)) diff --git a/sys/i386/isa/sound/pas2_midi.c b/sys/i386/isa/sound/pas2_midi.c index 817e7d1..1c6bf59 100644 --- a/sys/i386/isa/sound/pas2_midi.c +++ b/sys/i386/isa/sound/pas2_midi.c @@ -25,7 +25,6 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: pas2_midi.c,v 1.5 1994/08/02 07:40:22 davidg Exp $ */ #include "sound_config.h" diff --git a/sys/i386/isa/sound/pas2_mixer.c b/sys/i386/isa/sound/pas2_mixer.c index 7a4ccbd..bf0a20b 100644 --- a/sys/i386/isa/sound/pas2_mixer.c +++ b/sys/i386/isa/sound/pas2_mixer.c @@ -27,7 +27,6 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: pas2_mixer.c,v 1.6 1994/08/02 07:40:24 davidg Exp $ */ #include "sound_config.h" @@ -107,6 +106,14 @@ mixer_output (int right_vol, int left_vol, int div, int bits, int left = left_vol * div / 100; int right = right_vol * div / 100; + /* + * The Revision D cards have a problem with their MVA508 interface. The + * kludge-o-rama fix is to make a 16-bit quantity with identical LSB and + * MSBs out of the output byte and to do a 16-bit out to the mixer port - + * 1. We don't need to do this because the call to pas_write more than + * compensates for the timing problems. + */ + if (bits & P_M_MV508_MIXER) { /* * Select input or output mixer @@ -117,18 +124,18 @@ mixer_output (int right_vol, int left_vol, int div, int bits, if (bits == P_M_MV508_BASS || bits == P_M_MV508_TREBLE) { /* - * Bass and trebble are mono devices + * Bass and treble are mono devices */ - mix_write (P_M_MV508_ADDRESS | bits, PARALLEL_MIXER); - mix_write (left, PARALLEL_MIXER); + pas_write (P_M_MV508_ADDRESS | bits, PARALLEL_MIXER); + pas_write (left, PARALLEL_MIXER); right_vol = left_vol; } else { - mix_write (P_M_MV508_ADDRESS | P_M_MV508_LEFT | bits, PARALLEL_MIXER); - mix_write (left, PARALLEL_MIXER); - mix_write (P_M_MV508_ADDRESS | P_M_MV508_RIGHT | bits, PARALLEL_MIXER); - mix_write (right, PARALLEL_MIXER); + pas_write (P_M_MV508_ADDRESS | P_M_MV508_LEFT | bits, PARALLEL_MIXER); + pas_write (left, PARALLEL_MIXER); + pas_write (P_M_MV508_ADDRESS | P_M_MV508_RIGHT | bits, PARALLEL_MIXER); + pas_write (right, PARALLEL_MIXER); } return (left_vol | (right_vol << 8)); @@ -137,8 +144,8 @@ mixer_output (int right_vol, int left_vol, int div, int bits, void set_mode (int new_mode) { - mix_write (P_M_MV508_ADDRESS | P_M_MV508_MODE, PARALLEL_MIXER); - mix_write (new_mode, PARALLEL_MIXER); + pas_write (P_M_MV508_ADDRESS | P_M_MV508_MODE, PARALLEL_MIXER); + pas_write (new_mode, PARALLEL_MIXER); mode_control = new_mode; } @@ -282,19 +289,6 @@ pas_mixer_set (int whichDev, unsigned int level) /*****/ -static int -getmixer (int dev, int chn) -{ - if (chn == P_M_MV508_RIGHT) - { - return (levels[dev] >> 8) & 0x7f; - } - else - { - return levels[dev] & 0x7f; - } -} - static void pas_mixer_reset (void) { diff --git a/sys/i386/isa/sound/pas2_pcm.c b/sys/i386/isa/sound/pas2_pcm.c index e286215..e756431 100644 --- a/sys/i386/isa/sound/pas2_pcm.c +++ b/sys/i386/isa/sound/pas2_pcm.c @@ -26,7 +26,6 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: pas2_pcm.c,v 1.6 1994/08/02 07:40:28 davidg Exp $ */ #include "sound_config.h" @@ -80,7 +79,7 @@ pcm_set_speed (int arg) tmp = pas_read (FILTER_FREQUENCY); /* - * Set anti-aliasing filters according to sample rate. You reall *NEED* + * Set anti-aliasing filters according to sample rate. You really *NEED* * to enable this feature for all normal recording unless you want to * experiment with aliasing effects. * These filters apply to the selected "recording" source. @@ -405,12 +404,7 @@ pas_pcm_init (long mem_start, struct address_info *hw_config) { audio_devs[my_devnum = num_audiodevs++] = &pas_pcm_operations; audio_devs[my_devnum]->dmachan = hw_config->dma; -#ifndef NO_AUTODMA audio_devs[my_devnum]->buffcount = 1; -#else - audio_devs[my_devnum]->flags &= ~DMA_AUTOMODE; - audio_devs[my_devnum]->buffcount = DSP_BUFFCOUNT; -#endif audio_devs[my_devnum]->buffsize = 2 * DSP_BUFFSIZE; } else diff --git a/sys/i386/isa/sound/patmgr.c b/sys/i386/isa/sound/patmgr.c index 43d0950..97ca465 100644 --- a/sys/i386/isa/sound/patmgr.c +++ b/sys/i386/isa/sound/patmgr.c @@ -1,7 +1,7 @@ /* * sound/patmgr.c * - * The patch maneger interface for the /dev/sequencer + * The patch manager interface for the /dev/sequencer * * Copyright by Hannu Savolainen 1993 * @@ -25,7 +25,6 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: patmgr.c,v 1.6 1994/09/27 17:58:22 davidg Exp $ */ #define PATMGR_C @@ -132,7 +131,7 @@ pmgr_write (int dev, struct fileinfo *file, snd_rw_buf * buf, int count) return RET_ERROR (EIO); } - COPY_FROM_USER ((caddr_t)mbox[dev], buf, 0, 4); + COPY_FROM_USER (mbox[dev], buf, 0, 4); if (*(unsigned char *) mbox[dev] == SEQ_FULLSIZE) { diff --git a/sys/i386/isa/sound/pss.c b/sys/i386/isa/sound/pss.c index 3d7a620..6e35d1b 100644 --- a/sys/i386/isa/sound/pss.c +++ b/sys/i386/isa/sound/pss.c @@ -8,7 +8,7 @@ make the pss card to emulate the SB stuff. I have provided a simple interface to the PSS unlike the - DOG version. to download a new algorithim just cat it to + DOG version. to download a new algorithm just cat it to /dev/pss 14,9. You really need to rebuild this with the synth.ld file @@ -27,7 +27,7 @@ and everything will be okay. - At first I was going to wory about applications that were using + At first I was going to worry about applications that were using the sound stuff and disallow the use of /dev/pss. But for now I figured it doesn't matter. @@ -39,13 +39,12 @@ Probably everything else can be done via mmap - Oh if you want to develope code for the ADSP-21xx or Program the + Oh if you want to develop code for the ADSP-21xx or Program the 1848 just send me mail and I will hook you up. marc.hoffman@analog.com - * $Id: $ - */ + */ #include "sound_config.h" #if defined(CONFIGURE_SOUNDCARD) && !defined(EXCLUDE_PSS) @@ -124,7 +123,7 @@ PSS_write (int data) { int i, limit; - limit = GET_TIME () + 10; /* The timeout is 0.1 secods */ + limit = GET_TIME () + 10; /* The timeout is 0.1 seconds */ /* * Note! the i<5000000 is an emergency exit. The dsp_command() is sometimes * called while interrupts are disabled. This means that the timer is @@ -159,7 +158,7 @@ pss_setaddr (int addr, int configAddr) /*_____ pss_checkint This function tests an interrupt number to see if - it is availible. It takes the interrupt button + it is available. It takes the interrupt button as it's argument and returns TRUE if the interrupt is ok. */ @@ -216,7 +215,7 @@ pss_checkint (int intNum) pss_outpw (pss_base + PSS_CONFIG, val); break; default: - printk ("unknown interupt selected. %d\n", intNum); + printk ("unknown interrupt selected. %d\n", intNum); return 0; } @@ -305,7 +304,7 @@ pss_setint (int intNum, int configAddress) pss_outpw (configAddress, val); break; default: - printk ("pss_setint unkown int\n"); + printk ("pss_setint unknown int\n"); } } @@ -724,10 +723,10 @@ pss_download_boot (unsigned char *block, int size) /* The following is a simple device driver for the pss. - All I really care about is comunication to and from the pss. + All I really care about is communication to and from the pss. The ability to reinitialize the <synth.ld> This will be - default when release is choosen. + default when release is chosen. SNDCTL_PSS_DOWNLOAD: @@ -739,9 +738,9 @@ pss_download_boot (unsigned char *block, int size) where a write operation would effectively download a new ld. - 14,0x09 -- /dev/psecho would open up a comunication path to the + 14,0x09 -- /dev/psecho would open up a communication path to the esc614 asic. Given the ability to send - messages to the asic and recive messages too. + messages to the asic and receive messages too. All messages would get read and written in the same manner. It would be up to the application @@ -875,13 +874,13 @@ pss_ioctl (int dev, struct fileinfo *file, /* This is going to be used to implement waiting on messages sent from the DSP and to the - DSP when comunication is used via the pss directly. + DSP when communication is used via the pss directly. - We need to find out if the pss can generate a diffrent - interupt other than the one it has been setup for. + We need to find out if the pss can generate a different + interrupt other than the one it has been setup for. This way we can carry on a conversation with the pss - on a seprate chanel. This would be usefull for debugging. */ + on a separate channel. This would be useful for debugging. */ pss_select (int dev, struct fileinfo * file, int sel_type, select_table * wait) { diff --git a/sys/i386/isa/sound/pss.h b/sys/i386/isa/sound/pss.h index 4676756..e020af6 100644 --- a/sys/i386/isa/sound/pss.h +++ b/sys/i386/isa/sound/pss.h @@ -7,9 +7,6 @@ Copyright (c) 1993 Analog Devices Inc. All rights reserved ******************************************************************************/ -/* - * $Id: $ - */ /* Port offsets from base port for Sound Blaster DSP */ #define DSP_PORT_CMSD0 0x00 /* C/MS music voice 1-6 data port, write only */ #define DSP_PORT_CMSR0 0x01 /* C/MS music voice 1-6 register port, write only */ diff --git a/sys/i386/isa/sound/sb.h b/sys/i386/isa/sound/sb.h index c701bc1..bb8ae12 100644 --- a/sys/i386/isa/sound/sb.h +++ b/sys/i386/isa/sound/sb.h @@ -1,6 +1,3 @@ -/* - * $Id$ - */ #define DSP_RESET (sbc_base + 0x6) #define DSP_READ (sbc_base + 0xA) #define DSP_WRITE (sbc_base + 0xC) diff --git a/sys/i386/isa/sound/sb16_dsp.c b/sys/i386/isa/sound/sb16_dsp.c index a5586ef..a669cc5 100644 --- a/sys/i386/isa/sound/sb16_dsp.c +++ b/sys/i386/isa/sound/sb16_dsp.c @@ -27,7 +27,6 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: sb16_dsp.c,v 1.7 1994/09/27 17:58:24 davidg Exp $ */ #define DEB(x) @@ -39,7 +38,7 @@ #include "sb.h" #include "sb_mixer.h" -#if defined(CONFIGURE_SOUNDCARD) && !defined(EXCLUDE_SB16) && !defined(EXCLUDE_SB) && !defined(EXCLUDE_AUDIO) && !defined(EXCLUDE_SBPRO) +#if defined(CONFIGURE_SOUNDCARD) && !defined(EXCLUDE_SB16) && !defined(EXCLUDE_SB) && !defined(EXCLUDE_AUDIO) extern int sbc_base; @@ -79,6 +78,7 @@ static void sb16_dsp_halt (int dev); static int dsp_set_speed (int); static int dsp_set_stereo (int); static void dsp_cleanup (void); +int sb_reset_dsp (void); static struct audio_operations sb16_dsp_operations = { @@ -476,22 +476,13 @@ sb16_dsp_init (long mem_start, struct address_info *hw_config) sprintf (sb16_dsp_operations.name, "SoundBlaster 16 %d.%d", sbc_major, sbc_minor); #endif -#ifdef __FreeBSD__ - printk ("snd6: <%s>", sb16_dsp_operations.name); -#else printk (" <%s>", sb16_dsp_operations.name); -#endif if (num_audiodevs < MAX_AUDIO_DEV) { audio_devs[my_dev = num_audiodevs++] = &sb16_dsp_operations; audio_devs[my_dev]->dmachan = hw_config->dma; -#ifndef NO_AUTODMA audio_devs[my_dev]->buffcount = 1; -#else - audio_devs[my_dev]->flags &= ~DMA_AUTOMODE; - audio_devs[my_dev]->buffcount = DSP_BUFFCOUNT; -#endif audio_devs[my_dev]->buffsize = DSP_BUFFSIZE; } else diff --git a/sys/i386/isa/sound/sb16_midi.c b/sys/i386/isa/sound/sb16_midi.c index 7b23b4b..e40fe87 100644 --- a/sys/i386/isa/sound/sb16_midi.c +++ b/sys/i386/isa/sound/sb16_midi.c @@ -25,7 +25,6 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: sb16_midi.c,v 1.3 1994/08/02 07:40:38 davidg Exp $ */ #include "sound_config.h" @@ -225,11 +224,7 @@ attach_sb16midi (long mem_start, struct address_info *hw_config) return mem_start; } -#ifdef __FreeBSD__ - printk ("snd7: <SoundBlaster MPU-401>"); -#else printk (" <SoundBlaster MPU-401>"); -#endif std_midi_synth.midi_dev = my_dev = num_midis; midi_devs[num_midis++] = &sb16midi_operations; @@ -287,7 +282,6 @@ int probe_sb16midi (struct address_info *hw_config) { int ok = 0; - int i; extern int sbc_major; if (sbc_major < 4) diff --git a/sys/i386/isa/sound/sb_card.c b/sys/i386/isa/sound/sb_card.c index e56ebd3..f7588e1 100644 --- a/sys/i386/isa/sound/sb_card.c +++ b/sys/i386/isa/sound/sb_card.c @@ -25,7 +25,6 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id$ */ #include "sound_config.h" diff --git a/sys/i386/isa/sound/sb_dsp.c b/sys/i386/isa/sound/sb_dsp.c index 8e5c517..8eca7d3 100644 --- a/sys/i386/isa/sound/sb_dsp.c +++ b/sys/i386/isa/sound/sb_dsp.c @@ -29,7 +29,6 @@ * Hunyue Yau Jan 6 1994 * Added code to support Sound Galaxy NX Pro * - * $Id: sb_dsp.c,v 1.21 1994/10/01 02:17:04 swallace Exp $ */ #include "sound_config.h" @@ -91,6 +90,7 @@ volatile int sb_intr_active = 0; static int dsp_speed (int); static int dsp_set_stereo (int mode); +int sb_dsp_command (unsigned char val); #if !defined(EXCLUDE_MIDI) || !defined(EXCLUDE_AUDIO) @@ -105,7 +105,7 @@ sb_dsp_command (unsigned char val) unsigned long limit; limit = GET_TIME () + HZ / 10;/* - * The timeout is 0.1 secods + * The timeout is 0.1 seconds */ /* @@ -160,7 +160,7 @@ sbintr (int unit) if (!(src & 1)) return; /* - * Not a DSP interupt + * Not a DSP interrupt */ } #endif @@ -737,7 +737,7 @@ sb_dsp_detect (struct address_info *hw_config) #ifndef EXCLUDE_AUDIO static struct audio_operations sb_dsp_operations = { - "SoundBlaster ", + "SoundBlaster", NOTHING_SPECIAL, AFMT_U8, /* Just 8 bits. Poor old SB */ NULL, @@ -803,7 +803,7 @@ sb_dsp_init (long mem_start, struct address_info *hw_config) if (sbc_major >= 3) { -#ifndef SCO +#if !defined(SCO) && !defined(EXCLUDE_AUDIO) # ifdef __SGNXPRO__ if (mixer_type == 2) { @@ -823,11 +823,7 @@ sb_dsp_init (long mem_start, struct address_info *hw_config) #endif } -#ifdef __FreeBSD__ - printk ("snd2: <%s>", sb_dsp_operations.name); -#else printk (" <%s>", sb_dsp_operations.name); -#endif #ifndef EXCLUDE_AUDIO #if !defined(EXCLUDE_SB16) && !defined(EXCLUDE_SBPRO) diff --git a/sys/i386/isa/sound/sb_midi.c b/sys/i386/isa/sound/sb_midi.c index 6431cd7..51ebf78 100644 --- a/sys/i386/isa/sound/sb_midi.c +++ b/sys/i386/isa/sound/sb_midi.c @@ -25,7 +25,6 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: sb_midi.c,v 1.3 1994/08/02 07:40:43 davidg Exp $ */ #include "sound_config.h" @@ -43,7 +42,7 @@ * future version of this driver. */ -extern int sb_dsp_ok; /* Set to 1 atfer successful initialization */ +extern int sb_dsp_ok; /* Set to 1 after successful initialization */ extern int sbc_base; extern int sb_midi_mode; diff --git a/sys/i386/isa/sound/sb_mixer.c b/sys/i386/isa/sound/sb_mixer.c index d9bcb1e..ef26e5b 100644 --- a/sys/i386/isa/sound/sb_mixer.c +++ b/sys/i386/isa/sound/sb_mixer.c @@ -30,12 +30,11 @@ * Hunyue Yau Jan 6 1994 * Added code to support the Sound Galaxy NX Pro mixer. * - * $Id: sb_mixer.c,v 1.3 1994/08/02 07:40:46 davidg Exp $ */ #include "sound_config.h" -#if defined(CONFIGURE_SOUNDCARD) && !defined(EXCLUDE_SB) && !defined(EXCLUDE_SBPRO) +#if defined(CONFIGURE_SOUNDCARD) && !defined(EXCLUDE_SB) #define __SB_MIXER_C__ #include "sb.h" diff --git a/sys/i386/isa/sound/sb_mixer.h b/sys/i386/isa/sound/sb_mixer.h index c7d5ca1..1a5fc8a 100644 --- a/sys/i386/isa/sound/sb_mixer.h +++ b/sys/i386/isa/sound/sb_mixer.h @@ -29,7 +29,6 @@ * Hunyue Yau Jan 6 1994 * Added defines for the Sound Galaxy NX Pro mixer. * - * $Id: sb_mixer.h,v 1.3 1994/08/02 07:40:48 davidg Exp $ */ #define SBPRO_RECORDING_DEVICES (SOUND_MASK_LINE | SOUND_MASK_MIC | SOUND_MASK_CD) diff --git a/sys/i386/isa/sound/sequencer.c b/sys/i386/isa/sound/sequencer.c index 39ab789..eb55507 100644 --- a/sys/i386/isa/sound/sequencer.c +++ b/sys/i386/isa/sound/sequencer.c @@ -25,7 +25,6 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: sequencer.c,v 1.6 1994/08/02 07:40:49 davidg Exp $ */ #define SEQUENCER_C @@ -50,7 +49,7 @@ static int max_synthdev = 0; /* * The seq_mode gives the operating mode of the sequencer: * 1 = level1 (the default) - * 2 = level2 (extended capabilites) + * 2 = level2 (extended capabilities) */ #define SEQ_1 1 @@ -484,19 +483,21 @@ seq_chn_voice_event (unsigned char *event) return; if (seq_mode == SEQ_2) - if (synth_devs[dev]->alloc_voice) - voice = find_voice (dev, chn, note); - - if (cmd == MIDI_NOTEON && parm == 0) { - cmd = MIDI_NOTEOFF; - parm = 64; + if (synth_devs[dev]->alloc_voice) + voice = find_voice (dev, chn, note); + + if (cmd == MIDI_NOTEON && parm == 0) + { + cmd = MIDI_NOTEOFF; + parm = 64; + } } switch (cmd) { case MIDI_NOTEON: - if (note > 127) + if (note > 127 && note != 255) return; if (voice == -1 && seq_mode == SEQ_2 && synth_devs[dev]->alloc_voice) @@ -1852,7 +1853,8 @@ sequencer_init (long mem_start) } int -sequencer_select (int dev, struct fileinfo *file, int sel_type, select_table * wait) +/* sequencer_select (int dev, struct fileinfo *file, int sel_type, select_table * wait) -SMP */ +sequencer_select (int dev, struct fileinfo *file, int sel_type, void * wait) { return RET_ERROR (EIO); } diff --git a/sys/i386/isa/sound/sound.doc b/sys/i386/isa/sound/sound.doc new file mode 100644 index 0000000..f6db243 --- /dev/null +++ b/sys/i386/isa/sound/sound.doc @@ -0,0 +1,87 @@ +Instructions on using audio on a FreeBSD 2.1 (or 2.0-current) system. +See also /sys/i386/conf/LINT. + +You may add one or more of the following depending on what you do and don't +want compiled into your kernel. Note: Excluding things with EXCLUDE_... +is NOT recommended unless you really know what you're doing. + + options "AUDIO_MPU401" # INCLUDE MPU401 support + options AUDIO_GUS # INCLUDE GUS support + options AUDIO_SBPRO # INCLUDE SB Pro support + options "AUDIO_SB16" # INCLUDE SB 16 support + options "AUDIO_YM3812" # INCLUDE AdLib support + options AUDIO_PAS # INCLUDE Pro Audio Studio support + options AUDIO_SB # INCLUDE SB support + options AUDIO_MSS # INCLUDE MSS support + options EXCLUDE_AUDIO # NO digital audio support + options EXCLUDE_SEQUENCER # NO sequencer support + options EXCLUDE_GUS_IODETECT # NO GUS io detection + options EXCLUDE_SB_EMULATION # NO PAS SB emulation support + options "EXCLUDE_OPL3" # NO OPL3 chip support + options EXCLUDE_PRO_MIDI # NO PAS MIDI support + options EXCLUDE_CHIP_MIDI # NO MIDI chip support + options EXCLUDE_MIDI # NO MIDI support whatsoever + +To enable sound card support, you need to uncomment and add one or more of +the following lines to your kernel configuration file according to the +directions below: + +#device snd5 at isa? port 0x330 irq 6 vector mpuintr +#device snd4 at isa? port 0x220 irq 15 drq 6 vector gusintr +#device snd3 at isa? port 0x388 irq 10 drq 6 vector pasintr +#device snd2 at isa? port 0x220 irq 7 drq 1 vector sbintr +#device snd6 at isa? port 0x220 irq 7 drq 5 vector sbintr +#device snd10 at isa? port 0x530 irq 10 drq 1 vector adintr +#device snd7 at isa? port 0x300 +#device snd1 at isa? port 0x388 + +Note for PAS user: you should change snd1 line to +#device snd1 at isa? port 0x38a +(next stereo port) to avoid conflict with snd3 + + Unit numbers are: + 1 for Yamaha FM synth + 2 for SB/SB Pro DSP + 3 for PAS PCM and Midi + 4 for GUS + 5 for MPU-401 (there is separate driver for the SB16) + 6 for SB16 (DSP) + 7 for SB16 Midi (MPU-401 emulation) + 10 for Microsoft Windows Sound System (AD1846) + + If you have ProAudioSpectrum, uncomment units 3, 2 and 1 + If you have SoundBlaster 1.0 to 2.0 or SB Pro, uncomment 2 and 1. + If you have SoundBlaster 16, uncomment 2, 1, 6 and 7. + (use the same IRQ for the cards 2, 6 and 7. The DMA of the + card 2 is the 8 bit one and the DMA of the card 6 is the 16 bit one. + the port address of the card 7 is the Midi I/O address of the SB16. + If you have GravisUltrasound, uncomment 4 + If you have MPU-401, uncomment 5 + +NOTE: The MPU-401 driver may or may not work, and is unfortunately +unverifiable since no one I know has one. If you can test this, +please let me know! Also note that you will have to change these +settings if your soundcard is set for a non-standard address or IRQ. +Please check your documentation (or verify with any provided DOS utilities +that may have come with your card) and set the IRQ or address fields +accordingly. + +Also: Some systems with the OPTI chipset will require you to #define +BROKEN_BUS_CLOCK in /sys/i386/sound/pas2_card.c. Symptoms are that +you will hear a lot of clicking and popping sounds, like a geiger counter, +coming out of the PAS even when is not playing anything. + +Also: You can configure more then one card on a single DMA using +ALLOW_CONFLICT_DMA. + +Probing problems: Since the SB16 uses the same IRQ and addresses for +the different drivers, some of the snd dirvers will not be probed because +the kernel thinks there is a conflict. This can be worked-around by +setting the ALLOW_CONFLICT_IOADDR or ALLOW_CONFLICT_IRQ options. + +Warning: Setting the ALLOW_* options will will bypass checks for ALL drivers, +so be careful when you use them! + + - Jordan Hubbard (jkh@freefall.cdrom.com) + - Steven Wallace (swallace@freefall.cdrom.com) + - Sujal Patel (smpatel@wam.umd.edu) diff --git a/sys/i386/isa/sound/sound_calls.h b/sys/i386/isa/sound/sound_calls.h index f67ea05..ce1ba06 100644 --- a/sys/i386/isa/sound/sound_calls.h +++ b/sys/i386/isa/sound/sound_calls.h @@ -1,12 +1,7 @@ /* * DMA buffer calls - * - * $Id: sound_calls.h,v 1.6 1994/09/27 17:58:28 davidg Exp $ */ -#ifndef _MACHINE_ISA_SOUND_H_ -#define _MACHINE_ISA_SOUND_H_ - int DMAbuf_open(int dev, int mode); int DMAbuf_release(int dev, int mode); int DMAbuf_getwrbuffer(int dev, char **buf, int *size); @@ -100,6 +95,7 @@ int pro_midi_write(int dev, snd_rw_buf *uio); int pro_midi_read(int dev, snd_rw_buf *uio); /* From soundcard.c */ +long soundcard_init(long mem_start); void tenmicrosec(void); void request_sound_timer (int count); void sound_stop_timer(void); @@ -229,7 +225,7 @@ void sound_timer_interrupt(void); /* From ad1848.c */ void ad1848_init (char *name, int io_base, int irq, int dma_playback, int dma_capture); int ad1848_detect (int io_base); -void ad1848_interrupt (int dev); +void adintr (int dev); long attach_ms_sound(long mem_start, struct address_info * hw_config); int probe_ms_sound(struct address_info *hw_config); @@ -245,5 +241,3 @@ int pss_ioctl (int dev, struct fileinfo *file, unsigned int cmd, unsigned int arg); int pss_lseek (int dev, struct fileinfo *file, off_t offset, int orig); long pss_init(long mem_start); - -#endif /* _MACHINE_ISA_SOUND_H_ */ diff --git a/sys/i386/isa/sound/sound_config.h b/sys/i386/isa/sound/sound_config.h index 1938621..11d388f 100644 --- a/sys/i386/isa/sound/sound_config.h +++ b/sys/i386/isa/sound/sound_config.h @@ -26,7 +26,6 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: sound_config.h,v 1.5 1994/08/02 07:40:53 davidg Exp $ */ #include "local.h" @@ -53,16 +52,10 @@ #endif #ifdef EXCLUDE_SEQUENCER -#ifndef EXCLUDE_MIDI #define EXCLUDE_MIDI -#endif -#ifndef EXCLUDE_YM3812 #define EXCLUDE_YM3812 -#endif -#ifndef EXCLUDE_OPL3 #define EXCLUDE_OPL3 #endif -#endif #ifndef SND_DEFAULT_ENABLE #define SND_DEFAULT_ENABLE 1 @@ -123,18 +116,6 @@ If your card has nonstandard I/O address or IRQ number, change defines #define GUS_DMA 6 #endif -#ifndef GUS16_BASE -#define GUS16_BASE 0x530 -#endif - -#ifndef GUS16_IRQ -#define GUS16_IRQ 7 -#endif - -#ifndef GUS16_DMA -#define GUS16_DMA 3 -#endif - #ifndef MPU_BASE #define MPU_BASE 0x330 #endif @@ -156,20 +137,20 @@ If your card has nonstandard I/O address or IRQ number, change defines #define PSS_DMA 1 #endif -#ifndef MSS_BASE -#define MSS_BASE 0x530 +#ifndef MAX_REALTIME_FACTOR +#define MAX_REALTIME_FACTOR 4 #endif -#ifndef MSS_IRQ -#define MSS_IRQ 10 +#ifndef MSS_BASE +#define MSS_BASE 0x530 #endif -#ifndef MSS_DMA -#define MSS_DMA 3 +#ifndef MSS_IRQ +#define MSS_IRQ 10 #endif -#ifndef MAX_REALTIME_FACTOR -#define MAX_REALTIME_FACTOR 4 +#ifndef MSS_DMA +#define MSS_DMA 1 #endif /************* PCM DMA buffer sizes *******************/ @@ -221,7 +202,7 @@ If your card has nonstandard I/O address or IRQ number, change defines #define SND_DEV_DSP16 5 /* Like /dev/dsp but 16 bits/sample */ #define SND_DEV_STATUS 6 /* /dev/sndstat */ /* #7 not in use now. Was in 2.4. Free for use after v3.0. */ -#define SND_DEV_SEQ2 8 /* /dev/sequecer, level 2 interface */ +#define SND_DEV_SEQ2 8 /* /dev/sequencer, level 2 interface */ #define SND_DEV_SNDPROC 9 /* /dev/sndproc for programmable devices */ #define SND_DEV_PSS SND_DEV_SNDPROC diff --git a/sys/i386/isa/sound/sound_switch.c b/sys/i386/isa/sound/sound_switch.c index de35b0d..fe73aea 100644 --- a/sys/i386/isa/sound/sound_switch.c +++ b/sys/i386/isa/sound/sound_switch.c @@ -25,7 +25,6 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: sound_switch.c,v 1.3 1994/08/02 07:40:55 davidg Exp $ */ #include "sound_config.h" diff --git a/sys/i386/isa/sound/sound_timer.c b/sys/i386/isa/sound/sound_timer.c index 79a3ff1..c6544c8 100644 --- a/sys/i386/isa/sound/sound_timer.c +++ b/sys/i386/isa/sound/sound_timer.c @@ -26,7 +26,6 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: sb16_dsp.c,v 1.7 1994/09/27 17:58:24 davidg Exp $ */ #define SEQUENCER_C diff --git a/sys/i386/isa/sound/soundcard.c b/sys/i386/isa/sound/soundcard.c index 213f263..891731c 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.20 1994/10/01 02:17:14 swallace Exp $ + * soundcard.c,v 1.20 1994/10/01 02:17:14 swallace Exp */ #include "sound_config.h" @@ -54,7 +54,6 @@ static int soundcards_installed = 0; /* Number of installed static int soundcard_configured = 0; static struct fileinfo files[SND_NDEVS]; -struct selinfo selinfo[SND_NDEVS >> 4]; int sndprobe (struct isa_device *dev); int sndattach (struct isa_device *dev); @@ -63,7 +62,7 @@ int sndclose (dev_t dev, int flags); int sndioctl (dev_t dev, int cmd, caddr_t arg, int mode); int sndread (int dev, struct uio *uio); int sndwrite (int dev, struct uio *uio); -int sndselect (int dev, int rw, struct proc *p); +int sndselect (int dev, int rw); static void sound_mem_init(void); unsigned @@ -123,9 +122,6 @@ sndopen (dev_t dev, int flags) else if (flags & FWRITE) files[dev].mode = OPEN_WRITE; - selinfo[dev >> 4].si_pid = 0; - selinfo[dev >> 4].si_flags = 0; - FIX_RETURN(sound_open_sw (dev, &files[dev])); } @@ -148,33 +144,13 @@ sndioctl (dev_t dev, int cmd, caddr_t arg, int mode) } int -sndselect (int dev, int rw, struct proc *p) +sndselect (int dev, int rw) { - int r,s; - dev = minor (dev); DEB (printk ("sound_ioctl(dev=%d, cmd=0x%x, arg=0x%x)\n", dev, cmd, arg)); - r = 0; - DISABLE_INTR(s); - switch (rw) { - case FREAD: /* record */ - if(DMAbuf_input_ready(dev >> 4)) - r = 1; - else - selrecord(p, &selinfo[dev >> 4]); - break; - case FWRITE: /* play */ - if(DMAbuf_output_ready(dev >> 4)) - r = 1; - else - selrecord(p, &selinfo[dev >> 4]); - break; - } - RESTORE_INTR(s); - - return r; + FIX_RETURN (0); } static unsigned short diff --git a/sys/i386/isa/sound/sys_timer.c b/sys/i386/isa/sound/sys_timer.c index 383fe3c..1000045 100644 --- a/sys/i386/isa/sound/sys_timer.c +++ b/sys/i386/isa/sound/sys_timer.c @@ -26,7 +26,6 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: sys_timer.c,v 1.7 1994/09/27 17:58:24 davidg Exp $ */ #define SEQUENCER_C diff --git a/sys/i386/isa/sound/tuning.h b/sys/i386/isa/sound/tuning.h index 23086af..858e1fe 100644 --- a/sys/i386/isa/sound/tuning.h +++ b/sys/i386/isa/sound/tuning.h @@ -1,6 +1,3 @@ -/* - * $Id$ - */ #ifdef SEQUENCER_C unsigned short semitone_tuning[24] = diff --git a/sys/i386/isa/sound/uart6850.c b/sys/i386/isa/sound/uart6850.c index f8e23a0..ca63135 100644 --- a/sys/i386/isa/sound/uart6850.c +++ b/sys/i386/isa/sound/uart6850.c @@ -26,7 +26,6 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: uart6850.c,v 1.7 1994/09/27 17:58:24 davidg Exp $ */ #include "sound_config.h" diff --git a/sys/i386/isa/sound/vat_audioio.h b/sys/i386/isa/sound/vat_audioio.h index e419514..03cff23 100644 --- a/sys/i386/isa/sound/vat_audioio.h +++ b/sys/i386/isa/sound/vat_audioio.h @@ -30,7 +30,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Header: audioio.h,v 1.3 93/07/18 14:07:07 mccanne Exp $ (LBL) + * /home/ncvs/src/sys/i386/isa/sound/vat_audioio.h,v 1.1 1994/12/16 04:59:18 pst Exp (LBL) */ #ifndef _BSD_AUDIOIO_H_ |