Hi,
I'm wondering if there's a specification describing the state of the computer at the hand-off between LinuxBIOS and a payload.
So far I've got LinxBIOS booting a dummy "for(;;)" payload in Bochs, and I've found out there's a "LinuxBIOS Table" and that it can be found by searching for "LBIO" in the first 4 KB of RAM and in the area between 0xF000 and 0xFFFFF. I don't know if there's a checksum or any other validation, and have been unable to find anything describing what this table contains.
I assume there may also be ACPI, MP specification, PIRQ routing and/or (possibly) SMI/DMI tables, and I'm guessing that (if present) these tables can be searched for using the same methods as described in their corresponding specifications.
There's also other issues, for e.g: - will an 80x86 system always be in 32-bit protected mode for 32-bit ELF payloads, and is long mode possible for ELF64 payloads (and if so, how is paging setup)? - are any parameters passed on the stack to the payload's entry function? - are AP CPUs started (or waiting for a SIPI sequence)? - can the payload assume anything about the state of the PIC, I/O APIC/s and local APIC/s, PIT, RTC, ISA DMA controllers, serial ports, etc? - what state are PCI buses and devices left in (would a payload need to do full PCI bus enumeration, or..)? - is there anything in the LinuxBIOS table that could be used to determine if the computer is "headless" and which serial port or other device to use if it is? - can anything be assumed about AGP and the first video card (if the computer isn't headless)? - is there any form of "LinuxBIOS API" that can be used by the payload for generic low level disk access (floppy/ATA/ATAPI/SCSI)?
Thanks,
Brendan