On Thu, 19 Jun 2008 16:24:10 +0800, "Zhang Rui" zrfail@gmail.com wrote:
2008/6/19 Joseph Smith joe@settoplinux.org:
[...]
Well, Sorry to say, to me that does not make very much sense. First of all, at the point where you "1. copy LegacyBIOS codes to
0xf0000"
the memory should already be initialized by coreboot correct?? This is
one
of the first things coreboot does is initialize the memory. So, the
second
part of number 2. ("initialize the memory") may not be necessary if the memory is already initialized by coreboot.
Sorry for being unclear. According to Kevin, some LegacyBIOS interrupt handlers need the Bios Data Area (BDA) and Extended Bios Data Area (EBDA) setted by the post() function in LegacyBIOS. So my meaning of 2. ("initialize the memory") is use modified post() to set up these areas. Here is some piece of Kevin's email, and I forword the full text at the end of this email.
What we have to find out is: Do we have to preserve much at all?
Maybe
it is enough to install legacybios to 0xf0000 and let it live there, then the payloads could just use intXX calls, as they can with an AMI/Phoenix/Award bios installed. But maybe it is not that trivial.
As above, some of the interrupt handlers may run okay without "post" running. However, several of them want to access the Bios Data Area (BDA) and Extended Bios Data Area (EBDA). Basically, these are the working storage areas of the bios. The "post" code is what initializes these memory areas.
Here is what I would suggest, I don't know if it is the right direction,
but
I think it logically makes sense:
- Start the coreboot initialization process as normal
- When coreboot gets to the memory allocation part; have it reserve a
certain amount(Size of LegacyBIOS??) at 0xf0000 (if option LegacyBIOS is selected).
this should be taken to consideration.
- (if option LegacyBIOS is selected) copy LegacyBIOS codes to 0xf0000.
- (if option LegacyBIOS is selected) Jump to LegacyBIOS and setup any
tables, INT's, etc.
According to Kevin's email, this will be done by calling post() in LegacyBIOS. But post() will do the booting at the end, so we should modify it to return to coreboot.
- Return to coreboot and continue as normal.
- in the payload part initialize the SCSI controller and install a
handler
and call LegacyBIOS INT19.
Does this make any sense, or am I way off course???
Thanks to Joseph. You give a more detailed roadmap and I will try to go on this direction.
And any questions?
I don't think so, I am excited to try it out once you are finished. Although I am using IDE instead of SCSI. Sorry if I sound like a broken record, the main thing to remember is we need to make all the LegacyBIOS code that is getting injected into the coreboot base code optional, hence the "if option LegacyBIOS is selected". There are alot of people sensative about this, and we need to keep coreboot flexible and make everyone happy, right?