Lines Matching refs:timeri

70 	struct snd_timer_instance *timeri;
140 struct snd_timer_instance *timeri;
142 timeri = kzalloc(sizeof(*timeri), GFP_KERNEL);
143 if (timeri == NULL)
145 timeri->owner = kstrdup(owner, GFP_KERNEL);
146 if (! timeri->owner) {
147 kfree(timeri);
150 INIT_LIST_HEAD(&timeri->open_list);
151 INIT_LIST_HEAD(&timeri->active_list);
152 INIT_LIST_HEAD(&timeri->ack_list);
153 INIT_LIST_HEAD(&timeri->slave_list_head);
154 INIT_LIST_HEAD(&timeri->slave_active_head);
156 return timeri;
160 void snd_timer_instance_free(struct snd_timer_instance *timeri)
162 if (timeri) {
163 if (timeri->private_free)
164 timeri->private_free(timeri);
165 kfree(timeri->owner);
166 kfree(timeri);
282 static void snd_timer_close_locked(struct snd_timer_instance *timeri,
289 int snd_timer_open(struct snd_timer_instance *timeri,
311 timeri->slave_class = tid->dev_sclass;
312 timeri->slave_id = tid->device;
313 timeri->flags |= SNDRV_TIMER_IFLG_SLAVE;
314 list_add_tail(&timeri->open_list, &snd_timer_slave_list);
316 err = snd_timer_check_slave(timeri);
365 timeri->timer = timer;
366 timeri->slave_class = tid->dev_sclass;
367 timeri->slave_id = slave_id;
369 list_add_tail(&timeri->open_list, &timer->open_list_head);
371 err = snd_timer_check_master(timeri);
374 snd_timer_close_locked(timeri, &card_dev_to_put);
389 static void snd_timer_close_locked(struct snd_timer_instance *timeri,
392 struct snd_timer *timer = timeri->timer;
397 timeri->flags |= SNDRV_TIMER_IFLG_DEAD;
401 if (!list_empty(&timeri->open_list)) {
402 list_del_init(&timeri->open_list);
403 if (timeri->flags & SNDRV_TIMER_IFLG_SLAVE)
408 snd_timer_stop(timeri);
414 while (timeri->flags & SNDRV_TIMER_IFLG_CALLBACK) {
424 timeri->timer = NULL;
425 list_for_each_entry_safe(slave, tmp, &timeri->slave_list_head,
438 if (timeri->flags & SNDRV_TIMER_IFLG_SLAVE)
455 void snd_timer_close(struct snd_timer_instance *timeri)
459 if (snd_BUG_ON(!timeri))
463 snd_timer_close_locked(timeri, &card_dev_to_put);
479 unsigned long snd_timer_resolution(struct snd_timer_instance *timeri)
485 if (timeri == NULL)
487 timer = timeri->timer;
530 static int snd_timer_start1(struct snd_timer_instance *timeri,
537 timer = timeri->timer;
542 if (timeri->flags & SNDRV_TIMER_IFLG_DEAD) {
550 if (timeri->flags & (SNDRV_TIMER_IFLG_RUNNING |
557 timeri->ticks = timeri->cticks = ticks;
558 else if (!timeri->cticks)
559 timeri->cticks = 1;
560 timeri->pticks = 0;
562 list_move_tail(&timeri->active_list, &timer->active_list_head);
567 timeri->flags |= SNDRV_TIMER_IFLG_START;
575 timeri->flags |= SNDRV_TIMER_IFLG_RUNNING;
578 snd_timer_notify1(timeri, start ? SNDRV_TIMER_EVENT_START :
586 static int snd_timer_start_slave(struct snd_timer_instance *timeri,
593 if (timeri->flags & SNDRV_TIMER_IFLG_DEAD) {
597 if (timeri->flags & SNDRV_TIMER_IFLG_RUNNING) {
601 timeri->flags |= SNDRV_TIMER_IFLG_RUNNING;
602 if (timeri->master && timeri->timer) {
603 spin_lock(&timeri->timer->lock);
604 list_add_tail(&timeri->active_list,
605 &timeri->master->slave_active_head);
606 snd_timer_notify1(timeri, start ? SNDRV_TIMER_EVENT_START :
608 spin_unlock(&timeri->timer->lock);
617 static int snd_timer_stop1(struct snd_timer_instance *timeri, bool stop)
623 timer = timeri->timer;
627 list_del_init(&timeri->ack_list);
628 list_del_init(&timeri->active_list);
629 if (!(timeri->flags & (SNDRV_TIMER_IFLG_RUNNING |
637 timeri->cticks = timeri->ticks;
638 timeri->pticks = 0;
640 if ((timeri->flags & SNDRV_TIMER_IFLG_RUNNING) &&
652 timeri->flags &= ~(SNDRV_TIMER_IFLG_RUNNING | SNDRV_TIMER_IFLG_START);
654 timeri->flags &= ~SNDRV_TIMER_IFLG_PAUSED;
656 timeri->flags |= SNDRV_TIMER_IFLG_PAUSED;
657 snd_timer_notify1(timeri, stop ? SNDRV_TIMER_EVENT_STOP :
665 static int snd_timer_stop_slave(struct snd_timer_instance *timeri, bool stop)
671 running = timeri->flags & SNDRV_TIMER_IFLG_RUNNING;
672 timeri->flags &= ~SNDRV_TIMER_IFLG_RUNNING;
673 if (timeri->timer) {
674 spin_lock(&timeri->timer->lock);
675 list_del_init(&timeri->ack_list);
676 list_del_init(&timeri->active_list);
678 snd_timer_notify1(timeri, stop ? SNDRV_TIMER_EVENT_STOP :
680 spin_unlock(&timeri->timer->lock);
689 int snd_timer_start(struct snd_timer_instance *timeri, unsigned int ticks)
691 if (timeri == NULL || ticks < 1)
693 if (timeri->flags & SNDRV_TIMER_IFLG_SLAVE)
694 return snd_timer_start_slave(timeri, true);
696 return snd_timer_start1(timeri, true, ticks);
705 int snd_timer_stop(struct snd_timer_instance *timeri)
707 if (timeri->flags & SNDRV_TIMER_IFLG_SLAVE)
708 return snd_timer_stop_slave(timeri, true);
710 return snd_timer_stop1(timeri, true);
717 int snd_timer_continue(struct snd_timer_instance *timeri)
720 if (!(timeri->flags & SNDRV_TIMER_IFLG_PAUSED))
723 if (timeri->flags & SNDRV_TIMER_IFLG_SLAVE)
724 return snd_timer_start_slave(timeri, false);
726 return snd_timer_start1(timeri, false, 0);
733 int snd_timer_pause(struct snd_timer_instance * timeri)
735 if (timeri->flags & SNDRV_TIMER_IFLG_SLAVE)
736 return snd_timer_stop_slave(timeri, false);
738 return snd_timer_stop1(timeri, false);
1324 static void snd_timer_user_interrupt(struct snd_timer_instance *timeri,
1328 struct snd_timer_user *tu = timeri->callback_data;
1368 static void snd_timer_user_ccallback(struct snd_timer_instance *timeri,
1373 struct snd_timer_user *tu = timeri->callback_data;
1394 static void snd_timer_user_disconnect(struct snd_timer_instance *timeri)
1396 struct snd_timer_user *tu = timeri->callback_data;
1402 static void snd_timer_user_tinterrupt(struct snd_timer_instance *timeri,
1406 struct snd_timer_user *tu = timeri->callback_data;
1523 if (tu->timeri) {
1524 snd_timer_close(tu->timeri);
1525 snd_timer_instance_free(tu->timeri);
1768 if (tu->timeri) {
1769 snd_timer_close(tu->timeri);
1770 snd_timer_instance_free(tu->timeri);
1771 tu->timeri = NULL;
1780 tu->timeri = snd_timer_instance_new(str);
1781 if (!tu->timeri) {
1786 tu->timeri->flags |= SNDRV_TIMER_IFLG_FAST;
1787 tu->timeri->callback = tu->tread
1789 tu->timeri->ccallback = snd_timer_user_ccallback;
1790 tu->timeri->callback_data = (void *)tu;
1791 tu->timeri->disconnect = snd_timer_user_disconnect;
1793 err = snd_timer_open(tu->timeri, &tselect.id, current->pid);
1795 snd_timer_instance_free(tu->timeri);
1796 tu->timeri = NULL;
1812 if (!tu->timeri)
1814 t = tu->timeri->timer;
1844 if (!tu->timeri)
1846 t = tu->timeri->timer;
1860 resolution = snd_timer_resolution(tu->timeri);
1889 snd_timer_stop(tu->timeri);
1891 tu->timeri->flags &= ~(SNDRV_TIMER_IFLG_AUTO|
1895 tu->timeri->flags |= SNDRV_TIMER_IFLG_AUTO;
1897 tu->timeri->flags |= SNDRV_TIMER_IFLG_EXCLUSIVE;
1899 tu->timeri->flags |= SNDRV_TIMER_IFLG_EARLY_EVENT;
1909 if (tu->timeri->flags & SNDRV_TIMER_IFLG_EARLY_EVENT) {
1943 if (!tu->timeri)
1948 status.resolution = snd_timer_resolution(tu->timeri);
1949 status.lost = tu->timeri->lost;
1966 if (!tu->timeri)
1971 status.resolution = snd_timer_resolution(tu->timeri);
1972 status.lost = tu->timeri->lost;
1988 if (!tu->timeri)
1990 snd_timer_stop(tu->timeri);
1991 tu->timeri->lost = 0;
1993 err = snd_timer_start(tu->timeri, tu->ticks);
2005 if (!tu->timeri)
2007 err = snd_timer_stop(tu->timeri);
2019 if (!tu->timeri)
2022 if (!(tu->timeri->flags & SNDRV_TIMER_IFLG_PAUSED))
2024 tu->timeri->lost = 0;
2025 err = snd_timer_continue(tu->timeri);
2037 if (!tu->timeri)
2039 err = snd_timer_pause(tu->timeri);
2051 if (tu->timeri) /* too late */