summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlan Coopersmith <alan.coopersmith@oracle.com>2024-05-18 13:51:30 -0700
committerAlan Coopersmith <alan.coopersmith@oracle.com>2024-05-18 13:51:30 -0700
commit35de6b919e106c3e8a442a443d5815a2bf0db94d (patch)
tree21013180f0be8a3c5c6267383e3b40f28b72d42e /src
parent635ed52cb2eb75949a94e095957740ddd8d08871 (diff)
Raise minimum supported Xserver version to 1.18 (ABI_VIDEODRV_VERSION 20.0)HEADmaster
Already effectively required by use of XNFcallocarray() introduced in xorg/xserver@b96dc999 - xserver-1.18.0, released in Nov. 2015. Allows dropping remnants of code for XAA and pre-pciaccess X servers Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> Part-of: <https://gitlab.freedesktop.org/xorg/driver/xf86-video-s3virge/-/merge_requests/8>
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am1
-rw-r--r--src/s3v.h12
-rw-r--r--src/s3v_accel.c698
-rw-r--r--src/s3v_dga.c50
-rw-r--r--src/s3v_driver.c23
-rw-r--r--src/s3v_rop.h206
6 files changed, 5 insertions, 985 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index c746fa3..27f787e 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -42,6 +42,5 @@ s3virge_drv_la_SOURCES = \
s3v_macros.h \
s3v_pciids.h \
s3v_pcirename.h \
- s3v_rop.h \
s3v_shadow.c \
s3v_xv.c
diff --git a/src/s3v.h b/src/s3v.h
index aa27eaf..6b16b9d 100644
--- a/src/s3v.h
+++ b/src/s3v.h
@@ -59,11 +59,6 @@ in this Software without prior written authorization from the XFree86 Project.
#include "fb.h"
-/* Drivers using the XAA interface ... */
-#ifdef HAVE_XAA_H
-#include "xaa.h"
-#include "xaalocal.h"
-#endif
#include "xf86fbman.h"
#include "xf86cmap.h"
#include "xf86i2c.h"
@@ -195,9 +190,6 @@ typedef struct tagS3VRec {
/* Compatibility variables */
int vgaCRIndex, vgaCRReg;
int Width, Bpp,Bpl, ScissB;
- /* XAA */
- unsigned PlaneMask;
- int bltbug_width1, bltbug_width2;
/* In units as noted, set in PreInit */
int videoRambytes;
int videoRamKbytes;
@@ -280,10 +272,6 @@ typedef struct tagS3VRec {
/* Pointer used to save wrapped */
/* CloseScreen function. */
CloseScreenProcPtr CloseScreen;
-#ifdef HAVE_XAA_H
- /* XAA info Rec */
- XAAInfoRecPtr AccelInfoRec;
-#endif
/* PCI info vars. */
pciVideoPtr PciInfo;
#ifndef XSERVER_LIBPCIACCESS
diff --git a/src/s3v_accel.c b/src/s3v_accel.c
index e21a6f3..0cde82f 100644
--- a/src/s3v_accel.c
+++ b/src/s3v_accel.c
@@ -38,204 +38,12 @@ in this Software without prior written authorization from the XFree86 Project.
#include "servermd.h" /* LOG2_BYTES_PER_SCANLINE_PAD */
-#ifdef HAVE_XAA_H
-static void S3VWriteMask(CARD32*, int);
-
-static void S3VEngineReset(ScrnInfoPtr pScrn);
-/* s3v.h - static void S3VAccelSync(ScrnInfoPtr); */
-static void S3VSetupForSolidFill(ScrnInfoPtr, int, int, unsigned);
-static void S3VSubsequentSolidFillRect(ScrnInfoPtr, int, int, int, int);
-static void S3VSubsequentSolidFillRectPlaneMask(ScrnInfoPtr, int, int,
- int, int);
-static void S3VSetupForMono8x8PatternFill(ScrnInfoPtr,int, int, int, int,
- int, unsigned int);
-static void S3VSubsequentMono8x8PatternFillRect(ScrnInfoPtr,int, int,
- int, int, int, int);
-static void S3VSubsequentMono8x8PatternFillRectPlaneMask(ScrnInfoPtr,int, int,
- int, int, int, int);
-static void S3VSetupForScreenToScreenCopy(ScrnInfoPtr, int, int, int,
- unsigned int, int);
-static void S3VSubsequentScreenToScreenCopy(ScrnInfoPtr, int, int, int, int,
- int, int);
-static void S3VSetupForCPUToScreenColorExpand(ScrnInfoPtr, int, int, int,
- unsigned int);
-static void S3VSubsequentCPUToScreenColorExpand(ScrnInfoPtr, int, int, int,
- int, int);
-static void S3VSetupForImageWrite(ScrnInfoPtr, int, unsigned int, int,
- int, int);
-static void S3VSubsequentImageWriteRect(ScrnInfoPtr, int, int, int, int, int);
-static void S3VSubsequentSolidHorVertLine(ScrnInfoPtr, int, int, int, int);
-static void S3VSubsequentSolidHorVertLinePlaneMask(ScrnInfoPtr, int, int,
- int, int);
-#if 0
-static void S3VSubsequentSolidBresenhamLine(ScrnInfoPtr, int, int, int,
- int, int, int, int);
-static void S3VPolylinesThinSolidWrapper(DrawablePtr, GCPtr, int, int,
- DDXPointPtr);
-static void S3VPolySegmentThinSolidWrapper(DrawablePtr, GCPtr, int, xSegment*);
-#endif
-#endif
static void S3VNopAllCmdSets(ScrnInfoPtr pScrn);
Bool
S3VAccelInit(ScreenPtr pScreen)
{
-#ifdef HAVE_XAA_H
- XAAInfoRecPtr infoPtr;
- ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
- S3VPtr ps3v = S3VPTR(pScrn);
- BoxRec AvailFBArea;
-
- ps3v->AccelInfoRec = infoPtr = XAACreateInfoRec();
- if(!infoPtr) return FALSE;
-
- switch(ps3v->Chipset)
- {
- case S3_ViRGE:
- case S3_ViRGE_VX:
- ps3v->AccelFlags = BLT_BUG;
- break;
- default:
- ps3v->AccelFlags = 0;
- break;
- }
-
- ps3v->AccelFlags |= MONO_TRANS_BUG; /* which aren't broken ? */
-
-
- infoPtr->Flags = PIXMAP_CACHE |
- LINEAR_FRAMEBUFFER |
- OFFSCREEN_PIXMAPS;
-
- infoPtr->Sync = S3VAccelSync;
-
- /* Problem reports with solid fill on trio3d */
- if(!S3_TRIO_3D_SERIES(ps3v->Chipset))
- {
- /* Solid filled rects */
- infoPtr->SetupForSolidFill =
- S3VSetupForSolidFill;
- infoPtr->SubsequentSolidFillRect =
- S3VSubsequentSolidFillRect;
- }
-
- /* Screen to screen copies */
- infoPtr->SetupForScreenToScreenCopy =
- S3VSetupForScreenToScreenCopy;
- infoPtr->SubsequentScreenToScreenCopy =
- S3VSubsequentScreenToScreenCopy;
- infoPtr->ScreenToScreenCopyFlags = NO_TRANSPARENCY;
-
- /* Mono 8x8 patterns */
- infoPtr->SetupForMono8x8PatternFill =
- S3VSetupForMono8x8PatternFill;
- infoPtr->SubsequentMono8x8PatternFillRect =
- S3VSubsequentMono8x8PatternFillRect;
- infoPtr->Mono8x8PatternFillFlags = NO_TRANSPARENCY |
- HARDWARE_PATTERN_PROGRAMMED_BITS |
- HARDWARE_PATTERN_SCREEN_ORIGIN |
- BIT_ORDER_IN_BYTE_MSBFIRST;
-
-
-#ifndef __alpha__
-
- /* disable color expand on GX2 until we trace down */
- /* lockups. locate 'html' in an xterm is a good */
- /* test case for an AGP GX2. */
- if (!S3_ViRGE_GX2_SERIES(ps3v->Chipset))
- {
-
-
- /* CPU to screen color expansion */
- infoPtr->CPUToScreenColorExpandFillFlags = ROP_NEEDS_SOURCE |
- CPU_TRANSFER_PAD_DWORD |
- SCANLINE_PAD_DWORD |
- BIT_ORDER_IN_BYTE_MSBFIRST |
- LEFT_EDGE_CLIPPING;
-
- if(ps3v->AccelFlags & MONO_TRANS_BUG)
- infoPtr->CPUToScreenColorExpandFillFlags |= NO_TRANSPARENCY;
-
- infoPtr->ColorExpandRange = 0x8000;
- infoPtr->ColorExpandBase = ps3v->MapBaseDense;
- infoPtr->SetupForCPUToScreenColorExpandFill =
- S3VSetupForCPUToScreenColorExpand;
- infoPtr->SubsequentCPUToScreenColorExpandFill =
- S3VSubsequentCPUToScreenColorExpand;
-
- } /* if(!GX2...) */
-
-
- /* Image Writes */
- infoPtr->ImageWriteFlags = ROP_NEEDS_SOURCE |
- NO_TRANSPARENCY |
- CPU_TRANSFER_PAD_DWORD |
- SCANLINE_PAD_DWORD |
- NO_GXCOPY | /* added - kjb */
- LEFT_EDGE_CLIPPING;
-
- infoPtr->ImageWriteRange = 0x8000;
- infoPtr->ImageWriteBase = ps3v->MapBaseDense;
- infoPtr->SetupForImageWrite = S3VSetupForImageWrite;
- infoPtr->SubsequentImageWriteRect = S3VSubsequentImageWriteRect;
-
- /* on alpha, I see corruption in the xscreensaver program "hypercube"
- as the line acceleration is just stubs, it loses us nothing to
- disable it on alphas */
-
- /* Lines */
-#if 0
- /* Bresenham lines are broken when passed through fb to xaa
- so I pulled all the line functions. This shouldn't hurt us
- a whole lot, since the Subsequent..Bresen stuff doesn't have
- any hardware accel yet anyway... And xaa will do horiz/vert
- lines with the rect fill (like we are doing here) anyway.
- KJB 9/11/00
- */
- infoPtr->SetupForSolidLine = S3VSetupForSolidFill;
- infoPtr->SubsequentSolidHorVertLine = S3VSubsequentSolidHorVertLine;
- infoPtr->SubsequentSolidBresenhamLine = S3VSubsequentSolidBresenhamLine;
- infoPtr->PolySegmentThinSolid = S3VPolySegmentThinSolidWrapper;
- infoPtr->PolylinesThinSolid = S3VPolylinesThinSolidWrapper;
-#endif
-
-#endif /* !__alpha__ */
-
- /* And these are screen parameters used to setup the GE */
-
- ps3v->Width = pScrn->displayWidth;
- /* Bytes per pixel */
- ps3v->Bpp = pScrn->bitsPerPixel / 8;
- /* Bytes per line */
- ps3v->Bpl = ps3v->Width * ps3v->Bpp;
- /* ScissB is max height, minus 1k */
- /* for hwcursor?, then limited by */
- /* ViRGE max height register of */
- /* 2047 */
- ps3v->ScissB = (pScrn->videoRam * 1024 - 1024) / ps3v->Bpl;
- if (ps3v->ScissB > 2047)
- ps3v->ScissB = 2047;
-
-
- S3VEngineReset(pScrn);
-
-
- AvailFBArea.x1 = 0;
- AvailFBArea.y1 = 0;
- AvailFBArea.x2 = pScrn->displayWidth;
- AvailFBArea.y2 = (pScrn->videoRam * 1024 - 1024) /
- (pScrn->displayWidth * pScrn->bitsPerPixel / 8);
-
- xf86InitFBManager(pScreen, &AvailFBArea);
-
- /* make sure offscreen pixmaps aren't bigger than our address space */
- infoPtr->maxOffPixWidth = 2048;
- infoPtr->maxOffPixHeight = 2048;
-
- return (XAAInit(pScreen, infoPtr));
-#else
return FALSE;
-#endif
}
Bool
@@ -465,512 +273,6 @@ S3VAccelSync(ScrnInfoPtr pScrn)
WAITIDLE();
}
-#ifdef HAVE_XAA_H
-static void
-S3VEngineReset(ScrnInfoPtr pScrn)
-{
- S3VPtr ps3v = S3VPTR(pScrn);
-
- ps3v->SrcBaseY = 0;
- ps3v->DestBaseY = 0;
- ps3v->Stride = pScrn->displayWidth * pScrn->bitsPerPixel >> 3;
-
- switch(pScrn->bitsPerPixel) {
- case 8: ps3v->CommonCmd = DRAW | DST_8BPP;
- ps3v->FullPlaneMask = 0x000000ff;
- ps3v->bltbug_width1 = 51;
- ps3v->bltbug_width2 = 64;
- break;
- case 16: ps3v->CommonCmd = DRAW | DST_16BPP;
- ps3v->FullPlaneMask = 0x0000ffff;
- ps3v->bltbug_width1 = 26;
- ps3v->bltbug_width2 = 32;
- break;
- case 24: ps3v->CommonCmd = DRAW | DST_24BPP;
- ps3v->FullPlaneMask = 0x00ffffff;
- ps3v->bltbug_width1 = 16;
- ps3v->bltbug_width2 = 22;
- break;
- }
-
-
- WAITFIFO(5);
- OUTREG(SRC_BASE, 0);
- OUTREG(DEST_BASE, 0);
- OUTREG(DEST_SRC_STR, ps3v->Stride | (ps3v->Stride << 16));
-
- OUTREG(CLIP_L_R, ((0) << 16) | ps3v->Width);
- OUTREG(CLIP_T_B, ((0) << 16) | ps3v->ScissB);
-}
-
-
-static void
-S3VWriteMask(
- CARD32 *dstBase,
- int dwords
-){
- /* on alphas, be sure to call this with MapBaseDense, not MapBase! */
- int numLeft;
- CARD32 *dst = dstBase;
-
- while(dwords >= 8192) {
- numLeft = 8192;
- while(numLeft) {
- dst[0] = ~0; dst[1] = ~0;
- dst[2] = ~0; dst[3] = ~0;
- dst += 4;
- numLeft -= 4;
- }
- dwords -= 8192;
- dst = dstBase;
- }
- while(dwords >= 4) {
- dst[0] = ~0; dst[1] = ~0;
- dst[2] = ~0; dst[3] = ~0;
- dst += 4;
- dwords -= 4;
- }
- if(!dwords) return;
- dst[0] = ~0;
- if(dwords == 1) return;
- dst[1] = ~0;
- if(dwords == 2) return;
- dst[2] = ~0;
-
- return;
-}
-
-
- /************************\
- | Solid Filled Rects |
- \************************/
-
-static void
-S3VSetupForSolidFill(
- ScrnInfoPtr pScrn,
- int color, int rop,
- unsigned int planemask
-){
- S3VPtr ps3v = S3VPTR(pScrn);
- int mix;
-
- mix = XAAHelpSolidROP(pScrn, &color, planemask, &rop);
-
- ps3v->AccelCmd = ps3v->CommonCmd | (rop << 17) |
- CMD_XP | CMD_YP | CMD_AUTOEXEC | CMD_BITBLT;
-
- if(mix & ROP_SRC) {
- ps3v->AccelCmd |= MIX_CPUDATA | CMD_ITA_DWORD | MIX_MONO_SRC;
- ps3v->AccelInfoRec->SubsequentSolidFillRect =
- S3VSubsequentSolidFillRectPlaneMask;
- ps3v->AccelInfoRec->SubsequentSolidHorVertLine =
- S3VSubsequentSolidHorVertLinePlaneMask;
- WAITFIFO(5);
- OUTREG(SRC_FG_CLR, planemask);
- } else {
- ps3v->AccelInfoRec->SubsequentSolidFillRect =
- S3VSubsequentSolidFillRect;
- ps3v->AccelInfoRec->SubsequentSolidHorVertLine =
- S3VSubsequentSolidHorVertLine;
- WAITFIFO(4);
- }
-
- if(mix & ROP_PAT) {
- ps3v->AccelCmd |= MIX_MONO_PATT;
- OUTREG(PAT_FG_CLR, color);
- OUTREG(MONO_PAT_0, ~0);
- OUTREG(MONO_PAT_1, ~0);
- }
-
- OUTREG(CMD_SET, ps3v->AccelCmd);
-}
-
-
-void
-S3VSubsequentSolidFillRect(
- ScrnInfoPtr pScrn,
- int x, int y,
- int w, int h
-){
- S3VPtr ps3v = S3VPTR(pScrn);
-
- CHECK_DEST_BASE(y,h);
-
- WAITFIFO(2);
- OUTREG(RWIDTH_HEIGHT, ((w - 1) << 16) | h);
- WAITCMD();
- OUTREG(RDEST_XY, (x << 16) | y);
-}
-
-
-void
-S3VSubsequentSolidFillRectPlaneMask(
- ScrnInfoPtr pScrn,
- int x, int y,
- int w, int h
-){
- S3VPtr ps3v = S3VPTR(pScrn);
- int dwords;
-
- CHECK_DEST_BASE(y,h);
-
- dwords = ((w + 31) >> 5) * h;
-
- WAITFIFO(2);
- OUTREG(RWIDTH_HEIGHT, ((w - 1) << 16) | h);
- WAITCMD();
- OUTREG(RDEST_XY, (x << 16) | y);
- S3VWriteMask((CARD32*)ps3v->MapBaseDense, dwords);
-}
-
-
- /**************************\
- | Screen to Screen Copies |
- \**************************/
-
-static void
-S3VSetupForScreenToScreenCopy(
- ScrnInfoPtr pScrn,
- int xdir, int ydir,
- int rop,
- unsigned int planemask,
- int trans
-){
- S3VPtr ps3v = S3VPTR(pScrn);
-
- planemask &= ps3v->FullPlaneMask;
- ps3v->AccelCmd = ps3v->CommonCmd | CMD_AUTOEXEC | CMD_BITBLT;
-
- if(planemask != ps3v->FullPlaneMask) {
- ps3v->AccelCmd |= (XAAGetCopyROP_PM(rop) << 17) | MIX_MONO_PATT;
- WAITFIFO(4);
- OUTREG(PAT_FG_CLR, planemask);
- OUTREG(MONO_PAT_0, ~0);
- OUTREG(MONO_PAT_1, ~0);
- }
- else {
- ps3v->AccelCmd |= XAAGetCopyROP(rop) << 17;
- WAITFIFO(1);
- }
- if(xdir == 1) ps3v->AccelCmd |= CMD_XP;
- if(ydir == 1) ps3v->AccelCmd |= CMD_YP;
-
- OUTREG(CMD_SET, ps3v->AccelCmd);
-}
-
-
-static void
-S3VSubsequentScreenToScreenCopy(ScrnInfoPtr pScrn, int x1, int y1,
- int x2, int y2, int w, int h)
-{
- S3VPtr ps3v = S3VPTR(pScrn);
-
- CHECK_SRC_BASE(y1,h);
- CHECK_DEST_BASE(y2,h);
-
- w--;
-
- if(!(ps3v->AccelCmd & CMD_YP)) {
- y1 += h - 1; y2 += h - 1;
- }
-
- if(!(ps3v->AccelCmd & CMD_XP)) {
- x1 += w; x2 += w;
- }
-
- WAITFIFO(3);
- OUTREG(RWIDTH_HEIGHT, (w << 16) | h);
- OUTREG(RSRC_XY, (x1 << 16) | y1);
- WAITCMD();
- OUTREG(RDEST_XY, (x2 << 16) | y2);
-}
-
-
- /*********************\
- | 8x8 Pattern fills |
- \*********************/
-
-
-static void
-S3VSetupForMono8x8PatternFill(
- ScrnInfoPtr pScrn,
- int patx, int paty,
- int fg, int bg,
- int rop, unsigned int planemask
-){
- S3VPtr ps3v = S3VPTR(pScrn);
- int mix;
-
- mix = XAAHelpPatternROP(pScrn, &fg, &bg, planemask, &rop);
-
- ps3v->AccelCmd = ps3v->CommonCmd | (rop << 17) |
- CMD_XP | CMD_YP | CMD_AUTOEXEC | CMD_BITBLT;
-
- if(mix & ROP_SRC) {
- ps3v->AccelCmd |= MIX_CPUDATA | CMD_ITA_DWORD | MIX_MONO_SRC;
- ps3v->AccelInfoRec->SubsequentMono8x8PatternFillRect =
- S3VSubsequentMono8x8PatternFillRectPlaneMask;
- WAITFIFO(6);
- OUTREG(SRC_FG_CLR, planemask);
- } else {
- ps3v->AccelInfoRec->SubsequentMono8x8PatternFillRect =
- S3VSubsequentMono8x8PatternFillRect;
- WAITFIFO(5);
- }
-
- if(mix & ROP_PAT) {
- ps3v->AccelCmd |= MIX_MONO_PATT;
- OUTREG(PAT_FG_CLR, fg);
- OUTREG(PAT_BG_CLR, bg);
- OUTREG(MONO_PAT_0, patx);
- OUTREG(MONO_PAT_1, paty);
- }
-
- OUTREG(CMD_SET, ps3v->AccelCmd);
-}
-
-
-static void
-S3VSubsequentMono8x8PatternFillRect(
- ScrnInfoPtr pScrn,
- int patx, int paty,
- int x, int y, int w, int h
-){
- S3VPtr ps3v = S3VPTR(pScrn);
-
- CHECK_DEST_BASE(y,h);
-
- WAITFIFO(2);
- OUTREG(RWIDTH_HEIGHT, ((w - 1) << 16) | h);
- WAITCMD();
- OUTREG(RDEST_XY, (x << 16) | y);
-}
-
-
-static void
-S3VSubsequentMono8x8PatternFillRectPlaneMask(
- ScrnInfoPtr pScrn,
- int patx, int paty,
- int x, int y, int w, int h
-){
- S3VPtr ps3v = S3VPTR(pScrn);
- int dwords;
-
- CHECK_DEST_BASE(y,h);
-
- dwords = ((w + 31) >> 5) * h;
-
- WAITFIFO(2);
- OUTREG(RWIDTH_HEIGHT, ((w - 1) << 16) | h);
- WAITCMD();
- OUTREG(RDEST_XY, (x << 16) | y);
-
- S3VWriteMask((CARD32*)ps3v->MapBaseDense, dwords);
-}
-
- /*********************************\
- | CPU to Screen Color Expansion |
- \*********************************/
-
-
-static void
-S3VSetupForCPUToScreenColorExpand(
- ScrnInfoPtr pScrn,
- int fg, int bg,
- int rop,
- unsigned int planemask
-){
- S3VPtr ps3v = S3VPTR(pScrn);
-
- planemask &= ps3v->FullPlaneMask;
- ps3v->AccelCmd = ps3v->CommonCmd | CMD_AUTOEXEC | CMD_BITBLT |
- CMD_XP | CMD_YP | CMD_ITA_DWORD | CMD_HWCLIP |
- MIX_CPUDATA | MIX_MONO_SRC;
-
-
- if(planemask == ps3v->FullPlaneMask) {
- ps3v->AccelCmd |= XAAGetCopyROP(rop) << 17;
- WAITFIFO(3);
- } else {
- ps3v->AccelCmd |= (XAAGetCopyROP_PM(rop) << 17) | MIX_MONO_PATT;
- WAITFIFO(6);
- OUTREG(MONO_PAT_0, ~0);
- OUTREG(MONO_PAT_1, ~0);
- OUTREG(PAT_FG_CLR, planemask);
- }
-
- if(bg == -1)
- ps3v->AccelCmd |= MIX_MONO_TRANSP;
- else
- OUTREG(SRC_BG_CLR, bg);
-
- OUTREG(SRC_FG_CLR, fg);
- OUTREG(CMD_SET, ps3v->AccelCmd);
-}
-
-
-void
-S3VSubsequentCPUToScreenColorExpand(
- ScrnInfoPtr pScrn,
- int x, int y,
- int w, int h,
- int skipleft
-){
- S3VPtr ps3v = S3VPTR(pScrn);
-
- CHECK_DEST_BASE(y,h);
- WAITFIFO(3);
- OUTREG(CLIP_L_R, ((x + skipleft) << 16) | 0xffff);
- OUTREG(RWIDTH_HEIGHT, ((w - 1) << 16) | h);
- WAITCMD();
- OUTREG(RDEST_XY, (x << 16) | y);
-}
-
-
- /****************\
- | Image Writes |
- \****************/
-
-
-static void
-S3VSetupForImageWrite(
- ScrnInfoPtr pScrn,
- int rop, unsigned int planemask,
- int trans_color, int bpp, int depth
-){
- S3VPtr ps3v = S3VPTR(pScrn);
-
- planemask &= ps3v->FullPlaneMask;
- ps3v->AccelCmd = ps3v->CommonCmd | CMD_AUTOEXEC | CMD_BITBLT |
- MIX_CPUDATA | CMD_ITA_DWORD | CMD_HWCLIP | CMD_XP | CMD_YP;
-
- if(planemask != ps3v->FullPlaneMask) {
- ps3v->AccelCmd |= (XAAGetCopyROP_PM(rop) << 17) | MIX_MONO_PATT;
- WAITFIFO(4);
- OUTREG(PAT_FG_CLR, planemask);
- OUTREG(MONO_PAT_0, ~0);
- OUTREG(MONO_PAT_1, ~0);
- } else {
- ps3v->AccelCmd |= XAAGetCopyROP(rop) << 17;
- WAITFIFO(1);
- }
-
- OUTREG(CMD_SET, ps3v->AccelCmd);
-}
-
-
-static void
-S3VSubsequentImageWriteRect(
- ScrnInfoPtr pScrn,
- int x, int y,
- int w, int h,
- int skipleft
-){
- S3VPtr ps3v = S3VPTR(pScrn);
-
- CHECK_DEST_BASE(y,h);
-
- WAITFIFO(3);
- OUTREG(CLIP_L_R, ((x + skipleft) << 16) | 0xffff);
- OUTREG(RWIDTH_HEIGHT, ((w - 1) << 16) | h);
- WAITCMD();
- OUTREG(RDEST_XY, (x << 16) | y);
-}
-
-
- /***********\
- | Lines |
- \***********/
-
-
-#if 0 /* Some line funcs are disabled at the moment */
-
-static void
-S3VPolylinesThinSolidWrapper(
- DrawablePtr pDraw,
- GCPtr pGC,
- int mode,
- int npt,
- DDXPointPtr pPts
-){
- XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
- S3VPtr ps3v = S3VPTR(infoRec->pScrn);
- ps3v->CurrentGC = pGC;
- /* fb support */
- ps3v->CurrentDrawable = pDraw;
- if(infoRec->NeedToSync)
- S3VAccelSync(infoRec->pScrn);
- XAAPolyLines(pDraw, pGC, mode, npt, pPts);
-}
-
-static void
-S3VPolySegmentThinSolidWrapper(
- DrawablePtr pDraw,
- GCPtr pGC,
- int nseg,
- xSegment *pSeg
-){
- XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
- S3VPtr ps3v = S3VPTR(infoRec->pScrn);
- ps3v->CurrentGC = pGC;
- /* fb support */
- ps3v->CurrentDrawable = pDraw;
- if(infoRec->NeedToSync)
- S3VAccelSync(infoRec->pScrn);
- XAAPolySegment(pDraw, pGC, nseg, pSeg);
-}
-
-#endif
-
-static void
-S3VSubsequentSolidHorVertLine(
- ScrnInfoPtr pScrn,
- int x, int y,
- int len, int dir
-){
- S3VPtr ps3v = S3VPTR(pScrn);
- int w, h;
-
- if(dir == DEGREES_0) {
- w = len; h = 1;
- } else {
- w = 1; h = len;
- }
-
- CHECK_DEST_BASE(y,h);
-
- WAITFIFO(2);
- OUTREG(RWIDTH_HEIGHT, ((w - 1) << 16) | h);
- WAITCMD();
- OUTREG(RDEST_XY, (x << 16) | y);
-}
-
-static void
-S3VSubsequentSolidHorVertLinePlaneMask(
- ScrnInfoPtr pScrn,
- int x, int y,
- int len, int dir
-){
- S3VPtr ps3v = S3VPTR(pScrn);
- int w, h, dwords;
-
- if(dir == DEGREES_0) {
- w = len; h = 1; dwords = (len + 31) >> 5;
- } else {
- w = 1; h = len; dwords = len;
- }
-
- CHECK_DEST_BASE(y,h);
-
- WAITFIFO(2);
- OUTREG(RWIDTH_HEIGHT, ((w - 1) << 16) | h);
- WAITCMD();
- OUTREG(RDEST_XY, (x << 16) | y);
-
- S3VWriteMask((CARD32*)ps3v->MapBaseDense, dwords);
-}
-
-#endif
void
S3VWaitFifoGX2(S3VPtr ps3v, int slots )
diff --git a/src/s3v_dga.c b/src/s3v_dga.c
index 0ab374d..7ae5fb2 100644
--- a/src/s3v_dga.c
+++ b/src/s3v_dga.c
@@ -72,10 +72,6 @@ static Bool S3V_OpenFramebuffer(ScrnInfoPtr, char **, unsigned char **,
static Bool S3V_SetMode(ScrnInfoPtr, DGAModePtr);
static int S3V_GetViewport(ScrnInfoPtr);
static void S3V_SetViewport(ScrnInfoPtr, int, int, int);
-#ifdef HAVE_XAA_H
-static void S3V_FillRect(ScrnInfoPtr, int, int, int, int, unsigned long);
-static void S3V_BlitRect(ScrnInfoPtr, int, int, int, int, int, int);
-#endif
/* dummy... */
@@ -87,12 +83,7 @@ DGAFunctionRec S3V_DGAFuncs = {
S3V_SetViewport,
S3V_GetViewport,
S3VAccelSync,
-#ifdef HAVE_XAA_H
- S3V_FillRect,
- S3V_BlitRect,
-#else
NULL, NULL,
-#endif
NULL
/* dummy... MGA_BlitTransRect */
};
@@ -139,10 +130,6 @@ SECOND_PASS:
currentMode->mode = pMode;
currentMode->flags = DGA_CONCURRENT_ACCESS | DGA_PIXMAP_AVAILABLE;
-#ifdef HAVE_XAA_H
- if(!ps3v->NoAccel)
- currentMode->flags |= DGA_FILL_RECT | DGA_BLIT_RECT;
-#endif
if(pMode->Flags & V_DBLSCAN)
currentMode->flags |= DGA_DOUBLESCAN;
if(pMode->Flags & V_INTERLACE)
@@ -286,43 +273,6 @@ S3V_SetViewport(
ps3v->DGAViewportStatus = 0; /* MGAAdjustFrame loops until finished */
}
-#ifdef HAVE_XAA_H
-static void
-S3V_FillRect (
- ScrnInfoPtr pScrn,
- int x, int y, int w, int h,
- unsigned long color
-){
- S3VPtr ps3v = S3VPTR(pScrn);
-
- if(ps3v->AccelInfoRec) {
- (*ps3v->AccelInfoRec->SetupForSolidFill)(pScrn, color, GXcopy, ~0);
- (*ps3v->AccelInfoRec->SubsequentSolidFillRect)(pScrn, x, y, w, h);
- SET_SYNC_FLAG(ps3v->AccelInfoRec);
- }
-}
-
-static void
-S3V_BlitRect(
- ScrnInfoPtr pScrn,
- int srcx, int srcy,
- int w, int h,
- int dstx, int dsty
-){
- S3VPtr ps3v = S3VPTR(pScrn);
-
- if(ps3v->AccelInfoRec) {
- int xdir = ((srcx < dstx) && (srcy == dsty)) ? -1 : 1;
- int ydir = (srcy < dsty) ? -1 : 1;
-
- (*ps3v->AccelInfoRec->SetupForScreenToScreenCopy)(
- pScrn, xdir, ydir, GXcopy, ~0, -1);
- (*ps3v->AccelInfoRec->SubsequentScreenToScreenCopy)(
- pScrn, srcx, srcy, dstx, dsty, w, h);
- SET_SYNC_FLAG(ps3v->AccelInfoRec);
- }
-}
-#endif
static Bool
diff --git a/src/s3v_driver.c b/src/s3v_driver.c
index 78cbf93..53ef658 100644
--- a/src/s3v_driver.c
+++ b/src/s3v_driver.c
@@ -31,12 +31,6 @@ in this Software without prior written authorization from the XFree86 Project.
#include <unistd.h>
#include "xf86.h"
-#if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 6
-#include "xf86Resources.h"
-/* Needed by Resources Access Control (RAC) */
-#include "xf86RAC.h"
-#endif
-
#include "xf86DDC.h"
#include "vbe.h"
@@ -1311,15 +1305,12 @@ S3VPreInit(ScrnInfoPtr pScrn, int flags)
return FALSE;
}
- /* Load XAA if needed */
if (!ps3v->NoAccel || ps3v->hwcursor ) {
- if (!xf86LoadSubModule(pScrn, "xaa")) {
- xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, VERBLEV,
- "Falling back to shadowfb\n");
- ps3v->NoAccel = 1;
- ps3v->hwcursor = 0;
- ps3v->shadowFB = 1;
- }
+ xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, VERBLEV,
+ "Falling back to shadowfb\n");
+ ps3v->NoAccel = 1;
+ ps3v->hwcursor = 0;
+ ps3v->shadowFB = 1;
}
/* Load ramdac if needed */
@@ -3298,10 +3289,6 @@ S3VCloseScreen(CLOSE_SCREEN_ARGS_DECL)
S3VUnmapMem(pScrn);
}
-#ifdef HAVE_XAA_H
- if (ps3v->AccelInfoRec)
- XAADestroyInfoRec(ps3v->AccelInfoRec);
-#endif
if (ps3v->DGAModes)
free(ps3v->DGAModes);
diff --git a/src/s3v_rop.h b/src/s3v_rop.h
deleted file mode 100644
index 8427fb9..0000000
--- a/src/s3v_rop.h
+++ /dev/null
@@ -1,206 +0,0 @@
-
-/*
-Copyright (C) 1994-1998 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.
-*/
-
-/* This file contains the data structures which map the X ROPs to the
- * ViRGE ROPs. It also contains other mappings which are used when supporting
- * planemasks and transparency.
- *
- * Created by Sebastien Marineau, 29/03/97.
- * This file should be included only from s3v_accel.c to avoid
- * duplicate symbols.
- *
- */
-
-#include "regs3v.h"
-
-static int s3vAlu[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 */
-};
-
-/* S -> P, for solid and pattern fills. */
-static int s3vAlu_sp[16]=
-{
- ROP_0,
- ROP_DPa,
- ROP_PDna,
- ROP_P,
- ROP_DPna,
- ROP_D,
- ROP_DPx,
- ROP_DPo,
- ROP_DPon,
- ROP_DPxn,
- ROP_Dn,
- ROP_PDno,
- ROP_Pn,
- ROP_DPno,
- ROP_DPan,
- ROP_1
-};
-
-/* ROP -> (ROP & P) | (D & ~P) */
-/* These are used to support a planemask for S->D ops */
-static int s3vAlu_pat[16] =
-{
- ROP_0_PaDPnao,
- ROP_DSa_PaDPnao,
- ROP_SDna_PaDPnao,
- ROP_S_PaDPnao,
- ROP_DSna_PaDPnao,
- ROP_D_PaDPnao,
- ROP_DSx_PaDPnao,
- ROP_DSo_PaDPnao,
- ROP_DSon_PaDPnao,
- ROP_DSxn_PaDPnao,
- ROP_Dn_PaDPnao,
- ROP_SDno_PaDPnao,
- ROP_Sn_PaDPnao,
- ROP_DSno_PaDPnao,
- ROP_DSan_PaDPnao,
- ROP_1_PaDPnao
-};
-
-/* ROP_sp -> (ROP_sp & S) | (D & ~S) */
-/* This is used for our transparent mono pattern fills to support trans/plane*/
-static int s3vAlu_MonoTrans[16] =
-{
- ROP_0_SaDSnao,
- ROP_DPa_SaDSnao,
- ROP_PDna_SaDSnao,
- ROP_P_SaDSnao,
- ROP_DPna_SaDSnao,
- ROP_D_SaDSnao,
- ROP_DPx_SaDSnao,
- ROP_DPo_SaDSnao,
- ROP_DPon_SaDSnao,
- ROP_DPxn_SaDSnao,
- ROP_Dn_SaDSnao,
- ROP_PDno_SaDSnao,
- ROP_Pn_SaDSnao,
- ROP_DPno_SaDSnao,
- ROP_DPan_SaDSnao,
- ROP_1_SaDSnao
-};
-
-
-
-/* This function was taken from accel/s3v.h. It adjusts the width
- * of transfers for mono images to works around some bugs.
- */
-
-static __inline__ int S3VCheckLSPN(S3VPtr ps3v, int w, int dir)
-{
- int lspn = (w * ps3v->Bpp) & 63; /* scanline width in bytes modulo 64*/
-
- if (ps3v->Bpp == 1) {
- if (lspn <= 8*1)
- w += 16;
- else if (lspn <= 16*1)
- w += 8;
- } else if (ps3v->Bpp == 2) {
- if (lspn <= 4*2)
- w += 8;
- else if (lspn <= 8*2)
- w += 4;
- } else { /* ps3v->Bpp == 3 */
- if (lspn <= 3*3)
- w += 6;
- else if (lspn <= 6*3)
- w += 3;
- }
- if (dir && w >= ps3v->bltbug_width1 && w <= ps3v->bltbug_width2) {
- w = ps3v->bltbug_width2 + 1;
- }
-
- return w;
-}
-
-/* And this adjusts color bitblts widths to work around GE bugs */
-
-static __inline__ int S3VCheckBltWidth(S3VPtr ps3v, int w)
-{
- if (w >= ps3v->bltbug_width1 && w <= ps3v->bltbug_width2) {
- w = ps3v->bltbug_width2 + 1;
- }
- return w;
-}
-
-/* This next function determines if the Source operand is present in the
- * given ROP. The rule is that both the lower and upper nibble of the rop
- * have to be neither 0x00, 0x05, 0x0a or 0x0f. If a CPU-Screen blit is done
- * with a ROP which does not contain the source, the virge will hang when
- * data is written to the image transfer area.
- */
-
-static __inline__ Bool S3VROPHasSrc(int shifted_rop)
-{
- int rop = (shifted_rop & (0xff << 17)) >> 17;
-
- if ((((rop & 0x0f) == 0x0a) | ((rop & 0x0f) == 0x0f)
- | ((rop & 0x0f) == 0x05) | ((rop & 0x0f) == 0x00)) &
- (((rop & 0xf0) == 0xa0) | ((rop & 0xf0) == 0xf0)
- | ((rop & 0xf0) == 0x50) | ((rop & 0xf0) == 0x00)))
- return FALSE;
- else
- return TRUE;
-}
-
-/* This next function determines if the Destination operand is present in the
- * given ROP. The rule is that both the lower and upper nibble of the rop
- * have to be neither 0x00, 0x03, 0x0c or 0x0f.
- */
-
-static __inline__ Bool S3VROPHasDst(int shifted_rop)
-{
- int rop = (shifted_rop & (0xff << 17)) >> 17;
-
- if ((((rop & 0x0f) == 0x0c) | ((rop & 0x0f) == 0x0f)
- | ((rop & 0x0f) == 0x03) | ((rop & 0x0f) == 0x00)) &
- (((rop & 0xf0) == 0xc0) | ((rop & 0xf0) == 0xf0)
- | ((rop & 0xf0) == 0x30) | ((rop & 0xf0) == 0x00)))
- return FALSE;
- else
- return TRUE;
-}
-
-
-