]> git.proxmox.com Git - mirror_qemu.git/commitdiff
Add boot menu control via command line switch
authorJan Kiszka <jan.kiszka@siemens.com>
Wed, 1 Jul 2009 22:19:02 +0000 (00:19 +0200)
committerAnthony Liguori <aliguori@us.ibm.com>
Thu, 16 Jul 2009 13:28:12 +0000 (08:28 -0500)
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>
hw/fw_cfg.c
hw/fw_cfg.h
sysemu.h
vl.c

index ce57de7d486dee07707022b142d288f95de99e60..d75cce46ffe07f03f94e6aca62638e32e892cce5 100644 (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_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);
index f616ed2f69cec18f1129a24f050ee4f47558f587..9fee1810088cb6608cd7340207638b6bac9b3173 100644 (file)
@@ -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
index 06dc4c6868b368c82ae0aabdf2d47102dd4d34a2..df19f0284067197084425e39b15dbb0de4327263 100644 (file)
--- a/sysemu.h
+++ b/sysemu.h
@@ -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;
diff --git a/vl.c b/vl.c
index 7360d4f0212d1d5bef97802139013dca272a08ff..2fbea375ab3b222a1f1e2dc54de07074812afad8 100644 (file)
--- a/vl.c
+++ b/vl.c
@@ -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;