0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef __DW_APB_TIMER_H__
0011 #define __DW_APB_TIMER_H__
0012
0013 #include <linux/clockchips.h>
0014 #include <linux/clocksource.h>
0015 #include <linux/interrupt.h>
0016
0017 #define APBTMRS_REG_SIZE 0x14
0018
0019 struct dw_apb_timer {
0020 void __iomem *base;
0021 unsigned long freq;
0022 int irq;
0023 };
0024
0025 struct dw_apb_clock_event_device {
0026 struct clock_event_device ced;
0027 struct dw_apb_timer timer;
0028 void (*eoi)(struct dw_apb_timer *);
0029 };
0030
0031 struct dw_apb_clocksource {
0032 struct dw_apb_timer timer;
0033 struct clocksource cs;
0034 };
0035
0036 void dw_apb_clockevent_register(struct dw_apb_clock_event_device *dw_ced);
0037 void dw_apb_clockevent_pause(struct dw_apb_clock_event_device *dw_ced);
0038 void dw_apb_clockevent_resume(struct dw_apb_clock_event_device *dw_ced);
0039 void dw_apb_clockevent_stop(struct dw_apb_clock_event_device *dw_ced);
0040
0041 struct dw_apb_clock_event_device *
0042 dw_apb_clockevent_init(int cpu, const char *name, unsigned rating,
0043 void __iomem *base, int irq, unsigned long freq);
0044 struct dw_apb_clocksource *
0045 dw_apb_clocksource_init(unsigned rating, const char *name, void __iomem *base,
0046 unsigned long freq);
0047 void dw_apb_clocksource_register(struct dw_apb_clocksource *dw_cs);
0048 void dw_apb_clocksource_start(struct dw_apb_clocksource *dw_cs);
0049 u64 dw_apb_clocksource_read(struct dw_apb_clocksource *dw_cs);
0050
0051 #endif