blob: 66c5b6df74035cbec45528bba8d11e61576d9ea6 [file] [log] [blame]
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +00001%{
2/*
3 * sconfig, coreboot device tree compiler
4 *
5 * Copyright (C) 2010 coresystems GmbH
6 * written by Patrick Georgi <patrick.georgi@coresystems.de>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; version 2 of the License.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +000016 */
17
Patrick Georgi114e7b22010-05-05 11:19:50 +000018#include "sconfig.h"
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +000019
Patrick Georgi68befd52010-05-05 12:05:25 +000020static struct device *cur_parent, *cur_bus;
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +000021
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +000022%}
23%union {
24 struct device *device;
25 char *string;
26 int number;
27}
Sven Schnelle270a9082011-03-01 19:58:15 +000028
Aaron Durbinffda804b2014-09-03 12:40:15 -050029%token CHIP DEVICE REGISTER BOOL BUS RESOURCE END EQUALS HEX STRING PCI PNP I2C APIC CPU_CLUSTER CPU DOMAIN IRQ DRQ IO NUMBER SUBSYSTEMID INHERIT IOAPIC_IRQ IOAPIC PCIINT
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +000030%%
Patrick Georgi8f625f62010-05-05 13:13:47 +000031devtree: { cur_parent = cur_bus = head; } chip { postprocess_devtree(); } ;
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +000032
Patrick Georgi8f625f62010-05-05 13:13:47 +000033chipchildren: chipchildren device | chipchildren chip | chipchildren registers | /* empty */ ;
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +000034
Sven Schnelle0fa50a12012-06-21 22:19:48 +020035devicechildren: devicechildren device | devicechildren chip | devicechildren resource | devicechildren subsystemid | devicechildren ioapic_irq | /* empty */ ;
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +000036
37chip: CHIP STRING /* == path */ {
Patrick Georgi68befd52010-05-05 12:05:25 +000038 $<device>$ = new_chip(cur_parent, cur_bus, $<string>2);
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +000039 cur_parent = $<device>$;
40}
Patrick Georgi8f625f62010-05-05 13:13:47 +000041 chipchildren END {
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +000042 cur_parent = $<device>3->parent;
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +000043 fold_in($<device>3);
Patrick Georgi114e7b22010-05-05 11:19:50 +000044 add_header($<device>3);
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +000045};
46
47device: DEVICE BUS NUMBER /* == devnum */ BOOL {
Patrick Georgi68befd52010-05-05 12:05:25 +000048 $<device>$ = new_device(cur_parent, cur_bus, $<number>2, $<string>3, $<number>4);
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +000049 cur_parent = $<device>$;
50 cur_bus = $<device>$;
51}
Patrick Georgi8f625f62010-05-05 13:13:47 +000052 devicechildren END {
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +000053 cur_parent = $<device>5->parent;
54 cur_bus = $<device>5->bus;
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +000055 fold_in($<device>5);
Patrick Georgi114e7b22010-05-05 11:19:50 +000056 alias_siblings($<device>5->children);
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +000057};
58
59resource: RESOURCE NUMBER /* == resnum */ EQUALS NUMBER /* == resval */
Patrick Georgi68befd52010-05-05 12:05:25 +000060 { add_resource(cur_parent, $<number>1, strtol($<string>2, NULL, 0), strtol($<string>4, NULL, 0)); } ;
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +000061
62registers: REGISTER STRING /* == regname */ EQUALS STRING /* == regval */
Patrick Georgi68befd52010-05-05 12:05:25 +000063 { add_register(cur_parent, $<string>2, $<string>4); } ;
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +000064
Sven Schnelle270a9082011-03-01 19:58:15 +000065subsystemid: SUBSYSTEMID NUMBER NUMBER
66 { add_pci_subsystem_ids(cur_parent, strtol($<string>2, NULL, 16), strtol($<string>3, NULL, 16), 0); };
67
68subsystemid: SUBSYSTEMID NUMBER NUMBER INHERIT
69 { add_pci_subsystem_ids(cur_parent, strtol($<string>2, NULL, 16), strtol($<string>3, NULL, 16), 1); };
70
Sven Schnelle0fa50a12012-06-21 22:19:48 +020071ioapic_irq: IOAPIC_IRQ NUMBER PCIINT NUMBER
72 { add_ioapic_info(cur_parent, strtol($<string>2, NULL, 16), $<string>3, strtol($<string>4, NULL, 16)); };
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +000073%%