linux/tools/perf/util/header.h
<<
>>
Prefs
   1#ifndef __PERF_HEADER_H
   2#define __PERF_HEADER_H
   3
   4#include <linux/perf_event.h>
   5#include <sys/types.h>
   6#include <stdbool.h>
   7#include <linux/bitmap.h>
   8#include <linux/types.h>
   9#include "event.h"
  10#include "env.h"
  11
  12enum {
  13        HEADER_RESERVED         = 0,    /* always cleared */
  14        HEADER_FIRST_FEATURE    = 1,
  15        HEADER_TRACING_DATA     = 1,
  16        HEADER_BUILD_ID,
  17
  18        HEADER_HOSTNAME,
  19        HEADER_OSRELEASE,
  20        HEADER_VERSION,
  21        HEADER_ARCH,
  22        HEADER_NRCPUS,
  23        HEADER_CPUDESC,
  24        HEADER_CPUID,
  25        HEADER_TOTAL_MEM,
  26        HEADER_CMDLINE,
  27        HEADER_EVENT_DESC,
  28        HEADER_CPU_TOPOLOGY,
  29        HEADER_NUMA_TOPOLOGY,
  30        HEADER_BRANCH_STACK,
  31        HEADER_PMU_MAPPINGS,
  32        HEADER_GROUP_DESC,
  33        HEADER_AUXTRACE,
  34        HEADER_STAT,
  35        HEADER_CACHE,
  36        HEADER_LAST_FEATURE,
  37        HEADER_FEAT_BITS        = 256,
  38};
  39
  40enum perf_header_version {
  41        PERF_HEADER_VERSION_1,
  42        PERF_HEADER_VERSION_2,
  43};
  44
  45struct perf_file_section {
  46        u64 offset;
  47        u64 size;
  48};
  49
  50struct perf_file_header {
  51        u64                             magic;
  52        u64                             size;
  53        u64                             attr_size;
  54        struct perf_file_section        attrs;
  55        struct perf_file_section        data;
  56        /* event_types is ignored */
  57        struct perf_file_section        event_types;
  58        DECLARE_BITMAP(adds_features, HEADER_FEAT_BITS);
  59};
  60
  61struct perf_pipe_file_header {
  62        u64                             magic;
  63        u64                             size;
  64};
  65
  66struct perf_header;
  67
  68int perf_file_header__read(struct perf_file_header *header,
  69                           struct perf_header *ph, int fd);
  70
  71struct perf_header {
  72        enum perf_header_version        version;
  73        bool                            needs_swap;
  74        u64                             data_offset;
  75        u64                             data_size;
  76        u64                             feat_offset;
  77        DECLARE_BITMAP(adds_features, HEADER_FEAT_BITS);
  78        struct perf_env         env;
  79};
  80
  81struct perf_evlist;
  82struct perf_session;
  83
  84int perf_session__read_header(struct perf_session *session);
  85int perf_session__write_header(struct perf_session *session,
  86                               struct perf_evlist *evlist,
  87                               int fd, bool at_exit);
  88int perf_header__write_pipe(int fd);
  89
  90void perf_header__set_feat(struct perf_header *header, int feat);
  91void perf_header__clear_feat(struct perf_header *header, int feat);
  92bool perf_header__has_feat(const struct perf_header *header, int feat);
  93
  94int perf_header__set_cmdline(int argc, const char **argv);
  95
  96int perf_header__process_sections(struct perf_header *header, int fd,
  97                                  void *data,
  98                                  int (*process)(struct perf_file_section *section,
  99                                  struct perf_header *ph,
 100                                  int feat, int fd, void *data));
 101
 102int perf_header__fprintf_info(struct perf_session *s, FILE *fp, bool full);
 103
 104int perf_event__synthesize_attr(struct perf_tool *tool,
 105                                struct perf_event_attr *attr, u32 ids, u64 *id,
 106                                perf_event__handler_t process);
 107int perf_event__synthesize_attrs(struct perf_tool *tool,
 108                                 struct perf_session *session,
 109                                 perf_event__handler_t process);
 110int perf_event__synthesize_event_update_unit(struct perf_tool *tool,
 111                                             struct perf_evsel *evsel,
 112                                             perf_event__handler_t process);
 113int perf_event__synthesize_event_update_scale(struct perf_tool *tool,
 114                                              struct perf_evsel *evsel,
 115                                              perf_event__handler_t process);
 116int perf_event__synthesize_event_update_name(struct perf_tool *tool,
 117                                             struct perf_evsel *evsel,
 118                                             perf_event__handler_t process);
 119int perf_event__synthesize_event_update_cpus(struct perf_tool *tool,
 120                                             struct perf_evsel *evsel,
 121                                             perf_event__handler_t process);
 122int perf_event__process_attr(struct perf_tool *tool, union perf_event *event,
 123                             struct perf_evlist **pevlist);
 124int perf_event__process_event_update(struct perf_tool *tool,
 125                                     union perf_event *event,
 126                                     struct perf_evlist **pevlist);
 127size_t perf_event__fprintf_event_update(union perf_event *event, FILE *fp);
 128
 129int perf_event__synthesize_tracing_data(struct perf_tool *tool,
 130                                        int fd, struct perf_evlist *evlist,
 131                                        perf_event__handler_t process);
 132int perf_event__process_tracing_data(struct perf_tool *tool,
 133                                     union perf_event *event,
 134                                     struct perf_session *session);
 135
 136int perf_event__synthesize_build_id(struct perf_tool *tool,
 137                                    struct dso *pos, u16 misc,
 138                                    perf_event__handler_t process,
 139                                    struct machine *machine);
 140int perf_event__process_build_id(struct perf_tool *tool,
 141                                 union perf_event *event,
 142                                 struct perf_session *session);
 143bool is_perf_magic(u64 magic);
 144
 145#define NAME_ALIGN 64
 146
 147int write_padded(int fd, const void *bf, size_t count, size_t count_aligned);
 148
 149/*
 150 * arch specific callback
 151 */
 152int get_cpuid(char *buffer, size_t sz);
 153
 154#endif /* __PERF_HEADER_H */
 155