116958497SArnaldo Carvalho de Melo #ifndef __PERF_MMAP_H 216958497SArnaldo Carvalho de Melo #define __PERF_MMAP_H 1 316958497SArnaldo Carvalho de Melo 4547740f7SJiri Olsa #include <internal/mmap.h> 516958497SArnaldo Carvalho de Melo #include <linux/compiler.h> 616958497SArnaldo Carvalho de Melo #include <linux/refcount.h> 716958497SArnaldo Carvalho de Melo #include <linux/types.h> 809d62154SDaniel Borkmann #include <linux/ring_buffer.h> 916958497SArnaldo Carvalho de Melo #include <stdbool.h> 10f2a39fe8SArnaldo Carvalho de Melo #include <pthread.h> // for cpu_set_t 110b773831SAlexey Budankov #ifdef HAVE_AIO_SUPPORT 120b773831SAlexey Budankov #include <aio.h> 130b773831SAlexey Budankov #endif 1416958497SArnaldo Carvalho de Melo #include "auxtrace.h" 1516958497SArnaldo Carvalho de Melo #include "event.h" 1616958497SArnaldo Carvalho de Melo 17d3d1af6fSAlexey Budankov struct aiocb; 189c080c02SAlexey Budankov 199c080c02SAlexey Budankov struct mmap_cpu_mask { 209c080c02SAlexey Budankov unsigned long *bits; 219c080c02SAlexey Budankov size_t nbits; 229c080c02SAlexey Budankov }; 239c080c02SAlexey Budankov 249c080c02SAlexey Budankov #define MMAP_CPU_MASK_BYTES(m) \ 259c080c02SAlexey Budankov (BITS_TO_LONGS(((struct mmap_cpu_mask *)m)->nbits) * sizeof(unsigned long)) 269c080c02SAlexey Budankov 2716958497SArnaldo Carvalho de Melo /** 28a5830532SJiri Olsa * struct mmap - perf's ring buffer mmap details 2916958497SArnaldo Carvalho de Melo * 3016958497SArnaldo Carvalho de Melo * @refcnt - e.g. code using PERF_EVENT_IOC_SET_OUTPUT to share this 3116958497SArnaldo Carvalho de Melo */ 32a5830532SJiri Olsa struct mmap { 33547740f7SJiri Olsa struct perf_mmap core; 3416958497SArnaldo Carvalho de Melo struct auxtrace_mmap auxtrace_mmap; 350b773831SAlexey Budankov #ifdef HAVE_AIO_SUPPORT 360b773831SAlexey Budankov struct { 3793f20c0fSAlexey Budankov void **data; 3893f20c0fSAlexey Budankov struct aiocb *cblocks; 3993f20c0fSAlexey Budankov struct aiocb **aiocb; 40d3d1af6fSAlexey Budankov int nr_cblocks; 410b773831SAlexey Budankov } aio; 420b773831SAlexey Budankov #endif 438384a260SAlexey Budankov struct mmap_cpu_mask affinity_mask; 4451255a8aSAlexey Budankov void *data; 4551255a8aSAlexey Budankov int comp_level; 4616958497SArnaldo Carvalho de Melo }; 4716958497SArnaldo Carvalho de Melo 4816958497SArnaldo Carvalho de Melo struct mmap_params { 49e440979fSJiri Olsa struct perf_mmap_param core; 50e440979fSJiri Olsa int nr_cblocks, affinity, flush, comp_level; 5116958497SArnaldo Carvalho de Melo struct auxtrace_mmap_params auxtrace_mp; 5216958497SArnaldo Carvalho de Melo }; 5316958497SArnaldo Carvalho de Melo 5432c261c0SJiri Olsa int mmap__mmap(struct mmap *map, struct mmap_params *mp, int fd, int cpu); 5559d7ea62SJiri Olsa void mmap__munmap(struct mmap *map); 5616958497SArnaldo Carvalho de Melo 57a5830532SJiri Olsa union perf_event *perf_mmap__read_forward(struct mmap *map); 5816958497SArnaldo Carvalho de Melo 59a5830532SJiri Olsa int perf_mmap__push(struct mmap *md, void *to, 60a5830532SJiri Olsa int push(struct mmap *map, void *to, void *buf, size_t size)); 6173c17d81SArnaldo Carvalho de Melo 62bf59b305SJiri Olsa size_t mmap__mmap_len(struct mmap *map); 6316958497SArnaldo Carvalho de Melo 649c080c02SAlexey Budankov void mmap_cpu_mask__scnprintf(struct mmap_cpu_mask *mask, const char *tag); 659c080c02SAlexey Budankov 6616958497SArnaldo Carvalho de Melo #endif /*__PERF_MMAP_H */ 67