blob: ebc78db1a9ea8c34c33b5acf7d4224c71b1d2170 [file] [log] [blame]
Paul Mundtaa016662006-01-16 22:14:18 -08001#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);
Andriy Skulysh3aa770e2006-09-27 16:20:22 +09009 int (*start)(void);
10 int (*stop)(void);
Paul Mundt45882142006-10-04 13:21:45 +090011#ifndef CONFIG_GENERIC_TIME
Paul Mundtaa016662006-01-16 22:14:18 -080012 unsigned long (*get_offset)(void);
Paul Mundt45882142006-10-04 13:21:45 +090013#endif
Paul Mundtaa016662006-01-16 22:14:18 -080014 unsigned long (*get_frequency)(void);
15};
16
17struct sys_timer {
18 const char *name;
19
20 struct sys_device dev;
21 struct sys_timer_ops *ops;
22};
23
24#define TICK_SIZE (tick_nsec / 1000)
25
26extern struct sys_timer tmu_timer;
27extern struct sys_timer *sys_timer;
28
Paul Mundt45882142006-10-04 13:21:45 +090029#ifndef CONFIG_GENERIC_TIME
Paul Mundtaa016662006-01-16 22:14:18 -080030static inline unsigned long get_timer_offset(void)
31{
32 return sys_timer->ops->get_offset();
33}
Paul Mundt45882142006-10-04 13:21:45 +090034#endif
Paul Mundtaa016662006-01-16 22:14:18 -080035
36static inline unsigned long get_timer_frequency(void)
37{
38 return sys_timer->ops->get_frequency();
39}
40
41/* arch/sh/kernel/timers/timer.c */
42struct sys_timer *get_sys_timer(void);
43
44/* arch/sh/kernel/time.c */
45void handle_timer_tick(struct pt_regs *);
46
47#endif /* __ASM_SH_TIMER_H */
48