2007-03-06 12:42:05 +03:00
/*
2007-10-13 01:04:23 +04:00
* x86 TSC related functions
2007-03-06 12:42:05 +03:00
*/
2008-10-23 09:26:29 +04:00
# ifndef _ASM_X86_TSC_H
# define _ASM_X86_TSC_H
2007-03-06 12:42:05 +03:00
# include <asm/processor.h>
2007-10-13 01:04:23 +04:00
# define NS_SCALE 10 /* 2^10, carefully chosen */
# define US_SCALE 32 /* 2^32, arbitralrily chosen */
2007-03-06 12:42:05 +03:00
/*
* Standard way to access the cycle counter .
*/
typedef unsigned long long cycles_t ;
extern unsigned int cpu_khz ;
extern unsigned int tsc_khz ;
2008-01-30 15:31:26 +03:00
extern void disable_TSC ( void ) ;
2007-03-06 12:42:05 +03:00
static inline cycles_t get_cycles ( void )
{
unsigned long long ret = 0 ;
# ifndef CONFIG_X86_TSC
if ( ! cpu_has_tsc )
return 0 ;
# endif
rdtscll ( ret ) ;
2008-01-30 15:33:24 +03:00
2007-03-06 12:42:05 +03:00
return ret ;
}
2008-04-27 03:39:36 +04:00
static __always_inline cycles_t vget_cycles ( void )
2007-03-06 12:42:05 +03:00
{
2007-05-02 21:27:21 +04:00
/*
2008-01-30 15:32:39 +03:00
* We only do VDSOs on TSC capable CPUs , so this shouldnt
* access boot_cpu_data ( which is not VDSO - safe ) :
2007-05-02 21:27:21 +04:00
*/
2008-01-30 15:32:39 +03:00
# ifndef CONFIG_X86_TSC
if ( ! cpu_has_tsc )
return 0 ;
2008-01-30 15:31:03 +03:00
# endif
2008-11-08 22:27:00 +03:00
return ( cycles_t ) __native_read_tsc ( ) ;
2008-01-30 15:32:39 +03:00
}
2008-01-30 15:31:03 +03:00
2007-03-06 12:42:05 +03:00
extern void tsc_init ( void ) ;
2007-05-02 21:27:08 +04:00
extern void mark_tsc_unstable ( char * reason ) ;
2007-03-06 12:42:05 +03:00
extern int unsynchronized_tsc ( void ) ;
2009-08-20 19:06:25 +04:00
extern int check_tsc_unstable ( void ) ;
extern unsigned long native_calibrate_tsc ( void ) ;
2007-03-06 12:42:05 +03:00
/*
* Boot - time check whether the TSCs are synchronized across
* all CPUs / cores :
*/
extern void check_tsc_sync_source ( int cpu ) ;
extern void check_tsc_sync_target ( void ) ;
2008-01-30 15:30:18 +03:00
extern int notsc_setup ( char * ) ;
2007-10-13 01:04:06 +04:00
2008-10-23 09:26:29 +04:00
# endif /* _ASM_X86_TSC_H */