1 /* 2 * (C) Copyright 2009 Intel Corporation 3 * Author: Jacob Pan (jacob.jun.pan@intel.com) 4 * 5 * Shared with ARM platforms, Jamie Iles, Picochip 2011 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License version 2 as 9 * published by the Free Software Foundation. 10 * 11 * Support for the Synopsys DesignWare APB Timers. 12 */ 13 #ifndef __DW_APB_TIMER_H__ 14 #define __DW_APB_TIMER_H__ 15 16 #include <linux/clockchips.h> 17 #include <linux/clocksource.h> 18 #include <linux/interrupt.h> 19 20 #define APBTMRS_REG_SIZE 0x14 21 22 struct dw_apb_timer { 23 void __iomem *base; 24 unsigned long freq; 25 int irq; 26 }; 27 28 struct dw_apb_clock_event_device { 29 struct clock_event_device ced; 30 struct dw_apb_timer timer; 31 struct irqaction irqaction; 32 void (*eoi)(struct dw_apb_timer *); 33 }; 34 35 struct dw_apb_clocksource { 36 struct dw_apb_timer timer; 37 struct clocksource cs; 38 }; 39 40 void dw_apb_clockevent_register(struct dw_apb_clock_event_device *dw_ced); 41 void dw_apb_clockevent_pause(struct dw_apb_clock_event_device *dw_ced); 42 void dw_apb_clockevent_resume(struct dw_apb_clock_event_device *dw_ced); 43 void dw_apb_clockevent_stop(struct dw_apb_clock_event_device *dw_ced); 44 45 struct dw_apb_clock_event_device * 46 dw_apb_clockevent_init(int cpu, const char *name, unsigned rating, 47 void __iomem *base, int irq, unsigned long freq); 48 struct dw_apb_clocksource * 49 dw_apb_clocksource_init(unsigned rating, const char *name, void __iomem *base, 50 unsigned long freq); 51 void dw_apb_clocksource_register(struct dw_apb_clocksource *dw_cs); 52 void dw_apb_clocksource_start(struct dw_apb_clocksource *dw_cs); 53 cycle_t dw_apb_clocksource_read(struct dw_apb_clocksource *dw_cs); 54 void dw_apb_clocksource_unregister(struct dw_apb_clocksource *dw_cs); 55 56 extern void dw_apb_timer_init(void); 57 #endif /* __DW_APB_TIMER_H__ */ 58