qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PULL v3 00/19] chardev: qapi conversion continued
@ 2013-03-12  8:56 Gerd Hoffmann
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 01/19] chardev: add support for qapi-based chardev initialization Gerd Hoffmann
                   ` (19 more replies)
  0 siblings, 20 replies; 24+ messages in thread
From: Gerd Hoffmann @ 2013-03-12  8:56 UTC (permalink / raw)
  To: qemu-devel; +Cc: Gerd Hoffmann

  Hi,

v3 of this series.  Rebased to latest master, picked up a fix from Igor,
fixed a tyops in the udp commit message.  No changes in the actual code
and in the qapi interface.

The plumbing has changed quite a bit though as the chardev backend table
has been replaced by a backend driver registration mechanism.

cheers,
  Gerd

The following changes since commit fe3cc14fd83e0c8f376d849ccd0fc3433388442d:

  Merge remote-tracking branch 'quintela/migration.next' into staging (2013-03-11 08:30:34 -0500)

are available in the git repository at:


  git://git.kraxel.org/qemu chardev.3

for you to fetch changes up to 4f341ecd65a181e204bd9e083945e8c46781957a:

  qemu-char.c: fix waiting for telnet connection message (2013-03-12 09:49:09 +0100)

----------------------------------------------------------------
Gerd Hoffmann (18):
      chardev: add support for qapi-based chardev initialization
      chardev: add mux chardev support to qapi
      chardev: switch null init to qapi
      chardev: add msmouse support to qapi
      chardev: add braille support to qapi
      chardev: switch file init to qapi
      chardev: add stdio support to qapi
      chardev: switch serial/tty init to qapi
      chardev: switch parallel init to qapi
      chardev: switch pty init to qapi
      chardev: add console support to qapi
      chardev: add pipe support to qapi
      chardev: add spice support to qapi
      chardev: add vc support to qapi
      [fixup] vc
      chardev: add memory (ringbuf) support to qapi
      chardev: add udp support to qapi
      Revert "hmp: Disable chardev-add and chardev-remove"

Igor Mitsyanko (1):
      qemu-char.c: fix waiting for telnet connection message

 backends/baum.c         |    4 +-
 backends/msmouse.c      |    4 +-
 hmp-commands.hx         |   63 ++++----
 include/char/char.h     |    8 +
 include/qemu/sockets.h  |    1 +
 include/ui/console.h    |    4 +-
 include/ui/qemu-spice.h |    7 +-
 qapi-schema.json        |  104 ++++++++++++-
 qemu-char.c             |  381 ++++++++++++++++++++++++++++++-----------------
 spice-qemu-char.c       |   62 +++++---
 ui/console.c            |   61 ++++++--
 ui/gtk.c                |    2 +-
 util/qemu-sockets.c     |   25 ++++
 13 files changed, 515 insertions(+), 211 deletions(-)

^ permalink raw reply	[flat|nested] 24+ messages in thread

* [Qemu-devel] [PATCH 01/19] chardev: add support for qapi-based chardev initialization
  2013-03-12  8:56 [Qemu-devel] [PULL v3 00/19] chardev: qapi conversion continued Gerd Hoffmann
@ 2013-03-12  8:56 ` Gerd Hoffmann
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 02/19] chardev: add mux chardev support to qapi Gerd Hoffmann
                   ` (18 subsequent siblings)
  19 siblings, 0 replies; 24+ messages in thread
From: Gerd Hoffmann @ 2013-03-12  8:56 UTC (permalink / raw)
  To: qemu-devel; +Cc: Anthony Liguori, Gerd Hoffmann

This patch add support for a new way to initialize chardev devices.
Instead of calling a initialization function with a QemuOpts we will
now create a (qapi) ChardevBackend, optionally call a function to
fill ChardevBackend from QemuOpts, then go create the chardev using
the new qapi code path which is also used by chardev-add.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 include/char/char.h |    2 ++
 qemu-char.c         |   43 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 45 insertions(+)

diff --git a/include/char/char.h b/include/char/char.h
index 2e24270..afe0024 100644
--- a/include/char/char.h
+++ b/include/char/char.h
@@ -245,6 +245,8 @@ CharDriverState *qemu_chr_find(const char *name);
 QemuOpts *qemu_chr_parse_compat(const char *label, const char *filename);
 
 void register_char_driver(const char *name, CharDriverState *(*open)(QemuOpts *));
+void register_char_driver_qapi(const char *name, int kind,
+        void (*parse)(QemuOpts *opts, ChardevBackend *backend, Error **errp));
 
 /* add an eventfd to the qemu devices that are polled */
 CharDriverState *qemu_chr_open_eventfd(int eventfd);
diff --git a/qemu-char.c b/qemu-char.c
index 04aa589..1d92ff1 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -3180,7 +3180,11 @@ static CharDriverState *qemu_chr_open_pp(QemuOpts *opts)
 
 typedef struct CharDriver {
     const char *name;
+    /* old, pre qapi */
     CharDriverState *(*open)(QemuOpts *opts);
+    /* new, qapi-based */
+    int kind;
+    void (*parse)(QemuOpts *opts, ChardevBackend *backend, Error **errp);
 } CharDriver;
 
 static GSList *backends;
@@ -3196,6 +3200,19 @@ void register_char_driver(const char *name, CharDriverState *(*open)(QemuOpts *)
     backends = g_slist_append(backends, s);
 }
 
+void register_char_driver_qapi(const char *name, int kind,
+        void (*parse)(QemuOpts *opts, ChardevBackend *backend, Error **errp))
+{
+    CharDriver *s;
+
+    s = g_malloc0(sizeof(*s));
+    s->name = g_strdup(name);
+    s->kind = kind;
+    s->parse = parse;
+
+    backends = g_slist_append(backends, s);
+}
+
 CharDriverState *qemu_chr_new_from_opts(QemuOpts *opts,
                                     void (*init)(struct CharDriverState *s),
                                     Error **errp)
@@ -3227,6 +3244,32 @@ CharDriverState *qemu_chr_new_from_opts(QemuOpts *opts,
         return NULL;
     }
 
+    if (!cd->open) {
+        /* using new, qapi init */
+        ChardevBackend *backend = g_new0(ChardevBackend, 1);
+        ChardevReturn *ret = NULL;
+        const char *id = qemu_opts_id(opts);
+
+        chr = NULL;
+        backend->kind = cd->kind;
+        if (cd->parse) {
+            cd->parse(opts, backend, errp);
+            if (error_is_set(errp)) {
+                goto qapi_out;
+            }
+        }
+        ret = qmp_chardev_add(qemu_opts_id(opts), backend, errp);
+        if (error_is_set(errp)) {
+            goto qapi_out;
+        }
+        chr = qemu_chr_find(id);
+
+    qapi_out:
+        qapi_free_ChardevBackend(backend);
+        qapi_free_ChardevReturn(ret);
+        return chr;
+    }
+
     chr = cd->open(opts);
     if (!chr) {
         error_setg(errp, "chardev: opening backend \"%s\" failed",
-- 
1.7.9.7

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [Qemu-devel] [PATCH 02/19] chardev: add mux chardev support to qapi
  2013-03-12  8:56 [Qemu-devel] [PULL v3 00/19] chardev: qapi conversion continued Gerd Hoffmann
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 01/19] chardev: add support for qapi-based chardev initialization Gerd Hoffmann
@ 2013-03-12  8:56 ` Gerd Hoffmann
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 03/19] chardev: switch null init " Gerd Hoffmann
                   ` (17 subsequent siblings)
  19 siblings, 0 replies; 24+ messages in thread
From: Gerd Hoffmann @ 2013-03-12  8:56 UTC (permalink / raw)
  To: qemu-devel; +Cc: Anthony Liguori, Gerd Hoffmann

This adds mux chardev support to the qapi and also makes the qapi-based
chardev creation path handle the "mux=on" option correctly.
---
 qapi-schema.json |   14 +++++++++++++-
 qemu-char.c      |   35 ++++++++++++++++++++++++++++++++---
 2 files changed, 45 insertions(+), 4 deletions(-)

diff --git a/qapi-schema.json b/qapi-schema.json
index 28b070f..d8cc85c 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -3185,6 +3185,17 @@
                                      '*telnet'  : 'bool' } }
 
 ##
+# @ChardevMux:
+#
+# Configuration info for mux chardevs.
+#
+# @chardev: name of the base chardev.
+#
+# Since: 1.5
+##
+{ 'type': 'ChardevMux', 'data': { 'chardev' : 'str' } }
+
+##
 # @ChardevBackend:
 #
 # Configuration info for the new chardev backend.
@@ -3198,7 +3209,8 @@
                                        'parallel': 'ChardevHostdev',
                                        'socket' : 'ChardevSocket',
                                        'pty'    : 'ChardevDummy',
-                                       'null'   : 'ChardevDummy' } }
+                                       'null'   : 'ChardevDummy',
+                                       'mux'    : 'ChardevMux' } }
 
 ##
 # @ChardevReturn:
diff --git a/qemu-char.c b/qemu-char.c
index 1d92ff1..38890ed 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -3249,6 +3249,11 @@ CharDriverState *qemu_chr_new_from_opts(QemuOpts *opts,
         ChardevBackend *backend = g_new0(ChardevBackend, 1);
         ChardevReturn *ret = NULL;
         const char *id = qemu_opts_id(opts);
+        const char *bid = NULL;
+
+        if (qemu_opt_get_bool(opts, "mux", 0)) {
+            bid = g_strdup_printf("%s-base", id);
+        }
 
         chr = NULL;
         backend->kind = cd->kind;
@@ -3258,10 +3263,24 @@ CharDriverState *qemu_chr_new_from_opts(QemuOpts *opts,
                 goto qapi_out;
             }
         }
-        ret = qmp_chardev_add(qemu_opts_id(opts), backend, errp);
+        ret = qmp_chardev_add(bid ? bid : id, backend, errp);
         if (error_is_set(errp)) {
             goto qapi_out;
         }
+
+        if (bid) {
+            qapi_free_ChardevBackend(backend);
+            qapi_free_ChardevReturn(ret);
+            backend = g_new0(ChardevBackend, 1);
+            backend->mux = g_new0(ChardevMux, 1);
+            backend->kind = CHARDEV_BACKEND_KIND_MUX;
+            backend->mux->chardev = g_strdup(bid);
+            ret = qmp_chardev_add(id, backend, errp);
+            if (error_is_set(errp)) {
+                goto qapi_out;
+            }
+        }
+
         chr = qemu_chr_find(id);
 
     qapi_out:
@@ -3629,7 +3648,7 @@ ChardevReturn *qmp_chardev_add(const char *id, ChardevBackend *backend,
                                Error **errp)
 {
     ChardevReturn *ret = g_new0(ChardevReturn, 1);
-    CharDriverState *chr = NULL;
+    CharDriverState *base, *chr = NULL;
 
     chr = qemu_chr_find(id);
     if (chr) {
@@ -3667,6 +3686,15 @@ ChardevReturn *qmp_chardev_add(const char *id, ChardevBackend *backend,
     case CHARDEV_BACKEND_KIND_NULL:
         chr = qemu_chr_open_null(NULL);
         break;
+    case CHARDEV_BACKEND_KIND_MUX:
+        base = qemu_chr_find(backend->mux->chardev);
+        if (base == NULL) {
+            error_setg(errp, "mux: base chardev %s not found",
+                       backend->mux->chardev);
+            break;
+        }
+        chr = qemu_chr_open_mux(base);
+        break;
     default:
         error_setg(errp, "unknown chardev backend (%d)", backend->kind);
         break;
@@ -3677,7 +3705,8 @@ ChardevReturn *qmp_chardev_add(const char *id, ChardevBackend *backend,
     }
     if (chr) {
         chr->label = g_strdup(id);
-        chr->avail_connections = 1;
+        chr->avail_connections =
+            (backend->kind == CHARDEV_BACKEND_KIND_MUX) ? MAX_MUX : 1;
         QTAILQ_INSERT_TAIL(&chardevs, chr, next);
         return ret;
     } else {
-- 
1.7.9.7

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [Qemu-devel] [PATCH 03/19] chardev: switch null init to qapi
  2013-03-12  8:56 [Qemu-devel] [PULL v3 00/19] chardev: qapi conversion continued Gerd Hoffmann
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 01/19] chardev: add support for qapi-based chardev initialization Gerd Hoffmann
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 02/19] chardev: add mux chardev support to qapi Gerd Hoffmann
@ 2013-03-12  8:56 ` Gerd Hoffmann
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 04/19] chardev: add msmouse support " Gerd Hoffmann
                   ` (16 subsequent siblings)
  19 siblings, 0 replies; 24+ messages in thread
From: Gerd Hoffmann @ 2013-03-12  8:56 UTC (permalink / raw)
  To: qemu-devel; +Cc: Anthony Liguori, Gerd Hoffmann

This patch switches over the 'null' chardev initialization
to the new qapi code path.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 qemu-char.c |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/qemu-char.c b/qemu-char.c
index 38890ed..2bf12cd 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -217,7 +217,7 @@ static int null_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
     return len;
 }
 
-static CharDriverState *qemu_chr_open_null(QemuOpts *opts)
+static CharDriverState *qemu_chr_open_null(void)
 {
     CharDriverState *chr;
 
@@ -3684,7 +3684,7 @@ ChardevReturn *qmp_chardev_add(const char *id, ChardevBackend *backend,
     }
 #endif
     case CHARDEV_BACKEND_KIND_NULL:
-        chr = qemu_chr_open_null(NULL);
+        chr = qemu_chr_open_null();
         break;
     case CHARDEV_BACKEND_KIND_MUX:
         base = qemu_chr_find(backend->mux->chardev);
@@ -3734,7 +3734,7 @@ void qmp_chardev_remove(const char *id, Error **errp)
 
 static void register_types(void)
 {
-    register_char_driver("null", qemu_chr_open_null);
+    register_char_driver_qapi("null", CHARDEV_BACKEND_KIND_NULL, NULL);
     register_char_driver("socket", qemu_chr_open_socket);
     register_char_driver("udp", qemu_chr_open_udp);
     register_char_driver("memory", qemu_chr_open_ringbuf);
-- 
1.7.9.7

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [Qemu-devel] [PATCH 04/19] chardev: add msmouse support to qapi
  2013-03-12  8:56 [Qemu-devel] [PULL v3 00/19] chardev: qapi conversion continued Gerd Hoffmann
                   ` (2 preceding siblings ...)
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 03/19] chardev: switch null init " Gerd Hoffmann
@ 2013-03-12  8:56 ` Gerd Hoffmann
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 05/19] chardev: add braille " Gerd Hoffmann
                   ` (15 subsequent siblings)
  19 siblings, 0 replies; 24+ messages in thread
