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