[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

xserver-xorg-video-mga: Changes to 'upstream-unstable'



 configure.ac      |   22 +++++++-
 src/Makefile.am   |    9 +--
 src/compat-api.h  |   99 ++++++++++++++++++++++++++++++++++++++
 src/mga.h         |   64 ++++++++++++++-----------
 src/mga_arc.c     |    2 
 src/mga_bios.c    |    3 -
 src/mga_dac3026.c |    3 -
 src/mga_dacG.c    |    5 -
 src/mga_dga.c     |   24 +++++----
 src/mga_dh.c      |    3 -
 src/mga_dri.c     |   33 +++++-------
 src/mga_driver.c  |  138 ++++++++++++++++++++++++------------------------------
 src/mga_exa.c     |   11 +---
 src/mga_g450pll.c |    3 -
 src/mga_hwcurs.c  |    3 -
 src/mga_merge.c   |   63 ++++++++++++------------
 src/mga_merge.h   |    6 +-
 src/mga_shadow.c  |    7 +-
 src/mga_storm.c   |   31 +++++++++---
 src/mga_video.c   |   21 ++++----
 20 files changed, 332 insertions(+), 218 deletions(-)

New commits:
commit fcd27b2b4ab2a181d5263296e71cda2d8772ba2d
Author: Dave Airlie <airlied@redhat.com>
Date:   Fri Sep 28 11:36:44 2012 +1000

    mga: bump release to 1.6.2

diff --git a/configure.ac b/configure.ac
index 1b6c20f..fca1a9c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -23,7 +23,7 @@
 # Initialize Autoconf
 AC_PREREQ([2.60])
 AC_INIT([xf86-video-mga],
-        [1.6.1],
+        [1.6.2],
         [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
         [xf86-video-mga])
 AC_CONFIG_SRCDIR([Makefile.am])

commit 29de36da0ed031815bd302f55f2ef5cc0cce6cc6
Author: Dave Airlie <airlied@redhat.com>
Date:   Fri Sep 28 10:54:00 2012 +1000

    mga: bring dri1 back to life.
    
    we need to at least setup the memory manager bits so dri1 clients
    get a backbuffer. this at least gets gears working again without XAA.
    
    Signed-off-by: Dave Airlie <airlied@redhat.com>

diff --git a/src/Makefile.am b/src/Makefile.am
index 79745d1..8227c05 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -55,6 +55,7 @@ mga_drv_la_SOURCES = \
          mga_ucode.h \
 	 mga_vga.c \
          mga_video.c \
+         mga_storm.c \
          compat-api.h
 
 if DRI
@@ -71,6 +72,5 @@ endif
 
 if XAA
 mga_drv_la_SOURCES += \
-    mga_arc.c \
-    mga_storm.c
+    mga_arc.c
 endif
diff --git a/src/mga_dri.c b/src/mga_dri.c
index 0154671..3923c04 100644
--- a/src/mga_dri.c
+++ b/src/mga_dri.c
@@ -922,13 +922,11 @@ static void MGADRIInitBuffersXAA(WindowPtr pWin, RegionPtr prgn,
 }
 #endif
 
-#ifdef USE_EXA
 static void MGADRIInitBuffersEXA(WindowPtr pWin, RegionPtr prgn,
                                  CARD32 index)
 {
     /* FIXME */
 }
-#endif
 
 #ifdef USE_XAA
 /*
@@ -1078,13 +1076,11 @@ static void MGADRIMoveBuffersXAA(WindowPtr pParent, DDXPointRec ptOldOrg,
 }
 #endif
 
-#ifdef USE_EXA
 static void MGADRIMoveBuffersEXA(WindowPtr pParent, DDXPointRec ptOldOrg,
                                  RegionPtr prgnSrc, CARD32 index)
 {
     /* FIXME */
 }
-#endif
 
 Bool MGADRIScreenInit( ScreenPtr pScreen )
 {
@@ -1231,6 +1227,8 @@ Bool MGADRIScreenInit( ScreenPtr pScreen )
       pDRIInfo->SwapContext = MGADRISwapContext;
    }
 
+   pDRIInfo->InitBuffers = MGADRIInitBuffersEXA;
+   pDRIInfo->MoveBuffers = MGADRIMoveBuffersEXA;
 #ifdef USE_EXA
     if (pMga->Exa) {
         pDRIInfo->InitBuffers = MGADRIInitBuffersEXA;
diff --git a/src/mga_driver.c b/src/mga_driver.c
index 3db3a74..8c4bb9c 100644
--- a/src/mga_driver.c
+++ b/src/mga_driver.c
@@ -3398,11 +3398,7 @@ MGAScreenInit(SCREEN_INIT_ARGS_DECL)
 	    mgaExaInit(pScreen);
 	else
 #endif
-#ifdef XAA
 	    MGAStormAccelInit(pScreen);
-#else
-	    ;
-#endif
     }
 
     xf86SetBackingStore(pScreen);
@@ -4184,14 +4180,3 @@ MGAG100BlackMagic(ScrnInfoPtr pScrn)
     OUTREG(MGAREG_MACCESS, 1<<15);
     usleep(10);
 }
