xref: /openbmc/linux/tools/perf/util/pmu.y (revision cc5adb73)
13d88aec0SIan Rogers %define api.pure full
2cd82a32eSJiri Olsa %parse-param {struct list_head *format}
3cd82a32eSJiri Olsa %parse-param {char *name}
43d88aec0SIan Rogers %parse-param {void *scanner}
53d88aec0SIan Rogers %lex-param {void* scanner}
6cd82a32eSJiri Olsa 
7cd82a32eSJiri Olsa %{
8cd82a32eSJiri Olsa 
9cd82a32eSJiri Olsa #include <linux/compiler.h>
10cd82a32eSJiri Olsa #include <linux/list.h>
11cd82a32eSJiri Olsa #include <linux/bitmap.h>
12cd82a32eSJiri Olsa #include <string.h>
13cd82a32eSJiri Olsa #include "pmu.h"
14ddc8e4c9SIan Rogers #include "pmu-bison.h"
15ddc8e4c9SIan Rogers 
16ddc8e4c9SIan Rogers int perf_pmu_lex(YYSTYPE * yylval_param , void *yyscanner);
17cd82a32eSJiri Olsa 
18cd82a32eSJiri Olsa #define ABORT_ON(val) \
19cd82a32eSJiri Olsa do { \
20cd82a32eSJiri Olsa         if (val) \
21cd82a32eSJiri Olsa                 YYABORT; \
22cd82a32eSJiri Olsa } while (0)
23cd82a32eSJiri Olsa 
24*cc5adb73SIan Rogers static void perf_pmu__set_format(unsigned long *bits, long from, long to)
25*cc5adb73SIan Rogers {
26*cc5adb73SIan Rogers 	long b;
27*cc5adb73SIan Rogers 
28*cc5adb73SIan Rogers 	if (!to)
29*cc5adb73SIan Rogers 		to = from;
30*cc5adb73SIan Rogers 
31*cc5adb73SIan Rogers 	memset(bits, 0, BITS_TO_BYTES(PERF_PMU_FORMAT_BITS));
32*cc5adb73SIan Rogers 	for (b = from; b <= to; b++)
33*cc5adb73SIan Rogers 		__set_bit(b, bits);
34*cc5adb73SIan Rogers }
35*cc5adb73SIan Rogers 
36cd82a32eSJiri Olsa %}
37cd82a32eSJiri Olsa 
38e552b7beSRob Herring %token PP_CONFIG
39cd82a32eSJiri Olsa %token PP_VALUE PP_ERROR
40cd82a32eSJiri Olsa %type <num> PP_VALUE
41cd82a32eSJiri Olsa %type <bits> bit_term
42cd82a32eSJiri Olsa %type <bits> bits
43cd82a32eSJiri Olsa 
44cd82a32eSJiri Olsa %union
45cd82a32eSJiri Olsa {
46cd82a32eSJiri Olsa 	unsigned long num;
47cd82a32eSJiri Olsa 	DECLARE_BITMAP(bits, PERF_PMU_FORMAT_BITS);
48cd82a32eSJiri Olsa }
49cd82a32eSJiri Olsa 
50cd82a32eSJiri Olsa %%
51cd82a32eSJiri Olsa 
52cd82a32eSJiri Olsa format:
53cd82a32eSJiri Olsa format format_term
54cd82a32eSJiri Olsa |
55cd82a32eSJiri Olsa format_term
56cd82a32eSJiri Olsa 
57cd82a32eSJiri Olsa format_term:
58cd82a32eSJiri Olsa PP_CONFIG ':' bits
59cd82a32eSJiri Olsa {
60cd82a32eSJiri Olsa 	ABORT_ON(perf_pmu__new_format(format, name,
61cd82a32eSJiri Olsa 				      PERF_PMU_FORMAT_VALUE_CONFIG,
62cd82a32eSJiri Olsa 				      $3));
63cd82a32eSJiri Olsa }
64cd82a32eSJiri Olsa |
65e552b7beSRob Herring PP_CONFIG PP_VALUE ':' bits
66cd82a32eSJiri Olsa {
67cd82a32eSJiri Olsa 	ABORT_ON(perf_pmu__new_format(format, name,
68e552b7beSRob Herring 				      $2,
69e552b7beSRob Herring 				      $4));
70cd82a32eSJiri Olsa }
71cd82a32eSJiri Olsa 
72cd82a32eSJiri Olsa bits:
73cd82a32eSJiri Olsa bits ',' bit_term
74cd82a32eSJiri Olsa {
75cd82a32eSJiri Olsa 	bitmap_or($$, $1, $3, 64);
76cd82a32eSJiri Olsa }
77cd82a32eSJiri Olsa |
78cd82a32eSJiri Olsa bit_term
79cd82a32eSJiri Olsa {
80cd82a32eSJiri Olsa 	memcpy($$, $1, sizeof($1));
81cd82a32eSJiri Olsa }
82cd82a32eSJiri Olsa 
83cd82a32eSJiri Olsa bit_term:
84cd82a32eSJiri Olsa PP_VALUE '-' PP_VALUE
85cd82a32eSJiri Olsa {
86cd82a32eSJiri Olsa 	perf_pmu__set_format($$, $1, $3);
87cd82a32eSJiri Olsa }
88cd82a32eSJiri Olsa |
89cd82a32eSJiri Olsa PP_VALUE
90cd82a32eSJiri Olsa {
91cd82a32eSJiri Olsa 	perf_pmu__set_format($$, $1, 0);
92cd82a32eSJiri Olsa }
93cd82a32eSJiri Olsa 
94cd82a32eSJiri Olsa %%
95cd82a32eSJiri Olsa 
961d037ca1SIrina Tirdea void perf_pmu_error(struct list_head *list __maybe_unused,
971d037ca1SIrina Tirdea 		    char *name __maybe_unused,
983d88aec0SIan Rogers 		    void *scanner __maybe_unused,
991d037ca1SIrina Tirdea 		    char const *msg __maybe_unused)
100cd82a32eSJiri Olsa {
101cd82a32eSJiri Olsa }
102