xref: /openbmc/linux/tools/perf/util/pmu.y (revision 1d037ca1)
1cd82a32eSJiri Olsa 
2cd82a32eSJiri Olsa %name-prefix "perf_pmu_"
3cd82a32eSJiri Olsa %parse-param {struct list_head *format}
4cd82a32eSJiri Olsa %parse-param {char *name}
5cd82a32eSJiri Olsa 
6cd82a32eSJiri Olsa %{
7cd82a32eSJiri Olsa 
8cd82a32eSJiri Olsa #include <linux/compiler.h>
9cd82a32eSJiri Olsa #include <linux/list.h>
10cd82a32eSJiri Olsa #include <linux/bitmap.h>
11cd82a32eSJiri Olsa #include <string.h>
12cd82a32eSJiri Olsa #include "pmu.h"
13cd82a32eSJiri Olsa 
14cd82a32eSJiri Olsa extern int perf_pmu_lex (void);
15cd82a32eSJiri Olsa 
16cd82a32eSJiri Olsa #define ABORT_ON(val) \
17cd82a32eSJiri Olsa do { \
18cd82a32eSJiri Olsa         if (val) \
19cd82a32eSJiri Olsa                 YYABORT; \
20cd82a32eSJiri Olsa } while (0)
21cd82a32eSJiri Olsa 
22cd82a32eSJiri Olsa %}
23cd82a32eSJiri Olsa 
24cd82a32eSJiri Olsa %token PP_CONFIG PP_CONFIG1 PP_CONFIG2
25cd82a32eSJiri Olsa %token PP_VALUE PP_ERROR
26cd82a32eSJiri Olsa %type <num> PP_VALUE
27cd82a32eSJiri Olsa %type <bits> bit_term
28cd82a32eSJiri Olsa %type <bits> bits
29cd82a32eSJiri Olsa 
30cd82a32eSJiri Olsa %union
31cd82a32eSJiri Olsa {
32cd82a32eSJiri Olsa 	unsigned long num;
33cd82a32eSJiri Olsa 	DECLARE_BITMAP(bits, PERF_PMU_FORMAT_BITS);
34cd82a32eSJiri Olsa }
35cd82a32eSJiri Olsa 
36cd82a32eSJiri Olsa %%
37cd82a32eSJiri Olsa 
38cd82a32eSJiri Olsa format:
39cd82a32eSJiri Olsa format format_term
40cd82a32eSJiri Olsa |
41cd82a32eSJiri Olsa format_term
42cd82a32eSJiri Olsa 
43cd82a32eSJiri Olsa format_term:
44cd82a32eSJiri Olsa PP_CONFIG ':' bits
45cd82a32eSJiri Olsa {
46cd82a32eSJiri Olsa 	ABORT_ON(perf_pmu__new_format(format, name,
47cd82a32eSJiri Olsa 				      PERF_PMU_FORMAT_VALUE_CONFIG,
48cd82a32eSJiri Olsa 				      $3));
49cd82a32eSJiri Olsa }
50cd82a32eSJiri Olsa |
51cd82a32eSJiri Olsa PP_CONFIG1 ':' bits
52cd82a32eSJiri Olsa {
53cd82a32eSJiri Olsa 	ABORT_ON(perf_pmu__new_format(format, name,
54cd82a32eSJiri Olsa 				      PERF_PMU_FORMAT_VALUE_CONFIG1,
55cd82a32eSJiri Olsa 				      $3));
56cd82a32eSJiri Olsa }
57cd82a32eSJiri Olsa |
58cd82a32eSJiri Olsa PP_CONFIG2 ':' bits
59cd82a32eSJiri Olsa {
60cd82a32eSJiri Olsa 	ABORT_ON(perf_pmu__new_format(format, name,
61cd82a32eSJiri Olsa 				      PERF_PMU_FORMAT_VALUE_CONFIG2,
62cd82a32eSJiri Olsa 				      $3));
63cd82a32eSJiri Olsa }
64cd82a32eSJiri Olsa 
65cd82a32eSJiri Olsa bits:
66cd82a32eSJiri Olsa bits ',' bit_term
67cd82a32eSJiri Olsa {
68cd82a32eSJiri Olsa 	bitmap_or($$, $1, $3, 64);
69cd82a32eSJiri Olsa }
70cd82a32eSJiri Olsa |
71cd82a32eSJiri Olsa bit_term
72cd82a32eSJiri Olsa {
73cd82a32eSJiri Olsa 	memcpy($$, $1, sizeof($1));
74cd82a32eSJiri Olsa }
75cd82a32eSJiri Olsa 
76cd82a32eSJiri Olsa bit_term:
77cd82a32eSJiri Olsa PP_VALUE '-' PP_VALUE
78cd82a32eSJiri Olsa {
79cd82a32eSJiri Olsa 	perf_pmu__set_format($$, $1, $3);
80cd82a32eSJiri Olsa }
81cd82a32eSJiri Olsa |
82cd82a32eSJiri Olsa PP_VALUE
83cd82a32eSJiri Olsa {
84cd82a32eSJiri Olsa 	perf_pmu__set_format($$, $1, 0);
85cd82a32eSJiri Olsa }
86cd82a32eSJiri Olsa 
87cd82a32eSJiri Olsa %%
88cd82a32eSJiri Olsa 
891d037ca1SIrina Tirdea void perf_pmu_error(struct list_head *list __maybe_unused,
901d037ca1SIrina Tirdea 		    char *name __maybe_unused,
911d037ca1SIrina Tirdea 		    char const *msg __maybe_unused)
92cd82a32eSJiri Olsa {
93cd82a32eSJiri Olsa }
94