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)19 static 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