18a4da6e3SMark Rutland /*
28a4da6e3SMark Rutland  * Copyright (C) 2012 ARM Ltd.
38a4da6e3SMark Rutland  *
48a4da6e3SMark Rutland  * This program is free software; you can redistribute it and/or modify
58a4da6e3SMark Rutland  * it under the terms of the GNU General Public License version 2 as
68a4da6e3SMark Rutland  * published by the Free Software Foundation.
78a4da6e3SMark Rutland  *
88a4da6e3SMark Rutland  * This program is distributed in the hope that it will be useful,
98a4da6e3SMark Rutland  * but WITHOUT ANY WARRANTY; without even the implied warranty of
108a4da6e3SMark Rutland  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
118a4da6e3SMark Rutland  * GNU General Public License for more details.
128a4da6e3SMark Rutland  *
138a4da6e3SMark Rutland  * You should have received a copy of the GNU General Public License
148a4da6e3SMark Rutland  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
158a4da6e3SMark Rutland  */
168a4da6e3SMark Rutland #ifndef __CLKSOURCE_ARM_ARCH_TIMER_H
178a4da6e3SMark Rutland #define __CLKSOURCE_ARM_ARCH_TIMER_H
188a4da6e3SMark Rutland 
198a4da6e3SMark Rutland #include <linux/clocksource.h>
208a4da6e3SMark Rutland #include <linux/types.h>
218a4da6e3SMark Rutland 
228a4da6e3SMark Rutland #define ARCH_TIMER_CTRL_ENABLE		(1 << 0)
238a4da6e3SMark Rutland #define ARCH_TIMER_CTRL_IT_MASK		(1 << 1)
248a4da6e3SMark Rutland #define ARCH_TIMER_CTRL_IT_STAT		(1 << 2)
258a4da6e3SMark Rutland 
26e09f3cc0SStephen Boyd enum arch_timer_reg {
27e09f3cc0SStephen Boyd 	ARCH_TIMER_REG_CTRL,
28e09f3cc0SStephen Boyd 	ARCH_TIMER_REG_TVAL,
29e09f3cc0SStephen Boyd };
308a4da6e3SMark Rutland 
318a4da6e3SMark Rutland #define ARCH_TIMER_PHYS_ACCESS		0
328a4da6e3SMark Rutland #define ARCH_TIMER_VIRT_ACCESS		1
338a4da6e3SMark Rutland 
348a4da6e3SMark Rutland #ifdef CONFIG_ARM_ARCH_TIMER
358a4da6e3SMark Rutland 
368a4da6e3SMark Rutland extern u32 arch_timer_get_rate(void);
370d651e4eSMark Rutland extern u64 arch_timer_read_counter(void);
388a4da6e3SMark Rutland extern struct timecounter *arch_timer_get_timecounter(void);
398a4da6e3SMark Rutland 
408a4da6e3SMark Rutland #else
418a4da6e3SMark Rutland 
428a4da6e3SMark Rutland static inline u32 arch_timer_get_rate(void)
438a4da6e3SMark Rutland {
448a4da6e3SMark Rutland 	return 0;
458a4da6e3SMark Rutland }
468a4da6e3SMark Rutland 
478a4da6e3SMark Rutland static inline u64 arch_timer_read_counter(void)
488a4da6e3SMark Rutland {
498a4da6e3SMark Rutland 	return 0;
508a4da6e3SMark Rutland }
518a4da6e3SMark Rutland 
520582b053SOlof Johansson static inline struct timecounter *arch_timer_get_timecounter(void)
538a4da6e3SMark Rutland {
548a4da6e3SMark Rutland 	return NULL;
558a4da6e3SMark Rutland }
568a4da6e3SMark Rutland 
578a4da6e3SMark Rutland #endif
588a4da6e3SMark Rutland 
598a4da6e3SMark Rutland #endif
60