xref: /openbmc/linux/sound/core/timer.c (revision 110e6f26)
1 /*
2  *  Timers abstract layer
3  *  Copyright (c) by Jaroslav Kysela <perex@perex.cz>
4  *
5  *
6  *   This program is free software; you can redistribute it and/or modify
7  *   it under the terms of the GNU General Public License as published by
8  *   the Free Software Foundation; either version 2 of the License, or
9  *   (at your option) any later version.
10  *
11  *   This program is distributed in the hope that it will be useful,
12  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *   GNU General Public License for more details.
15  *
16  *   You should have received a copy of the GNU General Public License
17  *   along with this program; if not, write to the Free Software
18  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19  *
20  */
21 
22 #include <linux/delay.h>
23 #include <linux/init.h>
24 #include <linux/slab.h>
25 #include <linux/time.h>
26 #include <linux/mutex.h>
27 #include <linux/device.h>
28 #include <linux/module.h>
29 #include <linux/string.h>
30 #include <sound/core.h>
31 #include <sound/timer.h>
32 #include <sound/control.h>
33 #include <sound/info.h>
34 #include <sound/minors.h>
35 #include <sound/initval.h>
36 #include <linux/kmod.h>
37 
38 #if IS_ENABLED(CONFIG_SND_HRTIMER)
39 #define DEFAULT_TIMER_LIMIT 4
40 #elif IS_ENABLED(CONFIG_SND_RTCTIMER)
41 #define DEFAULT_TIMER_LIMIT 2
42 #else
43 #define DEFAULT_TIMER_LIMIT 1
44 #endif
45 
46 static int timer_limit = DEFAULT_TIMER_LIMIT;
47 static int timer_tstamp_monotonic = 1;
48 MODULE_AUTHOR("Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.de>");
49 MODULE_DESCRIPTION("ALSA timer interface");
50 MODULE_LICENSE("GPL");
51 module_param(timer_limit, int, 0444);
52 MODULE_PARM_DESC(timer_limit, "Maximum global timers in system.");
53 module_param(timer_tstamp_monotonic, int, 0444);
54 MODULE_PARM_DESC(timer_tstamp_monotonic, "Use posix monotonic clock source for timestamps (default).");
55 
56 MODULE_ALIAS_CHARDEV(CONFIG_SND_MAJOR, SNDRV_MINOR_TIMER);
57 MODULE_ALIAS("devname:snd/timer");
58 
59 struct snd_timer_user {
60 	struct snd_timer_instance *timeri;
61 	int tread;		/* enhanced read with timestamps and events */
62 	unsigned long ticks;
63 	unsigned long overrun;
64 	int qhead;
65 	int qtail;
66 	int qused;
67 	int queue_size;
68 	bool disconnected;
69 	struct snd_timer_read *queue;
70 	struct snd_timer_tread *tqueue;
71 	spinlock_t qlock;
72 	unsigned long last_resolution;
73 	unsigned int filter;
74 	struct timespec tstamp;		/* trigger tstamp */
75 	wait_queue_head_t qchange_sleep;
76 	struct fasync_struct *fasync;
77 	struct mutex ioctl_lock;
78 };
79 
80 /* list of timers */
81 static LIST_HEAD(snd_timer_list);
82 
83 /* list of slave instances */
84 static LIST_HEAD(snd_timer_slave_list);
85 
86 /* lock for slave active lists */
87 static DEFINE_SPINLOCK(slave_active_lock);
88 
89 static DEFINE_MUTEX(register_mutex);
90 
91 static int snd_timer_free(struct snd_timer *timer);
92 static int snd_timer_dev_free(struct snd_device *device);
93 static int snd_timer_dev_register(struct snd_device *device);
94 static int snd_timer_dev_disconnect(struct snd_device *device);
95 
96 static void snd_timer_reschedule(struct snd_timer * timer, unsigned long ticks_left);
97 
98 /*
99  * create a timer instance with the given owner string.
100  * when timer is not NULL, increments the module counter
101  */
102 static struct snd_timer_instance *snd_timer_instance_new(char *owner,
103 							 struct snd_timer *timer)
104 {
105 	struct snd_timer_instance *timeri;
106 	timeri = kzalloc(sizeof(*timeri), GFP_KERNEL);
107 	if (timeri == NULL)
108 		return NULL;
109 	timeri->owner = kstrdup(owner, GFP_KERNEL);
110 	if (! timeri->owner) {
111 		kfree(timeri);
112 		return NULL;
113 	}
114 	INIT_LIST_HEAD(&timeri->open_list);
115 	INIT_LIST_HEAD(&timeri->active_list);
116 	INIT_LIST_HEAD(&timeri->ack_list);
117 	INIT_LIST_HEAD(&timeri->slave_list_head);
118 	INIT_LIST_HEAD(&timeri->slave_active_head);
119 
120 	timeri->timer = timer;
121 	if (timer && !try_module_get(timer->module)) {
122 		kfree(timeri->owner);
123 		kfree(timeri);
124 		return NULL;
125 	}
126 
127 	return timeri;
128 }
129 
130 /*
131  * find a timer instance from the given timer id
132  */
133 static struct snd_timer *snd_timer_find(struct snd_timer_id *tid)
134 {
135 	struct snd_timer *timer = NULL;
136 
137 	list_for_each_entry(timer, &snd_timer_list, device_list) {
138 		if (timer->tmr_class != tid->dev_class)
139 			continue;
140 		if ((timer->tmr_class == SNDRV_TIMER_CLASS_CARD ||
141 		     timer->tmr_class == SNDRV_TIMER_CLASS_PCM) &&
142 		    (timer->card == NULL ||
143 		     timer->card->number != tid->card))
144 			continue;
145 		if (timer->tmr_device != tid->device)
146 			continue;
147 		if (timer->tmr_subdevice != tid->subdevice)
148 			continue;
149 		return timer;
150 	}
151 	return NULL;
152 }
153 
154 #ifdef CONFIG_MODULES
155 
156 static void snd_timer_request(struct snd_timer_id *tid)
157 {
158 	switch (tid->dev_class) {
159 	case SNDRV_TIMER_CLASS_GLOBAL:
160 		if (tid->device < timer_limit)
161 			request_module("snd-timer-%i", tid->device);
162 		break;
163 	case SNDRV_TIMER_CLASS_CARD:
164 	case SNDRV_TIMER_CLASS_PCM:
165 		if (tid->card < snd_ecards_limit)
166 			request_module("snd-card-%i", tid->card);
167 		break;
168 	default:
169 		break;
170 	}
171 }
172 
173 #endif
174 
175 /*
176  * look for a master instance matching with the slave id of the given slave.
177  * when found, relink the open_link of the slave.
178  *
179  * call this with register_mutex down.
180  */
181 static void snd_timer_check_slave(struct snd_timer_instance *slave)
182 {
183 	struct snd_timer *timer;
184 	struct snd_timer_instance *master;
185 
186 	/* FIXME: it's really dumb to look up all entries.. */
187 	list_for_each_entry(timer, &snd_timer_list, device_list) {
188 		list_for_each_entry(master, &timer->open_list_head, open_list) {
189 			if (slave->slave_class == master->slave_class &&
190 			    slave->slave_id == master->slave_id) {
191 				list_move_tail(&slave->open_list,
192 					       &master->slave_list_head);
193 				spin_lock_irq(&slave_active_lock);
194 				slave->master = master;
195 				slave->timer = master->timer;
196 				spin_unlock_irq(&slave_active_lock);
197 				return;
198 			}
199 		}
200 	}
201 }
202 
203 /*
204  * look for slave instances matching with the slave id of the given master.
205  * when found, relink the open_link of slaves.
206  *
207  * call this with register_mutex down.
208  */
209 static void snd_timer_check_master(struct snd_timer_instance *master)
210 {
211 	struct snd_timer_instance *slave, *tmp;
212 
213 	/* check all pending slaves */
214 	list_for_each_entry_safe(slave, tmp, &snd_timer_slave_list, open_list) {
215 		if (slave->slave_class == master->slave_class &&
216 		    slave->slave_id == master->slave_id) {
217 			list_move_tail(&slave->open_list, &master->slave_list_head);
218 			spin_lock_irq(&slave_active_lock);
219 			spin_lock(&master->timer->lock);
220 			slave->master = master;
221 			slave->timer = master->timer;
222 			if (slave->flags & SNDRV_TIMER_IFLG_RUNNING)
223 				list_add_tail(&slave->active_list,
224 					      &master->slave_active_head);
225 			spin_unlock(&master->timer->lock);
226 			spin_unlock_irq(&slave_active_lock);
227 		}
228 	}
229 }
230 
231 /*
232  * open a timer instance
233  * when opening a master, the slave id must be here given.
234  */
235 int snd_timer_open(struct snd_timer_instance **ti,
236 		   char *owner, struct snd_timer_id *tid,
237 		   unsigned int slave_id)
238 {
239 	struct snd_timer *timer;
240 	struct snd_timer_instance *timeri = NULL;
241 
242 	if (tid->dev_class == SNDRV_TIMER_CLASS_SLAVE) {
243 		/* open a slave instance */
244 		if (tid->dev_sclass <= SNDRV_TIMER_SCLASS_NONE ||
245 		    tid->dev_sclass > SNDRV_TIMER_SCLASS_OSS_SEQUENCER) {
246 			pr_debug("ALSA: timer: invalid slave class %i\n",
247 				 tid->dev_sclass);
248 			return -EINVAL;
249 		}
250 		mutex_lock(&register_mutex);
251 		timeri = snd_timer_instance_new(owner, NULL);
252 		if (!timeri) {
253 			mutex_unlock(&register_mutex);
254 			return -ENOMEM;
255 		}
256 		timeri->slave_class = tid->dev_sclass;
257 		timeri->slave_id = tid->device;
258 		timeri->flags |= SNDRV_TIMER_IFLG_SLAVE;
259 		list_add_tail(&timeri->open_list, &snd_timer_slave_list);
260 		snd_timer_check_slave(timeri);
261 		mutex_unlock(&register_mutex);
262 		*ti = timeri;
263 		return 0;
264 	}
265 
266 	/* open a master instance */
267 	mutex_lock(&register_mutex);
268 	timer = snd_timer_find(tid);
269 #ifdef CONFIG_MODULES
270 	if (!timer) {
271 		mutex_unlock(&register_mutex);
272 		snd_timer_request(tid);
273 		mutex_lock(&register_mutex);
274 		timer = snd_timer_find(tid);
275 	}
276 #endif
277 	if (!timer) {
278 		mutex_unlock(&register_mutex);
279 		return -ENODEV;
280 	}
281 	if (!list_empty(&timer->open_list_head)) {
282 		timeri = list_entry(timer->open_list_head.next,
283 				    struct snd_timer_instance, open_list);
284 		if (timeri->flags & SNDRV_TIMER_IFLG_EXCLUSIVE) {
285 			mutex_unlock(&register_mutex);
286 			return -EBUSY;
287 		}
288 	}
289 	timeri = snd_timer_instance_new(owner, timer);
290 	if (!timeri) {
291 		mutex_unlock(&register_mutex);
292 		return -ENOMEM;
293 	}
294 	/* take a card refcount for safe disconnection */
295 	if (timer->card)
296 		get_device(&timer->card->card_dev);
297 	timeri->slave_class = tid->dev_sclass;
298 	timeri->slave_id = slave_id;
299 	if (list_empty(&timer->open_list_head) && timer->hw.open)
300 		timer->hw.open(timer);
301 	list_add_tail(&timeri->open_list, &timer->open_list_head);
302 	snd_timer_check_master(timeri);
303 	mutex_unlock(&register_mutex);
304 	*ti = timeri;
305 	return 0;
306 }
307 
308 /*
309  * close a timer instance
310  */
311 int snd_timer_close(struct snd_timer_instance *timeri)
312 {
313 	struct snd_timer *timer = NULL;
314 	struct snd_timer_instance *slave, *tmp;
315 
316 	if (snd_BUG_ON(!timeri))
317 		return -ENXIO;
318 
319 	mutex_lock(&register_mutex);
320 	list_del(&timeri->open_list);
321 
322 	/* force to stop the timer */
323 	snd_timer_stop(timeri);
324 
325 	timer = timeri->timer;
326 	if (timer) {
327 		/* wait, until the active callback is finished */
328 		spin_lock_irq(&timer->lock);
329 		while (timeri->flags & SNDRV_TIMER_IFLG_CALLBACK) {
330 			spin_unlock_irq(&timer->lock);
331 			udelay(10);
332 			spin_lock_irq(&timer->lock);
333 		}
334 		spin_unlock_irq(&timer->lock);
335 
336 		/* remove slave links */
337 		spin_lock_irq(&slave_active_lock);
338 		spin_lock(&timer->lock);
339 		list_for_each_entry_safe(slave, tmp, &timeri->slave_list_head,
340 					 open_list) {
341 			list_move_tail(&slave->open_list, &snd_timer_slave_list);
342 			slave->master = NULL;
343 			slave->timer = NULL;
344 			list_del_init(&slave->ack_list);
345 			list_del_init(&slave->active_list);
346 		}
347 		spin_unlock(&timer->lock);
348 		spin_unlock_irq(&slave_active_lock);
349 
350 		/* slave doesn't need to release timer resources below */
351 		if (timeri->flags & SNDRV_TIMER_IFLG_SLAVE)
352 			timer = NULL;
353 	}
354 
355 	if (timeri->private_free)
356 		timeri->private_free(timeri);
357 	kfree(timeri->owner);
358 	kfree(timeri);
359 
360 	if (timer) {
361 		if (list_empty(&timer->open_list_head) && timer->hw.close)
362 			timer->hw.close(timer);
363 		/* release a card refcount for safe disconnection */
364 		if (timer->card)
365 			put_device(&timer->card->card_dev);
366 		module_put(timer->module);
367 	}
368 
369 	mutex_unlock(&register_mutex);
370 	return 0;
371 }
372 
373 unsigned long snd_timer_resolution(struct snd_timer_instance *timeri)
374 {
375 	struct snd_timer * timer;
376 
377 	if (timeri == NULL)
378 		return 0;
379 	if ((timer = timeri->timer) != NULL) {
380 		if (timer->hw.c_resolution)
381 			return timer->hw.c_resolution(timer);
382 		return timer->hw.resolution;
383 	}
384 	return 0;
385 }
386 
387 static void snd_timer_notify1(struct snd_timer_instance *ti, int event)
388 {
389 	struct snd_timer *timer;
390 	unsigned long resolution = 0;
391 	struct snd_timer_instance *ts;
392 	struct timespec tstamp;
393 
394 	if (timer_tstamp_monotonic)
395 		ktime_get_ts(&tstamp);
396 	else
397 		getnstimeofday(&tstamp);
398 	if (snd_BUG_ON(event < SNDRV_TIMER_EVENT_START ||
399 		       event > SNDRV_TIMER_EVENT_PAUSE))
400 		return;
401 	if (event == SNDRV_TIMER_EVENT_START ||
402 	    event == SNDRV_TIMER_EVENT_CONTINUE)
403 		resolution = snd_timer_resolution(ti);
404 	if (ti->ccallback)
405 		ti->ccallback(ti, event, &tstamp, resolution);
406 	if (ti->flags & SNDRV_TIMER_IFLG_SLAVE)
407 		return;
408 	timer = ti->timer;
409 	if (timer == NULL)
410 		return;
411 	if (timer->hw.flags & SNDRV_TIMER_HW_SLAVE)
412 		return;
413 	list_for_each_entry(ts, &ti->slave_active_head, active_list)
414 		if (ts->ccallback)
415 			ts->ccallback(ts, event + 100, &tstamp, resolution);
416 }
417 
418 /* start/continue a master timer */
419 static int snd_timer_start1(struct snd_timer_instance *timeri,
420 			    bool start, unsigned long ticks)
421 {
422 	struct snd_timer *timer;
423 	int result;
424 	unsigned long flags;
425 
426 	timer = timeri->timer;
427 	if (!timer)
428 		return -EINVAL;
429 
430 	spin_lock_irqsave(&timer->lock, flags);
431 	if (timer->card && timer->card->shutdown) {
432 		result = -ENODEV;
433 		goto unlock;
434 	}
435 	if (timeri->flags & (SNDRV_TIMER_IFLG_RUNNING |
436 			     SNDRV_TIMER_IFLG_START)) {
437 		result = -EBUSY;
438 		goto unlock;
439 	}
440 
441 	if (start)
442 		timeri->ticks = timeri->cticks = ticks;
443 	else if (!timeri->cticks)
444 		timeri->cticks = 1;
445 	timeri->pticks = 0;
446 
447 	list_move_tail(&timeri->active_list, &timer->active_list_head);
448 	if (timer->running) {
449 		if (timer->hw.flags & SNDRV_TIMER_HW_SLAVE)
450 			goto __start_now;
451 		timer->flags |= SNDRV_TIMER_FLG_RESCHED;
452 		timeri->flags |= SNDRV_TIMER_IFLG_START;
453 		result = 1; /* delayed start */
454 	} else {
455 		if (start)
456 			timer->sticks = ticks;
457 		timer->hw.start(timer);
458 	      __start_now:
459 		timer->running++;
460 		timeri->flags |= SNDRV_TIMER_IFLG_RUNNING;
461 		result = 0;
462 	}
463 	snd_timer_notify1(timeri, start ? SNDRV_TIMER_EVENT_START :
464 			  SNDRV_TIMER_EVENT_CONTINUE);
465  unlock:
466 	spin_unlock_irqrestore(&timer->lock, flags);
467 	return result;
468 }
469 
470 /* start/continue a slave timer */
471 static int snd_timer_start_slave(struct snd_timer_instance *timeri,
472 				 bool start)
473 {
474 	unsigned long flags;
475 
476 	spin_lock_irqsave(&slave_active_lock, flags);
477 	if (timeri->flags & SNDRV_TIMER_IFLG_RUNNING) {
478 		spin_unlock_irqrestore(&slave_active_lock, flags);
479 		return -EBUSY;
480 	}
481 	timeri->flags |= SNDRV_TIMER_IFLG_RUNNING;
482 	if (timeri->master && timeri->timer) {
483 		spin_lock(&timeri->timer->lock);
484 		list_add_tail(&timeri->active_list,
485 			      &timeri->master->slave_active_head);
486 		snd_timer_notify1(timeri, start ? SNDRV_TIMER_EVENT_START :
487 				  SNDRV_TIMER_EVENT_CONTINUE);
488 		spin_unlock(&timeri->timer->lock);
489 	}
490 	spin_unlock_irqrestore(&slave_active_lock, flags);
491 	return 1; /* delayed start */
492 }
493 
494 /* stop/pause a master timer */
495 static int snd_timer_stop1(struct snd_timer_instance *timeri, bool stop)
496 {
497 	struct snd_timer *timer;
498 	int result = 0;
499 	unsigned long flags;
500 
501 	timer = timeri->timer;
502 	if (!timer)
503 		return -EINVAL;
504 	spin_lock_irqsave(&timer->lock, flags);
505 	if (!(timeri->flags & (SNDRV_TIMER_IFLG_RUNNING |
506 			       SNDRV_TIMER_IFLG_START))) {
507 		result = -EBUSY;
508 		goto unlock;
509 	}
510 	list_del_init(&timeri->ack_list);
511 	list_del_init(&timeri->active_list);
512 	if (timer->card && timer->card->shutdown)
513 		goto unlock;
514 	if (stop) {
515 		timeri->cticks = timeri->ticks;
516 		timeri->pticks = 0;
517 	}
518 	if ((timeri->flags & SNDRV_TIMER_IFLG_RUNNING) &&
519 	    !(--timer->running)) {
520 		timer->hw.stop(timer);
521 		if (timer->flags & SNDRV_TIMER_FLG_RESCHED) {
522 			timer->flags &= ~SNDRV_TIMER_FLG_RESCHED;
523 			snd_timer_reschedule(timer, 0);
524 			if (timer->flags & SNDRV_TIMER_FLG_CHANGE) {
525 				timer->flags &= ~SNDRV_TIMER_FLG_CHANGE;
526 				timer->hw.start(timer);
527 			}
528 		}
529 	}
530 	timeri->flags &= ~(SNDRV_TIMER_IFLG_RUNNING | SNDRV_TIMER_IFLG_START);
531 	snd_timer_notify1(timeri, stop ? SNDRV_TIMER_EVENT_STOP :
532 			  SNDRV_TIMER_EVENT_CONTINUE);
533  unlock:
534 	spin_unlock_irqrestore(&timer->lock, flags);
535 	return result;
536 }
537 
538 /* stop/pause a slave timer */
539 static int snd_timer_stop_slave(struct snd_timer_instance *timeri, bool stop)
540 {
541 	unsigned long flags;
542 
543 	spin_lock_irqsave(&slave_active_lock, flags);
544 	if (!(timeri->flags & SNDRV_TIMER_IFLG_RUNNING)) {
545 		spin_unlock_irqrestore(&slave_active_lock, flags);
546 		return -EBUSY;
547 	}
548 	timeri->flags &= ~SNDRV_TIMER_IFLG_RUNNING;
549 	if (timeri->timer) {
550 		spin_lock(&timeri->timer->lock);
551 		list_del_init(&timeri->ack_list);
552 		list_del_init(&timeri->active_list);
553 		snd_timer_notify1(timeri, stop ? SNDRV_TIMER_EVENT_STOP :
554 				  SNDRV_TIMER_EVENT_CONTINUE);
555 		spin_unlock(&timeri->timer->lock);
556 	}
557 	spin_unlock_irqrestore(&slave_active_lock, flags);
558 	return 0;
559 }
560 
561 /*
562  *  start the timer instance
563  */
564 int snd_timer_start(struct snd_timer_instance *timeri, unsigned int ticks)
565 {
566 	if (timeri == NULL || ticks < 1)
567 		return -EINVAL;
568 	if (timeri->flags & SNDRV_TIMER_IFLG_SLAVE)
569 		return snd_timer_start_slave(timeri, true);
570 	else
571 		return snd_timer_start1(timeri, true, ticks);
572 }
573 
574 /*
575  * stop the timer instance.
576  *
577  * do not call this from the timer callback!
578  */
579 int snd_timer_stop(struct snd_timer_instance *timeri)
580 {
581 	if (timeri->flags & SNDRV_TIMER_IFLG_SLAVE)
582 		return snd_timer_stop_slave(timeri, true);
583 	else
584 		return snd_timer_stop1(timeri, true);
585 }
586 
587 /*
588  * start again..  the tick is kept.
589  */
590 int snd_timer_continue(struct snd_timer_instance *timeri)
591 {
592 	if (timeri->flags & SNDRV_TIMER_IFLG_SLAVE)
593 		return snd_timer_start_slave(timeri, false);
594 	else
595 		return snd_timer_start1(timeri, false, 0);
596 }
597 
598 /*
599  * pause.. remember the ticks left
600  */
601 int snd_timer_pause(struct snd_timer_instance * timeri)
602 {
603 	if (timeri->flags & SNDRV_TIMER_IFLG_SLAVE)
604 		return snd_timer_stop_slave(timeri, false);
605 	else
606 		return snd_timer_stop1(timeri, false);
607 }
608 
609 /*
610  * reschedule the timer
611  *
612  * start pending instances and check the scheduling ticks.
613  * when the scheduling ticks is changed set CHANGE flag to reprogram the timer.
614  */
615 static void snd_timer_reschedule(struct snd_timer * timer, unsigned long ticks_left)
616 {
617 	struct snd_timer_instance *ti;
618 	unsigned long ticks = ~0UL;
619 
620 	list_for_each_entry(ti, &timer->active_list_head, active_list) {
621 		if (ti->flags & SNDRV_TIMER_IFLG_START) {
622 			ti->flags &= ~SNDRV_TIMER_IFLG_START;
623 			ti->flags |= SNDRV_TIMER_IFLG_RUNNING;
624 			timer->running++;
625 		}
626 		if (ti->flags & SNDRV_TIMER_IFLG_RUNNING) {
627 			if (ticks > ti->cticks)
628 				ticks = ti->cticks;
629 		}
630 	}
631 	if (ticks == ~0UL) {
632 		timer->flags &= ~SNDRV_TIMER_FLG_RESCHED;
633 		return;
634 	}
635 	if (ticks > timer->hw.ticks)
636 		ticks = timer->hw.ticks;
637 	if (ticks_left != ticks)
638 		timer->flags |= SNDRV_TIMER_FLG_CHANGE;
639 	timer->sticks = ticks;
640 }
641 
642 /*
643  * timer tasklet
644  *
645  */
646 static void snd_timer_tasklet(unsigned long arg)
647 {
648 	struct snd_timer *timer = (struct snd_timer *) arg;
649 	struct snd_timer_instance *ti;
650 	struct list_head *p;
651 	unsigned long resolution, ticks;
652 	unsigned long flags;
653 
654 	if (timer->card && timer->card->shutdown)
655 		return;
656 
657 	spin_lock_irqsave(&timer->lock, flags);
658 	/* now process all callbacks */
659 	while (!list_empty(&timer->sack_list_head)) {
660 		p = timer->sack_list_head.next;		/* get first item */
661 		ti = list_entry(p, struct snd_timer_instance, ack_list);
662 
663 		/* remove from ack_list and make empty */
664 		list_del_init(p);
665 
666 		ticks = ti->pticks;
667 		ti->pticks = 0;
668 		resolution = ti->resolution;
669 
670 		ti->flags |= SNDRV_TIMER_IFLG_CALLBACK;
671 		spin_unlock(&timer->lock);
672 		if (ti->callback)
673 			ti->callback(ti, resolution, ticks);
674 		spin_lock(&timer->lock);
675 		ti->flags &= ~SNDRV_TIMER_IFLG_CALLBACK;
676 	}
677 	spin_unlock_irqrestore(&timer->lock, flags);
678 }
679 
680 /*
681  * timer interrupt
682  *
683  * ticks_left is usually equal to timer->sticks.
684  *
685  */
686 void snd_timer_interrupt(struct snd_timer * timer, unsigned long ticks_left)
687 {
688 	struct snd_timer_instance *ti, *ts, *tmp;
689 	unsigned long resolution, ticks;
690 	struct list_head *p, *ack_list_head;
691 	unsigned long flags;
692 	int use_tasklet = 0;
693 
694 	if (timer == NULL)
695 		return;
696 
697 	if (timer->card && timer->card->shutdown)
698 		return;
699 
700 	spin_lock_irqsave(&timer->lock, flags);
701 
702 	/* remember the current resolution */
703 	if (timer->hw.c_resolution)
704 		resolution = timer->hw.c_resolution(timer);
705 	else
706 		resolution = timer->hw.resolution;
707 
708 	/* loop for all active instances
709 	 * Here we cannot use list_for_each_entry because the active_list of a
710 	 * processed instance is relinked to done_list_head before the callback
711 	 * is called.
712 	 */
713 	list_for_each_entry_safe(ti, tmp, &timer->active_list_head,
714 				 active_list) {
715 		if (!(ti->flags & SNDRV_TIMER_IFLG_RUNNING))
716 			continue;
717 		ti->pticks += ticks_left;
718 		ti->resolution = resolution;
719 		if (ti->cticks < ticks_left)
720 			ti->cticks = 0;
721 		else
722 			ti->cticks -= ticks_left;
723 		if (ti->cticks) /* not expired */
724 			continue;
725 		if (ti->flags & SNDRV_TIMER_IFLG_AUTO) {
726 			ti->cticks = ti->ticks;
727 		} else {
728 			ti->flags &= ~SNDRV_TIMER_IFLG_RUNNING;
729 			--timer->running;
730 			list_del_init(&ti->active_list);
731 		}
732 		if ((timer->hw.flags & SNDRV_TIMER_HW_TASKLET) ||
733 		    (ti->flags & SNDRV_TIMER_IFLG_FAST))
734 			ack_list_head = &timer->ack_list_head;
735 		else
736 			ack_list_head = &timer->sack_list_head;
737 		if (list_empty(&ti->ack_list))
738 			list_add_tail(&ti->ack_list, ack_list_head);
739 		list_for_each_entry(ts, &ti->slave_active_head, active_list) {
740 			ts->pticks = ti->pticks;
741 			ts->resolution = resolution;
742 			if (list_empty(&ts->ack_list))
743 				list_add_tail(&ts->ack_list, ack_list_head);
744 		}
745 	}
746 	if (timer->flags & SNDRV_TIMER_FLG_RESCHED)
747 		snd_timer_reschedule(timer, timer->sticks);
748 	if (timer->running) {
749 		if (timer->hw.flags & SNDRV_TIMER_HW_STOP) {
750 			timer->hw.stop(timer);
751 			timer->flags |= SNDRV_TIMER_FLG_CHANGE;
752 		}
753 		if (!(timer->hw.flags & SNDRV_TIMER_HW_AUTO) ||
754 		    (timer->flags & SNDRV_TIMER_FLG_CHANGE)) {
755 			/* restart timer */
756 			timer->flags &= ~SNDRV_TIMER_FLG_CHANGE;
757 			timer->hw.start(timer);
758 		}
759 	} else {
760 		timer->hw.stop(timer);
761 	}
762 
763 	/* now process all fast callbacks */
764 	while (!list_empty(&timer->ack_list_head)) {
765 		p = timer->ack_list_head.next;		/* get first item */
766 		ti = list_entry(p, struct snd_timer_instance, ack_list);
767 
768 		/* remove from ack_list and make empty */
769 		list_del_init(p);
770 
771 		ticks = ti->pticks;
772 		ti->pticks = 0;
773 
774 		ti->flags |= SNDRV_TIMER_IFLG_CALLBACK;
775 		spin_unlock(&timer->lock);
776 		if (ti->callback)
777 			ti->callback(ti, resolution, ticks);
778 		spin_lock(&timer->lock);
779 		ti->flags &= ~SNDRV_TIMER_IFLG_CALLBACK;
780 	}
781 
782 	/* do we have any slow callbacks? */
783 	use_tasklet = !list_empty(&timer->sack_list_head);
784 	spin_unlock_irqrestore(&timer->lock, flags);
785 
786 	if (use_tasklet)
787 		tasklet_schedule(&timer->task_queue);
788 }
789 
790 /*
791 
792  */
793 
794 int snd_timer_new(struct snd_card *card, char *id, struct snd_timer_id *tid,
795 		  struct snd_timer **rtimer)
796 {
797 	struct snd_timer *timer;
798 	int err;
799 	static struct snd_device_ops ops = {
800 		.dev_free = snd_timer_dev_free,
801 		.dev_register = snd_timer_dev_register,
802 		.dev_disconnect = snd_timer_dev_disconnect,
803 	};
804 
805 	if (snd_BUG_ON(!tid))
806 		return -EINVAL;
807 	if (rtimer)
808 		*rtimer = NULL;
809 	timer = kzalloc(sizeof(*timer), GFP_KERNEL);
810 	if (!timer)
811 		return -ENOMEM;
812 	timer->tmr_class = tid->dev_class;
813 	timer->card = card;
814 	timer->tmr_device = tid->device;
815 	timer->tmr_subdevice = tid->subdevice;
816 	if (id)
817 		strlcpy(timer->id, id, sizeof(timer->id));
818 	INIT_LIST_HEAD(&timer->device_list);
819 	INIT_LIST_HEAD(&timer->open_list_head);
820 	INIT_LIST_HEAD(&timer->active_list_head);
821 	INIT_LIST_HEAD(&timer->ack_list_head);
822 	INIT_LIST_HEAD(&timer->sack_list_head);
823 	spin_lock_init(&timer->lock);
824 	tasklet_init(&timer->task_queue, snd_timer_tasklet,
825 		     (unsigned long)timer);
826 	if (card != NULL) {
827 		timer->module = card->module;
828 		err = snd_device_new(card, SNDRV_DEV_TIMER, timer, &ops);
829 		if (err < 0) {
830 			snd_timer_free(timer);
831 			return err;
832 		}
833 	}
834 	if (rtimer)
835 		*rtimer = timer;
836 	return 0;
837 }
838 
839 static int snd_timer_free(struct snd_timer *timer)
840 {
841 	if (!timer)
842 		return 0;
843 
844 	mutex_lock(&register_mutex);
845 	if (! list_empty(&timer->open_list_head)) {
846 		struct list_head *p, *n;
847 		struct snd_timer_instance *ti;
848 		pr_warn("ALSA: timer %p is busy?\n", timer);
849 		list_for_each_safe(p, n, &timer->open_list_head) {
850 			list_del_init(p);
851 			ti = list_entry(p, struct snd_timer_instance, open_list);
852 			ti->timer = NULL;
853 		}
854 	}
855 	list_del(&timer->device_list);
856 	mutex_unlock(&register_mutex);
857 
858 	if (timer->private_free)
859 		timer->private_free(timer);
860 	kfree(timer);
861 	return 0;
862 }
863 
864 static int snd_timer_dev_free(struct snd_device *device)
865 {
866 	struct snd_timer *timer = device->device_data;
867 	return snd_timer_free(timer);
868 }
869 
870 static int snd_timer_dev_register(struct snd_device *dev)
871 {
872 	struct snd_timer *timer = dev->device_data;
873 	struct snd_timer *timer1;
874 
875 	if (snd_BUG_ON(!timer || !timer->hw.start || !timer->hw.stop))
876 		return -ENXIO;
877 	if (!(timer->hw.flags & SNDRV_TIMER_HW_SLAVE) &&
878 	    !timer->hw.resolution && timer->hw.c_resolution == NULL)
879 	    	return -EINVAL;
880 
881 	mutex_lock(&register_mutex);
882 	list_for_each_entry(timer1, &snd_timer_list, device_list) {
883 		if (timer1->tmr_class > timer->tmr_class)
884 			break;
885 		if (timer1->tmr_class < timer->tmr_class)
886 			continue;
887 		if (timer1->card && timer->card) {
888 			if (timer1->card->number > timer->card->number)
889 				break;
890 			if (timer1->card->number < timer->card->number)
891 				continue;
892 		}
893 		if (timer1->tmr_device > timer->tmr_device)
894 			break;
895 		if (timer1->tmr_device < timer->tmr_device)
896 			continue;
897 		if (timer1->tmr_subdevice > timer->tmr_subdevice)
898 			break;
899 		if (timer1->tmr_subdevice < timer->tmr_subdevice)
900 			continue;
901 		/* conflicts.. */
902 		mutex_unlock(&register_mutex);
903 		return -EBUSY;
904 	}
905 	list_add_tail(&timer->device_list, &timer1->device_list);
906 	mutex_unlock(&register_mutex);
907 	return 0;
908 }
909 
910 static int snd_timer_dev_disconnect(struct snd_device *device)
911 {
912 	struct snd_timer *timer = device->device_data;
913 	struct snd_timer_instance *ti;
914 
915 	mutex_lock(&register_mutex);
916 	list_del_init(&timer->device_list);
917 	/* wake up pending sleepers */
918 	list_for_each_entry(ti, &timer->open_list_head, open_list) {
919 		if (ti->disconnect)
920 			ti->disconnect(ti);
921 	}
922 	mutex_unlock(&register_mutex);
923 	return 0;
924 }
925 
926 void snd_timer_notify(struct snd_timer *timer, int event, struct timespec *tstamp)
927 {
928 	unsigned long flags;
929 	unsigned long resolution = 0;
930 	struct snd_timer_instance *ti, *ts;
931 
932 	if (timer->card && timer->card->shutdown)
933 		return;
934 	if (! (timer->hw.flags & SNDRV_TIMER_HW_SLAVE))
935 		return;
936 	if (snd_BUG_ON(event < SNDRV_TIMER_EVENT_MSTART ||
937 		       event > SNDRV_TIMER_EVENT_MRESUME))
938 		return;
939 	spin_lock_irqsave(&timer->lock, flags);
940 	if (event == SNDRV_TIMER_EVENT_MSTART ||
941 	    event == SNDRV_TIMER_EVENT_MCONTINUE ||
942 	    event == SNDRV_TIMER_EVENT_MRESUME) {
943 		if (timer->hw.c_resolution)
944 			resolution = timer->hw.c_resolution(timer);
945 		else
946 			resolution = timer->hw.resolution;
947 	}
948 	list_for_each_entry(ti, &timer->active_list_head, active_list) {
949 		if (ti->ccallback)
950 			ti->ccallback(ti, event, tstamp, resolution);
951 		list_for_each_entry(ts, &ti->slave_active_head, active_list)
952 			if (ts->ccallback)
953 				ts->ccallback(ts, event, tstamp, resolution);
954 	}
955 	spin_unlock_irqrestore(&timer->lock, flags);
956 }
957 
958 /*
959  * exported functions for global timers
960  */
961 int snd_timer_global_new(char *id, int device, struct snd_timer **rtimer)
962 {
963 	struct snd_timer_id tid;
964 
965 	tid.dev_class = SNDRV_TIMER_CLASS_GLOBAL;
966 	tid.dev_sclass = SNDRV_TIMER_SCLASS_NONE;
967 	tid.card = -1;
968 	tid.device = device;
969 	tid.subdevice = 0;
970 	return snd_timer_new(NULL, id, &tid, rtimer);
971 }
972 
973 int snd_timer_global_free(struct snd_timer *timer)
974 {
975 	return snd_timer_free(timer);
976 }
977 
978 int snd_timer_global_register(struct snd_timer *timer)
979 {
980 	struct snd_device dev;
981 
982 	memset(&dev, 0, sizeof(dev));
983 	dev.device_data = timer;
984 	return snd_timer_dev_register(&dev);
985 }
986 
987 /*
988  *  System timer
989  */
990 
991 struct snd_timer_system_private {
992 	struct timer_list tlist;
993 	unsigned long last_expires;
994 	unsigned long last_jiffies;
995 	unsigned long correction;
996 };
997 
998 static void snd_timer_s_function(unsigned long data)
999 {
1000 	struct snd_timer *timer = (struct snd_timer *)data;
1001 	struct snd_timer_system_private *priv = timer->private_data;
1002 	unsigned long jiff = jiffies;
1003 	if (time_after(jiff, priv->last_expires))
1004 		priv->correction += (long)jiff - (long)priv->last_expires;
1005 	snd_timer_interrupt(timer, (long)jiff - (long)priv->last_jiffies);
1006 }
1007 
1008 static int snd_timer_s_start(struct snd_timer * timer)
1009 {
1010 	struct snd_timer_system_private *priv;
1011 	unsigned long njiff;
1012 
1013 	priv = (struct snd_timer_system_private *) timer->private_data;
1014 	njiff = (priv->last_jiffies = jiffies);
1015 	if (priv->correction > timer->sticks - 1) {
1016 		priv->correction -= timer->sticks - 1;
1017 		njiff++;
1018 	} else {
1019 		njiff += timer->sticks - priv->correction;
1020 		priv->correction = 0;
1021 	}
1022 	priv->last_expires = njiff;
1023 	mod_timer(&priv->tlist, njiff);
1024 	return 0;
1025 }
1026 
1027 static int snd_timer_s_stop(struct snd_timer * timer)
1028 {
1029 	struct snd_timer_system_private *priv;
1030 	unsigned long jiff;
1031 
1032 	priv = (struct snd_timer_system_private *) timer->private_data;
1033 	del_timer(&priv->tlist);
1034 	jiff = jiffies;
1035 	if (time_before(jiff, priv->last_expires))
1036 		timer->sticks = priv->last_expires - jiff;
1037 	else
1038 		timer->sticks = 1;
1039 	priv->correction = 0;
1040 	return 0;
1041 }
1042 
1043 static int snd_timer_s_close(struct snd_timer *timer)
1044 {
1045 	struct snd_timer_system_private *priv;
1046 
1047 	priv = (struct snd_timer_system_private *)timer->private_data;
1048 	del_timer_sync(&priv->tlist);
1049 	return 0;
1050 }
1051 
1052 static struct snd_timer_hardware snd_timer_system =
1053 {
1054 	.flags =	SNDRV_TIMER_HW_FIRST | SNDRV_TIMER_HW_TASKLET,
1055 	.resolution =	1000000000L / HZ,
1056 	.ticks =	10000000L,
1057 	.close =	snd_timer_s_close,
1058 	.start =	snd_timer_s_start,
1059 	.stop =		snd_timer_s_stop
1060 };
1061 
1062 static void snd_timer_free_system(struct snd_timer *timer)
1063 {
1064 	kfree(timer->private_data);
1065 }
1066 
1067 static int snd_timer_register_system(void)
1068 {
1069 	struct snd_timer *timer;
1070 	struct snd_timer_system_private *priv;
1071 	int err;
1072 
1073 	err = snd_timer_global_new("system", SNDRV_TIMER_GLOBAL_SYSTEM, &timer);
1074 	if (err < 0)
1075 		return err;
1076 	strcpy(timer->name, "system timer");
1077 	timer->hw = snd_timer_system;
1078 	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
1079 	if (priv == NULL) {
1080 		snd_timer_free(timer);
1081 		return -ENOMEM;
1082 	}
1083 	setup_timer(&priv->tlist, snd_timer_s_function, (unsigned long) timer);
1084 	timer->private_data = priv;
1085 	timer->private_free = snd_timer_free_system;
1086 	return snd_timer_global_register(timer);
1087 }
1088 
1089 #ifdef CONFIG_SND_PROC_FS
1090 /*
1091  *  Info interface
1092  */
1093 
1094 static void snd_timer_proc_read(struct snd_info_entry *entry,
1095 				struct snd_info_buffer *buffer)
1096 {
1097 	struct snd_timer *timer;
1098 	struct snd_timer_instance *ti;
1099 
1100 	mutex_lock(&register_mutex);
1101 	list_for_each_entry(timer, &snd_timer_list, device_list) {
1102 		if (timer->card && timer->card->shutdown)
1103 			continue;
1104 		switch (timer->tmr_class) {
1105 		case SNDRV_TIMER_CLASS_GLOBAL:
1106 			snd_iprintf(buffer, "G%i: ", timer->tmr_device);
1107 			break;
1108 		case SNDRV_TIMER_CLASS_CARD:
1109 			snd_iprintf(buffer, "C%i-%i: ",
1110 				    timer->card->number, timer->tmr_device);
1111 			break;
1112 		case SNDRV_TIMER_CLASS_PCM:
1113 			snd_iprintf(buffer, "P%i-%i-%i: ", timer->card->number,
1114 				    timer->tmr_device, timer->tmr_subdevice);
1115 			break;
1116 		default:
1117 			snd_iprintf(buffer, "?%i-%i-%i-%i: ", timer->tmr_class,
1118 				    timer->card ? timer->card->number : -1,
1119 				    timer->tmr_device, timer->tmr_subdevice);
1120 		}
1121 		snd_iprintf(buffer, "%s :", timer->name);
1122 		if (timer->hw.resolution)
1123 			snd_iprintf(buffer, " %lu.%03luus (%lu ticks)",
1124 				    timer->hw.resolution / 1000,
1125 				    timer->hw.resolution % 1000,
1126 				    timer->hw.ticks);
1127 		if (timer->hw.flags & SNDRV_TIMER_HW_SLAVE)
1128 			snd_iprintf(buffer, " SLAVE");
1129 		snd_iprintf(buffer, "\n");
1130 		list_for_each_entry(ti, &timer->open_list_head, open_list)
1131 			snd_iprintf(buffer, "  Client %s : %s\n",
1132 				    ti->owner ? ti->owner : "unknown",
1133 				    ti->flags & (SNDRV_TIMER_IFLG_START |
1134 						 SNDRV_TIMER_IFLG_RUNNING)
1135 				    ? "running" : "stopped");
1136 	}
1137 	mutex_unlock(&register_mutex);
1138 }
1139 
1140 static struct snd_info_entry *snd_timer_proc_entry;
1141 
1142 static void __init snd_timer_proc_init(void)
1143 {
1144 	struct snd_info_entry *entry;
1145 
1146 	entry = snd_info_create_module_entry(THIS_MODULE, "timers", NULL);
1147 	if (entry != NULL) {
1148 		entry->c.text.read = snd_timer_proc_read;
1149 		if (snd_info_register(entry) < 0) {
1150 			snd_info_free_entry(entry);
1151 			entry = NULL;
1152 		}
1153 	}
1154 	snd_timer_proc_entry = entry;
1155 }
1156 
1157 static void __exit snd_timer_proc_done(void)
1158 {
1159 	snd_info_free_entry(snd_timer_proc_entry);
1160 }
1161 #else /* !CONFIG_SND_PROC_FS */
1162 #define snd_timer_proc_init()
1163 #define snd_timer_proc_done()
1164 #endif
1165 
1166 /*
1167  *  USER SPACE interface
1168  */
1169 
1170 static void snd_timer_user_interrupt(struct snd_timer_instance *timeri,
1171 				     unsigned long resolution,
1172 				     unsigned long ticks)
1173 {
1174 	struct snd_timer_user *tu = timeri->callback_data;
1175 	struct snd_timer_read *r;
1176 	int prev;
1177 
1178 	spin_lock(&tu->qlock);
1179 	if (tu->qused > 0) {
1180 		prev = tu->qtail == 0 ? tu->queue_size - 1 : tu->qtail - 1;
1181 		r = &tu->queue[prev];
1182 		if (r->resolution == resolution) {
1183 			r->ticks += ticks;
1184 			goto __wake;
1185 		}
1186 	}
1187 	if (tu->qused >= tu->queue_size) {
1188 		tu->overrun++;
1189 	} else {
1190 		r = &tu->queue[tu->qtail++];
1191 		tu->qtail %= tu->queue_size;
1192 		r->resolution = resolution;
1193 		r->ticks = ticks;
1194 		tu->qused++;
1195 	}
1196       __wake:
1197 	spin_unlock(&tu->qlock);
1198 	kill_fasync(&tu->fasync, SIGIO, POLL_IN);
1199 	wake_up(&tu->qchange_sleep);
1200 }
1201 
1202 static void snd_timer_user_append_to_tqueue(struct snd_timer_user *tu,
1203 					    struct snd_timer_tread *tread)
1204 {
1205 	if (tu->qused >= tu->queue_size) {
1206 		tu->overrun++;
1207 	} else {
1208 		memcpy(&tu->tqueue[tu->qtail++], tread, sizeof(*tread));
1209 		tu->qtail %= tu->queue_size;
1210 		tu->qused++;
1211 	}
1212 }
1213 
1214 static void snd_timer_user_ccallback(struct snd_timer_instance *timeri,
1215 				     int event,
1216 				     struct timespec *tstamp,
1217 				     unsigned long resolution)
1218 {
1219 	struct snd_timer_user *tu = timeri->callback_data;
1220 	struct snd_timer_tread r1;
1221 	unsigned long flags;
1222 
1223 	if (event >= SNDRV_TIMER_EVENT_START &&
1224 	    event <= SNDRV_TIMER_EVENT_PAUSE)
1225 		tu->tstamp = *tstamp;
1226 	if ((tu->filter & (1 << event)) == 0 || !tu->tread)
1227 		return;
1228 	r1.event = event;
1229 	r1.tstamp = *tstamp;
1230 	r1.val = resolution;
1231 	spin_lock_irqsave(&tu->qlock, flags);
1232 	snd_timer_user_append_to_tqueue(tu, &r1);
1233 	spin_unlock_irqrestore(&tu->qlock, flags);
1234 	kill_fasync(&tu->fasync, SIGIO, POLL_IN);
1235 	wake_up(&tu->qchange_sleep);
1236 }
1237 
1238 static void snd_timer_user_disconnect(struct snd_timer_instance *timeri)
1239 {
1240 	struct snd_timer_user *tu = timeri->callback_data;
1241 
1242 	tu->disconnected = true;
1243 	wake_up(&tu->qchange_sleep);
1244 }
1245 
1246 static void snd_timer_user_tinterrupt(struct snd_timer_instance *timeri,
1247 				      unsigned long resolution,
1248 				      unsigned long ticks)
1249 {
1250 	struct snd_timer_user *tu = timeri->callback_data;
1251 	struct snd_timer_tread *r, r1;
1252 	struct timespec tstamp;
1253 	int prev, append = 0;
1254 
1255 	memset(&tstamp, 0, sizeof(tstamp));
1256 	spin_lock(&tu->qlock);
1257 	if ((tu->filter & ((1 << SNDRV_TIMER_EVENT_RESOLUTION) |
1258 			   (1 << SNDRV_TIMER_EVENT_TICK))) == 0) {
1259 		spin_unlock(&tu->qlock);
1260 		return;
1261 	}
1262 	if (tu->last_resolution != resolution || ticks > 0) {
1263 		if (timer_tstamp_monotonic)
1264 			ktime_get_ts(&tstamp);
1265 		else
1266 			getnstimeofday(&tstamp);
1267 	}
1268 	if ((tu->filter & (1 << SNDRV_TIMER_EVENT_RESOLUTION)) &&
1269 	    tu->last_resolution != resolution) {
1270 		r1.event = SNDRV_TIMER_EVENT_RESOLUTION;
1271 		r1.tstamp = tstamp;
1272 		r1.val = resolution;
1273 		snd_timer_user_append_to_tqueue(tu, &r1);
1274 		tu->last_resolution = resolution;
1275 		append++;
1276 	}
1277 	if ((tu->filter & (1 << SNDRV_TIMER_EVENT_TICK)) == 0)
1278 		goto __wake;
1279 	if (ticks == 0)
1280 		goto __wake;
1281 	if (tu->qused > 0) {
1282 		prev = tu->qtail == 0 ? tu->queue_size - 1 : tu->qtail - 1;
1283 		r = &tu->tqueue[prev];
1284 		if (r->event == SNDRV_TIMER_EVENT_TICK) {
1285 			r->tstamp = tstamp;
1286 			r->val += ticks;
1287 			append++;
1288 			goto __wake;
1289 		}
1290 	}
1291 	r1.event = SNDRV_TIMER_EVENT_TICK;
1292 	r1.tstamp = tstamp;
1293 	r1.val = ticks;
1294 	snd_timer_user_append_to_tqueue(tu, &r1);
1295 	append++;
1296       __wake:
1297 	spin_unlock(&tu->qlock);
1298 	if (append == 0)
1299 		return;
1300 	kill_fasync(&tu->fasync, SIGIO, POLL_IN);
1301 	wake_up(&tu->qchange_sleep);
1302 }
1303 
1304 static int snd_timer_user_open(struct inode *inode, struct file *file)
1305 {
1306 	struct snd_timer_user *tu;
1307 	int err;
1308 
1309 	err = nonseekable_open(inode, file);
1310 	if (err < 0)
1311 		return err;
1312 
1313 	tu = kzalloc(sizeof(*tu), GFP_KERNEL);
1314 	if (tu == NULL)
1315 		return -ENOMEM;
1316 	spin_lock_init(&tu->qlock);
1317 	init_waitqueue_head(&tu->qchange_sleep);
1318 	mutex_init(&tu->ioctl_lock);
1319 	tu->ticks = 1;
1320 	tu->queue_size = 128;
1321 	tu->queue = kmalloc(tu->queue_size * sizeof(struct snd_timer_read),
1322 			    GFP_KERNEL);
1323 	if (tu->queue == NULL) {
1324 		kfree(tu);
1325 		return -ENOMEM;
1326 	}
1327 	file->private_data = tu;
1328 	return 0;
1329 }
1330 
1331 static int snd_timer_user_release(struct inode *inode, struct file *file)
1332 {
1333 	struct snd_timer_user *tu;
1334 
1335 	if (file->private_data) {
1336 		tu = file->private_data;
1337 		file->private_data = NULL;
1338 		mutex_lock(&tu->ioctl_lock);
1339 		if (tu->timeri)
1340 			snd_timer_close(tu->timeri);
1341 		mutex_unlock(&tu->ioctl_lock);
1342 		kfree(tu->queue);
1343 		kfree(tu->tqueue);
1344 		kfree(tu);
1345 	}
1346 	return 0;
1347 }
1348 
1349 static void snd_timer_user_zero_id(struct snd_timer_id *id)
1350 {
1351 	id->dev_class = SNDRV_TIMER_CLASS_NONE;
1352 	id->dev_sclass = SNDRV_TIMER_SCLASS_NONE;
1353 	id->card = -1;
1354 	id->device = -1;
1355 	id->subdevice = -1;
1356 }
1357 
1358 static void snd_timer_user_copy_id(struct snd_timer_id *id, struct snd_timer *timer)
1359 {
1360 	id->dev_class = timer->tmr_class;
1361 	id->dev_sclass = SNDRV_TIMER_SCLASS_NONE;
1362 	id->card = timer->card ? timer->card->number : -1;
1363 	id->device = timer->tmr_device;
1364 	id->subdevice = timer->tmr_subdevice;
1365 }
1366 
1367 static int snd_timer_user_next_device(struct snd_timer_id __user *_tid)
1368 {
1369 	struct snd_timer_id id;
1370 	struct snd_timer *timer;
1371 	struct list_head *p;
1372 
1373 	if (copy_from_user(&id, _tid, sizeof(id)))
1374 		return -EFAULT;
1375 	mutex_lock(&register_mutex);
1376 	if (id.dev_class < 0) {		/* first item */
1377 		if (list_empty(&snd_timer_list))
1378 			snd_timer_user_zero_id(&id);
1379 		else {
1380 			timer = list_entry(snd_timer_list.next,
1381 					   struct snd_timer, device_list);
1382 			snd_timer_user_copy_id(&id, timer);
1383 		}
1384 	} else {
1385 		switch (id.dev_class) {
1386 		case SNDRV_TIMER_CLASS_GLOBAL:
1387 			id.device = id.device < 0 ? 0 : id.device + 1;
1388 			list_for_each(p, &snd_timer_list) {
1389 				timer = list_entry(p, struct snd_timer, device_list);
1390 				if (timer->tmr_class > SNDRV_TIMER_CLASS_GLOBAL) {
1391 					snd_timer_user_copy_id(&id, timer);
1392 					break;
1393 				}
1394 				if (timer->tmr_device >= id.device) {
1395 					snd_timer_user_copy_id(&id, timer);
1396 					break;
1397 				}
1398 			}
1399 			if (p == &snd_timer_list)
1400 				snd_timer_user_zero_id(&id);
1401 			break;
1402 		case SNDRV_TIMER_CLASS_CARD:
1403 		case SNDRV_TIMER_CLASS_PCM:
1404 			if (id.card < 0) {
1405 				id.card = 0;
1406 			} else {
1407 				if (id.card < 0) {
1408 					id.card = 0;
1409 				} else {
1410 					if (id.device < 0) {
1411 						id.device = 0;
1412 					} else {
1413 						if (id.subdevice < 0) {
1414 							id.subdevice = 0;
1415 						} else {
1416 							id.subdevice++;
1417 						}
1418 					}
1419 				}
1420 			}
1421 			list_for_each(p, &snd_timer_list) {
1422 				timer = list_entry(p, struct snd_timer, device_list);
1423 				if (timer->tmr_class > id.dev_class) {
1424 					snd_timer_user_copy_id(&id, timer);
1425 					break;
1426 				}
1427 				if (timer->tmr_class < id.dev_class)
1428 					continue;
1429 				if (timer->card->number > id.card) {
1430 					snd_timer_user_copy_id(&id, timer);
1431 					break;
1432 				}
1433 				if (timer->card->number < id.card)
1434 					continue;
1435 				if (timer->tmr_device > id.device) {
1436 					snd_timer_user_copy_id(&id, timer);
1437 					break;
1438 				}
1439 				if (timer->tmr_device < id.device)
1440 					continue;
1441 				if (timer->tmr_subdevice > id.subdevice) {
1442 					snd_timer_user_copy_id(&id, timer);
1443 					break;
1444 				}
1445 				if (timer->tmr_subdevice < id.subdevice)
1446 					continue;
1447 				snd_timer_user_copy_id(&id, timer);
1448 				break;
1449 			}
1450 			if (p == &snd_timer_list)
1451 				snd_timer_user_zero_id(&id);
1452 			break;
1453 		default:
1454 			snd_timer_user_zero_id(&id);
1455 		}
1456 	}
1457 	mutex_unlock(&register_mutex);
1458 	if (copy_to_user(_tid, &id, sizeof(*_tid)))
1459 		return -EFAULT;
1460 	return 0;
1461 }
1462 
1463 static int snd_timer_user_ginfo(struct file *file,
1464 				struct snd_timer_ginfo __user *_ginfo)
1465 {
1466 	struct snd_timer_ginfo *ginfo;
1467 	struct snd_timer_id tid;
1468 	struct snd_timer *t;
1469 	struct list_head *p;
1470 	int err = 0;
1471 
1472 	ginfo = memdup_user(_ginfo, sizeof(*ginfo));
1473 	if (IS_ERR(ginfo))
1474 		return PTR_ERR(ginfo);
1475 
1476 	tid = ginfo->tid;
1477 	memset(ginfo, 0, sizeof(*ginfo));
1478 	ginfo->tid = tid;
1479 	mutex_lock(&register_mutex);
1480 	t = snd_timer_find(&tid);
1481 	if (t != NULL) {
1482 		ginfo->card = t->card ? t->card->number : -1;
1483 		if (t->hw.flags & SNDRV_TIMER_HW_SLAVE)
1484 			ginfo->flags |= SNDRV_TIMER_FLG_SLAVE;
1485 		strlcpy(ginfo->id, t->id, sizeof(ginfo->id));
1486 		strlcpy(ginfo->name, t->name, sizeof(ginfo->name));
1487 		ginfo->resolution = t->hw.resolution;
1488 		if (t->hw.resolution_min > 0) {
1489 			ginfo->resolution_min = t->hw.resolution_min;
1490 			ginfo->resolution_max = t->hw.resolution_max;
1491 		}
1492 		list_for_each(p, &t->open_list_head) {
1493 			ginfo->clients++;
1494 		}
1495 	} else {
1496 		err = -ENODEV;
1497 	}
1498 	mutex_unlock(&register_mutex);
1499 	if (err >= 0 && copy_to_user(_ginfo, ginfo, sizeof(*ginfo)))
1500 		err = -EFAULT;
1501 	kfree(ginfo);
1502 	return err;
1503 }
1504 
1505 static int timer_set_gparams(struct snd_timer_gparams *gparams)
1506 {
1507 	struct snd_timer *t;
1508 	int err;
1509 
1510 	mutex_lock(&register_mutex);
1511 	t = snd_timer_find(&gparams->tid);
1512 	if (!t) {
1513 		err = -ENODEV;
1514 		goto _error;
1515 	}
1516 	if (!list_empty(&t->open_list_head)) {
1517 		err = -EBUSY;
1518 		goto _error;
1519 	}
1520 	if (!t->hw.set_period) {
1521 		err = -ENOSYS;
1522 		goto _error;
1523 	}
1524 	err = t->hw.set_period(t, gparams->period_num, gparams->period_den);
1525 _error:
1526 	mutex_unlock(&register_mutex);
1527 	return err;
1528 }
1529 
1530 static int snd_timer_user_gparams(struct file *file,
1531 				  struct snd_timer_gparams __user *_gparams)
1532 {
1533 	struct snd_timer_gparams gparams;
1534 
1535 	if (copy_from_user(&gparams, _gparams, sizeof(gparams)))
1536 		return -EFAULT;
1537 	return timer_set_gparams(&gparams);
1538 }
1539 
1540 static int snd_timer_user_gstatus(struct file *file,
1541 				  struct snd_timer_gstatus __user *_gstatus)
1542 {
1543 	struct snd_timer_gstatus gstatus;
1544 	struct snd_timer_id tid;
1545 	struct snd_timer *t;
1546 	int err = 0;
1547 
1548 	if (copy_from_user(&gstatus, _gstatus, sizeof(gstatus)))
1549 		return -EFAULT;
1550 	tid = gstatus.tid;
1551 	memset(&gstatus, 0, sizeof(gstatus));
1552 	gstatus.tid = tid;
1553 	mutex_lock(&register_mutex);
1554 	t = snd_timer_find(&tid);
1555 	if (t != NULL) {
1556 		if (t->hw.c_resolution)
1557 			gstatus.resolution = t->hw.c_resolution(t);
1558 		else
1559 			gstatus.resolution = t->hw.resolution;
1560 		if (t->hw.precise_resolution) {
1561 			t->hw.precise_resolution(t, &gstatus.resolution_num,
1562 						 &gstatus.resolution_den);
1563 		} else {
1564 			gstatus.resolution_num = gstatus.resolution;
1565 			gstatus.resolution_den = 1000000000uL;
1566 		}
1567 	} else {
1568 		err = -ENODEV;
1569 	}
1570 	mutex_unlock(&register_mutex);
1571 	if (err >= 0 && copy_to_user(_gstatus, &gstatus, sizeof(gstatus)))
1572 		err = -EFAULT;
1573 	return err;
1574 }
1575 
1576 static int snd_timer_user_tselect(struct file *file,
1577 				  struct snd_timer_select __user *_tselect)
1578 {
1579 	struct snd_timer_user *tu;
1580 	struct snd_timer_select tselect;
1581 	char str[32];
1582 	int err = 0;
1583 
1584 	tu = file->private_data;
1585 	if (tu->timeri) {
1586 		snd_timer_close(tu->timeri);
1587 		tu->timeri = NULL;
1588 	}
1589 	if (copy_from_user(&tselect, _tselect, sizeof(tselect))) {
1590 		err = -EFAULT;
1591 		goto __err;
1592 	}
1593 	sprintf(str, "application %i", current->pid);
1594 	if (tselect.id.dev_class != SNDRV_TIMER_CLASS_SLAVE)
1595 		tselect.id.dev_sclass = SNDRV_TIMER_SCLASS_APPLICATION;
1596 	err = snd_timer_open(&tu->timeri, str, &tselect.id, current->pid);
1597 	if (err < 0)
1598 		goto __err;
1599 
1600 	kfree(tu->queue);
1601 	tu->queue = NULL;
1602 	kfree(tu->tqueue);
1603 	tu->tqueue = NULL;
1604 	if (tu->tread) {
1605 		tu->tqueue = kmalloc(tu->queue_size * sizeof(struct snd_timer_tread),
1606 				     GFP_KERNEL);
1607 		if (tu->tqueue == NULL)
1608 			err = -ENOMEM;
1609 	} else {
1610 		tu->queue = kmalloc(tu->queue_size * sizeof(struct snd_timer_read),
1611 				    GFP_KERNEL);
1612 		if (tu->queue == NULL)
1613 			err = -ENOMEM;
1614 	}
1615 
1616       	if (err < 0) {
1617 		snd_timer_close(tu->timeri);
1618       		tu->timeri = NULL;
1619       	} else {
1620 		tu->timeri->flags |= SNDRV_TIMER_IFLG_FAST;
1621 		tu->timeri->callback = tu->tread
1622 			? snd_timer_user_tinterrupt : snd_timer_user_interrupt;
1623 		tu->timeri->ccallback = snd_timer_user_ccallback;
1624 		tu->timeri->callback_data = (void *)tu;
1625 		tu->timeri->disconnect = snd_timer_user_disconnect;
1626 	}
1627 
1628       __err:
1629 	return err;
1630 }
1631 
1632 static int snd_timer_user_info(struct file *file,
1633 			       struct snd_timer_info __user *_info)
1634 {
1635 	struct snd_timer_user *tu;
1636 	struct snd_timer_info *info;
1637 	struct snd_timer *t;
1638 	int err = 0;
1639 
1640 	tu = file->private_data;
1641 	if (!tu->timeri)
1642 		return -EBADFD;
1643 	t = tu->timeri->timer;
1644 	if (!t)
1645 		return -EBADFD;
1646 
1647 	info = kzalloc(sizeof(*info), GFP_KERNEL);
1648 	if (! info)
1649 		return -ENOMEM;
1650 	info->card = t->card ? t->card->number : -1;
1651 	if (t->hw.flags & SNDRV_TIMER_HW_SLAVE)
1652 		info->flags |= SNDRV_TIMER_FLG_SLAVE;
1653 	strlcpy(info->id, t->id, sizeof(info->id));
1654 	strlcpy(info->name, t->name, sizeof(info->name));
1655 	info->resolution = t->hw.resolution;
1656 	if (copy_to_user(_info, info, sizeof(*_info)))
1657 		err = -EFAULT;
1658 	kfree(info);
1659 	return err;
1660 }
1661 
1662 static int snd_timer_user_params(struct file *file,
1663 				 struct snd_timer_params __user *_params)
1664 {
1665 	struct snd_timer_user *tu;
1666 	struct snd_timer_params params;
1667 	struct snd_timer *t;
1668 	struct snd_timer_read *tr;
1669 	struct snd_timer_tread *ttr;
1670 	int err;
1671 
1672 	tu = file->private_data;
1673 	if (!tu->timeri)
1674 		return -EBADFD;
1675 	t = tu->timeri->timer;
1676 	if (!t)
1677 		return -EBADFD;
1678 	if (copy_from_user(&params, _params, sizeof(params)))
1679 		return -EFAULT;
1680 	if (!(t->hw.flags & SNDRV_TIMER_HW_SLAVE) && params.ticks < 1) {
1681 		err = -EINVAL;
1682 		goto _end;
1683 	}
1684 	if (params.queue_size > 0 &&
1685 	    (params.queue_size < 32 || params.queue_size > 1024)) {
1686 		err = -EINVAL;
1687 		goto _end;
1688 	}
1689 	if (params.filter & ~((1<<SNDRV_TIMER_EVENT_RESOLUTION)|
1690 			      (1<<SNDRV_TIMER_EVENT_TICK)|
1691 			      (1<<SNDRV_TIMER_EVENT_START)|
1692 			      (1<<SNDRV_TIMER_EVENT_STOP)|
1693 			      (1<<SNDRV_TIMER_EVENT_CONTINUE)|
1694 			      (1<<SNDRV_TIMER_EVENT_PAUSE)|
1695 			      (1<<SNDRV_TIMER_EVENT_SUSPEND)|
1696 			      (1<<SNDRV_TIMER_EVENT_RESUME)|
1697 			      (1<<SNDRV_TIMER_EVENT_MSTART)|
1698 			      (1<<SNDRV_TIMER_EVENT_MSTOP)|
1699 			      (1<<SNDRV_TIMER_EVENT_MCONTINUE)|
1700 			      (1<<SNDRV_TIMER_EVENT_MPAUSE)|
1701 			      (1<<SNDRV_TIMER_EVENT_MSUSPEND)|
1702 			      (1<<SNDRV_TIMER_EVENT_MRESUME))) {
1703 		err = -EINVAL;
1704 		goto _end;
1705 	}
1706 	snd_timer_stop(tu->timeri);
1707 	spin_lock_irq(&t->lock);
1708 	tu->timeri->flags &= ~(SNDRV_TIMER_IFLG_AUTO|
1709 			       SNDRV_TIMER_IFLG_EXCLUSIVE|
1710 			       SNDRV_TIMER_IFLG_EARLY_EVENT);
1711 	if (params.flags & SNDRV_TIMER_PSFLG_AUTO)
1712 		tu->timeri->flags |= SNDRV_TIMER_IFLG_AUTO;
1713 	if (params.flags & SNDRV_TIMER_PSFLG_EXCLUSIVE)
1714 		tu->timeri->flags |= SNDRV_TIMER_IFLG_EXCLUSIVE;
1715 	if (params.flags & SNDRV_TIMER_PSFLG_EARLY_EVENT)
1716 		tu->timeri->flags |= SNDRV_TIMER_IFLG_EARLY_EVENT;
1717 	spin_unlock_irq(&t->lock);
1718 	if (params.queue_size > 0 &&
1719 	    (unsigned int)tu->queue_size != params.queue_size) {
1720 		if (tu->tread) {
1721 			ttr = kmalloc(params.queue_size * sizeof(*ttr),
1722 				      GFP_KERNEL);
1723 			if (ttr) {
1724 				kfree(tu->tqueue);
1725 				tu->queue_size = params.queue_size;
1726 				tu->tqueue = ttr;
1727 			}
1728 		} else {
1729 			tr = kmalloc(params.queue_size * sizeof(*tr),
1730 				     GFP_KERNEL);
1731 			if (tr) {
1732 				kfree(tu->queue);
1733 				tu->queue_size = params.queue_size;
1734 				tu->queue = tr;
1735 			}
1736 		}
1737 	}
1738 	tu->qhead = tu->qtail = tu->qused = 0;
1739 	if (tu->timeri->flags & SNDRV_TIMER_IFLG_EARLY_EVENT) {
1740 		if (tu->tread) {
1741 			struct snd_timer_tread tread;
1742 			tread.event = SNDRV_TIMER_EVENT_EARLY;
1743 			tread.tstamp.tv_sec = 0;
1744 			tread.tstamp.tv_nsec = 0;
1745 			tread.val = 0;
1746 			snd_timer_user_append_to_tqueue(tu, &tread);
1747 		} else {
1748 			struct snd_timer_read *r = &tu->queue[0];
1749 			r->resolution = 0;
1750 			r->ticks = 0;
1751 			tu->qused++;
1752 			tu->qtail++;
1753 		}
1754 	}
1755 	tu->filter = params.filter;
1756 	tu->ticks = params.ticks;
1757 	err = 0;
1758  _end:
1759 	if (copy_to_user(_params, &params, sizeof(params)))
1760 		return -EFAULT;
1761 	return err;
1762 }
1763 
1764 static int snd_timer_user_status(struct file *file,
1765 				 struct snd_timer_status __user *_status)
1766 {
1767 	struct snd_timer_user *tu;
1768 	struct snd_timer_status status;
1769 
1770 	tu = file->private_data;
1771 	if (!tu->timeri)
1772 		return -EBADFD;
1773 	memset(&status, 0, sizeof(status));
1774 	status.tstamp = tu->tstamp;
1775 	status.resolution = snd_timer_resolution(tu->timeri);
1776 	status.lost = tu->timeri->lost;
1777 	status.overrun = tu->overrun;
1778 	spin_lock_irq(&tu->qlock);
1779 	status.queue = tu->qused;
1780 	spin_unlock_irq(&tu->qlock);
1781 	if (copy_to_user(_status, &status, sizeof(status)))
1782 		return -EFAULT;
1783 	return 0;
1784 }
1785 
1786 static int snd_timer_user_start(struct file *file)
1787 {
1788 	int err;
1789 	struct snd_timer_user *tu;
1790 
1791 	tu = file->private_data;
1792 	if (!tu->timeri)
1793 		return -EBADFD;
1794 	snd_timer_stop(tu->timeri);
1795 	tu->timeri->lost = 0;
1796 	tu->last_resolution = 0;
1797 	return (err = snd_timer_start(tu->timeri, tu->ticks)) < 0 ? err : 0;
1798 }
1799 
1800 static int snd_timer_user_stop(struct file *file)
1801 {
1802 	int err;
1803 	struct snd_timer_user *tu;
1804 
1805 	tu = file->private_data;
1806 	if (!tu->timeri)
1807 		return -EBADFD;
1808 	return (err = snd_timer_stop(tu->timeri)) < 0 ? err : 0;
1809 }
1810 
1811 static int snd_timer_user_continue(struct file *file)
1812 {
1813 	int err;
1814 	struct snd_timer_user *tu;
1815 
1816 	tu = file->private_data;
1817 	if (!tu->timeri)
1818 		return -EBADFD;
1819 	tu->timeri->lost = 0;
1820 	return (err = snd_timer_continue(tu->timeri)) < 0 ? err : 0;
1821 }
1822 
1823 static int snd_timer_user_pause(struct file *file)
1824 {
1825 	int err;
1826 	struct snd_timer_user *tu;
1827 
1828 	tu = file->private_data;
1829 	if (!tu->timeri)
1830 		return -EBADFD;
1831 	return (err = snd_timer_pause(tu->timeri)) < 0 ? err : 0;
1832 }
1833 
1834 enum {
1835 	SNDRV_TIMER_IOCTL_START_OLD = _IO('T', 0x20),
1836 	SNDRV_TIMER_IOCTL_STOP_OLD = _IO('T', 0x21),
1837 	SNDRV_TIMER_IOCTL_CONTINUE_OLD = _IO('T', 0x22),
1838 	SNDRV_TIMER_IOCTL_PAUSE_OLD = _IO('T', 0x23),
1839 };
1840 
1841 static long __snd_timer_user_ioctl(struct file *file, unsigned int cmd,
1842 				 unsigned long arg)
1843 {
1844 	struct snd_timer_user *tu;
1845 	void __user *argp = (void __user *)arg;
1846 	int __user *p = argp;
1847 
1848 	tu = file->private_data;
1849 	switch (cmd) {
1850 	case SNDRV_TIMER_IOCTL_PVERSION:
1851 		return put_user(SNDRV_TIMER_VERSION, p) ? -EFAULT : 0;
1852 	case SNDRV_TIMER_IOCTL_NEXT_DEVICE:
1853 		return snd_timer_user_next_device(argp);
1854 	case SNDRV_TIMER_IOCTL_TREAD:
1855 	{
1856 		int xarg;
1857 
1858 		if (tu->timeri)	/* too late */
1859 			return -EBUSY;
1860 		if (get_user(xarg, p))
1861 			return -EFAULT;
1862 		tu->tread = xarg ? 1 : 0;
1863 		return 0;
1864 	}
1865 	case SNDRV_TIMER_IOCTL_GINFO:
1866 		return snd_timer_user_ginfo(file, argp);
1867 	case SNDRV_TIMER_IOCTL_GPARAMS:
1868 		return snd_timer_user_gparams(file, argp);
1869 	case SNDRV_TIMER_IOCTL_GSTATUS:
1870 		return snd_timer_user_gstatus(file, argp);
1871 	case SNDRV_TIMER_IOCTL_SELECT:
1872 		return snd_timer_user_tselect(file, argp);
1873 	case SNDRV_TIMER_IOCTL_INFO:
1874 		return snd_timer_user_info(file, argp);
1875 	case SNDRV_TIMER_IOCTL_PARAMS:
1876 		return snd_timer_user_params(file, argp);
1877 	case SNDRV_TIMER_IOCTL_STATUS:
1878 		return snd_timer_user_status(file, argp);
1879 	case SNDRV_TIMER_IOCTL_START:
1880 	case SNDRV_TIMER_IOCTL_START_OLD:
1881 		return snd_timer_user_start(file);
1882 	case SNDRV_TIMER_IOCTL_STOP:
1883 	case SNDRV_TIMER_IOCTL_STOP_OLD:
1884 		return snd_timer_user_stop(file);
1885 	case SNDRV_TIMER_IOCTL_CONTINUE:
1886 	case SNDRV_TIMER_IOCTL_CONTINUE_OLD:
1887 		return snd_timer_user_continue(file);
1888 	case SNDRV_TIMER_IOCTL_PAUSE:
1889 	case SNDRV_TIMER_IOCTL_PAUSE_OLD:
1890 		return snd_timer_user_pause(file);
1891 	}
1892 	return -ENOTTY;
1893 }
1894 
1895 static long snd_timer_user_ioctl(struct file *file, unsigned int cmd,
1896 				 unsigned long arg)
1897 {
1898 	struct snd_timer_user *tu = file->private_data;
1899 	long ret;
1900 
1901 	mutex_lock(&tu->ioctl_lock);
1902 	ret = __snd_timer_user_ioctl(file, cmd, arg);
1903 	mutex_unlock(&tu->ioctl_lock);
1904 	return ret;
1905 }
1906 
1907 static int snd_timer_user_fasync(int fd, struct file * file, int on)
1908 {
1909 	struct snd_timer_user *tu;
1910 
1911 	tu = file->private_data;
1912 	return fasync_helper(fd, file, on, &tu->fasync);
1913 }
1914 
1915 static ssize_t snd_timer_user_read(struct file *file, char __user *buffer,
1916 				   size_t count, loff_t *offset)
1917 {
1918 	struct snd_timer_user *tu;
1919 	long result = 0, unit;
1920 	int qhead;
1921 	int err = 0;
1922 
1923 	tu = file->private_data;
1924 	unit = tu->tread ? sizeof(struct snd_timer_tread) : sizeof(struct snd_timer_read);
1925 	spin_lock_irq(&tu->qlock);
1926 	while ((long)count - result >= unit) {
1927 		while (!tu->qused) {
1928 			wait_queue_t wait;
1929 
1930 			if ((file->f_flags & O_NONBLOCK) != 0 || result > 0) {
1931 				err = -EAGAIN;
1932 				goto _error;
1933 			}
1934 
1935 			set_current_state(TASK_INTERRUPTIBLE);
1936 			init_waitqueue_entry(&wait, current);
1937 			add_wait_queue(&tu->qchange_sleep, &wait);
1938 
1939 			spin_unlock_irq(&tu->qlock);
1940 			schedule();
1941 			spin_lock_irq(&tu->qlock);
1942 
1943 			remove_wait_queue(&tu->qchange_sleep, &wait);
1944 
1945 			if (tu->disconnected) {
1946 				err = -ENODEV;
1947 				goto _error;
1948 			}
1949 			if (signal_pending(current)) {
1950 				err = -ERESTARTSYS;
1951 				goto _error;
1952 			}
1953 		}
1954 
1955 		qhead = tu->qhead++;
1956 		tu->qhead %= tu->queue_size;
1957 		spin_unlock_irq(&tu->qlock);
1958 
1959 		if (tu->tread) {
1960 			if (copy_to_user(buffer, &tu->tqueue[qhead],
1961 					 sizeof(struct snd_timer_tread)))
1962 				err = -EFAULT;
1963 		} else {
1964 			if (copy_to_user(buffer, &tu->queue[qhead],
1965 					 sizeof(struct snd_timer_read)))
1966 				err = -EFAULT;
1967 		}
1968 
1969 		spin_lock_irq(&tu->qlock);
1970 		tu->qused--;
1971 		if (err < 0)
1972 			goto _error;
1973 		result += unit;
1974 		buffer += unit;
1975 	}
1976  _error:
1977 	spin_unlock_irq(&tu->qlock);
1978 	return result > 0 ? result : err;
1979 }
1980 
1981 static unsigned int snd_timer_user_poll(struct file *file, poll_table * wait)
1982 {
1983         unsigned int mask;
1984         struct snd_timer_user *tu;
1985 
1986         tu = file->private_data;
1987 
1988         poll_wait(file, &tu->qchange_sleep, wait);
1989 
1990 	mask = 0;
1991 	if (tu->qused)
1992 		mask |= POLLIN | POLLRDNORM;
1993 	if (tu->disconnected)
1994 		mask |= POLLERR;
1995 
1996 	return mask;
1997 }
1998 
1999 #ifdef CONFIG_COMPAT
2000 #include "timer_compat.c"
2001 #else
2002 #define snd_timer_user_ioctl_compat	NULL
2003 #endif
2004 
2005 static const struct file_operations snd_timer_f_ops =
2006 {
2007 	.owner =	THIS_MODULE,
2008 	.read =		snd_timer_user_read,
2009 	.open =		snd_timer_user_open,
2010 	.release =	snd_timer_user_release,
2011 	.llseek =	no_llseek,
2012 	.poll =		snd_timer_user_poll,
2013 	.unlocked_ioctl =	snd_timer_user_ioctl,
2014 	.compat_ioctl =	snd_timer_user_ioctl_compat,
2015 	.fasync = 	snd_timer_user_fasync,
2016 };
2017 
2018 /* unregister the system timer */
2019 static void snd_timer_free_all(void)
2020 {
2021 	struct snd_timer *timer, *n;
2022 
2023 	list_for_each_entry_safe(timer, n, &snd_timer_list, device_list)
2024 		snd_timer_free(timer);
2025 }
2026 
2027 static struct device timer_dev;
2028 
2029 /*
2030  *  ENTRY functions
2031  */
2032 
2033 static int __init alsa_timer_init(void)
2034 {
2035 	int err;
2036 
2037 	snd_device_initialize(&timer_dev, NULL);
2038 	dev_set_name(&timer_dev, "timer");
2039 
2040 #ifdef SNDRV_OSS_INFO_DEV_TIMERS
2041 	snd_oss_info_register(SNDRV_OSS_INFO_DEV_TIMERS, SNDRV_CARDS - 1,
2042 			      "system timer");
2043 #endif
2044 
2045 	err = snd_timer_register_system();
2046 	if (err < 0) {
2047 		pr_err("ALSA: unable to register system timer (%i)\n", err);
2048 		put_device(&timer_dev);
2049 		return err;
2050 	}
2051 
2052 	err = snd_register_device(SNDRV_DEVICE_TYPE_TIMER, NULL, 0,
2053 				  &snd_timer_f_ops, NULL, &timer_dev);
2054 	if (err < 0) {
2055 		pr_err("ALSA: unable to register timer device (%i)\n", err);
2056 		snd_timer_free_all();
2057 		put_device(&timer_dev);
2058 		return err;
2059 	}
2060 
2061 	snd_timer_proc_init();
2062 	return 0;
2063 }
2064 
2065 static void __exit alsa_timer_exit(void)
2066 {
2067 	snd_unregister_device(&timer_dev);
2068 	snd_timer_free_all();
2069 	put_device(&timer_dev);
2070 	snd_timer_proc_done();
2071 #ifdef SNDRV_OSS_INFO_DEV_TIMERS
2072 	snd_oss_info_unregister(SNDRV_OSS_INFO_DEV_TIMERS, SNDRV_CARDS - 1);
2073 #endif
2074 }
2075 
2076 module_init(alsa_timer_init)
2077 module_exit(alsa_timer_exit)
2078 
2079 EXPORT_SYMBOL(snd_timer_open);
2080 EXPORT_SYMBOL(snd_timer_close);
2081 EXPORT_SYMBOL(snd_timer_resolution);
2082 EXPORT_SYMBOL(snd_timer_start);
2083 EXPORT_SYMBOL(snd_timer_stop);
2084 EXPORT_SYMBOL(snd_timer_continue);
2085 EXPORT_SYMBOL(snd_timer_pause);
2086 EXPORT_SYMBOL(snd_timer_new);
2087 EXPORT_SYMBOL(snd_timer_notify);
2088 EXPORT_SYMBOL(snd_timer_global_new);
2089 EXPORT_SYMBOL(snd_timer_global_free);
2090 EXPORT_SYMBOL(snd_timer_global_register);
2091 EXPORT_SYMBOL(snd_timer_interrupt);
2092