static configuration. Needs new keyword per greg to enable inclusion of a

part-specific struct into the tree.


git-svn-id: svn://svn.coreboot.org/coreboot/trunk@941 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
Ronald G. Minnich 2003-07-11 14:51:29 +00:00
parent 2fceb77c47
commit a3c708b5d2
4 changed files with 67 additions and 16 deletions

View File

@ -1,7 +1,8 @@
/* chips are arbitrary chips (superio, southbridge, etc.) /* chips are arbitrary chips (superio, southbridge, etc.)
* They have private structures that define chip resources and default * They have private structures that define chip resources and default
* settings. They have four externally visible functions for control. * settings. They have four externally visible functions for control.
* new settings are provided as ascii strings. * They have a generic component which applies to all chips for
* path, etc.
*/ */
/* some of the types of resources chips can control */ /* some of the types of resources chips can control */
@ -30,6 +31,7 @@ struct lpt_ports {
struct chip; struct chip;
/* there is one of these for each TYPE of chip */
struct chip_control { struct chip_control {
void (*alloc)(struct chip *s); void (*alloc)(struct chip *s);
void (*pre_pci_init)(struct chip *s); void (*pre_pci_init)(struct chip *s);
@ -46,5 +48,9 @@ struct chip {
struct chip_control *control; /* for this device */ struct chip_control *control; /* for this device */
char *path; /* can be 0, in which case the default is taken */ char *path; /* can be 0, in which case the default is taken */
char *configuration; /* can be 0. */ char *configuration; /* can be 0. */
int irq;
struct chip *next, *children;
/* there is one of these for each INSTANCE of a chip */
void *chip_info; /* the dreaded "void *" */
}; };

View File

@ -20,7 +20,7 @@ if HAVE_MP_TABLE object mptable.o end
if HAVE_PIRQ_TABLE object irq_tables.o end if HAVE_PIRQ_TABLE object irq_tables.o end
# #
arch i386 end arch i386 end
cpu k8 end #cpu k8 end
# #
### ###
### Build our 16 bit and 32 bit linuxBIOS entry code ### Build our 16 bit and 32 bit linuxBIOS entry code
@ -34,7 +34,6 @@ ldscript /cpu/i386/entry32.lds
### Build our reset vector (This is where linuxBIOS is entered) ### Build our reset vector (This is where linuxBIOS is entered)
### ###
if USE_FALLBACK_IMAGE if USE_FALLBACK_IMAGE
print "Use fallback!"
mainboardinit cpu/i386/reset16.inc mainboardinit cpu/i386/reset16.inc
ldscript /cpu/i386/reset16.lds ldscript /cpu/i386/reset16.lds
else else
@ -128,7 +127,7 @@ southbridge amd/amd8111
end end
#mainboardinit archi386/smp/secondary.inc #mainboardinit archi386/smp/secondary.inc
superio NSC/pc87360 superio NSC/pc87360
register "com1={1} com2={0} floppy=1 lpt=1 keyboard=1" register ".com1={1}, .com2={0}, .floppy=1, .lpt=1, .keyboard=1"
end end
dir /pc80 dir /pc80
##dir /src/superio/winbond/w83627hf ##dir /src/superio/winbond/w83627hf

View File

@ -4,7 +4,7 @@
loadoptions loadoptions
target ./hdama target hdama
uses AMD8111_DEV uses AMD8111_DEV
uses CONFIG_COMPRESS uses CONFIG_COMPRESS

View File

@ -197,7 +197,7 @@ class option:
return (self.used) return (self.used)
class partobj: class partobj:
def __init__ (self, dir, parent, type): def __init__ (self, dir, parent, type, name):
global partinstance global partinstance
if (debug): if (debug):
print "partobj dir %s parent %s type %s" %(dir,parent,type) print "partobj dir %s parent %s type %s" %(dir,parent,type)
@ -211,12 +211,20 @@ class partobj:
self.dir = dir self.dir = dir
self.irq = 0 self.irq = 0
self.instance = partinstance + 1 self.instance = partinstance + 1
self.flatten_name = flatten_name(type + "/" + name)
if (debug): if (debug):
print "INSTANCE %d" % self.instance print "INSTANCE %d" % self.instance
partinstance = partinstance + 1 partinstance = partinstance + 1
self.devfn = 0 self.devfn = 0
self.private = 0 self.private = 0
self.options = {} self.options = {}
# chip initialization. If there is a chip.h in the
# directory, generate the structs etc. to
# initialize the code
self.chipconfig = 0
if (os.path.exists(dir + "/" + "chip.h")):
self.chipconfig = 1
if (parent): if (parent):
if (debug): if (debug):
print "add to parent" print "add to parent"
@ -235,6 +243,7 @@ class partobj:
print "%d: type %s" % (lvl, self.type) print "%d: type %s" % (lvl, self.type)
print "%d: instance %d" % (lvl, self.instance) print "%d: instance %d" % (lvl, self.instance)
print "%d: dir %s" % (lvl,self.dir) print "%d: dir %s" % (lvl,self.dir)
print "%d: flatten_name %s" % (lvl,self.flatten_name)
print "%d: parent %s" % (lvl,self.parent.type) print "%d: parent %s" % (lvl,self.parent.type)
print "%d: parent dir %s" % (lvl,self.parent.dir) print "%d: parent dir %s" % (lvl,self.parent.dir)
if (self.children): if (self.children):
@ -250,17 +259,40 @@ class partobj:
print "\n" print "\n"
def gencode(self, file): def gencode(self, file):
file.write("struct cdev dev%d = {\n" % self.instance) if (self.chipconfig):
file.write("struct %s_config %s_config_%d" % (\
self.flatten_name ,\
self.flatten_name , \
self.instance))
if (self.registercode):
file.write("\t= {\n")
for i in self.registercode:
file.write( "\t %s" % i)
file.write("\t}\n")
else:
file.write(";")
file.write("\n");
file.write("struct chip dev%d = {\n" % self.instance)
file.write("/* %s %s */\n" % (self.type, self.dir)) file.write("/* %s %s */\n" % (self.type, self.dir))
file.write(" .devfn = %d\n" % self.devfn) #file.write(" .devfn = %d,\n" % self.devfn)
if (self.siblings): if (self.siblings):
file.write(" .next = &dev%d\n" % self.siblings.instance) file.write(" .next = &dev%d,\n" % self.siblings.instance)
if (self.children): if (self.children):
file.write(" .children = &dev%d\n" % \ file.write(" .children = &dev%d,\n" % \
self.children.instance) self.children.instance)
if (self.private): if (self.private):
file.write(" .private = private%d\n" % self.instance) file.write(" .private = private%d,\n" % self.instance)
if (self.chipconfig):
# set the pointer to the structure for all this
# type of part
file.write(" .control= &%s_control,\n" % \
self.flatten_name )
# generate the pointer to the isntance
# of the chip struct
file.write(" .chip_config = (void *) &%s_config_%d,\n" %\
(self.flatten_name, self.instance ))
file.write("};\n") file.write("};\n")
def irq(self, irq): def irq(self, irq):
@ -270,6 +302,7 @@ class partobj:
self.initcode.append(code) self.initcode.append(code)
def addregister(self, code): def addregister(self, code):
code = dequote(code)
self.registercode.append(code) self.registercode.append(code)
def usesoption(self, name): def usesoption(self, name):
@ -587,14 +620,14 @@ def target(targ_name):
print "Creating directory %s" % target_dir print "Creating directory %s" % target_dir
os.makedirs(target_dir) os.makedirs(target_dir)
print "Will place Makefile, crt0.S, etc. in %s" % target_dir print "Will place Makefile, crt0.S, etc. in %s" % target_dir
root = partobj(target_dir, 0, 'board') root = partobj(target_dir, 0, 'board', targ_name)
curpart = root curpart = root
def part(name, path, file): def part(name, path, file):
global curpart,curdir,treetop global curpart,curdir,treetop
dirstack.append(curdir) dirstack.append(curdir)
curdir = os.path.join(treetop, 'src', name, path) curdir = os.path.join(treetop, 'src', name, path)
newpart = partobj(curdir, curpart, name) newpart = partobj(curdir, curpart, name, path)
print "Configuring PART %s, path %s\n" % (name,path) print "Configuring PART %s, path %s\n" % (name,path)
if (debug): if (debug):
print "PUSH part %s %s" % (name, curpart.dir) print "PUSH part %s %s" % (name, curpart.dir)
@ -679,6 +712,10 @@ def dequote(str):
a = re.sub("\\\\\"", "\"", a) a = re.sub("\\\\\"", "\"", a)
return a return a
def flatten_name(str):
a = re.sub("/", "_", str)
return a
def addaction(id, str): def addaction(id, str):
o = getvalue(makebaserules, id) o = getvalue(makebaserules, id)
a = dequote(str) a = dequote(str)
@ -1177,9 +1214,9 @@ def gencode(part, file):
# dump the siblings -- actually are there any? not sure # dump the siblings -- actually are there any? not sure
# dump the kids # dump the kids
if (debug): if (debug):
print "GENCODE KID is" print "GENCODE SIBLINGS are"
kid = part kid = part.siblings
while (kid.siblings): while (kid):
kid.gencode(file) kid.gencode(file)
kid = kid.siblings kid = kid.siblings
if (debug): if (debug):
@ -1220,7 +1257,16 @@ if __name__=='__main__':
filename = os.path.join(target_dir, "chips.c") filename = os.path.join(target_dir, "chips.c")
print "Creating", filename print "Creating", filename
file = open(filename, 'w+') file = open(filename, 'w+')
# gen all the forward references
i = 0
file.write("struct chip ")
while (i <= partinstance):
file.write("cdev%d "% i)
i = i + 1
file.write(";\n")
gencode(root, file) gencode(root, file)
file.close()
# crt0 includes # crt0 includes
if (debug): if (debug):