Thread (9 messages) flat view 9 messages, 5 authors, 2005-12-14

Re: [PATCH 1/1: 2.6.15-rc5-git3] Fixed and updated CyblaFB

From: Andrew Morton <hidden>
Date: 2005-12-13 22:21:37
Also in: lkml

Knut Petersen [off-list ref] wrote:
With kernel 2.6.15-rc5-git3 all patches needed by this new version
of cyblafb reached the main line kernel. So here it is.

Main advantages:
============
   - vxres > xres support
   - ywrap support
   - much faster for almost all modes (e.g. 1280x1024-16bpp
      draws more than 41 full screens of text instead of about 25
      full screens of text per second on authors Epia 5000)
   - module init/exit code fixed
   - bugs triggered by console rotation fixed
   - lots of minor improvements
   - startup modes suitable for high performance scrolling
      in all directions

As only one single graphics core is affected, there should be no
reason not to include it in 2.6.15. No side effects are possible.
Well yes, but effects on cyblafb are possible!  We'd be putting new and
un-tested-in-linus's-tree code into the tree at the last minute.

It would hardly be a calamity if we were to merge this into 2.6.15 of
course, but the principle which you describe ain't right.
+static int basestride = 0;
That consumes storage in vmlinux or cylbafb.ko.  I'll remove the `= 0'.
-	int direction;
-
-	s1 = point(ca->sx,ca->sy);
-	s2 = point(ca->sx+ca->width-1,ca->sy+ca->height-1);
-	d1 = point(ca->dx,ca->dy);
-	d2 = point(ca->dx+ca->width-1,ca->dy+ca->height-1);
-	if ((ca->sy > ca->dy) || ((ca->sy == ca->dy) && (ca->sx > ca->dx)))
-		direction = 0;
-	else
-		direction = 2;
-
-	cyblafb_sync(info);
+        __u32 s1,s2,d1,d2;
+        int direction;
 
-	out32(GE44,0xa0000000|1<<19|1<<2|direction);
-	out32(GE00,direction?s2:s1);
-	out32(GE04,direction?s1:s2);
-	out32(GE08,direction?d2:d1);
-	out32(GE0C,direction?d1:d2);
+        s1 = point(ca->sx,0);
+        s2 = point(ca->sx+ca->width-1,ca->height-1);
+        d1 = point(ca->dx,0);
+        d2 = point(ca->dx+ca->width-1,ca->height-1);
+
+        if ((ca->sy > ca->dy) || ((ca->sy == ca->dy) && (ca->sx > ca->dx)))
+                direction = 0;
+        else
+                direction = 2;
+
+	out32(GEB8,basestride | ((ca->dy * info->var.xres_virtual *
+				info->var.bits_per_pixel) >> 6));
+	out32(GEC8,basestride | ((ca->sy * info->var.xres_virtual *
+				info->var.bits_per_pixel) >> 6 ));
+        out32(GE44,0xa0000000|1<<19|1<<2|direction);
+        out32(GE00,direction?s2:s1);
+        out32(GE04,direction?s1:s2);
+        out32(GE08,direction?d2:d1);
+        out32(GE0C,direction?d1:d2);
The above hunk is full of whitespace damage (spaces instead of tabs).  I
fixed that, and other places like it.
-			index+=3;
-			break;
+	if (likely(info->pixmap.scan_align == 4)) {
+		int dds = ((image->width + 31) >> 5) * image->height;
+		while (dds--)
+			out32(GE9C,*pd++);
+	} else {
+		int i, j, dds = image->width / 32, bits = image->width % 32;
+		for (i=0; i<image->height; i++) {
+			for (j=0; j<dds; j++)
+				out32(GE9C, *pd++);
+			if(bits != 0) {
+				out32(GE9C, *pd);
+				if (info->pixmap.scan_align == 2)
+					pd = (u32*)((u32) pd +
+						(((bits + 15) >> 4) << 1) );
+				else
+					pd = (u32*)((u32) pd +
+						((bits + 7) >> 3));
+			}
Masking pointers to 32 bits.  Is this driver supposed to be run on 64-bit
machines?
+	info->pixmap.addr = kmalloc(CYBLAFB_PIXMAPSIZE, GFP_KERNEL);
+	if (!info->pixmap.addr) {
+		output("allocation of pixmap buffer failed!\n");
+		goto errout_alloc_pixmap;
+	}
+	memset(info->pixmap.addr, 0, CYBLAFB_PIXMAPSIZE);
I'll switch this to kzalloc().




-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help