blob: 7108e67a3a5ff5a9bf73b7e80767a70a43f62263 [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
Stefan Reinauer2e78aa52016-05-07 01:11:14 -07006 * written by Patrick Georgi <patrick@georgi-clan.de>
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +00007 *
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
Stefan Reinauer2e78aa52016-05-07 01:11:14 -070020int yylex();
21void yyerror(const char *s);
22
Patrick Georgi68befd52010-05-05 12:05:25 +000023static struct device *cur_parent, *cur_bus;
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +000024
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +000025%}
26%union {
27 struct device *device;
28 char *string;
29 int number;
30}
Sven Schnelle270a9082011-03-01 19:58:15 +000031
Furquan Shaikhe6700292017-02-11 00:50:38 -080032%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 GENERIC SPI
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +000033%%
Patrick Georgi8f625f62010-05-05 13:13:47 +000034devtree: { cur_parent = cur_bus = head; } chip { postprocess_devtree(); } ;
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +000035
Patrick Georgi8f625f62010-05-05 13:13:47 +000036chipchildren: chipchildren device | chipchildren chip | chipchildren registers | /* empty */ ;
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +000037
Sven Schnelle0fa50a12012-06-21 22:19:48 +020038devicechildren: devicechildren device | devicechildren chip | devicechildren resource | devicechildren subsystemid | devicechildren ioapic_irq | /* empty */ ;
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +000039
40chip: CHIP STRING /* == path */ {
Patrick Georgi68befd52010-05-05 12:05:25 +000041 $<device>$ = new_chip(cur_parent, cur_bus, $<string>2);
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +000042 cur_parent = $<device>$;
43}
Patrick Georgi8f625f62010-05-05 13:13:47 +000044 chipchildren END {
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +000045 cur_parent = $<device>3->parent;
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +000046 fold_in($<device>3);
Patrick Georgi114e7b22010-05-05 11:19:50 +000047 add_header($<device>3);
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +000048};
49
50device: DEVICE BUS NUMBER /* == devnum */ BOOL {
Patrick Georgi68befd52010-05-05 12:05:25 +000051 $<device>$ = new_device(cur_parent, cur_bus, $<number>2, $<string>3, $<number>4);
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +000052 cur_parent = $<device>$;
53 cur_bus = $<device>$;
54}
Patrick Georgi8f625f62010-05-05 13:13:47 +000055 devicechildren END {
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +000056 cur_parent = $<device>5->parent;
57 cur_bus = $<device>5->bus;
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +000058 fold_in($<device>5);
Patrick Georgi114e7b22010-05-05 11:19:50 +000059 alias_siblings($<device>5->children);
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +000060};
61
62resource: RESOURCE NUMBER /* == resnum */ EQUALS NUMBER /* == resval */
Patrick Georgi68befd52010-05-05 12:05:25 +000063 { add_resource(cur_parent, $<number>1, strtol($<string>2, NULL, 0), strtol($<string>4, NULL, 0)); } ;
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +000064
65registers: REGISTER STRING /* == regname */ EQUALS STRING /* == regval */
Patrick Georgi68befd52010-05-05 12:05:25 +000066 { add_register(cur_parent, $<string>2, $<string>4); } ;
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +000067
Sven Schnelle270a9082011-03-01 19:58:15 +000068subsystemid: SUBSYSTEMID NUMBER NUMBER
69 { add_pci_subsystem_ids(cur_parent, strtol($<string>2, NULL, 16), strtol($<string>3, NULL, 16), 0); };
70
71subsystemid: SUBSYSTEMID NUMBER NUMBER INHERIT
72 { add_pci_subsystem_ids(cur_parent, strtol($<string>2, NULL, 16), strtol($<string>3, NULL, 16), 1); };
73
Sven Schnelle0fa50a12012-06-21 22:19:48 +020074ioapic_irq: IOAPIC_IRQ NUMBER PCIINT NUMBER
75 { add_ioapic_info(cur_parent, strtol($<string>2, NULL, 16), $<string>3, strtol($<string>4, NULL, 16)); };
Patrick Georgi7e8c9aa2010-04-08 11:37:43 +000076%%