1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 #ifndef __DW_APB_TIMER_H__
  11 #define __DW_APB_TIMER_H__
  12 
  13 #include <linux/clockchips.h>
  14 #include <linux/clocksource.h>
  15 #include <linux/interrupt.h>
  16 
  17 #define APBTMRS_REG_SIZE       0x14
  18 
  19 struct dw_apb_timer {
  20         void __iomem                            *base;
  21         unsigned long                           freq;
  22         int                                     irq;
  23 };
  24 
  25 struct dw_apb_clock_event_device {
  26         struct clock_event_device               ced;
  27         struct dw_apb_timer                     timer;
  28         struct irqaction                        irqaction;
  29         void                                    (*eoi)(struct dw_apb_timer *);
  30 };
  31 
  32 struct dw_apb_clocksource {
  33         struct dw_apb_timer                     timer;
  34         struct clocksource                      cs;
  35 };
  36 
  37 void dw_apb_clockevent_register(struct dw_apb_clock_event_device *dw_ced);
  38 void dw_apb_clockevent_pause(struct dw_apb_clock_event_device *dw_ced);
  39 void dw_apb_clockevent_resume(struct dw_apb_clock_event_device *dw_ced);
  40 void dw_apb_clockevent_stop(struct dw_apb_clock_event_device *dw_ced);
  41 
  42 struct dw_apb_clock_event_device *
  43 dw_apb_clockevent_init(int cpu, const char *name, unsigned rating,
  44                        void __iomem *base, int irq, unsigned long freq);
  45 struct dw_apb_clocksource *
  46 dw_apb_clocksource_init(unsigned rating, const char *name, void __iomem *base,
  47                         unsigned long freq);
  48 void dw_apb_clocksource_register(struct dw_apb_clocksource *dw_cs);
  49 void dw_apb_clocksource_start(struct dw_apb_clocksource *dw_cs);
  50 u64 dw_apb_clocksource_read(struct dw_apb_clocksource *dw_cs);
  51 
  52 #endif