diff options
Diffstat (limited to 'sys/i386/isa/sound/midibuf.c')
-rw-r--r-- | sys/i386/isa/sound/midibuf.c | 48 |
1 files changed, 14 insertions, 34 deletions
diff --git a/sys/i386/isa/sound/midibuf.c b/sys/i386/isa/sound/midibuf.c index 58ff1ee..79e1a16 100644 --- a/sys/i386/isa/sound/midibuf.c +++ b/sys/i386/isa/sound/midibuf.c @@ -418,45 +418,25 @@ MIDIbuf_ioctl (int dev, struct fileinfo *file, #ifdef ALLOW_SELECT int -MIDIbuf_select (int dev, struct fileinfo *file, int sel_type, select_table * wait) +MIDIbuf_poll (int dev, struct fileinfo *file, int events, select_table * wait) { - dev = dev >> 4; + int revents = 0; - switch (sel_type) - { - case SEL_IN: - if (!DATA_AVAIL (midi_in_buf[dev])) - { -#if defined(__FreeBSD__) - selrecord(wait, &selinfo[dev]); -#else - input_sleep_flag[dev].mode = WK_SLEEP; - select_wait (&input_sleeper[dev], wait); -#endif - return 0; - } - return 1; - break; + dev = dev >> 4; - case SEL_OUT: - if (SPACE_AVAIL (midi_out_buf[dev])) - { -#if defined(__FreeBSD__) - selrecord(wait, &selinfo[dev]); -#else - midi_sleep_flag[dev].mode = WK_SLEEP; - select_wait (&midi_sleeper[dev], wait); -#endif - return 0; - } - return 1; - break; + if (events & (POLLIN | POLLRDNORM)) + if (!DATA_AVAIL (midi_in_buf[dev])) + selrecord(wait, &selinfo[dev]); + else + revents |= events & (POLLIN | POLLRDNORM); - case SEL_EX: - return 0; - } + if (events & (POLLOUT | POLLWRNORM)) + if (SPACE_AVAIL (midi_out_buf[dev])) + selrecord(wait, &selinfo[dev]); + else + revents |= events & (POLLOUT | POLLWRNORM); - return 0; + return revents; } #endif /* ALLOW_SELECT */ |