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 8struct tvec_t_base_s; 9 10struct 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 20extern 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 33void fastcall init_timer(struct timer_list * timer); 34 35static 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 */ 54static inline int timer_pending(const struct timer_list * timer) 55{ 56 return timer->entry.next != NULL; 57} 58 59extern void add_timer_on(struct timer_list *timer, int cpu); 60extern int del_timer(struct timer_list * timer); 61extern int __mod_timer(struct timer_list *timer, unsigned long expires); 62extern int mod_timer(struct timer_list *timer, unsigned long expires); 63 64extern 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 */ 80static 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 96extern void init_timers(void); 97extern void run_local_timers(void); 98struct hrtimer; 99extern int it_real_fn(struct hrtimer *); 100 101#endif 102