1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Timers abstract layer
4 * Copyright (c) by Jaroslav Kysela <perex@perex.cz>
7 #include <linux/delay.h>
8 #include <linux/init.h>
9 #include <linux/slab.h>
10 #include <linux/time.h>
11 #include <linux/mutex.h>
12 #include <linux/device.h>
13 #include <linux/module.h>
14 #include <linux/string.h>
15 #include <linux/sched/signal.h>
16 #include <sound/core.h>
17 #include <sound/timer.h>
18 #include <sound/control.h>
19 #include <sound/info.h>
20 #include <sound/minors.h>
21 #include <sound/initval.h>
22 #include <linux/kmod.h>
25 #define SNDRV_TIMER_IFLG_PAUSED 0x00010000
26 #define SNDRV_TIMER_IFLG_DEAD 0x00020000
28 #if IS_ENABLED(CONFIG_SND_HRTIMER)
29 #define DEFAULT_TIMER_LIMIT 4
31 #define DEFAULT_TIMER_LIMIT 1
34 static int timer_limit
= DEFAULT_TIMER_LIMIT
;
35 static int timer_tstamp_monotonic
= 1;
36 MODULE_AUTHOR("Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.de>");
37 MODULE_DESCRIPTION("ALSA timer interface");
38 MODULE_LICENSE("GPL");
39 module_param(timer_limit
, int, 0444);
40 MODULE_PARM_DESC(timer_limit
, "Maximum global timers in system.");
41 module_param(timer_tstamp_monotonic
, int, 0444);
42 MODULE_PARM_DESC(timer_tstamp_monotonic
, "Use posix monotonic clock source for timestamps (default).");
44 MODULE_ALIAS_CHARDEV(CONFIG_SND_MAJOR
, SNDRV_MINOR_TIMER
);
45 MODULE_ALIAS("devname:snd/timer");
47 enum timer_tread_format
{
48 TREAD_FORMAT_NONE
= 0,
53 struct snd_timer_tread32
{
60 struct snd_timer_tread64
{
69 struct snd_timer_user
{
70 struct snd_timer_instance
*timeri
;
71 int tread
; /* enhanced read with timestamps and events */
73 unsigned long overrun
;
79 struct snd_timer_read
*queue
;
80 struct snd_timer_tread64
*tqueue
;
82 unsigned long last_resolution
;
84 struct timespec64 tstamp
; /* trigger tstamp */
85 wait_queue_head_t qchange_sleep
;
86 struct fasync_struct
*fasync
;
87 struct mutex ioctl_lock
;
90 struct snd_timer_status32
{
91 s32 tstamp_sec
; /* Timestamp - last update */
93 unsigned int resolution
; /* current period resolution in ns */
94 unsigned int lost
; /* counter of master tick lost */
95 unsigned int overrun
; /* count of read queue overruns */
96 unsigned int queue
; /* used queue size */
97 unsigned char reserved
[64]; /* reserved */
100 #define SNDRV_TIMER_IOCTL_STATUS32 _IOR('T', 0x14, struct snd_timer_status32)
102 struct snd_timer_status64
{
103 s64 tstamp_sec
; /* Timestamp - last update */
105 unsigned int resolution
; /* current period resolution in ns */
106 unsigned int lost
; /* counter of master tick lost */
107 unsigned int overrun
; /* count of read queue overruns */
108 unsigned int queue
; /* used queue size */
109 unsigned char reserved
[64]; /* reserved */
112 #define SNDRV_TIMER_IOCTL_STATUS64 _IOR('T', 0x14, struct snd_timer_status64)
115 static LIST_HEAD(snd_timer_list
);
117 /* list of slave instances */
118 static LIST_HEAD(snd_timer_slave_list
);
120 /* lock for slave active lists */
121 static DEFINE_SPINLOCK(slave_active_lock
);
123 #define MAX_SLAVE_INSTANCES 1000
124 static int num_slaves
;
126 static DEFINE_MUTEX(register_mutex
);
128 static int snd_timer_free(struct snd_timer
*timer
);
129 static int snd_timer_dev_free(struct snd_device
*device
);
130 static int snd_timer_dev_register(struct snd_device
*device
);
131 static int snd_timer_dev_disconnect(struct snd_device
*device
);
133 static void snd_timer_reschedule(struct snd_timer
* timer
, unsigned long ticks_left
);
136 * create a timer instance with the given owner string.
138 struct snd_timer_instance
*snd_timer_instance_new(const char *owner
)
140 struct snd_timer_instance
*timeri
;
142 timeri
= kzalloc(sizeof(*timeri
), GFP_KERNEL
);
145 timeri
->owner
= kstrdup(owner
, GFP_KERNEL
);
146 if (! timeri
->owner
) {
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
);
158 EXPORT_SYMBOL(snd_timer_instance_new
);
160 void snd_timer_instance_free(struct snd_timer_instance
*timeri
)
163 if (timeri
->private_free
)
164 timeri
->private_free(timeri
);
165 kfree(timeri
->owner
);
169 EXPORT_SYMBOL(snd_timer_instance_free
);
172 * find a timer instance from the given timer id
174 static struct snd_timer
*snd_timer_find(struct snd_timer_id
*tid
)
176 struct snd_timer
*timer
;
178 list_for_each_entry(timer
, &snd_timer_list
, device_list
) {
179 if (timer
->tmr_class
!= tid
->dev_class
)
181 if ((timer
->tmr_class
== SNDRV_TIMER_CLASS_CARD
||
182 timer
->tmr_class
== SNDRV_TIMER_CLASS_PCM
) &&
183 (timer
->card
== NULL
||
184 timer
->card
->number
!= tid
->card
))
186 if (timer
->tmr_device
!= tid
->device
)
188 if (timer
->tmr_subdevice
!= tid
->subdevice
)
195 #ifdef CONFIG_MODULES
197 static void snd_timer_request(struct snd_timer_id
*tid
)
199 switch (tid
->dev_class
) {
200 case SNDRV_TIMER_CLASS_GLOBAL
:
201 if (tid
->device
< timer_limit
)
202 request_module("snd-timer-%i", tid
->device
);
204 case SNDRV_TIMER_CLASS_CARD
:
205 case SNDRV_TIMER_CLASS_PCM
:
206 if (tid
->card
< snd_ecards_limit
)
207 request_module("snd-card-%i", tid
->card
);
216 /* move the slave if it belongs to the master; return 1 if match */
217 static int check_matching_master_slave(struct snd_timer_instance
*master
,
218 struct snd_timer_instance
*slave
)
220 if (slave
->slave_class
!= master
->slave_class
||
221 slave
->slave_id
!= master
->slave_id
)
223 if (master
->timer
->num_instances
>= master
->timer
->max_instances
)
225 list_move_tail(&slave
->open_list
, &master
->slave_list_head
);
226 master
->timer
->num_instances
++;
227 spin_lock_irq(&slave_active_lock
);
228 spin_lock(&master
->timer
->lock
);
229 slave
->master
= master
;
230 slave
->timer
= master
->timer
;
231 if (slave
->flags
& SNDRV_TIMER_IFLG_RUNNING
)
232 list_add_tail(&slave
->active_list
, &master
->slave_active_head
);
233 spin_unlock(&master
->timer
->lock
);
234 spin_unlock_irq(&slave_active_lock
);
239 * look for a master instance matching with the slave id of the given slave.
240 * when found, relink the open_link of the slave.
242 * call this with register_mutex down.
244 static int snd_timer_check_slave(struct snd_timer_instance
*slave
)
246 struct snd_timer
*timer
;
247 struct snd_timer_instance
*master
;
250 /* FIXME: it's really dumb to look up all entries.. */
251 list_for_each_entry(timer
, &snd_timer_list
, device_list
) {
252 list_for_each_entry(master
, &timer
->open_list_head
, open_list
) {
253 err
= check_matching_master_slave(master
, slave
);
254 if (err
!= 0) /* match found or error */
259 return err
< 0 ? err
: 0;
263 * look for slave instances matching with the slave id of the given master.
264 * when found, relink the open_link of slaves.
266 * call this with register_mutex down.
268 static int snd_timer_check_master(struct snd_timer_instance
*master
)
270 struct snd_timer_instance
*slave
, *tmp
;
273 /* check all pending slaves */
274 list_for_each_entry_safe(slave
, tmp
, &snd_timer_slave_list
, open_list
) {
275 err
= check_matching_master_slave(master
, slave
);
279 return err
< 0 ? err
: 0;
282 static void snd_timer_close_locked(struct snd_timer_instance
*timeri
,
283 struct device
**card_devp_to_put
);
286 * open a timer instance
287 * when opening a master, the slave id must be here given.
289 int snd_timer_open(struct snd_timer_instance
*timeri
,
290 struct snd_timer_id
*tid
,
291 unsigned int slave_id
)
293 struct snd_timer
*timer
;
294 struct device
*card_dev_to_put
= NULL
;
297 mutex_lock(®ister_mutex
);
298 if (tid
->dev_class
== SNDRV_TIMER_CLASS_SLAVE
) {
299 /* open a slave instance */
300 if (tid
->dev_sclass
<= SNDRV_TIMER_SCLASS_NONE
||
301 tid
->dev_sclass
> SNDRV_TIMER_SCLASS_OSS_SEQUENCER
) {
302 pr_debug("ALSA: timer: invalid slave class %i\n",
307 if (num_slaves
>= MAX_SLAVE_INSTANCES
) {
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
);
320 /* open a master instance */
321 timer
= snd_timer_find(tid
);
322 #ifdef CONFIG_MODULES
324 mutex_unlock(®ister_mutex
);
325 snd_timer_request(tid
);
326 mutex_lock(®ister_mutex
);
327 timer
= snd_timer_find(tid
);
334 if (!list_empty(&timer
->open_list_head
)) {
335 struct snd_timer_instance
*t
=
336 list_entry(timer
->open_list_head
.next
,
337 struct snd_timer_instance
, open_list
);
338 if (t
->flags
& SNDRV_TIMER_IFLG_EXCLUSIVE
) {
343 if (timer
->num_instances
>= timer
->max_instances
) {
347 if (!try_module_get(timer
->module
)) {
351 /* take a card refcount for safe disconnection */
353 get_device(&timer
->card
->card_dev
);
354 card_dev_to_put
= &timer
->card
->card_dev
;
357 if (list_empty(&timer
->open_list_head
) && timer
->hw
.open
) {
358 err
= timer
->hw
.open(timer
);
360 module_put(timer
->module
);
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
);
370 timer
->num_instances
++;
371 err
= snd_timer_check_master(timeri
);
374 snd_timer_close_locked(timeri
, &card_dev_to_put
);
377 mutex_unlock(®ister_mutex
);
378 /* put_device() is called after unlock for avoiding deadlock */
379 if (err
< 0 && card_dev_to_put
)
380 put_device(card_dev_to_put
);
383 EXPORT_SYMBOL(snd_timer_open
);
386 * close a timer instance
387 * call this with register_mutex down.
389 static void snd_timer_close_locked(struct snd_timer_instance
*timeri
,
390 struct device
**card_devp_to_put
)
392 struct snd_timer
*timer
= timeri
->timer
;
393 struct snd_timer_instance
*slave
, *tmp
;
396 spin_lock_irq(&timer
->lock
);
397 timeri
->flags
|= SNDRV_TIMER_IFLG_DEAD
;
398 spin_unlock_irq(&timer
->lock
);
401 if (!list_empty(&timeri
->open_list
)) {
402 list_del_init(&timeri
->open_list
);
403 if (timeri
->flags
& SNDRV_TIMER_IFLG_SLAVE
)
407 /* force to stop the timer */
408 snd_timer_stop(timeri
);
411 timer
->num_instances
--;
412 /* wait, until the active callback is finished */
413 spin_lock_irq(&timer
->lock
);
414 while (timeri
->flags
& SNDRV_TIMER_IFLG_CALLBACK
) {
415 spin_unlock_irq(&timer
->lock
);
417 spin_lock_irq(&timer
->lock
);
419 spin_unlock_irq(&timer
->lock
);
421 /* remove slave links */
422 spin_lock_irq(&slave_active_lock
);
423 spin_lock(&timer
->lock
);
424 timeri
->timer
= NULL
;
425 list_for_each_entry_safe(slave
, tmp
, &timeri
->slave_list_head
,
427 list_move_tail(&slave
->open_list
, &snd_timer_slave_list
);
428 timer
->num_instances
--;
429 slave
->master
= NULL
;
431 list_del_init(&slave
->ack_list
);
432 list_del_init(&slave
->active_list
);
434 spin_unlock(&timer
->lock
);
435 spin_unlock_irq(&slave_active_lock
);
437 /* slave doesn't need to release timer resources below */
438 if (timeri
->flags
& SNDRV_TIMER_IFLG_SLAVE
)
443 if (list_empty(&timer
->open_list_head
) && timer
->hw
.close
)
444 timer
->hw
.close(timer
);
445 /* release a card refcount for safe disconnection */
447 *card_devp_to_put
= &timer
->card
->card_dev
;
448 module_put(timer
->module
);
453 * close a timer instance
455 void snd_timer_close(struct snd_timer_instance
*timeri
)
457 struct device
*card_dev_to_put
= NULL
;
459 if (snd_BUG_ON(!timeri
))
462 mutex_lock(®ister_mutex
);
463 snd_timer_close_locked(timeri
, &card_dev_to_put
);
464 mutex_unlock(®ister_mutex
);
465 /* put_device() is called after unlock for avoiding deadlock */
467 put_device(card_dev_to_put
);
469 EXPORT_SYMBOL(snd_timer_close
);
471 static unsigned long snd_timer_hw_resolution(struct snd_timer
*timer
)
473 if (timer
->hw
.c_resolution
)
474 return timer
->hw
.c_resolution(timer
);
476 return timer
->hw
.resolution
;
479 unsigned long snd_timer_resolution(struct snd_timer_instance
*timeri
)
481 struct snd_timer
* timer
;
482 unsigned long ret
= 0;
487 timer
= timeri
->timer
;
489 spin_lock_irqsave(&timer
->lock
, flags
);
490 ret
= snd_timer_hw_resolution(timer
);
491 spin_unlock_irqrestore(&timer
->lock
, flags
);
495 EXPORT_SYMBOL(snd_timer_resolution
);
497 static void snd_timer_notify1(struct snd_timer_instance
*ti
, int event
)
499 struct snd_timer
*timer
= ti
->timer
;
500 unsigned long resolution
= 0;
501 struct snd_timer_instance
*ts
;
502 struct timespec64 tstamp
;
504 if (timer_tstamp_monotonic
)
505 ktime_get_ts64(&tstamp
);
507 ktime_get_real_ts64(&tstamp
);
508 if (snd_BUG_ON(event
< SNDRV_TIMER_EVENT_START
||
509 event
> SNDRV_TIMER_EVENT_PAUSE
))
512 (event
== SNDRV_TIMER_EVENT_START
||
513 event
== SNDRV_TIMER_EVENT_CONTINUE
))
514 resolution
= snd_timer_hw_resolution(timer
);
516 ti
->ccallback(ti
, event
, &tstamp
, resolution
);
517 if (ti
->flags
& SNDRV_TIMER_IFLG_SLAVE
)
521 if (timer
->hw
.flags
& SNDRV_TIMER_HW_SLAVE
)
523 list_for_each_entry(ts
, &ti
->slave_active_head
, active_list
)
525 ts
->ccallback(ts
, event
+ 100, &tstamp
, resolution
);
528 /* start/continue a master timer */
529 static int snd_timer_start1(struct snd_timer_instance
*timeri
,
530 bool start
, unsigned long ticks
)
532 struct snd_timer
*timer
;
536 timer
= timeri
->timer
;
540 spin_lock_irqsave(&timer
->lock
, flags
);
541 if (timeri
->flags
& SNDRV_TIMER_IFLG_DEAD
) {
545 if (timer
->card
&& timer
->card
->shutdown
) {
549 if (timeri
->flags
& (SNDRV_TIMER_IFLG_RUNNING
|
550 SNDRV_TIMER_IFLG_START
)) {
556 timeri
->ticks
= timeri
->cticks
= ticks
;
557 else if (!timeri
->cticks
)
561 list_move_tail(&timeri
->active_list
, &timer
->active_list_head
);
562 if (timer
->running
) {
563 if (timer
->hw
.flags
& SNDRV_TIMER_HW_SLAVE
)
565 timer
->flags
|= SNDRV_TIMER_FLG_RESCHED
;
566 timeri
->flags
|= SNDRV_TIMER_IFLG_START
;
567 result
= 1; /* delayed start */
570 timer
->sticks
= ticks
;
571 timer
->hw
.start(timer
);
574 timeri
->flags
|= SNDRV_TIMER_IFLG_RUNNING
;
577 snd_timer_notify1(timeri
, start
? SNDRV_TIMER_EVENT_START
:
578 SNDRV_TIMER_EVENT_CONTINUE
);
580 spin_unlock_irqrestore(&timer
->lock
, flags
);
584 /* start/continue a slave timer */
585 static int snd_timer_start_slave(struct snd_timer_instance
*timeri
,
591 spin_lock_irqsave(&slave_active_lock
, flags
);
592 if (timeri
->flags
& SNDRV_TIMER_IFLG_DEAD
) {
596 if (timeri
->flags
& SNDRV_TIMER_IFLG_RUNNING
) {
600 timeri
->flags
|= SNDRV_TIMER_IFLG_RUNNING
;
601 if (timeri
->master
&& timeri
->timer
) {
602 spin_lock(&timeri
->timer
->lock
);
603 list_add_tail(&timeri
->active_list
,
604 &timeri
->master
->slave_active_head
);
605 snd_timer_notify1(timeri
, start
? SNDRV_TIMER_EVENT_START
:
606 SNDRV_TIMER_EVENT_CONTINUE
);
607 spin_unlock(&timeri
->timer
->lock
);
609 err
= 1; /* delayed start */
611 spin_unlock_irqrestore(&slave_active_lock
, flags
);
615 /* stop/pause a master timer */
616 static int snd_timer_stop1(struct snd_timer_instance
*timeri
, bool stop
)
618 struct snd_timer
*timer
;
622 timer
= timeri
->timer
;
625 spin_lock_irqsave(&timer
->lock
, flags
);
626 if (!(timeri
->flags
& (SNDRV_TIMER_IFLG_RUNNING
|
627 SNDRV_TIMER_IFLG_START
))) {
631 list_del_init(&timeri
->ack_list
);
632 list_del_init(&timeri
->active_list
);
633 if (timer
->card
&& timer
->card
->shutdown
)
636 timeri
->cticks
= timeri
->ticks
;
639 if ((timeri
->flags
& SNDRV_TIMER_IFLG_RUNNING
) &&
640 !(--timer
->running
)) {
641 timer
->hw
.stop(timer
);
642 if (timer
->flags
& SNDRV_TIMER_FLG_RESCHED
) {
643 timer
->flags
&= ~SNDRV_TIMER_FLG_RESCHED
;
644 snd_timer_reschedule(timer
, 0);
645 if (timer
->flags
& SNDRV_TIMER_FLG_CHANGE
) {
646 timer
->flags
&= ~SNDRV_TIMER_FLG_CHANGE
;
647 timer
->hw
.start(timer
);
651 timeri
->flags
&= ~(SNDRV_TIMER_IFLG_RUNNING
| SNDRV_TIMER_IFLG_START
);
653 timeri
->flags
&= ~SNDRV_TIMER_IFLG_PAUSED
;
655 timeri
->flags
|= SNDRV_TIMER_IFLG_PAUSED
;
656 snd_timer_notify1(timeri
, stop
? SNDRV_TIMER_EVENT_STOP
:
657 SNDRV_TIMER_EVENT_PAUSE
);
659 spin_unlock_irqrestore(&timer
->lock
, flags
);
663 /* stop/pause a slave timer */
664 static int snd_timer_stop_slave(struct snd_timer_instance
*timeri
, bool stop
)
668 spin_lock_irqsave(&slave_active_lock
, flags
);
669 if (!(timeri
->flags
& SNDRV_TIMER_IFLG_RUNNING
)) {
670 spin_unlock_irqrestore(&slave_active_lock
, flags
);
673 timeri
->flags
&= ~SNDRV_TIMER_IFLG_RUNNING
;
675 spin_lock(&timeri
->timer
->lock
);
676 list_del_init(&timeri
->ack_list
);
677 list_del_init(&timeri
->active_list
);
678 snd_timer_notify1(timeri
, stop
? SNDRV_TIMER_EVENT_STOP
:
679 SNDRV_TIMER_EVENT_PAUSE
);
680 spin_unlock(&timeri
->timer
->lock
);
682 spin_unlock_irqrestore(&slave_active_lock
, flags
);
687 * start the timer instance
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
);
698 EXPORT_SYMBOL(snd_timer_start
);
701 * stop the timer instance.
703 * do not call this from the timer callback!
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);
712 EXPORT_SYMBOL(snd_timer_stop
);
715 * start again.. the tick is kept.
717 int snd_timer_continue(struct snd_timer_instance
*timeri
)
719 /* timer can continue only after pause */
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);
728 EXPORT_SYMBOL(snd_timer_continue
);
731 * pause.. remember the ticks left
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);
740 EXPORT_SYMBOL(snd_timer_pause
);
743 * reschedule the timer
745 * start pending instances and check the scheduling ticks.
746 * when the scheduling ticks is changed set CHANGE flag to reprogram the timer.
748 static void snd_timer_reschedule(struct snd_timer
* timer
, unsigned long ticks_left
)
750 struct snd_timer_instance
*ti
;
751 unsigned long ticks
= ~0UL;
753 list_for_each_entry(ti
, &timer
->active_list_head
, active_list
) {
754 if (ti
->flags
& SNDRV_TIMER_IFLG_START
) {
755 ti
->flags
&= ~SNDRV_TIMER_IFLG_START
;
756 ti
->flags
|= SNDRV_TIMER_IFLG_RUNNING
;
759 if (ti
->flags
& SNDRV_TIMER_IFLG_RUNNING
) {
760 if (ticks
> ti
->cticks
)
765 timer
->flags
&= ~SNDRV_TIMER_FLG_RESCHED
;
768 if (ticks
> timer
->hw
.ticks
)
769 ticks
= timer
->hw
.ticks
;
770 if (ticks_left
!= ticks
)
771 timer
->flags
|= SNDRV_TIMER_FLG_CHANGE
;
772 timer
->sticks
= ticks
;
775 /* call callbacks in timer ack list */
776 static void snd_timer_process_callbacks(struct snd_timer
*timer
,
777 struct list_head
*head
)
779 struct snd_timer_instance
*ti
;
780 unsigned long resolution
, ticks
;
782 while (!list_empty(head
)) {
783 ti
= list_first_entry(head
, struct snd_timer_instance
,
786 /* remove from ack_list and make empty */
787 list_del_init(&ti
->ack_list
);
789 if (!(ti
->flags
& SNDRV_TIMER_IFLG_DEAD
)) {
792 resolution
= ti
->resolution
;
793 ti
->flags
|= SNDRV_TIMER_IFLG_CALLBACK
;
794 spin_unlock(&timer
->lock
);
796 ti
->callback(ti
, resolution
, ticks
);
797 spin_lock(&timer
->lock
);
798 ti
->flags
&= ~SNDRV_TIMER_IFLG_CALLBACK
;
803 /* clear pending instances from ack list */
804 static void snd_timer_clear_callbacks(struct snd_timer
*timer
,
805 struct list_head
*head
)
809 spin_lock_irqsave(&timer
->lock
, flags
);
810 while (!list_empty(head
))
811 list_del_init(head
->next
);
812 spin_unlock_irqrestore(&timer
->lock
, flags
);
819 static void snd_timer_work(struct work_struct
*work
)
821 struct snd_timer
*timer
= container_of(work
, struct snd_timer
, task_work
);
824 if (timer
->card
&& timer
->card
->shutdown
) {
825 snd_timer_clear_callbacks(timer
, &timer
->sack_list_head
);
829 spin_lock_irqsave(&timer
->lock
, flags
);
830 snd_timer_process_callbacks(timer
, &timer
->sack_list_head
);
831 spin_unlock_irqrestore(&timer
->lock
, flags
);
837 * ticks_left is usually equal to timer->sticks.
840 void snd_timer_interrupt(struct snd_timer
* timer
, unsigned long ticks_left
)
842 struct snd_timer_instance
*ti
, *ts
, *tmp
;
843 unsigned long resolution
;
844 struct list_head
*ack_list_head
;
846 bool use_work
= false;
851 if (timer
->card
&& timer
->card
->shutdown
) {
852 snd_timer_clear_callbacks(timer
, &timer
->ack_list_head
);
856 spin_lock_irqsave(&timer
->lock
, flags
);
858 /* remember the current resolution */
859 resolution
= snd_timer_hw_resolution(timer
);
861 /* loop for all active instances
862 * Here we cannot use list_for_each_entry because the active_list of a
863 * processed instance is relinked to done_list_head before the callback
866 list_for_each_entry_safe(ti
, tmp
, &timer
->active_list_head
,
868 if (ti
->flags
& SNDRV_TIMER_IFLG_DEAD
)
870 if (!(ti
->flags
& SNDRV_TIMER_IFLG_RUNNING
))
872 ti
->pticks
+= ticks_left
;
873 ti
->resolution
= resolution
;
874 if (ti
->cticks
< ticks_left
)
877 ti
->cticks
-= ticks_left
;
878 if (ti
->cticks
) /* not expired */
880 if (ti
->flags
& SNDRV_TIMER_IFLG_AUTO
) {
881 ti
->cticks
= ti
->ticks
;
883 ti
->flags
&= ~SNDRV_TIMER_IFLG_RUNNING
;
885 list_del_init(&ti
->active_list
);
887 if ((timer
->hw
.flags
& SNDRV_TIMER_HW_WORK
) ||
888 (ti
->flags
& SNDRV_TIMER_IFLG_FAST
))
889 ack_list_head
= &timer
->ack_list_head
;
891 ack_list_head
= &timer
->sack_list_head
;
892 if (list_empty(&ti
->ack_list
))
893 list_add_tail(&ti
->ack_list
, ack_list_head
);
894 list_for_each_entry(ts
, &ti
->slave_active_head
, active_list
) {
895 ts
->pticks
= ti
->pticks
;
896 ts
->resolution
= resolution
;
897 if (list_empty(&ts
->ack_list
))
898 list_add_tail(&ts
->ack_list
, ack_list_head
);
901 if (timer
->flags
& SNDRV_TIMER_FLG_RESCHED
)
902 snd_timer_reschedule(timer
, timer
->sticks
);
903 if (timer
->running
) {
904 if (timer
->hw
.flags
& SNDRV_TIMER_HW_STOP
) {
905 timer
->hw
.stop(timer
);
906 timer
->flags
|= SNDRV_TIMER_FLG_CHANGE
;
908 if (!(timer
->hw
.flags
& SNDRV_TIMER_HW_AUTO
) ||
909 (timer
->flags
& SNDRV_TIMER_FLG_CHANGE
)) {
911 timer
->flags
&= ~SNDRV_TIMER_FLG_CHANGE
;
912 timer
->hw
.start(timer
);
915 timer
->hw
.stop(timer
);
918 /* now process all fast callbacks */
919 snd_timer_process_callbacks(timer
, &timer
->ack_list_head
);
921 /* do we have any slow callbacks? */
922 use_work
= !list_empty(&timer
->sack_list_head
);
923 spin_unlock_irqrestore(&timer
->lock
, flags
);
926 queue_work(system_highpri_wq
, &timer
->task_work
);
928 EXPORT_SYMBOL(snd_timer_interrupt
);
934 int snd_timer_new(struct snd_card
*card
, char *id
, struct snd_timer_id
*tid
,
935 struct snd_timer
**rtimer
)
937 struct snd_timer
*timer
;
939 static const struct snd_device_ops ops
= {
940 .dev_free
= snd_timer_dev_free
,
941 .dev_register
= snd_timer_dev_register
,
942 .dev_disconnect
= snd_timer_dev_disconnect
,
945 if (snd_BUG_ON(!tid
))
947 if (tid
->dev_class
== SNDRV_TIMER_CLASS_CARD
||
948 tid
->dev_class
== SNDRV_TIMER_CLASS_PCM
) {
954 timer
= kzalloc(sizeof(*timer
), GFP_KERNEL
);
957 timer
->tmr_class
= tid
->dev_class
;
959 timer
->tmr_device
= tid
->device
;
960 timer
->tmr_subdevice
= tid
->subdevice
;
962 strlcpy(timer
->id
, id
, sizeof(timer
->id
));
964 INIT_LIST_HEAD(&timer
->device_list
);
965 INIT_LIST_HEAD(&timer
->open_list_head
);
966 INIT_LIST_HEAD(&timer
->active_list_head
);
967 INIT_LIST_HEAD(&timer
->ack_list_head
);
968 INIT_LIST_HEAD(&timer
->sack_list_head
);
969 spin_lock_init(&timer
->lock
);
970 INIT_WORK(&timer
->task_work
, snd_timer_work
);
971 timer
->max_instances
= 1000; /* default limit per timer */
973 timer
->module
= card
->module
;
974 err
= snd_device_new(card
, SNDRV_DEV_TIMER
, timer
, &ops
);
976 snd_timer_free(timer
);
984 EXPORT_SYMBOL(snd_timer_new
);
986 static int snd_timer_free(struct snd_timer
*timer
)
991 mutex_lock(®ister_mutex
);
992 if (! list_empty(&timer
->open_list_head
)) {
993 struct list_head
*p
, *n
;
994 struct snd_timer_instance
*ti
;
995 pr_warn("ALSA: timer %p is busy?\n", timer
);
996 list_for_each_safe(p
, n
, &timer
->open_list_head
) {
998 ti
= list_entry(p
, struct snd_timer_instance
, open_list
);
1002 list_del(&timer
->device_list
);
1003 mutex_unlock(®ister_mutex
);
1005 if (timer
->private_free
)
1006 timer
->private_free(timer
);
1011 static int snd_timer_dev_free(struct snd_device
*device
)
1013 struct snd_timer
*timer
= device
->device_data
;
1014 return snd_timer_free(timer
);
1017 static int snd_timer_dev_register(struct snd_device
*dev
)
1019 struct snd_timer
*timer
= dev
->device_data
;
1020 struct snd_timer
*timer1
;
1022 if (snd_BUG_ON(!timer
|| !timer
->hw
.start
|| !timer
->hw
.stop
))
1024 if (!(timer
->hw
.flags
& SNDRV_TIMER_HW_SLAVE
) &&
1025 !timer
->hw
.resolution
&& timer
->hw
.c_resolution
== NULL
)
1028 mutex_lock(®ister_mutex
);
1029 list_for_each_entry(timer1
, &snd_timer_list
, device_list
) {
1030 if (timer1
->tmr_class
> timer
->tmr_class
)
1032 if (timer1
->tmr_class
< timer
->tmr_class
)
1034 if (timer1
->card
&& timer
->card
) {
1035 if (timer1
->card
->number
> timer
->card
->number
)
1037 if (timer1
->card
->number
< timer
->card
->number
)
1040 if (timer1
->tmr_device
> timer
->tmr_device
)
1042 if (timer1
->tmr_device
< timer
->tmr_device
)
1044 if (timer1
->tmr_subdevice
> timer
->tmr_subdevice
)
1046 if (timer1
->tmr_subdevice
< timer
->tmr_subdevice
)
1049 mutex_unlock(®ister_mutex
);
1052 list_add_tail(&timer
->device_list
, &timer1
->device_list
);
1053 mutex_unlock(®ister_mutex
);
1057 static int snd_timer_dev_disconnect(struct snd_device
*device
)
1059 struct snd_timer
*timer
= device
->device_data
;
1060 struct snd_timer_instance
*ti
;
1062 mutex_lock(®ister_mutex
);
1063 list_del_init(&timer
->device_list
);
1064 /* wake up pending sleepers */
1065 list_for_each_entry(ti
, &timer
->open_list_head
, open_list
) {
1069 mutex_unlock(®ister_mutex
);
1073 void snd_timer_notify(struct snd_timer
*timer
, int event
, struct timespec64
*tstamp
)
1075 unsigned long flags
;
1076 unsigned long resolution
= 0;
1077 struct snd_timer_instance
*ti
, *ts
;
1079 if (timer
->card
&& timer
->card
->shutdown
)
1081 if (! (timer
->hw
.flags
& SNDRV_TIMER_HW_SLAVE
))
1083 if (snd_BUG_ON(event
< SNDRV_TIMER_EVENT_MSTART
||
1084 event
> SNDRV_TIMER_EVENT_MRESUME
))
1086 spin_lock_irqsave(&timer
->lock
, flags
);
1087 if (event
== SNDRV_TIMER_EVENT_MSTART
||
1088 event
== SNDRV_TIMER_EVENT_MCONTINUE
||
1089 event
== SNDRV_TIMER_EVENT_MRESUME
)
1090 resolution
= snd_timer_hw_resolution(timer
);
1091 list_for_each_entry(ti
, &timer
->active_list_head
, active_list
) {
1093 ti
->ccallback(ti
, event
, tstamp
, resolution
);
1094 list_for_each_entry(ts
, &ti
->slave_active_head
, active_list
)
1096 ts
->ccallback(ts
, event
, tstamp
, resolution
);
1098 spin_unlock_irqrestore(&timer
->lock
, flags
);
1100 EXPORT_SYMBOL(snd_timer_notify
);
1103 * exported functions for global timers
1105 int snd_timer_global_new(char *id
, int device
, struct snd_timer
**rtimer
)
1107 struct snd_timer_id tid
;
1109 tid
.dev_class
= SNDRV_TIMER_CLASS_GLOBAL
;
1110 tid
.dev_sclass
= SNDRV_TIMER_SCLASS_NONE
;
1112 tid
.device
= device
;
1114 return snd_timer_new(NULL
, id
, &tid
, rtimer
);
1116 EXPORT_SYMBOL(snd_timer_global_new
);
1118 int snd_timer_global_free(struct snd_timer
*timer
)
1120 return snd_timer_free(timer
);
1122 EXPORT_SYMBOL(snd_timer_global_free
);
1124 int snd_timer_global_register(struct snd_timer
*timer
)
1126 struct snd_device dev
;
1128 memset(&dev
, 0, sizeof(dev
));
1129 dev
.device_data
= timer
;
1130 return snd_timer_dev_register(&dev
);
1132 EXPORT_SYMBOL(snd_timer_global_register
);
1138 struct snd_timer_system_private
{
1139 struct timer_list tlist
;
1140 struct snd_timer
*snd_timer
;
1141 unsigned long last_expires
;
1142 unsigned long last_jiffies
;
1143 unsigned long correction
;
1146 static void snd_timer_s_function(struct timer_list
*t
)
1148 struct snd_timer_system_private
*priv
= from_timer(priv
, t
,
1150 struct snd_timer
*timer
= priv
->snd_timer
;
1151 unsigned long jiff
= jiffies
;
1152 if (time_after(jiff
, priv
->last_expires
))
1153 priv
->correction
+= (long)jiff
- (long)priv
->last_expires
;
1154 snd_timer_interrupt(timer
, (long)jiff
- (long)priv
->last_jiffies
);
1157 static int snd_timer_s_start(struct snd_timer
* timer
)
1159 struct snd_timer_system_private
*priv
;
1160 unsigned long njiff
;
1162 priv
= (struct snd_timer_system_private
*) timer
->private_data
;
1163 njiff
= (priv
->last_jiffies
= jiffies
);
1164 if (priv
->correction
> timer
->sticks
- 1) {
1165 priv
->correction
-= timer
->sticks
- 1;
1168 njiff
+= timer
->sticks
- priv
->correction
;
1169 priv
->correction
= 0;
1171 priv
->last_expires
= njiff
;
1172 mod_timer(&priv
->tlist
, njiff
);
1176 static int snd_timer_s_stop(struct snd_timer
* timer
)
1178 struct snd_timer_system_private
*priv
;
1181 priv
= (struct snd_timer_system_private
*) timer
->private_data
;
1182 del_timer(&priv
->tlist
);
1184 if (time_before(jiff
, priv
->last_expires
))
1185 timer
->sticks
= priv
->last_expires
- jiff
;
1188 priv
->correction
= 0;
1192 static int snd_timer_s_close(struct snd_timer
*timer
)
1194 struct snd_timer_system_private
*priv
;
1196 priv
= (struct snd_timer_system_private
*)timer
->private_data
;
1197 del_timer_sync(&priv
->tlist
);
1201 static const struct snd_timer_hardware snd_timer_system
=
1203 .flags
= SNDRV_TIMER_HW_FIRST
| SNDRV_TIMER_HW_WORK
,
1204 .resolution
= 1000000000L / HZ
,
1206 .close
= snd_timer_s_close
,
1207 .start
= snd_timer_s_start
,
1208 .stop
= snd_timer_s_stop
1211 static void snd_timer_free_system(struct snd_timer
*timer
)
1213 kfree(timer
->private_data
);
1216 static int snd_timer_register_system(void)
1218 struct snd_timer
*timer
;
1219 struct snd_timer_system_private
*priv
;
1222 err
= snd_timer_global_new("system", SNDRV_TIMER_GLOBAL_SYSTEM
, &timer
);
1225 strcpy(timer
->name
, "system timer");
1226 timer
->hw
= snd_timer_system
;
1227 priv
= kzalloc(sizeof(*priv
), GFP_KERNEL
);
1229 snd_timer_free(timer
);
1232 priv
->snd_timer
= timer
;
1233 timer_setup(&priv
->tlist
, snd_timer_s_function
, 0);
1234 timer
->private_data
= priv
;
1235 timer
->private_free
= snd_timer_free_system
;
1236 return snd_timer_global_register(timer
);
1239 #ifdef CONFIG_SND_PROC_FS
1244 static void snd_timer_proc_read(struct snd_info_entry
*entry
,
1245 struct snd_info_buffer
*buffer
)
1247 struct snd_timer
*timer
;
1248 struct snd_timer_instance
*ti
;
1250 mutex_lock(®ister_mutex
);
1251 list_for_each_entry(timer
, &snd_timer_list
, device_list
) {
1252 if (timer
->card
&& timer
->card
->shutdown
)
1254 switch (timer
->tmr_class
) {
1255 case SNDRV_TIMER_CLASS_GLOBAL
:
1256 snd_iprintf(buffer
, "G%i: ", timer
->tmr_device
);
1258 case SNDRV_TIMER_CLASS_CARD
:
1259 snd_iprintf(buffer
, "C%i-%i: ",
1260 timer
->card
->number
, timer
->tmr_device
);
1262 case SNDRV_TIMER_CLASS_PCM
:
1263 snd_iprintf(buffer
, "P%i-%i-%i: ", timer
->card
->number
,
1264 timer
->tmr_device
, timer
->tmr_subdevice
);
1267 snd_iprintf(buffer
, "?%i-%i-%i-%i: ", timer
->tmr_class
,
1268 timer
->card
? timer
->card
->number
: -1,
1269 timer
->tmr_device
, timer
->tmr_subdevice
);
1271 snd_iprintf(buffer
, "%s :", timer
->name
);
1272 if (timer
->hw
.resolution
)
1273 snd_iprintf(buffer
, " %lu.%03luus (%lu ticks)",
1274 timer
->hw
.resolution
/ 1000,
1275 timer
->hw
.resolution
% 1000,
1277 if (timer
->hw
.flags
& SNDRV_TIMER_HW_SLAVE
)
1278 snd_iprintf(buffer
, " SLAVE");
1279 snd_iprintf(buffer
, "\n");
1280 list_for_each_entry(ti
, &timer
->open_list_head
, open_list
)
1281 snd_iprintf(buffer
, " Client %s : %s\n",
1282 ti
->owner
? ti
->owner
: "unknown",
1283 (ti
->flags
& (SNDRV_TIMER_IFLG_START
|
1284 SNDRV_TIMER_IFLG_RUNNING
))
1285 ? "running" : "stopped");
1287 mutex_unlock(®ister_mutex
);
1290 static struct snd_info_entry
*snd_timer_proc_entry
;
1292 static void __init
snd_timer_proc_init(void)
1294 struct snd_info_entry
*entry
;
1296 entry
= snd_info_create_module_entry(THIS_MODULE
, "timers", NULL
);
1297 if (entry
!= NULL
) {
1298 entry
->c
.text
.read
= snd_timer_proc_read
;
1299 if (snd_info_register(entry
) < 0) {
1300 snd_info_free_entry(entry
);
1304 snd_timer_proc_entry
= entry
;
1307 static void __exit
snd_timer_proc_done(void)
1309 snd_info_free_entry(snd_timer_proc_entry
);
1311 #else /* !CONFIG_SND_PROC_FS */
1312 #define snd_timer_proc_init()
1313 #define snd_timer_proc_done()
1317 * USER SPACE interface
1320 static void snd_timer_user_interrupt(struct snd_timer_instance
*timeri
,
1321 unsigned long resolution
,
1322 unsigned long ticks
)
1324 struct snd_timer_user
*tu
= timeri
->callback_data
;
1325 struct snd_timer_read
*r
;
1328 spin_lock(&tu
->qlock
);
1329 if (tu
->qused
> 0) {
1330 prev
= tu
->qtail
== 0 ? tu
->queue_size
- 1 : tu
->qtail
- 1;
1331 r
= &tu
->queue
[prev
];
1332 if (r
->resolution
== resolution
) {
1337 if (tu
->qused
>= tu
->queue_size
) {
1340 r
= &tu
->queue
[tu
->qtail
++];
1341 tu
->qtail
%= tu
->queue_size
;
1342 r
->resolution
= resolution
;
1347 spin_unlock(&tu
->qlock
);
1348 kill_fasync(&tu
->fasync
, SIGIO
, POLL_IN
);
1349 wake_up(&tu
->qchange_sleep
);
1352 static void snd_timer_user_append_to_tqueue(struct snd_timer_user
*tu
,
1353 struct snd_timer_tread64
*tread
)
1355 if (tu
->qused
>= tu
->queue_size
) {
1358 memcpy(&tu
->tqueue
[tu
->qtail
++], tread
, sizeof(*tread
));
1359 tu
->qtail
%= tu
->queue_size
;
1364 static void snd_timer_user_ccallback(struct snd_timer_instance
*timeri
,
1366 struct timespec64
*tstamp
,
1367 unsigned long resolution
)
1369 struct snd_timer_user
*tu
= timeri
->callback_data
;
1370 struct snd_timer_tread64 r1
;
1371 unsigned long flags
;
1373 if (event
>= SNDRV_TIMER_EVENT_START
&&
1374 event
<= SNDRV_TIMER_EVENT_PAUSE
)
1375 tu
->tstamp
= *tstamp
;
1376 if ((tu
->filter
& (1 << event
)) == 0 || !tu
->tread
)
1378 memset(&r1
, 0, sizeof(r1
));
1380 r1
.tstamp_sec
= tstamp
->tv_sec
;
1381 r1
.tstamp_nsec
= tstamp
->tv_nsec
;
1382 r1
.val
= resolution
;
1383 spin_lock_irqsave(&tu
->qlock
, flags
);
1384 snd_timer_user_append_to_tqueue(tu
, &r1
);
1385 spin_unlock_irqrestore(&tu
->qlock
, flags
);
1386 kill_fasync(&tu
->fasync
, SIGIO
, POLL_IN
);
1387 wake_up(&tu
->qchange_sleep
);
1390 static void snd_timer_user_disconnect(struct snd_timer_instance
*timeri
)
1392 struct snd_timer_user
*tu
= timeri
->callback_data
;
1394 tu
->disconnected
= true;
1395 wake_up(&tu
->qchange_sleep
);
1398 static void snd_timer_user_tinterrupt(struct snd_timer_instance
*timeri
,
1399 unsigned long resolution
,
1400 unsigned long ticks
)
1402 struct snd_timer_user
*tu
= timeri
->callback_data
;
1403 struct snd_timer_tread64
*r
, r1
;
1404 struct timespec64 tstamp
;
1405 int prev
, append
= 0;
1407 memset(&r1
, 0, sizeof(r1
));
1408 memset(&tstamp
, 0, sizeof(tstamp
));
1409 spin_lock(&tu
->qlock
);
1410 if ((tu
->filter
& ((1 << SNDRV_TIMER_EVENT_RESOLUTION
) |
1411 (1 << SNDRV_TIMER_EVENT_TICK
))) == 0) {
1412 spin_unlock(&tu
->qlock
);
1415 if (tu
->last_resolution
!= resolution
|| ticks
> 0) {
1416 if (timer_tstamp_monotonic
)
1417 ktime_get_ts64(&tstamp
);
1419 ktime_get_real_ts64(&tstamp
);
1421 if ((tu
->filter
& (1 << SNDRV_TIMER_EVENT_RESOLUTION
)) &&
1422 tu
->last_resolution
!= resolution
) {
1423 r1
.event
= SNDRV_TIMER_EVENT_RESOLUTION
;
1424 r1
.tstamp_sec
= tstamp
.tv_sec
;
1425 r1
.tstamp_nsec
= tstamp
.tv_nsec
;
1426 r1
.val
= resolution
;
1427 snd_timer_user_append_to_tqueue(tu
, &r1
);
1428 tu
->last_resolution
= resolution
;
1431 if ((tu
->filter
& (1 << SNDRV_TIMER_EVENT_TICK
)) == 0)
1435 if (tu
->qused
> 0) {
1436 prev
= tu
->qtail
== 0 ? tu
->queue_size
- 1 : tu
->qtail
- 1;
1437 r
= &tu
->tqueue
[prev
];
1438 if (r
->event
== SNDRV_TIMER_EVENT_TICK
) {
1439 r
->tstamp_sec
= tstamp
.tv_sec
;
1440 r
->tstamp_nsec
= tstamp
.tv_nsec
;
1446 r1
.event
= SNDRV_TIMER_EVENT_TICK
;
1447 r1
.tstamp_sec
= tstamp
.tv_sec
;
1448 r1
.tstamp_nsec
= tstamp
.tv_nsec
;
1450 snd_timer_user_append_to_tqueue(tu
, &r1
);
1453 spin_unlock(&tu
->qlock
);
1456 kill_fasync(&tu
->fasync
, SIGIO
, POLL_IN
);
1457 wake_up(&tu
->qchange_sleep
);
1460 static int realloc_user_queue(struct snd_timer_user
*tu
, int size
)
1462 struct snd_timer_read
*queue
= NULL
;
1463 struct snd_timer_tread64
*tqueue
= NULL
;
1466 tqueue
= kcalloc(size
, sizeof(*tqueue
), GFP_KERNEL
);
1470 queue
= kcalloc(size
, sizeof(*queue
), GFP_KERNEL
);
1475 spin_lock_irq(&tu
->qlock
);
1478 tu
->queue_size
= size
;
1480 tu
->tqueue
= tqueue
;
1481 tu
->qhead
= tu
->qtail
= tu
->qused
= 0;
1482 spin_unlock_irq(&tu
->qlock
);
1487 static int snd_timer_user_open(struct inode
*inode
, struct file
*file
)
1489 struct snd_timer_user
*tu
;
1492 err
= stream_open(inode
, file
);
1496 tu
= kzalloc(sizeof(*tu
), GFP_KERNEL
);
1499 spin_lock_init(&tu
->qlock
);
1500 init_waitqueue_head(&tu
->qchange_sleep
);
1501 mutex_init(&tu
->ioctl_lock
);
1503 if (realloc_user_queue(tu
, 128) < 0) {
1507 file
->private_data
= tu
;
1511 static int snd_timer_user_release(struct inode
*inode
, struct file
*file
)
1513 struct snd_timer_user
*tu
;
1515 if (file
->private_data
) {
1516 tu
= file
->private_data
;
1517 file
->private_data
= NULL
;
1518 mutex_lock(&tu
->ioctl_lock
);
1520 snd_timer_close(tu
->timeri
);
1521 snd_timer_instance_free(tu
->timeri
);
1523 mutex_unlock(&tu
->ioctl_lock
);
1531 static void snd_timer_user_zero_id(struct snd_timer_id
*id
)
1533 id
->dev_class
= SNDRV_TIMER_CLASS_NONE
;
1534 id
->dev_sclass
= SNDRV_TIMER_SCLASS_NONE
;
1540 static void snd_timer_user_copy_id(struct snd_timer_id
*id
, struct snd_timer
*timer
)
1542 id
->dev_class
= timer
->tmr_class
;
1543 id
->dev_sclass
= SNDRV_TIMER_SCLASS_NONE
;
1544 id
->card
= timer
->card
? timer
->card
->number
: -1;
1545 id
->device
= timer
->tmr_device
;
1546 id
->subdevice
= timer
->tmr_subdevice
;
1549 static int snd_timer_user_next_device(struct snd_timer_id __user
*_tid
)
1551 struct snd_timer_id id
;
1552 struct snd_timer
*timer
;
1553 struct list_head
*p
;
1555 if (copy_from_user(&id
, _tid
, sizeof(id
)))
1557 mutex_lock(®ister_mutex
);
1558 if (id
.dev_class
< 0) { /* first item */
1559 if (list_empty(&snd_timer_list
))
1560 snd_timer_user_zero_id(&id
);
1562 timer
= list_entry(snd_timer_list
.next
,
1563 struct snd_timer
, device_list
);
1564 snd_timer_user_copy_id(&id
, timer
);
1567 switch (id
.dev_class
) {
1568 case SNDRV_TIMER_CLASS_GLOBAL
:
1569 id
.device
= id
.device
< 0 ? 0 : id
.device
+ 1;
1570 list_for_each(p
, &snd_timer_list
) {
1571 timer
= list_entry(p
, struct snd_timer
, device_list
);
1572 if (timer
->tmr_class
> SNDRV_TIMER_CLASS_GLOBAL
) {
1573 snd_timer_user_copy_id(&id
, timer
);
1576 if (timer
->tmr_device
>= id
.device
) {
1577 snd_timer_user_copy_id(&id
, timer
);
1581 if (p
== &snd_timer_list
)
1582 snd_timer_user_zero_id(&id
);
1584 case SNDRV_TIMER_CLASS_CARD
:
1585 case SNDRV_TIMER_CLASS_PCM
:
1589 if (id
.device
< 0) {
1592 if (id
.subdevice
< 0)
1594 else if (id
.subdevice
< INT_MAX
)
1598 list_for_each(p
, &snd_timer_list
) {
1599 timer
= list_entry(p
, struct snd_timer
, device_list
);
1600 if (timer
->tmr_class
> id
.dev_class
) {
1601 snd_timer_user_copy_id(&id
, timer
);
1604 if (timer
->tmr_class
< id
.dev_class
)
1606 if (timer
->card
->number
> id
.card
) {
1607 snd_timer_user_copy_id(&id
, timer
);
1610 if (timer
->card
->number
< id
.card
)
1612 if (timer
->tmr_device
> id
.device
) {
1613 snd_timer_user_copy_id(&id
, timer
);
1616 if (timer
->tmr_device
< id
.device
)
1618 if (timer
->tmr_subdevice
> id
.subdevice
) {
1619 snd_timer_user_copy_id(&id
, timer
);
1622 if (timer
->tmr_subdevice
< id
.subdevice
)
1624 snd_timer_user_copy_id(&id
, timer
);
1627 if (p
== &snd_timer_list
)
1628 snd_timer_user_zero_id(&id
);
1631 snd_timer_user_zero_id(&id
);
1634 mutex_unlock(®ister_mutex
);
1635 if (copy_to_user(_tid
, &id
, sizeof(*_tid
)))
1640 static int snd_timer_user_ginfo(struct file
*file
,
1641 struct snd_timer_ginfo __user
*_ginfo
)
1643 struct snd_timer_ginfo
*ginfo
;
1644 struct snd_timer_id tid
;
1645 struct snd_timer
*t
;
1646 struct list_head
*p
;
1649 ginfo
= memdup_user(_ginfo
, sizeof(*ginfo
));
1651 return PTR_ERR(ginfo
);
1654 memset(ginfo
, 0, sizeof(*ginfo
));
1656 mutex_lock(®ister_mutex
);
1657 t
= snd_timer_find(&tid
);
1659 ginfo
->card
= t
->card
? t
->card
->number
: -1;
1660 if (t
->hw
.flags
& SNDRV_TIMER_HW_SLAVE
)
1661 ginfo
->flags
|= SNDRV_TIMER_FLG_SLAVE
;
1662 strlcpy(ginfo
->id
, t
->id
, sizeof(ginfo
->id
));
1663 strlcpy(ginfo
->name
, t
->name
, sizeof(ginfo
->name
));
1664 ginfo
->resolution
= t
->hw
.resolution
;
1665 if (t
->hw
.resolution_min
> 0) {
1666 ginfo
->resolution_min
= t
->hw
.resolution_min
;
1667 ginfo
->resolution_max
= t
->hw
.resolution_max
;
1669 list_for_each(p
, &t
->open_list_head
) {
1675 mutex_unlock(®ister_mutex
);
1676 if (err
>= 0 && copy_to_user(_ginfo
, ginfo
, sizeof(*ginfo
)))
1682 static int timer_set_gparams(struct snd_timer_gparams
*gparams
)
1684 struct snd_timer
*t
;
1687 mutex_lock(®ister_mutex
);
1688 t
= snd_timer_find(&gparams
->tid
);
1693 if (!list_empty(&t
->open_list_head
)) {
1697 if (!t
->hw
.set_period
) {
1701 err
= t
->hw
.set_period(t
, gparams
->period_num
, gparams
->period_den
);
1703 mutex_unlock(®ister_mutex
);
1707 static int snd_timer_user_gparams(struct file
*file
,
1708 struct snd_timer_gparams __user
*_gparams
)
1710 struct snd_timer_gparams gparams
;
1712 if (copy_from_user(&gparams
, _gparams
, sizeof(gparams
)))
1714 return timer_set_gparams(&gparams
);
1717 static int snd_timer_user_gstatus(struct file
*file
,
1718 struct snd_timer_gstatus __user
*_gstatus
)
1720 struct snd_timer_gstatus gstatus
;
1721 struct snd_timer_id tid
;
1722 struct snd_timer
*t
;
1725 if (copy_from_user(&gstatus
, _gstatus
, sizeof(gstatus
)))
1728 memset(&gstatus
, 0, sizeof(gstatus
));
1730 mutex_lock(®ister_mutex
);
1731 t
= snd_timer_find(&tid
);
1733 spin_lock_irq(&t
->lock
);
1734 gstatus
.resolution
= snd_timer_hw_resolution(t
);
1735 if (t
->hw
.precise_resolution
) {
1736 t
->hw
.precise_resolution(t
, &gstatus
.resolution_num
,
1737 &gstatus
.resolution_den
);
1739 gstatus
.resolution_num
= gstatus
.resolution
;
1740 gstatus
.resolution_den
= 1000000000uL;
1742 spin_unlock_irq(&t
->lock
);
1746 mutex_unlock(®ister_mutex
);
1747 if (err
>= 0 && copy_to_user(_gstatus
, &gstatus
, sizeof(gstatus
)))
1752 static int snd_timer_user_tselect(struct file
*file
,
1753 struct snd_timer_select __user
*_tselect
)
1755 struct snd_timer_user
*tu
;
1756 struct snd_timer_select tselect
;
1760 tu
= file
->private_data
;
1762 snd_timer_close(tu
->timeri
);
1763 snd_timer_instance_free(tu
->timeri
);
1766 if (copy_from_user(&tselect
, _tselect
, sizeof(tselect
))) {
1770 sprintf(str
, "application %i", current
->pid
);
1771 if (tselect
.id
.dev_class
!= SNDRV_TIMER_CLASS_SLAVE
)
1772 tselect
.id
.dev_sclass
= SNDRV_TIMER_SCLASS_APPLICATION
;
1773 tu
->timeri
= snd_timer_instance_new(str
);
1779 tu
->timeri
->flags
|= SNDRV_TIMER_IFLG_FAST
;
1780 tu
->timeri
->callback
= tu
->tread
1781 ? snd_timer_user_tinterrupt
: snd_timer_user_interrupt
;
1782 tu
->timeri
->ccallback
= snd_timer_user_ccallback
;
1783 tu
->timeri
->callback_data
= (void *)tu
;
1784 tu
->timeri
->disconnect
= snd_timer_user_disconnect
;
1786 err
= snd_timer_open(tu
->timeri
, &tselect
.id
, current
->pid
);
1788 snd_timer_instance_free(tu
->timeri
);
1796 static int snd_timer_user_info(struct file
*file
,
1797 struct snd_timer_info __user
*_info
)
1799 struct snd_timer_user
*tu
;
1800 struct snd_timer_info
*info
;
1801 struct snd_timer
*t
;
1804 tu
= file
->private_data
;
1807 t
= tu
->timeri
->timer
;
1811 info
= kzalloc(sizeof(*info
), GFP_KERNEL
);
1814 info
->card
= t
->card
? t
->card
->number
: -1;
1815 if (t
->hw
.flags
& SNDRV_TIMER_HW_SLAVE
)
1816 info
->flags
|= SNDRV_TIMER_FLG_SLAVE
;
1817 strlcpy(info
->id
, t
->id
, sizeof(info
->id
));
1818 strlcpy(info
->name
, t
->name
, sizeof(info
->name
));
1819 info
->resolution
= t
->hw
.resolution
;
1820 if (copy_to_user(_info
, info
, sizeof(*_info
)))
1826 static int snd_timer_user_params(struct file
*file
,
1827 struct snd_timer_params __user
*_params
)
1829 struct snd_timer_user
*tu
;
1830 struct snd_timer_params params
;
1831 struct snd_timer
*t
;
1834 tu
= file
->private_data
;
1837 t
= tu
->timeri
->timer
;
1840 if (copy_from_user(¶ms
, _params
, sizeof(params
)))
1842 if (!(t
->hw
.flags
& SNDRV_TIMER_HW_SLAVE
)) {
1845 if (params
.ticks
< 1) {
1850 /* Don't allow resolution less than 1ms */
1851 resolution
= snd_timer_resolution(tu
->timeri
);
1852 resolution
*= params
.ticks
;
1853 if (resolution
< 1000000) {
1858 if (params
.queue_size
> 0 &&
1859 (params
.queue_size
< 32 || params
.queue_size
> 1024)) {
1863 if (params
.filter
& ~((1<<SNDRV_TIMER_EVENT_RESOLUTION
)|
1864 (1<<SNDRV_TIMER_EVENT_TICK
)|
1865 (1<<SNDRV_TIMER_EVENT_START
)|
1866 (1<<SNDRV_TIMER_EVENT_STOP
)|
1867 (1<<SNDRV_TIMER_EVENT_CONTINUE
)|
1868 (1<<SNDRV_TIMER_EVENT_PAUSE
)|
1869 (1<<SNDRV_TIMER_EVENT_SUSPEND
)|
1870 (1<<SNDRV_TIMER_EVENT_RESUME
)|
1871 (1<<SNDRV_TIMER_EVENT_MSTART
)|
1872 (1<<SNDRV_TIMER_EVENT_MSTOP
)|
1873 (1<<SNDRV_TIMER_EVENT_MCONTINUE
)|
1874 (1<<SNDRV_TIMER_EVENT_MPAUSE
)|
1875 (1<<SNDRV_TIMER_EVENT_MSUSPEND
)|
1876 (1<<SNDRV_TIMER_EVENT_MRESUME
))) {
1880 snd_timer_stop(tu
->timeri
);
1881 spin_lock_irq(&t
->lock
);
1882 tu
->timeri
->flags
&= ~(SNDRV_TIMER_IFLG_AUTO
|
1883 SNDRV_TIMER_IFLG_EXCLUSIVE
|
1884 SNDRV_TIMER_IFLG_EARLY_EVENT
);
1885 if (params
.flags
& SNDRV_TIMER_PSFLG_AUTO
)
1886 tu
->timeri
->flags
|= SNDRV_TIMER_IFLG_AUTO
;
1887 if (params
.flags
& SNDRV_TIMER_PSFLG_EXCLUSIVE
)
1888 tu
->timeri
->flags
|= SNDRV_TIMER_IFLG_EXCLUSIVE
;
1889 if (params
.flags
& SNDRV_TIMER_PSFLG_EARLY_EVENT
)
1890 tu
->timeri
->flags
|= SNDRV_TIMER_IFLG_EARLY_EVENT
;
1891 spin_unlock_irq(&t
->lock
);
1892 if (params
.queue_size
> 0 &&
1893 (unsigned int)tu
->queue_size
!= params
.queue_size
) {
1894 err
= realloc_user_queue(tu
, params
.queue_size
);
1898 spin_lock_irq(&tu
->qlock
);
1899 tu
->qhead
= tu
->qtail
= tu
->qused
= 0;
1900 if (tu
->timeri
->flags
& SNDRV_TIMER_IFLG_EARLY_EVENT
) {
1902 struct snd_timer_tread64 tread
;
1903 memset(&tread
, 0, sizeof(tread
));
1904 tread
.event
= SNDRV_TIMER_EVENT_EARLY
;
1905 tread
.tstamp_sec
= 0;
1906 tread
.tstamp_nsec
= 0;
1908 snd_timer_user_append_to_tqueue(tu
, &tread
);
1910 struct snd_timer_read
*r
= &tu
->queue
[0];
1917 tu
->filter
= params
.filter
;
1918 tu
->ticks
= params
.ticks
;
1919 spin_unlock_irq(&tu
->qlock
);
1922 if (copy_to_user(_params
, ¶ms
, sizeof(params
)))
1927 static int snd_timer_user_status32(struct file
*file
,
1928 struct snd_timer_status32 __user
*_status
)
1930 struct snd_timer_user
*tu
;
1931 struct snd_timer_status32 status
;
1933 tu
= file
->private_data
;
1936 memset(&status
, 0, sizeof(status
));
1937 status
.tstamp_sec
= tu
->tstamp
.tv_sec
;
1938 status
.tstamp_nsec
= tu
->tstamp
.tv_nsec
;
1939 status
.resolution
= snd_timer_resolution(tu
->timeri
);
1940 status
.lost
= tu
->timeri
->lost
;
1941 status
.overrun
= tu
->overrun
;
1942 spin_lock_irq(&tu
->qlock
);
1943 status
.queue
= tu
->qused
;
1944 spin_unlock_irq(&tu
->qlock
);
1945 if (copy_to_user(_status
, &status
, sizeof(status
)))
1950 static int snd_timer_user_status64(struct file
*file
,
1951 struct snd_timer_status64 __user
*_status
)
1953 struct snd_timer_user
*tu
;
1954 struct snd_timer_status64 status
;
1956 tu
= file
->private_data
;
1959 memset(&status
, 0, sizeof(status
));
1960 status
.tstamp_sec
= tu
->tstamp
.tv_sec
;
1961 status
.tstamp_nsec
= tu
->tstamp
.tv_nsec
;
1962 status
.resolution
= snd_timer_resolution(tu
->timeri
);
1963 status
.lost
= tu
->timeri
->lost
;
1964 status
.overrun
= tu
->overrun
;
1965 spin_lock_irq(&tu
->qlock
);
1966 status
.queue
= tu
->qused
;
1967 spin_unlock_irq(&tu
->qlock
);
1968 if (copy_to_user(_status
, &status
, sizeof(status
)))
1973 static int snd_timer_user_start(struct file
*file
)
1976 struct snd_timer_user
*tu
;
1978 tu
= file
->private_data
;
1981 snd_timer_stop(tu
->timeri
);
1982 tu
->timeri
->lost
= 0;
1983 tu
->last_resolution
= 0;
1984 err
= snd_timer_start(tu
->timeri
, tu
->ticks
);
1990 static int snd_timer_user_stop(struct file
*file
)
1993 struct snd_timer_user
*tu
;
1995 tu
= file
->private_data
;
1998 err
= snd_timer_stop(tu
->timeri
);
2004 static int snd_timer_user_continue(struct file
*file
)
2007 struct snd_timer_user
*tu
;
2009 tu
= file
->private_data
;
2012 /* start timer instead of continue if it's not used before */
2013 if (!(tu
->timeri
->flags
& SNDRV_TIMER_IFLG_PAUSED
))
2014 return snd_timer_user_start(file
);
2015 tu
->timeri
->lost
= 0;
2016 err
= snd_timer_continue(tu
->timeri
);
2022 static int snd_timer_user_pause(struct file
*file
)
2025 struct snd_timer_user
*tu
;
2027 tu
= file
->private_data
;
2030 err
= snd_timer_pause(tu
->timeri
);
2036 static int snd_timer_user_tread(void __user
*argp
, struct snd_timer_user
*tu
,
2037 unsigned int cmd
, bool compat
)
2039 int __user
*p
= argp
;
2040 int xarg
, old_tread
;
2042 if (tu
->timeri
) /* too late */
2044 if (get_user(xarg
, p
))
2047 old_tread
= tu
->tread
;
2050 tu
->tread
= TREAD_FORMAT_NONE
;
2051 else if (cmd
== SNDRV_TIMER_IOCTL_TREAD64
||
2052 (IS_ENABLED(CONFIG_64BIT
) && !compat
))
2053 tu
->tread
= TREAD_FORMAT_TIME64
;
2055 tu
->tread
= TREAD_FORMAT_TIME32
;
2057 if (tu
->tread
!= old_tread
&&
2058 realloc_user_queue(tu
, tu
->queue_size
) < 0) {
2059 tu
->tread
= old_tread
;
2067 SNDRV_TIMER_IOCTL_START_OLD
= _IO('T', 0x20),
2068 SNDRV_TIMER_IOCTL_STOP_OLD
= _IO('T', 0x21),
2069 SNDRV_TIMER_IOCTL_CONTINUE_OLD
= _IO('T', 0x22),
2070 SNDRV_TIMER_IOCTL_PAUSE_OLD
= _IO('T', 0x23),
2073 static long __snd_timer_user_ioctl(struct file
*file
, unsigned int cmd
,
2074 unsigned long arg
, bool compat
)
2076 struct snd_timer_user
*tu
;
2077 void __user
*argp
= (void __user
*)arg
;
2078 int __user
*p
= argp
;
2080 tu
= file
->private_data
;
2082 case SNDRV_TIMER_IOCTL_PVERSION
:
2083 return put_user(SNDRV_TIMER_VERSION
, p
) ? -EFAULT
: 0;
2084 case SNDRV_TIMER_IOCTL_NEXT_DEVICE
:
2085 return snd_timer_user_next_device(argp
);
2086 case SNDRV_TIMER_IOCTL_TREAD_OLD
:
2087 case SNDRV_TIMER_IOCTL_TREAD64
:
2088 return snd_timer_user_tread(argp
, tu
, cmd
, compat
);
2089 case SNDRV_TIMER_IOCTL_GINFO
:
2090 return snd_timer_user_ginfo(file
, argp
);
2091 case SNDRV_TIMER_IOCTL_GPARAMS
:
2092 return snd_timer_user_gparams(file
, argp
);
2093 case SNDRV_TIMER_IOCTL_GSTATUS
:
2094 return snd_timer_user_gstatus(file
, argp
);
2095 case SNDRV_TIMER_IOCTL_SELECT
:
2096 return snd_timer_user_tselect(file
, argp
);
2097 case SNDRV_TIMER_IOCTL_INFO
:
2098 return snd_timer_user_info(file
, argp
);
2099 case SNDRV_TIMER_IOCTL_PARAMS
:
2100 return snd_timer_user_params(file
, argp
);
2101 case SNDRV_TIMER_IOCTL_STATUS32
:
2102 return snd_timer_user_status32(file
, argp
);
2103 case SNDRV_TIMER_IOCTL_STATUS64
:
2104 return snd_timer_user_status64(file
, argp
);
2105 case SNDRV_TIMER_IOCTL_START
:
2106 case SNDRV_TIMER_IOCTL_START_OLD
:
2107 return snd_timer_user_start(file
);
2108 case SNDRV_TIMER_IOCTL_STOP
:
2109 case SNDRV_TIMER_IOCTL_STOP_OLD
:
2110 return snd_timer_user_stop(file
);
2111 case SNDRV_TIMER_IOCTL_CONTINUE
:
2112 case SNDRV_TIMER_IOCTL_CONTINUE_OLD
:
2113 return snd_timer_user_continue(file
);
2114 case SNDRV_TIMER_IOCTL_PAUSE
:
2115 case SNDRV_TIMER_IOCTL_PAUSE_OLD
:
2116 return snd_timer_user_pause(file
);
2121 static long snd_timer_user_ioctl(struct file
*file
, unsigned int cmd
,
2124 struct snd_timer_user
*tu
= file
->private_data
;
2127 mutex_lock(&tu
->ioctl_lock
);
2128 ret
= __snd_timer_user_ioctl(file
, cmd
, arg
, false);
2129 mutex_unlock(&tu
->ioctl_lock
);
2133 static int snd_timer_user_fasync(int fd
, struct file
* file
, int on
)
2135 struct snd_timer_user
*tu
;
2137 tu
= file
->private_data
;
2138 return fasync_helper(fd
, file
, on
, &tu
->fasync
);
2141 static ssize_t
snd_timer_user_read(struct file
*file
, char __user
*buffer
,
2142 size_t count
, loff_t
*offset
)
2144 struct snd_timer_tread64
*tread
;
2145 struct snd_timer_tread32 tread32
;
2146 struct snd_timer_user
*tu
;
2147 long result
= 0, unit
;
2151 tu
= file
->private_data
;
2152 switch (tu
->tread
) {
2153 case TREAD_FORMAT_TIME64
:
2154 unit
= sizeof(struct snd_timer_tread64
);
2156 case TREAD_FORMAT_TIME32
:
2157 unit
= sizeof(struct snd_timer_tread32
);
2159 case TREAD_FORMAT_NONE
:
2160 unit
= sizeof(struct snd_timer_read
);
2163 WARN_ONCE(1, "Corrupt snd_timer_user\n");
2167 mutex_lock(&tu
->ioctl_lock
);
2168 spin_lock_irq(&tu
->qlock
);
2169 while ((long)count
- result
>= unit
) {
2170 while (!tu
->qused
) {
2171 wait_queue_entry_t wait
;
2173 if ((file
->f_flags
& O_NONBLOCK
) != 0 || result
> 0) {
2178 set_current_state(TASK_INTERRUPTIBLE
);
2179 init_waitqueue_entry(&wait
, current
);
2180 add_wait_queue(&tu
->qchange_sleep
, &wait
);
2182 spin_unlock_irq(&tu
->qlock
);
2183 mutex_unlock(&tu
->ioctl_lock
);
2185 mutex_lock(&tu
->ioctl_lock
);
2186 spin_lock_irq(&tu
->qlock
);
2188 remove_wait_queue(&tu
->qchange_sleep
, &wait
);
2190 if (tu
->disconnected
) {
2194 if (signal_pending(current
)) {
2200 qhead
= tu
->qhead
++;
2201 tu
->qhead
%= tu
->queue_size
;
2203 spin_unlock_irq(&tu
->qlock
);
2205 tread
= &tu
->tqueue
[qhead
];
2207 switch (tu
->tread
) {
2208 case TREAD_FORMAT_TIME64
:
2209 if (copy_to_user(buffer
, tread
,
2210 sizeof(struct snd_timer_tread64
)))
2213 case TREAD_FORMAT_TIME32
:
2214 memset(&tread32
, 0, sizeof(tread32
));
2215 tread32
= (struct snd_timer_tread32
) {
2216 .event
= tread
->event
,
2217 .tstamp_sec
= tread
->tstamp_sec
,
2218 .tstamp_nsec
= tread
->tstamp_nsec
,
2222 if (copy_to_user(buffer
, &tread32
, sizeof(tread32
)))
2225 case TREAD_FORMAT_NONE
:
2226 if (copy_to_user(buffer
, &tu
->queue
[qhead
],
2227 sizeof(struct snd_timer_read
)))
2235 spin_lock_irq(&tu
->qlock
);
2242 spin_unlock_irq(&tu
->qlock
);
2243 mutex_unlock(&tu
->ioctl_lock
);
2244 return result
> 0 ? result
: err
;
2247 static __poll_t
snd_timer_user_poll(struct file
*file
, poll_table
* wait
)
2250 struct snd_timer_user
*tu
;
2252 tu
= file
->private_data
;
2254 poll_wait(file
, &tu
->qchange_sleep
, wait
);
2257 spin_lock_irq(&tu
->qlock
);
2259 mask
|= EPOLLIN
| EPOLLRDNORM
;
2260 if (tu
->disconnected
)
2262 spin_unlock_irq(&tu
->qlock
);
2267 #ifdef CONFIG_COMPAT
2268 #include "timer_compat.c"
2270 #define snd_timer_user_ioctl_compat NULL
2273 static const struct file_operations snd_timer_f_ops
=
2275 .owner
= THIS_MODULE
,
2276 .read
= snd_timer_user_read
,
2277 .open
= snd_timer_user_open
,
2278 .release
= snd_timer_user_release
,
2279 .llseek
= no_llseek
,
2280 .poll
= snd_timer_user_poll
,
2281 .unlocked_ioctl
= snd_timer_user_ioctl
,
2282 .compat_ioctl
= snd_timer_user_ioctl_compat
,
2283 .fasync
= snd_timer_user_fasync
,
2286 /* unregister the system timer */
2287 static void snd_timer_free_all(void)
2289 struct snd_timer
*timer
, *n
;
2291 list_for_each_entry_safe(timer
, n
, &snd_timer_list
, device_list
)
2292 snd_timer_free(timer
);
2295 static struct device timer_dev
;
2301 static int __init
alsa_timer_init(void)
2305 snd_device_initialize(&timer_dev
, NULL
);
2306 dev_set_name(&timer_dev
, "timer");
2308 #ifdef SNDRV_OSS_INFO_DEV_TIMERS
2309 snd_oss_info_register(SNDRV_OSS_INFO_DEV_TIMERS
, SNDRV_CARDS
- 1,
2313 err
= snd_timer_register_system();
2315 pr_err("ALSA: unable to register system timer (%i)\n", err
);
2319 err
= snd_register_device(SNDRV_DEVICE_TYPE_TIMER
, NULL
, 0,
2320 &snd_timer_f_ops
, NULL
, &timer_dev
);
2322 pr_err("ALSA: unable to register timer device (%i)\n", err
);
2323 snd_timer_free_all();
2327 snd_timer_proc_init();
2331 put_device(&timer_dev
);
2335 static void __exit
alsa_timer_exit(void)
2337 snd_unregister_device(&timer_dev
);
2338 snd_timer_free_all();
2339 put_device(&timer_dev
);
2340 snd_timer_proc_done();
2341 #ifdef SNDRV_OSS_INFO_DEV_TIMERS
2342 snd_oss_info_unregister(SNDRV_OSS_INFO_DEV_TIMERS
, SNDRV_CARDS
- 1);
2346 module_init(alsa_timer_init
)
2347 module_exit(alsa_timer_exit
)