Lines Matching refs:substream

103 static bool snd_rawmidi_ready(struct snd_rawmidi_substream *substream)  in snd_rawmidi_ready()  argument
105 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_ready()
115 static inline int snd_rawmidi_ready_append(struct snd_rawmidi_substream *substream, in snd_rawmidi_ready_append() argument
118 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_ready_append()
121 (!substream->append || runtime->avail >= count); in snd_rawmidi_ready_append()
130 runtime->event(runtime->substream); in snd_rawmidi_input_event_work()
144 static int snd_rawmidi_runtime_create(struct snd_rawmidi_substream *substream) in snd_rawmidi_runtime_create() argument
151 runtime->substream = substream; in snd_rawmidi_runtime_create()
158 if (substream->stream == SNDRV_RAWMIDI_STREAM_INPUT) in snd_rawmidi_runtime_create()
168 substream->runtime = runtime; in snd_rawmidi_runtime_create()
172 static int snd_rawmidi_runtime_free(struct snd_rawmidi_substream *substream) in snd_rawmidi_runtime_free() argument
174 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_runtime_free()
178 substream->runtime = NULL; in snd_rawmidi_runtime_free()
182 static inline void snd_rawmidi_output_trigger(struct snd_rawmidi_substream *substream, int up) in snd_rawmidi_output_trigger() argument
184 if (!substream->opened) in snd_rawmidi_output_trigger()
186 substream->ops->trigger(substream, up); in snd_rawmidi_output_trigger()
189 static void snd_rawmidi_input_trigger(struct snd_rawmidi_substream *substream, int up) in snd_rawmidi_input_trigger() argument
191 if (!substream->opened) in snd_rawmidi_input_trigger()
193 substream->ops->trigger(substream, up); in snd_rawmidi_input_trigger()
195 cancel_work_sync(&substream->runtime->event_work); in snd_rawmidi_input_trigger()
216 int snd_rawmidi_drop_output(struct snd_rawmidi_substream *substream) in snd_rawmidi_drop_output() argument
218 snd_rawmidi_output_trigger(substream, 0); in snd_rawmidi_drop_output()
219 reset_runtime_ptrs(substream->runtime, false); in snd_rawmidi_drop_output()
224 int snd_rawmidi_drain_output(struct snd_rawmidi_substream *substream) in snd_rawmidi_drain_output() argument
228 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_drain_output()
238 rmidi_warn(substream->rmidi, in snd_rawmidi_drain_output()
246 if (substream->ops->drain) in snd_rawmidi_drain_output()
247 substream->ops->drain(substream); in snd_rawmidi_drain_output()
250 snd_rawmidi_drop_output(substream); in snd_rawmidi_drain_output()
256 int snd_rawmidi_drain_input(struct snd_rawmidi_substream *substream) in snd_rawmidi_drain_input() argument
258 snd_rawmidi_input_trigger(substream, 0); in snd_rawmidi_drain_input()
259 reset_runtime_ptrs(substream->runtime, true); in snd_rawmidi_drain_input()
271 struct snd_rawmidi_substream *substream; in assign_substream() local
283 list_for_each_entry(substream, &s->substreams, list) { in assign_substream()
284 if (substream->opened) { in assign_substream()
287 !substream->append) in assign_substream()
290 if (subdevice < 0 || subdevice == substream->number) { in assign_substream()
291 *sub_ret = substream; in assign_substream()
300 struct snd_rawmidi_substream *substream, in open_substream() argument
305 if (substream->use_count == 0) { in open_substream()
306 err = snd_rawmidi_runtime_create(substream); in open_substream()
309 err = substream->ops->open(substream); in open_substream()
311 snd_rawmidi_runtime_free(substream); in open_substream()
314 substream->opened = 1; in open_substream()
315 substream->active_sensing = 0; in open_substream()
317 substream->append = 1; in open_substream()
318 substream->pid = get_pid(task_pid(current)); in open_substream()
319 rmidi->streams[substream->stream].substream_opened++; in open_substream()
321 substream->use_count++; in open_substream()
326 struct snd_rawmidi_substream *substream,
503 struct snd_rawmidi_substream *substream, in close_substream() argument
506 if (--substream->use_count) in close_substream()
510 if (substream->stream == SNDRV_RAWMIDI_STREAM_INPUT) in close_substream()
511 snd_rawmidi_input_trigger(substream, 0); in close_substream()
513 if (substream->active_sensing) { in close_substream()
518 snd_rawmidi_kernel_write(substream, &buf, 1); in close_substream()
520 if (snd_rawmidi_drain_output(substream) == -ERESTARTSYS) in close_substream()
521 snd_rawmidi_output_trigger(substream, 0); in close_substream()
524 substream->ops->close(substream); in close_substream()
525 if (substream->runtime->private_free) in close_substream()
526 substream->runtime->private_free(substream); in close_substream()
527 snd_rawmidi_runtime_free(substream); in close_substream()
528 substream->opened = 0; in close_substream()
529 substream->append = 0; in close_substream()
530 put_pid(substream->pid); in close_substream()
531 substream->pid = NULL; in close_substream()
532 rmidi->streams[substream->stream].substream_opened--; in close_substream()
585 static int snd_rawmidi_info(struct snd_rawmidi_substream *substream, in snd_rawmidi_info() argument
590 if (substream == NULL) in snd_rawmidi_info()
592 rmidi = substream->rmidi; in snd_rawmidi_info()
596 info->subdevice = substream->number; in snd_rawmidi_info()
597 info->stream = substream->stream; in snd_rawmidi_info()
601 strcpy(info->subname, substream->name); in snd_rawmidi_info()
602 info->subdevices_count = substream->pstr->substream_count; in snd_rawmidi_info()
603 info->subdevices_avail = (substream->pstr->substream_count - in snd_rawmidi_info()
604 substream->pstr->substream_opened); in snd_rawmidi_info()
608 static int snd_rawmidi_info_user(struct snd_rawmidi_substream *substream, in snd_rawmidi_info_user() argument
614 err = snd_rawmidi_info(substream, &info); in snd_rawmidi_info_user()
627 struct snd_rawmidi_substream *substream; in __snd_rawmidi_info_select() local
640 list_for_each_entry(substream, &pstr->substreams, list) { in __snd_rawmidi_info_select()
641 if ((unsigned int)substream->number == info->subdevice) in __snd_rawmidi_info_select()
642 return snd_rawmidi_info(substream, info); in __snd_rawmidi_info_select()
712 int snd_rawmidi_output_params(struct snd_rawmidi_substream *substream, in snd_rawmidi_output_params() argument
715 if (substream->append && substream->use_count > 1) in snd_rawmidi_output_params()
717 snd_rawmidi_drain_output(substream); in snd_rawmidi_output_params()
718 substream->active_sensing = !params->no_active_sensing; in snd_rawmidi_output_params()
719 return resize_runtime_buffer(substream->runtime, params, false); in snd_rawmidi_output_params()
723 int snd_rawmidi_input_params(struct snd_rawmidi_substream *substream, in snd_rawmidi_input_params() argument
736 snd_rawmidi_drain_input(substream); in snd_rawmidi_input_params()
737 err = resize_runtime_buffer(substream->runtime, params, true); in snd_rawmidi_input_params()
741 substream->framing = framing; in snd_rawmidi_input_params()
742 substream->clock_type = clock_type; in snd_rawmidi_input_params()
747 static int snd_rawmidi_output_status(struct snd_rawmidi_substream *substream, in snd_rawmidi_output_status() argument
750 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_output_status()
760 static int snd_rawmidi_input_status(struct snd_rawmidi_substream *substream, in snd_rawmidi_input_status() argument
763 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_input_status()
994 static int receive_with_tstamp_framing(struct snd_rawmidi_substream *substream, in receive_with_tstamp_framing() argument
997 struct snd_rawmidi_runtime *runtime = substream->runtime; in receive_with_tstamp_framing()
1032 static struct timespec64 get_framing_tstamp(struct snd_rawmidi_substream *substream) in get_framing_tstamp() argument
1036 switch (substream->clock_type) { in get_framing_tstamp()
1060 int snd_rawmidi_receive(struct snd_rawmidi_substream *substream, in snd_rawmidi_receive() argument
1064 struct timespec64 ts64 = get_framing_tstamp(substream); in snd_rawmidi_receive()
1066 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_receive()
1068 if (!substream->opened) in snd_rawmidi_receive()
1071 rmidi_dbg(substream->rmidi, in snd_rawmidi_receive()
1077 if (substream->framing == SNDRV_RAWMIDI_MODE_FRAMING_TSTAMP) { in snd_rawmidi_receive()
1078 result = receive_with_tstamp_framing(substream, buffer, count, &ts64); in snd_rawmidi_receive()
1080 substream->bytes++; in snd_rawmidi_receive()
1090 substream->bytes += count; in snd_rawmidi_receive()
1128 static long snd_rawmidi_kernel_read1(struct snd_rawmidi_substream *substream, in snd_rawmidi_kernel_read1() argument
1134 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_kernel_read1()
1173 long snd_rawmidi_kernel_read(struct snd_rawmidi_substream *substream, in snd_rawmidi_kernel_read() argument
1176 snd_rawmidi_input_trigger(substream, 1); in snd_rawmidi_kernel_read()
1177 return snd_rawmidi_kernel_read1(substream, NULL/*userbuf*/, buf, count); in snd_rawmidi_kernel_read()
1187 struct snd_rawmidi_substream *substream; in snd_rawmidi_read() local
1191 substream = rfile->input; in snd_rawmidi_read()
1192 if (substream == NULL) in snd_rawmidi_read()
1194 runtime = substream->runtime; in snd_rawmidi_read()
1195 snd_rawmidi_input_trigger(substream, 1); in snd_rawmidi_read()
1223 count1 = snd_rawmidi_kernel_read1(substream, in snd_rawmidi_read()
1242 int snd_rawmidi_transmit_empty(struct snd_rawmidi_substream *substream) in snd_rawmidi_transmit_empty() argument
1244 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_transmit_empty()
1249 rmidi_dbg(substream->rmidi, in snd_rawmidi_transmit_empty()
1268 int __snd_rawmidi_transmit_peek(struct snd_rawmidi_substream *substream, in __snd_rawmidi_transmit_peek() argument
1272 struct snd_rawmidi_runtime *runtime = substream->runtime; in __snd_rawmidi_transmit_peek()
1275 rmidi_dbg(substream->rmidi, in __snd_rawmidi_transmit_peek()
1322 int snd_rawmidi_transmit_peek(struct snd_rawmidi_substream *substream, in snd_rawmidi_transmit_peek() argument
1325 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_transmit_peek()
1330 result = __snd_rawmidi_transmit_peek(substream, buffer, count); in snd_rawmidi_transmit_peek()
1343 int __snd_rawmidi_transmit_ack(struct snd_rawmidi_substream *substream, int count) in __snd_rawmidi_transmit_ack() argument
1345 struct snd_rawmidi_runtime *runtime = substream->runtime; in __snd_rawmidi_transmit_ack()
1348 rmidi_dbg(substream->rmidi, in __snd_rawmidi_transmit_ack()
1356 substream->bytes += count; in __snd_rawmidi_transmit_ack()
1376 int snd_rawmidi_transmit_ack(struct snd_rawmidi_substream *substream, int count) in snd_rawmidi_transmit_ack() argument
1378 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_transmit_ack()
1383 result = __snd_rawmidi_transmit_ack(substream, count); in snd_rawmidi_transmit_ack()
1399 int snd_rawmidi_transmit(struct snd_rawmidi_substream *substream, in snd_rawmidi_transmit() argument
1402 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_transmit()
1407 if (!substream->opened) in snd_rawmidi_transmit()
1410 count = __snd_rawmidi_transmit_peek(substream, buffer, count); in snd_rawmidi_transmit()
1414 result = __snd_rawmidi_transmit_ack(substream, count); in snd_rawmidi_transmit()
1427 int snd_rawmidi_proceed(struct snd_rawmidi_substream *substream) in snd_rawmidi_proceed() argument
1429 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_proceed()
1436 __snd_rawmidi_transmit_ack(substream, count); in snd_rawmidi_proceed()
1443 static long snd_rawmidi_kernel_write1(struct snd_rawmidi_substream *substream, in snd_rawmidi_kernel_write1() argument
1450 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_kernel_write1()
1460 if (substream->append) { in snd_rawmidi_kernel_write1()
1501 snd_rawmidi_output_trigger(substream, 1); in snd_rawmidi_kernel_write1()
1505 long snd_rawmidi_kernel_write(struct snd_rawmidi_substream *substream, in snd_rawmidi_kernel_write() argument
1508 return snd_rawmidi_kernel_write1(substream, NULL, buf, count); in snd_rawmidi_kernel_write()
1519 struct snd_rawmidi_substream *substream; in snd_rawmidi_write() local
1522 substream = rfile->output; in snd_rawmidi_write()
1523 runtime = substream->runtime; in snd_rawmidi_write()
1525 if (substream->append && count > runtime->buffer_size) in snd_rawmidi_write()
1530 while (!snd_rawmidi_ready_append(substream, count)) { in snd_rawmidi_write()
1554 count1 = snd_rawmidi_kernel_write1(substream, buf, NULL, count); in snd_rawmidi_write()
1629 struct snd_rawmidi_substream *substream; in snd_rawmidi_proc_info_read() local
1639 list_for_each_entry(substream, in snd_rawmidi_proc_info_read()
1645 substream->number, in snd_rawmidi_proc_info_read()
1646 (unsigned long) substream->bytes); in snd_rawmidi_proc_info_read()
1647 if (substream->opened) { in snd_rawmidi_proc_info_read()
1650 pid_vnr(substream->pid)); in snd_rawmidi_proc_info_read()
1651 runtime = substream->runtime; in snd_rawmidi_proc_info_read()
1666 list_for_each_entry(substream, in snd_rawmidi_proc_info_read()
1672 substream->number, in snd_rawmidi_proc_info_read()
1673 (unsigned long) substream->bytes); in snd_rawmidi_proc_info_read()
1674 if (substream->opened) { in snd_rawmidi_proc_info_read()
1677 pid_vnr(substream->pid)); in snd_rawmidi_proc_info_read()
1678 runtime = substream->runtime; in snd_rawmidi_proc_info_read()
1689 if (substream->framing == SNDRV_RAWMIDI_MODE_FRAMING_TSTAMP) { in snd_rawmidi_proc_info_read()
1690 clock_type = substream->clock_type >> SNDRV_RAWMIDI_MODE_CLOCK_SHIFT; in snd_rawmidi_proc_info_read()
1724 struct snd_rawmidi_substream *substream; in snd_rawmidi_alloc_substreams() local
1728 substream = kzalloc(sizeof(*substream), GFP_KERNEL); in snd_rawmidi_alloc_substreams()
1729 if (!substream) in snd_rawmidi_alloc_substreams()
1731 substream->stream = direction; in snd_rawmidi_alloc_substreams()
1732 substream->number = idx; in snd_rawmidi_alloc_substreams()
1733 substream->rmidi = rmidi; in snd_rawmidi_alloc_substreams()
1734 substream->pstr = stream; in snd_rawmidi_alloc_substreams()
1735 list_add_tail(&substream->list, &stream->substreams); in snd_rawmidi_alloc_substreams()
1821 struct snd_rawmidi_substream *substream; in snd_rawmidi_free_substreams() local
1824 substream = list_entry(stream->substreams.next, struct snd_rawmidi_substream, list); in snd_rawmidi_free_substreams()
1825 list_del(&substream->list); in snd_rawmidi_free_substreams()
1826 kfree(substream); in snd_rawmidi_free_substreams()
2005 struct snd_rawmidi_substream *substream; in snd_rawmidi_set_ops() local
2007 list_for_each_entry(substream, &rmidi->streams[stream].substreams, list) in snd_rawmidi_set_ops()
2008 substream->ops = ops; in snd_rawmidi_set_ops()