Set the window size to 2 GB for linear framebuffer
authorH. Peter Anvin <hpa@zytor.com>
Thu, 14 Feb 2008 06:17:03 +0000 (22:17 -0800)
committerH. Peter Anvin <hpa@zytor.com>
Thu, 14 Feb 2008 06:17:03 +0000 (22:17 -0800)
Set the window size to 2 GB for linear framebuffer, lest the
calculation:

    l = min(bytes, win_size-win_off);

... incorrectly returns zero when win_off == 0.

com32/lib/sys/vesa/screencpy.c

index ac9b24e..779fe5d 100644 (file)
@@ -56,8 +56,9 @@ void __vesacon_init_copy_to_screen(void)
     /* Linear frame buffer */
 
     wi.win_base = (char *)mi->lfb_ptr;
-    wi.win_size = 0;           /* 4 GB, i.e. one huge window */
+    wi.win_size = 1 << 31;     /* 2 GB, i.e. one huge window */
     wi.win_pos  = 0;           /* Already positioned (only one position...) */
+    wi.win_num  = -1;          /* Not a window */
   } else {
     /* Paged frame buffer */
     
@@ -79,6 +80,9 @@ static void set_window_pos(size_t win_pos)
 {
   static com32sys_t ireg;
 
+  if (wi.win_num < 0)
+    return;
+
   ireg.eax.w[0] = 0x4F05;
   ireg.ebx.b[0] = wi.win_num;
   ireg.edx.w[0] = win_pos >> wi.win_gshift;