/*
 * Copyright 2013, Michael Ellerman, IBM Corp.
 * Licensed under GPLv2.
 */

#ifndef _SELFTESTS_POWERPC_PMU_EVENT_H
#define _SELFTESTS_POWERPC_PMU_EVENT_H

#include <unistd.h>
#include <linux/perf_event.h>

#include "utils.h"


struct event {
	struct perf_event_attr attr;
	char *name;
	int fd;
	/* This must match the read_format we use */
	struct {
		u64 value;
		u64 running;
		u64 enabled;
	} result;
};

void event_init(struct event *e, u64 config);
void event_init_named(struct event *e, u64 config, char *name);
void event_init_opts(struct event *e, u64 config, int type, char *name);
int event_open_with_options(struct event *e, pid_t pid, int cpu, int group_fd);
int event_open_with_group(struct event *e, int group_fd);
int event_open(struct event *e);
void event_close(struct event *e);
int event_reset(struct event *e);
int event_read(struct event *e);
void event_report_justified(struct event *e, int name_width, int result_width);
void event_report(struct event *e);

#endif /* _SELFTESTS_POWERPC_PMU_EVENT_H */
