Blame view
include/clocksource/arm_arch_timer.h
2.13 KB
8a4da6e36
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/* * Copyright (C) 2012 ARM Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #ifndef __CLKSOURCE_ARM_ARCH_TIMER_H #define __CLKSOURCE_ARM_ARCH_TIMER_H |
74d23cc70
|
18 |
#include <linux/timecounter.h> |
8a4da6e36
|
19 20 21 22 23 |
#include <linux/types.h> #define ARCH_TIMER_CTRL_ENABLE (1 << 0) #define ARCH_TIMER_CTRL_IT_MASK (1 << 1) #define ARCH_TIMER_CTRL_IT_STAT (1 << 2) |
1431af367
|
24 25 26 27 28 |
#define CNTHCTL_EL1PCTEN (1 << 0) #define CNTHCTL_EL1PCEN (1 << 1) #define CNTHCTL_EVNTEN (1 << 2) #define CNTHCTL_EVNTDIR (1 << 3) #define CNTHCTL_EVNTI (0xF << 4) |
e09f3cc01
|
29 30 31 32 |
enum arch_timer_reg { ARCH_TIMER_REG_CTRL, ARCH_TIMER_REG_TVAL, }; |
8a4da6e36
|
33 34 35 |
#define ARCH_TIMER_PHYS_ACCESS 0 #define ARCH_TIMER_VIRT_ACCESS 1 |
220069945
|
36 37 |
#define ARCH_TIMER_MEM_PHYS_ACCESS 2 #define ARCH_TIMER_MEM_VIRT_ACCESS 3 |
8a4da6e36
|
38 |
|
28061758d
|
39 40 41 42 43 44 45 |
#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) #define ARCH_TIMER_EVT_TRIGGER_SHIFT (4) #define ARCH_TIMER_EVT_TRIGGER_MASK (0xF << ARCH_TIMER_EVT_TRIGGER_SHIFT) #define ARCH_TIMER_USR_VT_ACCESS_EN (1 << 8) /* virtual timer registers */ #define ARCH_TIMER_USR_PT_ACCESS_EN (1 << 9) /* physical timer registers */ |
037f63776
|
46 |
#define ARCH_TIMER_EVT_STREAM_FREQ 10000 /* 100us */ |
b4d6ce977
|
47 48 |
struct arch_timer_kvm_info { struct timecounter timecounter; |
d9b5e4159
|
49 |
int virtual_irq; |
b4d6ce977
|
50 |
}; |
8a4da6e36
|
51 |
#ifdef CONFIG_ARM_ARCH_TIMER |
8a4da6e36
|
52 |
extern u32 arch_timer_get_rate(void); |
220069945
|
53 |
extern u64 (*arch_timer_read_counter)(void); |
b4d6ce977
|
54 |
extern struct arch_timer_kvm_info *arch_timer_get_kvm_info(void); |
8a4da6e36
|
55 56 |
#else |
8a4da6e36
|
57 58 59 60 61 62 63 64 65 |
static inline u32 arch_timer_get_rate(void) { return 0; } static inline u64 arch_timer_read_counter(void) { return 0; } |
8a4da6e36
|
66 67 68 |
#endif #endif |