18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci#ifndef __ARCH_X86_EVENTS_PROBE_H__ 38c2ecf20Sopenharmony_ci#define __ARCH_X86_EVENTS_PROBE_H__ 48c2ecf20Sopenharmony_ci#include <linux/sysfs.h> 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_cistruct perf_msr { 78c2ecf20Sopenharmony_ci u64 msr; 88c2ecf20Sopenharmony_ci struct attribute_group *grp; 98c2ecf20Sopenharmony_ci bool (*test)(int idx, void *data); 108c2ecf20Sopenharmony_ci bool no_check; 118c2ecf20Sopenharmony_ci}; 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_ciunsigned long 148c2ecf20Sopenharmony_ciperf_msr_probe(struct perf_msr *msr, int cnt, bool no_zero, void *data); 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_ci#define __PMU_EVENT_GROUP(_name) \ 178c2ecf20Sopenharmony_cistatic struct attribute *attrs_##_name[] = { \ 188c2ecf20Sopenharmony_ci &attr_##_name.attr.attr, \ 198c2ecf20Sopenharmony_ci NULL, \ 208c2ecf20Sopenharmony_ci} 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_ci#define PMU_EVENT_GROUP(_grp, _name) \ 238c2ecf20Sopenharmony_ci__PMU_EVENT_GROUP(_name); \ 248c2ecf20Sopenharmony_cistatic struct attribute_group group_##_name = { \ 258c2ecf20Sopenharmony_ci .name = #_grp, \ 268c2ecf20Sopenharmony_ci .attrs = attrs_##_name, \ 278c2ecf20Sopenharmony_ci} 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ci#endif /* __ARCH_X86_EVENTS_PROBE_H__ */ 30