From: marcandre.lureau@redhat.com
To: qemu-devel@nongnu.org
Cc: "Thomas Huth" <thuth@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
"Daniel P. Berrangé" <berrange@redhat.com>,
qemu-arm@nongnu.org, "BALATON Zoltan" <balaton@eik.bme.hu>,
"Dr. David Alan Gilbert" <dave@treblig.org>,
qemu-ppc@nongnu.org, "Markus Armbruster" <armbru@redhat.com>,
"Gerd Hoffmann" <kraxel@redhat.com>,
"Marc-André Lureau" <marcandre.lureau@redhat.com>,
"Peter Maydell" <peter.maydell@linaro.org>,
"Eric Blake" <eblake@redhat.com>,
"Michael S. Tsirkin" <mst@redhat.com>
Subject: [PATCH v4 05/19] ui/console: allow to override the default VC
Date: Wed, 18 Oct 2023 17:38:06 +0400 [thread overview]
Message-ID: <20231018133820.1556962-6-marcandre.lureau@redhat.com> (raw)
In-Reply-To: <20231018133820.1556962-1-marcandre.lureau@redhat.com>
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.
As suggested by Paolo, if the display doesn't implement a VC (get_vc()
returns NULL), use a fallback that will use a muxed console on stdio.
This changes the behaviour of "qemu -display none", to create a muxed
serial/monitor by default.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
include/ui/console.h | 2 ++
system/vl.c | 62 +++++++++++++++++++++++++-------------------
ui/console.c | 14 ++++++++++
3 files changed, 51 insertions(+), 27 deletions(-)
diff --git a/include/ui/console.h b/include/ui/console.h
index acb61a7f15..a4a49ffc64 100644
--- a/include/ui/console.h
+++ b/include/ui/console.h
@@ -462,12 +462,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/system/vl.c b/system/vl.c
index 73e4ed2bef..66b34f2ab9 100644
--- a/system/vl.c
+++ b/system/vl.c
@@ -1364,24 +1364,49 @@ static void qemu_create_default_devices(void)
}
}
- if (nographic) {
- if (default_parallel)
+#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;
+ }
+
+ const char *vc = qemu_display_get_vc(&dpy);
+
+ if (nographic || (!vc && !is_daemonized() && isatty(STDOUT_FILENO))) {
+ if (default_parallel) {
add_device_config(DEV_PARALLEL, "null");
+ }
if (default_serial && default_monitor) {
add_device_config(DEV_SERIAL, "mon:stdio");
} else {
- if (default_serial)
+ if (default_serial) {
add_device_config(DEV_SERIAL, "stdio");
- if (default_monitor)
+ }
+ if (default_monitor) {
monitor_parse("stdio", "readline", false);
+ }
}
} else {
- if (default_serial)
- add_device_config(DEV_SERIAL, "vc:80Cx24C");
- if (default_parallel)
- add_device_config(DEV_PARALLEL, "vc:80Cx24C");
- if (default_monitor)
- monitor_parse("vc:80Cx24C", "readline", false);
+ if (default_serial) {
+ add_device_config(DEV_SERIAL, vc ?: "null");
+ }
+ if (default_parallel) {
+ add_device_config(DEV_PARALLEL, vc ?: "null");
+ }
+ if (default_monitor && vc) {
+ monitor_parse(vc, "readline", false);
+ }
}
if (default_net) {
@@ -1392,23 +1417,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 8ee66d10c5..a758ed62ad 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -1675,6 +1675,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
next prev parent reply other threads:[~2023-10-18 13:43 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-18 13:38 [PATCH v4 00/19] Make Pixman an optional dependency marcandre.lureau
2023-10-18 13:38 ` [PATCH v4 01/19] build-sys: add a "pixman" feature marcandre.lureau
2023-10-18 13:38 ` [PATCH v4 02/19] ui: compile out some qemu-pixman functions when !PIXMAN marcandre.lureau
2023-10-18 13:38 ` [PATCH v4 03/19] ui: add pixman-compat.h marcandre.lureau
2023-10-18 13:38 ` [PATCH v4 04/19] vl: move display early init before default devices marcandre.lureau
2023-10-18 14:18 ` Marc-André Lureau
2023-10-18 13:38 ` marcandre.lureau [this message]
2023-10-18 13:38 ` [PATCH v4 06/19] ui/vc: console-vc requires PIXMAN marcandre.lureau
2023-10-18 13:38 ` [PATCH v4 07/19] qmp/hmp: disable screendump if PIXMAN is missing marcandre.lureau
2023-10-18 13:38 ` [PATCH v4 08/19] virtio-gpu: replace PIXMAN for region/rect test marcandre.lureau
2023-10-18 13:38 ` [PATCH v4 09/19] ui/console: when PIXMAN is unavailable, don't draw placeholder msg marcandre.lureau
2023-10-18 13:38 ` [PATCH v4 10/19] vhost-user-gpu: skip VHOST_USER_GPU_UPDATE when !PIXMAN marcandre.lureau
2023-10-18 13:38 ` [PATCH v4 11/19] ui/gl: opengl doesn't require PIXMAN marcandre.lureau
2023-10-18 13:38 ` [PATCH v4 12/19] ui/vnc: VNC requires PIXMAN marcandre.lureau
2023-10-18 13:38 ` [PATCH v4 13/19] ui/spice: SPICE/QXL " marcandre.lureau
2023-10-18 13:38 ` [PATCH v4 14/19] ui/gtk: -display gtk " marcandre.lureau
2023-10-18 13:38 ` [PATCH v4 15/19] ui/dbus: do not require PIXMAN marcandre.lureau
2023-10-18 13:38 ` [PATCH v4 16/19] arm/kconfig: XLNX_ZYNQMP_ARM depends on PIXMAN marcandre.lureau
2023-10-18 13:38 ` [PATCH v4 17/19] hw/sm501: allow compiling without PIXMAN marcandre.lureau
2023-10-18 13:38 ` [PATCH v4 18/19] hw/display: make ATI_VGA depend on PIXMAN marcandre.lureau
2023-10-18 13:38 ` [PATCH v4 19/19] build-sys: make pixman actually optional marcandre.lureau
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231018133820.1556962-6-marcandre.lureau@redhat.com \
--to=marcandre.lureau@redhat.com \
--cc=armbru@redhat.com \
--cc=balaton@eik.bme.hu \
--cc=berrange@redhat.com \
--cc=dave@treblig.org \
--cc=eblake@redhat.com \
--cc=kraxel@redhat.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=philmd@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=thuth@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).