]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
kvm tools: ui improvements
authorSasha Levin <levinsasha928@gmail.com>
Wed, 5 Sep 2012 08:31:58 +0000 (10:31 +0200)
committerPekka Enberg <penberg@kernel.org>
Wed, 5 Sep 2012 13:22:38 +0000 (16:22 +0300)
Move the vesa initialization logic into sdl__init() and vnc__init(), builtin-run
shouldn't have to know about the conditions for initializing vesa on it's own.

Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
tools/kvm/builtin-run.c
tools/kvm/hw/vesa.c
tools/kvm/include/kvm/kvm-config.h
tools/kvm/include/kvm/sdl.h
tools/kvm/include/kvm/vnc.h
tools/kvm/ui/sdl.c
tools/kvm/ui/vnc.c

index 56639e25b38073258ad287a5b70a888efac2daea..1ad574d750300493d7d8265e3e21593bd3e6bd53 100644 (file)
@@ -60,8 +60,6 @@ static int  kvm_run_wrapper;
 
 bool do_debug_print = false;
 
-static int vidmode = -1;
-
 extern char _binary_guest_init_start;
 extern char _binary_guest_init_size;
 
@@ -201,7 +199,7 @@ static int virtio_9p_rootdir_parser(const struct option *opt, const char *arg, i
                        in rootfs mode"),                               \
                                                                        \
        OPT_GROUP("BIOS options:"),                                     \
-       OPT_INTEGER('\0', "vidmode", &vidmode,                          \
+       OPT_INTEGER('\0', "vidmode", &(cfg)->vidmode,                   \
                    "Video mode"),                                      \
                                                                        \
        OPT_GROUP("Debug options:"),                                    \
@@ -530,7 +528,6 @@ static void kvm_run_write_sandbox_cmd(const char **argv, int argc)
 static int kvm_cmd_run_init(int argc, const char **argv)
 {
        static char real_cmdline[2048], default_name[20];
-       struct framebuffer *fb = NULL;
        unsigned int nr_online_cpus;
        int r;
 
@@ -642,6 +639,9 @@ static int kvm_cmd_run_init(int argc, const char **argv)
        if (!kvm->cfg.script)
                kvm->cfg.script = DEFAULT_SCRIPT;
 
+       if (!kvm->cfg.vnc && !kvm->cfg.sdl)
+               kvm->cfg.vidmode = -1;
+
        r = term_init(kvm);
        if (r < 0) {
                pr_err("term_init() failed with error %d\n", r);
@@ -691,17 +691,6 @@ static int kvm_cmd_run_init(int argc, const char **argv)
                goto fail;
        }
 
-       /*
-        * vidmode should be either specified
-        * either set by default
-        */
-       if (kvm->cfg.vnc || kvm->cfg.sdl) {
-               if (vidmode == -1)
-                       vidmode = 0x312;
-       } else {
-               vidmode = 0;
-       }
-
        memset(real_cmdline, 0, sizeof(real_cmdline));
        kvm__arch_set_cmdline(real_cmdline, kvm->cfg.vnc || kvm->cfg.sdl);
 
@@ -752,7 +741,7 @@ static int kvm_cmd_run_init(int argc, const char **argv)
 
        if (!kvm->cfg.firmware_filename) {
                if (!kvm__load_kernel(kvm, kvm->cfg.kernel_filename,
-                               kvm->cfg.initrd_filename, real_cmdline, vidmode))
+                               kvm->cfg.initrd_filename, real_cmdline, kvm->cfg.vidmode))
                        die("unable to load kernel %s", kvm->cfg.kernel_filename);
 
                kvm->vmlinux = kvm->cfg.vmlinux_filename;
@@ -830,28 +819,16 @@ static int kvm_cmd_run_init(int argc, const char **argv)
                goto fail;
        }
 
