xserver: Branch 'master' - 52 commits

Keith Packard keithp at kemper.freedesktop.org
Tue Jul 10 01:04:09 PDT 2012


 COPYING                               |    2 
 Xext/Makefile.am                      |   42 
 Xext/bigreq.c                         |    6 
 Xext/dpms.c                           |    4 
 Xext/geext.c                          |    3 
 Xext/geext.h                          |    2 
 Xext/panoramiX.c                      |    7 
 Xext/saver.c                          |    4 
 Xext/security.c                       |    4 
 Xext/shape.c                          |    2 
 Xext/shm.c                            |    4 
 Xext/sync.c                           |    2 
 Xext/syncsrv.h                        |    2 
 Xext/xcmisc.c                         |    4 
 Xext/xf86bigfont.c                    |    1 
 Xext/xf86bigfontsrv.h                 |    1 
 Xext/xres.c                           |    6 
 Xext/xselinux_ext.c                   |    4 
 Xext/xtest.c                          |    4 
 Xext/xvdix.h                          |    6 
 Xext/xvmain.c                         |    1 
 Xext/xvmc.c                           |    5 
 Xext/xvmcext.h                        |    4 
 Xi/extinit.c                          |    8 
 composite/compext.c                   |    1 
 composite/compint.h                   |    7 
 configure.ac                          |   19 
 damageext/Makefile.am                 |    1 
 damageext/damageext.c                 |    1 
 damageext/damageextint.h              |    1 
 dbe/dbe.c                             |    1 
 dbe/dbestruct.h                       |    2 
 glx/Makefile.am                       |    2 
 glx/glxdricommon.c                    |    2 
 glx/glxext.c                          |   12 
 glx/glxserver.h                       |    3 
 hw/dmx/dmx.c                          |    3 
 hw/dmx/glxProxy/glxext.c              |   11 
 hw/dmx/glxProxy/glxext.h              |    2 
 hw/kdrive/ephyr/Makefile.am           |    1 
 hw/kdrive/ephyr/ephyr.c               |   15 
 hw/kdrive/ephyr/ephyrinit.c           |    2 
 hw/kdrive/src/kxv.c                   |   12 
 hw/vfb/Makefile.am                    |    2 
 hw/xfree86/Makefile.am                |   17 
 hw/xfree86/common/Makefile.am         |   14 
 hw/xfree86/common/dgaproc.h           |  110 +
 hw/xfree86/common/vidmodeproc.h       |    2 
 hw/xfree86/common/xaarop.h            |  311 ++++
 hw/xfree86/common/xf86.h              |    6 
 hw/xfree86/common/xf86Config.c        |   13 
 hw/xfree86/common/xf86DGA.c           | 1025 +++++++++++++
 hw/xfree86/common/xf86Extensions.c    |  142 +
 hw/xfree86/common/xf86Extensions.h    |   55 
 hw/xfree86/common/xf86Init.c          |    2 
 hw/xfree86/common/xf86Module.h        |   17 
 hw/xfree86/common/xf86vmode.c         | 2165 +++++++++++++++++++++++++++++
 hw/xfree86/common/xf86xv.c            |   13 
 hw/xfree86/common/xf86xv.h            |    4 
 hw/xfree86/common/xf86xvmc.c          |    6 
 hw/xfree86/common/xf86xvmc.h          |    3 
 hw/xfree86/dixmods/Makefile.am        |   25 
 hw/xfree86/dixmods/dbemodule.c        |   45 
 hw/xfree86/dixmods/extmod/Makefile.am |   30 
 hw/xfree86/dixmods/extmod/dgaproc.h   |  115 -
 hw/xfree86/dixmods/extmod/modinit.c   |  177 --
 hw/xfree86/dixmods/extmod/modinit.h   |   49 
 hw/xfree86/dixmods/extmod/xf86dga2.c  | 1043 --------------
 hw/xfree86/dixmods/extmod/xf86vmode.c | 2164 -----------------------------
 hw/xfree86/dixmods/extmod/xvmod.c     |   22 
 hw/xfree86/dixmods/extmod/xvmodproc.h |   17 
 hw/xfree86/dixmods/glxmodule.c        |   12 
 hw/xfree86/dixmods/recordmod.c        |   43 
 hw/xfree86/doc/README.modes           |    9 
 hw/xfree86/doc/ddxDesign.xml          |   60 
 hw/xfree86/doc/exa-driver.txt         |    9 
 hw/xfree86/dri/Makefile.am            |   30 
 hw/xfree86/dri/dri.c                  |    4 
 hw/xfree86/dri/dri.h                  |    2 
 hw/xfree86/dri/drimodule.c            |   93 -
 hw/xfree86/dri/xf86dri.c              |   11 
 hw/xfree86/dri2/Makefile.am           |   13 
 hw/xfree86/dri2/dri2.c                |   38 
 hw/xfree86/dri2/dri2.h                |    4 
 hw/xfree86/dri2/dri2ext.c             |   24 
 hw/xfree86/dri2/dri2int.h             |   26 
 hw/xfree86/loader/Makefile.am         |    3 
 hw/xfree86/loader/loaderProcs.h       |    1 
 hw/xfree86/loader/loadext.c           |  440 -----
 hw/xfree86/loader/loadmod.c           |    9 
 hw/xfree86/os-support/shared/vidmem.c |   13 
 hw/xfree86/os-support/xf86_OSproc.h   |    2 
 hw/xfree86/ramdac/.gitignore          |    2 
 hw/xfree86/ramdac/Makefile.am         |   11 
 hw/xfree86/ramdac/xf86CursorPriv.h    |    2 
 hw/xfree86/ramdac/xf86HWCurs.c        |    9 
 hw/xfree86/sdksyms.sh                 |   30 
 hw/xfree86/xaa/.gitignore             |    4 
 hw/xfree86/xaa/Makefile.am            |   79 -
 hw/xfree86/xaa/XAA.HOWTO              | 1427 -------------------
 hw/xfree86/xaa/xaa.h                  | 1038 -------------
 hw/xfree86/xaa/xaaBitBlt.c            |  229 ---
 hw/xfree86/xaa/xaaBitOrder.c          |   16 
 hw/xfree86/xaa/xaaBitmap.c            |  477 ------
 hw/xfree86/xaa/xaaCpyArea.c           |  409 -----
 hw/xfree86/xaa/xaaCpyPlane.c          |  204 --
 hw/xfree86/xaa/xaaCpyWin.c            |   78 -
 hw/xfree86/xaa/xaaDashLine.c          |  353 ----
 hw/xfree86/xaa/xaaFallback.c          |  281 ---
 hw/xfree86/xaa/xaaFillArc.c           |  202 --
 hw/xfree86/xaa/xaaFillPoly.c          |  991 -------------
 hw/xfree86/xaa/xaaFillRect.c          | 1101 --------------
 hw/xfree86/xaa/xaaGC.c                |  564 -------
 hw/xfree86/xaa/xaaGCmisc.c            |  412 -----
 hw/xfree86/xaa/xaaImage.c             |  534 -------
 hw/xfree86/xaa/xaaInit.c              |  635 --------
 hw/xfree86/xaa/xaaInitAccel.c         | 1571 ---------------------
 hw/xfree86/xaa/xaaLine.c              |  422 -----
 hw/xfree86/xaa/xaaLineMisc.c          |  149 --
 hw/xfree86/xaa/xaaNonTEGlyph.c        |  192 --
 hw/xfree86/xaa/xaaNonTEText.c         |  591 -------
 hw/xfree86/xaa/xaaOffscreen.c         |  163 --
 hw/xfree86/xaa/xaaOverlay.c           |  122 -
 hw/xfree86/xaa/xaaOverlayDF.c         |  906 ------------
 hw/xfree86/xaa/xaaPCache.c            | 2527 ----------------------------------
 hw/xfree86/xaa/xaaPict.c              |  654 --------
 hw/xfree86/xaa/xaaROP.c               |  182 --
 hw/xfree86/xaa/xaaRect.c              |  121 -
 hw/xfree86/xaa/xaaSpans.c             |  876 -----------
 hw/xfree86/xaa/xaaStateChange.c       | 1665 ----------------------
 hw/xfree86/xaa/xaaStipple.c           |  915 ------------
 hw/xfree86/xaa/xaaTEGlyph.c           | 1083 --------------
 hw/xfree86/xaa/xaaTEText.c            |  295 ---
 hw/xfree86/xaa/xaaTables.c            |  152 --
 hw/xfree86/xaa/xaaWideLine.c          |  924 ------------
 hw/xfree86/xaa/xaacexp.h              |  126 -
 hw/xfree86/xaa/xaalocal.h             | 1437 -------------------
 hw/xfree86/xaa/xaarop.h               |  311 ----
 hw/xfree86/xaa/xaawrap.h              |   75 -
 hw/xnest/Makefile.am                  |    1 
 hw/xquartz/pseudoramiX.c              |    1 
 hw/xquartz/pseudoramiX.h              |    1 
 hw/xquartz/quartz.c                   |   19 
 hw/xquartz/xpr/dri.c                  |    6 
 hw/xquartz/xpr/dri.h                  |    3 
 include/dix.h                         |    2 
 include/extension.h                   |   42 
 include/extinit.h                     |  163 ++
 include/globals.h                     |   81 -
 include/window.h                      |    4 
 include/xorg-server.h.in              |    2 
 mi/miinitext.c                        |  413 +----
 os/utils.c                            |    5 
 randr/randr.c                         |    1 
 randr/randrstr.h                      |    4 
 record/record.c                       |    3 
 render/glyph.c                        |    2 
 render/picturestr.h                   |    2 
 render/render.c                       |    1 
 test/Makefile.am                      |   12 
 xfixes/xfixes.c                       |    1 
 xfixes/xfixesint.h                    |    5 
 xkb/XKBGAlloc.c                       |  129 -
 xkb/xkb.c                             |    1 
 xkb/xkb.h                             |    2 
 xkb/xkbgeom.h                         |   17 
 166 files changed, 4406 insertions(+), 29730 deletions(-)

New commits:
commit 532fbc29c900469ef4867ccb7eabb953019dcab5
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:03:38 2012 +0100

    GE: Remove unused RT_GECLIENT
    
    Remove remnants of an earlier experiment which had the GE extension
    handling event delivery directly.  Nothing's used the resource since, so
    purge it.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Adam Jackson <ajax at redhat.com>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/Xext/geext.c b/Xext/geext.c
index ad7f963..1e5ae6f 100644
--- a/Xext/geext.c
+++ b/Xext/geext.c
@@ -36,8 +36,6 @@
 
 DevPrivateKeyRec GEClientPrivateKeyRec;
 
-int RT_GECLIENT = 0;
-
 GEExtension GEExtensions[MAXEXTENSIONS];
 
 /* Major available requests */
commit 0e70b333d4846b166bf4a0a0c5d1a80623ba08dc
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:03:37 2012 +0100

    XFree86: os-support: Remove unused xf86MakeNewMapping
    
    No drivers used this, so it got unexported, and now it's so unused it
    got culled during the link.  Take the poor function out behind the shed
    and put it out of its misery.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Adam Jackson <ajax at redhat.com>
    Acked-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/os-support/shared/vidmem.c b/hw/xfree86/os-support/shared/vidmem.c
index a7717d8..514fc2f 100644
--- a/hw/xfree86/os-support/shared/vidmem.c
+++ b/hw/xfree86/os-support/shared/vidmem.c
@@ -157,19 +157,6 @@ checkMtrrOption(VidMapPtr vp)
 }
 
 void
-xf86MakeNewMapping(int ScreenNum, int Flags, unsigned long Base,
-                   unsigned long Size, pointer Vbase)
-{
-    VidMapPtr vp;
-    MappingPtr mp;
-
-    vp = getVidMapRec(ScreenNum);
-    mp = newMapping(vp);
-    mp->size = Size;
-    mp->virtBase = Vbase;
-}
-
-void
 xf86InitVidMem(void)
 {
     if (!vidMemInfo.initialised) {
diff --git a/hw/xfree86/os-support/xf86_OSproc.h b/hw/xfree86/os-support/xf86_OSproc.h
index 2f0172e..ea2b16e 100644
--- a/hw/xfree86/os-support/xf86_OSproc.h
+++ b/hw/xfree86/os-support/xf86_OSproc.h
@@ -215,8 +215,6 @@ extern _X_EXPORT int xf86ProcessArgument(int, char **, int);
 extern _X_EXPORT void xf86UseMsg(void);
 extern _X_EXPORT PMClose xf86OSPMOpen(void);
 
-extern _X_EXPORT _X_DEPRECATED void xf86MakeNewMapping(int, int, unsigned long,
-                                                       unsigned long, pointer);
 extern _X_EXPORT void xf86InitVidMem(void);
 
 #endif                          /* XF86_OS_PRIVS */
commit 43f2393746c44e9d35be6a2a3555205f8e1b4ddf
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:03:36 2012 +0100

    Xinerama: Reset Composite request vector on close
    
    Similar (identical) to how it interacts with Render and XFixes, also
    call PanoramiXCompositeReset() to restore the Composite dispatch table
    to how it was when it started, on reset.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Adam Jackson <ajax at redhat.com>
    Acked-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/Xext/panoramiX.c b/Xext/panoramiX.c
index 3398a8d..5653c08 100644
--- a/Xext/panoramiX.c
+++ b/Xext/panoramiX.c
@@ -895,6 +895,9 @@ PanoramiXResetProc(ExtensionEntry * extEntry)
 #ifdef XFIXES
     PanoramiXFixesReset();
 #endif
+#ifdef COMPOSITE
+    PanoramiXCompositeReset ();
+#endif
     screenInfo.numScreens = PanoramiXNumScreens;
     for (i = 256; i--;)
         ProcVector[i] = SavedProcVector[i];
commit 766a403bc7ff249fdc6b9049329b633e73738329
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:03:35 2012 +0100

    XvMC: Remove unused XvMCGeneration
    
    I wonder if this even works across multiple generations.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Adam Jackson <ajax at redhat.com>
    Acked-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/Xext/xvmc.c b/Xext/xvmc.c
index ad7956b..8d93cc3 100644
--- a/Xext/xvmc.c
+++ b/Xext/xvmc.c
@@ -37,8 +37,6 @@ static DevPrivateKeyRec XvMCScreenKeyRec;
 #define XvMCScreenKey (&XvMCScreenKeyRec)
 static Bool XvMCInUse;
 
-unsigned long XvMCGeneration = 0;
-
 int XvMCReqCode;
 int XvMCEventBase;
 
commit 7cef23a6dd7a5d76983cf20979e845ea6ae63a10
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:03:34 2012 +0100

    Render: Remove unused glyphDepths
    
    No-one has used this since 0a71e154.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Adam Jackson <ajax at redhat.com>
    Acked-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/render/glyph.c b/render/glyph.c
index c121e64..e1dc662 100644
--- a/render/glyph.c
+++ b/render/glyph.c
@@ -80,8 +80,6 @@ static GlyphHashSetRec glyphHashSets[] = {
 
 #define NGLYPHHASHSETS	(sizeof(glyphHashSets)/sizeof(glyphHashSets[0]))
 
-static const CARD8 glyphDepths[GlyphFormatNum] = { 1, 4, 8, 16, 32 };
-
 static GlyphHashRec globalGlyphs[GlyphFormatNum];
 
 void
commit 65011064d7e70aed59fb716f9ed3d76d196244ce
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:03:33 2012 +0100

    Xi: Remove dead Device{Enter,Leave}WindowMask
    
    These were an unused remnant of earlier MPX work; their only users got
    cleared out in dc153271, but the mask declarations remained.  Remove
    them, and move DevicePropertyNotify's mask up to be contiguous with the
    rest of the range.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Adam Jackson <ajax at redhat.com>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/Xi/extinit.c b/Xi/extinit.c
index 52d248b..eac2586 100644
--- a/Xi/extinit.c
+++ b/Xi/extinit.c
@@ -148,10 +148,8 @@ const Mask ChangeDeviceNotifyMask = (1L << 16);
 const Mask DeviceButtonGrabMask = (1L << 17);
 const Mask DeviceOwnerGrabButtonMask = (1L << 17);
 const Mask DevicePresenceNotifyMask = (1L << 18);
-const Mask DeviceEnterWindowMask = (1L << 18);
-const Mask DeviceLeaveWindowMask = (1L << 19);
-const Mask DevicePropertyNotifyMask = (1L << 20);
-const Mask XIAllMasks = (1L << 21) - 1;
+const Mask DevicePropertyNotifyMask = (1L << 19);
+const Mask XIAllMasks = (1L << 20) - 1;
 
 int ExtEventIndex;
 Mask ExtExclusiveMasks[EMASKSIZE];
commit fadfc2947075c832cd1107d2c0866ad13fa756c4
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:03:32 2012 +0100

    GLX: Remove unused noGlxVisualInit
    
    No-one ever did anything with this variable except assign its default
    value to it.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Adam Jackson <ajax at redhat.com>
    Acked-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/kdrive/ephyr/ephyr.c b/hw/kdrive/ephyr/ephyr.c
index fe3dae6..a5225dc 100644
--- a/hw/kdrive/ephyr/ephyr.c
+++ b/hw/kdrive/ephyr/ephyr.c
@@ -42,10 +42,6 @@
 
 extern int KdTsPhyScreen;
 
-#ifdef GLXEXT
-extern Bool noGlxVisualInit;
-#endif
-
 KdKeyboardInfo *ephyrKbd;
 KdPointerInfo *ephyrMouse;
 EphyrKeySyms ephyrKeySyms;
@@ -624,12 +620,9 @@ ephyrInitScreen(ScreenPtr pScreen)
     }
 #endif /*XV*/
 #ifdef XF86DRI
-        if (!ephyrNoDRI && !hostx_has_dri()) {
+    if (!ephyrNoDRI && !hostx_has_dri()) {
         EPHYR_LOG("host x does not support DRI. Disabling DRI forwarding\n");
         ephyrNoDRI = TRUE;
-#ifdef GLXEXT
-        noGlxVisualInit = FALSE;
-#endif
     }
     if (!ephyrNoDRI) {
         ephyrDRIExtensionInit(pScreen);
@@ -637,12 +630,6 @@ ephyrInitScreen(ScreenPtr pScreen)
     }
 #endif
 
-#ifdef GLXEXT
-    if (ephyrNoDRI) {
-        noGlxVisualInit = FALSE;
-    }
-#endif
-
     return TRUE;
 }
 
diff --git a/hw/kdrive/ephyr/ephyrinit.c b/hw/kdrive/ephyr/ephyrinit.c
index a62b49d..5e2eb67 100644
--- a/hw/kdrive/ephyr/ephyrinit.c
+++ b/hw/kdrive/ephyr/ephyrinit.c
@@ -36,7 +36,6 @@ extern Bool kdHasKbd;
 
 #ifdef GLXEXT
 extern Bool ephyrNoDRI;
-extern Bool noGlxVisualInit;
 #endif
 extern Bool ephyrNoXV;
 
@@ -233,7 +232,6 @@ ddxProcessArgument(int argc, char **argv, int i)
     }
 #ifdef GLXEXT
     else if (!strcmp(argv[i], "-nodri")) {
-        noGlxVisualInit = FALSE;
         ephyrNoDRI = TRUE;
         EPHYR_LOG("no direct rendering enabled\n");
         return 1;
diff --git a/os/utils.c b/os/utils.c
index b00d38b..b50cbdb 100644
--- a/os/utils.c
+++ b/os/utils.c
@@ -138,7 +138,6 @@ Bool noDPMSExtension = FALSE;
 #endif
 #ifdef GLXEXT
 Bool noGlxExtension = FALSE;
-Bool noGlxVisualInit = FALSE;
 #endif
 #ifdef SCREENSAVER
 Bool noScreenSaverExtension = FALSE;
commit 06e4ba8b26fb974bdd84144b3e002f0f7589e7f7
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:03:31 2012 +0100

    XKB: Geom: Remove unused code
    
    These codepaths were never called by anyone.  Shame there weren't more
    of them.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Adam Jackson <ajax at redhat.com>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/xkb/XKBGAlloc.c b/xkb/XKBGAlloc.c
index f7e0176..8880784 100644
--- a/xkb/XKBGAlloc.c
+++ b/xkb/XKBGAlloc.c
@@ -249,51 +249,6 @@ XkbFreeGeomOverlayKeys(XkbOverlayRowPtr row, int first, int count, Bool freeAll)
 
 /***====================================================================***/
 
-static void
-_XkbClearOverlayRow(char *row_in)
-{
-    XkbOverlayRowPtr row = (XkbOverlayRowPtr) row_in;
-
-    if (row->keys != NULL)
-        XkbFreeGeomOverlayKeys(row, 0, row->num_keys, TRUE);
-    return;
-}
-
-void
-XkbFreeGeomOverlayRows(XkbOverlayPtr overlay, int first, int count,
-                       Bool freeAll)
-{
-    _XkbFreeGeomNonLeafElems(freeAll, first, count,
-                             &overlay->num_rows, &overlay->sz_rows,
-                             (char **) &overlay->rows,
-                             sizeof(XkbOverlayRowRec), _XkbClearOverlayRow);
-    return;
-}
-
-/***====================================================================***/
-
-static void
-_XkbClearOverlay(char *overlay_in)
-{
-    XkbOverlayPtr overlay = (XkbOverlayPtr) overlay_in;
-
-    if (overlay->rows != NULL)
-        XkbFreeGeomOverlayRows(overlay, 0, overlay->num_rows, TRUE);
-    return;
-}
-
-void
-XkbFreeGeomOverlays(XkbSectionPtr section, int first, int count, Bool freeAll)
-{
-    _XkbFreeGeomNonLeafElems(freeAll, first, count,
-                             &section->num_overlays, &section->sz_overlays,
-                             (char **) &section->overlays,
-                             sizeof(XkbOverlayRec), _XkbClearOverlay);
-    return;
-}
-
-/***====================================================================***/
-
 void
 XkbFreeGeomKeys(XkbRowPtr row, int first, int count, Bool freeAll)
 {
@@ -543,90 +498,6 @@ _XkbGeomAlloc(void **old,
 				(n),sizeof(XkbOverlayKeyRec))
 
 Status
-XkbAllocGeomProps(XkbGeometryPtr geom, int nProps)
-{
-    return _XkbAllocProps(geom, nProps);
-}
-
-Status
-XkbAllocGeomColors(XkbGeometryPtr geom, int nColors)
-{
-    return _XkbAllocColors(geom, nColors);
-}
-
-Status
-XkbAllocGeomKeyAliases(XkbGeometryPtr geom, int nKeyAliases)
-{
-    return _XkbAllocKeyAliases(geom, nKeyAliases);
-}
-
-Status
-XkbAllocGeomShapes(XkbGeometryPtr geom, int nShapes)
-{
-    return _XkbAllocShapes(geom, nShapes);
-}
-
-Status
-XkbAllocGeomSections(XkbGeometryPtr geom, int nSections)
-{
-    return _XkbAllocSections(geom, nSections);
-}
-
-Status
-XkbAllocGeomOverlays(XkbSectionPtr section, int nOverlays)
-{
-    return _XkbAllocOverlays(section, nOverlays);
-}
-
-Status
-XkbAllocGeomOverlayRows(XkbOverlayPtr overlay, int nRows)
-{
-    return _XkbAllocOverlayRows(overlay, nRows);
-}
-
-Status
-XkbAllocGeomOverlayKeys(XkbOverlayRowPtr row, int nKeys)
-{
-    return _XkbAllocOverlayKeys(row, nKeys);
-}
-
-Status
-XkbAllocGeomDoodads(XkbGeometryPtr geom, int nDoodads)
-{
-    return _XkbAllocDoodads(geom, nDoodads);
-}
-
-Status
-XkbAllocGeomSectionDoodads(XkbSectionPtr section, int nDoodads)
-{
-    return _XkbAllocDoodads(section, nDoodads);
-}
-
-Status
-XkbAllocGeomOutlines(XkbShapePtr shape, int nOL)
-{
-    return _XkbAllocOutlines(shape, nOL);
-}
-
-Status
-XkbAllocGeomRows(XkbSectionPtr section, int nRows)
-{
-    return _XkbAllocRows(section, nRows);
-}
-
-Status
-XkbAllocGeomPoints(XkbOutlinePtr ol, int nPts)
-{
-    return _XkbAllocPoints(ol, nPts);
-}
-
-Status
-XkbAllocGeomKeys(XkbRowPtr row, int nKeys)
-{
-    return _XkbAllocKeys(row, nKeys);
-}
-
-Status
 XkbAllocGeometry(XkbDescPtr xkb, XkbGeometrySizesPtr sizes)
 {
     XkbGeometryPtr geom;
diff --git a/xkb/xkbgeom.h b/xkb/xkbgeom.h
index bef3775..1999f5c 100644
--- a/xkb/xkbgeom.h
+++ b/xkb/xkbgeom.h
@@ -41,28 +41,11 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #define XkbAddGeomRow			SrvXkbAddGeomRow
 #define XkbAddGeomSection		SrvXkbAddGeomSection
 #define XkbAddGeomShape			SrvXkbAddGeomShape
-#define XkbAllocGeomKeyAliases		SrvXkbAllocGeomKeyAliases
-#define XkbAllocGeomColors		SrvXkbAllocGeomColors
-#define XkbAllocGeomDoodads		SrvXkbAllocGeomDoodads
-#define XkbAllocGeomKeys		SrvXkbAllocGeomKeys
-#define XkbAllocGeomOutlines		SrvXkbAllocGeomOutlines
-#define XkbAllocGeomPoints		SrvXkbAllocGeomPoints
-#define XkbAllocGeomProps		SrvXkbAllocGeomProps
-#define XkbAllocGeomRows		SrvXkbAllocGeomRows
-#define XkbAllocGeomSectionDoodads	SrvXkbAllocGeomSectionDoodads
-#define XkbAllocGeomSections		SrvXkbAllocGeomSections
-#define	XkbAllocGeomOverlays		SrvXkbAllocGeomOverlays
-#define	XkbAllocGeomOverlayRows		SrvXkbAllocGeomOverlayRows
-#define	XkbAllocGeomOverlayKeys		SrvXkbAllocGeomOverlayKeys
-#define XkbAllocGeomShapes		SrvXkbAllocGeomShapes
 #define XkbAllocGeometry		SrvXkbAllocGeometry
 #define XkbFreeGeomKeyAliases		SrvXkbFreeGeomKeyAliases
 #define XkbFreeGeomColors		SrvXkbFreeGeomColors
 #define XkbFreeGeomDoodads		SrvXkbFreeGeomDoodads
 #define XkbFreeGeomProperties		SrvXkbFreeGeomProperties
-#define	XkbFreeGeomOverlayKeys		SrvXkbFreeGeomOverlayKeys
-#define	XkbFreeGeomOverlayRows		SrvXkbFreeGeomOverlayRows
-#define	XkbFreeGeomOverlays		SrvXkbFreeGeomOverlays
 #define	XkbFreeGeomKeys			SrvXkbFreeGeomKeys
 #define	XkbFreeGeomRows			SrvXkbFreeGeomRows
 #define XkbFreeGeomSections		SrvXkbFreeGeomSections
commit e191e296e6e7861978ea4a0ae9aa7b780e52732b
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Mon Jul 9 20:04:15 2012 +0100

    Remove XAA
    
    Commit 0c6987df in June 2008 disabled XAA offscreen pixmaps per default,
    as they were broken, leaving XAA only able to accelerate operations
    directly on the screen pixmap and nowhere else, eliminating acceleration
    for basically every modern toolkit, and any composited environment.
    
    So, it hasn't worked for over four years.  No-one's even come close to
    fixing it.
    
    RIP.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Dave Airlie <airlied at redhat.com>
    Reviewed-by: Alex Deucher <alexdeucher at gmail.com>

diff --git a/configure.ac b/configure.ac
index 209b237..1d915f1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -620,7 +620,6 @@ AC_ARG_ENABLE(config-dbus,    AS_HELP_STRING([--enable-config-dbus], [Build D-BU
 AC_ARG_ENABLE(config-hal,     AS_HELP_STRING([--disable-config-hal], [Build HAL support (default: auto)]), [CONFIG_HAL=$enableval], [CONFIG_HAL=auto])
 AC_ARG_ENABLE(config-wscons,  AS_HELP_STRING([--enable-config-wscons], [Build wscons config support (default: auto)]), [CONFIG_WSCONS=$enableval], [CONFIG_WSCONS=auto])
 AC_ARG_ENABLE(xfree86-utils,     AS_HELP_STRING([--enable-xfree86-utils], [Build xfree86 DDX utilities (default: enabled)]), [XF86UTILS=$enableval], [XF86UTILS=yes])
-AC_ARG_ENABLE(xaa,               AS_HELP_STRING([--enable-xaa], [Build XAA (default: enabled)]), [XAA=$enableval], [XAA=yes])
 AC_ARG_ENABLE(vgahw,          AS_HELP_STRING([--enable-vgahw], [Build Xorg with vga access (default: enabled)]), [VGAHW=$enableval], [VGAHW=yes])
 AC_ARG_ENABLE(vbe,            AS_HELP_STRING([--enable-vbe], [Build Xorg with VBE module (default: enabled)]), [VBE=$enableval], [VBE=yes])
 AC_ARG_ENABLE(int10-module,     AS_HELP_STRING([--enable-int10-module], [Build Xorg with int10 module (default: enabled)]), [INT10MODULE=$enableval], [INT10MODULE=yes])
@@ -712,7 +711,6 @@ case $host_os in
 		PCI=no
 		VGAHW=no
 		VBE=no
-		XAA=no
 		XF86UTILS=no
 		XF86VIDMODE=no
 		XSELINUX=no
@@ -1209,7 +1207,6 @@ XI_LIB='$(top_builddir)/Xi/libXi.la'
 XI_INC='-I$(top_srcdir)/Xi'
 
 AM_CONDITIONAL(XF86UTILS, test "x$XF86UTILS" = xyes)
-AM_CONDITIONAL(XAA, test "x$XAA" = xyes)
 AM_CONDITIONAL(VGAHW, test "x$VGAHW" = xyes)
 AM_CONDITIONAL(VBE, test "x$VBE" = xyes)
 AM_CONDITIONAL(INT10MODULE, test "x$INT10MODULE" = xyes)
@@ -2267,7 +2264,6 @@ hw/xfree86/shadowfb/Makefile
 hw/xfree86/vbe/Makefile
 hw/xfree86/vgahw/Makefile
 hw/xfree86/x86emu/Makefile
-hw/xfree86/xaa/Makefile
 hw/xfree86/utils/Makefile
 hw/xfree86/utils/man/Makefile
 hw/xfree86/utils/cvt/Makefile
diff --git a/hw/xfree86/Makefile.am b/hw/xfree86/Makefile.am
index cd699ee..c3899b5 100644
--- a/hw/xfree86/Makefile.am
+++ b/hw/xfree86/Makefile.am
@@ -13,8 +13,6 @@ if XF86UTILS
 XF86UTILS_SUBDIR = utils
 endif
 
-XAA_SUBDIR = xaa
-
 if VGAHW
 VGAHW_SUBDIR = vgahw
 endif
@@ -29,11 +27,11 @@ endif
 
 SUBDIRS = common ddc x86emu $(INT10_SUBDIR) os-support parser \
 	  ramdac $(VGAHW_SUBDIR) loader modes $(DRI_SUBDIR) \
-	  $(DRI2_SUBDIR) . $(VBE_SUBDIR) $(XAA_SUBDIR) i2c dixmods \
+	  $(DRI2_SUBDIR) . $(VBE_SUBDIR) i2c dixmods \
 	  fbdevhw shadowfb exa $(XF86UTILS_SUBDIR) doc man
 
 DIST_SUBDIRS = common ddc i2c x86emu int10 fbdevhw os-support \
-               parser ramdac shadowfb vbe vgahw xaa \
+               parser ramdac shadowfb vbe vgahw \
                loader dixmods dri dri2 exa modes \
 	       utils doc man
 
diff --git a/hw/xfree86/common/Makefile.am b/hw/xfree86/common/Makefile.am
index 325875d..f8fcde9 100644
--- a/hw/xfree86/common/Makefile.am
+++ b/hw/xfree86/common/Makefile.am
@@ -62,7 +62,8 @@ sdk_HEADERS = compiler.h fourcc.h xf86.h xf86Module.h xf86Opt.h \
               xf86PciInfo.h xf86Priv.h xf86Privstr.h \
               xf86cmap.h xf86fbman.h xf86str.h xf86Xinput.h xisb.h \
               $(XVSDKINCS) $(XF86VMODE_SDK) $(DGA_SDK) xorgVersion.h \
-              xf86sbusBus.h xf86VGAarbiter.h xf86Optionstr.h xf86platformBus.h
+              xf86sbusBus.h xf86VGAarbiter.h xf86Optionstr.h xf86platformBus.h \
+	      xaarop.h
 
 DISTCLEANFILES = xf86Build.h
 CLEANFILES = $(BUILT_SOURCES)
@@ -94,7 +95,8 @@ EXTRA_DIST = \
 	modeline2c.awk \
 	xf86VGAarbiter.h \
 	xf86VGAarbiterPriv.h \
-        $(DISTKBDSOURCES)
+        $(DISTKBDSOURCES) \
+	xaarop.h
 
 if LNXACPI
 XORG_CFLAGS += -DHAVE_ACPI
diff --git a/hw/xfree86/common/xaarop.h b/hw/xfree86/common/xaarop.h
new file mode 100644
index 0000000..f2acde0
--- /dev/null
+++ b/hw/xfree86/common/xaarop.h
@@ -0,0 +1,311 @@
+/*
+
+   int XAAHelpSolidROP(ScrnInfoPtr pScrn, int *fg, int pm, int *rop)
+
+	For use with solid fills emulated by solid 8x8 patterns.  You 
+	give it the foreground, planemask and X rop and it will replace 
+	the foreground with a new one and the rop with the appropriate 
+	MS triadic raster op.  The function will return which components 
+	(S-P) need to be enabled.  
+
+   int XAAHelpPatternROP(ScrnInfoPtr pScrn, int *fg, int *bg, int pm, int *rop)
+
+	For use with 8x8 opaque pattern fills.  You give it the foreground, 	
+	and background, planemask and X rop and it will replace the 
+	foreground and background with new ones and the rop with the 
+	appropriate MS triadic raster op.  The function will return which 
+	components (S-P) need to be enabled.  
+
+	   ROP_PAT - Means to enable 8x8 mono patterns (all bits 
+		     set for solid patterns).  Set the foreground and
+		     background as returned by the function.  
+
+	   ROP_SRC - Means a source of color == planemask should be used.
+
+
+*/
+
+#ifndef _XAAROP_H
+#define _XAAROP_H
+
+#define ROP_DST		0x00000001
+#define ROP_SRC		0x00000002
+#define ROP_PAT		0x00000004
+
+#define ROP_0		0x00
+#define ROP_DPSoon	0x01
+#define ROP_DPSona	0x02
+#define ROP_PSon	0x03
+#define ROP_SDPona	0x04
+#define ROP_DPon	0x05
+#define ROP_PDSxnon	0x06
+#define ROP_PDSaon	0x07
+#define ROP_SDPnaa	0x08
+#define ROP_PDSxon	0x09
+#define ROP_DPna	0x0A
+#define ROP_PSDnaon	0x0B
+#define ROP_SPna	0x0C
+#define ROP_PDSnaon	0x0D
+#define ROP_PDSonon	0x0E
+#define ROP_Pn		0x0F
+#define ROP_PDSona	0x10
+#define ROP_DSon	0x11
+#define ROP_SDPxnon	0x12
+#define ROP_SDPaon	0x13
+#define ROP_DPSxnon	0x14
+#define ROP_DPSaon	0x15
+#define ROP_PSDPSanaxx	0x16
+#define ROP_SSPxDSxaxn	0x17
+#define ROP_SPxPDxa	0x18
+#define ROP_SDPSanaxn	0x19
+#define ROP_PDSPaox	0x1A
+#define ROP_SDPSxaxn	0x1B
+#define ROP_PSDPaox	0x1C
+#define ROP_DSPDxaxn	0x1D
+#define ROP_PDSox	0x1E
+#define ROP_PDSoan	0x1F
+#define ROP_DPSnaa	0x20
+#define ROP_SDPxon	0x21
+#define ROP_DSna	0x22
+#define ROP_SPDnaon	0x23
+#define ROP_SPxDSxa	0x24
+#define ROP_PDSPanaxn	0x25
+#define ROP_SDPSaox	0x26
+#define ROP_SDPSxnox	0x27
+#define ROP_DPSxa	0x28
+#define ROP_PSDPSaoxxn	0x29
+#define ROP_DPSana	0x2A
+#define ROP_SSPxPDxaxn	0x2B
+#define ROP_SPDSoax	0x2C
+#define ROP_PSDnox	0x2D
+#define ROP_PSDPxox	0x2E
+#define ROP_PSDnoan	0x2F
+#define ROP_PSna	0x30
+#define ROP_SDPnaon	0x31
+#define ROP_SDPSoox	0x32
+#define ROP_Sn		0x33
+#define ROP_SPDSaox	0x34
+#define ROP_SPDSxnox	0x35
+#define ROP_SDPox	0x36
+#define ROP_SDPoan	0x37
+#define ROP_PSDPoax	0x38
+#define ROP_SPDnox	0x39
+#define ROP_SPDSxox	0x3A
+#define ROP_SPDnoan	0x3B
+#define ROP_PSx		0x3C
+#define ROP_SPDSonox	0x3D
+#define ROP_SPDSnaox	0x3E
+#define ROP_PSan	0x3F
+#define ROP_PSDnaa	0x40
+#define ROP_DPSxon	0x41
+#define ROP_SDxPDxa	0x42
+#define ROP_SPDSanaxn	0x43
+#define ROP_SDna	0x44
+#define ROP_DPSnaon	0x45
+#define ROP_DSPDaox	0x46
+#define ROP_PSDPxaxn	0x47
+#define ROP_SDPxa	0x48
+#define ROP_PDSPDaoxxn	0x49
+#define ROP_DPSDoax	0x4A
+#define ROP_PDSnox	0x4B
+#define ROP_SDPana	0x4C
+#define ROP_SSPxDSxoxn	0x4D
+#define ROP_PDSPxox	0x4E
+#define ROP_PDSnoan	0x4F
+#define ROP_PDna	0x50
+#define ROP_DSPnaon	0x51
+#define ROP_DPSDaox	0x52
+#define ROP_SPDSxaxn	0x53
+#define ROP_DPSonon	0x54
+#define ROP_Dn		0x55
+#define ROP_DPSox	0x56
+#define ROP_DPSoan	0x57
+#define ROP_PDSPoax	0x58
+#define ROP_DPSnox	0x59
+#define ROP_DPx		0x5A
+#define ROP_DPSDonox	0x5B
+#define ROP_DPSDxox	0x5C
+#define ROP_DPSnoan	0x5D
+#define ROP_DPSDnaox	0x5E
+#define ROP_DPan	0x5F
+#define ROP_PDSxa	0x60
+#define ROP_DSPDSaoxxn	0x61
+#define ROP_DSPDoax	0x62
+#define ROP_SDPnox	0x63
+#define ROP_SDPSoax	0x64
+#define ROP_DSPnox	0x65
+#define ROP_DSx		0x66
+#define ROP_SDPSonox	0x67
+#define ROP_DSPDSonoxxn	0x68
+#define ROP_PDSxxn	0x69
+#define ROP_DPSax	0x6A
+#define ROP_PSDPSoaxxn	0x6B
+#define ROP_SDPax	0x6C
+#define ROP_PDSPDoaxxn	0x6D
+#define ROP_SDPSnoax	0x6E
+#define ROP_PDSxnan	0x6F
+#define ROP_PDSana	0x70
+#define ROP_SSDxPDxaxn	0x71
+#define ROP_SDPSxox	0x72
+#define ROP_SDPnoan	0x73
+#define ROP_DSPDxox	0x74
+#define ROP_DSPnoan	0x75
+#define ROP_SDPSnaox	0x76
+#define ROP_DSan	0x77
+#define ROP_PDSax	0x78
+#define ROP_DSPDSoaxxn	0x79
+#define ROP_DPSDnoax	0x7A
+#define ROP_SDPxnan	0x7B
+#define ROP_SPDSnoax	0x7C
+#define ROP_DPSxnan	0x7D
+#define ROP_SPxDSxo	0x7E
+#define ROP_DPSaan	0x7F
+#define ROP_DPSaa	0x80
+#define ROP_SPxDSxon	0x81
+#define ROP_DPSxna	0x82
+#define ROP_SPDSnoaxn	0x83
+#define ROP_SDPxna	0x84
+#define ROP_PDSPnoaxn	0x85
+#define ROP_DSPDSoaxx	0x86
+#define ROP_PDSaxn	0x87
+#define ROP_DSa		0x88
+#define ROP_SDPSnaoxn	0x89
+#define ROP_DSPnoa	0x8A
+#define ROP_DSPDxoxn	0x8B
+#define ROP_SDPnoa	0x8C
+#define ROP_SDPSxoxn	0x8D
+#define ROP_SSDxPDxax	0x8E
+#define ROP_PDSanan	0x8F
+#define ROP_PDSxna	0x90
+#define ROP_SDPSnoaxn	0x91
+#define ROP_DPSDPoaxx	0x92
+#define ROP_SPDaxn	0x93
+#define ROP_PSDPSoaxx	0x94
+#define ROP_DPSaxn	0x95
+#define ROP_DPSxx	0x96
+#define ROP_PSDPSonoxx	0x97
+#define ROP_SDPSonoxn	0x98
+#define ROP_DSxn	0x99
+#define ROP_DPSnax	0x9A
+#define ROP_SDPSoaxn	0x9B
+#define ROP_SPDnax	0x9C
+#define ROP_DSPDoaxn	0x9D
+#define ROP_DSPDSaoxx	0x9E
+#define ROP_PDSxan	0x9F
+#define ROP_DPa		0xA0
+#define ROP_PDSPnaoxn	0xA1
+#define ROP_DPSnoa	0xA2
+#define ROP_DPSDxoxn	0xA3
+#define ROP_PDSPonoxn	0xA4
+#define ROP_PDxn	0xA5
+#define ROP_DSPnax	0xA6
+#define ROP_PDSPoaxn	0xA7
+#define ROP_DPSoa	0xA8
+#define ROP_DPSoxn	0xA9
+#define ROP_D		0xAA
+#define ROP_DPSono	0xAB
+#define ROP_SPDSxax	0xAC
+#define ROP_DPSDaoxn	0xAD
+#define ROP_DSPnao	0xAE
+#define ROP_DPno	0xAF
+#define ROP_PDSnoa	0xB0
+#define ROP_PDSPxoxn	0xB1
+#define ROP_SSPxDSxox	0xB2
+#define ROP_SDPanan	0xB3
+#define ROP_PSDnax	0xB4
+#define ROP_DPSDoaxn	0xB5
+#define ROP_DPSDPaoxx	0xB6
+#define ROP_SDPxan	0xB7
+#define ROP_PSDPxax	0xB8
+#define ROP_DSPDaoxn	0xB9
+#define ROP_DPSnao	0xBA
+#define ROP_DSno	0xBB
+#define ROP_SPDSanax	0xBC
+#define ROP_SDxPDxan	0xBD
+#define ROP_DPSxo	0xBE
+#define ROP_DPSano	0xBF
+#define ROP_Psa		0xC0
+#define ROP_SPDSnaoxn	0xC1
+#define ROP_SPDSonoxn	0xC2
+#define ROP_PSxn	0xC3
+#define ROP_SPDnoa	0xC4
+#define ROP_SPDSxoxn	0xC5
+#define ROP_SDPnax	0xC6
+#define ROP_PSDPoaxn	0xC7
+#define ROP_SDPoa	0xC8
+#define ROP_SPDoxn	0xC9
+#define ROP_DPSDxax	0xCA
+#define ROP_SPDSaoxn	0xCB
+#define ROP_S		0xCC
+#define ROP_SDPono	0xCD
+#define ROP_SDPnao	0xCE
+#define ROP_SPno	0xCF
+#define ROP_PSDnoa	0xD0
+#define ROP_PSDPxoxn	0xD1
+#define ROP_PDSnax	0xD2
+#define ROP_SPDSoaxn	0xD3
+#define ROP_SSPxPDxax	0xD4
+#define ROP_DPSanan	0xD5
+#define ROP_PSDPSaoxx	0xD6
+#define ROP_DPSxan	0xD7
+#define ROP_PDSPxax	0xD8
+#define ROP_SDPSaoxn	0xD9
+#define ROP_DPSDanax	0xDA
+#define ROP_SPxDSxan	0xDB
+#define ROP_SPDnao	0xDC
+#define ROP_SDno	0xDD
+#define ROP_SDPxo	0xDE
+#define ROP_SDPano	0xDF
+#define ROP_PDSoa	0xE0
+#define ROP_PDSoxn	0xE1
+#define ROP_DSPDxax	0xE2
+#define ROP_PSDPaoxn	0xE3
+#define ROP_SDPSxax	0xE4
+#define ROP_PDSPaoxn	0xE5
+#define ROP_SDPSanax	0xE6
+#define ROP_SPxPDxan	0xE7
+#define ROP_SSPxDSxax	0xE8
+#define ROP_DSPDSanaxxn	0xE9
+#define ROP_DPSao	0xEA
+#define ROP_DPSxno	0xEB
+#define ROP_SDPao	0xEC
+#define ROP_SDPxno	0xED
+#define ROP_DSo		0xEE
+#define ROP_SDPnoo	0xEF
+#define ROP_P		0xF0
+#define ROP_PDSono	0xF1
+#define ROP_PDSnao	0xF2
+#define ROP_PSno	0xF3
+#define ROP_PSDnao	0xF4
+#define ROP_PDno	0xF5
+#define ROP_PDSxo	0xF6
+#define ROP_PDSano	0xF7
+#define ROP_PDSao	0xF8
+#define ROP_PDSxno	0xF9
+#define ROP_DPo		0xFA
+#define ROP_DPSnoo	0xFB
+#define ROP_PSo		0xFC
+#define ROP_PSDnoo	0xFD
+#define ROP_DPSoo	0xFE
+#define ROP_1		0xFF
+
+#define NO_SRC_ROP(rop) \
+   ((rop == GXnoop) || (rop == GXset) || (rop == GXclear) || (rop == GXinvert))
+
+extern _X_EXPORT int XAAHelpSolidROP(ScrnInfoPtr pScrn, int *fg, int pm,
+                                     int *rop);
+extern _X_EXPORT int XAAHelpPatternROP(ScrnInfoPtr pScrn, int *fg, int *bg,
+                                       int pm, int *rop);
+
+/* XXX These four should be static, but it breaks the 6.7.0 ABI. */
+extern _X_EXPORT int XAACopyROP[16];
+extern _X_EXPORT int XAACopyROP_PM[16];
+extern _X_EXPORT int XAAPatternROP[16];
+extern _X_EXPORT int XAAPatternROP_PM[16];
+
+extern _X_EXPORT int XAAGetCopyROP(int i);
+extern _X_EXPORT int XAAGetCopyROP_PM(int i);
+extern _X_EXPORT int XAAGetPatternROP(int i);
+extern _X_EXPORT int XAAGetPatternROP_PM(int i);
+
+#endif                          /* _XAAROP_H */
diff --git a/hw/xfree86/doc/README.modes b/hw/xfree86/doc/README.modes
index 894e213..ea228e5 100644
--- a/hw/xfree86/doc/README.modes
+++ b/hw/xfree86/doc/README.modes
@@ -133,11 +133,10 @@ this function computes an initial configuration for the server. It tries to
 enable as much hardware as possible using some fairly simple heuristics. 
 
 The 'canGrow' parameter indicates that the frame buffer does not have a fixed
-size (fixed size frame buffers are required by XAA). When the frame buffer
-has a fixed size, the configuration selects a 'reasonablely large' frame
-buffer so that common reconfiguration options are possible. For resizable
-frame buffers, the frame buffer is set to the smallest size that encloses
-the desired configuration.
+size. When the frame buffer has a fixed size, the configuration selects a
+'reasonablely large' frame buffer so that common reconfiguration options are
+possible. For resizable frame buffers, the frame buffer is set to the smallest
+size that encloses the desired configuration.
     
 3.2 ScreenInit functions
 
diff --git a/hw/xfree86/doc/ddxDesign.xml b/hw/xfree86/doc/ddxDesign.xml
index ce81a9d..4c2ca47 100644
--- a/hw/xfree86/doc/ddxDesign.xml
+++ b/hw/xfree86/doc/ddxDesign.xml
@@ -330,8 +330,8 @@ that.  This is a significant difference compared with the old design.
 
     <para>
 The entry points for drawing operations are already taken care of by
-the framebuffer code (including, XAA).  Extensions and enhancements to
-framebuffer code are outside the scope of this document.
+the framebuffer code.  Extensions and enhancements to framebuffer code
+are outside the scope of this document.
     </para>
 
     <para>
@@ -2003,10 +2003,9 @@ also include the video card's saved state.
       </para>
 
       <para>
-Per-screen data for other modules that the driver uses (for example,
-the XAA module) that is reset for each server generation is hooked into
-the <structname>ScrnInfoRec</structname> through it's <structfield>privates</structfield>
-field.
+Per-screen data for other modules that the driver uses that is reset for each
+server generation is hooked into the <structname>ScrnInfoRec</structname>
+through its <structfield>privates</structfield> field.
       </para>
 
       <para>
@@ -3615,14 +3614,6 @@ The following include files are typically required by video drivers:
 	  </para>
 
 	  <para>
-  If a driver uses XAA, it needs these:
-	    <literallayout><filename>
-    "xaa.h"
-    "xaalocal.h"
-	      </filename></literallayout>
-	  </para>
-
-	  <para>
   If a driver uses the fb manager, it needs this:
 	    <literallayout><filename>
     "xf86fbman.h"
@@ -3840,31 +3831,6 @@ manager is allowed to manage.  This is typically a box with a width of
 can be fit within the total video memory, however, the driver can reserve
 areas at the extremities by passing a smaller area to the manager.
     </para>
-
-    <para>
-<function>xf86InitFBManager()</function> must be called before XAA is
-initialized since XAA uses the manager for it's pixmap cache.
-    </para>
-
-    <para>
-An alternative function is provided to allow the driver to initialize
-the framebuffer manager with a Region rather than a box.
-
-    <programlisting>
-    Bool xf86InitFBManagerRegion(ScreenPtr pScreen,
-                                 RegionPtr FullRegion);
-    </programlisting>
-
-<function>xf86InitFBManagerRegion()</function>, unlike
-<function>xf86InitFBManager()</function>, does not remove the area used for
-the visible screen so that area should not be included in the region
-passed to the function.  <function>xf86InitFBManagerRegion()</function> is
-useful when non-contiguous areas are available to be managed, and is
-required when multiple framebuffers are stored in video memory (as in
-the case where an overlay of a different depth is stored as a second
-framebuffer in offscreen memory).
-    </para>
-
   </sect1>
 
   <sect1 id="cmap">
@@ -8900,12 +8866,6 @@ ZZZPreInit(ScrnInfoPtr pScrn, int flags)
         ZZZFreeRec(pScrn);
         return FALSE;
 
-    /* Load XAA if needed */
-    if (!pZzz->noAccel || pZzz->hwCursor)
-        if (!xf86LoadSubModule(pScrn, "xaa")) {
-            ZZZFreeRec(pScrn);
-            return FALSE;
-        }
 
     /* Done */
     return TRUE;
diff --git a/hw/xfree86/doc/exa-driver.txt b/hw/xfree86/doc/exa-driver.txt
index 048307e..da39d3f 100644
--- a/hw/xfree86/doc/exa-driver.txt
+++ b/hw/xfree86/doc/exa-driver.txt
@@ -8,15 +8,10 @@ from system memory, and Porter-Duff compositing and transform operations.
 
 Configuration
 -------------
-A new config file option, AccelMethod, should be added to your driver, to allow
-the user to select between the EXA and XAA acceleration APIs.
-
 Some drivers implement a per-instance useEXA flag to track whether EXA is
-active or not.  It can be helpful to also conditionalize XAA support with an
-ifdef so that it can easily be turned off/removed in the future.
+active or not.
 
-Setting the flag and checking for AccelMethod can be done in the driver's
-Options parsing routine.
+Setting the flag can be done in the driver's Options parsing routine.
 
 Loading EXA
 ------------
diff --git a/hw/xfree86/ramdac/.gitignore b/hw/xfree86/ramdac/.gitignore
deleted file mode 100644
index c55c8c1..0000000
--- a/hw/xfree86/ramdac/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-#		Add & Override for this directory and it's subdirectories
-xf86BitOrder.c
diff --git a/hw/xfree86/ramdac/Makefile.am b/hw/xfree86/ramdac/Makefile.am
index 3c37805..346af4c 100644
--- a/hw/xfree86/ramdac/Makefile.am
+++ b/hw/xfree86/ramdac/Makefile.am
@@ -1,19 +1,12 @@
 noinst_LTLIBRARIES = libramdac.la
 
 libramdac_la_SOURCES = xf86RamDac.c xf86RamDacCmap.c \
-                      xf86Cursor.c xf86HWCurs.c IBM.c BT.c TI.c \
-		      xf86BitOrder.c
+                      xf86Cursor.c xf86HWCurs.c IBM.c BT.c TI.c
 
 sdk_HEADERS = BT.h IBM.h TI.h xf86Cursor.h xf86RamDac.h
 
-DISTCLEANFILES = xf86BitOrder.c
 EXTRA_DIST = BTPriv.h IBMPriv.h TIPriv.h xf86CursorPriv.h xf86RamDacPriv.h \
 	CURSOR.NOTES
 
-AM_CFLAGS = -DXAAReverseBitOrder=xf86ReverseBitOrder -DRAMDAC_MODULE \
-            $(DIX_CFLAGS) $(XORG_CFLAGS)
+AM_CFLAGS = $(DIX_CFLAGS) $(XORG_CFLAGS)
 INCLUDES = $(XORG_INCS)
-
-xf86BitOrder.c:
-	$(AM_V_GEN)echo "#define XAAReverseBitOrder xf86ReverseBitOrder" > $@
-	$(AM_V_GEN)echo "#include \"$(srcdir)/../xaa/xaaBitOrder.c\"" >> $@
diff --git a/hw/xfree86/ramdac/xf86CursorPriv.h b/hw/xfree86/ramdac/xf86CursorPriv.h
index d04f932..04be141 100644
--- a/hw/xfree86/ramdac/xf86CursorPriv.h
+++ b/hw/xfree86/ramdac/xf86CursorPriv.h
@@ -43,8 +43,6 @@ void xf86MoveCursor(ScreenPtr pScreen, int x, int y);
 void xf86RecolorCursor(ScreenPtr pScreen, CursorPtr pCurs, Bool displayed);
 Bool xf86InitHardwareCursor(ScreenPtr pScreen, xf86CursorInfoPtr infoPtr);
 
-CARD32 xf86ReverseBitOrder(CARD32 data);
-
 extern _X_EXPORT DevPrivateKeyRec xf86CursorScreenKeyRec;
 
 #define xf86CursorScreenKey (&xf86CursorScreenKeyRec)
diff --git a/hw/xfree86/ramdac/xf86HWCurs.c b/hw/xfree86/ramdac/xf86HWCurs.c
index cb62d9b..197abff 100644
--- a/hw/xfree86/ramdac/xf86HWCurs.c
+++ b/hw/xfree86/ramdac/xf86HWCurs.c
@@ -21,6 +21,15 @@
 
 #include "servermd.h"
 
+static CARD32
+xf86ReverseBitOrder(CARD32 v)
+{
+    return (((0x01010101 & v) << 7) | ((0x02020202 & v) << 5) |
+            ((0x04040404 & v) << 3) | ((0x08080808 & v) << 1) |
+            ((0x10101010 & v) >> 1) | ((0x20202020 & v) >> 3) |
+            ((0x40404040 & v) >> 5) | ((0x80808080 & v) >> 7));
+}
+
 #if BITMAP_SCANLINE_PAD == 64
 
 #if 1
diff --git a/hw/xfree86/sdksyms.sh b/hw/xfree86/sdksyms.sh
index 420640f..c0398da 100755
--- a/hw/xfree86/sdksyms.sh
+++ b/hw/xfree86/sdksyms.sh
@@ -174,14 +174,6 @@ cat > sdksyms.c << EOF
 #endif
 
 
-/* hw/xfree86/xaa/Makefile.am -- module */
-/*
-#include "xaa.h"
-#include "xaalocal.h"
-#include "xaarop.h"
- */
-
-
 /* hw/xfree86/dixmods/extmod/Makefile.am -- module */
 #ifdef XFreeXDGA
 #include "dgaproc.h"
diff --git a/hw/xfree86/xaa/.gitignore b/hw/xfree86/xaa/.gitignore
deleted file mode 100644
index 1211d01..0000000
--- a/hw/xfree86/xaa/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-#		Add & Override for this directory and it's subdirectories
-[lms]-xaa*.c
-[lm]f3-xaa*.c
-[lm][f3]-xaa*.c
diff --git a/hw/xfree86/xaa/Makefile.am b/hw/xfree86/xaa/Makefile.am
deleted file mode 100644
index 5614d72..0000000
--- a/hw/xfree86/xaa/Makefile.am
+++ /dev/null
@@ -1,79 +0,0 @@
-LSB_FIRST = l-xaaBitmap.c l-xaaStipple.c l-xaaTEGlyph.c
-LSB_3_FIRST = l3-xaaBitmap.c l3-xaaStipple.c
-MSB_FIRST = m-xaaBitmap.c m-xaaStipple.c m-xaaTEGlyph.c
-MSB_3_FIRST = m3-xaaBitmap.c m3-xaaStipple.c
-LSB_FIXED = lf-xaaBitmap.c lf-xaaStipple.c lf-xaaTEGlyph.c
-LSB_3_FIXED = lf3-xaaBitmap.c lf3-xaaStipple.c
-MSB_FIXED = mf-xaaBitmap.c mf-xaaStipple.c mf-xaaTEGlyph.c
-MSB_3_FIXED = mf3-xaaBitmap.c mf3-xaaStipple.c
-POLYSEG = s-xaaLine.c s-xaaDashLine.c
-
-if XAA
-
-libxaa_la_LDFLAGS = -module -avoid-version $(LD_NO_UNDEFINED_FLAG)
-libxaa_la_LIBADD = $(PIXMAN_LIBS)
-if COMPOSITE
-libxaa_la_LIBADD += $(top_builddir)/miext/cw/libcw.la
-endif
-
-module_LTLIBRARIES = libxaa.la
-libxaa_la_SOURCES = xaaInit.c xaaGC.c xaaInitAccel.c xaaFallback.c \
-                   xaaBitBlt.c xaaCpyArea.c xaaGCmisc.c xaaCpyWin.c \
-                   xaaCpyPlane.c xaaFillRect.c xaaTEText.c xaaNonTEText.c \
-                   xaaPCache.c xaaSpans.c xaaROP.c xaaImage.c \
-                   xaaRect.c xaaLineMisc.c xaaBitOrder.c \
-                   xaaFillPoly.c xaaWideLine.c xaaTables.c xaaFillArc.c \
-                   xaaLine.c xaaDashLine.c xaaOverlay.c xaaOffscreen.c \
-                   xaaOverlayDF.c xaaStateChange.c xaaPict.c $(POLYSEG) \
-                   $(LSB_FIRST) $(MSB_FIRST) $(LSB_FIXED) $(MSB_FIXED) \
-                   $(LSB_3_FIRST) $(MSB_3_FIRST) $(LSB_3_FIXED) $(MSB_3_FIXED)
-${POLYSEG}:
-	$(AM_V_GEN)echo "#define POLYSEGMENT" > $@
-	$(AM_V_GEN)echo '#include "$(srcdir)/${@:s-%=%}"' >> $@
-${LSB_FIRST}:
-	$(AM_V_GEN)echo "#define LSBFIRST" > $@
-	$(AM_V_GEN)echo '#include "$(srcdir)/${@:l-%=%}"' >> $@
-${LSB_3_FIRST}:
-	$(AM_V_GEN)echo "#define LSBFIRST" > $@
-	$(AM_V_GEN)echo "#define TRIPLE_BITS" >> $@
-	$(AM_V_GEN)echo '#include "$(srcdir)/${@:l3-%=%}"' >> $@
-${LSB_FIXED}:
-	$(AM_V_GEN)echo "#define LSBFIRST" > $@
-	$(AM_V_GEN)echo "#define FIXEDBASE" >> $@
-	$(AM_V_GEN)echo '#include "$(srcdir)/${@:lf-%=%}"' >> $@
-${LSB_3_FIXED}:
-	$(AM_V_GEN)echo "#define LSBFIRST" > $@
-	$(AM_V_GEN)echo "#define TRIPLE_BITS" >> $@
-	$(AM_V_GEN)echo "#define FIXEDBASE" >> $@
-	$(AM_V_GEN)echo '#include "$(srcdir)/${@:lf3-%=%}"' >> $@
-${MSB_FIRST}:
-	$(AM_V_GEN)echo "#define MSBFIRST" > $@
-	$(AM_V_GEN)echo '#include "$(srcdir)/${@:m-%=%}"' >> $@
-${MSB_3_FIRST}:
-	$(AM_V_GEN)echo "#define MSBFIRST" > $@
-	$(AM_V_GEN)echo "#define TRIPLE_BITS" >> $@
-	$(AM_V_GEN)echo '#include "$(srcdir)/${@:m3-%=%}"' >> $@
-${MSB_FIXED}:
-	$(AM_V_GEN)echo "#define MSBFIRST" > $@
-	$(AM_V_GEN)echo "#define FIXEDBASE" >> $@
-	$(AM_V_GEN)echo '#include "$(srcdir)/${@:mf-%=%}"' >> $@
-${MSB_3_FIXED}:
-	$(AM_V_GEN)echo "#define MSBFIRST" > $@
-	$(AM_V_GEN)echo "#define TRIPLE_BITS" >> $@
-	$(AM_V_GEN)echo "#define FIXEDBASE" >> $@
-	$(AM_V_GEN)echo '#include "$(srcdir)/${@:mf3-%=%}"' >> $@
-
-endif # XAA
-
-DISTCLEANFILES = $(POLYSEG) \
-	$(LSB_FIRST) $(LSB_FIXED) $(MSB_FIRST) $(MSB_FIXED) \
-	$(LSB_3_FIRST) $(LSB_3_FIXED) $(MSB_3_FIRST) $(MSB_3_FIXED)
-
-sdk_HEADERS = xaa.h xaalocal.h xaarop.h
-EXTRA_DIST = xaacexp.h xaawrap.h xaaLine.c xaaDashLine.c \
-             xaaStipple.c xaaTEGlyph.c xaaNonTEGlyph.c xaaBitmap.c \
-             XAA.HOWTO
-
-INCLUDES = $(XORG_INCS) -I$(srcdir)/../../../miext/cw
-
-AM_CFLAGS = $(DIX_CFLAGS) $(XORG_CFLAGS)
diff --git a/hw/xfree86/xaa/XAA.HOWTO b/hw/xfree86/xaa/XAA.HOWTO
deleted file mode 100644
index cbd71c1..0000000
--- a/hw/xfree86/xaa/XAA.HOWTO
+++ /dev/null
@@ -1,1427 +0,0 @@
-
-
-                          XAA.HOWTO
-
-  This file describes how to add basic XAA support to a chipset driver.
-
-0)  What is XAA
-1)  XAA Initialization and Shutdown
-2)  The Primitives
-  2.0  Generic Flags
-  2.1  Screen to Screen Copies
-  2.2  Solid Fills
-  2.3  Solid Lines
-  2.4  Dashed Lines
-  2.5  Color Expand Fills
-    2.5.1 Screen to Screen Color Expansion
-    2.5.2 CPU to Screen Color Expansion
-      2.5.2.1 The Direct Method
-      2.5.2.2 The Indirect Method
-  2.6  8x8 Mono Pattern Fills
-  2.7  8x8 Color Pattern Fills
-  2.8  Image Writes
-    2.8.1 The Direct Method
-    2.8.2 The Indirect Method
-  2.9 Clipping
-3)  The Pixmap Cache
-4)  Offscreen Pixmaps
-
-/********************************************************************/
-
-0) WHAT IS XAA
-	
-   XAA (the XFree86 Acceleration Architecture) is a device dependent
-layer that encapsulates the unaccelerated framebuffer rendering layer,
-intercepting rendering commands sent to it from higher levels of the
-server.  For rendering tasks where hardware acceleration is not 
-possible, XAA allows the requests to proceed to the software rendering
-code.  Otherwise, XAA breaks the sometimes complicated X primitives
-into simpler primitives more suitable for hardware acceleration and
-will use accelerated functions exported by the chipset driver to 
-render these.
-
-   XAA provides a simple, easy to use driver interface that allows
-the driver to communicate its acceleration capabilities and restrictions
-back to XAA.  XAA will use the information provided by the driver
-to determine whether or not acceleration will be possible for a
-particular X primitive.
-
-
-
-1) XAA INITIALIZATION AND SHUTDOWN
-
-   All relevant prototypes and defines are in xaa.h.
-
-   To Initialize the XAA layer, the driver should allocate an XAAInfoRec
-via XAACreateInfoRec(), fill it out as described in this document
-and pass it to XAAInit().  XAAInit() must be called _after_ the 
-framebuffer initialization (usually cfb?ScreenInit or similar) since 
-it is "wrapping" that layer.  XAAInit() should be called _before_ the 
-cursor initialization (usually miDCInitialize) since the cursor
-layer needs to "wrap" all the rendering code including XAA.
-
-   When shutting down, the driver should free the XAAInfoRec
-structure in its CloseScreen function via XAADestroyInfoRec().
-The prototypes for the functions mentioned above are as follows:
-
-   XAAInfoRecPtr XAACreateInfoRec(void);
-   Bool XAAInit(ScreenPtr, XAAInfoRecPtr);
-   void XAADestroyInfoRec(XAAInfoRec);
-
-   The driver informs XAA of it's acceleration capablities by
-filling out an XAAInfoRec structure and passing it to XAAInit().
-The XAAInfoRec structure contains many fields, most of which are
-function pointers and flags.  Each primitive will typically have
-two functions and a set of flags associated with it, but it may
-have more.  These two functions are the "SetupFor" and "Subsequent" 
-functions.  The "SetupFor" function tells the driver that the 
-hardware should be initialized for a particular type of graphics 
-operation.  After the "SetupFor" function, one or more calls to the 
-"Subsequent" function will be made to indicate that an instance
-of the particular primitive should be rendered by the hardware.
-The details of each instance (width, height, etc...) are given
-with each "Subsequent" function.   The set of flags associated
-with each primitive lets the driver tell XAA what its hardware
-limitations are (eg. It doesn't support a planemask, it can only
-do one of the raster-ops, etc...).
-
-  Of the XAAInfoRec fields, one is required.  This is the
-Sync function.  XAA initialization will fail if this function
-is not provided.
-
-void Sync(ScrnInfoPtr pScrn)			/* Required */
-
-   Sync will be called when XAA needs to be certain that all
-   graphics coprocessor operations are finished, such as when
-   the framebuffer must be written to or read from directly
-   and it must be certain that the accelerator will not be
-   overwriting the area of interest.
-
-   One needs to make certain that the Sync function not only
-   waits for the accelerator fifo to empty, but that it waits for
-   the rendering of that last operation to complete.
-
-   It is guaranteed that no direct framebuffer access will
-   occur after a "SetupFor" or "Subsequent" function without
-   the Sync function being called first.
-
-
-
-2)  THE PRIMITIVES
-
-2.0  Generic Flags
-
-  Each primitive type has a set of flags associated with it which
-allow the driver to tell XAA what the hardware limitations are.
-The common ones are as follows:
-
-/* Foreground, Background, rop and planemask restrictions */
-
-   GXCOPY_ONLY
-
-     This indicates that the accelerator only supports GXcopy
-     for the particular primitive.
-
-   ROP_NEEDS_SOURCE
-
-     This indicates that the accelerator doesn't supports a
-     particular primitive with rops that don't involve the source.
-     These rops are GXclear, GXnoop, GXinvert and GXset. If neither
-     this flag nor GXCOPY_ONLY is defined, it is assumed that the
-     accelerator supports all 16 raster operations (rops) for that
-     primitive.
-
-   NO_PLANEMASK
-
-     This indicates that the accelerator does not support a hardware
-     write planemask for the particular primitive.
-
-   RGB_EQUAL
-
-     This indicates that the particular primitive requires the red, 
-     green and blue bytes of the foreground color (and background color,
-     if applicable) to be equal. This is useful for 24bpp when a graphics
-     coprocessor is used in 8bpp mode, which is not uncommon in older
-     hardware since some have no support for or only limited support for 
-     acceleration at 24bpp. This way, many operations will be accelerated 
-     for the common case of "grayscale" colors.  This flag should only
-     be used in 24bpp.
-
-  In addition to the common ones listed above which are possible for
-nearly all primitives, each primitive may have its own flags specific
-to that primitive.  If such flags exist they are documented in the
-descriptions of those primitives below.
- 
-
-
-
-2.1  Screen to Screen Copies
-
-   The SetupFor and Subsequent ScreenToScreenCopy functions provide
-   an interface for copying rectangular areas from video memory to
-   video memory.  To accelerate this primitive the driver should
-   provide both the SetupFor and Subsequent functions and indicate
-   the hardware restrictions via the ScreenToScreenCopyFlags.  The
-   NO_PLANEMASK, GXCOPY_ONLY and ROP_NEEDS_SOURCE flags as described
-   in Section 2.0 are valid as well as the following:
-
-    NO_TRANSPARENCY
-     
-      This indicates that the accelerator does not support skipping
-      of color keyed pixels when copying from the source to the destination.
-
-    TRANSPARENCY_GXCOPY_ONLY
-
-      This indicates that the accelerator supports skipping of color keyed
-      pixels only when the rop is GXcopy.
-
-    ONLY_LEFT_TO_RIGHT_BITBLT
-
-      This indicates that the hardware only accepts blitting when the
-      x direction is positive.
-
-    ONLY_TWO_BITBLT_DIRECTIONS
-
-      This indicates that the hardware can only cope with blitting when
-      the direction of x is the same as the direction in y.
-
-
-void SetupForScreenToScreenCopy( ScrnInfoPtr pScrn,
-			int xdir, int ydir,
-			int rop,
-			unsigned int planemask,
-			int trans_color )
-
-    When this is called, SubsequentScreenToScreenCopy will be called
-    one or more times directly after.  If ydir is 1, then the accelerator
-    should copy starting from the top (minimum y) of the source and
-    proceed downward.  If ydir is -1, then the accelerator should copy
-    starting from the bottom of the source (maximum y) and proceed
-    upward.  If xdir is 1, then the accelerator should copy each
-    y scanline starting from the leftmost pixel of the source.  If
-    xdir is -1, it should start from the rightmost pixel.  
-       If trans_color is not -1 then trans_color indicates that the
-    accelerator should not copy pixels with the color trans_color
-    from the source to the destination, but should skip them. 
-    Trans_color is always -1 if the NO_TRANSPARENCY flag is set.
- 
-
-void SubsequentScreenToScreenCopy(ScrnInfoPtr pScrn,
-			int x1, int y1,
-			int x2, int y2,
-			int width, int height)
-
-    Copy a rectangle "width" x "height" from the source (x1,y1) to the 
-    destination (x2,y2) using the parameters passed by the last
-    SetupForScreenToScreenCopy call. (x1,y1) and (x2,y2) always denote 
-    the upper left hand corners of the source and destination regardless 
-    of which xdir and ydir values are given by SetupForScreenToScreenCopy.  
-
-
-
-2.2 Solid Fills
-
-   The SetupFor and Subsequent SolidFill(Rect/Trap) functions provide
-   an interface for filling rectangular areas of the screen with a
-   foreground color.  To accelerate this primitive the driver should
-   provide both the SetupForSolidFill and SubsequentSolidFillRect 
-   functions and indicate the hardware restrictions via the SolidFillFlags.
-   The driver may optionally provide a SubsequentSolidFillTrap if
-   it is capable of rendering the primitive correctly.  
-   The GXCOPY_ONLY, ROP_NEEDS_SOURCE, NO_PLANEMASK and RGB_EQUAL flags
-   as described in Section 2.0 are valid.
-
-  
-void SetupForSolidFill(ScrnInfoPtr pScrn, 
-                       int color, int rop, unsigned int planemask)
-
-    SetupForSolidFill indicates that any combination of the following 
-    may follow it.
-
-	SubsequentSolidFillRect
-	SubsequentSolidFillTrap
-
-
- 
-void SubsequentSolidFillRect(ScrnInfoPtr pScrn, int x, int y, int w, int h)
-
-     Fill a rectangle of dimensions "w" by "h" with origin at (x,y) 
-     using the color, rop and planemask given by the last 
-     SetupForSolidFill call.
-
-void SubsequentSolidFillTrap(ScrnInfoPtr pScrn, int y, int h, 
-	int left, int dxL, int dyL, int eL,
-	int right, int dxR, int dyR, int eR)
-
-     These parameters describe a trapezoid via a version of
-     Bresenham's parameters. "y" is the top line. "h" is the
-     number of spans to be filled in the positive Y direction.
-     "left" and "right" indicate the starting X values of the
-     left and right edges.  dy/dx describes the edge slope.
-     These are not the deltas between the beginning and ending
-     points on an edge.  They merely describe the slope. "e" is
-     the initial error term.  It's the relationships between dx,
-     dy and e that define the edge.
-	If your engine does not do bresenham trapezoids or does
-     not allow the programmer to specify the error term then
-     you are not expected to be able to accelerate them.
-
-
-2.3  Solid Lines
-
-    XAA provides an interface for drawing thin lines.  In order to
-    draw X lines correctly a high degree of accuracy is required.
-    This usually limits line acceleration to hardware which has a
-    Bresenham line engine, though depending on the algorithm used,
-    other line engines may come close if they accept 16 bit line 
-    deltas.  XAA has both a Bresenham line interface and a two-point
-    line interface for drawing lines of arbitrary orientation.  
-    Additionally there is a SubsequentSolidHorVertLine which will
-    be used for all horizontal and vertical lines.  Horizontal and
-    vertical lines are handled separately since hardware that doesn't
-    have a line engine (or has one that is unusable due to precision
-    problems) can usually draw these lines by some other method such
-    as drawing them as thin rectangles.  Even for hardware that can
-    draw arbitrary lines via the Bresenham or two-point interfaces,
-    the SubsequentSolidHorVertLine is used for horizontal and vertical
-    lines since most hardware is able to render the horizontal lines
-    and sometimes the vertical lines faster by other methods (Hint:
-    try rendering horizontal lines as flattened rectangles).  If you have 
-    not provided a SubsequentSolidHorVertLine but you have provided 
-    Bresenham or two-point lines, a SubsequentSolidHorVertLine function 
-    will be supplied for you.
-
-    The flags field associated with Solid Lines is SolidLineFlags and 
-    the GXCOPY_ONLY, ROP_NEEDS_SOURCE, NO_PLANEMASK and RGB_EQUAL flags as
-    described in Section 2.0 are valid restrictions.  
-
-    Some line engines have line biases hardcoded to comply with
-    Microsoft line biasing rules.  A tell-tale sign of this is the
-    hardware lines not matching the software lines in the zeroth and
-    fourth octants.  The driver can set the flag:
-	
-	MICROSOFT_ZERO_LINE_BIAS
-
-    in the AccelInfoRec.Flags field to adjust the software lines to
-    match the hardware lines.   This is in the generic flags field
-    rather than the SolidLineFlags since this flag applies to all
-    software zero-width lines on the screen and not just the solid ones.
-
-
-void SetupForSolidLine(ScrnInfoPtr pScrn, 
-                       int color, int rop, unsigned int planemask)
-
-    SetupForSolidLine indicates that any combination of the following 
-    may follow it.
-
-	SubsequentSolidBresenhamLine
-	SubsequentSolidTwoPointLine
-        SubsequentSolidHorVertLine 	
-
-
-void SubsequentSolidHorVertLine( ScrnInfoPtr pScrn,
-        			int x, int y, int len, int dir )
-
-    All vertical and horizontal solid thin lines are rendered with
-    this function.  The line starts at coordinate (x,y) and extends
-    "len" pixels inclusive.  In the direction indicated by "dir."
-    The direction is either DEGREES_O or DEGREES_270.  That is, it
-    always extends to the right or down.
-
-
-
-void SubsequentSolidTwoPointLine(ScrnInfoPtr pScrn,
-        	int x1, int y1, int x2, int y2, int flags)
-
-    Draw a line from (x1,y1) to (x2,y2).  If the flags field contains
-    the flag OMIT_LAST, the last pixel should not be drawn.  Otherwise,
-    the pixel at (x2,y2) should be drawn.
-
-    If you use the TwoPoint line interface there is a good possibility
-    that your line engine has hard-coded line biases that do not match
-    the default X zero-width lines.  If so, you may need to set the
-    MICROSOFT_ZERO_LINE_BIAS flag described above.  Note that since
-    any vertex in the 16-bit signed coordinate system is valid, your
-    line engine is expected to handle 16-bit values if you have hardware
-    line clipping enabled.  If your engine cannot handle 16-bit values,
-    you should not use hardware line clipping.
-
-
-void SubsequentSolidBresenhamLine(ScrnInfoPtr pScrn,
-        int x, int y, int major, int minor, int err, int len, int octant)
-
-    "X" and "y" are the starting point of the line.  "Major" and "minor" 
-    are the major and minor step constants.  "Err" is the initial error
-    term.  "Len" is the number of pixels to be drawn (inclusive). "Octant"
-    can be any combination of the following flags OR'd together:
-
-      Y_MAJOR		Y is the major axis (X otherwise)
-      X_DECREASING	The line is drawn from right to left
-      Y_DECREASING	The line is drawn from bottom to top
-	  
-    The major, minor and err terms are the "raw" Bresenham parameters
-    consistent with a line engine that does:
-
-	e = err;
-	while(len--) {
-	   DRAW_POINT(x,y);
-	   e += minor;
-	   if(e >= 0) {
-		e -= major;
-		TAKE_ONE_STEP_ALONG_MINOR_AXIS;
-	   }
-	   TAKE_ONE_STEP_ALONG_MAJOR_AXIS;
-	}
-
-    IBM 8514 style Bresenham line interfaces require their parameters
-    modified in the following way:
-
-	Axial = minor;
-	Diagonal = minor - major;
-	Error = minor + err;
-
-SolidBresenhamLineErrorTermBits
-
-    This field allows the driver to tell XAA how many bits large its
-    Bresenham parameter registers are.  Many engines have registers that
-    only accept 12 or 13 bit Bresenham parameters, and the parameters
-    for clipped lines may overflow these if they are not scaled down.
-    If this field is not set, XAA will assume the engine can accomodate
-    16 bit parameters, otherwise, it will scale the parameters to the
-    size specified.
-
-
-2.4  Dashed Lines
-
-    The same degree of accuracy required by the solid lines is required
-    for drawing dashed lines as well.  The dash pattern itself is a
-    buffer of binary data where ones are expanded into the foreground
-    color and zeros either correspond to the background color or
-    indicate transparency depending on whether or not DoubleDash or
-    OnOffDashes are being drawn.  
-
-    The flags field associated with dashed Lines is DashedLineFlags and 
-    the GXCOPY_ONLY, ROP_NEEDS_SOURCE, NO_PLANEMASK and RGB_EQUAL flags as
-    described in Section 2.0 are valid restrictions.  Additionally, the
-    following flags are valid:
-
-      NO_TRANSPARENCY
-
-	This indicates that the driver cannot support dashed lines
-	with transparent backgrounds (OnOffDashes).
-
-      TRANSPARENCY_ONLY
-
-	This indicates that the driver cannot support dashes with
-	both a foreground and background color (DoubleDashes).
-
-      LINE_PATTERN_POWER_OF_2_ONLY
-
-	This indicates that only patterns with a power of 2 length
-	can be accelerated.
-
-      LINE_PATTERN_LSBFIRST_MSBJUSTIFIED
-      LINE_PATTERN_LSBFIRST_LSBJUSTIFIED
-      LINE_PATTERN_MSBFIRST_MSBJUSTIFIED
-      LINE_PATTERN_MSBFIRST_LSBJUSTIFIED
-
-	These describe how the line pattern should be packed.
-	The pattern buffer is DWORD padded.  LSBFIRST indicates
-	that the pattern runs from the LSB end to the MSB end.
-	MSBFIRST indicates that the pattern runs from the MSB end
-	to the LSB end.  When the pattern does not completely fill
-	the DWORD padded buffer, the pattern will be justified 
-	towards the MSB or LSB end based on the flags above.
-
-
-    The following field indicates the maximum length dash pattern that
-    should be accelerated.
-
-	int DashPatternMaxLength
-
-
-void SetupForDashedLine(ScrnInfoPtr pScrn,
-		int fg, int bg, int rop, unsigned int planemask,
-        	int length, unsigned char *pattern)
-
-    
-    SetupForDashedLine indicates that any combination of the following 
-    may follow it.
-
-	SubsequentDashedBresenhamLine
-	SubsequentDashedTwoPointLine
-
-    If "bg" is -1, then the background (pixels corresponding to clear
-    bits in the pattern) should remain unmodified. "Bg" indicates the
-    background color otherwise.  "Length" indicates the length of
-    the pattern in bits and "pattern" points to the DWORD padded buffer
-    holding the pattern which has been packed according to the flags
-    set above.  
-
-    
-void SubsequentDashedTwoPointLine( ScrnInfoPtr pScrn,
-        int x1, int y1, int x2, int y2, int flags, int phase)
-
-void SubsequentDashedBresenhamLine(ScrnInfoPtr pScrn,
-        int x1, int y1, int major, int minor, int err, int len, int octant,
-        int phase)
-  
-    These are the same as the SubsequentSolidTwoPointLine and
-    SubsequentBresenhamLine functions except for the addition
-    of the "phase" field which indicates the offset into the dash 
-    pattern that the pixel at (x1,y1) corresponds to.
-
-    As with the SubsequentBresenhamLine, there is an
- 
-	int DashedBresenhamLineErrorTermBits 
-   
-    field which indicates the size of the error term registers
-    used with dashed lines.  This is usually the same value as
-    the field for the solid lines (because it's usually the same
-    register).
-       
-      
-
-2.5   Color Expansion Fills
-
-    When filling a color expansion rectangle, the accelerator
-    paints each pixel depending on whether or not a bit in a
-    corresponding bitmap is set or clear. Opaque expansions are 
-    when a set bit corresponds to the foreground color and a clear 
-    bit corresponds to the background color.  A transparent expansion
-    is when a set bit corresponds to the foreground color and a
-    clear bit indicates that the pixel should remain unmodified.
-   
-    The graphics accelerator usually has access to the source 
-    bitmap in one of two ways: 1) the bitmap data is sent serially
-    to the accelerator by the CPU through some memory mapped aperture
-    or 2) the accelerator reads the source bitmap out of offscreen
-    video memory.  Some types of primitives are better suited towards 
-    one method or the other.  Type 2 is useful for reusable patterns
-    such as stipples which can be cached in offscreen memory.  The
-    aperature method can be used for stippling but the CPU must pass
-    the data across the bus each time a stippled fill is to be performed.  
-    For expanding 1bpp client pixmaps or text strings to the screen,
-    the aperature method is usually superior because the intermediate
-    copy in offscreen memory needed by the second method would only be 
-    used once.  Unfortunately, many accelerators can only do one of these
-    methods and not both.  
-
-    XAA provides both ScreenToScreen and CPUToScreen color expansion 
-    interfaces for doing color expansion fills.  The ScreenToScreen
-    functions can only be used with hardware that supports reading
-    of source bitmaps from offscreen video memory, and these are only
-    used for cacheable patterns such as stipples.  There are two
-    variants of the CPUToScreen routines - a direct method intended
-    for hardware that has a transfer aperature, and an indirect method
-    intended for hardware without transfer aperatures or hardware
-    with unusual transfer requirements.  Hardware that can only expand
-    bitmaps from video memory should supply ScreenToScreen routines
-    but also ScanlineCPUToScreen (indirect) routines to optimize transfers 
-    of non-cacheable data.  Hardware that can only accept source bitmaps
-    through an aperature should supply CPUToScreen (or ScanlineCPUToScreen) 
-    routines. Hardware that can do both should provide both ScreenToScreen 
-    and CPUToScreen routines.
-
-    For both ScreenToScreen and CPUToScreen interfaces, the GXCOPY_ONLY,
-    ROP_NEEDS_SOURCE, NO_PLANEMASK and RGB_EQUAL flags described in
-    Section 2.0 are valid as well as the following:
-
-    /* bit order requirements (one of these must be set) */
-   
-    BIT_ORDER_IN_BYTE_LSBFIRST
-
-      This indicates that least significant bit in each byte of the source
-      data corresponds to the leftmost of that block of 8 pixels.  This
-      is the prefered format.
-
-    BIT_ORDER_IN_BYTE_MSBFIRST    
-
-      This indicates that most significant bit in each byte of the source
-      data corresponds to the leftmost of that block of 8 pixels.
-
-    /* transparency restrictions */
-
-    NO_TRANSPARENCY
-
-      This indicates that the accelerator cannot do a transparent expansion.
-
-    TRANSPARENCY_ONLY
-
-      This indicates that the accelerator cannot do an opaque expansion.
-      In cases where where the background needs to be filled, XAA will
-      render the primitive in two passes when using the CPUToScreen
-      interface, but will not do so with the ScreenToScreen interface 
-      since that would require caching of two patterns.  Some 
-      ScreenToScreen hardware may be able to render two passes at the
-      driver level and remove the TRANSPARENCY_ONLY restriction if
-      it can render pixels corresponding to the zero bits.
-
-
-
-2.5.1  Screen To Screen Color Expansion
-
-    The ScreenToScreenColorExpandFill routines provide an interface
-    for doing expansion blits from source patterns stored in offscreen
-    video memory.
-
-    void SetupForScreenToScreenColorExpandFill (ScrnInfoPtr pScrn,
-        			int fg, int bg, 
-				int rop, unsigned int planemask)
-
-
-    Ones in the source bitmap will correspond to the fg color.
-    Zeros in the source bitmap will correspond to the bg color
-    unless bg = -1.  In that case the pixels corresponding to the
-    zeros in the bitmap shall be left unmodified by the accelerator.
-
-    For hardware that doesn't allow an easy implementation of skipleft, the
-    driver can replace CacheMonoStipple function with one that stores multiple
-    rotated copies of the stipple and select between them. In this case the
-    driver should set CacheColorExpandDensity to tell XAA how many copies of
-    the pattern are stored in the width of a cache slot. For instance if the
-    hardware can specify the starting address in bytes, then 8 rotated copies
-    of the stipple are needed and CacheColorExpandDensity should be set to 8.
-
-    void SubsequentScreenToScreenColorExpandFill( ScrnInfoPtr pScrn,
-				int x, int y, int w, int h,
-				int srcx, int srcy, int offset )
-
-   
-    Fill a rectangle "w" x "h" at location (x,y).  The source pitch
-    between scanlines is the framebuffer pitch (pScrn->displayWidth
-    pixels) and srcx and srcy indicate the start of the source pattern 
-    in units of framebuffer pixels. "Offset" indicates the bit offset
-    into the pattern that corresponds to the pixel being painted at
-    "x" on the screen.  Some hardware accepts source coordinates in
-    units of bits which makes implementation of the offset trivial.
-    In that case, the bit address of the source bit corresponding to
-    the pixel painted at (x,y) would be:
-	
-     (srcy * pScrn->displayWidth + srcx) * pScrn->bitsPerPixel + offset
-
-    It should be noted that the offset assumes LSBFIRST hardware.  
-    For MSBFIRST hardware, the driver may need to implement the 
-    offset by bliting only from byte boundaries and hardware clipping.
-
-
-
-2.5.2  CPU To Screen Color Expansion
-
-
-    The CPUToScreenColorExpandFill routines provide an interface for 
-    doing expansion blits from source patterns stored in system memory.
-    There are two varieties of this primitive, a CPUToScreenColorExpandFill
-    and a ScanlineCPUToScreenColorExpandFill.  With the 
-    CPUToScreenColorExpandFill method, the source data is sent serially
-    through a memory mapped aperature.  With the Scanline version, the
-    data is rendered scanline at a time into intermediate buffers with
-    a call to SubsequentColorExpandScanline following each scanline.
-
-    These two methods have separate flags fields, the
-    CPUToScreenColorExpandFillFlags and ScanlineCPUToScreenColorExpandFillFlags
-    respectively.  Flags specific to one method or the other are described 
-    in sections 2.5.2.1 and 2.5.2.2 but for both cases the bit order and
-    transparency restrictions listed at the beginning of section 2.5 are 
-    valid as well as the following:
-    
-    /* clipping  (optional) */
-    
-    LEFT_EDGE_CLIPPING
- 
-      This indicates that the accelerator supports omission of up to
-      31 pixels on the left edge of the rectangle to be filled.  This
-      is beneficial since it allows transfer of the source bitmap to
-      always occur from DWORD boundaries. 
-
-    LEFT_EDGE_CLIPPING_NEGATIVE_X
-
-      This flag indicates that the accelerator can render color expansion
-      rectangles even if the value of x origin is negative (off of
-      the screen on the left edge).
-
-    /* misc */
-
-    TRIPLE_BITS_24BPP
-
-      When enabled (must be in 24bpp mode), color expansion functions
-      are expected to require three times the amount of bits to be
-      transferred so that 24bpp grayscale colors can be used with color
-      expansion in 8bpp coprocessor mode. Each bit is expanded to 3
-      bits when writing the monochrome data.
-
-
- 2.5.1 The Direct Method 
-
-
-    Using the direct method of color expansion XAA will send all
-    bitmap data to the accelerator serially through an memory mapped
-    transfer window defined by the following two fields:
-
-      unsigned char *ColorExpandBase
-
-        This indicates the memory address of the beginning of the aperture.
-
-      int ColorExpandRange
-
-        This indicates the size in bytes of the aperture.
-
-    The driver should specify how the transfered data should be padded.
-    There are options for both the padding of each Y scanline and for the
-    total transfer to the aperature.
-    One of the following two flags must be set:
-
-      CPU_TRANSFER_PAD_DWORD
-
-        This indicates that the total transfer (sum of all scanlines) sent
-        to the aperature must be DWORD padded.  This is the default behavior.
-
-      CPU_TRANSFER_PAD_QWORD 
-
-	This indicates that the total transfer (sum of all scanlines) sent
-	to the aperature must be QWORD padded.  With this set, XAA will send
-        an extra DWORD to the aperature when needed to ensure that only
-        an even number of DWORDs are sent.
-
-    And then there are the flags for padding of each scanline:
-
-      SCANLINE_PAD_DWORD
-
-	This indicates that each Y scanline should be DWORD padded.
-        This is the only option available and is the default.
-
-    Finally, there is the CPU_TRANSFER_BASE_FIXED flag which indicates
-    that the aperture is a single register rather than a range of
-    registers, and XAA should write all of the data to the first DWORD.
-    If the ColorExpandRange is not large enough to accomodate scanlines
-    the width of the screen, this option will be forced. That is, the
-    ColorExpandRange must be:
-
-        ((virtualX + 31)/32) * 4   bytes or more.
-
-        ((virtualX + 62)/32 * 4) if LEFT_EDGE_CLIPPING_NEGATIVE_X is set.
-  
-    If the TRIPLE_BITS_24BPP flag is set, the required area should be 
-    multiplied by three.
-     
-    
-void SetupForCPUToScreenColorExpandFill(ScrnInfoPtr pScrn,
-        		int fg, int bg,
-			int rop,
-			unsigned int planemask)
-
-  
- 
-     Ones in the source bitmap will correspond to the fg color.
-     Zeros in the source bitmap will correspond to the bg color
-     unless bg = -1.  In that case the pixels corresponding to the
-     zeros in the bitmap shall be left unmodified by the accelerator.
-
-
-void SubsequentCPUToScreenColorExpandFill(ScrnInfoPtr pScrn,
-			int x, int y, int w, int h,
-			int skipleft )
-
-     When this function is called, the accelerator should be setup
-     to fill a rectangle of dimension "w" by "h" with origin at (x,y)
-     in the fill style prescribed by the last call to 
-     SetupForCPUToScreenColorExpandFill.  XAA will pass the data to 
-     the aperture immediately after this function is called.  If the 
-     skipleft is non-zero (and LEFT_EDGE_CLIPPING has been enabled), then 
-     the accelerator _should_not_ render skipleft pixels on the leftmost
-     edge of the rectangle.  Some engines have an alignment feature
-     like this built in, some others can do this using a clipping
-     window.
-
-     It can be arranged for XAA to call Sync() after it is through 
-     calling the Subsequent function by setting SYNC_AFTER_COLOR_EXPAND 
-     in the  CPUToScreenColorExpandFillFlags.  This can provide the driver 
-     with an oportunity to reset a clipping window if needed.
-
-    
-2.5.2  The Indirect Method 
-
-     Using the indirect method, XAA will render the bitmap data scanline
-     at a time to one or more buffers.  These buffers may be memory
-     mapped apertures or just intermediate storage.
-
-     int NumScanlineColorExpandBuffers
-
-       This indicates the number of buffers available.
-
-     unsigned char **ScanlineColorExpandBuffers
-
-       This is an array of pointers to the memory locations of each buffer.
-       Each buffer is expected to be large enough to accommodate scanlines
-       the width of the screen.  That is:
-
-        ((virtualX + 31)/32) * 4   bytes or more.
-
-        ((virtualX + 62)/32 * 4) if LEFT_EDGE_CLIPPING_NEGATIVE_X is set.
-  
-     Scanlines are always DWORD padded.
-     If the TRIPLE_BITS_24BPP flag is set, the required area should be 
-     multiplied by three.
-
-
-void SetupForScanlineCPUToScreenColorExpandFill(ScrnInfoPtr pScrn,
-        		int fg, int bg,
-			int rop,
-			unsigned int planemask)
- 
-     Ones in the source bitmap will correspond to the fg color.
-     Zeros in the source bitmap will correspond to the bg color
-     unless bg = -1.  In that case the pixels corresponding to the
-     zeros in the bitmap shall be left unmodified by the accelerator.
-
-     
-void SubsequentScanlineCPUToScreenColorExpandFill(ScrnInfoPtr pScrn,
-			int x, int y, int w, int h,
-			int skipleft )
-
-void SubsequentColorExpandScanline(ScrnInfoPtr pScrn, int bufno)
-
-
-    When SubsequentScanlineCPUToScreenColorExpandFill is called, XAA 
-    will begin transfering the source data scanline at a time, calling  
-    SubsequentColorExpandScanline after each scanline.  If more than
-    one buffer is available, XAA will cycle through the buffers.
-    Subsequent scanlines will use the next buffer and go back to the
-    buffer 0 again when the last buffer is reached.  The index into
-    the ScanlineColorExpandBuffers array is presented as "bufno"
-    with each SubsequentColorExpandScanline call.
-
-    The skipleft field is the same as for the direct method.
-
-    The indirect method can be use to send the source data directly 
-    to a memory mapped aperture represented by a single color expand
-    buffer, scanline at a time, but more commonly it is used to place 
-    the data into offscreen video memory so that the accelerator can 
-    blit it to the visible screen from there.  In the case where the
-    accelerator permits rendering into offscreen video memory while
-    the accelerator is active, several buffers can be used so that
-    XAA can be placing source data into the next buffer while the
-    accelerator is blitting the current buffer.  For cases where
-    the accelerator requires some special manipulation of the source
-    data first, the buffers can be in system memory.  The CPU can
-    manipulate these buffers and then send the data to the accelerator.
-
-
-
-2.6   8x8 Mono Pattern Fills
-
-    XAA provides support for two types of 8x8 hardware patterns -
-    "Mono" patterns and "Color" patterns.  Mono pattern data is
-    64 bits of color expansion data with ones indicating the
-    foreground color and zeros indicating the background color.
-    The source bitmaps for the 8x8 mono patterns can be presented
-    to the graphics accelerator in one of two ways.  They can be
-    passed as two DWORDS to the 8x8 mono pattern functions or
-    they can be cached in offscreen memory and their locations
-    passed to the 8x8 mono pattern functions.  In addition to the
-    GXCOPY_ONLY, ROP_NEEDS_SOURCE, NO_PLANEMASK and RGB_EQUAL flags
-    defined in Section 2.0, the following are defined for the
-    Mono8x8PatternFillFlags:
-
-    HARDWARE_PATTERN_PROGRAMMED_BITS
-
-      This indicates that the 8x8 patterns should be packed into two
-      DWORDS and passed to the 8x8 mono pattern functions.  The default
-      behavior is to cache the patterns in offscreen video memory and
-      pass the locations of these patterns to the functions instead.
-      The pixmap cache must be enabled for the default behavior (8x8 
-      pattern caching) to work.  See Section 3 for how to enable the
-      pixmap cache. The pixmap cache is not necessary for 
-      HARDWARE_PATTERN_PROGRAMMED_BITS.
-
-    HARDWARE_PATTERN_PROGRAMMED_ORIGIN
-
-      If the hardware supports programmable pattern offsets then
-      this option should be set. See the table below for further
-      infomation.
-
-    HARDWARE_PATTERN_SCREEN_ORIGIN
-
-      Some hardware wants the pattern offset specified with respect to the
-      upper left-hand corner of the primitive being drawn.  Other hardware 
-      needs the option HARDWARE_PATTERN_SCREEN_ORIGIN set to indicate that 
-      all pattern offsets should be referenced to the upper left-hand 
-      corner of the screen.  HARDWARE_PATTERN_SCREEN_ORIGIN is preferable 
-      since this is more natural for the X-Window system and offsets will 
-      have to be recalculated for each Subsequent function otherwise.
-
-    BIT_ORDER_IN_BYTE_MSBFIRST
-    BIT_ORDER_IN_BYTE_LSBFIRST
-
-      As with other color expansion routines this indicates whether the
-      most or the least significant bit in each byte from the pattern is 
-      the leftmost on the screen.
-
-    TRANSPARENCY_ONLY
-    NO_TRANSPARENCY
-
-      This means the same thing as for the color expansion rect routines
-      except that for TRANSPARENCY_ONLY XAA will not render the primitive
-      in two passes since this is more easily handled by the driver.
-      It is recommended that TRANSPARENCY_ONLY hardware handle rendering
-      of opaque patterns in two passes (the background can be filled as
-      a rectangle in GXcopy) in the Subsequent function so that the
-      TRANSPARENCY_ONLY restriction can be removed. 
-
-
-
-    Additional information about cached patterns...
-    For the case where HARDWARE_PATTERN_PROGRAMMED_BITS is not set and 
-    the pattern must be cached in offscreen memory, the first pattern
-    starts at the cache slot boundary which is set by the 
-    CachePixelGranularity field used to configure the pixmap cache.
-    One should ensure that the CachePixelGranularity reflects any 
-    alignment restrictions that the accelerator may put on 8x8 pattern 
-    storage locations.  When HARDWARE_PATTERN_PROGRAMMED_ORIGIN is set 
-    there is only one pattern stored.  When this flag is not set,
-    all 64 pre-rotated copies of the pattern are cached in offscreen memory.
-    The MonoPatternPitch field can be used to specify the X position pixel
-    granularity that each of these patterns must align on.  If the
-    MonoPatternPitch is not supplied, the patterns will be densely packed
-    within the cache slot.  The behavior of the default XAA 8x8 pattern
-    caching mechanism to store all 8x8 patterns linearly in video memory.
-    If the accelerator needs the patterns stored in a more unusual fashion,
-    the driver will need to provide its own 8x8 mono pattern caching 
-    routines for XAA to use. 
-
-    The following table describes the meanings of the "patx" and "paty"
-    fields in both the SetupFor and Subsequent functions.
-
-    With HARDWARE_PATTERN_SCREEN_ORIGIN
-    -----------------------------------
-
-    HARDWARE_PATTERN_PROGRAMMED_BITS and HARDWARE_PATTERN_PROGRAMMED_ORIGIN
-
-	SetupFor: patx and paty are the first and second DWORDS of the
-		  8x8 mono pattern.
-
-	Subsequent: patx and paty are the x,y offset into that pattern.
-		    All Subsequent calls will have the same offset in 
-		    the case of HARDWARE_PATTERN_SCREEN_ORIGIN so only
-		    the offset specified by the first Subsequent call 
-		    after a SetupFor call will need to be observed.
-
-    HARDWARE_PATTERN_PROGRAMMED_BITS only
-
-	SetupFor: patx and paty hold the first and second DWORDS of
-		  the 8x8 mono pattern pre-rotated to match the desired
-		  offset.
-
-	Subsequent: These just hold the same patterns and can be ignored.
-
-    HARDWARE_PATTERN_PROGRAMMED_ORIGIN only
-
-	SetupFor: patx and paty hold the x,y coordinates of the offscreen
-		  memory location where the 8x8 pattern is stored.  The
-		  bits are stored linearly in memory at that location.
-
-	Subsequent: patx and paty hold the offset into the pattern.
-		    All Subsequent calls will have the same offset in 
-		    the case of HARDWARE_PATTERN_SCREEN_ORIGIN so only
-		    the offset specified by the first Subsequent call 
-		    after a SetupFor call will need to be observed.
-
-    Neither programmed bits or origin
-
-	SetupFor: patx and paty hold the x,y coordinates of the offscreen 	
-		  memory location where the pre-rotated 8x8 pattern is
-		  stored.
-
-	Subsequent: patx and paty are the same as in the SetupFor function
-		    and can be ignored.
-		  
-
-    Without HARDWARE_PATTERN_SCREEN_ORIGIN
-    -------------------------------------- 
-
-    HARDWARE_PATTERN_PROGRAMMED_BITS and HARDWARE_PATTERN_PROGRAMMED_ORIGIN
-
-	SetupFor: patx and paty are the first and second DWORDS of the
-		  8x8 mono pattern.
-
-	Subsequent: patx and paty are the x,y offset into that pattern.
-
-    HARDWARE_PATTERN_PROGRAMMED_BITS only
-
-	SetupFor: patx and paty holds the first and second DWORDS of
-		  the unrotated 8x8 mono pattern.  This can be ignored. 
-
-	Subsequent: patx and paty hold the rotated 8x8 pattern to be 
-		    rendered.
-
-    HARDWARE_PATTERN_PROGRAMMED_ORIGIN only
-
-	SetupFor: patx and paty hold the x,y coordinates of the offscreen
-		  memory location where the 8x8 pattern is stored.  The
-		  bits are stored linearly in memory at that location.
-
-	Subsequent: patx and paty hold the offset into the pattern.
-
-    Neither programmed bits or origin
-
-	SetupFor: patx and paty hold the x,y coordinates of the offscreen 	
-		  memory location where the unrotated 8x8 pattern is
-		  stored.  This can be ignored.
-
-	Subsequent: patx and paty hold the x,y coordinates of the
-		    rotated 8x8 pattern to be rendered.
-
-
-
-void SetupForMono8x8PatternFill(ScrnInfoPtr pScrn, int patx, int paty,
-        int fg, int bg, int rop, unsigned int planemask)
-
-    SetupForMono8x8PatternFill indicates that any combination of the 
-    following  may follow it.
-
-	SubsequentMono8x8PatternFillRect
-	SubsequentMono8x8PatternFillTrap
-
-    The fg, bg, rop and planemask fields have the same meaning as the
-    ones used for the other color expansion routines.  Patx's and paty's
-    meaning can be determined from the table above.
-
- 
-void SubsequentMono8x8PatternFillRect( ScrnInfoPtr pScrn,
-        	int patx, int paty, int x, int y, int w, int h)
-
-     Fill a rectangle of dimensions "w" by "h" with origin at (x,y) 
-     using the parameters give by the last SetupForMono8x8PatternFill
-     call.  The meanings of patx and paty can be determined by the
-     table above.
-
-void SubsequentMono8x8PatternFillTrap( ScrnInfoPtr pScrn,
-     			   int patx, int paty, int y, int h, 
-     			   int left, int dxL, int dyL, int eL,
-     			   int right, int dxR, int dyR, int eR )
-
-     The meanings of patx and paty can be determined by the table above.
-     The rest of the fields have the same meanings as those in the 
-     SubsequentSolidFillTrap function. 
-
-
-
-2.7   8x8 Color Pattern Fills
-  
-    8x8 color pattern data is 64 pixels of full color data that
-    is stored linearly in offscreen video memory.  8x8 color patterns 
-    are useful as a substitute for 8x8 mono patterns when tiling,
-    doing opaque stipples, or in the case where transperency is
-    supported, regular stipples.  8x8 color pattern fills also have
-    the additional benefit of being able to tile full color 8x8
-    patterns instead of just 2 color ones like the mono patterns.
-    However, full color 8x8 patterns aren't used very often in the
-    X Window system so you might consider passing this primitive
-    by if you already can do mono patterns, especially if they 
-    require alot of cache area.  Color8x8PatternFillFlags is
-    the flags field for this primitive and the GXCOPY_ONLY,
-    ROP_NEEDS_SOURCE and NO_PLANEMASK flags as described in
-    Section 2.0 are valid as well as the following:
-
-
-    HARDWARE_PATTERN_PROGRAMMED_ORIGIN
-
-      If the hardware supports programmable pattern offsets then
-      this option should be set.  
-
-    HARDWARE_PATTERN_SCREEN_ORIGIN
-
-      Some hardware wants the pattern offset specified with respect to the
-      upper left-hand corner of the primitive being drawn.  Other hardware 
-      needs the option HARDWARE_PATTERN_SCREEN_ORIGIN set to indicate that 
-      all pattern offsets should be referenced to the upper left-hand 
-      corner of the screen.  HARDWARE_PATTERN_SCREEN_ORIGIN is preferable 
-      since this is more natural for the X-Window system and offsets will 
-      have to be recalculated for each Subsequent function otherwise.
-
-    NO_TRANSPARENCY
-    TRANSPARENCY_GXCOPY_ONLY
-
-      These mean the same as for the ScreenToScreenCopy functions.
-
-
-    The following table describes the meanings of patx and paty passed
-    to the SetupFor and Subsequent fields:
-
-    HARDWARE_PATTERN_PROGRAMMED_ORIGIN && HARDWARE_PATTERN_SCREEN_ORIGIN
-	
-	SetupFor: patx and paty hold the x,y location of the unrotated 
-		  pattern.
-
-	Subsequent: patx and paty hold the pattern offset.  For the case
-		    of HARDWARE_PATTERN_SCREEN_ORIGIN all Subsequent calls
-		    have the same offset so only the first call will need
-		    to be observed.
-
-    
-    HARDWARE_PATTERN_PROGRAMMED_ORIGIN only
-
-	SetupFor: patx and paty hold the x,y location of the unrotated
-		  pattern.
-
-	Subsequent: patx and paty hold the pattern offset. 
-
-    HARDWARE_PATTERN_SCREEN_ORIGIN
-
-	SetupFor: patx and paty hold the x,y location of the rotated pattern.
-
-	Subsequent: patx and paty hold the same location as the SetupFor
-		    function so these can be ignored.
-
-    neither flag
-
-	SetupFor: patx and paty hold the x,y location of the unrotated
-		  pattern.  This can be ignored.
-
-	Subsequent: patx and paty hold the x,y location of the rotated
-		    pattern.
-
-    Additional information about cached patterns...
-    All 8x8 color patterns are cached in offscreen video memory so
-    the pixmap cache must be enabled to use them. The first pattern
-    starts at the cache slot boundary which is set by the 
-    CachePixelGranularity field used to configure the pixmap cache.
-    One should ensure that the CachePixelGranularity reflects any 
-    alignment restrictions that the accelerator may put on 8x8 pattern 
-    storage locations.  When HARDWARE_PATTERN_PROGRAMMED_ORIGIN is set 
-    there is only one pattern stored.  When this flag is not set,
-    all 64 rotations off the pattern are accessible but it is assumed
-    that the accelerator is capable of accessing data stored on 8
-    pixel boundaries.  If the accelerator has stricter alignment 
-    requirements than this the dirver will need to provide its own 
-    8x8 color pattern caching routines. 
-
-
-void SetupForColor8x8PatternFill(ScrnInfoPtr pScrn, int patx, int paty,
-        	int rop, unsigned int planemask, int trans_color)
-
-    SetupForColor8x8PatternFill indicates that any combination of the 
-    following  may follow it.
-
-	SubsequentColor8x8PatternFillRect
-	SubsequentColor8x8PatternFillTrap	(not implemented yet)
-
-    For the meanings of patx and paty, see the table above.  Trans_color
-    means the same as for the ScreenToScreenCopy functions.
-
-
- 
-void SubsequentColor8x8PatternFillRect( ScrnInfoPtr pScrn,
-        	int patx, int paty, int x, int y, int w, int h)
-
-     Fill a rectangle of dimensions "w" by "h" with origin at (x,y) 
-     using the parameters give by the last SetupForColor8x8PatternFill
-     call.  The meanings of patx and paty can be determined by the
-     table above.
-
-void SubsequentColor8x8PatternFillTrap( ScrnInfoPtr pScrn,
-     			   int patx, int paty, int y, int h, 
-     			   int left, int dxL, int dyL, int eL,
-     			   int right, int dxR, int dyR, int eR )
-
-    For the meanings of patx and paty, see the table above. 
-    The rest of the fields have the same meanings as those in the 
-    SubsequentSolidFillTrap function. 
-
-
-
-2.8  Image Writes
-
-    XAA provides a mechanism for transfering full color pixel data from
-    system memory to video memory through the accelerator.  This is 
-    useful for dealing with alignment issues and performing raster ops
-    on the data when writing it to the framebuffer.  As with color
-    expansion rectangles, there is a direct and indirect method.  The
-    direct method sends all data through a memory mapped aperature.
-    The indirect method sends the data to an intermediated buffer scanline 
-    at a time.
-
-    The direct and indirect methods have separate flags fields, the
-    ImageWriteFlags and ScanlineImageWriteFlags respectively.
-    Flags specific to one method or the other are described in sections 
-    2.8.1 and 2.8.2 but for both cases the GXCOPY_ONLY, ROP_NEEDS_SOURCE
-    and NO_PLANEMASK flags described in Section 2.0 are valid as well as
-    the following:
-
-    NO_GXCOPY
-
-      In order to have accelerated image transfers faster than the 
-      software versions for GXcopy, the engine needs to support clipping,
-      be using the direct method and have a large enough image transfer
-      range so that CPU_TRANSFER_BASE_FIXED doesn't need to be set.
-      If these are not supported, then it is unlikely that transfering
-      the data through the accelerator will be of any advantage for the
-      simple case of GXcopy.  In fact, it may be much slower.  For such
-      cases it's probably best to set the NO_GXCOPY flag so that 
-      Image writes will only be used for the more complicated rops.
-
-    /* transparency restrictions */
-
-    NO_TRANSPARENCY
-     
-      This indicates that the accelerator does not support skipping
-      of color keyed pixels when copying from the source to the destination.
-
-    TRANSPARENCY_GXCOPY_ONLY
-
-      This indicates that the accelerator supports skipping of color keyed
-      pixels only when the rop is GXcopy.
-
-    /* clipping  (optional) */
-    
-    LEFT_EDGE_CLIPPING
- 
-      This indicates that the accelerator supports omission of up to
-      3 pixels on the left edge of the rectangle to be filled.  This
-      is beneficial since it allows transfer from the source pixmap to
-      always occur from DWORD boundaries. 
-
-    LEFT_EDGE_CLIPPING_NEGATIVE_X
-
-      This flag indicates that the accelerator can fill areas with
-      image write data even if the value of x origin is negative (off of
-      the screen on the left edge).
-
-
-2.8.1 The Direct Method
-
-    Using the direct method of ImageWrite XAA will send all
-    bitmap data to the accelerator serially through an memory mapped
-    transfer window defined by the following two fields:
-
-      unsigned char *ImageWriteBase
-
-        This indicates the memory address of the beginning of the aperture.
-
-      int ImageWriteRange
-
-        This indicates the size in bytes of the aperture.
-
-    The driver should specify how the transfered data should be padded.
-    There are options for both the padding of each Y scanline and for the
-    total transfer to the aperature.
-    One of the following two flags must be set:
-
-      CPU_TRANSFER_PAD_DWORD
-
-        This indicates that the total transfer (sum of all scanlines) sent
-        to the aperature must be DWORD padded.  This is the default behavior.
-
-      CPU_TRANSFER_PAD_QWORD 
-
-	This indicates that the total transfer (sum of all scanlines) sent
-	to the aperature must be QWORD padded.  With this set, XAA will send
-        an extra DWORD to the aperature when needed to ensure that only
-        an even number of DWORDs are sent.
-
-    And then there are the flags for padding of each scanline:
-
-      SCANLINE_PAD_DWORD
-
-	This indicates that each Y scanline should be DWORD padded.
-        This is the only option available and is the default.
-
-    Finally, there is the CPU_TRANSFER_BASE_FIXED flag which indicates
-    that the aperture is a single register rather than a range of
-    registers, and XAA should write all of the data to the first DWORD.
-    XAA will automatically select CPU_TRANSFER_BASE_FIXED if the 
-    ImageWriteRange is not large enough to accomodate an entire scanline.   
-
-
-void SetupForImageWrite(ScrnInfoPtr pScrn, int rop, unsigned int planemask,
-        			int trans_color, int bpp, int depth)
-
-     If trans_color is not -1 then trans_color indicates the transparency
-     color key and pixels with color trans_color passed through the 
-     aperature should not be transfered to the screen but should be 
-     skipped.  Bpp and depth indicate the bits per pixel and depth of
-     the source pixmap.  Trans_color is always -1 if the NO_TRANSPARENCY
-     flag is set.
-
-
-void SubsequentImageWriteRect(ScrnInfoPtr pScrn, 
-				int x, int y, int w, int h, int skipleft)
-
-     
-     Data passed through the aperature should be copied to a rectangle
-     of width "w" and height "h" with origin (x,y).  If LEFT_EDGE_CLIPPING
-     has been enabled, skipleft will correspond to the number of pixels
-     on the left edge that should not be drawn.  Skipleft is zero 
-     otherwise.
-
-     It can be arranged for XAA to call Sync() after it is through 
-     calling the Subsequent functions by setting SYNC_AFTER_IMAGE_WRITE 
-     in the  ImageWriteFlags.  This can provide the driver with an
-     oportunity to reset a clipping window if needed.
-
-2.8.2  The Indirect Method
-
-     Using the indirect method, XAA will render the pixel data scanline
-     at a time to one or more buffers.  These buffers may be memory
-     mapped apertures or just intermediate storage.
-
-     int NumScanlineImageWriteBuffers
-
-       This indicates the number of buffers available.
-
-     unsigned char **ScanlineImageWriteBuffers
-
-       This is an array of pointers to the memory locations of each buffer.
-       Each buffer is expected to be large enough to accommodate scanlines
-       the width of the screen.  That is:
-
-         pScrn->VirtualX * pScreen->bitsPerPixel/8   bytes or more.
-
-       If LEFT_EDGE_CLIPPING_NEGATIVE_X is set, add an additional 4
-       bytes to that requirement in 8 and 16bpp, 12 bytes in 24bpp.
-  
-     Scanlines are always DWORD padded.
-
-void SetupForScanlineImageWrite(ScrnInfoPtr pScrn, int rop, 
-				unsigned int planemask, int trans_color, 
-				int bpp, int depth)
-
-     If trans_color is not -1 then trans_color indicates the transparency
-     color key and pixels with color trans_color in the buffer should not 
-     be transfered to the screen but should be skipped.  Bpp and depth 
-     indicate the bits per pixel and depth of the source bitmap.  
-     Trans_color is always -1 if the NO_TRANSPARENCY flag is set.
-
-
-void SubsequentImageWriteRect(ScrnInfoPtr pScrn, 
-				int x, int y, int w, int h, int skipleft)
-
-     
-void SubsequentImageWriteScanline(ScrnInfoPtr pScrn, int bufno)
-
-
-    When SubsequentImageWriteRect is called, XAA will begin
-    transfering the source data scanline at a time, calling  
-    SubsequentImageWriteScanline after each scanline.  If more than
-    one buffer is available, XAA will cycle through the buffers.
-    Subsequent scanlines will use the next buffer and go back to the
-    buffer 0 again when the last buffer is reached.  The index into
-    the ScanlineImageWriteBuffers array is presented as "bufno"
-    with each SubsequentImageWriteScanline call.
-
-    The skipleft field is the same as for the direct method.
-
-    The indirect method can be use to send the source data directly 
-    to a memory mapped aperture represented by a single image write
-    buffer, scanline at a time, but more commonly it is used to place 
-    the data into offscreen video memory so that the accelerator can 
-    blit it to the visible screen from there.  In the case where the
-    accelerator permits rendering into offscreen video memory while
-    the accelerator is active, several buffers can be used so that
-    XAA can be placing source data into the next buffer while the
-    accelerator is blitting the current buffer.  For cases where
-    the accelerator requires some special manipulation of the source
-    data first, the buffers can be in system memory.  The CPU can
-    manipulate these buffers and then send the data to the accelerator.
-
-
-2.9 Clipping
-
-    XAA supports hardware clipping rectangles.  To use clipping
-    in this way it is expected that the graphics accelerator can
-    clip primitives with verticies anywhere in the 16 bit signed 
-    coordinate system. 
-
-void SetClippingRectangle ( ScrnInfoPtr pScrn,
-        		int left, int top, int right, int bottom)
-
-void DisableClipping (ScrnInfoPtr pScrn)
-
-    When SetClippingRectangle is called, all hardware rendering
-    following it should be clipped to the rectangle specified
-    until DisableClipping is called.
-
-    The ClippingFlags field indicates which operations this sort
-    of Set/Disable pairing can be used with.  Any of the following
-    flags may be OR'd together.
-
-	HARDWARE_CLIP_SCREEN_TO_SCREEN_COLOR_EXPAND
-	HARDWARE_CLIP_SCREEN_TO_SCREEN_COPY
-	HARDWARE_CLIP_MONO_8x8_FILL
-	HARDWARE_CLIP_COLOR_8x8_FILL
-	HARDWARE_CLIP_SOLID_FILL
-	HARDWARE_CLIP_DASHED_LINE
-	HARDWARE_CLIP_SOLID_LINE
-
-
-
-3)  XAA PIXMAP CACHE
-
-   /* NOTE:  XAA has no knowledge of framebuffer particulars so until
-	the framebuffer is able to render into offscreen memory, usage
-	of the pixmap cache requires that the driver provide ImageWrite
-	routines or a WritePixmap or WritePixmapToCache replacement so
-	that patterns can even be placed in the cache.
-
-      ADDENDUM: XAA can now load the pixmap cache without requiring
-	that the driver supply an ImageWrite function, but this can
-	only be done on linear framebuffers.  If you have a linear
-	framebuffer, set LINEAR_FRAMEBUFFER in the XAAInfoRec.Flags
-	field and XAA will then be able to upload pixmaps into the
-	cache without the driver providing functions to do so.
-   */
-
-
-   The XAA pixmap cache provides a mechanism for caching of patterns
-   in offscreen video memory so that tiled fills and in some cases
-   stippling can be done by blitting the source patterns from offscreen
-   video memory. The pixmap cache also provides the mechanism for caching 
-   of 8x8 color and mono hardware patterns.  Any unused offscreen video
-   memory gets used for the pixmap cache and that information is 
-   provided by the XFree86 Offscreen Memory Manager. XAA registers a 
-   callback with the manager so that it can be informed of any changes 
-   in the offscreen memory configuration.  The driver writer does not 
-   need to deal with any of this since it is all automatic.  The driver 
-   merely needs to initialize the Offscreen Memory Manager as described 
-   in the DESIGN document and set the PIXMAP_CACHE flag in the 
-   XAAInfoRec.Flags field.  The Offscreen Memory Manager initialization 
-   must occur before XAA is initialized or else pixmap cache 
-   initialization will fail.  
-
-   PixmapCacheFlags is an XAAInfoRec field which allows the driver to
-   control pixmap cache behavior to some extent.  Currently only one
-   flag is defined:
-
-   DO_NOT_BLIT_STIPPLES
-
-     This indicates that the stippling should not be done by blitting
-     from the pixmap cache.  This does not apply to 8x8 pattern fills. 
-
-
-   CachePixelGranularity is an optional field.  If the hardware requires
-   that a 8x8 patterns have some particular pixel alignment it should
-   be reflected in this field.  Ignoring this field or setting it to
-   zero or one means there are no alignment issues.
-
-
-4)  OFFSCREEN PIXMAPS
-
-   XAA has the ability to store pixmap drawables in offscreen video 
-   memory and render into them with full hardware acceleration.  Placement
-   of pixmaps in the cache is done automatically on a first-come basis and 
-   only if there is room.  To enable this feature, set the OFFSCREEN_PIXMAPS
-   flag in the XAAInfoRec.Flags field.  This is only available when a
-   ScreenToScreenCopy function is provided, when the Offscreen memory 
-   manager has been initialized and when the LINEAR_FRAMEBUFFER flag is
-   also set.
-
-   int maxOffPixWidth
-   int maxOffPixHeight
-
-       These two fields allow the driver to limit the maximum dimensions
-     of an offscreen pixmap.  If one of these is not set, it is assumed
-     that there is no limit on that dimension.  Note that if an offscreen
-     pixmap with a particular dimension is allowed, then your driver will be
-     expected to render primitives as large as that pixmap.  
-
-$XFree86: xc/programs/Xserver/hw/xfree86/xaa/XAA.HOWTO,v 1.12 2000/04/12 14:44:42 tsi Exp $
diff --git a/hw/xfree86/xaa/xaa.h b/hw/xfree86/xaa/xaa.h
deleted file mode 100644
index b530037..0000000
--- a/hw/xfree86/xaa/xaa.h
+++ /dev/null
@@ -1,1038 +0,0 @@
-
-#ifndef _XAA_H
-#define _XAA_H
-
-#define XAA_VERSION_MAJOR   1
-#define XAA_VERSION_MINOR   2
-#define XAA_VERSION_RELEASE 1
-
-/*
-
-   ******** OPERATION SPECIFIC FLAGS *********
-
-   **** solid/dashed line flags ****
- 
----------               --------
-23           LINE_PATTERN_LSBFIRST_MSBJUSTIFIED
-22           LINE_PATTERN_LSBFIRST_LSBJUSTIFIED
-21           LINE_PATTERN_MSBFIRST_MSBJUSTIFIED
-20           LINE_PATTERN_MSBFIRST_LSBJUSTIFIED
-19           LINE_PATTERN_POWER_OF_2_ONLY
-18           LINE_LIMIT_COORDS
-17                         .
-16                         .
----------               -------
-
-   **** screen to screen copy flags ****
-
----------               --------
-23           ONLY_LEFT_TO_RIGHT_BITBLT
-22           ONLY_TWO_BITBLT_DIRECTIONS
-21                         .
-20                         .
-19                         .
-18                         .
-17                         .
-16                         .
----------               -------
-
-   ****  clipping flags ****
-
----------               --------
-23                         .
-22           HARDWARE_CLIP_SCREEN_TO_SCREEN_COLOR_EXPAND
-21           HARDWARE_CLIP_SCREEN_TO_SCREEN_COPY
-20           HARDWARE_CLIP_MONO_8x8_FILL
-19           HARDWARE_CLIP_COLOR_8x8_FILL    
-18           HARDWARE_CLIP_SOLID_FILL
-17           HARDWARE_CLIP_DASHED_LINE
-16           HARDWARE_CLIP_SOLID_LINE
----------               -------
-
-   ****  hardware pattern flags ****
-
----------               --------
-23                         .
-22                         .
-21           HARDWARE_PATTERN_SCREEN_ORIGIN
-20                         .
-19                         .
-18                         .
-17           HARDWARE_PATTERN_PROGRAMMED_ORIGIN
-16           HARDWARE_PATTERN_PROGRAMMED_BITS
----------               -------
-
-   ****  write pixmap flags ****
-
----------               --------
-23                         .
-22                         .
-21                         .
-20                         .
-19                         .
-18                         .
-17                         .
-16           CONVERT_32BPP_TO_24BPP
----------               -------
-
-   ******** GENERIC FLAGS *********
-
----------               -------
-15           SYNC_AFTER_COLOR_EXPAND
-14           CPU_TRANSFER_PAD_QWORD
-13                         .
-12           LEFT_EDGE_CLIPPING_NEGATIVE_X
-11	     LEFT_EDGE_CLIPPING
-10	     CPU_TRANSFER_BASE_FIXED
- 9           BIT_ORDER_IN_BYTE_MSBFIRST           
- 8           TRANSPARENCY_GXCOPY_ONLY
----------               -------
- 7           NO_TRANSPARENCY
- 6           TRANSPARENCY_ONLY
- 5           ROP_NEEDS_SOURCE
- 4           TRIPLE_BITS_24BPP
- 3           RGB_EQUAL
- 2           NO_PLANEMASK
- 1           NO_GXCOPY
- 0           GXCOPY_ONLY
----------               -------
-
-
-*/
-
-#include "gcstruct.h"
-#include "pixmapstr.h"
-#include "xf86str.h"
-#include "regionstr.h"
-#include "xf86fbman.h"
-
-#include "picturestr.h"
-
-/* Flags */
-#define PIXMAP_CACHE			0x00000001
-#define MICROSOFT_ZERO_LINE_BIAS	0x00000002
-#define OFFSCREEN_PIXMAPS		0x00000004
-#define LINEAR_FRAMEBUFFER		0x00000008
-
-/* GC fg, bg, and planemask restrictions */
-#define GXCOPY_ONLY			0x00000001
-#define NO_GXCOPY			0x00000002
-#define NO_PLANEMASK			0x00000004
-#define RGB_EQUAL			0x00000008
-#define TRIPLE_BITS_24BPP		0x00000010
-#define ROP_NEEDS_SOURCE		0x00000020
-
-/* transparency restrictions */
-#define TRANSPARENCY_ONLY		0x00000040
-#define NO_TRANSPARENCY			0x00000080
-#define TRANSPARENCY_GXCOPY_ONLY     	0x00000100
-
-/* bit order restrictions */
-#define BIT_ORDER_IN_BYTE_MSBFIRST	0x00000200
-#define BIT_ORDER_IN_BYTE_LSBFIRST	0x00000000
-
-/* transfer base restriction */
-#define CPU_TRANSFER_BASE_FIXED		0x00000400
-
-/* skipleft restrictions */
-#define LEFT_EDGE_CLIPPING		0x00000800
-#define LEFT_EDGE_CLIPPING_NEGATIVE_X	0x00001000
-
-/* data padding */
-#define CPU_TRANSFER_PAD_DWORD		0x00000000
-#define CPU_TRANSFER_PAD_QWORD		0x00004000
-#define SCANLINE_PAD_DWORD		0x00000000
-
-#define SYNC_AFTER_COLOR_EXPAND		0x00008000
-#define SYNC_AFTER_IMAGE_WRITE		SYNC_AFTER_COLOR_EXPAND
-
-/* hardware pattern */
-#define HARDWARE_PATTERN_PROGRAMMED_BITS	0x00010000
-#define HARDWARE_PATTERN_PROGRAMMED_ORIGIN	0x00020000
-#define HARDWARE_PATTERN_SCREEN_ORIGIN		0x00200000
-
-/* copyarea flags */
-#define ONLY_TWO_BITBLT_DIRECTIONS	0x00400000
-#define ONLY_LEFT_TO_RIGHT_BITBLT	0x00800000
-
-/* line flags */
-#define LINE_PATTERN_LSBFIRST_MSBJUSTIFIED	0x00800000
-#define LINE_PATTERN_LSBFIRST_LSBJUSTIFIED	0x00400000
-#define LINE_PATTERN_MSBFIRST_MSBJUSTIFIED	0x00200000
-#define LINE_PATTERN_MSBFIRST_LSBJUSTIFIED	0x00100000
-#define LINE_PATTERN_POWER_OF_2_ONLY		0x00080000
-#define LINE_LIMIT_COORDS			0x00040000
-
-/* clipping flags */
-#define HARDWARE_CLIP_SCREEN_TO_SCREEN_COLOR_EXPAND	0x00400000
-#define HARDWARE_CLIP_SCREEN_TO_SCREEN_COPY		0x00200000
-#define HARDWARE_CLIP_MONO_8x8_FILL			0x00100000
-#define HARDWARE_CLIP_COLOR_8x8_FILL			0x00080000
-#define HARDWARE_CLIP_SOLID_FILL			0x00040000
-#define HARDWARE_CLIP_DASHED_LINE			0x00020000
-#define HARDWARE_CLIP_SOLID_LINE			0x00010000
-
-#define HARDWARE_CLIP_LINE				0x00000000
-
-/* image write flags */
-#define CONVERT_32BPP_TO_24BPP			0x00010000
-
-/* pixmap cache flags */
-#define CACHE_MONO_8x8			0x00000001
-#define CACHE_COLOR_8x8			0x00000002
-#define DO_NOT_BLIT_STIPPLES		0x00000004
-#define DO_NOT_TILE_MONO_DATA		0x00000008
-#define DO_NOT_TILE_COLOR_DATA		0x00000010
-
-#define DEGREES_0	0
-#define DEGREES_90	1
-#define DEGREES_180	2
-#define DEGREES_270	3
-
-#define OMIT_LAST	1
-
-/* render flags */
-
-#define XAA_RENDER_POWER_OF_2_TILE_ONLY	0x00000008
-#define XAA_RENDER_NO_SRC_ALPHA		0x00000004
-#define XAA_RENDER_IMPRECISE_ONLY	0x00000002
-#define XAA_RENDER_NO_TILE		0x00000001
-
-#define XAA_RENDER_REPEAT		0x00000001
-
-typedef void (*ValidateGCProcPtr) (GCPtr pGC,
-                                   unsigned long changes, DrawablePtr pDraw);
-
-typedef struct {
-    unsigned char *bits;
-    int width;
-    int height;
-    int yoff;
-    int srcwidth;
-    int start;
-    int end;
-} NonTEGlyphInfo, *NonTEGlyphPtr;
-
-typedef struct {
-    int x;
-    int y;
-    int w;
-    int h;
-    int orig_w;
-    int orig_h;
-    unsigned long serialNumber;
-    int pat0;
-    int pat1;
-    int fg;
-    int bg;
-    int trans_color;
-    DDXPointPtr offsets;
-    DevUnion devPrivate;
-} XAACacheInfoRec, *XAACacheInfoPtr;
-
-typedef struct _PixmapLink {
-    PixmapPtr pPix;
-    struct _PixmapLink *next;
-    FBAreaPtr area;
-} PixmapLink, *PixmapLinkPtr;
-
-typedef struct _XAAInfoRec {
-    ScrnInfoPtr pScrn;
-    int Flags;
-
-    void (*Sync) (ScrnInfoPtr pScrn);
-
-    /* Restore Accel State is a driver callback that is used
-     * when another screen on the same device has been active.
-     * This allows multihead on a single device to work.
-     * If The entityProp has IS_SHARED_ACCEL defined then this
-     * function is required.
-     */
-
-    void (*RestoreAccelState) (ScrnInfoPtr pScrn);
-
-   /***************** Low Level *****************/
-
-/* Blits */
-    void (*SetupForScreenToScreenCopy) (ScrnInfoPtr pScrn,
-                                        int xdir, int ydir,
-                                        int rop,
-                                        unsigned int planemask,
-                                        int trans_color);
-    int ScreenToScreenCopyFlags;
-
-    void (*SubsequentScreenToScreenCopy) (ScrnInfoPtr pScrn,
-                                          int xsrc, int ysrc,
-                                          int xdst, int ydst, int w, int h);
-
-/* Solid fills */
-    void (*SetupForSolidFill) (ScrnInfoPtr pScrn,
-                               int color, int rop, unsigned int planemask);
-    int SolidFillFlags;
-
-    void (*SubsequentSolidFillRect) (ScrnInfoPtr pScrn,
-                                     int x, int y, int w, int h);
-
-    void (*SubsequentSolidFillTrap) (ScrnInfoPtr pScrn,
-                                     int y, int h,
-                                     int left, int dxL, int dyL, int eL,
-                                     int right, int dxR, int dyR, int eR);
-
-/* Solid lines */
-
-    void (*SetupForSolidLine) (ScrnInfoPtr pScrn,
-                               int color, int rop, unsigned int planemask);
-    int SolidLineFlags;
-
-    void (*SubsequentSolidTwoPointLine) (ScrnInfoPtr pScrn,
-                                         int xa, int ya, int xb, int yb,
-                                         int flags);
-
-    void (*SubsequentSolidBresenhamLine) (ScrnInfoPtr pScrn,
-                                          int x, int y, int absmaj, int absmin,
-                                          int err, int len, int octant);
-    int SolidBresenhamLineErrorTermBits;
-
-    void (*SubsequentSolidHorVertLine) (ScrnInfoPtr pScrn,
-                                        int x, int y, int len, int dir);
-
-/* Dashed lines */
-
-    void (*SetupForDashedLine) (ScrnInfoPtr pScrn,
-                                int fg, int bg,
-                                int rop,
-                                unsigned int planemask,
-                                int length, unsigned char *pattern);
-    int DashedLineFlags;
-    int DashPatternMaxLength;
-
-    void (*SubsequentDashedTwoPointLine) (ScrnInfoPtr pScrn,
-                                          int xa, int ya, int xb, int yb,
-                                          int flags, int phase);
-
-    void (*SubsequentDashedBresenhamLine) (ScrnInfoPtr pScrn,
-                                           int x, int y, int absmaj, int absmin,
-                                           int err, int len, int flags,
-                                           int phase);
-    int DashedBresenhamLineErrorTermBits;
-
-/* Clipper */
-
-    void (*SetClippingRectangle) (ScrnInfoPtr pScrn,
-                                  int left, int top, int right, int bottom);
-    int ClippingFlags;
-
-    void (*DisableClipping) (ScrnInfoPtr pScrn);
-
-/* 8x8 mono pattern fills */
-    void (*SetupForMono8x8PatternFill) (ScrnInfoPtr pScrn,
-                                        int patx, int paty,
-                                        int fg, int bg,
-                                        int rop, unsigned int planemask);
-    int Mono8x8PatternFillFlags;
-
-    void (*SubsequentMono8x8PatternFillRect) (ScrnInfoPtr pScrn,
-                                              int patx, int paty,
-                                              int x, int y, int w, int h);
-
-    void (*SubsequentMono8x8PatternFillTrap) (ScrnInfoPtr pScrn,
-                                              int patx, int paty,
-                                              int y, int h,
-                                              int left, int dxL, int dyL,
-                                              int eL, int right, int dxR,
-                                              int dyR, int eR);
-
-/* 8x8 color pattern fills */
-
-    void (*SetupForColor8x8PatternFill) (ScrnInfoPtr pScrn,
-                                         int patx, int paty,
-                                         int rop,
-                                         unsigned int planemask,
-                                         int transparency_color);
-    int Color8x8PatternFillFlags;
-
-    void (*SubsequentColor8x8PatternFillRect) (ScrnInfoPtr pScrn,
-                                               int patx, int paty,
-                                               int x, int y, int w, int h);
-
-    void (*SubsequentColor8x8PatternFillTrap) (ScrnInfoPtr pScrn,
-                                               int patx, int paty,
-                                               int y, int h,
-                                               int left, int dxL, int dyL,
-                                               int eL, int right, int dxR,
-                                               int dyR, int eR);
-
-/* Color expansion */
-
-    void (*SetupForCPUToScreenColorExpandFill) (ScrnInfoPtr pScrn,
-                                                int fg, int bg,
-                                                int rop,
-                                                unsigned int planemask);
-    int CPUToScreenColorExpandFillFlags;
-
-    void (*SubsequentCPUToScreenColorExpandFill) (ScrnInfoPtr pScrn,
-                                                  int x, int y, int w, int h,
-                                                  int skipleft);
-
-    unsigned char *ColorExpandBase;
-    int ColorExpandRange;
-
-/* Scanline color expansion  */
-
-    void (*SetupForScanlineCPUToScreenColorExpandFill) (ScrnInfoPtr pScrn,
-                                                        int fg, int bg,
-                                                        int rop,
-                                                        unsigned int planemask);
-    int ScanlineCPUToScreenColorExpandFillFlags;
-
-    void (*SubsequentScanlineCPUToScreenColorExpandFill) (ScrnInfoPtr pScrn,
-                                                          int x, int y, int w,
-                                                          int h, int skipleft);
-
-    void (*SubsequentColorExpandScanline) (ScrnInfoPtr pScrn, int bufno);
-
-    int NumScanlineColorExpandBuffers;
-    unsigned char **ScanlineColorExpandBuffers;
-
-/* Screen to screen color expansion */
-
-    void (*SetupForScreenToScreenColorExpandFill) (ScrnInfoPtr pScrn,
-                                                   int fg, int bg,
-                                                   int rop,
-                                                   unsigned int planemask);
-    int ScreenToScreenColorExpandFillFlags;
-
-    void (*SubsequentScreenToScreenColorExpandFill) (ScrnInfoPtr pScrn,
-                                                     int x, int y, int w, int h,
-                                                     int srcx, int srcy,
-                                                     int skipleft);
-
-/*  Image transfers */
-
-    void (*SetupForImageWrite) (ScrnInfoPtr pScrn,
-                                int rop,
-                                unsigned int planemask,
-                                int transparency_color, int bpp, int depth);
-    int ImageWriteFlags;
-
-    void (*SubsequentImageWriteRect) (ScrnInfoPtr pScrn,
-                                      int x, int y, int w, int h, int skipleft);
-    unsigned char *ImageWriteBase;
-    int ImageWriteRange;
-
-/*  Scanline Image transfers */
-
-    void (*SetupForScanlineImageWrite) (ScrnInfoPtr pScrn,
-                                        int rop,
-                                        unsigned int planemask,
-                                        int transparency_color,
-                                        int bpp, int depth);
-    int ScanlineImageWriteFlags;
-
-    void (*SubsequentScanlineImageWriteRect) (ScrnInfoPtr pScrn,
-                                              int x, int y, int w, int h,
-                                              int skipleft);
-
-    void (*SubsequentImageWriteScanline) (ScrnInfoPtr pScrn, int bufno);
-
-    int NumScanlineImageWriteBuffers;
-    unsigned char **ScanlineImageWriteBuffers;
-
-    /* Image Reads - OBSOLETE AND NOT USED */
-
-    void (*SetupForImageRead) (ScrnInfoPtr pScrn, int bpp, int depth);
-    int ImageReadFlags;
-
-    unsigned char *ImageReadBase;
-    int ImageReadRange;
-
-    void (*SubsequentImageReadRect) (ScrnInfoPtr pScrn,
-                                     int x, int y, int w, int h);
-
-   /***************** Mid Level *****************/
-    void (*ScreenToScreenBitBlt) (ScrnInfoPtr pScrn,
-                                  int nbox,
-                                  DDXPointPtr pptSrc,
-                                  BoxPtr pbox,
-                                  int xdir, int ydir,
-                                  int alu, unsigned int planmask);
-    int ScreenToScreenBitBltFlags;
-
-    void (*WriteBitmap) (ScrnInfoPtr pScrn,
-                         int x, int y, int w, int h,
-                         unsigned char *src,
-                         int srcwidth,
-                         int skipleft,
-                         int fg, int bg, int rop, unsigned int planemask);
-    int WriteBitmapFlags;
-
-    void (*FillSolidRects) (ScrnInfoPtr pScrn,
-                            int fg, int rop,
-                            unsigned int planemask, int nBox, BoxPtr pBox);
-    int FillSolidRectsFlags;
-
-    void (*FillMono8x8PatternRects) (ScrnInfoPtr pScrn,
-                                     int fg, int bg, int rop,
-                                     unsigned int planemask,
-                                     int nBox,
-                                     BoxPtr pBox,
-                                     int pat0, int pat1, int xorg, int yorg);
-    int FillMono8x8PatternRectsFlags;
-
-    void (*FillColor8x8PatternRects) (ScrnInfoPtr pScrn,
-                                      int rop,
-                                      unsigned int planemask,
-                                      int nBox,
-                                      BoxPtr pBox,
-                                      int xorg, int yorg,
-                                      XAACacheInfoPtr pCache);
-    int FillColor8x8PatternRectsFlags;
-
-    void (*FillCacheBltRects) (ScrnInfoPtr pScrn,
-                               int rop,
-                               unsigned int planemask,
-                               int nBox,
-                               BoxPtr pBox,
-                               int xorg, int yorg, XAACacheInfoPtr pCache);
-    int FillCacheBltRectsFlags;
-
-    void (*FillColorExpandRects) (ScrnInfoPtr pScrn,
-                                  int fg, int bg, int rop,
-                                  unsigned int planemask,
-                                  int nBox,
-                                  BoxPtr pBox,
-                                  int xorg, int yorg, PixmapPtr pPix);
-    int FillColorExpandRectsFlags;
-
-    void (*FillCacheExpandRects) (ScrnInfoPtr pScrn,
-                                  int fg, int bg, int rop,
-                                  unsigned int planemask,
-                                  int nBox,
-                                  BoxPtr pBox,
-                                  int xorg, int yorg, PixmapPtr pPix);
-    int FillCacheExpandRectsFlags;
-
-    void (*FillImageWriteRects) (ScrnInfoPtr pScrn,
-                                 int rop,
-                                 unsigned int planemask,
-                                 int nBox,
-                                 BoxPtr pBox,
-                                 int xorg, int yorg, PixmapPtr pPix);
-    int FillImageWriteRectsFlags;
-
-    void (*FillSolidSpans) (ScrnInfoPtr pScrn,
-                            int fg, int rop,
-                            unsigned int planemask,
-                            int n,
-                            DDXPointPtr points, int *widths, int fSorted);
-    int FillSolidSpansFlags;
-
-    void (*FillMono8x8PatternSpans) (ScrnInfoPtr pScrn,
-                                     int fg, int bg, int rop,
-                                     unsigned int planemask,
-                                     int n,
-                                     DDXPointPtr points,
-                                     int *widths,
-                                     int fSorted,
-                                     int pat0, int pat1, int xorg, int yorg);
-    int FillMono8x8PatternSpansFlags;
-
-    void (*FillColor8x8PatternSpans) (ScrnInfoPtr pScrn,
-                                      int rop,
-                                      unsigned int planemask,
-                                      int n,
-                                      DDXPointPtr points,
-                                      int *widths,
-                                      int fSorted,
-                                      XAACacheInfoPtr pCache,
-                                      int xorg, int yorg);
-    int FillColor8x8PatternSpansFlags;
-
-    void (*FillCacheBltSpans) (ScrnInfoPtr pScrn,
-                               int rop,
-                               unsigned int planemask,
-                               int n,
-                               DDXPointPtr points,
-                               int *widths,
-                               int fSorted,
-                               XAACacheInfoPtr pCache, int xorg, int yorg);
-    int FillCacheBltSpansFlags;
-
-    void (*FillColorExpandSpans) (ScrnInfoPtr pScrn,
-                                  int fg, int bg, int rop,
-                                  unsigned int planemask,
-                                  int n,
-                                  DDXPointPtr points,
-                                  int *widths,
-                                  int fSorted,
-                                  int xorg, int yorg, PixmapPtr pPix);
-    int FillColorExpandSpansFlags;
-
-    void (*FillCacheExpandSpans) (ScrnInfoPtr pScrn,
-                                  int fg, int bg, int rop,
-                                  unsigned int planemask,
-                                  int n,
-                                  DDXPointPtr ppt,
-                                  int *pwidth,
-                                  int fSorted,
-                                  int xorg, int yorg, PixmapPtr pPix);
-    int FillCacheExpandSpansFlags;
-
-    void (*TEGlyphRenderer) (ScrnInfoPtr pScrn,
-                             int x, int y, int w, int h, int skipleft,
-                             int startline, unsigned int **glyphs,
-                             int glyphWidth, int fg, int bg, int rop,
-                             unsigned planemask);
-    int TEGlyphRendererFlags;
-
-    void (*NonTEGlyphRenderer) (ScrnInfoPtr pScrn,
-                                int x, int y, int n,
-                                NonTEGlyphPtr glyphs,
-                                BoxPtr pbox,
-                                int fg, int rop, unsigned int planemask);
-    int NonTEGlyphRendererFlags;
-
-    void (*WritePixmap) (ScrnInfoPtr pScrn,
-                         int x, int y, int w, int h,
-                         unsigned char *src,
-                         int srcwidth,
-                         int rop,
-                         unsigned int planemask,
-                         int transparency_color, int bpp, int depth);
-    int WritePixmapFlags;
-
-    void (*ReadPixmap) (ScrnInfoPtr pScrn,
-                        int x, int y, int w, int h,
-                        unsigned char *dst, int dstwidth, int bpp, int depth);
-    int ReadPixmapFlags;
-
-   /***************** GC Level *****************/
-    RegionPtr (*CopyArea) (DrawablePtr pSrcDrawable,
-                           DrawablePtr pDstDrawable,
-                           GC * pGC,
-                           int srcx, int srcy,
-                           int width, int height, int dstx, int dsty);
-    int CopyAreaFlags;
-
-    RegionPtr (*CopyPlane) (DrawablePtr pSrc,
-                            DrawablePtr pDst,
-                            GCPtr pGC,
-                            int srcx, int srcy,
-                            int width, int height,
-                            int dstx, int dsty, unsigned long bitPlane);
-    int CopyPlaneFlags;
-
-    void (*PushPixelsSolid) (GCPtr pGC,
-                             PixmapPtr pBitMap,
-                             DrawablePtr pDrawable,
-                             int dx, int dy, int xOrg, int yOrg);
-    int PushPixelsFlags;
-
-   /** PolyFillRect **/
-
-    void (*PolyFillRectSolid) (DrawablePtr pDraw,
-                               GCPtr pGC, int nrectFill, xRectangle *prectInit);
-    int PolyFillRectSolidFlags;
-
-    void (*PolyFillRectStippled) (DrawablePtr pDraw,
-                                  GCPtr pGC,
-                                  int nrectFill, xRectangle *prectInit);
-    int PolyFillRectStippledFlags;
-
-    void (*PolyFillRectOpaqueStippled) (DrawablePtr pDraw,
-                                        GCPtr pGC,
-                                        int nrectFill, xRectangle *prectInit);
-    int PolyFillRectOpaqueStippledFlags;
-
-    void (*PolyFillRectTiled) (DrawablePtr pDraw,
-                               GCPtr pGC, int nrectFill, xRectangle *prectInit);
-    int PolyFillRectTiledFlags;
-
-   /** FillSpans **/
-
-    void (*FillSpansSolid) (DrawablePtr pDraw,
-                            GCPtr pGC,
-                            int nInit,
-                            DDXPointPtr ppt, int *pwidth, int fSorted);
-    int FillSpansSolidFlags;
-
-    void (*FillSpansStippled) (DrawablePtr pDraw,
-                               GCPtr pGC,
-                               int nInit,
-                               DDXPointPtr ppt, int *pwidth, int fSorted);
-    int FillSpansStippledFlags;
-
-    void (*FillSpansOpaqueStippled) (DrawablePtr pDraw,
-                                     GCPtr pGC,
-                                     int nInit,
-                                     DDXPointPtr ppt, int *pwidth, int fSorted);
-    int FillSpansOpaqueStippledFlags;
-
-    void (*FillSpansTiled) (DrawablePtr pDraw,
-                            GCPtr pGC,
-                            int nInit,
-                            DDXPointPtr ppt, int *pwidth, int fSorted);
-    int FillSpansTiledFlags;
-
-    int (*PolyText8TE) (DrawablePtr pDraw,
-                        GCPtr pGC, int x, int y, int count, char *chars);
-    int PolyText8TEFlags;
-
-    int (*PolyText16TE) (DrawablePtr pDraw,
-                         GCPtr pGC,
-                         int x, int y, int count, unsigned short *chars);
-    int PolyText16TEFlags;
-
-    void (*ImageText8TE) (DrawablePtr pDraw,
-                          GCPtr pGC, int x, int y, int count, char *chars);
-    int ImageText8TEFlags;
-
-    void (*ImageText16TE) (DrawablePtr pDraw,
-                           GCPtr pGC,
-                           int x, int y, int count, unsigned short *chars);
-    int ImageText16TEFlags;
-
-    void (*ImageGlyphBltTE) (DrawablePtr pDrawable,
-                             GCPtr pGC,
-                             int xInit, int yInit,
-                             unsigned int nglyph,
-                             CharInfoPtr * ppci, pointer pglyphBase);
-    int ImageGlyphBltTEFlags;
-
-    void (*PolyGlyphBltTE) (DrawablePtr pDrawable,
-                            GCPtr pGC,
-                            int xInit, int yInit,
-                            unsigned int nglyph,
-                            CharInfoPtr * ppci, pointer pglyphBase);
-    int PolyGlyphBltTEFlags;
-
-    int (*PolyText8NonTE) (DrawablePtr pDraw,
-                           GCPtr pGC, int x, int y, int count, char *chars);
-    int PolyText8NonTEFlags;
-
-    int (*PolyText16NonTE) (DrawablePtr pDraw,
-                            GCPtr pGC,
-                            int x, int y, int count, unsigned short *chars);
-    int PolyText16NonTEFlags;
-
-    void (*ImageText8NonTE) (DrawablePtr pDraw,
-                             GCPtr pGC, int x, int y, int count, char *chars);
-    int ImageText8NonTEFlags;
-
-    void (*ImageText16NonTE) (DrawablePtr pDraw,
-                              GCPtr pGC,
-                              int x, int y, int count, unsigned short *chars);
-    int ImageText16NonTEFlags;
-
-    void (*ImageGlyphBltNonTE) (DrawablePtr pDrawable,
-                                GCPtr pGC,
-                                int xInit, int yInit,
-                                unsigned int nglyph,
-                                CharInfoPtr * ppci, pointer pglyphBase);
-    int ImageGlyphBltNonTEFlags;
-
-    void (*PolyGlyphBltNonTE) (DrawablePtr pDrawable,
-                               GCPtr pGC,
-                               int xInit, int yInit,
-                               unsigned int nglyph,
-                               CharInfoPtr * ppci, pointer pglyphBase);
-    int PolyGlyphBltNonTEFlags;
-
-    void (*PolyRectangleThinSolid) (DrawablePtr pDrawable,
-                                    GCPtr pGC,
-                                    int nRectsInit, xRectangle *pRectsInit);
-    int PolyRectangleThinSolidFlags;
-
-    void (*PolylinesWideSolid) (DrawablePtr pDrawable,
-                                GCPtr pGC, int mode, int npt, DDXPointPtr pPts);
-    int PolylinesWideSolidFlags;
-
-    void (*PolylinesThinSolid) (DrawablePtr pDrawable,
-                                GCPtr pGC, int mode, int npt, DDXPointPtr pPts);
-    int PolylinesThinSolidFlags;
-
-    void (*PolySegmentThinSolid) (DrawablePtr pDrawable,
-                                  GCPtr pGC, int nseg, xSegment * pSeg);
-    int PolySegmentThinSolidFlags;
-
-    void (*PolylinesThinDashed) (DrawablePtr pDrawable,
-                                 GCPtr pGC,
-                                 int mode, int npt, DDXPointPtr pPts);
-    int PolylinesThinDashedFlags;
-
-    void (*PolySegmentThinDashed) (DrawablePtr pDrawable,
-                                   GCPtr pGC, int nseg, xSegment * pSeg);
-    int PolySegmentThinDashedFlags;
-
-    void (*FillPolygonSolid) (DrawablePtr pDrawable,
-                              GCPtr pGC,
-                              int shape,
-                              int mode, int count, DDXPointPtr ptsIn);
-    int FillPolygonSolidFlags;
-
-    void (*FillPolygonStippled) (DrawablePtr pDrawable,
-                                 GCPtr pGC,
-                                 int shape,
-                                 int mode, int count, DDXPointPtr ptsIn);
-    int FillPolygonStippledFlags;
-
-    void (*FillPolygonOpaqueStippled) (DrawablePtr pDrawable,
-                                       GCPtr pGC,
-                                       int shape,
-                                       int mode, int count, DDXPointPtr ptsIn);
-    int FillPolygonOpaqueStippledFlags;
-
-    void (*FillPolygonTiled) (DrawablePtr pDrawable,
-                              GCPtr pGC,
-                              int shape,
-                              int mode, int count, DDXPointPtr ptsIn);
-    int FillPolygonTiledFlags;
-
-    void (*PolyFillArcSolid) (DrawablePtr pDraw,
-                              GCPtr pGC, int narcs, xArc * parcs);
-    int PolyFillArcSolidFlags;
-
-    void (*PutImage) (DrawablePtr pDraw,
-                      GCPtr pGC,
-                      int depth,
-                      int x,
-                      int y,
-                      int w, int h, int leftPad, int format, char *pImage);
-    int PutImageFlags;
-
-    /* Validation masks */
-
-    unsigned long FillSpansMask;
-    ValidateGCProcPtr ValidateFillSpans;
-    unsigned long SetSpansMask;
-    ValidateGCProcPtr ValidateSetSpans;
-    unsigned long PutImageMask;
-    ValidateGCProcPtr ValidatePutImage;
-    unsigned long CopyAreaMask;
-    ValidateGCProcPtr ValidateCopyArea;
-    unsigned long CopyPlaneMask;
-    ValidateGCProcPtr ValidateCopyPlane;
-    unsigned long PolyPointMask;
-    ValidateGCProcPtr ValidatePolyPoint;
-    unsigned long PolylinesMask;
-    ValidateGCProcPtr ValidatePolylines;
-    unsigned long PolySegmentMask;
-    ValidateGCProcPtr ValidatePolySegment;
-    unsigned long PolyRectangleMask;
-    ValidateGCProcPtr ValidatePolyRectangle;
-    unsigned long PolyArcMask;
-    ValidateGCProcPtr ValidatePolyArc;
-    unsigned long FillPolygonMask;
-    ValidateGCProcPtr ValidateFillPolygon;
-    unsigned long PolyFillRectMask;
-    ValidateGCProcPtr ValidatePolyFillRect;
-    unsigned long PolyFillArcMask;
-    ValidateGCProcPtr ValidatePolyFillArc;
-    unsigned long PolyText8Mask;
-    ValidateGCProcPtr ValidatePolyText8;
-    unsigned long PolyText16Mask;
-    ValidateGCProcPtr ValidatePolyText16;
-    unsigned long ImageText8Mask;
-    ValidateGCProcPtr ValidateImageText8;
-    unsigned long ImageText16Mask;
-    ValidateGCProcPtr ValidateImageText16;
-    unsigned long PolyGlyphBltMask;
-    ValidateGCProcPtr ValidatePolyGlyphBlt;
-    unsigned long ImageGlyphBltMask;
-    ValidateGCProcPtr ValidateImageGlyphBlt;
-    unsigned long PushPixelsMask;
-    ValidateGCProcPtr ValidatePushPixels;
-
-    void (*ComputeDash) (GCPtr pGC);
-
-    /* Pixmap Cache */
-
-    int PixmapCacheFlags;
-    Bool UsingPixmapCache;
-    Bool CanDoMono8x8;
-    Bool CanDoColor8x8;
-
-    void (*InitPixmapCache) (ScreenPtr pScreen, RegionPtr areas, pointer data);
-    void (*ClosePixmapCache) (ScreenPtr pScreen);
-
-    int (*StippledFillChooser) (GCPtr pGC);
-    int (*OpaqueStippledFillChooser) (GCPtr pGC);
-    int (*TiledFillChooser) (GCPtr pGC);
-
-    int CachePixelGranularity;
-    int MaxCacheableTileWidth;
-    int MaxCacheableTileHeight;
-    int MaxCacheableStippleWidth;
-    int MaxCacheableStippleHeight;
-
-     XAACacheInfoPtr(*CacheTile) (ScrnInfoPtr Scrn, PixmapPtr pPix);
-     XAACacheInfoPtr(*CacheStipple) (ScrnInfoPtr Scrn, PixmapPtr pPix,
-                                     int fg, int bg);
-     XAACacheInfoPtr(*CacheMonoStipple) (ScrnInfoPtr Scrn, PixmapPtr pPix);
-     XAACacheInfoPtr(*CacheMono8x8Pattern) (ScrnInfoPtr Scrn, int pat0,
-                                            int pat1);
-     XAACacheInfoPtr(*CacheColor8x8Pattern) (ScrnInfoPtr Scrn, PixmapPtr pPix,
-                                             int fg, int bg);
-
-    int MonoPatternPitch;
-    int CacheWidthMono8x8Pattern;
-    int CacheHeightMono8x8Pattern;
-
-    int ColorPatternPitch;
-    int CacheWidthColor8x8Pattern;
-    int CacheHeightColor8x8Pattern;
-
-    int CacheColorExpandDensity;
-
-    void (*WriteBitmapToCache) (ScrnInfoPtr pScrn,
-                                int x, int y, int w, int h,
-                                unsigned char *src,
-                                int srcwidth, int fg, int bg);
-    void (*WritePixmapToCache) (ScrnInfoPtr pScrn,
-                                int x, int y, int w, int h,
-                                unsigned char *src,
-                                int srcwidth, int bpp, int depth);
-    void (*WriteMono8x8PatternToCache) (ScrnInfoPtr pScrn,
-                                        XAACacheInfoPtr pCache);
-    void (*WriteColor8x8PatternToCache) (ScrnInfoPtr pScrn,
-                                         PixmapPtr pPix,
-                                         XAACacheInfoPtr pCache);
-
-    char *PixmapCachePrivate;
-
-    /* Miscellaneous */
-
-    GC ScratchGC;
-    int PreAllocSize;
-    unsigned char *PreAllocMem;
-
-    CharInfoPtr CharInfo[255];
-    NonTEGlyphInfo GlyphInfo[255];
-
-    unsigned int FullPlanemask; /* deprecated */
-
-    PixmapLinkPtr OffscreenPixmaps;
-    int maxOffPixWidth;
-    int maxOffPixHeight;
-
-    XAACacheInfoRec ScratchCacheInfoRec;
-
-    BoxPtr ClipBox;
-
-    Bool NeedToSync;
-
-    char *dgaSaves;
-
-    /* These can be supplied to override the defaults */
-
-    GetImageProcPtr GetImage;
-    GetSpansProcPtr GetSpans;
-    CopyWindowProcPtr CopyWindow;
-
-    unsigned int offscreenDepths;
-    Bool offscreenDepthsInitialized;
-
-    CARD32 FullPlanemasks[32];
-
-    Bool (*Composite) (CARD8 op,
-                       PicturePtr pSrc,
-                       PicturePtr pMask,
-                       PicturePtr pDst,
-                       INT16 xSrc,
-                       INT16 ySrc,
-                       INT16 xMask,
-                       INT16 yMask,
-                       INT16 xDst, INT16 yDst, CARD16 width, CARD16 height);
-
-    Bool (*Glyphs) (CARD8 op,
-                    PicturePtr pSrc,
-                    PicturePtr pDst,
-                    PictFormatPtr maskFormat,
-                    INT16 xSrc,
-                    INT16 ySrc,
-                    int nlist, GlyphListPtr list, GlyphPtr * glyphs);
-
-    /* The old SetupForCPUToScreenAlphaTexture function is no longer used because
-     * it doesn't pass in enough information to write a conforming
-     * implementation.  See SetupForCPUToScreenAlphaTexture2.
-     */
-    Bool (*SetupForCPUToScreenAlphaTexture) (ScrnInfoPtr pScrn,
-                                             int op,
-                                             CARD16 red,
-                                             CARD16 green,
-                                             CARD16 blue,
-                                             CARD16 alpha,
-                                             int alphaType,
-                                             CARD8 *alphaPtr,
-                                             int alphaPitch,
-                                             int width, int height, int flags);
-    void (*SubsequentCPUToScreenAlphaTexture) (ScrnInfoPtr pScrn,
-                                               int dstx,
-                                               int dsty,
-                                               int srcx,
-                                               int srcy, int width, int height);
-    int CPUToScreenAlphaTextureFlags;
-    CARD32 *CPUToScreenAlphaTextureFormats;
-
-    /* The old SetupForCPUToScreenTexture function is no longer used because
-     * it doesn't pass in enough information to write a conforming
-     * implementation.  See SetupForCPUToScreenTexture2.
-     */
-    Bool (*SetupForCPUToScreenTexture) (ScrnInfoPtr pScrn,
-                                        int op,
-                                        int texType,
-                                        CARD8 *texPtr,
-                                        int texPitch,
-                                        int width, int height, int flags);
-    void (*SubsequentCPUToScreenTexture) (ScrnInfoPtr pScrn,
-                                          int dstx,
-                                          int dsty,
-                                          int srcx,
-                                          int srcy, int width, int height);
-    int CPUToScreenTextureFlags;
-    CARD32 *CPUToScreenTextureFormats;
-
-    /* these were added for 4.3.0 */
-    BoxRec SolidLineLimits;
-    BoxRec DashedLineLimits;
-
-    /* These were added for X.Org 6.8.0 */
-    Bool (*SetupForCPUToScreenAlphaTexture2) (ScrnInfoPtr pScrn,
-                                              int op,
-                                              CARD16 red,
-                                              CARD16 green,
-                                              CARD16 blue,
-                                              CARD16 alpha,
-                                              CARD32 maskFormat,
-                                              CARD32 dstFormat,
-                                              CARD8 *alphaPtr,
-                                              int alphaPitch,
-                                              int width, int height, int flags);
-    CARD32 *CPUToScreenAlphaTextureDstFormats;
-
-    Bool (*SetupForCPUToScreenTexture2) (ScrnInfoPtr pScrn,
-                                         int op,
-                                         CARD32 srcFormat,
-                                         CARD32 dstFormat,
-                                         CARD8 *texPtr,
-                                         int texPitch,
-                                         int width, int height, int flags);
-    CARD32 *CPUToScreenTextureDstFormats;
-} XAAInfoRec, *XAAInfoRecPtr;
-
-#define SET_SYNC_FLAG(infoRec)	(infoRec)->NeedToSync = TRUE
-
-extern _X_EXPORT Bool
- XAAInit(ScreenPtr pScreen, XAAInfoRecPtr infoRec);
-
-extern _X_EXPORT XAAInfoRecPtr XAACreateInfoRec(void);
-
-extern _X_EXPORT void
- XAADestroyInfoRec(XAAInfoRecPtr infoRec);
-
-typedef void (*DepthChangeFuncPtr) (ScrnInfoPtr pScrn, int depth);
-
-extern _X_EXPORT Bool
- XAAInitDualFramebufferOverlay(ScreenPtr pScreen, DepthChangeFuncPtr callback);
-
-#endif                          /* _XAA_H */
diff --git a/hw/xfree86/xaa/xaaBitBlt.c b/hw/xfree86/xaa/xaaBitBlt.c
deleted file mode 100644
index c1595c4..0000000
--- a/hw/xfree86/xaa/xaaBitBlt.c
+++ /dev/null
@@ -1,229 +0,0 @@
-
-/* 
-   This is a lighter version of cfbBitBlt.  We calculate the boxes
-   when accelerating pixmap->screen and screen->screen copies. 
-   We also pass the GC to the doBitBlt function so that it has access
-   to the fg and bg so CopyPlane can use this. 
-*/
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include "misc.h"
-#include "xf86.h"
-#include "xf86_OSproc.h"
-
-#include <X11/X.h>
-#include "mi.h"
-#include "pixmapstr.h"
-#include "gcstruct.h"
-#include "windowstr.h"
-#include "xaalocal.h"
-
-RegionPtr
-XAABitBlt(DrawablePtr pSrcDrawable,
-          DrawablePtr pDstDrawable,
-          GC * pGC,
-          int srcx, int srcy,
-          int width, int height,
-          int dstx, int dsty,
-          void (*doBitBlt) (DrawablePtr, DrawablePtr, GCPtr, RegionPtr,
-                            DDXPointPtr), unsigned long bitPlane)
-{
-
-    RegionPtr prgnSrcClip = NULL;       /* may be a new region, or just a copy */
-    RegionPtr prgnExposed;
-    Bool freeSrcClip = FALSE;
-    RegionRec rgnDst;
-    DDXPointPtr pptSrc, ppt;
-    DDXPointRec origDest;
-    BoxPtr pbox;
-    BoxRec fastBox;
-    int i, dx, dy, numRects;
-    xRectangle origSource;
-    int fastClip = 0;           /* for fast clipping with pixmap source */
-    int fastExpose = 0;         /* for fast exposures with pixmap source */
-
-    origSource.x = srcx;
-    origSource.y = srcy;
-    origSource.width = width;
-    origSource.height = height;
-    origDest.x = dstx;
-    origDest.y = dsty;
-
-    if (pSrcDrawable->pScreen->SourceValidate) {
-        (*pSrcDrawable->pScreen->SourceValidate) (pSrcDrawable, srcx, srcy,
-                                                  width, height,
-                                                  pGC->subWindowMode);
-    }
-
-    srcx += pSrcDrawable->x;
-    srcy += pSrcDrawable->y;
-
-    /* clip the source */
-    if (pSrcDrawable->type == DRAWABLE_PIXMAP) {
-        if ((pSrcDrawable == pDstDrawable) && (pGC->clientClipType == CT_NONE))
-            prgnSrcClip = pGC->pCompositeClip;
-        else
-            fastClip = 1;
-    }
-    else {                      /* Window */
-        if (pGC->subWindowMode == IncludeInferiors) {
-            if (!((WindowPtr) pSrcDrawable)->parent) {
-                /*
-                 * special case bitblt from root window in
-                 * IncludeInferiors mode; just like from a pixmap
-                 */
-                fastClip = 1;
-            }
-            else if ((pSrcDrawable == pDstDrawable) &&
-                     (pGC->clientClipType == CT_NONE)) {
-                prgnSrcClip = pGC->pCompositeClip;
-            }
-            else {
-                prgnSrcClip = NotClippedByChildren((WindowPtr) pSrcDrawable);
-                freeSrcClip = TRUE;
-            }
-        }
-        else {
-            prgnSrcClip = &((WindowPtr) pSrcDrawable)->clipList;
-        }
-    }
-
-    fastBox.x1 = srcx;
-    fastBox.y1 = srcy;
-    fastBox.x2 = srcx + width;
-    fastBox.y2 = srcy + height;
-
-    /* Don't create a source region if we are doing a fast clip */
-    if (fastClip) {
-        fastExpose = 1;
-        /*
-         * clip the source; if regions extend beyond the source size,
-         * make sure exposure events get sent
-         */
-        if (fastBox.x1 < pSrcDrawable->x) {
-            fastBox.x1 = pSrcDrawable->x;
-            fastExpose = 0;
-        }
-        if (fastBox.y1 < pSrcDrawable->y) {
-            fastBox.y1 = pSrcDrawable->y;
-            fastExpose = 0;
-        }
-        if (fastBox.x2 > pSrcDrawable->x + (int) pSrcDrawable->width) {
-            fastBox.x2 = pSrcDrawable->x + (int) pSrcDrawable->width;
-            fastExpose = 0;
-        }
-        if (fastBox.y2 > pSrcDrawable->y + (int) pSrcDrawable->height) {
-            fastBox.y2 = pSrcDrawable->y + (int) pSrcDrawable->height;
-            fastExpose = 0;
-        }
-    }
-    else {
-        RegionInit(&rgnDst, &fastBox, 1);
-        RegionIntersect(&rgnDst, &rgnDst, prgnSrcClip);
-    }
-
-    dstx += pDstDrawable->x;
-    dsty += pDstDrawable->y;
-
-    if (pDstDrawable->type == DRAWABLE_WINDOW) {
-        if (!((WindowPtr) pDstDrawable)->realized) {
-            if (!fastClip)
-                RegionUninit(&rgnDst);
-            if (freeSrcClip)
-                RegionDestroy(prgnSrcClip);
-            return NULL;
-        }
-    }
-
-    dx = srcx - dstx;
-    dy = srcy - dsty;
-
-    /* Translate and clip the dst to the destination composite clip */
-    if (fastClip) {
-        RegionPtr cclip;
-
-        /* Translate the region directly */
-        fastBox.x1 -= dx;
-        fastBox.x2 -= dx;
-        fastBox.y1 -= dy;
-        fastBox.y2 -= dy;
-
-        /* If the destination composite clip is one rectangle we can
-           do the clip directly.  Otherwise we have to create a full
-           blown region and call intersect */
-
-        cclip = pGC->pCompositeClip;
-        if (RegionNumRects(cclip) == 1) {
-            BoxPtr pBox = RegionRects(cclip);
-
-            if (fastBox.x1 < pBox->x1)
-                fastBox.x1 = pBox->x1;
-            if (fastBox.x2 > pBox->x2)
-                fastBox.x2 = pBox->x2;
-            if (fastBox.y1 < pBox->y1)
-                fastBox.y1 = pBox->y1;
-            if (fastBox.y2 > pBox->y2)
-                fastBox.y2 = pBox->y2;
-
-            /* Check to see if the region is empty */
-            if (fastBox.x1 >= fastBox.x2 || fastBox.y1 >= fastBox.y2) {
-                RegionNull(&rgnDst);
-            }
-            else {
-                RegionInit(&rgnDst, &fastBox, 1);
-            }
-        }
-        else {
-            /* We must turn off fastClip now, since we must create
-               a full blown region.  It is intersected with the
-               composite clip below. */
-            fastClip = 0;
-            RegionInit(&rgnDst, &fastBox, 1);
-        }
-    }
-    else {
-        RegionTranslate(&rgnDst, -dx, -dy);
-    }
-
-    if (!fastClip) {
-        RegionIntersect(&rgnDst, &rgnDst, pGC->pCompositeClip);
-    }
-
-    /* Do bit blitting */
-    numRects = RegionNumRects(&rgnDst);
-    if (numRects && width && height) {
-        if (!(pptSrc = (DDXPointPtr) malloc(numRects * sizeof(DDXPointRec)))) {
-            RegionUninit(&rgnDst);
-            if (freeSrcClip)
-                RegionDestroy(prgnSrcClip);
-            return NULL;
-        }
-        pbox = RegionRects(&rgnDst);
-        ppt = pptSrc;
-        for (i = numRects; --i >= 0; pbox++, ppt++) {
-            ppt->x = pbox->x1 + dx;
-            ppt->y = pbox->y1 + dy;
-        }
-
-        (*doBitBlt) (pSrcDrawable, pDstDrawable, pGC, &rgnDst, pptSrc);
-        free(pptSrc);
-    }
-
-    prgnExposed = NULL;
-    if (pGC->fExpose) {
-        /* Pixmap sources generate a NoExposed (we return NULL to do this) */
-        if (!fastExpose)
-            prgnExposed = miHandleExposures(pSrcDrawable, pDstDrawable, pGC,
-                                            origSource.x, origSource.y,
-                                            (int) origSource.width,
-                                            (int) origSource.height,
-                                            origDest.x, origDest.y, bitPlane);
-    }
-    RegionUninit(&rgnDst);
-    if (freeSrcClip)
-        RegionDestroy(prgnSrcClip);
-    return prgnExposed;
-}
diff --git a/hw/xfree86/xaa/xaaBitOrder.c b/hw/xfree86/xaa/xaaBitOrder.c
deleted file mode 100644
index 3d9b980..0000000
--- a/hw/xfree86/xaa/xaaBitOrder.c
+++ /dev/null
@@ -1,16 +0,0 @@
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include <X11/Xmd.h>
-#include "xaalocal.h"
-
-CARD32
-XAAReverseBitOrder(CARD32 v)
-{
-    return (((0x01010101 & v) << 7) | ((0x02020202 & v) << 5) |
-            ((0x04040404 & v) << 3) | ((0x08080808 & v) << 1) |
-            ((0x10101010 & v) >> 1) | ((0x20202020 & v) >> 3) |
-            ((0x40404040 & v) >> 5) | ((0x80808080 & v) >> 7));
-}
diff --git a/hw/xfree86/xaa/xaaBitmap.c b/hw/xfree86/xaa/xaaBitmap.c
deleted file mode 100644
index 45d5a09..0000000
--- a/hw/xfree86/xaa/xaaBitmap.c
+++ /dev/null
@@ -1,477 +0,0 @@
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include "xaa.h"
-#include "xaalocal.h"
-#include "xaacexp.h"
-#include "xf86.h"
-
-/********** byte swapping ***************/
-
-#ifdef FIXEDBASE
-#define DEST(i)	*dest
-#define RETURN(i)	return(dest)
-#else
-#define DEST(i)	dest[i]
-#define RETURN(i)	return(dest + i)
-#endif
-
-#ifdef MSBFIRST
-#define SOURCE(i)	SWAP_BITS_IN_BYTES(src[i])
-#else
-#define SOURCE(i)	src[i]
-#endif
-
-typedef CARD32 *(*BitmapScanlineProcPtr) (CARD32 *, CARD32 *, int, int);
-
-#ifdef TRIPLE_BITS
-static CARD32 *
-BitmapScanline(CARD32 *src, CARD32 *base, int count, int skipleft)
-{
-    CARD32 bits;
-
-    while (count >= 3) {
-        bits = *src;
-        WRITE_BITS3(bits);
-        src++;
-        count -= 3;
-    }
-    if (count == 2) {
-        bits = *src;
-        WRITE_BITS2(bits);
-    }
-    else if (count == 1) {
-        bits = *src;
-        WRITE_BITS1(bits);
-    }
-
-    return base;
-}
-
-static CARD32 *
-BitmapScanline_Inverted(CARD32 *src, CARD32 *base, int count, int skipleft)
-{
-    CARD32 bits;
-
-    while (count >= 3) {
-        bits = ~(*src);
-        WRITE_BITS3(bits);
-        src++;
-        count -= 3;
-    }
-    if (count == 2) {
-        bits = ~(*src);
-        WRITE_BITS2(bits);
-    }
-    else if (count == 1) {
-        bits = ~(*src);
-        WRITE_BITS1(bits);
-    }
-
-    return base;
-}
-
-static CARD32 *
-BitmapScanline_Shifted(CARD32 *src, CARD32 *base, int count, int skipleft)
-{
-    CARD32 bits;
-
-    while (count >= 3) {
-        bits = SHIFT_R(*src, skipleft) | SHIFT_L(*(src + 1), (32 - skipleft));
-        WRITE_BITS3(bits);
-        src++;
-        count -= 3;
-    }
-    if (count == 2) {
-        bits = SHIFT_R(*src, skipleft) | SHIFT_L(*(src + 1), (32 - skipleft));
-        WRITE_BITS2(bits);
-    }
-    else if (count == 1) {
-        bits = SHIFT_R(*src, skipleft) | SHIFT_L(*(src + 1), (32 - skipleft));
-        WRITE_BITS1(bits);
-    }
-
-    return base;
-}
-
-static CARD32 *
-BitmapScanline_Shifted_Inverted(CARD32 *src, CARD32 *base,
-                                int count, int skipleft)
-{
-    CARD32 bits;
-
-    while (count >= 3) {
-        bits =
-            ~(SHIFT_R(*src, skipleft) | SHIFT_L(*(src + 1), (32 - skipleft)));
-        WRITE_BITS3(bits);
-        src++;
-        count -= 3;
-    }
-    if (count == 2) {
-        bits =
-            ~(SHIFT_R(*src, skipleft) | SHIFT_L(*(src + 1), (32 - skipleft)));
-        WRITE_BITS2(bits);
-    }
-    else if (count == 1) {
-        bits =
-            ~(SHIFT_R(*src, skipleft) | SHIFT_L(*(src + 1), (32 - skipleft)));
-        WRITE_BITS1(bits);
-    }
-
-    return base;
-}
-
-#define BitmapScanline_Shifted_Careful BitmapScanline_Shifted
-#define BitmapScanline_Shifted_Inverted_Careful BitmapScanline_Shifted_Inverted
-
-#else
-static CARD32 *
-BitmapScanline(CARD32 *src, CARD32 *dest, int count, int skipleft)
-{
-    while (count >= 4) {
-        DEST(0) = SOURCE(0);
-        DEST(1) = SOURCE(1);
-        DEST(2) = SOURCE(2);
-        DEST(3) = SOURCE(3);
-        count -= 4;
-        src += 4;
-#ifndef FIXEDBASE
-        dest += 4;
-#endif
-    }
-
-    if (!count)
-        return dest;
-    DEST(0) = SOURCE(0);
-    if (count == 1)
-        RETURN(1);
-    DEST(1) = SOURCE(1);
-    if (count == 2)
-        RETURN(2);
-    DEST(2) = SOURCE(2);
-    RETURN(3);
-}
-
-static CARD32 *
-BitmapScanline_Inverted(CARD32 *src, CARD32 *dest, int count, int skipleft)
-{
-    while (count >= 4) {
-        DEST(0) = ~SOURCE(0);
-        DEST(1) = ~SOURCE(1);
-        DEST(2) = ~SOURCE(2);
-        DEST(3) = ~SOURCE(3);
-        count -= 4;
-        src += 4;
-#ifndef FIXEDBASE
-        dest += 4;
-#endif
-    }
-
-    if (!count)
-        return dest;
-    DEST(0) = ~SOURCE(0);
-    if (count == 1)
-        RETURN(1);
-    DEST(1) = ~SOURCE(1);
-    if (count == 2)
-        RETURN(2);
-    DEST(2) = ~SOURCE(2);
-    RETURN(3);
-}
-
-static CARD32 *
-BitmapScanline_Shifted(CARD32 *bits, CARD32 *base, int count, int skipleft)
-{
-    while (count--) {
-        register CARD32 tmp = SHIFT_R(*bits, skipleft) |
-            SHIFT_L(*(bits + 1), (32 - skipleft));
-        WRITE_BITS(tmp);
-        bits++;
-    }
-    return base;
-}
-
-static CARD32 *
-BitmapScanline_Shifted_Inverted(CARD32 *bits, CARD32 *base,
-                                int count, int skipleft)
-{
-    while (count--) {
-        register CARD32 tmp = ~(SHIFT_R(*bits, skipleft) |
-                                SHIFT_L(*(bits + 1), (32 - skipleft)));
-        WRITE_BITS(tmp);
-        bits++;
-    }
-    return base;
-}
-
-static CARD32 *
-BitmapScanline_Shifted_Careful(CARD32 *bits, CARD32 *base,
-                               int count, int skipleft)
-{
-    register CARD32 tmp;
-
-    while (--count) {
-        tmp = SHIFT_R(*bits, skipleft) | SHIFT_L(*(bits + 1), (32 - skipleft));
-        WRITE_BITS(tmp);
-        bits++;
-    }
-    tmp = SHIFT_R(*bits, skipleft);
-    WRITE_BITS(tmp);
-
-    return base;
-}
-
-static CARD32 *
-BitmapScanline_Shifted_Inverted_Careful(CARD32 *bits, CARD32 *base,
-                                        int count, int skipleft)
-{
-    register CARD32 tmp;
-
-    while (--count) {
-        tmp =
-            ~(SHIFT_R(*bits, skipleft) | SHIFT_L(*(bits + 1), (32 - skipleft)));
-        WRITE_BITS(tmp);
-        bits++;
-    }
-    tmp = ~(SHIFT_R(*bits, skipleft));
-    WRITE_BITS(tmp);
-    return base;
-}
-
-#endif
-
-/*  
-    When the accelerator is TRANSPARENCY_ONLY, WriteBitmap can do
-    the fill in two passes, inverting the source on the second pass.  
-    For GXcopy we can fill the backing rectangle as a solid rect and
-    avoid the invert.
-*/
-
-void
-#ifdef TRIPLE_BITS
- EXPNAME(XAAWriteBitmapColorExpand3) (
-#else
- EXPNAME(XAAWriteBitmapColorExpand) (
-#endif
-                                        ScrnInfoPtr pScrn,
-                                        int x, int y, int w, int H,
-                                        unsigned char *src,
-                                        int srcwidth,
-                                        int skipleft,
-                                        int fg, int bg,
-                                        int rop, unsigned int planemask) {
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    CARD32 *base;
-    unsigned char *srcp = src;
-    int SecondPassColor = -1;
-    int shift = 0, dwords;
-    BitmapScanlineProcPtr firstFunc;
-    BitmapScanlineProcPtr secondFunc;
-    int flag;
-    int h = H;
-
-#ifdef TRIPLE_BITS
-    if ((bg != -1) &&
-        ((infoRec->CPUToScreenColorExpandFillFlags & TRANSPARENCY_ONLY) ||
-         ((infoRec->CPUToScreenColorExpandFillFlags & RGB_EQUAL) &&
-          (!CHECK_RGB_EQUAL(bg))))) {
-#else
-    if ((bg != -1) &&
-        (infoRec->CPUToScreenColorExpandFillFlags & TRANSPARENCY_ONLY)) {
-#endif
-        if ((rop == GXcopy) && infoRec->SetupForSolidFill) {
-            (*infoRec->SetupForSolidFill) (pScrn, bg, rop, planemask);
-            (*infoRec->SubsequentSolidFillRect) (pScrn, x, y, w, h);
-        }
-        else
-            SecondPassColor = bg;
-        bg = -1;
-    }
-
-#ifdef TRIPLE_BITS
-    if (skipleft) {
-#else
-    if (skipleft &&
-        (!(infoRec->CPUToScreenColorExpandFillFlags & LEFT_EDGE_CLIPPING) ||
-         (!(infoRec->
-            CPUToScreenColorExpandFillFlags & LEFT_EDGE_CLIPPING_NEGATIVE_X) &&
-          (skipleft > x)))) {
-#endif
-        if ((skipleft + ((w + 31) & ~31)) > ((skipleft + w + 31) & ~31)) {
-            /* don't read past the end */
-            firstFunc = BitmapScanline_Shifted_Careful;
-            secondFunc = BitmapScanline_Shifted_Inverted_Careful;
-        }
-        else {
-            firstFunc = BitmapScanline_Shifted;
-            secondFunc = BitmapScanline_Shifted_Inverted;
-        }
-        shift = skipleft;
-        skipleft = 0;
-    }
-    else {
-        firstFunc = BitmapScanline;
-        secondFunc = BitmapScanline_Inverted;
-        w += skipleft;
-        x -= skipleft;
-    }
-
-#ifdef TRIPLE_BITS
-    dwords = (3 * w + 31) >> 5;
-#else
-    dwords = (w + 31) >> 5;
-#endif
-
- SECOND_PASS:
-
-    flag = (infoRec->CPUToScreenColorExpandFillFlags
-            & CPU_TRANSFER_PAD_QWORD) && ((dwords * h) & 0x01);
-    (*infoRec->SetupForCPUToScreenColorExpandFill) (pScrn, fg, bg, rop,
-                                                    planemask);
-    (*infoRec->SubsequentCPUToScreenColorExpandFill) (pScrn, x, y, w, h,
-                                                      skipleft);
-
-    base = (CARD32 *) infoRec->ColorExpandBase;
-
-#ifndef FIXEDBASE
-    if ((dwords * h) <= infoRec->ColorExpandRange)
-        while (h--) {
-            base = (*firstFunc) ((CARD32 *) srcp, base, dwords, shift);
-            srcp += srcwidth;
-        }
-    else
-#endif
-        while (h--) {
-            (*firstFunc) ((CARD32 *) srcp, base, dwords, shift);
-            srcp += srcwidth;
-        }
-
-    if (flag) {
-        base = (CARD32 *) infoRec->ColorExpandBase;
-        base[0] = 0x00000000;
-    }
-
-    if (SecondPassColor != -1) {
-        h = H;                  /* Reset height */
-        fg = SecondPassColor;
-        SecondPassColor = -1;
-        firstFunc = secondFunc;
-        srcp = src;
-        goto SECOND_PASS;
-    }
-
-    if (infoRec->CPUToScreenColorExpandFillFlags & SYNC_AFTER_COLOR_EXPAND)
-        (*infoRec->Sync) (pScrn);
-    else
-        SET_SYNC_FLAG(infoRec);
-}
-
-#ifndef FIXEDBASE
-
-void
-#ifdef TRIPLE_BITS
- EXPNAME(XAAWriteBitmapScanlineColorExpand3) (
-#else
- EXPNAME(XAAWriteBitmapScanlineColorExpand) (
-#endif
-                                                ScrnInfoPtr pScrn,
-                                                int x, int y, int w, int h,
-                                                unsigned char *src,
-                                                int srcwidth,
-                                                int skipleft,
-                                                int fg, int bg,
-                                                int rop,
-                                                unsigned int planemask) {
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    CARD32 *base;
-    unsigned char *srcp = src;
-    int SecondPassColor = -1;
-    int shift = 0, dwords, bufferNo;
-    BitmapScanlineProcPtr firstFunc;
-    BitmapScanlineProcPtr secondFunc;
-
-#ifdef TRIPLE_BITS
-    if ((bg != -1) &&
-        ((infoRec->ScanlineCPUToScreenColorExpandFillFlags & TRANSPARENCY_ONLY)
-         || ((infoRec->ScanlineCPUToScreenColorExpandFillFlags & RGB_EQUAL) &&
-             (!CHECK_RGB_EQUAL(bg))))) {
-#else
-    if ((bg != -1) &&
-        (infoRec->
-         ScanlineCPUToScreenColorExpandFillFlags & TRANSPARENCY_ONLY)) {
-#endif
-        if ((rop == GXcopy) && infoRec->SetupForSolidFill) {
-            (*infoRec->SetupForSolidFill) (pScrn, bg, rop, planemask);
-            (*infoRec->SubsequentSolidFillRect) (pScrn, x, y, w, h);
-        }
-        else
-            SecondPassColor = bg;
-        bg = -1;
-    }
-
-#ifdef TRIPLE_BITS
-    if (skipleft) {
-#else
-    if (skipleft &&
-        (!(infoRec->ScanlineCPUToScreenColorExpandFillFlags &
-           LEFT_EDGE_CLIPPING) ||
-         (!(infoRec->ScanlineCPUToScreenColorExpandFillFlags &
-            LEFT_EDGE_CLIPPING_NEGATIVE_X) && (skipleft > x)))) {
-#endif
-        if ((skipleft + ((w + 31) & ~31)) > ((skipleft + w + 31) & ~31)) {
-            /* don't read past the end */
-            firstFunc = BitmapScanline_Shifted_Careful;
-            secondFunc = BitmapScanline_Shifted_Inverted_Careful;
-        }
-        else {
-            firstFunc = BitmapScanline_Shifted;
-            secondFunc = BitmapScanline_Shifted_Inverted;
-        }
-        shift = skipleft;
-        skipleft = 0;
-    }
-    else {
-        firstFunc = BitmapScanline;
-        secondFunc = BitmapScanline_Inverted;
-        w += skipleft;
-        x -= skipleft;
-    }
-
-#ifdef TRIPLE_BITS
-    dwords = (3 * w + 31) >> 5;
-#else
-    dwords = (w + 31) >> 5;
-#endif
-
- SECOND_PASS:
-
-    (*infoRec->SetupForScanlineCPUToScreenColorExpandFill) (pScrn, fg, bg, rop,
-                                                            planemask);
-    (*infoRec->SubsequentScanlineCPUToScreenColorExpandFill) (pScrn, x, y, w, h,
-                                                              skipleft);
-
-    bufferNo = 0;
-
-    while (h--) {
-        base = (CARD32 *) infoRec->ScanlineColorExpandBuffers[bufferNo];
-        (*firstFunc) ((CARD32 *) srcp, base, dwords, shift);
-        (*infoRec->SubsequentColorExpandScanline) (pScrn, bufferNo++);
-        srcp += srcwidth;
-        if (bufferNo >= infoRec->NumScanlineColorExpandBuffers)
-            bufferNo = 0;
-    }
-
-    if (SecondPassColor != -1) {
-        fg = SecondPassColor;
-        SecondPassColor = -1;
-        firstFunc = secondFunc;
-        srcp = src;
-        goto SECOND_PASS;
-    }
-
-    SET_SYNC_FLAG(infoRec);
-}
-
-#endif
diff --git a/hw/xfree86/xaa/xaaCpyArea.c b/hw/xfree86/xaa/xaaCpyArea.c
deleted file mode 100644
index 0b11b81..0000000
--- a/hw/xfree86/xaa/xaaCpyArea.c
+++ /dev/null
@@ -1,409 +0,0 @@
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include "misc.h"
-#include "xf86.h"
-#include "xf86_OSproc.h"
-
-#include <X11/X.h>
-#include "scrnintstr.h"
-#include "xf86str.h"
-#include "xaa.h"
-#include "xaalocal.h"
-#include "migc.h"
-#include "gcstruct.h"
-#include "pixmapstr.h"
-
-/*
-  Written mostly by Harm Hanemaayer (H.Hanemaayer at inter.nl.net).
- */
-
-RegionPtr
-XAACopyArea(DrawablePtr pSrcDrawable,
-            DrawablePtr pDstDrawable,
-            GC * pGC,
-            int srcx, int srcy, int width, int height, int dstx, int dsty)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-
-    if (pDstDrawable->type == DRAWABLE_WINDOW) {
-        if ((pSrcDrawable->type == DRAWABLE_WINDOW) ||
-            IS_OFFSCREEN_PIXMAP(pSrcDrawable)) {
-            if (infoRec->ScreenToScreenBitBlt &&
-                CHECK_ROP(pGC, infoRec->ScreenToScreenBitBltFlags) &&
-                CHECK_ROPSRC(pGC, infoRec->ScreenToScreenBitBltFlags) &&
-                CHECK_PLANEMASK(pGC, infoRec->ScreenToScreenBitBltFlags))
-                return (XAABitBlt(pSrcDrawable, pDstDrawable,
-                                  pGC, srcx, srcy, width, height, dstx, dsty,
-                                  XAADoBitBlt, 0L));
-        }
-        else {
-            if (infoRec->WritePixmap &&
-                ((pDstDrawable->bitsPerPixel == pSrcDrawable->bitsPerPixel) ||
-                 ((pDstDrawable->bitsPerPixel == 24) &&
-                  (pSrcDrawable->bitsPerPixel == 32) &&
-                  (infoRec->WritePixmapFlags & CONVERT_32BPP_TO_24BPP))) &&
-                CHECK_ROP(pGC, infoRec->WritePixmapFlags) &&
-                CHECK_ROPSRC(pGC, infoRec->WritePixmapFlags) &&
-                CHECK_PLANEMASK(pGC, infoRec->WritePixmapFlags) &&
-                CHECK_NO_GXCOPY(pGC, infoRec->WritePixmapFlags))
-                return (XAABitBlt(pSrcDrawable, pDstDrawable,
-                                  pGC, srcx, srcy, width, height, dstx, dsty,
-                                  XAADoImageWrite, 0L));
-        }
-    }
-    else if (IS_OFFSCREEN_PIXMAP(pDstDrawable)) {
-        if ((pSrcDrawable->type == DRAWABLE_WINDOW) ||
-            IS_OFFSCREEN_PIXMAP(pSrcDrawable)) {
-            if (infoRec->ScreenToScreenBitBlt &&
-                CHECK_ROP(pGC, infoRec->ScreenToScreenBitBltFlags) &&
-                CHECK_ROPSRC(pGC, infoRec->ScreenToScreenBitBltFlags) &&
-                CHECK_PLANEMASK(pGC, infoRec->ScreenToScreenBitBltFlags))
-                return (XAABitBlt(pSrcDrawable, pDstDrawable,
-                                  pGC, srcx, srcy, width, height, dstx, dsty,
-                                  XAADoBitBlt, 0L));
-        }
-    }
-
-    return (XAAFallbackOps.CopyArea(pSrcDrawable, pDstDrawable, pGC,
-                                    srcx, srcy, width, height, dstx, dsty));
-}
-
-void
-XAADoBitBlt(DrawablePtr pSrc,
-            DrawablePtr pDst, GC * pGC, RegionPtr prgnDst, DDXPointPtr pptSrc)
-{
-    int nbox, careful;
-    BoxPtr pbox, pboxTmp, pboxNext, pboxBase, pboxNew1, pboxNew2;
-    DDXPointPtr pptTmp, pptNew1, pptNew2;
-    int xdir, ydir;
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-
-    /* XXX we have to err on the side of safety when both are windows,
-     * because we don't know if IncludeInferiors is being used.
-     */
-    careful = ((pSrc == pDst) ||
-               ((pSrc->type == DRAWABLE_WINDOW) &&
-                (pDst->type == DRAWABLE_WINDOW)));
-
-    pbox = RegionRects(prgnDst);
-    nbox = RegionNumRects(prgnDst);
-
-    pboxNew1 = NULL;
-    pptNew1 = NULL;
-    pboxNew2 = NULL;
-    pptNew2 = NULL;
-    if (careful && (pptSrc->y < pbox->y1)) {
-        /* walk source botttom to top */
-        ydir = -1;
-
-        if (nbox > 1) {
-            /* keep ordering in each band, reverse order of bands */
-            pboxNew1 = (BoxPtr) malloc(sizeof(BoxRec) * nbox);
-            if (!pboxNew1)
-                return;
-            pptNew1 = (DDXPointPtr) malloc(sizeof(DDXPointRec) * nbox);
-            if (!pptNew1) {
-                free(pboxNew1);
-                return;
-            }
-            pboxBase = pboxNext = pbox + nbox - 1;
-            while (pboxBase >= pbox) {
-                while ((pboxNext >= pbox) && (pboxBase->y1 == pboxNext->y1))
-                    pboxNext--;
-                pboxTmp = pboxNext + 1;
-                pptTmp = pptSrc + (pboxTmp - pbox);
-                while (pboxTmp <= pboxBase) {
-                    *pboxNew1++ = *pboxTmp++;
-                    *pptNew1++ = *pptTmp++;
-                }
-                pboxBase = pboxNext;
-            }
-            pboxNew1 -= nbox;
-            pbox = pboxNew1;
-            pptNew1 -= nbox;
-            pptSrc = pptNew1;
-        }
-    }
-    else {
-        /* walk source top to bottom */
-        ydir = 1;
-    }
-
-    if (careful && (pptSrc->x < pbox->x1)) {
-        /* walk source right to left */
-        xdir = -1;
-
-        if (nbox > 1) {
-            /* reverse order of rects in each band */
-            pboxNew2 = (BoxPtr) malloc(sizeof(BoxRec) * nbox);
-            pptNew2 = (DDXPointPtr) malloc(sizeof(DDXPointRec) * nbox);
-            if (!pboxNew2 || !pptNew2) {
-                free(pptNew2);
-                free(pboxNew2);
-                if (pboxNew1) {
-                    free(pptNew1);
-                    free(pboxNew1);
-                }
-                return;
-            }
-            pboxBase = pboxNext = pbox;
-            while (pboxBase < pbox + nbox) {
-                while ((pboxNext < pbox + nbox) &&
-                       (pboxNext->y1 == pboxBase->y1))
-                    pboxNext++;
-                pboxTmp = pboxNext;
-                pptTmp = pptSrc + (pboxTmp - pbox);
-                while (pboxTmp != pboxBase) {
-                    *pboxNew2++ = *--pboxTmp;
-                    *pptNew2++ = *--pptTmp;
-                }
-                pboxBase = pboxNext;
-            }
-            pboxNew2 -= nbox;
-            pbox = pboxNew2;
-            pptNew2 -= nbox;
-            pptSrc = pptNew2;
-        }
-    }
-    else {
-        /* walk source left to right */
-        xdir = 1;
-    }
-
-    (*infoRec->ScreenToScreenBitBlt) (infoRec->pScrn, nbox, pptSrc, pbox,
-                                      xdir, ydir, pGC->alu, pGC->planemask);
-
-    if (pboxNew2) {
-        free(pptNew2);
-        free(pboxNew2);
-    }
-    if (pboxNew1) {
-        free(pptNew1);
-        free(pboxNew1);
-    }
-
-}
-
-void
-XAADoImageWrite(DrawablePtr pSrc,
-                DrawablePtr pDst,
-                GC * pGC, RegionPtr prgnDst, DDXPointPtr pptSrc)
-{
-    int srcwidth;
-    unsigned char *psrcBase;    /* start of image */
-    unsigned char *srcPntr;     /* index into the image */
-    BoxPtr pbox = RegionRects(prgnDst);
-    int nbox = RegionNumRects(prgnDst);
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    int Bpp = pSrc->bitsPerPixel >> 3;
-
-    psrcBase = (unsigned char *) ((PixmapPtr) pSrc)->devPrivate.ptr;
-    srcwidth = (int) ((PixmapPtr) pSrc)->devKind;
-
-    for (; nbox; pbox++, pptSrc++, nbox--) {
-        srcPntr = psrcBase + (pptSrc->y * srcwidth) + (pptSrc->x * Bpp);
-
-        (*infoRec->WritePixmap) (infoRec->pScrn, pbox->x1, pbox->y1,
-                                 pbox->x2 - pbox->x1, pbox->y2 - pbox->y1,
-                                 srcPntr, srcwidth, pGC->alu, pGC->planemask,
-                                 -1, pSrc->bitsPerPixel, pSrc->depth);
-    }
-}
-
-void
-XAADoImageRead(DrawablePtr pSrc,
-               DrawablePtr pDst,
-               GC * pGC, RegionPtr prgnDst, DDXPointPtr pptSrc)
-{
-    int dstwidth;
-    unsigned char *pdstBase;    /* start of image */
-    unsigned char *dstPntr;     /* index into the image */
-    BoxPtr pbox = RegionRects(prgnDst);
-    int nbox = RegionNumRects(prgnDst);
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    int Bpp = pSrc->bitsPerPixel >> 3;  /* wouldn't get here unless both
-                                           src and dst have same bpp */
-
-    pdstBase = (unsigned char *) ((PixmapPtr) pDst)->devPrivate.ptr;
-    dstwidth = (int) ((PixmapPtr) pDst)->devKind;
-
-    for (; nbox; pbox++, pptSrc++, nbox--) {
-        dstPntr = pdstBase + (pbox->y1 * dstwidth) + (pbox->x1 * Bpp);
-
-        (*infoRec->ReadPixmap) (infoRec->pScrn, pptSrc->x, pptSrc->y,
-                                pbox->x2 - pbox->x1, pbox->y2 - pbox->y1,
-                                dstPntr, dstwidth, pSrc->bitsPerPixel,
-                                pSrc->depth);
-    }
-}
-
-void
-XAAScreenToScreenBitBlt(ScrnInfoPtr pScrn,
-                        int nbox,
-                        DDXPointPtr pptSrc,
-                        BoxPtr pbox,
-                        int xdir, int ydir, int alu, unsigned int planemask)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    int dirsetup;
-
-    if ((!(infoRec->CopyAreaFlags & ONLY_TWO_BITBLT_DIRECTIONS)
-         || (xdir == ydir)) &&
-        (!(infoRec->CopyAreaFlags & ONLY_LEFT_TO_RIGHT_BITBLT)
-         || (xdir == 1))) {
-        (*infoRec->SetupForScreenToScreenCopy) (pScrn,
-                                                xdir, ydir, alu, planemask, -1);
-        for (; nbox; pbox++, pptSrc++, nbox--)
-            (*infoRec->SubsequentScreenToScreenCopy) (pScrn, pptSrc->x,
-                                                      pptSrc->y, pbox->x1,
-                                                      pbox->y1,
-                                                      pbox->x2 - pbox->x1,
-                                                      pbox->y2 - pbox->y1);
-        SET_SYNC_FLAG(infoRec);
-        return;
-    }
-
-    if (infoRec->CopyAreaFlags & ONLY_LEFT_TO_RIGHT_BITBLT) {
-        /*
-         * This is the case of a chip that only supports xdir = 1,
-         * with ydir = 1 or ydir = -1, but we have xdir = -1.
-         */
-        (*infoRec->SetupForScreenToScreenCopy) (pScrn,
-                                                1, ydir, alu, planemask, -1);
-        for (; nbox; pbox++, pptSrc++, nbox--)
-            if (pptSrc->y != pbox->y1 || pptSrc->x >= pbox->x1)
-                /* No problem. Do a xdir = 1 blit instead. */
-                (*infoRec->SubsequentScreenToScreenCopy) (pScrn,
-                                                          pptSrc->x, pptSrc->y,
-                                                          pbox->x1, pbox->y1,
-                                                          pbox->x2 - pbox->x1,
-                                                          pbox->y2 - pbox->y1);
-            else {
-                /*
-                 * This is the difficult case. Needs striping into
-                 * non-overlapping horizontal chunks.
-                 */
-                int stripeWidth, w, fullStripes, extra, i;
-
-                stripeWidth = 16;
-                w = pbox->x2 - pbox->x1;
-                if (pbox->x1 - pptSrc->x < stripeWidth)
-                    stripeWidth = pbox->x1 - pptSrc->x;
-                fullStripes = w / stripeWidth;
-                extra = w % stripeWidth;
-
-                /* First, take care of the little bit on the far right */
-                if (extra)
-                    (*infoRec->SubsequentScreenToScreenCopy) (pScrn,
-                                                              pptSrc->x +
-                                                              fullStripes *
-                                                              stripeWidth,
-                                                              pptSrc->y,
-                                                              pbox->x1 +
-                                                              fullStripes *
-                                                              stripeWidth,
-                                                              pbox->y1, extra,
-                                                              pbox->y2 -
-                                                              pbox->y1);
-
-                /* Now, take care of the rest of the blit */
-                for (i = fullStripes - 1; i >= 0; i--)
-                    (*infoRec->SubsequentScreenToScreenCopy) (pScrn,
-                                                              pptSrc->x +
-                                                              i * stripeWidth,
-                                                              pptSrc->y,
-                                                              pbox->x1 +
-                                                              i * stripeWidth,
-                                                              pbox->y1,
-                                                              stripeWidth,
-                                                              pbox->y2 -
-                                                              pbox->y1);
-            }
-        SET_SYNC_FLAG(infoRec);
-        return;
-    }
-
-    /*
-     * Now the case of a chip that only supports xdir = ydir = 1 or
-     * xdir = ydir = -1, but we have xdir != ydir.
-     */
-    dirsetup = 0;               /* No direction set up yet. */
-    for (; nbox; pbox++, pptSrc++, nbox--) {
-        if (xdir == 1 && pptSrc->y != pbox->y1) {
-            /* Do a xdir = ydir = -1 blit instead. */
-            if (dirsetup != -1) {
-                (*infoRec->SetupForScreenToScreenCopy) (pScrn,
-                                                        -1, -1, alu, planemask,
-                                                        -1);
-                dirsetup = -1;
-            }
-            (*infoRec->SubsequentScreenToScreenCopy) (pScrn, pptSrc->x,
-                                                      pptSrc->y, pbox->x1,
-                                                      pbox->y1,
-                                                      pbox->x2 - pbox->x1,
-                                                      pbox->y2 - pbox->y1);
-        }
-        else if (xdir == -1 && pptSrc->y != pbox->y1) {
-            /* Do a xdir = ydir = 1 blit instead. */
-            if (dirsetup != 1) {
-                (*infoRec->SetupForScreenToScreenCopy) (pScrn,
-                                                        1, 1, alu, planemask,
-                                                        -1);
-                dirsetup = 1;
-            }
-            (*infoRec->SubsequentScreenToScreenCopy) (pScrn, pptSrc->x,
-                                                      pptSrc->y, pbox->x1,
-                                                      pbox->y1,
-                                                      pbox->x2 - pbox->x1,
-                                                      pbox->y2 - pbox->y1);
-        }
-        else if (xdir == 1) {
-            /*
-             * xdir = 1, ydir = -1.
-             * Perform line-by-line xdir = ydir = 1 blits, going up.
-             */
-            int i;
-
-            if (dirsetup != 1) {
-                (*infoRec->SetupForScreenToScreenCopy) (pScrn,
-                                                        1, 1, alu, planemask,
-                                                        -1);
-                dirsetup = 1;
-            }
-            for (i = pbox->y2 - pbox->y1 - 1; i >= 0; i--)
-                (*infoRec->SubsequentScreenToScreenCopy) (pScrn,
-                                                          pptSrc->x,
-                                                          pptSrc->y + i,
-                                                          pbox->x1,
-                                                          pbox->y1 + i,
-                                                          pbox->x2 - pbox->x1,
-                                                          1);
-        }
-        else {
-            /*
-             * xdir = -1, ydir = 1.
-             * Perform line-by-line xdir = ydir = -1 blits, going down.
-             */
-            int i;
-
-            if (dirsetup != -1) {
-                (*infoRec->SetupForScreenToScreenCopy) (pScrn,
-                                                        -1, -1, alu, planemask,
-                                                        -1);
-                dirsetup = -1;
-            }
-            for (i = 0; i < pbox->y2 - pbox->y1; i++)
-                (*infoRec->SubsequentScreenToScreenCopy) (pScrn,
-                                                          pptSrc->x,
-                                                          pptSrc->y + i,
-                                                          pbox->x1,
-                                                          pbox->y1 + i,
-                                                          pbox->x2 - pbox->x1,
-                                                          1);
-        }
-    }                           /* next box */
-    SET_SYNC_FLAG(infoRec);
-}
diff --git a/hw/xfree86/xaa/xaaCpyPlane.c b/hw/xfree86/xaa/xaaCpyPlane.c
deleted file mode 100644
index b9197e4..0000000
--- a/hw/xfree86/xaa/xaaCpyPlane.c
+++ /dev/null
@@ -1,204 +0,0 @@
-
-/*
-   A CopyPlane function that handles bitmap->screen copies and
-   sends anything else to the Fallback.
-
-   Also, a PushPixels for solid fill styles.
-
-   Written by Mark Vojkovich (markv at valinux.com)
-
-*/
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include <string.h>
-
-#include "misc.h"
-#include "xf86.h"
-#include "xf86_OSproc.h"
-#include "servermd.h"
-
-#include <X11/X.h>
-#include "scrnintstr.h"
-#include "mi.h"
-#include "pixmapstr.h"
-#include "xf86str.h"
-#include "xaa.h"
-#include "xaalocal.h"
-#include "xaawrap.h"
-
-static void XAACopyPlane1toNColorExpand(DrawablePtr pSrc, DrawablePtr pDst,
-                                        GCPtr pGC, RegionPtr rgnDst,
-                                        DDXPointPtr pptSrc);
-static void XAACopyPlaneNtoNColorExpand(DrawablePtr pSrc, DrawablePtr pDst,
-                                        GCPtr pGC, RegionPtr rgnDst,
-                                        DDXPointPtr pptSrc);
-
-static unsigned long TmpBitPlane;
-
-RegionPtr
-XAACopyPlaneColorExpansion(DrawablePtr pSrc,
-                           DrawablePtr pDst,
-                           GCPtr pGC,
-                           int srcx, int srcy,
-                           int width, int height,
-                           int dstx, int dsty, unsigned long bitPlane)
-{
-    if ((pSrc->type == DRAWABLE_PIXMAP) && !XAA_DEPTH_BUG(pGC)) {
-        if (pSrc->bitsPerPixel == 1) {
-            return (XAABitBlt(pSrc, pDst, pGC, srcx, srcy,
-                              width, height, dstx, dsty,
-                              XAACopyPlane1toNColorExpand, bitPlane));
-        }
-        else if (bitPlane < (1 << pDst->depth)) {
-            TmpBitPlane = bitPlane;
-            return (XAABitBlt(pSrc, pDst, pGC, srcx, srcy,
-                              width, height, dstx, dsty,
-                              XAACopyPlaneNtoNColorExpand, bitPlane));
-        }
-    }
-
-    return (XAAFallbackOps.CopyPlane(pSrc, pDst, pGC, srcx, srcy,
-                                     width, height, dstx, dsty, bitPlane));
-}
-
-static void
-XAACopyPlane1toNColorExpand(DrawablePtr pSrc,
-                            DrawablePtr pDst,
-                            GCPtr pGC, RegionPtr rgnDst, DDXPointPtr pptSrc)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    BoxPtr pbox = RegionRects(rgnDst);
-    int numrects = RegionNumRects(rgnDst);
-    unsigned char *src = ((PixmapPtr) pSrc)->devPrivate.ptr;
-    int srcwidth = ((PixmapPtr) pSrc)->devKind;
-
-    while (numrects--) {
-        (*infoRec->WriteBitmap) (infoRec->pScrn, pbox->x1, pbox->y1,
-                                 pbox->x2 - pbox->x1, pbox->y2 - pbox->y1,
-                                 src + (srcwidth * pptSrc->y) +
-                                 ((pptSrc->x >> 5) << 2), srcwidth,
-                                 pptSrc->x & 31, pGC->fgPixel, pGC->bgPixel,
-                                 pGC->alu, pGC->planemask);
-        pbox++;
-        pptSrc++;
-    }
-}
-
-static void
-XAACopyPlaneNtoNColorExpand(DrawablePtr pSrc,
-                            DrawablePtr pDst,
-                            GCPtr pGC, RegionPtr rgnDst, DDXPointPtr pptSrc)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    BoxPtr pbox = RegionRects(rgnDst);
-    int numrects = RegionNumRects(rgnDst);
-    unsigned char *src = ((PixmapPtr) pSrc)->devPrivate.ptr;
-    unsigned char *data, *srcPtr, *dataPtr;
-    int srcwidth = ((PixmapPtr) pSrc)->devKind;
-    int pitch, width, height, h, i, index, offset;
-    int Bpp = pSrc->bitsPerPixel >> 3;
-    unsigned long mask = TmpBitPlane;
-
-    if (TmpBitPlane < (1 << 8)) {
-        offset = 0;
-    }
-    else if (TmpBitPlane < (1 << 16)) {
-        offset = 1;
-        mask >>= 8;
-    }
-    else if (TmpBitPlane < (1 << 24)) {
-        offset = 2;
-        mask >>= 16;
-    }
-    else {
-        offset = 3;
-        mask >>= 24;
-    }
-
-    if (IS_OFFSCREEN_PIXMAP(pSrc))
-        SYNC_CHECK(pSrc);
-
-    while (numrects--) {
-        width = pbox->x2 - pbox->x1;
-        h = height = pbox->y2 - pbox->y1;
-        pitch = BitmapBytePad(width);
-
-        if (!(data = calloc(height, pitch)))
-            goto ALLOC_FAILED;
-
-        dataPtr = data;
-        srcPtr = ((pptSrc->y) * srcwidth) + src + ((pptSrc->x) * Bpp) + offset;
-
-        while (h--) {
-            for (i = index = 0; i < width; i++, index += Bpp) {
-                if (mask & srcPtr[index])
-                    dataPtr[i >> 3] |= (1 << (i & 7));
-            }
-            dataPtr += pitch;
-            srcPtr += srcwidth;
-        }
-
-        (*infoRec->WriteBitmap) (infoRec->pScrn,
-                                 pbox->x1, pbox->y1, width, height, data, pitch,
-                                 0, pGC->fgPixel, pGC->bgPixel, pGC->alu,
-                                 pGC->planemask);
-
-        free(data);
-
- ALLOC_FAILED:
-
-        pbox++;
-        pptSrc++;
-    }
-}
-
-void
-XAAPushPixelsSolidColorExpansion(GCPtr pGC,
-                                 PixmapPtr pBitMap,
-                                 DrawablePtr pDraw,
-                                 int dx, int dy, int xOrg, int yOrg)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    int MaxBoxes = RegionNumRects(pGC->pCompositeClip);
-    BoxPtr pbox, pClipBoxes;
-    int nboxes, srcx, srcy;
-    xRectangle TheRect;
-    unsigned char *src = pBitMap->devPrivate.ptr;
-    int srcwidth = pBitMap->devKind;
-
-    if (!RegionNumRects(pGC->pCompositeClip))
-        return;
-
-    TheRect.x = xOrg;
-    TheRect.y = yOrg;
-    TheRect.width = dx;
-    TheRect.height = dy;
-
-    if (MaxBoxes > (infoRec->PreAllocSize / sizeof(BoxRec))) {
-        pClipBoxes = malloc(MaxBoxes * sizeof(BoxRec));
-        if (!pClipBoxes)
-            return;
-    }
-    else
-        pClipBoxes = (BoxPtr) infoRec->PreAllocMem;
-
-    nboxes = XAAGetRectClipBoxes(pGC, pClipBoxes, 1, &TheRect);
-    pbox = pClipBoxes;
-
-    while (nboxes--) {
-        srcx = pbox->x1 - xOrg;
-        srcy = pbox->y1 - yOrg;
-        (*infoRec->WriteBitmap) (infoRec->pScrn, pbox->x1, pbox->y1,
-                                 pbox->x2 - pbox->x1, pbox->y2 - pbox->y1,
-                                 src + (srcwidth * srcy) + ((srcx >> 5) << 2),
-                                 srcwidth, srcx & 31,
-                                 pGC->fgPixel, -1, pGC->alu, pGC->planemask);
-        pbox++;
-    }
-
-    if (pClipBoxes != (BoxPtr) infoRec->PreAllocMem)
-        free(pClipBoxes);
-}
diff --git a/hw/xfree86/xaa/xaaCpyWin.c b/hw/xfree86/xaa/xaaCpyWin.c
deleted file mode 100644
index e851f4a..0000000
--- a/hw/xfree86/xaa/xaaCpyWin.c
+++ /dev/null
@@ -1,78 +0,0 @@
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include "misc.h"
-#include "xf86.h"
-#include "xf86_OSproc.h"
-
-#include <X11/X.h>
-#include "scrnintstr.h"
-#include "windowstr.h"
-#include "xf86str.h"
-#include "xaa.h"
-#include "xaalocal.h"
-#include "gcstruct.h"
-#include "pixmapstr.h"
-#include "xaawrap.h"
-
-/*
-    Written by Harm Hanemaayer (H.Hanemaayer at inter.nl.net).
-*/
-
-void
-XAACopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
-{
-    DDXPointPtr pptSrc, ppt;
-    RegionRec rgnDst;
-    BoxPtr pbox;
-    int dx, dy, nbox;
-    WindowPtr pwinRoot;
-    ScreenPtr pScreen = pWin->drawable.pScreen;
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_DRAWABLE((&pWin->drawable));
-
-    if (!infoRec->pScrn->vtSema || !infoRec->ScreenToScreenBitBlt) {
-        XAA_SCREEN_PROLOGUE(pScreen, CopyWindow);
-        if (infoRec->pScrn->vtSema && infoRec->NeedToSync) {
-            (*infoRec->Sync) (infoRec->pScrn);
-            infoRec->NeedToSync = FALSE;
-        }
-        (*pScreen->CopyWindow) (pWin, ptOldOrg, prgnSrc);
-        XAA_SCREEN_EPILOGUE(pScreen, CopyWindow, XAACopyWindow);
-        return;
-    }
-
-    pwinRoot = pScreen->root;
-
-    RegionNull(&rgnDst);
-
-    dx = ptOldOrg.x - pWin->drawable.x;
-    dy = ptOldOrg.y - pWin->drawable.y;
-    RegionTranslate(prgnSrc, -dx, -dy);
-    RegionIntersect(&rgnDst, &pWin->borderClip, prgnSrc);
-
-    pbox = RegionRects(&rgnDst);
-    nbox = RegionNumRects(&rgnDst);
-    if (!nbox || !(pptSrc = (DDXPointPtr) malloc(nbox * sizeof(DDXPointRec)))) {
-        RegionUninit(&rgnDst);
-        return;
-    }
-    ppt = pptSrc;
-
-    while (nbox--) {
-        ppt->x = pbox->x1 + dx;
-        ppt->y = pbox->y1 + dy;
-        ppt++;
-        pbox++;
-    }
-
-    infoRec->ScratchGC.planemask = ~0L;
-    infoRec->ScratchGC.alu = GXcopy;
-
-    XAADoBitBlt((DrawablePtr) pwinRoot, (DrawablePtr) pwinRoot,
-                &(infoRec->ScratchGC), &rgnDst, pptSrc);
-
-    free(pptSrc);
-    RegionUninit(&rgnDst);
-}
diff --git a/hw/xfree86/xaa/xaaDashLine.c b/hw/xfree86/xaa/xaaDashLine.c
deleted file mode 100644
index c7e52cd..0000000
--- a/hw/xfree86/xaa/xaaDashLine.c
+++ /dev/null
@@ -1,353 +0,0 @@
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include <stdlib.h>
-
-#include <X11/X.h>
-#include "misc.h"
-#include "xf86.h"
-#include "xf86_OSproc.h"
-
-#include "scrnintstr.h"
-#include "pixmapstr.h"
-#include "miline.h"
-#include "xf86str.h"
-#include "xaa.h"
-#include "xaalocal.h"
-
-void
-#ifdef POLYSEGMENT
- XAAPolySegmentDashed(DrawablePtr pDrawable,
-                      GCPtr pGC, int nseg, xSegment * pSeg
-#else
-XAAPolyLinesDashed(DrawablePtr pDrawable, GCPtr pGC, int mode,  /* Origin or Previous */
-                   int npt,     /* number of points */
-                   DDXPointPtr pptInit
-#endif
-    )
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    XAAGCPtr pGCPriv = (XAAGCPtr) dixLookupPrivate(&pGC->devPrivates,
-                                                   XAAGetGCKey());
-    BoxPtr pboxInit = RegionRects(pGC->pCompositeClip);
-    int nboxInit = RegionNumRects(pGC->pCompositeClip);
-    unsigned int bias = miGetZeroLineBias(pDrawable->pScreen);
-    int xorg = pDrawable->x;
-    int yorg = pDrawable->y;
-    int nbox;
-    BoxPtr pbox;
-
-#ifndef POLYSEGMENT
-    DDXPointPtr ppt;
-#endif
-    unsigned int oc1, oc2;
-    int dmin, dmaj, e, octant;
-    int x1, x2, y1, y2, tmp, len, offset;
-    int PatternLength, PatternOffset;
-
-    if (!nboxInit)
-        return;
-
-    if (infoRec->DashedLineFlags & LINE_LIMIT_COORDS) {
-        int minValX = infoRec->DashedLineLimits.x1;
-        int maxValX = infoRec->DashedLineLimits.x2;
-        int minValY = infoRec->DashedLineLimits.y1;
-        int maxValY = infoRec->DashedLineLimits.y2;
-
-#ifdef POLYSEGMENT
-        int n = nseg;
-        xSegment *s = pSeg;
-
-        while (n--)
-#else
-        int n = npt;
-        int xorgtmp = xorg;
-        int yorgtmp = yorg;
-
-        ppt = pptInit;
-        x2 = ppt->x + xorgtmp;
-        y2 = ppt->y + yorgtmp;
-        while (--n)
-#endif
-        {
-#ifdef POLYSEGMENT
-            x1 = s->x1 + xorg;
-            y1 = s->y1 + yorg;
-            x2 = s->x2 + xorg;
-            y2 = s->y2 + yorg;
-            s++;
-#else
-            x1 = x2;
-            y1 = y2;
-            ++ppt;
-            if (mode == CoordModePrevious) {
-                xorgtmp = x1;
-                yorgtmp = y1;
-            }
-            x2 = ppt->x + xorgtmp;
-            y2 = ppt->y + yorgtmp;
-#endif
-            if (x1 > maxValX || x1 < minValX ||
-                x2 > maxValX || x2 < minValX ||
-                y1 > maxValY || y1 < minValY || y2 > maxValY || y2 < minValY) {
-#ifdef POLYSEGMENT
-                XAAFallbackOps.PolySegment(pDrawable, pGC, nseg, pSeg);
-#else
-                XAAFallbackOps.Polylines(pDrawable, pGC, mode, npt, pptInit);
-#endif
-                return;
-            }
-        }
-    }
-
-    PatternLength = pGCPriv->DashLength;
-    PatternOffset = pGC->dashOffset % PatternLength;
-
-    (*infoRec->SetupForDashedLine) (infoRec->pScrn, pGC->fgPixel,
-                                    (pGC->lineStyle ==
-                                     LineDoubleDash) ? pGC->bgPixel : -1,
-                                    pGC->alu, pGC->planemask, PatternLength,
-                                    pGCPriv->DashPattern);
-
-#ifdef POLYSEGMENT
-    while (nseg--)
-#else
-    ppt = pptInit;
-    x2 = ppt->x + xorg;
-    y2 = ppt->y + yorg;
-    while (--npt)
-#endif
-    {
-        nbox = nboxInit;
-        pbox = pboxInit;
-
-#ifdef POLYSEGMENT
-        x1 = pSeg->x1 + xorg;
-        y1 = pSeg->y1 + yorg;
-        x2 = pSeg->x2 + xorg;
-        y2 = pSeg->y2 + yorg;
-        pSeg++;
-#else
-        x1 = x2;
-        y1 = y2;
-        ++ppt;
-        if (mode == CoordModePrevious) {
-            xorg = x1;
-            yorg = y1;
-        }
-        x2 = ppt->x + xorg;
-        y2 = ppt->y + yorg;
-#endif
-
-        if (infoRec->SubsequentDashedBresenhamLine) {
-            if ((dmaj = x2 - x1) < 0) {
-                dmaj = -dmaj;
-                octant = XDECREASING;
-            }
-            else
-                octant = 0;
-
-            if ((dmin = y2 - y1) < 0) {
-                dmin = -dmin;
-                octant |= YDECREASING;
-            }
-
-            if (dmin >= dmaj) {
-                tmp = dmin;
-                dmin = dmaj;
-                dmaj = tmp;
-                octant |= YMAJOR;
-            }
-
-            e = -dmaj - ((bias >> octant) & 1);
-            len = dmaj;
-            dmin <<= 1;
-            dmaj <<= 1;
-        }
-        else {                  /* Muffle compiler */
-            dmin = dmaj = e = octant = len = 0;
-        }
-
-        while (nbox--) {
-            oc1 = oc2 = 0;
-            OUTCODES(oc1, x1, y1, pbox);
-            OUTCODES(oc2, x2, y2, pbox);
-            if (!(oc1 | oc2)) { /* uncliped */
-                if (infoRec->SubsequentDashedTwoPointLine) {
-                    (*infoRec->SubsequentDashedTwoPointLine) (infoRec->pScrn,
-                                                              x1, y1, x2, y2,
-#ifdef POLYSEGMENT
-                                                              (pGC->capStyle !=
-                                                               CapNotLast) ? 0 :
-#endif
-                                                              OMIT_LAST,
-                                                              PatternOffset);
-                }
-                else {
-                    (*infoRec->SubsequentDashedBresenhamLine) (infoRec->pScrn,
-                                                               x1, y1, dmaj,
-                                                               dmin, e,
-#ifdef POLYSEGMENT
-                                                               (pGC->capStyle !=
-                                                                CapNotLast)
-                                                               ? (len + 1) :
-#endif
-                                                               len, octant,
-                                                               PatternOffset);
-                }
-                break;
-            }
-            else if (oc1 & oc2) {       /* completely clipped */
-                pbox++;
-            }
-            else if (infoRec->ClippingFlags & HARDWARE_CLIP_DASHED_LINE) {
-                (*infoRec->SetClippingRectangle) (infoRec->pScrn,
-                                                  pbox->x1, pbox->y1,
-                                                  pbox->x2 - 1, pbox->y2 - 1);
-
-                if (infoRec->SubsequentDashedBresenhamLine) {
-                    (*infoRec->SubsequentDashedBresenhamLine) (infoRec->pScrn,
-                                                               x1, y1, dmaj,
-                                                               dmin, e,
-#ifdef POLYSEGMENT
-                                                               (pGC->capStyle !=
-                                                                CapNotLast)
-                                                               ? (len + 1) :
-#endif
-                                                               len, octant,
-                                                               PatternOffset);
-                }
-                else {
-                    (*infoRec->SubsequentDashedTwoPointLine) (infoRec->pScrn,
-                                                              x1, y1, x2, y2,
-#ifdef POLYSEGMENT
-                                                              (pGC->capStyle !=
-                                                               CapNotLast) ? 0 :
-#endif
-                                                              OMIT_LAST,
-                                                              PatternOffset);
-                }
-                (*infoRec->DisableClipping) (infoRec->pScrn);
-                pbox++;
-            }
-            else {
-                int new_x1 = x1, new_y1 = y1, new_x2 = x2, new_y2 = y2;
-                int clip1 = 0, clip2 = 0;
-                int err, adx, ady;
-
-                if (octant & YMAJOR) {
-                    ady = dmaj >> 1;
-                    adx = dmin >> 1;
-                }
-                else {
-                    ady = dmin >> 1;
-                    adx = dmaj >> 1;
-                }
-
-                if (miZeroClipLine(pbox->x1, pbox->y1,
-                                   pbox->x2 - 1, pbox->y2 - 1,
-                                   &new_x1, &new_y1, &new_x2, &new_y2,
-                                   adx, ady, &clip1, &clip2,
-                                   octant, bias, oc1, oc2) == -1) {
-                    pbox++;
-                    continue;
-                }
-
-                if (octant & YMAJOR)
-                    len = abs(new_y2 - new_y1);
-                else
-                    len = abs(new_x2 - new_x1);
-#ifdef POLYSEGMENT
-                if (clip2 != 0 || pGC->capStyle != CapNotLast)
-                    len++;
-#else
-                len += (clip2 != 0);
-#endif
-                if (len) {
-                    int abserr, clipdx, clipdy;
-
-                    /* unwind bresenham error term to first point */
-                    if (clip1) {
-                        clipdx = abs(new_x1 - x1);
-                        clipdy = abs(new_y1 - y1);
-
-                        if (octant & YMAJOR)
-                            err = e + clipdy * dmin - clipdx * dmaj;
-                        else
-                            err = e + clipdx * dmin - clipdy * dmaj;
-                    }
-                    else
-                        err = e;
-
-#define range infoRec->DashedBresenhamLineErrorTermBits
-                    abserr = abs(err);
-                    while ((abserr & range) || (dmaj & range) || (dmin & range)) {
-                        dmin >>= 1;
-                        dmaj >>= 1;
-                        abserr >>= 1;
-                        err /= 2;
-                    }
-
-                    if (octant & YMAJOR)
-                        offset = abs(new_y1 - y1);
-                    else
-                        offset = abs(new_x1 - x1);
-
-                    offset += PatternOffset;
-                    offset %= PatternLength;
-
-                    (*infoRec->SubsequentDashedBresenhamLine) (infoRec->pScrn,
-                                                               new_x1, new_y1,
-                                                               dmaj, dmin, err,
-                                                               len, octant,
-                                                               offset);
-                }
-                pbox++;
-            }
-        }                       /* while (nbox--) */
-#ifndef POLYSEGMENT
-        len = abs(y2 - y1);
-        tmp = abs(x2 - x1);
-        PatternOffset += (len > tmp) ? len : tmp;
-        PatternOffset %= PatternLength;
-#endif
-    }                           /* while (nline--) */
-
-#ifndef POLYSEGMENT
-    /* paint the last point if the end style isn't CapNotLast.
-       (Assume that a projecting, butt, or round cap that is one
-       pixel wide is the same as the single pixel of the endpoint.)
-     */
-
-    if ((pGC->capStyle != CapNotLast) &&
-        ((ppt->x + xorg != pptInit->x + pDrawable->x) ||
-         (ppt->y + yorg != pptInit->y + pDrawable->y) ||
-         (ppt == pptInit + 1))) {
-        nbox = nboxInit;
-        pbox = pboxInit;
-        while (nbox--) {
-            if ((x2 >= pbox->x1) && (y2 >= pbox->y1) &&
-                (x2 < pbox->x2) && (y2 < pbox->y2)) {
-                if (infoRec->SubsequentDashedTwoPointLine) {
-                    (*infoRec->SubsequentDashedTwoPointLine) (infoRec->pScrn,
-                                                              x2, y2, x2, y2, 0,
-                                                              PatternOffset);
-                }
-                else {
-                    (*infoRec->SubsequentDashedBresenhamLine) (infoRec->pScrn,
-                                                               x2, y2, 2, 0, -1,
-                                                               1, 0,
-                                                               PatternOffset);
-                }
-                break;
-            }
-            else
-                pbox++;
-        }
-    }
-#endif
-
-    SET_SYNC_FLAG(infoRec);
-}
diff --git a/hw/xfree86/xaa/xaaFallback.c b/hw/xfree86/xaa/xaaFallback.c
deleted file mode 100644
index f7604ef..0000000
--- a/hw/xfree86/xaa/xaaFallback.c
+++ /dev/null
@@ -1,281 +0,0 @@
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include "misc.h"
-#include "xf86.h"
-#include "xf86_OSproc.h"
-
-#include <X11/X.h>
-#include "scrnintstr.h"
-#include "xf86str.h"
-#include "xaa.h"
-#include "xaalocal.h"
-#include "gcstruct.h"
-#include "pixmapstr.h"
-#include "xaawrap.h"
-
-static void
-XAAFillSpansFallback(DrawablePtr pDraw,
-                     GC * pGC,
-                     int nInit,
-                     DDXPointPtr pptInit, int *pwidthInit, int fSorted)
-{
-    XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
-    SYNC_CHECK(pGC);
-    (*pGC->ops->FillSpans) (pDraw, pGC, nInit, pptInit, pwidthInit, fSorted);
-    XAA_GC_OP_EPILOGUE(pGC);
-}
-
-static void
-XAASetSpansFallback(DrawablePtr pDraw,
-                    GCPtr pGC,
-                    char *pcharsrc,
-                    register DDXPointPtr ppt,
-                    int *pwidth, int nspans, int fSorted)
-{
-    XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
-    SYNC_CHECK(pGC);
-    (*pGC->ops->SetSpans) (pDraw, pGC, pcharsrc, ppt, pwidth, nspans, fSorted);
-    XAA_GC_OP_EPILOGUE(pGC);
-}
-
-static void
-XAAPutImageFallback(DrawablePtr pDraw,
-                    GCPtr pGC,
-                    int depth,
-                    int x, int y, int w, int h,
-                    int leftPad, int format, char *pImage)
-{
-    XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
-    SYNC_CHECK(pGC);
-    (*pGC->ops->PutImage) (pDraw, pGC, depth, x, y, w, h,
-                           leftPad, format, pImage);
-    XAA_GC_OP_EPILOGUE(pGC);
-}
-
-static RegionPtr
-XAACopyAreaFallback(DrawablePtr pSrc,
-                    DrawablePtr pDst,
-                    GC * pGC,
-                    int srcx, int srcy,
-                    int width, int height, int dstx, int dsty)
-{
-    RegionPtr ret;
-
-    XAA_GC_OP_PROLOGUE(pGC);
-    if ((pSrc->type == DRAWABLE_WINDOW) || (pDst->type == DRAWABLE_WINDOW) ||
-        IS_OFFSCREEN_PIXMAP(pSrc) || IS_OFFSCREEN_PIXMAP(pDst)) {
-        SYNC_CHECK(pGC);
-    }
-    ret = (*pGC->ops->CopyArea) (pSrc, pDst,
-                                 pGC, srcx, srcy, width, height, dstx, dsty);
-    XAA_GC_OP_EPILOGUE(pGC);
-    return ret;
-}
-
-static RegionPtr
-XAACopyPlaneFallback(DrawablePtr pSrc,
-                     DrawablePtr pDst,
-                     GCPtr pGC,
-                     int srcx, int srcy,
-                     int width, int height,
-                     int dstx, int dsty, unsigned long bitPlane)
-{
-    RegionPtr ret;
-
-    XAA_GC_OP_PROLOGUE(pGC);
-    if ((pSrc->type == DRAWABLE_WINDOW) || (pDst->type == DRAWABLE_WINDOW) ||
-        IS_OFFSCREEN_PIXMAP(pSrc) || IS_OFFSCREEN_PIXMAP(pDst)) {
-        SYNC_CHECK(pGC);
-    }
-    ret = (*pGC->ops->CopyPlane) (pSrc, pDst,
-                                  pGC, srcx, srcy, width, height, dstx, dsty,
-                                  bitPlane);
-    XAA_GC_OP_EPILOGUE(pGC);
-    return ret;
-}
-
-static void
-XAAPolyPointFallback(DrawablePtr pDraw,
-                     GCPtr pGC, int mode, int npt, xPoint * pptInit)
-{
-    XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
-    SYNC_CHECK(pGC);
-    (*pGC->ops->PolyPoint) (pDraw, pGC, mode, npt, pptInit);
-    XAA_GC_OP_EPILOGUE(pGC);
-}
-
-static void
-XAAPolylinesFallback(DrawablePtr pDraw,
-                     GCPtr pGC, int mode, int npt, DDXPointPtr pptInit)
-{
-    XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
-    SYNC_CHECK(pGC);
-    (*pGC->ops->Polylines) (pDraw, pGC, mode, npt, pptInit);
-    XAA_GC_OP_EPILOGUE(pGC);
-}
-
-static void
-XAAPolySegmentFallback(DrawablePtr pDraw, GCPtr pGC, int nseg, xSegment * pSeg)
-{
-    XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
-    SYNC_CHECK(pGC);
-    (*pGC->ops->PolySegment) (pDraw, pGC, nseg, pSeg);
-    XAA_GC_OP_EPILOGUE(pGC);
-}
-
-static void
-XAAPolyRectangleFallback(DrawablePtr pDraw,
-                         GCPtr pGC, int nRectsInit, xRectangle *pRectsInit)
-{
-    XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
-    SYNC_CHECK(pGC);
-    (*pGC->ops->PolyRectangle) (pDraw, pGC, nRectsInit, pRectsInit);
-    XAA_GC_OP_EPILOGUE(pGC);
-}
-
-static void
-XAAPolyArcFallback(DrawablePtr pDraw, GCPtr pGC, int narcs, xArc * parcs)
-{
-    XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
-    SYNC_CHECK(pGC);
-    (*pGC->ops->PolyArc) (pDraw, pGC, narcs, parcs);
-    XAA_GC_OP_EPILOGUE(pGC);
-}
-
-static void
-XAAFillPolygonFallback(DrawablePtr pDraw,
-                       GCPtr pGC,
-                       int shape, int mode, int count, DDXPointPtr ptsIn)
-{
-    XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
-    SYNC_CHECK(pGC);
-    (*pGC->ops->FillPolygon) (pDraw, pGC, shape, mode, count, ptsIn);
-    XAA_GC_OP_EPILOGUE(pGC);
-}
-
-static void
-XAAPolyFillRectFallback(DrawablePtr pDraw,
-                        GCPtr pGC, int nrectFill, xRectangle *prectInit)
-{
-    XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
-    SYNC_CHECK(pGC);
-    (*pGC->ops->PolyFillRect) (pDraw, pGC, nrectFill, prectInit);
-    XAA_GC_OP_EPILOGUE(pGC);
-}
-
-static void
-XAAPolyFillArcFallback(DrawablePtr pDraw, GCPtr pGC, int narcs, xArc * parcs)
-{
-    XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
-    SYNC_CHECK(pGC);
-    (*pGC->ops->PolyFillArc) (pDraw, pGC, narcs, parcs);
-    XAA_GC_OP_EPILOGUE(pGC);
-}
-
-static int
-XAAPolyText8Fallback(DrawablePtr pDraw,
-                     GCPtr pGC, int x, int y, int count, char *chars)
-{
-    int ret;
-
-    XAA_GC_OP_PROLOGUE(pGC);
-    SYNC_CHECK(pGC);
-    ret = (*pGC->ops->PolyText8) (pDraw, pGC, x, y, count, chars);
-    XAA_GC_OP_EPILOGUE(pGC);
-    return ret;
-}
-
-static int
-XAAPolyText16Fallback(DrawablePtr pDraw,
-                      GCPtr pGC, int x, int y, int count, unsigned short *chars)
-{
-    int ret;
-
-    XAA_GC_OP_PROLOGUE(pGC);
-    SYNC_CHECK(pGC);
-    ret = (*pGC->ops->PolyText16) (pDraw, pGC, x, y, count, chars);
-    XAA_GC_OP_EPILOGUE(pGC);
-    return ret;
-}
-
-static void
-XAAImageText8Fallback(DrawablePtr pDraw,
-                      GCPtr pGC, int x, int y, int count, char *chars)
-{
-    XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
-    SYNC_CHECK(pGC);
-    (*pGC->ops->ImageText8) (pDraw, pGC, x, y, count, chars);
-    XAA_GC_OP_EPILOGUE(pGC);
-}
-
-static void
-XAAImageText16Fallback(DrawablePtr pDraw,
-                       GCPtr pGC,
-                       int x, int y, int count, unsigned short *chars)
-{
-    XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
-    SYNC_CHECK(pGC);
-    (*pGC->ops->ImageText16) (pDraw, pGC, x, y, count, chars);
-    XAA_GC_OP_EPILOGUE(pGC);
-}
-
-static void
-XAAImageGlyphBltFallback(DrawablePtr pDraw,
-                         GCPtr pGC,
-                         int xInit, int yInit,
-                         unsigned int nglyph,
-                         CharInfoPtr * ppci, pointer pglyphBase)
-{
-    XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
-    SYNC_CHECK(pGC);
-    (*pGC->ops->ImageGlyphBlt) (pDraw, pGC, xInit, yInit, nglyph, ppci,
-                                pglyphBase);
-    XAA_GC_OP_EPILOGUE(pGC);
-}
-
-static void
-XAAPolyGlyphBltFallback(DrawablePtr pDraw,
-                        GCPtr pGC,
-                        int xInit, int yInit,
-                        unsigned int nglyph,
-                        CharInfoPtr * ppci, pointer pglyphBase)
-{
-    XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
-    SYNC_CHECK(pGC);
-    (*pGC->ops->PolyGlyphBlt) (pDraw, pGC, xInit, yInit, nglyph, ppci,
-                               pglyphBase);
-    XAA_GC_OP_EPILOGUE(pGC);
-}
-
-static void
-XAAPushPixelsFallback(GCPtr pGC,
-                      PixmapPtr pBitMap,
-                      DrawablePtr pDraw, int dx, int dy, int xOrg, int yOrg)
-{
-    XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
-    SYNC_CHECK(pGC);
-    (*pGC->ops->PushPixels) (pGC, pBitMap, pDraw, dx, dy, xOrg, yOrg);
-    XAA_GC_OP_EPILOGUE(pGC);
-}
-
-GCOps XAAFallbackOps = {
-    XAAFillSpansFallback, XAASetSpansFallback,
-    XAAPutImageFallback, XAACopyAreaFallback,
-    XAACopyPlaneFallback, XAAPolyPointFallback,
-    XAAPolylinesFallback, XAAPolySegmentFallback,
-    XAAPolyRectangleFallback, XAAPolyArcFallback,
-    XAAFillPolygonFallback, XAAPolyFillRectFallback,
-    XAAPolyFillArcFallback, XAAPolyText8Fallback,
-    XAAPolyText16Fallback, XAAImageText8Fallback,
-    XAAImageText16Fallback, XAAImageGlyphBltFallback,
-    XAAPolyGlyphBltFallback, XAAPushPixelsFallback,
-};
-
-GCOps *
-XAAGetFallbackOps(void)
-{
-    return &XAAFallbackOps;
-}
diff --git a/hw/xfree86/xaa/xaaFillArc.c b/hw/xfree86/xaa/xaaFillArc.c
deleted file mode 100644
index fb7e720..0000000
--- a/hw/xfree86/xaa/xaaFillArc.c
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * Copyright 1996  The XFree86 Project
- *
- * 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 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 
- * HARM HANEMAAYER 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.
- * 
- * Written by Harm Hanemaayer (H.Hanemaayer at inter.nl.net).
- */
-
-/*
- * Filled solid arcs, based on cfbfillarc.c.
- *
- * Fill arc using calls to low-level span fill. Because the math for
- * each span can be done concurrently with the drawing of the span
- * with a graphics coprocessor operation, this is faster than just
- * using miPolyFillArc, which first calculates all the spans and then
- * calls FillSpans.
- *
- * Clipped arcs are dispatched to FillSpans.
- */
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include <limits.h>
-
-#include "misc.h"
-#include "xf86.h"
-#include "xf86_OSproc.h"
-
-#include <X11/X.h>
-#include "scrnintstr.h"
-#include "pixmapstr.h"
-#include "xf86str.h"
-#include "xaa.h"
-#include "xaalocal.h"
-#include "mifillarc.h"
-#include "mi.h"
-
-/*
- * This is based on the integer-math versions from mi. Perhaps on a
- * Pentium, the floating-point (double)-math version is faster.
- */
-
-static void
-XAAFillEllipseSolid(DrawablePtr pDraw, GCPtr pGC, xArc * arc)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    register int x, y, e;
-    int yk, xk, ym, xm, dx, dy, xorg, yorg;
-    int slw;
-    miFillArcRec info;
-
-    (*infoRec->SetupForSolidFill) (infoRec->pScrn, pGC->fgPixel, pGC->alu,
-                                   pGC->planemask);
-
-    miFillArcSetup(arc, &info);
-    MIFILLARCSETUP();
-    if (pGC->miTranslate) {
-        xorg += pDraw->x;
-        yorg += pDraw->y;
-    }
-    while (y > 0) {
-        MIFILLARCSTEP(slw);
-        if (slw > 0) {
-            (*infoRec->SubsequentSolidFillRect) (infoRec->pScrn, xorg - x,
-                                                 yorg - y, slw, 1);
-            if (miFillArcLower(slw))
-                (*infoRec->SubsequentSolidFillRect) (infoRec->pScrn,
-                                                     xorg - x, yorg + y + dy,
-                                                     slw, 1);
-        }
-    }
-
-    SET_SYNC_FLAG(infoRec);
-}
-
-#define ADDSPAN(l,r) \
-    if (r >= l) \
-	(*infoRec->SubsequentSolidFillRect)( \
-	    infoRec->pScrn, l, ya, r - l + 1, 1);
-
-#define ADDSLICESPANS(flip) \
-    if (!flip) \
-    { \
-	ADDSPAN(xl, xr); \
-    } \
-    else \
-    { \
-	xc = xorg - x; \
-	ADDSPAN(xc, xr); \
-	xc += slw - 1; \
-	ADDSPAN(xl, xc); \
-    }
-
-static void
-XAAFillArcSliceSolid(DrawablePtr pDraw, GCPtr pGC, xArc * arc)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    int yk, xk, ym, xm, dx, dy, xorg, yorg, slw;
-    register int x, y, e;
-    miFillArcRec info;
-    miArcSliceRec slice;
-    int ya, xl, xr, xc;
-
-    (*infoRec->SetupForSolidFill) (infoRec->pScrn, pGC->fgPixel, pGC->alu,
-                                   pGC->planemask);
-
-    miFillArcSetup(arc, &info);
-    miFillArcSliceSetup(arc, &slice, pGC);
-    MIFILLARCSETUP();
-    slw = arc->height;
-    if (slice.flip_top || slice.flip_bot)
-        slw += (arc->height >> 1) + 1;
-    if (pGC->miTranslate) {
-        xorg += pDraw->x;
-        yorg += pDraw->y;
-        slice.edge1.x += pDraw->x;
-        slice.edge2.x += pDraw->x;
-    }
-    while (y > 0) {
-        MIFILLARCSTEP(slw);
-        MIARCSLICESTEP(slice.edge1);
-        MIARCSLICESTEP(slice.edge2);
-        if (miFillSliceUpper(slice)) {
-            ya = yorg - y;
-            MIARCSLICEUPPER(xl, xr, slice, slw);
-
-            ADDSLICESPANS(slice.flip_top);
-        }
-        if (miFillSliceLower(slice)) {
-            ya = yorg + y + dy;
-            MIARCSLICELOWER(xl, xr, slice, slw);
-            ADDSLICESPANS(slice.flip_bot);
-        }
-    }
-
-    SET_SYNC_FLAG(infoRec);
-}
-
-void
-XAAPolyFillArcSolid(DrawablePtr pDraw, GCPtr pGC, int narcs, xArc * parcs)
-{
-    register xArc *arc;
-    register int i;
-    int x2, y2;
-    BoxRec box;
-    RegionPtr cclip;
-
-    cclip = pGC->pCompositeClip;
-
-    if (!RegionNumRects(cclip))
-        return;
-
-    for (arc = parcs, i = narcs; --i >= 0; arc++) {
-        if (miFillArcEmpty(arc))
-            continue;
-        if (miCanFillArc(arc)) {
-            box.x1 = arc->x + pDraw->x;
-            box.y1 = arc->y + pDraw->y;
-            /*
-             * Because box.x2 and box.y2 get truncated to 16 bits, and the
-             * RECT_IN_REGION test treats the resulting number as a signed
-             * integer, the RECT_IN_REGION test alone can go the wrong way.
-             * This can result in a server crash because the rendering
-             * routines in this file deal directly with cpu addresses
-             * of pixels to be stored, and do not clip or otherwise check
-             * that all such addresses are within their respective pixmaps.
-             * So we only allow the RECT_IN_REGION test to be used for
-             * values that can be expressed correctly in a signed short.
-             */
-            x2 = box.x1 + (int) arc->width + 1;
-            box.x2 = x2;
-            y2 = box.y1 + (int) arc->height + 1;
-            box.y2 = y2;
-            if ((x2 <= SHRT_MAX) && (y2 <= SHRT_MAX) &&
-                (RegionContainsRect(cclip, &box) == rgnIN)) {
-                if ((arc->angle2 >= FULLCIRCLE) || (arc->angle2 <= -FULLCIRCLE))
-                    XAAFillEllipseSolid(pDraw, pGC, arc);
-                else
-                    XAAFillArcSliceSolid(pDraw, pGC, arc);
-                continue;
-            }
-        }
-        miPolyFillArc(pDraw, pGC, 1, arc);
-    }
-}
diff --git a/hw/xfree86/xaa/xaaFillPoly.c b/hw/xfree86/xaa/xaaFillPoly.c
deleted file mode 100644
index 0cdedf5..0000000
--- a/hw/xfree86/xaa/xaaFillPoly.c
+++ /dev/null
@@ -1,991 +0,0 @@
-
-/*
- * Copyright 1996  The XFree86 Project
- *
- * 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 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 
- * HARM HANEMAAYER 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.
- * 
- */
-
-/*
- * Written by Mark Vojkovich.  Loosly based on an original version
- * written by Harm Hanemaayer (H.Hanemaayer at inter.nl.net) which
- * only did solid rectangles and didn't have trapezoid support.
- *
- */
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include "misc.h"
-#include "xf86.h"
-#include "xf86_OSproc.h"
-
-#include <X11/X.h>
-#include "scrnintstr.h"
-#include "pixmapstr.h"
-#include "xf86str.h"
-#include "mi.h"
-#include "micoord.h"
-
-#include "xaa.h"
-#include "xaalocal.h"
-
-#define POLY_USE_MI		0
-#define POLY_FULLY_CLIPPED	1
-#define POLY_IS_EASY		2
-
-#define Setup(c,x,vertex,dx,dy,e,sign,step,DX) {\
-    x = intToX(vertex); \
-    if ((dy = intToY(c) - y)) { \
-    	DX = dx = intToX(c) - x; \
-	step = 0; \
-    	if (dx >= 0) \
-    	{ \
-	    e = 0; \
-	    sign = 1; \
-	    if (dx >= dy) {\
-	    	step = dx / dy; \
-	    	dx %= dy; \
-	    } \
-    	} \
-    	else \
-    	{ \
-	    e = 1 - dy; \
-	    sign = -1; \
-	    dx = -dx; \
-	    if (dx >= dy) { \
-		step = - (dx / dy); \
-		dx %= dy; \
-	    } \
-    	} \
-    } \
-    x += origin; \
-    vertex = c; \
-}
-
-#define Step(x,dx,dy,e,sign,step) {\
-    x += step; \
-    if ((e += dx) > 0) \
-    { \
-	x += sign; \
-	e -= dy; \
-    } \
-}
-
-#define FixError(x, dx, dy, e, sign, step, h)	{	\
-	   e += (h) * dx;				\
-	   x += (h) * step;				\
-	   if(e > 0) {					\
-		x += e * sign/dy;			\
-		e %= dy;				\
-	   	if(e) {					\
-		   x += sign;				\
-		   e -= dy;				\
-		}					\
-	   } 	 					\
-}
-
-/*
-   XAAIsEasyPoly -
-
-   Checks CoordModeOrigin one rect polygons to see if we need
-   to use Mi.
-   Returns: POLY_USE_MI, POLY_FULLY_CLIPPED or POLY_IS_EASY
-	as well as the pointer to the "top" point and the y
-	extents.
-*/
-
-int
-XAAIsEasyPolygon(DDXPointPtr ptsIn, int count, BoxPtr extents, int origin, DDXPointPtr * topPoint,      /* return */
-                 int *topY, int *bottomY,       /* return */
-                 int shape)
-{
-    int c = 0, vertex1, vertex2;
-
-    *topY = 32767;
-    *bottomY = 0;
-
-    origin -= (origin & 0x8000) << 1;
-    vertex1 = extents->x1 - origin;
-    vertex2 = extents->x2 - origin /* - 0x00010001 */ ;
-    /* I think this was an error in cfb ^ */
-
-    if (shape == Convex) {
-        while (count--) {
-            c = *((int *) ptsIn);
-            if (((c - vertex1) | (vertex2 - c)) & 0x80008000)
-                return POLY_USE_MI;
-
-            c = intToY(c);
-            if (c < *topY) {
-                *topY = c;
-                *topPoint = ptsIn;
-            }
-            ptsIn++;
-            if (c > *bottomY)
-                *bottomY = c;
-        }
-    }
-    else {
-        int yFlip = 0;
-        int dx2, dx1, x1, x2;
-
-        x2 = x1 = -1;
-        dx2 = dx1 = 1;
-
-        while (count--) {
-            c = *((int *) ptsIn);
-            if (((c - vertex1) | (vertex2 - c)) & 0x80008000)
-                return POLY_USE_MI;
-            c = intToY(c);
-            if (c < *topY) {
-                *topY = c;
-                *topPoint = ptsIn;
-            }
-            ptsIn++;
-            if (c > *bottomY)
-                *bottomY = c;
-            if (c == x1)
-                continue;
-            if (dx1 > 0) {
-                if (x2 < 0)
-                    x2 = c;
-                else
-                    dx2 = dx1 = (c - x1) >> 31;
-            }
-            else if ((c - x1) >> 31 != dx1) {
-                dx1 = ~dx1;
-                yFlip++;
-            }
-            x1 = c;
-        }
-        x1 = (x2 - c) >> 31;
-        if (x1 != dx1)
-            yFlip++;
-        if (x1 != dx2)
-            yFlip++;
-        if (yFlip != 2) {
-            if (*topY == *bottomY)
-                return POLY_FULLY_CLIPPED;
-            else
-                return POLY_USE_MI;
-        }
-    }
-    if (*topY == *bottomY)
-        return POLY_FULLY_CLIPPED;
-
-    return POLY_IS_EASY;
-}
-
-void
-XAAFillPolygonSolid(DrawablePtr pDraw,
-                    GCPtr pGC,
-                    int shape, int mode, int count, DDXPointPtr ptsIn)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    int origin, vertex1, vertex2;
-    int *vertex1p, *vertex2p, *endp;
-    int x1 = 0, x2 = 0;
-    int dx1 = 0, dx2 = 0, dy1 = 0, dy2 = 0;
-    int DX1 = 0, DX2 = 0, e1 = 0, e2 = 0;
-    int step1 = 0, step2 = 0, sign1 = 0, sign2 = 0;
-    int c, y, maxy, h, yoffset;
-    DDXPointPtr topPoint;
-
-    if (!RegionNumRects(pGC->pCompositeClip))
-        return;
-
-    if (mode == CoordModePrevious) {
-        register DDXPointPtr ppt = ptsIn + 1;
-
-        for (origin = 1; origin < count; origin++, ppt++) {
-            ppt->x += (ppt - 1)->x;
-            ppt->y += (ppt - 1)->y;
-        }
-        mode = CoordModeOrigin;
-    }
-
-    if (RegionNumRects(pGC->pCompositeClip) != 1) {
-        miFillPolygon(pDraw, pGC, shape, mode, count, ptsIn);
-        return;
-    }
-
-    origin = coordToInt(pDraw->x, pDraw->y);
-
-    switch (XAAIsEasyPolygon(ptsIn, count, &pGC->pCompositeClip->extents,
-                             origin, &topPoint, &y, &maxy, shape)) {
-    case POLY_USE_MI:
-        miFillPolygon(pDraw, pGC, shape, mode, count, ptsIn);
-    case POLY_FULLY_CLIPPED:
-        return;
-    }
-
-    endp = (int *) ptsIn + count;
-    vertex2p = vertex1p = (int *) topPoint;
-    origin = pDraw->x;
-    yoffset = pDraw->y;
-    vertex2 = vertex1 = *vertex2p++;
-    if (vertex2p == endp)
-        vertex2p = (int *) ptsIn;
-
-    (*infoRec->SetupForSolidFill) (infoRec->pScrn, pGC->fgPixel, pGC->alu,
-                                   pGC->planemask);
-
-    while (1) {
-        if (y == intToY(vertex1)) {
-            do {
-                if (vertex1p == (int *) ptsIn)
-                    vertex1p = endp;
-                c = *--vertex1p;
-                Setup(c, x1, vertex1, dx1, dy1, e1, sign1, step1, DX1)
-            } while (y >= intToY(vertex1));
-            h = dy1;
-        }
-        else {
-            Step(x1, dx1, dy1, e1, sign1, step1)
-                h = intToY(vertex1) - y;
-        }
-        if (y == intToY(vertex2)) {
-            do {
-                c = *vertex2p++;
-                if (vertex2p == endp)
-                    vertex2p = (int *) ptsIn;
-                Setup(c, x2, vertex2, dx2, dy2, e2, sign2, step2, DX2)
-            } while (y >= intToY(vertex2));
-            if (dy2 < h)
-                h = dy2;
-        }
-        else {
-            Step(x2, dx2, dy2, e2, sign2, step2)
-                if ((c = (intToY(vertex2) - y)) < h)
-                h = c;
-        }
-
-        /* fill spans for this segment */
-        if (DX1 | DX2) {
-            if (infoRec->SubsequentSolidFillTrap && (h > 6)) {
-                if (x1 == x2) {
-                    while (x1 == x2) {
-                        y++;
-                        if (!--h)
-                            break;
-                        Step(x1, dx1, dy1, e1, sign1, step1)
-                            Step(x2, dx2, dy2, e2, sign2, step2)
-                    }
-                    if (y == maxy)
-                        break;
-                    if (!h)
-                        continue;
-                }
-
-                if (x1 < x2)
-                    (*infoRec->SubsequentSolidFillTrap) (infoRec->pScrn,
-                                                         y + yoffset, h,
-                                                         x1, DX1, dy1, e1,
-                                                         x2 - 1, DX2, dy2, e2);
-                else
-                    (*infoRec->SubsequentSolidFillTrap) (infoRec->pScrn,
-                                                         y + yoffset, h,
-                                                         x2, DX2, dy2, e2,
-                                                         x1 - 1, DX1, dy1, e1);
-                y += h;
-                if (--h) {
-                    FixError(x1, dx1, dy1, e1, sign1, step1, h);
-                    FixError(x2, dx2, dy2, e2, sign2, step2, h);
-                    h = 0;
-                }
-            }
-            else {
-                while (1) {
-                    if (x2 > x1)
-                        (*infoRec->SubsequentSolidFillRect) (infoRec->pScrn,
-                                                             x1, y + yoffset,
-                                                             x2 - x1, 1);
-                    else if (x1 > x2)
-                        (*infoRec->SubsequentSolidFillRect) (infoRec->pScrn,
-                                                             x2, y + yoffset,
-                                                             x1 - x2, 1);
-                    y++;
-                    if (!--h)
-                        break;
-                    Step(x1, dx1, dy1, e1, sign1, step1)
-                        Step(x2, dx2, dy2, e2, sign2, step2)
-                }
-            }
-        }
-        else {
-            if (x2 > x1)
-                (*infoRec->SubsequentSolidFillRect) (infoRec->pScrn,
-                                                     x1, y + yoffset, x2 - x1,
-                                                     h);
-            else if (x1 > x2)
-                (*infoRec->SubsequentSolidFillRect) (infoRec->pScrn,
-                                                     x2, y + yoffset, x1 - x2,
-                                                     h);
-
-            y += h;
-            h = 0;
-        }
-        if (y == maxy)
-            break;
-    }
-    SET_SYNC_FLAG(infoRec);
-}
-
-void
-XAAFillPolygonHelper(ScrnInfoPtr pScrn,
-                     DDXPointPtr ptsIn,
-                     int count,
-                     DDXPointPtr topPoint,
-                     int y,
-                     int maxy,
-                     int origin,
-                     RectFuncPtr RectFunc,
-                     TrapFuncPtr TrapFunc,
-                     int xorg, int yorg, XAACacheInfoPtr pCache)
-{
-    int *vertex1p, *vertex2p, *endp;
-    int vertex1, vertex2;
-    int x1 = 0, x2 = 0;
-    int dx1 = 0, dx2 = 0, dy1 = 0, dy2 = 0;
-    int DX1 = 0, DX2 = 0, e1 = 0, e2 = 0;
-    int step1 = 0, step2 = 0, sign1 = 0, sign2 = 0;
-    int c, h, yoffset;
-
-    endp = (int *) ptsIn + count;
-    vertex2p = vertex1p = (int *) topPoint;
-    yoffset = intToY(origin);
-    origin = intToX(origin);
-    vertex2 = vertex1 = *vertex2p++;
-    if (vertex2p == endp)
-        vertex2p = (int *) ptsIn;
-
-    while (1) {
-        if (y == intToY(vertex1)) {
-            do {
-                if (vertex1p == (int *) ptsIn)
-                    vertex1p = endp;
-                c = *--vertex1p;
-                Setup(c, x1, vertex1, dx1, dy1, e1, sign1, step1, DX1)
-            } while (y >= intToY(vertex1));
-            h = dy1;
-        }
-        else {
-            Step(x1, dx1, dy1, e1, sign1, step1)
-                h = intToY(vertex1) - y;
-        }
-        if (y == intToY(vertex2)) {
-            do {
-                c = *vertex2p++;
-                if (vertex2p == endp)
-                    vertex2p = (int *) ptsIn;
-                Setup(c, x2, vertex2, dx2, dy2, e2, sign2, step2, DX2)
-            } while (y >= intToY(vertex2));
-            if (dy2 < h)
-                h = dy2;
-        }
-        else {
-            Step(x2, dx2, dy2, e2, sign2, step2)
-                if ((c = (intToY(vertex2) - y)) < h)
-                h = c;
-        }
-
-        /* fill spans for this segment */
-        if (DX1 | DX2) {
-            if (TrapFunc && (h > 6)) {
-                if (x1 == x2) {
-                    while (x1 == x2) {
-                        y++;
-                        if (!--h)
-                            break;
-                        Step(x1, dx1, dy1, e1, sign1, step1)
-                            Step(x2, dx2, dy2, e2, sign2, step2)
-                    }
-                    if (y == maxy)
-                        break;
-                    if (!h)
-                        continue;
-                }
-
-                if (x1 < x2)
-                    (*TrapFunc) (pScrn, y + yoffset, h,
-                                 x1, DX1, dy1, e1,
-                                 x2 - 1, DX2, dy2, e2, xorg, yorg, pCache);
-                else
-                    (*TrapFunc) (pScrn, y + yoffset, h,
-                                 x2, DX2, dy2, e2,
-                                 x1 - 1, DX1, dy1, e1, xorg, yorg, pCache);
-                y += h;
-                if (--h) {
-                    FixError(x1, dx1, dy1, e1, sign1, step1, h);
-                    FixError(x2, dx2, dy2, e2, sign2, step2, h);
-                    h = 0;
-                }
-            }
-            else {
-                while (1) {
-                    if (x2 > x1)
-                        (*RectFunc) (pScrn,
-                                     x1, y + yoffset, x2 - x1, 1, xorg, yorg,
-                                     pCache);
-                    else if (x1 > x2)
-                        (*RectFunc) (pScrn,
-                                     x2, y + yoffset, x1 - x2, 1, xorg, yorg,
-                                     pCache);
-                    y++;
-                    if (!--h)
-                        break;
-                    Step(x1, dx1, dy1, e1, sign1, step1)
-                        Step(x2, dx2, dy2, e2, sign2, step2)
-                }
-            }
-        }
-        else {
-            if (x2 > x1)
-                (*RectFunc) (pScrn,
-                             x1, y + yoffset, x2 - x1, h, xorg, yorg, pCache);
-            else if (x1 > x2)
-                (*RectFunc) (pScrn,
-                             x2, y + yoffset, x1 - x2, h, xorg, yorg, pCache);
-
-            y += h;
-            h = 0;
-        }
-        if (y == maxy)
-            break;
-    }
-}
-
-        /*****************\
-	|  Solid Helpers  |
-	\*****************/
-
-static void
-SolidTrapHelper(ScrnInfoPtr pScrn,
-                int y, int h,
-                int x1, int dx1, int dy1, int e1,
-                int x2, int dx2, int dy2, int e2,
-                int xorg, int yorg, XAACacheInfoPtr pCache)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-
-    (*infoRec->SubsequentSolidFillTrap) (pScrn,
-                                         y, h, x1, dx1, dy1, e1, x2, dx2, dy2,
-                                         e2);
-}
-
-static void
-SolidRectHelper(ScrnInfoPtr pScrn,
-                int x, int y, int w, int h,
-                int xorg, int yorg, XAACacheInfoPtr pCache)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-
-    (*infoRec->SubsequentSolidFillRect) (pScrn, x, y, w, h);
-}
-
-        /*********************\
-	|  Mono 8x8 Patterns  |
-	\*********************/
-
-static void
-Mono8x8PatternTrapHelper_ScreenOrigin(ScrnInfoPtr pScrn,
-                                      int y, int h,
-                                      int x1, int dx1, int dy1, int e1,
-                                      int x2, int dx2, int dy2, int e2,
-                                      int xorg, int yorg,
-                                      XAACacheInfoPtr pCache)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-
-    (*infoRec->SubsequentMono8x8PatternFillTrap) (pScrn, xorg, yorg,
-                                                  y, h, x1, dx1, dy1, e1, x2,
-                                                  dx2, dy2, e2);
-}
-
-static void
-Mono8x8PatternRectHelper_ScreenOrigin(ScrnInfoPtr pScrn,
-                                      int x, int y, int w, int h,
-                                      int xorg, int yorg,
-                                      XAACacheInfoPtr pCache)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-
-    (*infoRec->SubsequentMono8x8PatternFillRect) (pScrn, xorg, yorg,
-                                                  x, y, w, h);
-}
-
-static void
-Mono8x8PatternRectHelper(ScrnInfoPtr pScrn,
-                         int x, int y, int w, int h,
-                         int xorg, int yorg, XAACacheInfoPtr pCache)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-
-    xorg = (x - xorg) & 0x07;
-    yorg = (y - yorg) & 0x07;
-
-    if (!(infoRec->Mono8x8PatternFillFlags &
-          HARDWARE_PATTERN_PROGRAMMED_ORIGIN)) {
-        if (infoRec->Mono8x8PatternFillFlags & HARDWARE_PATTERN_PROGRAMMED_BITS) {
-            int patx = pCache->pat0;
-            int paty = pCache->pat1;
-
-            XAARotateMonoPattern(&patx, &paty, xorg, yorg,
-                                 (infoRec->Mono8x8PatternFillFlags &
-                                  BIT_ORDER_IN_BYTE_MSBFIRST));
-            xorg = patx;
-            yorg = paty;
-        }
-        else {
-            int slot = (yorg << 3) + xorg;
-
-            xorg = pCache->x + pCache->offsets[slot].x;
-            yorg = pCache->y + pCache->offsets[slot].y;
-        }
-    }
-
-    (*infoRec->SubsequentMono8x8PatternFillRect) (pScrn, xorg, yorg,
-                                                  x, y, w, h);
-}
-
-        /****************\
-	|  Cache Expand  |
-	\****************/
-
-static void
-CacheExpandRectHelper(ScrnInfoPtr pScrn,
-                      int X, int Y, int Width, int Height,
-                      int xorg, int yorg, XAACacheInfoPtr pCache)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    int x, phaseY, phaseX, skipleft, w, blit_w, blit_h;
-    int cacheWidth;
-
-    cacheWidth = (pCache->w * pScrn->bitsPerPixel) /
-        infoRec->CacheColorExpandDensity;
-
-    phaseY = (Y - yorg) % pCache->orig_h;
-    if (phaseY < 0)
-        phaseY += pCache->orig_h;
-    phaseX = (X - xorg) % pCache->orig_w;
-    if (phaseX < 0)
-        phaseX += pCache->orig_w;
-
-    while (1) {
-        w = Width;
-        skipleft = phaseX;
-        x = X;
-        blit_h = pCache->h - phaseY;
-        if (blit_h > Height)
-            blit_h = Height;
-
-        while (1) {
-            blit_w = cacheWidth - skipleft;
-            if (blit_w > w)
-                blit_w = w;
-            (*infoRec->SubsequentScreenToScreenColorExpandFill) (pScrn, x, Y,
-                                                                 blit_w, blit_h,
-                                                                 pCache->x,
-                                                                 pCache->y +
-                                                                 phaseY,
-                                                                 skipleft);
-            w -= blit_w;
-            if (!w)
-                break;
-            x += blit_w;
-            skipleft = (skipleft + blit_w) % pCache->orig_w;
-        }
-        Height -= blit_h;
-        if (!Height)
-            break;
-        Y += blit_h;
-        phaseY = (phaseY + blit_h) % pCache->orig_h;
-    }
-}
-
-        /**************\
-	|  Cache Blit  |
-	\**************/
-
-static void
-CacheBltRectHelper(ScrnInfoPtr pScrn,
-                   int X, int Y, int Width, int Height,
-                   int xorg, int yorg, XAACacheInfoPtr pCache)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    int x, phaseY, phaseX, skipleft, w, blit_w, blit_h;
-
-    phaseY = (Y - yorg) % pCache->orig_h;
-    if (phaseY < 0)
-        phaseY += pCache->orig_h;
-    phaseX = (X - xorg) % pCache->orig_w;
-    if (phaseX < 0)
-        phaseX += pCache->orig_w;
-
-    while (1) {
-        w = Width;
-        skipleft = phaseX;
-        x = X;
-        blit_h = pCache->h - phaseY;
-        if (blit_h > Height)
-            blit_h = Height;
-
-        while (1) {
-            blit_w = pCache->w - skipleft;
-            if (blit_w > w)
-                blit_w = w;
-            (*infoRec->SubsequentScreenToScreenCopy) (pScrn,
-                                                      pCache->x + skipleft,
-                                                      pCache->y + phaseY, x, Y,
-                                                      blit_w, blit_h);
-            w -= blit_w;
-            if (!w)
-                break;
-            x += blit_w;
-            skipleft = (skipleft + blit_w) % pCache->orig_w;
-        }
-        Height -= blit_h;
-        if (!Height)
-            break;
-        Y += blit_h;
-        phaseY = (phaseY + blit_h) % pCache->orig_h;
-    }
-}
-
-        /**********************\
-	|   Stippled Polygons  |
-	\**********************/
-
-void
-XAAFillPolygonStippled(DrawablePtr pDraw,
-                       GCPtr pGC,
-                       int shape, int mode, int count, DDXPointPtr ptsIn)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    XAAPixmapPtr pPriv = XAA_GET_PIXMAP_PRIVATE(pGC->stipple);
-    int origin, type, patx, paty, fg, bg;
-    int y, maxy, xorg, yorg;
-    DDXPointPtr topPoint;
-    XAACacheInfoPtr pCache = NULL;
-    RectFuncPtr RectFunc = NULL;
-    TrapFuncPtr TrapFunc = NULL;
-
-    if (!RegionNumRects(pGC->pCompositeClip))
-        return;
-
-    if (mode == CoordModePrevious) {
-        register DDXPointPtr ppt = ptsIn + 1;
-
-        for (origin = 1; origin < count; origin++, ppt++) {
-            ppt->x += (ppt - 1)->x;
-            ppt->y += (ppt - 1)->y;
-        }
-        mode = CoordModeOrigin;
-    }
-
-    if (RegionNumRects(pGC->pCompositeClip) != 1) {
-        miFillPolygon(pDraw, pGC, shape, mode, count, ptsIn);
-        return;
-    }
-
-    if (pGC->fillStyle == FillStippled) {
-        type = (*infoRec->StippledFillChooser) (pGC);
-        fg = pGC->fgPixel;
-        bg = -1;
-    }
-    else {
-        type = (*infoRec->OpaqueStippledFillChooser) (pGC);
-        fg = pGC->fgPixel;
-        bg = pGC->bgPixel;
-    }
-
-    if (!type) {
-        (*XAAFallbackOps.FillPolygon) (pDraw, pGC, shape, mode, count, ptsIn);
-        return;
-    }
-
-    if ((type == DO_COLOR_EXPAND) || (type == DO_COLOR_8x8)) {
-        miFillPolygon(pDraw, pGC, shape, mode, count, ptsIn);
-        return;
-    }
-
-    origin = pDraw->x;
-
-    switch (XAAIsEasyPolygon(ptsIn, count, &pGC->pCompositeClip->extents,
-                             origin, &topPoint, &y, &maxy, shape)) {
-    case POLY_USE_MI:
-        miFillPolygon(pDraw, pGC, shape, mode, count, ptsIn);
-    case POLY_FULLY_CLIPPED:
-        return;
-    }
-
-    xorg = (pDraw->x + pGC->patOrg.x);
-    yorg = (pDraw->y + pGC->patOrg.y);
-
-    if ((fg == bg) && (bg != -1) && infoRec->SetupForSolidFill) {
-
-        (*infoRec->SetupForSolidFill) (infoRec->pScrn, fg,
-                                       pGC->alu, pGC->planemask);
-
-        RectFunc = SolidRectHelper;
-        TrapFunc = infoRec->SubsequentSolidFillTrap ? SolidTrapHelper : NULL;
-    }
-    else
-        switch (type) {
-        case DO_MONO_8x8:
-            patx = pPriv->pattern0;
-            paty = pPriv->pattern1;
-            if (infoRec->Mono8x8PatternFillFlags &
-                HARDWARE_PATTERN_SCREEN_ORIGIN) {
-                xorg = (-xorg) & 0x07;
-                yorg = (-yorg) & 0x07;
-                if (infoRec->Mono8x8PatternFillFlags &
-                    HARDWARE_PATTERN_PROGRAMMED_BITS) {
-                    if (!(infoRec->Mono8x8PatternFillFlags &
-                          HARDWARE_PATTERN_PROGRAMMED_ORIGIN)) {
-                        XAARotateMonoPattern(&patx, &paty, xorg, yorg,
-                                             (infoRec->Mono8x8PatternFillFlags &
-                                              BIT_ORDER_IN_BYTE_MSBFIRST));
-                        xorg = patx;
-                        yorg = paty;
-                    }
-                }
-                else {
-                    XAACacheInfoPtr pCache =
-                        (*infoRec->CacheMono8x8Pattern) (infoRec->pScrn, patx,
-                                                         paty);
-                    patx = pCache->x;
-                    paty = pCache->y;
-                    if (!(infoRec->Mono8x8PatternFillFlags &
-                          HARDWARE_PATTERN_PROGRAMMED_ORIGIN)) {
-                        int slot = (yorg << 3) + xorg;
-
-                        patx += pCache->offsets[slot].x;
-                        paty += pCache->offsets[slot].y;
-                        xorg = patx;
-                        yorg = paty;
-                    }
-                }
-                RectFunc = Mono8x8PatternRectHelper_ScreenOrigin;
-                if (infoRec->SubsequentMono8x8PatternFillTrap)
-                    TrapFunc = Mono8x8PatternTrapHelper_ScreenOrigin;
-            }
-            else {              /* !HARDWARE_PATTERN_SCREEN_ORIGIN */
-                if (!(infoRec->Mono8x8PatternFillFlags &
-                      HARDWARE_PATTERN_PROGRAMMED_BITS)) {
-                    pCache =
-                        (*infoRec->CacheMono8x8Pattern) (infoRec->pScrn, patx,
-                                                         paty);
-                    patx = pCache->x;
-                    paty = pCache->y;
-                }
-                else {
-                    pCache = &(infoRec->ScratchCacheInfoRec);
-                    pCache->pat0 = patx;
-                    pCache->pat1 = paty;
-                }
-                RectFunc = Mono8x8PatternRectHelper;
-            }
-
-            (*infoRec->SetupForMono8x8PatternFill) (infoRec->pScrn,
-                                                    patx, paty, fg, bg,
-                                                    pGC->alu, pGC->planemask);
-            break;
-        case DO_CACHE_EXPAND:
-            pCache =
-                (*infoRec->CacheMonoStipple) (infoRec->pScrn, pGC->stipple);
-
-            (*infoRec->SetupForScreenToScreenColorExpandFill) (infoRec->pScrn,
-                                                               fg, bg, pGC->alu,
-                                                               pGC->planemask);
-
-            RectFunc = CacheExpandRectHelper;
-            break;
-        case DO_CACHE_BLT:
-            pCache = (*infoRec->CacheStipple) (infoRec->pScrn, pGC->stipple,
-                                               fg, bg);
-            (*infoRec->SetupForScreenToScreenCopy) (infoRec->pScrn, 1, 1,
-                                                    pGC->alu, pGC->planemask,
-                                                    pCache->trans_color);
-
-            RectFunc = CacheBltRectHelper;
-            break;
-        default:
-            return;
-        }
-
-    XAAFillPolygonHelper(infoRec->pScrn, ptsIn, count, topPoint,
-                         y, maxy, origin, RectFunc, TrapFunc, xorg, yorg,
-                         pCache);
-
-    SET_SYNC_FLAG(infoRec);
-}
-
-        /*******************\
-	|   Tiled Polygons  |
-	\*******************/
-
-void
-XAAFillPolygonTiled(DrawablePtr pDraw,
-                    GCPtr pGC,
-                    int shape, int mode, int count, DDXPointPtr ptsIn)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    XAAPixmapPtr pPriv = XAA_GET_PIXMAP_PRIVATE(pGC->tile.pixmap);
-    int origin, type, patx, paty;
-    int y, maxy, xorg, yorg;
-    DDXPointPtr topPoint;
-    XAACacheInfoPtr pCache = NULL;
-    RectFuncPtr RectFunc = NULL;
-    TrapFuncPtr TrapFunc = NULL;
-
-    if (!RegionNumRects(pGC->pCompositeClip))
-        return;
-
-    if (mode == CoordModePrevious) {
-        register DDXPointPtr ppt = ptsIn + 1;
-
-        for (origin = 1; origin < count; origin++, ppt++) {
-            ppt->x += (ppt - 1)->x;
-            ppt->y += (ppt - 1)->y;
-        }
-        mode = CoordModeOrigin;
-    }
-
-    if (RegionNumRects(pGC->pCompositeClip) != 1) {
-        miFillPolygon(pDraw, pGC, shape, mode, count, ptsIn);
-        return;
-    }
-
-    type = (*infoRec->TiledFillChooser) (pGC);
-
-    if (!type || (type == DO_IMAGE_WRITE)) {
-        (*XAAFallbackOps.FillPolygon) (pDraw, pGC, shape, mode, count, ptsIn);
-        return;
-    }
-
-    if (type == DO_COLOR_8x8) {
-        miFillPolygon(pDraw, pGC, shape, mode, count, ptsIn);
-        return;
-    }
-
-    origin = pDraw->x;
-
-    switch (XAAIsEasyPolygon(ptsIn, count, &pGC->pCompositeClip->extents,
-                             origin, &topPoint, &y, &maxy, shape)) {
-    case POLY_USE_MI:
-        miFillPolygon(pDraw, pGC, shape, mode, count, ptsIn);
-    case POLY_FULLY_CLIPPED:
-        return;
-    }
-
-    xorg = (pDraw->x + pGC->patOrg.x);
-    yorg = (pDraw->y + pGC->patOrg.y);
-
-    switch (type) {
-    case DO_MONO_8x8:
-        patx = pPriv->pattern0;
-        paty = pPriv->pattern1;
-        if (infoRec->Mono8x8PatternFillFlags & HARDWARE_PATTERN_SCREEN_ORIGIN) {
-            xorg = (-xorg) & 0x07;
-            yorg = (-yorg) & 0x07;
-            if (infoRec->Mono8x8PatternFillFlags &
-                HARDWARE_PATTERN_PROGRAMMED_BITS) {
-                if (!(infoRec->Mono8x8PatternFillFlags &
-                      HARDWARE_PATTERN_PROGRAMMED_ORIGIN)) {
-                    XAARotateMonoPattern(&patx, &paty, xorg, yorg,
-                                         (infoRec->Mono8x8PatternFillFlags &
-                                          BIT_ORDER_IN_BYTE_MSBFIRST));
-                    xorg = patx;
-                    yorg = paty;
-                }
-            }
-            else {
-                XAACacheInfoPtr pCache =
-                    (*infoRec->CacheMono8x8Pattern) (infoRec->pScrn, patx,
-                                                     paty);
-                patx = pCache->x;
-                paty = pCache->y;
-                if (!(infoRec->Mono8x8PatternFillFlags &
-                      HARDWARE_PATTERN_PROGRAMMED_ORIGIN)) {
-                    int slot = (yorg << 3) + xorg;
-
-                    patx += pCache->offsets[slot].x;
-                    paty += pCache->offsets[slot].y;
-                    xorg = patx;
-                    yorg = paty;
-                }
-            }
-            RectFunc = Mono8x8PatternRectHelper_ScreenOrigin;
-            if (infoRec->SubsequentMono8x8PatternFillTrap)
-                TrapFunc = Mono8x8PatternTrapHelper_ScreenOrigin;
-        }
-        else {                  /* !HARDWARE_PATTERN_SCREEN_ORIGIN */
-            if (!(infoRec->Mono8x8PatternFillFlags &
-                  HARDWARE_PATTERN_PROGRAMMED_BITS)) {
-                pCache =
-                    (*infoRec->CacheMono8x8Pattern) (infoRec->pScrn, patx,
-                                                     paty);
-                patx = pCache->x;
-                paty = pCache->y;
-            }
-            else {
-                pCache = &(infoRec->ScratchCacheInfoRec);
-                pCache->pat0 = patx;
-                pCache->pat1 = paty;
-            }
-            RectFunc = Mono8x8PatternRectHelper;
-        }
-
-        (*infoRec->SetupForMono8x8PatternFill) (infoRec->pScrn,
-                                                patx, paty, pPriv->fg,
-                                                pPriv->bg, pGC->alu,
-                                                pGC->planemask);
-        break;
-    case DO_CACHE_BLT:
-        pCache = (*infoRec->CacheTile) (infoRec->pScrn, pGC->tile.pixmap);
-        (*infoRec->SetupForScreenToScreenCopy) (infoRec->pScrn, 1, 1,
-                                                pGC->alu, pGC->planemask, -1);
-
-        RectFunc = CacheBltRectHelper;
-        break;
-    case DO_PIXMAP_COPY:
-        pCache = &(infoRec->ScratchCacheInfoRec);
-        pCache->x = pPriv->offscreenArea->box.x1;
-        pCache->y = pPriv->offscreenArea->box.y1;
-        pCache->w = pCache->orig_w = pPriv->offscreenArea->box.x2 - pCache->x;
-        pCache->h = pCache->orig_h = pPriv->offscreenArea->box.y2 - pCache->y;
-
-        (*infoRec->SetupForScreenToScreenCopy) (infoRec->pScrn, 1, 1,
-                                                pGC->alu, pGC->planemask, -1);
-
-        RectFunc = CacheBltRectHelper;
-        break;
-    default:
-        return;
-    }
-
-    XAAFillPolygonHelper(infoRec->pScrn, ptsIn, count, topPoint,
-                         y, maxy, origin, RectFunc, TrapFunc, xorg, yorg,
-                         pCache);
-
-    SET_SYNC_FLAG(infoRec);
-}
diff --git a/hw/xfree86/xaa/xaaFillRect.c b/hw/xfree86/xaa/xaaFillRect.c
deleted file mode 100644
index ec0fb9d..0000000
--- a/hw/xfree86/xaa/xaaFillRect.c
+++ /dev/null
@@ -1,1101 +0,0 @@
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include "misc.h"
-#include "xf86.h"
-#include "xf86_OSproc.h"
-
-#include <X11/X.h>
-#include "scrnintstr.h"
-#include "pixmapstr.h"
-#include "xf86str.h"
-#include "xaa.h"
-#include "xaalocal.h"
-
-static void XAARenderSolidRects(GCPtr, int, BoxPtr, int, int);
-static void XAARenderColor8x8Rects(GCPtr, int, BoxPtr, int, int);
-static void XAARenderMono8x8Rects(GCPtr, int, BoxPtr, int, int);
-static void XAARenderColorExpandRects(GCPtr, int, BoxPtr, int, int);
-static void XAARenderCacheExpandRects(GCPtr, int, BoxPtr, int, int);
-static void XAARenderCacheBltRects(GCPtr, int, BoxPtr, int, int);
-static void XAARenderImageWriteRects(GCPtr, int, BoxPtr, int, int);
-static void XAARenderPixmapCopyRects(GCPtr, int, BoxPtr, int, int);
-
-void
-XAAPolyFillRect(DrawablePtr pDraw, GCPtr pGC, int nrectFill,    /* number of rectangles to fill */
-                xRectangle *prectInit   /* Pointer to first rectangle to fill */
-    )
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    int xorg = pDraw->x;
-    int yorg = pDraw->y;
-    int type = 0;
-    ClipAndRenderRectsFunc function;
-
-    if ((nrectFill <= 0) || !pGC->planemask)
-        return;
-
-    if (!RegionNumRects(pGC->pCompositeClip))
-        return;
-
-    switch (pGC->fillStyle) {
-    case FillSolid:
-        type = DO_SOLID;
-        break;
-    case FillStippled:
-        type = (*infoRec->StippledFillChooser) (pGC);
-        break;
-    case FillOpaqueStippled:
-        if ((pGC->fgPixel == pGC->bgPixel) && infoRec->FillSolidRects &&
-            CHECK_PLANEMASK(pGC, infoRec->FillSolidRectsFlags) &&
-            CHECK_ROP(pGC, infoRec->FillSolidRectsFlags) &&
-            CHECK_ROPSRC(pGC, infoRec->FillSolidRectsFlags) &&
-            CHECK_FG(pGC, infoRec->FillSolidRectsFlags))
-            type = DO_SOLID;
-        else
-            type = (*infoRec->OpaqueStippledFillChooser) (pGC);
-        break;
-    case FillTiled:
-        type = (*infoRec->TiledFillChooser) (pGC);
-        break;
-    }
-
-    switch (type) {
-    case DO_SOLID:
-        function = XAARenderSolidRects;
-        break;
-    case DO_COLOR_8x8:
-        function = XAARenderColor8x8Rects;
-        break;
-    case DO_MONO_8x8:
-        function = XAARenderMono8x8Rects;
-        break;
-    case DO_CACHE_BLT:
-        function = XAARenderCacheBltRects;
-        break;
-    case DO_COLOR_EXPAND:
-        function = XAARenderColorExpandRects;
-        break;
-    case DO_CACHE_EXPAND:
-        function = XAARenderCacheExpandRects;
-        break;
-    case DO_IMAGE_WRITE:
-        function = XAARenderImageWriteRects;
-        break;
-    case DO_PIXMAP_COPY:
-        function = XAARenderPixmapCopyRects;
-        break;
-    default:
-        (*XAAFallbackOps.PolyFillRect) (pDraw, pGC, nrectFill, prectInit);
-        return;
-    }
-
-    if (xorg | yorg) {
-        int n = nrectFill;
-        xRectangle *prect = prectInit;
-
-        while (n--) {
-            prect->x += xorg;
-            prect->y += yorg;
-            prect++;
-        }
-    }
-
-    XAAClipAndRenderRects(pGC, function, nrectFill, prectInit, xorg, yorg);
-}
-
-        /*********************\
-	|     Solid Rects     |
-	\*********************/
-
-static void
-XAARenderSolidRects(GCPtr pGC,
-                    int nboxes, BoxPtr pClipBoxes, int xorg, int yorg)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-
-    (*infoRec->FillSolidRects) (infoRec->pScrn,
-                                pGC->fgPixel, pGC->alu, pGC->planemask, nboxes,
-                                pClipBoxes);
-}
-
-        /************************\
-	|     Mono 8x8 Rects     |
-	\************************/
-
-static void
-XAARenderMono8x8Rects(GCPtr pGC,
-                      int nboxes, BoxPtr pClipBoxes, int xorg, int yorg)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    XAAPixmapPtr pPriv;
-    int fg, bg;
-
-    switch (pGC->fillStyle) {
-    case FillStippled:
-        pPriv = XAA_GET_PIXMAP_PRIVATE(pGC->stipple);
-        fg = pGC->fgPixel;
-        bg = -1;
-        break;
-    case FillOpaqueStippled:
-        pPriv = XAA_GET_PIXMAP_PRIVATE(pGC->stipple);
-        fg = pGC->fgPixel;
-        bg = pGC->bgPixel;
-        break;
-    case FillTiled:
-        pPriv = XAA_GET_PIXMAP_PRIVATE(pGC->tile.pixmap);
-        fg = pPriv->fg;
-        bg = pPriv->bg;
-        break;
-    default:                   /* Muffle compiler */
-        pPriv = NULL;           /* Kaboom */
-        fg = -1;
-        bg = -1;
-        break;
-    }
-
-    (*infoRec->FillMono8x8PatternRects) (infoRec->pScrn,
-                                         fg, bg, pGC->alu, pGC->planemask,
-                                         nboxes, pClipBoxes, pPriv->pattern0,
-                                         pPriv->pattern1,
-                                         (xorg + pGC->patOrg.x),
-                                         (yorg + pGC->patOrg.y));
-}
-
-        /*************************\
-	|     Color 8x8 Rects     |
-	\*************************/
-
-static void
-XAARenderColor8x8Rects(GCPtr pGC,
-                       int nboxes, BoxPtr pClipBoxes, int xorg, int yorg)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    XAACacheInfoPtr pCache;
-    PixmapPtr pPix;
-    int fg, bg;
-
-    switch (pGC->fillStyle) {
-    case FillStippled:
-        pPix = pGC->stipple;
-        fg = pGC->fgPixel;
-        bg = -1;
-        break;
-    case FillOpaqueStippled:
-        pPix = pGC->stipple;
-        fg = pGC->fgPixel;
-        bg = pGC->bgPixel;
-        break;
-    case FillTiled:
-        pPix = pGC->tile.pixmap;
-        fg = -1;
-        bg = -1;
-        break;
-    default:                   /* Muffle compiler */
-        pPix = NULL;
-        fg = -1;
-        bg = -1;
-        break;
-    }
-
-    pCache = (*infoRec->CacheColor8x8Pattern) (infoRec->pScrn, pPix, fg, bg);
-    (*infoRec->FillColor8x8PatternRects) (infoRec->pScrn,
-                                          pGC->alu, pGC->planemask, nboxes,
-                                          pClipBoxes, (xorg + pGC->patOrg.x),
-                                          (yorg + pGC->patOrg.y), pCache);
-}
-
-        /****************************\
-	|     Color Expand Rects     |
-	\****************************/
-
-static void
-XAARenderColorExpandRects(GCPtr pGC,
-                          int nboxes, BoxPtr pClipBoxes, int xorg, int yorg)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    int fg, bg;
-
-    switch (pGC->fillStyle) {
-    case FillStippled:
-        fg = pGC->fgPixel;
-        bg = -1;
-        break;
-    case FillOpaqueStippled:
-        fg = pGC->fgPixel;
-        bg = pGC->bgPixel;
-        break;
-    default:                   /* Muffle compiler */
-        fg = -1;
-        bg = -1;
-        break;
-    }
-
-    (*infoRec->FillColorExpandRects) (infoRec->pScrn, fg, bg,
-                                      pGC->alu, pGC->planemask, nboxes,
-                                      pClipBoxes, (xorg + pGC->patOrg.x),
-                                      (yorg + pGC->patOrg.y), pGC->stipple);
-}
-
-        /*************************\
-	|     Cache Blt Rects     |
-	\*************************/
-
-static void
-XAARenderCacheBltRects(GCPtr pGC,
-                       int nboxes, BoxPtr pClipBoxes, int xorg, int yorg)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    XAACacheInfoPtr pCache;
-
-    switch (pGC->fillStyle) {
-    case FillStippled:
-        pCache = (*infoRec->CacheStipple) (infoRec->pScrn, pGC->stipple,
-                                           pGC->fgPixel, -1);
-        break;
-    case FillOpaqueStippled:
-        pCache = (*infoRec->CacheStipple) (infoRec->pScrn, pGC->stipple,
-                                           pGC->fgPixel, pGC->bgPixel);
-        break;
-    case FillTiled:
-        pCache = (*infoRec->CacheTile) (infoRec->pScrn, pGC->tile.pixmap);
-        break;
-    default:                   /* Muffle compiler */
-        pCache = NULL;
-        break;
-    }
-
-    (*infoRec->FillCacheBltRects) (infoRec->pScrn, pGC->alu,
-                                   pGC->planemask, nboxes, pClipBoxes,
-                                   (xorg + pGC->patOrg.x),
-                                   (yorg + pGC->patOrg.y), pCache);
-}
-
-        /****************************\
-	|     Cache Expand Rects     |
-	\****************************/
-
-static void
-XAARenderCacheExpandRects(GCPtr pGC,
-                          int nboxes, BoxPtr pClipBoxes, int xorg, int yorg)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    int fg, bg;
-
-    switch (pGC->fillStyle) {
-    case FillStippled:
-        fg = pGC->fgPixel;
-        bg = -1;
-        break;
-    case FillOpaqueStippled:
-        fg = pGC->fgPixel;
-        bg = pGC->bgPixel;
-        break;
-    default:                   /* Muffle compiler */
-        fg = -1;
-        bg = -1;
-        break;
-    }
-
-    (*infoRec->FillCacheExpandRects) (infoRec->pScrn, fg, bg,
-                                      pGC->alu, pGC->planemask, nboxes,
-                                      pClipBoxes, (xorg + pGC->patOrg.x),
-                                      (yorg + pGC->patOrg.y), pGC->stipple);
-}
-
-        /***************************\
-	|     Image Write Rects     |
-	\***************************/
-
-static void
-XAARenderImageWriteRects(GCPtr pGC,
-                         int nboxes, BoxPtr pClipBoxes, int xorg, int yorg)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-
-    (*infoRec->FillImageWriteRects) (infoRec->pScrn, pGC->alu,
-                                     pGC->planemask, nboxes, pClipBoxes,
-                                     (xorg + pGC->patOrg.x),
-                                     (yorg + pGC->patOrg.y), pGC->tile.pixmap);
-}
-
-        /***************************\
-	|     Pixmap Copy Rects     |
-	\***************************/
-
-static void
-XAARenderPixmapCopyRects(GCPtr pGC,
-                         int nboxes, BoxPtr pClipBoxes, int xorg, int yorg)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    XAACacheInfoPtr pCache = &(infoRec->ScratchCacheInfoRec);
-    XAAPixmapPtr pPriv = XAA_GET_PIXMAP_PRIVATE(pGC->tile.pixmap);
-
-    pCache->x = pPriv->offscreenArea->box.x1;
-    pCache->y = pPriv->offscreenArea->box.y1;
-    pCache->w = pCache->orig_w = pPriv->offscreenArea->box.x2 - pCache->x;
-    pCache->h = pCache->orig_h = pPriv->offscreenArea->box.y2 - pCache->y;
-    pCache->trans_color = -1;
-
-    (*infoRec->FillCacheBltRects) (infoRec->pScrn, pGC->alu,
-                                   pGC->planemask, nboxes, pClipBoxes,
-                                   (xorg + pGC->patOrg.x),
-                                   (yorg + pGC->patOrg.y), pCache);
-}
-
-        /************\
-	|   Solid    |
-	\************/
-
-void
-XAAFillSolidRects(ScrnInfoPtr pScrn, int fg, int rop, unsigned int planemask, int nBox, /* number of rectangles to fill */
-                  BoxPtr pBox   /* Pointer to first rectangle to fill */
-    )
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-
-    (*infoRec->SetupForSolidFill) (pScrn, fg, rop, planemask);
-    while (nBox--) {
-        (*infoRec->SubsequentSolidFillRect) (pScrn, pBox->x1, pBox->y1,
-                                             pBox->x2 - pBox->x1,
-                                             pBox->y2 - pBox->y1);
-        pBox++;
-    }
-    SET_SYNC_FLAG(infoRec);
-}
-
-        /*********************\
-	|  8x8 Mono Patterns  |
-	\*********************/
-
-void
-XAAFillMono8x8PatternRectsScreenOrigin(ScrnInfoPtr pScrn,
-                                       int fg, int bg, int rop,
-                                       unsigned int planemask,
-                                       int nBox,
-                                       BoxPtr pBox,
-                                       int pattern0, int pattern1,
-                                       int xorigin, int yorigin)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    int patx = pattern0, paty = pattern1;
-    int xorg = (-xorigin) & 0x07;
-    int yorg = (-yorigin) & 0x07;
-
-    if (infoRec->Mono8x8PatternFillFlags & HARDWARE_PATTERN_PROGRAMMED_BITS) {
-        if (!(infoRec->Mono8x8PatternFillFlags &
-              HARDWARE_PATTERN_PROGRAMMED_ORIGIN)) {
-            XAARotateMonoPattern(&patx, &paty, xorg, yorg,
-                                 (infoRec->Mono8x8PatternFillFlags &
-                                  BIT_ORDER_IN_BYTE_MSBFIRST));
-            xorg = patx;
-            yorg = paty;
-        }
-    }
-    else {
-        XAACacheInfoPtr pCache =
-            (*infoRec->CacheMono8x8Pattern) (pScrn, pattern0, pattern1);
-        patx = pCache->x;
-        paty = pCache->y;
-        if (!(infoRec->Mono8x8PatternFillFlags &
-              HARDWARE_PATTERN_PROGRAMMED_ORIGIN)) {
-            int slot = (yorg << 3) + xorg;
-
-            patx += pCache->offsets[slot].x;
-            paty += pCache->offsets[slot].y;
-            xorg = patx;
-            yorg = paty;
-        }
-    }
-
-    (*infoRec->SetupForMono8x8PatternFill) (pScrn, patx, paty,
-                                            fg, bg, rop, planemask);
-
-    while (nBox--) {
-        (*infoRec->SubsequentMono8x8PatternFillRect) (pScrn,
-                                                      xorg, yorg, pBox->x1,
-                                                      pBox->y1,
-                                                      pBox->x2 - pBox->x1,
-                                                      pBox->y2 - pBox->y1);
-        pBox++;
-    }
-    SET_SYNC_FLAG(infoRec);
-}
-
-void
-XAAFillMono8x8PatternRects(ScrnInfoPtr pScrn,
-                           int fg, int bg, int rop,
-                           unsigned int planemask,
-                           int nBox,
-                           BoxPtr pBox,
-                           int pattern0, int pattern1, int xorigin, int yorigin)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    int patx = pattern0, paty = pattern1;
-    int xorg, yorg;
-    XAACacheInfoPtr pCache = NULL;
-
-    if (!(infoRec->Mono8x8PatternFillFlags & HARDWARE_PATTERN_PROGRAMMED_BITS)) {
-        pCache = (*infoRec->CacheMono8x8Pattern) (pScrn, pattern0, pattern1);
-        patx = pCache->x;
-        paty = pCache->y;
-    }
-
-    (*infoRec->SetupForMono8x8PatternFill) (pScrn, patx, paty,
-                                            fg, bg, rop, planemask);
-
-    while (nBox--) {
-        xorg = (pBox->x1 - xorigin) & 0x07;
-        yorg = (pBox->y1 - yorigin) & 0x07;
-
-        if (!(infoRec->Mono8x8PatternFillFlags &
-              HARDWARE_PATTERN_PROGRAMMED_ORIGIN)) {
-            if (infoRec->Mono8x8PatternFillFlags &
-                HARDWARE_PATTERN_PROGRAMMED_BITS) {
-                patx = pattern0;
-                paty = pattern1;
-                XAARotateMonoPattern(&patx, &paty, xorg, yorg,
-                                     (infoRec->Mono8x8PatternFillFlags &
-                                      BIT_ORDER_IN_BYTE_MSBFIRST));
-                xorg = patx;
-                yorg = paty;
-            }
-            else {
-                int slot = (yorg << 3) + xorg;
-
-                xorg = patx + pCache->offsets[slot].x;
-                yorg = paty + pCache->offsets[slot].y;
-            }
-        }
-
-        (*infoRec->SubsequentMono8x8PatternFillRect) (pScrn,
-                                                      xorg, yorg, pBox->x1,
-                                                      pBox->y1,
-                                                      pBox->x2 - pBox->x1,
-                                                      pBox->y2 - pBox->y1);
-        pBox++;
-    }
-
-    SET_SYNC_FLAG(infoRec);
-}
-
-        /**********************\
-	|  8x8 Color Patterns  |
-	\**********************/
-
-void
-XAAFillColor8x8PatternRectsScreenOrigin(ScrnInfoPtr pScrn,
-                                        int rop,
-                                        unsigned int planemask,
-                                        int nBox,
-                                        BoxPtr pBox,
-                                        int xorigin, int yorigin,
-                                        XAACacheInfoPtr pCache)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    int patx = pCache->x, paty = pCache->y;
-    int xorg = (-xorigin) & 0x07;
-    int yorg = (-yorigin) & 0x07;
-
-    if (!(infoRec->Color8x8PatternFillFlags &
-          HARDWARE_PATTERN_PROGRAMMED_ORIGIN)) {
-        int slot = (yorg << 3) + xorg;
-
-        paty += pCache->offsets[slot].y;
-        patx += pCache->offsets[slot].x;
-        xorg = patx;
-        yorg = paty;
-    }
-
-    (*infoRec->SetupForColor8x8PatternFill) (pScrn, patx, paty,
-                                             rop, planemask,
-                                             pCache->trans_color);
-
-    while (nBox--) {
-        (*infoRec->SubsequentColor8x8PatternFillRect) (pScrn,
-                                                       xorg, yorg, pBox->x1,
-                                                       pBox->y1,
-                                                       pBox->x2 - pBox->x1,
-                                                       pBox->y2 - pBox->y1);
-        pBox++;
-    }
-    SET_SYNC_FLAG(infoRec);
-}
-
-void
-XAAFillColor8x8PatternRects(ScrnInfoPtr pScrn,
-                            int rop,
-                            unsigned int planemask,
-                            int nBox,
-                            BoxPtr pBox,
-                            int xorigin, int yorigin, XAACacheInfoPtr pCache)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    int xorg, yorg;
-
-    (*infoRec->SetupForColor8x8PatternFill) (pScrn, pCache->x, pCache->y,
-                                             rop, planemask,
-                                             pCache->trans_color);
-
-    while (nBox--) {
-        xorg = (pBox->x1 - xorigin) & 0x07;
-        yorg = (pBox->y1 - yorigin) & 0x07;
-
-        if (!(infoRec->Color8x8PatternFillFlags &
-              HARDWARE_PATTERN_PROGRAMMED_ORIGIN)) {
-            int slot = (yorg << 3) + xorg;
-
-            yorg = pCache->y + pCache->offsets[slot].y;
-            xorg = pCache->x + pCache->offsets[slot].x;
-        }
-
-        (*infoRec->SubsequentColor8x8PatternFillRect) (pScrn,
-                                                       xorg, yorg, pBox->x1,
-                                                       pBox->y1,
-                                                       pBox->x2 - pBox->x1,
-                                                       pBox->y2 - pBox->y1);
-        pBox++;
-    }
-
-    SET_SYNC_FLAG(infoRec);
-}
-
-        /***************\
-	|  Cache Blits  |
-	\***************/
-
-void
-XAAFillCacheBltRects(ScrnInfoPtr pScrn,
-                     int rop,
-                     unsigned int planemask,
-                     int nBox,
-                     BoxPtr pBox, int xorg, int yorg, XAACacheInfoPtr pCache)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    int x, y, phaseY, phaseX, skipleft, height, width, w, blit_w, blit_h;
-
-    (*infoRec->SetupForScreenToScreenCopy) (pScrn, 1, 1, rop, planemask,
-                                            pCache->trans_color);
-
-    while (nBox--) {
-        y = pBox->y1;
-        phaseY = (y - yorg) % pCache->orig_h;
-        if (phaseY < 0)
-            phaseY += pCache->orig_h;
-        phaseX = (pBox->x1 - xorg) % pCache->orig_w;
-        if (phaseX < 0)
-            phaseX += pCache->orig_w;
-        height = pBox->y2 - y;
-        width = pBox->x2 - pBox->x1;
-
-#if 0
-        if (rop == GXcopy) {
-            while (1) {
-                w = width;
-                skipleft = phaseX;
-                x = pBox->x1;
-                blit_h = pCache->h - phaseY;
-                if (blit_h > height)
-                    blit_h = height;
-
-                while (1) {
-                    blit_w = pCache->w - skipleft;
-                    if (blit_w > w)
-                        blit_w = w;
-                    (*infoRec->SubsequentScreenToScreenCopy) (pScrn,
-                                                              pCache->x +
-                                                              skipleft,
-                                                              pCache->y +
-                                                              phaseY, x, y,
-                                                              blit_w, blit_h);
-                    w -= blit_w;
-                    if (!w)
-                        break;
-                    x += blit_w;
-                    skipleft = (skipleft + blit_w) % pCache->orig_w;
-                    if (blit_w >= pCache->orig_w)
-                        break;
-                }
-
-                /* Expand horizontally */
-                if (w) {
-                    skipleft -= phaseX;
-                    if (skipleft < 0)
-                        skipleft += pCache->orig_w;
-                    blit_w = x - pBox->x1 - skipleft;
-                    while (w) {
-                        if (blit_w > w)
-                            blit_w = w;
-                        (*infoRec->SubsequentScreenToScreenCopy) (pScrn,
-                                                                  pBox->x1 +
-                                                                  skipleft, y,
-                                                                  x, y, blit_w,
-                                                                  blit_h);
-                        w -= blit_w;
-                        x += blit_w;
-                        blit_w <<= 1;
-                    }
-                }
-
-                height -= blit_h;
-                if (!height)
-                    break;
-                y += blit_h;
-                phaseY = (phaseY + blit_h) % pCache->orig_h;
-                if (blit_h >= pCache->orig_h)
-                    break;
-            }
-
-            /* Expand vertically */
-            if (height) {
-                blit_w = pBox->x2 - pBox->x1;
-                phaseY -= (pBox->y1 - yorg) % pCache->orig_h;
-                if (phaseY < 0)
-                    phaseY += pCache->orig_h;
-                blit_h = y - pBox->y1 - phaseY;
-                while (height) {
-                    if (blit_h > height)
-                        blit_h = height;
-                    (*infoRec->SubsequentScreenToScreenCopy) (pScrn, pBox->x1,
-                                                              pBox->y1 + phaseY,
-                                                              pBox->x1, y,
-                                                              blit_w, blit_h);
-                    height -= blit_h;
-                    y += blit_h;
-                    blit_h <<= 1;
-                }
-            }
-        }
-        else
-#endif
-        {
-            while (1) {
-                w = width;
-                skipleft = phaseX;
-                x = pBox->x1;
-                blit_h = pCache->h - phaseY;
-                if (blit_h > height)
-                    blit_h = height;
-
-                while (1) {
-                    blit_w = pCache->w - skipleft;
-                    if (blit_w > w)
-                        blit_w = w;
-                    (*infoRec->SubsequentScreenToScreenCopy) (pScrn,
-                                                              pCache->x +
-                                                              skipleft,
-                                                              pCache->y +
-                                                              phaseY, x, y,
-                                                              blit_w, blit_h);
-                    w -= blit_w;
-                    if (!w)
-                        break;
-                    x += blit_w;
-                    skipleft = (skipleft + blit_w) % pCache->orig_w;
-                }
-                height -= blit_h;
-                if (!height)
-                    break;
-                y += blit_h;
-                phaseY = (phaseY + blit_h) % pCache->orig_h;
-            }
-        }
-        pBox++;
-    }
-
-    SET_SYNC_FLAG(infoRec);
-}
-
-        /*******************\
-	|  Cache Expansion  |
-	\*******************/
-
-void
-XAAFillCacheExpandRects(ScrnInfoPtr pScrn,
-                        int fg, int bg, int rop,
-                        unsigned int planemask,
-                        int nBox,
-                        BoxPtr pBox, int xorg, int yorg, PixmapPtr pPix)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    int x, y, phaseY, phaseX, skipleft, height, width, w, blit_w, blit_h;
-    int cacheWidth;
-    XAACacheInfoPtr pCache;
-
-    pCache = (*infoRec->CacheMonoStipple) (pScrn, pPix);
-
-    cacheWidth = (pCache->w * pScrn->bitsPerPixel) /
-        infoRec->CacheColorExpandDensity;
-
-    (*infoRec->SetupForScreenToScreenColorExpandFill) (pScrn, fg, bg, rop,
-                                                       planemask);
-
-    while (nBox--) {
-        y = pBox->y1;
-        phaseY = (y - yorg) % pCache->orig_h;
-        if (phaseY < 0)
-            phaseY += pCache->orig_h;
-        phaseX = (pBox->x1 - xorg) % pCache->orig_w;
-        if (phaseX < 0)
-            phaseX += pCache->orig_w;
-        height = pBox->y2 - y;
-        width = pBox->x2 - pBox->x1;
-
-        while (1) {
-            w = width;
-            skipleft = phaseX;
-            x = pBox->x1;
-            blit_h = pCache->h - phaseY;
-            if (blit_h > height)
-                blit_h = height;
-
-            while (1) {
-                blit_w = cacheWidth - skipleft;
-                if (blit_w > w)
-                    blit_w = w;
-                (*infoRec->SubsequentScreenToScreenColorExpandFill) (pScrn, x,
-                                                                     y, blit_w,
-                                                                     blit_h,
-                                                                     pCache->x,
-                                                                     pCache->y +
-                                                                     phaseY,
-                                                                     skipleft);
-                w -= blit_w;
-                if (!w)
-                    break;
-                x += blit_w;
-                skipleft = (skipleft + blit_w) % pCache->orig_w;
-            }
-            height -= blit_h;
-            if (!height)
-                break;
-            y += blit_h;
-            phaseY = (phaseY + blit_h) % pCache->orig_h;
-        }
-        pBox++;
-    }
-
-    SET_SYNC_FLAG(infoRec);
-}
-
-        /******************\
-	|   Image Writes   |
-	\******************/
-
-/*  This requires all LEFT_EDGE clipping.  You get too many problems
-    with reading past the edge of the pattern otherwise */
-
-static void
-WriteColumn(ScrnInfoPtr pScrn,
-            unsigned char *pSrc,
-            int x, int y, int w, int h,
-            int xoff, int yoff, int pHeight, int srcwidth, int Bpp)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    unsigned char *src;
-    Bool PlusOne = FALSE;
-    int skipleft, dwords;
-
-    pSrc += (Bpp * xoff);
-
-    if ((skipleft = (long) pSrc & 0x03L)) {
-        if (Bpp == 3)
-            skipleft = 4 - skipleft;
-        else
-            skipleft /= Bpp;
-
-        x -= skipleft;
-        w += skipleft;
-
-        if (Bpp == 3)
-            pSrc -= 3 * skipleft;
-        else                    /* is this Alpha friendly ? */
-            pSrc = (unsigned char *) ((long) pSrc & ~0x03L);
-    }
-
-    src = pSrc + (yoff * srcwidth);
-
-    dwords = bytes_to_int32(w * Bpp);
-
-    if ((infoRec->ImageWriteFlags & CPU_TRANSFER_PAD_QWORD) &&
-        ((dwords * h) & 0x01)) {
-        PlusOne = TRUE;
-    }
-
-    (*infoRec->SubsequentImageWriteRect) (pScrn, x, y, w, h, skipleft);
-
-    if (dwords > infoRec->ImageWriteRange) {
-        while (h--) {
-            XAAMoveDWORDS_FixedBase((CARD32 *) infoRec->ImageWriteBase,
-                                    (CARD32 *) src, dwords);
-            src += srcwidth;
-            yoff++;
-            if (yoff >= pHeight) {
-                yoff = 0;
-                src = pSrc;
-            }
-        }
-    }
-    else {
-        if (srcwidth == (dwords << 2)) {
-            int maxLines = infoRec->ImageWriteRange / dwords;
-            int step;
-
-            while (h) {
-                step = pHeight - yoff;
-                if (step > maxLines)
-                    step = maxLines;
-                if (step > h)
-                    step = h;
-
-                XAAMoveDWORDS((CARD32 *) infoRec->ImageWriteBase,
-                              (CARD32 *) src, dwords * step);
-
-                src += (srcwidth * step);
-                yoff += step;
-                if (yoff >= pHeight) {
-                    yoff = 0;
-                    src = pSrc;
-                }
-                h -= step;
-            }
-        }
-        else {
-            while (h--) {
-                XAAMoveDWORDS((CARD32 *) infoRec->ImageWriteBase,
-                              (CARD32 *) src, dwords);
-                src += srcwidth;
-                yoff++;
-                if (yoff >= pHeight) {
-                    yoff = 0;
-                    src = pSrc;
-                }
-            }
-        }
-    }
-
-    if (PlusOne) {
-        CARD32 *base = (CARD32 *) infoRec->ImageWriteBase;
-
-        *base = 0x00000000;
-    }
-}
-
-void
-XAAFillImageWriteRects(ScrnInfoPtr pScrn,
-                       int rop,
-                       unsigned int planemask,
-                       int nBox,
-                       BoxPtr pBox, int xorg, int yorg, PixmapPtr pPix)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    int x, phaseY, phaseX, height, width, blit_w;
-    int pHeight = pPix->drawable.height;
-    int pWidth = pPix->drawable.width;
-    int Bpp = pPix->drawable.bitsPerPixel >> 3;
-    int srcwidth = pPix->devKind;
-
-    (*infoRec->SetupForImageWrite) (pScrn, rop, planemask, -1,
-                                    pPix->drawable.bitsPerPixel,
-                                    pPix->drawable.depth);
-
-    while (nBox--) {
-        x = pBox->x1;
-        phaseY = (pBox->y1 - yorg) % pHeight;
-        if (phaseY < 0)
-            phaseY += pHeight;
-        phaseX = (x - xorg) % pWidth;
-        if (phaseX < 0)
-            phaseX += pWidth;
-        height = pBox->y2 - pBox->y1;
-        width = pBox->x2 - x;
-
-        while (1) {
-            blit_w = pWidth - phaseX;
-            if (blit_w > width)
-                blit_w = width;
-
-            WriteColumn(pScrn, pPix->devPrivate.ptr, x, pBox->y1,
-                        blit_w, height, phaseX, phaseY, pHeight, srcwidth, Bpp);
-
-            width -= blit_w;
-            if (!width)
-                break;
-            x += blit_w;
-            phaseX = (phaseX + blit_w) % pWidth;
-        }
-        pBox++;
-    }
-
-    if (infoRec->ImageWriteFlags & SYNC_AFTER_IMAGE_WRITE)
-        (*infoRec->Sync) (pScrn);
-    else
-        SET_SYNC_FLAG(infoRec);
-}
-
-        /*************\
-	|  Utilities  |
-	\*************/
-
-void
-XAAClipAndRenderRects(GCPtr pGC,
-                      ClipAndRenderRectsFunc BoxFunc,
-                      int nrectFill, xRectangle *prect, int xorg, int yorg)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    int Right, Bottom, MaxBoxes;
-    BoxPtr pextent, pboxClipped, pboxClippedBase;
-
-    MaxBoxes = infoRec->PreAllocSize / sizeof(BoxRec);
-    pboxClippedBase = (BoxPtr) infoRec->PreAllocMem;
-    pboxClipped = pboxClippedBase;
-
-    if (RegionNumRects(pGC->pCompositeClip) == 1) {
-        pextent = RegionRects(pGC->pCompositeClip);
-        while (nrectFill--) {
-            pboxClipped->x1 = max(pextent->x1, prect->x);
-            pboxClipped->y1 = max(pextent->y1, prect->y);
-
-            Right = (int) prect->x + (int) prect->width;
-            pboxClipped->x2 = min(pextent->x2, Right);
-
-            Bottom = (int) prect->y + (int) prect->height;
-            pboxClipped->y2 = min(pextent->y2, Bottom);
-
-            prect++;
-            if ((pboxClipped->x1 < pboxClipped->x2) &&
-                (pboxClipped->y1 < pboxClipped->y2)) {
-                pboxClipped++;
-                if (pboxClipped >= (pboxClippedBase + MaxBoxes)) {
-                    (*BoxFunc) (pGC, MaxBoxes, pboxClippedBase, xorg, yorg);
-                    pboxClipped = pboxClippedBase;
-                }
-            }
-        }
-    }
-    else {
-        pextent = RegionExtents(pGC->pCompositeClip);
-        while (nrectFill--) {
-            int n;
-            BoxRec box, *pbox;
-
-            box.x1 = max(pextent->x1, prect->x);
-            box.y1 = max(pextent->y1, prect->y);
-
-            Right = (int) prect->x + (int) prect->width;
-            box.x2 = min(pextent->x2, Right);
-
-            Bottom = (int) prect->y + (int) prect->height;
-            box.y2 = min(pextent->y2, Bottom);
-
-            prect++;
-
-            if ((box.x1 >= box.x2) || (box.y1 >= box.y2))
-                continue;
-
-            n = RegionNumRects(pGC->pCompositeClip);
-            pbox = RegionRects(pGC->pCompositeClip);
-
-            /* clip the rectangle to each box in the clip region
-               this is logically equivalent to calling Intersect()
-             */
-            while (n--) {
-                pboxClipped->x1 = max(box.x1, pbox->x1);
-                pboxClipped->y1 = max(box.y1, pbox->y1);
-                pboxClipped->x2 = min(box.x2, pbox->x2);
-                pboxClipped->y2 = min(box.y2, pbox->y2);
-                pbox++;
-
-                /* see if clipping left anything */
-                if (pboxClipped->x1 < pboxClipped->x2 &&
-                    pboxClipped->y1 < pboxClipped->y2) {
-                    pboxClipped++;
-                    if (pboxClipped >= (pboxClippedBase + MaxBoxes)) {
-                        (*BoxFunc) (pGC, MaxBoxes, pboxClippedBase, xorg, yorg);
-                        pboxClipped = pboxClippedBase;
-                    }
-                }
-            }
-        }
-    }
-
-    if (pboxClipped != pboxClippedBase)
-        (*BoxFunc) (pGC, pboxClipped - pboxClippedBase, pboxClippedBase,
-                    xorg, yorg);
-}
-
-int
-XAAGetRectClipBoxes(GCPtr pGC,
-                    BoxPtr pboxClippedBase,
-                    int nrectFill, xRectangle *prectInit)
-{
-    int Right, Bottom;
-    BoxPtr pextent, pboxClipped = pboxClippedBase;
-    xRectangle *prect = prectInit;
-    RegionPtr prgnClip = pGC->pCompositeClip;
-
-    if (RegionNumRects(prgnClip) == 1) {
-        pextent = RegionRects(prgnClip);
-        while (nrectFill--) {
-            pboxClipped->x1 = max(pextent->x1, prect->x);
-            pboxClipped->y1 = max(pextent->y1, prect->y);
-
-            Right = (int) prect->x + (int) prect->width;
-            pboxClipped->x2 = min(pextent->x2, Right);
-
-            Bottom = (int) prect->y + (int) prect->height;
-            pboxClipped->y2 = min(pextent->y2, Bottom);
-
-            prect++;
-            if ((pboxClipped->x1 < pboxClipped->x2) &&
-                (pboxClipped->y1 < pboxClipped->y2)) {
-                pboxClipped++;
-            }
-        }
-    }
-    else {
-        pextent = RegionExtents(prgnClip);
-        while (nrectFill--) {
-            int n;
-            BoxRec box, *pbox;
-
-            box.x1 = max(pextent->x1, prect->x);
-            box.y1 = max(pextent->y1, prect->y);
-
-            Right = (int) prect->x + (int) prect->width;
-            box.x2 = min(pextent->x2, Right);
-
-            Bottom = (int) prect->y + (int) prect->height;
-            box.y2 = min(pextent->y2, Bottom);
-
-            prect++;
-
-            if ((box.x1 >= box.x2) || (box.y1 >= box.y2))
-                continue;
-
-            n = RegionNumRects(prgnClip);
-            pbox = RegionRects(prgnClip);
-
-            /* clip the rectangle to each box in the clip region
-               this is logically equivalent to calling Intersect()
-             */
-            while (n--) {
-                pboxClipped->x1 = max(box.x1, pbox->x1);
-                pboxClipped->y1 = max(box.y1, pbox->y1);
-                pboxClipped->x2 = min(box.x2, pbox->x2);
-                pboxClipped->y2 = min(box.y2, pbox->y2);
-                pbox++;
-
-                /* see if clipping left anything */
-                if (pboxClipped->x1 < pboxClipped->x2 &&
-                    pboxClipped->y1 < pboxClipped->y2) {
-                    pboxClipped++;
-                }
-            }
-        }
-    }
-
-    return pboxClipped - pboxClippedBase;
-}
diff --git a/hw/xfree86/xaa/xaaGC.c b/hw/xfree86/xaa/xaaGC.c
deleted file mode 100644
index d55f1e4..0000000
--- a/hw/xfree86/xaa/xaaGC.c
+++ /dev/null
@@ -1,564 +0,0 @@
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include <string.h>
-
-#include "misc.h"
-#include "xf86.h"
-#include "xf86_OSproc.h"
-
-#include <X11/X.h>
-#include "scrnintstr.h"
-#include "xf86str.h"
-#include "xaa.h"
-#include "xaalocal.h"
-#include "migc.h"
-#include "gcstruct.h"
-#include "pixmapstr.h"
-#include "xaawrap.h"
-
-static void XAAValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDraw);
-static void XAAChangeGC(GCPtr pGC, unsigned long mask);
-static void XAACopyGC(GCPtr pGCSrc, unsigned long mask, GCPtr pGCDst);
-static void XAADestroyGC(GCPtr pGC);
-static void XAAChangeClip(GCPtr pGC, int type, pointer pvalue, int nrects);
-static void XAADestroyClip(GCPtr pGC);
-static void XAACopyClip(GCPtr pgcDst, GCPtr pgcSrc);
-
-GCFuncs XAAGCFuncs = {
-    XAAValidateGC, XAAChangeGC, XAACopyGC, XAADestroyGC,
-    XAAChangeClip, XAADestroyClip, XAACopyClip
-};
-
-extern GCOps XAAPixmapOps;
-
-Bool
-XAACreateGC(GCPtr pGC)
-{
-    ScreenPtr pScreen = pGC->pScreen;
-    XAAGCPtr pGCPriv = (XAAGCPtr) dixLookupPrivate(&pGC->devPrivates,
-                                                   XAAGetGCKey());
-    Bool ret;
-
-    XAA_SCREEN_PROLOGUE(pScreen, CreateGC);
-
-    if ((ret = (*pScreen->CreateGC) (pGC))) {
-        pGCPriv->wrapOps = NULL;
-        pGCPriv->wrapFuncs = pGC->funcs;
-        pGCPriv->XAAOps = &XAAFallbackOps;
-        pGC->funcs = &XAAGCFuncs;
-    }
-
-    XAA_SCREEN_EPILOGUE(pScreen, CreateGC, XAACreateGC);
-
-    return ret;
-}
-
-static void
-XAAValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDraw)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-
-    XAA_GC_FUNC_PROLOGUE(pGC);
-
-    (*pGC->funcs->ValidateGC) (pGC, changes, pDraw);
-
-    if ((changes & GCPlaneMask) &&
-        ((pGC->planemask & infoRec->FullPlanemasks[pGC->depth - 1]) ==
-         infoRec->FullPlanemasks[pGC->depth - 1])) {
-        pGC->planemask = ~0;
-    }
-
-    if (pGC->depth != 32) {
-        /* 0xffffffff is reserved for transparency */
-        if (pGC->bgPixel == 0xffffffff)
-            pGC->bgPixel = 0x7fffffff;
-        if (pGC->fgPixel == 0xffffffff)
-            pGC->fgPixel = 0x7fffffff;
-    }
-
-    if ((pDraw->type == DRAWABLE_PIXMAP) && !IS_OFFSCREEN_PIXMAP(pDraw)) {
-        pGCPriv->flags = OPS_ARE_PIXMAP;
-        pGCPriv->changes |= changes;
-
-        /* make sure we're not using videomemory pixmaps to render
-           onto system memory drawables */
-
-        if ((pGC->fillStyle == FillTiled) &&
-            IS_OFFSCREEN_PIXMAP(pGC->tile.pixmap) &&
-            !OFFSCREEN_PIXMAP_LOCKED(pGC->tile.pixmap)) {
-
-            XAAPixmapPtr pPriv = XAA_GET_PIXMAP_PRIVATE(pGC->tile.pixmap);
-            FBAreaPtr area = pPriv->offscreenArea;
-
-            XAARemoveAreaCallback(area);        /* clobbers pPriv->offscreenArea */
-            xf86FreeOffscreenArea(area);
-        }
-    }
-    else if (!infoRec->pScrn->vtSema && (pDraw->type == DRAWABLE_WINDOW)) {
-        pGCPriv->flags = 0;
-        pGCPriv->changes |= changes;
-    }
-    else {
-        if (!(pGCPriv->flags & OPS_ARE_ACCEL)) {
-            changes |= pGCPriv->changes;
-            pGCPriv->changes = 0;
-        }
-        pGCPriv->flags = OPS_ARE_ACCEL;
-
-#if 1
-        /* Ugh.  If we can't use the blitter on offscreen pixmaps used
-           as tiles, then we need to move them out as cfb can't handle
-           tiles with non-zero origins */
-
-        if ((pGC->fillStyle == FillTiled) &&
-            IS_OFFSCREEN_PIXMAP(pGC->tile.pixmap) &&
-            (DO_PIXMAP_COPY != (*infoRec->TiledFillChooser) (pGC))) {
-
-            XAAPixmapPtr pPriv = XAA_GET_PIXMAP_PRIVATE(pGC->tile.pixmap);
-            FBAreaPtr area = pPriv->offscreenArea;
-
-            XAARemoveAreaCallback(area);        /* clobbers pPriv->offscreenArea */
-            xf86FreeOffscreenArea(area);
-        }
-#endif
-    }
-
-    XAA_GC_FUNC_EPILOGUE(pGC);
-
-    if (!(pGCPriv->flags & OPS_ARE_ACCEL))
-        return;
-
-    if ((changes & GCTile) && !pGC->tileIsPixel && pGC->tile.pixmap) {
-        XAAPixmapPtr pixPriv = XAA_GET_PIXMAP_PRIVATE(pGC->tile.pixmap);
-
-        if (pixPriv->flags & DIRTY) {
-            pixPriv->flags &= ~(DIRTY | REDUCIBILITY_MASK);
-            pGC->tile.pixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER;
-        }
-    }
-    if ((changes & GCStipple) && pGC->stipple) {
-        XAAPixmapPtr pixPriv = XAA_GET_PIXMAP_PRIVATE(pGC->stipple);
-
-        if (pixPriv->flags & DIRTY) {
-            pixPriv->flags &= ~(DIRTY | REDUCIBILITY_MASK);
-            pGC->stipple->drawable.serialNumber = NEXT_SERIAL_NUMBER;
-        }
-    }
-
-    /* If our Ops are still the default ones we need to allocate new ones */
-    if (pGC->ops == &XAAFallbackOps) {
-        if (!(pGCPriv->XAAOps = malloc(sizeof(GCOps)))) {
-            pGCPriv->XAAOps = &XAAFallbackOps;
-            return;
-        }
-        /* make a modifiable copy of the default ops */
-        memcpy(pGCPriv->XAAOps, &XAAFallbackOps, sizeof(GCOps));
-        pGC->ops = pGCPriv->XAAOps;
-        changes = ~0;
-    }
-
-    if (!changes)
-        return;
-
-    if ((changes & GCDashList) && infoRec->ComputeDash)
-        infoRec->ComputeDash(pGC);
-
-    if (changes & infoRec->FillSpansMask)
-        (*infoRec->ValidateFillSpans) (pGC, changes, pDraw);
-
-    if (changes & infoRec->SetSpansMask)
-        (*infoRec->ValidateSetSpans) (pGC, changes, pDraw);
-
-    if (changes & infoRec->PutImageMask)
-        (*infoRec->ValidatePutImage) (pGC, changes, pDraw);
-
-    if (changes & infoRec->CopyAreaMask)
-        (*infoRec->ValidateCopyArea) (pGC, changes, pDraw);
-
-    if (changes & infoRec->CopyPlaneMask)
-        (*infoRec->ValidateCopyPlane) (pGC, changes, pDraw);
-
-    if (changes & infoRec->PolyPointMask)
-        (*infoRec->ValidatePolyPoint) (pGC, changes, pDraw);
-
-    if (changes & infoRec->PolylinesMask)
-        (*infoRec->ValidatePolylines) (pGC, changes, pDraw);
-
-    if (changes & infoRec->PolySegmentMask)
-        (*infoRec->ValidatePolySegment) (pGC, changes, pDraw);
-
-    if (changes & infoRec->PolyRectangleMask)
-        (*infoRec->ValidatePolyRectangle) (pGC, changes, pDraw);
-
-    if (changes & infoRec->PolyArcMask)
-        (*infoRec->ValidatePolyArc) (pGC, changes, pDraw);
-
-    if (changes & infoRec->FillPolygonMask)
-        (*infoRec->ValidateFillPolygon) (pGC, changes, pDraw);
-
-    if (changes & infoRec->PolyFillRectMask)
-        (*infoRec->ValidatePolyFillRect) (pGC, changes, pDraw);
-
-    if (changes & infoRec->PolyFillArcMask)
-        (*infoRec->ValidatePolyFillArc) (pGC, changes, pDraw);
-
-    if (changes & infoRec->PolyGlyphBltMask)
-        (*infoRec->ValidatePolyGlyphBlt) (pGC, changes, pDraw);
-
-    if (changes & infoRec->ImageGlyphBltMask)
-        (*infoRec->ValidateImageGlyphBlt) (pGC, changes, pDraw);
-
-    if (changes & infoRec->PolyText8Mask)
-        (*infoRec->ValidatePolyText8) (pGC, changes, pDraw);
-
-    if (changes & infoRec->PolyText16Mask)
-        (*infoRec->ValidatePolyText16) (pGC, changes, pDraw);
-
-    if (changes & infoRec->ImageText8Mask)
-        (*infoRec->ValidateImageText8) (pGC, changes, pDraw);
-
-    if (changes & infoRec->ImageText16Mask)
-        (*infoRec->ValidateImageText16) (pGC, changes, pDraw);
-
-    if (changes & infoRec->PushPixelsMask)
-        (*infoRec->ValidatePushPixels) (pGC, changes, pDraw);
-}
-
-static void
-XAADestroyGC(GCPtr pGC)
-{
-    XAA_GC_FUNC_PROLOGUE(pGC);
-
-    if (pGCPriv->XAAOps != &XAAFallbackOps)
-        free(pGCPriv->XAAOps);
-
-    free(pGCPriv->DashPattern);
-    pGCPriv->flags = 0;
-
-    (*pGC->funcs->DestroyGC) (pGC);
-    XAA_GC_FUNC_EPILOGUE(pGC);
-}
-
-static void
-XAAChangeGC(GCPtr pGC, unsigned long mask)
-{
-    XAA_GC_FUNC_PROLOGUE(pGC);
-    (*pGC->funcs->ChangeGC) (pGC, mask);
-    XAA_GC_FUNC_EPILOGUE(pGC);
-
-    /* we have to assume that shared memory pixmaps are dirty 
-       because we can't wrap all operations on them */
-
-    if ((mask & GCTile) && !pGC->tileIsPixel &&
-        PIXMAP_IS_SHARED(pGC->tile.pixmap)) {
-        XAAPixmapPtr pPixPriv = XAA_GET_PIXMAP_PRIVATE(pGC->tile.pixmap);
-
-        pPixPriv->flags |= DIRTY;
-    }
-
-    if ((mask & GCStipple) && PIXMAP_IS_SHARED(pGC->stipple)) {
-        XAAPixmapPtr pPixPriv = XAA_GET_PIXMAP_PRIVATE(pGC->stipple);
-
-        pPixPriv->flags |= DIRTY;
-    }
-}
-
-static void
-XAACopyGC(GCPtr pGCSrc, unsigned long mask, GCPtr pGCDst)
-{
-    XAA_GC_FUNC_PROLOGUE(pGCDst);
-    (*pGCDst->funcs->CopyGC) (pGCSrc, mask, pGCDst);
-    XAA_GC_FUNC_EPILOGUE(pGCDst);
-}
-
-static void
-XAAChangeClip(GCPtr pGC, int type, pointer pvalue, int nrects)
-{
-    XAA_GC_FUNC_PROLOGUE(pGC);
-    (*pGC->funcs->ChangeClip) (pGC, type, pvalue, nrects);
-    XAA_GC_FUNC_EPILOGUE(pGC);
-}
-
-static void
-XAACopyClip(GCPtr pgcDst, GCPtr pgcSrc)
-{
-    XAA_GC_FUNC_PROLOGUE(pgcDst);
-    (*pgcDst->funcs->CopyClip) (pgcDst, pgcSrc);
-    XAA_GC_FUNC_EPILOGUE(pgcDst);
-}
-
-static void
-XAADestroyClip(GCPtr pGC)
-{
-    XAA_GC_FUNC_PROLOGUE(pGC);
-    (*pGC->funcs->DestroyClip) (pGC);
-    XAA_GC_FUNC_EPILOGUE(pGC);
-}
-
-/**** Pixmap Wrappers ****/
-
-static void
-XAAFillSpansPixmap(DrawablePtr pDraw,
-                   GC * pGC,
-                   int nInit, DDXPointPtr pptInit, int *pwidthInit, int fSorted)
-{
-    XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw);
-    (*pGC->ops->FillSpans) (pDraw, pGC, nInit, pptInit, pwidthInit, fSorted);
-    XAA_PIXMAP_OP_EPILOGUE(pGC);
-}
-
-static void
-XAASetSpansPixmap(DrawablePtr pDraw,
-                  GCPtr pGC,
-                  char *pcharsrc,
-                  register DDXPointPtr ppt,
-                  int *pwidth, int nspans, int fSorted)
-{
-    XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw);
-    (*pGC->ops->SetSpans) (pDraw, pGC, pcharsrc, ppt, pwidth, nspans, fSorted);
-    XAA_PIXMAP_OP_EPILOGUE(pGC);
-}
-
-static void
-XAAPutImagePixmap(DrawablePtr pDraw,
-                  GCPtr pGC,
-                  int depth,
-                  int x, int y, int w, int h,
-                  int leftPad, int format, char *pImage)
-{
-    XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw);
-    (*pGC->ops->PutImage) (pDraw, pGC, depth, x, y, w, h,
-                           leftPad, format, pImage);
-    XAA_PIXMAP_OP_EPILOGUE(pGC);
-}
-
-static RegionPtr
-XAACopyAreaPixmap(DrawablePtr pSrc,
-                  DrawablePtr pDst,
-                  GC * pGC,
-                  int srcx, int srcy, int width, int height, int dstx, int dsty)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    RegionPtr ret;
-
-    if (infoRec->pScrn->vtSema &&
-        ((pSrc->type == DRAWABLE_WINDOW) || IS_OFFSCREEN_PIXMAP(pSrc))) {
-        if (infoRec->ReadPixmap && (pGC->alu == GXcopy) &&
-            (pSrc->bitsPerPixel == pDst->bitsPerPixel) &&
-            ((pGC->planemask & infoRec->FullPlanemasks[pSrc->depth - 1])
-             == infoRec->FullPlanemasks[pSrc->depth - 1])) {
-            XAAPixmapPtr pixPriv = XAA_GET_PIXMAP_PRIVATE((PixmapPtr) (pDst));
-
-            pixPriv->flags |= DIRTY;
-
-            return (XAABitBlt(pSrc, pDst, pGC,
-                              srcx, srcy, width, height, dstx, dsty,
-                              XAADoImageRead, 0L));
-        }
-        else if (infoRec->NeedToSync) {
-            (*infoRec->Sync) (infoRec->pScrn);
-            infoRec->NeedToSync = FALSE;
-        }
-    }
-
-    {
-        XAA_PIXMAP_OP_PROLOGUE(pGC, pDst);
-        ret = (*pGC->ops->CopyArea) (pSrc, pDst,
-                                     pGC, srcx, srcy, width, height, dstx,
-                                     dsty);
-        XAA_PIXMAP_OP_EPILOGUE(pGC);
-    }
-    return ret;
-}
-
-static RegionPtr
-XAACopyPlanePixmap(DrawablePtr pSrc,
-                   DrawablePtr pDst,
-                   GCPtr pGC,
-                   int srcx, int srcy,
-                   int width, int height,
-                   int dstx, int dsty, unsigned long bitPlane)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    RegionPtr ret;
-
-    XAA_PIXMAP_OP_PROLOGUE(pGC, pDst);
-
-    if (infoRec->pScrn->vtSema &&
-        ((pSrc->type == DRAWABLE_WINDOW) || IS_OFFSCREEN_PIXMAP(pSrc))) {
-        if (infoRec->NeedToSync) {
-            (*infoRec->Sync) (infoRec->pScrn);
-            infoRec->NeedToSync = FALSE;
-        }
-    }
-
-    ret = (*pGC->ops->CopyPlane) (pSrc, pDst,
-                                  pGC, srcx, srcy, width, height, dstx, dsty,
-                                  bitPlane);
-    XAA_PIXMAP_OP_EPILOGUE(pGC);
-    return ret;
-}
-
-static void
-XAAPolyPointPixmap(DrawablePtr pDraw,
-                   GCPtr pGC, int mode, int npt, xPoint * pptInit)
-{
-    XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw);
-    (*pGC->ops->PolyPoint) (pDraw, pGC, mode, npt, pptInit);
-    XAA_PIXMAP_OP_EPILOGUE(pGC);
-}
-
-static void
-XAAPolylinesPixmap(DrawablePtr pDraw,
-                   GCPtr pGC, int mode, int npt, DDXPointPtr pptInit)
-{
-    XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw);
-    (*pGC->ops->Polylines) (pDraw, pGC, mode, npt, pptInit);
-    XAA_PIXMAP_OP_EPILOGUE(pGC);
-}
-
-static void
-XAAPolySegmentPixmap(DrawablePtr pDraw, GCPtr pGC, int nseg, xSegment * pSeg)
-{
-    XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw);
-    (*pGC->ops->PolySegment) (pDraw, pGC, nseg, pSeg);
-    XAA_PIXMAP_OP_EPILOGUE(pGC);
-}
-
-static void
-XAAPolyRectanglePixmap(DrawablePtr pDraw,
-                       GCPtr pGC, int nRectsInit, xRectangle *pRectsInit)
-{
-    XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw);
-    (*pGC->ops->PolyRectangle) (pDraw, pGC, nRectsInit, pRectsInit);
-    XAA_PIXMAP_OP_EPILOGUE(pGC);
-}
-
-static void
-XAAPolyArcPixmap(DrawablePtr pDraw, GCPtr pGC, int narcs, xArc * parcs)
-{
-    XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw);
-    (*pGC->ops->PolyArc) (pDraw, pGC, narcs, parcs);
-    XAA_PIXMAP_OP_EPILOGUE(pGC);
-}
-
-static void
-XAAFillPolygonPixmap(DrawablePtr pDraw,
-                     GCPtr pGC,
-                     int shape, int mode, int count, DDXPointPtr ptsIn)
-{
-    XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw);
-    (*pGC->ops->FillPolygon) (pDraw, pGC, shape, mode, count, ptsIn);
-    XAA_PIXMAP_OP_EPILOGUE(pGC);
-}
-
-static void
-XAAPolyFillRectPixmap(DrawablePtr pDraw,
-                      GCPtr pGC, int nrectFill, xRectangle *prectInit)
-{
-    XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw);
-    (*pGC->ops->PolyFillRect) (pDraw, pGC, nrectFill, prectInit);
-    XAA_PIXMAP_OP_EPILOGUE(pGC);
-}
-
-static void
-XAAPolyFillArcPixmap(DrawablePtr pDraw, GCPtr pGC, int narcs, xArc * parcs)
-{
-    XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw);
-    (*pGC->ops->PolyFillArc) (pDraw, pGC, narcs, parcs);
-    XAA_PIXMAP_OP_EPILOGUE(pGC);
-}
-
-static int
-XAAPolyText8Pixmap(DrawablePtr pDraw,
-                   GCPtr pGC, int x, int y, int count, char *chars)
-{
-    int ret;
-
-    XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw);
-    ret = (*pGC->ops->PolyText8) (pDraw, pGC, x, y, count, chars);
-    XAA_PIXMAP_OP_EPILOGUE(pGC);
-    return ret;
-}
-
-static int
-XAAPolyText16Pixmap(DrawablePtr pDraw,
-                    GCPtr pGC, int x, int y, int count, unsigned short *chars)
-{
-    int ret;
-
-    XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw);
-    ret = (*pGC->ops->PolyText16) (pDraw, pGC, x, y, count, chars);
-    XAA_PIXMAP_OP_EPILOGUE(pGC);
-    return ret;
-}
-
-static void
-XAAImageText8Pixmap(DrawablePtr pDraw,
-                    GCPtr pGC, int x, int y, int count, char *chars)
-{
-    XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw);
-    (*pGC->ops->ImageText8) (pDraw, pGC, x, y, count, chars);
-    XAA_PIXMAP_OP_EPILOGUE(pGC);
-}
-
-static void
-XAAImageText16Pixmap(DrawablePtr pDraw,
-                     GCPtr pGC, int x, int y, int count, unsigned short *chars)
-{
-    XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw);
-    (*pGC->ops->ImageText16) (pDraw, pGC, x, y, count, chars);
-    XAA_PIXMAP_OP_EPILOGUE(pGC);
-}
-
-static void
-XAAImageGlyphBltPixmap(DrawablePtr pDraw,
-                       GCPtr pGC,
-                       int xInit, int yInit,
-                       unsigned int nglyph,
-                       CharInfoPtr * ppci, pointer pglyphBase)
-{
-    XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw);
-    (*pGC->ops->ImageGlyphBlt) (pDraw, pGC, xInit, yInit, nglyph,
-                                ppci, pglyphBase);
-    XAA_PIXMAP_OP_EPILOGUE(pGC);
-}
-
-static void
-XAAPolyGlyphBltPixmap(DrawablePtr pDraw,
-                      GCPtr pGC,
-                      int xInit, int yInit,
-                      unsigned int nglyph,
-                      CharInfoPtr * ppci, pointer pglyphBase)
-{
-    XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw);
-    (*pGC->ops->PolyGlyphBlt) (pDraw, pGC, xInit, yInit, nglyph,
-                               ppci, pglyphBase);
-    XAA_PIXMAP_OP_EPILOGUE(pGC);
-}
-
-static void
-XAAPushPixelsPixmap(GCPtr pGC,
-                    PixmapPtr pBitMap,
-                    DrawablePtr pDraw, int dx, int dy, int xOrg, int yOrg)
-{
-    XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw);
-    (*pGC->ops->PushPixels) (pGC, pBitMap, pDraw, dx, dy, xOrg, yOrg);
-    XAA_PIXMAP_OP_EPILOGUE(pGC);
-}
-
-GCOps XAAPixmapOps = {
-    XAAFillSpansPixmap, XAASetSpansPixmap,
-    XAAPutImagePixmap, XAACopyAreaPixmap,
-    XAACopyPlanePixmap, XAAPolyPointPixmap,
-    XAAPolylinesPixmap, XAAPolySegmentPixmap,
-    XAAPolyRectanglePixmap, XAAPolyArcPixmap,
-    XAAFillPolygonPixmap, XAAPolyFillRectPixmap,
-    XAAPolyFillArcPixmap, XAAPolyText8Pixmap,
-    XAAPolyText16Pixmap, XAAImageText8Pixmap,
-    XAAImageText16Pixmap, XAAImageGlyphBltPixmap,
-    XAAPolyGlyphBltPixmap, XAAPushPixelsPixmap,
-};
diff --git a/hw/xfree86/xaa/xaaGCmisc.c b/hw/xfree86/xaa/xaaGCmisc.c
deleted file mode 100644
index ca69aae..0000000
--- a/hw/xfree86/xaa/xaaGCmisc.c
+++ /dev/null
@@ -1,412 +0,0 @@
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include "misc.h"
-#include "xf86.h"
-#include "xf86_OSproc.h"
-
-#include <X11/X.h>
-#include "scrnintstr.h"
-#include <X11/fonts/fontstruct.h>
-#include "dixfontstr.h"
-#include "xf86str.h"
-#include "xaa.h"
-#include "xaalocal.h"
-#include "migc.h"
-#include "mi.h"
-#include "gcstruct.h"
-#include "pixmapstr.h"
-
-void
-XAAValidateCopyArea(GCPtr pGC, unsigned long changes, DrawablePtr pDraw)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-
-    if (infoRec->CopyArea &&
-        CHECK_PLANEMASK(pGC, infoRec->CopyAreaFlags) &&
-        CHECK_ROP(pGC, infoRec->CopyAreaFlags) &&
-        CHECK_ROPSRC(pGC, infoRec->CopyAreaFlags)
-        )
-        pGC->ops->CopyArea = infoRec->CopyArea;
-    else
-        pGC->ops->CopyArea = XAAFallbackOps.CopyArea;
-}
-
-void
-XAAValidatePutImage(GCPtr pGC, unsigned long changes, DrawablePtr pDraw)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-
-    if (infoRec->PutImage &&
-        CHECK_PLANEMASK(pGC, infoRec->PutImageFlags) &&
-        CHECK_ROP(pGC, infoRec->PutImageFlags) &&
-        CHECK_ROPSRC(pGC, infoRec->PutImageFlags) &&
-        CHECK_COLORS(pGC, infoRec->PutImageFlags)
-        )
-        pGC->ops->PutImage = infoRec->PutImage;
-    else
-        pGC->ops->PutImage = XAAFallbackOps.PutImage;
-}
-
-void
-XAAValidateCopyPlane(GCPtr pGC, unsigned long changes, DrawablePtr pDraw)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-
-    if (infoRec->CopyPlane &&
-        CHECK_PLANEMASK(pGC, infoRec->CopyPlaneFlags) &&
-        CHECK_ROP(pGC, infoRec->CopyPlaneFlags) &&
-        CHECK_ROPSRC(pGC, infoRec->CopyPlaneFlags) &&
-        CHECK_COLORS(pGC, infoRec->CopyPlaneFlags)
-        )
-        pGC->ops->CopyPlane = infoRec->CopyPlane;
-    else
-        pGC->ops->CopyPlane = XAAFallbackOps.CopyPlane;
-}
-
-void
-XAAValidatePushPixels(GCPtr pGC, unsigned long changes, DrawablePtr pDraw)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-
-    if (infoRec->PushPixelsSolid &&
-        (pGC->fillStyle == FillSolid) &&
-        CHECK_PLANEMASK(pGC, infoRec->PushPixelsFlags) &&
-        CHECK_ROP(pGC, infoRec->PushPixelsFlags) &&
-        CHECK_ROPSRC(pGC, infoRec->PushPixelsFlags) &&
-        CHECK_FG(pGC, infoRec->PushPixelsFlags) &&
-        (!(infoRec->PushPixelsFlags & TRANSPARENCY_GXCOPY_ONLY) ||
-         (pGC->alu == GXcopy))
-        )
-        pGC->ops->PushPixels = infoRec->PushPixelsSolid;
-    else
-        pGC->ops->PushPixels = XAAFallbackOps.PushPixels;
-
-}
-
-/* We make the assumption that the FillSpans, PolyFillRect, FillPolygon
-   and PolyFillArc functions are linked in a way that they all have 
-   the same rop/color/planemask restrictions. If the driver provides 
-   a GC level replacement for these, it will need to supply a new 
-   Validate functions if it breaks this assumption */
-
-void
-XAAValidateFillSpans(GCPtr pGC, unsigned long changes, DrawablePtr pDraw)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-
-    if (pGC->fillStyle != FillTiled)
-        changes &= ~GCTile;
-    if ((pGC->fillStyle == FillTiled) || (pGC->fillStyle == FillSolid))
-        changes &= ~GCStipple;
-    if (!changes)
-        return;
-
-    pGC->ops->FillSpans = XAAFallbackOps.FillSpans;
-    pGC->ops->PolyFillRect = XAAFallbackOps.PolyFillRect;
-    pGC->ops->FillPolygon = XAAFallbackOps.FillPolygon;
-    pGC->ops->PolyFillArc = XAAFallbackOps.PolyFillArc;
-
-    switch (pGC->fillStyle) {
-    case FillSolid:
-        if (infoRec->FillSpansSolid &&
-            CHECK_PLANEMASK(pGC, infoRec->FillSpansSolidFlags) &&
-            CHECK_ROP(pGC, infoRec->FillSpansSolidFlags) &&
-            CHECK_ROPSRC(pGC, infoRec->FillSpansSolidFlags) &&
-            CHECK_FG(pGC, infoRec->FillSpansSolidFlags)
-            ) {
-            pGC->ops->FillSpans = infoRec->FillSpansSolid;
-            pGC->ops->PolyFillRect = infoRec->PolyFillRectSolid;
-            pGC->ops->FillPolygon = infoRec->FillPolygonSolid;
-            pGC->ops->PolyFillArc = infoRec->PolyFillArcSolid;
-        }
-        break;
-        /* The [Stippled/OpaqueStippled/Tiled]FillChooser 
-           functions do the validating */
-    case FillStippled:
-        if (infoRec->FillSpansStippled) {
-            pGC->ops->FillSpans = infoRec->FillSpansStippled;
-            pGC->ops->PolyFillRect = infoRec->PolyFillRectStippled;
-            if (infoRec->FillPolygonStippled)
-                pGC->ops->FillPolygon = infoRec->FillPolygonStippled;
-            else
-                pGC->ops->FillPolygon = miFillPolygon;
-            pGC->ops->PolyFillArc = miPolyFillArc;
-        }
-        break;
-    case FillOpaqueStippled:
-        if (infoRec->FillSpansOpaqueStippled) {
-            pGC->ops->FillSpans = infoRec->FillSpansOpaqueStippled;
-            pGC->ops->PolyFillRect = infoRec->PolyFillRectOpaqueStippled;
-            if (infoRec->FillPolygonOpaqueStippled)
-                pGC->ops->FillPolygon = infoRec->FillPolygonOpaqueStippled;
-            else
-                pGC->ops->FillPolygon = miFillPolygon;
-            pGC->ops->PolyFillArc = miPolyFillArc;
-        }
-        break;
-    case FillTiled:
-        if (infoRec->FillSpansTiled) {
-            pGC->ops->FillSpans = infoRec->FillSpansTiled;
-            pGC->ops->PolyFillRect = infoRec->PolyFillRectTiled;
-            if (infoRec->FillPolygonTiled)
-                pGC->ops->FillPolygon = infoRec->FillPolygonTiled;
-            else
-                pGC->ops->FillPolygon = miFillPolygon;
-            pGC->ops->PolyFillArc = miPolyFillArc;
-        }
-        break;
-    default:
-        return;
-    }
-}
-
-/* We make the assumption that these Text8/16 and GlyphBlt functions
-   are linked in a way that they all have the same rop/color/planemask
-   restrictions. If the driver provides a GC level replacement for
-   these, it will need to supply a new Validate functions if it breaks
-   this assumption */
-
-void
-XAAValidatePolyGlyphBlt(GCPtr pGC, unsigned long changes, DrawablePtr pDraw)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    Bool BigFont = FALSE;
-
-    pGC->ops->PolyText8 = XAAFallbackOps.PolyText8;
-    pGC->ops->PolyText16 = XAAFallbackOps.PolyText16;
-    pGC->ops->PolyGlyphBlt = XAAFallbackOps.PolyGlyphBlt;
-
-    if (!pGC->font)
-        return;
-    if (pGC->fillStyle != FillSolid)
-        return;
-
-    if ((FONTMAXBOUNDS(pGC->font, rightSideBearing) -
-         FONTMINBOUNDS(pGC->font, leftSideBearing) > 32))
-        BigFont = TRUE;
-
-    /* no funny business */
-    if ((FONTMINBOUNDS(pGC->font, characterWidth) <= 0) ||
-        ((FONTASCENT(pGC->font) + FONTDESCENT(pGC->font)) <= 0))
-        return;
-
-    /* Check for TE Fonts */
-    if (!TERMINALFONT(pGC->font) || BigFont) {
-        if (infoRec->PolyGlyphBltNonTE &&
-            CHECK_PLANEMASK(pGC, infoRec->PolyGlyphBltNonTEFlags) &&
-            CHECK_ROP(pGC, infoRec->PolyGlyphBltNonTEFlags) &&
-            CHECK_ROPSRC(pGC, infoRec->PolyGlyphBltNonTEFlags) &&
-            CHECK_FG(pGC, infoRec->PolyGlyphBltNonTEFlags) &&
-            (!(infoRec->PolyGlyphBltNonTEFlags & TRANSPARENCY_GXCOPY_ONLY) ||
-             (pGC->alu == GXcopy))
-            ) {
-            pGC->ops->PolyText8 = infoRec->PolyText8NonTE;
-            pGC->ops->PolyText16 = infoRec->PolyText16NonTE;
-            pGC->ops->PolyGlyphBlt = infoRec->PolyGlyphBltNonTE;
-        }
-    }
-    else {
-        if (infoRec->PolyGlyphBltTE &&
-            CHECK_PLANEMASK(pGC, infoRec->PolyGlyphBltTEFlags) &&
-            CHECK_ROP(pGC, infoRec->PolyGlyphBltTEFlags) &&
-            CHECK_ROPSRC(pGC, infoRec->PolyGlyphBltNonTEFlags) &&
-            CHECK_FG(pGC, infoRec->PolyGlyphBltTEFlags) &&
-            (!(infoRec->PolyGlyphBltTEFlags & TRANSPARENCY_GXCOPY_ONLY) ||
-             (pGC->alu == GXcopy))
-            ) {
-            pGC->ops->PolyText8 = infoRec->PolyText8TE;
-            pGC->ops->PolyText16 = infoRec->PolyText16TE;
-            pGC->ops->PolyGlyphBlt = infoRec->PolyGlyphBltTE;
-        }
-    }
-}
-
-void
-XAAValidateImageGlyphBlt(GCPtr pGC, unsigned long changes, DrawablePtr pDraw)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    Bool BigFont = FALSE;
-
-    pGC->ops->ImageText8 = XAAFallbackOps.ImageText8;
-    pGC->ops->ImageText16 = XAAFallbackOps.ImageText16;
-    pGC->ops->ImageGlyphBlt = XAAFallbackOps.ImageGlyphBlt;
-
-    if (!pGC->font)
-        return;
-
-    if ((FONTMAXBOUNDS(pGC->font, rightSideBearing) -
-         FONTMINBOUNDS(pGC->font, leftSideBearing) > 32))
-        BigFont = TRUE;
-
-    /* no funny business */
-    if ((FONTMINBOUNDS(pGC->font, characterWidth) <= 0) ||
-        ((FONTASCENT(pGC->font) + FONTDESCENT(pGC->font)) <= 0))
-        return;
-
-    /* Check for TE Fonts */
-    if (!TERMINALFONT(pGC->font) || BigFont || (pGC->depth == 32)) {
-        if (infoRec->ImageGlyphBltNonTE &&
-            CHECK_PLANEMASK(pGC, infoRec->ImageGlyphBltNonTEFlags) &&
-            CHECK_FG(pGC, infoRec->ImageGlyphBltNonTEFlags) &&
-            infoRec->SetupForSolidFill &&
-            CHECK_PLANEMASK(pGC, infoRec->SolidFillFlags) &&
-            CHECK_BG(pGC, infoRec->SolidFillFlags)) {
-            pGC->ops->ImageText8 = infoRec->ImageText8NonTE;
-            pGC->ops->ImageText16 = infoRec->ImageText16NonTE;
-            pGC->ops->ImageGlyphBlt = infoRec->ImageGlyphBltNonTE;
-        }
-    }
-    else if (infoRec->ImageGlyphBltTE &&
-             CHECK_PLANEMASK(pGC, infoRec->ImageGlyphBltTEFlags)) {
-        if (!(infoRec->ImageGlyphBltTEFlags & TRANSPARENCY_ONLY) &&
-            CHECK_COLORS(pGC, infoRec->ImageGlyphBltTEFlags)) {
-            pGC->ops->ImageText8 = infoRec->ImageText8TE;
-            pGC->ops->ImageText16 = infoRec->ImageText16TE;
-            pGC->ops->ImageGlyphBlt = infoRec->ImageGlyphBltTE;
-        }
-        else {
-            if (CHECK_FG(pGC, infoRec->ImageGlyphBltTEFlags) &&
-                infoRec->SetupForSolidFill &&
-                CHECK_PLANEMASK(pGC, infoRec->SolidFillFlags) &&
-                CHECK_BG(pGC, infoRec->SolidFillFlags)) {
-                pGC->ops->ImageText8 = infoRec->ImageText8TE;
-                pGC->ops->ImageText16 = infoRec->ImageText16TE;
-                pGC->ops->ImageGlyphBlt = infoRec->ImageGlyphBltTE;
-            }
-        }
-    }
-}
-
-void
-XAAValidatePolylines(GCPtr pGC, unsigned long changes, DrawablePtr pDraw)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    XAAGCPtr pGCPriv = (XAAGCPtr) dixLookupPrivate(&pGC->devPrivates,
-                                                   XAAGetGCKey());
-
-    if (pGC->lineStyle == LineSolid)
-        changes &= ~GCDashList;
-    if (!changes)
-        return;
-
-    pGC->ops->PolySegment = XAAFallbackOps.PolySegment;
-    pGC->ops->Polylines = XAAFallbackOps.Polylines;
-    pGC->ops->PolyRectangle = XAAFallbackOps.PolyRectangle;
-    pGC->ops->PolyArc = XAAFallbackOps.PolyArc;
-
-    if ((pGC->ops->FillSpans != XAAFallbackOps.FillSpans) &&
-        (pGC->lineWidth > 0)) {
-
-        pGC->ops->PolyArc = miPolyArc;
-        pGC->ops->PolySegment = miPolySegment;
-        pGC->ops->PolyRectangle = miPolyRectangle;
-        if (pGC->lineStyle == LineSolid)
-            pGC->ops->Polylines = miWideLine;
-        else
-            pGC->ops->Polylines = miWideDash;
-    }
-
-    if ((pGC->lineWidth == 0) && (pGC->fillStyle == FillSolid)) {
-
-        if (pGC->lineStyle == LineSolid) {
-
-            if (infoRec->PolyRectangleThinSolid &&
-                CHECK_PLANEMASK(pGC, infoRec->PolyRectangleThinSolidFlags) &&
-                CHECK_ROP(pGC, infoRec->PolyRectangleThinSolidFlags) &&
-                CHECK_ROPSRC(pGC, infoRec->PolyRectangleThinSolidFlags) &&
-                CHECK_FG(pGC, infoRec->PolyRectangleThinSolidFlags)) {
-
-                pGC->ops->PolyRectangle = infoRec->PolyRectangleThinSolid;
-            }
-
-            if (infoRec->PolySegmentThinSolid &&
-                CHECK_PLANEMASK(pGC, infoRec->PolySegmentThinSolidFlags) &&
-                CHECK_ROP(pGC, infoRec->PolySegmentThinSolidFlags) &&
-                CHECK_ROPSRC(pGC, infoRec->PolySegmentThinSolidFlags) &&
-                CHECK_FG(pGC, infoRec->PolySegmentThinSolidFlags)) {
-
-                pGC->ops->PolySegment = infoRec->PolySegmentThinSolid;
-            }
-
-            if (infoRec->PolylinesThinSolid &&
-                CHECK_PLANEMASK(pGC, infoRec->PolylinesThinSolidFlags) &&
-                CHECK_ROP(pGC, infoRec->PolylinesThinSolidFlags) &&
-                CHECK_ROPSRC(pGC, infoRec->PolylinesThinSolidFlags) &&
-                CHECK_FG(pGC, infoRec->PolylinesThinSolidFlags)) {
-
-                pGC->ops->Polylines = infoRec->PolylinesThinSolid;
-            }
-        }
-        else if ((pGC->lineStyle == LineOnOffDash) && pGCPriv->DashPattern) {
-
-            if (infoRec->PolySegmentThinDashed &&
-                !(infoRec->PolySegmentThinDashedFlags & NO_TRANSPARENCY) &&
-                ((pGC->alu == GXcopy) || !(infoRec->PolySegmentThinDashedFlags &
-                                           TRANSPARENCY_GXCOPY_ONLY)) &&
-                CHECK_PLANEMASK(pGC, infoRec->PolySegmentThinDashedFlags) &&
-                CHECK_ROP(pGC, infoRec->PolySegmentThinDashedFlags) &&
-                CHECK_ROPSRC(pGC, infoRec->PolySegmentThinDashedFlags) &&
-                CHECK_FG(pGC, infoRec->PolySegmentThinDashedFlags)) {
-
-                pGC->ops->PolySegment = infoRec->PolySegmentThinDashed;
-            }
-
-            if (infoRec->PolylinesThinDashed &&
-                !(infoRec->PolylinesThinDashedFlags & NO_TRANSPARENCY) &&
-                ((pGC->alu == GXcopy) || !(infoRec->PolylinesThinDashedFlags &
-                                           TRANSPARENCY_GXCOPY_ONLY)) &&
-                CHECK_PLANEMASK(pGC, infoRec->PolylinesThinDashedFlags) &&
-                CHECK_ROP(pGC, infoRec->PolylinesThinDashedFlags) &&
-                CHECK_ROPSRC(pGC, infoRec->PolylinesThinDashedFlags) &&
-                CHECK_FG(pGC, infoRec->PolylinesThinDashedFlags)) {
-
-                pGC->ops->Polylines = infoRec->PolylinesThinDashed;
-            }
-
-            if (pGC->ops->Polylines != XAAFallbackOps.Polylines)
-                pGC->ops->PolyRectangle = miPolyRectangle;
-
-        }
-        else if (pGCPriv->DashPattern && (pGC->depth != 32)) {
-            /* LineDoubleDash */
-            if (infoRec->PolySegmentThinDashed &&
-                !(infoRec->PolySegmentThinDashedFlags & TRANSPARENCY_ONLY) &&
-                CHECK_PLANEMASK(pGC, infoRec->PolySegmentThinDashedFlags) &&
-                CHECK_ROP(pGC, infoRec->PolySegmentThinDashedFlags) &&
-                CHECK_ROPSRC(pGC, infoRec->PolySegmentThinDashedFlags) &&
-                CHECK_COLORS(pGC, infoRec->PolySegmentThinDashedFlags)) {
-
-                pGC->ops->PolySegment = infoRec->PolySegmentThinDashed;
-            }
-
-            if (infoRec->PolylinesThinDashed &&
-                !(infoRec->PolylinesThinDashedFlags & TRANSPARENCY_ONLY) &&
-                CHECK_PLANEMASK(pGC, infoRec->PolylinesThinDashedFlags) &&
-                CHECK_ROP(pGC, infoRec->PolylinesThinDashedFlags) &&
-                CHECK_ROPSRC(pGC, infoRec->PolylinesThinDashedFlags) &&
-                CHECK_COLORS(pGC, infoRec->PolylinesThinDashedFlags)) {
-
-                pGC->ops->Polylines = infoRec->PolylinesThinDashed;
-            }
-
-            if (pGC->ops->Polylines != XAAFallbackOps.Polylines)
-                pGC->ops->PolyRectangle = miPolyRectangle;
-
-        }
-    }
-
-    if (infoRec->PolylinesWideSolid &&
-        (pGC->lineWidth > 0) &&
-        (pGC->fillStyle == FillSolid) &&
-        (pGC->lineStyle == LineSolid) &&
-        CHECK_PLANEMASK(pGC, infoRec->PolylinesWideSolidFlags) &&
-        CHECK_ROP(pGC, infoRec->PolylinesWideSolidFlags) &&
-        CHECK_ROPSRC(pGC, infoRec->PolylinesWideSolidFlags) &&
-        CHECK_FG(pGC, infoRec->PolylinesWideSolidFlags)) {
-
-        pGC->ops->Polylines = infoRec->PolylinesWideSolid;
-    }
-}
diff --git a/hw/xfree86/xaa/xaaImage.c b/hw/xfree86/xaa/xaaImage.c
deleted file mode 100644
index 4457c9e..0000000
--- a/hw/xfree86/xaa/xaaImage.c
+++ /dev/null
@@ -1,534 +0,0 @@
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include "misc.h"
-#include "xf86.h"
-#include "xf86_OSproc.h"
-#include "servermd.h"
-
-#include <X11/X.h>
-#include "scrnintstr.h"
-#include "mi.h"
-#include "pixmapstr.h"
-#include "xf86str.h"
-#include "xaa.h"
-#include "xaalocal.h"
-
-void
-XAAMoveDWORDS_FixedBase(register CARD32 *dest,
-                        register CARD32 *src, register int dwords)
-{
-    while (dwords & ~0x03) {
-        *dest = *src;
-        *dest = *(src + 1);
-        *dest = *(src + 2);
-        *dest = *(src + 3);
-        dwords -= 4;
-        src += 4;
-    }
-
-    if (!dwords)
-        return;
-    *dest = *src;
-    if (dwords == 1)
-        return;
-    *dest = *(src + 1);
-    if (dwords == 2)
-        return;
-    *dest = *(src + 2);
-}
-
-void
-XAAMoveDWORDS(register CARD32 *dest, register CARD32 *src, register int dwords)
-{
-    while (dwords & ~0x03) {
-        *dest = *src;
-        *(dest + 1) = *(src + 1);
-        *(dest + 2) = *(src + 2);
-        *(dest + 3) = *(src + 3);
-        src += 4;
-        dest += 4;
-        dwords -= 4;
-    }
-    if (!dwords)
-        return;
-    *dest = *src;
-    if (dwords == 1)
-        return;
-    *(dest + 1) = *(src + 1);
-    if (dwords == 2)
-        return;
-    *(dest + 2) = *(src + 2);
-}
-
-void
-XAAMoveDWORDS_FixedSrc(register CARD32 *dest,
-                       register CARD32 *src, register int dwords)
-{
-    while (dwords & ~0x03) {
-        *dest = *src;
-        *(dest + 1) = *src;
-        *(dest + 2) = *src;
-        *(dest + 3) = *src;
-        dest += 4;
-        dwords -= 4;
-    }
-    if (!dwords)
-        return;
-    *dest = *src;
-    if (dwords == 1)
-        return;
-    *(dest + 1) = *src;
-    if (dwords == 2)
-        return;
-    *(dest + 2) = *src;
-}
-
-static void
-XAAWritePixmap32To24(ScrnInfoPtr pScrn, int x, int y, int w, int h, unsigned char *srcInit, int srcwidth,       /* bytes */
-                     int rop, unsigned int planemask, int trans)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    int count, dwords = bytes_to_int32(w * 3);
-    CARD32 *src, *dst;
-    Bool PlusOne = FALSE;
-
-    if ((infoRec->ImageWriteFlags & CPU_TRANSFER_PAD_QWORD) &&
-        ((dwords * h) & 0x01)) {
-        PlusOne = TRUE;
-    }
-
-    (*infoRec->SetupForImageWrite) (pScrn, rop, planemask, trans, 24, 24);
-    (*infoRec->SubsequentImageWriteRect) (pScrn, x, y, w, h, 0);
-
-    if (dwords > infoRec->ImageWriteRange) {
-        dst = (CARD32 *) infoRec->ImageWriteBase;
-        while (h--) {
-            src = (CARD32 *) srcInit;
-            count = w;
-
-            while (count >= 4) {
-                *dst = (src[0] & 0x00ffffff) | (src[1] << 24);
-                *dst = ((src[1] >> 8) & 0x0000ffff) | (src[2] << 16);
-                *dst = ((src[2] >> 16) & 0x000000ff) | (src[3] << 8);
-                src += 4;
-                count -= 4;
-            }
-            switch (count) {
-            case 0:
-                break;
-            case 1:
-                *dst = src[0];
-                break;
-            case 2:
-                *dst = (src[0] & 0x00ffffff) | (src[1] << 24);
-                *dst = src[1] >> 8;
-                break;
-            default:
-                *dst = (src[0] & 0x00ffffff) | (src[1] << 24);
-                *dst = ((src[1] >> 8) & 0x0000ffff) | (src[2] << 16);
-                *dst = src[2] >> 16;
-                break;
-            }
-            srcInit += srcwidth;
-        }
-    }
-    else {
-        while (h--) {
-            dst = (CARD32 *) infoRec->ImageWriteBase;
-            src = (CARD32 *) srcInit;
-            count = w;
-
-            while (count >= 4) {
-                dst[0] = (src[0] & 0x00ffffff) | (src[1] << 24);
-                dst[1] = ((src[1] >> 8) & 0x0000ffff) | (src[2] << 16);
-                dst[2] = ((src[2] >> 16) & 0x000000ff) | (src[3] << 8);
-                dst += 3;
-                src += 4;
-                count -= 4;
-            }
-            switch (count) {
-            case 0:
-                break;
-            case 1:
-                dst[0] = src[0];
-                break;
-            case 2:
-                dst[0] = (src[0] & 0x00ffffff) | (src[1] << 24);
-                dst[1] = src[1] >> 8;
-                break;
-            default:
-                dst[0] = (src[0] & 0x00ffffff) | (src[1] << 24);
-                dst[1] = ((src[1] >> 8) & 0x0000ffff) | (src[2] << 16);
-                dst[2] = src[2] >> 16;
-                break;
-            }
-            srcInit += srcwidth;
-        }
-    }
-
-    if (PlusOne) {
-        CARD32 *base = (CARD32 *) infoRec->ImageWriteBase;
-
-        *base = 0x00000000;
-    }
-
-    if (infoRec->ImageWriteFlags & SYNC_AFTER_IMAGE_WRITE)
-        (*infoRec->Sync) (pScrn);
-    else
-        SET_SYNC_FLAG(infoRec);
-
-}
-
-void
-XAAWritePixmap(ScrnInfoPtr pScrn, int x, int y, int w, int h, unsigned char *src, int srcwidth, /* bytes */
-               int rop, unsigned int planemask, int trans, int bpp, int depth)
-{
-    XAAInfoRecPtr infoRec;
-    int dwords, skipleft, Bpp;
-    Bool beCareful, PlusOne;
-
-    if ((bpp == 32) && (pScrn->bitsPerPixel == 24)) {
-        XAAWritePixmap32To24(pScrn, x, y, w, h, src, srcwidth,
-                             rop, planemask, trans);
-        return;
-    }
-
-    infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    beCareful = PlusOne = FALSE;
-    Bpp = bpp >> 3;
-
-    if ((skipleft = (long) src & 0x03L)) {
-        if (!(infoRec->ImageWriteFlags & LEFT_EDGE_CLIPPING)) {
-            skipleft = 0;
-            beCareful = TRUE;
-            goto BAD_ALIGNMENT;
-        }
-
-        if (Bpp == 3)
-            skipleft = 4 - skipleft;
-        else
-            skipleft /= Bpp;
-
-        if ((x < skipleft) && !(infoRec->ImageWriteFlags &
-                                LEFT_EDGE_CLIPPING_NEGATIVE_X)) {
-            skipleft = 0;
-            beCareful = TRUE;
-            goto BAD_ALIGNMENT;
-        }
-
-        x -= skipleft;
-        w += skipleft;
-
-        if (Bpp == 3)
-            src -= 3 * skipleft;
-        else                    /* is this Alpha friendly ? */
-            src = (unsigned char *) ((long) src & ~0x03L);
-    }
-
- BAD_ALIGNMENT:
-
-    dwords = bytes_to_int32(w * Bpp);
-
-    if ((infoRec->ImageWriteFlags & CPU_TRANSFER_PAD_QWORD) &&
-        ((dwords * h) & 0x01)) {
-        PlusOne = TRUE;
-    }
-
-    (*infoRec->SetupForImageWrite) (pScrn, rop, planemask, trans, bpp, depth);
-    (*infoRec->SubsequentImageWriteRect) (pScrn, x, y, w, h, skipleft);
-
-    if (beCareful) {
-        /* in cases with bad alignment we have to be careful not
-           to read beyond the end of the source */
-        if (((x * Bpp) + (dwords << 2)) > srcwidth)
-            h--;
-        else
-            beCareful = FALSE;
-    }
-
-    if (dwords > infoRec->ImageWriteRange) {
-        while (h--) {
-            XAAMoveDWORDS_FixedBase((CARD32 *) infoRec->ImageWriteBase,
-                                    (CARD32 *) src, dwords);
-            src += srcwidth;
-        }
-        if (beCareful) {
-            int shift = ((long) src & 0x03L) << 3;
-
-            if (--dwords)
-                XAAMoveDWORDS_FixedBase((CARD32 *) infoRec->ImageWriteBase,
-                                        (CARD32 *) src, dwords);
-            src = (unsigned char *) ((long) (src + (dwords << 2)) & ~0x03L);
-            *((CARD32 *) infoRec->ImageWriteBase) = *((CARD32 *) src) >> shift;
-        }
-    }
-    else {
-        if (srcwidth == (dwords << 2)) {
-            int decrement = infoRec->ImageWriteRange / dwords;
-
-            while (h > decrement) {
-                XAAMoveDWORDS((CARD32 *) infoRec->ImageWriteBase,
-                              (CARD32 *) src, dwords * decrement);
-                src += (srcwidth * decrement);
-                h -= decrement;
-            }
-            if (h) {
-                XAAMoveDWORDS((CARD32 *) infoRec->ImageWriteBase,
-                              (CARD32 *) src, dwords * h);
-                if (beCareful)
-                    src += (srcwidth * h);
-            }
-        }
-        else {
-            while (h--) {
-                XAAMoveDWORDS((CARD32 *) infoRec->ImageWriteBase,
-                              (CARD32 *) src, dwords);
-                src += srcwidth;
-            }
-        }
-
-        if (beCareful) {
-            int shift = ((long) src & 0x03L) << 3;
-
-            if (--dwords)
-                XAAMoveDWORDS((CARD32 *) infoRec->ImageWriteBase,
-                              (CARD32 *) src, dwords);
-            src = (unsigned char *) ((long) (src + (dwords << 2)) & ~0x03L);
-
-            ((CARD32 *) infoRec->ImageWriteBase)[dwords] =
-                *((CARD32 *) src) >> shift;
-        }
-    }
-
-    if (PlusOne) {
-        CARD32 *base = (CARD32 *) infoRec->ImageWriteBase;
-
-        *base = 0x00000000;
-    }
-
-    if (infoRec->ImageWriteFlags & SYNC_AFTER_IMAGE_WRITE)
-        (*infoRec->Sync) (pScrn);
-    else
-        SET_SYNC_FLAG(infoRec);
-}
-
-void
-XAAWritePixmapScanline(ScrnInfoPtr pScrn, int x, int y, int w, int h, unsigned char *src, int srcwidth, /* bytes */
-                       int rop,
-                       unsigned int planemask, int trans, int bpp, int depth)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    int dwords, skipleft, bufferNo = 0, Bpp = bpp >> 3;
-    Bool beCareful = FALSE;
-    CARD32 *base;
-
-    if ((skipleft = (long) src & 0x03L)) {
-        if (!(infoRec->ScanlineImageWriteFlags & LEFT_EDGE_CLIPPING)) {
-            skipleft = 0;
-            beCareful = TRUE;
-            goto BAD_ALIGNMENT;
-        }
-
-        if (Bpp == 3)
-            skipleft = 4 - skipleft;
-        else
-            skipleft /= Bpp;
-
-        if ((x < skipleft) && !(infoRec->ScanlineImageWriteFlags &
-                                LEFT_EDGE_CLIPPING_NEGATIVE_X)) {
-            skipleft = 0;
-            beCareful = TRUE;
-            goto BAD_ALIGNMENT;
-        }
-
-        x -= skipleft;
-        w += skipleft;
-
-        if (Bpp == 3)
-            src -= 3 * skipleft;
-        else
-            src = (unsigned char *) ((long) src & ~0x03L);
-    }
-
- BAD_ALIGNMENT:
-
-    dwords = bytes_to_int32(w * Bpp);
-
-    (*infoRec->SetupForScanlineImageWrite) (pScrn, rop, planemask, trans, bpp,
-                                            depth);
-    (*infoRec->SubsequentScanlineImageWriteRect) (pScrn, x, y, w, h, skipleft);
-
-    if (beCareful) {
-        /* in cases with bad alignment we have to be careful not
-           to read beyond the end of the source */
-        if (((x * Bpp) + (dwords << 2)) > srcwidth)
-            h--;
-        else
-            beCareful = FALSE;
-    }
-
-    while (h--) {
-        base = (CARD32 *) infoRec->ScanlineImageWriteBuffers[bufferNo];
-        XAAMoveDWORDS(base, (CARD32 *) src, dwords);
-        (*infoRec->SubsequentImageWriteScanline) (pScrn, bufferNo++);
-        src += srcwidth;
-        if (bufferNo >= infoRec->NumScanlineImageWriteBuffers)
-            bufferNo = 0;
-    }
-
-    if (beCareful) {
-        int shift = ((long) src & 0x03L) << 3;
-
-        base = (CARD32 *) infoRec->ScanlineImageWriteBuffers[bufferNo];
-        if (--dwords)
-            XAAMoveDWORDS(base, (CARD32 *) src, dwords);
-        src = (unsigned char *) ((long) (src + (dwords << 2)) & ~0x03L);
-
-        base[dwords] = *((CARD32 *) src) >> shift;
-        (*infoRec->SubsequentImageWriteScanline) (pScrn, bufferNo);
-    }
-
-    SET_SYNC_FLAG(infoRec);
-}
-
-void
-XAAPutImage(DrawablePtr pDraw,
-            GCPtr pGC,
-            int depth,
-            int x, int y, int w, int h, int leftPad, int format, char *pImage)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    int bpp = BitsPerPixel(depth);
-    Bool depthBug = FALSE;
-
-    if (!w || !h)
-        return;
-
-    if (!RegionNumRects(pGC->pCompositeClip))
-        return;
-
-    depthBug = XAA_DEPTH_BUG(pGC);
-
-    if (((format == ZPixmap) && infoRec->WritePixmap &&
-         ((pDraw->bitsPerPixel == bpp) ||
-          ((pDraw->bitsPerPixel == 24) && (bpp == 32) &&
-           (infoRec->WritePixmapFlags & CONVERT_32BPP_TO_24BPP))) &&
-         CHECK_ROP(pGC, infoRec->WritePixmapFlags) &&
-         CHECK_ROPSRC(pGC, infoRec->WritePixmapFlags) &&
-         CHECK_PLANEMASK(pGC, infoRec->WritePixmapFlags) &&
-         CHECK_NO_GXCOPY(pGC, infoRec->WritePixmapFlags)) ||
-        ((format == XYBitmap) && !depthBug && infoRec->WriteBitmap &&
-         CHECK_ROP(pGC, infoRec->WriteBitmapFlags) &&
-         CHECK_ROPSRC(pGC, infoRec->WriteBitmapFlags) &&
-         CHECK_PLANEMASK(pGC, infoRec->WriteBitmapFlags) &&
-         CHECK_COLORS(pGC, infoRec->WriteBitmapFlags) &&
-         !(infoRec->WriteBitmapFlags & TRANSPARENCY_ONLY)) ||
-        ((format == XYPixmap) && !depthBug && infoRec->WriteBitmap &&
-         CHECK_ROP(pGC, infoRec->WriteBitmapFlags) &&
-         CHECK_ROPSRC(pGC, infoRec->WriteBitmapFlags) &&
-         !(infoRec->WriteBitmapFlags & NO_PLANEMASK) &&
-         !(infoRec->WriteBitmapFlags & TRANSPARENCY_ONLY))) {
-
-        int MaxBoxes = RegionNumRects(pGC->pCompositeClip);
-        BoxPtr pbox, pClipBoxes;
-        int nboxes, srcx, srcy, srcwidth;
-        xRectangle TheRect;
-
-        TheRect.x = pDraw->x + x;
-        TheRect.y = pDraw->y + y;
-        TheRect.width = w;
-        TheRect.height = h;
-
-        if (MaxBoxes > (infoRec->PreAllocSize / sizeof(BoxRec))) {
-            pClipBoxes = malloc(MaxBoxes * sizeof(BoxRec));
-            if (!pClipBoxes)
-                return;
-        }
-        else
-            pClipBoxes = (BoxPtr) infoRec->PreAllocMem;
-
-        nboxes = XAAGetRectClipBoxes(pGC, pClipBoxes, 1, &TheRect);
-        pbox = pClipBoxes;
-
-        if (format == XYBitmap) {
-            srcwidth = BitmapBytePad(leftPad + w);
-            while (nboxes--) {
-                srcx = pbox->x1 - TheRect.x + leftPad;
-                srcy = pbox->y1 - TheRect.y;
-                (*infoRec->WriteBitmap) (infoRec->pScrn, pbox->x1, pbox->y1,
-                                         pbox->x2 - pbox->x1,
-                                         pbox->y2 - pbox->y1,
-                                         (unsigned char *) pImage +
-                                         (srcwidth * srcy) + ((srcx >> 5) << 2),
-                                         srcwidth, srcx & 31, pGC->fgPixel,
-                                         pGC->bgPixel, pGC->alu,
-                                         pGC->planemask);
-                pbox++;
-            }
-        }
-        else if (format == ZPixmap) {
-            int Bpp = bpp >> 3;
-
-            srcwidth = PixmapBytePad(leftPad + w, depth);
-            while (nboxes--) {
-                srcx = pbox->x1 - TheRect.x + leftPad;
-                srcy = pbox->y1 - TheRect.y;
-                (*infoRec->WritePixmap) (infoRec->pScrn, pbox->x1, pbox->y1,
-                                         pbox->x2 - pbox->x1,
-                                         pbox->y2 - pbox->y1,
-                                         (unsigned char *) pImage +
-                                         (srcwidth * srcy) + (srcx * Bpp),
-                                         srcwidth, pGC->alu, pGC->planemask, -1,
-                                         Bpp << 3, depth);
-                pbox++;
-            }
-        }
-        else {                  /* XYPixmap */
-            int depth = pGC->depth;
-            int numBox, increment;
-            unsigned long i, mask;
-            BoxPtr pntBox;
-
-            srcwidth = BitmapBytePad(w + leftPad);
-            increment = h * srcwidth;
-            i = 1 << (depth - 1);
-            mask = ~0;
-
-            if ((infoRec->pScrn->overlayFlags & OVERLAY_8_32_PLANAR) &&
-                (pGC->depth == 8)) {
-                i = 0x80000000;
-                mask = 0xff000000;
-            }
-
-            for (; i & mask; i >>= 1, pImage += increment) {
-                if (i & pGC->planemask) {
-                    pntBox = pbox;
-                    numBox = nboxes;
-                    while (numBox--) {
-                        srcx = pntBox->x1 - TheRect.x + leftPad;
-                        srcy = pntBox->y1 - TheRect.y;
-                        (*infoRec->WriteBitmap) (infoRec->pScrn,
-                                                 pntBox->x1, pntBox->y1,
-                                                 pntBox->x2 - pntBox->x1,
-                                                 pntBox->y2 - pntBox->y1,
-                                                 (unsigned char *) pImage +
-                                                 (srcwidth * srcy) +
-                                                 ((srcx >> 5) << 2), srcwidth,
-                                                 srcx & 31, ~0, 0, pGC->alu, i);
-                        pntBox++;
-                    }
-                }
-            }
-
-        }
-
-        if (pClipBoxes != (BoxPtr) infoRec->PreAllocMem)
-            free(pClipBoxes);
-    }
-    else
-        XAAFallbackOps.PutImage(pDraw, pGC, depth, x, y, w, h, leftPad,
-                                format, pImage);
-}
diff --git a/hw/xfree86/xaa/xaaInit.c b/hw/xfree86/xaa/xaaInit.c
deleted file mode 100644
index f146f3a..0000000
--- a/hw/xfree86/xaa/xaaInit.c
+++ /dev/null
@@ -1,635 +0,0 @@
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include "misc.h"
-#include "xf86.h"
-#include "xf86_OSproc.h"
-
-#include <X11/X.h>
-#include "scrnintstr.h"
-#include "pixmapstr.h"
-#include "windowstr.h"
-#include "xf86str.h"
-#include "mi.h"
-#include "miline.h"
-#include "xaa.h"
-#include "xaalocal.h"
-#include "xaawrap.h"
-#include "xf86fbman.h"
-#include "servermd.h"
-#ifdef COMPOSITE
-#include "cw.h"
-#endif
-
-#define MAX_PREALLOC_MEM	65536   /* MUST be >= 1024 */
-
-#define MIN_OFFPIX_SIZE		(320*200)
-
-static Bool XAACloseScreen(ScreenPtr pScreen);
-static void XAAGetImage(DrawablePtr pDrawable, int sx, int sy, int w, int h,
-                        unsigned int format, unsigned long planemask,
-                        char *pdstLine);
-static void XAAGetSpans(DrawablePtr pDrawable, int wMax, DDXPointPtr ppt,
-                        int *pwidth, int nspans, char *pdstStart);
-static PixmapPtr XAACreatePixmap(ScreenPtr pScreen, int w, int h, int depth,
-                                 unsigned usage_hint);
-static Bool XAADestroyPixmap(PixmapPtr pPixmap);
-static Bool XAAEnterVT(ScrnInfoPtr pScrn);
-static void XAALeaveVT(ScrnInfoPtr pScrn);
-static int XAASetDGAMode(ScrnInfoPtr pScrn, int num, DGADevicePtr devRet);
-static void XAAEnableDisableFBAccess(ScrnInfoPtr pScrn, Bool enable);
-static Bool XAAChangeWindowAttributes(WindowPtr pWin, unsigned long mask);
-
-static DevPrivateKeyRec XAAScreenKeyRec;
-
-#define XAAScreenKey (&XAAScreenKeyRec)
-static DevPrivateKeyRec XAAGCKeyRec;
-
-#define XAAGCKey (&XAAGCKeyRec)
-static DevPrivateKeyRec XAAPixmapKeyRec;
-
-#define XAAPixmapKey (&XAAPixmapKeyRec)
-
-DevPrivateKey
-XAAGetScreenKey(void)
-{
-    return XAAScreenKey;
-}
-
-DevPrivateKey
-XAAGetGCKey(void)
-{
-    return XAAGCKey;
-}
-
-DevPrivateKey
-XAAGetPixmapKey(void)
-{
-    return XAAPixmapKey;
-}
-
-/* temp kludge */
-static Bool SwitchedOut = FALSE;
-
-XAAInfoRecPtr
-XAACreateInfoRec(void)
-{
-    XAAInfoRecPtr infoRec;
-
-    infoRec = calloc(1, sizeof(XAAInfoRec));
-    if (infoRec)
-        infoRec->CachePixelGranularity = -1;
-
-    return infoRec;
-}
-
-void
-XAADestroyInfoRec(XAAInfoRecPtr infoRec)
-{
-    if (!infoRec)
-        return;
-
-    if (infoRec->ClosePixmapCache)
-        (*infoRec->ClosePixmapCache) (xf86ScrnToScreen(infoRec->pScrn));
-
-    free(infoRec->PreAllocMem);
-
-    free(infoRec->PixmapCachePrivate);
-
-    free(infoRec);
-}
-
-Bool
-XAAInit(ScreenPtr pScreen, XAAInfoRecPtr infoRec)
-{
-    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
-    XAAScreenPtr pScreenPriv;
-    int i;
-    PictureScreenPtr ps = GetPictureScreenIfSet(pScreen);
-
-    /* Return successfully if no acceleration wanted */
-    if (!infoRec)
-        return TRUE;
-
-    if (!dixRegisterPrivateKey(&XAAGCKeyRec, PRIVATE_GC, sizeof(XAAGCRec)))
-        return FALSE;
-
-    if (!dixRegisterPrivateKey
-        (&XAAPixmapKeyRec, PRIVATE_PIXMAP, sizeof(XAAPixmapRec)))
-        return FALSE;
-
-    if (!dixRegisterPrivateKey(&XAAScreenKeyRec, PRIVATE_SCREEN, 0))
-        return FALSE;
-
-    if (!(pScreenPriv = malloc(sizeof(XAAScreenRec))))
-        return FALSE;
-
-    dixSetPrivate(&pScreen->devPrivates, XAAScreenKey, pScreenPriv);
-
-    if (!xf86FBManagerRunning(pScreen))
-        infoRec->Flags &= ~(PIXMAP_CACHE | OFFSCREEN_PIXMAPS);
-    if (!(infoRec->Flags & LINEAR_FRAMEBUFFER))
-        infoRec->Flags &= ~OFFSCREEN_PIXMAPS;
-
-    if (!infoRec->FullPlanemask) {      /* for backwards compatibility */
-        infoRec->FullPlanemask = (1 << pScrn->depth) - 1;
-        infoRec->FullPlanemasks[pScrn->depth - 1] = infoRec->FullPlanemask;
-    }
-
-    for (i = 0; i < 32; i++) {
-        if (!infoRec->FullPlanemasks[i])        /* keep any set by caller */
-            infoRec->FullPlanemasks[i] = (1 << (i + 1)) - 1;
-    }
-
-    if (!XAAInitAccel(pScreen, infoRec))
-        return FALSE;
-    pScreenPriv->AccelInfoRec = infoRec;
-    infoRec->ScratchGC.pScreen = pScreen;
-
-    if (!infoRec->GetImage)
-        infoRec->GetImage = XAAGetImage;
-    if (!infoRec->GetSpans)
-        infoRec->GetSpans = XAAGetSpans;
-    if (!infoRec->CopyWindow)
-        infoRec->CopyWindow = XAACopyWindow;
-
-    pScreenPriv->CreateGC = pScreen->CreateGC;
-    pScreen->CreateGC = XAACreateGC;
-    pScreenPriv->CloseScreen = pScreen->CloseScreen;
-    pScreen->CloseScreen = XAACloseScreen;
-    pScreenPriv->GetImage = pScreen->GetImage;
-    pScreen->GetImage = infoRec->GetImage;
-    pScreenPriv->GetSpans = pScreen->GetSpans;
-    pScreen->GetSpans = infoRec->GetSpans;
-    pScreenPriv->CopyWindow = pScreen->CopyWindow;
-    pScreen->CopyWindow = infoRec->CopyWindow;
-    pScreenPriv->CreatePixmap = pScreen->CreatePixmap;
-    pScreen->CreatePixmap = XAACreatePixmap;
-    pScreenPriv->DestroyPixmap = pScreen->DestroyPixmap;
-    pScreen->DestroyPixmap = XAADestroyPixmap;
-    pScreenPriv->ChangeWindowAttributes = pScreen->ChangeWindowAttributes;
-    pScreen->ChangeWindowAttributes = XAAChangeWindowAttributes;
-
-    pScreenPriv->EnterVT = pScrn->EnterVT;
-    pScrn->EnterVT = XAAEnterVT;
-    pScreenPriv->LeaveVT = pScrn->LeaveVT;
-    pScrn->LeaveVT = XAALeaveVT;
-    pScreenPriv->SetDGAMode = pScrn->SetDGAMode;
-    pScrn->SetDGAMode = XAASetDGAMode;
-    pScreenPriv->EnableDisableFBAccess = pScrn->EnableDisableFBAccess;
-    pScrn->EnableDisableFBAccess = XAAEnableDisableFBAccess;
-
-    pScreenPriv->WindowExposures = pScreen->WindowExposures;
-    if (ps) {
-        pScreenPriv->Composite = ps->Composite;
-        ps->Composite = XAAComposite;
-        pScreenPriv->Glyphs = ps->Glyphs;
-        ps->Glyphs = XAAGlyphs;
-    }
-    if (pScrn->overlayFlags & OVERLAY_8_32_PLANAR)
-        XAASetupOverlay8_32Planar(pScreen);
-
-    infoRec->PreAllocMem = malloc(MAX_PREALLOC_MEM);
-    if (infoRec->PreAllocMem)
-        infoRec->PreAllocSize = MAX_PREALLOC_MEM;
-
-    if (infoRec->Flags & PIXMAP_CACHE)
-        xf86RegisterFreeBoxCallback(pScreen, infoRec->InitPixmapCache,
-                                    (pointer) infoRec);
-
-    if (infoRec->Flags & MICROSOFT_ZERO_LINE_BIAS)
-        miSetZeroLineBias(pScreen, OCTANT1 | OCTANT2 | OCTANT3 | OCTANT4);
-
-#ifdef COMPOSITE
-    /* Initialize the composite wrapper.  This needs to happen after the
-     * wrapping above (so it comes before us), but before all other extensions,
-     * so it doesn't confuse them. (particularly damage).
-     */
-    miInitializeCompositeWrapper(pScreen);
-#endif
-
-    return TRUE;
-}
-
-static Bool
-XAACloseScreen(ScreenPtr pScreen)
-{
-    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
-    XAAScreenPtr pScreenPriv =
-        (XAAScreenPtr) dixLookupPrivate(&pScreen->devPrivates, XAAScreenKey);
-
-    pScrn->EnterVT = pScreenPriv->EnterVT;
-    pScrn->LeaveVT = pScreenPriv->LeaveVT;
-    pScrn->EnableDisableFBAccess = pScreenPriv->EnableDisableFBAccess;
-
-    pScreen->CreateGC = pScreenPriv->CreateGC;
-    pScreen->CloseScreen = pScreenPriv->CloseScreen;
-    pScreen->GetImage = pScreenPriv->GetImage;
-    pScreen->GetSpans = pScreenPriv->GetSpans;
-    pScreen->CopyWindow = pScreenPriv->CopyWindow;
-    pScreen->WindowExposures = pScreenPriv->WindowExposures;
-    pScreen->CreatePixmap = pScreenPriv->CreatePixmap;
-    pScreen->DestroyPixmap = pScreenPriv->DestroyPixmap;
-    pScreen->ChangeWindowAttributes = pScreenPriv->ChangeWindowAttributes;
-
-    /* We leave it up to the client to free the XAAInfoRec */
-
-    free((pointer) pScreenPriv);
-
-    return (*pScreen->CloseScreen) (pScreen);
-}
-
-static void
-XAAGetImage(DrawablePtr pDraw,
-            int sx, int sy, int w, int h,
-            unsigned int format, unsigned long planemask, char *pdstLine)
-{
-    ScreenPtr pScreen = pDraw->pScreen;
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCREEN(pScreen);
-    ScrnInfoPtr pScrn = infoRec->pScrn;
-
-    if (pScrn->vtSema &&
-        ((pDraw->type == DRAWABLE_WINDOW) || IS_OFFSCREEN_PIXMAP(pDraw))) {
-        if (infoRec->ReadPixmap && (format == ZPixmap) &&
-            ((planemask & infoRec->FullPlanemasks[pDraw->depth - 1]) ==
-             infoRec->FullPlanemasks[pDraw->depth - 1]) &&
-            (pDraw->bitsPerPixel == BitsPerPixel(pDraw->depth))) {
-            (*infoRec->ReadPixmap) (pScrn,
-                                    sx + pDraw->x, sy + pDraw->y, w, h,
-                                    (unsigned char *) pdstLine,
-                                    PixmapBytePad(w, pDraw->depth),
-                                    pDraw->bitsPerPixel, pDraw->depth);
-            return;
-        }
-        SYNC_CHECK(pDraw);
-    }
-
-    XAA_SCREEN_PROLOGUE(pScreen, GetImage);
-    (*pScreen->GetImage) (pDraw, sx, sy, w, h, format, planemask, pdstLine);
-    XAA_SCREEN_EPILOGUE(pScreen, GetImage, XAAGetImage);
-}
-
-static void
-XAAGetSpans(DrawablePtr pDraw,
-            int wMax, DDXPointPtr ppt, int *pwidth, int nspans, char *pdstStart)
-{
-    ScreenPtr pScreen = pDraw->pScreen;
-
-    XAA_SCREEN_PROLOGUE(pScreen, GetSpans);
-    if (xf86ScreenToScrn(pScreen)->vtSema &&
-        ((pDraw->type == DRAWABLE_WINDOW) || IS_OFFSCREEN_PIXMAP(pDraw))) {
-        SYNC_CHECK(pDraw);
-    }
-    (*pScreen->GetSpans) (pDraw, wMax, ppt, pwidth, nspans, pdstStart);
-    XAA_SCREEN_EPILOGUE(pScreen, GetSpans, XAAGetSpans);
-}
-
-static int
-XAAPixmapBPP(ScreenPtr pScreen, int depth)
-{
-    PixmapPtr pPix;
-    int bpp;
-    DestroyPixmapProcPtr destroyPixmap;
-
-    XAA_SCREEN_PROLOGUE(pScreen, CreatePixmap);
-    pPix = (*pScreen->CreatePixmap) (pScreen, 1, 1, depth,
-                                     CREATE_PIXMAP_USAGE_SCRATCH);
-    XAA_SCREEN_EPILOGUE(pScreen, CreatePixmap, XAACreatePixmap);
-    if (!pPix)
-        return 0;
-    bpp = pPix->drawable.bitsPerPixel;
-    destroyPixmap = pScreen->DestroyPixmap;
-    XAA_SCREEN_PROLOGUE(pScreen, DestroyPixmap);
-    (*pScreen->DestroyPixmap) (pPix);
-    XAA_SCREEN_EPILOGUE(pScreen, DestroyPixmap, destroyPixmap);
-    return bpp;
-}
-
-static void
-XAAInitializeOffscreenDepths(ScreenPtr pScreen)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCREEN(pScreen);
-    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
-    int d, dep;
-
-    infoRec->offscreenDepthsInitialized = TRUE;
-    infoRec->offscreenDepths = 0;
-    if (infoRec->Flags & OFFSCREEN_PIXMAPS) {
-        for (d = 0; d < pScreen->numDepths; d++) {
-            dep = pScreen->allowedDepths[d].depth;
-            if (XAAPixmapBPP(pScreen, dep) == pScrn->bitsPerPixel)
-                infoRec->offscreenDepths |= (1 << (dep - 1));
-        }
-    }
-}
-
-static PixmapPtr
-XAACreatePixmap(ScreenPtr pScreen, int w, int h, int depth, unsigned usage_hint)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCREEN(pScreen);
-    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
-    XAAPixmapPtr pPriv;
-    PixmapPtr pPix = NULL;
-    int size = w * h;
-
-    if (w > 32767 || h > 32767)
-        return NullPixmap;
-
-    if (!infoRec->offscreenDepthsInitialized)
-        XAAInitializeOffscreenDepths(pScreen);
-
-    if (pScrn->vtSema &&
-        (usage_hint != CREATE_PIXMAP_USAGE_GLYPH_PICTURE) &&
-        (infoRec->offscreenDepths & (1 << (depth - 1))) &&
-        (size >= MIN_OFFPIX_SIZE) && !SwitchedOut &&
-        (!infoRec->maxOffPixWidth || (w <= infoRec->maxOffPixWidth)) &&
-        (!infoRec->maxOffPixHeight || (h <= infoRec->maxOffPixHeight))) {
-        PixmapLinkPtr pLink;
-        PixmapPtr pScreenPix;
-        FBAreaPtr area;
-        int gran = 0;
-
-        switch (pScrn->bitsPerPixel) {
-        case 24:
-        case 8:
-            gran = 4;
-            break;
-        case 16:
-            gran = 2;
-            break;
-        case 32:
-            gran = 1;
-            break;
-        default:
-            break;
-        }
-
-        if (BITMAP_SCANLINE_PAD == 64)
-            gran *= 2;
-
-        if (!(area = xf86AllocateOffscreenArea(pScreen, w, h, gran, 0,
-                                               XAARemoveAreaCallback, NULL))) {
-            goto BAILOUT;
-        }
-
-        if (!(pLink = malloc(sizeof(PixmapLink)))) {
-            xf86FreeOffscreenArea(area);
-            goto BAILOUT;
-        }
-
-        XAA_SCREEN_PROLOGUE(pScreen, CreatePixmap);
-        pPix = (*pScreen->CreatePixmap) (pScreen, 0, 0, depth, usage_hint);
-        XAA_SCREEN_EPILOGUE(pScreen, CreatePixmap, XAACreatePixmap);
-
-        if (!pPix) {
-            free(pLink);
-            xf86FreeOffscreenArea(area);
-            goto BAILOUT;
-        }
-
-        pScreenPix = (*pScreen->GetScreenPixmap) (pScreen);
-
-        pPriv = XAA_GET_PIXMAP_PRIVATE(pPix);
-        pPix->drawable.x = area->box.x1;
-        pPix->drawable.y = area->box.y1;
-        pPix->drawable.width = w;
-        pPix->drawable.height = h;
-        pPix->drawable.bitsPerPixel = pScrn->bitsPerPixel;
-        pPix->devKind = pScreenPix->devKind;
-        pPix->devPrivate.ptr = pScreenPix->devPrivate.ptr;
-        area->devPrivate.ptr = pPix;
-
-        pPriv->flags = OFFSCREEN;
-        pPriv->offscreenArea = area;
-        pPriv->freeData = FALSE;
-
-        pLink->next = infoRec->OffscreenPixmaps;
-        pLink->pPix = pPix;
-        infoRec->OffscreenPixmaps = pLink;
-        return pPix;
-    }
- BAILOUT:
-    XAA_SCREEN_PROLOGUE(pScreen, CreatePixmap);
-    pPix = (*pScreen->CreatePixmap) (pScreen, w, h, depth, usage_hint);
-    XAA_SCREEN_EPILOGUE(pScreen, CreatePixmap, XAACreatePixmap);
-
-    if (pPix) {
-        pPriv = XAA_GET_PIXMAP_PRIVATE(pPix);
-        pPriv->flags = 0;
-        pPriv->offscreenArea = NULL;
-        pPriv->freeData = FALSE;
-        if (!w || !h)           /* either scratch or shared memory */
-            pPriv->flags |= SHARED_PIXMAP;
-    }
-
-    return pPix;
-}
-
-static Bool
-XAADestroyPixmap(PixmapPtr pPix)
-{
-    ScreenPtr pScreen = pPix->drawable.pScreen;
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCREEN(pScreen);
-    XAAPixmapPtr pPriv = XAA_GET_PIXMAP_PRIVATE(pPix);
-    Bool ret;
-
-    if (pPix->refcnt == 1) {
-        if (pPriv->flags & OFFSCREEN) {
-            if (pPriv->flags & DGA_PIXMAP)
-                free(pPriv->offscreenArea);
-            else {
-                FBAreaPtr area = pPriv->offscreenArea;
-                PixmapLinkPtr pLink = infoRec->OffscreenPixmaps;
-                PixmapLinkPtr prev = NULL;
-
-                while (pLink->pPix != pPix) {
-                    prev = pLink;
-                    pLink = pLink->next;
-                }
-
-                if (prev)
-                    prev->next = pLink->next;
-                else
-                    infoRec->OffscreenPixmaps = pLink->next;
-
-                if (!area)
-                    area = pLink->area;
-
-                xf86FreeOffscreenArea(area);
-                pPriv->offscreenArea = NULL;
-                free(pLink);
-            }
-        }
-
-        if (pPriv->freeData) {  /* pixmaps that were once in video ram */
-            free(pPix->devPrivate.ptr);
-            pPix->devPrivate.ptr = NULL;
-        }
-    }
-
-    XAA_SCREEN_PROLOGUE(pScreen, DestroyPixmap);
-    ret = (*pScreen->DestroyPixmap) (pPix);
-    XAA_SCREEN_EPILOGUE(pScreen, DestroyPixmap, XAADestroyPixmap);
-
-    return ret;
-}
-
-static Bool
-XAAChangeWindowAttributes(WindowPtr pWin, unsigned long mask)
-{
-    ScreenPtr pScreen = pWin->drawable.pScreen;
-    Bool ret;
-
-    XAA_SCREEN_PROLOGUE(pScreen, ChangeWindowAttributes);
-    ret = (*pScreen->ChangeWindowAttributes) (pWin, mask);
-    XAA_SCREEN_EPILOGUE(pScreen, ChangeWindowAttributes,
-                        XAAChangeWindowAttributes);
-
-    /* we have to assume that shared memory pixmaps are dirty
-       because we can't wrap operations on them */
-
-    if ((mask & CWBackPixmap) && (pWin->backgroundState == BackgroundPixmap) &&
-        PIXMAP_IS_SHARED(pWin->background.pixmap)) {
-        XAAPixmapPtr pPixPriv = XAA_GET_PIXMAP_PRIVATE(pWin->background.pixmap);
-
-        pPixPriv->flags |= DIRTY;
-    }
-    if ((mask & CWBorderPixmap) && !(pWin->borderIsPixel) &&
-        PIXMAP_IS_SHARED(pWin->border.pixmap)) {
-        XAAPixmapPtr pPixPriv = XAA_GET_PIXMAP_PRIVATE(pWin->border.pixmap);
-
-        pPixPriv->flags |= DIRTY;
-    }
-
-    return ret;
-}
-
-/*  These two aren't really needed for anything */
-
-static Bool
-XAAEnterVT(ScrnInfoPtr pScrn)
-{
-    Bool ret;
-    ScreenPtr pScreen = xf86ScrnToScreen(pScrn);
-    XAAScreenPtr pScreenPriv =
-        (XAAScreenPtr) dixLookupPrivate(&pScreen->devPrivates, XAAScreenKey);
-
-    pScrn->EnterVT = pScreenPriv->EnterVT;
-    ret = ((*pScreenPriv->EnterVT) (pScrn));
-    pScreenPriv->EnterVT = pScrn->EnterVT;
-    pScrn->EnterVT = XAAEnterVT;
-    return ret;
-}
-
-static void
-XAALeaveVT(ScrnInfoPtr pScrn)
-{
-    ScreenPtr pScreen = xf86ScrnToScreen(pScrn);
-    XAAScreenPtr pScreenPriv =
-        (XAAScreenPtr) dixLookupPrivate(&pScreen->devPrivates, XAAScreenKey);
-    XAAInfoRecPtr infoRec = pScreenPriv->AccelInfoRec;
-
-    if (infoRec->NeedToSync) {
-        (*infoRec->Sync) (infoRec->pScrn);
-        infoRec->NeedToSync = FALSE;
-    }
-
-    pScrn->LeaveVT = pScreenPriv->LeaveVT;
-    (*pScreenPriv->LeaveVT) (pScrn);
-    pScreenPriv->LeaveVT = pScrn->LeaveVT;
-    pScrn->LeaveVT = XAALeaveVT;
-}
-
-typedef struct {
-    Bool UsingPixmapCache;
-    Bool CanDoColor8x8;
-    Bool CanDoMono8x8;
-} SavedCacheState, *SavedCacheStatePtr;
-
-static int
-XAASetDGAMode(ScrnInfoPtr pScrn, int num, DGADevicePtr devRet)
-{
-    ScreenPtr pScreen = xf86ScrnToScreen(pScrn);
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCREEN(pScreen);
-    XAAScreenPtr pScreenPriv =
-        (XAAScreenPtr) dixLookupPrivate(&pScreen->devPrivates, XAAScreenKey);
-    int ret;
-
-    if (!num && infoRec->dgaSaves) {    /* restore old pixmap cache state */
-        SavedCacheStatePtr state = (SavedCacheStatePtr) infoRec->dgaSaves;
-
-        infoRec->UsingPixmapCache = state->UsingPixmapCache;
-        infoRec->CanDoColor8x8 = state->CanDoColor8x8;
-        infoRec->CanDoMono8x8 = state->CanDoMono8x8;
-        free(infoRec->dgaSaves);
-        infoRec->dgaSaves = NULL;
-    }
-
-    ret = (*pScreenPriv->SetDGAMode) (pScrn, num, devRet);
-    if (ret != Success)
-        return ret;
-
-    if (num && devRet->pPix) {  /* accelerate this pixmap */
-        XAAPixmapPtr pixPriv = XAA_GET_PIXMAP_PRIVATE(devRet->pPix);
-        FBAreaPtr area;
-
-        if ((area = malloc(sizeof(FBArea)))) {
-            area->pScreen = pScreen;
-            area->box.x1 = 0;
-            area->box.x2 = 0;
-            area->box.y1 = devRet->mode->pixmapWidth;
-            area->box.y2 = devRet->mode->pixmapHeight;
-            area->granularity = 0;
-            area->MoveAreaCallback = 0;
-            area->RemoveAreaCallback = 0;
-            area->devPrivate.ptr = 0;
-
-            pixPriv->flags |= OFFSCREEN | DGA_PIXMAP;
-            pixPriv->offscreenArea = area;
-
-            if (!infoRec->dgaSaves) {   /* save pixmap cache state */
-                SavedCacheStatePtr state = malloc(sizeof(SavedCacheState));
-
-                state->UsingPixmapCache = infoRec->UsingPixmapCache;
-                state->CanDoColor8x8 = infoRec->CanDoColor8x8;
-                state->CanDoMono8x8 = infoRec->CanDoMono8x8;
-                infoRec->dgaSaves = (char *) state;
-
-                infoRec->UsingPixmapCache = FALSE;
-                if (infoRec->PixmapCacheFlags & CACHE_MONO_8x8)
-                    infoRec->CanDoMono8x8 = FALSE;
-                if (infoRec->PixmapCacheFlags & CACHE_COLOR_8x8)
-                    infoRec->CanDoColor8x8 = FALSE;
-            }
-        }
-    }
-
-    return ret;
-}
-
-static void
-XAAEnableDisableFBAccess(ScrnInfoPtr pScrn, Bool enable)
-{
-    ScreenPtr pScreen = xf86ScrnToScreen(pScrn);
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCREEN(pScreen);
-    XAAScreenPtr pScreenPriv =
-        (XAAScreenPtr) dixLookupPrivate(&pScreen->devPrivates, XAAScreenKey);
-
-    if (!enable) {
-        if ((infoRec->Flags & OFFSCREEN_PIXMAPS) && (infoRec->OffscreenPixmaps))
-            XAAMoveOutOffscreenPixmaps(pScreen);
-        if (infoRec->Flags & PIXMAP_CACHE)
-            XAAInvalidatePixmapCache(pScreen);
-        SwitchedOut = TRUE;
-    }
-
-    (*pScreenPriv->EnableDisableFBAccess) (pScrn, enable);
-
-    if (enable) {
-        if ((infoRec->Flags & OFFSCREEN_PIXMAPS) && (infoRec->OffscreenPixmaps))
-            XAAMoveInOffscreenPixmaps(pScreen);
-        SwitchedOut = FALSE;
-    }
-}
diff --git a/hw/xfree86/xaa/xaaInitAccel.c b/hw/xfree86/xaa/xaaInitAccel.c
deleted file mode 100644
index a36e0b7..0000000
--- a/hw/xfree86/xaa/xaaInitAccel.c
+++ /dev/null
@@ -1,1571 +0,0 @@
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include <string.h>
-
-#include "misc.h"
-#include "xf86.h"
-#include "xf86_OSproc.h"
-
-#include <X11/X.h>
-#include "scrnintstr.h"
-#include "xf86str.h"
-#include "xaa.h"
-#include "xaalocal.h"
-#include "xf86fbman.h"
-#include "servermd.h"
-
-/*
- * XAA Config options
- */
-
-typedef enum {
-    XAAOPT_SCREEN_TO_SCREEN_COPY,
-    XAAOPT_SOLID_FILL_RECT,
-    XAAOPT_SOLID_FILL_TRAP,
-    XAAOPT_SOLID_TWO_POINT_LINE,
-    XAAOPT_SOLID_BRESENHAM_LINE,
-    XAAOPT_SOLID_HORVERT_LINE,
-    XAAOPT_DASHED_TWO_POINT_LINE,
-    XAAOPT_DASHED_BRESENHAM_LINE,
-    XAAOPT_MONO_8x8_PATTERN_FILL_RECT,
-    XAAOPT_MONO_8x8_PATTERN_FILL_TRAP,
-    XAAOPT_COL_8x8_PATTERN_FILL_RECT,
-    XAAOPT_COL_8x8_PATTERN_FILL_TRAP,
-    XAAOPT_CPU_TO_SCREEN_COL_EXP_FILL,
-    XAAOPT_SCANLINE_CPU_TO_SCREEN_COL_EXP_FILL,
-    XAAOPT_SCREEN_TO_SCREEN_COL_EXP_FILL,
-    XAAOPT_IMAGE_WRITE_RECT,
-    XAAOPT_SCANLINE_IMAGE_WRITE_RECT,
-    XAAOPT_WRITE_BITMAP,
-    XAAOPT_WRITE_PIXMAP,
-    XAAOPT_PIXMAP_CACHE,
-    XAAOPT_OFFSCREEN_PIXMAPS,
-    XAAOPT_HAS_DUMB_INVERTED_OPTION_SENSE
-} XAAOpts;
-
-static const OptionInfoRec XAAOptions[] = {
-    {XAAOPT_SCREEN_TO_SCREEN_COPY, "XaaNoScreenToScreenCopy",
-     OPTV_BOOLEAN, {0}, FALSE},
-    {XAAOPT_SOLID_FILL_RECT, "XaaNoSolidFillRect",
-     OPTV_BOOLEAN, {0}, FALSE},
-    {XAAOPT_SOLID_FILL_TRAP, "XaaNoSolidFillTrap",
-     OPTV_BOOLEAN, {0}, FALSE},
-    {XAAOPT_SOLID_TWO_POINT_LINE, "XaaNoSolidTwoPointLine",
-     OPTV_BOOLEAN, {0}, FALSE},
-    {XAAOPT_SOLID_BRESENHAM_LINE, "XaaNoSolidBresenhamLine",
-     OPTV_BOOLEAN, {0}, FALSE},
-    {XAAOPT_SOLID_HORVERT_LINE, "XaaNoSolidHorVertLine",
-     OPTV_BOOLEAN, {0}, FALSE},
-    {XAAOPT_DASHED_TWO_POINT_LINE, "XaaNoDashedTwoPointLine",
-     OPTV_BOOLEAN, {0}, FALSE},
-    {XAAOPT_DASHED_BRESENHAM_LINE, "XaaNoDashedBresenhamLine",
-     OPTV_BOOLEAN, {0}, FALSE},
-    {XAAOPT_MONO_8x8_PATTERN_FILL_RECT, "XaaNoMono8x8PatternFillRect",
-     OPTV_BOOLEAN, {0}, FALSE},
-    {XAAOPT_MONO_8x8_PATTERN_FILL_TRAP, "XaaNoMono8x8PatternFillTrap",
-     OPTV_BOOLEAN, {0}, FALSE},
-    {XAAOPT_COL_8x8_PATTERN_FILL_RECT, "XaaNoColor8x8PatternFillRect",
-     OPTV_BOOLEAN, {0}, FALSE},
-    {XAAOPT_COL_8x8_PATTERN_FILL_TRAP, "XaaNoColor8x8PatternFillTrap",
-     OPTV_BOOLEAN, {0}, FALSE},
-    {XAAOPT_CPU_TO_SCREEN_COL_EXP_FILL, "XaaNoCPUToScreenColorExpandFill",
-     OPTV_BOOLEAN, {0}, FALSE},
-    {XAAOPT_SCANLINE_CPU_TO_SCREEN_COL_EXP_FILL,
-     "XaaNoScanlineCPUToScreenColorExpandFill",
-     OPTV_BOOLEAN, {0}, FALSE},
-    {XAAOPT_SCREEN_TO_SCREEN_COL_EXP_FILL, "XaaNoScreenToScreenColorExpandFill",
-     OPTV_BOOLEAN, {0}, FALSE},
-    {XAAOPT_IMAGE_WRITE_RECT, "XaaNoImageWriteRect",
-     OPTV_BOOLEAN, {0}, FALSE},
-    {XAAOPT_SCANLINE_IMAGE_WRITE_RECT, "XaaNoScanlineImageWriteRect",
-     OPTV_BOOLEAN, {0}, FALSE},
-    {XAAOPT_WRITE_BITMAP, "XaaNoWriteBitmap",
-     OPTV_BOOLEAN, {0}, FALSE},
-    {XAAOPT_WRITE_PIXMAP, "XaaNoWritePixmap",
-     OPTV_BOOLEAN, {0}, FALSE},
-    {XAAOPT_PIXMAP_CACHE, "XaaNoPixmapCache",
-     OPTV_BOOLEAN, {0}, FALSE},
-    {XAAOPT_OFFSCREEN_PIXMAPS, "XaaNoOffscreenPixmaps",
-     OPTV_BOOLEAN, {0}, FALSE},
-    {XAAOPT_HAS_DUMB_INVERTED_OPTION_SENSE, "XaaOffscreenPixmaps",
-     OPTV_BOOLEAN, {0}, FALSE},
-    {-1, NULL,
-     OPTV_NONE, {0}, FALSE}
-};
-
-static XF86ModuleVersionInfo xaaVersRec = {
-    "xaa",
-    MODULEVENDORSTRING,
-    MODINFOSTRING1,
-    MODINFOSTRING2,
-    XORG_VERSION_CURRENT,
-    XAA_VERSION_MAJOR,
-    XAA_VERSION_MINOR,
-    XAA_VERSION_RELEASE,
-    ABI_CLASS_VIDEODRV,         /* requires the video driver ABI */
-    ABI_VIDEODRV_VERSION,
-    MOD_CLASS_NONE,
-    {0, 0, 0, 0}
-};
-
-_X_EXPORT XF86ModuleData xaaModuleData = { &xaaVersRec, NULL, NULL };
-
-Bool
-XAAInitAccel(ScreenPtr pScreen, XAAInfoRecPtr infoRec)
-{
-    int index = pScreen->myNum;
-    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
-    Bool HaveScreenToScreenCopy = FALSE;
-    Bool HaveColorExpansion = FALSE;
-    Bool HaveScanlineColorExpansion = FALSE;
-    Bool HaveSolidFillRect = FALSE;
-    Bool HaveMono8x8PatternFillRect = FALSE;
-    Bool HaveColor8x8PatternFillRect = FALSE;
-    Bool HaveSolidFillTrap = FALSE;
-    Bool HaveMono8x8PatternFillTrap = FALSE;
-    Bool HaveColor8x8PatternFillTrap = FALSE;
-    Bool HaveSolidTwoPointLine = FALSE;
-    Bool HaveSolidBresenhamLine = FALSE;
-    Bool HaveSolidHorVertLine = FALSE;
-    Bool HaveDashedTwoPointLine = FALSE;
-    Bool HaveDashedBresenhamLine = FALSE;
-    Bool HaveImageWriteRect = FALSE;
-    Bool HaveScanlineImageWriteRect = FALSE;
-    Bool HaveScreenToScreenColorExpandFill = FALSE;
-    OptionInfoPtr options;
-    int is_shared = 0;
-    int i;
-
-    options = xnfalloc(sizeof(XAAOptions));
-    (void) memcpy(options, XAAOptions, sizeof(XAAOptions));
-    xf86ProcessOptions(pScrn->scrnIndex, pScrn->options, options);
-
-    infoRec->pScrn = pScrn;
-    infoRec->NeedToSync = FALSE;
-
-    /* must have a Sync function */
-    if (!infoRec->Sync)
-        return FALSE;
-    for (i = 0; i < pScrn->numEntities; i++) {
-        if (xf86IsEntityShared(pScrn->entityList[i]))
-            is_shared = 1;
-    }
-
-    /* If this PCI entity has IS_SHARED_ACCEL set in entityProp
-     * then a RestoreAccelState function is required
-     */
-    if (!infoRec->RestoreAccelState && is_shared)
-        return FALSE;
-
-    if (infoRec->RestoreAccelState) {
-        if (!XAAInitStateWrap(pScreen, infoRec))
-            return FALSE;
-    }
-
-    if (serverGeneration == 1)
-        xf86DrvMsg(index, X_INFO,
-                   "Using XFree86 Acceleration Architecture (XAA)\n");
-
-    /************** Low Level *************/
-
-    if (!infoRec->SetClippingRectangle || !infoRec->DisableClipping) {
-        infoRec->ClippingFlags = 0;
-        infoRec->SetClippingRectangle = NULL;
-        infoRec->DisableClipping = NULL;
-    }
-
-    /**** CopyArea ****/
-
-    if (infoRec->SetupForScreenToScreenCopy &&
-        infoRec->SubsequentScreenToScreenCopy &&
-        !xf86ReturnOptValBool(options, XAAOPT_SCREEN_TO_SCREEN_COPY, FALSE)) {
-        HaveScreenToScreenCopy = TRUE;
-    }
-    else {
-        infoRec->ScreenToScreenCopyFlags = 0;
-        infoRec->SetupForScreenToScreenCopy = NULL;
-        infoRec->SubsequentScreenToScreenCopy = NULL;
-    }
-
-    /**** Solid Filled Rects ****/
-
-    if (infoRec->SetupForSolidFill && infoRec->SubsequentSolidFillRect &&
-        !xf86ReturnOptValBool(options, XAAOPT_SOLID_FILL_RECT, FALSE)) {
-        HaveSolidFillRect = TRUE;
-        if (infoRec->SubsequentSolidFillTrap &&
-            !xf86ReturnOptValBool(options, XAAOPT_SOLID_FILL_TRAP, FALSE))
-            HaveSolidFillTrap = TRUE;
-        else
-            infoRec->SubsequentSolidFillTrap = NULL;
-    }
-    else {
-        infoRec->SolidFillFlags = 0;
-        infoRec->SetupForSolidFill = NULL;
-        infoRec->SubsequentSolidFillRect = NULL;
-        infoRec->SubsequentSolidFillTrap = NULL;
-    }
-
-    /**** Solid lines ****/
-
-    if (infoRec->SetupForSolidLine) {
-        if (infoRec->SubsequentSolidTwoPointLine &&
-            !xf86ReturnOptValBool(options, XAAOPT_SOLID_TWO_POINT_LINE, FALSE))
-            HaveSolidTwoPointLine = TRUE;
-        if (infoRec->SubsequentSolidBresenhamLine &&
-            !xf86ReturnOptValBool(options, XAAOPT_SOLID_BRESENHAM_LINE,
-                                  FALSE)) {
-            HaveSolidBresenhamLine = TRUE;
-
-            if (infoRec->SolidBresenhamLineErrorTermBits)
-                infoRec->SolidBresenhamLineErrorTermBits =
-                    ~((1 << infoRec->SolidBresenhamLineErrorTermBits) - 1);
-        }
-
-        if (infoRec->SubsequentSolidHorVertLine &&
-            !xf86ReturnOptValBool(options, XAAOPT_SOLID_HORVERT_LINE, FALSE))
-            HaveSolidHorVertLine = TRUE;
-        else if (HaveSolidTwoPointLine) {
-            infoRec->SubsequentSolidHorVertLine = XAASolidHorVertLineAsTwoPoint;
-            HaveSolidHorVertLine = TRUE;
-        }
-        else if (HaveSolidBresenhamLine) {
-            infoRec->SubsequentSolidHorVertLine =
-                XAASolidHorVertLineAsBresenham;
-            HaveSolidHorVertLine = TRUE;
-        }
-    }
-
-    /* XXX Should this also check for XAAOPT_SOLID_HORVERT_LINE? */
-    if (!HaveSolidTwoPointLine &&
-        !HaveSolidBresenhamLine && !HaveSolidHorVertLine && HaveSolidFillRect) {
-        infoRec->SetupForSolidLine = infoRec->SetupForSolidFill;
-        infoRec->SubsequentSolidHorVertLine = XAASolidHorVertLineAsRects;
-        infoRec->SolidLineFlags = infoRec->SolidFillFlags;
-        HaveSolidHorVertLine = TRUE;
-    }
-
-    if (!HaveSolidTwoPointLine)
-        infoRec->SubsequentSolidTwoPointLine = NULL;
-    if (!HaveSolidBresenhamLine)
-        infoRec->SubsequentSolidBresenhamLine = NULL;
-    if (!HaveSolidHorVertLine)
-        infoRec->SubsequentSolidHorVertLine = NULL;
-
-    /* Disable all if nothing left over */
-    if (!HaveSolidTwoPointLine &&
-        !HaveSolidBresenhamLine && !HaveSolidHorVertLine) {
-        infoRec->SolidLineFlags = 0;
-        infoRec->SetupForSolidLine = NULL;
-    }
-
-    /**** 8x8 Mono Pattern Filled Rects ****/
-
-    if (infoRec->SetupForMono8x8PatternFill &&
-        infoRec->SubsequentMono8x8PatternFillRect &&
-        !xf86ReturnOptValBool(options,
-                              XAAOPT_MONO_8x8_PATTERN_FILL_RECT, FALSE)) {
-        HaveMono8x8PatternFillRect = TRUE;
-        if (infoRec->SubsequentMono8x8PatternFillTrap &&
-            !xf86ReturnOptValBool(options,
-                                  XAAOPT_MONO_8x8_PATTERN_FILL_TRAP, FALSE))
-            HaveMono8x8PatternFillTrap = TRUE;
-
-        if (infoRec->Mono8x8PatternFillFlags & HARDWARE_PATTERN_PROGRAMMED_BITS) {
-            infoRec->CanDoMono8x8 = TRUE;
-        }
-        else {                  /* others require caching */
-            int min_pitch;
-
-            infoRec->PixmapCacheFlags |= CACHE_MONO_8x8;
-
-            switch (pScrn->bitsPerPixel) {
-            case 32:
-                min_pitch = 2;
-                break;
-            case 24:
-                min_pitch = 3;
-                break;
-            case 16:
-                min_pitch = 4;
-                break;
-            default:
-                min_pitch = 8;
-                break;
-            }
-
-            if (min_pitch > infoRec->MonoPatternPitch)
-                infoRec->MonoPatternPitch = min_pitch;
-
-            if (infoRec->Mono8x8PatternFillFlags &
-                HARDWARE_PATTERN_PROGRAMMED_ORIGIN) {
-                if (!infoRec->CacheWidthMono8x8Pattern ||
-                    !infoRec->CacheHeightMono8x8Pattern) {
-                    infoRec->CacheWidthMono8x8Pattern =
-                        infoRec->MonoPatternPitch;
-                    infoRec->CacheHeightMono8x8Pattern = 1;
-                }
-            }
-            else {
-                int numPerLine = 128 / infoRec->MonoPatternPitch;
-
-                if (!infoRec->CacheWidthMono8x8Pattern ||
-                    !infoRec->CacheHeightMono8x8Pattern) {
-                    infoRec->CacheWidthMono8x8Pattern =
-                        numPerLine * infoRec->MonoPatternPitch;
-                    infoRec->CacheHeightMono8x8Pattern =
-                        (64 + numPerLine - 1) / numPerLine;
-                }
-            }
-        }
-    }
-    else {
-        infoRec->Mono8x8PatternFillFlags = 0;
-        infoRec->SetupForMono8x8PatternFill = NULL;
-        infoRec->SubsequentMono8x8PatternFillRect = NULL;
-    }
-
-    /**** Dashed lines ****/
-
-    if (infoRec->SetupForDashedLine && infoRec->DashPatternMaxLength) {
-        if (infoRec->SubsequentDashedTwoPointLine &&
-            !xf86ReturnOptValBool(options, XAAOPT_DASHED_TWO_POINT_LINE, FALSE))
-            HaveDashedTwoPointLine = TRUE;
-        if (infoRec->SubsequentDashedBresenhamLine &&
-            !xf86ReturnOptValBool(options, XAAOPT_DASHED_BRESENHAM_LINE,
-                                  FALSE)) {
-            HaveDashedBresenhamLine = TRUE;
-
-            if (infoRec->DashedBresenhamLineErrorTermBits)
-                infoRec->DashedBresenhamLineErrorTermBits =
-                    ~((1 << infoRec->DashedBresenhamLineErrorTermBits) - 1);
-        }
-    }
-
-    if (!HaveDashedTwoPointLine)
-        infoRec->SubsequentDashedTwoPointLine = NULL;
-    if (!HaveDashedBresenhamLine)
-        infoRec->SubsequentDashedBresenhamLine = NULL;
-
-    /* Disable all if nothing left over */
-    if (!HaveDashedTwoPointLine && !HaveDashedBresenhamLine) {
-        infoRec->DashedLineFlags = 0;
-        infoRec->SetupForDashedLine = NULL;
-    }
-
-    /**** 8x8 Color Pattern Filled Rects ****/
-
-    if (infoRec->SetupForColor8x8PatternFill &&
-        infoRec->SubsequentColor8x8PatternFillRect &&
-        !xf86ReturnOptValBool(options, XAAOPT_COL_8x8_PATTERN_FILL_RECT,
-                              FALSE)) {
-        HaveColor8x8PatternFillRect = TRUE;
-        if (infoRec->SubsequentColor8x8PatternFillTrap &&
-            !xf86ReturnOptValBool(options, XAAOPT_COL_8x8_PATTERN_FILL_TRAP,
-                                  FALSE))
-            HaveColor8x8PatternFillTrap = TRUE;
-        else
-            infoRec->SubsequentColor8x8PatternFillTrap = NULL;
-
-        infoRec->PixmapCacheFlags |= CACHE_COLOR_8x8;
-
-        if (infoRec->Color8x8PatternFillFlags &
-            HARDWARE_PATTERN_PROGRAMMED_ORIGIN) {
-            if (!infoRec->CacheWidthColor8x8Pattern ||
-                !infoRec->CacheHeightColor8x8Pattern) {
-                infoRec->CacheWidthColor8x8Pattern = 64;
-                infoRec->CacheHeightColor8x8Pattern = 1;
-            }
-        }
-        else {
-            if (!infoRec->CacheWidthColor8x8Pattern ||
-                !infoRec->CacheHeightColor8x8Pattern) {
-                infoRec->CacheWidthColor8x8Pattern = 128;
-                infoRec->CacheHeightColor8x8Pattern = 8;
-            }
-        }
-    }
-    else {
-        infoRec->Color8x8PatternFillFlags = 0;
-        infoRec->SetupForColor8x8PatternFill = NULL;
-        infoRec->SubsequentColor8x8PatternFillRect = NULL;
-        infoRec->SubsequentColor8x8PatternFillTrap = NULL;
-    }
-
-    /**** Color Expansion ****/
-
-    if (infoRec->SetupForCPUToScreenColorExpandFill &&
-        infoRec->ColorExpandBase &&
-        infoRec->SubsequentCPUToScreenColorExpandFill &&
-        !xf86ReturnOptValBool(options, XAAOPT_CPU_TO_SCREEN_COL_EXP_FILL,
-                              FALSE)) {
-        int dwordsNeeded = pScrn->virtualX;
-
-        infoRec->ColorExpandRange >>= 2;        /* convert to DWORDS */
-        HaveColorExpansion = TRUE;
-
-        if (infoRec->CPUToScreenColorExpandFillFlags &
-            LEFT_EDGE_CLIPPING_NEGATIVE_X)
-            dwordsNeeded += 31;
-        dwordsNeeded = (dwordsNeeded + 31) >> 5;
-        if (dwordsNeeded > infoRec->ColorExpandRange)
-            infoRec->CPUToScreenColorExpandFillFlags |= CPU_TRANSFER_BASE_FIXED;
-    }
-    else {
-        infoRec->CPUToScreenColorExpandFillFlags = 0;
-        infoRec->SetupForCPUToScreenColorExpandFill = NULL;
-        infoRec->SubsequentCPUToScreenColorExpandFill = NULL;
-    }
-
-    /**** Scanline Color Expansion ****/
-
-    if (infoRec->SetupForScanlineCPUToScreenColorExpandFill &&
-        infoRec->SubsequentScanlineCPUToScreenColorExpandFill &&
-        infoRec->SubsequentColorExpandScanline &&
-        infoRec->ScanlineColorExpandBuffers &&
-        (infoRec->NumScanlineColorExpandBuffers > 0) &&
-        !xf86ReturnOptValBool(options,
-                              XAAOPT_SCANLINE_CPU_TO_SCREEN_COL_EXP_FILL,
-                              FALSE)) {
-        HaveScanlineColorExpansion = TRUE;
-    }
-    else {
-        infoRec->ScanlineCPUToScreenColorExpandFillFlags = 0;
-        infoRec->SetupForScanlineCPUToScreenColorExpandFill = NULL;
-        infoRec->SubsequentScanlineCPUToScreenColorExpandFill = NULL;
-        infoRec->SubsequentColorExpandScanline = NULL;
-    }
-
-    /**** Screen to Screen Color Expansion ****/
-
-    if (infoRec->SetupForScreenToScreenColorExpandFill &&
-        infoRec->SubsequentScreenToScreenColorExpandFill &&
-        !xf86ReturnOptValBool(options, XAAOPT_SCREEN_TO_SCREEN_COL_EXP_FILL,
-                              FALSE)) {
-        HaveScreenToScreenColorExpandFill = TRUE;
-        if (!infoRec->CacheColorExpandDensity)
-            infoRec->CacheColorExpandDensity = 1;
-    }
-    else {
-        infoRec->ScreenToScreenColorExpandFillFlags = 0;
-        infoRec->SetupForScreenToScreenColorExpandFill = NULL;
-        infoRec->SubsequentScreenToScreenColorExpandFill = NULL;
-    }
-
-    /**** Image Writes ****/
-
-    if (infoRec->SetupForImageWrite && infoRec->ImageWriteBase &&
-        infoRec->SubsequentImageWriteRect &&
-        !xf86ReturnOptValBool(options, XAAOPT_IMAGE_WRITE_RECT, FALSE)) {
-
-        infoRec->ImageWriteRange >>= 2; /* convert to DWORDS */
-        if (infoRec->ImageWriteFlags & CPU_TRANSFER_BASE_FIXED)
-            infoRec->ImageWriteRange = 0;
-        HaveImageWriteRect = TRUE;
-    }
-    else {
-        infoRec->ImageWriteFlags = 0;
-        infoRec->SetupForImageWrite = NULL;
-        infoRec->SubsequentImageWriteRect = NULL;
-    }
-
-    /**** Scanline Image Writes ****/
-
-    if (infoRec->SetupForScanlineImageWrite &&
-        infoRec->SubsequentScanlineImageWriteRect &&
-        infoRec->SubsequentImageWriteScanline &&
-        infoRec->ScanlineImageWriteBuffers &&
-        (infoRec->NumScanlineImageWriteBuffers > 0) &&
-        !xf86ReturnOptValBool(options, XAAOPT_SCANLINE_IMAGE_WRITE_RECT,
-                              FALSE)) {
-        HaveScanlineImageWriteRect = TRUE;
-    }
-    else {
-        infoRec->ScanlineImageWriteFlags = 0;
-        infoRec->SetupForScanlineImageWrite = NULL;
-        infoRec->SubsequentScanlineImageWriteRect = NULL;
-        infoRec->SubsequentImageWriteScanline = NULL;
-    }
-
-#ifndef __i386__
-    /* XAA makes some unaligned accesses when clipping is not available */
-#define CLIP_FLAGS (LEFT_EDGE_CLIPPING | LEFT_EDGE_CLIPPING_NEGATIVE_X)
-    if (HaveImageWriteRect &&
-        ((infoRec->ImageWriteFlags & CLIP_FLAGS) != CLIP_FLAGS)) {
-        HaveImageWriteRect = FALSE;
-    }
-    if (HaveScanlineImageWriteRect &&
-        ((infoRec->ScanlineImageWriteFlags & CLIP_FLAGS) != CLIP_FLAGS)) {
-        HaveScanlineImageWriteRect = FALSE;
-    }
-#endif
-
-    if (serverGeneration == 1) {
-        if (HaveScreenToScreenCopy)
-            xf86ErrorF("\tScreen to screen bit blits\n");
-        if (HaveSolidFillRect)
-            xf86ErrorF("\tSolid filled rectangles\n");
-        if (HaveSolidFillTrap)
-            xf86ErrorF("\tSolid filled trapezoids\n");
-        if (HaveMono8x8PatternFillRect)
-            xf86ErrorF("\t8x8 mono pattern filled rectangles\n");
-        if (HaveMono8x8PatternFillTrap)
-            xf86ErrorF("\t8x8 mono pattern filled trapezoids\n");
-        if (HaveColor8x8PatternFillRect)
-            xf86ErrorF("\t8x8 color pattern filled rectangles\n");
-        if (HaveColor8x8PatternFillTrap)
-            xf86ErrorF("\t8x8 color pattern filled trapezoids\n");
-
-        if (HaveColorExpansion)
-            xf86ErrorF("\tCPU to Screen color expansion\n");
-        else if (HaveScanlineColorExpansion)
-            xf86ErrorF("\tIndirect CPU to Screen color expansion\n");
-
-        if (HaveScreenToScreenColorExpandFill)
-            xf86ErrorF("\tScreen to Screen color expansion\n");
-
-        if (HaveSolidTwoPointLine || HaveSolidBresenhamLine)
-            xf86ErrorF("\tSolid Lines\n");
-        else if (HaveSolidHorVertLine)
-            xf86ErrorF("\tSolid Horizontal and Vertical Lines\n");
-
-        if (HaveDashedTwoPointLine || HaveDashedBresenhamLine)
-            xf86ErrorF("\tDashed Lines\n");
-
-        if (HaveImageWriteRect)
-            xf86ErrorF("\tImage Writes\n");
-        else if (HaveScanlineImageWriteRect)
-            xf86ErrorF("\tScanline Image Writes\n");
-
-    }
-
-#define XAAMSG(s) do { if (serverGeneration == 1) xf86ErrorF(s); } while (0)
-
-    if ((infoRec->Flags & OFFSCREEN_PIXMAPS) && HaveScreenToScreenCopy &&
-        xf86ReturnOptValBool(options,
-                             XAAOPT_HAS_DUMB_INVERTED_OPTION_SENSE, FALSE)) {
-        XAAMSG("\tOffscreen Pixmaps\n");
-    }
-    else {
-        infoRec->Flags &= ~OFFSCREEN_PIXMAPS;
-    }
-
-    /************** Mid Level *************/
-
-    /**** ScreenToScreenBitBlt ****/
-
-    if (infoRec->ScreenToScreenBitBlt) {
-        XAAMSG("\tDriver provided ScreenToScreenBitBlt replacement\n");
-    }
-    else if (HaveScreenToScreenCopy) {
-        infoRec->ScreenToScreenBitBlt = XAAScreenToScreenBitBlt;
-        infoRec->ScreenToScreenBitBltFlags = infoRec->ScreenToScreenCopyFlags;
-    }
-
-    /**** FillSolidRects ****/
-
-    if (infoRec->FillSolidRects) {
-        XAAMSG("\tDriver provided FillSolidRects replacement\n");
-    }
-    else if (HaveSolidFillRect) {
-        infoRec->FillSolidRects = XAAFillSolidRects;
-        infoRec->FillSolidRectsFlags = infoRec->SolidFillFlags;
-    }
-
-    /**** FillSolidSpans ****/
-
-    if (infoRec->FillSolidSpans) {
-        XAAMSG("\tDriver provided FillSolidSpans replacement\n");
-    }
-    else if (HaveSolidFillRect) {
-        infoRec->FillSolidSpans = XAAFillSolidSpans;
-        infoRec->FillSolidSpansFlags = infoRec->SolidFillFlags;
-    }
-
-    /**** FillMono8x8PatternRects ****/
-
-    if (infoRec->FillMono8x8PatternRects) {
-        XAAMSG("\tDriver provided FillMono8x8PatternRects replacement\n");
-    }
-    else if (HaveMono8x8PatternFillRect) {
-        infoRec->FillMono8x8PatternRects =
-            (infoRec->
-             Mono8x8PatternFillFlags & HARDWARE_PATTERN_SCREEN_ORIGIN) ?
-            XAAFillMono8x8PatternRectsScreenOrigin : XAAFillMono8x8PatternRects;
-
-        infoRec->FillMono8x8PatternRectsFlags =
-            infoRec->Mono8x8PatternFillFlags;
-    }
-
-    /**** FillMono8x8PatternSpans ****/
-
-    if (infoRec->FillMono8x8PatternSpans) {
-        XAAMSG("\tDriver provided FillMono8x8PatternSpans replacement\n");
-    }
-    else if (HaveMono8x8PatternFillRect) {
-        infoRec->FillMono8x8PatternSpans =
-            (infoRec->
-             Mono8x8PatternFillFlags & HARDWARE_PATTERN_SCREEN_ORIGIN) ?
-            XAAFillMono8x8PatternSpansScreenOrigin : XAAFillMono8x8PatternSpans;
-
-        infoRec->FillMono8x8PatternSpansFlags =
-            infoRec->Mono8x8PatternFillFlags;
-    }
-
-    /**** FillColor8x8Rects ****/
-
-    if (infoRec->FillColor8x8PatternRects) {
-        XAAMSG("\tDriver provided FillColor8x8PatternRects replacement\n");
-    }
-    else if (HaveColor8x8PatternFillRect) {
-        infoRec->FillColor8x8PatternRects =
-            (infoRec->
-             Color8x8PatternFillFlags & HARDWARE_PATTERN_SCREEN_ORIGIN) ?
-            XAAFillColor8x8PatternRectsScreenOrigin :
-            XAAFillColor8x8PatternRects;
-
-        infoRec->FillColor8x8PatternRectsFlags =
-            infoRec->Color8x8PatternFillFlags;
-    }
-
-    /**** FillColor8x8Spans ****/
-
-    if (infoRec->FillColor8x8PatternSpans) {
-        XAAMSG("\tDriver provided FillColor8x8PatternSpans replacement\n");
-    }
-    else if (HaveColor8x8PatternFillRect) {
-        infoRec->FillColor8x8PatternSpans =
-            (infoRec->
-             Color8x8PatternFillFlags & HARDWARE_PATTERN_SCREEN_ORIGIN) ?
-            XAAFillColor8x8PatternSpansScreenOrigin :
-            XAAFillColor8x8PatternSpans;
-
-        infoRec->FillColor8x8PatternSpansFlags =
-            infoRec->Color8x8PatternFillFlags;
-    }
-
-    /**** FillCacheBltRects ****/
-
-    if (infoRec->FillCacheBltRects) {
-        XAAMSG("\tDriver provided FillCacheBltRects replacement\n");
-    }
-    else if (HaveScreenToScreenCopy) {
-        infoRec->FillCacheBltRects = XAAFillCacheBltRects;
-        infoRec->FillCacheBltRectsFlags = infoRec->ScreenToScreenCopyFlags;
-    }
-
-    /**** FillCacheBltSpans ****/
-
-    if (infoRec->FillCacheBltSpans) {
-        XAAMSG("\tDriver provided FillCacheBltSpans replacement\n");
-    }
-    else if (HaveScreenToScreenCopy) {
-        infoRec->FillCacheBltSpans = XAAFillCacheBltSpans;
-        infoRec->FillCacheBltSpansFlags = infoRec->ScreenToScreenCopyFlags;
-    }
-
-    /**** FillCacheExpandRects ****/
-
-    if (infoRec->FillCacheExpandRects) {
-        XAAMSG("\tDriver provided FillCacheExpandRects replacement\n");
-    }
-    else if (HaveScreenToScreenColorExpandFill) {
-        infoRec->FillCacheExpandRects = XAAFillCacheExpandRects;
-        infoRec->FillCacheExpandRectsFlags =
-            infoRec->ScreenToScreenColorExpandFillFlags;
-    }
-
-    /**** FillCacheExpandSpans ****/
-
-    if (infoRec->FillCacheExpandSpans) {
-        XAAMSG("\tDriver provided FillCacheExpandSpans replacement\n");
-    }
-    else if (HaveScreenToScreenColorExpandFill) {
-        infoRec->FillCacheExpandSpans = XAAFillCacheExpandSpans;
-        infoRec->FillCacheExpandSpansFlags =
-            infoRec->ScreenToScreenColorExpandFillFlags;
-    }
-
-    /**** FillColorExpandRects ****/
-
-    if (infoRec->FillColorExpandRects) {
-        XAAMSG("\tDriver provided FillColorExpandRects replacement\n");
-    }
-    else if (HaveColorExpansion) {
-        if (infoRec->CPUToScreenColorExpandFillFlags & TRIPLE_BITS_24BPP) {
-            if (infoRec->CPUToScreenColorExpandFillFlags &
-                BIT_ORDER_IN_BYTE_MSBFIRST) {
-                if (infoRec->CPUToScreenColorExpandFillFlags &
-                    CPU_TRANSFER_BASE_FIXED)
-                    infoRec->FillColorExpandRects =
-                        XAAFillColorExpandRects3MSBFirstFixedBase;
-                else
-                    infoRec->FillColorExpandRects =
-                        XAAFillColorExpandRects3MSBFirst;
-            }
-            else {
-                if (infoRec->CPUToScreenColorExpandFillFlags &
-                    CPU_TRANSFER_BASE_FIXED)
-                    infoRec->FillColorExpandRects =
-                        XAAFillColorExpandRects3LSBFirstFixedBase;
-                else
-                    infoRec->FillColorExpandRects =
-                        XAAFillColorExpandRects3LSBFirst;
-            }
-        }
-        else {
-            if (infoRec->CPUToScreenColorExpandFillFlags &
-                BIT_ORDER_IN_BYTE_MSBFIRST) {
-                if (infoRec->CPUToScreenColorExpandFillFlags &
-                    CPU_TRANSFER_BASE_FIXED)
-                    infoRec->FillColorExpandRects =
-                        XAAFillColorExpandRectsMSBFirstFixedBase;
-                else
-                    infoRec->FillColorExpandRects =
-                        XAAFillColorExpandRectsMSBFirst;
-            }
-            else {
-                if (infoRec->CPUToScreenColorExpandFillFlags &
-                    CPU_TRANSFER_BASE_FIXED)
-                    infoRec->FillColorExpandRects =
-                        XAAFillColorExpandRectsLSBFirstFixedBase;
-                else
-                    infoRec->FillColorExpandRects =
-                        XAAFillColorExpandRectsLSBFirst;
-            }
-        }
-        infoRec->FillColorExpandRectsFlags =
-            infoRec->CPUToScreenColorExpandFillFlags;
-    }
-    else if (HaveScanlineColorExpansion) {
-        if (infoRec->ScanlineCPUToScreenColorExpandFillFlags &
-            TRIPLE_BITS_24BPP) {
-            if (infoRec->ScanlineCPUToScreenColorExpandFillFlags &
-                BIT_ORDER_IN_BYTE_MSBFIRST)
-                infoRec->FillColorExpandRects =
-                    XAAFillScanlineColorExpandRects3MSBFirst;
-            else
-                infoRec->FillColorExpandRects =
-                    XAAFillScanlineColorExpandRects3LSBFirst;
-        }
-        else {
-            if (infoRec->ScanlineCPUToScreenColorExpandFillFlags &
-                BIT_ORDER_IN_BYTE_MSBFIRST)
-                infoRec->FillColorExpandRects =
-                    XAAFillScanlineColorExpandRectsMSBFirst;
-            else
-                infoRec->FillColorExpandRects =
-                    XAAFillScanlineColorExpandRectsLSBFirst;
-        }
-        infoRec->FillColorExpandRectsFlags =
-            infoRec->ScanlineCPUToScreenColorExpandFillFlags;
-    }
-
-    /**** FillColorExpandSpans ****/
-
-    if (infoRec->FillColorExpandSpans) {
-        XAAMSG("\tDriver provided FillColorExpandSpans replacement\n");
-    }
-    else if (HaveColorExpansion) {
-        if (infoRec->CPUToScreenColorExpandFillFlags & TRIPLE_BITS_24BPP) {
-            if (infoRec->CPUToScreenColorExpandFillFlags &
-                BIT_ORDER_IN_BYTE_MSBFIRST) {
-                if (infoRec->CPUToScreenColorExpandFillFlags &
-                    CPU_TRANSFER_BASE_FIXED)
-                    infoRec->FillColorExpandSpans =
-                        XAAFillColorExpandSpans3MSBFirstFixedBase;
-                else
-                    infoRec->FillColorExpandSpans =
-                        XAAFillColorExpandSpans3MSBFirst;
-            }
-            else {
-                if (infoRec->CPUToScreenColorExpandFillFlags &
-                    CPU_TRANSFER_BASE_FIXED)
-                    infoRec->FillColorExpandSpans =
-                        XAAFillColorExpandSpans3LSBFirstFixedBase;
-                else
-                    infoRec->FillColorExpandSpans =
-                        XAAFillColorExpandSpans3LSBFirst;
-            }
-        }
-        else {
-            if (infoRec->CPUToScreenColorExpandFillFlags &
-                BIT_ORDER_IN_BYTE_MSBFIRST) {
-                if (infoRec->CPUToScreenColorExpandFillFlags &
-                    CPU_TRANSFER_BASE_FIXED)
-                    infoRec->FillColorExpandSpans =
-                        XAAFillColorExpandSpansMSBFirstFixedBase;
-                else
-                    infoRec->FillColorExpandSpans =
-                        XAAFillColorExpandSpansMSBFirst;
-            }
-            else {
-                if (infoRec->CPUToScreenColorExpandFillFlags &
-                    CPU_TRANSFER_BASE_FIXED)
-                    infoRec->FillColorExpandSpans =
-                        XAAFillColorExpandSpansLSBFirstFixedBase;
-                else
-                    infoRec->FillColorExpandSpans =
-                        XAAFillColorExpandSpansLSBFirst;
-            }
-        }
-        infoRec->FillColorExpandSpansFlags =
-            infoRec->CPUToScreenColorExpandFillFlags;
-    }
-    else if (HaveScanlineColorExpansion) {
-        if (infoRec->ScanlineCPUToScreenColorExpandFillFlags &
-            TRIPLE_BITS_24BPP) {
-            if (infoRec->ScanlineCPUToScreenColorExpandFillFlags &
-                BIT_ORDER_IN_BYTE_MSBFIRST)
-                infoRec->FillColorExpandSpans =
-                    XAAFillScanlineColorExpandSpans3MSBFirst;
-            else
-                infoRec->FillColorExpandSpans =
-                    XAAFillScanlineColorExpandSpans3LSBFirst;
-        }
-        else {
-            if (infoRec->ScanlineCPUToScreenColorExpandFillFlags &
-                BIT_ORDER_IN_BYTE_MSBFIRST)
-                infoRec->FillColorExpandSpans =
-                    XAAFillScanlineColorExpandSpansMSBFirst;
-            else
-                infoRec->FillColorExpandSpans =
-                    XAAFillScanlineColorExpandSpansLSBFirst;
-        }
-        infoRec->FillColorExpandSpansFlags =
-            infoRec->ScanlineCPUToScreenColorExpandFillFlags;
-    }
-
-    /**** FillImageWriteRects ****/
-
-    if (infoRec->FillImageWriteRects) {
-        XAAMSG("\tDriver provided FillImageWriteRects replacement\n");
-    }
-    else if (HaveImageWriteRect &&
-             (infoRec->ImageWriteFlags & LEFT_EDGE_CLIPPING_NEGATIVE_X) &&
-             (infoRec->ImageWriteFlags & LEFT_EDGE_CLIPPING)) {
-        infoRec->FillImageWriteRects = XAAFillImageWriteRects;
-        infoRec->FillImageWriteRectsFlags = infoRec->ImageWriteFlags;
-    }
-
-    /**** WriteBitmap ****/
-
-    if (infoRec->WriteBitmap &&
-        !xf86ReturnOptValBool(options, XAAOPT_WRITE_BITMAP, FALSE)) {
-        XAAMSG("\tDriver provided WriteBitmap replacement\n");
-    }
-    else if (HaveColorExpansion) {
-        if (infoRec->CPUToScreenColorExpandFillFlags & TRIPLE_BITS_24BPP) {
-            if (infoRec->CPUToScreenColorExpandFillFlags &
-                BIT_ORDER_IN_BYTE_MSBFIRST) {
-                if (infoRec->CPUToScreenColorExpandFillFlags &
-                    CPU_TRANSFER_BASE_FIXED)
-                    infoRec->WriteBitmap =
-                        XAAWriteBitmapColorExpand3MSBFirstFixedBase;
-                else
-                    infoRec->WriteBitmap = XAAWriteBitmapColorExpand3MSBFirst;
-            }
-            else {
-                if (infoRec->CPUToScreenColorExpandFillFlags &
-                    CPU_TRANSFER_BASE_FIXED)
-                    infoRec->WriteBitmap =
-                        XAAWriteBitmapColorExpand3LSBFirstFixedBase;
-                else
-                    infoRec->WriteBitmap = XAAWriteBitmapColorExpand3LSBFirst;
-            }
-        }
-        else {
-            if (infoRec->CPUToScreenColorExpandFillFlags &
-                BIT_ORDER_IN_BYTE_MSBFIRST) {
-                if (infoRec->CPUToScreenColorExpandFillFlags &
-                    CPU_TRANSFER_BASE_FIXED)
-                    infoRec->WriteBitmap =
-                        XAAWriteBitmapColorExpandMSBFirstFixedBase;
-                else
-                    infoRec->WriteBitmap = XAAWriteBitmapColorExpandMSBFirst;
-            }
-            else {
-                if (infoRec->CPUToScreenColorExpandFillFlags &
-                    CPU_TRANSFER_BASE_FIXED)
-                    infoRec->WriteBitmap =
-                        XAAWriteBitmapColorExpandLSBFirstFixedBase;
-                else
-                    infoRec->WriteBitmap = XAAWriteBitmapColorExpandLSBFirst;
-            }
-        }
-        infoRec->WriteBitmapFlags = infoRec->CPUToScreenColorExpandFillFlags;
-    }
-    else if (HaveScanlineColorExpansion) {
-        if (infoRec->ScanlineCPUToScreenColorExpandFillFlags &
-            TRIPLE_BITS_24BPP) {
-            if (infoRec->ScanlineCPUToScreenColorExpandFillFlags &
-                BIT_ORDER_IN_BYTE_MSBFIRST)
-                infoRec->WriteBitmap =
-                    XAAWriteBitmapScanlineColorExpand3MSBFirst;
-            else
-                infoRec->WriteBitmap =
-                    XAAWriteBitmapScanlineColorExpand3LSBFirst;
-        }
-        else {
-            if (infoRec->ScanlineCPUToScreenColorExpandFillFlags &
-                BIT_ORDER_IN_BYTE_MSBFIRST)
-                infoRec->WriteBitmap =
-                    XAAWriteBitmapScanlineColorExpandMSBFirst;
-            else
-                infoRec->WriteBitmap =
-                    XAAWriteBitmapScanlineColorExpandLSBFirst;
-        }
-        infoRec->WriteBitmapFlags =
-            infoRec->ScanlineCPUToScreenColorExpandFillFlags;
-    }
-    else
-        infoRec->WriteBitmap = NULL;
-
-    /**** TE Glyphs ****/
-
-    if (infoRec->TEGlyphRenderer) {
-        XAAMSG("\tDriver provided TEGlyphRenderer replacement\n");
-    }
-    else if (HaveColorExpansion) {
-        infoRec->TEGlyphRendererFlags =
-            infoRec->CPUToScreenColorExpandFillFlags;
-
-        if (infoRec->TEGlyphRendererFlags & TRIPLE_BITS_24BPP) {
-            if (infoRec->TEGlyphRendererFlags & BIT_ORDER_IN_BYTE_MSBFIRST) {
-                if (infoRec->TEGlyphRendererFlags & CPU_TRANSFER_BASE_FIXED)
-                    infoRec->TEGlyphRenderer =
-                        XAATEGlyphRenderer3MSBFirstFixedBase;
-                else
-                    infoRec->TEGlyphRenderer = XAATEGlyphRenderer3MSBFirst;
-            }
-            else {
-                if (infoRec->TEGlyphRendererFlags & CPU_TRANSFER_BASE_FIXED)
-                    infoRec->TEGlyphRenderer =
-                        XAATEGlyphRenderer3LSBFirstFixedBase;
-                else
-                    infoRec->TEGlyphRenderer = XAATEGlyphRenderer3LSBFirst;
-            }
-
-            if (!HaveSolidFillRect &&
-                (infoRec->TEGlyphRendererFlags & RGB_EQUAL)) {
-                infoRec->TEGlyphRendererFlags &= ~RGB_EQUAL;
-                XAAMSG("WARNING:  TEGlyphRenderer cannot support RGB_EQUAL"
-                       " without solid fills\n");
-            }
-        }
-        else {
-            if (infoRec->TEGlyphRendererFlags & BIT_ORDER_IN_BYTE_MSBFIRST) {
-                if (infoRec->TEGlyphRendererFlags & CPU_TRANSFER_BASE_FIXED)
-                    infoRec->TEGlyphRenderer =
-                        XAATEGlyphRendererMSBFirstFixedBase;
-                else
-                    infoRec->TEGlyphRenderer = XAATEGlyphRendererMSBFirst;
-            }
-            else {
-                if (infoRec->TEGlyphRendererFlags & CPU_TRANSFER_BASE_FIXED)
-                    infoRec->TEGlyphRenderer =
-                        XAATEGlyphRendererLSBFirstFixedBase;
-                else
-                    infoRec->TEGlyphRenderer = XAATEGlyphRendererLSBFirst;
-            }
-        }
-
-        if (!HaveSolidFillRect &&
-            (infoRec->TEGlyphRendererFlags & TRANSPARENCY_ONLY)) {
-            infoRec->TEGlyphRendererFlags &= ~TRANSPARENCY_ONLY;
-            XAAMSG("WARNING:  TEGlyphRenderer cannot support TRANPARENCY_ONLY"
-                   " without solid fills\n");
-        }
-
-    }
-    else if (HaveScanlineColorExpansion) {
-        infoRec->TEGlyphRendererFlags =
-            infoRec->ScanlineCPUToScreenColorExpandFillFlags;
-
-        if (infoRec->TEGlyphRendererFlags & TRIPLE_BITS_24BPP) {
-            if (infoRec->TEGlyphRendererFlags & BIT_ORDER_IN_BYTE_MSBFIRST)
-                infoRec->TEGlyphRenderer = XAATEGlyphRendererScanline3MSBFirst;
-            else
-                infoRec->TEGlyphRenderer = XAATEGlyphRendererScanline3LSBFirst;
-
-            if (!HaveSolidFillRect &&
-                (infoRec->TEGlyphRendererFlags & RGB_EQUAL)) {
-                infoRec->TEGlyphRendererFlags &= ~RGB_EQUAL;
-                XAAMSG("WARNING:  TEGlyphRenderer cannot support RGB_EQUAL"
-                       " without solid fills\n");
-            }
-        }
-        else {
-            if (infoRec->TEGlyphRendererFlags & BIT_ORDER_IN_BYTE_MSBFIRST)
-                infoRec->TEGlyphRenderer = XAATEGlyphRendererScanlineMSBFirst;
-            else
-                infoRec->TEGlyphRenderer = XAATEGlyphRendererScanlineLSBFirst;
-        }
-
-        if (!HaveSolidFillRect &&
-            (infoRec->TEGlyphRendererFlags & TRANSPARENCY_ONLY)) {
-            infoRec->TEGlyphRendererFlags &= ~TRANSPARENCY_ONLY;
-            XAAMSG("WARNING:  TEGlyphRenderer cannot support TRANPARENCY_ONLY"
-                   " without solid fills\n");
-        }
-    }
-
-    /**** NonTE Glyphs ****/
-
-    if (infoRec->NonTEGlyphRenderer) {
-        XAAMSG("\tDriver provided NonTEGlyphRenderer replacement\n");
-    }
-    else if (infoRec->WriteBitmap &&
-             !(infoRec->WriteBitmapFlags & NO_TRANSPARENCY)) {
-        infoRec->NonTEGlyphRenderer = XAANonTEGlyphRenderer;
-        infoRec->NonTEGlyphRendererFlags = infoRec->WriteBitmapFlags;
-    }
-
-    /**** WritePixmap ****/
-
-    if (infoRec->WritePixmap &&
-        !xf86ReturnOptValBool(options, XAAOPT_WRITE_PIXMAP, FALSE)) {
-        XAAMSG("\tDriver provided WritePixmap replacement\n");
-    }
-    else if (HaveImageWriteRect) {
-        infoRec->WritePixmap = XAAWritePixmap;
-        infoRec->WritePixmapFlags =
-            infoRec->ImageWriteFlags | CONVERT_32BPP_TO_24BPP;
-    }
-    else if (HaveScanlineImageWriteRect) {
-        infoRec->WritePixmap = XAAWritePixmapScanline;
-        infoRec->WritePixmapFlags = infoRec->ScanlineImageWriteFlags;
-    }
-    else
-        infoRec->WritePixmap = NULL;
-
-    /**** ReadPixmap ****/
-
-    if (infoRec->ReadPixmap) {
-        XAAMSG("\tDriver provided ReadPixmap replacement\n");
-    }
-
-    /************** GC Level *************/
-
-    /**** CopyArea ****/
-
-    if (infoRec->CopyArea) {
-        XAAMSG("\tDriver provided GC level CopyArea replacement\n");
-    }
-    else if (infoRec->ScreenToScreenBitBlt) {
-        infoRec->CopyArea = XAACopyArea;
-        infoRec->CopyAreaFlags = infoRec->ScreenToScreenBitBltFlags;
-
-        /* most GC level primitives use one mid-level primitive so
-           the GC level primitive gets the mid-level primitive flag
-           and we use that at GC validation time.  But CopyArea uses
-           more than one mid-level primitive so we have to essentially
-           do a GC validation every time that primitive is used.
-           The CopyAreaFlags would only be used for filtering out the
-           common denominators.  Here we assume that if you don't do
-           ScreenToScreenBitBlt you aren't going to do the others.
-           We also assume that ScreenToScreenBitBlt has the least
-           restrictions. */
-    }
-
-    if (infoRec->CopyPlane) {
-        XAAMSG("\tDriver provided GC level CopyPlane replacement\n");
-    }
-    else if (infoRec->WriteBitmap &&
-             !(infoRec->WriteBitmapFlags & TRANSPARENCY_ONLY)) {
-        infoRec->CopyPlane = XAACopyPlaneColorExpansion;
-        infoRec->CopyPlaneFlags = infoRec->WriteBitmapFlags;
-    }
-
-    if (infoRec->PushPixelsSolid) {
-        XAAMSG("\tDriver provided GC level PushPixelsSolid replacement\n");
-    }
-    else if (infoRec->WriteBitmap &&
-             !(infoRec->WriteBitmapFlags & NO_TRANSPARENCY)) {
-        infoRec->PushPixelsSolid = XAAPushPixelsSolidColorExpansion;
-        infoRec->PushPixelsFlags = infoRec->WriteBitmapFlags;
-    }
-
-    if (infoRec->FillSolidRects) {
-        if (!infoRec->PolyFillRectSolid) {
-            infoRec->PolyFillRectSolid = XAAPolyFillRect;
-            infoRec->PolyFillRectSolidFlags = infoRec->FillSolidRectsFlags;
-        }
-    }
-    if (infoRec->FillSolidSpans) {
-        if (!infoRec->FillSpansSolid) {
-            infoRec->FillSpansSolid = XAAFillSpans;
-            infoRec->FillSpansSolidFlags = infoRec->FillSolidSpansFlags;
-        }
-    }
-
-    if (infoRec->FillMono8x8PatternRects || infoRec->FillColor8x8PatternRects ||
-        infoRec->FillCacheBltRects || infoRec->FillColorExpandRects ||
-        infoRec->FillCacheExpandRects) {
-        if (!infoRec->PolyFillRectStippled) {
-
-            infoRec->PolyFillRectStippled = XAAPolyFillRect;
-            infoRec->PolyFillRectStippledFlags = 0;
-        }
-    }
-
-    if (infoRec->FillMono8x8PatternSpans || infoRec->FillColor8x8PatternSpans ||
-        infoRec->FillCacheBltSpans || infoRec->FillColorExpandSpans ||
-        infoRec->FillCacheExpandSpans) {
-        if (!infoRec->FillSpansStippled) {
-
-            infoRec->FillSpansStippled = XAAFillSpans;
-            infoRec->FillSpansStippledFlags = 0;
-        }
-    }
-
-    if (infoRec->FillMono8x8PatternRects || infoRec->FillColor8x8PatternRects ||
-        infoRec->FillCacheBltRects || infoRec->FillColorExpandRects ||
-        infoRec->FillCacheExpandRects) {
-        if (!infoRec->PolyFillRectOpaqueStippled) {
-
-            infoRec->PolyFillRectOpaqueStippled = XAAPolyFillRect;
-            infoRec->PolyFillRectOpaqueStippledFlags = 0;
-        }
-    }
-
-    if (infoRec->FillMono8x8PatternSpans || infoRec->FillColor8x8PatternSpans ||
-        infoRec->FillCacheBltSpans || infoRec->FillColorExpandSpans ||
-        infoRec->FillCacheExpandSpans) {
-        if (!infoRec->FillSpansOpaqueStippled) {
-
-            infoRec->FillSpansOpaqueStippled = XAAFillSpans;
-            infoRec->FillSpansOpaqueStippledFlags = 0;
-        }
-    }
-
-    if (infoRec->FillMono8x8PatternRects || infoRec->FillColor8x8PatternRects ||
-        infoRec->FillCacheBltRects || infoRec->FillImageWriteRects) {
-        if (!infoRec->PolyFillRectTiled) {
-
-            infoRec->PolyFillRectTiled = XAAPolyFillRect;
-            infoRec->PolyFillRectTiledFlags = 0;
-        }
-    }
-
-    if (infoRec->FillMono8x8PatternSpans || infoRec->FillColor8x8PatternSpans ||
-        infoRec->FillCacheBltSpans) {
-        if (!infoRec->FillSpansTiled) {
-
-            infoRec->FillSpansTiled = XAAFillSpans;
-            infoRec->FillSpansTiledFlags = 0;
-        }
-    }
-
-    if (infoRec->TEGlyphRenderer &&
-        !(infoRec->TEGlyphRendererFlags & NO_TRANSPARENCY)) {
-
-        if (!infoRec->PolyText8TE) {
-            infoRec->PolyText8TE = XAAPolyText8TEColorExpansion;
-            infoRec->PolyText8TEFlags = infoRec->TEGlyphRendererFlags;
-        }
-
-        if (!infoRec->PolyText16TE) {
-            infoRec->PolyText16TE = XAAPolyText16TEColorExpansion;
-            infoRec->PolyText16TEFlags = infoRec->TEGlyphRendererFlags;
-        }
-
-        if (!infoRec->PolyGlyphBltTE) {
-            infoRec->PolyGlyphBltTE = XAAPolyGlyphBltTEColorExpansion;
-            infoRec->PolyGlyphBltTEFlags = infoRec->TEGlyphRendererFlags;
-        }
-    }
-
-    if (infoRec->TEGlyphRenderer &&
-        !(infoRec->TEGlyphRendererFlags & TRANSPARENCY_ONLY)) {
-
-        if (!infoRec->ImageText8TE) {
-            infoRec->ImageText8TE = XAAImageText8TEColorExpansion;
-            infoRec->ImageText8TEFlags = infoRec->TEGlyphRendererFlags;
-        }
-
-        if (!infoRec->ImageText16TE) {
-            infoRec->ImageText16TE = XAAImageText16TEColorExpansion;
-            infoRec->ImageText16TEFlags = infoRec->TEGlyphRendererFlags;
-        }
-
-        if (!infoRec->ImageGlyphBltTE) {
-            infoRec->ImageGlyphBltTE = XAAImageGlyphBltTEColorExpansion;
-            infoRec->ImageGlyphBltTEFlags = infoRec->TEGlyphRendererFlags;
-        }
-    }
-
-    if (infoRec->NonTEGlyphRenderer) {
-        if (!infoRec->PolyText8NonTE) {
-            infoRec->PolyText8NonTE = XAAPolyText8NonTEColorExpansion;
-            infoRec->PolyText8NonTEFlags = infoRec->NonTEGlyphRendererFlags;
-        }
-
-        if (!infoRec->PolyText16NonTE) {
-            infoRec->PolyText16NonTE = XAAPolyText16NonTEColorExpansion;
-            infoRec->PolyText16NonTEFlags = infoRec->NonTEGlyphRendererFlags;
-        }
-        if (!infoRec->PolyGlyphBltNonTE) {
-            infoRec->PolyGlyphBltNonTE = XAAPolyGlyphBltNonTEColorExpansion;
-            infoRec->PolyGlyphBltNonTEFlags = infoRec->NonTEGlyphRendererFlags;
-        }
-    }
-
-    if (infoRec->NonTEGlyphRenderer && HaveSolidFillRect) {
-        if (!infoRec->ImageText8NonTE) {
-            infoRec->ImageText8NonTE = XAAImageText8NonTEColorExpansion;
-            infoRec->ImageText8NonTEFlags = infoRec->NonTEGlyphRendererFlags;
-        }
-
-        if (!infoRec->ImageText16NonTE) {
-            infoRec->ImageText16NonTE = XAAImageText16NonTEColorExpansion;
-            infoRec->ImageText16NonTEFlags = infoRec->NonTEGlyphRendererFlags;
-        }
-
-        if (!infoRec->ImageGlyphBltNonTE) {
-            infoRec->ImageGlyphBltNonTE = XAAImageGlyphBltNonTEColorExpansion;
-            infoRec->ImageGlyphBltNonTEFlags = infoRec->NonTEGlyphRendererFlags;
-        }
-    }
-
-    if (!infoRec->PolyRectangleThinSolid && HaveSolidHorVertLine) {
-        infoRec->PolyRectangleThinSolid = XAAPolyRectangleThinSolid;
-        infoRec->PolyRectangleThinSolidFlags = infoRec->SolidLineFlags;
-    }
-
-    if (!infoRec->FillPolygonSolid && HaveSolidFillRect) {
-        infoRec->FillPolygonSolid = XAAFillPolygonSolid;
-        infoRec->FillPolygonSolidFlags = infoRec->SolidFillFlags;
-    }
-
-    if (!infoRec->FillPolygonStippled && (HaveMono8x8PatternFillRect ||
-                                          HaveScreenToScreenColorExpandFill ||
-                                          HaveScreenToScreenCopy)) {
-        infoRec->FillPolygonStippled = XAAFillPolygonStippled;
-        infoRec->FillPolygonStippledFlags = infoRec->SolidFillFlags;
-    }
-
-    if (!infoRec->FillPolygonOpaqueStippled && (HaveMono8x8PatternFillRect ||
-                                                HaveScreenToScreenColorExpandFill
-                                                || HaveScreenToScreenCopy)) {
-        infoRec->FillPolygonOpaqueStippled = XAAFillPolygonStippled;
-        infoRec->FillPolygonOpaqueStippledFlags = infoRec->SolidFillFlags;
-    }
-
-    if (!infoRec->FillPolygonTiled && (HaveMono8x8PatternFillRect ||
-                                       HaveScreenToScreenColorExpandFill ||
-                                       HaveScreenToScreenCopy)) {
-        infoRec->FillPolygonTiled = XAAFillPolygonTiled;
-        infoRec->FillPolygonTiledFlags = infoRec->SolidFillFlags;
-    }
-
-    if (!infoRec->PolyFillArcSolid && HaveSolidFillRect) {
-        infoRec->PolyFillArcSolid = XAAPolyFillArcSolid;
-        infoRec->PolyFillArcSolidFlags = infoRec->SolidFillFlags;
-    }
-
-    if (!infoRec->PolylinesWideSolid && HaveSolidFillRect) {
-        infoRec->PolylinesWideSolid = XAAPolylinesWideSolid;
-        infoRec->PolylinesWideSolidFlags =
-            infoRec->SolidFillFlags | GXCOPY_ONLY;
-    }
-
-    if (!infoRec->PutImage && (infoRec->WritePixmap ||
-                               (infoRec->WriteBitmap &&
-                                !(infoRec->
-                                  WriteBitmapFlags & TRANSPARENCY_ONLY)))) {
-        infoRec->PutImage = XAAPutImage;
-
-        /* See comment for CopyArea above.  But here we make fewer 
-           assumptions.  The driver can provide the PutImageFlags if
-           it wants too */
-    }
-
-    if (HaveSolidHorVertLine &&
-        (HaveSolidBresenhamLine || (HaveSolidTwoPointLine &&
-                                    (infoRec->
-                                     ClippingFlags &
-                                     HARDWARE_CLIP_SOLID_LINE)))) {
-        if (!infoRec->PolylinesThinSolid) {
-            infoRec->PolylinesThinSolid = XAAPolyLines;
-            infoRec->PolylinesThinSolidFlags = infoRec->SolidLineFlags;
-        }
-        if (!infoRec->PolySegmentThinSolid) {
-            infoRec->PolySegmentThinSolid = XAAPolySegment;
-            infoRec->PolySegmentThinSolidFlags = infoRec->SolidLineFlags;
-        }
-    }
-
-    if (HaveDashedBresenhamLine || (HaveDashedTwoPointLine &&
-                                    (infoRec->
-                                     ClippingFlags &
-                                     HARDWARE_CLIP_DASHED_LINE))) {
-        if (!infoRec->PolylinesThinDashed) {
-            infoRec->PolylinesThinDashed = XAAPolyLinesDashed;
-            infoRec->PolylinesThinDashedFlags = infoRec->DashedLineFlags;
-        }
-        if (!infoRec->PolySegmentThinDashed) {
-            infoRec->PolySegmentThinDashed = XAAPolySegmentDashed;
-            infoRec->PolySegmentThinDashedFlags = infoRec->DashedLineFlags;
-        }
-    }
-
-    if (infoRec->PolylinesThinDashed || infoRec->PolySegmentThinDashed) {
-        if (!infoRec->ComputeDash)
-            infoRec->ComputeDash = XAAComputeDash;
-    }
-
-    {
-        Bool haveTexture = infoRec->CPUToScreenTextureFormats &&
-            infoRec->CPUToScreenTextureDstFormats &&
-            infoRec->SetupForCPUToScreenTexture2 &&
-            infoRec->SubsequentCPUToScreenTexture;
-        Bool haveAlphaTexture = infoRec->CPUToScreenAlphaTextureFormats &&
-            infoRec->CPUToScreenAlphaTextureDstFormats &&
-            infoRec->SetupForCPUToScreenAlphaTexture2 &&
-            infoRec->SubsequentCPUToScreenAlphaTexture;
-
-        if (!infoRec->Composite && (haveTexture || haveAlphaTexture))
-            infoRec->Composite = XAADoComposite;
-
-        if (!infoRec->Glyphs && infoRec->WriteBitmap &&
-            !(infoRec->WriteBitmapFlags & NO_TRANSPARENCY)) {
-            infoRec->Glyphs = XAADoGlyphs;
-        }
-    }
-
-    /************  Validation Functions **************/
-
-    if (!infoRec->ValidateCopyArea && infoRec->CopyArea) {
-        infoRec->CopyAreaMask = GCWhenForced;
-        if ((infoRec->CopyAreaFlags & GXCOPY_ONLY) ||
-            (infoRec->CopyAreaFlags & ROP_NEEDS_SOURCE))
-            infoRec->CopyAreaMask |= GCFunction;
-        if (infoRec->CopyAreaFlags & NO_PLANEMASK)
-            infoRec->CopyAreaMask |= GCPlaneMask;
-        infoRec->ValidateCopyArea = XAAValidateCopyArea;
-    }
-
-    if (!infoRec->ValidateCopyPlane && infoRec->CopyPlane) {
-        infoRec->CopyPlaneMask = GCWhenForced;
-        if ((infoRec->CopyPlaneFlags & GXCOPY_ONLY) ||
-            (infoRec->CopyPlaneFlags & ROP_NEEDS_SOURCE))
-            infoRec->CopyPlaneMask |= GCFunction;
-        if (infoRec->CopyPlaneFlags & NO_PLANEMASK)
-            infoRec->CopyPlaneMask |= GCPlaneMask;
-        if (infoRec->CopyPlaneFlags & RGB_EQUAL)
-            infoRec->CopyPlaneMask |= GCForeground | GCBackground;
-        infoRec->ValidateCopyPlane = XAAValidateCopyPlane;
-    }
-
-    if (!infoRec->ValidatePutImage && infoRec->PutImage) {
-        infoRec->PutImageMask = GCWhenForced;
-        if ((infoRec->PutImageFlags & GXCOPY_ONLY) ||
-            (infoRec->PutImageFlags & ROP_NEEDS_SOURCE))
-            infoRec->PutImageMask |= GCFunction;
-        if (infoRec->PutImageFlags & NO_PLANEMASK)
-            infoRec->PutImageMask |= GCPlaneMask;
-        if (infoRec->PutImageFlags & RGB_EQUAL)
-            infoRec->PutImageMask |= GCForeground | GCBackground;
-        infoRec->ValidatePutImage = XAAValidatePutImage;
-    }
-
-    if (!infoRec->ValidatePushPixels && infoRec->PushPixelsSolid) {
-        infoRec->PushPixelsMask = GCFillStyle;
-        if ((infoRec->PushPixelsFlags & GXCOPY_ONLY) ||
-            (infoRec->PushPixelsFlags & ROP_NEEDS_SOURCE) ||
-            (infoRec->PushPixelsFlags & TRANSPARENCY_GXCOPY_ONLY))
-            infoRec->PushPixelsMask |= GCFunction;
-        if (infoRec->PushPixelsFlags & NO_PLANEMASK)
-            infoRec->PushPixelsMask |= GCPlaneMask;
-        if (infoRec->PushPixelsFlags & RGB_EQUAL)
-            infoRec->PushPixelsMask |= GCForeground;
-        infoRec->ValidatePushPixels = XAAValidatePushPixels;
-    }
-
-    /* By default XAA assumes the FillSpans, PolyFillRects, FillPolygon
-       and PolyFillArcs have the same restrictions.  If you supply GC 
-       level replacements for any of these and alter this relationship 
-       you may need to supply replacement validation routines */
-
-    if (!infoRec->ValidateFillSpans &&
-        (infoRec->FillSpansSolid || infoRec->FillSpansStippled ||
-         infoRec->FillSpansOpaqueStippled || infoRec->FillSpansTiled)) {
-
-        int compositeFlags = infoRec->FillSpansSolidFlags |
-            infoRec->FillSpansStippledFlags |
-            infoRec->FillSpansOpaqueStippledFlags |
-            infoRec->FillSpansTiledFlags;
-
-        infoRec->FillSpansMask = GCFillStyle | GCTile | GCStipple;
-
-        if ((compositeFlags & GXCOPY_ONLY) ||
-            (compositeFlags & ROP_NEEDS_SOURCE))
-            infoRec->FillSpansMask |= GCFunction;
-        if (compositeFlags & NO_PLANEMASK)
-            infoRec->FillSpansMask |= GCPlaneMask;
-        if (compositeFlags & RGB_EQUAL)
-            infoRec->FillSpansMask |= GCForeground;
-        infoRec->ValidateFillSpans = XAAValidateFillSpans;
-    }
-
-    /* By default XAA only provides Validations for the GlyphBlt
-       functions and not the text higher up. This is because the
-       Text8/16 and GlyphBlt are linked.  If you break this linkage,
-       you may need to have the driver supply its own Validation
-       routines */
-
-    if (!infoRec->ValidatePolyGlyphBlt &&
-        (infoRec->PolyGlyphBltTE || infoRec->PolyGlyphBltNonTE)) {
-        int compositeFlags = infoRec->PolyGlyphBltTEFlags |
-            infoRec->PolyGlyphBltNonTEFlags;
-
-        infoRec->PolyGlyphBltMask = GCFillStyle | GCFont;
-        if ((compositeFlags & GXCOPY_ONLY) ||
-            (compositeFlags & ROP_NEEDS_SOURCE) ||
-            (infoRec->PolyGlyphBltNonTEFlags & TRANSPARENCY_GXCOPY_ONLY))
-            infoRec->PolyGlyphBltMask |= GCFunction;
-        if (compositeFlags & NO_PLANEMASK)
-            infoRec->PolyGlyphBltMask |= GCPlaneMask;
-        if (compositeFlags & RGB_EQUAL)
-            infoRec->PolyGlyphBltMask |= GCForeground;
-        infoRec->ValidatePolyGlyphBlt = XAAValidatePolyGlyphBlt;
-    }
-
-    if (!infoRec->ValidateImageGlyphBlt &&
-        (infoRec->ImageGlyphBltTE || infoRec->ImageGlyphBltNonTE)) {
-        int compositeFlags = infoRec->ImageGlyphBltTEFlags |
-            infoRec->ImageGlyphBltNonTEFlags;
-
-        if (infoRec->ImageGlyphBltNonTE)
-            compositeFlags |= infoRec->SolidFillFlags;
-
-        infoRec->ImageGlyphBltMask = GCFont;
-        if (compositeFlags & NO_PLANEMASK)
-            infoRec->ImageGlyphBltMask |= GCPlaneMask;
-        if (compositeFlags & RGB_EQUAL)
-            infoRec->ImageGlyphBltMask |= GCForeground | GCBackground;
-        infoRec->ValidateImageGlyphBlt = XAAValidateImageGlyphBlt;
-    }
-
-    /* By default XAA only provides a Validation function for the 
-       Polylines and does segments and polylines at the same time */
-
-    if (!infoRec->ValidatePolylines && infoRec->ValidateFillSpans) {
-        int compositeFlags = infoRec->PolyRectangleThinSolidFlags |
-            infoRec->PolylinesWideSolidFlags |
-            infoRec->PolylinesThinSolidFlags |
-            infoRec->PolySegmentThinSolidFlags |
-            infoRec->PolySegmentThinDashedFlags |
-            infoRec->PolylinesThinDashedFlags;
-
-        infoRec->ValidatePolylines = XAAValidatePolylines;
-        infoRec->PolylinesMask =
-            infoRec->FillSpansMask | GCLineStyle | GCLineWidth;
-
-        if (infoRec->PolySegmentThinDashed || infoRec->PolylinesThinDashed)
-            infoRec->PolylinesMask |= GCDashList;
-        if (compositeFlags & NO_PLANEMASK)
-            infoRec->PolylinesMask |= GCPlaneMask;
-        if ((compositeFlags & GXCOPY_ONLY) ||
-            (compositeFlags & ROP_NEEDS_SOURCE))
-            infoRec->PolylinesMask |= GCFunction;
-        if (compositeFlags & RGB_EQUAL)
-            infoRec->PolylinesMask |= GCForeground;
-    }
-
-    /**** Fill choosers ****/
-
-    if (!infoRec->StippledFillChooser)
-        infoRec->StippledFillChooser = XAAStippledFillChooser;
-
-    if (!infoRec->OpaqueStippledFillChooser)
-        infoRec->OpaqueStippledFillChooser = XAAOpaqueStippledFillChooser;
-
-    if (!infoRec->TiledFillChooser)
-        infoRec->TiledFillChooser = XAATiledFillChooser;
-
-    /**** Setup the pixmap cache ****/
-
-    if (infoRec->WriteBitmapToCache) {
-    }
-    else if (infoRec->WriteBitmap &&
-             !(infoRec->WriteBitmapFlags & TRANSPARENCY_ONLY))
-        infoRec->WriteBitmapToCache = XAAWriteBitmapToCache;
-    else if (infoRec->Flags & LINEAR_FRAMEBUFFER)
-        infoRec->WriteBitmapToCache = XAAWriteBitmapToCacheLinear;
-    else
-        infoRec->PixmapCacheFlags |= DO_NOT_BLIT_STIPPLES;
-
-    if (infoRec->WritePixmapToCache) {
-    }
-    else if (infoRec->WritePixmap && !(infoRec->WritePixmapFlags & NO_GXCOPY))
-        infoRec->WritePixmapToCache = XAAWritePixmapToCache;
-    else if (infoRec->Flags & LINEAR_FRAMEBUFFER)
-        infoRec->WritePixmapToCache = XAAWritePixmapToCacheLinear;
-    else
-        infoRec->Flags &= ~PIXMAP_CACHE;
-
-    if (xf86ReturnOptValBool(options, XAAOPT_PIXMAP_CACHE, FALSE))
-        infoRec->Flags &= ~PIXMAP_CACHE;
-
-    if (infoRec->WriteMono8x8PatternToCache) {
-    }
-    else if (infoRec->PixmapCacheFlags & CACHE_MONO_8x8) {
-        if (infoRec->WritePixmapToCache)
-            infoRec->WriteMono8x8PatternToCache = XAAWriteMono8x8PatternToCache;
-        else
-            infoRec->PixmapCacheFlags &= ~CACHE_MONO_8x8;
-    }
-
-    if (infoRec->WriteColor8x8PatternToCache) {
-    }
-    else if (infoRec->PixmapCacheFlags & CACHE_COLOR_8x8) {
-        if (infoRec->WritePixmapToCache && infoRec->WriteBitmapToCache)
-            infoRec->WriteColor8x8PatternToCache =
-                XAAWriteColor8x8PatternToCache;
-        else
-            infoRec->PixmapCacheFlags &= ~CACHE_COLOR_8x8;
-    }
-
-    if (infoRec->CachePixelGranularity < 0) {
-        switch (pScrn->bitsPerPixel) {
-        case 24:
-        case 8:
-            infoRec->CachePixelGranularity = 4;
-            break;
-        case 16:
-            infoRec->CachePixelGranularity = 2;
-            break;
-        case 32:
-            infoRec->CachePixelGranularity = 1;
-            break;
-        default:
-            break;
-        }
-
-        if (BITMAP_SCANLINE_PAD == 64)
-            infoRec->CachePixelGranularity *= 2;
-    }
-
-    free(options);
-
-    if (!infoRec->CacheTile && infoRec->WritePixmapToCache)
-        infoRec->CacheTile = XAACacheTile;
-    if (!infoRec->CacheMonoStipple && infoRec->WritePixmapToCache)
-        infoRec->CacheMonoStipple = XAACacheMonoStipple;
-    if (!infoRec->CacheStipple && infoRec->WriteBitmapToCache)
-        infoRec->CacheStipple = XAACacheStipple;
-    if (!infoRec->CacheMono8x8Pattern && infoRec->WriteMono8x8PatternToCache)
-        infoRec->CacheMono8x8Pattern = XAACacheMono8x8Pattern;
-    if (!infoRec->CacheColor8x8Pattern && infoRec->WriteColor8x8PatternToCache)
-        infoRec->CacheColor8x8Pattern = XAACacheColor8x8Pattern;
-
-    if ((infoRec->Flags & PIXMAP_CACHE) && !infoRec->InitPixmapCache) {
-        infoRec->InitPixmapCache = XAAInitPixmapCache;
-        infoRec->ClosePixmapCache = XAAClosePixmapCache;
-    }
-
-    return TRUE;
-}
diff --git a/hw/xfree86/xaa/xaaLine.c b/hw/xfree86/xaa/xaaLine.c
deleted file mode 100644
index d7c6097..0000000
--- a/hw/xfree86/xaa/xaaLine.c
+++ /dev/null
@@ -1,422 +0,0 @@
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include <stdlib.h>
-
-#include <X11/X.h>
-#include "misc.h"
-#include "xf86.h"
-#include "xf86_OSproc.h"
-
-#include "scrnintstr.h"
-#include "pixmapstr.h"
-#include "miline.h"
-#include "xf86str.h"
-#include "xaa.h"
-#include "xaalocal.h"
-
-void
-#ifdef POLYSEGMENT
- XAAPolySegment(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pSeg
-#else
-XAAPolyLines(DrawablePtr pDrawable, GCPtr pGC, int mode,        /* Origin or Previous */
-             int npt,           /* number of points */
-             DDXPointPtr pptInit
-#endif
-    )
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    BoxPtr pboxInit = RegionRects(pGC->pCompositeClip);
-    int nboxInit = RegionNumRects(pGC->pCompositeClip);
-    unsigned int bias = miGetZeroLineBias(pDrawable->pScreen);
-    int xorg = pDrawable->x;
-    int yorg = pDrawable->y;
-    int nbox;
-    BoxPtr pbox;
-
-#ifndef POLYSEGMENT
-    DDXPointPtr ppt;
-#endif
-    int x1, x2, y1, y2, tmp, len;
-
-    if (!nboxInit)
-        return;
-
-    if (infoRec->SolidLineFlags & LINE_LIMIT_COORDS) {
-        int minValX = infoRec->SolidLineLimits.x1;
-        int maxValX = infoRec->SolidLineLimits.x2;
-        int minValY = infoRec->SolidLineLimits.y1;
-        int maxValY = infoRec->SolidLineLimits.y2;
-
-#ifdef POLYSEGMENT
-        int n = nseg;
-        xSegment *s = pSeg;
-
-        while (n--)
-#else
-        int n = npt;
-        int xorgtmp = xorg;
-        int yorgtmp = yorg;
-
-        ppt = pptInit;
-        x2 = ppt->x + xorgtmp;
-        y2 = ppt->y + yorgtmp;
-        while (--n)
-#endif
-        {
-#ifdef POLYSEGMENT
-            x1 = s->x1 + xorg;
-            y1 = s->y1 + yorg;
-            x2 = s->x2 + xorg;
-            y2 = s->y2 + yorg;
-            s++;
-#else
-            x1 = x2;
-            y1 = y2;
-            ++ppt;
-            if (mode == CoordModePrevious) {
-                xorgtmp = x1;
-                yorgtmp = y1;
-            }
-            x2 = ppt->x + xorgtmp;
-            y2 = ppt->y + yorgtmp;
-#endif
-            if (x1 > maxValX || x1 < minValX ||
-                x2 > maxValX || x2 < minValX ||
-                y1 > maxValY || y1 < minValY || y2 > maxValY || y2 < minValY) {
-#ifdef POLYSEGMENT
-                XAAFallbackOps.PolySegment(pDrawable, pGC, nseg, pSeg);
-#else
-                XAAFallbackOps.Polylines(pDrawable, pGC, mode, npt, pptInit);
-#endif
-                return;
-            }
-        }
-    }
-
-    (*infoRec->SetupForSolidLine) (infoRec->pScrn, pGC->fgPixel,
-                                   pGC->alu, pGC->planemask);
-
-#ifdef POLYSEGMENT
-    while (nseg--)
-#else
-    ppt = pptInit;
-    x2 = ppt->x + xorg;
-    y2 = ppt->y + yorg;
-    while (--npt)
-#endif
-    {
-        nbox = nboxInit;
-        pbox = pboxInit;
-
-#ifdef POLYSEGMENT
-        x1 = pSeg->x1 + xorg;
-        y1 = pSeg->y1 + yorg;
-        x2 = pSeg->x2 + xorg;
-        y2 = pSeg->y2 + yorg;
-        pSeg++;
-#else
-        x1 = x2;
-        y1 = y2;
-        ++ppt;
-        if (mode == CoordModePrevious) {
-            xorg = x1;
-            yorg = y1;
-        }
-        x2 = ppt->x + xorg;
-        y2 = ppt->y + yorg;
-#endif
-
-        if (x1 == x2) {         /* vertical line */
-            /* make the line go top to bottom of screen, keeping
-               endpoint semantics
-             */
-            if (y1 > y2) {
-                tmp = y2;
-                y2 = y1 + 1;
-                y1 = tmp + 1;
-#ifdef POLYSEGMENT
-                if (pGC->capStyle != CapNotLast)
-                    y1--;
-#endif
-            }
-#ifdef POLYSEGMENT
-            else if (pGC->capStyle != CapNotLast)
-                y2++;
-#endif
-            /* get to first band that might contain part of line */
-            while (nbox && (pbox->y2 <= y1)) {
-                pbox++;
-                nbox--;
-            }
-
-            /* stop when lower edge of box is beyond end of line */
-            while (nbox && (y2 >= pbox->y1)) {
-                if ((x1 >= pbox->x1) && (x1 < pbox->x2)) {
-                    tmp = max(y1, pbox->y1);
-                    len = min(y2, pbox->y2) - tmp;
-                    if (len)
-                        (*infoRec->SubsequentSolidHorVertLine) (infoRec->pScrn,
-                                                                x1, tmp, len,
-                                                                DEGREES_270);
-                }
-                nbox--;
-                pbox++;
-            }
-#ifndef POLYSEGMENT
-            y2 = ppt->y + yorg;
-#endif
-        }
-        else if (y1 == y2) {    /* horizontal line */
-            /* force line from left to right, keeping endpoint semantics */
-            if (x1 > x2) {
-                tmp = x2;
-                x2 = x1 + 1;
-                x1 = tmp + 1;
-#ifdef POLYSEGMENT
-                if (pGC->capStyle != CapNotLast)
-                    x1--;
-#endif
-            }
-#ifdef POLYSEGMENT
-            else if (pGC->capStyle != CapNotLast)
-                x2++;
-#endif
-
-            /* find the correct band */
-            while (nbox && (pbox->y2 <= y1)) {
-                pbox++;
-                nbox--;
-            }
-
-            /* try to draw the line, if we haven't gone beyond it */
-            if (nbox && (pbox->y1 <= y1)) {
-                int orig_y = pbox->y1;
-
-                /* when we leave this band, we're done */
-                while (nbox && (orig_y == pbox->y1)) {
-                    if (pbox->x2 <= x1) {
-                        /* skip boxes until one might contain start point */
-                        nbox--;
-                        pbox++;
-                        continue;
-                    }
-
-                    /* stop if left of box is beyond right of line */
-                    if (pbox->x1 >= x2) {
-                        nbox = 0;
-                        break;
-                    }
-
-                    tmp = max(x1, pbox->x1);
-                    len = min(x2, pbox->x2) - tmp;
-                    if (len)
-                        (*infoRec->SubsequentSolidHorVertLine) (infoRec->pScrn,
-                                                                tmp, y1, len,
-                                                                DEGREES_0);
-                    nbox--;
-                    pbox++;
-                }
-            }
-#ifndef POLYSEGMENT
-            x2 = ppt->x + xorg;
-#endif
-        }
-        else {                  /* sloped line */
-            unsigned int oc1, oc2;
-            int dmin, dmaj, e, octant;
-
-            if (infoRec->SubsequentSolidBresenhamLine) {
-                if ((dmaj = x2 - x1) < 0) {
-                    dmaj = -dmaj;
-                    octant = XDECREASING;
-                }
-                else
-                    octant = 0;
-
-                if ((dmin = y2 - y1) < 0) {
-                    dmin = -dmin;
-                    octant |= YDECREASING;
-                }
-
-                if (dmin >= dmaj) {
-                    tmp = dmin;
-                    dmin = dmaj;
-                    dmaj = tmp;
-                    octant |= YMAJOR;
-                }
-
-                e = -dmaj - ((bias >> octant) & 1);
-                len = dmaj;
-                dmin <<= 1;
-                dmaj <<= 1;
-            }
-            else {              /* Muffle compiler */
-                dmin = dmaj = e = octant = len = 0;
-            }
-
-            while (nbox--) {
-                oc1 = oc2 = 0;
-                OUTCODES(oc1, x1, y1, pbox);
-                OUTCODES(oc2, x2, y2, pbox);
-                if (!(oc1 | oc2)) {     /* unclipped */
-                    if (infoRec->SubsequentSolidTwoPointLine) {
-                        (*infoRec->SubsequentSolidTwoPointLine) (infoRec->pScrn,
-                                                                 x1, y1, x2, y2,
-#ifdef POLYSEGMENT
-                                                                 (pGC->
-                                                                  capStyle !=
-                                                                  CapNotLast) ?
-                                                                 0 :
-#endif
-                                                                 OMIT_LAST);
-                    }
-                    else {
-                        (*infoRec->SubsequentSolidBresenhamLine) (infoRec->
-                                                                  pScrn, x1, y1,
-                                                                  dmaj, dmin, e,
-#ifdef POLYSEGMENT
-                                                                  (pGC->
-                                                                   capStyle !=
-                                                                   CapNotLast)
-                                                                  ? (len + 1) :
-#endif
-                                                                  len, octant);
-                    }
-                    break;
-                }
-                else if (oc1 & oc2) {   /* completely clipped */
-                    pbox++;
-                }
-                else if (infoRec->ClippingFlags & HARDWARE_CLIP_SOLID_LINE) {
-                    (*infoRec->SetClippingRectangle) (infoRec->pScrn,
-                                                      pbox->x1, pbox->y1,
-                                                      pbox->x2 - 1,
-                                                      pbox->y2 - 1);
-
-                    if (infoRec->SubsequentSolidBresenhamLine) {
-                        (*infoRec->SubsequentSolidBresenhamLine) (infoRec->
-                                                                  pScrn, x1, y1,
-                                                                  dmaj, dmin, e,
-#ifdef POLYSEGMENT
-                                                                  (pGC->
-                                                                   capStyle !=
-                                                                   CapNotLast)
-                                                                  ? (len + 1) :
-#endif
-                                                                  len, octant);
-                    }
-                    else {
-                        (*infoRec->SubsequentSolidTwoPointLine) (infoRec->pScrn,
-                                                                 x1, y1, x2, y2,
-#ifdef POLYSEGMENT
-                                                                 (pGC->
-                                                                  capStyle !=
-                                                                  CapNotLast) ?
-                                                                 0 :
-#endif
-                                                                 OMIT_LAST);
-                    }
-                    (*infoRec->DisableClipping) (infoRec->pScrn);
-                    pbox++;
-                }
-                else {
-                    int new_x1 = x1, new_y1 = y1, new_x2 = x2, new_y2 = y2;
-                    int clip1 = 0, clip2 = 0;
-                    int err, adx, ady;
-
-                    if (octant & YMAJOR) {
-                        ady = dmaj >> 1;
-                        adx = dmin >> 1;
-                    }
-                    else {
-                        ady = dmin >> 1;
-                        adx = dmaj >> 1;
-                    }
-
-                    if (miZeroClipLine(pbox->x1, pbox->y1,
-                                       pbox->x2 - 1, pbox->y2 - 1,
-                                       &new_x1, &new_y1, &new_x2, &new_y2,
-                                       adx, ady, &clip1, &clip2,
-                                       octant, bias, oc1, oc2) == -1) {
-                        pbox++;
-                        continue;
-                    }
-
-                    if (octant & YMAJOR)
-                        len = abs(new_y2 - new_y1);
-                    else
-                        len = abs(new_x2 - new_x1);
-#ifdef POLYSEGMENT
-                    if (clip2 != 0 || pGC->capStyle != CapNotLast)
-                        len++;
-#else
-                    len += (clip2 != 0);
-#endif
-                    if (len) {
-                        int abserr, clipdx, clipdy;
-
-                        /* unwind bresenham error term to first point */
-                        if (clip1) {
-                            clipdx = abs(new_x1 - x1);
-                            clipdy = abs(new_y1 - y1);
-
-                            if (octant & YMAJOR)
-                                err = e + clipdy * dmin - clipdx * dmaj;
-                            else
-                                err = e + clipdx * dmin - clipdy * dmaj;
-                        }
-                        else
-                            err = e;
-
-#define range infoRec->SolidBresenhamLineErrorTermBits
-                        abserr = abs(err);
-                        while ((abserr & range) ||
-                               (dmaj & range) || (dmin & range)) {
-                            dmin >>= 1;
-                            dmaj >>= 1;
-                            abserr >>= 1;
-                            err /= 2;
-                        }
-
-                        (*infoRec->SubsequentSolidBresenhamLine) (infoRec->
-                                                                  pScrn, new_x1,
-                                                                  new_y1, dmaj,
-                                                                  dmin, err,
-                                                                  len, octant);
-                    }
-                    pbox++;
-                }
-            }                   /* while (nbox--) */
-        }                       /* sloped line */
-    }                           /* while (nline--) */
-
-#ifndef POLYSEGMENT
-    /* paint the last point if the end style isn't CapNotLast.
-       (Assume that a projecting, butt, or round cap that is one
-       pixel wide is the same as the single pixel of the endpoint.)
-     */
-
-    if ((pGC->capStyle != CapNotLast) &&
-        ((ppt->x + xorg != pptInit->x + pDrawable->x) ||
-         (ppt->y + yorg != pptInit->y + pDrawable->y) ||
-         (ppt == pptInit + 1))) {
-        nbox = nboxInit;
-        pbox = pboxInit;
-        while (nbox--) {
-            if ((x2 >= pbox->x1) && (y2 >= pbox->y1) &&
-                (x2 < pbox->x2) && (y2 < pbox->y2)) {
-                (*infoRec->SubsequentSolidHorVertLine) (infoRec->pScrn, x2, y2,
-                                                        1, DEGREES_0);
-                break;
-            }
-            else
-                pbox++;
-        }
-    }
-#endif
-
-    SET_SYNC_FLAG(infoRec);
-}
diff --git a/hw/xfree86/xaa/xaaLineMisc.c b/hw/xfree86/xaa/xaaLineMisc.c
deleted file mode 100644
index 4379778..0000000
--- a/hw/xfree86/xaa/xaaLineMisc.c
+++ /dev/null
@@ -1,149 +0,0 @@
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include "misc.h"
-#include "xf86.h"
-#include "xf86_OSproc.h"
-
-#include <X11/X.h>
-#include "scrnintstr.h"
-#include "miline.h"
-#include "xf86str.h"
-#include "xaa.h"
-#include "xaalocal.h"
-
-void
-XAASolidHorVertLineAsRects(ScrnInfoPtr pScrn, int x, int y, int len, int dir)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-
-    if (dir == DEGREES_0)
-        (*infoRec->SubsequentSolidFillRect) (pScrn, x, y, len, 1);
-    else
-        (*infoRec->SubsequentSolidFillRect) (pScrn, x, y, 1, len);
-}
-
-void
-XAASolidHorVertLineAsTwoPoint(ScrnInfoPtr pScrn, int x, int y, int len, int dir)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-
-    len--;
-
-    if (dir == DEGREES_0)
-        (*infoRec->SubsequentSolidTwoPointLine) (pScrn, x, y, x + len, y, 0);
-    else
-        (*infoRec->SubsequentSolidTwoPointLine) (pScrn, x, y, x, y + len, 0);
-}
-
-void
-XAASolidHorVertLineAsBresenham(ScrnInfoPtr pScrn,
-                               int x, int y, int len, int dir)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-
-    if (dir == DEGREES_0)
-        (*infoRec->SubsequentSolidBresenhamLine) (pScrn, x, y, len << 1, 0,
-                                                  -len, len, 0);
-    else
-        (*infoRec->SubsequentSolidBresenhamLine) (pScrn, x, y, len << 1, 0,
-                                                  -len, len, YMAJOR);
-}
-
-void
-XAAComputeDash(GCPtr pGC)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    XAAGCPtr pGCPriv = (XAAGCPtr) dixLookupPrivate(&pGC->devPrivates,
-                                                   XAAGetGCKey());
-    Bool EvenDash = (pGC->numInDashList & 0x01) ? FALSE : TRUE;
-    int PatternLength = 0;
-    unsigned char *DashPtr = (unsigned char *) pGC->dash;
-    CARD32 *ptr;
-    int count = pGC->numInDashList;
-    int shift, value, direction;
-    Bool set;
-
-    free(pGCPriv->DashPattern);
-
-    pGCPriv->DashPattern = NULL;
-    pGCPriv->DashLength = 0;
-
-    while (count--)
-        PatternLength += *(DashPtr++);
-
-    if (!EvenDash)
-        PatternLength <<= 1;
-
-    if (PatternLength > infoRec->DashPatternMaxLength)
-        return;
-
-    if ((infoRec->DashedLineFlags & LINE_PATTERN_POWER_OF_2_ONLY) &&
-        (PatternLength & (PatternLength - 1)))
-        return;
-
-    pGCPriv->DashPattern = calloc((PatternLength + 31) >> 5, 4);
-    if (!pGCPriv->DashPattern)
-        return;
-    pGCPriv->DashLength = PatternLength;
-
-    if (infoRec->DashedLineFlags & (LINE_PATTERN_LSBFIRST_MSBJUSTIFIED |
-                                    LINE_PATTERN_LSBFIRST_LSBJUSTIFIED)) {
-        direction = 1;
-        set = TRUE;
-        DashPtr = (unsigned char *) pGC->dash;
-    }
-    else {
-        direction = -1;
-        set = FALSE;
-        DashPtr = (unsigned char *) pGC->dash + pGC->numInDashList - 1;
-    }
-
-    if (infoRec->DashedLineFlags & (LINE_PATTERN_LSBFIRST_MSBJUSTIFIED |
-                                    LINE_PATTERN_MSBFIRST_MSBJUSTIFIED))
-        shift = 32 - (PatternLength & 31);
-    else
-        shift = 0;
-
-    ptr = (CARD32 *) (pGCPriv->DashPattern);
-
- CONCATENATE:
-
-    count = pGC->numInDashList;
-
-    while (count--) {
-        value = *DashPtr;
-        DashPtr += direction;
-        while (value) {
-            if (value < (32 - shift)) {
-                if (set)
-                    *ptr |= XAAShiftMasks[value] << shift;
-                shift += value;
-                break;
-            }
-            else {
-                if (set)
-                    *ptr |= ~0L << shift;
-                value -= (32 - shift);
-                shift = 0;
-                ptr++;
-            }
-        }
-        if (set)
-            set = FALSE;
-        else
-            set = TRUE;
-    }
-
-    if (!EvenDash) {
-        EvenDash = TRUE;
-        if (infoRec->DashedLineFlags & (LINE_PATTERN_LSBFIRST_MSBJUSTIFIED |
-                                        LINE_PATTERN_LSBFIRST_LSBJUSTIFIED))
-            DashPtr = (unsigned char *) pGC->dash;
-        else
-            DashPtr = (unsigned char *) pGC->dash + pGC->numInDashList;
-        goto CONCATENATE;
-    }
-}
diff --git a/hw/xfree86/xaa/xaaNonTEGlyph.c b/hw/xfree86/xaa/xaaNonTEGlyph.c
deleted file mode 100644
index bfe7f9a..0000000
--- a/hw/xfree86/xaa/xaaNonTEGlyph.c
+++ /dev/null
@@ -1,192 +0,0 @@
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include "xaa.h"
-#include "xaalocal.h"
-#include "xaacexp.h"
-#include "xf86.h"
-
-/* Not used anymore because the algorithm isn't correct. It doesn't
-   handle overlapping characters properly */
-
-#ifdef TRIPLE_BITS
-#define NonTEGlyphFunc EXPNAME(XAANonTEGlyphScanlineFunc3)
-#else
-#define NonTEGlyphFunc EXPNAME(XAANonTEGlyphScanlineFunc)
-#endif
-
-/********************************************************************
-
-   Here we have NonTEGlyphRenders for a bunch of different color
-   expansion types.  The driver may provide its own renderer, but
-   this is the default one which renders using lower-level primitives
-   exported by the chipset driver.
-
-********************************************************************/
-
-/* Since the dimensions of the text string and the backing rectangle
-	do not always coincide, it is possible that wBack or wText
-	may be 0!  The NonTEGlyphRender must always check for this. */
-
-/* This gets built for MSBFIRST or LSBFIRST with FIXEDBASE or not,
-	with TRIPLE_BITS or not. A total of 8 versions */
-
-/* if the backing rectangle and text are of the same dimensions
-	then we can draw in one pass */
-
-void
-#ifdef TRIPLE_BITS
- EXPNAME(XAANonTEGlyphRenderer3) (
-#else
- EXPNAME(XAANonTEGlyphRenderer) (
-#endif
-                                    ScrnInfoPtr pScrn,
-                                    int xText, int wText,
-                                    int y, int h, int skipleft, int startline,
-                                    NonTEGlyphInfo * glyphp,
-                                    int fg, int rop, unsigned int planemask) {
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    CARD32 *base = (CARD32 *) infoRec->ColorExpandBase;
-
-#ifdef TRIPLE_BITS
-    int dwords = ((3 * wText + 31) >> 5) * h;
-#else
-    int dwords = ((wText + 31) >> 5) * h;
-#endif
-
-    (*infoRec->SetupForCPUToScreenColorExpandFill) (pScrn, fg, -1, rop,
-                                                    planemask);
-    (*infoRec->SubsequentCPUToScreenColorExpandFill) (pScrn, xText, y, wText, h,
-                                                      0);
-
-#ifndef FIXEDBASE
-#ifdef TRIPLE_BITS
-    if ((((3 * wText + 31) >> 5) * h) <= infoRec->ColorExpandRange)
-#else
-    if ((((wText + 31) >> 5) * h) <= infoRec->ColorExpandRange)
-#endif
-        while (h--)
-            base = NonTEGlyphFunc(base, glyphp, startline++, wText, skipleft);
-    else
-#endif
-        while (h--)
-            NonTEGlyphFunc(base, glyphp, startline++, wText, skipleft);
-
-    if ((infoRec->CPUToScreenColorExpandFillFlags & CPU_TRANSFER_PAD_QWORD) &&
-        (dwords & 1)) {
-        base = (CARD32 *) infoRec->ColorExpandBase;
-        base[0] = 0x00000000;
-    }
-
-    if (infoRec->CPUToScreenColorExpandFillFlags & SYNC_AFTER_COLOR_EXPAND)
-        (*infoRec->Sync) (pScrn);
-    else
-        SET_SYNC_FLAG(infoRec);
-}
-
-#ifndef FIXEDBASE
-/*  Scanline version of above gets built for LSBFIRST and MSBFIRST */
-
-void
-#ifdef TRIPLE_BITS
- EXPNAME(XAANonTEGlyphRendererScanline3) (
-#else
- EXPNAME(XAANonTEGlyphRendererScanline) (
-#endif
-                                            ScrnInfoPtr pScrn,
-                                            int xText, int wText,
-                                            int y, int h, int skipleft,
-                                            int startline,
-                                            NonTEGlyphInfo * glyphp, int fg,
-                                            int rop, unsigned int planemask) {
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    int bufferNo = 0;
-    CARD32 *base;
-
-    (*infoRec->SetupForScanlineCPUToScreenColorExpandFill) (pScrn, fg, -1, rop,
-                                                            planemask);
-    (*infoRec->SubsequentScanlineCPUToScreenColorExpandFill) (pScrn, xText, y,
-                                                              wText, h, 0);
-
-    while (h--) {
-        base = (CARD32 *) infoRec->ScanlineColorExpandBuffers[bufferNo];
-        NonTEGlyphFunc(base, glyphp, startline++, wText, skipleft);
-        (*infoRec->SubsequentColorExpandScanline) (pScrn, bufferNo++);
-        if (bufferNo >= infoRec->NumScanlineColorExpandBuffers)
-            bufferNo = 0;
-    }
-
-    SET_SYNC_FLAG(infoRec);
-}
-
-#endif
-
-/********************************************************************
-
-   Generic NonTE scanline rendering code.
-
-********************************************************************/
-
-CARD32 *
-NonTEGlyphFunc(CARD32 *base,
-               NonTEGlyphInfo * glyphp, int line, int TotalWidth, int skipleft)
-{
-    CARD32 bits = 0;
-    int shift = glyphp->width;
-
-    if (skipleft) {
-        if ((line >= glyphp->firstline) && (line <= glyphp->lastline))
-            bits = SHIFT_R(glyphp->bitsp[line], skipleft);
-        shift -= skipleft;
-    }
-    else if ((line >= glyphp->firstline) && (line <= glyphp->lastline))
-        bits = glyphp->bitsp[line];
-
-    while (TotalWidth > 32) {
-        while (shift < 32) {
-            glyphp++;
-            if ((line >= glyphp->firstline) && (line <= glyphp->lastline))
-                bits |= SHIFT_L(glyphp->bitsp[line], shift);
-            shift += glyphp->width;
-        }
-#ifdef TRIPLE_BITS
-        WRITE_BITS3(bits);
-#else
-        WRITE_BITS(bits);
-#endif
-        shift &= 31;
-        if (shift && (line >= glyphp->firstline) && (line <= glyphp->lastline))
-            bits = SHIFT_R(glyphp->bitsp[line], glyphp->width - shift);
-        else
-            bits = 0;
-        TotalWidth -= 32;
-    }
-
-    if (TotalWidth) {
-        TotalWidth -= shift;
-        while (TotalWidth > 0) {
-            glyphp++;
-            if ((line >= glyphp->firstline) && (line <= glyphp->lastline))
-                bits |= SHIFT_L(glyphp->bitsp[line], shift);
-            shift += glyphp->width;
-            TotalWidth -= glyphp->width;
-        }
-#ifdef TRIPLE_BITS
-        if (shift >= 22) {
-            WRITE_BITS3(bits);
-        }
-        else if (shift >= 11) {
-            WRITE_BITS2(bits);
-        }
-        else {
-            WRITE_BITS1(bits);
-        }
-#else
-        WRITE_BITS(bits);
-#endif
-    }
-
-    return base;
-}
diff --git a/hw/xfree86/xaa/xaaNonTEText.c b/hw/xfree86/xaa/xaaNonTEText.c
deleted file mode 100644
index 35b4391..0000000
--- a/hw/xfree86/xaa/xaaNonTEText.c
+++ /dev/null
@@ -1,591 +0,0 @@
-
-/********************************************************************
-
-   In this file we have GC level replacements for PolyText8/16,
-   ImageText8/16, ImageGlyphBlt and PolyGlyphBlt for NonTE (proportional) 
-   fonts. The idea is that everything in this file is device independent.
-   The mentioned GCOps are merely wrappers for the 
-   PolyGlyphBltNonTEColorExpansion and ImageGlyphBltNonTEColorExpansion
-   functions which calculate the boxes containing arbitrarily clipped 
-   text and passes them to the NonTEGlyphRenderer which will usually 
-   be a lower level XAA function which renders these clipped glyphs using
-   the basic color expansion functions exported by the chipset driver.
-   The NonTEGlyphRenderer itself may optionally be driver supplied to
-   facilitate work-arounds/optimizations at a higher level than usual.
-
-   Written by Mark Vojkovich (mvojkovi at ucsd.edu)
-
-********************************************************************/
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include <string.h>
-
-#include "misc.h"
-#include "xf86.h"
-#include "xf86_OSproc.h"
-
-#include <X11/X.h>
-#include <X11/fonts/font.h>
-#include "scrnintstr.h"
-#include "dixfontstr.h"
-#include "xf86str.h"
-#include "xaa.h"
-#include "xaacexp.h"
-#include "xaalocal.h"
-#include "gcstruct.h"
-#include "pixmapstr.h"
-
-static void ImageGlyphBltNonTEColorExpansion(ScrnInfoPtr pScrn,
-                                             int xInit, int yInit, FontPtr font,
-                                             int fg, int bg, unsigned planemask,
-                                             RegionPtr cclip, int nglyph,
-                                             unsigned char *gBase,
-                                             CharInfoPtr * ppci);
-static int PolyGlyphBltNonTEColorExpansion(ScrnInfoPtr pScrn, int xInit,
-                                           int yInit, FontPtr font, int fg,
-                                           int rop, unsigned planemask,
-                                           RegionPtr cclip, int nglyph,
-                                           unsigned char *gBase,
-                                           CharInfoPtr * ppci);
-
-/********************************************************************
-
-   GC level replacements for PolyText8/16 and ImageText8/16
-   for NonTE fonts when using color expansion.
-
-********************************************************************/
-
-int
-XAAPolyText8NonTEColorExpansion(DrawablePtr pDraw,
-                                GCPtr pGC, int x, int y, int count, char *chars)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    unsigned long n;
-    int width = 0;
-
-    (*pGC->font->get_glyphs) (pGC->font, (unsigned long) count,
-                              (unsigned char *) chars, Linear8Bit, &n,
-                              infoRec->CharInfo);
-
-    if (n) {
-        width = PolyGlyphBltNonTEColorExpansion(infoRec->pScrn,
-                                                x + pDraw->x, y + pDraw->y,
-                                                pGC->font, pGC->fgPixel,
-                                                pGC->alu, pGC->planemask,
-                                                pGC->pCompositeClip, n,
-                                                FONTGLYPHS(pGC->font),
-                                                infoRec->CharInfo);
-    }
-
-    return x + width;
-}
-
-int
-XAAPolyText16NonTEColorExpansion(DrawablePtr pDraw,
-                                 GCPtr pGC,
-                                 int x, int y, int count, unsigned short *chars)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    unsigned long n;
-    int width = 0;
-
-    (*pGC->font->get_glyphs) (pGC->font, (unsigned long) count,
-                              (unsigned char *) chars,
-                              (FONTLASTROW(pGC->font) ==
-                               0) ? Linear16Bit : TwoD16Bit, &n,
-                              infoRec->CharInfo);
-
-    if (n) {
-        width = PolyGlyphBltNonTEColorExpansion(infoRec->pScrn,
-                                                x + pDraw->x, y + pDraw->y,
-                                                pGC->font, pGC->fgPixel,
-                                                pGC->alu, pGC->planemask,
-                                                pGC->pCompositeClip, n,
-                                                FONTGLYPHS(pGC->font),
-                                                infoRec->CharInfo);
-    }
-
-    return x + width;
-}
-
-void
-XAAImageText8NonTEColorExpansion(DrawablePtr pDraw,
-                                 GCPtr pGC,
-                                 int x, int y, int count, char *chars)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    unsigned long n;
-
-    if (!RegionNumRects(pGC->pCompositeClip))
-        return;
-
-    (*pGC->font->get_glyphs) (pGC->font, (unsigned long) count,
-                              (unsigned char *) chars, Linear8Bit, &n,
-                              infoRec->CharInfo);
-
-    if (n)
-        ImageGlyphBltNonTEColorExpansion(infoRec->pScrn, x + pDraw->x,
-                                         y + pDraw->y, pGC->font, pGC->fgPixel,
-                                         pGC->bgPixel, pGC->planemask,
-                                         pGC->pCompositeClip, n,
-                                         FONTGLYPHS(pGC->font),
-                                         infoRec->CharInfo);
-}
-
-void
-XAAImageText16NonTEColorExpansion(DrawablePtr pDraw,
-                                  GCPtr pGC,
-                                  int x,
-                                  int y, int count, unsigned short *chars)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    unsigned long n;
-
-    if (!RegionNumRects(pGC->pCompositeClip))
-        return;
-
-    (*pGC->font->get_glyphs) (pGC->font, (unsigned long) count,
-                              (unsigned char *) chars,
-                              (FONTLASTROW(pGC->font) ==
-                               0) ? Linear16Bit : TwoD16Bit, &n,
-                              infoRec->CharInfo);
-
-    if (n)
-        ImageGlyphBltNonTEColorExpansion(infoRec->pScrn, x + pDraw->x,
-                                         y + pDraw->y, pGC->font, pGC->fgPixel,
-                                         pGC->bgPixel, pGC->planemask,
-                                         pGC->pCompositeClip, n,
-                                         FONTGLYPHS(pGC->font),
-                                         infoRec->CharInfo);
-}
-
-/********************************************************************
-
-   GC level replacements for ImageGlyphBlt and PolyGlyphBlt for
-   NonTE fonts when using color expansion.
-
-********************************************************************/
-
-void
-XAAImageGlyphBltNonTEColorExpansion(DrawablePtr pDraw, GCPtr pGC, int xInit, int yInit, unsigned int nglyph, CharInfoPtr * ppci,        /* array of character info */
-                                    pointer pglyphBase  /* start of array of glyphs */
-    )
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-
-    if (!RegionNumRects(pGC->pCompositeClip))
-        return;
-
-    ImageGlyphBltNonTEColorExpansion(infoRec->pScrn, xInit + pDraw->x,
-                                     yInit + pDraw->y, pGC->font, pGC->fgPixel,
-                                     pGC->bgPixel, pGC->planemask,
-                                     pGC->pCompositeClip, nglyph,
-                                     (unsigned char *) pglyphBase, ppci);
-}
-
-void
-XAAPolyGlyphBltNonTEColorExpansion(DrawablePtr pDraw, GCPtr pGC, int xInit, int yInit, unsigned int nglyph, CharInfoPtr * ppci, /* array of character info */
-                                   pointer pglyphBase   /* start of array of glyphs */
-    )
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-
-    if (!RegionNumRects(pGC->pCompositeClip))
-        return;
-
-    PolyGlyphBltNonTEColorExpansion(infoRec->pScrn, xInit + pDraw->x,
-                                    yInit + pDraw->y, pGC->font, pGC->fgPixel,
-                                    pGC->alu, pGC->planemask,
-                                    pGC->pCompositeClip, nglyph,
-                                    (unsigned char *) pglyphBase, ppci);
-}
-
-/********************************************************************
-
-   ImageGlyphBltNonTEColorExpansion -
-   PolyGlyphBltNonTEColorExpansion -
-
-   These guys compute the clipped pieces of text and send it to
-   the lower-level function which will handle acceleration of 
-   arbitrarily clipped text.
-  
-********************************************************************/
-
-static int
-CollectCharacterInfo(NonTEGlyphPtr glyphs,
-                     unsigned int nglyph, CharInfoPtr * ppci, FontPtr pfont)
-{
-    int i, w = 0;
-
-    for (i = 0; i < nglyph; i++, ppci++, glyphs++) {
-        glyphs->bits = (unsigned char *) ((*ppci)->bits);
-        glyphs->start = w + (*ppci)->metrics.leftSideBearing;
-        glyphs->end = w + (*ppci)->metrics.rightSideBearing;
-        glyphs->yoff = (*ppci)->metrics.ascent;
-        glyphs->height = glyphs->yoff + (*ppci)->metrics.descent;
-        glyphs->srcwidth = PADGLYPHWIDTHBYTES(glyphs->end - glyphs->start);
-        w += (*ppci)->metrics.characterWidth;
-    }
-    return w;
-}
-
-static void
-PolyGlyphBltAsSingleBitmap(ScrnInfoPtr pScrn,
-                           int nglyph,
-                           FontPtr font,
-                           int xInit,
-                           int yInit,
-                           int nbox,
-                           BoxPtr pbox, int fg, int rop, unsigned planemask)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    CARD32 *block, *pntr, *bits;
-    int pitch, topLine, botLine, top, bot, height;
-    int Left, Right, Top, Bottom;
-    int LeftEdge, RightEdge;
-    int bitPitch, shift, size, i, skippix;
-    NonTEGlyphPtr glyphs = infoRec->GlyphInfo;
-    Bool extra;
-
-    Left = xInit + infoRec->GlyphInfo[0].start;
-    Right = xInit + infoRec->GlyphInfo[nglyph - 1].end;
-    Top = yInit - FONTMAXBOUNDS(font, ascent);
-    Bottom = yInit + FONTMAXBOUNDS(font, descent);
-
-    /* get into the first band that may contain part of our string */
-    while (nbox && (Top >= pbox->y2)) {
-        pbox++;
-        nbox--;
-    }
-
-    if (!nbox)
-        return;
-
-    pitch = (Right - Left + 31) >> 5;
-    size = (pitch << 2) * (Bottom - Top);
-    block = calloc(1, size);
-
-    topLine = 10000;
-    botLine = -10000;
-
-    while (nglyph--) {
-        top = -glyphs->yoff;
-        bot = top + glyphs->height;
-        if (top < topLine)
-            topLine = top;
-        if (bot > botLine)
-            botLine = bot;
-        skippix = glyphs->start - infoRec->GlyphInfo[0].start;
-        bits = (CARD32 *) glyphs->bits;
-        bitPitch = glyphs->srcwidth >> 2;
-        pntr = block + ((FONTMAXBOUNDS(font, ascent) + top) * pitch) +
-            (skippix >> 5);
-        shift = skippix & 31;
-        extra = ((shift + glyphs->end - glyphs->start) > 32);
-
-        for (i = top; i < bot; i++) {
-            *pntr |= SHIFT_L(*bits, shift);
-            if (extra)
-                *(pntr + 1) |= SHIFT_R(*bits, 32 - shift);
-            pntr += pitch;
-            bits += bitPitch;
-        }
-
-        glyphs++;
-    }
-
-    pntr = block + ((FONTMAXBOUNDS(font, ascent) + topLine) * pitch);
-
-    Top = yInit + topLine;
-    Bottom = yInit + botLine;
-
-    while (nbox && (Top >= pbox->y2)) {
-        pbox++;
-        nbox--;
-    }
-
-    while (nbox && (Bottom > pbox->y1)) {
-        LeftEdge = max(Left, pbox->x1);
-        RightEdge = min(Right, pbox->x2);
-
-        if (RightEdge > LeftEdge) {
-            skippix = LeftEdge - Left;
-            topLine = max(Top, pbox->y1);
-            botLine = min(Bottom, pbox->y2);
-            height = botLine - topLine;
-
-            if (height > 0)
-                (*infoRec->WriteBitmap) (pScrn, LeftEdge, topLine,
-                                         RightEdge - LeftEdge, height,
-                                         (unsigned char *) (pntr +
-                                                            ((topLine -
-                                                              Top) * pitch) +
-                                                            (skippix >> 5)),
-                                         pitch << 2, skippix & 31, fg, -1, rop,
-                                         planemask);
-        }
-
-        nbox--;
-        pbox++;
-    }
-
-    free(block);
-}
-
-static void
-ImageGlyphBltNonTEColorExpansion(ScrnInfoPtr pScrn,
-                                 int xInit, int yInit,
-                                 FontPtr font,
-                                 int fg, int bg,
-                                 unsigned planemask,
-                                 RegionPtr cclip,
-                                 int nglyph,
-                                 unsigned char *gBase, CharInfoPtr * ppci)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    int skippix, skipglyph, width, n, i;
-    int Left, Right, Top, Bottom;
-    int LeftEdge, RightEdge, ytop, ybot;
-    int nbox = RegionNumRects(cclip);
-    BoxPtr pbox = RegionRects(cclip);
-    Bool AlreadySetup = FALSE;
-
-    width = CollectCharacterInfo(infoRec->GlyphInfo, nglyph, ppci, font);
-
-    /* find our backing rectangle dimensions */
-    Left = xInit;
-    Right = Left + width;
-    Top = yInit - FONTASCENT(font);
-    Bottom = yInit + FONTDESCENT(font);
-
-    /* get into the first band that may contain part of our box */
-    while (nbox && (Top >= pbox->y2)) {
-        pbox++;
-        nbox--;
-    }
-
-    while (nbox && (Bottom >= pbox->y1)) {
-        /* handle backing rect first */
-        LeftEdge = max(Left, pbox->x1);
-        RightEdge = min(Right, pbox->x2);
-        if (RightEdge > LeftEdge) {
-            ytop = max(Top, pbox->y1);
-            ybot = min(Bottom, pbox->y2);
-
-            if (ybot > ytop) {
-                if (!AlreadySetup) {
-                    (*infoRec->SetupForSolidFill) (pScrn, bg, GXcopy,
-                                                   planemask);
-                    AlreadySetup = TRUE;
-                }
-                (*infoRec->SubsequentSolidFillRect) (pScrn,
-                                                     LeftEdge, ytop,
-                                                     RightEdge - LeftEdge,
-                                                     ybot - ytop);
-            }
-        }
-        nbox--;
-        pbox++;
-    }
-
-    nbox = RegionNumRects(cclip);
-    pbox = RegionRects(cclip);
-
-    if (infoRec->WriteBitmap && (nglyph > 1) &&
-        ((FONTMAXBOUNDS(font, rightSideBearing) -
-          FONTMINBOUNDS(font, leftSideBearing)) <= 32)) {
-        PolyGlyphBltAsSingleBitmap(pScrn, nglyph, font,
-                                   xInit, yInit, nbox, pbox,
-                                   fg, GXcopy, planemask);
-
-        return;
-    }
-
-    /* compute an approximate but covering bounding box */
-    Left = xInit + infoRec->GlyphInfo[0].start;
-    Right = xInit + infoRec->GlyphInfo[nglyph - 1].end;
-    Top = yInit - FONTMAXBOUNDS(font, ascent);
-    Bottom = yInit + FONTMAXBOUNDS(font, descent);
-
-    /* get into the first band that may contain part of our box */
-    while (nbox && (Top >= pbox->y2)) {
-        pbox++;
-        nbox--;
-    }
-
-    /* stop when the lower edge of the box is beyond our string */
-    while (nbox && (Bottom >= pbox->y1)) {
-        LeftEdge = max(Left, pbox->x1);
-        RightEdge = min(Right, pbox->x2);
-
-        if (RightEdge > LeftEdge) {     /* we're possibly drawing something */
-            ytop = max(Top, pbox->y1);
-            ybot = min(Bottom, pbox->y2);
-            if (ybot > ytop) {
-                skippix = LeftEdge - xInit;
-                skipglyph = 0;
-                while (skippix >= infoRec->GlyphInfo[skipglyph].end)
-                    skipglyph++;
-
-                skippix = RightEdge - xInit;
-                n = 0;
-                i = skipglyph;
-                while ((i < nglyph) && (skippix > infoRec->GlyphInfo[i].start)) {
-                    i++;
-                    n++;
-                }
-
-                if (n)
-                    (*infoRec->NonTEGlyphRenderer) (pScrn,
-                                                    xInit, yInit, n,
-                                                    infoRec->GlyphInfo +
-                                                    skipglyph, pbox, fg, GXcopy,
-                                                    planemask);
-            }
-        }
-
-        nbox--;
-        pbox++;
-    }
-}
-
-static int
-PolyGlyphBltNonTEColorExpansion(ScrnInfoPtr pScrn,
-                                int xInit, int yInit,
-                                FontPtr font,
-                                int fg, int rop,
-                                unsigned planemask,
-                                RegionPtr cclip,
-                                int nglyph,
-                                unsigned char *gBase, CharInfoPtr * ppci)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    int skippix, skipglyph, width, n, i;
-    int Left, Right, Top, Bottom;
-    int LeftEdge, RightEdge;
-    int nbox = RegionNumRects(cclip);
-    BoxPtr pbox = RegionRects(cclip);
-
-    width = CollectCharacterInfo(infoRec->GlyphInfo, nglyph, ppci, font);
-
-    if (!nbox)
-        return width;
-
-    if ((infoRec->WriteBitmap) && (rop == GXcopy) && (nglyph > 1) &&
-        ((FONTMAXBOUNDS(font, rightSideBearing) -
-          FONTMINBOUNDS(font, leftSideBearing)) <= 32)) {
-
-        PolyGlyphBltAsSingleBitmap(pScrn, nglyph, font,
-                                   xInit, yInit, nbox, pbox,
-                                   fg, rop, planemask);
-
-        return width;
-    }
-
-    /* compute an approximate but covering bounding box */
-    Left = xInit + infoRec->GlyphInfo[0].start;
-    Right = xInit + infoRec->GlyphInfo[nglyph - 1].end;
-    Top = yInit - FONTMAXBOUNDS(font, ascent);
-    Bottom = yInit + FONTMAXBOUNDS(font, descent);
-
-    /* get into the first band that may contain part of our string */
-    while (nbox && (Top >= pbox->y2)) {
-        pbox++;
-        nbox--;
-    }
-
-    /* stop when the lower edge of the box is beyond our string */
-    while (nbox && (Bottom >= pbox->y1)) {
-        LeftEdge = max(Left, pbox->x1);
-        RightEdge = min(Right, pbox->x2);
-
-        if (RightEdge > LeftEdge) {     /* we're possibly drawing something */
-
-            skippix = LeftEdge - xInit;
-            skipglyph = 0;
-            while (skippix >= infoRec->GlyphInfo[skipglyph].end)
-                skipglyph++;
-
-            skippix = RightEdge - xInit;
-            n = 0;
-            i = skipglyph;
-            while ((i < nglyph) && (skippix > infoRec->GlyphInfo[i].start)) {
-                i++;
-                n++;
-            }
-
-            if (n)
-                (*infoRec->NonTEGlyphRenderer) (pScrn,
-                                                xInit, yInit, n,
-                                                infoRec->GlyphInfo + skipglyph,
-                                                pbox, fg, rop, planemask);
-        }
-
-        nbox--;
-        pbox++;
-    }
-    return width;
-}
-
-/* It is possible that the none of the glyphs passed to the 
-   NonTEGlyphRenderer will be drawn.  This function being called
-   indicates that part of the text string's bounding box is visible
-   but not necessarily that any of the characters are visible */
-
-void
-XAANonTEGlyphRenderer(ScrnInfoPtr pScrn,
-                      int x, int y, int n,
-                      NonTEGlyphPtr glyphs,
-                      BoxPtr pbox, int fg, int rop, unsigned int planemask)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    int x1, x2, y1, y2, i, w, h, skipleft, skiptop;
-    unsigned char *src;
-
-    for (i = 0; i < n; i++, glyphs++) {
-        x1 = x + glyphs->start;
-        x2 = x + glyphs->end;
-        y1 = y - glyphs->yoff;
-        y2 = y1 + glyphs->height;
-
-        if (y1 < pbox->y1) {
-            skiptop = pbox->y1 - y1;
-            y1 = pbox->y1;
-        }
-        else
-            skiptop = 0;
-        if (y2 > pbox->y2)
-            y2 = pbox->y2;
-        h = y2 - y1;
-        if (h <= 0)
-            continue;
-
-        if (x1 < pbox->x1) {
-            skipleft = pbox->x1 - x1;
-            x1 = pbox->x1;
-        }
-        else
-            skipleft = 0;
-        if (x2 > pbox->x2)
-            x2 = pbox->x2;
-
-        w = x2 - x1;
-
-        if (w > 0) {
-            src = glyphs->bits + (skiptop * glyphs->srcwidth);
-
-            if (skipleft) {
-                src += (skipleft >> 5) << 2;
-                skipleft &= 31;
-            }
-
-            (*infoRec->WriteBitmap) (pScrn, x1, y1, w, h, src,
-                                     glyphs->srcwidth, skipleft, fg, -1, rop,
-                                     planemask);
-        }
-    }
-
-}
diff --git a/hw/xfree86/xaa/xaaOffscreen.c b/hw/xfree86/xaa/xaaOffscreen.c
deleted file mode 100644
index 7d89fc1..0000000
--- a/hw/xfree86/xaa/xaaOffscreen.c
+++ /dev/null
@@ -1,163 +0,0 @@
-
-/*
-   Copyright (c) 1999 -  The XFree86 Project Inc.
-
-   Written by Mark Vojkovich
-
-*/
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include "misc.h"
-#include "xf86.h"
-#include "xf86_OSproc.h"
-
-#include <X11/X.h>
-#include "scrnintstr.h"
-#include "pixmapstr.h"
-#include "windowstr.h"
-#include "xf86str.h"
-#include "mi.h"
-#include "miline.h"
-#include "xaa.h"
-#include "xaalocal.h"
-#include "xaawrap.h"
-#include "xf86fbman.h"
-#include "servermd.h"
-
-void
-XAAMoveOutOffscreenPixmaps(ScreenPtr pScreen)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCREEN(pScreen);
-    PixmapLinkPtr pLink = infoRec->OffscreenPixmaps;
-    XAAPixmapPtr pPriv;
-
-    while (pLink) {
-        pPriv = XAA_GET_PIXMAP_PRIVATE(pLink->pPix);
-        pLink->area = pPriv->offscreenArea;
-        XAAMoveOutOffscreenPixmap(pLink->pPix);
-        pLink = pLink->next;
-    }
-}
-
-void
-XAAMoveInOffscreenPixmaps(ScreenPtr pScreen)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCREEN(pScreen);
-    PixmapLinkPtr pLink = infoRec->OffscreenPixmaps;
-    PixmapPtr pPix, pScreenPix, tmpPix;
-    pointer data;
-    XAAPixmapPtr pPriv;
-    GCPtr pGC;
-    FBAreaPtr area;
-
-    pScreenPix = (*pScreen->GetScreenPixmap) (pScreen);
-
-    while (pLink) {
-        pPix = pLink->pPix;
-        pPriv = XAA_GET_PIXMAP_PRIVATE(pPix);
-        area = pLink->area;
-
-        data = pPix->devPrivate.ptr;
-        tmpPix = GetScratchPixmapHeader(pScreen,
-                                        pPix->drawable.width,
-                                        pPix->drawable.height,
-                                        pPix->drawable.depth,
-                                        pPix->drawable.bitsPerPixel,
-                                        pPix->devKind, data);
-
-        pPriv->freeData = FALSE;
-
-        pPix->drawable.x = area->box.x1;
-        pPix->drawable.y = area->box.y1;
-        pPix->devKind = pScreenPix->devKind;
-        pPix->devPrivate.ptr = pScreenPix->devPrivate.ptr;
-        pPix->drawable.bitsPerPixel = infoRec->pScrn->bitsPerPixel;
-        pPix->drawable.serialNumber = NEXT_SERIAL_NUMBER;
-
-        if (!tmpPix) {
-            pPriv->offscreenArea = area;
-            free(data);
-            pLink = pLink->next;
-            continue;
-        }
-
-        pGC = GetScratchGC(pPix->drawable.depth, pScreen);
-        ValidateGC((DrawablePtr) pPix, pGC);
-
-        (*pGC->ops->CopyArea) ((DrawablePtr) tmpPix, (DrawablePtr) pPix, pGC,
-                               0, 0, pPix->drawable.width,
-                               pPix->drawable.height, 0, 0);
-
-        free(data);
-        tmpPix->devPrivate.ptr = NULL;
-
-        FreeScratchGC(pGC);
-        FreeScratchPixmapHeader(tmpPix);
-
-        pPriv->offscreenArea = area;
-        pLink->area = NULL;
-        pLink = pLink->next;
-    }
-}
-
-void
-XAARemoveAreaCallback(FBAreaPtr area)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCREEN(area->pScreen);
-    PixmapPtr pPix = (PixmapPtr) area->devPrivate.ptr;
-    XAAPixmapPtr pPriv = XAA_GET_PIXMAP_PRIVATE(pPix);
-
-    XAAMoveOutOffscreenPixmap(pPix);
-
-    pPriv->flags &= ~OFFSCREEN;
-
-    DELIST_OFFSCREEN_PIXMAP(pPix);
-}
-
-void
-XAAMoveOutOffscreenPixmap(PixmapPtr pPix)
-{
-    ScreenPtr pScreen = pPix->drawable.pScreen;
-    XAAPixmapPtr pPriv = XAA_GET_PIXMAP_PRIVATE(pPix);
-    int width, height, devKind, bitsPerPixel;
-    PixmapPtr tmpPix;
-    unsigned char *data;
-    GCPtr pGC;
-
-    width = pPix->drawable.width;
-    height = pPix->drawable.height;
-    bitsPerPixel = pPix->drawable.bitsPerPixel;
-
-    devKind = BitmapBytePad(width * bitsPerPixel);
-    if (!(data = malloc(devKind * height)))
-        FatalError("Out of memory\n");
-
-    tmpPix = GetScratchPixmapHeader(pScreen, width, height,
-                                    pPix->drawable.depth, bitsPerPixel, devKind,
-                                    data);
-    if (!tmpPix) {
-        free(data);
-        FatalError("Out of memory\n");
-    }
-
-    pGC = GetScratchGC(pPix->drawable.depth, pScreen);
-    ValidateGC((DrawablePtr) tmpPix, pGC);
-
-    (*pGC->ops->CopyArea) ((DrawablePtr) pPix, (DrawablePtr) tmpPix,
-                           pGC, 0, 0, width, height, 0, 0);
-
-    FreeScratchGC(pGC);
-    FreeScratchPixmapHeader(tmpPix);
-
-    pPix->drawable.x = 0;
-    pPix->drawable.y = 0;
-    pPix->devKind = devKind;
-    pPix->devPrivate.ptr = data;
-    pPix->drawable.serialNumber = NEXT_SERIAL_NUMBER;
-
-    pPriv->offscreenArea = NULL;
-    pPriv->freeData = TRUE;
-}
diff --git a/hw/xfree86/xaa/xaaOverlay.c b/hw/xfree86/xaa/xaaOverlay.c
deleted file mode 100644
index 25d18da..0000000
--- a/hw/xfree86/xaa/xaaOverlay.c
+++ /dev/null
@@ -1,122 +0,0 @@
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include "misc.h"
-#include "xf86.h"
-#include "xf86_OSproc.h"
-
-#include <X11/X.h>
-#include "scrnintstr.h"
-#include "windowstr.h"
-#include "xf86str.h"
-#include "xaa.h"
-#include "xaalocal.h"
-#include "xaawrap.h"
-#include "gcstruct.h"
-#include "pixmapstr.h"
-#include "mioverlay.h"
-
-#ifdef PANORAMIX
-#include "panoramiX.h"
-#include "panoramiXsrv.h"
-#endif
-
-static void
-XAACopyWindow8_32(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
-{
-    DDXPointPtr pptSrc, ppt;
-    RegionRec rgnDst;
-    BoxPtr pbox;
-    int dx, dy, nbox;
-    WindowPtr pwinRoot;
-    ScreenPtr pScreen = pWin->drawable.pScreen;
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_DRAWABLE((&pWin->drawable));
-    Bool doUnderlay = miOverlayCopyUnderlay(pScreen);
-    RegionPtr borderClip = &pWin->borderClip;
-    Bool freeReg = FALSE;
-
-    if (!infoRec->pScrn->vtSema || !infoRec->ScreenToScreenBitBlt ||
-        (infoRec->ScreenToScreenBitBltFlags & NO_PLANEMASK)) {
-        XAA_SCREEN_PROLOGUE(pScreen, CopyWindow);
-        if (infoRec->pScrn->vtSema && infoRec->NeedToSync) {
-            (*infoRec->Sync) (infoRec->pScrn);
-            infoRec->NeedToSync = FALSE;
-        }
-        (*pScreen->CopyWindow) (pWin, ptOldOrg, prgnSrc);
-        XAA_SCREEN_EPILOGUE(pScreen, CopyWindow, XAACopyWindow8_32);
-        return;
-    }
-
-    pwinRoot = pScreen->root;
-
-    if (doUnderlay)
-        freeReg = miOverlayCollectUnderlayRegions(pWin, &borderClip);
-
-    RegionNull(&rgnDst);
-
-    dx = ptOldOrg.x - pWin->drawable.x;
-    dy = ptOldOrg.y - pWin->drawable.y;
-    RegionTranslate(prgnSrc, -dx, -dy);
-    RegionIntersect(&rgnDst, borderClip, prgnSrc);
-
-    pbox = RegionRects(&rgnDst);
-    nbox = RegionNumRects(&rgnDst);
-    if (!nbox || !(pptSrc = (DDXPointPtr) malloc(nbox * sizeof(DDXPointRec)))) {
-        RegionUninit(&rgnDst);
-        return;
-    }
-    ppt = pptSrc;
-
-    while (nbox--) {
-        ppt->x = pbox->x1 + dx;
-        ppt->y = pbox->y1 + dy;
-        ppt++;
-        pbox++;
-    }
-
-    infoRec->ScratchGC.planemask = doUnderlay ? 0x00ffffff : 0xff000000;
-    infoRec->ScratchGC.alu = GXcopy;
-
-    XAADoBitBlt((DrawablePtr) pwinRoot, (DrawablePtr) pwinRoot,
-                &(infoRec->ScratchGC), &rgnDst, pptSrc);
-
-    free(pptSrc);
-    RegionUninit(&rgnDst);
-    if (freeReg)
-        RegionDestroy(borderClip);
-}
-
-static void
-XAASetColorKey8_32(ScreenPtr pScreen, int nbox, BoxPtr pbox)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCREEN(pScreen);
-    ScrnInfoPtr pScrn = infoRec->pScrn;
-
-    /* I'm counting on writes being clipped away while switched away.
-       If this isn't going to be true then I need to be wrapping instead. */
-    if (!infoRec->pScrn->vtSema)
-        return;
-
-    (*infoRec->FillSolidRects) (pScrn, pScrn->colorKey << 24, GXcopy,
-                                0xff000000, nbox, pbox);
-
-    SET_SYNC_FLAG(infoRec);
-}
-
-void
-XAASetupOverlay8_32Planar(ScreenPtr pScreen)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCREEN(pScreen);
-    int i;
-
-    pScreen->CopyWindow = XAACopyWindow8_32;
-
-    if (!(infoRec->FillSolidRectsFlags & NO_PLANEMASK))
-        miOverlaySetTransFunction(pScreen, XAASetColorKey8_32);
-
-    infoRec->FullPlanemask = ~0;
-    for (i = 0; i < 32; i++)    /* haven't thought about this much */
-        infoRec->FullPlanemasks[i] = ~0;
-}
diff --git a/hw/xfree86/xaa/xaaOverlayDF.c b/hw/xfree86/xaa/xaaOverlayDF.c
deleted file mode 100644
index 470694c..0000000
--- a/hw/xfree86/xaa/xaaOverlayDF.c
+++ /dev/null
@@ -1,906 +0,0 @@
-/*
-   Copyright (c) 1999 - The XFree86 Project Inc.
-
-   Written by Mark Vojkovich
-*/
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include "misc.h"
-#include "xf86.h"
-#include "xf86_OSproc.h"
-
-#include <X11/X.h>
-#include "scrnintstr.h"
-#include "pixmapstr.h"
-#include "windowstr.h"
-#include "xf86str.h"
-#include "mi.h"
-#include "miline.h"
-#include "xaa.h"
-#include "xaalocal.h"
-#include "xaawrap.h"
-#include "servermd.h"
-
-/* Screen funcs */
-
-static void XAAOverCopyWindow(WindowPtr, DDXPointRec, RegionPtr);
-static void XAAOverWindowExposures(WindowPtr, RegionPtr, RegionPtr);
-
-static int XAAOverStippledFillChooser(GCPtr);
-static int XAAOverOpaqueStippledFillChooser(GCPtr);
-static int XAAOverTiledFillChooser(GCPtr);
-
-/* GC funcs */
-
-static RegionPtr XAAOverCopyArea(DrawablePtr, DrawablePtr, GC *,
-                                 int, int, int, int, int, int);
-static RegionPtr XAAOverCopyPlane(DrawablePtr, DrawablePtr, GCPtr,
-                                  int, int, int, int, int, int, unsigned long);
-static void XAAOverPushPixelsSolid(GCPtr, PixmapPtr, DrawablePtr, int,
-                                   int, int, int);
-static void XAAOverPolyFillRectSolid(DrawablePtr, GCPtr, int, xRectangle *);
-static void XAAOverPolyFillRectStippled(DrawablePtr, GCPtr, int, xRectangle *);
-static void XAAOverPolyFillRectOpaqueStippled(DrawablePtr, GCPtr,
-                                              int, xRectangle *);
-static void XAAOverPolyFillRectTiled(DrawablePtr, GCPtr, int, xRectangle *);
-static void XAAOverFillSpansSolid(DrawablePtr, GCPtr, int, DDXPointPtr,
-                                  int *, int);
-static void XAAOverFillSpansStippled(DrawablePtr, GCPtr, int, DDXPointPtr,
-                                     int *, int);
-static void XAAOverFillSpansOpaqueStippled(DrawablePtr, GCPtr, int,
-                                           DDXPointPtr, int *, int);
-static void XAAOverFillSpansTiled(DrawablePtr, GCPtr, int, DDXPointPtr,
-                                  int *, int);
-static int XAAOverPolyText8TE(DrawablePtr, GCPtr, int, int, int, char *);
-static int XAAOverPolyText16TE(DrawablePtr, GCPtr, int, int, int,
-                               unsigned short *);
-static void XAAOverImageText8TE(DrawablePtr, GCPtr, int, int, int, char *);
-static void XAAOverImageText16TE(DrawablePtr, GCPtr, int, int, int,
-                                 unsigned short *);
-static void XAAOverImageGlyphBltTE(DrawablePtr, GCPtr, int, int,
-                                   unsigned int, CharInfoPtr *, pointer);
-static void XAAOverPolyGlyphBltTE(DrawablePtr, GCPtr, int, int,
-                                  unsigned int, CharInfoPtr *, pointer);
-static int XAAOverPolyText8NonTE(DrawablePtr, GCPtr, int, int, int, char *);
-static int XAAOverPolyText16NonTE(DrawablePtr, GCPtr, int, int, int,
-                                  unsigned short *);
-static void XAAOverImageText8NonTE(DrawablePtr, GCPtr, int, int, int, char *);
-static void XAAOverImageText16NonTE(DrawablePtr, GCPtr, int, int, int,
-                                    unsigned short *);
-static void XAAOverImageGlyphBltNonTE(DrawablePtr, GCPtr, int, int,
-                                      unsigned int, CharInfoPtr *, pointer);
-static void XAAOverPolyGlyphBltNonTE(DrawablePtr, GCPtr, int, int,
-                                     unsigned int, CharInfoPtr *, pointer);
-static void XAAOverPolyRectangleThinSolid(DrawablePtr, GCPtr, int,
-                                          xRectangle *);
-static void XAAOverPolylinesWideSolid(DrawablePtr, GCPtr, int, int,
-                                      DDXPointPtr);
-static void XAAOverPolylinesThinSolid(DrawablePtr, GCPtr, int, int,
-                                      DDXPointPtr);
-static void XAAOverPolySegmentThinSolid(DrawablePtr, GCPtr, int, xSegment *);
-static void XAAOverPolylinesThinDashed(DrawablePtr, GCPtr, int, int,
-                                       DDXPointPtr);
-static void XAAOverPolySegmentThinDashed(DrawablePtr, GCPtr, int, xSegment *);
-static void XAAOverFillPolygonSolid(DrawablePtr, GCPtr, int, int, int,
-                                    DDXPointPtr);
-static void XAAOverFillPolygonStippled(DrawablePtr, GCPtr, int, int, int,
-                                       DDXPointPtr);
-static void XAAOverFillPolygonOpaqueStippled(DrawablePtr, GCPtr, int, int, int,
-                                             DDXPointPtr);
-static void XAAOverFillPolygonTiled(DrawablePtr, GCPtr, int, int, int,
-                                    DDXPointPtr);
-static void XAAOverPolyFillArcSolid(DrawablePtr, GCPtr, int, xArc *);
-static void XAAOverPutImage(DrawablePtr, GCPtr, int, int, int, int, int,
-                            int, int, char *);
-
-typedef struct {
-    ScrnInfoPtr pScrn;
-    DepthChangeFuncPtr callback;
-    int currentDepth;
-/* GC funcs */
-    RegionPtr (*CopyArea) (DrawablePtr, DrawablePtr, GC *,
-                           int, int, int, int, int, int);
-    RegionPtr (*CopyPlane) (DrawablePtr, DrawablePtr, GCPtr,
-                            int, int, int, int, int, int, unsigned long);
-    void (*PushPixelsSolid) (GCPtr, PixmapPtr, DrawablePtr, int, int, int, int);
-    void (*PolyFillRectSolid) (DrawablePtr, GCPtr, int, xRectangle *);
-    void (*PolyFillRectStippled) (DrawablePtr, GCPtr, int, xRectangle *);
-    void (*PolyFillRectOpaqueStippled) (DrawablePtr, GCPtr, int, xRectangle *);
-    void (*PolyFillRectTiled) (DrawablePtr, GCPtr, int, xRectangle *);
-    void (*FillSpansSolid) (DrawablePtr, GCPtr, int, DDXPointPtr, int *, int);
-    void (*FillSpansStippled) (DrawablePtr, GCPtr, int, DDXPointPtr, int *,
-                               int);
-    void (*FillSpansOpaqueStippled) (DrawablePtr, GCPtr, int, DDXPointPtr,
-                                     int *, int);
-    void (*FillSpansTiled) (DrawablePtr, GCPtr, int, DDXPointPtr, int *, int);
-    int (*PolyText8TE) (DrawablePtr, GCPtr, int, int, int, char *);
-    int (*PolyText16TE) (DrawablePtr, GCPtr, int, int, int, unsigned short *);
-    void (*ImageText8TE) (DrawablePtr, GCPtr, int, int, int, char *);
-    void (*ImageText16TE) (DrawablePtr, GCPtr, int, int, int, unsigned short *);
-    void (*ImageGlyphBltTE) (DrawablePtr, GCPtr, int, int, unsigned int,
-                             CharInfoPtr *, pointer);
-    void (*PolyGlyphBltTE) (DrawablePtr, GCPtr, int, int, unsigned int,
-                            CharInfoPtr *, pointer);
-    int (*PolyText8NonTE) (DrawablePtr, GCPtr, int, int, int, char *);
-    int (*PolyText16NonTE) (DrawablePtr, GCPtr, int, int, int,
-                            unsigned short *);
-    void (*ImageText8NonTE) (DrawablePtr, GCPtr, int, int, int, char *);
-    void (*ImageText16NonTE) (DrawablePtr, GCPtr, int, int, int,
-                              unsigned short *);
-    void (*ImageGlyphBltNonTE) (DrawablePtr, GCPtr, int, int, unsigned int,
-                                CharInfoPtr *, pointer);
-    void (*PolyGlyphBltNonTE) (DrawablePtr, GCPtr, int, int, unsigned int,
-                               CharInfoPtr *, pointer);
-    void (*PolyRectangleThinSolid) (DrawablePtr, GCPtr, int, xRectangle *);
-    void (*PolylinesWideSolid) (DrawablePtr, GCPtr, int, int, DDXPointPtr);
-
-    void (*PolylinesThinSolid) (DrawablePtr, GCPtr, int, int, DDXPointPtr);
-    void (*PolySegmentThinSolid) (DrawablePtr, GCPtr, int, xSegment *);
-    void (*PolylinesThinDashed) (DrawablePtr, GCPtr, int, int, DDXPointPtr);
-    void (*PolySegmentThinDashed) (DrawablePtr, GCPtr, int, xSegment *);
-    void (*FillPolygonSolid) (DrawablePtr, GCPtr, int, int, int, DDXPointPtr);
-    void (*FillPolygonStippled) (DrawablePtr, GCPtr, int, int, int,
-                                 DDXPointPtr);
-    void (*FillPolygonOpaqueStippled) (DrawablePtr, GCPtr, int, int, int,
-                                       DDXPointPtr);
-    void (*FillPolygonTiled) (DrawablePtr, GCPtr, int, int, int, DDXPointPtr);
-    void (*PolyFillArcSolid) (DrawablePtr, GCPtr, int, xArc *);
-    void (*PutImage) (DrawablePtr, GCPtr, int, int, int, int, int, int,
-                      int, char *);
-    int (*StippledFillChooser) (GCPtr);
-    int (*OpaqueStippledFillChooser) (GCPtr);
-    int (*TiledFillChooser) (GCPtr);
-} XAAOverlayRec, *XAAOverlayPtr;
-
-static DevPrivateKeyRec XAAOverlayKeyRec;
-
-#define XAAOverlayKey (&XAAOverlayKeyRec)
-
-#define GET_OVERLAY_PRIV(pScreen) \
-    (XAAOverlayPtr)dixLookupPrivate(&(pScreen)->devPrivates, XAAOverlayKey)
-
-#define SWITCH_DEPTH(d) \
-   if(pOverPriv->currentDepth != d) { \
-	(*pOverPriv->callback)(pOverPriv->pScrn, d); \
-	pOverPriv->currentDepth = d; \
-   }
-
-Bool
-XAAInitDualFramebufferOverlay(ScreenPtr pScreen, DepthChangeFuncPtr callback)
-{
-    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCREEN(pScreen);
-    XAAOverlayPtr pOverPriv;
-
-    if (!dixRegisterPrivateKey(&XAAOverlayKeyRec, PRIVATE_SCREEN, 0))
-        return FALSE;
-
-    if (!(pOverPriv = malloc(sizeof(XAAOverlayRec))))
-        return FALSE;
-
-    dixSetPrivate(&pScreen->devPrivates, XAAOverlayKey, pOverPriv);
-
-    pOverPriv->pScrn = pScrn;
-    pOverPriv->callback = callback;
-    pOverPriv->currentDepth = -1;
-
-    /* Overwrite key screen functions.  The XAA core will clean up */
-
-    pScreen->CopyWindow = XAAOverCopyWindow;
-    pScreen->WindowExposures = XAAOverWindowExposures;
-
-    pOverPriv->StippledFillChooser = infoRec->StippledFillChooser;
-    pOverPriv->OpaqueStippledFillChooser = infoRec->OpaqueStippledFillChooser;
-    pOverPriv->TiledFillChooser = infoRec->TiledFillChooser;
-
-    infoRec->StippledFillChooser = XAAOverStippledFillChooser;
-    infoRec->OpaqueStippledFillChooser = XAAOverOpaqueStippledFillChooser;
-    infoRec->TiledFillChooser = XAAOverTiledFillChooser;
-
-    /* wrap all XAA GC rendering */
-
-    pOverPriv->CopyArea = infoRec->CopyArea;
-    pOverPriv->CopyPlane = infoRec->CopyPlane;
-    pOverPriv->PushPixelsSolid = infoRec->PushPixelsSolid;
-    pOverPriv->PolyFillRectSolid = infoRec->PolyFillRectSolid;
-    pOverPriv->PolyFillRectStippled = infoRec->PolyFillRectStippled;
-    pOverPriv->PolyFillRectOpaqueStippled = infoRec->PolyFillRectOpaqueStippled;
-    pOverPriv->PolyFillRectTiled = infoRec->PolyFillRectTiled;
-    pOverPriv->FillSpansSolid = infoRec->FillSpansSolid;
-    pOverPriv->FillSpansStippled = infoRec->FillSpansStippled;
-    pOverPriv->FillSpansOpaqueStippled = infoRec->FillSpansOpaqueStippled;
-    pOverPriv->FillSpansTiled = infoRec->FillSpansTiled;
-    pOverPriv->PolyText8TE = infoRec->PolyText8TE;
-    pOverPriv->PolyText16TE = infoRec->PolyText16TE;
-    pOverPriv->ImageText8TE = infoRec->ImageText8TE;
-    pOverPriv->ImageText16TE = infoRec->ImageText16TE;
-    pOverPriv->ImageGlyphBltTE = infoRec->ImageGlyphBltTE;
-    pOverPriv->PolyGlyphBltTE = infoRec->PolyGlyphBltTE;
-    pOverPriv->PolyText8NonTE = infoRec->PolyText8NonTE;
-    pOverPriv->PolyText16NonTE = infoRec->PolyText16NonTE;
-    pOverPriv->ImageText8NonTE = infoRec->ImageText8NonTE;
-    pOverPriv->ImageText16NonTE = infoRec->ImageText16NonTE;
-    pOverPriv->ImageGlyphBltNonTE = infoRec->ImageGlyphBltNonTE;
-    pOverPriv->PolyGlyphBltNonTE = infoRec->PolyGlyphBltNonTE;
-    pOverPriv->PolyRectangleThinSolid = infoRec->PolyRectangleThinSolid;
-    pOverPriv->PolylinesWideSolid = infoRec->PolylinesWideSolid;
-    pOverPriv->PolylinesThinSolid = infoRec->PolylinesThinSolid;
-    pOverPriv->PolySegmentThinSolid = infoRec->PolySegmentThinSolid;
-    pOverPriv->PolylinesThinDashed = infoRec->PolylinesThinDashed;
-    pOverPriv->PolySegmentThinDashed = infoRec->PolySegmentThinDashed;
-    pOverPriv->FillPolygonSolid = infoRec->FillPolygonSolid;
-    pOverPriv->FillPolygonStippled = infoRec->FillPolygonStippled;
-    pOverPriv->FillPolygonOpaqueStippled = infoRec->FillPolygonOpaqueStippled;
-    pOverPriv->FillPolygonTiled = infoRec->FillPolygonTiled;
-    pOverPriv->PolyFillArcSolid = infoRec->PolyFillArcSolid;
-    pOverPriv->PutImage = infoRec->PutImage;
-
-    if (infoRec->CopyArea)
-        infoRec->CopyArea = XAAOverCopyArea;
-    if (infoRec->CopyPlane)
-        infoRec->CopyPlane = XAAOverCopyPlane;
-    if (infoRec->PushPixelsSolid)
-        infoRec->PushPixelsSolid = XAAOverPushPixelsSolid;
-    if (infoRec->PolyFillRectSolid)
-        infoRec->PolyFillRectSolid = XAAOverPolyFillRectSolid;
-    if (infoRec->PolyFillRectStippled)
-        infoRec->PolyFillRectStippled = XAAOverPolyFillRectStippled;
-    if (infoRec->PolyFillRectOpaqueStippled)
-        infoRec->PolyFillRectOpaqueStippled = XAAOverPolyFillRectOpaqueStippled;
-    if (infoRec->PolyFillRectTiled)
-        infoRec->PolyFillRectTiled = XAAOverPolyFillRectTiled;
-    if (infoRec->FillSpansSolid)
-        infoRec->FillSpansSolid = XAAOverFillSpansSolid;
-    if (infoRec->FillSpansStippled)
-        infoRec->FillSpansStippled = XAAOverFillSpansStippled;
-    if (infoRec->FillSpansOpaqueStippled)
-        infoRec->FillSpansOpaqueStippled = XAAOverFillSpansOpaqueStippled;
-    if (infoRec->FillSpansTiled)
-        infoRec->FillSpansTiled = XAAOverFillSpansTiled;
-    if (infoRec->PolyText8TE)
-        infoRec->PolyText8TE = XAAOverPolyText8TE;
-    if (infoRec->PolyText16TE)
-        infoRec->PolyText16TE = XAAOverPolyText16TE;
-    if (infoRec->ImageText8TE)
-        infoRec->ImageText8TE = XAAOverImageText8TE;
-    if (infoRec->ImageText16TE)
-        infoRec->ImageText16TE = XAAOverImageText16TE;
-    if (infoRec->ImageGlyphBltTE)
-        infoRec->ImageGlyphBltTE = XAAOverImageGlyphBltTE;
-    if (infoRec->PolyGlyphBltTE)
-        infoRec->PolyGlyphBltTE = XAAOverPolyGlyphBltTE;
-    if (infoRec->PolyText8NonTE)
-        infoRec->PolyText8NonTE = XAAOverPolyText8NonTE;
-    if (infoRec->PolyText16NonTE)
-        infoRec->PolyText16NonTE = XAAOverPolyText16NonTE;
-    if (infoRec->ImageText8NonTE)
-        infoRec->ImageText8NonTE = XAAOverImageText8NonTE;
-    if (infoRec->ImageText16NonTE)
-        infoRec->ImageText16NonTE = XAAOverImageText16NonTE;
-    if (infoRec->ImageGlyphBltNonTE)
-        infoRec->ImageGlyphBltNonTE = XAAOverImageGlyphBltNonTE;
-    if (infoRec->PolyGlyphBltNonTE)
-        infoRec->PolyGlyphBltNonTE = XAAOverPolyGlyphBltNonTE;
-    if (infoRec->PolyRectangleThinSolid)
-        infoRec->PolyRectangleThinSolid = XAAOverPolyRectangleThinSolid;
-    if (infoRec->PolylinesWideSolid)
-        infoRec->PolylinesWideSolid = XAAOverPolylinesWideSolid;
-    if (infoRec->PolylinesThinSolid)
-        infoRec->PolylinesThinSolid = XAAOverPolylinesThinSolid;
-    if (infoRec->PolySegmentThinSolid)
-        infoRec->PolySegmentThinSolid = XAAOverPolySegmentThinSolid;
-    if (infoRec->PolylinesThinDashed)
-        infoRec->PolylinesThinDashed = XAAOverPolylinesThinDashed;
-    if (infoRec->PolySegmentThinDashed)
-        infoRec->PolySegmentThinDashed = XAAOverPolySegmentThinDashed;
-    if (infoRec->FillPolygonSolid)
-        infoRec->FillPolygonSolid = XAAOverFillPolygonSolid;
-    if (infoRec->FillPolygonStippled)
-        infoRec->FillPolygonStippled = XAAOverFillPolygonStippled;
-    if (infoRec->FillPolygonOpaqueStippled)
-        infoRec->FillPolygonOpaqueStippled = XAAOverFillPolygonOpaqueStippled;
-    if (infoRec->FillPolygonTiled)
-        infoRec->FillPolygonTiled = XAAOverFillPolygonTiled;
-    if (infoRec->PolyFillArcSolid)
-        infoRec->PolyFillArcSolid = XAAOverPolyFillArcSolid;
-    if (infoRec->PutImage)
-        infoRec->PutImage = XAAOverPutImage;
-
-    return TRUE;
-}
-
-/***********************  Screen functions ************************/
-
-void
-XAAOverCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
-{
-    ScreenPtr pScreen = pWin->drawable.pScreen;
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCREEN(pScreen);
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pScreen);
-    ScrnInfoPtr pScrn = infoRec->pScrn;
-    DDXPointPtr ppt, pptSrc;
-    RegionRec rgnDst;
-    BoxPtr pbox;
-    int i, nbox, dx, dy;
-    WindowPtr pRoot = pScreen->root;
-
-    if (!pScrn->vtSema || !infoRec->ScreenToScreenBitBlt) {
-        XAA_SCREEN_PROLOGUE(pScreen, CopyWindow);
-        if (pScrn->vtSema && infoRec->NeedToSync) {
-            (*infoRec->Sync) (pScrn);
-            infoRec->NeedToSync = FALSE;
-        }
-        (*pScreen->CopyWindow) (pWin, ptOldOrg, prgnSrc);
-        XAA_SCREEN_EPILOGUE(pScreen, CopyWindow, XAAOverCopyWindow);
-        return;
-    }
-
-    infoRec->ScratchGC.alu = GXcopy;
-    infoRec->ScratchGC.planemask = ~0;
-
-    RegionNull(&rgnDst);
-
-    dx = ptOldOrg.x - pWin->drawable.x;
-    dy = ptOldOrg.y - pWin->drawable.y;
-    RegionTranslate(prgnSrc, -dx, -dy);
-    RegionIntersect(&rgnDst, &pWin->borderClip, prgnSrc);
-
-    nbox = RegionNumRects(&rgnDst);
-    if (nbox && (pptSrc = (DDXPointPtr) malloc(nbox * sizeof(DDXPointRec)))) {
-
-        pbox = RegionRects(&rgnDst);
-        for (i = nbox, ppt = pptSrc; i--; ppt++, pbox++) {
-            ppt->x = pbox->x1 + dx;
-            ppt->y = pbox->y1 + dy;
-        }
-
-        SWITCH_DEPTH(8);
-        XAADoBitBlt((DrawablePtr) pRoot, (DrawablePtr) pRoot,
-                    &(infoRec->ScratchGC), &rgnDst, pptSrc);
-
-        if (pWin->drawable.bitsPerPixel != 8) {
-            SWITCH_DEPTH(pScrn->depth);
-            XAADoBitBlt((DrawablePtr) pRoot, (DrawablePtr) pRoot,
-                        &(infoRec->ScratchGC), &rgnDst, pptSrc);
-        }
-
-        free(pptSrc);
-    }
-
-    RegionUninit(&rgnDst);
-
-    if (pWin->drawable.depth == 8) {
-        RegionNull(&rgnDst);
-        miSegregateChildren(pWin, &rgnDst, pScrn->depth);
-        if (RegionNotEmpty(&rgnDst)) {
-            RegionIntersect(&rgnDst, &rgnDst, prgnSrc);
-            nbox = RegionNumRects(&rgnDst);
-            if (nbox &&
-                (pptSrc = (DDXPointPtr) malloc(nbox * sizeof(DDXPointRec)))) {
-
-                pbox = RegionRects(&rgnDst);
-                for (i = nbox, ppt = pptSrc; i--; ppt++, pbox++) {
-                    ppt->x = pbox->x1 + dx;
-                    ppt->y = pbox->y1 + dy;
-                }
-
-                SWITCH_DEPTH(pScrn->depth);
-                XAADoBitBlt((DrawablePtr) pRoot, (DrawablePtr) pRoot,
-                            &(infoRec->ScratchGC), &rgnDst, pptSrc);
-                free(pptSrc);
-            }
-        }
-        RegionUninit(&rgnDst);
-    }
-}
-
-void
-XAAOverWindowExposures(WindowPtr pWin, RegionPtr pReg, RegionPtr pOtherReg)
-{
-    ScreenPtr pScreen = pWin->drawable.pScreen;
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCREEN(pScreen);
-
-    if ((pWin->drawable.bitsPerPixel != 8) && infoRec->pScrn->vtSema) {
-        if (RegionNumRects(pReg) && infoRec->FillSolidRects) {
-            XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pScreen);
-
-            SWITCH_DEPTH(8);
-            (*infoRec->FillSolidRects) (infoRec->pScrn,
-                                        infoRec->pScrn->colorKey, GXcopy, ~0,
-                                        RegionNumRects(pReg),
-                                        RegionRects(pReg));
-            miWindowExposures(pWin, pReg, pOtherReg);
-            return;
-        }
-        else if (infoRec->NeedToSync) {
-            (*infoRec->Sync) (infoRec->pScrn);
-            infoRec->NeedToSync = FALSE;
-        }
-    }
-
-    XAA_SCREEN_PROLOGUE(pScreen, WindowExposures);
-    (*pScreen->WindowExposures) (pWin, pReg, pOtherReg);
-    XAA_SCREEN_EPILOGUE(pScreen, WindowExposures, XAAOverWindowExposures);
-}
-
-/*********************  Choosers *************************/
-
-static int
-XAAOverStippledFillChooser(GCPtr pGC)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-    int ret;
-
-    ret = (*pOverPriv->StippledFillChooser) (pGC);
-
-    if ((pGC->depth == 8) && ((ret == DO_COLOR_8x8) || (ret == DO_CACHE_BLT))) {
-        ret = 0;
-    }
-
-    return ret;
-}
-
-static int
-XAAOverOpaqueStippledFillChooser(GCPtr pGC)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-    int ret;
-
-    ret = (*pOverPriv->OpaqueStippledFillChooser) (pGC);
-
-    if ((pGC->depth == 8) && ((ret == DO_COLOR_8x8) || (ret == DO_CACHE_BLT))) {
-        ret = 0;
-    }
-
-    return ret;
-}
-
-static int
-XAAOverTiledFillChooser(GCPtr pGC)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-    int ret;
-
-    ret = (*pOverPriv->TiledFillChooser) (pGC);
-
-    if ((pGC->depth == 8) && ((ret == DO_COLOR_8x8) || (ret == DO_CACHE_BLT))) {
-        ret = 0;
-    }
-
-    return ret;
-}
-
-/**************************** GC Functions **************************/
-
-static RegionPtr
-XAAOverCopyArea(DrawablePtr pSrc,
-                DrawablePtr pDst,
-                GC * pGC,
-                int srcx, int srcy, int width, int height, int dstx, int dsty)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-
-    SWITCH_DEPTH(pGC->depth);
-
-    return (*pOverPriv->CopyArea) (pSrc, pDst,
-                                   pGC, srcx, srcy, width, height, dstx, dsty);
-}
-
-static RegionPtr
-XAAOverCopyPlane(DrawablePtr pSrc,
-                 DrawablePtr pDst,
-                 GCPtr pGC,
-                 int srcx, int srcy,
-                 int width, int height,
-                 int dstx, int dsty, unsigned long bitPlane)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-
-    SWITCH_DEPTH(pGC->depth);
-
-    return (*pOverPriv->CopyPlane) (pSrc, pDst,
-                                    pGC, srcx, srcy, width, height, dstx, dsty,
-                                    bitPlane);
-
-}
-
-static void
-XAAOverPushPixelsSolid(GCPtr pGC,
-                       PixmapPtr pBitMap,
-                       DrawablePtr pDraw, int dx, int dy, int xOrg, int yOrg)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-
-    SWITCH_DEPTH(pGC->depth);
-
-    (*pOverPriv->PushPixelsSolid) (pGC, pBitMap, pDraw, dx, dy, xOrg, yOrg);
-}
-
-static void
-XAAOverPolyFillRectSolid(DrawablePtr pDraw,
-                         GCPtr pGC, int nrectFill, xRectangle *prectInit)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-
-    SWITCH_DEPTH(pGC->depth);
-
-    (*pOverPriv->PolyFillRectSolid) (pDraw, pGC, nrectFill, prectInit);
-}
-
-static void
-XAAOverPolyFillRectStippled(DrawablePtr pDraw,
-                            GCPtr pGC, int nrectFill, xRectangle *prectInit)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-
-    SWITCH_DEPTH(pGC->depth);
-
-    (*pOverPriv->PolyFillRectStippled) (pDraw, pGC, nrectFill, prectInit);
-}
-
-static void
-XAAOverPolyFillRectOpaqueStippled(DrawablePtr pDraw,
-                                  GCPtr pGC,
-                                  int nrectFill, xRectangle *prectInit)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-
-    SWITCH_DEPTH(pGC->depth);
-
-    (*pOverPriv->PolyFillRectOpaqueStippled) (pDraw, pGC, nrectFill, prectInit);
-}
-
-static void
-XAAOverPolyFillRectTiled(DrawablePtr pDraw,
-                         GCPtr pGC, int nrectFill, xRectangle *prectInit)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-
-    SWITCH_DEPTH(pGC->depth);
-
-    (*pOverPriv->PolyFillRectTiled) (pDraw, pGC, nrectFill, prectInit);
-}
-
-static void
-XAAOverFillSpansSolid(DrawablePtr pDraw,
-                      GCPtr pGC,
-                      int nInit, DDXPointPtr ppt, int *pwidth, int fSorted)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-
-    SWITCH_DEPTH(pGC->depth);
-
-    (*pOverPriv->FillSpansSolid) (pDraw, pGC, nInit, ppt, pwidth, fSorted);
-}
-
-static void
-XAAOverFillSpansStippled(DrawablePtr pDraw,
-                         GCPtr pGC,
-                         int nInit, DDXPointPtr ppt, int *pwidth, int fSorted)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-
-    SWITCH_DEPTH(pGC->depth);
-
-    (*pOverPriv->FillSpansStippled) (pDraw, pGC, nInit, ppt, pwidth, fSorted);
-}
-
-static void
-XAAOverFillSpansOpaqueStippled(DrawablePtr pDraw,
-                               GCPtr pGC,
-                               int nInit,
-                               DDXPointPtr ppt, int *pwidth, int fSorted)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-
-    SWITCH_DEPTH(pGC->depth);
-
-    (*pOverPriv->FillSpansOpaqueStippled) (pDraw, pGC, nInit, ppt, pwidth,
-                                           fSorted);
-}
-
-static void
-XAAOverFillSpansTiled(DrawablePtr pDraw,
-                      GCPtr pGC,
-                      int nInit, DDXPointPtr ppt, int *pwidth, int fSorted)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-
-    SWITCH_DEPTH(pGC->depth);
-
-    (*pOverPriv->FillSpansTiled) (pDraw, pGC, nInit, ppt, pwidth, fSorted);
-}
-
-static int
-XAAOverPolyText8TE(DrawablePtr pDraw,
-                   GCPtr pGC, int x, int y, int count, char *chars)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-
-    SWITCH_DEPTH(pGC->depth);
-
-    return (*pOverPriv->PolyText8TE) (pDraw, pGC, x, y, count, chars);
-}
-
-static int
-XAAOverPolyText16TE(DrawablePtr pDraw,
-                    GCPtr pGC, int x, int y, int count, unsigned short *chars)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-
-    SWITCH_DEPTH(pGC->depth);
-
-    return (*pOverPriv->PolyText16TE) (pDraw, pGC, x, y, count, chars);
-}
-
-static void
-XAAOverImageText8TE(DrawablePtr pDraw,
-                    GCPtr pGC, int x, int y, int count, char *chars)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-
-    SWITCH_DEPTH(pGC->depth);
-
-    (*pOverPriv->ImageText8TE) (pDraw, pGC, x, y, count, chars);
-}
-
-static void
-XAAOverImageText16TE(DrawablePtr pDraw,
-                     GCPtr pGC, int x, int y, int count, unsigned short *chars)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-
-    SWITCH_DEPTH(pGC->depth);
-
-    (*pOverPriv->ImageText16TE) (pDraw, pGC, x, y, count, chars);
-}
-
-static void
-XAAOverImageGlyphBltTE(DrawablePtr pDraw,
-                       GCPtr pGC,
-                       int xInit, int yInit,
-                       unsigned int nglyph,
-                       CharInfoPtr * ppci, pointer pglyphBase)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-
-    SWITCH_DEPTH(pGC->depth);
-
-    (*pOverPriv->ImageGlyphBltTE) (pDraw, pGC, xInit, yInit, nglyph, ppci,
-                                   pglyphBase);
-}
-
-static void
-XAAOverPolyGlyphBltTE(DrawablePtr pDraw,
-                      GCPtr pGC,
-                      int xInit, int yInit,
-                      unsigned int nglyph,
-                      CharInfoPtr * ppci, pointer pglyphBase)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-
-    SWITCH_DEPTH(pGC->depth);
-
-    (*pOverPriv->PolyGlyphBltTE) (pDraw, pGC, xInit, yInit, nglyph, ppci,
-                                  pglyphBase);
-}
-
-static int
-XAAOverPolyText8NonTE(DrawablePtr pDraw,
-                      GCPtr pGC, int x, int y, int count, char *chars)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-
-    SWITCH_DEPTH(pGC->depth);
-
-    return (*pOverPriv->PolyText8NonTE) (pDraw, pGC, x, y, count, chars);
-}
-
-static int
-XAAOverPolyText16NonTE(DrawablePtr pDraw,
-                       GCPtr pGC,
-                       int x, int y, int count, unsigned short *chars)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-
-    SWITCH_DEPTH(pGC->depth);
-
-    return (*pOverPriv->PolyText16NonTE) (pDraw, pGC, x, y, count, chars);
-}
-
-static void
-XAAOverImageText8NonTE(DrawablePtr pDraw,
-                       GCPtr pGC, int x, int y, int count, char *chars)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-
-    SWITCH_DEPTH(pGC->depth);
-
-    (*pOverPriv->ImageText8NonTE) (pDraw, pGC, x, y, count, chars);
-}
-
-static void
-XAAOverImageText16NonTE(DrawablePtr pDraw,
-                        GCPtr pGC,
-                        int x, int y, int count, unsigned short *chars)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-
-    SWITCH_DEPTH(pGC->depth);
-
-    (*pOverPriv->ImageText16NonTE) (pDraw, pGC, x, y, count, chars);
-}
-
-static void
-XAAOverImageGlyphBltNonTE(DrawablePtr pDraw,
-                          GCPtr pGC,
-                          int xInit, int yInit,
-                          unsigned int nglyph,
-                          CharInfoPtr * ppci, pointer pglyphBase)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-
-    SWITCH_DEPTH(pGC->depth);
-
-    (*pOverPriv->ImageGlyphBltNonTE) (pDraw, pGC, xInit, yInit, nglyph, ppci,
-                                      pglyphBase);
-}
-
-static void
-XAAOverPolyGlyphBltNonTE(DrawablePtr pDraw,
-                         GCPtr pGC,
-                         int xInit, int yInit,
-                         unsigned int nglyph,
-                         CharInfoPtr * ppci, pointer pglyphBase)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-
-    SWITCH_DEPTH(pGC->depth);
-
-    (*pOverPriv->PolyGlyphBltNonTE) (pDraw, pGC, xInit, yInit, nglyph, ppci,
-                                     pglyphBase);
-}
-
-static void
-XAAOverPolyRectangleThinSolid(DrawablePtr pDraw,
-                              GCPtr pGC, int nRectsInit, xRectangle *pRectsInit)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-
-    SWITCH_DEPTH(pGC->depth);
-
-    (*pOverPriv->PolyRectangleThinSolid) (pDraw, pGC, nRectsInit, pRectsInit);
-}
-
-static void
-XAAOverPolylinesWideSolid(DrawablePtr pDraw,
-                          GCPtr pGC, int mode, int npt, DDXPointPtr pPts)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-
-    SWITCH_DEPTH(pGC->depth);
-
-    (*pOverPriv->PolylinesWideSolid) (pDraw, pGC, mode, npt, pPts);
-}
-
-static void
-XAAOverPolylinesThinSolid(DrawablePtr pDraw,
-                          GCPtr pGC, int mode, int npt, DDXPointPtr pPts)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-
-    SWITCH_DEPTH(pGC->depth);
-
-    (*pOverPriv->PolylinesThinSolid) (pDraw, pGC, mode, npt, pPts);
-}
-
-static void
-XAAOverPolySegmentThinSolid(DrawablePtr pDraw,
-                            GCPtr pGC, int nseg, xSegment * pSeg)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-
-    SWITCH_DEPTH(pGC->depth);
-
-    (*pOverPriv->PolySegmentThinSolid) (pDraw, pGC, nseg, pSeg);
-}
-
-static void
-XAAOverPolylinesThinDashed(DrawablePtr pDraw,
-                           GCPtr pGC, int mode, int npt, DDXPointPtr pPts)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-
-    SWITCH_DEPTH(pGC->depth);
-
-    (*pOverPriv->PolylinesThinDashed) (pDraw, pGC, mode, npt, pPts);
-}
-
-static void
-XAAOverPolySegmentThinDashed(DrawablePtr pDraw,
-                             GCPtr pGC, int nseg, xSegment * pSeg)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-
-    SWITCH_DEPTH(pGC->depth);
-
-    (*pOverPriv->PolySegmentThinDashed) (pDraw, pGC, nseg, pSeg);
-}
-
-static void
-XAAOverFillPolygonSolid(DrawablePtr pDraw,
-                        GCPtr pGC,
-                        int shape, int mode, int count, DDXPointPtr ptsIn)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-
-    SWITCH_DEPTH(pGC->depth);
-
-    (*pOverPriv->FillPolygonSolid) (pDraw, pGC, shape, mode, count, ptsIn);
-}
-
-static void
-XAAOverFillPolygonStippled(DrawablePtr pDraw,
-                           GCPtr pGC,
-                           int shape, int mode, int count, DDXPointPtr ptsIn)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-
-    SWITCH_DEPTH(pGC->depth);
-
-    (*pOverPriv->FillPolygonStippled) (pDraw, pGC, shape, mode, count, ptsIn);
-}
-
-static void
-XAAOverFillPolygonOpaqueStippled(DrawablePtr pDraw,
-                                 GCPtr pGC,
-                                 int shape,
-                                 int mode, int count, DDXPointPtr ptsIn)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-
-    SWITCH_DEPTH(pGC->depth);
-
-    (*pOverPriv->FillPolygonOpaqueStippled) (pDraw, pGC, shape, mode, count,
-                                             ptsIn);
-}
-
-static void
-XAAOverFillPolygonTiled(DrawablePtr pDraw,
-                        GCPtr pGC,
-                        int shape, int mode, int count, DDXPointPtr ptsIn)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-
-    SWITCH_DEPTH(pGC->depth);
-
-    (*pOverPriv->FillPolygonTiled) (pDraw, pGC, shape, mode, count, ptsIn);
-}
-
-static void
-XAAOverPolyFillArcSolid(DrawablePtr pDraw, GCPtr pGC, int narcs, xArc * parcs)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-
-    SWITCH_DEPTH(pGC->depth);
-
-    (*pOverPriv->PolyFillArcSolid) (pDraw, pGC, narcs, parcs);
-}
-
-static void
-XAAOverPutImage(DrawablePtr pDraw,
-                GCPtr pGC,
-                int depth,
-                int x,
-                int y, int w, int h, int leftPad, int format, char *pImage)
-{
-    XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
-
-    SWITCH_DEPTH(pGC->depth);
-
-    (*pOverPriv->PutImage) (pDraw, pGC, depth, x, y, w, h,
-                            leftPad, format, pImage);
-}
diff --git a/hw/xfree86/xaa/xaaPCache.c b/hw/xfree86/xaa/xaaPCache.c
deleted file mode 100644
index 53460b3..0000000
--- a/hw/xfree86/xaa/xaaPCache.c
+++ /dev/null
@@ -1,2527 +0,0 @@
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include <string.h>
-
-#include "misc.h"
-#include "xf86.h"
-#include "xf86_OSproc.h"
-
-#include <X11/X.h>
-#include "scrnintstr.h"
-#include "gc.h"
-#include "mi.h"
-#include "pixmapstr.h"
-#include "windowstr.h"
-#include "regionstr.h"
-#include "servermd.h"
-#include "xf86str.h"
-#include "xaa.h"
-#include "xaacexp.h"
-#include "xaalocal.h"
-#include "xaawrap.h"
-
-#define MAX_COLOR	32
-#define MAX_MONO	32
-#define MAX_8		32
-#define MAX_128		32
-#define MAX_256		32
-#define MAX_512		16
-
-static int CacheInitIndex = -1;
-
-#define CACHEINIT(p) ((p)->privates[CacheInitIndex].val)
-
-typedef struct _CacheLink {
-    int x;
-    int y;
-    int w;
-    int h;
-    struct _CacheLink *next;
-} CacheLink, *CacheLinkPtr;
-
-static void
-TransferList(CacheLinkPtr list, XAACacheInfoPtr array, int num)
-{
-    while (num--) {
-        array->x = list->x;
-        array->y = list->y;
-        array->w = list->w;
-        array->h = list->h;
-        array->serialNumber = 0;
-        array->fg = array->bg = -1;
-        list = list->next;
-        array++;
-    }
-}
-
-static CacheLinkPtr
-Enlist(CacheLinkPtr link, int x, int y, int w, int h)
-{
-    CacheLinkPtr newLink;
-
-    newLink = malloc(sizeof(CacheLink));
-    newLink->next = link;
-    newLink->x = x;
-    newLink->y = y;
-    newLink->w = w;
-    newLink->h = h;
-    return newLink;
-}
-
-static CacheLinkPtr
-Delist(CacheLinkPtr link)
-{
-    CacheLinkPtr ret = NULL;
-
-    if (link) {
-        ret = link->next;
-        free(link);
-    }
-    return ret;
-}
-
-static void
-FreeList(CacheLinkPtr link)
-{
-    CacheLinkPtr tmp;
-
-    while (link) {
-        tmp = link;
-        link = link->next;
-        free(tmp);
-    }
-}
-
-static CacheLinkPtr
-QuadLinks(CacheLinkPtr big, CacheLinkPtr little)
-{
-    /* CAUTION: This doesn't free big */
-    int w1, w2, h1, h2;
-
-    while (big) {
-        w1 = big->w >> 1;
-        w2 = big->w - w1;
-        h1 = big->h >> 1;
-        h2 = big->h - h1;
-
-        little = Enlist(little, big->x, big->y, w1, h1);
-        little = Enlist(little, big->x + w1, big->y, w2, h1);
-        little = Enlist(little, big->x, big->y + h1, w1, h2);
-        little = Enlist(little, big->x + w1, big->y + h1, w2, h2);
-
-        big = big->next;
-    }
-    return little;
-}
-
-static void
-SubdivideList(CacheLinkPtr * large, CacheLinkPtr * small)
-{
-    CacheLinkPtr big = *large;
-    CacheLinkPtr little = *small;
-    int size = big->w >> 1;
-
-    little = Enlist(little, big->x, big->y, size, size);
-    little = Enlist(little, big->x + size, big->y, size, size);
-    little = Enlist(little, big->x, big->y + size, size, size);
-    little = Enlist(little, big->x + size, big->y + size, size, size);
-    *small = little;
-    big = Delist(big);
-    *large = big;
-}
-
-static void
-FreePixmapCachePrivate(XAAPixmapCachePrivatePtr pPriv)
-{
-    if (!pPriv)
-        return;
-
-    free(pPriv->Info512);
-    free(pPriv->Info256);
-    free(pPriv->Info128);
-    free(pPriv->InfoColor);
-    free(pPriv->InfoMono);
-    free(pPriv->InfoPartial);
-
-    free(pPriv);
-}
-
-void
-XAAClosePixmapCache(ScreenPtr pScreen)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCREEN(pScreen);
-
-    if (infoRec->PixmapCachePrivate)
-        FreePixmapCachePrivate((XAAPixmapCachePrivatePtr) infoRec->
-                               PixmapCachePrivate);
-
-    infoRec->PixmapCachePrivate = NULL;
-}
-
-static CacheLinkPtr
-ThinOutPartials(CacheLinkPtr ListPartial, int *num, int *maxw, int *maxh)
-{
-/* This guy's job is to get at least 4 big slots out of a list of fragments */
-
-    CacheLinkPtr List64, List32, List16, List8, pCur, next, ListKeepers;
-    int Num64, Num32, Num16, Num8, NumKeepers;
-    int w, h;
-
-    List64 = List32 = List16 = List8 = ListKeepers = NULL;
-    Num64 = Num32 = Num16 = Num8 = NumKeepers = 0;
-    w = h = 0;
-
-    /* We sort partials by how large a square tile they can cache.
-       If a partial can't store a 64x64, 32x32, 16x16 or 8x8 tile,
-       we free it.  */
-
-    pCur = ListPartial;
-    while (pCur) {
-        next = pCur->next;
-        if ((pCur->w >= 64) && (pCur->h >= 64)) {
-            pCur->next = List64;
-            List64 = pCur;
-            Num64++;
-        }
-        else if ((pCur->w >= 32) && (pCur->h >= 32)) {
-            pCur->next = List32;
-            List32 = pCur;
-            Num32++;
-        }
-        else if ((pCur->w >= 16) && (pCur->h >= 16)) {
-            pCur->next = List16;
-            List16 = pCur;
-            Num16++;
-        }
-        else if ((pCur->w >= 8) && (pCur->h >= 8)) {
-            pCur->next = List8;
-            List8 = pCur;
-            Num8++;
-        }
-        else {
-            free(pCur);
-        }
-
-        pCur = next;
-    }
-
-    /* We save all the tiles from the largest bin that we can get
-       at least 4 of.  If there are too few of a bigger slot, we
-       cut it in fourths to make smaller slots. */
-
-    if (Num64 >= 4) {
-        ListKeepers = List64;
-        List64 = NULL;
-        NumKeepers = Num64;
-        goto GOT_EM;
-    }
-    else if (Num64) {
-        List32 = QuadLinks(List64, List32);
-        Num32 += Num64 * 4;
-        Num64 = 0;
-    }
-
-    if (Num32 >= 4) {
-        ListKeepers = List32;
-        List32 = NULL;
-        NumKeepers = Num32;
-        goto GOT_EM;
-    }
-    else if (Num32) {
-        List16 = QuadLinks(List32, List16);
-        Num16 += Num32 * 4;
-        Num32 = 0;
-    }
-
-    if (Num16 >= 4) {
-        ListKeepers = List16;
-        List16 = NULL;
-        NumKeepers = Num16;
-        goto GOT_EM;
-    }
-    else if (Num16) {
-        List8 = QuadLinks(List16, List8);
-        Num8 += Num16 * 4;
-        Num16 = 0;
-    }
-
-    if (Num8 >= 4) {
-        ListKeepers = List8;
-        List8 = NULL;
-        NumKeepers = Num8;
-        goto GOT_EM;
-    }
-
- GOT_EM:
-
-    /* Free the ones we aren't using */
-
-    if (List64)
-        FreeList(List64);
-    if (List32)
-        FreeList(List32);
-    if (List16)
-        FreeList(List16);
-    if (List8)
-        FreeList(List8);
-
-    /* Enlarge the slots if we can */
-
-    if (ListKeepers) {
-        CacheLinkPtr pLink = ListKeepers;
-
-        w = h = 128;
-
-        while (pLink) {
-            if (pLink->w < w)
-                w = pLink->w;
-            if (pLink->h < h)
-                h = pLink->h;
-            pLink = pLink->next;
-        }
-    }
-
-    *maxw = w;
-    *maxh = h;
-    *num = NumKeepers;
-    return ListKeepers;
-}
-
-static void
-ConvertColorToMono(CacheLinkPtr * ColorList,
-                   int ColorW, int ColorH,
-                   CacheLinkPtr * MonoList, int MonoW, int MonoH)
-{
-    int x, y, w;
-
-    x = (*ColorList)->x;
-    y = (*ColorList)->y;
-    *ColorList = Delist(*ColorList);
-
-    while (ColorH) {
-        ColorH -= MonoH;
-        for (w = 0; w <= (ColorW - MonoW); w += MonoW)
-            *MonoList = Enlist(*MonoList, x + w, y + ColorH, MonoW, MonoH);
-    }
-}
-
-static void
-ConvertAllPartialsTo8x8(int *NumMono, int *NumColor,
-                        CacheLinkPtr ListPartial,
-                        CacheLinkPtr * ListMono,
-                        CacheLinkPtr * ListColor, XAAInfoRecPtr infoRec)
-{
-/* This guy extracts as many 8x8 slots as it can out of fragments */
-
-    int ColorH = infoRec->CacheHeightColor8x8Pattern;
-    int ColorW = infoRec->CacheWidthColor8x8Pattern;
-    int MonoH = infoRec->CacheHeightMono8x8Pattern;
-    int MonoW = infoRec->CacheWidthMono8x8Pattern;
-    int x, y, w, Height, Width;
-    Bool DoColor = (infoRec->PixmapCacheFlags & CACHE_COLOR_8x8);
-    Bool DoMono = (infoRec->PixmapCacheFlags & CACHE_MONO_8x8);
-    CacheLinkPtr pLink = ListPartial;
-    CacheLinkPtr MonoList = *ListMono, ColorList = *ListColor;
-
-    if (DoColor && DoMono) {
-        /* we assume color patterns take more space than color ones */
-        if (MonoH > ColorH)
-            ColorH = MonoH;
-        if (MonoW > ColorW)
-            ColorW = MonoW;
-    }
-
-    /* Break up the area into as many Color and Mono slots as we can */
-
-    while (pLink) {
-        Height = pLink->h;
-        Width = pLink->w;
-        x = pLink->x;
-        y = pLink->y;
-
-        if (DoColor) {
-            while (Height >= ColorH) {
-                Height -= ColorH;
-                for (w = 0; w <= (Width - ColorW); w += ColorW) {
-                    ColorList =
-                        Enlist(ColorList, x + w, y + Height, ColorW, ColorH);
-                    (*NumColor)++;
-                }
-            }
-        }
-
-        if (DoMono && (Height >= MonoH)) {
-            while (Height >= MonoH) {
-                Height -= MonoH;
-                for (w = 0; w <= (Width - MonoW); w += MonoW) {
-                    MonoList =
-                        Enlist(MonoList, x + w, y + Height, MonoW, MonoH);
-                    (*NumMono)++;
-                }
-            }
-        }
-
-        pLink = pLink->next;
-    }
-
-    *ListMono = MonoList;
-    *ListColor = ColorList;
-    FreeList(ListPartial);
-}
-
-static CacheLinkPtr
-ExtractOneThatFits(CacheLinkPtr * initList, int w, int h)
-{
-    CacheLinkPtr list = *initList;
-    CacheLinkPtr prev = NULL;
-
-    while (list) {
-        if ((list->w >= w) && (list->h >= h))
-            break;
-        prev = list;
-        list = list->next;
-    }
-
-    if (list) {
-        if (prev)
-            prev->next = list->next;
-        else
-            *initList = list->next;
-
-        list->next = NULL;
-    }
-
-    return list;
-}
-
-static CacheLinkPtr
-ConvertSomePartialsTo8x8(int *NumMono, int *NumColor, int *NumPartial,
-                         CacheLinkPtr ListPartial,
-                         CacheLinkPtr * ListMono,
-                         CacheLinkPtr * ListColor,
-                         int *maxw, int *maxh, XAAInfoRecPtr infoRec)
-{
-/* This guy tries to get 4 of each type of 8x8 slot requested out of
-   a list of fragments all while trying to retain some big fragments
-   for the cache blits */
-
-    int ColorH = infoRec->CacheHeightColor8x8Pattern;
-    int ColorW = infoRec->CacheWidthColor8x8Pattern;
-    int MonoH = infoRec->CacheHeightMono8x8Pattern;
-    int MonoW = infoRec->CacheWidthMono8x8Pattern;
-    Bool DoColor = (infoRec->PixmapCacheFlags & CACHE_COLOR_8x8);
-    Bool DoMono = (infoRec->PixmapCacheFlags & CACHE_MONO_8x8);
-    CacheLinkPtr List64, List32, List16, List8, pCur, next, ListKeepers;
-    CacheLinkPtr MonoList = *ListMono, ColorList = *ListColor;
-    int Num64, Num32, Num16, Num8, NumKeepers;
-    int w, h, Width, Height;
-    int MonosPerColor = 1;
-
-    if (DoColor && DoMono) {
-        /* we assume color patterns take more space than color ones */
-        if (MonoH > ColorH)
-            ColorH = MonoH;
-        if (MonoW > ColorW)
-            ColorW = MonoW;
-        MonosPerColor = (ColorH / MonoH) * (ColorW / MonoW);
-    }
-
-    List64 = List32 = List16 = List8 = ListKeepers = MonoList = ColorList =
-        NULL;
-    Num64 = Num32 = Num16 = Num8 = NumKeepers = 0;
-    Width = Height = 0;
-
-    /* We sort partials by how large a square tile they can cache.
-       We make 8x8 patterns from the leftovers if we can. */
-
-    pCur = ListPartial;
-    while (pCur) {
-        next = pCur->next;
-        if ((pCur->w >= 64) && (pCur->h >= 64)) {
-            pCur->next = List64;
-            List64 = pCur;
-            Num64++;
-        }
-        else if ((pCur->w >= 32) && (pCur->h >= 32)) {
-            pCur->next = List32;
-            List32 = pCur;
-            Num32++;
-        }
-        else if ((pCur->w >= 16) && (pCur->h >= 16)) {
-            pCur->next = List16;
-            List16 = pCur;
-            Num16++;
-        }
-        else if ((pCur->w >= 8) && (pCur->h >= 8)) {
-            pCur->next = List8;
-            List8 = pCur;
-            Num8++;
-        }
-        else {
-            h = pCur->h;
-            if (DoColor && (pCur->w >= ColorW) && (h >= ColorH)) {
-                while (h >= ColorH) {
-                    h -= ColorH;
-                    for (w = 0; w <= (pCur->w - ColorW); w += ColorW) {
-                        ColorList = Enlist(ColorList,
-                                           pCur->x + w, pCur->y + h, ColorW,
-                                           ColorH);
-                        (*NumColor)++;
-                    }
-                }
-            }
-            if (DoMono && (pCur->w >= MonoW) && (h >= MonoH)) {
-                while (h >= MonoH) {
-                    h -= MonoH;
-                    for (w = 0; w <= (pCur->w - MonoW); w += MonoW) {
-                        MonoList = Enlist(MonoList,
-                                          pCur->x + w, pCur->y + h, MonoW,
-                                          MonoH);
-                        (*NumMono)++;
-                    }
-                }
-            }
-            free(pCur);
-        }
-
-        pCur = next;
-    }
-
-    /* Try to extract at least 4 of each type of 8x8 slot that we need */
-
-    if (DoColor) {
-        CacheLinkPtr theOne;
-
-        while (*NumColor < 4) {
-            theOne = NULL;
-            if (Num8) {
-                if ((theOne = ExtractOneThatFits(&List8, ColorW, ColorH)))
-                    Num8--;
-            }
-            if (Num16 && !theOne) {
-                if ((theOne = ExtractOneThatFits(&List16, ColorW, ColorH)))
-                    Num16--;
-            }
-            if (Num32 && !theOne) {
-                if ((theOne = ExtractOneThatFits(&List32, ColorW, ColorH)))
-                    Num32--;
-            }
-            if (Num64 && !theOne) {
-                if ((theOne = ExtractOneThatFits(&List64, ColorW, ColorH)))
-                    Num64--;
-            }
-
-            if (!theOne)
-                break;
-
-            ConvertAllPartialsTo8x8(NumMono, NumColor, theOne,
-                                    &MonoList, &ColorList, infoRec);
-
-            if (DoMono) {
-                while (*NumColor && (*NumMono < 4)) {
-                    ConvertColorToMono(&ColorList, ColorW, ColorH,
-                                       &MonoList, MonoW, MonoH);
-                    (*NumColor)--;
-                    *NumMono += MonosPerColor;
-                }
-            }
-        }
-    }
-
-    if (DoMono) {
-        CacheLinkPtr theOne;
-
-        while (*NumMono < 4) {
-            theOne = NULL;
-            if (Num8) {
-                if ((theOne = ExtractOneThatFits(&List8, MonoW, MonoH)))
-                    Num8--;
-            }
-            if (Num16 && !theOne) {
-                if ((theOne = ExtractOneThatFits(&List16, MonoW, MonoH)))
-                    Num16--;
-            }
-            if (Num32 && !theOne) {
-                if ((theOne = ExtractOneThatFits(&List32, MonoW, MonoH)))
-                    Num32--;
-            }
-            if (Num64 && !theOne) {
-                if ((theOne = ExtractOneThatFits(&List64, MonoW, MonoH)))
-                    Num64--;
-            }
-
-            if (!theOne)
-                break;
-
-            ConvertAllPartialsTo8x8(NumMono, NumColor, theOne,
-                                    &MonoList, &ColorList, infoRec);
-        }
-    }
-
-    /* We save all the tiles from the largest bin that we can get
-       at least 4 of.  If there are too few of a bigger slot, we
-       cut it in fourths to make smaller slots. */
-
-    if (Num64 >= 4) {
-        ListKeepers = List64;
-        List64 = NULL;
-        NumKeepers = Num64;
-        goto GOT_EM;
-    }
-    else if (Num64) {
-        List32 = QuadLinks(List64, List32);
-        Num32 += Num64 * 4;
-        Num64 = 0;
-    }
-
-    if (Num32 >= 4) {
-        ListKeepers = List32;
-        List32 = NULL;
-        NumKeepers = Num32;
-        goto GOT_EM;
-    }
-    else if (Num32) {
-        List16 = QuadLinks(List32, List16);
-        Num16 += Num32 * 4;
-        Num32 = 0;
-    }
-
-    if (Num16 >= 4) {
-        ListKeepers = List16;
-        List16 = NULL;
-        NumKeepers = Num16;
-        goto GOT_EM;
-    }
-    else if (Num16) {
-        List8 = QuadLinks(List16, List8);
-        Num8 += Num16 * 4;
-        Num16 = 0;
-    }
-
-    if (Num8 >= 4) {
-        ListKeepers = List8;
-        List8 = NULL;
-        NumKeepers = Num8;
-        goto GOT_EM;
-    }
-
- GOT_EM:
-
-    /* Free the ones we aren't using */
-
-    if (List64)
-        ConvertAllPartialsTo8x8(NumMono, NumColor, List64,
-                                &MonoList, &ColorList, infoRec);
-    if (List32)
-        ConvertAllPartialsTo8x8(NumMono, NumColor, List32,
-                                &MonoList, &ColorList, infoRec);
-    if (List16)
-        ConvertAllPartialsTo8x8(NumMono, NumColor, List16,
-                                &MonoList, &ColorList, infoRec);
-    if (List8)
-        ConvertAllPartialsTo8x8(NumMono, NumColor, List8,
-                                &MonoList, &ColorList, infoRec);
-
-    /* Enlarge the slots if we can */
-
-    if (ListKeepers) {
-        CacheLinkPtr pLink = ListKeepers;
-
-        Width = Height = 128;
-
-        while (pLink) {
-            if (pLink->w < Width)
-                Width = pLink->w;
-            if (pLink->h < Height)
-                Height = pLink->h;
-            pLink = pLink->next;
-        }
-    }
-
-    *ListMono = MonoList;
-    *ListColor = ColorList;
-    *maxw = Width;
-    *maxh = Height;
-    *NumPartial = NumKeepers;
-    return ListKeepers;
-}
-
-void
-XAAInitPixmapCache(ScreenPtr pScreen, RegionPtr areas, pointer data)
-{
-    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
-    XAAInfoRecPtr infoRec = (XAAInfoRecPtr) data;
-    XAAPixmapCachePrivatePtr pCachePriv;
-    BoxPtr pBox = RegionRects(areas);
-    int nBox = RegionNumRects(areas);
-    int Num512, Num256, Num128, NumPartial, NumColor, NumMono;
-    int Target512, Target256;
-    CacheLinkPtr List512, List256, List128, ListPartial, ListColor, ListMono;
-    int x, y, w, h, ntotal, granularity, width, height, i;
-    int MaxPartialWidth, MaxPartialHeight;
-
-    infoRec->MaxCacheableTileWidth = 0;
-    infoRec->MaxCacheableTileHeight = 0;
-    infoRec->MaxCacheableStippleHeight = 0;
-    infoRec->MaxCacheableStippleWidth = 0;
-    infoRec->UsingPixmapCache = FALSE;
-
-    if (!nBox || !pBox || !(infoRec->Flags & PIXMAP_CACHE))
-        return;
-
-    /* Allocate a persistent per-screen init flag to control messages */
-    if (CacheInitIndex < 0)
-        CacheInitIndex = xf86AllocateScrnInfoPrivateIndex();
-
-    /* free the old private data if it exists */
-    if (infoRec->PixmapCachePrivate) {
-        FreePixmapCachePrivate((XAAPixmapCachePrivatePtr) infoRec->
-                               PixmapCachePrivate);
-        infoRec->PixmapCachePrivate = NULL;
-    }
-
-    Num512 = Num256 = Num128 = NumPartial = NumMono = NumColor = 0;
-    List512 = List256 = List128 = ListPartial = ListMono = ListColor = NULL;
-    granularity = infoRec->CachePixelGranularity;
-    if (granularity <= 1)
-        granularity = 0;
-
-    /* go through the boxes and break it into as many pieces as we can fit */
-
-    while (nBox--) {
-        x = pBox->x1;
-        if (granularity) {
-            int tmp = x % granularity;
-
-            if (tmp)
-                x += (granularity - tmp);
-        }
-        width = pBox->x2 - x;
-        if (width <= 0) {
-            pBox++;
-            continue;
-        }
-
-        y = pBox->y1;
-        height = pBox->y2 - y;
-
-        for (h = 0; h <= (height - 512); h += 512) {
-            for (w = 0; w <= (width - 512); w += 512) {
-                List512 = Enlist(List512, x + w, y + h, 512, 512);
-                Num512++;
-            }
-            for (; w <= (width - 256); w += 256) {
-                List256 = Enlist(List256, x + w, y + h, 256, 256);
-                List256 = Enlist(List256, x + w, y + h + 256, 256, 256);
-                Num256 += 2;
-            }
-            for (; w <= (width - 128); w += 128) {
-                List128 = Enlist(List128, x + w, y + h, 128, 128);
-                List128 = Enlist(List128, x + w, y + h + 128, 128, 128);
-                List128 = Enlist(List128, x + w, y + h + 256, 128, 128);
-                List128 = Enlist(List128, x + w, y + h + 384, 128, 128);
-                Num128 += 4;
-            }
-            if (w < width) {
-                int d = width - w;
-
-                ListPartial = Enlist(ListPartial, x + w, y + h, d, 128);
-                ListPartial = Enlist(ListPartial, x + w, y + h + 128, d, 128);
-                ListPartial = Enlist(ListPartial, x + w, y + h + 256, d, 128);
-                ListPartial = Enlist(ListPartial, x + w, y + h + 384, d, 128);
-                NumPartial += 4;
-            }
-        }
-        for (; h <= (height - 256); h += 256) {
-            for (w = 0; w <= (width - 256); w += 256) {
-                List256 = Enlist(List256, x + w, y + h, 256, 256);
-                Num256++;
-            }
-            for (; w <= (width - 128); w += 128) {
-                List128 = Enlist(List128, x + w, y + h, 128, 128);
-                List128 = Enlist(List128, x + w, y + h + 128, 128, 128);
-                Num128 += 2;
-            }
-            if (w < width) {
-                int d = width - w;
-
-                ListPartial = Enlist(ListPartial, x + w, y + h, d, 128);
-                ListPartial = Enlist(ListPartial, x + w, y + h + 128, d, 128);
-                NumPartial += 2;
-            }
-        }
-        for (; h <= (height - 128); h += 128) {
-            for (w = 0; w <= (width - 128); w += 128) {
-                List128 = Enlist(List128, x + w, y + h, 128, 128);
-                Num128++;
-            }
-            if (w < width) {
-                ListPartial = Enlist(ListPartial, x + w, y + h, width - w, 128);
-                NumPartial++;
-            }
-        }
-        if (h < height) {
-            int d = height - h;
-
-            for (w = 0; w <= (width - 128); w += 128) {
-                ListPartial = Enlist(ListPartial, x + w, y + h, 128, d);
-                NumPartial++;
-            }
-            if (w < width) {
-                ListPartial = Enlist(ListPartial, x + w, y + h, width - w, d);
-                NumPartial++;
-            }
-        }
-        pBox++;
-    }
-
-/* 
-   by this point we've carved the space into as many 512x512, 256x256
-	and 128x128 blocks as we could fit.  We will then break larger
-	blocks into smaller ones if we need to.  The rules are as follows:
-
-     512x512 -
-	1) Don't take up more than half the memory.
-	2) Don't bother if you can't get at least four.
-	3) Don't make more than MAX_512.
-	4) Don't have any of there are no 256x256s.
-
-     256x256 -
-	1) Don't take up more than a quarter of the memory enless there
-		aren't any 512x512s.  Then we can take up to half.
-	2) Don't bother if you can't get at least four.
-	3) Don't make more than MAX_256.
-
-     128x128 -
-	1) Don't make more than MAX_128.
-
-     We don't bother with the partial blocks unless we can use them
-     for 8x8 pattern fills or we are short on larger blocks.
-
-*/
-
-    ntotal = Num128 + (Num256 << 2) + (Num512 << 4);
-
-    Target512 = ntotal >> 5;
-    if (Target512 < 4)
-        Target512 = 0;
-    if (!Target512)
-        Target256 = ntotal >> 3;
-    else
-        Target256 = ntotal >> 4;
-    if (Target256 < 4)
-        Target256 = 0;
-
-    if (Num512 && Num256 < 4) {
-        while (Num512 && Num256 < Target256) {
-            SubdivideList(&List512, &List256);
-            Num256 += 4;
-            Num512--;
-        }
-    }
-
-    if (!Num512) {              /* no room */
-    }
-    else if ((Num512 < 4) || (!Target512)) {
-        while (Num512) {
-            SubdivideList(&List512, &List256);
-            Num256 += 4;
-            Num512--;
-        }
-    }
-    else if ((Num512 > MAX_512) || (Num512 > Target512)) {
-        while (Num512 > MAX_512) {
-            SubdivideList(&List512, &List256);
-            Num256 += 4;
-            Num512--;
-        }
-        while (Num512 > Target512) {
-            if (Num256 < MAX_256) {
-                SubdivideList(&List512, &List256);
-                Num256 += 4;
-                Num512--;
-            }
-            else
-                break;
-        }
-    }
-
-    if (!Num256) {              /* no room */
-    }
-    else if ((Num256 < 4) || (!Target256)) {
-        while (Num256) {
-            SubdivideList(&List256, &List128);
-            Num128 += 4;
-            Num256--;
-        }
-    }
-    else if ((Num256 > MAX_256) || (Num256 > Target256)) {
-        while (Num256 > MAX_256) {
-            SubdivideList(&List256, &List128);
-            Num128 += 4;
-            Num256--;
-        }
-        while (Num256 > Target256) {
-            if (Num128 < MAX_128) {
-                SubdivideList(&List256, &List128);
-                Num128 += 4;
-                Num256--;
-            }
-            else
-                break;
-        }
-    }
-
-    if (Num128 && ((Num128 < 4) || (Num128 > MAX_128))) {
-        CacheLinkPtr next;
-        int max = (Num128 > MAX_128) ? MAX_128 : 0;
-
-        /*
-         * Note: next is set in this way to work around a code generation
-         * bug in gcc 2.7.2.3.
-         */
-        next = List128->next;
-        while (Num128 > max) {
-            List128->next = ListPartial;
-            ListPartial = List128;
-            if ((List128 = next))
-                next = List128->next;
-            NumPartial++;
-            Num128--;
-        }
-    }
-
-    MaxPartialHeight = MaxPartialWidth = 0;
-
-    /* at this point we have as many 512x512 and 256x256 slots as we
-       want but may have an excess of 128x128 slots.  We still need
-       to find out if we need 8x8 slots.  We take these from the
-       partials if we have them.  Otherwise, we break some 128x128's */
-
-    if (!(infoRec->PixmapCacheFlags & (CACHE_MONO_8x8 | CACHE_COLOR_8x8))) {
-        if (NumPartial) {
-            if (Num128) {       /* don't bother with partials */
-                FreeList(ListPartial);
-                NumPartial = 0;
-                ListPartial = NULL;
-            }
-            else {
-                /* We have no big slots.  Weed out the unusable partials */
-                ListPartial = ThinOutPartials(ListPartial, &NumPartial,
-                                              &MaxPartialWidth,
-                                              &MaxPartialHeight);
-            }
-        }
-    }
-    else {
-        int MonosPerColor = 1;
-        int ColorH = infoRec->CacheHeightColor8x8Pattern;
-        int ColorW = infoRec->CacheWidthColor8x8Pattern;
-        int MonoH = infoRec->CacheHeightMono8x8Pattern;
-        int MonoW = infoRec->CacheWidthMono8x8Pattern;
-        Bool DoColor = (infoRec->PixmapCacheFlags & CACHE_COLOR_8x8);
-        Bool DoMono = (infoRec->PixmapCacheFlags & CACHE_MONO_8x8);
-
-        if (DoColor)
-            infoRec->CanDoColor8x8 = FALSE;
-        if (DoMono)
-            infoRec->CanDoMono8x8 = FALSE;
-
-        if (DoColor && DoMono) {
-            /* we assume color patterns take more space than color ones */
-            if (MonoH > ColorH)
-                ColorH = MonoH;
-            if (MonoW > ColorW)
-                ColorW = MonoW;
-            MonosPerColor = (ColorH / MonoH) * (ColorW / MonoW);
-        }
-
-        if (Num128) {
-            if (NumPartial) {   /* use all for 8x8 slots */
-                ConvertAllPartialsTo8x8(&NumMono, &NumColor,
-                                        ListPartial, &ListMono, &ListColor,
-                                        infoRec);
-                NumPartial = 0;
-                ListPartial = NULL;
-            }
-
-            /* Get some 8x8 slots from the 128 slots */
-            while ((Num128 > 4) &&
-                   ((NumMono < MAX_MONO) && (NumColor < MAX_COLOR))) {
-                CacheLinkPtr tmp = NULL;
-
-                tmp = Enlist(tmp, List128->x, List128->y,
-                             List128->w, List128->h);
-                List128 = Delist(List128);
-                Num128--;
-
-                ConvertAllPartialsTo8x8(&NumMono, &NumColor,
-                                        tmp, &ListMono, &ListColor, infoRec);
-            }
-        }
-        else if (NumPartial) {
-            /* We have share partials between 8x8 slots and tiles. */
-            ListPartial = ConvertSomePartialsTo8x8(&NumMono, &NumColor,
-                                                   &NumPartial, ListPartial,
-                                                   &ListMono, &ListColor,
-                                                   &MaxPartialWidth,
-                                                   &MaxPartialHeight, infoRec);
-        }
-
-        if (DoMono && DoColor) {
-            if (NumColor && ((NumColor > MAX_COLOR) || (NumColor < 4))) {
-                int max = (NumColor > MAX_COLOR) ? MAX_COLOR : 0;
-
-                while (NumColor > max) {
-                    ConvertColorToMono(&ListColor, ColorW, ColorH,
-                                       &ListMono, MonoW, MonoH);
-                    NumColor--;
-                    NumMono += MonosPerColor;
-                }
-            }
-
-            /* favor Mono slots over Color ones */
-            while ((NumColor > 4) && (NumMono < MAX_MONO)) {
-                ConvertColorToMono(&ListColor, ColorW, ColorH,
-                                   &ListMono, MonoW, MonoH);
-                NumColor--;
-                NumMono += MonosPerColor;
-            }
-        }
-
-        if (NumMono && ((NumMono > MAX_MONO) || (NumMono < 4))) {
-            int max = (NumMono > MAX_MONO) ? MAX_MONO : 0;
-
-            while (NumMono > max) {
-                ListMono = Delist(ListMono);
-                NumMono--;
-            }
-        }
-        if (NumColor && ((NumColor > MAX_COLOR) || (NumColor < 4))) {
-            int max = (NumColor > MAX_COLOR) ? MAX_COLOR : 0;
-
-            while (NumColor > max) {
-                ListColor = Delist(ListColor);
-                NumColor--;
-            }
-        }
-    }
-
-    pCachePriv = calloc(1, sizeof(XAAPixmapCachePrivate));
-    if (!pCachePriv) {
-        if (Num512)
-            FreeList(List512);
-        if (Num256)
-            FreeList(List256);
-        if (Num128)
-            FreeList(List128);
-        if (NumPartial)
-            FreeList(ListPartial);
-        if (NumColor)
-            FreeList(ListColor);
-        if (NumMono)
-            FreeList(ListMono);
-        return;
-    }
-
-    infoRec->PixmapCachePrivate = (char *) pCachePriv;
-
-    if (Num512) {
-        pCachePriv->Info512 = calloc(Num512, sizeof(XAACacheInfoRec));
-        if (!pCachePriv->Info512)
-            Num512 = 0;
-        if (Num512)
-            TransferList(List512, pCachePriv->Info512, Num512);
-        FreeList(List512);
-        pCachePriv->Num512x512 = Num512;
-    }
-    if (Num256) {
-        pCachePriv->Info256 = calloc(Num256, sizeof(XAACacheInfoRec));
-        if (!pCachePriv->Info256)
-            Num256 = 0;
-        if (Num256)
-            TransferList(List256, pCachePriv->Info256, Num256);
-        FreeList(List256);
-        pCachePriv->Num256x256 = Num256;
-    }
-    if (Num128) {
-        pCachePriv->Info128 = calloc(Num128, sizeof(XAACacheInfoRec));
-        if (!pCachePriv->Info128)
-            Num128 = 0;
-        if (Num128)
-            TransferList(List128, pCachePriv->Info128, Num128);
-        FreeList(List128);
-        pCachePriv->Num128x128 = Num128;
-    }
-
-    if (NumPartial) {
-        pCachePriv->InfoPartial = calloc(NumPartial, sizeof(XAACacheInfoRec));
-        if (!pCachePriv->InfoPartial)
-            NumPartial = 0;
-        if (NumPartial)
-            TransferList(ListPartial, pCachePriv->InfoPartial, NumPartial);
-        FreeList(ListPartial);
-        pCachePriv->NumPartial = NumPartial;
-    }
-
-    if (NumColor) {
-        pCachePriv->InfoColor = calloc(NumColor, sizeof(XAACacheInfoRec));
-        if (!pCachePriv->InfoColor)
-            NumColor = 0;
-        if (NumColor)
-            TransferList(ListColor, pCachePriv->InfoColor, NumColor);
-        FreeList(ListColor);
-        pCachePriv->NumColor = NumColor;
-    }
-
-    if (NumMono) {
-        pCachePriv->InfoMono = calloc(NumMono, sizeof(XAACacheInfoRec));
-        if (!pCachePriv->InfoMono)
-            NumMono = 0;
-        if (NumMono)
-            TransferList(ListMono, pCachePriv->InfoMono, NumMono);
-        FreeList(ListMono);
-        pCachePriv->NumMono = NumMono;
-    }
-
-    if (NumPartial) {
-        infoRec->MaxCacheableTileWidth = MaxPartialWidth;
-        infoRec->MaxCacheableTileHeight = MaxPartialHeight;
-    }
-    if (Num128)
-        infoRec->MaxCacheableTileWidth = infoRec->MaxCacheableTileHeight = 128;
-    if (Num256)
-        infoRec->MaxCacheableTileWidth = infoRec->MaxCacheableTileHeight = 256;
-    if (Num512)
-        infoRec->MaxCacheableTileWidth = infoRec->MaxCacheableTileHeight = 512;
-
-    infoRec->MaxCacheableStippleHeight = infoRec->MaxCacheableTileHeight;
-    infoRec->MaxCacheableStippleWidth =
-        infoRec->MaxCacheableTileWidth * pScrn->bitsPerPixel;
-    if (infoRec->ScreenToScreenColorExpandFillFlags & TRIPLE_BITS_24BPP)
-        infoRec->MaxCacheableStippleWidth /= 3;
-
-    if (NumMono) {
-        if (!(infoRec->Mono8x8PatternFillFlags &
-              (HARDWARE_PATTERN_PROGRAMMED_ORIGIN |
-               HARDWARE_PATTERN_PROGRAMMED_BITS))) {
-            int numPerLine =
-                infoRec->CacheWidthMono8x8Pattern / infoRec->MonoPatternPitch;
-
-            for (i = 0; i < 64; i++) {
-                pCachePriv->MonoOffsets[i].y = i / numPerLine;
-                pCachePriv->MonoOffsets[i].x = (i % numPerLine) *
-                    infoRec->MonoPatternPitch;
-            }
-        }
-        infoRec->CanDoMono8x8 = TRUE;
-    }
-    if (NumColor) {
-        if (!(infoRec->Color8x8PatternFillFlags &
-              HARDWARE_PATTERN_PROGRAMMED_ORIGIN)) {
-
-            for (i = 0; i < 64; i++) {
-                pCachePriv->ColorOffsets[i].y = i & 0x07;
-                pCachePriv->ColorOffsets[i].x = i & ~0x07;
-            }
-        }
-        infoRec->CanDoColor8x8 = TRUE;
-    }
-
-    if (!CACHEINIT(pScrn)) {
-        xf86ErrorF("\tSetting up tile and stipple cache:\n");
-        if (NumPartial)
-            xf86ErrorF("\t\t%i %ix%i slots\n",
-                       NumPartial, MaxPartialWidth, MaxPartialHeight);
-        if (Num128)
-            xf86ErrorF("\t\t%i 128x128 slots\n", Num128);
-        if (Num256)
-            xf86ErrorF("\t\t%i 256x256 slots\n", Num256);
-        if (Num512)
-            xf86ErrorF("\t\t%i 512x512 slots\n", Num512);
-        if (NumColor)
-            xf86ErrorF("\t\t%i 8x8 color pattern slots\n", NumColor);
-        if (NumMono)
-            xf86ErrorF("\t\t%i 8x8 color expansion slots\n", NumMono);
-    }
-
-    if (!(NumPartial | Num128 | Num256 | Num512 | NumColor | NumMono)) {
-        if (!CACHEINIT(pScrn))
-            xf86ErrorF("\t\tNot enough video memory for pixmap cache\n");
-    }
-    else
-        infoRec->UsingPixmapCache = TRUE;
-
-    CACHEINIT(pScrn) = 1;
-}
-
-#if X_BYTE_ORDER == X_BIG_ENDIAN
-static CARD32 StippleMasks[4] = {
-    0x80808080,
-    0xC0C0C0C0,
-    0x00000000,
-    0xF0F0F0F0
-};
-#else
-static CARD32 StippleMasks[4] = {
-    0x01010101,
-    0x03030303,
-    0x00000000,
-    0x0F0F0F0F
-};
-#endif
-
-Bool
-XAACheckStippleReducibility(PixmapPtr pPixmap)
-{
-    XAAPixmapPtr pPriv = XAA_GET_PIXMAP_PRIVATE(pPixmap);
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_DRAWABLE(&pPixmap->drawable);
-    CARD32 *IntPtr = (CARD32 *) pPixmap->devPrivate.ptr;
-    int w = pPixmap->drawable.width;
-    int h = pPixmap->drawable.height;
-    int i;
-    CARD32 bits[8];
-    CARD32 mask = SHIFT_R(0xFFFFFFFF, 24);
-
-    pPriv->flags |= REDUCIBILITY_CHECKED | REDUCIBLE_TO_2_COLOR;
-    pPriv->flags &= ~REDUCIBLE_TO_8x8;
-
-    if ((w > 32) || (h > 32) || (w & (w - 1)) || (h & (h - 1)))
-        return FALSE;
-
-    i = (h > 8) ? 8 : h;
-
-    switch (w) {
-    case 32:
-        while (i--) {
-            bits[i] = IntPtr[i] & mask;
-            if ((bits[i] != SHIFT_R((IntPtr[i] & SHIFT_L(mask, 8)), 8)) ||
-                (bits[i] != SHIFT_R((IntPtr[i] & SHIFT_L(mask, 16)), 16)) ||
-                (bits[i] != SHIFT_R((IntPtr[i] & SHIFT_L(mask, 24)), 24)))
-                return FALSE;
-        }
-        break;
-    case 16:
-        while (i--) {
-            bits[i] = IntPtr[i] & mask;
-            if (bits[i] != ((IntPtr[i] & SHIFT_R(SHIFT_L(mask, 8), 8))))
-                return FALSE;
-        }
-        break;
-    default:
-        while (i--)
-            bits[i] = IntPtr[i] & mask;
-        break;
-    }
-
-    switch (h) {
-    case 32:
-        if ((IntPtr[8] != IntPtr[16]) || (IntPtr[9] != IntPtr[17]) ||
-            (IntPtr[10] != IntPtr[18]) || (IntPtr[11] != IntPtr[19]) ||
-            (IntPtr[12] != IntPtr[20]) || (IntPtr[13] != IntPtr[21]) ||
-            (IntPtr[14] != IntPtr[22]) || (IntPtr[15] != IntPtr[23]) ||
-            (IntPtr[16] != IntPtr[24]) || (IntPtr[17] != IntPtr[25]) ||
-            (IntPtr[18] != IntPtr[26]) || (IntPtr[19] != IntPtr[27]) ||
-            (IntPtr[20] != IntPtr[28]) || (IntPtr[21] != IntPtr[29]) ||
-            (IntPtr[22] != IntPtr[30]) || (IntPtr[23] != IntPtr[31]))
-            return FALSE;
-        /* fall through */
-    case 16:
-        if ((IntPtr[0] != IntPtr[8]) || (IntPtr[1] != IntPtr[9]) ||
-            (IntPtr[2] != IntPtr[10]) || (IntPtr[3] != IntPtr[11]) ||
-            (IntPtr[4] != IntPtr[12]) || (IntPtr[5] != IntPtr[13]) ||
-            (IntPtr[6] != IntPtr[14]) || (IntPtr[7] != IntPtr[15]))
-            return FALSE;
-    case 8:
-        break;
-    case 1:
-        bits[1] = bits[0];
-    case 2:
-        bits[2] = bits[0];
-        bits[3] = bits[1];
-    case 4:
-        bits[4] = bits[0];
-        bits[5] = bits[1];
-        bits[6] = bits[2];
-        bits[7] = bits[3];
-        break;
-    }
-
-    pPriv->flags |= REDUCIBLE_TO_8x8;
-
-    pPriv->pattern0 =
-        bits[0] | SHIFT_L(bits[1], 8) | SHIFT_L(bits[2], 16) | SHIFT_L(bits[3],
-                                                                       24);
-    pPriv->pattern1 =
-        bits[4] | SHIFT_L(bits[5], 8) | SHIFT_L(bits[6], 16) | SHIFT_L(bits[7],
-                                                                       24);
-
-    if (w < 8) {
-        pPriv->pattern0 &= StippleMasks[w - 1];
-        pPriv->pattern1 &= StippleMasks[w - 1];
-
-        switch (w) {
-        case 1:
-            pPriv->pattern0 |= SHIFT_L(pPriv->pattern0, 1);
-            pPriv->pattern1 |= SHIFT_L(pPriv->pattern1, 1);
-        case 2:
-            pPriv->pattern0 |= SHIFT_L(pPriv->pattern0, 2);
-            pPriv->pattern1 |= SHIFT_L(pPriv->pattern1, 2);
-        case 4:
-            pPriv->pattern0 |= SHIFT_L(pPriv->pattern0, 4);
-            pPriv->pattern1 |= SHIFT_L(pPriv->pattern1, 4);
-        }
-    }
-
-    if (infoRec->Mono8x8PatternFillFlags & BIT_ORDER_IN_BYTE_MSBFIRST) {
-        pPriv->pattern0 = SWAP_BITS_IN_BYTES(pPriv->pattern0);
-        pPriv->pattern1 = SWAP_BITS_IN_BYTES(pPriv->pattern1);
-    }
-
-    return TRUE;
-}
-
-Bool
-XAACheckTileReducibility(PixmapPtr pPixmap, Bool checkMono)
-{
-    XAAPixmapPtr pPriv = XAA_GET_PIXMAP_PRIVATE(pPixmap);
-    CARD32 *IntPtr;
-    int w = pPixmap->drawable.width;
-    int h = pPixmap->drawable.height;
-    int pitch = pPixmap->devKind >> 2;
-    int dwords, i, j;
-
-    pPriv->flags |= REDUCIBILITY_CHECKED;
-    pPriv->flags &= ~(REDUCIBILITY_CHECKED | REDUCIBLE_TO_2_COLOR);
-
-    if ((w > 32) || (h > 32) || (w & (w - 1)) || (h & (h - 1)))
-        return FALSE;
-
-    dwords = ((w * pPixmap->drawable.bitsPerPixel) + 31) >> 5;
-    i = (h > 8) ? 8 : h;
-
-    if (w > 8) {
-        IntPtr = (CARD32 *) pPixmap->devPrivate.ptr;
-        switch (pPixmap->drawable.bitsPerPixel) {
-        case 8:
-            while (i--) {
-                for (j = 2; j < dwords; j++)
-                    if (IntPtr[j] != IntPtr[j & 0x01])
-                        return FALSE;
-                IntPtr += pitch;
-            }
-            break;
-        case 16:
-            while (i--) {
-                for (j = 4; j < dwords; j++)
-                    if (IntPtr[j] != IntPtr[j & 0x03])
-                        return FALSE;
-                IntPtr += pitch;
-            }
-            break;
-        case 24:
-            while (i--) {
-                for (j = 6; j < dwords; j++)
-                    if (IntPtr[j] != IntPtr[j % 6])
-                        return FALSE;
-                IntPtr += pitch;
-            }
-            break;
-        case 32:
-            while (i--) {
-                for (j = 8; j < dwords; j++)
-                    if (IntPtr[j] != IntPtr[j & 0x07])
-                        return FALSE;
-                IntPtr += pitch;
-            }
-            break;
-        default:
-            return FALSE;
-        }
-
-    }
-
-    if (h == 32) {
-        CARD32 *IntPtr2, *IntPtr3, *IntPtr4;
-
-        i = 8;
-        IntPtr = (CARD32 *) pPixmap->devPrivate.ptr;
-        IntPtr2 = IntPtr + (pitch << 3);
-        IntPtr3 = IntPtr2 + (pitch << 3);
-        IntPtr4 = IntPtr3 + (pitch << 3);
-        while (i--) {
-            for (j = 0; j < dwords; j++)
-                if ((IntPtr[j] != IntPtr2[j]) || (IntPtr[j] != IntPtr3[j]) ||
-                    (IntPtr[j] != IntPtr4[j]))
-                    return FALSE;
-            IntPtr += pitch;
-            IntPtr2 += pitch;
-            IntPtr3 += pitch;
-            IntPtr4 += pitch;
-        }
-    }
-    else if (h == 16) {
-        CARD32 *IntPtr2;
-
-        i = 8;
-        IntPtr = (CARD32 *) pPixmap->devPrivate.ptr;
-        IntPtr2 = IntPtr + (pitch << 3);
-        while (i--) {
-            for (j = 0; j < dwords; j++)
-                if (IntPtr[j] != IntPtr2[j])
-                    return FALSE;
-            IntPtr += pitch;
-            IntPtr2 += pitch;
-        }
-    }
-
-    pPriv->flags |= REDUCIBLE_TO_8x8;
-
-    if (checkMono) {
-        XAAInfoRecPtr infoRec =
-            GET_XAAINFORECPTR_FROM_DRAWABLE(&pPixmap->drawable);
-        unsigned char bits[8];
-        int fg, bg = -1, x, y;
-
-        i = (h > 8) ? 8 : h;
-        j = (w > 8) ? 8 : w;
-
-        if (pPixmap->drawable.bitsPerPixel == 8) {
-            unsigned char *srcp = pPixmap->devPrivate.ptr;
-
-            fg = srcp[0];
-            pitch = pPixmap->devKind;
-            for (y = 0; y < i; y++) {
-                bits[y] = 0;
-                for (x = 0; x < j; x++) {
-                    if (srcp[x] != fg) {
-                        if (bg == -1)
-                            bg = srcp[x];
-                        else if (bg != srcp[x])
-                            return TRUE;
-                    }
-                    else
-                        bits[y] |= 1 << x;
-                }
-                srcp += pitch;
-            }
-        }
-        else if (pPixmap->drawable.bitsPerPixel == 16) {
-            unsigned short *srcp = (unsigned short *) pPixmap->devPrivate.ptr;
-
-            fg = srcp[0];
-            pitch = pPixmap->devKind >> 1;
-            for (y = 0; y < i; y++) {
-                bits[y] = 0;
-                for (x = 0; x < j; x++) {
-                    if (srcp[x] != fg) {
-                        if (bg == -1)
-                            bg = srcp[x];
-                        else if (bg != srcp[x])
-                            return TRUE;
-                    }
-                    else
-                        bits[y] |= 1 << x;
-                }
-                srcp += pitch;
-            }
-        }
-        else if (pPixmap->drawable.bitsPerPixel == 24) {
-            CARD32 val;
-            unsigned char *srcp = pPixmap->devPrivate.ptr;
-
-            fg = *((CARD32 *) srcp) & 0x00FFFFFF;
-            pitch = pPixmap->devKind;
-            j *= 3;
-            for (y = 0; y < i; y++) {
-                bits[y] = 0;
-                for (x = 0; x < j; x += 3) {
-                    val = *((CARD32 *) (srcp + x)) & 0x00FFFFFF;
-                    if (val != fg) {
-                        if (bg == -1)
-                            bg = val;
-                        else if (bg != val)
-                            return TRUE;
-                    }
-                    else
-                        bits[y] |= 1 << (x / 3);
-                }
-                srcp += pitch;
-            }
-        }
-        else if (pPixmap->drawable.bitsPerPixel == 32) {
-            IntPtr = (CARD32 *) pPixmap->devPrivate.ptr;
-            fg = IntPtr[0];
-            for (y = 0; y < i; y++) {
-                bits[y] = 0;
-                for (x = 0; x < j; x++) {
-                    if (IntPtr[x] != fg) {
-                        if (bg == -1)
-                            bg = IntPtr[x];
-                        else if (bg != IntPtr[x])
-                            return TRUE;
-                    }
-                    else
-                        bits[y] |= 1 << x;
-                }
-                IntPtr += pitch;
-            }
-        }
-        else
-            return TRUE;
-
-        pPriv->fg = fg;
-        if (bg == -1)
-            pPriv->bg = fg;
-        else
-            pPriv->bg = bg;
-
-        if (h < 8) {
-            switch (h) {
-            case 1:
-                bits[1] = bits[0];
-            case 2:
-                bits[2] = bits[0];
-                bits[3] = bits[1];
-            case 4:
-                bits[4] = bits[0];
-                bits[5] = bits[1];
-                bits[6] = bits[2];
-                bits[7] = bits[3];
-                break;
-            }
-        }
-
-        pPriv->pattern0 =
-            bits[0] | (bits[1] << 8) | (bits[2] << 16) | (bits[3] << 24);
-        pPriv->pattern1 =
-            bits[4] | (bits[5] << 8) | (bits[6] << 16) | (bits[7] << 24);
-
-        if (w < 8) {
-            switch (w) {
-            case 1:
-                pPriv->pattern0 |= (pPriv->pattern0 << 1);
-                pPriv->pattern1 |= (pPriv->pattern1 << 1);
-            case 2:
-                pPriv->pattern0 |= (pPriv->pattern0 << 2);
-                pPriv->pattern1 |= (pPriv->pattern1 << 2);
-            case 4:
-                pPriv->pattern0 |= (pPriv->pattern0 << 4);
-                pPriv->pattern1 |= (pPriv->pattern1 << 4);
-            }
-        }
-        pPriv->flags |= REDUCIBLE_TO_2_COLOR;
-
-        if (infoRec->Mono8x8PatternFillFlags & BIT_ORDER_IN_BYTE_MSBFIRST) {
-            pPriv->pattern0 = SWAP_BITS_IN_BYTES(pPriv->pattern0);
-            pPriv->pattern1 = SWAP_BITS_IN_BYTES(pPriv->pattern1);
-        }
-
-    }
-
-    return TRUE;
-}
-
-void
-XAATileCache(ScrnInfoPtr pScrn, XAACacheInfoPtr pCache, int w, int h)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-
-    (*infoRec->SetupForScreenToScreenCopy) (pScrn, 1, 1, GXcopy, ~0, -1);
-
-    while ((w << 1) <= pCache->w) {
-        (*infoRec->SubsequentScreenToScreenCopy) (pScrn, pCache->x, pCache->y,
-                                                  pCache->x + w, pCache->y, w,
-                                                  h);
-        w <<= 1;
-    }
-    if (w != pCache->w) {
-        (*infoRec->SubsequentScreenToScreenCopy) (pScrn, pCache->x, pCache->y,
-                                                  pCache->x + w, pCache->y,
-                                                  pCache->w - w, h);
-        w = pCache->w;
-    }
-
-    while ((h << 1) <= pCache->h) {
-        (*infoRec->SubsequentScreenToScreenCopy) (pScrn, pCache->x, pCache->y,
-                                                  pCache->x, pCache->y + h, w,
-                                                  h);
-        h <<= 1;
-    }
-    if (h != pCache->h) {
-        (*infoRec->SubsequentScreenToScreenCopy) (pScrn, pCache->x, pCache->y,
-                                                  pCache->x, pCache->y + h, w,
-                                                  pCache->h - h);
-    }
-    SET_SYNC_FLAG(infoRec);
-}
-
-XAACacheInfoPtr
-XAACacheTile(ScrnInfoPtr pScrn, PixmapPtr pPix)
-{
-    int w = pPix->drawable.width;
-    int h = pPix->drawable.height;
-    int size = max(w, h);
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    XAAPixmapCachePrivatePtr pCachePriv =
-        (XAAPixmapCachePrivatePtr) infoRec->PixmapCachePrivate;
-    XAACacheInfoPtr pCache, cacheRoot = NULL;
-    int i, max = 0;
-    int *current;
-
-    if (size <= 128) {
-        if (pCachePriv->Info128) {
-            cacheRoot = pCachePriv->Info128;
-            max = pCachePriv->Num128x128;
-            current = &pCachePriv->Current128;
-        }
-        else {
-            cacheRoot = pCachePriv->InfoPartial;
-            max = pCachePriv->NumPartial;
-            current = &pCachePriv->CurrentPartial;
-        }
-    }
-    else if (size <= 256) {
-        cacheRoot = pCachePriv->Info256;
-        max = pCachePriv->Num256x256;
-        current = &pCachePriv->Current256;
-    }
-    else if (size <= 512) {
-        cacheRoot = pCachePriv->Info512;
-        max = pCachePriv->Num512x512;
-        current = &pCachePriv->Current512;
-    }
-    else {                      /* something's wrong */
-        ErrorF("Something's wrong in XAACacheTile()\n");
-        return pCachePriv->Info128;
-    }
-
-    pCache = cacheRoot;
-
-    /* lets look for it */
-    for (i = 0; i < max; i++, pCache++) {
-        if (pCache->serialNumber == pPix->drawable.serialNumber) {
-            pCache->trans_color = -1;
-            return pCache;
-        }
-    }
-
-    pCache = &cacheRoot[(*current)++];
-    if (*current >= max)
-        *current = 0;
-
-    pCache->serialNumber = pPix->drawable.serialNumber;
-    pCache->trans_color = pCache->bg = pCache->fg = -1;
-    pCache->orig_w = w;
-    pCache->orig_h = h;
-    (*infoRec->WritePixmapToCache) (pScrn, pCache->x, pCache->y, w, h,
-                                    pPix->devPrivate.ptr, pPix->devKind,
-                                    pPix->drawable.bitsPerPixel,
-                                    pPix->drawable.depth);
-    if (!(infoRec->PixmapCacheFlags & DO_NOT_TILE_COLOR_DATA) &&
-        ((w != pCache->w) || (h != pCache->h)))
-        XAATileCache(pScrn, pCache, w, h);
-
-    return pCache;
-}
-
-XAACacheInfoPtr
-XAACacheMonoStipple(ScrnInfoPtr pScrn, PixmapPtr pPix)
-{
-    int w = pPix->drawable.width;
-    int h = pPix->drawable.height;
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    XAAPixmapCachePrivatePtr pCachePriv =
-        (XAAPixmapCachePrivatePtr) infoRec->PixmapCachePrivate;
-    XAACacheInfoPtr pCache, cacheRoot = NULL;
-    int i, max = 0, funcNo, pad, dwords, bpp = pScrn->bitsPerPixel;
-    int *current;
-    StippleScanlineProcPtr StippleFunc;
-    unsigned char *data, *srcPtr, *dstPtr;
-
-    if ((h <= 128) && (w <= 128 * bpp)) {
-        if (pCachePriv->Info128) {
-            cacheRoot = pCachePriv->Info128;
-            max = pCachePriv->Num128x128;
-            current = &pCachePriv->Current128;
-        }
-        else {
-            cacheRoot = pCachePriv->InfoPartial;
-            max = pCachePriv->NumPartial;
-            current = &pCachePriv->CurrentPartial;
-        }
-    }
-    else if ((h <= 256) && (w <= 256 * bpp)) {
-        cacheRoot = pCachePriv->Info256;
-        max = pCachePriv->Num256x256;
-        current = &pCachePriv->Current256;
-    }
-    else if ((h <= 512) && (w <= 526 * bpp)) {
-        cacheRoot = pCachePriv->Info512;
-        max = pCachePriv->Num512x512;
-        current = &pCachePriv->Current512;
-    }
-    else {                      /* something's wrong */
-        ErrorF("Something's wrong in XAACacheMonoStipple()\n");
-        return pCachePriv->Info128;
-    }
-
-    pCache = cacheRoot;
-
-    /* lets look for it */
-    for (i = 0; i < max; i++, pCache++) {
-        if ((pCache->serialNumber == pPix->drawable.serialNumber) &&
-            (pCache->fg == -1) && (pCache->bg == -1)) {
-            pCache->trans_color = -1;
-            return pCache;
-        }
-    }
-
-    pCache = &cacheRoot[(*current)++];
-    if (*current >= max)
-        *current = 0;
-
-    pCache->serialNumber = pPix->drawable.serialNumber;
-    pCache->trans_color = pCache->bg = pCache->fg = -1;
-    pCache->orig_w = w;
-    pCache->orig_h = h;
-
-    if (w <= 32) {
-        if (w & (w - 1))
-            funcNo = 1;
-        else
-            funcNo = 0;
-    }
-    else
-        funcNo = 2;
-
-    pad = BitmapBytePad(pCache->w * bpp);
-    dwords = bytes_to_int32(pad);
-    dstPtr = data = (unsigned char *) malloc(pad * pCache->h);
-    srcPtr = (unsigned char *) pPix->devPrivate.ptr;
-
-    if (infoRec->
-        ScreenToScreenColorExpandFillFlags & BIT_ORDER_IN_BYTE_MSBFIRST)
-        StippleFunc = XAAStippleScanlineFuncMSBFirst[funcNo];
-    else
-        StippleFunc = XAAStippleScanlineFuncLSBFirst[funcNo];
-
-    /* don't bother generating more than we'll ever use */
-    max = ((pScrn->displayWidth + w - 1) + 31) >> 5;
-    if (dwords > max)
-        dwords = max;
-
-    for (i = 0; i < h; i++) {
-        (*StippleFunc) ((CARD32 *) dstPtr, (CARD32 *) srcPtr, 0, w, dwords);
-        srcPtr += pPix->devKind;
-        dstPtr += pad;
-    }
-
-    while ((h << 1) <= pCache->h) {
-        memcpy(data + (pad * h), data, pad * h);
-        h <<= 1;
-    }
-
-    if (h < pCache->h)
-        memcpy(data + (pad * h), data, pad * (pCache->h - h));
-
-    (*infoRec->WritePixmapToCache) (pScrn, pCache->x, pCache->y, pCache->w,
-                                    pCache->h, data, pad, bpp, pScrn->depth);
-
-    free(data);
-
-    return pCache;
-}
-
-XAACacheInfoPtr
-XAACachePlanarMonoStipple(ScrnInfoPtr pScrn, PixmapPtr pPix)
-{
-    int w = pPix->drawable.width;
-    int h = pPix->drawable.height;
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    XAAPixmapCachePrivatePtr pCachePriv =
-        (XAAPixmapCachePrivatePtr) infoRec->PixmapCachePrivate;
-    XAACacheInfoPtr pCache, cacheRoot = NULL;
-    int i, max = 0;
-    int *current;
-
-    if ((h <= 128) && (w <= 128)) {
-        if (pCachePriv->Info128) {
-            cacheRoot = pCachePriv->Info128;
-            max = pCachePriv->Num128x128;
-            current = &pCachePriv->Current128;
-        }
-        else {
-            cacheRoot = pCachePriv->InfoPartial;
-            max = pCachePriv->NumPartial;
-            current = &pCachePriv->CurrentPartial;
-        }
-    }
-    else if ((h <= 256) && (w <= 256)) {
-        cacheRoot = pCachePriv->Info256;
-        max = pCachePriv->Num256x256;
-        current = &pCachePriv->Current256;
-    }
-    else if ((h <= 512) && (w <= 526)) {
-        cacheRoot = pCachePriv->Info512;
-        max = pCachePriv->Num512x512;
-        current = &pCachePriv->Current512;
-    }
-    else {                      /* something's wrong */
-        ErrorF("Something's wrong in XAACachePlanarMonoStipple()\n");
-        return pCachePriv->Info128;
-    }
-
-    pCache = cacheRoot;
-
-    /* lets look for it */
-    for (i = 0; i < max; i++, pCache++) {
-        if ((pCache->serialNumber == pPix->drawable.serialNumber) &&
-            (pCache->fg == -1) && (pCache->bg == -1)) {
-            pCache->trans_color = -1;
-            return pCache;
-        }
-    }
-
-    pCache = &cacheRoot[(*current)++];
-    if (*current >= max)
-        *current = 0;
-
-    pCache->serialNumber = pPix->drawable.serialNumber;
-    pCache->trans_color = pCache->bg = pCache->fg = -1;
-    pCache->orig_w = w;
-    pCache->orig_h = h;
-
-    /* Plane 0 holds the stipple. Plane 1 holds the inverted stipple */
-    (*infoRec->WriteBitmapToCache) (pScrn, pCache->x, pCache->y,
-                                    pPix->drawable.width, pPix->drawable.height,
-                                    pPix->devPrivate.ptr, pPix->devKind, 1, 2);
-    if (!(infoRec->PixmapCacheFlags & DO_NOT_TILE_MONO_DATA) &&
-        ((w != pCache->w) || (h != pCache->h)))
-        XAATileCache(pScrn, pCache, w, h);
-
-    return pCache;
-}
-
-XAACachePlanarMonoStippleProc
-XAAGetCachePlanarMonoStipple(void)
-{
-    return XAACachePlanarMonoStipple;
-}
-
-XAACacheInfoPtr
-XAACacheStipple(ScrnInfoPtr pScrn, PixmapPtr pPix, int fg, int bg)
-{
-    int w = pPix->drawable.width;
-    int h = pPix->drawable.height;
-    int size = max(w, h);
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    XAAPixmapCachePrivatePtr pCachePriv =
-        (XAAPixmapCachePrivatePtr) infoRec->PixmapCachePrivate;
-    XAACacheInfoPtr pCache, cacheRoot = NULL;
-    int i, max = 0;
-    int *current;
-
-    if (size <= 128) {
-        if (pCachePriv->Info128) {
-            cacheRoot = pCachePriv->Info128;
-            max = pCachePriv->Num128x128;
-            current = &pCachePriv->Current128;
-        }
-        else {
-            cacheRoot = pCachePriv->InfoPartial;
-            max = pCachePriv->NumPartial;
-            current = &pCachePriv->CurrentPartial;
-        }
-    }
-    else if (size <= 256) {
-        cacheRoot = pCachePriv->Info256;
-        max = pCachePriv->Num256x256;
-        current = &pCachePriv->Current256;
-    }
-    else if (size <= 512) {
-        cacheRoot = pCachePriv->Info512;
-        max = pCachePriv->Num512x512;
-        current = &pCachePriv->Current512;
-    }
-    else {                      /* something's wrong */
-        ErrorF("Something's wrong in XAACacheStipple()\n");
-        return pCachePriv->Info128;
-    }
-
-    pCache = cacheRoot;
-    /* lets look for it */
-    if (bg == -1)
-        for (i = 0; i < max; i++, pCache++) {
-            if ((pCache->serialNumber == pPix->drawable.serialNumber) &&
-                (fg == pCache->fg) && (pCache->fg != pCache->bg)) {
-                pCache->trans_color = pCache->bg;
-                return pCache;
-            }
-        }
-    else
-        for (i = 0; i < max; i++, pCache++) {
-            if ((pCache->serialNumber == pPix->drawable.serialNumber) &&
-                (fg == pCache->fg) && (bg == pCache->bg)) {
-                pCache->trans_color = -1;
-                return pCache;
-            }
-        }
-
-    pCache = &cacheRoot[(*current)++];
-    if (*current >= max)
-        *current = 0;
-
-    pCache->serialNumber = pPix->drawable.serialNumber;
-    pCache->fg = fg;
-    if (bg == -1)
-        pCache->trans_color = bg = fg ^ 1;
-    else
-        pCache->trans_color = -1;
-    pCache->bg = bg;
-
-    pCache->orig_w = w;
-    pCache->orig_h = h;
-    (*infoRec->WriteBitmapToCache) (pScrn, pCache->x, pCache->y,
-                                    pPix->drawable.width, pPix->drawable.height,
-                                    pPix->devPrivate.ptr, pPix->devKind, fg,
-                                    bg);
-    if (!(infoRec->PixmapCacheFlags & DO_NOT_TILE_COLOR_DATA) &&
-        ((w != pCache->w) || (h != pCache->h)))
-        XAATileCache(pScrn, pCache, w, h);
-
-    return pCache;
-}
-
-XAACacheInfoPtr
-XAACacheMono8x8Pattern(ScrnInfoPtr pScrn, int pat0, int pat1)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    XAAPixmapCachePrivatePtr pCachePriv =
-        (XAAPixmapCachePrivatePtr) infoRec->PixmapCachePrivate;
-    XAACacheInfoPtr pCache = pCachePriv->InfoMono;
-    int i;
-
-    for (i = 0; i < pCachePriv->NumMono; i++, pCache++) {
-        if (pCache->serialNumber &&
-            (pCache->pat0 == pat0) && (pCache->pat1 == pat1))
-            return pCache;
-    }
-
-    /* OK, let's cache it */
-    pCache = &pCachePriv->InfoMono[pCachePriv->CurrentMono++];
-    if (pCachePriv->CurrentMono >= pCachePriv->NumMono)
-        pCachePriv->CurrentMono = 0;
-
-    pCache->serialNumber = 1;   /* we don't care since we do lookups by pattern */
-    pCache->pat0 = pat0;
-    pCache->pat1 = pat1;
-
-    (*infoRec->WriteMono8x8PatternToCache) (pScrn, pCache);
-
-    return pCache;
-}
-
-XAACacheInfoPtr
-XAACacheColor8x8Pattern(ScrnInfoPtr pScrn, PixmapPtr pPix, int fg, int bg)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    XAAPixmapCachePrivatePtr pCachePriv =
-        (XAAPixmapCachePrivatePtr) infoRec->PixmapCachePrivate;
-    XAACacheInfoPtr pCache = pCachePriv->InfoColor;
-    XAAPixmapPtr pixPriv = XAA_GET_PIXMAP_PRIVATE(pPix);
-    int i;
-
-    if (!(pixPriv->flags & REDUCIBLE_TO_2_COLOR)) {
-        for (i = 0; i < pCachePriv->NumColor; i++, pCache++) {
-            if (pCache->serialNumber == pPix->drawable.serialNumber) {
-                pCache->trans_color = -1;
-                return pCache;
-            }
-        }
-        pCache = &pCachePriv->InfoColor[pCachePriv->CurrentColor++];
-        if (pCachePriv->CurrentColor >= pCachePriv->NumColor)
-            pCachePriv->CurrentColor = 0;
-
-        pCache->serialNumber = pPix->drawable.serialNumber;
-        pCache->trans_color = pCache->fg = pCache->bg = -1;
-    }
-    else {
-        int pat0 = pixPriv->pattern0;
-        int pat1 = pixPriv->pattern1;
-
-        if (fg == -1) {         /* it's a tile */
-            fg = pixPriv->fg;
-            bg = pixPriv->bg;
-        }
-
-        if (bg == -1) {         /* stipple */
-            for (i = 0; i < pCachePriv->NumColor; i++, pCache++) {
-                if (pCache->serialNumber &&
-                    (pCache->pat0 == pat0) && (pCache->pat1 == pat1) &&
-                    (pCache->fg == fg) && (pCache->bg != fg)) {
-                    pCache->trans_color = pCache->bg;
-                    return pCache;
-                }
-            }
-        }
-        else {                  /* opaque stipple */
-            for (i = 0; i < pCachePriv->NumColor; i++, pCache++) {
-                if (pCache->serialNumber &&
-                    (pCache->pat0 == pat0) && (pCache->pat1 == pat1) &&
-                    (pCache->fg == fg) && (pCache->bg == bg)) {
-                    pCache->trans_color = -1;
-                    return pCache;
-                }
-            }
-        }
-        pCache = &pCachePriv->InfoColor[pCachePriv->CurrentColor++];
-        if (pCachePriv->CurrentColor >= pCachePriv->NumColor)
-            pCachePriv->CurrentColor = 0;
-
-        if (bg == -1)
-            pCache->trans_color = bg = fg ^ 1;
-        else
-            pCache->trans_color = -1;
-
-        pCache->pat0 = pat0;
-        pCache->pat1 = pat1;
-        pCache->fg = fg;
-        pCache->bg = bg;
-        pCache->serialNumber = 1;
-    }
-
-    (*infoRec->WriteColor8x8PatternToCache) (pScrn, pPix, pCache);
-
-    return pCache;
-}
-
-void
-XAAWriteBitmapToCache(ScrnInfoPtr pScrn,
-                      int x, int y, int w, int h,
-                      unsigned char *src, int srcwidth, int fg, int bg)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-
-    (*infoRec->WriteBitmap) (pScrn, x, y, w, h, src, srcwidth,
-                             0, fg, bg, GXcopy, ~0);
-}
-
-void
-XAAWriteBitmapToCacheLinear(ScrnInfoPtr pScrn,
-                            int x, int y, int w, int h,
-                            unsigned char *src, int srcwidth, int fg, int bg)
-{
-    ScreenPtr pScreen = xf86ScrnToScreen(pScrn);
-    PixmapPtr pScreenPix, pDstPix;
-    ChangeGCVal gcvals[2];
-    GCPtr pGC;
-
-    pScreenPix = (*pScreen->GetScreenPixmap) (pScreen);
-
-    pDstPix = GetScratchPixmapHeader(pScreen, pScreenPix->drawable.width,
-                                     y + h, pScreenPix->drawable.depth,
-                                     pScreenPix->drawable.bitsPerPixel,
-                                     pScreenPix->devKind,
-                                     pScreenPix->devPrivate.ptr);
-
-    pGC = GetScratchGC(pScreenPix->drawable.depth, pScreen);
-    gcvals[0].val = fg;
-    gcvals[1].val = bg;
-    ChangeGC(NullClient, pGC, GCForeground | GCBackground, gcvals);
-    ValidateGC((DrawablePtr) pDstPix, pGC);
-
-    /* We've unwrapped already so these ops miss a sync */
-    SYNC_CHECK(pScrn);
-
-    (*pGC->ops->PutImage) ((DrawablePtr) pDstPix, pGC, 1, x, y, w, h, 0,
-                           XYBitmap, (pointer) src);
-
-    FreeScratchGC(pGC);
-    FreeScratchPixmapHeader(pDstPix);
-}
-
-void
-XAAWritePixmapToCache(ScrnInfoPtr pScrn,
-                      int x, int y, int w, int h,
-                      unsigned char *src, int srcwidth, int bpp, int depth)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-
-    (*infoRec->WritePixmap) (pScrn, x, y, w, h, src, srcwidth,
-                             GXcopy, ~0, -1, bpp, depth);
-}
-
-void
-XAAWritePixmapToCacheLinear(ScrnInfoPtr pScrn,
-                            int x, int y, int w, int h,
-                            unsigned char *src,
-                            int srcwidth, int bpp, int depth)
-{
-    ScreenPtr pScreen = xf86ScrnToScreen(pScrn);
-    PixmapPtr pScreenPix, pDstPix;
-    GCPtr pGC;
-
-    pScreenPix = (*pScreen->GetScreenPixmap) (pScreen);
-
-    pDstPix = GetScratchPixmapHeader(pScreen, x + w, y + h,
-                                     depth, bpp, pScreenPix->devKind,
-                                     pScreenPix->devPrivate.ptr);
-
-    pGC = GetScratchGC(depth, pScreen);
-    ValidateGC((DrawablePtr) pDstPix, pGC);
-
-    /* We've unwrapped already so these ops miss a sync */
-    SYNC_CHECK(pScrn);
-
-    if (bpp == BitsPerPixel(depth))
-        (*pGC->ops->PutImage) ((DrawablePtr) pDstPix, pGC, depth, x, y, w,
-                               h, 0, ZPixmap, (pointer) src);
-    else {
-        PixmapPtr pSrcPix;
-
-        pSrcPix = GetScratchPixmapHeader(pScreen, w, h, depth, bpp,
-                                         srcwidth, (pointer) src);
-
-        (*pGC->ops->CopyArea) ((DrawablePtr) pSrcPix, (DrawablePtr) pDstPix,
-                               pGC, 0, 0, w, h, x, y);
-
-        FreeScratchPixmapHeader(pSrcPix);
-    }
-
-    FreeScratchGC(pGC);
-    FreeScratchPixmapHeader(pDstPix);
-}
-
-void
-XAAWriteMono8x8PatternToCache(ScrnInfoPtr pScrn, XAACacheInfoPtr pCache)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    XAAPixmapCachePrivatePtr pCachePriv =
-        (XAAPixmapCachePrivatePtr) infoRec->PixmapCachePrivate;
-    unsigned char *data;
-    int pad, Bpp = (pScrn->bitsPerPixel >> 3);
-
-    pCache->offsets = pCachePriv->MonoOffsets;
-
-    pad = BitmapBytePad(pCache->w * pScrn->bitsPerPixel);
-
-    data = (unsigned char *) malloc(pad * pCache->h);
-    if (!data)
-        return;
-
-    if (infoRec->Mono8x8PatternFillFlags & HARDWARE_PATTERN_PROGRAMMED_ORIGIN) {
-        CARD32 *ptr = (CARD32 *) data;
-
-        ptr[0] = pCache->pat0;
-        ptr[1] = pCache->pat1;
-    }
-    else {
-        CARD32 *ptr;
-        DDXPointPtr pPoint = pCache->offsets;
-        int patx, paty, i;
-
-        for (i = 0; i < 64; i++, pPoint++) {
-            patx = pCache->pat0;
-            paty = pCache->pat1;
-            XAARotateMonoPattern(&patx, &paty, i & 0x07, i >> 3,
-                                 (infoRec->Mono8x8PatternFillFlags &
-                                  BIT_ORDER_IN_BYTE_MSBFIRST));
-            ptr = (CARD32 *) (data + (pad * pPoint->y) + (Bpp * pPoint->x));
-            ptr[0] = patx;
-            ptr[1] = paty;
-        }
-    }
-
-    (*infoRec->WritePixmapToCache) (pScrn, pCache->x, pCache->y,
-                                    pCache->w, pCache->h, data, pad,
-                                    pScrn->bitsPerPixel, pScrn->depth);
-
-    free(data);
-}
-
-void
-XAAWriteColor8x8PatternToCache(ScrnInfoPtr pScrn,
-                               PixmapPtr pPix, XAACacheInfoPtr pCache)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    XAAPixmapPtr pixPriv = XAA_GET_PIXMAP_PRIVATE(pPix);
-    XAAPixmapCachePrivatePtr pCachePriv =
-        (XAAPixmapCachePrivatePtr) infoRec->PixmapCachePrivate;
-    int pad, i, w, h, nw, nh, Bpp;
-    unsigned char *data, *srcPtr, *dstPtr;
-
-    pCache->offsets = pCachePriv->ColorOffsets;
-
-    if (pixPriv->flags & REDUCIBLE_TO_2_COLOR) {
-        CARD32 *ptr;
-
-        pad = BitmapBytePad(pCache->w);
-        data = (unsigned char *) malloc(pad * pCache->h);
-        if (!data)
-            return;
-
-        if (infoRec->Color8x8PatternFillFlags &
-            HARDWARE_PATTERN_PROGRAMMED_ORIGIN) {
-            ptr = (CARD32 *) data;
-            ptr[0] = pCache->pat0;
-            ptr[1] = pCache->pat1;
-        }
-        else {
-            int patx, paty;
-
-            ptr = (CARD32 *) data;
-            ptr[0] = ptr[2] = pCache->pat0;
-            ptr[1] = ptr[3] = pCache->pat1;
-            for (i = 1; i < 8; i++) {
-                patx = pCache->pat0;
-                paty = pCache->pat1;
-                XAARotateMonoPattern(&patx, &paty, i, 0,
-                                     (infoRec->Mono8x8PatternFillFlags &
-                                      BIT_ORDER_IN_BYTE_MSBFIRST));
-                ptr = (CARD32 *) (data + (pad * i));
-                ptr[0] = ptr[2] = patx;
-                ptr[1] = ptr[3] = paty;
-            }
-        }
-
-        (*infoRec->WriteBitmapToCache) (pScrn, pCache->x, pCache->y,
-                                        pCache->w, pCache->h, data, pad,
-                                        pCache->fg, pCache->bg);
-
-        free(data);
-        return;
-    }
-
-    Bpp = pScrn->bitsPerPixel >> 3;
-    h = min(8, pPix->drawable.height);
-    w = min(8, pPix->drawable.width);
-    pad = BitmapBytePad(pCache->w * pScrn->bitsPerPixel);
-
-    data = (unsigned char *) malloc(pad * pCache->h);
-    if (!data)
-        return;
-
-    /* Write and expand horizontally. */
-    for (i = h, dstPtr = data, srcPtr = pPix->devPrivate.ptr; i--;
-         srcPtr += pPix->devKind, dstPtr += pScrn->bitsPerPixel) {
-        nw = w;
-        memcpy(dstPtr, srcPtr, w * Bpp);
-        while (nw != 8) {
-            memcpy(dstPtr + (nw * Bpp), dstPtr, nw * Bpp);
-            nw <<= 1;
-        }
-    }
-    nh = h;
-    /* Expand vertically. */
-    while (nh != 8) {
-        memcpy(data + (nh * pScrn->bitsPerPixel), data,
-               nh * pScrn->bitsPerPixel);
-        nh <<= 1;
-    }
-
-    if (!(infoRec->Color8x8PatternFillFlags &
-          HARDWARE_PATTERN_PROGRAMMED_ORIGIN)) {
-        int j;
-        unsigned char *ptr = data + (128 * Bpp);
-
-        memcpy(data + (64 * Bpp), data, 64 * Bpp);
-        for (i = 1; i < 8; i++, ptr += (128 * Bpp)) {
-            for (j = 0; j < 8; j++) {
-                memcpy(ptr + (j * 8) * Bpp, data + (j * 8 + i) * Bpp,
-                       (8 - i) * Bpp);
-                memcpy(ptr + (j * 8 + 8 - i) * Bpp, data + j * 8 * Bpp,
-                       i * Bpp);
-            }
-            memcpy(ptr + (64 * Bpp), ptr, 64 * Bpp);
-        }
-    }
-
-    (*infoRec->WritePixmapToCache) (pScrn, pCache->x, pCache->y,
-                                    pCache->w, pCache->h, data, pad,
-                                    pScrn->bitsPerPixel, pScrn->depth);
-
-    free(data);
-}
-
-int
-XAAStippledFillChooser(GCPtr pGC)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    PixmapPtr pPixmap = pGC->stipple;
-    XAAPixmapPtr pPriv = XAA_GET_PIXMAP_PRIVATE(pPixmap);
-
-    if (!(pPriv->flags & REDUCIBILITY_CHECKED) &&
-        (infoRec->CanDoMono8x8 || infoRec->CanDoColor8x8)) {
-        XAACheckStippleReducibility(pPixmap);
-    }
-
-    if (pPriv->flags & REDUCIBLE_TO_8x8) {
-        if (infoRec->CanDoMono8x8 &&
-            !(infoRec->FillMono8x8PatternSpansFlags & NO_TRANSPARENCY) &&
-            ((pGC->alu == GXcopy) || !(infoRec->FillMono8x8PatternSpansFlags &
-                                       TRANSPARENCY_GXCOPY_ONLY)) &&
-            CHECK_ROP(pGC, infoRec->FillMono8x8PatternSpansFlags) &&
-            CHECK_ROPSRC(pGC, infoRec->FillMono8x8PatternSpansFlags) &&
-            CHECK_FG(pGC, infoRec->FillMono8x8PatternSpansFlags) &&
-            CHECK_PLANEMASK(pGC, infoRec->FillMono8x8PatternSpansFlags)) {
-
-            return DO_MONO_8x8;
-        }
-
-        if (infoRec->CanDoColor8x8 &&
-            !(infoRec->FillColor8x8PatternSpansFlags & NO_TRANSPARENCY) &&
-            ((pGC->alu == GXcopy) || !(infoRec->FillColor8x8PatternSpansFlags &
-                                       TRANSPARENCY_GXCOPY_ONLY)) &&
-            CHECK_ROP(pGC, infoRec->FillColor8x8PatternSpansFlags) &&
-            CHECK_ROPSRC(pGC, infoRec->FillColor8x8PatternSpansFlags) &&
-            CHECK_PLANEMASK(pGC, infoRec->FillColor8x8PatternSpansFlags)) {
-
-            return DO_COLOR_8x8;
-        }
-    }
-
-    if (infoRec->UsingPixmapCache && infoRec->FillCacheExpandSpans &&
-        (pPixmap->drawable.height <= infoRec->MaxCacheableStippleHeight) &&
-        (pPixmap->drawable.width <= infoRec->MaxCacheableStippleWidth /
-         infoRec->CacheColorExpandDensity) &&
-        !(infoRec->FillCacheExpandSpansFlags & NO_TRANSPARENCY) &&
-        ((pGC->alu == GXcopy) || !(infoRec->FillCacheExpandSpansFlags &
-                                   TRANSPARENCY_GXCOPY_ONLY)) &&
-        CHECK_ROP(pGC, infoRec->FillCacheExpandSpansFlags) &&
-        CHECK_ROPSRC(pGC, infoRec->FillCacheExpandSpansFlags) &&
-        CHECK_FG(pGC, infoRec->FillCacheExpandSpansFlags) &&
-        CHECK_PLANEMASK(pGC, infoRec->FillCacheExpandSpansFlags)) {
-
-        return DO_CACHE_EXPAND;
-    }
-
-    if (infoRec->UsingPixmapCache &&
-        !(infoRec->PixmapCacheFlags & DO_NOT_BLIT_STIPPLES) &&
-        infoRec->FillCacheBltSpans &&
-        (pPixmap->drawable.height <= infoRec->MaxCacheableTileHeight) &&
-        (pPixmap->drawable.width <= infoRec->MaxCacheableTileWidth) &&
-        !(infoRec->FillCacheBltSpansFlags & NO_TRANSPARENCY) &&
-        ((pGC->alu == GXcopy) || !(infoRec->FillCacheBltSpansFlags &
-                                   TRANSPARENCY_GXCOPY_ONLY)) &&
-        CHECK_ROP(pGC, infoRec->FillCacheBltSpansFlags) &&
-        CHECK_ROPSRC(pGC, infoRec->FillCacheBltSpansFlags) &&
-        CHECK_PLANEMASK(pGC, infoRec->FillCacheBltSpansFlags)) {
-
-        return DO_CACHE_BLT;
-    }
-
-    if (infoRec->FillColorExpandSpans &&
-        !(infoRec->FillColorExpandSpansFlags & NO_TRANSPARENCY) &&
-        ((pGC->alu == GXcopy) || !(infoRec->FillColorExpandSpansFlags &
-                                   TRANSPARENCY_GXCOPY_ONLY)) &&
-        CHECK_ROP(pGC, infoRec->FillColorExpandSpansFlags) &&
-        CHECK_ROPSRC(pGC, infoRec->FillColorExpandSpansFlags) &&
-        CHECK_FG(pGC, infoRec->FillColorExpandSpansFlags) &&
-        CHECK_PLANEMASK(pGC, infoRec->FillColorExpandSpansFlags)) {
-
-        return DO_COLOR_EXPAND;
-    }
-
-    return 0;
-}
-
-int
-XAAOpaqueStippledFillChooser(GCPtr pGC)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    PixmapPtr pPixmap = pGC->stipple;
-    XAAPixmapPtr pPriv = XAA_GET_PIXMAP_PRIVATE(pPixmap);
-
-    if (XAA_DEPTH_BUG(pGC))
-        return 0;
-
-    if (!(pPriv->flags & REDUCIBILITY_CHECKED) &&
-        (infoRec->CanDoMono8x8 || infoRec->CanDoColor8x8)) {
-        XAACheckStippleReducibility(pPixmap);
-    }
-
-    if (pPriv->flags & REDUCIBLE_TO_8x8) {
-        if (infoRec->CanDoMono8x8 &&
-            !(infoRec->FillMono8x8PatternSpansFlags & TRANSPARENCY_ONLY) &&
-            CHECK_ROP(pGC, infoRec->FillMono8x8PatternSpansFlags) &&
-            CHECK_ROPSRC(pGC, infoRec->FillMono8x8PatternSpansFlags) &&
-            CHECK_COLORS(pGC, infoRec->FillMono8x8PatternSpansFlags) &&
-            CHECK_PLANEMASK(pGC, infoRec->FillMono8x8PatternSpansFlags)) {
-
-            return DO_MONO_8x8;
-        }
-
-        if (infoRec->CanDoColor8x8 &&
-            CHECK_ROP(pGC, infoRec->FillColor8x8PatternSpansFlags) &&
-            CHECK_ROPSRC(pGC, infoRec->FillColor8x8PatternSpansFlags) &&
-            CHECK_PLANEMASK(pGC, infoRec->FillColor8x8PatternSpansFlags)) {
-
-            return DO_COLOR_8x8;
-        }
-    }
-
-    if (infoRec->UsingPixmapCache && infoRec->FillCacheExpandSpans &&
-        (pPixmap->drawable.height <= infoRec->MaxCacheableStippleHeight) &&
-        (pPixmap->drawable.width <= infoRec->MaxCacheableStippleWidth /
-         infoRec->CacheColorExpandDensity) &&
-        !(infoRec->FillCacheExpandSpansFlags & TRANSPARENCY_ONLY) &&
-        CHECK_ROP(pGC, infoRec->FillCacheExpandSpansFlags) &&
-        CHECK_ROPSRC(pGC, infoRec->FillCacheExpandSpansFlags) &&
-        CHECK_COLORS(pGC, infoRec->FillCacheExpandSpansFlags) &&
-        CHECK_PLANEMASK(pGC, infoRec->FillCacheExpandSpansFlags)) {
-
-        return DO_CACHE_EXPAND;
-    }
-
-    if (infoRec->UsingPixmapCache &&
-        !(infoRec->PixmapCacheFlags & DO_NOT_BLIT_STIPPLES) &&
-        infoRec->FillCacheBltSpans &&
-        (pPixmap->drawable.height <= infoRec->MaxCacheableTileHeight) &&
-        (pPixmap->drawable.width <= infoRec->MaxCacheableTileWidth) &&
-        CHECK_ROP(pGC, infoRec->FillCacheBltSpansFlags) &&
-        CHECK_ROPSRC(pGC, infoRec->FillCacheBltSpansFlags) &&
-        CHECK_PLANEMASK(pGC, infoRec->FillCacheBltSpansFlags)) {
-
-        return DO_CACHE_BLT;
-    }
-
-    if (infoRec->FillColorExpandSpans &&
-        !(infoRec->FillColorExpandSpansFlags & TRANSPARENCY_ONLY) &&
-        CHECK_ROP(pGC, infoRec->FillColorExpandSpansFlags) &&
-        CHECK_ROPSRC(pGC, infoRec->FillColorExpandSpansFlags) &&
-        CHECK_COLORS(pGC, infoRec->FillColorExpandSpansFlags) &&
-        CHECK_PLANEMASK(pGC, infoRec->FillColorExpandSpansFlags)) {
-
-        return DO_COLOR_EXPAND;
-    }
-
-    return 0;
-}
-
-int
-XAATiledFillChooser(GCPtr pGC)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    PixmapPtr pPixmap = pGC->tile.pixmap;
-    XAAPixmapPtr pPriv = XAA_GET_PIXMAP_PRIVATE(pPixmap);
-
-    if (IS_OFFSCREEN_PIXMAP(pPixmap) && infoRec->FillCacheBltSpans &&
-        CHECK_ROP(pGC, infoRec->FillCacheBltSpansFlags) &&
-        CHECK_ROPSRC(pGC, infoRec->FillCacheBltSpansFlags) &&
-        CHECK_PLANEMASK(pGC, infoRec->FillCacheBltSpansFlags)) {
-
-        return DO_PIXMAP_COPY;
-    }
-
-    if (!(pPriv->flags & REDUCIBILITY_CHECKED) &&
-        (infoRec->CanDoMono8x8 || infoRec->CanDoColor8x8)) {
-        XAACheckTileReducibility(pPixmap, infoRec->CanDoMono8x8);
-    }
-
-    if (pPriv->flags & REDUCIBLE_TO_8x8) {
-        if ((pPriv->flags & REDUCIBLE_TO_2_COLOR) && infoRec->CanDoMono8x8 &&
-            !(infoRec->FillMono8x8PatternSpansFlags & TRANSPARENCY_ONLY) &&
-            CHECK_ROP(pGC, infoRec->FillMono8x8PatternSpansFlags) &&
-            CHECK_ROPSRC(pGC, infoRec->FillMono8x8PatternSpansFlags) &&
-            (!(infoRec->FillMono8x8PatternSpansFlags & RGB_EQUAL) ||
-             (CHECK_RGB_EQUAL(pPriv->fg) && CHECK_RGB_EQUAL(pPriv->bg))) &&
-            CHECK_PLANEMASK(pGC, infoRec->FillMono8x8PatternSpansFlags)) {
-
-            return DO_MONO_8x8;
-        }
-
-        if (infoRec->CanDoColor8x8 &&
-            CHECK_ROP(pGC, infoRec->FillColor8x8PatternSpansFlags) &&
-            CHECK_ROPSRC(pGC, infoRec->FillColor8x8PatternSpansFlags) &&
-            CHECK_PLANEMASK(pGC, infoRec->FillColor8x8PatternSpansFlags)) {
-
-            return DO_COLOR_8x8;
-        }
-    }
-
-    if (infoRec->UsingPixmapCache && infoRec->FillCacheBltSpans &&
-        (pPixmap->drawable.height <= infoRec->MaxCacheableTileHeight) &&
-        (pPixmap->drawable.width <= infoRec->MaxCacheableTileWidth) &&
-        CHECK_ROP(pGC, infoRec->FillCacheBltSpansFlags) &&
-        CHECK_ROPSRC(pGC, infoRec->FillCacheBltSpansFlags) &&
-        CHECK_PLANEMASK(pGC, infoRec->FillCacheBltSpansFlags)) {
-
-        return DO_CACHE_BLT;
-    }
-
-    if (infoRec->FillImageWriteRects &&
-        CHECK_NO_GXCOPY(pGC, infoRec->FillImageWriteRectsFlags) &&
-        CHECK_ROP(pGC, infoRec->FillImageWriteRectsFlags) &&
-        CHECK_ROPSRC(pGC, infoRec->FillImageWriteRectsFlags) &&
-        CHECK_PLANEMASK(pGC, infoRec->FillImageWriteRectsFlags)) {
-
-        return DO_IMAGE_WRITE;
-    }
-
-    return 0;
-}
-
-static int RotateMasksX[8] = {
-    0xFFFFFFFF, 0x7F7F7F7F, 0x3F3F3F3F, 0x1F1F1F1F,
-    0x0F0F0F0F, 0x07070707, 0x03030303, 0x01010101
-};
-
-static int RotateMasksY[4] = {
-    0xFFFFFFFF, 0x00FFFFFF, 0x0000FFFF, 0x000000FF
-};
-
-void
-XAARotateMonoPattern(int *pat0, int *pat1, int xorg, int yorg, Bool msbfirst)
-{
-    int tmp, mask;
-
-    if (xorg) {
-        if (msbfirst)
-            xorg = 8 - xorg;
-        mask = RotateMasksX[xorg];
-        *pat0 = ((*pat0 >> xorg) & mask) | ((*pat0 << (8 - xorg)) & ~mask);
-        *pat1 = ((*pat1 >> xorg) & mask) | ((*pat1 << (8 - xorg)) & ~mask);
-    }
-    if (yorg >= 4) {
-        tmp = *pat0;
-        *pat0 = *pat1;
-        *pat1 = tmp;
-        yorg -= 4;
-    }
-    if (yorg) {
-        mask = RotateMasksY[yorg];
-        yorg <<= 3;
-        tmp = *pat0;
-        *pat0 = ((*pat0 >> yorg) & mask) | ((*pat1 << (32 - yorg)) & ~mask);
-        *pat1 = ((*pat1 >> yorg) & mask) | ((tmp << (32 - yorg)) & ~mask);
-    }
-}
-
-void
-XAAInvalidatePixmapCache(ScreenPtr pScreen)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCREEN(pScreen);
-    XAAPixmapCachePrivatePtr pCachePriv =
-        (XAAPixmapCachePrivatePtr) infoRec->PixmapCachePrivate;
-    int i;
-
-    if (!pCachePriv)
-        return;
-
-    for (i = 0; i < pCachePriv->Num512x512; i++)
-        (pCachePriv->Info512)[i].serialNumber = 0;
-    for (i = 0; i < pCachePriv->Num256x256; i++)
-        (pCachePriv->Info256)[i].serialNumber = 0;
-    for (i = 0; i < pCachePriv->Num128x128; i++)
-        (pCachePriv->Info128)[i].serialNumber = 0;
-    for (i = 0; i < pCachePriv->NumPartial; i++)
-        (pCachePriv->InfoPartial)[i].serialNumber = 0;
-    for (i = 0; i < pCachePriv->NumMono; i++)
-        (pCachePriv->InfoMono)[i].serialNumber = 0;
-    for (i = 0; i < pCachePriv->NumColor; i++)
-        (pCachePriv->InfoColor)[i].serialNumber = 0;
-}
diff --git a/hw/xfree86/xaa/xaaPict.c b/hw/xfree86/xaa/xaaPict.c
deleted file mode 100644
index 0721768..0000000
--- a/hw/xfree86/xaa/xaaPict.c
+++ /dev/null
@@ -1,654 +0,0 @@
-/*
- *
- * Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission.  Keith Packard makes no
- * representations about the suitability of this software for any purpose.  It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include <string.h>
-
-#include "misc.h"
-#include "xf86.h"
-#include "xf86_OSproc.h"
-
-#include <X11/X.h>
-#include "scrnintstr.h"
-#include "pixmapstr.h"
-#include "windowstr.h"
-#include "xf86str.h"
-#include "mi.h"
-#include "picturestr.h"
-#include "glyphstr.h"
-#include "picture.h"
-#include "mipict.h"
-#include "xaa.h"
-#include "xaalocal.h"
-#include "xaawrap.h"
-#include "xaacexp.h"
-#include "xf86fbman.h"
-#include "servermd.h"
-
-Bool
-XAAGetPixelFromRGBA(CARD32 *pixel,
-                    CARD16 red,
-                    CARD16 green, CARD16 blue, CARD16 alpha, CARD32 format)
-{
-    int rbits, bbits, gbits, abits;
-    int rshift, bshift, gshift, ashift;
-
-    *pixel = 0;
-
-    if (!PICT_FORMAT_COLOR(format))
-        return FALSE;
-
-    rbits = PICT_FORMAT_R(format);
-    gbits = PICT_FORMAT_G(format);
-    bbits = PICT_FORMAT_B(format);
-    abits = PICT_FORMAT_A(format);
-
-    if (PICT_FORMAT_TYPE(format) == PICT_TYPE_ARGB) {
-        bshift = 0;
-        gshift = bbits;
-        rshift = gshift + gbits;
-        ashift = rshift + rbits;
-    }
-    else if (PICT_FORMAT_TYPE(format) == PICT_TYPE_ABGR) {
-        rshift = 0;
-        gshift = rbits;
-        bshift = gshift + gbits;
-        ashift = bshift + bbits;
-    }
-    else if (PICT_FORMAT_TYPE(format) == PICT_TYPE_BGRA) {
-        bshift = PICT_FORMAT_BPP(format) - bbits;
-        gshift = bshift - gbits;
-        rshift = gshift - rbits;
-        ashift = 0;
-    }
-    else
-        return FALSE;
-
-    *pixel |= (blue >> (16 - bbits)) << bshift;
-    *pixel |= (red >> (16 - rbits)) << rshift;
-    *pixel |= (green >> (16 - gbits)) << gshift;
-    *pixel |= (alpha >> (16 - abits)) << ashift;
-
-    return TRUE;
-}
-
-Bool
-XAAGetRGBAFromPixel(CARD32 pixel,
-                    CARD16 *red,
-                    CARD16 *green, CARD16 *blue, CARD16 *alpha, CARD32 format)
-{
-    int rbits, bbits, gbits, abits;
-    int rshift, bshift, gshift, ashift;
-
-    if (!PICT_FORMAT_COLOR(format))
-        return FALSE;
-
-    rbits = PICT_FORMAT_R(format);
-    gbits = PICT_FORMAT_G(format);
-    bbits = PICT_FORMAT_B(format);
-    abits = PICT_FORMAT_A(format);
-
-    if (PICT_FORMAT_TYPE(format) == PICT_TYPE_ARGB) {
-        bshift = 0;
-        gshift = bbits;
-        rshift = gshift + gbits;
-        ashift = rshift + rbits;
-    }
-    else if (PICT_FORMAT_TYPE(format) == PICT_TYPE_ABGR) {
-        rshift = 0;
-        gshift = rbits;
-        bshift = gshift + gbits;
-        ashift = bshift + bbits;
-    }
-    else if (PICT_FORMAT_TYPE(format) == PICT_TYPE_BGRA) {
-        bshift = PICT_FORMAT_BPP(format) - bbits;
-        gshift = bshift - gbits;
-        rshift = gshift - rbits;
-        ashift = 0;
-    }
-    else
-        return FALSE;
-
-    *red = ((pixel >> rshift) & ((1 << rbits) - 1)) << (16 - rbits);
-    while (rbits < 16) {
-        *red |= *red >> rbits;
-        rbits <<= 1;
-    }
-
-    *green = ((pixel >> gshift) & ((1 << gbits) - 1)) << (16 - gbits);
-    while (gbits < 16) {
-        *green |= *green >> gbits;
-        gbits <<= 1;
-    }
-
-    *blue = ((pixel >> bshift) & ((1 << bbits) - 1)) << (16 - bbits);
-    while (bbits < 16) {
-        *blue |= *blue >> bbits;
-        bbits <<= 1;
-    }
-
-    if (abits) {
-        *alpha = ((pixel >> ashift) & ((1 << abits) - 1)) << (16 - abits);
-        while (abits < 16) {
-            *alpha |= *alpha >> abits;
-            abits <<= 1;
-        }
-    }
-    else
-        *alpha = 0xffff;
-
-    return TRUE;
-}
-
-/* 8:8:8 + PICT_a8 -> 8:8:8:8 texture */
-
-void
-XAA_888_plus_PICT_a8_to_8888(CARD32 color, CARD8 *alphaPtr,     /* in bytes */
-                             int alphaPitch, CARD32 *dstPtr, int dstPitch,      /* in dwords */
-                             int width, int height)
-{
-    int x;
-
-    color &= 0x00ffffff;
-
-    while (height--) {
-        for (x = 0; x < width; x++)
-            dstPtr[x] = color | (alphaPtr[x] << 24);
-        dstPtr += dstPitch;
-        alphaPtr += alphaPitch;
-    }
-}
-
-#define DRAWABLE_IS_ON_CARD(pDraw) \
-    (pDraw->type == DRAWABLE_WINDOW || \
-     (pDraw->type == DRAWABLE_PIXMAP && IS_OFFSCREEN_PIXMAP(pDraw)))
-
-Bool
-XAADoComposite(CARD8 op,
-               PicturePtr pSrc,
-               PicturePtr pMask,
-               PicturePtr pDst,
-               INT16 xSrc,
-               INT16 ySrc,
-               INT16 xMask,
-               INT16 yMask, INT16 xDst, INT16 yDst, CARD16 width, CARD16 height)
-{
-    ScreenPtr pScreen = pDst->pDrawable->pScreen;
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCREEN(pScreen);
-    RegionRec region;
-    CARD32 *formats, *dstformats;
-    int flags = 0;
-    BoxPtr pbox;
-    int nbox, w, h;
-
-    if (!RegionNumRects(pDst->pCompositeClip))
-        return TRUE;
-
-    if (!infoRec->pScrn->vtSema || !DRAWABLE_IS_ON_CARD(pDst->pDrawable))
-        return FALSE;
-
-    if (DRAWABLE_IS_ON_CARD(pSrc->pDrawable))
-        return FALSE;
-
-    if (pSrc->transform || (pMask && pMask->transform))
-        return FALSE;
-
-    if (pDst->alphaMap || pSrc->alphaMap || (pMask && pMask->alphaMap))
-        return FALSE;
-
-    if ((pSrc->repeat && pSrc->repeatType != RepeatNormal) ||
-        (pMask && pMask->repeat && pMask->repeatType != RepeatNormal)) {
-        return FALSE;
-    }
-
-    xDst += pDst->pDrawable->x;
-    yDst += pDst->pDrawable->y;
-    xSrc += pSrc->pDrawable->x;
-    ySrc += pSrc->pDrawable->y;
-
-    if (pMask) {
-        if (pMask->componentAlpha)
-            return FALSE;
-
-        /* for now we only do it if there is a 1x1 (solid) source */
-
-        if ((pSrc->pDrawable->width == 1) && (pSrc->pDrawable->height == 1)) {
-            CARD16 red, green, blue, alpha;
-            CARD32 pixel =
-                *((CARD32 *) (((PixmapPtr) (pSrc->pDrawable))->devPrivate.ptr));
-
-            if (!XAAGetRGBAFromPixel
-                (pixel, &red, &green, &blue, &alpha, pSrc->format))
-                return FALSE;
-
-            xMask += pMask->pDrawable->x;
-            yMask += pMask->pDrawable->y;
-
-            /* pull out color expandable operations here */
-            if ((pMask->format == PICT_a1) && (alpha == 0xffff) &&
-                (op == PictOpOver) && infoRec->WriteBitmap && !pMask->repeat &&
-                !(infoRec->WriteBitmapFlags & NO_TRANSPARENCY) &&
-                (!(infoRec->WriteBitmapFlags & RGB_EQUAL) ||
-                 ((red == green) && (green == blue)))) {
-                PixmapPtr pPix = (PixmapPtr) (pMask->pDrawable);
-                int skipleft;
-
-                if (!miComputeCompositeRegion(&region, pSrc, pMask, pDst,
-                                              xSrc, ySrc, xMask, yMask, xDst,
-                                              yDst, width, height))
-                    return TRUE;
-
-                nbox = RegionNumRects(&region);
-                pbox = RegionRects(&region);
-
-                if (!nbox)
-                    return TRUE;
-
-                XAAGetPixelFromRGBA(&pixel, red, green, blue, 0, pDst->format);
-
-                xMask -= xDst;
-                yMask -= yDst;
-
-                while (nbox--) {
-                    skipleft = pbox->x1 + xMask;
-
-                    (*infoRec->WriteBitmap) (infoRec->pScrn,
-                                             pbox->x1, pbox->y1,
-                                             pbox->x2 - pbox->x1,
-                                             pbox->y2 - pbox->y1,
-                                             (unsigned char *) (pPix->
-                                                                devPrivate.
-                                                                ptr) +
-                                             (pPix->devKind *
-                                              (pbox->y1 + yMask)) +
-                                             ((skipleft >> 3) & ~3),
-                                             pPix->devKind, skipleft & 31,
-                                             pixel, -1, GXcopy, ~0);
-                    pbox++;
-                }
-
-                /* WriteBitmap sets the Sync flag */
-                RegionUninit(&region);
-                return TRUE;
-            }
-
-            formats = infoRec->CPUToScreenAlphaTextureFormats;
-            dstformats = infoRec->CPUToScreenAlphaTextureDstFormats;
-            if (!formats || !dstformats)
-                return FALSE;
-
-            w = pMask->pDrawable->width;
-            h = pMask->pDrawable->height;
-
-            if (pMask->repeat) {
-                if ((infoRec->CPUToScreenAlphaTextureFlags & XAA_RENDER_NO_TILE)
-                    ||
-                    ((infoRec->
-                      CPUToScreenAlphaTextureFlags &
-                      XAA_RENDER_POWER_OF_2_TILE_ONLY) && ((h & (h - 1)) ||
-                                                           (w & (w - 1))))) {
-                    return FALSE;
-                }
-                flags |= XAA_RENDER_REPEAT;
-            }
-
-            if ((alpha != 0xffff) &&
-                (infoRec->
-                 CPUToScreenAlphaTextureFlags & XAA_RENDER_NO_SRC_ALPHA))
-                return FALSE;
-
-            while (*formats != pMask->format) {
-                if (!(*formats))
-                    return FALSE;
-                formats++;
-            }
-            while (*dstformats != pDst->format) {
-                if (!(*dstformats))
-                    return FALSE;
-                dstformats++;
-            }
-
-            if (!miComputeCompositeRegion(&region, pSrc, pMask, pDst,
-                                          xSrc, ySrc, xMask, yMask, xDst, yDst,
-                                          width, height))
-                return TRUE;
-
-            nbox = RegionNumRects(&region);
-            pbox = RegionRects(&region);
-
-            if (!nbox) {
-                RegionUninit(&region);
-                return TRUE;
-            }
-
-            if (!(infoRec->SetupForCPUToScreenAlphaTexture2) (infoRec->pScrn,
-                                                              op, red, green,
-                                                              blue, alpha,
-                                                              pMask->format,
-                                                              pDst->format,
-                                                              ((PixmapPtr)
-                                                               (pMask->
-                                                                pDrawable))->
-                                                              devPrivate.ptr,
-                                                              ((PixmapPtr)
-                                                               (pMask->
-                                                                pDrawable))->
-                                                              devKind, w, h,
-                                                              flags)) {
-                RegionUninit(&region);
-                return FALSE;
-            }
-
-            xMask -= xDst;
-            yMask -= yDst;
-
-            while (nbox--) {
-                (*infoRec->SubsequentCPUToScreenAlphaTexture) (infoRec->pScrn,
-                                                               pbox->x1,
-                                                               pbox->y1,
-                                                               pbox->x1 + xMask,
-                                                               pbox->y1 + yMask,
-                                                               pbox->x2 -
-                                                               pbox->x1,
-                                                               pbox->y2 -
-                                                               pbox->y1);
-                pbox++;
-            }
-
-            SET_SYNC_FLAG(infoRec);
-            RegionUninit(&region);
-            return TRUE;
-        }
-    }
-    else {
-        formats = infoRec->CPUToScreenTextureFormats;
-        dstformats = infoRec->CPUToScreenTextureDstFormats;
-        if (!formats || !dstformats)
-            return FALSE;
-
-        w = pSrc->pDrawable->width;
-        h = pSrc->pDrawable->height;
-
-        if (pSrc->repeat) {
-            if ((infoRec->CPUToScreenTextureFlags & XAA_RENDER_NO_TILE) ||
-                ((infoRec->CPUToScreenTextureFlags &
-                  XAA_RENDER_POWER_OF_2_TILE_ONLY) &&
-                 ((h & (h - 1)) || (w & (w - 1))))) {
-                return FALSE;
-            }
-            flags |= XAA_RENDER_REPEAT;
-        }
-
-        while (*formats != pSrc->format) {
-            if (!(*formats))
-                return FALSE;
-            formats++;
-        }
-        while (*dstformats != pDst->format) {
-            if (!(*dstformats))
-                return FALSE;
-            dstformats++;
-        }
-
-        if (!miComputeCompositeRegion(&region, pSrc, pMask, pDst,
-                                      xSrc, ySrc, xMask, yMask, xDst, yDst,
-                                      width, height))
-            return TRUE;
-
-        nbox = RegionNumRects(&region);
-        pbox = RegionRects(&region);
-
-        if (!nbox) {
-            RegionUninit(&region);
-            return TRUE;
-        }
-
-        if (!(infoRec->SetupForCPUToScreenTexture2) (infoRec->pScrn,
-                                                     op, pSrc->format,
-                                                     pDst->format,
-                                                     ((PixmapPtr)
-                                                      (pSrc->pDrawable))->
-                                                     devPrivate.ptr,
-                                                     ((PixmapPtr)
-                                                      (pSrc->pDrawable))->
-                                                     devKind, w, h, flags)) {
-            RegionUninit(&region);
-            return FALSE;
-        }
-
-        xSrc -= xDst;
-        ySrc -= yDst;
-
-        while (nbox--) {
-            (*infoRec->SubsequentCPUToScreenTexture) (infoRec->pScrn,
-                                                      pbox->x1, pbox->y1,
-                                                      pbox->x1 + xSrc,
-                                                      pbox->y1 + ySrc,
-                                                      pbox->x2 - pbox->x1,
-                                                      pbox->y2 - pbox->y1);
-            pbox++;
-        }
-
-        SET_SYNC_FLAG(infoRec);
-        RegionUninit(&region);
-        return TRUE;
-    }
-
-    return FALSE;
-}
-
-static void
-XAACompositeSrcCopy(PicturePtr pSrc,
-                    PicturePtr pDst,
-                    INT16 xSrc,
-                    INT16 ySrc,
-                    INT16 xDst, INT16 yDst, CARD16 width, CARD16 height)
-{
-    ScreenPtr pScreen = pDst->pDrawable->pScreen;
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCREEN(pScreen);
-    int i, nbox;
-    int xoff, yoff;
-    BoxPtr pbox;
-    DDXPointPtr pptSrc;
-    RegionRec region;
-
-    xDst += pDst->pDrawable->x;
-    yDst += pDst->pDrawable->y;
-    xSrc += pSrc->pDrawable->x;
-    ySrc += pSrc->pDrawable->y;
-
-    if (!miComputeCompositeRegion(&region, pSrc, NULL, pDst,
-                                  xSrc, ySrc, 0, 0, xDst, yDst, width, height))
-        return;
-
-    nbox = RegionNumRects(&region);
-    pbox = RegionRects(&region);
-
-    if (!nbox) {
-        RegionUninit(&region);
-        return;
-    }
-    pptSrc = malloc(sizeof(DDXPointRec) * nbox);
-    if (!pptSrc) {
-        RegionUninit(&region);
-        return;
-    }
-    xoff = xSrc - xDst;
-    yoff = ySrc - yDst;
-    for (i = 0; i < nbox; i++) {
-        pptSrc[i].x = pbox[i].x1 + xoff;
-        pptSrc[i].y = pbox[i].y1 + yoff;
-    }
-
-    infoRec->ScratchGC.planemask = ~0L;
-    infoRec->ScratchGC.alu = GXcopy;
-
-    XAADoBitBlt(pSrc->pDrawable, pDst->pDrawable, &infoRec->ScratchGC, &region,
-                pptSrc);
-
-    free(pptSrc);
-    RegionUninit(&region);
-    return;
-}
-
-void
-XAAComposite(CARD8 op,
-             PicturePtr pSrc,
-             PicturePtr pMask,
-             PicturePtr pDst,
-             INT16 xSrc,
-             INT16 ySrc,
-             INT16 xMask,
-             INT16 yMask, INT16 xDst, INT16 yDst, CARD16 width, CARD16 height)
-{
-    ScreenPtr pScreen = pDst->pDrawable->pScreen;
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCREEN(pScreen);
-
-    XAA_RENDER_PROLOGUE(pScreen, Composite);
-
-    if (!pMask && infoRec->pScrn->vtSema &&
-        infoRec->ScreenToScreenBitBlt &&
-        pSrc->pDrawable &&
-        DRAWABLE_IS_ON_CARD(pSrc->pDrawable) &&
-        DRAWABLE_IS_ON_CARD(pDst->pDrawable) &&
-        !pSrc->transform &&
-        (!pSrc->repeat || (xSrc >= 0 && ySrc >= 0 &&
-                           xSrc + width <= pSrc->pDrawable->width &&
-                           ySrc + height <= pSrc->pDrawable->height)) &&
-        ((op == PictOpSrc &&
-          ((pSrc->format == pDst->format) ||
-           (pSrc->format == PICT_a8r8g8b8 && pDst->format == PICT_x8r8g8b8) ||
-           (pSrc->format == PICT_a8b8g8r8 && pDst->format == PICT_x8b8g8r8))) ||
-         (op == PictOpOver && !pSrc->alphaMap && !pDst->alphaMap &&
-          pSrc->format == pDst->format &&
-          (pSrc->format == PICT_x8r8g8b8 || pSrc->format == PICT_x8b8g8r8)))) {
-        XAACompositeSrcCopy(pSrc, pDst, xSrc, ySrc, xDst, yDst, width, height);
-    }
-    else if (!pSrc->pDrawable || (pMask && !pMask->pDrawable) ||
-             !infoRec->Composite ||
-             !(*infoRec->Composite) (op, pSrc, pMask, pDst,
-                                     xSrc, ySrc, xMask, yMask, xDst, yDst,
-                                     width, height)) {
-        if (infoRec->pScrn->vtSema &&
-            ((pSrc->pDrawable &&
-              (pSrc->pDrawable->type == DRAWABLE_WINDOW ||
-               IS_OFFSCREEN_PIXMAP(pSrc->pDrawable))) ||
-             pDst->pDrawable->type == DRAWABLE_WINDOW ||
-             IS_OFFSCREEN_PIXMAP(pDst->pDrawable))) {
-            SYNC_CHECK(pDst->pDrawable);
-        }
-        (*GetPictureScreen(pScreen)->Composite) (op,
-                                                 pSrc,
-                                                 pMask,
-                                                 pDst,
-                                                 xSrc,
-                                                 ySrc,
-                                                 xMask,
-                                                 yMask,
-                                                 xDst, yDst, width, height);
-    }
-
-    if (pDst->pDrawable->type == DRAWABLE_PIXMAP)
-        (XAA_GET_PIXMAP_PRIVATE((PixmapPtr) (pDst->pDrawable)))->flags |= DIRTY;
-
-    XAA_RENDER_EPILOGUE(pScreen, Composite, XAAComposite);
-}
-
-Bool
-XAADoGlyphs(CARD8 op,
-            PicturePtr pSrc,
-            PicturePtr pDst,
-            PictFormatPtr maskFormat,
-            INT16 xSrc,
-            INT16 ySrc, int nlist, GlyphListPtr list, GlyphPtr * glyphs)
-{
-    ScreenPtr pScreen = pDst->pDrawable->pScreen;
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCREEN(pScreen);
-
-    if (!RegionNumRects(pDst->pCompositeClip))
-        return TRUE;
-
-    if (!infoRec->pScrn->vtSema ||
-        ((pDst->pDrawable->type != DRAWABLE_WINDOW) &&
-         !IS_OFFSCREEN_PIXMAP(pDst->pDrawable)))
-        return FALSE;
-
-    if ((pSrc->pDrawable->type != DRAWABLE_PIXMAP) ||
-        IS_OFFSCREEN_PIXMAP(pSrc->pDrawable))
-        return FALSE;
-
-    /*
-     * If it looks like we have a chance of being able to draw these
-     * glyphs with an accelerated Composite, do that now to avoid
-     * unneeded and costly syncs.
-     */
-    if (maskFormat) {
-        if (!infoRec->CPUToScreenAlphaTextureFormats)
-            return FALSE;
-    }
-    else {
-        if (!infoRec->CPUToScreenTextureFormats)
-            return FALSE;
-    }
-
-    miGlyphs(op, pSrc, pDst, maskFormat, xSrc, ySrc, nlist, list, glyphs);
-
-    return TRUE;
-}
-
-void
-XAAGlyphs(CARD8 op,
-          PicturePtr pSrc,
-          PicturePtr pDst,
-          PictFormatPtr maskFormat,
-          INT16 xSrc,
-          INT16 ySrc, int nlist, GlyphListPtr list, GlyphPtr * glyphs)
-{
-    ScreenPtr pScreen = pDst->pDrawable->pScreen;
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCREEN(pScreen);
-
-    XAA_RENDER_PROLOGUE(pScreen, Glyphs);
-
-    if (!pSrc->pDrawable || !infoRec->Glyphs ||
-        !(*infoRec->Glyphs) (op, pSrc, pDst, maskFormat,
-                             xSrc, ySrc, nlist, list, glyphs)) {
-        if (infoRec->pScrn->vtSema &&
-            ((pSrc->pDrawable &&
-              (pSrc->pDrawable->type == DRAWABLE_WINDOW ||
-               IS_OFFSCREEN_PIXMAP(pSrc->pDrawable))) ||
-             pDst->pDrawable->type == DRAWABLE_WINDOW ||
-             IS_OFFSCREEN_PIXMAP(pDst->pDrawable))) {
-            SYNC_CHECK(pDst->pDrawable);
-        }
-        (*GetPictureScreen(pScreen)->Glyphs) (op, pSrc, pDst, maskFormat,
-                                              xSrc, ySrc, nlist, list, glyphs);
-    }
-
-    if (pDst->pDrawable->type == DRAWABLE_PIXMAP)
-        (XAA_GET_PIXMAP_PRIVATE((PixmapPtr) (pDst->pDrawable)))->flags |= DIRTY;
-
-    XAA_RENDER_EPILOGUE(pScreen, Glyphs, XAAGlyphs);
-}
diff --git a/hw/xfree86/xaa/xaaROP.c b/hw/xfree86/xaa/xaaROP.c
deleted file mode 100644
index 3b6ec93..0000000
--- a/hw/xfree86/xaa/xaaROP.c
+++ /dev/null
@@ -1,182 +0,0 @@
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include <X11/X.h>
-#include "misc.h"
-#include "xf86.h"
-#include "xf86_OSproc.h"
-
-#include "scrnintstr.h"
-#include "xf86str.h"
-#include "xaarop.h"
-#include "xaa.h"
-#include "xaalocal.h"
-
-int XAACopyROP[16] = {
-    ROP_0,                      /* GXclear */
-    ROP_DSa,                    /* GXand */
-    ROP_SDna,                   /* GXandReverse */
-    ROP_S,                      /* GXcopy */
-    ROP_DSna,                   /* GXandInverted */
-    ROP_D,                      /* GXnoop */
-    ROP_DSx,                    /* GXxor */
-    ROP_DSo,                    /* GXor */
-    ROP_DSon,                   /* GXnor */
-    ROP_DSxn,                   /* GXequiv */
-    ROP_Dn,                     /* GXinvert */
-    ROP_SDno,                   /* GXorReverse */
-    ROP_Sn,                     /* GXcopyInverted */
-    ROP_DSno,                   /* GXorInverted */
-    ROP_DSan,                   /* GXnand */
-    ROP_1                       /* GXset */
-};
-
-int XAACopyROP_PM[16] = {
-    ROP_0,                      /* not used */
-    ROP_DSPnoa,
-    ROP_DPSnaon,
-    ROP_DPSDxax,
-    ROP_DPSana,
-    ROP_D,                      /* not used */
-    ROP_DPSax,
-    ROP_DPSao,
-    ROP_DPSaon,
-    ROP_DPSaxn,
-    ROP_Dn,                     /* not used */
-    ROP_DPSanan,
-    ROP_PSDPxox,                /* is that correct ? */
-    ROP_DPSnao,
-    ROP_DSPnoan,
-    ROP_1                       /* not used */
-};
-
-int XAAPatternROP[16] = {
-    ROP_0,
-    ROP_DPa,
-    ROP_PDna,
-    ROP_P,
-    ROP_DPna,
-    ROP_D,
-    ROP_DPx,
-    ROP_DPo,
-    ROP_DPon,
-    ROP_PDxn,
-    ROP_Dn,
-    ROP_PDno,
-    ROP_Pn,
-    ROP_DPno,
-    ROP_DPan,
-    ROP_1
-};
-
-int XAAPatternROP_PM[16] = {
-    ROP_DPna,
-    ROP_DPSnoa,
-    ROP_DSPnaon,
-    ROP_DSPDxax,
-    ROP_DPSana,
-    ROP_D,
-    ROP_DPSax,
-    ROP_DPSao,
-    ROP_DPSaon,
-    ROP_DPSaxn,
-    ROP_DPx,
-    ROP_DPSanan,
-    ROP_SPDSxox,                /* is that correct ? */
-    ROP_DSPnao,
-    ROP_DPSnoan,
-    ROP_DPo
-};
-
-int
-XAAGetCopyROP(int i)
-{
-    return XAACopyROP[i];
-}
-
-int
-XAAGetCopyROP_PM(int i)
-{
-    return XAACopyROP_PM[i];
-}
-
-int
-XAAGetPatternROP(int i)
-{
-    return XAAPatternROP[i];
-}
-
-int
-XAAGetPatternROP_PM(int i)
-{
-    return XAAPatternROP_PM[i];
-}
-
-int
-XAAHelpPatternROP(ScrnInfoPtr pScrn, int *fg, int *bg, int pm, int *rop)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    int ret = 0;
-
-    pm &= infoRec->FullPlanemasks[pScrn->depth - 1];
-
-    if (pm == infoRec->FullPlanemasks[pScrn->depth - 1]) {
-        if (!NO_SRC_ROP(*rop))
-            ret |= ROP_PAT;
-        *rop = XAAPatternROP[*rop];
-    }
-    else {
-        switch (*rop) {
-        case GXnoop:
-            break;
-        case GXset:
-        case GXclear:
-        case GXinvert:
-            ret |= ROP_PAT;
-            *fg = pm;
-            if (*bg != -1)
-                *bg = pm;
-            break;
-        default:
-            ret |= ROP_PAT | ROP_SRC;
-            break;
-        }
-        *rop = XAAPatternROP_PM[*rop];
-    }
-
-    return ret;
-}
-
-int
-XAAHelpSolidROP(ScrnInfoPtr pScrn, int *fg, int pm, int *rop)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    int ret = 0;
-
-    pm &= infoRec->FullPlanemasks[pScrn->depth - 1];
-
-    if (pm == infoRec->FullPlanemasks[pScrn->depth - 1]) {
-        if (!NO_SRC_ROP(*rop))
-            ret |= ROP_PAT;
-        *rop = XAAPatternROP[*rop];
-    }
-    else {
-        switch (*rop) {
-        case GXnoop:
-            break;
-        case GXset:
-        case GXclear:
-        case GXinvert:
-            ret |= ROP_PAT;
-            *fg = pm;
-            break;
-        default:
-            ret |= ROP_PAT | ROP_SRC;
-            break;
-        }
-        *rop = XAAPatternROP_PM[*rop];
-    }
-
-    return ret;
-}
diff --git a/hw/xfree86/xaa/xaaRect.c b/hw/xfree86/xaa/xaaRect.c
deleted file mode 100644
index 0020900..0000000
--- a/hw/xfree86/xaa/xaaRect.c
+++ /dev/null
@@ -1,121 +0,0 @@
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include "misc.h"
-#include "xf86.h"
-#include "xf86_OSproc.h"
-
-#include <X11/X.h>
-#include "scrnintstr.h"
-#include "pixmapstr.h"
-#include "xf86str.h"
-#include "xaa.h"
-#include "xaalocal.h"
-
-/*
-   Much of this file based on code by 
-	Harm Hanemaayer (H.Hanemaayer at inter.nl.net).
-*/
-
-void
-XAAPolyRectangleThinSolid(DrawablePtr pDrawable,
-                          GCPtr pGC, int nRectsInit, xRectangle *pRectsInit)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    int nClipRects;             /* number of clip rectangles */
-    BoxPtr pClipRects;          /* points to the list of clip rects */
-    int xOrigin;                /* Drawables x origin */
-    int yOrigin;                /* Drawables x origin */
-    xRectangle *pRect;          /* list of rects */
-    int nRects;                 /* running count of number of rects */
-    int origX1, origY1;         /* original rectangle's U/L corner */
-    int origX2, origY2;         /* original rectangle's L/R corner */
-    int clippedX1;              /* clipped rectangle's left x */
-    int clippedY1;              /* clipped rectangle's top y */
-    int clippedX2;              /* clipped rectangle's right x */
-    int clippedY2;              /* clipped rectangle's bottom y */
-    int clipXMin;               /* upper left corner of clip rect */
-    int clipYMin;               /* upper left corner of clip rect */
-    int clipXMax;               /* lower right corner of clip rect */
-    int clipYMax;               /* lower right corner of clip rect */
-    int width, height;          /* width and height of rect */
-
-    nClipRects = RegionNumRects(pGC->pCompositeClip);
-    pClipRects = RegionRects(pGC->pCompositeClip);
-
-    if (!nClipRects)
-        return;
-
-    xOrigin = pDrawable->x;
-    yOrigin = pDrawable->y;
-
-    (*infoRec->SetupForSolidLine) (infoRec->pScrn,
-                                   pGC->fgPixel, pGC->alu, pGC->planemask);
-
-    for (; nClipRects > 0; nClipRects--, pClipRects++) {
-        clipYMin = pClipRects->y1;
-        clipYMax = pClipRects->y2 - 1;
-        clipXMin = pClipRects->x1;
-        clipXMax = pClipRects->x2 - 1;
-
-        for (pRect = pRectsInit, nRects = nRectsInit;
-             nRects > 0; nRects--, pRect++) {
-            /* translate rectangle data over to the drawable */
-            origX1 = pRect->x + xOrigin;
-            origY1 = pRect->y + yOrigin;
-            origX2 = origX1 + pRect->width;
-            origY2 = origY1 + pRect->height;
-
-            /* reject entire rectangle if completely outside clip rect */
-            if ((origX1 > clipXMax) || (origX2 < clipXMin) ||
-                (origY1 > clipYMax) || (origY2 < clipYMin))
-                continue;
-
-            /* clip the rectangle */
-            clippedX1 = max(origX1, clipXMin);
-            clippedX2 = min(origX2, clipXMax);
-            clippedY1 = max(origY1, clipYMin);
-            clippedY2 = min(origY2, clipYMax);
-
-            width = clippedX2 - clippedX1 + 1;
-
-            if (origY1 >= clipYMin) {
-                (*infoRec->SubsequentSolidHorVertLine) (infoRec->pScrn,
-                                                        clippedX1, clippedY1,
-                                                        width, DEGREES_0);
-
-                /* don't overwrite corner */
-                clippedY1++;
-            }
-
-            if ((origY2 <= clipYMax) && (origY1 != origY2)) {
-                (*infoRec->SubsequentSolidHorVertLine) (infoRec->pScrn,
-                                                        clippedX1, clippedY2,
-                                                        width, DEGREES_0);
-
-                /* don't overwrite corner */
-                clippedY2--;
-            }
-
-            if (clippedY2 < clippedY1)
-                continue;
-
-            height = clippedY2 - clippedY1 + 1;
-
-            /* draw vertical edges using lines if not clipped out */
-            if (origX1 >= clipXMin)
-                (*infoRec->SubsequentSolidHorVertLine) (infoRec->pScrn,
-                                                        clippedX1, clippedY1,
-                                                        height, DEGREES_270);
-
-            if ((origX2 <= clipXMax) && (origX2 != origX1))
-                (*infoRec->SubsequentSolidHorVertLine) (infoRec->pScrn,
-                                                        clippedX2, clippedY1,
-                                                        height, DEGREES_270);
-        }
-    }
-
-    SET_SYNC_FLAG(infoRec);
-}
diff --git a/hw/xfree86/xaa/xaaSpans.c b/hw/xfree86/xaa/xaaSpans.c
deleted file mode 100644
index f03452a..0000000
--- a/hw/xfree86/xaa/xaaSpans.c
+++ /dev/null
@@ -1,876 +0,0 @@
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include "misc.h"
-#include "xf86.h"
-#include "xf86_OSproc.h"
-
-#include <X11/X.h>
-#include "scrnintstr.h"
-#include "pixmapstr.h"
-#include "xf86str.h"
-#include "mi.h"
-#include "mispans.h"
-#include "xaa.h"
-#include "xaalocal.h"
-
-static void XAARenderSolidSpans(GCPtr, int, DDXPointPtr, int *, int, int, int);
-static void XAARenderColor8x8Spans(GCPtr, int, DDXPointPtr, int *, int, int,
-                                   int);
-static void XAARenderMono8x8Spans(GCPtr, int, DDXPointPtr, int *, int, int,
-                                  int);
-static void XAARenderCacheBltSpans(GCPtr, int, DDXPointPtr, int *, int, int,
-                                   int);
-static void XAARenderColorExpandSpans(GCPtr, int, DDXPointPtr, int *, int, int,
-                                      int);
-static void XAARenderCacheExpandSpans(GCPtr, int, DDXPointPtr, int *, int, int,
-                                      int);
-static void XAARenderPixmapCopySpans(GCPtr, int, DDXPointPtr, int *, int, int,
-                                     int);
-
-void
-XAAFillSpans(DrawablePtr pDraw, GC * pGC, int nInit,    /* number of spans to fill */
-             DDXPointPtr pptInit,       /* pointer to list of start points */
-             int *pwidthInit,   /* pointer to list of n widths */
-             int fSorted)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    int type = 0;
-    ClipAndRenderSpansFunc function;
-    Bool fastClip = FALSE;
-
-    if ((nInit <= 0) || !pGC->planemask)
-        return;
-
-    if (!RegionNumRects(pGC->pCompositeClip))
-        return;
-
-    switch (pGC->fillStyle) {
-    case FillSolid:
-        type = DO_SOLID;
-        break;
-    case FillStippled:
-        type = (*infoRec->StippledFillChooser) (pGC);
-        break;
-    case FillOpaqueStippled:
-        if ((pGC->fgPixel == pGC->bgPixel) && infoRec->FillSpansSolid &&
-            CHECK_PLANEMASK(pGC, infoRec->FillSpansSolidFlags) &&
-            CHECK_ROP(pGC, infoRec->FillSpansSolidFlags) &&
-            CHECK_ROPSRC(pGC, infoRec->FillSpansSolidFlags) &&
-            CHECK_FG(pGC, infoRec->FillSpansSolidFlags))
-            type = DO_SOLID;
-        else
-            type = (*infoRec->OpaqueStippledFillChooser) (pGC);
-        break;
-    case FillTiled:
-        type = (*infoRec->TiledFillChooser) (pGC);
-        break;
-    }
-
-    switch (type) {
-    case DO_SOLID:
-        function = XAARenderSolidSpans;
-        if (infoRec->ClippingFlags & HARDWARE_CLIP_SOLID_FILL)
-            fastClip = TRUE;
-        break;
-    case DO_COLOR_8x8:
-        function = XAARenderColor8x8Spans;
-        if (infoRec->ClippingFlags & HARDWARE_CLIP_COLOR_8x8_FILL)
-            fastClip = TRUE;
-        break;
-    case DO_MONO_8x8:
-        function = XAARenderMono8x8Spans;
-        if (infoRec->ClippingFlags & HARDWARE_CLIP_MONO_8x8_FILL)
-            fastClip = TRUE;
-        break;
-    case DO_CACHE_BLT:
-        function = XAARenderCacheBltSpans;
-        if (infoRec->ClippingFlags & HARDWARE_CLIP_SCREEN_TO_SCREEN_COPY)
-            fastClip = TRUE;
-        break;
-    case DO_COLOR_EXPAND:
-        function = XAARenderColorExpandSpans;
-        break;
-    case DO_CACHE_EXPAND:
-        function = XAARenderCacheExpandSpans;
-        if (infoRec->ClippingFlags &
-            HARDWARE_CLIP_SCREEN_TO_SCREEN_COLOR_EXPAND)
-            fastClip = TRUE;
-        break;
-    case DO_PIXMAP_COPY:
-        function = XAARenderPixmapCopySpans;
-        if (infoRec->ClippingFlags & HARDWARE_CLIP_SCREEN_TO_SCREEN_COPY)
-            fastClip = TRUE;
-        break;
-    case DO_IMAGE_WRITE:
-    default:
-        (*XAAFallbackOps.FillSpans) (pDraw, pGC, nInit, pptInit,
-                                     pwidthInit, fSorted);
-        return;
-    }
-
-    if ((nInit < 10) || (RegionNumRects(pGC->pCompositeClip) != 1))
-        fastClip = FALSE;
-
-    if (fastClip) {
-        infoRec->ClipBox = &pGC->pCompositeClip->extents;
-        (*function) (pGC, nInit, pptInit, pwidthInit, fSorted,
-                     pDraw->x, pDraw->y);
-        infoRec->ClipBox = NULL;
-    }
-    else
-        XAAClipAndRenderSpans(pGC, pptInit, pwidthInit, nInit, fSorted,
-                              function, pDraw->x, pDraw->y);
-}
-
-        /*********************\
-	|     Solid Spans     |
-	\*********************/
-
-static void
-XAARenderSolidSpans(GCPtr pGC,
-                    int n,
-                    DDXPointPtr ppt,
-                    int *pwidth, int fSorted, int xorg, int yorg)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-
-    (*infoRec->FillSolidSpans) (infoRec->pScrn, pGC->fgPixel,
-                                pGC->alu, pGC->planemask, n, ppt, pwidth,
-                                fSorted);
-}
-
-        /************************\
-	|     Mono 8x8 Spans     |
-	\************************/
-
-static void
-XAARenderMono8x8Spans(GCPtr pGC,
-                      int n,
-                      DDXPointPtr ppt,
-                      int *pwidth, int fSorted, int xorg, int yorg)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    XAAPixmapPtr pPriv;
-    int fg, bg;
-
-    switch (pGC->fillStyle) {
-    case FillStippled:
-        pPriv = XAA_GET_PIXMAP_PRIVATE(pGC->stipple);
-        fg = pGC->fgPixel;
-        bg = -1;
-        break;
-    case FillOpaqueStippled:
-        pPriv = XAA_GET_PIXMAP_PRIVATE(pGC->stipple);
-        fg = pGC->fgPixel;
-        bg = pGC->bgPixel;
-        break;
-    case FillTiled:
-        pPriv = XAA_GET_PIXMAP_PRIVATE(pGC->tile.pixmap);
-        fg = pPriv->fg;
-        bg = pPriv->bg;
-        break;
-    default:                   /* Muffle compiler */
-        pPriv = NULL;           /* Kaboom */
-        fg = -1;
-        bg = -1;
-        break;
-    }
-
-    (*infoRec->FillMono8x8PatternSpans) (infoRec->pScrn,
-                                         fg, bg, pGC->alu, pGC->planemask,
-                                         n, ppt, pwidth, fSorted,
-                                         pPriv->pattern0, pPriv->pattern1,
-                                         (xorg + pGC->patOrg.x),
-                                         (yorg + pGC->patOrg.y));
-}
-
-        /*************************\
-	|     Color 8x8 Spans     |
-	\*************************/
-
-static void
-XAARenderColor8x8Spans(GCPtr pGC,
-                       int n,
-                       DDXPointPtr ppt,
-                       int *pwidth, int fSorted, int xorg, int yorg)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    XAACacheInfoPtr pCache;
-    PixmapPtr pPix;
-    int fg, bg;
-
-    switch (pGC->fillStyle) {
-    case FillStippled:
-        pPix = pGC->stipple;
-        fg = pGC->fgPixel;
-        bg = -1;
-        break;
-    case FillOpaqueStippled:
-        pPix = pGC->stipple;
-        fg = pGC->fgPixel;
-        bg = pGC->bgPixel;
-        break;
-    case FillTiled:
-        pPix = pGC->tile.pixmap;
-        fg = -1;
-        bg = -1;
-        break;
-    default:                   /* Muffle compiler */
-        pPix = NULL;
-        fg = -1;
-        bg = -1;
-        break;
-    }
-
-    pCache = (*infoRec->CacheColor8x8Pattern) (infoRec->pScrn, pPix, fg, bg);
-
-    (*infoRec->FillColor8x8PatternSpans) (infoRec->pScrn,
-                                          pGC->alu, pGC->planemask, n, ppt,
-                                          pwidth, fSorted, pCache,
-                                          (yorg + pGC->patOrg.x),
-                                          (xorg + pGC->patOrg.y));
-}
-
-        /****************************\
-	|     Color Expand Spans     |
-	\****************************/
-
-static void
-XAARenderColorExpandSpans(GCPtr pGC,
-                          int n,
-                          DDXPointPtr ppt,
-                          int *pwidth, int fSorted, int xorg, int yorg)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    int fg, bg;
-
-    switch (pGC->fillStyle) {
-    case FillStippled:
-        fg = pGC->fgPixel;
-        bg = -1;
-        break;
-    case FillOpaqueStippled:
-        fg = pGC->fgPixel;
-        bg = pGC->bgPixel;
-        break;
-    default:                   /* Muffle compiler */
-        fg = -1;
-        bg = -1;
-        break;
-    }
-
-    (*infoRec->FillColorExpandSpans) (infoRec->pScrn, fg, bg,
-                                      pGC->alu, pGC->planemask, n, ppt, pwidth,
-                                      fSorted, (xorg + pGC->patOrg.x),
-                                      (yorg + pGC->patOrg.y), pGC->stipple);
-
-}
-
-        /*************************\
-	|     Cache Blt Spans     |
-	\*************************/
-
-static void
-XAARenderCacheBltSpans(GCPtr pGC,
-                       int n,
-                       DDXPointPtr ppt,
-                       int *pwidth, int fSorted, int xorg, int yorg)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    XAACacheInfoPtr pCache;
-
-    switch (pGC->fillStyle) {
-    case FillStippled:
-        pCache = (*infoRec->CacheStipple) (infoRec->pScrn, pGC->stipple,
-                                           pGC->fgPixel, -1);
-        break;
-    case FillOpaqueStippled:
-        pCache = (*infoRec->CacheStipple) (infoRec->pScrn, pGC->stipple,
-                                           pGC->fgPixel, pGC->bgPixel);
-        break;
-    case FillTiled:
-        pCache = (*infoRec->CacheTile) (infoRec->pScrn, pGC->tile.pixmap);
-        break;
-    default:                   /* Muffle compiler */
-        pCache = NULL;
-        break;
-    }
-
-    (*infoRec->FillCacheBltSpans) (infoRec->pScrn,
-                                   pGC->alu, pGC->planemask, n, ppt, pwidth,
-                                   fSorted, pCache, (xorg + pGC->patOrg.x),
-                                   (yorg + pGC->patOrg.y));
-
-}
-
-        /****************************\
-	|     Cache Expand Spans     |
-	\****************************/
-
-static void
-XAARenderCacheExpandSpans(GCPtr pGC,
-                          int n,
-                          DDXPointPtr ppt,
-                          int *pwidth, int fSorted, int xorg, int yorg)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    int fg, bg;
-
-    switch (pGC->fillStyle) {
-    case FillStippled:
-        fg = pGC->fgPixel;
-        bg = -1;
-        break;
-    case FillOpaqueStippled:
-        fg = pGC->fgPixel;
-        bg = pGC->bgPixel;
-        break;
-    default:                   /* Muffle compiler */
-        fg = -1;
-        bg = -1;
-        break;
-    }
-
-    (*infoRec->FillCacheExpandSpans) (infoRec->pScrn, fg, bg,
-                                      pGC->alu, pGC->planemask, n, ppt, pwidth,
-                                      fSorted, (xorg + pGC->patOrg.x),
-                                      (yorg + pGC->patOrg.y), pGC->stipple);
-}
-
-        /***************************\
-	|     Pixmap Copy Spans     |
-	\***************************/
-
-static void
-XAARenderPixmapCopySpans(GCPtr pGC,
-                         int n,
-                         DDXPointPtr ppt,
-                         int *pwidth, int fSorted, int xorg, int yorg)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    XAACacheInfoPtr pCache = &(infoRec->ScratchCacheInfoRec);
-    XAAPixmapPtr pPriv = XAA_GET_PIXMAP_PRIVATE(pGC->tile.pixmap);
-
-    pCache->x = pPriv->offscreenArea->box.x1;
-    pCache->y = pPriv->offscreenArea->box.y1;
-    pCache->w = pCache->orig_w = pPriv->offscreenArea->box.x2 - pCache->x;
-    pCache->h = pCache->orig_h = pPriv->offscreenArea->box.y2 - pCache->y;
-    pCache->trans_color = -1;
-
-    (*infoRec->FillCacheBltSpans) (infoRec->pScrn,
-                                   pGC->alu, pGC->planemask, n, ppt, pwidth,
-                                   fSorted, pCache, (xorg + pGC->patOrg.x),
-                                   (yorg + pGC->patOrg.y));
-}
-
-        /****************\
-	|     Solid      |
-	\****************/
-
-void
-XAAFillSolidSpans(ScrnInfoPtr pScrn,
-                  int fg, int rop,
-                  unsigned int planemask,
-                  int n, DDXPointPtr ppt, int *pwidth, int fSorted)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-
-    (*infoRec->SetupForSolidFill) (pScrn, fg, rop, planemask);
-
-    if (infoRec->ClipBox)
-        (*infoRec->SetClippingRectangle) (infoRec->pScrn,
-                                          infoRec->ClipBox->x1,
-                                          infoRec->ClipBox->y1,
-                                          infoRec->ClipBox->x2 - 1,
-                                          infoRec->ClipBox->y2 - 1);
-
-    while (n--) {
-        if (*pwidth > 0)
-            (*infoRec->SubsequentSolidFillRect) (pScrn, ppt->x, ppt->y,
-                                                 *pwidth, 1);
-        ppt++;
-        pwidth++;
-    }
-
-    if (infoRec->ClipBox)
-        (*infoRec->DisableClipping) (infoRec->pScrn);
-
-    SET_SYNC_FLAG(infoRec);
-}
-
-        /***************\
-	|   Mono 8x8    |
-	\***************/
-
-void
-XAAFillMono8x8PatternSpansScreenOrigin(ScrnInfoPtr pScrn,
-                                       int fg, int bg, int rop,
-                                       unsigned int planemask,
-                                       int n,
-                                       DDXPointPtr ppt,
-                                       int *pwidth, int fSorted,
-                                       int pattern0, int pattern1,
-                                       int xorigin, int yorigin)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    int patx = pattern0, paty = pattern1;
-    int xorg = (-xorigin) & 0x07;
-    int yorg = (-yorigin) & 0x07;
-
-    if (infoRec->Mono8x8PatternFillFlags & HARDWARE_PATTERN_PROGRAMMED_BITS) {
-        if (!(infoRec->Mono8x8PatternFillFlags &
-              HARDWARE_PATTERN_PROGRAMMED_ORIGIN)) {
-            XAARotateMonoPattern(&patx, &paty, xorg, yorg,
-                                 (infoRec->Mono8x8PatternFillFlags &
-                                  BIT_ORDER_IN_BYTE_MSBFIRST));
-            xorg = patx;
-            yorg = paty;
-        }
-    }
-    else {
-        XAACacheInfoPtr pCache =
-            (*infoRec->CacheMono8x8Pattern) (pScrn, pattern0, pattern1);
-        patx = pCache->x;
-        paty = pCache->y;
-        if (!(infoRec->Mono8x8PatternFillFlags &
-              HARDWARE_PATTERN_PROGRAMMED_ORIGIN)) {
-            int slot = (yorg << 3) + xorg;
-
-            patx += pCache->offsets[slot].x;
-            paty += pCache->offsets[slot].y;
-            xorg = patx;
-            yorg = paty;
-        }
-    }
-
-    (*infoRec->SetupForMono8x8PatternFill) (pScrn, patx, paty,
-                                            fg, bg, rop, planemask);
-
-    if (infoRec->ClipBox)
-        (*infoRec->SetClippingRectangle) (infoRec->pScrn,
-                                          infoRec->ClipBox->x1,
-                                          infoRec->ClipBox->y1,
-                                          infoRec->ClipBox->x2 - 1,
-                                          infoRec->ClipBox->y2 - 1);
-
-    while (n--) {
-        (*infoRec->SubsequentMono8x8PatternFillRect) (pScrn,
-                                                      xorg, yorg, ppt->x,
-                                                      ppt->y, *pwidth, 1);
-        ppt++;
-        pwidth++;
-    }
-
-    if (infoRec->ClipBox)
-        (*infoRec->DisableClipping) (infoRec->pScrn);
-
-    SET_SYNC_FLAG(infoRec);
-}
-
-void
-XAAFillMono8x8PatternSpans(ScrnInfoPtr pScrn,
-                           int fg, int bg, int rop,
-                           unsigned int planemask,
-                           int n,
-                           DDXPointPtr ppt,
-                           int *pwidth, int fSorted,
-                           int pattern0, int pattern1, int xorigin, int yorigin)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    int patx = pattern0, paty = pattern1;
-    int xorg, yorg, slot;
-    XAACacheInfoPtr pCache = NULL;
-
-    if (!(infoRec->Mono8x8PatternFillFlags & HARDWARE_PATTERN_PROGRAMMED_BITS)) {
-        pCache = (*infoRec->CacheMono8x8Pattern) (pScrn, pattern0, pattern1);
-        patx = pCache->x;
-        paty = pCache->y;
-    }
-
-    (*infoRec->SetupForMono8x8PatternFill) (pScrn, patx, paty,
-                                            fg, bg, rop, planemask);
-
-    if (infoRec->ClipBox)
-        (*infoRec->SetClippingRectangle) (infoRec->pScrn,
-                                          infoRec->ClipBox->x1,
-                                          infoRec->ClipBox->y1,
-                                          infoRec->ClipBox->x2 - 1,
-                                          infoRec->ClipBox->y2 - 1);
-
-    while (n--) {
-        xorg = (ppt->x - xorigin) & 0x07;
-        yorg = (ppt->y - yorigin) & 0x07;
-
-        if (!(infoRec->Mono8x8PatternFillFlags &
-              HARDWARE_PATTERN_PROGRAMMED_ORIGIN)) {
-            if (infoRec->Mono8x8PatternFillFlags &
-                HARDWARE_PATTERN_PROGRAMMED_BITS) {
-                patx = pattern0;
-                paty = pattern1;
-                XAARotateMonoPattern(&patx, &paty, xorg, yorg,
-                                     (infoRec->Mono8x8PatternFillFlags &
-                                      BIT_ORDER_IN_BYTE_MSBFIRST));
-                xorg = patx;
-                yorg = paty;
-            }
-            else {
-                slot = (yorg << 3) + xorg;
-                xorg = patx + pCache->offsets[slot].x;
-                yorg = paty + pCache->offsets[slot].y;
-            }
-        }
-
-        (*infoRec->SubsequentMono8x8PatternFillRect) (pScrn,
-                                                      xorg, yorg, ppt->x,
-                                                      ppt->y, *pwidth, 1);
-        ppt++;
-        pwidth++;
-    }
-
-    if (infoRec->ClipBox)
-        (*infoRec->DisableClipping) (infoRec->pScrn);
-
-    SET_SYNC_FLAG(infoRec);
-}
-
-        /****************\
-	|   Color 8x8    |
-	\****************/
-
-void
-XAAFillColor8x8PatternSpansScreenOrigin(ScrnInfoPtr pScrn,
-                                        int rop,
-                                        unsigned int planemask,
-                                        int n,
-                                        DDXPointPtr ppt,
-                                        int *pwidth, int fSorted,
-                                        XAACacheInfoPtr pCache,
-                                        int xorigin, int yorigin)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    int patx = pCache->x, paty = pCache->y;
-    int xorg = (-xorigin) & 0x07;
-    int yorg = (-yorigin) & 0x07;
-
-    if (!(infoRec->Color8x8PatternFillFlags &
-          HARDWARE_PATTERN_PROGRAMMED_ORIGIN)) {
-        int slot = (yorg << 3) + xorg;
-
-        paty += pCache->offsets[slot].y;
-        patx += pCache->offsets[slot].x;
-        xorg = patx;
-        yorg = paty;
-    }
-
-    (*infoRec->SetupForColor8x8PatternFill) (pScrn, patx, paty,
-                                             rop, planemask,
-                                             pCache->trans_color);
-
-    if (infoRec->ClipBox)
-        (*infoRec->SetClippingRectangle) (infoRec->pScrn,
-                                          infoRec->ClipBox->x1,
-                                          infoRec->ClipBox->y1,
-                                          infoRec->ClipBox->x2 - 1,
-                                          infoRec->ClipBox->y2 - 1);
-
-    while (n--) {
-        (*infoRec->SubsequentColor8x8PatternFillRect) (pScrn,
-                                                       xorg, yorg, ppt->x,
-                                                       ppt->y, *pwidth, 1);
-        ppt++;
-        pwidth++;
-    }
-
-    if (infoRec->ClipBox)
-        (*infoRec->DisableClipping) (infoRec->pScrn);
-
-    SET_SYNC_FLAG(infoRec);
-}
-
-void
-XAAFillColor8x8PatternSpans(ScrnInfoPtr pScrn,
-                            int rop,
-                            unsigned int planemask,
-                            int n,
-                            DDXPointPtr ppt,
-                            int *pwidth, int fSorted,
-                            XAACacheInfoPtr pCache, int xorigin, int yorigin)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    int xorg, yorg, slot;
-
-    (*infoRec->SetupForColor8x8PatternFill) (pScrn, pCache->x, pCache->y,
-                                             rop, planemask,
-                                             pCache->trans_color);
-
-    if (infoRec->ClipBox)
-        (*infoRec->SetClippingRectangle) (infoRec->pScrn,
-                                          infoRec->ClipBox->x1,
-                                          infoRec->ClipBox->y1,
-                                          infoRec->ClipBox->x2 - 1,
-                                          infoRec->ClipBox->y2 - 1);
-
-    while (n--) {
-        xorg = (ppt->x - xorigin) & 0x07;
-        yorg = (ppt->y - yorigin) & 0x07;
-
-        if (!(infoRec->Color8x8PatternFillFlags &
-              HARDWARE_PATTERN_PROGRAMMED_ORIGIN)) {
-            slot = (yorg << 3) + xorg;
-            yorg = pCache->y + pCache->offsets[slot].y;
-            xorg = pCache->x + pCache->offsets[slot].x;
-        }
-
-        (*infoRec->SubsequentColor8x8PatternFillRect) (pScrn,
-                                                       xorg, yorg, ppt->x,
-                                                       ppt->y, *pwidth, 1);
-        ppt++;
-        pwidth++;
-    }
-
-    if (infoRec->ClipBox)
-        (*infoRec->DisableClipping) (infoRec->pScrn);
-
-    SET_SYNC_FLAG(infoRec);
-}
-
-        /*****************\
-	|   Cache Blit    |
-	\*****************/
-
-void
-XAAFillCacheBltSpans(ScrnInfoPtr pScrn,
-                     int rop,
-                     unsigned int planemask,
-                     int n,
-                     DDXPointPtr ppt,
-                     int *pwidth,
-                     int fSorted, XAACacheInfoPtr pCache, int xorg, int yorg)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    int x, w, phaseX, phaseY, blit_w;
-
-    (*infoRec->SetupForScreenToScreenCopy) (pScrn, 1, 1, rop, planemask,
-                                            pCache->trans_color);
-
-    if (infoRec->ClipBox)
-        (*infoRec->SetClippingRectangle) (infoRec->pScrn,
-                                          infoRec->ClipBox->x1,
-                                          infoRec->ClipBox->y1,
-                                          infoRec->ClipBox->x2 - 1,
-                                          infoRec->ClipBox->y2 - 1);
-
-    while (n--) {
-        x = ppt->x;
-        w = *pwidth;
-        phaseX = (x - xorg) % pCache->orig_w;
-        if (phaseX < 0)
-            phaseX += pCache->orig_w;
-        phaseY = (ppt->y - yorg) % pCache->orig_h;
-        if (phaseY < 0)
-            phaseY += pCache->orig_h;
-
-        while (1) {
-            blit_w = pCache->w - phaseX;
-            if (blit_w > w)
-                blit_w = w;
-
-            (*infoRec->SubsequentScreenToScreenCopy) (pScrn,
-                                                      pCache->x + phaseX,
-                                                      pCache->y + phaseY, x,
-                                                      ppt->y, blit_w, 1);
-
-            w -= blit_w;
-            if (!w)
-                break;
-            x += blit_w;
-            phaseX = (phaseX + blit_w) % pCache->orig_w;
-        }
-        ppt++;
-        pwidth++;
-    }
-
-    if (infoRec->ClipBox)
-        (*infoRec->DisableClipping) (infoRec->pScrn);
-
-    SET_SYNC_FLAG(infoRec);
-}
-
-        /****************\
-	|  Cache Expand  |
-	\****************/
-
-void
-XAAFillCacheExpandSpans(ScrnInfoPtr pScrn,
-                        int fg, int bg, int rop,
-                        unsigned int planemask,
-                        int n,
-                        DDXPointPtr ppt,
-                        int *pwidth,
-                        int fSorted, int xorg, int yorg, PixmapPtr pPix)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    int x, w, phaseX, phaseY, blit_w, cacheWidth;
-    XAACacheInfoPtr pCache;
-
-    pCache = (*infoRec->CacheMonoStipple) (pScrn, pPix);
-
-    cacheWidth = (pCache->w * pScrn->bitsPerPixel) /
-        infoRec->CacheColorExpandDensity;
-
-    (*infoRec->SetupForScreenToScreenColorExpandFill) (pScrn, fg, bg, rop,
-                                                       planemask);
-
-    if (infoRec->ClipBox)
-        (*infoRec->SetClippingRectangle) (infoRec->pScrn,
-                                          infoRec->ClipBox->x1,
-                                          infoRec->ClipBox->y1,
-                                          infoRec->ClipBox->x2 - 1,
-                                          infoRec->ClipBox->y2 - 1);
-
-    while (n--) {
-        x = ppt->x;
-        w = *pwidth;
-        phaseX = (x - xorg) % pCache->orig_w;
-        if (phaseX < 0)
-            phaseX += pCache->orig_w;
-        phaseY = (ppt->y - yorg) % pCache->orig_h;
-        if (phaseY < 0)
-            phaseY += pCache->orig_h;
-
-        while (1) {
-            blit_w = cacheWidth - phaseX;
-            if (blit_w > w)
-                blit_w = w;
-
-            (*infoRec->SubsequentScreenToScreenColorExpandFill) (pScrn, x,
-                                                                 ppt->y, blit_w,
-                                                                 1, pCache->x,
-                                                                 pCache->y +
-                                                                 phaseY,
-                                                                 phaseX);
-
-            w -= blit_w;
-            if (!w)
-                break;
-            x += blit_w;
-            phaseX = (phaseX + blit_w) % pCache->orig_w;
-        }
-        ppt++;
-        pwidth++;
-    }
-
-    if (infoRec->ClipBox)
-        (*infoRec->DisableClipping) (infoRec->pScrn);
-
-    SET_SYNC_FLAG(infoRec);
-}
-
-void
-XAAClipAndRenderSpans(GCPtr pGC,
-                      DDXPointPtr ppt,
-                      int *pwidth,
-                      int nspans,
-                      int fSorted,
-                      ClipAndRenderSpansFunc func, int xorg, int yorg)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    DDXPointPtr pptNew, pptBase;
-    int *pwidthBase, *pwidthNew;
-    int Right, numRects, MaxBoxes;
-
-    MaxBoxes = infoRec->PreAllocSize / (sizeof(DDXPointRec) + sizeof(int));
-    pptBase = (DDXPointRec *) infoRec->PreAllocMem;
-    pwidthBase = (int *) (&pptBase[MaxBoxes]);
-
-    pptNew = pptBase;
-    pwidthNew = pwidthBase;
-
-    numRects = RegionNumRects(pGC->pCompositeClip);
-
-    if (numRects == 1) {
-        BoxPtr pextent = RegionRects(pGC->pCompositeClip);
-
-        while (nspans--) {
-            if ((pextent->y1 <= ppt->y) && (ppt->y < pextent->y2)) {
-                pptNew->x = max(pextent->x1, ppt->x);
-                Right = ppt->x + *pwidth;
-                *pwidthNew = min(pextent->x2, Right) - pptNew->x;
-
-                if (*pwidthNew > 0) {
-                    pptNew->y = ppt->y;
-                    pptNew++;
-                    pwidthNew++;
-
-                    if (pptNew >= (pptBase + MaxBoxes)) {
-                        (*func) (pGC, MaxBoxes, pptBase, pwidthBase, fSorted,
-                                 xorg, yorg);
-                        pptNew = pptBase;
-                        pwidthNew = pwidthBase;
-                    }
-                }
-            }
-            ppt++;
-            pwidth++;
-        }
-    }
-    else if (numRects) {
-        BoxPtr pbox;
-        int nbox;
-
-        while (nspans--) {
-            nbox = numRects;
-            pbox = RegionRects(pGC->pCompositeClip);
-
-            /* find the first band */
-            while (nbox && (pbox->y2 <= ppt->y)) {
-                pbox++;
-                nbox--;
-            }
-
-            if (nbox && (pbox->y1 <= ppt->y)) {
-                int orig_y = pbox->y1;
-
-                Right = ppt->x + *pwidth;
-                while (nbox && (orig_y == pbox->y1)) {
-                    if (pbox->x2 <= ppt->x) {
-                        nbox--;
-                        pbox++;
-                        continue;
-                    }
-
-                    if (pbox->x1 >= Right) {
-                        nbox = 0;
-                        break;
-                    }
-
-                    pptNew->x = max(pbox->x1, ppt->x);
-                    *pwidthNew = min(pbox->x2, Right) - pptNew->x;
-                    if (*pwidthNew > 0) {
-                        pptNew->y = ppt->y;
-                        pptNew++;
-                        pwidthNew++;
-
-                        if (pptNew >= (pptBase + MaxBoxes)) {
-                            (*func) (pGC, MaxBoxes, pptBase, pwidthBase,
-                                     fSorted, xorg, yorg);
-                            pptNew = pptBase;
-                            pwidthNew = pwidthBase;
-                        }
-                    }
-                    pbox++;
-                    nbox--;
-                }
-            }
-            ppt++;
-            pwidth++;
-        }
-    }
-
-    if (pptNew != pptBase)
-        (*func) (pGC, pptNew - pptBase, pptBase, pwidthBase, fSorted,
-                 xorg, yorg);
-}
diff --git a/hw/xfree86/xaa/xaaStateChange.c b/hw/xfree86/xaa/xaaStateChange.c
deleted file mode 100644
index cd2b601..0000000
--- a/hw/xfree86/xaa/xaaStateChange.c
+++ /dev/null
@@ -1,1665 +0,0 @@
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include "misc.h"
-#include "xf86.h"
-#include "xf86_OSproc.h"
-
-#include <X11/X.h>
-#include "scrnintstr.h"
-#include "pixmapstr.h"
-#include "windowstr.h"
-#include "xf86str.h"
-#include "mi.h"
-#include "miline.h"
-#include "xaa.h"
-#include "xaalocal.h"
-#include "xaawrap.h"
-#include "servermd.h"
-
-#define XAA_STATE_WRAP(func) do {\
-if(infoRec->func) { \
-   pStatePriv->func = infoRec->func;\
-   infoRec->func = XAAStateWrap##func;\
-}} while(0)
-
-/* Wrap all XAA functions and allocate our private structure.
- */
-
-typedef struct _XAAStateWrapRec {
-    ScrnInfoPtr pScrn;
-    void (*RestoreAccelState) (ScrnInfoPtr pScrn);
-    void (*Sync) (ScrnInfoPtr pScrn);
-    void (*SetupForScreenToScreenCopy) (ScrnInfoPtr pScrn, int xdir, int ydir,
-                                        int rop, unsigned int planemask,
-                                        int trans_color);
-    void (*SetupForSolidFill) (ScrnInfoPtr pScrn, int color, int rop,
-                               unsigned int planemask);
-    void (*SetupForSolidLine) (ScrnInfoPtr pScrn, int color, int rop,
-                               unsigned int planemask);
-    void (*SetupForDashedLine) (ScrnInfoPtr pScrn, int fg, int bg, int rop,
-                                unsigned int planemask, int length,
-                                unsigned char *pattern);
-    void (*SetClippingRectangle) (ScrnInfoPtr pScrn, int left, int top,
-                                  int right, int bottom);
-    void (*DisableClipping) (ScrnInfoPtr pScrn);
-    void (*SetupForMono8x8PatternFill) (ScrnInfoPtr pScrn, int patx, int paty,
-                                        int fg, int bg, int rop,
-                                        unsigned int planemask);
-    void (*SetupForColor8x8PatternFill) (ScrnInfoPtr pScrn, int patx, int paty,
-                                         int rop, unsigned int planemask,
-                                         int transparency_color);
-    void (*SetupForCPUToScreenColorExpandFill) (ScrnInfoPtr pScrn, int fg,
-                                                int bg, int rop,
-                                                unsigned int planemask);
-    void (*SetupForScanlineCPUToScreenColorExpandFill) (ScrnInfoPtr pScrn,
-                                                        int fg, int bg, int rop,
-                                                        unsigned int planemask);
-    void (*SetupForScreenToScreenColorExpandFill) (ScrnInfoPtr pScrn,
-                                                   int fg, int bg, int rop,
-                                                   unsigned int planemask);
-    void (*SetupForImageWrite) (ScrnInfoPtr pScrn, int rop,
-                                unsigned int planemask, int transparency_color,
-                                int bpp, int depth);
-    void (*SetupForScanlineImageWrite) (ScrnInfoPtr pScrn, int rop,
-                                        unsigned int planemask,
-                                        int transparency_color,
-                                        int bpp, int depth);
-    void (*SetupForImageRead) (ScrnInfoPtr pScrn, int bpp, int depth);
-    void (*ScreenToScreenBitBlt) (ScrnInfoPtr pScrn, int nbox,
-                                  DDXPointPtr pptSrc, BoxPtr pbox, int xdir,
-                                  int ydir, int alu, unsigned int planmask);
-    void (*WriteBitmap) (ScrnInfoPtr pScrn, int x, int y, int w, int h,
-                         unsigned char *src, int srcwidth, int skipleft,
-                         int fg, int bg, int rop, unsigned int planemask);
-    void (*FillSolidRects) (ScrnInfoPtr pScrn, int fg, int rop,
-                            unsigned int planemask, int nBox, BoxPtr pBox);
-    void (*FillMono8x8PatternRects) (ScrnInfoPtr pScrn, int fg, int bg, int rop,
-                                     unsigned int planemask, int nBox,
-                                     BoxPtr pBox, int pat0, int pat1,
-                                     int xorg, int yorg);
-    void (*FillColor8x8PatternRects) (ScrnInfoPtr pScrn, int rop,
-                                      unsigned int planemask, int nBox,
-                                      BoxPtr pBox, int xorg, int yorg,
-                                      XAACacheInfoPtr pCache);
-    void (*FillCacheBltRects) (ScrnInfoPtr pScrn, int rop,
-                               unsigned int planemask, int nBox, BoxPtr pBox,
-                               int xorg, int yorg, XAACacheInfoPtr pCache);
-    void (*FillColorExpandRects) (ScrnInfoPtr pScrn, int fg, int bg, int rop,
-                                  unsigned int planemask, int nBox,
-                                  BoxPtr pBox, int xorg, int yorg,
-                                  PixmapPtr pPix);
-    void (*FillCacheExpandRects) (ScrnInfoPtr pScrn, int fg, int bg, int rop,
-                                  unsigned int planemask, int nBox, BoxPtr pBox,
-                                  int xorg, int yorg, PixmapPtr pPix);
-    void (*FillImageWriteRects) (ScrnInfoPtr pScrn, int rop,
-                                 unsigned int planemask, int nBox, BoxPtr pBox,
-                                 int xorg, int yorg, PixmapPtr pPix);
-    void (*FillSolidSpans) (ScrnInfoPtr pScrn, int fg, int rop,
-                            unsigned int planemask, int n, DDXPointPtr points,
-                            int *widths, int fSorted);
-    void (*FillMono8x8PatternSpans) (ScrnInfoPtr pScrn, int fg, int bg, int rop,
-                                     unsigned int planemask, int n,
-                                     DDXPointPtr points, int *widths,
-                                     int fSorted, int pat0, int pat1,
-                                     int xorg, int yorg);
-    void (*FillColor8x8PatternSpans) (ScrnInfoPtr pScrn, int rop,
-                                      unsigned int planemask, int n,
-                                      DDXPointPtr points, int *widths,
-                                      int fSorted, XAACacheInfoPtr pCache,
-                                      int xorg, int yorg);
-    void (*FillCacheBltSpans) (ScrnInfoPtr pScrn, int rop,
-                               unsigned int planemask, int n,
-                               DDXPointPtr points, int *widths, int fSorted,
-                               XAACacheInfoPtr pCache, int xorg, int yorg);
-    void (*FillColorExpandSpans) (ScrnInfoPtr pScrn, int fg, int bg, int rop,
-                                  unsigned int planemask, int n,
-                                  DDXPointPtr points, int *widths, int fSorted,
-                                  int xorg, int yorg, PixmapPtr pPix);
-    void (*FillCacheExpandSpans) (ScrnInfoPtr pScrn, int fg, int bg, int rop,
-                                  unsigned int planemask, int n,
-                                  DDXPointPtr ppt, int *pwidth, int fSorted,
-                                  int xorg, int yorg, PixmapPtr pPix);
-    void (*TEGlyphRenderer) (ScrnInfoPtr pScrn, int x, int y, int w, int h,
-                             int skipleft, int startline, unsigned int **glyphs,
-                             int glyphWidth, int fg, int bg, int rop,
-                             unsigned planemask);
-    void (*NonTEGlyphRenderer) (ScrnInfoPtr pScrn, int x, int y, int n,
-                                NonTEGlyphPtr glyphs, BoxPtr pbox, int fg,
-                                int rop, unsigned int planemask);
-    void (*WritePixmap) (ScrnInfoPtr pScrn, int x, int y, int w, int h,
-                         unsigned char *src, int srcwidth, int rop,
-                         unsigned int planemask, int transparency_color,
-                         int bpp, int depth);
-    void (*ReadPixmap) (ScrnInfoPtr pScrn, int x, int y, int w, int h,
-                        unsigned char *dst, int dstwidth, int bpp, int depth);
-    RegionPtr (*CopyArea) (DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable,
-                           GC * pGC, int srcx, int srcy, int width, int height,
-                           int dstx, int dsty);
-    RegionPtr (*CopyPlane) (DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
-                            int srcx, int srcy, int width, int height, int dstx,
-                            int dsty, unsigned long bitPlane);
-    void (*PushPixelsSolid) (GCPtr pGC, PixmapPtr pBitMap,
-                             DrawablePtr pDrawable, int dx, int dy, int xOrg,
-                             int yOrg);
-    void (*PolyFillRectSolid) (DrawablePtr pDraw, GCPtr pGC, int nrectFill,
-                               xRectangle *prectInit);
-    void (*PolyFillRectStippled) (DrawablePtr pDraw, GCPtr pGC, int nrectFill,
-                                  xRectangle *prectInit);
-    void (*PolyFillRectOpaqueStippled) (DrawablePtr pDraw, GCPtr pGC,
-                                        int nrectFill, xRectangle *prectInit);
-    void (*PolyFillRectTiled) (DrawablePtr pDraw, GCPtr pGC, int nrectFill,
-                               xRectangle *prectInit);
-    void (*FillSpansSolid) (DrawablePtr pDraw, GCPtr pGC, int nInit,
-                            DDXPointPtr ppt, int *pwidth, int fSorted);
-    void (*FillSpansStippled) (DrawablePtr pDraw, GCPtr pGC, int nInit,
-                               DDXPointPtr ppt, int *pwidth, int fSorted);
-    void (*FillSpansOpaqueStippled) (DrawablePtr pDraw, GCPtr pGC, int nInit,
-                                     DDXPointPtr ppt, int *pwidth, int fSorted);
-    void (*FillSpansTiled) (DrawablePtr pDraw, GCPtr pGC, int nInit,
-                            DDXPointPtr ppt, int *pwidth, int fSorted);
-    int (*PolyText8TE) (DrawablePtr pDraw, GCPtr pGC, int x, int y, int count,
-                        char *chars);
-    int (*PolyText16TE) (DrawablePtr pDraw, GCPtr pGC, int x, int y, int count,
-                         unsigned short *chars);
-    void (*ImageText8TE) (DrawablePtr pDraw, GCPtr pGC, int x, int y, int count,
-                          char *chars);
-    void (*ImageText16TE) (DrawablePtr pDraw, GCPtr pGC, int x, int y,
-                           int count, unsigned short *chars);
-    void (*ImageGlyphBltTE) (DrawablePtr pDrawable, GCPtr pGC, int xInit,
-                             int yInit, unsigned int nglyph, CharInfoPtr * ppci,
-                             pointer pglyphBase);
-    void (*PolyGlyphBltTE) (DrawablePtr pDrawable, GCPtr pGC, int xInit,
-                            int yInit, unsigned int nglyph, CharInfoPtr * ppci,
-                            pointer pglyphBase);
-    int (*PolyText8NonTE) (DrawablePtr pDraw, GCPtr pGC, int x, int y,
-                           int count, char *chars);
-    int (*PolyText16NonTE) (DrawablePtr pDraw, GCPtr pGC, int x, int y,
-                            int count, unsigned short *chars);
-    void (*ImageText8NonTE) (DrawablePtr pDraw, GCPtr pGC, int x, int y,
-                             int count, char *chars);
-    void (*ImageText16NonTE) (DrawablePtr pDraw, GCPtr pGC, int x, int y,
-                              int count, unsigned short *chars);
-    void (*ImageGlyphBltNonTE) (DrawablePtr pDrawable, GCPtr pGC, int xInit,
-                                int yInit, unsigned int nglyph,
-                                CharInfoPtr * ppci, pointer pglyphBase);
-    void (*PolyGlyphBltNonTE) (DrawablePtr pDrawable, GCPtr pGC, int xInit,
-                               int yInit, unsigned int nglyph,
-                               CharInfoPtr * ppci, pointer pglyphBase);
-    void (*PolyRectangleThinSolid) (DrawablePtr pDrawable, GCPtr pGC,
-                                    int nRectsInit, xRectangle *pRectsInit);
-    void (*PolylinesWideSolid) (DrawablePtr pDrawable, GCPtr pGC, int mode,
-                                int npt, DDXPointPtr pPts);
-    void (*PolylinesThinSolid) (DrawablePtr pDrawable, GCPtr pGC, int mode,
-                                int npt, DDXPointPtr pPts);
-    void (*PolySegmentThinSolid) (DrawablePtr pDrawable, GCPtr pGC, int nseg,
-                                  xSegment * pSeg);
-    void (*PolylinesThinDashed) (DrawablePtr pDrawable, GCPtr pGC, int mode,
-                                 int npt, DDXPointPtr pPts);
-    void (*PolySegmentThinDashed) (DrawablePtr pDrawable, GCPtr pGC, int nseg,
-                                   xSegment * pSeg);
-    void (*FillPolygonSolid) (DrawablePtr pDrawable, GCPtr pGC, int shape,
-                              int mode, int count, DDXPointPtr ptsIn);
-    void (*FillPolygonStippled) (DrawablePtr pDrawable, GCPtr pGC, int shape,
-                                 int mode, int count, DDXPointPtr ptsIn);
-    void (*FillPolygonOpaqueStippled) (DrawablePtr pDrawable, GCPtr pGC,
-                                       int shape, int mode, int count,
-                                       DDXPointPtr ptsIn);
-    void (*FillPolygonTiled) (DrawablePtr pDrawable, GCPtr pGC, int shape,
-                              int mode, int count, DDXPointPtr ptsIn);
-    void (*PolyFillArcSolid) (DrawablePtr pDraw, GCPtr pGC, int narcs,
-                              xArc * parcs);
-    void (*PutImage) (DrawablePtr pDraw, GCPtr pGC, int depth, int x, int y,
-                      int w, int h, int leftPad, int format, char *pImage);
-    ValidateGCProcPtr ValidateFillSpans;
-    ValidateGCProcPtr ValidateSetSpans;
-    ValidateGCProcPtr ValidatePutImage;
-    ValidateGCProcPtr ValidateCopyArea;
-    ValidateGCProcPtr ValidateCopyPlane;
-    ValidateGCProcPtr ValidatePolyPoint;
-    ValidateGCProcPtr ValidatePolylines;
-    ValidateGCProcPtr ValidatePolySegment;
-    ValidateGCProcPtr ValidatePolyRectangle;
-    ValidateGCProcPtr ValidatePolyArc;
-    ValidateGCProcPtr ValidateFillPolygon;
-    ValidateGCProcPtr ValidatePolyFillRect;
-    ValidateGCProcPtr ValidatePolyFillArc;
-    ValidateGCProcPtr ValidatePolyText8;
-    ValidateGCProcPtr ValidatePolyText16;
-    ValidateGCProcPtr ValidateImageText8;
-    ValidateGCProcPtr ValidateImageText16;
-    ValidateGCProcPtr ValidatePolyGlyphBlt;
-    ValidateGCProcPtr ValidateImageGlyphBlt;
-    ValidateGCProcPtr ValidatePushPixels;
-    void (*ComputeDash) (GCPtr pGC);
-    void (*InitPixmapCache) (ScreenPtr pScreen, RegionPtr areas, pointer data);
-    void (*ClosePixmapCache) (ScreenPtr pScreen);
-    int (*StippledFillChooser) (GCPtr pGC);
-    int (*OpaqueStippledFillChooser) (GCPtr pGC);
-    int (*TiledFillChooser) (GCPtr pGC);
-     XAACacheInfoPtr(*CacheTile) (ScrnInfoPtr Scrn, PixmapPtr pPix);
-     XAACacheInfoPtr(*CacheStipple) (ScrnInfoPtr Scrn, PixmapPtr pPix, int fg,
-                                     int bg);
-     XAACacheInfoPtr(*CacheMonoStipple) (ScrnInfoPtr Scrn, PixmapPtr pPix);
-     XAACacheInfoPtr(*CacheMono8x8Pattern) (ScrnInfoPtr Scrn, int pat0,
-                                            int pat1);
-     XAACacheInfoPtr(*CacheColor8x8Pattern) (ScrnInfoPtr Scrn, PixmapPtr pPix,
-                                             int fg, int bg);
-    void (*WriteBitmapToCache) (ScrnInfoPtr pScrn, int x, int y, int w, int h,
-                                unsigned char *src, int srcwidth, int fg,
-                                int bg);
-    void (*WritePixmapToCache) (ScrnInfoPtr pScrn, int x, int y, int w, int h,
-                                unsigned char *src, int srcwidth, int bpp,
-                                int depth);
-    void (*WriteMono8x8PatternToCache) (ScrnInfoPtr pScrn,
-                                        XAACacheInfoPtr pCache);
-    void (*WriteColor8x8PatternToCache) (ScrnInfoPtr pScrn, PixmapPtr pPix,
-                                         XAACacheInfoPtr pCache);
-    GetImageProcPtr GetImage;
-    GetSpansProcPtr GetSpans;
-    CopyWindowProcPtr CopyWindow;
-    Bool (*SetupForCPUToScreenAlphaTexture2) (ScrnInfoPtr pScrn, int op,
-                                              CARD16 red, CARD16 green,
-                                              CARD16 blue, CARD16 alpha,
-                                              CARD32 maskFormat,
-                                              CARD32 dstFormat, CARD8 *alphaPtr,
-                                              int alphaPitch, int width,
-                                              int height, int flags);
-    Bool (*SetupForCPUToScreenTexture2) (ScrnInfoPtr pScrn, int op,
-                                         CARD32 srcFormat, CARD32 dstFormat,
-                                         CARD8 *texPtr, int texPitch, int width,
-                                         int height, int flags);
-} XAAStateWrapRec, *XAAStateWrapPtr;
-
-static DevPrivateKeyRec XAAStateKeyRec;
-
-#define XAAStateKey (&XAAStateKeyRec)
-
-/* Wrap functions start here */
-#define GET_STATEPRIV_GC(pGC)   XAAStateWrapPtr pStatePriv =\
-(XAAStateWrapPtr)dixLookupPrivate(&(pGC)->pScreen->devPrivates, XAAStateKey)
-
-#define GET_STATEPRIV_SCREEN(pScreen)   XAAStateWrapPtr pStatePriv =\
-(XAAStateWrapPtr)dixLookupPrivate(&(pScreen)->devPrivates, XAAStateKey)
-
-#define GET_STATEPRIV_PSCRN(pScrn)   XAAStateWrapPtr pStatePriv =\
-(XAAStateWrapPtr)dixLookupPrivate(&(pScrn)->pScreen->devPrivates, XAAStateKey)
-
-#define STATE_CHECK_SP(pStatePriv) {\
-	ScrnInfoPtr pScrn = pStatePriv->pScrn;\
-	int i = 0;\
-	int need_change = 0;\
-	while(i < pScrn->numEntities) {\
-		if(xf86IsEntityShared(pScrn->entityList[i]) &&\
-		   xf86GetLastScrnFlag(pScrn->entityList[i]) != pScrn->scrnIndex) {\
-			need_change = 1;\
-			xf86SetLastScrnFlag(pScrn->entityList[i],\
-					    pScrn->scrnIndex);\
-		}\
-		i++;\
-	}\
-	if(need_change == 1) (*pStatePriv->RestoreAccelState)(pScrn);\
-}
-
-#define STATE_CHECK_PSCRN(pScrn) {\
-	int i = 0;\
-	int need_change = 0;\
-	while(i < pScrn->numEntities) {\
-		if(xf86IsEntityShared(pScrn->entityList[i]) &&\
-		   xf86GetLastScrnFlag(pScrn->entityList[i]) != pScrn->scrnIndex) {\
-			need_change = 1;\
-			xf86SetLastScrnFlag(pScrn->entityList[i],\
-					    pScrn->scrnIndex);\
-		}\
-		i++;\
-	}\
-	if(need_change == 1) (*pStatePriv->RestoreAccelState)(pScrn);\
-}
-
-static void
-XAAStateWrapSync(ScrnInfoPtr pScrn)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->Sync) (pScrn);
-}
-
-static void
-XAAStateWrapSetupForScreenToScreenCopy(ScrnInfoPtr pScrn, int xdir, int ydir,
-                                       int rop, unsigned int planemask,
-                                       int trans_color)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->SetupForScreenToScreenCopy) (pScrn, xdir, ydir, rop,
-                                               planemask, trans_color);
-}
-
-static void
-XAAStateWrapSetupForSolidFill(ScrnInfoPtr pScrn, int color, int rop,
-                              unsigned int planemask)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->SetupForSolidFill) (pScrn, color, rop, planemask);
-}
-
-static void
-XAAStateWrapSetupForSolidLine(ScrnInfoPtr pScrn, int color, int rop,
-                              unsigned int planemask)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->SetupForSolidLine) (pScrn, color, rop, planemask);
-}
-
-static void
-XAAStateWrapSetupForDashedLine(ScrnInfoPtr pScrn, int fg, int bg, int rop,
-                               unsigned int planemask, int length,
-                               unsigned char *pattern)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->SetupForDashedLine) (pScrn, fg, bg, rop, planemask, length,
-                                       pattern);
-}
-
-static void
-XAAStateWrapSetClippingRectangle(ScrnInfoPtr pScrn, int left, int top,
-                                 int right, int bottom)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->SetClippingRectangle) (pScrn, left, top, right, bottom);
-}
-
-static void
-XAAStateWrapDisableClipping(ScrnInfoPtr pScrn)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->DisableClipping) (pScrn);
-}
-
-static void
-XAAStateWrapSetupForMono8x8PatternFill(ScrnInfoPtr pScrn, int patx, int paty,
-                                       int fg, int bg, int rop,
-                                       unsigned int planemask)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->SetupForMono8x8PatternFill) (pScrn, patx, paty, fg, bg, rop,
-                                               planemask);
-}
-
-static void
-XAAStateWrapSetupForColor8x8PatternFill(ScrnInfoPtr pScrn, int patx, int paty,
-                                        int rop, unsigned int planemask,
-                                        int transparency_color)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->SetupForColor8x8PatternFill) (pScrn, patx, paty, rop,
-                                                planemask, transparency_color);
-}
-
-static void
-XAAStateWrapSetupForCPUToScreenColorExpandFill(ScrnInfoPtr pScrn, int fg,
-                                               int bg, int rop,
-                                               unsigned int planemask)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->SetupForCPUToScreenColorExpandFill) (pScrn, fg, bg, rop,
-                                                       planemask);
-}
-
-static void
-XAAStateWrapSetupForScanlineCPUToScreenColorExpandFill(ScrnInfoPtr pScrn,
-                                                       int fg, int bg,
-                                                       int rop,
-                                                       unsigned int planemask)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->SetupForScanlineCPUToScreenColorExpandFill) (pScrn, fg, bg,
-                                                               rop, planemask);
-}
-
-static void
-XAAStateWrapSetupForScreenToScreenColorExpandFill(ScrnInfoPtr pScrn,
-                                                  int fg, int bg, int rop,
-                                                  unsigned int planemask)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->SetupForScreenToScreenColorExpandFill) (pScrn, fg, bg, rop,
-                                                          planemask);
-}
-
-static void
-XAAStateWrapSetupForImageWrite(ScrnInfoPtr pScrn, int rop,
-                               unsigned int planemask, int transparency_color,
-                               int bpp, int depth)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->SetupForImageWrite) (pScrn, rop, planemask,
-                                       transparency_color, bpp, depth);
-}
-
-static void
-XAAStateWrapSetupForScanlineImageWrite(ScrnInfoPtr pScrn, int rop,
-                                       unsigned int planemask,
-                                       int transparency_color,
-                                       int bpp, int depth)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->SetupForScanlineImageWrite) (pScrn, rop, planemask,
-                                               transparency_color, bpp, depth);
-}
-
-static void
-XAAStateWrapSetupForImageRead(ScrnInfoPtr pScrn, int bpp, int depth)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->SetupForImageRead) (pScrn, bpp, depth);
-}
-
-static void
-XAAStateWrapScreenToScreenBitBlt(ScrnInfoPtr pScrn, int nbox,
-                                 DDXPointPtr pptSrc, BoxPtr pbox, int xdir,
-                                 int ydir, int alu, unsigned int planmask)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->ScreenToScreenBitBlt) (pScrn, nbox,
-                                         pptSrc, pbox, xdir,
-                                         ydir, alu, planmask);
-}
-
-static void
-XAAStateWrapWriteBitmap(ScrnInfoPtr pScrn, int x, int y, int w, int h,
-                        unsigned char *src, int srcwidth, int skipleft,
-                        int fg, int bg, int rop, unsigned int planemask)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->WriteBitmap) (pScrn, x, y, w, h,
-                                src, srcwidth, skipleft,
-                                fg, bg, rop, planemask);
-}
-
-static void
-XAAStateWrapFillSolidRects(ScrnInfoPtr pScrn, int fg, int rop,
-                           unsigned int planemask, int nBox, BoxPtr pBox)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->FillSolidRects) (pScrn, fg, rop, planemask, nBox, pBox);
-}
-
-static void
-XAAStateWrapFillMono8x8PatternRects(ScrnInfoPtr pScrn, int fg, int bg,
-                                    int rop, unsigned int planemask, int nBox,
-                                    BoxPtr pBox, int pat0, int pat1,
-                                    int xorg, int yorg)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->FillMono8x8PatternRects) (pScrn, fg, bg,
-                                            rop, planemask, nBox,
-                                            pBox, pat0, pat1, xorg, yorg);
-}
-
-static void
-XAAStateWrapFillColor8x8PatternRects(ScrnInfoPtr pScrn, int rop,
-                                     unsigned int planemask, int nBox,
-                                     BoxPtr pBox, int xorg, int yorg,
-                                     XAACacheInfoPtr pCache)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->FillColor8x8PatternRects) (pScrn, rop,
-                                             planemask, nBox,
-                                             pBox, xorg, yorg, pCache);
-}
-
-static void
-XAAStateWrapFillCacheBltRects(ScrnInfoPtr pScrn, int rop,
-                              unsigned int planemask, int nBox, BoxPtr pBox,
-                              int xorg, int yorg, XAACacheInfoPtr pCache)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->FillCacheBltRects) (pScrn, rop,
-                                      planemask, nBox, pBox,
-                                      xorg, yorg, pCache);
-}
-
-static void
-XAAStateWrapFillColorExpandRects(ScrnInfoPtr pScrn, int fg, int bg, int rop,
-                                 unsigned int planemask, int nBox,
-                                 BoxPtr pBox, int xorg, int yorg,
-                                 PixmapPtr pPix)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->FillColorExpandRects) (pScrn, fg, bg, rop,
-                                         planemask, nBox,
-                                         pBox, xorg, yorg, pPix);
-}
-
-static void
-XAAStateWrapFillCacheExpandRects(ScrnInfoPtr pScrn, int fg, int bg, int rop,
-                                 unsigned int planemask, int nBox,
-                                 BoxPtr pBox, int xorg, int yorg,
-                                 PixmapPtr pPix)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->FillCacheExpandRects) (pScrn, fg, bg, rop,
-                                         planemask, nBox,
-                                         pBox, xorg, yorg, pPix);
-}
-
-static void
-XAAStateWrapFillImageWriteRects(ScrnInfoPtr pScrn, int rop,
-                                unsigned int planemask, int nBox, BoxPtr pBox,
-                                int xorg, int yorg, PixmapPtr pPix)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->FillImageWriteRects) (pScrn, rop,
-                                        planemask, nBox, pBox,
-                                        xorg, yorg, pPix);
-}
-
-static void
-XAAStateWrapFillSolidSpans(ScrnInfoPtr pScrn, int fg, int rop,
-                           unsigned int planemask, int n, DDXPointPtr points,
-                           int *widths, int fSorted)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->FillSolidSpans) (pScrn, fg, rop,
-                                   planemask, n, points, widths, fSorted);
-}
-
-static void
-XAAStateWrapFillMono8x8PatternSpans(ScrnInfoPtr pScrn, int fg, int bg,
-                                    int rop, unsigned int planemask, int n,
-                                    DDXPointPtr points, int *widths,
-                                    int fSorted, int pat0, int pat1,
-                                    int xorg, int yorg)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->FillMono8x8PatternSpans) (pScrn, fg, bg,
-                                            rop, planemask, n,
-                                            points, widths,
-                                            fSorted, pat0, pat1, xorg, yorg);
-}
-
-static void
-XAAStateWrapFillColor8x8PatternSpans(ScrnInfoPtr pScrn, int rop,
-                                     unsigned int planemask, int n,
-                                     DDXPointPtr points, int *widths,
-                                     int fSorted, XAACacheInfoPtr pCache,
-                                     int xorg, int yorg)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->FillColor8x8PatternSpans) (pScrn, rop,
-                                             planemask, n,
-                                             points, widths,
-                                             fSorted, pCache, xorg, yorg);
-}
-
-static void
-XAAStateWrapFillCacheBltSpans(ScrnInfoPtr pScrn, int rop,
-                              unsigned int planemask, int n,
-                              DDXPointPtr points, int *widths,
-                              int fSorted, XAACacheInfoPtr pCache,
-                              int xorg, int yorg)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->FillCacheBltSpans) (pScrn, rop,
-                                      planemask, n,
-                                      points, widths,
-                                      fSorted, pCache, xorg, yorg);
-}
-
-static void
-XAAStateWrapFillColorExpandSpans(ScrnInfoPtr pScrn, int fg, int bg, int rop,
-                                 unsigned int planemask, int n,
-                                 DDXPointPtr points, int *widths, int fSorted,
-                                 int xorg, int yorg, PixmapPtr pPix)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->FillColorExpandSpans) (pScrn, fg, bg, rop,
-                                         planemask, n,
-                                         points, widths, fSorted,
-                                         xorg, yorg, pPix);
-}
-
-static void
-XAAStateWrapFillCacheExpandSpans(ScrnInfoPtr pScrn, int fg, int bg, int rop,
-                                 unsigned int planemask, int n,
-                                 DDXPointPtr ppt, int *pwidth, int fSorted,
-                                 int xorg, int yorg, PixmapPtr pPix)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->FillCacheExpandSpans) (pScrn, fg, bg, rop,
-                                         planemask, n,
-                                         ppt, pwidth, fSorted,
-                                         xorg, yorg, pPix);
-}
-
-static void
-XAAStateWrapTEGlyphRenderer(ScrnInfoPtr pScrn, int x, int y, int w, int h,
-                            int skipleft, int startline,
-                            unsigned int **glyphs,
-                            int glyphWidth, int fg, int bg, int rop,
-                            unsigned planemask)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->TEGlyphRenderer) (pScrn, x, y, w, h,
-                                    skipleft, startline,
-                                    glyphs, glyphWidth, fg, bg, rop, planemask);
-}
-
-static void
-XAAStateWrapNonTEGlyphRenderer(ScrnInfoPtr pScrn, int x, int y, int n,
-                               NonTEGlyphPtr glyphs, BoxPtr pbox,
-                               int fg, int rop, unsigned int planemask)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->NonTEGlyphRenderer) (pScrn, x, y, n,
-                                       glyphs, pbox, fg, rop, planemask);
-}
-
-static void
-XAAStateWrapWritePixmap(ScrnInfoPtr pScrn, int x, int y, int w, int h,
-                        unsigned char *src, int srcwidth, int rop,
-                        unsigned int planemask, int transparency_color,
-                        int bpp, int depth)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->WritePixmap) (pScrn, x, y, w, h,
-                                src, srcwidth, rop,
-                                planemask, transparency_color, bpp, depth);
-}
-
-static void
-XAAStateWrapReadPixmap(ScrnInfoPtr pScrn, int x, int y, int w, int h,
-                       unsigned char *dst, int dstwidth, int bpp, int depth)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->ReadPixmap) (pScrn, x, y, w, h, dst, dstwidth, bpp, depth);
-}
-
-static RegionPtr
-XAAStateWrapCopyArea(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable,
-                     GC * pGC, int srcx, int srcy, int width, int height,
-                     int dstx, int dsty)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    return (*pStatePriv->CopyArea) (pSrcDrawable, pDstDrawable,
-                                    pGC, srcx, srcy, width, height, dstx, dsty);
-}
-
-static RegionPtr
-XAAStateWrapCopyPlane(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
-                      int srcx, int srcy, int width, int height,
-                      int dstx, int dsty, unsigned long bitPlane)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    return (*pStatePriv->CopyPlane) (pSrc, pDst, pGC,
-                                     srcx, srcy, width, height,
-                                     dstx, dsty, bitPlane);
-}
-
-static void
-XAAStateWrapPushPixelsSolid(GCPtr pGC, PixmapPtr pBitMap,
-                            DrawablePtr pDrawable, int dx, int dy, int xOrg,
-                            int yOrg)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->PushPixelsSolid) (pGC, pBitMap,
-                                    pDrawable, dx, dy, xOrg, yOrg);
-}
-
-static void
-XAAStateWrapPolyFillRectSolid(DrawablePtr pDraw, GCPtr pGC, int nrectFill,
-                              xRectangle *prectInit)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->PolyFillRectSolid) (pDraw, pGC, nrectFill, prectInit);
-}
-
-static void
-XAAStateWrapPolyFillRectStippled(DrawablePtr pDraw, GCPtr pGC, int nrectFill,
-                                 xRectangle *prectInit)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->PolyFillRectStippled) (pDraw, pGC, nrectFill, prectInit);
-}
-
-static void
-XAAStateWrapPolyFillRectOpaqueStippled(DrawablePtr pDraw, GCPtr pGC,
-                                       int nrectFill, xRectangle *prectInit)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->PolyFillRectOpaqueStippled) (pDraw, pGC,
-                                               nrectFill, prectInit);
-}
-
-static void
-XAAStateWrapPolyFillRectTiled(DrawablePtr pDraw, GCPtr pGC, int nrectFill,
-                              xRectangle *prectInit)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->PolyFillRectTiled) (pDraw, pGC, nrectFill, prectInit);
-}
-
-static void
-XAAStateWrapFillSpansSolid(DrawablePtr pDraw, GCPtr pGC, int nInit,
-                           DDXPointPtr ppt, int *pwidth, int fSorted)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->FillSpansSolid) (pDraw, pGC, nInit, ppt, pwidth, fSorted);
-}
-
-static void
-XAAStateWrapFillSpansStippled(DrawablePtr pDraw, GCPtr pGC, int nInit,
-                              DDXPointPtr ppt, int *pwidth, int fSorted)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->FillSpansStippled) (pDraw, pGC, nInit, ppt, pwidth, fSorted);
-}
-
-static void
-XAAStateWrapFillSpansOpaqueStippled(DrawablePtr pDraw, GCPtr pGC, int nInit,
-                                    DDXPointPtr ppt, int *pwidth, int fSorted)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->FillSpansOpaqueStippled) (pDraw, pGC, nInit,
-                                            ppt, pwidth, fSorted);
-}
-
-static void
-XAAStateWrapFillSpansTiled(DrawablePtr pDraw, GCPtr pGC, int nInit,
-                           DDXPointPtr ppt, int *pwidth, int fSorted)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->FillSpansTiled) (pDraw, pGC, nInit, ppt, pwidth, fSorted);
-}
-
-static int
-XAAStateWrapPolyText8TE(DrawablePtr pDraw, GCPtr pGC, int x, int y, int count,
-                        char *chars)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    return (*pStatePriv->PolyText8TE) (pDraw, pGC, x, y, count, chars);
-}
-
-static int
-XAAStateWrapPolyText16TE(DrawablePtr pDraw, GCPtr pGC, int x, int y, int count,
-                         unsigned short *chars)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    return (*pStatePriv->PolyText16TE) (pDraw, pGC, x, y, count, chars);
-}
-
-static void
-XAAStateWrapImageText8TE(DrawablePtr pDraw, GCPtr pGC, int x, int y,
-                         int count, char *chars)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->ImageText8TE) (pDraw, pGC, x, y, count, chars);
-}
-
-static void
-XAAStateWrapImageText16TE(DrawablePtr pDraw, GCPtr pGC, int x, int y,
-                          int count, unsigned short *chars)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->ImageText16TE) (pDraw, pGC, x, y, count, chars);
-}
-
-static void
-XAAStateWrapImageGlyphBltTE(DrawablePtr pDrawable, GCPtr pGC, int xInit,
-                            int yInit, unsigned int nglyph, CharInfoPtr * ppci,
-                            pointer pglyphBase)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->ImageGlyphBltTE) (pDrawable, pGC, xInit,
-                                    yInit, nglyph, ppci, pglyphBase);
-}
-
-static void
-XAAStateWrapPolyGlyphBltTE(DrawablePtr pDrawable, GCPtr pGC, int xInit,
-                           int yInit, unsigned int nglyph, CharInfoPtr * ppci,
-                           pointer pglyphBase)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->PolyGlyphBltTE) (pDrawable, pGC, xInit,
-                                   yInit, nglyph, ppci, pglyphBase);
-}
-
-static int
-XAAStateWrapPolyText8NonTE(DrawablePtr pDraw, GCPtr pGC, int x, int y,
-                           int count, char *chars)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    return (*pStatePriv->PolyText8NonTE) (pDraw, pGC, x, y, count, chars);
-}
-
-static int
-XAAStateWrapPolyText16NonTE(DrawablePtr pDraw, GCPtr pGC, int x, int y,
-                            int count, unsigned short *chars)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    return (*pStatePriv->PolyText16NonTE) (pDraw, pGC, x, y, count, chars);
-}
-
-static void
-XAAStateWrapImageText8NonTE(DrawablePtr pDraw, GCPtr pGC, int x, int y,
-                            int count, char *chars)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->ImageText8NonTE) (pDraw, pGC, x, y, count, chars);
-}
-
-static void
-XAAStateWrapImageText16NonTE(DrawablePtr pDraw, GCPtr pGC, int x, int y,
-                             int count, unsigned short *chars)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->ImageText16NonTE) (pDraw, pGC, x, y, count, chars);
-}
-
-static void
-XAAStateWrapImageGlyphBltNonTE(DrawablePtr pDrawable, GCPtr pGC, int xInit,
-                               int yInit, unsigned int nglyph,
-                               CharInfoPtr * ppci, pointer pglyphBase)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->ImageGlyphBltNonTE) (pDrawable, pGC, xInit,
-                                       yInit, nglyph, ppci, pglyphBase);
-}
-
-static void
-XAAStateWrapPolyGlyphBltNonTE(DrawablePtr pDrawable, GCPtr pGC, int xInit,
-                              int yInit, unsigned int nglyph,
-                              CharInfoPtr * ppci, pointer pglyphBase)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->PolyGlyphBltNonTE) (pDrawable, pGC, xInit,
-                                      yInit, nglyph, ppci, pglyphBase);
-}
-
-static void
-XAAStateWrapPolyRectangleThinSolid(DrawablePtr pDrawable, GCPtr pGC,
-                                   int nRectsInit, xRectangle *pRectsInit)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->PolyRectangleThinSolid) (pDrawable, pGC,
-                                           nRectsInit, pRectsInit);
-}
-
-static void
-XAAStateWrapPolylinesWideSolid(DrawablePtr pDrawable, GCPtr pGC, int mode,
-                               int npt, DDXPointPtr pPts)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->PolylinesWideSolid) (pDrawable, pGC, mode, npt, pPts);
-}
-
-static void
-XAAStateWrapPolylinesThinSolid(DrawablePtr pDrawable, GCPtr pGC, int mode,
-                               int npt, DDXPointPtr pPts)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->PolylinesThinSolid) (pDrawable, pGC, mode, npt, pPts);
-}
-
-static void
-XAAStateWrapPolySegmentThinSolid(DrawablePtr pDrawable, GCPtr pGC, int nseg,
-                                 xSegment * pSeg)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->PolySegmentThinSolid) (pDrawable, pGC, nseg, pSeg);
-}
-
-static void
-XAAStateWrapPolylinesThinDashed(DrawablePtr pDrawable, GCPtr pGC, int mode,
-                                int npt, DDXPointPtr pPts)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->PolylinesThinDashed) (pDrawable, pGC, mode, npt, pPts);
-}
-
-static void
-XAAStateWrapPolySegmentThinDashed(DrawablePtr pDrawable, GCPtr pGC, int nseg,
-                                  xSegment * pSeg)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->PolySegmentThinDashed) (pDrawable, pGC, nseg, pSeg);
-}
-
-static void
-XAAStateWrapFillPolygonSolid(DrawablePtr pDrawable, GCPtr pGC, int shape,
-                             int mode, int count, DDXPointPtr ptsIn)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->FillPolygonSolid) (pDrawable, pGC, shape, mode, count, ptsIn);
-}
-
-static void
-XAAStateWrapFillPolygonStippled(DrawablePtr pDrawable, GCPtr pGC, int shape,
-                                int mode, int count, DDXPointPtr ptsIn)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->FillPolygonStippled) (pDrawable, pGC, shape,
-                                        mode, count, ptsIn);
-}
-
-static void
-XAAStateWrapFillPolygonOpaqueStippled(DrawablePtr pDrawable, GCPtr pGC,
-                                      int shape, int mode, int count,
-                                      DDXPointPtr ptsIn)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->FillPolygonOpaqueStippled) (pDrawable, pGC,
-                                              shape, mode, count, ptsIn);
-}
-
-static void
-XAAStateWrapFillPolygonTiled(DrawablePtr pDrawable, GCPtr pGC, int shape,
-                             int mode, int count, DDXPointPtr ptsIn)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->FillPolygonTiled) (pDrawable, pGC, shape, mode, count, ptsIn);
-}
-
-static void
-XAAStateWrapPolyFillArcSolid(DrawablePtr pDraw, GCPtr pGC, int narcs,
-                             xArc * parcs)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->PolyFillArcSolid) (pDraw, pGC, narcs, parcs);
-}
-
-static void
-XAAStateWrapPutImage(DrawablePtr pDraw, GCPtr pGC, int depth, int x, int y,
-                     int w, int h, int leftPad, int format, char *pImage)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->PutImage) (pDraw, pGC, depth, x, y,
-                             w, h, leftPad, format, pImage);
-}
-
-static void
-XAAStateWrapValidateFillSpans(GCPtr pGC, unsigned long changes,
-                              DrawablePtr pDraw)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->ValidateFillSpans) (pGC, changes, pDraw);
-}
-
-static void
-XAAStateWrapValidateSetSpans(GCPtr pGC, unsigned long changes,
-                             DrawablePtr pDraw)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->ValidateSetSpans) (pGC, changes, pDraw);
-}
-
-static void
-XAAStateWrapValidatePutImage(GCPtr pGC, unsigned long changes,
-                             DrawablePtr pDraw)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->ValidatePutImage) (pGC, changes, pDraw);
-}
-
-static void
-XAAStateWrapValidateCopyArea(GCPtr pGC, unsigned long changes,
-                             DrawablePtr pDraw)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->ValidateCopyArea) (pGC, changes, pDraw);
-}
-
-static void
-XAAStateWrapValidateCopyPlane(GCPtr pGC, unsigned long changes,
-                              DrawablePtr pDraw)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->ValidateCopyPlane) (pGC, changes, pDraw);
-}
-
-static void
-XAAStateWrapValidatePolyPoint(GCPtr pGC, unsigned long changes,
-                              DrawablePtr pDraw)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->ValidatePolyPoint) (pGC, changes, pDraw);
-}
-
-static void
-XAAStateWrapValidatePolylines(GCPtr pGC, unsigned long changes,
-                              DrawablePtr pDraw)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->ValidatePolylines) (pGC, changes, pDraw);
-}
-
-static void
-XAAStateWrapValidatePolySegment(GCPtr pGC, unsigned long changes,
-                                DrawablePtr pDraw)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->ValidatePolySegment) (pGC, changes, pDraw);
-}
-
-static void
-XAAStateWrapValidatePolyRectangle(GCPtr pGC, unsigned long changes,
-                                  DrawablePtr pDraw)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->ValidatePolyRectangle) (pGC, changes, pDraw);
-}
-
-static void
-XAAStateWrapValidatePolyArc(GCPtr pGC, unsigned long changes, DrawablePtr pDraw)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->ValidatePolyArc) (pGC, changes, pDraw);
-}
-
-static void
-XAAStateWrapValidateFillPolygon(GCPtr pGC, unsigned long changes,
-                                DrawablePtr pDraw)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->ValidateFillPolygon) (pGC, changes, pDraw);
-}
-
-static void
-XAAStateWrapValidatePolyFillRect(GCPtr pGC, unsigned long changes,
-                                 DrawablePtr pDraw)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->ValidatePolyFillRect) (pGC, changes, pDraw);
-}
-
-static void
-XAAStateWrapValidatePolyFillArc(GCPtr pGC, unsigned long changes,
-                                DrawablePtr pDraw)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->ValidatePolyFillArc) (pGC, changes, pDraw);
-}
-
-static void
-XAAStateWrapValidatePolyText8(GCPtr pGC, unsigned long changes,
-                              DrawablePtr pDraw)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->ValidatePolyText8) (pGC, changes, pDraw);
-}
-
-static void
-XAAStateWrapValidatePolyText16(GCPtr pGC, unsigned long changes,
-                               DrawablePtr pDraw)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->ValidatePolyText16) (pGC, changes, pDraw);
-}
-
-static void
-XAAStateWrapValidateImageText8(GCPtr pGC, unsigned long changes,
-                               DrawablePtr pDraw)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->ValidateImageText8) (pGC, changes, pDraw);
-}
-
-static void
-XAAStateWrapValidateImageText16(GCPtr pGC, unsigned long changes,
-                                DrawablePtr pDraw)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->ValidateImageText16) (pGC, changes, pDraw);
-}
-
-static void
-XAAStateWrapValidatePolyGlyphBlt(GCPtr pGC, unsigned long changes,
-                                 DrawablePtr pDraw)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->ValidatePolyGlyphBlt) (pGC, changes, pDraw);
-}
-
-static void
-XAAStateWrapValidateImageGlyphBlt(GCPtr pGC, unsigned long changes,
-                                  DrawablePtr pDraw)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-    (*pStatePriv->ValidateImageGlyphBlt) (pGC, changes, pDraw);
-}
-
-static void
-XAAStateWrapValidatePushPixels(GCPtr pGC, unsigned long changes,
-                               DrawablePtr pDraw)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->ValidatePushPixels) (pGC, changes, pDraw);
-}
-
-static void
-XAAStateWrapComputeDash(GCPtr pGC)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->ComputeDash) (pGC);
-}
-
-static void
-XAAStateWrapInitPixmapCache(ScreenPtr pScreen, RegionPtr areas, pointer data)
-{
-    GET_STATEPRIV_SCREEN(pScreen);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->InitPixmapCache) (pScreen, areas, data);
-}
-
-static void
-XAAStateWrapClosePixmapCache(ScreenPtr pScreen)
-{
-    GET_STATEPRIV_SCREEN(pScreen);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->ClosePixmapCache) (pScreen);
-}
-
-static int
-XAAStateWrapStippledFillChooser(GCPtr pGC)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    return (*pStatePriv->StippledFillChooser) (pGC);
-}
-
-static int
-XAAStateWrapOpaqueStippledFillChooser(GCPtr pGC)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    return (*pStatePriv->OpaqueStippledFillChooser) (pGC);
-}
-
-static int
-XAAStateWrapTiledFillChooser(GCPtr pGC)
-{
-    GET_STATEPRIV_GC(pGC);
-    STATE_CHECK_SP(pStatePriv);
-
-    return (*pStatePriv->TiledFillChooser) (pGC);
-}
-
-static XAACacheInfoPtr
-XAAStateWrapCacheTile(ScrnInfoPtr pScrn, PixmapPtr pPix)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    return (*pStatePriv->CacheTile) (pScrn, pPix);
-}
-
-static XAACacheInfoPtr
-XAAStateWrapCacheStipple(ScrnInfoPtr pScrn, PixmapPtr pPix, int fg, int bg)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    return (*pStatePriv->CacheStipple) (pScrn, pPix, fg, bg);
-}
-
-static XAACacheInfoPtr
-XAAStateWrapCacheMonoStipple(ScrnInfoPtr pScrn, PixmapPtr pPix)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    return (*pStatePriv->CacheMonoStipple) (pScrn, pPix);
-}
-
-static XAACacheInfoPtr
-XAAStateWrapCacheMono8x8Pattern(ScrnInfoPtr pScrn, int pat0, int pat1)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    return (*pStatePriv->CacheMono8x8Pattern) (pScrn, pat0, pat1);
-}
-
-static XAACacheInfoPtr
-XAAStateWrapCacheColor8x8Pattern(ScrnInfoPtr pScrn, PixmapPtr pPix,
-                                 int fg, int bg)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    return (*pStatePriv->CacheColor8x8Pattern) (pScrn, pPix, fg, bg);
-}
-
-static void
-XAAStateWrapWriteBitmapToCache(ScrnInfoPtr pScrn, int x, int y, int w, int h,
-                               unsigned char *src, int srcwidth, int fg, int bg)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->WriteBitmapToCache) (pScrn, x, y, w, h,
-                                       src, srcwidth, fg, bg);
-}
-
-static void
-XAAStateWrapWritePixmapToCache(ScrnInfoPtr pScrn, int x, int y, int w, int h,
-                               unsigned char *src, int srcwidth, int bpp,
-                               int depth)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->WritePixmapToCache) (pScrn, x, y, w, h,
-                                       src, srcwidth, bpp, depth);
-}
-
-static void
-XAAStateWrapWriteMono8x8PatternToCache(ScrnInfoPtr pScrn,
-                                       XAACacheInfoPtr pCache)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->WriteMono8x8PatternToCache) (pScrn, pCache);
-}
-
-static void
-XAAStateWrapWriteColor8x8PatternToCache(ScrnInfoPtr pScrn, PixmapPtr pPix,
-                                        XAACacheInfoPtr pCache)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    (*pStatePriv->WriteColor8x8PatternToCache) (pScrn, pPix, pCache);
-}
-
-static void
-XAAStateWrapGetImage(DrawablePtr pDrawable, int sx, int sy, int w, int h,
-                     unsigned int format, unsigned long planeMask,
-                     char *pdstLine)
-{
-    GET_STATEPRIV_SCREEN(pDrawable->pScreen);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->GetImage) (pDrawable, sx, sy, w, h,
-                             format, planeMask, pdstLine);
-}
-
-static void
-XAAStateWrapGetSpans(DrawablePtr pDrawable, int wMax, DDXPointPtr ppt,
-                     int *pwidth, int nspans, char *pdstStart)
-{
-    GET_STATEPRIV_SCREEN(pDrawable->pScreen);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->GetSpans) (pDrawable, wMax, ppt, pwidth, nspans, pdstStart);
-}
-
-static void
-XAAStateWrapCopyWindow(WindowPtr pWindow, DDXPointRec ptOldOrg,
-                       RegionPtr prgnSrc)
-{
-    GET_STATEPRIV_SCREEN(pWindow->drawable.pScreen);
-    STATE_CHECK_SP(pStatePriv);
-
-    (*pStatePriv->CopyWindow) (pWindow, ptOldOrg, prgnSrc);
-}
-
-static Bool
-XAAStateWrapSetupForCPUToScreenAlphaTexture2(ScrnInfoPtr pScrn,
-                                             int op, CARD16 red,
-                                             CARD16 green,
-                                             CARD16 blue,
-                                             CARD16 alpha,
-                                             CARD32 srcFormat,
-                                             CARD32 dstFormat,
-                                             CARD8 *alphaPtr,
-                                             int alphaPitch,
-                                             int width, int height, int flags)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    return (*pStatePriv->SetupForCPUToScreenAlphaTexture2) (pScrn, op, red,
-                                                            green, blue, alpha,
-                                                            srcFormat,
-                                                            dstFormat, alphaPtr,
-                                                            alphaPitch, width,
-                                                            height, flags);
-}
-
-static Bool
-XAAStateWrapSetupForCPUToScreenTexture2(ScrnInfoPtr pScrn, int op,
-                                        CARD32 srcFormat,
-                                        CARD32 dstFormat,
-                                        CARD8 *texPtr, int texPitch,
-                                        int width, int height, int flags)
-{
-    GET_STATEPRIV_PSCRN(pScrn);
-    STATE_CHECK_PSCRN(pScrn);
-
-    return (*pStatePriv->SetupForCPUToScreenTexture2) (pScrn, op, srcFormat,
-                                                       dstFormat, texPtr,
-                                                       texPitch, width, height,
-                                                       flags);
-}
-
-/* Setup Function */
-Bool
-XAAInitStateWrap(ScreenPtr pScreen, XAAInfoRecPtr infoRec)
-{
-    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
-    XAAStateWrapPtr pStatePriv;
-    int i = 0;
-
-    if (!dixRegisterPrivateKey(&XAAStateKeyRec, PRIVATE_SCREEN, 0))
-        return FALSE;
-    if (!(pStatePriv = malloc(sizeof(XAAStateWrapRec))))
-        return FALSE;
-    dixSetPrivate(&pScreen->devPrivates, XAAStateKey, pStatePriv);
-    pStatePriv->RestoreAccelState = infoRec->RestoreAccelState;
-    pStatePriv->pScrn = pScrn;
-
-    /* Initialize the last screen to -1 so whenever an accel function
-     * is called the proper state is setup
-     */
-    while (i < pScrn->numEntities) {
-        xf86SetLastScrnFlag(pScrn->entityList[i], -1);
-        i++;
-    }
-/* Do the wrapping */
-    XAA_STATE_WRAP(Sync);
-    XAA_STATE_WRAP(SetupForScreenToScreenCopy);
-    XAA_STATE_WRAP(SetupForSolidFill);
-    XAA_STATE_WRAP(SetupForSolidLine);
-    XAA_STATE_WRAP(SetupForDashedLine);
-    XAA_STATE_WRAP(SetClippingRectangle);
-    XAA_STATE_WRAP(DisableClipping);
-    XAA_STATE_WRAP(SetupForMono8x8PatternFill);
-    XAA_STATE_WRAP(SetupForColor8x8PatternFill);
-    XAA_STATE_WRAP(SetupForCPUToScreenColorExpandFill);
-    XAA_STATE_WRAP(SetupForScanlineCPUToScreenColorExpandFill);
-    XAA_STATE_WRAP(SetupForScreenToScreenColorExpandFill);
-    XAA_STATE_WRAP(SetupForImageWrite);
-    XAA_STATE_WRAP(SetupForScanlineImageWrite);
-    XAA_STATE_WRAP(SetupForImageRead);
-    XAA_STATE_WRAP(ScreenToScreenBitBlt);
-    XAA_STATE_WRAP(WriteBitmap);
-    XAA_STATE_WRAP(FillSolidRects);
-    XAA_STATE_WRAP(FillMono8x8PatternRects);
-    XAA_STATE_WRAP(FillColor8x8PatternRects);
-    XAA_STATE_WRAP(FillCacheBltRects);
-    XAA_STATE_WRAP(FillColorExpandRects);
-    XAA_STATE_WRAP(FillCacheExpandRects);
-    XAA_STATE_WRAP(FillImageWriteRects);
-    XAA_STATE_WRAP(FillSolidSpans);
-    XAA_STATE_WRAP(FillMono8x8PatternSpans);
-    XAA_STATE_WRAP(FillColor8x8PatternSpans);
-    XAA_STATE_WRAP(FillCacheBltSpans);
-    XAA_STATE_WRAP(FillColorExpandSpans);
-    XAA_STATE_WRAP(FillCacheExpandSpans);
-    XAA_STATE_WRAP(TEGlyphRenderer);
-    XAA_STATE_WRAP(NonTEGlyphRenderer);
-    XAA_STATE_WRAP(WritePixmap);
-    XAA_STATE_WRAP(ReadPixmap);
-    XAA_STATE_WRAP(CopyArea);
-    XAA_STATE_WRAP(CopyPlane);
-    XAA_STATE_WRAP(PushPixelsSolid);
-    XAA_STATE_WRAP(PolyFillRectSolid);
-    XAA_STATE_WRAP(PolyFillRectStippled);
-    XAA_STATE_WRAP(PolyFillRectOpaqueStippled);
-    XAA_STATE_WRAP(PolyFillRectTiled);
-    XAA_STATE_WRAP(FillSpansSolid);
-    XAA_STATE_WRAP(FillSpansStippled);
-    XAA_STATE_WRAP(FillSpansOpaqueStippled);
-    XAA_STATE_WRAP(FillSpansTiled);
-    XAA_STATE_WRAP(PolyText8TE);
-    XAA_STATE_WRAP(PolyText16TE);
-    XAA_STATE_WRAP(ImageText8TE);
-    XAA_STATE_WRAP(ImageText16TE);
-    XAA_STATE_WRAP(ImageGlyphBltTE);
-    XAA_STATE_WRAP(PolyGlyphBltTE);
-    XAA_STATE_WRAP(PolyText8NonTE);
-    XAA_STATE_WRAP(PolyText16NonTE);
-    XAA_STATE_WRAP(ImageText8NonTE);
-    XAA_STATE_WRAP(ImageText16NonTE);
-    XAA_STATE_WRAP(ImageGlyphBltNonTE);
-    XAA_STATE_WRAP(PolyGlyphBltNonTE);
-    XAA_STATE_WRAP(PolyRectangleThinSolid);
-    XAA_STATE_WRAP(PolylinesWideSolid);
-    XAA_STATE_WRAP(PolylinesThinSolid);
-    XAA_STATE_WRAP(PolySegmentThinSolid);
-    XAA_STATE_WRAP(PolylinesThinDashed);
-    XAA_STATE_WRAP(PolySegmentThinDashed);
-    XAA_STATE_WRAP(FillPolygonSolid);
-    XAA_STATE_WRAP(FillPolygonStippled);
-    XAA_STATE_WRAP(FillPolygonOpaqueStippled);
-    XAA_STATE_WRAP(FillPolygonTiled);
-    XAA_STATE_WRAP(PolyFillArcSolid);
-    XAA_STATE_WRAP(PutImage);
-    XAA_STATE_WRAP(ValidateFillSpans);
-    XAA_STATE_WRAP(ValidateSetSpans);
-    XAA_STATE_WRAP(ValidatePutImage);
-    XAA_STATE_WRAP(ValidateCopyArea);
-    XAA_STATE_WRAP(ValidateCopyPlane);
-    XAA_STATE_WRAP(ValidatePolyPoint);
-    XAA_STATE_WRAP(ValidatePolylines);
-    XAA_STATE_WRAP(ValidatePolySegment);
-    XAA_STATE_WRAP(ValidatePolyRectangle);
-    XAA_STATE_WRAP(ValidatePolyArc);
-    XAA_STATE_WRAP(ValidateFillPolygon);
-    XAA_STATE_WRAP(ValidatePolyFillRect);
-    XAA_STATE_WRAP(ValidatePolyFillArc);
-    XAA_STATE_WRAP(ValidatePolyText8);
-    XAA_STATE_WRAP(ValidatePolyText16);
-    XAA_STATE_WRAP(ValidateImageText8);
-    XAA_STATE_WRAP(ValidateImageText16);
-    XAA_STATE_WRAP(ValidatePolyGlyphBlt);
-    XAA_STATE_WRAP(ValidateImageGlyphBlt);
-    XAA_STATE_WRAP(ValidatePushPixels);
-    XAA_STATE_WRAP(ComputeDash);
-    XAA_STATE_WRAP(InitPixmapCache);
-    XAA_STATE_WRAP(ClosePixmapCache);
-    XAA_STATE_WRAP(StippledFillChooser);
-    XAA_STATE_WRAP(OpaqueStippledFillChooser);
-    XAA_STATE_WRAP(TiledFillChooser);
-    XAA_STATE_WRAP(CacheTile);
-    XAA_STATE_WRAP(CacheStipple);
-    XAA_STATE_WRAP(CacheMonoStipple);
-    XAA_STATE_WRAP(CacheMono8x8Pattern);
-    XAA_STATE_WRAP(CacheColor8x8Pattern);
-    XAA_STATE_WRAP(WriteBitmapToCache);
-    XAA_STATE_WRAP(WritePixmapToCache);
-    XAA_STATE_WRAP(WriteMono8x8PatternToCache);
-    XAA_STATE_WRAP(WriteColor8x8PatternToCache);
-    XAA_STATE_WRAP(GetImage);
-    XAA_STATE_WRAP(GetSpans);
-    XAA_STATE_WRAP(CopyWindow);
-    XAA_STATE_WRAP(SetupForCPUToScreenAlphaTexture2);
-    XAA_STATE_WRAP(SetupForCPUToScreenTexture2);
-    return TRUE;
-}
diff --git a/hw/xfree86/xaa/xaaStipple.c b/hw/xfree86/xaa/xaaStipple.c
deleted file mode 100644
index fc74e39..0000000
--- a/hw/xfree86/xaa/xaaStipple.c
+++ /dev/null
@@ -1,915 +0,0 @@
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include "xaa.h"
-#include "xaalocal.h"
-#include "xaacexp.h"
-#include "xf86.h"
-
-static CARD32 *StipplePowerOfTwo(CARD32 *, CARD32 *, int, int, int);
-static CARD32 *StipplePowerOfTwo_Inverted(CARD32 *, CARD32 *, int, int, int);
-static CARD32 *StippleUpTo32(CARD32 *, CARD32 *, int, int, int);
-static CARD32 *StippleUpTo32_Inverted(CARD32 *, CARD32 *, int, int, int);
-static CARD32 *StippleOver32(CARD32 *, CARD32 *, int, int, int);
-static CARD32 *StippleOver32_Inverted(CARD32 *, CARD32 *, int, int, int);
-
-#ifdef TRIPLE_BITS
-#define stipple_scanline_func EXPNAME(XAAStippleScanlineFunc3)
-#define stipple_get_scanline_func EXPNAME(XAAGetStippleScanlineFunc3)
-#else
-#define stipple_scanline_func EXPNAME(XAAStippleScanlineFunc)
-#define stipple_get_scanline_func EXPNAME(XAAGetStippleScanlineFunc)
-#endif
-
-StippleScanlineProcPtr stipple_scanline_func[6] = {
-    StipplePowerOfTwo,
-    StippleUpTo32,
-    StippleOver32,
-    StipplePowerOfTwo_Inverted,
-    StippleUpTo32_Inverted,
-    StippleOver32_Inverted
-};
-
-StippleScanlineProcPtr *
-stipple_get_scanline_func(void)
-{
-    return stipple_scanline_func;
-}
-
-#ifdef FIXEDBASE
-#define DEST(i)	*dest
-#define RETURN(i)	return(dest)
-#else
-#define DEST(i)	dest[i]
-#define RETURN(i)	return(dest + i)
-#endif
-
-/* TRIPLE_BITS pattern expansion */
-#ifdef TRIPLE_BITS
-#define EXPAND_PAT \
-	CARD32 pat1 = byte_expand3[pat & 0xFF], \
-	       pat2 = byte_expand3[(pat & 0xFF00) >> 8], \
-	       pat3 = byte_expand3[(pat & 0xFF0000) >> 16], \
-	       pat4 = byte_expand3[(pat & 0xFF000000) >> 24], \
-	       patA = pat1 | (pat2 << 24), \
-	       patB = (pat2 >> 8) | (pat3 << 16), \
-	       patC = (pat3 >> 16) | (pat4 << 8)
-#ifdef FIXED_BASE
-#define WRITE_PAT1 { \
-	*dest = patA; }
-#define WRITE_PAT2 { \
-	*dest = patA; \
-	*dest = patB; }
-#define WRITE_PAT3 { \
-	*dest = patA; \
-	*dest = patB; \
-	*dest = patC; }
-#else
-#define WRITE_PAT1 { \
-	*(dest++) = patA; }
-#define WRITE_PAT2 { \
-	*(dest) = patA; \
-	*(dest + 1) = patB; \
-	dest += 2; }
-#define WRITE_PAT3 { \
-	*(dest) = patA; \
-	*(dest + 1) = patB; \
-	*(dest + 2) = patC; \
-	dest += 3; }
-#endif
-#endif
-
-#if !defined(FIXEDBASE) && !defined(MSBFIRST) && !defined(TRIPLE_BITS)
-
-unsigned int XAAShiftMasks[32] = {
-    /* gcc is rather pedantic about SHIFT_R(0xFFFFFFFF,32) */
-    0x00000000, SHIFT_R(0xFFFFFFFF, 31),
-    SHIFT_R(0xFFFFFFFF, 30), SHIFT_R(0xFFFFFFFF, 29),
-    SHIFT_R(0xFFFFFFFF, 28), SHIFT_R(0xFFFFFFFF, 27),
-    SHIFT_R(0xFFFFFFFF, 26), SHIFT_R(0xFFFFFFFF, 25),
-    SHIFT_R(0xFFFFFFFF, 24), SHIFT_R(0xFFFFFFFF, 23),
-    SHIFT_R(0xFFFFFFFF, 22), SHIFT_R(0xFFFFFFFF, 21),
-    SHIFT_R(0xFFFFFFFF, 20), SHIFT_R(0xFFFFFFFF, 19),
-    SHIFT_R(0xFFFFFFFF, 18), SHIFT_R(0xFFFFFFFF, 17),
-    SHIFT_R(0xFFFFFFFF, 16), SHIFT_R(0xFFFFFFFF, 15),
-    SHIFT_R(0xFFFFFFFF, 14), SHIFT_R(0xFFFFFFFF, 13),
-    SHIFT_R(0xFFFFFFFF, 12), SHIFT_R(0xFFFFFFFF, 11),
-    SHIFT_R(0xFFFFFFFF, 10), SHIFT_R(0xFFFFFFFF, 9),
-    SHIFT_R(0xFFFFFFFF, 8), SHIFT_R(0xFFFFFFFF, 7),
-    SHIFT_R(0xFFFFFFFF, 6), SHIFT_R(0xFFFFFFFF, 5),
-    SHIFT_R(0xFFFFFFFF, 4), SHIFT_R(0xFFFFFFFF, 3),
-    SHIFT_R(0xFFFFFFFF, 2), SHIFT_R(0xFFFFFFFF, 1)
-};
-
-#endif
-
-void
-#ifdef TRIPLE_BITS
- EXPNAME(XAAFillColorExpandRects3) (
-#else
- EXPNAME(XAAFillColorExpandRects) (
-#endif
-                                      ScrnInfoPtr pScrn,
-                                      int fg, int bg, int rop,
-                                      unsigned int planemask,
-                                      int nBox,
-                                      BoxPtr pBox,
-                                      int xorg, int yorg, PixmapPtr pPix) {
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    CARD32 *base;
-    Bool TwoPass = FALSE, FirstPass = TRUE;
-    StippleScanlineProcPtr StippleFunc, FirstFunc, SecondFunc;
-    int stipplewidth = pPix->drawable.width;
-    int stippleheight = pPix->drawable.height;
-    int srcwidth = pPix->devKind;
-    int dwords, srcy, srcx, funcNo = 2, h;
-    unsigned char *src = (unsigned char *) pPix->devPrivate.ptr;
-    unsigned char *srcp;
-    int flag;
-
-    if (stipplewidth <= 32) {
-        if (stipplewidth & (stipplewidth - 1))
-            funcNo = 1;
-        else
-            funcNo = 0;
-    }
-    StippleFunc = stipple_scanline_func[funcNo];
-    SecondFunc = stipple_scanline_func[funcNo];
-    FirstFunc = stipple_scanline_func[funcNo + 3];
-
-#ifdef TRIPLE_BITS
-    if ((bg == -1) ||
-        (!(infoRec->CPUToScreenColorExpandFillFlags & TRANSPARENCY_ONLY) &&
-         (!(infoRec->CPUToScreenColorExpandFillFlags & RGB_EQUAL) ||
-          (CHECK_RGB_EQUAL(bg))))) {
-#else
-    if ((bg == -1) ||
-        !(infoRec->CPUToScreenColorExpandFillFlags & TRANSPARENCY_ONLY)) {
-#endif
-        /* one pass */
-    }
-    else if ((rop == GXcopy) && infoRec->FillSolidRects) {
-        /* one pass but we fill background rects first */
-        (*infoRec->FillSolidRects) (pScrn, bg, rop, planemask, nBox, pBox);
-        bg = -1;
-    }
-    else {
-        /* gotta do two passes */
-        TwoPass = TRUE;
-    }
-
-    if (!TwoPass)
-        (*infoRec->SetupForCPUToScreenColorExpandFill) (pScrn, fg, bg, rop,
-                                                        planemask);
-
-    while (nBox--) {
-#ifdef TRIPLE_BITS
-        dwords = (3 * (pBox->x2 - pBox->x1) + 31) >> 5;
-#else
-        dwords = (pBox->x2 - pBox->x1 + 31) >> 5;
-#endif
-
- SECOND_PASS:
-        if (TwoPass) {
-            (*infoRec->SetupForCPUToScreenColorExpandFill) (pScrn,
-                                                            (FirstPass) ? bg :
-                                                            fg, -1, rop,
-                                                            planemask);
-            StippleFunc = (FirstPass) ? FirstFunc : SecondFunc;
-        }
-
-        h = pBox->y2 - pBox->y1;
-        flag = (infoRec->CPUToScreenColorExpandFillFlags
-                & CPU_TRANSFER_PAD_QWORD) && ((dwords * h) & 0x01);
-
-        (*infoRec->SubsequentCPUToScreenColorExpandFill) (pScrn, pBox->x1,
-                                                          pBox->y1,
-                                                          pBox->x2 - pBox->x1,
-                                                          h, 0);
-
-        base = (CARD32 *) infoRec->ColorExpandBase;
-
-        srcy = (pBox->y1 - yorg) % stippleheight;
-        if (srcy < 0)
-            srcy += stippleheight;
-        srcx = (pBox->x1 - xorg) % stipplewidth;
-        if (srcx < 0)
-            srcx += stipplewidth;
-
-        srcp = (srcwidth * srcy) + src;
-
-#ifndef FIXEDBASE
-        if ((dwords * h) <= infoRec->ColorExpandRange) {
-            while (h--) {
-                base =
-                    (*StippleFunc) (base, (CARD32 *) srcp, srcx, stipplewidth,
-                                    dwords);
-                srcy++;
-                srcp += srcwidth;
-                if (srcy >= stippleheight) {
-                    srcy = 0;
-                    srcp = src;
-                }
-            }
-        }
-        else
-#endif
-            while (h--) {
-                (*StippleFunc) (base, (CARD32 *) srcp, srcx, stipplewidth,
-                                dwords);
-                srcy++;
-                srcp += srcwidth;
-                if (srcy >= stippleheight) {
-                    srcy = 0;
-                    srcp = src;
-                }
-            }
-
-        if (flag) {
-            base = (CARD32 *) infoRec->ColorExpandBase;
-            base[0] = 0x00000000;
-        }
-
-        if (TwoPass) {
-            if (FirstPass) {
-                FirstPass = FALSE;
-                goto SECOND_PASS;
-            }
-            else
-                FirstPass = TRUE;
-        }
-
-        pBox++;
-    }
-
-    if (infoRec->CPUToScreenColorExpandFillFlags & SYNC_AFTER_COLOR_EXPAND)
-        (*infoRec->Sync) (pScrn);
-    else
-        SET_SYNC_FLAG(infoRec);
-}
-
-void
-#ifdef TRIPLE_BITS
- EXPNAME(XAAFillColorExpandSpans3) (
-#else
- EXPNAME(XAAFillColorExpandSpans) (
-#endif
-                                      ScrnInfoPtr pScrn,
-                                      int fg, int bg, int rop,
-                                      unsigned int planemask,
-                                      int n,
-                                      DDXPointPtr ppt,
-                                      int *pwidth,
-                                      int fSorted,
-                                      int xorg, int yorg, PixmapPtr pPix) {
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    CARD32 *base;
-    Bool TwoPass = FALSE, FirstPass = TRUE;
-    StippleScanlineProcPtr StippleFunc, FirstFunc, SecondFunc;
-    int stipplewidth = pPix->drawable.width;
-    int stippleheight = pPix->drawable.height;
-    int dwords, srcy, srcx, funcNo = 2;
-    unsigned char *srcp;
-
-    if (stipplewidth <= 32) {
-        if (stipplewidth & (stipplewidth - 1))
-            funcNo = 1;
-        else
-            funcNo = 0;
-    }
-    StippleFunc = stipple_scanline_func[funcNo];
-    SecondFunc = stipple_scanline_func[funcNo];
-    FirstFunc = stipple_scanline_func[funcNo + 3];
-
-#ifdef TRIPLE_BITS
-    if ((bg == -1) ||
-        (!(infoRec->CPUToScreenColorExpandFillFlags & TRANSPARENCY_ONLY) &&
-         (!(infoRec->CPUToScreenColorExpandFillFlags & RGB_EQUAL) ||
-          (CHECK_RGB_EQUAL(bg))))) {
-#else
-    if ((bg == -1) ||
-        !(infoRec->CPUToScreenColorExpandFillFlags & TRANSPARENCY_ONLY)) {
-#endif
-        /* one pass */
-    }
-    else if ((rop == GXcopy) && infoRec->FillSolidSpans) {
-        /* one pass but we fill background rects first */
-        (*infoRec->FillSolidSpans) (pScrn, bg, rop, planemask, n, ppt, pwidth,
-                                    fSorted);
-        bg = -1;
-    }
-    else {
-        /* gotta do two passes */
-        TwoPass = TRUE;
-    }
-
-    if (!TwoPass)
-        (*infoRec->SetupForCPUToScreenColorExpandFill) (pScrn, fg, bg, rop,
-                                                        planemask);
-
-    while (n--) {
-#ifdef TRIPLE_BITS
-        dwords = (3 * *pwidth + 31) >> 5;
-#else
-        dwords = (*pwidth + 31) >> 5;
-#endif
-
-        srcy = (ppt->y - yorg) % stippleheight;
-        if (srcy < 0)
-            srcy += stippleheight;
-        srcx = (ppt->x - xorg) % stipplewidth;
-        if (srcx < 0)
-            srcx += stipplewidth;
-
-        srcp = (pPix->devKind * srcy) + (unsigned char *) pPix->devPrivate.ptr;
-
- SECOND_PASS:
-        if (TwoPass) {
-            (*infoRec->SetupForCPUToScreenColorExpandFill) (pScrn,
-                                                            (FirstPass) ? bg :
-                                                            fg, -1, rop,
-                                                            planemask);
-            StippleFunc = (FirstPass) ? FirstFunc : SecondFunc;
-        }
-
-        (*infoRec->SubsequentCPUToScreenColorExpandFill) (pScrn, ppt->x, ppt->y,
-                                                          *pwidth, 1, 0);
-
-        base = (CARD32 *) infoRec->ColorExpandBase;
-
-        (*StippleFunc) (base, (CARD32 *) srcp, srcx, stipplewidth, dwords);
-
-        if ((infoRec->CPUToScreenColorExpandFillFlags & CPU_TRANSFER_PAD_QWORD)
-            && (dwords & 0x01)) {
-            base = (CARD32 *) infoRec->ColorExpandBase;
-            base[0] = 0x00000000;
-        }
-
-        if (TwoPass) {
-            if (FirstPass) {
-                FirstPass = FALSE;
-                goto SECOND_PASS;
-            }
-            else
-                FirstPass = TRUE;
-        }
-
-        ppt++;
-        pwidth++;
-    }
-
-    if (infoRec->CPUToScreenColorExpandFillFlags & SYNC_AFTER_COLOR_EXPAND)
-        (*infoRec->Sync) (pScrn);
-    else
-        SET_SYNC_FLAG(infoRec);
-}
-
-#ifndef FIXEDBASE
-
-void
-#ifdef TRIPLE_BITS
- EXPNAME(XAAFillScanlineColorExpandRects3) (
-#else
- EXPNAME(XAAFillScanlineColorExpandRects) (
-#endif
-                                              ScrnInfoPtr pScrn,
-                                              int fg, int bg, int rop,
-                                              unsigned int planemask,
-                                              int nBox,
-                                              BoxPtr pBox,
-                                              int xorg, int yorg,
-                                              PixmapPtr pPix) {
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    CARD32 *base;
-    Bool TwoPass = FALSE, FirstPass = TRUE;
-    StippleScanlineProcPtr StippleFunc, FirstFunc, SecondFunc;
-    int stipplewidth = pPix->drawable.width;
-    int stippleheight = pPix->drawable.height;
-    int srcwidth = pPix->devKind;
-    int dwords, srcy, srcx, funcNo = 2, bufferNo, h;
-    unsigned char *src = pPix->devPrivate.ptr;
-    unsigned char *srcp;
-
-    if (stipplewidth <= 32) {
-        if (stipplewidth & (stipplewidth - 1))
-            funcNo = 1;
-        else
-            funcNo = 0;
-    }
-    StippleFunc = stipple_scanline_func[funcNo];
-    SecondFunc = stipple_scanline_func[funcNo];
-    FirstFunc = stipple_scanline_func[funcNo + 3];
-
-#ifdef TRIPLE_BITS
-    if ((bg == -1) ||
-        (!(infoRec->ScanlineCPUToScreenColorExpandFillFlags & TRANSPARENCY_ONLY)
-         && (!(infoRec->ScanlineCPUToScreenColorExpandFillFlags & RGB_EQUAL) ||
-             (CHECK_RGB_EQUAL(bg))))) {
-#else
-    if ((bg == -1) ||
-        !(infoRec->
-          ScanlineCPUToScreenColorExpandFillFlags & TRANSPARENCY_ONLY)) {
-#endif
-        /* one pass */
-    }
-    else if ((rop == GXcopy) && infoRec->FillSolidRects) {
-        /* one pass but we fill background rects first */
-        (*infoRec->FillSolidRects) (pScrn, bg, rop, planemask, nBox, pBox);
-        bg = -1;
-    }
-    else {
-        /* gotta do two passes */
-        TwoPass = TRUE;
-    }
-
-    if (!TwoPass)
-        (*infoRec->SetupForScanlineCPUToScreenColorExpandFill) (pScrn, fg, bg,
-                                                                rop, planemask);
-
-    while (nBox--) {
-#ifdef TRIPLE_BITS
-        dwords = (3 * (pBox->x2 - pBox->x1) + 31) >> 5;
-#else
-        dwords = (pBox->x2 - pBox->x1 + 31) >> 5;
-#endif
-
- SECOND_PASS:
-        if (TwoPass) {
-            (*infoRec->SetupForScanlineCPUToScreenColorExpandFill) (pScrn,
-                                                                    (FirstPass)
-                                                                    ? bg : fg,
-                                                                    -1, rop,
-                                                                    planemask);
-            StippleFunc = (FirstPass) ? FirstFunc : SecondFunc;
-        }
-
-        h = pBox->y2 - pBox->y1;
-
-        (*infoRec->SubsequentScanlineCPUToScreenColorExpandFill) (pScrn,
-                                                                  pBox->x1,
-                                                                  pBox->y1,
-                                                                  pBox->x2 -
-                                                                  pBox->x1, h,
-                                                                  0);
-
-        bufferNo = 0;
-
-        srcy = (pBox->y1 - yorg) % stippleheight;
-        if (srcy < 0)
-            srcy += stippleheight;
-        srcx = (pBox->x1 - xorg) % stipplewidth;
-        if (srcx < 0)
-            srcx += stipplewidth;
-
-        srcp = (srcwidth * srcy) + src;
-
-        while (h--) {
-            base = (CARD32 *) infoRec->ScanlineColorExpandBuffers[bufferNo];
-            (*StippleFunc) (base, (CARD32 *) srcp, srcx, stipplewidth, dwords);
-            (*infoRec->SubsequentColorExpandScanline) (pScrn, bufferNo++);
-            if (bufferNo >= infoRec->NumScanlineColorExpandBuffers)
-                bufferNo = 0;
-            srcy++;
-            srcp += srcwidth;
-            if (srcy >= stippleheight) {
-                srcy = 0;
-                srcp = src;
-            }
-        }
-
-        if (TwoPass) {
-            if (FirstPass) {
-                FirstPass = FALSE;
-                goto SECOND_PASS;
-            }
-            else
-                FirstPass = TRUE;
-        }
-
-        pBox++;
-    }
-
-    SET_SYNC_FLAG(infoRec);
-}
-
-void
-#ifdef TRIPLE_BITS
- EXPNAME(XAAFillScanlineColorExpandSpans3) (
-#else
- EXPNAME(XAAFillScanlineColorExpandSpans) (
-#endif
-                                              ScrnInfoPtr pScrn,
-                                              int fg, int bg, int rop,
-                                              unsigned int planemask,
-                                              int n,
-                                              DDXPointPtr ppt,
-                                              int *pwidth,
-                                              int fSorted,
-                                              int xorg, int yorg,
-                                              PixmapPtr pPix) {
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    CARD32 *base;
-    Bool TwoPass = FALSE, FirstPass = TRUE;
-    StippleScanlineProcPtr StippleFunc, FirstFunc, SecondFunc;
-    int stipplewidth = pPix->drawable.width;
-    int stippleheight = pPix->drawable.height;
-    int dwords, srcy, srcx, funcNo = 2;
-    unsigned char *srcp;
-
-    if (stipplewidth <= 32) {
-        if (stipplewidth & (stipplewidth - 1))
-            funcNo = 1;
-        else
-            funcNo = 0;
-    }
-    StippleFunc = stipple_scanline_func[funcNo];
-    SecondFunc = stipple_scanline_func[funcNo];
-    FirstFunc = stipple_scanline_func[funcNo + 3];
-
-#ifdef TRIPLE_BITS
-    if ((bg == -1) ||
-        (!(infoRec->ScanlineCPUToScreenColorExpandFillFlags & TRANSPARENCY_ONLY)
-         && (!(infoRec->ScanlineCPUToScreenColorExpandFillFlags & RGB_EQUAL) ||
-             (CHECK_RGB_EQUAL(bg))))) {
-#else
-    if ((bg == -1) ||
-        !(infoRec->
-          ScanlineCPUToScreenColorExpandFillFlags & TRANSPARENCY_ONLY)) {
-#endif
-        /* one pass */
-    }
-    else if ((rop == GXcopy) && infoRec->FillSolidSpans) {
-        /* one pass but we fill background rects first */
-        (*infoRec->FillSolidSpans) (pScrn, bg, rop, planemask, n, ppt, pwidth,
-                                    fSorted);
-        bg = -1;
-    }
-    else {
-        /* gotta do two passes */
-        TwoPass = TRUE;
-    }
-
-    if (!TwoPass)
-        (*infoRec->SetupForScanlineCPUToScreenColorExpandFill) (pScrn, fg, bg,
-                                                                rop, planemask);
-
-    while (n--) {
-#ifdef TRIPLE_BITS
-        dwords = (3 * *pwidth + 31) >> 5;
-#else
-        dwords = (*pwidth + 31) >> 5;
-#endif
-
-        srcy = (ppt->y - yorg) % stippleheight;
-        if (srcy < 0)
-            srcy += stippleheight;
-        srcx = (ppt->x - xorg) % stipplewidth;
-        if (srcx < 0)
-            srcx += stipplewidth;
-
-        srcp = (pPix->devKind * srcy) + (unsigned char *) pPix->devPrivate.ptr;
-
- SECOND_PASS:
-        if (TwoPass) {
-            (*infoRec->SetupForScanlineCPUToScreenColorExpandFill) (pScrn,
-                                                                    (FirstPass)
-                                                                    ? bg : fg,
-                                                                    -1, rop,
-                                                                    planemask);
-            StippleFunc = (FirstPass) ? FirstFunc : SecondFunc;
-        }
-
-        (*infoRec->SubsequentScanlineCPUToScreenColorExpandFill) (pScrn, ppt->x,
-                                                                  ppt->y,
-                                                                  *pwidth, 1,
-                                                                  0);
-
-        base = (CARD32 *) infoRec->ScanlineColorExpandBuffers[0];
-
-        (*StippleFunc) (base, (CARD32 *) srcp, srcx, stipplewidth, dwords);
-        (*infoRec->SubsequentColorExpandScanline) (pScrn, 0);
-
-        if (TwoPass) {
-            if (FirstPass) {
-                FirstPass = FALSE;
-                goto SECOND_PASS;
-            }
-            else
-                FirstPass = TRUE;
-        }
-
-        ppt++;
-        pwidth++;
-    }
-
-    SET_SYNC_FLAG(infoRec);
-}
-
-#endif
-
-static CARD32 *
-StipplePowerOfTwo(CARD32 *dest, CARD32 *src, int shift, int width, int dwords)
-{
-    CARD32 pat = *src;
-
-    if (width < 32) {
-        pat &= XAAShiftMasks[width];
-        while (width < 32) {
-            pat |= SHIFT_L(pat, width);
-            width <<= 1;
-        }
-    }
-
-    if (shift)
-        pat = SHIFT_R(pat, shift) | SHIFT_L(pat, 32 - shift);
-
-#ifdef MSBFIRST
-    pat = SWAP_BITS_IN_BYTES(pat);
-#endif
-
-#ifdef TRIPLE_BITS
-    {
-        EXPAND_PAT;
-
-        while (dwords >= 3) {
-            WRITE_PAT3;
-            dwords -= 3;
-        }
-        if (dwords == 2) {
-            WRITE_PAT2;
-        }
-        else if (dwords == 1) {
-            WRITE_PAT1;
-        }
-
-        return dest;
-    }
-#else                           /* TRIPLE_BITS */
-    while (dwords >= 4) {
-        DEST(0) = pat;
-        DEST(1) = pat;
-        DEST(2) = pat;
-        DEST(3) = pat;
-        dwords -= 4;
-#ifndef FIXEDBASE
-        dest += 4;
-#endif
-    }
-
-    if (!dwords)
-        return dest;
-    DEST(0) = pat;
-    if (dwords == 1)
-        RETURN(1);
-    DEST(1) = pat;
-    if (dwords == 2)
-        RETURN(2);
-    DEST(2) = pat;
-    RETURN(3);
-#endif                          /* TRIPLE_BITS */
-}
-
-static CARD32 *
-StipplePowerOfTwo_Inverted(CARD32 *dest, CARD32 *src,
-                           int shift, int width, int dwords)
-{
-    CARD32 pat = *src;
-
-    if (width < 32) {
-        pat &= XAAShiftMasks[width];
-        while (width < 32) {
-            pat |= SHIFT_L(pat, width);
-            width <<= 1;
-        }
-    }
-
-    if (shift)
-        pat = SHIFT_R(pat, shift) | SHIFT_L(pat, 32 - shift);
-
-#ifdef MSBFIRST
-    pat = SWAP_BITS_IN_BYTES(pat);
-#endif
-
-    pat = ~pat;
-
-#ifdef TRIPLE_BITS
-    {
-        EXPAND_PAT;
-
-        while (dwords >= 3) {
-            WRITE_PAT3;
-            dwords -= 3;
-        }
-        if (dwords == 2) {
-            WRITE_PAT2;
-        }
-        else if (dwords == 1) {
-            WRITE_PAT1;
-        }
-
-        return dest;
-    }
-#else                           /* TRIPLE_BITS */
-    while (dwords >= 4) {
-        DEST(0) = pat;
-        DEST(1) = pat;
-        DEST(2) = pat;
-        DEST(3) = pat;
-        dwords -= 4;
-#ifndef FIXEDBASE
-        dest += 4;
-#endif
-    }
-
-    if (!dwords)
-        return dest;
-    DEST(0) = pat;
-    if (dwords == 1)
-        RETURN(1);
-    DEST(1) = pat;
-    if (dwords == 2)
-        RETURN(2);
-    DEST(2) = pat;
-    RETURN(3);
-#endif                          /* TRIPLE_BITS */
-}
-
-static CARD32 *
-StippleUpTo32(CARD32 *base, CARD32 *src, int shift, int width, int dwords)
-{
-    CARD32 pat = *src & XAAShiftMasks[width];
-
-    while (width <= 15) {
-        pat |= SHIFT_L(pat, width);
-        width <<= 1;
-    }
-    pat |= SHIFT_L(pat, width);
-
-    while (dwords--) {
-        CARD32 bits = SHIFT_R(pat, shift) | SHIFT_L(pat, width - shift);
-
-#ifdef TRIPLE_BITS
-        if (dwords >= 2) {
-            WRITE_BITS3(bits);
-            dwords -= 2;
-        }
-        else if (dwords > 0) {
-            WRITE_BITS2(bits);
-            dwords--;
-        }
-        else {
-            WRITE_BITS1(bits);
-        }
-#else
-        WRITE_BITS(bits);
-#endif
-
-        shift += 32;
-        shift %= width;
-    }
-    return base;
-}
-
-static CARD32 *
-StippleUpTo32_Inverted(CARD32 *base, CARD32 *src,
-                       int shift, int width, int dwords)
-{
-    CARD32 pat = *src & XAAShiftMasks[width];
-
-    while (width <= 15) {
-        pat |= SHIFT_L(pat, width);
-        width <<= 1;
-    }
-    pat |= SHIFT_L(pat, width);
-
-    while (dwords--) {
-        CARD32 bits = ~(SHIFT_R(pat, shift) | SHIFT_L(pat, width - shift));
-
-#ifdef TRIPLE_BITS
-        if (dwords >= 2) {
-            WRITE_BITS3(bits);
-            dwords -= 2;
-        }
-        else if (dwords > 0) {
-            WRITE_BITS2(bits);
-            dwords--;
-        }
-        else {
-            WRITE_BITS1(bits);
-        }
-#else
-        WRITE_BITS(bits);
-#endif
-
-        shift += 32;
-        shift %= width;
-    }
-    return base;
-}
-
-static CARD32 *
-StippleOver32(CARD32 *base, CARD32 *src, int offset, int width, int dwords)
-{
-    CARD32 *srcp;
-    CARD32 bits;
-    int bitsleft, shift, usable;
-
-    while (dwords--) {
-        bitsleft = width - offset;
-        srcp = src + (offset >> 5);
-        shift = offset & 31;
-        usable = 32 - shift;
-
-        if (bitsleft < 32) {
-            if (bitsleft <= usable) {
-                bits = SHIFT_L(*src, bitsleft) |
-                    (SHIFT_R(*srcp, shift) & XAAShiftMasks[bitsleft]);
-            }
-            else {
-                bits = SHIFT_L(*src, bitsleft) |
-                    (SHIFT_L(srcp[1], usable) & XAAShiftMasks[bitsleft]) |
-                    (SHIFT_R(*srcp, shift) & XAAShiftMasks[usable]);
-            }
-        }
-        else if (shift)
-            bits = SHIFT_R(*srcp, shift) | SHIFT_L(srcp[1], usable);
-        else
-            bits = *srcp;
-
-#ifdef TRIPLE_BITS
-        if (dwords >= 2) {
-            WRITE_BITS3(bits);
-            dwords -= 2;
-        }
-        else if (dwords > 0) {
-            WRITE_BITS2(bits);
-            dwords--;
-        }
-        else {
-            WRITE_BITS1(bits);
-        }
-#else
-        WRITE_BITS(bits);
-#endif
-
-        offset += 32;
-        offset %= width;
-    }
-    return base;
-}
-
-static CARD32 *
-StippleOver32_Inverted(CARD32 *base, CARD32 *src,
-                       int offset, int width, int dwords)
-{
-    CARD32 *srcp;
-    CARD32 bits;
-    int bitsleft, shift, usable;
-
-    while (dwords--) {
-        bitsleft = width - offset;
-        srcp = src + (offset >> 5);
-        shift = offset & 31;
-        usable = 32 - shift;
-
-        if (bitsleft < 32) {
-            if (bitsleft <= usable) {
-                bits = SHIFT_L(*src, bitsleft) |
-                    (SHIFT_R(*srcp, shift) & XAAShiftMasks[bitsleft]);
-            }
-            else {
-                bits = SHIFT_L(*src, bitsleft) |
-                    (SHIFT_L(srcp[1], usable) & XAAShiftMasks[bitsleft]) |
-                    (SHIFT_R(*srcp, shift) & XAAShiftMasks[usable]);
-            }
-        }
-        else if (shift)
-            bits = SHIFT_R(*srcp, shift) | SHIFT_L(srcp[1], usable);
-        else
-            bits = *srcp;
-
-        bits = ~bits;
-
-#ifdef TRIPLE_BITS
-        if (dwords >= 2) {
-            WRITE_BITS3(bits);
-            dwords -= 2;
-        }
-        else if (dwords > 0) {
-            WRITE_BITS2(bits);
-            dwords--;
-        }
-        else {
-            WRITE_BITS1(bits);
-        }
-#else
-        WRITE_BITS(bits);
-#endif
-
-        offset += 32;
-        offset %= width;
-    }
-    return base;
-}
diff --git a/hw/xfree86/xaa/xaaTEGlyph.c b/hw/xfree86/xaa/xaaTEGlyph.c
deleted file mode 100644
index 2926c1d..0000000
--- a/hw/xfree86/xaa/xaaTEGlyph.c
+++ /dev/null
@@ -1,1083 +0,0 @@
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include "xaa.h"
-#include "xaalocal.h"
-#include "xaacexp.h"
-#include "xf86.h"
-
-/* scanline function for TRIPLE_BITS_24BPP */
-static CARD32 *DrawTextScanline3(CARD32 *base, CARD32 *mem, int width);
-
-/* Loop unrolled functions for common font widths */
-static CARD32 *DrawTETextScanlineGeneric(CARD32 *base, unsigned int **glyphp,
-                                         int line, int width, int glyphwidth);
-static CARD32 *DrawTETextScanlineWidth7(CARD32 *base, unsigned int **glyphp,
-                                        int line, int width, int glyphwidth);
-static CARD32 *DrawTETextScanlineWidth10(CARD32 *base, unsigned int **glyphp,
-                                         int line, int width, int glyphwidth);
-static CARD32 *DrawTETextScanlineWidth12(CARD32 *base, unsigned int **glyphp,
-                                         int line, int width, int glyphwidth);
-static CARD32 *DrawTETextScanlineWidth14(CARD32 *base, unsigned int **glyphp,
-                                         int line, int width, int glyphwidth);
-static CARD32 *DrawTETextScanlineWidth16(CARD32 *base, unsigned int **glyphp,
-                                         int line, int width, int glyphwidth);
-static CARD32 *DrawTETextScanlineWidth18(CARD32 *base, unsigned int **glyphp,
-                                         int line, int width, int glyphwidth);
-static CARD32 *DrawTETextScanlineWidth24(CARD32 *base, unsigned int **glyphp,
-                                         int line, int width, int glyphwidth);
-
-#ifdef USEASSEMBLER
-#ifdef FIXEDBASE
-#ifdef MSBFIRST
-CARD32 *DrawTETextScanlineWidth6PMSBFirstFixedBase(CARD32 *base,
-                                                   unsigned int **glyphp,
-                                                   int line, int width,
-                                                   int glyphwidth);
-CARD32 *DrawTETextScanlineWidth8PMSBFirstFixedBase(CARD32 *base,
-                                                   unsigned int **glyphp,
-                                                   int line, int width,
-                                                   int glyphwidth);
-CARD32 *DrawTETextScanlineWidth9PMSBFirstFixedBase(CARD32 *base,
-                                                   unsigned int **glyphp,
-                                                   int line, int width,
-                                                   int glyphwidth);
-#else
-CARD32 *DrawTETextScanlineWidth6PLSBFirstFixedBase(CARD32 *base,
-                                                   unsigned int **glyphp,
-                                                   int line, int width,
-                                                   int glyphwidth);
-CARD32 *DrawTETextScanlineWidth8PLSBFirstFixedBase(CARD32 *base,
-                                                   unsigned int **glyphp,
-                                                   int line, int width,
-                                                   int glyphwidth);
-CARD32 *DrawTETextScanlineWidth9PLSBFirstFixedBase(CARD32 *base,
-                                                   unsigned int **glyphp,
-                                                   int line, int width,
-                                                   int glyphwidth);
-#endif
-#else
-#ifdef MSBFIRST
-CARD32 *DrawTETextScanlineWidth6PMSBFirst(CARD32 *base, unsigned int **glyphp,
-                                          int line, int width, int glyphwidth);
-CARD32 *DrawTETextScanlineWidth8PMSBFirst(CARD32 *base, unsigned int **glyphp,
-                                          int line, int width, int glyphwidth);
-CARD32 *DrawTETextScanlineWidth9PMSBFirst(CARD32 *base, unsigned int **glyphp,
-                                          int line, int width, int glyphwidth);
-#else
-CARD32 *DrawTETextScanlineWidth6PLSBFirst(CARD32 *base, unsigned int **glyphp,
-                                          int line, int width, int glyphwidth);
-CARD32 *DrawTETextScanlineWidth8PLSBFirst(CARD32 *base, unsigned int **glyphp,
-                                          int line, int width, int glyphwidth);
-CARD32 *DrawTETextScanlineWidth9PLSBFirst(CARD32 *base, unsigned int **glyphp,
-                                          int line, int width, int glyphwidth);
-#endif
-#endif
-#else
-static CARD32 *DrawTETextScanlineWidth6(CARD32 *base, unsigned int **glyphp,
-                                        int line, int width, int glyphwidth);
-static CARD32 *DrawTETextScanlineWidth8(CARD32 *base, unsigned int **glyphp,
-                                        int line, int width, int glyphwidth);
-static CARD32 *DrawTETextScanlineWidth9(CARD32 *base, unsigned int **glyphp,
-                                        int line, int width, int glyphwidth);
-#endif
-
-#define glyph_scanline_func EXPNAME(XAAGlyphScanlineFunc)
-#define glyph_get_scanline_func EXPNAME(XAAGetGlyphScanlineFunc)
-
-GlyphScanlineFuncPtr glyph_scanline_func[32] = {
-    DrawTETextScanlineGeneric, DrawTETextScanlineGeneric,
-    DrawTETextScanlineGeneric, DrawTETextScanlineGeneric,
-    DrawTETextScanlineGeneric,
-#ifdef USEASSEMBLER
-#ifdef FIXEDBASE
-#ifdef MSBFIRST
-    DrawTETextScanlineWidth6PMSBFirstFixedBase,
-    DrawTETextScanlineWidth7,
-    DrawTETextScanlineWidth8PMSBFirstFixedBase,
-    DrawTETextScanlineWidth9PMSBFirstFixedBase,
-#else
-    DrawTETextScanlineWidth6PLSBFirstFixedBase,
-    DrawTETextScanlineWidth7,
-    DrawTETextScanlineWidth8PLSBFirstFixedBase,
-    DrawTETextScanlineWidth9PLSBFirstFixedBase,
-#endif
-#else
-#ifdef MSBFIRST
-    DrawTETextScanlineWidth6PMSBFirst,
-    DrawTETextScanlineWidth7,
-    DrawTETextScanlineWidth8PMSBFirst,
-    DrawTETextScanlineWidth9PMSBFirst,
-#else
-    DrawTETextScanlineWidth6PLSBFirst,
-    DrawTETextScanlineWidth7,
-    DrawTETextScanlineWidth8PLSBFirst,
-    DrawTETextScanlineWidth9PLSBFirst,
-#endif
-#endif
-#else
-    DrawTETextScanlineWidth6, DrawTETextScanlineWidth7,
-    DrawTETextScanlineWidth8, DrawTETextScanlineWidth9,
-#endif
-    DrawTETextScanlineWidth10,
-    DrawTETextScanlineGeneric, DrawTETextScanlineWidth12,
-    DrawTETextScanlineGeneric, DrawTETextScanlineWidth14,
-    DrawTETextScanlineGeneric, DrawTETextScanlineWidth16,
-    DrawTETextScanlineGeneric, DrawTETextScanlineWidth18,
-    DrawTETextScanlineGeneric, DrawTETextScanlineGeneric,
-    DrawTETextScanlineGeneric, DrawTETextScanlineGeneric,
-    DrawTETextScanlineGeneric, DrawTETextScanlineWidth24,
-    DrawTETextScanlineGeneric, DrawTETextScanlineGeneric,
-    DrawTETextScanlineGeneric, DrawTETextScanlineGeneric,
-    DrawTETextScanlineGeneric, DrawTETextScanlineGeneric,
-    DrawTETextScanlineGeneric, DrawTETextScanlineGeneric
-};
-
-GlyphScanlineFuncPtr *
-glyph_get_scanline_func(void)
-{
-    return glyph_scanline_func;
-}
-
-/********************************************************************
-
-   Here we have TEGlyphRenders for a bunch of different color
-   expansion types.  The driver may provide its own renderer, but
-   this is the default one which renders using lower-level primitives
-   exported by the chipset driver.
-
-********************************************************************/
-
-/* This gets built for MSBFIRST or LSBFIRST with FIXEDBASE or not.
-	A total of 4 versions */
-
-void
-
-EXPNAME(XAATEGlyphRenderer) (ScrnInfoPtr pScrn,
-                             int x, int y, int w, int h, int skipleft,
-                             int startline, unsigned int **glyphs,
-                             int glyphWidth, int fg, int bg, int rop,
-                             unsigned planemask) {
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    CARD32 *base;
-    GlyphScanlineFuncPtr GlyphFunc = glyph_scanline_func[glyphWidth - 1];
-    int dwords = 0;
-
-    if ((bg != -1) && (infoRec->TEGlyphRendererFlags & TRANSPARENCY_ONLY)) {
-        (*infoRec->SetupForSolidFill) (pScrn, bg, rop, planemask);
-        (*infoRec->SubsequentSolidFillRect) (pScrn, x, y, w, h);
-        bg = -1;
-    }
-
-    (*infoRec->SetupForCPUToScreenColorExpandFill) (pScrn, fg, bg, rop,
-                                                    planemask);
-
-    if (skipleft &&
-        (!(infoRec->TEGlyphRendererFlags & LEFT_EDGE_CLIPPING) ||
-         (!(infoRec->TEGlyphRendererFlags & LEFT_EDGE_CLIPPING_NEGATIVE_X) &&
-          (skipleft > x)))) {
-        /* draw the first character only */
-
-        int count = h, line = startline;
-        int width = glyphWidth - skipleft;
-
-        if (width > w)
-            width = w;
-
-        (*infoRec->SubsequentCPUToScreenColorExpandFill) (pScrn, x, y, width, h,
-                                                          0);
-
-        base = (CARD32 *) infoRec->ColorExpandBase;
-
-        while (count--) {
-            register CARD32 tmp = SHIFT_R(glyphs[0][line++], skipleft);
-
-            WRITE_BITS(tmp);
-        }
-
-        w -= width;
-        if ((infoRec->TEGlyphRendererFlags & CPU_TRANSFER_PAD_QWORD) &&
-            ((((width + 31) >> 5) * h) & 1)) {
-            base = (CARD32 *) infoRec->ColorExpandBase;
-            base[0] = 0x00000000;
-        }
-        if (!w)
-            goto THE_END;
-        glyphs++;
-        x += width;
-        skipleft = 0;           /* nicely aligned again */
-    }
-
-    w += skipleft;
-    x -= skipleft;
-    dwords = ((w + 31) >> 5) * h;
-
-    (*infoRec->SubsequentCPUToScreenColorExpandFill) (pScrn, x, y, w, h,
-                                                      skipleft);
-
-    base = (CARD32 *) infoRec->ColorExpandBase;
-
-#ifndef FIXEDBASE
-    if ((((w + 31) >> 5) * h) <= infoRec->ColorExpandRange)
-        while (h--) {
-            base = (*GlyphFunc) (base, glyphs, startline++, w, glyphWidth);
-        }
-    else
-#endif
-        while (h--) {
-            (*GlyphFunc) (base, glyphs, startline++, w, glyphWidth);
-        }
-
-    if ((infoRec->TEGlyphRendererFlags & CPU_TRANSFER_PAD_QWORD) &&
-        (dwords & 1)) {
-        base = (CARD32 *) infoRec->ColorExpandBase;
-        base[0] = 0x00000000;
-    }
-
- THE_END:
-
-    if (infoRec->TEGlyphRendererFlags & SYNC_AFTER_COLOR_EXPAND)
-        (*infoRec->Sync) (pScrn);
-    else
-        SET_SYNC_FLAG(infoRec);
-}
-
-/********************************************************************
- 
-   This is the GlyphRenderer for TRIPLE_BITS_24BPP. It renders to a buffer
-   with the non FIXEDBASE LSB_FIRST code before tripling, and possibly
-   reversing the bits and sending them to the screen
-
-********************************************************************/
-
-void
-
-EXPNAME(XAATEGlyphRenderer3) (ScrnInfoPtr pScrn,
-                              int x, int y, int w, int h, int skipleft,
-                              int startline, unsigned int **glyphs,
-                              int glyphWidth, int fg, int bg, int rop,
-                              unsigned planemask) {
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    CARD32 *base, *mem;
-    GlyphScanlineFuncPtr GlyphFunc =
-        XAAGlyphScanlineFuncLSBFirst[glyphWidth - 1];
-    int dwords = 0;
-
-    if ((bg != -1) &&
-        ((infoRec->TEGlyphRendererFlags & TRANSPARENCY_ONLY) ||
-         ((infoRec->TEGlyphRendererFlags & RGB_EQUAL) &&
-          (!CHECK_RGB_EQUAL(bg))))) {
-        (*infoRec->SetupForSolidFill) (pScrn, bg, rop, planemask);
-        (*infoRec->SubsequentSolidFillRect) (pScrn, x, y, w, h);
-        bg = -1;
-    }
-
-    (*infoRec->SetupForCPUToScreenColorExpandFill) (pScrn, fg, bg, rop,
-                                                    planemask);
-
-    if (skipleft) {
-        /* draw the first character only */
-
-        int count = h, line = startline;
-        int width = glyphWidth - skipleft;
-        CARD32 bits;
-
-        if (width > w)
-            width = w;
-        (*infoRec->SubsequentCPUToScreenColorExpandFill) (pScrn, x, y, width, h,
-                                                          0);
-
-        base = (CARD32 *) infoRec->ColorExpandBase;
-
-        while (count--) {
-            bits = SHIFT_R(glyphs[0][line++], skipleft);
-            if (width >= 22) {
-                WRITE_BITS3(bits);
-            }
-            else if (width >= 11) {
-                WRITE_BITS2(bits);
-            }
-            else {
-                WRITE_BITS1(bits);
-            }
-        }
-
-        w -= width;
-        if ((infoRec->TEGlyphRendererFlags & CPU_TRANSFER_PAD_QWORD) &&
-            ((((3 * width + 31) >> 5) * h) & 1)) {
-            base = (CARD32 *) infoRec->ColorExpandBase;
-            base[0] = 0x00000000;
-        }
-        if (!w)
-            goto THE_END;
-        glyphs++;
-        x += width;
-        skipleft = 0;           /* nicely aligned again */
-    }
-
-    dwords = ((3 * w + 31) >> 5) * h;
-    mem = (CARD32 *) malloc(((w + 31) >> 3) * sizeof(char));
-    if (!mem)
-        return;
-
-    (*infoRec->SubsequentCPUToScreenColorExpandFill) (pScrn, x, y, w, h, 0);
-
-    base = (CARD32 *) infoRec->ColorExpandBase;
-
-#ifndef FIXEDBASE
-    if ((((3 * w + 31) >> 5) * h) <= infoRec->ColorExpandRange)
-        while (h--) {
-            (*GlyphFunc) (mem, glyphs, startline++, w, glyphWidth);
-            base = DrawTextScanline3(base, mem, w);
-        }
-    else
-#endif
-        while (h--) {
-            (*GlyphFunc) (mem, glyphs, startline++, w, glyphWidth);
-            DrawTextScanline3(base, mem, w);
-        }
-
-    free(mem);
-
-    if ((infoRec->TEGlyphRendererFlags & CPU_TRANSFER_PAD_QWORD) &&
-        (dwords & 1)) {
-        base = (CARD32 *) infoRec->ColorExpandBase;
-        base[0] = 0x00000000;
-    }
-
- THE_END:
-
-    if (infoRec->TEGlyphRendererFlags & SYNC_AFTER_COLOR_EXPAND)
-        (*infoRec->Sync) (pScrn);
-    else
-        SET_SYNC_FLAG(infoRec);
-}
-
-#ifndef FIXEDBASE
-/*  Scanline version of above gets built for LSBFIRST and MSBFIRST */
-
-void
-
-EXPNAME(XAATEGlyphRendererScanline) (ScrnInfoPtr pScrn,
-                                     int x, int y, int w, int h, int skipleft,
-                                     int startline, unsigned int **glyphs,
-                                     int glyphWidth, int fg, int bg, int rop,
-                                     unsigned planemask) {
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    int bufferNo;
-    CARD32 *base;
-    GlyphScanlineFuncPtr GlyphFunc = glyph_scanline_func[glyphWidth - 1];
-
-    if ((bg != -1) && (infoRec->TEGlyphRendererFlags & TRANSPARENCY_ONLY)) {
-        (*infoRec->SetupForSolidFill) (pScrn, bg, rop, planemask);
-        (*infoRec->SubsequentSolidFillRect) (pScrn, x, y, w, h);
-        bg = -1;
-    }
-
-    (*infoRec->SetupForScanlineCPUToScreenColorExpandFill) (pScrn, fg, bg, rop,
-                                                            planemask);
-
-    if (skipleft &&
-        (!(infoRec->TEGlyphRendererFlags & LEFT_EDGE_CLIPPING) ||
-         (!(infoRec->TEGlyphRendererFlags & LEFT_EDGE_CLIPPING_NEGATIVE_X) &&
-          (skipleft > x)))) {
-        /* draw the first character only */
-
-        int count = h, line = startline;
-        int width = glyphWidth - skipleft;
-
-        if (width > w)
-            width = w;
-
-        (*infoRec->SubsequentScanlineCPUToScreenColorExpandFill) (pScrn, x, y,
-                                                                  width, h, 0);
-
-        bufferNo = 0;
-
-        while (count--) {
-            register CARD32 tmp = SHIFT_R(glyphs[0][line++], skipleft);
-
-            base = (CARD32 *) infoRec->ScanlineColorExpandBuffers[bufferNo];
-            WRITE_BITS(tmp);
-            (*infoRec->SubsequentColorExpandScanline) (pScrn, bufferNo++);
-            if (bufferNo >= infoRec->NumScanlineColorExpandBuffers)
-                bufferNo = 0;
-        }
-
-        w -= width;
-        if (!w)
-            goto THE_END;
-        glyphs++;
-        x += width;
-        skipleft = 0;           /* nicely aligned again */
-    }
-
-    w += skipleft;
-    x -= skipleft;
-
-    (*infoRec->SubsequentScanlineCPUToScreenColorExpandFill) (pScrn, x, y, w, h,
-                                                              skipleft);
-
-    bufferNo = 0;
-
-    while (h--) {
-        base = (CARD32 *) infoRec->ScanlineColorExpandBuffers[bufferNo];
-        (*GlyphFunc) (base, glyphs, startline++, w, glyphWidth);
-        (*infoRec->SubsequentColorExpandScanline) (pScrn, bufferNo++);
-        if (bufferNo >= infoRec->NumScanlineColorExpandBuffers)
-            bufferNo = 0;
-    }
-
- THE_END:
-
-    SET_SYNC_FLAG(infoRec);
-}
-
-void
-
-EXPNAME(XAATEGlyphRendererScanline3) (ScrnInfoPtr pScrn,
-                                      int x, int y, int w, int h, int skipleft,
-                                      int startline, unsigned int **glyphs,
-                                      int glyphWidth, int fg, int bg, int rop,
-                                      unsigned planemask) {
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    int bufferNo;
-    CARD32 *base, *mem;
-    GlyphScanlineFuncPtr GlyphFunc =
-        XAAGlyphScanlineFuncLSBFirst[glyphWidth - 1];
-
-    if ((bg != -1) &&
-        ((infoRec->TEGlyphRendererFlags & TRANSPARENCY_ONLY) ||
-         ((infoRec->TEGlyphRendererFlags & RGB_EQUAL) &&
-          (!CHECK_RGB_EQUAL(bg))))) {
-        (*infoRec->SetupForSolidFill) (pScrn, bg, rop, planemask);
-        (*infoRec->SubsequentSolidFillRect) (pScrn, x, y, w, h);
-        bg = -1;
-    }
-
-    (*infoRec->SetupForScanlineCPUToScreenColorExpandFill) (pScrn, fg, bg, rop,
-                                                            planemask);
-
-    if (skipleft) {
-        /* draw the first character only */
-
-        int count = h, line = startline;
-        int width = glyphWidth - skipleft;
-        CARD32 bits;
-
-        if (width > w)
-            width = w;
-
-        (*infoRec->SubsequentScanlineCPUToScreenColorExpandFill) (pScrn, x, y,
-                                                                  width, h, 0);
-
-        bufferNo = 0;
-
-        while (count--) {
-            base = (CARD32 *) infoRec->ScanlineColorExpandBuffers[bufferNo];
-            bits = SHIFT_R(glyphs[0][line++], skipleft);
-            if (width >= 22) {
-                WRITE_BITS3(bits);
-            }
-            else if (width >= 11) {
-                WRITE_BITS2(bits);
-            }
-            else {
-                WRITE_BITS1(bits);
-            }
-            (*infoRec->SubsequentColorExpandScanline) (pScrn, bufferNo++);
-            if (bufferNo >= infoRec->NumScanlineColorExpandBuffers)
-                bufferNo = 0;
-        }
-
-        w -= width;
-        if (!w)
-            goto THE_END;
-        glyphs++;
-        x += width;
-        skipleft = 0;           /* nicely aligned again */
-    }
-
-    w += skipleft;
-    x -= skipleft;
-    mem = (CARD32 *) malloc(((w + 31) >> 3) * sizeof(char));
-    if (!mem)
-        return;
-
-    (*infoRec->SubsequentScanlineCPUToScreenColorExpandFill) (pScrn, x, y, w, h,
-                                                              skipleft);
-
-    bufferNo = 0;
-
-    while (h--) {
-        base = (CARD32 *) infoRec->ScanlineColorExpandBuffers[bufferNo];
-        (*GlyphFunc) (mem, glyphs, startline++, w, glyphWidth);
-        DrawTextScanline3(base, mem, w);
-        (*infoRec->SubsequentColorExpandScanline) (pScrn, bufferNo++);
-        if (bufferNo >= infoRec->NumScanlineColorExpandBuffers)
-            bufferNo = 0;
-    }
-
-    free(mem);
-
- THE_END:
-
-    SET_SYNC_FLAG(infoRec);
-}
-
-#endif
-
-/********************************************************************
-
-   TRIPLE_BITS_24BPP scanline rendering code.
-
-********************************************************************/
-
-static CARD32 *
-DrawTextScanline3(CARD32 *base, CARD32 *mem, int width)
-{
-
-    while (width > 32) {
-        WRITE_BITS3(*mem);
-        mem++;
-        width -= 32;
-    }
-    if (width) {
-        if (width >= 22) {
-            WRITE_BITS3(*mem);
-        }
-        else if (width >= 11) {
-            WRITE_BITS2(*mem);
-        }
-        else {
-            WRITE_BITS1(*mem);
-        }
-    }
-
-    return base;
-}
-
-/********************************************************************
-
-   Generic TE scanline rendering code.
-
-********************************************************************/
-
-static CARD32 *
-DrawTETextScanlineGeneric(CARD32 *base,
-                          unsigned int **glyphp,
-                          int line, int width, int glyphwidth)
-{
-    CARD32 bits = (*glyphp)[line];
-    int shift = glyphwidth;
-
-    while (width > 32) {
-        while (shift < 32) {
-            glyphp++;
-            bits |= SHIFT_L((*glyphp)[line], shift);
-            shift += glyphwidth;
-        }
-        WRITE_BITS(bits);
-        shift &= 31;
-        if (shift)
-            bits = SHIFT_R((*glyphp)[line], (glyphwidth - shift));
-        else
-            bits = 0;
-        width -= 32;
-    }
-
-    if (width) {
-        width -= shift;
-        while (width > 0) {
-            glyphp++;
-            bits |= SHIFT_L((*glyphp)[line], shift);
-            shift += glyphwidth;
-            width -= glyphwidth;
-        }
-        WRITE_BITS(bits);
-    }
-
-    return base;
-}
-
-/********************************************************************
-
-   Loop unrolled TE font scanline rendering code
-
-********************************************************************/
-
-#ifndef USEASSEMBLER
-static CARD32 *
-DrawTETextScanlineWidth6(CARD32 *base,
-                         unsigned int **glyphp,
-                         int line, int width, int glyphwidth)
-{
-    while (1) {
-        unsigned int bits;
-
-        bits = glyphp[0][line];
-        bits |= SHIFT_L(glyphp[1][line], 6);
-        bits |= SHIFT_L(glyphp[2][line], 12);
-        bits |= SHIFT_L(glyphp[3][line], 18);
-        bits |= SHIFT_L(glyphp[4][line], 24);
-        bits |= SHIFT_L(glyphp[5][line], 30);
-        WRITE_IN_BITORDER(base, 0, bits);
-        CHECKRETURN(1);
-        bits = SHIFT_R(glyphp[5][line], 2);
-        bits |= SHIFT_L(glyphp[6][line], 4);
-        bits |= SHIFT_L(glyphp[7][line], 10);
-        bits |= SHIFT_L(glyphp[8][line], 16);
-        bits |= SHIFT_L(glyphp[9][line], 22);
-        bits |= SHIFT_L(glyphp[10][line], 28);
-        WRITE_IN_BITORDER(base, 1, bits);
-        CHECKRETURN(2);
-        bits = SHIFT_R(glyphp[10][line], 4);
-        bits |= SHIFT_L(glyphp[11][line], 2);
-        bits |= SHIFT_L(glyphp[12][line], 8);
-        bits |= SHIFT_L(glyphp[13][line], 14);
-        bits |= SHIFT_L(glyphp[14][line], 20);
-        bits |= SHIFT_L(glyphp[15][line], 26);
-        WRITE_IN_BITORDER(base, 2, bits);
-        CHECKRETURN(3);
-#ifndef FIXEDBASE
-        base += 3;
-#endif
-        width -= 96;
-        glyphp += 16;
-    }
-    return base;
-}
-#endif
-
-static CARD32 *
-DrawTETextScanlineWidth7(CARD32 *base,
-                         unsigned int **glyphp,
-                         int line, int width, int glyphwidth)
-{
-    while (1) {
-        unsigned int bits;
-
-        bits = glyphp[0][line];
-        bits |= SHIFT_L(glyphp[1][line], 7);
-        bits |= SHIFT_L(glyphp[2][line], 14);
-        bits |= SHIFT_L(glyphp[3][line], 21);
-        bits |= SHIFT_L(glyphp[4][line], 28);
-        WRITE_IN_BITORDER(base, 0, bits);
-        CHECKRETURN(1);
-        bits = SHIFT_R(glyphp[4][line], 4);
-        bits |= SHIFT_L(glyphp[5][line], 3);
-        bits |= SHIFT_L(glyphp[6][line], 10);
-        bits |= SHIFT_L(glyphp[7][line], 17);
-        bits |= SHIFT_L(glyphp[8][line], 24);
-        bits |= SHIFT_L(glyphp[9][line], 31);
-        WRITE_IN_BITORDER(base, 1, bits);
-        CHECKRETURN(2);
-        bits = SHIFT_R(glyphp[9][line], 1);
-        bits |= SHIFT_L(glyphp[10][line], 6);
-        bits |= SHIFT_L(glyphp[11][line], 13);
-        bits |= SHIFT_L(glyphp[12][line], 20);
-        bits |= SHIFT_L(glyphp[13][line], 27);
-        WRITE_IN_BITORDER(base, 2, bits);
-        CHECKRETURN(3);
-        bits = SHIFT_R(glyphp[13][line], 5);
-        bits |= SHIFT_L(glyphp[14][line], 2);
-        bits |= SHIFT_L(glyphp[15][line], 9);
-        bits |= SHIFT_L(glyphp[16][line], 16);
-        bits |= SHIFT_L(glyphp[17][line], 23);
-        bits |= SHIFT_L(glyphp[18][line], 30);
-        WRITE_IN_BITORDER(base, 3, bits);
-        CHECKRETURN(4);
-        bits = SHIFT_R(glyphp[18][line], 2);
-        bits |= SHIFT_L(glyphp[19][line], 5);
-        bits |= SHIFT_L(glyphp[20][line], 12);
-        bits |= SHIFT_L(glyphp[21][line], 19);
-        bits |= SHIFT_L(glyphp[22][line], 26);
-        WRITE_IN_BITORDER(base, 4, bits);
-        CHECKRETURN(5);
-        bits = SHIFT_R(glyphp[22][line], 6);
-        bits |= SHIFT_L(glyphp[23][line], 1);
-        bits |= SHIFT_L(glyphp[24][line], 8);
-        bits |= SHIFT_L(glyphp[25][line], 15);
-        bits |= SHIFT_L(glyphp[26][line], 22);
-        bits |= SHIFT_L(glyphp[27][line], 29);
-        WRITE_IN_BITORDER(base, 5, bits);
-        CHECKRETURN(6);
-        bits = SHIFT_R(glyphp[27][line], 3);
-        bits |= SHIFT_L(glyphp[28][line], 4);
-        bits |= SHIFT_L(glyphp[29][line], 11);
-        bits |= SHIFT_L(glyphp[30][line], 18);
-        bits |= SHIFT_L(glyphp[31][line], 25);
-        WRITE_IN_BITORDER(base, 6, bits);
-        CHECKRETURN(7);
-#ifndef FIXEDBASE
-        base += 7;
-#endif
-        width -= 224;
-        glyphp += 32;
-    }
-    return base;
-}
-
-#ifndef USEASSEMBLER
-static CARD32 *
-DrawTETextScanlineWidth8(CARD32 *base,
-                         unsigned int **glyphp,
-                         int line, int width, int glyphwidth)
-{
-    while (1) {
-        unsigned int bits;
-
-        bits = glyphp[0][line];
-        bits |= SHIFT_L(glyphp[1][line], 8);
-        bits |= SHIFT_L(glyphp[2][line], 16);
-        bits |= SHIFT_L(glyphp[3][line], 24);
-        WRITE_IN_BITORDER(base, 0, bits);
-        CHECKRETURN(1);
-        bits = glyphp[4][line];
-        bits |= SHIFT_L(glyphp[5][line], 8);
-        bits |= SHIFT_L(glyphp[6][line], 16);
-        bits |= SHIFT_L(glyphp[7][line], 24);
-        WRITE_IN_BITORDER(base, 1, bits);
-        CHECKRETURN(2);
-#ifndef FIXEDBASE
-        base += 2;
-#endif
-        width -= 64;
-        glyphp += 8;
-    }
-    return base;
-}
-#endif
-
-#ifndef USEASSEMBLER
-static CARD32 *
-DrawTETextScanlineWidth9(CARD32 *base,
-                         unsigned int **glyphp,
-                         int line, int width, int glyphwidth)
-{
-    while (1) {
-        unsigned int bits;
-
-        bits = glyphp[0][line];
-        bits |= SHIFT_L(glyphp[1][line], 9);
-        bits |= SHIFT_L(glyphp[2][line], 18);
-        bits |= SHIFT_L(glyphp[3][line], 27);
-        WRITE_IN_BITORDER(base, 0, bits);
-        CHECKRETURN(1);
-        bits = SHIFT_R(glyphp[3][line], 5);
-        bits |= SHIFT_L(glyphp[4][line], 4);
-        bits |= SHIFT_L(glyphp[5][line], 13);
-        bits |= SHIFT_L(glyphp[6][line], 22);
-        bits |= SHIFT_L(glyphp[7][line], 31);
-        WRITE_IN_BITORDER(base, 1, bits);
-        CHECKRETURN(2);
-        bits = SHIFT_R(glyphp[7][line], 1);
-        bits |= SHIFT_L(glyphp[8][line], 8);
-        bits |= SHIFT_L(glyphp[9][line], 17);
-        bits |= SHIFT_L(glyphp[10][line], 26);
-        WRITE_IN_BITORDER(base, 2, bits);
-        CHECKRETURN(3);
-        bits = SHIFT_R(glyphp[10][line], 6);
-        bits |= SHIFT_L(glyphp[11][line], 3);
-        bits |= SHIFT_L(glyphp[12][line], 12);
-        bits |= SHIFT_L(glyphp[13][line], 21);
-        bits |= SHIFT_L(glyphp[14][line], 30);
-        WRITE_IN_BITORDER(base, 3, bits);
-        CHECKRETURN(4);
-        bits = SHIFT_R(glyphp[14][line], 2);
-        bits |= SHIFT_L(glyphp[15][line], 7);
-        bits |= SHIFT_L(glyphp[16][line], 16);
-        bits |= SHIFT_L(glyphp[17][line], 25);
-        WRITE_IN_BITORDER(base, 4, bits);
-        CHECKRETURN(5);
-        bits = SHIFT_R(glyphp[17][line], 7);
-        bits |= SHIFT_L(glyphp[18][line], 2);
-        bits |= SHIFT_L(glyphp[19][line], 11);
-        bits |= SHIFT_L(glyphp[20][line], 20);
-        bits |= SHIFT_L(glyphp[21][line], 29);
-        WRITE_IN_BITORDER(base, 5, bits);
-        CHECKRETURN(6);
-        bits = SHIFT_R(glyphp[21][line], 3);
-        bits |= SHIFT_L(glyphp[22][line], 6);
-        bits |= SHIFT_L(glyphp[23][line], 15);
-        bits |= SHIFT_L(glyphp[24][line], 24);
-        WRITE_IN_BITORDER(base, 6, bits);
-        CHECKRETURN(7);
-        bits = SHIFT_R(glyphp[24][line], 8);
-        bits |= SHIFT_L(glyphp[25][line], 1);
-        bits |= SHIFT_L(glyphp[26][line], 10);
-        bits |= SHIFT_L(glyphp[27][line], 19);
-        bits |= SHIFT_L(glyphp[28][line], 28);
-        WRITE_IN_BITORDER(base, 7, bits);
-        CHECKRETURN(8);
-        bits = SHIFT_R(glyphp[28][line], 4);
-        bits |= SHIFT_L(glyphp[29][line], 5);
-        bits |= SHIFT_L(glyphp[30][line], 14);
-        bits |= SHIFT_L(glyphp[31][line], 23);
-        WRITE_IN_BITORDER(base, 8, bits);
-        CHECKRETURN(9);
-#ifndef FIXEDBASE
-        base += 9;
-#endif
-        width -= 288;
-        glyphp += 32;
-    }
-    return base;
-}
-#endif
-
-static CARD32 *
-DrawTETextScanlineWidth10(CARD32 *base,
-                          unsigned int **glyphp,
-                          int line, int width, int glyphwidth)
-{
-    while (1) {
-        unsigned int bits;
-
-        bits = glyphp[0][line];
-        bits |= SHIFT_L(glyphp[1][line], 10);
-        bits |= SHIFT_L(glyphp[2][line], 20);
-        bits |= SHIFT_L(glyphp[3][line], 30);
-        WRITE_IN_BITORDER(base, 0, bits);
-        CHECKRETURN(1);
-        bits = SHIFT_R(glyphp[3][line], 2);
-        bits |= SHIFT_L(glyphp[4][line], 8);
-        bits |= SHIFT_L(glyphp[5][line], 18);
-        bits |= SHIFT_L(glyphp[6][line], 28);
-        WRITE_IN_BITORDER(base, 1, bits);
-        CHECKRETURN(2);
-        bits = SHIFT_R(glyphp[6][line], 4);
-        bits |= SHIFT_L(glyphp[7][line], 6);
-        bits |= SHIFT_L(glyphp[8][line], 16);
-        bits |= SHIFT_L(glyphp[9][line], 26);
-        WRITE_IN_BITORDER(base, 2, bits);
-        CHECKRETURN(3);
-        bits = SHIFT_R(glyphp[9][line], 6);
-        bits |= SHIFT_L(glyphp[10][line], 4);
-        bits |= SHIFT_L(glyphp[11][line], 14);
-        bits |= SHIFT_L(glyphp[12][line], 24);
-        WRITE_IN_BITORDER(base, 3, bits);
-        CHECKRETURN(4);
-        bits = SHIFT_R(glyphp[12][line], 8);
-        bits |= SHIFT_L(glyphp[13][line], 2);
-        bits |= SHIFT_L(glyphp[14][line], 12);
-        bits |= SHIFT_L(glyphp[15][line], 22);
-        WRITE_IN_BITORDER(base, 4, bits);
-        CHECKRETURN(5);
-#ifndef FIXEDBASE
-        base += 5;
-#endif
-        width -= 160;
-        glyphp += 16;
-    }
-    return base;
-}
-
-static CARD32 *
-DrawTETextScanlineWidth12(CARD32 *base,
-                          unsigned int **glyphp,
-                          int line, int width, int glyphwidth)
-{
-    while (1) {
-        unsigned int bits;
-
-        bits = glyphp[0][line];
-        bits |= SHIFT_L(glyphp[1][line], 12);
-        bits |= SHIFT_L(glyphp[2][line], 24);
-        WRITE_IN_BITORDER(base, 0, bits);
-        CHECKRETURN(1);
-        bits = SHIFT_R(glyphp[2][line], 8);
-        bits |= SHIFT_L(glyphp[3][line], 4);
-        bits |= SHIFT_L(glyphp[4][line], 16);
-        bits |= SHIFT_L(glyphp[5][line], 28);
-        WRITE_IN_BITORDER(base, 1, bits);
-        CHECKRETURN(2);
-        bits = SHIFT_R(glyphp[5][line], 4);
-        bits |= SHIFT_L(glyphp[6][line], 8);
-        bits |= SHIFT_L(glyphp[7][line], 20);
-        WRITE_IN_BITORDER(base, 2, bits);
-        CHECKRETURN(3);
-#ifndef FIXEDBASE
-        base += 3;
-#endif
-        width -= 96;
-        glyphp += 8;
-    }
-    return base;
-}
-
-static CARD32 *
-DrawTETextScanlineWidth14(CARD32 *base,
-                          unsigned int **glyphp,
-                          int line, int width, int glyphwidth)
-{
-    while (1) {
-        unsigned int bits;
-
-        bits = glyphp[0][line];
-        bits |= SHIFT_L(glyphp[1][line], 14);
-        bits |= SHIFT_L(glyphp[2][line], 28);
-        WRITE_IN_BITORDER(base, 0, bits);
-        CHECKRETURN(1);
-        bits = SHIFT_R(glyphp[2][line], 4);
-        bits |= SHIFT_L(glyphp[3][line], 10);
-        bits |= SHIFT_L(glyphp[4][line], 24);
-        WRITE_IN_BITORDER(base, 1, bits);
-        CHECKRETURN(2);
-        bits = SHIFT_R(glyphp[4][line], 8);
-        bits |= SHIFT_L(glyphp[5][line], 6);
-        bits |= SHIFT_L(glyphp[6][line], 20);
-        WRITE_IN_BITORDER(base, 2, bits);
-        CHECKRETURN(3);
-        bits = SHIFT_R(glyphp[6][line], 12);
-        bits |= SHIFT_L(glyphp[7][line], 2);
-        bits |= SHIFT_L(glyphp[8][line], 16);
-        bits |= SHIFT_L(glyphp[9][line], 30);
-        WRITE_IN_BITORDER(base, 3, bits);
-        CHECKRETURN(4);
-        bits = SHIFT_R(glyphp[9][line], 2);
-        bits |= SHIFT_L(glyphp[10][line], 12);
-        bits |= SHIFT_L(glyphp[11][line], 26);
-        WRITE_IN_BITORDER(base, 4, bits);
-        CHECKRETURN(5);
-        bits = SHIFT_R(glyphp[11][line], 6);
-        bits |= SHIFT_L(glyphp[12][line], 8);
-        bits |= SHIFT_L(glyphp[13][line], 22);
-        WRITE_IN_BITORDER(base, 5, bits);
-        CHECKRETURN(6);
-        bits = SHIFT_R(glyphp[13][line], 10);
-        bits |= SHIFT_L(glyphp[14][line], 4);
-        bits |= SHIFT_L(glyphp[15][line], 18);
-        WRITE_IN_BITORDER(base, 6, bits);
-        CHECKRETURN(7);
-#ifndef FIXEDBASE
-        base += 7;
-#endif
-        width -= 224;
-        glyphp += 16;
-    }
-    return base;
-}
-
-static CARD32 *
-DrawTETextScanlineWidth16(CARD32 *base,
-                          unsigned int **glyphp,
-                          int line, int width, int glyphwidth)
-{
-    while (1) {
-        unsigned int bits;
-
-        bits = glyphp[0][line];
-        bits |= SHIFT_L(glyphp[1][line], 16);
-        WRITE_IN_BITORDER(base, 0, bits);
-        CHECKRETURN(1);
-        bits = glyphp[2][line];
-        bits |= SHIFT_L(glyphp[3][line], 16);
-        WRITE_IN_BITORDER(base, 1, bits);
-        CHECKRETURN(2);
-        bits = glyphp[4][line];
-        bits |= SHIFT_L(glyphp[5][line], 16);
-        WRITE_IN_BITORDER(base, 2, bits);
-        CHECKRETURN(3);
-        bits = glyphp[6][line];
-        bits |= SHIFT_L(glyphp[7][line], 16);
-        WRITE_IN_BITORDER(base, 3, bits);
-        CHECKRETURN(4);
-#ifndef FIXEDBASE
-        base += 4;
-#endif
-        width -= 128;
-        glyphp += 8;
-    }
-    return base;
-}
-
-static CARD32 *
-DrawTETextScanlineWidth18(CARD32 *base,
-                          unsigned int **glyphp,
-                          int line, int width, int glyphwidth)
-{
-    while (1) {
-        unsigned int bits;
-
-        bits = glyphp[0][line];
-        bits |= SHIFT_L(glyphp[1][line], 18);
-        WRITE_IN_BITORDER(base, 0, bits);
-        CHECKRETURN(1);
-        bits = SHIFT_R(glyphp[1][line], 14);
-        bits |= SHIFT_L(glyphp[2][line], 4);
-        bits |= SHIFT_L(glyphp[3][line], 22);
-        WRITE_IN_BITORDER(base, 1, bits);
-        CHECKRETURN(2);
-        bits = SHIFT_R(glyphp[3][line], 10);
-        bits |= SHIFT_L(glyphp[4][line], 8);
-        bits |= SHIFT_L(glyphp[5][line], 26);
-        WRITE_IN_BITORDER(base, 2, bits);
-        CHECKRETURN(3);
-        bits = SHIFT_R(glyphp[5][line], 6);
-        bits |= SHIFT_L(glyphp[6][line], 12);
-        bits |= SHIFT_L(glyphp[7][line], 30);
-        WRITE_IN_BITORDER(base, 3, bits);
-        CHECKRETURN(4);
-        bits = SHIFT_R(glyphp[7][line], 2);
-        bits |= SHIFT_L(glyphp[8][line], 16);
-        WRITE_IN_BITORDER(base, 4, bits);
-        CHECKRETURN(5);
-        bits = SHIFT_R(glyphp[8][line], 16);
-        bits |= SHIFT_L(glyphp[9][line], 2);
-        bits |= SHIFT_L(glyphp[10][line], 20);
-        WRITE_IN_BITORDER(base, 5, bits);
-        CHECKRETURN(6);
-        bits = SHIFT_R(glyphp[10][line], 12);
-        bits |= SHIFT_L(glyphp[11][line], 6);
-        bits |= SHIFT_L(glyphp[12][line], 24);
-        WRITE_IN_BITORDER(base, 6, bits);
-        CHECKRETURN(7);
-        bits = SHIFT_R(glyphp[12][line], 8);
-        bits |= SHIFT_L(glyphp[13][line], 10);
-        bits |= SHIFT_L(glyphp[14][line], 28);
-        WRITE_IN_BITORDER(base, 7, bits);
-        CHECKRETURN(8);
-        bits = SHIFT_R(glyphp[14][line], 4);
-        bits |= SHIFT_L(glyphp[15][line], 14);
-        WRITE_IN_BITORDER(base, 8, bits);
-        CHECKRETURN(9);
-#ifndef FIXEDBASE
-        base += 9;
-#endif
-        width -= 288;
-        glyphp += 16;
-    }
-    return base;
-}
-
-static CARD32 *
-DrawTETextScanlineWidth24(CARD32 *base,
-                          unsigned int **glyphp,
-                          int line, int width, int glyphwidth)
-{
-    while (1) {
-        unsigned int bits;
-
-        bits = glyphp[0][line];
-        bits |= SHIFT_L(glyphp[1][line], 24);
-        WRITE_IN_BITORDER(base, 0, bits);
-        CHECKRETURN(1);
-        bits = SHIFT_R(glyphp[1][line], 8);
-        bits |= SHIFT_L(glyphp[2][line], 16);
-        WRITE_IN_BITORDER(base, 1, bits);
-        CHECKRETURN(2);
-        bits = SHIFT_R(glyphp[2][line], 16);
-        bits |= SHIFT_L(glyphp[3][line], 8);
-        WRITE_IN_BITORDER(base, 2, bits);
-        CHECKRETURN(3);
-#ifndef FIXEDBASE
-        base += 3;
-#endif
-        width -= 96;
-        glyphp += 4;
-    }
-    return base;
-}
diff --git a/hw/xfree86/xaa/xaaTEText.c b/hw/xfree86/xaa/xaaTEText.c
deleted file mode 100644
index a5ef447..0000000
--- a/hw/xfree86/xaa/xaaTEText.c
+++ /dev/null
@@ -1,295 +0,0 @@
-
-/********************************************************************
-
-   In this file we have GC level replacements for PolyText8/16,
-   ImageText8/16, ImageGlyphBlt and PolyGlyphBlt for TE (fixed) fonts.
-   The idea is that everything in this file is device independent.
-   The mentioned GCOps are merely wrappers for XAAGlyphBltTEColorExpansion
-   which calculates the boxes containing arbitrarily clipped text
-   and passes them to the TEGlyphRenderer which will usually be a lower 
-   level XAA function which renders these clipped glyphs using
-   the basic color expansion functions exported by the chipset driver.
-   The TEGlyphRenderer itself may optionally be driver supplied to
-   facilitate work-arounds/optimizations at a higher level than usual.
-
-   v1.0 - Mark Vojkovich (mvojkovi at ucsd.edu)
-
-********************************************************************/
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include "misc.h"
-#include "xf86.h"
-#include "xf86_OSproc.h"
-
-#include <X11/X.h>
-#include <X11/fonts/font.h>
-#include "scrnintstr.h"
-#include "dixfontstr.h"
-#include "xf86str.h"
-#include "xaa.h"
-#include "xaalocal.h"
-#include "gcstruct.h"
-#include "pixmapstr.h"
-
-static void XAAGlyphBltTEColorExpansion(ScrnInfoPtr pScrn, int xInit,
-                                        int yInit, FontPtr font, int fg, int bg,
-                                        int rop, unsigned int planemask,
-                                        RegionPtr cclip, int nglyph,
-                                        unsigned char *gBase,
-                                        CharInfoPtr * ppci);
-
-/********************************************************************
-
-   GC level replacements for PolyText8/16 and ImageText8/16
-   for TE fonts when using color expansion.
-
-********************************************************************/
-
-int
-XAAPolyText8TEColorExpansion(DrawablePtr pDraw,
-                             GCPtr pGC, int x, int y, int count, char *chars)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    unsigned long n;
-
-    (*pGC->font->get_glyphs) (pGC->font, (unsigned long) count,
-                              (unsigned char *) chars, Linear8Bit, &n,
-                              infoRec->CharInfo);
-
-    /* we have divorced XAAGlyphBltTEColorExpansion from the drawable */
-    if (n)
-        XAAGlyphBltTEColorExpansion(infoRec->pScrn, x + pDraw->x, y + pDraw->y,
-                                    pGC->font, pGC->fgPixel, -1, pGC->alu,
-                                    pGC->planemask, pGC->pCompositeClip, n,
-                                    FONTGLYPHS(pGC->font), infoRec->CharInfo);
-
-    return (x + (n * FONTMAXBOUNDS(pGC->font, characterWidth)));
-}
-
-int
-XAAPolyText16TEColorExpansion(DrawablePtr pDraw,
-                              GCPtr pGC,
-                              int x, int y, int count, unsigned short *chars)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    unsigned long n;
-
-    (*pGC->font->get_glyphs) (pGC->font, (unsigned long) count,
-                              (unsigned char *) chars,
-                              (FONTLASTROW(pGC->font) ==
-                               0) ? Linear16Bit : TwoD16Bit, &n,
-                              infoRec->CharInfo);
-
-    if (n)
-        XAAGlyphBltTEColorExpansion(infoRec->pScrn, x + pDraw->x, y + pDraw->y,
-                                    pGC->font, pGC->fgPixel, -1, pGC->alu,
-                                    pGC->planemask, pGC->pCompositeClip, n,
-                                    FONTGLYPHS(pGC->font), infoRec->CharInfo);
-
-    return (x + (n * FONTMAXBOUNDS(pGC->font, characterWidth)));
-}
-
-void
-XAAImageText8TEColorExpansion(DrawablePtr pDraw,
-                              GCPtr pGC, int x, int y, int count, char *chars)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    unsigned long n;
-
-    if (!RegionNumRects(pGC->pCompositeClip))
-        return;
-
-    (*pGC->font->get_glyphs) (pGC->font, (unsigned long) count,
-                              (unsigned char *) chars, Linear8Bit, &n,
-                              infoRec->CharInfo);
-
-    if (n)
-        XAAGlyphBltTEColorExpansion(infoRec->pScrn, x + pDraw->x, y + pDraw->y,
-                                    pGC->font, pGC->fgPixel, pGC->bgPixel,
-                                    GXcopy, pGC->planemask, pGC->pCompositeClip,
-                                    n, FONTGLYPHS(pGC->font),
-                                    infoRec->CharInfo);
-}
-
-void
-XAAImageText16TEColorExpansion(DrawablePtr pDraw,
-                               GCPtr pGC,
-                               int x, int y, int count, unsigned short *chars)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    unsigned long n;
-
-    if (!RegionNumRects(pGC->pCompositeClip))
-        return;
-
-    (*pGC->font->get_glyphs) (pGC->font, (unsigned long) count,
-                              (unsigned char *) chars,
-                              (FONTLASTROW(pGC->font) ==
-                               0) ? Linear16Bit : TwoD16Bit, &n,
-                              infoRec->CharInfo);
-
-    if (n)
-        XAAGlyphBltTEColorExpansion(infoRec->pScrn, x + pDraw->x, y + pDraw->y,
-                                    pGC->font, pGC->fgPixel, pGC->bgPixel,
-                                    GXcopy, pGC->planemask, pGC->pCompositeClip,
-                                    n, FONTGLYPHS(pGC->font),
-                                    infoRec->CharInfo);
-}
-
-/********************************************************************
-
-   GC level replacements for ImageGlyphBlt and PolyGlyphBlt for
-   TE fonts when using color expansion.
-
-********************************************************************/
-
-void
-XAAImageGlyphBltTEColorExpansion(DrawablePtr pDrawable,
-                                 GCPtr pGC,
-                                 int xInit, int yInit,
-                                 unsigned int nglyph,
-                                 CharInfoPtr * ppci, pointer pglyphBase)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-
-    if (!RegionNumRects(pGC->pCompositeClip))
-        return;
-
-    XAAGlyphBltTEColorExpansion(infoRec->pScrn, xInit + pDrawable->x,
-                                yInit + pDrawable->y, pGC->font, pGC->fgPixel,
-                                pGC->bgPixel, GXcopy, pGC->planemask,
-                                pGC->pCompositeClip, nglyph,
-                                (unsigned char *) pglyphBase, ppci);
-}
-
-void
-XAAPolyGlyphBltTEColorExpansion(DrawablePtr pDrawable,
-                                GCPtr pGC,
-                                int xInit, int yInit,
-                                unsigned int nglyph,
-                                CharInfoPtr * ppci, pointer pglyphBase)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-
-    if (!RegionNumRects(pGC->pCompositeClip))
-        return;
-
-    XAAGlyphBltTEColorExpansion(infoRec->pScrn, xInit + pDrawable->x,
-                                yInit + pDrawable->y, pGC->font, pGC->fgPixel,
-                                -1, pGC->alu, pGC->planemask,
-                                pGC->pCompositeClip, nglyph,
-                                (unsigned char *) pglyphBase, ppci);
-}
-
-/********************************************************************
-
-   XAAGlyphBltTEColorExpansion -
-
-   This guy computes the clipped pieces of text and sends it to
-   the lower-level function which will handle acceleration of 
-   arbitrarily clipped text.
-  
-********************************************************************/
-
-static void
-XAAGlyphBltTEColorExpansion(ScrnInfoPtr pScrn,
-                            int xInit, int yInit,
-                            FontPtr font,
-                            int fg, int bg,
-                            int rop,
-                            unsigned int planemask,
-                            RegionPtr cclip,
-                            int nglyph,
-                            unsigned char *gBase, CharInfoPtr * ppci)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    int skippix, skipglyphs;
-    int Left, Right, Top, Bottom;
-    int LeftEdge, RightEdge, ytop, ybot;
-    int nbox = RegionNumRects(cclip);
-    BoxPtr pbox = RegionRects(cclip);
-    unsigned int **glyphs = NULL;
-    int glyphWidth = FONTMAXBOUNDS(font, characterWidth);
-
-    /* find the size of the box */
-    Left = xInit;
-    Right = Left + (glyphWidth * nglyph);
-    Top = yInit - FONTASCENT(font);
-    Bottom = yInit + FONTDESCENT(font);
-
-    /* get into the first band that may contain part of our string */
-    while (nbox && (Top >= pbox->y2)) {
-        pbox++;
-        nbox--;
-    }
-
-    /* stop when the lower edge of the box is beyond our string */
-    while (nbox && (Bottom > pbox->y1)) {
-        LeftEdge = max(Left, pbox->x1);
-        RightEdge = min(Right, pbox->x2);
-
-        if (RightEdge > LeftEdge) {     /* we have something to draw */
-            unsigned int *fallbackBits = NULL;
-
-            ytop = max(Top, pbox->y1);
-            ybot = min(Bottom, pbox->y2);
-
-            if ((skippix = LeftEdge - Left)) {
-                skipglyphs = skippix / glyphWidth;
-                skippix %= glyphWidth;
-            }
-            else
-                skipglyphs = 0;
-
-            if (!glyphs) {
-                int count;
-
-                glyphs = (unsigned int **) (infoRec->PreAllocMem);
-
-                for (count = 0; count < nglyph; count++) {
-                    glyphs[count] = (unsigned int *)
-                        FONTGLYPHBITS(gBase, *ppci++);
-                    if (!glyphs[count]) {
-                        /* Glyphs with NULL bits do exist in the wild.
-                           Replace with blank bits in that case */
-
-                        if (!fallbackBits) {
-                            int fontHeight = Bottom - Top + 1;
-
-                            fallbackBits = calloc(glyphWidth * fontHeight, 1);
-                            if (!fallbackBits)
-                                return;
-                        }
-                        glyphs[count] = fallbackBits;
-                    }
-                }
-
-                /* our new unrolled TE code only writes DWORDS at a time 
-                   so it can read up to 6 characters past the last one 
-                   we're displaying */
-                glyphs[count + 0] = glyphs[0];
-                glyphs[count + 1] = glyphs[0];
-                glyphs[count + 2] = glyphs[0];
-                glyphs[count + 3] = glyphs[0];
-                glyphs[count + 4] = glyphs[0];
-                glyphs[count + 5] = glyphs[0];
-            }
-
-            /* x, y, w, h, skipleft, skiptop, glyphp, glyphWidth, fg, bg, rop, pm */
-
-            (*infoRec->TEGlyphRenderer) (pScrn,
-                                         LeftEdge, ytop, RightEdge - LeftEdge,
-                                         ybot - ytop, skippix, ytop - Top,
-                                         glyphs + skipglyphs, glyphWidth, fg,
-                                         bg, rop, planemask);
-
-            free(fallbackBits);
-        }
-
-        nbox--;
-        pbox++;
-    }
-}
diff --git a/hw/xfree86/xaa/xaaTables.c b/hw/xfree86/xaa/xaaTables.c
deleted file mode 100644
index 35641da..0000000
--- a/hw/xfree86/xaa/xaaTables.c
+++ /dev/null
@@ -1,152 +0,0 @@
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-#include "xaalocal.h"
-/*
- * This is a table of 24-bit values, indexed with an 8-bit byte value, then
- * expands each bit to three consecutive bits. This is required for color
- * expansion in 24bpp mode with the coprocessor in 8bpp mode, with LSB-first
- * bit order within a byte.
- */
-
-unsigned int byte_expand3[256] = {
-    0x000000, 0x000007, 0x000038, 0x00003F, 0x0001C0, 0x0001C7, 0x0001F8,
-        0x0001FF,
-    0x000E00, 0x000E07, 0x000E38, 0x000E3F, 0x000FC0, 0x000FC7, 0x000FF8,
-        0x000FFF,
-    0x007000, 0x007007, 0x007038, 0x00703F, 0x0071C0, 0x0071C7, 0x0071F8,
-        0x0071FF,
-    0x007E00, 0x007E07, 0x007E38, 0x007E3F, 0x007FC0, 0x007FC7, 0x007FF8,
-        0x007FFF,
-    0x038000, 0x038007, 0x038038, 0x03803F, 0x0381C0, 0x0381C7, 0x0381F8,
-        0x0381FF,
-    0x038E00, 0x038E07, 0x038E38, 0x038E3F, 0x038FC0, 0x038FC7, 0x038FF8,
-        0x038FFF,
-    0x03F000, 0x03F007, 0x03F038, 0x03F03F, 0x03F1C0, 0x03F1C7, 0x03F1F8,
-        0x03F1FF,
-    0x03FE00, 0x03FE07, 0x03FE38, 0x03FE3F, 0x03FFC0, 0x03FFC7, 0x03FFF8,
-        0x03FFFF,
-    0x1C0000, 0x1C0007, 0x1C0038, 0x1C003F, 0x1C01C0, 0x1C01C7, 0x1C01F8,
-        0x1C01FF,
-    0x1C0E00, 0x1C0E07, 0x1C0E38, 0x1C0E3F, 0x1C0FC0, 0x1C0FC7, 0x1C0FF8,
-        0x1C0FFF,
-    0x1C7000, 0x1C7007, 0x1C7038, 0x1C703F, 0x1C71C0, 0x1C71C7, 0x1C71F8,
-        0x1C71FF,
-    0x1C7E00, 0x1C7E07, 0x1C7E38, 0x1C7E3F, 0x1C7FC0, 0x1C7FC7, 0x1C7FF8,
-        0x1C7FFF,
-    0x1F8000, 0x1F8007, 0x1F8038, 0x1F803F, 0x1F81C0, 0x1F81C7, 0x1F81F8,
-        0x1F81FF,
-    0x1F8E00, 0x1F8E07, 0x1F8E38, 0x1F8E3F, 0x1F8FC0, 0x1F8FC7, 0x1F8FF8,
-        0x1F8FFF,
-    0x1FF000, 0x1FF007, 0x1FF038, 0x1FF03F, 0x1FF1C0, 0x1FF1C7, 0x1FF1F8,
-        0x1FF1FF,
-    0x1FFE00, 0x1FFE07, 0x1FFE38, 0x1FFE3F, 0x1FFFC0, 0x1FFFC7, 0x1FFFF8,
-        0x1FFFFF,
-    0xE00000, 0xE00007, 0xE00038, 0xE0003F, 0xE001C0, 0xE001C7, 0xE001F8,
-        0xE001FF,
-    0xE00E00, 0xE00E07, 0xE00E38, 0xE00E3F, 0xE00FC0, 0xE00FC7, 0xE00FF8,
-        0xE00FFF,
-    0xE07000, 0xE07007, 0xE07038, 0xE0703F, 0xE071C0, 0xE071C7, 0xE071F8,
-        0xE071FF,
-    0xE07E00, 0xE07E07, 0xE07E38, 0xE07E3F, 0xE07FC0, 0xE07FC7, 0xE07FF8,
-        0xE07FFF,
-    0xE38000, 0xE38007, 0xE38038, 0xE3803F, 0xE381C0, 0xE381C7, 0xE381F8,
-        0xE381FF,
-    0xE38E00, 0xE38E07, 0xE38E38, 0xE38E3F, 0xE38FC0, 0xE38FC7, 0xE38FF8,
-        0xE38FFF,
-    0xE3F000, 0xE3F007, 0xE3F038, 0xE3F03F, 0xE3F1C0, 0xE3F1C7, 0xE3F1F8,
-        0xE3F1FF,
-    0xE3FE00, 0xE3FE07, 0xE3FE38, 0xE3FE3F, 0xE3FFC0, 0xE3FFC7, 0xE3FFF8,
-        0xE3FFFF,
-    0xFC0000, 0xFC0007, 0xFC0038, 0xFC003F, 0xFC01C0, 0xFC01C7, 0xFC01F8,
-        0xFC01FF,
-    0xFC0E00, 0xFC0E07, 0xFC0E38, 0xFC0E3F, 0xFC0FC0, 0xFC0FC7, 0xFC0FF8,
-        0xFC0FFF,
-    0xFC7000, 0xFC7007, 0xFC7038, 0xFC703F, 0xFC71C0, 0xFC71C7, 0xFC71F8,
-        0xFC71FF,
-    0xFC7E00, 0xFC7E07, 0xFC7E38, 0xFC7E3F, 0xFC7FC0, 0xFC7FC7, 0xFC7FF8,
-        0xFC7FFF,
-    0xFF8000, 0xFF8007, 0xFF8038, 0xFF803F, 0xFF81C0, 0xFF81C7, 0xFF81F8,
-        0xFF81FF,
-    0xFF8E00, 0xFF8E07, 0xFF8E38, 0xFF8E3F, 0xFF8FC0, 0xFF8FC7, 0xFF8FF8,
-        0xFF8FFF,
-    0xFFF000, 0xFFF007, 0xFFF038, 0xFFF03F, 0xFFF1C0, 0xFFF1C7, 0xFFF1F8,
-        0xFFF1FF,
-    0xFFFE00, 0xFFFE07, 0xFFFE38, 0xFFFE3F, 0xFFFFC0, 0xFFFFC7, 0xFFFFF8,
-        0xFFFFFF
-};
-
-/*
- * This is a table of 24-bit values, indexed with an 8-bit byte value,
- * that reverses the bit order of a byte and then expands each bit to three
- * consecutive bits. This is required for color expansion in 24bpp mode
- * with the coprocessor in 8bpp mode, with MSB-first bit order within a
- * byte.
- */
-
-unsigned int byte_reversed_expand3[256] = {
-    0x000000, 0x0000E0, 0x00001C, 0x0000FC, 0x008003, 0x0080E3, 0x00801F,
-        0x0080FF,
-    0x007000, 0x0070E0, 0x00701C, 0x0070FC, 0x00F003, 0x00F0E3, 0x00F01F,
-        0x00F0FF,
-    0x000E00, 0x000EE0, 0x000E1C, 0x000EFC, 0x008E03, 0x008EE3, 0x008E1F,
-        0x008EFF,
-    0x007E00, 0x007EE0, 0x007E1C, 0x007EFC, 0x00FE03, 0x00FEE3, 0x00FE1F,
-        0x00FEFF,
-    0xC00100, 0xC001E0, 0xC0011C, 0xC001FC, 0xC08103, 0xC081E3, 0xC0811F,
-        0xC081FF,
-    0xC07100, 0xC071E0, 0xC0711C, 0xC071FC, 0xC0F103, 0xC0F1E3, 0xC0F11F,
-        0xC0F1FF,
-    0xC00F00, 0xC00FE0, 0xC00F1C, 0xC00FFC, 0xC08F03, 0xC08FE3, 0xC08F1F,
-        0xC08FFF,
-    0xC07F00, 0xC07FE0, 0xC07F1C, 0xC07FFC, 0xC0FF03, 0xC0FFE3, 0xC0FF1F,
-        0xC0FFFF,
-    0x380000, 0x3800E0, 0x38001C, 0x3800FC, 0x388003, 0x3880E3, 0x38801F,
-        0x3880FF,
-    0x387000, 0x3870E0, 0x38701C, 0x3870FC, 0x38F003, 0x38F0E3, 0x38F01F,
-        0x38F0FF,
-    0x380E00, 0x380EE0, 0x380E1C, 0x380EFC, 0x388E03, 0x388EE3, 0x388E1F,
-        0x388EFF,
-    0x387E00, 0x387EE0, 0x387E1C, 0x387EFC, 0x38FE03, 0x38FEE3, 0x38FE1F,
-        0x38FEFF,
-    0xF80100, 0xF801E0, 0xF8011C, 0xF801FC, 0xF88103, 0xF881E3, 0xF8811F,
-        0xF881FF,
-    0xF87100, 0xF871E0, 0xF8711C, 0xF871FC, 0xF8F103, 0xF8F1E3, 0xF8F11F,
-        0xF8F1FF,
-    0xF80F00, 0xF80FE0, 0xF80F1C, 0xF80FFC, 0xF88F03, 0xF88FE3, 0xF88F1F,
-        0xF88FFF,
-    0xF87F00, 0xF87FE0, 0xF87F1C, 0xF87FFC, 0xF8FF03, 0xF8FFE3, 0xF8FF1F,
-        0xF8FFFF,
-    0x070000, 0x0700E0, 0x07001C, 0x0700FC, 0x078003, 0x0780E3, 0x07801F,
-        0x0780FF,
-    0x077000, 0x0770E0, 0x07701C, 0x0770FC, 0x07F003, 0x07F0E3, 0x07F01F,
-        0x07F0FF,
-    0x070E00, 0x070EE0, 0x070E1C, 0x070EFC, 0x078E03, 0x078EE3, 0x078E1F,
-        0x078EFF,
-    0x077E00, 0x077EE0, 0x077E1C, 0x077EFC, 0x07FE03, 0x07FEE3, 0x07FE1F,
-        0x07FEFF,
-    0xC70100, 0xC701E0, 0xC7011C, 0xC701FC, 0xC78103, 0xC781E3, 0xC7811F,
-        0xC781FF,
-    0xC77100, 0xC771E0, 0xC7711C, 0xC771FC, 0xC7F103, 0xC7F1E3, 0xC7F11F,
-        0xC7F1FF,
-    0xC70F00, 0xC70FE0, 0xC70F1C, 0xC70FFC, 0xC78F03, 0xC78FE3, 0xC78F1F,
-        0xC78FFF,
-    0xC77F00, 0xC77FE0, 0xC77F1C, 0xC77FFC, 0xC7FF03, 0xC7FFE3, 0xC7FF1F,
-        0xC7FFFF,
-    0x3F0000, 0x3F00E0, 0x3F001C, 0x3F00FC, 0x3F8003, 0x3F80E3, 0x3F801F,
-        0x3F80FF,
-    0x3F7000, 0x3F70E0, 0x3F701C, 0x3F70FC, 0x3FF003, 0x3FF0E3, 0x3FF01F,
-        0x3FF0FF,
-    0x3F0E00, 0x3F0EE0, 0x3F0E1C, 0x3F0EFC, 0x3F8E03, 0x3F8EE3, 0x3F8E1F,
-        0x3F8EFF,
-    0x3F7E00, 0x3F7EE0, 0x3F7E1C, 0x3F7EFC, 0x3FFE03, 0x3FFEE3, 0x3FFE1F,
-        0x3FFEFF,
-    0xFF0100, 0xFF01E0, 0xFF011C, 0xFF01FC, 0xFF8103, 0xFF81E3, 0xFF811F,
-        0xFF81FF,
-    0xFF7100, 0xFF71E0, 0xFF711C, 0xFF71FC, 0xFFF103, 0xFFF1E3, 0xFFF11F,
-        0xFFF1FF,
-    0xFF0F00, 0xFF0FE0, 0xFF0F1C, 0xFF0FFC, 0xFF8F03, 0xFF8FE3, 0xFF8F1F,
-        0xFF8FFF,
-    0xFF7F00, 0xFF7FE0, 0xFF7F1C, 0xFF7FFC, 0xFFFF03, 0xFFFFE3, 0xFFFF1F,
-        0xFFFFFF,
-};
diff --git a/hw/xfree86/xaa/xaaWideLine.c b/hw/xfree86/xaa/xaaWideLine.c
deleted file mode 100644
index b8a53c1..0000000
--- a/hw/xfree86/xaa/xaaWideLine.c
+++ /dev/null
@@ -1,924 +0,0 @@
-/*
-
-XAAPolylinesWideSolid does not maintain a span list and subsequently does
-not follow the "touch-each-pixel-once" rules for wide lines and arcs.
-This means it can only be used in the case where we have
-miSpansEasyRop(pGC->alu).  Since we clip spans on the fly, we
-limited usage of this function to one rect situations. This
-function is used only for solid lines. 
-
-  Adapted from miWideLine by Mark Vojkovich (mvojkovi at ucsd.edu)
-Original mi code written by Keith Packard.
-
-*/
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include <math.h>
-
-#include "misc.h"
-#include "xf86.h"
-#include "xf86_OSproc.h"
-
-#include <X11/X.h>
-#include "windowstr.h"
-#include "gcstruct.h"
-#include "regionstr.h"
-#include "miwideline.h"
-#include "mi.h"
-#include "xf86str.h"
-#include "xaa.h"
-#include "xaalocal.h"
-
-#define DRAW_POINT(pScrn, x, y) \
-  if(hardClip) (*infoRec->SubsequentSolidFillRect)(pScrn, x, y, 1, 1); \
-  else XAAPointHelper(pScrn, x, y)
-
-#define FILL_RECT(pScrn, x, y, w, h) \
-  if(hardClip) (*infoRec->SubsequentSolidFillRect)(pScrn, x, y, w, h); \
-  else XAAFillRectHelper(pScrn, x, y, w, h)
-
-#define FILL_SPAN(pScrn, x, y, w) \
-  if(hardClip) (*infoRec->SubsequentSolidFillRect)(pScrn, x, y, w, 1); \
-  else XAASpanHelper(pScrn, x, y, w)
-
-#define CLIPSTEPEDGE(edgey,edge,edgeleft) \
-    if (ybase == edgey) { \
-	if (edgeleft) { \
-	    if (edge->x > xcl) \
-		xcl = edge->x; \
-	} else { \
-	    if (edge->x < xcr) \
-		xcr = edge->x; \
-	} \
-	edgey++; \
-	edge->x += edge->stepx; \
-	edge->e += edge->dx; \
-	if (edge->e > 0) { \
-	    edge->x += edge->signdx; \
-	    edge->e -= edge->dy; \
-	} \
-    }
-
-static void
-XAAPointHelper(ScrnInfoPtr pScrn, int x, int y)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    BoxPtr extents = infoRec->ClipBox;
-
-    if ((x >= extents->x1) && (x < extents->x2) &&
-        (y >= extents->y1) && (y < extents->y2))
-        (*infoRec->SubsequentSolidFillRect) (pScrn, x, y, 1, 1);
-}
-
-static void
-XAAFillRectHelper(ScrnInfoPtr pScrn, int x1, int y1, int dx, int dy)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    BoxPtr extents = infoRec->ClipBox;
-    int x2 = x1 + dx;
-    int y2 = y1 + dy;
-
-    if (x1 < extents->x1)
-        x1 = extents->x1;
-    if (x2 >= extents->x2)
-        x2 = extents->x2;
-    if ((dx = x2 - x1) < 1)
-        return;
-    if (y1 < extents->y1)
-        y1 = extents->y1;
-    if (y2 >= extents->y2)
-        y2 = extents->y2;
-    if ((dy = y2 - y1) < 1)
-        return;
-
-    (*infoRec->SubsequentSolidFillRect) (pScrn, x1, y1, dx, dy);
-}
-
-static void
-XAASpanHelper(ScrnInfoPtr pScrn, int x1, int y, int width)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
-    BoxPtr extents = infoRec->ClipBox;
-    int x2;
-
-    if ((y < extents->y1) || (y >= extents->y2))
-        return;
-
-    x2 = x1 + width;
-    if (x1 < extents->x1)
-        x1 = extents->x1;
-    if (x2 > extents->x2)
-        x2 = extents->x2;
-    width = x2 - x1;
-
-    if (width > 0)
-        (*infoRec->SubsequentSolidFillRect) (pScrn, x1, y, width, 1);
-
-}
-
-#define FixError(x, dx, dy, e, sign, step, h)	{	\
-	   e += (h) * dx;				\
-	   x += (h) * step;				\
-	   if(e > 0) {					\
-		x += e * sign/dy;			\
-		e %= dy;				\
-	   	if(e) {					\
-		   x += sign;				\
-		   e -= dy;				\
-		}					\
-	   } 	 					\
-}
-
-static void
-XAAFillPolyHelper(GCPtr pGC, int y,     /* start y coordinate */
-                  int overall_height,   /* height of entire segment */
-                  PolyEdgePtr left, PolyEdgePtr right,
-                  int left_count, int right_count)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    BoxPtr extents = infoRec->ClipBox;
-    int left_x, left_e, left_stepx, left_signdx, left_dy, left_dx;
-    int right_x, right_e, right_stepx, right_signdx, right_dy, right_dx;
-    int height, left_height, right_height;
-    int xorg;
-    Bool hardClip;
-
-    if ((y >= extents->y2) || ((y + overall_height) <= extents->y1))
-        return;
-
-    /* Muffle compiler */
-    left_x = left_e = left_stepx = left_signdx = left_dy = left_dx = 0;
-    right_x = right_e = right_stepx = right_signdx = right_dy = right_dx = 0;
-
-    left_height = right_height = 0;
-    xorg = 0;
-
-    hardClip = (infoRec->ClippingFlags & HARDWARE_CLIP_SOLID_FILL);
-
-    while ((left_count || left_height) && (right_count || right_height)) {
-        if (!left_height && left_count) {
-            left_height = left->height;
-            left_x = left->x + xorg;
-            left_stepx = left->stepx;
-            left_signdx = left->signdx;
-            left_e = left->e;
-            left_dy = left->dy;
-            left_dx = left->dx;
-            left_count--;
-            left++;
-        }
-        if (!right_height && right_count) {
-            right_height = right->height;
-            right_x = right->x + xorg + 1;
-            right_stepx = right->stepx;
-            right_signdx = right->signdx;
-            right_e = right->e;
-            right_dy = right->dy;
-            right_dx = right->dx;
-            right_count--;
-            right++;
-        }
-
-        height = (left_height > right_height) ? right_height : left_height;
-
-        left_height -= height;
-        right_height -= height;
-
-        if (hardClip && infoRec->SubsequentSolidFillTrap && (height > 6)) {
-            int right_DX, left_DX;
-
-            right_DX = (right_dx * right_signdx) + (right_stepx * right_dy);
-            left_DX = (left_dx * left_signdx) + (left_stepx * left_dy);
-
-            (*infoRec->SubsequentSolidFillTrap) (infoRec->pScrn, y, height,
-                                                 left_x, left_DX, left_dy,
-                                                 left_e, right_x - 1, right_DX,
-                                                 right_dy, right_e);
-
-            FixError(left_x, left_dx, left_dy, left_e, left_signdx,
-                     left_stepx, height);
-            FixError(right_x, right_dx, right_dy, right_e, right_signdx,
-                     right_stepx, height);
-            y += height;
-            continue;
-        }
-
-        while (height--) {
-            if (right_x > left_x) {
-                FILL_SPAN(infoRec->pScrn, left_x, y, right_x - left_x);
-            }
-            y++;
-
-            left_x += left_stepx;
-            left_e += left_dx;
-            if (left_e > 0) {
-                left_x += left_signdx;
-                left_e -= left_dy;
-            }
-            right_x += right_stepx;
-            right_e += right_dx;
-            if (right_e > 0) {
-                right_x += right_signdx;
-                right_e -= right_dy;
-            }
-
-        }
-    }
-}
-
-static void
-XAAWideSegment(GCPtr pGC,
-               int x1, int y1, int x2, int y2,
-               Bool projectLeft, Bool projectRight,
-               LineFacePtr leftFace, LineFacePtr rightFace)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    double l, L, r;
-    double xa, ya;
-    double projectXoff, projectYoff;
-    double k;
-    double maxy;
-    int x, y;
-    int dx, dy;
-    int finaly;
-    PolyEdgePtr left, right;
-    PolyEdgePtr top, bottom;
-    int lefty, righty, topy, bottomy;
-    int signdx;
-    PolyEdgeRec lefts[2], rights[2];
-    LineFacePtr tface;
-    int lw = pGC->lineWidth;
-    Bool hardClip = (infoRec->ClippingFlags & HARDWARE_CLIP_SOLID_FILL);
-
-    /* draw top-to-bottom always */
-    if ((y2 < y1) || ((y2 == y1) && (x2 < x1))) {
-        x = x1;
-        x1 = x2;
-        x2 = x;
-
-        y = y1;
-        y1 = y2;
-        y2 = y;
-
-        x = projectLeft;
-        projectLeft = projectRight;
-        projectRight = x;
-
-        tface = leftFace;
-        leftFace = rightFace;
-        rightFace = tface;
-    }
-
-    dy = y2 - y1;
-    signdx = 1;
-    dx = x2 - x1;
-    if (dx < 0)
-        signdx = -1;
-
-    leftFace->x = x1;
-    leftFace->y = y1;
-    leftFace->dx = dx;
-    leftFace->dy = dy;
-
-    rightFace->x = x2;
-    rightFace->y = y2;
-    rightFace->dx = -dx;
-    rightFace->dy = -dy;
-
-    if (!dy) {
-        rightFace->xa = 0;
-        rightFace->ya = (double) lw / 2.0;
-        rightFace->k = -(double) (lw * dx) / 2.0;
-        leftFace->xa = 0;
-        leftFace->ya = -rightFace->ya;
-        leftFace->k = rightFace->k;
-        x = x1;
-        if (projectLeft)
-            x -= (lw >> 1);
-        y = y1 - (lw >> 1);
-        dx = x2 - x;
-        if (projectRight)
-            dx += ((lw + 1) >> 1);
-        dy = lw;
-        FILL_RECT(infoRec->pScrn, x, y, dx, dy);
-    }
-    else if (!dx) {
-        leftFace->xa = (double) lw / 2.0;
-        leftFace->ya = 0;
-        leftFace->k = (double) (lw * dy) / 2.0;
-        rightFace->xa = -leftFace->xa;
-        rightFace->ya = 0;
-        rightFace->k = leftFace->k;
-        y = y1;
-        if (projectLeft)
-            y -= lw >> 1;
-        x = x1 - (lw >> 1);
-        dy = y2 - y;
-        if (projectRight)
-            dy += ((lw + 1) >> 1);
-        dx = lw;
-        FILL_RECT(infoRec->pScrn, x, y, dx, dy);
-    }
-    else {
-        l = ((double) lw) / 2.0;
-        L = sqrt((double) (dx * dx + dy * dy));
-
-        if (dx < 0) {
-            right = &rights[1];
-            left = &lefts[0];
-            top = &rights[0];
-            bottom = &lefts[1];
-        }
-        else {
-            right = &rights[0];
-            left = &lefts[1];
-            top = &lefts[0];
-            bottom = &rights[1];
-        }
-        r = l / L;
-
-        /* coord of upper bound at integral y */
-        ya = -r * dx;
-        xa = r * dy;
-
-        projectXoff = -ya;
-        projectYoff = xa;
-
-        /* xa * dy - ya * dx */
-        k = l * L;
-
-        leftFace->xa = xa;
-        leftFace->ya = ya;
-        leftFace->k = k;
-        rightFace->xa = -xa;
-        rightFace->ya = -ya;
-        rightFace->k = k;
-
-        if (projectLeft)
-            righty = miPolyBuildEdge(xa - projectXoff, ya - projectYoff,
-                                     k, dx, dy, x1, y1, 0, right);
-        else
-            righty = miPolyBuildEdge(xa, ya, k, dx, dy, x1, y1, 0, right);
-
-        /* coord of lower bound at integral y */
-        ya = -ya;
-        xa = -xa;
-
-        /* xa * dy - ya * dx */
-        k = -k;
-
-        if (projectLeft)
-            lefty = miPolyBuildEdge(xa - projectXoff, ya - projectYoff,
-                                    k, dx, dy, x1, y1, 1, left);
-        else
-            lefty = miPolyBuildEdge(xa, ya, k, dx, dy, x1, y1, 1, left);
-
-        /* coord of top face at integral y */
-
-        if (signdx > 0) {
-            ya = -ya;
-            xa = -xa;
-        }
-
-        if (projectLeft) {
-            double xap = xa - projectXoff;
-            double yap = ya - projectYoff;
-
-            topy = miPolyBuildEdge(xap, yap, xap * dx + yap * dy,
-                                   -dy, dx, x1, y1, dx > 0, top);
-        }
-        else
-            topy = miPolyBuildEdge(xa, ya, 0.0, -dy, dx, x1, y1, dx > 0, top);
-
-        /* coord of bottom face at integral y */
-
-        if (projectRight) {
-            double xap = xa + projectXoff;
-            double yap = ya + projectYoff;
-
-            bottomy = miPolyBuildEdge(xap, yap, xap * dx + yap * dy,
-                                      -dy, dx, x2, y2, dx < 0, bottom);
-            maxy = -ya + projectYoff;
-        }
-        else {
-            bottomy = miPolyBuildEdge(xa, ya, 0.0,
-                                      -dy, dx, x2, y2, dx < 0, bottom);
-            maxy = -ya;
-        }
-
-        finaly = ICEIL(maxy) + y2;
-
-        if (dx < 0) {
-            left->height = bottomy - lefty;
-            right->height = finaly - righty;
-            top->height = righty - topy;
-        }
-        else {
-            right->height = bottomy - righty;
-            left->height = finaly - lefty;
-            top->height = lefty - topy;
-        }
-        bottom->height = finaly - bottomy;
-        XAAFillPolyHelper(pGC, topy,
-                          bottom->height + bottomy - topy, lefts, rights, 2, 2);
-    }
-}
-
-static void
-XAALineArcI(GCPtr pGC, int xorg, int yorg)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    int x, y, e, ex;
-    int slw = pGC->lineWidth;
-    Bool hardClip = (infoRec->ClippingFlags & HARDWARE_CLIP_SOLID_FILL);
-
-    y = (slw >> 1) + 1;
-    if (slw & 1)
-        e = -((y << 2) + 3);
-    else
-        e = -(y << 3);
-    ex = -4;
-    x = 0;
-    while (y) {
-        e += (y << 3) - 4;
-        while (e >= 0) {
-            x++;
-            e += (ex = -((x << 3) + 4));
-        }
-        y--;
-        slw = (x << 1) + 1;
-        if ((e == ex) && (slw > 1))
-            slw--;
-
-        FILL_SPAN(infoRec->pScrn, xorg - x, yorg - y, slw);
-
-        if ((y != 0) && ((slw > 1) || (e != ex))) {
-            FILL_SPAN(infoRec->pScrn, xorg - x, yorg + y, slw);
-        }
-    }
-}
-
-static void
-XAALineArcD(GCPtr pGC,
-            double xorg,
-            double yorg,
-            PolyEdgePtr edge1,
-            int edgey1,
-            Bool edgeleft1, PolyEdgePtr edge2, int edgey2, Bool edgeleft2)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    double radius, x0, y0, el, er, yk, xlk, xrk, k;
-    int xbase, ybase, y, boty, xl, xr, xcl, xcr;
-    int ymin, ymax;
-    Bool edge1IsMin, edge2IsMin;
-    int ymin1, ymin2;
-    Bool hardClip = (infoRec->ClippingFlags & HARDWARE_CLIP_SOLID_FILL);
-
-    xbase = floor(xorg);
-    x0 = xorg - xbase;
-    ybase = ICEIL(yorg);
-    y0 = yorg - ybase;
-
-    xlk = x0 + x0 + 1.0;
-    xrk = x0 + x0 - 1.0;
-    yk = y0 + y0 - 1.0;
-    radius = ((double) pGC->lineWidth) / 2.0;
-    y = floor(radius - y0 + 1.0);
-    ybase -= y;
-    ymin = ybase;
-    ymax = 65536;
-    edge1IsMin = FALSE;
-    ymin1 = edgey1;
-    if (edge1->dy >= 0) {
-        if (!edge1->dy) {
-            if (edgeleft1)
-                edge1IsMin = TRUE;
-            else
-                ymax = edgey1;
-            edgey1 = 65536;
-        }
-        else if ((edge1->signdx < 0) == edgeleft1)
-            edge1IsMin = TRUE;
-    }
-    edge2IsMin = FALSE;
-    ymin2 = edgey2;
-    if (edge2->dy >= 0) {
-        if (!edge2->dy) {
-            if (edgeleft2)
-                edge2IsMin = TRUE;
-            else
-                ymax = edgey2;
-            edgey2 = 65536;
-        }
-        else if ((edge2->signdx < 0) == edgeleft2)
-            edge2IsMin = TRUE;
-    }
-    if (edge1IsMin) {
-        ymin = ymin1;
-        if (edge2IsMin && (ymin1 > ymin2))
-            ymin = ymin2;
-    }
-    else if (edge2IsMin)
-        ymin = ymin2;
-    el = radius * radius - ((y + y0) * (y + y0)) - (x0 * x0);
-    er = el + xrk;
-    xl = 1;
-    xr = 0;
-    if (x0 < 0.5) {
-        xl = 0;
-        el -= xlk;
-    }
-    boty = (y0 < -0.5) ? 1 : 0;
-    if (ybase + y - boty > ymax)
-        boty = ymax - ybase - y;
-    while (y > boty) {
-        k = (y << 1) + yk;
-        er += k;
-        while (er > 0.0) {
-            xr++;
-            er += xrk - (xr << 1);
-        }
-        el += k;
-        while (el >= 0.0) {
-            xl--;
-            el += (xl << 1) - xlk;
-        }
-        y--;
-        ybase++;
-        if (ybase < ymin)
-            continue;
-        xcl = xl + xbase;
-        xcr = xr + xbase;
-        CLIPSTEPEDGE(edgey1, edge1, edgeleft1);
-        CLIPSTEPEDGE(edgey2, edge2, edgeleft2);
-        if (xcr >= xcl) {
-            FILL_SPAN(infoRec->pScrn, xcl, ybase, xcr - xcl + 1);
-        }
-    }
-    er = xrk - (xr << 1) - er;
-    el = (xl << 1) - xlk - el;
-    boty = floor(-y0 - radius + 1.0);
-    if (ybase + y - boty > ymax)
-        boty = ymax - ybase - y;
-    while (y > boty) {
-        k = (y << 1) + yk;
-        er -= k;
-        while ((er >= 0.0) && (xr >= 0)) {
-            xr--;
-            er += xrk - (xr << 1);
-        }
-        el -= k;
-        while ((el > 0.0) && (xl <= 0)) {
-            xl++;
-            el += (xl << 1) - xlk;
-        }
-        y--;
-        ybase++;
-        if (ybase < ymin)
-            continue;
-        xcl = xl + xbase;
-        xcr = xr + xbase;
-        CLIPSTEPEDGE(edgey1, edge1, edgeleft1);
-        CLIPSTEPEDGE(edgey2, edge2, edgeleft2);
-        if (xcr >= xcl) {
-            FILL_SPAN(infoRec->pScrn, xcl, ybase, xcr - xcl + 1);
-        }
-    }
-}
-
-static void
-XAALineArc(GCPtr pGC,
-           LineFacePtr leftFace,
-           LineFacePtr rightFace, double xorg, double yorg, Bool isInt)
-{
-    int xorgi, yorgi;
-    PolyEdgeRec edge1, edge2;
-    int edgey1, edgey2;
-    Bool edgeleft1, edgeleft2;
-
-    if (isInt) {
-        xorgi = leftFace ? leftFace->x : rightFace->x;
-        yorgi = leftFace ? leftFace->y : rightFace->y;
-    }
-    else {                      /* Muffle compiler */
-        xorgi = yorgi = 0;
-    }
-    edgey1 = 65536;
-    edgey2 = 65536;
-    edge1.x = 0;                /* not used, keep memory checkers happy */
-    edge1.dy = -1;
-    edge2.x = 0;                /* not used, keep memory checkers happy */
-    edge2.dy = -1;
-    edgeleft1 = FALSE;
-    edgeleft2 = FALSE;
-
-    if ((pGC->lineWidth > 2) &&
-        ((pGC->capStyle == CapRound && pGC->joinStyle != JoinRound) ||
-         (pGC->joinStyle == JoinRound && pGC->capStyle == CapButt))) {
-        if (isInt) {
-            xorg = (double) xorgi;
-            yorg = (double) yorgi;
-        }
-
-        if (leftFace && rightFace)
-            miRoundJoinClip(leftFace, rightFace, &edge1, &edge2,
-                            &edgey1, &edgey2, &edgeleft1, &edgeleft2);
-        else if (leftFace)
-            edgey1 = miRoundCapClip(leftFace, isInt, &edge1, &edgeleft1);
-        else if (rightFace)
-            edgey2 = miRoundCapClip(rightFace, isInt, &edge2, &edgeleft2);
-
-        isInt = FALSE;
-    }
-
-    if (isInt) {
-        if (pGC->lineWidth == 1) {
-            XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-            Bool hardClip = (infoRec->ClippingFlags & HARDWARE_CLIP_SOLID_FILL);
-
-            DRAW_POINT(infoRec->pScrn, xorgi, yorgi);
-        }
-        else
-            XAALineArcI(pGC, xorgi, yorgi);
-    }
-    else
-        XAALineArcD(pGC, xorg, yorg, &edge1, edgey1, edgeleft1,
-                    &edge2, edgey2, edgeleft2);
-
-}
-
-static void
-XAALineJoin(GCPtr pGC, LineFacePtr pLeft, LineFacePtr pRight)
-{
-    double mx = 0, my = 0;
-    double denom = 0;
-    PolyVertexRec vertices[4];
-    PolySlopeRec slopes[4];
-    int edgecount;
-    PolyEdgeRec left[4], right[4];
-    int nleft, nright;
-    int y, height;
-    int swapslopes;
-    int joinStyle = pGC->joinStyle;
-    int lw = pGC->lineWidth;
-
-    if (lw == 1) {
-        /* Lines going in the same direction have no join */
-        if ((pLeft->dx >= 0) == (pRight->dx <= 0))
-            return;
-        if (joinStyle != JoinRound) {
-            denom = -pLeft->dx * (double) pRight->dy + pRight->dx *
-                (double) pLeft->dy;
-            if (denom == 0.0)
-                return;         /* no join to draw */
-        }
-        if (joinStyle != JoinMiter) {
-            XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-            Bool hardClip = (infoRec->ClippingFlags & HARDWARE_CLIP_SOLID_FILL);
-
-            DRAW_POINT(infoRec->pScrn, pLeft->x, pLeft->y);
-            return;
-        }
-    }
-    else {
-        if (joinStyle == JoinRound) {
-            XAALineArc(pGC, pLeft, pRight, (double) 0.0, (double) 0.0, TRUE);
-            return;
-        }
-        denom = -pLeft->dx * (double) pRight->dy + pRight->dx *
-            (double) pLeft->dy;
-        if (denom == 0.0)
-            return;             /* no join to draw */
-    }
-
-    swapslopes = 0;
-    if (denom > 0) {
-        pLeft->xa = -pLeft->xa;
-        pLeft->ya = -pLeft->ya;
-        pLeft->dx = -pLeft->dx;
-        pLeft->dy = -pLeft->dy;
-    }
-    else {
-        swapslopes = 1;
-        pRight->xa = -pRight->xa;
-        pRight->ya = -pRight->ya;
-        pRight->dx = -pRight->dx;
-        pRight->dy = -pRight->dy;
-    }
-
-    vertices[0].x = pRight->xa;
-    vertices[0].y = pRight->ya;
-    slopes[0].dx = -pRight->dy;
-    slopes[0].dy = pRight->dx;
-    slopes[0].k = 0;
-
-    vertices[1].x = 0;
-    vertices[1].y = 0;
-    slopes[1].dx = pLeft->dy;
-    slopes[1].dy = -pLeft->dx;
-    slopes[1].k = 0;
-
-    vertices[2].x = pLeft->xa;
-    vertices[2].y = pLeft->ya;
-
-    if (joinStyle == JoinMiter) {
-        my = (pLeft->dy * (pRight->xa * pRight->dy - pRight->ya * pRight->dx) -
-              pRight->dy * (pLeft->xa * pLeft->dy - pLeft->ya * pLeft->dx)) /
-            denom;
-        if (pLeft->dy != 0)
-            mx = pLeft->xa + (my - pLeft->ya) *
-                (double) pLeft->dx / (double) pLeft->dy;
-        else
-            mx = pRight->xa + (my - pRight->ya) *
-                (double) pRight->dx / (double) pRight->dy;
-
-        /* check miter limit */
-        if ((mx * mx + my * my) * 4 > SQSECANT * lw * lw)
-            joinStyle = JoinBevel;
-    }
-
-    if (joinStyle == JoinMiter) {
-        slopes[2].dx = pLeft->dx;
-        slopes[2].dy = pLeft->dy;
-        slopes[2].k = pLeft->k;
-        if (swapslopes) {
-            slopes[2].dx = -slopes[2].dx;
-            slopes[2].dy = -slopes[2].dy;
-            slopes[2].k = -slopes[2].k;
-        }
-        vertices[3].x = mx;
-        vertices[3].y = my;
-        slopes[3].dx = pRight->dx;
-        slopes[3].dy = pRight->dy;
-        slopes[3].k = pRight->k;
-        if (swapslopes) {
-            slopes[3].dx = -slopes[3].dx;
-            slopes[3].dy = -slopes[3].dy;
-            slopes[3].k = -slopes[3].k;
-        }
-        edgecount = 4;
-    }
-    else {
-        double scale, dx, dy, adx, ady;
-
-        adx = dx = pRight->xa - pLeft->xa;
-        ady = dy = pRight->ya - pLeft->ya;
-        if (adx < 0)
-            adx = -adx;
-        if (ady < 0)
-            ady = -ady;
-        scale = ady;
-        if (adx > ady)
-            scale = adx;
-        slopes[2].dx = (dx * 65536) / scale;
-        slopes[2].dy = (dy * 65536) / scale;
-        slopes[2].k = ((pLeft->xa + pRight->xa) * slopes[2].dy -
-                       (pLeft->ya + pRight->ya) * slopes[2].dx) / 2.0;
-        edgecount = 3;
-    }
-
-    y = miPolyBuildPoly(vertices, slopes, edgecount, pLeft->x, pLeft->y,
-                        left, right, &nleft, &nright, &height);
-    XAAFillPolyHelper(pGC, y, height, left, right, nleft, nright);
-}
-
-void
-XAAPolylinesWideSolid(DrawablePtr pDrawable,
-                      GCPtr pGC, int mode, int npt, DDXPointPtr pPts)
-{
-    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
-    int x1, y1, x2, y2;
-    Bool projectLeft, projectRight;
-    LineFaceRec leftFace, rightFace, prevRightFace, firstFace;
-    int first = TRUE;
-    Bool somethingDrawn = FALSE;
-    Bool selfJoin = FALSE;
-    int xorg = pDrawable->x;
-    int yorg = pDrawable->y;
-    Bool hardClip = FALSE;
-
-    if (!RegionNumRects(pGC->pCompositeClip))
-        return;
-
-    if (RegionNumRects(pGC->pCompositeClip) != 1) {
-        miWideLine(pDrawable, pGC, mode, npt, pPts);
-        return;
-    }
-
-    x2 = pPts->x;
-    y2 = pPts->y;
-    if (npt > 1) {
-        if (mode == CoordModePrevious) {
-            int nptTmp;
-            register DDXPointPtr pPtsTmp;
-
-            x1 = x2;
-            y1 = y2;
-            nptTmp = npt;
-            pPtsTmp = pPts + 1;
-            while (--nptTmp) {
-                x1 += pPtsTmp->x;
-                y1 += pPtsTmp->y;
-                ++pPtsTmp;
-            }
-            if ((x2 == x1) && (y2 == y1))
-                selfJoin = TRUE;
-        }
-        else if ((x2 == pPts[npt - 1].x) && (y2 == pPts[npt - 1].y))
-            selfJoin = TRUE;
-    }
-
-    projectLeft = ((pGC->capStyle == CapProjecting) && !selfJoin);
-    projectRight = FALSE;
-
-    (*infoRec->SetupForSolidFill) (infoRec->pScrn, pGC->fgPixel, pGC->alu,
-                                   pGC->planemask);
-
-    infoRec->ClipBox = &pGC->pCompositeClip->extents;
-
-    if (infoRec->ClippingFlags & HARDWARE_CLIP_SOLID_FILL) {
-        hardClip = TRUE;
-        (*infoRec->SetClippingRectangle) (infoRec->pScrn,
-                                          infoRec->ClipBox->x1,
-                                          infoRec->ClipBox->y1,
-                                          infoRec->ClipBox->x2 - 1,
-                                          infoRec->ClipBox->y2 - 1);
-    }
-
-    x2 += xorg;
-    y2 += yorg;
-    while (--npt) {
-        x1 = x2;
-        y1 = y2;
-        ++pPts;
-        x2 = pPts->x;
-        y2 = pPts->y;
-        if (mode == CoordModePrevious) {
-            x2 += x1;
-            y2 += y1;
-        }
-        else {
-            x2 += xorg;
-            y2 += yorg;
-        }
-        if ((x1 != x2) || (y1 != y2)) {
-            somethingDrawn = TRUE;
-            if ((npt == 1) && (pGC->capStyle == CapProjecting) && !selfJoin)
-                projectRight = TRUE;
-            XAAWideSegment(pGC, x1, y1, x2, y2,
-                           projectLeft, projectRight, &leftFace, &rightFace);
-            if (first) {
-                if (selfJoin)
-                    firstFace = leftFace;
-                else if (pGC->capStyle == CapRound) {
-                    if (pGC->lineWidth == 1) {
-                        DRAW_POINT(infoRec->pScrn, x1, y1);
-                    }
-                    else
-                        XAALineArc(pGC, &leftFace, (LineFacePtr) NULL,
-                                   (double) 0.0, (double) 0.0, TRUE);
-                }
-            }
-            else
-                XAALineJoin(pGC, &leftFace, &prevRightFace);
-
-            prevRightFace = rightFace;
-            first = FALSE;
-            projectLeft = FALSE;
-        }
-        if (npt == 1 && somethingDrawn) {
-            if (selfJoin)
-                XAALineJoin(pGC, &firstFace, &rightFace);
-            else if (pGC->capStyle == CapRound) {
-                if (pGC->lineWidth == 1) {
-                    DRAW_POINT(infoRec->pScrn, x2, y2);
-                }
-                else
-                    XAALineArc(pGC, (LineFacePtr) NULL, &rightFace,
-                               (double) 0.0, (double) 0.0, TRUE);
-            }
-        }
-    }
-    /* handle crock where all points are coincedent */
-    if (!somethingDrawn) {
-        projectLeft = (pGC->capStyle == CapProjecting);
-        XAAWideSegment(pGC, x2, y2, x2, y2, projectLeft, projectLeft,
-                       &leftFace, &rightFace);
-        if (pGC->capStyle == CapRound) {
-            XAALineArc(pGC, &leftFace, (LineFacePtr) NULL,
-                       (double) 0.0, (double) 0.0, TRUE);
-            rightFace.dx = -1;  /* sleezy hack to make it work */
-            XAALineArc(pGC, (LineFacePtr) NULL, &rightFace,
-                       (double) 0.0, (double) 0.0, TRUE);
-        }
-    }
-
-    infoRec->ClipBox = NULL;
-    if (hardClip)
-        (*infoRec->DisableClipping) (infoRec->pScrn);
-
-    SET_SYNC_FLAG(infoRec);
-}
diff --git a/hw/xfree86/xaa/xaacexp.h b/hw/xfree86/xaa/xaacexp.h
deleted file mode 100644
index 6fde54c..0000000
--- a/hw/xfree86/xaa/xaacexp.h
+++ /dev/null
@@ -1,126 +0,0 @@
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include <X11/Xarch.h>
-
-#ifndef FIXEDBASE
-#define CHECKRETURN(b) if(width <= ((b) * 32)) return(base + (b))
-#else
-#define CHECKRETURN(b) if(width <= ((b) * 32)) return(base)
-#endif
-
-#if X_BYTE_ORDER == X_BIG_ENDIAN
-#define SHIFT_L(value, shift) ((value) >> (shift))
-#define SHIFT_R(value, shift) ((value) << (shift))
-#else
-#define SHIFT_L(value, shift) ((value) << (shift))
-#define SHIFT_R(value, shift) ((value) >> (shift))
-#endif
-
-#ifndef MSBFIRST
-#ifdef FIXEDBASE
-#define WRITE_IN_BITORDER(dest, offset, data) *(dest) = data;
-#else
-#define WRITE_IN_BITORDER(dest, offset, data) *(dest + offset) = data;
-#endif
-#else
-#ifdef FIXEDBASE
-#define WRITE_IN_BITORDER(dest, offset, data) *(dest) = SWAP_BITS_IN_BYTES(data);
-#else
-#define WRITE_IN_BITORDER(dest, offset, data) *(dest + offset) = SWAP_BITS_IN_BYTES(data)
-#endif
-#endif
-
-#ifdef FIXEDBASE
-#ifdef MSBFIRST
-#define WRITE_BITS(b)   *base = SWAP_BITS_IN_BYTES(b)
-#define WRITE_BITS1(b) { \
-	*base = byte_reversed_expand3[(b) & 0xFF] | \
-		byte_reversed_expand3[((b) & 0xFF00) >> 8] << 24; }
-#define WRITE_BITS2(b) { \
-	*base = byte_reversed_expand3[(b) & 0xFF] | \
-		byte_reversed_expand3[((b) & 0xFF00) >> 8] << 24; \
-	*base = byte_reversed_expand3[((b) & 0xFF00) >> 8] >> 8 | \
-		byte_reversed_expand3[((b) & 0xFF0000) >> 16] << 16; }
-#define WRITE_BITS3(b) { \
-	*base = byte_reversed_expand3[(b) & 0xFF] | \
-		byte_reversed_expand3[((b) & 0xFF00) >> 8] << 24; \
-	*base = byte_reversed_expand3[((b) & 0xFF00) >> 8] >> 8 | \
-		byte_reversed_expand3[((b) & 0xFF0000) >> 16] << 16; \
-	*base = byte_reversed_expand3[((b) & 0xFF0000) >> 16] >> 16 | \
-		byte_reversed_expand3[((b) & 0xFF000000) >> 24] << 8; }
-#else
-#define WRITE_BITS(b)   *base = (b)
-#define WRITE_BITS1(b) { \
-	*base = byte_expand3[(b) & 0xFF] | \
-		byte_expand3[((b) & 0xFF00) >> 8] << 24; }
-#define WRITE_BITS2(b) { \
-	*base = byte_expand3[(b) & 0xFF] | \
-		byte_expand3[((b) & 0xFF00) >> 8] << 24; \
-	*base = byte_expand3[((b) & 0xFF00) >> 8] >> 8 | \
-		byte_expand3[((b) & 0xFF0000) >> 16] << 16; }
-#define WRITE_BITS3(b) { \
-	*base = byte_expand3[(b) & 0xFF] | \
-		byte_expand3[((b) & 0xFF00) >> 8] << 24; \
-	*base = byte_expand3[((b) & 0xFF00) >> 8] >> 8 | \
-		byte_expand3[((b) & 0xFF0000) >> 16] << 16; \
-	*base = byte_expand3[((b) & 0xFF0000) >> 16] >> 16 | \
-		byte_expand3[((b) & 0xFF000000) >> 24] << 8; }
-#endif
-#else
-#ifdef MSBFIRST
-#define WRITE_BITS(b)   *(base++) = SWAP_BITS_IN_BYTES(b)
-#define WRITE_BITS1(b) { \
-	*(base++) = byte_reversed_expand3[(b) & 0xFF] | \
-		byte_reversed_expand3[((b) & 0xFF00) >> 8] << 24; }
-#define WRITE_BITS2(b) { \
-	*(base) = byte_reversed_expand3[(b) & 0xFF] | \
-		byte_reversed_expand3[((b) & 0xFF00) >> 8] << 24; \
-	*(base + 1) = byte_reversed_expand3[((b) & 0xFF00) >> 8] >> 8 | \
-		byte_reversed_expand3[((b) & 0xFF0000) >> 16] << 16; \
-	base += 2; }
-#define WRITE_BITS3(b) { \
-	*(base) = byte_reversed_expand3[(b) & 0xFF] | \
-		byte_reversed_expand3[((b) & 0xFF00) >> 8] << 24; \
-	*(base + 1) = byte_reversed_expand3[((b) & 0xFF00) >> 8] >> 8 | \
-		byte_reversed_expand3[((b) & 0xFF0000) >> 16] << 16; \
-	*(base + 2) = byte_reversed_expand3[((b) & 0xFF0000) >> 16] >> 16 | \
-		byte_reversed_expand3[((b) & 0xFF000000) >> 24] << 8; \
-	base += 3; }
-#else
-#define WRITE_BITS(b)   *(base++) = (b)
-#define WRITE_BITS1(b) { \
-	*(base++) = byte_expand3[(b) & 0xFF] | \
-		byte_expand3[((b) & 0xFF00) >> 8] << 24; }
-#define WRITE_BITS2(b) { \
-	*(base) = byte_expand3[(b) & 0xFF] | \
-		byte_expand3[((b) & 0xFF00) >> 8] << 24; \
-	*(base + 1) = byte_expand3[((b) & 0xFF00) >> 8] >> 8 | \
-		byte_expand3[((b) & 0xFF0000) >> 16] << 16; \
-	base += 2; }
-#define WRITE_BITS3(b) { \
-	*(base) = byte_expand3[(b) & 0xFF] | \
-		byte_expand3[((b) & 0xFF00) >> 8] << 24; \
-	*(base + 1) = byte_expand3[((b) & 0xFF00) >> 8] >> 8 | \
-		byte_expand3[((b) & 0xFF0000) >> 16] << 16; \
-	*(base + 2) = byte_expand3[((b) & 0xFF0000) >> 16] >> 16 | \
-		byte_expand3[((b) & 0xFF000000) >> 24] << 8; \
-	base += 3; }
-#endif
-#endif
-
-#ifdef FIXEDBASE
-#ifdef MSBFIRST
-#define EXPNAME(x) x##MSBFirstFixedBase
-#else
-#define EXPNAME(x) x##LSBFirstFixedBase
-#endif
-#else
-#ifdef MSBFIRST
-#define EXPNAME(x) x##MSBFirst
-#else
-#define EXPNAME(x) x##LSBFirst
-#endif
-#endif
diff --git a/hw/xfree86/xaa/xaalocal.h b/hw/xfree86/xaa/xaalocal.h
deleted file mode 100644
index 61d9eeb..0000000
--- a/hw/xfree86/xaa/xaalocal.h
+++ /dev/null
@@ -1,1437 +0,0 @@
-
-#ifndef _XAALOCAL_H
-#define _XAALOCAL_H
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-/* This file is very unorganized ! */
-
-#include "gcstruct.h"
-#include "regionstr.h"
-#include "xf86fbman.h"
-#include "xaa.h"
-#include "mi.h"
-#include "picturestr.h"
-
-#define GCWhenForced		(GCArcMode << 1)
-
-#define DO_COLOR_8x8		0x00000001
-#define DO_MONO_8x8		0x00000002
-#define DO_CACHE_BLT		0x00000003
-#define DO_COLOR_EXPAND		0x00000004
-#define DO_CACHE_EXPAND		0x00000005
-#define DO_IMAGE_WRITE		0x00000006
-#define DO_PIXMAP_COPY		0x00000007
-#define DO_SOLID		0x00000008
-
-typedef CARD32 *(*GlyphScanlineFuncPtr) (CARD32 *base, unsigned int **glyphp,
-                                         int line, int nglyph, int width);
-
-typedef CARD32 *(*StippleScanlineProcPtr) (CARD32 *, CARD32 *, int, int, int);
-
-typedef void (*RectFuncPtr) (ScrnInfoPtr, int, int, int, int, int, int,
-                             XAACacheInfoPtr);
-typedef void (*TrapFuncPtr) (ScrnInfoPtr, int, int, int, int, int, int,
-                             int, int, int, int, int, int, XAACacheInfoPtr);
-
-typedef struct _XAAScreen {
-    CreateGCProcPtr CreateGC;
-    CloseScreenProcPtr CloseScreen;
-    GetImageProcPtr GetImage;
-    GetSpansProcPtr GetSpans;
-    CopyWindowProcPtr CopyWindow;
-    WindowExposuresProcPtr WindowExposures;
-    CreatePixmapProcPtr CreatePixmap;
-    DestroyPixmapProcPtr DestroyPixmap;
-    ChangeWindowAttributesProcPtr ChangeWindowAttributes;
-    XAAInfoRecPtr AccelInfoRec;
-    Bool (*EnterVT) (ScrnInfoPtr);
-    void (*LeaveVT) (ScrnInfoPtr);
-    int (*SetDGAMode) (ScrnInfoPtr, int, DGADevicePtr);
-    void (*EnableDisableFBAccess) (ScrnInfoPtr, Bool);
-    CompositeProcPtr Composite;
-    GlyphsProcPtr Glyphs;
-} XAAScreenRec, *XAAScreenPtr;
-
-#define	OPS_ARE_PIXMAP		0x00000001
-#define OPS_ARE_ACCEL		0x00000002
-
-typedef struct _XAAGC {
-    GCOps *wrapOps;
-    GCFuncs *wrapFuncs;
-    GCOps *XAAOps;
-    int DashLength;
-    unsigned char *DashPattern;
-    unsigned long changes;
-    unsigned long flags;
-} XAAGCRec, *XAAGCPtr;
-
-#define REDUCIBILITY_CHECKED	0x00000001
-#define REDUCIBLE_TO_8x8	0x00000002
-#define REDUCIBLE_TO_2_COLOR	0x00000004
-#define DIRTY			0x00010000
-#define OFFSCREEN		0x00020000
-#define DGA_PIXMAP		0x00040000
-#define SHARED_PIXMAP		0x00080000
-#define LOCKED_PIXMAP		0x00100000
-
-#define REDUCIBILITY_MASK \
- (REDUCIBILITY_CHECKED | REDUCIBLE_TO_8x8 | REDUCIBLE_TO_2_COLOR)
-
-typedef struct _XAAPixmap {
-    unsigned long flags;
-    CARD32 pattern0;
-    CARD32 pattern1;
-    int fg;
-    int bg;
-    FBAreaPtr offscreenArea;
-    Bool freeData;
-} XAAPixmapRec, *XAAPixmapPtr;
-
-extern _X_EXPORT Bool
- XAACreateGC(GCPtr pGC);
-
-extern _X_EXPORT Bool
- XAAInitAccel(ScreenPtr pScreen, XAAInfoRecPtr infoRec);
-
-extern _X_EXPORT RegionPtr
-
-XAABitBlt(DrawablePtr pSrcDrawable,
-          DrawablePtr pDstDrawable,
-          GC * pGC,
-          int srcx,
-          int srcy,
-          int width,
-          int height,
-          int dstx,
-          int dsty,
-          void (*doBitBlt) (DrawablePtr, DrawablePtr, GCPtr, RegionPtr,
-                            DDXPointPtr), unsigned long bitPlane);
-
-extern _X_EXPORT void
-
-XAAScreenToScreenBitBlt(ScrnInfoPtr pScrn,
-                        int nbox,
-                        DDXPointPtr pptSrc,
-                        BoxPtr pbox,
-                        int xdir, int ydir, int alu, unsigned int planemask);
-
-extern _X_EXPORT void
-
-XAADoBitBlt(DrawablePtr pSrc,
-            DrawablePtr pDst, GC * pGC, RegionPtr prgnDst, DDXPointPtr pptSrc);
-
-extern _X_EXPORT void
-
-XAADoImageWrite(DrawablePtr pSrc,
-                DrawablePtr pDst,
-                GC * pGC, RegionPtr prgnDst, DDXPointPtr pptSrc);
-
-extern _X_EXPORT void
-
-XAADoImageRead(DrawablePtr pSrc,
-               DrawablePtr pDst,
-               GC * pGC, RegionPtr prgnDst, DDXPointPtr pptSrc);
-
-extern _X_EXPORT void
- XAACopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc);
-
-extern _X_EXPORT RegionPtr
-
-XAACopyArea(DrawablePtr pSrcDrawable,
-            DrawablePtr pDstDrawable,
-            GC * pGC,
-            int srcx, int srcy, int width, int height, int dstx, int dsty);
-
-extern _X_EXPORT void
- XAAValidateCopyArea(GCPtr pGC, unsigned long changes, DrawablePtr pDraw);
-
-extern _X_EXPORT void
- XAAValidatePutImage(GCPtr pGC, unsigned long changes, DrawablePtr pDraw);
-
-extern _X_EXPORT void
- XAAValidateCopyPlane(GCPtr pGC, unsigned long changes, DrawablePtr pDraw);
-
-extern _X_EXPORT void
- XAAValidatePushPixels(GCPtr pGC, unsigned long changes, DrawablePtr pDraw);
-
-extern _X_EXPORT void
- XAAValidateFillSpans(GCPtr pGC, unsigned long changes, DrawablePtr pDraw);
-
-extern _X_EXPORT void
- XAAValidatePolyGlyphBlt(GCPtr pGC, unsigned long changes, DrawablePtr pDraw);
-
-extern _X_EXPORT void
- XAAValidateImageGlyphBlt(GCPtr pGC, unsigned long changes, DrawablePtr pDraw);
-
-extern _X_EXPORT void
- XAAValidatePolylines(GCPtr pGC, unsigned long changes, DrawablePtr pDraw);
-
-extern _X_EXPORT RegionPtr
-
-XAACopyPlaneColorExpansion(DrawablePtr pSrc,
-                           DrawablePtr pDst,
-                           GCPtr pGC,
-                           int srcx,
-                           int srcy,
-                           int width,
-                           int height,
-                           int dstx, int dsty, unsigned long bitPlane);
-
-extern _X_EXPORT void
-
-XAAPushPixelsSolidColorExpansion(GCPtr pGC,
-                                 PixmapPtr pBitMap,
-                                 DrawablePtr pDrawable,
-                                 int dx, int dy, int xOrg, int yOrg);
-
-extern _X_EXPORT void
-
-XAAWriteBitmapColorExpandMSBFirstFixedBase(ScrnInfoPtr pScrn,
-                                           int x, int y, int w, int h,
-                                           unsigned char *src,
-                                           int srcwidth,
-                                           int skipleft,
-                                           int fg, int bg,
-                                           int rop, unsigned int planemask);
-
-extern _X_EXPORT void
-
-XAAWriteBitmapColorExpand3MSBFirstFixedBase(ScrnInfoPtr pScrn,
-                                            int x, int y, int w, int h,
-                                            unsigned char *src,
-                                            int srcwidth,
-                                            int skipleft,
-                                            int fg, int bg,
-                                            int rop, unsigned int planemask);
-
-extern _X_EXPORT void
-
-XAAWriteBitmapColorExpandMSBFirst(ScrnInfoPtr pScrn,
-                                  int x, int y, int w, int h,
-                                  unsigned char *src,
-                                  int srcwidth,
-                                  int skipleft,
-                                  int fg, int bg,
-                                  int rop, unsigned int planemask);
-
-extern _X_EXPORT void
-
-XAAWriteBitmapColorExpand3MSBFirst(ScrnInfoPtr pScrn,
-                                   int x, int y, int w, int h,
-                                   unsigned char *src,
-                                   int srcwidth,
-                                   int skipleft,
-                                   int fg, int bg,
-                                   int rop, unsigned int planemask);
-
-extern _X_EXPORT void
-
-XAAWriteBitmapColorExpandLSBFirstFixedBase(ScrnInfoPtr pScrn,
-                                           int x, int y, int w, int h,
-                                           unsigned char *src,
-                                           int srcwidth,
-                                           int skipleft,
-                                           int fg, int bg,
-                                           int rop, unsigned int planemask);
-
-extern _X_EXPORT void
-
-XAAWriteBitmapColorExpand3LSBFirstFixedBase(ScrnInfoPtr pScrn,
-                                            int x, int y, int w, int h,
-                                            unsigned char *src,
-                                            int srcwidth,
-                                            int skipleft,
-                                            int fg, int bg,
-                                            int rop, unsigned int planemask);
-
-extern _X_EXPORT void
-
-XAAWriteBitmapColorExpandLSBFirst(ScrnInfoPtr pScrn,
-                                  int x, int y, int w, int h,
-                                  unsigned char *src,
-                                  int srcwidth,
-                                  int skipleft,
-                                  int fg, int bg,
-                                  int rop, unsigned int planemask);
-
-extern _X_EXPORT void
-
-XAAWriteBitmapColorExpand3LSBFirst(ScrnInfoPtr pScrn,
-                                   int x, int y, int w, int h,
-                                   unsigned char *src,
-                                   int srcwidth,
-                                   int skipleft,
-                                   int fg, int bg,
-                                   int rop, unsigned int planemask);
-
-extern _X_EXPORT void
-
-XAAWriteBitmapScanlineColorExpandMSBFirst(ScrnInfoPtr pScrn,
-                                          int x, int y, int w, int h,
-                                          unsigned char *src,
-                                          int srcwidth,
-                                          int skipleft,
-                                          int fg, int bg,
-                                          int rop, unsigned int planemask);
-
-extern _X_EXPORT void
-
-XAAWriteBitmapScanlineColorExpand3MSBFirst(ScrnInfoPtr pScrn,
-                                           int x, int y, int w, int h,
-                                           unsigned char *src,
-                                           int srcwidth,
-                                           int skipleft,
-                                           int fg, int bg,
-                                           int rop, unsigned int planemask);
-
-extern _X_EXPORT void
-
-XAAWriteBitmapScanlineColorExpandMSBFirstFixedBase(ScrnInfoPtr pScrn,
-                                                   int x, int y, int w, int h,
-                                                   unsigned char *src,
-                                                   int srcwidth,
-                                                   int skipleft,
-                                                   int fg, int bg,
-                                                   int rop,
-                                                   unsigned int planemask);
-
-extern _X_EXPORT void
-
-XAAWriteBitmapScanlineColorExpand3MSBFirstFixedBase(ScrnInfoPtr pScrn,
-                                                    int x, int y, int w, int h,
-                                                    unsigned char *src,
-                                                    int srcwidth,
-                                                    int skipleft,
-                                                    int fg, int bg,
-                                                    int rop,
-                                                    unsigned int planemask);
-
-extern _X_EXPORT void
-
-XAAWriteBitmapScanlineColorExpandLSBFirst(ScrnInfoPtr pScrn,
-                                          int x, int y, int w, int h,
-                                          unsigned char *src,
-                                          int srcwidth,
-                                          int skipleft,
-                                          int fg, int bg,
-                                          int rop, unsigned int planemask);
-
-extern _X_EXPORT void
-
-XAAWriteBitmapScanlineColorExpand3LSBFirst(ScrnInfoPtr pScrn,
-                                           int x, int y, int w, int h,
-                                           unsigned char *src,
-                                           int srcwidth,
-                                           int skipleft,
-                                           int fg, int bg,
-                                           int rop, unsigned int planemask);
-
-extern _X_EXPORT void
-
-XAAWriteBitmapScanlineColorExpandLSBFirstFixedBase(ScrnInfoPtr pScrn,
-                                                   int x, int y, int w, int h,
-                                                   unsigned char *src,
-                                                   int srcwidth,
-                                                   int skipleft,
-                                                   int fg, int bg,
-                                                   int rop,
-                                                   unsigned int planemask);
-
-extern _X_EXPORT void
-
-XAAWriteBitmapScanlineColorExpand3LSBFirstFixedBase(ScrnInfoPtr pScrn,
-                                                    int x, int y, int w, int h,
-                                                    unsigned char *src,
-                                                    int srcwidth,
-                                                    int skipleft,
-                                                    int fg, int bg,
-                                                    int rop,
-                                                    unsigned int planemask);
-
-extern _X_EXPORT void
-
-XAAWritePixmap(ScrnInfoPtr pScrn,
-               int x, int y, int w, int h,
-               unsigned char *src,
-               int srcwidth,
-               int rop,
-               unsigned int planemask,
-               int transparency_color, int bpp, int depth);
-
-extern _X_EXPORT void
-
-XAAWritePixmapScanline(ScrnInfoPtr pScrn,
-                       int x, int y, int w, int h,
-                       unsigned char *src,
-                       int srcwidth,
-                       int rop,
-                       unsigned int planemask,
-                       int transparency_color, int bpp, int depth);
-
-typedef void (*ClipAndRenderRectsFunc) (GCPtr, int, BoxPtr, int, int);
-
-extern _X_EXPORT void
-
-XAAClipAndRenderRects(GCPtr pGC,
-                      ClipAndRenderRectsFunc func,
-                      int nrectFill, xRectangle *prectInit, int xorg, int yorg);
-
-typedef void (*ClipAndRenderSpansFunc) (GCPtr, int, DDXPointPtr, int *,
-                                        int, int, int);
-
-extern _X_EXPORT void
-
-XAAClipAndRenderSpans(GCPtr pGC,
-                      DDXPointPtr ppt,
-                      int *pwidth,
-                      int nspans,
-                      int fSorted,
-                      ClipAndRenderSpansFunc func, int xorg, int yorg);
-
-extern _X_EXPORT void
-
-XAAFillSolidRects(ScrnInfoPtr pScrn,
-                  int fg, int rop,
-                  unsigned int planemask, int nBox, BoxPtr pBox);
-
-extern _X_EXPORT void
-
-XAAFillMono8x8PatternRects(ScrnInfoPtr pScrn,
-                           int fg, int bg, int rop,
-                           unsigned int planemask,
-                           int nBox,
-                           BoxPtr pBox, int pat0, int pat1, int xorg, int yorg);
-
-extern _X_EXPORT void
-
-XAAFillMono8x8PatternRectsScreenOrigin(ScrnInfoPtr pScrn,
-                                       int fg, int bg, int rop,
-                                       unsigned int planemask,
-                                       int nBox,
-                                       BoxPtr pBox,
-                                       int pat0, int pat1, int xorg, int yorg);
-
-extern _X_EXPORT void
-
-XAAFillColor8x8PatternRectsScreenOrigin(ScrnInfoPtr pScrn,
-                                        int rop,
-                                        unsigned int planemask,
-                                        int nBox,
-                                        BoxPtr pBox,
-                                        int xorigin, int yorigin,
-                                        XAACacheInfoPtr pCache);
-
-extern _X_EXPORT void
-
-XAAFillColor8x8PatternRects(ScrnInfoPtr pScrn,
-                            int rop,
-                            unsigned int planemask,
-                            int nBox,
-                            BoxPtr pBox,
-                            int xorigin, int yorigin, XAACacheInfoPtr pCache);
-
-extern _X_EXPORT void
-
-XAAFillCacheBltRects(ScrnInfoPtr pScrn,
-                     int rop,
-                     unsigned int planemask,
-                     int nBox,
-                     BoxPtr pBox, int xorg, int yorg, XAACacheInfoPtr pCache);
-
-extern _X_EXPORT void
-
-XAAFillCacheExpandRects(ScrnInfoPtr pScrn,
-                        int fg, int bg, int rop,
-                        unsigned int planemask,
-                        int nBox,
-                        BoxPtr pBox, int xorg, int yorg, PixmapPtr pPix);
-
-extern _X_EXPORT void
-
-XAAFillImageWriteRects(ScrnInfoPtr pScrn,
-                       int rop,
-                       unsigned int planemask,
-                       int nBox,
-                       BoxPtr pBox, int xorg, int yorg, PixmapPtr pPix);
-
-extern _X_EXPORT void
-
-XAAPolyFillRect(DrawablePtr pDraw,
-                GCPtr pGC, int nrectFill, xRectangle *prectInit);
-
-extern _X_EXPORT void
-
-XAATEGlyphRendererMSBFirstFixedBase(ScrnInfoPtr pScrn,
-                                    int x, int y, int w, int h, int skipleft,
-                                    int startline, unsigned int **glyphs,
-                                    int glyphWidth, int fg, int bg, int rop,
-                                    unsigned planemask);
-
-extern _X_EXPORT void
-
-XAATEGlyphRenderer3MSBFirstFixedBase(ScrnInfoPtr pScrn,
-                                     int x, int y, int w, int h, int skipleft,
-                                     int startline, unsigned int **glyphs,
-                                     int glyphWidth, int fg, int bg, int rop,
-                                     unsigned planemask);
-
-extern _X_EXPORT void
-
-XAATEGlyphRendererMSBFirst(ScrnInfoPtr pScrn,
-                           int x, int y, int w, int h, int skipleft,
-                           int startline, unsigned int **glyphs, int glyphWidth,
-                           int fg, int bg, int rop, unsigned planemask);
-
-extern _X_EXPORT void
-
-XAATEGlyphRenderer3MSBFirst(ScrnInfoPtr pScrn,
-                            int x, int y, int w, int h, int skipleft,
-                            int startline, unsigned int **glyphs,
-                            int glyphWidth, int fg, int bg, int rop,
-                            unsigned planemask);
-
-extern _X_EXPORT void
-
-XAATEGlyphRendererLSBFirstFixedBase(ScrnInfoPtr pScrn,
-                                    int x, int y, int w, int h, int skipleft,
-                                    int startline, unsigned int **glyphs,
-                                    int glyphWidth, int fg, int bg, int rop,
-                                    unsigned planemask);
-
-extern _X_EXPORT void
-
-XAATEGlyphRenderer3LSBFirstFixedBase(ScrnInfoPtr pScrn,
-                                     int x, int y, int w, int h, int skipleft,
-                                     int startline, unsigned int **glyphs,
-                                     int glyphWidth, int fg, int bg, int rop,
-                                     unsigned planemask);
-
-extern _X_EXPORT void
-
-XAATEGlyphRendererLSBFirst(ScrnInfoPtr pScrn,
-                           int x, int y, int w, int h, int skipleft,
-                           int startline, unsigned int **glyphs, int glyphWidth,
-                           int fg, int bg, int rop, unsigned planemask);
-
-extern _X_EXPORT void
-
-XAATEGlyphRenderer3LSBFirst(ScrnInfoPtr pScrn,
-                            int x, int y, int w, int h, int skipleft,
-                            int startline, unsigned int **glyphs,
-                            int glyphWidth, int fg, int bg, int rop,
-                            unsigned planemask);
-
-extern _X_EXPORT void
-
-XAATEGlyphRendererScanlineMSBFirst(ScrnInfoPtr pScrn,
-                                   int x, int y, int w, int h, int skipleft,
-                                   int startline, unsigned int **glyphs,
-                                   int glyphWidth, int fg, int bg, int rop,
-                                   unsigned planemask);
-
-extern _X_EXPORT void
-
-XAATEGlyphRendererScanline3MSBFirst(ScrnInfoPtr pScrn,
-                                    int x, int y, int w, int h, int skipleft,
-                                    int startline, unsigned int **glyphs,
-                                    int glyphWidth, int fg, int bg, int rop,
-                                    unsigned planemask);
-
-extern _X_EXPORT void
-
-XAATEGlyphRendererScanlineLSBFirst(ScrnInfoPtr pScrn,
-                                   int x, int y, int w, int h, int skipleft,
-                                   int startline, unsigned int **glyphs,
-                                   int glyphWidth, int fg, int bg, int rop,
-                                   unsigned planemask);
-
-extern _X_EXPORT void
-
-XAATEGlyphRendererScanline3LSBFirst(ScrnInfoPtr pScrn,
-                                    int x, int y, int w, int h, int skipleft,
-                                    int startline, unsigned int **glyphs,
-                                    int glyphWidth, int fg, int bg, int rop,
-                                    unsigned planemask);
-
-extern _X_EXPORT CARD32 *(*XAAGlyphScanlineFuncMSBFirstFixedBase[32]) (CARD32
-                                                                       *base,
-                                                                       unsigned
-                                                                       int
-                                                                       **glyphp,
-                                                                       int line,
-                                                                       int
-                                                                       nglyph,
-                                                                       int
-                                                                       width);
-
-extern _X_EXPORT CARD32 *(*XAAGlyphScanlineFuncMSBFirst[32]) (CARD32 *base,
-                                                              unsigned int
-                                                              **glyphp,
-                                                              int line,
-                                                              int nglyph,
-                                                              int width);
-
-extern _X_EXPORT CARD32 *(*XAAGlyphScanlineFuncLSBFirstFixedBase[32]) (CARD32
-                                                                       *base,
-                                                                       unsigned
-                                                                       int
-                                                                       **glyphp,
-                                                                       int line,
-                                                                       int
-                                                                       nglyph,
-                                                                       int
-                                                                       width);
-
-extern _X_EXPORT CARD32 *(*XAAGlyphScanlineFuncLSBFirst[32]) (CARD32 *base,
-                                                              unsigned int
-                                                              **glyphp,
-                                                              int line,
-                                                              int nglyph,
-                                                              int width);
-
-extern _X_EXPORT GlyphScanlineFuncPtr
-    *XAAGetGlyphScanlineFuncMSBFirstFixedBase(void);
-extern _X_EXPORT GlyphScanlineFuncPtr *XAAGetGlyphScanlineFuncMSBFirst(void);
-extern _X_EXPORT GlyphScanlineFuncPtr
-    *XAAGetGlyphScanlineFuncLSBFirstFixedBase(void);
-extern _X_EXPORT GlyphScanlineFuncPtr *XAAGetGlyphScanlineFuncLSBFirst(void);
-
-extern _X_EXPORT void
-
-XAAFillColorExpandRectsLSBFirst(ScrnInfoPtr pScrn,
-                                int fg, int bg, int rop,
-                                unsigned int planemask,
-                                int nBox,
-                                BoxPtr pBox,
-                                int xorg, int yorg, PixmapPtr pPix);
-
-extern _X_EXPORT void
-
-XAAFillColorExpandRects3LSBFirst(ScrnInfoPtr pScrn,
-                                 int fg, int bg, int rop,
-                                 unsigned int planemask,
-                                 int nBox,
-                                 BoxPtr pBox,
-                                 int xorg, int yorg, PixmapPtr pPix);
-
-extern _X_EXPORT void
-
-XAAFillColorExpandRectsLSBFirstFixedBase(ScrnInfoPtr pScrn,
-                                         int fg, int bg, int rop,
-                                         unsigned int planemask,
-                                         int nBox,
-                                         BoxPtr pBox,
-                                         int xorg, int yorg, PixmapPtr pPix);
-
-extern _X_EXPORT void
-
-XAAFillColorExpandRects3LSBFirstFixedBase(ScrnInfoPtr pScrn,
-                                          int fg, int bg, int rop,
-                                          unsigned int planemask,
-                                          int nBox,
-                                          BoxPtr pBox,
-                                          int xorg, int yorg, PixmapPtr pPix);
-
-extern _X_EXPORT void
-
-XAAFillColorExpandRectsMSBFirst(ScrnInfoPtr pScrn,
-                                int fg, int bg, int rop,
-                                unsigned int planemask,
-                                int nBox,
-                                BoxPtr pBox,
-                                int xorg, int yorg, PixmapPtr pPix);
-
-extern _X_EXPORT void
-
-XAAFillColorExpandRects3MSBFirst(ScrnInfoPtr pScrn,
-                                 int fg, int bg, int rop,
-                                 unsigned int planemask,
-                                 int nBox,
-                                 BoxPtr pBox,
-                                 int xorg, int yorg, PixmapPtr pPix);
-
-extern _X_EXPORT void
-
-XAAFillColorExpandRectsMSBFirstFixedBase(ScrnInfoPtr pScrn,
-                                         int fg, int bg, int rop,
-                                         unsigned int planemask,
-                                         int nBox,
-                                         BoxPtr pBox,
-                                         int xorg, int yorg, PixmapPtr pPix);
-
-extern _X_EXPORT void
-
-XAAFillColorExpandRects3MSBFirstFixedBase(ScrnInfoPtr pScrn,
-                                          int fg, int bg, int rop,
-                                          unsigned int planemask,
-                                          int nBox,
-                                          BoxPtr pBox,
-                                          int xorg, int yorg, PixmapPtr pPix);
-
-extern _X_EXPORT void
-
-XAAFillScanlineColorExpandRectsLSBFirst(ScrnInfoPtr pScrn,
-                                        int fg, int bg, int rop,
-                                        unsigned int planemask,
-                                        int nBox,
-                                        BoxPtr pBox,
-                                        int xorg, int yorg, PixmapPtr pPix);
-
-extern _X_EXPORT void
-
-XAAFillScanlineColorExpandRects3LSBFirst(ScrnInfoPtr pScrn,
-                                         int fg, int bg, int rop,
-                                         unsigned int planemask,
-                                         int nBox,
-                                         BoxPtr pBox,
-                                         int xorg, int yorg, PixmapPtr pPix);
-
-extern _X_EXPORT void
-
-XAAFillScanlineColorExpandRectsMSBFirst(ScrnInfoPtr pScrn,
-                                        int fg, int bg, int rop,
-                                        unsigned int planemask,
-                                        int nBox,
-                                        BoxPtr pBox,
-                                        int xorg, int yorg, PixmapPtr pPix);
-
-extern _X_EXPORT void
-
-XAAFillScanlineColorExpandRects3MSBFirst(ScrnInfoPtr pScrn,
-                                         int fg, int bg, int rop,
-                                         unsigned int planemask,
-                                         int nBox,
-                                         BoxPtr pBox,
-                                         int xorg, int yorg, PixmapPtr pPix);
-
-extern _X_EXPORT void
-
-XAAFillColorExpandSpansLSBFirst(ScrnInfoPtr pScrn,
-                                int fg, int bg, int rop,
-                                unsigned int planemask,
-                                int n,
-                                DDXPointPtr ppt,
-                                int *pwidth,
-                                int fSorted,
-                                int xorg, int yorg, PixmapPtr pPix);
-
-extern _X_EXPORT void
-
-XAAFillColorExpandSpans3LSBFirst(ScrnInfoPtr pScrn,
-                                 int fg, int bg, int rop,
-                                 unsigned int planemask,
-                                 int n,
-                                 DDXPointPtr ppt,
-                                 int *pwidth,
-                                 int fSorted,
-                                 int xorg, int yorg, PixmapPtr pPix);
-
-extern _X_EXPORT void
-
-XAAFillColorExpandSpansLSBFirstFixedBase(ScrnInfoPtr pScrn,
-                                         int fg, int bg, int rop,
-                                         unsigned int planemask,
-                                         int n,
-                                         DDXPointPtr ppt,
-                                         int *pwidth,
-                                         int fSorted,
-                                         int xorg, int yorg, PixmapPtr pPix);
-
-extern _X_EXPORT void
-
-XAAFillColorExpandSpans3LSBFirstFixedBase(ScrnInfoPtr pScrn,
-                                          int fg, int bg, int rop,
-                                          unsigned int planemask,
-                                          int n,
-                                          DDXPointPtr ppt,
-                                          int *pwidth,
-                                          int fSorted,
-                                          int xorg, int yorg, PixmapPtr pPix);
-
-extern _X_EXPORT void
-
-XAAFillColorExpandSpansMSBFirst(ScrnInfoPtr pScrn,
-                                int fg, int bg, int rop,
-                                unsigned int planemask,
-                                int n,
-                                DDXPointPtr ppt,
-                                int *pwidth,
-                                int fSorted,
-                                int xorg, int yorg, PixmapPtr pPix);
-
-extern _X_EXPORT void
-
-XAAFillColorExpandSpans3MSBFirst(ScrnInfoPtr pScrn,
-                                 int fg, int bg, int rop,
-                                 unsigned int planemask,
-                                 int n,
-                                 DDXPointPtr ppt,
-                                 int *pwidth,
-                                 int fSorted,
-                                 int xorg, int yorg, PixmapPtr pPix);
-
-extern _X_EXPORT void
-
-XAAFillColorExpandSpansMSBFirstFixedBase(ScrnInfoPtr pScrn,
-                                         int fg, int bg, int rop,
-                                         unsigned int planemask,
-                                         int n,
-                                         DDXPointPtr ppt,
-                                         int *pwidth,
-                                         int fSorted,
-                                         int xorg, int yorg, PixmapPtr pPix);
-
-extern _X_EXPORT void
-
-XAAFillColorExpandSpans3MSBFirstFixedBase(ScrnInfoPtr pScrn,
-                                          int fg, int bg, int rop,
-                                          unsigned int planemask,
-                                          int n,
-                                          DDXPointPtr ppt,
-                                          int *pwidth,
-                                          int fSorted,
-                                          int xorg, int yorg, PixmapPtr pPix);
-
-extern _X_EXPORT void
-
-XAAFillScanlineColorExpandSpansLSBFirst(ScrnInfoPtr pScrn,
-                                        int fg, int bg, int rop,
-                                        unsigned int planemask,
-                                        int n,
-                                        DDXPointPtr ppt,
-                                        int *pwidth,
-                                        int fSorted,
-                                        int xorg, int yorg, PixmapPtr pPix);
-
-extern _X_EXPORT void
-
-XAAFillScanlineColorExpandSpans3LSBFirst(ScrnInfoPtr pScrn,
-                                         int fg, int bg, int rop,
-                                         unsigned int planemask,
-                                         int n,
-                                         DDXPointPtr ppt,
-                                         int *pwidth,
-                                         int fSorted,
-                                         int xorg, int yorg, PixmapPtr pPix);
-
-extern _X_EXPORT void
-
-XAAPutImage(DrawablePtr pDraw,
-            GCPtr pGC,
-            int depth,
-            int x, int y, int w, int h, int leftPad, int format, char *pImage);
-
-extern _X_EXPORT void
-
-XAAFillScanlineColorExpandSpansMSBFirst(ScrnInfoPtr pScrn,
-                                        int fg, int bg, int rop,
-                                        unsigned int planemask,
-                                        int n,
-                                        DDXPointPtr ppt,
-                                        int *pwidth,
-                                        int fSorted,
-                                        int xorg, int yorg, PixmapPtr pPix);
-
-extern _X_EXPORT void
-
-XAAFillScanlineColorExpandSpans3MSBFirst(ScrnInfoPtr pScrn,
-                                         int fg, int bg, int rop,
-                                         unsigned int planemask,
-                                         int n,
-                                         DDXPointPtr ppt,
-                                         int *pwidth,
-                                         int fSorted,
-                                         int xorg, int yorg, PixmapPtr pPix);
-
-extern _X_EXPORT CARD32 *(*XAAStippleScanlineFuncMSBFirstFixedBase[6]) (CARD32
-                                                                        *base,
-                                                                        CARD32
-                                                                        *src,
-                                                                        int
-                                                                        offset,
-                                                                        int
-                                                                        width,
-                                                                        int
-                                                                        dwords);
-
-extern _X_EXPORT CARD32 *(*XAAStippleScanlineFuncMSBFirst[6]) (CARD32 *base,
-                                                               CARD32 *src,
-                                                               int offset,
-                                                               int width,
-                                                               int dwords);
-
-extern _X_EXPORT CARD32 *(*XAAStippleScanlineFuncLSBFirstFixedBase[6]) (CARD32
-                                                                        *base,
-                                                                        CARD32
-                                                                        *src,
-                                                                        int
-                                                                        offset,
-                                                                        int
-                                                                        width,
-                                                                        int
-                                                                        dwords);
-
-extern _X_EXPORT CARD32 *(*XAAStippleScanlineFuncLSBFirst[6]) (CARD32 *base,
-                                                               CARD32 *src,
-                                                               int offset,
-                                                               int width,
-                                                               int dwords);
-
-extern _X_EXPORT StippleScanlineProcPtr
-    *XAAGetStippleScanlineFuncMSBFirstFixedBase(void);
-extern _X_EXPORT StippleScanlineProcPtr
-    *XAAGetStippleScanlineFuncMSBFirst(void);
-extern _X_EXPORT StippleScanlineProcPtr
-    *XAAGetStippleScanlineFuncLSBFirstFixedBase(void);
-extern _X_EXPORT StippleScanlineProcPtr
-    *XAAGetStippleScanlineFuncLSBFirst(void);
-extern _X_EXPORT StippleScanlineProcPtr
-    *XAAGetStippleScanlineFunc3MSBFirstFixedBase(void);
-extern _X_EXPORT StippleScanlineProcPtr
-    *XAAGetStippleScanlineFunc3MSBFirst(void);
-extern _X_EXPORT StippleScanlineProcPtr
-    *XAAGetStippleScanlineFunc3LSBFirstFixedBase(void);
-extern _X_EXPORT StippleScanlineProcPtr
-    *XAAGetStippleScanlineFunc3LSBFirst(void);
-
-extern _X_EXPORT int
-
-XAAPolyText8TEColorExpansion(DrawablePtr pDraw,
-                             GCPtr pGC, int x, int y, int count, char *chars);
-
-extern _X_EXPORT int
-
-XAAPolyText16TEColorExpansion(DrawablePtr pDraw,
-                              GCPtr pGC,
-                              int x, int y, int count, unsigned short *chars);
-
-extern _X_EXPORT void
-
-XAAImageText8TEColorExpansion(DrawablePtr pDraw,
-                              GCPtr pGC, int x, int y, int count, char *chars);
-
-extern _X_EXPORT void
-
-XAAImageText16TEColorExpansion(DrawablePtr pDraw,
-                               GCPtr pGC,
-                               int x, int y, int count, unsigned short *chars);
-
-extern _X_EXPORT void
-
-XAAImageGlyphBltTEColorExpansion(DrawablePtr pDrawable,
-                                 GCPtr pGC,
-                                 int xInit, int yInit,
-                                 unsigned int nglyph,
-                                 CharInfoPtr * ppci, pointer pglyphBase);
-
-extern _X_EXPORT void
-
-XAAPolyGlyphBltTEColorExpansion(DrawablePtr pDrawable,
-                                GCPtr pGC,
-                                int xInit, int yInit,
-                                unsigned int nglyph,
-                                CharInfoPtr * ppci, pointer pglyphBase);
-
-extern _X_EXPORT int
-
-XAAPolyText8NonTEColorExpansion(DrawablePtr pDraw,
-                                GCPtr pGC,
-                                int x, int y, int count, char *chars);
-
-extern _X_EXPORT int
-
-XAAPolyText16NonTEColorExpansion(DrawablePtr pDraw,
-                                 GCPtr pGC,
-                                 int x, int y,
-                                 int count, unsigned short *chars);
-
-extern _X_EXPORT void
-
-XAAImageText8NonTEColorExpansion(DrawablePtr pDraw,
-                                 GCPtr pGC,
-                                 int x, int y, int count, char *chars);
-
-extern _X_EXPORT void
-
-XAAImageText16NonTEColorExpansion(DrawablePtr pDraw,
-                                  GCPtr pGC,
-                                  int x, int y,
-                                  int count, unsigned short *chars);
-
-extern _X_EXPORT void
-
-XAAImageGlyphBltNonTEColorExpansion(DrawablePtr pDrawable,
-                                    GCPtr pGC,
-                                    int xInit, int yInit,
-                                    unsigned int nglyph,
-                                    CharInfoPtr * ppci, pointer pglyphBase);
-
-extern _X_EXPORT void
-
-XAAPolyGlyphBltNonTEColorExpansion(DrawablePtr pDrawable,
-                                   GCPtr pGC,
-                                   int xInit, int yInit,
-                                   unsigned int nglyph,
-                                   CharInfoPtr * ppci, pointer pglyphBase);
-
-extern _X_EXPORT void XAANonTEGlyphRenderer(ScrnInfoPtr pScrn,
-                                            int x, int y, int n,
-                                            NonTEGlyphPtr glyphs,
-                                            BoxPtr pbox,
-                                            int fg, int rop,
-                                            unsigned int planemask);
-
-extern _X_EXPORT void
-
-XAAFillSolidSpans(ScrnInfoPtr pScrn,
-                  int fg, int rop,
-                  unsigned int planemask,
-                  int n, DDXPointPtr ppt, int *pwidth, int fSorted);
-
-extern _X_EXPORT void
-
-XAAFillMono8x8PatternSpans(ScrnInfoPtr pScrn,
-                           int fg, int bg, int rop,
-                           unsigned int planemask,
-                           int n,
-                           DDXPointPtr ppt,
-                           int *pwidth, int fSorted,
-                           int patx, int paty, int xorg, int yorg);
-
-extern _X_EXPORT void
-
-XAAFillMono8x8PatternSpansScreenOrigin(ScrnInfoPtr pScrn,
-                                       int fg, int bg, int rop,
-                                       unsigned int planemask,
-                                       int n,
-                                       DDXPointPtr ppt,
-                                       int *pwidth, int fSorted,
-                                       int patx, int paty, int xorg, int yorg);
-
-extern _X_EXPORT void
-
-XAAFillColor8x8PatternSpansScreenOrigin(ScrnInfoPtr pScrn,
-                                        int rop,
-                                        unsigned int planemask,
-                                        int n,
-                                        DDXPointPtr ppt,
-                                        int *pwidth, int fSorted,
-                                        XAACacheInfoPtr,
-                                        int xorigin, int yorigin);
-
-extern _X_EXPORT void
-
-XAAFillColor8x8PatternSpans(ScrnInfoPtr pScrn,
-                            int rop,
-                            unsigned int planemask,
-                            int n,
-                            DDXPointPtr ppt,
-                            int *pwidth, int fSorted,
-                            XAACacheInfoPtr, int xorigin, int yorigin);
-
-extern _X_EXPORT void
-
-XAAFillCacheBltSpans(ScrnInfoPtr pScrn,
-                     int rop,
-                     unsigned int planemask,
-                     int n,
-                     DDXPointPtr points,
-                     int *widths,
-                     int fSorted, XAACacheInfoPtr pCache, int xorg, int yorg);
-
-extern _X_EXPORT void
-
-XAAFillCacheExpandSpans(ScrnInfoPtr pScrn,
-                        int fg, int bg, int rop,
-                        unsigned int planemask,
-                        int n,
-                        DDXPointPtr ppt,
-                        int *pwidth,
-                        int fSorted, int xorg, int yorg, PixmapPtr pPix);
-
-extern _X_EXPORT void
-
-XAAFillSpans(DrawablePtr pDrawable,
-             GC * pGC,
-             int nInit, DDXPointPtr pptInit, int *pwidth, int fSorted);
-
-extern _X_EXPORT void
- XAAInitPixmapCache(ScreenPtr pScreen, RegionPtr areas, pointer data);
-
-extern _X_EXPORT void
-
-XAAWriteBitmapToCache(ScrnInfoPtr pScrn,
-                      int x, int y, int w, int h,
-                      unsigned char *src, int srcwidth, int fg, int bg);
-
-extern _X_EXPORT void
-
-XAAWriteBitmapToCacheLinear(ScrnInfoPtr pScrn,
-                            int x, int y, int w, int h,
-                            unsigned char *src, int srcwidth, int fg, int bg);
-
-extern _X_EXPORT void
-
-XAAWritePixmapToCache(ScrnInfoPtr pScrn,
-                      int x, int y, int w, int h,
-                      unsigned char *src, int srcwidth, int bpp, int depth);
-
-extern _X_EXPORT void
-
-XAAWritePixmapToCacheLinear(ScrnInfoPtr pScrn,
-                            int x, int y, int w, int h,
-                            unsigned char *src,
-                            int srcwidth, int bpp, int depth);
-
-extern _X_EXPORT void
- XAASolidHorVertLineAsRects(ScrnInfoPtr pScrn, int x, int y, int len, int dir);
-
-extern _X_EXPORT void
-
-XAASolidHorVertLineAsTwoPoint(ScrnInfoPtr pScrn,
-                              int x, int y, int len, int dir);
-
-extern _X_EXPORT void
-
-XAASolidHorVertLineAsBresenham(ScrnInfoPtr pScrn,
-                               int x, int y, int len, int dir);
-
-extern _X_EXPORT void
-
-XAAPolyRectangleThinSolid(DrawablePtr pDrawable,
-                          GCPtr pGC, int nRectsInit, xRectangle *pRectsInit);
-
-extern _X_EXPORT void
-
-XAAPolylinesWideSolid(DrawablePtr pDrawable,
-                      GCPtr pGC, int mode, int npt, DDXPointPtr pPts);
-
-extern _X_EXPORT void
-
-XAAFillPolygonSolid(DrawablePtr pDrawable,
-                    GCPtr pGC,
-                    int shape, int mode, int count, DDXPointPtr ptsIn);
-
-extern _X_EXPORT void
-
-XAAFillPolygonStippled(DrawablePtr pDrawable,
-                       GCPtr pGC,
-                       int shape, int mode, int count, DDXPointPtr ptsIn);
-
-extern _X_EXPORT void
-
-XAAFillPolygonTiled(DrawablePtr pDrawable,
-                    GCPtr pGC,
-                    int shape, int mode, int count, DDXPointPtr ptsIn);
-
-extern _X_EXPORT int
-
-XAAIsEasyPolygon(DDXPointPtr ptsIn,
-                 int count,
-                 BoxPtr extents,
-                 int origin,
-                 DDXPointPtr * topPoint, int *topY, int *bottomY, int shape);
-
-extern _X_EXPORT void
-
-XAAFillPolygonHelper(ScrnInfoPtr pScrn,
-                     DDXPointPtr ptsIn,
-                     int count,
-                     DDXPointPtr topPoint,
-                     int y,
-                     int maxy,
-                     int origin,
-                     RectFuncPtr RectFunc,
-                     TrapFuncPtr TrapFunc,
-                     int xorg, int yorg, XAACacheInfoPtr pCache);
-
-extern _X_EXPORT void
- XAAPolySegment(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pSeg);
-
-extern _X_EXPORT void
-
-XAAPolyLines(DrawablePtr pDrawable,
-             GCPtr pGC, int mode, int npt, DDXPointPtr pptInit);
-
-extern _X_EXPORT void
-
-XAAPolySegmentDashed(DrawablePtr pDrawable,
-                     GCPtr pGC, int nseg, xSegment * pSeg);
-
-extern _X_EXPORT void
-
-XAAPolyLinesDashed(DrawablePtr pDrawable,
-                   GCPtr pGC, int mode, int npt, DDXPointPtr pptInit);
-
-extern _X_EXPORT void
- XAAWriteMono8x8PatternToCache(ScrnInfoPtr pScrn, XAACacheInfoPtr pCache);
-
-extern _X_EXPORT void
-
-XAAWriteColor8x8PatternToCache(ScrnInfoPtr pScrn,
-                               PixmapPtr pPix, XAACacheInfoPtr pCache);
-
-extern _X_EXPORT void
-
-XAARotateMonoPattern(int *pat0, int *pat1,
-                     int xoffset, int yoffset, Bool msbfirst);
-
-extern _X_EXPORT void XAAComputeDash(GCPtr pGC);
-
-extern _X_EXPORT void XAAMoveDWORDS_FixedBase(register CARD32 *dest,
-                                              register CARD32 *src,
-                                              register int dwords);
-
-extern _X_EXPORT void XAAMoveDWORDS_FixedSrc(register CARD32 *dest,
-                                             register CARD32 *src,
-                                             register int dwords);
-
-extern _X_EXPORT void XAAMoveDWORDS(register CARD32 *dest,
-                                    register CARD32 *src, register int dwords);
-
-extern _X_EXPORT int
-
-XAAGetRectClipBoxes(GCPtr pGC,
-                    BoxPtr pboxClippedBase,
-                    int nrectFill, xRectangle *prectInit);
-
-extern _X_EXPORT void
- XAASetupOverlay8_32Planar(ScreenPtr);
-
-extern _X_EXPORT void
- XAAPolyFillArcSolid(DrawablePtr pDraw, GCPtr pGC, int narcs, xArc * parcs);
-
-extern _X_EXPORT XAACacheInfoPtr XAACacheTile(ScrnInfoPtr Scrn, PixmapPtr pPix);
-
-extern _X_EXPORT XAACacheInfoPtr
-XAACacheMonoStipple(ScrnInfoPtr Scrn, PixmapPtr pPix);
-
-extern _X_EXPORT XAACacheInfoPtr
-XAACachePlanarMonoStipple(ScrnInfoPtr Scrn, PixmapPtr pPix);
-
-typedef XAACacheInfoPtr(*XAACachePlanarMonoStippleProc) (ScrnInfoPtr,
-                                                         PixmapPtr);
-extern _X_EXPORT XAACachePlanarMonoStippleProc
-XAAGetCachePlanarMonoStipple(void);
-
-extern _X_EXPORT XAACacheInfoPtr
-XAACacheStipple(ScrnInfoPtr Scrn, PixmapPtr pPix, int fg, int bg);
-
-extern _X_EXPORT XAACacheInfoPtr
-XAACacheMono8x8Pattern(ScrnInfoPtr Scrn, int pat0, int pat1);
-
-extern _X_EXPORT XAACacheInfoPtr
-XAACacheColor8x8Pattern(ScrnInfoPtr Scrn, PixmapPtr pPix, int fg, int bg);
-
-extern _X_EXPORT void
- XAATileCache(ScrnInfoPtr pScrn, XAACacheInfoPtr pCache, int w, int h);
-
-extern _X_EXPORT void XAAClosePixmapCache(ScreenPtr pScreen);
-void XAAInvalidatePixmapCache(ScreenPtr pScreen);
-
-extern _X_EXPORT Bool XAACheckStippleReducibility(PixmapPtr pPixmap);
-extern _X_EXPORT Bool XAACheckTileReducibility(PixmapPtr pPixmap,
-                                               Bool checkMono);
-
-extern _X_EXPORT int XAAStippledFillChooser(GCPtr pGC);
-extern _X_EXPORT int XAAOpaqueStippledFillChooser(GCPtr pGC);
-extern _X_EXPORT int XAATiledFillChooser(GCPtr pGC);
-
-extern _X_EXPORT void XAAMoveInOffscreenPixmaps(ScreenPtr pScreen);
-extern _X_EXPORT void XAAMoveOutOffscreenPixmaps(ScreenPtr pScreen);
-extern _X_EXPORT void XAARemoveAreaCallback(FBAreaPtr area);
-extern _X_EXPORT void XAAMoveOutOffscreenPixmap(PixmapPtr pPix);
-extern _X_EXPORT Bool XAAInitStateWrap(ScreenPtr pScreen,
-                                       XAAInfoRecPtr infoRec);
-
-extern _X_EXPORT void
-
-XAAComposite(CARD8 op,
-             PicturePtr pSrc,
-             PicturePtr pMask,
-             PicturePtr pDst,
-             INT16 xSrc,
-             INT16 ySrc,
-             INT16 xMask,
-             INT16 yMask, INT16 xDst, INT16 yDst, CARD16 width, CARD16 height);
-
-extern _X_EXPORT Bool
-
-XAADoComposite(CARD8 op,
-               PicturePtr pSrc,
-               PicturePtr pMask,
-               PicturePtr pDst,
-               INT16 xSrc,
-               INT16 ySrc,
-               INT16 xMask,
-               INT16 yMask,
-               INT16 xDst, INT16 yDst, CARD16 width, CARD16 height);
-
-extern _X_EXPORT void
-
-XAAGlyphs(CARD8 op,
-          PicturePtr pSrc,
-          PicturePtr pDst,
-          PictFormatPtr maskFormat,
-          INT16 xSrc,
-          INT16 ySrc, int nlist, GlyphListPtr list, GlyphPtr * glyphs);
-
-extern _X_EXPORT Bool
-
-XAADoGlyphs(CARD8 op,
-            PicturePtr pSrc,
-            PicturePtr pDst,
-            PictFormatPtr maskFormat,
-            INT16 xSrc,
-            INT16 ySrc, int nlist, GlyphListPtr list, GlyphPtr * glyphs);
-
-/* helpers */
-extern _X_EXPORT void
- XAA_888_plus_PICT_a8_to_8888(CARD32 color, CARD8 *alphaPtr,    /* in bytes */
-                              int alphaPitch, CARD32 *dstPtr, int dstPitch,     /* in dwords */
-                              int width, int height);
-
-extern _X_EXPORT Bool
-
-XAAGetRGBAFromPixel(CARD32 pixel,
-                    CARD16 *red,
-                    CARD16 *green, CARD16 *blue, CARD16 *alpha, CARD32 format);
-
-extern _X_EXPORT Bool
-
-XAAGetPixelFromRGBA(CARD32 *pixel,
-                    CARD16 red,
-                    CARD16 green, CARD16 blue, CARD16 alpha, CARD32 format);
-
-/* XXX should be static */
-extern _X_EXPORT GCOps XAAFallbackOps;
-extern _X_EXPORT GCOps *XAAGetFallbackOps(void);
-extern _X_EXPORT GCFuncs XAAGCFuncs;
-extern _X_EXPORT DevPrivateKey XAAGetScreenKey(void);
-extern _X_EXPORT DevPrivateKey XAAGetGCKey(void);
-extern _X_EXPORT DevPrivateKey XAAGetPixmapKey(void);
-
-extern _X_EXPORT unsigned int XAAShiftMasks[32];
-
-extern _X_EXPORT unsigned int byte_expand3[256], byte_reversed_expand3[256];
-
-extern _X_EXPORT CARD32 XAAReverseBitOrder(CARD32 data);
-
-#define GET_XAASCREENPTR_FROM_SCREEN(pScreen)\
-    dixLookupPrivate(&(pScreen)->devPrivates, XAAGetScreenKey())
-
-#define GET_XAASCREENPTR_FROM_GC(pGC)\
-    dixLookupPrivate(&(pGC)->pScreen->devPrivates, XAAGetScreenKey())
-
-#define GET_XAASCREENPTR_FROM_DRAWABLE(pDraw)\
-    dixLookupPrivate(&(pDraw)->pScreen->devPrivates, XAAGetScreenKey())
-
-#define GET_XAAINFORECPTR_FROM_SCREEN(pScreen)\
-((XAAScreenPtr)dixLookupPrivate(&(pScreen)->devPrivates, XAAGetScreenKey()))->AccelInfoRec
-
-#define GET_XAAINFORECPTR_FROM_GC(pGC)\
-((XAAScreenPtr)dixLookupPrivate(&(pGC)->pScreen->devPrivates, XAAGetScreenKey()))->AccelInfoRec
-
-#define GET_XAAINFORECPTR_FROM_DRAWABLE(pDraw)\
-((XAAScreenPtr)dixLookupPrivate(&(pDraw)->pScreen->devPrivates, XAAGetScreenKey()))->AccelInfoRec
-
-#define GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn)\
-((XAAScreenPtr)dixLookupPrivate(&(pScrn)->pScreen->devPrivates, XAAGetScreenKey()))->AccelInfoRec
-
-#define XAA_GET_PIXMAP_PRIVATE(pix)\
-    (XAAPixmapPtr)dixLookupPrivate(&(pix)->devPrivates, XAAGetPixmapKey())
-
-#define CHECK_RGB_EQUAL(c) (!((((c) >> 8) ^ (c)) & 0xffff))
-
-#define CHECK_FG(pGC, flags) \
-	(!(flags & RGB_EQUAL) || CHECK_RGB_EQUAL(pGC->fgPixel))
-
-#define CHECK_BG(pGC, flags) \
-	(!(flags & RGB_EQUAL) || CHECK_RGB_EQUAL(pGC->bgPixel))
-
-#define CHECK_ROP(pGC, flags) \
-	(!(flags & GXCOPY_ONLY) || (pGC->alu == GXcopy))
-
-#define CHECK_ROPSRC(pGC, flags) \
-	(!(flags & ROP_NEEDS_SOURCE) || ((pGC->alu != GXclear) && \
-	(pGC->alu != GXnoop) && (pGC->alu != GXinvert) && \
-	(pGC->alu != GXset)))
-
-#define CHECK_PLANEMASK(pGC, flags) \
-	(!(flags & NO_PLANEMASK) || \
-	((pGC->planemask & infoRec->FullPlanemasks[pGC->depth - 1]) == \
-          infoRec->FullPlanemasks[pGC->depth - 1]))
-
-#define CHECK_COLORS(pGC, flags) \
-	(!(flags & RGB_EQUAL) || \
-	(CHECK_RGB_EQUAL(pGC->fgPixel) && CHECK_RGB_EQUAL(pGC->bgPixel)))
-
-#define CHECK_NO_GXCOPY(pGC, flags) \
-	((pGC->alu != GXcopy) || !(flags & NO_GXCOPY) || \
-	((pGC->planemask & infoRec->FullPlanemask) != infoRec->FullPlanemask))
-
-#define IS_OFFSCREEN_PIXMAP(pPix)\
-        ((XAA_GET_PIXMAP_PRIVATE((PixmapPtr)(pPix)))->offscreenArea)
-
-#define PIXMAP_IS_SHARED(pPix)\
-        ((XAA_GET_PIXMAP_PRIVATE((PixmapPtr)(pPix)))->flags & SHARED_PIXMAP)
-
-#define OFFSCREEN_PIXMAP_LOCKED(pPix)\
-        ((XAA_GET_PIXMAP_PRIVATE((PixmapPtr)(pPix)))->flags & LOCKED_PIXMAP)
-
-#define XAA_DEPTH_BUG(pGC) \
-        ((pGC->depth == 32) && (pGC->bgPixel == 0xffffffff))
-
-#define DELIST_OFFSCREEN_PIXMAP(pPix) { \
-	PixmapLinkPtr _pLink, _prev; \
-	_pLink = infoRec->OffscreenPixmaps; \
-	_prev = NULL; \
-	while(_pLink) { \
-	    if(_pLink->pPix == pPix) { \
-		if(_prev) _prev->next = _pLink->next; \
-		else infoRec->OffscreenPixmaps = _pLink->next; \
-		free(_pLink); \
-		break; \
-	    } \
-	    _prev = _pLink; \
-	    _pLink = _pLink->next; \
-        }}
-
-#define SWAP_BITS_IN_BYTES(v) \
- (((0x01010101 & (v)) << 7) | ((0x02020202 & (v)) << 5) | \
-  ((0x04040404 & (v)) << 3) | ((0x08080808 & (v)) << 1) | \
-  ((0x10101010 & (v)) >> 1) | ((0x20202020 & (v)) >> 3) | \
-  ((0x40404040 & (v)) >> 5) | ((0x80808080 & (v)) >> 7))
-
-/*
- * Moved XAAPixmapCachePrivate here from xaaPCache.c, since driver
- * replacements for CacheMonoStipple need access to it
- */
-
-typedef struct {
-    int Num512x512;
-    int Current512;
-    XAACacheInfoPtr Info512;
-    int Num256x256;
-    int Current256;
-    XAACacheInfoPtr Info256;
-    int Num128x128;
-    int Current128;
-    XAACacheInfoPtr Info128;
-    int NumMono;
-    int CurrentMono;
-    XAACacheInfoPtr InfoMono;
-    int NumColor;
-    int CurrentColor;
-    XAACacheInfoPtr InfoColor;
-    int NumPartial;
-    int CurrentPartial;
-    XAACacheInfoPtr InfoPartial;
-    DDXPointRec MonoOffsets[64];
-    DDXPointRec ColorOffsets[64];
-} XAAPixmapCachePrivate, *XAAPixmapCachePrivatePtr;
-
-#endif                          /* _XAALOCAL_H */
diff --git a/hw/xfree86/xaa/xaarop.h b/hw/xfree86/xaa/xaarop.h
deleted file mode 100644
index f2acde0..0000000
--- a/hw/xfree86/xaa/xaarop.h
+++ /dev/null
@@ -1,311 +0,0 @@
-/*
-
-   int XAAHelpSolidROP(ScrnInfoPtr pScrn, int *fg, int pm, int *rop)
-
-	For use with solid fills emulated by solid 8x8 patterns.  You 
-	give it the foreground, planemask and X rop and it will replace 
-	the foreground with a new one and the rop with the appropriate 
-	MS triadic raster op.  The function will return which components 
-	(S-P) need to be enabled.  
-
-   int XAAHelpPatternROP(ScrnInfoPtr pScrn, int *fg, int *bg, int pm, int *rop)
-
-	For use with 8x8 opaque pattern fills.  You give it the foreground, 	
-	and background, planemask and X rop and it will replace the 
-	foreground and background with new ones and the rop with the 
-	appropriate MS triadic raster op.  The function will return which 
-	components (S-P) need to be enabled.  
-
-	   ROP_PAT - Means to enable 8x8 mono patterns (all bits 
-		     set for solid patterns).  Set the foreground and
-		     background as returned by the function.  
-
-	   ROP_SRC - Means a source of color == planemask should be used.
-
-
-*/
-
-#ifndef _XAAROP_H
-#define _XAAROP_H
-
-#define ROP_DST		0x00000001
-#define ROP_SRC		0x00000002
-#define ROP_PAT		0x00000004
-
-#define ROP_0		0x00
-#define ROP_DPSoon	0x01
-#define ROP_DPSona	0x02
-#define ROP_PSon	0x03
-#define ROP_SDPona	0x04
-#define ROP_DPon	0x05
-#define ROP_PDSxnon	0x06
-#define ROP_PDSaon	0x07
-#define ROP_SDPnaa	0x08
-#define ROP_PDSxon	0x09
-#define ROP_DPna	0x0A
-#define ROP_PSDnaon	0x0B
-#define ROP_SPna	0x0C
-#define ROP_PDSnaon	0x0D
-#define ROP_PDSonon	0x0E
-#define ROP_Pn		0x0F
-#define ROP_PDSona	0x10
-#define ROP_DSon	0x11
-#define ROP_SDPxnon	0x12
-#define ROP_SDPaon	0x13
-#define ROP_DPSxnon	0x14
-#define ROP_DPSaon	0x15
-#define ROP_PSDPSanaxx	0x16
-#define ROP_SSPxDSxaxn	0x17
-#define ROP_SPxPDxa	0x18
-#define ROP_SDPSanaxn	0x19
-#define ROP_PDSPaox	0x1A
-#define ROP_SDPSxaxn	0x1B
-#define ROP_PSDPaox	0x1C
-#define ROP_DSPDxaxn	0x1D
-#define ROP_PDSox	0x1E
-#define ROP_PDSoan	0x1F
-#define ROP_DPSnaa	0x20
-#define ROP_SDPxon	0x21
-#define ROP_DSna	0x22
-#define ROP_SPDnaon	0x23
-#define ROP_SPxDSxa	0x24
-#define ROP_PDSPanaxn	0x25
-#define ROP_SDPSaox	0x26
-#define ROP_SDPSxnox	0x27
-#define ROP_DPSxa	0x28
-#define ROP_PSDPSaoxxn	0x29
-#define ROP_DPSana	0x2A
-#define ROP_SSPxPDxaxn	0x2B
-#define ROP_SPDSoax	0x2C
-#define ROP_PSDnox	0x2D
-#define ROP_PSDPxox	0x2E
-#define ROP_PSDnoan	0x2F
-#define ROP_PSna	0x30
-#define ROP_SDPnaon	0x31
-#define ROP_SDPSoox	0x32
-#define ROP_Sn		0x33
-#define ROP_SPDSaox	0x34
-#define ROP_SPDSxnox	0x35
-#define ROP_SDPox	0x36
-#define ROP_SDPoan	0x37
-#define ROP_PSDPoax	0x38
-#define ROP_SPDnox	0x39
-#define ROP_SPDSxox	0x3A
-#define ROP_SPDnoan	0x3B
-#define ROP_PSx		0x3C
-#define ROP_SPDSonox	0x3D
-#define ROP_SPDSnaox	0x3E
-#define ROP_PSan	0x3F
-#define ROP_PSDnaa	0x40
-#define ROP_DPSxon	0x41
-#define ROP_SDxPDxa	0x42
-#define ROP_SPDSanaxn	0x43
-#define ROP_SDna	0x44
-#define ROP_DPSnaon	0x45
-#define ROP_DSPDaox	0x46
-#define ROP_PSDPxaxn	0x47
-#define ROP_SDPxa	0x48
-#define ROP_PDSPDaoxxn	0x49
-#define ROP_DPSDoax	0x4A
-#define ROP_PDSnox	0x4B
-#define ROP_SDPana	0x4C
-#define ROP_SSPxDSxoxn	0x4D
-#define ROP_PDSPxox	0x4E
-#define ROP_PDSnoan	0x4F
-#define ROP_PDna	0x50
-#define ROP_DSPnaon	0x51
-#define ROP_DPSDaox	0x52
-#define ROP_SPDSxaxn	0x53
-#define ROP_DPSonon	0x54
-#define ROP_Dn		0x55
-#define ROP_DPSox	0x56
-#define ROP_DPSoan	0x57
-#define ROP_PDSPoax	0x58
-#define ROP_DPSnox	0x59
-#define ROP_DPx		0x5A
-#define ROP_DPSDonox	0x5B
-#define ROP_DPSDxox	0x5C
-#define ROP_DPSnoan	0x5D
-#define ROP_DPSDnaox	0x5E
-#define ROP_DPan	0x5F
-#define ROP_PDSxa	0x60
-#define ROP_DSPDSaoxxn	0x61
-#define ROP_DSPDoax	0x62
-#define ROP_SDPnox	0x63
-#define ROP_SDPSoax	0x64
-#define ROP_DSPnox	0x65
-#define ROP_DSx		0x66
-#define ROP_SDPSonox	0x67
-#define ROP_DSPDSonoxxn	0x68
-#define ROP_PDSxxn	0x69
-#define ROP_DPSax	0x6A
-#define ROP_PSDPSoaxxn	0x6B
-#define ROP_SDPax	0x6C
-#define ROP_PDSPDoaxxn	0x6D
-#define ROP_SDPSnoax	0x6E
-#define ROP_PDSxnan	0x6F
-#define ROP_PDSana	0x70
-#define ROP_SSDxPDxaxn	0x71
-#define ROP_SDPSxox	0x72
-#define ROP_SDPnoan	0x73
-#define ROP_DSPDxox	0x74
-#define ROP_DSPnoan	0x75
-#define ROP_SDPSnaox	0x76
-#define ROP_DSan	0x77
-#define ROP_PDSax	0x78
-#define ROP_DSPDSoaxxn	0x79
-#define ROP_DPSDnoax	0x7A
-#define ROP_SDPxnan	0x7B
-#define ROP_SPDSnoax	0x7C
-#define ROP_DPSxnan	0x7D
-#define ROP_SPxDSxo	0x7E
-#define ROP_DPSaan	0x7F
-#define ROP_DPSaa	0x80
-#define ROP_SPxDSxon	0x81
-#define ROP_DPSxna	0x82
-#define ROP_SPDSnoaxn	0x83
-#define ROP_SDPxna	0x84
-#define ROP_PDSPnoaxn	0x85
-#define ROP_DSPDSoaxx	0x86
-#define ROP_PDSaxn	0x87
-#define ROP_DSa		0x88
-#define ROP_SDPSnaoxn	0x89
-#define ROP_DSPnoa	0x8A
-#define ROP_DSPDxoxn	0x8B
-#define ROP_SDPnoa	0x8C
-#define ROP_SDPSxoxn	0x8D
-#define ROP_SSDxPDxax	0x8E
-#define ROP_PDSanan	0x8F
-#define ROP_PDSxna	0x90
-#define ROP_SDPSnoaxn	0x91
-#define ROP_DPSDPoaxx	0x92
-#define ROP_SPDaxn	0x93
-#define ROP_PSDPSoaxx	0x94
-#define ROP_DPSaxn	0x95
-#define ROP_DPSxx	0x96
-#define ROP_PSDPSonoxx	0x97
-#define ROP_SDPSonoxn	0x98
-#define ROP_DSxn	0x99
-#define ROP_DPSnax	0x9A
-#define ROP_SDPSoaxn	0x9B
-#define ROP_SPDnax	0x9C
-#define ROP_DSPDoaxn	0x9D
-#define ROP_DSPDSaoxx	0x9E
-#define ROP_PDSxan	0x9F
-#define ROP_DPa		0xA0
-#define ROP_PDSPnaoxn	0xA1
-#define ROP_DPSnoa	0xA2
-#define ROP_DPSDxoxn	0xA3
-#define ROP_PDSPonoxn	0xA4
-#define ROP_PDxn	0xA5
-#define ROP_DSPnax	0xA6
-#define ROP_PDSPoaxn	0xA7
-#define ROP_DPSoa	0xA8
-#define ROP_DPSoxn	0xA9
-#define ROP_D		0xAA
-#define ROP_DPSono	0xAB
-#define ROP_SPDSxax	0xAC
-#define ROP_DPSDaoxn	0xAD
-#define ROP_DSPnao	0xAE
-#define ROP_DPno	0xAF
-#define ROP_PDSnoa	0xB0
-#define ROP_PDSPxoxn	0xB1
-#define ROP_SSPxDSxox	0xB2
-#define ROP_SDPanan	0xB3
-#define ROP_PSDnax	0xB4
-#define ROP_DPSDoaxn	0xB5
-#define ROP_DPSDPaoxx	0xB6
-#define ROP_SDPxan	0xB7
-#define ROP_PSDPxax	0xB8
-#define ROP_DSPDaoxn	0xB9
-#define ROP_DPSnao	0xBA
-#define ROP_DSno	0xBB
-#define ROP_SPDSanax	0xBC
-#define ROP_SDxPDxan	0xBD
-#define ROP_DPSxo	0xBE
-#define ROP_DPSano	0xBF
-#define ROP_Psa		0xC0
-#define ROP_SPDSnaoxn	0xC1
-#define ROP_SPDSonoxn	0xC2
-#define ROP_PSxn	0xC3
-#define ROP_SPDnoa	0xC4
-#define ROP_SPDSxoxn	0xC5
-#define ROP_SDPnax	0xC6
-#define ROP_PSDPoaxn	0xC7
-#define ROP_SDPoa	0xC8
-#define ROP_SPDoxn	0xC9
-#define ROP_DPSDxax	0xCA
-#define ROP_SPDSaoxn	0xCB
-#define ROP_S		0xCC
-#define ROP_SDPono	0xCD
-#define ROP_SDPnao	0xCE
-#define ROP_SPno	0xCF
-#define ROP_PSDnoa	0xD0
-#define ROP_PSDPxoxn	0xD1
-#define ROP_PDSnax	0xD2
-#define ROP_SPDSoaxn	0xD3
-#define ROP_SSPxPDxax	0xD4
-#define ROP_DPSanan	0xD5
-#define ROP_PSDPSaoxx	0xD6
-#define ROP_DPSxan	0xD7
-#define ROP_PDSPxax	0xD8
-#define ROP_SDPSaoxn	0xD9
-#define ROP_DPSDanax	0xDA
-#define ROP_SPxDSxan	0xDB
-#define ROP_SPDnao	0xDC
-#define ROP_SDno	0xDD
-#define ROP_SDPxo	0xDE
-#define ROP_SDPano	0xDF
-#define ROP_PDSoa	0xE0
-#define ROP_PDSoxn	0xE1
-#define ROP_DSPDxax	0xE2
-#define ROP_PSDPaoxn	0xE3
-#define ROP_SDPSxax	0xE4
-#define ROP_PDSPaoxn	0xE5
-#define ROP_SDPSanax	0xE6
-#define ROP_SPxPDxan	0xE7
-#define ROP_SSPxDSxax	0xE8
-#define ROP_DSPDSanaxxn	0xE9
-#define ROP_DPSao	0xEA
-#define ROP_DPSxno	0xEB
-#define ROP_SDPao	0xEC
-#define ROP_SDPxno	0xED
-#define ROP_DSo		0xEE
-#define ROP_SDPnoo	0xEF
-#define ROP_P		0xF0
-#define ROP_PDSono	0xF1
-#define ROP_PDSnao	0xF2
-#define ROP_PSno	0xF3
-#define ROP_PSDnao	0xF4
-#define ROP_PDno	0xF5
-#define ROP_PDSxo	0xF6
-#define ROP_PDSano	0xF7
-#define ROP_PDSao	0xF8
-#define ROP_PDSxno	0xF9
-#define ROP_DPo		0xFA
-#define ROP_DPSnoo	0xFB
-#define ROP_PSo		0xFC
-#define ROP_PSDnoo	0xFD
-#define ROP_DPSoo	0xFE
-#define ROP_1		0xFF
-
-#define NO_SRC_ROP(rop) \
-   ((rop == GXnoop) || (rop == GXset) || (rop == GXclear) || (rop == GXinvert))
-
-extern _X_EXPORT int XAAHelpSolidROP(ScrnInfoPtr pScrn, int *fg, int pm,
-                                     int *rop);
-extern _X_EXPORT int XAAHelpPatternROP(ScrnInfoPtr pScrn, int *fg, int *bg,
-                                       int pm, int *rop);
-
-/* XXX These four should be static, but it breaks the 6.7.0 ABI. */
-extern _X_EXPORT int XAACopyROP[16];
-extern _X_EXPORT int XAACopyROP_PM[16];
-extern _X_EXPORT int XAAPatternROP[16];
-extern _X_EXPORT int XAAPatternROP_PM[16];
-
-extern _X_EXPORT int XAAGetCopyROP(int i);
-extern _X_EXPORT int XAAGetCopyROP_PM(int i);
-extern _X_EXPORT int XAAGetPatternROP(int i);
-extern _X_EXPORT int XAAGetPatternROP_PM(int i);
-
-#endif                          /* _XAAROP_H */
diff --git a/hw/xfree86/xaa/xaawrap.h b/hw/xfree86/xaa/xaawrap.h
deleted file mode 100644
index 2d2d788..0000000
--- a/hw/xfree86/xaa/xaawrap.h
+++ /dev/null
@@ -1,75 +0,0 @@
-
-#define XAA_SCREEN_PROLOGUE(pScreen, field)\
-  ((pScreen)->field = \
-   ((XAAScreenPtr)dixLookupPrivate(&(pScreen)->devPrivates, XAAGetScreenKey()))->field)
-
-#define XAA_SCREEN_EPILOGUE(pScreen, field, wrapper)\
-    ((pScreen)->field = wrapper)
-
-#define XAA_GC_FUNC_PROLOGUE(pGC)\
-    XAAGCPtr pGCPriv = (XAAGCPtr)dixLookupPrivate(&(pGC)->devPrivates, XAAGetGCKey()); \
-    (pGC)->funcs = pGCPriv->wrapFuncs;\
-    if(pGCPriv->flags)\
-	(pGC)->ops = pGCPriv->wrapOps
-
-#define XAA_GC_FUNC_EPILOGUE(pGC)\
-    pGCPriv->wrapFuncs = (pGC)->funcs;\
-    (pGC)->funcs = &XAAGCFuncs;\
-    if(pGCPriv->flags) {\
-	pGCPriv->wrapOps = (pGC)->ops;\
-	(pGC)->ops = (pGCPriv->flags & OPS_ARE_ACCEL) ? pGCPriv->XAAOps :\
-				&XAAPixmapOps;\
-    }
-
-#define XAA_GC_OP_PROLOGUE(pGC)\
-    XAAGCPtr pGCPriv = (XAAGCPtr)dixLookupPrivate(&(pGC)->devPrivates, XAAGetGCKey()); \
-    GCFuncs *oldFuncs = pGC->funcs;\
-    pGC->funcs = pGCPriv->wrapFuncs;\
-    pGC->ops = pGCPriv->wrapOps
-
-#define XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC)\
-    XAAGCPtr pGCPriv = (XAAGCPtr)dixLookupPrivate(&(pGC)->devPrivates, XAAGetGCKey()); \
-    GCFuncs *oldFuncs = pGC->funcs;\
-    if(!RegionNumRects(pGC->pCompositeClip)) return; \
-    pGC->funcs = pGCPriv->wrapFuncs;\
-    pGC->ops = pGCPriv->wrapOps
-
-#define XAA_GC_OP_EPILOGUE(pGC)\
-    pGCPriv->wrapOps = pGC->ops;\
-    pGC->funcs = oldFuncs;\
-    pGC->ops   = pGCPriv->XAAOps
-
-#define XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw)\
-    XAAGCPtr pGCPriv = (XAAGCPtr)dixLookupPrivate(&(pGC)->devPrivates, XAAGetGCKey()); \
-    XAAPixmapPtr pixPriv = XAA_GET_PIXMAP_PRIVATE((PixmapPtr)(pDraw));\
-    GCFuncs *oldFuncs = pGC->funcs;\
-    pGC->funcs = pGCPriv->wrapFuncs;\
-    pGC->ops = pGCPriv->wrapOps; \
-    SYNC_CHECK(pGC)
-
-#define XAA_PIXMAP_OP_EPILOGUE(pGC)\
-    pGCPriv->wrapOps = pGC->ops;\
-    pGC->funcs = oldFuncs;\
-    pGC->ops   = &XAAPixmapOps;\
-    pixPriv->flags |= DIRTY
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#define XAA_RENDER_PROLOGUE(pScreen,field)\
-    (GetPictureScreen(pScreen)->field = \
-     ((XAAScreenPtr)dixLookupPrivate(&(pScreen)->devPrivates, XAAGetScreenKey()))->field)
-
-#define XAA_RENDER_EPILOGUE(pScreen, field, wrapper)\
-    (GetPictureScreen(pScreen)->field = wrapper)
-
-/* This also works fine for drawables */
-
-#define SYNC_CHECK(pGC) {\
-     XAAInfoRecPtr infoRec =\
-((XAAScreenPtr)dixLookupPrivate(&(pGC)->pScreen->devPrivates, XAAGetScreenKey()))->AccelInfoRec;	\
-    if(infoRec->NeedToSync) {\
-	(*infoRec->Sync)(infoRec->pScrn);\
-	infoRec->NeedToSync = FALSE;\
-    }}
commit 66362441867f68dac97de33744bd0ca478fb65d3
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:03:29 2012 +0100

    Remove last renmants of XFree86LOADER define
    
    Not to be confused with XFree86Loader or XorgLoader.  Which are both now
    dead too.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Keith Packard <keithp at keithp.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/configure.ac b/configure.ac
index b225632..209b237 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1817,7 +1817,6 @@ if test "x$XORG" = xyes; then
 	AC_DEFINE(XORG_SERVER, 1, [Building Xorg server])
 	AC_DEFINE(XORGSERVER, 1, [Building Xorg server])
 	AC_DEFINE(XFree86Server, 1, [Building XFree86 server])
-	AC_DEFINE(XFree86LOADER, 1, [Building loadable XFree86 server])
 	AC_DEFINE_UNQUOTED(XORG_VERSION_CURRENT, [$VENDOR_RELEASE], [Current Xorg version])
 	AC_DEFINE(NEED_XF86_TYPES, 1, [Need XFree86 typedefs])
 	AC_DEFINE(NEED_XF86_PROTOTYPES, 1, [Need XFree86 helper functions])
diff --git a/hw/xquartz/xpr/dri.c b/hw/xquartz/xpr/dri.c
index 663d61d..03af163 100644
--- a/hw/xquartz/xpr/dri.c
+++ b/hw/xquartz/xpr/dri.c
@@ -38,13 +38,8 @@
 #include <dix-config.h>
 #endif
 
-#ifdef XFree86LOADER
-#include "xf86.h"
-#include "xf86_ansic.h"
-#else
 #include <sys/time.h>
 #include <unistd.h>
-#endif
 
 #include <X11/X.h>
 #include <X11/Xproto.h>
diff --git a/include/xorg-server.h.in b/include/xorg-server.h.in
index c0761f7..81935be 100644
--- a/include/xorg-server.h.in
+++ b/include/xorg-server.h.in
@@ -197,7 +197,7 @@
 #undef WSCONS_SUPPORT
 
 /* Loadable XFree86 server awesomeness */
-#undef XFree86LOADER
+#define XFree86LOADER
 
 /* Use libpciaccess */
 #undef XSERVER_LIBPCIACCESS
commit a15dac550918c55b08bbe0007f068cc5096ebaa1
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:03:28 2012 +0100

    Remove unused setupFunc from extensions
    
    setupFunc was used as an early callback for half-modular extensions such
    as Xv, XvMC and DGA to set up hooks between the core server and the
    modular component.  Now we've rid ourselves of that, we can also bin
    setupFunc.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Jamey Sharp <jamey at minilop.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/common/xf86Extensions.c b/hw/xfree86/common/xf86Extensions.c
index 8cbeedf..d5309d5 100644
--- a/hw/xfree86/common/xf86Extensions.c
+++ b/hw/xfree86/common/xf86Extensions.c
@@ -58,32 +58,28 @@ static ExtensionModule extensionModules[] = {
     {
 	XFree86VidModeExtensionInit,
 	XF86VIDMODENAME,
-	&noXFree86VidModeExtension,
-	NULL
+	&noXFree86VidModeExtension
     },
 #endif
 #ifdef XFreeXDGA
     {
 	XFree86DGAExtensionInit,
 	XF86DGANAME,
-	&noXFree86DGAExtension,
-	NULL
+	&noXFree86DGAExtension
     },
 #endif
 #ifdef XF86DRI
     {
         XFree86DRIExtensionInit,
         "XFree86-DRI",
-        &noXFree86DRIExtension,
-        NULL
+        &noXFree86DRIExtension
     },
 #endif
 #ifdef DRI2
     {
         DRI2ExtensionInit,
         DRI2_NAME,
-        &noDRI2Extension,
-        NULL
+        &noDRI2Extension
     }
 #endif
 };
diff --git a/hw/xfree86/dixmods/glxmodule.c b/hw/xfree86/dixmods/glxmodule.c
index 2f0a3dd..5a9e845 100644
--- a/hw/xfree86/dixmods/glxmodule.c
+++ b/hw/xfree86/dixmods/glxmodule.c
@@ -49,8 +49,7 @@ static MODULESETUPPROTO(glxSetup);
 static ExtensionModule GLXExt = {
     GlxExtensionInit,
     "GLX",
-    &noGlxExtension,
-    NULL
+    &noGlxExtension
 };
 
 static XF86ModuleVersionInfo VersRec = {
diff --git a/hw/xfree86/doc/ddxDesign.xml b/hw/xfree86/doc/ddxDesign.xml
index 118b58f..ce81a9d 100644
--- a/hw/xfree86/doc/ddxDesign.xml
+++ b/hw/xfree86/doc/ddxDesign.xml
@@ -5973,7 +5973,6 @@ typedef struct {
     InitExtension       initFunc;
     char *              name;
     Bool                *disablePtr;
-    InitExtension       setupFunc;
 } ExtensionModule;
 	      </programlisting>
 	    </para>
diff --git a/include/extension.h b/include/extension.h
index cc1dfa1..0f55d90 100644
--- a/include/extension.h
+++ b/include/extension.h
@@ -84,7 +84,6 @@ typedef struct {
     InitExtension initFunc;
     const char *name;
     Bool *disablePtr;
-    InitExtension setupFunc;
 } ExtensionModule;
 
 extern _X_EXPORT unsigned short StandardMinorOpcode(ClientPtr /*client */ );
diff --git a/mi/miinitext.c b/mi/miinitext.c
index a84d486..86fc31c 100644
--- a/mi/miinitext.c
+++ b/mi/miinitext.c
@@ -235,65 +235,63 @@ EnableDisableExtensionError(const char *name, Bool enable)
 
 /* List of built-in (statically linked) extensions */
 static ExtensionModule staticExtensions[] = {
-    {GEExtensionInit, "Generic Event Extension", &noGEExtension, NULL},
-    {ShapeExtensionInit, "SHAPE", NULL, NULL},
+    {GEExtensionInit, "Generic Event Extension", &noGEExtension},
+    {ShapeExtensionInit, "SHAPE", NULL},
 #ifdef MITSHM
-    {ShmExtensionInit, SHMNAME, &noMITShmExtension, NULL},
+    {ShmExtensionInit, SHMNAME, &noMITShmExtension},
 #endif
-    {XInputExtensionInit, "XInputExtension", NULL, NULL},
+    {XInputExtensionInit, "XInputExtension", NULL},
 #ifdef XTEST
-    {XTestExtensionInit, XTestExtensionName, &noTestExtensions, NULL},
+    {XTestExtensionInit, XTestExtensionName, &noTestExtensions},
 #endif
-    {BigReqExtensionInit, "BIG-REQUESTS", NULL, NULL},
-    {SyncExtensionInit, "SYNC", NULL, NULL},
-    {XkbExtensionInit, XkbName, NULL, NULL},
-    {XCMiscExtensionInit, "XC-MISC", NULL, NULL},
+    {BigReqExtensionInit, "BIG-REQUESTS", NULL},
+    {SyncExtensionInit, "SYNC", NULL},
+    {XkbExtensionInit, XkbName, NULL},
+    {XCMiscExtensionInit, "XC-MISC", NULL},
 #ifdef XCSECURITY
-    {SecurityExtensionInit, SECURITY_EXTENSION_NAME, &noSecurityExtension, NULL},
+    {SecurityExtensionInit, SECURITY_EXTENSION_NAME, &noSecurityExtension},
 #endif
 #ifdef PANORAMIX
-    {PanoramiXExtensionInit, PANORAMIX_PROTOCOL_NAME, &noPanoramiXExtension,
-     NULL},
+    {PanoramiXExtensionInit, PANORAMIX_PROTOCOL_NAME, &noPanoramiXExtension},
 #endif
 #ifdef XFIXES
     /* must be before Render to layer DisplayCursor correctly */
-    {XFixesExtensionInit, "XFIXES", &noXFixesExtension, NULL},
+    {XFixesExtensionInit, "XFIXES", &noXFixesExtension},
 #endif
 #ifdef XF86BIGFONT
-    {XFree86BigfontExtensionInit, XF86BIGFONTNAME, &noXFree86BigfontExtension,
-     NULL},
+    {XFree86BigfontExtensionInit, XF86BIGFONTNAME, &noXFree86BigfontExtension},
 #endif
-    {RenderExtensionInit, "RENDER", &noRenderExtension, NULL},
+    {RenderExtensionInit, "RENDER", &noRenderExtension},
 #ifdef RANDR
-    {RRExtensionInit, "RANDR", &noRRExtension, NULL},
+    {RRExtensionInit, "RANDR", &noRRExtension},
 #endif
 #ifdef COMPOSITE
-    {CompositeExtensionInit, "COMPOSITE", &noCompositeExtension, NULL},
+    {CompositeExtensionInit, "COMPOSITE", &noCompositeExtension},
 #endif
 #ifdef DAMAGE
-    {DamageExtensionInit, "DAMAGE", &noDamageExtension, NULL},
+    {DamageExtensionInit, "DAMAGE", &noDamageExtension},
 #endif
 #ifdef SCREENSAVER
-    {ScreenSaverExtensionInit, ScreenSaverName, &noScreenSaverExtension, NULL},
+    {ScreenSaverExtensionInit, ScreenSaverName, &noScreenSaverExtension},
 #endif
 #ifdef DBE
-    {DbeExtensionInit, "DOUBLE-BUFFER", &noDbeExtension, NULL},
+    {DbeExtensionInit, "DOUBLE-BUFFER", &noDbeExtension},
 #endif
 #ifdef XRECORD
-    {RecordExtensionInit, "RECORD", &noTestExtensions, NULL},
+    {RecordExtensionInit, "RECORD", &noTestExtensions},
 #endif
 #ifdef DPMSExtension
-    {DPMSExtensionInit, DPMSExtensionName, &noDPMSExtension, NULL},
+    {DPMSExtensionInit, DPMSExtensionName, &noDPMSExtension},
 #endif
 #ifdef RES
-    {ResExtensionInit, XRES_NAME, &noResExtension, NULL},
+    {ResExtensionInit, XRES_NAME, &noResExtension},
 #endif
 #ifdef XV
-    {XvExtensionInit, XvName, &noXvExtension, NULL},
-    {XvMCExtensionInit, XvMCName, &noXvExtension, NULL},
+    {XvExtensionInit, XvName, &noXvExtension},
+    {XvMCExtensionInit, XvMCName, &noXvExtension},
 #endif
 #ifdef XSELINUX
-    {SELinuxExtensionInit, SELINUX_EXTENSION_NAME, &noSELinuxExtension, NULL},
+    {SELinuxExtensionInit, SELINUX_EXTENSION_NAME, &noSELinuxExtension},
 #endif
 };
 
@@ -379,8 +377,4 @@ LoadExtension(ExtensionModule * e, Bool builtin)
     newext->name = e->name;
     newext->initFunc = e->initFunc;
     newext->disablePtr = e->disablePtr;
-    newext->setupFunc = e->setupFunc;
-
-    if (e->setupFunc != NULL)
-        e->setupFunc();
 }
commit 710318e803c6d5c6b8ae170d38c8253f5d780472
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:03:27 2012 +0100

    Replace NO_HW_ONLY_EXTS with Xorg DDX test
    
    Turns out the only thing we use NO_HW_ONLY_EXTS for is to check whether
    or not we're building inside the Xorg DDX.  Replace it with an
    XorgLoader test instead, and remove all its users.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Keith Packard <keithp at keithp.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/vfb/Makefile.am b/hw/vfb/Makefile.am
index ed46dbb..9f4992c 100644
--- a/hw/vfb/Makefile.am
+++ b/hw/vfb/Makefile.am
@@ -4,8 +4,6 @@ bin_PROGRAMS = Xvfb
 noinst_LIBRARIES = libfbcmap.a
 
 AM_CFLAGS = -DHAVE_DIX_CONFIG_H \
-            -DNO_HW_ONLY_EXTS \
-            -DNO_MODULE_EXTS \
             $(XVFBMODULES_CFLAGS) \
 	    $(DIX_CFLAGS)
 
diff --git a/hw/xnest/Makefile.am b/hw/xnest/Makefile.am
index c395b4d..3c099cd 100644
--- a/hw/xnest/Makefile.am
+++ b/hw/xnest/Makefile.am
@@ -4,7 +4,6 @@ bin_PROGRAMS = Xnest
 noinst_LIBRARIES = libfbcmap.a
 
 AM_CFLAGS = -DHAVE_XNEST_CONFIG_H \
-            -DNO_HW_ONLY_EXTS \
             $(DIX_CFLAGS) \
             $(XNESTMODULES_CFLAGS)
 
diff --git a/mi/miinitext.c b/mi/miinitext.c
index a143831..a84d486 100644
--- a/mi/miinitext.c
+++ b/mi/miinitext.c
@@ -157,7 +157,7 @@ static ExtensionToggle ExtensionToggleList[] = {
 #ifdef XF86BIGFONT
     {"XFree86-Bigfont", &noXFree86BigfontExtension},
 #endif
-#ifndef NO_HW_ONLY_EXTS
+#ifdef XorgLoader
 #ifdef XFreeXDGA
     {"XFree86-DGA", &noXFree86DGAExtension},
 #endif
commit 5f5bbbe543f65c48ecbb5cce80116a86ca3fbe86
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:03:26 2012 +0100

    Unify miinitext.c
    
    Rather than having a non-Xorg and an Xorg-specific path which basically
    just duplicated each other for no reason, we could ... just have one.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/dixmods/Makefile.am b/hw/xfree86/dixmods/Makefile.am
index 1ad122a..f161db6 100644
--- a/hw/xfree86/dixmods/Makefile.am
+++ b/hw/xfree86/dixmods/Makefile.am
@@ -45,6 +45,6 @@ endif
 libshadow_la_SOURCES = shmodule.c
 
 libdixmods_la_SOURCES = $(top_srcdir)/mi/miinitext.c
-libdixmods_la_CFLAGS = -DXFree86LOADER $(AM_CFLAGS)
+libdixmods_la_CFLAGS = $(AM_CFLAGS)
 
 libxorgxkb_la_SOURCES = xkbVT.c xkbPrivate.c xkbKillSrv.c
diff --git a/mi/miinitext.c b/mi/miinitext.c
index d76d796..a143831 100644
--- a/mi/miinitext.c
+++ b/mi/miinitext.c
@@ -77,6 +77,7 @@ SOFTWARE.
 
 #ifdef HAVE_XORG_CONFIG_H
 #include <xorg-config.h>
+#include "xf86Extensions.h"
 #endif
 
 #ifdef HAVE_DMX_CONFIG_H
@@ -111,11 +112,6 @@ SOFTWARE.
 #include "micmap.h"
 #include "globals.h"
 
-#ifdef XFree86LOADER
-#include "loaderProcs.h"
-#include "xf86Extensions.h"
-#endif
-
 /* The following is only a small first step towards run-time
  * configurable extensions.
  */
@@ -237,120 +233,6 @@ EnableDisableExtensionError(const char *name, Bool enable)
     }
 }
 
-#ifndef XFree86LOADER
-
- /*ARGSUSED*/ void
-InitExtensions(int argc, char *argv[])
-{
-    if (!noGEExtension)
-        GEExtensionInit();
-
-    ShapeExtensionInit();
-
-#ifdef MITSHM
-    if (!noMITShmExtension)
-        ShmExtensionInit();
-#endif
-
-    XInputExtensionInit();
-
-#ifdef XTEST
-    if (!noTestExtensions)
-        XTestExtensionInit();
-#endif
-
-    BigReqExtensionInit();
-    SyncExtensionInit();
-    XkbExtensionInit();
-    XCMiscExtensionInit();
-
-#ifdef XCSECURITY
-    if (!noSecurityExtension)
-        SecurityExtensionInit();
-#endif
-
-#ifdef PANORAMIX
-    if (!noPanoramiXExtension)
-        PanoramiXExtensionInit();
-#endif
-
-#ifdef XFIXES
-    /* must be before Render to layer DisplayCursor correctly */
-    if (!noXFixesExtension)
-        XFixesExtensionInit();
-#endif
-
-#ifdef XF86BIGFONT
-    if (!noXFree86BigfontExtension)
-        XFree86BigfontExtensionInit();
-#endif
-
-    if (!noRenderExtension)
-        RenderExtensionInit();
-
-#ifdef RANDR
-    if (!noRRExtension)
-        RRExtensionInit();
-#endif
-
-#ifdef COMPOSITE
-    if (!noCompositeExtension)
-        CompositeExtensionInit();
-#endif
-
-#ifdef DAMAGE
-    if (!noDamageExtension)
-        DamageExtensionInit();
-#endif
-
-#ifdef XSELINUX
-    if (!noSELinuxExtension)
-        SELinuxExtensionInit();
-#endif
-
-#if defined(SCREENSAVER)
-    if (!noScreenSaverExtension)
-        ScreenSaverExtensionInit();
-#endif
-
-#if !defined(NO_HW_ONLY_EXTS) && defined(DPMSExtension)
-    if (!noDPMSExtension)
-        DPMSExtensionInit();
-#endif
-
-#ifdef XV
-    if (!noXvExtension) {
-        XvExtensionInit();
-        XvMCExtensionInit();
-    }
-#endif
-
-#ifdef RES
-    if (!noResExtension)
-        ResExtensionInit();
-#endif
-
-#ifdef XRECORD
-    if (!noTestExtensions)
-        RecordExtensionInit();
-#endif
-
-#ifdef DBE
-    if (!noDbeExtension)
-        DbeExtensionInit();
-#endif
-
-#ifdef DMXEXT
-    DMXExtensionInit();         /* server-specific extension, cannot be disabled */
-#endif
-
-#ifdef GLXEXT
-    if (!noGlxExtension)
-        GlxExtensionInit();
-#endif
-}
-
-#else                           /* XFree86LOADER */
 /* List of built-in (statically linked) extensions */
 static ExtensionModule staticExtensions[] = {
     {GEExtensionInit, "Generic Event Extension", &noGEExtension, NULL},
@@ -502,5 +384,3 @@ LoadExtension(ExtensionModule * e, Bool builtin)
     if (e->setupFunc != NULL)
         e->setupFunc();
 }
-
-#endif                          /* XFree86LOADER */
commit 147967f67d4976a87ed07fe11b59b174907f5d43
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:03:25 2012 +0100

    Remove Xorg-specific extensions from non-Xorg miinitext
    
    miinitext.c had a completely separate codepath for non-Xorg servers,
    which included tests for Xorg-specific extensions such as
    XFree86-VidMode, which were external even to the Xorg DDX.  So we can
    just remove them, and the associated #undefs.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/mi/miinitext.c b/mi/miinitext.c
index 69ed97b..d76d796 100644
--- a/mi/miinitext.c
+++ b/mi/miinitext.c
@@ -83,9 +83,6 @@ SOFTWARE.
 #include <dmx-config.h>
 #undef XV
 #undef DBE
-#undef XF86VIDMODE
-#undef XFreeXDGA
-#undef XF86DRI
 #undef SCREENSAVER
 #undef RANDR
 #undef XFIXES
@@ -102,17 +99,10 @@ SOFTWARE.
 
 #ifdef HAVE_KDRIVE_CONFIG_H
 #include <kdrive-config.h>
-/* there must be a better way... */
-#undef XFreeXDGA
-#undef XF86DRI
-#undef XF86VIDMODE
 #endif
 
 #ifdef HAVE_XGL_CONFIG_H
 #include <xgl-config.h>
-#undef XFreeXDGA
-#undef XF86DRI
-#undef XF86VIDMODE
 #endif
 
 #include "misc.h"
@@ -323,20 +313,10 @@ InitExtensions(int argc, char *argv[])
         ScreenSaverExtensionInit();
 #endif
 
-#if !defined(NO_HW_ONLY_EXTS)
-#if defined(XF86VIDMODE)
-    if (!noXFree86VidModeExtension)
-        XFree86VidModeExtensionInit();
-#endif
-#if defined(XFreeXDGA)
-    if (!noXFree86DGAExtension)
-        XFree86DGAExtensionInit();
-#endif
-#ifdef DPMSExtension
+#if !defined(NO_HW_ONLY_EXTS) && defined(DPMSExtension)
     if (!noDPMSExtension)
         DPMSExtensionInit();
 #endif
-#endif
 
 #ifdef XV
     if (!noXvExtension) {
@@ -360,11 +340,6 @@ InitExtensions(int argc, char *argv[])
         DbeExtensionInit();
 #endif
 
-#if !defined(NO_HW_ONLY_EXTS) && defined(XF86DRI)
-    if (!noXFree86DRIExtension)
-        XFree86DRIExtensionInit();
-#endif
-
 #ifdef DMXEXT
     DMXExtensionInit();         /* server-specific extension, cannot be disabled */
 #endif
commit 27a624bee66d2797eacf90317054207dcf248028
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:03:24 2012 +0100

    Quartz: Move PseudoramiX initialisation to DDX
    
    As PseudoramiX is a DDX-specific extension, move its loading and
    initialisation to hw/xquartz.  This creates a QuartzExtensionInit()
    similar in spirit to xf86ExtensionInit.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Acked-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Jeremy Huddleston <jeremyhu at apple.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xquartz/quartz.c b/hw/xquartz/quartz.c
index 62a2852..3de223b 100644
--- a/hw/xquartz/quartz.c
+++ b/hw/xquartz/quartz.c
@@ -42,6 +42,7 @@
 #include "darwin.h"
 #include "darwinEvents.h"
 #include "pseudoramiX.h"
+#include "extension.h"
 #define _APPLEWM_SERVER_
 #include "applewmExt.h"
 
@@ -143,6 +144,22 @@ QuartzSetupScreen(int index,
     return TRUE;
 }
 
+static const ExtensionModule quartzExtensions[] = {
+    { PseudoramiXExtensionInit, "PseudoramiX", &noPseudoramiXExtension, NULL },
+};
+
+/*
+ * QuartzExtensionInit
+ * Initialises XQuartz-specific extensions.
+ */
+void QuartzExtensionInit(void)
+{
+    int i;
+
+    for (i = 0; i < ARRAY_SIZE(quartzExtensions); i++)
+        LoadExtension(&quartzExtensions[i], TRUE);
+}
+
 /*
  * QuartzInitOutput
  *  Quartz display initialization.
@@ -182,6 +199,8 @@ QuartzInitOutput(int argc,
 
     // Do display mode specific initialization
     quartzProcs->DisplayInit();
+
+    QuartzExtensionInit();
 }
 
 /*
diff --git a/mi/miinitext.c b/mi/miinitext.c
index e5acec4..69ed97b 100644
--- a/mi/miinitext.c
+++ b/mi/miinitext.c
@@ -284,11 +284,6 @@ InitExtensions(int argc, char *argv[])
         PanoramiXExtensionInit();
 #endif
 
-#ifdef INXQUARTZ
-    if (!noPseudoramiXExtension)
-        PseudoramiXExtensionInit();
-#endif
-
 #ifdef XFIXES
     /* must be before Render to layer DisplayCursor correctly */
     if (!noXFixesExtension)
commit 79d14d9fc3d92ba866864d3a5910a8c6c8e9b64f
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:03:23 2012 +0100

    Move the remnants of loadext.c to miinitext.c
    
    There was nothing XFree86-specific or loader-specific about this, aside
    from using xf86MsgVerb instead of ErrorF.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Jamey Sharp <jamey at minilop.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/common/xf86Module.h b/hw/xfree86/common/xf86Module.h
index 70aeb6d..d93405e 100644
--- a/hw/xfree86/common/xf86Module.h
+++ b/hw/xfree86/common/xf86Module.h
@@ -169,11 +169,6 @@ typedef struct {
 
 #define INITARGS void
 
-/* This really shouldn't be here, but gets moved in about three commits'
- * time.  So odds are the only people who ever see this comment are doing
- * patch review, in which case, thanks! */
-extern _X_EXPORT void AddStaticExtensions(void);
-
 /* Prototypes for Loader functions that are exported to modules */
 extern _X_EXPORT pointer LoadSubModule(pointer, const char *, const char **,
                                        const char **, pointer,
@@ -184,7 +179,6 @@ extern _X_EXPORT pointer LoaderSymbol(const char *);
 extern _X_EXPORT char **LoaderListDirs(const char **, const char **);
 extern _X_EXPORT void LoaderFreeDirList(char **);
 extern _X_EXPORT void LoaderErrorMsg(const char *, const char *, int, int);
-extern _X_EXPORT void LoadExtension(ExtensionModule *, Bool);
 extern _X_EXPORT void LoaderGetOS(const char **name, int *major, int *minor,
                                   int *teeny);
 extern _X_EXPORT Bool LoaderShouldIgnoreABI(void);
diff --git a/hw/xfree86/loader/Makefile.am b/hw/xfree86/loader/Makefile.am
index d6ddbec..bd47a63 100644
--- a/hw/xfree86/loader/Makefile.am
+++ b/hw/xfree86/loader/Makefile.am
@@ -14,7 +14,6 @@ EXTRA_DIST = \
 libloader_la_SOURCES = \
 	loader.c \
 	loaderProcs.h \
-	loadext.c \
         loadmod.c \
 	os.c
 
diff --git a/hw/xfree86/loader/loadext.c b/hw/xfree86/loader/loadext.c
deleted file mode 100644
index 62355bb..0000000
--- a/hw/xfree86/loader/loadext.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (c) 2000 by The XFree86 Project, 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 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 COPYRIGHT HOLDER(S) OR AUTHOR(S) 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.
- *
- * Except as contained in this notice, the name of the copyright holder(s)
- * and author(s) shall not be used in advertising or otherwise to promote
- * the sale, use or other dealings in this Software without prior written
- * authorization from the copyright holder(s) and author(s).
- */
-
-/* Maybe this file belongs elsewhere? */
-
-#define LOADERDECLARATIONS
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include "loaderProcs.h"
-#include "misc.h"
-#include "xf86.h"
-
-/*
- * This should be static, but miinitext wants it.  FIXME: make extension
- * initialization not completely terrible.
- */
-ExtensionModule *ExtensionModuleList = NULL;
-static int numExtensionModules = 0;
-
-static ExtensionModule *
-NewExtensionModule(void)
-{
-    ExtensionModule *save = ExtensionModuleList;
-    int n;
-
-    /* Make sure built-in extensions get added to the list before those
-     * in modules. */
-    AddStaticExtensions();
-
-    /* Sanity check */
-    if (!ExtensionModuleList)
-        numExtensionModules = 0;
-
-    n = numExtensionModules + 1;
-    ExtensionModuleList = realloc(ExtensionModuleList,
-                                  (n + 1) * sizeof(ExtensionModule));
-    if (ExtensionModuleList == NULL) {
-        ExtensionModuleList = save;
-        return NULL;
-    }
-    else {
-        numExtensionModules++;
-        ExtensionModuleList[numExtensionModules].name = NULL;
-        return ExtensionModuleList + (numExtensionModules - 1);
-    }
-}
-
-void
-LoadExtension(ExtensionModule * e, Bool builtin)
-{
-    ExtensionModule *newext;
-
-    if (e == NULL || e->name == NULL)
-        return;
-
-    if (!(newext = NewExtensionModule()))
-        return;
-
-    if (builtin)
-        xf86MsgVerb(X_INFO, 2, "Initializing built-in extension %s\n", e->name);
-    else
-        xf86MsgVerb(X_INFO, 2, "Loading extension %s\n", e->name);
-
-    newext->name = e->name;
-    newext->initFunc = e->initFunc;
-    newext->disablePtr = e->disablePtr;
-    newext->setupFunc = e->setupFunc;
-
-    if (e->setupFunc != NULL)
-        e->setupFunc();
-}
diff --git a/include/extension.h b/include/extension.h
index dbe1afc..cc1dfa1 100644
--- a/include/extension.h
+++ b/include/extension.h
@@ -87,8 +87,6 @@ typedef struct {
     InitExtension setupFunc;
 } ExtensionModule;
 
-extern ExtensionModule *ExtensionModuleList;
-
 extern _X_EXPORT unsigned short StandardMinorOpcode(ClientPtr /*client */ );
 
 extern _X_EXPORT Bool EnableDisableExtension(const char *name, Bool enable);
@@ -100,4 +98,6 @@ extern _X_EXPORT void InitExtensions(int argc, char **argv);
 
 extern _X_EXPORT void CloseDownExtensions(void);
 
+extern _X_EXPORT void LoadExtension(ExtensionModule *ext, Bool external);
+
 #endif                          /* EXTENSION_H */
diff --git a/mi/miinitext.c b/mi/miinitext.c
index 500e882..e5acec4 100644
--- a/mi/miinitext.c
+++ b/mi/miinitext.c
@@ -44,6 +44,33 @@ SOFTWARE.
 
 ******************************************************************/
 
+/*
+ * Copyright (c) 2000 by The XFree86 Project, 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 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 COPYRIGHT HOLDER(S) OR AUTHOR(S) 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.
+ *
+ * Except as contained in this notice, the name of the copyright holder(s)
+ * and author(s) shall not be used in advertising or otherwise to promote
+ * the sale, use or other dealings in this Software without prior written
+ * authorization from the copyright holder(s) and author(s).
+ */
+
 #ifdef HAVE_DIX_CONFIG_H
 #include <dix-config.h>
 #endif
@@ -418,7 +445,10 @@ static ExtensionModule staticExtensions[] = {
 #endif
 };
 
-void
+static ExtensionModule *ExtensionModuleList = NULL;
+static int numExtensionModules = 0;
+
+static void
 AddStaticExtensions(void)
 {
     static Bool listInitialised = FALSE;
@@ -450,4 +480,57 @@ InitExtensions(int argc, char *argv[])
     }
 }
 
+static ExtensionModule *
+NewExtensionModule(void)
+{
+    ExtensionModule *save = ExtensionModuleList;
+    int n;
+
+    /* Make sure built-in extensions get added to the list before those
+     * in modules. */
+    AddStaticExtensions();
+
+    /* Sanity check */
+    if (!ExtensionModuleList)
+        numExtensionModules = 0;
+
+    n = numExtensionModules + 1;
+    ExtensionModuleList = realloc(ExtensionModuleList,
+                                  (n + 1) * sizeof(ExtensionModule));
+    if (ExtensionModuleList == NULL) {
+        ExtensionModuleList = save;
+        return NULL;
+    }
+    else {
+        numExtensionModules++;
+        ExtensionModuleList[numExtensionModules].name = NULL;
+        return ExtensionModuleList + (numExtensionModules - 1);
+    }
+}
+
+void
+LoadExtension(ExtensionModule * e, Bool builtin)
+{
+    ExtensionModule *newext;
+
+    if (e == NULL || e->name == NULL)
+        return;
+
+    if (!(newext = NewExtensionModule()))
+        return;
+
+    if (builtin)
+        ErrorF("Initializing built-in extension %s\n", e->name);
+    else
+        ErrorF("Loading extension %s\n", e->name);
+
+    newext->name = e->name;
+    newext->initFunc = e->initFunc;
+    newext->disablePtr = e->disablePtr;
+    newext->setupFunc = e->setupFunc;
+
+    if (e->setupFunc != NULL)
+        e->setupFunc();
+}
+
 #endif                          /* XFree86LOADER */
commit a089af3477dd01a831b89c06f982679c60e42975
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:03:22 2012 +0100

    Loader: Move ExtensionModule types to DIX
    
    In preparation for gutting loadext.c, move the ExtensionModule struct to
    the DIX, and unexport ExtensionModuleList (why, why, why, why was this
    ever exported in the first place, tbqh).
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Jamey Sharp <jamey at minilop.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/common/xf86Module.h b/hw/xfree86/common/xf86Module.h
index d528a5d..70aeb6d 100644
--- a/hw/xfree86/common/xf86Module.h
+++ b/hw/xfree86/common/xf86Module.h
@@ -42,6 +42,7 @@
 #define _XF86MODULE_H
 
 #include "misc.h"
+#include "extension.h"
 #ifndef NULL
 #define NULL ((void *)0)
 #endif
@@ -168,17 +169,6 @@ typedef struct {
 
 #define INITARGS void
 
-typedef void (*InitExtension) (void);
-
-typedef struct {
-    InitExtension initFunc;
-    const char *name;
-    Bool *disablePtr;
-    InitExtension setupFunc;
-} ExtensionModule;
-
-extern _X_EXPORT ExtensionModule *ExtensionModuleList;
-
 /* This really shouldn't be here, but gets moved in about three commits'
  * time.  So odds are the only people who ever see this comment are doing
  * patch review, in which case, thanks! */
diff --git a/include/extension.h b/include/extension.h
index f0560d7..dbe1afc 100644
--- a/include/extension.h
+++ b/include/extension.h
@@ -44,6 +44,33 @@ SOFTWARE.
 
 ******************************************************************/
 
+/*
+ * Copyright (c) 1997-2003 by The XFree86 Project, 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 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 COPYRIGHT HOLDER(S) OR AUTHOR(S) 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.
+ *
+ * Except as contained in this notice, the name of the copyright holder(s)
+ * and author(s) shall not be used in advertising or otherwise to promote
+ * the sale, use or other dealings in this Software without prior written
+ * authorization from the copyright holder(s) and author(s).
+ */
+
 #ifndef EXTENSION_H
 #define EXTENSION_H
 
@@ -51,6 +78,17 @@ SOFTWARE.
 
 #include "dixstruct.h"
 
+typedef void (*InitExtension) (void);
+
+typedef struct {
+    InitExtension initFunc;
+    const char *name;
+    Bool *disablePtr;
+    InitExtension setupFunc;
+} ExtensionModule;
+
+extern ExtensionModule *ExtensionModuleList;
+
 extern _X_EXPORT unsigned short StandardMinorOpcode(ClientPtr /*client */ );
 
 extern _X_EXPORT Bool EnableDisableExtension(const char *name, Bool enable);
diff --git a/mi/miinitext.c b/mi/miinitext.c
index a2bbdaa..500e882 100644
--- a/mi/miinitext.c
+++ b/mi/miinitext.c
@@ -94,9 +94,7 @@ SOFTWARE.
 #include "micmap.h"
 #include "globals.h"
 
-#ifndef XFree86LOADER
-typedef void (*InitExtension) (void);
-#else                           /* XFree86Loader */
+#ifdef XFree86LOADER
 #include "loaderProcs.h"
 #include "xf86Extensions.h"
 #endif
commit 8171108602556446f12c1cfbc37c6abf3b0195eb
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:03:21 2012 +0100

    Loader: Remove extension initialisation sorting
    
    Extensions could previously declare initialisation dependencies on other
    extensions, which would then get nicely sorted by the loader.  We only
    had one user for this, GLX, which had one pointless (Composite) and one
    possibly useful dependency (DBE).  As DBE is now a built-in, it will
    always be sorted by GLX, so we no longer have any users for it.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/COPYING b/COPYING
index cd9e80a..7aa0df0 100644
--- a/COPYING
+++ b/COPYING
@@ -1788,7 +1788,7 @@ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 PERFORMANCE OF THIS SOFTWARE.
 
 
-Copyright (c) 1989, 1990, 1993, 1994
+Copyright (c) 1987, 1990, 1993
      The Regents of the University of California.  All rights reserved.
 
 This code is derived from software contributed to Berkeley by
diff --git a/hw/xfree86/common/xf86Extensions.c b/hw/xfree86/common/xf86Extensions.c
index 15bab42..8cbeedf 100644
--- a/hw/xfree86/common/xf86Extensions.c
+++ b/hw/xfree86/common/xf86Extensions.c
@@ -59,7 +59,6 @@ static ExtensionModule extensionModules[] = {
 	XFree86VidModeExtensionInit,
 	XF86VIDMODENAME,
 	&noXFree86VidModeExtension,
-	NULL,
 	NULL
     },
 #endif
@@ -68,7 +67,6 @@ static ExtensionModule extensionModules[] = {
 	XFree86DGAExtensionInit,
 	XF86DGANAME,
 	&noXFree86DGAExtension,
-	NULL,
 	NULL
     },
 #endif
@@ -77,7 +75,6 @@ static ExtensionModule extensionModules[] = {
         XFree86DRIExtensionInit,
         "XFree86-DRI",
         &noXFree86DRIExtension,
-        NULL,
         NULL
     },
 #endif
@@ -86,7 +83,6 @@ static ExtensionModule extensionModules[] = {
         DRI2ExtensionInit,
         DRI2_NAME,
         &noDRI2Extension,
-        NULL,
         NULL
     }
 #endif
diff --git a/hw/xfree86/common/xf86Module.h b/hw/xfree86/common/xf86Module.h
index dc5d0a8..d528a5d 100644
--- a/hw/xfree86/common/xf86Module.h
+++ b/hw/xfree86/common/xf86Module.h
@@ -175,7 +175,6 @@ typedef struct {
     const char *name;
     Bool *disablePtr;
     InitExtension setupFunc;
-    const char **initDependencies;
 } ExtensionModule;
 
 extern _X_EXPORT ExtensionModule *ExtensionModuleList;
diff --git a/hw/xfree86/dixmods/glxmodule.c b/hw/xfree86/dixmods/glxmodule.c
index a2b06a2..2f0a3dd 100644
--- a/hw/xfree86/dixmods/glxmodule.c
+++ b/hw/xfree86/dixmods/glxmodule.c
@@ -50,7 +50,6 @@ static ExtensionModule GLXExt = {
     GlxExtensionInit,
     "GLX",
     &noGlxExtension,
-    NULL,
     NULL
 };
 
diff --git a/hw/xfree86/loader/loaderProcs.h b/hw/xfree86/loader/loaderProcs.h
index a7b752b..8b4b53f 100644
--- a/hw/xfree86/loader/loaderProcs.h
+++ b/hw/xfree86/loader/loaderProcs.h
@@ -80,7 +80,6 @@ ModuleDescPtr LoadModule(const char *, const char *, const char **,
 ModuleDescPtr DuplicateModule(ModuleDescPtr mod, ModuleDescPtr parent);
 void UnloadDriver(ModuleDescPtr);
 void LoaderSetPath(const char *path);
-void LoaderSortExtensions(void);
 
 void LoaderUnload(const char *, void *);
 unsigned long LoaderGetModuleVersion(ModuleDescPtr mod);
diff --git a/hw/xfree86/loader/loadext.c b/hw/xfree86/loader/loadext.c
index 0754ea9..62355bb 100644
--- a/hw/xfree86/loader/loadext.c
+++ b/hw/xfree86/loader/loadext.c
@@ -91,354 +91,7 @@ LoadExtension(ExtensionModule * e, Bool builtin)
     newext->initFunc = e->initFunc;
     newext->disablePtr = e->disablePtr;
     newext->setupFunc = e->setupFunc;
-    newext->initDependencies = e->initDependencies;
 
     if (e->setupFunc != NULL)
         e->setupFunc();
 }
-
-/*
- * Sort ExtensionModuleList according to the initialisation order
- * dependencies.  The code for this is taken from BSD's tsort,
- * and carries the following copyright/license:
- *
- *
- * Copyright (c) 1989, 1993, 1994
- *      The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Michael Rendell of Memorial University of Newfoundland.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *      This product includes software developed by the University of
- *      California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#define	NF_MARK		0x1     /* marker for cycle detection */
-#define	NF_ACYCLIC	0x2     /* this node is cycle free */
-#define	NF_NODEST	0x4     /* Unreachable */
-
-typedef struct node_str NODE;
-struct node_str {
-    NODE **n_prevp;             /* pointer to previous node's n_next */
-    NODE *n_next;               /* next node in graph */
-    NODE **n_arcs;              /* array of arcs to other nodes */
-    int n_narcs;                /* number of arcs in n_arcs[] */
-    int n_arcsize;              /* size of n_arcs[] array */
-    int n_refcnt;               /* # of arcs pointing to this node */
-    int n_flags;                /* NF_* */
-    const char *n_name;         /* name of this node */
-};
-
-static NODE *graph = NULL, **cycle_buf = NULL, **longest_cycle = NULL;
-static int longest = 0;
-static NODE *sorted = NULL, *last = NULL;
-
-/* Find a node in the graph (insert if not found) and return a pointer to it. */
-static NODE *
-get_node(const char *name)
-{
-    NODE *n;
-
-    for (n = graph; n && n->n_name && strcmp(n->n_name, name); n = n->n_next);
-    if (n)
-        return n;
-
-    n = xnfalloc(sizeof(NODE));
-
-    n->n_narcs = 0;
-    n->n_arcsize = 0;
-    n->n_arcs = NULL;
-    n->n_refcnt = 0;
-    n->n_flags = 0;
-    n->n_name = name;
-
-    /* Add to linked list. */
-    if ((n->n_next = graph) != NULL)
-        graph->n_prevp = &n->n_next;
-    n->n_prevp = &graph;
-    graph = n;
-
-    return n;
-}
-
-/*
- * add an arc from node s1 to node s2 in the graph.  If s1 or s2 are not in
- * the graph, then add them.
- */
-static void
-add_arc(const char *s1, const char *s2)
-{
-    NODE *n1;
-    NODE *n2;
-    int bsize, i;
-
-    n1 = get_node(s1);
-
-    if (!strcmp(s1, s2))
-        return;
-
-    n2 = get_node(s2);
-
-    /*
-     * Check if this arc is already here.
-     */
-    for (i = 0; i < n1->n_narcs; i++)
-        if (n1->n_arcs[i] == n2)
-            return;
-    /*
-     * Add it.
-     */
-    if (n1->n_narcs == n1->n_arcsize) {
-        if (!n1->n_arcsize)
-            n1->n_arcsize = 10;
-        bsize = n1->n_arcsize * sizeof(*n1->n_arcs) * 2;
-        n1->n_arcs = xnfrealloc(n1->n_arcs, bsize);
-        n1->n_arcsize = bsize / sizeof(*n1->n_arcs);
-    }
-    n1->n_arcs[n1->n_narcs++] = n2;
-    ++n2->n_refcnt;
-}
-
-/*
- * Clear the NODEST flag from all nodes.
- */
-static void
-clear_cycle(void)
-{
-    NODE *n;
-
-    for (n = graph; n != NULL; n = n->n_next)
-        n->n_flags &= ~NF_NODEST;
-}
-
-/* print node and remove from graph (does not actually free node) */
-static void
-remove_node(NODE * n)
-{
-    NODE **np;
-    NODE *newnode;
-    int i;
-
-#ifdef DEBUG
-    ErrorF("%s\n", n->n_name);
-#endif
-    newnode = xnfalloc(sizeof(NODE));
-    memcpy(newnode, n, sizeof(NODE));
-    if (last)
-        last->n_next = newnode;
-    else
-        sorted = newnode;
-    last = newnode;
-    newnode->n_next = NULL;
-
-    for (np = n->n_arcs, i = n->n_narcs; --i >= 0; np++)
-        --(*np)->n_refcnt;
-    n->n_narcs = 0;
-    *n->n_prevp = n->n_next;
-    if (n->n_next)
-        n->n_next->n_prevp = n->n_prevp;
-}
-
-static void
-free_nodes(NODE * nodelist)
-{
-    NODE *n, *nextnode;
-
-    for (n = nodelist; n;) {
-        nextnode = n->n_next;
-        free(n);
-        n = nextnode;
-    }
-}
-
-/* look for the longest? cycle from node from to node to. */
-static int
-find_cycle(NODE * from, NODE * to, int longest_len, int depth)
-{
-    NODE **np;
-    int i, len;
-
-    /*
-     * avoid infinite loops and ignore portions of the graph known
-     * to be acyclic
-     */
-    if (from->n_flags & (NF_NODEST | NF_MARK | NF_ACYCLIC))
-        return 0;
-    from->n_flags |= NF_MARK;
-
-    for (np = from->n_arcs, i = from->n_narcs; --i >= 0; np++) {
-        cycle_buf[depth] = *np;
-        if (*np == to) {
-            if (depth + 1 > longest_len) {
-                longest_len = depth + 1;
-                memcpy((char *) longest_cycle,
-                       (char *) cycle_buf, longest_len * sizeof(NODE *));
-            }
-        }
-        else {
-            if ((*np)->n_flags & (NF_MARK | NF_ACYCLIC | NF_NODEST))
-                continue;
-            len = find_cycle(*np, to, longest_len, depth + 1);
-
-#ifdef DEBUG
-            ErrorF("%*s %s->%s %d\n", depth, "", from->n_name, to->n_name, len);
-#endif
-
-            if (len == 0)
-                (*np)->n_flags |= NF_NODEST;
-
-            if (len > longest_len)
-                longest_len = len;
-
-            if (len > 0 && !longest)
-                break;
-        }
-    }
-    from->n_flags &= ~NF_MARK;
-    return longest_len;
-}
-
-/* do topological sort on graph */
-static void
-tsort(void)
-{
-    NODE *n, *next;
-    int cnt, i;
-
-    while (graph != NULL) {
-        /*
-         * Keep getting rid of simple cases until there are none left,
-         * if there are any nodes still in the graph, then there is
-         * a cycle in it.
-         */
-        do {
-            for (cnt = 0, n = graph; n != NULL; n = next) {
-                next = n->n_next;
-                if (n->n_refcnt == 0) {
-                    remove_node(n);
-                    ++cnt;
-                }
-            }
-        } while (graph != NULL && cnt);
-
-        if (graph == NULL)
-            break;
-
-        if (!cycle_buf) {
-            /*
-             * Allocate space for two cycle logs - one to be used
-             * as scratch space, the other to save the longest
-             * cycle.
-             */
-            for (cnt = 0, n = graph; n != NULL; n = n->n_next)
-                ++cnt;
-            cycle_buf = xnfalloc(sizeof(NODE *) * cnt);
-            longest_cycle = xnfalloc(sizeof(NODE *) * cnt);
-            if (cycle_buf == NULL || longest_cycle == NULL)
-                return;
-        }
-        for (n = graph; n != NULL; n = n->n_next)
-            if (!(n->n_flags & NF_ACYCLIC)) {
-                if ((cnt = find_cycle(n, n, 0, 0))) {
-                    ErrorF("tsort: cycle in data");
-                    for (i = 0; i < cnt; i++)
-                        ErrorF("%s", longest_cycle[i]->n_name);
-                    remove_node(n);
-                    clear_cycle();
-                    break;
-                }
-                else {
-                    /* to avoid further checks */
-                    n->n_flags |= NF_ACYCLIC;
-                    clear_cycle();
-                }
-            }
-
-        if (n == NULL)
-            ErrorF("tsort: internal error -- could not find cycle");
-    }
-    free(cycle_buf);
-    free(longest_cycle);
-    if (graph)
-        free_nodes(graph);
-}
-
-void
-LoaderSortExtensions(void)
-{
-    int i, j;
-    ExtensionModule *ext, *newList;
-    NODE *node;
-
-    graph = NULL;
-    longest = 0;
-    sorted = NULL;
-    last = NULL;
-    cycle_buf = NULL;
-    longest_cycle = NULL;
-
-    /*
-     * Parse list and build the graph.  Enter them in reverse order
-     * because tsort() will reverse those that have no depedencies.
-     */
-    for (i = numExtensionModules - 1; i >= 0; i--) {
-        ext = &ExtensionModuleList[i];
-        add_arc(ext->name, ext->name);
-#ifdef DEBUG
-        ErrorF("Extension %s:\n", ext->name);
-#endif
-        if (ext->initDependencies)
-            for (j = 0; ext->initDependencies[j]; j++) {
-                add_arc(ext->initDependencies[j], ext->name);
-#ifdef DEBUG
-                ErrorF("\t%s\n", ext->initDependencies[j]);
-#endif
-            }
-    }
-    tsort();
-    newList = xnfalloc((numExtensionModules + 1) * sizeof(ExtensionModule));
-    i = 0;
-    for (node = sorted; node; node = node->n_next) {
-        for (j = 0; j < numExtensionModules; j++)
-            if (!strcmp(node->n_name, ExtensionModuleList[j].name))
-                break;
-        if (j != numExtensionModules)
-            newList[i++] = ExtensionModuleList[j];
-    }
-    if (sorted)
-        free_nodes(sorted);
-    if (graph)
-        free_nodes(graph);
-    newList[i].name = NULL;
-    free(ExtensionModuleList);
-    ExtensionModuleList = newList;
-#ifdef DEBUG
-    for (i = 0; ExtensionModuleList[i].name; i++)
-        ErrorF("Extension %s\n", ExtensionModuleList[i].name);
-#endif
-}
diff --git a/mi/miinitext.c b/mi/miinitext.c
index 30c428c..a2bbdaa 100644
--- a/mi/miinitext.c
+++ b/mi/miinitext.c
@@ -358,38 +358,37 @@ InitExtensions(int argc, char *argv[])
 #else                           /* XFree86LOADER */
 /* List of built-in (statically linked) extensions */
 static ExtensionModule staticExtensions[] = {
-    {GEExtensionInit, "Generic Event Extension", &noGEExtension, NULL, NULL},
-    {ShapeExtensionInit, "SHAPE", NULL, NULL, NULL},
+    {GEExtensionInit, "Generic Event Extension", &noGEExtension, NULL},
+    {ShapeExtensionInit, "SHAPE", NULL, NULL},
 #ifdef MITSHM
-    {ShmExtensionInit, SHMNAME, &noMITShmExtension, NULL, NULL},
+    {ShmExtensionInit, SHMNAME, &noMITShmExtension, NULL},
 #endif
-    {XInputExtensionInit, "XInputExtension", NULL, NULL, NULL},
+    {XInputExtensionInit, "XInputExtension", NULL, NULL},
 #ifdef XTEST
-    {XTestExtensionInit, XTestExtensionName, &noTestExtensions, NULL, NULL},
+    {XTestExtensionInit, XTestExtensionName, &noTestExtensions, NULL},
 #endif
-    {BigReqExtensionInit, "BIG-REQUESTS", NULL, NULL, NULL},
-    {SyncExtensionInit, "SYNC", NULL, NULL, NULL},
-    {XkbExtensionInit, XkbName, NULL, NULL, NULL},
-    {XCMiscExtensionInit, "XC-MISC", NULL, NULL, NULL},
+    {BigReqExtensionInit, "BIG-REQUESTS", NULL, NULL},
+    {SyncExtensionInit, "SYNC", NULL, NULL},
+    {XkbExtensionInit, XkbName, NULL, NULL},
+    {XCMiscExtensionInit, "XC-MISC", NULL, NULL},
 #ifdef XCSECURITY
-    {SecurityExtensionInit, SECURITY_EXTENSION_NAME, &noSecurityExtension, NULL,
-     NULL},
+    {SecurityExtensionInit, SECURITY_EXTENSION_NAME, &noSecurityExtension, NULL},
 #endif
 #ifdef PANORAMIX
     {PanoramiXExtensionInit, PANORAMIX_PROTOCOL_NAME, &noPanoramiXExtension,
-     NULL, NULL},
+     NULL},
 #endif
 #ifdef XFIXES
     /* must be before Render to layer DisplayCursor correctly */
-    {XFixesExtensionInit, "XFIXES", &noXFixesExtension, NULL, NULL},
+    {XFixesExtensionInit, "XFIXES", &noXFixesExtension, NULL},
 #endif
 #ifdef XF86BIGFONT
     {XFree86BigfontExtensionInit, XF86BIGFONTNAME, &noXFree86BigfontExtension,
-     NULL, NULL},
+     NULL},
 #endif
-    {RenderExtensionInit, "RENDER", &noRenderExtension, NULL, NULL},
+    {RenderExtensionInit, "RENDER", &noRenderExtension, NULL},
 #ifdef RANDR
-    {RRExtensionInit, "RANDR", &noRRExtension, NULL, NULL},
+    {RRExtensionInit, "RANDR", &noRRExtension, NULL},
 #endif
 #ifdef COMPOSITE
     {CompositeExtensionInit, "COMPOSITE", &noCompositeExtension, NULL},
@@ -442,10 +441,7 @@ InitExtensions(int argc, char *argv[])
     int i;
     ExtensionModule *ext;
 
-    /* Make sure all static extensions have been added, then sort the
-     * extensions according to their init dependencies. */
     AddStaticExtensions();
-    LoaderSortExtensions();
 
     for (i = 0; ExtensionModuleList[i].name != NULL; i++) {
         ext = &ExtensionModuleList[i];
commit d52ab85c7ef5058dcbd8a75eb84058908dc22906
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:03:20 2012 +0100

    GLX: Remove extension init dependencies
    
    GLX was the only user of extension init order dependencies, using them
    to depend on Composite, which has always been built-in anyway, and DBE,
    which is now built-in.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/dixmods/glxmodule.c b/hw/xfree86/dixmods/glxmodule.c
index f263324..a2b06a2 100644
--- a/hw/xfree86/dixmods/glxmodule.c
+++ b/hw/xfree86/dixmods/glxmodule.c
@@ -46,14 +46,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 static MODULESETUPPROTO(glxSetup);
 
-static const char *initdeps[] = { "DOUBLE-BUFFER", "COMPOSITE", NULL };
-
 static ExtensionModule GLXExt = {
     GlxExtensionInit,
     "GLX",
     &noGlxExtension,
     NULL,
-    initdeps
+    NULL
 };
 
 static XF86ModuleVersionInfo VersRec = {
commit 2fba9445a0357f67641e41ac334b5529c37774a2
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:03:19 2012 +0100

    Add static extensions before those in modules
    
    Make sure we add static extensions before anything in a module.  This is
    more or less a no-op at the moment, but will come in handy later when
    extension dependency sorting is removed.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/common/xf86Module.h b/hw/xfree86/common/xf86Module.h
index c48f041..dc5d0a8 100644
--- a/hw/xfree86/common/xf86Module.h
+++ b/hw/xfree86/common/xf86Module.h
@@ -180,6 +180,11 @@ typedef struct {
 
 extern _X_EXPORT ExtensionModule *ExtensionModuleList;
 
+/* This really shouldn't be here, but gets moved in about three commits'
+ * time.  So odds are the only people who ever see this comment are doing
+ * patch review, in which case, thanks! */
+extern _X_EXPORT void AddStaticExtensions(void);
+
 /* Prototypes for Loader functions that are exported to modules */
 extern _X_EXPORT pointer LoadSubModule(pointer, const char *, const char **,
                                        const char **, pointer,
diff --git a/hw/xfree86/loader/loadext.c b/hw/xfree86/loader/loadext.c
index daa1abf..0754ea9 100644
--- a/hw/xfree86/loader/loadext.c
+++ b/hw/xfree86/loader/loadext.c
@@ -49,6 +49,10 @@ NewExtensionModule(void)
     ExtensionModule *save = ExtensionModuleList;
     int n;
 
+    /* Make sure built-in extensions get added to the list before those
+     * in modules. */
+    AddStaticExtensions();
+
     /* Sanity check */
     if (!ExtensionModuleList)
         numExtensionModules = 0;
diff --git a/mi/miinitext.c b/mi/miinitext.c
index a8644db..30c428c 100644
--- a/mi/miinitext.c
+++ b/mi/miinitext.c
@@ -421,22 +421,31 @@ static ExtensionModule staticExtensions[] = {
 #endif
 };
 
- /*ARGSUSED*/ void
+void
+AddStaticExtensions(void)
+{
+    static Bool listInitialised = FALSE;
+    int i;
+
+    if (listInitialised)
+        return;
+    listInitialised = TRUE;
+
+    /* Add built-in extensions to the list. */
+    for (i = 0; i < ARRAY_SIZE(staticExtensions); i++)
+        LoadExtension(&staticExtensions[i], TRUE);
+}
+
+void
 InitExtensions(int argc, char *argv[])
 {
     int i;
     ExtensionModule *ext;
-    static Bool listInitialised = FALSE;
-
-    if (!listInitialised) {
-        /* Add built-in extensions to the list. */
-        for (i = 0; i < ARRAY_SIZE(staticExtensions); i++)
-            LoadExtension(&staticExtensions[i], TRUE);
 
-        /* Sort the extensions according the init dependencies. */
-        LoaderSortExtensions();
-        listInitialised = TRUE;
-    }
+    /* Make sure all static extensions have been added, then sort the
+     * extensions according to their init dependencies. */
+    AddStaticExtensions();
+    LoaderSortExtensions();
 
     for (i = 0; ExtensionModuleList[i].name != NULL; i++) {
         ext = &ExtensionModuleList[i];
commit 9a953e0e9dcb8a8e43cc27ffaef460268fbe1916
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:03:18 2012 +0100

    Move DRI2 from external module to built-in
    
    Instead of keeping a tiny amount of code in an external module, just man
    up and build it into the core server.
    
    v2: Fix test/Makefile.am to only link libdri2.la if DRI2 is set
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Jamey Sharp <jamey at minilop.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/Makefile.am b/hw/xfree86/Makefile.am
index 0c3801d..cd699ee 100644
--- a/hw/xfree86/Makefile.am
+++ b/hw/xfree86/Makefile.am
@@ -6,6 +6,7 @@ endif
 
 if DRI2
 DRI2_SUBDIR = dri2
+DRI2_LIB = dri2/libdri2.la
 endif
 
 if XF86UTILS
@@ -27,8 +28,8 @@ INT10_SUBDIR = int10
 endif
 
 SUBDIRS = common ddc x86emu $(INT10_SUBDIR) os-support parser \
-	  ramdac $(VGAHW_SUBDIR) loader modes $(DRI_SUBDIR) . \
-	  $(VBE_SUBDIR) $(XAA_SUBDIR) $(DRI2_SUBDIR) i2c dixmods \
+	  ramdac $(VGAHW_SUBDIR) loader modes $(DRI_SUBDIR) \
+	  $(DRI2_SUBDIR) . $(VBE_SUBDIR) $(XAA_SUBDIR) i2c dixmods \
 	  fbdevhw shadowfb exa $(XF86UTILS_SUBDIR) doc man
 
 DIST_SUBDIRS = common ddc i2c x86emu int10 fbdevhw os-support \
@@ -42,7 +43,7 @@ nodist_Xorg_SOURCES = sdksyms.c
 AM_CFLAGS = $(DIX_CFLAGS) @XORG_CFLAGS@
 INCLUDES = $(XORG_INCS) -I$(srcdir)/parser -I$(top_srcdir)/miext/cw \
 	-I$(srcdir)/ddc -I$(srcdir)/i2c -I$(srcdir)/modes -I$(srcdir)/ramdac \
-	-I$(srcdir)/dri
+	-I$(srcdir)/dri -I$(srcdir)/dri2
 
 LOCAL_LIBS = \
             $(MAIN_LIB) \
@@ -59,6 +60,7 @@ LOCAL_LIBS = \
             $(XORG_LIBS) \
             dixmods/libxorgxkb.la \
             $(DRI_LIB) \
+            $(DRI2_LIB) \
             $(top_builddir)/mi/libmi.la \
             $(top_builddir)/os/libos.la
 Xorg_LDADD = \
diff --git a/hw/xfree86/common/Makefile.am b/hw/xfree86/common/Makefile.am
index cb6d0d4..325875d 100644
--- a/hw/xfree86/common/Makefile.am
+++ b/hw/xfree86/common/Makefile.am
@@ -56,7 +56,7 @@ INCLUDES = $(XORG_INCS) -I$(srcdir)/../ddc -I$(srcdir)/../i2c \
 	   -I$(srcdir)/../loader -I$(srcdir)/../parser \
            -I$(srcdir)/../vbe -I$(srcdir)/../int10 \
 	   -I$(srcdir)/../vgahw -I$(srcdir)/../dixmods/extmod \
-	   -I$(srcdir)/../modes -I$(srcdir)/../ramdac
+	   -I$(srcdir)/../modes -I$(srcdir)/../ramdac -I$(srcdir)/../dri2
 
 sdk_HEADERS = compiler.h fourcc.h xf86.h xf86Module.h xf86Opt.h \
               xf86PciInfo.h xf86Priv.h xf86Privstr.h \
diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
index 0dbfa98..486752b 100644
--- a/hw/xfree86/common/xf86Config.c
+++ b/hw/xfree86/common/xf86Config.c
@@ -112,9 +112,6 @@ static ModuleDefault ModuleDefaults[] = {
 #ifdef GLXEXT
     {.name = "glx",.toLoad = TRUE,.load_opt = NULL},
 #endif
-#ifdef DRI2
-    {.name = "dri2",.toLoad = TRUE,.load_opt = NULL},
-#endif
 #ifdef __CYGWIN__
     /* load DIX modules used by drivers first */
     {.name = "fb",.toLoad = TRUE,.load_opt = NULL},
diff --git a/hw/xfree86/common/xf86Extensions.c b/hw/xfree86/common/xf86Extensions.c
index b38ecf2..15bab42 100644
--- a/hw/xfree86/common/xf86Extensions.c
+++ b/hw/xfree86/common/xf86Extensions.c
@@ -81,6 +81,15 @@ static ExtensionModule extensionModules[] = {
         NULL
     },
 #endif
+#ifdef DRI2
+    {
+        DRI2ExtensionInit,
+        DRI2_NAME,
+        &noDRI2Extension,
+        NULL,
+        NULL
+    }
+#endif
 };
 
 static void
diff --git a/hw/xfree86/common/xf86Extensions.h b/hw/xfree86/common/xf86Extensions.h
index f86a421..9b8448d 100644
--- a/hw/xfree86/common/xf86Extensions.h
+++ b/hw/xfree86/common/xf86Extensions.h
@@ -35,6 +35,7 @@ extern void XFree86DRIExtensionInit(void);
 
 #ifdef DRI2
 #include <X11/extensions/dri2proto.h>
+extern Bool noDRI2Extension;
 extern void DRI2ExtensionInit(void);
 #endif
 
diff --git a/hw/xfree86/dri2/Makefile.am b/hw/xfree86/dri2/Makefile.am
index ad3419b..502a2ee 100644
--- a/hw/xfree86/dri2/Makefile.am
+++ b/hw/xfree86/dri2/Makefile.am
@@ -1,16 +1,14 @@
-libdri2_la_LTLIBRARIES = libdri2.la
-libdri2_la_CFLAGS = \
+noinst_LTLIBRARIES = libdri2.la
+AM_CFLAGS = \
 	-DHAVE_XORG_CONFIG_H \
-	@DIX_CFLAGS@ @XORG_CFLAGS@ @DRI2PROTO_CFLAGS@ @LIBDRM_CFLAGS@ \
+	@DIX_CFLAGS@ @XORG_CFLAGS@ \
 	-I$(top_srcdir)/hw/xfree86/common \
 	-I$(top_srcdir)/hw/xfree86/os-support/bus
 
-libdri2_la_LDFLAGS = -module -avoid-version $(LD_NO_UNDEFINED_FLAG)
-libdri2_la_LIBADD = @LIBDRM_LIBS@ $(PIXMAN_LIBS)
-libdri2_ladir = $(moduledir)/extensions
 libdri2_la_SOURCES = \
 	dri2.c \
 	dri2.h \
-	dri2ext.c
+	dri2ext.c \
+	dri2int.h
 
 sdk_HEADERS = dri2.h
diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c
index 887ce46..2ea0c33 100644
--- a/hw/xfree86/dri2/dri2.c
+++ b/hw/xfree86/dri2/dri2.c
@@ -44,6 +44,7 @@
 #include "windowstr.h"
 #include "dixstruct.h"
 #include "dri2.h"
+#include "dri2int.h"
 #include "xf86VGAarbiter.h"
 #include "damage.h"
 #include "xf86.h"
@@ -1552,7 +1553,6 @@ DRI2CloseScreen(ScreenPtr pScreen)
     dixSetPrivate(&pScreen->devPrivates, dri2ScreenPrivateKey, NULL);
 }
 
-extern ExtensionModule dri2ExtensionModule;
 extern Bool DRI2ModuleSetup(void);
 
 /* Called by InitExtensions() */
@@ -1566,46 +1566,14 @@ DRI2ModuleSetup(void)
     return TRUE;
 }
 
-static pointer
-DRI2Setup(pointer module, pointer opts, int *errmaj, int *errmin)
-{
-    static Bool setupDone = FALSE;
-
-    if (!setupDone) {
-        setupDone = TRUE;
-        LoadExtension(&dri2ExtensionModule, FALSE);
-    }
-    else {
-        if (errmaj)
-            *errmaj = LDR_ONCEONLY;
-    }
-
-    return (pointer) 1;
-}
-
-static XF86ModuleVersionInfo DRI2VersRec = {
-    "dri2",
-    MODULEVENDORSTRING,
-    MODINFOSTRING1,
-    MODINFOSTRING2,
-    XORG_VERSION_CURRENT,
-    1, 2, 0,
-    ABI_CLASS_EXTENSION,
-    ABI_EXTENSION_VERSION,
-    MOD_CLASS_NONE,
-    {0, 0, 0, 0}
-};
-
-_X_EXPORT XF86ModuleData dri2ModuleData = { &DRI2VersRec, DRI2Setup, NULL };
-
 void
 DRI2Version(int *major, int *minor)
 {
     if (major != NULL)
-        *major = DRI2VersRec.majorversion;
+        *major = 1;
 
     if (minor != NULL)
-        *minor = DRI2VersRec.minorversion;
+        *minor = 2;
 }
 
 int
diff --git a/hw/xfree86/dri2/dri2.h b/hw/xfree86/dri2/dri2.h
index 28f2d75..da7825e 100644
--- a/hw/xfree86/dri2/dri2.h
+++ b/hw/xfree86/dri2/dri2.h
@@ -254,8 +254,6 @@ typedef struct {
     DRI2CopyRegion2ProcPtr CopyRegion2;
 } DRI2InfoRec, *DRI2InfoPtr;
 
-extern _X_EXPORT int DRI2EventBase;
-
 extern _X_EXPORT Bool DRI2ScreenInit(ScreenPtr pScreen, DRI2InfoPtr info);
 
 extern _X_EXPORT void DRI2CloseScreen(ScreenPtr pScreen);
diff --git a/hw/xfree86/dri2/dri2ext.c b/hw/xfree86/dri2/dri2ext.c
index c73fe9d..eb6fd44 100644
--- a/hw/xfree86/dri2/dri2ext.c
+++ b/hw/xfree86/dri2/dri2ext.c
@@ -44,13 +44,15 @@
 #include "extnsionst.h"
 #include "xfixes.h"
 #include "dri2.h"
+#include "dri2int.h"
 #include "protocol-versions.h"
 
-/* The only xf86 include */
+/* The only xf86 includes */
 #include "xf86Module.h"
+#include "xf86Extensions.h"
+
+static int DRI2EventBase;
 
-static ExtensionEntry *dri2Extension;
-extern Bool DRI2ModuleSetup(void);
 
 static Bool
 validDrawable(ClientPtr client, XID drawable, Mask access_mode,
@@ -664,11 +666,11 @@ SProcDRI2Dispatch(ClientPtr client)
     }
 }
 
-int DRI2EventBase;
-
-static void
+void
 DRI2ExtensionInit(void)
 {
+    ExtensionEntry *dri2Extension;
+
     dri2Extension = AddExtension(DRI2_NAME,
                                  DRI2NumberEvents,
                                  DRI2NumberErrors,
@@ -679,13 +681,3 @@ DRI2ExtensionInit(void)
 
     DRI2ModuleSetup();
 }
-
-extern Bool noDRI2Extension;
-
-_X_HIDDEN ExtensionModule dri2ExtensionModule = {
-    DRI2ExtensionInit,
-    DRI2_NAME,
-    &noDRI2Extension,
-    NULL,
-    NULL
-};
diff --git a/hw/xfree86/dri2/dri2int.h b/hw/xfree86/dri2/dri2int.h
new file mode 100644
index 0000000..7f53eba
--- /dev/null
+++ b/hw/xfree86/dri2/dri2int.h
@@ -0,0 +1,26 @@
+/*
+ * Copyright © 2011 Daniel Stone
+ *
+ * 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: Daniel Stone <daniel at fooishbar.org>
+ */
+
+extern Bool DRI2ModuleSetup(void);
diff --git a/hw/xfree86/loader/Makefile.am b/hw/xfree86/loader/Makefile.am
index 6605042..d6ddbec 100644
--- a/hw/xfree86/loader/Makefile.am
+++ b/hw/xfree86/loader/Makefile.am
@@ -2,7 +2,7 @@ noinst_LTLIBRARIES = libloader.la
 
 INCLUDES = $(XORG_INCS) -I$(srcdir)/../parser -I$(top_srcdir)/miext/cw \
 	   -I$(srcdir)/../ddc -I$(srcdir)/../i2c -I$(srcdir)/../modes \
-	   -I$(srcdir)/../ramdac -I$(srcdir)/../dri
+	   -I$(srcdir)/../ramdac -I$(srcdir)/../dri -I$(srcdir)/../dri2
 
 #AM_LDFLAGS = -r
 AM_CFLAGS = $(DIX_CFLAGS) $(XORG_CFLAGS)
diff --git a/hw/xfree86/loader/loadmod.c b/hw/xfree86/loader/loadmod.c
index 1ef8791..2347b8e 100644
--- a/hw/xfree86/loader/loadmod.c
+++ b/hw/xfree86/loader/loadmod.c
@@ -837,6 +837,7 @@ static const char *compiled_in_modules[] = {
     "record",
     "extmod",
     "dri",
+    "dri2",
     NULL
 };
 
diff --git a/hw/xfree86/sdksyms.sh b/hw/xfree86/sdksyms.sh
index d8a7efb..420640f 100755
--- a/hw/xfree86/sdksyms.sh
+++ b/hw/xfree86/sdksyms.sh
@@ -93,11 +93,9 @@ cat > sdksyms.c << EOF
 
 
 /* hw/xfree86/dri2/Makefile.am -- module */
-/*
 #if DRI2
 # include "dri2.h"
 #endif
- */
 
 
 /* hw/xfree86/vgahw/Makefile.am -- module */
diff --git a/test/Makefile.am b/test/Makefile.am
index b388888..aa018c9 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -18,7 +18,8 @@ if XORG
 INCLUDES += -I$(top_srcdir)/hw/xfree86/parser \
 	-I$(top_srcdir)/hw/xfree86/ddc \
 	-I$(top_srcdir)/hw/xfree86/i2c -I$(top_srcdir)/hw/xfree86/modes \
-	-I$(top_srcdir)/hw/xfree86/ramdac -I$(top_srcdir)/hw/xfree86/dri
+	-I$(top_srcdir)/hw/xfree86/ramdac -I$(top_srcdir)/hw/xfree86/dri \
+	-I$(top_srcdir)/hw/xfree86/dri2
 endif
 TEST_LDADD=libxservertest.la $(XORG_SYS_LIBS) $(XSERVER_SYS_LIBS) $(GLX_SYS_LIBS)
 
@@ -61,6 +62,10 @@ if DRI
 libxservertest_la_LIBADD += $(top_builddir)/hw/xfree86/dri/libdri.la
 endif
 
+if DRI2
+libxservertest_la_LIBADD += $(top_builddir)/hw/xfree86/dri2/libdri2.la
+endif
+
 else
 nodist_libxservertest_la_SOURCES = \
             ddxstubs.c \
commit b8a3267c36e2e335b888bd4f2ef2f2c477cdfdce
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:03:17 2012 +0100

    DRI2: Remove prototype for DRI2DestroyDrawable
    
    DRI2DestroyDrawable() was still being _X_EXPORTed, but hasn't existed
    since 1da1f33f last year.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Cyril Brulebois <kibi at debian.org>
    Reviewed-by: Jamey Sharp <jamey at minilop.net>
    Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/dri2/dri2.h b/hw/xfree86/dri2/dri2.h
index a59e680..28f2d75 100644
--- a/hw/xfree86/dri2/dri2.h
+++ b/hw/xfree86/dri2/dri2.h
@@ -276,8 +276,6 @@ extern _X_EXPORT int DRI2CreateDrawable(ClientPtr client,
                                         DRI2InvalidateProcPtr invalidate,
                                         void *priv);
 
-extern _X_EXPORT void DRI2DestroyDrawable(DrawablePtr pDraw);
-
 extern _X_EXPORT DRI2BufferPtr *DRI2GetBuffers(DrawablePtr pDraw,
                                                int *width,
                                                int *height,
commit 7025a909bfe4d1f5518ec6fc5f89e2c3fb6501fd
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:03:16 2012 +0100

    XFree86: DRI: Don't use per-target CFLAGS
    
    AM_CFLAGS will suffice, given we only have one target in this directory.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Cyril Brulebois <kibi at debian.org>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/dri/Makefile.am b/hw/xfree86/dri/Makefile.am
index 7c2026f..ced04ff 100644
--- a/hw/xfree86/dri/Makefile.am
+++ b/hw/xfree86/dri/Makefile.am
@@ -1,15 +1,15 @@
 noinst_LTLIBRARIES = libdri.la
-libdri_la_CFLAGS = -I$(top_srcdir)/hw/xfree86/common \
-                   -I$(top_srcdir)/hw/xfree86/os-support \
-                   -I$(top_srcdir)/hw/xfree86/modes \
-                   -I$(top_srcdir)/hw/xfree86/ddc \
-                   -I$(top_srcdir)/hw/xfree86/i2c \
-                   -I$(top_srcdir)/hw/xfree86/parser \
-                   -I$(top_srcdir)/hw/xfree86/ramdac \
-                   -I$(top_srcdir)/hw/xfree86/os-support/bus \
-                   -I$(top_srcdir)/glx \
-                   -DHAVE_XORG_CONFIG_H \
-                   @DIX_CFLAGS@ @XORG_CFLAGS@
+AM_CFLAGS = -I$(top_srcdir)/hw/xfree86/common \
+            -I$(top_srcdir)/hw/xfree86/os-support \
+            -I$(top_srcdir)/hw/xfree86/modes \
+            -I$(top_srcdir)/hw/xfree86/ddc \
+            -I$(top_srcdir)/hw/xfree86/i2c \
+            -I$(top_srcdir)/hw/xfree86/parser \
+            -I$(top_srcdir)/hw/xfree86/ramdac \
+            -I$(top_srcdir)/hw/xfree86/os-support/bus \
+            -I$(top_srcdir)/glx \
+            -DHAVE_XORG_CONFIG_H \
+            @DIX_CFLAGS@ @XORG_CFLAGS@
 libdri_la_SOURCES = \
 	dri.c \
 	dri.h \
commit 459c6da0f907ba33d733c7e62a116184ba2f14e5
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:03:15 2012 +0100

    Move DRI1 from external module to built-in
    
    Rather than building the tiny amount of code required for XFree86-DRI as
    an external module, build it in if it's enabled at configure time.
    
    v2: Fix test/Makefile.am to only link libdri.la if DRI is set
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>
    
    fixup for DRI1 move
    
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/configure.ac b/configure.ac
index beeb5fd..b225632 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1087,9 +1087,8 @@ AC_SUBST([GLX_SYS_LIBS])
 AM_CONDITIONAL(DRI, test "x$DRI" = xyes)
 if test "x$DRI" = xyes; then
 	AC_DEFINE(XF86DRI, 1, [Build DRI extension])
-	PKG_CHECK_MODULES([DRIPROTO], [$DRIPROTO])
-	PKG_CHECK_MODULES([DRI], $GLPROTO $LIBDRI)
-	AC_SUBST(DRIPROTO_CFLAGS)
+	REQUIRED_MODULES="$REQUIRED_MODULES $DRIPROTO $GLPROTO $LIBDRI"
+	SDK_REQUIRED_MODULES="$SDK_REQUIRED_MODULES $DRIPROTO $GLPROTO $LIBDRI"
 fi
 
 PKG_CHECK_MODULES([DRI2PROTO], $DRI2PROTO,
@@ -1659,7 +1658,7 @@ if test "x$XORG" = xyes; then
 	PKG_CHECK_MODULES([PCIACCESS], $LIBPCIACCESS)
 	SDK_REQUIRED_MODULES="$SDK_REQUIRED_MODULES $LIBPCIACCESS"
 	XORG_SYS_LIBS="$XORG_SYS_LIBS $PCIACCESS_LIBS $GLX_SYS_LIBS $LIBDRM_LIBS"
-	XORG_CFLAGS="$XORG_CFLAGS $PCIACCESS_CFLAGS"
+	XORG_CFLAGS="$XORG_CFLAGS $PCIACCESS_CFLAGS $LIBDRM_CFLAGS"
 
 	AC_DEFINE(XSERVER_LIBPCIACCESS, 1, [Use libpciaccess for all pci manipulation])
 	AC_DEFINE_DIR(PCI_TXT_IDS_PATH, PCI_TXT_IDS_DIR, [Default PCI text file ID path])
diff --git a/glx/Makefile.am b/glx/Makefile.am
index ced78b7..591c4ac 100644
--- a/glx/Makefile.am
+++ b/glx/Makefile.am
@@ -7,10 +7,8 @@ noinst_LTLIBRARIES = libglx.la $(GLXDRI_LIBRARY)
 AM_CFLAGS = \
 	@DIX_CFLAGS@ \
 	@GL_CFLAGS@ \
-	@DRI_CFLAGS@ \
 	@XLIB_CFLAGS@ \
 	@LIBDRM_CFLAGS@ \
-	@DRIPROTO_CFLAGS@ \
 	@GLX_DEFINES@ \
 	@GLX_ARCH_DEFINES@
 
diff --git a/hw/kdrive/ephyr/Makefile.am b/hw/kdrive/ephyr/Makefile.am
index 9d9b64e..2e0613a 100644
--- a/hw/kdrive/ephyr/Makefile.am
+++ b/hw/kdrive/ephyr/Makefile.am
@@ -5,7 +5,6 @@ INCLUDES = 			\
 	@KDRIVE_CFLAGS@		\
 	@XEPHYR_INCS@		\
 	@XEPHYR_CFLAGS@		\
-	@DRIPROTO_CFLAGS@	\
 	-I$(top_srcdir)		\
 	-I$(top_srcdir)/exa
 
diff --git a/hw/xfree86/Makefile.am b/hw/xfree86/Makefile.am
index f74691b..0c3801d 100644
--- a/hw/xfree86/Makefile.am
+++ b/hw/xfree86/Makefile.am
@@ -1,6 +1,7 @@
 
 if DRI
 DRI_SUBDIR = dri
+DRI_LIB = dri/libdri.la
 endif
 
 if DRI2
@@ -26,8 +27,8 @@ INT10_SUBDIR = int10
 endif
 
 SUBDIRS = common ddc x86emu $(INT10_SUBDIR) os-support parser \
-	  ramdac $(VGAHW_SUBDIR) loader modes . $(VBE_SUBDIR) \
-	  $(XAA_SUBDIR) $(DRI_SUBDIR) $(DRI2_SUBDIR) i2c dixmods \
+	  ramdac $(VGAHW_SUBDIR) loader modes $(DRI_SUBDIR) . \
+	  $(VBE_SUBDIR) $(XAA_SUBDIR) $(DRI2_SUBDIR) i2c dixmods \
 	  fbdevhw shadowfb exa $(XF86UTILS_SUBDIR) doc man
 
 DIST_SUBDIRS = common ddc i2c x86emu int10 fbdevhw os-support \
@@ -40,7 +41,8 @@ nodist_Xorg_SOURCES = sdksyms.c
 
 AM_CFLAGS = $(DIX_CFLAGS) @XORG_CFLAGS@
 INCLUDES = $(XORG_INCS) -I$(srcdir)/parser -I$(top_srcdir)/miext/cw \
-	-I$(srcdir)/ddc -I$(srcdir)/i2c -I$(srcdir)/modes -I$(srcdir)/ramdac
+	-I$(srcdir)/ddc -I$(srcdir)/i2c -I$(srcdir)/modes -I$(srcdir)/ramdac \
+	-I$(srcdir)/dri
 
 LOCAL_LIBS = \
             $(MAIN_LIB) \
@@ -56,6 +58,7 @@ LOCAL_LIBS = \
             i2c/libi2c.la \
             $(XORG_LIBS) \
             dixmods/libxorgxkb.la \
+            $(DRI_LIB) \
             $(top_builddir)/mi/libmi.la \
             $(top_builddir)/os/libos.la
 Xorg_LDADD = \
diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
index a701d87..0dbfa98 100644
--- a/hw/xfree86/common/xf86Config.c
+++ b/hw/xfree86/common/xf86Config.c
@@ -112,9 +112,6 @@ static ModuleDefault ModuleDefaults[] = {
 #ifdef GLXEXT
     {.name = "glx",.toLoad = TRUE,.load_opt = NULL},
 #endif
-#ifdef XF86DRI
-    {.name = "dri",.toLoad = TRUE,.load_opt = NULL},
-#endif
 #ifdef DRI2
     {.name = "dri2",.toLoad = TRUE,.load_opt = NULL},
 #endif
diff --git a/hw/xfree86/common/xf86Extensions.c b/hw/xfree86/common/xf86Extensions.c
index 63950e6..b38ecf2 100644
--- a/hw/xfree86/common/xf86Extensions.c
+++ b/hw/xfree86/common/xf86Extensions.c
@@ -72,6 +72,15 @@ static ExtensionModule extensionModules[] = {
 	NULL
     },
 #endif
+#ifdef XF86DRI
+    {
+        XFree86DRIExtensionInit,
+        "XFree86-DRI",
+        &noXFree86DRIExtension,
+        NULL,
+        NULL
+    },
+#endif
 };
 
 static void
diff --git a/hw/xfree86/dri/Makefile.am b/hw/xfree86/dri/Makefile.am
index 9528d53..7c2026f 100644
--- a/hw/xfree86/dri/Makefile.am
+++ b/hw/xfree86/dri/Makefile.am
@@ -1,4 +1,4 @@
-libdri_la_LTLIBRARIES = libdri.la
+noinst_LTLIBRARIES = libdri.la
 libdri_la_CFLAGS = -I$(top_srcdir)/hw/xfree86/common \
                    -I$(top_srcdir)/hw/xfree86/os-support \
                    -I$(top_srcdir)/hw/xfree86/modes \
@@ -9,16 +9,10 @@ libdri_la_CFLAGS = -I$(top_srcdir)/hw/xfree86/common \
                    -I$(top_srcdir)/hw/xfree86/os-support/bus \
                    -I$(top_srcdir)/glx \
                    -DHAVE_XORG_CONFIG_H \
-                   @DIX_CFLAGS@ @XORG_CFLAGS@ @DRIPROTO_CFLAGS@ \
-                   @LIBDRM_CFLAGS@ \
-                   @DRI_CFLAGS@
-libdri_la_LDFLAGS = -module -avoid-version $(LD_NO_UNDEFINED_FLAG)
-libdri_la_LIBADD = @LIBDRM_LIBS@ $(PIXMAN_LIBS)
-libdri_ladir = $(moduledir)/extensions
+                   @DIX_CFLAGS@ @XORG_CFLAGS@
 libdri_la_SOURCES = \
 	dri.c \
 	dri.h \
-	drimodule.c \
 	dristruct.h \
 	sarea.h \
 	xf86dri.c
diff --git a/hw/xfree86/dri/dri.c b/hw/xfree86/dri/dri.c
index a3e7870..398178e 100644
--- a/hw/xfree86/dri/dri.c
+++ b/hw/xfree86/dri/dri.c
@@ -791,6 +791,8 @@ DRIExtensionInit(void)
 
     RegisterBlockAndWakeupHandlers(DRIBlockHandler, DRIWakeupHandler, NULL);
 
+    drmSetServerInfo(&DRIDRMServerInfo);
+
     return TRUE;
 }
 
diff --git a/hw/xfree86/dri/dri.h b/hw/xfree86/dri/dri.h
index 0a4036c..4bfaf16 100644
--- a/hw/xfree86/dri/dri.h
+++ b/hw/xfree86/dri/dri.h
@@ -197,7 +197,7 @@ extern _X_EXPORT Bool DRIScreenInit(ScreenPtr pScreen,
 
 extern _X_EXPORT void DRICloseScreen(ScreenPtr pScreen);
 
-extern _X_EXPORT Bool DRIExtensionInit(void);
+extern Bool DRIExtensionInit(void);
 
 extern _X_EXPORT void DRIReset(void);
 
diff --git a/hw/xfree86/dri/drimodule.c b/hw/xfree86/dri/drimodule.c
deleted file mode 100644
index 6cb3bfb..0000000
--- a/hw/xfree86/dri/drimodule.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/**************************************************************************
-
-Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
-All Rights Reserved.
-
-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, sub license, 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 NON-INFRINGEMENT.
-IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS 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.
-
-**************************************************************************/
-
-/*
- * Authors:
- *   Kevin E. Martin <kevin at precisioninsight.com>
- *   Rickard E. Faith <faith at precisioninsight.com>
- *
- */
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include "xf86Module.h"
-#include "xf86Extensions.h"
-#include "globals.h"
-
-#include "xf86drm.h"
-static MODULESETUPPROTO(driSetup);
-
-drmServerInfo DRIDRMServerInfo;
-
-static XF86ModuleVersionInfo VersRec = {
-    "dri",
-    MODULEVENDORSTRING,
-    MODINFOSTRING1,
-    MODINFOSTRING2,
-    XORG_VERSION_CURRENT,
-    1, 0, 0,
-    ABI_CLASS_EXTENSION,
-    ABI_EXTENSION_VERSION,
-    MOD_CLASS_NONE,
-    {0, 0, 0, 0}
-};
-
-#define _XF86DRI_SERVER_
-#include <X11/dri/xf86driproto.h>
-
-static ExtensionModule XF86DRIExt = {
-    XFree86DRIExtensionInit,
-    XF86DRINAME,
-    &noXFree86DRIExtension,
-    NULL,
-    NULL
-};
-
-_X_EXPORT XF86ModuleData driModuleData = { &VersRec, driSetup, NULL };
-
-static pointer
-driSetup(pointer module, pointer opts, int *errmaj, int *errmin)
-{
-    static Bool setupDone = FALSE;
-
-    if (!setupDone) {
-        setupDone = TRUE;
-        LoadExtension(&XF86DRIExt, FALSE);
-    }
-    else {
-        if (errmaj)
-            *errmaj = LDR_ONCEONLY;
-    }
-
-    drmSetServerInfo(&DRIDRMServerInfo);
-
-    /* Need a non-NULL return value to indicate success */
-    return (pointer) 1;
-}
diff --git a/hw/xfree86/dri2/Makefile.am b/hw/xfree86/dri2/Makefile.am
index 390ed12..ad3419b 100644
--- a/hw/xfree86/dri2/Makefile.am
+++ b/hw/xfree86/dri2/Makefile.am
@@ -1,7 +1,6 @@
 libdri2_la_LTLIBRARIES = libdri2.la
 libdri2_la_CFLAGS = \
 	-DHAVE_XORG_CONFIG_H \
-	@DRI_CFLAGS@ \
 	@DIX_CFLAGS@ @XORG_CFLAGS@ @DRI2PROTO_CFLAGS@ @LIBDRM_CFLAGS@ \
 	-I$(top_srcdir)/hw/xfree86/common \
 	-I$(top_srcdir)/hw/xfree86/os-support/bus
diff --git a/hw/xfree86/loader/Makefile.am b/hw/xfree86/loader/Makefile.am
index ebe0c81..6605042 100644
--- a/hw/xfree86/loader/Makefile.am
+++ b/hw/xfree86/loader/Makefile.am
@@ -2,7 +2,7 @@ noinst_LTLIBRARIES = libloader.la
 
 INCLUDES = $(XORG_INCS) -I$(srcdir)/../parser -I$(top_srcdir)/miext/cw \
 	   -I$(srcdir)/../ddc -I$(srcdir)/../i2c -I$(srcdir)/../modes \
-	   -I$(srcdir)/../ramdac
+	   -I$(srcdir)/../ramdac -I$(srcdir)/../dri
 
 #AM_LDFLAGS = -r
 AM_CFLAGS = $(DIX_CFLAGS) $(XORG_CFLAGS)
diff --git a/hw/xfree86/loader/loadmod.c b/hw/xfree86/loader/loadmod.c
index 1ec4ff0..1ef8791 100644
--- a/hw/xfree86/loader/loadmod.c
+++ b/hw/xfree86/loader/loadmod.c
@@ -836,6 +836,7 @@ static const char *compiled_in_modules[] = {
     "dbe",
     "record",
     "extmod",
+    "dri",
     NULL
 };
 
diff --git a/hw/xfree86/sdksyms.sh b/hw/xfree86/sdksyms.sh
index f3d7640..d8a7efb 100755
--- a/hw/xfree86/sdksyms.sh
+++ b/hw/xfree86/sdksyms.sh
@@ -203,13 +203,11 @@ cat > sdksyms.c << EOF
 
 
 /* hw/xfree86/dri/Makefile.am -- module */
-/*
 #if XF86DRI
 # include "dri.h"
 # include "sarea.h"
 # include "dristruct.h"
 #endif
- */
 
 
 /* mi/Makefile.am */
diff --git a/test/Makefile.am b/test/Makefile.am
index 15c51ed..b388888 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -18,7 +18,7 @@ if XORG
 INCLUDES += -I$(top_srcdir)/hw/xfree86/parser \
 	-I$(top_srcdir)/hw/xfree86/ddc \
 	-I$(top_srcdir)/hw/xfree86/i2c -I$(top_srcdir)/hw/xfree86/modes \
-	-I$(top_srcdir)/hw/xfree86/ramdac
+	-I$(top_srcdir)/hw/xfree86/ramdac -I$(top_srcdir)/hw/xfree86/dri
 endif
 TEST_LDADD=libxservertest.la $(XORG_SYS_LIBS) $(XSERVER_SYS_LIBS) $(GLX_SYS_LIBS)
 
@@ -42,6 +42,7 @@ os_LDADD=$(TEST_LDADD)
 
 libxservertest_la_LIBADD = $(XSERVER_LIBS)
 if XORG
+
 nodist_libxservertest_la_SOURCES = $(top_builddir)/hw/xfree86/sdksyms.c
 libxservertest_la_LIBADD += \
             $(top_builddir)/hw/xfree86/loader/libloader.la \
@@ -56,6 +57,10 @@ libxservertest_la_LIBADD += \
             $(top_builddir)/hw/xfree86/dixmods/libxorgxkb.la \
             @XORG_LIBS@
 
+if DRI
+libxservertest_la_LIBADD += $(top_builddir)/hw/xfree86/dri/libdri.la
+endif
+
 else
 nodist_libxservertest_la_SOURCES = \
             ddxstubs.c \
commit b905d87ba0a9b045ea41bb1ad36a4f9f1170a1b8
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:03:14 2012 +0100

    Xext: Only build one library
    
    Now that libXextmodule.la is both empty and unused, we can just build
    the one libXext.la for everyone, rather than having Xorg be special and
    unique.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Jamey Sharp <jamey at minilop.net>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/Xext/Makefile.am b/Xext/Makefile.am
index 0420951..8e31f13 100644
--- a/Xext/Makefile.am
+++ b/Xext/Makefile.am
@@ -1,14 +1,4 @@
-# libXext.la:        includes all extensions and should be linked into Xvfb,
-#                    Xnest, Xdmx and Xprt
-# libXextbuiltin.la: includes those extensions that are built directly into
-#                    Xorg by default
-# libXextmodule.la:  includes those extensions that are built into a module
-#                    that Xorg loads
-if XORG
-noinst_LTLIBRARIES = libXext.la libXextbuiltin.la libXextmodule.la
-else
 noinst_LTLIBRARIES = libXext.la
-endif
 
 AM_CFLAGS = $(DIX_CFLAGS)
 
@@ -30,10 +20,6 @@ BUILTIN_SRCS =			\
 	xtest.c
 BUILTIN_LIBS =
 
-# Sources always included in libXextmodule.la & libXext.la. That's right, zero.
-MODULE_SRCS =
-MODULE_LIBS =
-
 # Optional sources included if extension enabled by configure.ac rules
 
 # MIT Shared Memory extension
@@ -107,16 +93,8 @@ endif
 
 # Now take all of the above, mix well, bake for 10 minutes and get libXext*.la
 
-libXext_la_SOURCES =		$(BUILTIN_SRCS) $(MODULE_SRCS)
-libXext_la_LIBADD =		$(BUILTIN_LIBS) $(MODULE_LIBS)
-
-if XORG
-libXextbuiltin_la_SOURCES =	$(BUILTIN_SRCS)
-libXextbuiltin_la_LIBADD = 	$(BUILTIN_LIBS)
-
-libXextmodule_la_SOURCES =	$(MODULE_SRCS)
-libXextmodule_la_LIBADD =	$(MODULE_LIBS)
-endif
+libXext_la_SOURCES =		$(BUILTIN_SRCS)
+libXext_la_LIBADD =		$(BUILTIN_LIBS)
 
 EXTRA_DIST = \
 	$(MITSHM_SRCS) \
diff --git a/configure.ac b/configure.ac
index 14459d6..beeb5fd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -766,7 +766,6 @@ dnl Extension section
 dnl ---------------------------------------------------------------------------
 XEXT_INC='-I$(top_srcdir)/Xext'
 XEXT_LIB='$(top_builddir)/Xext/libXext.la'
-XEXTXORG_LIB='$(top_builddir)/Xext/libXextbuiltin.la'
 
 dnl Optional modules
 VIDEOPROTO="videoproto"
@@ -1605,7 +1604,7 @@ if test "x$XORG" = xyes; then
 	XORG_OSINCS='-I$(top_srcdir)/hw/xfree86/os-support -I$(top_srcdir)/hw/xfree86/os-support/bus -I$(top_srcdir)/os'
 	XORG_INCS="$XORG_DDXINCS $XORG_OSINCS"
 	XORG_CFLAGS="$XORGSERVER_CFLAGS -DHAVE_XORG_CONFIG_H"
-	XORG_LIBS="$COMPOSITE_LIB $FIXES_LIB $XEXTXORG_LIB $DBE_LIB $RECORD_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_SYNC_LIB $MIEXT_DAMAGE_LIB $XI_LIB $XKB_LIB"
+	XORG_LIBS="$COMPOSITE_LIB $FIXES_LIB $XEXT_LIB $DBE_LIB $RECORD_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_SYNC_LIB $MIEXT_DAMAGE_LIB $XI_LIB $XKB_LIB"
 
 	dnl ==================================================================
 	dnl symbol visibility
commit a7a2f9f66ddc27df96557093f3dd266e24eb653b
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:03:13 2012 +0100

    Remove the last remnants of extmod
    
    extmod was originally a big pointless module.  Now it's an empty,
    pointless module.  This commit makes it unexist.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/Xext/Makefile.am b/Xext/Makefile.am
index 957fa67..0420951 100644
--- a/Xext/Makefile.am
+++ b/Xext/Makefile.am
@@ -10,8 +10,6 @@ else
 noinst_LTLIBRARIES = libXext.la
 endif
 
-INCLUDES = -I$(top_srcdir)/hw/xfree86/dixmods/extmod
-
 AM_CFLAGS = $(DIX_CFLAGS)
 
 if XORG
diff --git a/configure.ac b/configure.ac
index fc5e2d9..14459d6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2244,7 +2244,6 @@ hw/xfree86/common/Makefile
 hw/xfree86/common/xf86Build.h
 hw/xfree86/ddc/Makefile
 hw/xfree86/dixmods/Makefile
-hw/xfree86/dixmods/extmod/Makefile
 hw/xfree86/doc/Makefile
 hw/xfree86/dri/Makefile
 hw/xfree86/dri2/Makefile
diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
index 7b68e35..a701d87 100644
--- a/hw/xfree86/common/xf86Config.c
+++ b/hw/xfree86/common/xf86Config.c
@@ -109,7 +109,6 @@
 #endif
 
 static ModuleDefault ModuleDefaults[] = {
-    {.name = "extmod",.toLoad = TRUE,.load_opt = NULL},
 #ifdef GLXEXT
     {.name = "glx",.toLoad = TRUE,.load_opt = NULL},
 #endif
diff --git a/hw/xfree86/dixmods/Makefile.am b/hw/xfree86/dixmods/Makefile.am
index 3aa7d27..1ad122a 100644
--- a/hw/xfree86/dixmods/Makefile.am
+++ b/hw/xfree86/dixmods/Makefile.am
@@ -1,7 +1,5 @@
 noinst_LTLIBRARIES = libdixmods.la libxorgxkb.la
 
-SUBDIRS = extmod
-
 if GLX
 GLXMODS = libglx.la
 endif
diff --git a/hw/xfree86/dixmods/extmod/Makefile.am b/hw/xfree86/dixmods/extmod/Makefile.am
deleted file mode 100644
index d5e0cde..0000000
--- a/hw/xfree86/dixmods/extmod/Makefile.am
+++ /dev/null
@@ -1,12 +0,0 @@
-extsmoduledir = $(moduledir)/extensions
-extsmodule_LTLIBRARIES = libextmod.la
-
-AM_CFLAGS = @DIX_CFLAGS@ @XORG_CFLAGS@
-INCLUDES = @XORG_INCS@ \
-           -I$(top_srcdir)/dbe \
-           -I$(top_srcdir)/hw/xfree86/loader \
-           -I$(top_srcdir)/miext/shadow
-
-libextmod_la_LDFLAGS = -module -avoid-version $(LD_NO_UNDEFINED_FLAG)
-libextmod_la_SOURCES = modinit.c
-libextmod_la_LIBADD = $(top_builddir)/Xext/libXextmodule.la
diff --git a/hw/xfree86/dixmods/extmod/modinit.c b/hw/xfree86/dixmods/extmod/modinit.c
deleted file mode 100644
index 74171cf..0000000
--- a/hw/xfree86/dixmods/extmod/modinit.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 1997 Matthieu Herrb
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Matthieu Herrb not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission.  Matthieu Herrb makes no
- * representations about the suitability of this software for any purpose.
- *  It is provided "as is" without express or implied warranty.
- *
- * MATTHIEU HERRB DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL MATTHIEU HERRB BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include "xf86Module.h"
-#include "xf86Opt.h"
-
-#include <X11/Xproto.h>
-
-#include "extinit.h"
-#include "xf86Extensions.h"
-#include "globals.h"
-
-static MODULESETUPPROTO(extmodSetup);
-
-/*
- * Array describing extensions to be initialized
- */
-static ExtensionModule extensionModules[] = {
-};
-
-static XF86ModuleVersionInfo VersRec = {
-    "extmod",
-    MODULEVENDORSTRING,
-    MODINFOSTRING1,
-    MODINFOSTRING2,
-    XORG_VERSION_CURRENT,
-    1, 0, 0,
-    ABI_CLASS_EXTENSION,
-    ABI_EXTENSION_VERSION,
-    MOD_CLASS_EXTENSION,
-    {0, 0, 0, 0}
-};
-
-/*
- * Data for the loader
- */
-_X_EXPORT XF86ModuleData extmodModuleData = { &VersRec, extmodSetup, NULL };
-
-static pointer
-extmodSetup(pointer module, pointer opts, int *errmaj, int *errmin)
-{
-    int i;
-
-    for (i = 0; i < ARRAY_SIZE(extensionModules); i++)
-	LoadExtension(&extensionModules[i], FALSE);
-
-    /* Need a non-NULL return */
-    return (pointer) 1;
-}
diff --git a/hw/xfree86/loader/loadmod.c b/hw/xfree86/loader/loadmod.c
index 9ce5813..1ec4ff0 100644
--- a/hw/xfree86/loader/loadmod.c
+++ b/hw/xfree86/loader/loadmod.c
@@ -835,6 +835,7 @@ static const char *compiled_in_modules[] = {
     "ramdac",
     "dbe",
     "record",
+    "extmod",
     NULL
 };
 
commit 6e74fdda42fb4bd80fd48e1ae6471bffbb837804
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Wed Jun 22 00:28:18 2011 +0100

    Move XFree86-VidMode from extmod to built-in
    
    As with DGA, move VidMode from being part of extmod to a built-in part
    of the server, if compiled as such.  This is initialised from
    xf86ExtensionInit rather than miinitext because it's wholly dependent on
    the Xorg DDX.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/common/Makefile.am b/hw/xfree86/common/Makefile.am
index ea98449..cb6d0d4 100644
--- a/hw/xfree86/common/Makefile.am
+++ b/hw/xfree86/common/Makefile.am
@@ -47,7 +47,7 @@ libcommon_la_SOURCES = xf86Configure.c xf86Bus.c xf86Config.c \
                       xf86VidMode.c xf86fbman.c xf86cmap.c \
                       xf86Helper.c xf86PM.c xf86Xinput.c xisb.c \
                       xf86Mode.c xorgHelper.c xf86Extensions.h \
-		      xf86Extensions.c \
+		      xf86Extensions.c xf86vmode.c \
                       $(XVSOURCES) $(BUSSOURCES) $(RANDRSOURCES)
 nodist_libcommon_la_SOURCES = xf86DefModeSet.c xf86Build.h
 libcommon_la_LIBADD = $(top_builddir)/config/libconfig.la
diff --git a/hw/xfree86/common/xf86Extensions.c b/hw/xfree86/common/xf86Extensions.c
index 5ee6be8..63950e6 100644
--- a/hw/xfree86/common/xf86Extensions.c
+++ b/hw/xfree86/common/xf86Extensions.c
@@ -45,10 +45,24 @@
 #include <X11/extensions/xf86dgaproto.h>
 #endif
 
+#ifdef XF86VIDMODE
+#include <X11/extensions/xf86vmproto.h>
+#include "vidmodeproc.h"
+#endif
+
 /*
  * DDX-specific extensions.
  */
 static ExtensionModule extensionModules[] = {
+#ifdef XF86VIDMODE
+    {
+	XFree86VidModeExtensionInit,
+	XF86VIDMODENAME,
+	&noXFree86VidModeExtension,
+	NULL,
+	NULL
+    },
+#endif
 #ifdef XFreeXDGA
     {
 	XFree86DGAExtensionInit,
diff --git a/hw/xfree86/common/xf86vmode.c b/hw/xfree86/common/xf86vmode.c
new file mode 100644
index 0000000..7cd2eed
--- /dev/null
+++ b/hw/xfree86/common/xf86vmode.c
@@ -0,0 +1,2165 @@
+
+/*
+
+Copyright 1995  Kaleb S. KEITHLEY
+
+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 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 Kaleb S. KEITHLEY 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.
+
+Except as contained in this notice, the name of Kaleb S. KEITHLEY 
+shall not be used in advertising or otherwise to promote the sale, use 
+or other dealings in this Software without prior written authorization
+from Kaleb S. KEITHLEY
+
+*/
+/* THIS IS NOT AN X CONSORTIUM STANDARD OR AN X PROJECT TEAM SPECIFICATION */
+
+#ifdef HAVE_XORG_CONFIG_H
+#include <xorg-config.h>
+#endif
+
+#include <X11/X.h>
+#include <X11/Xproto.h>
+#include "misc.h"
+#include "dixstruct.h"
+#include "extnsionst.h"
+#include "xf86Extensions.h"
+#include "scrnintstr.h"
+#include "servermd.h"
+#include <X11/extensions/xf86vmproto.h>
+#include "swaprep.h"
+#include "xf86.h"
+#include "vidmodeproc.h"
+#include "globals.h"
+#include "protocol-versions.h"
+
+#define DEFAULT_XF86VIDMODE_VERBOSITY	3
+
+static int VidModeErrorBase;
+static DevPrivateKeyRec VidModeClientPrivateKeyRec;
+
+#define VidModeClientPrivateKey (&VidModeClientPrivateKeyRec)
+
+/* This holds the client's version information */
+typedef struct {
+    int major;
+    int minor;
+} VidModePrivRec, *VidModePrivPtr;
+
+#define VM_GETPRIV(c) ((VidModePrivPtr) \
+    dixLookupPrivate(&(c)->devPrivates, VidModeClientPrivateKey))
+#define VM_SETPRIV(c,p) \
+    dixSetPrivate(&(c)->devPrivates, VidModeClientPrivateKey, p)
+
+#if 0
+static unsigned char XF86VidModeReqCode = 0;
+#endif
+
+/* The XF86VIDMODE_EVENTS code is far from complete */
+
+#ifdef XF86VIDMODE_EVENTS
+static int XF86VidModeEventBase = 0;
+
+static void SXF86VidModeNotifyEvent(xXF86VidModeNotifyEvent * /* from */ , xXF86VidModeNotifyEvent *    /* to */
+    );
+
+static RESTYPE EventType;       /* resource type for event masks */
+
+typedef struct _XF86VidModeEvent *XF86VidModeEventPtr;
+
+typedef struct _XF86VidModeEvent {
+    XF86VidModeEventPtr next;
+    ClientPtr client;
+    ScreenPtr screen;
+    XID resource;
+    CARD32 mask;
+} XF86VidModeEventRec;
+
+static int XF86VidModeFreeEvents();
+
+typedef struct _XF86VidModeScreenPrivate {
+    XF86VidModeEventPtr events;
+    Bool hasWindow;
+} XF86VidModeScreenPrivateRec, *XF86VidModeScreenPrivatePtr;
+
+static DevPrivateKeyRec ScreenPrivateKeyRec;
+
+#define ScreenPrivateKey (&ScreenPrivateKeyRec)
+
+#define GetScreenPrivate(s) ((ScreenSaverScreenPrivatePtr) \
+    dixLookupPrivate(&(s)->devPrivates, ScreenPrivateKey))
+#define SetScreenPrivate(s,v) \
+    dixSetPrivate(&(s)->devPrivates, ScreenPrivateKey, v)
+#define SetupScreen(s)  ScreenSaverScreenPrivatePtr pPriv = GetScreenPrivate(s)
+
+#define New(t)  (malloc(sizeof (t)))
+#endif
+
+#ifdef DEBUG
+#define DEBUG_P(x) ErrorF(x"\n");
+#else
+#define DEBUG_P(x) /**/
+#endif
+    static int
+ClientMajorVersion(ClientPtr client)
+{
+    VidModePrivPtr pPriv;
+
+    pPriv = VM_GETPRIV(client);
+    if (!pPriv)
+        return 0;
+    else
+        return pPriv->major;
+}
+
+#ifdef XF86VIDMODE_EVENTS
+static void
+CheckScreenPrivate(pScreen)
+ScreenPtr
+ pScreen;
+{
+    SetupScreen(pScreen);
+
+    if (!pPriv)
+        return;
+    if (!pPriv->events && !pPriv->hasWindow) {
+        free(pPriv);
+        SetScreenPrivate(pScreen, NULL);
+    }
+}
+
+static XF86VidModeScreenPrivatePtr
+MakeScreenPrivate(pScreen)
+ScreenPtr
+ pScreen;
+{
+    SetupScreen(pScreen);
+
+    if (pPriv)
+        return pPriv;
+    pPriv = New(XF86VidModeScreenPrivateRec);
+    if (!pPriv)
+        return 0;
+    pPriv->events = 0;
+    pPriv->hasWindow = FALSE;
+    SetScreenPrivate(pScreen, pPriv);
+    return pPriv;
+}
+
+static unsigned long
+getEventMask(ScreenPtr pScreen, ClientPtr client)
+{
+    SetupScreen(pScreen);
+    XF86VidModeEventPtr pEv;
+
+    if (!pPriv)
+        return 0;
+    for (pEv = pPriv->events; pEv; pEv = pEv->next)
+        if (pEv->client == client)
+            return pEv->mask;
+    return 0;
+}
+
+static Bool
+setEventMask(ScreenPtr pScreen, ClientPtr client, unsigned long mask)
+{
+    SetupScreen(pScreen);
+    XF86VidModeEventPtr pEv, *pPrev;
+
+    if (getEventMask(pScreen, client) == mask)
+        return TRUE;
+    if (!pPriv) {
+        pPriv = MakeScreenPrivate(pScreen);
+        if (!pPriv)
+            return FALSE;
+    }
+    for (pPrev = &pPriv->events; pEv = *pPrev; pPrev = &pEv->next)
+        if (pEv->client == client)
+            break;
+    if (mask == 0) {
+        *pPrev = pEv->next;
+        free(pEv);
+        CheckScreenPrivate(pScreen);
+    }
+    else {
+        if (!pEv) {
+            pEv = New(ScreenSaverEventRec);
+            if (!pEv) {
+                CheckScreenPrivate(pScreen);
+                return FALSE;
+            }
+            *pPrev = pEv;
+            pEv->next = NULL;
+            pEv->client = client;
+            pEv->screen = pScreen;
+            pEv->resource = FakeClientID(client->index);
+        }
+        pEv->mask = mask;
+    }
+    return TRUE;
+}
+
+static int
+XF86VidModeFreeEvents(pointer value, XID id)
+{
+    XF86VidModeEventPtr pOld = (XF86VidModeEventPtr) value;
+    ScreenPtr pScreen = pOld->screen;
+
+    SetupScreen(pScreen);
+    XF86VidModeEventPtr pEv, *pPrev;
+
+    if (!pPriv)
+        return TRUE;
+    for (pPrev = &pPriv->events; pEv = *pPrev; pPrev = &pEv->next)
+        if (pEv == pOld)
+            break;
+    if (!pEv)
+        return TRUE;
+    *pPrev = pEv->next;
+    free(pEv);
+    CheckScreenPrivate(pScreen);
+    return TRUE;
+}
+
+static void
+SendXF86VidModeNotify(ScreenPtr pScreen, int state, Bool forced)
+{
+    XF86VidModeScreenPrivatePtr pPriv;
+    unsigned long mask;
+    xXF86VidModeNotifyEvent ev;
+    int kind;
+
+    UpdateCurrentTimeIf();
+    mask = XF86VidModeNotifyMask;
+    pScreen = screenInfo.screens[pScreen->myNum];
+    pPriv = GetScreenPrivate(pScreen);
+    if (!pPriv)
+        return;
+    kind = XF86VidModeModeChange;
+    for (pEv = pPriv->events; pEv; pEv = pEv->next) {
+        if (pEv->mask & mask) {
+            XF86VidModeEventPtr pEv = {
+                .type = XF86VidModeNotify + XF86VidModeEventBase,
+                .state = state,
+                .timestamp = currentTime.milliseconds,
+                .root = pScreen->root->drawable.id,
+                .kind = kind,
+                .forced = forced
+            };
+            WriteEventsToClient(pEv->client, 1, (xEvent *) &ev);
+        }
+    }
+}
+
+static void
+SXF86VidModeNotifyEvent(xXF86VidModeNotifyEvent * from,
+                        xXF86VidModeNotifyEvent * to)
+{
+    to->type = from->type;
+    to->state = from->state;
+    cpswaps(from->sequenceNumber, to->sequenceNumber);
+    cpswapl(from->timestamp, to->timestamp);
+    cpswapl(from->root, to->root);
+    to->kind = from->kind;
+    to->forced = from->forced;
+}
+#endif
+
+static int
+ProcXF86VidModeQueryVersion(ClientPtr client)
+{
+    xXF86VidModeQueryVersionReply rep = {
+        .type = X_Reply,
+        .sequenceNumber = client->sequence,
+        .length = 0,
+        .majorVersion = SERVER_XF86VIDMODE_MAJOR_VERSION,
+        .minorVersion = SERVER_XF86VIDMODE_MINOR_VERSION
+    };
+
+    DEBUG_P("XF86VidModeQueryVersion");
+
+    REQUEST_SIZE_MATCH(xXF86VidModeQueryVersionReq);
+
+    if (client->swapped) {
+        swaps(&rep.sequenceNumber);
+        swapl(&rep.length);
+        swaps(&rep.majorVersion);
+        swaps(&rep.minorVersion);
+    }
+    WriteToClient(client, sizeof(xXF86VidModeQueryVersionReply), &rep);
+    return Success;
+}
+
+static int
+ProcXF86VidModeGetModeLine(ClientPtr client)
+{
+    REQUEST(xXF86VidModeGetModeLineReq);
+    xXF86VidModeGetModeLineReply rep = {
+        .type = X_Reply,
+        .sequenceNumber = client->sequence
+    };
+    pointer mode;
+    int dotClock;
+    int ver;
+
+    DEBUG_P("XF86VidModeGetModeline");
+
+    ver = ClientMajorVersion(client);
+    REQUEST_SIZE_MATCH(xXF86VidModeGetModeLineReq);
+
+    if (ver < 2) {
+        rep.length = bytes_to_int32(SIZEOF(xXF86OldVidModeGetModeLineReply) -
+                                    SIZEOF(xGenericReply));
+    }
+    else {
+        rep.length = bytes_to_int32(SIZEOF(xXF86VidModeGetModeLineReply) -
+                                    SIZEOF(xGenericReply));
+    }
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    if (!VidModeGetCurrentModeline(stuff->screen, &mode, &dotClock))
+        return BadValue;
+
+    rep.dotclock = dotClock;
+    rep.hdisplay = VidModeGetModeValue(mode, VIDMODE_H_DISPLAY);
+    rep.hsyncstart = VidModeGetModeValue(mode, VIDMODE_H_SYNCSTART);
+    rep.hsyncend = VidModeGetModeValue(mode, VIDMODE_H_SYNCEND);
+    rep.htotal = VidModeGetModeValue(mode, VIDMODE_H_TOTAL);
+    rep.hskew = VidModeGetModeValue(mode, VIDMODE_H_SKEW);
+    rep.vdisplay = VidModeGetModeValue(mode, VIDMODE_V_DISPLAY);
+    rep.vsyncstart = VidModeGetModeValue(mode, VIDMODE_V_SYNCSTART);
+    rep.vsyncend = VidModeGetModeValue(mode, VIDMODE_V_SYNCEND);
+    rep.vtotal = VidModeGetModeValue(mode, VIDMODE_V_TOTAL);
+    rep.flags = VidModeGetModeValue(mode, VIDMODE_FLAGS);
+
+    if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY) {
+        ErrorF("GetModeLine - scrn: %d clock: %ld\n",
+               stuff->screen, (unsigned long) rep.dotclock);
+        ErrorF("GetModeLine - hdsp: %d hbeg: %d hend: %d httl: %d\n",
+               rep.hdisplay, rep.hsyncstart, rep.hsyncend, rep.htotal);
+        ErrorF("              vdsp: %d vbeg: %d vend: %d vttl: %d flags: %ld\n",
+               rep.vdisplay, rep.vsyncstart, rep.vsyncend,
+               rep.vtotal, (unsigned long) rep.flags);
+    }
+
+    /*
+     * Older servers sometimes had server privates that the VidMode 
+     * extention made available. So to be compatiable pretend that
+     * there are no server privates to pass to the client
+     */
+    rep.privsize = 0;
+
+    if (client->swapped) {
+        swaps(&rep.sequenceNumber);
+        swapl(&rep.length);
+        swapl(&rep.dotclock);
+        swaps(&rep.hdisplay);
+        swaps(&rep.hsyncstart);
+        swaps(&rep.hsyncend);
+        swaps(&rep.htotal);
+        swaps(&rep.hskew);
+        swaps(&rep.vdisplay);
+        swaps(&rep.vsyncstart);
+        swaps(&rep.vsyncend);
+        swaps(&rep.vtotal);
+        swapl(&rep.flags);
+        swapl(&rep.privsize);
+    }
+    if (ver < 2) {
+        xXF86OldVidModeGetModeLineReply oldrep = {
+            .type = rep.type,
+            .sequenceNumber = rep.sequenceNumber,
+            .length = rep.length,
+            .dotclock = rep.dotclock,
+            .hdisplay = rep.hdisplay,
+            .hsyncstart = rep.hsyncstart,
+            .hsyncend = rep.hsyncend,
+            .htotal = rep.htotal,
+            .vdisplay = rep.vdisplay,
+            .vsyncstart = rep.vsyncstart,
+            .vsyncend = rep.vsyncend,
+            .vtotal = rep.vtotal,
+            .flags = rep.flags,
+            .privsize = rep.privsize
+        };
+        WriteToClient(client, sizeof(xXF86OldVidModeGetModeLineReply), &oldrep);
+    }
+    else {
+        WriteToClient(client, sizeof(xXF86VidModeGetModeLineReply), &rep);
+    }
+    return Success;
+}
+
+static int
+ProcXF86VidModeGetAllModeLines(ClientPtr client)
+{
+    REQUEST(xXF86VidModeGetAllModeLinesReq);
+    xXF86VidModeGetAllModeLinesReply rep;
+    pointer mode;
+    int modecount, dotClock;
+    int ver;
+
+    DEBUG_P("XF86VidModeGetAllModelines");
+
+    REQUEST_SIZE_MATCH(xXF86VidModeGetAllModeLinesReq);
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    ver = ClientMajorVersion(client);
+
+    modecount = VidModeGetNumOfModes(stuff->screen);
+    if (modecount < 1)
+        return VidModeErrorBase + XF86VidModeExtensionDisabled;
+
+    if (!VidModeGetFirstModeline(stuff->screen, &mode, &dotClock))
+        return BadValue;
+
+    rep = (xXF86VidModeGetAllModeLinesReply) {
+        .type = X_Reply,
+        .length = SIZEOF(xXF86VidModeGetAllModeLinesReply) -
+            SIZEOF(xGenericReply),
+        .sequenceNumber = client->sequence,
+        .modecount = modecount
+    };
+    if (ver < 2)
+        rep.length += modecount * sizeof(xXF86OldVidModeModeInfo);
+    else
+        rep.length += modecount * sizeof(xXF86VidModeModeInfo);
+    rep.length >>= 2;
+    if (client->swapped) {
+        swaps(&rep.sequenceNumber);
+        swapl(&rep.length);
+        swapl(&rep.modecount);
+    }
+    WriteToClient(client, sizeof(xXF86VidModeGetAllModeLinesReply), &rep);
+
+    do {
+        xXF86VidModeModeInfo mdinf = {
+            .dotclock = dotClock,
+            .hdisplay = VidModeGetModeValue(mode, VIDMODE_H_DISPLAY),
+            .hsyncstart = VidModeGetModeValue(mode, VIDMODE_H_SYNCSTART),
+            .hsyncend = VidModeGetModeValue(mode, VIDMODE_H_SYNCEND),
+            .htotal = VidModeGetModeValue(mode, VIDMODE_H_TOTAL),
+            .hskew = VidModeGetModeValue(mode, VIDMODE_H_SKEW),
+            .vdisplay = VidModeGetModeValue(mode, VIDMODE_V_DISPLAY),
+            .vsyncstart = VidModeGetModeValue(mode, VIDMODE_V_SYNCSTART),
+            .vsyncend = VidModeGetModeValue(mode, VIDMODE_V_SYNCEND),
+            .vtotal = VidModeGetModeValue(mode, VIDMODE_V_TOTAL),
+            .flags = VidModeGetModeValue(mode, VIDMODE_FLAGS),
+            .privsize = 0
+        };
+        if (client->swapped) {
+            swapl(&mdinf.dotclock);
+            swaps(&mdinf.hdisplay);
+            swaps(&mdinf.hsyncstart);
+            swaps(&mdinf.hsyncend);
+            swaps(&mdinf.htotal);
+            swapl(&mdinf.hskew);
+            swaps(&mdinf.vdisplay);
+            swaps(&mdinf.vsyncstart);
+            swaps(&mdinf.vsyncend);
+            swaps(&mdinf.vtotal);
+            swapl(&mdinf.flags);
+            swapl(&mdinf.privsize);
+        }
+        if (ver < 2) {
+            xXF86OldVidModeModeInfo oldmdinf = {
+                .dotclock = mdinf.dotclock,
+                .hdisplay = mdinf.hdisplay,
+                .hsyncstart = mdinf.hsyncstart,
+                .hsyncend = mdinf.hsyncend,
+                .htotal = mdinf.htotal,
+                .vdisplay = mdinf.vdisplay,
+                .vsyncstart = mdinf.vsyncstart,
+                .vsyncend = mdinf.vsyncend,
+                .vtotal = mdinf.vtotal,
+                .flags = mdinf.flags,
+                .privsize = mdinf.privsize
+            };
+            WriteToClient(client, sizeof(xXF86OldVidModeModeInfo), &oldmdinf);
+        }
+        else {
+            WriteToClient(client, sizeof(xXF86VidModeModeInfo), &mdinf);
+        }
+
+    } while (VidModeGetNextModeline(stuff->screen, &mode, &dotClock));
+
+    return Success;
+}
+
+#define MODEMATCH(mode,stuff)	  \
+     (VidModeGetModeValue(mode, VIDMODE_H_DISPLAY)  == stuff->hdisplay \
+     && VidModeGetModeValue(mode, VIDMODE_H_SYNCSTART)  == stuff->hsyncstart \
+     && VidModeGetModeValue(mode, VIDMODE_H_SYNCEND)  == stuff->hsyncend \
+     && VidModeGetModeValue(mode, VIDMODE_H_TOTAL)  == stuff->htotal \
+     && VidModeGetModeValue(mode, VIDMODE_V_DISPLAY)  == stuff->vdisplay \
+     && VidModeGetModeValue(mode, VIDMODE_V_SYNCSTART)  == stuff->vsyncstart \
+     && VidModeGetModeValue(mode, VIDMODE_V_SYNCEND)  == stuff->vsyncend \
+     && VidModeGetModeValue(mode, VIDMODE_V_TOTAL)  == stuff->vtotal \
+     && VidModeGetModeValue(mode, VIDMODE_FLAGS)  == stuff->flags )
+
+static int
+ProcXF86VidModeAddModeLine(ClientPtr client)
+{
+    REQUEST(xXF86VidModeAddModeLineReq);
+    xXF86OldVidModeAddModeLineReq *oldstuff =
+        (xXF86OldVidModeAddModeLineReq *) client->requestBuffer;
+    xXF86VidModeAddModeLineReq newstuff;
+    pointer mode;
+    int len;
+    int dotClock;
+    int ver;
+
+    DEBUG_P("XF86VidModeAddModeline");
+
+    ver = ClientMajorVersion(client);
+    if (ver < 2) {
+        /* convert from old format */
+        stuff = &newstuff;
+        stuff->length = oldstuff->length;
+        stuff->screen = oldstuff->screen;
+        stuff->dotclock = oldstuff->dotclock;
+        stuff->hdisplay = oldstuff->hdisplay;
+        stuff->hsyncstart = oldstuff->hsyncstart;
+        stuff->hsyncend = oldstuff->hsyncend;
+        stuff->htotal = oldstuff->htotal;
+        stuff->hskew = 0;
+        stuff->vdisplay = oldstuff->vdisplay;
+        stuff->vsyncstart = oldstuff->vsyncstart;
+        stuff->vsyncend = oldstuff->vsyncend;
+        stuff->vtotal = oldstuff->vtotal;
+        stuff->flags = oldstuff->flags;
+        stuff->privsize = oldstuff->privsize;
+        stuff->after_dotclock = oldstuff->after_dotclock;
+        stuff->after_hdisplay = oldstuff->after_hdisplay;
+        stuff->after_hsyncstart = oldstuff->after_hsyncstart;
+        stuff->after_hsyncend = oldstuff->after_hsyncend;
+        stuff->after_htotal = oldstuff->after_htotal;
+        stuff->after_hskew = 0;
+        stuff->after_vdisplay = oldstuff->after_vdisplay;
+        stuff->after_vsyncstart = oldstuff->after_vsyncstart;
+        stuff->after_vsyncend = oldstuff->after_vsyncend;
+        stuff->after_vtotal = oldstuff->after_vtotal;
+        stuff->after_flags = oldstuff->after_flags;
+    }
+    if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY) {
+        ErrorF("AddModeLine - scrn: %d clock: %ld\n",
+               (int) stuff->screen, (unsigned long) stuff->dotclock);
+        ErrorF("AddModeLine - hdsp: %d hbeg: %d hend: %d httl: %d\n",
+               stuff->hdisplay, stuff->hsyncstart,
+               stuff->hsyncend, stuff->htotal);
+        ErrorF("              vdsp: %d vbeg: %d vend: %d vttl: %d flags: %ld\n",
+               stuff->vdisplay, stuff->vsyncstart, stuff->vsyncend,
+               stuff->vtotal, (unsigned long) stuff->flags);
+        ErrorF("      after - scrn: %d clock: %ld\n",
+               (int) stuff->screen, (unsigned long) stuff->after_dotclock);
+        ErrorF("              hdsp: %d hbeg: %d hend: %d httl: %d\n",
+               stuff->after_hdisplay, stuff->after_hsyncstart,
+               stuff->after_hsyncend, stuff->after_htotal);
+        ErrorF("              vdsp: %d vbeg: %d vend: %d vttl: %d flags: %ld\n",
+               stuff->after_vdisplay, stuff->after_vsyncstart,
+               stuff->after_vsyncend, stuff->after_vtotal,
+               (unsigned long) stuff->after_flags);
+    }
+
+    if (ver < 2) {
+        REQUEST_AT_LEAST_SIZE(xXF86OldVidModeAddModeLineReq);
+        len =
+            client->req_len -
+            bytes_to_int32(sizeof(xXF86OldVidModeAddModeLineReq));
+    }
+    else {
+        REQUEST_AT_LEAST_SIZE(xXF86VidModeAddModeLineReq);
+        len =
+            client->req_len -
+            bytes_to_int32(sizeof(xXF86VidModeAddModeLineReq));
+    }
+    if (len != stuff->privsize)
+        return BadLength;
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    if (stuff->hsyncstart < stuff->hdisplay ||
+        stuff->hsyncend < stuff->hsyncstart ||
+        stuff->htotal < stuff->hsyncend ||
+        stuff->vsyncstart < stuff->vdisplay ||
+        stuff->vsyncend < stuff->vsyncstart || stuff->vtotal < stuff->vsyncend)
+        return BadValue;
+
+    if (stuff->after_hsyncstart < stuff->after_hdisplay ||
+        stuff->after_hsyncend < stuff->after_hsyncstart ||
+        stuff->after_htotal < stuff->after_hsyncend ||
+        stuff->after_vsyncstart < stuff->after_vdisplay ||
+        stuff->after_vsyncend < stuff->after_vsyncstart ||
+        stuff->after_vtotal < stuff->after_vsyncend)
+        return BadValue;
+
+    if (stuff->after_htotal != 0 || stuff->after_vtotal != 0) {
+        Bool found = FALSE;
+
+        if (VidModeGetFirstModeline(stuff->screen, &mode, &dotClock)) {
+            do {
+                if ((VidModeGetDotClock(stuff->screen, stuff->dotclock)
+                     == dotClock) && MODEMATCH(mode, stuff)) {
+                    found = TRUE;
+                    break;
+                }
+            } while (VidModeGetNextModeline(stuff->screen, &mode, &dotClock));
+        }
+        if (!found)
+            return BadValue;
+    }
+
+    mode = VidModeCreateMode();
+    if (mode == NULL)
+        return BadValue;
+
+    VidModeSetModeValue(mode, VIDMODE_CLOCK, stuff->dotclock);
+    VidModeSetModeValue(mode, VIDMODE_H_DISPLAY, stuff->hdisplay);
+    VidModeSetModeValue(mode, VIDMODE_H_SYNCSTART, stuff->hsyncstart);
+    VidModeSetModeValue(mode, VIDMODE_H_SYNCEND, stuff->hsyncend);
+    VidModeSetModeValue(mode, VIDMODE_H_TOTAL, stuff->htotal);
+    VidModeSetModeValue(mode, VIDMODE_H_SKEW, stuff->hskew);
+    VidModeSetModeValue(mode, VIDMODE_V_DISPLAY, stuff->vdisplay);
+    VidModeSetModeValue(mode, VIDMODE_V_SYNCSTART, stuff->vsyncstart);
+    VidModeSetModeValue(mode, VIDMODE_V_SYNCEND, stuff->vsyncend);
+    VidModeSetModeValue(mode, VIDMODE_V_TOTAL, stuff->vtotal);
+    VidModeSetModeValue(mode, VIDMODE_FLAGS, stuff->flags);
+
+    if (stuff->privsize)
+        ErrorF("AddModeLine - Privates in request have been ignored\n");
+
+    /* Check that the mode is consistent with the monitor specs */
+    switch (VidModeCheckModeForMonitor(stuff->screen, mode)) {
+    case MODE_OK:
+        break;
+    case MODE_HSYNC:
+    case MODE_H_ILLEGAL:
+        free(mode);
+        return VidModeErrorBase + XF86VidModeBadHTimings;
+    case MODE_VSYNC:
+    case MODE_V_ILLEGAL:
+        free(mode);
+        return VidModeErrorBase + XF86VidModeBadVTimings;
+    default:
+        free(mode);
+        return VidModeErrorBase + XF86VidModeModeUnsuitable;
+    }
+
+    /* Check that the driver is happy with the mode */
+    if (VidModeCheckModeForDriver(stuff->screen, mode) != MODE_OK) {
+        free(mode);
+        return VidModeErrorBase + XF86VidModeModeUnsuitable;
+    }
+
+    VidModeSetCrtcForMode(stuff->screen, mode);
+
+    VidModeAddModeline(stuff->screen, mode);
+
+    if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY)
+        ErrorF("AddModeLine - Succeeded\n");
+    return Success;
+}
+
+static int
+ProcXF86VidModeDeleteModeLine(ClientPtr client)
+{
+    REQUEST(xXF86VidModeDeleteModeLineReq);
+    xXF86OldVidModeDeleteModeLineReq *oldstuff =
+        (xXF86OldVidModeDeleteModeLineReq *) client->requestBuffer;
+    xXF86VidModeDeleteModeLineReq newstuff;
+    pointer mode;
+    int len, dotClock;
+    int ver;
+
+    DEBUG_P("XF86VidModeDeleteModeline");
+
+    ver = ClientMajorVersion(client);
+    if (ver < 2) {
+        /* convert from old format */
+        stuff = &newstuff;
+        stuff->length = oldstuff->length;
+        stuff->screen = oldstuff->screen;
+        stuff->dotclock = oldstuff->dotclock;
+        stuff->hdisplay = oldstuff->hdisplay;
+        stuff->hsyncstart = oldstuff->hsyncstart;
+        stuff->hsyncend = oldstuff->hsyncend;
+        stuff->htotal = oldstuff->htotal;
+        stuff->hskew = 0;
+        stuff->vdisplay = oldstuff->vdisplay;
+        stuff->vsyncstart = oldstuff->vsyncstart;
+        stuff->vsyncend = oldstuff->vsyncend;
+        stuff->vtotal = oldstuff->vtotal;
+        stuff->flags = oldstuff->flags;
+        stuff->privsize = oldstuff->privsize;
+    }
+    if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY) {
+        ErrorF("DeleteModeLine - scrn: %d clock: %ld\n",
+               (int) stuff->screen, (unsigned long) stuff->dotclock);
+        ErrorF("                 hdsp: %d hbeg: %d hend: %d httl: %d\n",
+               stuff->hdisplay, stuff->hsyncstart,
+               stuff->hsyncend, stuff->htotal);
+        ErrorF
+            ("                 vdsp: %d vbeg: %d vend: %d vttl: %d flags: %ld\n",
+             stuff->vdisplay, stuff->vsyncstart, stuff->vsyncend, stuff->vtotal,
+             (unsigned long) stuff->flags);
+    }
+
+    if (ver < 2) {
+        REQUEST_AT_LEAST_SIZE(xXF86OldVidModeDeleteModeLineReq);
+        len =
+            client->req_len -
+            bytes_to_int32(sizeof(xXF86OldVidModeDeleteModeLineReq));
+    }
+    else {
+        REQUEST_AT_LEAST_SIZE(xXF86VidModeDeleteModeLineReq);
+        len =
+            client->req_len -
+            bytes_to_int32(sizeof(xXF86VidModeDeleteModeLineReq));
+    }
+    if (len != stuff->privsize) {
+        if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY) {
+            ErrorF("req_len = %ld, sizeof(Req) = %d, privsize = %ld, "
+                   "len = %d, length = %d\n",
+                   (unsigned long) client->req_len,
+                   (int) sizeof(xXF86VidModeDeleteModeLineReq) >> 2,
+                   (unsigned long) stuff->privsize, len, stuff->length);
+        }
+        return BadLength;
+    }
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    if (!VidModeGetCurrentModeline(stuff->screen, &mode, &dotClock))
+        return BadValue;
+
+    if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY) {
+        ErrorF("Checking against clock: %d (%d)\n",
+               VidModeGetModeValue(mode, VIDMODE_CLOCK), dotClock);
+        ErrorF("                 hdsp: %d hbeg: %d hend: %d httl: %d\n",
+               VidModeGetModeValue(mode, VIDMODE_H_DISPLAY),
+               VidModeGetModeValue(mode, VIDMODE_H_SYNCSTART),
+               VidModeGetModeValue(mode, VIDMODE_H_SYNCEND),
+               VidModeGetModeValue(mode, VIDMODE_H_TOTAL));
+        ErrorF
+            ("                 vdsp: %d vbeg: %d vend: %d vttl: %d flags: %d\n",
+             VidModeGetModeValue(mode, VIDMODE_V_DISPLAY),
+             VidModeGetModeValue(mode, VIDMODE_V_SYNCSTART),
+             VidModeGetModeValue(mode, VIDMODE_V_SYNCEND),
+             VidModeGetModeValue(mode, VIDMODE_V_TOTAL),
+             VidModeGetModeValue(mode, VIDMODE_FLAGS));
+    }
+    if ((VidModeGetDotClock(stuff->screen, stuff->dotclock) == dotClock) &&
+        MODEMATCH(mode, stuff))
+        return BadValue;
+
+    if (!VidModeGetFirstModeline(stuff->screen, &mode, &dotClock))
+        return BadValue;
+
+    do {
+        if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY) {
+            ErrorF("Checking against clock: %d (%d)\n",
+                   VidModeGetModeValue(mode, VIDMODE_CLOCK), dotClock);
+            ErrorF("                 hdsp: %d hbeg: %d hend: %d httl: %d\n",
+                   VidModeGetModeValue(mode, VIDMODE_H_DISPLAY),
+                   VidModeGetModeValue(mode, VIDMODE_H_SYNCSTART),
+                   VidModeGetModeValue(mode, VIDMODE_H_SYNCEND),
+                   VidModeGetModeValue(mode, VIDMODE_H_TOTAL));
+            ErrorF
+                ("                 vdsp: %d vbeg: %d vend: %d vttl: %d flags: %d\n",
+                 VidModeGetModeValue(mode, VIDMODE_V_DISPLAY),
+                 VidModeGetModeValue(mode, VIDMODE_V_SYNCSTART),
+                 VidModeGetModeValue(mode, VIDMODE_V_SYNCEND),
+                 VidModeGetModeValue(mode, VIDMODE_V_TOTAL),
+                 VidModeGetModeValue(mode, VIDMODE_FLAGS));
+        }
+        if ((VidModeGetDotClock(stuff->screen, stuff->dotclock) == dotClock) &&
+            MODEMATCH(mode, stuff)) {
+            VidModeDeleteModeline(stuff->screen, mode);
+            if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY)
+                ErrorF("DeleteModeLine - Succeeded\n");
+            return Success;
+        }
+    } while (VidModeGetNextModeline(stuff->screen, &mode, &dotClock));
+
+    return BadValue;
+}
+
+static int
+ProcXF86VidModeModModeLine(ClientPtr client)
+{
+    REQUEST(xXF86VidModeModModeLineReq);
+    xXF86OldVidModeModModeLineReq *oldstuff =
+        (xXF86OldVidModeModModeLineReq *) client->requestBuffer;
+    xXF86VidModeModModeLineReq newstuff;
+    pointer mode, modetmp;
+    int len, dotClock;
+    int ver;
+
+    DEBUG_P("XF86VidModeModModeline");
+
+    ver = ClientMajorVersion(client);
+    if (ver < 2) {
+        /* convert from old format */
+        stuff = &newstuff;
+        stuff->length = oldstuff->length;
+        stuff->screen = oldstuff->screen;
+        stuff->hdisplay = oldstuff->hdisplay;
+        stuff->hsyncstart = oldstuff->hsyncstart;
+        stuff->hsyncend = oldstuff->hsyncend;
+        stuff->htotal = oldstuff->htotal;
+        stuff->hskew = 0;
+        stuff->vdisplay = oldstuff->vdisplay;
+        stuff->vsyncstart = oldstuff->vsyncstart;
+        stuff->vsyncend = oldstuff->vsyncend;
+        stuff->vtotal = oldstuff->vtotal;
+        stuff->flags = oldstuff->flags;
+        stuff->privsize = oldstuff->privsize;
+    }
+    if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY) {
+        ErrorF("ModModeLine - scrn: %d hdsp: %d hbeg: %d hend: %d httl: %d\n",
+               (int) stuff->screen, stuff->hdisplay, stuff->hsyncstart,
+               stuff->hsyncend, stuff->htotal);
+        ErrorF("              vdsp: %d vbeg: %d vend: %d vttl: %d flags: %ld\n",
+               stuff->vdisplay, stuff->vsyncstart, stuff->vsyncend,
+               stuff->vtotal, (unsigned long) stuff->flags);
+    }
+
+    if (ver < 2) {
+        REQUEST_AT_LEAST_SIZE(xXF86OldVidModeModModeLineReq);
+        len =
+            client->req_len -
+            bytes_to_int32(sizeof(xXF86OldVidModeModModeLineReq));
+    }
+    else {
+        REQUEST_AT_LEAST_SIZE(xXF86VidModeModModeLineReq);
+        len =
+            client->req_len -
+            bytes_to_int32(sizeof(xXF86VidModeModModeLineReq));
+    }
+    if (len != stuff->privsize)
+        return BadLength;
+
+    if (stuff->hsyncstart < stuff->hdisplay ||
+        stuff->hsyncend < stuff->hsyncstart ||
+        stuff->htotal < stuff->hsyncend ||
+        stuff->vsyncstart < stuff->vdisplay ||
+        stuff->vsyncend < stuff->vsyncstart || stuff->vtotal < stuff->vsyncend)
+        return BadValue;
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    if (!VidModeGetCurrentModeline(stuff->screen, &mode, &dotClock))
+        return BadValue;
+
+    modetmp = VidModeCreateMode();
+    VidModeCopyMode(mode, modetmp);
+
+    VidModeSetModeValue(modetmp, VIDMODE_H_DISPLAY, stuff->hdisplay);
+    VidModeSetModeValue(modetmp, VIDMODE_H_SYNCSTART, stuff->hsyncstart);
+    VidModeSetModeValue(modetmp, VIDMODE_H_SYNCEND, stuff->hsyncend);
+    VidModeSetModeValue(modetmp, VIDMODE_H_TOTAL, stuff->htotal);
+    VidModeSetModeValue(modetmp, VIDMODE_H_SKEW, stuff->hskew);
+    VidModeSetModeValue(modetmp, VIDMODE_V_DISPLAY, stuff->vdisplay);
+    VidModeSetModeValue(modetmp, VIDMODE_V_SYNCSTART, stuff->vsyncstart);
+    VidModeSetModeValue(modetmp, VIDMODE_V_SYNCEND, stuff->vsyncend);
+    VidModeSetModeValue(modetmp, VIDMODE_V_TOTAL, stuff->vtotal);
+    VidModeSetModeValue(modetmp, VIDMODE_FLAGS, stuff->flags);
+
+    if (stuff->privsize)
+        ErrorF("ModModeLine - Privates in request have been ignored\n");
+
+    /* Check that the mode is consistent with the monitor specs */
+    switch (VidModeCheckModeForMonitor(stuff->screen, modetmp)) {
+    case MODE_OK:
+        break;
+    case MODE_HSYNC:
+    case MODE_H_ILLEGAL:
+        free(modetmp);
+        return VidModeErrorBase + XF86VidModeBadHTimings;
+    case MODE_VSYNC:
+    case MODE_V_ILLEGAL:
+        free(modetmp);
+        return VidModeErrorBase + XF86VidModeBadVTimings;
+    default:
+        free(modetmp);
+        return VidModeErrorBase + XF86VidModeModeUnsuitable;
+    }
+
+    /* Check that the driver is happy with the mode */
+    if (VidModeCheckModeForDriver(stuff->screen, modetmp) != MODE_OK) {
+        free(modetmp);
+        return VidModeErrorBase + XF86VidModeModeUnsuitable;
+    }
+    free(modetmp);
+
+    VidModeSetModeValue(mode, VIDMODE_H_DISPLAY, stuff->hdisplay);
+    VidModeSetModeValue(mode, VIDMODE_H_SYNCSTART, stuff->hsyncstart);
+    VidModeSetModeValue(mode, VIDMODE_H_SYNCEND, stuff->hsyncend);
+    VidModeSetModeValue(mode, VIDMODE_H_TOTAL, stuff->htotal);
+    VidModeSetModeValue(mode, VIDMODE_H_SKEW, stuff->hskew);
+    VidModeSetModeValue(mode, VIDMODE_V_DISPLAY, stuff->vdisplay);
+    VidModeSetModeValue(mode, VIDMODE_V_SYNCSTART, stuff->vsyncstart);
+    VidModeSetModeValue(mode, VIDMODE_V_SYNCEND, stuff->vsyncend);
+    VidModeSetModeValue(mode, VIDMODE_V_TOTAL, stuff->vtotal);
+    VidModeSetModeValue(mode, VIDMODE_FLAGS, stuff->flags);
+
+    VidModeSetCrtcForMode(stuff->screen, mode);
+    VidModeSwitchMode(stuff->screen, mode);
+
+    if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY)
+        ErrorF("ModModeLine - Succeeded\n");
+    return Success;
+}
+
+static int
+ProcXF86VidModeValidateModeLine(ClientPtr client)
+{
+    REQUEST(xXF86VidModeValidateModeLineReq);
+    xXF86OldVidModeValidateModeLineReq *oldstuff =
+        (xXF86OldVidModeValidateModeLineReq *) client->requestBuffer;
+    xXF86VidModeValidateModeLineReq newstuff;
+    xXF86VidModeValidateModeLineReply rep;
+    pointer mode, modetmp = NULL;
+    int len, status, dotClock;
+    int ver;
+
+    DEBUG_P("XF86VidModeValidateModeline");
+
+    ver = ClientMajorVersion(client);
+    if (ver < 2) {
+        /* convert from old format */
+        stuff = &newstuff;
+        stuff->length = oldstuff->length;
+        stuff->screen = oldstuff->screen;
+        stuff->dotclock = oldstuff->dotclock;
+        stuff->hdisplay = oldstuff->hdisplay;
+        stuff->hsyncstart = oldstuff->hsyncstart;
+        stuff->hsyncend = oldstuff->hsyncend;
+        stuff->htotal = oldstuff->htotal;
+        stuff->hskew = 0;
+        stuff->vdisplay = oldstuff->vdisplay;
+        stuff->vsyncstart = oldstuff->vsyncstart;
+        stuff->vsyncend = oldstuff->vsyncend;
+        stuff->vtotal = oldstuff->vtotal;
+        stuff->flags = oldstuff->flags;
+        stuff->privsize = oldstuff->privsize;
+    }
+    if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY) {
+        ErrorF("ValidateModeLine - scrn: %d clock: %ld\n",
+               (int) stuff->screen, (unsigned long) stuff->dotclock);
+        ErrorF("                   hdsp: %d hbeg: %d hend: %d httl: %d\n",
+               stuff->hdisplay, stuff->hsyncstart,
+               stuff->hsyncend, stuff->htotal);
+        ErrorF
+            ("                   vdsp: %d vbeg: %d vend: %d vttl: %d flags: %ld\n",
+             stuff->vdisplay, stuff->vsyncstart, stuff->vsyncend, stuff->vtotal,
+             (unsigned long) stuff->flags);
+    }
+
+    if (ver < 2) {
+        REQUEST_AT_LEAST_SIZE(xXF86OldVidModeValidateModeLineReq);
+        len = client->req_len -
+            bytes_to_int32(sizeof(xXF86OldVidModeValidateModeLineReq));
+    }
+    else {
+        REQUEST_AT_LEAST_SIZE(xXF86VidModeValidateModeLineReq);
+        len =
+            client->req_len -
+            bytes_to_int32(sizeof(xXF86VidModeValidateModeLineReq));
+    }
+    if (len != stuff->privsize)
+        return BadLength;
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    status = MODE_OK;
+
+    if (stuff->hsyncstart < stuff->hdisplay ||
+        stuff->hsyncend < stuff->hsyncstart ||
+        stuff->htotal < stuff->hsyncend ||
+        stuff->vsyncstart < stuff->vdisplay ||
+        stuff->vsyncend < stuff->vsyncstart ||
+        stuff->vtotal < stuff->vsyncend) {
+        status = MODE_BAD;
+        goto status_reply;
+    }
+
+    if (!VidModeGetCurrentModeline(stuff->screen, &mode, &dotClock))
+        return BadValue;
+
+    modetmp = VidModeCreateMode();
+    VidModeCopyMode(mode, modetmp);
+
+    VidModeSetModeValue(modetmp, VIDMODE_H_DISPLAY, stuff->hdisplay);
+    VidModeSetModeValue(modetmp, VIDMODE_H_SYNCSTART, stuff->hsyncstart);
+    VidModeSetModeValue(modetmp, VIDMODE_H_SYNCEND, stuff->hsyncend);
+    VidModeSetModeValue(modetmp, VIDMODE_H_TOTAL, stuff->htotal);
+    VidModeSetModeValue(modetmp, VIDMODE_H_SKEW, stuff->hskew);
+    VidModeSetModeValue(modetmp, VIDMODE_V_DISPLAY, stuff->vdisplay);
+    VidModeSetModeValue(modetmp, VIDMODE_V_SYNCSTART, stuff->vsyncstart);
+    VidModeSetModeValue(modetmp, VIDMODE_V_SYNCEND, stuff->vsyncend);
+    VidModeSetModeValue(modetmp, VIDMODE_V_TOTAL, stuff->vtotal);
+    VidModeSetModeValue(modetmp, VIDMODE_FLAGS, stuff->flags);
+    if (stuff->privsize)
+        ErrorF("ValidateModeLine - Privates in request have been ignored\n");
+
+    /* Check that the mode is consistent with the monitor specs */
+    if ((status =
+         VidModeCheckModeForMonitor(stuff->screen, modetmp)) != MODE_OK)
+        goto status_reply;
+
+    /* Check that the driver is happy with the mode */
+    status = VidModeCheckModeForDriver(stuff->screen, modetmp);
+
+ status_reply:
+    free(modetmp);
+
+    rep = (xXF86VidModeValidateModeLineReply) {
+        .type = X_Reply,
+        .sequenceNumber = client->sequence,
+        .length = bytes_to_int32(SIZEOF(xXF86VidModeValidateModeLineReply)
+                                 - SIZEOF(xGenericReply)),
+        .status = status
+    };
+    if (client->swapped) {
+        swaps(&rep.sequenceNumber);
+        swapl(&rep.length);
+        swapl(&rep.status);
+    }
+    WriteToClient(client, sizeof(xXF86VidModeValidateModeLineReply), &rep);
+    if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY)
+        ErrorF("ValidateModeLine - Succeeded (status = %d)\n", status);
+    return Success;
+}
+
+static int
+ProcXF86VidModeSwitchMode(ClientPtr client)
+{
+    REQUEST(xXF86VidModeSwitchModeReq);
+
+    DEBUG_P("XF86VidModeSwitchMode");
+
+    REQUEST_SIZE_MATCH(xXF86VidModeSwitchModeReq);
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    VidModeZoomViewport(stuff->screen, (short) stuff->zoom);
+
+    return Success;
+}
+
+static int
+ProcXF86VidModeSwitchToMode(ClientPtr client)
+{
+    REQUEST(xXF86VidModeSwitchToModeReq);
+    xXF86OldVidModeSwitchToModeReq *oldstuff =
+        (xXF86OldVidModeSwitchToModeReq *) client->requestBuffer;
+    xXF86VidModeSwitchToModeReq newstuff;
+    pointer mode;
+    int len, dotClock;
+    int ver;
+
+    DEBUG_P("XF86VidModeSwitchToMode");
+
+    ver = ClientMajorVersion(client);
+    if (ver < 2) {
+        /* convert from old format */
+        stuff = &newstuff;
+        stuff->length = oldstuff->length;
+        stuff->screen = oldstuff->screen;
+        stuff->dotclock = oldstuff->dotclock;
+        stuff->hdisplay = oldstuff->hdisplay;
+        stuff->hsyncstart = oldstuff->hsyncstart;
+        stuff->hsyncend = oldstuff->hsyncend;
+        stuff->htotal = oldstuff->htotal;
+        stuff->hskew = 0;
+        stuff->vdisplay = oldstuff->vdisplay;
+        stuff->vsyncstart = oldstuff->vsyncstart;
+        stuff->vsyncend = oldstuff->vsyncend;
+        stuff->vtotal = oldstuff->vtotal;
+        stuff->flags = oldstuff->flags;
+        stuff->privsize = oldstuff->privsize;
+    }
+    if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY) {
+        ErrorF("SwitchToMode - scrn: %d clock: %ld\n",
+               (int) stuff->screen, (unsigned long) stuff->dotclock);
+        ErrorF("               hdsp: %d hbeg: %d hend: %d httl: %d\n",
+               stuff->hdisplay, stuff->hsyncstart,
+               stuff->hsyncend, stuff->htotal);
+        ErrorF
+            ("               vdsp: %d vbeg: %d vend: %d vttl: %d flags: %ld\n",
+             stuff->vdisplay, stuff->vsyncstart, stuff->vsyncend, stuff->vtotal,
+             (unsigned long) stuff->flags);
+    }
+
+    if (ver < 2) {
+        REQUEST_AT_LEAST_SIZE(xXF86OldVidModeSwitchToModeReq);
+        len =
+            client->req_len -
+            bytes_to_int32(sizeof(xXF86OldVidModeSwitchToModeReq));
+    }
+    else {
+        REQUEST_AT_LEAST_SIZE(xXF86VidModeSwitchToModeReq);
+        len =
+            client->req_len -
+            bytes_to_int32(sizeof(xXF86VidModeSwitchToModeReq));
+    }
+    if (len != stuff->privsize)
+        return BadLength;
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    if (!VidModeGetCurrentModeline(stuff->screen, &mode, &dotClock))
+        return BadValue;
+
+    if ((VidModeGetDotClock(stuff->screen, stuff->dotclock) == dotClock)
+        && MODEMATCH(mode, stuff))
+        return Success;
+
+    if (!VidModeGetFirstModeline(stuff->screen, &mode, &dotClock))
+        return BadValue;
+
+    do {
+        if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY) {
+            ErrorF("Checking against clock: %d (%d)\n",
+                   VidModeGetModeValue(mode, VIDMODE_CLOCK), dotClock);
+            ErrorF("                 hdsp: %d hbeg: %d hend: %d httl: %d\n",
+                   VidModeGetModeValue(mode, VIDMODE_H_DISPLAY),
+                   VidModeGetModeValue(mode, VIDMODE_H_SYNCSTART),
+                   VidModeGetModeValue(mode, VIDMODE_H_SYNCEND),
+                   VidModeGetModeValue(mode, VIDMODE_H_TOTAL));
+            ErrorF
+                ("                 vdsp: %d vbeg: %d vend: %d vttl: %d flags: %d\n",
+                 VidModeGetModeValue(mode, VIDMODE_V_DISPLAY),
+                 VidModeGetModeValue(mode, VIDMODE_V_SYNCSTART),
+                 VidModeGetModeValue(mode, VIDMODE_V_SYNCEND),
+                 VidModeGetModeValue(mode, VIDMODE_V_TOTAL),
+                 VidModeGetModeValue(mode, VIDMODE_FLAGS));
+        }
+        if ((VidModeGetDotClock(stuff->screen, stuff->dotclock) == dotClock) &&
+            MODEMATCH(mode, stuff)) {
+
+            if (!VidModeSwitchMode(stuff->screen, mode))
+                return BadValue;
+
+            if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY)
+                ErrorF("SwitchToMode - Succeeded\n");
+            return Success;
+        }
+    } while (VidModeGetNextModeline(stuff->screen, &mode, &dotClock));
+
+    return BadValue;
+}
+
+static int
+ProcXF86VidModeLockModeSwitch(ClientPtr client)
+{
+    REQUEST(xXF86VidModeLockModeSwitchReq);
+
+    REQUEST_SIZE_MATCH(xXF86VidModeLockModeSwitchReq);
+
+    DEBUG_P("XF86VidModeLockModeSwitch");
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    if (!VidModeLockZoom(stuff->screen, (short) stuff->lock))
+        return VidModeErrorBase + XF86VidModeZoomLocked;
+
+    return Success;
+}
+
+static int
+ProcXF86VidModeGetMonitor(ClientPtr client)
+{
+    REQUEST(xXF86VidModeGetMonitorReq);
+    xXF86VidModeGetMonitorReply rep = {
+        .type = X_Reply,
+        .sequenceNumber = client->sequence
+    };
+    CARD32 *hsyncdata, *vsyncdata;
+    int i, nHsync, nVrefresh;
+    pointer monitor;
+
+    DEBUG_P("XF86VidModeGetMonitor");
+
+    REQUEST_SIZE_MATCH(xXF86VidModeGetMonitorReq);
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    if (!VidModeGetMonitor(stuff->screen, &monitor))
+        return BadValue;
+
+    nHsync = VidModeGetMonitorValue(monitor, VIDMODE_MON_NHSYNC, 0).i;
+    nVrefresh = VidModeGetMonitorValue(monitor, VIDMODE_MON_NVREFRESH, 0).i;
+
+    if ((char *) (VidModeGetMonitorValue(monitor, VIDMODE_MON_VENDOR, 0)).ptr)
+        rep.vendorLength = strlen((char *) (VidModeGetMonitorValue(monitor,
+                                                                   VIDMODE_MON_VENDOR,
+                                                                   0)).ptr);
+    else
+        rep.vendorLength = 0;
+    if ((char *) (VidModeGetMonitorValue(monitor, VIDMODE_MON_MODEL, 0)).ptr)
+        rep.modelLength = strlen((char *) (VidModeGetMonitorValue(monitor,
+                                                                  VIDMODE_MON_MODEL,
+                                                                  0)).ptr);
+    else
+        rep.modelLength = 0;
+    rep.length =
+        bytes_to_int32(SIZEOF(xXF86VidModeGetMonitorReply) -
+                       SIZEOF(xGenericReply) + (nHsync +
+                                                nVrefresh) * sizeof(CARD32) +
+                       pad_to_int32(rep.vendorLength) +
+                       pad_to_int32(rep.modelLength));
+    rep.nhsync = nHsync;
+    rep.nvsync = nVrefresh;
+    hsyncdata = malloc(nHsync * sizeof(CARD32));
+    if (!hsyncdata) {
+        return BadAlloc;
+    }
+    vsyncdata = malloc(nVrefresh * sizeof(CARD32));
+
+    if (!vsyncdata) {
+        free(hsyncdata);
+        return BadAlloc;
+    }
+
+    for (i = 0; i < nHsync; i++) {
+        hsyncdata[i] = (unsigned short) (VidModeGetMonitorValue(monitor,
+                                                                VIDMODE_MON_HSYNC_LO,
+                                                                i)).f |
+            (unsigned
+             short) (VidModeGetMonitorValue(monitor, VIDMODE_MON_HSYNC_HI,
+                                            i)).f << 16;
+    }
+    for (i = 0; i < nVrefresh; i++) {
+        vsyncdata[i] = (unsigned short) (VidModeGetMonitorValue(monitor,
+                                                                VIDMODE_MON_VREFRESH_LO,
+                                                                i)).f |
+            (unsigned
+             short) (VidModeGetMonitorValue(monitor, VIDMODE_MON_VREFRESH_HI,
+                                            i)).f << 16;
+    }
+
+    if (client->swapped) {
+        swaps(&rep.sequenceNumber);
+        swapl(&rep.length);
+    }
+    WriteToClient(client, SIZEOF(xXF86VidModeGetMonitorReply), &rep);
+    client->pSwapReplyFunc = (ReplySwapPtr) Swap32Write;
+    WriteSwappedDataToClient(client, nHsync * sizeof(CARD32), hsyncdata);
+    WriteSwappedDataToClient(client, nVrefresh * sizeof(CARD32), vsyncdata);
+    if (rep.vendorLength)
+        WriteToClient(client, rep.vendorLength,
+                 (VidModeGetMonitorValue(monitor, VIDMODE_MON_VENDOR, 0)).ptr);
+    if (rep.modelLength)
+        WriteToClient(client, rep.modelLength,
+                 (VidModeGetMonitorValue(monitor, VIDMODE_MON_MODEL, 0)).ptr);
+
+    free(hsyncdata);
+    free(vsyncdata);
+
+    return Success;
+}
+
+static int
+ProcXF86VidModeGetViewPort(ClientPtr client)
+{
+    REQUEST(xXF86VidModeGetViewPortReq);
+    xXF86VidModeGetViewPortReply rep;
+    int x, y;
+
+    DEBUG_P("XF86VidModeGetViewPort");
+
+    REQUEST_SIZE_MATCH(xXF86VidModeGetViewPortReq);
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    VidModeGetViewPort(stuff->screen, &x, &y);
+
+    rep = (xXF86VidModeGetViewPortReply) {
+        .type = X_Reply,
+        .sequenceNumber = client->sequence,
+        .length = 0,
+        .x = x,
+        .y = y
+    };
+
+    if (client->swapped) {
+        swaps(&rep.sequenceNumber);
+        swapl(&rep.length);
+        swapl(&rep.x);
+        swapl(&rep.y);
+    }
+    WriteToClient(client, SIZEOF(xXF86VidModeGetViewPortReply), &rep);
+    return Success;
+}
+
+static int
+ProcXF86VidModeSetViewPort(ClientPtr client)
+{
+    REQUEST(xXF86VidModeSetViewPortReq);
+
+    DEBUG_P("XF86VidModeSetViewPort");
+
+    REQUEST_SIZE_MATCH(xXF86VidModeSetViewPortReq);
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    if (!VidModeSetViewPort(stuff->screen, stuff->x, stuff->y))
+        return BadValue;
+
+    return Success;
+}
+
+static int
+ProcXF86VidModeGetDotClocks(ClientPtr client)
+{
+    REQUEST(xXF86VidModeGetDotClocksReq);
+    xXF86VidModeGetDotClocksReply rep;
+    int n;
+    int numClocks;
+    CARD32 dotclock;
+    int *Clocks = NULL;
+    Bool ClockProg;
+
+    DEBUG_P("XF86VidModeGetDotClocks");
+
+    REQUEST_SIZE_MATCH(xXF86VidModeGetDotClocksReq);
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    numClocks = VidModeGetNumOfClocks(stuff->screen, &ClockProg);
+
+    rep = (xXF86VidModeGetDotClocksReply) {
+        .type = X_Reply,
+        .sequenceNumber = client->sequence,
+        .length = bytes_to_int32(SIZEOF(xXF86VidModeGetDotClocksReply)
+                                 - SIZEOF(xGenericReply) + numClocks),
+        .clocks = numClocks,
+        .maxclocks = MAXCLOCKS,
+        .flags = 0
+    };
+
+    if (!ClockProg) {
+        Clocks = calloc(numClocks, sizeof(int));
+        if (!Clocks)
+            return BadValue;
+        if (!VidModeGetClocks(stuff->screen, Clocks)) {
+            free(Clocks);
+            return BadValue;
+        }
+    }
+    if (ClockProg) {
+        rep.flags |= CLKFLAG_PROGRAMABLE;
+    }
+    if (client->swapped) {
+        swaps(&rep.sequenceNumber);
+        swapl(&rep.length);
+        swapl(&rep.clocks);
+        swapl(&rep.maxclocks);
+        swapl(&rep.flags);
+    }
+    WriteToClient(client, sizeof(xXF86VidModeGetDotClocksReply), &rep);
+    if (!ClockProg) {
+        for (n = 0; n < numClocks; n++) {
+            dotclock = *Clocks++;
+            if (client->swapped) {
+                WriteSwappedDataToClient(client, 4, (char *) &dotclock);
+            }
+            else {
+                WriteToClient(client, 4, &dotclock);
+            }
+        }
+    }
+
+    free(Clocks);
+    return Success;
+}
+
+static int
+ProcXF86VidModeSetGamma(ClientPtr client)
+{
+    REQUEST(xXF86VidModeSetGammaReq);
+
+    DEBUG_P("XF86VidModeSetGamma");
+
+    REQUEST_SIZE_MATCH(xXF86VidModeSetGammaReq);
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    if (!VidModeSetGamma(stuff->screen, ((float) stuff->red) / 10000.,
+                         ((float) stuff->green) / 10000.,
+                         ((float) stuff->blue) / 10000.))
+        return BadValue;
+
+    return Success;
+}
+
+static int
+ProcXF86VidModeGetGamma(ClientPtr client)
+{
+    REQUEST(xXF86VidModeGetGammaReq);
+    xXF86VidModeGetGammaReply rep;
+    float red, green, blue;
+
+    DEBUG_P("XF86VidModeGetGamma");
+
+    REQUEST_SIZE_MATCH(xXF86VidModeGetGammaReq);
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    if (!VidModeGetGamma(stuff->screen, &red, &green, &blue))
+        return BadValue;
+    rep = (xXF86VidModeGetGammaReply) {
+        .type = X_Reply,
+        .sequenceNumber = client->sequence,
+        .length = 0,
+        .red = (CARD32) (red * 10000.),
+        .green = (CARD32) (green * 10000.),
+        .blue = (CARD32) (blue * 10000.)
+    };
+    if (client->swapped) {
+        swaps(&rep.sequenceNumber);
+        swapl(&rep.length);
+        swapl(&rep.red);
+        swapl(&rep.green);
+        swapl(&rep.blue);
+    }
+    WriteToClient(client, sizeof(xXF86VidModeGetGammaReply), &rep);
+
+    return Success;
+}
+
+static int
+ProcXF86VidModeSetGammaRamp(ClientPtr client)
+{
+    CARD16 *r, *g, *b;
+    int length;
+
+    REQUEST(xXF86VidModeSetGammaRampReq);
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    if (stuff->size != VidModeGetGammaRampSize(stuff->screen))
+        return BadValue;
+
+    length = (stuff->size + 1) & ~1;
+
+    REQUEST_FIXED_SIZE(xXF86VidModeSetGammaRampReq, length * 6);
+
+    r = (CARD16 *) &stuff[1];
+    g = r + length;
+    b = g + length;
+
+    if (!VidModeSetGammaRamp(stuff->screen, stuff->size, r, g, b))
+        return BadValue;
+
+    return Success;
+}
+
+static int
+ProcXF86VidModeGetGammaRamp(ClientPtr client)
+{
+    CARD16 *ramp = NULL;
+    int length;
+    size_t ramplen = 0;
+    xXF86VidModeGetGammaRampReply rep;
+
+    REQUEST(xXF86VidModeGetGammaRampReq);
+
+    REQUEST_SIZE_MATCH(xXF86VidModeGetGammaRampReq);
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    if (stuff->size != VidModeGetGammaRampSize(stuff->screen))
+        return BadValue;
+
+    length = (stuff->size + 1) & ~1;
+
+    if (stuff->size) {
+        ramplen = length * 3 * sizeof(CARD16);
+        if (!(ramp = malloc(ramplen)))
+            return BadAlloc;
+
+        if (!VidModeGetGammaRamp(stuff->screen, stuff->size,
+                                 ramp, ramp + length, ramp + (length * 2))) {
+            free(ramp);
+            return BadValue;
+        }
+    }
+    rep = (xXF86VidModeGetGammaRampReply) {
+        .type = X_Reply,
+        .sequenceNumber = client->sequence,
+        .length = (length >> 1) * 3,
+        .size = stuff->size
+    };
+    if (client->swapped) {
+        swaps(&rep.sequenceNumber);
+        swapl(&rep.length);
+        swaps(&rep.size);
+        SwapShorts((short *) ramp, length * 3);
+    }
+    WriteToClient(client, sizeof(xXF86VidModeGetGammaRampReply), &rep);
+
+    if (stuff->size) {
+        WriteToClient(client, ramplen, ramp);
+        free(ramp);
+    }
+
+    return Success;
+}
+
+static int
+ProcXF86VidModeGetGammaRampSize(ClientPtr client)
+{
+    xXF86VidModeGetGammaRampSizeReply rep;
+
+    REQUEST(xXF86VidModeGetGammaRampSizeReq);
+
+    REQUEST_SIZE_MATCH(xXF86VidModeGetGammaRampSizeReq);
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    rep = (xXF86VidModeGetGammaRampSizeReply) {
+        .type = X_Reply,
+        .sequenceNumber = client->sequence,
+        .length = 0,
+        .size = VidModeGetGammaRampSize(stuff->screen)
+    };
+    if (client->swapped) {
+        swaps(&rep.sequenceNumber);
+        swapl(&rep.length);
+        swaps(&rep.size);
+    }
+    WriteToClient(client, sizeof(xXF86VidModeGetGammaRampSizeReply), &rep);
+
+    return Success;
+}
+
+static int
+ProcXF86VidModeGetPermissions(ClientPtr client)
+{
+    xXF86VidModeGetPermissionsReply rep =  {
+        .type = X_Reply,
+        .sequenceNumber = client->sequence,
+        .length = 0,
+        .permissions = XF86VM_READ_PERMISSION
+    };
+
+    REQUEST(xXF86VidModeGetPermissionsReq);
+
+    REQUEST_SIZE_MATCH(xXF86VidModeGetPermissionsReq);
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    if (xf86GetVidModeEnabled() &&
+        (xf86GetVidModeAllowNonLocal() || LocalClient(client))) {
+        rep.permissions |= XF86VM_WRITE_PERMISSION;
+    }
+    if (client->swapped) {
+        swaps(&rep.sequenceNumber);
+        swapl(&rep.length);
+        swapl(&rep.permissions);
+    }
+    WriteToClient(client, sizeof(xXF86VidModeGetPermissionsReply), &rep);
+
+    return Success;
+}
+
+static int
+ProcXF86VidModeSetClientVersion(ClientPtr client)
+{
+    REQUEST(xXF86VidModeSetClientVersionReq);
+
+    VidModePrivPtr pPriv;
+
+    DEBUG_P("XF86VidModeSetClientVersion");
+
+    REQUEST_SIZE_MATCH(xXF86VidModeSetClientVersionReq);
+
+    if ((pPriv = VM_GETPRIV(client)) == NULL) {
+        pPriv = malloc(sizeof(VidModePrivRec));
+        if (!pPriv)
+            return BadAlloc;
+        VM_SETPRIV(client, pPriv);
+    }
+    pPriv->major = stuff->major;
+
+    pPriv->minor = stuff->minor;
+
+    return Success;
+}
+
+static int
+ProcXF86VidModeDispatch(ClientPtr client)
+{
+    REQUEST(xReq);
+    switch (stuff->data) {
+    case X_XF86VidModeQueryVersion:
+        return ProcXF86VidModeQueryVersion(client);
+    case X_XF86VidModeGetModeLine:
+        return ProcXF86VidModeGetModeLine(client);
+    case X_XF86VidModeGetMonitor:
+        return ProcXF86VidModeGetMonitor(client);
+    case X_XF86VidModeGetAllModeLines:
+        return ProcXF86VidModeGetAllModeLines(client);
+    case X_XF86VidModeValidateModeLine:
+        return ProcXF86VidModeValidateModeLine(client);
+    case X_XF86VidModeGetViewPort:
+        return ProcXF86VidModeGetViewPort(client);
+    case X_XF86VidModeGetDotClocks:
+        return ProcXF86VidModeGetDotClocks(client);
+    case X_XF86VidModeSetClientVersion:
+        return ProcXF86VidModeSetClientVersion(client);
+    case X_XF86VidModeGetGamma:
+        return ProcXF86VidModeGetGamma(client);
+    case X_XF86VidModeGetGammaRamp:
+        return ProcXF86VidModeGetGammaRamp(client);
+    case X_XF86VidModeGetGammaRampSize:
+        return ProcXF86VidModeGetGammaRampSize(client);
+    case X_XF86VidModeGetPermissions:
+        return ProcXF86VidModeGetPermissions(client);
+    default:
+        if (!xf86GetVidModeEnabled())
+            return VidModeErrorBase + XF86VidModeExtensionDisabled;
+        if (xf86GetVidModeAllowNonLocal() || LocalClient(client)) {
+            switch (stuff->data) {
+            case X_XF86VidModeAddModeLine:
+                return ProcXF86VidModeAddModeLine(client);
+            case X_XF86VidModeDeleteModeLine:
+                return ProcXF86VidModeDeleteModeLine(client);
+            case X_XF86VidModeModModeLine:
+                return ProcXF86VidModeModModeLine(client);
+            case X_XF86VidModeSwitchMode:
+                return ProcXF86VidModeSwitchMode(client);
+            case X_XF86VidModeSwitchToMode:
+                return ProcXF86VidModeSwitchToMode(client);
+            case X_XF86VidModeLockModeSwitch:
+                return ProcXF86VidModeLockModeSwitch(client);
+            case X_XF86VidModeSetViewPort:
+                return ProcXF86VidModeSetViewPort(client);
+            case X_XF86VidModeSetGamma:
+                return ProcXF86VidModeSetGamma(client);
+            case X_XF86VidModeSetGammaRamp:
+                return ProcXF86VidModeSetGammaRamp(client);
+            default:
+                return BadRequest;
+            }
+        }
+        else
+            return VidModeErrorBase + XF86VidModeClientNotLocal;
+    }
+}
+
+static int
+SProcXF86VidModeQueryVersion(ClientPtr client)
+{
+    REQUEST(xXF86VidModeQueryVersionReq);
+    swaps(&stuff->length);
+    return ProcXF86VidModeQueryVersion(client);
+}
+
+static int
+SProcXF86VidModeGetModeLine(ClientPtr client)
+{
+    REQUEST(xXF86VidModeGetModeLineReq);
+    swaps(&stuff->length);
+    REQUEST_SIZE_MATCH(xXF86VidModeGetModeLineReq);
+    swaps(&stuff->screen);
+    return ProcXF86VidModeGetModeLine(client);
+}
+
+static int
+SProcXF86VidModeGetAllModeLines(ClientPtr client)
+{
+    REQUEST(xXF86VidModeGetAllModeLinesReq);
+    swaps(&stuff->length);
+    REQUEST_SIZE_MATCH(xXF86VidModeGetAllModeLinesReq);
+    swaps(&stuff->screen);
+    return ProcXF86VidModeGetAllModeLines(client);
+}
+
+static int
+SProcXF86VidModeAddModeLine(ClientPtr client)
+{
+    xXF86OldVidModeAddModeLineReq *oldstuff =
+        (xXF86OldVidModeAddModeLineReq *) client->requestBuffer;
+    int ver;
+
+    REQUEST(xXF86VidModeAddModeLineReq);
+    ver = ClientMajorVersion(client);
+    if (ver < 2) {
+        swaps(&oldstuff->length);
+        REQUEST_AT_LEAST_SIZE(xXF86OldVidModeAddModeLineReq);
+        swapl(&oldstuff->screen);
+        swaps(&oldstuff->hdisplay);
+        swaps(&oldstuff->hsyncstart);
+        swaps(&oldstuff->hsyncend);
+        swaps(&oldstuff->htotal);
+        swaps(&oldstuff->vdisplay);
+        swaps(&oldstuff->vsyncstart);
+        swaps(&oldstuff->vsyncend);
+        swaps(&oldstuff->vtotal);
+        swapl(&oldstuff->flags);
+        swapl(&oldstuff->privsize);
+        SwapRestL(oldstuff);
+    }
+    else {
+        swaps(&stuff->length);
+        REQUEST_AT_LEAST_SIZE(xXF86VidModeAddModeLineReq);
+        swapl(&stuff->screen);
+        swaps(&stuff->hdisplay);
+        swaps(&stuff->hsyncstart);
+        swaps(&stuff->hsyncend);
+        swaps(&stuff->htotal);
+        swaps(&stuff->hskew);
+        swaps(&stuff->vdisplay);
+        swaps(&stuff->vsyncstart);
+        swaps(&stuff->vsyncend);
+        swaps(&stuff->vtotal);
+        swapl(&stuff->flags);
+        swapl(&stuff->privsize);
+        SwapRestL(stuff);
+    }
+    return ProcXF86VidModeAddModeLine(client);
+}
+
+static int
+SProcXF86VidModeDeleteModeLine(ClientPtr client)
+{
+    xXF86OldVidModeDeleteModeLineReq *oldstuff =
+        (xXF86OldVidModeDeleteModeLineReq *) client->requestBuffer;
+    int ver;
+
+    REQUEST(xXF86VidModeDeleteModeLineReq);
+    ver = ClientMajorVersion(client);
+    if (ver < 2) {
+        swaps(&oldstuff->length);
+        REQUEST_AT_LEAST_SIZE(xXF86OldVidModeDeleteModeLineReq);
+        swapl(&oldstuff->screen);
+        swaps(&oldstuff->hdisplay);
+        swaps(&oldstuff->hsyncstart);
+        swaps(&oldstuff->hsyncend);
+        swaps(&oldstuff->htotal);
+        swaps(&oldstuff->vdisplay);
+        swaps(&oldstuff->vsyncstart);
+        swaps(&oldstuff->vsyncend);
+        swaps(&oldstuff->vtotal);
+        swapl(&oldstuff->flags);
+        swapl(&oldstuff->privsize);
+        SwapRestL(oldstuff);
+    }
+    else {
+        swaps(&stuff->length);
+        REQUEST_AT_LEAST_SIZE(xXF86VidModeDeleteModeLineReq);
+        swapl(&stuff->screen);
+        swaps(&stuff->hdisplay);
+        swaps(&stuff->hsyncstart);
+        swaps(&stuff->hsyncend);
+        swaps(&stuff->htotal);
+        swaps(&stuff->hskew);
+        swaps(&stuff->vdisplay);
+        swaps(&stuff->vsyncstart);
+        swaps(&stuff->vsyncend);
+        swaps(&stuff->vtotal);
+        swapl(&stuff->flags);
+        swapl(&stuff->privsize);
+        SwapRestL(stuff);
+    }
+    return ProcXF86VidModeDeleteModeLine(client);
+}
+
+static int
+SProcXF86VidModeModModeLine(ClientPtr client)
+{
+    xXF86OldVidModeModModeLineReq *oldstuff =
+        (xXF86OldVidModeModModeLineReq *) client->requestBuffer;
+    int ver;
+
+    REQUEST(xXF86VidModeModModeLineReq);
+    ver = ClientMajorVersion(client);
+    if (ver < 2) {
+        swaps(&oldstuff->length);
+        REQUEST_AT_LEAST_SIZE(xXF86OldVidModeModModeLineReq);
+        swapl(&oldstuff->screen);
+        swaps(&oldstuff->hdisplay);
+        swaps(&oldstuff->hsyncstart);
+        swaps(&oldstuff->hsyncend);
+        swaps(&oldstuff->htotal);
+        swaps(&oldstuff->vdisplay);
+        swaps(&oldstuff->vsyncstart);
+        swaps(&oldstuff->vsyncend);
+        swaps(&oldstuff->vtotal);
+        swapl(&oldstuff->flags);
+        swapl(&oldstuff->privsize);
+        SwapRestL(oldstuff);
+    }
+    else {
+        swaps(&stuff->length);
+        REQUEST_AT_LEAST_SIZE(xXF86VidModeModModeLineReq);
+        swapl(&stuff->screen);
+        swaps(&stuff->hdisplay);
+        swaps(&stuff->hsyncstart);
+        swaps(&stuff->hsyncend);
+        swaps(&stuff->htotal);
+        swaps(&stuff->hskew);
+        swaps(&stuff->vdisplay);
+        swaps(&stuff->vsyncstart);
+        swaps(&stuff->vsyncend);
+        swaps(&stuff->vtotal);
+        swapl(&stuff->flags);
+        swapl(&stuff->privsize);
+        SwapRestL(stuff);
+    }
+    return ProcXF86VidModeModModeLine(client);
+}
+
+static int
+SProcXF86VidModeValidateModeLine(ClientPtr client)
+{
+    xXF86OldVidModeValidateModeLineReq *oldstuff =
+        (xXF86OldVidModeValidateModeLineReq *) client->requestBuffer;
+    int ver;
+
+    REQUEST(xXF86VidModeValidateModeLineReq);
+    ver = ClientMajorVersion(client);
+    if (ver < 2) {
+        swaps(&oldstuff->length);
+        REQUEST_AT_LEAST_SIZE(xXF86OldVidModeValidateModeLineReq);
+        swapl(&oldstuff->screen);
+        swaps(&oldstuff->hdisplay);
+        swaps(&oldstuff->hsyncstart);
+        swaps(&oldstuff->hsyncend);
+        swaps(&oldstuff->htotal);
+        swaps(&oldstuff->vdisplay);
+        swaps(&oldstuff->vsyncstart);
+        swaps(&oldstuff->vsyncend);
+        swaps(&oldstuff->vtotal);
+        swapl(&oldstuff->flags);
+        swapl(&oldstuff->privsize);
+        SwapRestL(oldstuff);
+    }
+    else {
+        swaps(&stuff->length);
+        REQUEST_AT_LEAST_SIZE(xXF86VidModeValidateModeLineReq);
+        swapl(&stuff->screen);
+        swaps(&stuff->hdisplay);
+        swaps(&stuff->hsyncstart);
+        swaps(&stuff->hsyncend);
+        swaps(&stuff->htotal);
+        swaps(&stuff->hskew);
+        swaps(&stuff->vdisplay);
+        swaps(&stuff->vsyncstart);
+        swaps(&stuff->vsyncend);
+        swaps(&stuff->vtotal);
+        swapl(&stuff->flags);
+        swapl(&stuff->privsize);
+        SwapRestL(stuff);
+    }
+    return ProcXF86VidModeValidateModeLine(client);
+}
+
+static int
+SProcXF86VidModeSwitchMode(ClientPtr client)
+{
+    REQUEST(xXF86VidModeSwitchModeReq);
+    swaps(&stuff->length);
+    REQUEST_SIZE_MATCH(xXF86VidModeSwitchModeReq);
+    swaps(&stuff->screen);
+    swaps(&stuff->zoom);
+    return ProcXF86VidModeSwitchMode(client);
+}
+
+static int
+SProcXF86VidModeSwitchToMode(ClientPtr client)
+{
+    REQUEST(xXF86VidModeSwitchToModeReq);
+    swaps(&stuff->length);
+    REQUEST_SIZE_MATCH(xXF86VidModeSwitchToModeReq);
+    swapl(&stuff->screen);
+    return ProcXF86VidModeSwitchToMode(client);
+}
+
+static int
+SProcXF86VidModeLockModeSwitch(ClientPtr client)
+{
+    REQUEST(xXF86VidModeLockModeSwitchReq);
+    swaps(&stuff->length);
+    REQUEST_SIZE_MATCH(xXF86VidModeLockModeSwitchReq);
+    swaps(&stuff->screen);
+    swaps(&stuff->lock);
+    return ProcXF86VidModeLockModeSwitch(client);
+}
+
+static int
+SProcXF86VidModeGetMonitor(ClientPtr client)
+{
+    REQUEST(xXF86VidModeGetMonitorReq);
+    swaps(&stuff->length);
+    REQUEST_SIZE_MATCH(xXF86VidModeGetMonitorReq);
+    swaps(&stuff->screen);
+    return ProcXF86VidModeGetMonitor(client);
+}
+
+static int
+SProcXF86VidModeGetViewPort(ClientPtr client)
+{
+    REQUEST(xXF86VidModeGetViewPortReq);
+    swaps(&stuff->length);
+    REQUEST_SIZE_MATCH(xXF86VidModeGetViewPortReq);
+    swaps(&stuff->screen);
+    return ProcXF86VidModeGetViewPort(client);
+}
+
+static int
+SProcXF86VidModeSetViewPort(ClientPtr client)
+{
+    REQUEST(xXF86VidModeSetViewPortReq);
+    swaps(&stuff->length);
+    REQUEST_SIZE_MATCH(xXF86VidModeSetViewPortReq);
+    swaps(&stuff->screen);
+    swapl(&stuff->x);
+    swapl(&stuff->y);
+    return ProcXF86VidModeSetViewPort(client);
+}
+
+static int
+SProcXF86VidModeGetDotClocks(ClientPtr client)
+{
+    REQUEST(xXF86VidModeGetDotClocksReq);
+    swaps(&stuff->length);
+    REQUEST_SIZE_MATCH(xXF86VidModeGetDotClocksReq);
+    swaps(&stuff->screen);
+    return ProcXF86VidModeGetDotClocks(client);
+}
+
+static int
+SProcXF86VidModeSetClientVersion(ClientPtr client)
+{
+    REQUEST(xXF86VidModeSetClientVersionReq);
+    swaps(&stuff->length);
+    REQUEST_SIZE_MATCH(xXF86VidModeSetClientVersionReq);
+    swaps(&stuff->major);
+    swaps(&stuff->minor);
+    return ProcXF86VidModeSetClientVersion(client);
+}
+
+static int
+SProcXF86VidModeSetGamma(ClientPtr client)
+{
+    REQUEST(xXF86VidModeSetGammaReq);
+    swaps(&stuff->length);
+    REQUEST_SIZE_MATCH(xXF86VidModeSetGammaReq);
+    swaps(&stuff->screen);
+    swapl(&stuff->red);
+    swapl(&stuff->green);
+    swapl(&stuff->blue);
+    return ProcXF86VidModeSetGamma(client);
+}
+
+static int
+SProcXF86VidModeGetGamma(ClientPtr client)
+{
+    REQUEST(xXF86VidModeGetGammaReq);
+    swaps(&stuff->length);
+    REQUEST_SIZE_MATCH(xXF86VidModeGetGammaReq);
+    swaps(&stuff->screen);
+    return ProcXF86VidModeGetGamma(client);
+}
+
+static int
+SProcXF86VidModeSetGammaRamp(ClientPtr client)
+{
+    int length;
+
+    REQUEST(xXF86VidModeSetGammaRampReq);
+    swaps(&stuff->length);
+    REQUEST_AT_LEAST_SIZE(xXF86VidModeSetGammaRampReq);
+    swaps(&stuff->size);
+    swaps(&stuff->screen);
+    length = ((stuff->size + 1) & ~1) * 6;
+    REQUEST_FIXED_SIZE(xXF86VidModeSetGammaRampReq, length);
+    SwapRestS(stuff);
+    return ProcXF86VidModeSetGammaRamp(client);
+}
+
+static int
+SProcXF86VidModeGetGammaRamp(ClientPtr client)
+{
+    REQUEST(xXF86VidModeGetGammaRampReq);
+    swaps(&stuff->length);
+    REQUEST_SIZE_MATCH(xXF86VidModeGetGammaRampReq);
+    swaps(&stuff->size);
+    swaps(&stuff->screen);
+    return ProcXF86VidModeGetGammaRamp(client);
+}
+
+static int
+SProcXF86VidModeGetGammaRampSize(ClientPtr client)
+{
+    REQUEST(xXF86VidModeGetGammaRampSizeReq);
+    swaps(&stuff->length);
+    REQUEST_SIZE_MATCH(xXF86VidModeGetGammaRampSizeReq);
+    swaps(&stuff->screen);
+    return ProcXF86VidModeGetGammaRampSize(client);
+}
+
+static int
+SProcXF86VidModeGetPermissions(ClientPtr client)
+{
+    REQUEST(xXF86VidModeGetPermissionsReq);
+    swaps(&stuff->length);
+    REQUEST_SIZE_MATCH(xXF86VidModeGetPermissionsReq);
+    swaps(&stuff->screen);
+    return ProcXF86VidModeGetPermissions(client);
+}
+
+static int
+SProcXF86VidModeDispatch(ClientPtr client)
+{
+    REQUEST(xReq);
+    switch (stuff->data) {
+    case X_XF86VidModeQueryVersion:
+        return SProcXF86VidModeQueryVersion(client);
+    case X_XF86VidModeGetModeLine:
+        return SProcXF86VidModeGetModeLine(client);
+    case X_XF86VidModeGetMonitor:
+        return SProcXF86VidModeGetMonitor(client);
+    case X_XF86VidModeGetAllModeLines:
+        return SProcXF86VidModeGetAllModeLines(client);
+    case X_XF86VidModeGetViewPort:
+        return SProcXF86VidModeGetViewPort(client);
+    case X_XF86VidModeValidateModeLine:
+        return SProcXF86VidModeValidateModeLine(client);
+    case X_XF86VidModeGetDotClocks:
+        return SProcXF86VidModeGetDotClocks(client);
+    case X_XF86VidModeSetClientVersion:
+        return SProcXF86VidModeSetClientVersion(client);
+    case X_XF86VidModeGetGamma:
+        return SProcXF86VidModeGetGamma(client);
+    case X_XF86VidModeGetGammaRamp:
+        return SProcXF86VidModeGetGammaRamp(client);
+    case X_XF86VidModeGetGammaRampSize:
+        return SProcXF86VidModeGetGammaRampSize(client);
+    case X_XF86VidModeGetPermissions:
+        return SProcXF86VidModeGetPermissions(client);
+    default:
+        if (!xf86GetVidModeEnabled())
+            return VidModeErrorBase + XF86VidModeExtensionDisabled;
+        if (xf86GetVidModeAllowNonLocal() || LocalClient(client)) {
+            switch (stuff->data) {
+            case X_XF86VidModeAddModeLine:
+                return SProcXF86VidModeAddModeLine(client);
+            case X_XF86VidModeDeleteModeLine:
+                return SProcXF86VidModeDeleteModeLine(client);
+            case X_XF86VidModeModModeLine:
+                return SProcXF86VidModeModModeLine(client);
+            case X_XF86VidModeSwitchMode:
+                return SProcXF86VidModeSwitchMode(client);
+            case X_XF86VidModeSwitchToMode:
+                return SProcXF86VidModeSwitchToMode(client);
+            case X_XF86VidModeLockModeSwitch:
+                return SProcXF86VidModeLockModeSwitch(client);
+            case X_XF86VidModeSetViewPort:
+                return SProcXF86VidModeSetViewPort(client);
+            case X_XF86VidModeSetGamma:
+                return SProcXF86VidModeSetGamma(client);
+            case X_XF86VidModeSetGammaRamp:
+                return SProcXF86VidModeSetGammaRamp(client);
+            default:
+                return BadRequest;
+            }
+        }
+        else
+            return VidModeErrorBase + XF86VidModeClientNotLocal;
+    }
+}
+
+void
+XFree86VidModeExtensionInit(void)
+{
+    ExtensionEntry *extEntry;
+    ScreenPtr pScreen;
+    int i;
+    Bool enabled = FALSE;
+
+    DEBUG_P("XFree86VidModeExtensionInit");
+
+    if (!dixRegisterPrivateKey(&VidModeClientPrivateKeyRec, PRIVATE_CLIENT, 0))
+        return;
+#ifdef XF86VIDMODE_EVENTS
+    if (!dixRegisterPrivateKey(&ScreenPrivateKeyRec, PRIVATE_SCREEN, 0))
+        return;
+#endif
+
+#ifdef XF86VIDMODE_EVENTS
+    EventType = CreateNewResourceType(XF86VidModeFreeEvents, "VidModeEvent");
+#endif
+
+    for (i = 0; i < screenInfo.numScreens; i++) {
+        pScreen = screenInfo.screens[i];
+        if (VidModeExtensionInit(pScreen))
+            enabled = TRUE;
+    }
+    /* This means that the DDX doesn't want the vidmode extension enabled */
+    if (!enabled)
+        return;
+
+    if (
+#ifdef XF86VIDMODE_EVENTS
+           EventType &&
+#endif
+           (extEntry = AddExtension(XF86VIDMODENAME,
+                                    XF86VidModeNumberEvents,
+                                    XF86VidModeNumberErrors,
+                                    ProcXF86VidModeDispatch,
+                                    SProcXF86VidModeDispatch,
+                                    NULL, StandardMinorOpcode))) {
+#if 0
+        XF86VidModeReqCode = (unsigned char) extEntry->base;
+#endif
+        VidModeErrorBase = extEntry->errorBase;
+#ifdef XF86VIDMODE_EVENTS
+        XF86VidModeEventBase = extEntry->eventBase;
+        EventSwapVector[XF86VidModeEventBase] =
+            (EventSwapPtr) SXF86VidModeNotifyEvent;
+#endif
+    }
+}
diff --git a/hw/xfree86/dixmods/extmod/Makefile.am b/hw/xfree86/dixmods/extmod/Makefile.am
index d3a9fc8..d5e0cde 100644
--- a/hw/xfree86/dixmods/extmod/Makefile.am
+++ b/hw/xfree86/dixmods/extmod/Makefile.am
@@ -1,10 +1,6 @@
 extsmoduledir = $(moduledir)/extensions
 extsmodule_LTLIBRARIES = libextmod.la
 
-if XF86VIDMODE
-XF86VMODE_SRCS = xf86vmode.c
-endif
-
 AM_CFLAGS = @DIX_CFLAGS@ @XORG_CFLAGS@
 INCLUDES = @XORG_INCS@ \
            -I$(top_srcdir)/dbe \
@@ -12,6 +8,5 @@ INCLUDES = @XORG_INCS@ \
            -I$(top_srcdir)/miext/shadow
 
 libextmod_la_LDFLAGS = -module -avoid-version $(LD_NO_UNDEFINED_FLAG)
-libextmod_la_SOURCES = modinit.c \
-                       $(XF86VMODE_SRCS)
+libextmod_la_SOURCES = modinit.c
 libextmod_la_LIBADD = $(top_builddir)/Xext/libXextmodule.la
diff --git a/hw/xfree86/dixmods/extmod/modinit.c b/hw/xfree86/dixmods/extmod/modinit.c
index f05a570..74171cf 100644
--- a/hw/xfree86/dixmods/extmod/modinit.c
+++ b/hw/xfree86/dixmods/extmod/modinit.c
@@ -39,14 +39,6 @@ static MODULESETUPPROTO(extmodSetup);
  * Array describing extensions to be initialized
  */
 static ExtensionModule extensionModules[] = {
-#ifdef XF86VIDMODE
-    {
-     XFree86VidModeExtensionInit,
-     XF86VIDMODENAME,
-     &noXFree86VidModeExtension,
-     NULL,
-     NULL},
-#endif
 };
 
 static XF86ModuleVersionInfo VersRec = {
diff --git a/hw/xfree86/dixmods/extmod/xf86vmode.c b/hw/xfree86/dixmods/extmod/xf86vmode.c
deleted file mode 100644
index 7cd2eed..0000000
--- a/hw/xfree86/dixmods/extmod/xf86vmode.c
+++ /dev/null
@@ -1,2165 +0,0 @@
-
-/*
-
-Copyright 1995  Kaleb S. KEITHLEY
-
-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 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 Kaleb S. KEITHLEY 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.
-
-Except as contained in this notice, the name of Kaleb S. KEITHLEY 
-shall not be used in advertising or otherwise to promote the sale, use 
-or other dealings in this Software without prior written authorization
-from Kaleb S. KEITHLEY
-
-*/
-/* THIS IS NOT AN X CONSORTIUM STANDARD OR AN X PROJECT TEAM SPECIFICATION */
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include <X11/X.h>
-#include <X11/Xproto.h>
-#include "misc.h"
-#include "dixstruct.h"
-#include "extnsionst.h"
-#include "xf86Extensions.h"
-#include "scrnintstr.h"
-#include "servermd.h"
-#include <X11/extensions/xf86vmproto.h>
-#include "swaprep.h"
-#include "xf86.h"
-#include "vidmodeproc.h"
-#include "globals.h"
-#include "protocol-versions.h"
-
-#define DEFAULT_XF86VIDMODE_VERBOSITY	3
-
-static int VidModeErrorBase;
-static DevPrivateKeyRec VidModeClientPrivateKeyRec;
-
-#define VidModeClientPrivateKey (&VidModeClientPrivateKeyRec)
-
-/* This holds the client's version information */
-typedef struct {
-    int major;
-    int minor;
-} VidModePrivRec, *VidModePrivPtr;
-
-#define VM_GETPRIV(c) ((VidModePrivPtr) \
-    dixLookupPrivate(&(c)->devPrivates, VidModeClientPrivateKey))
-#define VM_SETPRIV(c,p) \
-    dixSetPrivate(&(c)->devPrivates, VidModeClientPrivateKey, p)
-
-#if 0
-static unsigned char XF86VidModeReqCode = 0;
-#endif
-
-/* The XF86VIDMODE_EVENTS code is far from complete */
-
-#ifdef XF86VIDMODE_EVENTS
-static int XF86VidModeEventBase = 0;
-
-static void SXF86VidModeNotifyEvent(xXF86VidModeNotifyEvent * /* from */ , xXF86VidModeNotifyEvent *    /* to */
-    );
-
-static RESTYPE EventType;       /* resource type for event masks */
-
-typedef struct _XF86VidModeEvent *XF86VidModeEventPtr;
-
-typedef struct _XF86VidModeEvent {
-    XF86VidModeEventPtr next;
-    ClientPtr client;
-    ScreenPtr screen;
-    XID resource;
-    CARD32 mask;
-} XF86VidModeEventRec;
-
-static int XF86VidModeFreeEvents();
-
-typedef struct _XF86VidModeScreenPrivate {
-    XF86VidModeEventPtr events;
-    Bool hasWindow;
-} XF86VidModeScreenPrivateRec, *XF86VidModeScreenPrivatePtr;
-
-static DevPrivateKeyRec ScreenPrivateKeyRec;
-
-#define ScreenPrivateKey (&ScreenPrivateKeyRec)
-
-#define GetScreenPrivate(s) ((ScreenSaverScreenPrivatePtr) \
-    dixLookupPrivate(&(s)->devPrivates, ScreenPrivateKey))
-#define SetScreenPrivate(s,v) \
-    dixSetPrivate(&(s)->devPrivates, ScreenPrivateKey, v)
-#define SetupScreen(s)  ScreenSaverScreenPrivatePtr pPriv = GetScreenPrivate(s)
-
-#define New(t)  (malloc(sizeof (t)))
-#endif
-
-#ifdef DEBUG
-#define DEBUG_P(x) ErrorF(x"\n");
-#else
-#define DEBUG_P(x) /**/
-#endif
-    static int
-ClientMajorVersion(ClientPtr client)
-{
-    VidModePrivPtr pPriv;
-
-    pPriv = VM_GETPRIV(client);
-    if (!pPriv)
-        return 0;
-    else
-        return pPriv->major;
-}
-
-#ifdef XF86VIDMODE_EVENTS
-static void
-CheckScreenPrivate(pScreen)
-ScreenPtr
- pScreen;
-{
-    SetupScreen(pScreen);
-
-    if (!pPriv)
-        return;
-    if (!pPriv->events && !pPriv->hasWindow) {
-        free(pPriv);
-        SetScreenPrivate(pScreen, NULL);
-    }
-}
-
-static XF86VidModeScreenPrivatePtr
-MakeScreenPrivate(pScreen)
-ScreenPtr
- pScreen;
-{
-    SetupScreen(pScreen);
-
-    if (pPriv)
-        return pPriv;
-    pPriv = New(XF86VidModeScreenPrivateRec);
-    if (!pPriv)
-        return 0;
-    pPriv->events = 0;
-    pPriv->hasWindow = FALSE;
-    SetScreenPrivate(pScreen, pPriv);
-    return pPriv;
-}
-
-static unsigned long
-getEventMask(ScreenPtr pScreen, ClientPtr client)
-{
-    SetupScreen(pScreen);
-    XF86VidModeEventPtr pEv;
-
-    if (!pPriv)
-        return 0;
-    for (pEv = pPriv->events; pEv; pEv = pEv->next)
-        if (pEv->client == client)
-            return pEv->mask;
-    return 0;
-}
-
-static Bool
-setEventMask(ScreenPtr pScreen, ClientPtr client, unsigned long mask)
-{
-    SetupScreen(pScreen);
-    XF86VidModeEventPtr pEv, *pPrev;
-
-    if (getEventMask(pScreen, client) == mask)
-        return TRUE;
-    if (!pPriv) {
-        pPriv = MakeScreenPrivate(pScreen);
-        if (!pPriv)
-            return FALSE;
-    }
-    for (pPrev = &pPriv->events; pEv = *pPrev; pPrev = &pEv->next)
-        if (pEv->client == client)
-            break;
-    if (mask == 0) {
-        *pPrev = pEv->next;
-        free(pEv);
-        CheckScreenPrivate(pScreen);
-    }
-    else {
-        if (!pEv) {
-            pEv = New(ScreenSaverEventRec);
-            if (!pEv) {
-                CheckScreenPrivate(pScreen);
-                return FALSE;
-            }
-            *pPrev = pEv;
-            pEv->next = NULL;
-            pEv->client = client;
-            pEv->screen = pScreen;
-            pEv->resource = FakeClientID(client->index);
-        }
-        pEv->mask = mask;
-    }
-    return TRUE;
-}
-
-static int
-XF86VidModeFreeEvents(pointer value, XID id)
-{
-    XF86VidModeEventPtr pOld = (XF86VidModeEventPtr) value;
-    ScreenPtr pScreen = pOld->screen;
-
-    SetupScreen(pScreen);
-    XF86VidModeEventPtr pEv, *pPrev;
-
-    if (!pPriv)
-        return TRUE;
-    for (pPrev = &pPriv->events; pEv = *pPrev; pPrev = &pEv->next)
-        if (pEv == pOld)
-            break;
-    if (!pEv)
-        return TRUE;
-    *pPrev = pEv->next;
-    free(pEv);
-    CheckScreenPrivate(pScreen);
-    return TRUE;
-}
-
-static void
-SendXF86VidModeNotify(ScreenPtr pScreen, int state, Bool forced)
-{
-    XF86VidModeScreenPrivatePtr pPriv;
-    unsigned long mask;
-    xXF86VidModeNotifyEvent ev;
-    int kind;
-
-    UpdateCurrentTimeIf();
-    mask = XF86VidModeNotifyMask;
-    pScreen = screenInfo.screens[pScreen->myNum];
-    pPriv = GetScreenPrivate(pScreen);
-    if (!pPriv)
-        return;
-    kind = XF86VidModeModeChange;
-    for (pEv = pPriv->events; pEv; pEv = pEv->next) {
-        if (pEv->mask & mask) {
-            XF86VidModeEventPtr pEv = {
-                .type = XF86VidModeNotify + XF86VidModeEventBase,
-                .state = state,
-                .timestamp = currentTime.milliseconds,
-                .root = pScreen->root->drawable.id,
-                .kind = kind,
-                .forced = forced
-            };
-            WriteEventsToClient(pEv->client, 1, (xEvent *) &ev);
-        }
-    }
-}
-
-static void
-SXF86VidModeNotifyEvent(xXF86VidModeNotifyEvent * from,
-                        xXF86VidModeNotifyEvent * to)
-{
-    to->type = from->type;
-    to->state = from->state;
-    cpswaps(from->sequenceNumber, to->sequenceNumber);
-    cpswapl(from->timestamp, to->timestamp);
-    cpswapl(from->root, to->root);
-    to->kind = from->kind;
-    to->forced = from->forced;
-}
-#endif
-
-static int
-ProcXF86VidModeQueryVersion(ClientPtr client)
-{
-    xXF86VidModeQueryVersionReply rep = {
-        .type = X_Reply,
-        .sequenceNumber = client->sequence,
-        .length = 0,
-        .majorVersion = SERVER_XF86VIDMODE_MAJOR_VERSION,
-        .minorVersion = SERVER_XF86VIDMODE_MINOR_VERSION
-    };
-
-    DEBUG_P("XF86VidModeQueryVersion");
-
-    REQUEST_SIZE_MATCH(xXF86VidModeQueryVersionReq);
-
-    if (client->swapped) {
-        swaps(&rep.sequenceNumber);
-        swapl(&rep.length);
-        swaps(&rep.majorVersion);
-        swaps(&rep.minorVersion);
-    }
-    WriteToClient(client, sizeof(xXF86VidModeQueryVersionReply), &rep);
-    return Success;
-}
-
-static int
-ProcXF86VidModeGetModeLine(ClientPtr client)
-{
-    REQUEST(xXF86VidModeGetModeLineReq);
-    xXF86VidModeGetModeLineReply rep = {
-        .type = X_Reply,
-        .sequenceNumber = client->sequence
-    };
-    pointer mode;
-    int dotClock;
-    int ver;
-
-    DEBUG_P("XF86VidModeGetModeline");
-
-    ver = ClientMajorVersion(client);
-    REQUEST_SIZE_MATCH(xXF86VidModeGetModeLineReq);
-
-    if (ver < 2) {
-        rep.length = bytes_to_int32(SIZEOF(xXF86OldVidModeGetModeLineReply) -
-                                    SIZEOF(xGenericReply));
-    }
-    else {
-        rep.length = bytes_to_int32(SIZEOF(xXF86VidModeGetModeLineReply) -
-                                    SIZEOF(xGenericReply));
-    }
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    if (!VidModeGetCurrentModeline(stuff->screen, &mode, &dotClock))
-        return BadValue;
-
-    rep.dotclock = dotClock;
-    rep.hdisplay = VidModeGetModeValue(mode, VIDMODE_H_DISPLAY);
-    rep.hsyncstart = VidModeGetModeValue(mode, VIDMODE_H_SYNCSTART);
-    rep.hsyncend = VidModeGetModeValue(mode, VIDMODE_H_SYNCEND);
-    rep.htotal = VidModeGetModeValue(mode, VIDMODE_H_TOTAL);
-    rep.hskew = VidModeGetModeValue(mode, VIDMODE_H_SKEW);
-    rep.vdisplay = VidModeGetModeValue(mode, VIDMODE_V_DISPLAY);
-    rep.vsyncstart = VidModeGetModeValue(mode, VIDMODE_V_SYNCSTART);
-    rep.vsyncend = VidModeGetModeValue(mode, VIDMODE_V_SYNCEND);
-    rep.vtotal = VidModeGetModeValue(mode, VIDMODE_V_TOTAL);
-    rep.flags = VidModeGetModeValue(mode, VIDMODE_FLAGS);
-
-    if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY) {
-        ErrorF("GetModeLine - scrn: %d clock: %ld\n",
-               stuff->screen, (unsigned long) rep.dotclock);
-        ErrorF("GetModeLine - hdsp: %d hbeg: %d hend: %d httl: %d\n",
-               rep.hdisplay, rep.hsyncstart, rep.hsyncend, rep.htotal);
-        ErrorF("              vdsp: %d vbeg: %d vend: %d vttl: %d flags: %ld\n",
-               rep.vdisplay, rep.vsyncstart, rep.vsyncend,
-               rep.vtotal, (unsigned long) rep.flags);
-    }
-
-    /*
-     * Older servers sometimes had server privates that the VidMode 
-     * extention made available. So to be compatiable pretend that
-     * there are no server privates to pass to the client
-     */
-    rep.privsize = 0;
-
-    if (client->swapped) {
-        swaps(&rep.sequenceNumber);
-        swapl(&rep.length);
-        swapl(&rep.dotclock);
-        swaps(&rep.hdisplay);
-        swaps(&rep.hsyncstart);
-        swaps(&rep.hsyncend);
-        swaps(&rep.htotal);
-        swaps(&rep.hskew);
-        swaps(&rep.vdisplay);
-        swaps(&rep.vsyncstart);
-        swaps(&rep.vsyncend);
-        swaps(&rep.vtotal);
-        swapl(&rep.flags);
-        swapl(&rep.privsize);
-    }
-    if (ver < 2) {
-        xXF86OldVidModeGetModeLineReply oldrep = {
-            .type = rep.type,
-            .sequenceNumber = rep.sequenceNumber,
-            .length = rep.length,
-            .dotclock = rep.dotclock,
-            .hdisplay = rep.hdisplay,
-            .hsyncstart = rep.hsyncstart,
-            .hsyncend = rep.hsyncend,
-            .htotal = rep.htotal,
-            .vdisplay = rep.vdisplay,
-            .vsyncstart = rep.vsyncstart,
-            .vsyncend = rep.vsyncend,
-            .vtotal = rep.vtotal,
-            .flags = rep.flags,
-            .privsize = rep.privsize
-        };
-        WriteToClient(client, sizeof(xXF86OldVidModeGetModeLineReply), &oldrep);
-    }
-    else {
-        WriteToClient(client, sizeof(xXF86VidModeGetModeLineReply), &rep);
-    }
-    return Success;
-}
-
-static int
-ProcXF86VidModeGetAllModeLines(ClientPtr client)
-{
-    REQUEST(xXF86VidModeGetAllModeLinesReq);
-    xXF86VidModeGetAllModeLinesReply rep;
-    pointer mode;
-    int modecount, dotClock;
-    int ver;
-
-    DEBUG_P("XF86VidModeGetAllModelines");
-
-    REQUEST_SIZE_MATCH(xXF86VidModeGetAllModeLinesReq);
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    ver = ClientMajorVersion(client);
-
-    modecount = VidModeGetNumOfModes(stuff->screen);
-    if (modecount < 1)
-        return VidModeErrorBase + XF86VidModeExtensionDisabled;
-
-    if (!VidModeGetFirstModeline(stuff->screen, &mode, &dotClock))
-        return BadValue;
-
-    rep = (xXF86VidModeGetAllModeLinesReply) {
-        .type = X_Reply,
-        .length = SIZEOF(xXF86VidModeGetAllModeLinesReply) -
-            SIZEOF(xGenericReply),
-        .sequenceNumber = client->sequence,
-        .modecount = modecount
-    };
-    if (ver < 2)
-        rep.length += modecount * sizeof(xXF86OldVidModeModeInfo);
-    else
-        rep.length += modecount * sizeof(xXF86VidModeModeInfo);
-    rep.length >>= 2;
-    if (client->swapped) {
-        swaps(&rep.sequenceNumber);
-        swapl(&rep.length);
-        swapl(&rep.modecount);
-    }
-    WriteToClient(client, sizeof(xXF86VidModeGetAllModeLinesReply), &rep);
-
-    do {
-        xXF86VidModeModeInfo mdinf = {
-            .dotclock = dotClock,
-            .hdisplay = VidModeGetModeValue(mode, VIDMODE_H_DISPLAY),
-            .hsyncstart = VidModeGetModeValue(mode, VIDMODE_H_SYNCSTART),
-            .hsyncend = VidModeGetModeValue(mode, VIDMODE_H_SYNCEND),
-            .htotal = VidModeGetModeValue(mode, VIDMODE_H_TOTAL),
-            .hskew = VidModeGetModeValue(mode, VIDMODE_H_SKEW),
-            .vdisplay = VidModeGetModeValue(mode, VIDMODE_V_DISPLAY),
-            .vsyncstart = VidModeGetModeValue(mode, VIDMODE_V_SYNCSTART),
-            .vsyncend = VidModeGetModeValue(mode, VIDMODE_V_SYNCEND),
-            .vtotal = VidModeGetModeValue(mode, VIDMODE_V_TOTAL),
-            .flags = VidModeGetModeValue(mode, VIDMODE_FLAGS),
-            .privsize = 0
-        };
-        if (client->swapped) {
-            swapl(&mdinf.dotclock);
-            swaps(&mdinf.hdisplay);
-            swaps(&mdinf.hsyncstart);
-            swaps(&mdinf.hsyncend);
-            swaps(&mdinf.htotal);
-            swapl(&mdinf.hskew);
-            swaps(&mdinf.vdisplay);
-            swaps(&mdinf.vsyncstart);
-            swaps(&mdinf.vsyncend);
-            swaps(&mdinf.vtotal);
-            swapl(&mdinf.flags);
-            swapl(&mdinf.privsize);
-        }
-        if (ver < 2) {
-            xXF86OldVidModeModeInfo oldmdinf = {
-                .dotclock = mdinf.dotclock,
-                .hdisplay = mdinf.hdisplay,
-                .hsyncstart = mdinf.hsyncstart,
-                .hsyncend = mdinf.hsyncend,
-                .htotal = mdinf.htotal,
-                .vdisplay = mdinf.vdisplay,
-                .vsyncstart = mdinf.vsyncstart,
-                .vsyncend = mdinf.vsyncend,
-                .vtotal = mdinf.vtotal,
-                .flags = mdinf.flags,
-                .privsize = mdinf.privsize
-            };
-            WriteToClient(client, sizeof(xXF86OldVidModeModeInfo), &oldmdinf);
-        }
-        else {
-            WriteToClient(client, sizeof(xXF86VidModeModeInfo), &mdinf);
-        }
-
-    } while (VidModeGetNextModeline(stuff->screen, &mode, &dotClock));
-
-    return Success;
-}
-
-#define MODEMATCH(mode,stuff)	  \
-     (VidModeGetModeValue(mode, VIDMODE_H_DISPLAY)  == stuff->hdisplay \
-     && VidModeGetModeValue(mode, VIDMODE_H_SYNCSTART)  == stuff->hsyncstart \
-     && VidModeGetModeValue(mode, VIDMODE_H_SYNCEND)  == stuff->hsyncend \
-     && VidModeGetModeValue(mode, VIDMODE_H_TOTAL)  == stuff->htotal \
-     && VidModeGetModeValue(mode, VIDMODE_V_DISPLAY)  == stuff->vdisplay \
-     && VidModeGetModeValue(mode, VIDMODE_V_SYNCSTART)  == stuff->vsyncstart \
-     && VidModeGetModeValue(mode, VIDMODE_V_SYNCEND)  == stuff->vsyncend \
-     && VidModeGetModeValue(mode, VIDMODE_V_TOTAL)  == stuff->vtotal \
-     && VidModeGetModeValue(mode, VIDMODE_FLAGS)  == stuff->flags )
-
-static int
-ProcXF86VidModeAddModeLine(ClientPtr client)
-{
-    REQUEST(xXF86VidModeAddModeLineReq);
-    xXF86OldVidModeAddModeLineReq *oldstuff =
-        (xXF86OldVidModeAddModeLineReq *) client->requestBuffer;
-    xXF86VidModeAddModeLineReq newstuff;
-    pointer mode;
-    int len;
-    int dotClock;
-    int ver;
-
-    DEBUG_P("XF86VidModeAddModeline");
-
-    ver = ClientMajorVersion(client);
-    if (ver < 2) {
-        /* convert from old format */
-        stuff = &newstuff;
-        stuff->length = oldstuff->length;
-        stuff->screen = oldstuff->screen;
-        stuff->dotclock = oldstuff->dotclock;
-        stuff->hdisplay = oldstuff->hdisplay;
-        stuff->hsyncstart = oldstuff->hsyncstart;
-        stuff->hsyncend = oldstuff->hsyncend;
-        stuff->htotal = oldstuff->htotal;
-        stuff->hskew = 0;
-        stuff->vdisplay = oldstuff->vdisplay;
-        stuff->vsyncstart = oldstuff->vsyncstart;
-        stuff->vsyncend = oldstuff->vsyncend;
-        stuff->vtotal = oldstuff->vtotal;
-        stuff->flags = oldstuff->flags;
-        stuff->privsize = oldstuff->privsize;
-        stuff->after_dotclock = oldstuff->after_dotclock;
-        stuff->after_hdisplay = oldstuff->after_hdisplay;
-        stuff->after_hsyncstart = oldstuff->after_hsyncstart;
-        stuff->after_hsyncend = oldstuff->after_hsyncend;
-        stuff->after_htotal = oldstuff->after_htotal;
-        stuff->after_hskew = 0;
-        stuff->after_vdisplay = oldstuff->after_vdisplay;
-        stuff->after_vsyncstart = oldstuff->after_vsyncstart;
-        stuff->after_vsyncend = oldstuff->after_vsyncend;
-        stuff->after_vtotal = oldstuff->after_vtotal;
-        stuff->after_flags = oldstuff->after_flags;
-    }
-    if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY) {
-        ErrorF("AddModeLine - scrn: %d clock: %ld\n",
-               (int) stuff->screen, (unsigned long) stuff->dotclock);
-        ErrorF("AddModeLine - hdsp: %d hbeg: %d hend: %d httl: %d\n",
-               stuff->hdisplay, stuff->hsyncstart,
-               stuff->hsyncend, stuff->htotal);
-        ErrorF("              vdsp: %d vbeg: %d vend: %d vttl: %d flags: %ld\n",
-               stuff->vdisplay, stuff->vsyncstart, stuff->vsyncend,
-               stuff->vtotal, (unsigned long) stuff->flags);
-        ErrorF("      after - scrn: %d clock: %ld\n",
-               (int) stuff->screen, (unsigned long) stuff->after_dotclock);
-        ErrorF("              hdsp: %d hbeg: %d hend: %d httl: %d\n",
-               stuff->after_hdisplay, stuff->after_hsyncstart,
-               stuff->after_hsyncend, stuff->after_htotal);
-        ErrorF("              vdsp: %d vbeg: %d vend: %d vttl: %d flags: %ld\n",
-               stuff->after_vdisplay, stuff->after_vsyncstart,
-               stuff->after_vsyncend, stuff->after_vtotal,
-               (unsigned long) stuff->after_flags);
-    }
-
-    if (ver < 2) {
-        REQUEST_AT_LEAST_SIZE(xXF86OldVidModeAddModeLineReq);
-        len =
-            client->req_len -
-            bytes_to_int32(sizeof(xXF86OldVidModeAddModeLineReq));
-    }
-    else {
-        REQUEST_AT_LEAST_SIZE(xXF86VidModeAddModeLineReq);
-        len =
-            client->req_len -
-            bytes_to_int32(sizeof(xXF86VidModeAddModeLineReq));
-    }
-    if (len != stuff->privsize)
-        return BadLength;
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    if (stuff->hsyncstart < stuff->hdisplay ||
-        stuff->hsyncend < stuff->hsyncstart ||
-        stuff->htotal < stuff->hsyncend ||
-        stuff->vsyncstart < stuff->vdisplay ||
-        stuff->vsyncend < stuff->vsyncstart || stuff->vtotal < stuff->vsyncend)
-        return BadValue;
-
-    if (stuff->after_hsyncstart < stuff->after_hdisplay ||
-        stuff->after_hsyncend < stuff->after_hsyncstart ||
-        stuff->after_htotal < stuff->after_hsyncend ||
-        stuff->after_vsyncstart < stuff->after_vdisplay ||
-        stuff->after_vsyncend < stuff->after_vsyncstart ||
-        stuff->after_vtotal < stuff->after_vsyncend)
-        return BadValue;
-
-    if (stuff->after_htotal != 0 || stuff->after_vtotal != 0) {
-        Bool found = FALSE;
-
-        if (VidModeGetFirstModeline(stuff->screen, &mode, &dotClock)) {
-            do {
-                if ((VidModeGetDotClock(stuff->screen, stuff->dotclock)
-                     == dotClock) && MODEMATCH(mode, stuff)) {
-                    found = TRUE;
-                    break;
-                }
-            } while (VidModeGetNextModeline(stuff->screen, &mode, &dotClock));
-        }
-        if (!found)
-            return BadValue;
-    }
-
-    mode = VidModeCreateMode();
-    if (mode == NULL)
-        return BadValue;
-
-    VidModeSetModeValue(mode, VIDMODE_CLOCK, stuff->dotclock);
-    VidModeSetModeValue(mode, VIDMODE_H_DISPLAY, stuff->hdisplay);
-    VidModeSetModeValue(mode, VIDMODE_H_SYNCSTART, stuff->hsyncstart);
-    VidModeSetModeValue(mode, VIDMODE_H_SYNCEND, stuff->hsyncend);
-    VidModeSetModeValue(mode, VIDMODE_H_TOTAL, stuff->htotal);
-    VidModeSetModeValue(mode, VIDMODE_H_SKEW, stuff->hskew);
-    VidModeSetModeValue(mode, VIDMODE_V_DISPLAY, stuff->vdisplay);
-    VidModeSetModeValue(mode, VIDMODE_V_SYNCSTART, stuff->vsyncstart);
-    VidModeSetModeValue(mode, VIDMODE_V_SYNCEND, stuff->vsyncend);
-    VidModeSetModeValue(mode, VIDMODE_V_TOTAL, stuff->vtotal);
-    VidModeSetModeValue(mode, VIDMODE_FLAGS, stuff->flags);
-
-    if (stuff->privsize)
-        ErrorF("AddModeLine - Privates in request have been ignored\n");
-
-    /* Check that the mode is consistent with the monitor specs */
-    switch (VidModeCheckModeForMonitor(stuff->screen, mode)) {
-    case MODE_OK:
-        break;
-    case MODE_HSYNC:
-    case MODE_H_ILLEGAL:
-        free(mode);
-        return VidModeErrorBase + XF86VidModeBadHTimings;
-    case MODE_VSYNC:
-    case MODE_V_ILLEGAL:
-        free(mode);
-        return VidModeErrorBase + XF86VidModeBadVTimings;
-    default:
-        free(mode);
-        return VidModeErrorBase + XF86VidModeModeUnsuitable;
-    }
-
-    /* Check that the driver is happy with the mode */
-    if (VidModeCheckModeForDriver(stuff->screen, mode) != MODE_OK) {
-        free(mode);
-        return VidModeErrorBase + XF86VidModeModeUnsuitable;
-    }
-
-    VidModeSetCrtcForMode(stuff->screen, mode);
-
-    VidModeAddModeline(stuff->screen, mode);
-
-    if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY)
-        ErrorF("AddModeLine - Succeeded\n");
-    return Success;
-}
-
-static int
-ProcXF86VidModeDeleteModeLine(ClientPtr client)
-{
-    REQUEST(xXF86VidModeDeleteModeLineReq);
-    xXF86OldVidModeDeleteModeLineReq *oldstuff =
-        (xXF86OldVidModeDeleteModeLineReq *) client->requestBuffer;
-    xXF86VidModeDeleteModeLineReq newstuff;
-    pointer mode;
-    int len, dotClock;
-    int ver;
-
-    DEBUG_P("XF86VidModeDeleteModeline");
-
-    ver = ClientMajorVersion(client);
-    if (ver < 2) {
-        /* convert from old format */
-        stuff = &newstuff;
-        stuff->length = oldstuff->length;
-        stuff->screen = oldstuff->screen;
-        stuff->dotclock = oldstuff->dotclock;
-        stuff->hdisplay = oldstuff->hdisplay;
-        stuff->hsyncstart = oldstuff->hsyncstart;
-        stuff->hsyncend = oldstuff->hsyncend;
-        stuff->htotal = oldstuff->htotal;
-        stuff->hskew = 0;
-        stuff->vdisplay = oldstuff->vdisplay;
-        stuff->vsyncstart = oldstuff->vsyncstart;
-        stuff->vsyncend = oldstuff->vsyncend;
-        stuff->vtotal = oldstuff->vtotal;
-        stuff->flags = oldstuff->flags;
-        stuff->privsize = oldstuff->privsize;
-    }
-    if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY) {
-        ErrorF("DeleteModeLine - scrn: %d clock: %ld\n",
-               (int) stuff->screen, (unsigned long) stuff->dotclock);
-        ErrorF("                 hdsp: %d hbeg: %d hend: %d httl: %d\n",
-               stuff->hdisplay, stuff->hsyncstart,
-               stuff->hsyncend, stuff->htotal);
-        ErrorF
-            ("                 vdsp: %d vbeg: %d vend: %d vttl: %d flags: %ld\n",
-             stuff->vdisplay, stuff->vsyncstart, stuff->vsyncend, stuff->vtotal,
-             (unsigned long) stuff->flags);
-    }
-
-    if (ver < 2) {
-        REQUEST_AT_LEAST_SIZE(xXF86OldVidModeDeleteModeLineReq);
-        len =
-            client->req_len -
-            bytes_to_int32(sizeof(xXF86OldVidModeDeleteModeLineReq));
-    }
-    else {
-        REQUEST_AT_LEAST_SIZE(xXF86VidModeDeleteModeLineReq);
-        len =
-            client->req_len -
-            bytes_to_int32(sizeof(xXF86VidModeDeleteModeLineReq));
-    }
-    if (len != stuff->privsize) {
-        if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY) {
-            ErrorF("req_len = %ld, sizeof(Req) = %d, privsize = %ld, "
-                   "len = %d, length = %d\n",
-                   (unsigned long) client->req_len,
-                   (int) sizeof(xXF86VidModeDeleteModeLineReq) >> 2,
-                   (unsigned long) stuff->privsize, len, stuff->length);
-        }
-        return BadLength;
-    }
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    if (!VidModeGetCurrentModeline(stuff->screen, &mode, &dotClock))
-        return BadValue;
-
-    if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY) {
-        ErrorF("Checking against clock: %d (%d)\n",
-               VidModeGetModeValue(mode, VIDMODE_CLOCK), dotClock);
-        ErrorF("                 hdsp: %d hbeg: %d hend: %d httl: %d\n",
-               VidModeGetModeValue(mode, VIDMODE_H_DISPLAY),
-               VidModeGetModeValue(mode, VIDMODE_H_SYNCSTART),
-               VidModeGetModeValue(mode, VIDMODE_H_SYNCEND),
-               VidModeGetModeValue(mode, VIDMODE_H_TOTAL));
-        ErrorF
-            ("                 vdsp: %d vbeg: %d vend: %d vttl: %d flags: %d\n",
-             VidModeGetModeValue(mode, VIDMODE_V_DISPLAY),
-             VidModeGetModeValue(mode, VIDMODE_V_SYNCSTART),
-             VidModeGetModeValue(mode, VIDMODE_V_SYNCEND),
-             VidModeGetModeValue(mode, VIDMODE_V_TOTAL),
-             VidModeGetModeValue(mode, VIDMODE_FLAGS));
-    }
-    if ((VidModeGetDotClock(stuff->screen, stuff->dotclock) == dotClock) &&
-        MODEMATCH(mode, stuff))
-        return BadValue;
-
-    if (!VidModeGetFirstModeline(stuff->screen, &mode, &dotClock))
-        return BadValue;
-
-    do {
-        if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY) {
-            ErrorF("Checking against clock: %d (%d)\n",
-                   VidModeGetModeValue(mode, VIDMODE_CLOCK), dotClock);
-            ErrorF("                 hdsp: %d hbeg: %d hend: %d httl: %d\n",
-                   VidModeGetModeValue(mode, VIDMODE_H_DISPLAY),
-                   VidModeGetModeValue(mode, VIDMODE_H_SYNCSTART),
-                   VidModeGetModeValue(mode, VIDMODE_H_SYNCEND),
-                   VidModeGetModeValue(mode, VIDMODE_H_TOTAL));
-            ErrorF
-                ("                 vdsp: %d vbeg: %d vend: %d vttl: %d flags: %d\n",
-                 VidModeGetModeValue(mode, VIDMODE_V_DISPLAY),
-                 VidModeGetModeValue(mode, VIDMODE_V_SYNCSTART),
-                 VidModeGetModeValue(mode, VIDMODE_V_SYNCEND),
-                 VidModeGetModeValue(mode, VIDMODE_V_TOTAL),
-                 VidModeGetModeValue(mode, VIDMODE_FLAGS));
-        }
-        if ((VidModeGetDotClock(stuff->screen, stuff->dotclock) == dotClock) &&
-            MODEMATCH(mode, stuff)) {
-            VidModeDeleteModeline(stuff->screen, mode);
-            if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY)
-                ErrorF("DeleteModeLine - Succeeded\n");
-            return Success;
-        }
-    } while (VidModeGetNextModeline(stuff->screen, &mode, &dotClock));
-
-    return BadValue;
-}
-
-static int
-ProcXF86VidModeModModeLine(ClientPtr client)
-{
-    REQUEST(xXF86VidModeModModeLineReq);
-    xXF86OldVidModeModModeLineReq *oldstuff =
-        (xXF86OldVidModeModModeLineReq *) client->requestBuffer;
-    xXF86VidModeModModeLineReq newstuff;
-    pointer mode, modetmp;
-    int len, dotClock;
-    int ver;
-
-    DEBUG_P("XF86VidModeModModeline");
-
-    ver = ClientMajorVersion(client);
-    if (ver < 2) {
-        /* convert from old format */
-        stuff = &newstuff;
-        stuff->length = oldstuff->length;
-        stuff->screen = oldstuff->screen;
-        stuff->hdisplay = oldstuff->hdisplay;
-        stuff->hsyncstart = oldstuff->hsyncstart;
-        stuff->hsyncend = oldstuff->hsyncend;
-        stuff->htotal = oldstuff->htotal;
-        stuff->hskew = 0;
-        stuff->vdisplay = oldstuff->vdisplay;
-        stuff->vsyncstart = oldstuff->vsyncstart;
-        stuff->vsyncend = oldstuff->vsyncend;
-        stuff->vtotal = oldstuff->vtotal;
-        stuff->flags = oldstuff->flags;
-        stuff->privsize = oldstuff->privsize;
-    }
-    if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY) {
-        ErrorF("ModModeLine - scrn: %d hdsp: %d hbeg: %d hend: %d httl: %d\n",
-               (int) stuff->screen, stuff->hdisplay, stuff->hsyncstart,
-               stuff->hsyncend, stuff->htotal);
-        ErrorF("              vdsp: %d vbeg: %d vend: %d vttl: %d flags: %ld\n",
-               stuff->vdisplay, stuff->vsyncstart, stuff->vsyncend,
-               stuff->vtotal, (unsigned long) stuff->flags);
-    }
-
-    if (ver < 2) {
-        REQUEST_AT_LEAST_SIZE(xXF86OldVidModeModModeLineReq);
-        len =
-            client->req_len -
-            bytes_to_int32(sizeof(xXF86OldVidModeModModeLineReq));
-    }
-    else {
-        REQUEST_AT_LEAST_SIZE(xXF86VidModeModModeLineReq);
-        len =
-            client->req_len -
-            bytes_to_int32(sizeof(xXF86VidModeModModeLineReq));
-    }
-    if (len != stuff->privsize)
-        return BadLength;
-
-    if (stuff->hsyncstart < stuff->hdisplay ||
-        stuff->hsyncend < stuff->hsyncstart ||
-        stuff->htotal < stuff->hsyncend ||
-        stuff->vsyncstart < stuff->vdisplay ||
-        stuff->vsyncend < stuff->vsyncstart || stuff->vtotal < stuff->vsyncend)
-        return BadValue;
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    if (!VidModeGetCurrentModeline(stuff->screen, &mode, &dotClock))
-        return BadValue;
-
-    modetmp = VidModeCreateMode();
-    VidModeCopyMode(mode, modetmp);
-
-    VidModeSetModeValue(modetmp, VIDMODE_H_DISPLAY, stuff->hdisplay);
-    VidModeSetModeValue(modetmp, VIDMODE_H_SYNCSTART, stuff->hsyncstart);
-    VidModeSetModeValue(modetmp, VIDMODE_H_SYNCEND, stuff->hsyncend);
-    VidModeSetModeValue(modetmp, VIDMODE_H_TOTAL, stuff->htotal);
-    VidModeSetModeValue(modetmp, VIDMODE_H_SKEW, stuff->hskew);
-    VidModeSetModeValue(modetmp, VIDMODE_V_DISPLAY, stuff->vdisplay);
-    VidModeSetModeValue(modetmp, VIDMODE_V_SYNCSTART, stuff->vsyncstart);
-    VidModeSetModeValue(modetmp, VIDMODE_V_SYNCEND, stuff->vsyncend);
-    VidModeSetModeValue(modetmp, VIDMODE_V_TOTAL, stuff->vtotal);
-    VidModeSetModeValue(modetmp, VIDMODE_FLAGS, stuff->flags);
-
-    if (stuff->privsize)
-        ErrorF("ModModeLine - Privates in request have been ignored\n");
-
-    /* Check that the mode is consistent with the monitor specs */
-    switch (VidModeCheckModeForMonitor(stuff->screen, modetmp)) {
-    case MODE_OK:
-        break;
-    case MODE_HSYNC:
-    case MODE_H_ILLEGAL:
-        free(modetmp);
-        return VidModeErrorBase + XF86VidModeBadHTimings;
-    case MODE_VSYNC:
-    case MODE_V_ILLEGAL:
-        free(modetmp);
-        return VidModeErrorBase + XF86VidModeBadVTimings;
-    default:
-        free(modetmp);
-        return VidModeErrorBase + XF86VidModeModeUnsuitable;
-    }
-
-    /* Check that the driver is happy with the mode */
-    if (VidModeCheckModeForDriver(stuff->screen, modetmp) != MODE_OK) {
-        free(modetmp);
-        return VidModeErrorBase + XF86VidModeModeUnsuitable;
-    }
-    free(modetmp);
-
-    VidModeSetModeValue(mode, VIDMODE_H_DISPLAY, stuff->hdisplay);
-    VidModeSetModeValue(mode, VIDMODE_H_SYNCSTART, stuff->hsyncstart);
-    VidModeSetModeValue(mode, VIDMODE_H_SYNCEND, stuff->hsyncend);
-    VidModeSetModeValue(mode, VIDMODE_H_TOTAL, stuff->htotal);
-    VidModeSetModeValue(mode, VIDMODE_H_SKEW, stuff->hskew);
-    VidModeSetModeValue(mode, VIDMODE_V_DISPLAY, stuff->vdisplay);
-    VidModeSetModeValue(mode, VIDMODE_V_SYNCSTART, stuff->vsyncstart);
-    VidModeSetModeValue(mode, VIDMODE_V_SYNCEND, stuff->vsyncend);
-    VidModeSetModeValue(mode, VIDMODE_V_TOTAL, stuff->vtotal);
-    VidModeSetModeValue(mode, VIDMODE_FLAGS, stuff->flags);
-
-    VidModeSetCrtcForMode(stuff->screen, mode);
-    VidModeSwitchMode(stuff->screen, mode);
-
-    if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY)
-        ErrorF("ModModeLine - Succeeded\n");
-    return Success;
-}
-
-static int
-ProcXF86VidModeValidateModeLine(ClientPtr client)
-{
-    REQUEST(xXF86VidModeValidateModeLineReq);
-    xXF86OldVidModeValidateModeLineReq *oldstuff =
-        (xXF86OldVidModeValidateModeLineReq *) client->requestBuffer;
-    xXF86VidModeValidateModeLineReq newstuff;
-    xXF86VidModeValidateModeLineReply rep;
-    pointer mode, modetmp = NULL;
-    int len, status, dotClock;
-    int ver;
-
-    DEBUG_P("XF86VidModeValidateModeline");
-
-    ver = ClientMajorVersion(client);
-    if (ver < 2) {
-        /* convert from old format */
-        stuff = &newstuff;
-        stuff->length = oldstuff->length;
-        stuff->screen = oldstuff->screen;
-        stuff->dotclock = oldstuff->dotclock;
-        stuff->hdisplay = oldstuff->hdisplay;
-        stuff->hsyncstart = oldstuff->hsyncstart;
-        stuff->hsyncend = oldstuff->hsyncend;
-        stuff->htotal = oldstuff->htotal;
-        stuff->hskew = 0;
-        stuff->vdisplay = oldstuff->vdisplay;
-        stuff->vsyncstart = oldstuff->vsyncstart;
-        stuff->vsyncend = oldstuff->vsyncend;
-        stuff->vtotal = oldstuff->vtotal;
-        stuff->flags = oldstuff->flags;
-        stuff->privsize = oldstuff->privsize;
-    }
-    if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY) {
-        ErrorF("ValidateModeLine - scrn: %d clock: %ld\n",
-               (int) stuff->screen, (unsigned long) stuff->dotclock);
-        ErrorF("                   hdsp: %d hbeg: %d hend: %d httl: %d\n",
-               stuff->hdisplay, stuff->hsyncstart,
-               stuff->hsyncend, stuff->htotal);
-        ErrorF
-            ("                   vdsp: %d vbeg: %d vend: %d vttl: %d flags: %ld\n",
-             stuff->vdisplay, stuff->vsyncstart, stuff->vsyncend, stuff->vtotal,
-             (unsigned long) stuff->flags);
-    }
-
-    if (ver < 2) {
-        REQUEST_AT_LEAST_SIZE(xXF86OldVidModeValidateModeLineReq);
-        len = client->req_len -
-            bytes_to_int32(sizeof(xXF86OldVidModeValidateModeLineReq));
-    }
-    else {
-        REQUEST_AT_LEAST_SIZE(xXF86VidModeValidateModeLineReq);
-        len =
-            client->req_len -
-            bytes_to_int32(sizeof(xXF86VidModeValidateModeLineReq));
-    }
-    if (len != stuff->privsize)
-        return BadLength;
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    status = MODE_OK;
-
-    if (stuff->hsyncstart < stuff->hdisplay ||
-        stuff->hsyncend < stuff->hsyncstart ||
-        stuff->htotal < stuff->hsyncend ||
-        stuff->vsyncstart < stuff->vdisplay ||
-        stuff->vsyncend < stuff->vsyncstart ||
-        stuff->vtotal < stuff->vsyncend) {
-        status = MODE_BAD;
-        goto status_reply;
-    }
-
-    if (!VidModeGetCurrentModeline(stuff->screen, &mode, &dotClock))
-        return BadValue;
-
-    modetmp = VidModeCreateMode();
-    VidModeCopyMode(mode, modetmp);
-
-    VidModeSetModeValue(modetmp, VIDMODE_H_DISPLAY, stuff->hdisplay);
-    VidModeSetModeValue(modetmp, VIDMODE_H_SYNCSTART, stuff->hsyncstart);
-    VidModeSetModeValue(modetmp, VIDMODE_H_SYNCEND, stuff->hsyncend);
-    VidModeSetModeValue(modetmp, VIDMODE_H_TOTAL, stuff->htotal);
-    VidModeSetModeValue(modetmp, VIDMODE_H_SKEW, stuff->hskew);
-    VidModeSetModeValue(modetmp, VIDMODE_V_DISPLAY, stuff->vdisplay);
-    VidModeSetModeValue(modetmp, VIDMODE_V_SYNCSTART, stuff->vsyncstart);
-    VidModeSetModeValue(modetmp, VIDMODE_V_SYNCEND, stuff->vsyncend);
-    VidModeSetModeValue(modetmp, VIDMODE_V_TOTAL, stuff->vtotal);
-    VidModeSetModeValue(modetmp, VIDMODE_FLAGS, stuff->flags);
-    if (stuff->privsize)
-        ErrorF("ValidateModeLine - Privates in request have been ignored\n");
-
-    /* Check that the mode is consistent with the monitor specs */
-    if ((status =
-         VidModeCheckModeForMonitor(stuff->screen, modetmp)) != MODE_OK)
-        goto status_reply;
-
-    /* Check that the driver is happy with the mode */
-    status = VidModeCheckModeForDriver(stuff->screen, modetmp);
-
- status_reply:
-    free(modetmp);
-
-    rep = (xXF86VidModeValidateModeLineReply) {
-        .type = X_Reply,
-        .sequenceNumber = client->sequence,
-        .length = bytes_to_int32(SIZEOF(xXF86VidModeValidateModeLineReply)
-                                 - SIZEOF(xGenericReply)),
-        .status = status
-    };
-    if (client->swapped) {
-        swaps(&rep.sequenceNumber);
-        swapl(&rep.length);
-        swapl(&rep.status);
-    }
-    WriteToClient(client, sizeof(xXF86VidModeValidateModeLineReply), &rep);
-    if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY)
-        ErrorF("ValidateModeLine - Succeeded (status = %d)\n", status);
-    return Success;
-}
-
-static int
-ProcXF86VidModeSwitchMode(ClientPtr client)
-{
-    REQUEST(xXF86VidModeSwitchModeReq);
-
-    DEBUG_P("XF86VidModeSwitchMode");
-
-    REQUEST_SIZE_MATCH(xXF86VidModeSwitchModeReq);
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    VidModeZoomViewport(stuff->screen, (short) stuff->zoom);
-
-    return Success;
-}
-
-static int
-ProcXF86VidModeSwitchToMode(ClientPtr client)
-{
-    REQUEST(xXF86VidModeSwitchToModeReq);
-    xXF86OldVidModeSwitchToModeReq *oldstuff =
-        (xXF86OldVidModeSwitchToModeReq *) client->requestBuffer;
-    xXF86VidModeSwitchToModeReq newstuff;
-    pointer mode;
-    int len, dotClock;
-    int ver;
-
-    DEBUG_P("XF86VidModeSwitchToMode");
-
-    ver = ClientMajorVersion(client);
-    if (ver < 2) {
-        /* convert from old format */
-        stuff = &newstuff;
-        stuff->length = oldstuff->length;
-        stuff->screen = oldstuff->screen;
-        stuff->dotclock = oldstuff->dotclock;
-        stuff->hdisplay = oldstuff->hdisplay;
-        stuff->hsyncstart = oldstuff->hsyncstart;
-        stuff->hsyncend = oldstuff->hsyncend;
-        stuff->htotal = oldstuff->htotal;
-        stuff->hskew = 0;
-        stuff->vdisplay = oldstuff->vdisplay;
-        stuff->vsyncstart = oldstuff->vsyncstart;
-        stuff->vsyncend = oldstuff->vsyncend;
-        stuff->vtotal = oldstuff->vtotal;
-        stuff->flags = oldstuff->flags;
-        stuff->privsize = oldstuff->privsize;
-    }
-    if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY) {
-        ErrorF("SwitchToMode - scrn: %d clock: %ld\n",
-               (int) stuff->screen, (unsigned long) stuff->dotclock);
-        ErrorF("               hdsp: %d hbeg: %d hend: %d httl: %d\n",
-               stuff->hdisplay, stuff->hsyncstart,
-               stuff->hsyncend, stuff->htotal);
-        ErrorF
-            ("               vdsp: %d vbeg: %d vend: %d vttl: %d flags: %ld\n",
-             stuff->vdisplay, stuff->vsyncstart, stuff->vsyncend, stuff->vtotal,
-             (unsigned long) stuff->flags);
-    }
-
-    if (ver < 2) {
-        REQUEST_AT_LEAST_SIZE(xXF86OldVidModeSwitchToModeReq);
-        len =
-            client->req_len -
-            bytes_to_int32(sizeof(xXF86OldVidModeSwitchToModeReq));
-    }
-    else {
-        REQUEST_AT_LEAST_SIZE(xXF86VidModeSwitchToModeReq);
-        len =
-            client->req_len -
-            bytes_to_int32(sizeof(xXF86VidModeSwitchToModeReq));
-    }
-    if (len != stuff->privsize)
-        return BadLength;
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    if (!VidModeGetCurrentModeline(stuff->screen, &mode, &dotClock))
-        return BadValue;
-
-    if ((VidModeGetDotClock(stuff->screen, stuff->dotclock) == dotClock)
-        && MODEMATCH(mode, stuff))
-        return Success;
-
-    if (!VidModeGetFirstModeline(stuff->screen, &mode, &dotClock))
-        return BadValue;
-
-    do {
-        if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY) {
-            ErrorF("Checking against clock: %d (%d)\n",
-                   VidModeGetModeValue(mode, VIDMODE_CLOCK), dotClock);
-            ErrorF("                 hdsp: %d hbeg: %d hend: %d httl: %d\n",
-                   VidModeGetModeValue(mode, VIDMODE_H_DISPLAY),
-                   VidModeGetModeValue(mode, VIDMODE_H_SYNCSTART),
-                   VidModeGetModeValue(mode, VIDMODE_H_SYNCEND),
-                   VidModeGetModeValue(mode, VIDMODE_H_TOTAL));
-            ErrorF
-                ("                 vdsp: %d vbeg: %d vend: %d vttl: %d flags: %d\n",
-                 VidModeGetModeValue(mode, VIDMODE_V_DISPLAY),
-                 VidModeGetModeValue(mode, VIDMODE_V_SYNCSTART),
-                 VidModeGetModeValue(mode, VIDMODE_V_SYNCEND),
-                 VidModeGetModeValue(mode, VIDMODE_V_TOTAL),
-                 VidModeGetModeValue(mode, VIDMODE_FLAGS));
-        }
-        if ((VidModeGetDotClock(stuff->screen, stuff->dotclock) == dotClock) &&
-            MODEMATCH(mode, stuff)) {
-
-            if (!VidModeSwitchMode(stuff->screen, mode))
-                return BadValue;
-
-            if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY)
-                ErrorF("SwitchToMode - Succeeded\n");
-            return Success;
-        }
-    } while (VidModeGetNextModeline(stuff->screen, &mode, &dotClock));
-
-    return BadValue;
-}
-
-static int
-ProcXF86VidModeLockModeSwitch(ClientPtr client)
-{
-    REQUEST(xXF86VidModeLockModeSwitchReq);
-
-    REQUEST_SIZE_MATCH(xXF86VidModeLockModeSwitchReq);
-
-    DEBUG_P("XF86VidModeLockModeSwitch");
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    if (!VidModeLockZoom(stuff->screen, (short) stuff->lock))
-        return VidModeErrorBase + XF86VidModeZoomLocked;
-
-    return Success;
-}
-
-static int
-ProcXF86VidModeGetMonitor(ClientPtr client)
-{
-    REQUEST(xXF86VidModeGetMonitorReq);
-    xXF86VidModeGetMonitorReply rep = {
-        .type = X_Reply,
-        .sequenceNumber = client->sequence
-    };
-    CARD32 *hsyncdata, *vsyncdata;
-    int i, nHsync, nVrefresh;
-    pointer monitor;
-
-    DEBUG_P("XF86VidModeGetMonitor");
-
-    REQUEST_SIZE_MATCH(xXF86VidModeGetMonitorReq);
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    if (!VidModeGetMonitor(stuff->screen, &monitor))
-        return BadValue;
-
-    nHsync = VidModeGetMonitorValue(monitor, VIDMODE_MON_NHSYNC, 0).i;
-    nVrefresh = VidModeGetMonitorValue(monitor, VIDMODE_MON_NVREFRESH, 0).i;
-
-    if ((char *) (VidModeGetMonitorValue(monitor, VIDMODE_MON_VENDOR, 0)).ptr)
-        rep.vendorLength = strlen((char *) (VidModeGetMonitorValue(monitor,
-                                                                   VIDMODE_MON_VENDOR,
-                                                                   0)).ptr);
-    else
-        rep.vendorLength = 0;
-    if ((char *) (VidModeGetMonitorValue(monitor, VIDMODE_MON_MODEL, 0)).ptr)
-        rep.modelLength = strlen((char *) (VidModeGetMonitorValue(monitor,
-                                                                  VIDMODE_MON_MODEL,
-                                                                  0)).ptr);
-    else
-        rep.modelLength = 0;
-    rep.length =
-        bytes_to_int32(SIZEOF(xXF86VidModeGetMonitorReply) -
-                       SIZEOF(xGenericReply) + (nHsync +
-                                                nVrefresh) * sizeof(CARD32) +
-                       pad_to_int32(rep.vendorLength) +
-                       pad_to_int32(rep.modelLength));
-    rep.nhsync = nHsync;
-    rep.nvsync = nVrefresh;
-    hsyncdata = malloc(nHsync * sizeof(CARD32));
-    if (!hsyncdata) {
-        return BadAlloc;
-    }
-    vsyncdata = malloc(nVrefresh * sizeof(CARD32));
-
-    if (!vsyncdata) {
-        free(hsyncdata);
-        return BadAlloc;
-    }
-
-    for (i = 0; i < nHsync; i++) {
-        hsyncdata[i] = (unsigned short) (VidModeGetMonitorValue(monitor,
-                                                                VIDMODE_MON_HSYNC_LO,
-                                                                i)).f |
-            (unsigned
-             short) (VidModeGetMonitorValue(monitor, VIDMODE_MON_HSYNC_HI,
-                                            i)).f << 16;
-    }
-    for (i = 0; i < nVrefresh; i++) {
-        vsyncdata[i] = (unsigned short) (VidModeGetMonitorValue(monitor,
-                                                                VIDMODE_MON_VREFRESH_LO,
-                                                                i)).f |
-            (unsigned
-             short) (VidModeGetMonitorValue(monitor, VIDMODE_MON_VREFRESH_HI,
-                                            i)).f << 16;
-    }
-
-    if (client->swapped) {
-        swaps(&rep.sequenceNumber);
-        swapl(&rep.length);
-    }
-    WriteToClient(client, SIZEOF(xXF86VidModeGetMonitorReply), &rep);
-    client->pSwapReplyFunc = (ReplySwapPtr) Swap32Write;
-    WriteSwappedDataToClient(client, nHsync * sizeof(CARD32), hsyncdata);
-    WriteSwappedDataToClient(client, nVrefresh * sizeof(CARD32), vsyncdata);
-    if (rep.vendorLength)
-        WriteToClient(client, rep.vendorLength,
-                 (VidModeGetMonitorValue(monitor, VIDMODE_MON_VENDOR, 0)).ptr);
-    if (rep.modelLength)
-        WriteToClient(client, rep.modelLength,
-                 (VidModeGetMonitorValue(monitor, VIDMODE_MON_MODEL, 0)).ptr);
-
-    free(hsyncdata);
-    free(vsyncdata);
-
-    return Success;
-}
-
-static int
-ProcXF86VidModeGetViewPort(ClientPtr client)
-{
-    REQUEST(xXF86VidModeGetViewPortReq);
-    xXF86VidModeGetViewPortReply rep;
-    int x, y;
-
-    DEBUG_P("XF86VidModeGetViewPort");
-
-    REQUEST_SIZE_MATCH(xXF86VidModeGetViewPortReq);
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    VidModeGetViewPort(stuff->screen, &x, &y);
-
-    rep = (xXF86VidModeGetViewPortReply) {
-        .type = X_Reply,
-        .sequenceNumber = client->sequence,
-        .length = 0,
-        .x = x,
-        .y = y
-    };
-
-    if (client->swapped) {
-        swaps(&rep.sequenceNumber);
-        swapl(&rep.length);
-        swapl(&rep.x);
-        swapl(&rep.y);
-    }
-    WriteToClient(client, SIZEOF(xXF86VidModeGetViewPortReply), &rep);
-    return Success;
-}
-
-static int
-ProcXF86VidModeSetViewPort(ClientPtr client)
-{
-    REQUEST(xXF86VidModeSetViewPortReq);
-
-    DEBUG_P("XF86VidModeSetViewPort");
-
-    REQUEST_SIZE_MATCH(xXF86VidModeSetViewPortReq);
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    if (!VidModeSetViewPort(stuff->screen, stuff->x, stuff->y))
-        return BadValue;
-
-    return Success;
-}
-
-static int
-ProcXF86VidModeGetDotClocks(ClientPtr client)
-{
-    REQUEST(xXF86VidModeGetDotClocksReq);
-    xXF86VidModeGetDotClocksReply rep;
-    int n;
-    int numClocks;
-    CARD32 dotclock;
-    int *Clocks = NULL;
-    Bool ClockProg;
-
-    DEBUG_P("XF86VidModeGetDotClocks");
-
-    REQUEST_SIZE_MATCH(xXF86VidModeGetDotClocksReq);
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    numClocks = VidModeGetNumOfClocks(stuff->screen, &ClockProg);
-
-    rep = (xXF86VidModeGetDotClocksReply) {
-        .type = X_Reply,
-        .sequenceNumber = client->sequence,
-        .length = bytes_to_int32(SIZEOF(xXF86VidModeGetDotClocksReply)
-                                 - SIZEOF(xGenericReply) + numClocks),
-        .clocks = numClocks,
-        .maxclocks = MAXCLOCKS,
-        .flags = 0
-    };
-
-    if (!ClockProg) {
-        Clocks = calloc(numClocks, sizeof(int));
-        if (!Clocks)
-            return BadValue;
-        if (!VidModeGetClocks(stuff->screen, Clocks)) {
-            free(Clocks);
-            return BadValue;
-        }
-    }
-    if (ClockProg) {
-        rep.flags |= CLKFLAG_PROGRAMABLE;
-    }
-    if (client->swapped) {
-        swaps(&rep.sequenceNumber);
-        swapl(&rep.length);
-        swapl(&rep.clocks);
-        swapl(&rep.maxclocks);
-        swapl(&rep.flags);
-    }
-    WriteToClient(client, sizeof(xXF86VidModeGetDotClocksReply), &rep);
-    if (!ClockProg) {
-        for (n = 0; n < numClocks; n++) {
-            dotclock = *Clocks++;
-            if (client->swapped) {
-                WriteSwappedDataToClient(client, 4, (char *) &dotclock);
-            }
-            else {
-                WriteToClient(client, 4, &dotclock);
-            }
-        }
-    }
-
-    free(Clocks);
-    return Success;
-}
-
-static int
-ProcXF86VidModeSetGamma(ClientPtr client)
-{
-    REQUEST(xXF86VidModeSetGammaReq);
-
-    DEBUG_P("XF86VidModeSetGamma");
-
-    REQUEST_SIZE_MATCH(xXF86VidModeSetGammaReq);
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    if (!VidModeSetGamma(stuff->screen, ((float) stuff->red) / 10000.,
-                         ((float) stuff->green) / 10000.,
-                         ((float) stuff->blue) / 10000.))
-        return BadValue;
-
-    return Success;
-}
-
-static int
-ProcXF86VidModeGetGamma(ClientPtr client)
-{
-    REQUEST(xXF86VidModeGetGammaReq);
-    xXF86VidModeGetGammaReply rep;
-    float red, green, blue;
-
-    DEBUG_P("XF86VidModeGetGamma");
-
-    REQUEST_SIZE_MATCH(xXF86VidModeGetGammaReq);
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    if (!VidModeGetGamma(stuff->screen, &red, &green, &blue))
-        return BadValue;
-    rep = (xXF86VidModeGetGammaReply) {
-        .type = X_Reply,
-        .sequenceNumber = client->sequence,
-        .length = 0,
-        .red = (CARD32) (red * 10000.),
-        .green = (CARD32) (green * 10000.),
-        .blue = (CARD32) (blue * 10000.)
-    };
-    if (client->swapped) {
-        swaps(&rep.sequenceNumber);
-        swapl(&rep.length);
-        swapl(&rep.red);
-        swapl(&rep.green);
-        swapl(&rep.blue);
-    }
-    WriteToClient(client, sizeof(xXF86VidModeGetGammaReply), &rep);
-
-    return Success;
-}
-
-static int
-ProcXF86VidModeSetGammaRamp(ClientPtr client)
-{
-    CARD16 *r, *g, *b;
-    int length;
-
-    REQUEST(xXF86VidModeSetGammaRampReq);
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    if (stuff->size != VidModeGetGammaRampSize(stuff->screen))
-        return BadValue;
-
-    length = (stuff->size + 1) & ~1;
-
-    REQUEST_FIXED_SIZE(xXF86VidModeSetGammaRampReq, length * 6);
-
-    r = (CARD16 *) &stuff[1];
-    g = r + length;
-    b = g + length;
-
-    if (!VidModeSetGammaRamp(stuff->screen, stuff->size, r, g, b))
-        return BadValue;
-
-    return Success;
-}
-
-static int
-ProcXF86VidModeGetGammaRamp(ClientPtr client)
-{
-    CARD16 *ramp = NULL;
-    int length;
-    size_t ramplen = 0;
-    xXF86VidModeGetGammaRampReply rep;
-
-    REQUEST(xXF86VidModeGetGammaRampReq);
-
-    REQUEST_SIZE_MATCH(xXF86VidModeGetGammaRampReq);
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    if (stuff->size != VidModeGetGammaRampSize(stuff->screen))
-        return BadValue;
-
-    length = (stuff->size + 1) & ~1;
-
-    if (stuff->size) {
-        ramplen = length * 3 * sizeof(CARD16);
-        if (!(ramp = malloc(ramplen)))
-            return BadAlloc;
-
-        if (!VidModeGetGammaRamp(stuff->screen, stuff->size,
-                                 ramp, ramp + length, ramp + (length * 2))) {
-            free(ramp);
-            return BadValue;
-        }
-    }
-    rep = (xXF86VidModeGetGammaRampReply) {
-        .type = X_Reply,
-        .sequenceNumber = client->sequence,
-        .length = (length >> 1) * 3,
-        .size = stuff->size
-    };
-    if (client->swapped) {
-        swaps(&rep.sequenceNumber);
-        swapl(&rep.length);
-        swaps(&rep.size);
-        SwapShorts((short *) ramp, length * 3);
-    }
-    WriteToClient(client, sizeof(xXF86VidModeGetGammaRampReply), &rep);
-
-    if (stuff->size) {
-        WriteToClient(client, ramplen, ramp);
-        free(ramp);
-    }
-
-    return Success;
-}
-
-static int
-ProcXF86VidModeGetGammaRampSize(ClientPtr client)
-{
-    xXF86VidModeGetGammaRampSizeReply rep;
-
-    REQUEST(xXF86VidModeGetGammaRampSizeReq);
-
-    REQUEST_SIZE_MATCH(xXF86VidModeGetGammaRampSizeReq);
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    rep = (xXF86VidModeGetGammaRampSizeReply) {
-        .type = X_Reply,
-        .sequenceNumber = client->sequence,
-        .length = 0,
-        .size = VidModeGetGammaRampSize(stuff->screen)
-    };
-    if (client->swapped) {
-        swaps(&rep.sequenceNumber);
-        swapl(&rep.length);
-        swaps(&rep.size);
-    }
-    WriteToClient(client, sizeof(xXF86VidModeGetGammaRampSizeReply), &rep);
-
-    return Success;
-}
-
-static int
-ProcXF86VidModeGetPermissions(ClientPtr client)
-{
-    xXF86VidModeGetPermissionsReply rep =  {
-        .type = X_Reply,
-        .sequenceNumber = client->sequence,
-        .length = 0,
-        .permissions = XF86VM_READ_PERMISSION
-    };
-
-    REQUEST(xXF86VidModeGetPermissionsReq);
-
-    REQUEST_SIZE_MATCH(xXF86VidModeGetPermissionsReq);
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    if (xf86GetVidModeEnabled() &&
-        (xf86GetVidModeAllowNonLocal() || LocalClient(client))) {
-        rep.permissions |= XF86VM_WRITE_PERMISSION;
-    }
-    if (client->swapped) {
-        swaps(&rep.sequenceNumber);
-        swapl(&rep.length);
-        swapl(&rep.permissions);
-    }
-    WriteToClient(client, sizeof(xXF86VidModeGetPermissionsReply), &rep);
-
-    return Success;
-}
-
-static int
-ProcXF86VidModeSetClientVersion(ClientPtr client)
-{
-    REQUEST(xXF86VidModeSetClientVersionReq);
-
-    VidModePrivPtr pPriv;
-
-    DEBUG_P("XF86VidModeSetClientVersion");
-
-    REQUEST_SIZE_MATCH(xXF86VidModeSetClientVersionReq);
-
-    if ((pPriv = VM_GETPRIV(client)) == NULL) {
-        pPriv = malloc(sizeof(VidModePrivRec));
-        if (!pPriv)
-            return BadAlloc;
-        VM_SETPRIV(client, pPriv);
-    }
-    pPriv->major = stuff->major;
-
-    pPriv->minor = stuff->minor;
-
-    return Success;
-}
-
-static int
-ProcXF86VidModeDispatch(ClientPtr client)
-{
-    REQUEST(xReq);
-    switch (stuff->data) {
-    case X_XF86VidModeQueryVersion:
-        return ProcXF86VidModeQueryVersion(client);
-    case X_XF86VidModeGetModeLine:
-        return ProcXF86VidModeGetModeLine(client);
-    case X_XF86VidModeGetMonitor:
-        return ProcXF86VidModeGetMonitor(client);
-    case X_XF86VidModeGetAllModeLines:
-        return ProcXF86VidModeGetAllModeLines(client);
-    case X_XF86VidModeValidateModeLine:
-        return ProcXF86VidModeValidateModeLine(client);
-    case X_XF86VidModeGetViewPort:
-        return ProcXF86VidModeGetViewPort(client);
-    case X_XF86VidModeGetDotClocks:
-        return ProcXF86VidModeGetDotClocks(client);
-    case X_XF86VidModeSetClientVersion:
-        return ProcXF86VidModeSetClientVersion(client);
-    case X_XF86VidModeGetGamma:
-        return ProcXF86VidModeGetGamma(client);
-    case X_XF86VidModeGetGammaRamp:
-        return ProcXF86VidModeGetGammaRamp(client);
-    case X_XF86VidModeGetGammaRampSize:
-        return ProcXF86VidModeGetGammaRampSize(client);
-    case X_XF86VidModeGetPermissions:
-        return ProcXF86VidModeGetPermissions(client);
-    default:
-        if (!xf86GetVidModeEnabled())
-            return VidModeErrorBase + XF86VidModeExtensionDisabled;
-        if (xf86GetVidModeAllowNonLocal() || LocalClient(client)) {
-            switch (stuff->data) {
-            case X_XF86VidModeAddModeLine:
-                return ProcXF86VidModeAddModeLine(client);
-            case X_XF86VidModeDeleteModeLine:
-                return ProcXF86VidModeDeleteModeLine(client);
-            case X_XF86VidModeModModeLine:
-                return ProcXF86VidModeModModeLine(client);
-            case X_XF86VidModeSwitchMode:
-                return ProcXF86VidModeSwitchMode(client);
-            case X_XF86VidModeSwitchToMode:
-                return ProcXF86VidModeSwitchToMode(client);
-            case X_XF86VidModeLockModeSwitch:
-                return ProcXF86VidModeLockModeSwitch(client);
-            case X_XF86VidModeSetViewPort:
-                return ProcXF86VidModeSetViewPort(client);
-            case X_XF86VidModeSetGamma:
-                return ProcXF86VidModeSetGamma(client);
-            case X_XF86VidModeSetGammaRamp:
-                return ProcXF86VidModeSetGammaRamp(client);
-            default:
-                return BadRequest;
-            }
-        }
-        else
-            return VidModeErrorBase + XF86VidModeClientNotLocal;
-    }
-}
-
-static int
-SProcXF86VidModeQueryVersion(ClientPtr client)
-{
-    REQUEST(xXF86VidModeQueryVersionReq);
-    swaps(&stuff->length);
-    return ProcXF86VidModeQueryVersion(client);
-}
-
-static int
-SProcXF86VidModeGetModeLine(ClientPtr client)
-{
-    REQUEST(xXF86VidModeGetModeLineReq);
-    swaps(&stuff->length);
-    REQUEST_SIZE_MATCH(xXF86VidModeGetModeLineReq);
-    swaps(&stuff->screen);
-    return ProcXF86VidModeGetModeLine(client);
-}
-
-static int
-SProcXF86VidModeGetAllModeLines(ClientPtr client)
-{
-    REQUEST(xXF86VidModeGetAllModeLinesReq);
-    swaps(&stuff->length);
-    REQUEST_SIZE_MATCH(xXF86VidModeGetAllModeLinesReq);
-    swaps(&stuff->screen);
-    return ProcXF86VidModeGetAllModeLines(client);
-}
-
-static int
-SProcXF86VidModeAddModeLine(ClientPtr client)
-{
-    xXF86OldVidModeAddModeLineReq *oldstuff =
-        (xXF86OldVidModeAddModeLineReq *) client->requestBuffer;
-    int ver;
-
-    REQUEST(xXF86VidModeAddModeLineReq);
-    ver = ClientMajorVersion(client);
-    if (ver < 2) {
-        swaps(&oldstuff->length);
-        REQUEST_AT_LEAST_SIZE(xXF86OldVidModeAddModeLineReq);
-        swapl(&oldstuff->screen);
-        swaps(&oldstuff->hdisplay);
-        swaps(&oldstuff->hsyncstart);
-        swaps(&oldstuff->hsyncend);
-        swaps(&oldstuff->htotal);
-        swaps(&oldstuff->vdisplay);
-        swaps(&oldstuff->vsyncstart);
-        swaps(&oldstuff->vsyncend);
-        swaps(&oldstuff->vtotal);
-        swapl(&oldstuff->flags);
-        swapl(&oldstuff->privsize);
-        SwapRestL(oldstuff);
-    }
-    else {
-        swaps(&stuff->length);
-        REQUEST_AT_LEAST_SIZE(xXF86VidModeAddModeLineReq);
-        swapl(&stuff->screen);
-        swaps(&stuff->hdisplay);
-        swaps(&stuff->hsyncstart);
-        swaps(&stuff->hsyncend);
-        swaps(&stuff->htotal);
-        swaps(&stuff->hskew);
-        swaps(&stuff->vdisplay);
-        swaps(&stuff->vsyncstart);
-        swaps(&stuff->vsyncend);
-        swaps(&stuff->vtotal);
-        swapl(&stuff->flags);
-        swapl(&stuff->privsize);
-        SwapRestL(stuff);
-    }
-    return ProcXF86VidModeAddModeLine(client);
-}
-
-static int
-SProcXF86VidModeDeleteModeLine(ClientPtr client)
-{
-    xXF86OldVidModeDeleteModeLineReq *oldstuff =
-        (xXF86OldVidModeDeleteModeLineReq *) client->requestBuffer;
-    int ver;
-
-    REQUEST(xXF86VidModeDeleteModeLineReq);
-    ver = ClientMajorVersion(client);
-    if (ver < 2) {
-        swaps(&oldstuff->length);
-        REQUEST_AT_LEAST_SIZE(xXF86OldVidModeDeleteModeLineReq);
-        swapl(&oldstuff->screen);
-        swaps(&oldstuff->hdisplay);
-        swaps(&oldstuff->hsyncstart);
-        swaps(&oldstuff->hsyncend);
-        swaps(&oldstuff->htotal);
-        swaps(&oldstuff->vdisplay);
-        swaps(&oldstuff->vsyncstart);
-        swaps(&oldstuff->vsyncend);
-        swaps(&oldstuff->vtotal);
-        swapl(&oldstuff->flags);
-        swapl(&oldstuff->privsize);
-        SwapRestL(oldstuff);
-    }
-    else {
-        swaps(&stuff->length);
-        REQUEST_AT_LEAST_SIZE(xXF86VidModeDeleteModeLineReq);
-        swapl(&stuff->screen);
-        swaps(&stuff->hdisplay);
-        swaps(&stuff->hsyncstart);
-        swaps(&stuff->hsyncend);
-        swaps(&stuff->htotal);
-        swaps(&stuff->hskew);
-        swaps(&stuff->vdisplay);
-        swaps(&stuff->vsyncstart);
-        swaps(&stuff->vsyncend);
-        swaps(&stuff->vtotal);
-        swapl(&stuff->flags);
-        swapl(&stuff->privsize);
-        SwapRestL(stuff);
-    }
-    return ProcXF86VidModeDeleteModeLine(client);
-}
-
-static int
-SProcXF86VidModeModModeLine(ClientPtr client)
-{
-    xXF86OldVidModeModModeLineReq *oldstuff =
-        (xXF86OldVidModeModModeLineReq *) client->requestBuffer;
-    int ver;
-
-    REQUEST(xXF86VidModeModModeLineReq);
-    ver = ClientMajorVersion(client);
-    if (ver < 2) {
-        swaps(&oldstuff->length);
-        REQUEST_AT_LEAST_SIZE(xXF86OldVidModeModModeLineReq);
-        swapl(&oldstuff->screen);
-        swaps(&oldstuff->hdisplay);
-        swaps(&oldstuff->hsyncstart);
-        swaps(&oldstuff->hsyncend);
-        swaps(&oldstuff->htotal);
-        swaps(&oldstuff->vdisplay);
-        swaps(&oldstuff->vsyncstart);
-        swaps(&oldstuff->vsyncend);
-        swaps(&oldstuff->vtotal);
-        swapl(&oldstuff->flags);
-        swapl(&oldstuff->privsize);
-        SwapRestL(oldstuff);
-    }
-    else {
-        swaps(&stuff->length);
-        REQUEST_AT_LEAST_SIZE(xXF86VidModeModModeLineReq);
-        swapl(&stuff->screen);
-        swaps(&stuff->hdisplay);
-        swaps(&stuff->hsyncstart);
-        swaps(&stuff->hsyncend);
-        swaps(&stuff->htotal);
-        swaps(&stuff->hskew);
-        swaps(&stuff->vdisplay);
-        swaps(&stuff->vsyncstart);
-        swaps(&stuff->vsyncend);
-        swaps(&stuff->vtotal);
-        swapl(&stuff->flags);
-        swapl(&stuff->privsize);
-        SwapRestL(stuff);
-    }
-    return ProcXF86VidModeModModeLine(client);
-}
-
-static int
-SProcXF86VidModeValidateModeLine(ClientPtr client)
-{
-    xXF86OldVidModeValidateModeLineReq *oldstuff =
-        (xXF86OldVidModeValidateModeLineReq *) client->requestBuffer;
-    int ver;
-
-    REQUEST(xXF86VidModeValidateModeLineReq);
-    ver = ClientMajorVersion(client);
-    if (ver < 2) {
-        swaps(&oldstuff->length);
-        REQUEST_AT_LEAST_SIZE(xXF86OldVidModeValidateModeLineReq);
-        swapl(&oldstuff->screen);
-        swaps(&oldstuff->hdisplay);
-        swaps(&oldstuff->hsyncstart);
-        swaps(&oldstuff->hsyncend);
-        swaps(&oldstuff->htotal);
-        swaps(&oldstuff->vdisplay);
-        swaps(&oldstuff->vsyncstart);
-        swaps(&oldstuff->vsyncend);
-        swaps(&oldstuff->vtotal);
-        swapl(&oldstuff->flags);
-        swapl(&oldstuff->privsize);
-        SwapRestL(oldstuff);
-    }
-    else {
-        swaps(&stuff->length);
-        REQUEST_AT_LEAST_SIZE(xXF86VidModeValidateModeLineReq);
-        swapl(&stuff->screen);
-        swaps(&stuff->hdisplay);
-        swaps(&stuff->hsyncstart);
-        swaps(&stuff->hsyncend);
-        swaps(&stuff->htotal);
-        swaps(&stuff->hskew);
-        swaps(&stuff->vdisplay);
-        swaps(&stuff->vsyncstart);
-        swaps(&stuff->vsyncend);
-        swaps(&stuff->vtotal);
-        swapl(&stuff->flags);
-        swapl(&stuff->privsize);
-        SwapRestL(stuff);
-    }
-    return ProcXF86VidModeValidateModeLine(client);
-}
-
-static int
-SProcXF86VidModeSwitchMode(ClientPtr client)
-{
-    REQUEST(xXF86VidModeSwitchModeReq);
-    swaps(&stuff->length);
-    REQUEST_SIZE_MATCH(xXF86VidModeSwitchModeReq);
-    swaps(&stuff->screen);
-    swaps(&stuff->zoom);
-    return ProcXF86VidModeSwitchMode(client);
-}
-
-static int
-SProcXF86VidModeSwitchToMode(ClientPtr client)
-{
-    REQUEST(xXF86VidModeSwitchToModeReq);
-    swaps(&stuff->length);
-    REQUEST_SIZE_MATCH(xXF86VidModeSwitchToModeReq);
-    swapl(&stuff->screen);
-    return ProcXF86VidModeSwitchToMode(client);
-}
-
-static int
-SProcXF86VidModeLockModeSwitch(ClientPtr client)
-{
-    REQUEST(xXF86VidModeLockModeSwitchReq);
-    swaps(&stuff->length);
-    REQUEST_SIZE_MATCH(xXF86VidModeLockModeSwitchReq);
-    swaps(&stuff->screen);
-    swaps(&stuff->lock);
-    return ProcXF86VidModeLockModeSwitch(client);
-}
-
-static int
-SProcXF86VidModeGetMonitor(ClientPtr client)
-{
-    REQUEST(xXF86VidModeGetMonitorReq);
-    swaps(&stuff->length);
-    REQUEST_SIZE_MATCH(xXF86VidModeGetMonitorReq);
-    swaps(&stuff->screen);
-    return ProcXF86VidModeGetMonitor(client);
-}
-
-static int
-SProcXF86VidModeGetViewPort(ClientPtr client)
-{
-    REQUEST(xXF86VidModeGetViewPortReq);
-    swaps(&stuff->length);
-    REQUEST_SIZE_MATCH(xXF86VidModeGetViewPortReq);
-    swaps(&stuff->screen);
-    return ProcXF86VidModeGetViewPort(client);
-}
-
-static int
-SProcXF86VidModeSetViewPort(ClientPtr client)
-{
-    REQUEST(xXF86VidModeSetViewPortReq);
-    swaps(&stuff->length);
-    REQUEST_SIZE_MATCH(xXF86VidModeSetViewPortReq);
-    swaps(&stuff->screen);
-    swapl(&stuff->x);
-    swapl(&stuff->y);
-    return ProcXF86VidModeSetViewPort(client);
-}
-
-static int
-SProcXF86VidModeGetDotClocks(ClientPtr client)
-{
-    REQUEST(xXF86VidModeGetDotClocksReq);
-    swaps(&stuff->length);
-    REQUEST_SIZE_MATCH(xXF86VidModeGetDotClocksReq);
-    swaps(&stuff->screen);
-    return ProcXF86VidModeGetDotClocks(client);
-}
-
-static int
-SProcXF86VidModeSetClientVersion(ClientPtr client)
-{
-    REQUEST(xXF86VidModeSetClientVersionReq);
-    swaps(&stuff->length);
-    REQUEST_SIZE_MATCH(xXF86VidModeSetClientVersionReq);
-    swaps(&stuff->major);
-    swaps(&stuff->minor);
-    return ProcXF86VidModeSetClientVersion(client);
-}
-
-static int
-SProcXF86VidModeSetGamma(ClientPtr client)
-{
-    REQUEST(xXF86VidModeSetGammaReq);
-    swaps(&stuff->length);
-    REQUEST_SIZE_MATCH(xXF86VidModeSetGammaReq);
-    swaps(&stuff->screen);
-    swapl(&stuff->red);
-    swapl(&stuff->green);
-    swapl(&stuff->blue);
-    return ProcXF86VidModeSetGamma(client);
-}
-
-static int
-SProcXF86VidModeGetGamma(ClientPtr client)
-{
-    REQUEST(xXF86VidModeGetGammaReq);
-    swaps(&stuff->length);
-    REQUEST_SIZE_MATCH(xXF86VidModeGetGammaReq);
-    swaps(&stuff->screen);
-    return ProcXF86VidModeGetGamma(client);
-}
-
-static int
-SProcXF86VidModeSetGammaRamp(ClientPtr client)
-{
-    int length;
-
-    REQUEST(xXF86VidModeSetGammaRampReq);
-    swaps(&stuff->length);
-    REQUEST_AT_LEAST_SIZE(xXF86VidModeSetGammaRampReq);
-    swaps(&stuff->size);
-    swaps(&stuff->screen);
-    length = ((stuff->size + 1) & ~1) * 6;
-    REQUEST_FIXED_SIZE(xXF86VidModeSetGammaRampReq, length);
-    SwapRestS(stuff);
-    return ProcXF86VidModeSetGammaRamp(client);
-}
-
-static int
-SProcXF86VidModeGetGammaRamp(ClientPtr client)
-{
-    REQUEST(xXF86VidModeGetGammaRampReq);
-    swaps(&stuff->length);
-    REQUEST_SIZE_MATCH(xXF86VidModeGetGammaRampReq);
-    swaps(&stuff->size);
-    swaps(&stuff->screen);
-    return ProcXF86VidModeGetGammaRamp(client);
-}
-
-static int
-SProcXF86VidModeGetGammaRampSize(ClientPtr client)
-{
-    REQUEST(xXF86VidModeGetGammaRampSizeReq);
-    swaps(&stuff->length);
-    REQUEST_SIZE_MATCH(xXF86VidModeGetGammaRampSizeReq);
-    swaps(&stuff->screen);
-    return ProcXF86VidModeGetGammaRampSize(client);
-}
-
-static int
-SProcXF86VidModeGetPermissions(ClientPtr client)
-{
-    REQUEST(xXF86VidModeGetPermissionsReq);
-    swaps(&stuff->length);
-    REQUEST_SIZE_MATCH(xXF86VidModeGetPermissionsReq);
-    swaps(&stuff->screen);
-    return ProcXF86VidModeGetPermissions(client);
-}
-
-static int
-SProcXF86VidModeDispatch(ClientPtr client)
-{
-    REQUEST(xReq);
-    switch (stuff->data) {
-    case X_XF86VidModeQueryVersion:
-        return SProcXF86VidModeQueryVersion(client);
-    case X_XF86VidModeGetModeLine:
-        return SProcXF86VidModeGetModeLine(client);
-    case X_XF86VidModeGetMonitor:
-        return SProcXF86VidModeGetMonitor(client);
-    case X_XF86VidModeGetAllModeLines:
-        return SProcXF86VidModeGetAllModeLines(client);
-    case X_XF86VidModeGetViewPort:
-        return SProcXF86VidModeGetViewPort(client);
-    case X_XF86VidModeValidateModeLine:
-        return SProcXF86VidModeValidateModeLine(client);
-    case X_XF86VidModeGetDotClocks:
-        return SProcXF86VidModeGetDotClocks(client);
-    case X_XF86VidModeSetClientVersion:
-        return SProcXF86VidModeSetClientVersion(client);
-    case X_XF86VidModeGetGamma:
-        return SProcXF86VidModeGetGamma(client);
-    case X_XF86VidModeGetGammaRamp:
-        return SProcXF86VidModeGetGammaRamp(client);
-    case X_XF86VidModeGetGammaRampSize:
-        return SProcXF86VidModeGetGammaRampSize(client);
-    case X_XF86VidModeGetPermissions:
-        return SProcXF86VidModeGetPermissions(client);
-    default:
-        if (!xf86GetVidModeEnabled())
-            return VidModeErrorBase + XF86VidModeExtensionDisabled;
-        if (xf86GetVidModeAllowNonLocal() || LocalClient(client)) {
-            switch (stuff->data) {
-            case X_XF86VidModeAddModeLine:
-                return SProcXF86VidModeAddModeLine(client);
-            case X_XF86VidModeDeleteModeLine:
-                return SProcXF86VidModeDeleteModeLine(client);
-            case X_XF86VidModeModModeLine:
-                return SProcXF86VidModeModModeLine(client);
-            case X_XF86VidModeSwitchMode:
-                return SProcXF86VidModeSwitchMode(client);
-            case X_XF86VidModeSwitchToMode:
-                return SProcXF86VidModeSwitchToMode(client);
-            case X_XF86VidModeLockModeSwitch:
-                return SProcXF86VidModeLockModeSwitch(client);
-            case X_XF86VidModeSetViewPort:
-                return SProcXF86VidModeSetViewPort(client);
-            case X_XF86VidModeSetGamma:
-                return SProcXF86VidModeSetGamma(client);
-            case X_XF86VidModeSetGammaRamp:
-                return SProcXF86VidModeSetGammaRamp(client);
-            default:
-                return BadRequest;
-            }
-        }
-        else
-            return VidModeErrorBase + XF86VidModeClientNotLocal;
-    }
-}
-
-void
-XFree86VidModeExtensionInit(void)
-{
-    ExtensionEntry *extEntry;
-    ScreenPtr pScreen;
-    int i;
-    Bool enabled = FALSE;
-
-    DEBUG_P("XFree86VidModeExtensionInit");
-
-    if (!dixRegisterPrivateKey(&VidModeClientPrivateKeyRec, PRIVATE_CLIENT, 0))
-        return;
-#ifdef XF86VIDMODE_EVENTS
-    if (!dixRegisterPrivateKey(&ScreenPrivateKeyRec, PRIVATE_SCREEN, 0))
-        return;
-#endif
-
-#ifdef XF86VIDMODE_EVENTS
-    EventType = CreateNewResourceType(XF86VidModeFreeEvents, "VidModeEvent");
-#endif
-
-    for (i = 0; i < screenInfo.numScreens; i++) {
-        pScreen = screenInfo.screens[i];
-        if (VidModeExtensionInit(pScreen))
-            enabled = TRUE;
-    }
-    /* This means that the DDX doesn't want the vidmode extension enabled */
-    if (!enabled)
-        return;
-
-    if (
-#ifdef XF86VIDMODE_EVENTS
-           EventType &&
-#endif
-           (extEntry = AddExtension(XF86VIDMODENAME,
-                                    XF86VidModeNumberEvents,
-                                    XF86VidModeNumberErrors,
-                                    ProcXF86VidModeDispatch,
-                                    SProcXF86VidModeDispatch,
-                                    NULL, StandardMinorOpcode))) {
-#if 0
-        XF86VidModeReqCode = (unsigned char) extEntry->base;
-#endif
-        VidModeErrorBase = extEntry->errorBase;
-#ifdef XF86VIDMODE_EVENTS
-        XF86VidModeEventBase = extEntry->eventBase;
-        EventSwapVector[XF86VidModeEventBase] =
-            (EventSwapPtr) SXF86VidModeNotifyEvent;
-#endif
-    }
-}
diff --git a/hw/xfree86/sdksyms.sh b/hw/xfree86/sdksyms.sh
index e06bf64..f3d7640 100755
--- a/hw/xfree86/sdksyms.sh
+++ b/hw/xfree86/sdksyms.sh
@@ -133,12 +133,9 @@ cat > sdksyms.c << EOF
 # include "xf86xvmc.h"
 # include "xf86xvpriv.h"
 #endif
-/* XF86VidMode code is in libextmod module */
-/*
 #if XF86VIDMODE
 # include "vidmodeproc.h"
 #endif
- */
 #include "xorgVersion.h"
 #if defined(__sparc__) || defined(__sparc)
 # include "xf86sbusBus.h"
commit 60f53e3012be795eee741ecd4be858552c5e86c8
Author: Tomas Carnecky <tom at dbservice.com>
Date:   Tue Jul 10 02:03:11 2012 +0100

    DGA: Remove excessive module-induced indirection
    
    The DGA event base used to have to be passed through a function pointer,
    as the code was cleaved in two with half in a module, and half in the
    core server.  Now that's not the case, just access DGAEventBase
    directly.
    
    v2: Deal with Alan's event initialization cleanups
    
    Signed-off-by: Tomas Carnecky <tom at dbservice.com>
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/common/dgaproc.h b/hw/xfree86/common/dgaproc.h
index 2c2fae0..e824d30 100644
--- a/hw/xfree86/common/dgaproc.h
+++ b/hw/xfree86/common/dgaproc.h
@@ -107,9 +107,4 @@ extern _X_EXPORT Bool DGAChangePixmapMode(int Index, int *x, int *y, int mode);
 extern _X_EXPORT int DGACreateColormap(int Index, ClientPtr client, int id,
                                        int mode, int alloc);
 
-extern _X_EXPORT unsigned char DGAReqCode;
-extern _X_EXPORT int DGAErrorBase;
-extern _X_EXPORT int DGAEventBase;
-extern _X_EXPORT int *XDGAEventBase;
-
 #endif                          /* __DGAPROC_H */
diff --git a/hw/xfree86/common/xf86DGA.c b/hw/xfree86/common/xf86DGA.c
index 00b9022..a441dee 100644
--- a/hw/xfree86/common/xf86DGA.c
+++ b/hw/xfree86/common/xf86DGA.c
@@ -93,7 +93,9 @@ static void DGAHandleEvent(int screen_num, InternalEvent *event,
 static void
  DGACopyModeInfo(DGAModePtr mode, XDGAModePtr xmode);
 
-int *XDGAEventBase = NULL;
+static unsigned char DGAReqCode = 0;
+static int DGAErrorBase;
+static int DGAEventBase;
 
 #define DGA_GET_SCREEN_PRIV(pScreen) ((DGAScreenPtr) \
     dixLookupPrivate(&(pScreen)->devPrivates, &DGAScreenKeyRec))
@@ -1042,7 +1044,7 @@ DGAProcessKeyboardEvent(ScreenPtr pScreen, DGAEvent * event, DeviceIntPtr keybd)
             .u.event.screen = pScreen->myNum,
             .u.event.state = ev.corestate
         };
-        de.u.u.type = *XDGAEventBase + GetCoreType(ev.type);
+        de.u.u.type = DGAEventBase + GetCoreType(ev.type);
         de.u.u.detail = event->detail;
 
         /* If the DGA client has selected input, then deliver based on the usual filter */
@@ -1093,7 +1095,7 @@ DGAProcessPointerEvent(ScreenPtr pScreen, DGAEvent * event, DeviceIntPtr mouse)
             .u.event.screen = pScreen->myNum,
             .u.event.state = ev.corestate
         };
-        de.u.u.type = *XDGAEventBase + coreEquiv;
+        de.u.u.type = DGAEventBase + coreEquiv;
         de.u.u.detail = event->detail;
 
         /* If the DGA client has selected input, then deliver based on the usual filter */
@@ -1180,8 +1182,8 @@ DGAHandleEvent(int screen_num, InternalEvent *ev, DeviceIntPtr device)
     DGAScreenPtr pScreenPriv;
 
     /* no DGA */
-    if (!DGAScreenKeyRegistered || XDGAEventBase == 0)
-        return;
+    if (!DGAScreenKeyRegistered || noXFree86DGAExtension)
+	return;
     pScreenPriv = DGA_GET_SCREEN_PRIV(pScreen);
 
     /* DGA not initialized on this screen */
@@ -1210,10 +1212,6 @@ static void XDGAResetProc(ExtensionEntry * extEntry);
 
 static void DGAClientStateChange(CallbackListPtr *, pointer, pointer);
 
-unsigned char DGAReqCode = 0;
-int DGAErrorBase;
-int DGAEventBase;
-
 static DevPrivateKeyRec DGAScreenPrivateKeyRec;
 
 #define DGAScreenPrivateKey (&DGAScreenPrivateKeyRec)
@@ -2170,12 +2168,6 @@ ProcXDGADispatch(ClientPtr client)
 }
 
 void
-XFree86DGARegister(void)
-{
-    XDGAEventBase = &DGAEventBase;
-}
-
-void
 XFree86DGAExtensionInit(void)
 {
     ExtensionEntry *extEntry;
diff --git a/hw/xfree86/common/xf86Extensions.c b/hw/xfree86/common/xf86Extensions.c
index 7a84988..5ee6be8 100644
--- a/hw/xfree86/common/xf86Extensions.c
+++ b/hw/xfree86/common/xf86Extensions.c
@@ -54,7 +54,7 @@ static ExtensionModule extensionModules[] = {
 	XFree86DGAExtensionInit,
 	XF86DGANAME,
 	&noXFree86DGAExtension,
-	XFree86DGARegister,
+	NULL,
 	NULL
     },
 #endif
commit 7a5880bc3b47e1f90a638f056ad4d40be6931977
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:03:10 2012 +0100

    Move DGA from extmod to built-in
    
    Rather than leave DGA languishing in extmod, move it to be a built-in
    extension.  As it's quite specific to the Xorg DDX, just move it
    sideways to the rest of the DGA code in hw/xfree86/common, and
    initialise it from xf86ExtensionInit, rather than miinitext.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Acked-by:  Keith Packard <keithp at keithp.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/common/Makefile.am b/hw/xfree86/common/Makefile.am
index 556b9cc..ea98449 100644
--- a/hw/xfree86/common/Makefile.am
+++ b/hw/xfree86/common/Makefile.am
@@ -20,6 +20,7 @@ endif
 
 if DGA
 DGASOURCES = xf86DGA.c
+DGA_SDK = dgaproc.h
 endif
 
 if XORG_BUS_PLATFORM
@@ -60,7 +61,7 @@ INCLUDES = $(XORG_INCS) -I$(srcdir)/../ddc -I$(srcdir)/../i2c \
 sdk_HEADERS = compiler.h fourcc.h xf86.h xf86Module.h xf86Opt.h \
               xf86PciInfo.h xf86Priv.h xf86Privstr.h \
               xf86cmap.h xf86fbman.h xf86str.h xf86Xinput.h xisb.h \
-              $(XVSDKINCS) $(XF86VMODE_SDK) xorgVersion.h \
+              $(XVSDKINCS) $(XF86VMODE_SDK) $(DGA_SDK) xorgVersion.h \
               xf86sbusBus.h xf86VGAarbiter.h xf86Optionstr.h xf86platformBus.h
 
 DISTCLEANFILES = xf86Build.h
diff --git a/hw/xfree86/common/dgaproc.h b/hw/xfree86/common/dgaproc.h
new file mode 100644
index 0000000..2c2fae0
--- /dev/null
+++ b/hw/xfree86/common/dgaproc.h
@@ -0,0 +1,115 @@
+
+#ifndef __DGAPROC_H
+#define __DGAPROC_H
+
+#include <X11/Xproto.h>
+#include "pixmap.h"
+
+#define DGA_CONCURRENT_ACCESS	0x00000001
+#define DGA_FILL_RECT		0x00000002
+#define DGA_BLIT_RECT		0x00000004
+#define DGA_BLIT_RECT_TRANS	0x00000008
+#define DGA_PIXMAP_AVAILABLE	0x00000010
+
+#define DGA_INTERLACED		0x00010000
+#define DGA_DOUBLESCAN		0x00020000
+
+#define DGA_FLIP_IMMEDIATE	0x00000001
+#define DGA_FLIP_RETRACE	0x00000002
+
+#define DGA_COMPLETED		0x00000000
+#define DGA_PENDING		0x00000001
+
+#define DGA_NEED_ROOT		0x00000001
+
+typedef struct {
+    int num;                    /* A unique identifier for the mode (num > 0) */
+    char *name;                 /* name of mode given in the XF86Config */
+    int VSync_num;
+    int VSync_den;
+    int flags;                  /* DGA_CONCURRENT_ACCESS, etc... */
+    int imageWidth;             /* linear accessible portion (pixels) */
+    int imageHeight;
+    int pixmapWidth;            /* Xlib accessible portion (pixels) */
+    int pixmapHeight;           /* both fields ignored if no concurrent access */
+    int bytesPerScanline;
+    int byteOrder;              /* MSBFirst, LSBFirst */
+    int depth;
+    int bitsPerPixel;
+    unsigned long red_mask;
+    unsigned long green_mask;
+    unsigned long blue_mask;
+    short visualClass;
+    int viewportWidth;
+    int viewportHeight;
+    int xViewportStep;          /* viewport position granularity */
+    int yViewportStep;
+    int maxViewportX;           /* max viewport origin */
+    int maxViewportY;
+    int viewportFlags;          /* types of page flipping possible */
+    int offset;
+    int reserved1;
+    int reserved2;
+} XDGAModeRec, *XDGAModePtr;
+
+/* DDX interface */
+
+extern _X_EXPORT int
+ DGASetMode(int Index, int num, XDGAModePtr mode, PixmapPtr *pPix);
+
+extern _X_EXPORT void
+ DGASetInputMode(int Index, Bool keyboard, Bool mouse);
+
+extern _X_EXPORT void
+ DGASelectInput(int Index, ClientPtr client, long mask);
+
+extern _X_EXPORT Bool DGAAvailable(int Index);
+extern _X_EXPORT Bool DGAScreenAvailable(ScreenPtr pScreen);
+extern _X_EXPORT Bool DGAActive(int Index);
+extern _X_EXPORT void DGAShutdown(void);
+extern _X_EXPORT void DGAInstallCmap(ColormapPtr cmap);
+extern _X_EXPORT int DGAGetViewportStatus(int Index);
+extern _X_EXPORT int DGASync(int Index);
+
+extern _X_EXPORT int
+ DGAFillRect(int Index, int x, int y, int w, int h, unsigned long color);
+
+extern _X_EXPORT int
+ DGABlitRect(int Index, int srcx, int srcy, int w, int h, int dstx, int dsty);
+
+extern _X_EXPORT int
+
+DGABlitTransRect(int Index,
+                 int srcx, int srcy,
+                 int w, int h, int dstx, int dsty, unsigned long color);
+
+extern _X_EXPORT int
+ DGASetViewport(int Index, int x, int y, int mode);
+
+extern _X_EXPORT int DGAGetModes(int Index);
+extern _X_EXPORT int DGAGetOldDGAMode(int Index);
+
+extern _X_EXPORT int DGAGetModeInfo(int Index, XDGAModePtr mode, int num);
+
+extern _X_EXPORT Bool DGAVTSwitch(void);
+extern _X_EXPORT Bool DGAStealButtonEvent(DeviceIntPtr dev, int Index,
+                                          int button, int is_down);
+extern _X_EXPORT Bool DGAStealMotionEvent(DeviceIntPtr dev, int Index, int dx,
+                                          int dy);
+extern _X_EXPORT Bool DGAStealKeyEvent(DeviceIntPtr dev, int Index,
+                                       int key_code, int is_down);
+
+extern _X_EXPORT Bool DGAOpenFramebuffer(int Index, char **name,
+                                         unsigned char **mem, int *size,
+                                         int *offset, int *flags);
+extern _X_EXPORT void DGACloseFramebuffer(int Index);
+extern _X_EXPORT Bool DGAChangePixmapMode(int Index, int *x, int *y, int mode);
+extern _X_EXPORT int DGACreateColormap(int Index, ClientPtr client, int id,
+                                       int mode, int alloc);
+
+extern _X_EXPORT unsigned char DGAReqCode;
+extern _X_EXPORT int DGAErrorBase;
+extern _X_EXPORT int DGAEventBase;
+extern _X_EXPORT int *XDGAEventBase;
+
+#endif                          /* __DGAPROC_H */
diff --git a/hw/xfree86/common/xf86DGA.c b/hw/xfree86/common/xf86DGA.c
index ab172a8..00b9022 100644
--- a/hw/xfree86/common/xf86DGA.c
+++ b/hw/xfree86/common/xf86DGA.c
@@ -1,4 +1,6 @@
 /*
+ * Copyright (c) 1995  Jon Tombs
+ * Copyright (c) 1995, 1996, 1999  XFree86 Inc
  * Copyright (c) 1998-2002 by The XFree86 Project, Inc.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
@@ -27,10 +29,20 @@
  * Written by Mark Vojkovich
  */
 
+/*
+ * This is quite literally just two files glued together:
+ * hw/xfree86/common/xf86DGA.c is the first part, and
+ * hw/xfree86/dixmods/extmod/xf86dga2.c is the second part.  One day, if
+ * someone actually cares about DGA, it'd be nice to clean this up.  But trust
+ * me, I am not that person.
+ */
+
 #ifdef HAVE_XORG_CONFIG_H
 #include <xorg-config.h>
 #endif
 
+#include <X11/X.h>
+#include <X11/Xproto.h>
 #include "xf86.h"
 #include "xf86str.h"
 #include "xf86Priv.h"
@@ -48,9 +60,24 @@
 #include "exevents.h"
 #include "eventstr.h"
 #include "eventconvert.h"
+#include "xf86Extensions.h"
 
 #include "mi.h"
 
+#include "misc.h"
+#include "dixstruct.h"
+#include "dixevents.h"
+#include "extnsionst.h"
+#include "cursorstr.h"
+#include "scrnintstr.h"
+#include "swaprep.h"
+#include "dgaproc.h"
+#include "protocol-versions.h"
+
+#include <string.h>
+
+#define DGA_PROTOCOL_OLD_SUPPORT 1
+
 static DevPrivateKeyRec DGAScreenKeyRec;
 
 #define DGAScreenKeyRegistered dixPrivateKeyRegistered(&DGAScreenKeyRec)
@@ -1178,3 +1205,999 @@ DGAHandleEvent(int screen_num, InternalEvent *ev, DeviceIntPtr device)
         break;
     }
 }
+
+static void XDGAResetProc(ExtensionEntry * extEntry);
+
+static void DGAClientStateChange(CallbackListPtr *, pointer, pointer);
+
+unsigned char DGAReqCode = 0;
+int DGAErrorBase;
+int DGAEventBase;
+
+static DevPrivateKeyRec DGAScreenPrivateKeyRec;
+
+#define DGAScreenPrivateKey (&DGAScreenPrivateKeyRec)
+#define DGAScreenPrivateKeyRegistered (DGAScreenPrivateKeyRec.initialized)
+static DevPrivateKeyRec DGAClientPrivateKeyRec;
+
+#define DGAClientPrivateKey (&DGAClientPrivateKeyRec)
+static int DGACallbackRefCount = 0;
+
+/* This holds the client's version information */
+typedef struct {
+    int major;
+    int minor;
+} DGAPrivRec, *DGAPrivPtr;
+
+#define DGA_GETCLIENT(idx) ((ClientPtr) \
+    dixLookupPrivate(&screenInfo.screens[idx]->devPrivates, DGAScreenPrivateKey))
+#define DGA_SETCLIENT(idx,p) \
+    dixSetPrivate(&screenInfo.screens[idx]->devPrivates, DGAScreenPrivateKey, p)
+
+#define DGA_GETPRIV(c) ((DGAPrivPtr) \
+    dixLookupPrivate(&(c)->devPrivates, DGAClientPrivateKey))
+#define DGA_SETPRIV(c,p) \
+    dixSetPrivate(&(c)->devPrivates, DGAClientPrivateKey, p)
+
+static void
+XDGAResetProc(ExtensionEntry * extEntry)
+{
+    DeleteCallback(&ClientStateCallback, DGAClientStateChange, NULL);
+    DGACallbackRefCount = 0;
+}
+
+static int
+ProcXDGAQueryVersion(ClientPtr client)
+{
+    xXDGAQueryVersionReply rep;
+
+    REQUEST_SIZE_MATCH(xXDGAQueryVersionReq);
+    rep.type = X_Reply;
+    rep.length = 0;
+    rep.sequenceNumber = client->sequence;
+    rep.majorVersion = SERVER_XDGA_MAJOR_VERSION;
+    rep.minorVersion = SERVER_XDGA_MINOR_VERSION;
+
+    WriteToClient(client, sizeof(xXDGAQueryVersionReply), (char *) &rep);
+    return Success;
+}
+
+static int
+ProcXDGAOpenFramebuffer(ClientPtr client)
+{
+    REQUEST(xXDGAOpenFramebufferReq);
+    xXDGAOpenFramebufferReply rep;
+    char *deviceName;
+    int nameSize;
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    if (!DGAAvailable(stuff->screen))
+        return DGAErrorBase + XF86DGANoDirectVideoMode;
+
+    REQUEST_SIZE_MATCH(xXDGAOpenFramebufferReq);
+    rep.type = X_Reply;
+    rep.length = 0;
+    rep.sequenceNumber = client->sequence;
+
+    if (!DGAOpenFramebuffer(stuff->screen, &deviceName,
+                            (unsigned char **) (&rep.mem1),
+                            (int *) &rep.size, (int *) &rep.offset,
+                            (int *) &rep.extra)) {
+        return BadAlloc;
+    }
+
+    nameSize = deviceName ? (strlen(deviceName) + 1) : 0;
+    rep.length = bytes_to_int32(nameSize);
+
+    WriteToClient(client, sizeof(xXDGAOpenFramebufferReply), (char *) &rep);
+    if (rep.length)
+        WriteToClient(client, nameSize, deviceName);
+
+    return Success;
+}
+
+static int
+ProcXDGACloseFramebuffer(ClientPtr client)
+{
+    REQUEST(xXDGACloseFramebufferReq);
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    if (!DGAAvailable(stuff->screen))
+        return DGAErrorBase + XF86DGANoDirectVideoMode;
+
+    REQUEST_SIZE_MATCH(xXDGACloseFramebufferReq);
+
+    DGACloseFramebuffer(stuff->screen);
+
+    return Success;
+}
+
+static int
+ProcXDGAQueryModes(ClientPtr client)
+{
+    int i, num, size;
+
+    REQUEST(xXDGAQueryModesReq);
+    xXDGAQueryModesReply rep;
+    xXDGAModeInfo info;
+    XDGAModePtr mode;
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    REQUEST_SIZE_MATCH(xXDGAQueryModesReq);
+    rep.type = X_Reply;
+    rep.length = 0;
+    rep.number = 0;
+    rep.sequenceNumber = client->sequence;
+
+    if (!DGAAvailable(stuff->screen)) {
+        rep.number = 0;
+        rep.length = 0;
+        WriteToClient(client, sz_xXDGAQueryModesReply, (char *) &rep);
+        return Success;
+    }
+
+    if (!(num = DGAGetModes(stuff->screen))) {
+        WriteToClient(client, sz_xXDGAQueryModesReply, (char *) &rep);
+        return Success;
+    }
+
+    if (!(mode = (XDGAModePtr) malloc(num * sizeof(XDGAModeRec))))
+        return BadAlloc;
+
+    for (i = 0; i < num; i++)
+        DGAGetModeInfo(stuff->screen, mode + i, i + 1);
+
+    size = num * sz_xXDGAModeInfo;
+    for (i = 0; i < num; i++)
+        size += pad_to_int32(strlen(mode[i].name) + 1); /* plus NULL */
+
+    rep.number = num;
+    rep.length = bytes_to_int32(size);
+
+    WriteToClient(client, sz_xXDGAQueryModesReply, (char *) &rep);
+
+    for (i = 0; i < num; i++) {
+        size = strlen(mode[i].name) + 1;
+
+        info.byte_order = mode[i].byteOrder;
+        info.depth = mode[i].depth;
+        info.num = mode[i].num;
+        info.bpp = mode[i].bitsPerPixel;
+        info.name_size = (size + 3) & ~3L;
+        info.vsync_num = mode[i].VSync_num;
+        info.vsync_den = mode[i].VSync_den;
+        info.flags = mode[i].flags;
+        info.image_width = mode[i].imageWidth;
+        info.image_height = mode[i].imageHeight;
+        info.pixmap_width = mode[i].pixmapWidth;
+        info.pixmap_height = mode[i].pixmapHeight;
+        info.bytes_per_scanline = mode[i].bytesPerScanline;
+        info.red_mask = mode[i].red_mask;
+        info.green_mask = mode[i].green_mask;
+        info.blue_mask = mode[i].blue_mask;
+        info.visual_class = mode[i].visualClass;
+        info.viewport_width = mode[i].viewportWidth;
+        info.viewport_height = mode[i].viewportHeight;
+        info.viewport_xstep = mode[i].xViewportStep;
+        info.viewport_ystep = mode[i].yViewportStep;
+        info.viewport_xmax = mode[i].maxViewportX;
+        info.viewport_ymax = mode[i].maxViewportY;
+        info.viewport_flags = mode[i].viewportFlags;
+        info.reserved1 = mode[i].reserved1;
+        info.reserved2 = mode[i].reserved2;
+
+        WriteToClient(client, sz_xXDGAModeInfo, (char *) (&info));
+        WriteToClient(client, size, mode[i].name);
+    }
+
+    free(mode);
+
+    return Success;
+}
+
+static void
+DGAClientStateChange(CallbackListPtr *pcbl, pointer nulldata, pointer calldata)
+{
+    NewClientInfoRec *pci = (NewClientInfoRec *) calldata;
+    ClientPtr client = NULL;
+    int i;
+
+    for (i = 0; i < screenInfo.numScreens; i++) {
+        if (DGA_GETCLIENT(i) == pci->client) {
+            client = pci->client;
+            break;
+        }
+    }
+
+    if (client &&
+        ((client->clientState == ClientStateGone) ||
+         (client->clientState == ClientStateRetained))) {
+        XDGAModeRec mode;
+        PixmapPtr pPix;
+
+        DGA_SETCLIENT(i, NULL);
+        DGASelectInput(i, NULL, 0);
+        DGASetMode(i, 0, &mode, &pPix);
+
+        if (--DGACallbackRefCount == 0)
+            DeleteCallback(&ClientStateCallback, DGAClientStateChange, NULL);
+    }
+}
+
+static int
+ProcXDGASetMode(ClientPtr client)
+{
+    REQUEST(xXDGASetModeReq);
+    xXDGASetModeReply rep;
+    XDGAModeRec mode;
+    xXDGAModeInfo info;
+    PixmapPtr pPix;
+    ClientPtr owner;
+    int size;
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+    owner = DGA_GETCLIENT(stuff->screen);
+
+    REQUEST_SIZE_MATCH(xXDGASetModeReq);
+    rep.type = X_Reply;
+    rep.length = 0;
+    rep.offset = 0;
+    rep.flags = 0;
+    rep.sequenceNumber = client->sequence;
+
+    if (!DGAAvailable(stuff->screen))
+        return DGAErrorBase + XF86DGANoDirectVideoMode;
+
+    if (owner && owner != client)
+        return DGAErrorBase + XF86DGANoDirectVideoMode;
+
+    if (!stuff->mode) {
+        if (owner) {
+            if (--DGACallbackRefCount == 0)
+                DeleteCallback(&ClientStateCallback, DGAClientStateChange,
+                               NULL);
+        }
+        DGA_SETCLIENT(stuff->screen, NULL);
+        DGASelectInput(stuff->screen, NULL, 0);
+        DGASetMode(stuff->screen, 0, &mode, &pPix);
+        WriteToClient(client, sz_xXDGASetModeReply, (char *) &rep);
+        return Success;
+    }
+
+    if (Success != DGASetMode(stuff->screen, stuff->mode, &mode, &pPix))
+        return BadValue;
+
+    if (!owner) {
+        if (DGACallbackRefCount++ == 0)
+            AddCallback(&ClientStateCallback, DGAClientStateChange, NULL);
+    }
+
+    DGA_SETCLIENT(stuff->screen, client);
+
+    if (pPix) {
+        if (AddResource(stuff->pid, RT_PIXMAP, (pointer) (pPix))) {
+            pPix->drawable.id = (int) stuff->pid;
+            rep.flags = DGA_PIXMAP_AVAILABLE;
+        }
+    }
+
+    size = strlen(mode.name) + 1;
+
+    info.byte_order = mode.byteOrder;
+    info.depth = mode.depth;
+    info.num = mode.num;
+    info.bpp = mode.bitsPerPixel;
+    info.name_size = (size + 3) & ~3L;
+    info.vsync_num = mode.VSync_num;
+    info.vsync_den = mode.VSync_den;
+    info.flags = mode.flags;
+    info.image_width = mode.imageWidth;
+    info.image_height = mode.imageHeight;
+    info.pixmap_width = mode.pixmapWidth;
+    info.pixmap_height = mode.pixmapHeight;
+    info.bytes_per_scanline = mode.bytesPerScanline;
+    info.red_mask = mode.red_mask;
+    info.green_mask = mode.green_mask;
+    info.blue_mask = mode.blue_mask;
+    info.visual_class = mode.visualClass;
+    info.viewport_width = mode.viewportWidth;
+    info.viewport_height = mode.viewportHeight;
+    info.viewport_xstep = mode.xViewportStep;
+    info.viewport_ystep = mode.yViewportStep;
+    info.viewport_xmax = mode.maxViewportX;
+    info.viewport_ymax = mode.maxViewportY;
+    info.viewport_flags = mode.viewportFlags;
+    info.reserved1 = mode.reserved1;
+    info.reserved2 = mode.reserved2;
+
+    rep.length = bytes_to_int32(sz_xXDGAModeInfo + info.name_size);
+
+    WriteToClient(client, sz_xXDGASetModeReply, (char *) &rep);
+    WriteToClient(client, sz_xXDGAModeInfo, (char *) (&info));
+    WriteToClient(client, size, mode.name);
+
+    return Success;
+}
+
+static int
+ProcXDGASetViewport(ClientPtr client)
+{
+    REQUEST(xXDGASetViewportReq);
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    if (DGA_GETCLIENT(stuff->screen) != client)
+        return DGAErrorBase + XF86DGADirectNotActivated;
+
+    REQUEST_SIZE_MATCH(xXDGASetViewportReq);
+
+    DGASetViewport(stuff->screen, stuff->x, stuff->y, stuff->flags);
+
+    return Success;
+}
+
+static int
+ProcXDGAInstallColormap(ClientPtr client)
+{
+    ColormapPtr cmap;
+    int rc;
+
+    REQUEST(xXDGAInstallColormapReq);
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    if (DGA_GETCLIENT(stuff->screen) != client)
+        return DGAErrorBase + XF86DGADirectNotActivated;
+
+    REQUEST_SIZE_MATCH(xXDGAInstallColormapReq);
+
+    rc = dixLookupResourceByType((pointer *) &cmap, stuff->cmap, RT_COLORMAP,
+                                 client, DixInstallAccess);
+    if (rc != Success)
+        return rc;
+    DGAInstallCmap(cmap);
+    return Success;
+}
+
+static int
+ProcXDGASelectInput(ClientPtr client)
+{
+    REQUEST(xXDGASelectInputReq);
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    if (DGA_GETCLIENT(stuff->screen) != client)
+        return DGAErrorBase + XF86DGADirectNotActivated;
+
+    REQUEST_SIZE_MATCH(xXDGASelectInputReq);
+
+    if (DGA_GETCLIENT(stuff->screen) == client)
+        DGASelectInput(stuff->screen, client, stuff->mask);
+
+    return Success;
+}
+
+static int
+ProcXDGAFillRectangle(ClientPtr client)
+{
+    REQUEST(xXDGAFillRectangleReq);
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    if (DGA_GETCLIENT(stuff->screen) != client)
+        return DGAErrorBase + XF86DGADirectNotActivated;
+
+    REQUEST_SIZE_MATCH(xXDGAFillRectangleReq);
+
+    if (Success != DGAFillRect(stuff->screen, stuff->x, stuff->y,
+                               stuff->width, stuff->height, stuff->color))
+        return BadMatch;
+
+    return Success;
+}
+
+static int
+ProcXDGACopyArea(ClientPtr client)
+{
+    REQUEST(xXDGACopyAreaReq);
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    if (DGA_GETCLIENT(stuff->screen) != client)
+        return DGAErrorBase + XF86DGADirectNotActivated;
+
+    REQUEST_SIZE_MATCH(xXDGACopyAreaReq);
+
+    if (Success != DGABlitRect(stuff->screen, stuff->srcx, stuff->srcy,
+                               stuff->width, stuff->height, stuff->dstx,
+                               stuff->dsty))
+        return BadMatch;
+
+    return Success;
+}
+
+static int
+ProcXDGACopyTransparentArea(ClientPtr client)
+{
+    REQUEST(xXDGACopyTransparentAreaReq);
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    if (DGA_GETCLIENT(stuff->screen) != client)
+        return DGAErrorBase + XF86DGADirectNotActivated;
+
+    REQUEST_SIZE_MATCH(xXDGACopyTransparentAreaReq);
+
+    if (Success != DGABlitTransRect(stuff->screen, stuff->srcx, stuff->srcy,
+                                    stuff->width, stuff->height, stuff->dstx,
+                                    stuff->dsty, stuff->key))
+        return BadMatch;
+
+    return Success;
+}
+
+static int
+ProcXDGAGetViewportStatus(ClientPtr client)
+{
+    REQUEST(xXDGAGetViewportStatusReq);
+    xXDGAGetViewportStatusReply rep;
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    if (DGA_GETCLIENT(stuff->screen) != client)
+        return DGAErrorBase + XF86DGADirectNotActivated;
+
+    REQUEST_SIZE_MATCH(xXDGAGetViewportStatusReq);
+    rep.type = X_Reply;
+    rep.length = 0;
+    rep.sequenceNumber = client->sequence;
+
+    rep.status = DGAGetViewportStatus(stuff->screen);
+
+    WriteToClient(client, sizeof(xXDGAGetViewportStatusReply), (char *) &rep);
+    return Success;
+}
+
+static int
+ProcXDGASync(ClientPtr client)
+{
+    REQUEST(xXDGASyncReq);
+    xXDGASyncReply rep;
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    if (DGA_GETCLIENT(stuff->screen) != client)
+        return DGAErrorBase + XF86DGADirectNotActivated;
+
+    REQUEST_SIZE_MATCH(xXDGASyncReq);
+    rep.type = X_Reply;
+    rep.length = 0;
+    rep.sequenceNumber = client->sequence;
+
+    DGASync(stuff->screen);
+
+    WriteToClient(client, sizeof(xXDGASyncReply), (char *) &rep);
+    return Success;
+}
+
+static int
+ProcXDGASetClientVersion(ClientPtr client)
+{
+    REQUEST(xXDGASetClientVersionReq);
+
+    DGAPrivPtr pPriv;
+
+    REQUEST_SIZE_MATCH(xXDGASetClientVersionReq);
+    if ((pPriv = DGA_GETPRIV(client)) == NULL) {
+        pPriv = malloc(sizeof(DGAPrivRec));
+        /* XXX Need to look into freeing this */
+        if (!pPriv)
+            return BadAlloc;
+        DGA_SETPRIV(client, pPriv);
+    }
+    pPriv->major = stuff->major;
+    pPriv->minor = stuff->minor;
+
+    return Success;
+}
+
+static int
+ProcXDGAChangePixmapMode(ClientPtr client)
+{
+    REQUEST(xXDGAChangePixmapModeReq);
+    xXDGAChangePixmapModeReply rep;
+    int x, y;
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    if (DGA_GETCLIENT(stuff->screen) != client)
+        return DGAErrorBase + XF86DGADirectNotActivated;
+
+    REQUEST_SIZE_MATCH(xXDGAChangePixmapModeReq);
+    rep.type = X_Reply;
+    rep.length = 0;
+    rep.sequenceNumber = client->sequence;
+
+    x = stuff->x;
+    y = stuff->y;
+
+    if (!DGAChangePixmapMode(stuff->screen, &x, &y, stuff->flags))
+        return BadMatch;
+
+    rep.x = x;
+    rep.y = y;
+    WriteToClient(client, sizeof(xXDGAChangePixmapModeReply), (char *) &rep);
+
+    return Success;
+}
+
+static int
+ProcXDGACreateColormap(ClientPtr client)
+{
+    REQUEST(xXDGACreateColormapReq);
+    int result;
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    if (DGA_GETCLIENT(stuff->screen) != client)
+        return DGAErrorBase + XF86DGADirectNotActivated;
+
+    REQUEST_SIZE_MATCH(xXDGACreateColormapReq);
+
+    if (!stuff->mode)
+        return BadValue;
+
+    result = DGACreateColormap(stuff->screen, client, stuff->id,
+                               stuff->mode, stuff->alloc);
+    if (result != Success)
+        return result;
+
+    return Success;
+}
+
+/*
+ *
+ * Support for the old DGA protocol, used to live in xf86dga.c
+ *
+ */
+
+#ifdef DGA_PROTOCOL_OLD_SUPPORT
+
+static int
+ProcXF86DGAGetVideoLL(ClientPtr client)
+{
+    REQUEST(xXF86DGAGetVideoLLReq);
+    xXF86DGAGetVideoLLReply rep;
+    XDGAModeRec mode;
+    int num, offset, flags;
+    char *name;
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    REQUEST_SIZE_MATCH(xXF86DGAGetVideoLLReq);
+    rep.type = X_Reply;
+    rep.length = 0;
+    rep.sequenceNumber = client->sequence;
+
+    if (!DGAAvailable(stuff->screen))
+        return DGAErrorBase + XF86DGANoDirectVideoMode;
+
+    if (!(num = DGAGetOldDGAMode(stuff->screen)))
+        return DGAErrorBase + XF86DGANoDirectVideoMode;
+
+    /* get the parameters for the mode that best matches */
+    DGAGetModeInfo(stuff->screen, &mode, num);
+
+    if (!DGAOpenFramebuffer(stuff->screen, &name,
+                            (unsigned char **) (&rep.offset),
+                            (int *) (&rep.bank_size), &offset, &flags))
+        return BadAlloc;
+
+    rep.offset += mode.offset;
+    rep.width = mode.bytesPerScanline / (mode.bitsPerPixel >> 3);
+    rep.ram_size = rep.bank_size >> 10;
+
+    WriteToClient(client, SIZEOF(xXF86DGAGetVideoLLReply), (char *) &rep);
+    return Success;
+}
+
+static int
+ProcXF86DGADirectVideo(ClientPtr client)
+{
+    int num;
+    PixmapPtr pix;
+    XDGAModeRec mode;
+    ClientPtr owner;
+
+    REQUEST(xXF86DGADirectVideoReq);
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+    REQUEST_SIZE_MATCH(xXF86DGADirectVideoReq);
+
+    if (!DGAAvailable(stuff->screen))
+        return DGAErrorBase + XF86DGANoDirectVideoMode;
+
+    owner = DGA_GETCLIENT(stuff->screen);
+
+    if (owner && owner != client)
+        return DGAErrorBase + XF86DGANoDirectVideoMode;
+
+    if (stuff->enable & XF86DGADirectGraphics) {
+        if (!(num = DGAGetOldDGAMode(stuff->screen)))
+            return DGAErrorBase + XF86DGANoDirectVideoMode;
+    }
+    else
+        num = 0;
+
+    if (Success != DGASetMode(stuff->screen, num, &mode, &pix))
+        return DGAErrorBase + XF86DGAScreenNotActive;
+
+    DGASetInputMode(stuff->screen,
+                    (stuff->enable & XF86DGADirectKeyb) != 0,
+                    (stuff->enable & XF86DGADirectMouse) != 0);
+
+    /* We need to track the client and attach the teardown callback */
+    if (stuff->enable &
+        (XF86DGADirectGraphics | XF86DGADirectKeyb | XF86DGADirectMouse)) {
+        if (!owner) {
+            if (DGACallbackRefCount++ == 0)
+                AddCallback(&ClientStateCallback, DGAClientStateChange, NULL);
+        }
+
+        DGA_SETCLIENT(stuff->screen, client);
+    }
+    else {
+        if (owner) {
+            if (--DGACallbackRefCount == 0)
+                DeleteCallback(&ClientStateCallback, DGAClientStateChange,
+                               NULL);
+        }
+
+        DGA_SETCLIENT(stuff->screen, NULL);
+    }
+
+    return Success;
+}
+
+static int
+ProcXF86DGAGetViewPortSize(ClientPtr client)
+{
+    int num;
+    XDGAModeRec mode;
+
+    REQUEST(xXF86DGAGetViewPortSizeReq);
+    xXF86DGAGetViewPortSizeReply rep;
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    REQUEST_SIZE_MATCH(xXF86DGAGetViewPortSizeReq);
+    rep.type = X_Reply;
+    rep.length = 0;
+    rep.sequenceNumber = client->sequence;
+
+    if (!DGAAvailable(stuff->screen))
+        return DGAErrorBase + XF86DGANoDirectVideoMode;
+
+    if (!(num = DGAGetOldDGAMode(stuff->screen)))
+        return DGAErrorBase + XF86DGANoDirectVideoMode;
+
+    DGAGetModeInfo(stuff->screen, &mode, num);
+
+    rep.width = mode.viewportWidth;
+    rep.height = mode.viewportHeight;
+
+    WriteToClient(client, SIZEOF(xXF86DGAGetViewPortSizeReply), (char *) &rep);
+    return Success;
+}
+
+static int
+ProcXF86DGASetViewPort(ClientPtr client)
+{
+    REQUEST(xXF86DGASetViewPortReq);
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    if (DGA_GETCLIENT(stuff->screen) != client)
+        return DGAErrorBase + XF86DGADirectNotActivated;
+
+    REQUEST_SIZE_MATCH(xXF86DGASetViewPortReq);
+
+    if (!DGAAvailable(stuff->screen))
+        return DGAErrorBase + XF86DGANoDirectVideoMode;
+
+    if (!DGAActive(stuff->screen))
+        return DGAErrorBase + XF86DGADirectNotActivated;
+
+    if (DGASetViewport(stuff->screen, stuff->x, stuff->y, DGA_FLIP_RETRACE)
+        != Success)
+        return DGAErrorBase + XF86DGADirectNotActivated;
+
+    return Success;
+}
+
+static int
+ProcXF86DGAGetVidPage(ClientPtr client)
+{
+    REQUEST(xXF86DGAGetVidPageReq);
+    xXF86DGAGetVidPageReply rep;
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    REQUEST_SIZE_MATCH(xXF86DGAGetVidPageReq);
+    rep.type = X_Reply;
+    rep.length = 0;
+    rep.sequenceNumber = client->sequence;
+    rep.vpage = 0;              /* silently fail */
+
+    WriteToClient(client, SIZEOF(xXF86DGAGetVidPageReply), (char *) &rep);
+    return Success;
+}
+
+static int
+ProcXF86DGASetVidPage(ClientPtr client)
+{
+    REQUEST(xXF86DGASetVidPageReq);
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    REQUEST_SIZE_MATCH(xXF86DGASetVidPageReq);
+
+    /* silently fail */
+
+    return Success;
+}
+
+static int
+ProcXF86DGAInstallColormap(ClientPtr client)
+{
+    ColormapPtr pcmp;
+    int rc;
+
+    REQUEST(xXF86DGAInstallColormapReq);
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    if (DGA_GETCLIENT(stuff->screen) != client)
+        return DGAErrorBase + XF86DGADirectNotActivated;
+
+    REQUEST_SIZE_MATCH(xXF86DGAInstallColormapReq);
+
+    if (!DGAActive(stuff->screen))
+        return DGAErrorBase + XF86DGADirectNotActivated;
+
+    rc = dixLookupResourceByType((pointer *) &pcmp, stuff->id, RT_COLORMAP,
+                                 client, DixInstallAccess);
+    if (rc == Success) {
+        DGAInstallCmap(pcmp);
+        return Success;
+    }
+    else {
+        return rc;
+    }
+}
+
+static int
+ProcXF86DGAQueryDirectVideo(ClientPtr client)
+{
+    REQUEST(xXF86DGAQueryDirectVideoReq);
+    xXF86DGAQueryDirectVideoReply rep;
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    REQUEST_SIZE_MATCH(xXF86DGAQueryDirectVideoReq);
+    rep.type = X_Reply;
+    rep.length = 0;
+    rep.sequenceNumber = client->sequence;
+    rep.flags = 0;
+
+    if (DGAAvailable(stuff->screen))
+        rep.flags = XF86DGADirectPresent;
+
+    WriteToClient(client, SIZEOF(xXF86DGAQueryDirectVideoReply), (char *) &rep);
+    return Success;
+}
+
+static int
+ProcXF86DGAViewPortChanged(ClientPtr client)
+{
+    REQUEST(xXF86DGAViewPortChangedReq);
+    xXF86DGAViewPortChangedReply rep;
+
+    if (stuff->screen >= screenInfo.numScreens)
+        return BadValue;
+
+    if (DGA_GETCLIENT(stuff->screen) != client)
+        return DGAErrorBase + XF86DGADirectNotActivated;
+
+    REQUEST_SIZE_MATCH(xXF86DGAViewPortChangedReq);
+
+    if (!DGAActive(stuff->screen))
+        return DGAErrorBase + XF86DGADirectNotActivated;
+
+    rep.type = X_Reply;
+    rep.length = 0;
+    rep.sequenceNumber = client->sequence;
+    rep.result = 1;
+
+    WriteToClient(client, SIZEOF(xXF86DGAViewPortChangedReply), (char *) &rep);
+    return Success;
+}
+
+#endif                          /* DGA_PROTOCOL_OLD_SUPPORT */
+
+static int
+SProcXDGADispatch(ClientPtr client)
+{
+    return DGAErrorBase + XF86DGAClientNotLocal;
+}
+
+#if 0
+#define DGA_REQ_DEBUG
+#endif
+
+#ifdef DGA_REQ_DEBUG
+static char *dgaMinor[] = {
+    "QueryVersion",
+    "GetVideoLL",
+    "DirectVideo",
+    "GetViewPortSize",
+    "SetViewPort",
+    "GetVidPage",
+    "SetVidPage",
+    "InstallColormap",
+    "QueryDirectVideo",
+    "ViewPortChanged",
+    "10",
+    "11",
+    "QueryModes",
+    "SetMode",
+    "SetViewport",
+    "InstallColormap",
+    "SelectInput",
+    "FillRectangle",
+    "CopyArea",
+    "CopyTransparentArea",
+    "GetViewportStatus",
+    "Sync",
+    "OpenFramebuffer",
+    "CloseFramebuffer",
+    "SetClientVersion",
+    "ChangePixmapMode",
+    "CreateColormap",
+};
+#endif
+
+static int
+ProcXDGADispatch(ClientPtr client)
+{
+    REQUEST(xReq);
+
+    if (!LocalClient(client))
+        return DGAErrorBase + XF86DGAClientNotLocal;
+
+#ifdef DGA_REQ_DEBUG
+    if (stuff->data <= X_XDGACreateColormap)
+        fprintf(stderr, "    DGA %s\n", dgaMinor[stuff->data]);
+#endif
+
+    switch (stuff->data) {
+        /*
+         * DGA2 Protocol
+         */
+    case X_XDGAQueryVersion:
+        return ProcXDGAQueryVersion(client);
+    case X_XDGAQueryModes:
+        return ProcXDGAQueryModes(client);
+    case X_XDGASetMode:
+        return ProcXDGASetMode(client);
+    case X_XDGAOpenFramebuffer:
+        return ProcXDGAOpenFramebuffer(client);
+    case X_XDGACloseFramebuffer:
+        return ProcXDGACloseFramebuffer(client);
+    case X_XDGASetViewport:
+        return ProcXDGASetViewport(client);
+    case X_XDGAInstallColormap:
+        return ProcXDGAInstallColormap(client);
+    case X_XDGASelectInput:
+        return ProcXDGASelectInput(client);
+    case X_XDGAFillRectangle:
+        return ProcXDGAFillRectangle(client);
+    case X_XDGACopyArea:
+        return ProcXDGACopyArea(client);
+    case X_XDGACopyTransparentArea:
+        return ProcXDGACopyTransparentArea(client);
+    case X_XDGAGetViewportStatus:
+        return ProcXDGAGetViewportStatus(client);
+    case X_XDGASync:
+        return ProcXDGASync(client);
+    case X_XDGASetClientVersion:
+        return ProcXDGASetClientVersion(client);
+    case X_XDGAChangePixmapMode:
+        return ProcXDGAChangePixmapMode(client);
+    case X_XDGACreateColormap:
+        return ProcXDGACreateColormap(client);
+        /*
+         * Old DGA Protocol
+         */
+#ifdef DGA_PROTOCOL_OLD_SUPPORT
+    case X_XF86DGAGetVideoLL:
+        return ProcXF86DGAGetVideoLL(client);
+    case X_XF86DGADirectVideo:
+        return ProcXF86DGADirectVideo(client);
+    case X_XF86DGAGetViewPortSize:
+        return ProcXF86DGAGetViewPortSize(client);
+    case X_XF86DGASetViewPort:
+        return ProcXF86DGASetViewPort(client);
+    case X_XF86DGAGetVidPage:
+        return ProcXF86DGAGetVidPage(client);
+    case X_XF86DGASetVidPage:
+        return ProcXF86DGASetVidPage(client);
+    case X_XF86DGAInstallColormap:
+        return ProcXF86DGAInstallColormap(client);
+    case X_XF86DGAQueryDirectVideo:
+        return ProcXF86DGAQueryDirectVideo(client);
+    case X_XF86DGAViewPortChanged:
+        return ProcXF86DGAViewPortChanged(client);
+#endif                          /* DGA_PROTOCOL_OLD_SUPPORT */
+    default:
+        return BadRequest;
+    }
+}
+
+void
+XFree86DGARegister(void)
+{
+    XDGAEventBase = &DGAEventBase;
+}
+
+void
+XFree86DGAExtensionInit(void)
+{
+    ExtensionEntry *extEntry;
+
+    if (!dixRegisterPrivateKey(&DGAClientPrivateKeyRec, PRIVATE_CLIENT, 0))
+        return;
+
+    if (!dixRegisterPrivateKey(&DGAScreenPrivateKeyRec, PRIVATE_SCREEN, 0))
+        return;
+
+    if ((extEntry = AddExtension(XF86DGANAME,
+                                 XF86DGANumberEvents,
+                                 XF86DGANumberErrors,
+                                 ProcXDGADispatch,
+                                 SProcXDGADispatch,
+                                 XDGAResetProc, StandardMinorOpcode))) {
+        int i;
+
+        DGAReqCode = (unsigned char) extEntry->base;
+        DGAErrorBase = extEntry->errorBase;
+        DGAEventBase = extEntry->eventBase;
+        for (i = KeyPress; i <= MotionNotify; i++)
+            SetCriticalEvent(DGAEventBase + i);
+    }
+}
diff --git a/hw/xfree86/common/xf86Extensions.c b/hw/xfree86/common/xf86Extensions.c
index aed0635..7a84988 100644
--- a/hw/xfree86/common/xf86Extensions.c
+++ b/hw/xfree86/common/xf86Extensions.c
@@ -41,10 +41,23 @@
 #include "xselinux.h"
 #endif
 
+#ifdef XFreeXDGA
+#include <X11/extensions/xf86dgaproto.h>
+#endif
+
 /*
  * DDX-specific extensions.
  */
 static ExtensionModule extensionModules[] = {
+#ifdef XFreeXDGA
+    {
+	XFree86DGAExtensionInit,
+	XF86DGANAME,
+	&noXFree86DGAExtension,
+	XFree86DGARegister,
+	NULL
+    },
+#endif
 };
 
 static void
@@ -52,6 +65,7 @@ load_extension_config(void)
 {
     XF86ConfModulePtr mod_con = xf86configptr->conf_modules;
     XF86LoadPtr modp;
+    int i;
 
     /* Only the best. */
     if (!mod_con)
diff --git a/hw/xfree86/dixmods/extmod/Makefile.am b/hw/xfree86/dixmods/extmod/Makefile.am
index 8436cb3..d3a9fc8 100644
--- a/hw/xfree86/dixmods/extmod/Makefile.am
+++ b/hw/xfree86/dixmods/extmod/Makefile.am
@@ -1,12 +1,6 @@
-sdk_HEADERS = dgaproc.h
-
 extsmoduledir = $(moduledir)/extensions
 extsmodule_LTLIBRARIES = libextmod.la
 
-if DGA
-DGA_SRCS = xf86dga2.c dgaproc.h
-endif
-
 if XF86VIDMODE
 XF86VMODE_SRCS = xf86vmode.c
 endif
@@ -19,6 +13,5 @@ INCLUDES = @XORG_INCS@ \
 
 libextmod_la_LDFLAGS = -module -avoid-version $(LD_NO_UNDEFINED_FLAG)
 libextmod_la_SOURCES = modinit.c \
-                       $(DGA_SRCS) \
                        $(XF86VMODE_SRCS)
 libextmod_la_LIBADD = $(top_builddir)/Xext/libXextmodule.la
diff --git a/hw/xfree86/dixmods/extmod/dgaproc.h b/hw/xfree86/dixmods/extmod/dgaproc.h
deleted file mode 100644
index 2c2fae0..0000000
--- a/hw/xfree86/dixmods/extmod/dgaproc.h
+++ /dev/null
@@ -1,115 +0,0 @@
-
-#ifndef __DGAPROC_H
-#define __DGAPROC_H
-
-#include <X11/Xproto.h>
-#include "pixmap.h"
-
-#define DGA_CONCURRENT_ACCESS	0x00000001
-#define DGA_FILL_RECT		0x00000002
-#define DGA_BLIT_RECT		0x00000004
-#define DGA_BLIT_RECT_TRANS	0x00000008
-#define DGA_PIXMAP_AVAILABLE	0x00000010
-
-#define DGA_INTERLACED		0x00010000
-#define DGA_DOUBLESCAN		0x00020000
-
-#define DGA_FLIP_IMMEDIATE	0x00000001
-#define DGA_FLIP_RETRACE	0x00000002
-
-#define DGA_COMPLETED		0x00000000
-#define DGA_PENDING		0x00000001
-
-#define DGA_NEED_ROOT		0x00000001
-
-typedef struct {
-    int num;                    /* A unique identifier for the mode (num > 0) */
-    char *name;                 /* name of mode given in the XF86Config */
-    int VSync_num;
-    int VSync_den;
-    int flags;                  /* DGA_CONCURRENT_ACCESS, etc... */
-    int imageWidth;             /* linear accessible portion (pixels) */
-    int imageHeight;
-    int pixmapWidth;            /* Xlib accessible portion (pixels) */
-    int pixmapHeight;           /* both fields ignored if no concurrent access */
-    int bytesPerScanline;
-    int byteOrder;              /* MSBFirst, LSBFirst */
-    int depth;
-    int bitsPerPixel;
-    unsigned long red_mask;
-    unsigned long green_mask;
-    unsigned long blue_mask;
-    short visualClass;
-    int viewportWidth;
-    int viewportHeight;
-    int xViewportStep;          /* viewport position granularity */
-    int yViewportStep;
-    int maxViewportX;           /* max viewport origin */
-    int maxViewportY;
-    int viewportFlags;          /* types of page flipping possible */
-    int offset;
-    int reserved1;
-    int reserved2;
-} XDGAModeRec, *XDGAModePtr;
-
-/* DDX interface */
-
-extern _X_EXPORT int
- DGASetMode(int Index, int num, XDGAModePtr mode, PixmapPtr *pPix);
-
-extern _X_EXPORT void
- DGASetInputMode(int Index, Bool keyboard, Bool mouse);
-
-extern _X_EXPORT void
- DGASelectInput(int Index, ClientPtr client, long mask);
-
-extern _X_EXPORT Bool DGAAvailable(int Index);
-extern _X_EXPORT Bool DGAScreenAvailable(ScreenPtr pScreen);
-extern _X_EXPORT Bool DGAActive(int Index);
-extern _X_EXPORT void DGAShutdown(void);
-extern _X_EXPORT void DGAInstallCmap(ColormapPtr cmap);
-extern _X_EXPORT int DGAGetViewportStatus(int Index);
-extern _X_EXPORT int DGASync(int Index);
-
-extern _X_EXPORT int
- DGAFillRect(int Index, int x, int y, int w, int h, unsigned long color);
-
-extern _X_EXPORT int
- DGABlitRect(int Index, int srcx, int srcy, int w, int h, int dstx, int dsty);
-
-extern _X_EXPORT int
-
-DGABlitTransRect(int Index,
-                 int srcx, int srcy,
-                 int w, int h, int dstx, int dsty, unsigned long color);
-
-extern _X_EXPORT int
- DGASetViewport(int Index, int x, int y, int mode);
-
-extern _X_EXPORT int DGAGetModes(int Index);
-extern _X_EXPORT int DGAGetOldDGAMode(int Index);
-
-extern _X_EXPORT int DGAGetModeInfo(int Index, XDGAModePtr mode, int num);
-
-extern _X_EXPORT Bool DGAVTSwitch(void);
-extern _X_EXPORT Bool DGAStealButtonEvent(DeviceIntPtr dev, int Index,
-                                          int button, int is_down);
-extern _X_EXPORT Bool DGAStealMotionEvent(DeviceIntPtr dev, int Index, int dx,
-                                          int dy);
-extern _X_EXPORT Bool DGAStealKeyEvent(DeviceIntPtr dev, int Index,
-                                       int key_code, int is_down);
-
-extern _X_EXPORT Bool DGAOpenFramebuffer(int Index, char **name,
-                                         unsigned char **mem, int *size,
-                                         int *offset, int *flags);
-extern _X_EXPORT void DGACloseFramebuffer(int Index);
-extern _X_EXPORT Bool DGAChangePixmapMode(int Index, int *x, int *y, int mode);
-extern _X_EXPORT int DGACreateColormap(int Index, ClientPtr client, int id,
-                                       int mode, int alloc);
-
-extern _X_EXPORT unsigned char DGAReqCode;
-extern _X_EXPORT int DGAErrorBase;
-extern _X_EXPORT int DGAEventBase;
-extern _X_EXPORT int *XDGAEventBase;
-
-#endif                          /* __DGAPROC_H */
diff --git a/hw/xfree86/dixmods/extmod/modinit.c b/hw/xfree86/dixmods/extmod/modinit.c
index e64d41a..f05a570 100644
--- a/hw/xfree86/dixmods/extmod/modinit.c
+++ b/hw/xfree86/dixmods/extmod/modinit.c
@@ -47,14 +47,6 @@ static ExtensionModule extensionModules[] = {
      NULL,
      NULL},
 #endif
-#ifdef XFreeXDGA
-    {
-     XFree86DGAExtensionInit,
-     XF86DGANAME,
-     &noXFree86DGAExtension,
-     XFree86DGARegister,
-     NULL},
-#endif
 };
 
 static XF86ModuleVersionInfo VersRec = {
diff --git a/hw/xfree86/dixmods/extmod/xf86dga2.c b/hw/xfree86/dixmods/extmod/xf86dga2.c
deleted file mode 100644
index 808aa69..0000000
--- a/hw/xfree86/dixmods/extmod/xf86dga2.c
+++ /dev/null
@@ -1,1044 +0,0 @@
-/*
- * Copyright (c) 1995  Jon Tombs
- * Copyright (c) 1995, 1996, 1999  XFree86 Inc
- * Copyright (c) 1999 - The XFree86 Project Inc.
- *
- * Written by Mark Vojkovich
- */
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include <X11/X.h>
-#include <X11/Xproto.h>
-#include "misc.h"
-#include "dixstruct.h"
-#include "dixevents.h"
-#include "pixmapstr.h"
-#include "extnsionst.h"
-#include "xf86Extensions.h"
-#include "colormapst.h"
-#include "cursorstr.h"
-#include "scrnintstr.h"
-#include "servermd.h"
-#include <X11/extensions/xf86dgaproto.h>
-#include "swaprep.h"
-#include "dgaproc.h"
-#include "protocol-versions.h"
-
-#include <string.h>
-
-#include "extinit.h"
-
-#define DGA_PROTOCOL_OLD_SUPPORT 1
-
-static void XDGAResetProc(ExtensionEntry * extEntry);
-
-static void DGAClientStateChange(CallbackListPtr *, pointer, pointer);
-
-unsigned char DGAReqCode = 0;
-int DGAErrorBase;
-int DGAEventBase;
-
-static DevPrivateKeyRec DGAScreenPrivateKeyRec;
-
-#define DGAScreenPrivateKey (&DGAScreenPrivateKeyRec)
-#define DGAScreenPrivateKeyRegistered (DGAScreenPrivateKeyRec.initialized)
-static DevPrivateKeyRec DGAClientPrivateKeyRec;
-
-#define DGAClientPrivateKey (&DGAClientPrivateKeyRec)
-static int DGACallbackRefCount = 0;
-
-/* This holds the client's version information */
-typedef struct {
-    int major;
-    int minor;
-} DGAPrivRec, *DGAPrivPtr;
-
-#define DGA_GETCLIENT(idx) ((ClientPtr) \
-    dixLookupPrivate(&screenInfo.screens[idx]->devPrivates, DGAScreenPrivateKey))
-#define DGA_SETCLIENT(idx,p) \
-    dixSetPrivate(&screenInfo.screens[idx]->devPrivates, DGAScreenPrivateKey, p)
-
-#define DGA_GETPRIV(c) ((DGAPrivPtr) \
-    dixLookupPrivate(&(c)->devPrivates, DGAClientPrivateKey))
-#define DGA_SETPRIV(c,p) \
-    dixSetPrivate(&(c)->devPrivates, DGAClientPrivateKey, p)
-
-static void
-XDGAResetProc(ExtensionEntry * extEntry)
-{
-    DeleteCallback(&ClientStateCallback, DGAClientStateChange, NULL);
-    DGACallbackRefCount = 0;
-}
-
-static int
-ProcXDGAQueryVersion(ClientPtr client)
-{
-    xXDGAQueryVersionReply rep = {
-        .type = X_Reply,
-        .sequenceNumber = client->sequence,
-        .length = 0,
-        .majorVersion = SERVER_XDGA_MAJOR_VERSION,
-        .minorVersion = SERVER_XDGA_MINOR_VERSION
-    };
-
-    REQUEST_SIZE_MATCH(xXDGAQueryVersionReq);
-
-    WriteToClient(client, sizeof(xXDGAQueryVersionReply), &rep);
-    return Success;
-}
-
-static int
-ProcXDGAOpenFramebuffer(ClientPtr client)
-{
-    REQUEST(xXDGAOpenFramebufferReq);
-    xXDGAOpenFramebufferReply rep = {
-        .type = X_Reply,
-        .length = 0,
-        .sequenceNumber = client->sequence
-    };
-    char *deviceName;
-    int nameSize;
-
-    REQUEST_SIZE_MATCH(xXDGAOpenFramebufferReq);
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    if (!DGAAvailable(stuff->screen))
-        return DGAErrorBase + XF86DGANoDirectVideoMode;
-
-    if (!DGAOpenFramebuffer(stuff->screen, &deviceName,
-                            (unsigned char **) (&rep.mem1),
-                            (int *) &rep.size, (int *) &rep.offset,
-                            (int *) &rep.extra)) {
-        return BadAlloc;
-    }
-
-    nameSize = deviceName ? (strlen(deviceName) + 1) : 0;
-    rep.length = bytes_to_int32(nameSize);
-
-    WriteToClient(client, sizeof(xXDGAOpenFramebufferReply), &rep);
-    if (rep.length)
-        WriteToClient(client, nameSize, deviceName);
-
-    return Success;
-}
-
-static int
-ProcXDGACloseFramebuffer(ClientPtr client)
-{
-    REQUEST(xXDGACloseFramebufferReq);
-
-    REQUEST_SIZE_MATCH(xXDGACloseFramebufferReq);
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    if (!DGAAvailable(stuff->screen))
-        return DGAErrorBase + XF86DGANoDirectVideoMode;
-
-    DGACloseFramebuffer(stuff->screen);
-
-    return Success;
-}
-
-static int
-ProcXDGAQueryModes(ClientPtr client)
-{
-    int i, num, size;
-
-    REQUEST(xXDGAQueryModesReq);
-    xXDGAQueryModesReply rep = {
-        .type = X_Reply,
-        .length = 0,
-        .number = 0,
-        .sequenceNumber = client->sequence
-    };
-    xXDGAModeInfo info;
-    XDGAModePtr mode;
-
-    REQUEST_SIZE_MATCH(xXDGAQueryModesReq);
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    if (!DGAAvailable(stuff->screen)) {
-        rep.number = 0;
-        rep.length = 0;
-        WriteToClient(client, sz_xXDGAQueryModesReply, &rep);
-        return Success;
-    }
-
-    if (!(num = DGAGetModes(stuff->screen))) {
-        WriteToClient(client, sz_xXDGAQueryModesReply, &rep);
-        return Success;
-    }
-
-    if (!(mode = (XDGAModePtr) malloc(num * sizeof(XDGAModeRec))))
-        return BadAlloc;
-
-    for (i = 0; i < num; i++)
-        DGAGetModeInfo(stuff->screen, mode + i, i + 1);
-
-    size = num * sz_xXDGAModeInfo;
-    for (i = 0; i < num; i++)
-        size += pad_to_int32(strlen(mode[i].name) + 1); /* plus NULL */
-
-    rep.number = num;
-    rep.length = bytes_to_int32(size);
-
-    WriteToClient(client, sz_xXDGAQueryModesReply, &rep);
-
-    for (i = 0; i < num; i++) {
-        size = strlen(mode[i].name) + 1;
-
-        info.byte_order = mode[i].byteOrder;
-        info.depth = mode[i].depth;
-        info.num = mode[i].num;
-        info.bpp = mode[i].bitsPerPixel;
-        info.name_size = (size + 3) & ~3L;
-        info.vsync_num = mode[i].VSync_num;
-        info.vsync_den = mode[i].VSync_den;
-        info.flags = mode[i].flags;
-        info.image_width = mode[i].imageWidth;
-        info.image_height = mode[i].imageHeight;
-        info.pixmap_width = mode[i].pixmapWidth;
-        info.pixmap_height = mode[i].pixmapHeight;
-        info.bytes_per_scanline = mode[i].bytesPerScanline;
-        info.red_mask = mode[i].red_mask;
-        info.green_mask = mode[i].green_mask;
-        info.blue_mask = mode[i].blue_mask;
-        info.visual_class = mode[i].visualClass;
-        info.viewport_width = mode[i].viewportWidth;
-        info.viewport_height = mode[i].viewportHeight;
-        info.viewport_xstep = mode[i].xViewportStep;
-        info.viewport_ystep = mode[i].yViewportStep;
-        info.viewport_xmax = mode[i].maxViewportX;
-        info.viewport_ymax = mode[i].maxViewportY;
-        info.viewport_flags = mode[i].viewportFlags;
-        info.reserved1 = mode[i].reserved1;
-        info.reserved2 = mode[i].reserved2;
-
-        WriteToClient(client, sz_xXDGAModeInfo, (&info));
-        WriteToClient(client, size, mode[i].name);
-    }
-
-    free(mode);
-
-    return Success;
-}
-
-static void
-DGAClientStateChange(CallbackListPtr *pcbl, pointer nulldata, pointer calldata)
-{
-    NewClientInfoRec *pci = (NewClientInfoRec *) calldata;
-    ClientPtr client = NULL;
-    int i;
-
-    for (i = 0; i < screenInfo.numScreens; i++) {
-        if (DGA_GETCLIENT(i) == pci->client) {
-            client = pci->client;
-            break;
-        }
-    }
-
-    if (client &&
-        ((client->clientState == ClientStateGone) ||
-         (client->clientState == ClientStateRetained))) {
-        XDGAModeRec mode;
-        PixmapPtr pPix;
-
-        DGA_SETCLIENT(i, NULL);
-        DGASelectInput(i, NULL, 0);
-        DGASetMode(i, 0, &mode, &pPix);
-
-        if (--DGACallbackRefCount == 0)
-            DeleteCallback(&ClientStateCallback, DGAClientStateChange, NULL);
-    }
-}
-
-static int
-ProcXDGASetMode(ClientPtr client)
-{
-    REQUEST(xXDGASetModeReq);
-    xXDGASetModeReply rep = {
-        .type = X_Reply,
-        .length = 0,
-        .offset = 0,
-        .flags = 0,
-        .sequenceNumber = client->sequence
-    };
-    XDGAModeRec mode;
-    xXDGAModeInfo info;
-    PixmapPtr pPix;
-    ClientPtr owner;
-    int size;
-
-    REQUEST_SIZE_MATCH(xXDGASetModeReq);
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-    owner = DGA_GETCLIENT(stuff->screen);
-
-    if (!DGAAvailable(stuff->screen))
-        return DGAErrorBase + XF86DGANoDirectVideoMode;
-
-    if (owner && owner != client)
-        return DGAErrorBase + XF86DGANoDirectVideoMode;
-
-    if (!stuff->mode) {
-        if (owner) {
-            if (--DGACallbackRefCount == 0)
-                DeleteCallback(&ClientStateCallback, DGAClientStateChange,
-                               NULL);
-        }
-        DGA_SETCLIENT(stuff->screen, NULL);
-        DGASelectInput(stuff->screen, NULL, 0);
-        DGASetMode(stuff->screen, 0, &mode, &pPix);
-        WriteToClient(client, sz_xXDGASetModeReply, &rep);
-        return Success;
-    }
-
-    if (Success != DGASetMode(stuff->screen, stuff->mode, &mode, &pPix))
-        return BadValue;
-
-    if (!owner) {
-        if (DGACallbackRefCount++ == 0)
-            AddCallback(&ClientStateCallback, DGAClientStateChange, NULL);
-    }
-
-    DGA_SETCLIENT(stuff->screen, client);
-
-    if (pPix) {
-        if (AddResource(stuff->pid, RT_PIXMAP, (pointer) (pPix))) {
-            pPix->drawable.id = (int) stuff->pid;
-            rep.flags = DGA_PIXMAP_AVAILABLE;
-        }
-    }
-
-    size = strlen(mode.name) + 1;
-
-    info.byte_order = mode.byteOrder;
-    info.depth = mode.depth;
-    info.num = mode.num;
-    info.bpp = mode.bitsPerPixel;
-    info.name_size = (size + 3) & ~3L;
-    info.vsync_num = mode.VSync_num;
-    info.vsync_den = mode.VSync_den;
-    info.flags = mode.flags;
-    info.image_width = mode.imageWidth;
-    info.image_height = mode.imageHeight;
-    info.pixmap_width = mode.pixmapWidth;
-    info.pixmap_height = mode.pixmapHeight;
-    info.bytes_per_scanline = mode.bytesPerScanline;
-    info.red_mask = mode.red_mask;
-    info.green_mask = mode.green_mask;
-    info.blue_mask = mode.blue_mask;
-    info.visual_class = mode.visualClass;
-    info.viewport_width = mode.viewportWidth;
-    info.viewport_height = mode.viewportHeight;
-    info.viewport_xstep = mode.xViewportStep;
-    info.viewport_ystep = mode.yViewportStep;
-    info.viewport_xmax = mode.maxViewportX;
-    info.viewport_ymax = mode.maxViewportY;
-    info.viewport_flags = mode.viewportFlags;
-    info.reserved1 = mode.reserved1;
-    info.reserved2 = mode.reserved2;
-
-    rep.length = bytes_to_int32(sz_xXDGAModeInfo + info.name_size);
-
-    WriteToClient(client, sz_xXDGASetModeReply, &rep);
-    WriteToClient(client, sz_xXDGAModeInfo, (&info));
-    WriteToClient(client, size, mode.name);
-
-    return Success;
-}
-
-static int
-ProcXDGASetViewport(ClientPtr client)
-{
-    REQUEST(xXDGASetViewportReq);
-
-    REQUEST_SIZE_MATCH(xXDGASetViewportReq);
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    if (DGA_GETCLIENT(stuff->screen) != client)
-        return DGAErrorBase + XF86DGADirectNotActivated;
-
-    DGASetViewport(stuff->screen, stuff->x, stuff->y, stuff->flags);
-
-    return Success;
-}
-
-static int
-ProcXDGAInstallColormap(ClientPtr client)
-{
-    ColormapPtr cmap;
-    int rc;
-
-    REQUEST(xXDGAInstallColormapReq);
-
-    REQUEST_SIZE_MATCH(xXDGAInstallColormapReq);
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    if (DGA_GETCLIENT(stuff->screen) != client)
-        return DGAErrorBase + XF86DGADirectNotActivated;
-
-    rc = dixLookupResourceByType((pointer *) &cmap, stuff->cmap, RT_COLORMAP,
-                                 client, DixInstallAccess);
-    if (rc != Success)
-        return rc;
-    DGAInstallCmap(cmap);
-    return Success;
-}
-
-static int
-ProcXDGASelectInput(ClientPtr client)
-{
-    REQUEST(xXDGASelectInputReq);
-
-    REQUEST_SIZE_MATCH(xXDGASelectInputReq);
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    if (DGA_GETCLIENT(stuff->screen) != client)
-        return DGAErrorBase + XF86DGADirectNotActivated;
-
-    if (DGA_GETCLIENT(stuff->screen) == client)
-        DGASelectInput(stuff->screen, client, stuff->mask);
-
-    return Success;
-}
-
-static int
-ProcXDGAFillRectangle(ClientPtr client)
-{
-    REQUEST(xXDGAFillRectangleReq);
-
-    REQUEST_SIZE_MATCH(xXDGAFillRectangleReq);
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    if (DGA_GETCLIENT(stuff->screen) != client)
-        return DGAErrorBase + XF86DGADirectNotActivated;
-
-    if (Success != DGAFillRect(stuff->screen, stuff->x, stuff->y,
-                               stuff->width, stuff->height, stuff->color))
-        return BadMatch;
-
-    return Success;
-}
-
-static int
-ProcXDGACopyArea(ClientPtr client)
-{
-    REQUEST(xXDGACopyAreaReq);
-
-    REQUEST_SIZE_MATCH(xXDGACopyAreaReq);
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    if (DGA_GETCLIENT(stuff->screen) != client)
-        return DGAErrorBase + XF86DGADirectNotActivated;
-
-    if (Success != DGABlitRect(stuff->screen, stuff->srcx, stuff->srcy,
-                               stuff->width, stuff->height, stuff->dstx,
-                               stuff->dsty))
-        return BadMatch;
-
-    return Success;
-}
-
-static int
-ProcXDGACopyTransparentArea(ClientPtr client)
-{
-    REQUEST(xXDGACopyTransparentAreaReq);
-
-    REQUEST_SIZE_MATCH(xXDGACopyTransparentAreaReq);
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    if (DGA_GETCLIENT(stuff->screen) != client)
-        return DGAErrorBase + XF86DGADirectNotActivated;
-
-    if (Success != DGABlitTransRect(stuff->screen, stuff->srcx, stuff->srcy,
-                                    stuff->width, stuff->height, stuff->dstx,
-                                    stuff->dsty, stuff->key))
-        return BadMatch;
-
-    return Success;
-}
-
-static int
-ProcXDGAGetViewportStatus(ClientPtr client)
-{
-    REQUEST(xXDGAGetViewportStatusReq);
-    xXDGAGetViewportStatusReply rep = {
-        .type = X_Reply,
-        .length = 0,
-        .sequenceNumber = client->sequence
-    };
-
-    REQUEST_SIZE_MATCH(xXDGAGetViewportStatusReq);
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    if (DGA_GETCLIENT(stuff->screen) != client)
-        return DGAErrorBase + XF86DGADirectNotActivated;
-
-    rep.status = DGAGetViewportStatus(stuff->screen);
-
-    WriteToClient(client, sizeof(xXDGAGetViewportStatusReply), &rep);
-    return Success;
-}
-
-static int
-ProcXDGASync(ClientPtr client)
-{
-    REQUEST(xXDGASyncReq);
-    xXDGASyncReply rep = {
-        .type = X_Reply,
-        .length = 0,
-        .sequenceNumber = client->sequence
-    };
-
-    REQUEST_SIZE_MATCH(xXDGASyncReq);
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    if (DGA_GETCLIENT(stuff->screen) != client)
-        return DGAErrorBase + XF86DGADirectNotActivated;
-
-    DGASync(stuff->screen);
-
-    WriteToClient(client, sizeof(xXDGASyncReply), &rep);
-    return Success;
-}
-
-static int
-ProcXDGASetClientVersion(ClientPtr client)
-{
-    REQUEST(xXDGASetClientVersionReq);
-
-    DGAPrivPtr pPriv;
-
-    REQUEST_SIZE_MATCH(xXDGASetClientVersionReq);
-    if ((pPriv = DGA_GETPRIV(client)) == NULL) {
-        pPriv = malloc(sizeof(DGAPrivRec));
-        /* XXX Need to look into freeing this */
-        if (!pPriv)
-            return BadAlloc;
-        DGA_SETPRIV(client, pPriv);
-    }
-    pPriv->major = stuff->major;
-    pPriv->minor = stuff->minor;
-
-    return Success;
-}
-
-static int
-ProcXDGAChangePixmapMode(ClientPtr client)
-{
-    REQUEST(xXDGAChangePixmapModeReq);
-    xXDGAChangePixmapModeReply rep;
-    int x, y;
-
-    REQUEST_SIZE_MATCH(xXDGAChangePixmapModeReq);
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    if (DGA_GETCLIENT(stuff->screen) != client)
-        return DGAErrorBase + XF86DGADirectNotActivated;
-
-    x = stuff->x;
-    y = stuff->y;
-
-    if (!DGAChangePixmapMode(stuff->screen, &x, &y, stuff->flags))
-        return BadMatch;
-
-    rep = (xXDGAChangePixmapModeReply) {
-        .type = X_Reply,
-        .length = 0,
-        .sequenceNumber = client->sequence,
-        .x = x,
-        .y = y
-    };
-    WriteToClient(client, sizeof(xXDGAChangePixmapModeReply), &rep);
-
-    return Success;
-}
-
-static int
-ProcXDGACreateColormap(ClientPtr client)
-{
-    REQUEST(xXDGACreateColormapReq);
-    int result;
-
-    REQUEST_SIZE_MATCH(xXDGACreateColormapReq);
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    if (DGA_GETCLIENT(stuff->screen) != client)
-        return DGAErrorBase + XF86DGADirectNotActivated;
-
-    if (!stuff->mode)
-        return BadValue;
-
-    result = DGACreateColormap(stuff->screen, client, stuff->id,
-                               stuff->mode, stuff->alloc);
-    if (result != Success)
-        return result;
-
-    return Success;
-}
-
-/*
- *
- * Support for the old DGA protocol, used to live in xf86dga.c
- *
- */
-
-#ifdef DGA_PROTOCOL_OLD_SUPPORT
-
-static int
-ProcXF86DGAGetVideoLL(ClientPtr client)
-{
-    REQUEST(xXF86DGAGetVideoLLReq);
-    xXF86DGAGetVideoLLReply rep = {
-        .type = X_Reply,
-        .length = 0,
-        .sequenceNumber = client->sequence
-    };
-    XDGAModeRec mode;
-    int num, offset, flags;
-    char *name;
-
-    REQUEST_SIZE_MATCH(xXF86DGAGetVideoLLReq);
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    if (!DGAAvailable(stuff->screen))
-        return DGAErrorBase + XF86DGANoDirectVideoMode;
-
-    if (!(num = DGAGetOldDGAMode(stuff->screen)))
-        return DGAErrorBase + XF86DGANoDirectVideoMode;
-
-    /* get the parameters for the mode that best matches */
-    DGAGetModeInfo(stuff->screen, &mode, num);
-
-    if (!DGAOpenFramebuffer(stuff->screen, &name,
-                            (unsigned char **) (&rep.offset),
-                            (int *) (&rep.bank_size), &offset, &flags))
-        return BadAlloc;
-
-    rep.offset += mode.offset;
-    rep.width = mode.bytesPerScanline / (mode.bitsPerPixel >> 3);
-    rep.ram_size = rep.bank_size >> 10;
-
-    WriteToClient(client, SIZEOF(xXF86DGAGetVideoLLReply), &rep);
-    return Success;
-}
-
-static int
-ProcXF86DGADirectVideo(ClientPtr client)
-{
-    int num;
-    PixmapPtr pix;
-    XDGAModeRec mode;
-    ClientPtr owner;
-
-    REQUEST(xXF86DGADirectVideoReq);
-
-    REQUEST_SIZE_MATCH(xXF86DGADirectVideoReq);
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    if (!DGAAvailable(stuff->screen))
-        return DGAErrorBase + XF86DGANoDirectVideoMode;
-
-    owner = DGA_GETCLIENT(stuff->screen);
-
-    if (owner && owner != client)
-        return DGAErrorBase + XF86DGANoDirectVideoMode;
-
-    if (stuff->enable & XF86DGADirectGraphics) {
-        if (!(num = DGAGetOldDGAMode(stuff->screen)))
-            return DGAErrorBase + XF86DGANoDirectVideoMode;
-    }
-    else
-        num = 0;
-
-    if (Success != DGASetMode(stuff->screen, num, &mode, &pix))
-        return DGAErrorBase + XF86DGAScreenNotActive;
-
-    DGASetInputMode(stuff->screen,
-                    (stuff->enable & XF86DGADirectKeyb) != 0,
-                    (stuff->enable & XF86DGADirectMouse) != 0);
-
-    /* We need to track the client and attach the teardown callback */
-    if (stuff->enable &
-        (XF86DGADirectGraphics | XF86DGADirectKeyb | XF86DGADirectMouse)) {
-        if (!owner) {
-            if (DGACallbackRefCount++ == 0)
-                AddCallback(&ClientStateCallback, DGAClientStateChange, NULL);
-        }
-
-        DGA_SETCLIENT(stuff->screen, client);
-    }
-    else {
-        if (owner) {
-            if (--DGACallbackRefCount == 0)
-                DeleteCallback(&ClientStateCallback, DGAClientStateChange,
-                               NULL);
-        }
-
-        DGA_SETCLIENT(stuff->screen, NULL);
-    }
-
-    return Success;
-}
-
-static int
-ProcXF86DGAGetViewPortSize(ClientPtr client)
-{
-    int num;
-    XDGAModeRec mode;
-
-    REQUEST(xXF86DGAGetViewPortSizeReq);
-    xXF86DGAGetViewPortSizeReply rep;
-
-    REQUEST_SIZE_MATCH(xXF86DGAGetViewPortSizeReq);
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    if (!DGAAvailable(stuff->screen))
-        return DGAErrorBase + XF86DGANoDirectVideoMode;
-
-    if (!(num = DGAGetOldDGAMode(stuff->screen)))
-        return DGAErrorBase + XF86DGANoDirectVideoMode;
-
-    DGAGetModeInfo(stuff->screen, &mode, num);
-
-    rep = (xXF86DGAGetViewPortSizeReply) {
-        .type = X_Reply,
-        .length = 0,
-        .sequenceNumber = client->sequence,
-        .width = mode.viewportWidth,
-        .height = mode.viewportHeight
-    };
-
-    WriteToClient(client, SIZEOF(xXF86DGAGetViewPortSizeReply), &rep);
-    return Success;
-}
-
-static int
-ProcXF86DGASetViewPort(ClientPtr client)
-{
-    REQUEST(xXF86DGASetViewPortReq);
-
-    REQUEST_SIZE_MATCH(xXF86DGASetViewPortReq);
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    if (DGA_GETCLIENT(stuff->screen) != client)
-        return DGAErrorBase + XF86DGADirectNotActivated;
-
-    if (!DGAAvailable(stuff->screen))
-        return DGAErrorBase + XF86DGANoDirectVideoMode;
-
-    if (!DGAActive(stuff->screen))
-        return DGAErrorBase + XF86DGADirectNotActivated;
-
-    if (DGASetViewport(stuff->screen, stuff->x, stuff->y, DGA_FLIP_RETRACE)
-        != Success)
-        return DGAErrorBase + XF86DGADirectNotActivated;
-
-    return Success;
-}
-
-static int
-ProcXF86DGAGetVidPage(ClientPtr client)
-{
-    REQUEST(xXF86DGAGetVidPageReq);
-    xXF86DGAGetVidPageReply rep = {
-        .type = X_Reply,
-        .length = 0,
-        .sequenceNumber = client->sequence,
-        .vpage = 0               /* silently fail */
-    };
-
-    REQUEST_SIZE_MATCH(xXF86DGAGetVidPageReq);
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    WriteToClient(client, SIZEOF(xXF86DGAGetVidPageReply), &rep);
-    return Success;
-}
-
-static int
-ProcXF86DGASetVidPage(ClientPtr client)
-{
-    REQUEST(xXF86DGASetVidPageReq);
-
-    REQUEST_SIZE_MATCH(xXF86DGASetVidPageReq);
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    /* silently fail */
-
-    return Success;
-}
-
-static int
-ProcXF86DGAInstallColormap(ClientPtr client)
-{
-    ColormapPtr pcmp;
-    int rc;
-
-    REQUEST(xXF86DGAInstallColormapReq);
-
-    REQUEST_SIZE_MATCH(xXF86DGAInstallColormapReq);
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    if (DGA_GETCLIENT(stuff->screen) != client)
-        return DGAErrorBase + XF86DGADirectNotActivated;
-
-    if (!DGAActive(stuff->screen))
-        return DGAErrorBase + XF86DGADirectNotActivated;
-
-    rc = dixLookupResourceByType((pointer *) &pcmp, stuff->id, RT_COLORMAP,
-                                 client, DixInstallAccess);
-    if (rc == Success) {
-        DGAInstallCmap(pcmp);
-        return Success;
-    }
-    else {
-        return rc;
-    }
-}
-
-static int
-ProcXF86DGAQueryDirectVideo(ClientPtr client)
-{
-    REQUEST(xXF86DGAQueryDirectVideoReq);
-    xXF86DGAQueryDirectVideoReply rep = {
-        .type = X_Reply,
-        .length = 0,
-        .sequenceNumber = client->sequence,
-        .flags = 0
-    };
-
-    REQUEST_SIZE_MATCH(xXF86DGAQueryDirectVideoReq);
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    if (DGAAvailable(stuff->screen))
-        rep.flags = XF86DGADirectPresent;
-
-    WriteToClient(client, SIZEOF(xXF86DGAQueryDirectVideoReply), &rep);
-    return Success;
-}
-
-static int
-ProcXF86DGAViewPortChanged(ClientPtr client)
-{
-    REQUEST(xXF86DGAViewPortChangedReq);
-    xXF86DGAViewPortChangedReply rep = {
-        .type = X_Reply,
-        .length = 0,
-        .sequenceNumber = client->sequence,
-        .result = 1
-    };
-
-    REQUEST_SIZE_MATCH(xXF86DGAViewPortChangedReq);
-
-    if (stuff->screen >= screenInfo.numScreens)
-        return BadValue;
-
-    if (DGA_GETCLIENT(stuff->screen) != client)
-        return DGAErrorBase + XF86DGADirectNotActivated;
-
-    if (!DGAActive(stuff->screen))
-        return DGAErrorBase + XF86DGADirectNotActivated;
-
-    WriteToClient(client, SIZEOF(xXF86DGAViewPortChangedReply), &rep);
-    return Success;
-}
-
-#endif                          /* DGA_PROTOCOL_OLD_SUPPORT */
-
-static int
-SProcXDGADispatch(ClientPtr client)
-{
-    return DGAErrorBase + XF86DGAClientNotLocal;
-}
-
-#if 0
-#define DGA_REQ_DEBUG
-#endif
-
-#ifdef DGA_REQ_DEBUG
-static char *dgaMinor[] = {
-    "QueryVersion",
-    "GetVideoLL",
-    "DirectVideo",
-    "GetViewPortSize",
-    "SetViewPort",
-    "GetVidPage",
-    "SetVidPage",
-    "InstallColormap",
-    "QueryDirectVideo",
-    "ViewPortChanged",
-    "10",
-    "11",
-    "QueryModes",
-    "SetMode",
-    "SetViewport",
-    "InstallColormap",
-    "SelectInput",
-    "FillRectangle",
-    "CopyArea",
-    "CopyTransparentArea",
-    "GetViewportStatus",
-    "Sync",
-    "OpenFramebuffer",
-    "CloseFramebuffer",
-    "SetClientVersion",
-    "ChangePixmapMode",
-    "CreateColormap",
-};
-#endif
-
-static int
-ProcXDGADispatch(ClientPtr client)
-{
-    REQUEST(xReq);
-
-    if (!LocalClient(client))
-        return DGAErrorBase + XF86DGAClientNotLocal;
-
-#ifdef DGA_REQ_DEBUG
-    if (stuff->data <= X_XDGACreateColormap)
-        fprintf(stderr, "    DGA %s\n", dgaMinor[stuff->data]);
-#endif
-
-    switch (stuff->data) {
-        /*
-         * DGA2 Protocol
-         */
-    case X_XDGAQueryVersion:
-        return ProcXDGAQueryVersion(client);
-    case X_XDGAQueryModes:
-        return ProcXDGAQueryModes(client);
-    case X_XDGASetMode:
-        return ProcXDGASetMode(client);
-    case X_XDGAOpenFramebuffer:
-        return ProcXDGAOpenFramebuffer(client);
-    case X_XDGACloseFramebuffer:
-        return ProcXDGACloseFramebuffer(client);
-    case X_XDGASetViewport:
-        return ProcXDGASetViewport(client);
-    case X_XDGAInstallColormap:
-        return ProcXDGAInstallColormap(client);
-    case X_XDGASelectInput:
-        return ProcXDGASelectInput(client);
-    case X_XDGAFillRectangle:
-        return ProcXDGAFillRectangle(client);
-    case X_XDGACopyArea:
-        return ProcXDGACopyArea(client);
-    case X_XDGACopyTransparentArea:
-        return ProcXDGACopyTransparentArea(client);
-    case X_XDGAGetViewportStatus:
-        return ProcXDGAGetViewportStatus(client);
-    case X_XDGASync:
-        return ProcXDGASync(client);
-    case X_XDGASetClientVersion:
-        return ProcXDGASetClientVersion(client);
-    case X_XDGAChangePixmapMode:
-        return ProcXDGAChangePixmapMode(client);
-    case X_XDGACreateColormap:
-        return ProcXDGACreateColormap(client);
-        /*
-         * Old DGA Protocol
-         */
-#ifdef DGA_PROTOCOL_OLD_SUPPORT
-    case X_XF86DGAGetVideoLL:
-        return ProcXF86DGAGetVideoLL(client);
-    case X_XF86DGADirectVideo:
-        return ProcXF86DGADirectVideo(client);
-    case X_XF86DGAGetViewPortSize:
-        return ProcXF86DGAGetViewPortSize(client);
-    case X_XF86DGASetViewPort:
-        return ProcXF86DGASetViewPort(client);
-    case X_XF86DGAGetVidPage:
-        return ProcXF86DGAGetVidPage(client);
-    case X_XF86DGASetVidPage:
-        return ProcXF86DGASetVidPage(client);
-    case X_XF86DGAInstallColormap:
-        return ProcXF86DGAInstallColormap(client);
-    case X_XF86DGAQueryDirectVideo:
-        return ProcXF86DGAQueryDirectVideo(client);
-    case X_XF86DGAViewPortChanged:
-        return ProcXF86DGAViewPortChanged(client);
-#endif                          /* DGA_PROTOCOL_OLD_SUPPORT */
-    default:
-        return BadRequest;
-    }
-}
-
-void
-XFree86DGARegister(void)
-{
-    XDGAEventBase = &DGAEventBase;
-}
-
-void
-XFree86DGAExtensionInit(void)
-{
-    ExtensionEntry *extEntry;
-
-    if (!dixRegisterPrivateKey(&DGAClientPrivateKeyRec, PRIVATE_CLIENT, 0))
-        return;
-
-    if (!dixRegisterPrivateKey(&DGAScreenPrivateKeyRec, PRIVATE_SCREEN, 0))
-        return;
-
-    if ((extEntry = AddExtension(XF86DGANAME,
-                                 XF86DGANumberEvents,
-                                 XF86DGANumberErrors,
-                                 ProcXDGADispatch,
-                                 SProcXDGADispatch,
-                                 XDGAResetProc, StandardMinorOpcode))) {
-        int i;
-
-        DGAReqCode = (unsigned char) extEntry->base;
-        DGAErrorBase = extEntry->errorBase;
-        DGAEventBase = extEntry->eventBase;
-        for (i = KeyPress; i <= MotionNotify; i++)
-            SetCriticalEvent(DGAEventBase + i);
-    }
-}
diff --git a/hw/xfree86/sdksyms.sh b/hw/xfree86/sdksyms.sh
index 2959457..e06bf64 100755
--- a/hw/xfree86/sdksyms.sh
+++ b/hw/xfree86/sdksyms.sh
@@ -188,9 +188,9 @@ cat > sdksyms.c << EOF
 
 
 /* hw/xfree86/dixmods/extmod/Makefile.am -- module */
-/*
+#ifdef XFreeXDGA
 #include "dgaproc.h"
- */
+#endif
 
 
 /* hw/xfree86/parser/Makefile.am */
commit 6fb481d1251626456914d0012d6ca5a342bfdf71
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:03:09 2012 +0100

    Move SELinux from extmod to built-in
    
    Instead of letting it languish in extmod just because we want to
    configure bits of it from xf86, move XSELinux to the builtin part of
    Xext, and do its configuration from xf86ExtensionInit.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Jamey Sharp <jamey at minilop.net>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/Xext/Makefile.am b/Xext/Makefile.am
index 98e9917..957fa67 100644
--- a/Xext/Makefile.am
+++ b/Xext/Makefile.am
@@ -30,6 +30,7 @@ BUILTIN_SRCS =			\
 	syncsrv.h		\
 	xcmisc.c		\
 	xtest.c
+BUILTIN_LIBS =
 
 # Sources always included in libXextmodule.la & libXext.la. That's right, zero.
 MODULE_SRCS =
@@ -84,8 +85,8 @@ endif
 # requires X-ACE extension
 XSELINUX_SRCS = xselinux_ext.c xselinux_hooks.c xselinux_label.c xselinux.h xselinuxint.h
 if XSELINUX
-MODULE_SRCS += $(XSELINUX_SRCS)
-MODULE_LIBS += $(SELINUX_LIBS)
+BUILTIN_SRCS += $(XSELINUX_SRCS)
+BUILTIN_LIBS += $(SELINUX_LIBS)
 endif
 
 # Security extension: multi-level security to protect clients from each other
@@ -109,10 +110,11 @@ endif
 # Now take all of the above, mix well, bake for 10 minutes and get libXext*.la
 
 libXext_la_SOURCES =		$(BUILTIN_SRCS) $(MODULE_SRCS)
-libXext_la_LIBADD =		$(MODULE_LIBS)
+libXext_la_LIBADD =		$(BUILTIN_LIBS) $(MODULE_LIBS)
 
 if XORG
 libXextbuiltin_la_SOURCES =	$(BUILTIN_SRCS)
+libXextbuiltin_la_LIBADD = 	$(BUILTIN_LIBS)
 
 libXextmodule_la_SOURCES =	$(MODULE_SRCS)
 libXextmodule_la_LIBADD =	$(MODULE_LIBS)
diff --git a/hw/xfree86/common/xf86Extensions.c b/hw/xfree86/common/xf86Extensions.c
index 15c96b4..aed0635 100644
--- a/hw/xfree86/common/xf86Extensions.c
+++ b/hw/xfree86/common/xf86Extensions.c
@@ -37,6 +37,10 @@
 #include "xf86Opt.h"
 #include "optionstr.h"
 
+#ifdef XSELINUX
+#include "xselinux.h"
+#endif
+
 /*
  * DDX-specific extensions.
  */
@@ -67,6 +71,24 @@ load_extension_config(void)
             if (EnableDisableExtension(key + 4, FALSE))
                 xf86MarkOptionUsed(opt);
         }
+
+#ifdef XSELINUX
+        if ((opt = xf86FindOption(modp->load_opt,
+                                  "SELinux mode disabled"))) {
+            xf86MarkOptionUsed(opt);
+            selinuxEnforcingState = SELINUX_MODE_DISABLED;
+        }
+        if ((opt = xf86FindOption(modp->load_opt,
+                                  "SELinux mode permissive"))) {
+            xf86MarkOptionUsed(opt);
+            selinuxEnforcingState = SELINUX_MODE_PERMISSIVE;
+        }
+        if ((opt = xf86FindOption(modp->load_opt,
+                                  "SELinux mode enforcing"))) {
+            xf86MarkOptionUsed(opt);
+            selinuxEnforcingState = SELINUX_MODE_ENFORCING;
+        }
+#endif
     }
 }
 
diff --git a/hw/xfree86/dixmods/extmod/modinit.c b/hw/xfree86/dixmods/extmod/modinit.c
index f8832fd..e64d41a 100644
--- a/hw/xfree86/dixmods/extmod/modinit.c
+++ b/hw/xfree86/dixmods/extmod/modinit.c
@@ -39,14 +39,6 @@ static MODULESETUPPROTO(extmodSetup);
  * Array describing extensions to be initialized
  */
 static ExtensionModule extensionModules[] = {
-#ifdef XSELINUX
-    {
-     SELinuxExtensionInit,
-     SELINUX_EXTENSION_NAME,
-     &noSELinuxExtension,
-     NULL,
-     NULL},
-#endif
 #ifdef XF86VIDMODE
     {
      XFree86VidModeExtensionInit,
@@ -88,32 +80,9 @@ extmodSetup(pointer module, pointer opts, int *errmaj, int *errmin)
 {
     int i;
 
-    /* XXX the option stuff here is largely a sample/test case */
-
-    for (i = 0; i < ARRAY_SIZE(extensionModules); i++) {
-#ifdef XSELINUX
-        if (!strcmp(SELINUX_EXTENSION_NAME, extensionModules[i].name)) {
-            pointer o;
-
-            selinuxEnforcingState = SELINUX_MODE_DEFAULT;
-
-            if ((o = xf86FindOption(opts, "SELinux mode disabled"))) {
-                xf86MarkOptionUsed(o);
-                selinuxEnforcingState = SELINUX_MODE_DISABLED;
-            }
-            if ((o = xf86FindOption(opts, "SELinux mode permissive"))) {
-                xf86MarkOptionUsed(o);
-                selinuxEnforcingState = SELINUX_MODE_PERMISSIVE;
-            }
-            if ((o = xf86FindOption(opts, "SELinux mode enforcing"))) {
-                xf86MarkOptionUsed(o);
-                selinuxEnforcingState = SELINUX_MODE_ENFORCING;
-            }
-        }
-#endif
+    for (i = 0; i < ARRAY_SIZE(extensionModules); i++)
+	LoadExtension(&extensionModules[i], FALSE);
 
-        LoadExtension(&extensionModules[i], FALSE);
-    }
     /* Need a non-NULL return */
     return (pointer) 1;
 }
diff --git a/include/extinit.h b/include/extinit.h
index ea41eba..0a24db0 100644
--- a/include/extinit.h
+++ b/include/extinit.h
@@ -158,7 +158,7 @@ extern _X_EXPORT void AssignTypeAndName(DeviceIntPtr dev,
 #include <X11/extensions/XKB.h>
 extern void XkbExtensionInit(void);
 
-#if defined(XSELINUX) && !defined(XorgLoader)
+#if defined(XSELINUX)
 #include "xselinux.h"
 extern Bool noSELinuxExtension;
 extern void SELinuxExtensionInit(void);
diff --git a/mi/miinitext.c b/mi/miinitext.c
index 74fb223..a8644db 100644
--- a/mi/miinitext.c
+++ b/mi/miinitext.c
@@ -416,6 +416,9 @@ static ExtensionModule staticExtensions[] = {
     {XvExtensionInit, XvName, &noXvExtension, NULL},
     {XvMCExtensionInit, XvMCName, &noXvExtension, NULL},
 #endif
+#ifdef XSELINUX
+    {SELinuxExtensionInit, SELINUX_EXTENSION_NAME, &noSELinuxExtension, NULL},
+#endif
 };
 
  /*ARGSUSED*/ void
commit 5d92ee4081a23a6b4d1f9ba2a98985f539f99312
Author: Tomas Carnecky <tom at dbservice.com>
Date:   Tue Jul 10 02:03:08 2012 +0100

    Xv: Remove excessive module-induced indirection
    
    Xv used to call XvScreenInit and co. through function pointers, as
    XvScreenInit may have been sitting on the other side of a module
    boundary from xf86XvScreenInit.  Why this was so is a mystery, but make
    it not so any more.
    
    Signed-off-by: Tomas Carnecky <tom at dbservice.com>
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>
    Acked-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/Xext/xvdix.h b/Xext/xvdix.h
index fc8eb0f..9c6160c 100644
--- a/Xext/xvdix.h
+++ b/Xext/xvdix.h
@@ -70,10 +70,6 @@ extern _X_EXPORT RESTYPE XvRTVideoNotify;
 extern _X_EXPORT RESTYPE XvRTVideoNotifyList;
 extern _X_EXPORT RESTYPE XvRTPortNotify;
 
-extern DevPrivateKey (*XvGetScreenKeyProc)(void);
-extern unsigned long (*XvGetRTPortProc)(void);
-extern int (*XvScreenInitProc)(ScreenPtr);
-
 typedef struct {
     int numerator;
     int denominator;
diff --git a/Xext/xvmain.c b/Xext/xvmain.c
index 77c4156..c2860b8 100644
--- a/Xext/xvmain.c
+++ b/Xext/xvmain.c
@@ -194,18 +194,6 @@ XvExtensionInit(void)
     }
 }
 
-DevPrivateKey (*XvGetScreenKeyProc)(void) = NULL;
-unsigned long (*XvGetRTPortProc)(void) = NULL;
-int (*XvScreenInitProc)(ScreenPtr) = NULL;
-
-void
-XvRegister(void)
-{
-    XvScreenInitProc = XvScreenInit;
-    XvGetScreenKeyProc = XvGetScreenKey;
-    XvGetRTPortProc = XvGetRTPort;
-}
-
 static Bool
 CreateResourceTypes(void)
 {
diff --git a/Xext/xvmc.c b/Xext/xvmc.c
index 910adf4..ad7956b 100644
--- a/Xext/xvmc.c
+++ b/Xext/xvmc.c
@@ -764,12 +764,6 @@ XvMCScreenInit(ScreenPtr pScreen, int num, XvMCAdaptorPtr pAdapt)
     return Success;
 }
 
-void
-XvMCRegister(void)
-{
-    XvMCScreenInitProc = XvMCScreenInit;
-}
-
 XvImagePtr
 XvMCFindXvImage(XvPortPtr pPort, CARD32 id)
 {
diff --git a/hw/kdrive/src/kxv.c b/hw/kdrive/src/kxv.c
index b7afb2e..cf65636 100644
--- a/hw/kdrive/src/kxv.c
+++ b/hw/kdrive/src/kxv.c
@@ -182,17 +182,17 @@ KdXVScreenInit(ScreenPtr pScreen, KdVideoAdaptorPtr * adaptors, int num)
     if (KdXVGeneration != serverGeneration)
         KdXVGeneration = serverGeneration;
 
-    if (!XvGetScreenKeyProc || !XvGetRTPortProc || !XvScreenInitProc)
+    if (noXvExtension)
         return FALSE;
 
     if (!dixRegisterPrivateKey(&KdXVWindowKeyRec, PRIVATE_WINDOW, 0))
         return FALSE;
 
-    if (Success != (*XvScreenInitProc) (pScreen))
+    if (Success != XvScreenInit(pScreen))
         return FALSE;
 
-    KdXvScreenKey = (*XvGetScreenKeyProc) ();
-    PortResource = (*XvGetRTPortProc) ();
+    KdXvScreenKey = XvGetScreenKey();
+    PortResource = XvGetRTPort();
 
     pxvs = GET_XV_SCREEN(pScreen);
 
diff --git a/hw/xfree86/common/xf86xv.c b/hw/xfree86/common/xf86xv.c
index 0e50f37..92d0f6d 100644
--- a/hw/xfree86/common/xf86xv.c
+++ b/hw/xfree86/common/xf86xv.c
@@ -234,19 +234,18 @@ xf86XVScreenInit(ScreenPtr pScreen, XF86VideoAdaptorPtr * adaptors, int num)
     XF86XVScreenPtr ScreenPriv;
     XvScreenPtr pxvs;
 
-    if (num <= 0 ||
-        !XvGetScreenKeyProc || !XvGetRTPortProc || !XvScreenInitProc)
+    if (num <= 0 || noXvExtension)
         return FALSE;
 
-    if (Success != (*XvScreenInitProc) (pScreen))
+    if (Success != XvScreenInit(pScreen))
         return FALSE;
 
     if (!dixRegisterPrivateKey(&XF86XVWindowKeyRec, PRIVATE_WINDOW, 0))
         return FALSE;
 
-    XF86XvScreenKey = (*XvGetScreenKeyProc) ();
+    XF86XvScreenKey = XvGetScreenKey();
 
-    PortResource = (*XvGetRTPortProc) ();
+    PortResource = XvGetRTPort();
 
     pxvs = GET_XV_SCREEN(pScreen);
 
diff --git a/hw/xfree86/common/xf86xvmc.c b/hw/xfree86/common/xf86xvmc.c
index dc6b395..78a32bf 100644
--- a/hw/xfree86/common/xf86xvmc.c
+++ b/hw/xfree86/common/xf86xvmc.c
@@ -152,7 +152,7 @@ xf86XvMCScreenInit(ScreenPtr pScreen,
                                                       XF86XvScreenKey);
     int i, j;
 
-    if (!XvMCScreenInitProc)
+    if (noXvExtension)
         return FALSE;
 
     if (!(pAdapt = malloc(sizeof(XvMCAdaptorRec) * num_adaptors)))
@@ -201,7 +201,7 @@ xf86XvMCScreenInit(ScreenPtr pScreen,
         adaptors++;
     }
 
-    if (Success != (*XvMCScreenInitProc) (pScreen, num_adaptors, pAdapt))
+    if (Success != XvMCScreenInit(pScreen, num_adaptors, pAdapt))
         return FALSE;
 
     return TRUE;
diff --git a/hw/xfree86/common/xf86xvmc.h b/hw/xfree86/common/xf86xvmc.h
index ff32379..2478fe3 100644
--- a/hw/xfree86/common/xf86xvmc.h
+++ b/hw/xfree86/common/xf86xvmc.h
@@ -138,7 +138,4 @@ extern _X_EXPORT Bool xf86XvMCScreenInit(ScreenPtr pScreen,
 extern _X_EXPORT XF86MCAdaptorPtr xf86XvMCCreateAdaptorRec(void);
 extern _X_EXPORT void xf86XvMCDestroyAdaptorRec(XF86MCAdaptorPtr adaptor);
 
-typedef int (*XvMCScreenInitProcPtr) (ScreenPtr, int, XvMCAdaptorPtr);
-extern _X_EXPORT XvMCScreenInitProcPtr XvMCScreenInitProc;
-
 #endif                          /* _XF86XVMC_H */
diff --git a/include/extinit.h b/include/extinit.h
index a8c2539..ea41eba 100644
--- a/include/extinit.h
+++ b/include/extinit.h
@@ -181,8 +181,6 @@ extern void PseudoramiXExtensionInit(void);
 extern Bool noXvExtension;
 extern void XvExtensionInit(void);
 extern void XvMCExtensionInit(void);
-extern void XvRegister(void);
-extern void XvMCRegister(void);
 #endif
 
 #endif
diff --git a/mi/miinitext.c b/mi/miinitext.c
index a83df60..74fb223 100644
--- a/mi/miinitext.c
+++ b/mi/miinitext.c
@@ -413,8 +413,8 @@ static ExtensionModule staticExtensions[] = {
     {ResExtensionInit, XRES_NAME, &noResExtension, NULL},
 #endif
 #ifdef XV
-    {XvExtensionInit, XvName, &noXvExtension, XvRegister},
-    {XvMCExtensionInit, XvMCName, &noXvExtension, XvMCRegister},
+    {XvExtensionInit, XvName, &noXvExtension, NULL},
+    {XvMCExtensionInit, XvMCName, &noXvExtension, NULL},
 #endif
 };
 
commit 2e6c5f959153cdcea4bcf719621ebec408250f54
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:03:07 2012 +0100

    XFree86: sdksyms: Remove unused -DXorgLoader
    
    We no longer have anything in the tree that checks for XorgLoader.  This
    was a fairly monumental hack: xvdi.h used to hide all its functions
    behind #ifndef XorgLoader, solely to avoid sdksyms.sh picking up its
    symbols, as it was previously a module rather than built-in.
    
    This is no longer the case, so we can remove the define.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/sdksyms.sh b/hw/xfree86/sdksyms.sh
index 6d8a4d3..2959457 100755
--- a/hw/xfree86/sdksyms.sh
+++ b/hw/xfree86/sdksyms.sh
@@ -324,8 +324,8 @@ topdir=$1
 shift
 LC_ALL=C
 export LC_ALL
-${CPP:-cpp} "$@" -DXorgLoader sdksyms.c > /dev/null || exit $?
-${CPP:-cpp} "$@" -DXorgLoader sdksyms.c | ${AWK:-awk} -v topdir=$topdir '
+${CPP:-cpp} "$@" sdksyms.c > /dev/null || exit $?
+${CPP:-cpp} "$@" sdksyms.c | ${AWK:-awk} -v topdir=$topdir '
 BEGIN {
     sdk = 0;
     print("/*");
commit 7a11b817e770cd2196814f1ac6264c6d87b76c6a
Author: Tomas Carnecky <tom at dbservice.com>
Date:   Tue Jul 10 02:03:06 2012 +0100

    Move Xv and XvMC from extmod to built-in
    
    Always build these extensions into the core server, rather than letting
    them languish in extmod.
    
    Signed-off-by: Tomas Carnecky <tom at dbservice.com>
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Jamey Sharp <jamey at minilop.net>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/Xext/Makefile.am b/Xext/Makefile.am
index 5837be0..98e9917 100644
--- a/Xext/Makefile.am
+++ b/Xext/Makefile.am
@@ -46,7 +46,7 @@ endif
 # XVideo extension
 XV_SRCS = xvmain.c xvdisp.c xvmc.c xvdix.h xvmcext.h xvdisp.h
 if XV
-MODULE_SRCS  += $(XV_SRCS)
+BUILTIN_SRCS  += $(XV_SRCS)
 endif
 
 # XResource extension: lets clients get data about per-client resource usage
diff --git a/Xext/xvdix.h b/Xext/xvdix.h
index fdf33d3..fc8eb0f 100644
--- a/Xext/xvdix.h
+++ b/Xext/xvdix.h
@@ -55,7 +55,6 @@ SOFTWARE.
 #include "scrnintstr.h"
 #include <X11/extensions/Xvproto.h>
 
-#ifndef XorgLoader
 extern _X_EXPORT unsigned long XvExtensionGeneration;
 extern _X_EXPORT unsigned long XvScreenGeneration;
 extern _X_EXPORT unsigned long XvResourceGeneration;
@@ -70,7 +69,10 @@ extern _X_EXPORT RESTYPE XvRTGrab;
 extern _X_EXPORT RESTYPE XvRTVideoNotify;
 extern _X_EXPORT RESTYPE XvRTVideoNotifyList;
 extern _X_EXPORT RESTYPE XvRTPortNotify;
-#endif
+
+extern DevPrivateKey (*XvGetScreenKeyProc)(void);
+extern unsigned long (*XvGetRTPortProc)(void);
+extern int (*XvScreenInitProc)(ScreenPtr);
 
 typedef struct {
     int numerator;
@@ -231,7 +233,6 @@ typedef struct {
 #define _XvBadPort (XvBadPort+XvErrorBase)
 #define _XvBadEncoding (XvBadEncoding+XvErrorBase)
 
-#ifndef XorgLoader
 extern _X_EXPORT int ProcXvDispatch(ClientPtr);
 extern _X_EXPORT int SProcXvDispatch(ClientPtr);
 
@@ -267,6 +268,4 @@ extern _X_EXPORT int XvdiPreemptVideo(ClientPtr, XvPortPtr, DrawablePtr);
 extern _X_EXPORT int XvdiMatchPort(XvPortPtr, DrawablePtr);
 extern _X_EXPORT int XvdiGrabPort(ClientPtr, XvPortPtr, Time, int *);
 extern _X_EXPORT int XvdiUngrabPort(ClientPtr, XvPortPtr, Time);
-#endif                          /* XorgLoader */
-
 #endif                          /* XVDIX_H */
diff --git a/Xext/xvmain.c b/Xext/xvmain.c
index c2860b8..77c4156 100644
--- a/Xext/xvmain.c
+++ b/Xext/xvmain.c
@@ -194,6 +194,18 @@ XvExtensionInit(void)
     }
 }
 
+DevPrivateKey (*XvGetScreenKeyProc)(void) = NULL;
+unsigned long (*XvGetRTPortProc)(void) = NULL;
+int (*XvScreenInitProc)(ScreenPtr) = NULL;
+
+void
+XvRegister(void)
+{
+    XvScreenInitProc = XvScreenInit;
+    XvGetScreenKeyProc = XvGetScreenKey;
+    XvGetRTPortProc = XvGetRTPort;
+}
+
 static Bool
 CreateResourceTypes(void)
 {
diff --git a/Xext/xvmc.c b/Xext/xvmc.c
index 808691c..910adf4 100644
--- a/Xext/xvmc.c
+++ b/Xext/xvmc.c
@@ -46,6 +46,8 @@ static RESTYPE XvMCRTContext;
 static RESTYPE XvMCRTSurface;
 static RESTYPE XvMCRTSubpicture;
 
+int (*XvMCScreenInitProc)(ScreenPtr, int, XvMCAdaptorPtr) = NULL;
+
 typedef struct {
     int num_adaptors;
     XvMCAdaptorPtr adaptors;
@@ -762,6 +764,12 @@ XvMCScreenInit(ScreenPtr pScreen, int num, XvMCAdaptorPtr pAdapt)
     return Success;
 }
 
+void
+XvMCRegister(void)
+{
+    XvMCScreenInitProc = XvMCScreenInit;
+}
+
 XvImagePtr
 XvMCFindXvImage(XvPortPtr pPort, CARD32 id)
 {
diff --git a/Xext/xvmcext.h b/Xext/xvmcext.h
index d78171d..2201d7b 100644
--- a/Xext/xvmcext.h
+++ b/Xext/xvmcext.h
@@ -84,7 +84,8 @@ typedef struct {
     XvMCDestroySubpictureProcPtr DestroySubpicture;
 } XvMCAdaptorRec, *XvMCAdaptorPtr;
 
-#ifndef XorgLoader
+extern int (*XvMCScreenInitProc)(ScreenPtr, int, XvMCAdaptorPtr);
+
 extern _X_EXPORT int XvMCScreenInit(ScreenPtr pScreen,
                                     int num, XvMCAdaptorPtr adapt);
 
@@ -93,6 +94,5 @@ extern _X_EXPORT XvImagePtr XvMCFindXvImage(XvPortPtr pPort, CARD32 id);
 extern _X_EXPORT int xf86XvMCRegisterDRInfo(ScreenPtr pScreen, char *name,
                                             char *busID, int major, int minor,
                                             int patchLevel);
-#endif
 
 #endif                          /* _XVMC_H */
diff --git a/hw/kdrive/src/kxv.c b/hw/kdrive/src/kxv.c
index b02dd88..b7afb2e 100644
--- a/hw/kdrive/src/kxv.c
+++ b/hw/kdrive/src/kxv.c
@@ -107,10 +107,6 @@ static DevPrivateKey KdXvScreenKey;
 static unsigned long KdXVGeneration = 0;
 static unsigned long PortResource = 0;
 
-DevPrivateKey (*XvGetScreenKeyProc) (void) = XvGetScreenKey;
-unsigned long (*XvGetRTPortProc) (void) = XvGetRTPort;
-int (*XvScreenInitProc) (ScreenPtr) = XvScreenInit;
-
 #define GET_XV_SCREEN(pScreen) ((XvScreenPtr) \
     dixLookupPrivate(&(pScreen)->devPrivates, KdXvScreenKey))
 
diff --git a/hw/xfree86/common/xf86xv.c b/hw/xfree86/common/xf86xv.c
index 1a964d2..0e50f37 100644
--- a/hw/xfree86/common/xf86xv.c
+++ b/hw/xfree86/common/xf86xv.c
@@ -117,10 +117,6 @@ DevPrivateKey XF86XvScreenKey;
 
 static unsigned long PortResource = 0;
 
-DevPrivateKey (*XvGetScreenKeyProc) (void) = NULL;
-unsigned long (*XvGetRTPortProc) (void) = NULL;
-int (*XvScreenInitProc) (ScreenPtr) = NULL;
-
 #define GET_XV_SCREEN(pScreen) \
     ((XvScreenPtr)dixLookupPrivate(&(pScreen)->devPrivates, XF86XvScreenKey))
 
diff --git a/hw/xfree86/common/xf86xv.h b/hw/xfree86/common/xf86xv.h
index 2db00a8..091efca 100644
--- a/hw/xfree86/common/xf86xv.h
+++ b/hw/xfree86/common/xf86xv.h
@@ -263,8 +263,4 @@ extern _X_EXPORT void
 xf86XVCopyPacked(const void *src,
                  void *dst, int srcPitch, int dstPitch, int h, int w);
 
-extern _X_EXPORT DevPrivateKey (*XvGetScreenKeyProc) (void);
-extern _X_EXPORT unsigned long (*XvGetRTPortProc) (void);
-extern _X_EXPORT int (*XvScreenInitProc) (ScreenPtr);
-
 #endif                          /* _XF86XV_H_ */
diff --git a/hw/xfree86/common/xf86xvmc.c b/hw/xfree86/common/xf86xvmc.c
index 2e529dd..dc6b395 100644
--- a/hw/xfree86/common/xf86xvmc.c
+++ b/hw/xfree86/common/xf86xvmc.c
@@ -43,8 +43,6 @@
 #include "xf86xvpriv.h"
 #include "xf86xvmc.h"
 
-XvMCScreenInitProcPtr XvMCScreenInitProc = NULL;
-
 typedef struct {
     CloseScreenProcPtr CloseScreen;
     int num_adaptors;
diff --git a/hw/xfree86/dixmods/extmod/Makefile.am b/hw/xfree86/dixmods/extmod/Makefile.am
index cdbd82e..8436cb3 100644
--- a/hw/xfree86/dixmods/extmod/Makefile.am
+++ b/hw/xfree86/dixmods/extmod/Makefile.am
@@ -7,10 +7,6 @@ if DGA
 DGA_SRCS = xf86dga2.c dgaproc.h
 endif
 
-if XV
-XV_SRCS = xvmod.c xvmodproc.h
-endif
-
 if XF86VIDMODE
 XF86VMODE_SRCS = xf86vmode.c
 endif
@@ -24,6 +20,5 @@ INCLUDES = @XORG_INCS@ \
 libextmod_la_LDFLAGS = -module -avoid-version $(LD_NO_UNDEFINED_FLAG)
 libextmod_la_SOURCES = modinit.c \
                        $(DGA_SRCS) \
-                       $(XF86VMODE_SRCS) \
-                       $(XV_SRCS)
+                       $(XF86VMODE_SRCS)
 libextmod_la_LIBADD = $(top_builddir)/Xext/libXextmodule.la
diff --git a/hw/xfree86/dixmods/extmod/modinit.c b/hw/xfree86/dixmods/extmod/modinit.c
index 3c69332..f8832fd 100644
--- a/hw/xfree86/dixmods/extmod/modinit.c
+++ b/hw/xfree86/dixmods/extmod/modinit.c
@@ -63,20 +63,6 @@ static ExtensionModule extensionModules[] = {
      XFree86DGARegister,
      NULL},
 #endif
-#ifdef XV
-    {
-     XvExtensionInit,
-     XvName,
-     &noXvExtension,
-     XvRegister,
-     NULL},
-    {
-     XvMCExtensionInit,
-     XvMCName,
-     &noXvExtension,
-     NULL,
-     NULL},
-#endif
 };
 
 static XF86ModuleVersionInfo VersRec = {
diff --git a/hw/xfree86/dixmods/extmod/xvmod.c b/hw/xfree86/dixmods/extmod/xvmod.c
deleted file mode 100644
index 97616c7..0000000
--- a/hw/xfree86/dixmods/extmod/xvmod.c
+++ /dev/null
@@ -1,22 +0,0 @@
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include <X11/X.h>
-#include "misc.h"
-#include "scrnintstr.h"
-#include "gc.h"
-#include <X11/extensions/Xv.h>
-#include <X11/extensions/Xvproto.h>
-#include "xvdix.h"
-#include "xvmodproc.h"
-
-void
-XvRegister(void)
-{
-    XvScreenInitProc = XvScreenInit;
-    XvGetScreenKeyProc = XvGetScreenKey;
-    XvGetRTPortProc = XvGetRTPort;
-    XvMCScreenInitProc = XvMCScreenInit;
-}
diff --git a/hw/xfree86/dixmods/extmod/xvmodproc.h b/hw/xfree86/dixmods/extmod/xvmodproc.h
deleted file mode 100644
index 0090547..0000000
--- a/hw/xfree86/dixmods/extmod/xvmodproc.h
+++ /dev/null
@@ -1,17 +0,0 @@
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#ifndef XVMODPROC_H
-#define XVMODPROC_H
-#include "xvmcext.h"
-
-extern DevPrivateKey (*XvGetScreenKeyProc) (void);
-extern unsigned long (*XvGetRTPortProc) (void);
-extern int (*XvScreenInitProc) (ScreenPtr);
-extern int (*XvMCScreenInitProc) (ScreenPtr, int, XvMCAdaptorPtr);
-
-extern void XvRegister(void);
-
-#endif /* XVMODPROC_H */
diff --git a/hw/xfree86/sdksyms.sh b/hw/xfree86/sdksyms.sh
index ab48fcf..6d8a4d3 100755
--- a/hw/xfree86/sdksyms.sh
+++ b/hw/xfree86/sdksyms.sh
@@ -46,10 +46,8 @@ cat > sdksyms.c << EOF
 #include "misyncstr.h"
 
 /* Xext/Makefile.am -- half is module, half is builtin */
-/*
 #include "xvdix.h"
 #include "xvmcext.h"
- */
 #include "geext.h"
 #include "geint.h"
 #ifdef MITSHM
diff --git a/include/extinit.h b/include/extinit.h
index 589db1f..a8c2539 100644
--- a/include/extinit.h
+++ b/include/extinit.h
@@ -175,13 +175,14 @@ extern Bool noPseudoramiXExtension;
 extern void PseudoramiXExtensionInit(void);
 #endif
 
-#if defined(XV) && !defined(XorgLoader)
+#if defined(XV)
 #include <X11/extensions/Xv.h>
 #include <X11/extensions/XvMC.h>
 extern Bool noXvExtension;
 extern void XvExtensionInit(void);
 extern void XvMCExtensionInit(void);
 extern void XvRegister(void);
+extern void XvMCRegister(void);
 #endif
 
 #endif
diff --git a/mi/miinitext.c b/mi/miinitext.c
index 53e5dda..a83df60 100644
--- a/mi/miinitext.c
+++ b/mi/miinitext.c
@@ -412,6 +412,10 @@ static ExtensionModule staticExtensions[] = {
 #ifdef RES
     {ResExtensionInit, XRES_NAME, &noResExtension, NULL},
 #endif
+#ifdef XV
+    {XvExtensionInit, XvName, &noXvExtension, XvRegister},
+    {XvMCExtensionInit, XvMCName, &noXvExtension, XvMCRegister},
+#endif
 };
 
  /*ARGSUSED*/ void
commit 7d859bd87834dd79c7fa3792075496ece698c082
Author: Tomas Carnecky <tom at dbservice.com>
Date:   Tue Jul 10 02:03:05 2012 +0100

    Move XRes from extmod to built-in
    
    Always build XRes support into the core server, rather than letting it
    languish in extmod.
    
    Signed-off-by: Tomas Carnecky <tom at dbservice.com>
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Jamey Sharp <jamey at minilop.net>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/Xext/Makefile.am b/Xext/Makefile.am
index 15cbdab..5837be0 100644
--- a/Xext/Makefile.am
+++ b/Xext/Makefile.am
@@ -52,7 +52,7 @@ endif
 # XResource extension: lets clients get data about per-client resource usage
 RES_SRCS = hashtable.c hashtable.h xres.c
 if RES
-MODULE_SRCS  += $(RES_SRCS)
+BUILTIN_SRCS  += $(RES_SRCS)
 endif
 
 # MIT ScreenSaver extension
diff --git a/Xext/xres.c b/Xext/xres.c
index 445abca..7d21ad7 100644
--- a/Xext/xres.c
+++ b/Xext/xres.c
@@ -190,6 +190,8 @@ DestroyConstructResourceBytesCtx(ConstructResourceBytesCtx *ctx)
     ht_destroy(ctx->visitedResources);
 }
 
+extern void ResExtensionInit(void);
+
 static int
 ProcXResQueryVersion(ClientPtr client)
 {
diff --git a/hw/xfree86/dixmods/extmod/modinit.c b/hw/xfree86/dixmods/extmod/modinit.c
index bb120a2..3c69332 100644
--- a/hw/xfree86/dixmods/extmod/modinit.c
+++ b/hw/xfree86/dixmods/extmod/modinit.c
@@ -77,14 +77,6 @@ static ExtensionModule extensionModules[] = {
      NULL,
      NULL},
 #endif
-#ifdef RES
-    {
-     ResExtensionInit,
-     XRES_NAME,
-     &noResExtension,
-     NULL,
-     NULL},
-#endif
 };
 
 static XF86ModuleVersionInfo VersRec = {
diff --git a/include/extinit.h b/include/extinit.h
index 4d8aef5..589db1f 100644
--- a/include/extinit.h
+++ b/include/extinit.h
@@ -104,7 +104,7 @@ extern void RecordExtensionInit(void);
 extern Bool noRenderExtension;
 extern void RenderExtensionInit(void);
 
-#if defined(RES) && !defined(XorgLoader)
+#if defined(RES)
 #include <X11/extensions/XResproto.h>
 extern Bool noResExtension;
 extern void ResExtensionInit(void);
diff --git a/mi/miinitext.c b/mi/miinitext.c
index 6aee7c1..53e5dda 100644
--- a/mi/miinitext.c
+++ b/mi/miinitext.c
@@ -409,6 +409,9 @@ static ExtensionModule staticExtensions[] = {
 #ifdef DPMSExtension
     {DPMSExtensionInit, DPMSExtensionName, &noDPMSExtension, NULL},
 #endif
+#ifdef RES
+    {ResExtensionInit, XRES_NAME, &noResExtension, NULL},
+#endif
 };
 
  /*ARGSUSED*/ void
commit ba21fc29587e4f11320b88a70433beb1fe22cdf3
Author: Tomas Carnecky <tom at dbservice.com>
Date:   Tue Jul 10 02:03:04 2012 +0100

    Move DPMS from extmod to built-in
    
    Always build DPMS support into the core server, rather than letting it
    languish in extmod.
    
    Signed-off-by: Tomas Carnecky <tom at dbservice.com>
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Jamey Sharp <jamey at minilop.net>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/Xext/Makefile.am b/Xext/Makefile.am
index 4f91254..15cbdab 100644
--- a/Xext/Makefile.am
+++ b/Xext/Makefile.am
@@ -103,7 +103,7 @@ endif
 # DPMS extension
 DPMS_SRCS = dpms.c dpmsproc.h
 if DPMSExtension
-MODULE_SRCS += $(DPMS_SRCS)
+BUILTIN_SRCS += $(DPMS_SRCS)
 endif
 
 # Now take all of the above, mix well, bake for 10 minutes and get libXext*.la
diff --git a/hw/xfree86/dixmods/extmod/modinit.c b/hw/xfree86/dixmods/extmod/modinit.c
index 660b1cd..bb120a2 100644
--- a/hw/xfree86/dixmods/extmod/modinit.c
+++ b/hw/xfree86/dixmods/extmod/modinit.c
@@ -63,14 +63,6 @@ static ExtensionModule extensionModules[] = {
      XFree86DGARegister,
      NULL},
 #endif
-#ifdef DPMSExtension
-    {
-     DPMSExtensionInit,
-     DPMSExtensionName,
-     &noDPMSExtension,
-     NULL,
-     NULL},
-#endif
 #ifdef XV
     {
      XvExtensionInit,
diff --git a/include/extinit.h b/include/extinit.h
index 61768b0..4d8aef5 100644
--- a/include/extinit.h
+++ b/include/extinit.h
@@ -72,7 +72,7 @@ extern void DbeExtensionInit(void);
 extern void DMXExtensionInit(void);
 #endif
 
-#if defined(DPMSExtension) && !defined(XorgLoader)
+#if defined(DPMSExtension)
 #include <X11/extensions/dpmsconst.h>
 extern Bool noDPMSExtension;
 extern void DPMSExtensionInit(void);
diff --git a/mi/miinitext.c b/mi/miinitext.c
index 0b4a4cf..6aee7c1 100644
--- a/mi/miinitext.c
+++ b/mi/miinitext.c
@@ -406,6 +406,9 @@ static ExtensionModule staticExtensions[] = {
 #ifdef XRECORD
     {RecordExtensionInit, "RECORD", &noTestExtensions, NULL},
 #endif
+#ifdef DPMSExtension
+    {DPMSExtensionInit, DPMSExtensionName, &noDPMSExtension, NULL},
+#endif
 };
 
  /*ARGSUSED*/ void
commit 3ed2c6e11298c4299042cfe4578f6cc02e441d58
Author: Tomas Carnecky <tom at dbservice.com>
Date:   Tue Jul 10 02:03:03 2012 +0100

    Move MIT-SCREEN-SAVER from extmod to built-in
    
    If we've built MIT-SCREEN-SAVER support, then just build it into the
    main binary, rather than leaving it in extmod.
    
    Signed-off-by: Tomas Carnecky <tom at dbservice.com>
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Jamey Sharp <jamey at minilop.net>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/Xext/Makefile.am b/Xext/Makefile.am
index 4082de7..4f91254 100644
--- a/Xext/Makefile.am
+++ b/Xext/Makefile.am
@@ -58,7 +58,7 @@ endif
 # MIT ScreenSaver extension
 SCREENSAVER_SRCS = saver.c
 if SCREENSAVER
-MODULE_SRCS  += $(SCREENSAVER_SRCS)
+BUILTIN_SRCS  += $(SCREENSAVER_SRCS)
 endif
 
 # Xinerama extension: making multiple video devices act as one virtual screen
diff --git a/hw/xfree86/dixmods/extmod/modinit.c b/hw/xfree86/dixmods/extmod/modinit.c
index 009852c..660b1cd 100644
--- a/hw/xfree86/dixmods/extmod/modinit.c
+++ b/hw/xfree86/dixmods/extmod/modinit.c
@@ -47,14 +47,6 @@ static ExtensionModule extensionModules[] = {
      NULL,
      NULL},
 #endif
-#ifdef SCREENSAVER
-    {
-     ScreenSaverExtensionInit,
-     ScreenSaverName,
-     &noScreenSaverExtension,
-     NULL,
-     NULL},
-#endif
 #ifdef XF86VIDMODE
     {
      XFree86VidModeExtensionInit,
diff --git a/include/extinit.h b/include/extinit.h
index 2755e30..61768b0 100644
--- a/include/extinit.h
+++ b/include/extinit.h
@@ -110,7 +110,7 @@ extern Bool noResExtension;
 extern void ResExtensionInit(void);
 #endif
 
-#if defined(SCREENSAVER) && !defined(XorgLoader)
+#if defined(SCREENSAVER)
 #include <X11/extensions/saver.h>
 extern Bool noScreenSaverExtension;
 extern void ScreenSaverExtensionInit(void);
diff --git a/mi/miinitext.c b/mi/miinitext.c
index 9c93fc5..0b4a4cf 100644
--- a/mi/miinitext.c
+++ b/mi/miinitext.c
@@ -397,6 +397,9 @@ static ExtensionModule staticExtensions[] = {
 #ifdef DAMAGE
     {DamageExtensionInit, "DAMAGE", &noDamageExtension, NULL},
 #endif
+#ifdef SCREENSAVER
+    {ScreenSaverExtensionInit, ScreenSaverName, &noScreenSaverExtension, NULL},
+#endif
 #ifdef DBE
     {DbeExtensionInit, "DOUBLE-BUFFER", &noDbeExtension, NULL},
 #endif
commit b8c9ab0fea0be299d9f48ac0c4ed0474104a7556
Author: Tomas Carnecky <tom at dbservice.com>
Date:   Tue Jul 10 02:03:02 2012 +0100

    Move RECORD from external module to built-in
    
    Rather than languishing in its own special module, move RECORD into the
    core server.
    
    Signed-off-by: Tomas Carnecky <tom at dbservice.com>
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Jamey Sharp <jamey at minilop.net>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/configure.ac b/configure.ac
index 13628f5..fc5e2d9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1605,7 +1605,7 @@ if test "x$XORG" = xyes; then
 	XORG_OSINCS='-I$(top_srcdir)/hw/xfree86/os-support -I$(top_srcdir)/hw/xfree86/os-support/bus -I$(top_srcdir)/os'
 	XORG_INCS="$XORG_DDXINCS $XORG_OSINCS"
 	XORG_CFLAGS="$XORGSERVER_CFLAGS -DHAVE_XORG_CONFIG_H"
-	XORG_LIBS="$COMPOSITE_LIB $FIXES_LIB $XEXTXORG_LIB $DBE_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_SYNC_LIB $MIEXT_DAMAGE_LIB $XI_LIB $XKB_LIB"
+	XORG_LIBS="$COMPOSITE_LIB $FIXES_LIB $XEXTXORG_LIB $DBE_LIB $RECORD_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_SYNC_LIB $MIEXT_DAMAGE_LIB $XI_LIB $XKB_LIB"
 
 	dnl ==================================================================
 	dnl symbol visibility
diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
index ce2c10a..7b68e35 100644
--- a/hw/xfree86/common/xf86Config.c
+++ b/hw/xfree86/common/xf86Config.c
@@ -113,9 +113,6 @@ static ModuleDefault ModuleDefaults[] = {
 #ifdef GLXEXT
     {.name = "glx",.toLoad = TRUE,.load_opt = NULL},
 #endif
-#ifdef XRECORD
-    {.name = "record",.toLoad = TRUE,.load_opt = NULL},
-#endif
 #ifdef XF86DRI
     {.name = "dri",.toLoad = TRUE,.load_opt = NULL},
 #endif
diff --git a/hw/xfree86/dixmods/Makefile.am b/hw/xfree86/dixmods/Makefile.am
index 827b952..3aa7d27 100644
--- a/hw/xfree86/dixmods/Makefile.am
+++ b/hw/xfree86/dixmods/Makefile.am
@@ -6,17 +6,12 @@ if GLX
 GLXMODS = libglx.la
 endif
 
-if RECORD
-RECORDMOD = librecord.la
-endif
-
 module_LTLIBRARIES = libfb.la \
                      libwfb.la \
                      libshadow.la
 
 extsmoduledir = $(moduledir)/extensions
-extsmodule_LTLIBRARIES = $(RECORDMOD) \
-                         $(GLXMODS)
+extsmodule_LTLIBRARIES = $(GLXMODS)
 
 AM_CFLAGS = @XORG_CFLAGS@ @DIX_CFLAGS@
 INCLUDES = @XORG_INCS@ \
@@ -44,10 +39,6 @@ endif
 endif
 libglx_la_SOURCES = glxmodule.c
 
-librecord_la_LDFLAGS = -module -avoid-version $(LD_NO_UNDEFINED_FLAG)
-librecord_la_LIBADD = $(top_builddir)/record/librecord.la
-librecord_la_SOURCES = recordmod.c
-
 libshadow_la_LDFLAGS = -module -avoid-version $(LD_NO_UNDEFINED_FLAG)
 libshadow_la_LIBADD = $(top_builddir)/miext/shadow/libshadow.la
 if NO_UNDEFINED
diff --git a/hw/xfree86/dixmods/recordmod.c b/hw/xfree86/dixmods/recordmod.c
deleted file mode 100644
index 4f8eb97..0000000
--- a/hw/xfree86/dixmods/recordmod.c
+++ /dev/null
@@ -1,42 +0,0 @@
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include "xf86Module.h"
-#include "extinit.h"
-
-extern Bool noTestExtensions;
-
-static MODULESETUPPROTO(recordSetup);
-
-static ExtensionModule recordExt = {
-    RecordExtensionInit,
-    "RECORD",
-    &noTestExtensions,
-    NULL,
-    NULL
-};
-
-static XF86ModuleVersionInfo VersRec = {
-    "record",
-    MODULEVENDORSTRING,
-    MODINFOSTRING1,
-    MODINFOSTRING2,
-    XORG_VERSION_CURRENT,
-    1, 13, 0,
-    ABI_CLASS_EXTENSION,
-    ABI_EXTENSION_VERSION,
-    MOD_CLASS_EXTENSION,
-    {0, 0, 0, 0}
-};
-
-_X_EXPORT XF86ModuleData recordModuleData = { &VersRec, recordSetup, NULL };
-
-static pointer
-recordSetup(pointer module, pointer opts, int *errmaj, int *errmin)
-{
-    LoadExtension(&recordExt, FALSE);
-
-    /* Need a non-NULL return value to indicate success */
-    return (pointer) 1;
-}
diff --git a/hw/xfree86/loader/loadmod.c b/hw/xfree86/loader/loadmod.c
index 99f06c2..9ce5813 100644
--- a/hw/xfree86/loader/loadmod.c
+++ b/hw/xfree86/loader/loadmod.c
@@ -834,6 +834,7 @@ static const char *compiled_in_modules[] = {
     "i2c",
     "ramdac",
     "dbe",
+    "record",
     NULL
 };
 
diff --git a/include/extinit.h b/include/extinit.h
index 539e28d..2755e30 100644
--- a/include/extinit.h
+++ b/include/extinit.h
@@ -97,7 +97,7 @@ extern Bool noRRExtension;
 extern void RRExtensionInit(void);
 #endif
 
-#if defined(XRECORD) && !defined(XorgLoader)
+#if defined(XRECORD)
 extern void RecordExtensionInit(void);
 #endif
 
diff --git a/mi/miinitext.c b/mi/miinitext.c
index 6c1a055..9c93fc5 100644
--- a/mi/miinitext.c
+++ b/mi/miinitext.c
@@ -400,6 +400,9 @@ static ExtensionModule staticExtensions[] = {
 #ifdef DBE
     {DbeExtensionInit, "DOUBLE-BUFFER", &noDbeExtension, NULL},
 #endif
+#ifdef XRECORD
+    {RecordExtensionInit, "RECORD", &noTestExtensions, NULL},
+#endif
 };
 
  /*ARGSUSED*/ void
commit bf61bf69b2b4f9e9993ca771de100079c7696bea
Author: Tomas Carnecky <tom at dbservice.com>
Date:   Tue Jul 10 02:03:01 2012 +0100

    Move DBE from an external module to built-in
    
    If DBE support is compiled in the server, just man up and build it into
    the server, rather than having it as an external module.
    
    Signed-off-by: Tomas Carnecky <tom at dbservice.com>
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Jamey Sharp <jamey at minilop.net>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/configure.ac b/configure.ac
index 74e7e9a..13628f5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1173,6 +1173,7 @@ AM_CONDITIONAL(DBE, [test "x$DBE" = xyes])
 if test "x$DBE" = xyes; then
 	AC_DEFINE(DBE, 1, [Support DBE extension])
 	DBE_LIB='$(top_builddir)/dbe/libdbe.la'
+	DBE_INC='-I$(top_srcdir)/dbe'
 fi
 
 AM_CONDITIONAL(XF86BIGFONT, [test "x$XF86BIGFONT" = xyes])
@@ -1545,7 +1546,7 @@ AC_EGREP_CPP([I_AM_SVR4],[
 AC_DEFINE([SVR4],1,[Define to 1 on systems derived from System V Release 4])
 AC_MSG_RESULT([yes])], AC_MSG_RESULT([no]))
 
-XSERVER_CFLAGS="$XSERVER_CFLAGS $CORE_INCS $XEXT_INC $COMPOSITE_INC $DAMAGE_INC $FIXES_INC $XI_INC $MI_INC $MIEXT_SYNC_INC $MIEXT_SHADOW_INC $MIEXT_LAYER_INC $MIEXT_DAMAGE_INC $RENDER_INC $RANDR_INC $FB_INC"
+XSERVER_CFLAGS="$XSERVER_CFLAGS $CORE_INCS $XEXT_INC $COMPOSITE_INC $DAMAGE_INC $FIXES_INC $XI_INC $MI_INC $MIEXT_SYNC_INC $MIEXT_SHADOW_INC $MIEXT_LAYER_INC $MIEXT_DAMAGE_INC $RENDER_INC $RANDR_INC $FB_INC $DBE_INC"
 
 dnl ---------------------------------------------------------------------------
 dnl DDX section.
@@ -1604,7 +1605,7 @@ if test "x$XORG" = xyes; then
 	XORG_OSINCS='-I$(top_srcdir)/hw/xfree86/os-support -I$(top_srcdir)/hw/xfree86/os-support/bus -I$(top_srcdir)/os'
 	XORG_INCS="$XORG_DDXINCS $XORG_OSINCS"
 	XORG_CFLAGS="$XORGSERVER_CFLAGS -DHAVE_XORG_CONFIG_H"
-	XORG_LIBS="$COMPOSITE_LIB $FIXES_LIB $XEXTXORG_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_SYNC_LIB $MIEXT_DAMAGE_LIB $XI_LIB $XKB_LIB"
+	XORG_LIBS="$COMPOSITE_LIB $FIXES_LIB $XEXTXORG_LIB $DBE_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_SYNC_LIB $MIEXT_DAMAGE_LIB $XI_LIB $XKB_LIB"
 
 	dnl ==================================================================
 	dnl symbol visibility
diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
index 6b806a3..ce2c10a 100644
--- a/hw/xfree86/common/xf86Config.c
+++ b/hw/xfree86/common/xf86Config.c
@@ -110,9 +110,6 @@
 
 static ModuleDefault ModuleDefaults[] = {
     {.name = "extmod",.toLoad = TRUE,.load_opt = NULL},
-#ifdef DBE
-    {.name = "dbe",.toLoad = TRUE,.load_opt = NULL},
-#endif
 #ifdef GLXEXT
     {.name = "glx",.toLoad = TRUE,.load_opt = NULL},
 #endif
diff --git a/hw/xfree86/dixmods/Makefile.am b/hw/xfree86/dixmods/Makefile.am
index 6f4af6c..827b952 100644
--- a/hw/xfree86/dixmods/Makefile.am
+++ b/hw/xfree86/dixmods/Makefile.am
@@ -6,10 +6,6 @@ if GLX
 GLXMODS = libglx.la
 endif
 
-if DBE
-DBEMOD = libdbe.la
-endif
-
 if RECORD
 RECORDMOD = librecord.la
 endif
@@ -20,20 +16,14 @@ module_LTLIBRARIES = libfb.la \
 
 extsmoduledir = $(moduledir)/extensions
 extsmodule_LTLIBRARIES = $(RECORDMOD) \
-			 $(DBEMOD) \
                          $(GLXMODS)
 
 AM_CFLAGS = @XORG_CFLAGS@ @DIX_CFLAGS@
 INCLUDES = @XORG_INCS@ \
-           -I$(top_srcdir)/dbe \
            -I$(top_srcdir)/hw/xfree86/loader \
            -I$(top_srcdir)/miext/shadow \
            -I$(top_srcdir)/glx
 
-libdbe_la_LDFLAGS = -module -avoid-version $(LD_NO_UNDEFINED_FLAG)
-libdbe_la_LIBADD = $(top_builddir)/dbe/libdbe.la
-libdbe_la_SOURCES = dbemodule.c
-
 libfb_la_LDFLAGS = -module -avoid-version $(LD_NO_UNDEFINED_FLAG)
 libfb_la_LIBADD = $(top_builddir)/fb/libfb.la
 libfb_la_SOURCES = $(top_builddir)/fb/fbcmap_mi.c fbmodule.c
diff --git a/hw/xfree86/dixmods/dbemodule.c b/hw/xfree86/dixmods/dbemodule.c
deleted file mode 100644
index fb37053..0000000
--- a/hw/xfree86/dixmods/dbemodule.c
+++ /dev/null
@@ -1,44 +0,0 @@
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include "xf86Module.h"
-#include "globals.h"
-#include "extinit.h"
-
-static MODULESETUPPROTO(dbeSetup);
-
-static ExtensionModule dbeExt = {
-    DbeExtensionInit,
-    "DOUBLE-BUFFER",
-    &noDbeExtension,
-    NULL,
-    NULL
-};
-
-static XF86ModuleVersionInfo VersRec = {
-    "dbe",
-    MODULEVENDORSTRING,
-    MODINFOSTRING1,
-    MODINFOSTRING2,
-    XORG_VERSION_CURRENT,
-    1, 0, 0,
-    ABI_CLASS_EXTENSION,
-    ABI_EXTENSION_VERSION,
-    MOD_CLASS_EXTENSION,
-    {0, 0, 0, 0}
-};
-
-/*
- * Data for the loader
- */
-_X_EXPORT XF86ModuleData dbeModuleData = { &VersRec, dbeSetup, NULL };
-
-static pointer
-dbeSetup(pointer module, pointer opts, int *errmaj, int *errmin)
-{
-    LoadExtension(&dbeExt, FALSE);
-
-    /* Need a non-NULL return value to indicate success */
-    return (pointer) 1;
-}
diff --git a/hw/xfree86/loader/loadmod.c b/hw/xfree86/loader/loadmod.c
index e7e60dd..99f06c2 100644
--- a/hw/xfree86/loader/loadmod.c
+++ b/hw/xfree86/loader/loadmod.c
@@ -833,6 +833,7 @@ static const char *compiled_in_modules[] = {
     "ddc",
     "i2c",
     "ramdac",
+    "dbe",
     NULL
 };
 
diff --git a/hw/xfree86/sdksyms.sh b/hw/xfree86/sdksyms.sh
index 81dbbe2..ab48fcf 100755
--- a/hw/xfree86/sdksyms.sh
+++ b/hw/xfree86/sdksyms.sh
@@ -241,9 +241,9 @@ cat > sdksyms.c << EOF
 
 
 /* dbe/Makefile.am -- module */
-/*
+#ifdef DBE
 #include "dbestruct.h"
- */
+#endif
 
 
 /* exa/Makefile.am -- module */
diff --git a/include/extinit.h b/include/extinit.h
index 5e01128..539e28d 100644
--- a/include/extinit.h
+++ b/include/extinit.h
@@ -63,7 +63,7 @@ extern Bool noDamageExtension;
 extern void DamageExtensionInit(void);
 #endif
 
-#if defined(DBE) && !defined(XorgLoader)
+#if defined(DBE)
 extern Bool noDbeExtension;
 extern void DbeExtensionInit(void);
 #endif
diff --git a/mi/miinitext.c b/mi/miinitext.c
index 7b5eef6..6c1a055 100644
--- a/mi/miinitext.c
+++ b/mi/miinitext.c
@@ -397,6 +397,9 @@ static ExtensionModule staticExtensions[] = {
 #ifdef DAMAGE
     {DamageExtensionInit, "DAMAGE", &noDamageExtension, NULL},
 #endif
+#ifdef DBE
+    {DbeExtensionInit, "DOUBLE-BUFFER", &noDbeExtension, NULL},
+#endif
 };
 
  /*ARGSUSED*/ void
commit d785368e0e171080fea5447c87e81c93f515ff21
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:03:00 2012 +0100

    miinitext: Use ARRAY_SIZE rather than sentinel
    
    NULL sentinels are totally lame.
    
    v2: numExtensionModules isn't public, so keep using the provided
        sentinal - Keith Packard <keithp at keithp.com>
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Stéphane Marchesin <stephane.marchesin at gmail.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/mi/miinitext.c b/mi/miinitext.c
index ef20a11..7b5eef6 100644
--- a/mi/miinitext.c
+++ b/mi/miinitext.c
@@ -172,15 +172,16 @@ static ExtensionToggle ExtensionToggleList[] = {
 #ifdef XV
     {"XVideo", &noXvExtension},
 #endif
-    {NULL, NULL}
 };
 
 Bool
 EnableDisableExtension(const char *name, Bool enable)
 {
-    ExtensionToggle *ext = &ExtensionToggleList[0];
+    ExtensionToggle *ext;
+    int i;
 
-    for (ext = &ExtensionToggleList[0]; ext->name != NULL; ext++) {
+    for (i = 0; i < ARRAY_SIZE(ExtensionToggleList); i++) {
+        ext = &ExtensionToggleList[i];
         if (strcmp(name, ext->name) == 0) {
             if (ext->disablePtr != NULL) {
                 *ext->disablePtr = !enable;
@@ -396,7 +397,6 @@ static ExtensionModule staticExtensions[] = {
 #ifdef DAMAGE
     {DamageExtensionInit, "DAMAGE", &noDamageExtension, NULL},
 #endif
-    {NULL, NULL, NULL, NULL, NULL}
 };
 
  /*ARGSUSED*/ void
@@ -408,7 +408,7 @@ InitExtensions(int argc, char *argv[])
 
     if (!listInitialised) {
         /* Add built-in extensions to the list. */
-        for (i = 0; staticExtensions[i].name; i++)
+        for (i = 0; i < ARRAY_SIZE(staticExtensions); i++)
             LoadExtension(&staticExtensions[i], TRUE);
 
         /* Sort the extensions according the init dependencies. */
commit f48d8f58b39af0036365368d6ac35319d6d856d5
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:02:59 2012 +0100

    extmod: Use ARRAY_SIZE rather than sentinel
    
    When the array gets down to size zero (which it does in later patches),
    gcc complains that the index is out of bounds.  Avoid this by using
    ARRAY_SIZE on extensionModules instead.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Stéphane Marchesin <stephane.marchesin at gmail.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/dixmods/extmod/modinit.c b/hw/xfree86/dixmods/extmod/modinit.c
index afee27a..009852c 100644
--- a/hw/xfree86/dixmods/extmod/modinit.c
+++ b/hw/xfree86/dixmods/extmod/modinit.c
@@ -101,12 +101,6 @@ static ExtensionModule extensionModules[] = {
      NULL,
      NULL},
 #endif
-    {                           /* DON'T delete this entry ! */
-     NULL,
-     NULL,
-     NULL,
-     NULL,
-     NULL}
 };
 
 static XF86ModuleVersionInfo VersRec = {
@@ -134,7 +128,7 @@ extmodSetup(pointer module, pointer opts, int *errmaj, int *errmin)
 
     /* XXX the option stuff here is largely a sample/test case */
 
-    for (i = 0; extensionModules[i].name != NULL; i++) {
+    for (i = 0; i < ARRAY_SIZE(extensionModules); i++) {
 #ifdef XSELINUX
         if (!strcmp(SELINUX_EXTENSION_NAME, extensionModules[i].name)) {
             pointer o;
commit d35884da2f5a250ff6dd5131dc23ac629eccdd0c
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:02:58 2012 +0100

    Add xf86ExtensionInit for DDX extension configuration
    
    xf86ExtensionInit is called after configuration file parsing, so it can
    perform the two parts of extension initialisation currently done by
    extmod: enabling and disabling of extensions through an 'omit' option,
    and SELinux configuration.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/common/Makefile.am b/hw/xfree86/common/Makefile.am
index 5fbb890..556b9cc 100644
--- a/hw/xfree86/common/Makefile.am
+++ b/hw/xfree86/common/Makefile.am
@@ -46,6 +46,7 @@ libcommon_la_SOURCES = xf86Configure.c xf86Bus.c xf86Config.c \
                       xf86VidMode.c xf86fbman.c xf86cmap.c \
                       xf86Helper.c xf86PM.c xf86Xinput.c xisb.c \
                       xf86Mode.c xorgHelper.c xf86Extensions.h \
+		      xf86Extensions.c \
                       $(XVSOURCES) $(BUSSOURCES) $(RANDRSOURCES)
 nodist_libcommon_la_SOURCES = xf86DefModeSet.c xf86Build.h
 libcommon_la_LIBADD = $(top_builddir)/config/libconfig.la
diff --git a/hw/xfree86/common/xf86.h b/hw/xfree86/common/xf86.h
index 1e122cf..8dc7dcc 100644
--- a/hw/xfree86/common/xf86.h
+++ b/hw/xfree86/common/xf86.h
@@ -449,6 +449,9 @@ xf86RandRSetNewVirtualAndDimensions(ScreenPtr pScreen,
                                     Bool resetMode);
 #endif
 
+/* xf86Extensions.c */
+extern void xf86ExtensionInit(void);
+
 /* convert ScreenPtr to ScrnInfoPtr */
 extern _X_EXPORT ScrnInfoPtr xf86ScreenToScrn(ScreenPtr pScreen);
 /* convert ScrnInfoPtr to ScreenPtr */
diff --git a/hw/xfree86/common/xf86Extensions.c b/hw/xfree86/common/xf86Extensions.c
new file mode 100644
index 0000000..15c96b4
--- /dev/null
+++ b/hw/xfree86/common/xf86Extensions.c
@@ -0,0 +1,82 @@
+/*
+ * Copyright © 2011 Daniel Stone
+ *
+ * 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: Daniel Stone <daniel at fooishbar.org>
+ */
+
+#ifdef HAVE_XORG_CONFIG_H
+#include <xorg-config.h>
+#endif
+
+#include "extension.h"
+#include "globals.h"
+
+#include "xf86.h"
+#include "xf86Config.h"
+#include "xf86Module.h"
+#include "xf86Extensions.h"
+#include "xf86Opt.h"
+#include "optionstr.h"
+
+/*
+ * DDX-specific extensions.
+ */
+static ExtensionModule extensionModules[] = {
+};
+
+static void
+load_extension_config(void)
+{
+    XF86ConfModulePtr mod_con = xf86configptr->conf_modules;
+    XF86LoadPtr modp;
+
+    /* Only the best. */
+    if (!mod_con)
+        return;
+
+    nt_list_for_each_entry(modp, mod_con->mod_load_lst, list.next) {
+        InputOption *opt;
+
+        if (strcasecmp(modp->load_name, "extmod") != 0)
+            continue;
+
+        /* extmod options are of the form "omit <extension-name>" */
+        nt_list_for_each_entry(opt, modp->load_opt, list.next) {
+            const char *key = input_option_get_key(opt);
+            if (strncasecmp(key, "omit", 4) != 0 || strlen(key) < 5)
+                continue;
+            if (EnableDisableExtension(key + 4, FALSE))
+                xf86MarkOptionUsed(opt);
+        }
+    }
+}
+
+void
+xf86ExtensionInit(void)
+{
+    int i;
+
+    load_extension_config();
+
+    for (i = 0; i < ARRAY_SIZE(extensionModules); i++)
+	LoadExtension(&extensionModules[i], TRUE);
+}
diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
index 058d09f..16991b3 100644
--- a/hw/xfree86/common/xf86Init.c
+++ b/hw/xfree86/common/xf86Init.c
@@ -471,6 +471,8 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv)
         xf86OSPMClose = xf86OSPMOpen();
 #endif
 
+        xf86ExtensionInit();
+
         /* Load all modules specified explicitly in the config file */
         if ((modulelist = xf86ModulelistFromConfig(&optionlist))) {
             xf86LoadModules(modulelist, optionlist);
diff --git a/hw/xfree86/dixmods/extmod/modinit.c b/hw/xfree86/dixmods/extmod/modinit.c
index 6477127..afee27a 100644
--- a/hw/xfree86/dixmods/extmod/modinit.c
+++ b/hw/xfree86/dixmods/extmod/modinit.c
@@ -135,21 +135,6 @@ extmodSetup(pointer module, pointer opts, int *errmaj, int *errmin)
     /* XXX the option stuff here is largely a sample/test case */
 
     for (i = 0; extensionModules[i].name != NULL; i++) {
-        if (opts) {
-            char *s;
-
-            if (asprintf(&s, "omit%s", extensionModules[i].name) != -1) {
-                pointer o;
-
-                o = xf86FindOption(opts, s);
-                free(s);
-                if (o) {
-                    xf86MarkOptionUsed(o);
-                    continue;
-                }
-            }
-        }
-
 #ifdef XSELINUX
         if (!strcmp(SELINUX_EXTENSION_NAME, extensionModules[i].name)) {
             pointer o;
commit 4170e4e1f8e879394c896c490d9f08a38ecfdefd
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:02:57 2012 +0100

    Loader: Drop EXTERN_MODULE flag
    
    EXTERN_MODULE was used to specify that we shouldn't worry about modules
    lacking a ModuleData object.  It was also completely unused.  *shrug*
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Alan Coopersmith <alan.coopersmith at oracle.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/common/xf86Module.h b/hw/xfree86/common/xf86Module.h
index 9ba874c..c48f041 100644
--- a/hw/xfree86/common/xf86Module.h
+++ b/hw/xfree86/common/xf86Module.h
@@ -55,9 +55,6 @@ typedef enum {
 
 #define DEFAULT_LIST ((char *)-1)
 
-/* This indicates a special module that doesn't have the usual entry point */
-#define EXTERN_MODULE ((pointer)-1)
-
 /* Built-in ABI classes.  These definitions must not be changed. */
 #define ABI_CLASS_NONE		NULL
 #define ABI_CLASS_ANSIC		"X.Org ANSI C Emulation"
diff --git a/hw/xfree86/doc/ddxDesign.xml b/hw/xfree86/doc/ddxDesign.xml
index 24b0c03..118b58f 100644
--- a/hw/xfree86/doc/ddxDesign.xml
+++ b/hw/xfree86/doc/ddxDesign.xml
@@ -5363,15 +5363,6 @@ XFree86 common layer.
 		  way by modules loaded directly by the XFree86 common
 		  layer.  However, it may be used for application-specific
 		  parameter passing in other situations.
-		    </para>
-
-		    <para>
-		  When loading <quote>external</quote> modules (modules that don't
-		  have the standard entry point, for example a
-		  special shared library) the options parameter can be
-		  set to <constant>EXTERN_MODULE</constant> to tell the
-		  loader not to reject the module when it doesn't find
-		  the standard entry point.
 		    </para></listitem></varlistentry>
 
 
diff --git a/hw/xfree86/loader/loadmod.c b/hw/xfree86/loader/loadmod.c
index dd20573..e7e60dd 100644
--- a/hw/xfree86/loader/loadmod.c
+++ b/hw/xfree86/loader/loadmod.c
@@ -992,10 +992,6 @@ doLoadModule(const char *module, const char *path, const char **subdirlist,
         ret->VersionInfo = vers;
     }
     else {
-        /* No initdata is OK for external modules */
-        if (options == EXTERN_MODULE)
-            goto LoadModule_exit;
-
         /* no initdata, fail the load */
         xf86Msg(X_ERROR, "LoadModule: Module %s does not have a %s "
                 "data object.\n", module, p);
commit a1d41e311c21eb6627caa0d168e070ceaf90806f
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:02:56 2012 +0100

    Move extension initialisation prototypes into extinit.h
    
    Create extinit.h (and xf86Extensions.h, for Xorg-specific extensions) to
    hold all our extension initialisation prototypes, rather than
    duplicating them everywhere.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/Xext/bigreq.c b/Xext/bigreq.c
index 886b761..c78a1e4 100644
--- a/Xext/bigreq.c
+++ b/Xext/bigreq.c
@@ -38,9 +38,7 @@ from The Open Group.
 #include "extnsionst.h"
 #include <X11/extensions/bigreqsproto.h>
 #include "opaque.h"
-#include "modinit.h"
-
-void BigReqExtensionInit(void);
+#include "extinit.h"
 
 static int
 ProcBigReqDispatch(ClientPtr client)
diff --git a/Xext/dpms.c b/Xext/dpms.c
index 8cff8bd..5f1a35d 100644
--- a/Xext/dpms.c
+++ b/Xext/dpms.c
@@ -39,7 +39,7 @@ Equipment Corporation.
 #include "opaque.h"
 #include <X11/extensions/dpmsproto.h>
 #include "dpmsproc.h"
-#include "modinit.h"
+#include "extinit.h"
 
 static int
 ProcDPMSGetVersion(ClientPtr client)
diff --git a/Xext/geext.c b/Xext/geext.c
index fc16b8a..ad7f963 100644
--- a/Xext/geext.c
+++ b/Xext/geext.c
@@ -32,6 +32,7 @@
 #include "geint.h"
 #include "geext.h"
 #include "protocol-versions.h"
+#include "extinit.h"
 
 DevPrivateKeyRec GEClientPrivateKeyRec;
 
diff --git a/Xext/geext.h b/Xext/geext.h
index d2a15dc..f468979 100644
--- a/Xext/geext.h
+++ b/Xext/geext.h
@@ -78,6 +78,4 @@ extern _X_EXPORT void GERegisterExtension(int extension,
 
 extern _X_EXPORT void GEInitEvent(xGenericEvent *ev, int extension);
 
-extern _X_EXPORT void GEExtensionInit(void);
-
 #endif                          /* _GEEXT_H_ */
diff --git a/Xext/panoramiX.c b/Xext/panoramiX.c
index df67c00..3398a8d 100644
--- a/Xext/panoramiX.c
+++ b/Xext/panoramiX.c
@@ -59,7 +59,7 @@ Equipment Corporation.
 #ifdef COMPOSITE
 #include "compint.h"
 #endif
-#include "modinit.h"
+#include "extinit.h"
 #include "protocol-versions.h"
 
 #ifdef GLXPROXY
diff --git a/Xext/saver.c b/Xext/saver.c
index eefb497..ac4a633 100644
--- a/Xext/saver.c
+++ b/Xext/saver.c
@@ -58,7 +58,7 @@ in this Software without prior written authorization from the X Consortium.
 
 #include <stdio.h>
 
-#include "modinit.h"
+#include "extinit.h"
 
 static int ScreenSaverEventBase = 0;
 
diff --git a/Xext/security.c b/Xext/security.c
index c101b7d..6cc9aa0 100644
--- a/Xext/security.c
+++ b/Xext/security.c
@@ -38,7 +38,7 @@ in this Software without prior written authorization from The Open Group.
 #include "xacestr.h"
 #include "securitysrv.h"
 #include <X11/extensions/securproto.h>
-#include "modinit.h"
+#include "extinit.h"
 #include "protocol-versions.h"
 
 /* Extension stuff */
diff --git a/Xext/shape.c b/Xext/shape.c
index 68cbef2..d36867c 100644
--- a/Xext/shape.c
+++ b/Xext/shape.c
@@ -44,7 +44,7 @@ in this Software without prior written authorization from The Open Group.
 #include <X11/extensions/shapeproto.h>
 #include "regionstr.h"
 #include "gcstruct.h"
-#include "modinit.h"
+#include "extinit.h"
 #include "protocol-versions.h"
 
 typedef RegionPtr (*CreateDftPtr) (WindowPtr    /* pWin */
diff --git a/Xext/shm.c b/Xext/shm.c
index fd0c41f..3fa04b9 100644
--- a/Xext/shm.c
+++ b/Xext/shm.c
@@ -87,7 +87,7 @@ in this Software without prior written authorization from The Open Group.
 #include "panoramiXsrv.h"
 #endif
 
-#include "modinit.h"
+#include "extinit.h"
 
 typedef struct _ShmDesc {
     struct _ShmDesc *next;
diff --git a/Xext/sync.c b/Xext/sync.c
index b203c5e..8a333dd 100644
--- a/Xext/sync.c
+++ b/Xext/sync.c
@@ -76,7 +76,7 @@ PERFORMANCE OF THIS SOFTWARE.
 #include <sys/time.h>
 #endif
 
-#include "modinit.h"
+#include "extinit.h"
 
 /*
  * Local Global Variables
diff --git a/Xext/syncsrv.h b/Xext/syncsrv.h
index dbed476..c68229f 100644
--- a/Xext/syncsrv.h
+++ b/Xext/syncsrv.h
@@ -134,8 +134,6 @@ extern void SyncChangeCounter(SyncCounter *pCounter,
 
 extern void SyncDestroySystemCounter(pointer pCounter);
 
-extern void SyncExtensionInit(void);
-
 extern SyncCounter *SyncInitDeviceIdleTime(DeviceIntPtr dev);
 extern void SyncRemoveDeviceIdleTime(SyncCounter *counter);
 #endif                          /* _SYNCSRV_H_ */
diff --git a/Xext/xcmisc.c b/Xext/xcmisc.c
index cfde3b3..034bfb6 100644
--- a/Xext/xcmisc.c
+++ b/Xext/xcmisc.c
@@ -38,7 +38,7 @@ from The Open Group.
 #include "extnsionst.h"
 #include "swaprep.h"
 #include <X11/extensions/xcmiscproto.h>
-#include "modinit.h"
+#include "extinit.h"
 
 #include <stdint.h>
 
diff --git a/Xext/xf86bigfont.c b/Xext/xf86bigfont.c
index d91ff95..b4ef5e4 100644
--- a/Xext/xf86bigfont.c
+++ b/Xext/xf86bigfont.c
@@ -71,6 +71,7 @@
 #include "gcstruct.h"
 #include "dixfontstr.h"
 #include "extnsionst.h"
+#include "extinit.h"
 #include "protocol-versions.h"
 
 #include <X11/extensions/xf86bigfproto.h>
diff --git a/Xext/xf86bigfontsrv.h b/Xext/xf86bigfontsrv.h
index 2c78dc4..eab5287 100644
--- a/Xext/xf86bigfontsrv.h
+++ b/Xext/xf86bigfontsrv.h
@@ -27,7 +27,6 @@
 
 #include <X11/fonts/font.h>
 
-extern void XFree86BigfontExtensionInit(void);
 extern void XF86BigfontFreeFontShm(FontPtr);
 extern void XF86BigfontCleanup(void);
 
diff --git a/Xext/xres.c b/Xext/xres.c
index acc5b8c..445abca 100644
--- a/Xext/xres.c
+++ b/Xext/xres.c
@@ -21,7 +21,7 @@
 #include "pixmapstr.h"
 #include "windowstr.h"
 #include "gcstruct.h"
-#include "modinit.h"
+#include "extinit.h"
 #include "protocol-versions.h"
 #include "client.h"
 #include "list.h"
diff --git a/Xext/xselinux_ext.c b/Xext/xselinux_ext.c
index 220e876..3115f03 100644
--- a/Xext/xselinux_ext.c
+++ b/Xext/xselinux_ext.c
@@ -26,7 +26,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "windowstr.h"
 #include "propertyst.h"
 #include "extnsionst.h"
-#include "modinit.h"
+#include "extinit.h"
 #include "xselinuxint.h"
 
 #define CTX_DEV offsetof(SELinuxSubjectRec, dev_create_sid)
diff --git a/Xext/xtest.c b/Xext/xtest.c
index 4938e3b..c593372 100644
--- a/Xext/xtest.c
+++ b/Xext/xtest.c
@@ -55,7 +55,7 @@
 #include "eventstr.h"
 #include "inpututils.h"
 
-#include "modinit.h"
+#include "extinit.h"
 
 extern int DeviceValuator;
 
diff --git a/Xext/xvdix.h b/Xext/xvdix.h
index 59fc1ff..fdf33d3 100644
--- a/Xext/xvdix.h
+++ b/Xext/xvdix.h
@@ -235,7 +235,6 @@ typedef struct {
 extern _X_EXPORT int ProcXvDispatch(ClientPtr);
 extern _X_EXPORT int SProcXvDispatch(ClientPtr);
 
-extern _X_EXPORT void XvExtensionInit(void);
 extern _X_EXPORT int XvScreenInit(ScreenPtr);
 extern _X_EXPORT DevPrivateKey XvGetScreenKey(void);
 extern _X_EXPORT unsigned long XvGetRTPort(void);
diff --git a/Xext/xvmain.c b/Xext/xvmain.c
index 74872fc..c2860b8 100644
--- a/Xext/xvmain.c
+++ b/Xext/xvmain.c
@@ -88,6 +88,7 @@ SOFTWARE.
 #include "pixmapstr.h"
 #include "gc.h"
 #include "extnsionst.h"
+#include "extinit.h"
 #include "dixstruct.h"
 #include "resource.h"
 #include "opaque.h"
diff --git a/Xext/xvmc.c b/Xext/xvmc.c
index d74302b..808691c 100644
--- a/Xext/xvmc.c
+++ b/Xext/xvmc.c
@@ -13,6 +13,7 @@
 #include "resource.h"
 #include "scrnintstr.h"
 #include "extnsionst.h"
+#include "extinit.h"
 #include "servermd.h"
 #include <X11/Xfuncproto.h>
 #include "xvdix.h"
diff --git a/Xext/xvmcext.h b/Xext/xvmcext.h
index 5a4261b..d78171d 100644
--- a/Xext/xvmcext.h
+++ b/Xext/xvmcext.h
@@ -85,8 +85,6 @@ typedef struct {
 } XvMCAdaptorRec, *XvMCAdaptorPtr;
 
 #ifndef XorgLoader
-extern _X_EXPORT void XvMCExtensionInit(void);
-
 extern _X_EXPORT int XvMCScreenInit(ScreenPtr pScreen,
                                     int num, XvMCAdaptorPtr adapt);
 
diff --git a/composite/compext.c b/composite/compext.c
index eea1a58..8641eff 100644
--- a/composite/compext.c
+++ b/composite/compext.c
@@ -48,6 +48,7 @@
 #include "compint.h"
 #include "xace.h"
 #include "protocol-versions.h"
+#include "extinit.h"
 
 static CARD8 CompositeReqCode;
 static DevPrivateKeyRec CompositeClientPrivateKeyRec;
diff --git a/composite/compint.h b/composite/compint.h
index 30b724e..45b5824 100644
--- a/composite/compint.h
+++ b/composite/compint.h
@@ -229,13 +229,6 @@ compReallocPixmap(WindowPtr pWin, int x, int y,
                   unsigned int w, unsigned int h, int bw);
 
 /*
- * compext.c
- */
-
-void
- CompositeExtensionInit(void);
-
-/*
  * compinit.c
  */
 
diff --git a/damageext/Makefile.am b/damageext/Makefile.am
index 35f7620..4d4cf44 100644
--- a/damageext/Makefile.am
+++ b/damageext/Makefile.am
@@ -4,5 +4,4 @@ AM_CFLAGS = $(DIX_CFLAGS)
 
 libdamageext_la_SOURCES = 	\
 	damageext.c		\
-	damageext.h		\
 	damageextint.h
diff --git a/damageext/damageext.c b/damageext/damageext.c
index 222643c..a942ffa 100644
--- a/damageext/damageext.c
+++ b/damageext/damageext.c
@@ -26,6 +26,7 @@
 
 #include "damageextint.h"
 #include "protocol-versions.h"
+#include "extinit.h"
 
 static unsigned char DamageReqCode;
 static int DamageEventBase;
diff --git a/damageext/damageextint.h b/damageext/damageextint.h
index b7e63e0..2723379 100644
--- a/damageext/damageextint.h
+++ b/damageext/damageextint.h
@@ -37,7 +37,6 @@
 #include "windowstr.h"
 #include "selection.h"
 #include "scrnintstr.h"
-#include "damageext.h"
 #include "damage.h"
 #include "xfixes.h"
 
diff --git a/dbe/dbe.c b/dbe/dbe.c
index 8f3d1b0..9039d80 100644
--- a/dbe/dbe.c
+++ b/dbe/dbe.c
@@ -42,6 +42,7 @@
 #include <X11/Xproto.h>
 #include "scrnintstr.h"
 #include "extnsionst.h"
+#include "extinit.h"
 #include "gcstruct.h"
 #include "dixstruct.h"
 #define NEED_DBE_PROTOCOL
diff --git a/dbe/dbestruct.h b/dbe/dbestruct.h
index 9ea9eb6..f9d938a 100644
--- a/dbe/dbestruct.h
+++ b/dbe/dbestruct.h
@@ -83,8 +83,6 @@ typedef struct {
 /* Marker for free elements in the buffer ID array. */
 #define DBE_FREE_ID_ELEMENT	0
 
-extern _X_EXPORT void DbeExtensionInit(void);
-
 /* TYPEDEFS */
 
 /* Record used to pass swap information between DIX and DDX swapping
diff --git a/glx/glxext.c b/glx/glxext.c
index e506aec..a1f9d42 100644
--- a/glx/glxext.c
+++ b/glx/glxext.c
@@ -39,6 +39,7 @@
 #include <registry.h>
 #include "privates.h"
 #include <os.h>
+#include "extinit.h"
 #include "unpack.h"
 #include "glxutil.h"
 #include "glxext.h"
@@ -338,6 +339,9 @@ GlxExtensionInit(void)
     if (!__glXContextRes || !__glXDrawableRes)
         return;
 
+    if (serverGeneration == 1)
+        GlxPushProvider(&__glXDRISWRastProvider);
+
     if (!dixRegisterPrivateKey
         (&glxClientPrivateKeyRec, PRIVATE_CLIENT, sizeof(__GLXclientState)))
         return;
diff --git a/glx/glxserver.h b/glx/glxserver.h
index 61c45c5..d9b106b 100644
--- a/glx/glxserver.h
+++ b/glx/glxserver.h
@@ -76,8 +76,6 @@ extern __GLXclientState *glxGetClient(ClientPtr pClient);
 
 /************************************************************************/
 
-void GlxExtensionInit(void);
-
 void GlxSetVisualConfigs(int nconfigs, void *configs, void **privates);
 
 void __glXScreenInitVisuals(__GLXscreen * screen);
diff --git a/hw/dmx/dmx.c b/hw/dmx/dmx.c
index 9df94a4..0f7cb5c 100644
--- a/hw/dmx/dmx.c
+++ b/hw/dmx/dmx.c
@@ -52,6 +52,7 @@
 #include "os.h"
 #include "dixstruct.h"
 #include "extnsionst.h"
+#include "extinit.h"
 #include "opaque.h"
 
 #include "dmxextension.h"
@@ -65,8 +66,6 @@ extern unsigned long XRT_WINDOW;
 extern int PanoramiXNumScreens;
 #endif
 
-extern void DMXExtensionInit(void);
-
 static unsigned char DMXCode;
 
 static int
diff --git a/hw/dmx/glxProxy/glxext.c b/hw/dmx/glxProxy/glxext.c
index 9532837..8122221 100644
--- a/hw/dmx/glxProxy/glxext.c
+++ b/hw/dmx/glxProxy/glxext.c
@@ -44,6 +44,7 @@
 #include "glxvisuals.h"
 #include "micmap.h"
 #include "glxswap.h"
+#include "extinit.h"
 
 /*
 ** Forward declarations.
diff --git a/hw/dmx/glxProxy/glxext.h b/hw/dmx/glxProxy/glxext.h
index 881152d..47cec15 100644
--- a/hw/dmx/glxProxy/glxext.h
+++ b/hw/dmx/glxProxy/glxext.h
@@ -64,8 +64,6 @@ extern void __glXResetLargeCommandStatus(__GLXclientState *);
 extern int __glXQueryContextInfoEXT(__GLXclientState * cl, GLbyte * pc);
 extern int __glXSwapQueryContextInfoEXT(__GLXclientState * cl, char *pc);
 
-extern void GlxExtensionInit(void);
-
 extern Bool __glXCoreType(void);
 
 #endif                          /* _glxext_h_ */
diff --git a/hw/xfree86/common/Makefile.am b/hw/xfree86/common/Makefile.am
index 65d98e6..5fbb890 100644
--- a/hw/xfree86/common/Makefile.am
+++ b/hw/xfree86/common/Makefile.am
@@ -45,7 +45,7 @@ libcommon_la_SOURCES = xf86Configure.c xf86Bus.c xf86Config.c \
                       xf86Option.c xf86Init.c \
                       xf86VidMode.c xf86fbman.c xf86cmap.c \
                       xf86Helper.c xf86PM.c xf86Xinput.c xisb.c \
-                      xf86Mode.c xorgHelper.c \
+                      xf86Mode.c xorgHelper.c xf86Extensions.h \
                       $(XVSOURCES) $(BUSSOURCES) $(RANDRSOURCES)
 nodist_libcommon_la_SOURCES = xf86DefModeSet.c xf86Build.h
 libcommon_la_LIBADD = $(top_builddir)/config/libconfig.la
diff --git a/hw/xfree86/common/vidmodeproc.h b/hw/xfree86/common/vidmodeproc.h
index aa43237..311d35c 100644
--- a/hw/xfree86/common/vidmodeproc.h
+++ b/hw/xfree86/common/vidmodeproc.h
@@ -39,7 +39,7 @@ typedef union {
     float f;
 } vidMonitorValue;
 
-extern _X_EXPORT void XFree86VidModeExtensionInit(void);
+extern Bool VidModeExtensionInit(ScreenPtr pScreen);
 
 extern _X_EXPORT Bool VidModeAvailable(int scrnIndex);
 extern _X_EXPORT Bool VidModeGetCurrentModeline(int scrnIndex, pointer *mode,
diff --git a/hw/xfree86/common/xf86.h b/hw/xfree86/common/xf86.h
index 6116985..1e122cf 100644
--- a/hw/xfree86/common/xf86.h
+++ b/hw/xfree86/common/xf86.h
@@ -449,11 +449,6 @@ xf86RandRSetNewVirtualAndDimensions(ScreenPtr pScreen,
                                     Bool resetMode);
 #endif
 
-/* xf86VidModeExtentionInit.c */
-
-extern _X_EXPORT Bool
-VidModeExtensionInit(ScreenPtr pScreen);
-
 /* convert ScreenPtr to ScrnInfoPtr */
 extern _X_EXPORT ScrnInfoPtr xf86ScreenToScrn(ScreenPtr pScreen);
 /* convert ScrnInfoPtr to ScreenPtr */
diff --git a/hw/xfree86/common/xf86Extensions.h b/hw/xfree86/common/xf86Extensions.h
new file mode 100644
index 0000000..f86a421
--- /dev/null
+++ b/hw/xfree86/common/xf86Extensions.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright © 2011 Daniel Stone
+ *
+ * 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: Daniel Stone <daniel at fooishbar.org>
+ */
+
+#ifndef XF86EXTENSIONS_H
+#define XF86EXTENSIONS_H
+
+#include "extnsionst.h"
+
+#ifdef XF86DRI
+extern Bool noXFree86DRIExtension;
+extern void XFree86DRIExtensionInit(void);
+#endif
+
+#ifdef DRI2
+#include <X11/extensions/dri2proto.h>
+extern void DRI2ExtensionInit(void);
+#endif
+
+#ifdef XF86VIDMODE
+#include <X11/extensions/xf86vmproto.h>
+extern Bool noXFree86VidModeExtension;
+extern void XFree86VidModeExtensionInit(void);
+#endif
+
+#ifdef XFreeXDGA
+#include <X11/extensions/xf86dgaproto.h>
+extern Bool noXFree86DGAExtension;
+extern void XFree86DGAExtensionInit(void);
+extern void XFree86DGARegister(void);
+#endif
+
+#endif
diff --git a/hw/xfree86/dixmods/dbemodule.c b/hw/xfree86/dixmods/dbemodule.c
index fea3d9f..fb37053 100644
--- a/hw/xfree86/dixmods/dbemodule.c
+++ b/hw/xfree86/dixmods/dbemodule.c
@@ -4,11 +4,10 @@
 
 #include "xf86Module.h"
 #include "globals.h"
+#include "extinit.h"
 
 static MODULESETUPPROTO(dbeSetup);
 
-extern void DbeExtensionInit(void);
-
 static ExtensionModule dbeExt = {
     DbeExtensionInit,
     "DOUBLE-BUFFER",
diff --git a/hw/xfree86/dixmods/extmod/Makefile.am b/hw/xfree86/dixmods/extmod/Makefile.am
index d08e9ad..cdbd82e 100644
--- a/hw/xfree86/dixmods/extmod/Makefile.am
+++ b/hw/xfree86/dixmods/extmod/Makefile.am
@@ -23,7 +23,6 @@ INCLUDES = @XORG_INCS@ \
 
 libextmod_la_LDFLAGS = -module -avoid-version $(LD_NO_UNDEFINED_FLAG)
 libextmod_la_SOURCES = modinit.c \
-                       modinit.h \
                        $(DGA_SRCS) \
                        $(XF86VMODE_SRCS) \
                        $(XV_SRCS)
diff --git a/hw/xfree86/dixmods/extmod/modinit.c b/hw/xfree86/dixmods/extmod/modinit.c
index ca15ee0..6477127 100644
--- a/hw/xfree86/dixmods/extmod/modinit.c
+++ b/hw/xfree86/dixmods/extmod/modinit.c
@@ -29,7 +29,8 @@
 
 #include <X11/Xproto.h>
 
-#include "modinit.h"
+#include "extinit.h"
+#include "xf86Extensions.h"
 #include "globals.h"
 
 static MODULESETUPPROTO(extmodSetup);
diff --git a/hw/xfree86/dixmods/extmod/xf86dga2.c b/hw/xfree86/dixmods/extmod/xf86dga2.c
index 4cae949..808aa69 100644
--- a/hw/xfree86/dixmods/extmod/xf86dga2.c
+++ b/hw/xfree86/dixmods/extmod/xf86dga2.c
@@ -17,6 +17,7 @@
 #include "dixevents.h"
 #include "pixmapstr.h"
 #include "extnsionst.h"
+#include "xf86Extensions.h"
 #include "colormapst.h"
 #include "cursorstr.h"
 #include "scrnintstr.h"
@@ -28,7 +29,7 @@
 
 #include <string.h>
 
-#include "modinit.h"
+#include "extinit.h"
 
 #define DGA_PROTOCOL_OLD_SUPPORT 1
 
diff --git a/hw/xfree86/dixmods/extmod/xf86vmode.c b/hw/xfree86/dixmods/extmod/xf86vmode.c
index 3d66852..7cd2eed 100644
--- a/hw/xfree86/dixmods/extmod/xf86vmode.c
+++ b/hw/xfree86/dixmods/extmod/xf86vmode.c
@@ -39,6 +39,7 @@ from Kaleb S. KEITHLEY
 #include "misc.h"
 #include "dixstruct.h"
 #include "extnsionst.h"
+#include "xf86Extensions.h"
 #include "scrnintstr.h"
 #include "servermd.h"
 #include <X11/extensions/xf86vmproto.h>
diff --git a/hw/xfree86/dixmods/glxmodule.c b/hw/xfree86/dixmods/glxmodule.c
index 4482cbc..f263324 100644
--- a/hw/xfree86/dixmods/glxmodule.c
+++ b/hw/xfree86/dixmods/glxmodule.c
@@ -42,6 +42,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "micmap.h"
 #include "globals.h"
 #include "glxserver.h"
+#include "extinit.h"
 
 static MODULESETUPPROTO(glxSetup);
 
diff --git a/hw/xfree86/dixmods/recordmod.c b/hw/xfree86/dixmods/recordmod.c
index fe52fa8..4f8eb97 100644
--- a/hw/xfree86/dixmods/recordmod.c
+++ b/hw/xfree86/dixmods/recordmod.c
@@ -3,13 +3,12 @@
 #endif
 
 #include "xf86Module.h"
+#include "extinit.h"
 
 extern Bool noTestExtensions;
 
 static MODULESETUPPROTO(recordSetup);
 
-extern void RecordExtensionInit(void);
-
 static ExtensionModule recordExt = {
     RecordExtensionInit,
     "RECORD",
diff --git a/hw/xfree86/dri/dri.c b/hw/xfree86/dri/dri.c
index 46a9ae4..a3e7870 100644
--- a/hw/xfree86/dri/dri.c
+++ b/hw/xfree86/dri/dri.c
@@ -51,6 +51,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "misc.h"
 #include "dixstruct.h"
 #include "extnsionst.h"
+#include "extinit.h"
 #include "colormapst.h"
 #include "cursorstr.h"
 #include "scrnintstr.h"
@@ -68,6 +69,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "xf86_OSproc.h"
 #include "inputstr.h"
 #include "xf86VGAarbiter.h"
+#include "xf86Extensions.h"
 
 static int DRIEntPrivIndex = -1;
 static DevPrivateKeyRec DRIScreenPrivKeyRec;
diff --git a/hw/xfree86/dri/drimodule.c b/hw/xfree86/dri/drimodule.c
index eb42ef6..6cb3bfb 100644
--- a/hw/xfree86/dri/drimodule.c
+++ b/hw/xfree86/dri/drimodule.c
@@ -37,6 +37,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #endif
 
 #include "xf86Module.h"
+#include "xf86Extensions.h"
 #include "globals.h"
 
 #include "xf86drm.h"
@@ -57,7 +58,6 @@ static XF86ModuleVersionInfo VersRec = {
     {0, 0, 0, 0}
 };
 
-extern void XFree86DRIExtensionInit(void);
 #define _XF86DRI_SERVER_
 #include <X11/dri/xf86driproto.h>
 
diff --git a/hw/xfree86/dri/xf86dri.c b/hw/xfree86/dri/xf86dri.c
index 310bb5e..ba74bb0 100644
--- a/hw/xfree86/dri/xf86dri.c
+++ b/hw/xfree86/dri/xf86dri.c
@@ -47,6 +47,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "misc.h"
 #include "dixstruct.h"
 #include "extnsionst.h"
+#include "extinit.h"
 #include "colormapst.h"
 #include "cursorstr.h"
 #include "scrnintstr.h"
@@ -60,17 +61,17 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "dristruct.h"
 #include "xf86drm.h"
 #include "protocol-versions.h"
+#include "xf86Extensions.h"
 
 static int DRIErrorBase;
 
-static void XF86DRIResetProc(ExtensionEntry * extEntry);
+static void XF86DRIResetProc(ExtensionEntry *extEntry);
 
 static unsigned char DRIReqCode = 0;
 
-extern void XFree86DRIExtensionInit(void);
-
- /*ARGSUSED*/ static void
-XF86DRIResetProc(ExtensionEntry * extEntry)
+/*ARGSUSED*/
+static void
+XF86DRIResetProc(ExtensionEntry *extEntry)
 {
     DRIReset();
 }
diff --git a/hw/xfree86/sdksyms.sh b/hw/xfree86/sdksyms.sh
index f6c3f22..81dbbe2 100755
--- a/hw/xfree86/sdksyms.sh
+++ b/hw/xfree86/sdksyms.sh
@@ -279,7 +279,6 @@ cat > sdksyms.c << EOF
 #include "dixstruct.h"
 #include "exevents.h"
 #include "extension.h"
-#include "extinit.h"
 #include "extnsionst.h"
 #include "gc.h"
 #include "gcstruct.h"
diff --git a/hw/xquartz/pseudoramiX.c b/hw/xquartz/pseudoramiX.c
index c146687..3e10500 100644
--- a/hw/xquartz/pseudoramiX.c
+++ b/hw/xquartz/pseudoramiX.c
@@ -40,6 +40,7 @@
 #include "darwin.h"
 #include "pseudoramiX.h"
 #include "extnsionst.h"
+#include "extinit.h"
 #include "dixstruct.h"
 #include "window.h"
 #include <X11/extensions/panoramiXproto.h>
diff --git a/hw/xquartz/pseudoramiX.h b/hw/xquartz/pseudoramiX.h
index f41b5cb..f063919 100644
--- a/hw/xquartz/pseudoramiX.h
+++ b/hw/xquartz/pseudoramiX.h
@@ -6,6 +6,5 @@ extern int noPseudoramiXExtension;
 
 void
 PseudoramiXAddScreen(int x, int y, int w, int h);
-void PseudoramiXExtensionInit(int argc, char *argv[]);
 void
 PseudoramiXResetScreens(void);
diff --git a/hw/xquartz/xpr/dri.c b/hw/xquartz/xpr/dri.c
index 002ec94..663d61d 100644
--- a/hw/xquartz/xpr/dri.c
+++ b/hw/xquartz/xpr/dri.c
@@ -55,6 +55,7 @@
 #include "misc.h"
 #include "dixstruct.h"
 #include "extnsionst.h"
+#include "extinit.h"
 #include "colormapst.h"
 #include "cursorstr.h"
 #include "scrnintstr.h"
diff --git a/hw/xquartz/xpr/dri.h b/hw/xquartz/xpr/dri.h
index 8717a51..7d1c4f2 100644
--- a/hw/xquartz/xpr/dri.h
+++ b/hw/xquartz/xpr/dri.h
@@ -72,9 +72,6 @@ DRIFinishScreenInit(ScreenPtr pScreen);
 extern void
 DRICloseScreen(ScreenPtr pScreen);
 
-extern Bool
-DRIExtensionInit(void);
-
 extern void
 DRIReset(void);
 
diff --git a/include/extinit.h b/include/extinit.h
index a048b72..5e01128 100644
--- a/include/extinit.h
+++ b/include/extinit.h
@@ -23,8 +23,29 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 ********************************************************/
 
-/********************************************************************
- * Interface of extinit.c
+/*
+ * Copyright (C) 1994-2003 The XFree86 Project, Inc.  All Rights Reserved.
+ *
+ * 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 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, FIT-
+ * NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+ * XFREE86 PROJECT 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.
+ *
+ * Except as contained in this notice, the name of the XFree86 Project shall not
+ * be used in advertising or otherwise to promote the sale, use or other dealings
+ * in this Software without prior written authorization from the XFree86 Project.
  */
 
 #ifndef EXTINIT_H
@@ -32,14 +53,135 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 #include "extnsionst.h"
 
-extern void
- XInputExtensionInit(void
-    );
+#ifdef COMPOSITE
+extern Bool noCompositeExtension;
+extern void CompositeExtensionInit(void);
+#endif
 
-extern _X_EXPORT void
- AssignTypeAndName(DeviceIntPtr /* dev */ ,
-                   Atom /* type */ ,
-                   const char * /* name */
-    );
+#ifdef DAMAGE
+extern Bool noDamageExtension;
+extern void DamageExtensionInit(void);
+#endif
 
-#endif                          /* EXTINIT_H */
+#if defined(DBE) && !defined(XorgLoader)
+extern Bool noDbeExtension;
+extern void DbeExtensionInit(void);
+#endif
+
+#ifdef DMXEXT
+extern void DMXExtensionInit(void);
+#endif
+
+#if defined(DPMSExtension) && !defined(XorgLoader)
+#include <X11/extensions/dpmsconst.h>
+extern Bool noDPMSExtension;
+extern void DPMSExtensionInit(void);
+#endif
+
+extern Bool noGEExtension;
+extern void GEExtensionInit(void);
+
+#ifdef GLXEXT
+extern _X_EXPORT Bool noGlxExtension;
+extern void GlxExtensionInit(void);
+#endif
+
+#ifdef PANORAMIX
+#include <X11/extensions/panoramiXproto.h>
+extern Bool noPanoramiXExtension;
+extern void PanoramiXExtensionInit(void);
+#endif
+
+#ifdef RANDR
+extern Bool noRRExtension;
+extern void RRExtensionInit(void);
+#endif
+
+#if defined(XRECORD) && !defined(XorgLoader)
+extern void RecordExtensionInit(void);
+#endif
+
+extern Bool noRenderExtension;
+extern void RenderExtensionInit(void);
+
+#if defined(RES) && !defined(XorgLoader)
+#include <X11/extensions/XResproto.h>
+extern Bool noResExtension;
+extern void ResExtensionInit(void);
+#endif
+
+#if defined(SCREENSAVER) && !defined(XorgLoader)
+#include <X11/extensions/saver.h>
+extern Bool noScreenSaverExtension;
+extern void ScreenSaverExtensionInit(void);
+#endif
+
+#include <X11/extensions/shapeproto.h>
+extern void ShapeExtensionInit(void);
+
+#ifdef MITSHM
+#include <X11/extensions/shm.h>
+#include <X11/extensions/shmproto.h>
+extern Bool noMITShmExtension;
+extern void ShmExtensionInit(void);
+#endif
+
+extern void SyncExtensionInit(void);
+
+extern void XCMiscExtensionInit(void);
+
+#ifdef XCSECURITY
+#include <X11/extensions/secur.h>
+#include "securitysrv.h"
+extern Bool noSecurityExtension;
+extern void SecurityExtensionInit(void);
+#endif
+
+#ifdef XF86BIGFONT
+#include <X11/extensions/xf86bigfproto.h>
+extern Bool noXFree86BigfontExtension;
+extern void XFree86BigfontExtensionInit(void);
+#endif
+
+extern void BigReqExtensionInit(void);
+
+#ifdef XFIXES
+extern Bool noXFixesExtension;
+extern void XFixesExtensionInit(void);
+#endif
+
+extern void XInputExtensionInit(void);
+extern _X_EXPORT void AssignTypeAndName(DeviceIntPtr dev,
+                                        Atom type,
+                                        const char *name);
+
+#include <X11/extensions/XKB.h>
+extern void XkbExtensionInit(void);
+
+#if defined(XSELINUX) && !defined(XorgLoader)
+#include "xselinux.h"
+extern Bool noSELinuxExtension;
+extern void SELinuxExtensionInit(void);
+#endif
+
+#ifdef XTEST
+#include <X11/extensions/xtestconst.h>
+#include <X11/extensions/xtestproto.h>
+extern void XTestExtensionInit(void);
+#endif
+
+#ifdef INXQUARTZ
+extern Bool noPseudoramiXExtension;
+extern void PseudoramiXExtensionInit(void);
+#endif
+
+#if defined(XV) && !defined(XorgLoader)
+#include <X11/extensions/Xv.h>
+#include <X11/extensions/XvMC.h>
+extern Bool noXvExtension;
+extern void XvExtensionInit(void);
+extern void XvMCExtensionInit(void);
+extern void XvRegister(void);
+#endif
+
+#endif
diff --git a/include/globals.h b/include/globals.h
index 6d3f3d7..7786987 100644
--- a/include/globals.h
+++ b/include/globals.h
@@ -5,6 +5,7 @@
 #include <signal.h>
 
 #include "window.h"             /* for WindowPtr */
+#include "extinit.h"
 
 /* Global X server variables that are visible to mi, dix, os, and ddx */
 
@@ -41,79 +42,7 @@ extern _X_EXPORT Bool DPMSCapableFlag;
 extern _X_EXPORT Bool PanoramiXExtensionDisabledHack;
 #endif
 
-#ifdef COMPOSITE
-extern _X_EXPORT Bool noCompositeExtension;
-#endif
-
-#ifdef DAMAGE
-extern _X_EXPORT Bool noDamageExtension;
-#endif
-
-#ifdef DBE
-extern _X_EXPORT Bool noDbeExtension;
-#endif
-
-#ifdef DPMSExtension
-extern _X_EXPORT Bool noDPMSExtension;
-#endif
-
-#ifdef GLXEXT
-extern _X_EXPORT Bool noGlxExtension;
-#endif
-
-#ifdef SCREENSAVER
-extern _X_EXPORT Bool noScreenSaverExtension;
-#endif
-
-#ifdef MITSHM
-extern _X_EXPORT Bool noMITShmExtension;
-#endif
-
-#ifdef RANDR
-extern _X_EXPORT Bool noRRExtension;
-#endif
-
-extern _X_EXPORT Bool noRenderExtension;
-
-#ifdef XCSECURITY
-extern _X_EXPORT Bool noSecurityExtension;
-#endif
-
-#ifdef RES
-extern _X_EXPORT Bool noResExtension;
-#endif
-
-#ifdef XF86BIGFONT
-extern _X_EXPORT Bool noXFree86BigfontExtension;
-#endif
-
-#ifdef XFreeXDGA
-extern _X_EXPORT Bool noXFree86DGAExtension;
-#endif
-
-#ifdef XF86DRI
-extern _X_EXPORT Bool noXFree86DRIExtension;
-#endif
-
-#ifdef XF86VIDMODE
-extern _X_EXPORT Bool noXFree86VidModeExtension;
-#endif
-
-#ifdef XFIXES
-extern _X_EXPORT Bool noXFixesExtension;
-#endif
-
-#ifdef PANORAMIX
-extern _X_EXPORT Bool noPanoramiXExtension;
-#endif
-
-#ifdef INXQUARTZ
-extern _X_EXPORT Bool noPseudoramiXExtension;
-#endif
-
 #ifdef XSELINUX
-extern _X_EXPORT Bool noSELinuxExtension;
-
 #define SELINUX_MODE_DEFAULT    0
 #define SELINUX_MODE_DISABLED   1
 #define SELINUX_MODE_PERMISSIVE 2
@@ -121,12 +50,4 @@ extern _X_EXPORT Bool noSELinuxExtension;
 extern _X_EXPORT int selinuxEnforcingState;
 #endif
 
-#ifdef XV
-extern _X_EXPORT Bool noXvExtension;
-#endif
-
-#ifdef DRI2
-extern _X_EXPORT Bool noDRI2Extension;
-#endif
-
 #endif                          /* !_XSERV_GLOBAL_H_ */
diff --git a/include/window.h b/include/window.h
index 7842b4d..f8fc2a5 100644
--- a/include/window.h
+++ b/include/window.h
@@ -214,10 +214,8 @@ extern _X_EXPORT void ResizeChildrenWinSize(WindowPtr /*pWin */ ,
                                             int /*dw */ ,
                                             int /*dh */ );
 
-extern _X_EXPORT void ShapeExtensionInit(void);
-
 extern _X_EXPORT void SendShapeNotify(WindowPtr /* pWin */ ,
-                                      int /* which */ );
+                                      int /* which */);
 
 extern _X_EXPORT RegionPtr CreateBoundingShape(WindowPtr /* pWin */ );
 
diff --git a/mi/miinitext.c b/mi/miinitext.c
index e60cc3f..ef20a11 100644
--- a/mi/miinitext.c
+++ b/mi/miinitext.c
@@ -90,114 +90,15 @@ SOFTWARE.
 
 #include "misc.h"
 #include "extension.h"
+#include "extinit.h"
 #include "micmap.h"
 #include "globals.h"
 
-extern Bool noGEExtension;
-
 #ifndef XFree86LOADER
 typedef void (*InitExtension) (void);
 #else                           /* XFree86Loader */
 #include "loaderProcs.h"
-#endif
-
-#ifdef MITSHM
-#include <X11/extensions/shm.h>
-#endif
-#ifdef XTEST
-#include <X11/extensions/xtestconst.h>
-#endif
-#include <X11/extensions/XKB.h>
-#ifdef XCSECURITY
-#include "securitysrv.h"
-#include <X11/extensions/secur.h>
-#endif
-#ifdef XSELINUX
-#include "xselinux.h"
-#endif
-#ifdef PANORAMIX
-#include <X11/extensions/panoramiXproto.h>
-#endif
-#ifdef XF86BIGFONT
-#include <X11/extensions/xf86bigfproto.h>
-#endif
-#ifdef RES
-#include <X11/extensions/XResproto.h>
-#endif
-
-/* FIXME: this whole block of externs should be from the appropriate headers */
-#ifdef MITSHM
-extern void ShmExtensionInit(void);
-#endif
-#ifdef PANORAMIX
-extern void PanoramiXExtensionInit(void);
-#endif
-#ifdef INXQUARTZ
-extern void PseudoramiXExtensionInit(void);
-#endif
-extern void XInputExtensionInit(void);
-#ifdef XTEST
-extern void XTestExtensionInit(void);
-#endif
-extern void BigReqExtensionInit(void);
-#ifdef SCREENSAVER
-extern void ScreenSaverExtensionInit(void);
-#endif
-#ifdef XV
-extern void XvExtensionInit(void);
-extern void XvMCExtensionInit(void);
-#endif
-extern void SyncExtensionInit(void);
-extern void XkbExtensionInit(void);
-extern void XCMiscExtensionInit(void);
-#ifdef XRECORD
-extern void RecordExtensionInit(void);
-#endif
-#ifdef DBE
-extern void DbeExtensionInit(void);
-#endif
-#ifdef XCSECURITY
-extern void SecurityExtensionInit(void);
-#endif
-#ifdef XSELINUX
-extern void SELinuxExtensionInit(void);
-#endif
-#ifdef XF86BIGFONT
-extern void XFree86BigfontExtensionInit(void);
-#endif
-#ifdef XF86VIDMODE
-extern void XFree86VidModeExtensionInit(void);
-#endif
-#ifdef XFreeXDGA
-extern void XFree86DGAExtensionInit(void);
-#endif
-#ifdef GLXEXT
-extern void GlxExtensionInit(void);
-#endif
-#ifdef XF86DRI
-extern void XFree86DRIExtensionInit(void);
-#endif
-#ifdef DPMSExtension
-extern void DPMSExtensionInit(void);
-#endif
-extern void RenderExtensionInit(void);
-#ifdef RANDR
-extern void RRExtensionInit(void);
-#endif
-#ifdef RES
-extern void ResExtensionInit(void);
-#endif
-#ifdef DMXEXT
-extern void DMXExtensionInit(void);
-#endif
-#ifdef XFIXES
-extern void XFixesExtensionInit(void);
-#endif
-#ifdef DAMAGE
-extern void DamageExtensionInit(void);
-#endif
-#ifdef COMPOSITE
-extern void CompositeExtensionInit(void);
+#include "xf86Extensions.h"
 #endif
 
 /* The following is only a small first step towards run-time
@@ -245,6 +146,7 @@ static ExtensionToggle ExtensionToggleList[] = {
 #ifdef XF86BIGFONT
     {"XFree86-Bigfont", &noXFree86BigfontExtension},
 #endif
+#ifndef NO_HW_ONLY_EXTS
 #ifdef XFreeXDGA
     {"XFree86-DGA", &noXFree86DGAExtension},
 #endif
@@ -254,6 +156,7 @@ static ExtensionToggle ExtensionToggleList[] = {
 #ifdef XF86VIDMODE
     {"XFree86-VidModeExtension", &noXFree86VidModeExtension},
 #endif
+#endif
 #ifdef XFIXES
     {"XFIXES", &noXFixesExtension},
 #endif
diff --git a/randr/randr.c b/randr/randr.c
index 3050c54..da48c3f 100644
--- a/randr/randr.c
+++ b/randr/randr.c
@@ -30,6 +30,7 @@
 #endif
 
 #include "randrstr.h"
+#include "extinit.h"
 
 /* From render.h */
 #ifndef SubPixelUnknown
diff --git a/randr/randrstr.h b/randr/randrstr.h
index 62b9050..212b0a9 100644
--- a/randr/randrstr.h
+++ b/randr/randrstr.h
@@ -418,10 +418,6 @@ extern _X_EXPORT RESTYPE RRCrtcType, RRModeType, RROutputType, RRProviderType;
 #define GetRRClient(pClient)    ((RRClientPtr)dixLookupPrivate(&(pClient)->devPrivates, RRClientPrivateKey))
 #define rrClientPriv(pClient)	RRClientPtr pRRClient = GetRRClient(pClient)
 
-/* Initialize the extension */
-extern _X_EXPORT void
- RRExtensionInit(void);
-
 #ifdef RANDR_12_INTERFACE
 /*
  * Set the range of sizes for the screen
diff --git a/record/record.c b/record/record.c
index 67569d9..f3a26a7 100644
--- a/record/record.c
+++ b/record/record.c
@@ -38,6 +38,7 @@ and Jim Haggerty of Metheus.
 
 #include "dixstruct.h"
 #include "extnsionst.h"
+#include "extinit.h"
 #include <X11/extensions/recordproto.h>
 #include "set.h"
 #include "swaprep.h"
@@ -139,8 +140,6 @@ static int RecordDeleteContext(pointer /*value */ ,
                                XID      /*id */
     );
 
-void RecordExtensionInit(void);
-
 /***************************************************************************/
 
 /* client private stuff */
diff --git a/render/picturestr.h b/render/picturestr.h
index 1cda88a..dc00f41 100644
--- a/render/picturestr.h
+++ b/render/picturestr.h
@@ -547,8 +547,6 @@ CompositeTriFan(CARD8 op,
                 PictFormatPtr maskFormat,
                 INT16 xSrc, INT16 ySrc, int npoints, xPointFixed * points);
 
-extern _X_EXPORT void RenderExtensionInit(void);
-
 Bool
  AnimCurInit(ScreenPtr pScreen);
 
diff --git a/render/render.c b/render/render.c
index 5301811..51f75ae 100644
--- a/render/render.c
+++ b/render/render.c
@@ -37,6 +37,7 @@
 #include "pixmapstr.h"
 #include "colormapst.h"
 #include "extnsionst.h"
+#include "extinit.h"
 #include "servermd.h"
 #include <X11/extensions/render.h>
 #include <X11/extensions/renderproto.h>
diff --git a/xfixes/xfixes.c b/xfixes/xfixes.c
index c6dd19e..52c57df 100644
--- a/xfixes/xfixes.c
+++ b/xfixes/xfixes.c
@@ -48,6 +48,7 @@
 
 #include "xfixesint.h"
 #include "protocol-versions.h"
+#include "extinit.h"
 
 static unsigned char XFixesReqCode;
 int XFixesEventBase;
diff --git a/xfixes/xfixesint.h b/xfixes/xfixesint.h
index 71f88a9..334c71f 100644
--- a/xfixes/xfixesint.h
+++ b/xfixes/xfixesint.h
@@ -71,11 +71,6 @@ typedef struct _XFixesClient {
 
 extern int (*ProcXFixesVector[XFixesNumberRequests]) (ClientPtr);
 
-/* Initialize extension at server startup time */
-
-void
- XFixesExtensionInit(void);
-
 /* Save set */
 int
  ProcXFixesChangeSaveSet(ClientPtr client);
diff --git a/xkb/xkb.c b/xkb/xkb.c
index ad837c8..4440a98 100644
--- a/xkb/xkb.c
+++ b/xkb/xkb.c
@@ -36,6 +36,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #define	XKBSRV_NEED_FILE_FUNCS
 #include <xkbsrv.h>
 #include "extnsionst.h"
+#include "extinit.h"
 #include "xace.h"
 #include "xkb.h"
 #include "protocol-versions.h"
diff --git a/xkb/xkb.h b/xkb/xkb.h
index a526356..f3a60af 100644
--- a/xkb/xkb.h
+++ b/xkb/xkb.h
@@ -27,6 +27,4 @@ extern int ProcXkbGetKbdByName(ClientPtr client);
 extern int ProcXkbGetDeviceInfo(ClientPtr client);
 extern int ProcXkbSetDeviceInfo(ClientPtr client);
 extern int ProcXkbSetDebuggingFlags(ClientPtr client);
-
-extern void XkbExtensionInit(void);
 #endif
commit b86aa74cafddf9bca5addfeb458a23f46ddcf132
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:02:55 2012 +0100

    GLX: Insert swrast provider from GlxExtensionInit
    
    Rather than making poor old miinitext.c do it, including making DMX
    have fake symbols just to keep it happy.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Stéphane Marchesin <stephane.marchesin at gmail.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/glx/glxext.c b/glx/glxext.c
index 8d168d8..e506aec 100644
--- a/glx/glxext.c
+++ b/glx/glxext.c
@@ -322,9 +322,15 @@ GlxExtensionInit(void)
     ExtensionEntry *extEntry;
     ScreenPtr pScreen;
     int i;
-    __GLXprovider *p;
+    __GLXprovider *p, **stack;
     Bool glx_provided = False;
 
+    if (serverGeneration == 1) {
+        for (stack = &__glXProviderStack; *stack; stack = &(*stack)->next)
+            ;
+        *stack = &__glXDRISWRastProvider;
+    }
+
     __glXContextRes = CreateNewResourceType((DeleteType) ContextGone,
                                             "GLXContext");
     __glXDrawableRes = CreateNewResourceType((DeleteType) DrawableGone,
diff --git a/glx/glxserver.h b/glx/glxserver.h
index 24e3d62..61c45c5 100644
--- a/glx/glxserver.h
+++ b/glx/glxserver.h
@@ -99,6 +99,7 @@ struct __GLXprovider {
     const char *name;
     __GLXprovider *next;
 };
+__GLXprovider __glXDRISWRastProvider;
 
 void GlxPushProvider(__GLXprovider * provider);
 
diff --git a/hw/dmx/glxProxy/glxext.c b/hw/dmx/glxProxy/glxext.c
index b0710cc..9532837 100644
--- a/hw/dmx/glxProxy/glxext.c
+++ b/hw/dmx/glxProxy/glxext.c
@@ -46,16 +46,6 @@
 #include "glxswap.h"
 
 /*
-** Stubs to satisfy miinitext.c references.
-*/
-typedef int __GLXprovider;
-__GLXprovider __glXDRISWRastProvider;
-void
-GlxPushProvider(__GLXprovider * provider)
-{
-}
-
-/*
 ** Forward declarations.
 */
 static int __glXSwapDispatch(ClientPtr);
diff --git a/hw/xfree86/dixmods/glxmodule.c b/hw/xfree86/dixmods/glxmodule.c
index e72f382..4482cbc 100644
--- a/hw/xfree86/dixmods/glxmodule.c
+++ b/hw/xfree86/dixmods/glxmodule.c
@@ -84,11 +84,6 @@ glxSetup(pointer module, pointer opts, int *errmaj, int *errmin)
 
     setupDone = TRUE;
 
-    provider = LoaderSymbol("__glXDRISWRastProvider");
-    if (provider == NULL)
-        return NULL;
-    GlxPushProvider(provider);
-
     xf86Msg(xf86Info.aiglxFrom, "AIGLX %s\n",
             xf86Info.aiglx ? "enabled" : "disabled");
     if (xf86Info.aiglx) {
diff --git a/mi/miinitext.c b/mi/miinitext.c
index 13f554a..e60cc3f 100644
--- a/mi/miinitext.c
+++ b/mi/miinitext.c
@@ -172,9 +172,6 @@ extern void XFree86VidModeExtensionInit(void);
 extern void XFree86DGAExtensionInit(void);
 #endif
 #ifdef GLXEXT
-typedef struct __GLXprovider __GLXprovider;
-extern __GLXprovider __glXDRISWRastProvider;
-extern void GlxPushProvider(__GLXprovider *impl);
 extern void GlxExtensionInit(void);
 #endif
 #ifdef XF86DRI
@@ -449,8 +446,6 @@ InitExtensions(int argc, char *argv[])
 #endif
 
 #ifdef GLXEXT
-    if (serverGeneration == 1)
-        GlxPushProvider(&__glXDRISWRastProvider);
     if (!noGlxExtension)
         GlxExtensionInit();
 #endif
commit 13552a5c4701097a1507a99ed8366ab1438844b6
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:02:54 2012 +0100

    Reorder extension initialisation for non-Xorg
    
    Reorder static extension initialisation in miinitext for non-Xorg
    servers to match Xorg's order.
    
    Tested with Xephyr; checked that the extension list was identical before
    and after.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/mi/miinitext.c b/mi/miinitext.c
index 13e1b68..13f554a 100644
--- a/mi/miinitext.c
+++ b/mi/miinitext.c
@@ -329,62 +329,79 @@ InitExtensions(int argc, char *argv[])
     if (!noGEExtension)
         GEExtensionInit();
 
-#ifdef PANORAMIX
-    if (!noPanoramiXExtension)
-        PanoramiXExtensionInit();
-#endif
-#ifdef INXQUARTZ
-    if (!noPseudoramiXExtension)
-        PseudoramiXExtensionInit();
-#endif
     ShapeExtensionInit();
+
 #ifdef MITSHM
     if (!noMITShmExtension)
         ShmExtensionInit();
 #endif
+
     XInputExtensionInit();
+
 #ifdef XTEST
     if (!noTestExtensions)
         XTestExtensionInit();
 #endif
+
     BigReqExtensionInit();
-#if defined(SCREENSAVER)
-    if (!noScreenSaverExtension)
-        ScreenSaverExtensionInit();
-#endif
-#ifdef XV
-    if (!noXvExtension) {
-        XvExtensionInit();
-        XvMCExtensionInit();
-    }
-#endif
     SyncExtensionInit();
     XkbExtensionInit();
     XCMiscExtensionInit();
-#ifdef XRECORD
-    if (!noTestExtensions)
-        RecordExtensionInit();
-#endif
-#ifdef DBE
-    if (!noDbeExtension)
-        DbeExtensionInit();
-#endif
+
 #ifdef XCSECURITY
     if (!noSecurityExtension)
         SecurityExtensionInit();
 #endif
-#ifdef XSELINUX
-    if (!noSELinuxExtension)
-        SELinuxExtensionInit();
+
+#ifdef PANORAMIX
+    if (!noPanoramiXExtension)
+        PanoramiXExtensionInit();
 #endif
-#if defined(DPMSExtension) && !defined(NO_HW_ONLY_EXTS)
-    if (!noDPMSExtension)
-        DPMSExtensionInit();
+
+#ifdef INXQUARTZ
+    if (!noPseudoramiXExtension)
+        PseudoramiXExtensionInit();
 #endif
+
+#ifdef XFIXES
+    /* must be before Render to layer DisplayCursor correctly */
+    if (!noXFixesExtension)
+        XFixesExtensionInit();
+#endif
+
 #ifdef XF86BIGFONT
     if (!noXFree86BigfontExtension)
         XFree86BigfontExtensionInit();
 #endif
+
+    if (!noRenderExtension)
+        RenderExtensionInit();
+
+#ifdef RANDR
+    if (!noRRExtension)
+        RRExtensionInit();
+#endif
+
+#ifdef COMPOSITE
+    if (!noCompositeExtension)
+        CompositeExtensionInit();
+#endif
+
+#ifdef DAMAGE
+    if (!noDamageExtension)
+        DamageExtensionInit();
+#endif
+
+#ifdef XSELINUX
+    if (!noSELinuxExtension)
+        SELinuxExtensionInit();
+#endif
+
+#if defined(SCREENSAVER)
+    if (!noScreenSaverExtension)
+        ScreenSaverExtensionInit();
+#endif
+
 #if !defined(NO_HW_ONLY_EXTS)
 #if defined(XF86VIDMODE)
     if (!noXFree86VidModeExtension)
@@ -394,36 +411,41 @@ InitExtensions(int argc, char *argv[])
     if (!noXFree86DGAExtension)
         XFree86DGAExtensionInit();
 #endif
-#ifdef XF86DRI
-    if (!noXFree86DRIExtension)
-        XFree86DRIExtensionInit();
-#endif
+#ifdef DPMSExtension
+    if (!noDPMSExtension)
+        DPMSExtensionInit();
 #endif
-#ifdef XFIXES
-    /* must be before Render to layer DisplayCursor correctly */
-    if (!noXFixesExtension)
-        XFixesExtensionInit();
 #endif
-    if (!noRenderExtension)
-        RenderExtensionInit();
-#ifdef RANDR
-    if (!noRRExtension)
-        RRExtensionInit();
+
+#ifdef XV
+    if (!noXvExtension) {
+        XvExtensionInit();
+        XvMCExtensionInit();
+    }
 #endif
+
 #ifdef RES
     if (!noResExtension)
         ResExtensionInit();
 #endif
-#ifdef DMXEXT
-    DMXExtensionInit();         /* server-specific extension, cannot be disabled */
+
+#ifdef XRECORD
+    if (!noTestExtensions)
+        RecordExtensionInit();
 #endif
-#ifdef COMPOSITE
-    if (!noCompositeExtension)
-        CompositeExtensionInit();
+
+#ifdef DBE
+    if (!noDbeExtension)
+        DbeExtensionInit();
 #endif
-#ifdef DAMAGE
-    if (!noDamageExtension)
-        DamageExtensionInit();
+
+#if !defined(NO_HW_ONLY_EXTS) && defined(XF86DRI)
+    if (!noXFree86DRIExtension)
+        XFree86DRIExtensionInit();
+#endif
+
+#ifdef DMXEXT
+    DMXExtensionInit();         /* server-specific extension, cannot be disabled */
 #endif
 
 #ifdef GLXEXT
commit 5079db78aea8fa42e781dd876c1ee1c31571b3ae
Author: Tomas Carnecky <tom at dbservice.com>
Date:   Tue Jul 10 02:02:53 2012 +0100

    Replace INITARGS with void
    
    INITARGS was a hardcoded define to void.  Since knowing the function
    signature for your extensions is kinda useful, just replace it with a
    hardcoded void, but leave the define there for API compatibility.
    
    Signed-off-by: Tomas Carnecky <tom at dbservice.com>
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Cyril Brulebois <kibi at debian.org>
    Reviewed-by: Jamey Sharp <jamey at minilop.net>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/Xext/bigreq.c b/Xext/bigreq.c
index d61ff3c..886b761 100644
--- a/Xext/bigreq.c
+++ b/Xext/bigreq.c
@@ -40,7 +40,7 @@ from The Open Group.
 #include "opaque.h"
 #include "modinit.h"
 
-void BigReqExtensionInit(INITARGS);
+void BigReqExtensionInit(void);
 
 static int
 ProcBigReqDispatch(ClientPtr client)
@@ -70,7 +70,7 @@ ProcBigReqDispatch(ClientPtr client)
 }
 
 void
-BigReqExtensionInit(INITARGS)
+BigReqExtensionInit(void)
 {
     AddExtension(XBigReqExtensionName, 0, 0,
                  ProcBigReqDispatch, ProcBigReqDispatch,
diff --git a/Xext/dpms.c b/Xext/dpms.c
index 8ec32ea..8cff8bd 100644
--- a/Xext/dpms.c
+++ b/Xext/dpms.c
@@ -355,7 +355,7 @@ SProcDPMSDispatch(ClientPtr client)
 }
 
 void
-DPMSExtensionInit(INITARGS)
+DPMSExtensionInit(void)
 {
     AddExtension(DPMSExtensionName, 0, 0,
                  ProcDPMSDispatch, SProcDPMSDispatch,
diff --git a/Xext/saver.c b/Xext/saver.c
index 7f70bc0..eefb497 100644
--- a/Xext/saver.c
+++ b/Xext/saver.c
@@ -1389,7 +1389,7 @@ SProcScreenSaverDispatch(ClientPtr client)
 }
 
 void
-ScreenSaverExtensionInit(INITARGS)
+ScreenSaverExtensionInit(void)
 {
     ExtensionEntry *extEntry;
     int i;
diff --git a/Xext/security.c b/Xext/security.c
index 50041de..c101b7d 100644
--- a/Xext/security.c
+++ b/Xext/security.c
@@ -1027,7 +1027,7 @@ SecurityResetProc(ExtensionEntry * extEntry)
  */
 
 void
-SecurityExtensionInit(INITARGS)
+SecurityExtensionInit(void)
 {
     ExtensionEntry *extEntry;
     int ret = TRUE;
diff --git a/Xext/shm.c b/Xext/shm.c
index be10a49..fd0c41f 100644
--- a/Xext/shm.c
+++ b/Xext/shm.c
@@ -1248,7 +1248,7 @@ SProcShmDispatch(ClientPtr client)
 }
 
 void
-ShmExtensionInit(INITARGS)
+ShmExtensionInit(void)
 {
     ExtensionEntry *extEntry;
     int i;
diff --git a/Xext/xcmisc.c b/Xext/xcmisc.c
index 9e4ea89..cfde3b3 100644
--- a/Xext/xcmisc.c
+++ b/Xext/xcmisc.c
@@ -190,7 +190,7 @@ SProcXCMiscDispatch(ClientPtr client)
 }
 
 void
-XCMiscExtensionInit(INITARGS)
+XCMiscExtensionInit(void)
 {
     AddExtension(XCMiscExtensionName, 0, 0,
                  ProcXCMiscDispatch, SProcXCMiscDispatch,
diff --git a/Xext/xres.c b/Xext/xres.c
index 25d4417..acc5b8c 100644
--- a/Xext/xres.c
+++ b/Xext/xres.c
@@ -1184,7 +1184,7 @@ SProcResDispatch (ClientPtr client)
 }
 
 void
-ResExtensionInit(INITARGS)
+ResExtensionInit(void)
 {
     (void) AddExtension(XRES_NAME, 0, 0,
                         ProcResDispatch, SProcResDispatch,
diff --git a/Xext/xselinux_ext.c b/Xext/xselinux_ext.c
index d22c2f1..220e876 100644
--- a/Xext/xselinux_ext.c
+++ b/Xext/xselinux_ext.c
@@ -687,7 +687,7 @@ SELinuxResetProc(ExtensionEntry * extEntry)
 }
 
 void
-SELinuxExtensionInit(INITARGS)
+SELinuxExtensionInit(void)
 {
     ExtensionEntry *extEntry;
 
diff --git a/Xext/xtest.c b/Xext/xtest.c
index c7b087b..4938e3b 100644
--- a/Xext/xtest.c
+++ b/Xext/xtest.c
@@ -679,7 +679,7 @@ XTestExtensionTearDown(ExtensionEntry * e)
 }
 
 void
-XTestExtensionInit(INITARGS)
+XTestExtensionInit(void)
 {
     AddExtension(XTestExtensionName, 0, 0,
                  ProcXTestDispatch, SProcXTestDispatch,
diff --git a/hw/xfree86/common/xf86Module.h b/hw/xfree86/common/xf86Module.h
index 7671cea..9ba874c 100644
--- a/hw/xfree86/common/xf86Module.h
+++ b/hw/xfree86/common/xf86Module.h
@@ -171,7 +171,7 @@ typedef struct {
 
 #define INITARGS void
 
-typedef void (*InitExtension) (INITARGS);
+typedef void (*InitExtension) (void);
 
 typedef struct {
     InitExtension initFunc;
diff --git a/hw/xfree86/dixmods/dbemodule.c b/hw/xfree86/dixmods/dbemodule.c
index 5541eac..fea3d9f 100644
--- a/hw/xfree86/dixmods/dbemodule.c
+++ b/hw/xfree86/dixmods/dbemodule.c
@@ -7,7 +7,7 @@
 
 static MODULESETUPPROTO(dbeSetup);
 
-extern void DbeExtensionInit(INITARGS);
+extern void DbeExtensionInit(void);
 
 static ExtensionModule dbeExt = {
     DbeExtensionInit,
diff --git a/hw/xfree86/dixmods/extmod/modinit.h b/hw/xfree86/dixmods/extmod/modinit.h
index e7c7448..4c9b6e3 100644
--- a/hw/xfree86/dixmods/extmod/modinit.h
+++ b/hw/xfree86/dixmods/extmod/modinit.h
@@ -3,91 +3,78 @@
 #include <dix-config.h>
 #endif
 
-#ifndef INITARGS
-#define INITARGS void
-#endif
-
 #include <X11/extensions/shapeproto.h>
 
 #ifdef XTEST
-extern void XTestExtensionInit(INITARGS);
-
+extern void XTestExtensionInit(void);
 #include <X11/extensions/xtestproto.h>
 #endif
 
 #if 1
-extern void XTestExtension1Init(INITARGS);
+extern void XTestExtension1Init(void);
 #endif
 
 #if 1
-extern void XCMiscExtensionInit(INITARGS);
+extern void XCMiscExtensionInit(void);
 #endif
 
 #ifdef SCREENSAVER
-extern void ScreenSaverExtensionInit(INITARGS);
-
+extern void ScreenSaverExtensionInit(void);
 #include <X11/extensions/saver.h>
 #endif
 
 #ifdef XF86VIDMODE
-extern void XFree86VidModeExtensionInit(INITARGS);
-
+extern void XFree86VidModeExtensionInit(void);
 #include <X11/extensions/xf86vmproto.h>
 #endif
 
 #ifdef XFreeXDGA
-extern void XFree86DGAExtensionInit(INITARGS);
-extern void XFree86DGARegister(INITARGS);
-
+extern void XFree86DGAExtensionInit(void);
+extern void XFree86DGARegister(void);
 #include <X11/extensions/xf86dgaproto.h>
 #endif
 
 #ifdef DPMSExtension
-extern void DPMSExtensionInit(INITARGS);
-
+extern void DPMSExtensionInit(void);
 #include <X11/extensions/dpmsconst.h>
 #endif
 
 #ifdef XV
-extern void XvExtensionInit(INITARGS);
-extern void XvMCExtensionInit(INITARGS);
-extern void XvRegister(INITARGS);
-
+extern void XvExtensionInit(void);
+extern void XvMCExtensionInit(void);
+extern void XvRegister(void);
 #include <X11/extensions/Xv.h>
 #include <X11/extensions/XvMC.h>
 #endif
 
 #ifdef RES
-extern void ResExtensionInit(INITARGS);
-
+extern void ResExtensionInit(void);
 #include <X11/extensions/XResproto.h>
 #endif
 
 #ifdef SHM
-extern void ShmExtensionInit(INITARGS);
-
 #include <X11/extensions/shmproto.h>
+extern void ShmExtensionInit(void);
 extern void ShmRegisterFuncs(ScreenPtr pScreen, ShmFuncsPtr funcs);
 #endif
 
 #ifdef XSELINUX
-extern void SELinuxExtensionInit(INITARGS);
-
+extern void SELinuxExtensionInit(void);
 #include "xselinux.h"
 #endif
 
 #ifdef XEVIE
-extern void XevieExtensionInit(INITARGS);
+extern void XevieExtensionInit(void);
 #endif
 
 #if 1
-extern void SecurityExtensionInit(INITARGS);
+extern void SecurityExtensionInit(void);
 #endif
 
 #if 1
-extern void PanoramiXExtensionInit(INITARGS);
+extern void PanoramiXExtensionInit(void);
 #endif
 
 #if 1
-extern void XkbExtensionInit(INITARGS);
+extern void XkbExtensionInit(void);
 #endif
diff --git a/hw/xfree86/dixmods/extmod/xf86dga2.c b/hw/xfree86/dixmods/extmod/xf86dga2.c
index 9b7ec14..4cae949 100644
--- a/hw/xfree86/dixmods/extmod/xf86dga2.c
+++ b/hw/xfree86/dixmods/extmod/xf86dga2.c
@@ -1010,13 +1010,13 @@ ProcXDGADispatch(ClientPtr client)
 }
 
 void
-XFree86DGARegister(INITARGS)
+XFree86DGARegister(void)
 {
     XDGAEventBase = &DGAEventBase;
 }
 
 void
-XFree86DGAExtensionInit(INITARGS)
+XFree86DGAExtensionInit(void)
 {
     ExtensionEntry *extEntry;
 
diff --git a/hw/xfree86/dixmods/recordmod.c b/hw/xfree86/dixmods/recordmod.c
index b75cc3f..fe52fa8 100644
--- a/hw/xfree86/dixmods/recordmod.c
+++ b/hw/xfree86/dixmods/recordmod.c
@@ -8,7 +8,7 @@ extern Bool noTestExtensions;
 
 static MODULESETUPPROTO(recordSetup);
 
-extern void RecordExtensionInit(INITARGS);
+extern void RecordExtensionInit(void);
 
 static ExtensionModule recordExt = {
     RecordExtensionInit,
diff --git a/hw/xfree86/dri/drimodule.c b/hw/xfree86/dri/drimodule.c
index 83eca4e..eb42ef6 100644
--- a/hw/xfree86/dri/drimodule.c
+++ b/hw/xfree86/dri/drimodule.c
@@ -57,8 +57,7 @@ static XF86ModuleVersionInfo VersRec = {
     {0, 0, 0, 0}
 };
 
-extern void XFree86DRIExtensionInit(INITARGS);
-
+extern void XFree86DRIExtensionInit(void);
 #define _XF86DRI_SERVER_
 #include <X11/dri/xf86driproto.h>
 
diff --git a/mi/miinitext.c b/mi/miinitext.c
index ca21b6f..13e1b68 100644
--- a/mi/miinitext.c
+++ b/mi/miinitext.c
@@ -96,8 +96,7 @@ SOFTWARE.
 extern Bool noGEExtension;
 
 #ifndef XFree86LOADER
-#define INITARGS void
-typedef void (*InitExtension) (INITARGS);
+typedef void (*InitExtension) (void);
 #else                           /* XFree86Loader */
 #include "loaderProcs.h"
 #endif
@@ -128,84 +127,80 @@ typedef void (*InitExtension) (INITARGS);
 
 /* FIXME: this whole block of externs should be from the appropriate headers */
 #ifdef MITSHM
-extern void ShmExtensionInit(INITARGS);
+extern void ShmExtensionInit(void);
 #endif
 #ifdef PANORAMIX
-extern void PanoramiXExtensionInit(INITARGS);
+extern void PanoramiXExtensionInit(void);
 #endif
 #ifdef INXQUARTZ
-extern void PseudoramiXExtensionInit(INITARGS);
+extern void PseudoramiXExtensionInit(void);
 #endif
-extern void XInputExtensionInit(INITARGS);
-
+extern void XInputExtensionInit(void);
 #ifdef XTEST
-extern void XTestExtensionInit(INITARGS);
+extern void XTestExtensionInit(void);
 #endif
-extern void BigReqExtensionInit(INITARGS);
-
+extern void BigReqExtensionInit(void);
 #ifdef SCREENSAVER
-extern void ScreenSaverExtensionInit(INITARGS);
+extern void ScreenSaverExtensionInit(void);
 #endif
 #ifdef XV
-extern void XvExtensionInit(INITARGS);
-extern void XvMCExtensionInit(INITARGS);
+extern void XvExtensionInit(void);
+extern void XvMCExtensionInit(void);
 #endif
-extern void SyncExtensionInit(INITARGS);
-extern void XkbExtensionInit(INITARGS);
-extern void XCMiscExtensionInit(INITARGS);
-
+extern void SyncExtensionInit(void);
+extern void XkbExtensionInit(void);
+extern void XCMiscExtensionInit(void);
 #ifdef XRECORD
-extern void RecordExtensionInit(INITARGS);
+extern void RecordExtensionInit(void);
 #endif
 #ifdef DBE
-extern void DbeExtensionInit(INITARGS);
+extern void DbeExtensionInit(void);
 #endif
 #ifdef XCSECURITY
-extern void SecurityExtensionInit(INITARGS);
+extern void SecurityExtensionInit(void);
 #endif
 #ifdef XSELINUX
-extern void SELinuxExtensionInit(INITARGS);
+extern void SELinuxExtensionInit(void);
 #endif
 #ifdef XF86BIGFONT
-extern void XFree86BigfontExtensionInit(INITARGS);
+extern void XFree86BigfontExtensionInit(void);
 #endif
 #ifdef XF86VIDMODE
-extern void XFree86VidModeExtensionInit(INITARGS);
+extern void XFree86VidModeExtensionInit(void);
 #endif
 #ifdef XFreeXDGA
-extern void XFree86DGAExtensionInit(INITARGS);
+extern void XFree86DGAExtensionInit(void);
 #endif
 #ifdef GLXEXT
 typedef struct __GLXprovider __GLXprovider;
 extern __GLXprovider __glXDRISWRastProvider;
-extern void GlxPushProvider(__GLXprovider * impl);
-extern void GlxExtensionInit(INITARGS);
+extern void GlxPushProvider(__GLXprovider *impl);
+extern void GlxExtensionInit(void);
 #endif
 #ifdef XF86DRI
-extern void XFree86DRIExtensionInit(INITARGS);
+extern void XFree86DRIExtensionInit(void);
 #endif
 #ifdef DPMSExtension
-extern void DPMSExtensionInit(INITARGS);
+extern void DPMSExtensionInit(void);
 #endif
-extern void RenderExtensionInit(INITARGS);
-
+extern void RenderExtensionInit(void);
 #ifdef RANDR
-extern void RRExtensionInit(INITARGS);
+extern void RRExtensionInit(void);
 #endif
 #ifdef RES
-extern void ResExtensionInit(INITARGS);
+extern void ResExtensionInit(void);
 #endif
 #ifdef DMXEXT
-extern void DMXExtensionInit(INITARGS);
+extern void DMXExtensionInit(void);
 #endif
 #ifdef XFIXES
-extern void XFixesExtensionInit(INITARGS);
+extern void XFixesExtensionInit(void);
 #endif
 #ifdef DAMAGE
-extern void DamageExtensionInit(INITARGS);
+extern void DamageExtensionInit(void);
 #endif
 #ifdef COMPOSITE
-extern void CompositeExtensionInit(INITARGS);
+extern void CompositeExtensionInit(void);
 #endif
 
 /* The following is only a small first step towards run-time
commit bddb8c6cbe52ba9923b1d36d01f5ac9391b0ec0e
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:02:52 2012 +0100

    Xinerama: Fix ExtensionInit prototype
    
    Huh, so I guess INITARGS used to be int argc, char *argv then.  Either
    way, it's now void, so fix that ...
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Cyril Brulebois <kibi at debian.org>
    Reviewed-by: Jamey Sharp <jamey at minilop.net>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/Xext/panoramiX.c b/Xext/panoramiX.c
index bb253c3..df67c00 100644
--- a/Xext/panoramiX.c
+++ b/Xext/panoramiX.c
@@ -434,7 +434,7 @@ XineramaReinitData(void)
  */
 
 void
-PanoramiXExtensionInit(int argc, char *argv[])
+PanoramiXExtensionInit(void)
 {
     int i;
     Bool success = FALSE;
diff --git a/hw/xfree86/dixmods/extmod/modinit.h b/hw/xfree86/dixmods/extmod/modinit.h
index 9753fe0..e7c7448 100644
--- a/hw/xfree86/dixmods/extmod/modinit.h
+++ b/hw/xfree86/dixmods/extmod/modinit.h
@@ -85,7 +85,7 @@ extern void SecurityExtensionInit(INITARGS);
 #endif
 
 #if 1
-extern void PanoramiXExtensionInit(int argc, char *argv[]);
+extern void PanoramiXExtensionInit(INITARGS);
 #endif
 
 #if 1
commit eb9661fef9f59587f898371f97a0952ac14d125f
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:02:51 2012 +0100

    Make extension.h self-contained, remove C++ externs
    
    externsion.h required bits from Xfuncproto.h and dixstruct.h, but
    included neither; fix that.
    
    It also had _XFUNCPROTOBEGIN and _XFUNCPROTOEND wrappers, which is a bit
    pointless for a server-only library, as it's only needed for C++.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Cyril Brulebois <kibi at debian.org>
    Reviewed-by: Jamey Sharp <jamey at minilop.net>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/include/extension.h b/include/extension.h
index c7f51b9..f0560d7 100644
--- a/include/extension.h
+++ b/include/extension.h
@@ -47,7 +47,9 @@ SOFTWARE.
 #ifndef EXTENSION_H
 #define EXTENSION_H
 
-_XFUNCPROTOBEGIN
+#include <X11/Xfuncproto.h>
+
+#include "dixstruct.h"
 
 extern _X_EXPORT unsigned short StandardMinorOpcode(ClientPtr /*client */ );
 
@@ -60,5 +62,4 @@ extern _X_EXPORT void InitExtensions(int argc, char **argv);
 
 extern _X_EXPORT void CloseDownExtensions(void);
 
-_XFUNCPROTOEND
 #endif                          /* EXTENSION_H */
commit 854c1fa4a1e90288d1e2f3777fac3e1a9acb1235
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:02:50 2012 +0100

    Add a common ARRAY_SIZE macro to dix.h
    
    Does what it says on the box, replacing those from Xi/ and glx/.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Cyril Brulebois <kibi at debian.org>
    Reviewed-by: Jamey Sharp <jamey at minilop.net>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/Xi/extinit.c b/Xi/extinit.c
index bcea410..52d248b 100644
--- a/Xi/extinit.c
+++ b/Xi/extinit.c
@@ -49,8 +49,6 @@ SOFTWARE.
  *  Dispatch routines and initialization routines for the X input extension.
  *
  */
-#define ARRAY_SIZE(_a)        (sizeof((_a)) / sizeof((_a)[0]))
-
 #define	 NUMTYPES 15
 
 #ifdef HAVE_DIX_CONFIG_H
diff --git a/glx/glxdricommon.c b/glx/glxdricommon.c
index 44d5a3e..c90f380 100644
--- a/glx/glxdricommon.c
+++ b/glx/glxdricommon.c
@@ -107,8 +107,6 @@ __ATTRIB(__DRI_ATTRIB_BUFFER_SIZE, rgbBits),
         __ATTRIB(__DRI_ATTRIB_BIND_TO_MIPMAP_TEXTURE, bindToMipmapTexture),
         __ATTRIB(__DRI_ATTRIB_YINVERTED, yInverted),};
 
-#define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))
-
 static void
 setScalar(__GLXconfig * config, unsigned int attrib, unsigned int value)
 {
diff --git a/include/dix.h b/include/dix.h
index 5bc1daa..74123b5 100644
--- a/include/dix.h
+++ b/include/dix.h
@@ -64,6 +64,8 @@ SOFTWARE.
 #define REQUEST(type) \
 	type *stuff = (type *)client->requestBuffer
 
+#define ARRAY_SIZE(a)  (sizeof((a)) / sizeof((a)[0]))
+
 #define REQUEST_SIZE_MATCH(req)\
     if ((sizeof(req) >> 2) != client->req_len)\
          return(BadLength)
commit 67953d6975ef2ee573b95e7641aaf3d72e9f8379
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:02:49 2012 +0100

    Xorg: Link XKB DDX library after core server libs
    
    libxorgxkb.a contains a number of libraries which are used by XKB action
    code to call back into the DDX, e.g. for VT switching, termination, grab
    breaking, et al.  Make sure libxkb.a comes first in the link order, so
    it can mark XkbDDX* as used in order for the linker to not discard them.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/Makefile.am b/hw/xfree86/Makefile.am
index 4d5d576..f74691b 100644
--- a/hw/xfree86/Makefile.am
+++ b/hw/xfree86/Makefile.am
@@ -54,8 +54,8 @@ LOCAL_LIBS = \
             ramdac/libramdac.la \
             ddc/libddc.la \
             i2c/libi2c.la \
-            dixmods/libxorgxkb.la \
             $(XORG_LIBS) \
+            dixmods/libxorgxkb.la \
             $(top_builddir)/mi/libmi.la \
             $(top_builddir)/os/libos.la
 Xorg_LDADD = \
commit 656af2c7e73d948338683675e14cd827b46a97c4
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:02:46 2012 +0100

    Don't make failure to -nolisten fatal
    
    If failing to disable a protocol specified by -nolisten failed, we'd
    throw a FatalError and bomb startup entirely.  From poking at xtrans, it
    looks like the only way we can get a failure here is because we've
    specified a protocol name which doesn't exist, which probably doesn't
    constitute a security risk.
    
    And it makes it possible to start gdm even though you've built with
    --disable-tcp-transport.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Alan Coopersmith <alan.coopersmith at oracle.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/os/utils.c b/os/utils.c
index 2537934..b00d38b 100644
--- a/os/utils.c
+++ b/os/utils.c
@@ -757,8 +757,8 @@ ProcessCommandLine(int argc, char *argv[])
         else if (strcmp(argv[i], "-nolisten") == 0) {
             if (++i < argc) {
                 if (_XSERVTransNoListen(argv[i]))
-                    FatalError("Failed to disable listen for %s transport",
-                               argv[i]);
+                    ErrorF("Failed to disable listen for %s transport",
+                           argv[i]);
             }
             else
                 UseMsg();
commit dc0c2dd92d5eb314582ea10830678753824375d9
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Jul 10 02:02:45 2012 +0100

    Xext: Add hashtable.h to sources to fix distcheck
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Alan Coopersmith <alan.coopersmith at oracle.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/Xext/Makefile.am b/Xext/Makefile.am
index 5929a3e..4082de7 100644
--- a/Xext/Makefile.am
+++ b/Xext/Makefile.am
@@ -50,7 +50,7 @@ MODULE_SRCS  += $(XV_SRCS)
 endif
 
 # XResource extension: lets clients get data about per-client resource usage
-RES_SRCS = hashtable.c xres.c
+RES_SRCS = hashtable.c hashtable.h xres.c
 if RES
 MODULE_SRCS  += $(RES_SRCS)
 endif


More information about the xorg-commit mailing list