sconfig: Make cur_bus and cur_parent local to the parser.
authorPatrick Georgi <patrick.georgi@coresystems.de>
Wed, 5 May 2010 12:05:25 +0000 (12:05 +0000)
committerPatrick Georgi <patrick.georgi@coresystems.de>
Wed, 5 May 2010 12:05:25 +0000 (12:05 +0000)
Instead of accessing them globally, pass them as arguments where necessary.

Signed-off-by: Patrick Georgi <patrick.georgi@coresystems.de>
Acked-by: Stefan Reinauer <stepan@coresystems.de>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@5524 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1

util/sconfig/main.c
util/sconfig/sconfig.h
util/sconfig/sconfig.tab.c_shipped
util/sconfig/sconfig.y

index 00d0e5a5b23ab5f4c539af44f85bb390a1c6966e..9c7938617b4af4f5bcb0045d79e600ceb16495fb 100755 (executable)
@@ -51,12 +51,12 @@ static struct device root = {
        .enabled = 1
 };
 
-static struct device *new_dev() {
+static struct device *new_dev(struct device *parent, struct device *bus) {
        struct device *dev = malloc(sizeof(struct device));
        memset(dev, 0, sizeof(struct device));
        dev->id = ++devcount;
-       dev->parent = cur_parent;
-       dev->bus = cur_bus;
+       dev->parent = parent;
+       dev->bus = bus;
        head->next = dev;
        head = dev;
        return dev;
@@ -110,8 +110,8 @@ void postprocess_devtree(void) {
        }
 }
 
-struct device *new_chip(char *path) {
-       struct device *new_chip = new_dev();
+struct device *new_chip(struct device *parent, struct device *bus, char *path) {
+       struct device *new_chip = new_dev(parent, bus);
        new_chip->chiph_exists = 1;
        new_chip->name = path;
        new_chip->name_underscore = strdup(new_chip->name);
@@ -129,13 +129,13 @@ struct device *new_chip(char *path) {
        if ((stat(chip_h, &st) == -1) && (errno == ENOENT))
                new_chip->chiph_exists = 0;
 
-       if (cur_parent->latestchild) {
-               cur_parent->latestchild->next_sibling = new_chip;
-               cur_parent->latestchild->sibling = new_chip;
+       if (parent->latestchild) {
+               parent->latestchild->next_sibling = new_chip;
+               parent->latestchild->sibling = new_chip;
        }
-       cur_parent->latestchild = new_chip;
-       if (!cur_parent->children)
-               cur_parent->children = new_chip;
+       parent->latestchild = new_chip;
+       if (!parent->children)
+               parent->children = new_chip;
        return new_chip;
 }
 
@@ -162,8 +162,8 @@ void add_header(struct device *dev) {
        }
 }
 
-struct device *new_device(const int bus, const char *devnum, int enabled) {
-       struct device *new_d = new_dev();
+struct device *new_device(struct device *parent, struct device *busdev, const int bus, const char *devnum, int enabled) {
+       struct device *new_d = new_dev(parent, busdev);
        new_d->bustype = bus;
 
        char *tmp;
@@ -181,13 +181,13 @@ struct device *new_device(const int bus, const char *devnum, int enabled) {
        new_d->enabled = enabled;
        new_d->chip = new_d->parent->chip;
 
-       if (cur_parent->latestchild) {
-               cur_parent->latestchild->next_sibling = new_d;
-               cur_parent->latestchild->sibling = new_d;
+       if (parent->latestchild) {
+               parent->latestchild->next_sibling = new_d;
+               parent->latestchild->sibling = new_d;
        }
-       cur_parent->latestchild = new_d;
-       if (!cur_parent->children)
-               cur_parent->children = new_d;
+       parent->latestchild = new_d;
+       if (!parent->children)
+               parent->children = new_d;
 
        lastdev->nextdev = new_d;
        lastdev = new_d;
@@ -235,29 +235,29 @@ void alias_siblings(struct device *d) {
        }
 }
 
-void add_resource(int type, int index, int base) {
+void add_resource(struct device *dev, int type, int index, int base) {
        struct resource *r = malloc(sizeof(struct resource));
        memset (r, 0, sizeof(struct resource));
        r->type = type;
        r->index = index;
        r->base = base;
-       if (cur_parent->res) {
-               struct resource *head = cur_parent->res;
+       if (dev->res) {
+               struct resource *head = dev->res;
                while (head->next) head = head->next;
                head->next = r;
        } else {
-               cur_parent->res = r;
+               dev->res = r;
        }
-       cur_parent->rescnt++;
+       dev->rescnt++;
 }
 
-void add_register(char *name, char *val) {
+void add_register(struct device *dev, char *name, char *val) {
        struct reg *r = malloc(sizeof(struct reg));
        memset (r, 0, sizeof(struct reg));
        r->key = name;
        r->value = val;
-       if (cur_parent->reg) {
-               struct reg *head = cur_parent->reg;
+       if (dev->reg) {
+               struct reg *head = dev->reg;
                // sorting to be equal to sconfig's behaviour
                int sort = strcmp(r->key, head->key);
                if (sort == 0) {
@@ -266,14 +266,14 @@ void add_register(char *name, char *val) {
                }
                if (sort<0) {
                        r->next = head;
-                       cur_parent->reg = r;
+                       dev->reg = r;
                } else {
                        while ((head->next) && (strcmp(head->next->key, r->key)<0)) head = head->next;
                        r->next = head->next;
                        head->next = r;
                }
        } else {
-               cur_parent->reg = r;
+               dev->reg = r;
        }
 }
 
@@ -390,7 +390,7 @@ int main(int argc, char** argv) {
 
        FILE *staticc = fopen(outputc, "w");
 
-       cur_bus = cur_parent = lastdev = head = &root;
+       lastdev = head = &root;
        yyparse();
        fclose(filec);
 
index 78305464ba6094b0c695e9bdd7ba17d07b49d68a..139ac86ae9666619a610226cc36819f179fa7094 100755 (executable)
@@ -74,7 +74,7 @@ struct device {
        struct reg *reg;
 };
 
-extern struct device *cur_parent, *cur_bus;
+struct device *head;
 
 struct header;
 struct header {
@@ -85,9 +85,9 @@ struct header {
 void fold_in(struct device *parent);
 
 void postprocess_devtree(void);
-struct device *new_chip(char *path);
+struct device *new_chip(struct device *parent, struct device *bus, char *path);
 void add_header(struct device *dev);
-struct device *new_device(const int bus, const char *devnum, int enabled);
+struct device *new_device(struct device *parent, struct device *busdev, const int bus, const char *devnum, int enabled);
 void alias_siblings(struct device *d);
-void add_resource(int type, int index, int base);
-void add_register(char *name, char *val);
+void add_resource(struct device *dev, int type, int index, int base);
+void add_register(struct device *dev, char *name, char *val);
index 749054692186689482e632edbdc7414a7c54337b..6f155ae8ccefa22a411d06cb8071d58cbee7983c 100644 (file)
@@ -90,7 +90,7 @@
 
 #include "sconfig.h"
 
-struct device *cur_parent, *cur_bus;
+static struct device *cur_parent, *cur_bus;
 
 
 
@@ -378,18 +378,18 @@ union yyalloc
 #endif
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  9
+#define YYFINAL  3
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   23
+#define YYLAST   22
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  23
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  11
+#define YYNNTS  12
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  16
+#define YYNRULES  17
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  30
+#define YYNSTATES  31
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -436,25 +436,26 @@ static const yytype_uint8 yytranslate[] =
    YYRHS.  */
 static const yytype_uint8 yyprhs[] =
 {
-       0,     0,     3,     5,     7,     9,    12,    15,    16,    19,
-      22,    23,    24,    30,    31,    39,    44
+       0,     0,     3,     4,     7,     9,    11,    14,    17,    18,
+      21,    24,    25,    26,    32,    33,    41,    46
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int8 yyrhs[] =
 {
-      24,     0,    -1,    25,    -1,    28,    -1,    30,    -1,    26,
-      25,    -1,    26,    33,    -1,    -1,    27,    25,    -1,    27,
-      32,    -1,    -1,    -1,     3,    12,    29,    26,     9,    -1,
-      -1,     4,     7,    22,     6,    31,    27,     9,    -1,     8,
-      22,    10,    22,    -1,     5,    12,    10,    12,    -1
+      24,     0,    -1,    -1,    25,    26,    -1,    29,    -1,    31,
+      -1,    27,    26,    -1,    27,    34,    -1,    -1,    28,    26,
+      -1,    28,    33,    -1,    -1,    -1,     3,    12,    30,    27,
+       9,    -1,    -1,     4,     7,    22,     6,    32,    28,     9,
+      -1,     8,    22,    10,    22,    -1,     5,    12,    10,    12,
+      -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint8 yyrline[] =
 {
-       0,    34,    34,    36,    36,    38,    38,    38,    40,    40,
-      40,    42,    42,    52,    52,    64,    67
+       0,    34,    34,    34,    36,    36,    38,    38,    38,    40,
+      40,    40,    42,    42,    52,    52,    64,    67
 };
 #endif
 
@@ -466,8 +467,8 @@ static const char *const yytname[] =
   "$end", "error", "$undefined", "CHIP", "DEVICE", "REGISTER", "BOOL",
   "BUS", "RESOURCE", "END", "EQUALS", "HEX", "STRING", "PCI", "PNP", "I2C",
   "APIC", "APIC_CLUSTER", "PCI_DOMAIN", "IRQ", "DRQ", "IO", "NUMBER",
-  "$accept", "devtree", "devchip", "devices", "devicesorresources", "chip",
-  "@1", "device", "@2", "resource", "registers", 0
+  "$accept", "devtree", "$@1", "devchip", "devices", "devicesorresources",
+  "chip", "@2", "device", "@3", "resource", "registers", 0
 };
 #endif
 
@@ -485,15 +486,15 @@ static const yytype_uint16 yytoknum[] =
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,    23,    24,    25,    25,    26,    26,    26,    27,    27,
-      27,    29,    28,    31,    30,    32,    33
+       0,    23,    25,    24,    26,    26,    27,    27,    27,    28,
+      28,    28,    30,    29,    32,    31,    33,    34
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
 static const yytype_uint8 yyr2[] =
 {
-       0,     2,     1,     1,     1,     2,     2,     0,     2,     2,
-       0,     0,     5,     0,     7,     4,     4
+       0,     2,     0,     2,     1,     1,     2,     2,     0,     2,
+       2,     0,     0,     5,     0,     7,     4,     4
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -501,33 +502,35 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       0,     0,     0,     0,     2,     3,     4,    11,     0,     1,
-       7,     0,     0,    13,     0,    12,     5,     6,    10,     0,
-       0,     0,     0,    14,     8,     9,    16,     0,     0,    15
+       2,     0,     0,     1,     0,     0,     3,     4,     5,    12,
+       0,     8,     0,     0,    14,     0,    13,     6,     7,    11,
+       0,     0,     0,     0,    15,     9,    10,    17,     0,     0,
+      16
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int8 yydefgoto[] =
 {
-      -1,     3,     4,    12,    20,     5,    10,     6,    18,    25,
-      17
+      -1,     1,     2,     6,    13,    21,     7,    11,     8,    19,
+      26,    18
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -13
+#define YYPACT_NINF -14
 static const yytype_int8 yypact[] =
 {
-       8,    -6,     6,    14,   -13,   -13,   -13,   -13,    -7,   -13,
-     -13,    10,    -2,   -13,     5,   -13,   -13,   -13,   -13,     9,
-       1,    11,    -4,   -13,   -13,   -13,   -13,    12,    -1,   -13
+     -14,     6,     8,   -14,     2,     9,   -14,   -14,   -14,   -14,
+      -9,   -14,    11,    -2,   -14,     3,   -14,   -14,   -14,   -14,
+      10,     1,     7,    -4,   -14,   -14,   -14,   -14,    12,    -1,
+     -14
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int8 yypgoto[] =
 {
-     -13,   -13,   -12,   -13,   -13,   -13,   -13,   -13,   -13,   -13,
-     -13
+     -14,   -14,   -14,   -13,   -14,   -14,   -14,   -14,   -14,   -14,
+     -14,   -14
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -537,25 +540,26 @@ static const yytype_int8 yypgoto[] =
 #define YYTABLE_NINF -1
 static const yytype_uint8 yytable[] =
 {
-      16,     1,     2,    14,     1,     2,     7,    15,    24,    22,
-      23,     1,     2,     8,     9,    11,    13,    19,    27,    21,
-       0,    29,    28,    26
+      17,     4,     5,    15,     4,     5,     3,    16,    25,    23,
+      24,     4,     5,    12,     9,    20,    10,    14,    28,    27,
+      22,    30,    29
 };
 
-static const yytype_int8 yycheck[] =
+static const yytype_uint8 yycheck[] =
 {
-      12,     3,     4,     5,     3,     4,    12,     9,    20,     8,
-       9,     3,     4,     7,     0,    22,     6,    12,    22,    10,
-      -1,    22,    10,    12
+      13,     3,     4,     5,     3,     4,     0,     9,    21,     8,
+       9,     3,     4,    22,    12,    12,     7,     6,    22,    12,
+      10,    22,    10
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
-       0,     3,     4,    24,    25,    28,    30,    12,     7,     0,
-      29,    22,    26,     6,     5,     9,    25,    33,    31,    12,
-      27,    10,     8,     9,    25,    32,    12,    22,    10,    22
+       0,    24,    25,     0,     3,     4,    26,    29,    31,    12,
+       7,    30,    22,    27,     6,     5,     9,    26,    34,    32,
+      12,    28,    10,     8,     9,    26,    33,    12,    22,    10,
+      22
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -1368,18 +1372,23 @@ yyreduce:
     {
         case 2:
 
+    { cur_parent = cur_bus = head; ;}
+    break;
+
+  case 3:
+
     { postprocess_devtree(); ;}
     break;
 
-  case 11:
+  case 12:
 
     {
-       (yyval.device) = new_chip((yyvsp[(2) - (2)].string));
+       (yyval.device) = new_chip(cur_parent, cur_bus, (yyvsp[(2) - (2)].string));
        cur_parent = (yyval.device);
 ;}
     break;
 
-  case 12:
+  case 13:
 
     {
        cur_parent = (yyvsp[(3) - (5)].device)->parent;
@@ -1388,16 +1397,16 @@ yyreduce:
 ;}
     break;
 
-  case 13:
+  case 14:
 
     {
-       (yyval.device) = new_device((yyvsp[(2) - (4)].number), (yyvsp[(3) - (4)].string), (yyvsp[(4) - (4)].number));
+       (yyval.device) = new_device(cur_parent, cur_bus, (yyvsp[(2) - (4)].number), (yyvsp[(3) - (4)].string), (yyvsp[(4) - (4)].number));
        cur_parent = (yyval.device);
        cur_bus = (yyval.device);
 ;}
     break;
 
-  case 14:
+  case 15:
 
     {
        cur_parent = (yyvsp[(5) - (7)].device)->parent;
@@ -1407,14 +1416,14 @@ yyreduce:
 ;}
     break;
 
-  case 15:
+  case 16:
 
-    { add_resource((yyvsp[(1) - (4)].number), strtol((yyvsp[(2) - (4)].string), NULL, 0), strtol((yyvsp[(4) - (4)].string), NULL, 0)); ;}
+    { add_resource(cur_parent, (yyvsp[(1) - (4)].number), strtol((yyvsp[(2) - (4)].string), NULL, 0), strtol((yyvsp[(4) - (4)].string), NULL, 0)); ;}
     break;
 
-  case 16:
+  case 17:
 
-    { add_register((yyvsp[(2) - (4)].string), (yyvsp[(4) - (4)].string)); ;}
+    { add_register(cur_parent, (yyvsp[(2) - (4)].string), (yyvsp[(4) - (4)].string)); ;}
     break;
 
 
index 3860569a95809281da9ba6daa4dd02ba86916ffb..162ce7050d335d654b839ff7ab9b8962a8246fdb 100755 (executable)
@@ -21,7 +21,7 @@
 
 #include "sconfig.h"
 
-struct device *cur_parent, *cur_bus;
+static struct device *cur_parent, *cur_bus;
 
 %}
 %union {
@@ -31,7 +31,7 @@ struct device *cur_parent, *cur_bus;
 }
 %token CHIP DEVICE REGISTER BOOL BUS RESOURCE END EQUALS HEX STRING PCI PNP I2C APIC APIC_CLUSTER PCI_DOMAIN IRQ DRQ IO NUMBER
 %%
-devtree: devchip { postprocess_devtree(); } ;
+devtree: { cur_parent = cur_bus = head; } devchip { postprocess_devtree(); } ;
 
 devchip: chip | device ;
 
@@ -40,7 +40,7 @@ devices: devices devchip | devices registers | ;
 devicesorresources: devicesorresources devchip | devicesorresources resource | ;
 
 chip: CHIP STRING /* == path */ {
-       $<device>$ = new_chip($<string>2);
+       $<device>$ = new_chip(cur_parent, cur_bus, $<string>2);
        cur_parent = $<device>$;
 }
        devices END {
@@ -50,7 +50,7 @@ chip: CHIP STRING /* == path */ {
 };
 
 device: DEVICE BUS NUMBER /* == devnum */ BOOL {
-       $<device>$ = new_device($<number>2, $<string>3, $<number>4);
+       $<device>$ = new_device(cur_parent, cur_bus, $<number>2, $<string>3, $<number>4);
        cur_parent = $<device>$;
        cur_bus = $<device>$;
 }
@@ -62,9 +62,9 @@ device: DEVICE BUS NUMBER /* == devnum */ BOOL {
 };
 
 resource: RESOURCE NUMBER /* == resnum */ EQUALS NUMBER /* == resval */
-       { add_resource($<number>1, strtol($<string>2, NULL, 0), strtol($<string>4, NULL, 0)); } ;
+       { add_resource(cur_parent, $<number>1, strtol($<string>2, NULL, 0), strtol($<string>4, NULL, 0)); } ;
 
 registers: REGISTER STRING /* == regname */ EQUALS STRING /* == regval */
-       { add_register($<string>2, $<string>4); } ;
+       { add_register(cur_parent, $<string>2, $<string>4); } ;
 
 %%