]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
2009-02-05 Vesa Jääskeläinen <chaac@nic.fi>
authorchaac <chaac@localhost>
Thu, 5 Feb 2009 18:28:58 +0000 (18:28 +0000)
committerchaac <chaac@localhost>
Thu, 5 Feb 2009 18:28:58 +0000 (18:28 +0000)
Fixes problem when running vbetest command as reported by
Vladimir Serbinenko <phcoder@gmail.com>.

* (grub_vbe_set_video_mode): Fixed problem with text modes.

ChangeLog
video/i386/pc/vbe.c

index 4c392487f94afcaae254c8de1638c5c07563e329..928acf0d7332c2cc48f9ec5614ee3492e9018fc3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>
 
        util/getroot.c (grub_util_get_grub_dev): Add support for /dev/mdNpN and
index 7de37e91477a3aeb047f89b86b07b7e838f2b58d..23f7d46f0689a84f715cac5f6e5b72b5abce0ecd 100644 (file)
@@ -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;
     }
 
-  /* Calculate bytes_per_pixel value.  */
-  switch(active_mode_info.bits_per_pixel)
+  /* Check whether mode is text mode or graphics mode.  */
+  if (active_mode_info.memory_model == GRUB_VBE_MEMORY_MODEL_TEXT)
     {
-    case 32: framebuffer.bytes_per_pixel = 4; break;
-    case 24: framebuffer.bytes_per_pixel = 3; break;
-    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;
-    }
+      /* Text mode.  */
 
-  /* If video mode is in indexed color, setup default VGA palette.  */
-  if (framebuffer.index_color_mode)
+      /* No special action needed for text mode as it is not supported for
+         graphical support.  */
+    }
+  else
     {
-      struct grub_vbe_palette_data *palette
-        = (struct grub_vbe_palette_data *) GRUB_MEMORY_MACHINE_SCRATCH_ADDR;
+      /* Graphics mode.  */
+
+      /* Calculate bytes_per_pixel value.  */
+      switch(active_mode_info.bits_per_pixel)
+       {
+       case 32: framebuffer.bytes_per_pixel = 4; break;
+       case 24: framebuffer.bytes_per_pixel = 3; break;
+       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;
+       }
+
+      /* 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);
+         /* 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.  */
+         /* Just ignore the status.  */
+       }
     }
 
   /* Copy mode info for caller.  */