2006-01-16 22:14:18 -08:00
# ifndef __ASM_SH_TIMER_H
# define __ASM_SH_TIMER_H
# include <linux/sysdev.h>
# include <asm/cpu/timer.h>
struct sys_timer_ops {
int ( * init ) ( void ) ;
2006-09-27 16:20:22 +09:00
int ( * start ) ( void ) ;
int ( * stop ) ( void ) ;
2006-10-04 13:21:45 +09:00
# ifndef CONFIG_GENERIC_TIME
2006-01-16 22:14:18 -08:00
unsigned long ( * get_offset ) ( void ) ;
2006-10-04 13:21:45 +09:00
# endif
2006-01-16 22:14:18 -08:00
} ;
struct sys_timer {
const char * name ;
struct sys_device dev ;
struct sys_timer_ops * ops ;
2006-12-01 13:23:47 +09:00
# ifdef CONFIG_NO_IDLE_HZ
struct dyn_tick_timer * dyn_tick ;
# endif
2006-01-16 22:14:18 -08:00
} ;
2006-12-01 13:23:47 +09:00
# ifdef CONFIG_NO_IDLE_HZ
# define DYN_TICK_ENABLED (1 << 1)
struct dyn_tick_timer {
spinlock_t lock ;
unsigned int state ; /* Current state */
int ( * enable ) ( void ) ; /* Enables dynamic tick */
int ( * disable ) ( void ) ; /* Disables dynamic tick */
void ( * reprogram ) ( unsigned long ) ; /* Reprograms the timer */
int ( * handler ) ( int , void * ) ;
} ;
void timer_dyn_reprogram ( void ) ;
# else
# define timer_dyn_reprogram() do { } while (0)
# endif
2006-01-16 22:14:18 -08:00
# define TICK_SIZE (tick_nsec / 1000)
2006-11-05 16:48:42 +09:00
extern struct sys_timer tmu_timer , cmt_timer , mtu2_timer ;
2006-01-16 22:14:18 -08:00
extern struct sys_timer * sys_timer ;
2006-10-04 13:21:45 +09:00
# ifndef CONFIG_GENERIC_TIME
2006-01-16 22:14:18 -08:00
static inline unsigned long get_timer_offset ( void )
{
return sys_timer - > ops - > get_offset ( ) ;
}
2006-10-04 13:21:45 +09:00
# endif
2006-01-16 22:14:18 -08:00
/* arch/sh/kernel/timers/timer.c */
struct sys_timer * get_sys_timer ( void ) ;
/* arch/sh/kernel/time.c */
2006-10-06 15:31:16 +09:00
void handle_timer_tick ( void ) ;
2006-01-16 22:14:18 -08:00
# endif /* __ASM_SH_TIMER_H */