char *string;
int 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: { cur_parent = cur_bus = head; } devchip { postprocess_devtree(); } ;
-devchip: chip | device ;
+%token CHIP DEVICE REGISTER BOOL BUS RESOURCE END EQUALS HEX STRING PCI PNP I2C APIC APIC_CLUSTER PCI_DOMAIN IRQ DRQ IO NUMBER SUBSYSTEMID INHERIT
+%%
+devtree: { cur_parent = cur_bus = head; } chip { postprocess_devtree(); } ;
-devices: devices devchip | devices registers | ;
+chipchildren: chipchildren device | chipchildren chip | chipchildren registers | /* empty */ ;
-devicesorresources: devicesorresources devchip | devicesorresources resource | ;
+devicechildren: devicechildren device | devicechildren chip | devicechildren resource | devicechildren subsystemid | /* empty */ ;
chip: CHIP STRING /* == path */ {
$<device>$ = new_chip(cur_parent, cur_bus, $<string>2);
cur_parent = $<device>$;
}
- devices END {
+ chipchildren END {
cur_parent = $<device>3->parent;
fold_in($<device>3);
add_header($<device>3);
cur_parent = $<device>$;
cur_bus = $<device>$;
}
- devicesorresources END {
+ devicechildren END {
cur_parent = $<device>5->parent;
cur_bus = $<device>5->bus;
fold_in($<device>5);
registers: REGISTER STRING /* == regname */ EQUALS STRING /* == regval */
{ add_register(cur_parent, $<string>2, $<string>4); } ;
+subsystemid: SUBSYSTEMID NUMBER NUMBER
+ { add_pci_subsystem_ids(cur_parent, strtol($<string>2, NULL, 16), strtol($<string>3, NULL, 16), 0); };
+
+subsystemid: SUBSYSTEMID NUMBER NUMBER INHERIT
+ { add_pci_subsystem_ids(cur_parent, strtol($<string>2, NULL, 16), strtol($<string>3, NULL, 16), 1); };
+
+
%%