@@ -107,7 +107,7 @@ static inline DeviceState *milkymist_tmu2_create(hwaddr base,
int nelements;
int ver_major, ver_minor;
- if (display_type == DT_NOGRAPHIC) {
+ if (display_type == DT_NONE) {
return NULL;
}
@@ -510,7 +510,7 @@ FWCfgState *fw_cfg_init(uint32_t ctl_port, uint32_t data_port,
}
fw_cfg_add_bytes(s, FW_CFG_SIGNATURE, (char *)"QEMU", 4);
fw_cfg_add_bytes(s, FW_CFG_UUID, qemu_uuid, 16);
- fw_cfg_add_i16(s, FW_CFG_NOGRAPHIC, (uint16_t)(display_type == DT_NOGRAPHIC));
+ fw_cfg_add_i16(s, FW_CFG_NOGRAPHIC, (uint16_t)(display_type == DT_NONE));
fw_cfg_add_i16(s, FW_CFG_NB_CPUS, (uint16_t)smp_cpus);
fw_cfg_add_i16(s, FW_CFG_BOOT_MENU, (uint16_t)boot_menu);
fw_cfg_bootsplash(s);
@@ -919,7 +919,7 @@ static void sun4m_hw_init(const struct sun4m_hwdef *hwdef, ram_addr_t RAM_size,
slavio_timer_init_all(hwdef->counter_base, slavio_irq[19], slavio_cpu_irq, smp_cpus);
slavio_serial_ms_kbd_init(hwdef->ms_kb_base, slavio_irq[14],
- display_type == DT_NOGRAPHIC, ESCC_CLOCK, 1);
+ display_type == DT_NONE, ESCC_CLOCK, 1);
/* Slavio TTYA (base+4, Linux ttyS0) is the first QEMU serial device
Slavio TTYB (base+0, Linux ttyS1) is the second QEMU serial device */
escc_init(hwdef->serial_base, slavio_irq[15], slavio_irq[15],
@@ -87,12 +87,12 @@ void do_info_slirp(Monitor *mon);
typedef enum DisplayType
{
- DT_DEFAULT,
+ DT__DEFAULT = -1, /* used internally in vl.c */
+ DT__NOGRAPHIC = -2, /* used internally in vl.c */
+ DT_NONE = 0,
DT_CURSES,
DT_SDL,
DT_GTK,
- DT_NOGRAPHIC,
- DT_NONE,
} DisplayType;
extern int autostart;
@@ -825,7 +825,12 @@ a text mode. Generally only the VGA device models support text mode.
@item none
Do not display video output. The guest will still see an emulated
graphics card, but its output will not be displayed to the QEMU
-user. This option differs from the -nographic option in that it
+user. The fact that we have no display is passed to firmware and
+affects a few other places depending on the target architecture,
+like switching console output to serial console or disabling keyboard
+input.
+
+This option differs from the -nographic option in that it
only affects what is done with video output; -nographic also changes
the destination of the serial and parallel port data.
@item vnc
@@ -841,10 +846,12 @@ STEXI
@findex -nographic
Normally, QEMU uses SDL to display the VGA output. With this option,
you can totally disable graphical output so that QEMU is a simple
-command line application. The emulated serial port is redirected on
-the console and muxed with the monitor (unless redirected elsewhere
-explicitly). Therefore, you can still use QEMU to debug a Linux kernel
-with a serial console.
+command line application. When this option is specified,
+the emulated serial port and the monitor are by default multiplexed
+on the console (stdio). This option is equivalent to
+@example
+-display none -serial mon:stdio -parallel none
+@end example
ETEXI
DEF("curses", 0, QEMU_OPTION_curses,
@@ -2867,12 +2874,11 @@ STEXI
@item -echr @var{numeric_ascii_value}
@findex -echr
Change the escape character used for switching to the monitor when using
-monitor and serial sharing. The default is @code{0x01} when using the
-@code{-nographic} option. @code{0x01} is equal to pressing
-@code{Control-a}. You can select a different character from the ascii
-control keys where 1 through 26 map to Control-a through Control-z. For
-instance you could use the either of the following to change the escape
-character to Control-t.
+monitor and serial sharing. The default is @code{0x01}, which is equivalent
+to pressing @code{Control-a}.
+You can select a different character from the ascii control keys where
+1 through 26 map to Control-a through Control-z. For instance you could
+use the either of the following to change the escape character to Control-t.
@table @code
@item -echr 0x14
@item -echr 20
@@ -183,7 +183,7 @@ static const char *data_dir[16];
static int data_dir_idx;
const char *bios_name = NULL;
enum vga_retrace_method vga_retrace_method = VGA_RETRACE_DUMB;
-DisplayType display_type = DT_DEFAULT;
+DisplayType display_type = DT__DEFAULT;
static int display_remote;
const char* keyboard_layout = NULL;
ram_addr_t ram_size;
@@ -2183,7 +2183,7 @@ static void select_vgahw (const char *p)
static DisplayType select_display(const char *p)
{
const char *opts;
- DisplayType display = DT_DEFAULT;
+ DisplayType display = DT__DEFAULT;
if (strstart(p, "sdl", &opts)) {
#ifdef CONFIG_SDL
@@ -3125,7 +3125,7 @@ int main(int argc, char **argv, char **envp)
display_type = select_display(optarg);
break;
case QEMU_OPTION_nographic:
- display_type = DT_NOGRAPHIC;
+ display_type = DT__NOGRAPHIC;
break;
case QEMU_OPTION_curses:
#ifdef CONFIG_CURSES
@@ -3971,7 +3971,7 @@ int main(int argc, char **argv, char **envp)
* -nographic _and_ redirects all ports explicitly - this is valid
* usage, -nographic is just a no-op in this case.
*/
- if (display_type == DT_NOGRAPHIC
+ if (display_type == DT__NOGRAPHIC
&& (default_parallel || default_serial
|| default_monitor || default_virtcon)) {
fprintf(stderr, "-nographic can not be used with -daemonize\n");
@@ -3985,7 +3985,8 @@ int main(int argc, char **argv, char **envp)
#endif
}
- if (display_type == DT_NOGRAPHIC) {
+ if (display_type == DT__NOGRAPHIC) {
+ display_type = DT_NONE;
if (default_parallel)
add_device_config(DEV_PARALLEL, "null");
if (default_serial && default_monitor) {
@@ -4019,7 +4020,7 @@ int main(int argc, char **argv, char **envp)
}
}
- if (display_type == DT_DEFAULT && !display_remote) {
+ if (display_type == DT__DEFAULT && !display_remote) {
#if defined(CONFIG_GTK)
display_type = DT_GTK;
#elif defined(CONFIG_SDL) || defined(CONFIG_COCOA)
@@ -4309,8 +4310,6 @@ int main(int argc, char **argv, char **envp)
/* init local displays */
switch (display_type) {
- case DT_NOGRAPHIC:
- break;
#if defined(CONFIG_CURSES)
case DT_CURSES:
curses_display_init(ds, full_screen);
It looks like initially there was -nographic option to turn off display, now there's another option of the same sort, -display none. But code in other places of qemu checks for DT_NOGRAPHIC and does not work well with -display none. Make DT_NOGRAPHIC an internal version which selects DT_NONE, and check for that in all other places where previously we checked for DT_NOGRAPHIC. While at it, rename two private variants of display (DT_DEFAULT and DT_NOGRAPHIC) to use two underscores and make them negative, and set DT_NONE to 0. This should fix the issue of non-working sun serial console with the suggested replacement of -nographic which is -display none. Cc: Todd T. Fries <todd@fries.net> Signed-off-by: Michael Tokarev <mjt@tls.msk.ru> --- V2: - do not touch qemu-char, fixed differently as suggested by pbonzini - a bit more explicit comments about private DT__* constants - documentation additions and fixes to describe actual reality V3: - documentation rewording/fixes, no code changed hw/lm32/milkymist-hw.h | 2 +- hw/nvram/fw_cfg.c | 2 +- hw/sparc/sun4m.c | 2 +- include/sysemu/sysemu.h | 6 +++--- qemu-options.hx | 28 +++++++++++++++++----------- vl.c | 15 +++++++-------- 6 files changed, 30 insertions(+), 25 deletions(-)