Home | History | Annotate | Download | only in util
      1 
      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 __maybe_unused,
     89 		    char *name __maybe_unused,
     90 		    char const *msg __maybe_unused)
     91 {
     92 }
     93