[xf86-video-trident,3/3] Rename blade_accel_exa.c to blade_exa.c

Submitted by Kevin Brace on Feb. 21, 2019, 9:18 p.m.

Details

Message ID 1550783889-7525-4-git-send-email-kevinbrace@gmx.com
State New
Headers show
Series "Convert blade_accel_exa.c to blade_exa.c" ( rev: 1 ) in X.org

Not browsing as part of any series.

Commit Message

Kevin Brace Feb. 21, 2019, 9:18 p.m.
Signed-off-by: Kevin Brace <kevinbrace@gmx.com>
---
 src/Makefile.am       |   2 +-
 src/blade_accel_exa.c | 333 --------------------------------------------------
 src/blade_exa.c       | 333 ++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 334 insertions(+), 334 deletions(-)
 delete mode 100644 src/blade_accel_exa.c
 create mode 100644 src/blade_exa.c

Patch hide | download patch | download mbox

diff --git a/src/Makefile.am b/src/Makefile.am
index d04dce8..cdb58ab 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -30,7 +30,7 @@  trident_drv_la_LIBADD = -lm
 trident_drv_ladir = @moduledir@/drivers
 
 trident_drv_la_SOURCES = \
-         blade_accel_exa.c \
+         blade_exa.c \
          blade_xaa.c \
          compat-api.h \
          image_xaa.c \
