• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/ap/gpl/iserver/alsa-lib-1.0.26/src/pcm/

Lines Matching refs:hw

115 #define FAST_PCM_STATE(hw) \
116 ((enum sndrv_pcm_state) (hw)->mmap_status->state)
117 #define FAST_PCM_TSTAMP(hw) \
118 ((hw)->mmap_status->tstamp)
123 snd_pcm_hw_t *hw = pcm->private_data;
124 res = FAST_PCM_TSTAMP(hw);
125 if (SNDRV_PROTOCOL_VERSION(2, 0, 5) > hw->version)
131 static int sync_ptr1(snd_pcm_hw_t *hw, unsigned int flags)
134 hw->sync_ptr->flags = flags;
135 err = ioctl((hw)->fd, SNDRV_PCM_IOCTL_SYNC_PTR, (hw)->sync_ptr);
144 static inline int sync_ptr(snd_pcm_hw_t *hw, unsigned int flags)
146 return hw->sync_ptr ? sync_ptr1(hw, flags) : 0;
149 static int snd_pcm_hw_clear_timer_queue(snd_pcm_hw_t *hw)
151 if (hw->period_timer_need_poll) {
152 while (poll(&hw->period_timer_pfd, 1, 0) > 0) {
154 snd_timer_read(hw->period_timer, rbuf, sizeof(rbuf));
158 snd_timer_read(hw->period_timer, rbuf, sizeof(rbuf));
170 snd_pcm_hw_t *hw = pcm->private_data;
174 pfds[0].fd = hw->fd;
176 pfds[1].fd = hw->period_timer_pfd.fd;
183 snd_pcm_hw_t *hw = pcm->private_data;
186 if (nfds != 2 || pfds[0].fd != hw->fd || pfds[1].fd != hw->period_timer_pfd.fd)
190 snd_pcm_hw_clear_timer_queue(hw);
200 snd_pcm_hw_t *hw = pcm->private_data;
201 int fd = hw->fd, err;
223 snd_pcm_hw_t *hw = pcm->private_data;
224 int fd = hw->fd, err;
257 snd_pcm_hw_t *hw = pcm->private_data;
258 int fd = hw->fd, err;
277 snd_pcm_hw_t *hw = pcm->private_data;
280 if (hw->format != SND_PCM_FORMAT_UNKNOWN) {
281 err = _snd_pcm_hw_params_set_format(params, hw->format);
285 if (hw->channels > 0) {
287 hw->channels, 0);
291 if (hw->rate > 0) {
293 hw->rate, 0, hw->rate + 1, -1);
298 if (hw_refine_call(hw, params) < 0) {
322 snd_pcm_hw_t *hw = pcm->private_data;
324 if (hw_params_call(hw, params) < 0) {
331 err = sync_ptr(hw, 0);
335 snd_pcm_set_appl_ptr(pcm, &hw->mmap_control->appl_ptr, hw->fd,
341 static void snd_pcm_hw_close_timer(snd_pcm_hw_t *hw)
343 if (hw->period_timer) {
344 snd_timer_close(hw->period_timer);
345 hw->period_timer = NULL;
351 snd_pcm_hw_t *hw = pcm->private_data;
358 err = snd_timer_hw_open(&hw->period_timer, "hw-pcm-period-event", SND_TIMER_CLASS_PCM, SND_TIMER_SCLASS_NONE, hw->card, hw->device, (hw->subdevice << 1) | (pcm->stream & 1), SND_TIMER_OPEN_NONBLOCK | SND_TIMER_OPEN_TREAD);
360 err = snd_timer_hw_open(&hw->period_timer, "hw-pcm-period-event", SND_TIMER_CLASS_PCM, SND_TIMER_SCLASS_NONE, hw->card, hw->device, (hw->subdevice << 1) | (pcm->stream & 1), SND_TIMER_OPEN_NONBLOCK);
363 if (snd_timer_poll_descriptors_count(hw->period_timer) != 1) {
364 snd_pcm_hw_close_timer(hw);
367 hw->period_timer_pfd.events = POLLIN;
368 hw->period_timer_pfd.revents = 0;
369 snd_timer_poll_descriptors(hw->period_timer, &hw->period_timer_pfd, 1);
370 hw->period_timer_need_poll = 0;
378 ioctl(hw->period_timer_pfd.fd, SNDRV_TIMER_IOCTL_PVERSION, &ver);
384 hw->period_timer_need_poll = 1;
398 err = snd_timer_params(hw->period_timer, params);
400 snd_pcm_hw_close_timer(hw);
403 err = snd_timer_start(hw->period_timer);
405 snd_pcm_hw_close_timer(hw);
410 snd_pcm_hw_close_timer(hw);
412 hw->period_event = 0;
419 snd_pcm_hw_t *hw = pcm->private_data;
420 int fd = hw->fd, err;
432 snd_pcm_hw_t *hw = pcm->private_data;
433 int fd = hw->fd, err;
442 old_period_event == hw->period_event) {
443 hw->mmap_control->avail_min = params->avail_min;
444 return sync_ptr(hw, 0);
452 hw->mmap_control->avail_min = params->avail_min;
453 if (hw->period_event != old_period_event) {
457 hw->period_event = old_period_event;
464 snd_pcm_hw_t *hw = pcm->private_data;
466 int fd = hw->fd, err;
485 snd_pcm_hw_t *hw = pcm->private_data;
486 int fd = hw->fd, err;
492 if (SNDRV_PROTOCOL_VERSION(2, 0, 5) > hw->version) {
501 snd_pcm_hw_t *hw = pcm->private_data;
502 int err = sync_ptr(hw, 0);
505 return (snd_pcm_state_t) hw->mmap_status->state;
510 snd_pcm_hw_t *hw = pcm->private_data;
511 int fd = hw->fd, err;
522 snd_pcm_hw_t *hw = pcm->private_data;
523 int fd = hw->fd, err;
524 if (SNDRV_PROTOCOL_VERSION(2, 0, 3) <= hw->version) {
525 if (hw->sync_ptr) {
526 err = sync_ptr1(hw, SNDRV_PCM_SYNC_PTR_HWSYNC);
540 switch (FAST_PCM_STATE(hw)) {
554 snd_pcm_hw_t *hw = pcm->private_data;
555 int fd = hw->fd, err;
561 return sync_ptr(hw, SNDRV_PCM_SYNC_PTR_APPL);
566 snd_pcm_hw_t *hw = pcm->private_data;
567 int fd = hw->fd, err;
573 return sync_ptr(hw, SNDRV_PCM_SYNC_PTR_APPL);
578 snd_pcm_hw_t *hw = pcm->private_data;
584 sync_ptr(hw, 0);
585 if (ioctl(hw->fd, SNDRV_PCM_IOCTL_START) < 0) {
599 snd_pcm_hw_t *hw = pcm->private_data;
601 if (ioctl(hw->fd, SNDRV_PCM_IOCTL_DROP) < 0) {
612 snd_pcm_hw_t *hw = pcm->private_data;
614 if (ioctl(hw->fd, SNDRV_PCM_IOCTL_DRAIN) < 0) {
624 snd_pcm_hw_t *hw = pcm->private_data;
626 if (ioctl(hw->fd, SNDRV_PCM_IOCTL_PAUSE, enable) < 0) {
641 snd_pcm_hw_t *hw = pcm->private_data;
643 if (ioctl(hw->fd, SNDRV_PCM_IOCTL_REWIND, &frames) < 0) {
648 err = sync_ptr(hw, SNDRV_PCM_SYNC_PTR_APPL);
661 snd_pcm_hw_t *hw = pcm->private_data;
663 if (SNDRV_PROTOCOL_VERSION(2, 0, 4) <= hw->version) {
664 if (ioctl(hw->fd, SNDRV_PCM_IOCTL_FORWARD, &frames) < 0) {
669 err = sync_ptr(hw, SNDRV_PCM_SYNC_PTR_APPL);
676 err = sync_ptr(hw, SNDRV_PCM_SYNC_PTR_HWSYNC);
679 switch (FAST_PCM_STATE(hw)) {
696 err = sync_ptr(hw, 0);
705 snd_pcm_hw_t *hw = pcm->private_data;
706 int fd = hw->fd, err;
747 snd_pcm_hw_t *hw = pcm->private_data;
749 if (ioctl(hw->fd, SNDRV_PCM_IOCTL_UNLINK) < 0) {
759 snd_pcm_hw_t *hw = pcm->private_data;
760 int fd = hw->fd;
766 err = err >= 0 ? sync_ptr(hw, SNDRV_PCM_SYNC_PTR_APPL) : -errno;
778 snd_pcm_hw_t *hw = pcm->private_data;
779 int fd = hw->fd;
785 err = err >= 0 ? sync_ptr(hw, SNDRV_PCM_SYNC_PTR_APPL) : -errno;
797 snd_pcm_hw_t *hw = pcm->private_data;
798 int fd = hw->fd;
804 err = err >= 0 ? sync_ptr(hw, SNDRV_PCM_SYNC_PTR_APPL) : -errno;
816 snd_pcm_hw_t *hw = pcm->private_data;
817 int fd = hw->fd;
823 err = err >= 0 ? sync_ptr(hw, SNDRV_PCM_SYNC_PTR_APPL) : -errno;
834 snd_pcm_hw_t *hw = pcm->private_data;
839 if (hw->sync_ptr_ioctl == 0)
842 hw->fd, SNDRV_PCM_MMAP_OFFSET_STATUS);
847 err = ioctl(hw->fd, SNDRV_PCM_IOCTL_SYNC_PTR, &sync_ptr);
853 hw->sync_ptr = calloc(1, sizeof(struct sndrv_pcm_sync_ptr));
854 if (hw->sync_ptr == NULL)
856 hw->mmap_status = &hw->sync_ptr->s.status;
857 hw->mmap_control = &hw->sync_ptr->c.control;
858 hw->sync_ptr_ioctl = 1;
860 hw->mmap_status = ptr;
862 snd_pcm_set_hw_ptr(pcm, &hw->mmap_status->hw_ptr, hw->fd, SNDRV_PCM_MMAP_OFFSET_STATUS + offsetof(struct sndrv_pcm_mmap_status, hw_ptr));
868 snd_pcm_hw_t *hw = pcm->private_data;
871 if (hw->sync_ptr == NULL) {
874 hw->fd, SNDRV_PCM_MMAP_OFFSET_CONTROL);
880 hw->mmap_control = ptr;
882 hw->mmap_control->avail_min = 1;
884 snd_pcm_set_appl_ptr(pcm, &hw->mmap_control->appl_ptr, hw->fd, SNDRV_PCM_MMAP_OFFSET_CONTROL);
890 snd_pcm_hw_t *hw = pcm->private_data;
892 if (hw->sync_ptr_ioctl) {
893 free(hw->sync_ptr);
894 hw->sync_ptr = NULL;
896 if (munmap((void*)hw->mmap_status, page_align(sizeof(*hw->mmap_status))) < 0) {
907 snd_pcm_hw_t *hw = pcm->private_data;
909 if (hw->sync_ptr_ioctl) {
910 free(hw->sync_ptr);
911 hw->sync_ptr = NULL;
913 if (munmap(hw->mmap_control, page_align(sizeof(*hw->mmap_control))) < 0) {
934 snd_pcm_hw_t *hw = pcm->private_data;
936 if (close(hw->fd)) {
942 free(hw);
950 snd_pcm_hw_t *hw = pcm->private_data;
953 sync_ptr(hw, 0);
955 fprintf(stderr, "appl_forward: hw_ptr = %li, appl_ptr = %li, size = %li\n", *pcm->hw.ptr, *pcm->appl.ptr, size);
962 snd_pcm_hw_t *hw = pcm->private_data;
965 sync_ptr(hw, 0);
967 switch (FAST_PCM_STATE(hw)) {
971 if (SNDRV_PROTOCOL_VERSION(2, 0, 1) <= hw->version) {
972 if (ioctl(hw->fd, SNDRV_PCM_IOCTL_XRUN) < 0)
1009 snd_pcm_hw_t *hw = pcm->private_data;
1011 int err = snd_card_get_name(hw->card, &name);
1017 hw->card, name, hw->device, hw->subdevice);
1022 snd_output_printf(out, " appl_ptr : %li\n", hw->mmap_control->appl_ptr);
1023 snd_output_printf(out, " hw_ptr : %li\n", hw->mmap_status->hw_ptr);
1105 * \brief Creates a new hw PCM
1123 snd_pcm_hw_t *hw = NULL;
1181 hw = calloc(1, sizeof(snd_pcm_hw_t));
1182 if (!hw) {
1187 hw->version = ver;
1188 hw->card = info.card;
1189 hw->device = info.device;
1190 hw->subdevice = info.subdevice;
1191 hw->fd = fd;
1192 hw->sync_ptr_ioctl = sync_ptr_ioctl;
1194 hw->format = SND_PCM_FORMAT_UNKNOWN;
1195 hw->rate = 0;
1196 hw->channels = 0;
1200 free(hw);
1207 pcm->private_data = hw;
1228 * \brief Creates a new hw PCM
1317 \section pcm_plugins_hw Plugin: hw
1331 type hw # Kernel PCM
1353 * \brief Creates a new hw PCM
1357 * \param conf Configuration node with hw PCM description
1376 snd_pcm_hw_t *hw;
1490 hw = (*pcmp)->private_data;
1492 hw->format = format;
1494 hw->channels = channels;
1496 hw->rate = rate;