From 269563a423f9291e84b5a93859a3e17767cf27a0 Mon Sep 17 00:00:00 2001 From: Stefan Reinauer Date: Mon, 19 Jan 2009 21:20:22 +0000 Subject: First shot at factoring SMM code into generic parts and southbridge specific parts. This should help to reduce the code duplication for Rudolf's K8/VIA SMM implementation... Signed-off-by: Stefan Reinauer Acked-by: Joseph Smith git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3870 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1 --- util/newconfig/config.g | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) (limited to 'util') diff --git a/util/newconfig/config.g b/util/newconfig/config.g index 93e36bbde2..294d407216 100644 --- a/util/newconfig/config.g +++ b/util/newconfig/config.g @@ -226,6 +226,9 @@ class romimage: # driver files added by 'driver' directive self.driverrules = {} + # smm object files added by 'smmobject' directive + self.smmobjectrules = {} + # loader scripts added by 'ldscript' directive self.ldscripts = [] @@ -344,6 +347,9 @@ class romimage: def adddriverrule(self, name): self.addobjectdriver(self.driverrules, name) + def addsmmobjectrule(self, name): + self.addobjectdriver(self.smmobjectrules, name) + def getinitobjectrules(self): return self.initobjectrules @@ -371,6 +377,15 @@ class romimage: return o fatal("No such driver rule \"%s\"" % name) + def getsmmobjectrules(self): + return self.smmobjectrules + + def getsmmobjectrule(self, name): + o = getdict(self.smmobjectrules, name) + if (o): + return o + fatal("No such smm object rule \"%s\"" % name) + def addldscript(self, path): self.ldscripts.append(path) @@ -1370,6 +1385,10 @@ def adddriver(driver_name): global curimage curimage.adddriverrule(driver_name) +def addsmmobject(object_name): + global curimage + curimage.addsmmobjectrule(object_name) + def target(name): global target_dir, target_name print "Configuring TARGET %s" % name @@ -1593,6 +1612,7 @@ parser Config: token PRINT: 'print' token REGISTER: 'register' token ROMIMAGE: 'romimage' + token SMMOBJECT: 'smmobject' token SOUTHBRIDGE: 'southbridge' token SUPERIO: 'superio' token TARGET: 'target' @@ -1693,6 +1713,10 @@ parser Config: rule driver<>: DRIVER DIRPATH {{ if (C): adddriver(DIRPATH)}} + rule smmobject<>: + SMMOBJECT DIRPATH {{ if (C): addsmmobject(DIRPATH)}} + + rule dir<>: DIR DIRPATH {{ if (C): dodir(DIRPATH, 'Config.lb') }} rule default<>: DEFAULT ID EQ value {{ if (C): setdefault(ID, value, 0) }} @@ -1826,6 +1850,7 @@ parser Config: | prtstmt<> {{ return prtstmt }} | register<> {{ return register }} | device<> {{ return device }} + | smmobject<> {{ return smmobject }} # ENTRY for parsing Config.lb file rule cfgfile: (uses<<1>>)* @@ -2028,6 +2053,13 @@ def writeimagemakefile(image): file.write("OBJECTS += %s\n" % (obj_name)) file.write("SOURCES += %s\n" % (obj_source)) + for srule, smm in image.getsmmobjectrules().items(): + s_name = smm[0] + s_source = smm[1] + file.write("SMM-OBJECTS += %s\n" % (s_name)) + file.write("SOURCES += %s\n" % (s_source)) + + # for chip_target.c file.write("OBJECTS += static.o\n") file.write("SOURCES += static.c\n") @@ -2104,6 +2136,23 @@ def writeimagemakefile(image): file.write("\t$(CC) -c $(CFLAGS) -o $@ $<\n") #file.write("%s\n" % objrule[2]) + file.write("\n# smmobjectrules:\n") + for irule, smm in image.getsmmobjectrules().items(): + source = topify(smm[1]) + type = smm[2] + if (type == 'S'): + # for .S, .o depends on .s + file.write("%s: %s.s\n" % (smm[0], smm[3])) + file.write("\t$(CC) -c $(CPU_OPT) -o $@ $<\n") + # and .s depends on .S + file.write("%s.s: %s\n" % (smm[3], source)) + # Note: next 2 lines are ONE output line! + file.write("\t$(CPP) $(CPPFLAGS) $< ") + file.write(">$@.new && mv $@.new $@\n") + else: + file.write("%s: %s\n" % (smm[0], source)) + file.write("\t$(CC) -c $(CFLAGS) -o $@ $<\n") + # special rule for chip_target.c file.write("static.o: static.c\n") file.write("\t$(CC) -c $(CFLAGS) -o $@ $<\n") -- cgit v1.2.3