From 2dfed87596185de7c6cded2ca18cf9144d0bdc62 Mon Sep 17 00:00:00 2001 From: Shao Miller Date: Mon, 14 Jun 2010 21:37:59 +0000 Subject: [PATCH] [romprefix] Allow building for opt-out boot strategy We detect the VMware Player and VMware Workstation 7.0.1 BIOS as a non-BBS-compliant BIOS and we therefore hook INTerrupt 0x19 for booting. As of commit 4d7c650164a759e3dadbcf8f83da6789165c68b7, we would choose to always boot unless the user at the console specifies otherwise with an 'N' keystroke. Some users would rather that we not always boot by default. This commit introduces a conditional build path for allowing INT 0x19 users to build an "opt-out" ROM. If INT19_OPTOUT is defined, such a ROM image will result. This commit also adds a ROM-O-Matic option for the same. Reported-by: Alessandro Salvatori Tested-by: Alessandro Salvatori Tested-by: Shao Miller Signed-off-by: Shao Miller --- contrib/rom-o-matic/doc/INT19_OPTOUT.html | 1 + contrib/rom-o-matic/flag-table.php | 8 ++++++++ src/arch/i386/prefix/romprefix.S | 12 ++++++++++++ src/config/defaults/pcbios.h | 2 ++ 4 files changed, 23 insertions(+), 0 deletions(-) create mode 100644 contrib/rom-o-matic/doc/INT19_OPTOUT.html diff --git a/contrib/rom-o-matic/doc/INT19_OPTOUT.html b/contrib/rom-o-matic/doc/INT19_OPTOUT.html new file mode 100644 index 0000000..d7aab28 --- /dev/null +++ b/contrib/rom-o-matic/doc/INT19_OPTOUT.html @@ -0,0 +1 @@ +Require 'B' keystroke to boot on INT 0x19 BIOSes diff --git a/contrib/rom-o-matic/flag-table.php b/contrib/rom-o-matic/flag-table.php index 82551e4..45e41cd 100644 --- a/contrib/rom-o-matic/flag-table.php +++ b/contrib/rom-o-matic/flag-table.php @@ -98,6 +98,14 @@ $flag_table = array ( "cfgsec" => "general" ), + "INT19_OPTOUT" + => array ( + "flag" => "INT19_OPTOUT", + "type" => "on/off", + "value" => "off", + "cfgsec" => "general" + ), + // End Console Options // Begin Network Protocol Options: diff --git a/src/arch/i386/prefix/romprefix.S b/src/arch/i386/prefix/romprefix.S index 02e5497..fdd3ae2 100644 --- a/src/arch/i386/prefix/romprefix.S +++ b/src/arch/i386/prefix/romprefix.S @@ -904,7 +904,11 @@ int19_entry: call print_message movw $int19_message_dots, %si call print_message +#ifdef INT19_OPTOUT movw $0xdf4e, %bx +#else + movw $0xdf42, %bx +#endif call wait_for_key pushf xorw %di, %di @@ -912,7 +916,11 @@ int19_entry: movw $int19_message_done, %si call print_message popf +#ifdef INT19_OPTOUT + jnz 1f +#else jz 1f +#endif /* Leave keypress in buffer and start iPXE. The keypress will * cause the usual initial Ctrl-B prompt to be skipped. */ @@ -931,7 +939,11 @@ orig_int19: .size orig_int19, . - orig_int19 int19_message_prompt: +#ifdef INT19_OPTOUT + .asciz "Press B to boot from " +#else .asciz "Press N to skip booting from " +#endif .size int19_message_prompt, . - int19_message_prompt int19_message_dots: .asciz "..." diff --git a/src/config/defaults/pcbios.h b/src/config/defaults/pcbios.h index c09105c..c881cbb 100644 --- a/src/config/defaults/pcbios.h +++ b/src/config/defaults/pcbios.h @@ -32,4 +32,6 @@ FILE_LICENCE ( GPL2_OR_LATER ); #define SANBOOT_PROTO_ISCSI /* iSCSI protocol */ #define SANBOOT_PROTO_AOE /* AoE protocol */ +#undef INT19_OPTOUT /* INT19 BIOS boot-on-keypress-only */ + #endif /* CONFIG_DEFAULTS_PCBIOS_H */ -- 1.5.6.6