Lines Matching refs:vmidi

58 static void snd_virmidi_init_event(struct snd_virmidi *vmidi,  in snd_virmidi_init_event()  argument
62 ev->source.port = vmidi->port; in snd_virmidi_init_event()
63 switch (vmidi->seq_mode) { in snd_virmidi_init_event()
69 ev->dest.client = vmidi->client; in snd_virmidi_init_event()
70 ev->dest.port = vmidi->port; in snd_virmidi_init_event()
82 struct snd_virmidi *vmidi; in snd_virmidi_dev_receive_event() local
87 list_for_each_entry(vmidi, &rdev->filelist, list) { in snd_virmidi_dev_receive_event()
88 if (!vmidi->trigger) in snd_virmidi_dev_receive_event()
93 snd_seq_dump_var_event(ev, (snd_seq_dump_func_t)snd_rawmidi_receive, vmidi->substream); in snd_virmidi_dev_receive_event()
95 len = snd_midi_event_decode(vmidi->parser, msg, sizeof(msg), ev); in snd_virmidi_dev_receive_event()
97 snd_rawmidi_receive(vmidi->substream, msg, len); in snd_virmidi_dev_receive_event()
141 struct snd_virmidi *vmidi = substream->runtime->private_data; in snd_virmidi_input_trigger() local
144 vmidi->trigger = 1; in snd_virmidi_input_trigger()
146 vmidi->trigger = 0; in snd_virmidi_input_trigger()
155 struct snd_virmidi *vmidi = substream->runtime->private_data; in snd_virmidi_output_trigger() local
161 vmidi->trigger = 1; in snd_virmidi_output_trigger()
162 if (vmidi->seq_mode == SNDRV_VIRMIDI_SEQ_DISPATCH && in snd_virmidi_output_trigger()
163 !(vmidi->rdev->flags & SNDRV_VIRMIDI_SUBSCRIBE)) { in snd_virmidi_output_trigger()
170 if (vmidi->event.type != SNDRV_SEQ_EVENT_NONE) { in snd_virmidi_output_trigger()
171 if (snd_seq_kernel_client_dispatch(vmidi->client, &vmidi->event, in_atomic(), 0) < 0) in snd_virmidi_output_trigger()
173 vmidi->event.type = SNDRV_SEQ_EVENT_NONE; in snd_virmidi_output_trigger()
182 res = snd_midi_event_encode(vmidi->parser, pbuf, count, &vmidi->event); in snd_virmidi_output_trigger()
184 snd_midi_event_reset_encode(vmidi->parser); in snd_virmidi_output_trigger()
190 if (vmidi->event.type != SNDRV_SEQ_EVENT_NONE) { in snd_virmidi_output_trigger()
191 if (snd_seq_kernel_client_dispatch(vmidi->client, &vmidi->event, in_atomic(), 0) < 0) in snd_virmidi_output_trigger()
193 vmidi->event.type = SNDRV_SEQ_EVENT_NONE; in snd_virmidi_output_trigger()
200 vmidi->trigger = 0; in snd_virmidi_output_trigger()
211 struct snd_virmidi *vmidi; in snd_virmidi_input_open() local
214 vmidi = kzalloc(sizeof(*vmidi), GFP_KERNEL); in snd_virmidi_input_open()
215 if (vmidi == NULL) in snd_virmidi_input_open()
217 vmidi->substream = substream; in snd_virmidi_input_open()
218 if (snd_midi_event_new(0, &vmidi->parser) < 0) { in snd_virmidi_input_open()
219 kfree(vmidi); in snd_virmidi_input_open()
222 vmidi->seq_mode = rdev->seq_mode; in snd_virmidi_input_open()
223 vmidi->client = rdev->client; in snd_virmidi_input_open()
224 vmidi->port = rdev->port; in snd_virmidi_input_open()
225 runtime->private_data = vmidi; in snd_virmidi_input_open()
227 list_add_tail(&vmidi->list, &rdev->filelist); in snd_virmidi_input_open()
229 vmidi->rdev = rdev; in snd_virmidi_input_open()
240 struct snd_virmidi *vmidi; in snd_virmidi_output_open() local
242 vmidi = kzalloc(sizeof(*vmidi), GFP_KERNEL); in snd_virmidi_output_open()
243 if (vmidi == NULL) in snd_virmidi_output_open()
245 vmidi->substream = substream; in snd_virmidi_output_open()
246 if (snd_midi_event_new(MAX_MIDI_EVENT_BUF, &vmidi->parser) < 0) { in snd_virmidi_output_open()
247 kfree(vmidi); in snd_virmidi_output_open()
250 vmidi->seq_mode = rdev->seq_mode; in snd_virmidi_output_open()
251 vmidi->client = rdev->client; in snd_virmidi_output_open()
252 vmidi->port = rdev->port; in snd_virmidi_output_open()
253 snd_virmidi_init_event(vmidi, &vmidi->event); in snd_virmidi_output_open()
254 vmidi->rdev = rdev; in snd_virmidi_output_open()
255 runtime->private_data = vmidi; in snd_virmidi_output_open()
265 struct snd_virmidi *vmidi = substream->runtime->private_data; in snd_virmidi_input_close() local
268 list_del(&vmidi->list); in snd_virmidi_input_close()
270 snd_midi_event_free(vmidi->parser); in snd_virmidi_input_close()
272 kfree(vmidi); in snd_virmidi_input_close()
281 struct snd_virmidi *vmidi = substream->runtime->private_data; in snd_virmidi_output_close() local
282 snd_midi_event_free(vmidi->parser); in snd_virmidi_output_close()
284 kfree(vmidi); in snd_virmidi_output_close()