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