aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/video/Kconfig3
-rw-r--r--drivers/video/nvidia/nv_accel.c35
-rw-r--r--drivers/video/nvidia/nv_local.h11
-rw-r--r--drivers/video/nvidia/nv_proto.h1
-rw-r--r--drivers/video/riva/fbdev.c44
-rw-r--r--drivers/video/tgafb.c56
6 files changed, 26 insertions, 124 deletions
diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
index 7a43020fa583..c69b6ef1d2ce 100644
--- a/drivers/video/Kconfig
+++ b/drivers/video/Kconfig
@@ -541,6 +541,7 @@ config FB_TGA
541 select FB_CFB_FILLRECT 541 select FB_CFB_FILLRECT
542 select FB_CFB_COPYAREA 542 select FB_CFB_COPYAREA
543 select FB_CFB_IMAGEBLIT 543 select FB_CFB_IMAGEBLIT
544 select BITREVERSE
544 help 545 help
545 This is the frame buffer device driver for generic TGA graphic 546 This is the frame buffer device driver for generic TGA graphic
546 cards. Say Y if you have one of those. 547 cards. Say Y if you have one of those.
@@ -705,6 +706,7 @@ config FB_NVIDIA
705 select FB_CFB_FILLRECT 706 select FB_CFB_FILLRECT
706 select FB_CFB_COPYAREA 707 select FB_CFB_COPYAREA
707 select FB_CFB_IMAGEBLIT 708 select FB_CFB_IMAGEBLIT
709 select BITREVERSE
708 help 710 help
709 This driver supports graphics boards with the nVidia chips, TNT 711 This driver supports graphics boards with the nVidia chips, TNT
710 and newer. For very old chipsets, such as the RIVA128, then use 712 and newer. For very old chipsets, such as the RIVA128, then use
@@ -744,6 +746,7 @@ config FB_RIVA
744 select FB_CFB_FILLRECT 746 select FB_CFB_FILLRECT
745 select FB_CFB_COPYAREA 747 select FB_CFB_COPYAREA
746 select FB_CFB_IMAGEBLIT 748 select FB_CFB_IMAGEBLIT
749 select BITREVERSE
747 help 750 help
748 This driver supports graphics boards with the nVidia Riva/Geforce 751 This driver supports graphics boards with the nVidia Riva/Geforce
749 chips. 752 chips.
diff --git a/drivers/video/nvidia/nv_accel.c b/drivers/video/nvidia/nv_accel.c
index 4aefb8f41637..9efb8a3854e2 100644
--- a/drivers/video/nvidia/nv_accel.c
+++ b/drivers/video/nvidia/nv_accel.c
@@ -261,41 +261,6 @@ void NVResetGraphics(struct fb_info *info)
261 NVDmaKickoff(par); 261 NVDmaKickoff(par);
262} 262}
263 263
264u8 byte_rev[256] = {
265 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
266 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
267 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
268 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
269 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
270 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
271 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
272 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
273 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
274 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
275 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
276 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
277 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
278 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
279 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
280 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
281 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
282 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
283 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
284 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
285 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
286 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
287 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
288 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
289 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
290 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
291 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
292 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
293 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
294 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
295 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
296 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff,
297};
298
299int nvidiafb_sync(struct fb_info *info) 264int nvidiafb_sync(struct fb_info *info)
300{ 265{
301 struct nvidia_par *par = info->par; 266 struct nvidia_par *par = info->par;
diff --git a/drivers/video/nvidia/nv_local.h b/drivers/video/nvidia/nv_local.h
index 4243d7fae972..e009d242ea10 100644
--- a/drivers/video/nvidia/nv_local.h
+++ b/drivers/video/nvidia/nv_local.h
@@ -96,13 +96,16 @@
96#define READ_GET(par) (NV_RD32(&(par)->FIFO[0x0011], 0) >> 2) 96#define READ_GET(par) (NV_RD32(&(par)->FIFO[0x0011], 0) >> 2)
97 97
98#ifdef __LITTLE_ENDIAN 98#ifdef __LITTLE_ENDIAN
99
100#include <linux/bitrev.h>
101
99#define reverse_order(l) \ 102#define reverse_order(l) \
100do { \ 103do { \
101 u8 *a = (u8 *)(l); \ 104 u8 *a = (u8 *)(l); \
102 *a = byte_rev[*a], a++; \ 105 a[0] = bitrev8(a[0]); \
103 *a = byte_rev[*a], a++; \ 106 a[1] = bitrev8(a[1]); \
104 *a = byte_rev[*a], a++; \ 107 a[2] = bitrev8(a[2]); \
105 *a = byte_rev[*a]; \ 108 a[3] = bitrev8(a[3]); \
106} while(0) 109} while(0)
107#else 110#else
108#define reverse_order(l) do { } while(0) 111#define reverse_order(l) do { } while(0)
diff --git a/drivers/video/nvidia/nv_proto.h b/drivers/video/nvidia/nv_proto.h
index 861271017655..43058d0cf5b7 100644
--- a/drivers/video/nvidia/nv_proto.h
+++ b/drivers/video/nvidia/nv_proto.h
@@ -62,7 +62,6 @@ extern void nvidiafb_fillrect(struct fb_info *info,
62extern void nvidiafb_imageblit(struct fb_info *info, 62extern void nvidiafb_imageblit(struct fb_info *info,
63 const struct fb_image *image); 63 const struct fb_image *image);
64extern int nvidiafb_sync(struct fb_info *info); 64extern int nvidiafb_sync(struct fb_info *info);
65extern u8 byte_rev[256];
66 65
67/* in nv_backlight.h */ 66/* in nv_backlight.h */
68#ifdef CONFIG_FB_NVIDIA_BACKLIGHT 67#ifdef CONFIG_FB_NVIDIA_BACKLIGHT
diff --git a/drivers/video/riva/fbdev.c b/drivers/video/riva/fbdev.c
index a433cc78ef90..c6f86859399c 100644
--- a/drivers/video/riva/fbdev.c
+++ b/drivers/video/riva/fbdev.c
@@ -40,6 +40,7 @@
40#include <linux/init.h> 40#include <linux/init.h>
41#include <linux/pci.h> 41#include <linux/pci.h>
42#include <linux/backlight.h> 42#include <linux/backlight.h>
43#include <linux/bitrev.h>
43#ifdef CONFIG_MTRR 44#ifdef CONFIG_MTRR
44#include <asm/mtrr.h> 45#include <asm/mtrr.h>
45#endif 46#endif
@@ -521,48 +522,13 @@ static inline unsigned char MISCin(struct riva_par *par)
521 return (VGA_RD08(par->riva.PVIO, 0x3cc)); 522 return (VGA_RD08(par->riva.PVIO, 0x3cc));
522} 523}
523 524
524static u8 byte_rev[256] = {
525 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
526 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
527 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
528 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
529 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
530 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
531 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
532 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
533 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
534 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
535 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
536 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
537 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
538 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
539 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
540 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
541 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
542 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
543 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
544 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
545 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
546 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
547 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
548 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
549 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
550 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
551 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
552 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
553 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
554 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
555 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
556 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff,
557};
558
559static inline void reverse_order(u32 *l) 525static inline void reverse_order(u32 *l)
560{ 526{
561 u8 *a = (u8 *)l; 527 u8 *a = (u8 *)l;
562 *a = byte_rev[*a], a++; 528 a[0] = bitrev8(a[0]);
563 *a = byte_rev[*a], a++; 529 a[1] = bitrev8(a[1]);
564 *a = byte_rev[*a], a++; 530 a[2] = bitrev8(a[2]);
565 *a = byte_rev[*a]; 531 a[3] = bitrev8(a[3]);
566} 532}
567 533
568/* ------------------------------------------------------------------------- * 534/* ------------------------------------------------------------------------- *
diff --git a/drivers/video/tgafb.c b/drivers/video/tgafb.c
index 94fde625a6c0..08b3153bfb3f 100644
--- a/drivers/video/tgafb.c
+++ b/drivers/video/tgafb.c
@@ -23,6 +23,7 @@
23#include <linux/fb.h> 23#include <linux/fb.h>
24#include <linux/pci.h> 24#include <linux/pci.h>
25#include <linux/selection.h> 25#include <linux/selection.h>
26#include <linux/bitrev.h>
26#include <asm/io.h> 27#include <asm/io.h>
27#include <video/tgafb.h> 28#include <video/tgafb.h>
28 29
@@ -517,41 +518,6 @@ tgafb_blank(int blank, struct fb_info *info)
517static void 518static void
518tgafb_imageblit(struct fb_info *info, const struct fb_image *image) 519tgafb_imageblit(struct fb_info *info, const struct fb_image *image)
519{ 520{
520 static unsigned char const bitrev[256] = {
521 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
522 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
523 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
524 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
525 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
526 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
527 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
528 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
529 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
530 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
531 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
532 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
533 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
534 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
535 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
536 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
537 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
538 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
539 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
540 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
541 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
542 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
543 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
544 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
545 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
546 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
547 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
548 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
549 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
550 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
551 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
552 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff
553 };
554
555 struct tga_par *par = (struct tga_par *) info->par; 521 struct tga_par *par = (struct tga_par *) info->par;
556 u32 fgcolor, bgcolor, dx, dy, width, height, vxres, vyres, pixelmask; 522 u32 fgcolor, bgcolor, dx, dy, width, height, vxres, vyres, pixelmask;
557 unsigned long rincr, line_length, shift, pos, is8bpp; 523 unsigned long rincr, line_length, shift, pos, is8bpp;
@@ -649,7 +615,7 @@ tgafb_imageblit(struct fb_info *info, const struct fb_image *image)
649 /* The image data is bit big endian; we need 615 /* The image data is bit big endian; we need
650 little endian. */ 616 little endian. */
651 for (j = 0; j < bwidth; ++j) 617 for (j = 0; j < bwidth; ++j)
652 mask |= bitrev[data[j]] << (j * 8); 618 mask |= bitrev8(data[j]) << (j * 8);
653 619
654 __raw_writel(mask << shift, fb_base + pos); 620 __raw_writel(mask << shift, fb_base + pos);
655 621
@@ -676,10 +642,10 @@ tgafb_imageblit(struct fb_info *info, const struct fb_image *image)
676 for (i = 0; i < height; ++i) { 642 for (i = 0; i < height; ++i) {
677 for (j = 0; j < bwidth; j += 4) { 643 for (j = 0; j < bwidth; j += 4) {
678 u32 mask = 0; 644 u32 mask = 0;
679 mask |= bitrev[data[j+0]] << (0 * 8); 645 mask |= bitrev8(data[j+0]) << (0 * 8);
680 mask |= bitrev[data[j+1]] << (1 * 8); 646 mask |= bitrev8(data[j+1]) << (1 * 8);
681 mask |= bitrev[data[j+2]] << (2 * 8); 647 mask |= bitrev8(data[j+2]) << (2 * 8);
682 mask |= bitrev[data[j+3]] << (3 * 8); 648 mask |= bitrev8(data[j+3]) << (3 * 8);
683 __raw_writel(mask, fb_base + pos + j*bincr); 649 __raw_writel(mask, fb_base + pos + j*bincr);
684 } 650 }
685 pos += line_length; 651 pos += line_length;
@@ -699,7 +665,7 @@ tgafb_imageblit(struct fb_info *info, const struct fb_image *image)
699 for (i = 0; i < height; ++i) { 665 for (i = 0; i < height; ++i) {
700 u32 mask = 0; 666 u32 mask = 0;
701 for (j = 0; j < bwidth; ++j) 667 for (j = 0; j < bwidth; ++j)
702 mask |= bitrev[data[j]] << (j * 8); 668 mask |= bitrev8(data[j]) << (j * 8);
703 __raw_writel(mask, fb_base + pos); 669 __raw_writel(mask, fb_base + pos);
704 pos += line_length; 670 pos += line_length;
705 data += rincr; 671 data += rincr;
@@ -726,8 +692,8 @@ tgafb_imageblit(struct fb_info *info, const struct fb_image *image)
726 for (i = 0; i < height; ++i) { 692 for (i = 0; i < height; ++i) {
727 for (j = 0; j < bwidth; j += 2) { 693 for (j = 0; j < bwidth; j += 2) {
728 u32 mask = 0; 694 u32 mask = 0;
729 mask |= bitrev[data[j+0]] << (0 * 8); 695 mask |= bitrev8(data[j+0]) << (0 * 8);
730 mask |= bitrev[data[j+1]] << (1 * 8); 696 mask |= bitrev8(data[j+1]) << (1 * 8);
731 mask <<= shift; 697 mask <<= shift;
732 __raw_writel(mask, fb_base + pos + j*bincr); 698 __raw_writel(mask, fb_base + pos + j*bincr);
733 } 699 }
@@ -746,9 +712,9 @@ tgafb_imageblit(struct fb_info *info, const struct fb_image *image)
746 bwidth = (width & 15) > 8; 712 bwidth = (width & 15) > 8;
747 713
748 for (i = 0; i < height; ++i) { 714 for (i = 0; i < height; ++i) {
749 u32 mask = bitrev[data[0]]; 715 u32 mask = bitrev8(data[0]);
750 if (bwidth) 716 if (bwidth)
751 mask |= bitrev[data[1]] << 8; 717 mask |= bitrev8(data[1]) << 8;
752 mask <<= shift; 718 mask <<= shift;
753 __raw_writel(mask, fb_base + pos); 719 __raw_writel(mask, fb_base + pos);
754 pos += line_length; 720 pos += line_length;