-
-#ifndef HAVE_XAA_H
-void MGAStormEngineInit( ScrnInfoPtr pScrn )
-{
-}
-
-void
-MGAStormSync(ScrnInfoPtr pScrn)
-{
-}
-#endif
diff --git a/src/mga_storm.c b/src/mga_storm.c
index c32caf4..fb0e7be 100644
--- a/src/mga_storm.c
+++ b/src/mga_storm.c
@@ -15,8 +15,10 @@
 #include "xf86Pci.h"
 
 /* Drivers that use XAA need this */
+#ifdef HAVE_XAA_H
 #include "xaa.h"
 #include "xaalocal.h"
+#endif
 #include "xf86fbman.h"
 #include "miline.h"
 #include "servermd.h"
@@ -59,6 +61,7 @@ do { \
   XAAMoveDWORDS((d),(s),(c)); \
 } while (0)
 
+#ifdef HAVE_XAA_H
 static void mgaSetupForSolidFill( ScrnInfoPtr pScrn, int color,
     int rop, unsigned int planemask );
 
@@ -569,10 +572,13 @@ MGASubsequentCPUToScreenTexture (
 
 
 #endif /* defined(RENDER) */
+#endif
 
 Bool mgaAccelInit( ScreenPtr pScreen )
 {
+#ifdef HAVE_XAA_H
     XAAInfoRecPtr infoPtr;
+#endif
     ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     MGAPtr pMga = MGAPTR(pScrn);
     int maxFastBlitMem, maxlines;
@@ -583,8 +589,10 @@ Bool mgaAccelInit( ScreenPtr pScreen )
     pMga->ScratchBuffer = malloc(((pScrn->displayWidth * pMga->CurrentLayout.bitsPerPixel) + 127) >> 3);
     if(!pMga->ScratchBuffer) return FALSE;
 
+#ifdef HAVE_XAA_H
     pMga->AccelInfoRec = infoPtr = XAACreateInfoRec();
     if(!infoPtr) return FALSE;
+#endif
 
     pMga->RenderTime = 0;
     pMga->LinearScratch = 0;
@@ -617,6 +625,7 @@ Bool mgaAccelInit( ScreenPtr pScreen )
 	pMga->AtypeNoBLK = MGAAtypeNoBLK;
     }
 
+#ifdef HAVE_XAA_H
     /* fill out infoPtr here */
     infoPtr->Flags = 	PIXMAP_CACHE |
 			OFFSCREEN_PIXMAPS |
@@ -782,6 +791,8 @@ Bool mgaAccelInit( ScreenPtr pScreen )
 	pMga->MaxFastBlitY = maxFastBlitMem / (pScrn->displayWidth * pMga->CurrentLayout.bitsPerPixel / 8);
     }
 
+#endif
+
     switch (pMga->Chipset) {
     case PCI_CHIP_MGAG200_SE_A_PCI:
     case PCI_CHIP_MGAG200_SE_B_PCI:
@@ -917,6 +928,7 @@ Bool mgaAccelInit( ScreenPtr pScreen )
 
     }
 
+#ifdef HAVE_XAA_H
     for (i = 0; i < pScrn->numEntities; i++) {
 	if (xf86IsEntityShared(pScrn->entityList[i])) {
 	    infoPtr->RestoreAccelState = mgaRestoreAccelState;
@@ -949,9 +961,13 @@ Bool mgaAccelInit( ScreenPtr pScreen )
 #endif /* defined(RENDER) */
 
     return(XAAInit(pScreen, infoPtr));
+#else
+    return TRUE;
+#endif
 }
 
 
+#ifdef HAVE_XAA_H
 /* Support for multiscreen */
 static void mgaRestoreAccelState(ScrnInfoPtr pScrn)
 {
@@ -994,7 +1010,7 @@ static void mgaRestoreAccelState(ScrnInfoPtr pScrn)
    OUTREG(MGAREG_YBOT, 0x007FFFFF);    /* maxPixelPointer */
    pMga->AccelFlags &= ~CLIPPER_ON;
 }
-
+#endif
 
 CARD32 MGAAtype[16] = {
    MGADWG_RPL  | 0x00000000, MGADWG_RSTR | 0x00080000,
@@ -1080,9 +1096,11 @@ void MGAStormEngineInit( ScrnInfoPtr pScrn )
     opmode &= ~0x30000;
 #endif
 
+#ifdef HAVE_XAA_H
     pMga->SetupForSolidFill = mgaSetupForSolidFill;
     pMga->SubsequentSolidFillRect = mgaSubsequentSolidFillRect;
     pMga->RestoreAccelState = mgaRestoreAccelState;
+#endif
 
 
     pMga->fifoCount = 0;
@@ -1155,6 +1173,7 @@ void MGAStormEngineInit( ScrnInfoPtr pScrn )
 }
 
 
+#ifdef HAVE_XAA_H
 static void
 MGASetClippingRectangle(
    ScrnInfoPtr pScrn,
@@ -2534,3 +2553,4 @@ MGAFillCacheBltRects(
 
     SET_SYNC_FLAG(infoRec);
 }
+#endif

commit e777a2845bfeefad386db35d694e4b1cd74a0dd5
Author: Dave Airlie <airlied@redhat.com>
Date:   Wed Sep 26 15:18:44 2012 +1000

    mga: add stub storm functions if not using XAA
    
    If we aren't using XAA just add stub storm init/sync functions.
    
    This lets the driver load yay.
    
    Signed-off-by: Dave Airlie <airlied@redhat.com>

diff --git a/src/mga_driver.c b/src/mga_driver.c
index f4f54a1..3db3a74 100644
--- a/src/mga_driver.c
+++ b/src/mga_driver.c
@@ -4185,3 +4185,13 @@ MGAG100BlackMagic(ScrnInfoPtr pScrn)
     usleep(10);
 }
 
+#ifndef HAVE_XAA_H
+void MGAStormEngineInit( ScrnInfoPtr pScrn )
+{
+}
+
+void
+MGAStormSync(ScrnInfoPtr pScrn)
+{
+}
+#endif

commit 220e06fefe77175d9827954e61549eadda245d9a
Author: Adam Jackson <ajax@redhat.com>
Date:   Tue Sep 25 08:54:42 2012 -0400

    Remove mibstore.h
    
    Signed-off-by: Adam Jackson <ajax@redhat.com>

diff --git a/src/mga_driver.c b/src/mga_driver.c
index b3fe538..f4f54a1 100644
--- a/src/mga_driver.c
+++ b/src/mga_driver.c
@@ -73,9 +73,6 @@
 /* All drivers initialising the SW cursor need this */
 #include "mipointer.h"
 
-/* All drivers implementing backing store need this */
-#include "mibstore.h"
-
 #include "micmap.h"
 
 #include "xf86DDC.h"
@@ -3408,7 +3405,6 @@ MGAScreenInit(SCREEN_INIT_ARGS_DECL)
 #endif
     }
 
-    miInitializeBackingStore(pScreen);
     xf86SetBackingStore(pScreen);
     xf86SetSilkenMouse(pScreen);
 

commit cd41eacaeabf8227197d605b055713ca654633d5
Author: Dave Airlie <airlied@redhat.com>
Date:   Tue Jul 17 16:05:09 2012 +1000

    xf86-video-mga: bump to version 1.6.1
    
    Signed-off-by: Dave Airlie <airlied@redhat.com>

diff --git a/configure.ac b/configure.ac
index cc2498e..1b6c20f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -23,7 +23,7 @@
 # Initialize Autoconf
 AC_PREREQ([2.60])
 AC_INIT([xf86-video-mga],
-        [1.6.0],
+        [1.6.1],
         [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
         [xf86-video-mga])
 AC_CONFIG_SRCDIR([Makefile.am])

commit f11a407ceb0857bb0d33811511117b490a8ae6ee
Author: Dave Airlie <airlied@gmail.com>
Date:   Sun Jul 15 19:41:28 2012 +1000

    mga: fix after XAA removal
    
    Fix mga build after XAA removal.
    
    Signed-off-by: Dave Airlie <airlied@redhat.com>

diff --git a/configure.ac b/configure.ac
index fd870b8..cc2498e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -126,8 +126,24 @@ if test "x$XSERVER_LIBPCIACCESS" = xyes; then
 fi
 AM_CONDITIONAL(XSERVER_LIBPCIACCESS, test "x$XSERVER_LIBPCIACCESS" = xyes)
 
-AM_CONDITIONAL(USE_XAA, true)
-AC_DEFINE(USE_XAA, 1, [Build support for XAA])
+
+AC_ARG_ENABLE(xaa,
+              AS_HELP_STRING([--enable-xaa],
+                             [Enable legacy X Acceleration Architecture (XAA) [default=auto]]),
+              [XAA="$enableval"],
+              [XAA=auto])
+if test "x$XAA" != xno; then
+        save_CFLAGS=$CFLAGS
+        save_CPPFLAGS=$CPPFLAGS
+        CFLAGS=$XORG_CFLAGS
+        CPPFLAGS="$XORG_CFLAGS"
+        AC_CHECK_HEADERS([xaa.h], XAA=yes, XAA=no)
+        CFLAGS=$save_CFLAGS
+        CPPFLAGS=$save_CPPFLAGS
+fi
+AC_MSG_CHECKING([whether to include XAA support])
+AM_CONDITIONAL(XAA, test "x$XAA" = xyes)
+AC_MSG_RESULT([$XAA])
 
 # Properly handle EXA.
 AC_MSG_CHECKING([whether to enable EXA support])
diff --git a/src/Makefile.am b/src/Makefile.am
index 46f0265..79745d1 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -32,7 +32,6 @@ mga_drv_la_LIBADD = $(noinst_LTLIBRARIES)
 mga_drv_la_SOURCES = \
          binding.h \
          client.h \
-         mga_arc.c \
          mga_bios.c \
          mga_common.h \
          mga_dac3026.c \
@@ -70,7 +69,8 @@ mga_drv_la_SOURCES += \
     mga_exa.c
 endif
 
-if USE_XAA
+if XAA
 mga_drv_la_SOURCES += \
+    mga_arc.c \
     mga_storm.c
 endif
diff --git a/src/mga.h b/src/mga.h
index 5856a3f..34695c1 100644
--- a/src/mga.h
+++ b/src/mga.h
@@ -20,7 +20,10 @@
 #include <stdio.h>
 
 #include "compiler.h"
+#ifdef HAVE_XAA_H
 #include "xaa.h"
+#endif
+#include "xf86fbman.h"
 #include "exa.h"
 #include "xf86Cursor.h"
 #include "vgaHW.h"
@@ -554,7 +557,9 @@ typedef struct {
     CARD32		MAccess;
     int			FifoSize;
     int			StyleLen;
+#ifdef HAVE_XAA_H
     XAAInfoRecPtr	AccelInfoRec;
+#endif
     xf86CursorInfoPtr	CursorInfoRec;
     DGAModePtr		DGAModes;
     int			numDGAModes;
@@ -715,7 +720,7 @@ void MGAAdjustGranularity(ScrnInfoPtr pScrn, int* x, int* y);
 void MGA2064SetupFuncs(ScrnInfoPtr pScrn);
 void MGAGSetupFuncs(ScrnInfoPtr pScrn);
 
-/* #ifdef USE_XAA */
+/*#ifdef USE_XAA */
 void MGAStormSync(ScrnInfoPtr pScrn);
 void MGAStormEngineInit(ScrnInfoPtr pScrn);
 Bool MGAStormAccelInit(ScreenPtr pScreen);
diff --git a/src/mga_arc.c b/src/mga_arc.c
index 5263f1f..61ade3b 100644
--- a/src/mga_arc.c
+++ b/src/mga_arc.c
@@ -39,8 +39,10 @@ in this Software without prior written authorization from The Open Group.
 #include "mizerarc.h"
 #include "mi.h"
 #include "scrnintstr.h"
+#ifdef HAVE_XAA_H
 #include "xaa.h"
 #include "xaalocal.h"
+#endif
 #include "xf86.h"
 #include "xf86_OSproc.h"
 
diff --git a/src/mga_dga.c b/src/mga_dga.c
index a806eb2..ef03688 100644
--- a/src/mga_dga.c
+++ b/src/mga_dga.c
@@ -5,8 +5,6 @@
 #include "xf86.h"
 #include "xf86_OSproc.h"
 #include "xf86Pci.h"
-#include "xaa.h"
-#include "xaalocal.h"
 #include "mga.h"
 #include "mga_reg.h"
 #include "dgaproc.h"
@@ -17,10 +15,12 @@ static Bool MGA_OpenFramebuffer(ScrnInfoPtr, char **, unsigned char **,
 static Bool MGA_SetMode(ScrnInfoPtr, DGAModePtr);
 static int  MGA_GetViewport(ScrnInfoPtr);
 static void MGA_SetViewport(ScrnInfoPtr, int, int, int);
+#ifdef HAVE_XAA_H
 static void MGA_FillRect(ScrnInfoPtr, int, int, int, int, unsigned long);
 static void MGA_BlitRect(ScrnInfoPtr, int, int, int, int, int, int);
 static void MGA_BlitTransRect(ScrnInfoPtr, int, int, int, int, int, int, 
 					unsigned long);
+#endif
 
 static
 DGAFunctionRec MGA_DGAFuncs = {
@@ -30,9 +30,13 @@ DGAFunctionRec MGA_DGAFuncs = {
    MGA_SetViewport,
    MGA_GetViewport,
    MGAStormSync,
+#ifdef HAVE_XAA_H
    MGA_FillRect,
    MGA_BlitRect,
    MGA_BlitTransRect
+#else
+   NULL, NULL, NULL
+#endif
 };
 
 
@@ -120,11 +124,13 @@ SECOND_PASS:
 	    mode->flags = DGA_CONCURRENT_ACCESS;
             if(pixmap)
 		mode->flags |= DGA_PIXMAP_AVAILABLE;
+#ifdef HAVE_XAA_H
 	    if(!pMga->NoAccel) {
 		mode->flags |= DGA_FILL_RECT | DGA_BLIT_RECT;
 		if((Bpp != 3) && (pMga->Chipset != PCI_CHIP_MGA2064))
 		    mode->flags |= DGA_BLIT_RECT_TRANS;
 	    }
+#endif
 	    if(pMode->Flags & V_DBLSCAN)
 		mode->flags |= DGA_DOUBLESCAN;
 	    if(pMode->Flags & V_INTERLACE)
@@ -359,6 +365,7 @@ MGA_SetViewport(
    pMga->DGAViewportStatus = 0;  /* MGAAdjustFrame loops until finished */
 }
 
+#ifdef HAVE_XAA_H
 static void 
 MGA_FillRect (
    ScrnInfoPtr pScrn, 
@@ -424,7 +431,7 @@ static void MGA_BlitTransRect( ScrnInfoPtr pScrn, int srcx, int srcy,
 	SET_SYNC_FLAG(pMga->AccelInfoRec);
     }
 }
-
+#endif
 
 static Bool 
 MGA_OpenFramebuffer(
diff --git a/src/mga_dri.c b/src/mga_dri.c
index c517322..0154671 100644
--- a/src/mga_dri.c
+++ b/src/mga_dri.c
@@ -355,7 +355,7 @@ void MGAGetQuiescence( ScrnInfoPtr pScrn )
       MGAWaitForIdleDMA( pScrn );
 
         /* FIXME what about EXA? */
-#ifdef USE_XAA
+#ifdef XAA
         if (!pMga->Exa && pMga->AccelInfoRec) {
       WAITFIFO( 11 );
       OUTREG( MGAREG_MACCESS, pMga->MAccess );
diff --git a/src/mga_driver.c b/src/mga_driver.c
index e50d77b..b3fe538 100644
--- a/src/mga_driver.c
+++ b/src/mga_driver.c
@@ -90,7 +90,7 @@
 #include "mga_macros.h"
 #include "mga_maven.h"
 
-#ifdef USE_XAA
+#ifdef XAA
 #include "xaa.h"
 #endif
 
@@ -2118,7 +2118,7 @@ MGAPreInit(ScrnInfoPtr pScrn, int flags)
 	    }
 	} else {
 #endif
-#ifdef USE_XAA
+#ifdef XAA
 	    if (!xf86LoadSubModule(pScrn, "xaa")) {
 		xf86DrvMsg(pScrn->scrnIndex, X_INFO,
 		           "Falling back to shadowfb\n");
@@ -3401,8 +3401,10 @@ MGAScreenInit(SCREEN_INIT_ARGS_DECL)
 	    mgaExaInit(pScreen);
 	else
 #endif
-#ifdef USE_XAA
+#ifdef XAA
 	    MGAStormAccelInit(pScreen);
+#else
+	    ;
 #endif
     }
 
@@ -3771,7 +3773,7 @@ MGACloseScreen(CLOSE_SCREEN_ARGS_DECL)
        pMgaEnt->refCount--;
    }
 
-#ifdef USE_XAA
+#ifdef XAA
     if (pMga->AccelInfoRec)
 	XAADestroyInfoRec(pMga->AccelInfoRec);
 #endif
diff --git a/src/mga_video.c b/src/mga_video.c
index 00e026d..535e329 100644
--- a/src/mga_video.c
+++ b/src/mga_video.c
@@ -14,7 +14,6 @@
 #include "mga_macros.h"
 #include "xf86xv.h"
 #include <X11/extensions/Xv.h>
-#include "xaa.h"
 
 #ifdef USE_XAA
 #include "xaa.h"
@@ -1987,9 +1986,11 @@ MGAPutImageILOAD(
 
     bpp = pScrn->bitsPerPixel >> 3;
 
+#ifdef HAVE_XAA_H
     if( pMga->AccelInfoRec->NeedToSync && ((long)data != pPriv->lastPort) ) {
 	MGAStormSync(pScrn);
     }
+#endif
 
     pPriv->lastPort = (long)data;
     nbox=REGION_NUM_RECTS(clipBoxes);
@@ -2019,8 +2020,9 @@ MGAPutImageILOAD(
 	pbox++;
     }
 
-
+#ifdef HAVE_XAA_H
     pMga->AccelInfoRec->NeedToSync = TRUE;
+#endif
     pPriv->videoStatus = FREE_TIMER;
     pPriv->freeTime = currentTime.milliseconds + FREE_DELAY;
     pMga->VideoTimerCallback = MGAVideoTimerCallback;

commit fa0f3092ed38ce71ba9f65156bde306eb63feaf8
Author: Dave Airlie <airlied@redhat.com>
Date:   Mon Jul 2 12:08:05 2012 +0100

    mga: bump to 1.6.0
    
    Signed-off-by: Dave Airlie <airlied@redhat.com>

diff --git a/configure.ac b/configure.ac
index 933500d..fd870b8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -23,7 +23,7 @@
 # Initialize Autoconf
 AC_PREREQ([2.60])
 AC_INIT([xf86-video-mga],
-        [1.5.0],
+        [1.6.0],
         [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
         [xf86-video-mga])
 AC_CONFIG_SRCDIR([Makefile.am])

commit 7b6dcc4d5768cc8d17a1f664155ebdc8ca8c042e
Author: Dave Airlie <airlied@redhat.com>
Date:   Wed Jun 6 09:23:31 2012 +0100

    mga: port to new compat API.
    
    Signed-off-by: Dave Airlie <airlied@redhat.com>

diff --git a/src/Makefile.am b/src/Makefile.am
index 44417de..46f0265 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -55,7 +55,8 @@ mga_drv_la_SOURCES = \
          mga_shadow.c \
          mga_ucode.h \
 	 mga_vga.c \
-         mga_video.c
+         mga_video.c \
+         compat-api.h
 
 if DRI
 mga_drv_la_SOURCES += \
diff --git a/src/compat-api.h b/src/compat-api.h
new file mode 100644
index 0000000..6bc946f
--- /dev/null
+++ b/src/compat-api.h
@@ -0,0 +1,99 @@
+/*
+ * Copyright 2012 Red Hat, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Author: Dave Airlie <airlied@redhat.com>
+ */
+
+/* this file provides API compat between server post 1.13 and pre it,
+   it should be reused inside as many drivers as possible */
+#ifndef COMPAT_API_H
+#define COMPAT_API_H
+
+#ifndef GLYPH_HAS_GLYPH_PICTURE_ACCESSOR
+#define GetGlyphPicture(g, s) GlyphPicture((g))[(s)->myNum]
+#define SetGlyphPicture(g, s, p) GlyphPicture((g))[(s)->myNum] = p
+#endif
+
+#ifndef XF86_HAS_SCRN_CONV
+#define xf86ScreenToScrn(s) xf86Screens[(s)->myNum]
+#define xf86ScrnToScreen(s) screenInfo.screens[(s)->scrnIndex]
+#endif
+
+#ifndef XF86_SCRN_INTERFACE
+
+#define SCRN_ARG_TYPE int
+#define SCRN_INFO_PTR(arg1) ScrnInfoPtr pScrn = xf86Screens[(arg1)]
+
+#define SCREEN_ARG_TYPE int
+#define SCREEN_PTR(arg1) ScreenPtr pScreen = screenInfo.screens[(arg1)]
+
+#define SCREEN_INIT_ARGS_DECL int i, ScreenPtr pScreen, int argc, char **argv
+
+#define BLOCKHANDLER_ARGS_DECL int arg, pointer blockData, pointer pTimeout, pointer pReadmask
+#define BLOCKHANDLER_ARGS arg, blockData, pTimeout, pReadmask
+
+#define CLOSE_SCREEN_ARGS_DECL int scrnIndex, ScreenPtr pScreen
+#define CLOSE_SCREEN_ARGS scrnIndex, pScreen
+
+#define ADJUST_FRAME_ARGS_DECL int arg, int x, int y, int flags
+#define ADJUST_FRAME_ARGS(arg, x, y) (arg)->scrnIndex, x, y, 0
+
+#define SWITCH_MODE_ARGS_DECL int arg, DisplayModePtr mode, int flags
+#define SWITCH_MODE_ARGS(arg, m) (arg)->scrnIndex, m, 0
+
+#define FREE_SCREEN_ARGS_DECL int arg, int flags
+
+#define VT_FUNC_ARGS_DECL int arg, int flags
+#define VT_FUNC_ARGS pScrn->scrnIndex, 0
+
+#define XF86_SCRN_ARG(x) ((x)->scrnIndex)
+#else
+#define SCRN_ARG_TYPE ScrnInfoPtr
+#define SCRN_INFO_PTR(arg1) ScrnInfoPtr pScrn = (arg1)
+
+#define SCREEN_ARG_TYPE ScreenPtr
+#define SCREEN_PTR(arg1) ScreenPtr pScreen = (arg1)
+
+#define SCREEN_INIT_ARGS_DECL ScreenPtr pScreen, int argc, char **argv
+
+#define BLOCKHANDLER_ARGS_DECL ScreenPtr arg, pointer pTimeout, pointer pReadmask
+#define BLOCKHANDLER_ARGS arg, pTimeout, pReadmask
+
+#define CLOSE_SCREEN_ARGS_DECL ScreenPtr pScreen
+#define CLOSE_SCREEN_ARGS pScreen
+
+#define ADJUST_FRAME_ARGS_DECL ScrnInfoPtr arg, int x, int y
+#define ADJUST_FRAME_ARGS(arg, x, y) arg, x, y
+
+#define SWITCH_MODE_ARGS_DECL ScrnInfoPtr arg, DisplayModePtr mode
+#define SWITCH_MODE_ARGS(arg, m) arg, m
+
+#define FREE_SCREEN_ARGS_DECL ScrnInfoPtr arg
+
+#define VT_FUNC_ARGS_DECL ScrnInfoPtr arg
+#define VT_FUNC_ARGS pScrn
+
+#define XF86_SCRN_ARG(x) (x)
+
+#endif
+
+#endif
diff --git a/src/mga.h b/src/mga.h
index 7d94d59..5856a3f 100644
--- a/src/mga.h
+++ b/src/mga.h
@@ -46,6 +46,8 @@
 #include "mga_dri.h"
 #endif
 
+#include "compat-api.h"
+
 typedef enum {
     OPTION_SW_CURSOR,
     OPTION_HW_CURSOR,
@@ -564,7 +566,7 @@ typedef struct {
     void		(*Save)(ScrnInfoPtr, vgaRegPtr, MGARegPtr, Bool);
     void		(*Restore)(ScrnInfoPtr, vgaRegPtr, MGARegPtr, Bool);
     Bool		(*ModeInit)(ScrnInfoPtr, DisplayModePtr);
-    void		(*PointerMoved)(int index, int x, int y);
+    void		(*PointerMoved)(SCRN_ARG_TYPE arg, int x, int y);
     CloseScreenProcPtr	CloseScreen;
     ScreenBlockHandlerProcPtr BlockHandler;
     unsigned int	(*ddc1Read)(ScrnInfoPtr);
@@ -693,8 +695,8 @@ extern CARD32 MGAAtypeNoBLK[16];
 
 /* Prototypes */
 
-void MGAAdjustFrame(int scrnIndex, int x, int y, int flags);
-Bool MGASwitchMode(int scrnIndex, DisplayModePtr mode, int flags);
+void MGAAdjustFrame(ADJUST_FRAME_ARGS_DECL);
+Bool MGASwitchMode(SWITCH_MODE_ARGS_DECL);
 void MGAFillModeInfoStruct(ScrnInfoPtr pScrn, DisplayModePtr mode);
 Bool MGAGetRec(ScrnInfoPtr pScrn);
 void MGAProbeDDC(ScrnInfoPtr pScrn, int index);
@@ -703,7 +705,7 @@ void MGAFreeRec(ScrnInfoPtr pScrn);
 Bool mga_read_and_process_bios(ScrnInfoPtr pScrn);
 void MGADisplayPowerManagementSet(ScrnInfoPtr pScrn, int PowerManagementMode,
 				  int flags);
-void MGAAdjustFrameCrtc2(int scrnIndex, int x, int y, int flags);
+void MGAAdjustFrameCrtc2(ADJUST_FRAME_ARGS_DECL);
 void MGADisplayPowerManagementSetCrtc2(ScrnInfoPtr pScrn,
 					     int PowerManagementMode,
 					     int flags);
@@ -743,7 +745,7 @@ void mgaDoSetupForScreenToScreenCopy( ScrnInfoPtr pScrn, int xdir,
 void mgaDoSetupForSolidFill( ScrnInfoPtr pScrn, int color, int rop,
     unsigned int planemask, unsigned int bpp );
 
-void MGAPointerMoved(int index, int x, int y);
+void MGAPointerMoved(SCRN_ARG_TYPE arg, int x, int y);
 
 void MGAInitVideo(ScreenPtr pScreen);
 void MGAResetVideo(ScrnInfoPtr pScrn);
diff --git a/src/mga_dacG.c b/src/mga_dacG.c
index ea598be..9a80193 100644
--- a/src/mga_dacG.c
+++ b/src/mga_dacG.c
@@ -1794,7 +1794,7 @@ MGAGSetCursorColorsG100(ScrnInfoPtr pScrn, int bg, int fg)
 static Bool 
 MGAGUseHWCursor(ScreenPtr pScrn, CursorPtr pCurs)
 {
-    MGAPtr pMga = MGAPTR(xf86Screens[pScrn->myNum]);
+    MGAPtr pMga = MGAPTR(xf86ScreenToScrn(pScrn));
    /* This needs to detect if its on the second dac */
     if( XF86SCRNINFO(pScrn)->currentMode->Flags & V_DBLSCAN )
     	return FALSE;
diff --git a/src/mga_dga.c b/src/mga_dga.c
index 6c26e44..a806eb2 100644
--- a/src/mga_dga.c
+++ b/src/mga_dga.c
@@ -197,7 +197,7 @@ SECOND_PASS:
 Bool
 MGADGAInit(ScreenPtr pScreen)
 {   
-   ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+   ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
    MGAPtr pMga = MGAPTR(pScrn);
    DGAModePtr modes = NULL;
    int num = 0;
@@ -310,8 +310,8 @@ MGA_SetMode(
         memcpy(&pMga->CurrentLayout, &SavedLayouts[index], sizeof(MGAFBLayout));
                 
       pScrn->currentMode = pMga->CurrentLayout.mode;
-      pScrn->SwitchMode(index, pScrn->currentMode, 0);
-      MGAAdjustFrame(index, pScrn->frameX0, pScrn->frameY0, 0);
+      pScrn->SwitchMode(SWITCH_MODE_ARGS(pScrn, pScrn->currentMode));
+      MGAAdjustFrame(ADJUST_FRAME_ARGS(pScrn, pScrn->frameX0, pScrn->frameY0));
       pMga->DGAactive = FALSE;
    } else {
       if(!pMga->DGAactive) {  /* save the old parameters */
@@ -328,7 +328,7 @@ MGA_SetMode(
       pMga->CurrentLayout.weight.blue = BitsSet(pMode->blue_mask);
       /* MGAModeInit() will set the mode field */
 
-      pScrn->SwitchMode(index, pMode->mode, 0);
+      pScrn->SwitchMode(SWITCH_MODE_ARGS(pScrn, pMode->mode));
       /* not strictly required but nice */
       mgaDGASetPalette(pScrn);
    }
@@ -355,7 +355,7 @@ MGA_SetViewport(
 ){
    MGAPtr pMga = MGAPTR(pScrn);
 
-   MGAAdjustFrame(pScrn->pScreen->myNum, x, y, flags);
+   MGAAdjustFrame(ADJUST_FRAME_ARGS(pScrn, x, y));
    pMga->DGAViewportStatus = 0;  /* MGAAdjustFrame loops until finished */
 }
 
diff --git a/src/mga_dri.c b/src/mga_dri.c
index 4156bb5..c517322 100644
--- a/src/mga_dri.c
+++ b/src/mga_dri.c
@@ -74,7 +74,7 @@ static char MGAClientDriverName[] = "mga";
  */
 static Bool MGAInitVisualConfigs( ScreenPtr pScreen )
 {
-   ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+   ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
    MGAPtr pMga = MGAPTR(pScrn);
    int numConfigs = 0;
    __GLXvisualConfig *pConfigs = 0;
@@ -407,7 +407,7 @@ void MGAGetQuiescenceShared( ScrnInfoPtr pScrn )
 
 static void MGASwapContext( ScreenPtr pScreen )
 {
-   ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+   ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
    MGAPtr pMga = MGAPTR(pScrn);
 
    /* Arrange for dma_quiescence and xaa sync to be called as
@@ -420,7 +420,7 @@ static void MGASwapContext( ScreenPtr pScreen )
 
 static void MGASwapContextShared( ScreenPtr pScreen )
 {
-   ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+   ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
    MGAPtr pMga = MGAPTR(pScrn);
    MGAEntPtr pMGAEnt = pMga->entityPrivate;
    MGAPtr pMGA2 = MGAPTR(pMGAEnt->pScrn_2);
@@ -522,7 +522,7 @@ static unsigned int mylog2( unsigned int n )
  */
 static Bool MGADRIBootstrapDMA(ScreenPtr pScreen)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     MGAPtr pMga = MGAPTR(pScrn);
     MGADRIServerPrivatePtr pMGADRIServer = pMga->DRIServerInfo;
     int ret;
@@ -778,7 +778,7 @@ static Bool MGADRIBootstrapDMA(ScreenPtr pScreen)
 
 static Bool MGADRIKernelInit( ScreenPtr pScreen )
 {
-   ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+   ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
    MGAPtr pMga = MGAPTR(pScrn);
    MGADRIServerPrivatePtr pMGADRIServer = pMga->DRIServerInfo;
    drm_mga_init_t init;
@@ -838,7 +838,7 @@ static Bool MGADRIKernelInit( ScreenPtr pScreen )
  */
 static void MGADRIIrqInit(MGAPtr pMga, ScreenPtr pScreen)
 {
-   ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+   ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 
    if (!pMga->irq) {
       pMga->irq = drmGetInterruptFromBusID(pMga->drmFD,
@@ -873,7 +873,7 @@ static void MGADRIIrqInit(MGAPtr pMga, ScreenPtr pScreen)
 
 static Bool MGADRIBuffersInit( ScreenPtr pScreen )
 {
-   ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+   ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
    MGAPtr pMga = MGAPTR(pScrn);
    MGADRIServerPrivatePtr pMGADRIServer = pMga->DRIServerInfo;
 
@@ -896,7 +896,7 @@ static void MGADRIInitBuffersXAA(WindowPtr pWin, RegionPtr prgn,
                                  CARD32 index)
 {
     ScreenPtr pScreen = pWin->drawable.pScreen;
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     MGAPtr pMga = MGAPTR(pScrn);
     BoxPtr pbox = REGION_RECTS(prgn);
     int nbox  = REGION_NUM_RECTS(prgn);
@@ -941,7 +941,7 @@ static void MGADRIMoveBuffersXAA(WindowPtr pParent, DDXPointRec ptOldOrg,
                                  RegionPtr prgnSrc, CARD32 index)
 {
     ScreenPtr pScreen = pParent->drawable.pScreen;
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     MGAPtr pMga = MGAPTR(pScrn);
     int nbox;
     BoxPtr pbox, pboxTmp, pboxNext, pboxBase, pboxNew1, pboxNew2;
@@ -1088,7 +1088,7 @@ static void MGADRIMoveBuffersEXA(WindowPtr pParent, DDXPointRec ptOldOrg,
 
 Bool MGADRIScreenInit( ScreenPtr pScreen )
 {
-   ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+   ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
    MGAPtr pMga = MGAPTR(pScrn);
    DRIInfoPtr pDRIInfo;
    MGADRIPtr pMGADRI;
@@ -1367,7 +1367,7 @@ Bool MGADRIScreenInit( ScreenPtr pScreen )
 
 Bool MGADRIFinishScreenInit( ScreenPtr pScreen )
 {
-   ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+   ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
    MGAPtr pMga = MGAPTR(pScrn);
    MGADRIServerPrivatePtr pMGADRIServer = pMga->DRIServerInfo;
    MGADRIPtr pMGADRI;
@@ -1462,7 +1462,7 @@ Bool MGADRIFinishScreenInit( ScreenPtr pScreen )
 
 void MGADRICloseScreen( ScreenPtr pScreen )
 {
-   ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+   ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
    MGAPtr pMga = MGAPTR(pScrn);
    MGADRIServerPrivatePtr pMGADRIServer = pMga->DRIServerInfo;
    drm_mga_init_t init;
diff --git a/src/mga_driver.c b/src/mga_driver.c
index 0c04d74..e50d77b 100644
--- a/src/mga_driver.c
+++ b/src/mga_driver.c
@@ -118,12 +118,11 @@ static Bool MGAPciProbe(DriverPtr drv, int entity_num,
 static Bool	MGAProbe(DriverPtr drv, int flags);


Reply to: