[Xorg-commit] xc/programs/Xserver/hw/xfree86/drivers/i810 common.h,1.1.4.1,1.1.4.2 i810.man,1.1.4.1,1.1.4.2 i810_accel.c,1.1.4.1,1.1.4.2 i810_driver.c,1.1.4.3,1.1.4.4 i810_reg.h,1.1,1.1.4.1 i830.h,1.1.4.1,1.1.4.2 i830_accel.c,1.1.4.1,1.1.4.2 i830_driver.c,1.1.4.1,1.1.4.2

Kaleb Keithley xorg-commit at pdx.freedesktop.org
Wed May 9 17:30:30 EEST 2007


Committed by: kaleb

Update of /cvs/xorg/xc/programs/Xserver/hw/xfree86/drivers/i810
In directory pdx:/home/kaleb/xorg/xc.XORG-CURRENT/programs/Xserver/hw/xfree86/drivers/i810

Modified Files:
      Tag: XORG-CURRENT
	common.h i810.man i810_accel.c i810_driver.c i810_reg.h i830.h 
	i830_accel.c i830_driver.c 
Log Message:
merge most of XFree86 RC3 (4.3.99.903) from vendor branch.
bug #214


Index: common.h
===================================================================
RCS file: /cvs/xorg/xc/programs/Xserver/hw/xfree86/drivers/i810/common.h,v
retrieving revision 1.1.4.1
retrieving revision 1.1.4.2
diff -u -d -r1.1.4.1 -r1.1.4.2
--- a/common.h	26 Nov 2003 22:48:59 -0000	1.1.4.1
+++ b/common.h	23 Feb 2004 21:35:30 -0000	1.1.4.2
@@ -27,7 +27,7 @@
 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 **************************************************************************/
-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/common.h,v 1.9 2003/09/24 02:43:23 dawes Exp $ */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/common.h,v 1.10 2004/01/03 02:11:53 dawes Exp $ */
 
 /*
  * Authors:
@@ -257,8 +257,10 @@
  * preprocessor symbol, and equal to zero.
  */
 #if 1
+#ifndef I810_DEBUG
 #define I810_DEBUG 0
 #endif
+#endif
 #ifndef I810_DEBUG
 #warning "Debugging enabled - expect reduced performance"
 extern int I810_DEBUG;

Index: i810.man
===================================================================
RCS file: /cvs/xorg/xc/programs/Xserver/hw/xfree86/drivers/i810/i810.man,v
retrieving revision 1.1.4.1
retrieving revision 1.1.4.2
diff -u -d -r1.1.4.1 -r1.1.4.2
--- a/i810.man	26 Nov 2003 22:48:59 -0000	1.1.4.1
+++ b/i810.man	23 Feb 2004 21:35:30 -0000	1.1.4.2
@@ -1,4 +1,4 @@
-.\" $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i810.man,v 1.5 2003/10/18 02:27:07 dawes Exp $ 
+.\" $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i810.man,v 1.6 2004/01/07 03:43:19 dawes Exp $ 
 .\" shorthand for double quote that works everywhere.
 .ds q \N'34'
 .TH I810 __drivermansuffix__ __vendorversion__
@@ -116,6 +116,13 @@
 .B Options
 are supported for the 830M and later chipsets:
 .TP
+.BI "Option \*qVBERestore\*q \*q" boolean \*q
+Enable or disable the use of VBE save/restore for saving and restoring
+the initial text mode.  This is disabled by default because it causes
+lockups on some platforms.  However, there are some cases where it must
+enabled for the correct restoration of the initial video mode.  If you are
+having a problem with that, try enabling this option.  Default: Disabled.
+.TP
 .BI "Option \*qVideoKey\*q \*q" integer \*q
 This is the same as the
 .B \*qColorKey\*q
@@ -123,8 +130,8 @@
 other drivers.
 .TP
 .BI "Option \*qXVideo\*q \*q" boolean \*q
-Disable or enable XVideo support.
-Default: XVideo is enabled for configurations where it is supported.
+Disable or enable XVideo support.  Default: XVideo is enabled for
+configurations where it is supported.
 
 
 .SH "SEE ALSO"

