Nico Huber has uploaded this change for review.

View Change

[RFC] sconfig: Allow to give static device nodes a name

The idea is to give device nodes in the `devicetree.cb` a name that can
later be used in C code to identify the device (without having to look
it up by fragile means). For this, we add an optional `as <identifier>`
to the device declaration, for instance:

device i2c 0x50 as serial_eeprom on end

This leads to a `struct device __static_serial_eeprom;` that can then
be used throughout coreboot.

Change-Id: I058a319f9b968924fbef9485a96c9e3f900a3ee8
Signed-off-by: Nico Huber <nico.huber@secunet.com>
---
M Makefile.inc
M util/sconfig/lex.yy.c_shipped
M util/sconfig/main.c
M util/sconfig/sconfig.h
M util/sconfig/sconfig.l
M util/sconfig/sconfig.tab.c_shipped
M util/sconfig/sconfig.tab.h_shipped
M util/sconfig/sconfig.y
8 files changed, 589 insertions(+), 505 deletions(-)

git pull ssh://review.coreboot.org:29418/coreboot refs/changes/56/35456/1
diff --git a/Makefile.inc b/Makefile.inc
index 3c3088d..ed4874a 100644
--- a/Makefile.inc
+++ b/Makefile.inc
@@ -386,7 +386,7 @@
COREBOOT_EXPORTS += COREBOOT_EXTRA_VERSION
endif

-CPPFLAGS_common := -Isrc -Isrc/include -Isrc/commonlib/include -I$(obj)
+CPPFLAGS_common := -Isrc -Isrc/include -Isrc/commonlib/include -I$(obj) -I$(obj)/mainboard/$(MAINBOARDDIR)
VBOOT_SOURCE ?= 3rdparty/vboot
CPPFLAGS_common += -I$(VBOOT_SOURCE)/firmware/include
CPPFLAGS_common += -include $(src)/include/kconfig.h
diff --git a/util/sconfig/lex.yy.c_shipped b/util/sconfig/lex.yy.c_shipped
index 14ffeff..c8202a1 100644
--- a/util/sconfig/lex.yy.c_shipped
+++ b/util/sconfig/lex.yy.c_shipped
@@ -6,7 +6,7 @@
#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 6
-#define YY_FLEX_SUBMINOR_VERSION 1
+#define YY_FLEX_SUBMINOR_VERSION 4
#if YY_FLEX_SUBMINOR_VERSION > 0
#define FLEX_BETA
#endif
@@ -81,10 +81,16 @@
#define UINT32_MAX (4294967295U)
#endif

+#ifndef SIZE_MAX
+#define SIZE_MAX (~(size_t)0)
+#endif
+
#endif /* ! C99 */

#endif /* ! FLEXINT_H */

+/* begin standard C++ headers. */
+
/* TODO: this is always defined, so inline it */
#define yyconst const

@@ -97,32 +103,26 @@
/* Returned upon end-of-file. */
#define YY_NULL 0

-/* Promotes a possibly negative, possibly signed char to an unsigned
- * integer for use as an array index. If the signed char is negative,
- * we want to instead treat it as an 8-bit unsigned char, hence the
- * double cast.
+/* Promotes a possibly negative, possibly signed char to an
+ * integer in range [0..255] for use as an array index.
*/
-#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+#define YY_SC_TO_UI(c) ((YY_CHAR) (c))

/* Enter a start condition. This macro really ought to take a parameter,
* but we do it the disgusting crufty way forced on us by the ()-less
* definition of BEGIN.
*/
#define BEGIN (yy_start) = 1 + 2 *
-
/* Translate the current start state into a value that can be later handed
* to BEGIN to return to the state. The YYSTATE alias is for lex
* compatibility.
*/
#define YY_START (((yy_start) - 1) / 2)
#define YYSTATE YY_START
-
/* Action number for EOF rule of a given start state. */
#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
-
/* Special action meaning "start processing a new file". */
-#define YY_NEW_FILE yyrestart(yyin )
-
+#define YY_NEW_FILE yyrestart( yyin )
#define YY_END_OF_BUFFER_CHAR 0

/* Size of default input buffer. */
@@ -159,7 +159,7 @@
#define EOB_ACT_CONTINUE_SCAN 0
#define EOB_ACT_END_OF_FILE 1
#define EOB_ACT_LAST_MATCH 2
-
+
#define YY_LESS_LINENO(n)
#define YY_LINENO_REWIND_TO(ptr)

@@ -168,7 +168,7 @@
do \
{ \
/* Undo effects of setting up yytext. */ \
- yy_size_t yyless_macro_arg = (n); \
+ int yyless_macro_arg = (n); \
YY_LESS_LINENO(yyless_macro_arg);\
*yy_cp = (yy_hold_char); \
YY_RESTORE_YY_MORE_OFFSET \
@@ -176,7 +176,6 @@
YY_DO_BEFORE_ACTION; /* set up yytext again */ \
} \
while ( 0 )
-
#define unput(c) yyunput( c, (yytext_ptr) )

#ifndef YY_STRUCT_YY_BUFFER_STATE
@@ -258,7 +257,6 @@
#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
? (yy_buffer_stack)[(yy_buffer_stack_top)] \
: NULL)
-
/* Same as previous macro, but useful when we know that the buffer stack is not
* NULL or when we need an lvalue. For internal use only.
*/
@@ -279,62 +277,56 @@
*/
static int yy_did_buffer_switch_on_eof;

-void yyrestart (FILE *input_file );
-void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer );
-YY_BUFFER_STATE yy_create_buffer (FILE *file,int size );
-void yy_delete_buffer (YY_BUFFER_STATE b );
-void yy_flush_buffer (YY_BUFFER_STATE b );
-void yypush_buffer_state (YY_BUFFER_STATE new_buffer );
-void yypop_buffer_state (void );
+void yyrestart ( FILE *input_file );
+void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer );
+YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size );
+void yy_delete_buffer ( YY_BUFFER_STATE b );
+void yy_flush_buffer ( YY_BUFFER_STATE b );
+void yypush_buffer_state ( YY_BUFFER_STATE new_buffer );
+void yypop_buffer_state ( void );

-static void yyensure_buffer_stack (void );
-static void yy_load_buffer_state (void );
-static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file );
+static void yyensure_buffer_stack ( void );
+static void yy_load_buffer_state ( void );
+static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file );
+#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER )

-#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER )
+YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size );
+YY_BUFFER_STATE yy_scan_string ( const char *yy_str );
+YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len );

-YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size );
-YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str );
-YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len );
-
-void *yyalloc (yy_size_t );
-void *yyrealloc (void *,yy_size_t );
-void yyfree (void * );
+void *yyalloc ( yy_size_t );
+void *yyrealloc ( void *, yy_size_t );
+void yyfree ( void * );

#define yy_new_buffer yy_create_buffer
-
#define yy_set_interactive(is_interactive) \
{ \
if ( ! YY_CURRENT_BUFFER ){ \
yyensure_buffer_stack (); \
YY_CURRENT_BUFFER_LVALUE = \
- yy_create_buffer(yyin,YY_BUF_SIZE ); \
+ yy_create_buffer( yyin, YY_BUF_SIZE ); \
} \
YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
}
-
#define yy_set_bol(at_bol) \
{ \
if ( ! YY_CURRENT_BUFFER ){\
yyensure_buffer_stack (); \
YY_CURRENT_BUFFER_LVALUE = \
- yy_create_buffer(yyin,YY_BUF_SIZE ); \
+ yy_create_buffer( yyin, YY_BUF_SIZE ); \
} \
YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
}
-
#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)

/* Begin user sect3 */
-
-typedef unsigned char YY_CHAR;
+typedef flex_uint8_t YY_CHAR;

FILE *yyin = NULL, *yyout = NULL;

typedef int yy_state_type;

extern int yylineno;
-
int yylineno = 1;

extern char *yytext;
@@ -343,10 +335,10 @@
#endif
#define yytext_ptr yytext

-static yy_state_type yy_get_previous_state (void );
-static yy_state_type yy_try_NUL_trans (yy_state_type current_state );
-static int yy_get_next_buffer (void );
-static void yynoreturn yy_fatal_error (yyconst char* msg );
+static yy_state_type yy_get_previous_state ( void );
+static yy_state_type yy_try_NUL_trans ( yy_state_type current_state );
+static int yy_get_next_buffer ( void );
+static void yynoreturn yy_fatal_error ( const char* msg );

