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