diff -Nur -x '*.orig' -x '*~' grub2-1.96+20090725/include/grub/i386/linux.h grub2-1.96+20090725.new/include/grub/i386/linux.h --- grub2-1.96+20090725/include/grub/i386/linux.h 2009-07-06 03:10:57.000000000 +0100 +++ grub2-1.96+20090725.new/include/grub/i386/linux.h 2009-08-08 19:45:10.000000000 +0100 @@ -39,6 +39,7 @@ #define GRUB_LINUX_VID_MODE_NORMAL 0xFFFF #define GRUB_LINUX_VID_MODE_EXTENDED 0xFFFE #define GRUB_LINUX_VID_MODE_ASK 0xFFFD +#define GRUB_LINUX_VID_MODE_CURRENT 0x0F04 #define GRUB_LINUX_VID_MODE_VESA_START 0x0300 #define GRUB_LINUX_SETUP_MOVE_SIZE 0x9100 diff -Nur -x '*.orig' -x '*~' grub2-1.96+20090725/loader/i386/linux.c grub2-1.96+20090725.new/loader/i386/linux.c --- grub2-1.96+20090725/loader/i386/linux.c 2009-08-08 19:31:00.000000000 +0100 +++ grub2-1.96+20090725.new/loader/i386/linux.c 2009-08-08 19:45:09.000000000 +0100 @@ -446,6 +446,7 @@ int e820_num; grub_err_t err = 0; char *modevar, *tmp; + int keep_mode = 0; params = real_mode_mem; @@ -460,11 +461,19 @@ if (! tmp) return grub_errno; grub_sprintf (tmp, "%s;" DEFAULT_VIDEO_MODE, modevar); +#ifndef GRUB_ASSUME_LINUX_HAS_FB_SUPPORT + if (grub_memcmp (modevar, "keep", sizeof ("keep")) == 0 + || grub_memcmp (modevar, "keep,", sizeof ("keep,") - 1) == 0 + || grub_memcmp (modevar, "keep;", sizeof ("keep;") - 1) == 0) + keep_mode = 1; +#endif err = grub_video_set_mode (tmp, 0); grub_free (tmp); } -#ifndef GRUB_ASSUME_LINUX_HAS_FB_SUPPORT else +#ifdef GRUB_ASSUME_LINUX_HAS_FB_SUPPORT + keep_mode = 1; +#else err = grub_video_set_mode (DEFAULT_VIDEO_MODE, 0); #endif @@ -474,6 +483,8 @@ grub_printf ("Booting however\n"); grub_errno = GRUB_ERR_NONE; } + else if (keep_mode) + params->vid_mode = GRUB_LINUX_VID_MODE_CURRENT; if (! grub_linux_setup_video (params)) params->have_vga = GRUB_VIDEO_TYPE_VLFB;