.cvsignore | 19 - .gitignore | 20 + configure.ac | 14 man/.cvsignore | 2 man/.gitignore | 2 man/Makefile.am | 1 src/.cvsignore | 6 src/.gitignore | 6 src/tdfx.h | 67 +++ src/tdfx_accel.c | 1 src/tdfx_dga.c | 1 src/tdfx_dri.c | 11 src/tdfx_dri.h | 1 src/tdfx_dripriv.h | 1 src/tdfx_driver.c | 506 +++++++++++++++++++++------ src/tdfx_hwcurs.c | 1 src/tdfx_io.c | 1 src/tdfx_priv.c | 1 src/tdfx_priv.h | 1 src/tdfx_sli.c | 963 ++++++++++++++++++++++++++--------------------------- src/tdfx_video.c | 1 src/tdfxdefs.h | 23 + 22 files changed, 1011 insertions(+), 638 deletions(-)
New commits: commit fdff22e2372635f47587f5cdaf888e26d913ee41 Author: Adam Jackson <[EMAIL PROTECTED]> Date: Wed Mar 19 15:39:11 2008 -0400 tdfx 1.4.0 diff --git a/configure.ac b/configure.ac index 9069993..6177e06 100644 --- a/configure.ac +++ b/configure.ac @@ -22,7 +22,7 @@ AC_PREREQ(2.57) AC_INIT([xf86-video-tdfx], - 1.3.0, + 1.4.0, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xf86-video-tdfx) commit e270c5baeb00f45abacba2b2f4e82505c339e984 Author: Adam Jackson <[EMAIL PROTECTED]> Date: Wed Mar 19 15:37:46 2008 -0400 Death to RCS tags. diff --git a/src/tdfx.h b/src/tdfx.h index 5f09401..15f6d11 100644 --- a/src/tdfx.h +++ b/src/tdfx.h @@ -5,7 +5,6 @@ Copyright: 1998,1999 */ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfx.h,v 1.26 2002/01/25 21:56:11 tsi Exp $ */ #ifndef _TDFX_H_ #define _TDFX_H_ diff --git a/src/tdfx_accel.c b/src/tdfx_accel.c index a9a7dbf..6191aeb 100644 --- a/src/tdfx_accel.c +++ b/src/tdfx_accel.c @@ -1,4 +1,3 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_accel.c,v 1.19 2001/04/05 21:29:17 dawes Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" diff --git a/src/tdfx_dga.c b/src/tdfx_dga.c index ff872ed..f88c09b 100644 --- a/src/tdfx_dga.c +++ b/src/tdfx_dga.c @@ -1,4 +1,3 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_dga.c,v 1.5 2001/01/13 00:06:29 mvojkovi Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" diff --git a/src/tdfx_dri.c b/src/tdfx_dri.c index 9548c00..220e910 100644 --- a/src/tdfx_dri.c +++ b/src/tdfx_dri.c @@ -1,4 +1,3 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_dri.c,v 1.25 2003/02/08 21:26:59 dawes Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" diff --git a/src/tdfx_dri.h b/src/tdfx_dri.h index 53ad09e..ca78293 100644 --- a/src/tdfx_dri.h +++ b/src/tdfx_dri.h @@ -1,4 +1,3 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_dri.h,v 1.4 2001/03/03 22:41:34 tsi Exp $ */ #ifndef _TDFX_DRI_ #define _TDFX_DRI_ diff --git a/src/tdfx_dripriv.h b/src/tdfx_dripriv.h index 69f0d04..322633c 100644 --- a/src/tdfx_dripriv.h +++ b/src/tdfx_dripriv.h @@ -1,4 +1,3 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_dripriv.h,v 1.2 1999/12/14 01:33:50 robin Exp $ */ #ifndef _TDFX_DRIPRIV_H_ #define _TDFX_DRIPRIV_H_ diff --git a/src/tdfx_driver.c b/src/tdfx_driver.c index 1b51124..83f147a 100644 --- a/src/tdfx_driver.c +++ b/src/tdfx_driver.c @@ -35,7 +35,6 @@ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. **************************************************************************/ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_driver.c,v 1.104tsi Exp $ */ /* * Authors: diff --git a/src/tdfx_hwcurs.c b/src/tdfx_hwcurs.c index 3fd86b6..d5445a6 100644 --- a/src/tdfx_hwcurs.c +++ b/src/tdfx_hwcurs.c @@ -1,4 +1,3 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_hwcurs.c,v 1.4 2001/04/05 21:29:17 dawes Exp $ */ /* Voodoo Banshee driver version 1.0.2 diff --git a/src/tdfx_io.c b/src/tdfx_io.c index 190d3ae..173e772 100644 --- a/src/tdfx_io.c +++ b/src/tdfx_io.c @@ -24,7 +24,6 @@ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. **************************************************************************/ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_io.c,v 1.6 2000/08/25 16:25:36 tsi Exp $ */ /* * Authors: diff --git a/src/tdfx_priv.c b/src/tdfx_priv.c index 74c20ed..bffb20f 100644 --- a/src/tdfx_priv.c +++ b/src/tdfx_priv.c @@ -1,4 +1,3 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_priv.c,v 1.15 2001/04/05 21:29:17 dawes Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" diff --git a/src/tdfx_priv.h b/src/tdfx_priv.h index 28f72f3..e18d9df 100644 --- a/src/tdfx_priv.h +++ b/src/tdfx_priv.h @@ -1,4 +1,3 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_priv.h,v 1.11 2001/06/05 15:54:15 alanh Exp $ */ #ifndef _TDFX_FIFO_H_ diff --git a/src/tdfx_sli.c b/src/tdfx_sli.c index e7379fd..416edca 100644 --- a/src/tdfx_sli.c +++ b/src/tdfx_sli.c @@ -1,4 +1,3 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_sli.c,v 1.6 2000/12/15 15:19:35 dawes Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" diff --git a/src/tdfx_video.c b/src/tdfx_video.c index 5b7c7a3..22be0d3 100644 --- a/src/tdfx_video.c +++ b/src/tdfx_video.c @@ -1,4 +1,3 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_video.c,v 1.20tsi Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" diff --git a/src/tdfxdefs.h b/src/tdfxdefs.h index c661d64..c9c3ab5 100644 --- a/src/tdfxdefs.h +++ b/src/tdfxdefs.h @@ -1,4 +1,3 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfxdefs.h,v 1.14 2003/06/18 16:17:41 eich Exp $ */ /* Voodoo Banshee driver version 1.0.1 commit b838b854e96c388081c0ae52320a849645f547c5 Author: Matthieu Herrb <[EMAIL PROTECTED]> Date: Sun Mar 9 00:00:33 2008 +0100 Makefile.am: nuke RCS Id diff --git a/man/Makefile.am b/man/Makefile.am index bf7ec17..f0eb29b 100644 --- a/man/Makefile.am +++ b/man/Makefile.am @@ -1,4 +1,3 @@ -# $Id$ # # Copyright 2005 Sun Microsystems, Inc. All rights reserved. # commit 8bbace5deb7b86c481ea3b0f764e8a6b879c5f7f Author: Dave Airlie <[EMAIL PROTECTED]> Date: Wed Feb 27 10:13:01 2008 +1000 update tdfx to use proper pciaccess detection diff --git a/configure.ac b/configure.ac index 77a8b9d..9069993 100644 --- a/configure.ac +++ b/configure.ac @@ -51,9 +51,6 @@ AC_ARG_ENABLE(dri, AC_HELP_STRING([--disable-dri], [Disable DRI support [[default=auto]]]), [DRI="$enableval"], [DRI=auto]) -AC_ARG_ENABLE(pciaccess, AS_HELP_STRING([--enable-pciaccess], - [Enable use of libpciaccess (default: disabled)]), - [PCIACCESS=$enableval], [PCIACCESS=no]) # Checks for extensions XORG_DRIVER_CHECK_EXT(RANDR, randrproto) @@ -65,14 +62,13 @@ XORG_DRIVER_CHECK_EXT(DPMSExtension, xextproto) PKG_CHECK_MODULES(XORG, [xorg-server >= 1.0.99.901 xproto fontsproto $REQUIRED_MODULES]) sdkdir=$(pkg-config --variable=sdkdir xorg-server) -AM_CONDITIONAL(PCIACCESS, [test "x$PCIACCESS" = xyes]) -if test "x$PCIACCESS" = xyes; then - AC_DEFINE(PCIACCESS, 1, [Use libpciaccess]) - PKG_CHECK_MODULES([PCIACCESS], [pciaccess >= 0.7.0]) - XORG_CFLAGS="$XORG_CFLAGS $PCIACCESS_CFLAGS" -fi - # Checks for libraries. +SAVE_CPPFLAGS="$CPPFLAGS" +CPPFLAGS="$CPPFLAGS $XORG_CFLAGS" +AC_CHECK_DECL(XSERVER_LIBPCIACCESS, + [XSERVER_LIBPCIACCESS=yes],[XSERVER_LIBPCIACCESS=no], + [#include "xorg-server.h"]) +CPPFLAGS="$SAVE_CPPFLAGS" # Checks for header files. AC_HEADER_STDC @@ -105,6 +101,12 @@ if test "$DRI" = yes; then AC_DEFINE(XF86DRI_DEVEL,1,[Enable developmental DRI driver support]) fi +if test "x$XSERVER_LIBPCIACCESS" = xyes; then + PKG_CHECK_MODULES([PCIACCESS], [pciaccess >= 0.8.0]) + XORG_CFLAGS="$XORG_CFLAGS $PCIACCESS_CFLAGS" +fi +AM_CONDITIONAL(XSERVER_LIBPCIACCESS, test "x$XSERVER_LIBPCIACCESS" = xyes) + AC_SUBST([DRI_CFLAGS]) AC_SUBST([XORG_CFLAGS]) AC_SUBST([moduledir]) diff --git a/src/tdfx.h b/src/tdfx.h index 0663979..5f09401 100644 --- a/src/tdfx.h +++ b/src/tdfx.h @@ -38,7 +38,7 @@ /* Macros to aid source compatibilty between pci-rework and "classic" builds. */ -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS #include <pciaccess.h> #define DEVICE_ID(p) (p)->device_id @@ -171,7 +171,7 @@ typedef struct TextureData_t { #define MAXCHIPS 4 -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS enum tdfx_chips { Banshee = 0, Voodoo3_2000, @@ -183,7 +183,7 @@ enum tdfx_chips { #endif typedef struct _TDFXRec { -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS enum tdfx_chips match_id; void *MMIOBase[MAXCHIPS]; void *FbBase; @@ -200,7 +200,7 @@ typedef struct _TDFXRec { int maxClip; int MaxClock; int ChipType; -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS struct pci_device *PciInfo[MAXCHIPS]; #else pciVideoPtr PciInfo; @@ -209,7 +209,7 @@ typedef struct _TDFXRec { unsigned long MMIOAddr[MAXCHIPS]; EntityInfoPtr pEnt; int numChips; -#ifndef PCIACCESS +#ifndef XSERVER_PCIACCESS PCITAG PciTag[MAXCHIPS]; #endif Bool Primary; diff --git a/src/tdfx_dri.c b/src/tdfx_dri.c index eb556bb..9548c00 100644 --- a/src/tdfx_dri.c +++ b/src/tdfx_dri.c @@ -345,7 +345,7 @@ Bool TDFXDRIScreenInit(ScreenPtr pScreen) pDRIInfo->drmDriverName = TDFXKernelDriverName; pDRIInfo->clientDriverName = TDFXClientDriverName; -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS pDRIInfo->busIdString = DRICreatePCIBusID(pTDFX->PciInfo[0]); #else if (xf86LoaderCheckSymbol("DRICreatePCIBusID")) { @@ -518,7 +518,7 @@ TDFXDRIFinishScreenInit(ScreenPtr pScreen) pTDFX->pDRIInfo->driverSwapMethod = DRI_HIDE_X_CONTEXT; pTDFXDRI=(TDFXDRIPtr)pTDFX->pDRIInfo->devPrivate; -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS pTDFXDRI->deviceID = DEVICE_ID(pTDFX->PciInfo[0]); #else pTDFXDRI->deviceID = DEVICE_ID(pTDFX->PciInfo); diff --git a/src/tdfx_driver.c b/src/tdfx_driver.c index 6cc6c89..1b51124 100644 --- a/src/tdfx_driver.c +++ b/src/tdfx_driver.c @@ -112,7 +112,7 @@ static const OptionInfoRec * TDFXAvailableOptions(int chipid, int busid); static void TDFXIdentify(int flags); /* Identify if there is any hardware present that I know how to drive. */ -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS static Bool TDFXPciProbe(DriverPtr drv, int entity_num, struct pci_device *dev, intptr_t match_data); #else @@ -150,7 +150,7 @@ static void TDFXBlockHandler(int, pointer, pointer, pointer); static void TDFXDisplayPowerManagementSet(ScrnInfoPtr pScrn, int PowerManagermentMode, int flags); -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS #define TDFX_DEVICE_MATCH(d, sub, i) \ { 0x121A, (d), PCI_MATCH_ANY, (sub), 0, 0, (i) } @@ -181,7 +181,7 @@ _X_EXPORT DriverRec TDFX = { TDFX_VERSION, TDFX_DRIVER_NAME, TDFXIdentify, -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS NULL, #else TDFXProbe, @@ -192,7 +192,7 @@ _X_EXPORT DriverRec TDFX = { 0, NULL, -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS tdfx_device_match, TDFXPciProbe #endif @@ -206,7 +206,7 @@ static SymTabRec TDFXChipsets[] = { { -1, NULL } }; -#ifndef PCIACCESS +#ifndef XSERVER_LIBPCIACCESS static PciChipsets TDFXPciChipsets[] = { { PCI_CHIP_BANSHEE, PCI_CHIP_BANSHEE, RES_SHARED_VGA }, { PCI_CHIP_VOODOO3, PCI_CHIP_VOODOO3, RES_SHARED_VGA }, @@ -444,7 +444,7 @@ TDFXProbeDDC(ScrnInfoPtr pScrn, int index) } } -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS /** * TDFXPciProbe * @@ -689,7 +689,7 @@ static int TDFXSizeToCfg(int size) } } -#ifndef PCIACCESS +#ifndef XSERVER_LIBPCIACCESS static void TDFXFindChips(ScrnInfoPtr pScrn, pciVideoPtr match) { @@ -888,7 +888,7 @@ TDFXPreInit(ScrnInfoPtr pScrn, int flags) MessageType from; int flags24; rgb defaultWeight = {0, 0, 0}; -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS struct pci_device *match; #else pciVideoPtr match; @@ -898,7 +898,7 @@ TDFXPreInit(ScrnInfoPtr pScrn, int flags) TDFXTRACE("TDFXPreInit start\n"); if (pScrn->numEntities != 1) return FALSE; -#ifndef PCIACCESS +#ifndef XSERVER_LIBPCIACCESS /* Allocate driverPrivate */ pTDFX = TDFXGetRec(pScrn); if (pTDFX == NULL) { @@ -955,7 +955,7 @@ TDFXPreInit(ScrnInfoPtr pScrn, int flags) #endif #endif -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS match = pTDFX->PciInfo[0]; #else match=pTDFX->PciInfo=xf86GetPciInfoForEntity(pTDFX->pEnt->index); @@ -1150,7 +1150,7 @@ TDFXPreInit(ScrnInfoPtr pScrn, int flags) pTDFX->MaxClock = pTDFX->pEnt->device->dacSpeeds[0]; from = X_CONFIG; } else { -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS pTDFX->MaxClock = MaxClocks[pTDFX->match_id]; #else switch (pTDFX->ChipType) { @@ -1354,7 +1354,7 @@ TDFXMapMem(ScrnInfoPtr pScrn) { int i; TDFXPtr pTDFX = TDFXPTR(pScrn); -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS int err; #else const int mmioFlags = VIDMEM_MMIO | VIDMEM_READSIDEEFFECT; @@ -1362,7 +1362,7 @@ TDFXMapMem(ScrnInfoPtr pScrn) TDFXTRACE("TDFXMapMem start\n"); -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS /* FIXME: I'm not convinced that this is correct for SLI cards, but I * FIXME: don't have any such hardware to test. */ @@ -1420,7 +1420,7 @@ TDFXUnmapMem(ScrnInfoPtr pScrn) TDFXTRACE("TDFXUnmapMem start\n"); pTDFX = TDFXPTR(pScrn); -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS pci_device_unmap_region(pTDFX->PciInfo[0], 0); pci_device_unmap_region(pTDFX->PciInfo[0], 1); @@ -1798,7 +1798,7 @@ TDFXInitWithBIOSData(ScrnInfoPtr pScrn) if (!bios) return FALSE; -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS pci_device_read_rom(pTDFX->PciInfo[0], bios); #else if (!xf86ReadPciBIOS(0, pTDFX->PciTag[0], 1, bios, T_B_SIZE)) { commit 463f0590fdce3cfa0e74a6769ccf5f32dad33cbc Author: James Cloos <[EMAIL PROTECTED]> Date: Mon Sep 3 05:52:46 2007 -0400 Add *~ to .gitignore to skip patch/emacs droppings diff --git a/.gitignore b/.gitignore index fb1befd..2df4a8d 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,4 @@ libtool ltmain.sh missing stamp-h1 +*~ commit 36ee971310cd4536291829a1021ab8853cf62e9c Author: James Cloos <[EMAIL PROTECTED]> Date: Thu Aug 23 19:25:59 2007 -0400 Rename .cvsignore to .gitignore diff --git a/.cvsignore b/.cvsignore deleted file mode 100644 index fb1befd..0000000 --- a/.cvsignore +++ /dev/null @@ -1,19 +0,0 @@ -Makefile -Makefile.in -*.la -*.lo -aclocal.m4 -autom4te.cache -config.guess -config.h -config.h.in -config.log -config.status -config.sub -configure -depcomp -install-sh -libtool -ltmain.sh -missing -stamp-h1 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fb1befd --- /dev/null +++ b/.gitignore @@ -0,0 +1,19 @@ +Makefile +Makefile.in +*.la +*.lo +aclocal.m4 +autom4te.cache +config.guess +config.h +config.h.in +config.log +config.status +config.sub +configure +depcomp +install-sh +libtool +ltmain.sh +missing +stamp-h1 diff --git a/man/.cvsignore b/man/.cvsignore deleted file mode 100644 index 282522d..0000000 --- a/man/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile -Makefile.in diff --git a/man/.gitignore b/man/.gitignore new file mode 100644 index 0000000..282522d --- /dev/null +++ b/man/.gitignore @@ -0,0 +1,2 @@ +Makefile +Makefile.in diff --git a/src/.cvsignore b/src/.cvsignore deleted file mode 100644 index 9730646..0000000 --- a/src/.cvsignore +++ /dev/null @@ -1,6 +0,0 @@ -.deps -.libs -Makefile -Makefile.in -*.la -*.lo diff --git a/src/.gitignore b/src/.gitignore new file mode 100644 index 0000000..9730646 --- /dev/null +++ b/src/.gitignore @@ -0,0 +1,6 @@ +.deps +.libs +Makefile +Makefile.in +*.la +*.lo commit 7f733531e54e455f9c27555c7552184f9da81f41 Author: Brice Goglin <[EMAIL PROTECTED]> Date: Tue Aug 7 11:57:02 2007 +0200 TDFX_*_VERSION using PACKAGE_VERSION_* diff --git a/src/tdfx.h b/src/tdfx.h index d1c9081..0663979 100644 --- a/src/tdfx.h +++ b/src/tdfx.h @@ -32,9 +32,9 @@ #define TDFX_VERSION 4000 #define TDFX_NAME "TDFX" #define TDFX_DRIVER_NAME "tdfx" -#define TDFX_MAJOR_VERSION 1 -#define TDFX_MINOR_VERSION 3 -#define TDFX_PATCHLEVEL 0 +#define TDFX_MAJOR_VERSION PACKAGE_VERSION_MAJOR +#define TDFX_MINOR_VERSION PACKAGE_VERSION_MINOR +#define TDFX_PATCHLEVEL PACKAGE_VERSION_PATCHLEVEL /* Macros to aid source compatibilty between pci-rework and "classic" builds. */ commit 673c665c02f02e13d57303f817702177a170e80d Author: Ian Romanick <[EMAIL PROTECTED]> Date: Fri Mar 30 08:00:12 2007 -0700 Initial pass at porting driver to pci-rework. DOES NOT WORK. This is my initial pass at porting xf86-video-tdfx to the pci-rework interfaces. For reasons that I'm not able to understand, it doesn't quite work. It's clear that some piece of the hardware isn't being initialized properly, but, by comparing the old code to the new, it's not clear why. Does not impact the functionality of non-pci-rework builds. diff --git a/configure.ac b/configure.ac index 2bdc5a0..77a8b9d 100644 --- a/configure.ac +++ b/configure.ac @@ -51,6 +51,9 @@ AC_ARG_ENABLE(dri, AC_HELP_STRING([--disable-dri], [Disable DRI support [[default=auto]]]), [DRI="$enableval"], [DRI=auto]) +AC_ARG_ENABLE(pciaccess, AS_HELP_STRING([--enable-pciaccess], + [Enable use of libpciaccess (default: disabled)]), + [PCIACCESS=$enableval], [PCIACCESS=no]) # Checks for extensions XORG_DRIVER_CHECK_EXT(RANDR, randrproto) @@ -62,6 +65,13 @@ XORG_DRIVER_CHECK_EXT(DPMSExtension, xextproto) PKG_CHECK_MODULES(XORG, [xorg-server >= 1.0.99.901 xproto fontsproto $REQUIRED_MODULES]) sdkdir=$(pkg-config --variable=sdkdir xorg-server) +AM_CONDITIONAL(PCIACCESS, [test "x$PCIACCESS" = xyes]) +if test "x$PCIACCESS" = xyes; then + AC_DEFINE(PCIACCESS, 1, [Use libpciaccess]) + PKG_CHECK_MODULES([PCIACCESS], [pciaccess >= 0.7.0]) + XORG_CFLAGS="$XORG_CFLAGS $PCIACCESS_CFLAGS" +fi + # Checks for libraries. # Checks for header files. diff --git a/src/tdfx.h b/src/tdfx.h index 617a5e2..d1c9081 100644 --- a/src/tdfx.h +++ b/src/tdfx.h @@ -36,12 +36,40 @@ #define TDFX_MINOR_VERSION 3 #define TDFX_PATCHLEVEL 0 +/* Macros to aid source compatibilty between pci-rework and "classic" builds. + */ +#ifdef PCIACCESS +#include <pciaccess.h> + +#define DEVICE_ID(p) (p)->device_id + +#define PCI_READ_LONG(value, offset, card_index) \ + pci_device_cfg_read_u32(pTDFX->PciInfo[(card_index)], & (value), (offset)) + +#define PCI_WRITE_LONG(value, offset, card_index) \ + pci_device_cfg_write_u32(pTDFX->PciInfo[(card_index)], (value), (offset)) + +#define PCI_IO_BASE(p, region) \ + (p)->regions[region].base_addr + +#define PCI_MEM_BASE(p, region) \ + (p)->regions[region].base_addr +#else +#define DEVICE_ID(p) (p)->chipType + #define PCI_READ_LONG(value, offset, card_index) \ (value) = pciReadLong(pTDFX->PciTag[(card_index)], (offset)) #define PCI_WRITE_LONG(value, offset, card_index) \ pciWriteLong(pTDFX->PciTag[(card_index)], (offset), (value)) +#define PCI_IO_BASE(p, region) \ + (p)->ioBase[region] + +#define PCI_MEM_BASE(p, region) \ + (p)->memBase[region] +#endif + struct _TDFXRec; typedef struct _TDFXRec *TDFXPtr; @@ -143,10 +171,27 @@ typedef struct TextureData_t { #define MAXCHIPS 4 +#ifdef PCIACCESS +enum tdfx_chips { + Banshee = 0, + Voodoo3_2000, + Voodoo3_3000, + Voodoo3_Unknown, + Voodoo5, + MAX_VOODOO_CARDS +}; +#endif + typedef struct _TDFXRec { +#ifdef PCIACCESS + enum tdfx_chips match_id; + void *MMIOBase[MAXCHIPS]; + void *FbBase; +#else unsigned char *MMIOBase[MAXCHIPS]; unsigned char *FbBase; unsigned char *myFbBase; +#endif IOADDRESS PIOBase[MAXCHIPS]; long FbMapSize; int pixelFormat; @@ -155,12 +200,18 @@ typedef struct _TDFXRec { int maxClip; int MaxClock; int ChipType; +#ifdef PCIACCESS + struct pci_device *PciInfo[MAXCHIPS]; +#else pciVideoPtr PciInfo; +#endif unsigned long LinearAddr[MAXCHIPS]; unsigned long MMIOAddr[MAXCHIPS]; EntityInfoPtr pEnt; int numChips; +#ifndef PCIACCESS PCITAG PciTag[MAXCHIPS]; +#endif Bool Primary; int HasSGRAM; int PciCnt; diff --git a/src/tdfx_dri.c b/src/tdfx_dri.c index 765c716..eb556bb 100644 --- a/src/tdfx_dri.c +++ b/src/tdfx_dri.c @@ -345,6 +345,9 @@ Bool TDFXDRIScreenInit(ScreenPtr pScreen) pDRIInfo->drmDriverName = TDFXKernelDriverName; pDRIInfo->clientDriverName = TDFXClientDriverName; +#ifdef PCIACCESS + pDRIInfo->busIdString = DRICreatePCIBusID(pTDFX->PciInfo[0]); +#else if (xf86LoaderCheckSymbol("DRICreatePCIBusID")) { pDRIInfo->busIdString = DRICreatePCIBusID(pTDFX->PciInfo); } else { @@ -354,6 +357,7 @@ Bool TDFXDRIScreenInit(ScreenPtr pScreen) ((pciConfigPtr)pTDFX->PciInfo->thisCard)->devnum, ((pciConfigPtr)pTDFX->PciInfo->thisCard)->funcnum); } +#endif pDRIInfo->ddxDriverMajorVersion = TDFX_MAJOR_VERSION; pDRIInfo->ddxDriverMinorVersion = TDFX_MINOR_VERSION; pDRIInfo->ddxDriverPatchVersion = TDFX_PATCHLEVEL; @@ -514,7 +518,11 @@ TDFXDRIFinishScreenInit(ScreenPtr pScreen) pTDFX->pDRIInfo->driverSwapMethod = DRI_HIDE_X_CONTEXT; pTDFXDRI=(TDFXDRIPtr)pTDFX->pDRIInfo->devPrivate; - pTDFXDRI->deviceID=pTDFX->PciInfo->chipType; +#ifdef PCIACCESS + pTDFXDRI->deviceID = DEVICE_ID(pTDFX->PciInfo[0]); +#else + pTDFXDRI->deviceID = DEVICE_ID(pTDFX->PciInfo); +#endif pTDFXDRI->width=pScrn->virtualX; pTDFXDRI->height=pScrn->virtualY; pTDFXDRI->mem=pScrn->videoRam*1024; diff --git a/src/tdfx_driver.c b/src/tdfx_driver.c index 01fa34d..6cc6c89 100644 --- a/src/tdfx_driver.c +++ b/src/tdfx_driver.c @@ -112,7 +112,12 @@ static const OptionInfoRec * TDFXAvailableOptions(int chipid, int busid); static void TDFXIdentify(int flags); /* Identify if there is any hardware present that I know how to drive. */ +#ifdef PCIACCESS +static Bool TDFXPciProbe(DriverPtr drv, int entity_num, + struct pci_device *dev, intptr_t match_data); +#else static Bool TDFXProbe(DriverPtr drv, int flags); +#endif /* Process the config file and see if we have a valid configuration */ static Bool TDFXPreInit(ScrnInfoPtr pScrn, int flags); @@ -145,15 +150,52 @@ static void TDFXBlockHandler(int, pointer, pointer, pointer); static void TDFXDisplayPowerManagementSet(ScrnInfoPtr pScrn, int PowerManagermentMode, int flags); +#ifdef PCIACCESS +#define TDFX_DEVICE_MATCH(d, sub, i) \ + { 0x121A, (d), PCI_MATCH_ANY, (sub), 0, 0, (i) } + +static const struct pci_id_match tdfx_device_match[] = { + TDFX_DEVICE_MATCH(PCI_CHIP_BANSHEE, PCI_MATCH_ANY, Banshee), + + /* There are *many* missing PCI IDs here. + */ + TDFX_DEVICE_MATCH(PCI_CHIP_VOODOO3, 0x0036, Voodoo3_2000), + TDFX_DEVICE_MATCH(PCI_CHIP_VOODOO3, 0x003A, Voodoo3_3000), + + TDFX_DEVICE_MATCH(PCI_CHIP_VOODOO3, PCI_MATCH_ANY, Voodoo3_Unknown), + TDFX_DEVICE_MATCH(PCI_CHIP_VOODOO5, PCI_MATCH_ANY, Voodoo5), + { 0, 0, 0 } +}; + +static const int MaxClocks[MAX_VOODOO_CARDS] = { + [Banshee] = 270000, + [Voodoo3_2000] = 300000, + [Voodoo3_3000] = 350000, + [Voodoo3_Unknown] = 300000, + [Voodoo5] = 350000 +}; +#endif + + _X_EXPORT DriverRec TDFX = { TDFX_VERSION, TDFX_DRIVER_NAME, TDFXIdentify, +#ifdef PCIACCESS + NULL, +#else TDFXProbe, +#endif + TDFXAvailableOptions, NULL, 0, - NULL + NULL, + +#ifdef PCIACCESS + tdfx_device_match, + TDFXPciProbe +#endif }; /* Chipsets */ @@ -164,12 +206,14 @@ static SymTabRec TDFXChipsets[] = { { -1, NULL } }; +#ifndef PCIACCESS static PciChipsets TDFXPciChipsets[] = { { PCI_CHIP_BANSHEE, PCI_CHIP_BANSHEE, RES_SHARED_VGA }, { PCI_CHIP_VOODOO3, PCI_CHIP_VOODOO3, RES_SHARED_VGA }, { PCI_CHIP_VOODOO5, PCI_CHIP_VOODOO5, RES_SHARED_VGA }, { -1, -1, RES_UNDEFINED } }; +#endif /* !!! Do we want an option for alternate clocking? !!! */ @@ -400,15 +444,71 @@ TDFXProbeDDC(ScrnInfoPtr pScrn, int index) } } -/* - * TDFXProbe -- +#ifdef PCIACCESS +/** + * TDFXPciProbe * * Look through the PCI bus to find cards that are TDFX boards. * Setup the dispatch table for the rest of the driver functions. + */ +static Bool +TDFXPciProbe(DriverPtr drv, int entity_num, struct pci_device *dev, + intptr_t match_data) +{ + ScrnInfoPtr pScrn; + + TDFXTRACE("TDFXPciProbe start\n"); + + + /* Allocate new ScrnInfoRec and claim the slot */ + pScrn = xf86ConfigPciEntity(NULL, 0, entity_num, NULL, NULL, + NULL, NULL, NULL, NULL); + if (pScrn != NULL) { + TDFXPtr pTDFX; + + pScrn->driverVersion = TDFX_VERSION; + pScrn->driverName = TDFX_DRIVER_NAME; + pScrn->name = TDFX_NAME; + pScrn->Probe = NULL; + pScrn->PreInit = TDFXPreInit; + pScrn->ScreenInit = TDFXScreenInit; + pScrn->SwitchMode = TDFXSwitchMode; + pScrn->AdjustFrame = TDFXAdjustFrame; + pScrn->EnterVT = TDFXEnterVT; + pScrn->LeaveVT = TDFXLeaveVT; + pScrn->FreeScreen = TDFXFreeScreen; + pScrn->ValidMode = TDFXValidMode; + + /* Allocate driverPrivate */ + pTDFX = TDFXGetRec(pScrn); + if (pTDFX == NULL) { + return FALSE; + } + + pTDFX->initDone = FALSE; + pTDFX->match_id = (enum tdfx_chips) match_data; + pTDFX->pEnt = xf86GetEntityInfo(entity_num); + pTDFX->PciInfo[0] = dev; + pTDFX->numChips = 1; + pTDFX->Primary = xf86IsPrimaryPci(dev); + + pTDFX->PIOBase[0] = dev->regions[2].base_addr; + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "PIO base = 0x%lx\n", pTDFX->PIOBase[0]); + } + + return (pScrn != NULL); +} +#else +/** + * TDFXProbe * + * Look through the PCI bus to find cards that are TDFX boards. + * Setup the dispatch table for the rest of the driver functions. */ static Bool -TDFXProbe(DriverPtr drv, int flags) { +TDFXProbe(DriverPtr drv, int flags) +{ int i, numUsed, numDevSections, *usedChips; GDevPtr *devSections; Bool foundScreen = FALSE; @@ -465,6 +565,7 @@ TDFXProbe(DriverPtr drv, int flags) { return foundScreen; } +#endif static int TDFXCountRam(ScrnInfoPtr pScrn) { @@ -588,6 +689,7 @@ static int TDFXSizeToCfg(int size) } } +#ifndef PCIACCESS static void TDFXFindChips(ScrnInfoPtr pScrn, pciVideoPtr match) { @@ -613,6 +715,7 @@ TDFXFindChips(ScrnInfoPtr pScrn, pciVideoPtr match) /* Disable the secondary chips for now */ pTDFX->numChips=1; } +#endif static void TDFXInitChips(ScrnInfoPtr pScrn) @@ -785,12 +888,17 @@ TDFXPreInit(ScrnInfoPtr pScrn, int flags) MessageType from; int flags24; rgb defaultWeight = {0, 0, 0}; +#ifdef PCIACCESS + struct pci_device *match; +#else pciVideoPtr match; +#endif int availableMem; TDFXTRACE("TDFXPreInit start\n"); if (pScrn->numEntities != 1) return FALSE; +#ifndef PCIACCESS /* Allocate driverPrivate */ pTDFX = TDFXGetRec(pScrn); if (pTDFX == NULL) { @@ -800,6 +908,9 @@ TDFXPreInit(ScrnInfoPtr pScrn, int flags) pTDFX->initDone=FALSE; pTDFX->pEnt = xf86GetEntityInfo(pScrn->entityList[0]); +#else + pTDFX = TDFXPTR(pScrn); +#endif if (flags & PROBE_DETECT) { #if !defined(__powerpc__) @@ -844,9 +955,13 @@ TDFXPreInit(ScrnInfoPtr pScrn, int flags) #endif #endif +#ifdef PCIACCESS + match = pTDFX->PciInfo[0]; +#else match=pTDFX->PciInfo=xf86GetPciInfoForEntity(pTDFX->pEnt->index); TDFXFindChips(pScrn, match); pTDFX->Primary = xf86IsPrimaryPci(pTDFX->PciInfo); +#endif if (xf86RegisterResources(pTDFX->pEnt->index, NULL, ResExclusive)) { TDFXFreeRec(pScrn); -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]