summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Rudolph <patrick.rudolph@9elements.com>2019-04-12 14:42:17 +0200
committerPatrick Georgi <pgeorgi@google.com>2019-05-07 16:04:56 +0000
commitac24d3c3118f0ffbf7f26e0ef867c58dbdcc98e3 (patch)
treee847a4cfb66338b9a5da452046308a4d4c6f1239
parent1a930584482c1cafb7ed02a9c37fcfe7cb61fb3f (diff)
downloadcoreboot-ac24d3c3118f0ffbf7f26e0ef867c58dbdcc98e3.tar.xz
sconfig: Add SMBIOS type 9 entries
Add the new field 'smbios_slot_desc', which takes 2 to 4 arguments. The field is valid for PCI devices and only compiled if SMBIOS table generation is enabled. smbios_slot_desc arguments: 1. slot type 2. slot lenth 3. slot designation (optional) 4. slot data width (optional) Example: device pci 1c.1 on smbios_slot_desc "21" "3" "MINI-PCI-FULL" "8" end # PCIe Port #2 Integrated Wireless LAN Tested on Lenovo T520. Change-Id: If95aae3c322d3da47637613b9a872ba1f7af9080 Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/32307 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net> Reviewed-by: Philipp Deppenwiese <zaolin.daisuki@gmail.com>
-rw-r--r--src/include/device/device.h6
-rw-r--r--util/sconfig/lex.yy.c_shipped261
-rw-r--r--util/sconfig/main.c41
-rw-r--r--util/sconfig/sconfig.h15
-rwxr-xr-xutil/sconfig/sconfig.l73
-rw-r--r--util/sconfig/sconfig.tab.c_shipped163
-rw-r--r--util/sconfig/sconfig.tab.h_shipped27
-rwxr-xr-xutil/sconfig/sconfig.y14
8 files changed, 351 insertions, 249 deletions
diff --git a/src/include/device/device.h b/src/include/device/device.h
index 39a4d567a2..32cf07282b 100644
--- a/src/include/device/device.h
+++ b/src/include/device/device.h
@@ -141,6 +141,12 @@ struct device {
#if !DEVTREE_EARLY
struct chip_operations *chip_ops;
const char *name;
+#if CONFIG(GENERATE_SMBIOS_TABLES)
+ u8 smbios_slot_type;
+ u8 smbios_slot_data_width;
+ u8 smbios_slot_length;
+ const char *smbios_slot_designation;
+#endif
#endif
DEVTREE_CONST void *chip_info;
};
diff --git a/util/sconfig/lex.yy.c_shipped b/util/sconfig/lex.yy.c_shipped
index b3dff41e58..14ffeff9a2 100644
--- a/util/sconfig/lex.yy.c_shipped
+++ b/util/sconfig/lex.yy.c_shipped
@@ -168,7 +168,7 @@ extern FILE *yyin, *yyout;
do \
{ \
/* Undo effects of setting up yytext. */ \
- int yyless_macro_arg = (n); \
+ yy_size_t yyless_macro_arg = (n); \
YY_LESS_LINENO(yyless_macro_arg);\
*yy_cp = (yy_hold_char); \
YY_RESTORE_YY_MORE_OFFSET \
@@ -358,8 +358,8 @@ static void yynoreturn yy_fatal_error (yyconst char* msg );
*yy_cp = '\0'; \
(yy_c_buf_p) = yy_cp;
-#define YY_NUM_RULES 37
-#define YY_END_OF_BUFFER 38
+#define YY_NUM_RULES 38
+#define YY_END_OF_BUFFER 39
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
@@ -367,24 +367,25 @@ struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
-static yyconst flex_int16_t yy_accept[145] =
+static yyconst flex_int16_t yy_accept[160] =
{ 0,
- 0, 0, 38, 36, 1, 3, 36, 36, 36, 31,
- 31, 29, 32, 36, 32, 32, 32, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 1, 3,
- 36, 0, 36, 36, 0, 2, 31, 32, 36, 36,
- 36, 36, 32, 36, 36, 36, 36, 36, 36, 36,
- 24, 36, 36, 36, 36, 7, 36, 36, 36, 36,
- 36, 36, 35, 35, 36, 0, 30, 36, 36, 16,
- 36, 36, 23, 28, 36, 36, 13, 36, 36, 22,
- 36, 36, 8, 10, 12, 36, 20, 36, 21, 36,
- 0, 33, 4, 36, 36, 36, 36, 36, 36, 36,
-
- 36, 19, 36, 36, 34, 34, 36, 36, 36, 36,
- 36, 36, 36, 14, 36, 36, 36, 5, 17, 36,
- 9, 36, 11, 36, 36, 36, 18, 26, 36, 36,
- 36, 36, 36, 6, 36, 36, 36, 36, 36, 25,
- 36, 15, 27, 0
+ 0, 0, 39, 37, 1, 3, 37, 37, 37, 32,
+ 32, 30, 33, 37, 33, 33, 33, 37, 37, 37,
+ 37, 37, 37, 37, 37, 37, 37, 37, 1, 3,
+ 37, 0, 37, 37, 0, 2, 32, 33, 37, 37,
+ 37, 37, 33, 37, 37, 37, 37, 37, 37, 37,
+ 24, 37, 37, 37, 37, 7, 37, 37, 37, 37,
+ 37, 37, 37, 36, 36, 37, 0, 31, 37, 37,
+ 16, 37, 37, 23, 28, 37, 37, 13, 37, 37,
+ 22, 37, 37, 8, 10, 12, 37, 37, 20, 37,
+ 21, 37, 0, 34, 4, 37, 37, 37, 37, 37,
+
+ 37, 37, 37, 19, 37, 37, 37, 35, 35, 37,
+ 37, 37, 37, 37, 37, 37, 14, 37, 37, 37,
+ 37, 5, 17, 37, 9, 37, 11, 37, 37, 37,
+ 37, 18, 26, 37, 37, 37, 37, 37, 37, 6,
+ 37, 37, 37, 37, 37, 37, 37, 25, 37, 37,
+ 15, 37, 27, 37, 37, 37, 37, 29, 0
} ;
static yyconst YY_CHAR yy_ec[256] =
@@ -427,110 +428,114 @@ static yyconst YY_CHAR yy_meta[39] =
1, 1, 1, 1, 1, 1, 1, 1
} ;
-static yyconst flex_uint16_t yy_base[152] =
+static yyconst flex_uint16_t yy_base[167] =
{ 0,
- 0, 0, 212, 0, 209, 213, 207, 37, 41, 38,
- 172, 0, 44, 194, 54, 78, 60, 186, 181, 45,
- 188, 177, 42, 47, 182, 41, 169, 0, 199, 213,
- 77, 195, 87, 91, 196, 213, 0, 88, 104, 183,
- 172, 161, 93, 168, 163, 173, 164, 171, 171, 165,
- 171, 156, 156, 160, 162, 0, 158, 152, 158, 155,
- 161, 160, 0, 213, 101, 172, 0, 165, 145, 158,
- 148, 155, 0, 0, 150, 150, 0, 148, 138, 0,
- 142, 137, 0, 0, 0, 140, 0, 131, 0, 158,
- 157, 0, 0, 142, 141, 134, 126, 136, 124, 130,
-
- 135, 0, 120, 114, 0, 213, 125, 129, 121, 123,
- 119, 121, 126, 0, 110, 110, 107, 0, 0, 109,
- 0, 93, 104, 98, 84, 84, 0, 0, 89, 77,
- 87, 71, 66, 0, 64, 62, 50, 47, 33, 0,
- 28, 0, 0, 213, 40, 129, 131, 133, 135, 137,
- 139
+ 0, 0, 227, 0, 224, 228, 222, 37, 41, 38,
+ 187, 0, 44, 209, 54, 78, 60, 201, 196, 45,
+ 203, 192, 42, 47, 197, 62, 184, 0, 214, 228,
+ 77, 210, 88, 69, 211, 228, 0, 87, 104, 198,
+ 187, 176, 93, 183, 178, 188, 179, 186, 186, 180,
+ 186, 171, 171, 175, 177, 0, 173, 167, 173, 177,
+ 169, 175, 174, 0, 228, 101, 186, 0, 179, 159,
+ 172, 162, 169, 0, 0, 164, 164, 0, 162, 152,
+ 0, 156, 151, 0, 0, 0, 154, 153, 0, 144,
+ 0, 171, 170, 0, 0, 155, 154, 147, 139, 149,
+
+ 137, 143, 148, 0, 133, 136, 126, 0, 228, 137,
+ 141, 133, 135, 131, 133, 138, 0, 122, 122, 121,
+ 118, 0, 0, 133, 0, 117, 134, 128, 132, 113,
+ 113, 0, 0, 120, 112, 110, 121, 94, 95, 0,
+ 94, 92, 97, 86, 85, 84, 76, 0, 71, 78,
+ 0, 67, 0, 61, 55, 32, 29, 0, 228, 40,
+ 129, 131, 133, 135, 137, 139
} ;
-static yyconst flex_int16_t yy_def[152] =
+static yyconst flex_int16_t yy_def[167] =
{ 0,
- 144, 1, 144, 145, 144, 144, 145, 146, 147, 145,
- 10, 145, 10, 145, 10, 10, 10, 145, 145, 145,
- 145, 145, 145, 145, 145, 145, 145, 145, 144, 144,
- 146, 148, 149, 147, 150, 144, 10, 10, 10, 145,
- 145, 145, 10, 145, 145, 145, 145, 145, 145, 145,
- 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
- 145, 145, 145, 144, 149, 151, 39, 145, 145, 145,
- 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
- 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
- 144, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-
- 145, 145, 145, 145, 145, 144, 145, 145, 145, 145,
- 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
- 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
- 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
- 145, 145, 145, 0, 144, 144, 144, 144, 144, 144,
- 144
+ 159, 1, 159, 160, 159, 159, 160, 161, 162, 160,
+ 10, 160, 10, 160, 10, 10, 10, 160, 160, 160,
+ 160, 160, 160, 160, 160, 160, 160, 160, 159, 159,
+ 161, 163, 164, 162, 165, 159, 10, 10, 10, 160,
+ 160, 160, 10, 160, 160, 160, 160, 160, 160, 160,
+ 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+ 160, 160, 160, 160, 159, 164, 166, 39, 160, 160,
+ 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+ 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+ 160, 160, 159, 160, 160, 160, 160, 160, 160, 160,
+
+ 160, 160, 160, 160, 160, 160, 160, 160, 159, 160,
+ 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+ 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+ 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+ 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+ 160, 160, 160, 160, 160, 160, 160, 160, 0, 159,
+ 159, 159, 159, 159, 159, 159
} ;
-static yyconst flex_uint16_t yy_nxt[252] =
+static yyconst flex_uint16_t yy_nxt[267] =
{ 0,
4, 5, 6, 7, 8, 9, 10, 11, 10, 12,
13, 13, 14, 4, 4, 4, 13, 13, 15, 16,
17, 13, 18, 19, 20, 21, 22, 4, 23, 24,
4, 25, 26, 4, 27, 4, 4, 4, 32, 32,
- 28, 33, 35, 36, 37, 37, 37, 143, 38, 38,
+ 28, 33, 35, 36, 37, 37, 37, 158, 38, 38,
38, 38, 38, 49, 38, 38, 38, 38, 38, 38,
- 38, 38, 38, 55, 142, 57, 38, 38, 38, 56,
- 60, 141, 50, 51, 58, 61, 52, 41, 32, 32,
- 140, 63, 139, 42, 38, 38, 38, 46, 66, 66,
- 138, 28, 35, 36, 38, 38, 38, 137, 43, 38,
-
- 38, 38, 66, 66, 136, 90, 44, 135, 134, 45,
- 67, 67, 67, 133, 67, 67, 132, 131, 130, 129,
- 67, 67, 67, 67, 67, 67, 128, 127, 71, 31,
- 31, 34, 34, 32, 32, 65, 65, 35, 35, 66,
- 66, 126, 125, 124, 123, 122, 121, 120, 119, 118,
- 117, 116, 115, 114, 113, 112, 111, 110, 109, 108,
- 107, 106, 105, 104, 103, 102, 101, 100, 99, 98,
- 97, 96, 95, 94, 93, 92, 91, 89, 88, 87,
- 86, 85, 84, 83, 82, 81, 80, 79, 78, 77,
- 76, 75, 74, 73, 72, 70, 69, 68, 36, 64,
-
- 29, 62, 59, 54, 53, 48, 47, 40, 39, 30,
- 29, 144, 3, 144, 144, 144, 144, 144, 144, 144,
- 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
- 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
- 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
- 144
+ 38, 38, 38, 55, 157, 57, 38, 38, 38, 56,
+ 35, 36, 50, 51, 58, 156, 52, 41, 32, 32,
+ 155, 64, 154, 42, 38, 38, 38, 46, 60, 67,
+ 67, 61, 28, 38, 38, 38, 62, 153, 43, 38,
+
+ 38, 38, 67, 67, 152, 92, 44, 151, 150, 45,
+ 68, 68, 68, 149, 68, 68, 148, 147, 146, 145,
+ 68, 68, 68, 68, 68, 68, 144, 143, 72, 31,
+ 31, 34, 34, 32, 32, 66, 66, 35, 35, 67,
+ 67, 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, 115, 114,
+ 113, 112, 111, 110, 109, 108, 107, 106, 105, 104,
+ 103, 102, 101, 100, 99, 98, 97, 96, 95, 94,
+ 93, 91, 90, 89, 88, 87, 86, 85, 84, 83,
+
+ 82, 81, 80, 79, 78, 77, 76, 75, 74, 73,
+ 71, 70, 69, 36, 65, 29, 63, 59, 54, 53,
+ 48, 47, 40, 39, 30, 29, 159, 3, 159, 159,
+ 159, 159, 159, 159, 159, 159, 159, 159, 159, 159,
+ 159, 159, 159, 159, 159, 159, 159, 159, 159, 159,
+ 159, 159, 159, 159, 159, 159, 159, 159, 159, 159,
+ 159, 159, 159, 159, 159, 159
} ;
-static yyconst flex_int16_t yy_chk[252] =
+static yyconst flex_int16_t yy_chk[267] =
{ 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, 8, 8,
- 145, 8, 9, 9, 10, 10, 10, 141, 10, 10,
+ 160, 8, 9, 9, 10, 10, 10, 157, 10, 10,
13, 13, 13, 20, 10, 10, 10, 10, 10, 10,
- 15, 15, 15, 23, 139, 24, 17, 17, 17, 23,
- 26, 138, 20, 20, 24, 26, 20, 15, 31, 31,
- 137, 31, 136, 15, 16, 16, 16, 17, 33, 33,
- 135, 33, 34, 34, 38, 38, 38, 133, 16, 43,
-
- 43, 43, 65, 65, 132, 65, 16, 131, 130, 16,
- 39, 39, 39, 129, 39, 39, 126, 125, 124, 123,
- 39, 39, 39, 39, 39, 39, 122, 120, 43, 146,
- 146, 147, 147, 148, 148, 149, 149, 150, 150, 151,
- 151, 117, 116, 115, 113, 112, 111, 110, 109, 108,
- 107, 104, 103, 101, 100, 99, 98, 97, 96, 95,
- 94, 91, 90, 88, 86, 82, 81, 79, 78, 76,
- 75, 72, 71, 70, 69, 68, 66, 62, 61, 60,
- 59, 58, 57, 55, 54, 53, 52, 51, 50, 49,
- 48, 47, 46, 45, 44, 42, 41, 40, 35, 32,
-
- 29, 27, 25, 22, 21, 19, 18, 14, 11, 7,
- 5, 3, 144, 144, 144, 144, 144, 144, 144, 144,
- 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
- 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
- 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
- 144
+ 15, 15, 15, 23, 156, 24, 17, 17, 17, 23,
+ 34, 34, 20, 20, 24, 155, 20, 15, 31, 31,
+ 154, 31, 152, 15, 16, 16, 16, 17, 26, 33,
+ 33, 26, 33, 38, 38, 38, 26, 150, 16, 43,
+
+ 43, 43, 66, 66, 149, 66, 16, 147, 146, 16,
+ 39, 39, 39, 145, 39, 39, 144, 143, 142, 141,
+ 39, 39, 39, 39, 39, 39, 139, 138, 43, 161,
+ 161, 162, 162, 163, 163, 164, 164, 165, 165, 166,
+ 166, 137, 136, 135, 134, 131, 130, 129, 128, 127,
+ 126, 124, 121, 120, 119, 118, 116, 115, 114, 113,
+ 112, 111, 110, 107, 106, 105, 103, 102, 101, 100,
+ 99, 98, 97, 96, 93, 92, 90, 88, 87, 83,
+ 82, 80, 79, 77, 76, 73, 72, 71, 70, 69,
+ 67, 63, 62, 61, 60, 59, 58, 57, 55, 54,
+
+ 53, 52, 51, 50, 49, 48, 47, 46, 45, 44,
+ 42, 41, 40, 35, 32, 29, 27, 25, 22, 21,
+ 19, 18, 14, 11, 7, 5, 3, 159, 159, 159,
+ 159, 159, 159, 159, 159, 159, 159, 159, 159, 159,
+ 159, 159, 159, 159, 159, 159, 159, 159, 159, 159,
+ 159, 159, 159, 159, 159, 159, 159, 159, 159, 159,
+ 159, 159, 159, 159, 159, 159
} ;
static yy_state_type yy_last_accepting_state;
@@ -674,7 +679,7 @@ static int input (void );
if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
{ \
int c = '*'; \
- size_t n; \
+ int n; \
for ( n = 0; n < max_size && \
(c = getc( yyin )) != EOF && c != '\n'; ++n ) \
buf[n] = (char) c; \
@@ -687,7 +692,7 @@ static int input (void );
else \
{ \
errno=0; \
- while ( (result = (int) fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
+ while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \
{ \
if( errno != EINTR) \
{ \
@@ -809,13 +814,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 >= 145 )
+ if ( yy_current_state >= 160 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
++yy_cp;
}
- while ( yy_base[yy_current_state] != 213 );
+ while ( yy_base[yy_current_state] != 228 );
yy_find_action:
yy_act = yy_accept[yy_current_state];
@@ -955,11 +960,11 @@ YY_RULE_SETUP
YY_BREAK
case 29:
YY_RULE_SETUP
-{return(EQUALS);}
+{return(SLOT_DESC);}
YY_BREAK
case 30:
YY_RULE_SETUP
-{yylval.string = malloc(yyleng+1); strncpy(yylval.string, yytext, yyleng); yylval.string[yyleng]='\0'; return(NUMBER);}
+{return(EQUALS);}
YY_BREAK
case 31:
YY_RULE_SETUP
@@ -971,12 +976,11 @@ YY_RULE_SETUP
YY_BREAK
case 33:
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 34:
-/* rule 34 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 35:
/* rule 35 can match eol */
@@ -984,11 +988,16 @@ 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 36:
+/* rule 36 can match eol */
YY_RULE_SETUP
-{yylval.string = malloc(yyleng+1); strncpy(yylval.string, yytext, yyleng); yylval.string[yyleng]='\0'; return(STRING);}
+{yylval.string = malloc(yyleng-1); strncpy(yylval.string, yytext+1, yyleng-2); yylval.string[yyleng-2]='\0'; return(STRING);}
YY_BREAK
case 37:
YY_RULE_SETUP
+{yylval.string = malloc(yyleng+1); strncpy(yylval.string, yytext, yyleng); yylval.string[yyleng]='\0'; return(STRING);}
+ YY_BREAK
+case 38:
+YY_RULE_SETUP
ECHO;
YY_BREAK
case YY_STATE_EOF(INITIAL):
@@ -1135,7 +1144,7 @@ static int yy_get_next_buffer (void)
{
char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
char *source = (yytext_ptr);
- int number_to_move, i;
+ yy_size_t number_to_move, i;
int ret_val;
if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
@@ -1164,7 +1173,7 @@ static int yy_get_next_buffer (void)
/* Try to read more data. */
/* First move last chars to start of buffer. */
- number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1);
+ number_to_move = (yy_size_t) ((yy_c_buf_p) - (yytext_ptr)) - 1;
for ( i = 0; i < number_to_move; ++i )
*(dest++) = *(source++);
@@ -1200,7 +1209,7 @@ static int yy_get_next_buffer (void)
b->yy_ch_buf = (char *)
/* Include room in for 2 EOB chars. */
- yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 );
+ yyrealloc((void *) b->yy_ch_buf,(yy_size_t) (b->yy_buf_size + 2) );
}
else
/* Can't grow it, we don't own it. */
@@ -1246,10 +1255,10 @@ static int yy_get_next_buffer (void)
else
ret_val = EOB_ACT_CONTINUE_SCAN;
- if (((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+ if ((int) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
/* Extend the array by 50%, plus the number we really need. */
int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
- YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size );
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,(yy_size_t) new_size );
if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
}
@@ -1283,7 +1292,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 >= 145 )
+ if ( yy_current_state >= 160 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
@@ -1311,11 +1320,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 >= 145 )
+ if ( yy_current_state >= 160 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
- yy_is_jam = (yy_current_state == 144);
+ yy_is_jam = (yy_current_state == 159);
return yy_is_jam ? 0 : yy_current_state;
}
@@ -1510,12 +1519,12 @@ static void yy_load_buffer_state (void)
if ( ! b )
YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
- b->yy_buf_size = (yy_size_t)size;
+ b->yy_buf_size = size;
/* yy_ch_buf has to be 2 characters longer than the size given because
* we need to put in 2 end-of-buffer characters.
*/
- b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 );
+ b->yy_ch_buf = (char *) yyalloc((yy_size_t) (b->yy_buf_size + 2) );
if ( ! b->yy_ch_buf )
YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
@@ -1718,7 +1727,7 @@ YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size )
if ( ! b )
YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
- b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
+ b->yy_buf_size = (int) (size - 2); /* "- 2" to take care of EOB's */
b->yy_buf_pos = b->yy_ch_buf = base;
b->yy_is_our_buffer = 0;
b->yy_input_file = NULL;
@@ -1801,7 +1810,7 @@ static void yynoreturn yy_fatal_error (yyconst char* msg )
do \
{ \
/* Undo effects of setting up yytext. */ \
- int yyless_macro_arg = (n); \
+ yy_size_t yyless_macro_arg = (n); \
YY_LESS_LINENO(yyless_macro_arg);\
yytext[yyleng] = (yy_hold_char); \
(yy_c_buf_p) = yytext + yyless_macro_arg; \
diff --git a/util/sconfig/main.c b/util/sconfig/main.c
index 5382f470fd..c3aa17f1a0 100644
--- a/util/sconfig/main.c
+++ b/util/sconfig/main.c
@@ -622,6 +622,22 @@ void add_register(struct chip_instance *chip_instance, char *name, char *val)
}
}
+void add_slot_desc(struct bus *bus, char *type, char *length, char *designation,
+ char *data_width)
+{
+ struct device *dev = bus->dev;
+
+ if (dev->bustype != PCI && dev->bustype != DOMAIN) {
+ printf("ERROR: 'slot_type' only allowed for PCI devices\n");
+ exit(1);
+ }
+
+ dev->smbios_slot_type = type;
+ dev->smbios_slot_length = length;
+ dev->smbios_slot_data_width = data_width;
+ dev->smbios_slot_designation = designation;
+}
+
void add_pci_subsystem_ids(struct bus *bus, int vendor, int device,
int inherit)
{
@@ -831,7 +847,30 @@ static void pass1(FILE *fil, struct device *ptr, struct device *next)
fprintf(fil, "\t.chip_info = &%s_info_%d,\n",
chip_ins->chip->name_underscore, chip_ins->id);
if (next)
- fprintf(fil, "\t.next=&%s\n", next->name);
+ fprintf(fil, "\t.next=&%s,\n", next->name);
+ if (ptr->smbios_slot_type || ptr->smbios_slot_data_width ||
+ ptr->smbios_slot_designation || ptr->smbios_slot_length) {
+ fprintf(fil, "#if !DEVTREE_EARLY\n");
+ fprintf(fil, "#if CONFIG(GENERATE_SMBIOS_TABLES)\n");
+ }
+ /* SMBIOS types start at 1, if zero it hasn't been set */
+ if (ptr->smbios_slot_type)
+ fprintf(fil, "\t.smbios_slot_type = %s,\n",
+ ptr->smbios_slot_type);
+ if (ptr->smbios_slot_data_width)
+ fprintf(fil, "\t.smbios_slot_data_width = %s,\n",
+ ptr->smbios_slot_data_width);
+ if (ptr->smbios_slot_designation)
+ fprintf(fil, "\t.smbios_slot_designation = \"%s\",\n",
+ ptr->smbios_slot_designation);
+ if (ptr->smbios_slot_length)
+ fprintf(fil, "\t.smbios_slot_length = %s,\n",
+ ptr->smbios_slot_length);
+ if (ptr->smbios_slot_type || ptr->smbios_slot_data_width ||
+ ptr->smbios_slot_designation || ptr->smbios_slot_length) {
+ fprintf(fil, "#endif\n");
+ fprintf(fil, "#endif\n");
+ }
fprintf(fil, "};\n");
emit_resources(fil, ptr);
diff --git a/util/sconfig/sconfig.h b/util/sconfig/sconfig.h
index 389d697a33..e6363dea83 100644
--- a/util/sconfig/sconfig.h
+++ b/util/sconfig/sconfig.h
@@ -141,6 +141,18 @@ struct device {
struct bus *bus;
/* Pointer to last bus under this device. */
struct bus *last_bus;
+
+ /* SMBIOS slot type */
+ char *smbios_slot_type;
+
+ /* SMBIOS slot data width */
+ char *smbios_slot_data_width;
+
+ /* SMBIOS slot description for reference designation */
+ char *smbios_slot_designation;
+
+ /* SMBIOS slot length */
+ char *smbios_slot_length;
};
extern struct bus *root_parent;
@@ -158,6 +170,9 @@ void add_pci_subsystem_ids(struct bus *bus, int vendor, int device,
void add_ioapic_info(struct bus *bus, int apicid, const char *_srcpin,
int irqpin);
+void add_slot_desc(struct bus *bus, char *type, char *length, char *designation,
+ char *data_width);
+
void yyrestart(FILE *input_file);
/* Add chip data to tail of queue. */
diff --git a/util/sconfig/sconfig.l b/util/sconfig/sconfig.l
index b21cca54b1..87de6e2763 100755
--- a/util/sconfig/sconfig.l
+++ b/util/sconfig/sconfig.l
@@ -21,40 +21,41 @@ int linenum = 0;
%}
%option nodebug
%%
-[ \t]+ {}
-#.*\n {linenum++;}
-\r?\n {linenum++;}
-chip {return(CHIP);}
-device {return(DEVICE);}
-register {return(REGISTER);}
-on {yylval.number=1; return(BOOL);}
-off {yylval.number=0; return(BOOL);}
-hidden {yylval.number=3; return(HIDDEN);}
-pci {yylval.number=PCI; return(BUS);}
-ioapic {yylval.number=IOAPIC; return(BUS);}
-pnp {yylval.number=PNP; return(BUS);}
-i2c {yylval.number=I2C; return(BUS);}
-lapic {yylval.number=APIC; return(BUS);}
-cpu_cluster {yylval.number=CPU_CLUSTER; return(BUS);}
-cpu {yylval.number=CPU; return(BUS);}
-domain {yylval.number=DOMAIN; return(BUS);}
-generic {yylval.number=GENERIC; return(BUS);}
-mmio {yylval.number=MMIO; return(BUS);}
-spi {yylval.number=SPI; return(BUS);}
-usb {yylval.number=USB; return(BUS);}
-irq {yylval.number=IRQ; return(RESOURCE);}
-drq {yylval.number=DRQ; return(RESOURCE);}
-io {yylval.number=IO; return(RESOURCE);}
-ioapic_irq {return(IOAPIC_IRQ);}
-inherit {return(INHERIT);}
-subsystemid {return(SUBSYSTEMID);}
-end {return(END);}
-= {return(EQUALS);}
-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);}
-INT[A-D] {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+1, yyleng-2); yylval.string[yyleng-2]='\0'; return(STRING);}
-\"[^\"]+\" {yylval.string = malloc(yyleng-1); strncpy(yylval.string, yytext+1, yyleng-2); yylval.string[yyleng-2]='\0'; return(STRING);}
-[^ \n\t]+ {yylval.string = malloc(yyleng+1); strncpy(yylval.string, yytext, yyleng); yylval.string[yyleng]='\0'; return(STRING);}
+[ \t]+ {}
+#.*\n {linenum++;}
+\r?\n {linenum++;}
+chip {return(CHIP);}
+device {return(DEVICE);}
+register {return(REGISTER);}
+on {yylval.number=1; return(BOOL);}
+off {yylval.number=0; return(BOOL);}
+hidden {yylval.number=3; return(HIDDEN);}
+pci {yylval.number=PCI; return(BUS);}
+ioapic {yylval.number=IOAPIC; return(BUS);}
+pnp {yylval.number=PNP; return(BUS);}
+i2c {yylval.number=I2C; return(BUS);}
+lapic {yylval.number=APIC; return(BUS);}
+cpu_cluster {yylval.number=CPU_CLUSTER; return(BUS);}
+cpu {yylval.number=CPU; return(BUS);}
+domain {yylval.number=DOMAIN; return(BUS);}
+generic {yylval.number=GENERIC; return(BUS);}
+mmio {yylval.number=MMIO; return(BUS);}
+spi {yylval.number=SPI; return(BUS);}
+usb {yylval.number=USB; return(BUS);}
+irq {yylval.number=IRQ; return(RESOURCE);}
+drq {yylval.number=DRQ; return(RESOURCE);}
+io {yylval.number=IO; return(RESOURCE);}
+ioapic_irq {return(IOAPIC_IRQ);}
+inherit {return(INHERIT);}
+subsystemid {return(SUBSYSTEMID);}
+end {return(END);}
+smbios_slot_desc {return(SLOT_DESC);}
+= {return(EQUALS);}
+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);}
+INT[A-D] {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+1, yyleng-2); yylval.string[yyleng-2]='\0'; return(STRING);}
+\"[^\"]+\" {yylval.string = malloc(yyleng-1); strncpy(yylval.string, yytext+1, yyleng-2); yylval.string[yyleng-2]='\0'; return(STRING);}
+[^ \n\t]+ {yylval.string = malloc(yyleng+1); strncpy(yylval.string, yytext, yyleng); yylval.string[yyleng]='\0'; return(STRING);}
%%
diff --git a/util/sconfig/sconfig.tab.c_shipped b/util/sconfig/sconfig.tab.c_shipped
index d59a1b6883..8e1e57de54 100644
--- a/util/sconfig/sconfig.tab.c_shipped
+++ b/util/sconfig/sconfig.tab.c_shipped
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 3.0.4. */
+/* A Bison parser, made by GNU Bison 3.0.5. */
/* Bison implementation for Yacc-like parsers in C
- Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
+ Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -44,7 +44,7 @@
#define YYBISON 1
/* Bison version. */
-#define YYBISON_VERSION "3.0.4"
+#define YYBISON_VERSION "3.0.5"
/* Skeleton name. */
#define YYSKELETON_NAME "yacc.c"
@@ -144,17 +144,18 @@ extern int yydebug;
DOMAIN = 275,
IRQ = 276,
DRQ = 277,
- IO = 278,
- NUMBER = 279,
- SUBSYSTEMID = 280,
- INHERIT = 281,
- IOAPIC_IRQ = 282,
- IOAPIC = 283,
- PCIINT = 284,
- GENERIC = 285,
- SPI = 286,
- USB = 287,
- MMIO = 288
+ SLOT_DESC = 278,
+ IO = 279,
+ NUMBER = 280,
+ SUBSYSTEMID = 281,
+ INHERIT = 282,
+ IOAPIC_IRQ = 283,
+ IOAPIC = 284,
+ PCIINT = 285,
+ GENERIC = 286,
+ SPI = 287,
+ USB = 288,
+ MMIO = 289
};
#endif
@@ -429,21 +430,21 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 3
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 40
+#define YYLAST 43
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 34
+#define YYNTOKENS 35
/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 14
+#define YYNNTS 15
/* YYNRULES -- Number of rules. */
-#define YYNRULES 24
+#define YYNRULES 28
/* YYNSTATES -- Number of states. */
-#define YYNSTATES 43
+#define YYNSTATES 49
/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
by yylex, with out-of-bounds checking. */
#define YYUNDEFTOK 2
-#define YYMAXUTOK 288
+#define YYMAXUTOK 289
#define YYTRANSLATE(YYX) \
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -480,7 +481,7 @@ static const yytype_uint8 yytranslate[] =
2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
- 25, 26, 27, 28, 29, 30, 31, 32, 33
+ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34
};
#if YYDEBUG
@@ -488,8 +489,8 @@ static const yytype_uint8 yytranslate[] =
static const yytype_uint8 yyrline[] =
{
0, 36, 36, 36, 38, 38, 38, 38, 40, 40,
- 40, 40, 40, 40, 42, 42, 51, 51, 59, 59,
- 61, 64, 67, 70, 73
+ 40, 40, 40, 40, 40, 42, 42, 51, 51, 59,
+ 59, 61, 64, 67, 70, 73, 76, 79, 82
};
#endif
@@ -500,11 +501,12 @@ static const char *const yytname[] =
{
"$end", "error", "$undefined", "CHIP", "DEVICE", "REGISTER", "BOOL",
"HIDDEN", "BUS", "RESOURCE", "END", "EQUALS", "HEX", "STRING", "PCI",
- "PNP", "I2C", "APIC", "CPU_CLUSTER", "CPU", "DOMAIN", "IRQ", "DRQ", "IO",
- "NUMBER", "SUBSYSTEMID", "INHERIT", "IOAPIC_IRQ", "IOAPIC", "PCIINT",
- "GENERIC", "SPI", "USB", "MMIO", "$accept", "devtree", "$@1",
- "chipchildren", "devicechildren", "chip", "@2", "device", "@3", "status",
- "resource", "registers", "subsystemid", "ioapic_irq", YY_NULLPTR
+ "PNP", "I2C", "APIC", "CPU_CLUSTER", "CPU", "DOMAIN", "IRQ", "DRQ",
+ "SLOT_DESC", "IO", "NUMBER", "SUBSYSTEMID", "INHERIT", "IOAPIC_IRQ",
+ "IOAPIC", "PCIINT", "GENERIC", "SPI", "USB", "MMIO", "$accept",
+ "devtree", "$@1", "chipchildren", "devicechildren", "chip", "@2",
+ "device", "@3", "status", "resource", "registers", "subsystemid",
+ "ioapic_irq", "smbios_slot_desc", YY_NULLPTR
};
#endif
@@ -516,14 +518,14 @@ static const yytype_uint16 yytoknum[] =
0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
- 285, 286, 287, 288
+ 285, 286, 287, 288, 289
};
# endif
-#define YYPACT_NINF -10
+#define YYPACT_NINF -12
#define yypact_value_is_default(Yystate) \
- (!!((Yystate) == (-10)))
+ (!!((Yystate) == (-12)))
#define YYTABLE_NINF -1
@@ -534,11 +536,11 @@ static const yytype_uint16 yytoknum[] =
STATE-NUM. */
static const yytype_int8 yypact[] =
{
- -10, 11, 9, -10, 1, -10, -10, -10, 0, 5,
- 3, -10, -10, -10, -10, -9, 6, 2, 7, -10,
- -10, -10, -10, -10, -3, -5, -10, -1, 4, -10,
- -10, -10, -10, -10, 10, 8, -4, 12, 13, 14,
- -10, -10, -10
+ -12, 11, 9, -12, 1, -12, -12, -12, 0, 5,
+ 3, -12, -12, -12, -12, -10, 6, 2, 8, -12,
+ -12, -12, -12, -12, -3, -1, -12, 13, 4, 7,
+ -12, -12, -12, -12, -12, -12, 16, 15, 10, -11,
+ 12, 17, -5, 14, -12, 18, -12, -12, -12
};
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -546,25 +548,25 @@ static const yytype_int8 yypact[] =
means the default is an error. */
static const yytype_uint8 yydefact[] =
{
- 2, 0, 0, 1, 0, 3, 14, 7, 0, 0,
- 0, 15, 5, 4, 6, 0, 0, 0, 0, 18,
- 19, 16, 21, 13, 0, 0, 17, 0, 0, 9,
- 8, 10, 11, 12, 0, 0, 0, 0, 22, 0,
- 20, 23, 24
+ 2, 0, 0, 1, 0, 3, 15, 7, 0, 0,
+ 0, 16, 5, 4, 6, 0, 0, 0, 0, 19,
+ 20, 17, 22, 14, 0, 0, 18, 0, 0, 0,
+ 9, 8, 10, 11, 12, 13, 0, 0, 0, 0,
+ 0, 28, 23, 0, 21, 27, 24, 25, 26
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int8 yypgoto[] =
{
- -10, -10, -10, -10, -10, -6, -10, 16, -10, -10,
- -10, -10, -10, -10
+ -12, -12, -12, -12, -12, -6, -12, 19, -12, -12,
+ -12, -12, -12, -12, -12
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int8 yydefgoto[] =
{
-1, 1, 2, 8, 24, 5, 7, 13, 23, 21,
- 31, 14, 32, 33
+ 32, 14, 33, 34, 35
};
/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
@@ -573,46 +575,46 @@ static const yytype_int8 yydefgoto[] =
static const yytype_uint8 yytable[] =
{
4, 9, 12, 4, 9, 10, 25, 26, 19, 20,
- 11, 3, 4, 15, 6, 17, 16, 18, 29, 34,
- 22, 37, 27, 35, 28, 39, 0, 0, 36, 0,
- 0, 0, 38, 0, 0, 0, 40, 0, 42, 41,
- 30
+ 11, 3, 4, 15, 6, 17, 16, 18, 30, 43,
+ 27, 22, 46, 28, 36, 29, 37, 40, 41, 38,
+ 45, 48, 39, 0, 0, 42, 0, 44, 0, 47,
+ 0, 0, 0, 31
};
static const yytype_int8 yycheck[] =
{
3, 4, 8, 3, 4, 5, 9, 10, 6, 7,
- 10, 0, 3, 8, 13, 24, 13, 11, 24, 24,
- 13, 11, 25, 24, 27, 29, -1, -1, 24, -1,
- -1, -1, 24, -1, -1, -1, 24, -1, 24, 26,
- 24
+ 10, 0, 3, 8, 13, 25, 13, 11, 24, 30,
+ 23, 13, 27, 26, 25, 28, 13, 11, 13, 25,
+ 13, 13, 25, -1, -1, 25, -1, 25, -1, 25,
+ -1, -1, -1, 24
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
static const yytype_uint8 yystos[] =
{
- 0, 35, 36, 0, 3, 39, 13, 40, 37, 4,
- 5, 10, 39, 41, 45, 8, 13, 24, 11, 6,
- 7, 43, 13, 42, 38, 9, 10, 25, 27, 39,
- 41, 44, 46, 47, 24, 24, 24, 11, 24, 29,
- 24, 26, 24
+ 0, 36, 37, 0, 3, 40, 13, 41, 38, 4,
+ 5, 10, 40, 42, 46, 8, 13, 25, 11, 6,
+ 7, 44, 13, 43, 39, 9, 10, 23, 26, 28,
+ 40, 42, 45, 47, 48, 49, 25, 13, 25, 25,
+ 11, 13, 25, 30, 25, 13, 27, 25, 13
};
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
static const yytype_uint8 yyr1[] =
{
- 0, 34, 36, 35, 37, 37, 37, 37, 38, 38,
- 38, 38, 38, 38, 40, 39, 42, 41, 43, 43,
- 44, 45, 46, 46, 47
+ 0, 35, 37, 36, 38, 38, 38, 38, 39, 39,
+ 39, 39, 39, 39, 39, 41, 40, 43, 42, 44,
+ 44, 45, 46, 47, 47, 48, 49, 49, 49
};
/* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
static const yytype_uint8 yyr2[] =
{
0, 2, 0, 2, 2, 2, 2, 0, 2, 2,
- 2, 2, 2, 0, 0, 5, 0, 7, 1, 1,
- 4, 4, 3, 4, 4
+ 2, 2, 2, 2, 0, 0, 5, 0, 7, 1,
+ 1, 4, 4, 3, 4, 4, 5, 4, 3
};
@@ -973,6 +975,7 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
case N: \
yyformat = S; \
break
+ default: /* Avoid compiler warnings. */
YYCASE_(0, YY_("syntax error"));
YYCASE_(1, YY_("syntax error, unexpected %s"));
YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
@@ -1294,7 +1297,7 @@ yyreduce:
break;
- case 14:
+ case 15:
{
(yyval.chip_instance) = new_chip_instance((yyvsp[0].string));
@@ -1304,7 +1307,7 @@ yyreduce:
break;
- case 15:
+ case 16:
{
cur_chip_instance = chip_dequeue_tail();
@@ -1312,7 +1315,7 @@ yyreduce:
break;
- case 16:
+ case 17:
{
(yyval.dev) = new_device(cur_parent, cur_chip_instance, (yyvsp[-2].number), (yyvsp[-1].string), (yyvsp[0].number));
@@ -1321,7 +1324,7 @@ yyreduce:
break;
- case 17:
+ case 18:
{
cur_parent = (yyvsp[-2].dev)->parent;
@@ -1329,36 +1332,54 @@ yyreduce:
break;
- case 20:
+ case 21:
{ add_resource(cur_parent, (yyvsp[-3].number), strtol((yyvsp[-2].string), NULL, 0), strtol((yyvsp[0].string), NULL, 0)); }
break;
- case 21:
+ case 22:
{ add_register(cur_chip_instance, (yyvsp[-2].string), (yyvsp[0].string)); }
break;
- case 22:
+ case 23:
{ add_pci_subsystem_ids(cur_parent, strtol((yyvsp[-1].string), NULL, 16), strtol((yyvsp[0].string), NULL, 16), 0); }
break;
- case 23:
+ case 24:
{ add_pci_subsystem_ids(cur_parent, strtol((yyvsp[-2].string), NULL, 16), strtol((yyvsp[-1].string), NULL, 16), 1); }
break;
- case 24:
+ case 25:
{ add_ioapic_info(cur_parent, strtol((yyvsp[-2].string), NULL, 16), (yyvsp[-1].string), strtol((yyvsp[0].string), NULL, 16)); }
break;
+ case 26:
+
+ { add_slot_desc(cur_parent, (yyvsp[-3].string), (yyvsp[-2].string), (yyvsp[-1].string), (yyvsp[0].string)); }
+
+ break;
+
+ case 27:
+
+ { add_slot_desc(cur_parent, (yyvsp[-2].string), (yyvsp[-1].string), (yyvsp[0].string), NULL); }
+
+ break;
+
+ case 28:
+
+ { add_slot_desc(cur_parent, (yyvsp[-1].string), (yyvsp[0].string), NULL, NULL); }
+
+ break;
+
default: break;
diff --git a/util/sconfig/sconfig.tab.h_shipped b/util/sconfig/sconfig.tab.h_shipped
index cabc4743b8..bcbd644b01 100644
--- a/util/sconfig/sconfig.tab.h_shipped
+++ b/util/sconfig/sconfig.tab.h_shipped
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 3.0.4. */
+/* A Bison parser, made by GNU Bison 3.0.5. */
/* Bison interface for Yacc-like parsers in C
- Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
+ Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -65,17 +65,18 @@ extern int yydebug;
DOMAIN = 275,
IRQ = 276,
DRQ = 277,
- IO = 278,
- NUMBER = 279,
- SUBSYSTEMID = 280,
- INHERIT = 281,
- IOAPIC_IRQ = 282,
- IOAPIC = 283,
- PCIINT = 284,
- GENERIC = 285,
- SPI = 286,
- USB = 287,
- MMIO = 288
+ SLOT_DESC = 278,
+ IO = 279,
+ NUMBER = 280,
+ SUBSYSTEMID = 281,
+ INHERIT = 282,
+ IOAPIC_IRQ = 283,
+ IOAPIC = 284,
+ PCIINT = 285,
+ GENERIC = 286,
+ SPI = 287,
+ USB = 288,
+ MMIO = 289
};
#endif
diff --git a/util/sconfig/sconfig.y b/util/sconfig/sconfig.y
index 3a6e9ab8a3..0d894a9e35 100755
--- a/util/sconfig/sconfig.y
+++ b/util/sconfig/sconfig.y
@@ -31,13 +31,13 @@ static struct chip_instance *cur_chip_instance;
int number;
}
-%token CHIP DEVICE REGISTER BOOL HIDDEN BUS RESOURCE END EQUALS HEX STRING PCI PNP I2C APIC CPU_CLUSTER CPU DOMAIN IRQ DRQ IO NUMBER SUBSYSTEMID INHERIT IOAPIC_IRQ IOAPIC PCIINT GENERIC SPI USB MMIO
+%token CHIP DEVICE REGISTER BOOL HIDDEN 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
%%
devtree: { cur_parent = root_parent; } chip;
chipchildren: chipchildren device | chipchildren chip | chipchildren registers | /* empty */ ;
-devicechildren: devicechildren device | devicechildren chip | devicechildren resource | devicechildren subsystemid | devicechildren ioapic_irq | /* empty */ ;
+devicechildren: devicechildren device | devicechildren chip | devicechildren resource | devicechildren subsystemid | devicechildren ioapic_irq | devicechildren smbios_slot_desc | /* empty */ ;
chip: CHIP STRING /* == path */ {
$<chip_instance>$ = new_chip_instance($<string>2);
@@ -72,4 +72,14 @@ subsystemid: SUBSYSTEMID NUMBER NUMBER INHERIT
ioapic_irq: IOAPIC_IRQ NUMBER PCIINT NUMBER
{ add_ioapic_info(cur_parent, strtol($<string>2, NULL, 16), $<string>3, strtol($<string>4, NULL, 16)); };
+
+smbios_slot_desc: SLOT_DESC STRING STRING STRING STRING
+ { add_slot_desc(cur_parent, $<string>2, $<string>3, $<string>4, $<string>5); };
+
+smbios_slot_desc: SLOT_DESC STRING STRING STRING
+ { add_slot_desc(cur_parent, $<string>2, $<string>3, $<string>4, NULL); };
+
+smbios_slot_desc: SLOT_DESC STRING STRING
+ { add_slot_desc(cur_parent, $<string>2, $<string>3, NULL, NULL); };
+
%%