/* Done after the current pattern has been matched and before the
* corresponding action - sets up yytext.
@@ -357,9 +349,8 @@
(yy_hold_char) = *yy_cp; \
*yy_cp = '\0'; \
(yy_c_buf_p) = yy_cp;
-
-#define YY_NUM_RULES 38
-#define YY_END_OF_BUFFER 39
+#define YY_NUM_RULES 39
+#define YY_END_OF_BUFFER 40
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
@@ -367,28 +358,29 @@
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
-static yyconst flex_int16_t yy_accept[160] =
+static const flex_int16_t yy_accept[162] =
{ 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,
+ 0, 0, 40, 38, 1, 3, 38, 38, 38, 33,
+ 33, 31, 34, 38, 34, 34, 34, 34, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 1,
+ 3, 38, 0, 38, 38, 0, 2, 33, 34, 38,
+ 38, 7, 38, 38, 34, 38, 38, 38, 38, 38,
+ 38, 38, 25, 38, 38, 38, 38, 8, 38, 38,
+ 38, 38, 38, 38, 38, 37, 37, 38, 0, 32,
+ 38, 38, 17, 38, 38, 24, 29, 38, 38, 14,
+ 38, 38, 23, 38, 38, 9, 11, 13, 38, 38,
+ 21, 38, 22, 38, 0, 35, 4, 38, 38, 38,

- 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
+ 38, 38, 38, 38, 38, 20, 38, 38, 38, 36,
+ 36, 38, 38, 38, 38, 38, 38, 38, 15, 38,
+ 38, 38, 38, 5, 18, 38, 10, 38, 12, 38,
+ 38, 38, 38, 19, 27, 38, 38, 38, 38, 38,
+ 38, 6, 38, 38, 38, 38, 38, 38, 38, 26,
+ 38, 38, 16, 38, 28, 38, 38, 38, 38, 30,
+ 0
} ;

-static yyconst YY_CHAR yy_ec[256] =
+static const YY_CHAR yy_ec[256] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
1, 1, 4, 1, 1, 1, 1, 1, 1, 1,
@@ -420,7 +412,7 @@
1, 1, 1, 1, 1
} ;

-static yyconst YY_CHAR yy_meta[39] =
+static const YY_CHAR yy_meta[39] =
{ 0,
1, 2, 2, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -428,114 +420,114 @@
1, 1, 1, 1, 1, 1, 1, 1
} ;

-static yyconst flex_uint16_t yy_base[167] =
+static const flex_int16_t yy_base[169] =
{ 0,
- 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,
+ 0, 0, 231, 0, 228, 232, 226, 37, 41, 38,
+ 191, 0, 44, 213, 54, 58, 82, 64, 205, 200,
+ 65, 207, 196, 26, 49, 201, 48, 188, 0, 218,
+ 232, 93, 214, 97, 67, 215, 232, 0, 72, 108,
+ 202, 0, 191, 180, 77, 187, 182, 192, 183, 190,
+ 190, 184, 190, 175, 175, 179, 181, 0, 177, 171,
+ 177, 181, 173, 179, 178, 0, 232, 102, 190, 0,
+ 183, 163, 176, 166, 173, 0, 0, 168, 168, 0,
+ 166, 156, 0, 160, 155, 0, 0, 0, 158, 157,
+ 0, 148, 0, 175, 174, 0, 0, 159, 158, 151,

- 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
+ 143, 153, 141, 147, 152, 0, 137, 140, 130, 0,
+ 232, 141, 145, 137, 139, 135, 137, 142, 0, 126,
+ 126, 125, 122, 0, 0, 137, 0, 121, 138, 132,
+ 136, 117, 117, 0, 0, 124, 116, 114, 125, 111,
+ 112, 0, 117, 97, 102, 91, 92, 93, 80, 0,
+ 76, 89, 0, 92, 0, 86, 80, 43, 45, 0,
+ 232, 40, 130, 132, 134, 136, 138, 140
} ;

-static yyconst flex_int16_t yy_def[167] =
+static const flex_int16_t yy_def[169] =
{ 0,
- 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,
+ 161, 1, 161, 162, 161, 161, 162, 163, 164, 162,
+ 10, 162, 10, 162, 10, 10, 10, 10, 162, 162,
+ 162, 162, 162, 162, 162, 162, 162, 162, 162, 161,
+ 161, 163, 165, 166, 164, 167, 161, 10, 10, 10,
+ 162, 162, 162, 162, 10, 162, 162, 162, 162, 162,
+ 162, 162, 162, 162, 162, 162, 162, 162, 162, 162,
+ 162, 162, 162, 162, 162, 162, 161, 166, 168, 40,
+ 162, 162, 162, 162, 162, 162, 162, 162, 162, 162,
+ 162, 162, 162, 162, 162, 162, 162, 162, 162, 162,
+ 162, 162, 162, 162, 161, 162, 162, 162, 162, 162,

- 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
+ 162, 162, 162, 162, 162, 162, 162, 162, 162, 162,
+ 161, 162, 162, 162, 162, 162, 162, 162, 162, 162,
+ 162, 162, 162, 162, 162, 162, 162, 162, 162, 162,
+ 162, 162, 162, 162, 162, 162, 162, 162, 162, 162,
+ 162, 162, 162, 162, 162, 162, 162, 162, 162, 162,
+ 162, 162, 162, 162, 162, 162, 162, 162, 162, 162,
+ 0, 161, 161, 161, 161, 161, 161, 161
} ;

-static yyconst flex_uint16_t yy_nxt[267] =
+static const flex_int16_t yy_nxt[271] =
{ 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, 158, 38, 38,
- 38, 38, 38, 49, 38, 38, 38, 38, 38, 38,
- 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,
+ 13, 13, 14, 4, 4, 4, 15, 13, 16, 17,
+ 18, 13, 19, 20, 21, 22, 23, 4, 24, 25,
+ 4, 26, 27, 4, 28, 4, 4, 4, 33, 33,
+ 29, 34, 36, 37, 38, 38, 38, 57, 39, 39,
+ 39, 39, 39, 58, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 160, 39, 39, 39, 59, 36, 37,
+ 39, 39, 39, 51, 62, 159, 60, 63, 39, 39,
+ 39, 43, 64, 39, 39, 39, 42, 44, 39, 39,
+ 39, 48, 52, 53, 33, 33, 54, 66, 69, 69,

- 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,
+ 158, 29, 45, 69, 69, 157, 94, 156, 155, 154,
+ 46, 153, 74, 47, 70, 70, 70, 152, 70, 70,
+ 151, 150, 149, 148, 70, 70, 70, 70, 70, 70,
+ 32, 32, 35, 35, 33, 33, 68, 68, 36, 36,
+ 69, 69, 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, 107, 106, 105, 104, 103, 102, 101, 100,
+ 99, 98, 97, 96, 95, 93, 92, 91, 90, 89,

- 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
+ 88, 87, 86, 85, 84, 83, 82, 81, 80, 79,
+ 78, 77, 76, 75, 73, 72, 71, 37, 67, 30,
+ 65, 61, 56, 55, 50, 49, 41, 40, 31, 30,
+ 161, 3, 161, 161, 161, 161, 161, 161, 161, 161,
+ 161, 161, 161, 161, 161, 161, 161, 161, 161, 161,
+ 161, 161, 161, 161, 161, 161, 161, 161, 161, 161,
+ 161, 161, 161, 161, 161, 161, 161, 161, 161, 161
} ;

-static yyconst flex_int16_t yy_chk[267] =
+static const flex_int16_t yy_chk[271] =
{ 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,
- 160, 8, 9, 9, 10, 10, 10, 157, 10, 10,
- 13, 13, 13, 20, 10, 10, 10, 10, 10, 10,
- 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,
+ 162, 8, 9, 9, 10, 10, 10, 24, 10, 10,
+ 13, 13, 13, 24, 10, 10, 10, 10, 10, 10,
+ 15, 15, 15, 159, 16, 16, 16, 25, 35, 35,
+ 18, 18, 18, 21, 27, 158, 25, 27, 39, 39,
+ 39, 16, 27, 45, 45, 45, 15, 16, 17, 17,
+ 17, 18, 21, 21, 32, 32, 21, 32, 34, 34,

- 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,
+ 157, 34, 17, 68, 68, 156, 68, 154, 152, 151,
+ 17, 149, 45, 17, 40, 40, 40, 148, 40, 40,
+ 147, 146, 145, 144, 40, 40, 40, 40, 40, 40,
+ 163, 163, 164, 164, 165, 165, 166, 166, 167, 167,
+ 168, 168, 143, 141, 140, 139, 138, 137, 136, 133,
+ 132, 131, 130, 129, 128, 126, 123, 122, 121, 120,
+ 118, 117, 116, 115, 114, 113, 112, 109, 108, 107,
+ 105, 104, 103, 102, 101, 100, 99, 98, 95, 94,
+ 92, 90, 89, 85, 84, 82, 81, 79, 78, 75,
+ 74, 73, 72, 71, 69, 65, 64, 63, 62, 61,

- 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
+ 60, 59, 57, 56, 55, 54, 53, 52, 51, 50,
+ 49, 48, 47, 46, 44, 43, 41, 36, 33, 30,
+ 28, 26, 23, 22, 20, 19, 14, 11, 7, 5,
+ 3, 161, 161, 161, 161, 161, 161, 161, 161, 161,
+ 161, 161, 161, 161, 161, 161, 161, 161, 161, 161,
+ 161, 161, 161, 161, 161, 161, 161, 161, 161, 161,
+ 161, 161, 161, 161, 161, 161, 161, 161, 161, 161
} ;

static yy_state_type yy_last_accepting_state;
@@ -586,36 +578,36 @@
#define YY_EXTRA_TYPE void *
#endif

-static int yy_init_globals (void );
+static int yy_init_globals ( void );

/* Accessor methods to globals.
These are made visible to non-reentrant scanners for convenience. */

-int yylex_destroy (void );
+int yylex_destroy ( void );

-int yyget_debug (void );
+int yyget_debug ( void );

-void yyset_debug (int debug_flag );
+void yyset_debug ( int debug_flag );

-YY_EXTRA_TYPE yyget_extra (void );
+YY_EXTRA_TYPE yyget_extra ( void );

-void yyset_extra (YY_EXTRA_TYPE user_defined );
+void yyset_extra ( YY_EXTRA_TYPE user_defined );

-FILE *yyget_in (void );
+FILE *yyget_in ( void );

-void yyset_in (FILE * _in_str );
+void yyset_in ( FILE * _in_str );

-FILE *yyget_out (void );
+FILE *yyget_out ( void );

-void yyset_out (FILE * _out_str );
+void yyset_out ( FILE * _out_str );

- int yyget_leng (void );
+ int yyget_leng ( void );

-char *yyget_text (void );
+char *yyget_text ( void );

-int yyget_lineno (void );
+int yyget_lineno ( void );

-void yyset_lineno (int _line_number );
+void yyset_lineno ( int _line_number );

/* Macros after this point can all be overridden by user definitions in
* section 1.
@@ -623,32 +615,31 @@

#ifndef YY_SKIP_YYWRAP
#ifdef __cplusplus
-extern "C" int yywrap (void );
+extern "C" int yywrap ( void );
#else
-extern int yywrap (void );
+extern int yywrap ( void );
#endif
#endif

#ifndef YY_NO_UNPUT

- static void yyunput (int c,char *buf_ptr );
+ static void yyunput ( int c, char *buf_ptr );

#endif

#ifndef yytext_ptr
-static void yy_flex_strncpy (char *,yyconst char *,int );
+static void yy_flex_strncpy ( char *, const char *, int );
#endif

#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * );
+static int yy_flex_strlen ( const char * );
#endif

#ifndef YY_NO_INPUT
-
#ifdef __cplusplus
-static int yyinput (void );
+static int yyinput ( void );
#else
-static int input (void );
+static int input ( void );
#endif

#endif
@@ -781,10 +772,10 @@
if ( ! YY_CURRENT_BUFFER ) {
yyensure_buffer_stack ();
YY_CURRENT_BUFFER_LVALUE =
- yy_create_buffer(yyin,YY_BUF_SIZE );
+ yy_create_buffer( yyin, YY_BUF_SIZE );
}

- yy_load_buffer_state( );
+ yy_load_buffer_state( );
}

{
@@ -814,13 +805,13 @@
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 >= 160 )
- yy_c = yy_meta[(unsigned int) yy_c];
+ if ( yy_current_state >= 162 )
+ yy_c = yy_meta[yy_c];
}
- yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
++yy_cp;
}
- while ( yy_base[yy_current_state] != 228 );
+ while ( yy_base[yy_current_state] != 232 );

yy_find_action:
yy_act = yy_accept[yy_current_state];
@@ -872,103 +863,103 @@
YY_BREAK
case 7:
YY_RULE_SETUP
-{yylval.number=1; return(BOOL);}
+{return(MNEMONIC);}
YY_BREAK
case 8:
YY_RULE_SETUP
-{yylval.number=0; return(BOOL);}
+{yylval.number=1; return(BOOL);}
YY_BREAK
case 9:
YY_RULE_SETUP
-{yylval.number=3; return(HIDDEN);}
+{yylval.number=0; return(BOOL);}
YY_BREAK
case 10:
YY_RULE_SETUP
-{yylval.number=PCI; return(BUS);}
+{yylval.number=3; return(HIDDEN);}
YY_BREAK
case 11:
YY_RULE_SETUP
-{yylval.number=IOAPIC; return(BUS);}
+{yylval.number=PCI; return(BUS);}
YY_BREAK
case 12:
YY_RULE_SETUP
-{yylval.number=PNP; return(BUS);}
+{yylval.number=IOAPIC; return(BUS);}
YY_BREAK
case 13:
YY_RULE_SETUP
-{yylval.number=I2C; return(BUS);}
+{yylval.number=PNP; return(BUS);}
YY_BREAK
case 14:
YY_RULE_SETUP
-{yylval.number=APIC; return(BUS);}
+{yylval.number=I2C; return(BUS);}
YY_BREAK
case 15:
YY_RULE_SETUP
-{yylval.number=CPU_CLUSTER; return(BUS);}
+{yylval.number=APIC; return(BUS);}
YY_BREAK
case 16:
YY_RULE_SETUP
-{yylval.number=CPU; return(BUS);}
+{yylval.number=CPU_CLUSTER; return(BUS);}
YY_BREAK
case 17:
YY_RULE_SETUP
-{yylval.number=DOMAIN; return(BUS);}
+{yylval.number=CPU; return(BUS);}
YY_BREAK
case 18:
YY_RULE_SETUP
-{yylval.number=GENERIC; return(BUS);}
+{yylval.number=DOMAIN; return(BUS);}
YY_BREAK
case 19:
YY_RULE_SETUP
-{yylval.number=MMIO; return(BUS);}
+{yylval.number=GENERIC; return(BUS);}
YY_BREAK
case 20:
YY_RULE_SETUP
-{yylval.number=SPI; return(BUS);}
+{yylval.number=MMIO; return(BUS);}
YY_BREAK
case 21:
YY_RULE_SETUP
-{yylval.number=USB; return(BUS);}
+{yylval.number=SPI; return(BUS);}
YY_BREAK
case 22:
YY_RULE_SETUP
-{yylval.number=IRQ; return(RESOURCE);}
+{yylval.number=USB; return(BUS);}
YY_BREAK
case 23:
YY_RULE_SETUP
-{yylval.number=DRQ; return(RESOURCE);}
+{yylval.number=IRQ; return(RESOURCE);}
YY_BREAK
case 24:
YY_RULE_SETUP
-{yylval.number=IO; return(RESOURCE);}
+{yylval.number=DRQ; return(RESOURCE);}
YY_BREAK
case 25:
YY_RULE_SETUP
-{return(IOAPIC_IRQ);}
+{yylval.number=IO; return(RESOURCE);}
YY_BREAK
case 26:
YY_RULE_SETUP
-{return(INHERIT);}
+{return(IOAPIC_IRQ);}
YY_BREAK
case 27:
YY_RULE_SETUP
-{return(SUBSYSTEMID);}
+{return(INHERIT);}
YY_BREAK
case 28:
YY_RULE_SETUP
-{return(END);}
+{return(SUBSYSTEMID);}
YY_BREAK
case 29:
YY_RULE_SETUP
-{return(SLOT_DESC);}
+{return(END);}
YY_BREAK
case 30:
YY_RULE_SETUP
-{return(EQUALS);}
+{return(SLOT_DESC);}
YY_BREAK
case 31:
YY_RULE_SETUP
-{yylval.string = malloc(yyleng+1); strncpy(yylval.string, yytext, yyleng); yylval.string[yyleng]='\0'; return(NUMBER);}
+{return(EQUALS);}
YY_BREAK
case 32:
YY_RULE_SETUP
@@ -980,12 +971,11 @@
YY_BREAK
case 34:
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 35:
-/* rule 35 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 36:
/* rule 36 can match eol */
@@ -993,10 +983,15 @@
{yylval.string = malloc(yyleng-1); strncpy(yylval.string, yytext+1, yyleng-2); yylval.string[yyleng-2]='\0'; return(STRING);}
YY_BREAK
case 37:
+/* rule 37 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 38:
YY_RULE_SETUP
{yylval.string = malloc(yyleng+1); strncpy(yylval.string, yytext, yyleng); yylval.string[yyleng]='\0'; return(STRING);}
YY_BREAK
-case 38:
+case 39:
YY_RULE_SETUP
ECHO;
YY_BREAK
@@ -1077,7 +1072,7 @@
{
(yy_did_buffer_switch_on_eof) = 0;

- if ( yywrap( ) )
+ if ( yywrap( ) )
{
/* Note: because we've taken care in
* yy_get_next_buffer() to have set up
@@ -1144,7 +1139,7 @@
{
char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
char *source = (yytext_ptr);
- yy_size_t number_to_move, i;
+ int number_to_move, i;
int ret_val;

if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
@@ -1173,7 +1168,7 @@
/* Try to read more data. */

/* First move last chars to start of buffer. */
- number_to_move = (yy_size_t) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1);

for ( i = 0; i < number_to_move; ++i )
*(dest++) = *(source++);
@@ -1209,7 +1204,8 @@

b->yy_ch_buf = (char *)
/* Include room in for 2 EOB chars. */
- yyrealloc((void *) b->yy_ch_buf,(yy_size_t) (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. */
@@ -1241,7 +1237,7 @@
if ( number_to_move == YY_MORE_ADJ )
{
ret_val = EOB_ACT_END_OF_FILE;
- yyrestart(yyin );
+ yyrestart( yyin );
}

else
@@ -1255,12 +1251,15 @@
else
ret_val = EOB_ACT_CONTINUE_SCAN;

- if ((int) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+ if (((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,(yy_size_t) 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()" );
+ /* "- 2" to take care of EOB's */
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2);
}

(yy_n_chars) += number_to_move;
@@ -1292,10 +1291,10 @@
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 >= 160 )
- yy_c = yy_meta[(unsigned int) yy_c];
+ if ( yy_current_state >= 162 )
+ yy_c = yy_meta[yy_c];
}
- yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
}

return yy_current_state;
@@ -1320,11 +1319,11 @@
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 >= 160 )
- yy_c = yy_meta[(unsigned int) yy_c];
+ if ( yy_current_state >= 162 )
+ yy_c = yy_meta[yy_c];
}
- yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
- yy_is_jam = (yy_current_state == 159);
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
+ yy_is_jam = (yy_current_state == 161);

return yy_is_jam ? 0 : yy_current_state;
}
@@ -1394,7 +1393,7 @@

else
{ /* need more input */
- int offset = (yy_c_buf_p) - (yytext_ptr);
+ int offset = (int) ((yy_c_buf_p) - (yytext_ptr));
++(yy_c_buf_p);

switch ( yy_get_next_buffer( ) )
@@ -1411,13 +1410,13 @@
*/

/* Reset buffer status. */
- yyrestart(yyin );
+ yyrestart( yyin );

/*FALLTHROUGH*/

case EOB_ACT_END_OF_FILE:
{
- if ( yywrap( ) )
+ if ( yywrap( ) )
return 0;

if ( ! (yy_did_buffer_switch_on_eof) )
@@ -1455,11 +1454,11 @@
if ( ! YY_CURRENT_BUFFER ){
yyensure_buffer_stack ();
YY_CURRENT_BUFFER_LVALUE =
- yy_create_buffer(yyin,YY_BUF_SIZE );
+ yy_create_buffer( yyin, YY_BUF_SIZE );
}

- yy_init_buffer(YY_CURRENT_BUFFER,input_file );
- yy_load_buffer_state( );
+ yy_init_buffer( YY_CURRENT_BUFFER, input_file );
+ yy_load_buffer_state( );
}

/** Switch to a different input buffer.
@@ -1487,7 +1486,7 @@
}

YY_CURRENT_BUFFER_LVALUE = new_buffer;
- yy_load_buffer_state( );
+ yy_load_buffer_state( );

/* We don't actually know whether we did this switch during
* EOF (yywrap()) processing, but the only time this flag
@@ -1515,7 +1514,7 @@
{
YY_BUFFER_STATE b;

- b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) );
+ b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) );
if ( ! b )
YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );

@@ -1524,13 +1523,13 @@
/* 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((yy_size_t) (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()" );

b->yy_is_our_buffer = 1;

- yy_init_buffer(b,file );
+ yy_init_buffer( b, file );

return b;
}
@@ -1549,9 +1548,9 @@
YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;

if ( b->yy_is_our_buffer )
- yyfree((void *) b->yy_ch_buf );
+ yyfree( (void *) b->yy_ch_buf );

- yyfree((void *) b );
+ yyfree( (void *) b );
}

/* Initializes or reinitializes a buffer.
@@ -1563,7 +1562,7 @@
{
int oerrno = errno;

- yy_flush_buffer(b );
+ yy_flush_buffer( b );

b->yy_input_file = file;
b->yy_fill_buffer = 1;
@@ -1606,7 +1605,7 @@
b->yy_buffer_status = YY_BUFFER_NEW;

if ( b == YY_CURRENT_BUFFER )
- yy_load_buffer_state( );
+ yy_load_buffer_state( );
}

/** Pushes the new state onto the stack. The new state becomes
@@ -1637,7 +1636,7 @@
YY_CURRENT_BUFFER_LVALUE = new_buffer;

/* copied from yy_switch_to_buffer. */
- yy_load_buffer_state( );
+ yy_load_buffer_state( );
(yy_did_buffer_switch_on_eof) = 1;
}

@@ -1656,7 +1655,7 @@
--(yy_buffer_stack_top);

if (YY_CURRENT_BUFFER) {
- yy_load_buffer_state( );
+ yy_load_buffer_state( );
(yy_did_buffer_switch_on_eof) = 1;
}
}
@@ -1666,7 +1665,7 @@
*/
static void yyensure_buffer_stack (void)
{
- int num_to_alloc;
+ yy_size_t num_to_alloc;

if (!(yy_buffer_stack)) {

@@ -1723,7 +1722,7 @@
/* They forgot to leave room for the EOB's. */
return NULL;

- b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) );
+ b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) );
if ( ! b )
YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );

@@ -1737,7 +1736,7 @@
b->yy_fill_buffer = 0;
b->yy_buffer_status = YY_BUFFER_NEW;

- yy_switch_to_buffer(b );
+ yy_switch_to_buffer( b );

return b;
}
@@ -1750,10 +1749,10 @@
* @note If you want to scan bytes that may contain NUL values, then use
* yy_scan_bytes() instead.
*/
-YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
+YY_BUFFER_STATE yy_scan_string (const char * yystr )
{

- return yy_scan_bytes(yystr,(int) strlen(yystr) );
+ return yy_scan_bytes( yystr, (int) strlen(yystr) );
}

/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
@@ -1763,7 +1762,7 @@
*
* @return the newly allocated buffer state object.
*/
-YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, int _yybytes_len )
+YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len )
{
YY_BUFFER_STATE b;
char *buf;
@@ -1772,7 +1771,7 @@

/* Get memory for full buffer, including space for trailing EOB's. */
n = (yy_size_t) (_yybytes_len + 2);
- buf = (char *) yyalloc(n );
+ buf = (char *) yyalloc( n );
if ( ! buf )
YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );

@@ -1781,7 +1780,7 @@

buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;

- b = yy_scan_buffer(buf,n );
+ b = yy_scan_buffer( buf, n );
if ( ! b )
YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );

@@ -1797,9 +1796,9 @@
#define YY_EXIT_FAILURE 2
#endif

-static void yynoreturn yy_fatal_error (yyconst char* msg )
+static void yynoreturn yy_fatal_error (const char* msg )
{
- (void) fprintf( stderr, "%s\n", msg );
+ fprintf( stderr, "%s\n", msg );
exit( YY_EXIT_FAILURE );
}

@@ -1810,7 +1809,7 @@
do \
{ \
/* Undo effects of setting up yytext. */ \
- yy_size_t yyless_macro_arg = (n); \
+ int yyless_macro_arg = (n); \
YY_LESS_LINENO(yyless_macro_arg);\
yytext[yyleng] = (yy_hold_char); \
(yy_c_buf_p) = yytext + yyless_macro_arg; \
@@ -1934,7 +1933,7 @@

/* Pop the buffer stack, destroying each element. */
while(YY_CURRENT_BUFFER){
- yy_delete_buffer(YY_CURRENT_BUFFER );
+ yy_delete_buffer( YY_CURRENT_BUFFER );
YY_CURRENT_BUFFER_LVALUE = NULL;
yypop_buffer_state();
}
@@ -1955,7 +1954,7 @@
*/

#ifndef yytext_ptr
-static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
+static void yy_flex_strncpy (char* s1, const char * s2, int n )
{

int i;
@@ -1965,7 +1964,7 @@
#endif

#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * s )
+static int yy_flex_strlen (const char * s )
{
int n;
for ( n = 0; s[n]; ++n )
diff --git a/util/sconfig/main.c b/util/sconfig/main.c
index 6b421ec..4d15c8f 100644
--- a/util/sconfig/main.c
+++ b/util/sconfig/main.c
@@ -483,9 +483,9 @@
struct device *new_device(struct bus *parent,
struct chip_instance *chip_instance,
const int bustype, const char *devnum,
- int status)
+ const char *const mnemonic, int status)
{
- char *tmp;
+ char *tmp, *name;
int path_a;
int path_b = 0;
struct device *new_d;
@@ -510,8 +510,14 @@
new_d->path_a = path_a;
new_d->path_b = path_b;

- char *name = S_ALLOC(10);
- sprintf(name, "_dev%d", new_d->id);
+ if (mnemonic) {
+ name = S_ALLOC(strlen("__static_") + strlen(mnemonic) + 1);
+ sprintf(name, "__static_%s", mnemonic);
+ new_d->has_mnemonic = 1;
+ } else {
+ name = S_ALLOC(10);
+ sprintf(name, "_dev%d", new_d->id);
+ }
new_d->name = name;

new_d->enabled = status & 0x01;
@@ -696,7 +702,7 @@
return 0;
}

-static void pass0(FILE *fil, struct device *ptr, struct device *next)
+static void pass0(FILE *fil, FILE *head, struct device *ptr, struct device *next)
{
if (ptr == &base_root_dev) {
fprintf(fil, "STORAGE struct bus %s_links[];\n",
@@ -704,7 +710,8 @@
return;
}

- fprintf(fil, "STORAGE struct device %s;\n", ptr->name);
+ if (!ptr->has_mnemonic)
+ fprintf(fil, "STORAGE struct device %s;\n", ptr->name);
if (ptr->res)
fprintf(fil, "STORAGE struct resource %s_res[];\n",
ptr->name);
@@ -781,13 +788,13 @@
fprintf(fil, "\t};\n");
}

-static void pass1(FILE *fil, struct device *ptr, struct device *next)
+static void pass1(FILE *fil, FILE *head, struct device *ptr, struct device *next)
{
int pin;
struct chip_instance *chip_ins = ptr->chip_instance;
int has_children = dev_has_children(ptr);

- if (ptr == &base_root_dev)
+ if (ptr == &base_root_dev || ptr->has_mnemonic)
fprintf(fil, "DEVTREE_CONST struct device %s = {\n", ptr->name);
else
fprintf(fil, "STORAGE struct device %s = {\n", ptr->name);
@@ -883,16 +890,25 @@
emit_dev_links(fil, ptr);
}

-static void expose_device_names(FILE *fil, struct device *ptr, struct device *next)
+static void expose_device_names(FILE *fil, FILE *head, struct device *ptr, struct device *next)
{
/* Only devices on root bus here. */
- if (ptr->bustype == PCI && ptr->parent->dev->bustype == DOMAIN)
+ if (ptr->bustype == PCI && ptr->parent->dev->bustype == DOMAIN) {
+ fprintf(head, "extern DEVTREE_CONST struct device *DEVTREE_CONST __pci_0_%02x_%d;\n",
+ ptr->path_a, ptr->path_b);
fprintf(fil, "DEVTREE_CONST struct device *DEVTREE_CONST __pci_0_%02x_%d = &%s;\n",
ptr->path_a, ptr->path_b, ptr->name);
+ }

- if (ptr->bustype == PNP)
+ if (ptr->bustype == PNP) {
+ fprintf(head, "extern DEVTREE_CONST struct device *DEVTREE_CONST __pnp_%04x_%02x;\n",
+ ptr->path_a, ptr->path_b);
fprintf(fil, "DEVTREE_CONST struct device *DEVTREE_CONST __pnp_%04x_%02x = &%s;\n",
ptr->path_a, ptr->path_b, ptr->name);
+ }
+
+ if (ptr->has_mnemonic)
+ fprintf(head, "extern DEVTREE_CONST struct device %s;\n", ptr->name);
}

static void add_siblings_to_queue(struct queue_entry **bfs_q_head,
@@ -916,8 +932,8 @@
}
}

-static void walk_device_tree(FILE *fil, struct device *ptr,
- void (*func)(FILE *, struct device *,
+static void walk_device_tree(FILE *fil, FILE *head, struct device *ptr,
+ void (*func)(FILE *, FILE *, struct device *,
struct device *))
{
struct queue_entry *bfs_q_head = NULL;
@@ -926,7 +942,7 @@

while ((ptr = dequeue_head(&bfs_q_head))) {
add_children_to_queue(&bfs_q_head, ptr);
- func(fil, ptr, peek_queue_head(bfs_q_head));
+ func(fil, head, ptr, peek_queue_head(bfs_q_head));
}
}

@@ -995,7 +1011,7 @@
}
}

-static void inherit_subsystem_ids(FILE *file, struct device *dev,
+static void inherit_subsystem_ids(FILE *file, FILE *head, struct device *dev,
struct device *next)
{
struct device *p;
@@ -1360,11 +1376,13 @@

int main(int argc, char **argv)
{
+ unsigned int i;
+
if ((argc < MANDATORY_ARG_COUNT) || (argc > TOTAL_ARG_COUNT))
usage();

const char *base_devtree = argv[DEVICEFILE_ARG];
- const char *outputc = argv[OUTPUTFILE_ARG];
+ char *outputf = argv[OUTPUTFILE_ARG];
const char *override_devtree;

parse_devicetree(base_devtree, &base_root_bus);
@@ -1381,26 +1399,49 @@
override_devicetree(&base_root_bus, &override_root_bus);
}

- FILE *autogen = fopen(outputc, "w");
+ FILE *autogen = fopen(outputf, "w");
if (!autogen) {
fprintf(stderr, "Could not open file '%s' for writing: ",
- outputc);
+ outputf);
perror(NULL);
exit(1);
}

+ outputf[strlen(outputf) - 1] = 'h';
+ FILE *autohead = fopen(outputf, "w");
+ if (!autohead) {
+ fprintf(stderr, "Could not open file '%s' for writing: ", outputf);
+ perror(NULL);
+ fclose(autogen);
+ exit(1);
+ }
+ fprintf(autohead, "#ifndef __STATIC_DEVICE_TREE_H\n");
+ fprintf(autohead, "#define __STATIC_DEVICE_TREE_H\n\n");
+ fprintf(autohead, "#include <device/device.h>\n\n");
+
+ char *header_name = outputf;
+ for (i = strlen(outputf) - 1; i > 0; --i) {
+ if (outputf[i] == '/') {
+ header_name = outputf + i + 1;
+ break;
+ }
+ }
+ fprintf(autogen, "#include \"%s\"\n", header_name);
+
emit_chips(autogen);

- walk_device_tree(autogen, &base_root_dev, inherit_subsystem_ids);
+ walk_device_tree(autogen, autohead, &base_root_dev, inherit_subsystem_ids);
fprintf(autogen, "\n/* pass 0 */\n");
- walk_device_tree(autogen, &base_root_dev, pass0);
+ walk_device_tree(autogen, autohead, &base_root_dev, pass0);
fprintf(autogen, "\n/* pass 1 */\n");
- walk_device_tree(autogen, &base_root_dev, pass1);
+ walk_device_tree(autogen, autohead, &base_root_dev, pass1);

/* Expose static devicenames to global namespace. */
fprintf(autogen, "\n/* expose_device_names */\n");
- walk_device_tree(autogen, &base_root_dev, expose_device_names);
+ walk_device_tree(autogen, autohead, &base_root_dev, expose_device_names);

+ fprintf(autohead, "\n#endif /* __STATIC_DEVICE_TREE_H */\n");
+ fclose(autohead);
fclose(autogen);

return 0;
diff --git a/util/sconfig/sconfig.h b/util/sconfig/sconfig.h
index eea2a14..ca834e8 100644
--- a/util/sconfig/sconfig.h
+++ b/util/sconfig/sconfig.h
@@ -112,6 +112,7 @@

/* Name of this device. */
char *name;
+ int has_mnemonic;

/* Path of this device. */
char *path;
@@ -159,7 +160,7 @@
struct device *new_device(struct bus *parent,
struct chip_instance *chip_instance,
const int bustype, const char *devnum,
- int status);
+ const char *mnemonic, int status);

void add_resource(struct bus *bus, int type, int index, int base);

diff --git a/util/sconfig/sconfig.l b/util/sconfig/sconfig.l
index 87de6e2..4752cca 100755
--- a/util/sconfig/sconfig.l
+++ b/util/sconfig/sconfig.l
@@ -27,6 +27,7 @@
chip {return(CHIP);}
device {return(DEVICE);}
register {return(REGISTER);}
+as {return(MNEMONIC);}
on {yylval.number=1; return(BOOL);}
off {yylval.number=0; return(BOOL);}
hidden {yylval.number=3; return(HIDDEN);}
diff --git a/util/sconfig/sconfig.tab.c_shipped b/util/sconfig/sconfig.tab.c_shipped
index 8e1e57d..9fd57e0 100644
--- a/util/sconfig/sconfig.tab.c_shipped
+++ b/util/sconfig/sconfig.tab.c_shipped
@@ -1,8 +1,9 @@
-/* A Bison parser, made by GNU Bison 3.0.5. */
+/* A Bison parser, made by GNU Bison 3.3.2. */

/* Bison implementation for Yacc-like parsers in C

- Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc.
+ Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 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
@@ -40,11 +41,14 @@
define necessary library symbols; they are noted "INFRINGES ON
USER NAME SPACE" below. */

+/* Undocumented macros, especially those whose name start with YY_,
+ are private implementation details. Do not rely on them. */
+
/* Identify Bison output. */
#define YYBISON 1

/* Bison version. */
-#define YYBISON_VERSION "3.0.5"
+#define YYBISON_VERSION "3.3.2"

/* Skeleton name. */
#define YYSKELETON_NAME "yacc.c"
@@ -61,7 +65,7 @@



-/* Copy the first part of user declarations. */
+/* First part of user prologue. */


/*
@@ -90,12 +94,15 @@



-
# ifndef YY_NULLPTR
-# if defined __cplusplus && 201103L <= __cplusplus
-# define YY_NULLPTR nullptr
+# if defined __cplusplus
+# if 201103L <= __cplusplus
+# define YY_NULLPTR nullptr
+# else
+# define YY_NULLPTR 0
+# endif
# else
-# define YY_NULLPTR 0
+# define YY_NULLPTR ((void*)0)
# endif
# endif

@@ -109,8 +116,8 @@

/* In a future release of Bison, this section will be replaced
by #include "sconfig.tab.h_shipped". */
-#ifndef YY_YY_UTIL_SCONFIG_SCONFIG_TAB_H_SHIPPED_INCLUDED
-# define YY_YY_UTIL_SCONFIG_SCONFIG_TAB_H_SHIPPED_INCLUDED
+#ifndef YY_YY_HOME_ICON_COREBOOT_UTIL_SCONFIG_SCONFIG_TAB_H_SHIPPED_INCLUDED
+# define YY_YY_HOME_ICON_COREBOOT_UTIL_SCONFIG_SCONFIG_TAB_H_SHIPPED_INCLUDED
/* Debug traces. */
#ifndef YYDEBUG
# define YYDEBUG 0
@@ -127,35 +134,36 @@
CHIP = 258,
DEVICE = 259,
REGISTER = 260,
- BOOL = 261,
- HIDDEN = 262,
- BUS = 263,
- RESOURCE = 264,
- END = 265,
- EQUALS = 266,
- HEX = 267,
- STRING = 268,
- PCI = 269,
- PNP = 270,
- I2C = 271,
- APIC = 272,
- CPU_CLUSTER = 273,
- CPU = 274,
- DOMAIN = 275,
- IRQ = 276,
- DRQ = 277,
- 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
+ MNEMONIC = 261,
+ BOOL = 262,
+ HIDDEN = 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
};
#endif

@@ -184,9 +192,7 @@

int yyparse (void);

-#endif /* !YY_YY_UTIL_SCONFIG_SCONFIG_TAB_H_SHIPPED_INCLUDED */
-
-/* Copy the second part of user declarations. */
+#endif /* !YY_YY_HOME_ICON_COREBOOT_UTIL_SCONFIG_SCONFIG_TAB_H_SHIPPED_INCLUDED */



@@ -209,13 +215,13 @@
#ifdef YYTYPE_UINT16
typedef YYTYPE_UINT16 yytype_uint16;
#else
-typedef unsigned short int yytype_uint16;
+typedef unsigned short yytype_uint16;
#endif

#ifdef YYTYPE_INT16
typedef YYTYPE_INT16 yytype_int16;
#else
-typedef short int yytype_int16;
+typedef short yytype_int16;
#endif

#ifndef YYSIZE_T
@@ -227,7 +233,7 @@
# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
# define YYSIZE_T size_t
# else
-# define YYSIZE_T unsigned int
+# define YYSIZE_T unsigned
# endif
#endif

@@ -263,15 +269,6 @@
# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
#endif

-#if !defined _Noreturn \
- && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
-# if defined _MSC_VER && 1200 <= _MSC_VER
-# define _Noreturn __declspec (noreturn)
-# else
-# define _Noreturn YY_ATTRIBUTE ((__noreturn__))
-# endif
-#endif
-
/* Suppress unused-variable warnings by "using" E. */
#if ! defined lint || defined __GNUC__
# define YYUSE(E) ((void) (E))
@@ -279,7 +276,7 @@
# define YYUSE(E) /* empty */
#endif

-#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
+#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
/* Suppress an incorrect diagnostic about yylval being uninitialized. */
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
_Pragma ("GCC diagnostic push") \
@@ -430,27 +427,27 @@
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 3
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 43
+#define YYLAST 47

/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 35
+#define YYNTOKENS 36
/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 15
+#define YYNNTS 16
/* YYNRULES -- Number of rules. */
-#define YYNRULES 28
+#define YYNRULES 30
/* YYNSTATES -- Number of states. */
-#define YYNSTATES 49
+#define YYNSTATES 52

-/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
- by yylex, with out-of-bounds checking. */
#define YYUNDEFTOK 2
-#define YYMAXUTOK 289
+#define YYMAXUTOK 290

+/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
+ as returned by yylex, with out-of-bounds checking. */
#define YYTRANSLATE(YYX) \
- ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+ ((unsigned) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)

/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
- as returned by yylex, without out-of-bounds checking. */
+ as returned by yylex. */
static const yytype_uint8 yytranslate[] =
{
0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -481,7 +478,8 @@
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, 34
+ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+ 35
};

#if YYDEBUG
@@ -490,7 +488,8 @@
{
0, 36, 36, 36, 38, 38, 38, 38, 40, 40,
40, 40, 40, 40, 40, 42, 42, 51, 51, 59,
- 59, 61, 64, 67, 70, 73, 76, 79, 82
+ 61, 65, 65, 67, 70, 73, 76, 79, 82, 85,
+ 88
};
#endif

@@ -499,14 +498,14 @@
First, the terminals, then, starting at YYNTOKENS, nonterminals. */
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",
- "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
+ "$end", "error", "$undefined", "CHIP", "DEVICE", "REGISTER", "MNEMONIC",
+ "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",
+ "$accept", "devtree", "$@1", "chipchildren", "devicechildren", "chip",
+ "@2", "device", "@3", "mnemonic", "status", "resource", "registers",
+ "subsystemid", "ioapic_irq", "smbios_slot_desc", YY_NULLPTR
};
#endif

@@ -518,7 +517,7 @@
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, 289
+ 285, 286, 287, 288, 289, 290
};
# endif

@@ -536,11 +535,12 @@
STATE-NUM. */
static const yytype_int8 yypact[] =
{
- -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
+ -12, 11, -1, -12, 0, -12, -12, -12, 1, 4,
+ 3, -12, -12, -12, -12, -11, 6, 10, 5, 9,
+ 2, -12, -12, -12, -12, -12, -12, -3, -6, -12,
+ 13, 7, 8, -12, -12, -12, -12, -12, -12, 16,
+ 15, 12, 14, 17, 18, 19, 20, -12, 21, -12,
+ -12, -12
};

/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -549,24 +549,25 @@
static const yytype_uint8 yydefact[] =
{
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
+ 0, 16, 5, 4, 6, 0, 0, 19, 0, 0,
+ 0, 24, 20, 21, 22, 17, 14, 0, 0, 18,
+ 0, 0, 0, 9, 8, 10, 11, 12, 13, 0,
+ 0, 0, 0, 0, 30, 25, 0, 23, 29, 26,
+ 27, 28
};

/* YYPGOTO[NTERM-NUM]. */
static const yytype_int8 yypgoto[] =
{
- -12, -12, -12, -12, -12, -6, -12, 19, -12, -12,
- -12, -12, -12, -12, -12
+ -12, -12, -12, -12, -12, -5, -12, -2, -12, -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,
- 32, 14, 33, 34, 35
+ -1, 1, 2, 8, 27, 5, 7, 13, 26, 20,
+ 25, 35, 14, 36, 37, 38
};

/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
@@ -574,47 +575,50 @@
number is the opposite. If YYTABLE_NINF, syntax error. */
static const yytype_uint8 yytable[] =
{
- 4, 9, 12, 4, 9, 10, 25, 26, 19, 20,
- 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
+ 4, 9, 4, 12, 4, 9, 10, 28, 29, 23,
+ 24, 3, 11, 15, 6, 17, 19, 16, 18, 21,
+ 39, 30, 33, 22, 31, 34, 32, 40, 43, 44,
+ 0, 0, 48, 41, 42, 51, 0, 0, 45, 0,
+ 0, 0, 0, 47, 0, 46, 50, 49
};

static const yytype_int8 yycheck[] =
{
- 3, 4, 8, 3, 4, 5, 9, 10, 6, 7,
- 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
+ 3, 4, 3, 8, 3, 4, 5, 10, 11, 7,
+ 8, 0, 11, 9, 14, 26, 6, 14, 12, 14,
+ 26, 24, 27, 14, 27, 27, 29, 14, 12, 14,
+ -1, -1, 14, 26, 26, 14, -1, -1, 26, -1,
+ -1, -1, -1, 26, -1, 31, 26, 28
};

/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
static const yytype_uint8 yystos[] =
{
- 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
+ 0, 37, 38, 0, 3, 41, 14, 42, 39, 4,
+ 5, 11, 41, 43, 48, 9, 14, 26, 12, 6,
+ 45, 14, 14, 7, 8, 46, 44, 40, 10, 11,
+ 24, 27, 29, 41, 43, 47, 49, 50, 51, 26,
+ 14, 26, 26, 12, 14, 26, 31, 26, 14, 28,
+ 26, 14
};

/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
static const yytype_uint8 yyr1[] =
{
- 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
+ 0, 36, 38, 37, 39, 39, 39, 39, 40, 40,
+ 40, 40, 40, 40, 40, 42, 41, 44, 43, 45,
+ 45, 46, 46, 47, 48, 49, 49, 50, 51, 51,
+ 51
};

/* 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, 2, 0, 0, 5, 0, 7, 1,
- 1, 4, 4, 3, 4, 4, 5, 4, 3
+ 2, 2, 2, 2, 0, 0, 5, 0, 8, 0,
+ 2, 1, 1, 4, 4, 3, 4, 4, 5, 4,
+ 3
};


@@ -630,22 +634,22 @@

#define YYRECOVERING() (!!yyerrstatus)

-#define YYBACKUP(Token, Value) \
-do \
- if (yychar == YYEMPTY) \
- { \
- yychar = (Token); \
- yylval = (Value); \
- YYPOPSTACK (yylen); \
- yystate = *yyssp; \
- goto yybackup; \
- } \
- else \
- { \
- yyerror (YY_("syntax error: cannot back up")); \
- YYERROR; \
- } \
-while (0)
+#define YYBACKUP(Token, Value) \
+ do \
+ if (yychar == YYEMPTY) \
+ { \
+ yychar = (Token); \
+ yylval = (Value); \
+ YYPOPSTACK (yylen); \
+ yystate = *yyssp; \
+ goto yybackup; \
+ } \
+ else \
+ { \
+ yyerror (YY_("syntax error: cannot back up")); \
+ YYERROR; \
+ } \
+ while (0)

/* Error token number */
#define YYTERROR 1
@@ -685,37 +689,37 @@
} while (0)


-/*----------------------------------------.
-| Print this symbol's value on YYOUTPUT. |
-`----------------------------------------*/
+/*-----------------------------------.
+| Print this symbol's value on YYO. |
+`-----------------------------------*/

static void
-yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep)
{
- FILE *yyo = yyoutput;
- YYUSE (yyo);
+ FILE *yyoutput = yyo;
+ YYUSE (yyoutput);
if (!yyvaluep)
return;
# ifdef YYPRINT
if (yytype < YYNTOKENS)
- YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+ YYPRINT (yyo, yytoknum[yytype], *yyvaluep);
# endif
YYUSE (yytype);
}


-/*--------------------------------.
-| Print this symbol on YYOUTPUT. |
-`--------------------------------*/
+/*---------------------------.
+| Print this symbol on YYO. |
+`---------------------------*/

static void
-yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep)
{
- YYFPRINTF (yyoutput, "%s %s (",
+ YYFPRINTF (yyo, "%s %s (",
yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);

- yy_symbol_value_print (yyoutput, yytype, yyvaluep);
- YYFPRINTF (yyoutput, ")");
+ yy_symbol_value_print (yyo, yytype, yyvaluep);
+ YYFPRINTF (yyo, ")");
}

/*------------------------------------------------------------------.
@@ -749,7 +753,7 @@
static void
yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
{
- unsigned long int yylno = yyrline[yyrule];
+ unsigned long yylno = yyrline[yyrule];
int yynrhs = yyr2[yyrule];
int yyi;
YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
@@ -760,7 +764,7 @@
YYFPRINTF (stderr, " $%d = ", yyi + 1);
yy_symbol_print (stderr,
yystos[yyssp[yyi + 1 - yynrhs]],
- &(yyvsp[(yyi + 1) - (yynrhs)])
+ &yyvsp[(yyi + 1) - (yynrhs)]
);
YYFPRINTF (stderr, "\n");
}
@@ -864,7 +868,10 @@
case '\\':
if (*++yyp != '\\')
goto do_not_strip_quotes;
- /* Fall through. */
+ else
+ goto append;
+
+ append:
default:
if (yyres)
yyres[yyn] = *yyp;
@@ -882,7 +889,7 @@
if (! yyres)
return yystrlen (yystr);

- return yystpcpy (yyres, yystr) - yyres;
+ return (YYSIZE_T) (yystpcpy (yyres, yystr) - yyres);
}
# endif

@@ -960,10 +967,10 @@
yyarg[yycount++] = yytname[yyx];
{
YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
- if (! (yysize <= yysize1
- && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+ if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
+ yysize = yysize1;
+ else
return 2;
- yysize = yysize1;
}
}
}
@@ -987,9 +994,10 @@

{
YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
- if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+ if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
+ yysize = yysize1;
+ else
return 2;
- yysize = yysize1;
}

if (*yymsg_alloc < yysize)
@@ -1115,23 +1123,31 @@
yychar = YYEMPTY; /* Cause a token to be read. */
goto yysetstate;

+
/*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate. |
+| yynewstate -- push a new state, which is found in yystate. |
`------------------------------------------------------------*/
- yynewstate:
+yynewstate:
/* In all cases, when you get here, the value and location stacks
have just been pushed. So pushing a state here evens the stacks. */
yyssp++;

- yysetstate:
- *yyssp = yystate;
+
+/*--------------------------------------------------------------------.
+| yynewstate -- set current state (the top of the stack) to yystate. |
+`--------------------------------------------------------------------*/
+yysetstate:
+ *yyssp = (yytype_int16) yystate;

if (yyss + yystacksize - 1 <= yyssp)
+#if !defined yyoverflow && !defined YYSTACK_RELOCATE
+ goto yyexhaustedlab;
+#else
{
/* Get the current used size of the three stacks, in elements. */
- YYSIZE_T yysize = yyssp - yyss + 1;
+ YYSIZE_T yysize = (YYSIZE_T) (yyssp - yyss + 1);

-#ifdef yyoverflow
+# if defined yyoverflow
{
/* Give user a chance to reallocate the stack. Use copies of
these so that the &'s don't force the real ones into
@@ -1147,14 +1163,10 @@
&yyss1, yysize * sizeof (*yyssp),
&yyvs1, yysize * sizeof (*yyvsp),
&yystacksize);
-
yyss = yyss1;
yyvs = yyvs1;
}
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
- goto yyexhaustedlab;
-# else
+# else /* defined YYSTACK_RELOCATE */
/* Extend the stack our own way. */
if (YYMAXDEPTH <= yystacksize)
goto yyexhaustedlab;
@@ -1170,22 +1182,22 @@
goto yyexhaustedlab;
YYSTACK_RELOCATE (yyss_alloc, yyss);
YYSTACK_RELOCATE (yyvs_alloc, yyvs);
-# undef YYSTACK_RELOCATE
+# undef YYSTACK_RELOCATE
if (yyss1 != yyssa)
YYSTACK_FREE (yyss1);
}
# endif
-#endif /* no yyoverflow */

yyssp = yyss + yysize - 1;
yyvsp = yyvs + yysize - 1;

YYDPRINTF ((stderr, "Stack size increased to %lu\n",
- (unsigned long int) yystacksize));
+ (unsigned long) yystacksize));

if (yyss + yystacksize - 1 <= yyssp)
YYABORT;
}
+#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */

YYDPRINTF ((stderr, "Entering state %d\n", yystate));

@@ -1194,11 +1206,11 @@

goto yybackup;

+
/*-----------.
| yybackup. |
`-----------*/
yybackup:
-
/* Do appropriate processing given the current state. Read a
lookahead token if we need one and don't already have one. */

