diff options
Diffstat (limited to 'tools/perf/util/parse-events.h')
| -rw-r--r-- | tools/perf/util/parse-events.h | 69 | 
1 files changed, 33 insertions, 36 deletions
diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h index 86ad4438a2aa..b0eb95f93e9c 100644 --- a/tools/perf/util/parse-events.h +++ b/tools/perf/util/parse-events.h @@ -18,21 +18,26 @@ struct parse_events_error;  struct option;  struct perf_pmu; -bool is_event_supported(u8 type, u64 config); -  const char *event_type(int type); +/* Arguments encoded in opt->value. */ +struct parse_events_option_args { +	struct evlist **evlistp; +	const char *pmu_filter; +};  int parse_events_option(const struct option *opt, const char *str, int unset);  int parse_events_option_new_evlist(const struct option *opt, const char *str, int unset); -__attribute__((nonnull(1, 2, 3))) -int __parse_events(struct evlist *evlist, const char *str, struct parse_events_error *error, -		   struct perf_pmu *fake_pmu, bool warn_if_reordered); +__attribute__((nonnull(1, 2, 4))) +int __parse_events(struct evlist *evlist, const char *str, const char *pmu_filter, +		   struct parse_events_error *error, struct perf_pmu *fake_pmu, +		   bool warn_if_reordered);  __attribute__((nonnull(1, 2, 3)))  static inline int parse_events(struct evlist *evlist, const char *str,  			       struct parse_events_error *err)  { -	return __parse_events(evlist, str, err, /*fake_pmu=*/NULL, /*warn_if_reordered=*/true); +	return __parse_events(evlist, str, /*pmu_filter=*/NULL, err, /*fake_pmu=*/NULL, +			      /*warn_if_reordered=*/true);  }  int parse_event(struct evlist *evlist, const char *str); @@ -41,14 +46,6 @@ int parse_events_terms(struct list_head *terms, const char *str);  int parse_filter(const struct option *opt, const char *str, int unset);  int exclude_perf(const struct option *opt, const char *arg, int unset); -enum perf_pmu_event_symbol_type { -	PMU_EVENT_SYMBOL_ERR,		/* not a PMU EVENT */ -	PMU_EVENT_SYMBOL,		/* normal style PMU event */ -	PMU_EVENT_SYMBOL_PREFIX,	/* prefix of pre-suf style event */ -	PMU_EVENT_SYMBOL_SUFFIX,	/* suffix of pre-suf style event */ -	PMU_EVENT_SYMBOL_SUFFIX2,	/* suffix of pre-suf2 style event */ -}; -  enum {  	PARSE_EVENTS__TERM_TYPE_NUM,  	PARSE_EVENTS__TERM_TYPE_STR, @@ -78,6 +75,9 @@ enum {  	PARSE_EVENTS__TERM_TYPE_AUX_OUTPUT,  	PARSE_EVENTS__TERM_TYPE_AUX_SAMPLE_SIZE,  	PARSE_EVENTS__TERM_TYPE_METRIC_ID, +	PARSE_EVENTS__TERM_TYPE_RAW, +	PARSE_EVENTS__TERM_TYPE_LEGACY_CACHE, +	PARSE_EVENTS__TERM_TYPE_HARDWARE,  	__PARSE_EVENTS__TERM_TYPE_NR,  }; @@ -128,10 +128,15 @@ struct parse_events_state {  	struct list_head	  *terms;  	int			   stoken;  	struct perf_pmu		  *fake_pmu; -	char			  *hybrid_pmu_name; +	/* If non-null, when wildcard matching only match the given PMU. */ +	const char		  *pmu_filter; +	/* Should PE_LEGACY_NAME tokens be generated for config terms? */ +	bool			   match_legacy_cache_terms;  	bool			   wild_card_pmus;  }; +bool parse_events__filter_pmu(const struct parse_events_state *parse_state, +			      const struct perf_pmu *pmu);  void parse_events__shrink_config_terms(void);  int parse_events__is_hardcoded_term(struct parse_events_term *term);  int parse_events_term__num(struct parse_events_term **term, @@ -141,8 +146,9 @@ int parse_events_term__num(struct parse_events_term **term,  int parse_events_term__str(struct parse_events_term **term,  			   int type_term, char *config, char *str,  			   void *loc_term, void *loc_val); -int parse_events_term__sym_hw(struct parse_events_term **term, -			      char *config, unsigned idx); +int parse_events_term__term(struct parse_events_term **term, +			    int term_lhs, int term_rhs, +			    void *loc_term, void *loc_val);  int parse_events_term__clone(struct parse_events_term **new,  			     struct parse_events_term *term);  void parse_events_term__delete(struct parse_events_term *term); @@ -170,17 +176,19 @@ int parse_events_load_bpf_obj(struct parse_events_state *parse_state,  int parse_events_add_numeric(struct parse_events_state *parse_state,  			     struct list_head *list,  			     u32 type, u64 config, -			     struct list_head *head_config); +			     struct list_head *head_config, +			     bool wildcard);  int parse_events_add_tool(struct parse_events_state *parse_state,  			  struct list_head *list,  			  int tool_event); -int parse_events_add_cache(struct list_head *list, int *idx, -			   char *type, char *op_result1, char *op_result2, -			   struct parse_events_error *error, -			   struct list_head *head_config, -			   struct parse_events_state *parse_state); -int parse_events_add_breakpoint(struct list_head *list, int *idx, -				u64 addr, char *type, u64 len); +int parse_events_add_cache(struct list_head *list, int *idx, const char *name, +			   struct parse_events_state *parse_state, +			   struct list_head *head_config); +int parse_events__decode_legacy_cache(const char *name, int pmu_type, __u64 *config); +int parse_events_add_breakpoint(struct parse_events_state *parse_state, +				struct list_head *list, +				u64 addr, char *type, u64 len, +				struct list_head *head_config);  int parse_events_add_pmu(struct parse_events_state *parse_state,  			 struct list_head *list, char *name,  			 struct list_head *head_config, @@ -198,8 +206,6 @@ int parse_events_multi_pmu_add(struct parse_events_state *parse_state,  int parse_events_copy_term_list(struct list_head *old,  				 struct list_head **new); -enum perf_pmu_event_symbol_type -perf_pmu__parse_check(const char *name);  void parse_events__set_leader(char *name, struct list_head *list);  void parse_events_update_lists(struct list_head *list_event,  			       struct list_head *list_all); @@ -241,13 +247,4 @@ static inline bool is_sdt_event(char *str __maybe_unused)  }  #endif /* HAVE_LIBELF_SUPPORT */ -int perf_pmu__test_parse_init(void); - -struct evsel *parse_events__add_event_hybrid(struct list_head *list, int *idx, -					     struct perf_event_attr *attr, -					     const char *name, -					     const char *metric_id, -					     struct perf_pmu *pmu, -					     struct list_head *config_terms); -  #endif /* __PERF_PARSE_EVENTS_H */  | 
