162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci#ifndef _ASM_X86_INTEL_PT_H
362306a36Sopenharmony_ci#define _ASM_X86_INTEL_PT_H
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#define PT_CPUID_LEAVES		2
662306a36Sopenharmony_ci#define PT_CPUID_REGS_NUM	4 /* number of registers (eax, ebx, ecx, edx) */
762306a36Sopenharmony_ci
862306a36Sopenharmony_cienum pt_capabilities {
962306a36Sopenharmony_ci	PT_CAP_max_subleaf = 0,
1062306a36Sopenharmony_ci	PT_CAP_cr3_filtering,
1162306a36Sopenharmony_ci	PT_CAP_psb_cyc,
1262306a36Sopenharmony_ci	PT_CAP_ip_filtering,
1362306a36Sopenharmony_ci	PT_CAP_mtc,
1462306a36Sopenharmony_ci	PT_CAP_ptwrite,
1562306a36Sopenharmony_ci	PT_CAP_power_event_trace,
1662306a36Sopenharmony_ci	PT_CAP_event_trace,
1762306a36Sopenharmony_ci	PT_CAP_tnt_disable,
1862306a36Sopenharmony_ci	PT_CAP_topa_output,
1962306a36Sopenharmony_ci	PT_CAP_topa_multiple_entries,
2062306a36Sopenharmony_ci	PT_CAP_single_range_output,
2162306a36Sopenharmony_ci	PT_CAP_output_subsys,
2262306a36Sopenharmony_ci	PT_CAP_payloads_lip,
2362306a36Sopenharmony_ci	PT_CAP_num_address_ranges,
2462306a36Sopenharmony_ci	PT_CAP_mtc_periods,
2562306a36Sopenharmony_ci	PT_CAP_cycle_thresholds,
2662306a36Sopenharmony_ci	PT_CAP_psb_periods,
2762306a36Sopenharmony_ci};
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci#if defined(CONFIG_PERF_EVENTS) && defined(CONFIG_CPU_SUP_INTEL)
3062306a36Sopenharmony_civoid cpu_emergency_stop_pt(void);
3162306a36Sopenharmony_ciextern u32 intel_pt_validate_hw_cap(enum pt_capabilities cap);
3262306a36Sopenharmony_ciextern u32 intel_pt_validate_cap(u32 *caps, enum pt_capabilities cap);
3362306a36Sopenharmony_ciextern int is_intel_pt_event(struct perf_event *event);
3462306a36Sopenharmony_ci#else
3562306a36Sopenharmony_cistatic inline void cpu_emergency_stop_pt(void) {}
3662306a36Sopenharmony_cistatic inline u32 intel_pt_validate_hw_cap(enum pt_capabilities cap) { return 0; }
3762306a36Sopenharmony_cistatic inline u32 intel_pt_validate_cap(u32 *caps, enum pt_capabilities capability) { return 0; }
3862306a36Sopenharmony_cistatic inline int is_intel_pt_event(struct perf_event *event) { return 0; }
3962306a36Sopenharmony_ci#endif
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ci#endif /* _ASM_X86_INTEL_PT_H */
42