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 30extern unsigned long ccount_freq; 31 32typedef unsigned long long cycles_t; 33 34#define get_cycles() (0) 35 36void local_timer_setup(unsigned cpu); 37 38/* 39 * Register access. 40 */ 41 42static inline unsigned long get_ccount (void) 43{ 44 return xtensa_get_sr(ccount); 45} 46 47static inline void set_ccount (unsigned long ccount) 48{ 49 xtensa_set_sr(ccount, ccount); 50} 51 52static inline unsigned long get_linux_timer (void) 53{ 54 return xtensa_get_sr(SREG_CCOMPARE + LINUX_TIMER); 55} 56 57static inline void set_linux_timer (unsigned long ccompare) 58{ 59 xtensa_set_sr(ccompare, SREG_CCOMPARE + LINUX_TIMER); 60} 61 62#endif /* _XTENSA_TIMEX_H */ 63