23 #include <linux/module.h>
24 #include <linux/slab.h>
31 static int midi1,midi2;
32 static void *midi_mem =
NULL;
43 static int v_midi_open (
int dev,
int mode,
44 void (*
input) (
int dev,
unsigned char data),
45 void (*output) (
int dev)
57 spin_unlock_irqrestore(&devc->
lock,flags);
61 spin_unlock_irqrestore(&devc->
lock,flags);
74 static void v_midi_close (
int dev)
86 spin_unlock_irqrestore(&devc->
lock,flags);
89 static int v_midi_out (
int dev,
unsigned char midi_byte)
106 static inline int v_midi_start_read (
int dev)
111 static int v_midi_end_read (
int dev)
123 static inline int v_midi_ioctl (
int dev,
unsigned cmd,
void __user *
arg)
129 #define MIDI_SYNTH_NAME "Loopback MIDI"
130 #define MIDI_SYNTH_CAPS SYNTH_CAP_INPUT
138 .converter = &std_midi_synth,
141 .close = v_midi_close,
142 .ioctl = v_midi_ioctl,
143 .outputc = v_midi_out,
144 .start_read = v_midi_start_read,
145 .end_read = v_midi_end_read,
152 .converter = &std_midi_synth,
155 .close = v_midi_close,
156 .ioctl = v_midi_ioctl,
157 .outputc = v_midi_out,
158 .start_read = v_midi_start_read,
159 .end_read = v_midi_end_read,
214 v_devc[0] = &m->
v_ops[0];
215 memcpy ((
char *) midi_devs[midi1], (
char *) &v_midi_operations,
228 std_midi_synth.midi_dev = midi1;
229 memcpy ((
char *) midi_devs[midi1]->converter, (
char *) &std_midi_synth,
231 midi_devs[midi1]->converter->id =
"V_MIDI 1";
234 v_devc[1] = &m->
v_ops[1];
236 memcpy ((
char *) midi_devs[midi2], (
char *) &v_midi_operations2,
249 std_midi_synth.midi_dev = midi2;
250 memcpy ((
char *) midi_devs[midi2]->converter, (
char *) &std_midi_synth,
252 midi_devs[midi2]->converter->id =
"V_MIDI 2";
273 static int __init init_vmidi(
void)
275 printk(
"MIDI Loopback device driver\n");
276 if (!probe_v_midi(&
cfg))
283 static void __exit cleanup_vmidi(
void)