Lines Matching refs:pcm
50 static int snd_pcm_ioplug_drop(snd_pcm_t *pcm);
51 static int snd_pcm_ioplug_poll_descriptors_count(snd_pcm_t *pcm);
52 static int snd_pcm_ioplug_poll_descriptors(snd_pcm_t *pcm, struct pollfd *pfds, unsigned int space);
53 static int snd_pcm_ioplug_poll_revents(snd_pcm_t *pcm, struct pollfd *pfds, unsigned int nfds, unsi…
57 static void snd_pcm_ioplug_hw_ptr_update(snd_pcm_t *pcm) in snd_pcm_ioplug_hw_ptr_update() argument
59 ioplug_priv_t *io = pcm->private_data; in snd_pcm_ioplug_hw_ptr_update()
72 pcm->boundary : pcm->buffer_size; in snd_pcm_ioplug_hw_ptr_update()
75 snd_pcm_mmap_hw_forward(io->data->pcm, delta); in snd_pcm_ioplug_hw_ptr_update()
78 avail = snd_pcm_mmap_avail(pcm); in snd_pcm_ioplug_hw_ptr_update()
79 if (avail >= pcm->buffer_size) in snd_pcm_ioplug_hw_ptr_update()
80 snd_pcm_ioplug_drop(pcm); in snd_pcm_ioplug_hw_ptr_update()
85 snd_pcm_ioplug_drop(pcm); in snd_pcm_ioplug_hw_ptr_update()
91 static int snd_pcm_ioplug_info(snd_pcm_t *pcm, snd_pcm_info_t *info) in snd_pcm_ioplug_info() argument
94 info->stream = pcm->stream; in snd_pcm_ioplug_info()
96 if (pcm->name) { in snd_pcm_ioplug_info()
97 snd_strlcpy((char *)info->id, pcm->name, sizeof(info->id)); in snd_pcm_ioplug_info()
98 snd_strlcpy((char *)info->name, pcm->name, sizeof(info->name)); in snd_pcm_ioplug_info()
99 snd_strlcpy((char *)info->subname, pcm->name, sizeof(info->subname)); in snd_pcm_ioplug_info()
105 static int snd_pcm_ioplug_channel_info(snd_pcm_t *pcm, snd_pcm_channel_info_t *info) in snd_pcm_ioplug_channel_info() argument
107 return snd_pcm_channel_info_shm(pcm, info, -1); in snd_pcm_ioplug_channel_info()
110 static int snd_pcm_ioplug_delay(snd_pcm_t *pcm, snd_pcm_sframes_t *delayp) in snd_pcm_ioplug_delay() argument
112 ioplug_priv_t *io = pcm->private_data; in snd_pcm_ioplug_delay()
118 snd_pcm_ioplug_hw_ptr_update(pcm); in snd_pcm_ioplug_delay()
119 *delayp = snd_pcm_mmap_delay(pcm); in snd_pcm_ioplug_delay()
124 static int snd_pcm_ioplug_status(snd_pcm_t *pcm, snd_pcm_status_t * status) in snd_pcm_ioplug_status() argument
126 ioplug_priv_t *io = pcm->private_data; in snd_pcm_ioplug_status()
130 snd_pcm_ioplug_hw_ptr_update(pcm); in snd_pcm_ioplug_status()
133 gettimestamp(&status->tstamp, pcm->tstamp_type); in snd_pcm_ioplug_status()
134 status->avail = snd_pcm_mmap_avail(pcm); in snd_pcm_ioplug_status()
136 status->appl_ptr = *pcm->appl.ptr; in snd_pcm_ioplug_status()
137 status->hw_ptr = *pcm->hw.ptr; in snd_pcm_ioplug_status()
138 if (snd_pcm_ioplug_delay(pcm, &sd) < 0) in snd_pcm_ioplug_status()
139 sd = snd_pcm_mmap_delay(pcm); in snd_pcm_ioplug_status()
144 static snd_pcm_state_t snd_pcm_ioplug_state(snd_pcm_t *pcm) in snd_pcm_ioplug_state() argument
146 ioplug_priv_t *io = pcm->private_data; in snd_pcm_ioplug_state()
150 static int snd_pcm_ioplug_hwsync(snd_pcm_t *pcm) in snd_pcm_ioplug_hwsync() argument
152 snd_pcm_ioplug_hw_ptr_update(pcm); in snd_pcm_ioplug_hwsync()
156 static int snd_pcm_ioplug_reset(snd_pcm_t *pcm) in snd_pcm_ioplug_reset() argument
158 ioplug_priv_t *io = pcm->private_data; in snd_pcm_ioplug_reset()
167 static int snd_pcm_ioplug_prepare(snd_pcm_t *pcm) in snd_pcm_ioplug_prepare() argument
169 ioplug_priv_t *io = pcm->private_data; in snd_pcm_ioplug_prepare()
172 snd_pcm_ioplug_reset(pcm); in snd_pcm_ioplug_prepare()
174 snd_pcm_unlock(pcm); /* to avoid deadlock */ in snd_pcm_ioplug_prepare()
176 snd_pcm_lock(pcm); in snd_pcm_ioplug_prepare()
285 static int snd_pcm_ioplug_hw_refine(snd_pcm_t *pcm, snd_pcm_hw_params_t *params) in snd_pcm_ioplug_hw_refine() argument
288 ioplug_priv_t *io = pcm->private_data; in snd_pcm_ioplug_hw_refine()
314 err = snd_pcm_hw_refine_soft(pcm, params); in snd_pcm_ioplug_hw_refine()
431 static int snd_pcm_ioplug_hw_params(snd_pcm_t *pcm, snd_pcm_hw_params_t *params) in snd_pcm_ioplug_hw_params() argument
433 ioplug_priv_t *io = pcm->private_data; in snd_pcm_ioplug_hw_params()
456 static int snd_pcm_ioplug_hw_free(snd_pcm_t *pcm) in snd_pcm_ioplug_hw_free() argument
458 ioplug_priv_t *io = pcm->private_data; in snd_pcm_ioplug_hw_free()
465 static int snd_pcm_ioplug_sw_params(snd_pcm_t *pcm, snd_pcm_sw_params_t *params) in snd_pcm_ioplug_sw_params() argument
467 ioplug_priv_t *io = pcm->private_data; in snd_pcm_ioplug_sw_params()
473 snd_pcm_unlock(pcm); /* to avoid deadlock */ in snd_pcm_ioplug_sw_params()
475 snd_pcm_lock(pcm); in snd_pcm_ioplug_sw_params()
481 static int snd_pcm_ioplug_start(snd_pcm_t *pcm) in snd_pcm_ioplug_start() argument
483 ioplug_priv_t *io = pcm->private_data; in snd_pcm_ioplug_start()
493 gettimestamp(&io->trigger_tstamp, pcm->tstamp_type); in snd_pcm_ioplug_start()
499 static int snd_pcm_ioplug_drop(snd_pcm_t *pcm) in snd_pcm_ioplug_drop() argument
501 ioplug_priv_t *io = pcm->private_data; in snd_pcm_ioplug_drop()
508 gettimestamp(&io->trigger_tstamp, pcm->tstamp_type); in snd_pcm_ioplug_drop()
514 static int ioplug_drain_via_poll(snd_pcm_t *pcm) in ioplug_drain_via_poll() argument
516 ioplug_priv_t *io = pcm->private_data; in ioplug_drain_via_poll()
519 snd_pcm_ioplug_hw_ptr_update(pcm); in ioplug_drain_via_poll()
525 if (snd_pcm_wait_nocheck(pcm, -1) < 0) in ioplug_drain_via_poll()
533 static int snd_pcm_ioplug_drain(snd_pcm_t *pcm) in snd_pcm_ioplug_drain() argument
535 ioplug_priv_t *io = pcm->private_data; in snd_pcm_ioplug_drain()
538 snd_pcm_lock(pcm); in snd_pcm_ioplug_drain()
543 snd_pcm_unlock(pcm); in snd_pcm_ioplug_drain()
546 if (pcm->stream == SND_PCM_STREAM_PLAYBACK) { in snd_pcm_ioplug_drain()
548 err = snd_pcm_ioplug_start(pcm); in snd_pcm_ioplug_drain()
564 snd_pcm_unlock(pcm); /* let plugin own locking */ in snd_pcm_ioplug_drain()
566 snd_pcm_lock(pcm); in snd_pcm_ioplug_drain()
568 err = ioplug_drain_via_poll(pcm); in snd_pcm_ioplug_drain()
574 snd_pcm_ioplug_drop(pcm); in snd_pcm_ioplug_drain()
575 snd_pcm_unlock(pcm); in snd_pcm_ioplug_drain()
579 static int snd_pcm_ioplug_pause(snd_pcm_t *pcm, int enable) in snd_pcm_ioplug_pause() argument
581 ioplug_priv_t *io = pcm->private_data; in snd_pcm_ioplug_pause()
600 static snd_pcm_sframes_t snd_pcm_ioplug_rewindable(snd_pcm_t *pcm) in snd_pcm_ioplug_rewindable() argument
602 return snd_pcm_mmap_hw_rewindable(pcm); in snd_pcm_ioplug_rewindable()
605 static snd_pcm_sframes_t snd_pcm_ioplug_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t frames) in snd_pcm_ioplug_rewind() argument
607 snd_pcm_mmap_appl_backward(pcm, frames); in snd_pcm_ioplug_rewind()
611 static snd_pcm_sframes_t snd_pcm_ioplug_forwardable(snd_pcm_t *pcm) in snd_pcm_ioplug_forwardable() argument
613 return snd_pcm_mmap_avail(pcm); in snd_pcm_ioplug_forwardable()
616 static snd_pcm_sframes_t snd_pcm_ioplug_forward(snd_pcm_t *pcm, snd_pcm_uframes_t frames) in snd_pcm_ioplug_forward() argument
618 snd_pcm_mmap_appl_forward(pcm, frames); in snd_pcm_ioplug_forward()
623 static int snd_pcm_ioplug_resume(snd_pcm_t *pcm) in snd_pcm_ioplug_resume() argument
625 ioplug_priv_t *io = pcm->private_data; in snd_pcm_ioplug_resume()
633 static snd_pcm_sframes_t ioplug_priv_transfer_areas(snd_pcm_t *pcm, in ioplug_priv_transfer_areas() argument
638 ioplug_priv_t *io = pcm->private_data; in ioplug_priv_transfer_areas()
648 snd_pcm_mmap_appl_forward(pcm, result); in ioplug_priv_transfer_areas()
652 static snd_pcm_sframes_t snd_pcm_ioplug_writei(snd_pcm_t *pcm, const void *buffer, snd_pcm_uframes_… in snd_pcm_ioplug_writei() argument
654 if (pcm->mmap_rw) in snd_pcm_ioplug_writei()
655 return snd_pcm_mmap_writei(pcm, buffer, size); in snd_pcm_ioplug_writei()
657 snd_pcm_channel_area_t areas[pcm->channels]; in snd_pcm_ioplug_writei()
658 snd_pcm_areas_from_buf(pcm, areas, (void*)buffer); in snd_pcm_ioplug_writei()
659 return snd_pcm_write_areas(pcm, areas, 0, size, in snd_pcm_ioplug_writei()
664 static snd_pcm_sframes_t snd_pcm_ioplug_writen(snd_pcm_t *pcm, void **bufs, snd_pcm_uframes_t size) in snd_pcm_ioplug_writen() argument
666 if (pcm->mmap_rw) in snd_pcm_ioplug_writen()
667 return snd_pcm_mmap_writen(pcm, bufs, size); in snd_pcm_ioplug_writen()
669 snd_pcm_channel_area_t areas[pcm->channels]; in snd_pcm_ioplug_writen()
670 snd_pcm_areas_from_bufs(pcm, areas, bufs); in snd_pcm_ioplug_writen()
671 return snd_pcm_write_areas(pcm, areas, 0, size, in snd_pcm_ioplug_writen()
676 static snd_pcm_sframes_t snd_pcm_ioplug_readi(snd_pcm_t *pcm, void *buffer, snd_pcm_uframes_t size) in snd_pcm_ioplug_readi() argument
678 if (pcm->mmap_rw) in snd_pcm_ioplug_readi()
679 return snd_pcm_mmap_readi(pcm, buffer, size); in snd_pcm_ioplug_readi()
681 snd_pcm_channel_area_t areas[pcm->channels]; in snd_pcm_ioplug_readi()
682 snd_pcm_areas_from_buf(pcm, areas, buffer); in snd_pcm_ioplug_readi()
683 return snd_pcm_read_areas(pcm, areas, 0, size, in snd_pcm_ioplug_readi()
688 static snd_pcm_sframes_t snd_pcm_ioplug_readn(snd_pcm_t *pcm, void **bufs, snd_pcm_uframes_t size) in snd_pcm_ioplug_readn() argument
690 if (pcm->mmap_rw) in snd_pcm_ioplug_readn()
691 return snd_pcm_mmap_readn(pcm, bufs, size); in snd_pcm_ioplug_readn()
693 snd_pcm_channel_area_t areas[pcm->channels]; in snd_pcm_ioplug_readn()
694 snd_pcm_areas_from_bufs(pcm, areas, bufs); in snd_pcm_ioplug_readn()
695 return snd_pcm_read_areas(pcm, areas, 0, size, in snd_pcm_ioplug_readn()
700 static int snd_pcm_ioplug_mmap_begin_capture(snd_pcm_t *pcm, in snd_pcm_ioplug_mmap_begin_capture() argument
705 ioplug_priv_t *io = pcm->private_data; in snd_pcm_ioplug_mmap_begin_capture()
708 err = __snd_pcm_mmap_begin_generic(pcm, areas, offset, frames); in snd_pcm_ioplug_mmap_begin_capture()
713 pcm->access != SND_PCM_ACCESS_RW_INTERLEAVED && in snd_pcm_ioplug_mmap_begin_capture()
714 pcm->access != SND_PCM_ACCESS_RW_NONINTERLEAVED) { in snd_pcm_ioplug_mmap_begin_capture()
724 static int snd_pcm_ioplug_mmap_begin(snd_pcm_t *pcm, const snd_pcm_channel_area_t **areas, in snd_pcm_ioplug_mmap_begin() argument
727 if (pcm->stream == SND_PCM_STREAM_PLAYBACK) in snd_pcm_ioplug_mmap_begin()
728 return __snd_pcm_mmap_begin_generic(pcm, areas, offset, frames); in snd_pcm_ioplug_mmap_begin()
729 return snd_pcm_ioplug_mmap_begin_capture(pcm, areas, offset, frames); in snd_pcm_ioplug_mmap_begin()
732 static snd_pcm_sframes_t snd_pcm_ioplug_mmap_commit(snd_pcm_t *pcm, in snd_pcm_ioplug_mmap_commit() argument
736 if (pcm->stream == SND_PCM_STREAM_PLAYBACK && in snd_pcm_ioplug_mmap_commit()
737 pcm->access != SND_PCM_ACCESS_RW_INTERLEAVED && in snd_pcm_ioplug_mmap_commit()
738 pcm->access != SND_PCM_ACCESS_RW_NONINTERLEAVED) { in snd_pcm_ioplug_mmap_commit()
742 __snd_pcm_mmap_begin_generic(pcm, &areas, &ofs, &frames); in snd_pcm_ioplug_mmap_commit()
745 return ioplug_priv_transfer_areas(pcm, areas, offset, frames); in snd_pcm_ioplug_mmap_commit()
748 snd_pcm_mmap_appl_forward(pcm, size); in snd_pcm_ioplug_mmap_commit()
752 static snd_pcm_sframes_t snd_pcm_ioplug_avail_update(snd_pcm_t *pcm) in snd_pcm_ioplug_avail_update() argument
754 ioplug_priv_t *io = pcm->private_data; in snd_pcm_ioplug_avail_update()
757 snd_pcm_ioplug_hw_ptr_update(pcm); in snd_pcm_ioplug_avail_update()
761 avail = snd_pcm_mmap_avail(pcm); in snd_pcm_ioplug_avail_update()
767 static int snd_pcm_ioplug_nonblock(snd_pcm_t *pcm, int nonblock) in snd_pcm_ioplug_nonblock() argument
769 ioplug_priv_t *io = pcm->private_data; in snd_pcm_ioplug_nonblock()
775 static int snd_pcm_ioplug_poll_descriptors_count(snd_pcm_t *pcm) in snd_pcm_ioplug_poll_descriptors_count() argument
777 ioplug_priv_t *io = pcm->private_data; in snd_pcm_ioplug_poll_descriptors_count()
781 snd_pcm_unlock(pcm); /* to avoid deadlock */ in snd_pcm_ioplug_poll_descriptors_count()
783 snd_pcm_lock(pcm); in snd_pcm_ioplug_poll_descriptors_count()
788 static int snd_pcm_ioplug_poll_descriptors(snd_pcm_t *pcm, struct pollfd *pfds, unsigned int space) in snd_pcm_ioplug_poll_descriptors() argument
790 ioplug_priv_t *io = pcm->private_data; in snd_pcm_ioplug_poll_descriptors()
794 snd_pcm_unlock(pcm); /* to avoid deadlock */ in snd_pcm_ioplug_poll_descriptors()
796 snd_pcm_lock(pcm); in snd_pcm_ioplug_poll_descriptors()
799 if (pcm->poll_fd < 0) in snd_pcm_ioplug_poll_descriptors()
802 pfds->fd = pcm->poll_fd; in snd_pcm_ioplug_poll_descriptors()
803 pfds->events = pcm->poll_events | POLLERR | POLLNVAL; in snd_pcm_ioplug_poll_descriptors()
810 static int snd_pcm_ioplug_poll_revents(snd_pcm_t *pcm, struct pollfd *pfds, unsigned int nfds, unsi… in snd_pcm_ioplug_poll_revents() argument
812 ioplug_priv_t *io = pcm->private_data; in snd_pcm_ioplug_poll_revents()
816 snd_pcm_unlock(pcm); /* to avoid deadlock */ in snd_pcm_ioplug_poll_revents()
818 snd_pcm_lock(pcm); in snd_pcm_ioplug_poll_revents()
826 static int snd_pcm_ioplug_mmap(snd_pcm_t *pcm ATTRIBUTE_UNUSED) in snd_pcm_ioplug_mmap()
831 static int snd_pcm_ioplug_async(snd_pcm_t *pcm ATTRIBUTE_UNUSED, in snd_pcm_ioplug_async()
838 static int snd_pcm_ioplug_munmap(snd_pcm_t *pcm ATTRIBUTE_UNUSED) in snd_pcm_ioplug_munmap()
843 static snd_pcm_chmap_query_t **snd_pcm_ioplug_query_chmaps(snd_pcm_t *pcm) in snd_pcm_ioplug_query_chmaps() argument
845 ioplug_priv_t *io = pcm->private_data; in snd_pcm_ioplug_query_chmaps()
853 static snd_pcm_chmap_t *snd_pcm_ioplug_get_chmap(snd_pcm_t *pcm) in snd_pcm_ioplug_get_chmap() argument
855 ioplug_priv_t *io = pcm->private_data; in snd_pcm_ioplug_get_chmap()
863 static int snd_pcm_ioplug_set_chmap(snd_pcm_t *pcm, const snd_pcm_chmap_t *map) in snd_pcm_ioplug_set_chmap() argument
865 ioplug_priv_t *io = pcm->private_data; in snd_pcm_ioplug_set_chmap()
873 static void snd_pcm_ioplug_dump(snd_pcm_t *pcm, snd_output_t *out) in snd_pcm_ioplug_dump() argument
875 ioplug_priv_t *io = pcm->private_data; in snd_pcm_ioplug_dump()
884 if (pcm->setup) { in snd_pcm_ioplug_dump()
886 snd_pcm_dump_setup(pcm, out); in snd_pcm_ioplug_dump()
898 static int snd_pcm_ioplug_close(snd_pcm_t *pcm) in snd_pcm_ioplug_close() argument
900 ioplug_priv_t *io = pcm->private_data; in snd_pcm_ioplug_close()
1079 snd_pcm_t *pcm; in snd_pcm_ioplug_create() local
1102 err = snd_pcm_new(&pcm, SND_PCM_TYPE_IOPLUG, name, stream, mode); in snd_pcm_ioplug_create()
1108 ioplug->pcm = pcm; in snd_pcm_ioplug_create()
1109 pcm->ops = &snd_pcm_ioplug_ops; in snd_pcm_ioplug_create()
1110 pcm->fast_ops = &snd_pcm_ioplug_fast_ops; in snd_pcm_ioplug_create()
1111 pcm->private_data = io; in snd_pcm_ioplug_create()
1113 snd_pcm_set_hw_ptr(pcm, &ioplug->hw_ptr, -1, 0); in snd_pcm_ioplug_create()
1114 snd_pcm_set_appl_ptr(pcm, &ioplug->appl_ptr, -1, 0); in snd_pcm_ioplug_create()
1128 return snd_pcm_close(ioplug->pcm); in snd_pcm_ioplug_delete()
1140 ioplug_priv_t *io = ioplug->pcm->private_data; in snd_pcm_ioplug_params_reset()
1157 ioplug_priv_t *io = ioplug->pcm->private_data; in snd_pcm_ioplug_set_param_list()
1181 ioplug_priv_t *io = ioplug->pcm->private_data; in snd_pcm_ioplug_set_param_minmax()
1206 ioplug->pcm->poll_fd = ioplug->poll_fd; in snd_pcm_ioplug_reinit_status()
1207 ioplug->pcm->poll_events = ioplug->poll_events; in snd_pcm_ioplug_reinit_status()
1209 ioplug->pcm->tstamp_type = SND_PCM_TSTAMP_TYPE_MONOTONIC; in snd_pcm_ioplug_reinit_status()
1211 ioplug->pcm->tstamp_type = SND_PCM_TSTAMP_TYPE_GETTIMEOFDAY; in snd_pcm_ioplug_reinit_status()
1212 ioplug->pcm->mmap_rw = ioplug->mmap_rw; in snd_pcm_ioplug_reinit_status()
1227 return snd_pcm_mmap_areas(ioplug->pcm); in snd_pcm_ioplug_mmap_areas()
1259 return __snd_pcm_avail(ioplug->pcm, hw_ptr, appl_ptr); in snd_pcm_ioplug_avail()
1281 if (user_avail > ioplug->pcm->buffer_size) { in snd_pcm_ioplug_hw_avail()
1286 return ioplug->pcm->buffer_size - user_avail; in snd_pcm_ioplug_hw_avail()