Hi,
as promised a short proposal on how to give the payload a chance to make use of the console(s) established by coreboot.
There's an ACK for my serial patch, but I'll wait for responses on this one, as the patch is a first step for this strategy.
The proposal is about a setup which would implement both console management (Torsten wrote about int0x10) and resource tables (eg. serial ports at 0x400) for crucial devices. This way a payload could have a console on COM1 and get its data via PPP or ZMODEM on COM2. With only a console setup, it wouldn't know about COM2, with only a serial ports table, it wouldn't know where to find the user...
The proposal is layered in two types of records:
The first type is an I/O-device record, like the serial port record I wrote. These can be extended with additional information as neccessary (and independent from other device types!), which might include IRQs or enumeration (in case we ever support more than one serial port in cb itself, for example).
These record are specified and designed on an as-needed basis, so we don't fall in the trap of over-engineering. Multiple devices are specified with one record (of the same type) per device, with some identifier (int) to tell them apart (added when we first use this strategy).
By only adding data to the record's end, they're implicitely backward compatible, as the growing size is taken care of with the size attribute that is standard to all records. Payloads can figure out which information exists based on size as well, by ignoring any field that exceeds the size.
The second type is a console type. It consists of tag and size (like every record), and an integer (enum) type that specifies the device type (eg. serial=0, vga=1, ...). Later, this record can be extended to also carry a device number (if there are multiple serial ports) and maybe priorities or markers that consoles should be used in parallel (serial + vgatext). Multiple consoles would again be done by adding one record for each console. Again, these additions will be made when there's an actual use case, thereby reducing the problem space right now.
I'd like to go on with that, and will do so in a few days. Please don't wait until I have a patch ready for all that stuff, before telling me it's crap ;-)
So... Comments? :-)
Regards, Patrick Georgi