summaryrefslogtreecommitdiff
path: root/util/newconfig/config.g
diff options
context:
space:
mode:
Diffstat (limited to 'util/newconfig/config.g')
-rw-r--r--util/newconfig/config.g87
1 files changed, 66 insertions, 21 deletions
diff --git a/util/newconfig/config.g b/util/newconfig/config.g
index ffe32c3a2f..65cedb6b5c 100644
--- a/util/newconfig/config.g
+++ b/util/newconfig/config.g
@@ -12,6 +12,7 @@ errors = 0
target_dir = ''
target_name = ''
treetop = ''
+full_mainboard_path = ''
global_options = {}
global_options_by_order = []
global_option_values = {}
@@ -841,6 +842,7 @@ def newoptionvalue(name, image):
def getoptionvalue(name, op, image):
global global_option_values
+ #print "getoptionvalue name %s op %s image %s\n" % (name, op,image)
if (op == 0):
fatal("Option %s undefined (missing use command?)" % name)
if (image):
@@ -856,12 +858,16 @@ def getoption(name, image):
global global_uses_options, alloptions, curimage
+ #print "getoption: name %s image %s alloptions %s curimage %s\n\n" % (name, image, alloptions, curimage)
curpart = partstack.tos()
if (alloptions):
+ #print "ALLOPTIONS\n"
o = getdict(global_options, name)
elif (curpart):
+ #print "CURPART\n"
o = getdict(curpart.uses_options, name)
else:
+ #print "GLOBAL_USES_OPTIONS\n"
o = getdict(global_uses_options, name)
v = getoptionvalue(name, o, image)
if (v == 0):
@@ -1057,12 +1063,12 @@ def validdef(name, defval):
if ((defval & 4) != 4):
fatal("Must specify comment for option %s" % name)
-def loadoptions():
- file = os.path.join('src', 'config', 'Options.lb')
+def loadoptions(path, file, rule):
+ file = os.path.join('src', path, file)
optionsfile = os.path.join(treetop, file)
fp = safe_open(optionsfile, 'r')
loc.push(file)
- if (not parse('options', fp.read())):
+ if (not parse(rule, fp.read())):
fatal("Could not parse file")
loc.pop()
@@ -1112,7 +1118,7 @@ def payload(path):
def startromimage(name):
global romimages, curimage, target_dir, target_name
- print "Configuring ROMIMAGE %s" % name
+ print "Configuring ROMIMAGE %s Curimage %s" % (name, curimage)
o = getdict(romimages, name)
if (o):
fatal("romimage %s previously defined" % name)
@@ -1124,19 +1130,29 @@ def startromimage(name):
def endromimage():
global curimage
+ mainboard()
print "End ROMIMAGE"
curimage = 0
#curpart = 0
-def mainboard(path):
- full_path = os.path.join(treetop, 'src', 'mainboard', path)
+def mainboardsetup(path):
+ global full_mainboard_path
+ mainboard_path = os.path.join('mainboard', path)
+ loadoptions(mainboard_path, 'Options.lb', 'mainboardvariables')
+ full_mainboard_path = os.path.join(treetop, 'src', 'mainboard', path)
vendor = re.sub("/.*", "", path)
part_number = re.sub("[^/]*/", "", path)
- setdefault('MAINBOARD', full_path, 0)
+ setdefault('MAINBOARD', full_mainboard_path, 0)
setdefault('MAINBOARD_VENDOR', vendor, 0)
setdefault('MAINBOARD_PART_NUMBER', part_number, 0)
- dodir('/config', 'Config.lb')
- part('mainboard', path, 'Config.lb', 0, 0)
+
+def mainboard():
+ # a mainboard is no longer really a part as such.
+ # so just do the config file for the mainboard
+ #part('mainboard', full_mainboard_path, 'Config.lb', 0, 0)
+ global full_mainboard_path
+ mainboard_path = os.path.join(full_mainboard_path)
+ loadoptions(mainboard_path, 'Config.lb', 'cfgfile')
curimage.setroot(partstack.tos())
partpop()
@@ -1177,6 +1193,16 @@ def cpudir(path):
dodir(srcdir, "Config.lb")
cpu_type = path
+def simplepart(type):
+ global curimage, dirstack, partstack
+ newpart = partobj(curimage, 0, partstack.tos(), type, \
+ '', 0, 0)
+ print "Configuring PART %s" % (type)
+ partstack.push(newpart)
+ print " new PART tos is now %s\n" %partstack.tos()
+ # just push TOS, so that we can pop later.
+ dirstack.push(dirstack.tos())
+
def part(type, path, file, name, link):
global curimage, dirstack, partstack
partdir = os.path.join(type, path)
@@ -1187,6 +1213,7 @@ def part(type, path, file, name, link):
type_name, name, link)
print "Configuring PART %s, path %s" % (type, path)
partstack.push(newpart)
+ print " new PART tos is now %s\n" %partstack.tos()
dirstack.push(fulldir)
# special case for 'cpu' parts.
# we could add a new function too, but this is rather trivial.
@@ -1209,6 +1236,7 @@ def partpop():
notice("Option %s using default value %s" % (op, getformated(op, curpart.image)))
partstack.pop()
dirstack.pop()
+ print "partstack.pop, TOS is now %s\n" % partstack.tos()
def dodir(path, file):
"""dodir is like part but there is no new part"""
@@ -1334,6 +1362,7 @@ parser Config:
token DEFAULT: 'default'
token DEFINE: 'define'
token DEPENDS: 'depends'
+ token DEVICE: 'device'
token DIR: 'dir'
token DRIVER: 'driver'
token DRQ: 'drq'
@@ -1514,26 +1543,32 @@ parser Config:
{{ if (C): partstack.tos().end_resources() }}
- rule pci<<C>>: PCI HEX_NUM {{ bus = int(HEX_NUM,16) }}
- ':' HEX_NUM {{ slot = int(HEX_NUM,16) }}
+ rule pci<<C>>: PCI {{ if (C): simplepart('pci') }}
+
+ HEX_NUM {{ slot = int(HEX_NUM,16) }}
'.' HEX_NUM {{ function = int(HEX_NUM, 16) }}
enable
- {{ if (C): partstack.tos().addpcipath(enable, bus, slot, function) }}
+ {{ if (C): partstack.tos().addpcipath(enable, 0, slot, function) }}
resources<<C>>
+ partend<<C>>
- rule pnp<<C>>: PNP HEX_NUM {{ port = int(HEX_NUM,16) }}
+ rule pnp<<C>>: PNP {{ if (C): simplepart('pnp') }}
+ HEX_NUM {{ port = int(HEX_NUM,16) }}
'.' HEX_NUM {{ device = int(HEX_NUM, 16) }}
enable
{{ if (C): partstack.tos().addpnppath(enable, port, device) }}
resources<<C>>
+ partend<<C>>
- rule i2c<<C>>: I2C HEX_NUM {{ device = int(HEX_NUM, 16) }}
+ rule i2c<<C>>: I2C {{ if (C): simplepart('i2c') }}
+ HEX_NUM {{ device = int(HEX_NUM, 16) }}
enable
{{ if (C): partstack.tos().addi2cpath(enable, device) }}
resources<<C>>
- rule apic<<C>>: APIC HEX_NUM {{ apic_id = int(HEX_NUM, 16) }}
+ rule apic<<C>>: APIC {{ if (C): simplepart('apic') }}
+ HEX_NUM {{ apic_id = int(HEX_NUM, 16) }}
enable
{{ if (C): partstack.tos().addapicpath(enable, apic_id) }}
resources<<C>>
@@ -1558,6 +1593,8 @@ parser Config:
rule config<<C>>: CONFIG PATH {{ if (C): addconfig(PATH) }}
+ rule device<<C>>: DEVICE dev_path<<C>>
+
rule stmt<<C>>: arch<<C>> {{ return arch}}
| addaction<<C>> {{ return addaction }}
| config<<C>> {{ return config}}
@@ -1577,17 +1614,26 @@ parser Config:
| partdef<<C>> {{ return partdef }}
| prtstmt<<C>> {{ return prtstmt }}
| register<<C>> {{ return register }}
- | dev_path<<C>> {{ return dev_path }}
+ | device<<C>> {{ return device }}
# ENTRY for parsing Config.lb file
rule cfgfile: (uses<<1>>)*
(stmt<<1>>)*
EOF {{ return 1 }}
+ rule cfgfile: (uses<<1>>)*
+ (stmt<<1>>)*
+ EOF {{ return 1 }}
+
rule usesid<<C>>: ID {{ if (C): usesoption(ID) }}
rule uses<<C>>: USES (usesid<<C>>)+
+ rule mainboardvariables: (uses<<1>>)*
+ (default<<1>>)*
+ (option<<1>>)*
+ END {{ return 1}}
+
rule value: STR {{ return dequote(STR) }}
| expr {{ return expr }}
| DELEXPR {{ return DELEXPR }}
@@ -1605,8 +1651,8 @@ parser Config:
rule payload<<C>>: PAYLOAD DIRPATH {{ if (C): payload(DIRPATH) }}
- rule mainboard<<C>>:
- MAINBOARD PATH {{ if (C): mainboard(PATH) }}
+ rule mainboard:
+ MAINBOARD PATH {{ mainboardsetup(PATH) }}
rule romif<<C>>: IF ID {{ c = lookup(ID) }}
(romstmt<<C and c>>)*
@@ -1615,7 +1661,6 @@ parser Config:
rule romstmt<<C>>: romif<<C>>
| option<<C>>
- | mainboard<<C>>
| payload<<C>>
rule romimage: ROMIMAGE STR {{ startromimage(dequote(STR)) }}
@@ -1633,9 +1678,9 @@ parser Config:
| opstmt<<1>>
# ENTRY for parsing root part
- rule board: LOADOPTIONS {{ loadoptions() }}
+ rule board: {{ loadoptions("config", "Options.lb", "options") }}
TARGET DIRPATH {{ target(DIRPATH) }}
- (uses<<1>>)*
+ mainboard
(romstmts)*
EOF {{ return 1 }}