clocksource: arm_arch_timer: add structs to describe MMIO timer
[sfrench/cifs-2.6.git] / include / clocksource / arm_arch_timer.h
index caedb74c92108188e57652b56a1c198f3263c092..cc805b72994acd1442a50a4ec6e7d5593a833d76 100644 (file)
 #ifndef __CLKSOURCE_ARM_ARCH_TIMER_H
 #define __CLKSOURCE_ARM_ARCH_TIMER_H
 
+#include <linux/bitops.h>
 #include <linux/timecounter.h>
 #include <linux/types.h>
 
+#define ARCH_TIMER_TYPE_CP15           BIT(0)
+#define ARCH_TIMER_TYPE_MEM            BIT(1)
+
 #define ARCH_TIMER_CTRL_ENABLE         (1 << 0)
 #define ARCH_TIMER_CTRL_IT_MASK                (1 << 1)
 #define ARCH_TIMER_CTRL_IT_STAT                (1 << 2)
@@ -34,11 +38,27 @@ enum arch_timer_reg {
        ARCH_TIMER_REG_TVAL,
 };
 
+enum arch_timer_ppi_nr {
+       ARCH_TIMER_PHYS_SECURE_PPI,
+       ARCH_TIMER_PHYS_NONSECURE_PPI,
+       ARCH_TIMER_VIRT_PPI,
+       ARCH_TIMER_HYP_PPI,
+       ARCH_TIMER_MAX_TIMER_PPI
+};
+
+enum arch_timer_spi_nr {
+       ARCH_TIMER_PHYS_SPI,
+       ARCH_TIMER_VIRT_SPI,
+       ARCH_TIMER_MAX_TIMER_SPI
+};
+
 #define ARCH_TIMER_PHYS_ACCESS         0
 #define ARCH_TIMER_VIRT_ACCESS         1
 #define ARCH_TIMER_MEM_PHYS_ACCESS     2
 #define ARCH_TIMER_MEM_VIRT_ACCESS     3
 
+#define ARCH_TIMER_MEM_MAX_FRAMES      8
+
 #define ARCH_TIMER_USR_PCT_ACCESS_EN   (1 << 0) /* physical counter */
 #define ARCH_TIMER_USR_VCT_ACCESS_EN   (1 << 1) /* virtual counter */
 #define ARCH_TIMER_VIRT_EVT_EN         (1 << 2)
@@ -54,6 +74,20 @@ struct arch_timer_kvm_info {
        int virtual_irq;
 };
 
+struct arch_timer_mem_frame {
+       bool valid;
+       phys_addr_t cntbase;
+       size_t size;
+       int phys_irq;
+       int virt_irq;
+};
+
+struct arch_timer_mem {
+       phys_addr_t cntctlbase;
+       size_t size;
+       struct arch_timer_mem_frame frame[ARCH_TIMER_MEM_MAX_FRAMES];
+};
+
 #ifdef CONFIG_ARM_ARCH_TIMER
 
 extern u32 arch_timer_get_rate(void);