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