From: Kevin O'Connor Date: Tue, 20 Sep 2011 23:42:14 +0000 (-0400) Subject: Define handle_post as VISIBLE32FLAT as work around for QEmu memory layout. X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=seabios.git;a=commitdiff_plain;h=9acdc28d5d91f68db3cd6b32509dd1ad9544f145 Define handle_post as VISIBLE32FLAT as work around for QEmu memory layout. QEmu only copies the top 128K of the BIOS image to low memory (0xe0000-0xfffff). Images over 128K are only fully mapped in high memory (0xfff00000). However, the SeaBIOS shadow functions (make_bios_writable_intel) will copy up to 256K to low memory. SeaBIOS generally works with 256K roms because they are automatically copied to low memory during the BIOS init. However, this only works if the shadow function code is itself part of the bios image that is placed in low memory by QEmu. Defining handle_post() as VISIBLE32FLAT will make the linker scripts more likely to place the initial shadow code in the last 128K of the image. Signed-off-by: Kevin O'Connor --- diff --git a/src/post.c b/src/post.c index e195e89..b4ad1fa 100644 --- a/src/post.c +++ b/src/post.c @@ -333,10 +333,25 @@ reloc_init(void) func(); } -// Start of Power On Self Test (POST) - the BIOS initilization phase. -// This function does the setup needed for code relocation, and then -// invokes the relocation and main setup code. +// Setup for code relocation and then call reloc_init void VISIBLE32INIT +dopost(void) +{ + HaveRunPost = 1; + + // Detect ram and setup internal malloc. + qemu_cfg_port_probe(); + ram_probe(); + malloc_setup(); + + // Relocate initialization code and call maininit(). + reloc_init(); +} + +// Entry point for Power On Self Test (POST) - the BIOS initilization +// phase. This function makes the memory at 0xc0000-0xfffff +// read/writable and then calls dopost(). +void VISIBLE32FLAT handle_post(void) { debug_serial_setup(); @@ -356,13 +371,7 @@ handle_post(void) // Allow writes to modify bios area (0xf0000) make_bios_writable(); - HaveRunPost = 1; - - // Detect ram and setup internal malloc. - qemu_cfg_port_probe(); - ram_probe(); - malloc_setup(); - // Relocate initialization code and call maininit(). - reloc_init(); + // Now that memory is read/writable - start post process. + dopost(); }