2009-02-05 Vesa Jääskeläinen <chaac@nic.fi>
Fixes problem when running vbetest command as reported by Vladimir Serbinenko <phcoder@gmail.com>. * (grub_vbe_set_video_mode): Fixed problem with text modes.
This commit is contained in:
parent
3143cc1c5f
commit
38a0f8e7b5
2 changed files with 45 additions and 25 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
2009-02-05 Vesa Jääskeläinen <chaac@nic.fi>
|
||||||
|
|
||||||
|
Fixes problem when running vbetest command as reported by
|
||||||
|
Vladimir Serbinenko <phcoder@gmail.com>.
|
||||||
|
|
||||||
|
* (grub_vbe_set_video_mode): Fixed problem with text modes.
|
||||||
|
|
||||||
2009-02-04 Felix Zielcke <fzielcke@z-51.de>
|
2009-02-04 Felix Zielcke <fzielcke@z-51.de>
|
||||||
|
|
||||||
util/getroot.c (grub_util_get_grub_dev): Add support for /dev/mdNpN and
|
util/getroot.c (grub_util_get_grub_dev): Add support for /dev/mdNpN and
|
||||||
|
|
|
@ -206,36 +206,49 @@ grub_vbe_set_video_mode (grub_uint32_t mode,
|
||||||
framebuffer.bytes_per_scan_line = active_mode_info.bytes_per_scan_line;
|
framebuffer.bytes_per_scan_line = active_mode_info.bytes_per_scan_line;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Calculate bytes_per_pixel value. */
|
/* Check whether mode is text mode or graphics mode. */
|
||||||
switch(active_mode_info.bits_per_pixel)
|
if (active_mode_info.memory_model == GRUB_VBE_MEMORY_MODEL_TEXT)
|
||||||
{
|
{
|
||||||
case 32: framebuffer.bytes_per_pixel = 4; break;
|
/* Text mode. */
|
||||||
case 24: framebuffer.bytes_per_pixel = 3; break;
|
|
||||||
case 16: framebuffer.bytes_per_pixel = 2; break;
|
/* No special action needed for text mode as it is not supported for
|
||||||
case 15: framebuffer.bytes_per_pixel = 2; break;
|
graphical support. */
|
||||||
case 8: framebuffer.bytes_per_pixel = 1; break;
|
|
||||||
default:
|
|
||||||
grub_vbe_bios_set_mode (old_mode, 0);
|
|
||||||
return grub_error (GRUB_ERR_BAD_DEVICE,
|
|
||||||
"cannot set VBE mode %x",
|
|
||||||
mode);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
/* If video mode is in indexed color, setup default VGA palette. */
|
|
||||||
if (framebuffer.index_color_mode)
|
|
||||||
{
|
{
|
||||||
struct grub_vbe_palette_data *palette
|
/* Graphics mode. */
|
||||||
= (struct grub_vbe_palette_data *) GRUB_MEMORY_MACHINE_SCRATCH_ADDR;
|
|
||||||
|
|
||||||
/* Make sure that the BIOS can reach the palette. */
|
/* Calculate bytes_per_pixel value. */
|
||||||
grub_memcpy (palette, vga_colors, sizeof (vga_colors));
|
switch(active_mode_info.bits_per_pixel)
|
||||||
status = grub_vbe_bios_set_palette_data (sizeof (vga_colors)
|
{
|
||||||
/ sizeof (struct grub_vbe_palette_data),
|
case 32: framebuffer.bytes_per_pixel = 4; break;
|
||||||
0,
|
case 24: framebuffer.bytes_per_pixel = 3; break;
|
||||||
palette);
|
case 16: framebuffer.bytes_per_pixel = 2; break;
|
||||||
|
case 15: framebuffer.bytes_per_pixel = 2; break;
|
||||||
|
case 8: framebuffer.bytes_per_pixel = 1; break;
|
||||||
|
default:
|
||||||
|
grub_vbe_bios_set_mode (old_mode, 0);
|
||||||
|
return grub_error (GRUB_ERR_BAD_DEVICE,
|
||||||
|
"cannot set VBE mode %x",
|
||||||
|
mode);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/* Just ignore the status. */
|
/* If video mode is in indexed color, setup default VGA palette. */
|
||||||
|
if (framebuffer.index_color_mode)
|
||||||
|
{
|
||||||
|
struct grub_vbe_palette_data *palette
|
||||||
|
= (struct grub_vbe_palette_data *) GRUB_MEMORY_MACHINE_SCRATCH_ADDR;
|
||||||
|
|
||||||
|
/* Make sure that the BIOS can reach the palette. */
|
||||||
|
grub_memcpy (palette, vga_colors, sizeof (vga_colors));
|
||||||
|
status = grub_vbe_bios_set_palette_data (sizeof (vga_colors)
|
||||||
|
/ sizeof (struct grub_vbe_palette_data),
|
||||||
|
0,
|
||||||
|
palette);
|
||||||
|
|
||||||
|
/* Just ignore the status. */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Copy mode info for caller. */
|
/* Copy mode info for caller. */
|
||||||
|
|
Loading…
Add table
Reference in a new issue