Commit | Line | Data |
---|---|---|
3d88aec0 | 1 | %define api.pure full |
50402641 | 2 | %parse-param {void *format} |
3d88aec0 IR |
3 | %parse-param {void *scanner} |
4 | %lex-param {void* scanner} | |
cd82a32e JO |
5 | |
6 | %{ | |
7 | ||
f0f4cd10 IR |
8 | #ifndef NDEBUG |
9 | #define YYDEBUG 1 | |
10 | #endif | |
11 | ||
cd82a32e JO |
12 | #include <linux/compiler.h> |
13 | #include <linux/list.h> | |
14 | #include <linux/bitmap.h> | |
15 | #include <string.h> | |
16 | #include "pmu.h" | |
ddc8e4c9 IR |
17 | #include "pmu-bison.h" |
18 | ||
19 | int perf_pmu_lex(YYSTYPE * yylval_param , void *yyscanner); | |
cd82a32e | 20 | |
cd82a32e JO |
21 | #define ABORT_ON(val) \ |
22 | do { \ | |
23 | if (val) \ | |
24 | YYABORT; \ | |
25 | } while (0) | |
26 | ||
50402641 | 27 | static void perf_pmu_error(void *format, void *scanner, const char *msg); |
6f2f6eaf | 28 | |
cc5adb73 IR |
29 | static void perf_pmu__set_format(unsigned long *bits, long from, long to) |
30 | { | |
31 | long b; | |
32 | ||
33 | if (!to) | |
34 | to = from; | |
35 | ||
36 | memset(bits, 0, BITS_TO_BYTES(PERF_PMU_FORMAT_BITS)); | |
37 | for (b = from; b <= to; b++) | |
38 | __set_bit(b, bits); | |
39 | } | |
40 | ||
cd82a32e JO |
41 | %} |
42 | ||
e552b7be | 43 | %token PP_CONFIG |
cd82a32e JO |
44 | %token PP_VALUE PP_ERROR |
45 | %type <num> PP_VALUE | |
46 | %type <bits> bit_term | |
47 | %type <bits> bits | |
48 | ||
49 | %union | |
50 | { | |
51 | unsigned long num; | |
52 | DECLARE_BITMAP(bits, PERF_PMU_FORMAT_BITS); | |
53 | } | |
54 | ||
55 | %% | |
56 | ||
57 | format: | |
58 | format format_term | |
59 | | | |
60 | format_term | |
61 | ||
62 | format_term: | |
63 | PP_CONFIG ':' bits | |
64 | { | |
50402641 | 65 | perf_pmu_format__set_value(format, PERF_PMU_FORMAT_VALUE_CONFIG, $3); |
cd82a32e JO |
66 | } |
67 | | | |
e552b7be | 68 | PP_CONFIG PP_VALUE ':' bits |
cd82a32e | 69 | { |
50402641 | 70 | perf_pmu_format__set_value(format, $2, $4); |
cd82a32e JO |
71 | } |
72 | ||
73 | bits: | |
74 | bits ',' bit_term | |
75 | { | |
76 | bitmap_or($$, $1, $3, 64); | |
77 | } | |
78 | | | |
79 | bit_term | |
80 | { | |
81 | memcpy($$, $1, sizeof($1)); | |
82 | } | |
83 | ||
84 | bit_term: | |
85 | PP_VALUE '-' PP_VALUE | |
86 | { | |
87 | perf_pmu__set_format($$, $1, $3); | |
88 | } | |
89 | | | |
90 | PP_VALUE | |
91 | { | |
92 | perf_pmu__set_format($$, $1, 0); | |
93 | } | |
94 | ||
95 | %% | |
96 | ||
50402641 IR |
97 | static void perf_pmu_error(void *format __maybe_unused, |
98 | void *scanner __maybe_unused, | |
99 | const char *msg __maybe_unused) | |
cd82a32e JO |
100 | { |
101 | } |