1 /* 2 * This file is subject to the terms and conditions of the GNU General Public 3 * License. See the file "COPYING" in the main directory of this archive 4 * for more details. 5 * 6 * Copyright (C) 2001 - 2013 Tensilica Inc. 7 */ 8 9 #ifndef _XTENSA_TIMEX_H 10 #define _XTENSA_TIMEX_H 11 12 #include <asm/processor.h> 13 14 #if XCHAL_NUM_TIMERS > 0 && \ 15 XTENSA_INT_LEVEL(XCHAL_TIMER0_INTERRUPT) <= XCHAL_EXCM_LEVEL 16 # define LINUX_TIMER 0 17 # define LINUX_TIMER_INT XCHAL_TIMER0_INTERRUPT 18 #elif XCHAL_NUM_TIMERS > 1 && \ 19 XTENSA_INT_LEVEL(XCHAL_TIMER1_INTERRUPT) <= XCHAL_EXCM_LEVEL 20 # define LINUX_TIMER 1 21 # define LINUX_TIMER_INT XCHAL_TIMER1_INTERRUPT 22 #elif XCHAL_NUM_TIMERS > 2 && \ 23 XTENSA_INT_LEVEL(XCHAL_TIMER2_INTERRUPT) <= XCHAL_EXCM_LEVEL 24 # define LINUX_TIMER 2 25 # define LINUX_TIMER_INT XCHAL_TIMER2_INTERRUPT 26 #else 27 # error "Bad timer number for Linux configurations!" 28 #endif 29 30 extern unsigned long ccount_freq; 31 32 void local_timer_setup(unsigned cpu); 33 34 /* 35 * Register access. 36 */ 37 38 static inline unsigned long get_ccount (void) 39 { 40 return xtensa_get_sr(ccount); 41 } 42 43 static inline void set_ccount (unsigned long ccount) 44 { 45 xtensa_set_sr(ccount, ccount); 46 } 47 48 static inline unsigned long get_linux_timer (void) 49 { 50 return xtensa_get_sr(SREG_CCOMPARE + LINUX_TIMER); 51 } 52 53 static inline void set_linux_timer (unsigned long ccompare) 54 { 55 xtensa_set_sr(ccompare, SREG_CCOMPARE + LINUX_TIMER); 56 } 57 58 #include <asm-generic/timex.h> 59 60 #endif /* _XTENSA_TIMEX_H */ 61