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