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