From: Gerd Hoffmann @ 2013-03-12  8:56 UTC (permalink / raw)
  To: qemu-devel; +Cc: Anthony Liguori, Gerd Hoffmann

This patch adds 'msmouse' support to qapi and also switches over
the msmouse chardev initialization to the new qapi code path.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 backends/msmouse.c  |    4 ++--
 include/char/char.h |    3 +++
 qapi-schema.json    |    3 ++-
 qemu-char.c         |    3 +++
 4 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/backends/msmouse.c b/backends/msmouse.c
index 407ec87..61052fe 100644
--- a/backends/msmouse.c
+++ b/backends/msmouse.c
@@ -63,7 +63,7 @@ static void msmouse_chr_close (struct CharDriverState *chr)
     g_free (chr);
 }
 
-static CharDriverState *qemu_chr_open_msmouse(QemuOpts *opts)
+CharDriverState *qemu_chr_open_msmouse(void)
 {
     CharDriverState *chr;
 
@@ -78,7 +78,7 @@ static CharDriverState *qemu_chr_open_msmouse(QemuOpts *opts)
 
 static void register_types(void)
 {
-    register_char_driver("msmouse", qemu_chr_open_msmouse);
+    register_char_driver_qapi("msmouse", CHARDEV_BACKEND_KIND_MSMOUSE, NULL);
 }
 
 type_init(register_types);
diff --git a/include/char/char.h b/include/char/char.h
index afe0024..80e8e30 100644
--- a/include/char/char.h
+++ b/include/char/char.h
@@ -261,4 +261,7 @@ size_t qemu_chr_mem_osize(const CharDriverState *chr);
 
 CharDriverState *qemu_char_get_next_serial(void);
 
+/* msmouse */
+CharDriverState *qemu_chr_open_msmouse(void);
+
 #endif
diff --git a/qapi-schema.json b/qapi-schema.json
index d8cc85c..b14c5c7 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -3210,7 +3210,8 @@
                                        'socket' : 'ChardevSocket',
                                        'pty'    : 'ChardevDummy',
                                        'null'   : 'ChardevDummy',
-                                       'mux'    : 'ChardevMux' } }
+                                       'mux'    : 'ChardevMux',
+                                       'msmouse': 'ChardevDummy' } }
 
 ##
 # @ChardevReturn:
diff --git a/qemu-char.c b/qemu-char.c
index 2bf12cd..c5244d7 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -3695,6 +3695,9 @@ ChardevReturn *qmp_chardev_add(const char *id, ChardevBackend *backend,
         }
         chr = qemu_chr_open_mux(base);
         break;
+    case CHARDEV_BACKEND_KIND_MSMOUSE:
+        chr = qemu_chr_open_msmouse();
+        break;
     default:
         error_setg(errp, "unknown chardev backend (%d)", backend->kind);
         break;
-- 
1.7.9.7

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [Qemu-devel] [PATCH 05/19] chardev: add braille support to qapi
  2013-03-12  8:56 [Qemu-devel] [PULL v3 00/19] chardev: qapi conversion continued Gerd Hoffmann
                   ` (3 preceding siblings ...)
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 04/19] chardev: add msmouse support " Gerd Hoffmann
@ 2013-03-12  8:56 ` Gerd Hoffmann
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 06/19] chardev: switch file init " Gerd Hoffmann
                   ` (14 subsequent siblings)
  19 siblings, 0 replies; 24+ messages in thread
From: Gerd Hoffmann @ 2013-03-12  8:56 UTC (permalink / raw)
  To: qemu-devel; +Cc: Anthony Liguori, Gerd Hoffmann

This patch adds 'braille' support to qapi and also switches over
the braille chardev initialization to the new qapi code path.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 backends/baum.c     |    4 ++--
 include/char/char.h |    3 +++
 qapi-schema.json    |    3 ++-
 qemu-char.c         |    5 +++++
 4 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/backends/baum.c b/backends/baum.c
index 9063aea..d7d658c 100644
--- a/backends/baum.c
+++ b/backends/baum.c
@@ -561,7 +561,7 @@ static void baum_close(struct CharDriverState *chr)
     g_free(baum);
 }
 
-static CharDriverState *chr_baum_init(QemuOpts *opts)
+CharDriverState *chr_baum_init(void)
 {
     BaumDriverState *baum;
     CharDriverState *chr;
@@ -627,7 +627,7 @@ fail_handle:
 
 static void register_types(void)
 {
-    register_char_driver("braille", chr_baum_init);
+    register_char_driver_qapi("braille", CHARDEV_BACKEND_KIND_BRAILLE, NULL);
 }
 
 type_init(register_types);
diff --git a/include/char/char.h b/include/char/char.h
index 80e8e30..d6a0351 100644
--- a/include/char/char.h
+++ b/include/char/char.h
@@ -264,4 +264,7 @@ CharDriverState *qemu_char_get_next_serial(void);
 /* msmouse */
 CharDriverState *qemu_chr_open_msmouse(void);
 
+/* baum.c */
+CharDriverState *chr_baum_init(void);
+
 #endif
diff --git a/qapi-schema.json b/qapi-schema.json
index b14c5c7..5dcfbfe 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -3211,7 +3211,8 @@
                                        'pty'    : 'ChardevDummy',
                                        'null'   : 'ChardevDummy',
                                        'mux'    : 'ChardevMux',
-                                       'msmouse': 'ChardevDummy' } }
+                                       'msmouse': 'ChardevDummy',
+                                       'braille': 'ChardevDummy' } }
 
 ##
 # @ChardevReturn:
diff --git a/qemu-char.c b/qemu-char.c
index c5244d7..1991c82 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -3698,6 +3698,11 @@ ChardevReturn *qmp_chardev_add(const char *id, ChardevBackend *backend,
     case CHARDEV_BACKEND_KIND_MSMOUSE:
         chr = qemu_chr_open_msmouse();
         break;
+#ifdef CONFIG_BRLAPI
+    case CHARDEV_BACKEND_KIND_BRAILLE:
+        chr = chr_baum_init();
+        break;
+#endif
     default:
         error_setg(errp, "unknown chardev backend (%d)", backend->kind);
         break;
-- 
1.7.9.7

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [Qemu-devel] [PATCH 06/19] chardev: switch file init to qapi
  2013-03-12  8:56 [Qemu-devel] [PULL v3 00/19] chardev: qapi conversion continued Gerd Hoffmann
                   ` (4 preceding siblings ...)
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 05/19] chardev: add braille " Gerd Hoffmann
@ 2013-03-12  8:56 ` Gerd Hoffmann
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 07/19] chardev: add stdio support " Gerd Hoffmann
                   ` (13 subsequent siblings)
  19 siblings, 0 replies; 24+ messages in thread
From: Gerd Hoffmann @ 2013-03-12  8:56 UTC (permalink / raw)
  To: qemu-devel; +Cc: Anthony Liguori, Gerd Hoffmann

This patch switches over the 'file' chardev initialization
to the new qapi code path.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 qemu-char.c |   43 +++++++++++++++----------------------------
 1 file changed, 15 insertions(+), 28 deletions(-)

diff --git a/qemu-char.c b/qemu-char.c
index 1991c82..66ae8aa 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -817,18 +817,6 @@ static CharDriverState *qemu_chr_open_fd(int fd_in, int fd_out)
     return chr;
 }
 
-static CharDriverState *qemu_chr_open_file_out(QemuOpts *opts)
-{
-    int fd_out;
-
-    TFR(fd_out = qemu_open(qemu_opt_get(opts, "path"),
-                      O_WRONLY | O_TRUNC | O_CREAT | O_BINARY, 0666));
-    if (fd_out < 0) {
-        return NULL;
-    }
-    return qemu_chr_open_fd(-1, fd_out);
-}
-
 static CharDriverState *qemu_chr_open_pipe(QemuOpts *opts)
 {
     int fd_in, fd_out;
@@ -1965,20 +1953,6 @@ static CharDriverState *qemu_chr_open_win_con(QemuOpts *opts)
     return qemu_chr_open_win_file(GetStdHandle(STD_OUTPUT_HANDLE));
 }
 
