Files
linux-apfs/include/linux/timer.h
T

108 lines
2.8 KiB
C
Raw Normal View History

2005-04-16 15:20:36 -07:00
#ifndef _LINUX_TIMER_H
#define _LINUX_TIMER_H
#include <linux/list.h>
#include <linux/spinlock.h>
#include <linux/stddef.h>
struct tvec_t_base_s;
2005-04-16 15:20:36 -07:00
struct timer_list {
struct list_head entry;
unsigned long expires;
void (*function)(unsigned long);
unsigned long data;
struct tvec_t_base_s *base;
2005-04-16 15:20:36 -07:00
};
extern struct tvec_t_base_s boot_tvec_bases;
2005-06-23 00:08:56 -07:00
2005-04-16 15:20:36 -07:00
#define TIMER_INITIALIZER(_function, _expires, _data) { \
.function = (_function), \
.expires = (_expires), \
.data = (_data), \
.base = &boot_tvec_bases, \
2005-04-16 15:20:36 -07:00
}
#define DEFINE_TIMER(_name, _function, _expires, _data) \
struct timer_list _name = \
TIMER_INITIALIZER(_function, _expires, _data)
2005-06-23 00:08:56 -07:00
void fastcall init_timer(struct timer_list * timer);
2005-04-16 15:20:36 -07:00
2005-10-30 15:01:38 -08:00
static inline void setup_timer(struct timer_list * timer,
void (*function)(unsigned long),
unsigned long data)
{
timer->function = function;
timer->data = data;
init_timer(timer);
}
2005-04-16 15:20:36 -07:00
/***
* timer_pending - is a timer pending?
* @timer: the timer in question
*
* timer_pending will tell whether a given timer is currently pending,
* or not. Callers must ensure serialization wrt. other operations done
* to this timer, eg. interrupt contexts, or other CPUs on SMP.
*
* return value: 1 if the timer is pending, 0 if not.
*/
static inline int timer_pending(const struct timer_list * timer)
{
2005-06-23 00:08:56 -07:00
return timer->entry.next != NULL;
2005-04-16 15:20:36 -07:00
}
extern void add_timer_on(struct timer_list *timer, int cpu);
extern int del_timer(struct timer_list * timer);
extern int __mod_timer(struct timer_list *timer, unsigned long expires);
extern int mod_timer(struct timer_list *timer, unsigned long expires);
extern unsigned long next_timer_interrupt(void);
/***
* add_timer - start a timer
* @timer: the timer to be added
*
* The kernel will do a ->function(->data) callback from the
2006-03-24 18:13:37 +01:00
* timer interrupt at the ->expires point in the future. The
2005-04-16 15:20:36 -07:00
* current time is 'jiffies'.
*
2006-03-24 18:13:37 +01:00
* The timer's ->expires, ->function (and if the handler uses it, ->data)
2005-04-16 15:20:36 -07:00
* fields must be set prior calling this function.
*
2006-03-24 18:13:37 +01:00
* Timers with an ->expires field in the past will be executed in the next
2005-04-16 15:20:36 -07:00
* timer tick.
*/
static inline void add_timer(struct timer_list *timer)
2005-04-16 15:20:36 -07:00
{
BUG_ON(timer_pending(timer));
2005-04-16 15:20:36 -07:00
__mod_timer(timer, timer->expires);
}
#ifdef CONFIG_SMP
extern int try_to_del_timer_sync(struct timer_list *timer);
2005-04-16 15:20:36 -07:00
extern int del_timer_sync(struct timer_list *timer);
#else
# define try_to_del_timer_sync(t) del_timer(t)
# define del_timer_sync(t) del_timer(t)
2005-04-16 15:20:36 -07:00
#endif
2005-06-23 00:08:56 -07:00
#define del_singleshot_timer_sync(t) del_timer_sync(t)
2005-04-16 15:20:36 -07:00
extern void init_timers(void);
extern void run_local_timers(void);
2006-03-26 01:38:12 -08:00
struct hrtimer;
extern int it_real_fn(struct hrtimer *);
2005-04-16 15:20:36 -07:00
2006-12-10 02:21:24 -08:00
unsigned long __round_jiffies(unsigned long j, int cpu);
unsigned long __round_jiffies_relative(unsigned long j, int cpu);
unsigned long round_jiffies(unsigned long j);
unsigned long round_jiffies_relative(unsigned long j);
2005-04-16 15:20:36 -07:00
#endif