• Home
  • Raw
  • Download

Lines Matching refs:vmidi

44 static void snd_virmidi_init_event(struct snd_virmidi *vmidi,  in snd_virmidi_init_event()  argument
48 ev->source.port = vmidi->port; in snd_virmidi_init_event()
49 switch (vmidi->seq_mode) { in snd_virmidi_init_event()
55 ev->dest.client = vmidi->client; in snd_virmidi_init_event()
56 ev->dest.port = vmidi->port; in snd_virmidi_init_event()
69 struct snd_virmidi *vmidi; in snd_virmidi_dev_receive_event() local
77 list_for_each_entry(vmidi, &rdev->filelist, list) { in snd_virmidi_dev_receive_event()
78 if (!READ_ONCE(vmidi->trigger)) in snd_virmidi_dev_receive_event()
83 snd_seq_dump_var_event(ev, (snd_seq_dump_func_t)snd_rawmidi_receive, vmidi->substream); in snd_virmidi_dev_receive_event()
84 snd_midi_event_reset_decode(vmidi->parser); in snd_virmidi_dev_receive_event()
86 len = snd_midi_event_decode(vmidi->parser, msg, sizeof(msg), ev); in snd_virmidi_dev_receive_event()
88 snd_rawmidi_receive(vmidi->substream, msg, len); in snd_virmidi_dev_receive_event()
118 struct snd_virmidi *vmidi = substream->runtime->private_data; in snd_virmidi_input_trigger() local
120 WRITE_ONCE(vmidi->trigger, !!up); in snd_virmidi_input_trigger()
128 struct snd_virmidi *vmidi; in snd_vmidi_output_work() local
133 vmidi = container_of(work, struct snd_virmidi, output_work); in snd_vmidi_output_work()
134 substream = vmidi->substream; in snd_vmidi_output_work()
137 if (vmidi->seq_mode == SNDRV_VIRMIDI_SEQ_DISPATCH && in snd_vmidi_output_work()
138 !(vmidi->rdev->flags & SNDRV_VIRMIDI_SUBSCRIBE)) { in snd_vmidi_output_work()
143 while (READ_ONCE(vmidi->trigger)) { in snd_vmidi_output_work()
146 if (!snd_midi_event_encode_byte(vmidi->parser, input, in snd_vmidi_output_work()
147 &vmidi->event)) in snd_vmidi_output_work()
149 if (vmidi->event.type != SNDRV_SEQ_EVENT_NONE) { in snd_vmidi_output_work()
150 ret = snd_seq_kernel_client_dispatch(vmidi->client, in snd_vmidi_output_work()
151 &vmidi->event, in snd_vmidi_output_work()
153 vmidi->event.type = SNDRV_SEQ_EVENT_NONE; in snd_vmidi_output_work()
167 struct snd_virmidi *vmidi = substream->runtime->private_data; in snd_virmidi_output_trigger() local
169 WRITE_ONCE(vmidi->trigger, !!up); in snd_virmidi_output_trigger()
171 queue_work(system_highpri_wq, &vmidi->output_work); in snd_virmidi_output_trigger()
181 struct snd_virmidi *vmidi; in snd_virmidi_input_open() local
183 vmidi = kzalloc(sizeof(*vmidi), GFP_KERNEL); in snd_virmidi_input_open()
184 if (vmidi == NULL) in snd_virmidi_input_open()
186 vmidi->substream = substream; in snd_virmidi_input_open()
187 if (snd_midi_event_new(0, &vmidi->parser) < 0) { in snd_virmidi_input_open()
188 kfree(vmidi); in snd_virmidi_input_open()
191 vmidi->seq_mode = rdev->seq_mode; in snd_virmidi_input_open()
192 vmidi->client = rdev->client; in snd_virmidi_input_open()
193 vmidi->port = rdev->port; in snd_virmidi_input_open()
194 runtime->private_data = vmidi; in snd_virmidi_input_open()
197 list_add_tail(&vmidi->list, &rdev->filelist); in snd_virmidi_input_open()
200 vmidi->rdev = rdev; in snd_virmidi_input_open()
211 struct snd_virmidi *vmidi; in snd_virmidi_output_open() local
213 vmidi = kzalloc(sizeof(*vmidi), GFP_KERNEL); in snd_virmidi_output_open()
214 if (vmidi == NULL) in snd_virmidi_output_open()
216 vmidi->substream = substream; in snd_virmidi_output_open()
217 if (snd_midi_event_new(MAX_MIDI_EVENT_BUF, &vmidi->parser) < 0) { in snd_virmidi_output_open()
218 kfree(vmidi); in snd_virmidi_output_open()
221 vmidi->seq_mode = rdev->seq_mode; in snd_virmidi_output_open()
222 vmidi->client = rdev->client; in snd_virmidi_output_open()
223 vmidi->port = rdev->port; in snd_virmidi_output_open()
224 snd_virmidi_init_event(vmidi, &vmidi->event); in snd_virmidi_output_open()
225 vmidi->rdev = rdev; in snd_virmidi_output_open()
226 INIT_WORK(&vmidi->output_work, snd_vmidi_output_work); in snd_virmidi_output_open()
227 runtime->private_data = vmidi; in snd_virmidi_output_open()
237 struct snd_virmidi *vmidi = substream->runtime->private_data; in snd_virmidi_input_close() local
241 list_del(&vmidi->list); in snd_virmidi_input_close()
244 snd_midi_event_free(vmidi->parser); in snd_virmidi_input_close()
246 kfree(vmidi); in snd_virmidi_input_close()
255 struct snd_virmidi *vmidi = substream->runtime->private_data; in snd_virmidi_output_close() local
257 WRITE_ONCE(vmidi->trigger, false); /* to be sure */ in snd_virmidi_output_close()
258 cancel_work_sync(&vmidi->output_work); in snd_virmidi_output_close()
259 snd_midi_event_free(vmidi->parser); in snd_virmidi_output_close()
261 kfree(vmidi); in snd_virmidi_output_close()