summaryrefslogtreecommitdiff
path: root/driver/xf86-video-i740/src/i740_accel.c
diff options
context:
space:
mode:
Diffstat (limited to 'driver/xf86-video-i740/src/i740_accel.c')
-rw-r--r--driver/xf86-video-i740/src/i740_accel.c406
1 files changed, 0 insertions, 406 deletions
diff --git a/driver/xf86-video-i740/src/i740_accel.c b/driver/xf86-video-i740/src/i740_accel.c
deleted file mode 100644
index b1e982c09..000000000
--- a/driver/xf86-video-i740/src/i740_accel.c
+++ /dev/null
@@ -1,406 +0,0 @@
-
-/**************************************************************************
-
-Copyright 1998-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:
- * Daryll Strauss <daryll@precisioninsight.com>
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "xf86.h"
-#include "xf86_OSproc.h"
-
-#include "compiler.h"
-
-#include "xf86Pci.h"
-
-#include "vgaHW.h"
-
-#include "xf86xv.h"
-#include "i740.h"
-
-#ifdef HAVE_XAA_H
-static unsigned int i740Rop[16] = {
- 0x00, /* GXclear */
- 0x88, /* GXand */
- 0x44, /* GXandReverse */
- 0xCC, /* GXcopy */
- 0x22, /* GXandInvert */
- 0xAA, /* GXnoop */
- 0x66, /* GXxor */
- 0xEE, /* GXor */
- 0x11, /* GXnor */
- 0x99, /* GXequiv */
- 0x55, /* GXinvert */
- 0xDD, /* GXorReverse */
- 0x33, /* GXcopyInvert */
- 0xBB, /* GXorInverted */
- 0x77, /* GXnand */
- 0xFF /* GXset */
-};
-
-static unsigned int i740PatternRop[16] = {
- 0x00, /* GXclear */
- 0xA0, /* GXand */
- 0x50, /* GXandReverse */
- 0xF0, /* GXcopy */
- 0x0A, /* GXandInvert */
- 0xAA, /* GXnoop */
- 0x5A, /* GXxor */
- 0xFA, /* GXor */
- 0x05, /* GXnor */
- 0xA5, /* GXequiv */
- 0x55, /* GXinvert */
- 0xF5, /* GXorReverse */
- 0x0F, /* GXcopyInvert */
- 0xAF, /* GXorInverted */
- 0x5F, /* GXnand */
- 0xFF /* GXset */
-};
-
-static void I740SyncPIO(ScrnInfoPtr pScrn);
-static void I740SyncMMIO(ScrnInfoPtr pScrn);
-static void I740SetupForSolidFill(ScrnInfoPtr pScrn, int color, int rop,
- unsigned int planemask);
-static void I740SubsequentSolidFillRect(ScrnInfoPtr pScrn, int x, int y,
- int w, int h);
-static void I740SetupForScreenToScreenCopy(ScrnInfoPtr pScrn, int xdir,
- int ydir, int rop,
- unsigned int planemask,
- int transparency_color);
-static void I740SubsequentScreenToScreenCopy(ScrnInfoPtr pScrn, int x1, int y1,
- int x2, int y2, int w, int h);
-static void I740SetupForMono8x8PatternFill(ScrnInfoPtr pScrn,
- int pattx, int patty,
- int fg, int bg, int rop,
- unsigned int planemask);
-static void I740SubsequentMono8x8PatternFillRect(ScrnInfoPtr pScrn,
- int pattx, int patty,
- int x, int y, int w, int h);
-#if 0
-static void I740SetupForCPUToScreenColorExpandFill(ScrnInfoPtr pScrn,
- int bg, int fg, int rop,
- unsigned int planemask);
-static void I740SubsequentCPUToScreenColorExpandFill(ScrnInfoPtr pScrn,
- int x, int y, int w, int h,
- int skipleft);
-#endif
-#endif
-/*
- * The following function sets up the supported acceleration. Call it
- * from the FbInit() function in the SVGA driver, or before ScreenInit
- * in a monolithic server.
- */
-Bool
-I740AccelInit(ScreenPtr pScreen) {
-#ifdef HAVE_XAA_H
- XAAInfoRecPtr infoPtr;
- ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
- I740Ptr pI740 = I740PTR(pScrn);
-
- pI740->AccelInfoRec = infoPtr = XAACreateInfoRec();
- if (!infoPtr) return FALSE;
-
- if (pScrn->bitsPerPixel == 32) {
- infoPtr->Flags = 0; /* Disables all acceleration */
- return TRUE;;
- }
-
- infoPtr->Flags = PIXMAP_CACHE | OFFSCREEN_PIXMAPS | LINEAR_FRAMEBUFFER;
-
- /* Sync */
- if (pI740->usePIO)
- infoPtr->Sync = I740SyncPIO;
- else
- infoPtr->Sync = I740SyncMMIO;
-
- infoPtr->CachePixelGranularity=8/pI740->cpp;
-
- /* Solid filled rectangles */
- infoPtr->SolidFillFlags = NO_PLANEMASK;
- infoPtr->SetupForSolidFill = I740SetupForSolidFill;
- infoPtr->SubsequentSolidFillRect = I740SubsequentSolidFillRect;
-
- /* Screen to screen copy */
- infoPtr->ScreenToScreenCopyFlags = (NO_PLANEMASK | NO_TRANSPARENCY);
- infoPtr->SetupForScreenToScreenCopy = I740SetupForScreenToScreenCopy;
- infoPtr->SubsequentScreenToScreenCopy = I740SubsequentScreenToScreenCopy;
-
- /* 8x8 pattern fills */
- infoPtr->SetupForMono8x8PatternFill = I740SetupForMono8x8PatternFill;
- infoPtr->SubsequentMono8x8PatternFillRect = I740SubsequentMono8x8PatternFillRect;
- infoPtr->Mono8x8PatternFillFlags = NO_PLANEMASK | HARDWARE_PATTERN_SCREEN_ORIGIN |
- BIT_ORDER_IN_BYTE_MSBFIRST;
-
- /* CPU to screen color expansion */
- /* Currently XAA is limited to only DWORD padding. The 3.3 driver
- * uses NO_PAD scanlines b/c of problems with using the chip in
- * DWORD mode. Once other padding modes are available in XAA this
- * Code can be turned back on.
- */
-#if 0
-#ifndef ALLOW_PCI_COLOR_EXP
- if (pI740->Chipset != PCI_CHIP_I740_PCI) {
-#endif
- /*
- * Currently, we are not properly able to read the bitblt engine
- * busy bit on the PCI i740 card. When we are able to do so, we
- * can re-enable color expansion.
- */
- infoPtr->CPUToScreenColorExpandFillFlags =
- NO_PLANEMASK |
-#ifdef USE_DWORD_COLOR_EXP
- SCANLINE_PAD_DWORD |
-#endif
- CPU_TRANSFER_PAD_QWORD |
- SYNC_AFTER_COLOR_EXPAND |
- BIT_ORDER_IN_BYTE_MSBFIRST;
- infoPtr->ColorExpandBase = (unsigned char *)(pI740->MMIOBase + BLTDATA);
- infoPtr->ColorExpandRange = 0x10000;
- infoPtr->SetupForCPUToScreenColorExpandFill = I740SetupForCPUToScreenColorExpandFill;
- infoPtr->SubsequentCPUToScreenColorExpandFill = I740SubsequentCPUToScreenColorExpandFill;
-#ifndef ALLOW_PCI_COLOR_EXP
- }
-#endif
-#endif
- return XAAInit(pScreen, infoPtr);
-#else
- return FALSE;
-#endif
-}
-
-#ifdef HAVE_XAA_H
-
-static void
-I740SyncPIO(ScrnInfoPtr pScrn) {
- WAIT_ENGINE_IDLE_PIO();
-}
-
-static void
-I740SyncMMIO(ScrnInfoPtr pScrn) {
- I740Ptr pI740;
-
- pI740 = I740PTR(pScrn);
- WAIT_ENGINE_IDLE_MMIO();
-}
-
-static void
-I740SetupForSolidFill(ScrnInfoPtr pScrn, int color, int rop,
- unsigned int planemask) {
- I740Ptr pI740;
-
- pI740 = I740PTR(pScrn);
-
- pI740->bltcmd.BR00 = ((pScrn->displayWidth * pI740->cpp) << 16) |
- (pScrn->displayWidth * pI740->cpp);
- pI740->bltcmd.BR01 = color;
- pI740->bltcmd.BR04 = SOLID_PAT_SELECT | PAT_IS_MONO | i740PatternRop[rop];
-}
-
-static void
-I740SubsequentSolidFillRect(ScrnInfoPtr pScrn, int x, int y, int w, int h) {
- I740Ptr pI740;
-
- pI740 = I740PTR(pScrn);
- WAIT_LP_FIFO(12);
- OUTREG(LP_FIFO, 0x6000000A);
- OUTREG(LP_FIFO, pI740->bltcmd.BR00);
- OUTREG(LP_FIFO, pI740->bltcmd.BR01);
- OUTREG(LP_FIFO, 0x00000000);
- OUTREG(LP_FIFO, 0x00000000);
- OUTREG(LP_FIFO, pI740->bltcmd.BR04);
- OUTREG(LP_FIFO, 0x00000000);
- OUTREG(LP_FIFO, 0x00000000);
- OUTREG(LP_FIFO, (y * pScrn->displayWidth + x) * pI740->cpp);
- OUTREG(LP_FIFO, 0x00000000);
- OUTREG(LP_FIFO, 0x00000000);
- OUTREG(LP_FIFO, (h << 16) | (w * pI740->cpp));
-}
-
-static void
-I740SetupForScreenToScreenCopy(ScrnInfoPtr pScrn, int xdir, int ydir, int rop,
- unsigned int planemask, int transparency_color)
-{
- I740Ptr pI740;
-
- pI740 = I740PTR(pScrn);
- pI740->bltcmd.BR00 = (((pScrn->displayWidth * pI740->cpp) << 16) |
- (pScrn->displayWidth * pI740->cpp));
-
- pI740->bltcmd.BR04 = SRC_IS_IN_COLOR | SRC_USE_SRC_ADDR | i740Rop[rop];
- if (xdir == -1)
- pI740->bltcmd.BR04 |= BLT_RIGHT_TO_LEFT;
- else
- pI740->bltcmd.BR04 |= BLT_LEFT_TO_RIGHT;
-
- if (ydir == -1)
- pI740->bltcmd.BR04 |= BLT_BOT_TO_TOP;
- else
- pI740->bltcmd.BR04 |= BLT_TOP_TO_BOT;
-
- pI740->bltcmd.BR01 = 0x00000000;
-
-}
-
-static void
-I740SubsequentScreenToScreenCopy(ScrnInfoPtr pScrn, int x1, int y1,
- int x2, int y2, int w, int h) {
- I740Ptr pI740;
-
- pI740 = I740PTR(pScrn);
- if (pI740->bltcmd.BR04 & BLT_BOT_TO_TOP) {
- pI740->bltcmd.BR06 = (y1 + h - 1) *
- pScrn->displayWidth * pI740->cpp;
- pI740->bltcmd.BR07 = (y2 + h - 1) *
- pScrn->displayWidth * pI740->cpp;
- } else {
- pI740->bltcmd.BR06 = y1 * pScrn->displayWidth * pI740->cpp;
- pI740->bltcmd.BR07 = y2 * pScrn->displayWidth * pI740->cpp;
- }
-
- if (pI740->bltcmd.BR04 & BLT_RIGHT_TO_LEFT) {
- pI740->bltcmd.BR06 += (x1 + w - 1) * pI740->cpp + pI740->cpp - 1;
- pI740->bltcmd.BR07 += (x2 + w - 1) * pI740->cpp + pI740->cpp - 1;
- } else {
- pI740->bltcmd.BR06 += x1 * pI740->cpp;
- pI740->bltcmd.BR07 += x2 * pI740->cpp;
- }
-
- WAIT_LP_FIFO(12);
- OUTREG(LP_FIFO, 0x6000000A);
- OUTREG(LP_FIFO, pI740->bltcmd.BR00);
- OUTREG(LP_FIFO, pI740->bltcmd.BR01);
- OUTREG(LP_FIFO, 0x00000000);
- OUTREG(LP_FIFO, 0x00000000);
- OUTREG(LP_FIFO, pI740->bltcmd.BR04);
- OUTREG(LP_FIFO, 0x00000000);
- OUTREG(LP_FIFO, pI740->bltcmd.BR06);
- OUTREG(LP_FIFO, pI740->bltcmd.BR07);
- OUTREG(LP_FIFO, 0x00000000);
- OUTREG(LP_FIFO, 0x00000000);
- OUTREG(LP_FIFO, (h << 16) | (w * pI740->cpp));
-}
-
-static void
-I740SetupForMono8x8PatternFill(ScrnInfoPtr pScrn, int pattx, int patty,
- int fg, int bg, int rop,
- unsigned int planemask) {
- I740Ptr pI740;
-
- pI740 = I740PTR(pScrn);
- pI740->bltcmd.BR00 = ((pScrn->displayWidth * pI740->cpp) << 16) |
- (pScrn->displayWidth * pI740->cpp);
-
- pI740->bltcmd.BR01 = bg;
- pI740->bltcmd.BR02 = fg;
-
- pI740->bltcmd.BR04 = PAT_IS_MONO | i740PatternRop[rop];
- if (bg == -1) pI740->bltcmd.BR04 |= MONO_PAT_TRANSP;
-
- pI740->bltcmd.BR05 = (pattx + patty * pScrn->displayWidth) * pI740->cpp;
-}
-
-static void
-I740SubsequentMono8x8PatternFillRect(ScrnInfoPtr pScrn, int pattx, int patty,
- int x, int y, int w, int h) {
- I740Ptr pI740;
-
- pI740 = I740PTR(pScrn);
- WAIT_LP_FIFO(12);
- OUTREG(LP_FIFO, 0x6000000A);
- OUTREG(LP_FIFO, pI740->bltcmd.BR00);
- OUTREG(LP_FIFO, pI740->bltcmd.BR01);
- OUTREG(LP_FIFO, pI740->bltcmd.BR02);
- OUTREG(LP_FIFO, 0x00000000);
- OUTREG(LP_FIFO, pI740->bltcmd.BR04 | ((y<<20) & PAT_VERT_ALIGN));
- OUTREG(LP_FIFO, pI740->bltcmd.BR05);
- OUTREG(LP_FIFO, 0x00000000);
- OUTREG(LP_FIFO, (y * pScrn->displayWidth + x) * pI740->cpp);
- OUTREG(LP_FIFO, 0x00000000);
- OUTREG(LP_FIFO, 0x00000000);
- OUTREG(LP_FIFO, (h << 16) | (w * pI740->cpp));
-}
-#if 0
-static void
-I740SetupForCPUToScreenColorExpandFill(ScrnInfoPtr pScrn, int bg, int fg,
- int rop, unsigned int planemask) {
- I740Ptr pI740;
-
- pI740 = I740PTR(pScrn);
- pI740->bltcmd.BR00 = (pScrn->displayWidth * pI740->cpp) << 16;
- pI740->bltcmd.BR01 = bg;
- pI740->bltcmd.BR02 = fg;
-#ifdef USE_DWORD_COLOR_EXP
- pI740->bltcmd.BR03 = MONO_DWORD_ALIGN | MONO_USE_COLEXP;
-#else
- pI740->bltcmd.BR03 = MONO_BIT_ALIGN | MONO_USE_COLEXP;
-#endif
- pI740->bltcmd.BR04 = SRC_IS_MONO | SRC_USE_BLTDATA | i740Rop[rop];
- if (bg == -1) pI740->bltcmd.BR04 |= MONO_SRC_TRANSP;
-}
-
-static void
-I740SubsequentCPUToScreenColorExpandFill(ScrnInfoPtr pScrn, int x, int y,
- int w, int h, int skipleft) {
- I740Ptr pI740;
-
- pI740 = I740PTR(pScrn);
- pI740->AccelInfoRec->Sync(pScrn);
- OUTREG(LP_FIFO, 0x6000000A);
- OUTREG(LP_FIFO, pI740->bltcmd.BR00);
- OUTREG(LP_FIFO, pI740->bltcmd.BR01);
- OUTREG(LP_FIFO, pI740->bltcmd.BR02);
- OUTREG(LP_FIFO, pI740->bltcmd.BR03 | (skipleft & MONO_SRC_LEFT_CLIP));
- OUTREG(LP_FIFO, pI740->bltcmd.BR04);
- OUTREG(LP_FIFO, 0x00000000);
- OUTREG(LP_FIFO, 0x00000000);
- OUTREG(LP_FIFO, (y * pScrn->displayWidth + x) * pI740->cpp);
- OUTREG(LP_FIFO, 0x00000000);
- OUTREG(LP_FIFO, 0x00000000);
-#ifdef USE_DWORD_COLOR_EXP
- /*
- * This extra wait is necessary to keep the bitblt engine from
- * locking up, but I am not sure why it is needed. If we take it
- * out, "x11perf -copyplane10" will lock the bitblt engine. When
- * the bitblt engine is locked, it is waiting for mono data to be
- * written to the BLTDATA region, which seems to imply that some of
- * the data that was written was lost. This might be fixed by
- * BLT_SKEW changes. Update: The engine still locks up with this
- * extra wait. More investigation (and time) is needed.
- */
- WAIT_BLT_IDLE();
-#endif
- OUTREG(LP_FIFO, (h << 16) | (w * pI740->cpp));
-}
-#endif
-
-#endif