-static CharDriverState *qemu_chr_open_win_file_out(QemuOpts *opts)
-{
-    const char *file_out = qemu_opt_get(opts, "path");
-    HANDLE fd_out;
-
-    fd_out = CreateFile(file_out, GENERIC_WRITE, FILE_SHARE_READ, NULL,
-                        OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
-    if (fd_out == INVALID_HANDLE_VALUE) {
-        return NULL;
-    }
-
-    return qemu_chr_open_win_file(fd_out);
-}
-
 static int win_stdio_write(CharDriverState *chr, const uint8_t *buf, int len)
 {
     HANDLE  hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
@@ -3178,6 +3152,19 @@ static CharDriverState *qemu_chr_open_pp(QemuOpts *opts)
 
 #endif
 
+static void qemu_chr_parse_file_out(QemuOpts *opts, ChardevBackend *backend,
+                                    Error **errp)
+{
+    const char *path = qemu_opt_get(opts, "path");
+
+    if (path == NULL) {
+        error_setg(errp, "chardev: file: no filename given");
+        return;
+    }
+    backend->file = g_new0(ChardevFile, 1);
+    backend->file->out = g_strdup(path);
+}
+
 typedef struct CharDriver {
     const char *name;
     /* old, pre qapi */
@@ -3746,14 +3733,14 @@ static void register_types(void)
     register_char_driver("socket", qemu_chr_open_socket);
     register_char_driver("udp", qemu_chr_open_udp);
     register_char_driver("memory", qemu_chr_open_ringbuf);
+    register_char_driver_qapi("file", CHARDEV_BACKEND_KIND_FILE,
+                              qemu_chr_parse_file_out);
 #ifdef _WIN32
-    register_char_driver("file", qemu_chr_open_win_file_out);
     register_char_driver("pipe", qemu_chr_open_win_pipe);
     register_char_driver("console", qemu_chr_open_win_con);
     register_char_driver("serial", qemu_chr_open_win);
     register_char_driver("stdio", qemu_chr_open_win_stdio);
 #else
-    register_char_driver("file", qemu_chr_open_file_out);
     register_char_driver("pipe", qemu_chr_open_pipe);
     register_char_driver("stdio", qemu_chr_open_stdio);
 #endif
-- 
1.7.9.7

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [Qemu-devel] [PATCH 07/19] chardev: add stdio support to qapi
  2013-03-12  8:56 [Qemu-devel] [PULL v3 00/19] chardev: qapi conversion continued Gerd Hoffmann
                   ` (5 preceding siblings ...)
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 06/19] chardev: switch file init " Gerd Hoffmann
@ 2013-03-12  8:56 ` Gerd Hoffmann
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 08/19] chardev: switch serial/tty init " Gerd Hoffmann
                   ` (12 subsequent siblings)
  19 siblings, 0 replies; 24+ messages in thread
From: Gerd Hoffmann @ 2013-03-12  8:56 UTC (permalink / raw)
  To: qemu-devel; +Cc: Anthony Liguori, Gerd Hoffmann

This patch adds 'stdio' support to qapi and also switches over the
stdio chardev initialization to the new qapi code path.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 qapi-schema.json |   16 +++++++++++++++-
 qemu-char.c      |   26 ++++++++++++++++++++------
 2 files changed, 35 insertions(+), 7 deletions(-)

diff --git a/qapi-schema.json b/qapi-schema.json
index 5dcfbfe..77d4153 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -3196,6 +3196,19 @@
 { 'type': 'ChardevMux', 'data': { 'chardev' : 'str' } }
 
 ##
+# @ChardevStdio:
+#
+# Configuration info for stdio chardevs.
+#
+# @signal: #optional Allow signals (such as SIGINT triggered by ^C)
+#          be delivered to qemu.  Default: true in -nographic mode,
+#          false otherwise.
+#
+# Since: 1.5
+##
+{ 'type': 'ChardevStdio', 'data': { '*signal' : 'bool' } }
+
+##
 # @ChardevBackend:
 #
 # Configuration info for the new chardev backend.
@@ -3212,7 +3225,8 @@
                                        'null'   : 'ChardevDummy',
                                        'mux'    : 'ChardevMux',
                                        'msmouse': 'ChardevDummy',
-                                       'braille': 'ChardevDummy' } }
+                                       'braille': 'ChardevDummy',
+                                       'stdio'  : 'ChardevStdio' } }
 
 ##
 # @ChardevReturn:
diff --git a/qemu-char.c b/qemu-char.c
index 66ae8aa..10f5f57 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -884,7 +884,7 @@ static void qemu_chr_close_stdio(struct CharDriverState *chr)
     fd_chr_close(chr);
 }
 
-static CharDriverState *qemu_chr_open_stdio(QemuOpts *opts)
+static CharDriverState *qemu_chr_open_stdio(ChardevStdio *opts)
 {
     CharDriverState *chr;
 
@@ -900,8 +900,10 @@ static CharDriverState *qemu_chr_open_stdio(QemuOpts *opts)
     chr = qemu_chr_open_fd(0, 1);
     chr->chr_close = qemu_chr_close_stdio;
     chr->chr_set_echo = qemu_chr_set_echo_stdio;
-    stdio_allow_signal = qemu_opt_get_bool(opts, "signal",
-                                           display_type != DT_NOGRAPHIC);
+    stdio_allow_signal = display_type != DT_NOGRAPHIC;
+    if (opts->has_signal) {
+        stdio_allow_signal = opts->signal;
+    }
     qemu_chr_fe_set_echo(chr, false);
 
     return chr;
@@ -2090,7 +2092,7 @@ static void win_stdio_close(CharDriverState *chr)
     g_free(chr);
 }
 
-static CharDriverState *qemu_chr_open_win_stdio(QemuOpts *opts)
+static CharDriverState *qemu_chr_open_stdio(ChardevStdio *opts)
 {
     CharDriverState   *chr;
     WinStdioCharState *stdio;
@@ -3165,6 +3167,15 @@ static void qemu_chr_parse_file_out(QemuOpts *opts, ChardevBackend *backend,
     backend->file->out = g_strdup(path);
 }
 
+static void qemu_chr_parse_stdio(QemuOpts *opts, ChardevBackend *backend,
+                                 Error **errp)
+{
+    backend->stdio = g_new0(ChardevStdio, 1);
+    backend->stdio->has_signal = true;
+    backend->stdio->signal =
+        qemu_opt_get_bool(opts, "signal", display_type != DT_NOGRAPHIC);
+}
+
 typedef struct CharDriver {
     const char *name;
     /* old, pre qapi */
@@ -3690,6 +3701,9 @@ ChardevReturn *qmp_chardev_add(const char *id, ChardevBackend *backend,
         chr = chr_baum_init();
         break;
 #endif
+    case CHARDEV_BACKEND_KIND_STDIO:
+        chr = qemu_chr_open_stdio(backend->stdio);
+        break;
     default:
         error_setg(errp, "unknown chardev backend (%d)", backend->kind);
         break;
@@ -3735,14 +3749,14 @@ static void register_types(void)
     register_char_driver("memory", qemu_chr_open_ringbuf);
     register_char_driver_qapi("file", CHARDEV_BACKEND_KIND_FILE,
                               qemu_chr_parse_file_out);
+    register_char_driver_qapi("stdio", CHARDEV_BACKEND_KIND_STDIO,
+                              qemu_chr_parse_stdio);
 #ifdef _WIN32
     register_char_driver("pipe", qemu_chr_open_win_pipe);
     register_char_driver("console", qemu_chr_open_win_con);
     register_char_driver("serial", qemu_chr_open_win);
-    register_char_driver("stdio", qemu_chr_open_win_stdio);
 #else
     register_char_driver("pipe", qemu_chr_open_pipe);
-    register_char_driver("stdio", qemu_chr_open_stdio);
 #endif
 #ifdef HAVE_CHARDEV_TTY
     register_char_driver("tty", qemu_chr_open_tty);
-- 
1.7.9.7

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [Qemu-devel] [PATCH 08/19] chardev: switch serial/tty init to qapi
  2013-03-12  8:56 [Qemu-devel] [PULL v3 00/19] chardev: qapi conversion continued Gerd Hoffmann
                   ` (6 preceding siblings ...)
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 07/19] chardev: add stdio support " Gerd Hoffmann
@ 2013-03-12  8:56 ` Gerd Hoffmann
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 09/19] chardev: switch parallel " Gerd Hoffmann
                   ` (11 subsequent siblings)
  19 siblings, 0 replies; 24+ messages in thread
From: Gerd Hoffmann @ 2013-03-12  8:56 UTC (permalink / raw)
  To: qemu-devel; +Cc: Anthony Liguori, Gerd Hoffmann

This patch switches over the serial chardev initialization
to the new qapi code path.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 qemu-char.c |   37 +++++++++++++++++--------------------
 1 file changed, 17 insertions(+), 20 deletions(-)

diff --git a/qemu-char.c b/qemu-char.c
index 10f5f57..8bedabb 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -1395,18 +1395,6 @@ static CharDriverState *qemu_chr_open_tty_fd(int fd)
     chr->chr_close = qemu_chr_close_tty;
     return chr;
 }
-
-static CharDriverState *qemu_chr_open_tty(QemuOpts *opts)
-{
-    const char *filename = qemu_opt_get(opts, "path");
-    int fd;
-
-    TFR(fd = qemu_open(filename, O_RDWR | O_NONBLOCK));
-    if (fd < 0) {
-        return NULL;
-    }
-    return qemu_chr_open_tty_fd(fd);
-}
 #endif /* __linux__ || __sun__ */
 
 #if defined(__linux__)
@@ -1831,11 +1819,6 @@ static CharDriverState *qemu_chr_open_win_path(const char *filename)
     return chr;
 }
 
