aboutsummaryrefslogtreecommitdiff
path: root/vl.c
diff options
context:
space:
mode:
authorGerd Hoffmann <kraxel@redhat.com>2009-07-31 12:25:37 +0200
committerAnthony Liguori <aliguori@us.ibm.com>2009-08-10 13:05:27 -0500
commitf31d07d175b25ecca89f5d55dfdf2b55540e5e44 (patch)
tree29ac8173604ce126ff3c93a2ed08bd47627eb107 /vl.c
parentd058fe03e53699b5a85db1ea36edcf59273775a8 (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.c31
1 files changed, 17 insertions, 14 deletions
diff --git a/vl.c b/vl.c
index 5542df31bf..6c4a509989 100644
--- a/vl.c
+++ b/vl.c
@@ -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)