@@ -1271,7 +1283,7 @@


/*-----------------------------.
-| yyreduce -- Do a reduction. |
+| yyreduce -- do a reduction. |
`-----------------------------*/
yyreduce:
/* yyn is the number of a rule to reduce with. */
@@ -1318,7 +1330,7 @@
case 17:

{
- (yyval.dev) = new_device(cur_parent, cur_chip_instance, (yyvsp[-2].number), (yyvsp[-1].string), (yyvsp[0].number));
+ (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;
}

@@ -1332,50 +1344,66 @@

break;

- case 21:
+ case 19:

- { add_resource(cur_parent, (yyvsp[-3].number), strtol((yyvsp[-2].string), NULL, 0), strtol((yyvsp[0].string), NULL, 0)); }
+ {
+ (yyval.string) = NULL;
+}

break;

- case 22:
+ case 20:

- { add_register(cur_chip_instance, (yyvsp[-2].string), (yyvsp[0].string)); }
+ {
+ (yyval.string) = (yyvsp[0].string);
+}

break;

case 23:

- { add_pci_subsystem_ids(cur_parent, strtol((yyvsp[-1].string), NULL, 16), strtol((yyvsp[0].string), NULL, 16), 0); }
+ { add_resource(cur_parent, (yyvsp[-3].number), strtol((yyvsp[-2].string), NULL, 0), strtol((yyvsp[0].string), NULL, 0)); }

break;

case 24:

- { add_pci_subsystem_ids(cur_parent, strtol((yyvsp[-2].string), NULL, 16), strtol((yyvsp[-1].string), NULL, 16), 1); }
+ { add_register(cur_chip_instance, (yyvsp[-2].string), (yyvsp[0].string)); }

break;

case 25:

- { add_ioapic_info(cur_parent, strtol((yyvsp[-2].string), NULL, 16), (yyvsp[-1].string), strtol((yyvsp[0].string), NULL, 16)); }
+ { add_pci_subsystem_ids(cur_parent, strtol((yyvsp[-1].string), NULL, 16), strtol((yyvsp[0].string), NULL, 16), 0); }

break;

case 26:

- { add_slot_desc(cur_parent, (yyvsp[-3].string), (yyvsp[-2].string), (yyvsp[-1].string), (yyvsp[0].string)); }
+ { add_pci_subsystem_ids(cur_parent, strtol((yyvsp[-2].string), NULL, 16), strtol((yyvsp[-1].string), NULL, 16), 1); }

break;

case 27:

- { add_slot_desc(cur_parent, (yyvsp[-2].string), (yyvsp[-1].string), (yyvsp[0].string), NULL); }
+ { add_ioapic_info(cur_parent, strtol((yyvsp[-2].string), NULL, 16), (yyvsp[-1].string), strtol((yyvsp[0].string), NULL, 16)); }

break;

case 28:

+ { add_slot_desc(cur_parent, (yyvsp[-3].string), (yyvsp[-2].string), (yyvsp[-1].string), (yyvsp[0].string)); }
+
+ break;
+
+ case 29:
+
+ { add_slot_desc(cur_parent, (yyvsp[-2].string), (yyvsp[-1].string), (yyvsp[0].string), NULL); }
+
+ break;
+
+ case 30:
+
{ add_slot_desc(cur_parent, (yyvsp[-1].string), (yyvsp[0].string), NULL, NULL); }

break;
@@ -1406,14 +1434,13 @@
/* Now 'shift' the result of the reduction. Determine what state
that goes to, based on the state we popped back to and the rule
number reduced by. */
-
- yyn = yyr1[yyn];
-
- yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
- if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
- yystate = yytable[yystate];
- else
- yystate = yydefgoto[yyn - YYNTOKENS];
+ {
+ const int yylhs = yyr1[yyn] - YYNTOKENS;
+ const int yyi = yypgoto[yylhs] + *yyssp;
+ yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
+ ? yytable[yyi]
+ : yydefgoto[yylhs]);
+ }

goto yynewstate;

@@ -1496,12 +1523,10 @@
| yyerrorlab -- error raised explicitly by YYERROR. |
`---------------------------------------------------*/
yyerrorlab:
-
- /* Pacify compilers like GCC when the user code never invokes
- YYERROR and the label yyerrorlab therefore never appears in user
- code. */
- if (/*CONSTCOND*/ 0)
- goto yyerrorlab;
+ /* Pacify compilers when the user code never invokes YYERROR and the
+ label yyerrorlab therefore never appears in user code. */
+ if (0)
+ YYERROR;

/* Do not reclaim the symbols of the rule whose action triggered
this YYERROR. */
@@ -1563,6 +1588,7 @@
yyresult = 0;
goto yyreturn;

+
/*-----------------------------------.
| yyabortlab -- YYABORT comes here. |
`-----------------------------------*/
@@ -1570,6 +1596,7 @@
yyresult = 1;
goto yyreturn;

+
#if !defined yyoverflow || YYERROR_VERBOSE
/*-------------------------------------------------.
| yyexhaustedlab -- memory exhaustion comes here. |
@@ -1580,6 +1607,10 @@
/* Fall through. */
#endif

+
+/*-----------------------------------------------------.
+| yyreturn -- parsing is finished, return the result. |
+`-----------------------------------------------------*/
yyreturn:
if (yychar != YYEMPTY)
{
diff --git a/util/sconfig/sconfig.tab.h_shipped b/util/sconfig/sconfig.tab.h_shipped
index bcbd644..8af828e 100644
--- a/util/sconfig/sconfig.tab.h_shipped
+++ b/util/sconfig/sconfig.tab.h_shipped
@@ -1,8 +1,9 @@
-/* A Bison parser, made by GNU Bison 3.0.5. */
+/* A Bison parser, made by GNU Bison 3.3.2. */

/* Bison interface for Yacc-like parsers in C

- Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc.
+ Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 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
@@ -30,8 +31,11 @@
This special exception was added by the Free Software Foundation in
version 2.2 of Bison. */

-#ifndef YY_YY_UTIL_SCONFIG_SCONFIG_TAB_H_SHIPPED_INCLUDED
-# define YY_YY_UTIL_SCONFIG_SCONFIG_TAB_H_SHIPPED_INCLUDED
+/* Undocumented macros, especially those whose name start with YY_,
+ are private implementation details. Do not rely on them. */
+
+#ifndef YY_YY_HOME_ICON_COREBOOT_UTIL_SCONFIG_SCONFIG_TAB_H_SHIPPED_INCLUDED
+# define YY_YY_HOME_ICON_COREBOOT_UTIL_SCONFIG_SCONFIG_TAB_H_SHIPPED_INCLUDED
/* Debug traces. */
#ifndef YYDEBUG
# define YYDEBUG 0
@@ -48,35 +52,36 @@
CHIP = 258,
DEVICE = 259,
REGISTER = 260,
- BOOL = 261,
- HIDDEN = 262,
- BUS = 263,
- RESOURCE = 264,
- END = 265,
- EQUALS = 266,
- HEX = 267,
- STRING = 268,
- PCI = 269,
- PNP = 270,
- I2C = 271,
- APIC = 272,
- CPU_CLUSTER = 273,
- CPU = 274,
- DOMAIN = 275,
- IRQ = 276,
- DRQ = 277,
- 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
+ MNEMONIC = 261,
+ BOOL = 262,
+ HIDDEN = 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
};
#endif

@@ -105,4 +110,4 @@

int yyparse (void);

-#endif /* !YY_YY_UTIL_SCONFIG_SCONFIG_TAB_H_SHIPPED_INCLUDED */
+#endif /* !YY_YY_HOME_ICON_COREBOOT_UTIL_SCONFIG_SCONFIG_TAB_H_SHIPPED_INCLUDED */
diff --git a/util/sconfig/sconfig.y b/util/sconfig/sconfig.y
index 0d894a9..1f225c1 100755
--- a/util/sconfig/sconfig.y
+++ b/util/sconfig/sconfig.y
@@ -31,7 +31,7 @@
int number;
}

-%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
+%token CHIP DEVICE REGISTER MNEMONIC 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;

@@ -48,12 +48,18 @@
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 */ mnemonic 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;
+};
+
+mnemonic: /* empty */ {
+ $<string>$ = NULL;
+} | MNEMONIC STRING {
+ $<string>$ = $<string>2;
};

status: BOOL | HIDDEN;

To view, visit change 35456. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: I058a319f9b968924fbef9485a96c9e3f900a3ee8
Gerrit-Change-Number: 35456
Gerrit-PatchSet: 1
Gerrit-Owner: Nico Huber <nico.h@gmx.de>
Gerrit-MessageType: newchange