diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/apm.h | 4 | ||||
-rw-r--r-- | src/apm_cursor.c | 13 | ||||
-rw-r--r-- | src/apm_driver.c | 72 | ||||
-rw-r--r-- | src/apm_funcs.c | 7 | ||||
-rw-r--r-- | src/apm_video.c | 68 |
5 files changed, 65 insertions, 99 deletions
@@ -1,4 +1,4 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/apm/apm.h,v 1.19 2002/05/07 12:53:49 alanh Exp $ */ +/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/apm/apm.h,v 1.20 2003/11/03 05:11:04 tsi Exp $ */ /* All drivers should typically include these */ @@ -146,7 +146,7 @@ typedef struct { struct ApmStippleCacheRec { XAACacheInfoRec apmStippleCache; FBAreaPtr area; - int apmStippleCached:1; + unsigned int apmStippleCached:1; } apmCache[APM_CACHE_NUMBER]; int apmCachePtr; unsigned char regcurr[0x54]; diff --git a/src/apm_cursor.c b/src/apm_cursor.c index 4bf0f98..6a23341 100644 --- a/src/apm_cursor.c +++ b/src/apm_cursor.c @@ -1,4 +1,4 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/apm/apm_cursor.c,v 1.14 2000/06/30 18:27:02 dawes Exp $ */ +/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/apm/apm_cursor.c,v 1.15 2003/10/30 18:37:20 tsi Exp $ */ #include "X.h" @@ -84,17 +84,6 @@ int ApmHWCursorInit(ScreenPtr pScreen) infoPtr->ShowCursor = ApmShowCursor; infoPtr->UseHWCursor = ApmUseHWCursor; - /*ErrorF("%s %s: %s: Using hardware cursor (XAA).\n", - XCONFIG_PROBED, vga256InfoRec.name, vga256InfoRec.chipset); - - if(XAACursorInfoRec.Flags & USE_HARDWARE_CURSOR) { - vgaHWCursor.Init = XAACursorInit; - vgaHWCursor.Initialized = TRUE; - vgaHWCursor.Restore = XAARestoreCursor; - vgaHWCursor.Warp = XAAWarpCursor; - vgaHWCursor.QueryBestSize = XAAQueryBestSize; - }*/ - /* Set up the convert table for the input cursor data */ for (i = 0; i < 256; i++) ConvertTable[i] = ((~i) & 0xAA) | (i & (i >> 1) & 0x55); diff --git a/src/apm_driver.c b/src/apm_driver.c index dd877d3..43ee94e 100644 --- a/src/apm_driver.c +++ b/src/apm_driver.c @@ -1,4 +1,4 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/apm/apm_driver.c,v 1.61 2002/10/16 21:13:46 dawes Exp $ */ +/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/apm/apm_driver.c,v 1.66 2003/10/30 18:37:20 tsi Exp $ */ #include "apm.h" #include "xf86cmap.h" @@ -36,8 +36,8 @@ static Bool ApmEnterVT(int scrnIndex, int flags); static void ApmLeaveVT(int scrnIndex, int flags); static Bool ApmCloseScreen(int scrnIndex, ScreenPtr pScreen); static void ApmFreeScreen(int scrnIndex, int flags); -static int ApmValidMode(int scrnIndex, DisplayModePtr mode, - Bool verbose, int flags); +static ModeStatus ApmValidMode(int scrnIndex, DisplayModePtr mode, + Bool verbose, int flags); static Bool ApmSaveScreen(ScreenPtr pScreen, int mode); static void ApmUnlock(ApmPtr pApm); static void ApmLock(ApmPtr pApm); @@ -161,12 +161,8 @@ static const char *xaaSymbols[] = { "XAADestroyInfoRec", "XAAGlyphScanlineFuncLSBFirst", "XAAInit", - "XAAQueryBestSize", "XAAReverseBitOrder", - "XAARestoreCursor", - "XAAScreenIndex", "XAAStippleScanlineFuncMSBFirst", - "XAAWarpCursor", NULL }; @@ -177,12 +173,14 @@ static const char *ramdacSymbols[] = { NULL }; +#ifdef XFree86LOADER static const char *vbeSymbols[] = { "VBEInit", "vbeDoEDID", "vbeFree", NULL }; +#endif static const char *ddcSymbols[] = { "xf86DoEDID_DDC1", @@ -202,11 +200,13 @@ static const char *shadowSymbols[] = { NULL }; +#ifdef XFree86LOADER static const char *miscfbSymbols[] = { "xf1bppScreenInit", "xf4bppScreenInit", NULL }; +#endif static const char *fbSymbols[] = { "fbPictureInit", @@ -471,7 +471,7 @@ static int * GetAccelPitchValues(ScrnInfoPtr pScrn) { int *linePitches = NULL; - int linep[] = {640, 800, 1024, 1152, 1280, 1600, 0}; + int linep[] = {640, 800, 1024, 1152, 1280, 0}; if (sizeof linep > 0) { linePitches = (int *)xnfalloc(sizeof linep); @@ -1076,12 +1076,12 @@ ApmPreInit(ScrnInfoPtr pScrn, int flags) if (pApm->NoAccel) { /* * XXX Assuming min pitch 256, max 2048 - * XXX Assuming min height 128, max 2048 + * XXX Assuming min height 128, max 1024 (changed EE) */ i = xf86ValidateModes(pScrn, pScrn->monitor->Modes, pScrn->display->modes, clockRanges, NULL, 256, 2048, - pScrn->bitsPerPixel, 128, 2048, + pScrn->bitsPerPixel, 128, 1024, pScrn->display->virtualX, pScrn->display->virtualY, pApm->FbMapSize, @@ -1093,7 +1093,7 @@ ApmPreInit(ScrnInfoPtr pScrn, int flags) i = xf86ValidateModes(pScrn, pScrn->monitor->Modes, pScrn->display->modes, clockRanges, GetAccelPitchValues(pScrn), 0, 0, - pScrn->bitsPerPixel, 128, 2048, + pScrn->bitsPerPixel, 128, 1024, pScrn->display->virtualX, pScrn->display->virtualY, pApm->FbMapSize, @@ -1431,7 +1431,9 @@ comp_lmn(ApmPtr pApm, long clock) double fref; double fvco_goal; double k, c; - + double fout_best = 0; + unsigned int best = 0; + if (pApm->Chipset >= AT3D) fmax = 370000.0; else @@ -1449,7 +1451,7 @@ comp_lmn(ApmPtr pApm, long clock) fout = ((double)(n + 1) * fref)/((double)(m + 1) * (1 << l)); fvco_goal = (double)clock * (double)(1 << l); fvco = fout * (double)(1 << l); - if (!WITHIN(fvco, 0.995*fvco_goal, 1.005*fvco_goal)) + if (!WITHIN(fvco, 0.99*fvco_goal, 1.01*fvco_goal)) continue; if (!WITHIN(fvco, fmin, fmax)) continue; @@ -1458,6 +1460,16 @@ comp_lmn(ApmPtr pApm, long clock) if (!WITHIN(fref / (double)(m+1), 300.0, 300000.0)) continue; + if (fout_best != 0) { + double diff_new = clock - fout; + double diff_old = clock - best; + diff_new = diff_new < 0 ? -diff_new : diff_new; + diff_old = diff_old < 0 ? -diff_old : diff_old; + if (diff_new > diff_old) + continue; + } + fout_best = fout; + /* The following formula was empirically derived by matching a number of fvco values with acceptable values of f. @@ -1514,11 +1526,15 @@ comp_lmn(ApmPtr pApm, long clock) if (f > 7) f = 7; if (f < 0) f = 0; } - - return (n << 16) | (m << 8) | (l << 2) | (f << 4); + + best = (n << 16) | (m << 8) | (l << 2) | (f << 4); } } } + + if (fout_best != 0) + return best; + xf86DrvMsg(pApm->scrnIndex, X_PROBED, "Cannot find register values for clock %6.2f MHz. " "Please use a (slightly) different clock.\n", @@ -1724,24 +1740,26 @@ ApmRestore(ScrnInfoPtr pScrn, vgaRegPtr vgaReg, ApmRegPtr ApmReg) ApmWriteCrtc(0x19, ApmReg->CRT[0x19]); ApmWriteCrtc(0x1A, ApmReg->CRT[0x1A]); ApmWriteCrtc(0x1B, ApmReg->CRT[0x1B]); - ApmWriteCrtc(0x1C, ApmReg->CRT[0x1C]); ApmWriteCrtc(0x1D, ApmReg->CRT[0x1D]); ApmWriteCrtc(0x1E, ApmReg->CRT[0x1E]); /* RAMDAC registers. */ WRXL(0xE8, ApmReg->EX[XRE8]); + WRXL(0xEC, ApmReg->EX[XREC] & ~(1 << 7)); WRXL(0xEC, ApmReg->EX[XREC] | (1 << 7)); /* Do a PLL resync */ /* Color correction */ WRXL(0xE0, ApmReg->EX[XRE0]); - WRXB(0x80, ApmReg->EX[XR80]); - /* * This function handles restoring the generic VGA registers. */ vgaHWRestore(pScrn, vgaReg, VGA_SR_MODE | VGA_SR_CMAP); + + /* set these after setting the default VGA registers */ + ApmWriteCrtc(0x1C, ApmReg->CRT[0x1C]); + WRXB(0x80, ApmReg->EX[XR80]); } else { /* Set aperture index to 0. */ @@ -1983,6 +2001,13 @@ ApmScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) } } + /* + * Initialize the acceleration interface. + */ + if (!pApm->NoAccel) { + ApmAccelInit(pScreen); /* set up XAA interface */ + } + miInitializeBackingStore(pScreen); xf86SetBackingStore(pScreen); xf86SetSilkenMouse(pScreen); @@ -1997,12 +2022,6 @@ ApmScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) "Hardware cursor initialization failed\n"); } - /* - * Initialize the acceleration interface. - */ - if (!pApm->NoAccel) { - ApmAccelInit(pScreen); /* set up XAA interface */ - } /* Initialise default colourmap */ if (!miCreateDefColormap(pScreen)) @@ -2233,9 +2252,6 @@ ApmCloseScreen(int scrnIndex, ScreenPtr pScreen) pApm->CursorInfoRec = NULL; if (pApm->DGAModes) xfree(pApm->DGAModes); - if (pApm->I2CPtr) - xf86DestroyI2CBusRec(pApm->I2CPtr, TRUE, TRUE); - pApm->I2CPtr = NULL; if (pApm->adaptor) xfree(pApm->adaptor); @@ -2261,7 +2277,7 @@ ApmFreeScreen(int scrnIndex, int flags) /* Checks if a mode is suitable for the selected chipset. */ /* Optional */ -static int +static ModeStatus ApmValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose, int flags) { if (mode->Flags & V_INTERLACE) diff --git a/src/apm_funcs.c b/src/apm_funcs.c index 71f0fe8..2a0e6a6 100644 --- a/src/apm_funcs.c +++ b/src/apm_funcs.c @@ -1,4 +1,4 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/apm/apm_funcs.c,v 1.17 2002/05/07 12:53:49 alanh Exp $ */ +/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/apm/apm_funcs.c,v 1.19 2003/11/03 05:11:04 tsi Exp $ */ #define FASTER #ifndef PSZ @@ -38,7 +38,7 @@ # define A(s) Apm##s # endif #endif -#define DPRINTNAME(s) do { xf86DrvMsgVerb(pScrn->pScreen->myNum, X_NOTICE, 4, "Apm" #s APM_SUFF_24 APM_SUFF_IOP "\n"); } while (0) +#define DPRINTNAME(s) do { xf86DrvMsgVerb(pScrn->pScreen->myNum, X_NOTICE, 6, "Apm" #s APM_SUFF_24 APM_SUFF_IOP "\n"); } while (0) #if PSZ == 24 #undef SETSOURCEXY @@ -1364,7 +1364,7 @@ A(FillImageWriteRects)(ScrnInfoPtr pScrn, int rop, unsigned int planemask, PixmapPtr pPix) { XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn); - int x, y, phaseY, phaseX, phaseXB, height, width, blit_w; + int x, y, phaseY, phaseX, height, width, blit_w; int pHeight = pPix->drawable.height; int pWidth = pPix->drawable.width; int depth = pPix->drawable.depth; @@ -1404,7 +1404,6 @@ A(FillImageWriteRects)(ScrnInfoPtr pScrn, int rop, unsigned int planemask, if(!width) break; x += blit_w; phaseX = (phaseX + blit_w) % pWidth; - phaseXB = phaseX * pPix->drawable.bitsPerPixel / 8; } pBox++; } diff --git a/src/apm_video.c b/src/apm_video.c index 4f57808..5a75be0 100644 --- a/src/apm_video.c +++ b/src/apm_video.c @@ -1,17 +1,13 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/apm/apm_video.c,v 1.9 2001/06/15 21:22:45 dawes Exp $ */ +/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/apm/apm_video.c,v 1.12 2003/11/10 18:22:17 tsi Exp $ */ #if PSZ != 24 #include "dixstruct.h" +#include "fourcc.h" /* * Ported from mga_video.c by Loïc Grenié */ -#ifndef XvExtension -void A(InitVideo)(ScreenPtr pScreen) {} -void A(ResetVideo)(ScrnInfoPtr pScrn) {} -#else - #ifndef OFF_DELAY #define OFF_DELAY 200 #endif @@ -120,7 +116,7 @@ static XF86AttributeRec Attributes[NUM_ATTRIBUTES] = {XvSettable | XvGettable, 0, 255, "XV_CONTRAST"} }; -#define NUM_IMAGES 8 +#define NUM_IMAGES 9 typedef char c8; static XF86ImageRec Images[NUM_IMAGES] = @@ -176,6 +172,7 @@ static XF86ImageRec Images[NUM_IMAGES] = 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, XvTopToBottom }, + XVIMAGE_YUY2, { 0x59595959, XvYUV, @@ -343,8 +340,8 @@ A(SetupImageVideo)(ScreenPtr pScreen) pPriv[1].contrast = 128; /* gotta uninit this someplace */ - REGION_INIT(pScreen, &pPriv->clip, NullBox, 0); - REGION_INIT(pScreen, &(pPriv + 1)->clip, NullBox, 0); + REGION_NULL(pScreen, &pPriv->clip); + REGION_NULL(pScreen, &(pPriv + 1)->clip); pApm->adaptor = adapt; @@ -483,43 +480,6 @@ ApmQueryBestSize(ScrnInfoPtr pScrn, Bool motion, short vid_w, short vid_h, *p_w = drw_w & round; *p_h = drw_h & round; } - -static void -ApmCopyData(unsigned char *src, unsigned char *dst, int srcPitch, int dstPitch, - int h, int w) -{ - w <<= 1; - while(h--) { - memcpy(dst, src, w); - src += srcPitch; - dst += dstPitch; - } -} - -static void -ApmCopyMungedData(unsigned char *src1, unsigned char *src2, - unsigned char *src3, unsigned char *dst1, - int srcPitch, int srcPitch2, int dstPitch, int h, int w) -{ - CARD32 *dst = (CARD32*)dst1; - int i, j; - - dstPitch >>= 2; - w >>= 1; - - for(j = 0; j < h; j++) { - for(i = 0; i < w; i++) { - dst[i] = src1[i << 1] | (src1[(i << 1) + 1] << 16) | - (src2[i] << 8) | (src3[i] << 24); - } - dst += dstPitch; - src1 += srcPitch; - if(j & 1) { - src2 += srcPitch2; - src3 += srcPitch2; - } - } -} #endif static void A(XvMoveCB)(FBAreaPtr area1, FBAreaPtr area2) @@ -548,6 +508,7 @@ static int A(ReputImage)(ScrnInfoPtr pScrn, short drw_x, short drw_y, RegionPtr clipBoxes, pointer pdata) { + ScreenPtr pScreen = pScrn->pScreen; APMDECL(pScrn); ApmPortPrivPtr pPriv = pdata, pPriv0, pPriv1; register int fx, fy; @@ -576,7 +537,7 @@ A(ReputImage)(ScrnInfoPtr pScrn, short drw_x, short drw_y, reg0 = &pPriv0->clip; bzero(&Union, sizeof Union); REGION_EMPTY(pScreen, &Union); - REGION_INIT(pScreen, &Union, NullBox, 0); + REGION_NULL(pScreen, &Union); REGION_UNION(pScreen, &Union, reg0, &pPriv1->clip); nrects = REGION_NUM_RECTS(&Union); rects = REGION_RECTS(&Union); @@ -868,9 +829,10 @@ A(PutImage)(ScrnInfoPtr pScrn, short src_x, short src_y, offset2 += tmp; offset3 += tmp; nlines = ((((y2 + 0xffff) >> 16) + 1) & ~1) - top; - ApmCopyMungedData(buf + (top * srcPitch) + (left >> 1), - buf + offset2, buf + offset3, dst_start, - srcPitch, srcPitch2, dstPitch, nlines, npixels); + xf86XVCopyYUV12ToPacked(buf + (top * srcPitch) + (left >> 1), + buf + offset2, buf + offset3, dst_start, + srcPitch, srcPitch2, dstPitch, + nlines, npixels); break; default: if (id == 0x32335652) @@ -880,7 +842,8 @@ A(PutImage)(ScrnInfoPtr pScrn, short src_x, short src_y, buf += (top * srcPitch) + left; nlines = ((y2 + 0xffff) >> 16) - top; if (offscreen) - ApmCopyData(buf, dst_start, srcPitch, dstPitch, nlines, npixels); + xf86XVCopyPacked(buf, dst_start, srcPitch, dstPitch, + nlines, npixels); break; } } @@ -966,6 +929,7 @@ ApmQueryImageAttributes(ScrnInfoPtr pScrn, int id, case 0x59565955: case 0x55595659: case 0x59555956: + case 0x32595559: size = *w << 1; goto common; case 0x59595959: @@ -982,5 +946,3 @@ common: } #endif #endif -#endif - |