From: Marc-André Lureau <marcandre.lur...@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.lur...@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