Blame view

tools/perf/util/pmu.h 2.62 KB
cd82a32e9   Jiri Olsa   perf tools: Add p...
1
2
  #ifndef __PMU_H
  #define __PMU_H
d944c4eeb   Borislav Petkov   tools: Consolidat...
3
  #include <linux/bitmap.h>
d2709c7ce   David Howells   perf: Make perf b...
4
  #include <linux/perf_event.h>
dc098b35b   Andi Kleen   perf list: List k...
5
  #include <stdbool.h>
859442bd3   Mathieu Poirier   perf pmu: Push co...
6
  #include "evsel.h"
e64b020ba   Jiri Olsa   perf tools: Add t...
7
  #include "parse-events.h"
cd82a32e9   Jiri Olsa   perf tools: Add p...
8
9
10
11
12
13
14
15
  
  enum {
  	PERF_PMU_FORMAT_VALUE_CONFIG,
  	PERF_PMU_FORMAT_VALUE_CONFIG1,
  	PERF_PMU_FORMAT_VALUE_CONFIG2,
  };
  
  #define PERF_PMU_FORMAT_BITS 64
dc0a62024   Adrian Hunter   perf tools: Let d...
16
  struct perf_event_attr;
cd82a32e9   Jiri Olsa   perf tools: Add p...
17
18
19
  struct perf_pmu {
  	char *name;
  	__u32 type;
42634bc7a   Adrian Hunter   perf pmu: Let pmu...
20
  	bool selectable;
dc0a62024   Adrian Hunter   perf tools: Let d...
21
  	struct perf_event_attr *default_config;
7ae92e744   Yan, Zheng   perf stat: Check ...
22
  	struct cpu_map *cpus;
885b5930d   Cody P Schafer   perf tools: Annot...
23
24
25
  	struct list_head format;  /* HEAD struct perf_pmu_format -> list */
  	struct list_head aliases; /* HEAD struct perf_pmu_alias -> list */
  	struct list_head list;    /* ELEM */
859442bd3   Mathieu Poirier   perf pmu: Push co...
26
  	int (*set_drv_config)	(struct perf_evsel_config_term *term);
cd82a32e9   Jiri Olsa   perf tools: Add p...
27
  };
46441bdc7   Matt Fleming   perf tools: Refac...
28
29
  struct perf_pmu_info {
  	const char *unit;
37932c188   Andi Kleen   perf stat: Output...
30
  	const char *metric_expr;
962848142   Andi Kleen   perf pmu: Add sup...
31
  	const char *metric_name;
46441bdc7   Matt Fleming   perf tools: Refac...
32
  	double scale;
044330c18   Matt Fleming   perf tools: Add p...
33
  	bool per_pkg;
1d9e446b9   Jiri Olsa   perf tools: Add s...
34
  	bool snapshot;
46441bdc7   Matt Fleming   perf tools: Refac...
35
  };
dcb4e1022   Kan Liang   perf tools: Parse...
36
37
38
39
  #define UNIT_MAX_LEN	31 /* max length for event unit name */
  
  struct perf_pmu_alias {
  	char *name;
08e60ed15   Andi Kleen   perf pmu: Support...
40
  	char *desc;
c8d6828a6   Sukadev Bhattiprolu   perf list: Suppor...
41
  	char *long_desc;
dd5f10368   Andi Kleen   perf list jevents...
42
  	char *topic;
f23610245   Andi Kleen   perf list: Add de...
43
  	char *str;
dcb4e1022   Kan Liang   perf tools: Parse...
44
45
46
47
  	struct list_head terms; /* HEAD struct parse_events_term -> list */
  	struct list_head list;  /* ELEM */
  	char unit[UNIT_MAX_LEN+1];
  	double scale;
044330c18   Matt Fleming   perf tools: Add p...
48
  	bool per_pkg;
1d9e446b9   Jiri Olsa   perf tools: Add s...
49
  	bool snapshot;
00636c3b4   Andi Kleen   perf pmu: Support...
50
  	char *metric_expr;
962848142   Andi Kleen   perf pmu: Add sup...
51
  	char *metric_name;
dcb4e1022   Kan Liang   perf tools: Parse...
52
  };
b6b96fb48   Adrian Hunter   perf tools: Add c...
53
  struct perf_pmu *perf_pmu__find(const char *name);
cd82a32e9   Jiri Olsa   perf tools: Add p...
54
  int perf_pmu__config(struct perf_pmu *pmu, struct perf_event_attr *attr,
e64b020ba   Jiri Olsa   perf tools: Add t...
55
56
  		     struct list_head *head_terms,
  		     struct parse_events_error *error);
cff7f956e   Jiri Olsa   perf tests: Move ...
57
58
  int perf_pmu__config_terms(struct list_head *formats,
  			   struct perf_event_attr *attr,
dc0a62024   Adrian Hunter   perf tools: Let d...
59
  			   struct list_head *head_terms,
e64b020ba   Jiri Olsa   perf tools: Add t...
60
  			   bool zero, struct parse_events_error *error);
09ff60717   Adrian Hunter   perf tools: Add p...
61
  __u64 perf_pmu__format_bits(struct list_head *formats, const char *name);
410136f5d   Stephane Eranian   tools/perf/stat: ...
62
  int perf_pmu__check_alias(struct perf_pmu *pmu, struct list_head *head_terms,
46441bdc7   Matt Fleming   perf tools: Refac...
63
  			  struct perf_pmu_info *info);
a6146d504   Zheng Yan   perf/tool: Add PM...
64
  struct list_head *perf_pmu__alias(struct perf_pmu *pmu,
5c6ccc375   Arnaldo Carvalho de Melo   perf pmu: Fix usa...
65
  				  struct list_head *head_terms);
cd82a32e9   Jiri Olsa   perf tools: Add p...
66
67
68
69
70
71
  int perf_pmu_wrap(void);
  void perf_pmu_error(struct list_head *list, char *name, char const *msg);
  
  int perf_pmu__new_format(struct list_head *list, char *name,
  			 int config, unsigned long *bits);
  void perf_pmu__set_format(unsigned long *bits, long from, long to);
cff7f956e   Jiri Olsa   perf tests: Move ...
72
  int perf_pmu__format_parse(char *dir, struct list_head *head);
cd82a32e9   Jiri Olsa   perf tools: Add p...
73

50a9667c9   Robert Richter   perf tools: Add p...
74
  struct perf_pmu *perf_pmu__scan(struct perf_pmu *pmu);
c8d6828a6   Sukadev Bhattiprolu   perf list: Suppor...
75
  void print_pmu_events(const char *event_glob, bool name_only, bool quiet,
bf874fcf9   Andi Kleen   perf list: Move e...
76
  		      bool long_desc, bool details_flag);
4cabc3d1c   Andi Kleen   tools/perf/stat: ...
77
  bool pmu_have_event(const char *pname, const char *name);
dc098b35b   Andi Kleen   perf list: List k...
78

7d4bdab5a   Adrian Hunter   perf tools: Add p...
79
80
  int perf_pmu__scan_file(struct perf_pmu *pmu, const char *name, const char *fmt,
  			...) __attribute__((format(scanf, 3, 4)));
cd82a32e9   Jiri Olsa   perf tools: Add p...
81
  int perf_pmu__test(void);
dc0a62024   Adrian Hunter   perf tools: Let d...
82
83
  
  struct perf_event_attr *perf_pmu__get_default_config(struct perf_pmu *pmu);
cd82a32e9   Jiri Olsa   perf tools: Add p...
84
  #endif /* __PMU_H */