2008/7/16 Kevin O'Connor kevin@koconnor.net:
On Tue, Jul 15, 2008 at 11:21:38PM +0800, Zhang Rui wrote:
But when I returned to coreboot and call int19, nothing happens. It can boot correctly when call int19 in SeaBIOS. Maybe it has something to do with the stack? How can I call the interrupt of SeaBIOS in coreboot?
Not sure how you tried to do this. It should just be a matter of transitioning to 16bit mode and then executing 'int 0x19'. You do not need to worry about the stack as seabios already initializes that as part of its int19 code.
I wrote a function in SeaBIOS: void VISIBLE32 boot_coreboot() { struct bregs br; dprintf(1, "boot_coreboot: begin\n"); memset(&br, 0, sizeof(br)); dprintf(1, "boot_coreboot: call int 19\n"); call16_int(0x19, &br); dprintf(1, "boot_coreboot: end\n"); } and then use run_address() to execute this boot_coreboot() function in coreboot. "boot_coreboot: begin" can be displayed but "boot_coreboot: end" can not. The program become quiet after executing "call16_int(0x19, &br);"
why this can not run correctly? If I manually change to 16bit mode then call int19 in coreboot, will it be OK? If it does, the 16bit mode option rom codes can use the int handler of SeaBIOS?
Zhang Rui