-       if (kvm->cfg.vnc || kvm->cfg.sdl) {
-               fb = vesa__init(kvm);
-               if (IS_ERR(fb)) {
-                       pr_err("vesa__init() failed with error %ld\n", PTR_ERR(fb));
-                       goto fail;
-               }
-       }
-
-       if (kvm->cfg.vnc && fb) {
-               r = vnc__init(fb);
-               if (r < 0) {
-                       pr_err("vnc__init() failed with error %d\n", r);
-                       goto fail;
-               }
+       r = vnc__init(kvm);
+       if (r < 0) {
+               pr_err("vnc__init() failed with error %d\n", r);
+               goto fail;
        }
 
-       if (kvm->cfg.sdl && fb) {
-               sdl__init(fb);
-               if (r < 0) {
-                       pr_err("sdl__init() failed with error %d\n", r);
-                       goto fail;
-               }
+       r = sdl__init(kvm);
+       if (r < 0) {
+               pr_err("sdl__init() failed with error %d\n", r);
+               goto fail;
        }
 
        r = fb__init(kvm);
index 09512d5d75f9cb65137f446d2e45ec9b034be46e..6f2d9f4107670c704fc789d037f821c137d613d4 100644 (file)
@@ -53,6 +53,9 @@ struct framebuffer *vesa__init(struct kvm *kvm)
        char *mem;
        int r;
 
+       if (!kvm->cfg.vnc && !kvm->cfg.sdl)
+               return NULL;
+
        r = irq__register_device(PCI_DEVICE_ID_VESA, &dev, &pin, &line);
        if (r < 0)
                return ERR_PTR(r);
index 1f06df32b35b211984d2a63271767d39c2d4faa9..5e7dc282455da94bdc6cb9e5f797dc3b6ff29047 100644 (file)
@@ -25,6 +25,7 @@ struct kvm_config {
        int active_console;
        int debug_iodelay;
        int nrcpus;
+       int vidmode;
        const char *kernel_cmdline;
        const char *kernel_filename;
        const char *vmlinux_filename;
index 36e5986d9ceeef110b41110490c5f88aafe3ec25..b4443337568936a098c9179243920ca4b05a2ee5 100644 (file)
@@ -6,14 +6,14 @@
 struct framebuffer;
 
 #ifdef CONFIG_HAS_SDL
-int sdl__init(struct framebuffer *fb);
-int sdl__exit(struct framebuffer *fb);
+int sdl__init(struct kvm *kvm);
+int sdl__exit(struct kvm *kvm);
 #else
-static inline void sdl__init(struct framebuffer *fb)
+static inline void sdl__init(struct kvm *kvm)
 {
        die("SDL support not compiled in. (install the SDL-dev[el] package)");
 }
-static inline void sdl__exit(struct framebuffer *fb)
+static inline void sdl__exit(struct kvm *kvm)
 {
        die("SDL support not compiled in. (install the SDL-dev[el] package)");
 }
index 3278c078b828bcb0e28cba4f6a0a345e850ad980..c2934a45f6dcc4b4edd541dd34b77a5bf84a69b7 100644 (file)
@@ -1,17 +1,19 @@
 #ifndef KVM__VNC_H
 #define KVM__VNC_H
 
+#include "kvm/kvm.h"
+
 struct framebuffer;
 
 #ifdef CONFIG_HAS_VNCSERVER
-int vnc__init(struct framebuffer *fb);
-int vnc__exit(struct framebuffer *fb);
+int vnc__init(struct kvm *kvm);
+int vnc__exit(struct kvm *kvm);
 #else
-static inline int vnc__init(struct framebuffer *fb)
+static inline int vnc__init(struct kvm *kvm)
 {
        return 0;
 }
-static inline int vnc__exit(struct framebuffer *fb)
+static inline int vnc__exit(struct kvm *kvm)
 {
        return 0;
 }
index 33c25826a17d0f915cb8fdf504fe9c2b7eec64f5..a041b3b84d54392e66b21fae423fdc9d7afaf839 100644 (file)
@@ -5,10 +5,12 @@
 #include "kvm/util.h"
 #include "kvm/kvm.h"
 #include "kvm/kvm-cpu.h"
+#include "kvm/vesa.h"
 
 #include <SDL/SDL.h>
 #include <pthread.h>
 #include <signal.h>
+#include <linux/err.h>
 
 #define FRAME_RATE             25
 
@@ -292,12 +294,23 @@ static struct fb_target_operations sdl_ops = {
        .stop   = sdl__stop,
 };
 
-int sdl__init(struct framebuffer *fb)
+int sdl__init(struct kvm *kvm)
 {
+       struct framebuffer *fb;
+
+       if (!kvm->cfg.sdl)
+               return 0;
+
+       fb = vesa__init(kvm);
+       if (IS_ERR(fb)) {
+               pr_err("vesa__init() failed with error %ld\n", PTR_ERR(fb));
+               return PTR_ERR(fb);
+       }
+
        return fb__attach(fb, &sdl_ops);
 }
 
-int sdl__exit(struct framebuffer *fb)
+int sdl__exit(struct kvm *kvm)
 {
-       return sdl__stop(fb);
+       return sdl__stop(NULL);
 }
index 91254c561d9425f40878f21220dc3e6b24322ff5..d445059929b213fb37f65a54f5d57198cb951113 100644 (file)
@@ -2,11 +2,13 @@
 
 #include "kvm/framebuffer.h"
 #include "kvm/i8042.h"
+#include "kvm/vesa.h"
 
 #include <linux/types.h>
 #include <rfb/keysym.h>
 #include <rfb/rfb.h>
 #include <pthread.h>
+#include <linux/err.h>
 
 #define VESA_QUEUE_SIZE                128
 #define VESA_IRQ               14
@@ -219,12 +221,23 @@ static struct fb_target_operations vnc_ops = {
        .stop   = vnc__stop,
 };
 
-int vnc__init(struct framebuffer *fb)
+int vnc__init(struct kvm *kvm)
 {
+       struct framebuffer *fb;
+
+       if (!kvm->cfg.vnc)
+               return 0;
+
+       fb = vesa__init(kvm);
+       if (IS_ERR(fb)) {
+               pr_err("vesa__init() failed with error %ld\n", PTR_ERR(fb));
+               return PTR_ERR(fb);
+       }
+
        return fb__attach(fb, &vnc_ops);
 }
 
-int vnc__exit(struct framebuffer *fb)
+int vnc__exit(struct kvm *kvm)
 {
-       return vnc__stop(fb);
-}
\ No newline at end of file
+       return vnc__stop(NULL);
+}