diff --git a/src/blade_accel_exa.c b/src/blade_accel_exa.c
deleted file mode 100644
index a3e1ea0..0000000
--- a/src/blade_accel_exa.c
+++ /dev/null
@@ -1,333 +0,0 @@ 
-/*
- * Copyright 1997-2003 by Alan Hourihane, North Wales, UK.
- * Copyright (c) 2006, Jesse Barnes <jbarnes@virtuousgeek.org>
- *
- * 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 the
- * authors not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior
- * permission.  The authors make no representations about the
- * suitability of this software for any purpose.  It is provided
- * "as is" without express or implied warranty.
- *
- * THE AUTHORS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
- * IN NO EVENT SHALL THE AUTHORS 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.
- *
- * Authors:  Alan Hourihane, <alanh@fairlite.demon.co.uk>
- *           Jesse Barnes <jbarnes@virtuousgeek.org>
- *
- * Trident Blade3D EXA support.
- * TODO:
- *   Composite hooks (some ops/arg. combos may not be supported)
- *   Upload/Download from screen (is this even possible
- *                                with this chip?)
- *   Fast mixed directoion Blts
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "xf86.h"
-#include "xf86_OSproc.h"
-
-#include "xf86Pci.h"
-
-#include "exa.h"
-
-#include "trident.h"
-#include "trident_regs.h"
-
-#include "xaarop.h"
-
-#undef REPLICATE
-#define REPLICATE(r, bpp)                           \
-{                                                   \
-    if (bpp == 16) {                                \
-        r = ((r & 0xFFFF) << 16) | (r & 0xFFFF);    \
-    } else                                          \
-        if (bpp == 8) {                             \
-            r &= 0xFF;                              \
-            r |= (r << 8);                          \
-            r |= (r << 16);                         \
-    }                                               \
-}
-
-static int rop_table[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 */
-};
-
-static int
-GetCopyROP(int rop)
-{
-    return rop_table[rop];
-}
-
-static unsigned long
-GetDepth(int depth)
-{
-    unsigned long ret;
-
-    switch (depth) {
-    case 8:
-        ret = 0;
-        break;
-    case 15:
-        ret = 5UL << 29; /* 555 */
-    case 16:
-        ret = 1UL << 29; /* 565 */
-        break;
-    case 32:
-        ret = 2UL << 29;
-        break;
-    default:
-        ret = 0;
-        break;
-    }
-
-    return ret;
-}
-
-static Bool
-PrepareSolid(PixmapPtr pPixmap,
-                int rop, Pixel planemask, Pixel color)
-{
-    TRIDENTPtr pTrident = TRIDENTPTR(
-            xf86ScreenToScrn(pPixmap->drawable.pScreen));
-
-    REPLICATE(color, pPixmap->drawable.bitsPerPixel);
-    BLADE_OUT(GER_FGCOLOR, color);
-    BLADE_OUT(GER_ROP, GetCopyROP(rop));
-    pTrident->BltScanDirection = 0;
-
-    return TRUE;
-}
-
-static void
-Solid(PixmapPtr pPixmap,
-        int x, int y,
-        int x2, int y2)
-{
-    TRIDENTPtr pTrident = TRIDENTPTR(
-                        xf86ScreenToScrn(pPixmap->drawable.pScreen));
-    int dst_stride = (pPixmap->drawable.width + 7) / 8;
-    int dst_off = exaGetPixmapOffset(pPixmap) / 8;
-
-    BLADE_OUT(GER_DSTBASE0,
-                GetDepth(pPixmap->drawable.bitsPerPixel) |
-                (dst_stride << 20) |
-                dst_off);
-
-    BLADE_OUT(GER_DRAW_CMD,
-                GER_OP_LINE |
-                pTrident->BltScanDirection |
-                GER_DRAW_SRC_COLOR | GER_ROP_ENABLE | GER_SRC_CONST);
-
-    BLADE_OUT(GER_DST1, (y << 16) | x);
-    BLADE_OUT(GER_DST2, (((y2 - 1) & 0xfff) << 16) |
-                        ((x2 - 1) & 0xfff));
-}
-
-static void
-DoneSolid(PixmapPtr pPixmap)
-{
-}
-
-static Bool
-PrepareCopy(PixmapPtr pSrcPixmap, PixmapPtr pDstPixmap,
-            int xdir, int ydir,
-            int alu, Pixel planemask)
-{
-    TRIDENTPtr pTrident = TRIDENTPTR(
-                    xf86ScreenToScrn(pSrcPixmap->drawable.pScreen));
-    int src_stride = (pSrcPixmap->drawable.width + 7) / 8;
-    int src_off = exaGetPixmapOffset(pSrcPixmap) / 8;
-    int dst_stride = (pDstPixmap->drawable.width + 7) / 8;
-    int dst_off = exaGetPixmapOffset(pDstPixmap) / 8;
-
-    pTrident->BltScanDirection = 0;
-
-    REPLICATE(planemask, pSrcPixmap->drawable.bitsPerPixel);
-    if (planemask != (unsigned int) -1) {
-        BLADE_OUT(GER_BITMASK, ~planemask);
-        pTrident->BltScanDirection |= (1 << 5);
-    }
-
-    BLADE_OUT(GER_SRCBASE0,
-                GetDepth(pSrcPixmap->drawable.bitsPerPixel) |
-                (src_stride << 20) |
-                src_off);
-
-    BLADE_OUT(GER_DSTBASE0,
-                GetDepth(pDstPixmap->drawable.bitsPerPixel) |
-                (dst_stride << 20) |
-                dst_off);
-
-    if ((xdir < 0) || (ydir < 0))
-        pTrident->BltScanDirection |= (1 << 1);
-
-    BLADE_OUT(GER_ROP, GetCopyROP(alu));
-
-    return TRUE;
-}
-
-static void
-Copy(PixmapPtr pDstPixmap,
-        int x1, int y1,
-        int x2, int y2,
-        int w, int h)
-{
-    TRIDENTPtr pTrident = TRIDENTPTR(
-                    xf86ScreenToScrn(pDstPixmap->drawable.pScreen));
-
-    BLADE_OUT(GER_DRAW_CMD, GER_OP_BLT_HOST |
-                            GER_DRAW_SRC_COLOR |
-                            GER_ROP_ENABLE |
-                            GER_BLT_SRC_FB |
-                            pTrident->BltScanDirection);
-
-    if (pTrident->BltScanDirection) {
-        BLADE_OUT(GER_SRC1, ((y1 + h - 1) << 16) | (x1 + w - 1));
-        BLADE_OUT(GER_SRC2, (y1 << 16) | x1);
-        BLADE_OUT(GER_DST1, ((y2 + h - 1) << 16) | (x2 + w - 1));
-        BLADE_OUT(GER_DST2, ((y2 & 0xfff) << 16) | (x2 & 0xfff));
-    } else {
-        BLADE_OUT(GER_SRC1, (y1 << 16) | x1);
-        BLADE_OUT(GER_SRC2, ((y1 + h - 1) << 16) | (x1 + w - 1));
-        BLADE_OUT(GER_DST1, (y2 << 16) | x2);
-        BLADE_OUT(GER_DST2, ((((y2 + h - 1) & 0xfff) << 16) |
-                            ((x2 + w - 1) & 0xfff)));
-    }
-}
-
-static void
-DoneCopy(PixmapPtr pDstPixmap)
-{
-}
-
-static int
-MarkSync(ScreenPtr pScreen)
-{
-    return 0;
-}
-
-static void
-WaitMarker(ScreenPtr pScreen,
-            int marker)
-{
-    TRIDENTPtr pTrident = TRIDENTPTR(xf86ScreenToScrn(pScreen));
-    int busy;
-    int cnt = 10000000;
-
-    BLADE_OUT(GER_PATSTYLE, 0); /* Clear pattern & style first? */
-
-    BLADEBUSY(busy);
-    while (busy != 0) {
-        if (--cnt < 0) {
-            ErrorF("GE timeout\n");
-            BLADE_OUT(GER_CONTROL, GER_CTL_RESET);
-            BLADE_OUT(GER_CONTROL, GER_CTL_RESUME);
-            break;
-        }
-
-        BLADEBUSY(busy);
-    }
-}
-
-static void
-BladeInitializeAccelerator(ScrnInfoPtr pScrn)
-{
-    TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
-
-    BLADE_OUT(GER_DSTBASE0, 0);
-    BLADE_OUT(GER_DSTBASE1, 0);
-    BLADE_OUT(GER_DSTBASE2, 0);
-    BLADE_OUT(GER_DSTBASE3, 0);
-    BLADE_OUT(GER_SRCBASE0, 0);
-    BLADE_OUT(GER_SRCBASE1, 0);
-    BLADE_OUT(GER_SRCBASE2, 0);
-    BLADE_OUT(GER_SRCBASE3, 0);
-    BLADE_OUT(GER_PATSTYLE, 0);
-}
-
-Bool
-BladeExaInit(ScreenPtr pScreen)
-{
-    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
-    TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
-    ExaDriverPtr ExaDriver;
-
-    if (pTrident->NoAccel)
-        return FALSE;
-
-    if (!(ExaDriver = exaDriverAlloc())) {
-        pTrident->NoAccel = TRUE;
-        return FALSE;
-    }
-
-    ExaDriver->exa_major = 2;
-    ExaDriver->exa_minor = 0;
-
-    pTrident->EXADriverPtr = ExaDriver;
-
-    pTrident->InitializeAccelerator = BladeInitializeAccelerator;
-    BladeInitializeAccelerator(pScrn);
-
-    ExaDriver->memoryBase = pTrident->FbBase;
-    ExaDriver->memorySize = pScrn->videoRam * 1024;
-
-    ExaDriver->offScreenBase = pScrn->displayWidth * pScrn->virtualY
-            * ((pScrn->bitsPerPixel + 7) / 8);
-
-    if (ExaDriver->memorySize > ExaDriver->offScreenBase)
-        ExaDriver->flags |= EXA_OFFSCREEN_PIXMAPS;
-    else {
-        xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-                "Not enough video RAM for "
-                        "offscreen memory manager. Xv disabled\n");
-        /* disable Xv here... */
-    }
-
-    ExaDriver->pixmapOffsetAlign = 32;
-    ExaDriver->pixmapPitchAlign = 32;
-    ExaDriver->maxX = 2047;
-    ExaDriver->maxY = 2047;
-
-    ExaDriver->flags |= EXA_TWO_BITBLT_DIRECTIONS;
-
-    ExaDriver->MarkSync = MarkSync;
-    ExaDriver->WaitMarker = WaitMarker;
-
-    /* Solid fill & copy, the bare minimum */
-    ExaDriver->PrepareSolid = PrepareSolid;
-    ExaDriver->Solid = Solid;
-    ExaDriver->DoneSolid = DoneSolid;
-    ExaDriver->PrepareCopy = PrepareCopy;
-    ExaDriver->Copy = Copy;
-    ExaDriver->DoneCopy = DoneCopy;
-
-    return exaDriverInit(pScreen, ExaDriver);
-}
diff --git a/src/blade_exa.c b/src/blade_exa.c
new file mode 100644
index 0000000..a3e1ea0
--- /dev/null
+++ b/src/blade_exa.c
@@ -0,0 +1,333 @@ 
+/*
+ * Copyright 1997-2003 by Alan Hourihane, North Wales, UK.
+ * Copyright (c) 2006, Jesse Barnes <jbarnes@virtuousgeek.org>
+ *
+ * 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 the
+ * authors not be used in advertising or publicity pertaining to
+ * distribution of the software without specific, written prior
+ * permission.  The authors make no representations about the
+ * suitability of this software for any purpose.  It is provided
+ * "as is" without express or implied warranty.
+ *
+ * THE AUTHORS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
+ * IN NO EVENT SHALL THE AUTHORS 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.
+ *
+ * Authors:  Alan Hourihane, <alanh@fairlite.demon.co.uk>
+ *           Jesse Barnes <jbarnes@virtuousgeek.org>
+ *
+ * Trident Blade3D EXA support.
+ * TODO:
+ *   Composite hooks (some ops/arg. combos may not be supported)
+ *   Upload/Download from screen (is this even possible
+ *                                with this chip?)
+ *   Fast mixed directoion Blts
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "xf86.h"
+#include "xf86_OSproc.h"
+
+#include "xf86Pci.h"
+
+#include "exa.h"
+
+#include "trident.h"
+#include "trident_regs.h"
+
+#include "xaarop.h"
+
+#undef REPLICATE
+#define REPLICATE(r, bpp)                           \
+{                                                   \
+    if (bpp == 16) {                                \
+        r = ((r & 0xFFFF) << 16) | (r & 0xFFFF);    \
+    } else                                          \
+        if (bpp == 8) {                             \
+            r &= 0xFF;                              \
+            r |= (r << 8);                          \
+            r |= (r << 16);                         \
+    }                                               \
+}
+
+static int rop_table[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 */
+};
+
+static int
+GetCopyROP(int rop)
+{
+    return rop_table[rop];
+}
+
+static unsigned long
+GetDepth(int depth)
+{
+    unsigned long ret;
+
+    switch (depth) {
+    case 8:
+        ret = 0;
+        break;
+    case 15:
+        ret = 5UL << 29; /* 555 */
+    case 16:
+        ret = 1UL << 29; /* 565 */
+        break;
+    case 32:
+        ret = 2UL << 29;
+        break;
+    default:
+        ret = 0;
+        break;
+    }
+
+    return ret;
+}
+
+static Bool
+PrepareSolid(PixmapPtr pPixmap,
+                int rop, Pixel planemask, Pixel color)
+{
+    TRIDENTPtr pTrident = TRIDENTPTR(
+            xf86ScreenToScrn(pPixmap->drawable.pScreen));
+
+    REPLICATE(color, pPixmap->drawable.bitsPerPixel);
+    BLADE_OUT(GER_FGCOLOR, color);
+    BLADE_OUT(GER_ROP, GetCopyROP(rop));
+    pTrident->BltScanDirection = 0;
+
+    return TRUE;
+}
+
+static void
+Solid(PixmapPtr pPixmap,
+        int x, int y,
+        int x2, int y2)
+{
+    TRIDENTPtr pTrident = TRIDENTPTR(
+                        xf86ScreenToScrn(pPixmap->drawable.pScreen));
+    int dst_stride = (pPixmap->drawable.width + 7) / 8;
+    int dst_off = exaGetPixmapOffset(pPixmap) / 8;
+
+    BLADE_OUT(GER_DSTBASE0,
+                GetDepth(pPixmap->drawable.bitsPerPixel) |
+                (dst_stride << 20) |
+                dst_off);
+
+    BLADE_OUT(GER_DRAW_CMD,
+                GER_OP_LINE |
+                pTrident->BltScanDirection |
+                GER_DRAW_SRC_COLOR | GER_ROP_ENABLE | GER_SRC_CONST);
+
+    BLADE_OUT(GER_DST1, (y << 16) | x);
+    BLADE_OUT(GER_DST2, (((y2 - 1) & 0xfff) << 16) |
+                        ((x2 - 1) & 0xfff));
+}
+
+static void
+DoneSolid(PixmapPtr pPixmap)
+{
+}
+
+static Bool
+PrepareCopy(PixmapPtr pSrcPixmap, PixmapPtr pDstPixmap,
+            int xdir, int ydir,
+            int alu, Pixel planemask)
+{
+    TRIDENTPtr pTrident = TRIDENTPTR(
+                    xf86ScreenToScrn(pSrcPixmap->drawable.pScreen));
+    int src_stride = (pSrcPixmap->drawable.width + 7) / 8;
+    int src_off = exaGetPixmapOffset(pSrcPixmap) / 8;
+    int dst_stride = (pDstPixmap->drawable.width + 7) / 8;
+    int dst_off = exaGetPixmapOffset(pDstPixmap) / 8;
+
+    pTrident->BltScanDirection = 0;
+
+    REPLICATE(planemask, pSrcPixmap->drawable.bitsPerPixel);
+    if (planemask != (unsigned int) -1) {
+        BLADE_OUT(GER_BITMASK, ~planemask);
+        pTrident->BltScanDirection |= (1 << 5);
+    }
+
+    BLADE_OUT(GER_SRCBASE0,
+                GetDepth(pSrcPixmap->drawable.bitsPerPixel) |
+                (src_stride << 20) |
+                src_off);
+
+    BLADE_OUT(GER_DSTBASE0,
+                GetDepth(pDstPixmap->drawable.bitsPerPixel) |
+                (dst_stride << 20) |
+                dst_off);
+
+    if ((xdir < 0) || (ydir < 0))
+        pTrident->BltScanDirection |= (1 << 1);
+
+    BLADE_OUT(GER_ROP, GetCopyROP(alu));
+
+    return TRUE;
+}
+
+static void
+Copy(PixmapPtr pDstPixmap,
+        int x1, int y1,
+        int x2, int y2,
+        int w, int h)
+{
+    TRIDENTPtr pTrident = TRIDENTPTR(
+                    xf86ScreenToScrn(pDstPixmap->drawable.pScreen));
+
+    BLADE_OUT(GER_DRAW_CMD, GER_OP_BLT_HOST |
+                            GER_DRAW_SRC_COLOR |
+                            GER_ROP_ENABLE |
+                            GER_BLT_SRC_FB |
+                            pTrident->BltScanDirection);
+
+    if (pTrident->BltScanDirection) {
+        BLADE_OUT(GER_SRC1, ((y1 + h - 1) << 16) | (x1 + w - 1));
+        BLADE_OUT(GER_SRC2, (y1 << 16) | x1);
+        BLADE_OUT(GER_DST1, ((y2 + h - 1) << 16) | (x2 + w - 1));
+        BLADE_OUT(GER_DST2, ((y2 & 0xfff) << 16) | (x2 & 0xfff));
+    } else {
+        BLADE_OUT(GER_SRC1, (y1 << 16) | x1);
+        BLADE_OUT(GER_SRC2, ((y1 + h - 1) << 16) | (x1 + w - 1));
+        BLADE_OUT(GER_DST1, (y2 << 16) | x2);
+        BLADE_OUT(GER_DST2, ((((y2 + h - 1) & 0xfff) << 16) |
+                            ((x2 + w - 1) & 0xfff)));
+    }
+}
+
+static void
+DoneCopy(PixmapPtr pDstPixmap)
+{
+}
+
+static int
+MarkSync(ScreenPtr pScreen)
+{
+    return 0;
+}
+
+static void
+WaitMarker(ScreenPtr pScreen,
+            int marker)
+{
+    TRIDENTPtr pTrident = TRIDENTPTR(xf86ScreenToScrn(pScreen));
+    int busy;
+    int cnt = 10000000;
+
+    BLADE_OUT(GER_PATSTYLE, 0); /* Clear pattern & style first? */
+
+    BLADEBUSY(busy);
+    while (busy != 0) {
+        if (--cnt < 0) {
+            ErrorF("GE timeout\n");
+            BLADE_OUT(GER_CONTROL, GER_CTL_RESET);
+            BLADE_OUT(GER_CONTROL, GER_CTL_RESUME);
+            break;
+        }
+
+        BLADEBUSY(busy);
+    }
+}
+
+static void
+BladeInitializeAccelerator(ScrnInfoPtr pScrn)
+{
+    TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
+
+    BLADE_OUT(GER_DSTBASE0, 0);
+    BLADE_OUT(GER_DSTBASE1, 0);
+    BLADE_OUT(GER_DSTBASE2, 0);
+    BLADE_OUT(GER_DSTBASE3, 0);
+    BLADE_OUT(GER_SRCBASE0, 0);
+    BLADE_OUT(GER_SRCBASE1, 0);
+    BLADE_OUT(GER_SRCBASE2, 0);
+    BLADE_OUT(GER_SRCBASE3, 0);
+    BLADE_OUT(GER_PATSTYLE, 0);
+}
+
+Bool
+BladeExaInit(ScreenPtr pScreen)
+{
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
+    TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
+    ExaDriverPtr ExaDriver;
+
+    if (pTrident->NoAccel)
+        return FALSE;
+
+    if (!(ExaDriver = exaDriverAlloc())) {
+        pTrident->NoAccel = TRUE;
+        return FALSE;
+    }
+
+    ExaDriver->exa_major = 2;
+    ExaDriver->exa_minor = 0;
+
+    pTrident->EXADriverPtr = ExaDriver;
+
+    pTrident->InitializeAccelerator = BladeInitializeAccelerator;
+    BladeInitializeAccelerator(pScrn);
+
+    ExaDriver->memoryBase = pTrident->FbBase;
+    ExaDriver->memorySize = pScrn->videoRam * 1024;
+
+    ExaDriver->offScreenBase = pScrn->displayWidth * pScrn->virtualY
+            * ((pScrn->bitsPerPixel + 7) / 8);
+
+    if (ExaDriver->memorySize > ExaDriver->offScreenBase)
+        ExaDriver->flags |= EXA_OFFSCREEN_PIXMAPS;
+    else {
+        xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+                "Not enough video RAM for "
+                        "offscreen memory manager. Xv disabled\n");
+        /* disable Xv here... */
+    }
+
+    ExaDriver->pixmapOffsetAlign = 32;
+    ExaDriver->pixmapPitchAlign = 32;
+    ExaDriver->maxX = 2047;
+    ExaDriver->maxY = 2047;
+
+    ExaDriver->flags |= EXA_TWO_BITBLT_DIRECTIONS;
+
+    ExaDriver->MarkSync = MarkSync;
+    ExaDriver->WaitMarker = WaitMarker;
+
+    /* Solid fill & copy, the bare minimum */
+    ExaDriver->PrepareSolid = PrepareSolid;
+    ExaDriver->Solid = Solid;
+    ExaDriver->DoneSolid = DoneSolid;
+    ExaDriver->PrepareCopy = PrepareCopy;
+    ExaDriver->Copy = Copy;
+    ExaDriver->DoneCopy = DoneCopy;
+
+    return exaDriverInit(pScreen, ExaDriver);
+}