1 /* 2 * Copyright (C) 2021 Intel Corporation. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 #ifndef ARCH_X86_TSC_H 8 #define ARCH_X86_TSC_H 9 10 #include <types.h> 11 12 #define TSC_PER_MS ((uint64_t)get_tsc_khz()) 13 14 /** 15 * @brief Read Time Stamp Counter (TSC). 16 * 17 * @return TSC value 18 */ rdtsc(void)19static inline uint64_t rdtsc(void) 20 { 21 uint32_t lo, hi; 22 23 asm volatile("rdtsc" : "=a" (lo), "=d" (hi)); 24 return ((uint64_t)hi << 32U) | lo; 25 } 26 27 /** 28 * @brief Get Time Stamp Counter (TSC) frequency in KHz. 29 * 30 * @return TSC frequency in KHz 31 */ 32 uint32_t get_tsc_khz(void); 33 34 /** 35 * @brief Calibrate Time Stamp Counter (TSC) frequency. 36 * 37 * @remark Generic time related routines, e.g., cpu_tickrate(), us_to_ticks(), 38 * udelay(), etc., relies on this function being called earlier during system initialization. 39 */ 40 void calibrate_tsc(void); 41 42 /** 43 * @brief Initialize HPET. 44 */ 45 void hpet_init(void); 46 47 #endif /* ARCH_X86_TSC_H */ 48