debian/changelog                                     |    8 
 debian/patches/02_tentatively_unbreak_dual_head.diff |  175 +++++++++++++++++++
 debian/patches/series                                |    1 
 3 files changed, 184 insertions(+)

New commits:
commit 0d291278a7c4cb645d915b8e44112c76625f95c7
Author: Cyril Brulebois <[email protected]>
Date:   Mon Nov 22 18:06:09 2010 +0100

    Upload to unstable.

diff --git a/debian/changelog b/debian/changelog
index 1718585..47672ec 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,10 +1,10 @@
-xserver-xorg-video-mga (1:1.4.11.dfsg-4+squeeze1) UNRELEASED; urgency=low
+xserver-xorg-video-mga (1:1.4.11.dfsg-4+squeeze1) unstable; urgency=low
 
   * Add patch: 02_tentatively_unbreak_dual_head.diff, tested by Ferenc
     Wágner (thanks!). Patch by Andy MacLean, stolen from LP's #292214
     (hopefully closes: #562209).
 
- -- Cyril Brulebois <[email protected]>  Mon, 22 Nov 2010 16:37:47 +0100
+ -- Cyril Brulebois <[email protected]>  Mon, 22 Nov 2010 18:05:24 +0100
 
 xserver-xorg-video-mga (1:1.4.11.dfsg-4) unstable; urgency=low
 

commit e276d587f460c0b23ba4e5c72a68b698ce43ac5b
Author: Cyril Brulebois <[email protected]>
Date:   Mon Nov 22 17:54:22 2010 +0100

    Tentatively unbreak dual head setups (Closes: #562209).
    
    Apply mga-driver-3.patch from Ubuntu's LP #292214 by Andy MacLean. First
    hunk dropped, tiny whitespace cleanup for the other hunks.

diff --git a/debian/changelog b/debian/changelog
index 4b78c44..1718585 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,11 @@
+xserver-xorg-video-mga (1:1.4.11.dfsg-4+squeeze1) UNRELEASED; urgency=low
+
+  * Add patch: 02_tentatively_unbreak_dual_head.diff, tested by Ferenc
+    Wágner (thanks!). Patch by Andy MacLean, stolen from LP's #292214
+    (hopefully closes: #562209).
+
+ -- Cyril Brulebois <[email protected]>  Mon, 22 Nov 2010 16:37:47 +0100
+
 xserver-xorg-video-mga (1:1.4.11.dfsg-4) unstable; urgency=low
 
   * Add support for G200EH, cherry-picked from upstream git (closes: #575271).
diff --git a/debian/patches/02_tentatively_unbreak_dual_head.diff 
b/debian/patches/02_tentatively_unbreak_dual_head.diff
new file mode 100644
index 0000000..0253448
--- /dev/null
+++ b/debian/patches/02_tentatively_unbreak_dual_head.diff
@@ -0,0 +1,175 @@
+From: Cyril Brulebois <[email protected]>
+Patch-By: Andy MacLean
+Patch-Name: mga-driver-3.patch
+Patch-URL: 
https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-mga/+bug/292214
+--- a/src/mga.h
++++ b/src/mga.h
+@@ -337,6 +337,13 @@ typedef struct {
+     int                       mastervideoRam;
+     int                       slavevideoRam;
+     Bool              directRenderingEnabled;
++
++    void *            mappedIOBase;
++    int                       mappedIOUsage;
++
++    void *            mappedILOADBase;
++    int                       mappedILOADUsage;
++
+     ScrnInfoPtr       pScrn_1;
+     ScrnInfoPtr       pScrn_2;
+ } MGAEntRec, *MGAEntPtr;
+--- a/src/mga_driver.c
++++ b/src/mga_driver.c
+@@ -2820,30 +2820,55 @@ MGAMapMem(ScrnInfoPtr pScrn)
+ #ifdef XSERVER_LIBPCIACCESS
+     struct pci_device *const dev = pMga->PciInfo;
+     struct pci_mem_region *region;
+-    void **memory[2];
+     int i, err;
+ #endif
+ 
+ 
+     if (!pMga->FBDev) {
+ #ifdef XSERVER_LIBPCIACCESS
+-        memory[pMga->io_bar] = &pMga->IOBase;
+-        memory[pMga->framebuffer_bar] = &pMga->FbBase;
++      pciaddr_t fbaddr = pMga->FbAddress;
++      pciaddr_t fbsize = pMga->FbMapSize;
++      err = pci_device_map_range(dev,
++                                 fbaddr, fbsize,
++                                 PCI_DEV_MAP_FLAG_WRITABLE,
++                                 (void **)&pMga->FbBase);
+ 
+-        for (i = 0; i < 2; i++) {
+-            region = &dev->regions[i];
+-            err = pci_device_map_range(dev,
+-                                       region->base_addr, region->size,
+-                                       PCI_DEV_MAP_FLAG_WRITABLE,
+-                                       memory[i]);
++      if (err) {
++          xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
++                     "Unable to map Framebuffer %08llX %llx.  %s (%d)\n",
++                     (long long)fbaddr, (long long)fbsize,
++                     strerror(err), err);
++          return FALSE;
++      }
++      else
++          xf86DrvMsg(pScrn->scrnIndex, X_INFO,
++                     "MAPPED Framebuffer %08llX %llx to %08llX.\n",
++                     (long long)fbaddr, (long long)fbsize,
++                     (long long)pMga->FbBase);
++
++      if(pMga->entityPrivate == NULL || pMga->entityPrivate->mappedIOUsage == 
0) {
++          region = &dev->regions[pMga->io_bar];
++          err = pci_device_map_range(dev,
++                                     region->base_addr, region->size,
++                                     PCI_DEV_MAP_FLAG_WRITABLE,
++                                     &pMga->IOBase);
++
++          if (err) {
++            xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
++                       "Unable to map IO Region %i.  %s (%d)\n",
++                       pMga->io_bar, strerror(err), err);
++            return FALSE;
++          }
++
++          if(pMga->entityPrivate != NULL)
++              pMga->entityPrivate->mappedIOBase = pMga->IOBase;
++      }
++      else
++              pMga->IOBase = pMga->entityPrivate->mappedIOBase;
++
++      if(pMga->entityPrivate != NULL)
++              pMga->entityPrivate->mappedIOUsage ++;
+ 
+-            if (err) {
+-                xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+-                           "Unable to map BAR %i.  %s (%d)\n",
+-                           i, strerror(err), err);
+-                return FALSE;
+-            }
+-        }
+ #else
+       /*
+        * For Alpha, we need to map SPARSE memory, since we need
+@@ -2885,16 +2910,27 @@ MGAMapMem(ScrnInfoPtr pScrn)
+     if (pMga->iload_bar != -1) {
+ #ifdef XSERVER_LIBPCIACCESS
+         region = &dev->regions[pMga->iload_bar];
+-        err = pci_device_map_range(dev,
+-                                   region->base_addr, region->size,
+-                                   PCI_DEV_MAP_FLAG_WRITABLE,
+-                                   (void *) &pMga->ILOADBase);
+-      if (err) {
+-          xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+-                     "Unable to map BAR 2 (ILOAD region).  %s (%d)\n",
+-                     strerror(err), err);
+-          return FALSE;
++
++      if(pMga->entityPrivate == NULL || pMga->entityPrivate->mappedILOADUsage 
== 0) {
++          err = pci_device_map_range(dev,
++                                     region->base_addr, region->size,
++                                     PCI_DEV_MAP_FLAG_WRITABLE,
++                                     (void *) &pMga->ILOADBase);
++          if (err) {
++            xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
++                       "Unable to map BAR 2 (ILOAD region).  %s (%d)\n",
++                       strerror(err), err);
++            return FALSE;
++          }
++
++          if(pMga->entityPrivate != NULL)
++              pMga->entityPrivate->mappedILOADBase = pMga->ILOADBase;
+       }
++      else
++              pMga->ILOADBase = pMga->entityPrivate->mappedILOADBase;
++
++      if(pMga->entityPrivate != NULL)
++              pMga->entityPrivate->mappedILOADUsage ++;
+ #else
+       pMga->ILOADBase = xf86MapPciMem(pScrn->scrnIndex,
+                                       VIDMEM_MMIO | VIDMEM_MMIO_32BIT |
+@@ -2924,10 +2960,20 @@ MGAUnmapMem(ScrnInfoPtr pScrn)
+     
+     if (!pMga->FBDev) {
+ #ifdef XSERVER_LIBPCIACCESS
+-        pci_device_unmap_range(dev, pMga->IOBase, 
+-                             dev->regions[pMga->io_bar].size);
++          if(pMga->entityPrivate != NULL)
++              pMga->entityPrivate->mappedIOUsage--;
++
++          if(pMga->entityPrivate == NULL || 
pMga->entityPrivate->mappedIOUsage == 0) {
++              pci_device_unmap_range(dev, pMga->IOBase,
++                                     dev->regions[pMga->io_bar].size);
++
++              if(pMga->entityPrivate != NULL)
++                      pMga->entityPrivate->mappedIOBase = NULL;
++          }
++
++          xf86DrvMsg(pScrn->scrnIndex, X_INFO, "UNMAPPING framebuffer 
0x%08llX, 0x%llX.\n", (long long)pMga->FbBase, (long long)pMga->FbMapSize);
+         pci_device_unmap_range(dev, pMga->FbBase, 
+-                             dev->regions[pMga->framebuffer_bar].size);
++                             pMga->FbMapSize);
+ #else
+       xf86UnMapVidMem(pScrn->scrnIndex, (pointer)pMga->IOBase, 0x4000);
+       xf86UnMapVidMem(pScrn->scrnIndex, (pointer)pMga->FbBase, 
pMga->FbMapSize);
+@@ -2940,8 +2986,17 @@ MGAUnmapMem(ScrnInfoPtr pScrn)
+ 
+     if ((pMga->iload_bar != -1) && (pMga->ILOADBase != NULL)) {
+ #ifdef XSERVER_LIBPCIACCESS
+-        pci_device_unmap_range(dev, pMga->ILOADBase,
+-                             dev->regions[pMga->iload_bar].size);
++          if(pMga->entityPrivate != NULL)
++              pMga->entityPrivate->mappedILOADUsage--;
++
++          if(pMga->entityPrivate == NULL || 
pMga->entityPrivate->mappedILOADUsage == 0) {
++              pci_device_unmap_range(dev, pMga->ILOADBase,
++                                     dev->regions[pMga->iload_bar].size);
++
++              if(pMga->entityPrivate != NULL)
++                  pMga->entityPrivate->mappedILOADBase = NULL;
++          }
++
+ #else
+       xf86UnMapVidMem(pScrn->scrnIndex, (pointer)pMga->ILOADBase, 0x800000);
+ #endif
diff --git a/debian/patches/series b/debian/patches/series
index b7e34e9..7b69d6a 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1 +1,2 @@
 01_no_nonfree.diff
+02_tentatively_unbreak_dual_head.diff


-- 
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]
Archive: http://lists.debian.org/[email protected]

Reply via email to