1e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#ifndef __PERF_EVLIST_H
2e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define __PERF_EVLIST_H 1
3e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
4e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/* ANDROID_CHANGE_BEGIN */
5e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#if 0
6e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include <linux/list.h>
7e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#else
8e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "include/linux/list.h"
9e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#endif
10e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/* ANDROID_CHANGE_END */
11e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "../perf.h"
12e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "event.h"
13e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
14e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct pollfd;
15e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct thread_map;
16e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct cpu_map;
17e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
18e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define PERF_EVLIST__HLIST_BITS 8
19e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define PERF_EVLIST__HLIST_SIZE (1 << PERF_EVLIST__HLIST_BITS)
20e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
21e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct perf_evlist {
22e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	struct list_head entries;
23e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	struct hlist_head heads[PERF_EVLIST__HLIST_SIZE];
24e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	int		 nr_entries;
25e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	int		 nr_fds;
26e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	int		 nr_mmaps;
27e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	int		 mmap_len;
28e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	bool		 overwrite;
29e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	union perf_event event_copy;
30e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	struct perf_mmap *mmap;
31e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	struct pollfd	 *pollfd;
32e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	struct thread_map *threads;
33e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	struct cpu_map	  *cpus;
34e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng};
35e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
36e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct perf_evsel;
37e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
38e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct perf_evlist *perf_evlist__new(struct cpu_map *cpus,
39e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng				     struct thread_map *threads);
40e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid perf_evlist__init(struct perf_evlist *evlist, struct cpu_map *cpus,
41e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		       struct thread_map *threads);
42e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid perf_evlist__exit(struct perf_evlist *evlist);
43e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid perf_evlist__delete(struct perf_evlist *evlist);
44e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
45e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid perf_evlist__add(struct perf_evlist *evlist, struct perf_evsel *entry);
46e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengint perf_evlist__add_default(struct perf_evlist *evlist);
47e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
48e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid perf_evlist__id_add(struct perf_evlist *evlist, struct perf_evsel *evsel,
49e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			 int cpu, int thread, u64 id);
50e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
51e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengint perf_evlist__alloc_pollfd(struct perf_evlist *evlist);
52e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid perf_evlist__add_pollfd(struct perf_evlist *evlist, int fd);
53e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
54e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct perf_evsel *perf_evlist__id2evsel(struct perf_evlist *evlist, u64 id);
55e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
56e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengunion perf_event *perf_evlist__mmap_read(struct perf_evlist *self, int idx);
57e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
58e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengint perf_evlist__alloc_mmap(struct perf_evlist *evlist);
59e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengint perf_evlist__mmap(struct perf_evlist *evlist, int pages, bool overwrite);
60e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid perf_evlist__munmap(struct perf_evlist *evlist);
61e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
62e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline void perf_evlist__set_maps(struct perf_evlist *evlist,
63e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng					 struct cpu_map *cpus,
64e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng					 struct thread_map *threads)
65e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
66e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	evlist->cpus	= cpus;
67e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	evlist->threads	= threads;
68e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
69e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
70e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengint perf_evlist__create_maps(struct perf_evlist *evlist, pid_t target_pid,
71e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			     pid_t target_tid, const char *cpu_list);
72e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid perf_evlist__delete_maps(struct perf_evlist *evlist);
73e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengint perf_evlist__set_filters(struct perf_evlist *evlist);
74e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
75e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengu64 perf_evlist__sample_type(const struct perf_evlist *evlist);
76e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengbool perf_evlist__sample_id_all(const const struct perf_evlist *evlist);
77e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
78e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengbool perf_evlist__valid_sample_type(const struct perf_evlist *evlist);
79e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengbool perf_evlist__valid_sample_id_all(const struct perf_evlist *evlist);
80e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#endif /* __PERF_EVLIST_H */
81