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()
709 int snd_rawmidi_output_params(struct snd_rawmidi_substream *substream, in snd_rawmidi_output_params() argument
712 if (substream->append && substream->use_count > 1) in snd_rawmidi_output_params()
714 snd_rawmidi_drain_output(substream); in snd_rawmidi_output_params()
715 substream->active_sensing = !params->no_active_sensing; in snd_rawmidi_output_params()
716 return resize_runtime_buffer(substream->runtime, params, false); in snd_rawmidi_output_params()
720 int snd_rawmidi_input_params(struct snd_rawmidi_substream *substream, in snd_rawmidi_input_params() argument
723 snd_rawmidi_drain_input(substream); in snd_rawmidi_input_params()
724 return resize_runtime_buffer(substream->runtime, params, true); in snd_rawmidi_input_params()
728 static int snd_rawmidi_output_status(struct snd_rawmidi_substream *substream, in snd_rawmidi_output_status() argument
731 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_output_status()
741 static int snd_rawmidi_input_status(struct snd_rawmidi_substream *substream, in snd_rawmidi_input_status() argument
744 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_input_status()
976 int snd_rawmidi_receive(struct snd_rawmidi_substream *substream, in snd_rawmidi_receive() argument
981 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_receive()
983 if (!substream->opened) in snd_rawmidi_receive()
986 rmidi_dbg(substream->rmidi, in snd_rawmidi_receive()
992 substream->bytes++; in snd_rawmidi_receive()
1002 substream->bytes += count; in snd_rawmidi_receive()
1040 static long snd_rawmidi_kernel_read1(struct snd_rawmidi_substream *substream, in snd_rawmidi_kernel_read1() argument
1046 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_kernel_read1()
1085 long snd_rawmidi_kernel_read(struct snd_rawmidi_substream *substream, in snd_rawmidi_kernel_read() argument
1088 snd_rawmidi_input_trigger(substream, 1); in snd_rawmidi_kernel_read()
1089 return snd_rawmidi_kernel_read1(substream, NULL/*userbuf*/, buf, count); in snd_rawmidi_kernel_read()
1099 struct snd_rawmidi_substream *substream; in snd_rawmidi_read() local
1103 substream = rfile->input; in snd_rawmidi_read()
1104 if (substream == NULL) in snd_rawmidi_read()
1106 runtime = substream->runtime; in snd_rawmidi_read()
1107 snd_rawmidi_input_trigger(substream, 1); in snd_rawmidi_read()
1135 count1 = snd_rawmidi_kernel_read1(substream, in snd_rawmidi_read()
1154 int snd_rawmidi_transmit_empty(struct snd_rawmidi_substream *substream) in snd_rawmidi_transmit_empty() argument
1156 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_transmit_empty()
1161 rmidi_dbg(substream->rmidi, in snd_rawmidi_transmit_empty()
1180 int __snd_rawmidi_transmit_peek(struct snd_rawmidi_substream *substream, in __snd_rawmidi_transmit_peek() argument
1184 struct snd_rawmidi_runtime *runtime = substream->runtime; in __snd_rawmidi_transmit_peek()
1187 rmidi_dbg(substream->rmidi, in __snd_rawmidi_transmit_peek()
1234 int snd_rawmidi_transmit_peek(struct snd_rawmidi_substream *substream, in snd_rawmidi_transmit_peek() argument
1237 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_transmit_peek()
1242 result = __snd_rawmidi_transmit_peek(substream, buffer, count); in snd_rawmidi_transmit_peek()
1255 int __snd_rawmidi_transmit_ack(struct snd_rawmidi_substream *substream, int count) in __snd_rawmidi_transmit_ack() argument
1257 struct snd_rawmidi_runtime *runtime = substream->runtime; in __snd_rawmidi_transmit_ack()
1260 rmidi_dbg(substream->rmidi, in __snd_rawmidi_transmit_ack()
1268 substream->bytes += count; in __snd_rawmidi_transmit_ack()
1288 int snd_rawmidi_transmit_ack(struct snd_rawmidi_substream *substream, int count) in snd_rawmidi_transmit_ack() argument
1290 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_transmit_ack()
1295 result = __snd_rawmidi_transmit_ack(substream, count); in snd_rawmidi_transmit_ack()
1311 int snd_rawmidi_transmit(struct snd_rawmidi_substream *substream, in snd_rawmidi_transmit() argument
1314 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_transmit()
1319 if (!substream->opened) in snd_rawmidi_transmit()
1322 count = __snd_rawmidi_transmit_peek(substream, buffer, count); in snd_rawmidi_transmit()
1326 result = __snd_rawmidi_transmit_ack(substream, count); in snd_rawmidi_transmit()
1339 int snd_rawmidi_proceed(struct snd_rawmidi_substream *substream) in snd_rawmidi_proceed() argument
1341 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_proceed()
1348 __snd_rawmidi_transmit_ack(substream, count); in snd_rawmidi_proceed()
1355 static long snd_rawmidi_kernel_write1(struct snd_rawmidi_substream *substream, in snd_rawmidi_kernel_write1() argument
1362 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_kernel_write1()
1372 if (substream->append) { in snd_rawmidi_kernel_write1()
1413 snd_rawmidi_output_trigger(substream, 1); in snd_rawmidi_kernel_write1()
1417 long snd_rawmidi_kernel_write(struct snd_rawmidi_substream *substream, in snd_rawmidi_kernel_write() argument
1420 return snd_rawmidi_kernel_write1(substream, NULL, buf, count); in snd_rawmidi_kernel_write()
1431 struct snd_rawmidi_substream *substream; in snd_rawmidi_write() local
1434 substream = rfile->output; in snd_rawmidi_write()
1435 runtime = substream->runtime; in snd_rawmidi_write()
1437 if (substream->append && count > runtime->buffer_size) in snd_rawmidi_write()
1442 while (!snd_rawmidi_ready_append(substream, count)) { in snd_rawmidi_write()
1466 count1 = snd_rawmidi_kernel_write1(substream, buf, NULL, count); in snd_rawmidi_write()
1541 struct snd_rawmidi_substream *substream; in snd_rawmidi_proc_info_read() local
1549 list_for_each_entry(substream, in snd_rawmidi_proc_info_read()
1555 substream->number, in snd_rawmidi_proc_info_read()
1556 (unsigned long) substream->bytes); in snd_rawmidi_proc_info_read()
1557 if (substream->opened) { in snd_rawmidi_proc_info_read()
1560 pid_vnr(substream->pid)); in snd_rawmidi_proc_info_read()
1561 runtime = substream->runtime; in snd_rawmidi_proc_info_read()
1576 list_for_each_entry(substream, in snd_rawmidi_proc_info_read()
1582 substream->number, in snd_rawmidi_proc_info_read()
1583 (unsigned long) substream->bytes); in snd_rawmidi_proc_info_read()
1584 if (substream->opened) { in snd_rawmidi_proc_info_read()
1587 pid_vnr(substream->pid)); in snd_rawmidi_proc_info_read()
1588 runtime = substream->runtime; in snd_rawmidi_proc_info_read()
1626 struct snd_rawmidi_substream *substream; in snd_rawmidi_alloc_substreams() local
1630 substream = kzalloc(sizeof(*substream), GFP_KERNEL); in snd_rawmidi_alloc_substreams()
1631 if (!substream) in snd_rawmidi_alloc_substreams()
1633 substream->stream = direction; in snd_rawmidi_alloc_substreams()
1634 substream->number = idx; in snd_rawmidi_alloc_substreams()
1635 substream->rmidi = rmidi; in snd_rawmidi_alloc_substreams()
1636 substream->pstr = stream; in snd_rawmidi_alloc_substreams()
1637 list_add_tail(&substream->list, &stream->substreams); in snd_rawmidi_alloc_substreams()
1723 struct snd_rawmidi_substream *substream; in snd_rawmidi_free_substreams() local
1726 substream = list_entry(stream->substreams.next, struct snd_rawmidi_substream, list); in snd_rawmidi_free_substreams()
1727 list_del(&substream->list); in snd_rawmidi_free_substreams()
1728 kfree(substream); in snd_rawmidi_free_substreams()
1905 struct snd_rawmidi_substream *substream; in snd_rawmidi_set_ops() local
1907 list_for_each_entry(substream, &rmidi->streams[stream].substreams, list) in snd_rawmidi_set_ops()
1908 substream->ops = ops; in snd_rawmidi_set_ops()