162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#ifndef __LIBPERF_INTERNAL_MMAP_H 362306a36Sopenharmony_ci#define __LIBPERF_INTERNAL_MMAP_H 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci#include <linux/compiler.h> 662306a36Sopenharmony_ci#include <linux/refcount.h> 762306a36Sopenharmony_ci#include <linux/types.h> 862306a36Sopenharmony_ci#include <stdbool.h> 962306a36Sopenharmony_ci#include <internal/cpumap.h> 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci/* perf sample has 16 bits size limit */ 1262306a36Sopenharmony_ci#define PERF_SAMPLE_MAX_SIZE (1 << 16) 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_cistruct perf_mmap; 1562306a36Sopenharmony_cistruct perf_counts_values; 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_citypedef void (*libperf_unmap_cb_t)(struct perf_mmap *map); 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci/** 2062306a36Sopenharmony_ci * struct perf_mmap - perf's ring buffer mmap details 2162306a36Sopenharmony_ci * 2262306a36Sopenharmony_ci * @refcnt - e.g. code using PERF_EVENT_IOC_SET_OUTPUT to share this 2362306a36Sopenharmony_ci */ 2462306a36Sopenharmony_cistruct perf_mmap { 2562306a36Sopenharmony_ci void *base; 2662306a36Sopenharmony_ci int mask; 2762306a36Sopenharmony_ci int fd; 2862306a36Sopenharmony_ci struct perf_cpu cpu; 2962306a36Sopenharmony_ci refcount_t refcnt; 3062306a36Sopenharmony_ci u64 prev; 3162306a36Sopenharmony_ci u64 start; 3262306a36Sopenharmony_ci u64 end; 3362306a36Sopenharmony_ci bool overwrite; 3462306a36Sopenharmony_ci u64 flush; 3562306a36Sopenharmony_ci libperf_unmap_cb_t unmap_cb; 3662306a36Sopenharmony_ci char event_copy[PERF_SAMPLE_MAX_SIZE] __aligned(8); 3762306a36Sopenharmony_ci struct perf_mmap *next; 3862306a36Sopenharmony_ci}; 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_cistruct perf_mmap_param { 4162306a36Sopenharmony_ci int prot; 4262306a36Sopenharmony_ci int mask; 4362306a36Sopenharmony_ci}; 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_cisize_t perf_mmap__mmap_len(struct perf_mmap *map); 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_civoid perf_mmap__init(struct perf_mmap *map, struct perf_mmap *prev, 4862306a36Sopenharmony_ci bool overwrite, libperf_unmap_cb_t unmap_cb); 4962306a36Sopenharmony_ciint perf_mmap__mmap(struct perf_mmap *map, struct perf_mmap_param *mp, 5062306a36Sopenharmony_ci int fd, struct perf_cpu cpu); 5162306a36Sopenharmony_civoid perf_mmap__munmap(struct perf_mmap *map); 5262306a36Sopenharmony_civoid perf_mmap__get(struct perf_mmap *map); 5362306a36Sopenharmony_civoid perf_mmap__put(struct perf_mmap *map); 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ciu64 perf_mmap__read_head(struct perf_mmap *map); 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ciint perf_mmap__read_self(struct perf_mmap *map, struct perf_counts_values *count); 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci#endif /* __LIBPERF_INTERNAL_MMAP_H */ 60