[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 01/19] chardev: add support for qapi-based chardev i
From: |
Gerd Hoffmann |
Subject: |
[Qemu-devel] [PATCH 01/19] chardev: add support for qapi-based chardev initialization |
Date: |
Tue, 12 Mar 2013 09:56:11 +0100 |
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 <address@hidden>
---
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
- [Qemu-devel] [PULL v3 00/19] chardev: qapi conversion continued, Gerd Hoffmann, 2013/03/12
- [Qemu-devel] [PATCH 04/19] chardev: add msmouse support to qapi, Gerd Hoffmann, 2013/03/12
- [Qemu-devel] [PATCH 01/19] chardev: add support for qapi-based chardev initialization,
Gerd Hoffmann <=
- [Qemu-devel] [PATCH 09/19] chardev: switch parallel init to qapi, Gerd Hoffmann, 2013/03/12
- [Qemu-devel] [PATCH 03/19] chardev: switch null init to qapi, Gerd Hoffmann, 2013/03/12
- [Qemu-devel] [PATCH 06/19] chardev: switch file init to qapi, Gerd Hoffmann, 2013/03/12
- [Qemu-devel] [PATCH 08/19] chardev: switch serial/tty init to qapi, Gerd Hoffmann, 2013/03/12
- [Qemu-devel] [PATCH 02/19] chardev: add mux chardev support to qapi, Gerd Hoffmann, 2013/03/12
- [Qemu-devel] [PATCH 05/19] chardev: add braille support to qapi, Gerd Hoffmann, 2013/03/12
- [Qemu-devel] [PATCH 11/19] chardev: add console support to qapi, Gerd Hoffmann, 2013/03/12
- Re: [Qemu-devel] [PULL v3 00/19] chardev: qapi conversion continued, Gerd Hoffmann, 2013/03/12
- [Qemu-devel] [PATCH 19/19] qemu-char.c: fix waiting for telnet connection message, Gerd Hoffmann, 2013/03/12