2009-05-04 Robert Millan <rmh.grub@aybabtu.com>
* loader/i386/linux.c (GRUB_ASSUME_LINUX_HAS_FB_SUPPORT): New macro. (grub_linux_boot): Don't check for `linux_vesafb_modes' bounds (this is done by grub_cmd_linux() now). [! GRUB_ASSUME_LINUX_HAS_FB_SUPPORT]: If "vga=" parameter wasn't set, restore video to text mode. (grub_cmd_linux): Default `vid_mode' initialization to 0, which indicates lack of "vga=" parameter. "vga=0" is mapped to `GRUB_LINUX_VID_MODE_NORMAL'.
This commit is contained in:
parent
faa517ce50
commit
112972a96d
2 changed files with 43 additions and 4 deletions
11
ChangeLog
11
ChangeLog
|
@ -1,3 +1,14 @@
|
|||
2009-05-04 Robert Millan <rmh.grub@aybabtu.com>
|
||||
|
||||
* loader/i386/linux.c (GRUB_ASSUME_LINUX_HAS_FB_SUPPORT): New macro.
|
||||
(grub_linux_boot): Don't check for `linux_vesafb_modes' bounds (this
|
||||
is done by grub_cmd_linux() now).
|
||||
[! GRUB_ASSUME_LINUX_HAS_FB_SUPPORT]: If "vga=" parameter wasn't set,
|
||||
restore video to text mode.
|
||||
(grub_cmd_linux): Default `vid_mode' initialization to 0, which
|
||||
indicates lack of "vga=" parameter. "vga=0" is mapped to
|
||||
`GRUB_LINUX_VID_MODE_NORMAL'.
|
||||
|
||||
2009-05-04 Felix Zielcke <fzielcke@z-51.de>
|
||||
|
||||
* conf/i386-efi.rmk (grub_emu_SOURCES): Remove `normal/execute.c',
|
||||
|
|
|
@ -39,6 +39,14 @@
|
|||
#define GRUB_LINUX_CL_OFFSET 0x1000
|
||||
#define GRUB_LINUX_CL_END_OFFSET 0x2000
|
||||
|
||||
/* This macro is useful for distributors, who can be certain they built FB support
|
||||
into Linux, and therefore can benefit from seamless mode transition between
|
||||
GRUB and Linux (saving boot time and visual glitches). Official GRUB, OTOH,
|
||||
needs to be conservative. */
|
||||
#ifndef GRUB_ASSUME_LINUX_HAS_FB_SUPPORT
|
||||
#define GRUB_ASSUME_LINUX_HAS_FB_SUPPORT 0
|
||||
#endif
|
||||
|
||||
static grub_dl_t my_mod;
|
||||
|
||||
static grub_size_t linux_mem_size;
|
||||
|
@ -332,9 +340,7 @@ grub_linux_boot (void)
|
|||
|
||||
params = real_mode_mem;
|
||||
|
||||
if (vid_mode < GRUB_LINUX_VID_MODE_VESA_START ||
|
||||
vid_mode >= GRUB_LINUX_VID_MODE_VESA_START +
|
||||
ARRAY_SIZE (linux_vesafb_modes))
|
||||
if (vid_mode == GRUB_LINUX_VID_MODE_NORMAL || vid_mode == GRUB_LINUX_VID_MODE_EXTENDED)
|
||||
grub_video_restore ();
|
||||
else if (vid_mode)
|
||||
{
|
||||
|
@ -367,6 +373,12 @@ grub_linux_boot (void)
|
|||
return grub_errno;
|
||||
}
|
||||
}
|
||||
#if ! GRUB_ASSUME_LINUX_HAS_FB_SUPPORT
|
||||
else
|
||||
/* If user didn't request a video mode, and we can't assume Linux supports FB,
|
||||
then we go back to text mode. */
|
||||
grub_video_restore ();
|
||||
#endif
|
||||
|
||||
if (! grub_linux_setup_video (params))
|
||||
params->have_vga = GRUB_VIDEO_TYPE_VLFB;
|
||||
|
@ -593,7 +605,7 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)),
|
|||
(unsigned) real_size, (unsigned) prot_size);
|
||||
|
||||
/* Look for memory size and video mode specified on the command line. */
|
||||
vid_mode = GRUB_LINUX_VID_MODE_NORMAL;
|
||||
vid_mode = 0;
|
||||
linux_mem_size = 0;
|
||||
for (i = 1; i < argc; i++)
|
||||
if (grub_memcmp (argv[i], "vga=", 4) == 0)
|
||||
|
@ -618,6 +630,22 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)),
|
|||
else
|
||||
vid_mode = (grub_uint16_t) grub_strtoul (val, 0, 0);
|
||||
|
||||
switch (vid_mode)
|
||||
{
|
||||
case 0:
|
||||
vid_mode = GRUB_LINUX_VID_MODE_NORMAL;
|
||||
break;
|
||||
case 1:
|
||||
vid_mode = GRUB_LINUX_VID_MODE_EXTENDED;
|
||||
break;
|
||||
default:
|
||||
/* Ignore invalid values. */
|
||||
if (vid_mode < GRUB_LINUX_VID_MODE_VESA_START ||
|
||||
vid_mode >= GRUB_LINUX_VID_MODE_VESA_START +
|
||||
ARRAY_SIZE (linux_vesafb_modes))
|
||||
vid_mode = 0;
|
||||
}
|
||||
|
||||
if (grub_errno)
|
||||
goto fail;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue