#ifndef CPU_X86_TSC_H #define CPU_X86_TSC_H #if CONFIG_TSC_SYNC_MFENCE #define TSC_SYNC "mfence\n" #elif CONFIG_TSC_SYNC_LFENCE #define TSC_SYNC "lfence\n" #else #define TSC_SYNC #endif struct tsc_struct { unsigned lo; unsigned hi; }; typedef struct tsc_struct tsc_t; static inline tsc_t rdtsc(void) { tsc_t res; asm volatile ( TSC_SYNC "rdtsc" : "=a" (res.lo), "=d"(res.hi) /* outputs */ ); return res; } #if !defined(__ROMCC__) /* Too many registers for ROMCC */ static inline unsigned long long rdtscll(void) { unsigned long long val; asm volatile ( TSC_SYNC "rdtsc" : "=A" (val) ); return val; } #endif #if CONFIG_TSC_CONSTANT_RATE unsigned long tsc_freq_mhz(void); #endif #endif /* CPU_X86_TSC_H */