• Home
  • Raw
  • Download

Lines Matching refs:substream

81 static inline int snd_rawmidi_ready(struct snd_rawmidi_substream *substream)  in snd_rawmidi_ready()  argument
83 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_ready()
87 static inline int snd_rawmidi_ready_append(struct snd_rawmidi_substream *substream, in snd_rawmidi_ready_append() argument
90 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_ready_append()
92 (!substream->append || runtime->avail >= count); in snd_rawmidi_ready_append()
100 runtime->event(runtime->substream); in snd_rawmidi_input_event_work()
103 static int snd_rawmidi_runtime_create(struct snd_rawmidi_substream *substream) in snd_rawmidi_runtime_create() argument
109 runtime->substream = substream; in snd_rawmidi_runtime_create()
116 if (substream->stream == SNDRV_RAWMIDI_STREAM_INPUT) in snd_rawmidi_runtime_create()
125 substream->runtime = runtime; in snd_rawmidi_runtime_create()
129 static int snd_rawmidi_runtime_free(struct snd_rawmidi_substream *substream) in snd_rawmidi_runtime_free() argument
131 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_runtime_free()
135 substream->runtime = NULL; in snd_rawmidi_runtime_free()
139 static inline void snd_rawmidi_output_trigger(struct snd_rawmidi_substream *substream,int up) in snd_rawmidi_output_trigger() argument
141 if (!substream->opened) in snd_rawmidi_output_trigger()
143 substream->ops->trigger(substream, up); in snd_rawmidi_output_trigger()
146 static void snd_rawmidi_input_trigger(struct snd_rawmidi_substream *substream, int up) in snd_rawmidi_input_trigger() argument
148 if (!substream->opened) in snd_rawmidi_input_trigger()
150 substream->ops->trigger(substream, up); in snd_rawmidi_input_trigger()
152 cancel_work_sync(&substream->runtime->event_work); in snd_rawmidi_input_trigger()
155 int snd_rawmidi_drop_output(struct snd_rawmidi_substream *substream) in snd_rawmidi_drop_output() argument
158 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_drop_output()
160 snd_rawmidi_output_trigger(substream, 0); in snd_rawmidi_drop_output()
169 int snd_rawmidi_drain_output(struct snd_rawmidi_substream *substream) in snd_rawmidi_drain_output() argument
173 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_drain_output()
189 if (substream->ops->drain) in snd_rawmidi_drain_output()
190 substream->ops->drain(substream); in snd_rawmidi_drain_output()
193 snd_rawmidi_drop_output(substream); in snd_rawmidi_drain_output()
198 int snd_rawmidi_drain_input(struct snd_rawmidi_substream *substream) in snd_rawmidi_drain_input() argument
201 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_drain_input()
203 snd_rawmidi_input_trigger(substream, 0); in snd_rawmidi_drain_input()
219 struct snd_rawmidi_substream *substream; in assign_substream() local
231 list_for_each_entry(substream, &s->substreams, list) { in assign_substream()
232 if (substream->opened) { in assign_substream()
235 !substream->append) in assign_substream()
238 if (subdevice < 0 || subdevice == substream->number) { in assign_substream()
239 *sub_ret = substream; in assign_substream()
248 struct snd_rawmidi_substream *substream, in open_substream() argument
253 if (substream->use_count == 0) { in open_substream()
254 err = snd_rawmidi_runtime_create(substream); in open_substream()
257 err = substream->ops->open(substream); in open_substream()
259 snd_rawmidi_runtime_free(substream); in open_substream()
262 substream->opened = 1; in open_substream()
263 substream->active_sensing = 0; in open_substream()
265 substream->append = 1; in open_substream()
266 substream->pid = get_pid(task_pid(current)); in open_substream()
267 rmidi->streams[substream->stream].substream_opened++; in open_substream()
269 substream->use_count++; in open_substream()
274 struct snd_rawmidi_substream *substream,
462 struct snd_rawmidi_substream *substream, in close_substream() argument
465 if (--substream->use_count) in close_substream()
469 if (substream->stream == SNDRV_RAWMIDI_STREAM_INPUT) in close_substream()
470 snd_rawmidi_input_trigger(substream, 0); in close_substream()
472 if (substream->active_sensing) { in close_substream()
477 snd_rawmidi_kernel_write(substream, &buf, 1); in close_substream()
479 if (snd_rawmidi_drain_output(substream) == -ERESTARTSYS) in close_substream()
480 snd_rawmidi_output_trigger(substream, 0); in close_substream()
483 substream->ops->close(substream); in close_substream()
484 if (substream->runtime->private_free) in close_substream()
485 substream->runtime->private_free(substream); in close_substream()
486 snd_rawmidi_runtime_free(substream); in close_substream()
487 substream->opened = 0; in close_substream()
488 substream->append = 0; in close_substream()
489 put_pid(substream->pid); in close_substream()
490 substream->pid = NULL; in close_substream()
491 rmidi->streams[substream->stream].substream_opened--; in close_substream()
543 static int snd_rawmidi_info(struct snd_rawmidi_substream *substream, in snd_rawmidi_info() argument
548 if (substream == NULL) in snd_rawmidi_info()
550 rmidi = substream->rmidi; in snd_rawmidi_info()
554 info->subdevice = substream->number; in snd_rawmidi_info()
555 info->stream = substream->stream; in snd_rawmidi_info()
559 strcpy(info->subname, substream->name); in snd_rawmidi_info()
560 info->subdevices_count = substream->pstr->substream_count; in snd_rawmidi_info()
561 info->subdevices_avail = (substream->pstr->substream_count - in snd_rawmidi_info()
562 substream->pstr->substream_opened); in snd_rawmidi_info()
566 static int snd_rawmidi_info_user(struct snd_rawmidi_substream *substream, in snd_rawmidi_info_user() argument
571 if ((err = snd_rawmidi_info(substream, &info)) < 0) in snd_rawmidi_info_user()
582 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()
621 int snd_rawmidi_output_params(struct snd_rawmidi_substream *substream, in snd_rawmidi_output_params() argument
625 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_output_params()
627 if (substream->append && substream->use_count > 1) in snd_rawmidi_output_params()
629 snd_rawmidi_drain_output(substream); in snd_rawmidi_output_params()
646 substream->active_sensing = !params->no_active_sensing; in snd_rawmidi_output_params()
650 int snd_rawmidi_input_params(struct snd_rawmidi_substream *substream, in snd_rawmidi_input_params() argument
654 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_input_params()
656 snd_rawmidi_drain_input(substream); in snd_rawmidi_input_params()
675 static int snd_rawmidi_output_status(struct snd_rawmidi_substream *substream, in snd_rawmidi_output_status() argument
678 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_output_status()
688 static int snd_rawmidi_input_status(struct snd_rawmidi_substream *substream, in snd_rawmidi_input_status() argument
691 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_input_status()
868 int snd_rawmidi_receive(struct snd_rawmidi_substream *substream, in snd_rawmidi_receive() argument
873 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_receive()
875 if (!substream->opened) in snd_rawmidi_receive()
883 substream->bytes++; in snd_rawmidi_receive()
893 substream->bytes += count; in snd_rawmidi_receive()
923 else if (snd_rawmidi_ready(substream)) in snd_rawmidi_receive()
930 static long snd_rawmidi_kernel_read1(struct snd_rawmidi_substream *substream, in snd_rawmidi_kernel_read1() argument
936 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_kernel_read1()
965 long snd_rawmidi_kernel_read(struct snd_rawmidi_substream *substream, in snd_rawmidi_kernel_read() argument
968 snd_rawmidi_input_trigger(substream, 1); in snd_rawmidi_kernel_read()
969 return snd_rawmidi_kernel_read1(substream, NULL/*userbuf*/, buf, count); in snd_rawmidi_kernel_read()
978 struct snd_rawmidi_substream *substream; in snd_rawmidi_read() local
982 substream = rfile->input; in snd_rawmidi_read()
983 if (substream == NULL) in snd_rawmidi_read()
985 runtime = substream->runtime; in snd_rawmidi_read()
986 snd_rawmidi_input_trigger(substream, 1); in snd_rawmidi_read()
990 while (!snd_rawmidi_ready(substream)) { in snd_rawmidi_read()
1011 count1 = snd_rawmidi_kernel_read1(substream, in snd_rawmidi_read()
1030 int snd_rawmidi_transmit_empty(struct snd_rawmidi_substream *substream) in snd_rawmidi_transmit_empty() argument
1032 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_transmit_empty()
1060 int snd_rawmidi_transmit_peek(struct snd_rawmidi_substream *substream, in snd_rawmidi_transmit_peek() argument
1065 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_transmit_peek()
1112 int snd_rawmidi_transmit_ack(struct snd_rawmidi_substream *substream, int count) in snd_rawmidi_transmit_ack() argument
1115 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_transmit_ack()
1126 substream->bytes += count; in snd_rawmidi_transmit_ack()
1128 if (runtime->drain || snd_rawmidi_ready(substream)) in snd_rawmidi_transmit_ack()
1145 int snd_rawmidi_transmit(struct snd_rawmidi_substream *substream, in snd_rawmidi_transmit() argument
1148 if (!substream->opened) in snd_rawmidi_transmit()
1150 count = snd_rawmidi_transmit_peek(substream, buffer, count); in snd_rawmidi_transmit()
1153 return snd_rawmidi_transmit_ack(substream, count); in snd_rawmidi_transmit()
1156 static long snd_rawmidi_kernel_write1(struct snd_rawmidi_substream *substream, in snd_rawmidi_kernel_write1() argument
1163 struct snd_rawmidi_runtime *runtime = substream->runtime; in snd_rawmidi_kernel_write1()
1172 if (substream->append) { in snd_rawmidi_kernel_write1()
1207 snd_rawmidi_output_trigger(substream, 1); in snd_rawmidi_kernel_write1()
1211 long snd_rawmidi_kernel_write(struct snd_rawmidi_substream *substream, in snd_rawmidi_kernel_write() argument
1214 return snd_rawmidi_kernel_write1(substream, NULL, buf, count); in snd_rawmidi_kernel_write()
1224 struct snd_rawmidi_substream *substream; in snd_rawmidi_write() local
1227 substream = rfile->output; in snd_rawmidi_write()
1228 runtime = substream->runtime; in snd_rawmidi_write()
1230 if (substream->append && count > runtime->buffer_size) in snd_rawmidi_write()
1235 while (!snd_rawmidi_ready_append(substream, count)) { in snd_rawmidi_write()
1256 count1 = snd_rawmidi_kernel_write1(substream, buf, NULL, count); in snd_rawmidi_write()
1331 struct snd_rawmidi_substream *substream; in snd_rawmidi_proc_info_read() local
1338 list_for_each_entry(substream, in snd_rawmidi_proc_info_read()
1344 substream->number, in snd_rawmidi_proc_info_read()
1345 (unsigned long) substream->bytes); in snd_rawmidi_proc_info_read()
1346 if (substream->opened) { in snd_rawmidi_proc_info_read()
1349 pid_vnr(substream->pid)); in snd_rawmidi_proc_info_read()
1350 runtime = substream->runtime; in snd_rawmidi_proc_info_read()
1362 list_for_each_entry(substream, in snd_rawmidi_proc_info_read()
1368 substream->number, in snd_rawmidi_proc_info_read()
1369 (unsigned long) substream->bytes); in snd_rawmidi_proc_info_read()
1370 if (substream->opened) { in snd_rawmidi_proc_info_read()
1373 pid_vnr(substream->pid)); in snd_rawmidi_proc_info_read()
1374 runtime = substream->runtime; in snd_rawmidi_proc_info_read()
1410 struct snd_rawmidi_substream *substream; in snd_rawmidi_alloc_substreams() local
1414 substream = kzalloc(sizeof(*substream), GFP_KERNEL); in snd_rawmidi_alloc_substreams()
1415 if (substream == NULL) { in snd_rawmidi_alloc_substreams()
1419 substream->stream = direction; in snd_rawmidi_alloc_substreams()
1420 substream->number = idx; in snd_rawmidi_alloc_substreams()
1421 substream->rmidi = rmidi; in snd_rawmidi_alloc_substreams()
1422 substream->pstr = stream; in snd_rawmidi_alloc_substreams()
1423 list_add_tail(&substream->list, &stream->substreams); in snd_rawmidi_alloc_substreams()
1498 struct snd_rawmidi_substream *substream; in snd_rawmidi_free_substreams() local
1501 substream = list_entry(stream->substreams.next, struct snd_rawmidi_substream, list); in snd_rawmidi_free_substreams()
1502 list_del(&substream->list); in snd_rawmidi_free_substreams()
1503 kfree(substream); in snd_rawmidi_free_substreams()
1668 struct snd_rawmidi_substream *substream; in snd_rawmidi_set_ops() local
1670 list_for_each_entry(substream, &rmidi->streams[stream].substreams, list) in snd_rawmidi_set_ops()
1671 substream->ops = ops; in snd_rawmidi_set_ops()