162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#ifndef __ARCH_X86_EVENTS_PROBE_H__ 362306a36Sopenharmony_ci#define __ARCH_X86_EVENTS_PROBE_H__ 462306a36Sopenharmony_ci#include <linux/sysfs.h> 562306a36Sopenharmony_ci 662306a36Sopenharmony_cistruct perf_msr { 762306a36Sopenharmony_ci u64 msr; 862306a36Sopenharmony_ci struct attribute_group *grp; 962306a36Sopenharmony_ci bool (*test)(int idx, void *data); 1062306a36Sopenharmony_ci bool no_check; 1162306a36Sopenharmony_ci u64 mask; 1262306a36Sopenharmony_ci}; 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ciunsigned long 1562306a36Sopenharmony_ciperf_msr_probe(struct perf_msr *msr, int cnt, bool no_zero, void *data); 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci#define __PMU_EVENT_GROUP(_name) \ 1862306a36Sopenharmony_cistatic struct attribute *attrs_##_name[] = { \ 1962306a36Sopenharmony_ci &attr_##_name.attr.attr, \ 2062306a36Sopenharmony_ci NULL, \ 2162306a36Sopenharmony_ci} 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci#define PMU_EVENT_GROUP(_grp, _name) \ 2462306a36Sopenharmony_ci__PMU_EVENT_GROUP(_name); \ 2562306a36Sopenharmony_cistatic struct attribute_group group_##_name = { \ 2662306a36Sopenharmony_ci .name = #_grp, \ 2762306a36Sopenharmony_ci .attrs = attrs_##_name, \ 2862306a36Sopenharmony_ci} 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci#endif /* __ARCH_X86_EVENTS_PROBE_H__ */ 31