All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sven Schnelle <schnelle@kabelleipzig.de>
To: James Simmons <jsimmons@infradead.org>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Linux Fbdev development list
	<linux-fbdev-devel@lists.sourceforge.net>
Subject: Re: FBDEV updates.
Date: Sat, 16 Aug 2003 08:01:51 +0200	[thread overview]
Message-ID: <20030816060151.GA833@apollo.sven.bitebene.org> (raw)
In-Reply-To: <Pine.LNX.4.44.0308142052440.15200-100000@phoenix.infradead.org>

[-- Attachment #1: Type: text/plain, Size: 7421 bytes --]

Hello,

James Simmons <jsimmons@infradead.org> wrote:
 
>   Here is the latest fbdev BK drop. It is against 2.6.0-test3. Test it out 
> and tell me your results. I like to do a code drop soon. 

Thanks for this patch, it runs now quite nice on a RIVA TNT2. Is there
any special reason why you use soft_cursor in rivafb? I changed the
rivafb_cursor to the new code, maybe you have a look ;-)

-------------------------------------8<----------------------------------------------------------------
diff -Naur linux-2.6.0-test3/drivers/video/riva/fbdev.c linux-2.6.0-test3-sv/drivers/video/riva/fbdev.c
--- linux-2.6.0-test3/drivers/video/riva/fbdev.c	2003-08-16 07:47:20.000000000 +0200
+++ linux-2.6.0-test3-sv/drivers/video/riva/fbdev.c	2003-08-16 07:39:39.000000000 +0200
@@ -460,48 +460,11 @@
 	return (VGA_RD08(par->riva.PVIO, 0x3cc));
 }
 
-static u8 byte_rev[256] = {
-	0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
-	0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
-	0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
-	0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
-	0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
-	0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
-	0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
-	0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
-	0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
-	0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
-	0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
-	0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
-	0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
-	0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
-	0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
-	0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
-	0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
-	0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
-	0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
-	0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
-	0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
-	0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
-	0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
-	0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
-	0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
-	0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
-	0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
-	0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
-	0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
-	0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
-	0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
-	0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff,
-};
-
-static inline void reverse_order(u32 *l)
+static inline u32 reverse_order(u32 val)
 {
-	u8 *a = (u8 *)l;
-	*a = byte_rev[*a], a++;
-	*a = byte_rev[*a], a++;
-	*a = byte_rev[*a], a++;
-	*a = byte_rev[*a];
+return((val & 0x80808080) >> 7 | (val & 0x40404040) >> 5 | (val & 0x20202020) >> 3 | \
+       (val & 0x10101010) >> 1 | (val & 0x08080808) << 1 | (val & 0x04040404) << 3 | \
+       (val & 0x02020202) << 5 | (val & 0x01010101) << 7);
 }
 
 /* ------------------------------------------------------------------------- *
@@ -534,13 +497,14 @@
 	int i, j, k = 0;
 	u32 b, m, tmp;
 
+		
 	for (i = 0; i < h; i++) {
-		b = *((u32 *)data)++;
+
+		b = reverse_order(*((u32 *)data)++);
 		m = *((u32 *)mask)++;
-		reverse_order(&b);
-		
+
 		for (j = 0; j < w/2; j++) {
-			tmp = 0;
+		tmp = 0;
 #if defined (__BIG_ENDIAN)
 			if (m & (1 << 31)) {
 				fg |= 1 << 15;
@@ -565,7 +529,7 @@
 			tmp = (b & 1) ? fg : bg;
 			b >>= 1;
 			m >>= 1;
-			
+
 			if (m & 1) {
 				fg |= 1 << 15;
 				bg |= 1 << 15;
@@ -573,10 +537,11 @@
 			tmp |= (b & 1) ? fg << 16 : bg << 16;
 			b >>= 1;
 			m >>= 1;
+			
 #endif
-			writel(tmp, par->riva.CURSOR + k++);
-		}
-		k += (MAX_CURS - w)/2;
+				writel(tmp, par->riva.CURSOR + k++);
+			}
+		    k += (MAX_CURS - w)/2;
 	}
 }
 
@@ -1428,7 +1393,7 @@
 			     const struct fb_image *image)
 {
 	struct riva_par *par = (struct riva_par *) info->par;
-	u32 fgx = 0, bgx = 0, width, tmp;
+	u32 fgx = 0, bgx = 0, width;
 	u8 *cdat = (u8 *) image->data;
 	volatile u32 *d;
 	int i, size;
@@ -1474,23 +1439,20 @@
 
 	width = (image->width + 31)/32;
 	size = width * image->height;
+
 	while (size >= 16) {
 		RIVA_FIFO_FREE(par->riva, Bitmap, 16);
-		for (i = 0; i < 16; i++) {
-			tmp = *((u32 *)cdat)++;
-			reverse_order(&tmp);
-			d[i] = tmp;
-		}
+		for (i = 0; i < 16; i++) 
+			d[i] = reverse_order(*((u32 *)cdat)++);
 		size -= 16;
-	}
+		}
+
 	if (size) {
 		RIVA_FIFO_FREE(par->riva, Bitmap, size);
-		for (i = 0; i < size; i++) {
-			tmp = *((u32 *) cdat)++;
-			reverse_order(&tmp);
-			d[i] = tmp;
+		for (i = 0; i < size; i++)
+			d[i] = reverse_order(*((u32 *) cdat)++);
+
 		}
-	}
 }
 
 /**
@@ -1509,9 +1471,17 @@
 static int rivafb_cursor(struct fb_info *info, struct fb_cursor *cursor)
 {
 	struct riva_par *par = (struct riva_par *) info->par;
+	unsigned int scan_align = info->pixmap.scan_align - 1;
+	unsigned int buf_align = info->pixmap.buf_align - 1;
+		u8 *dst = (u8 *) info->cursor.image.data;
+	unsigned int i, size, pitch;
 	u16 fg, bg;
-	int i;
 
+	pitch = ((info->cursor.image.width + 7) >> 3) + scan_align;
+	pitch &= ~scan_align;
+	size = pitch * info->cursor.image.height + buf_align;
+	size &= ~buf_align;
+	
 	par->riva.ShowHideCursor(&par->riva, 0);
 
 	if (cursor->set & FB_CUR_SETPOS) {
@@ -1540,36 +1510,37 @@
 	if (cursor->set & (FB_CUR_SETSHAPE | FB_CUR_SETCMAP)) {
 		u32 bg_idx = info->cursor.image.bg_color;
 		u32 fg_idx = info->cursor.image.fg_color;
-		u8 *dat = (u8 *) info->cursor.image.data;
-		u8 *msk = (u8 *) info->cursor.mask;
-		u8 src[64];	
-		
 		switch (info->cursor.rop) {
 		case ROP_XOR:
-			for (i = 0; i < info->sprite.size; i++)
-					src[i] = dat[i] ^ msk[i];
+			for (i = 0; i < size; i++)
+					dst[i] ^= info->cursor.mask[i];
 			break;
 		case ROP_COPY:
 		default:
-			for (i = 0; i < info->sprite.size; i++)
-					src[i] = dat[i] & msk[i];
+			for (i = 0; i < size; i++)
+					dst[i] &= info->cursor.mask[i];
 			break;
 		}
 		
 		bg = ((info->cmap.red[bg_idx] & 0xf8) << 7) |
 		     ((info->cmap.green[bg_idx] & 0xf8) << 2) |
-		     ((info->cmap.blue[bg_idx] & 0xf8) >> 3);
+		     ((info->cmap.blue[bg_idx] & 0xf8) >> 3) | 0x8000;
 
 		fg = ((info->cmap.red[fg_idx] & 0xf8) << 7) |
 		     ((info->cmap.green[fg_idx] & 0xf8) << 2) |
-		     ((info->cmap.blue[fg_idx] & 0xf8) >> 3);
+		     ((info->cmap.blue[fg_idx] & 0xf8) >> 3) | 0x8000;
 
 		par->riva.LockUnlock(&par->riva, 0);
 
-		rivafb_load_cursor_image(par, dat, msk, bg, fg,
-					 info->cursor.image.width, 
+		
+		memset_io(par->riva.CURSOR, 0, MAX_CURS * MAX_CURS*2);
+
+		if(info->cursor.image.data) 
+		    rivafb_load_cursor_image(par, dst, info->cursor.mask, bg, fg, \
+					 info->cursor.image.width, \
 					 info->cursor.image.height);
-	}
+		}
+	
 	if (info->cursor.enable)
 		par->riva.ShowHideCursor(&par->riva, 1);
 	return 0;
@@ -1602,7 +1573,7 @@
 	.fb_fillrect 	= rivafb_fillrect,
 	.fb_copyarea 	= rivafb_copyarea,
 	.fb_imageblit 	= rivafb_imageblit,
-	.fb_cursor	= soft_cursor,	
+	.fb_cursor	= rivafb_cursor,	
 	.fb_sync 	= rivafb_sync,
 };
-----------------------------------------8<----------------------------------------- 


-- 
Sven Schnelle, <schnelle@kabelleipzig.de>
-----------------------------------------

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

  parent reply	other threads:[~2003-08-16  6:01 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-08-14 19:54 FBDEV updates James Simmons
2003-08-14 20:36 ` Otto Solares
2003-08-14 20:52   ` James Simmons
2003-08-14 21:57     ` Jon Smirl
2003-08-15  8:40     ` Benjamin Herrenschmidt
2003-08-15 22:31       ` James Simmons
2003-08-15 23:42         ` Benjamin Herrenschmidt
2003-08-16  2:40           ` Otto Solares
2003-08-14 23:16   ` Greg KH
2003-08-15 22:37     ` James Simmons
2003-08-15 23:54       ` Greg KH
2003-08-16  6:01 ` Sven Schnelle [this message]
  -- strict thread matches above, loose matches on Subject: below --
2003-02-20  1:40 FBdev updates Lawrence Lee (Shanghai)
2003-02-20  1:09 James Simmons
2003-02-20  1:17 ` Jeff Garzik
2003-02-20  1:22   ` James Simmons
2003-02-20 15:02 ` Dave Jones
2003-02-20 15:02   ` Dave Jones
2003-02-20 15:07   ` James Simmons
2003-02-20 18:29   ` Petr Vandrovec
2003-02-20 18:29     ` Petr Vandrovec
2003-02-20 19:03     ` Jurriaan
2003-02-20 19:58     ` James Simmons
2003-02-20 19:58       ` James Simmons
2003-02-21  1:45       ` David S. Miller
2003-02-21  1:45         ` David S. Miller
2003-02-20 15:10 ` Ivan Kokshaysky
2003-02-20 15:10   ` Ivan Kokshaysky
2002-06-18 20:16 fbdev updates James Simmons
2002-06-18 20:16 ` James Simmons
2002-06-18 20:22 ` Larry McVoy
2002-06-18 20:22 ` Larry McVoy
2002-06-05 16:39 James Simmons
2002-06-05 16:39 ` James Simmons
2002-06-05 16:50 ` Russell King
2002-06-05 16:50 ` Russell King

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20030816060151.GA833@apollo.sven.bitebene.org \
    --to=schnelle@kabelleipzig.de \
    --cc=jsimmons@infradead.org \
    --cc=linux-fbdev-devel@lists.sourceforge.net \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.