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