diff options
author | Marc-André Lureau <marcandre.lureau@redhat.com> | 2021-09-29 20:32:28 +0400 |
---|---|---|
committer | Marc-André Lureau <marcandre.lureau@redhat.com> | 2021-12-21 10:50:22 +0400 |
commit | 7f767ca35e54f391061a9f574c916168b0bee1a6 (patch) | |
tree | 605506b9642984481a68196e52b0afba1225f4e3 /ui | |
parent | 3e301c8d7ef0259c7e19277ea93a9915b55a1c6d (diff) | |
download | qemu-7f767ca35e54f391061a9f574c916168b0bee1a6.zip qemu-7f767ca35e54f391061a9f574c916168b0bee1a6.tar.gz qemu-7f767ca35e54f391061a9f574c916168b0bee1a6.tar.bz2 |
ui/dbus: register D-Bus VC handler
Export the default consoles over the D-Bus chardev.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Acked-by: Gerd Hoffmann <kraxel@redhat.com>
Diffstat (limited to 'ui')
-rw-r--r-- | ui/dbus.c | 53 |
1 files changed, 53 insertions, 0 deletions
@@ -357,6 +357,57 @@ dbus_display_class_init(ObjectClass *oc, void *data) get_gl_mode, set_gl_mode); } +#define TYPE_CHARDEV_VC "chardev-vc" + +typedef struct DBusVCClass { + DBusChardevClass parent_class; + + void (*parent_parse)(QemuOpts *opts, ChardevBackend *b, Error **errp); +} DBusVCClass; + +DECLARE_CLASS_CHECKERS(DBusVCClass, DBUS_VC, + TYPE_CHARDEV_VC) + +static void +dbus_vc_parse(QemuOpts *opts, ChardevBackend *backend, + Error **errp) +{ + DBusVCClass *klass = DBUS_VC_CLASS(object_class_by_name(TYPE_CHARDEV_VC)); + const char *name = qemu_opt_get(opts, "name"); + const char *id = qemu_opts_id(opts); + + if (name == NULL) { + if (g_str_has_prefix(id, "compat_monitor")) { + name = "org.qemu.monitor.hmp.0"; + } else if (g_str_has_prefix(id, "serial")) { + name = "org.qemu.console.serial.0"; + } else { + name = ""; + } + if (!qemu_opt_set(opts, "name", name, errp)) { + return; + } + } + + klass->parent_parse(opts, backend, errp); +} + +static void +dbus_vc_class_init(ObjectClass *oc, void *data) +{ + DBusVCClass *klass = DBUS_VC_CLASS(oc); + ChardevClass *cc = CHARDEV_CLASS(oc); + + klass->parent_parse = cc->parse; + cc->parse = dbus_vc_parse; +} + +static const TypeInfo dbus_vc_type_info = { + .name = TYPE_CHARDEV_VC, + .parent = TYPE_CHARDEV_DBUS, + .class_init = dbus_vc_class_init, +}; + static void early_dbus_init(DisplayOptions *opts) { @@ -370,6 +421,8 @@ early_dbus_init(DisplayOptions *opts) display_opengl = 1; } + + type_register(&dbus_vc_type_info); } static void |