diff options
author | Xavier Bachelot <xavier@bachelot.org> | 2008-03-13 20:49:48 +0000 |
---|---|---|
committer | Xavier Bachelot <xavier@bachelot.org> | 2008-03-13 20:49:48 +0000 |
commit | 2cfabf3ca546726f14d717d906bef6fce54d932b (patch) | |
tree | 9558bfae05224b5625103407e565ae8113464aef | |
parent | 9f71d9fa4a96db3113ffd2a3787b69e080fbf274 (diff) |
libpciaccess support
-rw-r--r-- | ChangeLog | 12 | ||||
-rw-r--r-- | configure.ac | 25 | ||||
-rw-r--r-- | src/via.h | 18 | ||||
-rw-r--r-- | src/via_dri.c | 24 | ||||
-rw-r--r-- | src/via_driver.c | 258 | ||||
-rw-r--r-- | src/via_driver.h | 15 | ||||
-rw-r--r-- | src/via_id.c | 11 | ||||
-rw-r--r-- | src/via_memcpy.c | 6 |
8 files changed, 326 insertions, 43 deletions
diff --git a/ChangeLog b/ChangeLog index 804719d02f47..00b2d5c833a2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2008-03-11 Xavier Bachelot <xavier-at-bachelot-dot-org> + + * configure.ac: + * src/via.h: + * src/via_dri.c: (VIADRIIrqInit), (VIADRIScreenInit): + * src/via_driver.c: (via_pci_device), (via_host_bridge), + (viaPciDeviceVga), (if), (switch): + * src/via_driver.h: + * src/via_id.c: (ViaCheckCardId): + + Merge changes from pciaccess branch. + 2008-02-19 Benno Schulenberg <bensberg-at-justemail-dot-net> * src/via_driver.c: (VIAPreInit): diff --git a/configure.ac b/configure.ac index ab31cbdcd8ad..84550cb2e380 100644 --- a/configure.ac +++ b/configure.ac @@ -77,6 +77,14 @@ sdkdir=$(pkg-config --variable=sdkdir xorg-server) # Checks for header files. AC_HEADER_STDC +AC_CHECK_HEADER(xf86Modes.h,[XMODES=yes],[XMODES=no],[#include "xorg-server.h"]) +AC_CHECK_DECL(XSERVER_LIBPCIACCESS, + [XSERVER_LIBPCIACCESS=yes],[XSERVER_LIBPCIACCESS=no], + [#include "xorg/xorg-server.h"]) + +if test x$XSERVER_LIBPCIACCESS = xyes; then + PKG_CHECK_MODULES([PCIACCESS], [pciaccess >= 0.8.0]) +fi if test "$DRI" != no; then AC_CHECK_FILE([${sdkdir}/dri.h], @@ -129,16 +137,12 @@ AC_CHECK_FILE([${sdkdir}/xf86Module.h], [have_xf86Module_h="yes"], [have_xf86Module_h="no"]) # Check the ABI_VIDEODRV_VERSION -SAVE_CPPFLAGS="$CPPFLAGS" -CPPFLAGS="$CPPFLAGS $XORG_CFLAGS" +SAVE_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS $XORG_CFLAGS" if test "x$have_xf86Module_h" = xyes; then AC_MSG_CHECKING([whether to use old Xv ABI]) AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[ -#include "xf86Module.h" -#if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 1 -#error Old Xv ABI -#endif ]])], [OLD_XVABI=no], [OLD_XVABI=yes]) @@ -147,7 +151,9 @@ else echo -n "xf86Module.h not found, " fi -CPPFLAGS="$SAVE_CPPFLAGS" +CFLAGS="$SAVE_CFLAGS" + + if test "x$OLD_XVABI" = xyes; then echo "yes." @@ -156,6 +162,11 @@ else AC_DEFINE(USE_NEW_XVABI, 1, [Use new Xv ABI (7.1RC1+)]) fi +AM_CONDITIONAL(XSERVER_LIBPCIACCESS, test x$XSERVER_LIBPCIACCESS = xyes) +if test "$XSERVER_LIBPCIACCESS" = yes; then + AC_DEFINE(XSERVER_LIBPCIACCESS,1,[Enable libpciaccess]) +fi + AM_CONDITIONAL(DEBUG, test x$DEBUG = xyes) if test "$DEBUG" = yes; then AC_DEFINE(HAVE_DEBUG,1,[Enable debug support]) diff --git a/src/via.h b/src/via.h index 9e9c105ac6ae..09476a507856 100644 --- a/src/via.h +++ b/src/via.h @@ -25,8 +25,6 @@ #ifndef _VIA_H_ #define _VIA_H_ 1 -#include "xorgVersion.h" - #include <errno.h> #include <string.h> #include <stdio.h> @@ -664,4 +662,20 @@ #define VBE_DEFAULT_REFRESH 6000 +#ifdef XSERVER_LIBPCIACCESS +#define VIA_MEMBASE(p,n) (p)->regions[(n)].base_addr +#define VENDOR_ID(p) (p)->vendor_id +#define DEVICE_ID(p) (p)->device_id +#define SUBVENDOR_ID(p) (p)->subvendor_id +#define SUBSYS_ID(p) (p)->subdevice_id +#define CHIP_REVISION(p) (p)->revision +#else +#define VIA_MEMBASE(p,n) (p)->memBase[n] +#define VENDOR_ID(p) (p)->vendor +#define DEVICE_ID(p) (p)->chipType +#define SUBVENDOR_ID(p) (p)->subsysVendor +#define SUBSYS_ID(p) (p)->subsysCard +#define CHIP_REVISION(p) (p)->chipRev +#endif + #endif /* _VIA_H_ */ diff --git a/src/via_dri.c b/src/via_dri.c index fff377fccc65..5b99247d62e8 100644 --- a/src/via_dri.c +++ b/src/via_dri.c @@ -112,9 +112,15 @@ VIADRIIrqInit(ScrnInfoPtr pScrn, VIADRIPtr pVIADRI) pVIADRI->irqEnabled = drmGetInterruptFromBusID (pVia->drmFD, - ((pciConfigPtr) pVia->PciInfo->thisCard)->busnum, - ((pciConfigPtr) pVia->PciInfo->thisCard)->devnum, - ((pciConfigPtr) pVia->PciInfo->thisCard)->funcnum); +#ifdef XSERVER_LIBPCIACCESS + ((pVia->PciInfo->domain << 8) | pVia->PciInfo->bus), + pVia->PciInfo->dev, pVia->PciInfo->func +#else + ((pciConfigPtr)pVia->PciInfo->thisCard)->busnum, + ((pciConfigPtr)pVia->PciInfo->thisCard)->devnum, + ((pciConfigPtr)pVia->PciInfo->thisCard)->funcnum +#endif + ); if ((drmCtlInstHandler(pVia->drmFD, pVIADRI->irqEnabled))) { xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "[drm] Failure adding IRQ handler. " @@ -586,9 +592,15 @@ VIADRIScreenInit(ScreenPtr pScreen) pDRIInfo->clientDriverName = VIAClientDriverName; pDRIInfo->busIdString = xalloc(64); sprintf(pDRIInfo->busIdString, "PCI:%d:%d:%d", - ((pciConfigPtr) pVia->PciInfo->thisCard)->busnum, - ((pciConfigPtr) pVia->PciInfo->thisCard)->devnum, - ((pciConfigPtr) pVia->PciInfo->thisCard)->funcnum); +#ifdef XSERVER_LIBPCIACCESS + ((pVia->PciInfo->domain << 8) | pVia->PciInfo->bus), + pVia->PciInfo->dev, pVia->PciInfo->func +#else + ((pciConfigPtr)pVia->PciInfo->thisCard)->busnum, + ((pciConfigPtr)pVia->PciInfo->thisCard)->devnum, + ((pciConfigPtr)pVia->PciInfo->thisCard)->funcnum +#endif + ); pDRIInfo->ddxDriverMajorVersion = VIA_DRIDDX_VERSION_MAJOR; pDRIInfo->ddxDriverMinorVersion = VIA_DRIDDX_VERSION_MINOR; pDRIInfo->ddxDriverPatchVersion = VIA_DRIDDX_VERSION_PATCH; diff --git a/src/via_driver.c b/src/via_driver.c index 27082028b4f0..a19e091b0e17 100644 --- a/src/via_driver.c +++ b/src/via_driver.c @@ -50,7 +50,43 @@ /* Prototypes. */ static void VIAIdentify(int flags); +#ifdef XSERVER_LIBPCIACCESS +struct pci_device* +via_pci_device(const struct pci_slot_match *bridge_match) { + struct pci_device_iterator *slot_iterator; + struct pci_device *bridge; + + slot_iterator = pci_slot_match_iterator_create (bridge_match); + bridge = pci_device_next (slot_iterator); + pci_iterator_destroy (slot_iterator); + return bridge; +} + +struct pci_device * +via_host_bridge (void) +{ + static const struct pci_slot_match bridge_match = { + 0, 0, 0, 0, 0 + }; + return via_pci_device(&bridge_match); +} + +viaPciDeviceVga(void) +{ + static const struct pci_slot_match bridge_match = { + 0, 0, 0, 3, 0 + }; + return via_pci_device(&bridge_match); +} + +static Bool via_pci_probe (DriverPtr drv, + int entity_num, + struct pci_device *dev, + intptr_t match_data); +#else static Bool VIAProbe(DriverPtr drv, int flags); +#endif + static Bool VIASetupDefaultOptions(ScrnInfoPtr pScrn); static Bool VIAPreInit(ScrnInfoPtr pScrn, int flags); static Bool VIAEnterVT(int scrnIndex, int flags); @@ -75,16 +111,46 @@ static void VIAUnmapMem(ScrnInfoPtr pScrn); static void VIALoadRgbLut(ScrnInfoPtr pScrn, int numColors, int *indices, LOCO *colors, VisualPtr pVisual); +#ifdef XSERVER_LIBPCIACCESS + +#define VIA_DEVICE_MATCH(d,i) \ + { 0x1106, (d), PCI_MATCH_ANY, PCI_MATCH_ANY, 0, 0, (i) } + +static const struct pci_id_match via_device_match[] = { + VIA_DEVICE_MATCH (PCI_CHIP_VT3204, 0 ), + VIA_DEVICE_MATCH (PCI_CHIP_VT3259, 0 ), + VIA_DEVICE_MATCH (PCI_CHIP_CLE3122, 0 ), + VIA_DEVICE_MATCH (PCI_CHIP_VT3205, 0 ), + VIA_DEVICE_MATCH (PCI_CHIP_VT3314, 0 ), + VIA_DEVICE_MATCH (PCI_CHIP_VT3336, 0 ), + VIA_DEVICE_MATCH (PCI_CHIP_VT3364, 0 ), + VIA_DEVICE_MATCH (PCI_CHIP_VT3324, 0 ), + VIA_DEVICE_MATCH (PCI_CHIP_VT3327, 0 ), + { 0, 0, 0 }, +}; -DriverRec VIA = { +#endif /* XSERVER_LIBPCIACCESS */ + +_X_EXPORT DriverRec VIA = + { VIA_VERSION, DRIVER_NAME, VIAIdentify, +#ifdef XSERVER_LIBPCIACCESS + NULL, +#else VIAProbe, +#endif VIAAvailableOptions, NULL, - 0 -}; + 0, + NULL, +#ifdef XSERVER_LIBPCIACCESS + via_device_match, + via_pci_probe +#endif + + }; /* Supported chipsets */ static SymTabRec VIAChipsets[] = { @@ -398,8 +464,7 @@ static XF86ModuleVersionInfo VIAVersRec = { {0, 0, 0, 0} }; -XF86ModuleData openchromeModuleData = { &VIAVersRec, VIASetup, NULL }; - +_X_EXPORT XF86ModuleData openchromeModuleData = { &VIAVersRec, VIASetup, NULL }; static pointer VIASetup(pointer module, pointer opts, int *errmaj, int *errmin) @@ -408,7 +473,13 @@ VIASetup(pointer module, pointer opts, int *errmaj, int *errmin) if (!setupDone) { setupDone = TRUE; - xf86AddDriver(&VIA, module, 0); + xf86AddDriver(&VIA, module, +#ifdef XSERVER_LIBPCIACCESS + HaveDriverFuncs +#else + 0 +#endif + ); LoaderRefSymLists(vgaHWSymbols, #ifdef USE_FB fbSymbols, @@ -498,6 +569,46 @@ VIAIdentify(int flags) VIAChipsets); } +#ifdef XSERVER_LIBPCIACCESS +static Bool via_pci_probe (DriverPtr driver, + int entity_num, + struct pci_device *device, + intptr_t match_data) +{ + ScrnInfoPtr scrn = NULL; + EntityInfoPtr entity; + DevUnion *private; + + scrn = xf86ConfigPciEntity (scrn, 0, entity_num, VIAPciChipsets, + NULL, + NULL, NULL, NULL, NULL); + + if (scrn != NULL) + { + scrn->driverVersion = VIA_VERSION; + scrn->driverName = DRIVER_NAME; + scrn->name = "CHROME"; + scrn->Probe = NULL; + + entity = xf86GetEntityInfo (entity_num); + + scrn->PreInit = VIAPreInit; + scrn->ScreenInit = VIAScreenInit; + scrn->SwitchMode = VIASwitchMode; + scrn->AdjustFrame = VIAAdjustFrame; + scrn->EnterVT = VIAEnterVT; + scrn->LeaveVT = VIALeaveVT; + scrn->FreeScreen = VIAFreeScreen; + scrn->ValidMode = ViaValidMode; + + xf86Msg(X_NOTICE, "VIA Technologies does not support or endorse this driver in any way.\n"); + xf86Msg(X_NOTICE, "For support, please refer to http://www.openchrome.org/ or\n"); + xf86Msg(X_NOTICE, "your X vendor.\n"); + } + return scrn != NULL; +} +#else /* XSERVER_LIBPCIACCESS */ + static Bool VIAProbe(DriverPtr drv, int flags) { @@ -607,6 +718,7 @@ VIAProbe(DriverPtr drv, int flags) return foundScreen; } /* VIAProbe */ +#endif /* else XSERVER_LIBPCIACCESS */ #ifdef XF86DRI static void @@ -756,6 +868,10 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags) vgaHWPtr hwp; int i, bMemSize = 0; +#ifdef XSERVER_LIBPCIACCESS + struct pci_device *bridge = via_host_bridge (); +#endif + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIAPreInit\n")); if (pScrn->numEntities > 1) @@ -932,7 +1048,7 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags) pEnt->device->chipID); } else { from = X_PROBED; - pVia->ChipId = pVia->PciInfo->chipType; + pVia->ChipId = DEVICE_ID(pVia->PciInfo); pVia->Chipset = LookupChipID(VIAPciChipsets, pVia->ChipId); pScrn->chipset = (char *)xf86TokenToString(VIAChipsets, pVia->Chipset); } @@ -945,7 +1061,13 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags) pVia->ChipRev); } else { /* Read PCI bus 0, dev 0, function 0, index 0xF6 to get chip revision */ +#ifdef XSERVER_LIBPCIACCESS + struct pci_device *bridge = via_host_bridge (); + + pci_device_cfg_read_u32 (bridge, & pVia->ChipRev, 0xF6); +#else pVia->ChipRev = pciReadByte(pciTag(0, 0, 0), 0xF6); +#endif } if (pVia->Chipset == VIA_CLE266) @@ -957,24 +1079,41 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags) /* Detect the amount of installed RAM */ from = X_PROBED; + CARD8 videoRam ; +#ifdef XSERVER_LIBPCIACCESS + struct pci_device *vgaDevice = viaPciDeviceVga() ; +#endif + switch (pVia->Chipset) { case VIA_CLE266: case VIA_KM400: - pScrn->videoRam = (1 << ((pciReadByte(pciTag(0, 0, 0), 0xE1) - & 0x70) >> 4)) << 10; +#ifdef XSERVER_LIBPCIACCESS + pci_device_cfg_read_u8(bridge, &videoRam, 0xE1); +#else + videoRam = pciReadByte(pciTag(0, 0, 0), 0xE1) & 0x70 ; +#endif + pScrn->videoRam = ( 1 << ((videoRam & 0x70) >> 4 )) << 10 ; break; case VIA_PM800: case VIA_VM800: case VIA_K8M800: - pScrn->videoRam = (1 << ((pciReadByte(pciTag(0, 0, 3), 0xA1) - & 0x70) >> 4)) << 10; +#ifdef XSERVER_LIBPCIACCESS + pci_device_cfg_read_u8(vgaDevice, &videoRam, 0xA1); +#else + videoRam = pciReadByte(pciTag(0, 0, 3), 0xA1) & 0x70; +#endif + pScrn->videoRam = (1 << ((videoRam & 0x70) >> 4)) << 10; break; case VIA_K8M890: case VIA_P4M890: case VIA_P4M900: case VIA_CX700: - pScrn->videoRam = (1 << ((pciReadByte(pciTag(0, 0, 3), 0xA1) - & 0x70) >> 4)) << 12; +#ifdef XSERVER_LIBPCIACCESS + pci_device_cfg_read_u8(vgaDevice, &videoRam, 0xA1); +#else + videoRam = pciReadByte(pciTag(0, 0, 3), 0xA1) & 0x70; +#endif + pScrn->videoRam = (1 << ((videoRam & 0x70) >> 4 )) << 12; break; default: if (pScrn->videoRam < 16384 || pScrn->videoRam > 65536) { @@ -1350,8 +1489,10 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags) /* maybe throw in some more sanity checks here */ +#ifndef XSERVER_LIBPCIACCESS pVia->PciTag = pciTag(pVia->PciInfo->bus, pVia->PciInfo->device, pVia->PciInfo->func); +#endif if (!VIAMapMMIO(pScrn)) { VIAFreeRec(pScrn); @@ -2008,26 +2149,73 @@ static Bool VIAMapMMIO(ScrnInfoPtr pScrn) { VIAPtr pVia = VIAPTR(pScrn); +#ifdef XSERVER_LIBPCIACCESS + int err; +#endif DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIAMapMMIO\n")); +#ifdef XSERVER_LIBPCIACCESS + pVia->FrameBufferBase = pVia->PciInfo->regions[0].base_addr; + pVia->MmioBase = pVia->PciInfo->regions[1].base_addr; +#else pVia->FrameBufferBase = pVia->PciInfo->memBase[0]; pVia->MmioBase = pVia->PciInfo->memBase[1]; +#endif xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "mapping MMIO @ 0x%lx with size 0x%x\n", pVia->MmioBase, VIA_MMIO_REGSIZE); - pVia->MapBase = xf86MapPciMem(pScrn->scrnIndex, VIDMEM_MMIO, pVia->PciTag, - pVia->MmioBase, VIA_MMIO_REGSIZE); +#ifdef XSERVER_LIBPCIACCESS + err = pci_device_map_range (pVia->PciInfo, + pVia->MmioBase, + VIA_MMIO_REGSIZE, + PCI_DEV_MAP_FLAG_WRITABLE, + (void **) &pVia->MapBase); + + if (err) + { + xf86DrvMsg (pScrn->scrnIndex, X_ERROR, + "Unable to map mmio BAR. %s (%d)\n", + strerror (err), err); + return FALSE; + } +#else + pVia->MapBase = xf86MapPciMem(pScrn->scrnIndex, VIDMEM_MMIO, + pVia->PciTag, + pVia->MmioBase, VIA_MMIO_REGSIZE); + if (!pVia->MapBase) + return FALSE; +#endif xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "mapping BitBlt MMIO @ 0x%lx with size 0x%x\n", pVia->MmioBase + VIA_MMIO_BLTBASE, VIA_MMIO_BLTSIZE); - pVia->BltBase = xf86MapPciMem(pScrn->scrnIndex, VIDMEM_MMIO, pVia->PciTag, - pVia->MmioBase + VIA_MMIO_BLTBASE, - VIA_MMIO_BLTSIZE); +#ifdef XSERVER_LIBPCIACCESS + err = pci_device_map_range (pVia->PciInfo, + pVia->MmioBase + VIA_MMIO_BLTBASE, + VIA_MMIO_BLTSIZE, + (PCI_DEV_MAP_FLAG_WRITABLE + |PCI_DEV_MAP_FLAG_WRITE_COMBINE), + (void **) &pVia->BltBase); + + if (err) + { + xf86DrvMsg (pScrn->scrnIndex, X_ERROR, + "Unable to map blt BAR. %s (%d)\n", + strerror (err), err); + return FALSE; + } +#else + pVia->BltBase = xf86MapPciMem(pScrn->scrnIndex, VIDMEM_MMIO, + pVia->PciTag, + pVia->MmioBase + VIA_MMIO_BLTBASE, + VIA_MMIO_BLTSIZE); + if (!pVia->BltBase) + return FALSE; +#endif if (!pVia->MapBase || !pVia->BltBase) { xf86DrvMsg(pScrn->scrnIndex, X_ERROR, @@ -2073,6 +2261,9 @@ static Bool VIAMapFB(ScrnInfoPtr pScrn) { VIAPtr pVia = VIAPTR(pScrn); +#ifdef XSERVER_LIBPCIACCESS + int err; +#endif DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIAMapFB\n")); xf86DrvMsg(pScrn->scrnIndex, X_PROBED, @@ -2087,6 +2278,7 @@ VIAMapFB(ScrnInfoPtr pScrn) * in the OS support layer. */ +#ifndef XSERVER_LIBPCIACCESS unsigned char *tmp; tmp = xf86MapPciMem(pScrn->scrnIndex, VIDMEM_MMIO, @@ -2104,10 +2296,24 @@ VIAMapFB(ScrnInfoPtr pScrn) pVia->videoRambytes); xf86UnMapVidMem(pScrn->scrnIndex, (pointer) tmp, pVia->videoRambytes); +#endif /* * End of hack. */ +#ifdef XSERVER_LIBPCIACCESS + err = pci_device_map_range (pVia->PciInfo, pVia->FrameBufferBase, + pVia->videoRambytes, + PCI_DEV_MAP_FLAG_WRITABLE, + (void **) &pVia->FBBase); + if (err) + { + xf86DrvMsg (pScrn->scrnIndex, X_ERROR, + "Unable to map mmio BAR. %s (%d)\n", + strerror (err), err); + return FALSE; + } +#else pVia->FBBase = xf86MapPciMem(pScrn->scrnIndex, VIDMEM_FRAMEBUFFER, pVia->PciTag, pVia->FrameBufferBase, pVia->videoRambytes); @@ -2117,6 +2323,7 @@ VIAMapFB(ScrnInfoPtr pScrn) "Internal error: could not map framebuffer\n"); return FALSE; } +#endif pVia->FBFreeStart = (pScrn->displayWidth * pScrn->bitsPerPixel >> 3) * pScrn->virtualY; @@ -2127,7 +2334,11 @@ VIAMapFB(ScrnInfoPtr pScrn) pVia->FBBase, pVia->FBFreeStart, pVia->FBFreeEnd); } +#ifdef XSERVER_LIBPCIACCESS + pScrn->memPhysBase = pVia->PciInfo->regions[0].base_addr; +#else pScrn->memPhysBase = pVia->PciInfo->memBase[0]; +#endif pScrn->fbOffset = 0; if (pVia->IsSecondary) pScrn->fbOffset = pScrn->videoRam << 10; @@ -2146,6 +2357,16 @@ VIAUnmapMem(ScrnInfoPtr pScrn) /* Disable MMIO */ ViaSeqMask(VGAHWPTR(pScrn), 0x1A, 0x00, 0x60); +#ifdef XSERVER_LIBPCIACCESS + if (pVia->MapBase) + pci_device_unmap_range(pVia->PciInfo, (pointer)pVia->MapBase, VIA_MMIO_REGSIZE); + + if (pVia->BltBase) + pci_device_unmap_range(pVia->PciInfo, (pointer)pVia->BltBase, VIA_MMIO_BLTSIZE); + + if (pVia->FBBase) + pci_device_unmap_range(pVia->PciInfo, (pointer)pVia->FBBase, pVia->videoRambytes); +#else if (pVia->MapBase) xf86UnMapVidMem(pScrn->scrnIndex, (pointer) pVia->MapBase, VIA_MMIO_REGSIZE); @@ -2157,6 +2378,7 @@ VIAUnmapMem(ScrnInfoPtr pScrn) if (pVia->FBBase) xf86UnMapVidMem(pScrn->scrnIndex, (pointer) pVia->FBBase, pVia->videoRambytes); +#endif } static void diff --git a/src/via_driver.h b/src/via_driver.h index 113c7be6a197..00f60fde1aa0 100644 --- a/src/via_driver.h +++ b/src/via_driver.h @@ -66,6 +66,10 @@ #include "via_dmabuffer.h" #include "via_3d.h" +#ifdef XSERVER_LIBPCIACCESS +#include <pciaccess.h> +#endif + #ifdef XF86DRI #define _XF86DRI_SERVER_ #include "sarea.h" @@ -234,8 +238,15 @@ typedef struct _VIA { int agpMem; CloseScreenProcPtr CloseScreen; - pciVideoPtr PciInfo; - PCITAG PciTag; +#ifdef XSERVER_LIBPCIACCESS + struct pci_device *PciInfo; + int mmio_bar; + int fb_bar; + PCITAG PciTag; +#else + pciVideoPtr PciInfo; + PCITAG PciTag; +#endif int Chipset; int ChipId; int ChipRev; diff --git a/src/via_id.c b/src/via_id.c index 63a4631df82d..867290948f3d 100644 --- a/src/via_id.c +++ b/src/via_id.c @@ -30,6 +30,7 @@ #endif #include "via_driver.h" +#include "via.h" #include "via_id.h" /* @@ -228,15 +229,15 @@ ViaCheckCardId(ScrnInfoPtr pScrn) struct ViaCardIdStruct *Id; VIAPtr pVia = VIAPTR(pScrn); - if ((pVia->PciInfo->subsysVendor == pVia->PciInfo->vendor) && - (pVia->PciInfo->subsysCard == pVia->PciInfo->chipType)) + if ((SUBVENDOR_ID(pVia->PciInfo) == VENDOR_ID(pVia->PciInfo)) && + (SUBSYS_ID(pVia->PciInfo) == DEVICE_ID(pVia->PciInfo))) xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "Manufacturer plainly copied main PCI IDs to subsystem/card IDs.\n"); for (Id = ViaCardId; Id->String; Id++) { if ((Id->Chip == pVia->Chipset) && - (Id->Vendor == pVia->PciInfo->subsysVendor) && - (Id->Device == pVia->PciInfo->subsysCard)) { + (Id->Vendor == SUBVENDOR_ID(pVia->PciInfo)) && + (Id->Device == SUBSYS_ID(pVia->PciInfo))) { xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "Detected %s.\n", Id->String); pVia->Id = Id; return; @@ -245,7 +246,7 @@ ViaCheckCardId(ScrnInfoPtr pScrn) xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Unknown Card-Ids (%4X|%4X|%4X); please report to openchrome-users@openchrome.org\n", - pVia->PciInfo->chipType, pVia->PciInfo->subsysVendor, pVia->PciInfo->subsysCard); + DEVICE_ID(pVia->PciInfo), SUBVENDOR_ID(pVia->PciInfo), SUBSYS_ID(pVia->PciInfo)); pVia->Id = NULL; } diff --git a/src/via_memcpy.c b/src/via_memcpy.c index a46ecc003fec..d933ba042ea3 100644 --- a/src/via_memcpy.c +++ b/src/via_memcpy.c @@ -322,7 +322,7 @@ libc_YUV42X(unsigned char *dst, const unsigned char *src, if (dstPitch == w) { int size = h * ((yuv422) ? w : (w + (w >> 1))); - xf86memcpy(dst, src, size); + memcpy(dst, src, size); return; } else { int count; @@ -330,7 +330,7 @@ libc_YUV42X(unsigned char *dst, const unsigned char *src, /* Copy Y component to video memory. */ count = h; while (count--) { - xf86memcpy(dst, src, w); + memcpy(dst, src, w); src += w; dst += dstPitch; } @@ -343,7 +343,7 @@ libc_YUV42X(unsigned char *dst, const unsigned char *src, /* Copy V(Cr),U(Cb) components to video memory. */ count = h; while (count--) { - xf86memcpy(dst, src, w); + memcpy(dst, src, w); src += w; dst += dstPitch; } |