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