patch-2.4.23 linux-2.4.23/drivers/video/tdfxfb.c
Next file: linux-2.4.23/drivers/video/vesafb.c
Previous file: linux-2.4.23/drivers/video/sis/vstruct.h
Back to the patch index
Back to the overall index
- Lines: 105
- Date:
2003-11-28 10:26:21.000000000 -0800
- Orig file:
linux-2.4.22/drivers/video/tdfxfb.c
- Orig date:
2003-06-13 07:51:37.000000000 -0700
diff -urN linux-2.4.22/drivers/video/tdfxfb.c linux-2.4.23/drivers/video/tdfxfb.c
@@ -764,7 +764,11 @@
tdfx_outl(SRCXY, 0);
tdfx_outl(DSTXY, xx | (yy << 16));
tdfx_outl(COMMAND_2D, COMMAND_2D_H2S_BITBLT | (ROP_COPY << 24));
+#ifdef __BIG_ENDIAN
+ tdfx_outl(SRCFORMAT, 0x400000 | BIT(20) );
+#else
tdfx_outl(SRCFORMAT, 0x400000);
+#endif
tdfx_outl(DSTFORMAT, fmt);
tdfx_outl(DSTSIZE, fontwidth(p) | (fontheight(p) << 16));
i=fontheight(p);
@@ -822,7 +826,11 @@
tdfx_outl(COMMAND_3D, COMMAND_3D_NOP);
tdfx_outl(COLORFORE, fgx);
tdfx_outl(COLORBACK, bgx);
+#ifdef __BIG_ENDIAN
+ tdfx_outl(SRCFORMAT, 0x400000 | BIT(20) );
+#else
tdfx_outl(SRCFORMAT, 0x400000);
+#endif
tdfx_outl(DSTFORMAT, fmt);
tdfx_outl(DSTSIZE, w | (h << 16));
tdfx_outl(SRCXY, 0);
@@ -1475,6 +1483,7 @@
#if defined(__BIG_ENDIAN)
switch (par->bpp) {
case 8:
+ case 24:
reg.miscinit0 &= ~(1 << 30);
reg.miscinit0 &= ~(1 << 31);
break;
@@ -1482,7 +1491,6 @@
reg.miscinit0 |= (1 << 30);
reg.miscinit0 |= (1 << 31);
break;
- case 24:
case 32:
reg.miscinit0 |= (1 << 30);
reg.miscinit0 &= ~(1 << 31);
@@ -1635,10 +1643,6 @@
v.blue.length = 5;
break;
case 24:
- v.red.offset=16;
- v.green.offset=8;
- v.blue.offset=0;
- v.red.length = v.green.length = v.blue.length = 8;
case 32:
v.red.offset = 16;
v.green.offset = 8;
@@ -1942,6 +1946,12 @@
break;
}
+ if (pci_enable_device(pdev))
+ {
+ printk(KERN_WARNING "fb: Unable to enable %s PCI device.\n", name);
+ return -ENXIO;
+ }
+
fb_info.regbase_phys = pci_resource_start(pdev, 0);
fb_info.regbase_size = 1 << 24;
fb_info.regbase_virt = ioremap_nocache(fb_info.regbase_phys, 1 << 24);
@@ -1970,6 +1980,13 @@
fb_info.iobase = pci_resource_start (pdev, 2);
+ if (!fb_info.iobase) {
+ printk(KERN_WARNING "fb: Can't access %s I/O ports.\n", name);
+ iounmap(fb_info.regbase_virt);
+ iounmap(fb_info.bufbase_virt);
+ return -ENXIO;
+ }
+
printk("fb: %s memory = %ldK\n", name, fb_info.bufbase_size >> 10);
#ifdef CONFIG_MTRR
@@ -2363,10 +2380,25 @@
unsigned int h,to;
tdfxfb_createcursorshape(p);
- xline = ~((1 << (32 - fb_info.cursor.w)) - 1);
+ xline = (~0) << (32 - fb_info.cursor.w);
#ifdef __LITTLE_ENDIAN
xline = swab32(xline);
+#else
+ switch (p->var.bits_per_pixel) {
+ case 8:
+ case 24:
+ xline = swab32(xline);
+ break;
+ case 16:
+ xline = ((xline & 0xff000000 ) >> 16 )
+ | ((xline & 0x00ff0000 ) >> 16 )
+ | ((xline & 0x0000ff00 ) << 16 )
+ | ((xline & 0x000000ff ) << 16 );
+ break;
+ case 32:
+ break;
+ }
#endif
cursorbase=(u8*)fb_info.bufbase_virt;
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)