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 <[EMAIL PROTECTED]> Tue, 10 Aug 2004 17:56:17 -0500 + -- Branden Robinson <[EMAIL PROTECTED]> 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, [EMAIL PROTECTED] - */ --/* $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, <[EMAIL PROTECTED]> + */ +-/* $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, [EMAIL PROTECTED] + */ +-/* $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, [EMAIL PROTECTED], 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, [EMAIL PROTECTED] + */ +-/* $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"