diff -ur xc.orig/programs/Xserver/hw/xfree86/common/compiler.h xc/programs/Xserver/hw/xfree86/common/compiler.h --- xc.orig/programs/Xserver/hw/xfree86/common/compiler.h Fri Dec 8 22:58:34 2000 +++ xc/programs/Xserver/hw/xfree86/common/compiler.h Sun Mar 18 17:23:33 2001 @@ -1514,19 +1514,17 @@ /* Changed to kill noise generated by gcc's -Wcast-align */ #define MMIO_IN8(base, offset) (*xf86ReadMmio8)(base, offset) #define MMIO_IN16(base, offset) (*xf86ReadMmio16)(base, offset) -# if defined (JENSEN_SUPPORT) #define MMIO_IN32(base, offset) (*xf86ReadMmio32)(base, offset) +# if defined (JENSEN_SUPPORT) #define MMIO_OUT32(base, offset, val) \ (*xf86WriteMmio32)((CARD32)(val), base, offset) #define MMIO_ONB32(base, offset, val) \ (*xf86WriteMmioNB32)((CARD32)(val), base, offset) # else -#define MMIO_IN32(base, offset) \ - *(volatile CARD32 *)(void *)(((CARD8*)(base)) + (offset)) #define MMIO_OUT32(base, offset, val) \ do { \ - *(volatile CARD32 *)(void *)(((CARD8*)(base)) + (offset)) = (val); \ write_mem_barrier(); \ + *(volatile CARD32 *)(void *)(((CARD8*)(base)) + (offset)) = (val); \ } while (0) #define MMIO_ONB32(base, offset, val) \ *(volatile CARD32 *)(void *)(((CARD8*)(base)) + (offset)) = (val) diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/ati/r128_accel.c xc/programs/Xserver/hw/xfree86/drivers/ati/r128_accel.c --- xc.orig/programs/Xserver/hw/xfree86/drivers/ati/r128_accel.c Mon Dec 4 19:55:22 2000 +++ xc/programs/Xserver/hw/xfree86/drivers/ati/r128_accel.c Sun Apr 1 20:51:03 2001 @@ -838,6 +838,7 @@ if (info->scanline_direct) return; --info->scanline_h; while (left) { + write_mem_barrier(); if (left <= 8) { /* Last scanline - finish write to DATA_LAST */ if (info->scanline_h == 0) { @@ -980,6 +981,7 @@ if (info->scanline_direct) return; --info->scanline_h; while (left) { + write_mem_barrier(); if (left <= 8) { /* Last scanline - finish write to DATA_LAST */ if (info->scanline_h == 0) { diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/ati/r128_driver.c xc/programs/Xserver/hw/xfree86/drivers/ati/r128_driver.c --- xc.orig/programs/Xserver/hw/xfree86/drivers/ati/r128_driver.c Sat Mar 17 17:57:15 2001 +++ xc/programs/Xserver/hw/xfree86/drivers/ati/r128_driver.c Sun Mar 18 16:51:29 2001 @@ -1016,8 +1016,8 @@ if (!xf86LoadSubModule(pScrn, "ddc")) return FALSE; xf86LoaderReqSymLists(ddcSymbols, NULL); -#if defined(__powerpc__) - /* Int10 is broken on PPC */ +#if defined(__powerpc__) || defined(__alpha__) + /* Int10 is broken on PPC and some Alphas */ return TRUE; #else if (xf86LoadSubModule(pScrn, "vbe")) { @@ -1156,7 +1156,8 @@ static Bool R128PreInitInt10(ScrnInfoPtr pScrn) { R128InfoPtr info = R128PTR(pScrn); -#if 1 +#if 1 && !defined(__alpha__) + /* int10 is broken on some Alphas */ if (xf86LoadSubModule(pScrn, "int10")) { xf86Int10InfoPtr pInt; xf86DrvMsg(pScrn->scrnIndex,X_INFO,"initializing int10\n"); diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/ati/radeon_accel.c xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_accel.c --- xc.orig/programs/Xserver/hw/xfree86/drivers/ati/radeon_accel.c Wed Nov 29 11:42:11 2000 +++ xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_accel.c Fri Mar 23 16:20:46 2001 @@ -585,7 +585,13 @@ info->scanline_h = h; info->scanline_words = (w + 31) >> 5; - if ((info->scanline_words * h) <= 9) { +#ifdef __alpha__ + /* always indirect for Alpha */ + if (0) +#else + if ((info->scanline_words * h) <= 9) +#endif + { /* Turn on direct for less than 9 dword colour expansion */ info->scratch_buffer[0] = (unsigned char *)(ADDRREG(RADEON_HOST_DATA_LAST) @@ -621,6 +627,7 @@ if (info->scanline_direct) return; --info->scanline_h; while (left) { + write_mem_barrier(); if (left <= 8) { /* Last scanline - finish write to DATA_LAST */ if (info->scanline_h == 0) { @@ -699,7 +706,13 @@ info->scanline_h = h; info->scanline_words = (w * info->scanline_bpp + 31) >> 5; - if ((info->scanline_words * h) <= 9) { +#ifdef __alpha__ + /* always indirect for Alpha */ + if (0) +#else + if ((info->scanline_words * h) <= 9) +#endif + { /* Turn on direct for less than 9 dword colour expansion */ info->scratch_buffer[0] = (unsigned char *)(ADDRREG(RADEON_HOST_DATA_LAST) @@ -735,6 +748,7 @@ if (info->scanline_direct) return; --info->scanline_h; while (left) { + write_mem_barrier(); if (left <= 8) { /* Last scanline - finish write to DATA_LAST */ if (info->scanline_h == 0) { diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/glint/dualmx_accel.c xc/programs/Xserver/hw/xfree86/drivers/glint/dualmx_accel.c --- xc.orig/programs/Xserver/hw/xfree86/drivers/glint/dualmx_accel.c Sat Jun 24 14:19:54 2000 +++ xc/programs/Xserver/hw/xfree86/drivers/glint/dualmx_accel.c Sun Mar 18 16:53:54 2001 @@ -324,28 +324,6 @@ GLINT_WRITE_REG(d<<16,dY); } -static void MoveDWORDS( - 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); -} - #define Sync_tag 0x188 static void @@ -572,7 +550,8 @@ while (dwords >= infoRec->ColorExpandRange) { GLINT_WAIT(infoRec->ColorExpandRange); GLINT_WRITE_REG((infoRec->ColorExpandRange - 2)<<16 | 0x0D, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), src, + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), src, infoRec->ColorExpandRange - 1); dwords -= (infoRec->ColorExpandRange - 1); src += (infoRec->ColorExpandRange - 1); @@ -580,7 +559,8 @@ if (dwords) { GLINT_WAIT(dwords); GLINT_WRITE_REG((dwords - 1)<<16 | 0x0D, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), src,dwords); + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), src,dwords); } pGlint->cpucount += 1; #if 0 @@ -887,7 +867,8 @@ /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */ GLINT_WRITE_REG(((infoRec->ColorExpandRange - 2) << 16) | (0x15 << 4) | 0x05, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (CARD32*)srcp, infoRec->ColorExpandRange - 1); count -= infoRec->ColorExpandRange - 1; srcp += infoRec->ColorExpandRange - 1; @@ -897,7 +878,8 @@ /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */ GLINT_WRITE_REG(((count - 1) << 16) | (0x15 << 4) | 0x05, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (CARD32*)srcp, count); } src += srcwidth; diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/glint/glint.h xc/programs/Xserver/hw/xfree86/drivers/glint/glint.h --- xc.orig/programs/Xserver/hw/xfree86/drivers/glint/glint.h Wed Nov 29 11:42:16 2000 +++ xc/programs/Xserver/hw/xfree86/drivers/glint/glint.h Sun Mar 18 21:36:41 2001 @@ -120,6 +120,7 @@ Bool UseBlockWrite; Bool UseFireGL3000; Bool VGAcore; + Bool ScanlineDirect; int MXFbSize; CARD32 rasterizerMode; int MinClock; @@ -141,6 +142,7 @@ DrawablePtr CurrentDrawable; I2CBusPtr DDCBus, VSBus; CARD8* XAAScanlineColorExpandBuffers[2]; + CARD8* ScratchBuffer; CARD32 RasterizerSwap; int PM3_Config2D; int PM3_Render2D; @@ -282,6 +284,10 @@ LOCO *colors, VisualPtr pVisual); void Permedia2LoadPalette16(ScrnInfoPtr pScrn, int numColors, int *indices, LOCO *colors, VisualPtr pVisual); +void Permedia3LoadPalette(ScrnInfoPtr pScrn, int numColors, int *indices, + LOCO *colors, VisualPtr pVisual); +void Permedia3LoadPalette16(ScrnInfoPtr pScrn, int numColors, int *indices, + LOCO *colors, VisualPtr pVisual); void Permedia2I2CUDelay(I2CBusPtr b, int usec); void Permedia2I2CPutBits(I2CBusPtr b, int scl, int sda); void Permedia2I2CGetBits(I2CBusPtr b, int *scl, int *sda); @@ -314,4 +320,8 @@ CARD32 GLINT_VERB_READ_REG(GLINTPtr, CARD32 r, char *file, int line); void GLINTRefreshArea(ScrnInfoPtr pScrn, int num, BoxPtr pbox); + +void GLINT_MoveBYTES(CARD32* dest, unsigned char* src, int dwords); +void GLINT_MoveWORDS(CARD32* dest, unsigned short* src, int dwords); +void GLINT_MoveDWORDS(CARD32* dest, CARD32* src, int dwords); #endif /* _GLINT_H_ */ diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/glint/glint_driver.c xc/programs/Xserver/hw/xfree86/drivers/glint/glint_driver.c --- xc.orig/programs/Xserver/hw/xfree86/drivers/glint/glint_driver.c Fri Dec 8 22:58:55 2000 +++ xc/programs/Xserver/hw/xfree86/drivers/glint/glint_driver.c Sun Mar 18 21:39:59 2001 @@ -2610,8 +2610,17 @@ if (!miCreateDefColormap(pScreen)) return FALSE; + if (pGlint->Chipset == PCI_VENDOR_3DLABS_CHIP_PERMEDIA3) { + if (!xf86HandleColormaps(pScreen, 256, pScrn->rgbBits, + (pGlint->FBDev) ? fbdevHWLoadPalette : + ((pScrn->depth == 16) ? Permedia3LoadPalette16:Permedia3LoadPalette), + NULL, + CMAP_RELOAD_ON_MODE_SWITCH | + ((pScrn->overlayFlags & OVERLAY_8_32_PLANAR) + ? 0 : CMAP_PALETTED_TRUECOLOR))) + return FALSE; + } else if ((pGlint->Chipset == PCI_VENDOR_3DLABS_CHIP_PERMEDIA2V) || - (pGlint->Chipset == PCI_VENDOR_3DLABS_CHIP_PERMEDIA3) || (pGlint->Chipset == PCI_VENDOR_3DLABS_CHIP_PERMEDIA2) || (pGlint->Chipset == PCI_VENDOR_TI_CHIP_PERMEDIA2)) { if (!xf86HandleColormaps(pScreen, 256, pScrn->rgbBits, @@ -3051,16 +3060,86 @@ { if (xf86GetVerbosity() > 2) ErrorF("[0x%04x] <- 0x%08x (%s, %d)\n", r, v, file, line); +#if defined(__alpha__) + GLINT_WRITE_REG(v, r); +#else *(volatile CARD32 *)((char *) pGlint->IOBase + r) = v; +#endif } CARD32 GLINT_VERB_READ_REG(GLINTPtr pGlint, CARD32 r, char *file, int line) { - CARD32 v = *(volatile CARD32 *)((char *) pGlint->IOBase + r); + CARD32 v; +#if defined(__alpha__) + v = GLINT_READ_REG(r); +#else + v = *(volatile CARD32 *)((char *) pGlint->IOBase + r); +#endif if (xf86GetVerbosity() > 2) ErrorF("[0x%04x] -> 0x%08x (%s, %d)\n", r, v, file, line); return v; } #endif + +void GLINT_MoveBYTES( + register CARD32* dest, + register unsigned char* src, + register int dwords) +{ +#if defined(__alpha__) + write_mem_barrier(); +#endif + while(dwords) { + *dest = *src; + src += 1; + dest += 1; + dwords -= 1; + } +} + +void GLINT_MoveWORDS( + register CARD32* dest, + register unsigned short* src, + register int dwords) +{ +#if defined(__alpha__) + write_mem_barrier(); +#endif + while(dwords & ~0x01) { + *dest = *src; + *(dest + 1) = *(src + 1); + src += 2; + dest += 2; + dwords -= 2; + } + if(dwords) + *dest = *src; + return; +} + +void GLINT_MoveDWORDS( + register CARD32* dest, + register CARD32* src, + register int dwords) +{ +#if defined(__alpha__) + write_mem_barrier(); +#endif + 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); +} diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/glint/glint_regs.h xc/programs/Xserver/hw/xfree86/drivers/glint/glint_regs.h --- xc.orig/programs/Xserver/hw/xfree86/drivers/glint/glint_regs.h Fri Oct 27 21:23:07 2000 +++ xc/programs/Xserver/hw/xfree86/drivers/glint/glint_regs.h Sun Mar 18 17:05:13 2001 @@ -1201,10 +1201,17 @@ #define GLINT_SLOW_WRITE_REG(v,r) \ do{ \ - GLINTDACDelay(5); \ + mem_barrier(); \ + GLINT_WAIT(1); \ + mem_barrier(); \ GLINT_WRITE_REG(v,r); \ - GLINTDACDelay(5); \ }while(0) + +#define GLINT_SET_INDEX(index) \ +do{ \ + GLINT_SLOW_WRITE_REG(((index)>>8)&0xff,PM2VDACIndexRegHigh); \ + GLINT_SLOW_WRITE_REG((index)&0xff,PM2VDACIndexRegLow); \ +} while(0) #define GLINT_SECONDARY_SLOW_WRITE_REG(v,r) \ do{ \ diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/glint/pm2_accel.c xc/programs/Xserver/hw/xfree86/drivers/glint/pm2_accel.c --- xc.orig/programs/Xserver/hw/xfree86/drivers/glint/pm2_accel.c Fri Mar 31 17:55:43 2000 +++ xc/programs/Xserver/hw/xfree86/drivers/glint/pm2_accel.c Sun Mar 18 16:55:14 2001 @@ -356,8 +356,6 @@ Permedia2SubsequentColorExpandScanline; } - infoPtr->ColorExpandRange = MAX_FIFO_ENTRIES; - infoPtr->WriteBitmap = Permedia2WriteBitmap; if (pScrn->bitsPerPixel == 8) @@ -427,10 +425,14 @@ CHECKCLIPPING; while (GLINT_READ_REG(DMACount) != 0); - GLINT_WAIT(1); - GLINT_WRITE_REG(0, GlintSync); + + GLINT_SLOW_WRITE_REG(0xc00, FilterMode); + + GLINT_WAIT(2); + GLINT_SLOW_WRITE_REG(0, GlintSync); + do { - while(GLINT_READ_REG(OutFIFOWords) == 0); + while(GLINT_READ_REG(OutFIFOWords) == 0); #define Sync_tag 0x188 } while (GLINT_READ_REG(OutputFIFO) != Sync_tag); } @@ -733,63 +735,6 @@ TRACE_EXIT("Permedia2SubsequentFillRectSolid"); } -static void MoveBYTE( - register CARD32* dest, - register unsigned char* src, - register int dwords -) -{ - while(dwords) { - *dest = *src; - src += 1; - dest += 1; - dwords -= 1; - } -} - -static void MoveWORDS( - register CARD32* dest, - register unsigned short* src, - register int dwords -) -{ - while(dwords & ~0x01) { - *dest = *src; - *(dest + 1) = *(src + 1); - src += 2; - dest += 2; - dwords -= 2; - } - switch(dwords) { - case 0: return; - case 1: *dest = *src; - return; - } -} - -static void MoveDWORDS( - 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); -} - - static void Permedia2SetupForMono8x8PatternFill24bpp(ScrnInfoPtr pScrn, int patternx, int patterny, @@ -1117,10 +1062,10 @@ Permedia2SetClippingRectangle(pScrn,x+skipleft,y,x+w,y+h); if (pScrn->bitsPerPixel == 24) { - GLINT_WAIT(10); + GLINT_WAIT(10); } else { GLINT_WAIT(11); - DO_PLANEMASK(planemask); + DO_PLANEMASK(planemask); } LOADROP(rop); Permedia2LoadCoord(pScrn, x&0xFFFF, y, w, h); @@ -1137,39 +1082,40 @@ mode = 0; GLINT_WRITE_REG(UNIT_ENABLE, ColorDDAMode); GLINT_WRITE_REG(BitMaskPackingEachScanline| - pGlint->RasterizerSwap,RasterizerMode); + pGlint->RasterizerSwap,RasterizerMode); } if(bg == -1) { /* >>>>> set fg <<<<<<<< */ REPLICATE(fg); - if ((pScrn->bitsPerPixel != 24) && (rop == GXcopy)) { - GLINT_WRITE_REG(fg, FBBlockColor); + if ((pScrn->bitsPerPixel != 24) && (rop == GXcopy)) { + GLINT_WRITE_REG(fg, FBBlockColor); } else { - GLINT_WRITE_REG(fg, ConstantColor); + GLINT_WRITE_REG(fg, ConstantColor); } } else if(rop == GXcopy) { - /* >>>>> set bg <<<<<<< */ - /* >>>>> draw rect (x,y,w,h) */ - REPLICATE(bg); - if ((pScrn->bitsPerPixel != 24) && (rop == GXcopy)) { + /* >>>>> set bg <<<<<<< */ + /* >>>>> draw rect (x,y,w,h) */ + REPLICATE(bg); + if ((pScrn->bitsPerPixel != 24) && (rop == GXcopy)) { GLINT_WRITE_REG(bg, FBBlockColor); } else { GLINT_WRITE_REG(bg, ConstantColor); } - GLINT_WRITE_REG(PrimitiveRectangle | XPositive | YPositive |mode,Render); + GLINT_WRITE_REG(PrimitiveRectangle | XPositive | YPositive |mode, + Render); /* >>>>>> set fg <<<<<< */ REPLICATE(fg); - if ((pScrn->bitsPerPixel != 24) && (rop == GXcopy)) { + if ((pScrn->bitsPerPixel != 24) && (rop == GXcopy)) { GLINT_WRITE_REG(fg, FBBlockColor); } else { GLINT_WRITE_REG(fg, ConstantColor); } } else { - SecondPass = TRUE; + SecondPass = TRUE; /* >>>>> set fg <<<<<<< */ REPLICATE(fg); - if ((pScrn->bitsPerPixel != 24) && (rop == GXcopy)) { + if ((pScrn->bitsPerPixel != 24) && (rop == GXcopy)) { GLINT_WRITE_REG(fg, FBBlockColor); } else { GLINT_WRITE_REG(fg, ConstantColor); @@ -1188,8 +1134,8 @@ GLINT_WAIT(dwords); /* 0x0D is the TAG value for BitMaskPattern */ GLINT_WRITE_REG(((dwords - 1) << 16) | 0x0D, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), - (CARD32 *)srcpntr, dwords); + GLINT_MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + (CARD32 *)srcpntr, dwords); srcpntr += srcwidth; } @@ -1198,12 +1144,13 @@ /* >>>>>> invert bitmask and set bg <<<<<<<< */ REPLICATE(bg); GLINT_WAIT(3); - if ((pScrn->bitsPerPixel != 24) && (rop == GXcopy)) { - GLINT_WRITE_REG(InvertBitMask|pGlint->RasterizerSwap,RasterizerMode); + if ((pScrn->bitsPerPixel != 24) && (rop == GXcopy)) { + GLINT_WRITE_REG(InvertBitMask|pGlint->RasterizerSwap, + RasterizerMode); GLINT_WRITE_REG(bg, FBBlockColor); } else { - GLINT_WRITE_REG(InvertBitMask|BitMaskPackingEachScanline| - pGlint->RasterizerSwap, RasterizerMode); + GLINT_WRITE_REG(InvertBitMask|BitMaskPackingEachScanline| + pGlint->RasterizerSwap, RasterizerMode); GLINT_WRITE_REG(bg, ConstantColor); } goto SECOND_PASS; @@ -1276,13 +1223,15 @@ count = dwords; address = ((y * pScrn->displayWidth) + x) >> 2; srcp = (CARD32*)src; + GLINT_WAIT(1); GLINT_WRITE_REG(address, TextureDownloadOffset); while(count >= MAX_FIFO_ENTRIES) { GLINT_WAIT(MAX_FIFO_ENTRIES); /* (0x11 << 4) | 0x0D is the TAG for TextureData */ GLINT_WRITE_REG(((MAX_FIFO_ENTRIES - 2) << 16) | (0x11 << 4) | 0x0D, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (CARD32*)srcp, MAX_FIFO_ENTRIES - 1); count -= MAX_FIFO_ENTRIES - 1; address += MAX_FIFO_ENTRIES - 1; @@ -1293,7 +1242,8 @@ /* (0x11 << 4) | 0x0D is the TAG for TextureData */ GLINT_WRITE_REG(((count - 1) << 16) | (0x11 << 4) | 0x0D, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (CARD32*)srcp, count); } src += srcwidth; @@ -1304,7 +1254,7 @@ } else { char align = (x & pGlint->bppalign); - + GLINT_WAIT(1); GLINT_WRITE_REG(UNIT_DISABLE, ColorDDAMode); if (rop == GXcopy) { GLINT_WAIT(6); @@ -1329,7 +1279,8 @@ /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */ GLINT_WRITE_REG(((MAX_FIFO_ENTRIES - 2) << 16) | (0x15 << 4) | 0x05, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (CARD32*)srcp, MAX_FIFO_ENTRIES - 1); count -= MAX_FIFO_ENTRIES - 1; srcp += MAX_FIFO_ENTRIES - 1; @@ -1339,7 +1290,8 @@ /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */ GLINT_WRITE_REG(((count - 1) << 16) | (0x15 << 4) | 0x05, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (CARD32*)srcp, count); } src += srcwidth; @@ -1353,7 +1305,8 @@ /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */ GLINT_WRITE_REG(((MAX_FIFO_ENTRIES - 2) << 16) | (0x15 << 4) | 0x05, OutputFIFO); - MoveBYTE((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveBYTES( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (unsigned char *)srcpbyte, MAX_FIFO_ENTRIES - 1); count -= MAX_FIFO_ENTRIES - 1; srcpbyte += MAX_FIFO_ENTRIES - 1; @@ -1363,7 +1316,8 @@ /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */ GLINT_WRITE_REG(((count - 1) << 16) | (0x15 << 4) | 0x05, OutputFIFO); - MoveBYTE((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveBYTES( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (unsigned char *)srcpbyte, count); } src += srcwidth; @@ -1435,13 +1389,15 @@ count = dwords; address = ((y * pScrn->displayWidth) + x) >> 1; srcp = (CARD32*)src; + GLINT_WAIT(1); GLINT_WRITE_REG(address, TextureDownloadOffset); while(count >= MAX_FIFO_ENTRIES) { GLINT_WAIT(MAX_FIFO_ENTRIES); /* (0x11 << 4) | 0x0D is the TAG for TextureData */ GLINT_WRITE_REG(((MAX_FIFO_ENTRIES - 2) << 16) | (0x11 << 4) | 0x0D, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (CARD32*)srcp, MAX_FIFO_ENTRIES - 1); count -= MAX_FIFO_ENTRIES - 1; address += MAX_FIFO_ENTRIES - 1; @@ -1452,7 +1408,8 @@ /* (0x11 << 4) | 0x0D is the TAG for TextureData */ GLINT_WRITE_REG(((count - 1) << 16) | (0x11 << 4) | 0x0D, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (CARD32*)srcp, count); } src += srcwidth; @@ -1488,7 +1445,8 @@ /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */ GLINT_WRITE_REG(((MAX_FIFO_ENTRIES - 2) << 16) | (0x15 << 4) | 0x05, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (CARD32*)srcp, MAX_FIFO_ENTRIES - 1); count -= MAX_FIFO_ENTRIES - 1; srcp += MAX_FIFO_ENTRIES - 1; @@ -1498,7 +1456,8 @@ /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */ GLINT_WRITE_REG(((count - 1) << 16) | (0x15 << 4) | 0x05, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (CARD32*)srcp, count); } src += srcwidth; @@ -1512,7 +1471,8 @@ /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */ GLINT_WRITE_REG(((MAX_FIFO_ENTRIES - 2) << 16) | (0x15 << 4) | 0x05, OutputFIFO); - MoveWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (unsigned short *)srcpword, MAX_FIFO_ENTRIES - 1); count -= MAX_FIFO_ENTRIES - 1; srcpword += MAX_FIFO_ENTRIES - 1; @@ -1522,7 +1482,8 @@ /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */ GLINT_WRITE_REG(((count - 1) << 16) | (0x15 << 4) | 0x05, OutputFIFO); - MoveWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (unsigned short *)srcpword, count); } src += srcwidth; @@ -1590,7 +1551,8 @@ /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */ GLINT_WRITE_REG(((MAX_FIFO_ENTRIES - 2) << 16) | (0x15 << 4) | 0x05, OutputFIFO); - MoveBYTE((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveBYTES( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (unsigned char *)srcpbyte, MAX_FIFO_ENTRIES - 1); count -= MAX_FIFO_ENTRIES - 1; srcpbyte += MAX_FIFO_ENTRIES - 1; @@ -1600,7 +1562,8 @@ /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */ GLINT_WRITE_REG(((count - 1) << 16) | (0x15 << 4) | 0x05, OutputFIFO); - MoveBYTE((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveBYTES( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (unsigned char *)srcpbyte, count); } src += srcwidth; @@ -1613,7 +1576,8 @@ /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */ GLINT_WRITE_REG(((MAX_FIFO_ENTRIES - 2) << 16) | (0x15 << 4) | 0x05, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (CARD32*)srcp, MAX_FIFO_ENTRIES - 1); count -= MAX_FIFO_ENTRIES - 1; srcp += MAX_FIFO_ENTRIES - 1; @@ -1623,7 +1587,8 @@ /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */ GLINT_WRITE_REG(((count - 1) << 16) | (0x15 << 4) | 0x05, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (CARD32*)srcp, count); } src += srcwidth; @@ -1689,13 +1654,15 @@ count = dwords; address = (y * pScrn->displayWidth) + x; srcp = (CARD32*)src; + GLINT_WAIT(1); GLINT_WRITE_REG(address, TextureDownloadOffset); while(count >= MAX_FIFO_ENTRIES) { GLINT_WAIT(MAX_FIFO_ENTRIES); /* (0x11 << 4) | 0x0D is the TAG for TextureData */ GLINT_WRITE_REG(((MAX_FIFO_ENTRIES - 2) << 16) | (0x11 << 4) | 0x0D, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (CARD32*)srcp, MAX_FIFO_ENTRIES - 1); count -= MAX_FIFO_ENTRIES - 1; address += MAX_FIFO_ENTRIES - 1; @@ -1706,7 +1673,8 @@ /* (0x11 << 4) | 0x0D is the TAG for TextureData */ GLINT_WRITE_REG(((count - 1) << 16) | (0x11 << 4) | 0x0D, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (CARD32*)srcp, count); } src += srcwidth; @@ -1732,7 +1700,8 @@ /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */ GLINT_WRITE_REG(((MAX_FIFO_ENTRIES - 2) << 16) | (0x15 << 4) | 0x05, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (CARD32*)srcp, MAX_FIFO_ENTRIES - 1); count -= MAX_FIFO_ENTRIES - 1; srcp += MAX_FIFO_ENTRIES - 1; @@ -1742,7 +1711,8 @@ /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */ GLINT_WRITE_REG(((count - 1) << 16) | (0x15 << 4) | 0x05, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (CARD32*)srcp, count); } src += srcwidth; diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/glint/pm2ramdac.c xc/programs/Xserver/hw/xfree86/drivers/glint/pm2ramdac.c --- xc.orig/programs/Xserver/hw/xfree86/drivers/glint/pm2ramdac.c Sat Jul 17 23:26:57 1999 +++ xc/programs/Xserver/hw/xfree86/drivers/glint/pm2ramdac.c Sun Mar 18 22:26:08 2001 @@ -104,16 +104,21 @@ VisualPtr pVisual ){ GLINTPtr pGlint = GLINTPTR(pScrn); - int i, index, shift; + int i, index, shift = 0, j, repeat = 1; - shift = (pScrn->depth == 15) ? 3 : 0; + if (pScrn->depth == 15) { + repeat = 8; + shift = 3; + } for(i = 0; i < numColors; i++) { index = indices[i]; - Permedia2WriteAddress(pScrn, index << shift); - Permedia2WriteData(pScrn, colors[index].red); - Permedia2WriteData(pScrn, colors[index].green); - Permedia2WriteData(pScrn, colors[index].blue); + for (j = 0; j < repeat; j++) { + Permedia2WriteAddress(pScrn, (index << shift)+j); + Permedia2WriteData(pScrn, colors[index].red); + Permedia2WriteData(pScrn, colors[index].green); + Permedia2WriteData(pScrn, colors[index].blue); + } /* for video i/o */ GLINT_SLOW_WRITE_REG(index, TexelLUTIndex); GLINT_SLOW_WRITE_REG((colors[index].red & 0xFF) | @@ -132,14 +137,16 @@ VisualPtr pVisual ){ GLINTPtr pGlint = GLINTPTR(pScrn); - int i, index; + int i, index, j; for(i = 0; i < numColors; i++) { index = indices[i]; - Permedia2WriteAddress(pScrn, index << 2); - Permedia2WriteData(pScrn, colors[index >> 1].red); - Permedia2WriteData(pScrn, colors[index].green); - Permedia2WriteData(pScrn, colors[index >> 1].blue); + for (j = 0; j < 4; j++) { + Permedia2WriteAddress(pScrn, (index << 2)+j); + Permedia2WriteData(pScrn, colors[index >> 1].red); + Permedia2WriteData(pScrn, colors[index].green); + Permedia2WriteData(pScrn, colors[index >> 1].blue); + } GLINT_SLOW_WRITE_REG(index, TexelLUTIndex); GLINT_SLOW_WRITE_REG((colors[index].red & 0xFF) | ((colors[index].green & 0xFF) << 8) | @@ -147,10 +154,12 @@ TexelLUTData); if(index <= 31) { - Permedia2WriteAddress(pScrn, index << 3); - Permedia2WriteData(pScrn, colors[index].red); - Permedia2WriteData(pScrn, colors[(index << 1) + 1].green); - Permedia2WriteData(pScrn, colors[index].blue); + for (j = 0; j < 4; j++) { + Permedia2WriteAddress(pScrn, (index << 3)+j); + Permedia2WriteData(pScrn, colors[index].red); + Permedia2WriteData(pScrn, colors[(index << 1) + 1].green); + Permedia2WriteData(pScrn, colors[index].blue); + } } } } diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/glint/pm2v_dac.c xc/programs/Xserver/hw/xfree86/drivers/glint/pm2v_dac.c --- xc.orig/programs/Xserver/hw/xfree86/drivers/glint/pm2v_dac.c Sat Mar 17 17:57:15 2001 +++ xc/programs/Xserver/hw/xfree86/drivers/glint/pm2v_dac.c Sun Mar 18 17:43:30 2001 @@ -406,7 +406,10 @@ int bg, int fg ) { - /* A 2 color cursor uses last 2 indexes into hardware cursor palette */ + GLINTPtr pGlint = GLINTPTR(pScrn); + + if (pGlint->Chipset == PCI_VENDOR_3DLABS_CHIP_PERMEDIA3) { + /* PM3 uses last 2 indexes into hardware cursor palette fg first...*/ Permedia2vOutIndReg(pScrn, PM2VDACRDCursorPalette+39, 0x00, (fg>>16)&0xff); Permedia2vOutIndReg(pScrn, PM2VDACRDCursorPalette+40, 0x00, (fg>>8)&0xff); Permedia2vOutIndReg(pScrn, PM2VDACRDCursorPalette+41, 0x00, fg & 0xff); @@ -414,6 +417,16 @@ Permedia2vOutIndReg(pScrn, PM2VDACRDCursorPalette+42, 0x00, (bg>>16)&0xff); Permedia2vOutIndReg(pScrn, PM2VDACRDCursorPalette+43, 0x00, (bg>>8)&0xff); Permedia2vOutIndReg(pScrn, PM2VDACRDCursorPalette+44, 0x00, bg & 0xff); + } else { + /* PM2v uses first 2 indexes into hardware cursor palette bg first...*/ + Permedia2vOutIndReg(pScrn, PM2VDACRDCursorPalette+0, 0x00, (bg>>16)&0xff); + Permedia2vOutIndReg(pScrn, PM2VDACRDCursorPalette+1, 0x00, (bg>>8)&0xff); + Permedia2vOutIndReg(pScrn, PM2VDACRDCursorPalette+2, 0x00, bg & 0xff); + + Permedia2vOutIndReg(pScrn, PM2VDACRDCursorPalette+3, 0x00, (fg>>16)&0xff); + Permedia2vOutIndReg(pScrn, PM2VDACRDCursorPalette+4, 0x00, (fg>>8)&0xff); + Permedia2vOutIndReg(pScrn, PM2VDACRDCursorPalette+5, 0x00, fg & 0xff); + } } static Bool diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/glint/pm2vramdac.c xc/programs/Xserver/hw/xfree86/drivers/glint/pm2vramdac.c --- xc.orig/programs/Xserver/hw/xfree86/drivers/glint/pm2vramdac.c Fri Feb 12 17:52:05 1999 +++ xc/programs/Xserver/hw/xfree86/drivers/glint/pm2vramdac.c Sun Mar 18 16:51:30 2001 @@ -43,8 +43,7 @@ GLINTPtr pGlint = GLINTPTR(pScrn); unsigned char tmp = 0x00; - GLINT_SLOW_WRITE_REG((reg>>8) & 0xff, PM2VDACIndexRegHigh); - GLINT_SLOW_WRITE_REG(reg&0xff, PM2VDACIndexRegLow); + GLINT_SET_INDEX(reg); if (mask != 0x00) tmp = GLINT_READ_REG (PM2VDACIndexData) & mask; @@ -58,8 +57,7 @@ GLINTPtr pGlint = GLINTPTR(pScrn); unsigned char ret; - GLINT_SLOW_WRITE_REG (reg&0xff, PM2VDACIndexRegLow); - GLINT_SLOW_WRITE_REG((reg>>8) & 0xff, PM2VDACIndexRegHigh); + GLINT_SET_INDEX(reg); ret = GLINT_READ_REG (PM2VDACIndexData); return (ret); diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/glint/pm3_accel.c xc/programs/Xserver/hw/xfree86/drivers/glint/pm3_accel.c --- xc.orig/programs/Xserver/hw/xfree86/drivers/glint/pm3_accel.c Wed Nov 29 11:42:17 2000 +++ xc/programs/Xserver/hw/xfree86/drivers/glint/pm3_accel.c Sun Mar 18 20:15:21 2001 @@ -47,7 +47,6 @@ #include "xaalocal.h" /* For replacements */ #define DEBUG 0 -#define USE_DIRECT_FIFO_WRITES 1 #if DEBUG # define TRACE_ENTER(str) ErrorF("pm3_accel: " str " %d\n",pScrn->scrnIndex) @@ -86,26 +85,35 @@ int x_offset, int y_offset, int x, int y, int w, int h); /* Color Expansion Fills */ -static void Permedia3SetupForCPUToScreenColorExpandFill(ScrnInfoPtr pScrn, - int fg, int bg, int rop,unsigned int planemask); -static void Permedia3SubsequentCPUToScreenColorExpandFill(ScrnInfoPtr pScrn, - int x, int y, int w, int h, int skipleft); +static void Permedia3SetupForScanlineCPUToScreenColorExpandFill( + ScrnInfoPtr pScrn, + int fg, int bg, int rop, + unsigned int planemask); +static void Permedia3SubsequentScanlineCPUToScreenColorExpandFill( + ScrnInfoPtr pScrn, int x, + int y, int w, int h, int skipleft); +static void Permedia3SubsequentColorExpandScanline( + ScrnInfoPtr pScrn, + int bufno); /* Direct Fifo Bitmap Writes */ static void Permedia3WriteBitmap(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); /* Images Writes */ -static void Permedia3SetupForImageWrite(ScrnInfoPtr pScrn, int rop, +static void Permedia3SetupForScanlineImageWrite(ScrnInfoPtr pScrn, int rop, unsigned int planemask, int trans_color, int bpp, int depth); -static void Permedia3SubsequentImageWriteRect(ScrnInfoPtr pScrn, +static void Permedia3SubsequentScanlineImageWriteRect(ScrnInfoPtr pScrn, int x, int y, int w, int h, int skipleft); +static void Permedia3SubsequentImageWriteScanline(ScrnInfoPtr pScrn, int bufno); /* Direct Fifo Pixmap Writes */ static void Permedia3WritePixmap(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); +#define MAX_FIFO_ENTRIES 120 + void Permedia3InitializeEngine(ScrnInfoPtr pScrn) { @@ -407,51 +415,52 @@ infoPtr->SubsequentMono8x8PatternFillRect = Permedia3SubsequentMono8x8PatternFillRect; -#if USE_DIRECT_FIFO_WRITES - /* Direct Fifo Bitmap Writes */ + /* Bitmap Writes */ infoPtr->WriteBitmapFlags = 0; infoPtr->WriteBitmap = Permedia3WriteBitmap; -#endif - - /* Color Expand Fills */ - infoPtr->CPUToScreenColorExpandFillFlags = - /* - SYNC_AFTER_COLOR_EXPAND | - */ - LEFT_EDGE_CLIPPING | - BIT_ORDER_IN_BYTE_LSBFIRST | - CPU_TRANSFER_BASE_FIXED | - CPU_TRANSFER_PAD_DWORD; - infoPtr->ColorExpandBase = pGlint->IOBase + BitMaskPattern; - infoPtr->ColorExpandRange = 4; - infoPtr->SetupForCPUToScreenColorExpandFill = - Permedia3SetupForCPUToScreenColorExpandFill; - infoPtr->SubsequentCPUToScreenColorExpandFill = - Permedia3SubsequentCPUToScreenColorExpandFill; -#if USE_DIRECT_FIFO_WRITES - /* Direct Fifo Images Writes */ + /* Pixmap Writes */ infoPtr->WritePixmapFlags = 0; infoPtr->WritePixmap = Permedia3WritePixmap; -#else + + /* Color Expand Fills */ + infoPtr->ScanlineCPUToScreenColorExpandFillFlags = + LEFT_EDGE_CLIPPING | + LEFT_EDGE_CLIPPING_NEGATIVE_X | + BIT_ORDER_IN_BYTE_LSBFIRST | + CPU_TRANSFER_PAD_DWORD; + + infoPtr->NumScanlineColorExpandBuffers = 1; + pGlint->ScratchBuffer = xalloc(((pScrn->virtualX+62)/32*4) + + (pScrn->virtualX + * pScrn->bitsPerPixel / 8)); + infoPtr->ScanlineColorExpandBuffers = + pGlint->XAAScanlineColorExpandBuffers; + pGlint->XAAScanlineColorExpandBuffers[0] = + pGlint->IOBase + OutputFIFO + 4; + + infoPtr->SetupForScanlineCPUToScreenColorExpandFill = + Permedia3SetupForScanlineCPUToScreenColorExpandFill; + infoPtr->SubsequentScanlineCPUToScreenColorExpandFill = + Permedia3SubsequentScanlineCPUToScreenColorExpandFill; + infoPtr->SubsequentColorExpandScanline = + Permedia3SubsequentColorExpandScanline; + /* Images Writes */ - infoPtr->ImageWriteFlags = - NO_GXCOPY | - /* - SYNC_AFTER_IMAGE_WRITE | - */ - LEFT_EDGE_CLIPPING | - LEFT_EDGE_CLIPPING_NEGATIVE_X | - BIT_ORDER_IN_BYTE_LSBFIRST | - CPU_TRANSFER_BASE_FIXED | - CPU_TRANSFER_PAD_DWORD; - infoPtr->ImageWriteBase = pGlint->IOBase + PM3FBSourceData; - infoPtr->ImageWriteRange = 4; - infoPtr->SetupForImageWrite = - Permedia3SetupForImageWrite; - infoPtr->SubsequentImageWriteRect = - Permedia3SubsequentImageWriteRect; -#endif + infoPtr->ScanlineImageWriteFlags = NO_GXCOPY | + LEFT_EDGE_CLIPPING | + LEFT_EDGE_CLIPPING_NEGATIVE_X | + BIT_ORDER_IN_BYTE_LSBFIRST | + CPU_TRANSFER_PAD_DWORD; + infoPtr->NumScanlineImageWriteBuffers = 1; + infoPtr->ScanlineImageWriteBuffers = + pGlint->XAAScanlineColorExpandBuffers; + infoPtr->SetupForScanlineImageWrite = + Permedia3SetupForScanlineImageWrite; + infoPtr->SubsequentScanlineImageWriteRect = + Permedia3SubsequentScanlineImageWriteRect; + infoPtr->SubsequentImageWriteScanline = + Permedia3SubsequentImageWriteScanline; /* Available Framebuffer Area for XAA. */ AvailFBArea.x1 = 0; @@ -461,7 +470,7 @@ pScrn->bitsPerPixel / 8); /* Alan does this ??? AvailFBArea.y2 = ((pGlint->FbMapSize > 16384*1024) ? 16384*1024 : - pGlint->FbMapSize) / (pScrn->displayWidth + pGlint->FbMapSize) / (pScrn->displayWidth * pScrn->bitsPerPixel / 8); */ @@ -491,8 +500,12 @@ CHECKCLIPPING; while (GLINT_READ_REG(DMACount) != 0); - GLINT_WAIT(1); + + GLINT_WAIT(3); + GLINT_WRITE_REG(3, BroadcastMask); /* hack! this shouldn't be needed */ + GLINT_WRITE_REG(0x400, FilterMode); GLINT_WRITE_REG(0, GlintSync); + do { while(GLINT_READ_REG(OutFIFOWords) == 0); } while (GLINT_READ_REG(OutputFIFO) != PM3SyncTag); @@ -700,11 +713,15 @@ } /* Color Expansion Fills */ -static void Permedia3SetupForCPUToScreenColorExpandFill(ScrnInfoPtr pScrn, - int fg, int bg, int rop,unsigned int planemask) -{ +static void +Permedia3SetupForScanlineCPUToScreenColorExpandFill( + ScrnInfoPtr pScrn, + int fg, int bg, + int rop, + unsigned int planemask +){ GLINTPtr pGlint = GLINTPTR(pScrn); - TRACE_ENTER("Permedia3SetupForCPUToScreenColorExpandFill"); + REPLICATE(fg); pGlint->PM3_Render2D = PM3Render2D_SpanOperation | @@ -729,14 +746,23 @@ GLINT_WRITE_REG(fg, PM3ForegroundColor); DO_PLANEMASK(planemask); GLINT_WRITE_REG(pGlint->PM3_Config2D, PM3Config2D); - TRACE_EXIT("Permedia3SetupForCPUToScreenColorExpandFill"); } -static void Permedia3SubsequentCPUToScreenColorExpandFill(ScrnInfoPtr pScrn, - int x, int y, int w, int h, int skipleft) -{ + +static void +Permedia3SubsequentScanlineCPUToScreenColorExpandFill( + ScrnInfoPtr pScrn, + int x, int y, int w, int h, + int skipleft +){ GLINTPtr pGlint = GLINTPTR(pScrn); - TRACE_ENTER("Permedia3SubsequentCPUToScreenColorExpandFill"); - GLINT_WAIT(4); + + TRACE_ENTER("Permedia2SubsequentScanlineCPUToScreenColorExpandFill"); + + pGlint->dwords = ((w + 31) >> 5); /* dwords per scanline */ + + pGlint->cpucount = h; + + GLINT_WAIT(5); GLINT_WRITE_REG(((y&0x0fff)<<16)|((x+skipleft)&0x0fff), ScissorMinXY); GLINT_WRITE_REG((((y+h)&0x0fff)<<16)|((x+w)&0x0fff), ScissorMaxXY); GLINT_WRITE_REG( @@ -746,16 +772,60 @@ GLINT_WRITE_REG(pGlint->PM3_Render2D | PM3Render2D_Width(w) | PM3Render2D_Height(h), PM3Render2D); - TRACE_EXIT("Permedia3SubsequentCPUToScreenColorExpandFill"); + +#ifdef __alpha__ + if (0) /* force ALPHA to use indirect always */ +#else + if ((pGlint->dwords*h) < MAX_FIFO_ENTRIES) +#endif + { + /* Turn on direct for less than 120 dword colour expansion */ + pGlint->XAAScanlineColorExpandBuffers[0] = pGlint->IOBase+OutputFIFO+4; + pGlint->ScanlineDirect = 1; + GLINT_WRITE_REG(((pGlint->dwords*h)-1)<<16 | 0x0D, OutputFIFO); + GLINT_WAIT(pGlint->dwords*h); + } else { + /* Use indirect for anything else */ + pGlint->XAAScanlineColorExpandBuffers[0] = pGlint->ScratchBuffer; + pGlint->ScanlineDirect = 0; + } + + pGlint->cpucount--; } +static void +Permedia3SubsequentColorExpandScanline(ScrnInfoPtr pScrn, int bufno) +{ + GLINTPtr pGlint = GLINTPTR(pScrn); + CARD32 *srcp = (CARD32*)pGlint->XAAScanlineColorExpandBuffers[bufno]; + int dwords = pGlint->dwords; + + if (!pGlint->ScanlineDirect) { + while(dwords >= MAX_FIFO_ENTRIES) { + GLINT_WAIT(MAX_FIFO_ENTRIES); + GLINT_WRITE_REG(((MAX_FIFO_ENTRIES - 2) << 16) | 0x0D, OutputFIFO); + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + (CARD32*)srcp, MAX_FIFO_ENTRIES - 1); + dwords -= MAX_FIFO_ENTRIES - 1; + srcp += MAX_FIFO_ENTRIES - 1; + } + if(dwords) { + GLINT_WAIT(dwords + 1); + GLINT_WRITE_REG(((dwords - 1) << 16) | 0x0D, OutputFIFO); + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + (CARD32*)srcp, dwords); + } + } +} /* Images Writes */ -static void Permedia3SetupForImageWrite(ScrnInfoPtr pScrn, int rop, +static void Permedia3SetupForScanlineImageWrite(ScrnInfoPtr pScrn, int rop, unsigned int planemask, int trans_color, int bpp, int depth) { GLINTPtr pGlint = GLINTPTR(pScrn); - TRACE_ENTER("Permedia3SetupForImageWrite"); + TRACE_ENTER("Permedia3SetupForScanlineImageWrite"); pGlint->PM3_Render2D = PM3Render2D_SpanOperation | PM3Render2D_XPositive | @@ -771,14 +841,18 @@ GLINT_WAIT(2); DO_PLANEMASK(planemask); GLINT_WRITE_REG(pGlint->PM3_Config2D, PM3Config2D); - TRACE_EXIT("Permedia3SetupForImageWrite"); + TRACE_EXIT("Permedia3SetupForScanlineImageWrite"); } -static void Permedia3SubsequentImageWriteRect(ScrnInfoPtr pScrn, + +static void Permedia3SubsequentScanlineImageWriteRect(ScrnInfoPtr pScrn, int x, int y, int w, int h, int skipleft) { GLINTPtr pGlint = GLINTPTR(pScrn); - TRACE_ENTER("Permedia3SubsequentImageWrite"); - GLINT_WAIT(4); + TRACE_ENTER("Permedia3SubsequentScanlineImageWrite"); + pGlint->dwords = (((w * pScrn->bitsPerPixel) + 3) >> 2); /* per scanline */ + + pGlint->cpucount = h; + GLINT_WAIT(5); GLINT_WRITE_REG(((y&0x0fff)<<16)|((x+skipleft)&0x0fff), ScissorMinXY); GLINT_WRITE_REG((((y+h)&0x0fff)<<16)|((x+w)&0x0fff), ScissorMaxXY); GLINT_WRITE_REG( @@ -788,18 +862,63 @@ GLINT_WRITE_REG(pGlint->PM3_Render2D | PM3Render2D_Width(w) | PM3Render2D_Height(h), PM3Render2D); - TRACE_EXIT("Permedia3SubsequentImageWrite"); -} +#ifdef __alpha__ + if (0) /* force ALPHA to use indirect always */ +#else + if (pGlint->dwords < MAX_FIFO_ENTRIES) +#endif + { + /* Turn on direct for less than 120 dword colour expansion */ + pGlint->XAAScanlineColorExpandBuffers[0] = pGlint->IOBase+OutputFIFO+4; + pGlint->ScanlineDirect = 1; + GLINT_WRITE_REG(((pGlint->dwords*h)-1)<<16 | (0x15<<4) | 0x05, + OutputFIFO); + GLINT_WAIT(pGlint->dwords); + } else { + /* Use indirect for anything else */ + pGlint->XAAScanlineColorExpandBuffers[0] = pGlint->ScratchBuffer; + pGlint->ScanlineDirect = 0; + } -/* Defines for Direct Fifo access */ + pGlint->cpucount--; + TRACE_EXIT("Permedia3SubsequentScanlineImageWrite"); +} -#define WriteRange 120 -#define PciRetryWriteRange 1023 -#define WriteBase_Fixed ((CARD32 *)(pGlint->IOBase + PM3FBSourceData)) -#define WriteBase ((CARD32 *)(pGlint->IOBase + OutputFIFO + 4)) +static void +Permedia3SubsequentImageWriteScanline(ScrnInfoPtr pScrn, int bufno) +{ + GLINTPtr pGlint = GLINTPTR(pScrn); + int dwords = pGlint->dwords; -/* Direct Fifo Bitmap Writes */ + if (pGlint->ScanlineDirect) { + if (pGlint->cpucount--) + GLINT_WAIT(dwords); + return; + } else { + while(dwords >= MAX_FIFO_ENTRIES) { + GLINT_WAIT(MAX_FIFO_ENTRIES); + GLINT_WRITE_REG(((MAX_FIFO_ENTRIES - 2) << 16) | (0x15 << 4) | + 0x05, OutputFIFO); + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + (CARD32*)pGlint->XAAScanlineColorExpandBuffers[bufno], + MAX_FIFO_ENTRIES - 1); + dwords -= MAX_FIFO_ENTRIES - 1; + } + if(dwords) { + GLINT_WAIT(dwords + 1); + GLINT_WRITE_REG(((dwords - 1) << 16) | (0x15 << 4) | + 0x05, OutputFIFO); + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + (CARD32*)pGlint->XAAScanlineColorExpandBuffers[bufno], + dwords); + } + } +} + +/* Bitmap Writes */ static void Permedia3WriteBitmap(ScrnInfoPtr pScrn, @@ -810,59 +929,85 @@ unsigned int planemask ) { - int dwords; - int ApertureRange; + int dwords, count; + CARD32 *srcp; GLINTPtr pGlint = GLINTPTR(pScrn); TRACE_ENTER("Permedia3WriteBitmap"); w += skipleft; x -= skipleft; - dwords = (w + 31) >>5; - if (pGlint->UsePCIRetry) ApertureRange = PciRetryWriteRange; - else ApertureRange = WriteRange; /* width of the stuff to copy in 32 bit words */ - Permedia3SetupForCPUToScreenColorExpandFill(pScrn, fg, bg, rop, planemask); - Permedia3SubsequentCPUToScreenColorExpandFill(pScrn, x, y, w, h, skipleft); + dwords = (w + 31) >>5; - if (dwords > ApertureRange) { - while(h--) { - XAAMoveDWORDS_FixedBase(WriteBase_Fixed, (CARD32*)src, dwords); - src += srcwidth; - } - } else { - /* the src is exatcly as wide as the target rectangle. We copy all - * of it, so no need to separate stuff by scanline */ - if(srcwidth == (dwords << 5)) { - /* decrement contains the number of lines that can be - * put in the fifo */ - int decrement = ApertureRange/dwords; - - while(h > decrement) { - GLINT_WAIT(dwords * decrement); - GLINT_WRITE_REG((((dwords * decrement)-1) << 16) | 0xd, - OutputFIFO); - XAAMoveDWORDS(WriteBase, (CARD32*)src, dwords * decrement); - src += (srcwidth * decrement); - h -= decrement; - } - if(h) { - GLINT_WAIT(dwords * h); - GLINT_WRITE_REG((((dwords * h)-1) << 16) | 0xd, OutputFIFO); - XAAMoveDWORDS(WriteBase, (CARD32*)src, dwords * h); - } - } else { - while(h--) { - GLINT_WAIT(dwords); - GLINT_WRITE_REG(((dwords-1) << 16) | 0xd, OutputFIFO); - XAAMoveDWORDS(WriteBase, (CARD32*)src, dwords); - src += srcwidth; - } - } + REPLICATE(fg); + pGlint->PM3_Render2D = + PM3Render2D_SpanOperation | + PM3Render2D_XPositive | + PM3Render2D_YPositive | + PM3Render2D_Operation_SyncOnBitMask; + pGlint->PM3_Config2D = + PM3Config2D_UserScissorEnable | + PM3Config2D_UseConstantSource | + PM3Config2D_ForegroundROPEnable | + PM3Config2D_ForegroundROP(rop) | + PM3Config2D_FBWriteEnable; + if ((rop!=GXclear)&&(rop!=GXset)&&(rop!=GXcopy)&&(rop!=GXcopyInverted)) + pGlint->PM3_Config2D |= PM3Config2D_FBDestReadEnable; + if (bg != -1) { + REPLICATE(bg); + pGlint->PM3_Config2D |= PM3Config2D_OpaqueSpan; + GLINT_WAIT(8); + GLINT_WRITE_REG(bg, BackgroundColor); + } + else GLINT_WAIT(7); + GLINT_WRITE_REG(fg, PM3ForegroundColor); + DO_PLANEMASK(planemask); + GLINT_WRITE_REG(pGlint->PM3_Config2D, PM3Config2D); + GLINT_WRITE_REG(((y&0x0fff)<<16)|((x+skipleft)&0x0fff), ScissorMinXY); + GLINT_WRITE_REG((((y+h)&0x0fff)<<16)|((x+w)&0x0fff), ScissorMaxXY); + GLINT_WRITE_REG( + PM3RectanglePosition_XOffset(x) | + PM3RectanglePosition_YOffset(y), + PM3RectanglePosition); + GLINT_WRITE_REG(pGlint->PM3_Render2D | + PM3Render2D_Width(w) | PM3Render2D_Height(h), + PM3Render2D); + +#ifdef __alpha__ + mem_barrier(); /* dunno why, but this helps on older Alpha CPUs */ +#endif + + while(h--) { + count = dwords; + srcp = (CARD32*)src; + while(count >= MAX_FIFO_ENTRIES) { + GLINT_WAIT(MAX_FIFO_ENTRIES); + GLINT_WRITE_REG(((MAX_FIFO_ENTRIES - 2) << 16) | + 0x0D, OutputFIFO); + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + (CARD32*)srcp, MAX_FIFO_ENTRIES - 1); + count -= MAX_FIFO_ENTRIES - 1; + srcp += MAX_FIFO_ENTRIES - 1; + } + if(count) { + GLINT_WAIT(count + 1); + GLINT_WRITE_REG(((count - 1) << 16) | 0x0D, OutputFIFO); + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + (CARD32*)srcp, count); + } + src += srcwidth; } + + Permedia3DisableClipping(pScrn); + Permedia3Sync(pScrn); + TRACE_EXIT("Permedia3WriteBitmap"); } -/* Direct Fifo Images Writes */ + +/* Pixmap Writes */ static void Permedia3WritePixmap( @@ -876,10 +1021,10 @@ int bpp, int depth ) { - int dwords; + int dwords, count; int skipleft = (long)src & 0x03L; int Bpp = bpp >> 3; - int ApertureRange; + CARD32 *srcp; GLINTPtr pGlint = GLINTPTR(pScrn); TRACE_ENTER("Permedia3WritePixmap"); @@ -896,48 +1041,67 @@ src = (unsigned char*)((long)src & ~0x03L); } - Permedia3SetupForImageWrite(pScrn, rop, planemask, trans, bpp, depth); - Permedia3SubsequentImageWriteRect(pScrn, x, y, w, h, skipleft); + + pGlint->PM3_Render2D = + PM3Render2D_SpanOperation | + PM3Render2D_XPositive | + PM3Render2D_YPositive | + PM3Render2D_Operation_SyncOnHostData; + pGlint->PM3_Config2D = + PM3Config2D_UserScissorEnable | + PM3Config2D_ForegroundROPEnable | + PM3Config2D_ForegroundROP(rop) | + PM3Config2D_FBWriteEnable; + if ((rop!=GXclear)&&(rop!=GXset)&&(rop!=GXcopy)&&(rop!=GXcopyInverted)) + pGlint->PM3_Config2D |= PM3Config2D_FBDestReadEnable; + GLINT_WAIT(6); + DO_PLANEMASK(planemask); + GLINT_WRITE_REG(pGlint->PM3_Config2D, PM3Config2D); + GLINT_WRITE_REG(((y&0x0fff)<<16)|((x+skipleft)&0x0fff), ScissorMinXY); + GLINT_WRITE_REG((((y+h)&0x0fff)<<16)|((x+w)&0x0fff), ScissorMaxXY); + GLINT_WRITE_REG( + PM3RectanglePosition_XOffset(x) | + PM3RectanglePosition_YOffset(y), + PM3RectanglePosition); + GLINT_WRITE_REG(pGlint->PM3_Render2D | + PM3Render2D_Width(w) | PM3Render2D_Height(h), + PM3Render2D); + +#ifdef __alpha__ + mem_barrier(); /* dunno why, but this helps on older Alpha CPUs */ +#endif /* width of the stuff to copy in 32 bit words */ dwords = ((w * Bpp) + 3) >> 2; - if (pGlint->UsePCIRetry) ApertureRange = PciRetryWriteRange; - else ApertureRange = WriteRange; - if (dwords > ApertureRange) { - while(h--) { - XAAMoveDWORDS_FixedBase(WriteBase_Fixed, (CARD32*)src, dwords); - src += srcwidth; - } - } else { - /* the src is exatcly as wide as the target rectangle. We copy all - * of it, so no need to separate stuff by scanline */ - if(srcwidth == (dwords << 2)) { - /* decrement contains the number of lines that can be - * put in the fifo */ - int decrement = ApertureRange/dwords; - - while(h > decrement) { - GLINT_WAIT(dwords * decrement); - GLINT_WRITE_REG((((dwords * decrement)-1) << 16) | 0x155, - OutputFIFO); - XAAMoveDWORDS(WriteBase, (CARD32*)src, dwords * decrement); - src += (srcwidth * decrement); - h -= decrement; - } - if(h) { - GLINT_WAIT(dwords * h); - GLINT_WRITE_REG((((dwords * h)-1) << 16) | 0x155, OutputFIFO); - XAAMoveDWORDS(WriteBase, (CARD32*)src, dwords * h); - } - } else { - while(h--) { - GLINT_WAIT(dwords); - GLINT_WRITE_REG(((dwords-1) << 16) | 0x155, OutputFIFO); - XAAMoveDWORDS(WriteBase, (CARD32*)src, dwords); - src += srcwidth; - } - } + while(h--) { + count = dwords; + srcp = (CARD32*)src; + while(count >= MAX_FIFO_ENTRIES) { + GLINT_WAIT(MAX_FIFO_ENTRIES); + /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */ + GLINT_WRITE_REG(((MAX_FIFO_ENTRIES - 2) << 16) | (0x15 << 4) | + 0x05, OutputFIFO); + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + (CARD32*)srcp, MAX_FIFO_ENTRIES - 1); + count -= MAX_FIFO_ENTRIES - 1; + srcp += MAX_FIFO_ENTRIES - 1; + } + if(count) { + GLINT_WAIT(count + 1); + /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */ + GLINT_WRITE_REG(((count - 1) << 16) | (0x15 << 4) | + 0x05, OutputFIFO); + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + (CARD32*)srcp, count); + } + src += srcwidth; } + + Permedia3DisableClipping(pScrn); + Permedia3Sync(pScrn); + TRACE_EXIT("Permedia3WritePixmap"); } diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/glint/pm3_dac.c xc/programs/Xserver/hw/xfree86/drivers/glint/pm3_dac.c --- xc.orig/programs/Xserver/hw/xfree86/drivers/glint/pm3_dac.c Sat Mar 17 17:57:15 2001 +++ xc/programs/Xserver/hw/xfree86/drivers/glint/pm3_dac.c Sun Mar 18 21:35:54 2001 @@ -320,7 +320,7 @@ pReg->glintRegs[VClkCtl >> 3] = (GLINT_READ_REG(VClkCtl) & 0xFFFFFFFC); pReg->glintRegs[PMScreenBase >> 3] = 0; - pReg->glintRegs[ChipConfig >> 3] = GLINT_READ_REG(ChipConfig) & 0xFFFFFFDD; + pReg->glintRegs[ChipConfig >> 3] = GLINT_READ_REG(ChipConfig) & 0xFFFFFFFD; pReg->DacRegs[PM2VDACRDDACControl] = 0x00; { @@ -524,4 +524,80 @@ Permedia2vOutIndReg(pScrn, PM2VDACRDDClk0PostScale, 0x00, glintReg->DacRegs[PM2VDACRDDClk0PostScale]); Permedia2vOutIndReg(pScrn, PM2VDACIndexClockControl, 0x00, temp|0x03); +} + +void Permedia3LoadPalette( + ScrnInfoPtr pScrn, + int numColors, + int *indices, + LOCO *colors, + VisualPtr pVisual +){ +#if 0 /* NOT YET */ + GLINTPtr pGlint = GLINTPTR(pScrn); +#endif + int i, index, shift = 0, j, repeat = 1; + + if (pScrn->depth == 15) { + repeat = 8; + shift = 3; + } + + for(i = 0; i < numColors; i++) { + index = indices[i]; + for (j = 0; j < repeat; j++) { + Permedia2WriteAddress(pScrn, (index << shift)+j); + Permedia2WriteData(pScrn, colors[index].red); + Permedia2WriteData(pScrn, colors[index].green); + Permedia2WriteData(pScrn, colors[index].blue); + } + /* for video i/o */ +#if 0 /* NOT YET */ + GLINT_SLOW_WRITE_REG(index, PM3LUTIndex); + GLINT_SLOW_WRITE_REG((colors[index].red & 0xFF) | + ((colors[index].green & 0xFF) << 8) | + ((colors[index].blue & 0xFF) << 16), + PM3LUTData); +#endif + } +} + +/* special one for 565 mode */ +void Permedia3LoadPalette16( + ScrnInfoPtr pScrn, + int numColors, + int *indices, + LOCO *colors, + VisualPtr pVisual +){ +#if 0 /* NOT YET */ + GLINTPtr pGlint = GLINTPTR(pScrn); +#endif + int i, index, j; + + for(i = 0; i < numColors; i++) { + index = indices[i]; + for (j = 0; j < 4; j++) { + Permedia2WriteAddress(pScrn, (index << 2)+j); + Permedia2WriteData(pScrn, colors[index >> 1].red); + Permedia2WriteData(pScrn, colors[index].green); + Permedia2WriteData(pScrn, colors[index >> 1].blue); + } +#if 0 /* NOT YET */ + GLINT_SLOW_WRITE_REG(index, PM3LUTIndex); + GLINT_SLOW_WRITE_REG((colors[index].red & 0xFF) | + ((colors[index].green & 0xFF) << 8) | + ((colors[index].blue & 0xFF) << 16), + PM3LUTData); +#endif + + if(index <= 31) { + for (j = 0; j < 4; j++) { + Permedia2WriteAddress(pScrn, (index << 3)+j); + Permedia2WriteData(pScrn, colors[index].red); + Permedia2WriteData(pScrn, colors[(index << 1) + 1].green); + Permedia2WriteData(pScrn, colors[index].blue); + } + } + } } diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/glint/pm_accel.c xc/programs/Xserver/hw/xfree86/drivers/glint/pm_accel.c --- xc.orig/programs/Xserver/hw/xfree86/drivers/glint/pm_accel.c Sat Jun 24 14:19:55 2000 +++ xc/programs/Xserver/hw/xfree86/drivers/glint/pm_accel.c Sun Mar 18 16:57:17 2001 @@ -301,62 +301,6 @@ return (XAAInit(pScreen, infoPtr)); } -static void MoveBYTE( - register CARD32* dest, - register unsigned char* src, - register int dwords -) -{ - while(dwords) { - *dest = *src; - src += 1; - dest += 1; - dwords -= 1; - } -} - -static void MoveWORDS( - register CARD32* dest, - register unsigned short* src, - register int dwords -) -{ - while(dwords & ~0x01) { - *dest = *src; - *(dest + 1) = *(src + 1); - src += 2; - dest += 2; - dwords -= 2; - } - switch(dwords) { - case 0: return; - case 1: *dest = *src; - return; - } -} - -static void MoveDWORDS( - 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); -} - static void PermediaLoadCoord( ScrnInfoPtr pScrn, int x, int y, @@ -779,15 +723,16 @@ while (dwords >= infoRec->ColorExpandRange) { GLINT_WAIT(infoRec->ColorExpandRange); GLINT_WRITE_REG((infoRec->ColorExpandRange - 2)<<16 | 0x0D, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), src, - infoRec->ColorExpandRange - 1); + GLINT_MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + src, infoRec->ColorExpandRange - 1); dwords -= (infoRec->ColorExpandRange - 1); src += (infoRec->ColorExpandRange - 1); } if (dwords) { GLINT_WAIT(dwords); GLINT_WRITE_REG((dwords - 1)<<16 | 0x0D, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), src,dwords); + GLINT_MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + src,dwords); } pGlint->cpucount += 1; #if 0 @@ -915,7 +860,8 @@ /* (0x11 << 4) | 0x0D is the TAG for TextureData */ GLINT_WRITE_REG(((infoRec->ColorExpandRange - 2) << 16) | (0x11 << 4) | 0x0D, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (CARD32*)srcp, infoRec->ColorExpandRange - 1); count -= infoRec->ColorExpandRange - 1; address += infoRec->ColorExpandRange - 1; @@ -926,7 +872,8 @@ /* (0x11 << 4) | 0x0D is the TAG for TextureData */ GLINT_WRITE_REG(((count - 1) << 16) | (0x11 << 4) | 0x0D, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (CARD32*)srcp, count); } src += srcwidth; @@ -955,7 +902,8 @@ /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */ GLINT_WRITE_REG(((infoRec->ColorExpandRange - 2) << 16) | (0x15 << 4) | 0x05, OutputFIFO); - MoveBYTE((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveBYTES( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (unsigned char *)srcpbyte, infoRec->ColorExpandRange-1); count -= infoRec->ColorExpandRange - 1; srcpbyte += infoRec->ColorExpandRange - 1; @@ -965,7 +913,8 @@ /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */ GLINT_WRITE_REG(((count - 1) << 16) | (0x15 << 4) | 0x05, OutputFIFO); - MoveBYTE((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveBYTES( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (unsigned char *)srcpbyte, count); } src += srcwidth; @@ -1038,7 +987,8 @@ /* (0x11 << 4) | 0x0D is the TAG for TextureData */ GLINT_WRITE_REG(((infoRec->ColorExpandRange - 2) << 16) | (0x11 << 4) | 0x0D, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (CARD32*)srcp, infoRec->ColorExpandRange - 1); count -= infoRec->ColorExpandRange - 1; address += infoRec->ColorExpandRange - 1; @@ -1049,7 +999,8 @@ /* (0x11 << 4) | 0x0D is the TAG for TextureData */ GLINT_WRITE_REG(((count - 1) << 16) | (0x11 << 4) | 0x0D, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (CARD32*)srcp, count); } src += srcwidth; @@ -1078,7 +1029,8 @@ /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */ GLINT_WRITE_REG(((infoRec->ColorExpandRange - 2) << 16) | (0x15 << 4) | 0x05, OutputFIFO); - MoveWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (unsigned short *)srcpword,infoRec->ColorExpandRange-1); count -= infoRec->ColorExpandRange - 1; srcpword += infoRec->ColorExpandRange - 1; @@ -1088,7 +1040,8 @@ /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */ GLINT_WRITE_REG(((count - 1) << 16) | (0x15 << 4) | 0x05, OutputFIFO); - MoveWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (unsigned short *)srcpword, count); } src += srcwidth; @@ -1162,7 +1115,8 @@ /* (0x11 << 4) | 0x0D is the TAG for TextureData */ GLINT_WRITE_REG(((infoRec->ColorExpandRange - 2) << 16) | (0x11 << 4) | 0x0D, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (CARD32*)srcp, infoRec->ColorExpandRange - 1); count -= infoRec->ColorExpandRange - 1; address += infoRec->ColorExpandRange - 1; @@ -1173,7 +1127,8 @@ /* (0x11 << 4) | 0x0D is the TAG for TextureData */ GLINT_WRITE_REG(((count - 1) << 16) | (0x11 << 4) | 0x0D, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (CARD32*)srcp, count); } src += srcwidth; @@ -1196,7 +1151,8 @@ /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */ GLINT_WRITE_REG(((infoRec->ColorExpandRange - 2) << 16) | (0x15 << 4) | 0x05, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (CARD32*)srcp, infoRec->ColorExpandRange - 1); count -= infoRec->ColorExpandRange - 1; srcp += infoRec->ColorExpandRange - 1; @@ -1206,7 +1162,8 @@ /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */ GLINT_WRITE_REG(((count - 1) << 16) | (0x15 << 4) | 0x05, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (CARD32*)srcp, count); } src += srcwidth; diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/glint/sx_accel.c xc/programs/Xserver/hw/xfree86/drivers/glint/sx_accel.c --- xc.orig/programs/Xserver/hw/xfree86/drivers/glint/sx_accel.c Wed Apr 12 10:44:41 2000 +++ xc/programs/Xserver/hw/xfree86/drivers/glint/sx_accel.c Sun Mar 18 16:57:36 2001 @@ -298,28 +298,6 @@ } } -static void MoveDWORDS( - 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); -} - static void SXSync( ScrnInfoPtr pScrn @@ -519,7 +497,8 @@ while (dwords >= infoRec->ColorExpandRange) { GLINT_WAIT(infoRec->ColorExpandRange); GLINT_WRITE_REG((infoRec->ColorExpandRange - 2)<<16 | 0x0D, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), src, + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), src, infoRec->ColorExpandRange - 1); dwords -= (infoRec->ColorExpandRange - 1); src += (infoRec->ColorExpandRange - 1); @@ -527,7 +506,8 @@ if (dwords) { GLINT_WAIT(dwords); GLINT_WRITE_REG((dwords - 1)<<16 | 0x0D, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), src,dwords); + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), src,dwords); } pGlint->cpucount += 1; } @@ -809,7 +789,8 @@ /* (0x0f << 4) | 0x0e is the TAG for GLINTColor */ GLINT_WRITE_REG(((infoRec->ColorExpandRange - 2) << 16) | (0x0F << 4) | 0x0E, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (CARD32*)srcp, infoRec->ColorExpandRange - 1); count -= infoRec->ColorExpandRange - 1; srcp += infoRec->ColorExpandRange - 1; @@ -819,7 +800,8 @@ /* (0x0F << 4) | 0x0E is the TAG for GLINTColor */ GLINT_WRITE_REG(((count - 1) << 16) | (0x0f << 4) | 0x0e, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (CARD32*)srcp, count); } src += srcwidth; diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/glint/tx_accel.c xc/programs/Xserver/hw/xfree86/drivers/glint/tx_accel.c --- xc.orig/programs/Xserver/hw/xfree86/drivers/glint/tx_accel.c Wed May 10 16:01:32 2000 +++ xc/programs/Xserver/hw/xfree86/drivers/glint/tx_accel.c Sun Mar 18 16:57:58 2001 @@ -326,28 +326,6 @@ #endif } -static void MoveDWORDS( - 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); -} - static void TXSync( ScrnInfoPtr pScrn @@ -541,7 +519,8 @@ while (dwords >= infoRec->ColorExpandRange) { GLINT_WAIT(infoRec->ColorExpandRange); GLINT_WRITE_REG((infoRec->ColorExpandRange - 2)<<16 | 0x0D, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), src, + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), src, infoRec->ColorExpandRange - 1); dwords -= (infoRec->ColorExpandRange - 1); src += (infoRec->ColorExpandRange - 1); @@ -549,7 +528,8 @@ if (dwords) { GLINT_WAIT(dwords); GLINT_WRITE_REG((dwords - 1)<<16 | 0x0D, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), src,dwords); + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), src,dwords); } pGlint->cpucount += 1; } @@ -848,7 +828,8 @@ /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */ GLINT_WRITE_REG(((infoRec->ColorExpandRange - 2) << 16) | (0x15 << 4) | 0x05, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (CARD32*)srcp, infoRec->ColorExpandRange - 1); count -= infoRec->ColorExpandRange - 1; srcp += infoRec->ColorExpandRange - 1; @@ -858,7 +839,8 @@ /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */ GLINT_WRITE_REG(((count - 1) << 16) | (0x15 << 4) | 0x05, OutputFIFO); - MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), + GLINT_MoveDWORDS( + (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), (CARD32*)srcp, count); } src += srcwidth; diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/mga/mga_storm.c xc/programs/Xserver/hw/xfree86/drivers/mga/mga_storm.c --- xc.orig/programs/Xserver/hw/xfree86/drivers/mga/mga_storm.c Sat Mar 17 17:57:15 2001 +++ xc/programs/Xserver/hw/xfree86/drivers/mga/mga_storm.c Sun Mar 18 17:19:13 2001 @@ -37,6 +37,16 @@ #include "mga_dri.h" #endif +#if defined(__alpha__) +#define MGAMoveDWORDS(d,s,c) \ +do { \ + write_mem_barrier(); \ + XAAMoveDWORDS((d),(s),(c)); \ +} while (0) +#else +#define MGAMoveDWORDS(d,s,c) XAAMoveDWORDS((d),(s),(c)) +#endif + static void MGANAME(SubsequentScreenToScreenCopy)(ScrnInfoPtr pScrn, int srcX, int srcY, int dstX, int dstY, int w, int h); @@ -964,6 +974,8 @@ CHECK_DMA_QUIESCENT(pMga, pScrn); + mem_barrier(); /*??*/ + while(MGAISBUSY()); /* flush cache before a read (mga-1064g 5.1.6) */ OUTREG8(MGAREG_CRTC_INDEX, 0); @@ -1599,7 +1611,13 @@ OUTREG(MGAREG_FXBNDRY, ((x + w - 1) << 16) | (x & 0xFFFF)); OUTREG(MGAREG_YDSTLEN + MGAREG_EXEC, (y << 16) | h); - if(pMga->expandDWORDs > pMga->FifoSize) { +#ifdef __alpha__ + /* force Alpha to always use indirect */ + if(1) +#else + if(pMga->expandDWORDs > pMga->FifoSize) +#endif + { pMga->AccelInfoRec->SubsequentColorExpandScanline = MGANAME(SubsequentColorExpandScanlineIndirect); pMga->AccelInfoRec->ScanlineColorExpandBuffers = @@ -1624,13 +1642,13 @@ while(dwords > pMga->FifoSize) { WAITFIFO(pMga->FifoSize); - XAAMoveDWORDS((CARD32*)(pMga->ColorExpandBase), src, pMga->FifoSize); + MGAMoveDWORDS((CARD32*)(pMga->ColorExpandBase), src, pMga->FifoSize); src += pMga->FifoSize; dwords -= pMga->FifoSize; } WAITFIFO(dwords); - XAAMoveDWORDS((CARD32*)(pMga->ColorExpandBase), src, dwords); + MGAMoveDWORDS((CARD32*)(pMga->ColorExpandBase), src, dwords); if(!(--pMga->expandRows)) { if(pMga->expandRemaining) { @@ -1726,13 +1744,13 @@ while(dwords > pMga->FifoSize) { WAITFIFO(pMga->FifoSize); - XAAMoveDWORDS((CARD32*)(pMga->ColorExpandBase), src, pMga->FifoSize); + MGAMoveDWORDS((CARD32*)(pMga->ColorExpandBase), src, pMga->FifoSize); src += pMga->FifoSize; dwords -= pMga->FifoSize; } WAITFIFO(dwords); - XAAMoveDWORDS((CARD32*)(pMga->ColorExpandBase), src, dwords); + MGAMoveDWORDS((CARD32*)(pMga->ColorExpandBase), src, dwords); if(!(--pMga->expandRows)) { DISABLE_CLIP(); diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/tga/IBM561ramdac.c xc/programs/Xserver/hw/xfree86/drivers/tga/IBM561ramdac.c --- xc.orig/programs/Xserver/hw/xfree86/drivers/tga/IBM561ramdac.c Mon Oct 23 17:16:50 2000 +++ xc/programs/Xserver/hw/xfree86/drivers/tga/IBM561ramdac.c Sun Mar 18 16:51:30 2001 @@ -533,7 +533,6 @@ TGAPtr pTga = TGAPTR(pScrn); unsigned int temp1[6] = {0,0,0,0,0,0}; - struct monitor_data * c_table = &crystal_table; /* * Set-up av9110 to 14.3 Mhz as reference for 561's PLL @@ -555,10 +554,10 @@ IBM561WriteReg(pScrn, IBM561_CONFIG_REG_4, 0x20 ); /* IBM561WriteReg(pScrn, IBM561_PLL_VCO_DIV_REG, 0xc8 ); */ - IBM561WriteReg(pScrn, IBM561_PLL_VCO_DIV_REG, c_table->ibm561_vco_div); + IBM561WriteReg(pScrn, IBM561_PLL_VCO_DIV_REG, tga_c_table->ibm561_vco_div); /* IBM561WriteReg(pScrn, IBM561_PLL_REF_REG, 0x08 ); */ - IBM561WriteReg(pScrn, IBM561_PLL_REF_REG, c_table->ibm561_ref ); + IBM561WriteReg(pScrn, IBM561_PLL_REF_REG, tga_c_table->ibm561_ref ); IBM561WriteReg(pScrn, IBM561_DIV_DOT_CLK_REG, 0xb0 ); diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/tga/tga.h xc/programs/Xserver/hw/xfree86/drivers/tga/tga.h --- xc.orig/programs/Xserver/hw/xfree86/drivers/tga/tga.h Fri Oct 27 21:23:37 2000 +++ xc/programs/Xserver/hw/xfree86/drivers/tga/tga.h Sun Mar 18 16:51:30 2001 @@ -120,7 +120,9 @@ unsigned int ibm561_ref; }; -extern struct monitor_data crystal_table; +extern struct monitor_data tga_crystal_table[]; +extern int tga_crystal_table_entries; +extern struct monitor_data *tga_c_table; /* Prototypes */ @@ -131,6 +133,7 @@ Bool saveFonts*/); Bool DEC21030Init(ScrnInfoPtr pScrn, DisplayModePtr mode); void write_av9110(ScrnInfoPtr pScrn, unsigned int *); +void TGA2SetupMode(ScrnInfoPtr pScrn); /* tga_accel.c */ Bool DEC21030AccelInit(ScreenPtr pScreen); diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/tga/tga_dac.c xc/programs/Xserver/hw/xfree86/drivers/tga/tga_dac.c --- xc.orig/programs/Xserver/hw/xfree86/drivers/tga/tga_dac.c Fri Oct 27 21:23:37 2000 +++ xc/programs/Xserver/hw/xfree86/drivers/tga/tga_dac.c Sun Mar 18 16:51:30 2001 @@ -49,45 +49,114 @@ /* There lies an ICS1562 Clock Generator. */ ICS1562_CalcClockBits(freq, pll_bits); - switch (pTga->Chipset) { - case PCI_CHIP_DEC21030: - /* - * For the DEC 21030 TGA: - * This requires the 55 clock bits be written in a serial manner to - * bit 0 of the CLOCK register and on the 56th bit set the hold flag. - */ - for (i = 0;i <= 6; i++) { - for (j = 0; j <= 7; j++) { - temp = (pll_bits[i] >> (7-j)) & 1; - if (i == 6 && j == 7) - temp |= 2; - TGA_WRITE_REG(temp, TGA_CLOCK_REG); - } + /* + * For the DEC 21030 TGA: + * This requires the 55 clock bits be written in a serial manner to + * bit 0 of the CLOCK register and on the 56th bit set the hold flag. + */ + for (i = 0;i <= 6; i++) { + for (j = 0; j <= 7; j++) { + temp = (pll_bits[i] >> (7-j)) & 1; + if (i == 6 && j == 7) + temp |= 2; + TGA_WRITE_REG(temp, TGA_CLOCK_REG); } - break; - - case PCI_CHIP_TGA2: - /* - * For the DEC TGA2: - * This requires the 55 clock bits be written in a serial manner to - * bit 0 of the CLOCK register and on the 56th bit set the hold flag. - */ -#if 0 - /* ?? FIXME FIXME FIXME ?? */ - for (i = 0;i <= 6; i++) { - for (j = 0; j <= 7; j++) { - temp = (pll_bits[i] >> (7-j)) & 1; - if (i == 6 && j == 7) - temp |= 2; - TGA_WRITE_REG(temp, TGA_CLOCK_REG); - } - } -#endif - break; } } -struct monitor_data crystal_table = +struct monitor_data tga_crystal_table[] = { +{ +/* Option 0 Monitor Info 130.8 */ +1024, /* rows */ +1280, /* columns */ +130, /* 130.8 Mhz */ +72, /* refresh rate */ +1024, /* v scanlines */ +3, /* v front porch */ +3, /* v sync */ +33, /* v back porch */ +1280, /* h pixels */ +32, /* h front porch */ +160, /* h sync */ +232, /* h back porch */ +/* AV9110 clock serial load information 130.808 */ +0x40, /* 0:6 VCO frequency divider N */ +0x7, /* 7:13 Reference frequency divide M */ +0x0, /* 14 VCO pre-scale divide V (0=div.by 1,1=by 8) +*/ +0x1, /* 15:16 CLK/X output divide X */ +0x1, /* 17:18 VCO output divide R */ +1, /* 19 CLK Output enable. */ +1, /* 20 CLK/X Output enable */ +0, /* reserved, should be set to 0 */ +0, /* Reference clock select on CLK 1=ref */ +1, /* reserved, should be set to 1 */ +/* IBM561 PLL setup data 130.808 */ +0xC8, /* VCO Div: PFR=0x3, M-65=49 */ +0x8 /* REF: N=0x8 */ +}, +{ +/* Option 3 Monitor Info 104.00 Mhz */ +900, /* rows */ +1152, /* columns */ +104, /* 104 Mhz */ +72, /* refresh rate */ +900, /* v scanlines */ +6, /* v front porch */ +10, /* v sync */ +44, /* v back porch */ +1152, /* h pixels */ +64, /* h front porch */ +112, /* h sync */ +176, /* h back porch */ +/* 103.994 MHz av9110 clock serial load information */ +0x6d, /* 0:6 VCO frequency divider N */ +0xf, /* 7:13 Reference frequency divide M */ +0x0, /* 14 VCO pre-scale divide V (0=div.by 1,1=by 8) +*/ +0x1, /* 15:16 CLK/X output divide X */ +0x1, /* 17:18 VCO output divide R */ +1, /* 19 CLK Output enable. */ +1, /* 20 CLK/X Output enable */ +0, /* reserved, should be set to 0 */ +0, /* Reference clock select on CLK 1=ref */ +1, /* reserved, should be set to 1 */ +/* 104.00 MHz IBM561 PLL setup data */ +0x96, /* VCO Div: PFR=2, M=57 */ +0x6 /* REF: N=6 */ +}, +#if 1 +{ +/* Option 6 Monitor Info 74.00 Mhz */ +768, /* rows */ +1024, /* columns */ +74, /* 74 Mhz */ +72, /* refresh rate */ +768, /* v scanlines */ +1, /* v front porch */ +6, /* v sync */ +22, /* v back porch */ +1024, /* h pixels */ +16, /* h front porch */ +128, /* h sync */ +128, /* h back porch */ +/* 74.00 MHz AV9110 clock serial load information */ +0x2a, /* 0:6 VCO frequency divider N */ +0x41, /* 7:13 Reference frequency divide M */ +0x1, /* 14 VCO pre-scale divide V (0=div.by 1,1=by 8) +*/ +0x1, /* 15:16 CLK/X output divide X */ +0x1, /* 17:18 VCO output divide R */ +1, /* 19 CLK Output enable. */ +1, /* 20 CLK/X Output enable */ +0, /* reserved, should be set to 0 */ +0, /* Reference clock select on CLK 1=ref */ +1, /* reserved, should be set to 1 */ +/* 74.00 MHz IBM561 PLL setup data */ +0x9C, /* VCO Div: PFR=2, M=0x5D*/ +0x9 /* REF: N=0x9 */ +}, +#else { /* Option 5 Monitor Info 75.00 Mhz */ 768, /* rows */ @@ -117,8 +186,406 @@ /* 75.00 MHz IBM561 PLL setup data */ 0x93, /* VCO Div: PFR=2, M=0x54 */ 0x8 /* REF: N=0x8 */ +}, +#endif +{ +/* Option 9 Monitor Info 50 Mhz ergo SVGA */ +600, /* rows */ +800, /* columns */ +50, /* 50 Mhz */ +72, /* refresh rate */ +600, /* v scanlines */ +37, /*(31 tga)v front porch */ +6, /* v sync */ +23, /*(29 tga)v back porch */ +800, /* h pixels */ +56, /* h front porch */ +120, /* h sync */ +64, /* h back porch */ +/*50.00 Mhz AV9110 clock serial load information */ +0x37, /* 0:6 VCO frequency divider N */ +0x3f, /* 7:13 Reference frequency divide M */ +0x1, /* 14 VCO pre-scale divide V (0=div.by 1,1=by 8) +*/ +0x1, /* 15:16 CLK/X output divide X */ +0x2, /* 17:18 VCO output divide R */ +1, /* 19 CLK Output enable. */ +1, /* 20 CLK/X Output enable */ +0, /* reserved, should be set to 0 */ +0, /* Reference clock select on CLK 1=ref */ +1, /* reserved, should be set to 1 */ +/* 50.00 MHz IBM561 PLL setup data */ +0x45, /* VCO Div: PFR=1, M=46*/ +0x5 /* REF: N=5 */ +}, +{ +/* Option B Monitor Info 31.5 Mhz ergo VGA */ +480, /* rows */ +640, /* columns */ +32, /* 32 Mhz */ +72, /* refresh rate */ +480, /* v scanlines */ +9, /* v front porch */ +3, /* v sync */ +28, /* v back porch */ +640, /* h pixels */ +24, /* h front porch */ +40, /* h sync */ +128, /* h back porch */ +/* 31.50 MHz AV9110 clock serial load information */ +0x16, /* 0:6 VCO frequency divider N */ +0x05, /* 7:13 Reference frequency divide M */ +0x0, /* 14 VCO pre-scale divide V (0=div.by 1,1=by 8) +*/ +0x1, /* 15:16 CLK/X output divide X */ +0x2, /* 17:18 VCO output divide R */ +1, /* 19 CLK Output enable. */ +1, /* 20 CLK/X Output enable */ +0, /* reserved, should be set to 0 */ +0, /* Reference clock select on CLK 1=ref */ +1, /* reserved, should be set to 1 */ +/* 31.50 MHz IBM561 PLL setup data */ +0x17, /* VCO Div: PFR=0, M=0x58 */ +0x5 /* REF: N=0x5 */ +}, +#ifdef ALLOW_LT_72_HZ +{ +/* Option 1 Monitor Info 119.84 Mhz */ +1024, /* rows */ +1280, /* columns */ +119, /* 119 Mhz */ +66, /* refresh rate */ +1024, /* v scanlines */ +3, /* v front porch */ +3, /* v sync */ +33, /* v back porch */ +1280, /* h pixels */ +32, /* h front porch */ +160, /* h sync */ +232, /* h back porch */ +/* 119.84MHz AV9110 clock serial load information */ +0x2d, /* 0:6 VCO frequency divider N */ +0x2b, /* 7:13 Reference frequency divide M */ +0x1, /* 14 VCO pre-scale divide V (0=div.by 1,1=by 8) */ +0x1, /* 15:16 CLK/X output divide X */ +0x1, /* 17:18 VCO output divide R */ +1, /* 19 CLK Output enable. */ +1, /* 20 CLK/X Output enable */ +0, /* reserved, should be set to 0 */ +0, /* Reference clock select on CLK 1=ref */ +1, /* reserved, should be set to 1 */ +/* IBM561 PLL setup data 119.84 */ +0x82, /* VCO Div: PFR=0x2, M=0x43 */ +0x4 /* REF: N=0x4 */ +}, +{ +/* Option 2 Monitor Info 108.18 Mhz */ +1024, /* rows */ +1280, /* columns */ +108, /* 108 Mhz */ +60, /* refresh rate */ +1024, /* v scanlines */ +3, /* v front porch */ +3, /* v sync */ +26, /* v back porch */ +1280, /* h pixels */ +44, /* h front porch */ +184, /* h sync */ +200, /* h back porch */ +/* 108.18 MHz av9110 Clk serial load information */ +0x11, /* 0:6 VCO frequency divider N */ +0x9, /* 7:13 Reference frequency divide M */ +0x1, /* 14 VCO pre-scale divide V (0=div.by 1,1=by 8) +*/ +0x1, /* 15:16 CLK/X output divide X */ +0x2, /* 17:18 VCO output divide R */ +1, /* 19 CLK Output enable. */ +1, /* 20 CLK/X Output enable */ +0, /* reserved, should be set to 0 */ +0, /* Reference clock select on CLK 1=ref */ +1, /* reserved, should be set to 1 */ +/* 108.18 MHz IBM561 PLL setup data */ +0xB8, /* VCO Div: PFR=2, M=79 */ +0x8 /* REF: N=0x8 */ +}, +{ +/* Option 5 Monitor Info 75.00 Mhz */ +768, /* rows */ +1024, /* columns */ +75, /* 74 Mhz */ +70, /* refresh rate */ +768, /* v scanlines */ +3, /* v front porch */ +6, /* v sync */ +29, /* v back porch */ +1024, /* h pixels */ +24, /* h front porch */ +136, /* h sync */ +144, /* h back porch */ +/* 75.00 MHz AV9110 clock serial load information */ +0x6e, /* 0:6 VCO frequency divider N */ +0x15, /* 7:13 Reference frequency divide M */ +0x0, /* 14 VCO pre-scale divide V (0=div.by 1,1=by 8) +*/ +0x1, /* 15:16 CLK/X output divide X */ +0x1, /* 17:18 VCO output divide R */ +1, /* 19 CLK Output enable. */ +1, /* 20 CLK/X Output enable */ +0, /* reserved, should be set to 0 */ +0, /* Reference clock select on CLK 1=ref */ +1, /* reserved, should be set to 1 */ +/* 75.00 MHz IBM561 PLL setup data */ +0x93, /* VCO Div: PFR=2, M=0x54 */ +0x8 /* REF: N=0x8 */ +}, +{ +/* Option 7 Monitor Info 69 Mhz DEC 72 Hz */ +864, /* rows */ +1024, /* columns */ +69, /* 69.x Mhz */ +60, /* refresh rate */ +864, /* v scanlines */ +0, /* v front porch */ +3, /* v sync */ +34, /* v back porch */ +1024, /* h pixels */ +12, /* h front porch */ +128, /* h sync */ +116, /* h back porch */ +/* 69.00 Mhz AV9110 clock serial load information */ +0x35, /* 0:6 VCO frequency divider N */ +0xb, /* 7:13 Reference frequency divide M */ +0x0, /* 14 VCO pre-scale divide V (0=div.by 1,1=by 8) +*/ +0x1, /* 15:16 CLK/X output divide X */ +0x1, /* 17:18 VCO output divide R */ +1, /* 19 CLK Output enable. */ +1, /* 20 CLK/X Output enable */ +0, /* reserved, should be set to 0 */ +0, /* Reference clock select on CLK 1=ref */ +1, /* reserved, should be set to 1 */ +/* 69.00 MHz IBM561 PLL setup data */ +0xA9, /* VCO Div: PFR=2, M=0x6A */ +0xB /* REF: N=0xB */ +}, +{ +/* Option 8 Monitor Info 65 Mhz */ +768, /* rows */ +1024, /* columns */ +65, /* 65 Mhz */ +60, /* refresh rate */ +768, /* v scanlines */ +7, /* v front porch */ +9, /* v sync */ +26, /* v back porch */ +1024, /* h pixels */ +56, /* h front porch */ +64, /* h sync */ +200, /* h back porch */ +/* 65.00 MHz AV9110 clock serial load information */ +0x6d, /* 0:6 VCO frequency divider N */ +0x0c, /* 7:13 Reference frequency divide M */ +0x0, /* 14 VCO pre-scale divide V (0=div.by 1,1=by 8) +*/ +0x1, /* 15:16 CLK/X output divide X */ +0x2, /* 17:18 VCO output divide R */ +1, /* 19 CLK Output enable. */ +1, /* 20 CLK/X Output enable */ +0, /* reserved, should be set to 0 */ +0, /* Reference clock select on CLK 1=ref */ +1, /* reserved, should be set to 1 */ +/* 65.00 MHz IBM561 PLL setup data */ +0xAC, /* VCO Div: PFR=2, M=0x6D */ +0xC /* REF: N=0xC */ +}, +{ +/* Option A Monitor Info 40 Mhz SVGA */ +600, /* rows */ +800, /* columns */ +40, /* 40 Mhz */ +60, /* refresh rate */ +600, /* v scanlines */ +1, /* v front porch */ +4, /* v sync */ +23, /* v back porch */ +800, /* h pixels */ +40, /* h front porch */ +128, /* h sync */ +88, /* h back porch */ +/* 40.00 MHz AV9110 clock serial load information */ +0x5f, /* 0:6 VCO frequency divider N */ +0x11, /* 7:13 Reference frequency divide M */ +0x0, /* 14 VCO pre-scale divide V (0=div.by 1,1=by 8) +*/ +0x1, /* 15:16 CLK/X output divide X */ +0x2, /* 17:18 VCO output divide R */ +1, /* 19 CLK Output enable. */ +1, /* 20 CLK/X Output enable */ +0, /* reserved, should be set to 0 */ +0, /* Reference clock select on CLK 1=ref */ +1, /* reserved, should be set to 1 */ +/* 40.00 MHz IBM561 PLL setup data */ +0x42, /* VCO Div: PFR=1, M=43 */ +0x6 /* REF: N=0x6 */ +}, +{ +/* Option C Monitor Info 25.175 Mhz VGA */ +480, /* rows */ +640, /* columns */ +25, /* 25.175 Mhz */ +60, /* refresh rate */ +480, /* v scanlines */ +10, /* v front porch */ +2, /* v sync */ +33, /* v back porch */ +640, /* h pixels */ +16, /* h front porch */ +96, /* h sync */ +48, /* h back porch */ +/* 25.175 MHz AV9110 clock serial load information */ +0x66, /* 0:6 VCO frequency divider N */ +0x1d, /* 7:13 Reference frequency divide M */ +0x0, /* 14 VCO pre-scale divide V (0=div.by 1,1=by 8) +*/ +0x1, /* 15:16 CLK/X output divide X */ +0x2, /* 17:18 VCO output divide R */ +1, /* 19 CLK Output enable. */ +1, /* 20 CLK/X Output enable */ +0, /* reserved, should be set to 0 */ +0, /* Reference clock select on CLK 1=ref */ +1, /* reserved, should be set to 1 */ +/* 25.175 MHz IBM561 PLL setup data */ +0x3E, /* VCO Div: PFR=0, M=0x7F */ +0x9 /* REF: N=0x9 */ +}, +{ +/* Option E Monitor Info 110 Mhz */ +1024, /* rows */ +1280, /* columns */ +110, +60, /* refresh rate */ +1024, /* v scanlines */ +6, /* v front porch */ +7, /* v sync */ +44, /* v back porch */ +1280, /* h pixels */ +19, /* h front porch */ +163, /* h sync */ +234, /* h back porch */ +/* 110.0 MHz AV9110 clock serial load information */ +0x60, /* 0:6 VCO frequency divider N */ +0x32, /* 7:13 Reference frequency divide M */ +0x1, /* 14 VCO pre-scale divide V (0=div.by 1,1=by 8) */ +0x1, /* 15:16 CLK/X output divide X */ +0x2, /* 17:18 VCO output divide R */ +1, /* 19 CLK Output enable. */ +1, /* 20 CLK/X Output enable */ +0, /* reserved, should be set to 0 */ +0, /* Reference clock select on CLK 1=ref */ +1, /* reserved, should be set to 1 */ +/* 110.0 MHz IBM561 PLL setup data */ +0xBA, /* VCO Div: PFR=0x2, M=0x7B */ +0x8 /* REF: N=0x8 */ +}, +#endif /* ALLOW_LT_72_HZ */ +#ifdef /* ALLOW_GT_72_HZ */ +{ +/* Option D Monitor Info 135 Mhz */ +1024, /* rows */ +1280, /* columns */ +135, /* 135 Mhz */ +75, /* refresh rate */ +1024, /* v scanlines */ +1, /* v front porch */ +3, /* v sync */ +38, /* v back porch */ +1280, /* h pixels */ +16, /* h front porch */ +144, /* h sync */ +248, /* h back porch */ +/* 135.0 MHz AV9110 clock serial load information */ +0x42, /* 0:6 VCO frequency divider N */ +0x07, /* 7:13 Reference frequency divide M */ +0x0, /* 14 VCO pre-scale divide V (0=div.by 1,1=by 8) */ +0x1, /* 15:16 CLK/X output divide X */ +0x1, /* 17:18 VCO output divide R */ +1, /* 19 CLK Output enable. */ +1, /* 20 CLK/X Output enable */ +0, /* reserved, should be set to 0 */ +0, /* Reference clock select on CLK 1=ref */ +1, /* reserved, should be set to 1 */ +/* 135.0 MHz IBM561 PLL setup data */ +0xC1, /* VCO Div: PFR=0x3, M=0x42 */ +0x7 /* REF: N=0x7 */ +}, +#ifdef ALLOW_GT_1280x1024 +{ +/* Option 4 Monitor Info 175.5 Mhz (8-plane) */ +1200, /* rows */ +1600, /* columns */ +175, /* clock */ +65, /* refresh rate */ +1200, /* v scanlines */ +1, /* v front porch */ +3, /* v sync */ +46, /* v back porch */ +1600, /* h pixels */ +32, /* h front porch */ +192, /* h sync */ +336, /* h back porch */ +/* 110.0 MHz AV9110 clock serial load information */ +0x5F, /* 0:6 VCO frequency divider N */ +0x3E, /* 7:13 Reference frequency divide M */ +0x1, /* 14 VCO pre-scale divide V (0=div.by 1,1=by 8) +*/ +0x1, /* 15:16 CLK/X output divide X */ +0x1, /* 17:18 VCO output divide R */ +1, /* 19 CLK Output enable. */ +1, /* 20 CLK/X Output enable */ +0, /* reserved, should be set to 0 */ +0, /* Reference clock select on CLK 1=ref */ +1, /* reserved, should be set to 1 */ +/* 110.0 MHz IBM561 PLL setup data */ +0xE1, /* VCO Div: PFR=0x3, M-65=0x21 */ +0x8 /* REF: N=0x8 */ +}, +{ +/* Option F Monitor Info (24-plane) */ +1200, /* rows */ +1600, /* columns */ +202.5, /* 130.8 Mhz */ +75, /* refresh rate */ +1200, /* v scanlines */ +1, /* v front porch */ +3, /* v sync */ +46, /* v back porch */ +1600, /* h pixels */ +32, /* h front porch */ +192, /* h sync */ +336, /* h back porch */ +/* AV9110 clock serial load information 130.808 */ +0x60, /* 0:6 VCO frequency divider N */ +0x32, /* 7:13 Reference frequency divide M */ +0x1, /* 14 VCO pre-scale divide V (0=div.by 1,1=by 8) */ +0x1, /* 15:16 CLK/X output divide X */ +0x2, /* 17:18 VCO output divide R */ +1, /* 19 CLK Output enable. */ +1, /* 20 CLK/X Output enable */ +0, /* reserved, should be set to 0 */ +0, /* Reference clock select on CLK 1=ref */ +1, /* reserved, should be set to 1 */ +/* 110.0 MHz IBM561 PLL setup data */ +0xE2, /* bogus VCO Div: PFR=0x2, M=0x7B */ +0x7 /* bogus REF: N=0x8 */ +} +#endif /* ALLOW_GT_1280x1024 */ +#endif /* ALLOW_GT_72_HZ */ }; +int tga_crystal_table_entries = sizeof(tga_crystal_table)/sizeof(struct monitor_data); + +struct monitor_data *tga_c_table; + /* ICS av9110 is only used on TGA2 */ void @@ -142,30 +609,58 @@ TGA2_WRITE_CLOCK_REG(0x0, 0xf800); } +void TGA2SetupMode(ScrnInfoPtr pScrn) +{ + int i; + + /* + * HACK HACK HACK + * + * We do not know how to generate arbitrary clocks, so we search + * the crystal_table above for a match. Sigh... + */ + tga_c_table = tga_crystal_table; + for (i = 0; i < tga_crystal_table_entries; i++, tga_c_table++) { + if ((tga_c_table->max_rows == pScrn->currentMode->VDisplay) && + (tga_c_table->max_cols == pScrn->currentMode->HDisplay)) { + ErrorF("Found a matching mode (%d)!\n", i); + break; + } + } + if (i == tga_crystal_table_entries) { +#ifdef FOR_NOW + FatalError("Unable to find a workable mode"); +#else + ErrorF("Unable to find a matching mode!\n"); + /* tga_c_table = &tga_crystal_table[4]; *//* 640x480 @ 72 */ + tga_c_table = &tga_crystal_table[2]; /* 1024x768 @ 72 */ +#endif + } + return; +} + static void ICS9110ClockSelect(ScrnInfoPtr pScrn, int freq) { unsigned int temp, temp1[6]; - struct monitor_data *c_table; + int i; /* There lies an ICS9110 Clock Generator. */ /* ICS9110_CalcClockBits(freq, pll_bits); */ - c_table = &crystal_table; - /* the following is based on munge_ics() from the TRU64 kernel TGA driver */ - temp = (unsigned int)(c_table->vco_div | - (c_table->ref_div << 7) | - (c_table->vco_pre << 14) | - (c_table->clk_div << 15) | - (c_table->vco_out_div << 17) | - (c_table->clk_out_en << 19) | - (c_table->clk_out_enX << 20) | - (c_table->res0 << 21) | - (c_table->clk_sel << 22) | - (c_table->res1 << 23)); + temp = (unsigned int)(tga_c_table->vco_div | + (tga_c_table->ref_div << 7) | + (tga_c_table->vco_pre << 14) | + (tga_c_table->clk_div << 15) | + (tga_c_table->vco_out_div << 17) | + (tga_c_table->clk_out_en << 19) | + (tga_c_table->clk_out_enX << 20) | + (tga_c_table->res0 << 21) | + (tga_c_table->clk_sel << 22) | + (tga_c_table->res1 << 23)); temp1[0] = (temp & 0x00000001) | ((temp & 0x00000002) << 7) | ((temp & 0x00000004) << 14) | ((temp & 0x00000008) << 21); diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/tga/tga_driver.c xc/programs/Xserver/hw/xfree86/drivers/tga/tga_driver.c --- xc.orig/programs/Xserver/hw/xfree86/drivers/tga/tga_driver.c Mon Dec 4 19:56:22 2000 +++ xc/programs/Xserver/hw/xfree86/drivers/tga/tga_driver.c Sun Mar 18 16:51:30 2001 @@ -954,6 +954,15 @@ /* Set the current mode to the first in the list */ pScrn->currentMode = pScrn->modes; + /* + This is a bit of a hack; we seem to have to init + the TGA2 chipset knowing what the mode is, so we + do this now as soon as we know it... + */ + if (pTga->Chipset == PCI_CHIP_TGA2) { + TGA2SetupMode(pScrn); + } + /* Print the list of modes being used */ xf86PrintModes(pScrn); diff -ur xc.orig/programs/Xserver/hw/xfree86/os-support/linux/lnx_axp.c xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_axp.c --- xc.orig/programs/Xserver/hw/xfree86/os-support/linux/lnx_axp.c Sat Mar 17 17:57:16 2001 +++ xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_axp.c Sun Mar 18 16:51:30 2001 @@ -10,28 +10,28 @@ axpDevice lnxGetAXP(void); static AXP axpList[] = { - { "Tsunami", NULL, NULL, TSUNAMI }, - { "Eiger", NULL, NULL, TSUNAMI }, - {"Noname", NULL, NULL, LCA }, - { "AlphaBook1", NULL, NULL, LCA }, - {"EB66", NULL, NULL, LCA}, - {"EB64+",NULL,NULL, APECS}, + {"Tsunami",NULL,NULL,TSUNAMI}, + {"Eiger",NULL,NULL,TSUNAMI}, + {"Noname",NULL,NULL,LCA}, + {"AlphaBook1",NULL,NULL,LCA}, + {"EB66",NULL,NULL,LCA}, + {"EB64+",NULL,NULL,APECS}, {"Noritake",NULL,"EV5",CIA}, {"Noritake",NULL,"EV56",CIA}, {"Noritake",NULL,NULL,APECS}, - {"XL",NULL,NULL,APECS}, + {"XL",NULL,NULL,APECS}, {"Avanti",NULL,NULL,APECS}, {"Mikasa",NULL,"EV5",CIA}, {"Mikasa",NULL,"EV56",CIA}, {"Mikasa",NULL,NULL,APECS}, {"EB164","EB164",NULL,CIA}, - {"EB164","PC164", NULL,CIA}, - {"EB164","RX164",NULL, POLARIS}, - {"EB164","SX164",NULL, PYXIS}, - {"EB164","LX164",NULL, PYXIS}, + {"EB164","PC164",NULL,CIA}, + {"EB164","RX164",NULL,POLARIS}, + {"EB164","SX164",NULL,PYXIS}, + {"EB164","LX164",NULL,PYXIS}, {"Alcor",NULL,NULL,CIA}, {"Takara",NULL,NULL,CIA}, - {"Sable",NULL, "EV5",T2_GAMMA}, + {"Sable",NULL,"EV5",T2_GAMMA}, {"Sable",NULL,"EV56",T2_GAMMA}, {"Sable",NULL,NULL,T2}, {"Rawhide",NULL,NULL,MCPCIA}, diff -ur xc.orig/programs/Xserver/hw/xfree86/os-support/linux/lnx_ev56.c xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_ev56.c --- xc.orig/programs/Xserver/hw/xfree86/os-support/linux/lnx_ev56.c Thu Feb 17 08:45:49 2000 +++ xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_ev56.c Sun Mar 18 16:51:30 2001 @@ -29,18 +29,21 @@ int readDense8(pointer Base, register unsigned long Offset) { + mem_barrier(); return *(volatile CARD8*) ((unsigned long)Base+(Offset)); } int readDense16(pointer Base, register unsigned long Offset) { + mem_barrier(); return *(volatile CARD16*) ((unsigned long)Base+(Offset)); } int readDense32(pointer Base, register unsigned long Offset) { + mem_barrier(); return *(volatile CARD32*)((unsigned long)Base+(Offset)); } @@ -65,20 +68,20 @@ void writeDense8(int Value, pointer Base, register unsigned long Offset) { + write_mem_barrier(); *(volatile CARD8 *)((unsigned long)Base+(Offset)) = Value; - mem_barrier(); } void writeDense16(int Value, pointer Base, register unsigned long Offset) { + write_mem_barrier(); *(volatile CARD16 *)((unsigned long)Base+(Offset)) = Value; - mem_barrier(); } void writeDense32(int Value, pointer Base, register unsigned long Offset) { + write_mem_barrier(); *(volatile CARD32 *)((unsigned long)Base+(Offset)) = Value; - mem_barrier(); } diff -ur xc.orig/programs/Xserver/hw/xfree86/os-support/linux/lnx_video.c xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_video.c --- xc.orig/programs/Xserver/hw/xfree86/os-support/linux/lnx_video.c Fri Dec 8 22:59:56 2000 +++ xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_video.c Sun Mar 18 17:29:04 2001 @@ -614,15 +614,16 @@ Offset += (unsigned long)Base - (unsigned long)lnxBase; shift = (Offset & 0x3) << 3; - if (Offset >= (hae_thresh)) { + if (Offset >= (hae_thresh)) { msb = Offset & hae_mask; Offset -= msb; if (msb_set != msb) { - sethae(msb); - msb_set = msb; + sethae(msb); + msb_set = msb; } - } + } + mem_barrier(); result = *(vuip) ((unsigned long)lnxSBase + (Offset << 5)); result >>= shift; return 0xffUL & result; @@ -636,14 +637,16 @@ Offset += (unsigned long)Base - (unsigned long)lnxBase; shift = (Offset & 0x2) << 3; - if (Offset >= hae_thresh) { + if (Offset >= hae_thresh) { msb = Offset & hae_mask; Offset -= msb; - if (msb_set != msb) { - sethae(msb); - msb_set = msb; - } + if (msb_set != msb) { + sethae(msb); + msb_set = msb; + } } + + mem_barrier(); result = *(vuip)((unsigned long)lnxSBase+(Offset<<5)+(1<<(5-2))); result >>= shift; return 0xffffUL & result; @@ -652,6 +655,8 @@ static int readSparse32(pointer Base, register unsigned long Offset) { + /* note that this is actually doing a DENSE read... */ + mem_barrier(); return *(vuip)((unsigned long)Base+(Offset)); } @@ -670,8 +675,8 @@ msb_set = msb; } } + write_mem_barrier(); *(vuip) ((unsigned long)lnxSBase + (Offset << 5)) = b * 0x01010101; - mem_barrier(); } static void @@ -689,17 +694,16 @@ msb_set = msb; } } - *(vuip)((unsigned long)lnxSBase+(Offset<<5)+(1<<(5-2))) = - w * 0x00010001; - mem_barrier(); - + write_mem_barrier(); + *(vuip)((unsigned long)lnxSBase+(Offset<<5)+(1<<(5-2))) = w * 0x00010001; } static void writeSparse32(int Value, pointer Base, register unsigned long Offset) { + /* note that this is actually doing a DENSE write... */ + write_mem_barrier(); *(vuip)((unsigned long)Base + (Offset)) = Value; - mem_barrier(); return; } diff -ur xc.orig/programs/Xserver/hw/xfree86/os-support/xf86_OSproc.h xc/programs/Xserver/hw/xfree86/os-support/xf86_OSproc.h --- xc.orig/programs/Xserver/hw/xfree86/os-support/xf86_OSproc.h Fri Dec 8 22:59:49 2000 +++ xc/programs/Xserver/hw/xfree86/os-support/xf86_OSproc.h Sun Mar 18 16:51:30 2001 @@ -194,13 +194,6 @@ extern Bool xf86UnbindGARTMemory(int screenNum, int key); extern Bool xf86EnableAGP(int screenNum, CARD32 mode); -#if defined(__alpha__) -extern void xf86JensenMemToBus(char *, long, long, int); -extern void xf86JensenBusToMem(char *, char *, unsigned long, int); -extern void xf86SlowBCopyFromBus(unsigned char *, unsigned char *, int); -extern void xf86SlowBCopyToBus(unsigned char *, unsigned char *, int); -#endif /* __alpha__ */ - /* These routines are in shared/sigio.c and are not loaded as part of the module. These routines are small, and the code if very POSIX-signal (or OS-signal) specific, so it seemed better to provide more complex