summaryrefslogtreecommitdiffstats
path: root/sys/i386/isa/sound/soundcard.c
diff options
context:
space:
mode:
authorjkh <jkh@FreeBSD.org>1995-03-05 04:01:29 +0000
committerjkh <jkh@FreeBSD.org>1995-03-05 04:01:29 +0000
commit643d49d85e6dd4307de909c4fd97cc07b7951da6 (patch)
treed8fd77377b3ac509d3f871eda5702f430e40294d /sys/i386/isa/sound/soundcard.c
parentced0d594a6c93a1f3d3b8f6c1fa9669ba16f2a32 (diff)
downloadFreeBSD-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/sound/soundcard.c')
-rw-r--r--sys/i386/isa/sound/soundcard.c32
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
OpenPOWER on IntegriCloud