Module Name:    xsrc
Committed By:   mrg
Date:           Sun Jun  2 08:29:33 UTC 2013

Modified Files:
        xsrc/external/mit/xf86-video-mach64/dist/src: atipreinit.c atiprobe.c
        xsrc/external/mit/xf86-video-mga/dist/src: mga_dac3026.c mga_vga.c
        xsrc/external/mit/xf86-video-nv/dist/src: g80_output.c nv_driver.c
        xsrc/external/mit/xf86-video-r128/dist/src: r128.h r128_driver.c
Removed Files:
        xsrc/external/mit/xf86-video-mga/dist/src: clientlx.c
        xsrc/external/mit/xf86-video-r128/dist: README.r128 README.r128.sgml

Log Message:
merge xf86-video-mach64 6.9.4, xf86-video-mga 1.6.2, xf86-video-nv 2.1.20,
and xf86-video-r128 6.9.1.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 \
    xsrc/external/mit/xf86-video-mach64/dist/src/atipreinit.c
cvs rdiff -u -r1.2 -r1.3 \
    xsrc/external/mit/xf86-video-mach64/dist/src/atiprobe.c
cvs rdiff -u -r1.1.1.1 -r0 \
    xsrc/external/mit/xf86-video-mga/dist/src/clientlx.c
cvs rdiff -u -r1.2 -r1.3 \
    xsrc/external/mit/xf86-video-mga/dist/src/mga_dac3026.c \
    xsrc/external/mit/xf86-video-mga/dist/src/mga_vga.c
cvs rdiff -u -r1.2 -r1.3 \
    xsrc/external/mit/xf86-video-nv/dist/src/g80_output.c
cvs rdiff -u -r1.3 -r1.4 xsrc/external/mit/xf86-video-nv/dist/src/nv_driver.c
cvs rdiff -u -r1.1.1.1 -r0 xsrc/external/mit/xf86-video-r128/dist/README.r128 \
    xsrc/external/mit/xf86-video-r128/dist/README.r128.sgml
cvs rdiff -u -r1.3 -r1.4 xsrc/external/mit/xf86-video-r128/dist/src/r128.h
cvs rdiff -u -r1.7 -r1.8 \
    xsrc/external/mit/xf86-video-r128/dist/src/r128_driver.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: xsrc/external/mit/xf86-video-mach64/dist/src/atipreinit.c
diff -u xsrc/external/mit/xf86-video-mach64/dist/src/atipreinit.c:1.3 xsrc/external/mit/xf86-video-mach64/dist/src/atipreinit.c:1.4
--- xsrc/external/mit/xf86-video-mach64/dist/src/atipreinit.c:1.3	Wed Aug 15 17:35:03 2012
+++ xsrc/external/mit/xf86-video-mach64/dist/src/atipreinit.c	Sun Jun  2 08:29:33 2013
@@ -35,7 +35,6 @@
 #endif
 
 #include "ati.h"
-#include "atiadjust.h"
 #include "atiaudio.h"
 #include "atibus.h"
 #include "atichip.h"
@@ -57,6 +56,7 @@
 #include "atividmem.h"
 #include "atiwonderio.h"
 #include "atixv.h"
+#include "atiadjust.h"
 
 #include "vbe.h"
 #if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 6

Index: xsrc/external/mit/xf86-video-mach64/dist/src/atiprobe.c
diff -u xsrc/external/mit/xf86-video-mach64/dist/src/atiprobe.c:1.2 xsrc/external/mit/xf86-video-mach64/dist/src/atiprobe.c:1.3
--- xsrc/external/mit/xf86-video-mach64/dist/src/atiprobe.c:1.2	Thu Dec  4 22:29:41 2008
+++ xsrc/external/mit/xf86-video-mach64/dist/src/atiprobe.c	Sun Jun  2 08:29:33 2013
@@ -373,7 +373,7 @@ ATIMach64ProbeIO
 
 #ifndef AVOID_CPIO
 
