18c2ecf20Sopenharmony_ci#ifndef __PERF_MMAP_H 28c2ecf20Sopenharmony_ci#define __PERF_MMAP_H 1 38c2ecf20Sopenharmony_ci 48c2ecf20Sopenharmony_ci#include <internal/mmap.h> 58c2ecf20Sopenharmony_ci#include <linux/compiler.h> 68c2ecf20Sopenharmony_ci#include <linux/refcount.h> 78c2ecf20Sopenharmony_ci#include <linux/types.h> 88c2ecf20Sopenharmony_ci#include <linux/ring_buffer.h> 98c2ecf20Sopenharmony_ci#include <stdbool.h> 108c2ecf20Sopenharmony_ci#include <pthread.h> // for cpu_set_t 118c2ecf20Sopenharmony_ci#ifdef HAVE_AIO_SUPPORT 128c2ecf20Sopenharmony_ci#include <aio.h> 138c2ecf20Sopenharmony_ci#endif 148c2ecf20Sopenharmony_ci#include "auxtrace.h" 158c2ecf20Sopenharmony_ci#include "event.h" 168c2ecf20Sopenharmony_ci 178c2ecf20Sopenharmony_cistruct aiocb; 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_cistruct mmap_cpu_mask { 208c2ecf20Sopenharmony_ci unsigned long *bits; 218c2ecf20Sopenharmony_ci size_t nbits; 228c2ecf20Sopenharmony_ci}; 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ci#define MMAP_CPU_MASK_BYTES(m) \ 258c2ecf20Sopenharmony_ci (BITS_TO_LONGS(((struct mmap_cpu_mask *)m)->nbits) * sizeof(unsigned long)) 268c2ecf20Sopenharmony_ci 278c2ecf20Sopenharmony_ci/** 288c2ecf20Sopenharmony_ci * struct mmap - perf's ring buffer mmap details 298c2ecf20Sopenharmony_ci * 308c2ecf20Sopenharmony_ci * @refcnt - e.g. code using PERF_EVENT_IOC_SET_OUTPUT to share this 318c2ecf20Sopenharmony_ci */ 328c2ecf20Sopenharmony_cistruct mmap { 338c2ecf20Sopenharmony_ci struct perf_mmap core; 348c2ecf20Sopenharmony_ci struct auxtrace_mmap auxtrace_mmap; 358c2ecf20Sopenharmony_ci#ifdef HAVE_AIO_SUPPORT 368c2ecf20Sopenharmony_ci struct { 378c2ecf20Sopenharmony_ci void **data; 388c2ecf20Sopenharmony_ci struct aiocb *cblocks; 398c2ecf20Sopenharmony_ci struct aiocb **aiocb; 408c2ecf20Sopenharmony_ci int nr_cblocks; 418c2ecf20Sopenharmony_ci } aio; 428c2ecf20Sopenharmony_ci#endif 438c2ecf20Sopenharmony_ci struct mmap_cpu_mask affinity_mask; 448c2ecf20Sopenharmony_ci void *data; 458c2ecf20Sopenharmony_ci int comp_level; 468c2ecf20Sopenharmony_ci}; 478c2ecf20Sopenharmony_ci 488c2ecf20Sopenharmony_cistruct mmap_params { 498c2ecf20Sopenharmony_ci struct perf_mmap_param core; 508c2ecf20Sopenharmony_ci int nr_cblocks, affinity, flush, comp_level; 518c2ecf20Sopenharmony_ci struct auxtrace_mmap_params auxtrace_mp; 528c2ecf20Sopenharmony_ci}; 538c2ecf20Sopenharmony_ci 548c2ecf20Sopenharmony_ciint mmap__mmap(struct mmap *map, struct mmap_params *mp, int fd, int cpu); 558c2ecf20Sopenharmony_civoid mmap__munmap(struct mmap *map); 568c2ecf20Sopenharmony_ci 578c2ecf20Sopenharmony_ciunion perf_event *perf_mmap__read_forward(struct mmap *map); 588c2ecf20Sopenharmony_ci 598c2ecf20Sopenharmony_ciint perf_mmap__push(struct mmap *md, void *to, 608c2ecf20Sopenharmony_ci int push(struct mmap *map, void *to, void *buf, size_t size)); 618c2ecf20Sopenharmony_ci 628c2ecf20Sopenharmony_cisize_t mmap__mmap_len(struct mmap *map); 638c2ecf20Sopenharmony_ci 648c2ecf20Sopenharmony_civoid mmap_cpu_mask__scnprintf(struct mmap_cpu_mask *mask, const char *tag); 658c2ecf20Sopenharmony_ci 668c2ecf20Sopenharmony_ci#endif /*__PERF_MMAP_H */ 67