linux/arch/x86/include/asm/tsc.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2/*
   3 * x86 TSC related functions
   4 */
   5#ifndef _ASM_X86_TSC_H
   6#define _ASM_X86_TSC_H
   7
   8#include <asm/processor.h>
   9#include <asm/cpufeature.h>
  10
  11/*
  12 * Standard way to access the cycle counter.
  13 */
  14typedef unsigned long long cycles_t;
  15
  16extern unsigned int cpu_khz;
  17extern unsigned int tsc_khz;
  18
  19extern void disable_TSC(void);
  20
  21static inline cycles_t get_cycles(void)
  22{
  23#ifndef CONFIG_X86_TSC
  24        if (!boot_cpu_has(X86_FEATURE_TSC))
  25                return 0;
  26#endif
  27
  28        return rdtsc();
  29}
  30
  31extern struct system_counterval_t convert_art_to_tsc(u64 art);
  32extern struct system_counterval_t convert_art_ns_to_tsc(u64 art_ns);
  33
  34extern void tsc_early_init(void);
  35extern void tsc_init(void);
  36extern unsigned long calibrate_delay_is_known(void);
  37extern void mark_tsc_unstable(char *reason);
  38extern int unsynchronized_tsc(void);
  39extern int check_tsc_unstable(void);
  40extern void mark_tsc_async_resets(char *reason);
  41extern unsigned long native_calibrate_cpu_early(void);
  42extern unsigned long native_calibrate_tsc(void);
  43extern unsigned long long native_sched_clock_from_tsc(u64 tsc);
  44
  45extern int tsc_clocksource_reliable;
  46#ifdef CONFIG_X86_TSC
  47extern bool tsc_async_resets;
  48#else
  49# define tsc_async_resets       false
  50#endif
  51
  52/*
  53 * Boot-time check whether the TSCs are synchronized across
  54 * all CPUs/cores:
  55 */
  56#ifdef CONFIG_X86_TSC
  57extern bool tsc_store_and_check_tsc_adjust(bool bootcpu);
  58extern void tsc_verify_tsc_adjust(bool resume);
  59extern void check_tsc_sync_source(int cpu);
  60extern void check_tsc_sync_target(void);
  61#else
  62static inline bool tsc_store_and_check_tsc_adjust(bool bootcpu) { return false; }
  63static inline void tsc_verify_tsc_adjust(bool resume) { }
  64static inline void check_tsc_sync_source(int cpu) { }
  65static inline void check_tsc_sync_target(void) { }
  66#endif
  67
  68extern int notsc_setup(char *);
  69extern void tsc_save_sched_clock_state(void);
  70extern void tsc_restore_sched_clock_state(void);
  71
  72unsigned long cpu_khz_from_msr(void);
  73
  74#endif /* _ASM_X86_TSC_H */
  75