aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Armbruster <armbru@redhat.com>2013-02-13 15:54:16 +0100
committerAnthony Liguori <aliguori@us.ibm.com>2013-02-13 11:57:32 -0600
commitd36b2b904ee921b380fad559cb824a40eb587bcb (patch)
tree505d25ee160bfcfedf695d4f581bd0d2fc060253
parentd037d6bbbcdda6552254286b6da090ef0dc0d98a (diff)
qapi: Flatten away ChardevPort
Simplifies the schema and the code. QMP command { "execute" : "chardev-add", "arguments" : { "id" : "ser0", "backend" : { "type" : "port", "data" : { "type": "serial", "device":"/dev/ttyS0"} } } } becomes { "execute" : "chardev-add", "arguments" : { "id" : "ser0", "backend" : { "type" : "serial", "data" : { "device":"/dev/ttyS0"} } } } Bonus: nicer error messages. "unknown chardev port (1)" becomes "character device backend type 'parallel' not supported". Signed-off-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com> Message-id: 1360767256-610-3-git-send-email-armbru@redhat.com Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
-rw-r--r--qapi-schema.json11
-rw-r--r--qemu-char.c76
2 files changed, 45 insertions, 42 deletions
diff --git a/qapi-schema.json b/qapi-schema.json
index bd289aeb51..7275b5dd6a 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -3095,7 +3095,7 @@
'out' : 'str' } }
##
-# @ChardevPort:
+# @ChardevHostdev:
#
# Configuration info for device chardevs.
#
@@ -3105,11 +3105,7 @@
#
# Since: 1.4
##
-{ 'enum': 'ChardevPortKind', 'data': [ 'serial',
- 'parallel' ] }
-
-{ 'type': 'ChardevPort', 'data': { 'device' : 'str',
- 'type' : 'ChardevPortKind'} }
+{ 'type': 'ChardevHostdev', 'data': { 'device' : 'str' } }
##
# @ChardevSocket:
@@ -3142,7 +3138,8 @@
{ 'type': 'ChardevDummy', 'data': { } }
{ 'union': 'ChardevBackend', 'data': { 'file' : 'ChardevFile',
- 'port' : 'ChardevPort',
+ 'serial' : 'ChardevHostdev',
+ 'parallel': 'ChardevHostdev',
'socket' : 'ChardevSocket',
'pty' : 'ChardevDummy',
'null' : 'ChardevDummy' } }
diff --git a/qemu-char.c b/qemu-char.c
index 574d3d292f..e4b0f5304f 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -3269,15 +3269,17 @@ static CharDriverState *qmp_chardev_open_file(ChardevFile *file, Error **errp)
return qemu_chr_open_win_file(out);
}
-static CharDriverState *qmp_chardev_open_port(ChardevPort *port, Error **errp)
+static CharDriverState *qmp_chardev_open_serial(ChardevHostdev *serial,
+ Error **errp)
{
- switch (port->type) {
- case CHARDEV_PORT_KIND_SERIAL:
- return qemu_chr_open_win_path(port->device);
- default:
- error_setg(errp, "unknown chardev port (%d)", port->type);
- return NULL;
- }
+ return qemu_chr_open_win_path(serial->device);
+}
+
+static CharDriverState *qmp_chardev_open_parallel(ChardevHostdev *parallel,
+ Error **errp)
+{
+ error_setg(errp, "character device backend type 'parallel' not supported");
+ return NULL;
}
#else /* WIN32 */
@@ -3316,38 +3318,39 @@ static CharDriverState *qmp_chardev_open_file(ChardevFile *file, Error **errp)
return qemu_chr_open_fd(in, out);
}
-static CharDriverState *qmp_chardev_open_port(ChardevPort *port, Error **errp)
+static CharDriverState *qmp_chardev_open_serial(ChardevHostdev *serial,
+ Error **errp)
{
- switch (port->type) {
#ifdef HAVE_CHARDEV_TTY
- case CHARDEV_PORT_KIND_SERIAL:
- {
- int flags, fd;
- flags = O_RDWR;
- fd = qmp_chardev_open_file_source(port->device, flags, errp);
- if (error_is_set(errp)) {
- return NULL;
- }
- socket_set_nonblock(fd);
- return qemu_chr_open_tty_fd(fd);
+ int fd;
+
+ fd = qmp_chardev_open_file_source(serial->device, O_RDWR, errp);
+ if (error_is_set(errp)) {
+ return NULL;
}
+ socket_set_nonblock(fd);
+ return qemu_chr_open_tty_fd(fd);
+#else
+ error_setg(errp, "character device backend type 'serial' not supported");
+ return NULL;
#endif
+}
+
+static CharDriverState *qmp_chardev_open_parallel(ChardevHostdev *parallel,
+ Error **errp)
+{
#ifdef HAVE_CHARDEV_PARPORT
- case CHARDEV_PORT_KIND_PARALLEL:
- {
- int flags, fd;
- flags = O_RDWR;
- fd = qmp_chardev_open_file_source(port->device, flags, errp);
- if (error_is_set(errp)) {
- return NULL;
- }
- return qemu_chr_open_pp_fd(fd);
- }
-#endif
- default:
- error_setg(errp, "unknown chardev port (%d)", port->type);
+ int fd;
+
+ fd = qmp_chardev_open_file_source(parallel->device, O_RDWR, errp);
+ if (error_is_set(errp)) {
return NULL;
}
+ return qemu_chr_open_pp_fd(fd);
+#else
+ error_setg(errp, "character device backend type 'parallel' not supported");
+ return NULL;
+#endif
}
#endif /* WIN32 */
@@ -3391,8 +3394,11 @@ ChardevReturn *qmp_chardev_add(const char *id, ChardevBackend *backend,
case CHARDEV_BACKEND_KIND_FILE:
chr = qmp_chardev_open_file(backend->file, errp);
break;
- case CHARDEV_BACKEND_KIND_PORT:
- chr = qmp_chardev_open_port(backend->port, errp);
+ case CHARDEV_BACKEND_KIND_SERIAL:
+ chr = qmp_chardev_open_serial(backend->serial, errp);
+ break;
+ case CHARDEV_BACKEND_KIND_PARALLEL:
+ chr = qmp_chardev_open_parallel(backend->parallel, errp);
break;
case CHARDEV_BACKEND_KIND_SOCKET:
chr = qmp_chardev_open_socket(backend->socket, errp);