-static CharDriverState *qemu_chr_open_win(QemuOpts *opts)
-{
-    return qemu_chr_open_win_path(qemu_opt_get(opts, "path"));
-}
-
 static int win_chr_pipe_poll(void *opaque)
 {
     CharDriverState *chr = opaque;
@@ -3176,6 +3159,19 @@ static void qemu_chr_parse_stdio(QemuOpts *opts, ChardevBackend *backend,
         qemu_opt_get_bool(opts, "signal", display_type != DT_NOGRAPHIC);
 }
 
+static void qemu_chr_parse_serial(QemuOpts *opts, ChardevBackend *backend,
+                                  Error **errp)
+{
+    const char *device = qemu_opt_get(opts, "path");
+
+    if (device == NULL) {
+        error_setg(errp, "chardev: serial/tty: no device path given");
+        return;
+    }
+    backend->serial = g_new0(ChardevHostdev, 1);
+    backend->serial->device = g_strdup(device);
+}
+
 typedef struct CharDriver {
     const char *name;
     /* old, pre qapi */
@@ -3751,16 +3747,17 @@ static void register_types(void)
                               qemu_chr_parse_file_out);
     register_char_driver_qapi("stdio", CHARDEV_BACKEND_KIND_STDIO,
                               qemu_chr_parse_stdio);
+    register_char_driver_qapi("serial", CHARDEV_BACKEND_KIND_SERIAL,
+                              qemu_chr_parse_serial);
+    register_char_driver_qapi("tty", CHARDEV_BACKEND_KIND_SERIAL,
+                              qemu_chr_parse_serial);
 #ifdef _WIN32
     register_char_driver("pipe", qemu_chr_open_win_pipe);
     register_char_driver("console", qemu_chr_open_win_con);
-    register_char_driver("serial", qemu_chr_open_win);
 #else
     register_char_driver("pipe", qemu_chr_open_pipe);
 #endif
 #ifdef HAVE_CHARDEV_TTY
-    register_char_driver("tty", qemu_chr_open_tty);
-    register_char_driver("serial", qemu_chr_open_tty);
     register_char_driver("pty", qemu_chr_open_pty);
 #endif
 #ifdef HAVE_CHARDEV_PARPORT
-- 
1.7.9.7

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [Qemu-devel] [PATCH 09/19] chardev: switch parallel init to qapi
  2013-03-12  8:56 [Qemu-devel] [PULL v3 00/19] chardev: qapi conversion continued Gerd Hoffmann
                   ` (7 preceding siblings ...)
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 08/19] chardev: switch serial/tty init " Gerd Hoffmann
@ 2013-03-12  8:56 ` Gerd Hoffmann
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 10/19] chardev: switch pty " Gerd Hoffmann
                   ` (10 subsequent siblings)
  19 siblings, 0 replies; 24+ messages in thread
From: Gerd Hoffmann @ 2013-03-12  8:56 UTC (permalink / raw)
  To: qemu-devel; +Cc: Anthony Liguori, Gerd Hoffmann

This patch switches over the parallel chardev initialization
to the new qapi code path.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 qemu-char.c |   37 +++++++++++++++++--------------------
 1 file changed, 17 insertions(+), 20 deletions(-)

diff --git a/qemu-char.c b/qemu-char.c
index 8bedabb..2bc1021 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -3121,22 +3121,6 @@ fail:
     return NULL;
 }
 
-#ifdef HAVE_CHARDEV_PARPORT
-
-static CharDriverState *qemu_chr_open_pp(QemuOpts *opts)
-{
-    const char *filename = qemu_opt_get(opts, "path");
-    int fd;
-
-    fd = qemu_open(filename, O_RDWR);
-    if (fd < 0) {
-        return NULL;
-    }
-    return qemu_chr_open_pp_fd(fd);
-}
-
-#endif
-
 static void qemu_chr_parse_file_out(QemuOpts *opts, ChardevBackend *backend,
                                     Error **errp)
 {
@@ -3172,6 +3156,19 @@ static void qemu_chr_parse_serial(QemuOpts *opts, ChardevBackend *backend,
     backend->serial->device = g_strdup(device);
 }
 
+static void qemu_chr_parse_parallel(QemuOpts *opts, ChardevBackend *backend,
+                                    Error **errp)
+{
+    const char *device = qemu_opt_get(opts, "path");
+
+    if (device == NULL) {
+        error_setg(errp, "chardev: parallel: no device path given");
+        return;
+    }
+    backend->parallel = g_new0(ChardevHostdev, 1);
+    backend->parallel->device = g_strdup(device);
+}
+
 typedef struct CharDriver {
     const char *name;
     /* old, pre qapi */
@@ -3751,6 +3748,10 @@ static void register_types(void)
                               qemu_chr_parse_serial);
     register_char_driver_qapi("tty", CHARDEV_BACKEND_KIND_SERIAL,
                               qemu_chr_parse_serial);
+    register_char_driver_qapi("parallel", CHARDEV_BACKEND_KIND_PARALLEL,
+                              qemu_chr_parse_parallel);
+    register_char_driver_qapi("parport", CHARDEV_BACKEND_KIND_PARALLEL,
+                              qemu_chr_parse_parallel);
 #ifdef _WIN32
     register_char_driver("pipe", qemu_chr_open_win_pipe);
     register_char_driver("console", qemu_chr_open_win_con);
@@ -3760,10 +3761,6 @@ static void register_types(void)
 #ifdef HAVE_CHARDEV_TTY
     register_char_driver("pty", qemu_chr_open_pty);
 #endif
-#ifdef HAVE_CHARDEV_PARPORT
-    register_char_driver("parallel", qemu_chr_open_pp);
-    register_char_driver("parport", qemu_chr_open_pp);
-#endif
 }
 
 type_init(register_types);
-- 
1.7.9.7

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [Qemu-devel] [PATCH 10/19] chardev: switch pty init to qapi
  2013-03-12  8:56 [Qemu-devel] [PULL v3 00/19] chardev: qapi conversion continued Gerd Hoffmann
                   ` (8 preceding siblings ...)
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 09/19] chardev: switch parallel " Gerd Hoffmann
@ 2013-03-12  8:56 ` Gerd Hoffmann
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 11/19] chardev: add console support " Gerd Hoffmann
                   ` (9 subsequent siblings)
  19 siblings, 0 replies; 24+ messages in thread
From: Gerd Hoffmann @ 2013-03-12  8:56 UTC (permalink / raw)
  To: qemu-devel; +Cc: Anthony Liguori, Gerd Hoffmann

This patch switches over the pty chardev initialization
to the new qapi code path.

Bonus: Taking QemuOpts out of the loop allows some nice
cleanups along the way.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 qemu-char.c |   35 ++++++++++-------------------------
 1 file changed, 10 insertions(+), 25 deletions(-)

diff --git a/qemu-char.c b/qemu-char.c
index 2bc1021..6be38b0 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -1133,13 +1133,13 @@ static void pty_chr_close(struct CharDriverState *chr)
     qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
 }
 
-static CharDriverState *qemu_chr_open_pty(QemuOpts *opts)
+static CharDriverState *qemu_chr_open_pty(const char *id,
+                                          ChardevReturn *ret)
 {
     CharDriverState *chr;
     PtyCharDriver *s;
     struct termios tty;
-    const char *label;
-    int master_fd, slave_fd, len;
+    int master_fd, slave_fd;
 #if defined(__OpenBSD__) || defined(__DragonFly__)
     char pty_name[PATH_MAX];
 #define q_ptsname(x) pty_name
@@ -1160,17 +1160,12 @@ static CharDriverState *qemu_chr_open_pty(QemuOpts *opts)
 
     chr = g_malloc0(sizeof(CharDriverState));
 
-    len = strlen(q_ptsname(master_fd)) + 5;
-    chr->filename = g_malloc(len);
-    snprintf(chr->filename, len, "pty:%s", q_ptsname(master_fd));
-    qemu_opt_set(opts, "path", q_ptsname(master_fd));
+    chr->filename = g_strdup_printf("pty:%s", q_ptsname(master_fd));
+    ret->pty = g_strdup(q_ptsname(master_fd));
+    ret->has_pty = true;
 
-    label = qemu_opts_id(opts);
-    fprintf(stderr, "char device redirected to %s%s%s%s\n",
-            q_ptsname(master_fd),
-            label ? " (label " : "",
-            label ? label      : "",
-            label ? ")"        : "");
+    fprintf(stderr, "char device redirected to %s (label %s)\n",
+            q_ptsname(master_fd), id);
 
     s = g_malloc0(sizeof(PtyCharDriver));
     chr->opaque = s;
@@ -3663,16 +3658,8 @@ ChardevReturn *qmp_chardev_add(const char *id, ChardevBackend *backend,
         break;
 #ifdef HAVE_CHARDEV_TTY
     case CHARDEV_BACKEND_KIND_PTY:
-    {
-        /* qemu_chr_open_pty sets "path" in opts */
-        QemuOpts *opts;
-        opts = qemu_opts_create_nofail(qemu_find_opts("chardev"));
-        chr = qemu_chr_open_pty(opts);
-        ret->pty = g_strdup(qemu_opt_get(opts, "path"));
-        ret->has_pty = true;
-        qemu_opts_del(opts);
+        chr = qemu_chr_open_pty(id, ret);
         break;
-    }
 #endif
     case CHARDEV_BACKEND_KIND_NULL:
         chr = qemu_chr_open_null();
@@ -3752,15 +3739,13 @@ static void register_types(void)
                               qemu_chr_parse_parallel);
     register_char_driver_qapi("parport", CHARDEV_BACKEND_KIND_PARALLEL,
                               qemu_chr_parse_parallel);
+    register_char_driver_qapi("pty", CHARDEV_BACKEND_KIND_PTY, NULL);
 #ifdef _WIN32
     register_char_driver("pipe", qemu_chr_open_win_pipe);
     register_char_driver("console", qemu_chr_open_win_con);
 #else
     register_char_driver("pipe", qemu_chr_open_pipe);
 #endif
-#ifdef HAVE_CHARDEV_TTY
-    register_char_driver("pty", qemu_chr_open_pty);
-#endif
 }
 
 type_init(register_types);
-- 
1.7.9.7

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [Qemu-devel] [PATCH 11/19] chardev: add console support to qapi
  2013-03-12  8:56 [Qemu-devel] [PULL v3 00/19] chardev: qapi conversion continued Gerd Hoffmann
                   ` (9 preceding siblings ...)
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 10/19] chardev: switch pty " Gerd Hoffmann
@ 2013-03-12  8:56 ` Gerd Hoffmann
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 12/19] chardev: add pipe " Gerd Hoffmann
                   ` (8 subsequent siblings)
  19 siblings, 0 replies; 24+ messages in thread
From: Gerd Hoffmann @ 2013-03-12  8:56 UTC (permalink / raw)
  To: qemu-devel; +Cc: Anthony Liguori, Gerd Hoffmann

This patch adds 'console' support to qapi and also switches over the
console chardev initialization to the new qapi code path.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 qapi-schema.json |    3 ++-
 qemu-char.c      |    9 +++++++--
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/qapi-schema.json b/qapi-schema.json
index 77d4153..94a3f02 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -3226,7 +3226,8 @@
                                        'mux'    : 'ChardevMux',
                                        'msmouse': 'ChardevDummy',
                                        'braille': 'ChardevDummy',
-                                       'stdio'  : 'ChardevStdio' } }
+                                       'stdio'  : 'ChardevStdio',
+                                       'console': 'ChardevDummy' } }
 
 ##
 # @ChardevReturn:
diff --git a/qemu-char.c b/qemu-char.c
index 6be38b0..4f0fdce 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -1928,7 +1928,7 @@ static CharDriverState *qemu_chr_open_win_file(HANDLE fd_out)
     return chr;
 }
 
-static CharDriverState *qemu_chr_open_win_con(QemuOpts *opts)
+static CharDriverState *qemu_chr_open_win_con(void)
 {
     return qemu_chr_open_win_file(GetStdHandle(STD_OUTPUT_HANDLE));
 }
@@ -3684,6 +3684,11 @@ ChardevReturn *qmp_chardev_add(const char *id, ChardevBackend *backend,
     case CHARDEV_BACKEND_KIND_STDIO:
         chr = qemu_chr_open_stdio(backend->stdio);
         break;
+#ifdef _WIN32
+    case CHARDEV_BACKEND_KIND_CONSOLE:
+        chr = qemu_chr_open_win_con();
+        break;
+#endif
     default:
         error_setg(errp, "unknown chardev backend (%d)", backend->kind);
         break;
@@ -3740,9 +3745,9 @@ static void register_types(void)
     register_char_driver_qapi("parport", CHARDEV_BACKEND_KIND_PARALLEL,
                               qemu_chr_parse_parallel);
     register_char_driver_qapi("pty", CHARDEV_BACKEND_KIND_PTY, NULL);
+    register_char_driver_qapi("console", CHARDEV_BACKEND_KIND_CONSOLE, NULL);
 #ifdef _WIN32
     register_char_driver("pipe", qemu_chr_open_win_pipe);
-    register_char_driver("console", qemu_chr_open_win_con);
 #else
     register_char_driver("pipe", qemu_chr_open_pipe);
 #endif
-- 
1.7.9.7

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [Qemu-devel] [PATCH 12/19] chardev: add pipe support to qapi
  2013-03-12  8:56 [Qemu-devel] [PULL v3 00/19] chardev: qapi conversion continued Gerd Hoffmann
                   ` (10 preceding siblings ...)
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 11/19] chardev: add console support " Gerd Hoffmann
@ 2013-03-12  8:56 ` Gerd Hoffmann
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 13/19] chardev: add spice " Gerd Hoffmann
                   ` (7 subsequent siblings)
  19 siblings, 0 replies; 24+ messages in thread
From: Gerd Hoffmann @ 2013-03-12  8:56 UTC (permalink / raw)
  To: qemu-devel; +Cc: Anthony Liguori, Gerd Hoffmann

