.gitignore | 1 configure.ac | 14 mga_PInS.txt | 28 + src/clientlx.c | 16 src/mga.h | 90 ++++ src/mga_bios.c | 15 src/mga_dac3026.c | 10 src/mga_dacG.c | 63 ++- src/mga_dri.c | 293 ++++++++++++--- src/mga_driver.c | 1053 +++++++++++++++++++++++++++++++++++------------------- src/mga_exa.c | 133 +++++- src/mga_macros.h | 20 - src/mga_merge.c | 6 src/mga_storm.c | 215 ----------- src/mga_vga.c | 211 +++++++++- src/mga_video.c | 780 +++++++++++++++++++++++++++++++++++++++- util/stormdwg.c | 10 17 files changed, 2229 insertions(+), 729 deletions(-)
New commits: commit d7f0f657504b2646a94f652baf0f71ff4117fac4 Author: Tilman Sauerbeck <[EMAIL PROTECTED]> Date: Wed Sep 5 18:06:57 2007 +0200 Bumped version to 1.4.7. diff --git a/configure.ac b/configure.ac index 1605dee..9f8f1a7 100644 --- a/configure.ac +++ b/configure.ac @@ -24,7 +24,7 @@ AC_PREREQ(2.57) # When the version number is modified here, also modify it in src/mga.h. AC_INIT([xf86-video-mga], - 1.4.6.1, + 1.4.7, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xf86-video-mga) commit 4bfc1e1ea11604e3af150a4228663cb1cb1bf9f3 Author: James Cloos <[EMAIL PROTECTED]> Date: Mon Sep 3 05:52:35 2007 -0400 Add *~ to .gitignore to skip patch/emacs droppings diff --git a/.gitignore b/.gitignore index 564d950..cec124b 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,4 @@ man/mga.? util/stormdwg .deps .libs +*~ commit 923176f5aad777b4023003a457bb77da21373389 Author: Ian Romanick <[EMAIL PROTECTED]> Date: Fri Aug 31 11:05:57 2007 -0700 Use XSERVER_LIBPCIACCESS to detect pci-rework. diff --git a/configure.ac b/configure.ac index 7d37153..1605dee 100644 --- a/configure.ac +++ b/configure.ac @@ -60,11 +60,6 @@ AC_ARG_ENABLE(exa, [Disable EXA support [[default=enabled]]]), [EXA="$enableval"], [EXA=yes]) -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) @@ -76,13 +71,6 @@ XORG_DRIVER_CHECK_EXT(DPMSExtension, xextproto) PKG_CHECK_MODULES(XORG, [xorg-server >= 1.1.0 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. @@ -116,6 +104,18 @@ if test "x$DRI" = xyes; then AC_DEFINE(XF86DRI_DEVEL,1,[Enable developmental DRI driver support]) fi +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.8.0]) +fi +AM_CONDITIONAL(XSERVER_LIBPCIACCESS, test "x$XSERVER_LIBPCIACCESS" = xyes) + AM_CONDITIONAL(USE_XAA, true) AC_DEFINE(USE_XAA, 1, [Build support for XAA]) diff --git a/src/clientlx.c b/src/clientlx.c index 8c08026..9c6ab50 100644 --- a/src/clientlx.c +++ b/src/clientlx.c @@ -67,7 +67,7 @@ ULONG ClientReadConfigSpaceByte(LPBOARDHANDLE pBoard, ULONG ulOffset, ASSERT_HANDLER(pBoard); -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS pci_device_cfg_read_u8(pMga->PciInfo, pucByte, ulOffset); #else *pucByte = pciReadByte(pMga->PciTag,ulOffset); @@ -99,7 +99,7 @@ ULONG ClientReadConfigSpaceDword(LPBOARDHANDLE pBoard, ULONG ulOffset, ASSERT_HANDLER(pBoard); -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS pci_device_cfg_read_u32(pMga->PciInfo, (uint32_t *) pulDword, ulOffset); #else *pulDword = pciReadLong(pMga->PciTag,ulOffset); @@ -131,7 +131,7 @@ ULONG ClientWriteConfigSpaceByte(LPBOARDHANDLE pBoard, ULONG ulOffset, ASSERT_HANDLER(pBoard); -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS pci_device_cfg_write_u8(pMga->PciInfo, ucByte, ulOffset); #else pciWriteByte(pMga->PciTag,ulOffset, ucByte); @@ -163,7 +163,7 @@ ULONG ClientWriteConfigSpaceDword(LPBOARDHANDLE pBoard, ULONG ulOffset, ASSERT_HANDLER(pBoard); -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS pci_device_cfg_write_u32(pMga->PciInfo, (uint32_t) ulDword, ulOffset); #else pciWriteLong(pMga->PciTag,ulOffset, ulDword); diff --git a/src/mga.h b/src/mga.h index 673ec1d..c46fdbb 100644 --- a/src/mga.h +++ b/src/mga.h @@ -14,7 +14,7 @@ #ifndef MGA_H #define MGA_H -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS #include <pciaccess.h> #endif #include <string.h> @@ -289,7 +289,7 @@ typedef struct { #ifdef DISABLE_VGA_IO typedef struct mgaSave { -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS struct pci_device * pvp; #else pciVideoPtr pvp; @@ -441,7 +441,7 @@ typedef struct { EntityInfoPtr pEnt; struct mga_bios_values bios; CARD8 BiosOutputMode; -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS struct pci_device * PciInfo; #else pciVideoPtr PciInfo; @@ -482,7 +482,7 @@ typedef struct { */ int iload_bar; -#ifndef PCIACCESS +#ifndef XSERVER_LIBPCIACCESS unsigned long IOAddress; unsigned long ILOADAddress; unsigned long BiosAddress; diff --git a/src/mga_bios.c b/src/mga_bios.c index 46a8c46..aece217 100644 --- a/src/mga_bios.c +++ b/src/mga_bios.c @@ -409,7 +409,7 @@ Bool mga_read_and_process_bios( ScrnInfoPtr pScrn ) CARD8 bios_data[0x20000]; unsigned offset; MGAPtr pMga = MGAPTR(pScrn); -#ifndef PCIACCESS +#ifndef XSERVER_LIBPCIACCESS Bool pciBIOS = TRUE; #endif int rlen; @@ -446,7 +446,7 @@ Bool mga_read_and_process_bios( ScrnInfoPtr pScrn ) * might be controlled by the PCI config space. */ -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS err = pci_device_read_rom(pMga->PciInfo, bios_data); #else if (pMga->BiosFrom == X_DEFAULT) { diff --git a/src/mga_dac3026.c b/src/mga_dac3026.c index 254f6e2..e33f914 100644 --- a/src/mga_dac3026.c +++ b/src/mga_dac3026.c @@ -746,7 +746,7 @@ MGA3026Restore(ScrnInfoPtr pScrn, vgaRegPtr vgaReg, MGARegPtr mgaReg, for (i = 0; i < 6; i++) OUTREG16(0x1FDE, (mgaReg->ExtVga[i] << 8) | i); -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS pci_device_cfg_write_bits(pMga->PciInfo, OPTION_MASK, mgaReg->Option, PCI_OPTION_REG); #else @@ -871,7 +871,7 @@ MGA3026Save(ScrnInfoPtr pScrn, vgaRegPtr vgaReg, MGARegPtr mgaReg, for (i = 0; i < DACREGSIZE; i++) mgaReg->DacRegs[i] = inTi3026(MGADACregs[i]); -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS pci_device_cfg_read_u32(pMga->PciInfo, & mgaReg->Option, PCI_OPTION_REG); #else diff --git a/src/mga_dacG.c b/src/mga_dacG.c index f135ad5..1a6a565 100644 --- a/src/mga_dacG.c +++ b/src/mga_dacG.c @@ -771,7 +771,7 @@ MGA_NOT_HAL( if (!MGAISGx50(pMga)) { /* restore pci_option register */ -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS pci_device_cfg_write_bits(pMga->PciInfo, optionMask, mgaReg->Option, PCI_OPTION_REG); @@ -960,7 +960,7 @@ MGAGSave(ScrnInfoPtr pScrn, vgaRegPtr vgaReg, MGARegPtr mgaReg, mgaReg->PIXPLLCSaved = TRUE; -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS pci_device_cfg_read_u32(pMga->PciInfo, & mgaReg->Option, PCI_OPTION_REG); pci_device_cfg_read_u32(pMga->PciInfo, & mgaReg->Option2, @@ -971,7 +971,7 @@ MGAGSave(ScrnInfoPtr pScrn, vgaRegPtr vgaReg, MGARegPtr mgaReg, mgaReg->Option2 = pciReadLong(pMga->PciTag, PCI_MGA_OPTION2); #endif if (pMga->Chipset == PCI_CHIP_MGAG400 || pMga->Chipset == PCI_CHIP_MGAG550) -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS pci_device_cfg_read_u32(pMga->PciInfo, & mgaReg->Option3, PCI_MGA_OPTION3); #else diff --git a/src/mga_dri.c b/src/mga_dri.c index a8bea66..43fcaa8 100644 --- a/src/mga_dri.c +++ b/src/mga_dri.c @@ -851,7 +851,7 @@ static void MGADRIIrqInit(MGAPtr pMga, ScreenPtr pScreen) if (!pMga->irq) { pMga->irq = drmGetInterruptFromBusID(pMga->drmFD, -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS ((pMga->PciInfo->domain << 8) | pMga->PciInfo->bus), pMga->PciInfo->dev, @@ -1160,7 +1160,7 @@ Bool MGADRIScreenInit( ScreenPtr pScreen ) } else { pDRIInfo->busIdString = xalloc(64); sprintf( pDRIInfo->busIdString, "PCI:%d:%d:%d", -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS ((pMga->PciInfo->domain << 8) | pMga->PciInfo->bus), pMga->PciInfo->dev, pMga->PciInfo->func #else diff --git a/src/mga_driver.c b/src/mga_driver.c index 927e9a4..d9b786f 100644 --- a/src/mga_driver.c +++ b/src/mga_driver.c @@ -64,7 +64,7 @@ #include "xf86PciInfo.h" /* Drivers that need to access the PCI config space directly need this */ -#ifndef PCIACCESS +#ifndef XSERVER_LIBPCIACCESS #include "xf86Pci.h" #endif @@ -111,7 +111,7 @@ /* Mandatory functions */ static const OptionInfoRec * MGAAvailableOptions(int chipid, int busid); static void MGAIdentify(int flags); -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS static Bool MGAPciProbe(DriverPtr drv, int entity_num, struct pci_device * dev, intptr_t match_data); #else @@ -192,7 +192,7 @@ static const struct mga_device_attributes attribs[8] = { (TRANSC_SOLID_FILL | TWO_PASS_COLOR_EXPAND | USE_LINEAR_EXPANSION) }, }; -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS #define MGA_DEVICE_MATCH(d, i) \ { 0x102B, (d), PCI_MATCH_ANY, PCI_MATCH_ANY, 0, 0, (i) } #define MGA_SUBDEVICE_MATCH(d, s, i) \ @@ -264,7 +264,7 @@ _X_EXPORT DriverRec MGA_C_NAME = { MGA_VERSION, MGA_DRIVER_NAME, MGAIdentify, -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS NULL, #else MGAProbe, @@ -274,7 +274,7 @@ _X_EXPORT DriverRec MGA_C_NAME = { 0, NULL, -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS mga_device_match, MGAPciProbe #endif @@ -635,7 +635,7 @@ MGAIdentify(int flags) } -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS Bool MGAPciProbe(DriverPtr drv, int entity_num, struct pci_device * dev, intptr_t match_data) @@ -978,7 +978,7 @@ MGACountRam(ScrnInfoPtr pScrn) it. At least, my cards don't advertise the documented values (my 8 and 16 Meg G200s have the same values) */ if (pMga->Primary) { /* can only trust this for primary cards */ -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS pci_device_cfg_read_u32(pMga->PciInfo, & biosInfo, PCI_OPTION_REG); #else @@ -1289,7 +1289,7 @@ static void VgaIOSave(int i, void *arg) { MgaSavePtr sMga = arg; -#ifndef PCIACCESS +#ifndef XSERVER_LIBPCIACCESS PCITAG tag = pciTag(sMga->pvp->bus,sMga->pvp->device,sMga->pvp->func); #endif uint32_t temp; @@ -1298,7 +1298,7 @@ VgaIOSave(int i, void *arg) ErrorF("mga: VgaIOSave: %d:%d:%d\n", sMga->pvp->bus, sMga->pvp->device, sMga->pvp->func); #endif -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS pci_device_cfg_read_u32(pMga->PciInfo, & temp, PCI_OPTION_REG); #else temp = pciReadLong(tag, PCI_OPTION_REG); @@ -1310,7 +1310,7 @@ static void VgaIORestore(int i, void *arg) { MgaSavePtr sMga = arg; -#ifndef PCIACCESS +#ifndef XSERVER_LIBPCIACCESS PCITAG tag = pciTag(sMga->pvp->bus,sMga->pvp->device,sMga->pvp->func); #endif @@ -1318,7 +1318,7 @@ VgaIORestore(int i, void *arg) ErrorF("mga: VgaIORestore: %d:%d:%d\n", sMga->pvp->bus, sMga->pvp->device, sMga->pvp->func); #endif -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS pci_device_cfg_write_bits(pMga->PciInfo, 0x00000100, sMga->enable, PCI_OPTION_REG); #else @@ -1338,7 +1338,7 @@ VgaIODisable(void *arg) BOOLTOSTRING(xf86ResAccessEnter)); #endif /* Turn off the vgaioen bit. */ -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS pci_device_cfg_write_bits(pMga->PciInfo, 0x00000100, 0x00000000, PCI_OPTION_REG); #else @@ -1359,7 +1359,7 @@ VgaIOEnable(void *arg) #endif /* Turn on the vgaioen bit. */ if (pMga->Primary) { -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS pci_device_cfg_write_bits(pMga->PciInfo, 0x00000100, 0x00000100, PCI_OPTION_REG); #else @@ -1479,7 +1479,7 @@ MGAPreInit(ScrnInfoPtr pScrn, int flags) if (!vgaHWGetHWRec(pScrn)) return FALSE; -#ifndef PCIACCESS +#ifndef XSERVER_LIBPCIACCESS /* Find the PCI info for this screen */ pMga->PciInfo = xf86GetPciInfoForEntity(pMga->pEnt->index); pMga->PciTag = pciTag(pMga->PciInfo->bus, pMga->PciInfo->device, @@ -1731,7 +1731,7 @@ MGAPreInit(ScrnInfoPtr pScrn, int flags) if (pMga->is_G200SE) { /* Disable MTRR support on PCIe systems */ -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS uint32_t temp; pci_device_cfg_read_u32(pMga->PciInfo, & temp, 0xDC); @@ -2022,7 +2022,7 @@ MGAPreInit(ScrnInfoPtr pScrn, int flags) } -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS pMga->FbAddress = pMga->PciInfo->regions[pMga->framebuffer_bar].base_addr; #else pMga->FbAddress = pMga->PciInfo->memBase[pMga->framebuffer_bar] & 0xff800000; @@ -2031,7 +2031,7 @@ MGAPreInit(ScrnInfoPtr pScrn, int flags) xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "Linear framebuffer at 0x%lX\n", (unsigned long)pMga->FbAddress); -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "MMIO registers at 0x%lX\n", (unsigned long) pMga->PciInfo->regions[pMga->io_bar].base_addr); #else @@ -2042,7 +2042,7 @@ MGAPreInit(ScrnInfoPtr pScrn, int flags) #endif if (pMga->iload_bar != -1) { -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "Pseudo-DMA transfer window at 0x%lX\n", (unsigned long) pMga->PciInfo->regions[pMga->iload_bar].base_addr); @@ -2057,7 +2057,7 @@ MGAPreInit(ScrnInfoPtr pScrn, int flags) } -#ifndef PCIACCESS +#ifndef XSERVER_LIBPCIACCESS /* * Find the BIOS base. Get it from the PCI config if possible. Otherwise * use the VGA default. Allow the config file to override this. @@ -2096,7 +2096,7 @@ MGAPreInit(ScrnInfoPtr pScrn, int flags) * Read the BIOS data struct */ -#if defined(__alpha__) && !defined(PCIACCESS) +#if defined(__alpha__) && !defined(XSERVER_LIBPCIACCESS) /* * Some old Digital-OEMed Matrox Millennium I cards have a VGA * disable switch. If the disable is on, we can't read the BIOS, @@ -2509,7 +2509,7 @@ MGAPreInit(ScrnInfoPtr pScrn, int flags) && pMga->chip_attribs->probe_for_sdram) { uint32_t option_reg; -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS pci_device_cfg_read_u32(pMga->PciInfo, & option_reg, PCI_OPTION_REG); #else @@ -2773,14 +2773,14 @@ static Bool MGAMapMem(ScrnInfoPtr pScrn) { MGAPtr pMga = MGAPTR(pScrn); -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS struct pci_device *const dev = pMga->PciInfo; int err; #endif if (!pMga->FBDev) { -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS err = pci_device_map_region(dev, 0, TRUE); if (err) { xf86DrvMsg(pScrn->scrnIndex, X_ERROR, @@ -2838,7 +2838,7 @@ MGAMapMem(ScrnInfoPtr pScrn) pMga->ILOADBase = NULL; if (pMga->iload_bar != -1) { -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS err = pci_device_map_region(dev, pMga->iload_bar, TRUE); if (err) { xf86DrvMsg(pScrn->scrnIndex, X_ERROR, @@ -2870,13 +2870,13 @@ static Bool MGAUnmapMem(ScrnInfoPtr pScrn) { MGAPtr pMga = MGAPTR(pScrn); -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS struct pci_device * const dev = pMga->PciInfo; #endif if (!pMga->FBDev) { -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS pci_device_unmap_region(dev, 0); pci_device_unmap_region(dev, 1); #else @@ -2890,13 +2890,13 @@ MGAUnmapMem(ScrnInfoPtr pScrn) } if ((pMga->iload_bar != -1) -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS && (dev->regions[pMga->iload_bar].memory != NULL) #else && (pMga->ILOADBase != NULL) #endif ) { -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS pci_device_unmap_region(dev, pMga->iload_bar); #else xf86UnMapVidMem(pScrn->scrnIndex, (pointer)pMga->ILOADBase, 0x800000); @@ -3540,7 +3540,7 @@ MGAScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) else { fbdevHWSave(pScrn); /* Disable VGA core, and leave memory access on */ -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS pci_device_cfg_write_bits(pMga->PciInfo, 0x00000100, 0x00000000, PCI_OPTION_REG); #else diff --git a/src/mga_macros.h b/src/mga_macros.h index 3de9618..69dc8e3 100644 --- a/src/mga_macros.h +++ b/src/mga_macros.h @@ -3,7 +3,7 @@ #ifndef _MGA_MACROS_H_ #define _MGA_MACROS_H_ -#ifdef PCIACCESS +#ifdef XSERVER_LIBPCIACCESS #define MGA_IO_ADDRESS(p) (p)->PciInfo->regions[(p)->io_bar].base_addr #define VENDOR_ID(p) (p)->vendor_id #define DEVICE_ID(p) (p)->device_id diff --git a/src/mga_merge.c b/src/mga_merge.c index 141b0c3..359cdcf 100644 --- a/src/mga_merge.c +++ b/src/mga_merge.c @@ -272,7 +272,7 @@ MGAPreInitMergedFB(ScrnInfoPtr pScrn1, int flags) return TRUE; } -#ifndef PCIACCESS +#ifndef XSERVER_LIBPCIACCESS pMga->PciTag = pMga1->PciTag; #endif pMga->Primary = pMga1->Primary; @@ -372,7 +372,7 @@ MGAPreInitMergedFB(ScrnInfoPtr pScrn1, int flags) pMga->FbAddress = pMga1->FbAddress; pMga->PciInfo = pMga1->PciInfo; -#ifndef PCIACCESS +#ifndef XSERVER_LIBPCIACCESS pMga->IOAddress = pMga1->IOAddress; pMga->ILOADAddress = pMga1->ILOADAddress; pMga->BiosFrom = pMga1->BiosFrom; commit 90beb8c27b4206b593898d346bf37ab49e75b975 Author: Ian Romanick <[EMAIL PROTECTED]> Date: Wed Aug 22 11:19:46 2007 -0700 Set pScrn to NULL before calling xf86ConfigPciEntity. Why is the interface to xf86ConfigPciEntity so filled with hate? diff --git a/src/mga_driver.c b/src/mga_driver.c index 2d054cf..927e9a4 100644 --- a/src/mga_driver.c +++ b/src/mga_driver.c @@ -792,7 +792,7 @@ MGAProbe(DriverPtr drv, int flags) if (flags & PROBE_DETECT) foundScreen = TRUE; else for (i = 0; i < numUsed; i++) { - ScrnInfoPtr pScrn; + ScrnInfoPtr pScrn = NULL; EntityInfoPtr pEnt; #ifdef DISABLE_VGA_IO MgaSavePtr smga; commit 55d219394ad6af8e25ff604bcbb49d5a551bd348 Author: Ian Romanick <[EMAIL PROTECTED]> Date: Wed Aug 22 10:43:39 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 tested on the PCI-rework build on a PCI G450. diff --git a/configure.ac b/configure.ac index fed3e39..7d37153 100644 --- a/configure.ac +++ b/configure.ac @@ -60,6 +60,11 @@ AC_ARG_ENABLE(exa, [Disable EXA support [[default=enabled]]]), [EXA="$enableval"], [EXA=yes]) +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) @@ -71,12 +76,19 @@ XORG_DRIVER_CHECK_EXT(DPMSExtension, xextproto) PKG_CHECK_MODULES(XORG, [xorg-server >= 1.1.0 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. AC_HEADER_STDC -if test "x$DRI" = xauto; then +if test "x$DRI" != xno; then AC_CHECK_FILE([${sdkdir}/dri.h], [have_dri_h="yes"], [have_dri_h="no"]) AC_CHECK_FILE([${sdkdir}/sarea.h], @@ -99,7 +111,7 @@ AC_MSG_RESULT([$DRI]) AM_CONDITIONAL(DRI, test "x$DRI" = xyes) if test "x$DRI" = xyes; then - PKG_CHECK_MODULES(DRI, [libdrm >= 2.0 xf86driproto glproto]) + PKG_CHECK_MODULES(DRI, [libdrm >= 2.0 xf86driproto]) AC_DEFINE(XF86DRI,1,[Enable DRI driver support]) AC_DEFINE(XF86DRI_DEVEL,1,[Enable developmental DRI driver support]) fi diff --git a/src/clientlx.c b/src/clientlx.c index 7291718..8c08026 100644 --- a/src/clientlx.c +++ b/src/clientlx.c @@ -67,7 +67,11 @@ ULONG ClientReadConfigSpaceByte(LPBOARDHANDLE pBoard, ULONG ulOffset, ASSERT_HANDLER(pBoard); +#ifdef PCIACCESS pci_device_cfg_read_u8(pMga->PciInfo, pucByte, ulOffset); +#else + *pucByte = pciReadByte(pMga->PciTag,ulOffset); +#endif return 0; } @@ -95,7 +99,11 @@ ULONG ClientReadConfigSpaceDword(LPBOARDHANDLE pBoard, ULONG ulOffset, ASSERT_HANDLER(pBoard); +#ifdef PCIACCESS pci_device_cfg_read_u32(pMga->PciInfo, (uint32_t *) pulDword, ulOffset); +#else + *pulDword = pciReadLong(pMga->PciTag,ulOffset); +#endif return 0; } @@ -123,7 +131,11 @@ ULONG ClientWriteConfigSpaceByte(LPBOARDHANDLE pBoard, ULONG ulOffset, ASSERT_HANDLER(pBoard); +#ifdef PCIACCESS pci_device_cfg_write_u8(pMga->PciInfo, ucByte, ulOffset); +#else + pciWriteByte(pMga->PciTag,ulOffset, ucByte); +#endif return 0; } @@ -151,7 +163,11 @@ ULONG ClientWriteConfigSpaceDword(LPBOARDHANDLE pBoard, ULONG ulOffset, ASSERT_HANDLER(pBoard); +#ifdef PCIACCESS pci_device_cfg_write_u32(pMga->PciInfo, (uint32_t) ulDword, ulOffset); +#else + pciWriteLong(pMga->PciTag,ulOffset, ulDword); +#endif return 0; } diff --git a/src/mga.h b/src/mga.h index 00f4741..673ec1d 100644 --- a/src/mga.h +++ b/src/mga.h @@ -14,7 +14,9 @@ #ifndef MGA_H #define MGA_H +#ifdef PCIACCESS #include <pciaccess.h> +#endif #include <string.h> #include <stdio.h> @@ -287,7 +289,11 @@ typedef struct { #ifdef DISABLE_VGA_IO typedef struct mgaSave { +#ifdef PCIACCESS struct pci_device * pvp; +#else + pciVideoPtr pvp; +#endif Bool enable; } MgaSave, *MgaSavePtr; #endif @@ -435,7 +441,12 @@ typedef struct { EntityInfoPtr pEnt; struct mga_bios_values bios; CARD8 BiosOutputMode; +#ifdef PCIACCESS struct pci_device * PciInfo; +#else + pciVideoPtr PciInfo; + PCITAG PciTag; +#endif const struct mga_device_attributes * chip_attribs; xf86AccessRec Access; int Chipset; @@ -471,7 +482,12 @@ typedef struct { */ int iload_bar; - +#ifndef PCIACCESS + unsigned long IOAddress; + unsigned long ILOADAddress; + unsigned long BiosAddress; + MessageType BiosFrom; +#endif unsigned long FbAddress; unsigned char * IOBase; unsigned char * FbBase; diff --git a/src/mga_bios.c b/src/mga_bios.c index 34dcf7a..46a8c46 100644 --- a/src/mga_bios.c +++ b/src/mga_bios.c @@ -406,9 +406,12 @@ static void mga_parse_bios_ver_5( struct mga_bios_values * bios, Bool mga_read_and_process_bios( ScrnInfoPtr pScrn ) { - CARD8 bios_data[0x10000]; + CARD8 bios_data[0x20000]; unsigned offset; MGAPtr pMga = MGAPTR(pScrn); +#ifndef PCIACCESS + Bool pciBIOS = TRUE; +#endif int rlen; static const unsigned expected_length[] = { 0, 64, 64, 64, 128, 128 }; unsigned version; @@ -443,7 +446,28 @@ Bool mga_read_and_process_bios( ScrnInfoPtr pScrn ) * might be controlled by the PCI config space. */ +#ifdef PCIACCESS err = pci_device_read_rom(pMga->PciInfo, bios_data); +#else + if (pMga->BiosFrom == X_DEFAULT) { + pciBIOS = FALSE; + } + else if (pMga->BiosFrom == X_CONFIG && pMga->BiosAddress < 0x100000) { + pciBIOS = TRUE; + } + + if (pciBIOS) { + rlen = xf86ReadPciBIOS(0, pMga->PciTag, pMga->framebuffer_bar, + bios_data, sizeof(bios_data)); + } + else { + rlen = xf86ReadDomainMemory(pMga->PciTag, pMga->BiosAddress, + sizeof(bios_data), bios_data); + } + + err = rlen < (bios_data[2] << 9); +#endif + if (err) { xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "Could not retrieve video BIOS!\n"); diff --git a/src/mga_dac3026.c b/src/mga_dac3026.c index 9926017..254f6e2 100644 --- a/src/mga_dac3026.c +++ b/src/mga_dac3026.c @@ -746,8 +746,13 @@ MGA3026Restore(ScrnInfoPtr pScrn, vgaRegPtr vgaReg, MGARegPtr mgaReg, for (i = 0; i < 6; i++) OUTREG16(0x1FDE, (mgaReg->ExtVga[i] << 8) | i); +#ifdef PCIACCESS pci_device_cfg_write_bits(pMga->PciInfo, OPTION_MASK, mgaReg->Option, PCI_OPTION_REG); +#else + pciSetBitsLong(pMga->PciTag, PCI_OPTION_REG, OPTION_MASK, + mgaReg->Option); +#endif MGA_NOT_HAL( /* select pixel clock PLL as clock source */ @@ -866,8 +871,12 @@ MGA3026Save(ScrnInfoPtr pScrn, vgaRegPtr vgaReg, MGARegPtr mgaReg, for (i = 0; i < DACREGSIZE; i++) mgaReg->DacRegs[i] = inTi3026(MGADACregs[i]); +#ifdef PCIACCESS pci_device_cfg_read_u32(pMga->PciInfo, & mgaReg->Option, PCI_OPTION_REG); +#else + mgaReg->Option = pciReadLong(pMga->PciTag, PCI_OPTION_REG); +#endif #ifdef DEBUG ErrorF("read: %02X %02X %02X %02X %02X %02X %08lX\n", diff --git a/src/mga_dacG.c b/src/mga_dacG.c index 350c160..f135ad5 100644 --- a/src/mga_dacG.c +++ b/src/mga_dacG.c @@ -771,6 +771,7 @@ MGA_NOT_HAL( if (!MGAISGx50(pMga)) { /* restore pci_option register */ +#ifdef PCIACCESS pci_device_cfg_write_bits(pMga->PciInfo, optionMask, mgaReg->Option, PCI_OPTION_REG); @@ -785,6 +786,17 @@ MGA_NOT_HAL( PCI_MGA_OPTION3); } } +#else + /* restore pci_option register */ + pciSetBitsLong(pMga->PciTag, PCI_OPTION_REG, optionMask, + mgaReg->Option); + if (pMga->Chipset != PCI_CHIP_MGA1064) + pciSetBitsLong(pMga->PciTag, PCI_MGA_OPTION2, OPTION2_MASK, + mgaReg->Option2); + if (pMga->Chipset == PCI_CHIP_MGAG400 || pMga->Chipset == PCI_CHIP_MGAG550) + pciSetBitsLong(pMga->PciTag, PCI_MGA_OPTION3, OPTION3_MASK, + mgaReg->Option3); +#endif } ); /* MGA_NOT_HAL */ #ifdef USEMGAHAL @@ -948,14 +960,23 @@ MGAGSave(ScrnInfoPtr pScrn, vgaRegPtr vgaReg, MGARegPtr mgaReg, mgaReg->PIXPLLCSaved = TRUE; +#ifdef PCIACCESS pci_device_cfg_read_u32(pMga->PciInfo, & mgaReg->Option, PCI_OPTION_REG); pci_device_cfg_read_u32(pMga->PciInfo, & mgaReg->Option2, PCI_MGA_OPTION2); +#else + mgaReg->Option = pciReadLong(pMga->PciTag, PCI_OPTION_REG); + mgaReg->Option2 = pciReadLong(pMga->PciTag, PCI_MGA_OPTION2); +#endif if (pMga->Chipset == PCI_CHIP_MGAG400 || pMga->Chipset == PCI_CHIP_MGAG550) +#ifdef PCIACCESS pci_device_cfg_read_u32(pMga->PciInfo, & mgaReg->Option3, PCI_MGA_OPTION3); +#else + mgaReg->Option3 = pciReadLong(pMga->PciTag, PCI_MGA_OPTION3); +#endif ); /* MGA_NOT_HAL */ for (i = 0; i < 6; i++) diff --git a/src/mga_dri.c b/src/mga_dri.c index bb2cc39..a8bea66 100644 --- a/src/mga_dri.c +++ b/src/mga_dri.c @@ -608,8 +608,8 @@ static Bool MGADRIBootstrapDMA(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, - pMga->PciInfo->vendor_id, - pMga->PciInfo->device_id ); + VENDOR_ID(pMga->PciInfo), + DEVICE_ID(pMga->PciInfo)); if ( drmAgpEnable( pMga->drmFD, mode ) < 0 ) { xf86DrvMsg( pScreen->myNum, X_ERROR, "[agp] AGP not enabled\n" ); @@ -756,7 +756,7 @@ static Bool MGADRIBootstrapDMA(ScreenPtr pScreen) pMGADRIServer->registers.size = MGAIOMAPSIZE; if ( drmAddMap( pMga->drmFD, - (drm_handle_t)pMga->PciInfo->regions[ pMga->io_bar ].base_addr, + (drm_handle_t) MGA_IO_ADDRESS(pMga), pMGADRIServer->registers.size, DRM_REGISTERS, DRM_READ_ONLY, &pMGADRIServer->registers.handle ) < 0 ) { @@ -851,10 +851,17 @@ static void MGADRIIrqInit(MGAPtr pMga, ScreenPtr pScreen) if (!pMga->irq) { pMga->irq = drmGetInterruptFromBusID(pMga->drmFD, +#ifdef PCIACCESS ((pMga->PciInfo->domain << 8) | pMga->PciInfo->bus), pMga->PciInfo->dev, - pMga->PciInfo->func); + pMga->PciInfo->func +#else + ((pciConfigPtr)pMga->PciInfo->thisCard)->busnum, + ((pciConfigPtr)pMga->PciInfo->thisCard)->devnum, + ((pciConfigPtr)pMga->PciInfo->thisCard)->funcnum +#endif + ); if((drmCtlInstHandler(pMga->drmFD, pMga->irq)) != 0) { xf86DrvMsg(pScrn->scrnIndex, X_INFO, @@ -1153,10 +1160,15 @@ Bool MGADRIScreenInit( ScreenPtr pScreen ) } else { pDRIInfo->busIdString = xalloc(64); sprintf( pDRIInfo->busIdString, "PCI:%d:%d:%d", - ((pMga->PciInfo->domain << 8) | - pMga->PciInfo->bus), - pMga->PciInfo->dev, - pMga->PciInfo->func ); +#ifdef PCIACCESS + ((pMga->PciInfo->domain << 8) | pMga->PciInfo->bus), + pMga->PciInfo->dev, pMga->PciInfo->func +#else + ((pciConfigPtr)pMga->PciInfo->thisCard)->busnum, + ((pciConfigPtr)pMga->PciInfo->thisCard)->devnum, + ((pciConfigPtr)pMga->PciInfo->thisCard)->funcnum +#endif + ); } pDRIInfo->ddxDriverMajorVersion = PACKAGE_VERSION_MAJOR; pDRIInfo->ddxDriverMinorVersion = PACKAGE_VERSION_MINOR; diff --git a/src/mga_driver.c b/src/mga_driver.c index 008cd55..2d054cf 100644 --- a/src/mga_driver.c +++ b/src/mga_driver.c @@ -63,6 +63,11 @@ /* Drivers for PCI hardware need this */ #include "xf86PciInfo.h" +/* Drivers that need to access the PCI config space directly need this */ +#ifndef PCIACCESS +#include "xf86Pci.h" +#endif + /* All drivers initialising the SW cursor need this */ #include "mipointer.h" @@ -106,8 +111,12 @@ /* Mandatory functions */ static const OptionInfoRec * MGAAvailableOptions(int chipid, int busid); static void MGAIdentify(int flags); +#ifdef PCIACCESS static Bool MGAPciProbe(DriverPtr drv, int entity_num, struct pci_device * dev, intptr_t match_data); +#else +static Bool MGAProbe(DriverPtr drv, int flags); +#endif static Bool MGAPreInit(ScrnInfoPtr pScrn, int flags); static Bool MGAScreenInit(int Index, ScreenPtr pScreen, int argc, char **argv); @@ -183,6 +192,7 @@ static const struct mga_device_attributes attribs[8] = { (TRANSC_SOLID_FILL | TWO_PASS_COLOR_EXPAND | USE_LINEAR_EXPANSION) }, }; +#ifdef PCIACCESS #define MGA_DEVICE_MATCH(d, i) \ { 0x102B, (d), PCI_MATCH_ANY, PCI_MATCH_ANY, 0, 0, (i) } #define MGA_SUBDEVICE_MATCH(d, s, i) \ @@ -205,6 +215,7 @@ static const struct pci_id_match mga_device_match[] = { -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]