aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/biosvar.h3
-rw-r--r--src/boot.c8
-rw-r--r--src/bootsplash.c9
-rw-r--r--src/post.c8
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;
diff --git a/src/boot.c b/src/boot.c
index 814dee12..44964a70 100644
--- a/src/boot.c
+++ b/src/boot.c
@@ -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();
}
diff --git a/src/post.c b/src/post.c
index fc7acc58..0cb9e575 100644
--- a/src/post.c
+++ b/src/post.c
@@ -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;