xf86-video-ati: Branch 'master'

Dave Airlie airlied at kemper.freedesktop.org
Mon May 5 22:20:00 PDT 2008


 src/radeon_driver.c |   16 +++++++++++++++-
 src/radeon_probe.h  |    1 +
 2 files changed, 16 insertions(+), 1 deletion(-)

New commits:
commit 4568cb820d567c6909a4be956d7e79b91232535e
Author: Dave Airlie <airlied at linux.ie>
Date:   Wed May 7 01:19:39 2008 +1000

    radeon: zaphod fixes for pciaccess not allowing multiple MMIO maps

diff --git a/src/radeon_driver.c b/src/radeon_driver.c
index 202a190..2701f57 100644
--- a/src/radeon_driver.c
+++ b/src/radeon_driver.c
@@ -357,6 +357,12 @@ static void RADEONFreeRec(ScrnInfoPtr pScrn)
 static Bool RADEONMapMMIO(ScrnInfoPtr pScrn)
 {
     RADEONInfoPtr  info = RADEONPTR(pScrn);
+    RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn);
+
+    if (pRADEONEnt->MMIO) {
+        info->MMIO = pRADEONEnt->MMIO;
+        return TRUE;
+    }
 
 #ifndef XSERVER_LIBPCIACCESS
 
@@ -367,7 +373,6 @@ static Bool RADEONMapMMIO(ScrnInfoPtr pScrn)
 			       info->MMIOSize);
 
     if (!info->MMIO) return FALSE;
-
 #else
 
     void** result = (void**)&info->MMIO;
@@ -386,6 +391,7 @@ static Bool RADEONMapMMIO(ScrnInfoPtr pScrn)
 
 #endif
 
+    pRADEONEnt->MMIO = info->MMIO;
     return TRUE;
 }
 
@@ -395,6 +401,13 @@ static Bool RADEONMapMMIO(ScrnInfoPtr pScrn)
 static Bool RADEONUnmapMMIO(ScrnInfoPtr pScrn)
 {
     RADEONInfoPtr  info = RADEONPTR(pScrn);
+    RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn);
+
+    if (info->IsPrimary || info->IsSecondary) {
+      /* never unmap on zaphod */
+      info->MMIO = NULL;
+      return TRUE;
+    }
 
 #ifndef XSERVER_LIBPCIACCESS
     xf86UnMapVidMem(pScrn->scrnIndex, info->MMIO, info->MMIOSize);
@@ -402,6 +415,7 @@ static Bool RADEONUnmapMMIO(ScrnInfoPtr pScrn)
     pci_device_unmap_range(info->PciInfo, info->MMIO, info->MMIOSize);
 #endif
 
+    pRADEONEnt->MMIO = NULL;
     info->MMIO = NULL;
     return TRUE;
 }
diff --git a/src/radeon_probe.h b/src/radeon_probe.h
index 7983970..f03e997 100644
--- a/src/radeon_probe.h
+++ b/src/radeon_probe.h
@@ -588,6 +588,7 @@ typedef struct
     RADEONSaveRec     ModeReg;          /* Current mode                      */
     RADEONSaveRec     SavedReg;         /* Original (text) mode              */
 
+    void              *MMIO;            /* Map of MMIO region                */
 } RADEONEntRec, *RADEONEntPtr;
 
 /* radeon_probe.c */


More information about the xorg-commit mailing list