| 1 |
|
| 2 | #ifndef __LIBPERF_INTERNAL_MMAP_H
|
| 3 | #define __LIBPERF_INTERNAL_MMAP_H
|
| 4 |
|
| 5 | #include <linux/compiler.h>
|
| 6 | #include <linux/refcount.h>
|
| 7 | #include <linux/types.h>
|
| 8 | #include <stdbool.h>
|
| 9 | #include <internal/cpumap.h>
|
| 10 |
|
| 11 |
|
| 12 | #define PERF_SAMPLE_MAX_SIZE (1 << 16)
|
| 13 |
|
| 14 | struct perf_mmap;
|
| 15 | struct perf_counts_values;
|
| 16 |
|
| 17 | typedef void (*libperf_unmap_cb_t)(struct perf_mmap *map);
|
| 18 |
|
| 19 | |
| 20 | * struct perf_mmap - perf's ring buffer mmap details
|
| 21 | *
|
| 22 | * @refcnt - e.g. code using PERF_EVENT_IOC_SET_OUTPUT to share this
|
| 23 |
|
| 24 | struct perf_mmap {
|
| 25 | void *base;
|
| 26 | int mask;
|
| 27 | int fd;
|
| 28 | struct perf_cpu cpu;
|
| 29 | refcount_t refcnt;
|
| 30 | u64 prev;
|
| 31 | u64 start;
|
| 32 | u64 end;
|
| 33 | bool overwrite;
|
| 34 | u64 flush;
|
| 35 | libperf_unmap_cb_t unmap_cb;
|
| 36 | void *event_copy;
|
| 37 | size_t event_copy_sz;
|
| 38 | struct perf_mmap *next;
|
| 39 | };
|
| 40 |
|
| 41 | struct perf_mmap_param {
|
| 42 | int prot;
|
| 43 | int mask;
|
| 44 | };
|
| 45 |
|
| 46 | size_t perf_mmap__mmap_len(struct perf_mmap *map);
|
| 47 |
|
| 48 | void perf_mmap__init(struct perf_mmap *map, struct perf_mmap *prev,
|
| 49 | bool overwrite, libperf_unmap_cb_t unmap_cb);
|
| 50 | int perf_mmap__mmap(struct perf_mmap *map, struct perf_mmap_param *mp,
|
| 51 | int fd, struct perf_cpu cpu);
|
| 52 | void perf_mmap__munmap(struct perf_mmap *map);
|
| 53 | void perf_mmap__get(struct perf_mmap *map);
|
| 54 | void perf_mmap__put(struct perf_mmap *map);
|
| 55 |
|
| 56 | u64 perf_mmap__read_head(struct perf_mmap *map);
|
| 57 |
|
| 58 | int perf_mmap__read_self(struct perf_mmap *map, struct perf_counts_values *count);
|
| 59 |
|
| 60 | #endif
|