/* close associated midi device for output */ static int midisynth_unuse(void *private_data, snd_seq_port_subscribe_t *info) { seq_midisynth_t *msynth = (seq_midisynth_t *)private_data; unsigned char buf = 0xff; /* MIDI reset */ snd_assert(msynth->output_rfile.output != NULL, return -EINVAL); /* sending single MIDI reset message to shut the device up */ snd_rawmidi_kernel_write(msynth->output_rfile.output, &buf, 1); snd_rawmidi_drain_output(msynth->output_rfile.output); return snd_rawmidi_kernel_release(&msynth->output_rfile); }
static int dump_midi(snd_rawmidi_substream_t *substream, const char *buf, int count) { snd_rawmidi_runtime_t *runtime; int tmp; snd_assert(substream != NULL || buf != NULL, return -EINVAL); runtime = substream->runtime; if ((tmp = runtime->avail) < count) { snd_printk("warning, output event was lost (count = %i, available = %i)\n", count, tmp); return -ENOMEM; } if (snd_rawmidi_kernel_write(substream, buf, count) < count) return -EINVAL; return 0; }
static int dump_midi(struct snd_rawmidi_substream *substream, const char *buf, int count) { struct snd_rawmidi_runtime *runtime; int tmp; if (snd_BUG_ON(!substream || !buf)) return -EINVAL; runtime = substream->runtime; if ((tmp = runtime->avail) < count) { if (printk_ratelimit()) snd_printk(KERN_ERR "MIDI output buffer overrun\n"); return -ENOMEM; } if (snd_rawmidi_kernel_write(substream, buf, count) < count) return -EINVAL; return 0; }