/[openvortex]/alsa/alsa-kernel/core/timer.c
ViewVC logotype

Diff of /alsa/alsa-kernel/core/timer.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.2 by vizard, Sun Jun 15 21:01:30 2003 UTC revision 1.3 by vizard, Mon Aug 11 00:06:38 2003 UTC
# Line 41  Line 41 
41  #define DEFAULT_TIMER_LIMIT 2  #define DEFAULT_TIMER_LIMIT 2
42  #endif  #endif
43    
44  int timer_limit = DEFAULT_TIMER_LIMIT;  static int timer_limit = DEFAULT_TIMER_LIMIT;
45  MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>, Takashi Iwai <tiwai@suse.de>");  MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>, Takashi Iwai <tiwai@suse.de>");
46  MODULE_DESCRIPTION("ALSA timer interface");  MODULE_DESCRIPTION("ALSA timer interface");
47  MODULE_LICENSE("GPL");  MODULE_LICENSE("GPL");
# Line 458  static int _snd_timer_stop(snd_timer_ins Line 458  static int _snd_timer_stop(snd_timer_ins
458                  return -EINVAL;                  return -EINVAL;
459          spin_lock_irqsave(&timer->lock, flags);          spin_lock_irqsave(&timer->lock, flags);
460          list_del_init(&timeri->ack_list);          list_del_init(&timeri->ack_list);
461    #if 0   /* FIXME: this causes dead lock with the sequencer timer */
462          /* wait until the callback is finished */          /* wait until the callback is finished */
463          while (timeri->flags & SNDRV_TIMER_IFLG_CALLBACK) {          while (timeri->flags & SNDRV_TIMER_IFLG_CALLBACK) {
464                  spin_unlock_irqrestore(&timer->lock, flags);                  spin_unlock_irqrestore(&timer->lock, flags);
465                  udelay(10);                  udelay(10);
466                  spin_lock_irqsave(&timer->lock, flags);                  spin_lock_irqsave(&timer->lock, flags);
467          }          }
468    #endif
469          list_del_init(&timeri->active_list);          list_del_init(&timeri->active_list);
470          if ((timeri->flags & SNDRV_TIMER_IFLG_RUNNING) &&          if ((timeri->flags & SNDRV_TIMER_IFLG_RUNNING) &&
471              !(timeri->flags & SNDRV_TIMER_IFLG_SLAVE) &&              !(timeri->flags & SNDRV_TIMER_IFLG_SLAVE) &&
# Line 1688  static ssize_t snd_timer_user_read(struc Line 1690  static ssize_t snd_timer_user_read(struc
1690                                  break;                                  break;
1691                          }                          }
1692                  }                  }
                 spin_unlock_irq(&tu->qlock);  
1693                  if (err < 0)                  if (err < 0)
1694                          break;                          break;
1695    
1696                    spin_unlock_irq(&tu->qlock);
1697    
1698                  if (tu->tread) {                  if (tu->tread) {
1699                          if (copy_to_user(buffer, &tu->tqueue[tu->qhead++], sizeof(snd_timer_tread_t))) {                          if (copy_to_user(buffer, &tu->tqueue[tu->qhead++], sizeof(snd_timer_tread_t))) {
1700                                  err = -EFAULT;                                  err = -EFAULT;
# Line 1712  static ssize_t snd_timer_user_read(struc Line 1715  static ssize_t snd_timer_user_read(struc
1715                  spin_lock_irq(&tu->qlock);                  spin_lock_irq(&tu->qlock);
1716                  tu->qused--;                  tu->qused--;
1717          }          }
1718            spin_unlock_irq(&tu->qlock);
1719          return result > 0 ? result : err;          return result > 0 ? result : err;
1720  }  }
1721    
# Line 1802  static void __exit alsa_timer_exit(void) Line 1806  static void __exit alsa_timer_exit(void)
1806  module_init(alsa_timer_init)  module_init(alsa_timer_init)
1807  module_exit(alsa_timer_exit)  module_exit(alsa_timer_exit)
1808    
1809    #ifndef MODULE
1810    /* format is: snd-timer=timer_limit */
1811    
1812    static int __init alsa_timer_setup(char *str)
1813    {
1814            (void)(get_option(&str,&timer_limit) == 2);
1815            return 1;
1816    }
1817    
1818    __setup("snd-timer=", alsa_timer_setup);
1819    #endif /* ifndef MODULE */
1820    
1821  EXPORT_SYMBOL(snd_timer_open);  EXPORT_SYMBOL(snd_timer_open);
1822  EXPORT_SYMBOL(snd_timer_close);  EXPORT_SYMBOL(snd_timer_close);
1823  EXPORT_SYMBOL(snd_timer_resolution);  EXPORT_SYMBOL(snd_timer_resolution);

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26