[PATCH] video: use bitrev8

Use bitrev8 for nvidiafb, rivafb, and tgafb drivers

Cc: Antonino Daplas <adaplas@pol.net>
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
Akinobu Mita 2006-12-08 02:36:26 -08:00 committed by Linus Torvalds
parent 906d66df18
commit 1c6676825f
6 changed files with 26 additions and 124 deletions

View File

@ -541,6 +541,7 @@ config FB_TGA
select FB_CFB_FILLRECT select FB_CFB_FILLRECT
select FB_CFB_COPYAREA select FB_CFB_COPYAREA
select FB_CFB_IMAGEBLIT select FB_CFB_IMAGEBLIT
select BITREVERSE
help help
This is the frame buffer device driver for generic TGA graphic This is the frame buffer device driver for generic TGA graphic
cards. Say Y if you have one of those. cards. Say Y if you have one of those.
@ -705,6 +706,7 @@ config FB_NVIDIA
select FB_CFB_FILLRECT select FB_CFB_FILLRECT
select FB_CFB_COPYAREA select FB_CFB_COPYAREA
select FB_CFB_IMAGEBLIT select FB_CFB_IMAGEBLIT
select BITREVERSE
help help
This driver supports graphics boards with the nVidia chips, TNT This driver supports graphics boards with the nVidia chips, TNT
and newer. For very old chipsets, such as the RIVA128, then use and newer. For very old chipsets, such as the RIVA128, then use
@ -744,6 +746,7 @@ config FB_RIVA
select FB_CFB_FILLRECT select FB_CFB_FILLRECT
select FB_CFB_COPYAREA select FB_CFB_COPYAREA
select FB_CFB_IMAGEBLIT select FB_CFB_IMAGEBLIT
select BITREVERSE
help help
This driver supports graphics boards with the nVidia Riva/Geforce This driver supports graphics boards with the nVidia Riva/Geforce
chips. chips.

View File

@ -261,41 +261,6 @@ void NVResetGraphics(struct fb_info *info)
NVDmaKickoff(par); NVDmaKickoff(par);
} }
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,
};
int nvidiafb_sync(struct fb_info *info) int nvidiafb_sync(struct fb_info *info)
{ {
struct nvidia_par *par = info->par; struct nvidia_par *par = info->par;

View File

@ -96,13 +96,16 @@
#define READ_GET(par) (NV_RD32(&(par)->FIFO[0x0011], 0) >> 2) #define READ_GET(par) (NV_RD32(&(par)->FIFO[0x0011], 0) >> 2)
#ifdef __LITTLE_ENDIAN #ifdef __LITTLE_ENDIAN
#include <linux/bitrev.h>
#define reverse_order(l) \ #define reverse_order(l) \
do { \ do { \
u8 *a = (u8 *)(l); \ u8 *a = (u8 *)(l); \
*a = byte_rev[*a], a++; \ a[0] = bitrev8(a[0]); \
*a = byte_rev[*a], a++; \ a[1] = bitrev8(a[1]); \
*a = byte_rev[*a], a++; \ a[2] = bitrev8(a[2]); \
*a = byte_rev[*a]; \ a[3] = bitrev8(a[3]); \
} while(0) } while(0)
#else #else
#define reverse_order(l) do { } while(0) #define reverse_order(l) do { } while(0)

View File

@ -62,7 +62,6 @@ extern void nvidiafb_fillrect(struct fb_info *info,
extern void nvidiafb_imageblit(struct fb_info *info, extern void nvidiafb_imageblit(struct fb_info *info,
const struct fb_image *image); const struct fb_image *image);
extern int nvidiafb_sync(struct fb_info *info); extern int nvidiafb_sync(struct fb_info *info);
extern u8 byte_rev[256];
/* in nv_backlight.h */ /* in nv_backlight.h */
#ifdef CONFIG_FB_NVIDIA_BACKLIGHT #ifdef CONFIG_FB_NVIDIA_BACKLIGHT

View File

@ -40,6 +40,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/backlight.h> #include <linux/backlight.h>
#include <linux/bitrev.h>
#ifdef CONFIG_MTRR #ifdef CONFIG_MTRR
#include <asm/mtrr.h> #include <asm/mtrr.h>
#endif #endif
@ -521,48 +522,13 @@ static inline unsigned char MISCin(struct riva_par *par)
return (VGA_RD08(par->riva.PVIO, 0x3cc)); 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 void reverse_order(u32 *l)
{ {
u8 *a = (u8 *)l; u8 *a = (u8 *)l;
*a = byte_rev[*a], a++; a[0] = bitrev8(a[0]);
*a = byte_rev[*a], a++; a[1] = bitrev8(a[1]);
*a = byte_rev[*a], a++; a[2] = bitrev8(a[2]);
*a = byte_rev[*a]; a[3] = bitrev8(a[3]);
} }
/* ------------------------------------------------------------------------- * /* ------------------------------------------------------------------------- *

View File

@ -23,6 +23,7 @@
#include <linux/fb.h> #include <linux/fb.h>
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/selection.h> #include <linux/selection.h>
#include <linux/bitrev.h>
#include <asm/io.h> #include <asm/io.h>
#include <video/tgafb.h> #include <video/tgafb.h>
@ -517,41 +518,6 @@ tgafb_blank(int blank, struct fb_info *info)
static void static void
tgafb_imageblit(struct fb_info *info, const struct fb_image *image) tgafb_imageblit(struct fb_info *info, const struct fb_image *image)
{ {
static unsigned char const bitrev[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
};
struct tga_par *par = (struct tga_par *) info->par; struct tga_par *par = (struct tga_par *) info->par;
u32 fgcolor, bgcolor, dx, dy, width, height, vxres, vyres, pixelmask; u32 fgcolor, bgcolor, dx, dy, width, height, vxres, vyres, pixelmask;
unsigned long rincr, line_length, shift, pos, is8bpp; unsigned long rincr, line_length, shift, pos, is8bpp;
@ -649,7 +615,7 @@ tgafb_imageblit(struct fb_info *info, const struct fb_image *image)
/* The image data is bit big endian; we need /* The image data is bit big endian; we need
little endian. */ little endian. */
for (j = 0; j < bwidth; ++j) for (j = 0; j < bwidth; ++j)
mask |= bitrev[data[j]] << (j * 8); mask |= bitrev8(data[j]) << (j * 8);
__raw_writel(mask << shift, fb_base + pos); __raw_writel(mask << shift, fb_base + pos);
@ -676,10 +642,10 @@ tgafb_imageblit(struct fb_info *info, const struct fb_image *image)
for (i = 0; i < height; ++i) { for (i = 0; i < height; ++i) {
for (j = 0; j < bwidth; j += 4) { for (j = 0; j < bwidth; j += 4) {
u32 mask = 0; u32 mask = 0;
mask |= bitrev[data[j+0]] << (0 * 8); mask |= bitrev8(data[j+0]) << (0 * 8);
mask |= bitrev[data[j+1]] << (1 * 8); mask |= bitrev8(data[j+1]) << (1 * 8);
mask |= bitrev[data[j+2]] << (2 * 8); mask |= bitrev8(data[j+2]) << (2 * 8);
mask |= bitrev[data[j+3]] << (3 * 8); mask |= bitrev8(data[j+3]) << (3 * 8);
__raw_writel(mask, fb_base + pos + j*bincr); __raw_writel(mask, fb_base + pos + j*bincr);
} }
pos += line_length; pos += line_length;
@ -699,7 +665,7 @@ tgafb_imageblit(struct fb_info *info, const struct fb_image *image)
for (i = 0; i < height; ++i) { for (i = 0; i < height; ++i) {
u32 mask = 0; u32 mask = 0;
for (j = 0; j < bwidth; ++j) for (j = 0; j < bwidth; ++j)
mask |= bitrev[data[j]] << (j * 8); mask |= bitrev8(data[j]) << (j * 8);
__raw_writel(mask, fb_base + pos); __raw_writel(mask, fb_base + pos);
pos += line_length; pos += line_length;
data += rincr; data += rincr;
@ -726,8 +692,8 @@ tgafb_imageblit(struct fb_info *info, const struct fb_image *image)
for (i = 0; i < height; ++i) { for (i = 0; i < height; ++i) {
for (j = 0; j < bwidth; j += 2) { for (j = 0; j < bwidth; j += 2) {
u32 mask = 0; u32 mask = 0;
mask |= bitrev[data[j+0]] << (0 * 8); mask |= bitrev8(data[j+0]) << (0 * 8);
mask |= bitrev[data[j+1]] << (1 * 8); mask |= bitrev8(data[j+1]) << (1 * 8);
mask <<= shift; mask <<= shift;
__raw_writel(mask, fb_base + pos + j*bincr); __raw_writel(mask, fb_base + pos + j*bincr);
} }
@ -746,9 +712,9 @@ tgafb_imageblit(struct fb_info *info, const struct fb_image *image)
bwidth = (width & 15) > 8; bwidth = (width & 15) > 8;
for (i = 0; i < height; ++i) { for (i = 0; i < height; ++i) {
u32 mask = bitrev[data[0]]; u32 mask = bitrev8(data[0]);
if (bwidth) if (bwidth)
mask |= bitrev[data[1]] << 8; mask |= bitrev8(data[1]) << 8;
mask <<= shift; mask <<= shift;
__raw_writel(mask, fb_base + pos); __raw_writel(mask, fb_base + pos);
pos += line_length; pos += line_length;