This patch adds 'pipe' support to qapi and also switches over the
pipe chardev initialization to the new qapi code path.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 qapi-schema.json |    3 ++-
 qemu-char.c      |   31 ++++++++++++++++++++++---------
 2 files changed, 24 insertions(+), 10 deletions(-)

diff --git a/qapi-schema.json b/qapi-schema.json
index 94a3f02..c9e9bd5 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -3153,7 +3153,7 @@
 ##
 # @ChardevHostdev:
 #
-# Configuration info for device chardevs.
+# Configuration info for device and pipe chardevs.
 #
 # @device: The name of the special file for the device,
 #          i.e. /dev/ttyS0 on Unix or COM1: on Windows
@@ -3220,6 +3220,7 @@
 { 'union': 'ChardevBackend', 'data': { 'file'   : 'ChardevFile',
                                        'serial' : 'ChardevHostdev',
                                        'parallel': 'ChardevHostdev',
+                                       'pipe'   : 'ChardevHostdev',
                                        'socket' : 'ChardevSocket',
                                        'pty'    : 'ChardevDummy',
                                        'null'   : 'ChardevDummy',
diff --git a/qemu-char.c b/qemu-char.c
index 4f0fdce..35e9d3d 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -817,11 +817,11 @@ static CharDriverState *qemu_chr_open_fd(int fd_in, int fd_out)
     return chr;
 }
 
-static CharDriverState *qemu_chr_open_pipe(QemuOpts *opts)
+static CharDriverState *qemu_chr_open_pipe(ChardevHostdev *opts)
 {
     int fd_in, fd_out;
     char filename_in[256], filename_out[256];
-    const char *filename = qemu_opt_get(opts, "path");
+    const char *filename = opts->device;
 
     if (filename == NULL) {
         fprintf(stderr, "chardev: pipe: no filename given\n");
@@ -1893,9 +1893,9 @@ static int win_chr_pipe_init(CharDriverState *chr, const char *filename)
 }
 
 
-static CharDriverState *qemu_chr_open_win_pipe(QemuOpts *opts)
+static CharDriverState *qemu_chr_open_pipe(ChardevHostdev *opts)
 {
-    const char *filename = qemu_opt_get(opts, "path");
+    const char *filename = opts->device;
     CharDriverState *chr;
     WinCharState *s;
 
@@ -3164,6 +3164,19 @@ static void qemu_chr_parse_parallel(QemuOpts *opts, ChardevBackend *backend,
     backend->parallel->device = g_strdup(device);
 }
 
+static void qemu_chr_parse_pipe(QemuOpts *opts, ChardevBackend *backend,
+                                Error **errp)
+{
+    const char *device = qemu_opt_get(opts, "path");
+
+    if (device == NULL) {
+        error_setg(errp, "chardev: pipe: no device path given");
+        return;
+    }
+    backend->pipe = g_new0(ChardevHostdev, 1);
+    backend->pipe->device = g_strdup(device);
+}
+
 typedef struct CharDriver {
     const char *name;
     /* old, pre qapi */
@@ -3653,6 +3666,9 @@ ChardevReturn *qmp_chardev_add(const char *id, ChardevBackend *backend,
     case CHARDEV_BACKEND_KIND_PARALLEL:
         chr = qmp_chardev_open_parallel(backend->parallel, errp);
         break;
+    case CHARDEV_BACKEND_KIND_PIPE:
+        chr = qemu_chr_open_pipe(backend->pipe);
+        break;
     case CHARDEV_BACKEND_KIND_SOCKET:
         chr = qmp_chardev_open_socket(backend->socket, errp);
         break;
@@ -3746,11 +3762,8 @@ static void register_types(void)
                               qemu_chr_parse_parallel);
     register_char_driver_qapi("pty", CHARDEV_BACKEND_KIND_PTY, NULL);
     register_char_driver_qapi("console", CHARDEV_BACKEND_KIND_CONSOLE, NULL);
-#ifdef _WIN32
-    register_char_driver("pipe", qemu_chr_open_win_pipe);
-#else
-    register_char_driver("pipe", qemu_chr_open_pipe);
-#endif
+    register_char_driver_qapi("pipe", CHARDEV_BACKEND_KIND_PIPE,
+                              qemu_chr_parse_pipe);
 }
 
 type_init(register_types);
-- 
1.7.9.7

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [Qemu-devel] [PATCH 13/19] chardev: add spice support to qapi
  2013-03-12  8:56 [Qemu-devel] [PULL v3 00/19] chardev: qapi conversion continued Gerd Hoffmann
                   ` (11 preceding siblings ...)
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 12/19] chardev: add pipe " Gerd Hoffmann
@ 2013-03-12  8:56 ` Gerd Hoffmann
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 14/19] chardev: add vc " Gerd Hoffmann
                   ` (6 subsequent siblings)
  19 siblings, 0 replies; 24+ messages in thread
From: Gerd Hoffmann @ 2013-03-12  8:56 UTC (permalink / raw)
  To: qemu-devel; +Cc: Anthony Liguori, Gerd Hoffmann

This patch adds 'spicevmc' and 'spiceport' support to qapi and also
switches over the spice chardev initialization to the new qapi code
path.
---
 include/ui/qemu-spice.h |    7 ++++--
 qapi-schema.json        |   26 +++++++++++++++++++-
 qemu-char.c             |    8 ++++++
 spice-qemu-char.c       |   62 +++++++++++++++++++++++++++++++----------------
 4 files changed, 79 insertions(+), 24 deletions(-)

diff --git a/include/ui/qemu-spice.h b/include/ui/qemu-spice.h
index 5a78fd7..eba6d77 100644
--- a/include/ui/qemu-spice.h
+++ b/include/ui/qemu-spice.h
@@ -44,10 +44,13 @@ int qemu_spice_migrate_info(const char *hostname, int port, int tls_port,
 void do_info_spice_print(Monitor *mon, const QObject *data);
 void do_info_spice(Monitor *mon, QObject **ret_data);
 
-CharDriverState *qemu_chr_open_spice(QemuOpts *opts);
+CharDriverState *qemu_chr_open_spice_vmc(const char *type);
 #if SPICE_SERVER_VERSION >= 0x000c02
-CharDriverState *qemu_chr_open_spice_port(QemuOpts *opts);
+CharDriverState *qemu_chr_open_spice_port(const char *name);
 void qemu_spice_register_ports(void);
+#else
+static inline CharDriverState *qemu_chr_open_spice_port(const char *name)
+{ return NULL; }
 #endif
 
 #else  /* CONFIG_SPICE */
diff --git a/qapi-schema.json b/qapi-schema.json
index c9e9bd5..f570185 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -3209,6 +3209,28 @@
 { 'type': 'ChardevStdio', 'data': { '*signal' : 'bool' } }
 
 ##
+# @ChardevSpiceChannel:
+#
+# Configuration info for spice vm channel chardevs.
+#
+# @type: kind of channel (for example vdagent).
+#
+# Since: 1.5
+##
+{ 'type': 'ChardevSpiceChannel', 'data': { 'type'  : 'str' } }
+
+##
+# @ChardevSpicePort:
+#
+# Configuration info for spice port chardevs.
+#
+# @fqdn: name of the channel (see docs/spice-port-fqdn.txt)
+#
+# Since: 1.5
+##
+{ 'type': 'ChardevSpicePort', 'data': { 'fqdn'  : 'str' } }
+
+##
 # @ChardevBackend:
 #
 # Configuration info for the new chardev backend.
@@ -3228,7 +3250,9 @@
                                        'msmouse': 'ChardevDummy',
                                        'braille': 'ChardevDummy',
                                        'stdio'  : 'ChardevStdio',
-                                       'console': 'ChardevDummy' } }
+                                       'console': 'ChardevDummy',
+                                       'spicevmc' : 'ChardevSpiceChannel',
+                                       'spiceport' : 'ChardevSpicePort' } }
 
 ##
 # @ChardevReturn:
diff --git a/qemu-char.c b/qemu-char.c
index 35e9d3d..ef10200 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -3705,6 +3705,14 @@ ChardevReturn *qmp_chardev_add(const char *id, ChardevBackend *backend,
         chr = qemu_chr_open_win_con();
         break;
 #endif
+#ifdef CONFIG_SPICE
+    case CHARDEV_BACKEND_KIND_SPICEVMC:
+        chr = qemu_chr_open_spice_vmc(backend->spicevmc->type);
+        break;
+    case CHARDEV_BACKEND_KIND_SPICEPORT:
+        chr = qemu_chr_open_spice_port(backend->spiceport->fqdn);
+        break;
+#endif
     default:
         error_setg(errp, "unknown chardev backend (%d)", backend->kind);
         break;
diff --git a/spice-qemu-char.c b/spice-qemu-char.c
index aea3d24..0c92ca8 100644
--- a/spice-qemu-char.c
+++ b/spice-qemu-char.c
@@ -217,16 +217,14 @@ static void print_allowed_subtypes(void)
     fprintf(stderr, "\n");
 }
 
-static CharDriverState *chr_open(QemuOpts *opts, const char *subtype)
+static CharDriverState *chr_open(const char *subtype)
 {
     CharDriverState *chr;
     SpiceCharDriver *s;
-    uint32_t debug = qemu_opt_get_number(opts, "debug", 0);
 
     chr = g_malloc0(sizeof(CharDriverState));
     s = g_malloc0(sizeof(SpiceCharDriver));
     s->chr = chr;
-    s->debug = debug;
     s->active = false;
     s->sin.subtype = subtype;
     chr->opaque = s;
@@ -240,35 +238,32 @@ static CharDriverState *chr_open(QemuOpts *opts, const char *subtype)
     return chr;
 }
 
-CharDriverState *qemu_chr_open_spice(QemuOpts *opts)
+CharDriverState *qemu_chr_open_spice_vmc(const char *type)
 {
     CharDriverState *chr;
-    const char *name = qemu_opt_get(opts, "name");
     const char **psubtype = spice_server_char_device_recognized_subtypes();
-    const char *subtype = NULL;
 
-    if (name == NULL) {
+    if (type == NULL) {
         fprintf(stderr, "spice-qemu-char: missing name parameter\n");
         print_allowed_subtypes();
         return NULL;
     }
-    for(;*psubtype != NULL; ++psubtype) {
-        if (strcmp(name, *psubtype) == 0) {
-            subtype = *psubtype;
+    for (; *psubtype != NULL; ++psubtype) {
+        if (strcmp(type, *psubtype) == 0) {
             break;
         }
     }
-    if (subtype == NULL) {
-        fprintf(stderr, "spice-qemu-char: unsupported name: %s\n", name);
+    if (*psubtype == NULL) {
+        fprintf(stderr, "spice-qemu-char: unsupported type: %s\n", type);
         print_allowed_subtypes();
         return NULL;
     }
 
-    chr = chr_open(opts, subtype);
+    chr = chr_open(type);
 
 #if SPICE_SERVER_VERSION < 0x000901
     /* See comment in vmc_state() */
-    if (strcmp(subtype, "vdagent") == 0) {
+    if (strcmp(type, "vdagent") == 0) {
         qemu_chr_generic_open(chr);
     }
 #endif
@@ -277,18 +272,17 @@ CharDriverState *qemu_chr_open_spice(QemuOpts *opts)
 }
 
 #if SPICE_SERVER_VERSION >= 0x000c02
-CharDriverState *qemu_chr_open_spice_port(QemuOpts *opts)
+CharDriverState *qemu_chr_open_spice_port(const char *name)
 {
     CharDriverState *chr;
     SpiceCharDriver *s;
-    const char *name = qemu_opt_get(opts, "name");
 
     if (name == NULL) {
         fprintf(stderr, "spice-qemu-char: missing name parameter\n");
         return NULL;
     }
 
-    chr = chr_open(opts, "port");
+    chr = chr_open("port");
     s = chr->opaque;
     s->sin.portname = name;
 
@@ -308,12 +302,38 @@ void qemu_spice_register_ports(void)
 }
 #endif
 
+static void qemu_chr_parse_spice_vmc(QemuOpts *opts, ChardevBackend *backend,
+                                     Error **errp)
+{
+    const char *name = qemu_opt_get(opts, "name");
+
+    if (name == NULL) {
+        error_setg(errp, "chardev: spice channel: no name given");
+        return;
+    }
+    backend->spicevmc = g_new0(ChardevSpiceChannel, 1);
+    backend->spicevmc->type = g_strdup(name);
+}
+
+static void qemu_chr_parse_spice_port(QemuOpts *opts, ChardevBackend *backend,
+                                      Error **errp)
+{
+    const char *name = qemu_opt_get(opts, "name");
+
+    if (name == NULL) {
+        error_setg(errp, "chardev: spice port: no name given");
+        return;
+    }
+    backend->spiceport = g_new0(ChardevSpicePort, 1);
+    backend->spiceport->fqdn = g_strdup(name);
+}
+
 static void register_types(void)
 {
-    register_char_driver("spicevmc", qemu_chr_open_spice);
-#if SPICE_SERVER_VERSION >= 0x000c02
-    register_char_driver("spiceport", qemu_chr_open_spice_port);
-#endif
+    register_char_driver_qapi("spicevmc", CHARDEV_BACKEND_KIND_SPICEVMC,
+                              qemu_chr_parse_spice_vmc);
+    register_char_driver_qapi("spiceport", CHARDEV_BACKEND_KIND_SPICEPORT,
+                              qemu_chr_parse_spice_port);
 }
 
 type_init(register_types);
-- 
1.7.9.7

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [Qemu-devel] [PATCH 14/19] chardev: add vc support to qapi
  2013-03-12  8:56 [Qemu-devel] [PULL v3 00/19] chardev: qapi conversion continued Gerd Hoffmann
                   ` (12 preceding siblings ...)
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 13/19] chardev: add spice " Gerd Hoffmann
@ 2013-03-12  8:56 ` Gerd Hoffmann
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 15/19] [fixup] vc Gerd Hoffmann
                   ` (5 subsequent siblings)
  19 siblings, 0 replies; 24+ messages in thread
From: Gerd Hoffmann @ 2013-03-12  8:56 UTC (permalink / raw)
  To: qemu-devel; +Cc: Anthony Liguori, Gerd Hoffmann

This patch adds 'vc' support to qapi and also switches over the
vc chardev initialization to the new qapi code path.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 include/ui/console.h |    4 ++--
 qapi-schema.json     |   20 ++++++++++++++++-
 ui/console.c         |   61 ++++++++++++++++++++++++++++++++++++++++----------
 ui/gtk.c             |    2 +-
 4 files changed, 71 insertions(+), 16 deletions(-)

diff --git a/include/ui/console.h b/include/ui/console.h
index c42bca6..a37cf65 100644
--- a/include/ui/console.h
+++ b/include/ui/console.h
@@ -450,9 +450,9 @@ void qemu_console_resize(DisplayState *ds, int width, int height);
 void qemu_console_copy(DisplayState *ds, int src_x, int src_y,
                        int dst_x, int dst_y, int w, int h);
 
-typedef CharDriverState *(VcHandler)(QemuOpts *);
+typedef CharDriverState *(VcHandler)(ChardevVC *vc);
 
-CharDriverState *vc_init(QemuOpts *opts);
+CharDriverState *vc_init(ChardevVC *vc);
 void register_vc_handler(VcHandler *handler);
 
 /* sdl.c */
diff --git a/qapi-schema.json b/qapi-schema.json
index f570185..3c12122 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -3231,6 +3231,23 @@
 { 'type': 'ChardevSpicePort', 'data': { 'fqdn'  : 'str' } }
 
 ##
+# @ChardevVC:
+#
+# Configuration info for virtual console chardevs.
+#
+# @width:  console width,  in pixels
+# @height: console height, in pixels
+# @cols:   console width,  in chars
+# @rows:   console height, in chars
+#
+# Since: 1.5
+##
+{ 'type': 'ChardevVC', 'data': { '*width'  : 'int',
+                                 '*height' : 'int',
+                                 '*cols'   : 'int',
+                                 '*rows'   : 'int' } }
+
+##
 # @ChardevBackend:
 #
 # Configuration info for the new chardev backend.
@@ -3252,7 +3269,8 @@
                                        'stdio'  : 'ChardevStdio',
                                        'console': 'ChardevDummy',
                                        'spicevmc' : 'ChardevSpiceChannel',
-                                       'spiceport' : 'ChardevSpicePort' } }
+                                       'spiceport' : 'ChardevSpicePort',
+                                       'vc'     : 'ChardevVC' } }
 
 ##
 # @ChardevReturn:
