1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 20b437860SAdrian Hunter #ifndef __PERF_TSC_H 30b437860SAdrian Hunter #define __PERF_TSC_H 40b437860SAdrian Hunter 50b437860SAdrian Hunter #include <linux/types.h> 60b437860SAdrian Hunter 781e70d7eSLeo Yan #include "event.h" 881e70d7eSLeo Yan 92a28e230SAdrian Hunter struct perf_tsc_conversion { 102a28e230SAdrian Hunter u16 time_shift; 112a28e230SAdrian Hunter u32 time_mult; 122a28e230SAdrian Hunter u64 time_zero; 1378a93d4cSLeo Yan u64 time_cycles; 1478a93d4cSLeo Yan u64 time_mask; 1578a93d4cSLeo Yan 1678a93d4cSLeo Yan bool cap_user_time_zero; 1778a93d4cSLeo Yan bool cap_user_time_short; 182a28e230SAdrian Hunter }; 19ea49e01cSArnaldo Carvalho de Melo 202a28e230SAdrian Hunter struct perf_event_mmap_page; 212a28e230SAdrian Hunter 222a28e230SAdrian Hunter int perf_read_tsc_conversion(const struct perf_event_mmap_page *pc, 232a28e230SAdrian Hunter struct perf_tsc_conversion *tc); 240b437860SAdrian Hunter 250b437860SAdrian Hunter u64 perf_time_to_tsc(u64 ns, struct perf_tsc_conversion *tc); 260b437860SAdrian Hunter u64 tsc_to_perf_time(u64 cyc, struct perf_tsc_conversion *tc); 27a6a69db4SAdrian Hunter u64 rdtsc(void); 28*bc2373a5SKan Liang double arch_get_tsc_freq(void); 290b437860SAdrian Hunter 3081e70d7eSLeo Yan size_t perf_event__fprintf_time_conv(union perf_event *event, FILE *fp); 3181e70d7eSLeo Yan 32ea49e01cSArnaldo Carvalho de Melo #endif // __PERF_TSC_H 33