summaryrefslogtreecommitdiff
path: root/sys/i386/isa/sound/patmgr.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/i386/isa/sound/patmgr.c')
-rw-r--r--sys/i386/isa/sound/patmgr.c41
1 files changed, 22 insertions, 19 deletions
diff --git a/sys/i386/isa/sound/patmgr.c b/sys/i386/isa/sound/patmgr.c
index 140a42845e5b..042d42d4067c 100644
--- a/sys/i386/isa/sound/patmgr.c
+++ b/sys/i386/isa/sound/patmgr.c
@@ -1,10 +1,10 @@
/*
- * linux/kernel/chr_drv/sound/patmgr.c
- *
+ * sound/patmgr.c
+ *
* The patch maneger interface for the /dev/sequencer
- *
+ *
* Copyright by Hannu Savolainen 1993
- *
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met: 1. Redistributions of source code must retain the above copyright
@@ -12,7 +12,7 @@
* Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
- *
+ *
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
@@ -24,7 +24,7 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
- *
+ *
*/
#define PATMGR_C
@@ -58,6 +58,8 @@ pmgr_open (int dev)
return RET_ERROR (EBUSY);
pmgr_opened[dev] = 1;
+ RESET_WAIT_QUEUE (server_procs[dev], server_wait_flag[dev]);
+
return 0;
}
@@ -71,8 +73,8 @@ pmgr_release (int dev)
mbox[dev]->key = PM_ERROR;
mbox[dev]->parm1 = RET_ERROR (EIO);
- if (appl_wait_flag)
- WAKE_UP (appl_proc);
+ if (SOMEONE_WAITING (appl_proc, appl_wait_flag))
+ WAKE_UP (appl_proc, appl_wait_flag);
}
pmgr_opened[dev] = 0;
@@ -90,13 +92,14 @@ pmgr_read (int dev, struct fileinfo *file, snd_rw_buf * buf, int count)
return RET_ERROR (EIO);
}
- while (!ok && !PROCESS_ABORTING)
+ while (!ok && !PROCESS_ABORTING (server_procs[dev], server_wait_flag[dev]))
{
DISABLE_INTR (flags);
- while (!(mbox[dev] && msg_direction[dev] == A_TO_S) && !PROCESS_ABORTING)
+ while (!(mbox[dev] && msg_direction[dev] == A_TO_S) &&
+ !PROCESS_ABORTING (server_procs[dev], server_wait_flag[dev]))
{
- INTERRUPTIBLE_SLEEP_ON (server_procs[dev], server_wait_flag[dev]);
+ DO_SLEEP (server_procs[dev], server_wait_flag[dev], 0);
}
if (mbox[dev] && msg_direction[dev] == A_TO_S)
@@ -158,9 +161,9 @@ pmgr_write (int dev, struct fileinfo *file, snd_rw_buf * buf, int count)
COPY_FROM_USER (&((char *) mbox[dev])[4], buf, 4, count - 4);
msg_direction[dev] = S_TO_A;
- if (appl_wait_flag)
+ if (SOMEONE_WAITING (appl_proc, appl_wait_flag))
{
- WAKE_UP (appl_proc);
+ WAKE_UP (appl_proc, appl_wait_flag);
}
}
@@ -185,12 +188,12 @@ pmgr_access (int dev, struct patmgr_info *rec)
mbox[dev] = rec;
msg_direction[dev] = A_TO_S;
- if (server_wait_flag[dev])
+ if (SOMEONE_WAITING (server_procs[dev], server_wait_flag[dev]))
{
- WAKE_UP (server_procs[dev]);
+ WAKE_UP (server_procs[dev], server_wait_flag[dev]);
}
- INTERRUPTIBLE_SLEEP_ON (appl_proc, appl_wait_flag);
+ DO_SLEEP (appl_proc, appl_wait_flag, 0);
if (msg_direction[dev] != S_TO_A)
{
@@ -239,12 +242,12 @@ pmgr_inform (int dev, int event, unsigned long p1, unsigned long p2,
mbox[dev]->parm3 = p3;
msg_direction[dev] = A_TO_S;
- if (server_wait_flag[dev])
+ if (SOMEONE_WAITING (server_procs[dev], server_wait_flag[dev]))
{
- WAKE_UP (server_procs[dev]);
+ WAKE_UP (server_procs[dev], server_wait_flag[dev]);
}
- INTERRUPTIBLE_SLEEP_ON (appl_proc, appl_wait_flag);
+ DO_SLEEP (appl_proc, appl_wait_flag, 0);
if (mbox[dev])
KERNEL_FREE (mbox[dev]);
mbox[dev] = NULL;