diff --git a/ui/console.c b/ui/console.c
index 83a6fa3..27e87f8 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -1537,22 +1537,26 @@ static void text_console_do_init(CharDriverState *chr, DisplayState *ds)
         chr->init(chr);
 }
 
-static CharDriverState *text_console_init(QemuOpts *opts)
+static CharDriverState *text_console_init(ChardevVC *vc)
 {
     CharDriverState *chr;
     QemuConsole *s;
-    unsigned width;
-    unsigned height;
+    unsigned width = 0;
+    unsigned height = 0;
 
     chr = g_malloc0(sizeof(CharDriverState));
 
-    width = qemu_opt_get_number(opts, "width", 0);
-    if (width == 0)
-        width = qemu_opt_get_number(opts, "cols", 0) * FONT_WIDTH;
+    if (vc->has_width) {
+        width = vc->width;
+    } else if (vc->has_cols) {
+        width = vc->cols * FONT_WIDTH;
+    }
 
-    height = qemu_opt_get_number(opts, "height", 0);
-    if (height == 0)
-        height = qemu_opt_get_number(opts, "rows", 0) * FONT_HEIGHT;
+    if (vc->has_height) {
+        height = vc->height;
+    } else if (vc->has_rows) {
+        height = vc->rows * FONT_HEIGHT;
+    }
 
     if (width == 0 || height == 0) {
         s = new_console(NULL, TEXT_CONSOLE);
@@ -1575,9 +1579,9 @@ static CharDriverState *text_console_init(QemuOpts *opts)
 
 static VcHandler *vc_handler = text_console_init;
 
-CharDriverState *vc_init(QemuOpts *opts)
+CharDriverState *vc_init(ChardevVC *vc)
 {
-    return vc_handler(opts);
+    return vc_handler(vc);
 }
 
 void register_vc_handler(VcHandler *handler)
@@ -1740,9 +1744,42 @@ PixelFormat qemu_default_pixelformat(int bpp)
     return pf;
 }
 
+static void qemu_chr_parse_vc(QemuOpts *opts, ChardevBackend *backend,
+                              Error **errp)
+{
+    int val;
+
+    backend->vc = g_new0(ChardevVC, 1);
+
+    val = qemu_opt_get_number(opts, "width", 0);
+    if (val != 0) {
+        backend->vc->has_width = true;
+        backend->vc->width = val;
+    }
+
+    val = qemu_opt_get_number(opts, "height", 0);
+    if (val != 0) {
+        backend->vc->has_height = true;
+        backend->vc->height = val;
+    }
+
+    val = qemu_opt_get_number(opts, "cols", 0);
+    if (val != 0) {
+        backend->vc->has_cols = true;
+        backend->vc->cols = val;
+    }
+
+    val = qemu_opt_get_number(opts, "rows", 0);
+    if (val != 0) {
+        backend->vc->has_rows = true;
+        backend->vc->rows = val;
+    }
+}
+
 static void register_types(void)
 {
-    register_char_driver("vc", text_console_init);
+    register_char_driver_qapi("vc", CHARDEV_BACKEND_KIND_VC,
+                              qemu_chr_parse_vc);
 }
 
 type_init(register_types);
diff --git a/ui/gtk.c b/ui/gtk.c
index 544593e..794dab1 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -991,7 +991,7 @@ static int gd_vc_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
 static int nb_vcs;
 static CharDriverState *vcs[MAX_VCS];
 
-static CharDriverState *gd_vc_handler(QemuOpts *opts)
+static CharDriverState *gd_vc_handler(ChardevVC *unused)
 {
     CharDriverState *chr;
 
-- 
1.7.9.7

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [Qemu-devel] [PATCH 15/19] [fixup] vc
  2013-03-12  8:56 [Qemu-devel] [PULL v3 00/19] chardev: qapi conversion continued Gerd Hoffmann
                   ` (13 preceding siblings ...)
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 14/19] chardev: add vc " Gerd Hoffmann
@ 2013-03-12  8:56 ` Gerd Hoffmann
  2013-03-12 17:42   ` Eric Blake
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 16/19] chardev: add memory (ringbuf) support to qapi Gerd Hoffmann
                   ` (4 subsequent siblings)
  19 siblings, 1 reply; 24+ messages in thread
From: Gerd Hoffmann @ 2013-03-12  8:56 UTC (permalink / raw)
  To: qemu-devel; +Cc: Anthony Liguori, Gerd Hoffmann

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 qemu-char.c |    3 +++
 1 file changed, 3 insertions(+)

diff --git a/qemu-char.c b/qemu-char.c
index ef10200..a1c668f 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -3713,6 +3713,9 @@ ChardevReturn *qmp_chardev_add(const char *id, ChardevBackend *backend,
         chr = qemu_chr_open_spice_port(backend->spiceport->fqdn);
         break;
 #endif
+    case CHARDEV_BACKEND_KIND_VC:
+        chr = vc_init(backend->vc);
+        break;
     default:
         error_setg(errp, "unknown chardev backend (%d)", backend->kind);
         break;
-- 
1.7.9.7

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [Qemu-devel] [PATCH 16/19] chardev: add memory (ringbuf) support to qapi
  2013-03-12  8:56 [Qemu-devel] [PULL v3 00/19] chardev: qapi conversion continued Gerd Hoffmann
                   ` (14 preceding siblings ...)
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 15/19] [fixup] vc Gerd Hoffmann
@ 2013-03-12  8:56 ` Gerd Hoffmann
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 17/19] chardev: add udp " Gerd Hoffmann
                   ` (3 subsequent siblings)
  19 siblings, 0 replies; 24+ messages in thread
From: Gerd Hoffmann @ 2013-03-12  8:56 UTC (permalink / raw)
  To: qemu-devel; +Cc: Anthony Liguori, Gerd Hoffmann

This patch adds 'memory' support to qapi and also switches over
the memory chardev initialization to the new qapi code path.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 qapi-schema.json |   14 +++++++++++++-
 qemu-char.c      |   30 +++++++++++++++++++++++-------
 2 files changed, 36 insertions(+), 8 deletions(-)

diff --git a/qapi-schema.json b/qapi-schema.json
index 3c12122..59c025f 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -3248,6 +3248,17 @@
                                  '*rows'   : 'int' } }
 
 ##
+# @ChardevRingbuf:
+#
+# Configuration info for memory chardevs
+#
+# @size: #optional Ringbuffer size, must be power of two, default is 65536
+#
+# Since: 1.5
+##
+{ 'type': 'ChardevRingbuf', 'data': { '*size'  : 'int' } }
+
+##
 # @ChardevBackend:
 #
 # Configuration info for the new chardev backend.
@@ -3270,7 +3281,8 @@
                                        'console': 'ChardevDummy',
                                        'spicevmc' : 'ChardevSpiceChannel',
                                        'spiceport' : 'ChardevSpicePort',
-                                       'vc'     : 'ChardevVC' } }
+                                       'vc'     : 'ChardevVC',
+                                       'memory' : 'ChardevRingbuf' } }
 
 ##
 # @ChardevReturn:
diff --git a/qemu-char.c b/qemu-char.c
index a1c668f..0e7d46c 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -2860,7 +2860,8 @@ static void ringbuf_chr_close(struct CharDriverState *chr)
     chr->opaque = NULL;
 }
 
-static CharDriverState *qemu_chr_open_ringbuf(QemuOpts *opts)
+static CharDriverState *qemu_chr_open_ringbuf(ChardevRingbuf *opts,
+                                              Error **errp)
 {
     CharDriverState *chr;
     RingBufCharDriver *d;
@@ -2868,14 +2869,11 @@ static CharDriverState *qemu_chr_open_ringbuf(QemuOpts *opts)
     chr = g_malloc0(sizeof(CharDriverState));
     d = g_malloc(sizeof(*d));
 
-    d->size = qemu_opt_get_size(opts, "size", 0);
-    if (d->size == 0) {
-        d->size = 65536;
-    }
+    d->size = opts->has_size ? opts->size : 65536;
 
     /* The size must be power of 2 */
     if (d->size & (d->size - 1)) {
-        error_report("size of ringbuf device must be power of two");
+        error_setg(errp, "size of ringbuf chardev must be power of two");
         goto fail;
     }
 
@@ -3177,6 +3175,20 @@ static void qemu_chr_parse_pipe(QemuOpts *opts, ChardevBackend *backend,
     backend->pipe->device = g_strdup(device);
 }
 
+static void qemu_chr_parse_ringbuf(QemuOpts *opts, ChardevBackend *backend,
+                                   Error **errp)
+{
+    int val;
+
+    backend->memory = g_new0(ChardevRingbuf, 1);
+
+    val = qemu_opt_get_number(opts, "size", 0);
+    if (val != 0) {
+        backend->memory->has_size = true;
+        backend->memory->size = val;
+    }
+}
+
 typedef struct CharDriver {
     const char *name;
     /* old, pre qapi */
@@ -3716,6 +3728,9 @@ ChardevReturn *qmp_chardev_add(const char *id, ChardevBackend *backend,
     case CHARDEV_BACKEND_KIND_VC:
         chr = vc_init(backend->vc);
         break;
+    case CHARDEV_BACKEND_KIND_MEMORY:
+        chr = qemu_chr_open_ringbuf(backend->memory, errp);
+        break;
     default:
         error_setg(errp, "unknown chardev backend (%d)", backend->kind);
         break;
@@ -3758,7 +3773,8 @@ static void register_types(void)
     register_char_driver_qapi("null", CHARDEV_BACKEND_KIND_NULL, NULL);
     register_char_driver("socket", qemu_chr_open_socket);
     register_char_driver("udp", qemu_chr_open_udp);
-    register_char_driver("memory", qemu_chr_open_ringbuf);
+    register_char_driver_qapi("memory", CHARDEV_BACKEND_KIND_MEMORY,
+                              qemu_chr_parse_ringbuf);
     register_char_driver_qapi("file", CHARDEV_BACKEND_KIND_FILE,
                               qemu_chr_parse_file_out);
     register_char_driver_qapi("stdio", CHARDEV_BACKEND_KIND_STDIO,
-- 
1.7.9.7

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [Qemu-devel] [PATCH 17/19] chardev: add udp support to qapi
  2013-03-12  8:56 [Qemu-devel] [PULL v3 00/19] chardev: qapi conversion continued Gerd Hoffmann
                   ` (15 preceding siblings ...)
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 16/19] chardev: add memory (ringbuf) support to qapi Gerd Hoffmann
@ 2013-03-12  8:56 ` Gerd Hoffmann
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 18/19] Revert "hmp: Disable chardev-add and chardev-remove" Gerd Hoffmann
                   ` (2 subsequent siblings)
  19 siblings, 0 replies; 24+ messages in thread
From: Gerd Hoffmann @ 2013-03-12  8:56 UTC (permalink / raw)
  To: qemu-devel; +Cc: Anthony Liguori, Gerd Hoffmann

This patch adds 'udp' support to qapi.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 include/qemu/sockets.h |    1 +
 qapi-schema.json       |   16 +++++++++++++++-
 qemu-char.c            |   44 ++++++++++++++++++++++++++------------------
 util/qemu-sockets.c    |   25 +++++++++++++++++++++++++
 4 files changed, 67 insertions(+), 19 deletions(-)

diff --git a/include/qemu/sockets.h b/include/qemu/sockets.h
index 6125bf7..3dc6044 100644
--- a/include/qemu/sockets.h
+++ b/include/qemu/sockets.h
@@ -70,6 +70,7 @@ SocketAddress *socket_parse(const char *str, Error **errp);
 int socket_connect(SocketAddress *addr, Error **errp,
                    NonBlockingConnectHandler *callback, void *opaque);
 int socket_listen(SocketAddress *addr, Error **errp);
+int socket_dgram(SocketAddress *remote, SocketAddress *local, Error **errp);
 
 /* Old, ipv4 only bits.  Don't use for new code. */
 int parse_host_port(struct sockaddr_in *saddr, const char *str);
diff --git a/qapi-schema.json b/qapi-schema.json
index 59c025f..ba023fb 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -3166,7 +3166,7 @@
 ##
 # @ChardevSocket:
 #
-# Configuration info for socket chardevs.
+# Configuration info for (stream) socket chardevs.
 #
 # @addr: socket address to listen on (server=true)
 #        or connect to (server=false)
@@ -3185,6 +3185,19 @@
                                      '*telnet'  : 'bool' } }
 
 ##
