diff options
author | Gerd Hoffmann <kraxel@redhat.com> | 2009-07-31 12:25:37 +0200 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2009-08-10 13:05:27 -0500 |
commit | f31d07d175b25ecca89f5d55dfdf2b55540e5e44 (patch) | |
tree | 29ac8173604ce126ff3c93a2ed08bd47627eb107 /vl.c | |
parent | d058fe03e53699b5a85db1ea36edcf59273775a8 (diff) |
QemuOpts: switch over -device.
Make -device switch use the QemuOpts framework.
Everything should continue to work like it did before.
New: "-set device.$id.$property=$value" works.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Message-Id:
Diffstat (limited to 'vl.c')
-rw-r--r-- | vl.c | 31 |
1 files changed, 17 insertions, 14 deletions
@@ -4716,9 +4716,18 @@ char *qemu_find_file(int type, const char *name) return buf; } +static int device_init_func(QemuOpts *opts, void *opaque) +{ + DeviceState *dev; + + dev = qdev_device_add(opts); + if (!dev) + return -1; + return 0; +} + struct device_config { enum { - DEV_GENERIC, /* -device */ DEV_USB, /* -usbdevice */ DEV_BT, /* -bt */ } type; @@ -4752,16 +4761,6 @@ static int foreach_device_config(int type, int (*func)(const char *cmdline)) return 0; } -static int generic_parse(const char *cmdline) -{ - DeviceState *dev; - - dev = qdev_device_add(cmdline); - if (!dev) - return -1; - return 0; -} - int main(int argc, char **argv, char **envp) { const char *gdbstub_dev = NULL; @@ -4776,7 +4775,7 @@ int main(int argc, char **argv, char **envp) int cyls, heads, secs, translation; const char *net_clients[MAX_NET_CLIENTS]; int nb_net_clients; - QemuOpts *hda_opts = NULL; + QemuOpts *hda_opts = NULL, *opts; int optind; const char *r, *optarg; CharDriverState *monitor_hd = NULL; @@ -5386,7 +5385,11 @@ int main(int argc, char **argv, char **envp) add_device_config(DEV_USB, optarg); break; case QEMU_OPTION_device: - add_device_config(DEV_GENERIC, optarg); + opts = qemu_opts_parse(&qemu_device_opts, optarg, "driver"); + if (!opts) { + fprintf(stderr, "parse error: %s\n", optarg); + exit(1); + } break; case QEMU_OPTION_smp: { @@ -5922,7 +5925,7 @@ int main(int argc, char **argv, char **envp) } /* init generic devices */ - if (foreach_device_config(DEV_GENERIC, generic_parse)) + if (qemu_opts_foreach(&qemu_device_opts, device_init_func, NULL, 1) != 0) exit(1); if (!display_state) |