Add boot menu control via command line switch

Disable the lengthy BIOS prompt for selecting a boot device by default,
but let the user reenable it via '-boot menu=on'.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
Jan Kiszka 2009-07-02 00:19:02 +02:00 committed by Anthony Liguori
parent e0f084bfc9
commit 9538749118
4 changed files with 18 additions and 1 deletions

View File

@ -279,6 +279,7 @@ void *fw_cfg_init(uint32_t ctl_port, uint32_t data_port,
fw_cfg_add_bytes(s, FW_CFG_UUID, qemu_uuid, 16); fw_cfg_add_bytes(s, FW_CFG_UUID, qemu_uuid, 16);
fw_cfg_add_i16(s, FW_CFG_NOGRAPHIC, (uint16_t)(display_type == DT_NOGRAPHIC)); fw_cfg_add_i16(s, FW_CFG_NOGRAPHIC, (uint16_t)(display_type == DT_NOGRAPHIC));
fw_cfg_add_i16(s, FW_CFG_NB_CPUS, (uint16_t)smp_cpus); fw_cfg_add_i16(s, FW_CFG_NB_CPUS, (uint16_t)smp_cpus);
fw_cfg_add_i16(s, FW_CFG_BOOT_MENU, (uint16_t)boot_menu);
register_savevm("fw_cfg", -1, 1, fw_cfg_save, fw_cfg_load, s); register_savevm("fw_cfg", -1, 1, fw_cfg_save, fw_cfg_load, s);
qemu_register_reset(fw_cfg_reset, s); qemu_register_reset(fw_cfg_reset, s);

View File

@ -15,6 +15,7 @@
#define FW_CFG_INITRD_SIZE 0x0b #define FW_CFG_INITRD_SIZE 0x0b
#define FW_CFG_BOOT_DEVICE 0x0c #define FW_CFG_BOOT_DEVICE 0x0c
#define FW_CFG_NUMA 0x0d #define FW_CFG_NUMA 0x0d
#define FW_CFG_BOOT_MENU 0x0e
#define FW_CFG_MAX_ENTRY 0x10 #define FW_CFG_MAX_ENTRY 0x10
#define FW_CFG_WRITE_CHANNEL 0x4000 #define FW_CFG_WRITE_CHANNEL 0x4000

View File

@ -124,6 +124,7 @@ extern int graphic_rotate;
extern int no_quit; extern int no_quit;
extern int semihosting_enabled; extern int semihosting_enabled;
extern int old_param; extern int old_param;
extern int boot_menu;
#ifdef CONFIG_KQEMU #ifdef CONFIG_KQEMU
extern int kqemu_allowed; extern int kqemu_allowed;

16
vl.c
View File

@ -254,6 +254,7 @@ const char *prom_envs[MAX_PROM_ENVS];
#endif #endif
int nb_drives_opt; int nb_drives_opt;
struct drive_opt drives_opt[MAX_DRIVES]; struct drive_opt drives_opt[MAX_DRIVES];
int boot_menu;
int nb_numa_nodes; int nb_numa_nodes;
uint64_t node_mem[MAX_NODES]; uint64_t node_mem[MAX_NODES];
@ -5121,7 +5122,7 @@ int main(int argc, char **argv, char **envp)
case QEMU_OPTION_boot: case QEMU_OPTION_boot:
{ {
static const char * const params[] = { static const char * const params[] = {
"order", "once", NULL "order", "once", "menu", NULL
}; };
char buf[sizeof(boot_devices)]; char buf[sizeof(boot_devices)];
char *standard_boot_devices; char *standard_boot_devices;
@ -5151,6 +5152,19 @@ int main(int argc, char **argv, char **envp)
qemu_register_reset(restore_boot_devices, qemu_register_reset(restore_boot_devices,
standard_boot_devices); standard_boot_devices);
} }
if (get_param_value(buf, sizeof(buf),
"menu", optarg)) {
if (!strcmp(buf, "on")) {
boot_menu = 1;
} else if (!strcmp(buf, "off")) {
boot_menu = 0;
} else {
fprintf(stderr,
"qemu: invalid option value '%s'\n",
buf);
exit(1);
}
}
} }
} }
break; break;