X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Fresume.c;h=59bb90195427e01be1525aeb4d4a3f1813f61f69;hb=9a8609f862b89efbb52106a94ad51f55bb67e05a;hp=6db6b714142f9019a347d9f1a6d6e7e12d4802e6;hpb=942d495dcd12801187076d12e5f7409e8a8aa661;p=seabios.git diff --git a/src/resume.c b/src/resume.c index 6db6b71..59bb901 100644 --- a/src/resume.c +++ b/src/resume.c @@ -48,7 +48,6 @@ handle_resume(u8 status) } // NO BREAK case 0x00: - case 0x09: case 0x0d ... 0xfd: case 0xff: // Normal post - now that status has been cleared a reset will @@ -61,12 +60,12 @@ handle_resume(u8 status) eoi_pic2(); // NO BREAK case 0x0a: -#define BDA_JUMP_IP (((struct bios_data_area_s *)0)->jump_ip) +#define BDA_JUMP (((struct bios_data_area_s *)0)->jump) // resume execution by jump via 40h:0067h asm volatile( "movw %w1, %%ds\n" "ljmpw *%0\n" - : : "m"(BDA_JUMP_IP), "r"(SEG_BDA) + : : "m"(BDA_JUMP), "r"(SEG_BDA) ); break; @@ -76,7 +75,7 @@ handle_resume(u8 status) "movw %w1, %%ds\n" "lssw %0, %%sp\n" "iretw\n" - : : "m"(BDA_JUMP_IP), "r"(SEG_BDA) + : : "m"(BDA_JUMP), "r"(SEG_BDA) ); break; @@ -86,7 +85,7 @@ handle_resume(u8 status) "movw %w1, %%ds\n" "lssw %0, %%sp\n" "lretw\n" - : : "m"(BDA_JUMP_IP), "r"(SEG_BDA) + : : "m"(BDA_JUMP), "r"(SEG_BDA) ); break; } @@ -94,8 +93,8 @@ handle_resume(u8 status) panic("Unimplemented shutdown status: %02x\n", status); } -#if MODE16==0 -void VISIBLE32 +#if MODESEGMENT == 0 +void VISIBLE32FLAT s3_resume() { if (!CONFIG_S3_RESUME) @@ -105,6 +104,8 @@ s3_resume() smm_init(); + s3_resume_vga_init(); + make_bios_readonly(); u32 s3_resume_vector = find_resume_vector(); @@ -114,18 +115,12 @@ s3_resume() memset(&br, 0, sizeof(br)); if (s3_resume_vector) { dprintf(1, "Jump to resume vector (%x)\n", s3_resume_vector); - br.ip = FLATPTR_TO_OFFSET(s3_resume_vector); - br.cs = FLATPTR_TO_SEG(s3_resume_vector); + br.code = FLATPTR_TO_SEGOFF((void*)s3_resume_vector); } else { dprintf(1, "No resume vector set!\n"); // Jump to the post vector to restart with a normal boot. - br.ip = (u32)reset_vector - BUILD_BIOS_ADDR; - br.cs = SEG_BIOS; + br.code = SEGOFF(SEG_BIOS, (u32)reset_vector - BUILD_BIOS_ADDR); } call16big(&br); } #endif - -// Ughh - some older gcc compilers have a bug which causes VISIBLE32 -// functions to not be exported as global variables. -asm(".global s3_resume");