1/* SPDX-License-Identifier: GPL-2.0-only */
2/*
3 * Copyright 2013, Michael Ellerman, IBM Corp.
4 */
5
6#ifndef _SELFTESTS_POWERPC_PMU_EVENT_H
7#define _SELFTESTS_POWERPC_PMU_EVENT_H
8
9#include <unistd.h>
10#include <linux/perf_event.h>
11
12#include "utils.h"
13
14
15struct event {
16	struct perf_event_attr attr;
17	char *name;
18	int fd;
19	/* This must match the read_format we use */
20	struct {
21		u64 value;
22		u64 running;
23		u64 enabled;
24	} result;
25	/*
26	 * mmap buffer used while recording sample.
27	 * Accessed as "struct perf_event_mmap_page"
28	 */
29	void *mmap_buffer;
30};
31
32void event_init(struct event *e, u64 config);
33void event_init_named(struct event *e, u64 config, char *name);
34void event_init_opts(struct event *e, u64 config, int type, char *name);
35void event_init_sampling(struct event *e, u64 config);
36int event_open_with_options(struct event *e, pid_t pid, int cpu, int group_fd);
37int event_open_with_group(struct event *e, int group_fd);
38int event_open_with_pid(struct event *e, pid_t pid);
39int event_open_with_cpu(struct event *e, int cpu);
40int event_open(struct event *e);
41void event_close(struct event *e);
42int event_enable(struct event *e);
43int event_disable(struct event *e);
44int event_reset(struct event *e);
45int event_read(struct event *e);
46void event_report_justified(struct event *e, int name_width, int result_width);
47void event_report(struct event *e);
48
49#endif /* _SELFTESTS_POWERPC_PMU_EVENT_H */
50