Index: [thread] [date] [subject] [author]
  From: Jon M. Taylor <taylorj@ecs.csus.edu>
  To  : GGI mailing list <ggi-develop@eskimo.com>
  Date: Sat, 29 Aug 1998 14:31:21 -0700 (PDT)

XF68_FBDev patch: TrueColor fixed (fwd)

	Good news!

---
'Cloning and the reprogramming of DNA is the first serious step in 
becoming one with God.'
	- Scientist G. Richard Seed

---------- Forwarded message ----------
Date: Sat, 29 Aug 1998 22:33:34 +0200 (CEST)
From: Gerd Knorr <kraxel@goldbach.isdn.cs.tu-berlin.de>
To: Geert Uytterhoeven <Geert.Uytterhoeven@cs.kuleuven.ac.be>,
    Martin Mares <mj@ucw.cz>, Dirk H Hohndel <hohndel@suse.de>
Cc: Kernel List <linux-kernel@vger.rutgers.edu>
Subject: XF68_FBDev patch: TrueColor fixed


  Hi !

Got XF68_FBDev working with TrueColor (16+32 bpp) on i386 today.  Tested
with vesafb and kgicon.  Patch below, glibc binary at
	http://user.cs.tu-berlin.de/~kraxel/linux/#fb

Attention:  compiler problems continue:  gcc 2.7.2.3 FAILED to build a
working binary, I used egcs-1.0.2 to build the Server.

  Gerd

----------------------------- cut here -------------------------------
diff -u ./xc/config/cf/site.def.orig ./xc/config/cf/site.def
--- ./xc/config/cf/site.def.orig	Sat Aug 29 10:58:46 1998
+++ ./xc/config/cf/site.def	Sat Aug 29 10:59:18 1998
@@ -132,3 +132,8 @@
 #include <host.def>
 
 #endif /* AfterVendorCF */
+
+#define XF68FBDevServer		YES
+#  define XF68FBDevCFB8		YES
+#  define XF68FBDevCFB16	YES
+#  define XF68FBDevCFB32	YES
diff -u ./xc/programs/Xserver/PEX5/dipex/swap/check.c.orig ./xc/programs/Xserver/PEX5/dipex/swap/check.c
--- ./xc/programs/Xserver/PEX5/dipex/swap/check.c.orig	Wed Apr 27 09:19:06 1994
+++ ./xc/programs/Xserver/PEX5/dipex/swap/check.c	Sat Aug 29 16:44:24 1998
@@ -133,7 +133,7 @@
 checkStdHeader *strmPtr;
 {
 /* HACK ALERT ON */
-extern INT16 lastfp[];
+extern INT16 lastfp[MAXCLIENTS];
 /* HACK ALERT OFF */
 
     pexEnumTypeIndex fp;
@@ -193,7 +193,7 @@
 pexContext *cntxtPtr;
 checkStdHeader *strmPtr;
 {
-extern INT16 lastfp[];
+extern INT16 lastfp[MAXCLIENTS];
 
     pexEnumTypeIndex fp;
 
diff -u ./xc/programs/Xserver/cfb/cfbcmap.c.orig ./xc/programs/Xserver/cfb/cfbcmap.c
--- ./xc/programs/Xserver/cfb/cfbcmap.c.orig	Sat Aug 29 10:58:46 1998
+++ ./xc/programs/Xserver/cfb/cfbcmap.c	Sat Aug 29 16:22:08 1998
@@ -413,6 +413,25 @@
     return TRUE;
 }
 
+static int cfbRedBits;
+static int cfbRedOffset;
+static int cfbGreenBits;
+static int cfbGreenOffset;
+static int cfbBlueBits;
+static int cfbBlueOffset;
+
+Bool
+cfbSetColorMasks(rb,ro,gb,go,bb,bo)
+    int rb,ro,gb,go,bb,bo;
+{
+    cfbRedBits     = rb;
+    cfbRedOffset   = ro;
+    cfbGreenBits   = gb;
+    cfbGreenOffset = go;
+    cfbBlueBits    = bb;
+    cfbBlueOffset  = bo;
+}
+
 /*
  * Given a list of formats for a screen, create a list
  * of visuals and depths for the screen which coorespond to
@@ -524,12 +543,21 @@
 		visual->ColormapEntries = _CE(d);
 		/* fall through */
 	    case StaticColor:
-		visual->redMask =  _RM(d);
-		visual->greenMask =  _GM(d);
-		visual->blueMask =  _BM(d);
-		visual->offsetRed  =  _RS(d);
-		visual->offsetGreen = _GS(d);
-		visual->offsetBlue =  _BS(d);
+		if (cfbRedBits && cfbGreenBits && cfbBlueBits) {
+		    visual->redMask     = ((1 << cfbRedBits)   - 1) << cfbRedOffset;
+		    visual->greenMask   = ((1 << cfbGreenBits) - 1) << cfbGreenOffset;
+		    visual->blueMask    = ((1 << cfbBlueBits)  - 1) << cfbBlueOffset;
+		    visual->offsetRed   = cfbRedOffset;
+		    visual->offsetGreen = cfbGreenOffset;
+		    visual->offsetBlue  = cfbBlueOffset;
+		} else {
+		    visual->redMask     = _RM(d);
+		    visual->greenMask   = _GM(d);
+		    visual->blueMask    = _BM(d);
+		    visual->offsetRed   = _RS(d);
+		    visual->offsetGreen = _GS(d);
+		    visual->offsetBlue  = _BS(d);
+		}
 	    }
 	    vid++;
 	    visual++;
diff -u ./xc/programs/Xserver/hw/xfree68/fbdev/fbdev.c.orig ./xc/programs/Xserver/hw/xfree68/fbdev/fbdev.c
--- ./xc/programs/Xserver/hw/xfree68/fbdev/fbdev.c.orig	Sat Aug 29 10:58:46 1998
+++ ./xc/programs/Xserver/hw/xfree68/fbdev/fbdev.c	Sat Aug 29 16:23:06 1998
@@ -742,7 +742,6 @@
 			    break;
 
 			case FB_VISUAL_STATIC_PSEUDOCOLOR:
-			case FB_VISUAL_STATIC_DIRECTCOLOR:
 			    if (var->grayscale)
 				visuals = StaticGrayMask;
 			    else
@@ -805,7 +804,6 @@
 			    break;
 
 			case FB_VISUAL_STATIC_PSEUDOCOLOR:
-			case FB_VISUAL_STATIC_DIRECTCOLOR:
 			    if (var->grayscale)
 				visuals = StaticGrayMask;
 			    else
@@ -849,6 +847,14 @@
 #ifdef CONFIG_CFB16
 		    case 16:
 			fbtype = "cfb16";
+			cfbSetColorMasks(initscrvar.red.length,
+					 initscrvar.red.offset,
+					 initscrvar.green.length,
+					 initscrvar.green.offset,
+					 initscrvar.blue.length,
+					 initscrvar.blue.offset);
+			if (!cfbSetVisualTypes (bpp, TrueColorMask, 6))
+			    FatalError("cfbSetVisualTypes: FALSE\n");
 			cfb16ScreenInit(pScreen, fbdevVirtBase, xsize, ysize,
 					dxres, dyres, width);
 			fbdevPrivateIndexP = &cfb16ScreenPrivateIndex;
@@ -860,6 +866,14 @@
 #ifdef CONFIG_CFB32
 		    case 32:
 			fbtype = "cfb32";
+			cfbSetColorMasks(initscrvar.red.length,
+					 initscrvar.red.offset,
+					 initscrvar.green.length,
+					 initscrvar.green.offset,
+					 initscrvar.blue.length,
+					 initscrvar.blue.offset);
+			if (!cfbSetVisualTypes (bpp, TrueColorMask, 8))
+			    FatalError("cfbSetVisualTypes: FALSE\n");
 			cfb32ScreenInit(pScreen, fbdevVirtBase, xsize, ysize,
 					dxres, dyres, width);
 			fbdevPrivateIndexP = &cfb32ScreenPrivateIndex;
diff -u ./xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_io.c.orig ./xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_io.c
--- ./xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_io.c.orig	Sat Aug 29 10:58:46 1998
+++ ./xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_io.c	Sat Aug 29 10:59:18 1998
@@ -87,7 +87,7 @@
 {
 	struct termios nTty;
 
-	ioctl(xf86Info.consoleFd, KDSKBMODE, K_RAW);
+	ioctl(xf86Info.consoleFd, KDSKBMODE, K_MEDIUMRAW);
 	nTty = kbdtty;
 	nTty.c_iflag = (IGNPAR | IGNBRK) & (~PARMRK) & (~ISTRIP);
 	nTty.c_oflag = 0;
diff -u ./xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_init.c.orig ./xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_init.c
--- ./xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_init.c.orig	Sat Aug 29 10:58:46 1998
+++ ./xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_init.c	Sat Aug 29 10:59:18 1998
@@ -100,7 +100,7 @@
 #ifdef USE_DEV_FB
 	fb_dev_name=getenv("FRAMEBUFFER");
 	if (!fb_dev_name)
-	    fb_dev_name="/dev/fb0current";
+	    fb_dev_name="/dev/fb0";
 	if ((fbfd = open(fb_dev_name, O_RDONLY)) < 0)
 	    FatalError("xf86OpenConsole: Cannot open %s (%s)\n",
 	fb_dev_name, strerror(errno));



-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.altern.org/andrebalsa/doc/lkml-faq.html

Index: [thread] [date] [subject] [author]