Lines Matching refs:substream
75 static inline int snd_rawmidi_ready(struct snd_rawmidi_substream *substream) in snd_rawmidi_ready() argument
77 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_ready()
82 static inline int snd_rawmidi_ready_append(struct snd_rawmidi_substream *substream, in snd_rawmidi_ready_append() argument
85 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_ready_append()
88 (!substream->append || runtime->avail >= count); in snd_rawmidi_ready_append()
97 runtime->event(runtime->substream); in snd_rawmidi_input_event_work()
100 static int snd_rawmidi_runtime_create(struct snd_rawmidi_substream *substream) in snd_rawmidi_runtime_create() argument
107 runtime->substream = substream; in snd_rawmidi_runtime_create()
114 if (substream->stream == SNDRV_RAWMIDI_STREAM_INPUT) in snd_rawmidi_runtime_create()
124 substream->runtime = runtime; in snd_rawmidi_runtime_create()
128 static int snd_rawmidi_runtime_free(struct snd_rawmidi_substream *substream) in snd_rawmidi_runtime_free() argument
130 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_runtime_free()
134 substream->runtime = NULL; in snd_rawmidi_runtime_free()
138 static inline void snd_rawmidi_output_trigger(struct snd_rawmidi_substream *substream, int up) in snd_rawmidi_output_trigger() argument
140 if (!substream->opened) in snd_rawmidi_output_trigger()
142 substream->ops->trigger(substream, up); in snd_rawmidi_output_trigger()
145 static void snd_rawmidi_input_trigger(struct snd_rawmidi_substream *substream, int up) in snd_rawmidi_input_trigger() argument
147 if (!substream->opened) in snd_rawmidi_input_trigger()
149 substream->ops->trigger(substream, up); in snd_rawmidi_input_trigger()
151 cancel_work_sync(&substream->runtime->event_work); in snd_rawmidi_input_trigger()
172 int snd_rawmidi_drop_output(struct snd_rawmidi_substream *substream) in snd_rawmidi_drop_output() argument
174 snd_rawmidi_output_trigger(substream, 0); in snd_rawmidi_drop_output()
175 reset_runtime_ptrs(substream->runtime, false); in snd_rawmidi_drop_output()
180 int snd_rawmidi_drain_output(struct snd_rawmidi_substream *substream) in snd_rawmidi_drain_output() argument
184 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_drain_output()
194 rmidi_warn(substream->rmidi, in snd_rawmidi_drain_output()
202 if (substream->ops->drain) in snd_rawmidi_drain_output()
203 substream->ops->drain(substream); in snd_rawmidi_drain_output()
206 snd_rawmidi_drop_output(substream); in snd_rawmidi_drain_output()
212 int snd_rawmidi_drain_input(struct snd_rawmidi_substream *substream) in snd_rawmidi_drain_input() argument
214 snd_rawmidi_input_trigger(substream, 0); in snd_rawmidi_drain_input()
215 reset_runtime_ptrs(substream->runtime, true); in snd_rawmidi_drain_input()
227 struct snd_rawmidi_substream *substream; in assign_substream() local
239 list_for_each_entry(substream, &s->substreams, list) { in assign_substream()
240 if (substream->opened) { in assign_substream()
243 !substream->append) in assign_substream()
246 if (subdevice < 0 || subdevice == substream->number) { in assign_substream()
247 *sub_ret = substream; in assign_substream()
256 struct snd_rawmidi_substream *substream, in open_substream() argument
261 if (substream->use_count == 0) { in open_substream()
262 err = snd_rawmidi_runtime_create(substream); in open_substream()
265 err = substream->ops->open(substream); in open_substream()
267 snd_rawmidi_runtime_free(substream); in open_substream()
270 substream->opened = 1; in open_substream()
271 substream->active_sensing = 0; in open_substream()
273 substream->append = 1; in open_substream()
274 substream->pid = get_pid(task_pid(current)); in open_substream()
275 rmidi->streams[substream->stream].substream_opened++; in open_substream()
277 substream->use_count++; in open_substream()
282 struct snd_rawmidi_substream *substream,
459 struct snd_rawmidi_substream *substream, in close_substream() argument
462 if (--substream->use_count) in close_substream()
466 if (substream->stream == SNDRV_RAWMIDI_STREAM_INPUT) in close_substream()
467 snd_rawmidi_input_trigger(substream, 0); in close_substream()
469 if (substream->active_sensing) { in close_substream()
474 snd_rawmidi_kernel_write(substream, &buf, 1); in close_substream()
476 if (snd_rawmidi_drain_output(substream) == -ERESTARTSYS) in close_substream()
477 snd_rawmidi_output_trigger(substream, 0); in close_substream()
480 substream->ops->close(substream); in close_substream()
481 if (substream->runtime->private_free) in close_substream()
482 substream->runtime->private_free(substream); in close_substream()
483 snd_rawmidi_runtime_free(substream); in close_substream()
484 substream->opened = 0; in close_substream()
485 substream->append = 0; in close_substream()
486 put_pid(substream->pid); in close_substream()
487 substream->pid = NULL; in close_substream()
488 rmidi->streams[substream->stream].substream_opened--; in close_substream()
541 static int snd_rawmidi_info(struct snd_rawmidi_substream *substream, in snd_rawmidi_info() argument
546 if (substream == NULL) in snd_rawmidi_info()
548 rmidi = substream->rmidi; in snd_rawmidi_info()
552 info->subdevice = substream->number; in snd_rawmidi_info()
553 info->stream = substream->stream; in snd_rawmidi_info()
557 strcpy(info->subname, substream->name); in snd_rawmidi_info()
558 info->subdevices_count = substream->pstr->substream_count; in snd_rawmidi_info()
559 info->subdevices_avail = (substream->pstr->substream_count - in snd_rawmidi_info()
560 substream->pstr->substream_opened); in snd_rawmidi_info()
564 static int snd_rawmidi_info_user(struct snd_rawmidi_substream *substream, in snd_rawmidi_info_user() argument
570 err = snd_rawmidi_info(substream, &info); in snd_rawmidi_info_user()
583 struct snd_rawmidi_substream *substream; in __snd_rawmidi_info_select() local
596 list_for_each_entry(substream, &pstr->substreams, list) { in __snd_rawmidi_info_select()
597 if ((unsigned int)substream->number == info->subdevice) in __snd_rawmidi_info_select()
598 return snd_rawmidi_info(substream, info); in __snd_rawmidi_info_select()
660 int snd_rawmidi_output_params(struct snd_rawmidi_substream *substream, in snd_rawmidi_output_params() argument
663 if (substream->append && substream->use_count > 1) in snd_rawmidi_output_params()
665 snd_rawmidi_drain_output(substream); in snd_rawmidi_output_params()
666 substream->active_sensing = !params->no_active_sensing; in snd_rawmidi_output_params()
667 return resize_runtime_buffer(substream->runtime, params, false); in snd_rawmidi_output_params()
671 int snd_rawmidi_input_params(struct snd_rawmidi_substream *substream, in snd_rawmidi_input_params() argument
674 snd_rawmidi_drain_input(substream); in snd_rawmidi_input_params()
675 return resize_runtime_buffer(substream->runtime, params, true); in snd_rawmidi_input_params()
679 static int snd_rawmidi_output_status(struct snd_rawmidi_substream *substream, in snd_rawmidi_output_status() argument
682 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_output_status()
692 static int snd_rawmidi_input_status(struct snd_rawmidi_substream *substream, in snd_rawmidi_input_status() argument
695 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_input_status()
876 int snd_rawmidi_receive(struct snd_rawmidi_substream *substream, in snd_rawmidi_receive() argument
881 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_receive()
883 if (!substream->opened) in snd_rawmidi_receive()
886 rmidi_dbg(substream->rmidi, in snd_rawmidi_receive()
892 substream->bytes++; in snd_rawmidi_receive()
902 substream->bytes += count; in snd_rawmidi_receive()
932 else if (snd_rawmidi_ready(substream)) in snd_rawmidi_receive()
940 static long snd_rawmidi_kernel_read1(struct snd_rawmidi_substream *substream, in snd_rawmidi_kernel_read1() argument
946 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_kernel_read1()
980 long snd_rawmidi_kernel_read(struct snd_rawmidi_substream *substream, in snd_rawmidi_kernel_read() argument
983 snd_rawmidi_input_trigger(substream, 1); in snd_rawmidi_kernel_read()
984 return snd_rawmidi_kernel_read1(substream, NULL/*userbuf*/, buf, count); in snd_rawmidi_kernel_read()
994 struct snd_rawmidi_substream *substream; in snd_rawmidi_read() local
998 substream = rfile->input; in snd_rawmidi_read()
999 if (substream == NULL) in snd_rawmidi_read()
1001 runtime = substream->runtime; in snd_rawmidi_read()
1002 snd_rawmidi_input_trigger(substream, 1); in snd_rawmidi_read()
1006 while (!snd_rawmidi_ready(substream)) { in snd_rawmidi_read()
1028 count1 = snd_rawmidi_kernel_read1(substream, in snd_rawmidi_read()
1047 int snd_rawmidi_transmit_empty(struct snd_rawmidi_substream *substream) in snd_rawmidi_transmit_empty() argument
1049 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_transmit_empty()
1054 rmidi_dbg(substream->rmidi, in snd_rawmidi_transmit_empty()
1073 int __snd_rawmidi_transmit_peek(struct snd_rawmidi_substream *substream, in __snd_rawmidi_transmit_peek() argument
1077 struct snd_rawmidi_runtime *runtime = substream->runtime; in __snd_rawmidi_transmit_peek()
1080 rmidi_dbg(substream->rmidi, in __snd_rawmidi_transmit_peek()
1127 int snd_rawmidi_transmit_peek(struct snd_rawmidi_substream *substream, in snd_rawmidi_transmit_peek() argument
1130 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_transmit_peek()
1135 result = __snd_rawmidi_transmit_peek(substream, buffer, count); in snd_rawmidi_transmit_peek()
1148 int __snd_rawmidi_transmit_ack(struct snd_rawmidi_substream *substream, int count) in __snd_rawmidi_transmit_ack() argument
1150 struct snd_rawmidi_runtime *runtime = substream->runtime; in __snd_rawmidi_transmit_ack()
1153 rmidi_dbg(substream->rmidi, in __snd_rawmidi_transmit_ack()
1161 substream->bytes += count; in __snd_rawmidi_transmit_ack()
1163 if (runtime->drain || snd_rawmidi_ready(substream)) in __snd_rawmidi_transmit_ack()
1181 int snd_rawmidi_transmit_ack(struct snd_rawmidi_substream *substream, int count) in snd_rawmidi_transmit_ack() argument
1183 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_transmit_ack()
1188 result = __snd_rawmidi_transmit_ack(substream, count); in snd_rawmidi_transmit_ack()
1204 int snd_rawmidi_transmit(struct snd_rawmidi_substream *substream, in snd_rawmidi_transmit() argument
1207 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_transmit()
1212 if (!substream->opened) in snd_rawmidi_transmit()
1215 count = __snd_rawmidi_transmit_peek(substream, buffer, count); in snd_rawmidi_transmit()
1219 result = __snd_rawmidi_transmit_ack(substream, count); in snd_rawmidi_transmit()
1232 int snd_rawmidi_proceed(struct snd_rawmidi_substream *substream) in snd_rawmidi_proceed() argument
1234 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_proceed()
1241 __snd_rawmidi_transmit_ack(substream, count); in snd_rawmidi_proceed()
1248 static long snd_rawmidi_kernel_write1(struct snd_rawmidi_substream *substream, in snd_rawmidi_kernel_write1() argument
1255 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_kernel_write1()
1265 if (substream->append) { in snd_rawmidi_kernel_write1()
1304 snd_rawmidi_output_trigger(substream, 1); in snd_rawmidi_kernel_write1()
1308 long snd_rawmidi_kernel_write(struct snd_rawmidi_substream *substream, in snd_rawmidi_kernel_write() argument
1311 return snd_rawmidi_kernel_write1(substream, NULL, buf, count); in snd_rawmidi_kernel_write()
1322 struct snd_rawmidi_substream *substream; in snd_rawmidi_write() local
1325 substream = rfile->output; in snd_rawmidi_write()
1326 runtime = substream->runtime; in snd_rawmidi_write()
1328 if (substream->append && count > runtime->buffer_size) in snd_rawmidi_write()
1333 while (!snd_rawmidi_ready_append(substream, count)) { in snd_rawmidi_write()
1355 count1 = snd_rawmidi_kernel_write1(substream, buf, NULL, count); in snd_rawmidi_write()
1430 struct snd_rawmidi_substream *substream; in snd_rawmidi_proc_info_read() local
1437 list_for_each_entry(substream, in snd_rawmidi_proc_info_read()
1443 substream->number, in snd_rawmidi_proc_info_read()
1444 (unsigned long) substream->bytes); in snd_rawmidi_proc_info_read()
1445 if (substream->opened) { in snd_rawmidi_proc_info_read()
1448 pid_vnr(substream->pid)); in snd_rawmidi_proc_info_read()
1449 runtime = substream->runtime; in snd_rawmidi_proc_info_read()
1461 list_for_each_entry(substream, in snd_rawmidi_proc_info_read()
1467 substream->number, in snd_rawmidi_proc_info_read()
1468 (unsigned long) substream->bytes); in snd_rawmidi_proc_info_read()
1469 if (substream->opened) { in snd_rawmidi_proc_info_read()
1472 pid_vnr(substream->pid)); in snd_rawmidi_proc_info_read()
1473 runtime = substream->runtime; in snd_rawmidi_proc_info_read()
1508 struct snd_rawmidi_substream *substream; in snd_rawmidi_alloc_substreams() local
1512 substream = kzalloc(sizeof(*substream), GFP_KERNEL); in snd_rawmidi_alloc_substreams()
1513 if (!substream) in snd_rawmidi_alloc_substreams()
1515 substream->stream = direction; in snd_rawmidi_alloc_substreams()
1516 substream->number = idx; in snd_rawmidi_alloc_substreams()
1517 substream->rmidi = rmidi; in snd_rawmidi_alloc_substreams()
1518 substream->pstr = stream; in snd_rawmidi_alloc_substreams()
1519 list_add_tail(&substream->list, &stream->substreams); in snd_rawmidi_alloc_substreams()
1605 struct snd_rawmidi_substream *substream; in snd_rawmidi_free_substreams() local
1608 substream = list_entry(stream->substreams.next, struct snd_rawmidi_substream, list); in snd_rawmidi_free_substreams()
1609 list_del(&substream->list); in snd_rawmidi_free_substreams()
1610 kfree(substream); in snd_rawmidi_free_substreams()
1789 struct snd_rawmidi_substream *substream; in snd_rawmidi_set_ops() local
1791 list_for_each_entry(substream, &rmidi->streams[stream].substreams, list) in snd_rawmidi_set_ops()
1792 substream->ops = ops; in snd_rawmidi_set_ops()