Commit 95387491 authored by Jan Kiszka's avatar Jan Kiszka Committed by Anthony Liguori
Browse files

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: default avatarJan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: default avatarAnthony Liguori <aliguori@us.ibm.com>
parent e0f084bf
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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_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_BOOT_MENU, (uint16_t)boot_menu);

    register_savevm("fw_cfg", -1, 1, fw_cfg_save, fw_cfg_load, s);
    qemu_register_reset(fw_cfg_reset, s);
+1 −0
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@
#define FW_CFG_INITRD_SIZE      0x0b
#define FW_CFG_BOOT_DEVICE      0x0c
#define FW_CFG_NUMA             0x0d
#define FW_CFG_BOOT_MENU        0x0e
#define FW_CFG_MAX_ENTRY        0x10

#define FW_CFG_WRITE_CHANNEL    0x4000
+1 −0
Original line number Diff line number Diff line
@@ -124,6 +124,7 @@ extern int graphic_rotate;
extern int no_quit;
extern int semihosting_enabled;
extern int old_param;
extern int boot_menu;

#ifdef CONFIG_KQEMU
extern int kqemu_allowed;
+15 −1
Original line number Diff line number Diff line
@@ -254,6 +254,7 @@ const char *prom_envs[MAX_PROM_ENVS];
#endif
int nb_drives_opt;
struct drive_opt drives_opt[MAX_DRIVES];
int boot_menu;

int nb_numa_nodes;
uint64_t node_mem[MAX_NODES];
@@ -5121,7 +5122,7 @@ int main(int argc, char **argv, char **envp)
            case QEMU_OPTION_boot:
                {
                    static const char * const params[] = {
                        "order", "once", NULL
                        "order", "once", "menu", NULL
                    };
                    char buf[sizeof(boot_devices)];
                    char *standard_boot_devices;
@@ -5151,6 +5152,19 @@ int main(int argc, char **argv, char **envp)
                            qemu_register_reset(restore_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;