Date: Fri, 21 Nov 1997 10:35:30 +0100 (CET)
From: Geert Uytterhoeven <Geert.Uytterhoeven@cs.kuleuven.ac.be>
To: Linux/m68k <linux-m68k@lists.linux-m68k.org>
Subject: L68K: Frame buffer devices fix
Sender: owner-linux-m68k@phil.uni-sb.de


The new fields mmio_start and mmio_len aren't initialized to zero on frame
buffer devices that don't support MMIO from user space. Use memset() to clear
the struct fb_fix_screeninfo first, so we won't get trapped by that another
time.

--- m68k-2.1.64/drivers/video/amifb.c.orig	Mon Nov 17 22:00:35 1997
+++ m68k-2.1.64/drivers/video/amifb.c	Thu Nov 20 22:51:21 1997
@@ -2143,8 +2143,7 @@
 static int ami_encode_fix(struct fb_fix_screeninfo *fix,
                           struct amiga_fb_par *par)
 {
-	int i;
-
+	memset(fix, 0, sizeof(struct fb_fix_screeninfo));
 	strcpy(fix->id, amiga_fb_name);
 	fix->smem_start = (char *)videomemory;
 	fix->smem_len = videomemorysize;
@@ -2170,10 +2169,6 @@
 			fix->xpanstep = 16<<maxfmode;
 		fix->ypanstep = 1;
 	}
-
-	for (i = 0; i < arraysize(fix->reserved); i++)
-		fix->reserved[i] = 0;
-
 	return 0;
 }
 
--- m68k-2.1.64/drivers/video/atafb.c.orig	Mon Nov 17 22:00:36 1997
+++ m68k-2.1.64/drivers/video/atafb.c	Thu Nov 20 22:51:52 1997
@@ -514,7 +514,7 @@
 						  struct atari_fb_par *par )
 
 {
-	int mode, i;
+	int mode;
 
 	strcpy(fix->id,"Atari Builtin");
 	fix->smem_start = (char *)real_screen_base;
@@ -533,8 +533,6 @@
 	fix->ypanstep=1;
 	fix->ywrapstep=0;
 	fix->line_length = 0;
-	for (i=0; i<arraysize(fix->reserved); i++)
-		fix->reserved[i]=0;
 	return 0;
 }
 
@@ -840,8 +838,6 @@
 static int falcon_encode_fix( struct fb_fix_screeninfo *fix,
 							  struct atari_fb_par *par )
 {
-	int i;
-
 	strcpy(fix->id, "Atari Builtin");
 	fix->smem_start = (char *)real_screen_base;
 	fix->smem_len = screen_len;
@@ -865,8 +861,6 @@
 		fix->xpanstep = 2;
 	}
 	fix->line_length = 0;
-	for (i=0; i<arraysize(fix->reserved); i++)
-		fix->reserved[i]=0;
 	return 0;
 }
 
@@ -1790,7 +1784,7 @@
 							 struct atari_fb_par *par )
 
 {
-	int mode, i;
+	int mode;
 
 	strcpy(fix->id,"Atari Builtin");
 	fix->smem_start = (char *)real_screen_base;
@@ -1813,8 +1807,6 @@
 	}
 	fix->ywrapstep = 0;
 	fix->line_length = 0;
-	for (i=0; i<arraysize(fix->reserved); i++)
-		fix->reserved[i]=0;
 	return 0;
 }
 
@@ -2117,8 +2109,6 @@
 						   struct atari_fb_par *par )
 
 {
-	int i;
-
 	strcpy(fix->id,"Unknown Extern");
 	fix->smem_start=(char *)external_addr;
 	fix->smem_len=(external_len + PAGE_SIZE -1) & PAGE_MASK;
@@ -2161,8 +2151,6 @@
 	fix->ypanstep = 0;
 	fix->ywrapstep = 0;
 	fix->line_length = 0;
-	for (i=0; i<arraysize(fix->reserved); i++)
-		fix->reserved[i]=0;
 	return 0;
 }
 
@@ -2480,6 +2468,7 @@
 		atari_fb_get_par(&par);
 	else
 		fbhw->decode_var(&fb_display[con].var,&par);
+	memset(fix, 0, sizeof(struct fb_fix_screeninfo));
 	return fbhw->encode_fix(fix, &par);
 }
 	
--- m68k-2.1.64/drivers/video/dn_fb.c.orig	Mon Nov 17 22:00:36 1997
+++ m68k-2.1.64/drivers/video/dn_fb.c	Thu Nov 20 22:52:43 1997
@@ -168,6 +168,7 @@
 
 static int dn_fb_get_fix(struct fb_fix_screeninfo *fix, int con) {
 
+	memset(fix, 0, sizeof(struct fb_fix_screeninfo));
 	strcpy(fix->id,"Apollo Mono");
 	fix->smem_start=(char*)(FRAME_BUFFER_START+IO_BASE);
 	fix->smem_len=FRAME_BUFFER_LEN;
--- m68k-2.1.64/drivers/video/vfb.c.orig	Mon Nov 17 22:00:36 1997
+++ m68k-2.1.64/drivers/video/vfb.c	Thu Nov 20 22:53:33 1997
@@ -461,6 +461,7 @@
 static void vfb_encode_fix(struct fb_fix_screeninfo *fix,
 			   struct fb_var_screeninfo *var)
 {
+    memset(fix, 0, sizeof(struct fb_fix_screeninfo));
     strcpy(fix->id, virtual_fb_name);
     fix->smem_start = (caddr_t)videomemory;
     fix->smem_len = videomemorysize;
@@ -483,7 +484,6 @@
     fix->xpanstep = 1;
     fix->ypanstep = 1;
     fix->line_length = get_line_length(var->xres_virtual, var->bits_per_pixel);
-    memset(fix->reserved, 0, sizeof(fix->reserved));
 }
 
 static void set_color_bitfields(struct fb_var_screeninfo *var)

Greetings,

						Geert

P.S. I've got XF68_FBDev working (still some problems with some patterns and
     the mouse) on Linux/PPC, using my Open Firmware frame buffer device. World
     domination is within reach!!
--
Geert Uytterhoeven                     Geert.Uytterhoeven@cs.kuleuven.ac.be
Wavelets, Linux/{m68k~Amiga,PPC~CHRP}  http://www.cs.kuleuven.ac.be/~geert/
Department of Computer Science -- Katholieke Universiteit Leuven -- Belgium

