[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 1/9] chardev: add support for qapi-based chardev ini
From: |
Gerd Hoffmann |
Subject: |
[Qemu-devel] [PATCH 1/9] chardev: add support for qapi-based chardev initialization |
Date: |
Mon, 25 Feb 2013 10:03:33 +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>
---
qemu-char.c | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
diff --git a/qemu-char.c b/qemu-char.c
index 160decc..cf6b98b 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -2974,7 +2974,11 @@ static CharDriverState *qemu_chr_open_pp(QemuOpts *opts)
static const struct {
const char *name;
+ /* old, pre qapi */
CharDriverState *(*open)(QemuOpts *opts);
+ /* new, qapi-based */
+ const int kind;
+ void (*parse)(QemuOpts *opts, ChardevBackend *backend, Error **errp);
} backend_table[] = {
{ .name = "null", .open = qemu_chr_open_null },
{ .name = "socket", .open = qemu_chr_open_socket },
@@ -3040,6 +3044,32 @@ CharDriverState *qemu_chr_new_from_opts(QemuOpts *opts,
goto err;
}
+ if (!backend_table[i].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 = backend_table[i].kind;
+ if (backend_table[i].parse) {
+ backend_table[i].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 = backend_table[i].open(opts);
if (!chr) {
error_setg(errp, "chardev: opening backend \"%s\" failed",
--
1.7.9.7
- [Qemu-devel] [PATCH 0/9] chardev: qapi conversion continued, Gerd Hoffmann, 2013/02/25
- [Qemu-devel] [PATCH 1/2] require gtk 2.20+, Gerd Hoffmann, 2013/02/25
- [Qemu-devel] [PATCH 3/9] chardev: switch null init to qapi, Gerd Hoffmann, 2013/02/25
- [Qemu-devel] [PATCH 8/9] chardev: switch serial/tty init to qapi, Gerd Hoffmann, 2013/02/25
- [Qemu-devel] [PATCH 5/9] chardev: add braille support to qapi, Gerd Hoffmann, 2013/02/25
- [Qemu-devel] [PATCH 7/9] chardev: add stdio support to qapi, Gerd Hoffmann, 2013/02/25
- [Qemu-devel] [PATCH 6/9] chardev: switch file init to qapi, Gerd Hoffmann, 2013/02/25