aboutsummaryrefslogtreecommitdiff
path: root/sys/i386/isa/sound/gus_midi.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/i386/isa/sound/gus_midi.c')
-rw-r--r--sys/i386/isa/sound/gus_midi.c34
1 files changed, 30 insertions, 4 deletions
diff --git a/sys/i386/isa/sound/gus_midi.c b/sys/i386/isa/sound/gus_midi.c
index 6978eed96762..b5cd6844cd1d 100644
--- a/sys/i386/isa/sound/gus_midi.c
+++ b/sys/i386/isa/sound/gus_midi.c
@@ -3,8 +3,28 @@
*
* The low level driver for the GUS Midi Interface.
*
- * (C) 1992 Hannu Savolainen (hsavolai@cs.helsinki.fi) See COPYING for further
- * details. Should be distributed with this file.
+ * 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
+ * notice, this list of conditions and the following disclaimer. 2.
+ * 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
+ * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * 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.
+ *
*/
#include "sound_config.h"
@@ -20,6 +40,8 @@ static int my_dev;
static int output_used = 0;
static volatile unsigned char gus_midi_control;
+static void (*midi_input_intr) (int dev, unsigned char data);
+
static unsigned char tmp_queue[256];
static volatile int qlen;
static volatile unsigned char qhead, qtail;
@@ -28,7 +50,10 @@ extern int gus_base, gus_irq, gus_dma;
#define GUS_MIDI_STATUS() INB(u_MidiStatus)
static int
-gus_midi_open (int dev, int mode)
+gus_midi_open (int dev, int mode,
+ void (*input) (int dev, unsigned char data),
+ void (*output) (int dev)
+)
{
if (midi_busy)
@@ -58,6 +83,7 @@ gus_midi_open (int dev, int mode)
midi_busy = 1;
qlen = qhead = qtail = output_used = 0;
+ midi_input_intr = input;
return 0;
}
@@ -225,7 +251,7 @@ gus_midi_interrupt (int dummy)
{
data = INB (u_MidiData);
if (input_opened)
- sequencer_midi_input (my_dev, data);
+ midi_input_intr (my_dev, data);
}
if (stat & MIDI_XMIT_EMPTY)