qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v2 04/18] ui/console: allow to override the default VC


From: marcandre . lureau
Subject: [PATCH v2 04/18] ui/console: allow to override the default VC
Date: Mon, 18 Sep 2023 17:51:51 +0400

From: Marc-André Lureau <marcandre.lureau@redhat.com>

If a display is backed by a specialized VC, allow to override the
default "vc:80Cx24C". For that, set the dpy.type just before creating
the default serial/parallel/monitor.

(the next patch makes it create a "null" backend by default if !PIXMAN)

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 include/ui/console.h |  2 ++
 softmmu/vl.c         | 45 +++++++++++++++++++++++---------------------
 ui/console.c         | 14 ++++++++++++++
 3 files changed, 40 insertions(+), 21 deletions(-)

diff --git a/include/ui/console.h b/include/ui/console.h
index 28882f15a5..08c0f0dc70 100644
--- a/include/ui/console.h
+++ b/include/ui/console.h
@@ -463,12 +463,14 @@ struct QemuDisplay {
     DisplayType type;
     void (*early_init)(DisplayOptions *opts);
     void (*init)(DisplayState *ds, DisplayOptions *opts);
+    const char *vc;
 };
 
 void qemu_display_register(QemuDisplay *ui);
 bool qemu_display_find_default(DisplayOptions *opts);
 void qemu_display_early_init(DisplayOptions *opts);
 void qemu_display_init(DisplayState *ds, DisplayOptions *opts);
+const char *qemu_display_get_vc(DisplayOptions *opts);
 void qemu_display_help(void);
 
 /* vnc.c */
diff --git a/softmmu/vl.c b/softmmu/vl.c
index 3db4fd2680..8850cd3121 100644
--- a/softmmu/vl.c
+++ b/softmmu/vl.c
@@ -1361,6 +1361,23 @@ static void qemu_create_default_devices(void)
         }
     }
 
+#if defined(CONFIG_VNC)
+    if (!QTAILQ_EMPTY(&(qemu_find_opts("vnc")->head))) {
+        display_remote++;
+    }
+#endif
+    if (dpy.type == DISPLAY_TYPE_DEFAULT && !display_remote) {
+        if (!qemu_display_find_default(&dpy)) {
+            dpy.type = DISPLAY_TYPE_NONE;
+#if defined(CONFIG_VNC)
+            vnc_parse("localhost:0,to=99,id=default");
+#endif
+        }
+    }
+    if (dpy.type == DISPLAY_TYPE_DEFAULT) {
+        dpy.type = DISPLAY_TYPE_NONE;
+    }
+
     if (nographic) {
         if (default_parallel)
             add_device_config(DEV_PARALLEL, "null");
@@ -1373,12 +1390,15 @@ static void qemu_create_default_devices(void)
                 monitor_parse("stdio", "readline", false);
         }
     } else {
-        if (default_serial)
-            add_device_config(DEV_SERIAL, "vc:80Cx24C");
+        const char *vc = qemu_display_get_vc(&dpy);
+
+        if (default_serial) {
+            add_device_config(DEV_SERIAL, vc);
+        }
         if (default_parallel)
-            add_device_config(DEV_PARALLEL, "vc:80Cx24C");
+            add_device_config(DEV_PARALLEL, vc);
         if (default_monitor)
-            monitor_parse("vc:80Cx24C", "readline", false);
+            monitor_parse(vc, "readline", false);
     }
 
     if (default_net) {
@@ -1389,23 +1409,6 @@ static void qemu_create_default_devices(void)
 #endif
     }
 
-#if defined(CONFIG_VNC)
-    if (!QTAILQ_EMPTY(&(qemu_find_opts("vnc")->head))) {
-        display_remote++;
-    }
-#endif
-    if (dpy.type == DISPLAY_TYPE_DEFAULT && !display_remote) {
-        if (!qemu_display_find_default(&dpy)) {
-            dpy.type = DISPLAY_TYPE_NONE;
-#if defined(CONFIG_VNC)
-            vnc_parse("localhost:0,to=99,id=default");
-#endif
-        }
-    }
-    if (dpy.type == DISPLAY_TYPE_DEFAULT) {
-        dpy.type = DISPLAY_TYPE_NONE;
-    }
-
     /* If no default VGA is requested, the default is "none".  */
     if (default_vga) {
         vga_model = get_default_vga_model(machine_class);
diff --git a/ui/console.c b/ui/console.c
index 4a4f19ed33..a38d24f075 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -1677,6 +1677,20 @@ void qemu_display_init(DisplayState *ds, DisplayOptions 
*opts)
     dpys[opts->type]->init(ds, opts);
 }
 
+const char *qemu_display_get_vc(DisplayOptions *opts)
+{
+    assert(opts->type < DISPLAY_TYPE__MAX);
+    if (opts->type == DISPLAY_TYPE_NONE) {
+        return NULL;
+    }
+    assert(dpys[opts->type] != NULL);
+    if (dpys[opts->type]->vc) {
+        return dpys[opts->type]->vc;
+    } else {
+        return "vc:80Cx24C";
+    }
+}
+
 void qemu_display_help(void)
 {
     int idx;
-- 
2.41.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]