util/sconfig: Add support for discontiguous FW_CONFIG fields
Sooner or later, some board was going to need extra FW_CONFIG bits for a field that was already in production, so this patch adds support for adding extra (unused) bits to a field. The extra are appended via a syntax like: `field FIELD_NAME START0 END0 | START1 END1 | START2 END2 ...` and the suffixed bits are all treated as if they are contiguous when defining option values. BUG=b:185190978 TEST=Modified volteer fw_config to the following: field AUDIO 8 10 | 29 29 | 31 31 option NONE 0 option MAX98357_ALC5682I_I2S 1 option MAX98373_ALC5682I_I2S 2 option MAX98373_ALC5682_SNDW 3 option MAX98373_ALC5682I_I2S_UP4 4 option MAX98360_ALC5682I_I2S 5 option RT1011_ALC5682I_I2S 6 option AUDIO_FOO 7 option AUDIO_BAR 8 option AUDIO_QUUX 9 option AUDIO_BLAH1 10 option AUDIO_BLAH2 15 option AUDIO_BLAH3 16 option AUDIO_BLAH4 31 end which yielded (in static_fw_config.h): FW_CONFIG_FIELD_AUDIO_MASK 0xa0000700 FW_CONFIG_FIELD_AUDIO_OPTION_NONE_VALUE 0x0 FW_CONFIG_FIELD_AUDIO_OPTION_MAX98357_ALC5682I_I2S_VALUE 0x100 FW_CONFIG_FIELD_AUDIO_OPTION_MAX98373_ALC5682I_I2S_VALUE 0x200 FW_CONFIG_FIELD_AUDIO_OPTION_MAX98373_ALC5682_SNDW_VALUE 0x300 FW_CONFIG_FIELD_AUDIO_OPTION_MAX98373_ALC5682I_I2S_UP4_VALUE 0x400 FW_CONFIG_FIELD_AUDIO_OPTION_MAX98360_ALC5682I_I2S_VALUE 0x500 FW_CONFIG_FIELD_AUDIO_OPTION_RT1011_ALC5682I_I2S_VALUE 0x600 FW_CONFIG_FIELD_AUDIO_OPTION_AUDIO_FOO_VALUE 0x700 FW_CONFIG_FIELD_AUDIO_OPTION_AUDIO_BAR_VALUE 0x20000000 FW_CONFIG_FIELD_AUDIO_OPTION_AUDIO_QUUX_VALUE 0x20000100 FW_CONFIG_FIELD_AUDIO_OPTION_AUDIO_BLAH1_VALUE 0x20000200 FW_CONFIG_FIELD_AUDIO_OPTION_AUDIO_BLAH2_VALUE 0x20000700 FW_CONFIG_FIELD_AUDIO_OPTION_AUDIO_BLAH3_VALUE 0x80000000 FW_CONFIG_FIELD_AUDIO_OPTION_AUDIO_BLAH4_VALUE 0xa0000700 Change-Id: I5ed76706347ee9642198efc77139abdc3af1b8a6 Signed-off-by: Tim Wawrzynczak <twawrzynczak@chromium.org> Reviewed-on: https://review.coreboot.org/c/coreboot/+/52747 Reviewed-by: Duncan Laurie <duncan@iceblink.org> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
54c4ecb9f2
commit
13e240c602
|
@ -121,12 +121,48 @@ Each field is defined by providing the field name and the start and end bit mark
|
|||
location in the bitmask. Field names must be at least three characters long in order to
|
||||
satisfy the sconfig parser requirements and they must be unique with non-overlapping masks.
|
||||
|
||||
field <name> <start-bit> <end-bit> [option...] end
|
||||
field <name> <start-bit> <end-bit> [option...] end
|
||||
|
||||
For single-bit fields only one number is needed:
|
||||
|
||||
field <name> <bit> [option...] end
|
||||
|
||||
A field definition can also contain multiple sets of bit masks, which can be dis-contiguous.
|
||||
They are treated as if they are contiguous when defining option values. This allows for
|
||||
extending fields even after the bits after its current masks are occupied.
|
||||
|
||||
field <name> <start-bit0> <end-bit0> | <start-bit1> <end-bit1> | ...
|
||||
|
||||
For example, if more audio options need to be supported:
|
||||
|
||||
field AUDIO 3 3
|
||||
option AUDIO_0 0
|
||||
option AUDIO_1 1
|
||||
end
|
||||
field OTHER 4 4
|
||||
...
|
||||
end
|
||||
|
||||
the following can be done:
|
||||
|
||||
field AUDIO 3 3 | 5 5
|
||||
option AUDIO_FOO 0
|
||||
option AUDIO_BLAH 1
|
||||
option AUDIO_BAR 2
|
||||
option AUDIO_BAZ 3
|
||||
end
|
||||
field OTHER 4 4
|
||||
...
|
||||
end
|
||||
|
||||
In that case, the AUDIO masks are extended like so:
|
||||
|
||||
#define FW_CONFIG_FIELD_AUDIO_MASK 0x28
|
||||
#define FW_CONFIG_FIELD_AUDIO_OPTION_AUDIO_FOO_VALUE 0x0
|
||||
#define FW_CONFIG_FIELD_AUDIO_OPTION_AUDIO_BLAH_VALUE 0x8
|
||||
#define FW_CONFIG_FIELD_AUDIO_OPTION_AUDIO_BAR_VALUE 0x20
|
||||
#define FW_CONFIG_FIELD_AUDIO_OPTION_AUDIO_BAz_VALUE 0x28
|
||||
|
||||
Each `field` definition starts a new block that can be composed of zero or more field options,
|
||||
and it is terminated with `end`.
|
||||
|
||||
|
|
|
@ -349,8 +349,8 @@ static void yynoreturn yy_fatal_error ( const char* msg );
|
|||
(yy_hold_char) = *yy_cp; \
|
||||
*yy_cp = '\0'; \
|
||||
(yy_c_buf_p) = yy_cp;
|
||||
#define YY_NUM_RULES 50
|
||||
#define YY_END_OF_BUFFER 51
|
||||
#define YY_NUM_RULES 51
|
||||
#define YY_END_OF_BUFFER 52
|
||||
/* This struct is not used in this scanner,
|
||||
but its presence is necessary. */
|
||||
struct yy_trans_info
|
||||
|
@ -358,31 +358,31 @@ struct yy_trans_info
|
|||
flex_int32_t yy_verify;
|
||||
flex_int32_t yy_nxt;
|
||||
};
|
||||
static const flex_int16_t yy_accept[206] =
|
||||
static const flex_int16_t yy_accept[207] =
|
||||
{ 0,
|
||||
0, 0, 51, 49, 1, 3, 49, 49, 49, 44,
|
||||
44, 42, 45, 49, 45, 45, 45, 45, 45, 49,
|
||||
49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
|
||||
1, 3, 49, 0, 49, 49, 0, 2, 44, 45,
|
||||
49, 49, 49, 9, 49, 49, 45, 49, 49, 49,
|
||||
49, 49, 49, 49, 49, 49, 49, 49, 36, 49,
|
||||
49, 49, 49, 49, 49, 15, 49, 49, 49, 49,
|
||||
49, 49, 49, 49, 49, 48, 48, 49, 0, 43,
|
||||
49, 49, 49, 25, 49, 49, 35, 40, 49, 49,
|
||||
49, 49, 49, 49, 22, 49, 49, 34, 49, 31,
|
||||
0, 0, 52, 50, 1, 3, 50, 50, 50, 45,
|
||||
45, 42, 46, 50, 46, 46, 46, 46, 46, 50,
|
||||
50, 50, 50, 50, 50, 50, 50, 50, 50, 43,
|
||||
50, 1, 3, 50, 0, 50, 50, 0, 2, 45,
|
||||
46, 50, 50, 50, 9, 50, 50, 46, 50, 50,
|
||||
50, 50, 50, 50, 50, 50, 50, 50, 50, 36,
|
||||
50, 50, 50, 50, 50, 50, 15, 50, 50, 50,
|
||||
50, 50, 50, 50, 50, 50, 49, 49, 50, 0,
|
||||
44, 50, 50, 50, 25, 50, 50, 35, 40, 50,
|
||||
50, 50, 50, 50, 50, 22, 50, 50, 34, 50,
|
||||
|
||||
49, 49, 16, 49, 19, 21, 49, 8, 49, 49,
|
||||
29, 49, 30, 7, 49, 0, 46, 49, 4, 49,
|
||||
49, 49, 32, 49, 49, 49, 33, 49, 49, 49,
|
||||
49, 49, 28, 49, 49, 49, 49, 49, 47, 47,
|
||||
6, 49, 49, 49, 12, 49, 49, 49, 49, 49,
|
||||
23, 49, 49, 14, 49, 49, 49, 49, 5, 26,
|
||||
49, 49, 17, 49, 20, 49, 13, 49, 49, 49,
|
||||
49, 49, 27, 38, 49, 49, 49, 49, 49, 49,
|
||||
49, 49, 49, 10, 49, 49, 49, 11, 49, 18,
|
||||
49, 49, 49, 37, 49, 49, 24, 49, 39, 49,
|
||||
31, 50, 50, 16, 50, 19, 21, 50, 8, 50,
|
||||
50, 29, 50, 30, 7, 50, 0, 47, 50, 4,
|
||||
50, 50, 50, 32, 50, 50, 50, 33, 50, 50,
|
||||
50, 50, 50, 28, 50, 50, 50, 50, 50, 48,
|
||||
48, 6, 50, 50, 50, 12, 50, 50, 50, 50,
|
||||
50, 23, 50, 50, 14, 50, 50, 50, 50, 5,
|
||||
26, 50, 50, 17, 50, 20, 50, 13, 50, 50,
|
||||
50, 50, 50, 27, 38, 50, 50, 50, 50, 50,
|
||||
50, 50, 50, 50, 10, 50, 50, 50, 11, 50,
|
||||
18, 50, 50, 50, 37, 50, 50, 24, 50, 39,
|
||||
|
||||
49, 49, 49, 41, 0
|
||||
50, 50, 50, 50, 41, 0
|
||||
} ;
|
||||
|
||||
static const YY_CHAR yy_ec[256] =
|
||||
|
@ -400,7 +400,7 @@ static const YY_CHAR yy_ec[256] =
|
|||
|
||||
21, 22, 23, 24, 25, 1, 1, 26, 27, 28,
|
||||
29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
|
||||
39, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
39, 1, 1, 40, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
|
@ -417,146 +417,146 @@ static const YY_CHAR yy_ec[256] =
|
|||
1, 1, 1, 1, 1
|
||||
} ;
|
||||
|
||||
static const YY_CHAR yy_meta[40] =
|
||||
static const YY_CHAR yy_meta[41] =
|
||||
{ 0,
|
||||
1, 2, 2, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1
|
||||
} ;
|
||||
|
||||
static const flex_int16_t yy_base[213] =
|
||||
static const flex_int16_t yy_base[214] =
|
||||
{ 0,
|
||||
0, 0, 278, 0, 275, 279, 273, 38, 42, 39,
|
||||
237, 0, 45, 260, 55, 59, 83, 65, 62, 54,
|
||||
248, 68, 25, 59, 73, 86, 251, 81, 238, 0,
|
||||
268, 279, 77, 264, 104, 117, 265, 279, 0, 114,
|
||||
117, 252, 241, 0, 240, 229, 123, 236, 231, 241,
|
||||
230, 238, 242, 229, 231, 235, 235, 229, 235, 220,
|
||||
220, 230, 220, 222, 224, 0, 211, 219, 213, 213,
|
||||
118, 223, 215, 221, 92, 0, 279, 140, 233, 0,
|
||||
226, 219, 205, 218, 208, 215, 0, 0, 206, 204,
|
||||
210, 207, 198, 206, 0, 204, 194, 0, 198, 0,
|
||||
0, 0, 279, 0, 276, 280, 274, 39, 43, 40,
|
||||
238, 0, 46, 261, 56, 60, 64, 67, 72, 56,
|
||||
249, 74, 26, 61, 77, 82, 252, 81, 239, 0,
|
||||
0, 269, 280, 89, 265, 110, 115, 266, 280, 0,
|
||||
112, 115, 253, 242, 0, 241, 230, 121, 237, 232,
|
||||
242, 231, 239, 243, 230, 232, 236, 236, 230, 236,
|
||||
221, 221, 231, 221, 223, 225, 0, 212, 220, 214,
|
||||
214, 116, 224, 216, 222, 122, 0, 280, 139, 234,
|
||||
0, 227, 220, 206, 219, 209, 216, 0, 0, 207,
|
||||
205, 211, 208, 199, 207, 0, 205, 195, 0, 199,
|
||||
|
||||
202, 192, 0, 195, 0, 0, 201, 0, 193, 192,
|
||||
0, 183, 0, 0, 210, 209, 0, 180, 0, 193,
|
||||
192, 185, 0, 189, 179, 175, 0, 185, 173, 179,
|
||||
184, 185, 0, 172, 179, 166, 169, 158, 0, 279,
|
||||
0, 170, 174, 166, 0, 165, 167, 163, 165, 170,
|
||||
0, 154, 159, 0, 152, 152, 151, 148, 0, 0,
|
||||
160, 162, 0, 146, 163, 149, 0, 156, 160, 141,
|
||||
141, 148, 0, 0, 147, 126, 125, 123, 134, 120,
|
||||
130, 120, 112, 0, 124, 122, 127, 0, 116, 0,
|
||||
117, 119, 101, 0, 93, 97, 0, 86, 0, 74,
|
||||
0, 203, 193, 0, 196, 0, 0, 202, 0, 194,
|
||||
193, 0, 184, 0, 0, 211, 210, 0, 181, 0,
|
||||
194, 193, 186, 0, 190, 180, 176, 0, 186, 174,
|
||||
180, 185, 186, 0, 173, 180, 167, 170, 159, 0,
|
||||
280, 0, 171, 175, 167, 0, 166, 168, 164, 166,
|
||||
171, 0, 155, 160, 0, 153, 153, 152, 149, 0,
|
||||
0, 161, 163, 0, 147, 164, 150, 0, 157, 161,
|
||||
142, 142, 149, 0, 0, 148, 140, 139, 137, 135,
|
||||
121, 131, 121, 113, 0, 125, 123, 128, 0, 117,
|
||||
0, 118, 121, 113, 0, 97, 105, 0, 88, 0,
|
||||
|
||||
64, 45, 46, 0, 279, 48, 159, 161, 163, 165,
|
||||
167, 169
|
||||
78, 66, 37, 47, 0, 280, 49, 157, 159, 161,
|
||||
163, 165, 167
|
||||
} ;
|
||||
|
||||
static const flex_int16_t yy_def[213] =
|
||||
static const flex_int16_t yy_def[214] =
|
||||
{ 0,
|
||||
205, 1, 205, 206, 205, 205, 206, 207, 208, 206,
|
||||
10, 206, 10, 206, 10, 10, 10, 10, 10, 206,
|
||||
206, 206, 206, 206, 206, 206, 206, 206, 206, 206,
|
||||
205, 205, 207, 209, 210, 208, 211, 205, 10, 10,
|
||||
10, 206, 206, 206, 206, 206, 10, 206, 206, 206,
|
||||
206, 206, 206, 206, 206, 206, 206, 206, 206, 206,
|
||||
206, 206, 206, 206, 206, 206, 206, 206, 206, 206,
|
||||
206, 206, 206, 206, 206, 206, 205, 210, 212, 41,
|
||||
206, 206, 206, 206, 206, 206, 206, 206, 206, 206,
|
||||
206, 206, 206, 206, 206, 206, 206, 206, 206, 206,
|
||||
206, 1, 206, 207, 206, 206, 207, 208, 209, 207,
|
||||
10, 207, 10, 207, 10, 10, 10, 10, 10, 207,
|
||||
207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
|
||||
207, 206, 206, 208, 210, 211, 209, 212, 206, 10,
|
||||
10, 10, 207, 207, 207, 207, 207, 10, 207, 207,
|
||||
207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
|
||||
207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
|
||||
207, 207, 207, 207, 207, 207, 207, 206, 211, 213,
|
||||
42, 207, 207, 207, 207, 207, 207, 207, 207, 207,
|
||||
207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
|
||||
|
||||
206, 206, 206, 206, 206, 206, 206, 206, 206, 206,
|
||||
206, 206, 206, 206, 206, 205, 206, 206, 206, 206,
|
||||
206, 206, 206, 206, 206, 206, 206, 206, 206, 206,
|
||||
206, 206, 206, 206, 206, 206, 206, 206, 206, 205,
|
||||
206, 206, 206, 206, 206, 206, 206, 206, 206, 206,
|
||||
206, 206, 206, 206, 206, 206, 206, 206, 206, 206,
|
||||
206, 206, 206, 206, 206, 206, 206, 206, 206, 206,
|
||||
206, 206, 206, 206, 206, 206, 206, 206, 206, 206,
|
||||
206, 206, 206, 206, 206, 206, 206, 206, 206, 206,
|
||||
206, 206, 206, 206, 206, 206, 206, 206, 206, 206,
|
||||
207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
|
||||
207, 207, 207, 207, 207, 207, 206, 207, 207, 207,
|
||||
207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
|
||||
207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
|
||||
206, 207, 207, 207, 207, 207, 207, 207, 207, 207,
|
||||
207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
|
||||
207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
|
||||
207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
|
||||
207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
|
||||
207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
|
||||
|
||||
206, 206, 206, 206, 0, 205, 205, 205, 205, 205,
|
||||
205, 205
|
||||
207, 207, 207, 207, 207, 0, 206, 206, 206, 206,
|
||||
206, 206, 206
|
||||
} ;
|
||||
|
||||
static const flex_int16_t yy_nxt[319] =
|
||||
static const flex_int16_t yy_nxt[321] =
|
||||
{ 0,
|
||||
4, 5, 6, 7, 8, 9, 10, 11, 10, 12,
|
||||
13, 13, 14, 4, 4, 4, 15, 13, 16, 17,
|
||||
18, 19, 20, 21, 22, 23, 24, 4, 25, 26,
|
||||
4, 27, 28, 4, 29, 4, 4, 4, 4, 34,
|
||||
34, 61, 35, 37, 38, 39, 39, 39, 30, 40,
|
||||
40, 40, 40, 40, 62, 40, 40, 40, 40, 40,
|
||||
40, 40, 40, 40, 204, 40, 40, 40, 40, 40,
|
||||
40, 40, 40, 40, 54, 63, 57, 203, 34, 34,
|
||||
43, 76, 45, 55, 202, 64, 52, 44, 46, 40,
|
||||
40, 40, 50, 201, 65, 58, 59, 51, 53, 60,
|
||||
4, 27, 28, 4, 29, 4, 4, 4, 4, 30,
|
||||
35, 35, 62, 36, 38, 39, 40, 40, 40, 31,
|
||||
41, 41, 41, 41, 41, 63, 41, 41, 41, 41,
|
||||
41, 41, 41, 41, 41, 205, 41, 41, 41, 204,
|
||||
41, 41, 41, 41, 41, 41, 55, 64, 41, 41,
|
||||
41, 44, 58, 46, 48, 56, 203, 65, 45, 47,
|
||||
35, 35, 49, 77, 51, 50, 53, 202, 66, 52,
|
||||
|
||||
66, 200, 67, 47, 68, 79, 79, 72, 30, 113,
|
||||
73, 48, 114, 69, 49, 74, 199, 70, 37, 38,
|
||||
40, 40, 40, 80, 80, 80, 198, 80, 80, 40,
|
||||
40, 40, 197, 80, 80, 80, 80, 80, 80, 108,
|
||||
109, 79, 79, 196, 115, 195, 194, 193, 192, 191,
|
||||
190, 189, 188, 187, 186, 185, 184, 183, 85, 33,
|
||||
33, 36, 36, 34, 34, 78, 78, 37, 37, 79,
|
||||
79, 182, 181, 180, 179, 178, 177, 176, 175, 174,
|
||||
173, 172, 171, 170, 169, 168, 167, 166, 165, 164,
|
||||
163, 162, 161, 160, 159, 158, 157, 156, 155, 154,
|
||||
69, 59, 60, 201, 67, 61, 68, 73, 54, 70,
|
||||
74, 80, 80, 71, 31, 75, 38, 39, 41, 41,
|
||||
41, 81, 81, 81, 200, 81, 81, 41, 41, 41,
|
||||
199, 81, 81, 81, 81, 81, 81, 109, 110, 114,
|
||||
80, 80, 115, 116, 198, 197, 196, 195, 194, 193,
|
||||
192, 191, 190, 189, 188, 187, 86, 34, 34, 37,
|
||||
37, 35, 35, 79, 79, 38, 38, 80, 80, 186,
|
||||
185, 184, 183, 182, 181, 180, 179, 178, 177, 176,
|
||||
175, 174, 173, 172, 171, 170, 169, 168, 167, 166,
|
||||
165, 164, 163, 162, 161, 160, 159, 158, 157, 156,
|
||||
|
||||
153, 152, 151, 150, 149, 148, 147, 146, 145, 144,
|
||||
143, 142, 141, 140, 139, 138, 137, 136, 135, 134,
|
||||
133, 132, 131, 130, 129, 128, 127, 126, 125, 124,
|
||||
123, 122, 121, 120, 119, 118, 117, 116, 112, 111,
|
||||
110, 107, 106, 105, 104, 103, 102, 101, 100, 99,
|
||||
98, 97, 96, 95, 94, 93, 92, 91, 90, 89,
|
||||
88, 87, 86, 84, 83, 82, 81, 38, 77, 31,
|
||||
75, 71, 56, 42, 41, 32, 31, 205, 3, 205,
|
||||
205, 205, 205, 205, 205, 205, 205, 205, 205, 205,
|
||||
205, 205, 205, 205, 205, 205, 205, 205, 205, 205,
|
||||
155, 154, 153, 152, 151, 150, 149, 148, 147, 146,
|
||||
145, 144, 143, 142, 141, 140, 139, 138, 137, 136,
|
||||
135, 134, 133, 132, 131, 130, 129, 128, 127, 126,
|
||||
125, 124, 123, 122, 121, 120, 119, 118, 117, 113,
|
||||
112, 111, 108, 107, 106, 105, 104, 103, 102, 101,
|
||||
100, 99, 98, 97, 96, 95, 94, 93, 92, 91,
|
||||
90, 89, 88, 87, 85, 84, 83, 82, 39, 78,
|
||||
32, 76, 72, 57, 43, 42, 33, 32, 206, 3,
|
||||
206, 206, 206, 206, 206, 206, 206, 206, 206, 206,
|
||||
206, 206, 206, 206, 206, 206, 206, 206, 206, 206,
|
||||
|
||||
205, 205, 205, 205, 205, 205, 205, 205, 205, 205,
|
||||
205, 205, 205, 205, 205, 205, 205, 205
|
||||
206, 206, 206, 206, 206, 206, 206, 206, 206, 206,
|
||||
206, 206, 206, 206, 206, 206, 206, 206, 206, 206
|
||||
} ;
|
||||
|
||||
static const flex_int16_t yy_chk[319] =
|
||||
static const flex_int16_t yy_chk[321] =
|
||||
{ 0,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 8,
|
||||
8, 23, 8, 9, 9, 10, 10, 10, 206, 10,
|
||||
10, 13, 13, 13, 23, 10, 10, 10, 10, 10,
|
||||
10, 15, 15, 15, 203, 16, 16, 16, 19, 19,
|
||||
19, 18, 18, 18, 20, 24, 22, 202, 33, 33,
|
||||
15, 33, 16, 20, 201, 24, 19, 15, 16, 17,
|
||||
17, 17, 18, 200, 25, 22, 22, 18, 19, 22,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
8, 8, 23, 8, 9, 9, 10, 10, 10, 207,
|
||||
10, 10, 13, 13, 13, 23, 10, 10, 10, 10,
|
||||
10, 10, 15, 15, 15, 204, 16, 16, 16, 203,
|
||||
17, 17, 17, 18, 18, 18, 20, 24, 19, 19,
|
||||
19, 15, 22, 16, 17, 20, 202, 24, 15, 16,
|
||||
34, 34, 17, 34, 18, 17, 19, 201, 25, 18,
|
||||
|
||||
25, 198, 25, 17, 26, 35, 35, 28, 35, 75,
|
||||
28, 17, 75, 26, 17, 28, 196, 26, 36, 36,
|
||||
40, 40, 40, 41, 41, 41, 195, 41, 41, 47,
|
||||
47, 47, 193, 41, 41, 41, 41, 41, 41, 71,
|
||||
71, 78, 78, 192, 78, 191, 189, 187, 186, 185,
|
||||
183, 182, 181, 180, 179, 178, 177, 176, 47, 207,
|
||||
207, 208, 208, 209, 209, 210, 210, 211, 211, 212,
|
||||
212, 175, 172, 171, 170, 169, 168, 166, 165, 164,
|
||||
162, 161, 158, 157, 156, 155, 153, 152, 150, 149,
|
||||
148, 147, 146, 144, 143, 142, 138, 137, 136, 135,
|
||||
26, 22, 22, 199, 25, 22, 25, 28, 19, 26,
|
||||
28, 36, 36, 26, 36, 28, 37, 37, 41, 41,
|
||||
41, 42, 42, 42, 197, 42, 42, 48, 48, 48,
|
||||
196, 42, 42, 42, 42, 42, 42, 72, 72, 76,
|
||||
79, 79, 76, 79, 194, 193, 192, 190, 188, 187,
|
||||
186, 184, 183, 182, 181, 180, 48, 208, 208, 209,
|
||||
209, 210, 210, 211, 211, 212, 212, 213, 213, 179,
|
||||
178, 177, 176, 173, 172, 171, 170, 169, 167, 166,
|
||||
165, 163, 162, 159, 158, 157, 156, 154, 153, 151,
|
||||
150, 149, 148, 147, 145, 144, 143, 139, 138, 137,
|
||||
|
||||
134, 132, 131, 130, 129, 128, 126, 125, 124, 122,
|
||||
121, 120, 118, 116, 115, 112, 110, 109, 107, 104,
|
||||
102, 101, 99, 97, 96, 94, 93, 92, 91, 90,
|
||||
89, 86, 85, 84, 83, 82, 81, 79, 74, 73,
|
||||
72, 70, 69, 68, 67, 65, 64, 63, 62, 61,
|
||||
60, 59, 58, 57, 56, 55, 54, 53, 52, 51,
|
||||
50, 49, 48, 46, 45, 43, 42, 37, 34, 31,
|
||||
29, 27, 21, 14, 11, 7, 5, 3, 205, 205,
|
||||
205, 205, 205, 205, 205, 205, 205, 205, 205, 205,
|
||||
205, 205, 205, 205, 205, 205, 205, 205, 205, 205,
|
||||
136, 135, 133, 132, 131, 130, 129, 127, 126, 125,
|
||||
123, 122, 121, 119, 117, 116, 113, 111, 110, 108,
|
||||
105, 103, 102, 100, 98, 97, 95, 94, 93, 92,
|
||||
91, 90, 87, 86, 85, 84, 83, 82, 80, 75,
|
||||
74, 73, 71, 70, 69, 68, 66, 65, 64, 63,
|
||||
62, 61, 60, 59, 58, 57, 56, 55, 54, 53,
|
||||
52, 51, 50, 49, 47, 46, 44, 43, 38, 35,
|
||||
32, 29, 27, 21, 14, 11, 7, 5, 3, 206,
|
||||
206, 206, 206, 206, 206, 206, 206, 206, 206, 206,
|
||||
206, 206, 206, 206, 206, 206, 206, 206, 206, 206,
|
||||
|
||||
205, 205, 205, 205, 205, 205, 205, 205, 205, 205,
|
||||
205, 205, 205, 205, 205, 205, 205, 205
|
||||
206, 206, 206, 206, 206, 206, 206, 206, 206, 206,
|
||||
206, 206, 206, 206, 206, 206, 206, 206, 206, 206
|
||||
} ;
|
||||
|
||||
static yy_state_type yy_last_accepting_state;
|
||||
|
@ -821,13 +821,13 @@ yy_match:
|
|||
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
|
||||
{
|
||||
yy_current_state = (int) yy_def[yy_current_state];
|
||||
if ( yy_current_state >= 206 )
|
||||
if ( yy_current_state >= 207 )
|
||||
yy_c = yy_meta[yy_c];
|
||||
}
|
||||
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
|
||||
++yy_cp;
|
||||
}
|
||||
while ( yy_base[yy_current_state] != 279 );
|
||||
while ( yy_base[yy_current_state] != 280 );
|
||||
|
||||
yy_find_action:
|
||||
yy_act = yy_accept[yy_current_state];
|
||||
|
@ -1023,7 +1023,7 @@ YY_RULE_SETUP
|
|||
YY_BREAK
|
||||
case 43:
|
||||
YY_RULE_SETUP
|
||||
{yylval.string = malloc(yyleng+1); strncpy(yylval.string, yytext, yyleng); yylval.string[yyleng]='\0'; return(NUMBER);}
|
||||
{return(PIPE);}
|
||||
YY_BREAK
|
||||
case 44:
|
||||
YY_RULE_SETUP
|
||||
|
@ -1035,12 +1035,11 @@ YY_RULE_SETUP
|
|||
YY_BREAK
|
||||
case 46:
|
||||
YY_RULE_SETUP
|
||||
{yylval.string = malloc(yyleng+1); strncpy(yylval.string, yytext, yyleng); yylval.string[yyleng]='\0'; return(PCIINT);}
|
||||
{yylval.string = malloc(yyleng+1); strncpy(yylval.string, yytext, yyleng); yylval.string[yyleng]='\0'; return(NUMBER);}
|
||||
YY_BREAK
|
||||
case 47:
|
||||
/* rule 47 can match eol */
|
||||
YY_RULE_SETUP
|
||||
{yylval.string = malloc(yyleng-1); strncpy(yylval.string, yytext+1, yyleng-2); yylval.string[yyleng-2]='\0'; return(STRING);}
|
||||
{yylval.string = malloc(yyleng+1); strncpy(yylval.string, yytext, yyleng); yylval.string[yyleng]='\0'; return(PCIINT);}
|
||||
YY_BREAK
|
||||
case 48:
|
||||
/* rule 48 can match eol */
|
||||
|
@ -1048,10 +1047,15 @@ YY_RULE_SETUP
|
|||
{yylval.string = malloc(yyleng-1); strncpy(yylval.string, yytext+1, yyleng-2); yylval.string[yyleng-2]='\0'; return(STRING);}
|
||||
YY_BREAK
|
||||
case 49:
|
||||
/* rule 49 can match eol */
|
||||
YY_RULE_SETUP
|
||||
{yylval.string = malloc(yyleng-1); strncpy(yylval.string, yytext+1, yyleng-2); yylval.string[yyleng-2]='\0'; return(STRING);}
|
||||
YY_BREAK
|
||||
case 50:
|
||||
YY_RULE_SETUP
|
||||
{yylval.string = malloc(yyleng+1); strncpy(yylval.string, yytext, yyleng); yylval.string[yyleng]='\0'; return(STRING);}
|
||||
YY_BREAK
|
||||
case 50:
|
||||
case 51:
|
||||
YY_RULE_SETUP
|
||||
ECHO;
|
||||
YY_BREAK
|
||||
|
@ -1351,7 +1355,7 @@ static int yy_get_next_buffer (void)
|
|||
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
|
||||
{
|
||||
yy_current_state = (int) yy_def[yy_current_state];
|
||||
if ( yy_current_state >= 206 )
|
||||
if ( yy_current_state >= 207 )
|
||||
yy_c = yy_meta[yy_c];
|
||||
}
|
||||
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
|
||||
|
@ -1379,11 +1383,11 @@ static int yy_get_next_buffer (void)
|
|||
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
|
||||
{
|
||||
yy_current_state = (int) yy_def[yy_current_state];
|
||||
if ( yy_current_state >= 206 )
|
||||
if ( yy_current_state >= 207 )
|
||||
yy_c = yy_meta[yy_c];
|
||||
}
|
||||
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
|
||||
yy_is_jam = (yy_current_state == 205);
|
||||
yy_is_jam = (yy_current_state == 206);
|
||||
|
||||
return yy_is_jam ? 0 : yy_current_state;
|
||||
}
|
||||
|
|
|
@ -398,42 +398,77 @@ static void append_fw_config_field(struct fw_config_field *add)
|
|||
}
|
||||
}
|
||||
|
||||
struct fw_config_field *new_fw_config_field(const char *name,
|
||||
unsigned int start_bit, unsigned int end_bit)
|
||||
void append_fw_config_bits(struct fw_config_field_bits **bits,
|
||||
unsigned int start_bit, unsigned int end_bit)
|
||||
{
|
||||
struct fw_config_field_bits *new_bits = S_ALLOC(sizeof(*new_bits));
|
||||
new_bits->start_bit = start_bit;
|
||||
new_bits->end_bit = end_bit;
|
||||
new_bits->next = NULL;
|
||||
|
||||
if (*bits == NULL) {
|
||||
*bits = new_bits;
|
||||
return;
|
||||
}
|
||||
|
||||
struct fw_config_field_bits *tmp = *bits;
|
||||
while (tmp->next)
|
||||
tmp = tmp->next;
|
||||
|
||||
tmp->next = new_bits;
|
||||
}
|
||||
|
||||
int fw_config_masks_overlap(struct fw_config_field *existing,
|
||||
unsigned int start_bit, unsigned int end_bit)
|
||||
{
|
||||
struct fw_config_field_bits *bits = existing->bits;
|
||||
while (bits) {
|
||||
if (start_bit <= bits->end_bit && end_bit >= bits->start_bit) {
|
||||
printf("ERROR: fw_config field [%u-%u] overlaps %s[%u-%u]\n",
|
||||
start_bit, end_bit,
|
||||
existing->name, bits->start_bit, bits->end_bit);
|
||||
return 1;
|
||||
}
|
||||
bits = bits->next;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct fw_config_field *new_fw_config_field(const char *name, struct fw_config_field_bits *bits)
|
||||
{
|
||||
struct fw_config_field *field = find_fw_config_field(name);
|
||||
|
||||
/* Check that field is within 64 bits. */
|
||||
if (start_bit > end_bit || end_bit > 63) {
|
||||
printf("ERROR: fw_config field %s has invalid range %u-%u\n", name,
|
||||
start_bit, end_bit);
|
||||
exit(1);
|
||||
}
|
||||
struct fw_config_field_bits *tmp;
|
||||
|
||||
/* Don't allow re-defining a field, only adding new fields. */
|
||||
if (field) {
|
||||
printf("ERROR: fw_config field %s[%u-%u] already exists with range %u-%u\n",
|
||||
name, start_bit, end_bit, field->start_bit, field->end_bit);
|
||||
printf("ERROR: fw_config field %s already exists\n", name);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/* Check for overlap with an existing field. */
|
||||
field = fw_config_fields;
|
||||
while (field) {
|
||||
/* Check if the mask overlaps. */
|
||||
if (start_bit <= field->end_bit && end_bit >= field->start_bit) {
|
||||
printf("ERROR: fw_config field %s[%u-%u] overlaps %s[%u-%u]\n",
|
||||
name, start_bit, end_bit,
|
||||
field->name, field->start_bit, field->end_bit);
|
||||
/* Check that each field is within 64 bits. */
|
||||
tmp = bits;
|
||||
while (tmp) {
|
||||
if (tmp->start_bit > tmp->end_bit || tmp->end_bit > 63) {
|
||||
printf("ERROR: fw_config field %s has invalid range %u-%u\n", field->name,
|
||||
tmp->start_bit, tmp->end_bit);
|
||||
exit(1);
|
||||
}
|
||||
field = field->next;
|
||||
|
||||
/* Check for overlap with an existing field. */
|
||||
struct fw_config_field *existing = fw_config_fields;
|
||||
while (existing) {
|
||||
if (fw_config_masks_overlap(existing, tmp->start_bit, tmp->end_bit))
|
||||
exit(1);
|
||||
existing = existing->next;
|
||||
}
|
||||
|
||||
tmp = tmp->next;
|
||||
}
|
||||
|
||||
field = S_ALLOC(sizeof(*field));
|
||||
field->name = name;
|
||||
field->start_bit = start_bit;
|
||||
field->end_bit = end_bit;
|
||||
field->bits = bits;
|
||||
append_fw_config_field(field);
|
||||
|
||||
return field;
|
||||
|
@ -453,13 +488,25 @@ static void append_fw_config_option_to_field(struct fw_config_field *field,
|
|||
}
|
||||
}
|
||||
|
||||
static uint64_t calc_max_field_value(const struct fw_config_field *field)
|
||||
{
|
||||
unsigned int bit_count = 0;
|
||||
|
||||
const struct fw_config_field_bits *bits = field->bits;
|
||||
while (bits) {
|
||||
bit_count += 1 + bits->end_bit - bits->start_bit;
|
||||
bits = bits->next;
|
||||
};
|
||||
|
||||
return (1ull << bit_count) - 1ull;
|
||||
}
|
||||
|
||||
void add_fw_config_option(struct fw_config_field *field, const char *name, uint64_t value)
|
||||
{
|
||||
struct fw_config_option *option;
|
||||
uint64_t field_max_value;
|
||||
|
||||
/* Check that option value fits within field mask. */
|
||||
field_max_value = (1ull << (1ull + field->end_bit - field->start_bit)) - 1ull;
|
||||
uint64_t field_max_value = calc_max_field_value(field);
|
||||
if (value > field_max_value) {
|
||||
printf("ERROR: fw_config option %s:%s value %" PRIx64 " larger than field max %"
|
||||
PRIx64 "\n",
|
||||
|
@ -525,6 +572,46 @@ void add_fw_config_probe(struct bus *bus, const char *field, const char *option)
|
|||
append_fw_config_probe_to_dev(bus->dev, probe);
|
||||
}
|
||||
|
||||
static uint64_t compute_fw_config_mask(const struct fw_config_field_bits *bits)
|
||||
{
|
||||
uint64_t mask = 0;
|
||||
|
||||
while (bits) {
|
||||
/* Compute mask from start and end bit. */
|
||||
uint64_t tmp = ((1ull << (1ull + bits->end_bit - bits->start_bit)) - 1ull);
|
||||
tmp <<= bits->start_bit;
|
||||
mask |= tmp;
|
||||
bits = bits->next;
|
||||
}
|
||||
|
||||
return mask;
|
||||
}
|
||||
|
||||
static unsigned int bits_width(const struct fw_config_field_bits *bits)
|
||||
{
|
||||
return 1 + bits->end_bit - bits->start_bit;
|
||||
}
|
||||
|
||||
static uint64_t calc_option_value(const struct fw_config_field *field,
|
||||
const struct fw_config_option *option)
|
||||
{
|
||||
uint64_t value = 0;
|
||||
uint64_t original = option->value;
|
||||
|
||||
struct fw_config_field_bits *bits = field->bits;
|
||||
while (bits) {
|
||||
const unsigned int width = bits_width(bits);
|
||||
const uint64_t orig_mask = (1ull << width) - 1ull;
|
||||
const uint64_t orig = (original & orig_mask);
|
||||
value |= (orig << bits->start_bit);
|
||||
|
||||
original >>= width;
|
||||
bits = bits->next;
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
static void emit_fw_config(FILE *fil)
|
||||
{
|
||||
struct fw_config_field *field = fw_config_fields;
|
||||
|
@ -539,20 +626,16 @@ static void emit_fw_config(FILE *fil)
|
|||
fprintf(fil, "#define FW_CONFIG_FIELD_%s_NAME \"%s\"\n",
|
||||
field->name, field->name);
|
||||
|
||||
/* Compute mask from start and end bit. */
|
||||
mask = ((1ull << (1ull + field->end_bit - field->start_bit)) - 1ull);
|
||||
mask <<= field->start_bit;
|
||||
|
||||
mask = compute_fw_config_mask(field->bits);
|
||||
fprintf(fil, "#define FW_CONFIG_FIELD_%s_MASK 0x%" PRIx64 "\n",
|
||||
field->name, mask);
|
||||
|
||||
while (option) {
|
||||
const uint64_t value = calc_option_value(field, option);
|
||||
fprintf(fil, "#define FW_CONFIG_FIELD_%s_OPTION_%s_NAME \"%s\"\n",
|
||||
field->name, option->name, option->name);
|
||||
fprintf(fil, "#define FW_CONFIG_FIELD_%s_OPTION_%s_VALUE 0x%"
|
||||
PRIx64 "\n", field->name, option->name,
|
||||
option->value << field->start_bit);
|
||||
|
||||
PRIx64 "\n", field->name, option->name, value);
|
||||
option = option->next;
|
||||
}
|
||||
|
||||
|
@ -1879,6 +1962,7 @@ int main(int argc, char **argv)
|
|||
if (override_devtree)
|
||||
parse_override_devicetree(override_devtree, &override_root_dev);
|
||||
|
||||
|
||||
FILE *autogen = fopen(outputc, "w");
|
||||
if (!autogen) {
|
||||
fprintf(stderr, "Could not open file '%s' for writing: ",
|
||||
|
|
|
@ -35,11 +35,18 @@ struct fw_config_option {
|
|||
uint64_t value;
|
||||
struct fw_config_option *next;
|
||||
};
|
||||
|
||||
struct fw_config_field_bits;
|
||||
struct fw_config_field_bits {
|
||||
unsigned int start_bit;
|
||||
unsigned int end_bit;
|
||||
struct fw_config_field_bits *next;
|
||||
};
|
||||
|
||||
struct fw_config_field;
|
||||
struct fw_config_field {
|
||||
const char *name;
|
||||
unsigned int start_bit;
|
||||
unsigned int end_bit;
|
||||
struct fw_config_field_bits *bits;
|
||||
struct fw_config_field *next;
|
||||
struct fw_config_option *options;
|
||||
};
|
||||
|
@ -210,10 +217,15 @@ void add_reference(struct chip_instance *chip, char *name, char *alias);
|
|||
|
||||
struct fw_config_field *get_fw_config_field(const char *name);
|
||||
|
||||
struct fw_config_field *new_fw_config_field(const char *name,
|
||||
unsigned int start_bit, unsigned int end_bit);
|
||||
void add_fw_config_field_bits(struct fw_config_field *field,
|
||||
unsigned int start_bit, unsigned int end_bit);
|
||||
|
||||
struct fw_config_field *new_fw_config_field(const char *name, struct fw_config_field_bits *bits);
|
||||
|
||||
void add_fw_config_option(struct fw_config_field *field, const char *name,
|
||||
uint64_t value);
|
||||
|
||||
void add_fw_config_probe(struct bus *bus, const char *field, const char *option);
|
||||
|
||||
void append_fw_config_bits(struct fw_config_field_bits **bits,
|
||||
unsigned int start_bit, unsigned int end_bit);
|
||||
|
|
|
@ -50,6 +50,7 @@ subsystemid {return(SUBSYSTEMID);}
|
|||
end {return(END);}
|
||||
smbios_slot_desc {return(SLOT_DESC);}
|
||||
= {return(EQUALS);}
|
||||
\| {return(PIPE);}
|
||||
0x[0-9a-fA-F.]+ {yylval.string = malloc(yyleng+1); strncpy(yylval.string, yytext, yyleng); yylval.string[yyleng]='\0'; return(NUMBER);}
|
||||
[0-9.]+ {yylval.string = malloc(yyleng+1); strncpy(yylval.string, yytext, yyleng); yylval.string[yyleng]='\0'; return(NUMBER);}
|
||||
[0-9a-fA-F.]+ {yylval.string = malloc(yyleng+1); strncpy(yylval.string, yytext, yyleng); yylval.string[yyleng]='\0'; return(NUMBER);}
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
/* A Bison parser, made by GNU Bison 3.7.2. */
|
||||
/* A Bison parser, made by GNU Bison 3.7.5. */
|
||||
|
||||
/* Bison implementation for Yacc-like parsers in C
|
||||
|
||||
Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation,
|
||||
Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
|
||||
Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
|
@ -45,11 +45,11 @@
|
|||
define necessary library symbols; they are noted "INFRINGES ON
|
||||
USER NAME SPACE" below. */
|
||||
|
||||
/* Identify Bison output. */
|
||||
#define YYBISON 1
|
||||
/* Identify Bison output, and Bison version. */
|
||||
#define YYBISON 30705
|
||||
|
||||
/* Bison version. */
|
||||
#define YYBISON_VERSION "3.7.2"
|
||||
/* Bison version string. */
|
||||
#define YYBISON_VERSION "3.7.5"
|
||||
|
||||
/* Skeleton name. */
|
||||
#define YYSKELETON_NAME "yacc.c"
|
||||
|
@ -80,6 +80,7 @@ void yyerror(const char *s);
|
|||
static struct bus *cur_parent;
|
||||
static struct chip_instance *cur_chip_instance;
|
||||
static struct fw_config_field *cur_field;
|
||||
static struct fw_config_field_bits *cur_bits;
|
||||
|
||||
|
||||
|
||||
|
@ -155,32 +156,35 @@ enum yysymbol_kind_t
|
|||
YYSYMBOL_FW_CONFIG_FIELD = 43, /* FW_CONFIG_FIELD */
|
||||
YYSYMBOL_FW_CONFIG_OPTION = 44, /* FW_CONFIG_OPTION */
|
||||
YYSYMBOL_FW_CONFIG_PROBE = 45, /* FW_CONFIG_PROBE */
|
||||
YYSYMBOL_YYACCEPT = 46, /* $accept */
|
||||
YYSYMBOL_devtree = 47, /* devtree */
|
||||
YYSYMBOL_chipchildren = 48, /* chipchildren */
|
||||
YYSYMBOL_devicechildren = 49, /* devicechildren */
|
||||
YYSYMBOL_chip = 50, /* chip */
|
||||
YYSYMBOL_51_1 = 51, /* @1 */
|
||||
YYSYMBOL_device = 52, /* device */
|
||||
YYSYMBOL_53_2 = 53, /* @2 */
|
||||
YYSYMBOL_54_3 = 54, /* @3 */
|
||||
YYSYMBOL_alias = 55, /* alias */
|
||||
YYSYMBOL_status = 56, /* status */
|
||||
YYSYMBOL_resource = 57, /* resource */
|
||||
YYSYMBOL_reference = 58, /* reference */
|
||||
YYSYMBOL_registers = 59, /* registers */
|
||||
YYSYMBOL_subsystemid = 60, /* subsystemid */
|
||||
YYSYMBOL_ioapic_irq = 61, /* ioapic_irq */
|
||||
YYSYMBOL_smbios_slot_desc = 62, /* smbios_slot_desc */
|
||||
YYSYMBOL_fw_config_table = 63, /* fw_config_table */
|
||||
YYSYMBOL_fw_config_table_children = 64, /* fw_config_table_children */
|
||||
YYSYMBOL_fw_config_field_children = 65, /* fw_config_field_children */
|
||||
YYSYMBOL_fw_config_field = 66, /* fw_config_field */
|
||||
YYSYMBOL_67_4 = 67, /* $@4 */
|
||||
YYSYMBOL_68_5 = 68, /* $@5 */
|
||||
YYSYMBOL_69_6 = 69, /* $@6 */
|
||||
YYSYMBOL_fw_config_option = 70, /* fw_config_option */
|
||||
YYSYMBOL_fw_config_probe = 71 /* fw_config_probe */
|
||||
YYSYMBOL_PIPE = 46, /* PIPE */
|
||||
YYSYMBOL_YYACCEPT = 47, /* $accept */
|
||||
YYSYMBOL_devtree = 48, /* devtree */
|
||||
YYSYMBOL_chipchildren = 49, /* chipchildren */
|
||||
YYSYMBOL_devicechildren = 50, /* devicechildren */
|
||||
YYSYMBOL_chip = 51, /* chip */
|
||||
YYSYMBOL_52_1 = 52, /* @1 */
|
||||
YYSYMBOL_device = 53, /* device */
|
||||
YYSYMBOL_54_2 = 54, /* @2 */
|
||||
YYSYMBOL_55_3 = 55, /* @3 */
|
||||
YYSYMBOL_alias = 56, /* alias */
|
||||
YYSYMBOL_status = 57, /* status */
|
||||
YYSYMBOL_resource = 58, /* resource */
|
||||
YYSYMBOL_reference = 59, /* reference */
|
||||
YYSYMBOL_registers = 60, /* registers */
|
||||
YYSYMBOL_subsystemid = 61, /* subsystemid */
|
||||
YYSYMBOL_ioapic_irq = 62, /* ioapic_irq */
|
||||
YYSYMBOL_smbios_slot_desc = 63, /* smbios_slot_desc */
|
||||
YYSYMBOL_fw_config_table = 64, /* fw_config_table */
|
||||
YYSYMBOL_fw_config_table_children = 65, /* fw_config_table_children */
|
||||
YYSYMBOL_fw_config_field_children = 66, /* fw_config_field_children */
|
||||
YYSYMBOL_fw_config_field_bits = 67, /* fw_config_field_bits */
|
||||
YYSYMBOL_fw_config_field_bits_repeating = 68, /* fw_config_field_bits_repeating */
|
||||
YYSYMBOL_fw_config_field = 69, /* fw_config_field */
|
||||
YYSYMBOL_70_4 = 70, /* $@4 */
|
||||
YYSYMBOL_71_5 = 71, /* $@5 */
|
||||
YYSYMBOL_72_6 = 72, /* $@6 */
|
||||
YYSYMBOL_fw_config_option = 73, /* fw_config_option */
|
||||
YYSYMBOL_fw_config_probe = 74 /* fw_config_probe */
|
||||
};
|
||||
typedef enum yysymbol_kind_t yysymbol_kind_t;
|
||||
|
||||
|
@ -224,6 +228,18 @@ typedef int_least16_t yytype_int16;
|
|||
typedef short yytype_int16;
|
||||
#endif
|
||||
|
||||
/* Work around bug in HP-UX 11.23, which defines these macros
|
||||
incorrectly for preprocessor constants. This workaround can likely
|
||||
be removed in 2023, as HPE has promised support for HP-UX 11.23
|
||||
(aka HP-UX 11i v2) only through the end of 2022; see Table 2 of
|
||||
<https://h20195.www2.hpe.com/V2/getpdf.aspx/4AA4-7673ENW.pdf>. */
|
||||
#ifdef __hpux
|
||||
# undef UINT_LEAST8_MAX
|
||||
# undef UINT_LEAST16_MAX
|
||||
# define UINT_LEAST8_MAX 255
|
||||
# define UINT_LEAST16_MAX 65535
|
||||
#endif
|
||||
|
||||
#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
|
||||
typedef __UINT_LEAST8_TYPE__ yytype_uint8;
|
||||
#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
|
||||
|
@ -321,9 +337,9 @@ typedef int yy_state_fast_t;
|
|||
|
||||
/* Suppress unused-variable warnings by "using" E. */
|
||||
#if ! defined lint || defined __GNUC__
|
||||
# define YYUSE(E) ((void) (E))
|
||||
# define YY_USE(E) ((void) (E))
|
||||
#else
|
||||
# define YYUSE(E) /* empty */
|
||||
# define YY_USE(E) /* empty */
|
||||
#endif
|
||||
|
||||
#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
|
||||
|
@ -490,19 +506,19 @@ union yyalloc
|
|||
/* YYFINAL -- State number of the termination state. */
|
||||
#define YYFINAL 2
|
||||
/* YYLAST -- Last index in YYTABLE. */
|
||||
#define YYLAST 79
|
||||
#define YYLAST 83
|
||||
|
||||
/* YYNTOKENS -- Number of terminals. */
|
||||
#define YYNTOKENS 46
|
||||
#define YYNTOKENS 47
|
||||
/* YYNNTS -- Number of nonterminals. */
|
||||
#define YYNNTS 26
|
||||
#define YYNNTS 28
|
||||
/* YYNRULES -- Number of rules. */
|
||||
#define YYNRULES 50
|
||||
#define YYNRULES 53
|
||||
/* YYNSTATES -- Number of states. */
|
||||
#define YYNSTATES 89
|
||||
#define YYNSTATES 95
|
||||
|
||||
/* YYMAXUTOK -- Last valid token kind. */
|
||||
#define YYMAXUTOK 300
|
||||
#define YYMAXUTOK 301
|
||||
|
||||
|
||||
/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
|
||||
|
@ -546,19 +562,19 @@ static const yytype_int8 yytranslate[] =
|
|||
15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
|
||||
25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
|
||||
35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
|
||||
45
|
||||
45, 46
|
||||
};
|
||||
|
||||
#if YYDEBUG
|
||||
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
|
||||
static const yytype_int8 yyrline[] =
|
||||
static const yytype_uint8 yyrline[] =
|
||||
{
|
||||
0, 25, 25, 25, 25, 27, 27, 27, 27, 27,
|
||||
29, 29, 29, 29, 29, 29, 29, 29, 29, 31,
|
||||
31, 40, 40, 48, 48, 56, 58, 62, 62, 64,
|
||||
67, 70, 73, 76, 79, 82, 85, 88, 92, 95,
|
||||
95, 98, 98, 101, 101, 107, 107, 113, 113, 119,
|
||||
123
|
||||
0, 26, 26, 26, 26, 28, 28, 28, 28, 28,
|
||||
30, 30, 30, 30, 30, 30, 30, 30, 30, 32,
|
||||
32, 41, 41, 49, 49, 57, 59, 63, 63, 65,
|
||||
68, 71, 74, 77, 80, 83, 86, 89, 93, 96,
|
||||
96, 99, 99, 102, 108, 108, 111, 110, 115, 115,
|
||||
123, 123, 129, 133
|
||||
};
|
||||
#endif
|
||||
|
||||
|
@ -581,11 +597,12 @@ static const char *const yytname[] =
|
|||
"SLOT_DESC", "IO", "NUMBER", "SUBSYSTEMID", "INHERIT", "IOAPIC_IRQ",
|
||||
"IOAPIC", "PCIINT", "GENERIC", "SPI", "USB", "MMIO", "LPC", "ESPI",
|
||||
"GPIO", "FW_CONFIG_TABLE", "FW_CONFIG_FIELD", "FW_CONFIG_OPTION",
|
||||
"FW_CONFIG_PROBE", "$accept", "devtree", "chipchildren",
|
||||
"FW_CONFIG_PROBE", "PIPE", "$accept", "devtree", "chipchildren",
|
||||
"devicechildren", "chip", "@1", "device", "@2", "@3", "alias", "status",
|
||||
"resource", "reference", "registers", "subsystemid", "ioapic_irq",
|
||||
"smbios_slot_desc", "fw_config_table", "fw_config_table_children",
|
||||
"fw_config_field_children", "fw_config_field", "$@4", "$@5", "$@6",
|
||||
"fw_config_field_children", "fw_config_field_bits",
|
||||
"fw_config_field_bits_repeating", "fw_config_field", "$@4", "$@5", "$@6",
|
||||
"fw_config_option", "fw_config_probe", YY_NULLPTR
|
||||
};
|
||||
|
||||
|
@ -605,11 +622,11 @@ static const yytype_int16 yytoknum[] =
|
|||
265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
|
||||
275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
|
||||
285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
|
||||
295, 296, 297, 298, 299, 300
|
||||
295, 296, 297, 298, 299, 300, 301
|
||||
};
|
||||
#endif
|
||||
|
||||
#define YYPACT_NINF (-15)
|
||||
#define YYPACT_NINF (-21)
|
||||
|
||||
#define yypact_value_is_default(Yyn) \
|
||||
((Yyn) == YYPACT_NINF)
|
||||
|
@ -623,15 +640,16 @@ static const yytype_int16 yytoknum[] =
|
|||
STATE-NUM. */
|
||||
static const yytype_int8 yypact[] =
|
||||
{
|
||||
-15, 9, -15, 0, -15, -15, -15, -15, -11, -15,
|
||||
-15, 2, -15, 45, -8, 13, 6, 19, -15, -15,
|
||||
-15, -15, -15, 10, -15, 23, 12, 11, 36, -15,
|
||||
-15, -7, 25, 39, 30, 37, -15, -6, -15, 38,
|
||||
-15, -15, -15, -15, 40, 25, -15, -15, -1, -15,
|
||||
24, -15, -15, -15, -15, -15, -3, -15, 27, -15,
|
||||
41, 31, 32, 46, -15, -15, -15, -15, -15, -15,
|
||||
-15, -15, 1, 47, 48, 35, 33, 49, -15, 42,
|
||||
51, 43, 44, -15, -15, 52, -15, -15, -15
|
||||
-21, 9, -21, 2, -21, -21, -21, -21, -11, -21,
|
||||
-21, 8, -21, 45, -13, 10, 18, 19, -21, -21,
|
||||
-21, -21, -21, 12, -20, -21, 22, 15, 25, 37,
|
||||
-21, -21, 24, -21, -7, 11, 41, 38, 39, -6,
|
||||
12, -20, -21, -21, 40, -21, -21, -21, -21, 43,
|
||||
11, -21, -21, -21, -21, -1, 29, -21, -21, -21,
|
||||
-21, -21, -3, -21, 32, -21, 46, 33, 35, 48,
|
||||
-21, -21, -21, -21, -21, -21, -21, -21, 1, 51,
|
||||
50, 42, 20, 52, -21, 44, 53, 47, 54, -21,
|
||||
-21, 55, -21, -21, -21
|
||||
};
|
||||
|
||||
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
|
||||
|
@ -640,30 +658,31 @@ static const yytype_int8 yypact[] =
|
|||
static const yytype_int8 yydefact[] =
|
||||
{
|
||||
2, 0, 1, 0, 40, 3, 4, 19, 0, 9,
|
||||
38, 0, 39, 0, 47, 0, 0, 0, 20, 6,
|
||||
5, 8, 7, 45, 42, 0, 0, 0, 0, 43,
|
||||
42, 0, 0, 25, 0, 0, 42, 0, 48, 0,
|
||||
41, 27, 28, 23, 0, 0, 31, 30, 0, 46,
|
||||
0, 18, 26, 21, 44, 49, 0, 18, 0, 24,
|
||||
0, 0, 0, 0, 11, 10, 12, 16, 13, 14,
|
||||
15, 17, 0, 0, 0, 0, 0, 0, 22, 0,
|
||||
37, 32, 0, 50, 29, 36, 33, 34, 35
|
||||
38, 0, 39, 0, 50, 0, 0, 0, 20, 6,
|
||||
5, 8, 7, 48, 45, 42, 0, 0, 0, 0,
|
||||
43, 42, 0, 46, 0, 0, 25, 0, 0, 0,
|
||||
0, 45, 42, 51, 0, 41, 27, 28, 23, 0,
|
||||
0, 31, 30, 49, 44, 0, 0, 18, 26, 21,
|
||||
47, 52, 0, 18, 0, 24, 0, 0, 0, 0,
|
||||
11, 10, 12, 16, 13, 14, 15, 17, 0, 0,
|
||||
0, 0, 0, 0, 22, 0, 37, 32, 0, 53,
|
||||
29, 36, 33, 34, 35
|
||||
};
|
||||
|
||||
/* YYPGOTO[NTERM-NUM]. */
|
||||
static const yytype_int8 yypgoto[] =
|
||||
{
|
||||
-15, -15, -15, 15, 17, -15, 57, -15, -15, -15,
|
||||
34, -15, -15, 62, -15, -15, -15, -15, -15, -14,
|
||||
-15, -15, -15, -15, -15, -15
|
||||
-21, -21, -21, 5, 17, -21, 61, -21, -21, -21,
|
||||
26, -21, -21, 62, -21, -21, -21, -21, -21, -8,
|
||||
49, 36, -21, -21, -21, -21, -21, -21
|
||||
};
|
||||
|
||||
/* YYDEFGOTO[NTERM-NUM]. */
|
||||
static const yytype_int8 yydefgoto[] =
|
||||
{
|
||||
-1, 1, 13, 56, 64, 9, 65, 57, 51, 45,
|
||||
43, 66, 21, 67, 68, 69, 70, 6, 8, 31,
|
||||
12, 36, 30, 24, 40, 71
|
||||
0, 1, 13, 62, 70, 9, 71, 63, 57, 50,
|
||||
48, 72, 21, 73, 74, 75, 76, 6, 8, 34,
|
||||
24, 33, 12, 42, 31, 25, 45, 77
|
||||
};
|
||||
|
||||
/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
|
||||
|
@ -671,52 +690,55 @@ static const yytype_int8 yydefgoto[] =
|
|||
number is the opposite. If YYTABLE_NINF, syntax error. */
|
||||
static const yytype_int8 yytable[] =
|
||||
{
|
||||
3, 15, 16, 10, 3, 15, 16, 38, 49, 2,
|
||||
58, 59, 3, 54, 58, 78, 37, 7, 5, 14,
|
||||
25, 23, 48, 27, 60, 26, 34, 61, 60, 62,
|
||||
19, 61, 11, 62, 41, 42, 28, 39, 39, 29,
|
||||
32, 33, 63, 39, 35, 44, 63, 46, 3, 15,
|
||||
16, 4, 17, 55, 47, 50, 73, 52, 74, 18,
|
||||
75, 76, 79, 77, 81, 80, 83, 82, 85, 88,
|
||||
20, 84, 72, 87, 86, 22, 0, 0, 0, 53
|
||||
3, 15, 16, 10, 3, 15, 16, 43, 53, 2,
|
||||
64, 65, 3, 60, 64, 84, 23, 26, 5, 7,
|
||||
46, 47, 27, 39, 66, 14, 32, 67, 66, 68,
|
||||
19, 67, 11, 68, 55, 28, 29, 44, 44, 35,
|
||||
37, 30, 69, 44, 36, 38, 69, 49, 3, 15,
|
||||
16, 4, 17, 40, 88, 51, 52, 56, 61, 18,
|
||||
58, 79, 81, 80, 82, 83, 85, 86, 78, 89,
|
||||
91, 87, 94, 90, 20, 22, 59, 54, 92, 0,
|
||||
0, 41, 0, 93
|
||||
};
|
||||
|
||||
static const yytype_int8 yycheck[] =
|
||||
{
|
||||
3, 4, 5, 14, 3, 4, 5, 14, 14, 0,
|
||||
13, 14, 3, 14, 13, 14, 30, 17, 1, 17,
|
||||
7, 29, 36, 17, 27, 12, 15, 30, 27, 32,
|
||||
13, 30, 43, 32, 9, 10, 17, 44, 44, 29,
|
||||
17, 29, 45, 44, 8, 6, 45, 17, 3, 4,
|
||||
5, 42, 7, 29, 17, 17, 29, 17, 17, 14,
|
||||
29, 29, 15, 17, 29, 17, 17, 34, 17, 17,
|
||||
13, 29, 57, 29, 31, 13, -1, -1, -1, 45
|
||||
13, 14, 3, 14, 13, 14, 29, 7, 1, 17,
|
||||
9, 10, 12, 31, 27, 17, 46, 30, 27, 32,
|
||||
13, 30, 43, 32, 42, 17, 17, 44, 44, 17,
|
||||
15, 29, 45, 44, 29, 8, 45, 6, 3, 4,
|
||||
5, 42, 7, 29, 34, 17, 17, 17, 29, 14,
|
||||
17, 29, 29, 17, 29, 17, 15, 17, 63, 17,
|
||||
17, 29, 17, 29, 13, 13, 50, 41, 31, -1,
|
||||
-1, 32, -1, 29
|
||||
};
|
||||
|
||||
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
|
||||
symbol of state STATE-NUM. */
|
||||
static const yytype_int8 yystos[] =
|
||||
{
|
||||
0, 47, 0, 3, 42, 50, 63, 17, 64, 51,
|
||||
14, 43, 66, 48, 17, 4, 5, 7, 14, 50,
|
||||
52, 58, 59, 29, 69, 7, 12, 17, 17, 29,
|
||||
68, 65, 17, 29, 15, 8, 67, 65, 14, 44,
|
||||
70, 9, 10, 56, 6, 55, 17, 17, 65, 14,
|
||||
17, 54, 17, 56, 14, 29, 49, 53, 13, 14,
|
||||
27, 30, 32, 45, 50, 52, 57, 59, 60, 61,
|
||||
62, 71, 49, 29, 17, 29, 29, 17, 14, 15,
|
||||
17, 29, 34, 17, 29, 17, 31, 29, 17
|
||||
0, 48, 0, 3, 42, 51, 64, 17, 65, 52,
|
||||
14, 43, 69, 49, 17, 4, 5, 7, 14, 51,
|
||||
53, 59, 60, 29, 67, 72, 7, 12, 17, 17,
|
||||
29, 71, 46, 68, 66, 17, 29, 15, 8, 66,
|
||||
29, 67, 70, 14, 44, 73, 9, 10, 57, 6,
|
||||
56, 17, 17, 14, 68, 66, 17, 55, 17, 57,
|
||||
14, 29, 50, 54, 13, 14, 27, 30, 32, 45,
|
||||
51, 53, 58, 60, 61, 62, 63, 74, 50, 29,
|
||||
17, 29, 29, 17, 14, 15, 17, 29, 34, 17,
|
||||
29, 17, 31, 29, 17
|
||||
};
|
||||
|
||||
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
|
||||
static const yytype_int8 yyr1[] =
|
||||
{
|
||||
0, 46, 47, 47, 47, 48, 48, 48, 48, 48,
|
||||
49, 49, 49, 49, 49, 49, 49, 49, 49, 51,
|
||||
50, 53, 52, 54, 52, 55, 55, 56, 56, 57,
|
||||
58, 59, 60, 60, 61, 62, 62, 62, 63, 64,
|
||||
64, 65, 65, 67, 66, 68, 66, 69, 66, 70,
|
||||
71
|
||||
0, 47, 48, 48, 48, 49, 49, 49, 49, 49,
|
||||
50, 50, 50, 50, 50, 50, 50, 50, 50, 52,
|
||||
51, 54, 53, 55, 53, 56, 56, 57, 57, 58,
|
||||
59, 60, 61, 61, 62, 63, 63, 63, 64, 65,
|
||||
65, 66, 66, 67, 68, 68, 70, 69, 71, 69,
|
||||
72, 69, 73, 74
|
||||
};
|
||||
|
||||
/* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
|
||||
|
@ -726,8 +748,8 @@ static const yytype_int8 yyr2[] =
|
|||
2, 2, 2, 2, 2, 2, 2, 2, 0, 0,
|
||||
5, 0, 8, 0, 7, 0, 2, 1, 1, 4,
|
||||
4, 4, 3, 4, 4, 5, 4, 3, 3, 2,
|
||||
0, 2, 0, 0, 7, 0, 6, 0, 5, 3,
|
||||
3
|
||||
0, 2, 0, 2, 3, 0, 0, 7, 0, 6,
|
||||
0, 5, 3, 3
|
||||
};
|
||||
|
||||
|
||||
|
@ -806,7 +828,7 @@ yy_symbol_value_print (FILE *yyo,
|
|||
yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
|
||||
{
|
||||
FILE *yyoutput = yyo;
|
||||
YYUSE (yyoutput);
|
||||
YY_USE (yyoutput);
|
||||
if (!yyvaluep)
|
||||
return;
|
||||
# ifdef YYPRINT
|
||||
|
@ -814,7 +836,7 @@ yy_symbol_value_print (FILE *yyo,
|
|||
YYPRINT (yyo, yytoknum[yykind], *yyvaluep);
|
||||
# endif
|
||||
YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
|
||||
YYUSE (yykind);
|
||||
YY_USE (yykind);
|
||||
YY_IGNORE_MAYBE_UNINITIALIZED_END
|
||||
}
|
||||
|
||||
|
@ -928,13 +950,13 @@ static void
|
|||
yydestruct (const char *yymsg,
|
||||
yysymbol_kind_t yykind, YYSTYPE *yyvaluep)
|
||||
{
|
||||
YYUSE (yyvaluep);
|
||||
YY_USE (yyvaluep);
|
||||
if (!yymsg)
|
||||
yymsg = "Deleting";
|
||||
YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
|
||||
|
||||
YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
|
||||
YYUSE (yykind);
|
||||
YY_USE (yykind);
|
||||
YY_IGNORE_MAYBE_UNINITIALIZED_END
|
||||
}
|
||||
|
||||
|
@ -1290,41 +1312,47 @@ yyreduce:
|
|||
{ }
|
||||
break;
|
||||
|
||||
case 43: /* $@4: %empty */
|
||||
{
|
||||
cur_field = new_fw_config_field((yyvsp[-2].string), strtoul((yyvsp[-1].string), NULL, 0), strtoul((yyvsp[0].string), NULL, 0));
|
||||
case 43: /* fw_config_field_bits: NUMBER NUMBER */
|
||||
{
|
||||
append_fw_config_bits(&cur_bits, strtoul((yyvsp[-1].string), NULL, 0), strtoul((yyvsp[0].string), NULL, 0));
|
||||
}
|
||||
break;
|
||||
|
||||
case 44: /* fw_config_field: FW_CONFIG_FIELD STRING NUMBER NUMBER $@4 fw_config_field_children END */
|
||||
{ }
|
||||
case 46: /* $@4: %empty */
|
||||
{ cur_field = new_fw_config_field((yyvsp[-2].string), cur_bits); }
|
||||
break;
|
||||
|
||||
case 45: /* $@5: %empty */
|
||||
case 47: /* fw_config_field: FW_CONFIG_FIELD STRING fw_config_field_bits fw_config_field_bits_repeating $@4 fw_config_field_children END */
|
||||
{ cur_bits = NULL; }
|
||||
break;
|
||||
|
||||
case 48: /* $@5: %empty */
|
||||
{
|
||||
cur_field = new_fw_config_field((yyvsp[-1].string), strtoul((yyvsp[0].string), NULL, 0), strtoul((yyvsp[0].string), NULL, 0));
|
||||
cur_bits = NULL;
|
||||
append_fw_config_bits(&cur_bits, strtoul((yyvsp[0].string), NULL, 0), strtoul((yyvsp[0].string), NULL, 0));
|
||||
cur_field = new_fw_config_field((yyvsp[-1].string), cur_bits);
|
||||
}
|
||||
break;
|
||||
|
||||
case 46: /* fw_config_field: FW_CONFIG_FIELD STRING NUMBER $@5 fw_config_field_children END */
|
||||
{ }
|
||||
case 49: /* fw_config_field: FW_CONFIG_FIELD STRING NUMBER $@5 fw_config_field_children END */
|
||||
{ cur_bits = NULL; }
|
||||
break;
|
||||
|
||||
case 47: /* $@6: %empty */
|
||||
case 50: /* $@6: %empty */
|
||||
{
|
||||
cur_field = get_fw_config_field((yyvsp[0].string));
|
||||
}
|
||||
break;
|
||||
|
||||
case 48: /* fw_config_field: FW_CONFIG_FIELD STRING $@6 fw_config_field_children END */
|
||||
{ }
|
||||
case 51: /* fw_config_field: FW_CONFIG_FIELD STRING $@6 fw_config_field_children END */
|
||||
{ cur_bits = NULL; }
|
||||
break;
|
||||
|
||||
case 49: /* fw_config_option: FW_CONFIG_OPTION STRING NUMBER */
|
||||
case 52: /* fw_config_option: FW_CONFIG_OPTION STRING NUMBER */
|
||||
{ add_fw_config_option(cur_field, (yyvsp[-1].string), strtoull((yyvsp[0].string), NULL, 0)); }
|
||||
break;
|
||||
|
||||
case 50: /* fw_config_probe: FW_CONFIG_PROBE STRING STRING */
|
||||
case 53: /* fw_config_probe: FW_CONFIG_PROBE STRING STRING */
|
||||
{ add_fw_config_probe(cur_parent, (yyvsp[-1].string), (yyvsp[0].string)); }
|
||||
break;
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
/* A Bison parser, made by GNU Bison 3.7.2. */
|
||||
/* A Bison parser, made by GNU Bison 3.7.5. */
|
||||
|
||||
/* Bison interface for Yacc-like parsers in C
|
||||
|
||||
Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation,
|
||||
Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
|
||||
Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
|
@ -35,8 +35,8 @@
|
|||
especially those whose name start with YY_ or yy_. They are
|
||||
private implementation details that can be changed or removed. */
|
||||
|
||||
#ifndef YY_YY_HOME_C0D3_SRC_COREBOOT_GIT_UTIL_SCONFIG_SCONFIG_TAB_H_SHIPPED_INCLUDED
|
||||
# define YY_YY_HOME_C0D3_SRC_COREBOOT_GIT_UTIL_SCONFIG_SCONFIG_TAB_H_SHIPPED_INCLUDED
|
||||
#ifndef YY_YY_HOME_TWAWRZYNCZAK_DEVEL_COREBOOT_UTIL_SCONFIG_SCONFIG_TAB_H_SHIPPED_INCLUDED
|
||||
# define YY_YY_HOME_TWAWRZYNCZAK_DEVEL_COREBOOT_UTIL_SCONFIG_SCONFIG_TAB_H_SHIPPED_INCLUDED
|
||||
/* Debug traces. */
|
||||
#ifndef YYDEBUG
|
||||
# define YYDEBUG 0
|
||||
|
@ -96,7 +96,8 @@ extern int yydebug;
|
|||
FW_CONFIG_TABLE = 297, /* FW_CONFIG_TABLE */
|
||||
FW_CONFIG_FIELD = 298, /* FW_CONFIG_FIELD */
|
||||
FW_CONFIG_OPTION = 299, /* FW_CONFIG_OPTION */
|
||||
FW_CONFIG_PROBE = 300 /* FW_CONFIG_PROBE */
|
||||
FW_CONFIG_PROBE = 300, /* FW_CONFIG_PROBE */
|
||||
PIPE = 301 /* PIPE */
|
||||
};
|
||||
typedef enum yytokentype yytoken_kind_t;
|
||||
#endif
|
||||
|
@ -123,4 +124,4 @@ extern YYSTYPE yylval;
|
|||
|
||||
int yyparse (void);
|
||||
|
||||
#endif /* !YY_YY_HOME_C0D3_SRC_COREBOOT_GIT_UTIL_SCONFIG_SCONFIG_TAB_H_SHIPPED_INCLUDED */
|
||||
#endif /* !YY_YY_HOME_TWAWRZYNCZAK_DEVEL_COREBOOT_UTIL_SCONFIG_SCONFIG_TAB_H_SHIPPED_INCLUDED */
|
||||
|
|
|
@ -11,6 +11,7 @@ void yyerror(const char *s);
|
|||
static struct bus *cur_parent;
|
||||
static struct chip_instance *cur_chip_instance;
|
||||
static struct fw_config_field *cur_field;
|
||||
static struct fw_config_field_bits *cur_bits;
|
||||
|
||||
%}
|
||||
%union {
|
||||
|
@ -20,7 +21,7 @@ static struct fw_config_field *cur_field;
|
|||
uint64_t number;
|
||||
}
|
||||
|
||||
%token CHIP DEVICE REGISTER ALIAS REFERENCE ASSOCIATION BOOL STATUS MANDATORY BUS RESOURCE END EQUALS HEX STRING PCI PNP I2C APIC CPU_CLUSTER CPU DOMAIN IRQ DRQ SLOT_DESC IO NUMBER SUBSYSTEMID INHERIT IOAPIC_IRQ IOAPIC PCIINT GENERIC SPI USB MMIO LPC ESPI GPIO FW_CONFIG_TABLE FW_CONFIG_FIELD FW_CONFIG_OPTION FW_CONFIG_PROBE
|
||||
%token CHIP DEVICE REGISTER ALIAS REFERENCE ASSOCIATION BOOL STATUS MANDATORY BUS RESOURCE END EQUALS HEX STRING PCI PNP I2C APIC CPU_CLUSTER CPU DOMAIN IRQ DRQ SLOT_DESC IO NUMBER SUBSYSTEMID INHERIT IOAPIC_IRQ IOAPIC PCIINT GENERIC SPI USB MMIO LPC ESPI GPIO FW_CONFIG_TABLE FW_CONFIG_FIELD FW_CONFIG_OPTION FW_CONFIG_PROBE PIPE
|
||||
%%
|
||||
devtree: { cur_parent = root_parent; } | devtree chip | devtree fw_config_table;
|
||||
|
||||
|
@ -97,23 +98,32 @@ fw_config_table_children: fw_config_table_children fw_config_field | /* empty */
|
|||
/* field -> option */
|
||||
fw_config_field_children: fw_config_field_children fw_config_option | /* empty */ ;
|
||||
|
||||
/* field <start-bit> <end-bit> */
|
||||
fw_config_field: FW_CONFIG_FIELD STRING NUMBER /* == start bit */ NUMBER /* == end bit */ {
|
||||
cur_field = new_fw_config_field($<string>2, strtoul($<string>3, NULL, 0), strtoul($<string>4, NULL, 0));
|
||||
}
|
||||
fw_config_field_children END { };
|
||||
/* <start-bit> <end-bit> */
|
||||
fw_config_field_bits: NUMBER /* == start bit */ NUMBER /* == end bit */
|
||||
{
|
||||
append_fw_config_bits(&cur_bits, strtoul($<string>1, NULL, 0), strtoul($<string>2, NULL, 0));
|
||||
};
|
||||
|
||||
/* field <start-bit> <end-bit>(| <start-bit> <end-bit>)* */
|
||||
fw_config_field_bits_repeating: PIPE fw_config_field_bits fw_config_field_bits_repeating | /* empty */ ;
|
||||
|
||||
fw_config_field: FW_CONFIG_FIELD STRING fw_config_field_bits fw_config_field_bits_repeating
|
||||
{ cur_field = new_fw_config_field($<string>2, cur_bits); }
|
||||
fw_config_field_children END { cur_bits = NULL; };
|
||||
|
||||
/* field <bit> (for single-bit fields) */
|
||||
fw_config_field: FW_CONFIG_FIELD STRING NUMBER /* == bit */ {
|
||||
cur_field = new_fw_config_field($<string>2, strtoul($<string>3, NULL, 0), strtoul($<string>3, NULL, 0));
|
||||
cur_bits = NULL;
|
||||
append_fw_config_bits(&cur_bits, strtoul($<string>3, NULL, 0), strtoul($<string>3, NULL, 0));
|
||||
cur_field = new_fw_config_field($<string>2, cur_bits);
|
||||
}
|
||||
fw_config_field_children END { };
|
||||
fw_config_field_children END { cur_bits = NULL; };
|
||||
|
||||
/* field (for adding options to an existing field) */
|
||||
fw_config_field: FW_CONFIG_FIELD STRING {
|
||||
cur_field = get_fw_config_field($<string>2);
|
||||
}
|
||||
fw_config_field_children END { };
|
||||
fw_config_field_children END { cur_bits = NULL; };
|
||||
|
||||
/* option <value> */
|
||||
fw_config_option: FW_CONFIG_OPTION STRING NUMBER /* == field value */
|
||||
|
|
Loading…
Reference in New Issue