home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / linux / timer.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  2.6 KB  |  102 lines

  1. #ifndef _LINUX_TIMER_H
  2. #define _LINUX_TIMER_H
  3.  
  4. #include <linux/list.h>
  5. #include <linux/spinlock.h>
  6. #include <linux/stddef.h>
  7.  
  8. struct tvec_t_base_s;
  9.  
  10. struct timer_list {
  11.     struct list_head entry;
  12.     unsigned long expires;
  13.  
  14.     void (*function)(unsigned long);
  15.     unsigned long data;
  16.  
  17.     struct tvec_t_base_s *base;
  18. };
  19.  
  20. extern struct tvec_t_base_s boot_tvec_bases;
  21.  
  22. #define TIMER_INITIALIZER(_function, _expires, _data) {        \
  23.         .function = (_function),            \
  24.         .expires = (_expires),                \
  25.         .data = (_data),                \
  26.         .base = &boot_tvec_bases,            \
  27.     }
  28.  
  29. #define DEFINE_TIMER(_name, _function, _expires, _data)        \
  30.     struct timer_list _name =                \
  31.         TIMER_INITIALIZER(_function, _expires, _data)
  32.  
  33. void fastcall init_timer(struct timer_list * timer);
  34.  
  35. static inline void setup_timer(struct timer_list * timer,
  36.                 void (*function)(unsigned long),
  37.                 unsigned long data)
  38. {
  39.     timer->function = function;
  40.     timer->data = data;
  41.     init_timer(timer);
  42. }
  43.  
  44. /***
  45.  * timer_pending - is a timer pending?
  46.  * @timer: the timer in question
  47.  *
  48.  * timer_pending will tell whether a given timer is currently pending,
  49.  * or not. Callers must ensure serialization wrt. other operations done
  50.  * to this timer, eg. interrupt contexts, or other CPUs on SMP.
  51.  *
  52.  * return value: 1 if the timer is pending, 0 if not.
  53.  */
  54. static inline int timer_pending(const struct timer_list * timer)
  55. {
  56.     return timer->entry.next != NULL;
  57. }
  58.  
  59. extern void add_timer_on(struct timer_list *timer, int cpu);
  60. extern int del_timer(struct timer_list * timer);
  61. extern int __mod_timer(struct timer_list *timer, unsigned long expires);
  62. extern int mod_timer(struct timer_list *timer, unsigned long expires);
  63.  
  64. extern unsigned long next_timer_interrupt(void);
  65.  
  66. /***
  67.  * add_timer - start a timer
  68.  * @timer: the timer to be added
  69.  *
  70.  * The kernel will do a ->function(->data) callback from the
  71.  * timer interrupt at the ->expires point in the future. The
  72.  * current time is 'jiffies'.
  73.  *
  74.  * The timer's ->expires, ->function (and if the handler uses it, ->data)
  75.  * fields must be set prior calling this function.
  76.  *
  77.  * Timers with an ->expires field in the past will be executed in the next
  78.  * timer tick.
  79.  */
  80. static inline void add_timer(struct timer_list *timer)
  81. {
  82.     BUG_ON(timer_pending(timer));
  83.     __mod_timer(timer, timer->expires);
  84. }
  85.  
  86. #ifdef CONFIG_SMP
  87.   extern int try_to_del_timer_sync(struct timer_list *timer);
  88.   extern int del_timer_sync(struct timer_list *timer);
  89. #else
  90. # define try_to_del_timer_sync(t)    del_timer(t)
  91. # define del_timer_sync(t)        del_timer(t)
  92. #endif
  93.  
  94. #define del_singleshot_timer_sync(t) del_timer_sync(t)
  95.  
  96. extern void init_timers(void);
  97. extern void run_local_timers(void);
  98. struct hrtimer;
  99. extern int it_real_fn(struct hrtimer *);
  100.  
  101. #endif
  102.