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:
parent
2fceb77c47
commit
a3c708b5d2
|
@ -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 *" */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
loadoptions
|
loadoptions
|
||||||
|
|
||||||
target ./hdama
|
target hdama
|
||||||
|
|
||||||
uses AMD8111_DEV
|
uses AMD8111_DEV
|
||||||
uses CONFIG_COMPRESS
|
uses CONFIG_COMPRESS
|
||||||
|
|
|
@ -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):
|
||||||
|
|
Loading…
Reference in New Issue