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