mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
1.3 KiB
92 lines
1.3 KiB
|
|
%parse-param {struct list_head *format} |
|
%parse-param {char *name} |
|
|
|
%{ |
|
|
|
#include <linux/compiler.h> |
|
#include <linux/list.h> |
|
#include <linux/bitmap.h> |
|
#include <string.h> |
|
#include "pmu.h" |
|
|
|
extern int perf_pmu_lex (void); |
|
|
|
#define ABORT_ON(val) \ |
|
do { \ |
|
if (val) \ |
|
YYABORT; \ |
|
} while (0) |
|
|
|
%} |
|
|
|
%token PP_CONFIG PP_CONFIG1 PP_CONFIG2 |
|
%token PP_VALUE PP_ERROR |
|
%type <num> PP_VALUE |
|
%type <bits> bit_term |
|
%type <bits> bits |
|
|
|
%union |
|
{ |
|
unsigned long num; |
|
DECLARE_BITMAP(bits, PERF_PMU_FORMAT_BITS); |
|
} |
|
|
|
%% |
|
|
|
format: |
|
format format_term |
|
| |
|
format_term |
|
|
|
format_term: |
|
PP_CONFIG ':' bits |
|
{ |
|
ABORT_ON(perf_pmu__new_format(format, name, |
|
PERF_PMU_FORMAT_VALUE_CONFIG, |
|
$3)); |
|
} |
|
| |
|
PP_CONFIG1 ':' bits |
|
{ |
|
ABORT_ON(perf_pmu__new_format(format, name, |
|
PERF_PMU_FORMAT_VALUE_CONFIG1, |
|
$3)); |
|
} |
|
| |
|
PP_CONFIG2 ':' bits |
|
{ |
|
ABORT_ON(perf_pmu__new_format(format, name, |
|
PERF_PMU_FORMAT_VALUE_CONFIG2, |
|
$3)); |
|
} |
|
|
|
bits: |
|
bits ',' bit_term |
|
{ |
|
bitmap_or($$, $1, $3, 64); |
|
} |
|
| |
|
bit_term |
|
{ |
|
memcpy($$, $1, sizeof($1)); |
|
} |
|
|
|
bit_term: |
|
PP_VALUE '-' PP_VALUE |
|
{ |
|
perf_pmu__set_format($$, $1, $3); |
|
} |
|
| |
|
PP_VALUE |
|
{ |
|
perf_pmu__set_format($$, $1, 0); |
|
} |
|
|
|
%% |
|
|
|
void perf_pmu_error(struct list_head *list __maybe_unused, |
|
char *name __maybe_unused, |
|
char const *msg __maybe_unused) |
|
{ |
|
}
|
|
|