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