Index: i810_accel.c
===================================================================
RCS file: /cvs/xorg/xc/programs/Xserver/hw/xfree86/drivers/i810/i810_accel.c,v
retrieving revision 1.1.4.1
retrieving revision 1.1.4.2
diff -u -d -r1.1.4.1 -r1.1.4.2
--- a/i810_accel.c	26 Nov 2003 22:48:59 -0000	1.1.4.1
+++ b/i810_accel.c	23 Feb 2004 21:35:30 -0000	1.1.4.2
@@ -25,7 +25,7 @@
 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 **************************************************************************/
-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i810_accel.c,v 1.19 2003/04/24 18:00:24 eich Exp $ */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i810_accel.c,v 1.22 2004/01/03 02:11:53 dawes Exp $ */
 
 /*
  * Reformatted with GNU indent (2.2.8), using the following options:
@@ -48,47 +48,9 @@
 
 #include "xf86_ansic.h"
 #include "xf86.h"
-
+#include "xaarop.h"
 #include "i810.h"
 
-static unsigned int i810Rop[16] = {
-   0x00,				/* GXclear      */
-   0x88,				/* GXand        */
-   0x44,				/* GXandReverse */
-   0xCC,				/* GXcopy       */
-   0x22,				/* GXandInvert  */
-   0xAA,				/* GXnoop       */
-   0x66,				/* GXxor        */
-   0xEE,				/* GXor         */
-   0x11,				/* GXnor        */
-   0x99,				/* GXequiv      */
-   0x55,				/* GXinvert     */
-   0xDD,				/* GXorReverse  */
-   0x33,				/* GXcopyInvert */
-   0xBB,				/* GXorInverted */
-   0x77,				/* GXnand       */
-   0xFF					/* GXset        */
-};
-
-static unsigned int i810PatternRop[16] = {
-   0x00,				/* GXclear      */
-   0xA0,				/* GXand        */
-   0x50,				/* GXandReverse */
-   0xF0,				/* GXcopy       */
-   0x0A,				/* GXandInvert  */
-   0xAA,				/* GXnoop       */
-   0x5A,				/* GXxor        */
-   0xFA,				/* GXor         */
-   0x05,				/* GXnor        */
-   0xA5,				/* GXequiv      */
-   0x55,				/* GXinvert     */
-   0xF5,				/* GXorReverse  */
-   0x0F,				/* GXcopyInvert */
-   0xAF,				/* GXorInverted */
-   0x5F,				/* GXnand       */
-   0xFF					/* GXset        */
-};
-
 static void I810SetupForMono8x8PatternFill(ScrnInfoPtr pScrn,
 					   int pattx, int patty,
 					   int fg, int bg, int rop,
@@ -130,10 +92,7 @@
 
    pI810->bufferOffset = 0;
    infoPtr->Flags = LINEAR_FRAMEBUFFER | OFFSCREEN_PIXMAPS;
-   /* There is a bit blt bug in 24 bpp.  This is a problem, but
-    * at least without the pixmap cache we can pass the test suite */
-   if (pScrn->depth != 24)
-      infoPtr->Flags |= PIXMAP_CACHE;
+   infoPtr->Flags |= PIXMAP_CACHE;
 
    /* Sync
     */
@@ -334,7 +293,7 @@
 
    /* Color blit, p166 */
    pI810->BR[13] = (BR13_SOLID_PATTERN |
-		    (i810PatternRop[rop] << 16) |
+		    (XAAPatternROP[rop] << 16) |
 		    (pScrn->displayWidth * pI810->cpp));
    pI810->BR[16] = color;
 }
@@ -380,7 +339,7 @@
    if (xdir == -1)
       pI810->BR[13] |= BR13_RIGHT_TO_LEFT;
 
-   pI810->BR[13] |= i810Rop[rop] << 16;
+   pI810->BR[13] |= XAACopyROP[rop] << 16;
 
    pI810->BR[18] = 0;
 }
@@ -401,9 +360,12 @@
      * This was developed empirically so it may not catch all
      * cases.
      */
