diff options
author | jkh <jkh@FreeBSD.org> | 1995-03-05 04:01:29 +0000 |
---|---|---|
committer | jkh <jkh@FreeBSD.org> | 1995-03-05 04:01:29 +0000 |
commit | 643d49d85e6dd4307de909c4fd97cc07b7951da6 (patch) | |
tree | d8fd77377b3ac509d3f871eda5702f430e40294d /sys/i386/isa | |
parent | ced0d594a6c93a1f3d3b8f6c1fa9669ba16f2a32 (diff) | |
download | FreeBSD-src-643d49d85e6dd4307de909c4fd97cc07b7951da6.zip FreeBSD-src-643d49d85e6dd4307de909c4fd97cc07b7951da6.tar.gz |
Revert change on advice of author.
Submitted by: Sujal Patel <smpatel@wam.umd.edu>
Diffstat (limited to 'sys/i386/isa')
-rw-r--r-- | sys/i386/isa/sound/soundcard.c | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/sys/i386/isa/sound/soundcard.c b/sys/i386/isa/sound/soundcard.c index 891731c..69b62bf 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. * - * soundcard.c,v 1.20 1994/10/01 02:17:14 swallace Exp + * $Id: soundcard.c,v 1.21 1995/02/13 22:49:06 jkh Exp $ */ #include "sound_config.h" @@ -54,6 +54,7 @@ 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); @@ -62,7 +63,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); +int sndselect (int dev, int rw, struct proc *p); static void sound_mem_init(void); unsigned @@ -122,6 +123,9 @@ 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])); } @@ -144,13 +148,33 @@ sndioctl (dev_t dev, int cmd, caddr_t arg, int mode) } int -sndselect (int dev, int rw) +sndselect (int dev, int rw, struct proc *p) { + int r,s; + dev = minor (dev); DEB (printk ("sound_ioctl(dev=%d, cmd=0x%x, arg=0x%x)\n", dev, cmd, arg)); - FIX_RETURN (0); + 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; } static unsigned short |