Lines Matching refs:substream

89 static inline int snd_rawmidi_ready(struct snd_rawmidi_substream *substream)  in snd_rawmidi_ready()  argument
91 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_ready()
96 static inline int snd_rawmidi_ready_append(struct snd_rawmidi_substream *substream, in snd_rawmidi_ready_append() argument
99 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_ready_append()
102 (!substream->append || runtime->avail >= count); in snd_rawmidi_ready_append()
111 runtime->event(runtime->substream); in snd_rawmidi_input_event_work()
114 static int snd_rawmidi_runtime_create(struct snd_rawmidi_substream *substream) in snd_rawmidi_runtime_create() argument
121 runtime->substream = substream; in snd_rawmidi_runtime_create()
128 if (substream->stream == SNDRV_RAWMIDI_STREAM_INPUT) in snd_rawmidi_runtime_create()
138 substream->runtime = runtime; in snd_rawmidi_runtime_create()
142 static int snd_rawmidi_runtime_free(struct snd_rawmidi_substream *substream) in snd_rawmidi_runtime_free() argument
144 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_runtime_free()
148 substream->runtime = NULL; in snd_rawmidi_runtime_free()
152 static inline void snd_rawmidi_output_trigger(struct snd_rawmidi_substream *substream, int up) in snd_rawmidi_output_trigger() argument
154 if (!substream->opened) in snd_rawmidi_output_trigger()
156 substream->ops->trigger(substream, up); in snd_rawmidi_output_trigger()
159 static void snd_rawmidi_input_trigger(struct snd_rawmidi_substream *substream, int up) in snd_rawmidi_input_trigger() argument
161 if (!substream->opened) in snd_rawmidi_input_trigger()
163 substream->ops->trigger(substream, up); in snd_rawmidi_input_trigger()
165 cancel_work_sync(&substream->runtime->event_work); in snd_rawmidi_input_trigger()
186 int snd_rawmidi_drop_output(struct snd_rawmidi_substream *substream) in snd_rawmidi_drop_output() argument
188 snd_rawmidi_output_trigger(substream, 0); in snd_rawmidi_drop_output()
189 reset_runtime_ptrs(substream->runtime, false); in snd_rawmidi_drop_output()
194 int snd_rawmidi_drain_output(struct snd_rawmidi_substream *substream) in snd_rawmidi_drain_output() argument
198 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_drain_output()
208 rmidi_warn(substream->rmidi, in snd_rawmidi_drain_output()
216 if (substream->ops->drain) in snd_rawmidi_drain_output()
217 substream->ops->drain(substream); in snd_rawmidi_drain_output()
220 snd_rawmidi_drop_output(substream); in snd_rawmidi_drain_output()
226 int snd_rawmidi_drain_input(struct snd_rawmidi_substream *substream) in snd_rawmidi_drain_input() argument
228 snd_rawmidi_input_trigger(substream, 0); in snd_rawmidi_drain_input()
229 reset_runtime_ptrs(substream->runtime, true); in snd_rawmidi_drain_input()
241 struct snd_rawmidi_substream *substream; in assign_substream() local
253 list_for_each_entry(substream, &s->substreams, list) { in assign_substream()
254 if (substream->opened) { in assign_substream()
257 !substream->append) in assign_substream()
260 if (subdevice < 0 || subdevice == substream->number) { in assign_substream()
261 *sub_ret = substream; in assign_substream()
270 struct snd_rawmidi_substream *substream, in open_substream() argument
275 if (substream->use_count == 0) { in open_substream()
276 err = snd_rawmidi_runtime_create(substream); in open_substream()
279 err = substream->ops->open(substream); in open_substream()
281 snd_rawmidi_runtime_free(substream); in open_substream()
284 substream->opened = 1; in open_substream()
285 substream->active_sensing = 0; in open_substream()
287 substream->append = 1; in open_substream()
288 substream->pid = get_pid(task_pid(current)); in open_substream()
289 rmidi->streams[substream->stream].substream_opened++; in open_substream()
291 substream->use_count++; in open_substream()
296 struct snd_rawmidi_substream *substream,
473 struct snd_rawmidi_substream *substream, in close_substream() argument
476 if (--substream->use_count) in close_substream()
480 if (substream->stream == SNDRV_RAWMIDI_STREAM_INPUT) in close_substream()
481 snd_rawmidi_input_trigger(substream, 0); in close_substream()
483 if (substream->active_sensing) { in close_substream()
488 snd_rawmidi_kernel_write(substream, &buf, 1); in close_substream()
490 if (snd_rawmidi_drain_output(substream) == -ERESTARTSYS) in close_substream()
491 snd_rawmidi_output_trigger(substream, 0); in close_substream()
494 substream->ops->close(substream); in close_substream()
495 if (substream->runtime->private_free) in close_substream()
496 substream->runtime->private_free(substream); in close_substream()
497 snd_rawmidi_runtime_free(substream); in close_substream()
498 substream->opened = 0; in close_substream()
499 substream->append = 0; in close_substream()
500 put_pid(substream->pid); in close_substream()
501 substream->pid = NULL; in close_substream()
502 rmidi->streams[substream->stream].substream_opened--; in close_substream()
555 static int snd_rawmidi_info(struct snd_rawmidi_substream *substream, in snd_rawmidi_info() argument
560 if (substream == NULL) in snd_rawmidi_info()
562 rmidi = substream->rmidi; in snd_rawmidi_info()
566 info->subdevice = substream->number; in snd_rawmidi_info()
567 info->stream = substream->stream; in snd_rawmidi_info()
571 strcpy(info->subname, substream->name); in snd_rawmidi_info()
572 info->subdevices_count = substream->pstr->substream_count; in snd_rawmidi_info()
573 info->subdevices_avail = (substream->pstr->substream_count - in snd_rawmidi_info()
574 substream->pstr->substream_opened); in snd_rawmidi_info()
578 static int snd_rawmidi_info_user(struct snd_rawmidi_substream *substream, in snd_rawmidi_info_user() argument
584 err = snd_rawmidi_info(substream, &info); in snd_rawmidi_info_user()
597 struct snd_rawmidi_substream *substream; in __snd_rawmidi_info_select() local
609 list_for_each_entry(substream, &pstr->substreams, list) { in __snd_rawmidi_info_select()
610 if ((unsigned int)substream->number == info->subdevice) in __snd_rawmidi_info_select()
611 return snd_rawmidi_info(substream, info); in __snd_rawmidi_info_select()
673 int snd_rawmidi_output_params(struct snd_rawmidi_substream *substream, in snd_rawmidi_output_params() argument
676 if (substream->append && substream->use_count > 1) in snd_rawmidi_output_params()
678 snd_rawmidi_drain_output(substream); in snd_rawmidi_output_params()
679 substream->active_sensing = !params->no_active_sensing; in snd_rawmidi_output_params()
680 return resize_runtime_buffer(substream->runtime, params, false); in snd_rawmidi_output_params()
684 int snd_rawmidi_input_params(struct snd_rawmidi_substream *substream, in snd_rawmidi_input_params() argument
687 snd_rawmidi_drain_input(substream); in snd_rawmidi_input_params()
688 return resize_runtime_buffer(substream->runtime, params, true); in snd_rawmidi_input_params()
692 static int snd_rawmidi_output_status(struct snd_rawmidi_substream *substream, in snd_rawmidi_output_status() argument
695 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_output_status()
705 static int snd_rawmidi_input_status(struct snd_rawmidi_substream *substream, in snd_rawmidi_input_status() argument
708 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_input_status()
889 int snd_rawmidi_receive(struct snd_rawmidi_substream *substream, in snd_rawmidi_receive() argument
894 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_receive()
896 if (!substream->opened) in snd_rawmidi_receive()
899 rmidi_dbg(substream->rmidi, in snd_rawmidi_receive()
905 substream->bytes++; in snd_rawmidi_receive()
915 substream->bytes += count; in snd_rawmidi_receive()
945 else if (snd_rawmidi_ready(substream)) in snd_rawmidi_receive()
953 static long snd_rawmidi_kernel_read1(struct snd_rawmidi_substream *substream, in snd_rawmidi_kernel_read1() argument
959 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_kernel_read1()
993 long snd_rawmidi_kernel_read(struct snd_rawmidi_substream *substream, in snd_rawmidi_kernel_read() argument
996 snd_rawmidi_input_trigger(substream, 1); in snd_rawmidi_kernel_read()
997 return snd_rawmidi_kernel_read1(substream, NULL/*userbuf*/, buf, count); in snd_rawmidi_kernel_read()
1007 struct snd_rawmidi_substream *substream; in snd_rawmidi_read() local
1011 substream = rfile->input; in snd_rawmidi_read()
1012 if (substream == NULL) in snd_rawmidi_read()
1014 runtime = substream->runtime; in snd_rawmidi_read()
1015 snd_rawmidi_input_trigger(substream, 1); in snd_rawmidi_read()
1019 while (!snd_rawmidi_ready(substream)) { in snd_rawmidi_read()
1041 count1 = snd_rawmidi_kernel_read1(substream, in snd_rawmidi_read()
1060 int snd_rawmidi_transmit_empty(struct snd_rawmidi_substream *substream) in snd_rawmidi_transmit_empty() argument
1062 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_transmit_empty()
1067 rmidi_dbg(substream->rmidi, in snd_rawmidi_transmit_empty()
1086 int __snd_rawmidi_transmit_peek(struct snd_rawmidi_substream *substream, in __snd_rawmidi_transmit_peek() argument
1090 struct snd_rawmidi_runtime *runtime = substream->runtime; in __snd_rawmidi_transmit_peek()
1093 rmidi_dbg(substream->rmidi, in __snd_rawmidi_transmit_peek()
1140 int snd_rawmidi_transmit_peek(struct snd_rawmidi_substream *substream, in snd_rawmidi_transmit_peek() argument
1143 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_transmit_peek()
1148 result = __snd_rawmidi_transmit_peek(substream, buffer, count); in snd_rawmidi_transmit_peek()
1161 int __snd_rawmidi_transmit_ack(struct snd_rawmidi_substream *substream, int count) in __snd_rawmidi_transmit_ack() argument
1163 struct snd_rawmidi_runtime *runtime = substream->runtime; in __snd_rawmidi_transmit_ack()
1166 rmidi_dbg(substream->rmidi, in __snd_rawmidi_transmit_ack()
1174 substream->bytes += count; in __snd_rawmidi_transmit_ack()
1176 if (runtime->drain || snd_rawmidi_ready(substream)) in __snd_rawmidi_transmit_ack()
1194 int snd_rawmidi_transmit_ack(struct snd_rawmidi_substream *substream, int count) in snd_rawmidi_transmit_ack() argument
1196 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_transmit_ack()
1201 result = __snd_rawmidi_transmit_ack(substream, count); in snd_rawmidi_transmit_ack()
1217 int snd_rawmidi_transmit(struct snd_rawmidi_substream *substream, in snd_rawmidi_transmit() argument
1220 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_transmit()
1225 if (!substream->opened) in snd_rawmidi_transmit()
1228 count = __snd_rawmidi_transmit_peek(substream, buffer, count); in snd_rawmidi_transmit()
1232 result = __snd_rawmidi_transmit_ack(substream, count); in snd_rawmidi_transmit()
1239 static long snd_rawmidi_kernel_write1(struct snd_rawmidi_substream *substream, in snd_rawmidi_kernel_write1() argument
1246 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_kernel_write1()
1256 if (substream->append) { in snd_rawmidi_kernel_write1()
1295 snd_rawmidi_output_trigger(substream, 1); in snd_rawmidi_kernel_write1()
1299 long snd_rawmidi_kernel_write(struct snd_rawmidi_substream *substream, in snd_rawmidi_kernel_write() argument
1302 return snd_rawmidi_kernel_write1(substream, NULL, buf, count); in snd_rawmidi_kernel_write()
1313 struct snd_rawmidi_substream *substream; in snd_rawmidi_write() local
1316 substream = rfile->output; in snd_rawmidi_write()
1317 runtime = substream->runtime; in snd_rawmidi_write()
1319 if (substream->append && count > runtime->buffer_size) in snd_rawmidi_write()
1324 while (!snd_rawmidi_ready_append(substream, count)) { in snd_rawmidi_write()
1346 count1 = snd_rawmidi_kernel_write1(substream, buf, NULL, count); in snd_rawmidi_write()
1421 struct snd_rawmidi_substream *substream; in snd_rawmidi_proc_info_read() local
1428 list_for_each_entry(substream, in snd_rawmidi_proc_info_read()
1434 substream->number, in snd_rawmidi_proc_info_read()
1435 (unsigned long) substream->bytes); in snd_rawmidi_proc_info_read()
1436 if (substream->opened) { in snd_rawmidi_proc_info_read()
1439 pid_vnr(substream->pid)); in snd_rawmidi_proc_info_read()
1440 runtime = substream->runtime; in snd_rawmidi_proc_info_read()
1452 list_for_each_entry(substream, in snd_rawmidi_proc_info_read()
1458 substream->number, in snd_rawmidi_proc_info_read()
1459 (unsigned long) substream->bytes); in snd_rawmidi_proc_info_read()
1460 if (substream->opened) { in snd_rawmidi_proc_info_read()
1463 pid_vnr(substream->pid)); in snd_rawmidi_proc_info_read()
1464 runtime = substream->runtime; in snd_rawmidi_proc_info_read()
1499 struct snd_rawmidi_substream *substream; in snd_rawmidi_alloc_substreams() local
1503 substream = kzalloc(sizeof(*substream), GFP_KERNEL); in snd_rawmidi_alloc_substreams()
1504 if (!substream) in snd_rawmidi_alloc_substreams()
1506 substream->stream = direction; in snd_rawmidi_alloc_substreams()
1507 substream->number = idx; in snd_rawmidi_alloc_substreams()
1508 substream->rmidi = rmidi; in snd_rawmidi_alloc_substreams()
1509 substream->pstr = stream; in snd_rawmidi_alloc_substreams()
1510 list_add_tail(&substream->list, &stream->substreams); in snd_rawmidi_alloc_substreams()
1596 struct snd_rawmidi_substream *substream; in snd_rawmidi_free_substreams() local
1599 substream = list_entry(stream->substreams.next, struct snd_rawmidi_substream, list); in snd_rawmidi_free_substreams()
1600 list_del(&substream->list); in snd_rawmidi_free_substreams()
1601 kfree(substream); in snd_rawmidi_free_substreams()
1780 struct snd_rawmidi_substream *substream; in snd_rawmidi_set_ops() local
1782 list_for_each_entry(substream, &rmidi->streams[stream].substreams, list) in snd_rawmidi_set_ops()
1783 substream->ops = ops; in snd_rawmidi_set_ops()