diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2010-07-26 23:47:26 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2010-07-26 23:47:26 -0400 |
commit | cadaf0e35d4530a0aa3f3100c3c0e5c96d9f0556 (patch) | |
tree | e87fca3a157363d1ca064258a44704dd1a289305 /src | |
parent | 2641186e7650d1dbe9249f57fe005581f31da402 (diff) | |
download | seabios-cadaf0e35d4530a0aa3f3100c3c0e5c96d9f0556.tar.gz |
Be sure to disable bootsplash on all BIOS boot cases.
Disable the bootsplash on cbfs payload exec, and if something hooks
int19.
Also, be sure to only disable the bootsplash (revert to text mode)
once.
Diffstat (limited to 'src')
-rw-r--r-- | src/biosvar.h | 3 | ||||
-rw-r--r-- | src/boot.c | 8 | ||||
-rw-r--r-- | src/bootsplash.c | 9 | ||||
-rw-r--r-- | src/post.c | 8 |
4 files changed, 19 insertions, 9 deletions
diff --git a/src/biosvar.h b/src/biosvar.h index dce35af2..df0df0eb 100644 --- a/src/biosvar.h +++ b/src/biosvar.h @@ -1,6 +1,6 @@ // Variable layouts of bios. // -// Copyright (C) 2008,2009 Kevin O'Connor <kevin@koconnor.net> +// Copyright (C) 2008-2010 Kevin O'Connor <kevin@koconnor.net> // // This file may be distributed under the terms of the GNU LGPLv3 license. #ifndef __BIOSVAR_H @@ -216,6 +216,7 @@ struct extended_bios_data_area_s { u8 other2[0xC4]; // 0x121 - Begin custom storage. + u8 bootsplash_active; u8 ps2ctr; struct usbkeyinfo usbkey_last; @@ -1,6 +1,6 @@ // Code to load disk image and start system boot. // -// Copyright (C) 2008 Kevin O'Connor <kevin@koconnor.net> +// Copyright (C) 2008-2010 Kevin O'Connor <kevin@koconnor.net> // Copyright (C) 2002 MandrakeSoft S.A. // // This file may be distributed under the terms of the GNU LGPLv3 license. @@ -343,11 +343,10 @@ boot_prep(void) static void call_boot_entry(u16 bootseg, u16 bootip, u8 bootdrv) { - dprintf(1, "Booting from %04x:%04x\n", bootseg, bootip); - /* Go back to text, the OS might expect it... (Can't do this any later) */ disable_bootsplash(); + dprintf(1, "Booting from %04x:%04x\n", bootseg, bootip); struct bregs br; memset(&br, 0, sizeof(br)); br.flags = F_IF; @@ -431,6 +430,7 @@ boot_cbfs(struct ipl_entry_s *ie) return; if (count--) continue; + disable_bootsplash(); cbfs_run_payload(file); } } @@ -462,7 +462,7 @@ do_boot(u16 seq_nr) printf("Booting from %s...\n" , strtcpy(desc, ie->description, ARRAY_SIZE(desc))); - switch(ie->type) { + switch (ie->type) { case IPL_TYPE_FLOPPY: boot_disk(0x00, IPL.checkfloppysig); break; diff --git a/src/bootsplash.c b/src/bootsplash.c index b96e0666..9ff81b37 100644 --- a/src/bootsplash.c +++ b/src/bootsplash.c @@ -10,6 +10,7 @@ #include "config.h" // CONFIG_* #include "util.h" // dprintf #include "jpeg.h" // splash +#include "biosvar.h" // SET_EBDA /**************************************************************** @@ -99,7 +100,7 @@ static void enable_vga_text_console(void) call16_int10(&br); // Write to screen. - printf("Starting SeaBIOS (version %s)\n\n", VERSION); + printf("SeaBIOS (version %s)\n\n", VERSION); } void enable_vga_console(void) @@ -181,7 +182,7 @@ void enable_vga_console(void) dprintf(8, "bytes per scanline: %d\n", mode_info->bytes_per_scanline); dprintf(8, "bits per pixel: %d\n", mode_info->bits_per_pixel); - /* Look for bootsplash.jpg in CBFS and decompress it... */ + /* Decompress jpeg */ dprintf(8, "Copying boot splash screen...\n"); cbfs_copyfile(file, jpeg, filesize); dprintf(8, "Decompressing boot splash screen...\n"); @@ -194,6 +195,7 @@ void enable_vga_console(void) /* Show the picture */ iomemcpy(framebuffer, picture, imagesize); + SET_EBDA(bootsplash_active, 1); cleanup: free(jpeg); @@ -210,7 +212,8 @@ gotext: void disable_bootsplash(void) { - if (! CONFIG_BOOTSPLASH) + if (! CONFIG_BOOTSPLASH || !GET_EBDA(bootsplash_active)) return; + SET_EBDA(bootsplash_active, 0); enable_vga_text_console(); } @@ -1,6 +1,6 @@ // 32bit code to Power On Self Test (POST) a machine. // -// Copyright (C) 2008,2009 Kevin O'Connor <kevin@koconnor.net> +// Copyright (C) 2008-2010 Kevin O'Connor <kevin@koconnor.net> // Copyright (C) 2002 MandrakeSoft S.A. // // This file may be distributed under the terms of the GNU LGPLv3 license. @@ -276,6 +276,12 @@ _start(void) // Write protect bios memory. make_bios_readonly(); + // Disable bootsplash if something has hooked int19. + extern void entry_19_official(void); + if (GET_IVT(0x19).segoff + != SEGOFF(SEG_BIOS, (u32)entry_19_official - BUILD_BIOS_ADDR).segoff) + disable_bootsplash(); + // Invoke int 19 to start boot process. dprintf(3, "Jump to int19\n"); struct bregs br; |