Lines Matching refs:timeri
48 struct snd_timer_instance *timeri; member
93 struct snd_timer_instance *timeri; in snd_timer_instance_new() local
94 timeri = kzalloc(sizeof(*timeri), GFP_KERNEL); in snd_timer_instance_new()
95 if (timeri == NULL) in snd_timer_instance_new()
97 timeri->owner = kstrdup(owner, GFP_KERNEL); in snd_timer_instance_new()
98 if (! timeri->owner) { in snd_timer_instance_new()
99 kfree(timeri); in snd_timer_instance_new()
102 INIT_LIST_HEAD(&timeri->open_list); in snd_timer_instance_new()
103 INIT_LIST_HEAD(&timeri->active_list); in snd_timer_instance_new()
104 INIT_LIST_HEAD(&timeri->ack_list); in snd_timer_instance_new()
105 INIT_LIST_HEAD(&timeri->slave_list_head); in snd_timer_instance_new()
106 INIT_LIST_HEAD(&timeri->slave_active_head); in snd_timer_instance_new()
108 timeri->timer = timer; in snd_timer_instance_new()
110 kfree(timeri->owner); in snd_timer_instance_new()
111 kfree(timeri); in snd_timer_instance_new()
115 return timeri; in snd_timer_instance_new()
229 static int snd_timer_close_locked(struct snd_timer_instance *timeri,
241 struct snd_timer_instance *timeri = NULL; in snd_timer_open() local
255 timeri = snd_timer_instance_new(owner, NULL); in snd_timer_open()
256 if (!timeri) { in snd_timer_open()
260 timeri->slave_class = tid->dev_sclass; in snd_timer_open()
261 timeri->slave_id = tid->device; in snd_timer_open()
262 timeri->flags |= SNDRV_TIMER_IFLG_SLAVE; in snd_timer_open()
263 list_add_tail(&timeri->open_list, &snd_timer_slave_list); in snd_timer_open()
264 err = snd_timer_check_slave(timeri); in snd_timer_open()
266 snd_timer_close_locked(timeri, &card_dev_to_put); in snd_timer_open()
267 timeri = NULL; in snd_timer_open()
299 timeri = snd_timer_instance_new(owner, timer); in snd_timer_open()
300 if (!timeri) { in snd_timer_open()
307 timeri->slave_class = tid->dev_sclass; in snd_timer_open()
308 timeri->slave_id = slave_id; in snd_timer_open()
313 kfree(timeri->owner); in snd_timer_open()
314 kfree(timeri); in snd_timer_open()
315 timeri = NULL; in snd_timer_open()
324 list_add_tail(&timeri->open_list, &timer->open_list_head); in snd_timer_open()
326 err = snd_timer_check_master(timeri); in snd_timer_open()
328 snd_timer_close_locked(timeri, &card_dev_to_put); in snd_timer_open()
329 timeri = NULL; in snd_timer_open()
337 *ti = timeri; in snd_timer_open()
346 static int snd_timer_close_locked(struct snd_timer_instance *timeri, in snd_timer_close_locked() argument
349 struct snd_timer *timer = timeri->timer; in snd_timer_close_locked()
354 timeri->flags |= SNDRV_TIMER_IFLG_DEAD; in snd_timer_close_locked()
358 list_del(&timeri->open_list); in snd_timer_close_locked()
361 snd_timer_stop(timeri); in snd_timer_close_locked()
367 while (timeri->flags & SNDRV_TIMER_IFLG_CALLBACK) { in snd_timer_close_locked()
377 list_for_each_entry_safe(slave, tmp, &timeri->slave_list_head, in snd_timer_close_locked()
390 if (timeri->flags & SNDRV_TIMER_IFLG_SLAVE) in snd_timer_close_locked()
394 if (timeri->private_free) in snd_timer_close_locked()
395 timeri->private_free(timeri); in snd_timer_close_locked()
396 kfree(timeri->owner); in snd_timer_close_locked()
397 kfree(timeri); in snd_timer_close_locked()
414 int snd_timer_close(struct snd_timer_instance *timeri) in snd_timer_close() argument
419 if (snd_BUG_ON(!timeri)) in snd_timer_close()
423 err = snd_timer_close_locked(timeri, &card_dev_to_put); in snd_timer_close()
440 unsigned long snd_timer_resolution(struct snd_timer_instance *timeri) in snd_timer_resolution() argument
446 if (timeri == NULL) in snd_timer_resolution()
448 timer = timeri->timer; in snd_timer_resolution()
490 static int snd_timer_start1(struct snd_timer_instance *timeri, in snd_timer_start1() argument
497 timer = timeri->timer; in snd_timer_start1()
502 if (timeri->flags & SNDRV_TIMER_IFLG_DEAD) { in snd_timer_start1()
510 if (timeri->flags & (SNDRV_TIMER_IFLG_RUNNING | in snd_timer_start1()
517 timeri->ticks = timeri->cticks = ticks; in snd_timer_start1()
518 else if (!timeri->cticks) in snd_timer_start1()
519 timeri->cticks = 1; in snd_timer_start1()
520 timeri->pticks = 0; in snd_timer_start1()
522 list_move_tail(&timeri->active_list, &timer->active_list_head); in snd_timer_start1()
527 timeri->flags |= SNDRV_TIMER_IFLG_START; in snd_timer_start1()
535 timeri->flags |= SNDRV_TIMER_IFLG_RUNNING; in snd_timer_start1()
538 snd_timer_notify1(timeri, start ? SNDRV_TIMER_EVENT_START : in snd_timer_start1()
546 static int snd_timer_start_slave(struct snd_timer_instance *timeri, in snd_timer_start_slave() argument
553 if (timeri->flags & SNDRV_TIMER_IFLG_DEAD) { in snd_timer_start_slave()
557 if (timeri->flags & SNDRV_TIMER_IFLG_RUNNING) { in snd_timer_start_slave()
561 timeri->flags |= SNDRV_TIMER_IFLG_RUNNING; in snd_timer_start_slave()
562 if (timeri->master && timeri->timer) { in snd_timer_start_slave()
563 spin_lock(&timeri->timer->lock); in snd_timer_start_slave()
564 list_add_tail(&timeri->active_list, in snd_timer_start_slave()
565 &timeri->master->slave_active_head); in snd_timer_start_slave()
566 snd_timer_notify1(timeri, start ? SNDRV_TIMER_EVENT_START : in snd_timer_start_slave()
568 spin_unlock(&timeri->timer->lock); in snd_timer_start_slave()
577 static int snd_timer_stop1(struct snd_timer_instance *timeri, bool stop) in snd_timer_stop1() argument
583 timer = timeri->timer; in snd_timer_stop1()
587 if (!(timeri->flags & (SNDRV_TIMER_IFLG_RUNNING | in snd_timer_stop1()
592 list_del_init(&timeri->ack_list); in snd_timer_stop1()
593 list_del_init(&timeri->active_list); in snd_timer_stop1()
597 timeri->cticks = timeri->ticks; in snd_timer_stop1()
598 timeri->pticks = 0; in snd_timer_stop1()
600 if ((timeri->flags & SNDRV_TIMER_IFLG_RUNNING) && in snd_timer_stop1()
612 timeri->flags &= ~(SNDRV_TIMER_IFLG_RUNNING | SNDRV_TIMER_IFLG_START); in snd_timer_stop1()
614 timeri->flags &= ~SNDRV_TIMER_IFLG_PAUSED; in snd_timer_stop1()
616 timeri->flags |= SNDRV_TIMER_IFLG_PAUSED; in snd_timer_stop1()
617 snd_timer_notify1(timeri, stop ? SNDRV_TIMER_EVENT_STOP : in snd_timer_stop1()
625 static int snd_timer_stop_slave(struct snd_timer_instance *timeri, bool stop) in snd_timer_stop_slave() argument
630 if (!(timeri->flags & SNDRV_TIMER_IFLG_RUNNING)) { in snd_timer_stop_slave()
634 timeri->flags &= ~SNDRV_TIMER_IFLG_RUNNING; in snd_timer_stop_slave()
635 if (timeri->timer) { in snd_timer_stop_slave()
636 spin_lock(&timeri->timer->lock); in snd_timer_stop_slave()
637 list_del_init(&timeri->ack_list); in snd_timer_stop_slave()
638 list_del_init(&timeri->active_list); in snd_timer_stop_slave()
639 snd_timer_notify1(timeri, stop ? SNDRV_TIMER_EVENT_STOP : in snd_timer_stop_slave()
641 spin_unlock(&timeri->timer->lock); in snd_timer_stop_slave()
650 int snd_timer_start(struct snd_timer_instance *timeri, unsigned int ticks) in snd_timer_start() argument
652 if (timeri == NULL || ticks < 1) in snd_timer_start()
654 if (timeri->flags & SNDRV_TIMER_IFLG_SLAVE) in snd_timer_start()
655 return snd_timer_start_slave(timeri, true); in snd_timer_start()
657 return snd_timer_start1(timeri, true, ticks); in snd_timer_start()
666 int snd_timer_stop(struct snd_timer_instance *timeri) in snd_timer_stop() argument
668 if (timeri->flags & SNDRV_TIMER_IFLG_SLAVE) in snd_timer_stop()
669 return snd_timer_stop_slave(timeri, true); in snd_timer_stop()
671 return snd_timer_stop1(timeri, true); in snd_timer_stop()
678 int snd_timer_continue(struct snd_timer_instance *timeri) in snd_timer_continue() argument
681 if (!(timeri->flags & SNDRV_TIMER_IFLG_PAUSED)) in snd_timer_continue()
684 if (timeri->flags & SNDRV_TIMER_IFLG_SLAVE) in snd_timer_continue()
685 return snd_timer_start_slave(timeri, false); in snd_timer_continue()
687 return snd_timer_start1(timeri, false, 0); in snd_timer_continue()
694 int snd_timer_pause(struct snd_timer_instance * timeri) in snd_timer_pause() argument
696 if (timeri->flags & SNDRV_TIMER_IFLG_SLAVE) in snd_timer_pause()
697 return snd_timer_stop_slave(timeri, false); in snd_timer_pause()
699 return snd_timer_stop1(timeri, false); in snd_timer_pause()
1282 static void snd_timer_user_interrupt(struct snd_timer_instance *timeri, in snd_timer_user_interrupt() argument
1286 struct snd_timer_user *tu = timeri->callback_data; in snd_timer_user_interrupt()
1326 static void snd_timer_user_ccallback(struct snd_timer_instance *timeri, in snd_timer_user_ccallback() argument
1331 struct snd_timer_user *tu = timeri->callback_data; in snd_timer_user_ccallback()
1351 static void snd_timer_user_disconnect(struct snd_timer_instance *timeri) in snd_timer_user_disconnect() argument
1353 struct snd_timer_user *tu = timeri->callback_data; in snd_timer_user_disconnect()
1359 static void snd_timer_user_tinterrupt(struct snd_timer_instance *timeri, in snd_timer_user_tinterrupt() argument
1363 struct snd_timer_user *tu = timeri->callback_data; in snd_timer_user_tinterrupt()
1477 if (tu->timeri) in snd_timer_user_release()
1478 snd_timer_close(tu->timeri); in snd_timer_user_release()
1717 if (tu->timeri) { in snd_timer_user_tselect()
1718 snd_timer_close(tu->timeri); in snd_timer_user_tselect()
1719 tu->timeri = NULL; in snd_timer_user_tselect()
1728 err = snd_timer_open(&tu->timeri, str, &tselect.id, current->pid); in snd_timer_user_tselect()
1732 tu->timeri->flags |= SNDRV_TIMER_IFLG_FAST; in snd_timer_user_tselect()
1733 tu->timeri->callback = tu->tread in snd_timer_user_tselect()
1735 tu->timeri->ccallback = snd_timer_user_ccallback; in snd_timer_user_tselect()
1736 tu->timeri->callback_data = (void *)tu; in snd_timer_user_tselect()
1737 tu->timeri->disconnect = snd_timer_user_disconnect; in snd_timer_user_tselect()
1752 if (!tu->timeri) in snd_timer_user_info()
1754 t = tu->timeri->timer; in snd_timer_user_info()
1782 if (!tu->timeri) in snd_timer_user_params()
1784 t = tu->timeri->timer; in snd_timer_user_params()
1798 resolution = snd_timer_resolution(tu->timeri); in snd_timer_user_params()
1827 snd_timer_stop(tu->timeri); in snd_timer_user_params()
1829 tu->timeri->flags &= ~(SNDRV_TIMER_IFLG_AUTO| in snd_timer_user_params()
1833 tu->timeri->flags |= SNDRV_TIMER_IFLG_AUTO; in snd_timer_user_params()
1835 tu->timeri->flags |= SNDRV_TIMER_IFLG_EXCLUSIVE; in snd_timer_user_params()
1837 tu->timeri->flags |= SNDRV_TIMER_IFLG_EARLY_EVENT; in snd_timer_user_params()
1847 if (tu->timeri->flags & SNDRV_TIMER_IFLG_EARLY_EVENT) { in snd_timer_user_params()
1881 if (!tu->timeri) in snd_timer_user_status()
1885 status.resolution = snd_timer_resolution(tu->timeri); in snd_timer_user_status()
1886 status.lost = tu->timeri->lost; in snd_timer_user_status()
1902 if (!tu->timeri) in snd_timer_user_start()
1904 snd_timer_stop(tu->timeri); in snd_timer_user_start()
1905 tu->timeri->lost = 0; in snd_timer_user_start()
1907 err = snd_timer_start(tu->timeri, tu->ticks); in snd_timer_user_start()
1919 if (!tu->timeri) in snd_timer_user_stop()
1921 err = snd_timer_stop(tu->timeri); in snd_timer_user_stop()
1933 if (!tu->timeri) in snd_timer_user_continue()
1936 if (!(tu->timeri->flags & SNDRV_TIMER_IFLG_PAUSED)) in snd_timer_user_continue()
1938 tu->timeri->lost = 0; in snd_timer_user_continue()
1939 err = snd_timer_continue(tu->timeri); in snd_timer_user_continue()
1951 if (!tu->timeri) in snd_timer_user_pause()
1953 err = snd_timer_pause(tu->timeri); in snd_timer_user_pause()
1983 if (tu->timeri) /* too late */ in __snd_timer_user_ioctl()