parse-events.h 3.9 KB

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