+#define I810_MWIDTH 8
+
     if ( !(pI810->BR[13] & BR13_RIGHT_TO_LEFT) && (y2 - y1) < 3 
-	 && (y2 - y1) >= 0 && (x2 - x1) <= (w + 4) && (w > 4))
-	w = 4;
+	 && (y2 - y1) >= 0 && (x2 - x1) <= (w + I810_MWIDTH)
+	 && (w > I810_MWIDTH))
+	w = I810_MWIDTH;
     do {
 
 	if (pI810->BR[13] & BR13_PITCH_SIGN_BIT) {
@@ -441,7 +403,10 @@
 	    break;
 	x2 += w;
 	x1 += w;
-	w = w_back;
+	if (w_back > I810_MWIDTH)
+	    w = I810_MWIDTH;
+	else
+	    w = w_back;
     }  while (1);
 }
 
@@ -460,9 +425,9 @@
    pI810->BR[18] = bg;
    pI810->BR[19] = fg;
    pI810->BR[13] = (pScrn->displayWidth * pI810->cpp);
-   pI810->BR[13] |= i810PatternRop[rop] << 16;
+   pI810->BR[13] |= XAAPatternROP[rop] << 16;
    if (bg == -1)
-      pI810->BR[13] |= BR13_MONO_TRANSPCY;
+      pI810->BR[13] |= BR13_MONO_PATN_TRANS;
 }
 
 static void
@@ -524,7 +489,7 @@
 	     fg, bg, rop, planemask);
 
    pI810->BR[13] = (pScrn->displayWidth * pI810->cpp);
-   pI810->BR[13] |= i810Rop[rop] << 16;
+   pI810->BR[13] |= XAACopyROP[rop] << 16;
    pI810->BR[13] |= (1 << 27);
    if (bg == -1)
       pI810->BR[13] |= BR13_MONO_TRANSPCY;

Index: i810_driver.c
===================================================================
RCS file: /cvs/xorg/xc/programs/Xserver/hw/xfree86/drivers/i810/i810_driver.c,v
retrieving revision 1.1.4.3
retrieving revision 1.1.4.4
diff -u -d -r1.1.4.3 -r1.1.4.4
--- a/i810_driver.c	20 Dec 2003 00:28:27 -0000	1.1.4.3
+++ b/i810_driver.c	23 Feb 2004 21:35:30 -0000	1.1.4.4
@@ -25,8 +25,7 @@
 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 **************************************************************************/
-/* $XdotOrg$ */
-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i810_driver.c,v 1.98 2003/12/07 18:28:07 dawes Exp $ */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i810_driver.c,v 1.102 2004/01/02 22:16:18 dawes Exp $ */
 
 /*
  * Reformatted with GNU indent (2.2.8), using the following options:
@@ -245,6 +244,8 @@
    "XAACreateInfoRec",
    "XAADestroyInfoRec",
    "XAAInit",
+   "XAACopyROP",
+   "XAAPatternROP",
    NULL
 };
 
@@ -377,6 +378,7 @@
 			I810drmSymbols,
 			I810driSymbols,
 			I810shadowSymbols,
+			driShadowFBSymbols,
 #endif
 			I810vbeSymbols, vbeOptionalSymbols,
 			I810ddcSymbols, I810int10Symbols, NULL);
@@ -2220,10 +2222,39 @@
 I810SwitchMode(int scrnIndex, DisplayModePtr mode, int flags)
 {
    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+   I810Ptr pI810 = I810PTR(pScrn);
 
    if (I810_DEBUG & DEBUG_VERBOSE_CURSOR)
       ErrorF("I810SwitchMode %p %x\n", (void *)mode, flags);
 
+#ifdef XF86DRI
+   if (pI810->directRenderingEnabled) {
+      if (I810_DEBUG & DEBUG_VERBOSE_DRI)
+	 ErrorF("calling dri lock\n");
+      DRILock(screenInfo.screens[scrnIndex], 0);
+      pI810->LockHeld = 1;
+   }
+#endif
+
+   if (pI810->AccelInfoRec != NULL) {
+      I810RefreshRing(pScrn);
+      I810Sync(pScrn);
+      pI810->AccelInfoRec->NeedToSync = FALSE;
+   }
+   I810Restore(pScrn);
+
+#ifdef XF86DRI
+   if (!I810DRIEnter(pScrn)) {
+      return FALSE;
+   }
+   if (pI810->directRenderingEnabled) {
+      if (I810_DEBUG & DEBUG_VERBOSE_DRI)
+	 ErrorF("calling dri unlock\n");
+      DRIUnlock(screenInfo.screens[scrnIndex]);
+      pI810->LockHeld = 0;
+   }
+#endif
+
    return I810ModeInit(pScrn, mode);
 }
 
@@ -2357,6 +2388,11 @@
    XAAInfoRecPtr infoPtr = pI810->AccelInfoRec;
 
    if (pScrn->vtSema == TRUE) {
+      if (pI810->AccelInfoRec != NULL) {
+	 I810RefreshRing(pScrn);
+	 I810Sync(pScrn);
+	 pI810->AccelInfoRec->NeedToSync = FALSE;
+      }
       I810Restore(pScrn);
       vgaHWLock(hwp);
    }

Index: i810_reg.h
===================================================================
RCS file: /cvs/xorg/xc/programs/Xserver/hw/xfree86/drivers/i810/i810_reg.h,v
retrieving revision 1.1
retrieving revision 1.1.4.1
diff -u -d -r1.1 -r1.1.4.1
--- a/i810_reg.h	14 Nov 2003 16:48:55 -0000	1.1
+++ b/i810_reg.h	23 Feb 2004 21:35:30 -0000	1.1.4.1
@@ -1,4 +1,4 @@
-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i810_reg.h,v 1.13 2003/02/06 04:18:04 dawes Exp $ */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i810_reg.h,v 1.14 2004/01/02 20:22:17 dawes Exp $ */
 /**************************************************************************
 
 Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
@@ -497,6 +497,7 @@
 #define BR13_RIGHT_TO_LEFT   0x40000000
 #define BR13_LEFT_TO_RIGHT   0x00000000
 #define BR13_MONO_TRANSPCY   0x20000000
+#define BR13_MONO_PATN_TRANS 0x10000000
 #define BR13_USE_DYN_DEPTH   0x04000000
 #define BR13_DYN_8BPP        0x00000000
 #define BR13_DYN_16BPP       0x01000000

Index: i830.h
===================================================================
RCS file: /cvs/xorg/xc/programs/Xserver/hw/xfree86/drivers/i810/i830.h,v
retrieving revision 1.1.4.1
retrieving revision 1.1.4.2
diff -u -d -r1.1.4.1 -r1.1.4.2
--- a/i830.h	26 Nov 2003 22:48:59 -0000	1.1.4.1
+++ b/i830.h	23 Feb 2004 21:35:30 -0000	1.1.4.2
@@ -27,7 +27,7 @@
 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 **************************************************************************/
-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i830.h,v 1.11 2003/10/21 04:13:40 dawes Exp $ */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i830.h,v 1.12 2004/01/07 03:43:19 dawes Exp $ */
 
 /*
  * Authors:
@@ -302,6 +302,7 @@
    int yoffset;
 
    int SaveGeneration;
+   Bool vbeRestoreWorkaround;
 } I830Rec;
 
 #define I830PTR(p) ((I830Ptr)((p)->driverPrivate))

Index: i830_accel.c
===================================================================
RCS file: /cvs/xorg/xc/programs/Xserver/hw/xfree86/drivers/i810/i830_accel.c,v
retrieving revision 1.1.4.1
retrieving revision 1.1.4.2
diff -u -d -r1.1.4.1 -r1.1.4.2
--- a/i830_accel.c	26 Nov 2003 22:48:59 -0000	1.1.4.1
+++ b/i830_accel.c	23 Feb 2004 21:35:30 -0000	1.1.4.2
@@ -32,7 +32,7 @@
 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 **************************************************************************/
-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i830_accel.c,v 1.8 2003/04/24 18:00:24 eich Exp $ */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i830_accel.c,v 1.9 2003/12/22 12:27:07 alanh Exp $ */
 
 /*
  * Reformatted with GNU indent (2.2.8), using the following options:
@@ -55,48 +55,10 @@
 
 #include "xf86_ansic.h"
 #include "xf86.h"
-
+#include "xaarop.h"
 #include "i830.h"
 #include "i810_reg.h"
 
-static unsigned int i810Rop[16] = {
-   0x00,				/* GXclear      */
-   0x88,				/* GXand        */
-   0x44,				/* GXandReverse */
-   0xCC,				/* GXcopy       */
-   0x22,				/* GXandInvert  */
-   0xAA,				/* GXnoop       */
-   0x66,				/* GXxor        */
-   0xEE,				/* GXor         */
-   0x11,				/* GXnor        */
-   0x99,				/* GXequiv      */
-   0x55,				/* GXinvert     */
-   0xDD,				/* GXorReverse  */
-   0x33,				/* GXcopyInvert */
-   0xBB,				/* GXorInverted */
-   0x77,				/* GXnand       */
-   0xFF					/* GXset        */
-};
-
-static unsigned int i810PatternRop[16] = {
-   0x00,				/* GXclear      */
-   0xA0,				/* GXand        */
-   0x50,				/* GXandReverse */
-   0xF0,				/* GXcopy       */
-   0x0A,				/* GXandInvert  */
-   0xAA,				/* GXnoop       */
-   0x5A,				/* GXxor        */
-   0xFA,				/* GXor         */
-   0x05,				/* GXnor        */
-   0xA5,				/* GXequiv      */
-   0x55,				/* GXinvert     */
-   0xF5,				/* GXorReverse  */
-   0x0F,				/* GXcopyInvert */
-   0xAF,				/* GXorInverted */
-   0x5F,				/* GXnand       */
-   0xFF					/* GXset        */
-};
-
 int
 I830WaitLpRing(ScrnInfoPtr pScrn, int n, int timeout_millis)
 {
@@ -397,7 +359,7 @@
       ErrorF("I830SetupForFillRectSolid color: %x rop: %x mask: %x\n",
 	     color, rop, planemask);
 
-   pI830->BR[13] = ((i810PatternRop[rop] << 16) |
+   pI830->BR[13] = ((XAAPatternROP[rop] << 16) |
 		    (pScrn->displayWidth * pI830->cpp));
 
    pI830->BR[16] = color;
@@ -453,7 +415,7 @@
 	     xdir, ydir, rop, planemask, transparency_color);
 
    pI830->BR[13] = (pScrn->displayWidth * pI830->cpp);
-   pI830->BR[13] |= i810Rop[rop] << 16;
+   pI830->BR[13] |= XAACopyROP[rop] << 16;
 
    switch (pScrn->bitsPerPixel) {
    case 8:
@@ -519,7 +481,7 @@
    pI830->BR[19] = fg;
 
    pI830->BR[13] = (pScrn->displayWidth * pI830->cpp);	/* In bytes */
-   pI830->BR[13] |= i810PatternRop[rop] << 16;
+   pI830->BR[13] |= XAAPatternROP[rop] << 16;
    if (bg == -1)
       pI830->BR[13] |= (1 << 28);
 
@@ -608,7 +570,7 @@
 
    /* Fill out register values */
    pI830->BR[13] = (pScrn->displayWidth * pI830->cpp);
-   pI830->BR[13] |= i810Rop[rop] << 16;
+   pI830->BR[13] |= XAACopyROP[rop] << 16;
    if (bg == -1)
       pI830->BR[13] |= (1 << 29);
 
@@ -697,7 +659,7 @@
 
    /* Fill out register values */
    pI830->BR[13] = (pScrn->displayWidth * pI830->cpp);
-   pI830->BR[13] |= i810Rop[rop] << 16;
+   pI830->BR[13] |= XAACopyROP[rop] << 16;
 
    switch (pScrn->bitsPerPixel) {
    case 8:

Index: i830_driver.c
===================================================================
RCS file: /cvs/xorg/xc/programs/Xserver/hw/xfree86/drivers/i810/i830_driver.c,v
retrieving revision 1.1.4.1
retrieving revision 1.1.4.2
diff -u -d -r1.1.4.1 -r1.1.4.2
--- a/i830_driver.c	26 Nov 2003 22:48:59 -0000	1.1.4.1
+++ b/i830_driver.c	23 Feb 2004 21:35:30 -0000	1.1.4.2
@@ -1,4 +1,4 @@
-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i830_driver.c,v 1.47 2003/11/03 14:47:28 alanh Exp $ */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i830_driver.c,v 1.49 2004/01/25 16:57:48 dawes Exp $ */
 /**************************************************************************
 
 Copyright 2001 VA Linux Systems Inc., Fremont, California.
@@ -201,7 +201,8 @@
    OPTION_PAGEFLIP,
    OPTION_XVIDEO,
    OPTION_VIDEO_KEY,
-   OPTION_COLOR_KEY
+   OPTION_COLOR_KEY,
+   OPTION_VBE_RESTORE
 } I830Opts;
 
 static OptionInfoRec I830BIOSOptions[] = {
@@ -213,6 +214,7 @@
    {OPTION_XVIDEO,	"XVideo",	OPTV_BOOLEAN,	{0},	TRUE},
    {OPTION_COLOR_KEY,	"ColorKey",	OPTV_INTEGER,	{0},	FALSE},
    {OPTION_VIDEO_KEY,	"VideoKey",	OPTV_INTEGER,	{0},	FALSE},
+   {OPTION_VBE_RESTORE,	"VBERestore",	OPTV_BOOLEAN,	{0},	FALSE},
    {-1,			NULL,		OPTV_NONE,	{0},	FALSE}
 };
 /* *INDENT-ON* */
@@ -2124,6 +2126,16 @@
    VBEFreeVBEInfo(pI830->vbeInfo);
    vbeFree(pVbe);
 
+   /* Use the VBE mode restore workaround by default. */
+   pI830->vbeRestoreWorkaround = TRUE;
+   from = X_DEFAULT;
+   if (xf86ReturnOptValBool(pI830->Options, OPTION_VBE_RESTORE, FALSE)) {
+      pI830->vbeRestoreWorkaround = FALSE;
+      from = X_CONFIG;
+   }
+   xf86DrvMsg(pScrn->scrnIndex, from, "VBE Restore workaround: %s.\n",
+	      pI830->vbeRestoreWorkaround ? "enabled" : "disabled");
+      
 #if defined(XF86DRI)
    /* Load the dri module if requested. */
    if (xf86ReturnOptValBool(pI830->Options, OPTION_DRI, FALSE) &&
@@ -2329,10 +2341,6 @@
    vgaHWUnlock(hwp);
    vgaHWSave(pScrn, vgaReg, VGA_SR_FONTS);
 
-#ifndef I845G_VBE_WORKAROUND
-#define I845G_VBE_WORKAROUND 1
-#endif
-
    pVesa = pI830->vesa;
    /*
     * This save/restore method doesn't work for 845G BIOS, or for some
@@ -2344,7 +2352,7 @@
     * registers, turning off the irq & breaking the kernel module
     * behaviour.
     */
-   if (!I845G_VBE_WORKAROUND) {
+   if (!pI830->vbeRestoreWorkaround) {
       CARD16 imr = INREG16(IMR);
       CARD16 ier = INREG16(IER);
       CARD16 hwstam = INREG16(HWSTAM);
@@ -2540,6 +2548,22 @@
    }
 
    /*
+    * Test if the extendedRefresh BIOS function is supported.
+    */
+   if (pI830->useExtendedRefresh && !pI830->vesa->useDefaultRefresh &&
+       (mode & (1 << 11)) && data && data->data && data->block) {
+      if (!SetRefreshRate(pScrn, mode, 60)) {
+	 xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+		    "BIOS call 0x5f05 not supported, "
+		    "setting refresh with VBE 3 method.\n");
+	 pI830->useExtendedRefresh = FALSE;
+	 pI830->enableDisplays = FALSE;
+	 xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+		 "Not using BIOS call 0x5f64 to enable displays.\n");
+      }
+   }
+
+   /*
     * The BIOS may not set a scanline pitch that would require more video
     * memory than it's aware of.  We check for this later, and set it
     * explicitly if necessary.





More information about the xorg-commit mailing list