[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

X Strike Force SVN commit: rev 224 - in branches/4.3.0/sid/debian: . patches



Author: daniel
Date: 2003-06-20 20:23:54 -0500 (Fri, 20 Jun 2003)
New Revision: 224

Added:
   branches/4.3.0/sid/debian/patches/063_savage_driver_1.1.27t.diff
Modified:
   branches/4.3.0/sid/debian/changelog
Log:
patch #063: add new Savage driver, closing about 18 bugs.


Modified: branches/4.3.0/sid/debian/changelog
==============================================================================
--- branches/4.3.0/sid/debian/changelog	2003-06-20 22:11:54 UTC (rev 223)
+++ branches/4.3.0/sid/debian/changelog	2003-06-21 01:23:54 UTC (rev 224)
@@ -1,5 +1,9 @@
-xfree86 (4.3.0-0pre1v1) unstable; urgency=low
+xfree86 (4.3.0-0ds5) unstable; urgency=low
 
+  * this is branches/sid/4.3.0/debian as of 13:28, 19th July 2003 (UTC). the
+    version number is only here to give people a nice nifty sync point.
+    porters/testers only please. -ds
+
   * new upstream release
     - XFree86 X server now supports ATI Radeon Mobility (Closes: #196810)
     - XFree86 X server now supports SiS 740 chipset (Closes: #196912)
@@ -36,9 +40,12 @@
 
   * patch #061: fix weak dep from libGLU to libGL. (closes: #187365)
 
-  * make libGL -fPICable, and thread-safe: (closes: #190323)
-    - patch #062: new (thanks, Jakub Jelinek and Michel Daenzer).
-
+  * new Savage driver (version 1.1.27t): patch #063. (closes: #110974,
+    #112703, #115223, #128125, #145420, #148008, #152796, #154641, #185443,
+    #194144, #194351, #191915, #197058, #112703, #110974)
+    + new 'Option "ForceInit"' for forcing full initilization of consoles.
+      (closes: #117454, #129216)
+  
   * xlibs-pic package renamed to xlibs-static-pic
     - reintegrate piclib_support.diff (previously patch #046, now patch #909)
 
@@ -60,7 +67,7 @@
   * debian/xlibosmesa4-dbg.install: install the unstripped library in
     /usr/X11R6/lib/debug, not /usr/X11R6/lib
 
- -- Branden Robinson <branden@debian.org>  Sat, 14 Jun 2003 05:38:31 -0500
+ -- Daniel Stone <daniel@raging.dropbear.id.au>  Thu, 19 Jun 2003 23:29:17 +1000
 
 xfree86 (4.2.1-8) unstable; urgency=high
 

Added: branches/4.3.0/sid/debian/patches/063_savage_driver_1.1.27t.diff
==============================================================================
--- branches/4.3.0/sid/debian/patches/063_savage_driver_1.1.27t.diff	2003-06-20 22:11:54 UTC (rev 223)
+++ branches/4.3.0/sid/debian/patches/063_savage_driver_1.1.27t.diff	2003-06-21 01:23:54 UTC (rev 224)
@@ -0,0 +1,787 @@
+diff -urN xc/programs/Xserver/hw/xfree86/drivers/savage.old/Imakefile xc/programs/Xserver/hw/xfree86/drivers/savage/Imakefile
+--- xc/programs/Xserver/hw/xfree86/drivers/savage.old/Imakefile	2003-02-18 04:06:44.000000000 +1100
++++ xc/programs/Xserver/hw/xfree86/drivers/savage/Imakefile	2002-10-08 05:19:10.000000000 +1000
+@@ -1,4 +1,4 @@
+-XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/drivers/savage/Imakefile,v 1.8 2003/02/17 17:06:44 dawes Exp $
++XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/drivers/savage/Imakefile,v 1.7 2002/05/14 20:19:51 alanh Exp $
+ /*
+  *
+  * Copyright 1995-1998 The XFree86 Project, Inc.
+@@ -42,7 +42,7 @@
+            -I$(XF86SRC)/ddc -I$(XF86SRC)/i2c \
+            -I$(XF86SRC)/rac -I$(XF86SRC)/int10 -I$(SERVERSRC)/render \
+            -I$(SERVERSRC)/include -I$(XINCLUDESRC) -I$(FONTINCSRC) \
+-           -I$(EXTINCSRC) -I$(XF86SRC)/vbe -I$(XF86SRC)/shadowfb
++           -I$(EXTINCSRC) -I$(XF86OSSRC)/vbe -I$(XF86SRC)/shadowfb
+ #endif
+ 
+ #if MakeHasPosixVariableSubstitutions
+Binary files xc/programs/Xserver/hw/xfree86/drivers/savage.old/savage-1.1.27t.zip and xc/programs/Xserver/hw/xfree86/drivers/savage/savage-1.1.27t.zip differ
+diff -urN xc/programs/Xserver/hw/xfree86/drivers/savage.old/savage_accel.c xc/programs/Xserver/hw/xfree86/drivers/savage/savage_accel.c
+--- xc/programs/Xserver/hw/xfree86/drivers/savage.old/savage_accel.c	2002-11-09 05:03:32.000000000 +1100
++++ xc/programs/Xserver/hw/xfree86/drivers/savage/savage_accel.c	2002-10-08 05:17:32.000000000 +1000
+@@ -1,4 +1,4 @@
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/savage/savage_accel.c,v 1.18 2002/11/08 18:03:32 alanh Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/savage/savage_accel.c,v 1.14 2001/12/13 18:01:50 eich Exp $ */
+ 
+ /*
+  *
+@@ -417,7 +417,7 @@
+ #if 1
+     xaaptr->SetupForScreenToScreenCopy = SavageSetupForScreenToScreenCopy;
+     xaaptr->SubsequentScreenToScreenCopy = SavageSubsequentScreenToScreenCopy;
+-    xaaptr->ScreenToScreenCopyFlags = NO_TRANSPARENCY | NO_PLANEMASK | ROP_NEEDS_SOURCE;
++    xaaptr->ScreenToScreenCopyFlags = NO_TRANSPARENCY | ROP_NEEDS_SOURCE;
+ #endif
+ 
+ 
+@@ -438,7 +438,6 @@
+     xaaptr->Mono8x8PatternFillFlags = 0
+ 	| HARDWARE_PATTERN_PROGRAMMED_BITS 
+ 	| HARDWARE_PATTERN_SCREEN_ORIGIN
+-	| ROP_NEEDS_SOURCE
+ 	| BIT_ORDER_IN_BYTE_MSBFIRST
+ 	;
+     if( psav->Chipset == S3_SAVAGE4 )
+diff -urN xc/programs/Xserver/hw/xfree86/drivers/savage.old/savage_bci.h xc/programs/Xserver/hw/xfree86/drivers/savage/savage_bci.h
+--- xc/programs/Xserver/hw/xfree86/drivers/savage.old/savage_bci.h	2002-10-03 06:39:54.000000000 +1000
++++ xc/programs/Xserver/hw/xfree86/drivers/savage/savage_bci.h	2002-10-08 05:19:04.000000000 +1000
+@@ -1,4 +1,4 @@
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/savage/savage_bci.h,v 1.4 2002/10/02 20:39:54 alanh Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/savage/savage_bci.h,v 1.2 2001/10/01 13:44:09 eich Exp $ */
+ 
+ #ifndef _S3BCI_H_
+ #define _S3BCI_H_
+diff -urN xc/programs/Xserver/hw/xfree86/drivers/savage.old/savage_cursor.c xc/programs/Xserver/hw/xfree86/drivers/savage/savage_cursor.c
+--- xc/programs/Xserver/hw/xfree86/drivers/savage.old/savage_cursor.c	2003-01-19 02:22:29.000000000 +1100
++++ xc/programs/Xserver/hw/xfree86/drivers/savage/savage_cursor.c	2002-10-08 05:17:32.000000000 +1000
+@@ -1,4 +1,4 @@
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/savage/savage_cursor.c,v 1.9 2003/01/18 15:22:29 eich Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/savage/savage_cursor.c,v 1.6 2001/11/02 16:24:51 alanh Exp $ */
+ 
+ /*
+  * Hardware cursor support for S3 Savage 4.0 driver. Taken with
+@@ -39,27 +39,6 @@
+                       } 
+ #define MAX_CURS 64
+ 
+-/*
+- * Disable HW Cursor on stretched LCDs. We don't know how to
+- * detect if display is stretched. Therefore we cannot rescale
+- * the HW cursor position.
+- */
+-
+-static Bool
+-SavageUseHWCursor(ScreenPtr pScr, CursorPtr pCurs)
+-{
+-    ScrnInfoPtr pScrn = xf86Screens[pScr->myNum];
+-    SavagePtr psav = SAVPTR(pScrn);
+-
+-    if (psav->PanelX != pScrn->currentMode->HDisplay 
+-	|| psav->PanelY != pScrn->currentMode->VDisplay) {
+-	/* BIT 1 : CRT is active, BIT 2 : LCD is active */
+-	unsigned char cr6d = inCRReg( 0x6d );
+-	if (cr6d & 0x02)
+-	    return FALSE;
+-    }
+-    return TRUE;
+-}
+ 
+ Bool 
+ SavageHWCursorInit(ScreenPtr pScreen)
+@@ -101,12 +80,8 @@
+     infoPtr->LoadCursorImage = SavageLoadCursorImage;
+     infoPtr->HideCursor = SavageHideCursor;
+     infoPtr->ShowCursor = SavageShowCursor;
++    infoPtr->UseHWCursor = NULL;
+ 
+-    if ((S3_SAVAGE_MOBILE_SERIES(psav->Chipset)
+-	 || (psav->Chipset == S3_PROSAVAGE)) && !psav->CrtOnly)
+-	infoPtr->UseHWCursor = SavageUseHWCursor;
+-    else
+-	infoPtr->UseHWCursor = NULL;
+     if( !psav->CursorKByte )
+ 	psav->CursorKByte = pScrn->videoRam - 4;
+ 
+@@ -118,9 +93,8 @@
+ void
+ SavageShowCursor(ScrnInfoPtr pScrn)
+ {
+-    /* Turn cursor on. */
++   /* Turn cursor on. */
+    outCRReg( 0x45, inCRReg(0x45) | 0x01 );
+-   SAVPTR(pScrn)->hwc_on = TRUE;
+ }
+ 
+ 
+@@ -128,12 +102,12 @@
+ SavageHideCursor(ScrnInfoPtr pScrn)
+ {
+     /* Turn cursor off. */
++
+     if( S3_SAVAGE4_SERIES( SAVPTR(pScrn)->Chipset ) )
+     {
+        waitHSync(5);
+     }
+     outCRReg( 0x45, inCRReg(0x45) & 0xfe );
+-    SAVPTR(pScrn)->hwc_on = FALSE;
+ }
+ 
+ static void
+diff -urN xc/programs/Xserver/hw/xfree86/drivers/savage.old/savage_dga.c xc/programs/Xserver/hw/xfree86/drivers/savage/savage_dga.c
+--- xc/programs/Xserver/hw/xfree86/drivers/savage.old/savage_dga.c	2003-01-19 02:22:29.000000000 +1100
++++ xc/programs/Xserver/hw/xfree86/drivers/savage/savage_dga.c	2002-10-08 05:17:32.000000000 +1000
+@@ -1,4 +1,4 @@
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/savage/savage_dga.c,v 1.6 2003/01/18 15:22:29 eich Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/savage/savage_dga.c,v 1.3 2001/05/18 23:35:32 dawes Exp $ */
+ 
+ /*
+ Copyright (C) 1994-2000 The XFree86 Project, Inc.  All Rights Reserved.
+@@ -275,7 +275,7 @@
+ 
+ 	psav->DGAactive = FALSE;
+ 	SavageSwitchMode(index, pScrn->currentMode, 0);
+-	if( psav->hwcursor && psav->hwc_on )
++	if( psav->hwcursor )
+ 	    SavageShowCursor(pScrn);
+     } else {
+ 	Bool holdBIOS = psav->UseBIOS;
+@@ -289,11 +289,8 @@
+ 	    pMode->bitsPerPixel, pMode->depth);
+ #endif
+ 
+-	if( psav->hwcursor && psav->hwc_on) {
++	if( psav->hwcursor )
+ 	    SavageHideCursor(pScrn);
+-	    psav->hwc_on = TRUE;    /* save for later restauration */
+-	}
+-	
+ 
+ 	if(!psav->DGAactive) {  /* save the old parameters */
+ 	    OldDisplayWidth[index] = pScrn->displayWidth;
+diff -urN xc/programs/Xserver/hw/xfree86/drivers/savage.old/savage_driver.c xc/programs/Xserver/hw/xfree86/drivers/savage/savage_driver.c
+--- xc/programs/Xserver/hw/xfree86/drivers/savage.old/savage_driver.c	2003-06-21 00:05:26.000000000 +1000
++++ xc/programs/Xserver/hw/xfree86/drivers/savage/savage_driver.c	2003-01-17 08:25:58.000000000 +1100
+@@ -1,4 +1,4 @@
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/savage/savage_driver.c,v 1.34 2003/02/25 04:08:21 dawes Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/savage/savage_driver.c,v 1.24 2001/11/02 16:24:51 alanh Exp $ */
+ /*
+  * vim: sw=4 ts=8 ai ic:
+  *
+@@ -82,10 +82,10 @@
+ #define iabs(a)	((int)(a)>0?(a):(-(a)))
+ 
+ #define DRIVER_NAME	"savage"
+-#define DRIVER_VERSION	"1.1.26"
++#define DRIVER_VERSION	"1.1.27t"
+ #define VERSION_MAJOR	1
+ #define VERSION_MINOR	1
+-#define PATCHLEVEL	26
++#define PATCHLEVEL	27
+ #define SAVAGE_VERSION	((VERSION_MAJOR << 24) | \
+ 			 (VERSION_MINOR << 16) | \
+ 			 PATCHLEVEL)
+@@ -123,8 +123,8 @@
+     { PCI_CHIP_SAVAGE_IX,	"Savage/IX" },
+     { PCI_CHIP_PROSAVAGE_PM,	"ProSavage PM133" },
+     { PCI_CHIP_PROSAVAGE_KM,	"ProSavage KM133" },
+-    { PCI_CHIP_S3TWISTER_P,	"Twister PN133" },
+-    { PCI_CHIP_S3TWISTER_K,	"Twister KN133" },
++    { PCI_CHIP_S3TWISTER_P,	"ProSavage PN133" },
++    { PCI_CHIP_S3TWISTER_K,	"ProSavage KN133" },
+     { PCI_CHIP_SUPSAV_MX128,	"SuperSavage/MX 128" },
+     { PCI_CHIP_SUPSAV_MX64,	"SuperSavage/MX 64" },
+     { PCI_CHIP_SUPSAV_MX64C,	"SuperSavage/MX 64C" },
+@@ -193,6 +193,7 @@
+     ,OPTION_ROTATE
+     ,OPTION_USEBIOS
+     ,OPTION_SHADOW_STATUS
++    ,OPTION_VIDEORAM
+     ,OPTION_CRT_ONLY
+     ,OPTION_TV_ON
+     ,OPTION_TV_PAL
+@@ -210,6 +211,7 @@
+     { OPTION_USEBIOS,	"UseBIOS",	OPTV_BOOLEAN, {0}, FALSE },
+     { OPTION_LCDCLOCK,	"LCDClock",	OPTV_FREQ,    {0}, FALSE },
+     { OPTION_SHADOW_STATUS, "ShadowStatus", OPTV_BOOLEAN, {0}, FALSE },
++    { OPTION_VIDEORAM,  "VideoRAM",     OPTV_INTEGER, {0}, FALSE },
+     { OPTION_CRT_ONLY,  "CrtOnly",      OPTV_BOOLEAN, {0}, FALSE },
+     { OPTION_TV_ON,     "TvOn",         OPTV_BOOLEAN, {0}, FALSE },
+     { OPTION_TV_PAL,    "PAL",          OPTV_BOOLEAN, {0}, FALSE },
+@@ -889,6 +891,13 @@
+     xf86DrvMsg(pScrn->scrnIndex, from, "%ssing video BIOS to set modes\n",
+         psav->UseBIOS ? "U" : "Not u" );
+ 
++    pScrn->videoRam = 0;
++    if( xf86GetOptValInteger(psav->Options, OPTION_VIDEORAM, &pScrn->videoRam ) )
++    {
++	xf86DrvMsg( pScrn->scrnIndex, X_CONFIG,
++	            "Option: VideoRAM %dkB\n", pScrn->videoRam );
++    }
++
+     psav->LCDClock = 0.0;
+     if( xf86GetOptValFreq( psav->Options, OPTION_LCDCLOCK, OPTUNITS_MHZ, &psav->LCDClock ) )
+ 	xf86DrvMsg( pScrn->scrnIndex, X_CONFIG, 
+@@ -986,9 +995,6 @@
+     } else
+ 	psav->ChipRev = psav->PciInfo->chipRev;
+ 
+-    if (pEnt->device->videoRam != 0)
+-    	pScrn->videoRam = pEnt->device->videoRam;
+-
+     xfree(pEnt);
+ 
+     /* maybe throw in some more sanity checks here */
+@@ -1352,7 +1358,7 @@
+ 	}
+     }
+   
+-    clockRanges = xnfcalloc(sizeof(ClockRange),1);
++    clockRanges = xnfalloc(sizeof(ClockRange));
+     clockRanges->next = NULL;
+     clockRanges->minClock = psav->minClock;
+     clockRanges->maxClock = psav->maxClock;
+@@ -2833,16 +2839,15 @@
+     ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+     TRACE(("SavageSaveScreen(0x%x)\n", mode));
+ 
+-    if( pScrn->vtSema && SAVPTR(pScrn)->hwcursor && SAVPTR(pScrn)->hwc_on) {
+-
++    if( pScrn->vtSema && SAVPTR(pScrn)->hwcursor )
++    {
+ 	if( xf86IsUnblank(mode) )
+ 	    SavageShowCursor( pScrn );
+ 	else
+ 	    SavageHideCursor( pScrn );
+-	SAVPTR(pScrn)->hwc_on = TRUE;
+     }
+ 
+-	return vgaHWSaveScreen(pScreen, mode);
++    return vgaHWSaveScreen(pScreen, mode);
+ }
+ 
+ 
+diff -urN xc/programs/Xserver/hw/xfree86/drivers/savage.old/savage_driver.h xc/programs/Xserver/hw/xfree86/drivers/savage/savage_driver.h
+--- xc/programs/Xserver/hw/xfree86/drivers/savage.old/savage_driver.h	2003-01-19 02:22:30.000000000 +1100
++++ xc/programs/Xserver/hw/xfree86/drivers/savage/savage_driver.h	2003-01-17 12:10:04.000000000 +1100
+@@ -1,4 +1,4 @@
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/savage/savage_driver.h,v 1.16 2003/01/18 15:22:30 eich Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/savage/savage_driver.h,v 1.11 2001/08/09 19:14:13 dawes Exp $ */
+ 
+ #ifndef SAVAGE_VGAHWMMIO_H
+ #define SAVAGE_VGAHWMMIO_H
+@@ -118,7 +118,6 @@
+     Bool		fifo_moderate;
+     Bool		fifo_aggressive;
+     Bool		hwcursor;
+-    Bool		hwc_on;
+     Bool		NoAccel;
+     Bool		shadowFB;
+     Bool		UseBIOS;
+@@ -140,11 +139,9 @@
+     int			YFactor;	/* overlay Y factor */
+     int			displayXoffset;	/* overlay X offset */
+     int			displayYoffset;	/* overlay Y offset */
+-    int			XExpansion;	/* expansion factor in x */
+-    int			XExp1;
++    int			XExp1;		/* expansion ratio in x */
+     int			XExp2;
+-    int			YExpansion;	/* expansion factor in x */
+-    int			YExp1;
++    int			YExp1;		/* expansion ratio in x */
+     int			YExp2;
+     int			cxScreen;
+     int			TVSizeX;
+@@ -213,15 +210,6 @@
+ 
+ #define SAVPTR(p)	((SavagePtr)((p)->driverPrivate))
+ 
+-/* Make the names of these externals driver-unique */
+-#define gpScrn savagegpScrn
+-#define myOUTREG savageOUTREG
+-#define readdw savagereaddw
+-#define readfb savagereadfb
+-#define writedw savagewritedw
+-#define writefb savagewritefb
+-#define writescan savagewritescan
+-
+ /* Prototypes. */
+ 
+ extern void SavageCommonCalcClock(long freq, int min_m, int min_n1,
+diff -urN xc/programs/Xserver/hw/xfree86/drivers/savage.old/savage_i2c.c xc/programs/Xserver/hw/xfree86/drivers/savage/savage_i2c.c
+--- xc/programs/Xserver/hw/xfree86/drivers/savage.old/savage_i2c.c	2002-10-03 06:39:55.000000000 +1000
++++ xc/programs/Xserver/hw/xfree86/drivers/savage/savage_i2c.c	2002-10-08 05:17:32.000000000 +1000
+@@ -1,4 +1,4 @@
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/savage/savage_i2c.c,v 1.3 2002/10/02 20:39:55 alanh Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/savage/savage_i2c.c,v 1.1 2001/02/13 21:15:19 dawes Exp $ */
+ 
+ /*
+ Copyright (C) 1994-2000 The XFree86 Project, Inc.  All Rights Reserved.
+diff -urN xc/programs/Xserver/hw/xfree86/drivers/savage.old/savage_regs.h xc/programs/Xserver/hw/xfree86/drivers/savage/savage_regs.h
+--- xc/programs/Xserver/hw/xfree86/drivers/savage.old/savage_regs.h	2003-06-21 00:05:26.000000000 +1000
++++ xc/programs/Xserver/hw/xfree86/drivers/savage/savage_regs.h	2003-01-17 10:45:06.000000000 +1100
+@@ -1,8 +1,32 @@
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/savage/savage_regs.h,v 1.12 2002/10/02 20:39:55 alanh Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/savage/savage_regs.h,v 1.10 2001/11/04 22:17:48 alanh Exp $ */
+ 
+ #ifndef _SAVAGE_REGS_H
+ #define _SAVAGE_REGS_H
+ 
++/* These are here until xf86PciInfo.h is updated. */
++
++#ifndef PCI_CHIP_S3TWISTER_P
++#define PCI_CHIP_S3TWISTER_P	0x8d01
++#endif
++#ifndef PCI_CHIP_S3TWISTER_K
++#define PCI_CHIP_S3TWISTER_K	0x8d02
++#endif
++#ifndef PCI_CHIP_SUPSAV_MX128
++#define PCI_CHIP_SUPSAV_MX128		0x8c22
++#define PCI_CHIP_SUPSAV_MX64		0x8c24
++#define PCI_CHIP_SUPSAV_MX64C		0x8c26
++#define PCI_CHIP_SUPSAV_IX128SDR	0x8c2a
++#define PCI_CHIP_SUPSAV_IX128DDR	0x8c2b
++#define PCI_CHIP_SUPSAV_IX64SDR		0x8c2c
++#define PCI_CHIP_SUPSAV_IX64DDR		0x8c2d
++#define PCI_CHIP_SUPSAV_IXCSDR		0x8c2e
++#define PCI_CHIP_SUPSAV_IXCDDR		0x8c2f
++#endif
++#ifndef PCI_CHIP_PROSAVAGE_DDR
++#define PCI_CHIP_PROSAVAGE_DDR	0x8d03
++#define PCI_CHIP_PROSAVAGE_DDRK	0x8d04
++#endif
++
+ #define S3_SAVAGE3D_SERIES(chip)  ((chip>=S3_SAVAGE3D) && (chip<=S3_SAVAGE_MX))
+ 
+ #define S3_SAVAGE4_SERIES(chip)   ((chip==S3_SAVAGE4) || (chip==S3_PROSAVAGE))
+@@ -192,7 +216,15 @@
+     VGAOUT8(psav->vgaIOBase + 5, a);		\
+ }
+  
++#define HZEXP_COMP_1		0x54
++#define HZEXP_BORDER		0x58
+ #define HZEXP_FACTOR_IGA1	0x59
++
++#define VTEXP_COMP_1		0x56
++#define VTEXP_BORDER		0x5a
+ #define VTEXP_FACTOR_IGA1	0x5b
+ 
++#define EC1_CENTER_ON	0x10
++#define EC1_EXPAND_ON	0x0c
++
+ #endif /* _SAVAGE_REGS_H */
+diff -urN xc/programs/Xserver/hw/xfree86/drivers/savage.old/savage_vbe.c xc/programs/Xserver/hw/xfree86/drivers/savage/savage_vbe.c
+--- xc/programs/Xserver/hw/xfree86/drivers/savage.old/savage_vbe.c	2002-10-03 06:39:55.000000000 +1000
++++ xc/programs/Xserver/hw/xfree86/drivers/savage/savage_vbe.c	2003-01-17 08:33:52.000000000 +1100
+@@ -1,4 +1,4 @@
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/savage/savage_vbe.c,v 1.12 2002/10/02 20:39:55 alanh Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/savage/savage_vbe.c,v 1.9 2001/05/19 02:05:55 dawes Exp $ */
+ 
+ #include "savage_driver.h"
+ #include "savage_vbe.h"
+@@ -72,7 +72,7 @@
+     SavageClearVM86Regs( psav->pInt10 );
+     psav->pInt10->ax = 0x4f14;	/* S3 extensions */
+     psav->pInt10->bx = 0x0001;	/* Set default refresh rate */
+-    psav->pInt10->cx = n;
++    psav->pInt10->cx = n & 0x3fff;
+     psav->pInt10->di = Refresh & 0xffff;
+ 
+     xf86ExecX86int10( psav->pInt10 );
+diff -urN xc/programs/Xserver/hw/xfree86/drivers/savage.old/savage_video.c xc/programs/Xserver/hw/xfree86/drivers/savage/savage_video.c
+--- xc/programs/Xserver/hw/xfree86/drivers/savage.old/savage_video.c	2003-01-12 14:55:49.000000000 +1100
++++ xc/programs/Xserver/hw/xfree86/drivers/savage/savage_video.c	2003-01-17 12:16:16.000000000 +1100
+@@ -1,4 +1,4 @@
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/savage/savage_video.c,v 1.11 2003/01/12 03:55:49 tsi Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/savage/savage_video.c,v 1.7 2001/11/21 22:43:01 dawes Exp $ */
+ 
+ #include "Xv.h"
+ #include "dix.h"
+@@ -79,7 +79,7 @@
+ ) = NULL;
+ 
+ static void OverlayParamInit(ScrnInfoPtr pScrn);
+-static void InitStreamsForExpansion(SavagePtr psav);
++static void InitStreamsForExpansion(ScrnInfoPtr pScrn);
+ 
+ /*static void SavageBlockHandler(int, pointer, pointer, pointer);*/
+ 
+@@ -421,7 +421,6 @@
+ 
+     /* Sequence stolen from streams.c in M7 NT driver */
+ 
+-
+     xf86EnableIO();
+ 
+     /* Unlock extended registers. */
+@@ -430,10 +429,17 @@
+     VGAOUT16(vgaCRIndex, 0xa039);
+     VGAOUT16(0x3c4, 0x0608);
+ 
++    if( 
++	S3_SAVAGE_MOBILE_SERIES(psav->Chipset) && 
++	!psav->CrtOnly && 
++	!psav->TvOn 
++    ) {
++	OverlayParamInit( pScrn );
++    }
++
+     VGAOUT8( vgaCRIndex, EXT_MISC_CTRL2 );
+ 
+     if( S3_SAVAGE_MOBILE_SERIES(psav->Chipset) ||
+-        (psav->Chipset == S3_SUPERSAVAGE) ||
+         (psav->Chipset == S3_SAVAGE2000) )
+     {
+ 	jStreamsControl = VGAIN8( vgaCRReg ) | ENABLE_STREAM1;
+@@ -869,10 +875,10 @@
+ 
+     psav->adaptor = adapt;
+ 
+-#if 0
++    #if 0
+     psav->BlockHandler = pScreen->BlockHandler;
+     pScreen->BlockHandler = SavageBlockHandler;
+-#endif
++    #endif
+ 
+     return adapt;
+ }
+@@ -992,9 +998,8 @@
+ 
+     REGION_EMPTY(pScrn->pScreen, &pPriv->clip);   
+ 
+-    SavageStreamsOff( pScrn );
+-
+     if(shutdown) {
++	SavageStreamsOff( pScrn );
+ 	if(pPriv->area) {
+ 	    xf86FreeOffscreenArea(pPriv->area);
+ 	    pPriv->area = NULL;
+@@ -1283,9 +1288,11 @@
+     ssControl |= (1 << 24);
+     OUTREG(SSTREAM_CONTROL_REG, ssControl);
+ 
++#if 0
+     /* Set color key on primary. */
+ 
+     SavageSetColorKey( pScrn );
++#endif
+ 
+     /* Set FIFO L2 on second stream. */
+ 
+@@ -1358,10 +1365,10 @@
+ 	    !psav->CrtOnly &&
+ 	    !psav->TvOn
+ 	) {
+-	    drw_w = (float)(drw_w * psav->XExp1)/(float)psav->XExp2 + 1;
+-	    drw_h = (float)(drw_h * psav->YExp1)/(float)psav->YExp2 + 1;
+-	    dstBox->x1 = (float)(dstBox->x1 * psav->XExp1)/(float)psav->XExp2;
+-	    dstBox->y1 = (float)(dstBox->y1 * psav->YExp1)/(float)psav->YExp2;
++	    drw_w = (drw_w * psav->XExp1)/psav->XExp2 + 1;
++	    drw_h = (drw_h * psav->YExp1)/psav->YExp2 + 1;
++	    dstBox->x1 = (dstBox->x1 * psav->XExp1)/psav->XExp2;
++	    dstBox->y1 = (dstBox->y1 * psav->YExp1)/psav->YExp2;
+ 	    dstBox->x1 += psav->displayXoffset;
+ 	    dstBox->y1 += psav->displayYoffset;
+ 	}
+@@ -1378,14 +1385,16 @@
+      * are 2 bytes/pixel.
+      */
+ 
+-    OUTREG(SEC_STREAM_FBUF_ADDR0, (offset + (x1>>15)) & 0x3ffff0 );
++    OUTREG(SEC_STREAM_FBUF_ADDR0, (offset + (x1>>15)) & 0x7ffff0 );
+     OUTREG(SEC_STREAM_STRIDE, pitch & 0xfff );
+     OUTREG(SEC_STREAM_WINDOW_START, ((dstBox->x1+1) << 16) | (dstBox->y1+1) );
+     OUTREG(SEC_STREAM_WINDOW_SZ, ((drw_w) << 16) | drw_h );
+ 
++#if 0
+     /* Set color key on primary. */
+ 
+     SavageSetColorKey( pScrn );
++#endif
+ 
+     /* Set FIFO L2 on second stream. */
+ 
+@@ -1424,6 +1433,20 @@
+     int top, left, npixels, nlines;
+     BoxRec dstBox;
+     CARD32 tmp;
++/*    xf86ErrorFVerb(XVTRACE,"SavagePutImage\n"); */
++
++    if( psav->cxScreen != pScrn->currentMode->HDisplay )
++    {
++	/* The mode has changed.  Recompute the offsets. */
++
++	if( 
++	    S3_SAVAGE_MOBILE_SERIES(psav->Chipset) && 
++	    !psav->CrtOnly && 
++	    !psav->TvOn 
++	) {
++	    OverlayParamInit( pScrn );
++	}
++    }
+ 
+     if(drw_w > 16384) drw_w = 16384;
+ 
+@@ -1519,6 +1542,12 @@
+ 	SavageCopyData(buf, dst_start, srcPitch, dstPitch, nlines, npixels);
+ 	break;
+     }  
++   
++    /* We need to enable the video before we draw the chroma color.
++       Otherwise, we get blue flashes. */
++
++    SavageDisplayVideo(pScrn, id, offset, width, height, dstPitch,
++	     x1, y1, x2, y2, &dstBox, src_w, src_h, drw_w, drw_h);
+ 
+     /* update cliplist */
+     if(!RegionsEqual(&pPriv->clip, clipBoxes)) {
+@@ -1528,9 +1557,6 @@
+ 					REGION_NUM_RECTS(clipBoxes),
+ 					REGION_RECTS(clipBoxes));
+     }
+-   
+-    SavageDisplayVideo(pScrn, id, offset, width, height, dstPitch,
+-	     x1, y1, x2, y2, &dstBox, src_w, src_h, drw_w, drw_h);
+ 
+     pPriv->videoStatus = CLIENT_VIDEO_ON;
+ 
+@@ -1692,6 +1718,7 @@
+     XF86SurfacePtr surface
+ ){
+     OffscreenPrivPtr pPriv = (OffscreenPrivPtr)surface->devPrivate.ptr;
++    xf86ErrorFVerb(XVTRACE,"SavageStopSurface\n");
+ 
+     if(pPriv->isOn) {
+ 	/*SavagePtr psav = SAVPTR(surface->pScrn);*/
+@@ -1754,6 +1781,7 @@
+     SavagePortPrivPtr portPriv = GET_PORT_PRIVATE(pScrn);
+     INT32 x1, y1, x2, y2;
+     BoxRec dstBox;
++    xf86ErrorFVerb(XVTRACE,"SavageDisplaySurface\n");
+ 
+     x1 = src_x;
+     x2 = src_x + src_w;
+@@ -1777,14 +1805,14 @@
+     dstBox.y1 -= pScrn->frameY0;
+     dstBox.y2 -= pScrn->frameY0;
+ 
+-    XAAFillSolidRects(pScrn, portPriv->colorKey, GXcopy, ~0, 
+-                                        REGION_NUM_RECTS(clipBoxes),
+-                                        REGION_RECTS(clipBoxes));
+-
+     SavageDisplayVideo(pScrn, surface->id, surface->offsets[0], 
+ 	     surface->width, surface->height, surface->pitches[0],
+ 	     x1, y1, x2, y2, &dstBox, src_w, src_h, drw_w, drw_h);
+ 
++    XAAFillSolidRects(pScrn, portPriv->colorKey, GXcopy, ~0, 
++                                        REGION_NUM_RECTS(clipBoxes),
++                                        REGION_RECTS(clipBoxes));
++
+     pPriv->isOn = TRUE;
+ #if 0
+     if(portPriv->videoStatus & CLIENT_VIDEO_ON) {
+@@ -1839,144 +1867,89 @@
+     SavagePtr psav = SAVPTR(pScrn);
+ 
+     psav = SAVPTR(pScrn);
+-    psav->cxScreen = psav->iResX;
+-    InitStreamsForExpansion(psav);
++    psav->cxScreen = pScrn->currentMode->HDisplay;
++    InitStreamsForExpansion(pScrn);
+ }
+ 
+-/* Function to calculate lcd expansion x,yfactor and offset for overlay
++/* Function to calculate lcd expansion x,y factor and offset for overlay
+  */
+-static void InitStreamsForExpansion(SavagePtr psav)
++static void InitStreamsForExpansion(ScrnInfoPtr pScrn)
+ {
++    SavagePtr psav = SAVPTR(pScrn);
+     int		PanelSizeX,PanelSizeY;
+     int		ViewPortWidth,ViewPortHeight;
++    int		XExpansion, YExpansion;
+     int		XFactor, YFactor;
++    int		Hstate, Vstate;
++
++    static CARD32 Xfactors[] = {
++	0x00010001,
++	0x00010001, /* 1 */
++	0,
++	0x00090008, /* 3 */
++	0x00050004, /* 4 */
++	0,
++	0x00030002, /* 6 */
++	0x00020001  /* 7 */
++    };
++
++    static CARD32 Yfactors[] = {
++	0x00010001,	0x00010001,
++	0,		0x00060005,
++	0x00050004,	0x00040003,
++	0,		0x00030002,
++	0x00020001,	0x00050002,
++	0x000C0005,	0x00080003,
++	0x00090004,	0,
++	0x00030001,	0x00040001,
++    };
++
++
+ 
+     PanelSizeX = psav->PanelX;
+     PanelSizeY = psav->PanelY;
+-    ViewPortWidth = psav->iResX;
+-    ViewPortHeight = psav->iResY;
++    ViewPortWidth = pScrn->currentMode->HDisplay;
++    ViewPortHeight = pScrn->currentMode->VDisplay;
++
+     if( PanelSizeX == 1408 )
+ 	PanelSizeX = 1400;
+-    psav->XExpansion = 0x00010001;
+-    psav->YExpansion = 0x00010001;
++
++    XExpansion = 0x00010001;
++    YExpansion = 0x00010001;
++
+     psav->displayXoffset = 0;
+     psav->displayYoffset = 0;
+ 
++    VGAOUT8(0x3C4, HZEXP_COMP_1);
++    Hstate = VGAIN8(0x3C5);
++    VGAOUT8(0x3C4, VTEXP_COMP_1);
++    Vstate = VGAIN8(0x3C5);
+     VGAOUT8(0x3C4, HZEXP_FACTOR_IGA1);
+-    XFactor = VGAIN8(0x3C5) >> 4;
++    XFactor = VGAIN8(0x3C5);
+     VGAOUT8(0x3C4, VTEXP_FACTOR_IGA1);
+-    YFactor = VGAIN8(0x3C5) >> 4;
++    YFactor = VGAIN8(0x3C5);
+ 
+-    switch( XFactor )
++    if( Hstate & EC1_EXPAND_ON )
+     {
+-	case 1:
+-	    psav->XExpansion = 0x00010001;
+-	    psav->displayXoffset = 
+-		(((PanelSizeX - ViewPortWidth) / 2) + 0x7) & 0xFFF8;
+-	    break;
++	XExpansion = Xfactors[XFactor>>4];
++    }
+ 
+-	case 3:
+-	    psav->XExpansion = 0x00090008;
+-	    psav->displayXoffset = 
+-		(((PanelSizeX - ((9 * ViewPortWidth)/8)) / 2) + 0x7) & 0xFFF8;
+-	    break;
++    if( Vstate & EC1_EXPAND_ON )
++    {
++	YExpansion = Yfactors[YFactor>>4];
++    }
+ 
+-	case 4:
+-	    psav->XExpansion = 0x00050004;
++    psav->XExp1 = XExpansion >> 16;
++    psav->XExp2 = XExpansion & 0xFFFF;
+ 
+-	    if ((psav->cxScreen == 800) && (PanelSizeX !=1400))
+-	    {
+-		psav->displayXoffset = 
+-		    (((PanelSizeX - ((5 * ViewPortWidth)/4)) / 2) ) & 0xFFF8; 
+-	    }
+-	    else
+-	    {
+-		psav->displayXoffset = 
+-		    (((PanelSizeX - ((5 * ViewPortWidth)/4)) / 2) +0x7) & 0xFFF8;
+-	    }
+-	    break;
++    psav->YExp1 = YExpansion >> 16;
++    psav->YExp2 = YExpansion & 0xFFFF;
+ 
+-	case 6:
+-	    psav->XExpansion = 0x00030002;
+-	    psav->displayXoffset = 
+-		(((PanelSizeX - ((3 * ViewPortWidth)/2)) / 2) + 0x7) & 0xFFF8;
+-	    break;
++    psav->displayXoffset = 
++       ((PanelSizeX - (psav->XExp1 * ViewPortWidth) / psav->XExp2) / 2 + 7) & 0xfff8;
++    psav->displayYoffset = 
++       ((PanelSizeY - (psav->YExp1 * ViewPortHeight) / psav->YExp2) / 2);
+ 
+-	case 7:
+-	    psav->XExpansion = 0x00020001;
+-	    psav->displayXoffset = 
+-		(((PanelSizeX - (2 * ViewPortWidth)) / 2) + 0x7) & 0xFFF8;
+-	    break;
+-    }
+-	
+-    switch( YFactor )
+-    {
+-	case 0:
+-	    psav->YExpansion = 0x00010001;
+-	    psav->displayYoffset = (PanelSizeY - ViewPortHeight) / 2;
+-	    break;
+-	case 1:
+-	    psav->YExpansion = 0x00010001;
+-	    psav->displayYoffset = (PanelSizeY - ViewPortHeight) / 2;
+-	    break;
+-	case 2:
+-	    psav->YExpansion = 0x00040003;
+-	    psav->displayYoffset = (PanelSizeY - ((4 * ViewPortHeight)/3)) / 2;
+-	    break;
+-	case 4:
+-	    psav->YExpansion = 0x00050004;
+-	    psav->displayYoffset = (PanelSizeY - ((5 * ViewPortHeight)/4)) / 2;
+-	    break;
+-	case 5:
+-	    psav->YExpansion = 0x00040003;
+-
+-	    if((psav->cxScreen == 1024)&&(PanelSizeX ==1400))
+-	    {
+-		psav->displayYoffset = 
+-		    ((PanelSizeY - ((4 * ViewPortHeight)/3)) / 2) - 0x1 ;
+-	    }
+-	    else
+-	    {
+-		psav->displayYoffset = (PanelSizeY - ((4 * ViewPortHeight)/3)) / 2;
+-	    }
+-	    break;
+-	case 6:
+-	    psav->YExpansion = 0x00050004;
+-	    psav->displayYoffset = (PanelSizeY - ((5 * ViewPortHeight)/4)) / 2;
+-	    break;
+-	case 7:
+-	    psav->YExpansion = 0x00030002;
+-	    psav->displayYoffset = (PanelSizeY - ((3 * ViewPortHeight)/2)) / 2;
+-	    break;
+-	case 8:
+-	    psav->YExpansion = 0x00020001;
+-	    psav->displayYoffset = (PanelSizeY - (2 * ViewPortHeight)) /2;
+-	    break;
+-	case 9:
+-	    psav->YExpansion = 0x00090004;
+-	    psav->displayYoffset = (PanelSizeY - ((9 * ViewPortHeight)/4)) /2;
+-	    break;
+-	case 11:
+-	    psav->YExpansion = 0x00110005;
+-	    psav->displayYoffset = (PanelSizeY - ((11 * ViewPortHeight)/5)) /2;
+-	    break;
+-	case 12:
+-	    psav->YExpansion = 0x00070003;
+-	    psav->displayYoffset = (PanelSizeY - ((7 * ViewPortHeight)/3)) /2;
+-	    break;
+-	case 14:
+-	    psav->YExpansion = 0x00050002;
+-	    psav->displayYoffset = (PanelSizeY - ((5 * ViewPortHeight)/2)) /2;
+-	    break;
+-	case 15:
+-	    psav->YExpansion = 0x00040001;
+-	    psav->displayYoffset = (PanelSizeY - (4 * ViewPortHeight)) /2;
+-	    break;
+-    }
+-    psav->XExp1 = psav->XExpansion >> 16;
+-    psav->XExp2 = psav->XExpansion & 0xFFFF;
+-    psav->YExp1 = psav->YExpansion >> 16;
+-    psav->YExp2 = psav->YExpansion & 0xFFFF;
+ }  /* InitStreamsForExpansionPM */
+ 
+ #endif /* XvExtension */



Reply to: