From patchwork Wed Feb 13 14:54:16 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Markus Armbruster X-Patchwork-Id: 220162 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 82D702C0293 for ; Thu, 14 Feb 2013 01:54:44 +1100 (EST) Received: from localhost ([::1]:58353 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1U5djO-0007kO-ML for incoming@patchwork.ozlabs.org; Wed, 13 Feb 2013 09:54:42 -0500 Received: from eggs.gnu.org ([208.118.235.92]:48226) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1U5dj9-0007YA-Rv for qemu-devel@nongnu.org; Wed, 13 Feb 2013 09:54:31 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1U5dj2-0000fI-Db for qemu-devel@nongnu.org; Wed, 13 Feb 2013 09:54:27 -0500 Received: from oxygen.pond.sub.org ([2a01:4f8:121:10e4::3]:37269) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1U5dj2-0000eI-3C for qemu-devel@nongnu.org; Wed, 13 Feb 2013 09:54:20 -0500 Received: from blackfin.pond.sub.org (p5B32AE19.dip.t-dialin.net [91.50.174.25]) by oxygen.pond.sub.org (Postfix) with ESMTPA id 2707CA4613; Wed, 13 Feb 2013 15:54:16 +0100 (CET) Received: by blackfin.pond.sub.org (Postfix, from userid 1000) id 6868E200AD; Wed, 13 Feb 2013 15:54:16 +0100 (CET) From: Markus Armbruster To: qemu-devel@nongnu.org Date: Wed, 13 Feb 2013 15:54:16 +0100 Message-Id: <1360767256-610-3-git-send-email-armbru@redhat.com> X-Mailer: git-send-email 1.7.11.7 In-Reply-To: <1360767256-610-1-git-send-email-armbru@redhat.com> References: <1360767256-610-1-git-send-email-armbru@redhat.com> X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2a01:4f8:121:10e4::3 Cc: aliguori@us.ibm.com, kraxel@redhat.com, lcapitulino@redhat.com Subject: [Qemu-devel] [PATCH for-1.4 2/2] qapi: Flatten away ChardevPort X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org 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 --- qapi-schema.json | 11 +++----- qemu-char.c | 76 ++++++++++++++++++++++++++++++-------------------------- 2 files changed, 45 insertions(+), 42 deletions(-) diff --git a/qapi-schema.json b/qapi-schema.json index bd289ae..7275b5d 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 574d3d2..e4b0f53 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);