at v2.6.21 1.3 kB view raw
1#ifndef __ASM_SH_TIMER_H 2#define __ASM_SH_TIMER_H 3 4#include <linux/sysdev.h> 5#include <asm/cpu/timer.h> 6 7struct sys_timer_ops { 8 int (*init)(void); 9 int (*start)(void); 10 int (*stop)(void); 11#ifndef CONFIG_GENERIC_TIME 12 unsigned long (*get_offset)(void); 13#endif 14}; 15 16struct sys_timer { 17 const char *name; 18 19 struct sys_device dev; 20 struct sys_timer_ops *ops; 21 22#ifdef CONFIG_NO_IDLE_HZ 23 struct dyn_tick_timer *dyn_tick; 24#endif 25}; 26 27#ifdef CONFIG_NO_IDLE_HZ 28#define DYN_TICK_ENABLED (1 << 1) 29 30struct dyn_tick_timer { 31 spinlock_t lock; 32 unsigned int state; /* Current state */ 33 int (*enable)(void); /* Enables dynamic tick */ 34 int (*disable)(void); /* Disables dynamic tick */ 35 void (*reprogram)(unsigned long); /* Reprograms the timer */ 36 int (*handler)(int, void *); 37}; 38 39void timer_dyn_reprogram(void); 40#else 41#define timer_dyn_reprogram() do { } while (0) 42#endif 43 44#define TICK_SIZE (tick_nsec / 1000) 45 46extern struct sys_timer tmu_timer, cmt_timer, mtu2_timer; 47extern struct sys_timer *sys_timer; 48 49#ifndef CONFIG_GENERIC_TIME 50static inline unsigned long get_timer_offset(void) 51{ 52 return sys_timer->ops->get_offset(); 53} 54#endif 55 56/* arch/sh/kernel/timers/timer.c */ 57struct sys_timer *get_sys_timer(void); 58 59/* arch/sh/kernel/time.c */ 60void handle_timer_tick(void); 61 62#endif /* __ASM_SH_TIMER_H */