linux/tools/perf/util/parse-events.h
<<
>>
Prefs
   1#ifndef __PERF_PARSE_EVENTS_H
   2#define __PERF_PARSE_EVENTS_H
   3/*
   4 * Parse symbolic events/counts passed in as options:
   5 */
   6
   7#include <linux/list.h>
   8#include <stdbool.h>
   9#include <linux/types.h>
  10#include <linux/perf_event.h>
  11
  12struct list_head;
  13struct perf_evsel;
  14struct perf_evlist;
  15
  16struct option;
  17
  18struct tracepoint_path {
  19        char *system;
  20        char *name;
  21        struct tracepoint_path *next;
  22};
  23
  24extern struct tracepoint_path *tracepoint_id_to_path(u64 config);
  25extern struct tracepoint_path *tracepoint_name_to_path(const char *name);
  26extern bool have_tracepoints(struct list_head *evlist);
  27
  28const char *event_type(int type);
  29
  30extern int parse_events_option(const struct option *opt, const char *str,
  31                               int unset);
  32extern int parse_events(struct perf_evlist *evlist, const char *str);
  33extern int parse_events_terms(struct list_head *terms, const char *str);
  34extern int parse_filter(const struct option *opt, const char *str, int unset);
  35
  36#define EVENTS_HELP_MAX (128*1024)
  37
  38enum perf_pmu_event_symbol_type {
  39        PMU_EVENT_SYMBOL_ERR,           /* not a PMU EVENT */
  40        PMU_EVENT_SYMBOL,               /* normal style PMU event */
  41        PMU_EVENT_SYMBOL_PREFIX,        /* prefix of pre-suf style event */
  42        PMU_EVENT_SYMBOL_SUFFIX,        /* suffix of pre-suf style event */
  43};
  44
  45struct perf_pmu_event_symbol {
  46        char    *symbol;
  47        enum perf_pmu_event_symbol_type type;
  48};
  49
  50enum {
  51        PARSE_EVENTS__TERM_TYPE_NUM,
  52        PARSE_EVENTS__TERM_TYPE_STR,
  53};
  54
  55enum {
  56        PARSE_EVENTS__TERM_TYPE_USER,
  57        PARSE_EVENTS__TERM_TYPE_CONFIG,
  58        PARSE_EVENTS__TERM_TYPE_CONFIG1,
  59        PARSE_EVENTS__TERM_TYPE_CONFIG2,
  60        PARSE_EVENTS__TERM_TYPE_NAME,
  61        PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD,
  62        PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE,
  63};
  64
  65struct parse_events_term {
  66        char *config;
  67        union {
  68                char *str;
  69                u64  num;
  70        } val;
  71        int type_val;
  72        int type_term;
  73        struct list_head list;
  74        bool used;
  75};
  76
  77struct parse_events_evlist {
  78        struct list_head list;
  79        int idx;
  80        int nr_groups;
  81};
  82
  83struct parse_events_terms {
  84        struct list_head *terms;
  85};
  86
  87int parse_events__is_hardcoded_term(struct parse_events_term *term);
  88int parse_events_term__num(struct parse_events_term **_term,
  89                           int type_term, char *config, u64 num);
  90int parse_events_term__str(struct parse_events_term **_term,
  91                           int type_term, char *config, char *str);
  92int parse_events_term__sym_hw(struct parse_events_term **term,
  93                              char *config, unsigned idx);
  94int parse_events_term__clone(struct parse_events_term **new,
  95                             struct parse_events_term *term);
  96void parse_events__free_terms(struct list_head *terms);
  97int parse_events__modifier_event(struct list_head *list, char *str, bool add);
  98int parse_events__modifier_group(struct list_head *list, char *event_mod);
  99int parse_events_name(struct list_head *list, char *name);
 100int parse_events_add_tracepoint(struct list_head *list, int *idx,
 101                                char *sys, char *event);
 102int parse_events_add_numeric(struct list_head *list, int *idx,
 103                             u32 type, u64 config,
 104                             struct list_head *head_config);
 105int parse_events_add_cache(struct list_head *list, int *idx,
 106                           char *type, char *op_result1, char *op_result2);
 107int parse_events_add_breakpoint(struct list_head *list, int *idx,
 108                                void *ptr, char *type, u64 len);
 109int parse_events_add_pmu(struct list_head *list, int *idx,
 110                         char *pmu , struct list_head *head_config);
 111enum perf_pmu_event_symbol_type
 112perf_pmu__parse_check(const char *name);
 113void parse_events__set_leader(char *name, struct list_head *list);
 114void parse_events_update_lists(struct list_head *list_event,
 115                               struct list_head *list_all);
 116void parse_events_error(void *data, void *scanner, char const *msg);
 117
 118void print_events(const char *event_glob, bool name_only);
 119void print_events_type(u8 type);
 120void print_tracepoint_events(const char *subsys_glob, const char *event_glob,
 121                             bool name_only);
 122int print_hwcache_events(const char *event_glob, bool name_only);
 123extern int is_valid_tracepoint(const char *event_string);
 124
 125extern int valid_debugfs_mount(const char *debugfs);
 126
 127#endif /* __PERF_PARSE_EVENTS_H */
 128