Possible approach to solving mips / gfxterm kludge.

Comments?

-- 
Robert Millan
=== modified file 'term/gfxterm.c'
--- term/gfxterm.c	2009-10-24 19:01:27 +0000
+++ term/gfxterm.c	2009-12-13 20:37:57 +0000
@@ -27,7 +27,7 @@
 #include <grub/bitmap.h>
 #include <grub/command.h>
 
-#define DEFAULT_VIDEO_MODE "1024x600"
+#define DEFAULT_VIDEO_MODE	"640x480,800x600,1024x768,0x0"
 #define DEFAULT_BORDER_WIDTH	10
 
 #define DEFAULT_STANDARD_COLOR  0x07

=== modified file 'video/sm712.c'
--- video/sm712.c	2009-12-02 10:48:10 +0000
+++ video/sm712.c	2009-12-13 20:33:44 +0000
@@ -55,7 +55,7 @@ grub_video_sm712_video_fini (void)
 {
   if (framebuffer.mapped)
     grub_pci_device_unmap_range (framebuffer.dev, framebuffer.ptr,
-				 1024 * 600 * 2);
+				 framebuffer.mode_info.width * framebuffer.mode_info.height * (framebuffer.mode_info.depth / 8));
 
   return grub_video_fb_fini ();
 }
@@ -68,7 +68,7 @@ grub_video_sm712_setup (unsigned int wid
   grub_err_t err;
   int found = 0;
 
-  int NESTED_FUNC_ATTR find_card (grub_pci_device_t dev, grub_pci_id_t pciid __attribute__ ((unused)))
+  int NESTED_FUNC_ATTR find_card (grub_pci_device_t dev, grub_pci_id_t pciid)
     {
       grub_pci_address_t addr;
       grub_uint32_t class;
@@ -92,8 +92,16 @@ grub_video_sm712_setup (unsigned int wid
   depth = (mode_type & GRUB_VIDEO_MODE_TYPE_DEPTH_MASK)
           >> GRUB_VIDEO_MODE_TYPE_DEPTH_POS;
 
-  if ((width != 1024 && width != 0) || (height != 600 && height != 0)
-      || (depth != 16 && depth != 0))
+  if (width == 0)
+    width = 1024;
+
+  if (height == 0)
+    height = 600;
+
+  if (depth == 0)
+    depth = 16;
+
+  if (width != 1024 || height != 600 || depth != 16)
     return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
 		       "Only 1024x600x16 is supported");
 
@@ -107,10 +115,10 @@ grub_video_sm712_setup (unsigned int wid
     }
 
   /* Fill mode info details.  */
-  framebuffer.mode_info.width = 1024;
-  framebuffer.mode_info.height = 600;
+  framebuffer.mode_info.width = width;
+  framebuffer.mode_info.height = height;
   framebuffer.mode_info.mode_type = GRUB_VIDEO_MODE_TYPE_RGB;
-  framebuffer.mode_info.bpp = 16;
+  framebuffer.mode_info.bpp = depth;
   framebuffer.mode_info.bytes_per_pixel = 2;
   framebuffer.mode_info.pitch = 1024 * 2;
   framebuffer.mode_info.number_of_colors = 256;
@@ -126,7 +134,7 @@ grub_video_sm712_setup (unsigned int wid
   /* We can safely discard volatile attribute.  */
   framebuffer.ptr = (void *) grub_pci_device_map_range (framebuffer.dev,
 							framebuffer.base,
-							1024 * 600 * 2);
+							width * height * (depth / 8));
   framebuffer.mapped = 1;
 
   err = grub_video_fb_create_render_target_from_pointer (&framebuffer.render_target, &framebuffer.mode_info, framebuffer.ptr);

_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to