162306a36Sopenharmony_ci#ifndef __PERF_MMAP_H 262306a36Sopenharmony_ci#define __PERF_MMAP_H 1 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci#include <internal/mmap.h> 562306a36Sopenharmony_ci#include <linux/types.h> 662306a36Sopenharmony_ci#include <linux/bitops.h> 762306a36Sopenharmony_ci#include <perf/cpumap.h> 862306a36Sopenharmony_ci#ifdef HAVE_AIO_SUPPORT 962306a36Sopenharmony_ci#include <aio.h> 1062306a36Sopenharmony_ci#endif 1162306a36Sopenharmony_ci#include "auxtrace.h" 1262306a36Sopenharmony_ci#include "util/compress.h" 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_cistruct aiocb; 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_cistruct mmap_cpu_mask { 1762306a36Sopenharmony_ci unsigned long *bits; 1862306a36Sopenharmony_ci size_t nbits; 1962306a36Sopenharmony_ci}; 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci#define MMAP_CPU_MASK_BYTES(m) \ 2262306a36Sopenharmony_ci (BITS_TO_LONGS(((struct mmap_cpu_mask *)m)->nbits) * sizeof(unsigned long)) 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci/** 2562306a36Sopenharmony_ci * struct mmap - perf's ring buffer mmap details 2662306a36Sopenharmony_ci * 2762306a36Sopenharmony_ci * @refcnt - e.g. code using PERF_EVENT_IOC_SET_OUTPUT to share this 2862306a36Sopenharmony_ci */ 2962306a36Sopenharmony_cistruct mmap { 3062306a36Sopenharmony_ci struct perf_mmap core; 3162306a36Sopenharmony_ci struct auxtrace_mmap auxtrace_mmap; 3262306a36Sopenharmony_ci#ifdef HAVE_AIO_SUPPORT 3362306a36Sopenharmony_ci struct { 3462306a36Sopenharmony_ci void **data; 3562306a36Sopenharmony_ci struct aiocb *cblocks; 3662306a36Sopenharmony_ci struct aiocb **aiocb; 3762306a36Sopenharmony_ci int nr_cblocks; 3862306a36Sopenharmony_ci } aio; 3962306a36Sopenharmony_ci#endif 4062306a36Sopenharmony_ci struct mmap_cpu_mask affinity_mask; 4162306a36Sopenharmony_ci void *data; 4262306a36Sopenharmony_ci int comp_level; 4362306a36Sopenharmony_ci struct perf_data_file *file; 4462306a36Sopenharmony_ci struct zstd_data zstd_data; 4562306a36Sopenharmony_ci}; 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_cistruct mmap_params { 4862306a36Sopenharmony_ci struct perf_mmap_param core; 4962306a36Sopenharmony_ci int nr_cblocks, affinity, flush, comp_level; 5062306a36Sopenharmony_ci struct auxtrace_mmap_params auxtrace_mp; 5162306a36Sopenharmony_ci}; 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ciint mmap__mmap(struct mmap *map, struct mmap_params *mp, int fd, struct perf_cpu cpu); 5462306a36Sopenharmony_civoid mmap__munmap(struct mmap *map); 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ciunion perf_event *perf_mmap__read_forward(struct mmap *map); 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ciint perf_mmap__push(struct mmap *md, void *to, 5962306a36Sopenharmony_ci int push(struct mmap *map, void *to, void *buf, size_t size)); 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_cisize_t mmap__mmap_len(struct mmap *map); 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_civoid mmap_cpu_mask__scnprintf(struct mmap_cpu_mask *mask, const char *tag); 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ciint mmap_cpu_mask__duplicate(struct mmap_cpu_mask *original, 6662306a36Sopenharmony_ci struct mmap_cpu_mask *clone); 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ci#endif /*__PERF_MMAP_H */ 69