summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
Diffstat (limited to 'sys')
-rw-r--r--sys/dev/midi.c18
-rw-r--r--sys/dev/midivar.h3
2 files changed, 10 insertions, 11 deletions
diff --git a/sys/dev/midi.c b/sys/dev/midi.c
index 001a8ea0389..e83997e014b 100644
--- a/sys/dev/midi.c
+++ b/sys/dev/midi.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: midi.c,v 1.37 2015/05/12 18:32:49 ratchov Exp $ */
+/* $OpenBSD: midi.c,v 1.38 2015/05/12 18:39:30 ratchov Exp $ */
/*
* Copyright (c) 2003, 2004 Alexandre Ratchov
@@ -84,7 +84,7 @@ midi_iintr(void *addr, int data)
struct midi_softc *sc = (struct midi_softc *)addr;
struct midi_buffer *mb = &sc->inbuf;
- if (sc->isdying || !sc->isopen || !(sc->flags & FREAD))
+ if (sc->isdying || !(sc->flags & FREAD))
return;
if (MIDIBUF_ISFULL(mb))
@@ -159,7 +159,7 @@ midi_ointr(void *addr)
struct midi_buffer *mb;
MUTEX_ASSERT_LOCKED(&audio_lock);
- if (sc->isopen && !sc->isdying) {
+ if (!(sc->flags & FWRITE) && !sc->isdying) {
mb = &sc->outbuf;
if (mb->used > 0) {
#ifdef MIDI_DEBUG
@@ -433,7 +433,7 @@ midiopen(dev_t dev, int flags, int mode, struct proc *p)
return ENXIO;
if (sc->isdying)
return EIO;
- if (sc->isopen)
+ if (sc->flags)
return EBUSY;
MIDIBUF_INIT(&sc->inbuf);
@@ -442,11 +442,11 @@ midiopen(dev_t dev, int flags, int mode, struct proc *p)
sc->rchan = sc->wchan = 0;
sc->async = 0;
sc->flags = flags;
-
err = sc->hw_if->open(sc->hw_hdl, flags, midi_iintr, midi_ointr, sc);
- if (err)
+ if (err) {
+ sc->flags = 0;
return err;
- sc->isopen = 1;
+ }
return 0;
}
@@ -482,7 +482,7 @@ midiclose(dev_t dev, int fflag, int devtype, struct proc *p)
*/
tsleep(&sc->wchan, PWAIT, "mid_cl", hz * MIDI_MAXWRITE / MIDI_RATE);
sc->hw_if->close(sc->hw_hdl);
- sc->isopen = 0;
+ sc->flags = 0;
return 0;
}
@@ -518,7 +518,7 @@ midiattach(struct device *parent, struct device *self, void *aux)
sc->isdying = 0;
sc->hw_if->getinfo(sc->hw_hdl, &mi);
sc->props = mi.props;
- sc->isopen = 0;
+ sc->flags = 0;
timeout_set(&sc->timeo, midi_timeout, sc);
printf(": <%s>\n", mi.name);
}
diff --git a/sys/dev/midivar.h b/sys/dev/midivar.h
index bbdad7b1622..48e61bdae4f 100644
--- a/sys/dev/midivar.h
+++ b/sys/dev/midivar.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: midivar.h,v 1.7 2013/03/15 09:10:52 ratchov Exp $ */
+/* $OpenBSD: midivar.h,v 1.8 2015/05/12 18:39:30 ratchov Exp $ */
/*
* Copyright (c) 2003, 2004 Alexandre Ratchov
@@ -72,7 +72,6 @@ struct midi_softc {
struct device dev;
struct midi_hw_if *hw_if;
void *hw_hdl;
- int isopen;
int isbusy; /* concerns only the output */
int isdying;
int flags; /* open flags */