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