1361c99a6SArnaldo Carvalho de Melo #ifndef __PERF_EVLIST_H 2361c99a6SArnaldo Carvalho de Melo #define __PERF_EVLIST_H 1 3361c99a6SArnaldo Carvalho de Melo 4361c99a6SArnaldo Carvalho de Melo #include <linux/list.h> 550d08e47SArnaldo Carvalho de Melo #include <stdio.h> 670db7533SArnaldo Carvalho de Melo #include "../perf.h" 704391debSArnaldo Carvalho de Melo #include "event.h" 850d08e47SArnaldo Carvalho de Melo #include "util.h" 9361c99a6SArnaldo Carvalho de Melo 105c581041SArnaldo Carvalho de Melo struct pollfd; 11f8a95309SArnaldo Carvalho de Melo struct thread_map; 12f8a95309SArnaldo Carvalho de Melo struct cpu_map; 135c581041SArnaldo Carvalho de Melo 1470db7533SArnaldo Carvalho de Melo #define PERF_EVLIST__HLIST_BITS 8 1570db7533SArnaldo Carvalho de Melo #define PERF_EVLIST__HLIST_SIZE (1 << PERF_EVLIST__HLIST_BITS) 1670db7533SArnaldo Carvalho de Melo 17361c99a6SArnaldo Carvalho de Melo struct perf_evlist { 18361c99a6SArnaldo Carvalho de Melo struct list_head entries; 1970db7533SArnaldo Carvalho de Melo struct hlist_head heads[PERF_EVLIST__HLIST_SIZE]; 20361c99a6SArnaldo Carvalho de Melo int nr_entries; 215c581041SArnaldo Carvalho de Melo int nr_fds; 22aece948fSArnaldo Carvalho de Melo int nr_mmaps; 2370db7533SArnaldo Carvalho de Melo int mmap_len; 247bb41152SArnaldo Carvalho de Melo bool overwrite; 258115d60cSArnaldo Carvalho de Melo union perf_event event_copy; 2670db7533SArnaldo Carvalho de Melo struct perf_mmap *mmap; 275c581041SArnaldo Carvalho de Melo struct pollfd *pollfd; 287e2ed097SArnaldo Carvalho de Melo struct thread_map *threads; 297e2ed097SArnaldo Carvalho de Melo struct cpu_map *cpus; 3081cce8deSArnaldo Carvalho de Melo struct perf_evsel *selected; 31361c99a6SArnaldo Carvalho de Melo }; 32361c99a6SArnaldo Carvalho de Melo 33361c99a6SArnaldo Carvalho de Melo struct perf_evsel; 34361c99a6SArnaldo Carvalho de Melo 357e2ed097SArnaldo Carvalho de Melo struct perf_evlist *perf_evlist__new(struct cpu_map *cpus, 367e2ed097SArnaldo Carvalho de Melo struct thread_map *threads); 377e2ed097SArnaldo Carvalho de Melo void perf_evlist__init(struct perf_evlist *evlist, struct cpu_map *cpus, 387e2ed097SArnaldo Carvalho de Melo struct thread_map *threads); 39ef1d1af2SArnaldo Carvalho de Melo void perf_evlist__exit(struct perf_evlist *evlist); 40361c99a6SArnaldo Carvalho de Melo void perf_evlist__delete(struct perf_evlist *evlist); 41361c99a6SArnaldo Carvalho de Melo 42361c99a6SArnaldo Carvalho de Melo void perf_evlist__add(struct perf_evlist *evlist, struct perf_evsel *entry); 43361c99a6SArnaldo Carvalho de Melo int perf_evlist__add_default(struct perf_evlist *evlist); 4450d08e47SArnaldo Carvalho de Melo int perf_evlist__add_attrs(struct perf_evlist *evlist, 4550d08e47SArnaldo Carvalho de Melo struct perf_event_attr *attrs, size_t nr_attrs); 4650d08e47SArnaldo Carvalho de Melo 4750d08e47SArnaldo Carvalho de Melo #define perf_evlist__add_attrs_array(evlist, array) \ 4850d08e47SArnaldo Carvalho de Melo perf_evlist__add_attrs(evlist, array, ARRAY_SIZE(array)) 49361c99a6SArnaldo Carvalho de Melo 50a91e5431SArnaldo Carvalho de Melo void perf_evlist__id_add(struct perf_evlist *evlist, struct perf_evsel *evsel, 513d3b5e95SArnaldo Carvalho de Melo int cpu, int thread, u64 id); 523d3b5e95SArnaldo Carvalho de Melo 537e2ed097SArnaldo Carvalho de Melo int perf_evlist__alloc_pollfd(struct perf_evlist *evlist); 5470082dd9SArnaldo Carvalho de Melo void perf_evlist__add_pollfd(struct perf_evlist *evlist, int fd); 555c581041SArnaldo Carvalho de Melo 5670db7533SArnaldo Carvalho de Melo struct perf_evsel *perf_evlist__id2evsel(struct perf_evlist *evlist, u64 id); 5770db7533SArnaldo Carvalho de Melo 58aece948fSArnaldo Carvalho de Melo union perf_event *perf_evlist__mmap_read(struct perf_evlist *self, int idx); 5904391debSArnaldo Carvalho de Melo 60727ab04eSArnaldo Carvalho de Melo int perf_evlist__open(struct perf_evlist *evlist, bool group); 61727ab04eSArnaldo Carvalho de Melo 627e2ed097SArnaldo Carvalho de Melo int perf_evlist__alloc_mmap(struct perf_evlist *evlist); 637e2ed097SArnaldo Carvalho de Melo int perf_evlist__mmap(struct perf_evlist *evlist, int pages, bool overwrite); 647e2ed097SArnaldo Carvalho de Melo void perf_evlist__munmap(struct perf_evlist *evlist); 657e2ed097SArnaldo Carvalho de Melo 664152ab37SArnaldo Carvalho de Melo void perf_evlist__disable(struct perf_evlist *evlist); 67764e16a3SDavid Ahern void perf_evlist__enable(struct perf_evlist *evlist); 684152ab37SArnaldo Carvalho de Melo 6981cce8deSArnaldo Carvalho de Melo void perf_evlist__set_selected(struct perf_evlist *evlist, 7081cce8deSArnaldo Carvalho de Melo struct perf_evsel *evsel); 7181cce8deSArnaldo Carvalho de Melo 727e2ed097SArnaldo Carvalho de Melo static inline void perf_evlist__set_maps(struct perf_evlist *evlist, 737e2ed097SArnaldo Carvalho de Melo struct cpu_map *cpus, 747e2ed097SArnaldo Carvalho de Melo struct thread_map *threads) 757e2ed097SArnaldo Carvalho de Melo { 767e2ed097SArnaldo Carvalho de Melo evlist->cpus = cpus; 777e2ed097SArnaldo Carvalho de Melo evlist->threads = threads; 787e2ed097SArnaldo Carvalho de Melo } 797e2ed097SArnaldo Carvalho de Melo 807e2ed097SArnaldo Carvalho de Melo int perf_evlist__create_maps(struct perf_evlist *evlist, pid_t target_pid, 817e2ed097SArnaldo Carvalho de Melo pid_t target_tid, const char *cpu_list); 827e2ed097SArnaldo Carvalho de Melo void perf_evlist__delete_maps(struct perf_evlist *evlist); 830a102479SFrederic Weisbecker int perf_evlist__set_filters(struct perf_evlist *evlist); 84f8a95309SArnaldo Carvalho de Melo 85c2a70653SArnaldo Carvalho de Melo u64 perf_evlist__sample_type(const struct perf_evlist *evlist); 86c2a70653SArnaldo Carvalho de Melo bool perf_evlist__sample_id_all(const const struct perf_evlist *evlist); 8774429964SFrederic Weisbecker 88c2a70653SArnaldo Carvalho de Melo bool perf_evlist__valid_sample_type(const struct perf_evlist *evlist); 89c2a70653SArnaldo Carvalho de Melo bool perf_evlist__valid_sample_id_all(const struct perf_evlist *evlist); 90361c99a6SArnaldo Carvalho de Melo #endif /* __PERF_EVLIST_H */ 91