X Strike Force XFree86 SVN commit: r1725 - in trunk/debian: . patches
Author: branden
Date: 2004-08-10 20:28:34 -0500 (Tue, 10 Aug 2004)
New Revision: 1725
Added:
trunk/debian/patches/000_stolen_from_HEAD_trident_driver.diff
Modified:
trunk/debian/CHANGESETS
trunk/debian/changelog
trunk/debian/patches/000_stolen_from_HEAD.diff
trunk/debian/patches/030_Xserver_and_driver_region_primitive_fixups.diff
trunk/debian/patches/911_debian_XF86Config_to_XF86Config-4.diff
Log:
Grab from XFree86 CVS (2003-07-07) more updates to the trident driver,
placing them in their own patch file. Fixes several bugs and adds support
for TV chipsets VT1621 and CH7005. Drop trident driver patches in
#000_stolen_from_HEAD in favor of new patch file. Extend reversion of
REGION_EQUAL macro implementation to trident driver in patch #030. Resync
patch #911.
Modified: trunk/debian/CHANGESETS
===================================================================
--- trunk/debian/CHANGESETS 2004-08-10 23:53:36 UTC (rev 1724)
+++ trunk/debian/CHANGESETS 2004-08-11 01:28:34 UTC (rev 1725)
@@ -281,4 +281,12 @@
Resync patch #911.
1723, 1724
+Grab from XFree86 CVS (2003-07-07) more updates to the trident driver,
+placing them in their own patch file. Fixes several bugs and adds support
+for TV chipsets VT1621 and CH7005. Drop trident driver patches in
+#000_stolen_from_HEAD in favor of new patch file. Extend reversion of
+REGION_EQUAL macro implementation to trident driver in patch #030. Resync
+patch #911.
+ 1725
+
vim:set ai et sts=4 sw=4 tw=80:
Modified: trunk/debian/changelog
===================================================================
--- trunk/debian/changelog 2004-08-10 23:53:36 UTC (rev 1724)
+++ trunk/debian/changelog 2004-08-11 01:28:34 UTC (rev 1725)
@@ -202,6 +202,13 @@
reversion of REGION_EQUAL macro implementation to nv driver in patch #030.
Resync patch #911.
+ * Grab from XFree86 CVS (2003-07-07) more updates to the trident driver,
+ placing them in their own patch file. Fixes several bugs and adds support
+ for TV chipsets VT1621 and CH7005. Drop trident driver patches in
+ #000_stolen_from_HEAD in favor of new patch file. Extend reversion of
+ REGION_EQUAL macro implementation to trident driver in patch #030. Resync
+ patch #911.
+
Changes by Fabio M. Di Nitto and Branden Robinson:
* Support building only the parts of the source tree needed by
@@ -242,7 +249,7 @@
* Add checks to NSERVERS and NDRIVERS to avoid an "unknown" card to be
counted as a supported one if the user choose to autodetected.
- -- Branden Robinson <branden@debian.org> Tue, 10 Aug 2004 17:56:17 -0500
+ -- Branden Robinson <branden@debian.org> Tue, 10 Aug 2004 19:07:00 -0500
xfree86 (4.3.0.dfsg.1-6) unstable; urgency=low
Modified: trunk/debian/patches/000_stolen_from_HEAD.diff
===================================================================
--- trunk/debian/patches/000_stolen_from_HEAD.diff 2004-08-10 23:53:36 UTC (rev 1724)
+++ trunk/debian/patches/000_stolen_from_HEAD.diff 2004-08-11 01:28:34 UTC (rev 1725)
@@ -57,14 +57,6 @@
xc/programs/Xserver/hw/xfree86/drivers/rendition/rendition.c @ 1.51
981. Disable cuase of SEGV's in rendition driver (Marc La France).
-xc/programs/Xserver/hw/xfree86/drivers/trident/trident_dac.c @ 1.71
- 978. Fix bug in trident driver that caused old Cyber 9382/9385 chipsets
- to display half a jittered screen (Alan Hourihane).
-
-xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c @ 1.36
- 231. Fix regression of Xvideo not working with some videos on the
- CyberBladeXP/Ai1 chips (Bugzilla #251, Stephane Voltz).
-
xc/programs/Xserver/hw/xfree86/ramdac/xf86HWCurs.c @ 1.13
Don't call the driver's SetCursorColors function for ARGB cursors.
@@ -997,40 +989,6 @@
}
}
else {
-diff -urN xc.orig/programs/Xserver/hw/xfree86/drivers/trident/trident_dac.c xc/programs/Xserver/hw/xfree86/drivers/trident/trident_dac.c
---- xc.orig/programs/Xserver/hw/xfree86/drivers/trident/trident_dac.c 2003-01-06 05:09:00.000000000 +1100
-+++ xc/programs/Xserver/hw/xfree86/drivers/trident/trident_dac.c 2003-04-09 01:58:14.000000000 +1000
-@@ -21,7 +21,7 @@
- *
- * Author: Alan Hourihane, alanh@fairlite.demon.co.uk
- */
--/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/trident_dac.c,v 1.70 2003/01/05 18:09:00 alanh Exp $ */
-+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/trident_dac.c,v 1.71 2003/03/17 09:32:51 alanh Exp $ */
-
- #include "xf86.h"
- #include "xf86_OSproc.h"
-@@ -652,7 +652,8 @@
- pReg->tridentRegs3x4[Performance] |= 0x10;
-
- OUTB(vgaIOBase+ 4, DRAMControl);
-- pReg->tridentRegs3x4[DRAMControl] = INB(vgaIOBase + 5) | 0x10;
-+ if (pTrident->Chipset >= CYBER9388)
-+ pReg->tridentRegs3x4[DRAMControl] = INB(vgaIOBase + 5) | 0x10;
-
- if (pTrident->IsCyber && !pTrident->MMIOonly)
- pReg->tridentRegs3x4[DRAMControl] |= 0x20;
-diff -u -p -r1.35 -r1.36
---- xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c 2003/06/01 23:02:09 1.35
-+++ xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c 2003/06/19 11:01:54 1.36
-@@ -852,7 +852,7 @@
- } else {
- OUTW(0x3C4, 0x0097); /* 1x line buffers */
- }
-- OUTW(vgaIOBase + 4, 0x8097);
-+ OUTW(vgaIOBase + 4, 0x0097);
- OUTW(vgaIOBase + 4, 0x00BA);
- OUTW(vgaIOBase + 4, 0x00BB);
- OUTW(vgaIOBase + 4, 0xFFBC);
diff -urN xc.orig/programs/Xserver/hw/xfree86/ramdac/xf86HWCurs.c xc/programs/Xserver/hw/xfree86/ramdac/xf86HWCurs.c
--- xc.orig/programs/Xserver/hw/xfree86/ramdac/xf86HWCurs.c 2003-02-14 07:28:41.000000000 +1100
+++ xc/programs/Xserver/hw/xfree86/ramdac/xf86HWCurs.c 2003-04-09 01:58:14.000000000 +1000
Added: trunk/debian/patches/000_stolen_from_HEAD_trident_driver.diff
===================================================================
--- trunk/debian/patches/000_stolen_from_HEAD_trident_driver.diff 2004-08-10 23:53:36 UTC (rev 1724)
+++ trunk/debian/patches/000_stolen_from_HEAD_trident_driver.diff 2004-08-11 01:28:34 UTC (rev 1725)
@@ -0,0 +1,1440 @@
+$Id$
+
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident_dac.c @ 1.71
+ 978. Fix bug in trident driver that caused old Cyber 9382/9385 chipsets
+ to display half a jittered screen (Alan Hourihane).
+
+xc/programs/Xserver/hw/xfree86/drivers/trident/Imakefile @ 1.32
+xc/programs/Xserver/hw/xfree86/drivers/trident/blade_accel.c @ 1.19
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident.h @ 1.57
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident.man @ 1.13
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident_dac.c @ 1.72
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident_driver.c @ 1.177
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident_tv.c @ 1.1
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c @ 1.32
+ 105. Fix lockup when using Xv in the trident driver (Alan Hourihane).
+ 104. Add support for TV chipsets VT1621 and CH7005 to the trident driver
+ (VIA, Alan Hourihane).
+
+ 1.33 +3 -1 xc/programs/Xserver/hw/xfree86/drivers/trident/Imakefile
+[...]
+ Added Missing files to the SDK so it actually work.
+[Sven Luther]
+
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident_tv.c @ 1.2
+ build fixes
+[David Dawes]
+
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident.h @ 1.58
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident_driver.c @ 1.178
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c @ 1.33
+ 127. Centralise a region comparison primitive into 'mi' and use it instead of
+ local definitions throughout the server (Marc La France).
+[This was reverted; see patch #030.]
+
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident.man @ 1.14
+[...]
+ Fix manual pages typos (Bugzilla #316, Jens Schweikhardt).
+[Matthieu Herrb]
+
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c @ 1.34
+ put back waitforvblank in stopping video
+[Alan Hourihane]
+
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c @ 1.35
+ build fix
+[Alan Hourihane]
+
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c @ 1.36
+ 231. Fix regression of Xvideo not working with some videos on the
+ CyberBladeXP/Ai1 chips (Bugzilla #251, Stephane Voltz).
+[Alan Hourihane]
+
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c @ 1.37
+ 266. Fix a lockup with the trident driver when stopping/starting Xv
+ applications (Alan Hourihane).
+[Alan Hourihane]
+
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c @ 1.38
+ Ugh. committed too much debug in that last fix.
+[Alan Hourihane]
+
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident.man @ 1.15
+ fix typo in man page
+[Alan Hourihane]
+
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident_driver.c @ 1.179
+ add XAAScreenIndex to xaaSymbols list
+[Alan Hourihane]
+
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c @ 1.39
+ slight adjustment to xvideo hsync values for cyberblade at 24bit depth
+[Alan Hourihane]
+
+Index: xc/programs/Xserver/hw/xfree86/drivers/trident/Imakefile
+===================================================================
+RCS file: /cvs/xc/programs/Xserver/hw/xfree86/drivers/trident/Imakefile,v
+retrieving revision 1.31.2.1
+retrieving revision 1.33
+diff -u -r1.31.2.1 -r1.33
+--- xc/programs/Xserver/hw/xfree86/drivers/trident/Imakefile 24 May 2003 22:22:14 -0000 1.31.2.1
++++ xc/programs/Xserver/hw/xfree86/drivers/trident/Imakefile 21 Apr 2003 12:32:11 -0000 1.33
+@@ -1,4 +1,4 @@
+-XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/Imakefile,v 1.31.2.1 2003/05/24 22:22:14 sven Exp $
++XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/Imakefile,v 1.33 2003/04/21 12:32:11 sven Exp $
+ XCOMM
+ XCOMM This is an Imakefile for the TRIDENT driver.
+ XCOMM
+@@ -9,11 +9,11 @@
+ SRCS = trident_driver.c trident_dac.c tridenthelper.c \
+ trident_accel.c trident_i2c.c trident_bank.c \
+ image_accel.c blade_accel.c tvga_dac.c trident_dga.c \
+- trident_shadow.c trident_video.c xp_accel.c
++ trident_shadow.c trident_video.c xp_accel.c trident_tv.c
+ OBJS = trident_driver.o trident_dac.o tridenthelper.o \
+ trident_accel.o trident_i2c.o trident_bank.o \
+ image_accel.o blade_accel.o tvga_dac.o trident_dga.o \
+- trident_shadow.o trident_video.o xp_accel.o
++ trident_shadow.o trident_video.o xp_accel.o trident_tv.o
+
+ #if defined(XF86DriverSDK)
+ INCLUDES = -I. -I../../include
+@@ -62,6 +62,7 @@
+ InstallDriverSDKNonExecFile(tridentramdac.c,$(DRIVERSDKDIR)/drivers/trident)
+ InstallDriverSDKNonExecFile(trident_video.c,$(DRIVERSDKDIR)/drivers/trident)
+ InstallDriverSDKNonExecFile(tvga_dac.c,$(DRIVERSDKDIR)/drivers/trident)
++InstallDriverSDKNonExecFile(trident_tv.c,$(DRIVERSDKDIR)/drivers/trident)
+ InstallDriverSDKNonExecFile(xp_accel.c,$(DRIVERSDKDIR)/drivers/trident)
+
+ InstallDriverSDKObjectModule(trident,$(DRIVERSDKMODULEDIR),drivers)
+Index: xc/programs/Xserver/hw/xfree86/drivers/trident/blade_accel.c
+===================================================================
+RCS file: /cvs/xc/programs/Xserver/hw/xfree86/drivers/trident/blade_accel.c,v
+retrieving revision 1.18
+retrieving revision 1.19
+diff -u -r1.18 -r1.19
+--- xc/programs/Xserver/hw/xfree86/drivers/trident/blade_accel.c 8 Oct 2002 22:14:11 -0000 1.18
++++ xc/programs/Xserver/hw/xfree86/drivers/trident/blade_accel.c 15 Apr 2003 22:13:43 -0000 1.19
+@@ -23,7 +23,7 @@
+ *
+ * Trident Blade3D accelerated options.
+ */
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/blade_accel.c,v 1.18 2002/10/08 22:14:11 tsi Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/blade_accel.c,v 1.19 2003/04/15 22:13:43 alanh Exp $ */
+
+ #include "xf86.h"
+ #include "xf86_OSproc.h"
+@@ -295,13 +295,13 @@
+ BLADE_OUT(0x2168, transparency_color & 0xffffff);
+ pTrident->BltScanDirection |= 1<<6;
+ }
+-#endif
+
+ REPLICATE(planemask);
+- if (planemask != -1) {
++ if (planemask != (unsigned int)-1) {
+ BLADE_OUT(0x2184, ~planemask);
+ pTrident->BltScanDirection |= 1<<5;
+ }
++#endif
+ BLADE_OUT(0x2148, XAACopyROP[rop]);
+ }
+
+@@ -483,11 +483,13 @@
+ BLADE_OUT(0x2160, color);
+ BLADE_OUT(0x2148, XAACopyROP[rop]);
+ pTrident->BltScanDirection = 0;
++#if 0
+ REPLICATE(planemask);
+ if (planemask != -1) {
+ BLADE_OUT(0x2184, ~planemask);
+ pTrident->BltScanDirection |= 1<<5;
+ }
++#endif
+ }
+
+ static void
+@@ -559,11 +561,13 @@
+ BLADE_OUT(0x2160, fg);
+ BLADE_OUT(0x2164, bg);
+ }
++#if 0
+ REPLICATE(planemask);
+ if (planemask != -1) {
+ BLADE_OUT(0x2184, ~planemask);
+ pTrident->BltScanDirection |= 1<<5;
+ }
++#endif
+ }
+
+ static void
+@@ -610,11 +614,13 @@
+ BLADE_OUT(0x2178, bg);
+ }
+ pTrident->BltScanDirection = 0;
++#if 0
+ REPLICATE(planemask);
+ if (planemask != -1) {
+ BLADE_OUT(0x2184, ~planemask);
+ pTrident->BltScanDirection |= 1<<5;
+ }
++#endif
+ }
+
+ static void
+@@ -683,11 +689,13 @@
+
+ BLADE_OUT(0x2148, XAACopyROP[rop]);
+ pTrident->BltScanDirection = 0;
++#if 0
+ REPLICATE(planemask);
+ if (planemask != -1) {
+ BLADE_OUT(0x2184, ~planemask);
+ pTrident->BltScanDirection |= 1<<5;
+ }
++#endif
+ }
+
+ static void BladeSubsequentImageWriteRect(
+Index: xc/programs/Xserver/hw/xfree86/drivers/trident/trident.h
+===================================================================
+RCS file: /cvs/xc/programs/Xserver/hw/xfree86/drivers/trident/trident.h,v
+retrieving revision 1.56
+retrieving revision 1.58
+diff -u -r1.56 -r1.58
+--- xc/programs/Xserver/hw/xfree86/drivers/trident/trident.h 16 Sep 2002 18:06:02 -0000 1.56
++++ xc/programs/Xserver/hw/xfree86/drivers/trident/trident.h 23 Apr 2003 21:51:49 -0000 1.58
+@@ -21,7 +21,7 @@
+ *
+ * Authors: Alan Hourihane, <alanh@fairlite.demon.co.uk>
+ */
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/trident.h,v 1.56 2002/09/16 18:06:02 eich Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/trident.h,v 1.58 2003/04/23 21:51:49 tsi Exp $ */
+ /*#define VBE_INFO*/
+
+ #ifndef _TRIDENT_H_
+@@ -49,6 +49,7 @@
+ unsigned char DacRegs[0x300];
+ } TRIDENTRegRec, *TRIDENTRegPtr;
+
++#define VGA_REGNUM_ABOUT_TV 19
+ #define TRIDENTPTR(p) ((TRIDENTPtr)((p)->driverPrivate))
+
+ typedef struct {
+@@ -140,7 +141,6 @@
+ CARD8* XAAScanlineColorExpandBuffers[2];
+ CARD8* XAAImageScanlineBuffer[1];
+ void (*InitializeAccelerator)(ScrnInfoPtr);
+-#ifdef XvExtension
+ void (*VideoTimerCallback)(ScrnInfoPtr, Time);
+ XF86VideoAdaptorPtr adaptor;
+ int videoKey;
+@@ -150,7 +150,6 @@
+ int vsync_bskew;
+ CARD32 videoFlags;
+ int keyOffset;
+-#endif
+ int OverrideHsync;
+ int OverrideVsync;
+ int OverrideBskew;
+@@ -163,6 +162,11 @@
+ int brightness;
+ double gamma;
+ int FPDelay; /* just for debugging - will go away */
++ int TVChipset; /* 0: None 1: VT1621 2: CH7005C*/
++ int TVSignalMode; /* 0: NTSC 1: PAL */
++ Bool TVRegSet; /* 0: User not customer TV Reg, 1: User customer TV Reg */
++ unsigned char TVRegUserSet[2][128]; /*[0][128] for Reg Index, [1][128] for Reg Value */
++ unsigned char DefaultTVDependVGASetting[VGA_REGNUM_ABOUT_TV+0x62]; /* VGA_REGNUM_ABOUT_TV: VGA Reg, 0x62: TV Reg */
+ } TRIDENTRec, *TRIDENTPtr;
+
+ typedef struct {
+@@ -250,6 +254,11 @@
+ void TRIDENTRefreshArea24(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
+ void TRIDENTRefreshArea32(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
+
++void VIA_TVInit(ScrnInfoPtr pScrn);
++void VIA_SaveTVDepentVGAReg(ScrnInfoPtr pScrn);
++void VIA_RestoreTVDependVGAReg(ScrnInfoPtr pScrn);
++void VIA_DumpReg(ScrnInfoPtr pScrn);
++
+ /*
+ * Trident Chipset Definitions
+ */
+Index: xc/programs/Xserver/hw/xfree86/drivers/trident/trident.man
+===================================================================
+RCS file: /cvs/xc/programs/Xserver/hw/xfree86/drivers/trident/trident.man,v
+retrieving revision 1.12
+retrieving revision 1.15
+diff -u -r1.12 -r1.15
+--- xc/programs/Xserver/hw/xfree86/drivers/trident/trident.man 6 Jan 2003 10:15:26 -0000 1.12
++++ xc/programs/Xserver/hw/xfree86/drivers/trident/trident.man 3 Jul 2003 07:52:46 -0000 1.15
+@@ -1,4 +1,4 @@
+-.\" $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/trident.man,v 1.12 2003/01/06 10:15:26 alanh Exp $
++.\" $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/trident.man,v 1.15 2003/07/03 07:52:46 alanh Exp $
+ .\" shorthand for double quote that works everywhere.
+ .ds q \N'34'
+ .TH TRIDENT __drivermansuffix__ __vendorversion__
+@@ -39,7 +39,7 @@
+ .TP 12
+ .B ISA/VLBus
+ 8900C, 8900D, 9000, 9200CXr, Cyber9320, 9400CXi, 9440AGi
+-These cards have been ported but need furthur testing and may not work.
++These cards have been ported but need further testing and may not work.
+ .SH CONFIGURATION DETAILS
+ Please refer to XF86Config(__filemansuffix__) for general configuration
+ details. This section only covers configuration details specific to this
+@@ -74,6 +74,14 @@
+ This sets the default pixel value for the YUV video overlay key.
+ Default: undefined.
+ .TP
++.BI "Option \*qTVChipset\*q \*q" string \*q
++This sets the TV chipset. Options are CH7005 or VT1621.
++Default: off.
++.TP
++.BI "Option \*qTVSignal\*q \*q" integer \*q
++This sets the TV signalling. Options are 0 for NTSC or 1 for PAL.
++Default: undefined.
++.TP
+ .BI "Option \*qNoPciBurst\*q \*q" boolean \*q
+ Turn off PCI burst mode, PCI Bursting is on by default.
+ Default: off.
+Index: xc/programs/Xserver/hw/xfree86/drivers/trident/trident_dac.c
+===================================================================
+RCS file: /cvs/xc/programs/Xserver/hw/xfree86/drivers/trident/trident_dac.c,v
+retrieving revision 1.70
+retrieving revision 1.72
+diff -u -r1.70 -r1.72
+--- xc/programs/Xserver/hw/xfree86/drivers/trident/trident_dac.c 5 Jan 2003 18:09:00 -0000 1.70
++++ xc/programs/Xserver/hw/xfree86/drivers/trident/trident_dac.c 15 Apr 2003 22:13:43 -0000 1.72
+@@ -21,7 +21,7 @@
+ *
+ * Author: Alan Hourihane, alanh@fairlite.demon.co.uk
+ */
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/trident_dac.c,v 1.70 2003/01/05 18:09:00 alanh Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/trident_dac.c,v 1.72 2003/04/15 22:13:43 alanh Exp $ */
+
+ #include "xf86.h"
+ #include "xf86_OSproc.h"
+@@ -652,7 +652,8 @@
+ pReg->tridentRegs3x4[Performance] |= 0x10;
+
+ OUTB(vgaIOBase+ 4, DRAMControl);
+- pReg->tridentRegs3x4[DRAMControl] = INB(vgaIOBase + 5) | 0x10;
++ if (pTrident->Chipset >= CYBER9388)
++ pReg->tridentRegs3x4[DRAMControl] = INB(vgaIOBase + 5) | 0x10;
+
+ if (pTrident->IsCyber && !pTrident->MMIOonly)
+ pReg->tridentRegs3x4[DRAMControl] |= 0x20;
+@@ -1197,4 +1198,3 @@
+ DACDelay(hwp);
+ }
+ }
+-
+Index: xc/programs/Xserver/hw/xfree86/drivers/trident/trident_driver.c
+===================================================================
+RCS file: /cvs/xc/programs/Xserver/hw/xfree86/drivers/trident/trident_driver.c,v
+retrieving revision 1.176
+retrieving revision 1.179
+diff -u -r1.176 -r1.179
+--- xc/programs/Xserver/hw/xfree86/drivers/trident/trident_driver.c 11 Feb 2003 03:41:38 -0000 1.176
++++ xc/programs/Xserver/hw/xfree86/drivers/trident/trident_driver.c 7 Jul 2003 17:03:23 -0000 1.179
+@@ -28,7 +28,7 @@
+ * Massimiliano Ghilardi, max@Linuz.sns.it, some fixes to the
+ * clockchip programming code.
+ */
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/trident_driver.c,v 1.176 2003/02/11 03:41:38 dawes Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/trident_driver.c,v 1.179 2003/07/07 17:03:23 alanh Exp $ */
+
+ #include "xf1bpp.h"
+ #include "xf4bpp.h"
+@@ -64,9 +64,7 @@
+ #define DPMS_SERVER
+ #include "extensions/dpms.h"
+
+-#ifdef XvExtension
+ #include "xf86xv.h"
+-#endif
+
+ static const OptionInfoRec * TRIDENTAvailableOptions(int chipid, int busid);
+ static void TRIDENTIdentify(int flags);
+@@ -235,7 +233,9 @@
+ OPTION_FP_DELAY,
+ OPTION_1400_DISPLAY,
+ OPTION_DISPLAY,
+- OPTION_GB
++ OPTION_GB,
++ OPTION_TV_CHIPSET,
++ OPTION_TV_SIGNALMODE
+ } TRIDENTOpts;
+
+ static const OptionInfoRec TRIDENTOptions[] = {
+@@ -260,6 +260,8 @@
+ { OPTION_1400_DISPLAY, "Display1400", OPTV_BOOLEAN, {0}, FALSE },
+ { OPTION_DISPLAY, "Display", OPTV_ANYSTR, {0}, FALSE },
+ { OPTION_GB, "GammaBrightness", OPTV_ANYSTR, {0}, FALSE },
++ { OPTION_TV_CHIPSET, "TVChipset", OPTV_ANYSTR, {0}, FALSE },
++ { OPTION_TV_SIGNALMODE, "TVSignal", OPTV_INTEGER, {0}, FALSE },
+ { -1, NULL, OPTV_NONE, {0}, FALSE }
+ };
+
+@@ -458,7 +460,7 @@
+ { 3,800,600,40000,0x7f,0x82,0x6b,0x1b,0x72,0xf8,0x58,0x8c,0x72,0x08},
+ { 2,1024,768,65000,0xa3,/*0x6*/0x98,0x8f,0xa0,0x24,0xf5,0x0f,0x24,0x0a,0x08},
+ { 0,1280,1024,108000,0xce,0x81,0xa6,0x9a,0x27,0x50,0x00,0x03,0x26,0xa8},
+- { 0xff,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
++ { 0xff,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
+ };
+ #else
+ tridentLCD LCD[] = {
+@@ -467,7 +469,7 @@
+ { 2,1024,768,65000,0xa3,0x00,0x84,0x94,0x24,0xf5,0x03,0x09,0x24,0x08},
+ { 0,1280,1024,108000,0xce,0x91,0xa6,0x14,0x28,0x5a,0x01,0x04,0x28,0xa8},
+ { 4,1400,1050,122000,0xe6,0xcd,0xba,0x1d,0x38,0x00,0x1c,0x28,0x28,0xf8},
+- { 0xff,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
++ { 0xff,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
+ };
+ #endif
+ #endif
+@@ -476,7 +478,6 @@
+ "XAACopyROP",
+ "XAACreateInfoRec",
+ "XAADestroyInfoRec",
+- "XAAFillSolidRects",
+ "XAAInit",
+ "XAAPatternROP",
+ "XAAScreenIndex",
+@@ -1446,12 +1447,31 @@
+ } else {
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "\"%s\" is not a valid"
+ "value for Option \"Rotate\"\n", s);
+- xf86DrvMsg(pScrn->scrnIndex, X_INFO,
++ xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+ "Valid options are \"CW\" or \"CCW\"\n");
+ }
+ }
+ }
+
++ pTrident->TVChipset = 0;
++ if ((s = xf86GetOptValString(pTrident->Options, OPTION_TV_CHIPSET))) {
++ if(!xf86NameCmp(s, "VT1621")) {
++ pTrident->TVChipset = 1;
++ xf86DrvMsg(pScrn->scrnIndex,X_CONFIG,"Using VIA VT1621 TV chip\n");
++ } else if (!xf86NameCmp(s, "CH7005")) {
++ pTrident->TVChipset = 2;
++ xf86DrvMsg(pScrn->scrnIndex,X_CONFIG,"Using Chrontel CH7005 TV chip\n");
++ } else
++ xf86DrvMsg(pScrn->scrnIndex,X_ERROR,
++ "%s is an unknown TV chipset option\n",s);
++ }
++ /* Default : NTSC */
++ pTrident->TVSignalMode=0;
++ if (xf86GetOptValInteger(pTrident->Options, OPTION_TV_SIGNALMODE,
++ &pTrident->TVSignalMode)) {
++ ErrorF("TV SignalMode set to %d\n",pTrident->TVSignalMode);
++ }
++
+ /* FIXME ACCELERATION */
+ if (!UseMMIO) pTrident->NoAccel = TRUE;
+
+@@ -2569,6 +2589,9 @@
+ TridentSave(pScrn, tridentReg);
+ else
+ TVGASave(pScrn, tridentReg);
++
++ if (pTrident->TVChipset != 0)
++ VIA_SaveTVDepentVGAReg(pScrn);
+ }
+
+
+@@ -2678,6 +2701,9 @@
+ if (xf86IsPc98())
+ PC98TRIDENTEnable(pScrn);
+
++ if (pTrident->TVChipset != 0)
++ VIA_TVInit(pScrn);
++
+ return TRUE;
+ }
+
+@@ -2707,6 +2733,9 @@
+ vgaHWRestore(pScrn, vgaReg, VGA_SR_MODE | VGA_SR_CMAP |
+ (IsPrimaryCard ? VGA_SR_FONTS : 0));
+
++ if (pTrident->TVChipset != 0)
++ VIA_RestoreTVDependVGAReg(pScrn);
++
+ vgaHWProtect(pScrn, FALSE);
+ }
+
+@@ -3018,10 +3047,8 @@
+ pScrn->memPhysBase = pTrident->FbAddress;
+ pScrn->fbOffset = 0;
+
+-#ifdef XvExtension
+ if (pTrident->Chipset >= TGUI9660)
+ TRIDENTInitVideo(pScreen);
+-#endif
+
+ pTrident->CloseScreen = pScreen->CloseScreen;
+ pScreen->CloseScreen = TRIDENTCloseScreen;
+Index: xc/programs/Xserver/hw/xfree86/drivers/trident/trident_tv.c
+===================================================================
+RCS file: programs/Xserver/hw/xfree86/drivers/trident/trident_tv.c
+diff -N programs/Xserver/hw/xfree86/drivers/trident/trident_tv.c
+--- xc//dev/null 1 Jan 1970 00:00:00 -0000
++++ xc/programs/Xserver/hw/xfree86/drivers/trident/trident_tv.c 21 Apr 2003 20:42:30 -0000 1.2
+@@ -0,0 +1,705 @@
++/*
++ * VIA TV additions
++ */
++
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/trident_tv.c,v 1.2 2003/04/21 20:42:30 dawes Exp $ */
++
++#include "xf86_ansic.h"
++#include "trident.h"
++#include "trident_regs.h"
++
++/***************************************************************************
++ *
++ * TV parameters for VT1621
++ *
++ ***************************************************************************/
++#define TV_MODE 8
++#define TVX_MODE_SIZE 0X72
++#define TVX_CRTC_NUM 0x10
++#define TVX_REG_NUM 0x62
++#define TVX_VT1621_PORT 0x40
++#define SMBUS_BASE 0x5000
++unsigned char TVX_VT1621_Table[TV_MODE][TVX_MODE_SIZE] = {
++{
++/* NTSC, 640x480, bpp=8,16 */
++0x02, 0x54, 0xE0, 0xFA, 0x11, 0x5D, 0x11, 0x57, 0x5A, 0x56,
++0xA0, 0x26, 0x0A, 0x55, 0x37, 0x86,
++
++0x6A, 0x0B, 0x22, 0x27, 0x43, 0x50, 0x13, 0x50,
++0xB0, 0x07, 0xEE, 0x15, 0x90, 0xE4, 0x00, 0xA8,
++0x00, 0x00, 0x0E, 0x48, 0x38, 0x38, 0x00, 0x1C,
++0x00, 0x40, 0x0C, 0x02, 0x01, 0x80, 0x00, 0x00,
++0x0F, 0x06, 0x99, 0x7C, 0x04, 0x5D, 0x36, 0x9B,
++0x54, 0x00, 0x00, 0xB4, 0x2F, 0x85, 0xFF, 0x00,
++0x00, 0x17, 0x15, 0x21, 0x15, 0x05, 0x05, 0x02,
++0x1B, 0x1B, 0x24, 0xF8, 0x07, 0x00, 0x00, 0x0F,
++0x0F, 0x60, 0x01, 0x0A, 0x00, 0x05, 0x04, 0xFF,
++0x03, 0x01, 0x90, 0x33, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x04, 0x47, 0x02, 0x02, 0xFD, 0x06, 0xf8,
++0x0B, 0xF3, 0x0F, 0x70, 0x05, 0xF9, 0x0B, 0xF1,
++0x11, 0x6E
++},
++{
++/* NTSC, 800x600, bpp=8,16 */
++0X02, 0x79, 0XE0, 0x73, 0x02, 0x80, 0x01, 0x7A, 0x7E, 0xEC,
++0xA0, 0x8A, 0x0E, 0xEB, 0x8B, 0x89,
++
++0x8B, 0x0B, 0x6A, 0x27, 0x43, 0x50, 0x12, 0x50,
++0xBC, 0x0A, 0XE8, 0x15, 0x88, 0xDC, 0x00, 0x98,
++0x00, 0x00, 0x0A, 0x48, 0x1C, 0x28, 0x03, 0x20,
++0x00, 0x40, 0x36, 0x02, 0x03, 0x80, 0x00, 0x00,
++0x0D, 0x04, 0x04, 0x7B, 0x00, 0x5D, 0xC1, 0x9B,
++0x6B, 0x00, 0x00, 0xA1, 0x3F, 0x9D, 0x2F, 0x10,
++0x00, 0x17, 0x15, 0x21, 0x15, 0x05, 0x05, 0x02,
++0x1B, 0x1B, 0x24, 0xF8, 0x07, 0x00, 0x00, 0x0F,
++0x0F, 0x60, 0x01, 0x0A, 0x00, 0x05, 0x04, 0xFF,
++0x03, 0x01, 0xD6, 0x80, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x0C, 0x46, 0x02, 0x02, 0xFD, 0x06, 0xF8,
++0x0B, 0xF3, 0x0F, 0x70, 0x05, 0xF9, 0x0B, 0xF1,
++0x11, 0x6E
++},
++{
++/* NTSC, 640x480, bpp=32 */
++0X02, 0x54, 0XE0, 0xFA, 0x11, 0x5D, 0x01, 0x57, 0x5A, 0x56,
++0xA0, 0x26, 0x0A, 0X55, 0x37, 0x46,
++
++0x6A, 0x0B, 0x23, 0x33, 0x43, 0x50, 0x13, 0x51,
++0xB0, 0x07, 0xAB, 0x15, 0x90, 0xA9, 0x00, 0x98,
++0x00, 0x00, 0x0E, 0x48, 0x38, 0x38, 0x03, 0x1C,
++0x00, 0x40, 0x0C, 0x02, 0x03, 0x80, 0x00, 0x00,
++0x0F, 0x04, 0x99, 0x7A, 0x04, 0x5E, 0xB6, 0x90,
++0x5B, 0x00, 0x00, 0x67, 0x2F, 0x88, 0xFA, 0x00,
++0x00, 0x17, 0x15, 0x21, 0x15, 0x05, 0x05, 0x02,
++0x1B, 0x1B, 0x24, 0xF8, 0x07, 0x00, 0x00, 0x0F,
++0x0F, 0x60, 0x01, 0x0A, 0x00, 0x05, 0x04, 0xFF,
++0x03, 0x01, 0xA0, 0x33, 0x1B, 0x00, 0X00, 0x00,
++0x00, 0x08, 0x47, 0x02, 0x02, 0xFD, 0x06, 0xf8,
++0x0B, 0xF3, 0x0F, 0x70, 0x05, 0xF9, 0x0B, 0xF1,
++0x11, 0x6E
++},
++{
++/* NTSC, 800x600, bpp=32 */
++0X02, 0x79, 0XE0, 0x73, 0x02, 0x80, 0x01, 0x7B, 0x7E, 0xEC,
++0xA0, 0x8A, 0x0E, 0xEB, 0x8B, 0x49,
++
++0x8B, 0x0B, 0x6B, 0x27, 0x43, 0x50, 0x12, 0x2D,
++0xBC, 0x0C, 0xED, 0x15, 0x88, 0xEE, 0x00, 0x99,
++0x00, 0x00, 0x0A, 0x48, 0x1C, 0x28, 0x03, 0x20,
++0x00, 0x40, 0x36, 0x02, 0x03, 0x80, 0x00, 0x00,
++0x0D, 0x04, 0x04, 0x7A, 0x00, 0x5D, 0xC1, 0x9B,
++0x6B, 0x00, 0x00, 0xA1, 0x3F, 0x9D, 0x2F, 0x10,
++0x00, 0x17, 0x15, 0x21, 0x15, 0x05, 0x05, 0x02,
++0x1B, 0x1B, 0x24, 0xF8, 0x07, 0x00, 0x00, 0x0F,
++0x0F, 0x60, 0x01, 0x0A, 0x00, 0x05, 0x04, 0xFF,
++0x03, 0x01, 0xC6, 0x90, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x08, 0x46, 0x02, 0x02, 0xFD, 0x06, 0xF8,
++0x0B, 0xF3, 0x0F, 0x70, 0x05, 0xF9, 0x0B, 0xF1,
++0x11, 0x6E
++},
++{
++/* PAL, 640x480, bpp=8,16 */
++0X82, 0x5D, 0XE0, 0x23, 0x02, 0x64, 0x01, 0x56, 0x5A, 0x6F,
++0xA0, 0x0D, 0x0F, 0x6E, 0x24, 0xC1,
++
++0x6B, 0x0B, 0x03, 0x67, 0x40, 0x50, 0x12, 0x96,
++0xCE, 0x32, 0xFF, 0x01, 0x7E, 0xF6, 0x00, 0xA8,
++0x00, 0x00, 0x07, 0x48, 0x20, 0x1C, 0x44, 0x60,
++0x44, 0x4F, 0x1B, 0x02, 0x03, 0x80, 0x00, 0x00,
++0x0C, 0x0C, 0xD7, 0x84, 0x04, 0x68, 0x3B, 0x9C,
++0x57, 0x63, 0x17, 0xAC, 0x25, 0x80, 0x29, 0x10,
++0x00, 0x1A, 0x22, 0x2A, 0x22, 0x05, 0x02, 0x00,
++0x1C, 0x3D, 0x14, 0xFE, 0x03, 0x54, 0x01, 0xFE,
++0x7E, 0x60, 0x00, 0x08, 0x00, 0x04, 0x07, 0x55,
++0x01, 0x01, 0xA0, 0x33, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x0C, 0x4E, 0xFE, 0x03, 0xFB, 0x06, 0xF8,
++0x0A, 0xF5, 0x0C, 0x73, 0x06, 0xF8, 0x0B, 0xF2,
++0x10, 0x6F
++},
++{
++/* PAL, 800x600, bpp=8,16 */
++0X82, 0x5B, 0XE0, 0x91, 0x02, 0x73, 0x07, 0x6C, 0x70, 0xEC,
++0xA0, 0xA8, 0x0B, 0xEB, 0xAD, 0xC7,
++
++0x8B, 0x0B, 0x1A, 0x47, 0x40, 0x50, 0x12, 0x56,
++0x00, 0x37, 0xF7, 0x00, 0x7D, 0xE2, 0x00, 0xB9,
++0x00, 0x00, 0x0E, 0x48, 0x38, 0x38, 0x44, 0x62,
++0x44, 0x4F, 0x53, 0x02, 0x07, 0x80, 0x00, 0x00,
++0x0A, 0x05, 0xA2, 0x83, 0x08, 0x68, 0x46, 0x99,
++0x68, 0x63, 0x17, 0xAC, 0x25, 0x80, 0x6B, 0x10,
++0x00, 0x1A, 0x22, 0x2A, 0x22, 0x05, 0x02, 0x00,
++0x1C, 0x3D, 0x14, 0xFE, 0x03, 0x54, 0x01, 0xFE,
++0x7E, 0x60, 0x00, 0x08, 0x00, 0x04, 0x07, 0x55,
++0x01, 0x01, 0xE6, 0x90, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x0C, 0x4D, 0xFB, 0x04, 0xFB, 0x07, 0xF8,
++0x09, 0xF6, 0x0A, 0x74, 0x06, 0xF8, 0x0B, 0xF2,
++0x10, 0x6F
++},
++{
++/* PAL, 640x480, bpp=32 */
++0X82, 0x5D, 0XE0, 0x23, 0x02, 0x64, 0x01, 0x56, 0x5A, 0x6F,
++0xA0, 0x0D, 0x0F, 0x6E, 0x24, 0x81,
++
++0x6B, 0x0B, 0x02, 0x67, 0x40, 0x50, 0x12, 0x93,
++0xCE, 0x32, 0xF0, 0x01, 0x88, 0xE8, 0x00, 0xA8,
++0x00, 0x00, 0x07, 0x48, 0x20, 0x1C, 0x44, 0x60,
++0x44, 0x4F, 0x1B, 0x02, 0x03, 0x80, 0x00, 0x00,
++0x0C, 0x05, 0xE2, 0x84, 0x00, 0x68, 0x3B, 0x9C,
++0x57, 0x63, 0x17, 0xAC, 0x25, 0x80, 0x29, 0x10,
++0x00, 0x1A, 0x22, 0x2A, 0x22, 0x05, 0x02, 0x00,
++0x1C, 0x3D, 0x14, 0xFE, 0x03, 0x54, 0x01, 0xFE,
++0x7E, 0x60, 0x00, 0x08, 0x00, 0x04, 0x07, 0x55,
++0x01, 0x01, 0xA0, 0x33, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x0C, 0x4E, 0xFE, 0x03, 0xFB, 0x06, 0xF8,
++0x0A, 0xF5, 0x0C, 0x73, 0x06, 0xF8, 0x0B, 0xF2,
++0x10, 0x6F
++},
++{
++/* PAL, 800x600, bpp=32 */
++0X82, 0x5B, 0XE0, 0x91, 0x02, 0x73, 0x07, 0x6C, 0x70, 0xEC,
++0xA0, 0xA8, 0x0B, 0xEB, 0xAD, 0x87,
++
++0x8B, 0x0B, 0x1A, 0x67, 0x40, 0x50, 0x12, 0x53,
++0x00, 0x37, 0xEE, 0x00, 0x83, 0xEB, 0x00, 0xB9,
++0x00, 0x00, 0x0E, 0x48, 0x38, 0x38, 0x44, 0x62,
++0x44, 0x4F, 0x53, 0x02, 0x07, 0x80, 0x00, 0x00,
++0x0A, 0x05, 0x5E, 0x83, 0x08, 0x68, 0x46, 0x99,
++0x68, 0x63, 0x17, 0xAC, 0x25, 0x80, 0x6B, 0x10,
++0x00, 0x1A, 0x22, 0x2A, 0x22, 0x05, 0x02, 0x00,
++0x1C, 0x3D, 0x14, 0xFE, 0x03, 0x54, 0x01, 0xFE,
++0x7E, 0x60, 0x00, 0x08, 0x00, 0x04, 0x07, 0x55,
++0x01, 0x01, 0xA0, 0x22, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x0C, 0x4D, 0xFB, 0x04, 0xFB, 0x07, 0xF8,
++0x09, 0xF6, 0x0A, 0x74, 0x06, 0xF8, 0x0B, 0xF2,
++0x10, 0x6F
++}
++};
++/* TV Parameters for CH7005C */
++#define TV_CH7005C_MODE_SIZE 45
++#define TV_CH7005C_CRTC_NUM 0x10
++#define TV_CH7005C_TVREG_NUM 29
++#define TV_CH7005C_PORT 0xEA
++unsigned char TV_CH7005C_Table[TV_MODE][TV_CH7005C_MODE_SIZE]={
++{
++/* NTSC 640x480 bpp=8,16 */
++0x02, 0x80, 0x20, 0x02, 0x00, 0x5D, 0X80, 0X57, 0X80, 0X56,
++0XBA, 0X10, 0X8C, 0X50, 0XF8, 0X7F,
++
++0X6A, 0X7A, 0X00, 0X09, 0X80, 0X66, 0X00, 0X60,
++0X2E, 0XFF, 0X01, 0X0B, 0X0C, 0X03, 0X40, 0X3F,
++0X7E, 0X40, 0X02, 0X00, 0X08, 0X00, 0X00, 0X00,
++0X00, 0X00, 0X0A, 0X02, 0X05
++},
++{
++/* NTSC 800X600 bpp=8,16 */
++0x02, 0x80, 0x20, 0x02, 0x00, 0x7D, 0X80, 0X6E, 0X1C, 0XBA,
++0XF0, 0X70, 0X8C, 0XBA, 0X78, 0X53,
++
++0X8C, 0X4A, 0X00, 0X09, 0X80, 0XAE, 0X01, 0X80,
++0X2E, 0X02, 0X01, 0X0B, 0X7E, 0X7E, 0X7E, 0X7E,
++0X7E, 0X40, 0X01, 0X0C, 0X00, 0X00, 0X00, 0X00,
++0X00, 0X00, 0X0A, 0X00, 0X05
++},
++{
++/* NTSC 640x480 bpp=32 */
++0x02, 0x80, 0x20, 0x02, 0x00, 0x5D, 0X80, 0X57, 0X80, 0X56,
++0XBA, 0X10, 0X8C, 0X50, 0XBD, 0X57,
++
++0X6A, 0X7A, 0X00, 0X09, 0X80, 0X67, 0X00, 0X60,
++0X2E, 0XFF, 0X01, 0X0B, 0X0C, 0X03, 0X40, 0X3F,
++0X7E, 0X40, 0X02, 0X00, 0X07, 0X0C, 0X0D, 0X00,
++0X00, 0X00, 0X0A, 0X02, 0X05
++},
++{
++/* NTSC 800X600 bpp=32 */
++0x02, 0x80, 0x20, 0x02, 0x00, 0x7D, 0X80, 0X6E, 0X1C, 0XBA,
++0XF0, 0X70, 0X8C, 0XBA, 0XF8, 0X53,
++
++0X8C, 0X4A, 0X00, 0X09, 0X80, 0XAF, 0X01, 0X80,
++0X2E, 0X02, 0X01, 0X0B, 0X0C, 0X03, 0X40, 0X3F,
++0X7E, 0X40, 0X01, 0X0C, 0X00, 0X00, 0X00, 0X00,
++0X00, 0X00, 0X0A, 0X00, 0X05
++},
++{
++/* PAL 640x480 bpp=8,16 */
++0x82, 0x80, 0x20, 0x02, 0x00, 0x71, 0X74, 0X62, 0X84, 0X6F,
++0XF0, 0X10, 0X09, 0XEB, 0X80, 0X5F,
++
++0X81, 0X4A, 0X00, 0X09, 0X80, 0X84, 0X00, 0X70,
++0X28, 0X02, 0X01, 0X0B, 0X0C, 0X03, 0X40, 0X3F,
++0X7E, 0X40, 0X02, 0X00, 0X08, 0X00, 0X00, 0X00,
++0X00, 0X00, 0X0A, 0X01, 0X05
++},
++{
++/* PAL 800x600 bpp=8,16 */
++0x82, 0x80, 0x20, 0x02, 0x00, 0x73, 0X76, 0X6A, 0X8C, 0XEC,
++0XF0, 0X7E, 0X09, 0XEB, 0X8F, 0X8D,
++
++0X83, 0X4A, 0X00, 0X09, 0X80, 0X7E, 0X00, 0X70,
++0X3F, 0X02, 0X01, 0X0B, 0X0C, 0X03, 0X40, 0X3F,
++0X7E, 0X40, 0X02, 0X00, 0X08, 0X00, 0X00, 0X00,
++0X00, 0X00, 0X0A, 0X01, 0X05
++},
++{
++/* PAL 640x480 bpp=32 */
++0x82, 0x80, 0x20, 0x02, 0x00, 0x71, 0X74, 0X62, 0X84, 0X6F,
++0XF0, 0X10, 0X09, 0XEB, 0X80, 0X1F,
++
++0X81, 0X4A, 0X00, 0X09, 0X80, 0X84, 0X00, 0X70,
++0X28, 0X02, 0X01, 0X0B, 0X0C, 0X03, 0X40, 0X3F,
++0X7E, 0X40, 0X02, 0X00, 0X08, 0X00, 0X00, 0X00,
++0X00, 0X00, 0X0A, 0X01, 0X05
++},
++{
++/* PAL 800X600 bpp=32 */
++0x82, 0x80, 0x20, 0x02, 0x00, 0x73, 0X76, 0X6A, 0X8C, 0XEC,
++0XF0, 0X7E, 0X09, 0XEB, 0X5D, 0X48,
++
++0X83, 0X4A, 0X00, 0X09, 0X80, 0X7E, 0X00, 0X70,
++0X3F, 0X02, 0X01, 0X0B, 0X0C, 0X03, 0X40, 0X3F,
++0X7E, 0X40, 0X02, 0X00, 0X08, 0X00, 0X00, 0X00,
++0X00, 0X00, 0X0A, 0X01, 0X05
++}
++};
++
++static unsigned char smbus_read(ScrnInfoPtr pScrn, unsigned char bIndex, unsigned char devAdr)
++{
++ TRIDENTPtr pTrident=TRIDENTPTR(pScrn);
++ unsigned short i;
++ unsigned char bData;
++
++ /* clear host status */
++ OUTB(SMBUS_BASE, 0xFF);
++
++ /* check SMBUS ready */
++ for ( i = 0; i < 0xFFFF; i++ )
++ if ( (INB(SMBUS_BASE) & 0x01) == 0 )
++ break;
++
++ /* set host command */
++ OUTB(SMBUS_BASE+3, bIndex);
++
++ /* set slave address */
++ OUTB(SMBUS_BASE+4, devAdr | 0x01);
++
++ /* start */
++ OUTB(SMBUS_BASE+2, 0x48);
++
++ /* SMBUS Wait Ready */
++ for ( i = 0; i < 0xFFFF; i++ )
++ if ( (INB(SMBUS_BASE) & 0x01) == 0 )
++ break;
++ bData=INB(SMBUS_BASE+5);
++
++ return bData;
++
++}
++
++static void smbus_write(ScrnInfoPtr pScrn, unsigned char bData, unsigned char bIndex, unsigned char devAdr)
++{
++ TRIDENTPtr pTrident=TRIDENTPTR(pScrn);
++ unsigned short i;
++
++ /* clear host status */
++ OUTB(SMBUS_BASE, 0xFF);
++
++ /* check SMBUS ready */
++ for ( i = 0; i < 0xFFFF; i++ )
++ if ( (INB(SMBUS_BASE) & 0x01) == 0 )
++ break;
++
++ OUTB(SMBUS_BASE+2, 0x08);
++
++ /* set host command */
++ OUTB(SMBUS_BASE+3, bIndex);
++
++ /* set slave address */
++ OUTB(SMBUS_BASE+4, devAdr & 0xFE);
++
++ OUTB(SMBUS_BASE+5, bData);
++
++ /* start */
++ OUTB(SMBUS_BASE+2, 0x48);
++
++ /* SMBUS Wait Ready */
++ for ( i = 0; i < 0xFFFF; i++ )
++ if ( (INB(SMBUS_BASE) & 0x01) == 0 )
++ break;
++}
++void VIA_SaveTVDepentVGAReg(ScrnInfoPtr pScrn)
++{
++ TRIDENTPtr pTrident=TRIDENTPTR(pScrn);
++ unsigned char protect;
++ unsigned char bTmp;
++ int i;
++ unsigned char VGA_RegIdx_about_TV[VGA_REGNUM_ABOUT_TV]={
++ 0xD8,0XD9,/* SR */
++ 0X33,/* GR */
++ 0XC0,0XD0,0XD1,0XD2,0XD3,0XE0,0XE3,0XE4,0XE5,/* CR */
++ 0XE6,0XE7,0XF0,0XF1,0XF6,0XFE,0XFF
++ };
++ unsigned char TV_CH7005C_RegIdx[TV_CH7005C_TVREG_NUM]={
++ 0X00,0X01,0X03,0X04,0X06,0X07,0X08,0X09,
++ 0X0A,0X0B,0X0D,0X0E,0X10,0X11,0X13,0X14,
++ 0X15,0X17,0X18,0X19,0X1A,0X1B,0X1C,0X1D,
++ 0X1E,0X1F,0X20,0X21,0X3D
++ };
++
++ /*ErrorF("VIAB3D: VIA_SaveTVDepentVGAReg:\n");*/
++
++ /* Unprotect */
++ OUTB(0x3C4, 0x11);
++ protect = INB(0x3C5);
++ OUTB(0x3C5, 0x92);
++
++ /* Set TV Hw environment */
++ OUTB(0x3d4,0xc1);
++ OUTB(0x3d5,0x41);
++
++ /* SR_d8,SR_d9 */
++ for (i=0; i<2; i++)
++ {
++ OUTB(0x3c4,VGA_RegIdx_about_TV[i]);
++ bTmp=INB(0x3c5);
++ pTrident->DefaultTVDependVGASetting[i]=bTmp;
++ }
++
++ /* GR_33 */
++ OUTB(0x3ce,0x33);
++ bTmp=INB(0x3cf);
++ pTrident->DefaultTVDependVGASetting[2]=bTmp;
++
++ /* CR_c0,d0,d1,d2,d3,e0,e3,e4,e5,e6,e7,f0,f1,f6,fe,ff */
++ for (i=3; i<VGA_REGNUM_ABOUT_TV; i++)
++ {
++ OUTB(0x3d4,VGA_RegIdx_about_TV[i]);
++ bTmp=INB(0x3d5);
++ pTrident->DefaultTVDependVGASetting[i]=bTmp;
++ }
++
++ switch (pTrident->TVChipset)
++ {
++ case 1:
++ for (i=0; i<TVX_REG_NUM; i++)
++ {
++ bTmp=smbus_read(pScrn,i,TVX_VT1621_PORT);
++ pTrident->DefaultTVDependVGASetting[VGA_REGNUM_ABOUT_TV+i]=bTmp;
++ }
++ break;
++ case 2:
++ for (i=0; i<TV_CH7005C_TVREG_NUM; i++)
++ {
++ bTmp=smbus_read(pScrn,TV_CH7005C_RegIdx[i],TV_CH7005C_PORT);
++ pTrident->DefaultTVDependVGASetting[VGA_REGNUM_ABOUT_TV+i]=bTmp;
++ }
++ break;
++ default:
++ ErrorF("VIAB3D: VIA_SaveTVDepentVGAReg: Wrong Chipset setting\n");
++ break;
++
++ }
++ /* protect */
++ OUTB(0x3C4, 0x11);
++ OUTB(0x3C5, protect);
++}
++void VIA_RestoreTVDependVGAReg(ScrnInfoPtr pScrn)
++{
++ TRIDENTPtr pTrident=TRIDENTPTR(pScrn);
++ unsigned char protect;
++ unsigned char bTmp;
++ int i;
++ unsigned char VGA_RegIdx_about_TV[VGA_REGNUM_ABOUT_TV]={
++ 0xD8,0XD9,/* SR */
++ 0X33,/* GR */
++ 0XC0,0XD0,0XD1,0XD2,0XD3,0XE0,0XE3,0XE4,0XE5,/* CR */
++ 0XE6,0XE7,0XF0,0XF1,0XF6,0XFE,0XFF
++ };
++ unsigned char TV_CH7005C_RegIdx[TV_CH7005C_TVREG_NUM]={
++ 0X00,0X01,0X03,0X04,0X06,0X07,0X08,0X09,
++ 0X0A,0X0B,0X0D,0X0E,0X10,0X11,0X13,0X14,
++ 0X15,0X17,0X18,0X19,0X1A,0X1B,0X1C,0X1D,
++ 0X1E,0X1F,0X20,0X21,0X3D
++ };
++
++ /*ErrorF("VIAB3D: VIA_RestoreTVDependVGAReg:\n");*/
++
++ /* Unprotect */
++ OUTB(0x3C4, 0x11);
++ protect = INB(0x3C5);
++ OUTB(0x3C5, 0x92);
++
++ /* Set TV Hw environment */
++ OUTB(0x3d4,0xc1);
++ OUTB(0x3d5,0x41);
++
++ /* SR_d8,SR_d9 */
++ for (i=0; i<2; i++)
++ {
++ OUTB(0x3c4,VGA_RegIdx_about_TV[i]);
++ bTmp=pTrident->DefaultTVDependVGASetting[i];
++ OUTB(0x3c5,bTmp);
++ }
++ /* GR_33 */
++ OUTB(0x3ce,0x33);
++ bTmp=pTrident->DefaultTVDependVGASetting[2];
++ OUTB(0x3cf,bTmp);
++
++ /* CR_c0,d0,d1,d2,d3,e0,e3,e4,e5,e6,e7,f0,f1,f6,fe,ff */
++ for (i=3; i<VGA_REGNUM_ABOUT_TV; i++)
++ {
++ OUTB(0x3d4,VGA_RegIdx_about_TV[i]);
++ bTmp=pTrident->DefaultTVDependVGASetting[i];
++ OUTB(0x3d5,bTmp);
++ }
++ switch (pTrident->TVChipset)
++ {
++ case 1:
++ for (i=0; i<TVX_REG_NUM; i++)
++ {
++ bTmp=pTrident->DefaultTVDependVGASetting[VGA_REGNUM_ABOUT_TV+i];
++ smbus_write(pScrn,bTmp,i,TVX_VT1621_PORT);
++ }
++ break;
++ case 2:
++ for (i=0; i<TV_CH7005C_TVREG_NUM; i++)
++ {
++ bTmp=pTrident->DefaultTVDependVGASetting[VGA_REGNUM_ABOUT_TV+i];
++ smbus_write(pScrn,bTmp,TV_CH7005C_RegIdx[i],TV_CH7005C_PORT);
++ }
++ break;
++ default:
++ ErrorF("VIAB3D: VIA_SaveTVDepentVGAReg: Wrong Chipset setting\n");
++ break;
++ }
++ /* protect */
++ OUTB(0x3C4, 0x11);
++ OUTB(0x3C5, protect);
++}
++void VIA_TVInit(ScrnInfoPtr pScrn)
++{
++ TRIDENTPtr pTrident=TRIDENTPTR(pScrn);
++ unsigned char idx=0;
++ unsigned char i;
++ unsigned char protect;
++ unsigned char TV_CRTC[TVX_CRTC_NUM] =
++ { 0xC0,0xD0,0xD1,0xD2,0xD3,0xE0,0xE3,0xE4,0xE5,
++ 0xE6,0xE7,0xF0,0xF1,0xF6,0xFE,0xFF };
++ unsigned char TV_CH7005C_RegIdx[TV_CH7005C_TVREG_NUM]={
++ 0X00,0X01,0X03,0X04,0X06,0X07,0X08,0X09,
++ 0X0A,0X0B,0X0D,0X0E,0X10,0X11,0X13,0X14,
++ 0X15,0X17,0X18,0X19,0X1A,0X1B,0X1C,0X1D,
++ 0X1E,0X1F,0X20,0X21,0X3D
++ };
++
++#ifdef DEBUG_CODE_TRACE
++ ErrorF("VIAB3D: VIA_TVInit:\n");
++#endif
++
++ if (pScrn->currentMode->HDisplay==640 && pScrn->currentMode->VDisplay==480 && (pScrn->depth==8 || pScrn->depth==16) && pTrident->TVSignalMode == 0)
++ {
++ /* Overlay window 1 position OK */
++ ErrorF("VIAB3D: VIA_TVInit: TV Params 640x480x8(16) NTSC\n");
++ idx=0;
++ pTrident->OverrideHsync=-71;
++ pTrident->OverrideVsync=15;
++ }
++ else if (pScrn->currentMode->HDisplay==800 && pScrn->currentMode->VDisplay==600 && (pScrn->depth==8 || pScrn->depth==16) && pTrident->TVSignalMode == 0)
++ {
++ /* Overlay window 1 position OK */
++ ErrorF("VIAB3D: VIA_TVInit: TV Params 800x600x8(16) NTSC\n");
++ idx=1;
++ pTrident->OverrideHsync=-152;
++ pTrident->OverrideVsync=72;
++ }
++ else if (pScrn->currentMode->HDisplay==640 && pScrn->currentMode->VDisplay==480 && pScrn->depth==24 && pTrident->TVSignalMode == 0)
++ {
++ ErrorF("VIAB3D: VIA_TVInit: TV Params 640x480x32 NTSC\n");
++ idx=2;
++ pTrident->OverrideHsync=-65;
++ pTrident->OverrideVsync=14;
++ }
++ else if (pScrn->currentMode->HDisplay==800 && pScrn->currentMode->VDisplay==600 && pScrn->depth==24 && pTrident->TVSignalMode == 0)
++ {
++ ErrorF("VIAB3D: VIA_TVInit: TV Params 800x600x32 NTSC\n");
++ idx=3;
++ pTrident->OverrideHsync=-158;
++ pTrident->OverrideVsync=72;
++ }
++ else if (pScrn->currentMode->HDisplay==640 && pScrn->currentMode->VDisplay==480 && (pScrn->depth==8 || pScrn->depth==16) && pTrident->TVSignalMode == 1)
++ {
++ /* Overlay window 1 position OK */
++ ErrorF("VIAB3D: VIA_TVInit: TV Params 640x480x8(16) PAL\n");
++ idx=4;
++ pTrident->OverrideHsync=2;
++ pTrident->OverrideVsync=65;
++ }
++ else if (pScrn->currentMode->HDisplay==800 && pScrn->currentMode->VDisplay==600 && (pScrn->depth==8 || pScrn->depth==16) && pTrident->TVSignalMode == 1)
++ {
++ ErrorF("VIAB3D: VIA_TVInit: TV Params 800x600x8(16) PAL\n");
++ /* patch TV screen defection */
++ idx=5;
++ /* patch 800x600 screen defect */
++ OUTB(0x3d4,0x2f);
++ OUTB(0x3d5,0xbf);
++ pTrident->OverrideHsync=-145;
++ pTrident->OverrideVsync=43;
++ }
++ else if (pScrn->currentMode->HDisplay==640 && pScrn->currentMode->VDisplay==480 && pScrn->depth==24 && pTrident->TVSignalMode == 1)
++ {
++ ErrorF("VIAB3D: VIA_TVInit: TV Params 640x480x32 PAL\n");
++ idx=6;
++ pTrident->OverrideHsync=0;
++ pTrident->OverrideVsync=63;
++ }
++ else if (pScrn->currentMode->HDisplay==800 && pScrn->currentMode->VDisplay==600 && pScrn->depth==24 && pTrident->TVSignalMode == 1)
++ {
++ ErrorF("VIAB3D: VIA_TVInit: TV Params 800x600x32 PAL\n");
++ idx=7;
++ OUTB(0x3d4,0x2f);
++ OUTB(0x3d5,0xbf);
++ pTrident->OverrideHsync=-141;
++ pTrident->OverrideVsync=42;
++ }
++ else
++ {
++ ErrorF("VIAB3D: VIA_TVInit: TV Params default mode\n");
++ return;
++ }
++
++ /* Unprotect */
++ OUTB(0x3C4, 0x11);
++ protect = INB(0x3C5);
++ OUTB(0x3C5, 0x92);
++
++ /* Set TV hw environment */
++ OUTB(0x3c4,0x24);
++ OUTB(0x3c5,0x4f);
++ OUTB(0x3d4,0xc1);
++ OUTB(0x3d5,0x41);
++ OUTB(0x3ce,0x23);
++ OUTB(0x3cf,0x88);
++
++ /* set CRT + TV */
++ OUTB(0x3CE,0x33);
++ OUTB(0x3CF,0x20);
++
++ /* set CRTC */
++ for( i = 0; i < TVX_CRTC_NUM; i++ )
++ {
++ OUTB(0x3D4, TV_CRTC[i]);
++
++ if (pTrident->TVChipset==2) {
++ OUTB(0x3D5, TV_CH7005C_Table[idx][i]);
++ }
++ else {
++ OUTB(0x3D5, TVX_VT1621_Table[idx][i]);
++ }
++ }
++
++
++ /* Digital TV interface control */
++ switch (pTrident->TVChipset)
++ {
++ case 1: OUTB(0x3C4,0xD8);
++ OUTB(0x3C5,0x60);
++ OUTB(0x3C4,0xD9);
++ OUTB(0x3C5,0x38);
++ break;
++ case 2: OUTB(0x3c4,0xd8);
++ OUTB(0x3c5,0x24);
++ OUTB(0x3C4,0xD9);
++ OUTB(0x3C5,0x18);
++ break;
++ }
++
++ switch (pTrident->TVChipset)
++ {
++ case 1:
++ /* set TVX registers */
++ for (i=0; i < TVX_REG_NUM; i++ )
++ {
++ smbus_write(pScrn,TVX_VT1621_Table[idx][TVX_CRTC_NUM+i], i, TVX_VT1621_PORT);
++ }
++ break;
++ case 2:
++ for (i=0; i<TV_CH7005C_TVREG_NUM; i++)
++ {
++ smbus_write(pScrn,TV_CH7005C_Table[idx][TV_CH7005C_CRTC_NUM+i], TV_CH7005C_RegIdx[i], TV_CH7005C_PORT);
++ }
++ break;
++ }
++
++ /*VIA_DumpReg(pScrn);*/
++
++ /* protect */
++ OUTB(0x3C4, 0x11);
++ OUTB(0x3C5, protect);
++}
++void VIA_DumpReg(ScrnInfoPtr pScrn)
++{
++ TRIDENTPtr pTrident=TRIDENTPTR(pScrn);
++ int i,j;
++ unsigned char bTmp;
++ unsigned char protect;
++
++ /* Unprotect */
++ OUTB(0x3C4, 0x11);
++ protect = INB(0x3C5);
++ OUTB(0x3C5, 0x92);
++
++ /* SR */
++ for (i=0; i<16; i++)
++ {
++ for (j=0; j<16; j++)
++ {
++ OUTB(0x3c4,(16*i+j));
++ bTmp=INB(0x3c5);
++
++ ErrorF("SR%02x=%02x ",(16*i+j),bTmp);
++ }
++ ErrorF("\n");
++ }
++ ErrorF("\n");
++ /* CR */
++ for (i=0; i<16; i++)
++ {
++ for (j=0; j<16; j++)
++ {
++ OUTB(0x3d4,(16*i+j));
++ bTmp=INB(0x3d5);
++
++ ErrorF("CR%02x=%02x ",(16*i+j),bTmp);
++ }
++ ErrorF("\n");
++ }
++ ErrorF("\n");
++ /* GR */
++ for (i=0; i<16; i++)
++ {
++ for (j=0; j<16; j++)
++ {
++ OUTB(0x3ce,(16*i+j));
++ bTmp=INB(0x3cf);
++
++ ErrorF("GR%02x=%02x ",(16*i+j),bTmp);
++ }
++ ErrorF("\n");
++ }
++ ErrorF("\n");
++ /* SM */
++ for (i=0; i<16; i++)
++ {
++ for (j=0; j<16; j++)
++ {
++ if (pTrident->TVChipset==2)
++ bTmp=smbus_read(pScrn,(16*i+j),TV_CH7005C_PORT);
++ else bTmp=smbus_read(pScrn,(16*i+j),TVX_VT1621_PORT);
++ ErrorF("SM%02x=%02x ",(16*i+j),bTmp);
++ }
++ ErrorF("\n");
++ }
++ ErrorF("\n");
++ /* protect */
++ OUTB(0x3C4, 0x11);
++ OUTB(0x3C5, protect);
++
++}
+Index: xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c
+===================================================================
+RCS file: /cvs/xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c,v
+retrieving revision 1.31
+retrieving revision 1.39
+diff -u -r1.31 -r1.39
+--- xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c 22 Dec 2002 18:54:43 -0000 1.31
++++ xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c 7 Jul 2003 22:43:51 -0000 1.39
+@@ -21,7 +21,7 @@
+ *
+ * Author: Alan Hourihane, alanh@fairlite.demon.co.uk
+ */
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c,v 1.31 2002/12/22 18:54:43 alanh Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c,v 1.39 2003/07/07 22:43:51 alanh Exp $ */
+
+ #include "xf86.h"
+ #include "xf86_OSproc.h"
+@@ -67,7 +67,7 @@
+ static void tridentSetVideoParameters(TRIDENTPtr pTrident, int brightness,
+ int saturation, int hue);
+ void tridentFixFrame(ScrnInfoPtr pScrn, int *fixFrame);
+-static void WaitForSync(ScrnInfoPtr pScrn);
++static void WaitForVBlank(ScrnInfoPtr pScrn);
+
+ #define MAKE_ATOM(a) MakeAtom(a, sizeof(a) - 1, TRUE)
+
+@@ -255,6 +255,9 @@
+ int red, green, blue;
+ int tmp;
+
++ WaitForVBlank(pScrn);
++ OUTW(vgaIOBase + 4, 0x848E);
++
+ if (pTrident->Chipset >= CYBER9388) {
+ OUTW(vgaIOBase + 4, 0x80B9);
+ OUTW(vgaIOBase + 4, 0x00BE);
+@@ -326,8 +329,6 @@
+ tridentSetVideoParameters(pTrident,pPriv->Brightness,pPriv->Saturation,
+ pPriv->HUE);
+ }
+-
+- OUTW(vgaIOBase + 4, 0x848E);
+ }
+
+
+@@ -407,37 +408,6 @@
+ }
+
+
+-static Bool
+-RegionsEqual(RegionPtr A, RegionPtr B)
+-{
+- int *dataA, *dataB;
+- int num;
+-
+- num = REGION_NUM_RECTS(A);
+- if(num != REGION_NUM_RECTS(B))
+- return FALSE;
+-
+- if((A->extents.x1 != B->extents.x1) ||
+- (A->extents.x2 != B->extents.x2) ||
+- (A->extents.y1 != B->extents.y1) ||
+- (A->extents.y2 != B->extents.y2))
+- return FALSE;
+-
+- dataA = (int*)REGION_RECTS(A);
+- dataB = (int*)REGION_RECTS(B);
+-
+- while(num--) {
+- if((dataA[0] != dataB[0]) || (dataA[1] != dataB[1]))
+- return FALSE;
+- dataA += 2;
+- dataB += 2;
+- }
+-
+- return TRUE;
+-}
+-
+-#define DummyScreen screenInfo.screens[0]
+-
+ static void
+ TRIDENTStopVideo(ScrnInfoPtr pScrn, pointer data, Bool shutdown)
+ {
+@@ -449,9 +419,9 @@
+
+ if(shutdown) {
+ if(pPriv->videoStatus & CLIENT_VIDEO_ON) {
+- OUTW(vgaIOBase + 4, 0x0091);
+- WaitForSync(pScrn);
+- OUTW(vgaIOBase + 4, 0x848E);
++ WaitForVBlank(pScrn);
++ OUTW(vgaIOBase + 4, 0x848E);
++ OUTW(vgaIOBase + 4, 0x0091);
+ }
+ if(pPriv->linear) {
+ xf86FreeOffscreenLinear(pPriv->linear);
+@@ -616,55 +586,6 @@
+ }
+
+
+-static void
+-TRIDENTCopyData(
+- unsigned char *src,
+- unsigned char *dst,
+- int srcPitch,
+- int dstPitch,
+- int h,
+- int w
+-){
+- w <<= 1;
+- while(h--) {
+- memcpy(dst, src, w);
+- src += srcPitch;
+- dst += dstPitch;
+- }
+-}
+-
+-static void
+-TRIDENTCopyMungedData(
+- unsigned char *src1,
+- unsigned char *src2,
+- unsigned char *src3,
+- unsigned char *dst1,
+- int srcPitch,
+- int srcPitch2,
+- int dstPitch,
+- int h,
+- int w
+-){
+- CARD32 *dst = (CARD32*)dst1;
+- int i, j;
+-
+- dstPitch >>= 2;
+- w >>= 1;
+-
+- for(j = 0; j < h; j++) {
+- for(i = 0; i < w; i++) {
+- dst[i] = src1[i << 1] | (src1[(i << 1) + 1] << 16) |
+- (src3[i] << 8) | (src2[i] << 24);
+- }
+- dst += dstPitch;
+- src1 += srcPitch;
+- if(j & 1) {
+- src2 += srcPitch2;
+- src3 += srcPitch2;
+- }
+- }
+-}
+-
+ static FBLinearPtr
+ TRIDENTAllocateMemory(
+ ScrnInfoPtr pScrn,
+@@ -852,7 +773,7 @@
+ } else {
+ OUTW(0x3C4, 0x0097); /* 1x line buffers */
+ }
+- OUTW(vgaIOBase + 4, 0x8097);
++ OUTW(vgaIOBase + 4, 0x0097);
+ OUTW(vgaIOBase + 4, 0x00BA);
+ OUTW(vgaIOBase + 4, 0x00BB);
+ OUTW(vgaIOBase + 4, 0xFFBC);
+@@ -960,23 +881,23 @@
+ offset3 = tmp;
+ }
+ nlines = ((((y2 + 0xffff) >> 16) + 1) & ~1) - top;
+- TRIDENTCopyMungedData(buf + (top * srcPitch) + (left >> 1),
+- buf + offset2, buf + offset3, dst_start,
+- srcPitch, srcPitch2, dstPitch, nlines, npixels);
++ xf86XVCopyYUV12ToPacked(buf + (top * srcPitch) + (left >> 1),
++ buf + offset2, buf + offset3, dst_start,
++ srcPitch, srcPitch2, dstPitch, nlines, npixels);
+ break;
+ case FOURCC_UYVY:
+ case FOURCC_YUY2:
+ default:
+ buf += (top * srcPitch) + left;
+ nlines = ((y2 + 0xffff) >> 16) - top;
+- TRIDENTCopyData(buf, dst_start, srcPitch, dstPitch, nlines, npixels);
++ xf86XVCopyPacked(buf, dst_start, srcPitch, dstPitch, nlines, npixels);
+ break;
+ }
+
+ /* update cliplist */
+- if(!RegionsEqual(&pPriv->clip, clipBoxes)) {
++ if(!REGION_EQUAL(pScrn->pScreen, &pPriv->clip, clipBoxes)) {
+ /* update cliplist */
+- REGION_COPY(pScreen, &pPriv->clip, clipBoxes);
++ REGION_COPY(pScrn->pScreen, &pPriv->clip, clipBoxes);
+ xf86XVFillKeyHelper(pScrn->pScreen, pPriv->colorKey, clipBoxes);
+ }
+
+@@ -1101,10 +1022,9 @@
+ if(pPriv->isOn) {
+ TRIDENTPtr pTrident = TRIDENTPTR(surface->pScrn);
+ int vgaIOBase = VGAHWPTR(surface->pScrn)->IOBase;
+-
+- OUTW(vgaIOBase + 4, 0x0091);
+- WaitForSync(surface->pScrn);
++ WaitForVBlank(surface->pScrn);
+ OUTW(vgaIOBase + 4, 0x848E);
++ OUTW(vgaIOBase + 4, 0x0091);
+ pPriv->isOn = FALSE;
+ }
+
+@@ -1249,9 +1169,9 @@
+ if(pPriv->videoStatus & TIMER_MASK) {
+ if(pPriv->videoStatus & OFF_TIMER) {
+ if(pPriv->offTime < time) {
+- OUTW(vgaIOBase + 4, 0x0091);
+- WaitForSync(pScrn);
++ WaitForVBlank(pScrn);
+ OUTW(vgaIOBase + 4, 0x848E);
++ OUTW(vgaIOBase + 4, 0x0091);
+ pPriv->videoStatus = FREE_TIMER;
+ pPriv->freeTime = time + FREE_DELAY;
+ }
+@@ -1369,7 +1289,10 @@
+ case CYBERBLADEI7D:
+ case CYBERBLADEI1:
+ case CYBERBLADEI1D:
+- pTrident->hsync -= 8;
++ if (pScrn->depth == 24)
++ pTrident->hsync -= 7;
++ else
++ pTrident->hsync -= 6;
+ break;
+ case CYBERBLADEAI1:
+ pTrident->hsync -= 7;
+@@ -1399,10 +1322,18 @@
+ }
+
+ static void
+-WaitForSync(ScrnInfoPtr pScrn)
++WaitForVBlank(ScrnInfoPtr pScrn)
+ {
+ register vgaHWPtr hwp = VGAHWPTR(pScrn);
+
++ /* We have to wait for one full VBlank to let the video engine start/stop.
++ * So the first may be waiting for too short a period as it may already
++ * be part way through the video frame. So we wait a second time to ensure
++ * full vblank has passed.
++ * - Alan.
++ */
++ while (!(hwp->readST01(hwp)&0x8)) {};
++ while (hwp->readST01(hwp)&0x8) {};
+ while (!(hwp->readST01(hwp)&0x8)) {};
+ while (hwp->readST01(hwp)&0x8) {};
+ }
Property changes on: trunk/debian/patches/000_stolen_from_HEAD_trident_driver.diff
___________________________________________________________________
Name: svn:keywords
+ Id
Modified: trunk/debian/patches/030_Xserver_and_driver_region_primitive_fixups.diff
===================================================================
--- trunk/debian/patches/030_Xserver_and_driver_region_primitive_fixups.diff 2004-08-10 23:53:36 UTC (rev 1724)
+++ trunk/debian/patches/030_Xserver_and_driver_region_primitive_fixups.diff 2004-08-11 01:28:34 UTC (rev 1725)
@@ -9,6 +9,8 @@
Revert same REGION_EQUAL change in nv driver.
+Revert same REGION_EQUAL change in trident driver.
+
--- xc/programs/Xserver/hw/xfree86/drivers/ati/atimach64xv.c~ 2004-05-05 17:08:17.000000000 -0500
+++ xc/programs/Xserver/hw/xfree86/drivers/ati/atimach64xv.c 2004-05-07 12:43:34.000000000 -0500
@@ -34,6 +34,38 @@
@@ -212,6 +214,52 @@
{
/* we always paint V4L's color key */
if(!pPriv->grabbedByV4L)
+--- xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c~ 2004-08-09 20:31:32.000000000 -0500
++++ xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c 2004-08-09 20:34:03.000000000 -0500
+@@ -407,6 +407,34 @@
+ return adapt;
+ }
+
++static Bool
++RegionsEqual(RegionPtr A, RegionPtr B)
++{
++ int *dataA, *dataB;
++ int num;
++
++ num = REGION_NUM_RECTS(A);
++ if(num != REGION_NUM_RECTS(B))
++ return FALSE;
++
++ if((A->extents.x1 != B->extents.x1) ||
++ (A->extents.x2 != B->extents.x2) ||
++ (A->extents.y1 != B->extents.y1) ||
++ (A->extents.y2 != B->extents.y2))
++ return FALSE;
++
++ dataA = (int*)REGION_RECTS(A);
++ dataB = (int*)REGION_RECTS(B);
++
++ while(num--) {
++ if((dataA[0] != dataB[0]) || (dataA[1] != dataB[1]))
++ return FALSE;
++ dataA += 2;
++ dataB += 2;
++ }
++
++ return TRUE;
++}
+
+ static void
+ TRIDENTStopVideo(ScrnInfoPtr pScrn, pointer data, Bool shutdown)
+@@ -895,7 +923,7 @@
+ }
+
+ /* update cliplist */
+- if(!REGION_EQUAL(pScrn->pScreen, &pPriv->clip, clipBoxes)) {
++ if(!RegionsEqual(&pPriv->clip, clipBoxes)) {
+ /* update cliplist */
+ REGION_COPY(pScrn->pScreen, &pPriv->clip, clipBoxes);
+ xf86XVFillKeyHelper(pScrn->pScreen, pPriv->colorKey, clipBoxes);
--- xc/programs/Xserver/include/regionstr.h~ 2004-05-05 17:21:32.000000000 -0500
+++ xc/programs/Xserver/include/regionstr.h 2004-05-05 17:22:02.000000000 -0500
@@ -285,10 +285,21 @@
Modified: trunk/debian/patches/911_debian_XF86Config_to_XF86Config-4.diff
===================================================================
--- trunk/debian/patches/911_debian_XF86Config_to_XF86Config-4.diff 2004-08-10 23:53:36 UTC (rev 1724)
+++ trunk/debian/patches/911_debian_XF86Config_to_XF86Config-4.diff 2004-08-11 01:28:34 UTC (rev 1725)
@@ -887,18 +887,18 @@
.SH AUTHORS
Authors include: ...
diff -urN xc/programs/Xserver/hw/xfree86~/drivers/trident/trident.man xc/programs/Xserver/hw/xfree86/drivers/trident/trident.man
---- xc/programs/Xserver/hw/xfree86~/drivers/trident/trident.man 2003-01-06 05:15:26.000000000 -0500
-+++ xc/programs/Xserver/hw/xfree86/drivers/trident/trident.man 2004-08-02 17:24:09.000000000 -0500
+--- xc/programs/Xserver/hw/xfree86~/drivers/trident/trident.man 2004-08-10 17:18:39.000000000 -0500
++++ xc/programs/Xserver/hw/xfree86/drivers/trident/trident.man 2004-08-10 17:19:26.000000000 -0500
@@ -41,7 +41,7 @@
8900C, 8900D, 9000, 9200CXr, Cyber9320, 9400CXi, 9440AGi
- These cards have been ported but need furthur testing and may not work.
+ These cards have been ported but need further testing and may not work.
.SH CONFIGURATION DETAILS
-Please refer to XF86Config(__filemansuffix__) for general configuration
+Please refer to XF86Config-4(__filemansuffix__) for general configuration
details. This section only covers configuration details specific to this
driver.
.PP
-@@ -120,6 +120,6 @@
+@@ -128,6 +128,6 @@
Default: gamma and brightness control is turned off.
Note: This is not supported on all chipsets.
.SH "SEE ALSO"
Reply to: