.cvsignore | 19 -- .gitignore | 20 ++ configure.ac | 12 + man/.cvsignore | 2 man/.gitignore | 2 src/.cvsignore | 6 src/.gitignore | 6 src/savage_dga.c | 2 src/savage_dri.c | 14 + src/savage_driver.c | 418 +++++++++++++++++++++++++++++++++++++++------------- src/savage_driver.h | 33 +++- src/savage_hwmc.c | 2 12 files changed, 390 insertions(+), 146 deletions(-)
New commits: commit 9c959f53ca8376aa136a9d434c3383cdb20487c2 Author: Alex Deucher <[EMAIL PROTECTED](none)> Date: Fri Sep 14 20:21:12 2007 -0400 fix the build for the non-pci-rework case (compile tested only) diff --git a/src/savage_driver.c b/src/savage_driver.c index 586fbad..9d4209a 100644 --- a/src/savage_driver.c +++ b/src/savage_driver.c @@ -40,6 +40,7 @@ #endif #include <unistd.h> +#include <errno.h> #include "xf86RAC.h" #include "shadowfb.h" @@ -3080,9 +3081,9 @@ static Bool SavageMapMem(ScrnInfoPtr pScrn) + psav->PciInfo->regions[0].base_addr; psav->FbRegion.base = psav->PciInfo->regions[1].base_addr; #else - psav->MmioBase = SAVAGE_NEWMMIO_REGBASE_S4 + psav->MmioRegion.base = SAVAGE_NEWMMIO_REGBASE_S4 + psav->PciInfo->memBase[0]; - psav->FrameBufferBase = psav->PciInfo->memBase[1]; + psav->FbRegion.base = psav->PciInfo->memBase[1]; #endif } diff --git a/src/savage_driver.h b/src/savage_driver.h index a65b2d8..e032ddc 100644 --- a/src/savage_driver.h +++ b/src/savage_driver.h @@ -280,8 +280,13 @@ typedef struct _StatInfo { } StatInfoRec,*StatInfoPtr; struct savage_region { +#ifdef XSERVER_LIBPCIACCESS pciaddr_t base; pciaddr_t size; +#else + unsigned long base; + unsigned long size; +#endif void * memory; }; commit 846a69f70d189c486448df269a512b8d42fab0c2 Author: Alex Deucher <[EMAIL PROTECTED](none)> Date: Fri Sep 14 20:13:33 2007 -0400 fix segfault from pScrn->currentMode should fix bug 12260 diff --git a/src/savage_driver.c b/src/savage_driver.c index a49f6a9..586fbad 100644 --- a/src/savage_driver.c +++ b/src/savage_driver.c @@ -119,7 +119,7 @@ static Bool SavageDDC1(int scrnIndex); static unsigned int SavageDDC1Read(ScrnInfoPtr pScrn); static void SavageProbeDDC(ScrnInfoPtr pScrn, int index); static void SavageGetTvMaxSize(SavagePtr psav); -static Bool SavagePanningCheck(ScrnInfoPtr pScrn); +static Bool SavagePanningCheck(ScrnInfoPtr pScrn, DisplayModePtr pMode); #ifdef XF86DRI static Bool SavageCheckAvailableRamFor3D(ScrnInfoPtr pScrn); #endif @@ -3627,7 +3627,7 @@ static Bool SavageScreenInit(int scrnIndex, ScreenPtr pScreen, } #endif - SavagePanningCheck(pScrn); + SavagePanningCheck(pScrn, pScrn->currentMode); #ifdef XvExtension if( !psav->FBStart2nd && !psav->NoAccel /*&& !SavagePanningCheck(pScrn)*/ ) { if (psav->IsSecondary) @@ -4271,7 +4271,7 @@ Bool SavageSwitchMode(int scrnIndex, DisplayModePtr mode, int flags) pSavEnt = pPriv->ptr; SavageModeInit(pSavEnt->pSecondaryScrn, pSavEnt->pSecondaryScrn->currentMode); } - SavagePanningCheck(pScrn); + SavagePanningCheck(pScrn, mode); return success; } @@ -4750,12 +4750,9 @@ SavageGetTvMaxSize(SavagePtr psav) static Bool -SavagePanningCheck(ScrnInfoPtr pScrn) +SavagePanningCheck(ScrnInfoPtr pScrn, DisplayModePtr pMode) { SavagePtr psav = SAVPTR(pScrn); - DisplayModePtr pMode; - - pMode = pScrn->currentMode; psav->iResX = pMode->CrtcHDisplay; psav->iResY = pMode->CrtcVDisplay; commit 7da1a03d4b8b40483001b1f6e56dae655a1797f4 Author: James Cloos <[EMAIL PROTECTED]> Date: Mon Sep 3 05:52:43 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 0287432c65231460fadff7d8d7b332208e345a31 Author: Ian Romanick <[EMAIL PROTECTED]> Date: Fri Aug 31 13:07:17 2007 -0700 Fix odd typo. diff --git a/src/savage_driver.c b/src/savage_driver.c index 0346faa..a49f6a9 100644 --- a/src/savage_driver.c +++ b/src/savage_driver.c @@ -3226,7 +3226,7 @@ static void SavageUnmapMem(ScrnInfoPtr pScrn, int All) #else xf86UnMapVidMem(pScrn->scrnIndex, (pointer)psav->FbRegion.base, psav->FbRegion.size); -#else +#endif } if (psav->ApertureRegion.memory != NULL) { commit 514dc647d108e179965adb1377b1d4c011afa367 Author: Ian Romanick <[EMAIL PROTECTED]> Date: Thu Aug 30 17:53:11 2007 -0700 Update to use new libpciaccess interfaces for mapping with MTRR support. diff --git a/configure.ac b/configure.ac index 04a4c3e..d596b7a 100644 --- a/configure.ac +++ b/configure.ac @@ -51,11 +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) @@ -100,12 +95,17 @@ if test "$DRI" = yes; then AC_DEFINE(XF86DRI_DEVEL,1,[Enable developmental DRI driver support]) fi -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" +save_CFLAGS="$CFLAGS" +CFLAGS="$XORG_CFLAGS" +AC_CHECK_DECL(XSERVER_LIBPCIACCESS, + [XSERVER_LIBPCIACCESS=yes], [XSERVER_LIBPCIACCESS=no], + [#include "xorg-server.h"]) +CFLAGS="$save_CFLAGS" + +if test "x$XSERVER_LIBPCIACCESS" = xyes; then + PKG_CHECK_MODULES([PCIACCESS], [pciaccess >= 0.10.0]) fi +AM_CONDITIONAL(XSERVER_LIBPCIACCESS, test "x$XSERVER_LIBPCIACCESS" = xyes) AC_SUBST([DRI_CFLAGS]) AC_SUBST([XORG_CFLAGS]) diff --git a/src/savage_dga.c b/src/savage_dga.c index 49c9a3c..fd26d78 100644 --- a/src/savage_dga.c +++ b/src/savage_dga.c @@ -391,7 +391,7 @@ Savage_OpenFramebuffer( SavagePtr psav = SAVPTR(pScrn); *name = NULL; /* no special device */ - *mem = (unsigned char*)psav->FrameBufferBase; + *mem = (unsigned char*)psav->FbRegion.base; *size = psav->videoRambytes; *offset = 0; *flags = DGA_NEED_ROOT; diff --git a/src/savage_dri.c b/src/savage_dri.c index aca0b8c..211fef0 100644 --- a/src/savage_dri.c +++ b/src/savage_dri.c @@ -624,7 +624,7 @@ static Bool SAVAGEDRIMapInit( ScreenPtr pScreen ) pSAVAGEDRIServer->registers.size = SAVAGEIOMAPSIZE; if ( drmAddMap( psav->drmFD, - (drm_handle_t)psav->MmioBase, + (drm_handle_t)psav->MmioRegion.base, pSAVAGEDRIServer->registers.size, DRM_REGISTERS,0, &pSAVAGEDRIServer->registers.handle ) < 0 ) { @@ -636,7 +636,7 @@ static Bool SAVAGEDRIMapInit( ScreenPtr pScreen ) pSAVAGEDRIServer->aperture.size = 5 * 0x01000000; if ( drmAddMap( psav->drmFD, - (drm_handle_t)(psav->ApertureBase), + (drm_handle_t)(psav->ApertureRegion.base), pSAVAGEDRIServer->aperture.size, DRM_FRAME_BUFFER,0, &pSAVAGEDRIServer->aperture.handle ) < 0 ) { @@ -882,7 +882,7 @@ Bool SAVAGEDRIScreenInit( ScreenPtr pScreen ) sprintf(pDRIInfo->busIdString, "PCI:%d:%d:%d", psav->PciInfo->bus, -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS psav->PciInfo->dev, #else psav->PciInfo->device, @@ -893,7 +893,7 @@ Bool SAVAGEDRIScreenInit( ScreenPtr pScreen ) pDRIInfo->ddxDriverMinorVersion = SAVAGE_VERSION_MINOR; pDRIInfo->ddxDriverPatchVersion = SAVAGE_PATCHLEVEL; - pDRIInfo->frameBufferPhysicalAddress = (pointer) psav->FrameBufferBase; + pDRIInfo->frameBufferPhysicalAddress = (pointer) psav->FbRegion.base; pDRIInfo->frameBufferSize = psav->videoRambytes; pDRIInfo->frameBufferStride = pScrn->displayWidth*(pScrn->bitsPerPixel/8); pDRIInfo->ddxDrawableTableEntry = SAVAGE_MAX_DRAWABLES; diff --git a/src/savage_driver.c b/src/savage_driver.c index 4c4246b..0346faa 100644 --- a/src/savage_driver.c +++ b/src/savage_driver.c @@ -72,7 +72,7 @@ static void SavageDisableMMIO(ScrnInfoPtr pScrn); static const OptionInfoRec * SavageAvailableOptions(int chipid, int busid); static void SavageIdentify(int flags); -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS static Bool SavagePciProbe(DriverPtr drv, int entity_num, struct pci_device *dev, intptr_t match_data); #else @@ -138,7 +138,7 @@ extern ScrnInfoPtr gpScrn; int gSavageEntityIndex = -1; -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS #define SAVAGE_DEVICE_MATCH(d, i) \ { 0x5333, (d), PCI_MATCH_ANY, PCI_MATCH_ANY, 0, 0, (i) } @@ -212,7 +212,7 @@ static SymTabRec SavageChipsets[] = { { -1, NULL } }; -#ifndef PCIACCESS +#ifndef XSERVER_LIBPCIACCESS /* This table maps a PCI device ID to a chipset family identifier. */ static PciChipsets SavagePciChipsets[] = { @@ -318,7 +318,7 @@ _X_EXPORT DriverRec SAVAGE = SAVAGE_VERSION, SAVAGE_DRIVER_NAME, SavageIdentify, -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS NULL, #else SavageProbe, @@ -328,7 +328,7 @@ _X_EXPORT DriverRec SAVAGE = 0, NULL, -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS savage_device_match, SavagePciProbe #endif @@ -838,7 +838,7 @@ static void SavageIdentify(int flags) } -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS static Bool SavagePciProbe(DriverPtr drv, int entity_num, struct pci_device *dev, intptr_t match_data) { @@ -1592,7 +1592,7 @@ static Bool SavagePreInit(ScrnInfoPtr pScrn, int flags) xfree(pEnt); -#ifndef PCIACCESS +#ifndef XSERVER_LIBPCIACCESS psav->PciTag = pciTag(psav->PciInfo->bus, psav->PciInfo->device, psav->PciInfo->func); #endif @@ -1601,7 +1601,7 @@ static Bool SavagePreInit(ScrnInfoPtr pScrn, int flags) /* Set AGP Mode from config */ /* We support 1X 2X and 4X */ #ifdef XF86DRI -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS /* Try to read the AGP capabilty block from the device. If there is * no AGP info, the device is PCI. */ @@ -3060,127 +3060,132 @@ static void SavageWriteMode(ScrnInfoPtr pScrn, vgaRegPtr vgaSavePtr, static Bool SavageMapMem(ScrnInfoPtr pScrn) { SavagePtr psav = SAVPTR(pScrn); -#ifndef PCIACCESS - int mode; -#endif - unsigned i; + int err; TRACE(("SavageMapMem()\n")); if( S3_SAVAGE3D_SERIES(psav->Chipset) ) { - psav->MmioRegion.bar = 0; - psav->MmioRegion.offset = SAVAGE_NEWMMIO_REGBASE_S3; - - psav->FbRegion.bar = 0; - psav->FbRegion.offset = 0; - - psav->last_bar = 0; +#ifdef XSERVER_LIBPCIACCESS + psav->MmioRegion.base = SAVAGE_NEWMMIO_REGBASE_S3 + + psav->PciInfo->regions[0].base_addr; + psav->FbRegion.base = psav->PciInfo->regions[0].base_addr; +#else + psav->MmioRegion.base = SAVAGE_NEWMMIO_REGBASE_S3 + + psav->PciInfo->memBase[0]; + psav->FbRegion.base = psav->PciInfo->memBase[0]; +#endif } else { - psav->MmioRegion.bar = 0; - psav->MmioRegion.offset = SAVAGE_NEWMMIO_REGBASE_S4; - - psav->FbRegion.bar = 1; - psav->FbRegion.offset = 0; - - psav->last_bar = 1; +#ifdef XSERVER_LIBPCIACCESS + psav->MmioRegion.base = SAVAGE_NEWMMIO_REGBASE_S4 + + psav->PciInfo->regions[0].base_addr; + psav->FbRegion.base = psav->PciInfo->regions[1].base_addr; +#else + psav->MmioBase = SAVAGE_NEWMMIO_REGBASE_S4 + + psav->PciInfo->memBase[0]; + psav->FrameBufferBase = psav->PciInfo->memBase[1]; +#endif } + psav->MmioRegion.size = SAVAGE_NEWMMIO_REGSIZE; + psav->FbRegion.size = psav->videoRambytes; + /* On Paramount and Savage 2000, aperture 0 is PCI base 2. On other * chipsets it's in the same BAR as the framebuffer. */ if ((psav->Chipset == S3_SUPERSAVAGE) - || (psav->Chipset == S3_SAVAGE2000)) { - psav->ApertureRegion.bar = 2; - psav->ApertureRegion.offset = 0; - - psav->last_bar = 2; + || (psav->Chipset == S3_SAVAGE2000)) { +#ifdef XSERVER_LIBPCIACCESS + psav->ApertureRegion.base = psav->PciInfo->regions[2].base_addr; +#else + psav->ApertureRegion.base = psav->PciInfo->memBase[2]; +#endif } else { - psav->ApertureRegion.bar = psav->FbRegion.bar; - psav->ApertureRegion.offset = 0x02000000; + psav->ApertureRegion.base = psav->FbRegion.base + 0x02000000; } + psav->ApertureRegion.size = (psav->IsPrimary || psav->IsSecondary) + ? (0x01000000 * 2) : (0x01000000 * 5); -#ifdef PCIACCESS - psav->MmioBase = psav->PciInfo->regions[ psav->MmioRegion.bar ].base_addr - + psav->MmioRegion.offset; - psav->FrameBufferBase = psav->PciInfo->regions[ psav->FbRegion.bar ].base_addr - + psav->FbRegion.offset; - - psav->ApertureBase = psav->PciInfo->regions[ psav->FbRegion.bar ].base_addr - + psav->ApertureRegion.offset; + if (psav->FbRegion.size != 0) { +#ifdef XSERVER_LIBPCIACCESS + err = pci_device_map_range(psav->PciInfo, psav->FbRegion.base, + psav->FbRegion.size, + (PCI_DEV_MAP_FLAG_WRITABLE + | PCI_DEV_MAP_FLAG_WRITE_COMBINE), + & psav->FbRegion.memory); #else - psav->MmioBase = psav->PciInfo->memBase[ psav->MmioRegion.bar ] - + psav->MmioRegion.offset; - - psav->FrameBufferBase = psav->PciInfo->memBase[ psav->FbRegion.bar ] - + psav->FbRegion.offset; - - psav->ApertureBase = psav->PciInfo->memBase[ psav->FbRegion.bar ] - + psav->ApertureRegion.offset; + psav->FbRegion.memory = + xf86MapPciMem(pScrn->scrnIndex, VIDMEM_FRAMEBUFFER, + psav->PciTag, psav->FbRegion.base, + psav->FbRegion.size); + err = (psav->FbRegion.memory == NULL) ? errno : 0; #endif + if (err) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "Internal error: cound not map framebuffer range (%d, %s).\n", + err, strerror(err)); + return FALSE; + } + psav->FBBase = psav->FbRegion.memory; + psav->FBStart = (psav->IsSecondary) + ? psav->FBBase + 0x1000000 : psav->FBBase; + } - /* FIXME: This seems fine even on Savage3D where the same BAR contains the - * FIXME: MMIO space and the framebuffer. Write-combining gets fixed up - * FIXME: later. Someone should investigate this, though. And kick S3 - * FIXME: for doing something so silly. - */ -#ifndef PCIACCESS - mode = VIDMEM_MMIO; -#endif - for (i = 0; i <= psav->last_bar; i++) { - int err; - -#ifdef PCIACCESS - err = pci_device_map_region(psav->PciInfo, i, TRUE); + if (psav->ApertureRegion.memory == NULL) { +#ifdef XSERVER_LIBPCIACCESS + err = pci_device_map_range(psav->PciInfo, psav->ApertureRegion.base, + psav->ApertureRegion.size, + (PCI_DEV_MAP_FLAG_WRITABLE + | PCI_DEV_MAP_FLAG_WRITE_COMBINE), + & psav->ApertureRegion.memory); #else - psav->bar_mappings[i] = xf86MapPciMem(pScrn->scrnIndex, mode, - psav->PciTag, - psav->PciInfo->memBase[i], - (1U << psav->PciInfo->size[i])); - err = (psav->bar_mappings[i] == NULL); + psav->ApertureRegion.memory = + xf86MapPciMem(pScrn->scrnIndex, VIDMEM_FRAMEBUFFER, + psav->PciTag, psav->ApertureRegion.base, + psav->ApertureRegion.size); + err = (psav->ApertureRegion.memory == NULL) ? errno : 0; #endif - if (err) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "Internal error: cound not map PCI region %u, last BAR = %u\n", - i, psav->last_bar); - return FALSE; - } + if (err) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "Internal error: cound not map aperture range (%d, %s).\n", + err, strerror(err)); + return FALSE; + } -#ifdef PCIACCESS - psav->bar_mappings[i] = psav->PciInfo->regions[i].memory; -#else - mode = VIDMEM_FRAMEBUFFER; -#endif + psav->ApertureMap = (psav->IsSecondary) + ? psav->ApertureRegion.memory + : psav->ApertureRegion.memory + 0x1000000; } - psav->MapBase = psav->bar_mappings[ psav->MmioRegion.bar ] - + psav->MmioRegion.offset; - - psav->BciMem = psav->MapBase + 0x10000; - - SavageEnableMMIO(pScrn); - - psav->FBBase = psav->bar_mappings[ psav->FbRegion.bar ] - + psav->FbRegion.offset; - - psav->FBStart = (psav->IsSecondary) - ? psav->FBBase + 0x1000000 : psav->FBBase; + if (psav->MmioRegion.memory == NULL) { +#ifdef XSERVER_LIBPCIACCESS + err = pci_device_map_range(psav->PciInfo, psav->MmioRegion.base, + psav->MmioRegion.size, + (PCI_DEV_MAP_FLAG_WRITABLE), + & psav->MmioRegion.memory); +#else + psav->MmioRegion.memory = + xf86MapPciMem(pScrn->scrnIndex, VIDMEM_FRAMEBUFFER, + psav->PciTag, psav->MmioRegion.base, + psav->MmioRegion.size); + err = (psav->MmioRegion.memory == NULL) ? errno : 0; +#endif + if (err) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "Internal error: cound not map MMIO range (%d, %s).\n", + err, strerror(err)); + return FALSE; + } - psav->ApertureMap = psav->bar_mappings[ psav->ApertureRegion.bar ] - + psav->ApertureRegion.offset; + psav->MapBase = psav->MmioRegion.memory; + psav->BciMem = psav->MapBase + 0x10000; - if (psav->IsSecondary) { - psav->ApertureMap += 0x1000000; + SavageEnableMMIO(pScrn); } -#ifdef PCIACCESS - pScrn->memPhysBase = psav->PciInfo->regions[0].base_addr; -#else - pScrn->memPhysBase = psav->PciInfo->memBase[0]; -#endif - + pScrn->memPhysBase = psav->FbRegion.base; return TRUE; } @@ -3188,34 +3193,55 @@ static Bool SavageMapMem(ScrnInfoPtr pScrn) static void SavageUnmapMem(ScrnInfoPtr pScrn, int All) { SavagePtr psav = SAVPTR(pScrn); - unsigned i; TRACE(("SavageUnmapMem(%x,%x)\n", psav->MapBase, psav->FBBase)); if (psav->PrimaryVidMapped) { - vgaHWUnmapMem(pScrn); - psav->PrimaryVidMapped = FALSE; + vgaHWUnmapMem(pScrn); + psav->PrimaryVidMapped = FALSE; } SavageDisableMMIO(pScrn); - for (i = (All) ? 0 : 1; i <= psav->last_bar; i++) { - if (psav->bar_mappings[i]) { -#ifdef PCIACCESS - pci_device_unmap_region(psav->PciInfo, i); + if (All && (psav->MmioRegion.memory != NULL)) { +#ifdef XSERVER_LIBPCIACCESS + pci_device_unmap_range(psav->PciInfo, + psav->MmioRegion.memory, + psav->MmioRegion.size); #else - xf86UnMapVidMem(pScrn->scrnIndex, psav->bar_mappings[i], - (1U << psav->PciInfo->size[i])); + xf86UnMapVidMem(pScrn->scrnIndex, (pointer)psav->MapBase, + SAVAGE_NEWMMIO_REGSIZE); #endif - psav->bar_mappings[i] = NULL; - } + + psav->MmioRegion.memory = NULL; + psav->MapBase = 0; + psav->BciMem = 0; + } + + if (psav->FbRegion.memory != NULL) { +#ifdef XSERVER_LIBPCIACCESS + pci_device_unmap_range(psav->PciInfo, + psav->FbRegion.memory, + psav->FbRegion.size); +#else + xf86UnMapVidMem(pScrn->scrnIndex, (pointer)psav->FbRegion.base, + psav->FbRegion.size); +#else } - if (All) { - psav->MapBase = 0; - psav->BciMem = 0; + if (psav->ApertureRegion.memory != NULL) { +#ifdef XSERVER_LIBPCIACCESS + pci_device_unmap_range(psav->PciInfo, + psav->ApertureRegion.memory, + psav->ApertureRegion.size); +#else + xf86UnMapVidMem(pScrn->scrnIndex, (pointer)psav->ApertureRegion.base, + psav->ApertureRegion.size); +#endif } - + + psav->FbRegion.memory = NULL; + psav->ApertureRegion.memory = NULL; psav->FBBase = 0; psav->FBStart = 0; psav->ApertureMap = 0; @@ -3304,7 +3330,7 @@ static void SavageInitShadowStatus(ScrnInfoPtr pScrn) if( psav->ShadowStatus ) { psav->ShadowPhysical = - psav->FrameBufferBase + psav->CursorKByte*1024 + 4096 - 32; + psav->FbRegion.base + psav->CursorKByte*1024 + 4096 - 32; psav->ShadowVirtual = (CARD32 *) (psav->FBBase + psav->CursorKByte*1024 + 4096 - 32); diff --git a/src/savage_driver.h b/src/savage_driver.h index 74eea5c..a65b2d8 100644 --- a/src/savage_driver.h +++ b/src/savage_driver.h @@ -33,7 +33,7 @@ #include <string.h> #include <math.h> -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS #include <pciaccess.h> #define VENDOR_ID(p) (p)->vendor_id #define DEVICE_ID(p) (p)->device_id @@ -280,8 +280,9 @@ typedef struct _StatInfo { } StatInfoRec,*StatInfoPtr; struct savage_region { - unsigned bar; - unsigned long offset; + pciaddr_t base; + pciaddr_t size; + void * memory; }; typedef struct _Savage { @@ -305,18 +306,12 @@ typedef struct _Savage { int endfb; /* These are physical addresses. */ - unsigned long FrameBufferBase; - unsigned long MmioBase; - unsigned long ApertureBase; unsigned long ShadowPhysical; /* These are linear addresses. */ struct savage_region MmioRegion; struct savage_region FbRegion; struct savage_region ApertureRegion; - unsigned last_bar; - - unsigned char* bar_mappings[3]; unsigned char* MapBase; unsigned char* BciMem; @@ -376,7 +371,7 @@ typedef struct _Savage { int TVSizeY; CloseScreenProcPtr CloseScreen; -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS struct pci_device * PciInfo; #else pciVideoPtr PciInfo; diff --git a/src/savage_hwmc.c b/src/savage_hwmc.c index 6a39754..43c9dfd 100644 --- a/src/savage_hwmc.c +++ b/src/savage_hwmc.c @@ -202,7 +202,7 @@ Bool SAVAGEInitMC(ScreenPtr pScreen) return FALSE; } - offset = pSAVAGE->hwmcOffset + pSAVAGE->FrameBufferBase; + offset = pSAVAGE->hwmcOffset + pSAVAGE->FbRegion.base; if(drmAddMap(pSAVAGE->drmFD, offset, pSAVAGE->hwmcSize, DRM_FRAME_BUFFER, 0, &pSAVAGEDriPriv->xvmcSurfHandle) < 0) commit 4a87cab2765df548a3b5d796e19568a2576306b8 Author: James Cloos <[EMAIL PROTECTED]> Date: Thu Aug 23 19:25:53 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 ffc5ba7f0b1cdefdcecf6bd47018b6a4924bfc44 Author: Ian Romanick <[EMAIL PROTECTED]> Date: Wed Aug 22 12:38:14 2007 -0700 Merge PCI-rework support and "classic" PCI interface support into one tree First pass at merging both trees. So far, this has only been compile tested. I need to dig out a savage card to put in a system for testing, so it may take another hour or two. diff --git a/configure.ac b/configure.ac index 16c19d0..04a4c3e 100644 --- a/configure.ac +++ b/configure.ac @@ -51,6 +51,11 @@ 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) @@ -95,8 +100,12 @@ if test "$DRI" = yes; then AC_DEFINE(XF86DRI_DEVEL,1,[Enable developmental DRI driver support]) fi -PKG_CHECK_MODULES([PCIACCESS], [pciaccess >= 0.5.0]) -XORG_CFLAGS="$XORG_CFLAGS $PCIACCESS_CFLAGS" +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 AC_SUBST([DRI_CFLAGS]) AC_SUBST([XORG_CFLAGS]) diff --git a/src/savage_dri.c b/src/savage_dri.c index 41e8bb1..aca0b8c 100644 --- a/src/savage_dri.c +++ b/src/savage_dri.c @@ -467,8 +467,8 @@ static Bool SAVAGEDRIAgpInit(ScreenPtr pScreen) xf86DrvMsg( pScreen->myNum, X_INFO, "[agp] Mode 0x%08lx [AGP 0x%04x/0x%04x; Card 0x%04x/0x%04x]\n", mode, vendor, device, - psav->PciInfo->vendor_id, - psav->PciInfo->device_id ); + VENDOR_ID(psav->PciInfo), + DEVICE_ID(psav->PciInfo)); if ( drmAgpEnable( psav->drmFD, mode ) < 0 ) { xf86DrvMsg( pScreen->myNum, X_ERROR, "[agp] AGP not enabled\n" ); @@ -882,7 +882,11 @@ Bool SAVAGEDRIScreenInit( ScreenPtr pScreen ) sprintf(pDRIInfo->busIdString, "PCI:%d:%d:%d", psav->PciInfo->bus, +#ifdef PCIACCESS psav->PciInfo->dev, +#else + psav->PciInfo->device, +#endif psav->PciInfo->func); } pDRIInfo->ddxDriverMajorVersion = SAVAGE_VERSION_MAJOR; diff --git a/src/savage_driver.c b/src/savage_driver.c index 9975119..4c4246b 100644 --- a/src/savage_driver.c +++ b/src/savage_driver.c @@ -72,8 +72,13 @@ static void SavageDisableMMIO(ScrnInfoPtr pScrn); static const OptionInfoRec * SavageAvailableOptions(int chipid, int busid); static void SavageIdentify(int flags); +#ifdef PCIACCESS static Bool SavagePciProbe(DriverPtr drv, int entity_num, struct pci_device *dev, intptr_t match_data); +#else +static Bool SavageProbe(DriverPtr drv, int flags); +static int LookupChipID(PciChipsets* pset, int ChipID); +#endif static Bool SavagePreInit(ScrnInfoPtr pScrn, int flags); static Bool SavageEnterVT(int scrnIndex, int flags); @@ -133,6 +138,7 @@ extern ScrnInfoPtr gpScrn; int gSavageEntityIndex = -1; +#ifdef PCIACCESS #define SAVAGE_DEVICE_MATCH(d, i) \ { 0x5333, (d), PCI_MATCH_ANY, PCI_MATCH_ANY, 0, 0, (i) } @@ -163,6 +169,7 @@ static const struct pci_id_match savage_device_match[] = { { 0, 0, 0 }, }; +#endif /* Supported chipsets */ @@ -205,6 +212,37 @@ static SymTabRec SavageChipsets[] = { { -1, NULL } }; +#ifndef PCIACCESS +/* This table maps a PCI device ID to a chipset family identifier. */ + +static PciChipsets SavagePciChipsets[] = { + { S3_SAVAGE3D, PCI_CHIP_SAVAGE3D, RES_SHARED_VGA }, + { S3_SAVAGE3D, PCI_CHIP_SAVAGE3D_MV, RES_SHARED_VGA }, + { S3_SAVAGE4, PCI_CHIP_SAVAGE4, RES_SHARED_VGA }, + { S3_SAVAGE2000, PCI_CHIP_SAVAGE2000, RES_SHARED_VGA }, + { S3_SAVAGE_MX, PCI_CHIP_SAVAGE_MX_MV, RES_SHARED_VGA }, + { S3_SAVAGE_MX, PCI_CHIP_SAVAGE_MX, RES_SHARED_VGA }, + { S3_SAVAGE_MX, PCI_CHIP_SAVAGE_IX_MV, RES_SHARED_VGA }, + { S3_SAVAGE_MX, PCI_CHIP_SAVAGE_IX, RES_SHARED_VGA }, + { S3_PROSAVAGE, PCI_CHIP_PROSAVAGE_PM, RES_SHARED_VGA }, + { S3_PROSAVAGE, PCI_CHIP_PROSAVAGE_KM, RES_SHARED_VGA }, + { S3_TWISTER, PCI_CHIP_S3TWISTER_P, RES_SHARED_VGA }, + { S3_TWISTER, PCI_CHIP_S3TWISTER_K, RES_SHARED_VGA }, + { S3_PROSAVAGEDDR, PCI_CHIP_PROSAVAGE_DDR, RES_SHARED_VGA }, + { S3_PROSAVAGEDDR, PCI_CHIP_PROSAVAGE_DDRK, RES_SHARED_VGA }, + { S3_SUPERSAVAGE, PCI_CHIP_SUPSAV_MX128, RES_SHARED_VGA }, + { S3_SUPERSAVAGE, PCI_CHIP_SUPSAV_MX64, RES_SHARED_VGA }, + { S3_SUPERSAVAGE, PCI_CHIP_SUPSAV_MX64C, RES_SHARED_VGA }, + { S3_SUPERSAVAGE, PCI_CHIP_SUPSAV_IX128SDR, RES_SHARED_VGA }, + { S3_SUPERSAVAGE, PCI_CHIP_SUPSAV_IX128DDR, RES_SHARED_VGA }, + { S3_SUPERSAVAGE, PCI_CHIP_SUPSAV_IX64SDR, RES_SHARED_VGA }, + { S3_SUPERSAVAGE, PCI_CHIP_SUPSAV_IX64DDR, RES_SHARED_VGA }, + { S3_SUPERSAVAGE, PCI_CHIP_SUPSAV_IXCSDR, RES_SHARED_VGA }, + { S3_SUPERSAVAGE, PCI_CHIP_SUPSAV_IXCDDR, RES_SHARED_VGA }, + { -1, -1, RES_UNDEFINED } +}; +#endif + typedef enum { OPTION_PCI_BURST ,OPTION_PCI_RETRY @@ -280,14 +318,20 @@ _X_EXPORT DriverRec SAVAGE = SAVAGE_VERSION, SAVAGE_DRIVER_NAME, SavageIdentify, +#ifdef PCIACCESS NULL, +#else + SavageProbe, +#endif SavageAvailableOptions, NULL, 0, NULL, +#ifdef PCIACCESS savage_device_match, SavagePciProbe +#endif }; @@ -794,6 +838,7 @@ static void SavageIdentify(int flags) } +#ifdef PCIACCESS static Bool SavagePciProbe(DriverPtr drv, int entity_num, struct pci_device *dev, intptr_t match_data) { @@ -867,6 +912,133 @@ static Bool SavagePciProbe(DriverPtr drv, int entity_num, return (pScrn != NULL); } +#else + +static Bool SavageProbe(DriverPtr drv, int flags) +{ + int i; + GDevPtr *devSections = NULL; + int *usedChips; + int numDevSections; + int numUsed; + Bool foundScreen = FALSE; + + /* sanity checks */ + if ((numDevSections = xf86MatchDevice("savage", &devSections)) <= 0) + return FALSE; + if (xf86GetPciVideoInfo() == NULL) { + if (devSections) + xfree(devSections); + return FALSE; + } + + numUsed = xf86MatchPciInstances("SAVAGE", PCI_VENDOR_S3, + SavageChipsets, SavagePciChipsets, + devSections, numDevSections, drv, + &usedChips); + if (devSections) + xfree(devSections); + devSections = NULL; + if (numUsed <= 0) + return FALSE; + -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]