summaryrefslogtreecommitdiff
path: root/util/sconfig
diff options
context:
space:
mode:
Diffstat (limited to 'util/sconfig')
-rw-r--r--util/sconfig/lex.yy.c_shipped383
-rw-r--r--util/sconfig/main.c115
-rw-r--r--util/sconfig/sconfig.h9
-rwxr-xr-xutil/sconfig/sconfig.l3
-rw-r--r--util/sconfig/sconfig.tab.c_shipped301
-rw-r--r--util/sconfig/sconfig.tab.h_shipped77
-rwxr-xr-xutil/sconfig/sconfig.y19
7 files changed, 530 insertions, 377 deletions
diff --git a/util/sconfig/lex.yy.c_shipped b/util/sconfig/lex.yy.c_shipped
index 998505e69b..fcf5c3ed4f 100644
--- a/util/sconfig/lex.yy.c_shipped
+++ b/util/sconfig/lex.yy.c_shipped
@@ -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 45
-#define YY_END_OF_BUFFER 46
+#define YY_NUM_RULES 48
+#define YY_END_OF_BUFFER 49
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
@@ -358,30 +358,31 @@ struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
-static const flex_int16_t yy_accept[195] =
+static const flex_int16_t yy_accept[202] =
{ 0,
- 0, 0, 46, 44, 1, 3, 44, 44, 44, 39,
- 39, 37, 40, 44, 40, 40, 40, 40, 44, 44,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 1,
- 3, 44, 0, 44, 44, 0, 2, 39, 40, 44,
- 44, 44, 44, 40, 44, 44, 44, 44, 44, 44,
- 44, 44, 44, 44, 31, 44, 44, 44, 44, 44,
- 44, 11, 44, 44, 44, 44, 44, 44, 44, 44,
- 44, 43, 43, 44, 0, 38, 44, 44, 21, 44,
- 44, 30, 35, 44, 44, 44, 44, 44, 18, 44,
- 44, 29, 44, 27, 44, 44, 12, 44, 15, 17,
-
- 44, 44, 44, 25, 44, 26, 44, 0, 41, 4,
- 44, 44, 44, 28, 44, 44, 44, 44, 44, 44,
- 44, 44, 24, 44, 44, 44, 44, 44, 42, 42,
- 44, 44, 44, 8, 44, 44, 44, 44, 44, 19,
- 44, 44, 10, 44, 44, 44, 44, 5, 22, 44,
- 44, 13, 44, 16, 44, 9, 44, 44, 44, 44,
- 44, 23, 33, 44, 44, 44, 44, 44, 44, 44,
- 44, 44, 6, 44, 44, 44, 7, 44, 14, 44,
- 44, 44, 32, 44, 44, 20, 44, 34, 44, 44,
- 44, 44, 36, 0
-
+ 0, 0, 49, 47, 1, 3, 47, 47, 47, 42,
+ 42, 40, 43, 47, 43, 43, 43, 43, 43, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+ 1, 3, 47, 0, 47, 47, 0, 2, 42, 43,
+ 47, 47, 47, 8, 47, 47, 43, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 34, 47, 47,
+ 47, 47, 47, 47, 14, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 46, 46, 47, 0, 41, 47,
+ 47, 47, 24, 47, 47, 33, 38, 47, 47, 47,
+ 47, 47, 21, 47, 47, 32, 47, 30, 47, 47,
+
+ 15, 47, 18, 20, 47, 47, 47, 28, 47, 29,
+ 7, 47, 0, 44, 47, 4, 47, 47, 47, 31,
+ 47, 47, 47, 47, 47, 47, 47, 47, 27, 47,
+ 47, 47, 47, 47, 45, 45, 6, 47, 47, 47,
+ 11, 47, 47, 47, 47, 47, 22, 47, 47, 13,
+ 47, 47, 47, 47, 5, 25, 47, 47, 16, 47,
+ 19, 47, 12, 47, 47, 47, 47, 47, 26, 36,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 9,
+ 47, 47, 47, 10, 47, 17, 47, 47, 47, 35,
+ 47, 47, 23, 47, 37, 47, 47, 47, 47, 39,
+
+ 0
} ;
static const YY_CHAR yy_ec[256] =
@@ -424,134 +425,136 @@ static const YY_CHAR yy_meta[40] =
1, 1, 1, 1, 1, 1, 1, 1, 1
} ;
-static const flex_int16_t yy_base[202] =
+static const flex_int16_t yy_base[209] =
{ 0,
- 0, 0, 265, 0, 262, 266, 260, 38, 42, 39,
- 224, 0, 45, 247, 55, 79, 61, 58, 239, 234,
- 46, 54, 55, 68, 73, 237, 46, 224, 0, 254,
- 266, 101, 250, 107, 111, 251, 266, 0, 108, 111,
- 238, 227, 216, 117, 223, 218, 228, 217, 225, 229,
- 216, 223, 223, 217, 223, 208, 208, 218, 208, 210,
- 212, 0, 199, 207, 201, 201, 206, 210, 202, 208,
- 207, 0, 266, 132, 219, 0, 212, 192, 205, 195,
- 202, 0, 0, 193, 191, 197, 194, 194, 0, 192,
- 182, 0, 186, 0, 190, 180, 0, 183, 0, 0,
-
- 189, 181, 180, 0, 171, 0, 198, 197, 0, 0,
- 182, 181, 174, 0, 178, 168, 164, 174, 162, 168,
- 173, 174, 0, 161, 168, 155, 158, 147, 0, 266,
- 159, 163, 155, 0, 154, 156, 152, 154, 159, 0,
- 143, 148, 0, 141, 141, 140, 137, 0, 0, 149,
- 151, 0, 135, 152, 138, 0, 145, 136, 117, 117,
- 124, 0, 0, 123, 115, 114, 112, 123, 109, 119,
- 109, 101, 0, 113, 111, 115, 0, 96, 0, 92,
- 82, 70, 0, 65, 77, 0, 77, 0, 71, 59,
- 44, 30, 0, 266, 41, 153, 155, 157, 159, 161,
-
- 163
+ 0, 0, 274, 0, 271, 275, 269, 38, 42, 39,
+ 233, 0, 45, 256, 55, 59, 83, 65, 62, 248,
+ 243, 68, 25, 48, 54, 75, 246, 75, 233, 0,
+ 263, 275, 106, 259, 111, 76, 260, 275, 0, 110,
+ 113, 247, 236, 0, 235, 224, 119, 231, 226, 236,
+ 225, 233, 237, 224, 231, 231, 225, 231, 216, 216,
+ 226, 216, 218, 220, 0, 207, 215, 209, 209, 214,
+ 218, 210, 216, 118, 0, 275, 135, 228, 0, 221,
+ 214, 200, 213, 203, 210, 0, 0, 201, 199, 205,
+ 202, 202, 0, 200, 190, 0, 194, 0, 198, 188,
+
+ 0, 191, 0, 0, 197, 189, 188, 0, 179, 0,
+ 0, 206, 205, 0, 176, 0, 189, 188, 181, 0,
+ 185, 175, 171, 181, 169, 175, 180, 181, 0, 168,
+ 175, 162, 165, 154, 0, 275, 0, 166, 170, 162,
+ 0, 161, 163, 159, 161, 166, 0, 150, 155, 0,
+ 148, 148, 147, 144, 0, 0, 156, 158, 0, 142,
+ 159, 145, 0, 152, 156, 137, 137, 144, 0, 0,
+ 143, 122, 121, 119, 130, 116, 126, 116, 108, 0,
+ 120, 118, 123, 0, 112, 0, 113, 116, 97, 0,
+ 89, 86, 0, 85, 0, 75, 65, 52, 61, 0,
+
+ 275, 48, 155, 157, 159, 161, 163, 165
} ;
-static const flex_int16_t yy_def[202] =
+static const flex_int16_t yy_def[209] =
{ 0,
- 194, 1, 194, 195, 194, 194, 195, 196, 197, 195,
- 10, 195, 10, 195, 10, 10, 10, 10, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 194,
- 194, 196, 198, 199, 197, 200, 194, 10, 10, 10,
- 195, 195, 195, 10, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 194, 199, 201, 40, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
-
- 195, 195, 195, 195, 195, 195, 195, 194, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 194,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 0, 194, 194, 194, 194, 194, 194,
-
- 194
+ 201, 1, 201, 202, 201, 201, 202, 203, 204, 202,
+ 10, 202, 10, 202, 10, 10, 10, 10, 10, 202,
+ 202, 202, 202, 202, 202, 202, 202, 202, 202, 202,
+ 201, 201, 203, 205, 206, 204, 207, 201, 10, 10,
+ 10, 202, 202, 202, 202, 202, 10, 202, 202, 202,
+ 202, 202, 202, 202, 202, 202, 202, 202, 202, 202,
+ 202, 202, 202, 202, 202, 202, 202, 202, 202, 202,
+ 202, 202, 202, 202, 202, 201, 206, 208, 41, 202,
+ 202, 202, 202, 202, 202, 202, 202, 202, 202, 202,
+ 202, 202, 202, 202, 202, 202, 202, 202, 202, 202,
+
+ 202, 202, 202, 202, 202, 202, 202, 202, 202, 202,
+ 202, 202, 201, 202, 202, 202, 202, 202, 202, 202,
+ 202, 202, 202, 202, 202, 202, 202, 202, 202, 202,
+ 202, 202, 202, 202, 202, 201, 202, 202, 202, 202,
+ 202, 202, 202, 202, 202, 202, 202, 202, 202, 202,
+ 202, 202, 202, 202, 202, 202, 202, 202, 202, 202,
+ 202, 202, 202, 202, 202, 202, 202, 202, 202, 202,
+ 202, 202, 202, 202, 202, 202, 202, 202, 202, 202,
+ 202, 202, 202, 202, 202, 202, 202, 202, 202, 202,
+ 202, 202, 202, 202, 202, 202, 202, 202, 202, 202,
+
+ 0, 201, 201, 201, 201, 201, 201, 201
} ;
-static const flex_int16_t yy_nxt[306] =
+static const flex_int16_t yy_nxt[315] =
{ 0,
4, 5, 6, 7, 8, 9, 10, 11, 10, 12,
- 13, 13, 14, 4, 4, 4, 13, 13, 15, 16,
- 17, 18, 19, 20, 21, 22, 23, 4, 24, 25,
- 4, 26, 27, 4, 28, 4, 4, 4, 4, 33,
- 33, 29, 34, 36, 37, 38, 38, 38, 193, 39,
- 39, 39, 39, 39, 53, 39, 39, 39, 39, 39,
- 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
- 57, 59, 68, 54, 55, 69, 192, 56, 42, 191,
- 70, 60, 49, 58, 43, 39, 39, 39, 47, 61,
- 190, 64, 189, 48, 50, 62, 188, 63, 187, 44,
-
- 65, 186, 33, 33, 66, 72, 185, 45, 75, 75,
- 46, 29, 36, 37, 39, 39, 39, 76, 76, 76,
- 184, 76, 76, 39, 39, 39, 183, 76, 76, 76,
- 76, 76, 76, 75, 75, 182, 107, 181, 180, 179,
- 178, 177, 176, 175, 174, 173, 172, 171, 170, 169,
- 168, 167, 80, 32, 32, 35, 35, 33, 33, 74,
- 74, 36, 36, 75, 75, 166, 165, 164, 163, 162,
- 161, 160, 159, 158, 157, 156, 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, 116, 115, 114, 113, 112,
- 111, 110, 109, 108, 106, 105, 104, 103, 102, 101,
- 100, 99, 98, 97, 96, 95, 94, 93, 92, 91,
- 90, 89, 88, 87, 86, 85, 84, 83, 82, 81,
- 79, 78, 77, 37, 73, 30, 71, 67, 52, 51,
- 41, 40, 31, 30, 194, 3, 194, 194, 194, 194,
- 194, 194, 194, 194, 194, 194, 194, 194, 194, 194,
- 194, 194, 194, 194, 194, 194, 194, 194, 194, 194,
- 194, 194, 194, 194, 194, 194, 194, 194, 194, 194,
-
- 194, 194, 194, 194, 194
+ 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, 60, 35, 37, 38, 39, 39, 39, 30, 40,
+ 40, 40, 40, 40, 61, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 62, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 63, 64, 56, 37, 38, 200,
+ 43, 65, 45, 66, 199, 198, 52, 44, 46, 40,
+ 40, 40, 50, 67, 197, 57, 58, 51, 53, 59,
+
+ 196, 71, 68, 47, 72, 195, 69, 34, 34, 73,
+ 75, 48, 78, 78, 49, 30, 40, 40, 40, 79,
+ 79, 79, 194, 79, 79, 40, 40, 40, 193, 79,
+ 79, 79, 79, 79, 79, 110, 78, 78, 111, 112,
+ 192, 191, 190, 189, 188, 187, 186, 185, 184, 183,
+ 182, 181, 180, 179, 84, 33, 33, 36, 36, 34,
+ 34, 77, 77, 37, 37, 78, 78, 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, 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,
+ 115, 114, 113, 109, 108, 107, 106, 105, 104, 103,
+ 102, 101, 100, 99, 98, 97, 96, 95, 94, 93,
+ 92, 91, 90, 89, 88, 87, 86, 85, 83, 82,
+ 81, 80, 38, 76, 31, 74, 70, 55, 54, 42,
+ 41, 32, 31, 201, 3, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201
} ;
-static const flex_int16_t yy_chk[306] =
+static const flex_int16_t yy_chk[315] =
{ 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, 195, 8, 9, 9, 10, 10, 10, 192, 10,
- 10, 13, 13, 13, 21, 10, 10, 10, 10, 10,
- 10, 15, 15, 15, 18, 18, 18, 17, 17, 17,
- 22, 23, 27, 21, 21, 27, 191, 21, 15, 190,
- 27, 23, 18, 22, 15, 16, 16, 16, 17, 24,
- 189, 25, 187, 17, 18, 24, 185, 24, 184, 16,
-
- 25, 182, 32, 32, 25, 32, 181, 16, 34, 34,
- 16, 34, 35, 35, 39, 39, 39, 40, 40, 40,
- 180, 40, 40, 44, 44, 44, 178, 40, 40, 40,
- 40, 40, 40, 74, 74, 176, 74, 175, 174, 172,
- 171, 170, 169, 168, 167, 166, 165, 164, 161, 160,
- 159, 158, 44, 196, 196, 197, 197, 198, 198, 199,
- 199, 200, 200, 201, 201, 157, 155, 154, 153, 151,
- 150, 147, 146, 145, 144, 142, 141, 139, 138, 137,
- 136, 135, 133, 132, 131, 128, 127, 126, 125, 124,
- 122, 121, 120, 119, 118, 117, 116, 115, 113, 112,
-
- 111, 108, 107, 105, 103, 102, 101, 98, 96, 95,
- 93, 91, 90, 88, 87, 86, 85, 84, 81, 80,
- 79, 78, 77, 75, 71, 70, 69, 68, 67, 66,
- 65, 64, 63, 61, 60, 59, 58, 57, 56, 55,
- 54, 53, 52, 51, 50, 49, 48, 47, 46, 45,
- 43, 42, 41, 36, 33, 30, 28, 26, 20, 19,
- 14, 11, 7, 5, 3, 194, 194, 194, 194, 194,
- 194, 194, 194, 194, 194, 194, 194, 194, 194, 194,
- 194, 194, 194, 194, 194, 194, 194, 194, 194, 194,
- 194, 194, 194, 194, 194, 194, 194, 194, 194, 194,
-
- 194, 194, 194, 194, 194
+ 8, 23, 8, 9, 9, 10, 10, 10, 202, 10,
+ 10, 13, 13, 13, 23, 10, 10, 10, 10, 10,
+ 10, 15, 15, 15, 24, 16, 16, 16, 19, 19,
+ 19, 18, 18, 18, 24, 25, 22, 36, 36, 199,
+ 15, 25, 16, 25, 198, 197, 19, 15, 16, 17,
+ 17, 17, 18, 26, 196, 22, 22, 18, 19, 22,
+
+ 194, 28, 26, 17, 28, 192, 26, 33, 33, 28,
+ 33, 17, 35, 35, 17, 35, 40, 40, 40, 41,
+ 41, 41, 191, 41, 41, 47, 47, 47, 189, 41,
+ 41, 41, 41, 41, 41, 74, 77, 77, 74, 77,
+ 188, 187, 185, 183, 182, 181, 179, 178, 177, 176,
+ 175, 174, 173, 172, 47, 203, 203, 204, 204, 205,
+ 205, 206, 206, 207, 207, 208, 208, 171, 168, 167,
+ 166, 165, 164, 162, 161, 160, 158, 157, 154, 153,
+ 152, 151, 149, 148, 146, 145, 144, 143, 142, 140,
+ 139, 138, 134, 133, 132, 131, 130, 128, 127, 126,
+
+ 125, 124, 123, 122, 121, 119, 118, 117, 115, 113,
+ 112, 109, 107, 106, 105, 102, 100, 99, 97, 95,
+ 94, 92, 91, 90, 89, 88, 85, 84, 83, 82,
+ 81, 80, 78, 73, 72, 71, 70, 69, 68, 67,
+ 66, 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, 20, 14,
+ 11, 7, 5, 3, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201
} ;
static yy_state_type yy_last_accepting_state;
@@ -816,13 +819,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 >= 195 )
+ if ( yy_current_state >= 202 )
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] != 266 );
+ while ( yy_base[yy_current_state] != 275 );
yy_find_action:
yy_act = yy_accept[yy_current_state];
@@ -870,163 +873,175 @@ YY_RULE_SETUP
YY_BREAK
case 6:
YY_RULE_SETUP
-{return(REGISTER);}
+{return(ALIAS);}
YY_BREAK
case 7:
YY_RULE_SETUP
-{return(FW_CONFIG_TABLE);}
+{return(REFERENCE);}
YY_BREAK
case 8:
YY_RULE_SETUP
-{return(FW_CONFIG_FIELD);}
+{return(ASSOCIATION);}
YY_BREAK
case 9:
YY_RULE_SETUP
-{return(FW_CONFIG_OPTION);}
+{return(REGISTER);}
YY_BREAK
case 10:
YY_RULE_SETUP
-{return(FW_CONFIG_PROBE);}
+{return(FW_CONFIG_TABLE);}
YY_BREAK
case 11:
YY_RULE_SETUP
-{yylval.number=1; return(BOOL);}
+{return(FW_CONFIG_FIELD);}
YY_BREAK
case 12:
YY_RULE_SETUP
-{yylval.number=0; return(BOOL);}
+{return(FW_CONFIG_OPTION);}
YY_BREAK
case 13:
YY_RULE_SETUP
-{yylval.number=3; return(STATUS);}
+{return(FW_CONFIG_PROBE);}
YY_BREAK
case 14:
YY_RULE_SETUP
-{yylval.number=5; return(STATUS);}
+{yylval.number=1; return(BOOL);}
YY_BREAK
case 15:
YY_RULE_SETUP
-{yylval.number=PCI; return(BUS);}
+{yylval.number=0; return(BOOL);}
YY_BREAK
case 16:
YY_RULE_SETUP
-{yylval.number=IOAPIC; return(BUS);}
+{yylval.number=3; return(STATUS);}
YY_BREAK
case 17:
YY_RULE_SETUP
-{yylval.number=PNP; return(BUS);}
+{yylval.number=5; return(STATUS);}
YY_BREAK
case 18:
YY_RULE_SETUP
-{yylval.number=I2C; return(BUS);}
+{yylval.number=PCI; return(BUS);}
YY_BREAK
case 19:
YY_RULE_SETUP
-{yylval.number=APIC; return(BUS);}
+{yylval.number=IOAPIC; return(BUS);}
YY_BREAK
case 20:
YY_RULE_SETUP
-{yylval.number=CPU_CLUSTER; return(BUS);}
+{yylval.number=PNP; return(BUS);}
YY_BREAK
case 21:
YY_RULE_SETUP
-{yylval.number=CPU; return(BUS);}
+{yylval.number=I2C; return(BUS);}
YY_BREAK
case 22:
YY_RULE_SETUP
-{yylval.number=DOMAIN; return(BUS);}
+{yylval.number=APIC; return(BUS);}
YY_BREAK
case 23:
YY_RULE_SETUP
-{yylval.number=GENERIC; return(BUS);}
+{yylval.number=CPU_CLUSTER; return(BUS);}
YY_BREAK
case 24:
YY_RULE_SETUP
-{yylval.number=MMIO; return(BUS);}
+{yylval.number=CPU; return(BUS);}
YY_BREAK
case 25:
YY_RULE_SETUP
-{yylval.number=SPI; return(BUS);}
+{yylval.number=DOMAIN; return(BUS);}
YY_BREAK
case 26:
YY_RULE_SETUP
-{yylval.number=USB; return(BUS);}
+{yylval.number=GENERIC; return(BUS);}
YY_BREAK
case 27:
YY_RULE_SETUP
-{yylval.number=LPC; return(BUS);}
+{yylval.number=MMIO; return(BUS);}
YY_BREAK
case 28:
YY_RULE_SETUP
-{yylval.number=ESPI; return(BUS);}
+{yylval.number=SPI; return(BUS);}
YY_BREAK
case 29:
YY_RULE_SETUP
-{yylval.number=IRQ; return(RESOURCE);}
+{yylval.number=USB; return(BUS);}
YY_BREAK
case 30:
YY_RULE_SETUP
-{yylval.number=DRQ; return(RESOURCE);}
+{yylval.number=LPC; return(BUS);}
YY_BREAK
case 31:
YY_RULE_SETUP
-{yylval.number=IO; return(RESOURCE);}
+{yylval.number=ESPI; return(BUS);}
YY_BREAK
case 32:
YY_RULE_SETUP
-{return(IOAPIC_IRQ);}
+{yylval.number=IRQ; return(RESOURCE);}
YY_BREAK
case 33:
YY_RULE_SETUP
-{return(INHERIT);}
+{yylval.number=DRQ; return(RESOURCE);}
YY_BREAK
case 34:
YY_RULE_SETUP
-{return(SUBSYSTEMID);}
+{yylval.number=IO; return(RESOURCE);}
YY_BREAK
case 35:
YY_RULE_SETUP
-{return(END);}
+{return(IOAPIC_IRQ);}
YY_BREAK
case 36:
YY_RULE_SETUP
-{return(SLOT_DESC);}
+{return(INHERIT);}
YY_BREAK
case 37:
YY_RULE_SETUP
-{return(EQUALS);}
+{return(SUBSYSTEMID);}
YY_BREAK
case 38:
YY_RULE_SETUP
-{yylval.string = malloc(yyleng+1); strncpy(yylval.string, yytext, yyleng); yylval.string[yyleng]='\0'; return(NUMBER);}
+{return(END);}
YY_BREAK
case 39:
YY_RULE_SETUP
-{yylval.string = malloc(yyleng+1); strncpy(yylval.string, yytext, yyleng); yylval.string[yyleng]='\0'; return(NUMBER);}
+{return(SLOT_DESC);}
YY_BREAK
case 40:
YY_RULE_SETUP
-{yylval.string = malloc(yyleng+1); strncpy(yylval.string, yytext, yyleng); yylval.string[yyleng]='\0'; return(NUMBER);}
+{return(EQUALS);}
YY_BREAK
case 41:
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 42:
-/* rule 42 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(NUMBER);}
YY_BREAK
case 43:
-/* rule 43 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(NUMBER);}
YY_BREAK
case 44:
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, yyleng); yylval.string[yyleng]='\0'; return(PCIINT);}
YY_BREAK
case 45:
+/* rule 45 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 46:
+/* rule 46 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 47:
+YY_RULE_SETUP
+{yylval.string = malloc(yyleng+1); strncpy(yylval.string, yytext, yyleng); yylval.string[yyleng]='\0'; return(STRING);}
+ YY_BREAK
+case 48:
YY_RULE_SETUP
ECHO;
YY_BREAK
@@ -1326,7 +1341,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 >= 195 )
+ if ( yy_current_state >= 202 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -1354,11 +1369,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 >= 195 )
+ if ( yy_current_state >= 202 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
- yy_is_jam = (yy_current_state == 194);
+ yy_is_jam = (yy_current_state == 201);
return yy_is_jam ? 0 : yy_current_state;
}
diff --git a/util/sconfig/main.c b/util/sconfig/main.c
index b0c32f677a..170acadec7 100644
--- a/util/sconfig/main.c
+++ b/util/sconfig/main.c
@@ -669,16 +669,41 @@ static void set_new_child(struct bus *parent, struct device *child)
child->parent = parent;
}
+static const struct device *find_alias(const struct device *const parent,
+ const char *const alias)
+{
+ if (parent->alias && !strcmp(parent->alias, alias))
+ return parent;
+
+ const struct bus *bus;
+ for (bus = parent->bus; bus; bus = bus->next_bus) {
+ const struct device *child;
+ for (child = bus->children; child; child = child->sibling) {
+ const struct device *const ret = find_alias(child, alias);
+ if (ret)
+ return ret;
+ }
+ }
+
+ return NULL;
+}
+
struct device *new_device(struct bus *parent,
struct chip_instance *chip_instance,
const int bustype, const char *devnum,
- int status)
+ char *alias, int status)
{
char *tmp;
int path_a;
int path_b = 0;
struct device *new_d;
+ /* Check for alias name conflicts. */
+ if (alias && find_alias(&base_root_dev, alias)) {
+ printf("ERROR: Alias already exists: %s\n", alias);
+ exit(1);
+ }
+
path_a = strtol(devnum, &tmp, 16);
if (*tmp == '.') {
tmp++;
@@ -698,6 +723,7 @@ struct device *new_device(struct bus *parent,
new_d->path_a = path_a;
new_d->path_b = path_b;
+ new_d->alias = alias;
new_d->enabled = status & 0x01;
new_d->hidden = (status >> 1) & 0x01;
@@ -819,6 +845,35 @@ void add_register(struct chip_instance *chip_instance, char *name, char *val)
add_reg(&chip_instance->reg, name, val);
}
+void add_reference(struct chip_instance *const chip_instance,
+ char *const name, char *const alias)
+{
+ add_reg(&chip_instance->ref, name, alias);
+}
+
+static void set_reference(struct chip_instance *const chip_instance,
+ char *const name, char *const alias)
+{
+ const struct device *const dev = find_alias(&base_root_dev, alias);
+ if (!dev) {
+ printf("ERROR: Cannot find device alias '%s'.\n", alias);
+ exit(1);
+ }
+
+ char *const ref_name = S_ALLOC(strlen(dev->name) + 2);
+ sprintf(ref_name, "&%s", dev->name);
+ add_register(chip_instance, name, ref_name);
+}
+
+static void update_references(FILE *file, FILE *head, struct device *dev,
+ struct device *next)
+{
+ struct reg *ref;
+
+ for (ref = dev->chip_instance->ref; ref; ref = ref->next)
+ set_reference(dev->chip_instance, ref->key, ref->value);
+}
+
void add_slot_desc(struct bus *bus, char *type, char *length, char *designation,
char *data_width)
{
@@ -1203,16 +1258,12 @@ static void emit_chip_instance(FILE *fil, struct chip_instance *instance)
fprintf(fil, "};\n\n");
}
-static void emit_chips(FILE *fil)
+static void emit_chip_configs(FILE *fil)
{
struct chip *chip = chip_header.next;
struct chip_instance *instance;
int chip_id;
- emit_chip_headers(fil, chip);
-
- fprintf(fil, "\n#define STORAGE static __unused DEVTREE_CONST\n\n");
-
for (; chip; chip = chip->next) {
if (!chip->chiph_exists)
continue;
@@ -1337,9 +1388,9 @@ static void update_resource(struct device *dev, struct resource *res)
* Add register to chip instance. If register is already present, then update
* its value. If not, then add a new register to the chip instance.
*/
-static void update_register(struct chip_instance *c, struct reg *reg)
+static void update_register(struct reg **const head, struct reg *reg)
{
- struct reg *base_reg = c->reg;
+ struct reg *base_reg = *head;
while (base_reg) {
if (!strcmp(base_reg->key, reg->key)) {
@@ -1349,7 +1400,7 @@ static void update_register(struct chip_instance *c, struct reg *reg)
base_reg = base_reg->next;
}
- add_register(c, reg->key, reg->value);
+ add_reg(head, reg->key, reg->value);
}
static void override_devicetree(struct bus *base_parent,
@@ -1422,6 +1473,19 @@ static void override_devicetree(struct bus *base_parent,
* | | |
* +-----------------------------------------------------------------+
* | | |
+ * | ref | Each reference that is present in override |
+ * | | device is copied over to base device with |
+ * | | the same rules as registers. |
+ * | | |
+ * +-----------------------------------------------------------------+
+ * | | |
+ * | alias | Base device alias is copied to override. |
+ * | | Override devices cannot change/remove an |
+ * | | existing alias, but they can add an alias |
+ * | | if one does not exist. |
+ * | | |
+ * +-----------------------------------------------------------------+
+ * | | |
* | chip_instance | Each register of chip_instance is copied |
* | | over from override device to base device: |
* | | 1. If register with same key is present in |
@@ -1492,10 +1556,34 @@ static void update_device(struct device *base_dev, struct device *override_dev)
*/
struct reg *reg = override_dev->chip_instance->reg;
while (reg) {
- update_register(base_dev->chip_instance, reg);
+ update_register(&base_dev->chip_instance->reg, reg);
reg = reg->next;
}
+ /* Copy references just as with registers. */
+ reg = override_dev->chip_instance->ref;
+ while (reg) {
+ update_register(&base_dev->chip_instance->ref, reg);
+ reg = reg->next;
+ }
+
+ /* Check for alias name conflicts. */
+ if (override_dev->alias && find_alias(&base_root_dev, override_dev->alias)) {
+ printf("ERROR: alias already exists: %s\n", override_dev->alias);
+ exit(1);
+ }
+
+ /*
+ * Copy alias from base device.
+ *
+ * Override devices cannot change/remove an existing alias,
+ * but they can add an alias to a device if one does not exist yet.
+ */
+ if (base_dev->alias)
+ override_dev->alias = base_dev->alias;
+ else
+ base_dev->alias = override_dev->alias;
+
/*
* Use probe list from override device in place of base device, in order
* to allow an override to remove a probe from the base device.
@@ -1631,12 +1719,15 @@ int main(int argc, char **argv)
fprintf(autogen, "#include <device/device.h>\n");
fprintf(autogen, "#include <device/pci.h>\n\n");
fprintf(autogen, "#include <static.h>\n");
-
- emit_chips(autogen);
+ emit_chip_headers(autogen, chip_header.next);
+ fprintf(autogen, "\n#define STORAGE static __unused DEVTREE_CONST\n\n");
walk_device_tree(autogen, autohead, &base_root_dev, inherit_subsystem_ids);
fprintf(autogen, "\n/* pass 0 */\n");
walk_device_tree(autogen, autohead, &base_root_dev, pass0);
+ walk_device_tree(autogen, autohead, &base_root_dev, update_references);
+ fprintf(autogen, "\n/* chip configs */\n");
+ emit_chip_configs(autogen);
fprintf(autogen, "\n/* pass 1 */\n");
walk_device_tree(autogen, autohead, &base_root_dev, pass1);
diff --git a/util/sconfig/sconfig.h b/util/sconfig/sconfig.h
index 1bbff4644c..719519e855 100644
--- a/util/sconfig/sconfig.h
+++ b/util/sconfig/sconfig.h
@@ -57,6 +57,9 @@ struct chip_instance {
/* Pointer to registers for this chip. */
struct reg *reg;
+ /* Pointer to references for this chip. */
+ struct reg *ref;
+
/* Pointer to chip of which this is instance. */
struct chip *chip;
@@ -123,6 +126,9 @@ struct device {
/* Name of this device. */
char *name;
+ /* Alias of this device (for internal references) */
+ char *alias;
+
/* Path of this device. */
char *path;
int path_a;
@@ -172,7 +178,7 @@ extern struct bus *root_parent;
struct device *new_device(struct bus *parent,
struct chip_instance *chip_instance,
const int bustype, const char *devnum,
- int status);
+ char *alias, int status);
void add_resource(struct bus *bus, int type, int index, int base);
@@ -195,6 +201,7 @@ void *chip_dequeue_tail(void);
struct chip_instance *new_chip_instance(char *path);
void add_register(struct chip_instance *chip, char *name, char *val);
+void add_reference(struct chip_instance *chip, char *name, char *alias);
struct fw_config_field *get_fw_config_field(const char *name);
diff --git a/util/sconfig/sconfig.l b/util/sconfig/sconfig.l
index 10a86a2f2b..0505150263 100755
--- a/util/sconfig/sconfig.l
+++ b/util/sconfig/sconfig.l
@@ -13,6 +13,9 @@ int linenum = 0;
\r?\n {linenum++;}
chip {return(CHIP);}
device {return(DEVICE);}
+alias {return(ALIAS);}
+use {return(REFERENCE);}
+as {return(ASSOCIATION);}
register {return(REGISTER);}
fw_config {return(FW_CONFIG_TABLE);}
field {return(FW_CONFIG_FIELD);}
diff --git a/util/sconfig/sconfig.tab.c_shipped b/util/sconfig/sconfig.tab.c_shipped
index c78f1ace25..52bb79cbfc 100644
--- a/util/sconfig/sconfig.tab.c_shipped
+++ b/util/sconfig/sconfig.tab.c_shipped
@@ -1,4 +1,4 @@
-/* A Bison parser, made by GNU Bison 3.5.1. */
+/* A Bison parser, made by GNU Bison 3.5.3. */
/* Bison implementation for Yacc-like parsers in C
@@ -48,7 +48,7 @@
#define YYBISON 1
/* Bison version. */
-#define YYBISON_VERSION "3.5.1"
+#define YYBISON_VERSION "3.5.3"
/* Skeleton name. */
#define YYSKELETON_NAME "yacc.c"
@@ -130,42 +130,45 @@ extern int yydebug;
CHIP = 258,
DEVICE = 259,
REGISTER = 260,
- BOOL = 261,
- STATUS = 262,
- MANDATORY = 263,
- BUS = 264,
- RESOURCE = 265,
- END = 266,
- EQUALS = 267,
- HEX = 268,
- STRING = 269,
- PCI = 270,
- PNP = 271,
- I2C = 272,
- APIC = 273,
- CPU_CLUSTER = 274,
- CPU = 275,
- DOMAIN = 276,
- IRQ = 277,
- DRQ = 278,
- SLOT_DESC = 279,
- IO = 280,
- NUMBER = 281,
- SUBSYSTEMID = 282,
- INHERIT = 283,
- IOAPIC_IRQ = 284,
- IOAPIC = 285,
- PCIINT = 286,
- GENERIC = 287,
- SPI = 288,
- USB = 289,
- MMIO = 290,
- LPC = 291,
- ESPI = 292,
- FW_CONFIG_TABLE = 293,
- FW_CONFIG_FIELD = 294,
- FW_CONFIG_OPTION = 295,
- FW_CONFIG_PROBE = 296
+ ALIAS = 261,
+ REFERENCE = 262,
+ ASSOCIATION = 263,
+ BOOL = 264,
+ STATUS = 265,
+ MANDATORY = 266,
+ BUS = 267,
+ RESOURCE = 268,
+ END = 269,
+ EQUALS = 270,
+ HEX = 271,
+ STRING = 272,
+ PCI = 273,
+ PNP = 274,
+ I2C = 275,
+ APIC = 276,
+ CPU_CLUSTER = 277,
+ CPU = 278,
+ DOMAIN = 279,
+ IRQ = 280,
+ DRQ = 281,
+ SLOT_DESC = 282,
+ IO = 283,
+ NUMBER = 284,
+ SUBSYSTEMID = 285,
+ INHERIT = 286,
+ IOAPIC_IRQ = 287,
+ IOAPIC = 288,
+ PCIINT = 289,
+ GENERIC = 290,
+ SPI = 291,
+ USB = 292,
+ MMIO = 293,
+ LPC = 294,
+ ESPI = 295,
+ FW_CONFIG_TABLE = 296,
+ FW_CONFIG_FIELD = 297,
+ FW_CONFIG_OPTION = 298,
+ FW_CONFIG_PROBE = 299
};
#endif
@@ -497,19 +500,19 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 2
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 58
+#define YYLAST 64
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 42
+#define YYNTOKENS 45
/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 23
+#define YYNNTS 25
/* YYNRULES -- Number of rules. */
-#define YYNRULES 44
+#define YYNRULES 48
/* YYNSTATES -- Number of states. */
-#define YYNSTATES 75
+#define YYNSTATES 83
#define YYUNDEFTOK 2
-#define YYMAXUTOK 296
+#define YYMAXUTOK 299
/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
@@ -550,18 +553,18 @@ static const yytype_int8 yytranslate[] =
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, 34,
- 35, 36, 37, 38, 39, 40, 41
+ 35, 36, 37, 38, 39, 40, 41, 42, 43, 44
};
#if YYDEBUG
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
static const yytype_int8 yyrline[] =
{
- 0, 24, 24, 24, 24, 26, 26, 26, 26, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 30, 30,
- 39, 39, 47, 47, 49, 52, 55, 58, 61, 64,
- 67, 70, 74, 77, 77, 80, 80, 83, 83, 89,
- 89, 95, 95, 101, 105
+ 0, 24, 24, 24, 24, 26, 26, 26, 26, 26,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 30,
+ 30, 39, 39, 47, 49, 53, 53, 55, 58, 61,
+ 64, 67, 70, 73, 76, 79, 83, 86, 86, 89,
+ 89, 92, 92, 98, 98, 104, 104, 110, 114
};
#endif
@@ -570,18 +573,19 @@ static const yytype_int8 yyrline[] =
First, the terminals, then, starting at YYNTOKENS, nonterminals. */
static const char *const yytname[] =
{
- "$end", "error", "$undefined", "CHIP", "DEVICE", "REGISTER", "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", "FW_CONFIG_TABLE", "FW_CONFIG_FIELD", "FW_CONFIG_OPTION",
- "FW_CONFIG_PROBE", "$accept", "devtree", "chipchildren",
- "devicechildren", "chip", "@1", "device", "@2", "status", "resource",
- "registers", "subsystemid", "ioapic_irq", "smbios_slot_desc",
- "fw_config_table", "fw_config_table_children",
- "fw_config_field_children", "fw_config_field", "$@3", "$@4", "$@5",
- "fw_config_option", "fw_config_probe", YY_NULLPTR
+ "$end", "error", "$undefined", "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", "FW_CONFIG_TABLE",
+ "FW_CONFIG_FIELD", "FW_CONFIG_OPTION", "FW_CONFIG_PROBE", "$accept",
+ "devtree", "chipchildren", "devicechildren", "chip", "@1", "device",
+ "@2", "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", "$@3", "$@4", "$@5", "fw_config_option",
+ "fw_config_probe", YY_NULLPTR
};
#endif
@@ -594,11 +598,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
+ 295, 296, 297, 298, 299
};
# endif
-#define YYPACT_NINF (-12)
+#define YYPACT_NINF (-21)
#define yypact_value_is_default(Yyn) \
((Yyn) == YYPACT_NINF)
@@ -612,14 +616,15 @@ static const yytype_int16 yytoknum[] =
STATE-NUM. */
static const yytype_int8 yypact[] =
{
- -12, 3, -12, 4, -12, -12, -12, -12, -2, -12,
- -12, 8, -12, 9, 1, 14, 11, -12, -12, -12,
- -12, 2, -12, 5, 17, -12, -12, -6, 10, 16,
- -12, -1, -12, 18, -12, -12, -12, -12, -12, 0,
- -12, 7, -12, -12, -12, -3, 19, -12, 21, 20,
- 22, 28, -12, -12, -12, -12, -12, -12, -12, -12,
- 31, 30, 23, 24, 33, 25, 36, 26, 27, -12,
- -12, 38, -12, -12, -12
+ -21, 3, -21, -4, -21, -21, -21, -21, -2, -21,
+ -21, 4, -21, 11, -20, 14, 6, 13, -21, -21,
+ -21, -21, -21, -1, -21, 2, 17, 26, -21, -21,
+ -10, 29, 21, 22, -21, -7, -21, 25, -21, 30,
+ 10, -21, -21, -6, -21, 19, -21, -21, -21, -21,
+ -21, -21, -21, -3, 20, -21, 33, 23, 24, 34,
+ -21, -21, -21, -21, -21, -21, -21, -21, 28, 37,
+ 27, 12, 38, 31, 40, 32, 35, -21, -21, 41,
+ -21, -21, -21
};
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -627,30 +632,31 @@ static const yytype_int8 yypact[] =
means the default is an error. */
static const yytype_int8 yydefact[] =
{
- 2, 0, 1, 0, 34, 3, 4, 18, 0, 8,
- 32, 0, 33, 0, 41, 0, 0, 19, 6, 5,
- 7, 39, 36, 0, 0, 37, 36, 0, 0, 0,
- 36, 0, 42, 0, 35, 22, 23, 20, 25, 0,
- 40, 0, 17, 38, 43, 0, 0, 21, 0, 0,
- 0, 0, 10, 9, 11, 15, 12, 13, 14, 16,
- 0, 0, 0, 0, 0, 0, 31, 26, 0, 44,
- 24, 30, 27, 28, 29
+ 2, 0, 1, 0, 38, 3, 4, 19, 0, 9,
+ 36, 0, 37, 0, 45, 0, 0, 0, 20, 6,
+ 5, 8, 7, 43, 40, 0, 0, 0, 41, 40,
+ 0, 23, 0, 0, 40, 0, 46, 0, 39, 0,
+ 0, 29, 28, 0, 44, 0, 24, 25, 26, 21,
+ 42, 47, 18, 0, 0, 22, 0, 0, 0, 0,
+ 11, 10, 12, 16, 13, 14, 15, 17, 0, 0,
+ 0, 0, 0, 0, 35, 30, 0, 48, 27, 34,
+ 31, 32, 33
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int8 yypgoto[] =
{
- -12, -12, -12, -12, -9, -12, 12, -12, -12, -12,
- 13, -12, -12, -12, -12, -12, -11, -12, -12, -12,
- -12, -12, -12
+ -21, -21, -21, -21, -8, -21, 8, -21, -21, -21,
+ -21, -21, 9, -21, -21, -21, -21, -21, -12, -21,
+ -21, -21, -21, -21, -21
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int8 yydefgoto[] =
{
- -1, 1, 13, 45, 5, 9, 19, 42, 37, 54,
- 20, 56, 57, 58, 6, 8, 27, 12, 30, 26,
- 22, 34, 59
+ -1, 1, 13, 53, 5, 9, 20, 52, 40, 49,
+ 62, 21, 22, 64, 65, 66, 6, 8, 30, 12,
+ 34, 29, 24, 38, 67
};
/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
@@ -658,56 +664,59 @@ static const yytype_int8 yydefgoto[] =
number is the opposite. If YYTABLE_NINF, syntax error. */
static const yytype_int8 yytable[] =
{
- 3, 15, 16, 2, 18, 32, 3, 46, 47, 10,
- 40, 43, 3, 15, 16, 31, 35, 36, 7, 39,
- 17, 48, 14, 23, 49, 24, 50, 21, 25, 29,
- 38, 28, 41, 44, 33, 61, 52, 11, 51, 33,
- 33, 4, 64, 65, 66, 60, 62, 69, 63, 67,
- 71, 70, 74, 73, 72, 68, 0, 53, 55
+ 3, 15, 16, 2, 36, 19, 3, 44, 50, 23,
+ 54, 55, 10, 7, 3, 15, 16, 35, 17, 47,
+ 48, 14, 43, 26, 56, 18, 25, 57, 28, 58,
+ 27, 31, 32, 37, 33, 39, 37, 37, 41, 42,
+ 11, 59, 45, 73, 4, 60, 76, 46, 51, 68,
+ 69, 72, 70, 71, 74, 77, 75, 79, 82, 0,
+ 78, 61, 63, 80, 81
};
static const yytype_int8 yycheck[] =
{
- 3, 4, 5, 0, 13, 11, 3, 10, 11, 11,
- 11, 11, 3, 4, 5, 26, 6, 7, 14, 30,
- 11, 24, 14, 9, 27, 14, 29, 26, 26, 12,
- 14, 26, 14, 26, 40, 14, 45, 39, 41, 40,
- 40, 38, 14, 12, 14, 26, 26, 14, 26, 26,
- 14, 26, 14, 26, 28, 31, -1, 45, 45
+ 3, 4, 5, 0, 14, 13, 3, 14, 14, 29,
+ 13, 14, 14, 17, 3, 4, 5, 29, 7, 9,
+ 10, 17, 34, 17, 27, 14, 12, 30, 29, 32,
+ 17, 29, 15, 43, 8, 6, 43, 43, 17, 17,
+ 42, 44, 17, 15, 41, 53, 34, 17, 29, 29,
+ 17, 17, 29, 29, 17, 17, 29, 17, 17, -1,
+ 29, 53, 53, 31, 29
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
static const yytype_int8 yystos[] =
{
- 0, 43, 0, 3, 38, 46, 56, 14, 57, 47,
- 11, 39, 59, 44, 14, 4, 5, 11, 46, 48,
- 52, 26, 62, 9, 14, 26, 61, 58, 26, 12,
- 60, 58, 11, 40, 63, 6, 7, 50, 14, 58,
- 11, 14, 49, 11, 26, 45, 10, 11, 24, 27,
- 29, 41, 46, 48, 51, 52, 53, 54, 55, 64,
- 26, 14, 26, 26, 14, 12, 14, 26, 31, 14,
- 26, 14, 28, 26, 14
+ 0, 46, 0, 3, 41, 49, 61, 17, 62, 50,
+ 14, 42, 64, 47, 17, 4, 5, 7, 14, 49,
+ 51, 56, 57, 29, 67, 12, 17, 17, 29, 66,
+ 63, 29, 15, 8, 65, 63, 14, 43, 68, 6,
+ 53, 17, 17, 63, 14, 17, 17, 9, 10, 54,
+ 14, 29, 52, 48, 13, 14, 27, 30, 32, 44,
+ 49, 51, 55, 57, 58, 59, 60, 69, 29, 17,
+ 29, 29, 17, 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, 42, 43, 43, 43, 44, 44, 44, 44, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 47, 46,
- 49, 48, 50, 50, 51, 52, 53, 53, 54, 55,
- 55, 55, 56, 57, 57, 58, 58, 60, 59, 61,
- 59, 62, 59, 63, 64
+ 0, 45, 46, 46, 46, 47, 47, 47, 47, 47,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 50,
+ 49, 52, 51, 53, 53, 54, 54, 55, 56, 57,
+ 58, 58, 59, 60, 60, 60, 61, 62, 62, 63,
+ 63, 65, 64, 66, 64, 67, 64, 68, 69
};
/* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
static const yytype_int8 yyr2[] =
{
- 0, 2, 0, 2, 2, 2, 2, 2, 0, 2,
- 2, 2, 2, 2, 2, 2, 2, 0, 0, 5,
- 0, 7, 1, 1, 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, 2, 2, 2, 2, 2, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 0, 0,
+ 5, 0, 8, 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
};
@@ -1406,7 +1415,7 @@ yyreduce:
{ cur_parent = root_parent; }
break;
- case 18:
+ case 19:
{
(yyval.chip_instance) = new_chip_instance((yyvsp[0].string));
chip_enqueue_tail(cur_chip_instance);
@@ -1414,96 +1423,112 @@ yyreduce:
}
break;
- case 19:
+ case 20:
{
cur_chip_instance = chip_dequeue_tail();
}
break;
- case 20:
- {
- (yyval.dev) = new_device(cur_parent, cur_chip_instance, (yyvsp[-2].number), (yyvsp[-1].string), (yyvsp[0].number));
+ case 21:
+ {
+ (yyval.dev) = new_device(cur_parent, cur_chip_instance, (yyvsp[-3].number), (yyvsp[-2].string), (yyvsp[-1].string), (yyvsp[0].number));
cur_parent = (yyval.dev)->last_bus;
}
break;
- case 21:
+ case 22:
{
cur_parent = (yyvsp[-2].dev)->parent;
}
break;
+ case 23:
+ {
+ (yyval.string) = NULL;
+}
+ break;
+
case 24:
+ {
+ (yyval.string) = (yyvsp[0].string);
+}
+ break;
+
+ case 27:
{ add_resource(cur_parent, (yyvsp[-3].number), strtol((yyvsp[-2].string), NULL, 0), strtol((yyvsp[0].string), NULL, 0)); }
break;
- case 25:
+ case 28:
+ { add_reference(cur_chip_instance, (yyvsp[0].string), (yyvsp[-2].string)); }
+ break;
+
+ case 29:
{ add_register(cur_chip_instance, (yyvsp[-2].string), (yyvsp[0].string)); }
break;
- case 26:
+ case 30:
{ add_pci_subsystem_ids(cur_parent, strtol((yyvsp[-1].string), NULL, 16), strtol((yyvsp[0].string), NULL, 16), 0); }
break;
- case 27:
+ case 31:
{ add_pci_subsystem_ids(cur_parent, strtol((yyvsp[-2].string), NULL, 16), strtol((yyvsp[-1].string), NULL, 16), 1); }
break;
- case 28:
+ case 32:
{ add_ioapic_info(cur_parent, strtol((yyvsp[-2].string), NULL, 16), (yyvsp[-1].string), strtol((yyvsp[0].string), NULL, 16)); }
break;
- case 29:
+ case 33:
{ add_slot_desc(cur_parent, (yyvsp[-3].string), (yyvsp[-2].string), (yyvsp[-1].string), (yyvsp[0].string)); }
break;
- case 30:
+ case 34:
{ add_slot_desc(cur_parent, (yyvsp[-2].string), (yyvsp[-1].string), (yyvsp[0].string), NULL); }
break;
- case 31:
+ case 35:
{ add_slot_desc(cur_parent, (yyvsp[-1].string), (yyvsp[0].string), NULL, NULL); }
break;
- case 32:
+ case 36:
{ }
break;
- case 37:
+ case 41:
{
cur_field = new_fw_config_field((yyvsp[-2].string), strtoul((yyvsp[-1].string), NULL, 0), strtoul((yyvsp[0].string), NULL, 0));
}
break;
- case 38:
+ case 42:
{ }
break;
- case 39:
+ case 43:
{
cur_field = new_fw_config_field((yyvsp[-1].string), strtoul((yyvsp[0].string), NULL, 0), strtoul((yyvsp[0].string), NULL, 0));
}
break;
- case 40:
+ case 44:
{ }
break;
- case 41:
+ case 45:
{
cur_field = get_fw_config_field((yyvsp[0].string));
}
break;
- case 42:
+ case 46:
{ }
break;
- case 43:
+ case 47:
{ add_fw_config_option(cur_field, (yyvsp[-1].string), strtoul((yyvsp[0].string), NULL, 0)); }
break;
- case 44:
+ case 48:
{ add_fw_config_probe(cur_parent, (yyvsp[-1].string), (yyvsp[0].string)); }
break;
diff --git a/util/sconfig/sconfig.tab.h_shipped b/util/sconfig/sconfig.tab.h_shipped
index cadd847fa4..b556bbad13 100644
--- a/util/sconfig/sconfig.tab.h_shipped
+++ b/util/sconfig/sconfig.tab.h_shipped
@@ -1,4 +1,4 @@
-/* A Bison parser, made by GNU Bison 3.5.1. */
+/* A Bison parser, made by GNU Bison 3.5.3. */
/* Bison interface for Yacc-like parsers in C
@@ -52,42 +52,45 @@ extern int yydebug;
CHIP = 258,
DEVICE = 259,
REGISTER = 260,
- BOOL = 261,
- STATUS = 262,
- MANDATORY = 263,
- BUS = 264,
- RESOURCE = 265,
- END = 266,
- EQUALS = 267,
- HEX = 268,
- STRING = 269,
- PCI = 270,
- PNP = 271,
- I2C = 272,
- APIC = 273,
- CPU_CLUSTER = 274,
- CPU = 275,
- DOMAIN = 276,
- IRQ = 277,
- DRQ = 278,
- SLOT_DESC = 279,
- IO = 280,
- NUMBER = 281,
- SUBSYSTEMID = 282,
- INHERIT = 283,
- IOAPIC_IRQ = 284,
- IOAPIC = 285,
- PCIINT = 286,
- GENERIC = 287,
- SPI = 288,
- USB = 289,
- MMIO = 290,
- LPC = 291,
- ESPI = 292,
- FW_CONFIG_TABLE = 293,
- FW_CONFIG_FIELD = 294,
- FW_CONFIG_OPTION = 295,
- FW_CONFIG_PROBE = 296
+ ALIAS = 261,
+ REFERENCE = 262,
+ ASSOCIATION = 263,
+ BOOL = 264,
+ STATUS = 265,
+ MANDATORY = 266,
+ BUS = 267,
+ RESOURCE = 268,
+ END = 269,
+ EQUALS = 270,
+ HEX = 271,
+ STRING = 272,
+ PCI = 273,
+ PNP = 274,
+ I2C = 275,
+ APIC = 276,
+ CPU_CLUSTER = 277,
+ CPU = 278,
+ DOMAIN = 279,
+ IRQ = 280,
+ DRQ = 281,
+ SLOT_DESC = 282,
+ IO = 283,
+ NUMBER = 284,
+ SUBSYSTEMID = 285,
+ INHERIT = 286,
+ IOAPIC_IRQ = 287,
+ IOAPIC = 288,
+ PCIINT = 289,
+ GENERIC = 290,
+ SPI = 291,
+ USB = 292,
+ MMIO = 293,
+ LPC = 294,
+ ESPI = 295,
+ FW_CONFIG_TABLE = 296,
+ FW_CONFIG_FIELD = 297,
+ FW_CONFIG_OPTION = 298,
+ FW_CONFIG_PROBE = 299
};
#endif
diff --git a/util/sconfig/sconfig.y b/util/sconfig/sconfig.y
index 57e939d9f0..d441ff812d 100755
--- a/util/sconfig/sconfig.y
+++ b/util/sconfig/sconfig.y
@@ -19,11 +19,11 @@ static struct fw_config_field *cur_field;
int number;
}
-%token CHIP DEVICE REGISTER 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 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 FW_CONFIG_TABLE FW_CONFIG_FIELD FW_CONFIG_OPTION FW_CONFIG_PROBE
%%
devtree: { cur_parent = root_parent; } | devtree chip | devtree fw_config_table;
-chipchildren: chipchildren device | chipchildren chip | chipchildren registers | /* empty */ ;
+chipchildren: chipchildren device | chipchildren chip | chipchildren registers | chipchildren reference | /* empty */ ;
devicechildren: devicechildren device | devicechildren chip | devicechildren resource | devicechildren subsystemid | devicechildren ioapic_irq | devicechildren smbios_slot_desc | devicechildren registers | devicechildren fw_config_probe | /* empty */ ;
@@ -36,12 +36,18 @@ chip: CHIP STRING /* == path */ {
cur_chip_instance = chip_dequeue_tail();
};
-device: DEVICE BUS NUMBER /* == devnum */ status {
- $<dev>$ = new_device(cur_parent, cur_chip_instance, $<number>2, $<string>3, $<number>4);
+device: DEVICE BUS NUMBER /* == devnum */ alias status {
+ $<dev>$ = new_device(cur_parent, cur_chip_instance, $<number>2, $<string>3, $<string>4, $<number>5);
cur_parent = $<dev>$->last_bus;
}
devicechildren END {
- cur_parent = $<dev>5->parent;
+ cur_parent = $<dev>6->parent;
+};
+
+alias: /* empty */ {
+ $<string>$ = NULL;
+} | ALIAS STRING {
+ $<string>$ = $<string>2;
};
status: BOOL | STATUS ;
@@ -49,6 +55,9 @@ status: BOOL | STATUS ;
resource: RESOURCE NUMBER /* == resnum */ EQUALS NUMBER /* == resval */
{ add_resource(cur_parent, $<number>1, strtol($<string>2, NULL, 0), strtol($<string>4, NULL, 0)); } ;
+reference: REFERENCE STRING /* == alias */ ASSOCIATION STRING /* == field in chip config */
+ { add_reference(cur_chip_instance, $<string>4, $<string>2); } ;
+
registers: REGISTER STRING /* == regname */ EQUALS STRING /* == regval */
{ add_register(cur_chip_instance, $<string>2, $<string>4); } ;