diff --git a/hw/hw.h b/hw/hw.h index a424d28f8e..c2c0ac0d7a 100644 --- a/hw/hw.h +++ b/hw/hw.h @@ -262,9 +262,10 @@ typedef void QEMUResetHandler(void *opaque); void qemu_register_reset(QEMUResetHandler *func, void *opaque); -/* handler to set the boot_device for a specific type of QEMUMachine */ +/* handler to set the boot_device order for a specific type of QEMUMachine */ /* return 0 if success */ -typedef int QEMUBootSetHandler(void *opaque, const char *boot_device); +typedef int QEMUBootSetHandler(void *opaque, const char *boot_devices); void qemu_register_boot_set(QEMUBootSetHandler *func, void *opaque); +int qemu_boot_set(const char *boot_devices); #endif diff --git a/monitor.c b/monitor.c index 342af32326..c3ef099bda 100644 --- a/monitor.c +++ b/monitor.c @@ -1185,28 +1185,15 @@ static void do_ioport_read(Monitor *mon, int count, int format, int size, suffix, addr, size * 2, val); } -/* boot_set handler */ -static QEMUBootSetHandler *qemu_boot_set_handler = NULL; -static void *boot_opaque; - -void qemu_register_boot_set(QEMUBootSetHandler *func, void *opaque) -{ - qemu_boot_set_handler = func; - boot_opaque = opaque; -} - static void do_boot_set(Monitor *mon, const char *bootdevice) { int res; - if (qemu_boot_set_handler) { - res = qemu_boot_set_handler(boot_opaque, bootdevice); - if (res == 0) - monitor_printf(mon, "boot device list now set to %s\n", - bootdevice); - else - monitor_printf(mon, "setting boot device list failed with " - "error %i\n", res); + res = qemu_boot_set(bootdevice); + if (res == 0) { + monitor_printf(mon, "boot device list now set to %s\n", bootdevice); + } else if (res > 0) { + monitor_printf(mon, "setting boot device list failed\n"); } else { monitor_printf(mon, "no function defined to set boot device list for " "this architecture\n"); diff --git a/vl.c b/vl.c index 06e2fe574a..a771450177 100644 --- a/vl.c +++ b/vl.c @@ -274,6 +274,9 @@ static QEMUTimer *nographic_timer; uint8_t qemu_uuid[16]; +static QEMUBootSetHandler *boot_set_handler; +static void *boot_set_opaque; + /***********************************************************/ /* x86 ISA bus support */ @@ -2356,6 +2359,20 @@ int drive_init(struct drive_opt *arg, int snapshot, void *opaque) return drives_table_idx; } +void qemu_register_boot_set(QEMUBootSetHandler *func, void *opaque) +{ + boot_set_handler = func; + boot_set_opaque = opaque; +} + +int qemu_boot_set(const char *boot_devices) +{ + if (!boot_set_handler) { + return -EINVAL; + } + return boot_set_handler(boot_set_opaque, boot_devices); +} + static int parse_bootdevices(char *devices) { /* We just do some generic consistency checks */