diff mbox

[v3,2/2] display: stop using DT_NOGRAPHIC, use DT_NONE

Message ID 1372868986-25988-2-git-send-email-mjt@msgid.tls.msk.ru
State New
Headers show

Commit Message

Michael Tokarev July 3, 2013, 4:29 p.m. UTC
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(-)

Comments

Peter Maydell July 9, 2013, 2:07 p.m. UTC | #1
On 3 July 2013 17:29, Michael Tokarev <mjt@tls.msk.ru> wrote:
> 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>

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>

I tested, and this retains the current behaviour for the
two use cases I care about (-display none -serial stdio
vs -nographic).

thanks
-- PMM
diff mbox

Patch

diff --git a/hw/lm32/milkymist-hw.h b/hw/lm32/milkymist-hw.h
index 5317ce6..59af720 100644
--- a/hw/lm32/milkymist-hw.h
+++ b/hw/lm32/milkymist-hw.h
@@ -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;
     }
 
diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c
index 3c255ce..b3d163a 100644
--- a/hw/nvram/fw_cfg.c
+++ b/hw/nvram/fw_cfg.c
@@ -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);
diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c
index 0e86ca7..c1d42ec 100644
--- a/hw/sparc/sun4m.c
+++ b/hw/sparc/sun4m.c
@@ -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],
diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
index 2fb71af..d1b7bd7 100644
--- a/include/sysemu/sysemu.h
+++ b/include/sysemu/sysemu.h
@@ -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;
diff --git a/qemu-options.hx b/qemu-options.hx
index 7cc4d8e..8bd8f01 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -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
diff --git a/vl.c b/vl.c
index 6d9fd7d..98d3e62 100644
--- a/vl.c
+++ b/vl.c
@@ -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);