[SeaBIOS] Next steps
kevin at koconnor.net
Sat Dec 26 20:27:18 CET 2009
Here are my thoughts on upcoming enhancements that should go into
* Merge recent patches. Most are simple fixes. The only big change
is the ATA DMA support.
* Add 32bit PCI BIOS support. SeaBIOS has lots of 32bit code, but the
32bit PCI BIOS support requires use of segmented 32bit mode - so,
it's a bit of a pain to add. Right now, there are two main parts of
seabios that are linked together in the final compile stage - the
16bit code and 32bit flat mode code. To support 32bit PCI, there
will need to be three parts (16bit, 32bit flat, and 32bit
segmented). This will also involve changing a bunch of "#if MODE16"
tests to a new "#if MODESEGMENTS". This will make the final binary
a bit bigger (eg, there will be another copy of dprintf). While
doing this, it makes sense to convert the 32bit APM code to work the
same way (right now 32bit APM just transitions to 16bit mode and
calls the 16bit APM code).
* Make CONFIG_THREAD_OPTIONROMS the default. This experimental
feature allows SeaBIOS hardware init (eg, usb, ata, ps2) to run in
parallel with option rom execution. It can speed boot time on real
hardware. It's probably not much use for qemu, but I think it makes
sense to run as much of the same code on coreboot and qemu as
possible. There is a risk here of third-party option roms being
confused by the preemption code - however, that should be a small
risk and only testing will determine it.
* Add int1589 support. This call facilitates entering 32bit mode via
the bios. Bochs BIOS recently added support for it. It should be
straight forward to add to SeaBIOS - the 'struct bregs' should have
everything needed to restore state and directly return to the caller
in 32bit mode.
* Finish USB keyboard support - add auto-repeat, add LED support, add
support for usb hubs. USB keyboard works today (at least on qemu
and my Via hardware), but it's not fully fleshed out. These
remaining items should be completed.
Longer term items:
* Possibly add in DMA for packet commands, and possibly add support
for PATA timing code. The DMA on packet commands should be straight
forward. Support for PATA timing can noticeably increase transfer
speeds on these drives, but it requires per-chipset ide
initialization code. That would require a lookup table based on the
PCI ids of the ide controller to code capable of setting up the
* USB booting? This support is definitely needed, but there has been
some debate on whether adding to SeaBIOS makes the most sense. My
experience with ATA DMA indicates that EHCI support will also be a
Any other items?
More information about the SeaBIOS