2007-03-06 01:42:05 -08:00
/*
2007-10-12 23:04:23 +02:00
* x86 TSC related functions
2007-03-06 01:42:05 -08:00
*/
2008-10-22 22:26:29 -07:00
# ifndef _ASM_X86_TSC_H
# define _ASM_X86_TSC_H
2007-03-06 01:42:05 -08:00
# include <asm/processor.h>
2007-10-12 23:04:23 +02:00
# define NS_SCALE 10 /* 2^10, carefully chosen */
# define US_SCALE 32 /* 2^32, arbitralrily chosen */
2007-03-06 01:42:05 -08: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 13:31:26 +01:00
extern void disable_TSC ( void ) ;
2007-03-06 01:42:05 -08:00
static inline cycles_t get_cycles ( void )
{
# ifndef CONFIG_X86_TSC
2016-04-04 22:24:59 +02:00
if ( ! boot_cpu_has ( X86_FEATURE_TSC ) )
2007-03-06 01:42:05 -08:00
return 0 ;
# endif
2015-06-25 18:44:07 +02:00
return rdtsc ( ) ;
2008-01-30 13:32:39 +01:00
}
2008-01-30 13:31:03 +01:00
2016-02-29 06:33:47 -08:00
extern struct system_counterval_t convert_art_to_tsc ( cycle_t art ) ;
2007-03-06 01:42:05 -08:00
extern void tsc_init ( void ) ;
2007-05-02 19:27:08 +02:00
extern void mark_tsc_unstable ( char * reason ) ;
2007-03-06 01:42:05 -08:00
extern int unsynchronized_tsc ( void ) ;
2009-08-20 17:06:25 +02:00
extern int check_tsc_unstable ( void ) ;
2016-06-17 01:22:51 -04:00
extern unsigned long native_calibrate_cpu ( void ) ;
2009-08-20 17:06:25 +02:00
extern unsigned long native_calibrate_tsc ( void ) ;
2015-05-10 12:22:39 -07:00
extern unsigned long long native_sched_clock_from_tsc ( u64 tsc ) ;
2007-03-06 01:42:05 -08:00
2011-11-04 15:42:17 -07:00
extern int tsc_clocksource_reliable ;
2007-03-06 01:42:05 -08: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 13:30:18 +01:00
extern int notsc_setup ( char * ) ;
2012-02-13 11:07:27 -02:00
extern void tsc_save_sched_clock_state ( void ) ;
extern void tsc_restore_sched_clock_state ( void ) ;
2007-10-12 23:04:06 +02:00
2016-06-17 01:22:50 -04:00
unsigned long cpu_khz_from_msr ( void ) ;
2013-10-21 09:16:33 -07:00
2008-10-22 22:26:29 -07:00
# endif /* _ASM_X86_TSC_H */