+# @ChardevDgram:
+#
+# Configuration info for datagram socket chardevs.
+#
+# @remote: remote address
+# @local: #optional local address
+#
+# Since: 1.5
+##
+{ 'type': 'ChardevDgram', 'data': { 'remote' : 'SocketAddress',
+                                    '*local' : 'SocketAddress' } }
+
+##
 # @ChardevMux:
 #
 # Configuration info for mux chardevs.
@@ -3272,6 +3285,7 @@
                                        'parallel': 'ChardevHostdev',
                                        'pipe'   : 'ChardevHostdev',
                                        'socket' : 'ChardevSocket',
+                                       'dgram'  : 'ChardevDgram',
                                        'pty'    : 'ChardevDummy',
                                        'null'   : 'ChardevDummy',
                                        'mux'    : 'ChardevMux',
diff --git a/qemu-char.c b/qemu-char.c
index 0e7d46c..11f8ea5 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -2237,21 +2237,14 @@ static void udp_chr_close(CharDriverState *chr)
     qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
 }
 
-static CharDriverState *qemu_chr_open_udp(QemuOpts *opts)
+static CharDriverState *qemu_chr_open_udp_fd(int fd)
 {
     CharDriverState *chr = NULL;
     NetCharDriver *s = NULL;
-    Error *local_err = NULL;
-    int fd = -1;
 
     chr = g_malloc0(sizeof(CharDriverState));
     s = g_malloc0(sizeof(NetCharDriver));
 
-    fd = inet_dgram_opts(opts, &local_err);
-    if (fd < 0) {
-        goto return_err;
-    }
-
     s->fd = fd;
     s->chan = io_channel_from_socket(s->fd);
     s->bufcnt = 0;
@@ -2261,18 +2254,18 @@ static CharDriverState *qemu_chr_open_udp(QemuOpts *opts)
     chr->chr_update_read_handler = udp_chr_update_read_handler;
     chr->chr_close = udp_chr_close;
     return chr;
+}
 
-return_err:
-    if (local_err) {
-        qerror_report_err(local_err);
-        error_free(local_err);
-    }
-    g_free(chr);
-    g_free(s);
-    if (fd >= 0) {
-        closesocket(fd);
+static CharDriverState *qemu_chr_open_udp(QemuOpts *opts)
+{
+    Error *local_err = NULL;
+    int fd = -1;
+
+    fd = inet_dgram_opts(opts, &local_err);
+    if (fd < 0) {
+        return NULL;
     }
-    return NULL;
+    return qemu_chr_open_udp_fd(fd);
 }
 
 /***********************************************************/
@@ -3655,6 +3648,18 @@ static CharDriverState *qmp_chardev_open_socket(ChardevSocket *sock,
                                    is_telnet, is_waitconnect, errp);
 }
 
+static CharDriverState *qmp_chardev_open_dgram(ChardevDgram *dgram,
+                                               Error **errp)
+{
+    int fd;
+
+    fd = socket_dgram(dgram->remote, dgram->local, errp);
+    if (error_is_set(errp)) {
+        return NULL;
+    }
+    return qemu_chr_open_udp_fd(fd);
+}
+
 ChardevReturn *qmp_chardev_add(const char *id, ChardevBackend *backend,
                                Error **errp)
 {
@@ -3684,6 +3689,9 @@ ChardevReturn *qmp_chardev_add(const char *id, ChardevBackend *backend,
     case CHARDEV_BACKEND_KIND_SOCKET:
         chr = qmp_chardev_open_socket(backend->socket, errp);
         break;
+    case CHARDEV_BACKEND_KIND_DGRAM:
+        chr = qmp_chardev_open_dgram(backend->dgram, errp);
+        break;
 #ifdef HAVE_CHARDEV_TTY
     case CHARDEV_BACKEND_KIND_PTY:
         chr = qemu_chr_open_pty(id, ret);
diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c
index 3f12296..83e4e08 100644
--- a/util/qemu-sockets.c
+++ b/util/qemu-sockets.c
@@ -949,6 +949,31 @@ int socket_listen(SocketAddress *addr, Error **errp)
     return fd;
 }
 
+int socket_dgram(SocketAddress *remote, SocketAddress *local, Error **errp)
+{
+    QemuOpts *opts;
+    int fd;
+
+    opts = qemu_opts_create_nofail(&dummy_opts);
+    switch (remote->kind) {
+    case SOCKET_ADDRESS_KIND_INET:
+        qemu_opt_set(opts, "host", remote->inet->host);
+        qemu_opt_set(opts, "port", remote->inet->port);
+        if (local) {
+            qemu_opt_set(opts, "localaddr", local->inet->host);
+            qemu_opt_set(opts, "localport", local->inet->port);
+        }
+        fd = inet_dgram_opts(opts, errp);
+        break;
+
+    default:
+        error_setg(errp, "socket type unsupported for datagram");
+        return -1;
+    }
+    qemu_opts_del(opts);
+    return fd;
+}
+
 #ifdef _WIN32
 static void socket_cleanup(void)
 {
-- 
1.7.9.7

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [Qemu-devel] [PATCH 18/19] Revert "hmp: Disable chardev-add and chardev-remove"
  2013-03-12  8:56 [Qemu-devel] [PULL v3 00/19] chardev: qapi conversion continued Gerd Hoffmann
                   ` (16 preceding siblings ...)
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 17/19] chardev: add udp " Gerd Hoffmann
@ 2013-03-12  8:56 ` Gerd Hoffmann
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 19/19] qemu-char.c: fix waiting for telnet connection message Gerd Hoffmann
  2013-03-12  9:08 ` [Qemu-devel] [PULL v3 00/19] chardev: qapi conversion continued Gerd Hoffmann
  19 siblings, 0 replies; 24+ messages in thread
From: Gerd Hoffmann @ 2013-03-12  8:56 UTC (permalink / raw)
  To: qemu-devel; +Cc: Gerd Hoffmann

This reverts commit 8a14952c9d2f5fa2b3caa6dc286b62ed5d26bca7.
---
 hmp-commands.hx |   63 +++++++++++++++++++++++++++----------------------------
 1 file changed, 31 insertions(+), 32 deletions(-)

diff --git a/hmp-commands.hx b/hmp-commands.hx
index 69c707d..79bbcc6 100644
--- a/hmp-commands.hx
+++ b/hmp-commands.hx
@@ -1522,38 +1522,37 @@ passed since 1970, i.e. unix epoch.
 @end table
 ETEXI
 
-HXCOMM Disabled for now, because it isn't built on top of QMP's chardev-add
-HXCOMM     {
-HXCOMM         .name       = "chardev-add",
-HXCOMM         .args_type  = "args:s",
-HXCOMM         .params     = "args",
-HXCOMM         .help       = "add chardev",
-HXCOMM         .mhandler.cmd = hmp_chardev_add,
-HXCOMM     },
-HXCOMM
-HXCOMM STEXI
-HXCOMM @item chardev_add args
-HXCOMM @findex chardev_add
-HXCOMM
-HXCOMM chardev_add accepts the same parameters as the -chardev command line switch.
-HXCOMM
-HXCOMM ETEXI
-HXCOMM
-HXCOMM     {
-HXCOMM         .name       = "chardev-remove",
-HXCOMM         .args_type  = "id:s",
-HXCOMM         .params     = "id",
-HXCOMM         .help       = "remove chardev",
-HXCOMM         .mhandler.cmd = hmp_chardev_remove,
-HXCOMM     },
-HXCOMM
-HXCOMM STEXI
-HXCOMM @item chardev_remove id
-HXCOMM @findex chardev_remove
-HXCOMM
-HXCOMM Removes the chardev @var{id}.
-HXCOMM
-HXCOMM ETEXI
+    {
+        .name       = "chardev-add",
+        .args_type  = "args:s",
+        .params     = "args",
+        .help       = "add chardev",
+        .mhandler.cmd = hmp_chardev_add,
+    },
+
+STEXI
+@item chardev_add args
+@findex chardev_add
+
+chardev_add accepts the same parameters as the -chardev command line switch.
+
+ETEXI
+
+    {
+        .name       = "chardev-remove",
+        .args_type  = "id:s",
+        .params     = "id",
+        .help       = "remove chardev",
+        .mhandler.cmd = hmp_chardev_remove,
+    },
+
+STEXI
+@item chardev_remove id
+@findex chardev_remove
+
+Removes the chardev @var{id}.
+
+ETEXI
 
     {
         .name       = "info",
-- 
1.7.9.7

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [Qemu-devel] [PATCH 19/19] qemu-char.c: fix waiting for telnet connection message
  2013-03-12  8:56 [Qemu-devel] [PULL v3 00/19] chardev: qapi conversion continued Gerd Hoffmann
                   ` (17 preceding siblings ...)
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 18/19] Revert "hmp: Disable chardev-add and chardev-remove" Gerd Hoffmann
@ 2013-03-12  8:56 ` Gerd Hoffmann
  2013-03-12  9:08 ` [Qemu-devel] [PULL v3 00/19] chardev: qapi conversion continued Gerd Hoffmann
  19 siblings, 0 replies; 24+ messages in thread
