1145132Sanholt/* SPDX-License-Identifier: GPL-2.0 */ 2145132Sanholt#ifndef __LIBPERF_INTERNAL_MMAP_H 3145132Sanholt#define __LIBPERF_INTERNAL_MMAP_H 4145132Sanholt 5145132Sanholt#include <linux/compiler.h> 6145132Sanholt#include <linux/refcount.h> 7145132Sanholt#include <linux/types.h> 8145132Sanholt#include <stdbool.h> 9145132Sanholt#include <internal/cpumap.h> 10145132Sanholt 11145132Sanholt/* perf sample has 16 bits size limit */ 12145132Sanholt#define PERF_SAMPLE_MAX_SIZE (1 << 16) 13145132Sanholt 14145132Sanholtstruct perf_mmap; 15145132Sanholtstruct perf_counts_values; 16145132Sanholt 17145132Sanholttypedef void (*libperf_unmap_cb_t)(struct perf_mmap *map); 18145132Sanholt 19145132Sanholt/** 20145132Sanholt * struct perf_mmap - perf's ring buffer mmap details 21145132Sanholt * 22145132Sanholt * @refcnt - e.g. code using PERF_EVENT_IOC_SET_OUTPUT to share this 23145132Sanholt */ 24145132Sanholtstruct perf_mmap { 25145132Sanholt void *base; 26145132Sanholt int mask; 27145132Sanholt int fd; 28145132Sanholt struct perf_cpu cpu; 29152909Sanholt refcount_t refcnt; 30152909Sanholt u64 prev; 31152909Sanholt u64 start; 32182080Srnoland u64 end; 33182080Srnoland bool overwrite; 34182080Srnoland u64 flush; 35182080Srnoland libperf_unmap_cb_t unmap_cb; 36182080Srnoland void *event_copy; 37145132Sanholt size_t event_copy_sz; 38145132Sanholt struct perf_mmap *next; 39152909Sanholt}; 40182080Srnoland 41145132Sanholtstruct perf_mmap_param { 42182080Srnoland int prot; 43182080Srnoland int mask; 44182080Srnoland}; 45182884Srnoland 46182884Srnolandsize_t perf_mmap__mmap_len(struct perf_mmap *map); 47182884Srnoland 48145132Sanholtvoid perf_mmap__init(struct perf_mmap *map, struct perf_mmap *prev, 49182884Srnoland bool overwrite, libperf_unmap_cb_t unmap_cb); 50182883Srnolandint perf_mmap__mmap(struct perf_mmap *map, struct perf_mmap_param *mp, 51182884Srnoland int fd, struct perf_cpu cpu); 52182884Srnolandvoid perf_mmap__munmap(struct perf_mmap *map); 53182884Srnolandvoid perf_mmap__get(struct perf_mmap *map); 54182884Srnolandvoid perf_mmap__put(struct perf_mmap *map); 55182884Srnoland 56182884Srnolandu64 perf_mmap__read_head(struct perf_mmap *map); 57182884Srnoland 58182884Srnolandint perf_mmap__read_self(struct perf_mmap *map, struct perf_counts_values *count); 59182884Srnoland 60182884Srnoland#endif /* __LIBPERF_INTERNAL_MMAP_H */ 61182884Srnoland