Lines Matching refs:timeri
72 struct snd_timer_instance *timeri; member
152 struct snd_timer_instance *timeri; in snd_timer_instance_new() local
154 timeri = kzalloc(sizeof(*timeri), GFP_KERNEL); in snd_timer_instance_new()
155 if (timeri == NULL) in snd_timer_instance_new()
157 timeri->owner = kstrdup(owner, GFP_KERNEL); in snd_timer_instance_new()
158 if (! timeri->owner) { in snd_timer_instance_new()
159 kfree(timeri); in snd_timer_instance_new()
162 INIT_LIST_HEAD(&timeri->open_list); in snd_timer_instance_new()
163 INIT_LIST_HEAD(&timeri->active_list); in snd_timer_instance_new()
164 INIT_LIST_HEAD(&timeri->ack_list); in snd_timer_instance_new()
165 INIT_LIST_HEAD(&timeri->slave_list_head); in snd_timer_instance_new()
166 INIT_LIST_HEAD(&timeri->slave_active_head); in snd_timer_instance_new()
168 return timeri; in snd_timer_instance_new()
172 void snd_timer_instance_free(struct snd_timer_instance *timeri) in snd_timer_instance_free() argument
174 if (timeri) { in snd_timer_instance_free()
175 if (timeri->private_free) in snd_timer_instance_free()
176 timeri->private_free(timeri); in snd_timer_instance_free()
177 kfree(timeri->owner); in snd_timer_instance_free()
178 kfree(timeri); in snd_timer_instance_free()
292 static void snd_timer_close_locked(struct snd_timer_instance *timeri,
299 int snd_timer_open(struct snd_timer_instance *timeri, in snd_timer_open() argument
321 timeri->slave_class = tid->dev_sclass; in snd_timer_open()
322 timeri->slave_id = tid->device; in snd_timer_open()
323 timeri->flags |= SNDRV_TIMER_IFLG_SLAVE; in snd_timer_open()
324 list_add_tail(&timeri->open_list, &snd_timer_slave_list); in snd_timer_open()
326 err = snd_timer_check_slave(timeri); in snd_timer_open()
375 timeri->timer = timer; in snd_timer_open()
376 timeri->slave_class = tid->dev_sclass; in snd_timer_open()
377 timeri->slave_id = slave_id; in snd_timer_open()
379 list_add_tail(&timeri->open_list, &timer->open_list_head); in snd_timer_open()
381 err = snd_timer_check_master(timeri); in snd_timer_open()
384 snd_timer_close_locked(timeri, &card_dev_to_put); in snd_timer_open()
396 static void remove_slave_links(struct snd_timer_instance *timeri, in remove_slave_links() argument
403 timeri->timer = NULL; in remove_slave_links()
404 list_for_each_entry_safe(slave, tmp, &timeri->slave_list_head, open_list) { in remove_slave_links()
418 static void snd_timer_close_locked(struct snd_timer_instance *timeri, in snd_timer_close_locked() argument
421 struct snd_timer *timer = timeri->timer; in snd_timer_close_locked()
425 timeri->flags |= SNDRV_TIMER_IFLG_DEAD; in snd_timer_close_locked()
428 if (!list_empty(&timeri->open_list)) { in snd_timer_close_locked()
429 list_del_init(&timeri->open_list); in snd_timer_close_locked()
430 if (timeri->flags & SNDRV_TIMER_IFLG_SLAVE) in snd_timer_close_locked()
435 snd_timer_stop(timeri); in snd_timer_close_locked()
441 while (timeri->flags & SNDRV_TIMER_IFLG_CALLBACK) { in snd_timer_close_locked()
448 remove_slave_links(timeri, timer); in snd_timer_close_locked()
451 if (timeri->flags & SNDRV_TIMER_IFLG_SLAVE) in snd_timer_close_locked()
468 void snd_timer_close(struct snd_timer_instance *timeri) in snd_timer_close() argument
472 if (snd_BUG_ON(!timeri)) in snd_timer_close()
476 snd_timer_close_locked(timeri, &card_dev_to_put); in snd_timer_close()
491 unsigned long snd_timer_resolution(struct snd_timer_instance *timeri) in snd_timer_resolution() argument
496 if (timeri == NULL) in snd_timer_resolution()
498 timer = timeri->timer; in snd_timer_resolution()
540 static int snd_timer_start1(struct snd_timer_instance *timeri, in snd_timer_start1() argument
546 timer = timeri->timer; in snd_timer_start1()
551 if (timeri->flags & SNDRV_TIMER_IFLG_DEAD) in snd_timer_start1()
555 if (timeri->flags & (SNDRV_TIMER_IFLG_RUNNING | in snd_timer_start1()
568 timeri->ticks = timeri->cticks = ticks; in snd_timer_start1()
569 else if (!timeri->cticks) in snd_timer_start1()
570 timeri->cticks = 1; in snd_timer_start1()
571 timeri->pticks = 0; in snd_timer_start1()
573 list_move_tail(&timeri->active_list, &timer->active_list_head); in snd_timer_start1()
578 timeri->flags |= SNDRV_TIMER_IFLG_START; in snd_timer_start1()
586 timeri->flags |= SNDRV_TIMER_IFLG_RUNNING; in snd_timer_start1()
589 snd_timer_notify1(timeri, start ? SNDRV_TIMER_EVENT_START : in snd_timer_start1()
595 static int snd_timer_start_slave(struct snd_timer_instance *timeri, in snd_timer_start_slave() argument
599 if (timeri->flags & SNDRV_TIMER_IFLG_DEAD) in snd_timer_start_slave()
601 if (timeri->flags & SNDRV_TIMER_IFLG_RUNNING) in snd_timer_start_slave()
603 timeri->flags |= SNDRV_TIMER_IFLG_RUNNING; in snd_timer_start_slave()
604 if (timeri->master && timeri->timer) { in snd_timer_start_slave()
605 guard(spinlock)(&timeri->timer->lock); in snd_timer_start_slave()
606 list_add_tail(&timeri->active_list, in snd_timer_start_slave()
607 &timeri->master->slave_active_head); in snd_timer_start_slave()
608 snd_timer_notify1(timeri, start ? SNDRV_TIMER_EVENT_START : in snd_timer_start_slave()
615 static int snd_timer_stop1(struct snd_timer_instance *timeri, bool stop) in snd_timer_stop1() argument
619 timer = timeri->timer; in snd_timer_stop1()
623 list_del_init(&timeri->ack_list); in snd_timer_stop1()
624 list_del_init(&timeri->active_list); in snd_timer_stop1()
625 if (!(timeri->flags & (SNDRV_TIMER_IFLG_RUNNING | in snd_timer_stop1()
631 timeri->cticks = timeri->ticks; in snd_timer_stop1()
632 timeri->pticks = 0; in snd_timer_stop1()
634 if ((timeri->flags & SNDRV_TIMER_IFLG_RUNNING) && in snd_timer_stop1()
646 timeri->flags &= ~(SNDRV_TIMER_IFLG_RUNNING | SNDRV_TIMER_IFLG_START); in snd_timer_stop1()
648 timeri->flags &= ~SNDRV_TIMER_IFLG_PAUSED; in snd_timer_stop1()
650 timeri->flags |= SNDRV_TIMER_IFLG_PAUSED; in snd_timer_stop1()
651 snd_timer_notify1(timeri, stop ? SNDRV_TIMER_EVENT_STOP : in snd_timer_stop1()
657 static int snd_timer_stop_slave(struct snd_timer_instance *timeri, bool stop) in snd_timer_stop_slave() argument
662 running = timeri->flags & SNDRV_TIMER_IFLG_RUNNING; in snd_timer_stop_slave()
663 timeri->flags &= ~SNDRV_TIMER_IFLG_RUNNING; in snd_timer_stop_slave()
664 if (timeri->timer) { in snd_timer_stop_slave()
665 guard(spinlock)(&timeri->timer->lock); in snd_timer_stop_slave()
666 list_del_init(&timeri->ack_list); in snd_timer_stop_slave()
667 list_del_init(&timeri->active_list); in snd_timer_stop_slave()
669 snd_timer_notify1(timeri, stop ? SNDRV_TIMER_EVENT_STOP : in snd_timer_stop_slave()
678 int snd_timer_start(struct snd_timer_instance *timeri, unsigned int ticks) in snd_timer_start() argument
680 if (timeri == NULL || ticks < 1) in snd_timer_start()
682 if (timeri->flags & SNDRV_TIMER_IFLG_SLAVE) in snd_timer_start()
683 return snd_timer_start_slave(timeri, true); in snd_timer_start()
685 return snd_timer_start1(timeri, true, ticks); in snd_timer_start()
694 int snd_timer_stop(struct snd_timer_instance *timeri) in snd_timer_stop() argument
696 if (timeri->flags & SNDRV_TIMER_IFLG_SLAVE) in snd_timer_stop()
697 return snd_timer_stop_slave(timeri, true); in snd_timer_stop()
699 return snd_timer_stop1(timeri, true); in snd_timer_stop()
706 int snd_timer_continue(struct snd_timer_instance *timeri) in snd_timer_continue() argument
709 if (!(timeri->flags & SNDRV_TIMER_IFLG_PAUSED)) in snd_timer_continue()
712 if (timeri->flags & SNDRV_TIMER_IFLG_SLAVE) in snd_timer_continue()
713 return snd_timer_start_slave(timeri, false); in snd_timer_continue()
715 return snd_timer_start1(timeri, false, 0); in snd_timer_continue()
722 int snd_timer_pause(struct snd_timer_instance * timeri) in snd_timer_pause() argument
724 if (timeri->flags & SNDRV_TIMER_IFLG_SLAVE) in snd_timer_pause()
725 return snd_timer_stop_slave(timeri, false); in snd_timer_pause()
727 return snd_timer_stop1(timeri, false); in snd_timer_pause()
1295 static void snd_timer_user_interrupt(struct snd_timer_instance *timeri, in snd_timer_user_interrupt() argument
1299 struct snd_timer_user *tu = timeri->callback_data; in snd_timer_user_interrupt()
1338 static void snd_timer_user_ccallback(struct snd_timer_instance *timeri, in snd_timer_user_ccallback() argument
1343 struct snd_timer_user *tu = timeri->callback_data; in snd_timer_user_ccallback()
1362 static void snd_timer_user_disconnect(struct snd_timer_instance *timeri) in snd_timer_user_disconnect() argument
1364 struct snd_timer_user *tu = timeri->callback_data; in snd_timer_user_disconnect()
1370 static void snd_timer_user_tinterrupt(struct snd_timer_instance *timeri, in snd_timer_user_tinterrupt() argument
1374 struct snd_timer_user *tu = timeri->callback_data; in snd_timer_user_tinterrupt()
1487 if (tu->timeri) { in snd_timer_user_release()
1488 snd_timer_close(tu->timeri); in snd_timer_user_release()
1489 snd_timer_instance_free(tu->timeri); in snd_timer_user_release()
1713 if (tu->timeri) { in snd_timer_user_tselect()
1714 snd_timer_close(tu->timeri); in snd_timer_user_tselect()
1715 snd_timer_instance_free(tu->timeri); in snd_timer_user_tselect()
1716 tu->timeri = NULL; in snd_timer_user_tselect()
1725 tu->timeri = snd_timer_instance_new(str); in snd_timer_user_tselect()
1726 if (!tu->timeri) { in snd_timer_user_tselect()
1731 tu->timeri->flags |= SNDRV_TIMER_IFLG_FAST; in snd_timer_user_tselect()
1732 tu->timeri->callback = tu->tread in snd_timer_user_tselect()
1734 tu->timeri->ccallback = snd_timer_user_ccallback; in snd_timer_user_tselect()
1735 tu->timeri->callback_data = (void *)tu; in snd_timer_user_tselect()
1736 tu->timeri->disconnect = snd_timer_user_disconnect; in snd_timer_user_tselect()
1738 err = snd_timer_open(tu->timeri, &tselect.id, current->pid); in snd_timer_user_tselect()
1740 snd_timer_instance_free(tu->timeri); in snd_timer_user_tselect()
1741 tu->timeri = NULL; in snd_timer_user_tselect()
1756 if (!tu->timeri) in snd_timer_user_info()
1758 t = tu->timeri->timer; in snd_timer_user_info()
1786 if (!tu->timeri) in snd_timer_user_params()
1788 t = tu->timeri->timer; in snd_timer_user_params()
1802 resolution = snd_timer_resolution(tu->timeri); in snd_timer_user_params()
1831 snd_timer_stop(tu->timeri); in snd_timer_user_params()
1833 tu->timeri->flags &= ~(SNDRV_TIMER_IFLG_AUTO| in snd_timer_user_params()
1837 tu->timeri->flags |= SNDRV_TIMER_IFLG_AUTO; in snd_timer_user_params()
1839 tu->timeri->flags |= SNDRV_TIMER_IFLG_EXCLUSIVE; in snd_timer_user_params()
1841 tu->timeri->flags |= SNDRV_TIMER_IFLG_EARLY_EVENT; in snd_timer_user_params()
1851 if (tu->timeri->flags & SNDRV_TIMER_IFLG_EARLY_EVENT) { in snd_timer_user_params()
1887 if (!tu->timeri) in snd_timer_user_status32()
1892 status.resolution = snd_timer_resolution(tu->timeri); in snd_timer_user_status32()
1893 status.lost = tu->timeri->lost; in snd_timer_user_status32()
1909 if (!tu->timeri) in snd_timer_user_status64()
1914 status.resolution = snd_timer_resolution(tu->timeri); in snd_timer_user_status64()
1915 status.lost = tu->timeri->lost; in snd_timer_user_status64()
1930 if (!tu->timeri) in snd_timer_user_start()
1932 snd_timer_stop(tu->timeri); in snd_timer_user_start()
1933 tu->timeri->lost = 0; in snd_timer_user_start()
1935 err = snd_timer_start(tu->timeri, tu->ticks); in snd_timer_user_start()
1947 if (!tu->timeri) in snd_timer_user_stop()
1949 err = snd_timer_stop(tu->timeri); in snd_timer_user_stop()
1961 if (!tu->timeri) in snd_timer_user_continue()
1964 if (!(tu->timeri->flags & SNDRV_TIMER_IFLG_PAUSED)) in snd_timer_user_continue()
1966 tu->timeri->lost = 0; in snd_timer_user_continue()
1967 err = snd_timer_continue(tu->timeri); in snd_timer_user_continue()
1979 if (!tu->timeri) in snd_timer_user_pause()
1981 err = snd_timer_pause(tu->timeri); in snd_timer_user_pause()
1993 if (tu->timeri) /* too late */ in snd_timer_user_tread()