From: Gerd Hoffmann @ 2013-03-12  8:56 UTC (permalink / raw)
  To: qemu-devel; +Cc: Igor Mitsyanko, Anthony Liguori, Gerd Hoffmann

From: Igor Mitsyanko <i.mitsyanko@gmail.com>

Current colon position in "waiting for telnet connection" message template
produces messages like:
QEMU waiting for connection on: telnet::127.0.0.16666,server

After moving a colon to the right, we will get a correct messages like:
QEMU waiting for connection on: telnet:127.0.0.1:6666,server

Signed-off-by: Igor Mitsyanko <i.mitsyanko@gmail.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 qemu-char.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/qemu-char.c b/qemu-char.c
index 11f8ea5..a9f0520 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -2632,7 +2632,7 @@ static CharDriverState *qemu_chr_open_socket_fd(int fd, bool do_nodelay,
         s->do_nodelay = do_nodelay;
         getnameinfo((struct sockaddr *) &ss, ss_len, host, sizeof(host),
                     serv, sizeof(serv), NI_NUMERICHOST | NI_NUMERICSERV);
-        snprintf(chr->filename, 256, "%s:%s:%s%s%s%s",
+        snprintf(chr->filename, 256, "%s:%s%s%s:%s%s",
                  is_telnet ? "telnet" : "tcp",
                  left, host, right, serv,
                  is_listen ? ",server" : "");
-- 
1.7.9.7

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* Re: [Qemu-devel] [PULL v3 00/19] chardev: qapi conversion continued
  2013-03-12  8:56 [Qemu-devel] [PULL v3 00/19] chardev: qapi conversion continued Gerd Hoffmann
                   ` (18 preceding siblings ...)
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 19/19] qemu-char.c: fix waiting for telnet connection message Gerd Hoffmann
@ 2013-03-12  9:08 ` Gerd Hoffmann
  2013-03-13 12:39   ` Anthony Liguori
  19 siblings, 1 reply; 24+ messages in thread
From: Gerd Hoffmann @ 2013-03-12  9:08 UTC (permalink / raw)
  To: Gerd Hoffmann; +Cc: qemu-devel

  Hi,

>   git://git.kraxel.org/qemu chardev.3

Pushed chardev.4 ...

>       chardev: add vc support to qapi
>       [fixup] vc

... with these two guys squashed.

sorry for the trouble,

  Gerd

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Qemu-devel] [PATCH 15/19] [fixup] vc
  2013-03-12  8:56 ` [Qemu-devel] [PATCH 15/19] [fixup] vc Gerd Hoffmann
@ 2013-03-12 17:42   ` Eric Blake
  2013-03-13  6:46     ` Gerd Hoffmann
  0 siblings, 1 reply; 24+ messages in thread
From: Eric Blake @ 2013-03-12 17:42 UTC (permalink / raw)
  To: Gerd Hoffmann; +Cc: Anthony Liguori, qemu-devel

[-- Attachment #1: Type: text/plain, Size: 928 bytes --]

On 03/12/2013 02:56 AM, Gerd Hoffmann wrote:
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  qemu-char.c |    3 +++
>  1 file changed, 3 insertions(+)

Did something go wrong in your rebase?  The subject line suggest you
intended to squash this to another patch.

> 
> diff --git a/qemu-char.c b/qemu-char.c
> index ef10200..a1c668f 100644
> --- a/qemu-char.c
> +++ b/qemu-char.c
> @@ -3713,6 +3713,9 @@ ChardevReturn *qmp_chardev_add(const char *id, ChardevBackend *backend,
>          chr = qemu_chr_open_spice_port(backend->spiceport->fqdn);
>          break;
>  #endif
> +    case CHARDEV_BACKEND_KIND_VC:
> +        chr = vc_init(backend->vc);
> +        break;
>      default:
>          error_setg(errp, "unknown chardev backend (%d)", backend->kind);
>          break;
> 

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 621 bytes --]

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Qemu-devel] [PATCH 15/19] [fixup] vc
  2013-03-12 17:42   ` Eric Blake
@ 2013-03-13  6:46     ` Gerd Hoffmann
  0 siblings, 0 replies; 24+ messages in thread
From: Gerd Hoffmann @ 2013-03-13  6:46 UTC (permalink / raw)
  To: Eric Blake; +Cc: Anthony Liguori, qemu-devel

On 03/12/13 18:42, Eric Blake wrote:
> On 03/12/2013 02:56 AM, Gerd Hoffmann wrote:
>> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- qemu-char.c
>> |    3 +++ 1 file changed, 3 insertions(+)
> 
> Did something go wrong in your rebase?  The subject line suggest
> you intended to squash this to another patch.

Yes, into #14 (see my cover letter reply).

cheers,
  Gerd

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Qemu-devel] [PULL v3 00/19] chardev: qapi conversion continued
  2013-03-12  9:08 ` [Qemu-devel] [PULL v3 00/19] chardev: qapi conversion continued Gerd Hoffmann
@ 2013-03-13 12:39   ` Anthony Liguori
  0 siblings, 0 replies; 24+ messages in thread
From: Anthony Liguori @ 2013-03-13 12:39 UTC (permalink / raw)
  To: Gerd Hoffmann; +Cc: qemu-devel

Gerd Hoffmann <kraxel@redhat.com> writes:

>   Hi,
>
>>   git://git.kraxel.org/qemu chardev.3
>
> Pushed chardev.4 ...

Please send another pull request with a v2.  Otherwise it confuses my scripts.

Regards,

Anthony Liguori

>
>>       chardev: add vc support to qapi
>>       [fixup] vc
>
> ... with these two guys squashed.
>
> sorry for the trouble,
>
>   Gerd

^ permalink raw reply	[flat|nested] 24+ messages in thread

end of thread, other threads:[~2013-03-13 12:39 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-03-12  8:56 [Qemu-devel] [PULL v3 00/19] chardev: qapi conversion continued Gerd Hoffmann
2013-03-12  8:56 ` [Qemu-devel] [PATCH 01/19] chardev: add support for qapi-based chardev initialization Gerd Hoffmann
2013-03-12  8:56 ` [Qemu-devel] [PATCH 02/19] chardev: add mux chardev support to qapi Gerd Hoffmann
2013-03-12  8:56 ` [Qemu-devel] [PATCH 03/19] chardev: switch null init " Gerd Hoffmann
2013-03-12  8:56 ` [Qemu-devel] [PATCH 04/19] chardev: add msmouse support " Gerd Hoffmann
2013-03-12  8:56 ` [Qemu-devel] [PATCH 05/19] chardev: add braille " Gerd Hoffmann
2013-03-12  8:56 ` [Qemu-devel] [PATCH 06/19] chardev: switch file init " Gerd Hoffmann
2013-03-12  8:56 ` [Qemu-devel] [PATCH 07/19] chardev: add stdio support " Gerd Hoffmann
2013-03-12  8:56 ` [Qemu-devel] [PATCH 08/19] chardev: switch serial/tty init " Gerd Hoffmann
2013-03-12  8:56 ` [Qemu-devel] [PATCH 09/19] chardev: switch parallel " Gerd Hoffmann
2013-03-12  8:56 ` [Qemu-devel] [PATCH 10/19] chardev: switch pty " Gerd Hoffmann
2013-03-12  8:56 ` [Qemu-devel] [PATCH 11/19] chardev: add console support " Gerd Hoffmann
2013-03-12  8:56 ` [Qemu-devel] [PATCH 12/19] chardev: add pipe " Gerd Hoffmann
2013-03-12  8:56 ` [Qemu-devel] [PATCH 13/19] chardev: add spice " Gerd Hoffmann
2013-03-12  8:56 ` [Qemu-devel] [PATCH 14/19] chardev: add vc " Gerd Hoffmann
2013-03-12  8:56 ` [Qemu-devel] [PATCH 15/19] [fixup] vc Gerd Hoffmann
2013-03-12 17:42   ` Eric Blake
2013-03-13  6:46     ` Gerd Hoffmann
2013-03-12  8:56 ` [Qemu-devel] [PATCH 16/19] chardev: add memory (ringbuf) support to qapi Gerd Hoffmann
2013-03-12  8:56 ` [Qemu-devel] [PATCH 17/19] chardev: add udp " Gerd Hoffmann
2013-03-12  8:56 ` [Qemu-devel] [PATCH 18/19] Revert "hmp: Disable chardev-add and chardev-remove" Gerd Hoffmann
2013-03-12  8:56 ` [Qemu-devel] [PATCH 19/19] qemu-char.c: fix waiting for telnet connection message Gerd Hoffmann
2013-03-12  9:08 ` [Qemu-devel] [PULL v3 00/19] chardev: qapi conversion continued Gerd Hoffmann
2013-03-13 12:39   ` Anthony Liguori

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).