linux/tools/perf/util/pmu.y
<<
>>
Prefs
   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
  13extern int perf_pmu_lex (void);
  14
  15#define ABORT_ON(val) \
  16do { \
  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
  37format:
  38format format_term
  39|
  40format_term
  41
  42format_term:
  43PP_CONFIG ':' bits
  44{
  45        ABORT_ON(perf_pmu__new_format(format, name,
  46                                      PERF_PMU_FORMAT_VALUE_CONFIG,
  47                                      $3));
  48}
  49|
  50PP_CONFIG1 ':' bits
  51{
  52        ABORT_ON(perf_pmu__new_format(format, name,
  53                                      PERF_PMU_FORMAT_VALUE_CONFIG1,
  54                                      $3));
  55}
  56|
  57PP_CONFIG2 ':' bits
  58{
  59        ABORT_ON(perf_pmu__new_format(format, name,
  60                                      PERF_PMU_FORMAT_VALUE_CONFIG2,
  61                                      $3));
  62}
  63
  64bits:
  65bits ',' bit_term
  66{
  67        bitmap_or($$, $1, $3, 64);
  68}
  69|
  70bit_term
  71{
  72        memcpy($$, $1, sizeof($1));
  73}
  74
  75bit_term:
  76PP_VALUE '-' PP_VALUE
  77{
  78        perf_pmu__set_format($$, $1, $3);
  79}
  80|
  81PP_VALUE
  82{
  83        perf_pmu__set_format($$, $1, 0);
  84}
  85
  86%%
  87
  88void perf_pmu_error(struct list_head *list __maybe_unused,
  89                    char *name __maybe_unused,
  90                    char const *msg __maybe_unused)
  91{
  92}
  93