57be2b484a
This adds basic support for clockevents and clocksources, presently only implemented for TMU-based systems (which are the majority of SH-3 and SH-4 systems). The old NO_IDLE_HZ implementation is also dropped completely, the only users of this were on TMU-based systems anyways. More work needs to be done to generalize the TMU handling, in that the current implementation is rather tied to the notion of TMU0 and TMU1 utilization. Additionally, as more SH timers switch over to this scheme, we'll be able to gut most of the remaining system timer infrastructure that existed before. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
45 lines
923 B
C
45 lines
923 B
C
#ifndef __ASM_SH_TIMER_H
|
|
#define __ASM_SH_TIMER_H
|
|
|
|
#include <linux/sysdev.h>
|
|
#include <linux/clocksource.h>
|
|
#include <asm/cpu/timer.h>
|
|
|
|
struct sys_timer_ops {
|
|
int (*init)(void);
|
|
int (*start)(void);
|
|
int (*stop)(void);
|
|
cycle_t (*read)(void);
|
|
#ifndef CONFIG_GENERIC_TIME
|
|
unsigned long (*get_offset)(void);
|
|
#endif
|
|
};
|
|
|
|
struct sys_timer {
|
|
const char *name;
|
|
|
|
struct sys_device dev;
|
|
struct sys_timer_ops *ops;
|
|
};
|
|
|
|
#define TICK_SIZE (tick_nsec / 1000)
|
|
|
|
extern struct sys_timer tmu_timer, cmt_timer, mtu2_timer;
|
|
extern struct sys_timer *sys_timer;
|
|
|
|
#ifndef CONFIG_GENERIC_TIME
|
|
static inline unsigned long get_timer_offset(void)
|
|
{
|
|
return sys_timer->ops->get_offset();
|
|
}
|
|
#endif
|
|
|
|
/* arch/sh/kernel/timers/timer.c */
|
|
struct sys_timer *get_sys_timer(void);
|
|
|
|
/* arch/sh/kernel/time.c */
|
|
void handle_timer_tick(void);
|
|
extern unsigned long sh_hpt_frequency;
|
|
extern struct clocksource clocksource_sh;
|
|
|
|
#endif /* __ASM_SH_TIMER_H */
|