-        static const IOADDRESS Mach64SparseIOBases[] = {
+        static const unsigned long Mach64SparseIOBases[] = {
             0x02ECU,
             0x01CCU,
             0x01C8U

Index: xsrc/external/mit/xf86-video-mga/dist/src/mga_dac3026.c
diff -u xsrc/external/mit/xf86-video-mga/dist/src/mga_dac3026.c:1.2 xsrc/external/mit/xf86-video-mga/dist/src/mga_dac3026.c:1.3
--- xsrc/external/mit/xf86-video-mga/dist/src/mga_dac3026.c:1.2	Fri Jun 12 01:55:07 2009
+++ xsrc/external/mit/xf86-video-mga/dist/src/mga_dac3026.c	Sun Jun  2 08:29:33 2013
@@ -42,9 +42,6 @@
 #include "xf86.h"
 #include "xf86_OSproc.h"
 
-/* Drivers for PCI hardware need this */
-#include "xf86PciInfo.h"
-
 /* Drivers that need to access the PCI config space directly need this */
 #include "xf86Pci.h"
 
Index: xsrc/external/mit/xf86-video-mga/dist/src/mga_vga.c
diff -u xsrc/external/mit/xf86-video-mga/dist/src/mga_vga.c:1.2 xsrc/external/mit/xf86-video-mga/dist/src/mga_vga.c:1.3
--- xsrc/external/mit/xf86-video-mga/dist/src/mga_vga.c:1.2	Sun May 15 23:44:47 2011
+++ xsrc/external/mit/xf86-video-mga/dist/src/mga_vga.c	Sun Jun  2 08:29:33 2013
@@ -2,6 +2,8 @@
 #include "config.h"
 #endif
 
+#include <unistd.h>
+
 #include "misc.h"
 #include "xf86.h"
 #include "xf86_OSproc.h"
@@ -198,17 +200,17 @@ MGAG200SESaveFonts(ScrnInfoPtr scrninfp,
     hwp->writeSeq(hwp, 0x04, 0x06); /* enable plane graphics */
     hwp->writeGr(hwp, 0x05, 0x00);  /* write mode 0, read mode 0 */
     hwp->writeGr(hwp, 0x06, 0x05);  /* set graphics */
-    if (hwp->FontInfo1 || (hwp->FontInfo1 = xalloc(FONT_AMOUNT))) {
+    if (hwp->FontInfo1 || (hwp->FontInfo1 = malloc(FONT_AMOUNT))) {
 	hwp->writeSeq(hwp, 0x02, 0x04); /* write to plane 2 */
 	hwp->writeGr(hwp, 0x04, 0x02);  /* read plane 2 */
 	slowbcopy_frombus(hwp->Base, hwp->FontInfo1, FONT_AMOUNT);
     }
-    if (hwp->FontInfo2 || (hwp->FontInfo2 = xalloc(FONT_AMOUNT))) {
+    if (hwp->FontInfo2 || (hwp->FontInfo2 = malloc(FONT_AMOUNT))) {
 	hwp->writeSeq(hwp, 0x02, 0x08); /* write to plane 3 */
 	hwp->writeGr(hwp, 0x04, 0x03);  /* read plane 3 */
 	slowbcopy_frombus(hwp->Base, hwp->FontInfo2, FONT_AMOUNT);
     }
-    if (hwp->TextInfo || (hwp->TextInfo = xalloc(2 * TEXT_AMOUNT))) {
+    if (hwp->TextInfo || (hwp->TextInfo = malloc(2 * TEXT_AMOUNT))) {
 	hwp->writeSeq(hwp, 0x02, 0x01); /* write to plane 0 */
 	hwp->writeGr(hwp, 0x04, 0x00);  /* read plane 0 */
 	slowbcopy_frombus(hwp->Base, hwp->TextInfo, TEXT_AMOUNT);

Index: xsrc/external/mit/xf86-video-nv/dist/src/g80_output.c
diff -u xsrc/external/mit/xf86-video-nv/dist/src/g80_output.c:1.2 xsrc/external/mit/xf86-video-nv/dist/src/g80_output.c:1.3
--- xsrc/external/mit/xf86-video-nv/dist/src/g80_output.c:1.2	Thu Jan 31 08:24:32 2013
+++ xsrc/external/mit/xf86-video-nv/dist/src/g80_output.c	Sun Jun  2 08:29:33 2013
@@ -254,13 +254,21 @@ static CARD32 i2cAddr(const int port)
 
 static void G80_I2CPutBits(I2CBusPtr b, int clock, int data)
 {
+#ifdef XF86_SCRN_INTERFACE
+    G80Ptr pNv = G80PTR(b->pScrn);
+#else
     G80Ptr pNv = G80PTR(xf86Screens[b->scrnIndex]);
+#endif
     pNv->reg[i2cAddr(b->DriverPrivate.val)/4] = 4 | clock | data << 1;
 }
 
 static void G80_I2CGetBits(I2CBusPtr b, int *clock, int *data)
 {
+#ifdef XF86_SCRN_INTERFACE
+    G80Ptr pNv = G80PTR(b->pScrn);
+#else
     G80Ptr pNv = G80PTR(xf86Screens[b->scrnIndex]);
+#endif
     unsigned char val;
 
     val = pNv->reg[i2cAddr(b->DriverPrivate.val)/4];
@@ -279,6 +287,9 @@ G80I2CInit(ScrnInfoPtr pScrn, const char
 
     i2c->BusName = strdup(name);
     i2c->scrnIndex = pScrn->scrnIndex;
+#ifdef XF86_SCRN_INTERFACE
+    i2c->pScrn = pScrn;
+#endif
     i2c->I2CPutBits = G80_I2CPutBits;
     i2c->I2CGetBits = G80_I2CGetBits;
     i2c->ByteTimeout = 2200; /* VESA DDC spec 3 p. 43 (+10 %) */
@@ -339,9 +350,9 @@ ProbeDDC(I2CBusPtr i2c)
     pNv->reg[addr/4] = 7;
     /* Should probably use xf86OutputGetEDID here */
 #ifdef EDID_COMPLETE_RAWDATA
-    monInfo = xf86DoEEDID(pScrn->scrnIndex, i2c, TRUE);
+    monInfo = xf86DoEEDID(XF86_SCRN_ARG(pScrn), i2c, TRUE);
 #else
-    monInfo = xf86DoEDID_DDC2(pScrn->scrnIndex, i2c);
+    monInfo = xf86DoEDID_DDC2(XF86_SCRN_ARG(pScrn), i2c);
 #endif
     pNv->reg[addr/4] = 3;
 

Index: xsrc/external/mit/xf86-video-nv/dist/src/nv_driver.c
diff -u xsrc/external/mit/xf86-video-nv/dist/src/nv_driver.c:1.3 xsrc/external/mit/xf86-video-nv/dist/src/nv_driver.c:1.4
--- xsrc/external/mit/xf86-video-nv/dist/src/nv_driver.c:1.3	Fri Nov  2 07:44:09 2012
+++ xsrc/external/mit/xf86-video-nv/dist/src/nv_driver.c	Sun Jun  2 08:29:33 2013
@@ -49,17 +49,16 @@ static Bool    NVPciProbe(DriverPtr, int
 static Bool    NVProbe(DriverPtr drv, int flags);
 #endif
 static Bool    NVPreInit(ScrnInfoPtr pScrn, int flags);
-static Bool    NVScreenInit(int Index, ScreenPtr pScreen, int argc,
-                            char **argv);
-static Bool    NVEnterVT(int scrnIndex, int flags);
-static Bool    NVEnterVTFBDev(int scrnIndex, int flags);
-static void    NVLeaveVT(int scrnIndex, int flags);
-static Bool    NVCloseScreen(int scrnIndex, ScreenPtr pScreen);
+static Bool    NVScreenInit(SCREEN_INIT_ARGS_DECL);
+static Bool    NVEnterVT(VT_FUNC_ARGS_DECL);
+static Bool    NVEnterVTFBDev(VT_FUNC_ARGS_DECL);
+static void    NVLeaveVT(VT_FUNC_ARGS_DECL);
+static Bool    NVCloseScreen(CLOSE_SCREEN_ARGS_DECL);
 static Bool    NVSaveScreen(ScreenPtr pScreen, int mode);
 
 /* Optional functions */
-static void    NVFreeScreen(int scrnIndex, int flags);
-static ModeStatus NVValidMode(int scrnIndex, DisplayModePtr mode,
+static void    NVFreeScreen(FREE_SCREEN_ARGS_DECL);
+static ModeStatus NVValidMode(SCRN_ARG_TYPE arg, DisplayModePtr mode,
 			      Bool verbose, int flags);
 #ifdef RANDR
 static Bool    NVDriverFunc(ScrnInfoPtr pScrnInfo, xorgDriverFuncOp op,
@@ -1051,31 +1050,31 @@ NVProbe(DriverPtr drv, int flags)
 
 /* Usually mandatory */
 Bool
-NVSwitchMode(int scrnIndex, DisplayModePtr mode, int flags)
+NVSwitchMode(SWITCH_MODE_ARGS_DECL)
 {
-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+    SCRN_INFO_PTR(arg);
 
     NVSync(pScrn);
     return NVModeInit(pScrn, mode);
 }
 
 static Bool
-NVSwitchModeVBE(int scrnIndex, DisplayModePtr mode, int flags)
+NVSwitchModeVBE(SWITCH_MODE_ARGS_DECL)
 {
-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+    SCRN_INFO_PTR(arg);
     NVPtr pNv = NVPTR(pScrn);
     const Bool disableAccess = pNv->accessEnabled;
 
     if(disableAccess)
-        pScrn->EnableDisableFBAccess(scrnIndex, FALSE);
+	pScrn->EnableDisableFBAccess(XF86_SCRN_ARG(pScrn), FALSE);
 
     NVSync(pScrn);
     if (!NVSetModeVBE(pScrn, mode))
         return FALSE;
-    NVAdjustFrame(scrnIndex, pScrn->frameX0, pScrn->frameY0, 0);
+    NVAdjustFrame(ADJUST_FRAME_ARGS(pScrn, pScrn->frameX0, pScrn->frameY0));
 
     if(disableAccess)
-        pScrn->EnableDisableFBAccess(scrnIndex, TRUE);
+        pScrn->EnableDisableFBAccess(XF86_SCRN_ARG(pScrn), TRUE);
 
     return TRUE;
 }
@@ -1086,9 +1085,9 @@ NVSwitchModeVBE(int scrnIndex, DisplayMo
  */
 /* Usually mandatory */
 void 
-NVAdjustFrame(int scrnIndex, int x, int y, int flags)
+NVAdjustFrame(ADJUST_FRAME_ARGS_DECL)
 {
-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+    SCRN_INFO_PTR(arg);
     int startAddr;
     NVPtr pNv = NVPTR(pScrn);
     NVFBLayout *pLayout = &pNv->CurrentLayout;
@@ -1107,14 +1106,14 @@ NVAdjustFrame(int scrnIndex, int x, int 
 
 /* Mandatory */
 static Bool
-NVEnterVT(int scrnIndex, int flags)
+NVEnterVT(VT_FUNC_ARGS_DECL)
 {
-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+    SCRN_INFO_PTR(arg);
     NVPtr pNv = NVPTR(pScrn);
 
     if (!NVModeInit(pScrn, pScrn->currentMode))
         return FALSE;
-    NVAdjustFrame(scrnIndex, pScrn->frameX0, pScrn->frameY0, 0);
+    NVAdjustFrame(ADJUST_FRAME_ARGS(pScrn, pScrn->frameX0, pScrn->frameY0));
 
     if(pNv->overlayAdaptor)
         NVResetVideo(pScrn);
@@ -1122,20 +1121,21 @@ NVEnterVT(int scrnIndex, int flags)
 }
 
 static Bool
-NVEnterVTFBDev(int scrnIndex, int flags)
+NVEnterVTFBDev(VT_FUNC_ARGS_DECL)
 {
-    fbdevHWEnterVT(scrnIndex,flags);
+    SCRN_INFO_PTR(arg);
+    fbdevHWEnterVT(VT_FUNC_ARGS);
     return TRUE;
 }
 
 static Bool
-NVEnterVTVBE(int scrnIndex, int flags)
+NVEnterVTVBE(VT_FUNC_ARGS_DECL)
 {
-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+    SCRN_INFO_PTR(arg);
 
     if (!NVSetModeVBE(pScrn, pScrn->currentMode))
         return FALSE;
-    NVAdjustFrame(scrnIndex, 0, 0, 0);
+    NVAdjustFrame(ADJUST_FRAME_ARGS(pScrn, 0, 0));
     return TRUE;
 }
 
@@ -1148,9 +1148,9 @@ NVEnterVTVBE(int scrnIndex, int flags)
 
 /* Mandatory */
 static void
-NVLeaveVT(int scrnIndex, int flags)
+NVLeaveVT(VT_FUNC_ARGS_DECL)
 {
-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+    SCRN_INFO_PTR(arg);
     NVPtr pNv = NVPTR(pScrn);
 
     NVSync(pScrn);
@@ -1159,31 +1159,26 @@ NVLeaveVT(int scrnIndex, int flags)
 }
 
 static void
-NVLeaveVTVBE(int scrnIndex, int flags)
+NVLeaveVTVBE(VT_FUNC_ARGS_DECL)
 {
-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+    SCRN_INFO_PTR(arg);
 
     NVSync(pScrn);
     NVSaveRestoreVBE(pScrn, MODE_RESTORE);
 }
 
 static void 
-NVBlockHandler (
-    int i, 
-    pointer blockData, 
-    pointer pTimeout,
-    pointer pReadmask
-)
+NVBlockHandler (BLOCKHANDLER_ARGS_DECL)
 {
-    ScreenPtr     pScreen = screenInfo.screens[i];
-    ScrnInfoPtr   pScrnInfo = xf86Screens[i];
+    SCREEN_PTR(arg);
+    ScrnInfoPtr   pScrnInfo = xf86ScreenToScrn(pScreen);
     NVPtr         pNv = NVPTR(pScrnInfo);
 
     if (pNv->DMAKickoffCallback)
         (*pNv->DMAKickoffCallback)(pScrnInfo);
     
     pScreen->BlockHandler = pNv->BlockHandler;
-    (*pScreen->BlockHandler) (i, blockData, pTimeout, pReadmask);
+    (*pScreen->BlockHandler) (BLOCKHANDLER_ARGS);
     pScreen->BlockHandler = NVBlockHandler;
 
     if (pNv->VideoTimerCallback) 
@@ -1201,9 +1196,9 @@ NVBlockHandler (
 
 /* Mandatory */
 static Bool
-NVCloseScreen(int scrnIndex, ScreenPtr pScreen)
+NVCloseScreen(CLOSE_SCREEN_ARGS_DECL)
 {
-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     NVPtr pNv = NVPTR(pScrn);
 
     if (pScrn->vtSema) {
@@ -1222,8 +1217,10 @@ NVCloseScreen(int scrnIndex, ScreenPtr p
 #ifndef AVOID_VGAHW
     vgaHWUnmapMem(pScrn);
 #endif
+#ifdef HAVE_XAA_H
     if (pNv->AccelInfoRec)
         XAADestroyInfoRec(pNv->AccelInfoRec);
+#endif
     if (pNv->CursorInfoRec)
         xf86DestroyCursorInfoRec(pNv->CursorInfoRec);
     if (pNv->ShadowPtr)
@@ -1238,16 +1235,17 @@ NVCloseScreen(int scrnIndex, ScreenPtr p
     pScrn->vtSema = FALSE;
     pScreen->CloseScreen = pNv->CloseScreen;
     pScreen->BlockHandler = pNv->BlockHandler;
-    return (*pScreen->CloseScreen)(scrnIndex, pScreen);
+    return (*pScreen->CloseScreen)(CLOSE_SCREEN_ARGS);
 }
 
 static void
-NVEnableDisableFBAccess(int scrnIndex, Bool enable)
+NVEnableDisableFBAccess(SCRN_ARG_TYPE arg, Bool enable)
 {
-    NVPtr pNv = NVPTR(xf86Screens[scrnIndex]);
+    SCRN_INFO_PTR(arg);
+    NVPtr pNv = NVPTR(pScrn);
 
     pNv->accessEnabled = enable;
-    pNv->EnableDisableFBAccess(scrnIndex, enable);
+    pNv->EnableDisableFBAccess(arg, enable);
 }
 
 
@@ -1255,16 +1253,17 @@ NVEnableDisableFBAccess(int scrnIndex, B
 
 /* Optional */
 static void
-NVFreeScreen(int scrnIndex, int flags)
+NVFreeScreen(FREE_SCREEN_ARGS_DECL)
 {
+    SCRN_INFO_PTR(arg);
     /*
      * This only gets called when a screen is being deleted.  It does not
      * get called routinely at the end of a server generation.
      */
   
     if (xf86LoaderCheckSymbol("vgaHWFreeHWRec"))
-	vgaHWFreeHWRec(xf86Screens[scrnIndex]);
-    NVFreeRec(xf86Screens[scrnIndex]);
+	vgaHWFreeHWRec(pScrn);
+    NVFreeRec(pScrn);
 }
 
 
@@ -1272,9 +1271,10 @@ NVFreeScreen(int scrnIndex, int flags)
 
 /* Optional */
 static ModeStatus
-NVValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose, int flags)
+NVValidMode(SCRN_ARG_TYPE arg, DisplayModePtr mode, Bool verbose, int flags)
 {
-    NVPtr pNv = NVPTR(xf86Screens[scrnIndex]);
+    SCRN_INFO_PTR(arg);
+    NVPtr pNv = NVPTR(pScrn);
 
     if(pNv->fpWidth && pNv->fpHeight)
       if((pNv->fpWidth < mode->HDisplay) || (pNv->fpHeight < mode->VDisplay))
@@ -1546,6 +1546,7 @@ NVPreInit(ScrnInfoPtr pScrn, int flags)
 	xf86FreeInt10(pNv->pInt);
 	return FALSE;
     }
+    vgaHWSetStdFuncs(VGAHWPTR(pScrn));
     
     /* We use a programmable clock */
     pScrn->progClock = TRUE;
@@ -2051,9 +2052,9 @@ NVPreInit(ScrnInfoPtr pScrn, int flags)
     /* Load XAA if needed */
     if (!pNv->NoAccel) {
 	if (!xf86LoadSubModule(pScrn, "xaa")) {
-	    xf86FreeInt10(pNv->pInt);
-	    NVFreeRec(pScrn);
-	    return FALSE;
+	    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Falling back to shadwwfb\n");
+	    pNv->NoAccel = 1;
+	    pNv->ShadowFB = 1;
 	}
     }
 
@@ -2382,7 +2383,7 @@ NVDPMSSet(ScrnInfoPtr pScrn, int PowerMa
 /* This gets called at the start of each server generation */
 
 static Bool
-NVScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
+NVScreenInit(SCREEN_INIT_ARGS_DECL)
 {
     ScrnInfoPtr pScrn;
     vgaHWPtr hwp;
@@ -2396,7 +2397,7 @@ NVScreenInit(int scrnIndex, ScreenPtr pS
     /* 
      * First get the ScrnInfoRec
      */
-    pScrn = xf86Screens[pScreen->myNum];
+    pScrn = xf86ScreenToScrn(pScreen);
 
     hwp = VGAHWPTR(pScrn);
     pNv = NVPTR(pScrn);
@@ -2439,7 +2440,7 @@ NVScreenInit(int scrnIndex, ScreenPtr pS
 
     /* Darken the screen for aesthetic reasons and set the viewport */
     NVSaveScreen(pScreen, SCREEN_SAVER_ON);
-    pScrn->AdjustFrame(scrnIndex, pScrn->frameX0, pScrn->frameY0, 0);
+    pScrn->AdjustFrame(ADJUST_FRAME_ARGS(pScrn, pScrn->frameX0, pScrn->frameY0));
 
     /*
      * The next step is to setup the screen's visuals, and initialise the
@@ -2509,7 +2510,7 @@ NVScreenInit(int scrnIndex, ScreenPtr pS
                                displayWidth, pScrn->bitsPerPixel);
             break;
         default:
-            xf86DrvMsg(scrnIndex, X_ERROR,
+            xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
                        "Internal error: invalid bpp (%d) in NVScreenInit\n",
                        pScrn->bitsPerPixel);
             ret = FALSE;

Index: xsrc/external/mit/xf86-video-r128/dist/src/r128.h
diff -u xsrc/external/mit/xf86-video-r128/dist/src/r128.h:1.3 xsrc/external/mit/xf86-video-r128/dist/src/r128.h:1.4
--- xsrc/external/mit/xf86-video-r128/dist/src/r128.h:1.3	Thu Dec 23 04:32:50 2010
+++ xsrc/external/mit/xf86-video-r128/dist/src/r128.h	Sun Jun  2 08:29:33 2013
@@ -43,8 +43,16 @@
 				/* PCI support */
 #include "xf86Pci.h"
 
+				/* EXA support */
+#ifdef USE_EXA
+#include "exa.h"
+#endif
+
 				/* XAA and Cursor Support */
+#ifdef HAVE_XAA_H
 #include "xaa.h"
+#endif
+#include "xf86fbman.h"
 #include "xf86Cursor.h"
 
 				/* DDC support */
@@ -53,18 +61,55 @@
 				/* Xv support */
 #include "xf86xv.h"
 
-#include "r128_probe.h"
-
 				/* DRI support */
-#ifdef XF86DRI
+#ifndef XF86DRI
+#undef R128DRI
+#endif
+
+#if R128DRI
 #define _XF86DRI_SERVER_
 #include "r128_dripriv.h"
 #include "dri.h"
 #include "GL/glxint.h"
 #endif
 
+#include "fb.h"
+
+#include "compat-api.h"
 #include "atipcirename.h"
 
+#include "r128_probe.h"
+
+#if HAVE_BYTESWAP_H
+#include <byteswap.h>
+#elif defined(USE_SYS_ENDIAN_H)
+#include <sys/endian.h>
+#else
+#define bswap_16(value)  \
+        ((((value) & 0xff) << 8) | ((value) >> 8))
+
+#define bswap_32(value) \
+        (((uint32_t)bswap_16((uint16_t)((value) & 0xffff)) << 16) | \
+        (uint32_t)bswap_16((uint16_t)((value) >> 16)))
+
+#define bswap_64(value) \
+        (((uint64_t)bswap_32((uint32_t)((value) & 0xffffffff)) \
+            << 32) | \
+        (uint64_t)bswap_32((uint32_t)((value) >> 32)))
+#endif
+
+#if X_BYTE_ORDER == X_BIG_ENDIAN
+#define le32_to_cpu(x) bswap_32(x)
+#define le16_to_cpu(x) bswap_16(x)
+#define cpu_to_le32(x) bswap_32(x)
+#define cpu_to_le16(x) bswap_16(x)
+#else
+#define le32_to_cpu(x) (x)
+#define le16_to_cpu(x) (x)
+#define cpu_to_le32(x) (x)
+#define cpu_to_le16(x) (x)
+#endif
+
 #define R128_DEBUG          0   /* Turn off debugging output               */
 #define R128_IDLE_RETRY    32   /* Fall out of idle loops after this count */
 #define R128_TIMEOUT  2000000   /* Fall out of wait loops after this count */
@@ -74,6 +119,8 @@
 #define R128_NAME "R128"
 
 #if R128_DEBUG
+#include "r128_version.h"
+
 #define R128TRACE(x)                                          \
     do {                                                      \
 	ErrorF("(**) %s(%d): ", R128_NAME, pScrn->scrnIndex); \
@@ -225,6 +272,34 @@ typedef enum
     MT_STV
 } R128MonitorType;
 
+#ifdef USE_EXA
+struct r128_2d_state {
+    Bool in_use;
+    Bool composite_setup;
+    uint32_t dst_pitch_offset;
+    uint32_t src_pitch_offset;
+    uint32_t dp_gui_master_cntl;
+    uint32_t dp_cntl;
+    uint32_t dp_write_mask;
+    uint32_t dp_brush_frgd_clr;
+    uint32_t dp_brush_bkgd_clr;
+    uint32_t dp_src_frgd_clr;
+    uint32_t dp_src_bkgd_clr;
+    uint32_t default_sc_bottom_right;
+#if defined(R128DRI) && defined(RENDER)
+    Bool has_mask;
+    int x_offset;
+    int y_offset;
+    int widths[2];
+    int heights[2];
+    Bool is_transform[2];
+    PictTransform *transform[2];
+    PixmapPtr src_pix;
+    PixmapPtr msk_pix;
+#endif
+};
+#endif
+
 typedef struct {
     EntityInfoPtr     pEnt;
     pciVideoPtr       PciInfo;
@@ -270,13 +345,24 @@ typedef struct {
 
     R128SaveRec       SavedReg;     /* Original (text) mode                  */
     R128SaveRec       ModeReg;      /* Current mode                          */
-    Bool              (*CloseScreen)(int, ScreenPtr);
-    void              (*BlockHandler)(int, pointer, pointer, pointer);
+    Bool              (*CloseScreen)(CLOSE_SCREEN_ARGS_DECL);
+    void              (*BlockHandler)(BLOCKHANDLER_ARGS_DECL);
 
     Bool              PaletteSavedOnVT; /* Palette saved on last VT switch   */
 
+#ifdef HAVE_XAA_H
     XAAInfoRecPtr     accel;
+#endif
     Bool              accelOn;
+
+    Bool	      useEXA;
+    Bool	      RenderAccel;
+#ifdef USE_EXA
+    ExaDriverPtr      ExaDriver;
+    XF86ModReqInfo    exaReq;
+    struct r128_2d_state state_2d;
+#endif
+
     xf86CursorInfoPtr cursor;
     unsigned long     cursor_start;
     unsigned long     cursor_end;
@@ -307,14 +393,14 @@ typedef struct {
     int               scanline_y;
     int               scanline_w;
     int               scanline_h;
-#ifdef XF86DRI
+#ifdef R128DRI
     int               scanline_hpass;
     int               scanline_x1clip;
     int               scanline_x2clip;
     int               scanline_rop;
     int               scanline_fg;
     int               scanline_bg;
-#endif /* XF86DRI */
+#endif /* R128DRI */
     int               scanline_words;
     int               scanline_direct;
     int               scanline_bpp; /* Only used for ImageWrite */
@@ -326,7 +412,7 @@ typedef struct {
     DGAFunctionRec    DGAFuncs;
 
     R128FBLayout      CurrentLayout;
-#ifdef XF86DRI
+#ifdef R128DRI
     Bool              directRenderingEnabled;
     DRIInfoPtr        pDRIInfo;
     int               drmFD;
@@ -478,7 +564,7 @@ extern int         R128MinBits(int val);
 
 extern void        R128InitVideo(ScreenPtr pScreen);
 
-#ifdef XF86DRI
+#ifdef R128DRI
 extern Bool        R128DRIScreenInit(ScreenPtr pScreen);
 extern void        R128DRICloseScreen(ScreenPtr pScreen);
 extern Bool        R128DRIFinishScreenInit(ScreenPtr pScreen);
@@ -521,6 +607,14 @@ extern void        R128CCEReleaseIndirec
 extern void        R128CCEWaitForIdle(ScrnInfoPtr pScrn);
 extern int         R128CCEStop(ScrnInfoPtr pScrn);
 
+#ifdef USE_EXA
+extern Bool	   R128EXAInit(ScreenPtr pScreen);
+extern Bool	   R128GetDatatypeBpp(int bpp, uint32_t *type);
+extern Bool	   R128GetPixmapOffsetPitch(PixmapPtr pPix, uint32_t *pitch_offset);
+extern void	   R128DoPrepareCopy(ScrnInfoPtr pScrn, uint32_t src_pitch_offset,
+				    uint32_t dst_pitch_offset, uint32_t datatype, int alu, Pixel planemask);
+#endif
+
 
 #define CCE_PACKET0( reg, n )						\
 	(R128_CCE_PACKET0 | ((n) << 16) | ((reg) >> 2))

Index: xsrc/external/mit/xf86-video-r128/dist/src/r128_driver.c
diff -u xsrc/external/mit/xf86-video-r128/dist/src/r128_driver.c:1.7 xsrc/external/mit/xf86-video-r128/dist/src/r128_driver.c:1.8
--- xsrc/external/mit/xf86-video-r128/dist/src/r128_driver.c:1.7	Wed Jul 13 22:43:04 2011
+++ xsrc/external/mit/xf86-video-r128/dist/src/r128_driver.c	Sun Jun  2 08:29:33 2013
@@ -71,15 +71,13 @@
 #include "r128_reg.h"
 #include "r128_version.h"
 
-#ifdef XF86DRI
+#ifdef R128DRI
 #define _XF86DRI_SERVER_
 #include "r128_dri.h"
 #include "r128_common.h"
 #include "r128_sarea.h"
 #endif
 
-#include "fb.h"
-
 				/* colormap initialization */
 #include "micmap.h"
 
@@ -128,7 +126,7 @@
 #define USE_CRT_ONLY	0
 
 				/* Forward definitions for driver functions */
-static Bool R128CloseScreen(int scrnIndex, ScreenPtr pScreen);
+static Bool R128CloseScreen(CLOSE_SCREEN_ARGS_DECL);
 static Bool R128SaveScreen(ScreenPtr pScreen, int mode);
 static void R128Save(ScrnInfoPtr pScrn);
 static void R128Restore(ScrnInfoPtr pScrn);
@@ -143,7 +141,7 @@ typedef enum {
   OPTION_SW_CURSOR,
   OPTION_DAC_6BIT,
   OPTION_DAC_8BIT,
-#ifdef XF86DRI
+#ifdef R128DRI
   OPTION_XV_DMA,
   OPTION_IS_PCI,
   OPTION_CCE_PIO,
@@ -168,7 +166,9 @@ typedef enum {
 #endif
   OPTION_VIDEO_KEY,
   OPTION_SHOW_CACHE,
-  OPTION_VGA_ACCESS
+  OPTION_VGA_ACCESS,
+  OPTION_ACCELMETHOD,
+  OPTION_RENDERACCEL
 } R128Opts;
 
 static const OptionInfoRec R128Options[] = {
@@ -176,7 +176,7 @@ static const OptionInfoRec R128Options[]
   { OPTION_SW_CURSOR,    "SWcursor",         OPTV_BOOLEAN, {0}, FALSE },
   { OPTION_DAC_6BIT,     "Dac6Bit",          OPTV_BOOLEAN, {0}, FALSE },
   { OPTION_DAC_8BIT,     "Dac8Bit",          OPTV_BOOLEAN, {0}, TRUE  },
-#ifdef XF86DRI
+#ifdef R128DRI
   { OPTION_XV_DMA,       "DMAForXv",         OPTV_BOOLEAN, {0}, FALSE },
   { OPTION_IS_PCI,       "ForcePCIMode",     OPTV_BOOLEAN, {0}, FALSE },
   { OPTION_CCE_PIO,      "CCEPIOMode",       OPTV_BOOLEAN, {0}, FALSE },
@@ -198,6 +198,8 @@ static const OptionInfoRec R128Options[]
   { OPTION_VIDEO_KEY,    "VideoKey",         OPTV_INTEGER, {0}, FALSE },
   { OPTION_SHOW_CACHE,   "ShowCache",        OPTV_BOOLEAN, {0}, FALSE },
   { OPTION_VGA_ACCESS,   "VGAAccess",        OPTV_BOOLEAN, {0}, TRUE  },
+  { OPTION_ACCELMETHOD,  "AccelMethod",      OPTV_STRING,  {0}, FALSE },
+  { OPTION_RENDERACCEL,  "RenderAccel",      OPTV_BOOLEAN, {0}, FALSE },
   { -1,                  NULL,               OPTV_NONE,    {0}, FALSE }
 };
 
@@ -242,7 +244,7 @@ static Bool R128GetRec(ScrnInfoPtr pScrn
 static void R128FreeRec(ScrnInfoPtr pScrn)
 {
     if (!pScrn || !pScrn->driverPrivate) return;
-    xfree(pScrn->driverPrivate);
+    free(pScrn->driverPrivate);
     pScrn->driverPrivate = NULL;
 }
 
@@ -531,9 +533,9 @@ static Bool R128GetBIOSParameters(ScrnIn
 
 #ifdef XSERVER_LIBPCIACCESS
     int size = info->PciInfo->rom_size > R128_VBIOS_SIZE ? info->PciInfo->rom_size : R128_VBIOS_SIZE;
-    info->VBIOS = xalloc(size);
+    info->VBIOS = malloc(size);
 #else
-    info->VBIOS = xalloc(R128_VBIOS_SIZE);
+    info->VBIOS = malloc(R128_VBIOS_SIZE);
 #endif
 
     if (!info->VBIOS) {
@@ -566,7 +568,7 @@ static Bool R128GetBIOSParameters(ScrnIn
     }
     if (info->VBIOS[0] != 0x55 || info->VBIOS[1] != 0xaa) {
 	info->BIOSAddr = 0x00000000;
-	xfree(info->VBIOS);
+	free(info->VBIOS);
 	info->VBIOS = NULL;
 	xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
 		   "Video BIOS not found!\n");
@@ -983,14 +985,6 @@ static Bool R128PreInitConfig(ScrnInfoPt
 				/* BIOS */
     from              = X_PROBED;
     info->BIOSAddr    = info->PciInfo->biosBase & 0xfffe0000;
-    if (dev->BiosBase) {
-	xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-		   "BIOS address override, using 0x%08lx instead of 0x%08lx\n",
-		   dev->BiosBase,
-		   info->BIOSAddr);
-	info->BIOSAddr = dev->BiosBase;
-	from           = X_CONFIG;
-    }
     if (info->BIOSAddr) {
 	xf86DrvMsg(pScrn->scrnIndex, from,
 		   "BIOS at 0x%08lx\n", info->BIOSAddr);
@@ -1234,7 +1228,7 @@ static Bool R128PreInitConfig(ScrnInfoPt
 	}
     }
 
-#ifdef XF86DRI
+#ifdef R128DRI
 				/* DMA for Xv */
     info->DMAForXv = xf86ReturnOptValBool(info->Options, OPTION_XV_DMA, FALSE);
     if (info->DMAForXv) {
@@ -1420,7 +1414,7 @@ static Bool R128GetDFPInfo(ScrnInfoPtr p
     OUTREG(info->DDCReg, INREG(info->DDCReg)
            & ~(CARD32)(R128_GPIO_MONID_A_0 | R128_GPIO_MONID_A_3));
 
-    MonInfo = xf86DoEDID_DDC2(pScrn->scrnIndex, info->pI2CBus);
+    MonInfo = xf86DoEDID_DDC2(XF86_SCRN_ARG(pScrn), info->pI2CBus);
 #ifdef __NetBSD__
     if (MonInfo == NULL) {
     	struct wsdisplayio_edid_info ei;
@@ -1598,7 +1592,7 @@ static void R128SetSyncRangeFromEdid(Scr
 }
 
 /***********
-   xfree's xf86ValidateModes routine deosn't work well with DFPs
+   free's xf86ValidateModes routine deosn't work well with DFPs
    here is our own validation routine. All modes between
    640<=XRes<=MaxRes and 480<=YRes<=MaxYRes will be permitted.
    NOTE: RageProII doesn't support rmx, can only work with the
@@ -1834,17 +1828,6 @@ static Bool R128PreInitCursor(ScrnInfoPt
     return TRUE;
 }
 
-/* This is called by R128PreInit to initialize hardware acceleration. */
-static Bool R128PreInitAccel(ScrnInfoPtr pScrn)
-{
-    R128InfoPtr   info = R128PTR(pScrn);
-
-    if (!xf86ReturnOptValBool(info->Options, OPTION_NOACCEL, FALSE)) {
-	if (!xf86LoadSubModule(pScrn, "xaa")) return FALSE;
-    }
-    return TRUE;
-}
-
 static Bool R128PreInitInt10(ScrnInfoPtr pScrn, xf86Int10InfoPtr *ppInt10)
 {
     R128InfoPtr   info = R128PTR(pScrn);
@@ -1858,7 +1841,7 @@ static Bool R128PreInitInt10(ScrnInfoPtr
     return TRUE;
 }
 
-#ifdef XF86DRI
+#ifdef R128DRI
 static Bool R128PreInitDRI(ScrnInfoPtr pScrn)
 {
     R128InfoPtr   info = R128PTR(pScrn);
@@ -2068,7 +2051,7 @@ Bool R128PreInit(ScrnInfoPtr pScrn, int 
 				/* We can't do this until we have a
 				   pScrn->display. */
     xf86CollectOptions(pScrn, NULL);
-    if (!(info->Options = xalloc(sizeof(R128Options))))    goto fail;
+    if (!(info->Options = malloc(sizeof(R128Options))))    goto fail;
     memcpy(info->Options, R128Options, sizeof(R128Options));
     xf86ProcessOptions(pScrn->scrnIndex, pScrn->options, info->Options);
 
@@ -2094,8 +2077,10 @@ Bool R128PreInit(ScrnInfoPtr pScrn, int 
     } else
            xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VGAAccess option set to FALSE,"
                       " VGA module load skipped\n");
-    if (info->VGAAccess)
+    if (info->VGAAccess) {
+	vgaHWSetStdFuncs(VGAHWPTR(pScrn));
         vgaHWGetIOBase(VGAHWPTR(pScrn));
+    }
 #else
     xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VGAHW support not compiled, VGA "
                "module load skipped\n");
@@ -2157,15 +2142,13 @@ Bool R128PreInit(ScrnInfoPtr pScrn, int 
 
     if (!R128PreInitCursor(pScrn))             goto fail;
 
-    if (!R128PreInitAccel(pScrn))              goto fail;
-
-#ifdef XF86DRI
+#ifdef R128DRI
     if (!R128PreInitDRI(pScrn))                goto fail;
 #endif
 
 				/* Free the video bios (if applicable) */
     if (info->VBIOS) {
-	xfree(info->VBIOS);
+	free(info->VBIOS);
 	info->VBIOS = NULL;
     }
 
@@ -2184,7 +2167,7 @@ Bool R128PreInit(ScrnInfoPtr pScrn, int 
 
 				/* Free the video bios (if applicable) */
     if (info->VBIOS) {
-	xfree(info->VBIOS);
+	free(info->VBIOS);
 	info->VBIOS = NULL;
     }
 
@@ -2259,19 +2242,19 @@ static void R128LoadPalette(ScrnInfoPtr 
 }
 
 static void
-R128BlockHandler(int i, pointer blockData, pointer pTimeout, pointer pReadmask)
+R128BlockHandler(BLOCKHANDLER_ARGS_DECL)
 {
-    ScreenPtr   pScreen = screenInfo.screens[i];
-    ScrnInfoPtr pScrn   = xf86Screens[i];
+    SCREEN_PTR(arg);
+    ScrnInfoPtr pScrn   = xf86ScreenToScrn(pScreen);
     R128InfoPtr info    = R128PTR(pScrn);
 
-#ifdef XF86DRI
+#ifdef R128DRI
     if (info->directRenderingEnabled)
         FLUSH_RING();
 #endif
 
     pScreen->BlockHandler = info->BlockHandler;
-    (*pScreen->BlockHandler) (i, blockData, pTimeout, pReadmask);
+    (*pScreen->BlockHandler) (BLOCKHANDLER_ARGS);
     pScreen->BlockHandler = R128BlockHandler;
 
     if(info->VideoTimerCallback) {
@@ -2279,18 +2262,94 @@ R128BlockHandler(int i, pointer blockDat
     }
 }
 
+#ifdef USE_EXA
+Bool R128VerboseInitEXA(ScreenPtr pScreen)
+{
+    ScrnInfoPtr pScrn  = xf86ScreenToScrn(pScreen);
+    R128InfoPtr info   = R128PTR(pScrn);
+
+    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Going to init EXA...\n");
+
+    if (R128EXAInit(pScreen)) {
+	xf86DrvMsg(pScrn->scrnIndex, X_INFO, "EXA Acceleration enabled\n");
+	info->accelOn = TRUE;
+
+	return TRUE;
+    } else {
+	xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+		   "EXA Acceleration initialization failed\n");
+	xf86DrvMsg(pScrn->scrnIndex, X_INFO, "EXA Acceleration disabled\n");
+	info->accelOn = FALSE;
+
+	return FALSE;
+    }
+}
+#endif
+
+void R128VerboseInitAccel(Bool noAccel, ScreenPtr pScreen)
+{
+    ScrnInfoPtr pScrn  = xf86ScreenToScrn(pScreen);
+    R128InfoPtr info   = R128PTR(pScrn);
+
+    if (!noAccel) {
+	if (R128AccelInit(pScreen)) {
+	    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Acceleration enabled\n");
+	    info->accelOn = TRUE;
+	} else {
+	    xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+		       "Acceleration initialization failed\n");
+	    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Acceleration disabled\n");
+	    info->accelOn = FALSE;
+	}
+    } else {
+	xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Acceleration disabled\n");
+	info->accelOn = FALSE;
+    }
+}
+
 /* Called at the start of each server generation. */
-Bool R128ScreenInit(int scrnIndex, ScreenPtr pScreen,
-                              int argc, char **argv)
+Bool R128ScreenInit(SCREEN_INIT_ARGS_DECL)
 {
-    ScrnInfoPtr pScrn  = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     R128InfoPtr info   = R128PTR(pScrn);
     BoxRec      MemBox;
-    int		y2;
+    int width_bytes = (pScrn->displayWidth *
+			   info->CurrentLayout.pixel_bytes);
+    int         x1 = 0, x2 = 0, y1 = 0, y2 = 0;
+    Bool	noAccel;
+#ifdef USE_EXA
+    ExaOffscreenArea*     osArea = NULL;
+#else
+    void*		  osArea = NULL;
+#endif
+    char *optstr;
 
     R128TRACE(("R128ScreenInit %x %d\n", pScrn->memPhysBase, pScrn->fbOffset));
+    info->useEXA = FALSE;
+#ifdef USE_EXA
+#ifndef HAVE_XAA_H
+    info->useEXA = TRUE;
+#endif
+#endif
 
-#ifdef XF86DRI
+#ifdef USE_EXA
+    optstr = (char *)xf86GetOptValString(info->Options, OPTION_ACCELMETHOD);
+    if (optstr != NULL) {
+	xf86DrvMsg(pScrn->scrnIndex, X_INFO, "AccelMethod option found\n");
+	if (xf86NameCmp(optstr, "EXA") == 0) {
+	    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "AccelMethod is set to EXA, turning EXA on\n");
+	    info->useEXA = TRUE;
+	}
+    }
+#ifdef RENDER
+    info->RenderAccel = xf86ReturnOptValBool(info->Options, OPTION_RENDERACCEL, TRUE);
+    if (info->RenderAccel)
+        xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Acceleration of RENDER operations will be enabled"
+					     "upon successful loading of DRI and EXA\n");
+#endif
+#endif
+
+#ifdef R128DRI
 				/* Turn off the CCE for now. */
     info->CCEInUse     = FALSE;
     info->indirectBuffer = NULL;
@@ -2299,7 +2358,7 @@ Bool R128ScreenInit(int scrnIndex, Scree
     if (!R128MapMem(pScrn)) return FALSE;
     pScrn->fbOffset    = 0;
     if(info->IsSecondary) pScrn->fbOffset = pScrn->videoRam * 1024;
-#ifdef XF86DRI
+#ifdef R128DRI
     info->fbX          = 0;
     info->fbY          = 0;
     info->frontOffset  = 0;
@@ -2317,7 +2376,7 @@ Bool R128ScreenInit(int scrnIndex, Scree
 	if (!R128ModeInit(pScrn, pScrn->currentMode)) return FALSE;
 
     R128SaveScreen(pScreen, SCREEN_SAVER_ON);
-    pScrn->AdjustFrame(scrnIndex, pScrn->frameX0, pScrn->frameY0, 0);
+    pScrn->AdjustFrame(ADJUST_FRAME_ARGS(pScrn, pScrn->frameX0, pScrn->frameY0));
 
 				/* Visual setup */
     miClearVisualTypes();
@@ -2327,7 +2386,9 @@ Bool R128ScreenInit(int scrnIndex, Scree
 			  pScrn->defaultVisual)) return FALSE;
     miSetPixmapDepths ();
 
-#ifdef XF86DRI
+    noAccel = xf86ReturnOptValBool(info->Options, OPTION_NOACCEL, FALSE);
+
+#ifdef R128DRI
 				/* Setup DRI after visuals have been
 				   established, but before fbScreenInit is
 				   called.  fbScreenInit will eventually
@@ -2337,16 +2398,14 @@ Bool R128ScreenInit(int scrnIndex, Scree
 	/* FIXME: When we move to dynamic allocation of back and depth
 	   buffers, we will want to revisit the following check for 3
 	   times the virtual size of the screen below. */
-	int width_bytes = (pScrn->displayWidth *
-			   info->CurrentLayout.pixel_bytes);
 	int maxy        = info->FbMapSize / width_bytes;
 
-	if (xf86ReturnOptValBool(info->Options, OPTION_NOACCEL, FALSE)) {
-	    xf86DrvMsg(scrnIndex, X_WARNING,
+	if (noAccel) {
+	    xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
 		       "Acceleration disabled, not initializing the DRI\n");
 	    info->directRenderingEnabled = FALSE;
 	} else if (maxy <= pScrn->virtualY * 3) {
-	    xf86DrvMsg(scrnIndex, X_WARNING,
+	    xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
 		       "Static buffer allocation failed -- "
 		       "need at least %d kB video memory\n",
 		       (pScrn->displayWidth * pScrn->virtualY *
@@ -2361,7 +2420,7 @@ Bool R128ScreenInit(int scrnIndex, Scree
                 if(xf86IsEntityShared(pScrn->entityList[0]))
                 {
                     info->directRenderingEnabled = FALSE;
- 	            xf86DrvMsg(scrnIndex, X_WARNING,
+ 	            xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
                         "Direct Rendering Disabled -- "
                         "Dual-head configuration is not working with DRI "
                         "at present.\nPlease use only one Device/Screen "
@@ -2412,11 +2471,9 @@ Bool R128ScreenInit(int scrnIndex, Scree
     fbPictureInit (pScreen, 0, 0);
 
 				/* Memory manager setup */
-#ifdef XF86DRI
+#ifdef R128DRI
     if (info->directRenderingEnabled) {
-	FBAreaPtr fbarea;
-	int width_bytes = (pScrn->displayWidth *
-			   info->CurrentLayout.pixel_bytes);
+	FBAreaPtr fbarea = NULL;
 	int cpp = info->CurrentLayout.pixel_bytes;
 	int bufferSize = pScrn->virtualY * width_bytes;
 	int l, total;
@@ -2494,52 +2551,103 @@ Bool R128ScreenInit(int scrnIndex, Scree
 	MemBox.x2 = pScrn->displayWidth;
 	MemBox.y2 = scanlines;
 
-	if (!xf86InitFBManager(pScreen, &MemBox)) {
-	    xf86DrvMsg(scrnIndex, X_ERROR,
-		       "Memory manager initialization to (%d,%d) (%d,%d) failed\n",
-		       MemBox.x1, MemBox.y1, MemBox.x2, MemBox.y2);
-	    return FALSE;
-	} else {
-	    int width, height;
-
-	    xf86DrvMsg(scrnIndex, X_INFO,
-		       "Memory manager initialized to (%d,%d) (%d,%d)\n",
-		       MemBox.x1, MemBox.y1, MemBox.x2, MemBox.y2);
-	    if ((fbarea = xf86AllocateOffscreenArea(pScreen,
-						    pScrn->displayWidth,
-						    2, 0, NULL, NULL, NULL))) {
-		xf86DrvMsg(scrnIndex, X_INFO,
-			   "Reserved area from (%d,%d) to (%d,%d)\n",
-			   fbarea->box.x1, fbarea->box.y1,
-			   fbarea->box.x2, fbarea->box.y2);
+	if (!info->useEXA) {
+	    if (!xf86InitFBManager(pScreen, &MemBox)) {
+	        xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+		           "Memory manager initialization to (%d,%d) (%d,%d) failed\n",
+		           MemBox.x1, MemBox.y1, MemBox.x2, MemBox.y2);
+	        return FALSE;
 	    } else {
-		xf86DrvMsg(scrnIndex, X_ERROR, "Unable to reserve area\n");
-	    }
-	    if (xf86QueryLargestOffscreenArea(pScreen, &width,
-					      &height, 0, 0, 0)) {
-		xf86DrvMsg(scrnIndex, X_INFO,
-			   "Largest offscreen area available: %d x %d\n",
-			   width, height);
+	        int width, height;
+
+	        xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+		           "Memory manager initialized to (%d,%d) (%d,%d)\n",
+		           MemBox.x1, MemBox.y1, MemBox.x2, MemBox.y2);
+	        if ((fbarea = xf86AllocateOffscreenArea(pScreen,
+						        pScrn->displayWidth,
+						        2, 0, NULL, NULL, NULL))) {
+		    xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+			       "Reserved area from (%d,%d) to (%d,%d)\n",
+			       fbarea->box.x1, fbarea->box.y1,
+			       fbarea->box.x2, fbarea->box.y2);
+	        } else {
+		    xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Unable to reserve area\n");
+	        }
+	        if (xf86QueryLargestOffscreenArea(pScreen, &width,
+						  &height, 0, 0, 0)) {
+		    xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+			       "Largest offscreen area available: %d x %d\n",
+				width, height);
+	        }
+
+		R128VerboseInitAccel(noAccel, pScreen);
 	    }
 	}
+#ifdef USE_EXA
+	else {
+	    xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+		       "Filling in EXA memory info\n");
+
+	    R128VerboseInitAccel(noAccel, pScreen);
+	    info->ExaDriver->offScreenBase = pScrn->virtualY * width_bytes;
+
+	    xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+		       "Filled in offs\n");
+
+	    /* Don't give EXA the true full memory size, because the
+	       textureSize sized chunk on the end is handled by DRI */
+	    info->ExaDriver->memorySize = total;
+
+	    R128VerboseInitEXA(pScreen);
+	}
+#endif
 
 				/* Allocate the shared back buffer */
-	if ((fbarea = xf86AllocateOffscreenArea(pScreen,
-						pScrn->virtualX,
-						pScrn->virtualY,
-						32, NULL, NULL, NULL))) {
-	    xf86DrvMsg(scrnIndex, X_INFO,
-		       "Reserved back buffer from (%d,%d) to (%d,%d)\n",
-		       fbarea->box.x1, fbarea->box.y1,
-		       fbarea->box.x2, fbarea->box.y2);
-
-	    info->backX = fbarea->box.x1;
-	    info->backY = fbarea->box.y1;
-	    info->backOffset = (fbarea->box.y1 * width_bytes +
-				fbarea->box.x1 * cpp);
+	if(!info->useEXA) {
+	    fbarea = xf86AllocateOffscreenArea(pScreen,
+					       pScrn->virtualX,
+					       pScrn->virtualY,
+					       32, NULL, NULL, NULL);
+
+	    if (fbarea) {
+		x1 = fbarea->box.x1;
+		x2 = fbarea->box.x2;
+		y1 = fbarea->box.y1;
+		y2 = fbarea->box.y2;
+	    }
+	}
+#ifdef USE_EXA
+	else {
+	    xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+		       "Actually trying an EXA allocation...\n");
+	    osArea = exaOffscreenAlloc(pScreen,
+				       pScrn->virtualY * width_bytes,
+				       32, TRUE, NULL, NULL);
+
+	    if (osArea) {
+		x1 = osArea->offset % width_bytes;
+		x2 = (osArea->offset + osArea->size) % width_bytes;
+		y1 = osArea->offset / width_bytes;
+		y2 = (osArea->offset + osArea->size) / width_bytes;
+
+		xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Went swimmingly...\n");
+	    }
+	}
+#endif
+
+	if ((!info->useEXA && fbarea) || (info->useEXA && osArea)) {
+	    /* info->backOffset = y1 * width_bytes + x1 * cpp; */
+	    info->backOffset = R128_ALIGN(y1 * width_bytes + x1 * cpp, 16);
+	    info->backX = info->backOffset % width_bytes;
+	    info->backY = info->backOffset / width_bytes;
 	    info->backPitch = pScrn->displayWidth;
+
+	    xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+		       "Reserved back buffer from (%d,%d) to (%d,%d) offset: %x\n",
+		       x1, y1,
+		       x2, y2, info->backOffset);
 	} else {
-	    xf86DrvMsg(scrnIndex, X_ERROR, "Unable to reserve back buffer\n");
+	    xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Unable to reserve back buffer\n");
 	    info->backX = -1;
 	    info->backY = -1;
 	    info->backOffset = -1;
@@ -2547,27 +2655,51 @@ Bool R128ScreenInit(int scrnIndex, Scree
 	}
 
 				/* Allocate the shared depth buffer */
-	if ((fbarea = xf86AllocateOffscreenArea(pScreen,
-						pScrn->virtualX,
-						pScrn->virtualY + 1,
-						32, NULL, NULL, NULL))) {
-	    xf86DrvMsg(scrnIndex, X_INFO,
-		       "Reserved depth buffer from (%d,%d) to (%d,%d)\n",
-		       fbarea->box.x1, fbarea->box.y1,
-		       fbarea->box.x2, fbarea->box.y2);
-
-	    info->depthX = fbarea->box.x1;
-	    info->depthY = fbarea->box.y1;
-	    info->depthOffset = (fbarea->box.y1 * width_bytes +
-				 fbarea->box.x1 * cpp);
+	if(!info->useEXA) {
+	    fbarea = xf86AllocateOffscreenArea(pScreen,
+					       pScrn->virtualX,
+					       pScrn->virtualY + 1,
+					       32, NULL, NULL, NULL);
+	    if (fbarea) {
+		x1 = fbarea->box.x1;
+		x2 = fbarea->box.x2;
+		y1 = fbarea->box.y1;
+		y2 = fbarea->box.y2;
+	    }
+	}
+#ifdef USE_EXA
+	else {
+	    osArea = exaOffscreenAlloc(pScreen,
+				       (pScrn->virtualY + 1) * width_bytes,
+				       32, TRUE, NULL, NULL);
+
+	    if (osArea) {
+		x1 = osArea->offset % width_bytes;
+		x2 = (osArea->offset + osArea->size) % width_bytes;
+		y1 = osArea->offset / width_bytes;
+		y2 = (osArea->offset + osArea->size) / width_bytes;
+	    }
+	}
+#endif
+
+	if ((!info->useEXA && fbarea) || (info->useEXA && osArea)) {
+	    /* info->depthOffset = y1 * width_bytes + x1 * cpp; */
+	    info->depthOffset = R128_ALIGN(y1 * width_bytes + x1 * cpp, 16);
+	    info->depthX = info->depthOffset % width_bytes;
+	    info->depthY = info->depthOffset / width_bytes;
 	    info->depthPitch = pScrn->displayWidth;
-	    info->spanOffset = ((fbarea->box.y2 - 1) * width_bytes +
-				fbarea->box.x1 * cpp);
-	    xf86DrvMsg(scrnIndex, X_INFO,
+	    info->spanOffset = (y2 - 1) * width_bytes + x1 * cpp;
+
+	    xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+		       "Reserved depth buffer from (%d,%d) to (%d,%d) offset: %x\n",
+		       x1, y1,
+		       x2, y2, info->depthOffset);
+
+	    xf86DrvMsg(pScrn->scrnIndex, X_INFO,
 		       "Reserved depth span from (%d,%d) offset 0x%x\n",
-		       fbarea->box.x1, fbarea->box.y2 - 1, info->spanOffset);
+		       x1, y2 - 1, info->spanOffset);
 	} else {
-	    xf86DrvMsg(scrnIndex, X_ERROR, "Unable to reserve depth buffer\n");
+	    xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Unable to reserve depth buffer\n");
 	    info->depthX = -1;
 	    info->depthY = -1;
 	    info->depthOffset = -1;
@@ -2575,12 +2707,12 @@ Bool R128ScreenInit(int scrnIndex, Scree
 	    info->spanOffset = -1;
 	}
 
-	xf86DrvMsg(scrnIndex, X_INFO,
+	xf86DrvMsg(pScrn->scrnIndex, X_INFO,
 		   "Reserved %d kb for textures at offset 0x%x\n",
 		   info->textureSize/1024, info->textureOffset);
     }
     else
-#endif
+#endif /* R128DRI */
     {
 	MemBox.x1 = 0;
 	MemBox.y1 = 0;
@@ -2594,50 +2726,51 @@ Bool R128ScreenInit(int scrnIndex, Scree
 	if (y2 > 8191) y2 = 8191;
 	MemBox.y2 = y2;
 
-	if (!xf86InitFBManager(pScreen, &MemBox)) {
-	    xf86DrvMsg(scrnIndex, X_ERROR,
-		       "Memory manager initialization to (%d,%d) (%d,%d) failed\n",
-		       MemBox.x1, MemBox.y1, MemBox.x2, MemBox.y2);
-	    return FALSE;
-	} else {
-	    int       width, height;
-	    FBAreaPtr fbarea;
-
-	    xf86DrvMsg(scrnIndex, X_INFO,
-		       "Memory manager initialized to (%d,%d) (%d,%d)\n",
-		       MemBox.x1, MemBox.y1, MemBox.x2, MemBox.y2);
-	    if ((fbarea = xf86AllocateOffscreenArea(pScreen, pScrn->displayWidth,
-						    2, 0, NULL, NULL, NULL))) {
-		xf86DrvMsg(scrnIndex, X_INFO,
-			   "Reserved area from (%d,%d) to (%d,%d)\n",
-			   fbarea->box.x1, fbarea->box.y1,
-			   fbarea->box.x2, fbarea->box.y2);
+	if (!info->useEXA) {
+	    if (!xf86InitFBManager(pScreen, &MemBox)) {
+	        xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+		           "Memory manager initialization to (%d,%d) (%d,%d) failed\n",
+		           MemBox.x1, MemBox.y1, MemBox.x2, MemBox.y2);
+	        return FALSE;
 	    } else {
-		xf86DrvMsg(scrnIndex, X_ERROR, "Unable to reserve area\n");
-	    }
-	    if (xf86QueryLargestOffscreenArea(pScreen, &width, &height,
-					      0, 0, 0)) {
-		xf86DrvMsg(scrnIndex, X_INFO,
-			   "Largest offscreen area available: %d x %d\n",
-			   width, height);
+	        int       width, height;
+	        FBAreaPtr fbarea;
+
+	        xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+		           "Memory manager initialized to (%d,%d) (%d,%d)\n",
+		           MemBox.x1, MemBox.y1, MemBox.x2, MemBox.y2);
+	        if ((fbarea = xf86AllocateOffscreenArea(pScreen, pScrn->displayWidth, 2, 0, NULL, NULL, NULL))) {
+		    xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+			       "Reserved area from (%d,%d) to (%d,%d)\n",
+			       fbarea->box.x1, fbarea->box.y1,
+			       fbarea->box.x2, fbarea->box.y2);
+	        } else {
+		    xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Unable to reserve area\n");
+	        }
+	        if (xf86QueryLargestOffscreenArea(pScreen, &width, &height, 0, 0, 0)) {
+		    xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+			       "Largest offscreen area available: %d x %d\n",
+				width, height);
+	        }
+
+		R128VerboseInitAccel(noAccel, pScreen);
 	    }
 	}
-    }
+#ifdef USE_EXA
+	else {
+	    xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+		       "Filling in EXA memory info\n");
 
-				/* Acceleration setup */
-    if (!xf86ReturnOptValBool(info->Options, OPTION_NOACCEL, FALSE)) {
-	if (R128AccelInit(pScreen)) {
-	    xf86DrvMsg(scrnIndex, X_INFO, "Acceleration enabled\n");
-	    info->accelOn = TRUE;
-	} else {
-	    xf86DrvMsg(scrnIndex, X_ERROR,
-		       "Acceleration initialization failed\n");
-	    xf86DrvMsg(scrnIndex, X_INFO, "Acceleration disabled\n");
-	    info->accelOn = FALSE;
+	    R128VerboseInitAccel(noAccel, pScreen);
+	    info->ExaDriver->offScreenBase = pScrn->virtualY * width_bytes;
+
+	    xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+		       "Filled in offs\n");
+
+	    info->ExaDriver->memorySize = info->FbMapSize;
+	    R128VerboseInitEXA(pScreen);
 	}
-    } else {
-	xf86DrvMsg(scrnIndex, X_INFO, "Acceleration disabled\n");
-	info->accelOn = FALSE;
+#endif
     }
 
 				/* DGA setup */
@@ -2663,18 +2796,18 @@ Bool R128ScreenInit(int scrnIndex, Scree
 		       info->cursor_start / pScrn->displayWidth);
 	    if (xf86QueryLargestOffscreenArea(pScreen, &width, &height,
 					      0, 0, 0)) {
-		xf86DrvMsg(scrnIndex, X_INFO,
+		xf86DrvMsg(pScrn->scrnIndex, X_INFO,
 			   "Largest offscreen area available: %d x %d\n",
 			   width, height);
 	    }
 	} else {
-	    xf86DrvMsg(scrnIndex, X_ERROR,
+	    xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
 		       "Hardware cursor initialization failed\n");
-	    xf86DrvMsg(scrnIndex, X_INFO, "Using software cursor\n");
+	    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Using software cursor\n");
 	}
     } else {
 	info->cursor_start = 0;
-	xf86DrvMsg(scrnIndex, X_INFO, "Using software cursor\n");
+	xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Using software cursor\n");
     }
 
 				/* Colormap setup */
@@ -2720,7 +2853,7 @@ Bool R128ScreenInit(int scrnIndex, Scree
     if (serverGeneration == 1)
 	xf86ShowUnusedOptions(pScrn->scrnIndex, pScrn->options);
 
-#ifdef XF86DRI
+#ifdef R128DRI
 				/* DRI finalization */
     if (info->directRenderingEnabled) {
 				/* Now that mi, fb, drm and others have
@@ -3009,6 +3142,10 @@ static void R128RestorePLL2Registers(Scr
 	       restore->p2pll_div_0,
 	       restore->htotal_cntl2,
 	       INPLL(pScrn, R128_P2PLL_CNTL)));
+    R128TRACE(("Wrote: rd=%d, fd=%d, pd=%d\n",
+	       restore->p2pll_ref_div & R128_P2PLL_REF_DIV_MASK,
+	       restore->p2pll_div_0 & R128_P2PLL_FB0_DIV_MASK,
+	       (restore->p2pll_div_0 & R128_P2PLL_POST0_DIV_MASK) >>16));
 
     usleep(5000); /* Let the clock to lock */
 
@@ -3466,7 +3603,7 @@ static void R128InitCommonRegisters(R128
     save->subpic_cntl        = 0;
     save->viph_control       = 0;
     save->i2c_cntl_1         = 0;
-#ifdef XF86DRI
+#ifdef R128DRI
     save->gen_int_cntl       = info->gen_int_cntl;
 #else
     save->gen_int_cntl       = 0;
@@ -3868,8 +4005,8 @@ static void R128InitPLLRegisters(ScrnInf
 }
 
 /* Define PLL2 registers for requested video mode. */
-static void R128InitPLL2Registers(R128SavePtr save, R128PLLPtr pll,
-				   double dot_clock)
+static void R128InitPLL2Registers(ScrnInfoPtr pScrn, R128SavePtr save,
+				   R128PLLPtr pll, double dot_clock)
 {
     unsigned long freq = dot_clock * 100;
     struct {
@@ -4131,7 +4268,7 @@ static Bool R128Init(ScrnInfoPtr pScrn, 
         if (!R128InitCrtc2Registers(pScrn, save, 
              pScrn->currentMode,info)) 
             return FALSE;
-        R128InitPLL2Registers(save, &info->pll, dot_clock);
+        R128InitPLL2Registers(pScrn, save, &info->pll, dot_clock);
         if (!R128InitDDA2Registers(pScrn, save, &info->pll, info, mode))
 	    return FALSE;
     }
@@ -4187,7 +4324,7 @@ static Bool R128ModeInit(ScrnInfoPtr pSc
 
 static Bool R128SaveScreen(ScreenPtr pScreen, int mode)
 {
-    ScrnInfoPtr   pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr   pScrn = xf86ScreenToScrn(pScreen);
     Bool unblank;
 
     unblank = xf86IsUnblank(mode);
@@ -4208,23 +4345,23 @@ static Bool R128SaveScreen(ScreenPtr pSc
  * The workaround is to switch the mode, then switch to another VT, then
  * switch back. --AGD
  */
-Bool R128SwitchMode(int scrnIndex, DisplayModePtr mode, int flags)
+Bool R128SwitchMode(SWITCH_MODE_ARGS_DECL)
 {
-    ScrnInfoPtr   pScrn       = xf86Screens[scrnIndex];
+    SCRN_INFO_PTR(arg);
     R128InfoPtr info        = R128PTR(pScrn);
     Bool ret;
 
     info->SwitchingMode = TRUE;
-    ret = R128ModeInit(xf86Screens[scrnIndex], mode);
+    ret = R128ModeInit(pScrn, mode);
     info->SwitchingMode = FALSE;
     return ret;
 }
 
 /* Used to disallow modes that are not supported by the hardware. */
-ModeStatus R128ValidMode(int scrnIndex, DisplayModePtr mode,
+ModeStatus R128ValidMode(SCRN_ARG_TYPE arg, DisplayModePtr mode,
                                    Bool verbose, int flags)
 {
-    ScrnInfoPtr   pScrn = xf86Screens[scrnIndex];
+    SCRN_INFO_PTR(arg);
     R128InfoPtr   info  = R128PTR(pScrn);
 
     if (info->BIOSDisplay == R128_BIOS_DISPLAY_CRT)
@@ -4300,9 +4437,9 @@ ModeStatus R128ValidMode(int scrnIndex, 
 
 /* Adjust viewport into virtual desktop such that (0,0) in viewport space
    is (x,y) in virtual space. */
-void R128AdjustFrame(int scrnIndex, int x, int y, int flags)
+void R128AdjustFrame(ADJUST_FRAME_ARGS_DECL)
 {
-    ScrnInfoPtr   pScrn     = xf86Screens[scrnIndex];
+    SCRN_INFO_PTR(arg);
     R128InfoPtr   info      = R128PTR(pScrn);
     unsigned char *R128MMIO = info->MMIO;
     int           Base;
@@ -4336,22 +4473,22 @@ void R128AdjustFrame(int scrnIndex, int 
 
 /* Called when VT switching back to the X server.  Reinitialize the video
    mode. */
-Bool R128EnterVT(int scrnIndex, int flags)
+Bool R128EnterVT(VT_FUNC_ARGS_DECL)
 {
-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+    SCRN_INFO_PTR(arg);
     R128InfoPtr info  = R128PTR(pScrn);
 
     R128TRACE(("R128EnterVT\n"));
 #ifndef AVOID_FBDEV
     if (info->FBDev) {
-        if (!fbdevHWEnterVT(scrnIndex,flags)) return FALSE;
+        if (!fbdevHWEnterVT(VT_FUNC_ARGS)) return FALSE;
     } else
 #endif
         if (!R128ModeInit(pScrn, pScrn->currentMode)) return FALSE;
     if (info->accelOn)
 	R128EngineInit(pScrn);
 
-#ifdef XF86DRI
+#ifdef R128DRI
     if (info->directRenderingEnabled) {
 	if (info->irq) {
 	    /* Need to make sure interrupts are enabled */
@@ -4364,31 +4501,35 @@ Bool R128EnterVT(int scrnIndex, int flag
 #endif
 
     info->PaletteSavedOnVT = FALSE;
-    pScrn->AdjustFrame(scrnIndex, pScrn->frameX0, pScrn->frameY0, 0);
+    pScrn->AdjustFrame(ADJUST_FRAME_ARGS(pScrn, pScrn->frameX0, pScrn->frameY0));
 
     return TRUE;
 }
 
 /* Called when VT switching away from the X server.  Restore the original
    text mode. */
-void R128LeaveVT(int scrnIndex, int flags)
+void R128LeaveVT(VT_FUNC_ARGS_DECL)
 {
-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+    SCRN_INFO_PTR(arg);
     R128InfoPtr info  = R128PTR(pScrn);
     R128SavePtr save  = &info->ModeReg;
 
     R128TRACE(("R128LeaveVT\n"));
-#ifdef XF86DRI
+#ifdef R128DRI
     if (info->directRenderingEnabled) {
 	DRILock(pScrn->pScreen, 0);
 	R128CCE_STOP(pScrn, info);
     }
+#ifdef USE_EXA
+    if (info->useEXA)
+        info->state_2d.composite_setup = FALSE;
+#endif
 #endif
     R128SavePalette(pScrn, save);
     info->PaletteSavedOnVT = TRUE;
 #ifndef AVOID_FBDEV
     if (info->FBDev)
-        fbdevHWLeaveVT(scrnIndex,flags);
+        fbdevHWLeaveVT(VT_FUNC_ARGS);
     else
 #endif
         R128Restore(pScrn);
@@ -4398,14 +4539,14 @@ void R128LeaveVT(int scrnIndex, int flag
 /* Called at the end of each server generation.  Restore the original text
    mode, unmap video memory, and unwrap and call the saved CloseScreen
    function.  */
-static Bool R128CloseScreen(int scrnIndex, ScreenPtr pScreen)
+static Bool R128CloseScreen(CLOSE_SCREEN_ARGS_DECL)
 {
-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     R128InfoPtr info  = R128PTR(pScrn);
 
     R128TRACE(("R128CloseScreen\n"));
 
-#ifdef XF86DRI
+#ifdef R128DRI
 				/* Disable direct rendering */
     if (info->directRenderingEnabled) {
 	R128DRICloseScreen(pScreen);
@@ -4418,20 +4559,30 @@ static Bool R128CloseScreen(int scrnInde
 	R128UnmapMem(pScrn);
     }
 
-    if (info->accel)             XAADestroyInfoRec(info->accel);
-    info->accel                  = NULL;
+#ifdef USE_EXA
+        if (info->useEXA) {
+	    exaDriverFini(pScreen);
+	    free(info->ExaDriver);
+	} else
+#endif
+#ifdef HAVE_XAA_H
+	{
+            if (info->accel)             XAADestroyInfoRec(info->accel);
+	    info->accel                  = NULL;
+        }
+#endif
 
-    if (info->scratch_save)      xfree(info->scratch_save);
+    if (info->scratch_save)      free(info->scratch_save);
     info->scratch_save           = NULL;
 
     if (info->cursor)            xf86DestroyCursorInfoRec(info->cursor);
     info->cursor                 = NULL;
 
-    if (info->DGAModes)          xfree(info->DGAModes);
+    if (info->DGAModes)          free(info->DGAModes);
     info->DGAModes               = NULL;
 
     if (info->adaptor) {
-        xfree(info->adaptor->pPortPrivates[0].ptr);
+        free(info->adaptor->pPortPrivates[0].ptr);
 	xf86XVFreeVideoAdaptorRec(info->adaptor);
 	info->adaptor = NULL;
     }
@@ -4440,12 +4591,12 @@ static Bool R128CloseScreen(int scrnInde
 
     pScreen->BlockHandler = info->BlockHandler;
     pScreen->CloseScreen = info->CloseScreen;
-    return (*pScreen->CloseScreen)(scrnIndex, pScreen);
+    return (*pScreen->CloseScreen)(CLOSE_SCREEN_ARGS);
 }
 
-void R128FreeScreen(int scrnIndex, int flags)
+void R128FreeScreen(FREE_SCREEN_ARGS_DECL)
 {
-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+    SCRN_INFO_PTR(arg);
     R128InfoPtr   info      = R128PTR(pScrn);
 
     R128TRACE(("R128FreeScreen\n"));

Reply via email to