Hi,
On Wed, Jul 09, 2008 at 11:43:57AM -0600, Myles Watson wrote:
On Tue, Jul 8, 2008 at 7:41 PM, Kevin O'Connor kevin@koconnor.net wrote:
Did you have coreboot init the vga option rom first? If so, you probably want to disable that.
That lets me get farther, which begs the question why it's not reentrant. Does your code register your handlers over the existing ones? Should it?
SeaBIOS has to initialize the 8086 real mode irq vectors on startup. It does overwrite the 0x10 handler that the vga bios may have installed. I don't see anyway around this - the contents of the irq table could be junk and not initializing it would lead to mysterious crashes.
Also, I don't think we can rely on an emulator to setup the memory associated with option roms. It's fine for initializing the hardware, but its another thing to rely on an emulator to initialize the software interfaces.
So, we need to have SeaBIOS do the option rom scan.
I'm concerned that in a payload chooser you'll want to have graphical output to allow the user to choose SeaBIOS. If you can't run the VGA BIOS first ... that seems like a problem.
This was something that Stefan brought up. He suggested having SeaBIOS return to coreboot and then let coreboot select the payload. However, I'm not convinced that this is the best way to go. Making sure that SeaBIOS and coreboot don't stomp on each other could be difficult.
Another possibility is to teach SeaBIOS how to launch payloads from flash.
Now I can boot the Linux CDs and here's the trace from XP. It gets to the "Setup is inspecting your computer's hardware configuration..." and hangs. I was surprised at the "sendmouse: keyboard input buffer full" message, because I didn't press any keys.
Okay - the message "sendmouse: keyboard input buffer full" is a PANIC call - so the bios itself shuts down the machine at that point.
I haven't seen this error. There are a couple of things I can think of:
* the ps2 port isn't initialized. On seabios, I've stopped calling the low level keyboard init when used with coreboot (see keyboard_init() in kbd.c). You could try enabling that.
* there is some kind of a run-away interrupt on your hardware. The keyboard is on int 1 and the mouse is on int 12. Those aren't normally used by other devices so this seems less likely.
* The mouse code may not be that flexible. You could try disabling CONFIG_PS2_MOUSE and see if that helps.
* You might want to double check that you don't have the keyboard and mouse swapped in the ps2 ports. You might want to also try booting without the mouse plugged in.
I have noticed that the mouse and keyboard code are both writing to the same ps2 io ports and that they aren't necessarily safe wrt to mouse and keyboard interrupts. This is a problem inherited from the bochs code. I plan to look at this, but it's not going to be a quick fix.
Thanks, -Kevin