Date: Thu, 12 Feb 1998 13:42:00 -0700 From: Nate Williams <nate@mt.sri.com> To: Studded <Studded@dal.net> Cc: Nate Williams <nate@mt.sri.com>, Luigi Rizzo <luigi@labinfo.iet.unipi.it>, freebsd-stable@FreeBSD.ORG, freebsd-multimedia@FreeBSD.ORG Subject: Re: Problems with new sound code? Message-ID: <199802122042.NAA05488@mt.sri.com> In-Reply-To: <34E35A5A.D76BB4E6@dal.net> References: <Pine.BSF.3.96.980212105507.2070A-100000@dt050ndd.san.rr.com> <199802121749.SAA19798@labinfo.iet.unipi.it> <199802121949.MAA05172@mt.sri.com> <34E35A5A.D76BB4E6@dal.net>
next in thread | previous in thread | raw e-mail | index | archive | help
[ Luigi's sound-driver in -stable won't work, and couldn't have worked since it contained the poll changes from -current. ] > I nominate Jordan for a pointy hat for not test-compiling the commit. :) Seconded. All in favor? In any case, appended on the end you'll find a diff that should be applied to -stable that at least makes the darn things compile. I'll commit it as soon as I can test it to make sure it actually *works*. :) Nate ------------- Index: ad1848.c =================================================================== RCS file: /data/FreeBSD/CVS/src/sys/i386/isa/snd/ad1848.c,v retrieving revision 1.5 diff -u -r1.5 ad1848.c --- ad1848.c 1997/11/23 07:03:09 1.5 +++ ad1848.c 1998/02/12 20:39:43 @@ -94,7 +94,7 @@ NULL /* mss_read */, NULL /* mss_write */, mss_ioctl, - sndpoll /* mss_poll */, + sndselect /* mss_select */, mss_intr, mss_callback , Index: sb_dsp.c =================================================================== RCS file: /data/FreeBSD/CVS/src/sys/i386/isa/snd/sb_dsp.c,v retrieving revision 1.5 diff -u -r1.5 sb_dsp.c --- sb_dsp.c 1997/11/23 07:03:14 1.5 +++ sb_dsp.c 1998/02/12 20:39:43 @@ -92,7 +92,7 @@ NULL /* use generic sndread */, NULL /* use generic sndwrite */, sb_dsp_ioctl, - sndpoll, + sndselect, sbintr, sb_callback, Index: sound.c =================================================================== RCS file: /data/FreeBSD/CVS/src/sys/i386/isa/snd/sound.c,v retrieving revision 1.8 diff -u -r1.8 sound.c --- sound.c 1998/01/31 02:50:37 1.8 +++ sound.c 1998/02/12 20:39:43 @@ -50,13 +50,7 @@ * */ -#include "opt_devfs.h" - #include <i386/isa/snd/sound.h> -#ifdef DEVFS -#include <sys/devfsext.h> -#endif /* DEVFS */ - #if NPCM > 0 /* from "snd.h" */ @@ -76,7 +70,7 @@ static struct cdevsw snd_cdevsw = { sndopen, sndclose, sndread, sndwrite, sndioctl, nxstop, nxreset, nxdevtotty, - sndpoll, sndmmap, nxstrategy, "snd", + sndselect, sndmmap, nxstrategy, "snd", NULL, -1, }; @@ -998,10 +992,10 @@ } /* - * function to poll what is currently available. Used to be select. + * select */ int -sndpoll(dev_t i_dev, int events, struct proc *p) +sndselect(dev_t i_dev, int rw, struct proc *p) { int dev, unit, c = 1 /* default: success */ ; snddev_info *d ; @@ -1009,15 +1003,15 @@ dev = minor(i_dev); d = get_snddev_info(dev, &unit); - DEB(printf("sndpoll dev 0x%04x events 0x%08x\n",i_dev, events)); + DEB(printf("sndselect dev 0x%04x rw 0x%08x\n",i_dev, rw)); if (d == NULL ) { - printf("poll: unit %d not configured\n", unit ); - return ( (events & (POLLIN|POLLOUT|POLLRDNORM|POLLWRNORM)) | POLLHUP); + printf("sndselect: unit %d not configured\n", unit ); + return (ENXIO); } - if (d->poll == NULL) - return ( (events & (POLLIN|POLLOUT|POLLRDNORM|POLLWRNORM)) | POLLHUP); - else if (d->poll != sndpoll ) - return d->poll(i_dev, events, p); + if (d->select == NULL) + return 1; /* always success ? */ + else if (d->select != sndselect ) + return d->select(i_dev, rw, p); else { /* handle it here with the generic code */ @@ -1031,7 +1025,7 @@ * In all other cases, select will return when 1 byte is ready. */ lim = 1; - if (events & (POLLOUT | POLLWRNORM) ) { + if (rw == FWRITE) { if ( d->flags & SND_F_HAS_SIZE ) lim = d->play_blocksize ; /* XXX fix the test here for half duplex devices */ @@ -1042,12 +1036,10 @@ c = d->dbuf_out.fl ; if (c < lim) /* no space available */ selrecord(p, & (d->wsel)); - else - revents |= events & (POLLOUT | POLLWRNORM); splx(flags); } - } - if (events & (POLLIN | POLLRDNORM)) { + return c < lim ? 0 : 1; + } else if (rw == FREAD) { if ( d->flags & SND_F_HAS_SIZE ) lim = d->rec_blocksize ; /* XXX fix the test here */ @@ -1060,15 +1052,15 @@ c = d->dbuf_in.rl ; if (c < lim) /* no data available */ selrecord(p, & (d->rsel)); - else - revents |= events & (POLLIN | POLLRDNORM); splx(flags); } - DEB(printf("sndpoll on read: %d >= %d flags 0x%08x\n", + DEB(printf("sndselect on read: %d >= %d flags 0x%08x\n", c, lim, d->flags)); return c < lim ? 0 : 1 ; + } else { + DDB(printf("select on exceptions, unimplemented\n")); + return 1; } - return revents; } return ENXIO ; /* notreached */ } Index: sound.h =================================================================== RCS file: /data/FreeBSD/CVS/src/sys/i386/isa/snd/sound.h,v retrieving revision 1.5 diff -u -r1.5 sound.h --- sound.h 1997/11/23 07:03:19 1.5 +++ sound.h 1998/02/12 20:39:43 @@ -62,7 +62,6 @@ #include <sys/errno.h> #include <sys/malloc.h> #include <sys/buf.h> -#include <sys/poll.h> #include <i386/isa/isa_device.h> #include <machine/clock.h> /* for DELAY */ @@ -74,7 +73,7 @@ #define d_read_t void #define d_write_t void #define d_ioctl_t void -#define d_poll_t void +#define d_select_t void #endif /* KERNEL */ typedef void (irq_proc_t) (int irq); @@ -125,7 +124,7 @@ d_read_t *read ; d_write_t *write ; d_ioctl_t *ioctl ; - d_poll_t *poll ; + d_select_t *select ; irq_proc_t *isr ; snd_callback_t *callback; @@ -483,7 +482,7 @@ void dsp_wr_dmaupdate(snd_dbuf *b); void dsp_rd_dmaupdate(snd_dbuf *b); -d_poll_t sndpoll; +d_select_t sndselect; /* * library functions (in sound.c) To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-multimedia" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199802122042.NAA05488>