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; 1816958497SArnaldo Carvalho de Melo /** 19a5830532SJiri Olsa * struct mmap - perf's ring buffer mmap details 2016958497SArnaldo Carvalho de Melo * 2116958497SArnaldo Carvalho de Melo * @refcnt - e.g. code using PERF_EVENT_IOC_SET_OUTPUT to share this 2216958497SArnaldo Carvalho de Melo */ 23a5830532SJiri Olsa struct mmap { 24547740f7SJiri Olsa struct perf_mmap core; 2516958497SArnaldo Carvalho de Melo struct auxtrace_mmap auxtrace_mmap; 260b773831SAlexey Budankov #ifdef HAVE_AIO_SUPPORT 270b773831SAlexey Budankov struct { 2893f20c0fSAlexey Budankov void **data; 2993f20c0fSAlexey Budankov struct aiocb *cblocks; 3093f20c0fSAlexey Budankov struct aiocb **aiocb; 31d3d1af6fSAlexey Budankov int nr_cblocks; 320b773831SAlexey Budankov } aio; 330b773831SAlexey Budankov #endif 349d2ed645SAlexey Budankov cpu_set_t affinity_mask; 3551255a8aSAlexey Budankov void *data; 3651255a8aSAlexey Budankov int comp_level; 3716958497SArnaldo Carvalho de Melo }; 3816958497SArnaldo Carvalho de Melo 3916958497SArnaldo Carvalho de Melo struct mmap_params { 40e440979fSJiri Olsa struct perf_mmap_param core; 41e440979fSJiri Olsa int nr_cblocks, affinity, flush, comp_level; 4216958497SArnaldo Carvalho de Melo struct auxtrace_mmap_params auxtrace_mp; 4316958497SArnaldo Carvalho de Melo }; 4416958497SArnaldo Carvalho de Melo 4532c261c0SJiri Olsa int mmap__mmap(struct mmap *map, struct mmap_params *mp, int fd, int cpu); 46a5830532SJiri Olsa void perf_mmap__munmap(struct mmap *map); 4716958497SArnaldo Carvalho de Melo 48a5830532SJiri Olsa void perf_mmap__get(struct mmap *map); 49a5830532SJiri Olsa void perf_mmap__put(struct mmap *map); 5016958497SArnaldo Carvalho de Melo 51a5830532SJiri Olsa void perf_mmap__consume(struct mmap *map); 5216958497SArnaldo Carvalho de Melo 53a5830532SJiri Olsa static inline u64 perf_mmap__read_head(struct mmap *mm) 5416958497SArnaldo Carvalho de Melo { 55547740f7SJiri Olsa return ring_buffer_read_head(mm->core.base); 5616958497SArnaldo Carvalho de Melo } 5716958497SArnaldo Carvalho de Melo 58a5830532SJiri Olsa static inline void perf_mmap__write_tail(struct mmap *md, u64 tail) 5916958497SArnaldo Carvalho de Melo { 60547740f7SJiri Olsa ring_buffer_write_tail(md->core.base, tail); 6116958497SArnaldo Carvalho de Melo } 6216958497SArnaldo Carvalho de Melo 63a5830532SJiri Olsa union perf_event *perf_mmap__read_forward(struct mmap *map); 6416958497SArnaldo Carvalho de Melo 65a5830532SJiri Olsa union perf_event *perf_mmap__read_event(struct mmap *map); 667bb45972SKan Liang 67a5830532SJiri Olsa int perf_mmap__push(struct mmap *md, void *to, 68a5830532SJiri Olsa int push(struct mmap *map, void *to, void *buf, size_t size)); 6973c17d81SArnaldo Carvalho de Melo 70bf59b305SJiri Olsa size_t mmap__mmap_len(struct mmap *map); 7116958497SArnaldo Carvalho de Melo 72a5830532SJiri Olsa int perf_mmap__read_init(struct mmap *md); 73a5830532SJiri Olsa void perf_mmap__read_done(struct mmap *map); 7416958497SArnaldo Carvalho de Melo #endif /*__PERF_MMAP_H */ 75