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:
parent
e0f084bfc9
commit
9538749118
@ -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);
|
||||||
|
@ -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
|
||||||
|
1
sysemu.h
1
sysemu.h
@ -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
16
vl.c
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user