diff options
Diffstat (limited to 'sys/i386/isa/sound/gus_midi.c')
| -rw-r--r-- | sys/i386/isa/sound/gus_midi.c | 34 |
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) |
