#include <linux/init.h>
#include <linux/slab.h>
#include <linux/errno.h>
#include <linux/string.h>
#include <linux/module.h>
#include <linux/mutex.h>
#include <sound/core.h>
#include <sound/rawmidi.h>
#include <sound/seq_kernel.h>
#include <sound/seq_device.h>
#include <sound/seq_midi_event.h>
#include <sound/initval.h>
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;
static int output_buffer_size = …;
module_param(output_buffer_size, int, 0644);
MODULE_PARM_DESC(…) …;
static int input_buffer_size = …;
module_param(input_buffer_size, int, 0644);
MODULE_PARM_DESC(…) …;
struct seq_midisynth { … };
struct seq_midisynth_client { … };
static struct seq_midisynth_client *synths[SNDRV_CARDS];
static DEFINE_MUTEX(register_mutex);
static void snd_midi_input_event(struct snd_rawmidi_substream *substream)
{ … }
static int dump_midi(struct snd_rawmidi_substream *substream, const char *buf, int count)
{ … }
static int __dump_midi(void *ptr, void *buf, int count)
{ … }
static int event_process_midi(struct snd_seq_event *ev, int direct,
void *private_data, int atomic, int hop)
{ … }
static int snd_seq_midisynth_new(struct seq_midisynth *msynth,
struct snd_card *card,
int device,
int subdevice)
{ … }
static int midisynth_subscribe(void *private_data, struct snd_seq_port_subscribe *info)
{ … }
static int midisynth_unsubscribe(void *private_data, struct snd_seq_port_subscribe *info)
{ … }
static int midisynth_use(void *private_data, struct snd_seq_port_subscribe *info)
{ … }
static int midisynth_unuse(void *private_data, struct snd_seq_port_subscribe *info)
{ … }
static void snd_seq_midisynth_delete(struct seq_midisynth *msynth)
{ … }
static int
snd_seq_midisynth_probe(struct device *_dev)
{ … }
static int
snd_seq_midisynth_remove(struct device *_dev)
{ … }
static struct snd_seq_driver seq_midisynth_driver = …;
module_snd_seq_driver(…) …;