? Makefile
? accelfix.diff
? savage.4.html
? savage._man
? savage_driver.c.clut
Index: savage_accel.c
===================================================================
RCS file: /cvs/xorg/xc/programs/Xserver/hw/xfree86/drivers/savage/savage_accel.c,v
retrieving revision 1.21
diff -u -r1.21 savage_accel.c
--- savage_accel.c 11 Jul 2005 02:29:59 -0000 1.21
+++ savage_accel.c 4 Aug 2005 01:26:50 -0000
@@ -981,7 +981,8 @@
OUTREG32(0x8128, 0xFFFFFFFFL);
OUTREG32(0x812C, 0xFFFFFFFFL);
- OUTREG32(S3_BCI_GLB_BD_HIGH, bci_enable | S3_LITTLE_ENDIAN | S3_BD64);
+ if (!psav->IsSecondary)
+ OUTREG32(S3_BCI_GLB_BD_HIGH, bci_enable | S3_LITTLE_ENDIAN | S3_BD64);
/* CR50, bit 7,6,0 = 111, Use GBD.*/
OUTREG8(CRT_ADDRESS_REG,0x50);
@@ -1070,15 +1071,17 @@
byte = (INREG8(CRT_DATA_REG) | 0x04) & 0xFE;
OUTREG8(CRT_DATA_REG,byte);
- /* program the GBD and SBD's */
- OUTREG32(S3_GLB_BD_LOW,psav->GlobalBD.bd2.LoPart );
- /* 8: bci enable */
- OUTREG32(S3_GLB_BD_HIGH,(psav->GlobalBD.bd2.HiPart
+ if (!psav->IsSecondary) {
+ /* program the GBD and SBD's */
+ OUTREG32(S3_GLB_BD_LOW,psav->GlobalBD.bd2.LoPart );
+ /* 8: bci enable */
+ OUTREG32(S3_GLB_BD_HIGH,(psav->GlobalBD.bd2.HiPart
| bci_enable | S3_LITTLE_ENDIAN | S3_BD64));
- OUTREG32(S3_PRI_BD_LOW,psav->GlobalBD.bd2.LoPart);
- OUTREG32(S3_PRI_BD_HIGH,psav->GlobalBD.bd2.HiPart);
- OUTREG32(S3_SEC_BD_LOW,psav->GlobalBD.bd2.LoPart);
- OUTREG32(S3_SEC_BD_HIGH,psav->GlobalBD.bd2.HiPart);
+ OUTREG32(S3_PRI_BD_LOW,psav->GlobalBD.bd2.LoPart);
+ OUTREG32(S3_PRI_BD_HIGH,psav->GlobalBD.bd2.HiPart);
+ OUTREG32(S3_SEC_BD_LOW,psav->GlobalBD.bd2.LoPart);
+ OUTREG32(S3_SEC_BD_HIGH,psav->GlobalBD.bd2.HiPart);
+ }
/* turn on screen */
OUTREG8(SEQ_ADDRESS_REG,0x01);
@@ -1230,8 +1233,9 @@
OUTREG32(0x8128, 0xFFFFFFFFL);
OUTREG32(0x812C, 0xFFFFFFFFL);
- /* bit 28:block write disable */
- OUTREG32(S3_GLB_BD_HIGH, bci_enable | S3_BD64 | 0x10000000);
+ if (!psav->IsSecondary)
+ /* bit 28:block write disable */
+ OUTREG32(S3_GLB_BD_HIGH, bci_enable | S3_BD64 | 0x10000000);
/* CR50, bit 7,6,0 = 111, Use GBD.*/
OUTREG8(CRT_ADDRESS_REG,0x50);
@@ -1281,14 +1285,16 @@
byte = INREG8(CRT_DATA_REG) & (~(ENABLE_CPUA_BASE_A0000));
OUTREG8(CRT_DATA_REG,byte);
- /* program the GBD and SBDs */
- OUTREG32(S3_GLB_BD_LOW,psav->GlobalBD.bd2.LoPart );
- OUTREG32(S3_GLB_BD_HIGH,(psav->GlobalBD.bd2.HiPart
+ if (!psav->IsSecondary) {
+ /* program the GBD and SBDs */
+ OUTREG32(S3_GLB_BD_LOW,psav->GlobalBD.bd2.LoPart );
+ OUTREG32(S3_GLB_BD_HIGH,(psav->GlobalBD.bd2.HiPart
| bci_enable | S3_LITTLE_ENDIAN | 0x10000000 | S3_BD64));
- OUTREG32(S3_PRI_BD_LOW,psav->GlobalBD.bd2.LoPart);
- OUTREG32(S3_PRI_BD_HIGH,psav->GlobalBD.bd2.HiPart);
- OUTREG32(S3_SEC_BD_LOW,psav->GlobalBD.bd2.LoPart);
- OUTREG32(S3_SEC_BD_HIGH,psav->GlobalBD.bd2.HiPart);
+ OUTREG32(S3_PRI_BD_LOW,psav->GlobalBD.bd2.LoPart);
+ OUTREG32(S3_PRI_BD_HIGH,psav->GlobalBD.bd2.HiPart);
+ OUTREG32(S3_SEC_BD_LOW,psav->GlobalBD.bd2.LoPart);
+ OUTREG32(S3_SEC_BD_HIGH,psav->GlobalBD.bd2.HiPart);
+ }
/* turn on screen */
OUTREG8(SEQ_ADDRESS_REG,0x01);
@@ -1433,46 +1439,6 @@
OUTREG8(SEQ_DATA_REG,byte);
}
-static
-void SavageRestoreAccelState(ScrnInfoPtr pScrn)
-{
- SavagePtr psav = SAVPTR(pScrn);
- int bci_enable;
- unsigned long cmd;
-
- BCI_GET_PTR;
-
- if (psav->Chipset == S3_SAVAGE_MX)
- bci_enable = BCI_ENABLE;
- else
- bci_enable = BCI_ENABLE_TWISTER;
-
- psav->WaitIdleEmpty(psav);
-
- /* may only need to update the GBD */
-#if 1
- psav->WaitQueue(psav, 2);
-
- cmd = BCI_SET_REGISTER | 0xE0 | (2<<16);
- BCI_SEND(cmd);
- BCI_SEND(psav->GlobalBD.bd2.LoPart);
- BCI_SEND((psav->GlobalBD.bd2.HiPart
- | bci_enable | S3_LITTLE_ENDIAN | S3_BD64));
-#endif
-#if 0
- /* program the GBD */
- OUTREG32(S3_GLB_BD_LOW,psav->GlobalBD.bd2.LoPart );
- OUTREG32(S3_GLB_BD_HIGH,(psav->GlobalBD.bd2.HiPart
- | bci_enable | S3_LITTLE_ENDIAN | S3_BD64));
- OUTREG32(S3_PRI_BD_LOW,psav->GlobalBD.bd2.LoPart);
- OUTREG32(S3_PRI_BD_HIGH,psav->GlobalBD.bd2.HiPart);
- OUTREG32(S3_SEC_BD_LOW,psav->GlobalBD.bd2.LoPart);
- OUTREG32(S3_SEC_BD_HIGH,psav->GlobalBD.bd2.HiPart);
-#endif
-
- return;
-}
-
/* Acceleration init function, sets up pointers to our accelerated functions */
Bool
@@ -1526,38 +1492,17 @@
xaaptr->Sync = SavageAccelSync;
- if(xf86IsEntityShared(pScrn->entityList[0]))
- {
- DevUnion* pPriv;
- SavageEntPtr pEnt;
- pPriv = xf86GetEntityPrivate(pScrn->entityList[0],
- gSavageEntityIndex);
- pEnt = pPriv->ptr;
-
- /*if there are more than one devices sharing this entity, we
- have to assign this call back, otherwise the XAA will be
- disabled */
- if(pEnt->HasSecondary)
- xaaptr->RestoreAccelState = SavageRestoreAccelState;
- }
-
-
/* ScreenToScreen copies */
#if 1
- /* screen to screen copies cause corruption when used on crtc2 @32 bpp
- not sure why -- AGD */
- if ((pScrn->bitsPerPixel == 32) && (psav->IsSecondary)) {
- xf86DrvMsg(pScrn->scrnIndex, X_INFO,
- "XAAScreenToScreenCopy disabled on crtc2 at depth 24\n");
- } else {
+
xaaptr->SetupForScreenToScreenCopy = SavageSetupForScreenToScreenCopy;
xaaptr->SubsequentScreenToScreenCopy = SavageSubsequentScreenToScreenCopy;
xaaptr->ScreenToScreenCopyFlags = 0
| NO_TRANSPARENCY
| NO_PLANEMASK
| ROP_NEEDS_SOURCE;
- }
+
#endif
@@ -2125,7 +2070,8 @@
SavagePtr psav = SAVPTR(pScrn);
int cmd;
- cmd = BCI_CMD_RECT | BCI_CMD_DEST_GBD | BCI_CMD_SRC_GBD;
+ cmd = BCI_CMD_RECT | BCI_CMD_DEST_PBD_NEW | BCI_CMD_SRC_SBD_COLOR_NEW;
+
BCI_CMD_SET_ROP( cmd, XAAGetCopyROP(rop) );
if (transparency_color != -1)
cmd |= BCI_CMD_SEND_COLOR | BCI_CMD_SRC_TRANSPARENT;
@@ -2148,9 +2094,11 @@
int h)
{
SavagePtr psav = SAVPTR(pScrn);
+
BCI_GET_PTR;
if (!w || !h) return;
+
if (!(psav->SavedBciCmd & BCI_CMD_RECT_XP)) {
w --;
x1 += w;
@@ -2164,8 +2112,17 @@
h ++;
}
- psav->WaitQueue(psav,6);
+ psav->WaitQueue(psav,9);
+
+
BCI_SEND(psav->SavedBciCmd);
+
+ BCI_SEND(psav->GlobalBD.bd2.LoPart);
+ BCI_SEND(psav->GlobalBD.bd2.HiPart);
+
+ BCI_SEND(psav->GlobalBD.bd2.LoPart);
+ BCI_SEND(psav->GlobalBD.bd2.HiPart);
+
if (psav->SavedBgColor != 0xffffffff)
BCI_SEND(psav->SavedBgColor);
BCI_SEND(BCI_X_Y(x1, y1));
@@ -2192,7 +2149,7 @@
cmd = BCI_CMD_RECT
| BCI_CMD_RECT_XP | BCI_CMD_RECT_YP
- | BCI_CMD_DEST_GBD | BCI_CMD_SRC_SOLID;
+ | BCI_CMD_DEST_PBD_NEW | BCI_CMD_SRC_SOLID;
/* Don't send a color if we don't have to. */
@@ -2230,9 +2187,13 @@
if( !w || !h )
return;
- psav->WaitQueue(psav,5);
+ psav->WaitQueue(psav,7);
BCI_SEND(psav->SavedBciCmd);
+
+ BCI_SEND(psav->GlobalBD.bd2.LoPart);
+ BCI_SEND(psav->GlobalBD.bd2.HiPart);
+
if( psav->SavedBciCmd & BCI_CMD_SEND_COLOR )
BCI_SEND(psav->SavedFgColor);
BCI_SEND(BCI_X_Y(x, y));
@@ -2279,7 +2240,7 @@
cmd = BCI_CMD_RECT | BCI_CMD_RECT_XP | BCI_CMD_RECT_YP
| BCI_CMD_CLIP_LR
- | BCI_CMD_DEST_GBD | BCI_CMD_SRC_MONO;
+ | BCI_CMD_DEST_PBD_NEW | BCI_CMD_SRC_MONO;
mix = SavageHelpPatternROP( pScrn, &fg, &bg, planemask, &rop );
@@ -2314,9 +2275,13 @@
/* XAA will be sending bitmap data next. */
/* We should probably wait for empty/idle here. */
- psav->WaitQueue(psav,20);
+ psav->WaitQueue(psav,22);
BCI_SEND(psav->SavedBciCmd);
+
+ BCI_SEND(psav->GlobalBD.bd2.LoPart);
+ BCI_SEND(psav->GlobalBD.bd2.HiPart);
+
BCI_SEND(BCI_CLIP_LR(x+skipleft, x+w-1));
w = (w + 31) & ~31;
if( psav->SavedBciCmd & BCI_CMD_SEND_COLOR )
@@ -2382,7 +2347,7 @@
mix = XAAHelpPatternROP( pScrn, &fg, &bg, planemask, &rop );
cmd = BCI_CMD_RECT | BCI_CMD_RECT_XP | BCI_CMD_RECT_YP
- | BCI_CMD_DEST_GBD;
+ | BCI_CMD_DEST_PBD_NEW;
if( mix & ROP_PAT )
cmd |= BCI_CMD_SEND_COLOR | BCI_CMD_PAT_MONO;
@@ -2420,8 +2385,12 @@
if( !w || !h )
return;
- psav->WaitQueue(psav,7);
+ psav->WaitQueue(psav,9);
BCI_SEND(psav->SavedBciCmd);
+
+ BCI_SEND(psav->GlobalBD.bd2.LoPart);
+ BCI_SEND(psav->GlobalBD.bd2.HiPart);
+
if( psav->SavedBciCmd & BCI_CMD_SEND_COLOR )
BCI_SEND(psav->SavedFgColor);
if( psav->SavedBgColor != 0xffffffff )
Index: savage_image.c
===================================================================
RCS file: /cvs/xorg/xc/programs/Xserver/hw/xfree86/drivers/savage/savage_image.c,v
retrieving revision 1.5
diff -u -r1.5 savage_image.c
--- savage_image.c 11 Jul 2005 02:29:59 -0000 1.5
+++ savage_image.c 4 Aug 2005 01:26:50 -0000
@@ -105,13 +105,17 @@
cmd = BCI_CMD_RECT | BCI_CMD_RECT_XP | BCI_CMD_RECT_YP
| BCI_CMD_SEND_COLOR | BCI_CMD_CLIP_LR
- | BCI_CMD_DEST_GBD | BCI_CMD_SRC_MONO;
+ | BCI_CMD_DEST_PBD_NEW | BCI_CMD_SRC_MONO;
cmd |= XAAGetCopyROP(rop) << 16;
if( bg == -1 )
cmd |= BCI_CMD_SRC_TRANSPARENT;
BCI_SEND(cmd);
+
+ BCI_SEND(psav->GlobalBD.bd2.LoPart);
+ BCI_SEND(psav->GlobalBD.bd2.HiPart);
+
BCI_SEND(BCI_CLIP_LR(x+skipleft, x+w-1));
BCI_SEND(fg);
if( bg != -1 )
@@ -162,7 +166,7 @@
cmd = BCI_CMD_RECT | BCI_CMD_RECT_XP | BCI_CMD_RECT_YP
| BCI_CMD_CLIP_LR
- | BCI_CMD_DEST_GBD | BCI_CMD_SRC_COLOR;
+ | BCI_CMD_DEST_PBD_NEW | BCI_CMD_SRC_COLOR;
cmd |= XAAGetCopyROP(rop) << 16;
@@ -186,8 +190,12 @@
SavagePtr psav = SAVPTR(pScrn);
BCI_GET_PTR;
- psav->WaitQueue( psav, 6 );
+ psav->WaitQueue( psav, 8 );
BCI_SEND(psav->SavedBciCmd);
+
+ BCI_SEND(psav->GlobalBD.bd2.LoPart);
+ BCI_SEND(psav->GlobalBD.bd2.HiPart);
+
BCI_SEND(BCI_CLIP_LR(x+skipleft, x+w-1));
if( psav->SavedBgColor != 0xffffffff )
BCI_SEND(psav->SavedBgColor);