diff options
Diffstat (limited to 'sound/oss/midi_synth.c')
| -rw-r--r-- | sound/oss/midi_synth.c | 59 |
1 files changed, 37 insertions, 22 deletions
diff --git a/sound/oss/midi_synth.c b/sound/oss/midi_synth.c index 972edc62afd..2292c230d7e 100644 --- a/sound/oss/midi_synth.c +++ b/sound/oss/midi_synth.c @@ -1,5 +1,5 @@ /* - * sound/midi_synth.c + * sound/oss/midi_synth.c * * High level midi sequencer manager for dumb MIDI interfaces. */ @@ -84,6 +84,7 @@ do_midi_msg(int synthno, unsigned char *msg, int mlen) ; } } +EXPORT_SYMBOL(do_midi_msg); static void midi_outc(int midi_dev, int data) @@ -276,6 +277,7 @@ int midi_synth_ioctl(int dev, unsigned int cmd, void __user *arg) return -EINVAL; } } +EXPORT_SYMBOL(midi_synth_ioctl); int midi_synth_kill_note(int dev, int channel, int note, int velocity) @@ -342,6 +344,7 @@ midi_synth_kill_note(int dev, int channel, int note, int velocity) return 0; } +EXPORT_SYMBOL(midi_synth_kill_note); int midi_synth_set_instr(int dev, int channel, int instr_no) @@ -364,6 +367,7 @@ midi_synth_set_instr(int dev, int channel, int instr_no) return 0; } +EXPORT_SYMBOL(midi_synth_set_instr); int midi_synth_start_note(int dev, int channel, int note, int velocity) @@ -405,6 +409,7 @@ midi_synth_start_note(int dev, int channel, int note, int velocity) } return 0; } +EXPORT_SYMBOL(midi_synth_start_note); void midi_synth_reset(int dev) @@ -412,6 +417,7 @@ midi_synth_reset(int dev) leave_sysex(dev); } +EXPORT_SYMBOL(midi_synth_reset); int midi_synth_open(int dev, int mode) @@ -420,7 +426,7 @@ midi_synth_open(int dev, int mode) int err; struct midi_input_info *inc; - if (orig_dev < 0 || orig_dev > num_midis || midi_devs[orig_dev] == NULL) + if (orig_dev < 0 || orig_dev >= num_midis || midi_devs[orig_dev] == NULL) return -ENXIO; midi2synth[orig_dev] = dev; @@ -444,6 +450,7 @@ midi_synth_open(int dev, int mode) return 1; } +EXPORT_SYMBOL(midi_synth_open); void midi_synth_close(int dev) @@ -459,15 +466,17 @@ midi_synth_close(int dev) midi_devs[orig_dev]->close(orig_dev); } +EXPORT_SYMBOL(midi_synth_close); void midi_synth_hw_control(int dev, unsigned char *event) { } +EXPORT_SYMBOL(midi_synth_hw_control); int midi_synth_load_patch(int dev, int format, const char __user *addr, - int offs, int count, int pmgr_flag) + int count, int pmgr_flag) { int orig_dev = synth_devs[dev]->midi_dev; @@ -482,39 +491,37 @@ midi_synth_load_patch(int dev, int format, const char __user *addr, if (!prefix_cmd(orig_dev, 0xf0)) return 0; + /* Invalid patch format */ if (format != SYSEX_PATCH) - { -/* printk("MIDI Error: Invalid patch format (key) 0x%x\n", format);*/ return -EINVAL; - } + + /* Patch header too short */ if (count < hdr_size) - { -/* printk("MIDI Error: Patch header too short\n");*/ return -EINVAL; - } + count -= hdr_size; /* - * Copy the header from user space but ignore the first bytes which have - * been transferred already. + * Copy the header from user space */ - if(copy_from_user(&((char *) &sysex)[offs], &(addr)[offs], hdr_size - offs)) + if (copy_from_user(&sysex, addr, hdr_size)) return -EFAULT; - - if (count < sysex.len) - { -/* printk(KERN_WARNING "MIDI Warning: Sysex record too short (%d<%d)\n", count, (int) sysex.len);*/ + + /* Sysex record too short */ + if ((unsigned)count < (unsigned)sysex.len) sysex.len = count; - } - left = sysex.len; - src_offs = 0; + + left = sysex.len; + src_offs = 0; for (i = 0; i < left && !signal_pending(current); i++) { unsigned char data; - get_user(*(unsigned char *) &data, (unsigned char __user *) &((addr)[hdr_size + i])); + if (get_user(data, + (unsigned char __user *)(addr + hdr_size + i))) + return -EFAULT; eox_seen = (i > 0 && data & 0x80); /* End of sysex */ @@ -542,11 +549,13 @@ midi_synth_load_patch(int dev, int format, const char __user *addr, midi_outc(orig_dev, 0xf7); return 0; } - +EXPORT_SYMBOL(midi_synth_load_patch); + void midi_synth_panning(int dev, int channel, int pressure) { } - +EXPORT_SYMBOL(midi_synth_panning); + void midi_synth_aftertouch(int dev, int channel, int pressure) { int orig_dev = synth_devs[dev]->midi_dev; @@ -576,6 +585,7 @@ void midi_synth_aftertouch(int dev, int channel, int pressure) midi_outc(orig_dev, pressure); } +EXPORT_SYMBOL(midi_synth_aftertouch); void midi_synth_controller(int dev, int channel, int ctrl_num, int value) @@ -604,6 +614,7 @@ midi_synth_controller(int dev, int channel, int ctrl_num, int value) midi_outc(orig_dev, ctrl_num); midi_outc(orig_dev, value & 0x7f); } +EXPORT_SYMBOL(midi_synth_controller); void midi_synth_bender(int dev, int channel, int value) @@ -635,11 +646,13 @@ midi_synth_bender(int dev, int channel, int value) midi_outc(orig_dev, value & 0x7f); midi_outc(orig_dev, (value >> 7) & 0x7f); } +EXPORT_SYMBOL(midi_synth_bender); void midi_synth_setup_voice(int dev, int voice, int channel) { } +EXPORT_SYMBOL(midi_synth_setup_voice); int midi_synth_send_sysex(int dev, unsigned char *bytes, int len) @@ -695,3 +708,5 @@ midi_synth_send_sysex(int dev, unsigned char *bytes, int len) return 0; } +EXPORT_SYMBOL(midi_synth_send_sysex); + |
