Lines Matching refs:substream

88 static inline int snd_rawmidi_ready(struct snd_rawmidi_substream *substream)  in snd_rawmidi_ready()  argument
90 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_ready()
94 static inline int snd_rawmidi_ready_append(struct snd_rawmidi_substream *substream, in snd_rawmidi_ready_append() argument
97 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_ready_append()
99 (!substream->append || runtime->avail >= count); in snd_rawmidi_ready_append()
107 runtime->event(runtime->substream); in snd_rawmidi_input_event_work()
110 static int snd_rawmidi_runtime_create(struct snd_rawmidi_substream *substream) in snd_rawmidi_runtime_create() argument
116 runtime->substream = substream; in snd_rawmidi_runtime_create()
123 if (substream->stream == SNDRV_RAWMIDI_STREAM_INPUT) in snd_rawmidi_runtime_create()
132 substream->runtime = runtime; in snd_rawmidi_runtime_create()
136 static int snd_rawmidi_runtime_free(struct snd_rawmidi_substream *substream) in snd_rawmidi_runtime_free() argument
138 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_runtime_free()
142 substream->runtime = NULL; in snd_rawmidi_runtime_free()
146 static inline void snd_rawmidi_output_trigger(struct snd_rawmidi_substream *substream,int up) in snd_rawmidi_output_trigger() argument
148 if (!substream->opened) in snd_rawmidi_output_trigger()
150 substream->ops->trigger(substream, up); in snd_rawmidi_output_trigger()
153 static void snd_rawmidi_input_trigger(struct snd_rawmidi_substream *substream, int up) in snd_rawmidi_input_trigger() argument
155 if (!substream->opened) in snd_rawmidi_input_trigger()
157 substream->ops->trigger(substream, up); in snd_rawmidi_input_trigger()
159 cancel_work_sync(&substream->runtime->event_work); in snd_rawmidi_input_trigger()
162 int snd_rawmidi_drop_output(struct snd_rawmidi_substream *substream) in snd_rawmidi_drop_output() argument
165 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_drop_output()
167 snd_rawmidi_output_trigger(substream, 0); in snd_rawmidi_drop_output()
177 int snd_rawmidi_drain_output(struct snd_rawmidi_substream *substream) in snd_rawmidi_drain_output() argument
181 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_drain_output()
191 rmidi_warn(substream->rmidi, in snd_rawmidi_drain_output()
199 if (substream->ops->drain) in snd_rawmidi_drain_output()
200 substream->ops->drain(substream); in snd_rawmidi_drain_output()
203 snd_rawmidi_drop_output(substream); in snd_rawmidi_drain_output()
209 int snd_rawmidi_drain_input(struct snd_rawmidi_substream *substream) in snd_rawmidi_drain_input() argument
212 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_drain_input()
214 snd_rawmidi_input_trigger(substream, 0); in snd_rawmidi_drain_input()
231 struct snd_rawmidi_substream *substream; in assign_substream() local
243 list_for_each_entry(substream, &s->substreams, list) { in assign_substream()
244 if (substream->opened) { in assign_substream()
247 !substream->append) in assign_substream()
250 if (subdevice < 0 || subdevice == substream->number) { in assign_substream()
251 *sub_ret = substream; in assign_substream()
260 struct snd_rawmidi_substream *substream, in open_substream() argument
265 if (substream->use_count == 0) { in open_substream()
266 err = snd_rawmidi_runtime_create(substream); in open_substream()
269 err = substream->ops->open(substream); in open_substream()
271 snd_rawmidi_runtime_free(substream); in open_substream()
274 substream->opened = 1; in open_substream()
275 substream->active_sensing = 0; in open_substream()
277 substream->append = 1; in open_substream()
278 substream->pid = get_pid(task_pid(current)); in open_substream()
279 rmidi->streams[substream->stream].substream_opened++; in open_substream()
281 substream->use_count++; in open_substream()
286 struct snd_rawmidi_substream *substream,
465 struct snd_rawmidi_substream *substream, in close_substream() argument
468 if (--substream->use_count) in close_substream()
472 if (substream->stream == SNDRV_RAWMIDI_STREAM_INPUT) in close_substream()
473 snd_rawmidi_input_trigger(substream, 0); in close_substream()
475 if (substream->active_sensing) { in close_substream()
480 snd_rawmidi_kernel_write(substream, &buf, 1); in close_substream()
482 if (snd_rawmidi_drain_output(substream) == -ERESTARTSYS) in close_substream()
483 snd_rawmidi_output_trigger(substream, 0); in close_substream()
486 substream->ops->close(substream); in close_substream()
487 if (substream->runtime->private_free) in close_substream()
488 substream->runtime->private_free(substream); in close_substream()
489 snd_rawmidi_runtime_free(substream); in close_substream()
490 substream->opened = 0; in close_substream()
491 substream->append = 0; in close_substream()
492 put_pid(substream->pid); in close_substream()
493 substream->pid = NULL; in close_substream()
494 rmidi->streams[substream->stream].substream_opened--; in close_substream()
547 static int snd_rawmidi_info(struct snd_rawmidi_substream *substream, in snd_rawmidi_info() argument
552 if (substream == NULL) in snd_rawmidi_info()
554 rmidi = substream->rmidi; in snd_rawmidi_info()
558 info->subdevice = substream->number; in snd_rawmidi_info()
559 info->stream = substream->stream; in snd_rawmidi_info()
563 strcpy(info->subname, substream->name); in snd_rawmidi_info()
564 info->subdevices_count = substream->pstr->substream_count; in snd_rawmidi_info()
565 info->subdevices_avail = (substream->pstr->substream_count - in snd_rawmidi_info()
566 substream->pstr->substream_opened); in snd_rawmidi_info()
570 static int snd_rawmidi_info_user(struct snd_rawmidi_substream *substream, in snd_rawmidi_info_user() argument
575 if ((err = snd_rawmidi_info(substream, &info)) < 0) in snd_rawmidi_info_user()
586 struct snd_rawmidi_substream *substream; in snd_rawmidi_info_select() local
600 list_for_each_entry(substream, &pstr->substreams, list) { in snd_rawmidi_info_select()
601 if ((unsigned int)substream->number == info->subdevice) in snd_rawmidi_info_select()
602 return snd_rawmidi_info(substream, info); in snd_rawmidi_info_select()
626 int snd_rawmidi_output_params(struct snd_rawmidi_substream *substream, in snd_rawmidi_output_params() argument
630 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_output_params()
632 if (substream->append && substream->use_count > 1) in snd_rawmidi_output_params()
634 snd_rawmidi_drain_output(substream); in snd_rawmidi_output_params()
651 substream->active_sensing = !params->no_active_sensing; in snd_rawmidi_output_params()
656 int snd_rawmidi_input_params(struct snd_rawmidi_substream *substream, in snd_rawmidi_input_params() argument
660 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_input_params()
662 snd_rawmidi_drain_input(substream); in snd_rawmidi_input_params()
682 static int snd_rawmidi_output_status(struct snd_rawmidi_substream *substream, in snd_rawmidi_output_status() argument
685 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_output_status()
695 static int snd_rawmidi_input_status(struct snd_rawmidi_substream *substream, in snd_rawmidi_input_status() argument
698 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_input_status()
874 int snd_rawmidi_receive(struct snd_rawmidi_substream *substream, in snd_rawmidi_receive() argument
879 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_receive()
881 if (!substream->opened) in snd_rawmidi_receive()
884 rmidi_dbg(substream->rmidi, in snd_rawmidi_receive()
890 substream->bytes++; in snd_rawmidi_receive()
900 substream->bytes += count; in snd_rawmidi_receive()
930 else if (snd_rawmidi_ready(substream)) in snd_rawmidi_receive()
938 static long snd_rawmidi_kernel_read1(struct snd_rawmidi_substream *substream, in snd_rawmidi_kernel_read1() argument
944 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_kernel_read1()
978 long snd_rawmidi_kernel_read(struct snd_rawmidi_substream *substream, in snd_rawmidi_kernel_read() argument
981 snd_rawmidi_input_trigger(substream, 1); in snd_rawmidi_kernel_read()
982 return snd_rawmidi_kernel_read1(substream, NULL/*userbuf*/, buf, count); in snd_rawmidi_kernel_read()
992 struct snd_rawmidi_substream *substream; in snd_rawmidi_read() local
996 substream = rfile->input; in snd_rawmidi_read()
997 if (substream == NULL) in snd_rawmidi_read()
999 runtime = substream->runtime; in snd_rawmidi_read()
1000 snd_rawmidi_input_trigger(substream, 1); in snd_rawmidi_read()
1004 while (!snd_rawmidi_ready(substream)) { in snd_rawmidi_read()
1025 count1 = snd_rawmidi_kernel_read1(substream, in snd_rawmidi_read()
1044 int snd_rawmidi_transmit_empty(struct snd_rawmidi_substream *substream) in snd_rawmidi_transmit_empty() argument
1046 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_transmit_empty()
1051 rmidi_dbg(substream->rmidi, in snd_rawmidi_transmit_empty()
1070 int __snd_rawmidi_transmit_peek(struct snd_rawmidi_substream *substream, in __snd_rawmidi_transmit_peek() argument
1074 struct snd_rawmidi_runtime *runtime = substream->runtime; in __snd_rawmidi_transmit_peek()
1077 rmidi_dbg(substream->rmidi, in __snd_rawmidi_transmit_peek()
1124 int snd_rawmidi_transmit_peek(struct snd_rawmidi_substream *substream, in snd_rawmidi_transmit_peek() argument
1127 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_transmit_peek()
1132 result = __snd_rawmidi_transmit_peek(substream, buffer, count); in snd_rawmidi_transmit_peek()
1145 int __snd_rawmidi_transmit_ack(struct snd_rawmidi_substream *substream, int count) in __snd_rawmidi_transmit_ack() argument
1147 struct snd_rawmidi_runtime *runtime = substream->runtime; in __snd_rawmidi_transmit_ack()
1150 rmidi_dbg(substream->rmidi, in __snd_rawmidi_transmit_ack()
1158 substream->bytes += count; in __snd_rawmidi_transmit_ack()
1160 if (runtime->drain || snd_rawmidi_ready(substream)) in __snd_rawmidi_transmit_ack()
1178 int snd_rawmidi_transmit_ack(struct snd_rawmidi_substream *substream, int count) in snd_rawmidi_transmit_ack() argument
1180 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_transmit_ack()
1185 result = __snd_rawmidi_transmit_ack(substream, count); in snd_rawmidi_transmit_ack()
1201 int snd_rawmidi_transmit(struct snd_rawmidi_substream *substream, in snd_rawmidi_transmit() argument
1204 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_transmit()
1209 if (!substream->opened) in snd_rawmidi_transmit()
1212 count = __snd_rawmidi_transmit_peek(substream, buffer, count); in snd_rawmidi_transmit()
1216 result = __snd_rawmidi_transmit_ack(substream, count); in snd_rawmidi_transmit()
1223 static long snd_rawmidi_kernel_write1(struct snd_rawmidi_substream *substream, in snd_rawmidi_kernel_write1() argument
1230 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_kernel_write1()
1240 if (substream->append) { in snd_rawmidi_kernel_write1()
1279 snd_rawmidi_output_trigger(substream, 1); in snd_rawmidi_kernel_write1()
1283 long snd_rawmidi_kernel_write(struct snd_rawmidi_substream *substream, in snd_rawmidi_kernel_write() argument
1286 return snd_rawmidi_kernel_write1(substream, NULL, buf, count); in snd_rawmidi_kernel_write()
1297 struct snd_rawmidi_substream *substream; in snd_rawmidi_write() local
1300 substream = rfile->output; in snd_rawmidi_write()
1301 runtime = substream->runtime; in snd_rawmidi_write()
1303 if (substream->append && count > runtime->buffer_size) in snd_rawmidi_write()
1308 while (!snd_rawmidi_ready_append(substream, count)) { in snd_rawmidi_write()
1329 count1 = snd_rawmidi_kernel_write1(substream, buf, NULL, count); in snd_rawmidi_write()
1404 struct snd_rawmidi_substream *substream; in snd_rawmidi_proc_info_read() local
1411 list_for_each_entry(substream, in snd_rawmidi_proc_info_read()
1417 substream->number, in snd_rawmidi_proc_info_read()
1418 (unsigned long) substream->bytes); in snd_rawmidi_proc_info_read()
1419 if (substream->opened) { in snd_rawmidi_proc_info_read()
1422 pid_vnr(substream->pid)); in snd_rawmidi_proc_info_read()
1423 runtime = substream->runtime; in snd_rawmidi_proc_info_read()
1435 list_for_each_entry(substream, in snd_rawmidi_proc_info_read()
1441 substream->number, in snd_rawmidi_proc_info_read()
1442 (unsigned long) substream->bytes); in snd_rawmidi_proc_info_read()
1443 if (substream->opened) { in snd_rawmidi_proc_info_read()
1446 pid_vnr(substream->pid)); in snd_rawmidi_proc_info_read()
1447 runtime = substream->runtime; in snd_rawmidi_proc_info_read()
1483 struct snd_rawmidi_substream *substream; in snd_rawmidi_alloc_substreams() local
1487 substream = kzalloc(sizeof(*substream), GFP_KERNEL); in snd_rawmidi_alloc_substreams()
1488 if (!substream) in snd_rawmidi_alloc_substreams()
1490 substream->stream = direction; in snd_rawmidi_alloc_substreams()
1491 substream->number = idx; in snd_rawmidi_alloc_substreams()
1492 substream->rmidi = rmidi; in snd_rawmidi_alloc_substreams()
1493 substream->pstr = stream; in snd_rawmidi_alloc_substreams()
1494 list_add_tail(&substream->list, &stream->substreams); in snd_rawmidi_alloc_substreams()
1578 struct snd_rawmidi_substream *substream; in snd_rawmidi_free_substreams() local
1581 substream = list_entry(stream->substreams.next, struct snd_rawmidi_substream, list); in snd_rawmidi_free_substreams()
1582 list_del(&substream->list); in snd_rawmidi_free_substreams()
1583 kfree(substream); in snd_rawmidi_free_substreams()
1752 struct snd_rawmidi_substream *substream; in snd_rawmidi_set_ops() local
1754 list_for_each_entry(substream, &rmidi->streams[stream].substreams, list) in snd_rawmidi_set_ops()
1755 substream->ops = ops; in snd_rawmidi_set_ops()