qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Anthony Liguori <aliguori@us.ibm.com>
To: Glauber Costa <glommer@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: [Qemu-devel] Re: [PATCH] run vnc without sdl
Date: Thu, 21 May 2009 16:58:08 -0500	[thread overview]
Message-ID: <4A15CE70.7030201@us.ibm.com> (raw)
In-Reply-To: <1242930079-19798-1-git-send-email-glommer@redhat.com>

[-- Attachment #1: Type: text/plain, Size: 617 bytes --]

Glauber Costa wrote:
> commit f92f8afebe038a4eae9ad90a140c9529f94919a6
> "Eliminate --disable-gfx-check and make VNC default when SDL not available"
> broke usage of vnc. Passing -vnc <something> now fails because it cannot initialize
> SDL.
>
> Signed-off-by: Glauber Costa <glommer@redhat.com>
>   

What do you think about the attached?  My goal with the original 
refactoring was to more cleanly separate things that's why I didn't want 
to introduce the !vnc_display.

Ideally, we could make the various display states register themselves 
and completely eliminate the #ifdefs...

-- 
Regards,

Anthony Liguori


[-- Attachment #2: introduce_display_type.patch --]
[-- Type: text/x-patch, Size: 7780 bytes --]

commit e83ee25a46da8f612692337ce4a8207661163d09
Author: Anthony Liguori <aliguori@us.ibm.com>
Date:   Thu May 21 16:54:00 2009 -0500

    Refactor how display drivers are selected
    
    My previous commit, f92f8afebe,  broke -vnc (spotted by Glauber Costa).  This
    is because it's necessary to tell when the no special display parameters have
    been passed and default to SDL or VNC appropriately.
    
    This refactors the display selection logic to be less complicated which has
    the effect of fixing the regression mentioned above.
    
    Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>

diff --git a/hw/fw_cfg.c b/hw/fw_cfg.c
index 39bd955..e605cda 100644
--- a/hw/fw_cfg.c
+++ b/hw/fw_cfg.c
@@ -277,7 +277,7 @@ void *fw_cfg_init(uint32_t ctl_port, uint32_t data_port,
     }
     fw_cfg_add_bytes(s, FW_CFG_SIGNATURE, (uint8_t *)"QEMU", 4);
     fw_cfg_add_bytes(s, FW_CFG_UUID, qemu_uuid, 16);
-    fw_cfg_add_i16(s, FW_CFG_NOGRAPHIC, (uint16_t)nographic);
+    fw_cfg_add_i16(s, FW_CFG_NOGRAPHIC, (uint16_t)(display_type == DT_NOGRAPHIC));
     fw_cfg_add_i16(s, FW_CFG_NB_CPUS, (uint16_t)smp_cpus);
 
     register_savevm("fw_cfg", -1, 1, fw_cfg_save, fw_cfg_load, s);
diff --git a/qemu-char.c b/qemu-char.c
index 664cbfd..1c0c9f5 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -571,7 +571,7 @@ static void fd_chr_update_read_handler(CharDriverState *chr)
     FDCharDriver *s = chr->opaque;
 
     if (s->fd_in >= 0) {
-        if (nographic && s->fd_in == 0) {
+        if (display_type == DT_NOGRAPHIC && s->fd_in == 0) {
         } else {
             qemu_set_fd_handler2(s->fd_in, fd_chr_read_poll,
                                  fd_chr_read, NULL, chr);
@@ -584,7 +584,7 @@ static void fd_chr_close(struct CharDriverState *chr)
     FDCharDriver *s = chr->opaque;
 
     if (s->fd_in >= 0) {
-        if (nographic && s->fd_in == 0) {
+        if (display_type == DT_NOGRAPHIC && s->fd_in == 0) {
         } else {
             qemu_set_fd_handler2(s->fd_in, NULL, NULL, NULL, NULL);
         }
@@ -714,7 +714,7 @@ static void term_init(void)
     tty.c_oflag |= OPOST;
     tty.c_lflag &= ~(ECHO|ECHONL|ICANON|IEXTEN);
     /* if graphical mode, we allow Ctrl-C handling */
-    if (nographic)
+    if (display_type == DT_NOGRAPHIC)
         tty.c_lflag &= ~ISIG;
     tty.c_cflag &= ~(CSIZE|PARENB);
     tty.c_cflag |= CS8;
diff --git a/sysemu.h b/sysemu.h
index 7d65804..4063533 100644
--- a/sysemu.h
+++ b/sysemu.h
@@ -86,6 +86,15 @@ int tap_win32_init(VLANState *vlan, const char *model,
 /* SLIRP */
 void do_info_slirp(Monitor *mon);
 
+typedef enum DisplayType
+{
+    DT_DEFAULT,
+    DT_CURSES,
+    DT_SDL,
+    DT_VNC,
+    DT_NOGRAPHIC,
+} DisplayType;
+
 extern int bios_size;
 extern int cirrus_vga_enabled;
 extern int std_vga_enabled;
@@ -94,7 +103,7 @@ extern int xenfb_enabled;
 extern int graphic_width;
 extern int graphic_height;
 extern int graphic_depth;
-extern int nographic;
+extern DisplayType display_type;
 extern const char *keyboard_layout;
 extern int win2k_install_hack;
 extern int rtc_td_hack;
diff --git a/vl.c b/vl.c
index 68c8514..a0ce977 100644
--- a/vl.c
+++ b/vl.c
@@ -201,9 +201,7 @@ DriveInfo drives_table[MAX_DRIVES+1];
 int nb_drives;
 enum vga_retrace_method vga_retrace_method = VGA_RETRACE_DUMB;
 static DisplayState *display_state;
-int nographic;
-static int curses;
-static int sdl = 1;
+DisplayType display_type = DT_DEFAULT;
 const char* keyboard_layout = NULL;
 int64_t ticks_per_sec;
 ram_addr_t ram_size;
@@ -4842,6 +4840,7 @@ int main(int argc, char **argv, char **envp)
     const char *run_as = NULL;
 #endif
     CPUState *env;
+    int show_vnc_port = 0;
 
     qemu_cache_utils_init(envp);
 
@@ -4882,8 +4881,6 @@ int main(int argc, char **argv, char **envp)
     initrd_filename = NULL;
     ram_size = 0;
     snapshot = 0;
-    nographic = 0;
-    curses = 0;
     kernel_filename = NULL;
     kernel_cmdline = "";
     cyls = heads = secs = 0;
@@ -5075,11 +5072,11 @@ int main(int argc, char **argv, char **envp)
                 numa_add(optarg);
                 break;
             case QEMU_OPTION_nographic:
-                nographic = 1;
+                display_type = DT_NOGRAPHIC;
                 break;
 #ifdef CONFIG_CURSES
             case QEMU_OPTION_curses:
-                curses = 1;
+                display_type = DT_CURSES;
                 break;
 #endif
             case QEMU_OPTION_portrait:
@@ -5358,7 +5355,7 @@ int main(int argc, char **argv, char **envp)
                 no_quit = 1;
                 break;
             case QEMU_OPTION_sdl:
-                sdl = 1;
+                display_type = DT_SDL;
                 break;
 #endif
             case QEMU_OPTION_pidfile:
@@ -5420,6 +5417,7 @@ int main(int argc, char **argv, char **envp)
                 }
                 break;
 	    case QEMU_OPTION_vnc:
+                display_type = DT_VNC;
 		vnc_display = optarg;
 		break;
 #ifdef TARGET_I386
@@ -5578,7 +5576,7 @@ int main(int argc, char **argv, char **envp)
         exit(1);
     }
 
-    if (nographic) {
+    if (display_type == DT_NOGRAPHIC) {
        if (serial_device_index == 0)
            serial_devices[0] = "stdio";
        if (parallel_device_index == 0)
@@ -5944,44 +5942,46 @@ int main(int argc, char **argv, char **envp)
         dumb_display_init();
     /* just use the first displaystate for the moment */
     ds = display_state;
-    /* terminal init */
-    if (nographic) {
-        if (curses) {
-            fprintf(stderr, "fatal: -nographic can't be used with -curses\n");
-            exit(1);
-        }
-    } else { 
+
+    if (display_type == DT_DEFAULT) {
+#if defined(CONFIG_SDL) || defined(CONFIG_COCOA)
+        display_type = DT_SDL;
+#else
+        display_type = DT_VNC;
+        vnc_display = "localhost:0,to=99";
+        show_vnc_port = 1;
+#endif
+    }
+        
+
+    switch (display_type) {
+    case DT_NOGRAPHIC:
+        break;
 #if defined(CONFIG_CURSES)
-        if (curses) {
-            /* At the moment curses cannot be used with other displays */
-            curses_display_init(ds, full_screen);
-        } else
+    case DT_CURSES:
+        curses_display_init(ds, full_screen);
+        break;
 #endif
-#if defined(CONFIG_SDL) || defined(CONFIG_COCOA)
-        if (sdl) {
 #if defined(CONFIG_SDL)
-            sdl_display_init(ds, full_screen, no_frame);
+    case DT_SDL:
+        sdl_display_init(ds, full_screen, no_frame);
+        break;
 #elif defined(CONFIG_COCOA)
-            cocoa_display_init(ds, full_screen);
-#endif
-        } else
+    case DT_SDL:
+        cocoa_display_init(ds, full_screen);
+        break;
 #endif
-        {
-            int print_port = 0;
-
-            if (vnc_display == NULL) {
-                vnc_display = "localhost:0,to=99";
-                print_port = 1;
-            }
-
-            vnc_display_init(ds);
-            if (vnc_display_open(ds, vnc_display) < 0)
-                exit(1);
+    case DT_VNC:
+        vnc_display_init(ds);
+        if (vnc_display_open(ds, vnc_display) < 0)
+            exit(1);
 
-            if (print_port) {
-                printf("VNC server running on `%s'\n", vnc_display_local_addr(ds));
-            }
+        if (show_vnc_port) {
+            printf("VNC server running on `%s'\n", vnc_display_local_addr(ds));
         }
+        break;
+    default:
+        break;
     }
     dpy_resize(ds);
 
@@ -5994,7 +5994,7 @@ int main(int argc, char **argv, char **envp)
         dcl = dcl->next;
     }
 
-    if (nographic || (vnc_display && !sdl)) {
+    if (display_type == DT_NOGRAPHIC || display_type == DT_VNC) {
         nographic_timer = qemu_new_timer(rt_clock, nographic_update, NULL);
         qemu_mod_timer(nographic_timer, qemu_get_clock(rt_clock));
     }

  reply	other threads:[~2009-05-21 21:58 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-05-21 18:21 [Qemu-devel] [PATCH] run vnc without sdl Glauber Costa
2009-05-21 21:58 ` Anthony Liguori [this message]
2009-05-21 22:19   ` [Qemu-devel] " Glauber Costa
2009-05-24 11:03   ` Avi Kivity

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=4A15CE70.7030201@us.ibm.com \
    --to=aliguori@us.ibm.com \
    --cc=glommer@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /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).