Index: configure.ac =================================================================== --- configure.ac (revision 487) +++ configure.ac (revision 553) @@ -77,7 +77,15 @@ # Checks for header files. AC_HEADER_STDC +AC_CHECK_HEADER(xf86Modes.h,[XMODES=yes],[XMODES=no],[#include "xorg-server.h"]) +AC_CHECK_DECL(XSERVER_LIBPCIACCESS, + [XSERVER_LIBPCIACCESS=yes],[XSERVER_LIBPCIACCESS=no], + [#include "xorg/xorg-server.h"]) +if test x$XSERVER_LIBPCIACCESS = xyes; then + PKG_CHECK_MODULES([PCIACCESS], [pciaccess >= 0.8.0]) +fi + if test "$DRI" != no; then AC_CHECK_FILE([${sdkdir}/dri.h], [have_dri_h="yes"], [have_dri_h="no"]) @@ -129,16 +137,12 @@ [have_xf86Module_h="yes"], [have_xf86Module_h="no"]) # Check the ABI_VIDEODRV_VERSION -SAVE_CPPFLAGS="$CPPFLAGS" -CPPFLAGS="$CPPFLAGS $XORG_CFLAGS" +SAVE_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS $XORG_CFLAGS" if test "x$have_xf86Module_h" = xyes; then AC_MSG_CHECKING([whether to use old Xv ABI]) AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[ -#include "xf86Module.h" -#if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 1 -#error Old Xv ABI -#endif ]])], [OLD_XVABI=no], [OLD_XVABI=yes]) @@ -147,7 +151,7 @@ echo -n "xf86Module.h not found, " fi -CPPFLAGS="$SAVE_CPPFLAGS" +CFLAGS="$SAVE_CFLAGS" if test "x$OLD_XVABI" = xyes; then echo "yes." @@ -156,6 +160,11 @@ AC_DEFINE(USE_NEW_XVABI, 1, [Use new Xv ABI (7.1RC1+)]) fi +AM_CONDITIONAL(XSERVER_LIBPCIACCESS, test x$XSERVER_LIBPCIACCESS = xyes) +if test "$XSERVER_LIBPCIACCESS" = yes; then + AC_DEFINE(XSERVER_LIBPCIACCESS,1,[Enable libpciaccess]) +fi + AM_CONDITIONAL(DEBUG, test x$DEBUG = xyes) if test "$DEBUG" = yes; then AC_DEFINE(HAVE_DEBUG,1,[Enable debug support]) Index: ChangeLog =================================================================== --- ChangeLog (revision 487) +++ ChangeLog (revision 553) @@ -1,3 +1,52 @@ +2008-03-11 Xavier Bachelot + + * configure.ac: + * src/via.h: + * src/via_dri.c: (VIADRIIrqInit), (VIADRIScreenInit): + * src/via_driver.c: (via_pci_device), (via_host_bridge), + (viaPciDeviceVga), (if), (switch): + * src/via_driver.h: + * src/via_id.c: (ViaCheckCardId): + + Merge changes from pciaccess branch. + +2008-02-19 Benno Schulenberg + + * src/via_driver.c: (VIAPreInit): + + Dealing with the NoAccel option before the Rotate option, since + the latter overrides the first. + +2008-01-28 Benno Schulenberg + + * src/Makefile.am: + + Recreating svnversion.h only when a source file has changed. + +2008-01-18 Benno Schulenberg + + * src/via_dri.c: (VIAInitVisualConfigs): + + Condensing an unneeded code duplication. + +2008-01-11 Benno Schulenberg + + * src/openchrome.man: + * src/via_driver.c: (VIASetupDefaultOptions), (VIAPreInit): + + Removing the redundant HWCursor option. + +2008-01-10 Benno Schulenberg + + * src/openchrome.man: Tweaking the text, clarifying the effect + of an option, giving the default value. + +2008-01-08 Benno Schulenberg + + * src/via_accel.c: (viaBitExpandHelper), (viaPixelARGB8888): + + Moving a little more computation into the helper function. + 2007-10-29 Benno Schulenberg * src/via_driver.c: (VIAPreInit): Index: src/via_3d.c =================================================================== --- src/via_3d.c (revision 487) +++ src/via_3d.c (revision 553) @@ -1,5 +1,5 @@ /* - * Copyright 2006 Thomas Hellstrom. All Rights Reserved. + * Copyright 2006 Thomas Hellström. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -108,7 +108,7 @@ Via3DFormat *fm = via3DFormats + VIA_FMT_HASH(format); if (fm->pictFormat != format) - return FALSE; + return FALSE; return fm->dstSupported; } @@ -118,14 +118,14 @@ Via3DFormat *fm = via3DFormats + VIA_FMT_HASH(format); if (fm->pictFormat != format) - return FALSE; + return FALSE; return fm->texSupported; } static void viaSet3DDestination(Via3DState * v3d, CARD32 offset, CARD32 pitch, int format) { - v3d->drawingDirty = TRUE; /* Affects planemask format. */ + v3d->drawingDirty = TRUE; /* Affects planemask format. */ v3d->destDirty = TRUE; v3d->destOffset = offset; v3d->destPitch = pitch; @@ -135,7 +135,7 @@ static void viaSet3DDrawing(Via3DState * v3d, int rop, - CARD32 planeMask, CARD32 solidColor, CARD32 solidAlpha) + CARD32 planeMask, CARD32 solidColor, CARD32 solidAlpha) { v3d->drawingDirty = TRUE; v3d->rop = rop; @@ -146,7 +146,7 @@ static void viaSet3DFlags(Via3DState * v3d, int numTextures, - Bool writeAlpha, Bool writeColor, Bool blend) + Bool writeAlpha, Bool writeColor, Bool blend) { v3d->enableDirty = TRUE; v3d->blendDirty = TRUE; @@ -162,66 +162,66 @@ *shift = 0; while (val > (1 << *shift)) - (*shift)++; + (*shift)++; return (val == (1 << *shift)); } static Bool viaSet3DTexture(Via3DState * v3d, int tex, CARD32 offset, - CARD32 pitch, Bool npot, CARD32 width, CARD32 height, int format, - ViaTextureModes sMode, ViaTextureModes tMode, - ViaTexBlendingModes blendingMode, Bool agpTexture) + CARD32 pitch, Bool npot, CARD32 width, CARD32 height, + int format, ViaTextureModes sMode, ViaTextureModes tMode, + ViaTexBlendingModes blendingMode, Bool agpTexture) { ViaTextureUnit *vTex = v3d->tex + tex; vTex->textureLevel0Offset = offset; vTex->npot = npot; if (!viaOrder(pitch, &vTex->textureLevel0Exp) && !vTex->npot) - return FALSE; + return FALSE; vTex->textureLevel0Pitch = pitch; if (!viaOrder(width, &vTex->textureLevel0WExp)) - return FALSE; + return FALSE; if (!viaOrder(height, &vTex->textureLevel0HExp)) - return FALSE; + return FALSE; if (pitch <= 4) { - ErrorF("Warning! texture pitch is leq 4\n"); + ErrorF("Warning: texture pitch <= 4 !\n"); } vTex->textureFormat = via3DTexFormat(format); switch (blendingMode) { - case via_src: - vTex->texCsat = (0x01 << 23) | (0x10 << 14) | (0x03 << 7) | 0x00; - vTex->texAsat = - (0x0B << 14) | ((PICT_FORMAT_A(format) ? 0x04 : 0x02) << 7) | - 0x03; - vTex->texRCa = 0x00000000; - vTex->texRAa = 0x00000000; - vTex->texBColDirty = TRUE; - break; - case via_src_onepix_mask: - vTex->texCsat = (0x01 << 23) | (0x09 << 14) | (0x03 << 7) | 0x00; - vTex->texAsat = - (0x03 << 14) | ((PICT_FORMAT_A(format) ? 0x04 : 0x02) << 7) | - 0x03; - break; - case via_src_onepix_comp_mask: - vTex->texCsat = (0x01 << 23) | (0x09 << 14) | (0x03 << 7) | 0x00; - vTex->texAsat = - (0x03 << 14) | ((PICT_FORMAT_A(format) ? 0x04 : 0x02) << 7) | - 0x03; - break; - case via_mask: - vTex->texCsat = (0x01 << 23) | (0x07 << 14) | (0x04 << 7) | 0x00; - vTex->texAsat = (0x01 << 23) | (0x04 << 14) | (0x02 << 7) | 0x03; - break; - case via_comp_mask: - vTex->texCsat = (0x01 << 23) | (0x03 << 14) | (0x04 << 7) | 0x00; - vTex->texAsat = (0x01 << 23) | (0x04 << 14) | (0x02 << 7) | 0x03; - break; - default: - return FALSE; + case via_src: + vTex->texCsat = (0x01 << 23) | (0x10 << 14) | (0x03 << 7) | 0x00; + vTex->texAsat = ((0x0B << 14) + | ((PICT_FORMAT_A(format) ? 0x04 : 0x02) << 7) + | 0x03); + vTex->texRCa = 0x00000000; + vTex->texRAa = 0x00000000; + vTex->texBColDirty = TRUE; + break; + case via_src_onepix_mask: + vTex->texCsat = (0x01 << 23) | (0x09 << 14) | (0x03 << 7) | 0x00; + vTex->texAsat = ((0x03 << 14) + | ((PICT_FORMAT_A(format) ? 0x04 : 0x02) << 7) + | 0x03); + break; + case via_src_onepix_comp_mask: + vTex->texCsat = (0x01 << 23) | (0x09 << 14) | (0x03 << 7) | 0x00; + vTex->texAsat = ((0x03 << 14) + | ((PICT_FORMAT_A(format) ? 0x04 : 0x02) << 7) + | 0x03); + break; + case via_mask: + vTex->texCsat = (0x01 << 23) | (0x07 << 14) | (0x04 << 7) | 0x00; + vTex->texAsat = (0x01 << 23) | (0x04 << 14) | (0x02 << 7) | 0x03; + break; + case via_comp_mask: + vTex->texCsat = (0x01 << 23) | (0x03 << 14) | (0x04 << 7) | 0x00; + vTex->texAsat = (0x01 << 23) | (0x04 << 14) | (0x02 << 7) | 0x03; + break; + default: + return FALSE; } vTex->textureDirty = TRUE; @@ -240,18 +240,18 @@ vTex->texRAa = (color >> 8) & 0x00FF0000; if (component) { - vTex->texRCa = (color & 0x00FFFFFF); + vTex->texRCa = (color & 0x00FFFFFF); } else { - alpha = color >> 24; - vTex->texRCa = alpha | (alpha << 8) | (alpha << 16) | (alpha << 24); + alpha = color >> 24; + vTex->texRCa = alpha | (alpha << 8) | (alpha << 16) | (alpha << 24); } vTex->texBColDirty = TRUE; } /* - * Check if compositing operator is supported and return corresponding register setting. + * Check if the compositing operator is supported and + * return the corresponding register setting. */ - static void viaSet3DCompositeOperator(Via3DState * v3d, CARD8 op) { @@ -259,10 +259,10 @@ v3d->blendDirty = TRUE; if (v3d && vOp->supported) { - v3d->blendCol0 = vOp->col0 << 4; - v3d->blendCol1 = vOp->col1 << 2; - v3d->blendAl0 = vOp->al0 << 4; - v3d->blendAl1 = vOp->al1 << 2; + v3d->blendCol0 = vOp->col0 << 4; + v3d->blendCol1 = vOp->col1 << 2; + v3d->blendAl0 = vOp->al0 << 4; + v3d->blendAl1 = vOp->al1 << 2; } } @@ -274,7 +274,7 @@ static void via3DEmitQuad(Via3DState * v3d, ViaCommandBuffer * cb, int dstX, int dstY, - int src0X, int src0Y, int src1X, int src1Y, int w, int h) + int src0X, int src0Y, int src1X, int src1Y, int w, int h) { CARD32 acmd; float dx1, dx2, dy1, dy2, sx1[2], sx2[2], sy1[2], sy2[2], wf; @@ -289,21 +289,21 @@ dy2 = dstY + h; if (numTex) { - sx1[0] = src0X; - sx1[1] = src1X; - sy1[0] = src0Y; - sy1[1] = src1Y; - for (i = 0; i < numTex; ++i) { - vTex = v3d->tex + i; - scalex = 1. / (double)((1 << vTex->textureLevel0WExp)); - scaley = 1. / (double)((1 << vTex->textureLevel0HExp)); - sx2[i] = sx1[i] + w; - sy2[i] = sy1[i] + h; - sx1[i] *= scalex; - sy1[i] *= scaley; - sx2[i] *= scalex; - sy2[i] *= scaley; - } + sx1[0] = src0X; + sx1[1] = src1X; + sy1[0] = src0Y; + sy1[1] = src1Y; + for (i = 0; i < numTex; ++i) { + vTex = v3d->tex + i; + scalex = 1. / (double)((1 << vTex->textureLevel0WExp)); + scaley = 1. / (double)((1 << vTex->textureLevel0HExp)); + sx2[i] = sx1[i] + w; + sy2[i] = sy1[i] + h; + sx1[i] *= scalex; + sy1[i] *= scaley; + sx2[i] *= scalex; + sy2[i] *= scaley; + } } wf = 0.05; @@ -318,7 +318,7 @@ BEGIN_H2(HC_ParaType_CmdVdata, 22 + numTex * 6); acmd = ((1 << 14) | (1 << 13) | (1 << 11)); if (numTex) - acmd |= ((1 << 7) | (1 << 8)); + acmd |= ((1 << 7) | (1 << 8)); OUT_RING_SubA(0xEC, acmd); acmd = 2 << 16; @@ -328,53 +328,53 @@ OUT_RING(*((CARD32 *) (&dy1))); OUT_RING(*((CARD32 *) (&wf))); for (i = 0; i < numTex; ++i) { - OUT_RING(*((CARD32 *) (sx1 + i))); - OUT_RING(*((CARD32 *) (sy1 + i))); + OUT_RING(*((CARD32 *) (sx1 + i))); + OUT_RING(*((CARD32 *) (sy1 + i))); } OUT_RING(*((CARD32 *) (&dx2))); OUT_RING(*((CARD32 *) (&dy1))); OUT_RING(*((CARD32 *) (&wf))); for (i = 0; i < numTex; ++i) { - OUT_RING(*((CARD32 *) (sx2 + i))); - OUT_RING(*((CARD32 *) (sy1 + i))); + OUT_RING(*((CARD32 *) (sx2 + i))); + OUT_RING(*((CARD32 *) (sy1 + i))); } OUT_RING(*((CARD32 *) (&dx1))); OUT_RING(*((CARD32 *) (&dy2))); OUT_RING(*((CARD32 *) (&wf))); for (i = 0; i < numTex; ++i) { - OUT_RING(*((CARD32 *) (sx1 + i))); - OUT_RING(*((CARD32 *) (sy2 + i))); + OUT_RING(*((CARD32 *) (sx1 + i))); + OUT_RING(*((CARD32 *) (sy2 + i))); } OUT_RING(*((CARD32 *) (&dx1))); OUT_RING(*((CARD32 *) (&dy2))); OUT_RING(*((CARD32 *) (&wf))); for (i = 0; i < numTex; ++i) { - OUT_RING(*((CARD32 *) (sx1 + i))); - OUT_RING(*((CARD32 *) (sy2 + i))); + OUT_RING(*((CARD32 *) (sx1 + i))); + OUT_RING(*((CARD32 *) (sy2 + i))); } OUT_RING(*((CARD32 *) (&dx2))); OUT_RING(*((CARD32 *) (&dy1))); OUT_RING(*((CARD32 *) (&wf))); for (i = 0; i < numTex; ++i) { - OUT_RING(*((CARD32 *) (sx2 + i))); - OUT_RING(*((CARD32 *) (sy1 + i))); + OUT_RING(*((CARD32 *) (sx2 + i))); + OUT_RING(*((CARD32 *) (sy1 + i))); } OUT_RING(*((CARD32 *) (&dx2))); OUT_RING(*((CARD32 *) (&dy2))); OUT_RING(*((CARD32 *) (&wf))); for (i = 0; i < numTex; ++i) { - OUT_RING(*((CARD32 *) (sx2 + i))); - OUT_RING(*((CARD32 *) (sy2 + i))); + OUT_RING(*((CARD32 *) (sx2 + i))); + OUT_RING(*((CARD32 *) (sy2 + i))); } OUT_RING_SubA(0xEE, - acmd | HC_HPLEND_MASK | HC_HPMValidN_MASK | HC_HE3Fire_MASK); + acmd | HC_HPLEND_MASK | HC_HPMValidN_MASK | HC_HE3Fire_MASK); OUT_RING_SubA(0xEE, - acmd | HC_HPLEND_MASK | HC_HPMValidN_MASK | HC_HE3Fire_MASK); + acmd | HC_HPLEND_MASK | HC_HPMValidN_MASK | HC_HE3Fire_MASK); ADVANCE_RING; } @@ -391,133 +391,135 @@ */ if (forceUpload || v3d->destDirty) { - v3d->destDirty = FALSE; - BEGIN_H2(HC_ParaType_NotTex, 3); + v3d->destDirty = FALSE; + BEGIN_H2(HC_ParaType_NotTex, 3); - OUT_RING_SubA(HC_SubA_HDBBasL, v3d->destOffset & 0x00FFFFFF); - OUT_RING_SubA(HC_SubA_HDBBasH, v3d->destOffset >> 24); - OUT_RING_SubA(HC_SubA_HDBFM, v3d->destFormat | - (v3d->destPitch & HC_HDBPit_MASK) | HC_HDBLoc_Local); + OUT_RING_SubA(HC_SubA_HDBBasL, v3d->destOffset & 0x00FFFFFF); + OUT_RING_SubA(HC_SubA_HDBBasH, v3d->destOffset >> 24); + OUT_RING_SubA(HC_SubA_HDBFM, v3d->destFormat | + (v3d->destPitch & HC_HDBPit_MASK) | HC_HDBLoc_Local); } if (forceUpload || v3d->blendDirty) { - v3d->blendDirty = FALSE; - BEGIN_H2(HC_ParaType_NotTex, 6); - OUT_RING_SubA(HC_SubA_HABLRFCa, 0x00); - OUT_RING_SubA(HC_SubA_HABLRFCb, 0x00); - OUT_RING_SubA(HC_SubA_HABLCsat, v3d->blendCol0); - OUT_RING_SubA(HC_SubA_HABLCop, v3d->blendCol1); - OUT_RING_SubA(HC_SubA_HABLAsat, v3d->blendAl0); - OUT_RING_SubA(HC_SubA_HABLAop, v3d->blendAl1); + v3d->blendDirty = FALSE; + BEGIN_H2(HC_ParaType_NotTex, 6); + OUT_RING_SubA(HC_SubA_HABLRFCa, 0x00); + OUT_RING_SubA(HC_SubA_HABLRFCb, 0x00); + OUT_RING_SubA(HC_SubA_HABLCsat, v3d->blendCol0); + OUT_RING_SubA(HC_SubA_HABLCop, v3d->blendCol1); + OUT_RING_SubA(HC_SubA_HABLAsat, v3d->blendAl0); + OUT_RING_SubA(HC_SubA_HABLAop, v3d->blendAl1); } if (forceUpload || v3d->drawingDirty) { - CARD32 planeMaskLo, planeMaskHi; + CARD32 planeMaskLo, planeMaskHi; - v3d->drawingDirty = FALSE; - BEGIN_H2(HC_ParaType_NotTex, 4); + v3d->drawingDirty = FALSE; + BEGIN_H2(HC_ParaType_NotTex, 4); - /* - * Raster operation and Planemask. - */ + /* + * Raster operation and Planemask. + */ - if ( /* v3d->destDepth == 16 Bad Docs? */ FALSE) { - planeMaskLo = (v3d->planeMask & 0x000000FF) << 16; - planeMaskHi = (v3d->planeMask & 0x0000FF00) >> 8; - } else { - planeMaskLo = v3d->planeMask & 0x00FFFFFF; - planeMaskHi = v3d->planeMask >> 24; - } + if ( /* v3d->destDepth == 16 Bad Docs? */ FALSE) { + planeMaskLo = (v3d->planeMask & 0x000000FF) << 16; + planeMaskHi = (v3d->planeMask & 0x0000FF00) >> 8; + } else { + planeMaskLo = v3d->planeMask & 0x00FFFFFF; + planeMaskHi = v3d->planeMask >> 24; + } - OUT_RING_SubA(HC_SubA_HROP, ((v3d->rop & 0x0F) << 8) | planeMaskHi); - OUT_RING_SubA(HC_SubA_HFBBMSKL, planeMaskLo); + OUT_RING_SubA(HC_SubA_HROP, ((v3d->rop & 0x0F) << 8) | planeMaskHi); + OUT_RING_SubA(HC_SubA_HFBBMSKL, planeMaskLo); - /* - * Solid shading color and alpha. Pixel center at - * floating coordinates (X.5,Y.5). - */ + /* + * Solid shading color and alpha. Pixel center at + * floating coordinates (X.5,Y.5). + */ - OUT_RING_SubA(HC_SubA_HSolidCL, - (v3d->solidColor & 0x00FFFFFF) | (0 << 23)); - OUT_RING_SubA(HC_SubA_HPixGC, - ((v3d->solidColor & 0xFF000000) >> 16) | (0 << 23) | (v3d-> - solidAlpha & 0xFF)); + OUT_RING_SubA(HC_SubA_HSolidCL, + (v3d->solidColor & 0x00FFFFFF) | (0 << 23)); + OUT_RING_SubA(HC_SubA_HPixGC, + (((v3d->solidColor & 0xFF000000) >> 16) | (0 << 23) + | (v3d->solidAlpha & 0xFF))); } if (forceUpload || v3d->enableDirty) { - v3d->enableDirty = FALSE; - BEGIN_H2(HC_ParaType_NotTex, 1); + v3d->enableDirty = FALSE; + BEGIN_H2(HC_ParaType_NotTex, 1); - OUT_RING_SubA(HC_SubA_HEnable, - ((v3d->writeColor) ? HC_HenCW_MASK : 0) | - ((v3d->blend) ? HC_HenABL_MASK : 0) | - ((v3d->numTextures) ? HC_HenTXMP_MASK : 0) | - ((v3d->writeAlpha) ? HC_HenAW_MASK : 0)); + OUT_RING_SubA(HC_SubA_HEnable, + ((v3d->writeColor) ? HC_HenCW_MASK : 0) | + ((v3d->blend) ? HC_HenABL_MASK : 0) | + ((v3d->numTextures) ? HC_HenTXMP_MASK : 0) | + ((v3d->writeAlpha) ? HC_HenAW_MASK : 0)); - if (v3d->numTextures) { - BEGIN_H2((HC_ParaType_Tex | (HC_SubType_TexGeneral << 8)), 2); - OUT_RING_SubA(HC_SubA_HTXSMD, (0 << 7) | (0 << 6) | - (((v3d->numTextures - 1) & 0x1) << 3) | (0 << 1) | 1); - OUT_RING_SubA(HC_SubA_HTXSMD, (0 << 7) | (0 << 6) | - (((v3d->numTextures - 1) & 0x1) << 3) | (0 << 1) | 0); - } + if (v3d->numTextures) { + BEGIN_H2((HC_ParaType_Tex | (HC_SubType_TexGeneral << 8)), 2); + OUT_RING_SubA(HC_SubA_HTXSMD, (0 << 7) | (0 << 6) | + (((v3d->numTextures - 1) & 0x1) << 3) | (0 << 1) | 1); + OUT_RING_SubA(HC_SubA_HTXSMD, (0 << 7) | (0 << 6) | + (((v3d->numTextures - 1) & 0x1) << 3) | (0 << 1) | 0); + } } for (i = 0; i < v3d->numTextures; ++i) { - vTex = v3d->tex + i; + vTex = v3d->tex + i; - if (forceUpload || vTex->textureDirty) { - vTex->textureDirty = FALSE; + if (forceUpload || vTex->textureDirty) { + vTex->textureDirty = FALSE; - BEGIN_H2((HC_ParaType_Tex | - (((i == 0) ? HC_SubType_Tex0 : HC_SubType_Tex1) << 8)), - 13); + BEGIN_H2((HC_ParaType_Tex | + (((i == 0) ? HC_SubType_Tex0 : HC_SubType_Tex1) << 8)), + 13); - OUT_RING_SubA(HC_SubA_HTXnFM, (vTex->textureFormat | - (vTex->agpTexture ? HC_HTXnLoc_AGP : HC_HTXnLoc_Local))); - OUT_RING_SubA(HC_SubA_HTXnL0BasL, - vTex->textureLevel0Offset & 0x00FFFFFF); - OUT_RING_SubA(HC_SubA_HTXnL012BasH, - vTex->textureLevel0Offset >> 24); - if (vTex->npot) { - OUT_RING_SubA(HC_SubA_HTXnL0Pit, - (vTex->textureLevel0Pitch & HC_HTXnLnPit_MASK) | - HC_HTXnEnPit_MASK); - } else { - OUT_RING_SubA(HC_SubA_HTXnL0Pit, - vTex->textureLevel0Exp << HC_HTXnLnPitE_SHIFT); - } - OUT_RING_SubA(HC_SubA_HTXnL0_5WE, vTex->textureLevel0WExp); - OUT_RING_SubA(HC_SubA_HTXnL0_5HE, vTex->textureLevel0HExp); - OUT_RING_SubA(HC_SubA_HTXnL0OS, 0x00); - OUT_RING_SubA(HC_SubA_HTXnTB, 0x00); - OUT_RING_SubA(HC_SubA_HTXnMPMD, - (((unsigned)vTex->textureModesT) << 19) | (((unsigned)vTex-> - textureModesS) << 16)); + OUT_RING_SubA(HC_SubA_HTXnFM, (vTex->textureFormat | + (vTex-> + agpTexture ? HC_HTXnLoc_AGP : + HC_HTXnLoc_Local))); + OUT_RING_SubA(HC_SubA_HTXnL0BasL, + vTex->textureLevel0Offset & 0x00FFFFFF); + OUT_RING_SubA(HC_SubA_HTXnL012BasH, + vTex->textureLevel0Offset >> 24); + if (vTex->npot) { + OUT_RING_SubA(HC_SubA_HTXnL0Pit, + (vTex->textureLevel0Pitch & HC_HTXnLnPit_MASK) | + HC_HTXnEnPit_MASK); + } else { + OUT_RING_SubA(HC_SubA_HTXnL0Pit, + vTex->textureLevel0Exp << HC_HTXnLnPitE_SHIFT); + } + OUT_RING_SubA(HC_SubA_HTXnL0_5WE, vTex->textureLevel0WExp); + OUT_RING_SubA(HC_SubA_HTXnL0_5HE, vTex->textureLevel0HExp); + OUT_RING_SubA(HC_SubA_HTXnL0OS, 0x00); + OUT_RING_SubA(HC_SubA_HTXnTB, 0x00); + OUT_RING_SubA(HC_SubA_HTXnMPMD, + ((((unsigned)vTex->textureModesT) << 19) + | (((unsigned)vTex->textureModesS) << 16))); - OUT_RING_SubA(HC_SubA_HTXnTBLCsat, vTex->texCsat); - OUT_RING_SubA(HC_SubA_HTXnTBLCop, (0x00 << 22) | (0x00 << 19) | - (0x00 << 14) | (0x02 << 11) | - (0x00 << 7) | (0x03 << 3) | 0x02); - OUT_RING_SubA(HC_SubA_HTXnTBLAsat, vTex->texAsat); - OUT_RING_SubA(HC_SubA_HTXnTBLRFog, 0x00); - } + OUT_RING_SubA(HC_SubA_HTXnTBLCsat, vTex->texCsat); + OUT_RING_SubA(HC_SubA_HTXnTBLCop, (0x00 << 22) | (0x00 << 19) | + (0x00 << 14) | (0x02 << 11) | + (0x00 << 7) | (0x03 << 3) | 0x02); + OUT_RING_SubA(HC_SubA_HTXnTBLAsat, vTex->texAsat); + OUT_RING_SubA(HC_SubA_HTXnTBLRFog, 0x00); + } } for (i = 0; i < v3d->numTextures; ++i) { - vTex = v3d->tex + i; + vTex = v3d->tex + i; - if (forceUpload || vTex->texBColDirty) { - saveHas3dState = cb->has3dState; - vTex->texBColDirty = FALSE; - BEGIN_H2((HC_ParaType_Tex | - (((i == 0) ? HC_SubType_Tex0 : HC_SubType_Tex1) << 8)), - 2); - OUT_RING_SubA(HC_SubA_HTXnTBLRAa, vTex->texRAa); - OUT_RING_SubA(HC_SubA_HTXnTBLRCa, vTex->texRCa); - cb->has3dState = saveHas3dState; - } + if (forceUpload || vTex->texBColDirty) { + saveHas3dState = cb->has3dState; + vTex->texBColDirty = FALSE; + BEGIN_H2((HC_ParaType_Tex | + (((i == 0) ? HC_SubType_Tex0 : HC_SubType_Tex1) << 8)), + 2); + OUT_RING_SubA(HC_SubA_HTXnTBLRAa, vTex->texRAa); + OUT_RING_SubA(HC_SubA_HTXnTBLRCa, vTex->texRCa); + cb->has3dState = saveHas3dState; + } } } @@ -525,10 +527,9 @@ * Cliprect. Considered not important for the DRM 3D State, so restore the * has3dState flag afterwards. */ - static void via3DEmitClipRect(Via3DState * v3d, ViaCommandBuffer * cb, int x, int y, - int w, int h) + int w, int h) { Bool saveHas3dState; @@ -561,32 +562,32 @@ v3d->texSupported = via3DTexSupported; for (i = 0; i < 256; ++i) { - viaOperatorModes[i].supported = FALSE; + viaOperatorModes[i].supported = FALSE; } for (i = 0; i < VIA_NUM_3D_OPCODES; ++i) { - op = viaOperatorModes + viaOpCodes[i][0]; - op->supported = TRUE; - op->col0 = viaOpCodes[i][1]; - op->col1 = viaOpCodes[i][2]; - op->al0 = viaOpCodes[i][3]; - op->al1 = viaOpCodes[i][4]; + op = viaOperatorModes + viaOpCodes[i][0]; + op->supported = TRUE; + op->col0 = viaOpCodes[i][1]; + op->col1 = viaOpCodes[i][2]; + op->al0 = viaOpCodes[i][3]; + op->al1 = viaOpCodes[i][4]; } for (i = 0; i < 256; ++i) { - via3DFormats[i].pictFormat = 0x00; + via3DFormats[i].pictFormat = 0x00; } for (i = 0; i < VIA_NUM_3D_FORMATS; ++i) { - tmp = viaFormats[i][0]; - hash = VIA_FMT_HASH(tmp); - format = via3DFormats + hash; - if (format->pictFormat) { - ErrorF("BUG: Bad hash function\n"); - } - format->pictFormat = tmp; - format->dstSupported = (viaFormats[i][3] != 0x00); - format->texSupported = (viaFormats[i][4] != 0x00); - format->dstFormat = viaFormats[i][1]; - format->texFormat = viaFormats[i][2]; + tmp = viaFormats[i][0]; + hash = VIA_FMT_HASH(tmp); + format = via3DFormats + hash; + if (format->pictFormat) { + ErrorF("BUG: Bad hash function\n"); + } + format->pictFormat = tmp; + format->dstSupported = (viaFormats[i][3] != 0x00); + format->texSupported = (viaFormats[i][4] != 0x00); + format->dstFormat = viaFormats[i][1]; + format->texFormat = viaFormats[i][2]; } } Index: src/via_video.c =================================================================== --- src/via_video.c (revision 487) +++ src/via_video.c (revision 553) @@ -57,7 +57,7 @@ /* * D E F I N E */ -#define OFF_DELAY 200 /* milliseconds */ +#define OFF_DELAY 200 /* milliseconds */ #define FREE_DELAY 60000 #define PARAMSIZE 1024 #define SLICESIZE 65536 @@ -136,11 +136,11 @@ #define NUM_FORMATS_G 9 static XF86VideoFormatRec FormatsG[NUM_FORMATS_G] = { - {8, TrueColor}, /* Dithered */ - {8, PseudoColor}, /* Using .. */ + {8, TrueColor}, /* Dithered */ + {8, PseudoColor}, /* Using .. */ {8, StaticColor}, {8, GrayScale}, - {8, StaticGray}, /* .. TexelLUT */ + {8, StaticGray}, /* .. TexelLUT */ {16, TrueColor}, {24, TrueColor}, {16, DirectColor}, @@ -164,83 +164,83 @@ XVIMAGE_YUY2, XVIMAGE_YV12, { - /* - * Below, a dummy picture type that is used in XvPutImage only to do - * an overlay update. Introduced for the XvMC client lib. - * Defined to have a zero data size. - */ + /* + * Below, a dummy picture type that is used in XvPutImage only to do + * an overlay update. Introduced for the XvMC client lib. + * Defined to have a zero data size. + */ - FOURCC_XVMC, - XvYUV, - LSBFirst, - {'V', 'I', 'A', 0x00, - 0x00, 0x00, 0x00, 0x10, 0x80, 0x00, 0x00, 0xAA, 0x00, - 0x38, 0x9B, 0x71}, - 12, - XvPlanar, - 1, - 0, 0, 0, 0, - 8, 8, 8, - 1, 2, 2, - 1, 2, 2, - {'Y', 'V', 'U', - 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, 0}, - XvTopToBottom}, - { /* RGB 555 */ - FOURCC_RV15, - XvRGB, - LSBFirst, - {'R', 'V', '1', '5', - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00}, - 16, - XvPacked, - 1, - 15, 0x7C00, 0x03E0, 0x001F, - 0, 0, 0, - 0, 0, 0, - 0, 0, 0, - {'R', 'V', 'B', 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, 0}, - XvTopToBottom}, - { /* RGB 565 */ - FOURCC_RV16, - XvRGB, - LSBFirst, - {'R', 'V', '1', '6', - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00}, - 16, - XvPacked, - 1, - 16, 0xF800, 0x07E0, 0x001F, - 0, 0, 0, - 0, 0, 0, - 0, 0, 0, - {'R', 'V', 'B', 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, 0}, - XvTopToBottom}, - { /* RGB 888 */ - FOURCC_RV32, - XvRGB, - LSBFirst, - {'R', 'V', '3', '2', - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00}, - 32, - XvPacked, - 1, - 24, 0xff0000, 0x00ff00, 0x0000ff, - 0, 0, 0, - 0, 0, 0, - 0, 0, 0, - {'R', 'V', 'B', 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, 0}, - XvTopToBottom} + FOURCC_XVMC, + XvYUV, + LSBFirst, + { 'V', 'I', 'A', 0x00, + 0x00, 0x00, 0x00, 0x10, 0x80, 0x00, 0x00, 0xAA, 0x00, + 0x38, 0x9B, 0x71}, + 12, + XvPlanar, + 1, + 0, 0, 0, 0, + 8, 8, 8, + 1, 2, 2, + 1, 2, 2, + { 'Y', 'V', 'U', + 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, 0}, + XvTopToBottom}, + { /* RGB 555 */ + FOURCC_RV15, + XvRGB, + LSBFirst, + { 'R', 'V', '1', '5', + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00}, + 16, + XvPacked, + 1, + 15, 0x7C00, 0x03E0, 0x001F, + 0, 0, 0, + 0, 0, 0, + 0, 0, 0, + { 'R', 'V', 'B', 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, 0}, + XvTopToBottom}, + { /* RGB 565 */ + FOURCC_RV16, + XvRGB, + LSBFirst, + { 'R', 'V', '1', '6', + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00}, + 16, + XvPacked, + 1, + 16, 0xF800, 0x07E0, 0x001F, + 0, 0, 0, + 0, 0, 0, + 0, 0, 0, + { 'R', 'V', 'B', 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, 0}, + XvTopToBottom}, + { /* RGB 888 */ + FOURCC_RV32, + XvRGB, + LSBFirst, + { 'R', 'V', '3', '2', + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00}, + 32, + XvPacked, + 1, + 24, 0xff0000, 0x00ff00, 0x0000ff, + 0, 0, 0, + 0, 0, 0, + 0, 0, 0, + { 'R', 'V', 'B', 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, 0}, + XvTopToBottom} }; @@ -276,157 +276,157 @@ * to avoid numeric overflow */ if (pVia->ChipId != PCI_CHIP_VT3205 && - pVia->ChipId != PCI_CHIP_VT3204 && - pVia->ChipId != PCI_CHIP_VT3259 && - pVia->ChipId != PCI_CHIP_VT3314 && - pVia->ChipId != PCI_CHIP_VT3327 && - pVia->ChipId != PCI_CHIP_VT3336 && - pVia->ChipId != PCI_CHIP_VT3364 && - pVia->ChipId != PCI_CHIP_VT3324) { - CARD32 bandwidth = (mode->HDisplay >> 4) * (mode->VDisplay >> 5) * - pScrn->bitsPerPixel * mode->VRefresh; + pVia->ChipId != PCI_CHIP_VT3204 && + pVia->ChipId != PCI_CHIP_VT3259 && + pVia->ChipId != PCI_CHIP_VT3314 && + pVia->ChipId != PCI_CHIP_VT3327 && + pVia->ChipId != PCI_CHIP_VT3336 && + pVia->ChipId != PCI_CHIP_VT3364 && + pVia->ChipId != PCI_CHIP_VT3324) { + CARD32 bandwidth = (mode->HDisplay >> 4) * (mode->VDisplay >> 5) * + pScrn->bitsPerPixel * mode->VRefresh; - switch (pVia->MemClk) { - case VIA_MEM_SDR100: /* No overlay without DDR */ - case VIA_MEM_SDR133: - return FALSE; - case VIA_MEM_DDR200: - /* Basic limit for DDR200 is about this */ - if (bandwidth > 1800000) - return FALSE; - /* But we have constraints at higher than 800x600 */ - if (mode->HDisplay > 800) { - if (pScrn->bitsPerPixel != 8) - return FALSE; - if (mode->VDisplay > 768) - return FALSE; - if (mode->VRefresh > 60) - return FALSE; - } - return TRUE; - case 0: /* FIXME: Why does my CLE266 report 0? */ - case VIA_MEM_DDR266: - if (bandwidth > 7901250) - return FALSE; - return TRUE; - } - return FALSE; + switch (pVia->MemClk) { + case VIA_MEM_SDR100: /* No overlay without DDR */ + case VIA_MEM_SDR133: + return FALSE; + case VIA_MEM_DDR200: + /* Basic limit for DDR200 is about this */ + if (bandwidth > 1800000) + return FALSE; + /* But we have constraints at higher than 800x600 */ + if (mode->HDisplay > 800) { + if (pScrn->bitsPerPixel != 8) + return FALSE; + if (mode->VDisplay > 768) + return FALSE; + if (mode->VRefresh > 60) + return FALSE; + } + return TRUE; + case 0: /* FIXME: Why does my CLE266 report 0? */ + case VIA_MEM_DDR266: + if (bandwidth > 7901250) + return FALSE; + return TRUE; + } + return FALSE; } else { - VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; - unsigned width, height, refresh, dClock; - float mClock, memEfficiency, needBandWidth, totalBandWidth; - int bTV = 0; - - switch (pVia->MemClk) { - case VIA_MEM_SDR100: - mClock = 50; /*HW base on 128 bit */ - memEfficiency = (float)SINGLE_3205_100; - break; - case VIA_MEM_SDR133: - mClock = 66.5; - memEfficiency = (float)SINGLE_3205_100; - break; - case VIA_MEM_DDR200: - mClock = 100; - memEfficiency = (float)SINGLE_3205_100; - break; - case VIA_MEM_DDR266: - mClock = 133; - memEfficiency = (float)SINGLE_3205_133; - break; - case VIA_MEM_DDR333: - mClock = 166; - memEfficiency = (float)SINGLE_3205_133; - break; - case VIA_MEM_DDR400: - mClock = 200; - memEfficiency = (float)SINGLE_3205_133; - break; - case VIA_MEM_DDR533: - mClock = 266; - memEfficiency = (float)SINGLE_3205_133; - break; - case VIA_MEM_DDR667: - mClock = 333; - memEfficiency = (float)SINGLE_3205_133; - break; - default: - /*Unknow DRAM Type */ - DBG_DD(ErrorF("Unknow DRAM Type!\n")); - mClock = 166; - memEfficiency = (float)SINGLE_3205_133; - break; - } - - width = mode->HDisplay; - height = mode->VDisplay; - refresh = mode->VRefresh; - - /* - * FIXME: If VBE modes assume a high refresh (100) for now - */ - - if (pVia->pVbe) { - refresh = 100; + + VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; + unsigned width, height, refresh, dClock; + float mClock, memEfficiency, needBandWidth, totalBandWidth; + int bTV = 0; + + switch (pVia->MemClk) { + case VIA_MEM_SDR100: + mClock = 50; /*HW base on 128 bit */ + memEfficiency = (float)SINGLE_3205_100; + break; + case VIA_MEM_SDR133: + mClock = 66.5; + memEfficiency = (float)SINGLE_3205_100; + break; + case VIA_MEM_DDR200: + mClock = 100; + memEfficiency = (float)SINGLE_3205_100; + break; + case VIA_MEM_DDR266: + mClock = 133; + memEfficiency = (float)SINGLE_3205_133; + break; + case VIA_MEM_DDR333: + mClock = 166; + memEfficiency = (float)SINGLE_3205_133; + break; + case VIA_MEM_DDR400: + mClock = 200; + memEfficiency = (float)SINGLE_3205_133; + break; + case VIA_MEM_DDR533: + mClock = 266; + memEfficiency = (float)SINGLE_3205_133; + break; + case VIA_MEM_DDR667: + mClock = 333; + memEfficiency = (float)SINGLE_3205_133; + break; + default: + /*Unknow DRAM Type */ + DBG_DD(ErrorF("Unknow DRAM Type!\n")); + mClock = 166; + memEfficiency = (float)SINGLE_3205_133; + break; + } + + width = mode->HDisplay; + height = mode->VDisplay; + refresh = mode->VRefresh; + + /* + * FIXME: If VBE modes assume a high refresh (100) for now + */ + + if (pVia->pVbe) { + refresh = 100; if (pBIOSInfo->PanelActive) - refresh = 70; - if (pBIOSInfo->TVActive) - refresh = 60; - } else { + refresh = 70; + if (pBIOSInfo->TVActive) + refresh = 60; + } else { if (pBIOSInfo->PanelActive) { - width = pBIOSInfo->panelX; - height = pBIOSInfo->panelY; - if ((width == 1400) && (height == 1050)) { - width = 1280; - height = 1024; - refresh = 60; - } - } else if (pBIOSInfo->TVActive) { - bTV = 1; - } - } - if (bTV) { - - /* - * Approximative, VERY conservative formula in some cases. - * This formula and the one below are derived analyzing the - * tables present in VIA's own drivers. They may reject the over- - * lay in some cases where VIA's driver don't. - */ - - dClock = (width * height * 60) / 580000; - - } else { - - /* - * Approximative, slightly conservative formula. See above. - */ - - dClock = (width * height * refresh) / 680000; - } - - if (dClock) { - needBandWidth = - (float)(((pScrn->bitsPerPixel >> 3) + VIDEO_BPP) * dClock); - totalBandWidth = (float)(mClock * 16. * memEfficiency); - - DBG_DD(ErrorF(" via_video.c : cBitsPerPel= %d : \n", - pScrn->bitsPerPixel)); - DBG_DD(ErrorF(" via_video.c : Video_Bpp= %d : \n", VIDEO_BPP)); - DBG_DD(ErrorF(" via_video.c : refresh = %d : \n", refresh)); - DBG_DD(ErrorF(" via_video.c : dClock= %d : \n", dClock)); - DBG_DD(ErrorF(" via_video.c : mClk= %f : \n", mClock)); - DBG_DD(ErrorF(" via_video.c : memEfficiency= %f : \n", - memEfficiency)); - DBG_DD(ErrorF(" via_video.c : needBandwidth= %f : \n", - needBandWidth)); - DBG_DD(ErrorF(" via_video.c : totalBandwidth= %f : \n", - totalBandWidth)); - if (needBandWidth < totalBandWidth) - return TRUE; - } - return FALSE; + width = pBIOSInfo->panelX; + height = pBIOSInfo->panelY; + if ((width == 1400) && (height == 1050)) { + width = 1280; + height = 1024; + refresh = 60; + } + } else if (pBIOSInfo->TVActive) { + bTV = 1; + } + } + + if (bTV) { + + /* + * Approximative, VERY conservative formula in some cases. + * This formula and the one below are derived analyzing the + * tables present in VIA's own drivers. They may reject the over- + * lay in some cases where VIA's driver don't. + */ + dClock = (width * height * 60) / 580000; + + } else { + + /* + * Approximative, slightly conservative formula. See above. + */ + dClock = (width * height * refresh) / 680000; + } + + if (dClock) { + needBandWidth = + (float)(((pScrn->bitsPerPixel >> 3) + VIDEO_BPP) * dClock); + totalBandWidth = (float)(mClock * 16. * memEfficiency); + + DBG_DD(ErrorF(" via_video.c : cBitsPerPel= %d : \n", + pScrn->bitsPerPixel)); + DBG_DD(ErrorF(" via_video.c : Video_Bpp= %d : \n", VIDEO_BPP)); + DBG_DD(ErrorF(" via_video.c : refresh = %d : \n", refresh)); + DBG_DD(ErrorF(" via_video.c : dClock= %d : \n", dClock)); + DBG_DD(ErrorF(" via_video.c : mClk= %f : \n", mClock)); + DBG_DD(ErrorF(" via_video.c : memEfficiency= %f : \n", + memEfficiency)); + DBG_DD(ErrorF(" via_video.c : needBandwidth= %f : \n", + needBandWidth)); + DBG_DD(ErrorF(" via_video.c : totalBandwidth= %f : \n", + totalBandWidth)); + if (needBandWidth < totalBandWidth) + return TRUE; + } + return FALSE; } return FALSE; } @@ -443,15 +443,15 @@ viaXvError(ScrnInfoPtr pScrn, viaPortPrivPtr pPriv, XvError error) { if (error == xve_none) { - pPriv->xvErr = xve_none; - return; + pPriv->xvErr = xve_none; + return; } if (error == pPriv->xvErr) { - return; + return; } pPriv->xvErr = error; xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "[Xv] Port %d: %s\n", - pPriv->xv_portnum, viaXvErrMsg[error]); + pPriv->xv_portnum, viaXvErrMsg[error]); } static void @@ -522,25 +522,25 @@ */ for (i = 0; i < XV_ADAPT_NUM; ++i) { - curAdapt = viaAdaptPtr[i]; - if (curAdapt) { - if (curAdapt->pPortPrivates) { - if (curAdapt->pPortPrivates->ptr) { - numPorts = numAdaptPort[i]; - for (j = 0; j < numPorts; ++j) { - viaStopVideo(pScrn, - (viaPortPrivPtr) curAdapt->pPortPrivates->ptr + j, - TRUE); - } - xfree(curAdapt->pPortPrivates->ptr); - } - xfree(curAdapt->pPortPrivates); - } - xfree(curAdapt); - } + curAdapt = viaAdaptPtr[i]; + if (curAdapt) { + if (curAdapt->pPortPrivates) { + if (curAdapt->pPortPrivates->ptr) { + numPorts = numAdaptPort[i]; + for (j = 0; j < numPorts; ++j) { + viaStopVideo(pScrn, + (viaPortPrivPtr) curAdapt->pPortPrivates->ptr + j, + TRUE); + } + xfree(curAdapt->pPortPrivates->ptr); + } + xfree(curAdapt->pPortPrivates); + } + xfree(curAdapt); + } } if (allAdaptors) - xfree(allAdaptors); + xfree(allAdaptors); } void @@ -560,65 +560,65 @@ pVia->useDmaBlit = FALSE; #ifdef XF86DRI pVia->useDmaBlit = pVia->directRenderingEnabled && - ((pVia->Chipset == VIA_CLE266) || - (pVia->Chipset == VIA_KM400) || - (pVia->Chipset == VIA_K8M800) || - (pVia->Chipset == VIA_PM800) || + ((pVia->Chipset == VIA_CLE266) || + (pVia->Chipset == VIA_KM400) || + (pVia->Chipset == VIA_K8M800) || + (pVia->Chipset == VIA_PM800) || (pVia->Chipset == VIA_VM800) || - (pVia->Chipset == VIA_K8M890) || - (pVia->Chipset == VIA_P4M900) || - (pVia->Chipset == VIA_CX700) || - (pVia->Chipset == VIA_P4M890)); + (pVia->Chipset == VIA_K8M890) || + (pVia->Chipset == VIA_P4M900) || + (pVia->Chipset == VIA_CX700) || + (pVia->Chipset == VIA_P4M890)); if ((pVia->drmVerMajor < 2) || - ((pVia->drmVerMajor == 2) && (pVia->drmVerMinor < 9))) - pVia->useDmaBlit = FALSE; + ((pVia->drmVerMajor == 2) && (pVia->drmVerMinor < 9))) + pVia->useDmaBlit = FALSE; #endif pVia->useDmaBlit = pVia->useDmaBlit && pVia->dmaXV; if (pVia->useDmaBlit) - xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "[Xv] Using PCI DMA for Xv image transfer.\n"); + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "[Xv] Using PCI DMA for Xv image transfer.\n"); if (!viaFastVidCpy) - viaFastVidCpy = viaVidCopyInit("video", pScreen); + viaFastVidCpy = viaVidCopyInit("video", pScreen); if ((pVia->Chipset == VIA_CLE266) || (pVia->Chipset == VIA_KM400) || - (pVia->Chipset == VIA_K8M800) || (pVia->Chipset == VIA_PM800) || - (pVia->Chipset == VIA_VM800) || (pVia->Chipset == VIA_K8M890) || - (pVia->Chipset == VIA_P4M900) || (pVia->Chipset == VIA_CX700) || - (pVia->Chipset == VIA_P4M890)) { - num_new = viaSetupAdaptors(pScreen, &newAdaptors); - num_adaptors = xf86XVListGenericAdaptors(pScrn, &adaptors); + (pVia->Chipset == VIA_K8M800) || (pVia->Chipset == VIA_PM800) || + (pVia->Chipset == VIA_VM800) || (pVia->Chipset == VIA_K8M890) || + (pVia->Chipset == VIA_P4M900) || (pVia->Chipset == VIA_CX700) || + (pVia->Chipset == VIA_P4M890)) { + num_new = viaSetupAdaptors(pScreen, &newAdaptors); + num_adaptors = xf86XVListGenericAdaptors(pScrn, &adaptors); } else { - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "[Xv] Unsupported Chipset. X video functionality disabled.\n"); - num_adaptors = 0; + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, + "[Xv] Unsupported Chipset. X video functionality disabled.\n"); + num_adaptors = 0; } DBG_DD(ErrorF(" via_video.c : num_adaptors : %d\n", num_adaptors)); if (newAdaptors) { - allAdaptors = xalloc((num_adaptors + num_new) * - sizeof(XF86VideoAdaptorPtr *)); - if (allAdaptors) { - if (num_adaptors) - memcpy(allAdaptors, adaptors, - num_adaptors * sizeof(XF86VideoAdaptorPtr)); - memcpy(allAdaptors + num_adaptors, newAdaptors, - num_new * sizeof(XF86VideoAdaptorPtr)); - num_adaptors += num_new; - } + allAdaptors = xalloc((num_adaptors + num_new) * + sizeof(XF86VideoAdaptorPtr *)); + if (allAdaptors) { + if (num_adaptors) + memcpy(allAdaptors, adaptors, + num_adaptors * sizeof(XF86VideoAdaptorPtr)); + memcpy(allAdaptors + num_adaptors, newAdaptors, + num_new * sizeof(XF86VideoAdaptorPtr)); + num_adaptors += num_new; + } } if (num_adaptors) { - xf86XVScreenInit(pScreen, allAdaptors, num_adaptors); + xf86XVScreenInit(pScreen, allAdaptors, num_adaptors); #ifdef XF86DRI - ViaInitXVMC(pScreen); + ViaInitXVMC(pScreen); #endif - viaSetColorSpace(pVia, 0, 0, 0, 0, TRUE); - pVia->swov.panning_x = 0; - pVia->swov.panning_y = 0; - pVia->swov.oldPanningX = 0; - pVia->swov.oldPanningY = 0; + viaSetColorSpace(pVia, 0, 0, 0, 0, TRUE); + pVia->swov.panning_x = 0; + pVia->swov.panning_y = 0; + pVia->swov.oldPanningX = 0; + pVia->swov.oldPanningY = 0; } } @@ -630,21 +630,21 @@ num = REGION_NUM_RECTS(A); if (num != REGION_NUM_RECTS(B)) - return FALSE; + return FALSE; if ((A->extents.x1 != B->extents.x1) || - (A->extents.x2 != B->extents.x2) || - (A->extents.y1 != B->extents.y1) || (A->extents.y2 != B->extents.y2)) - return FALSE; + (A->extents.x2 != B->extents.x2) || + (A->extents.y1 != B->extents.y1) || (A->extents.y2 != B->extents.y2)) + return FALSE; dataA = (int *)REGION_RECTS(A); dataB = (int *)REGION_RECTS(B); while (num--) { - if ((dataA[0] != dataB[0]) || (dataA[1] != dataB[1])) - return FALSE; - dataA += 2; - dataB += 2; + if ((dataA[0] != dataB[0]) || (dataA[1] != dataB[1])) + return FALSE; + dataA += 2; + dataB += 2; } return TRUE; @@ -653,105 +653,103 @@ #ifdef USE_NEW_XVABI static void -viaVideoFillPixmap(ScrnInfoPtr pScrn, - char *base, - unsigned long pitch, - int depth, - int x, int y, int w, int h, - unsigned long color) +viaVideoFillPixmap(ScrnInfoPtr pScrn, + char *base, + unsigned long pitch, + int depth, + int x, int y, int w, int h, + unsigned long color) { int i; ErrorF("pitch %lu, depth %d, x %d, y %d, w %d h %d, color 0x%08x\n", - pitch, depth, x, y, w, h, color); - + pitch, depth, x, y, w, h, color); + depth = (depth + 7) >> 3; base += y*pitch + x*depth; - + switch(depth) { - case 4: - while(h--) { - register CARD32 *p = (CARD32 *)base; - for (i=0; itype == DRAWABLE_WINDOW) { VIAPtr pVia = VIAPTR(pScrn); - PixmapPtr pPix = (pScrn->pScreen->GetWindowPixmap)((WindowPtr) pDraw); - unsigned long pitch = pPix->devKind; - long offset = (long) pPix->devPrivate.ptr - - (long) pVia->FBBase; - int x,y; - BoxPtr pBox; - int nBox; + PixmapPtr pPix = (pScrn->pScreen->GetWindowPixmap)((WindowPtr) pDraw); + unsigned long pitch = pPix->devKind; + long offset = (long) pPix->devPrivate.ptr - (long) pVia->FBBase; + int x,y; + BoxPtr pBox; + int nBox; + REGION_TRANSLATE(pScrn->pScreen, clipBoxes, - pPix->screen_x, + - pPix->screen_y); - REGION_TRANSLATE(pScrn->pScreen, clipBoxes, - pPix->screen_x, - - pPix->screen_y); + nBox = REGION_NUM_RECTS(clipBoxes); + pBox = REGION_RECTS(clipBoxes); - nBox = REGION_NUM_RECTS(clipBoxes); - pBox = REGION_RECTS(clipBoxes); + while(nBox--) { + if (pVia->NoAccel || offset < 0 || + offset > pScrn->videoRam*1024) { + viaVideoFillPixmap(pScrn, pPix->devPrivate.ptr, pitch, + pDraw->bitsPerPixel, pBox->x1, pBox->y1, + pBox->x2 - pBox->x1, pBox->y2 - pBox->y1, + pPriv->colorKey); + } else { + viaAccelFillPixmap(pScrn, offset, pitch, + pDraw->bitsPerPixel, pBox->x1, pBox->y1, + pBox->x2 - pBox->x1, pBox->y2 - pBox->y1, + pPriv->colorKey); + } + pBox++; + } - while(nBox--) { - if (pVia->NoAccel || offset < 0 || - offset > pScrn->videoRam*1024) { - viaVideoFillPixmap(pScrn, pPix->devPrivate.ptr, pitch, - pDraw->bitsPerPixel, pBox->x1, pBox->y1, - pBox->x2 - pBox->x1, pBox->y2 - pBox->y1, - pPriv->colorKey); - } else { - viaAccelFillPixmap(pScrn, offset, pitch, - pDraw->bitsPerPixel, pBox->x1, pBox->y1, - pBox->x2 - pBox->x1, pBox->y2 - pBox->y1, - pPriv->colorKey); - } - pBox++; - } - - DamageDamageRegion(pPix, clipBoxes); + DamageDamageRegion(pPix, clipBoxes); } return 0; -} +} #endif @@ -761,11 +759,11 @@ static int viaReputImage(ScrnInfoPtr pScrn, - short drw_x, short drw_y, RegionPtr clipBoxes, pointer data + short drw_x, short drw_y, RegionPtr clipBoxes, pointer data #ifdef USE_NEW_XVABI - , DrawablePtr pDraw + , DrawablePtr pDraw #endif - ) +) { DDUPDATEOVERLAY UpdateOverlay_Video; @@ -774,28 +772,28 @@ VIAPtr pVia = VIAPTR(pScrn); if (!RegionsEqual(&pPriv->clip, clipBoxes)) { - REGION_COPY(pScrn->pScreen, &pPriv->clip, clipBoxes); - if (pPriv->autoPaint) { + REGION_COPY(pScrn->pScreen, &pPriv->clip, clipBoxes); + if (pPriv->autoPaint) { #ifdef USE_NEW_XVABI - if (pDraw->type == DRAWABLE_WINDOW) { - viaPaintColorkey(pScrn, pPriv, clipBoxes, pDraw); - } else { - xf86XVFillKeyHelper(pScrn->pScreen, pPriv->colorKey, - clipBoxes); - } + if (pDraw->type == DRAWABLE_WINDOW) { + viaPaintColorkey(pScrn, pPriv, clipBoxes, pDraw); + } else { + xf86XVFillKeyHelper(pScrn->pScreen, pPriv->colorKey, + clipBoxes); + } #else - xf86XVFillKeyHelper(pScrn->pScreen, pPriv->colorKey, - clipBoxes); + xf86XVFillKeyHelper(pScrn->pScreen, pPriv->colorKey, + clipBoxes); #endif - } + } } if (drw_x == pPriv->old_drw_x && - drw_y == pPriv->old_drw_y && - pVia->swov.oldPanningX == pVia->swov.panning_x && - pVia->swov.oldPanningY == pVia->swov.panning_y) { - viaXvError(pScrn, pPriv, xve_none); - return Success; + drw_y == pPriv->old_drw_y && + pVia->swov.oldPanningX == pVia->swov.panning_x && + pVia->swov.oldPanningY == pVia->swov.panning_y) { + viaXvError(pScrn, pPriv, xve_none); + return Success; } lpUpdateOverlay->SrcLeft = pPriv->old_src_x; @@ -813,9 +811,9 @@ lpUpdateOverlay->dwFlags = DDOVER_KEYDEST; if (pScrn->bitsPerPixel == 8) - lpUpdateOverlay->dwColorSpaceLowValue = pPriv->colorKey & 0xff; + lpUpdateOverlay->dwColorSpaceLowValue = pPriv->colorKey & 0xff; else - lpUpdateOverlay->dwColorSpaceLowValue = pPriv->colorKey; + lpUpdateOverlay->dwColorSpaceLowValue = pPriv->colorKey; VIAVidUpdateOverlay(pScrn, lpUpdateOverlay); @@ -844,74 +842,74 @@ usedPorts = 0; for (i = 0; i < XV_ADAPT_NUM; i++) { - if (!(viaAdaptPtr[i] = xf86XVAllocateVideoAdaptorRec(pScrn))) - return 0; - numPorts = numAdaptPort[i]; + if (!(viaAdaptPtr[i] = xf86XVAllocateVideoAdaptorRec(pScrn))) + return 0; + numPorts = numAdaptPort[i]; - viaPortPriv = - (viaPortPrivPtr) xnfcalloc(numPorts, sizeof(viaPortPrivRec)); - pdevUnion = (DevUnion *) xnfcalloc(numPorts, sizeof(DevUnion)); + viaPortPriv = + (viaPortPrivPtr) xnfcalloc(numPorts, sizeof(viaPortPrivRec)); + pdevUnion = (DevUnion *) xnfcalloc(numPorts, sizeof(DevUnion)); - if (i == XV_ADAPT_SWOV) { /* Overlay engine */ - viaAdaptPtr[i]->type = XvInputMask | XvWindowMask | XvImageMask | - XvVideoMask | XvStillMask; - viaAdaptPtr[i]->flags = - VIDEO_OVERLAID_IMAGES | VIDEO_CLIP_TO_VIEWPORT; - } else { - viaAdaptPtr[i]->type = XvInputMask | XvWindowMask | XvVideoMask; - viaAdaptPtr[i]->flags = - VIDEO_OVERLAID_IMAGES | VIDEO_CLIP_TO_VIEWPORT; - } - viaAdaptPtr[i]->name = XvAdaptorName[i]; - viaAdaptPtr[i]->nEncodings = 1; - viaAdaptPtr[i]->pEncodings = DummyEncoding; - viaAdaptPtr[i]->nFormats = sizeof(FormatsG) / sizeof(FormatsG[0]); - viaAdaptPtr[i]->pFormats = FormatsG; + if (i == XV_ADAPT_SWOV) { /* Overlay engine */ + viaAdaptPtr[i]->type = XvInputMask | XvWindowMask | XvImageMask | + XvVideoMask | XvStillMask; + viaAdaptPtr[i]->flags = + VIDEO_OVERLAID_IMAGES | VIDEO_CLIP_TO_VIEWPORT; + } else { + viaAdaptPtr[i]->type = XvInputMask | XvWindowMask | XvVideoMask; + viaAdaptPtr[i]->flags = + VIDEO_OVERLAID_IMAGES | VIDEO_CLIP_TO_VIEWPORT; + } + viaAdaptPtr[i]->name = XvAdaptorName[i]; + viaAdaptPtr[i]->nEncodings = 1; + viaAdaptPtr[i]->pEncodings = DummyEncoding; + viaAdaptPtr[i]->nFormats = sizeof(FormatsG) / sizeof(FormatsG[0]); + viaAdaptPtr[i]->pFormats = FormatsG; - /* The adapter can handle 1 port simultaneously */ - viaAdaptPtr[i]->nPorts = numPorts; - viaAdaptPtr[i]->pPortPrivates = pdevUnion; - viaAdaptPtr[i]->pPortPrivates->ptr = (pointer) viaPortPriv; - viaAdaptPtr[i]->nAttributes = NUM_ATTRIBUTES_G; - viaAdaptPtr[i]->pAttributes = AttributesG; + /* The adapter can handle 1 port simultaneously */ + viaAdaptPtr[i]->nPorts = numPorts; + viaAdaptPtr[i]->pPortPrivates = pdevUnion; + viaAdaptPtr[i]->pPortPrivates->ptr = (pointer) viaPortPriv; + viaAdaptPtr[i]->nAttributes = NUM_ATTRIBUTES_G; + viaAdaptPtr[i]->pAttributes = AttributesG; - viaAdaptPtr[i]->nImages = NUM_IMAGES_G; - viaAdaptPtr[i]->pImages = ImagesG; - viaAdaptPtr[i]->PutVideo = NULL; - viaAdaptPtr[i]->StopVideo = viaStopVideo; - viaAdaptPtr[i]->QueryBestSize = viaQueryBestSize; - viaAdaptPtr[i]->GetPortAttribute = viaGetPortAttribute; - viaAdaptPtr[i]->SetPortAttribute = viaSetPortAttribute; - viaAdaptPtr[i]->PutImage = viaPutImage; - viaAdaptPtr[i]->ReputImage = viaReputImage; - viaAdaptPtr[i]->QueryImageAttributes = viaQueryImageAttributes; - for (j = 0; j < numPorts; ++j) { - viaPortPriv[j].dmaBounceBuffer = NULL; - viaPortPriv[j].dmaBounceStride = 0; - viaPortPriv[j].dmaBounceLines = 0; - viaPortPriv[j].colorKey = 0x0821; - viaPortPriv[j].autoPaint = TRUE; - viaPortPriv[j].brightness = 5000.; - viaPortPriv[j].saturation = 10000; - viaPortPriv[j].contrast = 10000; - viaPortPriv[j].hue = 0; - viaPortPriv[j].FourCC = 0; - viaPortPriv[j].xv_portnum = j + usedPorts; - viaPortPriv[j].xvErr = xve_none; + viaAdaptPtr[i]->nImages = NUM_IMAGES_G; + viaAdaptPtr[i]->pImages = ImagesG; + viaAdaptPtr[i]->PutVideo = NULL; + viaAdaptPtr[i]->StopVideo = viaStopVideo; + viaAdaptPtr[i]->QueryBestSize = viaQueryBestSize; + viaAdaptPtr[i]->GetPortAttribute = viaGetPortAttribute; + viaAdaptPtr[i]->SetPortAttribute = viaSetPortAttribute; + viaAdaptPtr[i]->PutImage = viaPutImage; + viaAdaptPtr[i]->ReputImage = viaReputImage; + viaAdaptPtr[i]->QueryImageAttributes = viaQueryImageAttributes; + for (j = 0; j < numPorts; ++j) { + viaPortPriv[j].dmaBounceBuffer = NULL; + viaPortPriv[j].dmaBounceStride = 0; + viaPortPriv[j].dmaBounceLines = 0; + viaPortPriv[j].colorKey = 0x0821; + viaPortPriv[j].autoPaint = TRUE; + viaPortPriv[j].brightness = 5000.; + viaPortPriv[j].saturation = 10000; + viaPortPriv[j].contrast = 10000; + viaPortPriv[j].hue = 0; + viaPortPriv[j].FourCC = 0; + viaPortPriv[j].xv_portnum = j + usedPorts; + viaPortPriv[j].xvErr = xve_none; #ifdef X_USE_REGION_NULL - REGION_NULL(pScreen, &viaPortPriv[j].clip); + REGION_NULL(pScreen, &viaPortPriv[j].clip); #else - REGION_INIT(pScreen, &viaPortPriv[j].clip, NullBox, 1); + REGION_INIT(pScreen, &viaPortPriv[j].clip, NullBox, 1); #endif - } - usedPorts += j; + } + usedPorts += j; #ifdef XF86DRI - viaXvMCInitXv(pScrn, viaAdaptPtr[i]); + viaXvMCInitXv(pScrn, viaAdaptPtr[i]); #endif - } /* End of for */ + } /* End of for */ viaResetVideo(pScrn); *adaptors = viaAdaptPtr; return XV_ADAPT_NUM; @@ -927,24 +925,24 @@ REGION_EMPTY(pScrn->pScreen, &pPriv->clip); if (exit) { - ViaOverlayHide(pScrn); - ViaSwovSurfaceDestroy(pScrn, pPriv); - if (pPriv->dmaBounceBuffer) - xfree(pPriv->dmaBounceBuffer); - pPriv->dmaBounceBuffer = 0; - pPriv->dmaBounceStride = 0; - pPriv->dmaBounceLines = 0; - pVia->dwFrameNum = 0; - pPriv->old_drw_x = 0; - pPriv->old_drw_y = 0; - pPriv->old_drw_w = 0; - pPriv->old_drw_h = 0; + ViaOverlayHide(pScrn); + ViaSwovSurfaceDestroy(pScrn, pPriv); + if (pPriv->dmaBounceBuffer) + xfree(pPriv->dmaBounceBuffer); + pPriv->dmaBounceBuffer = 0; + pPriv->dmaBounceStride = 0; + pPriv->dmaBounceLines = 0; + pVia->dwFrameNum = 0; + pPriv->old_drw_x = 0; + pPriv->old_drw_y = 0; + pPriv->old_drw_w = 0; + pPriv->old_drw_h = 0; } } static int viaSetPortAttribute(ScrnInfoPtr pScrn, - Atom attribute, INT32 value, pointer data) + Atom attribute, INT32 value, pointer data) { VIAPtr pVia = VIAPTR(pScrn); vmmtr viaVidEng = (vmmtr) pVia->VidMapBase; @@ -955,45 +953,45 @@ /* Color Key */ if (attribute == xvColorKey) { - DBG_DD(ErrorF(" V4L Disable xvColorKey = %08lx\n", value)); + DBG_DD(ErrorF(" V4L Disable xvColorKey = %08lx\n", value)); - pPriv->colorKey = value; - /* All assume color depth is 16 */ - value &= 0x00FFFFFF; - viaVidEng->color_key = value; - viaVidEng->snd_color_key = value; - REGION_EMPTY(pScrn->pScreen, &pPriv->clip); - DBG_DD(ErrorF(" V4L Disable done xvColorKey = %08lx\n", value)); + pPriv->colorKey = value; + /* All assume color depth is 16 */ + value &= 0x00FFFFFF; + viaVidEng->color_key = value; + viaVidEng->snd_color_key = value; + REGION_EMPTY(pScrn->pScreen, &pPriv->clip); + DBG_DD(ErrorF(" V4L Disable done xvColorKey = %08lx\n", value)); } else if (attribute == xvAutoPaint) { - pPriv->autoPaint = value; - DBG_DD(ErrorF(" xvAutoPaint = %08lx\n", value)); - /* Color Control */ + pPriv->autoPaint = value; + DBG_DD(ErrorF(" xvAutoPaint = %08lx\n", value)); + /* Color Control */ } else if (attribute == xvBrightness || - attribute == xvContrast || - attribute == xvSaturation || attribute == xvHue) { - if (attribute == xvBrightness) { - DBG_DD(ErrorF(" xvBrightness = %08ld\n", value)); - pPriv->brightness = value; - } - if (attribute == xvContrast) { - DBG_DD(ErrorF(" xvContrast = %08ld\n", value)); - pPriv->contrast = value; - } - if (attribute == xvSaturation) { - DBG_DD(ErrorF(" xvSaturation = %08ld\n", value)); - pPriv->saturation = value; - } - if (attribute == xvHue) { - DBG_DD(ErrorF(" xvHue = %08ld\n", value)); - pPriv->hue = value; - } - viaSetColorSpace(pVia, pPriv->hue, pPriv->saturation, - pPriv->brightness, pPriv->contrast, FALSE); + attribute == xvContrast || + attribute == xvSaturation || attribute == xvHue) { + if (attribute == xvBrightness) { + DBG_DD(ErrorF(" xvBrightness = %08ld\n", value)); + pPriv->brightness = value; + } + if (attribute == xvContrast) { + DBG_DD(ErrorF(" xvContrast = %08ld\n", value)); + pPriv->contrast = value; + } + if (attribute == xvSaturation) { + DBG_DD(ErrorF(" xvSaturation = %08ld\n", value)); + pPriv->saturation = value; + } + if (attribute == xvHue) { + DBG_DD(ErrorF(" xvHue = %08ld\n", value)); + pPriv->hue = value; + } + viaSetColorSpace(pVia, pPriv->hue, pPriv->saturation, + pPriv->brightness, pPriv->contrast, FALSE); } else { - DBG_DD(ErrorF - (" via_video.c : viaSetPortAttribute : is not supported the attribute")); - return BadMatch; + DBG_DD(ErrorF + (" via_video.c : viaSetPortAttribute : is not supported the attribute")); + return BadMatch; } /* attr,avalue hardware processing goes here */ @@ -1005,43 +1003,43 @@ static int viaGetPortAttribute(ScrnInfoPtr pScrn, - Atom attribute, INT32 * value, pointer data) + Atom attribute, INT32 * value, pointer data) { viaPortPrivPtr pPriv = (viaPortPrivPtr) data; DBG_DD(ErrorF(" via_video.c : viaGetPortAttribute : port %d %ld\n", - pPriv->xv_portnum, attribute)); + pPriv->xv_portnum, attribute)); *value = 0; if (attribute == xvColorKey) { - *value = (INT32) pPriv->colorKey; - DBG_DD(ErrorF(" via_video.c : ColorKey 0x%lx\n", pPriv->colorKey)); + *value = (INT32) pPriv->colorKey; + DBG_DD(ErrorF(" via_video.c : ColorKey 0x%lx\n", pPriv->colorKey)); } else if (attribute == xvAutoPaint) { - *value = (INT32) pPriv->autoPaint; - DBG_DD(ErrorF(" AutoPaint = %08ld\n", *value)); - /* Color Control */ + *value = (INT32) pPriv->autoPaint; + DBG_DD(ErrorF(" AutoPaint = %08ld\n", *value)); + /* Color Control */ } else if (attribute == xvBrightness || - attribute == xvContrast || - attribute == xvSaturation || attribute == xvHue) { - if (attribute == xvBrightness) { - *value = pPriv->brightness; - DBG_DD(ErrorF(" xvBrightness = %08ld\n", *value)); - } - if (attribute == xvContrast) { - *value = pPriv->contrast; - DBG_DD(ErrorF(" xvContrast = %08ld\n", *value)); - } - if (attribute == xvSaturation) { - *value = pPriv->saturation; - DBG_DD(ErrorF(" xvSaturation = %08ld\n", *value)); - } - if (attribute == xvHue) { - *value = pPriv->hue; - DBG_DD(ErrorF(" xvHue = %08ld\n", *value)); - } + attribute == xvContrast || + attribute == xvSaturation || attribute == xvHue) { + if (attribute == xvBrightness) { + *value = pPriv->brightness; + DBG_DD(ErrorF(" xvBrightness = %08ld\n", *value)); + } + if (attribute == xvContrast) { + *value = pPriv->contrast; + DBG_DD(ErrorF(" xvContrast = %08ld\n", *value)); + } + if (attribute == xvSaturation) { + *value = pPriv->saturation; + DBG_DD(ErrorF(" xvSaturation = %08ld\n", *value)); + } + if (attribute == xvHue) { + *value = pPriv->hue; + DBG_DD(ErrorF(" xvHue = %08ld\n", *value)); + } } else { - /*return BadMatch */ ; + /*return BadMatch */; } return Success; } @@ -1058,7 +1056,7 @@ *p_h = drw_h; if (*p_w > 2048) - *p_w = 2048; + *p_w = 2048; } /* @@ -1066,45 +1064,45 @@ */ static void Flip(VIAPtr pVia, viaPortPrivPtr pPriv, int fourcc, - unsigned long DisplayBufferIndex) + unsigned long DisplayBufferIndex) { unsigned long proReg = 0; - if (pVia->ChipId == PCI_CHIP_VT3259 && !(pVia->swov.gdwVideoFlagSW & VIDEO_1_INUSE)) - proReg = PRO_HQV1_OFFSET; + if (pVia->ChipId == PCI_CHIP_VT3259 + && !(pVia->swov.gdwVideoFlagSW & VIDEO_1_INUSE)) + proReg = PRO_HQV1_OFFSET; switch (fourcc) { - case FOURCC_UYVY: - case FOURCC_YUY2: - case FOURCC_RV15: - case FOURCC_RV16: - case FOURCC_RV32: - while ((VIDInD(HQV_CONTROL + proReg) & HQV_SW_FLIP)) ; - VIDOutD(HQV_SRC_STARTADDR_Y + proReg, - pVia->swov.SWDevice.dwSWPhysicalAddr[DisplayBufferIndex]); - VIDOutD(HQV_CONTROL + proReg, - (VIDInD(HQV_CONTROL + - proReg) & ~HQV_FLIP_ODD) | HQV_SW_FLIP | HQV_FLIP_STATUS); - break; - - case FOURCC_YV12: - default: - while ((VIDInD(HQV_CONTROL + proReg) & HQV_SW_FLIP)) ; - VIDOutD(HQV_SRC_STARTADDR_Y + proReg, - pVia->swov.SWDevice.dwSWPhysicalAddr[DisplayBufferIndex]); - if (pVia->VideoEngine == VIDEO_ENGINE_CME) { - VIDOutD(HQV_SRC_STARTADDR_U + proReg, - pVia->swov.SWDevice.dwSWCrPhysicalAddr[DisplayBufferIndex]); - } else { - VIDOutD(HQV_SRC_STARTADDR_U, - pVia->swov.SWDevice.dwSWCbPhysicalAddr[DisplayBufferIndex]); - VIDOutD(HQV_SRC_STARTADDR_V, - pVia->swov.SWDevice.dwSWCrPhysicalAddr[DisplayBufferIndex]); - } - VIDOutD(HQV_CONTROL + proReg, - (VIDInD(HQV_CONTROL + - proReg) & ~HQV_FLIP_ODD) | HQV_SW_FLIP | HQV_FLIP_STATUS); - break; + case FOURCC_UYVY: + case FOURCC_YUY2: + case FOURCC_RV15: + case FOURCC_RV16: + case FOURCC_RV32: + while ((VIDInD(HQV_CONTROL + proReg) & HQV_SW_FLIP)); + VIDOutD(HQV_SRC_STARTADDR_Y + proReg, + pVia->swov.SWDevice.dwSWPhysicalAddr[DisplayBufferIndex]); + VIDOutD(HQV_CONTROL + proReg, + (VIDInD(HQV_CONTROL + + proReg) & ~HQV_FLIP_ODD) | HQV_SW_FLIP | HQV_FLIP_STATUS); + break; + case FOURCC_YV12: + default: + while ((VIDInD(HQV_CONTROL + proReg) & HQV_SW_FLIP)); + VIDOutD(HQV_SRC_STARTADDR_Y + proReg, + pVia->swov.SWDevice.dwSWPhysicalAddr[DisplayBufferIndex]); + if (pVia->VideoEngine == VIDEO_ENGINE_CME) { + VIDOutD(HQV_SRC_STARTADDR_U + proReg, + pVia->swov.SWDevice.dwSWCrPhysicalAddr[DisplayBufferIndex]); + } else { + VIDOutD(HQV_SRC_STARTADDR_U, + pVia->swov.SWDevice.dwSWCbPhysicalAddr[DisplayBufferIndex]); + VIDOutD(HQV_SRC_STARTADDR_V, + pVia->swov.SWDevice.dwSWCrPhysicalAddr[DisplayBufferIndex]); + } + VIDOutD(HQV_CONTROL + proReg, + (VIDInD(HQV_CONTROL + + proReg) & ~HQV_FLIP_ODD) | HQV_SW_FLIP | HQV_FLIP_STATUS); + break; } } @@ -1122,7 +1120,7 @@ (*viaFastVidCpy) (dst, src, dstPitch, w >> 1, h, TRUE); nv12Blit(dst + dstPitch * h, src + w * h + (w >> 1) * (h >> 1), - src + w * h, w >> 1, w >> 1, dstPitch, h >> 1); + src + w * h, w >> 1, w >> 1, dstPitch, h >> 1); } #ifdef XF86DRI @@ -1150,49 +1148,49 @@ id == FOURCC_YV12); switch (id) { - case FOURCC_YUY2: - case FOURCC_RV15: - case FOURCC_RV16: - bounceStride = ALIGN_TO(2 * width, 16); - bounceLines = height; - break; - case FOURCC_RV32: - bounceStride = ALIGN_TO(4 * width, 16); - bounceLines = height; - break; + case FOURCC_YUY2: + case FOURCC_RV15: + case FOURCC_RV16: + bounceStride = ALIGN_TO(2 * width, 16); + bounceLines = height; + break; + case FOURCC_RV32: + bounceStride = ALIGN_TO(4 * width, 16); + bounceLines = height; + break; - case FOURCC_YV12: - default: - bounceStride = ALIGN_TO(width, 16); - bounceLines = height; - break; + case FOURCC_YV12: + default: + bounceStride = ALIGN_TO(width, 16); + bounceLines = height; + break; } if (bounceBuffer || nv12Conversion) { - if (!pPort->dmaBounceBuffer || - pPort->dmaBounceStride != bounceStride || - pPort->dmaBounceLines != bounceLines) { - if (pPort->dmaBounceBuffer) { - xfree(pPort->dmaBounceBuffer); - pPort->dmaBounceBuffer = 0; - } - size = bounceStride * bounceLines + 16; - if (FOURCC_YV12 == id) - size += ALIGN_TO(bounceStride >> 1, 16) * bounceLines; - pPort->dmaBounceBuffer = (unsigned char *)malloc(size); - pPort->dmaBounceLines = bounceLines; - pPort->dmaBounceStride = bounceStride; - } + if (!pPort->dmaBounceBuffer || + pPort->dmaBounceStride != bounceStride || + pPort->dmaBounceLines != bounceLines) { + if (pPort->dmaBounceBuffer) { + xfree(pPort->dmaBounceBuffer); + pPort->dmaBounceBuffer = 0; + } + size = bounceStride * bounceLines + 16; + if (FOURCC_YV12 == id) + size += ALIGN_TO(bounceStride >> 1, 16) * bounceLines; + pPort->dmaBounceBuffer = (unsigned char *)malloc(size); + pPort->dmaBounceLines = bounceLines; + pPort->dmaBounceStride = bounceStride; + } } bounceBase = - (unsigned char *)ALIGN_TO((unsigned long)(pPort->dmaBounceBuffer), - 16); + (unsigned char *)ALIGN_TO((unsigned long)(pPort->dmaBounceBuffer), + 16); base = (bounceBuffer) ? bounceBase : src; if (bounceBuffer) { - (*viaFastVidCpy) (base, src, bounceStride, bounceStride >> 1, height, - 1); + (*viaFastVidCpy) (base, src, bounceStride, bounceStride >> 1, height, + 1); } blit.num_lines = height; @@ -1204,61 +1202,61 @@ blit.to_fb = 1; #ifdef XV_DEBUG ErrorF - ("Addr: 0x%lx, Offset 0x%lx\n Fb_stride: %u, Mem_stride: %u\n width: %u num_lines: %u\n", - (unsigned long)blit.mem_addr, (unsigned long)blit.fb_addr, - (unsigned)blit.fb_stride, (unsigned)blit.mem_stride, - (unsigned)blit.line_length, (unsigned)blit.num_lines); + ("Addr: 0x%lx, Offset 0x%lx\n Fb_stride: %u, Mem_stride: %u\n width: %u num_lines: %u\n", + (unsigned long)blit.mem_addr, (unsigned long)blit.fb_addr, + (unsigned)blit.fb_stride, (unsigned)blit.mem_stride, + (unsigned)blit.line_length, (unsigned)blit.num_lines); #endif while (-EAGAIN == (err = - drmCommandWriteRead(pVia->drmFD, DRM_VIA_DMA_BLIT, &blit, - sizeof(blit)))) ; + drmCommandWriteRead(pVia->drmFD, DRM_VIA_DMA_BLIT, &blit, + sizeof(blit)))) ; if (err < 0) - return -1; + return -1; lumaSync = blit.sync; if (id == FOURCC_YV12) { - unsigned tmp = ALIGN_TO(width >> 1, 16); + unsigned tmp = ALIGN_TO(width >> 1, 16); - if (nv12Conversion) { - nv12Blit(bounceBase + bounceStride * height, - src + bounceStride * height + tmp * (height >> 1), - src + bounceStride * height, width >> 1, tmp, - bounceStride, height >> 1); - } else if (bounceBuffer) { - (*viaFastVidCpy) (base + bounceStride * height, - src + bounceStride * height, tmp, tmp >> 1, height, 1); - } + if (nv12Conversion) { + nv12Blit(bounceBase + bounceStride * height, + src + bounceStride * height + tmp * (height >> 1), + src + bounceStride * height, width >> 1, tmp, + bounceStride, height >> 1); + } else if (bounceBuffer) { + (*viaFastVidCpy) (base + bounceStride * height, + src + bounceStride * height, tmp, tmp >> 1, height, 1); + } - if (nv12Conversion) { - blit.num_lines = height >> 1; - blit.line_length = bounceStride; - blit.mem_addr = bounceBase + bounceStride * height; - blit.fb_stride = lumaStride; - blit.mem_stride = bounceStride; - } else { - blit.num_lines = height; - blit.line_length = tmp; - blit.mem_addr = base + bounceStride * height; - blit.fb_stride = lumaStride >> 1; - blit.mem_stride = tmp; - } + if (nv12Conversion) { + blit.num_lines = height >> 1; + blit.line_length = bounceStride; + blit.mem_addr = bounceBase + bounceStride * height; + blit.fb_stride = lumaStride; + blit.mem_stride = bounceStride; + } else { + blit.num_lines = height; + blit.line_length = tmp; + blit.mem_addr = base + bounceStride * height; + blit.fb_stride = lumaStride >> 1; + blit.mem_stride = tmp; + } - blit.fb_addr = dst + lumaStride * height; - blit.to_fb = 1; + blit.fb_addr = dst + lumaStride * height; + blit.to_fb = 1; - while (-EAGAIN == (err = - drmCommandWriteRead(pVia->drmFD, DRM_VIA_DMA_BLIT, &blit, - sizeof(blit)))) ; - if (err < 0) - return -1; - + while (-EAGAIN == (err = + drmCommandWriteRead(pVia->drmFD, DRM_VIA_DMA_BLIT, &blit, + sizeof(blit)))); + + if (err < 0) + return -1; } while (-EAGAIN == (err = drmCommandWrite(pVia->drmFD, DRM_VIA_BLIT_SYNC, - chromaSync, sizeof(*chromaSync)))) ; + chromaSync, sizeof(*chromaSync)))) ; if (err < 0) - return -1; + return -1; return Success; } @@ -1268,16 +1266,16 @@ static int viaPutImage(ScrnInfoPtr pScrn, - short src_x, short src_y, - short drw_x, short drw_y, - short src_w, short src_h, - short drw_w, short drw_h, - int id, unsigned char *buf, - short width, short height, Bool sync, RegionPtr clipBoxes, pointer data + short src_x, short src_y, + short drw_x, short drw_y, + short src_w, short src_h, + short drw_w, short drw_h, + int id, unsigned char *buf, + short width, short height, Bool sync, RegionPtr clipBoxes, pointer data #ifdef USE_NEW_XVABI - , DrawablePtr pDraw + , DrawablePtr pDraw #endif - ) +) { VIAPtr pVia = VIAPTR(pScrn); viaPortPrivPtr pPriv = (viaPortPrivPtr) data; @@ -1286,195 +1284,195 @@ # ifdef XV_DEBUG ErrorF(" via_video.c : viaPutImage : called\n"); ErrorF(" via_video.c : FourCC=0x%x width=%d height=%d sync=%d\n", id, - width, height, sync); + width, height, sync); ErrorF - (" via_video.c : src_x=%d src_y=%d src_w=%d src_h=%d colorkey=0x%lx\n", - src_x, src_y, src_w, src_h, pPriv->colorKey); + (" via_video.c : src_x=%d src_y=%d src_w=%d src_h=%d colorkey=0x%lx\n", + src_x, src_y, src_w, src_h, pPriv->colorKey); ErrorF(" via_video.c : drw_x=%d drw_y=%d drw_w=%d drw_h=%d\n", drw_x, - drw_y, drw_w, drw_h); + drw_y, drw_w, drw_h); # endif switch (pPriv->xv_adaptor) { - case XV_ADAPT_SWOV: - { - DDUPDATEOVERLAY UpdateOverlay_Video; - LPDDUPDATEOVERLAY lpUpdateOverlay = &UpdateOverlay_Video; + case XV_ADAPT_SWOV: + { + DDUPDATEOVERLAY UpdateOverlay_Video; + LPDDUPDATEOVERLAY lpUpdateOverlay = &UpdateOverlay_Video; - int dstPitch; - unsigned long dwUseExtendedFIFO = 0; + int dstPitch; + unsigned long dwUseExtendedFIFO = 0; - DBG_DD(ErrorF(" via_video.c : : S/W Overlay! \n")); - /* Allocate video memory(CreateSurface), - * add codes to judge if need to re-create surface - */ - if ((pPriv->old_src_w != src_w) || (pPriv->old_src_h != src_h)) { - ViaSwovSurfaceDestroy(pScrn, pPriv); - } + DBG_DD(ErrorF(" via_video.c : : S/W Overlay! \n")); + /* Allocate video memory(CreateSurface), + * add codes to judge if need to re-create surface + */ + if ((pPriv->old_src_w != src_w) || (pPriv->old_src_h != src_h)) { + ViaSwovSurfaceDestroy(pScrn, pPriv); + } - if (Success != (retCode = - ViaSwovSurfaceCreate(pScrn, pPriv, id, width, height))) { - DBG_DD(ErrorF - (" : Fail to Create SW Video Surface\n")); - viaXvError(pScrn, pPriv, xve_mem); - return retCode; - } + if (Success != (retCode = + ViaSwovSurfaceCreate(pScrn, pPriv, id, width, height))) { + DBG_DD(ErrorF + (" : Fail to Create SW Video Surface\n")); + viaXvError(pScrn, pPriv, xve_mem); + return retCode; + } - /* Copy image data from system memory to video memory - * TODO: use DRM's DMA feature to accelerate data copy - */ - if (FOURCC_XVMC != id) { - dstPitch = pVia->swov.SWDevice.dwPitch; + /* Copy image data from system memory to video memory + * TODO: use DRM's DMA feature to accelerate data copy + */ + if (FOURCC_XVMC != id) { + dstPitch = pVia->swov.SWDevice.dwPitch; - if (pVia->useDmaBlit) { + if (pVia->useDmaBlit) { #ifdef XF86DRI - if (viaDmaBlitImage(pVia, pPriv, buf, - (unsigned char *)pVia->swov.SWDevice. - lpSWOverlaySurface[pVia->dwFrameNum & 1] - - (unsigned char *)pVia->FBBase, width, height, - dstPitch, id)) { - viaXvError(pScrn, pPriv, xve_dmablit); - return BadAccess; - } + if (viaDmaBlitImage(pVia, pPriv, buf, + (unsigned char *)pVia->swov.SWDevice. + lpSWOverlaySurface[pVia->dwFrameNum & 1] - + (unsigned char *)pVia->FBBase, width, height, + dstPitch, id)) { + viaXvError(pScrn, pPriv, xve_dmablit); + return BadAccess; + } #endif - } else { - switch (id) { - case FOURCC_YV12: - if (pVia->VideoEngine == VIDEO_ENGINE_CME) { - nv12cp(pVia->swov.SWDevice. - lpSWOverlaySurface[pVia->dwFrameNum & 1], buf, - dstPitch, width, height, 0); - } else { - (*viaFastVidCpy) (pVia->swov.SWDevice. - lpSWOverlaySurface[pVia->dwFrameNum & 1], buf, - dstPitch, width, height, 0); - } - break; - case FOURCC_RV32: - (*viaFastVidCpy) (pVia->swov.SWDevice. - lpSWOverlaySurface[pVia->dwFrameNum & 1], buf, - dstPitch, width << 1, height, 1); - break; - case FOURCC_UYVY: - case FOURCC_YUY2: - case FOURCC_RV15: - case FOURCC_RV16: - default: - (*viaFastVidCpy) (pVia->swov.SWDevice. - lpSWOverlaySurface[pVia->dwFrameNum & 1], buf, - dstPitch, width, height, 1); - break; - } - } - } + } else { + switch (id) { + case FOURCC_YV12: + if (pVia->VideoEngine == VIDEO_ENGINE_CME) { + nv12cp(pVia->swov.SWDevice. + lpSWOverlaySurface[pVia->dwFrameNum & 1], + buf, dstPitch, width, height, 0); + } else { + (*viaFastVidCpy)(pVia->swov.SWDevice. + lpSWOverlaySurface[pVia->dwFrameNum & 1], + buf, dstPitch, width, height, 0); + } + break; + case FOURCC_RV32: + (*viaFastVidCpy) (pVia->swov.SWDevice. + lpSWOverlaySurface[pVia->dwFrameNum & 1], + buf, dstPitch, width << 1, height, 1); + break; + case FOURCC_UYVY: + case FOURCC_YUY2: + case FOURCC_RV15: + case FOURCC_RV16: + default: + (*viaFastVidCpy) (pVia->swov.SWDevice. + lpSWOverlaySurface[pVia->dwFrameNum & 1], + buf, dstPitch, width, height, 1); + break; + } + } + } - /* If there is bandwidth issue, block the H/W overlay */ + /* If there is bandwidth issue, block the H/W overlay */ - if (!pVia->OverlaySupported && - !(pVia->OverlaySupported = DecideOverlaySupport(pScrn))) { - DBG_DD(ErrorF - (" via_video.c : Xv Overlay rejected due to insufficient " - "memory bandwidth.\n")); - viaXvError(pScrn, pPriv, xve_bandwidth); - return BadAlloc; - } + if (!pVia->OverlaySupported && + !(pVia->OverlaySupported = DecideOverlaySupport(pScrn))) { + DBG_DD(ErrorF + (" via_video.c : Xv Overlay rejected due to insufficient " + "memory bandwidth.\n")); + viaXvError(pScrn, pPriv, xve_bandwidth); + return BadAlloc; + } - /* - * fill video overlay parameter - */ - lpUpdateOverlay->SrcLeft = src_x; - lpUpdateOverlay->SrcTop = src_y; - lpUpdateOverlay->SrcRight = src_x + src_w; - lpUpdateOverlay->SrcBottom = src_y + src_h; + /* + * fill video overlay parameter + */ + lpUpdateOverlay->SrcLeft = src_x; + lpUpdateOverlay->SrcTop = src_y; + lpUpdateOverlay->SrcRight = src_x + src_w; + lpUpdateOverlay->SrcBottom = src_y + src_h; - lpUpdateOverlay->DstLeft = drw_x; - lpUpdateOverlay->DstTop = drw_y; - lpUpdateOverlay->DstRight = drw_x + drw_w; - lpUpdateOverlay->DstBottom = drw_y + drw_h; + lpUpdateOverlay->DstLeft = drw_x; + lpUpdateOverlay->DstTop = drw_y; + lpUpdateOverlay->DstRight = drw_x + drw_w; + lpUpdateOverlay->DstBottom = drw_y + drw_h; - lpUpdateOverlay->dwFlags = DDOVER_KEYDEST; + lpUpdateOverlay->dwFlags = DDOVER_KEYDEST; - if (pScrn->bitsPerPixel == 8) - lpUpdateOverlay->dwColorSpaceLowValue = - pPriv->colorKey & 0xff; - else - lpUpdateOverlay->dwColorSpaceLowValue = pPriv->colorKey; + if (pScrn->bitsPerPixel == 8) + lpUpdateOverlay->dwColorSpaceLowValue = + pPriv->colorKey & 0xff; + else + lpUpdateOverlay->dwColorSpaceLowValue = pPriv->colorKey; - /* If use extend FIFO mode */ - if (pScrn->currentMode->HDisplay > 1024) { - dwUseExtendedFIFO = 1; - } + /* If use extend FIFO mode */ + if (pScrn->currentMode->HDisplay > 1024) { + dwUseExtendedFIFO = 1; + } - if (FOURCC_XVMC != id) { + if (FOURCC_XVMC != id) { - /* - * XvMC flipping is done in the client lib. - */ + /* + * XvMC flipping is done in the client lib. + */ - DBG_DD(ErrorF(" : Flip\n")); - Flip(pVia, pPriv, id, pVia->dwFrameNum & 1); - } + DBG_DD(ErrorF(" : Flip\n")); + Flip(pVia, pPriv, id, pVia->dwFrameNum & 1); + } - pVia->dwFrameNum++; + pVia->dwFrameNum++; - /* If the dest rec. & extendFIFO doesn't change, don't do UpdateOverlay - * unless the surface clipping has changed */ - if ((pPriv->old_drw_x == drw_x) && (pPriv->old_drw_y == drw_y) - && (pPriv->old_drw_w == drw_w) && (pPriv->old_drw_h == drw_h) - && (pPriv->old_src_x == src_x) && (pPriv->old_src_y == src_y) - && (pPriv->old_src_w == src_w) && (pPriv->old_src_h == src_h) - && (pVia->old_dwUseExtendedFIFO == dwUseExtendedFIFO) - && (pVia->VideoStatus & VIDEO_SWOV_ON) && - RegionsEqual(&pPriv->clip, clipBoxes)) { - viaXvError(pScrn, pPriv, xve_none); - return Success; - } + /* If the dest rec. & extendFIFO doesn't change, don't do UpdateOverlay + * unless the surface clipping has changed */ + if ((pPriv->old_drw_x == drw_x) && (pPriv->old_drw_y == drw_y) + && (pPriv->old_drw_w == drw_w) && (pPriv->old_drw_h == drw_h) + && (pPriv->old_src_x == src_x) && (pPriv->old_src_y == src_y) + && (pPriv->old_src_w == src_w) && (pPriv->old_src_h == src_h) + && (pVia->old_dwUseExtendedFIFO == dwUseExtendedFIFO) + && (pVia->VideoStatus & VIDEO_SWOV_ON) && + RegionsEqual(&pPriv->clip, clipBoxes)) { + viaXvError(pScrn, pPriv, xve_none); + return Success; + } - pPriv->old_src_x = src_x; - pPriv->old_src_y = src_y; - pPriv->old_src_w = src_w; - pPriv->old_src_h = src_h; + pPriv->old_src_x = src_x; + pPriv->old_src_y = src_y; + pPriv->old_src_w = src_w; + pPriv->old_src_h = src_h; - pPriv->old_drw_x = drw_x; - pPriv->old_drw_y = drw_y; - pPriv->old_drw_w = drw_w; - pPriv->old_drw_h = drw_h; - pVia->old_dwUseExtendedFIFO = dwUseExtendedFIFO; - pVia->VideoStatus |= VIDEO_SWOV_ON; + pPriv->old_drw_x = drw_x; + pPriv->old_drw_y = drw_y; + pPriv->old_drw_w = drw_w; + pPriv->old_drw_h = drw_h; + pVia->old_dwUseExtendedFIFO = dwUseExtendedFIFO; + pVia->VideoStatus |= VIDEO_SWOV_ON; - /* BitBlt: Draw the colorkey rectangle */ - if (!RegionsEqual(&pPriv->clip, clipBoxes)) { - REGION_COPY(pScrn->pScreen, &pPriv->clip, clipBoxes); - if (pPriv->autoPaint) { + /* BitBlt: Draw the colorkey rectangle */ + if (!RegionsEqual(&pPriv->clip, clipBoxes)) { + REGION_COPY(pScrn->pScreen, &pPriv->clip, clipBoxes); + if (pPriv->autoPaint) { #ifdef USE_NEW_XVABI - if (pDraw->type == DRAWABLE_WINDOW) { - viaPaintColorkey(pScrn, pPriv, clipBoxes, pDraw); - } else { - xf86XVFillKeyHelper(pScrn->pScreen, pPriv->colorKey, - clipBoxes); - } + if (pDraw->type == DRAWABLE_WINDOW) { + viaPaintColorkey(pScrn, pPriv, clipBoxes, pDraw); + } else { + xf86XVFillKeyHelper(pScrn->pScreen, pPriv->colorKey, + clipBoxes); + } #else - xf86XVFillKeyHelper(pScrn->pScreen, pPriv->colorKey, - clipBoxes); + xf86XVFillKeyHelper(pScrn->pScreen, pPriv->colorKey, + clipBoxes); #endif - } - } - /* - * Update video overlay - */ - if (!VIAVidUpdateOverlay(pScrn, lpUpdateOverlay)) { - DBG_DD(ErrorF - (" via_video.c : call v4l updateoverlay fail. \n")); - } else { - DBG_DD(ErrorF(" via_video.c : PutImage done OK\n")); - viaXvError(pScrn, pPriv, xve_none); - return Success; - } - break; - } - default: - DBG_DD(ErrorF(" via_video.c : XVPort not supported\n")); - viaXvError(pScrn, pPriv, xve_adaptor); - break; + } + } + /* + * Update video overlay + */ + if (!VIAVidUpdateOverlay(pScrn, lpUpdateOverlay)) { + DBG_DD(ErrorF + (" via_video.c : call v4l updateoverlay fail. \n")); + } else { + DBG_DD(ErrorF(" via_video.c : PutImage done OK\n")); + viaXvError(pScrn, pPriv, xve_none); + return Success; + } + break; + } + default: + DBG_DD(ErrorF(" via_video.c : XVPort not supported\n")); + viaXvError(pScrn, pPriv, xve_adaptor); + break; } DBG_DD(ErrorF(" via_video.c : PutImage done OK\n")); viaXvError(pScrn, pPriv, xve_none); @@ -1483,94 +1481,96 @@ static int viaQueryImageAttributes(ScrnInfoPtr pScrn, - int id, unsigned short *w, unsigned short *h, int *pitches, int *offsets) + int id, unsigned short *w, unsigned short *h, int *pitches, + int *offsets) { int size, tmp; VIAPtr pVia = VIAPTR(pScrn); DBG_DD(ErrorF(" via_video.c : viaQueryImageAttributes : FourCC=0x%x, ", - id)); + id)); if ((!w) || (!h)) - return 0; + return 0; if (*w > VIA_MAX_XVIMAGE_X) - *w = VIA_MAX_XVIMAGE_X; + *w = VIA_MAX_XVIMAGE_X; if (*h > VIA_MAX_XVIMAGE_Y) - *h = VIA_MAX_XVIMAGE_Y; + *h = VIA_MAX_XVIMAGE_Y; *w = (*w + 1) & ~1; if (offsets) - offsets[0] = 0; + offsets[0] = 0; switch (id) { - case FOURCC_YV12: /*Planar format : YV12 -4:2:0 */ - *h = (*h + 1) & ~1; - size = *w; - if (pVia->useDmaBlit) - size = (size + 15) & ~15; - if (pitches) - pitches[0] = size; - size *= *h; - if (offsets) - offsets[1] = size; - tmp = (*w >> 1); - if (pVia->useDmaBlit) - tmp = (tmp + 15) & ~15; - if (pitches) - pitches[1] = pitches[2] = tmp; - tmp *= (*h >> 1); - size += tmp; - if (offsets) - offsets[2] = size; - size += tmp; - break; - case FOURCC_XVMC: - *h = (*h + 1) & ~1; + case FOURCC_YV12: /*Planar format : YV12 -4:2:0 */ + *h = (*h + 1) & ~1; + size = *w; + if (pVia->useDmaBlit) + size = (size + 15) & ~15; + if (pitches) + pitches[0] = size; + size *= *h; + if (offsets) + offsets[1] = size; + tmp = (*w >> 1); + if (pVia->useDmaBlit) + tmp = (tmp + 15) & ~15; + if (pitches) + pitches[1] = pitches[2] = tmp; + tmp *= (*h >> 1); + size += tmp; + if (offsets) + offsets[2] = size; + size += tmp; + break; + case FOURCC_XVMC: + *h = (*h + 1) & ~1; #ifdef XF86DRI - size = viaXvMCPutImageSize(pScrn); + size = viaXvMCPutImageSize(pScrn); #else - size = 0; + size = 0; #endif - if (pitches) - pitches[0] = size; - break; - case FOURCC_AI44: - case FOURCC_IA44: - size = *w * *h; - if (pitches) - pitches[0] = *w; - if (offsets) - offsets[0] = 0; - break; - case FOURCC_RV32: - size = *w << 2; - if (pVia->useDmaBlit) - size = (size + 15) & ~15; - if (pitches) - pitches[0] = size; - size *= *h; - break; - case FOURCC_UYVY: /*Packed format : UYVY -4:2:2 */ - case FOURCC_YUY2: /*Packed format : YUY2 -4:2:2 */ - case FOURCC_RV15: - case FOURCC_RV16: - default: - size = *w << 1; - if (pVia->useDmaBlit) - size = (size + 15) & ~15; - if (pitches) - pitches[0] = size; - size *= *h; - break; + if (pitches) + pitches[0] = size; + break; + case FOURCC_AI44: + case FOURCC_IA44: + size = *w * *h; + if (pitches) + pitches[0] = *w; + if (offsets) + offsets[0] = 0; + break; + case FOURCC_RV32: + size = *w << 2; + if (pVia->useDmaBlit) + size = (size + 15) & ~15; + if (pitches) + pitches[0] = size; + size *= *h; + break; + case FOURCC_UYVY: /*Packed format : UYVY -4:2:2 */ + case FOURCC_YUY2: /*Packed format : YUY2 -4:2:2 */ + case FOURCC_RV15: + case FOURCC_RV16: + default: + size = *w << 1; + if (pVia->useDmaBlit) + size = (size + 15) & ~15; + if (pitches) + pitches[0] = size; + size *= *h; + break; } if (pitches) - DBG_DD(ErrorF(" pitches[0]=%d, pitches[1]=%d, pitches[2]=%d, ", - pitches[0], pitches[1], pitches[2])); + DBG_DD(ErrorF(" pitches[0]=%d, pitches[1]=%d, pitches[2]=%d, ", + pitches[0], pitches[1], pitches[2])); if (offsets) - DBG_DD(ErrorF(" offsets[0]=%d, offsets[1]=%d, offsets[2]=%d, ", - offsets[0], offsets[1], offsets[2])); + DBG_DD(ErrorF(" offsets[0]=%d, offsets[1]=%d, offsets[2]=%d, ", + offsets[0], offsets[1], offsets[2])); + DBG_DD(ErrorF(" width=%d, height=%d \n", *w, *h)); return size; @@ -1595,9 +1595,9 @@ static void nv12Blit(unsigned char *nv12Chroma, - const unsigned char *uBuffer, - const unsigned char *vBuffer, - unsigned width, unsigned srcPitch, unsigned dstPitch, unsigned lines) + const unsigned char *uBuffer, + const unsigned char *vBuffer, + unsigned width, unsigned srcPitch, unsigned dstPitch, unsigned lines) { int x; int dstAdd; @@ -1607,33 +1607,33 @@ srcAdd = srcPitch - width; while (lines--) { - x = width; - while (x > 3) { - register CARD32 - dst32, - src32 = *((CARD32 *) vBuffer), - src32_2 = *((CARD32 *) uBuffer); - dst32 = - (src32_2 & 0xff) | ((src32 & 0xff) << 8) | - ((src32_2 & 0x0000ff00) << 8) | ((src32 & 0x0000ff00) << 16); - *((CARD32 *) nv12Chroma) = dst32; - nv12Chroma += 4; - dst32 = - ((src32_2 & 0x00ff0000) >> 16) | ((src32 & 0x00ff0000) >> 8) | - ((src32_2 & 0xff000000) >> 8) | (src32 & 0xff000000); - *((CARD32 *) nv12Chroma) = dst32; - nv12Chroma += 4; - x -= 4; - vBuffer += 4; - uBuffer += 4; - } - while (x--) { - *nv12Chroma++ = *uBuffer++; - *nv12Chroma++ = *vBuffer++; - } - nv12Chroma += dstAdd; - vBuffer += srcAdd; - uBuffer += srcAdd; + x = width; + while (x > 3) { + register CARD32 + dst32, + src32 = *((CARD32 *) vBuffer), + src32_2 = *((CARD32 *) uBuffer); + dst32 = + (src32_2 & 0xff) | ((src32 & 0xff) << 8) | + ((src32_2 & 0x0000ff00) << 8) | ((src32 & 0x0000ff00) << 16); + *((CARD32 *) nv12Chroma) = dst32; + nv12Chroma += 4; + dst32 = + ((src32_2 & 0x00ff0000) >> 16) | ((src32 & 0x00ff0000) >> 8) | + ((src32_2 & 0xff000000) >> 8) | (src32 & 0xff000000); + *((CARD32 *) nv12Chroma) = dst32; + nv12Chroma += 4; + x -= 4; + vBuffer += 4; + uBuffer += 4; + } + while (x--) { + *nv12Chroma++ = *uBuffer++; + *nv12Chroma++ = *vBuffer++; + } + nv12Chroma += dstAdd; + vBuffer += srcAdd; + uBuffer += srcAdd; } } Index: src/via_mode.c =================================================================== --- src/via_mode.c (revision 487) +++ src/via_mode.c (revision 553) @@ -131,7 +131,7 @@ || !pBIOSInfo->TVPrintRegs) { xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "ViaTVInit: TVEncoder was not properly initialised."); + "ViaTVInit: TVEncoder was not properly initialised.\n"); xf86DestroyI2CDevRec(pBIOSInfo->TVI2CDev, TRUE); pBIOSInfo->TVI2CDev = NULL; @@ -284,7 +284,7 @@ */ if (pVia->Chipset == VIA_P4M900 && pBIOSInfo->PanelPresent) { xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "Will not try to detect TV encoder."); + "Will not try to detect TV encoder.\n"); } else { /* TV encoder */ if (ViaTVDetect(pScrn) && ViaTVInit(pScrn)) { Index: src/via_memcpy.c =================================================================== --- src/via_memcpy.c (revision 487) +++ src/via_memcpy.c (revision 553) @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004 Thomas Hellstrom, All Rights Reserved. + * Copyright (C) 2004 Thomas Hellström, All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -31,10 +31,10 @@ #include "compiler.h" -#define BSIZ 2048 /* Size of /proc/cpuinfo buffer */ -#define BSIZW 720 /* Typical Copy Width (YUV420) Copy. */ -#define BSIZA 736 /* Multiple of 32 bytes */ -#define BSIZH 576 /* Typical Copy Hight */ +#define BSIZ 2048 /* size of /proc/cpuinfo buffer */ +#define BSIZW 720 /* typical copy width (YUV420) */ +#define BSIZA 736 /* multiple of 32 bytes */ +#define BSIZH 576 /* typical copy height */ #define SSE_PREFETCH " prefetchnta " #define FENCE __asm__ __volatile__ ("sfence":::"memory"); @@ -72,12 +72,11 @@ : : "r" (from) ); - -#define small_memcpy(to,from,n) \ +#define small_memcpy(to, from, n) \ { \ __asm__ __volatile__( \ "movl %2,%%ecx\n\t" \ - "sarl $2,%%ecx\n\t" \ + "sarl $2,%%ecx\n\t" \ "rep ; movsl\n\t" \ "testb $2,%b2\n\t" \ "je 1f\n\t" \ @@ -92,11 +91,11 @@ } -#define SSE_CPY(prefetch,from,to,dummy,lcnt) \ - if ((unsigned long) from & 15) { \ +#define SSE_CPY(prefetch, from, to, dummy, lcnt) \ + if ((unsigned long) from & 15) { \ __asm__ __volatile__ ( \ "1:\n" \ - prefetch "320(%1)\n" \ + prefetch "320(%1)\n" \ " movups (%1), %%xmm0\n" \ " movups 16(%1), %%xmm1\n" \ " movntps %%xmm0, (%0)\n" \ @@ -120,7 +119,7 @@ " movaps 16(%1), %%xmm1\n" \ " movntps %%xmm0, (%0)\n" \ " movntps %%xmm1, 16(%0)\n" \ - prefetch "352(%1)\n" \ + prefetch "352(%1)\n" \ " movaps 32(%1), %%xmm2\n" \ " movaps 48(%1), %%xmm3\n" \ " movntps %%xmm2, 32(%0)\n" \ @@ -133,7 +132,7 @@ :"0" (to), "1" (from), "2" (lcnt): "memory"); \ } -#define MMX_CPY(prefetch,from,to,dummy,lcnt) \ +#define MMX_CPY(prefetch, from, to, dummy, lcnt) \ __asm__ __volatile__ ( \ "1:\n" \ prefetch "320(%1)\n" \ @@ -159,9 +158,9 @@ " decl %2\n" \ " jne 1b\n" \ :"=&D"(to), "=&S"(from), "=&r"(dummy) \ - :"0" (to), "1" (from), "2" (lcnt) : "memory"); + :"0" (to), "1" (from), "2" (lcnt) : "memory"); -#define MMXEXT_CPY(prefetch,from,to,dummy,lcnt) \ +#define MMXEXT_CPY(prefetch, from, to, dummy, lcnt) \ __asm__ __volatile__ ( \ ".p2align 4,,7\n" \ "1:\n" \ @@ -188,10 +187,10 @@ " decl %2\n" \ " jne 1b\n" \ :"=&D"(to), "=&S"(from), "=&r"(dummy) \ - :"0" (to), "1" (from), "2" (lcnt) : "memory"); + :"0" (to), "1" (from), "2" (lcnt) : "memory"); -#define PREFETCH_FUNC(prefix,itype,ptype,begin,fence) \ +#define PREFETCH_FUNC(prefix, itype, ptype, begin, fence) \ \ static void prefix##_YUV42X(unsigned char *to, \ const unsigned char *from, \ @@ -199,20 +198,16 @@ int w, \ int h, \ int yuv422) \ - \ { \ - int \ - dadd,rest,count,hc,lcnt; \ + int dadd, rest, count, hc, lcnt; \ register int dummy; \ - PREFETCH1(ptype##_PREFETCH,from); \ + PREFETCH1(ptype##_PREFETCH, from); \ begin; \ count = 2; \ \ - /* \ - * If destination pitch and width ar equal, do it all in one go. \ - */ \ + /* If destination pitch equals width, do it all in one go. */ \ \ - if ( yuv422 ) { \ + if (yuv422) { \ w <<= 1; \ if (w == dstPitch) { \ w *= h; \ @@ -232,20 +227,19 @@ \ lcnt = w >> 6; \ rest = w & 63; \ - while(count--) { \ + while (count--) { \ hc = h; \ lcnt = w >> 6; \ rest = w & 63; \ dadd = dstPitch - w; \ - while(hc--) { \ + while (hc--) { \ if (lcnt) { \ - itype##_CPY(ptype##_PREFETCH,from,to,dummy, \ - lcnt); \ + itype##_CPY(ptype##_PREFETCH, from, to, dummy, lcnt); \ } \ if (rest) { \ - PREFETCH2(ptype##_PREFETCH,from); \ + PREFETCH2(ptype##_PREFETCH, from); \ small_memcpy(to, from, rest); \ - PREFETCH3(ptype##_PREFETCH,from); \ + PREFETCH3(ptype##_PREFETCH, from); \ } \ to += dadd; \ } \ @@ -255,36 +249,33 @@ } \ if (lcnt > 5) { \ lcnt -= 5; \ - itype##_CPY(ptype##_PREFETCH,from,to,dummy,lcnt); \ + itype##_CPY(ptype##_PREFETCH, from, to, dummy, lcnt); \ lcnt = 5; \ } \ if (lcnt) { \ - itype##_CPY("#",from,to,dummy,lcnt); \ + itype##_CPY("#", from, to, dummy, lcnt); \ } \ if (rest) small_memcpy(to, from, rest); \ fence; \ } -#define NOPREFETCH_FUNC(prefix,itype,begin,fence) \ +#define NOPREFETCH_FUNC(prefix, itype, begin, fence) \ static void prefix##_YUV42X(unsigned char *to, \ const unsigned char *from, \ int dstPitch, \ int w, \ int h, \ int yuv422) \ - \ - { \ - int \ - dadd,rest,count,hc,lcnt; \ - register int dummy; \ - begin; \ - count = 2; \ - \ - /* \ - * If destination pitch and width ar equal, do it all in one go. \ - */ \ \ - if ( yuv422 ) { \ + { \ + int dadd, rest, count, hc, lcnt; \ + register int dummy; \ + begin; \ + count = 2; \ + \ + /* If destination pitch equals width, do it all in one go. */ \ + \ + if (yuv422) { \ w <<= 1; \ count = 1; \ if (w == dstPitch) { \ @@ -301,14 +292,14 @@ \ lcnt = w >> 6; \ rest = w & 63; \ - while(count--) { \ + while (count--) { \ hc = h; \ dadd = dstPitch - w; \ lcnt = w >> 6; \ rest = w & 63; \ - while(hc--) { \ + while (hc--) { \ if (lcnt) { \ - itype##_CPY("#",from,to,dummy,lcnt); \ + itype##_CPY("#", from, to, dummy, lcnt); \ } \ if (rest) small_memcpy(to, from, rest); \ to += dadd; \ @@ -317,379 +308,364 @@ dstPitch >>= 1; \ } \ fence; \ - } \ + } -#if !defined(__i386__) || (defined(linux) && defined(__i386__)) -static void libc_YUV42X(unsigned char *dst, - const unsigned char *src, - int dstPitch, - int w, - int h, int yuv422) { - if ( yuv422 ) w <<= 1; +#if !defined(__i386__) || (defined(linux) && defined(__i386__)) + +static void +libc_YUV42X(unsigned char *dst, const unsigned char *src, + int dstPitch, int w, int h, int yuv422) +{ + if (yuv422) + w <<= 1; if (dstPitch == w) { - int size = h*((yuv422) ? w : (w + (w >> 1))); - xf86memcpy(dst, src, size); - return; + int size = h * ((yuv422) ? w : (w + (w >> 1))); + + memcpy(dst, src, size); + return; } else { - int count; + int count; - /* copy Y component to video memory */ + /* Copy Y component to video memory. */ + count = h; + while (count--) { + memcpy(dst, src, w); + src += w; + dst += dstPitch; + } - count = h; - while(count--) { - xf86memcpy(dst, src, w); - src += w; - dst += dstPitch; - } - - /* UV component is 1/2 of Y */ + /* UV component is 1/2 of Y. */ + if (!yuv422) { + w >>= 1; + dstPitch >>= 1; - if (! yuv422 ) { - - w >>= 1; - dstPitch >>= 1; - - /* copy V(Cr),U(Cb) components to video memory */ - - count = h; - while(count--) { - xf86memcpy(dst, src, w); - src += w; - dst += dstPitch; - } - } + /* Copy V(Cr),U(Cb) components to video memory. */ + count = h; + while (count--) { + memcpy(dst, src, w); + src += w; + dst += dstPitch; + } + } } } #endif + #ifdef __i386__ - - -/* linux kernel __memcpy */ -static __inline void * __memcpy(void * to, const void * from, size_t n) +/* Linux kernel __memcpy. */ +static __inline void * +__memcpy(void *to, const void *from, size_t n) { - int d1,d2,d3; + int d1, d2, d3; __asm__ __volatile__( - "rep ; movsl\n\t" - "testb $2,%b4\n\t" - "je 1f\n\t" - "movsw\n" - "1:\ttestb $1,%b4\n\t" - "je 2f\n\t" - "movsb\n" - "2:" - : "=&c" (d1), "=&D" (d2), "=&S" (d3) - :"0" (n >> 2), "q" (n),"1" ((long) to),"2" ((long) from) - : "memory"); - + "rep ; movsl\n\t" + "testb $2,%b4\n\t" + "je 1f\n\t" + "movsw\n" + "1:\ttestb $1,%b4\n\t" + "je 2f\n\t" + "movsb\n" + "2:" + :"=&c"(d1), "=&D"(d2), "=&S"(d3) + :"0"(n >> 2), "q"(n), "1"((long)to), "2"((long)from) + :"memory"); + return (to); } -static void kernel_YUV42X(unsigned char *dst, - const unsigned char *src, - int dstPitch, - int w, - int h, int yuv422) { - - if ( yuv422 ) w <<= 1; +static void +kernel_YUV42X(unsigned char *dst, const unsigned char *src, + int dstPitch, int w, int h, int yuv422) +{ + if (yuv422) + w <<= 1; if (dstPitch == w) { - int size = h*((yuv422) ? w : (w + (w >> 1))); - __memcpy(dst, src, size); - return; + int size = h * ((yuv422) ? w : (w + (w >> 1))); + + __memcpy(dst, src, size); + return; } else { - int count; + int count; - /* copy Y component to video memory */ + /* Copy Y component to video memory. */ + count = h; + while (count--) { + __memcpy(dst, src, w); + src += w; + dst += dstPitch; + } - count = h; - while(count--) { - __memcpy(dst, src, w); - src += w; - dst += dstPitch; - } - - /* UV component is 1/2 of Y */ + /* UV component is 1/2 of Y. */ + if (!yuv422) { - if (! yuv422 ) { + w >>= 1; + dstPitch >>= 1; - w >>= 1; - dstPitch >>= 1; - - /* copy V(Cr),U(Cb) components to video memory */ - - count = h; - while(count--) { - __memcpy(dst, src, w); - src += w; - dst += dstPitch; - } - } + /* Copy V(Cr),U(Cb) components to video memory. */ + count = h; + while (count--) { + __memcpy(dst, src, w); + src += w; + dst += dstPitch; + } + } } } #ifdef linux +PREFETCH_FUNC(sse, SSE, SSE,, FENCE) +PREFETCH_FUNC(mmxext, MMXEXT, SSE, EMMS, FENCEMMS) +PREFETCH_FUNC(now, MMX, NOW, FEMMS, FEMMS) +NOPREFETCH_FUNC(mmx, MMX, EMMS, EMMS) -PREFETCH_FUNC(sse,SSE,SSE,,FENCE) -PREFETCH_FUNC(mmxext,MMXEXT,SSE,EMMS,FENCEMMS) -PREFETCH_FUNC(now,MMX,NOW,FEMMS,FEMMS) -NOPREFETCH_FUNC(mmx,MMX,EMMS,EMMS) - - -static void * kernel_memcpy(void * to, const void * from, size_t len) { +static void +*kernel_memcpy(void *to, const void *from, size_t len) +{ return __memcpy(to, from, len); } -static unsigned fastrdtsc(void) +static unsigned +fastrdtsc(void) { unsigned eax; + __asm__ volatile ("\t" - "pushl %%ebx\n\t" - "cpuid\n\t" - ".byte 0x0f, 0x31\n\t" - "popl %%ebx\n" - : "=a" (eax) - : "0"(0) - : "ecx","edx","cc"); - return eax; + "pushl %%ebx\n\t" + "cpuid\n\t" + ".byte 0x0f, 0x31\n\t" + "popl %%ebx\n" + :"=a" (eax) + :"0"(0) + :"ecx", "edx", "cc"); + + return eax; } +static unsigned +time_function(vidCopyFunc mf, unsigned char *buf1, unsigned char *buf2) +{ + unsigned t, t2; -static unsigned time_function(vidCopyFunc mf,unsigned char *buf1, - unsigned char *buf2) { - unsigned t,t2; - t = fastrdtsc(); - (*mf)(buf1,buf2,BSIZA,BSIZW,BSIZH,0); + (*mf) (buf1, buf2, BSIZA, BSIZW, BSIZH, 0); - t2 = fastrdtsc(); - return ((t < t2) ? t2 - t : 0xFFFFFFFFU - (t - t2 -1)); + t2 = fastrdtsc(); + return ((t < t2) ? t2 - t : 0xFFFFFFFFU - (t - t2 - 1)); } -enum {libc=0,kernel,sse,mmx,now,mmxext,totNum}; +enum +{ libc = 0, kernel, sse, mmx, now, mmxext, totNum }; - -typedef struct { +typedef struct +{ vidCopyFunc mFunc; - char *mName,**cpuFlag; + char *mName, **cpuFlag; } McFuncData; -static char *libc_cpuflags[] = {" ",0}; -static char *kernel_cpuflags[] = {" ",0}; -static char *sse_cpuflags[] = {" sse ",0}; -static char *mmx_cpuflags[] = {" mmx ",0}; -static char *now_cpuflags[] = {" 3dnow ",0}; -static char *mmx2_cpuflags[] = {" mmxext ", " sse ",0}; +static char *libc_cpuflags[] = { " ", 0 }; +static char *kernel_cpuflags[] = { " ", 0 }; +static char *sse_cpuflags[] = { " sse ", 0 }; +static char *mmx_cpuflags[] = { " mmx ", 0 }; +static char *now_cpuflags[] = { " 3dnow ", 0 }; +static char *mmx2_cpuflags[] = { " mmxext ", " sse ", 0 }; -static McFuncData mcFunctions[totNum] = - {{libc_YUV42X,"libc",libc_cpuflags}, - {kernel_YUV42X,"kernel",kernel_cpuflags}, - {sse_YUV42X,"SSE",sse_cpuflags}, - {mmx_YUV42X,"MMX",mmx_cpuflags}, - {now_YUV42X,"3DNow!",now_cpuflags}, - {mmxext_YUV42X,"MMX2",mmx2_cpuflags}}; +static McFuncData mcFunctions[totNum] = { +{libc_YUV42X, "libc", libc_cpuflags}, +{kernel_YUV42X, "kernel", kernel_cpuflags}, +{sse_YUV42X, "SSE", sse_cpuflags}, +{mmx_YUV42X, "MMX", mmx_cpuflags}, +{now_YUV42X, "3DNow!", now_cpuflags}, +{mmxext_YUV42X, "MMX2", mmx2_cpuflags} +}; -static int flagValid(const char *cpuinfo, char *flag) { - - const char *flagLoc,*nextProc; +static int +flagValid(const char *cpuinfo, char *flag) +{ + const char *flagLoc, *nextProc; int located = 0; while ((cpuinfo = strstr(cpuinfo, "processor\t:"))) { located = 1; cpuinfo += 11; - if ((flagLoc = strstr(cpuinfo,flag))) { - if ((nextProc = strstr(cpuinfo,"processor\t:"))) { - if (nextProc < flagLoc) return 0; - } - } else { - return 0; - } + if ((flagLoc = strstr(cpuinfo, flag))) { + if ((nextProc = strstr(cpuinfo, "processor\t:"))) { + if (nextProc < flagLoc) + return 0; + } + } else { + return 0; + } } return located; } - -static int cpuValid(const char *cpuinfo, char **flags) { - - for(; *flags != 0; flags++) { - if (flagValid(cpuinfo, *flags)) return 1; +static int +cpuValid(const char *cpuinfo, char **flags) +{ + for (; *flags != 0; flags++) { + if (flagValid(cpuinfo, *flags)) + return 1; } return 0; } -#endif +#endif /* linux */ +/* + * Benchmark the video copy routines and choose the fastest. + */ +vidCopyFunc +viaVidCopyInit(char *copyType, ScreenPtr pScreen) +{ + ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; -vidCopyFunc viaVidCopyInit( char *copyType, - ScreenPtr pScreen ) { - - /* - * Benchmark the video copy routines using a relevant benchmark - * and choose the fastest. - */ - - ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; #ifdef linux char buf[BSIZ]; - unsigned char *buf1,*buf2,*buf3; - char *tmpBuf,*endBuf; - int count,j,bestSoFar; - unsigned best,tmp,testSize,alignSize,tmp2; + unsigned char *buf1, *buf2, *buf3; + char *tmpBuf, *endBuf; + int count, j, bestSoFar; + unsigned best, tmp, testSize, alignSize, tmp2; VIAMem tmpFbBuffer; McFuncData *curData; FILE *cpuInfoFile; double cpuFreq; VIAPtr pVia = VIAPTR(pScrn); - if (NULL == (cpuInfoFile = fopen("/proc/cpuinfo","r"))) { - return libc_YUV42X; + if (NULL == (cpuInfoFile = fopen("/proc/cpuinfo", "r"))) { + return libc_YUV42X; } - count = fread(buf,1,BSIZ,cpuInfoFile); + count = fread(buf, 1, BSIZ, cpuInfoFile); if (ferror(cpuInfoFile)) { - fclose(cpuInfoFile); - return libc_YUV42X; + fclose(cpuInfoFile); + return libc_YUV42X; } fclose(cpuInfoFile); if (BSIZ == count) { - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "\"/proc/cpuinfo\" file too long. " - "Using Linux kernel memcpy.\n"); - return libc_YUV42X; + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, + "\"/proc/cpuinfo\" file too long. " + "Using Linux kernel memcpy.\n"); + return libc_YUV42X; } buf[count] = 0; - while(count--) - if ('\n' == buf[count]) buf[count] = ' '; - - /* - * Extract the cpu frequency. - */ - - cpuFreq = 0.; + while (count--) + if ('\n' == buf[count]) + buf[count] = ' '; - if (NULL != (tmpBuf = strstr(buf,"cpu MHz"))) { - if (NULL != (tmpBuf = strstr(tmpBuf,":") + 1)) { - cpuFreq = strtod(tmpBuf,&endBuf); - if (endBuf == tmpBuf) tmpBuf = NULL; - } + /* Extract the CPU frequency. */ + cpuFreq = 0.; + if (NULL != (tmpBuf = strstr(buf, "cpu MHz"))) { + if (NULL != (tmpBuf = strstr(tmpBuf, ":") + 1)) { + cpuFreq = strtod(tmpBuf, &endBuf); + if (endBuf == tmpBuf) + tmpBuf = NULL; + } } - - alignSize = BSIZH*(BSIZA + (BSIZA >> 1)); - testSize = BSIZH*(BSIZW + (BSIZW >> 1)); + + alignSize = BSIZH * (BSIZA + (BSIZA >> 1)); + testSize = BSIZH * (BSIZW + (BSIZW >> 1)); tmpFbBuffer.pool = 0; /* * Allocate an area of offscreen FB memory, (buf1), a simulated video * player buffer (buf2) and a pool of uninitialized "video" data (buf3). - */ + */ if (VIAAllocLinear(&tmpFbBuffer, pScrn, alignSize + 31)) - return libc_YUV42X; + return libc_YUV42X; if (NULL == (buf2 = (unsigned char *)xalloc(testSize))) { - VIAFreeLinear(&tmpFbBuffer); - return libc_YUV42X; + VIAFreeLinear(&tmpFbBuffer); + return libc_YUV42X; } if (NULL == (buf3 = (unsigned char *)xalloc(testSize))) { - xfree(buf2); - VIAFreeLinear(&tmpFbBuffer); - return libc_YUV42X; + xfree(buf2); + VIAFreeLinear(&tmpFbBuffer); + return libc_YUV42X; } buf1 = (unsigned char *)pVia->FBBase + tmpFbBuffer.base; - /* - * Align the frame buffer destination memory to a 32 byte boundary. - */ + /* Align the frame buffer destination memory to a 32 byte boundary. */ + if ((unsigned long)buf1 & 31) + buf1 += (32 - ((unsigned long)buf1 & 31)); - if ((unsigned long)buf1 & 31) - buf1 += (32 - ((unsigned long)buf1 & 31)); - bestSoFar = 0; best = 0xFFFFFFFFU; - - /* - * Make probable buf1 and buf2 are not paged out by - * referencing them. - */ - libc_YUV42X(buf1,buf2,BSIZA,BSIZW,BSIZH,0); + /* Make probable that buf1 and buf2 are in memory by referencing them. */ + libc_YUV42X(buf1, buf2, BSIZA, BSIZW, BSIZH, 0); - xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "Benchmarking %s copy. Less is better.\n",copyType); - for (j=0; jcpuFlag)) { + if (cpuValid(buf, curData->cpuFlag)) { - /* - * Simulate setup of the video buffer. - */ + /* Simulate setup of the video buffer. */ + kernel_memcpy(buf2, buf3, testSize); - kernel_memcpy(buf2,buf3,testSize); + /* Copy the video buffer to frame-buffer memory. */ + tmp = time_function(curData->mFunc, buf1, buf2); - /* - * Copy the video buffer to frame-buffer memory. - */ + /* Do it again to avoid context-switch effects. */ + kernel_memcpy(buf2, buf3, testSize); + tmp2 = time_function(curData->mFunc, buf1, buf2); + tmp = (tmp2 < tmp) ? tmp2 : tmp; - tmp = time_function(curData->mFunc,buf1,buf2); - - /* - * Do it again to avoid context switch effects. - */ - - kernel_memcpy(buf2,buf3,testSize); - tmp2 = time_function(curData->mFunc,buf1,buf2); - tmp = (tmp2 < tmp) ? tmp2 : tmp; - - if (NULL == tmpBuf) { - xf86DrvMsg(pScrn->scrnIndex, X_PROBED, - "Timed %6s YUV420 copy... %u.\n",curData->mName,tmp); - } else { - xf86DrvMsg(pScrn->scrnIndex, X_PROBED, - "Timed %6s YUV420 copy... %u. " - "Throughput: %.1f MiB/s.\n",curData->mName,tmp, - cpuFreq * 1.e6 * (double)testSize / - ((double)(tmp) * (double)(0x100000))); - } - if (tmp < best) { - best = tmp; - bestSoFar = j; - } - } else { - xf86DrvMsg(pScrn->scrnIndex, X_PROBED, - "Ditch %6s YUV420 copy... Not supported by CPU.\n", - curData->mName); - - } + if (NULL == tmpBuf) { + xf86DrvMsg(pScrn->scrnIndex, X_PROBED, + "Timed %6s YUV420 copy... %u.\n", + curData->mName, tmp); + } else { + xf86DrvMsg(pScrn->scrnIndex, X_PROBED, + "Timed %6s YUV420 copy... %u. " + "Throughput: %.1f MiB/s.\n", + curData->mName, tmp, + cpuFreq * 1.e6 * (double)testSize / + ((double)(tmp) * (double)(0x100000))); + } + if (tmp < best) { + best = tmp; + bestSoFar = j; + } + } else { + xf86DrvMsg(pScrn->scrnIndex, X_PROBED, + "Ditching %6s YUV420 copy. Not supported by CPU.\n", + curData->mName); + } } xfree(buf3); xfree(buf2); VIAFreeLinear(&tmpFbBuffer); xf86DrvMsg(pScrn->scrnIndex, X_PROBED, - "Using %s YUV42X copy for %s.\n",mcFunctions[bestSoFar].mName, - copyType); + "Using %s YUV42X copy for %s.\n", + mcFunctions[bestSoFar].mName, copyType); return mcFunctions[bestSoFar].mFunc; -#endif +#else xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "Using copy of Linux kernel memcpy for video.\n"); + "Using Linux kernel memcpy for video.\n"); return kernel_YUV42X; +#endif /* linux */ } #else - -vidCopyFunc viaVidCopyInit( char *copyType, - ScreenPtr pScreen ) { - ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; + +vidCopyFunc +viaVidCopyInit(char *copyType, ScreenPtr pScreen) +{ + ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; + xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "Using default xfree86 memcpy for video.\n"); + "Using default xfree86 memcpy for video.\n"); return libc_YUV42X; } -#endif - +#endif /* __i386__ */ Index: src/via_driver.c =================================================================== --- src/via_driver.c (revision 487) +++ src/via_driver.c (revision 553) @@ -50,7 +50,43 @@ /* Prototypes. */ static void VIAIdentify(int flags); + +#ifdef XSERVER_LIBPCIACCESS +struct pci_device * +via_pci_device(const struct pci_slot_match *bridge_match) +{ + struct pci_device_iterator *slot_iterator; + struct pci_device *bridge; + + slot_iterator = pci_slot_match_iterator_create(bridge_match); + bridge = pci_device_next(slot_iterator); + pci_iterator_destroy(slot_iterator); + return bridge; +} + +struct pci_device * +via_host_bridge(void) +{ + static const struct pci_slot_match bridge_match = { + 0, 0, 0, 0, 0 + }; + return via_pci_device(&bridge_match); +} + +viaPciDeviceVga(void) +{ + static const struct pci_slot_match bridge_match = { + 0, 0, 0, 3, 0 + }; + return via_pci_device(&bridge_match); +} + +static Bool via_pci_probe(DriverPtr drv, int entity_num, + struct pci_device *dev, intptr_t match_data); +#else /* !XSERVER_LIBPCIACCESS */ static Bool VIAProbe(DriverPtr drv, int flags); +#endif + static Bool VIASetupDefaultOptions(ScrnInfoPtr pScrn); static Bool VIAPreInit(ScrnInfoPtr pScrn, int flags); static Bool VIAEnterVT(int scrnIndex, int flags); @@ -75,15 +111,43 @@ static void VIALoadRgbLut(ScrnInfoPtr pScrn, int numColors, int *indices, LOCO *colors, VisualPtr pVisual); +#ifdef XSERVER_LIBPCIACCESS -DriverRec VIA = { +#define VIA_DEVICE_MATCH(d,i) \ + { 0x1106, (d), PCI_MATCH_ANY, PCI_MATCH_ANY, 0, 0, (i) } + +static const struct pci_id_match via_device_match[] = { + VIA_DEVICE_MATCH (PCI_CHIP_VT3204, 0 ), + VIA_DEVICE_MATCH (PCI_CHIP_VT3259, 0 ), + VIA_DEVICE_MATCH (PCI_CHIP_CLE3122, 0 ), + VIA_DEVICE_MATCH (PCI_CHIP_VT3205, 0 ), + VIA_DEVICE_MATCH (PCI_CHIP_VT3314, 0 ), + VIA_DEVICE_MATCH (PCI_CHIP_VT3336, 0 ), + VIA_DEVICE_MATCH (PCI_CHIP_VT3364, 0 ), + VIA_DEVICE_MATCH (PCI_CHIP_VT3324, 0 ), + VIA_DEVICE_MATCH (PCI_CHIP_VT3327, 0 ), + { 0, 0, 0 }, +}; + +#endif /* XSERVER_LIBPCIACCESS */ + +_X_EXPORT DriverRec VIA = { VIA_VERSION, DRIVER_NAME, VIAIdentify, +#ifdef XSERVER_LIBPCIACCESS + NULL, +#else VIAProbe, +#endif VIAAvailableOptions, NULL, - 0 + 0, + NULL, +#ifdef XSERVER_LIBPCIACCESS + via_device_match, + via_pci_probe +#endif }; /* Supported chipsets */ @@ -116,7 +180,8 @@ int gVIAEntityIndex = -1; -typedef enum { +typedef enum +{ #ifdef HAVE_DEBUG OPTION_PRINTVGAREGS, OPTION_PRINTTVREGS, @@ -130,7 +195,6 @@ OPTION_EXA_SCRATCH_SIZE, #endif OPTION_SWCURSOR, - OPTION_HWCURSOR, OPTION_SHADOW_FB, OPTION_ROTATE, OPTION_VIDEORAM, @@ -140,11 +204,9 @@ OPTION_PANELSIZE, OPTION_FORCEPANEL, OPTION_TVDOTCRAWL, - OPTION_TVPROGRESSIVE, OPTION_TVTYPE, OPTION_TVOUTPUT, OPTION_DISABLEVQ, - OPTION_DRIXINERAMA, OPTION_DISABLEIRQ, OPTION_TVDEFLICKER, OPTION_AGP_DMA, @@ -162,7 +224,7 @@ {OPTION_PRINTVGAREGS, "PrintVGARegs", OPTV_BOOLEAN, {0}, FALSE}, {OPTION_PRINTTVREGS, "PrintTVRegs", OPTV_BOOLEAN, {0}, FALSE}, {OPTION_I2CSCAN, "I2CScan", OPTV_BOOLEAN, {0}, FALSE}, -#endif +#endif {OPTION_VBEMODES, "VBEModes", OPTV_BOOLEAN, {0}, FALSE}, {OPTION_NOACCEL, "NoAccel", OPTV_BOOLEAN, {0}, FALSE}, #ifdef VIA_HAVE_EXA @@ -170,7 +232,6 @@ {OPTION_EXA_NOCOMPOSITE, "ExaNoComposite", OPTV_BOOLEAN, {0}, FALSE}, {OPTION_EXA_SCRATCH_SIZE, "ExaScratchSize", OPTV_INTEGER, {0}, FALSE}, #endif - {OPTION_HWCURSOR, "HWCursor", OPTV_BOOLEAN, {0}, FALSE}, {OPTION_SWCURSOR, "SWCursor", OPTV_BOOLEAN, {0}, FALSE}, {OPTION_SHADOW_FB, "ShadowFB", OPTV_BOOLEAN, {0}, FALSE}, {OPTION_ROTATE, "Rotate", OPTV_ANYSTR, {0}, FALSE}, @@ -183,7 +244,6 @@ {OPTION_FORCEPANEL, "ForcePanel", OPTV_BOOLEAN, {0}, FALSE}, {OPTION_TVDOTCRAWL, "TVDotCrawl", OPTV_BOOLEAN, {0}, FALSE}, {OPTION_TVDEFLICKER, "TVDeflicker", OPTV_INTEGER, {0}, FALSE}, - {OPTION_TVPROGRESSIVE, "TVProgressive", OPTV_BOOLEAN, {0}, FALSE}, {OPTION_TVTYPE, "TVType", OPTV_ANYSTR, {0}, FALSE}, {OPTION_TVOUTPUT, "TVOutput", OPTV_ANYSTR, {0}, FALSE}, {OPTION_DISABLEVQ, "DisableVQ", OPTV_BOOLEAN, {0}, FALSE}, @@ -288,20 +348,20 @@ #ifdef VIA_HAVE_EXA static const char *exaSymbols[] = { - "exaGetVersion", - "exaDriverInit", - "exaDriverFini", - "exaOffscreenAlloc", - "exaOffscreenFree", - "exaGetPixmapPitch", - "exaGetPixmapOffset", - "exaWaitSync", + "exaGetVersion", + "exaDriverInit", + "exaDriverFini", + "exaOffscreenAlloc", + "exaOffscreenFree", + "exaGetPixmapPitch", + "exaGetPixmapOffset", + "exaWaitSync", #if (EXA_VERSION_MAJOR >= 2) - "exaDriverAlloc", + "exaDriverAlloc", #else - "exaGetVersion", + "exaGetVersion", #endif - NULL + NULL }; #endif @@ -386,8 +446,8 @@ static MODULESETUPPROTO(VIASetup); static XF86ModuleVersionInfo VIAVersRec = { - "via", - MODULEVENDORSTRING, + "openchrome", + "http://openchrome.org/", MODINFOSTRING1, MODINFOSTRING2, #ifdef XORG_VERSION_CURRENT @@ -402,9 +462,8 @@ {0, 0, 0, 0} }; -XF86ModuleData openchromeModuleData = { &VIAVersRec, VIASetup, NULL }; +_X_EXPORT XF86ModuleData openchromeModuleData = { &VIAVersRec, VIASetup, NULL }; - static pointer VIASetup(pointer module, pointer opts, int *errmaj, int *errmin) { @@ -412,7 +471,13 @@ if (!setupDone) { setupDone = TRUE; - xf86AddDriver(&VIA, module, 0); + xf86AddDriver(&VIA, module, +#ifdef XSERVER_LIBPCIACCESS + HaveDriverFuncs +#else + 0 +#endif + ); LoaderRefSymLists(vgaHWSymbols, #ifdef USE_FB fbSymbols, @@ -422,15 +487,15 @@ ramdacSymbols, xaaSymbols, #ifdef VIA_HAVE_EXA - exaSymbols, + exaSymbols, #endif shadowSymbols, vbeSymbols, i2cSymbols, ddcSymbols, #ifdef XF86DRI - drmSymbols, - driSymbols, + drmSymbols, + driSymbols, #endif NULL); @@ -445,38 +510,41 @@ #endif /* XFree86LOADER */ -static Bool VIAGetRec(ScrnInfoPtr pScrn) +static Bool +VIAGetRec(ScrnInfoPtr pScrn) { DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIAGetRec\n")); if (pScrn->driverPrivate) return TRUE; pScrn->driverPrivate = xnfcalloc(sizeof(VIARec), 1); - ((VIARec *)(pScrn->driverPrivate))->pBIOSInfo = - xnfcalloc(sizeof(VIABIOSInfoRec), 1); - ((VIARec *)(pScrn->driverPrivate))->pBIOSInfo->scrnIndex = - pScrn->scrnIndex; - ((VIARec *)(pScrn->driverPrivate))->pBIOSInfo->TVI2CDev = NULL; + ((VIARec *) (pScrn->driverPrivate))->pBIOSInfo = + xnfcalloc(sizeof(VIABIOSInfoRec), 1); + ((VIARec *) (pScrn->driverPrivate))->pBIOSInfo->scrnIndex = + pScrn->scrnIndex; + ((VIARec *) (pScrn->driverPrivate))->pBIOSInfo->TVI2CDev = NULL; - ((VIARec *)(pScrn->driverPrivate))->CursorImage = NULL; + ((VIARec *) (pScrn->driverPrivate))->CursorImage = NULL; return TRUE; } /* VIAGetRec */ -static void VIAFreeRec(ScrnInfoPtr pScrn) +static void +VIAFreeRec(ScrnInfoPtr pScrn) { DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIAFreeRec\n")); if (!pScrn->driverPrivate) return; if (VIAPTR(pScrn)->pVbe) - vbeFree(VIAPTR(pScrn)->pVbe); + vbeFree(VIAPTR(pScrn)->pVbe); - if (((VIARec *)(pScrn->driverPrivate))->pBIOSInfo->TVI2CDev) - xf86DestroyI2CDevRec((((VIARec *)(pScrn->driverPrivate))->pBIOSInfo->TVI2CDev), TRUE); - xfree(((VIARec *)(pScrn->driverPrivate))->pBIOSInfo); + if (((VIARec *) (pScrn->driverPrivate))->pBIOSInfo->TVI2CDev) + xf86DestroyI2CDevRec((((VIARec *) (pScrn->driverPrivate))->pBIOSInfo-> + TVI2CDev), TRUE); + xfree(((VIARec *) (pScrn->driverPrivate))->pBIOSInfo); VIAUnmapMem(pScrn); @@ -485,29 +553,66 @@ } /* VIAFreeRec */ - -static const OptionInfoRec * VIAAvailableOptions(int chipid, int busid) +static const OptionInfoRec * +VIAAvailableOptions(int chipid, int busid) { - return VIAOptions; +} -} /* VIAAvailableOptions */ - -static void VIAIdentify(int flags) +static void +VIAIdentify(int flags) { xf86PrintChipsets("OPENCHROME", "Driver for VIA Chrome chipsets", VIAChipsets); -} /* VIAIdentify */ +} -static Bool VIAProbe(DriverPtr drv, int flags) +#ifdef XSERVER_LIBPCIACCESS +static Bool +via_pci_probe(DriverPtr driver, int entity_num, + struct pci_device *device, intptr_t match_data) { + ScrnInfoPtr scrn = NULL; + EntityInfoPtr entity; + DevUnion *private; + + scrn = xf86ConfigPciEntity(scrn, 0, entity_num, VIAPciChipsets, + NULL, NULL, NULL, NULL, NULL); + + if (scrn != NULL) { + scrn->driverVersion = VIA_VERSION; + scrn->driverName = DRIVER_NAME; + scrn->name = "CHROME"; + scrn->Probe = NULL; + + entity = xf86GetEntityInfo(entity_num); + + scrn->PreInit = VIAPreInit; + scrn->ScreenInit = VIAScreenInit; + scrn->SwitchMode = VIASwitchMode; + scrn->AdjustFrame = VIAAdjustFrame; + scrn->EnterVT = VIAEnterVT; + scrn->LeaveVT = VIALeaveVT; + scrn->FreeScreen = VIAFreeScreen; + scrn->ValidMode = ViaValidMode; + + xf86Msg(X_NOTICE, + "VIA Technologies does not support this driver in any way.\n"); + xf86Msg(X_NOTICE, + "For support, please refer to http://www.openchrome.org/.\n"); + } + return scrn != NULL; +} +#else /* !XSERVER_LIBPCIACCESS */ +static Bool +VIAProbe(DriverPtr drv, int flags) +{ GDevPtr *devSections; - int *usedChips; - int numDevSections; - int numUsed; - Bool foundScreen = FALSE; - int i; + int *usedChips; + int numDevSections; + int numUsed; + Bool foundScreen = FALSE; + int i; /* sanity checks */ if ((numDevSections = xf86MatchDevice(DRIVER_NAME, &devSections)) <= 0) @@ -529,23 +634,23 @@ if (numUsed <= 0) return FALSE; - xf86Msg(X_NOTICE, "VIA Technologies does not support or endorse this driver in any way.\n"); - xf86Msg(X_NOTICE, "For support, refer to http://www.openchrome.org/.\n"); + xf86Msg(X_NOTICE, + "VIA Technologies does not support this driver in any way.\n"); + xf86Msg(X_NOTICE, "For support, please refer to http://openchrome.org/.\n"); #ifdef BUILDCOMMENT - xf86Msg(X_NOTICE, BUILDCOMMENT); + xf86Msg(X_NOTICE, BUILDCOMMENT"\n"); #endif if (flags & PROBE_DETECT) { foundScreen = TRUE; - } - else { + } else { for (i = 0; i < numUsed; i++) { ScrnInfoPtr pScrn = xf86AllocateScreen(drv, 0); EntityInfoPtr pEnt; + if ((pScrn = xf86ConfigPciEntity(pScrn, 0, usedChips[i], - VIAPciChipsets, 0, 0, 0, 0, 0))) - { + VIAPciChipsets, 0, 0, 0, 0, 0))) { pScrn->driverVersion = VIA_VERSION; pScrn->driverName = DRIVER_NAME; pScrn->name = "CHROME"; @@ -560,7 +665,7 @@ pScrn->ValidMode = ViaValidMode; foundScreen = TRUE; } - /* +#if 0 xf86ConfigActivePciEntity(pScrn, usedChips[i], VIAPciChipsets, @@ -569,28 +674,26 @@ NULL, NULL, NULL); - */ +#endif pEnt = xf86GetEntityInfo(usedChips[i]); - /* CLE266 card support Dual-Head, mark the entity as sharable*/ - if(pEnt->chipset == VIA_CLE266 || pEnt->chipset == VIA_KM400) - { + /* CLE266 supports dual-head; mark the entity as sharable. */ + if (pEnt->chipset == VIA_CLE266 || pEnt->chipset == VIA_KM400) { static int instance = 0; - DevUnion* pPriv; + DevUnion *pPriv; xf86SetEntitySharable(usedChips[i]); xf86SetEntityInstanceForScreen(pScrn, - pScrn->entityList[0], instance); + pScrn->entityList[0], instance); - if(gVIAEntityIndex < 0) - { + if (gVIAEntityIndex < 0) { gVIAEntityIndex = xf86AllocateEntityPrivateIndex(); pPriv = xf86GetEntityPrivate(pScrn->entityList[0], - gVIAEntityIndex); + gVIAEntityIndex); - if (!pPriv->ptr) - { + if (!pPriv->ptr) { VIAEntPtr pVIAEnt; + pPriv->ptr = xnfcalloc(sizeof(VIAEntRec), 1); pVIAEnt = pPriv->ptr; pVIAEnt->IsDRIEnabled = FALSE; @@ -610,9 +713,11 @@ return foundScreen; } /* VIAProbe */ +#endif /* !XSERVER_LIBPCIACCESS */ #ifdef XF86DRI -static void kickVblank(ScrnInfoPtr pScrn) +static void +kickVblank(ScrnInfoPtr pScrn) { /* * Switching mode will clear registers that make vblank @@ -626,27 +731,28 @@ VIADRIPtr pVIADRI = pVia->pDRIInfo->devPrivate; if (pVIADRI->irqEnabled) { - hwp->writeCrtc(hwp, 0x11, hwp->readCrtc(hwp, 0x11) | 0x30); + hwp->writeCrtc(hwp, 0x11, hwp->readCrtc(hwp, 0x11) | 0x30); } } #endif -static int LookupChipSet(PciChipsets *pset, int chipSet) +static int +LookupChipSet(PciChipsets *pset, int chipSet) { - while (pset->numChipset >= 0) { - if (pset->numChipset == chipSet) return pset->PCIid; - pset++; - } - return -1; + while (pset->numChipset >= 0) { + if (pset->numChipset == chipSet) + return pset->PCIid; + pset++; + } + return -1; } - + static int -LookupChipID(PciChipsets* pset, int ChipID) +LookupChipID(PciChipsets *pset, int ChipID) { /* Is there a function to do this for me? */ - while (pset->numChipset >= 0) - { + while (pset->numChipset >= 0) { if (pset->PCIid == ChipID) return pset->numChipset; @@ -654,19 +760,18 @@ } return -1; +} -} /* LookupChipID */ - static void VIAProbeDDC(ScrnInfoPtr pScrn, int index) { vbeInfoPtr pVbe; if (xf86LoadSubModule(pScrn, "vbe")) { - xf86LoaderReqSymLists(vbeSymbols, NULL); - pVbe = VBEInit(NULL,index); + xf86LoaderReqSymLists(vbeSymbols, NULL); + pVbe = VBEInit(NULL, index); ConfiguredMonitor = vbeDoEDID(pVbe, NULL); - vbeFree(pVbe); + vbeFree(pVbe); } } @@ -679,11 +784,11 @@ pVia->shadowFB = FALSE; pVia->NoAccel = FALSE; -#ifdef VIA_HAVE_EXA +#ifdef VIA_HAVE_EXA pVia->noComposite = FALSE; pVia->exaScratchSize = VIA_SCRATCH_SIZE / 1024; -#endif /* VIA_HAVE_EXA */ - pVia->hwcursor = pVia->shadowFB ? FALSE : TRUE; +#endif + pVia->hwcursor = TRUE; pVia->VQEnable = TRUE; pVia->DRIIrqEnable = TRUE; pVia->agpEnable = TRUE; @@ -701,61 +806,67 @@ #ifdef HAVE_DEBUG pVia->PrintVGARegs = FALSE; #endif - pVia->swov.maxWInterp = 800 ; - pVia->swov.maxHInterp = 600 ; + pVia->swov.maxWInterp = 800; + pVia->swov.maxHInterp = 600; pVia->useLegacyVBE = TRUE; - switch (pVia->Chipset) - { + switch (pVia->Chipset) { case VIA_KM400: - /* IRQ is not broken on KM400A */ - /* But test below is not enough to make sure we have a KM400A */ - /* if (pVia->ChipRev < 0x80) */ + /* IRQ is not broken on KM400A, but testing (pVia->ChipRev < 0x80) + * is not enough to make sure we have an older, broken KM400. */ pVia->DRIIrqEnable = FALSE; break; case VIA_K8M800: + pVia->agpEnable = FALSE; pVia->DRIIrqEnable = FALSE; break; - case VIA_P4M900: - pVia->useLegacyVBE = FALSE; - /* FIXME: It needs to be tested */ - pVia->dmaXV = FALSE; - /* no break here */ case VIA_K8M890: pVia->VideoEngine = VIDEO_ENGINE_CME; pVia->agpEnable = FALSE; break; - case VIA_PM800: - case VIA_CX700: + case VIA_P4M900: pVia->VideoEngine = VIDEO_ENGINE_CME; - pVia->swov.maxWInterp = 1920 ; - pVia->swov.maxHInterp = 1080 ; - break; - case VIA_P4M890: + pVia->agpEnable = FALSE; + pVia->useLegacyVBE = FALSE; + /* FIXME: this needs to be tested */ + pVia->dmaXV = FALSE; + break; + case VIA_CX700: + case VIA_PM800: pVia->VideoEngine = VIDEO_ENGINE_CME; - break; + pVia->swov.maxWInterp = 1920; + pVia->swov.maxHInterp = 1080; + break; + case VIA_P4M890: + pVia->VideoEngine = VIDEO_ENGINE_CME; + break; } return TRUE; } - + static Bool VIAPreInit(ScrnInfoPtr pScrn, int flags) { - EntityInfoPtr pEnt; - VIAPtr pVia; - VIABIOSInfoPtr pBIOSInfo; - MessageType from = X_DEFAULT; - ClockRangePtr clockRanges; - char *s = NULL; + EntityInfoPtr pEnt; + VIAPtr pVia; + VIABIOSInfoPtr pBIOSInfo; + MessageType from = X_DEFAULT; + ClockRangePtr clockRanges; + char *s = NULL; + #ifndef USE_FB - char *mod = NULL; - const char *reqSym = NULL; + char *mod = NULL; + const char *reqSym = NULL; #endif - vgaHWPtr hwp; - int i, bMemSize = 0; + vgaHWPtr hwp; + int i, bMemSize = 0; +#ifdef XSERVER_LIBPCIACCESS + struct pci_device *bridge = via_host_bridge(); +#endif + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIAPreInit\n")); if (pScrn->numEntities > 1) @@ -775,7 +886,8 @@ /* Here we can alter the number of registers saved and restored by the * standard vgaHWSave and Restore routines. */ - vgaHWSetRegCounts(pScrn, VGA_NUM_CRTC, VGA_NUM_SEQ, VGA_NUM_GFX, VGA_NUM_ATTR); + vgaHWSetRegCounts(pScrn, VGA_NUM_CRTC, VGA_NUM_SEQ, VGA_NUM_GFX, + VGA_NUM_ATTR); #endif if (!VIAGetRec(pScrn)) { @@ -795,38 +907,32 @@ pVia->EntityIndex = pEnt->index; - if(xf86IsEntityShared(pScrn->entityList[0])) - { - if(xf86IsPrimInitDone(pScrn->entityList[0])) - { - DevUnion* pPriv; + if (xf86IsEntityShared(pScrn->entityList[0])) { + if (xf86IsPrimInitDone(pScrn->entityList[0])) { + DevUnion *pPriv; VIAEntPtr pVIAEnt; VIAPtr pVia1; pVia->IsSecondary = TRUE; - pPriv = xf86GetEntityPrivate(pScrn->entityList[0], - gVIAEntityIndex); + pPriv = xf86GetEntityPrivate(pScrn->entityList[0], gVIAEntityIndex); pVIAEnt = pPriv->ptr; if (pVIAEnt->BypassSecondary) { - xfree(pEnt); - VIAFreeRec(pScrn); - return FALSE; - } + xfree(pEnt); + VIAFreeRec(pScrn); + return FALSE; + } pVIAEnt->pSecondaryScrn = pScrn; pVIAEnt->HasSecondary = TRUE; pVia1 = VIAPTR(pVIAEnt->pPrimaryScrn); pVia1->HasSecondary = TRUE; - pVia->sharedData = pVia1->sharedData; - } - else - { - DevUnion* pPriv; + pVia->sharedData = pVia1->sharedData; + } else { + DevUnion *pPriv; VIAEntPtr pVIAEnt; xf86SetPrimInitDone(pScrn->entityList[0]); - pPriv = xf86GetEntityPrivate(pScrn->entityList[0], - gVIAEntityIndex); - pVia->sharedData = xnfcalloc(sizeof(ViaSharedRec),1); + pPriv = xf86GetEntityPrivate(pScrn->entityList[0], gVIAEntityIndex); + pVia->sharedData = xnfcalloc(sizeof(ViaSharedRec), 1); pVIAEnt = pPriv->ptr; pVIAEnt->pPrimaryScrn = pScrn; pVIAEnt->IsDRIEnabled = FALSE; @@ -836,7 +942,7 @@ pVIAEnt->IsSecondaryRestored = FALSE; } } else { - pVia->sharedData = xnfcalloc(sizeof(ViaSharedRec),1); + pVia->sharedData = xnfcalloc(sizeof(ViaSharedRec), 1); } if (flags & PROBE_DETECT) { @@ -855,22 +961,21 @@ xfree(pEnt); VIAFreeRec(pScrn); return FALSE; - } - else { + } else { switch (pScrn->depth) { - case 8: - case 16: - case 24: - case 32: - /* OK */ - break; - default: - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "Given depth (%d) is not supported by this driver\n", - pScrn->depth); - xfree(pEnt); - VIAFreeRec(pScrn); - return FALSE; + case 8: + case 16: + case 24: + case 32: + /* OK */ + break; + default: + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "Given depth (%d) is not supported by this driver\n", + pScrn->depth); + xfree(pEnt); + VIAFreeRec(pScrn); + return FALSE; } } @@ -881,13 +986,13 @@ } if (pScrn->depth > 8) { - rgb zeros = {0, 0, 0}; + rgb zeros = { 0, 0, 0 }; if (!xf86SetWeight(pScrn, zeros, zeros)) { - xfree(pEnt); - VIAFreeRec(pScrn); + xfree(pEnt); + VIAFreeRec(pScrn); return FALSE; - } else { + } else { /* TODO check weight returned is supported */ ; } @@ -919,33 +1024,31 @@ pVia->PciInfo = xf86GetPciInfoForEntity(pEnt->index); xf86RegisterResources(pEnt->index, NULL, ResNone); - /* +#if 0 xf86SetOperatingState(RES_SHARED_VGA, pEnt->index, ResUnusedOpr); xf86SetOperatingState(resVgaMemShared, pEnt->index, ResDisableOpr); - */ +#endif if (pEnt->device->chipset && *pEnt->device->chipset) { + from = X_CONFIG; pScrn->chipset = pEnt->device->chipset; pVia->Chipset = xf86StringToToken(VIAChipsets, pScrn->chipset); - pVia->ChipId = pEnt->device->chipID = LookupChipSet(VIAPciChipsets, pVia->Chipset); + pVia->ChipId = LookupChipSet(VIAPciChipsets, pVia->Chipset); + } else if (pEnt->device->chipID >= 0) { from = X_CONFIG; - } else if (pEnt->device->chipID >= 0) { pVia->ChipId = pEnt->device->chipID; pVia->Chipset = LookupChipID(VIAPciChipsets, pVia->ChipId); - pScrn->chipset = (char *)xf86TokenToString(VIAChipsets, - pVia->Chipset); - from = X_CONFIG; + pScrn->chipset = (char *)xf86TokenToString(VIAChipsets, pVia->Chipset); xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "ChipID override: 0x%04X\n", pEnt->device->chipID); } else { from = X_PROBED; - pVia->ChipId = pVia->PciInfo->chipType; + pVia->ChipId = DEVICE_ID(pVia->PciInfo); pVia->Chipset = LookupChipID(VIAPciChipsets, pVia->ChipId); - pScrn->chipset = (char *)xf86TokenToString(VIAChipsets, - pVia->Chipset); + pScrn->chipset = (char *)xf86TokenToString(VIAChipsets, pVia->Chipset); } - xf86DrvMsg(pScrn->scrnIndex, from, "Chipset: \"%s\"\n", pScrn->chipset); + xf86DrvMsg(pScrn->scrnIndex, from, "Chipset: %s\n", pScrn->chipset); if (pEnt->device->chipRev >= 0) { pVia->ChipRev = pEnt->device->chipRev; @@ -953,7 +1056,13 @@ pVia->ChipRev); } else { /* Read PCI bus 0, dev 0, function 0, index 0xF6 to get chip revision */ +#ifdef XSERVER_LIBPCIACCESS + struct pci_device *bridge = via_host_bridge(); + + pci_device_cfg_read_u32(bridge, &pVia->ChipRev, 0xF6); +#else pVia->ChipRev = pciReadByte(pciTag(0, 0, 0), 0xF6); +#endif } if (pVia->Chipset == VIA_CLE266) @@ -965,21 +1074,42 @@ /* Detect the amount of installed RAM */ from = X_PROBED; + CARD8 videoRam; + +#ifdef XSERVER_LIBPCIACCESS + struct pci_device *vgaDevice = viaPciDeviceVga(); +#endif + switch (pVia->Chipset) { case VIA_CLE266: case VIA_KM400: - pScrn->videoRam = ( 1 << ( ( pciReadByte(pciTag(0, 0, 0), 0xE1) & 0x70 ) >> 4 ) ) << 10 ; +#ifdef XSERVER_LIBPCIACCESS + pci_device_cfg_read_u8(bridge, &videoRam, 0xE1); +#else + videoRam = pciReadByte(pciTag(0, 0, 0), 0xE1) & 0x70; +#endif + pScrn->videoRam = (1 << ((videoRam & 0x70) >> 4)) << 10; break; case VIA_PM800: case VIA_VM800: case VIA_K8M800: - pScrn->videoRam = ( 1 << ( ( pciReadByte(pciTag(0, 0, 3), 0xA1) & 0x70 ) >> 4 ) ) << 10 ; +#ifdef XSERVER_LIBPCIACCESS + pci_device_cfg_read_u8(vgaDevice, &videoRam, 0xA1); +#else + videoRam = pciReadByte(pciTag(0, 0, 3), 0xA1) & 0x70; +#endif + pScrn->videoRam = (1 << ((videoRam & 0x70) >> 4)) << 10; break; case VIA_K8M890: case VIA_P4M890: case VIA_P4M900: case VIA_CX700: - pScrn->videoRam = ( 1 << ( ( pciReadByte(pciTag(0, 0, 3), 0xA1) & 0x70 ) >> 4 ) ) << 12 ; +#ifdef XSERVER_LIBPCIACCESS + pci_device_cfg_read_u8(vgaDevice, &videoRam, 0xA1); +#else + videoRam = pciReadByte(pciTag(0, 0, 3), 0xA1) & 0x70; +#endif + pScrn->videoRam = (1 << ((videoRam & 0x70) >> 4)) << 12; break; default: if (pScrn->videoRam < 16384 || pScrn->videoRam > 65536) { @@ -1007,42 +1137,54 @@ xf86DrvMsg(pScrn->scrnIndex, from, "Probed amount of VideoRAM = %d kB\n", pScrn->videoRam); - xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "Setting up default chipset options...\n"); + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "Setting up default chipset options.\n"); if (!VIASetupDefaultOptions(pScrn)) { VIAFreeRec(pScrn); return FALSE; } + xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Reading config file...\n"); xf86ProcessOptions(pScrn->scrnIndex, pScrn->options, VIAOptions); - xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "Starting to parse config file options...\n"); + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "Starting to parse config file options...\n"); if (xf86GetOptValInteger(VIAOptions, OPTION_VIDEORAM, &pScrn->videoRam)) xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Setting amount of VideoRAM to %d kB\n", pScrn->videoRam); - //pVia->shadowFB = FALSE; - from = xf86GetOptValBool(VIAOptions, OPTION_SHADOW_FB, &pVia->shadowFB) ? - X_CONFIG : X_DEFAULT; - xf86DrvMsg(pScrn->scrnIndex, from, "ShadowFB is %s.\n", - pVia->shadowFB ? "enabled" : "disabled"); + from = (xf86GetOptValBool(VIAOptions, OPTION_SHADOW_FB, &pVia->shadowFB) + ? X_CONFIG : X_DEFAULT); + xf86DrvMsg(pScrn->scrnIndex, from, "Shadow framebuffer is %s.\n", + pVia->shadowFB ? "enabled" : "disabled"); + /* Use hardware acceleration, unless on shadow framebuffer. */ + from = (xf86GetOptValBool(VIAOptions, OPTION_NOACCEL, &pVia->NoAccel) + ? X_CONFIG : X_DEFAULT); + if (!pVia->NoAccel && pVia->shadowFB) { + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "Acceleration is " + "not supported when using shadow framebuffer.\n"); + pVia->NoAccel = TRUE; + from = X_DEFAULT; + } + xf86DrvMsg(pScrn->scrnIndex, from, "Hardware acceleration is %s.\n", + !pVia->NoAccel ? "enabled" : "disabled"); + + /* When rotating, switch shadow framebuffer on and acceleration off. */ if ((s = xf86GetOptValString(VIAOptions, OPTION_ROTATE))) { if (!xf86NameCmp(s, "CW")) { - /* accel is disabled below for shadowFB */ pVia->shadowFB = TRUE; + pVia->NoAccel = TRUE; pVia->rotate = 1; - pVia->hwcursor = FALSE; - xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, - "Rotating screen clockwise - acceleration disabled.\n"); - } else if(!xf86NameCmp(s, "CCW")) { + xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Rotating screen " + "clockwise -- acceleration is disabled.\n"); + } else if (!xf86NameCmp(s, "CCW")) { pVia->shadowFB = TRUE; + pVia->NoAccel = TRUE; pVia->rotate = -1; - pVia->hwcursor = FALSE; - xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Rotating screen" - "counterclockwise - acceleration disabled.\n"); + xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Rotating screen " + "counterclockwise -- acceleration is disabled.\n"); } else { xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "\"%s\" is not a valid" "value for Option \"Rotate\".\n", s); @@ -1050,184 +1192,161 @@ "Valid options are \"CW\" or \"CCW\".\n"); } } - - //pVia->NoAccel = FALSE; - from = xf86GetOptValBool(VIAOptions, OPTION_NOACCEL, &pVia->NoAccel) ? - X_CONFIG : X_DEFAULT; - xf86DrvMsg(pScrn->scrnIndex, from, "Acceleration is %s.\n", - !pVia->NoAccel ? "enabled" : "disabled"); - - if (pVia->shadowFB && !pVia->NoAccel) { - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "HW acceleration not supported with \"shadowFB\".\n"); - pVia->NoAccel = TRUE; - } - -#ifdef VIA_HAVE_EXA - if(!pVia->NoAccel) { +#ifdef VIA_HAVE_EXA + if (!pVia->NoAccel) { from = X_DEFAULT; - if((s = (char *)xf86GetOptValString(VIAOptions, OPTION_ACCELMETHOD))) { - if(!xf86NameCmp(s,"XAA")) { - from = X_CONFIG; - pVia->useEXA = FALSE; - } - else if(!xf86NameCmp(s,"EXA")) { - from = X_CONFIG; - pVia->useEXA = TRUE; - } - } - xf86DrvMsg(pScrn->scrnIndex, from, "Using %s acceleration architecture.\n", - pVia->useEXA ? "EXA" : "XAA"); + if ((s = (char *)xf86GetOptValString(VIAOptions, OPTION_ACCELMETHOD))) { + if (!xf86NameCmp(s, "XAA")) { + from = X_CONFIG; + pVia->useEXA = FALSE; + } else if (!xf86NameCmp(s, "EXA")) { + from = X_CONFIG; + pVia->useEXA = TRUE; + } + } + xf86DrvMsg(pScrn->scrnIndex, from, + "Using %s acceleration architecture.\n", + pVia->useEXA ? "EXA" : "XAA"); - //pVia->noComposite = FALSE; - if (pVia->useEXA) { - from = xf86GetOptValBool(VIAOptions, OPTION_EXA_NOCOMPOSITE, - &pVia->noComposite) ? - X_CONFIG : X_DEFAULT; - xf86DrvMsg(pScrn->scrnIndex, from, - "EXA composite acceleration %s.\n", - !pVia->noComposite ? "enabled" : "disabled"); - - //pVia->exaScratchSize = VIA_SCRATCH_SIZE / 1024; - from = xf86GetOptValInteger(VIAOptions, OPTION_EXA_SCRATCH_SIZE, - &pVia->exaScratchSize) ? - X_CONFIG : X_DEFAULT; + //pVia->noComposite = FALSE; + if (pVia->useEXA) { + from = xf86GetOptValBool(VIAOptions, OPTION_EXA_NOCOMPOSITE, + &pVia->noComposite) ? X_CONFIG : X_DEFAULT; xf86DrvMsg(pScrn->scrnIndex, from, - "EXA scratch area size is %d kB.\n", + "EXA composite acceleration %s.\n", + !pVia->noComposite ? "enabled" : "disabled"); + + //pVia->exaScratchSize = VIA_SCRATCH_SIZE / 1024; + from = xf86GetOptValInteger(VIAOptions, OPTION_EXA_SCRATCH_SIZE, + &pVia->exaScratchSize) + ? X_CONFIG : X_DEFAULT; + xf86DrvMsg(pScrn->scrnIndex, from, + "EXA scratch area size is %d kB.\n", pVia->exaScratchSize); - } + } } #endif /* VIA_HAVE_EXA */ - /* - * The SWCursor setting takes priority over HWCursor. The default - * if neither is specified is HW. - */ - - //pVia->hwcursor = pVia->shadowFB ? FALSE : TRUE; + /* Use a hardware cursor, unless on secondary or on shadow framebuffer. */ from = X_DEFAULT; - if (xf86GetOptValBool(VIAOptions, OPTION_HWCURSOR, &pVia->hwcursor)) - from = X_CONFIG; - if (xf86GetOptValBool(VIAOptions, OPTION_SWCURSOR, &pVia->hwcursor)) { + if (pVia->IsSecondary || pVia->shadowFB) + pVia->hwcursor = FALSE; + else if (xf86GetOptValBool(VIAOptions, OPTION_SWCURSOR, &pVia->hwcursor)) { pVia->hwcursor = !pVia->hwcursor; from = X_CONFIG; } - if (pVia->IsSecondary) - pVia->hwcursor = FALSE; if (pVia->hwcursor) - xf86DrvMsg(pScrn->scrnIndex, from, "Hardware two-color cursors; " - "software full-color cursors.\n"); + xf86DrvMsg(pScrn->scrnIndex, from, "Using hardware two-color " + "cursors and software full-color cursors.\n"); else - xf86DrvMsg(pScrn->scrnIndex, from, "Using software cursors.\n"); + xf86DrvMsg(pScrn->scrnIndex, from, "Using software cursors.\n"); //pVia->VQEnable = TRUE; from = xf86GetOptValBool(VIAOptions, OPTION_DISABLEVQ, &pVia->VQEnable) - ? X_CONFIG : X_DEFAULT; + ? X_CONFIG : X_DEFAULT; if (from == X_CONFIG) - pVia->VQEnable = !pVia->VQEnable; - xf86DrvMsg(pScrn->scrnIndex, from, "GPU virtual command queue will be %s.\n", - (pVia->VQEnable) ? "enabled" : "disabled"); + pVia->VQEnable = !pVia->VQEnable; + xf86DrvMsg(pScrn->scrnIndex, from, + "GPU virtual command queue will be %s.\n", + (pVia->VQEnable) ? "enabled" : "disabled"); //pVia->DRIIrqEnable = TRUE; - from = xf86GetOptValBool(VIAOptions, OPTION_DISABLEIRQ, - &pVia->DRIIrqEnable) - ? X_CONFIG : X_DEFAULT; + from = xf86GetOptValBool(VIAOptions, OPTION_DISABLEIRQ, &pVia->DRIIrqEnable) + ? X_CONFIG : X_DEFAULT; if (from == X_CONFIG) - pVia->DRIIrqEnable = !pVia->DRIIrqEnable; - xf86DrvMsg(pScrn->scrnIndex, from, "DRI IRQ will be %s if DRI is enabled.\n", - (pVia->DRIIrqEnable) ? "enabled" : "disabled"); + pVia->DRIIrqEnable = !pVia->DRIIrqEnable; + xf86DrvMsg(pScrn->scrnIndex, from, + "DRI IRQ will be %s if DRI is enabled.\n", + (pVia->DRIIrqEnable) ? "enabled" : "disabled"); //pVia->agpEnable = FALSE; from = xf86GetOptValBool(VIAOptions, OPTION_AGP_DMA, &pVia->agpEnable) - ? X_CONFIG : X_DEFAULT; - xf86DrvMsg(pScrn->scrnIndex, from, "AGP DMA will be %s if DRI is enabled.\n", - (pVia->agpEnable) ? "enabled" : "disabled"); + ? X_CONFIG : X_DEFAULT; + xf86DrvMsg(pScrn->scrnIndex, from, + "AGP DMA will be %s if DRI is enabled.\n", + (pVia->agpEnable) ? "enabled" : "disabled"); //pVia->dma2d = TRUE; if (pVia->agpEnable) { - from = xf86GetOptValBool(VIAOptions, OPTION_2D_DMA, &pVia->dma2d) - ? X_CONFIG : X_DEFAULT; - if (from == X_CONFIG) - pVia->dma2d = !pVia->dma2d; - xf86DrvMsg(pScrn->scrnIndex, from, "AGP DMA will %sbe used for 2D " - "acceleration.\n", - (pVia->dma2d) ? "" : "not "); + from = xf86GetOptValBool(VIAOptions, OPTION_2D_DMA, &pVia->dma2d) + ? X_CONFIG : X_DEFAULT; + if (from == X_CONFIG) + pVia->dma2d = !pVia->dma2d; + xf86DrvMsg(pScrn->scrnIndex, from, "AGP DMA will %sbe used for " + "2D acceleration.\n", (pVia->dma2d) ? "" : "not "); } - //pVia->dmaXV = TRUE; from = xf86GetOptValBool(VIAOptions, OPTION_XV_DMA, &pVia->dmaXV) - ? X_CONFIG : X_DEFAULT; + ? X_CONFIG : X_DEFAULT; if (from == X_CONFIG) - pVia->dmaXV = !pVia->dmaXV; + pVia->dmaXV = !pVia->dmaXV; xf86DrvMsg(pScrn->scrnIndex, from, "PCI DMA will %sbe used for XV " - "image transfer if DRI is enabled.\n", - (pVia->dmaXV) ? "" : "not "); + "image transfer if DRI is enabled.\n", + (pVia->dmaXV) ? "" : "not "); //pVia->useVBEModes = FALSE; from = xf86GetOptValBool(VIAOptions, OPTION_VBEMODES, &pVia->useVBEModes) - ? X_CONFIG : X_DEFAULT; + ? X_CONFIG : X_DEFAULT; xf86DrvMsg(pScrn->scrnIndex, from, "Will %senable VBE modes.\n", - (pVia->useVBEModes) ? "" : "not "); + (pVia->useVBEModes) ? "" : "not "); //pVia->vbeSR = FALSE; from = xf86GetOptValBool(VIAOptions, OPTION_VBE_SAVERESTORE, &pVia->vbeSR) - ? X_CONFIG : X_DEFAULT; + ? X_CONFIG : X_DEFAULT; xf86DrvMsg(pScrn->scrnIndex, from, "VBE VGA register save & restore " - "will %sbe used\n\tif VBE modes are enabled.\n", - (pVia->vbeSR) ? "" : "not "); + "will %sbe used\n\tif VBE modes are enabled.\n", + (pVia->vbeSR) ? "" : "not "); #ifdef HAVE_DEBUG //pVia->disableXvBWCheck = FALSE; - from = xf86GetOptValBool(VIAOptions, OPTION_DISABLE_XV_BW_CHECK, - &pVia->disableXvBWCheck) - ? X_CONFIG : X_DEFAULT; + from = xf86GetOptValBool(VIAOptions, OPTION_DISABLE_XV_BW_CHECK, + &pVia->disableXvBWCheck) + ? X_CONFIG : X_DEFAULT; xf86DrvMsg(pScrn->scrnIndex, from, "Xv Bandwidth check is %s.\n", - pVia->disableXvBWCheck ? "disabled" : "enabled"); + pVia->disableXvBWCheck ? "disabled" : "enabled"); if (pVia->disableXvBWCheck) { - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "You may get a \"snowy\" screen" - " when using the Xv overlay.\n"); + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, + "You may get a \"snowy\" screen" + " when using the Xv overlay.\n"); } #endif //pVia->maxDriSize = 0; - from = xf86GetOptValInteger(VIAOptions, OPTION_MAX_DRIMEM, - &pVia->maxDriSize) - ? X_CONFIG : X_DEFAULT; + from = xf86GetOptValInteger(VIAOptions, OPTION_MAX_DRIMEM, + &pVia->maxDriSize) + ? X_CONFIG : X_DEFAULT; if (pVia->maxDriSize > 0) xf86DrvMsg(pScrn->scrnIndex, from, - "Will impose a %d kB limit on video RAM reserved for DRI.\n", + "Will impose a %d kB limit on video RAM reserved for DRI.\n", pVia->maxDriSize); else xf86DrvMsg(pScrn->scrnIndex, from, "Will not impose a limit on video RAM reserved for DRI.\n"); //pVia->agpMem = AGP_SIZE / 1024; - from = xf86GetOptValInteger(VIAOptions, OPTION_AGPMEM, - &pVia->agpMem) - ? X_CONFIG : X_DEFAULT; - xf86DrvMsg(pScrn->scrnIndex, from, - "Will try to allocate %d kB of AGP memory.\n", - pVia->agpMem); + from = xf86GetOptValInteger(VIAOptions, OPTION_AGPMEM, &pVia->agpMem) + ? X_CONFIG : X_DEFAULT; + xf86DrvMsg(pScrn->scrnIndex, from, + "Will try to allocate %d kB of AGP memory.\n", pVia->agpMem); /* ActiveDevice Option for device selection */ //pVia->ActiveDevice = 0x00; if ((s = xf86GetOptValString(VIAOptions, OPTION_ACTIVEDEVICE))) { - if (xf86strstr(s, "CRT")) - pVia->ActiveDevice |= VIA_DEVICE_CRT; - if (xf86strstr(s, "LCD")) - pVia->ActiveDevice |= VIA_DEVICE_LCD; - if (xf86strstr(s, "DFP")) /* just treat this the same as LCD */ - pVia->ActiveDevice |= VIA_DEVICE_LCD; - if (xf86strstr(s, "TV")) - pVia->ActiveDevice |= VIA_DEVICE_TV; + if (xf86strstr(s, "CRT")) + pVia->ActiveDevice |= VIA_DEVICE_CRT; + if (xf86strstr(s, "LCD")) + pVia->ActiveDevice |= VIA_DEVICE_LCD; + if (xf86strstr(s, "DFP")) /* just treat this the same as LCD */ + pVia->ActiveDevice |= VIA_DEVICE_LCD; + if (xf86strstr(s, "TV")) + pVia->ActiveDevice |= VIA_DEVICE_TV; } /* Digital Output Bus Width Option */ pBIOSInfo->BusWidth = VIA_DI_12BIT; from = X_DEFAULT; if ((s = xf86GetOptValString(VIAOptions, OPTION_BUSWIDTH))) { - from = X_CONFIG; + from = X_CONFIG; if (!xf86NameCmp(s, "12BIT")) { pBIOSInfo->BusWidth = VIA_DI_12BIT; } else if (!xf86NameCmp(s, "24BIT")) { @@ -1235,16 +1354,16 @@ } } xf86DrvMsg(pScrn->scrnIndex, from, - "Digital output bus width is %d bits.\n", - (pBIOSInfo->BusWidth == VIA_DI_12BIT) ? 12:24); + "Digital output bus width is %d bits.\n", + (pBIOSInfo->BusWidth == VIA_DI_12BIT) ? 12 : 24); /* LCD Center/Expend Option */ pBIOSInfo->Center = FALSE; from = xf86GetOptValBool(VIAOptions, OPTION_CENTER, &pBIOSInfo->Center) - ? X_CONFIG : X_DEFAULT; + ? X_CONFIG : X_DEFAULT; xf86DrvMsg(pScrn->scrnIndex, from, "DVI Center is %s.\n", - pBIOSInfo->Center ? "enabled" : "disabled"); + pBIOSInfo->Center ? "enabled" : "disabled"); /* Panel Size Option */ @@ -1254,202 +1373,190 @@ pBIOSInfo->PanelSize = VIA_PANEL6X4; xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Selected Panel Size is 640x480\n"); - } - else if (!xf86NameCmp(s, "800x600")) { + } else if (!xf86NameCmp(s, "800x600")) { pBIOSInfo->PanelSize = VIA_PANEL8X6; xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Selected Panel Size is 800x600\n"); - } - else if(!xf86NameCmp(s, "1024x768")) { + } else if (!xf86NameCmp(s, "1024x768")) { pBIOSInfo->PanelSize = VIA_PANEL10X7; xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Selected Panel Size is 1024x768\n"); - } - else if (!xf86NameCmp(s, "1280x768")) { + } else if (!xf86NameCmp(s, "1280x768")) { pBIOSInfo->PanelSize = VIA_PANEL12X7; xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Selected Panel Size is 1280x768\n"); - } - else if (!xf86NameCmp(s, "1280x800")) { + } else if (!xf86NameCmp(s, "1280x800")) { pBIOSInfo->PanelSize = VIA_PANEL12X8; xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Selected Panel Size is 1280x800\n"); - } - else if (!xf86NameCmp(s, "1280x1024")) { + } else if (!xf86NameCmp(s, "1280x1024")) { pBIOSInfo->PanelSize = VIA_PANEL12X10; xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Selected Panel Size is 1280x1024\n"); - } - else if (!xf86NameCmp(s, "1400x1050")) { + } else if (!xf86NameCmp(s, "1400x1050")) { pBIOSInfo->PanelSize = VIA_PANEL14X10; xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Selected Panel Size is 1400x1050\n"); } } else { - xf86DrvMsg(pScrn->scrnIndex, X_DEFAULT, - "Panel size is not selected from config file.\n"); + xf86DrvMsg(pScrn->scrnIndex, X_DEFAULT, + "Panel size is not selected from config file.\n"); } - + /* Force the use of the Panel? */ pBIOSInfo->ForcePanel = FALSE; - from = xf86GetOptValBool(VIAOptions, OPTION_FORCEPANEL, - &pBIOSInfo->ForcePanel) - ? X_CONFIG:X_DEFAULT; + from = xf86GetOptValBool(VIAOptions, OPTION_FORCEPANEL, + &pBIOSInfo->ForcePanel) + ? X_CONFIG : X_DEFAULT; xf86DrvMsg(pScrn->scrnIndex, from, - "Panel will %sbe forced.\n", - pBIOSInfo->ForcePanel ? "" : "not "); - + "Panel will %sbe forced.\n", + pBIOSInfo->ForcePanel ? "" : "not "); + pBIOSInfo->TVDotCrawl = FALSE; - from = xf86GetOptValBool(VIAOptions, OPTION_TVDOTCRAWL, - &pBIOSInfo->TVDotCrawl) - ? X_CONFIG:X_DEFAULT; + from = xf86GetOptValBool(VIAOptions, OPTION_TVDOTCRAWL, + &pBIOSInfo->TVDotCrawl) + ? X_CONFIG : X_DEFAULT; xf86DrvMsg(pScrn->scrnIndex, from, "TV dotCrawl is %s.\n", - pBIOSInfo->TVDotCrawl ? "enabled" : "disabled"); + pBIOSInfo->TVDotCrawl ? "enabled" : "disabled"); /* TV Deflicker */ pBIOSInfo->TVDeflicker = 0; - from = xf86GetOptValInteger(VIAOptions, OPTION_TVDEFLICKER, - &pBIOSInfo->TVDeflicker) - ? X_CONFIG:X_DEFAULT; - xf86DrvMsg( pScrn->scrnIndex, from, "TV deflicker is set to %d.\n", - pBIOSInfo->TVDeflicker ); - + from = xf86GetOptValInteger(VIAOptions, OPTION_TVDEFLICKER, + &pBIOSInfo->TVDeflicker) + ? X_CONFIG : X_DEFAULT; + xf86DrvMsg(pScrn->scrnIndex, from, "TV deflicker is set to %d.\n", + pBIOSInfo->TVDeflicker); + pBIOSInfo->TVType = TVTYPE_NONE; if ((s = xf86GetOptValString(VIAOptions, OPTION_TVTYPE))) { if (!xf86NameCmp(s, "NTSC")) { pBIOSInfo->TVType = TVTYPE_NTSC; xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "TV Type is NTSC.\n"); - } - else if(!xf86NameCmp(s, "PAL")) { + } else if (!xf86NameCmp(s, "PAL")) { pBIOSInfo->TVType = TVTYPE_PAL; xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "TV Type is PAL.\n"); - } - else if(!xf86NameCmp(s, "480P")) { + } else if (!xf86NameCmp(s, "480P")) { pBIOSInfo->TVType = TVTYPE_480P; xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "TV Type is SDTV 480P.\n"); - } - else if(!xf86NameCmp(s, "576P")) { + } else if (!xf86NameCmp(s, "576P")) { pBIOSInfo->TVType = TVTYPE_576P; xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "TV Type is SDTV 576P.\n"); - } - else if(!xf86NameCmp(s, "720P")) { + } else if (!xf86NameCmp(s, "720P")) { pBIOSInfo->TVType = TVTYPE_720P; xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "TV Type is HDTV 720P.\n"); - } - else if(!xf86NameCmp(s, "1080I")) { + } else if (!xf86NameCmp(s, "1080I")) { pBIOSInfo->TVType = TVTYPE_1080I; xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "TV Type is HDTV 1080i.\n"); } } else { - xf86DrvMsg(pScrn->scrnIndex, X_DEFAULT, - "No default TV type is set.\n"); + xf86DrvMsg(pScrn->scrnIndex, X_DEFAULT, "No default TV type is set.\n"); } - + /* TV output signal Option */ pBIOSInfo->TVOutput = TVOUTPUT_NONE; if ((s = xf86GetOptValString(VIAOptions, OPTION_TVOUTPUT))) { if (!xf86NameCmp(s, "S-Video")) { pBIOSInfo->TVOutput = TVOUTPUT_SVIDEO; - xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "TV Output Signal is S-Video.\n"); - } - else if(!xf86NameCmp(s, "Composite")) { + xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, + "TV Output Signal is S-Video.\n"); + } else if (!xf86NameCmp(s, "Composite")) { pBIOSInfo->TVOutput = TVOUTPUT_COMPOSITE; - xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "TV Output Signal is Composite.\n"); - } - else if(!xf86NameCmp(s, "SC")) { + xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, + "TV Output Signal is Composite.\n"); + } else if (!xf86NameCmp(s, "SC")) { pBIOSInfo->TVOutput = TVOUTPUT_SC; xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "TV Output Signal is SC.\n"); - } - else if(!xf86NameCmp(s, "RGB")) { + } else if (!xf86NameCmp(s, "RGB")) { pBIOSInfo->TVOutput = TVOUTPUT_RGB; - xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "TV Output Signal is RGB.\n"); - } - else if(!xf86NameCmp(s, "YCbCr")) { + xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, + "TV Output Signal is RGB.\n"); + } else if (!xf86NameCmp(s, "YCbCr")) { pBIOSInfo->TVOutput = TVOUTPUT_YCBCR; - xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "TV Output Signal is YCbCr.\n"); + xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, + "TV Output Signal is YCbCr.\n"); } } else { - xf86DrvMsg(pScrn->scrnIndex, X_DEFAULT, - "No default TV output signal type is set.\n"); + xf86DrvMsg(pScrn->scrnIndex, X_DEFAULT, + "No default TV output signal type is set.\n"); } VIAVidHWDiffInit(pScrn); /* maybe throw in some more sanity checks here */ +#ifndef XSERVER_LIBPCIACCESS pVia->PciTag = pciTag(pVia->PciInfo->bus, pVia->PciInfo->device, pVia->PciInfo->func); +#endif if (!VIAMapMMIO(pScrn)) { - VIAFreeRec(pScrn); + VIAFreeRec(pScrn); return FALSE; } hwp = VGAHWPTR(pScrn); #ifdef HAVE_DEBUG //pVia->PrintVGARegs = FALSE; - from = xf86GetOptValBool(VIAOptions, OPTION_PRINTVGAREGS, - &pVia->PrintVGARegs) - ? X_CONFIG : X_DEFAULT; + from = xf86GetOptValBool(VIAOptions, OPTION_PRINTVGAREGS, + &pVia->PrintVGARegs) + ? X_CONFIG : X_DEFAULT; xf86DrvMsg(pScrn->scrnIndex, from, "Will %sprint VGA registers.\n", - pVia->PrintVGARegs ? "" : "not "); + pVia->PrintVGARegs ? "" : "not "); if (pVia->PrintVGARegs) - ViaVgahwPrint(VGAHWPTR(pScrn)); /* Do this as early as possible */ + ViaVgahwPrint(VGAHWPTR(pScrn)); /* Do this as early as possible */ pVia->I2CScan = FALSE; from = xf86GetOptValBool(VIAOptions, OPTION_I2CSCAN, &pVia->I2CScan) - ? X_CONFIG : X_DEFAULT; + ? X_CONFIG : X_DEFAULT; xf86DrvMsg(pScrn->scrnIndex, from, "Will %sscan I2C buses.\n", - pVia->I2CScan ? "" : "not "); + pVia->I2CScan ? "" : "not "); #endif /* HAVE_DEBUG */ - xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "...Finished parsing config file options.\n"); + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "...Finished parsing config file options.\n"); - ViaCheckCardId(pScrn); + ViaCheckCardId(pScrn); - /* Read memory bandwidth from registers */ + /* Read memory bandwidth from registers. */ pVia->MemClk = hwp->readCrtc(hwp, 0x3D) >> 4; DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Detected MemClk %d\n", pVia->MemClk)); if (pVia->MemClk >= VIA_MEM_END) { xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "Unknown Memory clock: %d\n", pVia->MemClk); - pVia->MemClk = VIA_MEM_END - 1; + pVia->MemClk = VIA_MEM_END - 1; } pBIOSInfo->Bandwidth = ViaGetMemoryBandwidth(pScrn); if (pBIOSInfo->TVType == TVTYPE_NONE) { - /* Use jumper to determine TV type */ + /* Use jumper to determine TV type. */ if (hwp->readCrtc(hwp, 0x3B) & 0x02) { pBIOSInfo->TVType = TVTYPE_PAL; DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Detected TV standard: PAL.\n")); - } - else { + } else { pBIOSInfo->TVType = TVTYPE_NTSC; DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Detected TV standard: NTSC.\n")); } } - Gamma zeros = {0.0, 0.0, 0.0}; + Gamma zeros = { 0.0, 0.0, 0.0 }; if (!xf86SetGamma(pScrn, zeros)) { VIAFreeRec(pScrn); return FALSE; } - /* Split FB for SAMM */ - /* FIXME: For now, split FB into two equal sections. This should - * be able to be adjusted by user with a config option. */ + /* Split the FB for SAMM. */ + /* FIXME: For now, split the FB into two equal sections. + * This should be user-adjustable via a config option. */ if (pVia->IsSecondary) { - DevUnion* pPriv; + DevUnion *pPriv; VIAEntPtr pVIAEnt; - VIAPtr pVia1; + VIAPtr pVia1; - pPriv = xf86GetEntityPrivate(pScrn->entityList[0], - gVIAEntityIndex); + pPriv = xf86GetEntityPrivate(pScrn->entityList[0], gVIAEntityIndex); pVIAEnt = pPriv->ptr; pScrn->videoRam = pScrn->videoRam >> 1; pVIAEnt->pPrimaryScrn->videoRam = pScrn->videoRam; @@ -1463,144 +1570,139 @@ if (!xf86LoadSubModule(pScrn, "i2c")) { VIAFreeRec(pScrn); return FALSE; - } - else { - xf86LoaderReqSymLists(i2cSymbols,NULL); + } else { + xf86LoaderReqSymLists(i2cSymbols, NULL); ViaI2CInit(pScrn); } if (!xf86LoadSubModule(pScrn, "ddc")) { - VIAFreeRec(pScrn); - return FALSE; + VIAFreeRec(pScrn); + return FALSE; } else { - xf86LoaderReqSymLists(ddcSymbols, NULL); - - if (pVia->pI2CBus1) { - pVia->DDC1 = xf86DoEDID_DDC2(pScrn->scrnIndex, pVia->pI2CBus1); - if (pVia->DDC1) { - xf86PrintEDID(pVia->DDC1); - xf86SetDDCproperties(pScrn, pVia->DDC1); - } - } + xf86LoaderReqSymLists(ddcSymbols, NULL); + + if (pVia->pI2CBus1) { + pVia->DDC1 = xf86DoEDID_DDC2(pScrn->scrnIndex, pVia->pI2CBus1); + if (pVia->DDC1) { + xf86PrintEDID(pVia->DDC1); + xf86SetDDCproperties(pScrn, pVia->DDC1); + } + } } ViaOutputsDetect(pScrn); if (!ViaOutputsSelect(pScrn)) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "No outputs possible.\n"); - VIAFreeRec(pScrn); - return FALSE; + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "No outputs possible.\n"); + VIAFreeRec(pScrn); + return FALSE; } - if (pBIOSInfo->PanelActive && + if (pBIOSInfo->PanelActive && ((pVia->Chipset == VIA_K8M800) || - (pVia->Chipset == VIA_PM800) || - (pVia->Chipset == VIA_VM800) || - (pVia->Chipset == VIA_P4M890) || - (pVia->Chipset == VIA_K8M890) || - (pVia->Chipset == VIA_CX700) || - (pVia->Chipset == VIA_P4M900))) { - + (pVia->Chipset == VIA_PM800) || + (pVia->Chipset == VIA_VM800) || + (pVia->Chipset == VIA_P4M890) || + (pVia->Chipset == VIA_K8M890) || + (pVia->Chipset == VIA_CX700) || + (pVia->Chipset == VIA_P4M900))) { xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "Panel on K8M800, PM800, VM800, P4M890, K8M890, CX700 or " "P4M900 is currently not supported.\n"); xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "Using VBE to set modes to work around this.\n"); - - pVia->useVBEModes = TRUE; + pVia->useVBEModes = TRUE; } pVia->pVbe = NULL; if (pVia->useVBEModes) { - /* VBE doesn't properly initialise int10 itself */ - if (xf86LoadSubModule(pScrn, "int10") && xf86LoadSubModule(pScrn, "vbe")) { - xf86LoaderReqSymLists(vbeSymbols, NULL); - pVia->pVbe = VBEExtendedInit(NULL, pVia->EntityIndex, - SET_BIOS_SCRATCH | RESTORE_BIOS_SCRATCH); - } + /* VBE doesn't properly initialise int10 itself. */ + if (xf86LoadSubModule(pScrn, "int10") + && xf86LoadSubModule(pScrn, "vbe")) { + xf86LoaderReqSymLists(vbeSymbols, NULL); + pVia->pVbe = VBEExtendedInit(NULL, pVia->EntityIndex, + SET_BIOS_SCRATCH | + RESTORE_BIOS_SCRATCH); + } - if (!pVia->pVbe) - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "VBE initialisation failed." - " Using builtin code to set modes.\n"); + if (!pVia->pVbe) + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "VBE initialisation failed." + " Using builtin code to set modes.\n"); } if (pVia->pVbe) { - - if (!ViaVbeModePreInit( pScrn )) { - VIAFreeRec(pScrn); - return FALSE; - } + if (!ViaVbeModePreInit(pScrn)) { + VIAFreeRec(pScrn); + return FALSE; + } + } else { - /* Add own Modes */ - ViaModesAttach(pScrn, pScrn->monitor); + /* Add own modes. */ + ViaModesAttach(pScrn, pScrn->monitor); - /* - * Setup the ClockRanges, which describe what clock ranges are available, - * and what sort of modes they can be used for. - */ + /* + * Set up ClockRanges, which describe what clock ranges are + * available, and what sort of modes they can be used for. + */ + clockRanges = xnfalloc(sizeof(ClockRange)); + clockRanges->next = NULL; + clockRanges->minClock = 20000; + clockRanges->maxClock = 230000; - clockRanges = xnfalloc(sizeof(ClockRange)); - clockRanges->next = NULL; - clockRanges->minClock = 20000; - clockRanges->maxClock = 230000; + clockRanges->clockIndex = -1; + clockRanges->interlaceAllowed = TRUE; + clockRanges->doubleScanAllowed = FALSE; - clockRanges->clockIndex = -1; - clockRanges->interlaceAllowed = TRUE; - clockRanges->doubleScanAllowed = FALSE; + /* + * xf86ValidateModes will check that the mode HTotal and VTotal values + * don't exceed the chipset's limit if pScrn->maxHValue and + * pScrn->maxVValue are set. Since our VIAValidMode() already takes + * care of this, we don't worry about setting them here. + * + * CLE266A: + * Max Line Pitch: 4080, (FB corruption when higher, driver problem?) + * Max Height: 4096 (and beyond) + * + * CLE266A: primary AdjustFrame can use only 24 bits, so we are limited + * to 12x11 bits; 4080x2048 (~2:1), 3344x2508 (4:3), or 2896x2896 (1:1). + * Test CLE266Cx, KM400, KM400A, K8M800, PM800, CN400 please. + * + * We should be able to limit the memory available for a mode to 32 MB, + * but xf86ValidateModes (or miScanLineWidth) fails to catch this + * properly (apertureSize). + */ - /* - * xf86ValidateModes will check that the mode HTotal and VTotal values - * don't exceed the chipset's limit if pScrn->maxHValue and - * pScrn->maxVValue are set. Since our VIAValidMode() already takes - * care of this, we don't worry about setting them here. - * - * CLE266A: - * Max Line Pitch: 4080, (FB corruption when higher, driver problem?) - * Max Height: 4096 (and beyond) - * - * CLE266A: primary AdjustFrame only is able to use 24bits, so we are - * limited to 12x11bits; 4080x2048 (~2:1), 3344x2508 (4:3) or 2896x2896 - * (1:1). - * Test CLE266Cx, KM400, KM400A, K8M800, PM800, CN400 please. - * - * We should be able to limit the memory available for a mode to 32MB, - * yet xf86ValidateModes (or miScanLineWidth) fails to catch this properly - * (apertureSize). - */ + /* Select valid modes from those available. */ + i = xf86ValidateModes(pScrn, pScrn->monitor->Modes, /* availModes */ + pScrn->display->modes, /* modeNames */ + clockRanges, /* list of clock ranges */ + NULL, /* list of line pitches */ + 256, /* minimum line pitch */ + 3344, /* maximum line pitch */ + 32 * 8, /* pitch inc (bits) */ + 128, /* min height */ + 2508, /* max height */ + pScrn->display->virtualX, /* virtual width */ + pScrn->display->virtualY, /* virtual height */ + pVia->videoRambytes, /* apertureSize */ + LOOKUP_BEST_REFRESH); /* lookup mode flags */ - /* Select valid modes from those available */ - i = xf86ValidateModes(pScrn, - pScrn->monitor->Modes, /* availModes */ - pScrn->display->modes, /* modeNames */ - clockRanges, /* list of clock ranges */ - NULL, /* list of line pitches */ - 256, /* mini line pitch */ - 3344, /* max line pitch */ - 32*8, /* pitch inc (bits) */ - 128, /* min height */ - 2508, /* max height */ - pScrn->display->virtualX, /* virtual width */ - pScrn->display->virtualY, /* virtual height */ - pVia->videoRambytes, /* apertureSize */ - LOOKUP_BEST_REFRESH); /* lookup mode flags */ + if (i == -1) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "xf86ValidateModes failure\n"); + VIAFreeRec(pScrn); + return FALSE; + } + xf86PruneDriverModes(pScrn); - if (i == -1) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "xf86ValidateModes failure\n"); - VIAFreeRec(pScrn); - return FALSE; - } + if (i == 0 || pScrn->modes == NULL) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "No valid modes found\n"); + VIAFreeRec(pScrn); + return FALSE; + } + } - xf86PruneDriverModes(pScrn); - - if (i == 0 || pScrn->modes == NULL) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "No valid modes found\n"); - VIAFreeRec(pScrn); - return FALSE; - } - - } - /* Set up screen parameters. */ pVia->Bpp = pScrn->bitsPerPixel >> 3; pVia->Bpl = pScrn->displayWidth * pVia->Bpp; @@ -1618,7 +1720,7 @@ xf86LoaderReqSymLists(fbSymbols, NULL); #else - /* load bpp-specific modules */ + /* Load bpp-specific modules. */ switch (pScrn->bitsPerPixel) { case 8: mod = "cfb"; @@ -1644,32 +1746,31 @@ if (!pVia->NoAccel) { #ifdef VIA_HAVE_EXA - if(pVia->useEXA) { + if (pVia->useEXA) { #if (EXA_VERSION_MAJOR >= 2) - XF86ModReqInfo req; - int errmaj, errmin; - - memset(&req, 0, sizeof(req)); - req.majorversion = 2; - req.minorversion = 0; - if (!LoadSubModule(pScrn->module, "exa", NULL, NULL, NULL, &req, - &errmaj, &errmin)) { - LoaderErrorMsg(NULL, "exa", errmaj, errmin); - VIAFreeRec(pScrn); - return FALSE; - } - + XF86ModReqInfo req; + int errmaj, errmin; + + memset(&req, 0, sizeof(req)); + req.majorversion = 2; + req.minorversion = 0; + if (!LoadSubModule(pScrn->module, "exa", NULL, NULL, NULL, &req, + &errmaj, &errmin)) { + LoaderErrorMsg(NULL, "exa", errmaj, errmin); + VIAFreeRec(pScrn); + return FALSE; + } #else - - if(!xf86LoadSubModule(pScrn, "exa")) { - VIAFreeRec(pScrn); - return FALSE; - } + + if (!xf86LoadSubModule(pScrn, "exa")) { + VIAFreeRec(pScrn); + return FALSE; + } #endif /* EXA_VERSION */ - xf86LoaderReqSymLists(exaSymbols, NULL); - } + xf86LoaderReqSymLists(exaSymbols, NULL); + } #endif /* VIA_HAVE_EXA */ - if(!xf86LoadSubModule(pScrn, "xaa")) { + if (!xf86LoadSubModule(pScrn, "xaa")) { VIAFreeRec(pScrn); return FALSE; } @@ -1698,149 +1799,143 @@ } -static Bool VIAEnterVT(int scrnIndex, int flags) +static Bool +VIAEnterVT(int scrnIndex, int flags) { ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; - VIAPtr pVia = VIAPTR(pScrn); + VIAPtr pVia = VIAPTR(pScrn); vgaHWPtr hwp = VGAHWPTR(pScrn); - Bool ret; + Bool ret; - /* FIXME: Rebind AGP memory here */ + /* FIXME: Rebind AGP memory here. */ DEBUG(xf86DrvMsg(scrnIndex, X_INFO, "VIAEnterVT\n")); - + if (pVia->pVbe) { - if (pVia->vbeSR) - ViaVbeSaveRestore(pScrn, MODE_SAVE); - else - VIASave(pScrn); - ret = ViaVbeSetMode(pScrn, pScrn->currentMode); + if (pVia->vbeSR) + ViaVbeSaveRestore(pScrn, MODE_SAVE); + else + VIASave(pScrn); + ret = ViaVbeSetMode(pScrn, pScrn->currentMode); } else { - VIASave(pScrn); - ret = VIAWriteMode(pScrn, pScrn->currentMode); + VIASave(pScrn); + ret = VIAWriteMode(pScrn, pScrn->currentMode); } vgaHWUnlock(hwp); VIASaveScreen(pScrn->pScreen, SCREEN_SAVER_ON); - - /* Patch for APM suspend resume, HWCursor has garbage */ + /* A patch for APM suspend/resume, when HWCursor has garbage. */ if (pVia->hwcursor) - ViaCursorRestore(pScrn); + ViaCursorRestore(pScrn); - /* restore video status */ + /* Restore video status. */ if (!pVia->IsSecondary) viaRestoreVideo(pScrn); #ifdef XF86DRI if (pVia->directRenderingEnabled) { kickVblank(pScrn); - VIADRIRingBufferInit(pScrn); - viaDRIOffscreenRestore(pScrn); + VIADRIRingBufferInit(pScrn); + viaDRIOffscreenRestore(pScrn); } -#endif +#endif if (pVia->NoAccel) { - memset(pVia->FBBase, 0x00, pVia->Bpl * pScrn->virtualY); + memset(pVia->FBBase, 0x00, pVia->Bpl * pScrn->virtualY); } else { - viaAccelFillRect(pScrn, 0, 0, pScrn->displayWidth, pScrn->virtualY, - 0x00000000); - viaAccelSyncMarker(pScrn); + viaAccelFillRect(pScrn, 0, 0, pScrn->displayWidth, pScrn->virtualY, + 0x00000000); + viaAccelSyncMarker(pScrn); } #ifdef XF86DRI if (pVia->directRenderingEnabled) { - DRIUnlock(screenInfo.screens[scrnIndex]); + DRIUnlock(screenInfo.screens[scrnIndex]); } -#endif +#endif return ret; } -static void VIALeaveVT(int scrnIndex, int flags) +static void +VIALeaveVT(int scrnIndex, int flags) { ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; - vgaHWPtr hwp = VGAHWPTR(pScrn); - VIAPtr pVia = VIAPTR(pScrn); + vgaHWPtr hwp = VGAHWPTR(pScrn); + VIAPtr pVia = VIAPTR(pScrn); DEBUG(xf86DrvMsg(scrnIndex, X_INFO, "VIALeaveVT\n")); #ifdef XF86DRI if (pVia->directRenderingEnabled) { - volatile drm_via_sarea_t *saPriv = (drm_via_sarea_t *) - DRIGetSAREAPrivate(pScrn->pScreen); + volatile drm_via_sarea_t *saPriv = (drm_via_sarea_t *) + DRIGetSAREAPrivate(pScrn->pScreen); - DRILock(screenInfo.screens[scrnIndex], 0); - saPriv->ctxOwner = ~0; + DRILock(screenInfo.screens[scrnIndex], 0); + saPriv->ctxOwner = ~0; } #endif viaAccelSync(pScrn); - /* - * A soft reset helps fix 3D hang on VT switch. - */ + /* A soft reset helps to avoid a 3D hang on VT switch. */ if (pVia->Chipset != VIA_K8M890 && pVia->Chipset != VIA_P4M900) hwp->writeSeq(hwp, 0x1A, pVia->SavedReg.SR1A | 0x40); #ifdef XF86DRI if (pVia->directRenderingEnabled) { - VIADRIRingBufferCleanup(pScrn); - viaDRIOffscreenSave(pScrn); + VIADRIRingBufferCleanup(pScrn); + viaDRIOffscreenSave(pScrn); } #endif - if (pVia->VQEnable) + if (pVia->VQEnable) viaDisableVQ(pScrn); - /* Save video status and turn off all video activities */ - + /* Save video status and turn off all video activities. */ if (!pVia->IsSecondary) viaSaveVideo(pScrn); if (pVia->hwcursor) - ViaCursorStore(pScrn); + ViaCursorStore(pScrn); - if (pVia->pVbe && pVia->vbeSR) - ViaVbeSaveRestore(pScrn, MODE_RESTORE); + if (pVia->pVbe && pVia->vbeSR) + ViaVbeSaveRestore(pScrn, MODE_RESTORE); else - VIARestore(pScrn); + VIARestore(pScrn); vgaHWLock(hwp); - } static void VIASave(ScrnInfoPtr pScrn) { - vgaHWPtr hwp = VGAHWPTR(pScrn); - VIAPtr pVia = VIAPTR(pScrn); - VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; - VIARegPtr Regs = &pVia->SavedReg; + vgaHWPtr hwp = VGAHWPTR(pScrn); + VIAPtr pVia = VIAPTR(pScrn); + VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; + VIARegPtr Regs = &pVia->SavedReg; int i; DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIASave\n")); - if(pVia->IsSecondary) - { - DevUnion* pPriv; + if (pVia->IsSecondary) { + DevUnion *pPriv; VIAEntPtr pVIAEnt; - VIAPtr pVia1; + VIAPtr pVia1; vgaHWPtr hwp1; - DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Secondary\n")); + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Secondary\n")); - pPriv = xf86GetEntityPrivate(pScrn->entityList[0], - gVIAEntityIndex); + pPriv = xf86GetEntityPrivate(pScrn->entityList[0], gVIAEntityIndex); pVIAEnt = pPriv->ptr; hwp1 = VGAHWPTR(pVIAEnt->pPrimaryScrn); pVia1 = VIAPTR(pVIAEnt->pPrimaryScrn); hwp->SavedReg = hwp1->SavedReg; pVia->SavedReg = pVia1->SavedReg; - } - else { - DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Primary\n")); + } else { + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Primary\n")); vgaHWProtect(pScrn, TRUE); @@ -1849,42 +1944,41 @@ else vgaHWSave(pScrn, &hwp->SavedReg, VGA_SR_MODE); - /* Unlock extended regs */ - hwp->writeSeq(hwp, 0x10, 0x01); + /* Unlock and save extended registers. */ + hwp->writeSeq(hwp, 0x10, 0x01); - Regs->SR14 = hwp->readSeq(hwp, 0x14); - Regs->SR15 = hwp->readSeq(hwp, 0x15); - Regs->SR16 = hwp->readSeq(hwp, 0x16); - Regs->SR17 = hwp->readSeq(hwp, 0x17); - Regs->SR18 = hwp->readSeq(hwp, 0x18); - Regs->SR19 = hwp->readSeq(hwp, 0x19); - Regs->SR1A = hwp->readSeq(hwp, 0x1A); - Regs->SR1B = hwp->readSeq(hwp, 0x1B); - Regs->SR1C = hwp->readSeq(hwp, 0x1C); - Regs->SR1D = hwp->readSeq(hwp, 0x1D); - Regs->SR1E = hwp->readSeq(hwp, 0x1E); - Regs->SR1F = hwp->readSeq(hwp, 0x1F); + Regs->SR14 = hwp->readSeq(hwp, 0x14); + Regs->SR15 = hwp->readSeq(hwp, 0x15); + Regs->SR16 = hwp->readSeq(hwp, 0x16); + Regs->SR17 = hwp->readSeq(hwp, 0x17); + Regs->SR18 = hwp->readSeq(hwp, 0x18); + Regs->SR19 = hwp->readSeq(hwp, 0x19); + Regs->SR1A = hwp->readSeq(hwp, 0x1A); + Regs->SR1B = hwp->readSeq(hwp, 0x1B); + Regs->SR1C = hwp->readSeq(hwp, 0x1C); + Regs->SR1D = hwp->readSeq(hwp, 0x1D); + Regs->SR1E = hwp->readSeq(hwp, 0x1E); + Regs->SR1F = hwp->readSeq(hwp, 0x1F); - Regs->SR22 = hwp->readSeq(hwp, 0x22); - Regs->SR23 = hwp->readSeq(hwp, 0x23); - Regs->SR24 = hwp->readSeq(hwp, 0x24); - Regs->SR25 = hwp->readSeq(hwp, 0x25); - Regs->SR26 = hwp->readSeq(hwp, 0x26); - Regs->SR27 = hwp->readSeq(hwp, 0x27); - Regs->SR28 = hwp->readSeq(hwp, 0x28); - Regs->SR29 = hwp->readSeq(hwp, 0x29); - Regs->SR2A = hwp->readSeq(hwp, 0x2A); - Regs->SR2B = hwp->readSeq(hwp, 0x2B); + Regs->SR22 = hwp->readSeq(hwp, 0x22); + Regs->SR23 = hwp->readSeq(hwp, 0x23); + Regs->SR24 = hwp->readSeq(hwp, 0x24); + Regs->SR25 = hwp->readSeq(hwp, 0x25); + Regs->SR26 = hwp->readSeq(hwp, 0x26); + Regs->SR27 = hwp->readSeq(hwp, 0x27); + Regs->SR28 = hwp->readSeq(hwp, 0x28); + Regs->SR29 = hwp->readSeq(hwp, 0x29); + Regs->SR2A = hwp->readSeq(hwp, 0x2A); + Regs->SR2B = hwp->readSeq(hwp, 0x2B); - Regs->SR2E = hwp->readSeq(hwp, 0x2E); + Regs->SR2E = hwp->readSeq(hwp, 0x2E); Regs->SR44 = hwp->readSeq(hwp, 0x44); Regs->SR45 = hwp->readSeq(hwp, 0x45); Regs->SR46 = hwp->readSeq(hwp, 0x46); Regs->SR47 = hwp->readSeq(hwp, 0x47); - switch (pVia->Chipset) - { + switch (pVia->Chipset) { case VIA_CLE266: case VIA_KM400: break; @@ -1897,46 +1991,46 @@ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Crtc...\n")); - Regs->CR13 = hwp->readCrtc(hwp, 0x13); + Regs->CR13 = hwp->readCrtc(hwp, 0x13); - Regs->CR32 = hwp->readCrtc(hwp, 0x32); - Regs->CR33 = hwp->readCrtc(hwp, 0x33); - Regs->CR34 = hwp->readCrtc(hwp, 0x34); - Regs->CR35 = hwp->readCrtc(hwp, 0x35); - Regs->CR36 = hwp->readCrtc(hwp, 0x36); + Regs->CR32 = hwp->readCrtc(hwp, 0x32); + Regs->CR33 = hwp->readCrtc(hwp, 0x33); + Regs->CR34 = hwp->readCrtc(hwp, 0x34); + Regs->CR35 = hwp->readCrtc(hwp, 0x35); + Regs->CR36 = hwp->readCrtc(hwp, 0x36); - Regs->CR49 = hwp->readCrtc(hwp, 0x49); + Regs->CR49 = hwp->readCrtc(hwp, 0x49); - DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "TVSave...\n")); - if (pBIOSInfo->TVI2CDev) - ViaTVSave(pScrn); + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "TVSave...\n")); + if (pBIOSInfo->TVI2CDev) + ViaTVSave(pScrn); - /* Save LCD control regs */ + /* Save LCD control registers. */ for (i = 0; i < 68; i++) - Regs->CRTCRegs[i] = hwp->readCrtc(hwp, i + 0x50); + Regs->CRTCRegs[i] = hwp->readCrtc(hwp, i + 0x50); - Regs->CRA0 = hwp->readCrtc(hwp, 0xA0); - Regs->CRA1 = hwp->readCrtc(hwp, 0xA1); - Regs->CRA2 = hwp->readCrtc(hwp, 0xA2); + Regs->CRA0 = hwp->readCrtc(hwp, 0xA0); + Regs->CRA1 = hwp->readCrtc(hwp, 0xA1); + Regs->CRA2 = hwp->readCrtc(hwp, 0xA2); - Regs->CR97 = hwp->readCrtc(hwp, 0x97); - Regs->CR99 = hwp->readCrtc(hwp, 0x99); - Regs->CR9B = hwp->readCrtc(hwp, 0x9B); - Regs->CR9F = hwp->readCrtc(hwp, 0x9F); + Regs->CR97 = hwp->readCrtc(hwp, 0x97); + Regs->CR99 = hwp->readCrtc(hwp, 0x99); + Regs->CR9B = hwp->readCrtc(hwp, 0x9B); + Regs->CR9F = hwp->readCrtc(hwp, 0x9F); vgaHWProtect(pScrn, FALSE); } } -static void +static void VIARestore(ScrnInfoPtr pScrn) { - vgaHWPtr hwp = VGAHWPTR(pScrn); - VIAPtr pVia = VIAPTR(pScrn); - VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; - VIARegPtr Regs = &pVia->SavedReg; - int i; - CARD8 tmp; + vgaHWPtr hwp = VGAHWPTR(pScrn); + VIAPtr pVia = VIAPTR(pScrn); + VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; + VIARegPtr Regs = &pVia->SavedReg; + int i; + CARD8 tmp; DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIARestore\n")); @@ -1944,7 +2038,7 @@ vgaHWProtect(pScrn, TRUE); - /* Unlock extended regs */ + /* Unlock extended registers. */ hwp->writeSeq(hwp, 0x10, 0x01); hwp->writeCrtc(hwp, 0x6A, 0x00); @@ -1952,15 +2046,15 @@ hwp->writeCrtc(hwp, 0x6C, 0x00); if (pBIOSInfo->TVI2CDev) - ViaTVRestore(pScrn); + ViaTVRestore(pScrn); - /* Restore the standard vga regs */ + /* Restore the standard VGA registers. */ if (xf86IsPrimaryPci(pVia->PciInfo)) vgaHWRestore(pScrn, &hwp->SavedReg, VGA_SR_ALL); else vgaHWRestore(pScrn, &hwp->SavedReg, VGA_SR_MODE); - /* Restore extended regs */ + /* Restore extended registers. */ hwp->writeSeq(hwp, 0x14, Regs->SR14); hwp->writeSeq(hwp, 0x15, Regs->SR15); hwp->writeSeq(hwp, 0x16, Regs->SR16); @@ -1986,14 +2080,13 @@ hwp->writeSeq(hwp, 0x2B, Regs->SR2B); hwp->writeSeq(hwp, 0x2E, Regs->SR2E); - + hwp->writeSeq(hwp, 0x44, Regs->SR44); hwp->writeSeq(hwp, 0x45, Regs->SR45); hwp->writeSeq(hwp, 0x46, Regs->SR46); hwp->writeSeq(hwp, 0x47, Regs->SR47); - switch (pVia->Chipset) - { + switch (pVia->Chipset) { case VIA_CLE266: case VIA_KM400: break; @@ -2004,10 +2097,10 @@ break; } - /* Reset dotclocks */ + /* Reset dotclocks. */ ViaSeqMask(hwp, 0x40, 0x06, 0x06); ViaSeqMask(hwp, 0x40, 0x00, 0x06); - + hwp->writeCrtc(hwp, 0x13, Regs->CR13); hwp->writeCrtc(hwp, 0x32, Regs->CR32); hwp->writeCrtc(hwp, 0x33, Regs->CR33); @@ -2017,55 +2110,98 @@ hwp->writeCrtc(hwp, 0x49, Regs->CR49); - /* Restore LCD control regs */ + /* Restore LCD control registers. */ for (i = 0; i < 68; i++) hwp->writeCrtc(hwp, i + 0x50, Regs->CRTCRegs[i]); hwp->writeCrtc(hwp, 0xA0, Regs->CRA0); hwp->writeCrtc(hwp, 0xA1, Regs->CRA1); hwp->writeCrtc(hwp, 0xA2, Regs->CRA2); -/* +#if 0 hwp->writeCrtc(hwp, 0x97, Regs->CR97); hwp->writeCrtc(hwp, 0x99, Regs->CR99); hwp->writeCrtc(hwp, 0x9B, Regs->CR9B); hwp->writeCrtc(hwp, 0x9F, Regs->CR9F); -*/ +#endif if (pBIOSInfo->PanelActive) - ViaLCDPower(pScrn, TRUE); + ViaLCDPower(pScrn, TRUE); ViaDisablePrimaryFIFO(pScrn); - /* Reset clock */ + /* Reset clock. */ tmp = hwp->readMiscOut(hwp); hwp->writeMiscOut(hwp, tmp); vgaHWProtect(pScrn, FALSE); } + static Bool VIAMapMMIO(ScrnInfoPtr pScrn) { VIAPtr pVia = VIAPTR(pScrn); +#ifdef XSERVER_LIBPCIACCESS + int err; +#endif + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIAMapMMIO\n")); +#ifdef XSERVER_LIBPCIACCESS + pVia->FrameBufferBase = pVia->PciInfo->regions[0].base_addr; + pVia->MmioBase = pVia->PciInfo->regions[1].base_addr; +#else pVia->FrameBufferBase = pVia->PciInfo->memBase[0]; pVia->MmioBase = pVia->PciInfo->memBase[1]; +#endif xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "mapping MMIO @ 0x%lx with size 0x%x\n", pVia->MmioBase, VIA_MMIO_REGSIZE); +#ifdef XSERVER_LIBPCIACCESS + err = pci_device_map_range(pVia->PciInfo, + pVia->MmioBase, + VIA_MMIO_REGSIZE, + PCI_DEV_MAP_FLAG_WRITABLE, + (void **)&pVia->MapBase); + + if (err) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "Unable to map mmio BAR. %s (%d)\n", strerror(err), err); + return FALSE; + } +#else pVia->MapBase = xf86MapPciMem(pScrn->scrnIndex, VIDMEM_MMIO, pVia->PciTag, pVia->MmioBase, VIA_MMIO_REGSIZE); + if (!pVia->MapBase) + return FALSE; +#endif xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "mapping BitBlt MMIO @ 0x%lx with size 0x%x\n", pVia->MmioBase + VIA_MMIO_BLTBASE, VIA_MMIO_BLTSIZE); +#ifdef XSERVER_LIBPCIACCESS + err = pci_device_map_range(pVia->PciInfo, + pVia->MmioBase + VIA_MMIO_BLTBASE, + VIA_MMIO_BLTSIZE, + (PCI_DEV_MAP_FLAG_WRITABLE + | PCI_DEV_MAP_FLAG_WRITE_COMBINE), + (void **)&pVia->BltBase); + + if (err) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "Unable to map blt BAR. %s (%d)\n", strerror(err), err); + return FALSE; + } +#else pVia->BltBase = xf86MapPciMem(pScrn->scrnIndex, VIDMEM_MMIO, pVia->PciTag, pVia->MmioBase + VIA_MMIO_BLTBASE, VIA_MMIO_BLTSIZE); + if (!pVia->BltBase) + return FALSE; +#endif if (!pVia->MapBase || !pVia->BltBase) { xf86DrvMsg(pScrn->scrnIndex, X_ERROR, @@ -2073,34 +2209,34 @@ return FALSE; } - /* Memory mapped IO for Video Engine */ + /* Memory mapped IO for video engine. */ pVia->VidMapBase = pVia->MapBase + 0x200; - /* Memory mapped IO for Mpeg Engine */ + /* Memory mapped IO for mpeg engine. */ pVia->MpegMapBase = pVia->MapBase + 0xc00; - /* Set up MMIO vgaHW */ + /* Set up MMIO vgaHW. */ { - vgaHWPtr hwp = VGAHWPTR(pScrn); - CARD8 val; + vgaHWPtr hwp = VGAHWPTR(pScrn); + CARD8 val; - vgaHWSetMmioFuncs(hwp, pVia->MapBase, 0x8000); - - val = hwp->readEnable(hwp); - hwp->writeEnable(hwp, val | 0x01); - - val = hwp->readMiscOut(hwp); - hwp->writeMiscOut(hwp, val | 0x01); - - /* Unlock Extended IO Space */ - hwp->writeSeq(hwp, 0x10, 0x01); + vgaHWSetMmioFuncs(hwp, pVia->MapBase, 0x8000); - /* Enable MMIO */ - if (pVia->IsSecondary) - ViaSeqMask(hwp, 0x1A, 0x38, 0x38); - else - ViaSeqMask(hwp, 0x1A, 0x68, 0x68); + val = hwp->readEnable(hwp); + hwp->writeEnable(hwp, val | 0x01); - vgaHWGetIOBase(hwp); + val = hwp->readMiscOut(hwp); + hwp->writeMiscOut(hwp, val | 0x01); + + /* Unlock extended IO space. */ + hwp->writeSeq(hwp, 0x10, 0x01); + + /* Enable MMIO. */ + if (pVia->IsSecondary) + ViaSeqMask(hwp, 0x1A, 0x38, 0x38); + else + ViaSeqMask(hwp, 0x1A, 0x68, 0x68); + + vgaHWGetIOBase(hwp); } return TRUE; @@ -2111,6 +2247,9 @@ VIAMapFB(ScrnInfoPtr pScrn) { VIAPtr pVia = VIAPTR(pScrn); +#ifdef XSERVER_LIBPCIACCESS + int err; +#endif DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIAMapFB\n")); xf86DrvMsg(pScrn->scrnIndex, X_PROBED, @@ -2119,34 +2258,44 @@ if (pVia->videoRambytes) { - /* - * FIXME: This is a hack to get rid of offending wrongly sized - * MTRR regions set up by the VIA BIOS. Should be taken care of - * in the OS support layer. - */ +#ifndef XSERVER_LIBPCIACCESS + /* + * FIXME: This is a hack to get rid of offending wrongly sized + * MTRR regions set up by the VIA BIOS. Should be taken care of + * in the OS support layer. + */ - unsigned char *tmp; - tmp = xf86MapPciMem(pScrn->scrnIndex, VIDMEM_MMIO, - pVia->PciTag, pVia->FrameBufferBase, - pVia->videoRambytes); - xf86UnMapVidMem(pScrn->scrnIndex, (pointer)tmp, - pVia->videoRambytes); + unsigned char *tmp; - /* - * And, as if this wasn't enough, 2.6 series kernels doesn't - * remove MTRR regions on the first attempt. Try again. - */ + tmp = xf86MapPciMem(pScrn->scrnIndex, VIDMEM_MMIO, pVia->PciTag, + pVia->FrameBufferBase, pVia->videoRambytes); + xf86UnMapVidMem(pScrn->scrnIndex, (pointer) tmp, pVia->videoRambytes); - tmp = xf86MapPciMem(pScrn->scrnIndex, VIDMEM_MMIO, - pVia->PciTag, pVia->FrameBufferBase, - pVia->videoRambytes); - xf86UnMapVidMem(pScrn->scrnIndex, (pointer)tmp, - pVia->videoRambytes); + /* + * And, as if this wasn't enough, 2.6 series kernels don't + * remove MTRR regions on the first attempt. So try again. + */ - /* - * End of hack. - */ + tmp = xf86MapPciMem(pScrn->scrnIndex, VIDMEM_MMIO, pVia->PciTag, + pVia->FrameBufferBase, pVia->videoRambytes); + xf86UnMapVidMem(pScrn->scrnIndex, (pointer) tmp, pVia->videoRambytes); + /* + * End of hack. + */ +#endif + +#ifdef XSERVER_LIBPCIACCESS + err = pci_device_map_range(pVia->PciInfo, pVia->FrameBufferBase, + pVia->videoRambytes, + PCI_DEV_MAP_FLAG_WRITABLE, + (void **)&pVia->FBBase); + if (err) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "Unable to map mmio BAR. %s (%d)\n", strerror(err), err); + return FALSE; + } +#else pVia->FBBase = xf86MapPciMem(pScrn->scrnIndex, VIDMEM_FRAMEBUFFER, pVia->PciTag, pVia->FrameBufferBase, pVia->videoRambytes); @@ -2156,9 +2305,10 @@ "Internal error: could not map framebuffer\n"); return FALSE; } +#endif pVia->FBFreeStart = (pScrn->displayWidth * pScrn->bitsPerPixel >> 3) * - pScrn->virtualY; + pScrn->virtualY; pVia->FBFreeEnd = pVia->videoRambytes; xf86DrvMsg(pScrn->scrnIndex, X_PROBED, @@ -2166,9 +2316,14 @@ pVia->FBBase, pVia->FBFreeStart, pVia->FBFreeEnd); } +#ifdef XSERVER_LIBPCIACCESS + pScrn->memPhysBase = pVia->PciInfo->regions[0].base_addr; +#else pScrn->memPhysBase = pVia->PciInfo->memBase[0]; +#endif pScrn->fbOffset = 0; - if(pVia->IsSecondary) pScrn->fbOffset = pScrn->videoRam << 10; + if (pVia->IsSecondary) + pScrn->fbOffset = pScrn->videoRam << 10; return TRUE; } @@ -2181,21 +2336,39 @@ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIAUnmapMem\n")); - /* Disable MMIO */ + /* Disable MMIO. */ ViaSeqMask(VGAHWPTR(pScrn), 0x1A, 0x00, 0x60); +#ifdef XSERVER_LIBPCIACCESS if (pVia->MapBase) - xf86UnMapVidMem(pScrn->scrnIndex, (pointer)pVia->MapBase, VIA_MMIO_REGSIZE); + pci_device_unmap_range(pVia->PciInfo, (pointer) pVia->MapBase, + VIA_MMIO_REGSIZE); if (pVia->BltBase) - xf86UnMapVidMem(pScrn->scrnIndex, (pointer)pVia->BltBase, VIA_MMIO_BLTSIZE); + pci_device_unmap_range(pVia->PciInfo, (pointer) pVia->BltBase, + VIA_MMIO_BLTSIZE); if (pVia->FBBase) - xf86UnMapVidMem(pScrn->scrnIndex, (pointer)pVia->FBBase, pVia->videoRambytes); + pci_device_unmap_range(pVia->PciInfo, (pointer) pVia->FBBase, + pVia->videoRambytes); +#else + if (pVia->MapBase) + xf86UnMapVidMem(pScrn->scrnIndex, (pointer) pVia->MapBase, + VIA_MMIO_REGSIZE); + + if (pVia->BltBase) + xf86UnMapVidMem(pScrn->scrnIndex, (pointer) pVia->BltBase, + VIA_MMIO_BLTSIZE); + + if (pVia->FBBase) + xf86UnMapVidMem(pScrn->scrnIndex, (pointer) pVia->FBBase, + pVia->videoRambytes); +#endif } static void -VIALoadRgbLut(ScrnInfoPtr pScrn, int numColors, int *indices, LOCO *colors, VisualPtr pVisual) +VIALoadRgbLut(ScrnInfoPtr pScrn, int numColors, int *indices, LOCO *colors, + VisualPtr pVisual) { VIAPtr pVia = VIAPTR(pScrn); vgaHWPtr hwp = VGAHWPTR(pScrn); @@ -2212,39 +2385,39 @@ * X subsystem. So we just space out RGB values over the 256*3. */ switch (pScrn->bitsPerPixel) { - case 16: - for (i = 0; i < numColors; i++) { - index = indices[i]; - hwp->writeDacWriteAddr(hwp, index * 4); - for (j = 0; j < 4; j++) { - hwp->writeDacData(hwp, colors[index/2].red); - hwp->writeDacData(hwp, colors[index].green); - hwp->writeDacData(hwp, colors[index/2].blue); - } - } - break; - case 8: - case 24: - case 32: - for (i = 0; i < numColors; i++) { - index = indices[i]; - hwp->writeDacWriteAddr(hwp, index); - hwp->writeDacData(hwp, colors[index].red); - hwp->writeDacData(hwp, colors[index].green); - hwp->writeDacData(hwp, colors[index].blue); - } - break; - default: - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "Unsupported bitdepth: %d\n", pScrn->bitsPerPixel); - break; + case 16: + for (i = 0; i < numColors; i++) { + index = indices[i]; + hwp->writeDacWriteAddr(hwp, index * 4); + for (j = 0; j < 4; j++) { + hwp->writeDacData(hwp, colors[index / 2].red); + hwp->writeDacData(hwp, colors[index].green); + hwp->writeDacData(hwp, colors[index / 2].blue); + } + } + break; + case 8: + case 24: + case 32: + for (i = 0; i < numColors; i++) { + index = indices[i]; + hwp->writeDacWriteAddr(hwp, index); + hwp->writeDacData(hwp, colors[index].red); + hwp->writeDacData(hwp, colors[index].green); + hwp->writeDacData(hwp, colors[index].blue); + } + break; + default: + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "Unsupported bitdepth: %d\n", pScrn->bitsPerPixel); + break; } hwp->disablePalette(hwp); } static void VIALoadPalette(ScrnInfoPtr pScrn, int numColors, int *indices, - LOCO *colors, VisualPtr pVisual) + LOCO *colors, VisualPtr pVisual) { vgaHWPtr hwp = VGAHWPTR(pScrn); VIAPtr pVia = VIAPTR(pScrn); @@ -2254,38 +2427,39 @@ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIALoadPalette\n")); if (pScrn->bitsPerPixel != 8) { - switch(pVia->Chipset) { - case VIA_CLE266: - case VIA_KM400: - ViaSeqMask(hwp, 0x16, 0x80, 0x80); - break; + switch (pVia->Chipset) { + case VIA_CLE266: + case VIA_KM400: + ViaSeqMask(hwp, 0x16, 0x80, 0x80); + break; case VIA_P4M900: - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "VIALoadPalette: Function not implemented for this chipset.\n"); + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "VIALoadPalette: " + "Function not implemented for this chipset.\n"); return; - default: - ViaCrtcMask(hwp, 0x33, 0x80, 0x80); - break; - } + default: + ViaCrtcMask(hwp, 0x33, 0x80, 0x80); + break; + } - ViaSeqMask(hwp, 0x1A, 0x00, 0x01); - VIALoadRgbLut(pScrn, numColors, indices, colors, pVisual); + ViaSeqMask(hwp, 0x1A, 0x00, 0x01); + VIALoadRgbLut(pScrn, numColors, indices, colors, pVisual); - /* If secondary is enabled, adjust its palette too. */ - if (hwp->readCrtc(hwp, 0x6A) & 0x80) { - ViaSeqMask(hwp, 0x1A, 0x01, 0x01); - ViaCrtcMask(hwp, 0x6A, 0x02, 0x02); - switch(pVia->Chipset) { - case VIA_K8M800: - case VIA_PM800: - break; - default: - ViaSeqMask(hwp, 0x6A, 0x20, 0x20); - break; - } - VIALoadRgbLut(pScrn, numColors, indices, colors, pVisual); - } + /* If secondary is enabled, adjust its palette too. */ + if (hwp->readCrtc(hwp, 0x6A) & 0x80) { + ViaSeqMask(hwp, 0x1A, 0x01, 0x01); + ViaCrtcMask(hwp, 0x6A, 0x02, 0x02); + switch (pVia->Chipset) { + case VIA_K8M800: + case VIA_PM800: + break; + default: + ViaSeqMask(hwp, 0x6A, 0x20, 0x20); + break; + } + VIALoadRgbLut(pScrn, numColors, indices, colors, pVisual); + } - return; + return; } SR1A = hwp->readSeq(hwp, 0x1A); @@ -2294,48 +2468,45 @@ CR6A = hwp->readCrtc(hwp, 0x6A); if (pVia->IsSecondary) { - ViaSeqMask(hwp, 0x1A, 0x01, 0x01); - ViaSeqMask(hwp, 0x1B, 0x80, 0x80); - ViaCrtcMask(hwp, 0x67, 0x00, 0xC0); - ViaCrtcMask(hwp, 0x6A, 0xC0, 0xC0); + ViaSeqMask(hwp, 0x1A, 0x01, 0x01); + ViaSeqMask(hwp, 0x1B, 0x80, 0x80); + ViaCrtcMask(hwp, 0x67, 0x00, 0xC0); + ViaCrtcMask(hwp, 0x6A, 0xC0, 0xC0); } - + for (i = 0; i < numColors; i++) { - index = indices[i]; - hwp->writeDacWriteAddr(hwp, index); - hwp->writeDacData(hwp, colors[index].red); - hwp->writeDacData(hwp, colors[index].green); - hwp->writeDacData(hwp, colors[index].blue); + index = indices[i]; + hwp->writeDacWriteAddr(hwp, index); + hwp->writeDacData(hwp, colors[index].red); + hwp->writeDacData(hwp, colors[index].green); + hwp->writeDacData(hwp, colors[index].blue); } if (pVia->IsSecondary) { - hwp->writeSeq(hwp, 0x1A, SR1A); - hwp->writeSeq(hwp, 0x1B, SR1B); - hwp->writeCrtc(hwp, 0x67, CR67); - hwp->writeCrtc(hwp, 0x6A, CR6A); + hwp->writeSeq(hwp, 0x1A, SR1A); + hwp->writeSeq(hwp, 0x1B, SR1B); + hwp->writeCrtc(hwp, 0x67, CR67); + hwp->writeCrtc(hwp, 0x6A, CR6A); - /* Screen 0 palette was changed by mode setting of Screen 1, - * so load again */ - for (i = 0; i < numColors; i++) { - index = indices[i]; - hwp->writeDacWriteAddr(hwp, index); - hwp->writeDacData(hwp, colors[index].red); - hwp->writeDacData(hwp, colors[index].green); - hwp->writeDacData(hwp, colors[index].blue); + /* Screen 0 palette was changed by mode setting of Screen 1, + * so load it again. */ + for (i = 0; i < numColors; i++) { + index = indices[i]; + hwp->writeDacWriteAddr(hwp, index); + hwp->writeDacData(hwp, colors[index].red); + hwp->writeDacData(hwp, colors[index].green); + hwp->writeDacData(hwp, colors[index].blue); } } } -/* - * - */ -static Bool +static Bool VIAScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) { ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; vgaHWPtr hwp = VGAHWPTR(pScrn); VIAPtr pVia = VIAPTR(pScrn); - + pScrn->pScreen = pScreen; DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIAScreenInit\n")); @@ -2346,9 +2517,9 @@ return FALSE; if (pVia->pVbe && pVia->vbeSR) { - ViaVbeSaveRestore(pScrn, MODE_SAVE); + ViaVbeSaveRestore(pScrn, MODE_SAVE); } else { - VIASave(pScrn); + VIASave(pScrn); } vgaHWUnlock(hwp); @@ -2356,20 +2527,20 @@ pVia->FirstInit = TRUE; if (pVia->pVbe) { vgaHWBlankScreen(pScrn, FALSE); - if (!ViaVbeSetMode(pScrn, pScrn->currentMode)) { - vgaHWBlankScreen(pScrn, TRUE); - return FALSE; - } + if (!ViaVbeSetMode(pScrn, pScrn->currentMode)) { + vgaHWBlankScreen(pScrn, TRUE); + return FALSE; + } } else { vgaHWBlankScreen(pScrn, FALSE); - if (!VIAWriteMode(pScrn, pScrn->currentMode)) { - vgaHWBlankScreen(pScrn, TRUE); - return FALSE; - } + if (!VIAWriteMode(pScrn, pScrn->currentMode)) { + vgaHWBlankScreen(pScrn, TRUE); + return FALSE; + } } pVia->FirstInit = FALSE; - /* Darken the screen for aesthetic reasons and set the viewport */ + /* Darken the screen for aesthetic reasons and set the viewport. */ VIASaveScreen(pScreen, SCREEN_SAVER_ON); pScrn->AdjustFrame(scrnIndex, pScrn->frameX0, pScrn->frameY0, 0); @@ -2384,7 +2555,8 @@ if (!miSetPixmapDepths()) return FALSE; } else { - if (!miSetVisualTypes(pScrn->depth, miGetDefaultVisualMask(pScrn->depth), + if (!miSetVisualTypes(pScrn->depth, + miGetDefaultVisualMask(pScrn->depth), pScrn->rgbBits, pScrn->defaultVisual)) return FALSE; if (!miSetPixmapDepths()) @@ -2398,7 +2570,7 @@ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "- Visuals set up\n")); if (!VIAInternalScreenInit(scrnIndex, pScreen)) - return FALSE; + return FALSE; xf86SetBlackWhitePixels(pScreen); DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "- B & W\n")); @@ -2418,22 +2590,23 @@ } } } - #ifdef USE_FB - /* must be after RGB ordering fixed */ + /* Must be after RGB ordering is fixed. */ fbPictureInit(pScreen, 0, 0); #endif if (!pVia->NoAccel) { viaInitAccel(pScreen); } - + miInitializeBackingStore(pScreen); xf86SetBackingStore(pScreen); - /*xf86SetSilkenMouse(pScreen);*/ +#if 0 + xf86SetSilkenMouse(pScreen); +#endif DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "- Backing store set up\n")); - if(!pVia->shadowFB) /* hardware cursor needs to wrap this layer */ + if (!pVia->shadowFB) /* hardware cursor needs to wrap this layer */ VIADGAInit(pScreen); miDCInitialize(pScreen, xf86GetPointerScreenFuncs()); @@ -2447,7 +2620,7 @@ } if (pVia->shadowFB) - ViaShadowFBInit(pScrn, pScreen); + ViaShadowFBInit(pScrn, pScreen); if (!miCreateDefColormap(pScreen)) return FALSE; @@ -2472,13 +2645,13 @@ #ifdef XF86DRI if (pVia->directRenderingEnabled) - pVia->directRenderingEnabled = VIADRIFinishScreenInit(pScreen); + pVia->directRenderingEnabled = VIADRIFinishScreenInit(pScreen); if (pVia->directRenderingEnabled) { - VIADRIPtr pVIADRI = pVia->pDRIInfo->devPrivate; + VIADRIPtr pVIADRI = pVia->pDRIInfo->devPrivate; xf86DrvMsg(pScrn->scrnIndex, X_INFO, "direct rendering enabled\n"); - pVia->agpDMA = pVia->dma2d && pVIADRI->ringBufActive; + pVia->agpDMA = pVia->dma2d && pVIADRI->ringBufActive; } else { xf86DrvMsg(pScrn->scrnIndex, X_INFO, "direct rendering disabled\n"); } @@ -2487,30 +2660,29 @@ viaFinishInitAccel(pScreen); if (pVia->NoAccel) { - memset(pVia->FBBase, 0x00, pVia->videoRambytes); + memset(pVia->FBBase, 0x00, pVia->videoRambytes); } else { #ifdef XF86DRI - if (pVia->directRenderingEnabled) - DRILock(screenInfo.screens[scrnIndex], 0); + if (pVia->directRenderingEnabled) + DRILock(screenInfo.screens[scrnIndex], 0); #endif - viaAccelFillRect(pScrn, pScrn->frameX0, pScrn->frameY0, - pScrn->displayWidth, pScrn->virtualY, - 0x00000000); - viaAccelSyncMarker(pScrn); + viaAccelFillRect(pScrn, pScrn->frameX0, pScrn->frameY0, + pScrn->displayWidth, pScrn->virtualY, 0x00000000); + viaAccelSyncMarker(pScrn); #ifdef XF86DRI - if (pVia->directRenderingEnabled) - DRIUnlock(screenInfo.screens[scrnIndex]); + if (pVia->directRenderingEnabled) + DRIUnlock(screenInfo.screens[scrnIndex]); #endif } vgaHWBlankScreen(pScrn, TRUE); if (pVia->NoAccel) { - /* - * This is only for Xv in Noaccel path, and since Xv is in some - * sense accelerated, it might be a better idea to disable it - * altogether. - */ + /* + * This is only for Xv in Noaccel path, and since Xv is in some + * sense accelerated, it might be a better idea to disable it + * altogether. + */ BoxRec AvailFBArea; @@ -2518,10 +2690,10 @@ AvailFBArea.y1 = 0; AvailFBArea.x2 = pScrn->displayWidth; AvailFBArea.y2 = pScrn->virtualY + 1; - pVia->FBFreeStart=(AvailFBArea.y2 + 1)*pVia->Bpl; - xf86InitFBManager(pScreen, &AvailFBArea); - VIAInitLinear(pScreen); - pVia->driSize = (pVia->FBFreeEnd - pVia->FBFreeStart - pVia->Bpl); + pVia->FBFreeStart = (AvailFBArea.y2 + 1) * pVia->Bpl; + xf86InitFBManager(pScreen, &AvailFBArea); + VIAInitLinear(pScreen); + pVia->driSize = (pVia->FBFreeEnd - pVia->FBFreeStart - pVia->Bpl); } viaInitVideo(pScreen); @@ -2529,15 +2701,17 @@ if (serverGeneration == 1) xf86ShowUnusedOptions(pScrn->scrnIndex, pScrn->options); -#ifdef HAVE_DEBUG +#ifdef HAVE_DEBUG if (pVia->PrintVGARegs) { - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIAScreenInit: Printing VGA registers.\n"); - ViaVgahwPrint(VGAHWPTR(pScrn)); + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "VIAScreenInit: Printing VGA registers.\n"); + ViaVgahwPrint(VGAHWPTR(pScrn)); } if (pVia->PrintTVRegs) { - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIAScreenInit: Printing TV registers.\n"); - ViaTVPrintRegs(pScrn); + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "VIAScreenInit: Printing TV registers.\n"); + ViaTVPrintRegs(pScrn); } #endif @@ -2546,12 +2720,13 @@ } -static int VIAInternalScreenInit(int scrnIndex, ScreenPtr pScreen) +static int +VIAInternalScreenInit(int scrnIndex, ScreenPtr pScreen) { - ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; - VIAPtr pVia = VIAPTR(pScrn); - int width, height, displayWidth; - unsigned char *FBStart; + ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; + VIAPtr pVia = VIAPTR(pScrn); + int width, height, displayWidth; + unsigned char *FBStart; xf86DrvMsg(scrnIndex, X_INFO, "VIAInternalScreenInit\n"); @@ -2570,36 +2745,35 @@ pVia->ShadowPtr = xalloc(pVia->ShadowPitch * height); displayWidth = pVia->ShadowPitch / (pScrn->bitsPerPixel >> 3); FBStart = pVia->ShadowPtr; - } - else { + } else { pVia->ShadowPtr = NULL; FBStart = pVia->FBBase; } #ifdef USE_FB return fbScreenInit(pScreen, FBStart, width, height, - pScrn->xDpi, pScrn->yDpi, displayWidth, - pScrn->bitsPerPixel); + pScrn->xDpi, pScrn->yDpi, displayWidth, + pScrn->bitsPerPixel); #else switch (pScrn->bitsPerPixel) { - case 8: - return cfbScreenInit(pScreen, FBStart, width, height, pScrn->xDpi, - pScrn->yDpi, displayWidth); - case 16: - return cfb16ScreenInit(pScreen, FBStart, width, height, pScrn->xDpi, - pScrn->yDpi, displayWidth); - case 32: - return cfb32ScreenInit(pScreen, FBStart, width, height, pScrn->xDpi, - pScrn->yDpi, displayWidth); - default: - xf86DrvMsg(scrnIndex, X_ERROR, "Internal error: invalid bpp (%d) in " - "VIAInternalScreenInit\n", pScrn->bitsPerPixel); - return FALSE; + case 8: + return cfbScreenInit(pScreen, FBStart, width, height, pScrn->xDpi, + pScrn->yDpi, displayWidth); + case 16: + return cfb16ScreenInit(pScreen, FBStart, width, height, pScrn->xDpi, + pScrn->yDpi, displayWidth); + case 32: + return cfb32ScreenInit(pScreen, FBStart, width, height, pScrn->xDpi, + pScrn->yDpi, displayWidth); + default: + xf86DrvMsg(scrnIndex, X_ERROR, "Internal error: invalid bpp (%d) " + "in VIAInternalScreenInit\n", pScrn->bitsPerPixel); + return FALSE; } #endif } -static Bool +static Bool VIAWriteMode(ScrnInfoPtr pScrn, DisplayModePtr mode) { VIAPtr pVia = VIAPTR(pScrn); @@ -2625,30 +2799,27 @@ if (!ViaVbeSetMode(pScrn, mode)) return FALSE; /* - * FIXME: pVia->IsSecondary is not working here. - * We should be able to detect when the display - * is using the secondary head. - * TODO: This should be enabled for others - * chipsets as well + * FIXME: pVia->IsSecondary is not working here. We should be able + * to detect when the display is using the secondary head. + * TODO: This should be enabled for other chipsets as well. */ - if (pVia->Chipset == VIA_P4M900 && - pVia->pBIOSInfo->PanelActive) { + if (pVia->Chipset == VIA_P4M900 && pVia->pBIOSInfo->PanelActive) { /* * Since we are using virtual, we need to adjust - * the offset to match the framebuffer alignment + * the offset to match the framebuffer alignment. */ if (pScrn->displayWidth != mode->HDisplay) ViaModeSecondaryVGAOffset(pScrn); // ViaModeSecondaryVGAFixAlignment(pScrn, mode); - } + } } /* Enable the graphics engine. */ if (!pVia->NoAccel) { #if defined(XF86DRI) || defined(VIA_HAVE_EXA) - VIAInitialize3DEngine(pScrn); -#endif - viaInitialize2DEngine(pScrn); + VIAInitialize3DEngine(pScrn); +#endif + viaInitialize2DEngine(pScrn); } VIAAdjustFrame(pScrn->scrnIndex, pScrn->frameX0, pScrn->frameY0, 0); @@ -2660,40 +2831,37 @@ VIACloseScreen(int scrnIndex, ScreenPtr pScreen) { ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; - vgaHWPtr hwp = VGAHWPTR(pScrn); - VIAPtr pVia = VIAPTR(pScrn); + vgaHWPtr hwp = VGAHWPTR(pScrn); + VIAPtr pVia = VIAPTR(pScrn); DEBUG(xf86DrvMsg(scrnIndex, X_INFO, "VIACloseScreen\n")); - /* Is the display currently visible ? */ - if(pScrn->vtSema) - { + /* Is the display currently visible? */ + if (pScrn->vtSema) { #ifdef XF86DRI if (pVia->directRenderingEnabled) - DRILock(screenInfo.screens[scrnIndex], 0); + DRILock(screenInfo.screens[scrnIndex], 0); #endif - /* Wait Hardware Engine idle to exit graphical mode */ + /* Wait for hardware engine to idle before exiting graphical mode. */ viaAccelSync(pScrn); - - /* A soft reset Fixes 3D Hang after X restart */ - if (pVia->Chipset != VIA_K8M890 && pVia->Chipset != VIA_P4M900) + /* A soft reset avoids a 3D hang after X restart. */ + if (pVia->Chipset != VIA_K8M890 && pVia->Chipset != VIA_P4M900) hwp->writeSeq(hwp, 0x1A, pVia->SavedReg.SR1A | 0x40); - if (!pVia->IsSecondary) { - /* Turn off all video activities */ - viaExitVideo(pScrn); + if (!pVia->IsSecondary) { + /* Turn off all video activities. */ + viaExitVideo(pScrn); VIAHideCursor(pScrn); } if (pVia->VQEnable) - viaDisableVQ(pScrn); + viaDisableVQ(pScrn); } - #ifdef XF86DRI if (pVia->directRenderingEnabled) - VIADRICloseScreen(pScreen); + VIADRICloseScreen(pScreen); #endif viaExitAccel(pScreen); @@ -2711,17 +2879,17 @@ } if (pScrn->vtSema) { - if (pVia->pVbe && pVia->vbeSR) - ViaVbeSaveRestore(pScrn, MODE_RESTORE); - else - VIARestore(pScrn); + if (pVia->pVbe && pVia->vbeSR) + ViaVbeSaveRestore(pScrn, MODE_RESTORE); + else + VIARestore(pScrn); - vgaHWLock(hwp); + vgaHWLock(hwp); VIAUnmapMem(pScrn); } pScrn->vtSema = FALSE; pScreen->CloseScreen = pVia->CloseScreen; - return (*pScreen->CloseScreen)(scrnIndex, pScreen); + return (*pScreen->CloseScreen) (scrnIndex, pScreen); } /* @@ -2749,32 +2917,32 @@ VIAAdjustFrame(int scrnIndex, int x, int y, int flags) { ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; - vgaHWPtr hwp = VGAHWPTR(pScrn); - VIAPtr pVia = VIAPTR(pScrn); - CARD32 Base; + vgaHWPtr hwp = VGAHWPTR(pScrn); + VIAPtr pVia = VIAPTR(pScrn); + CARD32 Base; DEBUG(xf86DrvMsg(scrnIndex, X_INFO, "VIAAdjustFrame\n")); if (pVia->pVbe) { - ViaVbeAdjustFrame(scrnIndex, x, y, flags); + ViaVbeAdjustFrame(scrnIndex, x, y, flags); } else { Base = (y * pScrn->displayWidth + x) * (pScrn->bitsPerPixel / 8); - /* now program the start address registers */ + /* Now program the start address registers. */ if (pVia->IsSecondary) { Base = (Base + pScrn->fbOffset) >> 3; - ViaCrtcMask(hwp, 0x62, (Base & 0x7F) << 1 , 0xFE); - hwp->writeCrtc(hwp, 0x63, (Base & 0x7F80) >> 7); - hwp->writeCrtc(hwp, 0x64, (Base & 0x7F8000) >> 15); + ViaCrtcMask(hwp, 0x62, (Base & 0x7F) << 1, 0xFE); + hwp->writeCrtc(hwp, 0x63, (Base & 0x7F80) >> 7); + hwp->writeCrtc(hwp, 0x64, (Base & 0x7F8000) >> 15); } else { Base = Base >> 1; hwp->writeCrtc(hwp, 0x0C, (Base & 0xFF00) >> 8); hwp->writeCrtc(hwp, 0x0D, Base & 0xFF); hwp->writeCrtc(hwp, 0x34, (Base & 0xFF0000) >> 16); #if 0 - /* The CLE266A doesn't have this implemented, it seems. -- Luc */ - ViaCrtcMask(hwp, 0x48, Base >> 24, 0x03); + /* The CLE266A doesn't have this implemented, it seems. -- Luc */ + ViaCrtcMask(hwp, 0x48, Base >> 24, 0x03); #endif } } @@ -2786,33 +2954,33 @@ VIASwitchMode(int scrnIndex, DisplayModePtr mode, int flags) { ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; - VIAPtr pVia = VIAPTR(pScrn); - Bool ret; - + VIAPtr pVia = VIAPTR(pScrn); + Bool ret; + DEBUG(xf86DrvMsg(scrnIndex, X_INFO, "VIASwitchMode\n")); - + #ifdef XF86DRI if (pVia->directRenderingEnabled) - DRILock(screenInfo.screens[scrnIndex], 0); + DRILock(screenInfo.screens[scrnIndex], 0); #endif - + viaAccelSync(pScrn); - + #ifdef XF86DRI if (pVia->directRenderingEnabled) - VIADRIRingBufferCleanup(pScrn); + VIADRIRingBufferCleanup(pScrn); #endif - + if (pVia->VQEnable) - viaDisableVQ(pScrn); + viaDisableVQ(pScrn); ret = VIAWriteMode(pScrn, mode); #ifdef XF86DRI if (pVia->directRenderingEnabled) { - kickVblank(pScrn); - VIADRIRingBufferInit(pScrn); - DRIUnlock(screenInfo.screens[scrnIndex]); + kickVblank(pScrn); + VIADRIRingBufferInit(pScrn); + DRIUnlock(screenInfo.screens[scrnIndex]); } #endif return ret; @@ -2822,49 +2990,50 @@ static void VIADPMS(ScrnInfoPtr pScrn, int mode, int flags) { - vgaHWPtr hwp = VGAHWPTR(pScrn); - VIAPtr pVia = VIAPTR(pScrn); - VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; - CARD8 val; + vgaHWPtr hwp = VGAHWPTR(pScrn); + VIAPtr pVia = VIAPTR(pScrn); + VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; + CARD8 val; if (pVia->pVbe) { - ViaVbeDPMS(pScrn, mode, flags); - return; + ViaVbeDPMS(pScrn, mode, flags); + return; } - /* Clear DPMS setting */ + /* Clear DPMS setting. */ val = hwp->readCrtc(hwp, 0x36); val &= 0xCF; - /* Turn Off CRT, if user doesn't want crt on */ + /* Turn CRT off, if user doesn't want it on. */ if (!pVia->IsSecondary && !pBIOSInfo->CrtActive) val |= 0x30; switch (mode) { - case DPMSModeOn: - if (pBIOSInfo->PanelActive) - ViaLCDPower(pScrn, TRUE); + case DPMSModeOn: + if (pBIOSInfo->PanelActive) + ViaLCDPower(pScrn, TRUE); - if (pBIOSInfo->TVActive) - ViaTVPower(pScrn, TRUE); + if (pBIOSInfo->TVActive) + ViaTVPower(pScrn, TRUE); - hwp->writeCrtc(hwp, 0x36, val); - break; - case DPMSModeStandby: - case DPMSModeSuspend: - case DPMSModeOff: - if (pBIOSInfo->PanelActive) - ViaLCDPower(pScrn, FALSE); + hwp->writeCrtc(hwp, 0x36, val); + break; + case DPMSModeStandby: + case DPMSModeSuspend: + case DPMSModeOff: + if (pBIOSInfo->PanelActive) + ViaLCDPower(pScrn, FALSE); - if (pBIOSInfo->TVActive) - ViaTVPower(pScrn, FALSE); + if (pBIOSInfo->TVActive) + ViaTVPower(pScrn, FALSE); - val |= 0x30; - hwp->writeCrtc(hwp, 0x36, val); - break; - default: - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Invalid DPMS mode %d\n", mode); - break; + val |= 0x30; + hwp->writeCrtc(hwp, 0x36, val); + break; + default: + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "Invalid DPMS mode %d\n", mode); + break; } return; } @@ -2873,47 +3042,31 @@ void VIAInitialize3DEngine(ScrnInfoPtr pScrn) { - VIAPtr pVia = VIAPTR(pScrn); + VIAPtr pVia = VIAPTR(pScrn); int i; VIASETREG(VIA_REG_TRANSET, 0x00010000); - for (i = 0; i <= 0x7D; i++) - { - VIASETREG(VIA_REG_TRANSPACE, (CARD32) i << 24); - } + VIASETREG(VIA_REG_TRANSPACE, (CARD32) i << 24); VIASETREG(VIA_REG_TRANSET, 0x00020000); - for (i = 0; i <= 0x94; i++) - { - VIASETREG(VIA_REG_TRANSPACE, (CARD32) i << 24); - } - + VIASETREG(VIA_REG_TRANSPACE, (CARD32) i << 24); VIASETREG(VIA_REG_TRANSPACE, 0x82400000); VIASETREG(VIA_REG_TRANSET, 0x01020000); - - for (i = 0; i <= 0x94; i++) - { - VIASETREG(VIA_REG_TRANSPACE, (CARD32) i << 24); - } + VIASETREG(VIA_REG_TRANSPACE, (CARD32) i << 24); + VIASETREG(VIA_REG_TRANSPACE, 0x82400000); - VIASETREG(VIA_REG_TRANSPACE, 0x82400000); VIASETREG(VIA_REG_TRANSET, 0xfe020000); - for (i = 0; i <= 0x03; i++) - { - VIASETREG(VIA_REG_TRANSPACE, (CARD32) i << 24); - } + VIASETREG(VIA_REG_TRANSPACE, (CARD32) i << 24); VIASETREG(VIA_REG_TRANSET, 0x00030000); + for (i = 0; i <= 0xff; i++) + VIASETREG(VIA_REG_TRANSPACE, 0); - for (i = 0; i <= 0xff; i++) - { - VIASETREG(VIA_REG_TRANSPACE, 0); - } VIASETREG(VIA_REG_TRANSET, 0x00100000); VIASETREG(VIA_REG_TRANSPACE, 0x00333004); VIASETREG(VIA_REG_TRANSPACE, 0x10000002); @@ -2924,31 +3077,28 @@ VIASETREG(VIA_REG_TRANSPACE, 0x64000000); VIASETREG(VIA_REG_TRANSET, 0x00fe0000); - - if (pVia->ChipRev >= 3 ) - VIASETREG(VIA_REG_TRANSPACE,0x40008c0f); + if (pVia->Chipset == VIA_CLE266 && pVia->ChipRev >= 3) + VIASETREG(VIA_REG_TRANSPACE, 0x40008c0f); else - VIASETREG(VIA_REG_TRANSPACE,0x4000800f); + VIASETREG(VIA_REG_TRANSPACE, 0x4000800f); + VIASETREG(VIA_REG_TRANSPACE, 0x44000000); + VIASETREG(VIA_REG_TRANSPACE, 0x45080C04); + VIASETREG(VIA_REG_TRANSPACE, 0x46800408); + VIASETREG(VIA_REG_TRANSPACE, 0x50000000); + VIASETREG(VIA_REG_TRANSPACE, 0x51000000); + VIASETREG(VIA_REG_TRANSPACE, 0x52000000); + VIASETREG(VIA_REG_TRANSPACE, 0x53000000); - VIASETREG(VIA_REG_TRANSPACE,0x44000000); - VIASETREG(VIA_REG_TRANSPACE,0x45080C04); - VIASETREG(VIA_REG_TRANSPACE,0x46800408); - VIASETREG(VIA_REG_TRANSPACE,0x50000000); - VIASETREG(VIA_REG_TRANSPACE,0x51000000); - VIASETREG(VIA_REG_TRANSPACE,0x52000000); - VIASETREG(VIA_REG_TRANSPACE,0x53000000); - - - VIASETREG(VIA_REG_TRANSET,0x00fe0000); - VIASETREG(VIA_REG_TRANSPACE,0x08000001); - VIASETREG(VIA_REG_TRANSPACE,0x0A000183); - VIASETREG(VIA_REG_TRANSPACE,0x0B00019F); - VIASETREG(VIA_REG_TRANSPACE,0x0C00018B); - VIASETREG(VIA_REG_TRANSPACE,0x0D00019B); - VIASETREG(VIA_REG_TRANSPACE,0x0E000000); - VIASETREG(VIA_REG_TRANSPACE,0x0F000000); - VIASETREG(VIA_REG_TRANSPACE,0x10000000); - VIASETREG(VIA_REG_TRANSPACE,0x11000000); - VIASETREG(VIA_REG_TRANSPACE,0x20000000); + VIASETREG(VIA_REG_TRANSET, 0x00fe0000); + VIASETREG(VIA_REG_TRANSPACE, 0x08000001); + VIASETREG(VIA_REG_TRANSPACE, 0x0A000183); + VIASETREG(VIA_REG_TRANSPACE, 0x0B00019F); + VIASETREG(VIA_REG_TRANSPACE, 0x0C00018B); + VIASETREG(VIA_REG_TRANSPACE, 0x0D00019B); + VIASETREG(VIA_REG_TRANSPACE, 0x0E000000); + VIASETREG(VIA_REG_TRANSPACE, 0x0F000000); + VIASETREG(VIA_REG_TRANSPACE, 0x10000000); + VIASETREG(VIA_REG_TRANSPACE, 0x11000000); + VIASETREG(VIA_REG_TRANSPACE, 0x20000000); } #endif Index: src/via_swov.c =================================================================== --- src/via_swov.c (revision 487) +++ src/via_swov.c (revision 553) @@ -1727,7 +1727,8 @@ * FIXME: * Enable video on secondary */ - if (pVia->Chipset == VIA_P4M900 && pVia->pBIOSInfo->PanelActive) { + if ((pVia->Chipset == VIA_P4M900 || pVia->Chipset == VIA_VM800) + && pVia->pBIOSInfo->PanelActive) { /* V1_ON_SND_DISPLAY */ vidCtl |= 0x80000000; /* SECOND_DISPLAY_COLOR_KEY_ENABLE */ Index: src/via_driver.h =================================================================== --- src/via_driver.h (revision 487) +++ src/via_driver.h (revision 553) @@ -66,6 +66,10 @@ #include "via_dmabuffer.h" #include "via_3d.h" +#ifdef XSERVER_LIBPCIACCESS +#include +#endif + #ifdef XF86DRI #define _XF86DRI_SERVER_ #include "sarea.h" @@ -234,8 +238,15 @@ int agpMem; CloseScreenProcPtr CloseScreen; - pciVideoPtr PciInfo; - PCITAG PciTag; +#ifdef XSERVER_LIBPCIACCESS + struct pci_device *PciInfo; + int mmio_bar; + int fb_bar; + PCITAG PciTag; +#else + pciVideoPtr PciInfo; + PCITAG PciTag; +#endif int Chipset; int ChipId; int ChipRev; Index: src/via_bandwidth.c =================================================================== --- src/via_bandwidth.c (revision 487) +++ src/via_bandwidth.c (revision 553) @@ -1,4 +1,5 @@ /* + * Copyright 2005-2008 The Openchrome Project [openchrome.org] * Copyright 2004-2005 The Unichrome Project [unichrome.sf.net] * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved. * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved. @@ -32,45 +33,41 @@ #include "via_id.h" /* - * Now that via_bios is no longer such a behemoth and the relevant - * code is moved via_mode.c, this code should be moved to via_mode.c too - * especially as output abstraction will trim via_mode.c down further + * Now that via_bios is no longer such a behemoth and the relevant code has + * been moved to via_mode.c, this code should be moved to via_mode.c too, + * especially since output abstraction will trim via_mode.c down further. */ -/* - * - */ static void ViaSetCLE266APrimaryFIFO(ScrnInfoPtr pScrn, Bool Enable) { VIAPtr pVia = VIAPTR(pScrn); - CARD32 dwGE230, dwGE298; - - DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaSetCLE266APrimaryFIFO: %d\n", Enable)); - + CARD32 dwGE230, dwGE298; + + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "ViaSetCLE266APrimaryFIFO: %d\n", Enable)); + dwGE298 = VIAGETREG(0x298); VIASETREG(0x298, dwGE298 | 0x20000000); - + dwGE230 = VIAGETREG(0x230); if (Enable) - dwGE230 |= 0x00200000; + dwGE230 |= 0x00200000; else - dwGE230 &= ~0x00200000; + dwGE230 &= ~0x00200000; VIASETREG(0x230, dwGE230); - + dwGE298 = VIAGETREG(0x298); VIASETREG(0x298, dwGE298 & ~0x20000000); } -/* - * - */ -typedef struct { - CARD16 X; - CARD16 Y; - CARD16 Bpp; - CARD8 bRamClock; - CARD8 bTuningValue; +typedef struct +{ + CARD16 X; + CARD16 Y; + CARD16 Bpp; + CARD8 bRamClock; + CARD8 bTuningValue; } ViaExpireNumberTable; static ViaExpireNumberTable CLE266AExpireNumber[] = { @@ -93,11 +90,10 @@ {1600,1200,32,0x03,0x4}, {1600,1200,32,0x04,0xA}, { 0, 0, 0, 0, 0} }; -/* - * - */ -static void -ViaSetPrimaryExpireNumber(ScrnInfoPtr pScrn, DisplayModePtr mode, ViaExpireNumberTable *Expire) + +static void +ViaSetPrimaryExpireNumber(ScrnInfoPtr pScrn, DisplayModePtr mode, + ViaExpireNumberTable *Expire) { vgaHWPtr hwp = VGAHWPTR(pScrn); VIAPtr pVia = VIAPTR(pScrn); @@ -109,15 +105,12 @@ (Expire->Y == mode->CrtcVDisplay) && (Expire->Bpp == pScrn->bitsPerPixel) && (Expire->bRamClock == pVia->MemClk)) { - ViaSeqMask(hwp, 0x22, Expire->bTuningValue, 0x1F); - return; - } + ViaSeqMask(hwp, 0x22, Expire->bTuningValue, 0x1F); + return; + } } -/* - * - */ -void +void ViaSetPrimaryFIFO(ScrnInfoPtr pScrn, DisplayModePtr mode) { vgaHWPtr hwp = VGAHWPTR(pScrn); @@ -125,126 +118,126 @@ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaSetPrimaryFIFO\n")); - /* standard values */ + /* Standard values. */ ViaSeqMask(hwp, 0x17, 0x1F, 0xFF); if (mode->CrtcHDisplay >= 1600) { - ViaSeqMask(hwp, 0x16, 0x0F, 0xBF); - ViaSeqMask(hwp, 0x18, 0x4F, 0xFF); + ViaSeqMask(hwp, 0x16, 0x0F, 0xBF); + ViaSeqMask(hwp, 0x18, 0x4F, 0xFF); } else if (mode->CrtcHDisplay >= 1024) { - ViaSeqMask(hwp, 0x16, 0x0C, 0xBF); - ViaSeqMask(hwp, 0x18, 0x4C, 0xFF); + ViaSeqMask(hwp, 0x16, 0x0C, 0xBF); + ViaSeqMask(hwp, 0x18, 0x4C, 0xFF); } else { - ViaSeqMask(hwp, 0x16, 0x08, 0xBF); - ViaSeqMask(hwp, 0x18, 0x4E, 0xFF); + ViaSeqMask(hwp, 0x16, 0x08, 0xBF); + ViaSeqMask(hwp, 0x18, 0x4E, 0xFF); } - switch(pVia->Chipset) { - case VIA_CLE266: - if (CLE266_REV_IS_CX(pVia->ChipRev)) { - if (pVia->HasSecondary) { /* SAMM or DuoView case */ - if (mode->HDisplay >= 1024) { - ViaSeqMask(hwp, 0x16, 0x1C, 0x3F); /* 28 */ - hwp->writeSeq(hwp, 0x17, 0x3F); /* 63 */ - hwp->writeSeq(hwp, 0x18, 0x57); /* 23 */ - } - } else { /* Single view or Simultaneous case */ + switch (pVia->Chipset) { + case VIA_CLE266: + if (CLE266_REV_IS_CX(pVia->ChipRev)) { + if (pVia->HasSecondary) { /* SAMM or DuoView case */ + if (mode->HDisplay >= 1024) { + ViaSeqMask(hwp, 0x16, 0x1C, 0x3F); /* 28 */ + hwp->writeSeq(hwp, 0x17, 0x3F); /* 63 */ + hwp->writeSeq(hwp, 0x18, 0x57); /* 23 */ + } + } else { /* Single view or Simultaneous case */ #if 0 - if (mode->HDisplay > 1024) { - ViaSeqMask(hwp, 0x16, 0x17, 0x3F); /* 23 */ - hwp->writeSeq(hwp, 0x17, 0x2F); /* 47 */ - hwp->writeSeq(hwp, 0x18, 0x57); /* 23 */ - } + if (mode->HDisplay > 1024) { + ViaSeqMask(hwp, 0x16, 0x17, 0x3F); /* 23 */ + hwp->writeSeq(hwp, 0x17, 0x2F); /* 47 */ + hwp->writeSeq(hwp, 0x18, 0x57); /* 23 */ + } #endif - } - /* originally when setting secondary */ - ViaSetPrimaryExpireNumber(pScrn, mode, CLE266CExpireNumber); - } else { - if ((mode->HDisplay > 1024) && pVia->HasSecondary) { - ViaSetCLE266APrimaryFIFO(pScrn, TRUE); + } + ViaSetPrimaryExpireNumber(pScrn, mode, CLE266CExpireNumber); + } else { + if ((mode->HDisplay > 1024) && pVia->HasSecondary) { + ViaSetCLE266APrimaryFIFO(pScrn, TRUE); - ViaSeqMask(hwp, 0x16, 0x17, 0x3F); /* 23 */ - hwp->writeSeq(hwp, 0x17, 0x2F); /* 47 */ - hwp->writeSeq(hwp, 0x18, 0x57); /* 23 */ - } - - /* originally when setting secondary */ - ViaSetPrimaryExpireNumber(pScrn, mode, CLE266AExpireNumber); - } - break; - case VIA_KM400: - if (pVia->HasSecondary) { /* SAMM or DuoView case */ - if ((mode->HDisplay >= 1600) && - (pVia->MemClk <= VIA_MEM_DDR200)) { - ViaSeqMask(hwp, 0x16, 0x09, 0x3F); /* 9 */ - hwp->writeSeq(hwp, 0x17, 0x1C); /* 28 */ + ViaSeqMask(hwp, 0x16, 0x17, 0x3F); /* 23 */ + hwp->writeSeq(hwp, 0x17, 0x2F); /* 47 */ + hwp->writeSeq(hwp, 0x18, 0x57); /* 23 */ + } + ViaSetPrimaryExpireNumber(pScrn, mode, CLE266AExpireNumber); + } + break; + case VIA_KM400: + if (pVia->HasSecondary) { /* SAMM or DuoView case */ + if ((mode->HDisplay >= 1600) && + (pVia->MemClk <= VIA_MEM_DDR200)) { + ViaSeqMask(hwp, 0x16, 0x09, 0x3F); /* 9 */ + hwp->writeSeq(hwp, 0x17, 0x1C); /* 28 */ + } else { + ViaSeqMask(hwp, 0x16, 0x1C, 0x3F); /* 28 */ + hwp->writeSeq(hwp, 0x17, 0x3F); /* 63 */ + } } else { - ViaSeqMask(hwp, 0x16, 0x1C, 0x3F); /* 28 */ - hwp->writeSeq(hwp, 0x17, 0x3F); /* 63 */ + if ((mode->HDisplay > 1280)) + ViaSeqMask(hwp, 0x16, 0x1C, 0x3F); /* 28 */ + else if (mode->HDisplay > 1024) + ViaSeqMask(hwp, 0x16, 0x17, 0x3F); /* 23 */ + else + ViaSeqMask(hwp, 0x16, 0x10, 0x3F); /* 16 */ + hwp->writeSeq(hwp, 0x17, 0x3F); /* 63 */ } - } else { - if ((mode->HDisplay > 1280)) - ViaSeqMask(hwp, 0x16, 0x1C, 0x3F); /* 28 */ - else if (mode->HDisplay > 1024) - ViaSeqMask(hwp, 0x16, 0x17, 0x3F); /* 23 */ + hwp->writeSeq(hwp, 0x18, 0x57); /* 23 */ + ViaSetPrimaryExpireNumber(pScrn, mode, KM400ExpireNumber); + break; + case VIA_K8M800: + hwp->writeSeq(hwp, 0x17, 0xBF); /* 384/2 - 1 = 191 */ + ViaSeqMask(hwp, 0x16, 0x92, 0xBF); /* 328/4 = 82 = 0x52 */ + ViaSeqMask(hwp, 0x18, 0x8a, 0xBF); /* 74 */ + + if ((mode->HDisplay >= 1400) && (pScrn->bitsPerPixel == 32)) + ViaSeqMask(hwp, 0x22, 0x10, 0x1F); /* 64/4 = 16 */ else - ViaSeqMask(hwp, 0x16, 0x10, 0x3F); /* 16 */ - hwp->writeSeq(hwp, 0x17, 0x3F); /* 63 */ - } - hwp->writeSeq(hwp, 0x18, 0x57); /* 23 */ + ViaSeqMask(hwp, 0x22, 0x00, 0x1F); /* 128/4 = overflow = 0 */ + break; + case VIA_PM800: + hwp->writeSeq(hwp, 0x17, 0x5F); /* 95 */ + ViaSeqMask(hwp, 0x16, 0x20, 0xBF); /* 32 */ + ViaSeqMask(hwp, 0x18, 0x10, 0xBF); /* 16 */ - /* originally when setting secondary */ - ViaSetPrimaryExpireNumber(pScrn, mode, KM400ExpireNumber); - break; - case VIA_K8M800: - hwp->writeSeq(hwp, 0x17, 0xBF); /* 384/2 - 1 = 191 (orig via comment: 384/8) */ - ViaSeqMask(hwp, 0x16, 0x92, 0xBF); /* 328/4 = 82 = 0x52*/ - ViaSeqMask(hwp, 0x18, 0x8a, 0xBF); /* 74 */ + if ((mode->HDisplay >= 1400) && (pScrn->bitsPerPixel == 32)) + ViaSeqMask(hwp, 0x22, 0x10, 0x1F); /* 64/4 = 16 */ + else + ViaSeqMask(hwp, 0x22, 0x1F, 0x1F); /* 31 */ + break; + case VIA_VM800: + hwp->writeSeq(hwp, 0x17, 0x2F); + ViaSeqMask(hwp, 0x16, 0x14, 0xBF); + ViaSeqMask(hwp, 0x18, 0x08, 0xBF); - if ((mode->HDisplay >= 1400) && (pScrn->bitsPerPixel == 32)) - ViaSeqMask(hwp, 0x22, 0x10, 0x1F); /* 64/4 = 16 */ - else - ViaSeqMask(hwp, 0x22, 0x00, 0x1F); /* 128/4 = overflow = 0 */ - break; - case VIA_PM800: - hwp->writeSeq(hwp, 0x17, 0x5F); /* 95 */ - ViaSeqMask(hwp, 0x16, 0x20, 0xBF); /* 32 */ - ViaSeqMask(hwp, 0x18, 0x10, 0xBF); /* 16 */ - - if ((mode->HDisplay >= 1400) && (pScrn->bitsPerPixel == 32)) - ViaSeqMask(hwp, 0x22, 0x10, 0x1F); /* 64/4 = 16 */ - else - ViaSeqMask(hwp, 0x22, 0x1F, 0x1F); /* 31 */ - break; - case VIA_VM800: - hwp->writeSeq(hwp, 0x17, 0x2F); - ViaSeqMask(hwp, 0x16, 0x14, 0xBF); - ViaSeqMask(hwp, 0x18, 0x08, 0xBF); - - if ((mode->HDisplay >= 1400) && (pScrn->bitsPerPixel == 32)) - ViaSeqMask(hwp, 0x22, 0x10, 0x1F); - else - ViaSeqMask(hwp, 0x22, 0x00, 0x1F); - break; - case VIA_K8M890: - case VIA_P4M900: - hwp->writeSeq(hwp, 0x16, 0x92); - hwp->writeSeq(hwp, 0x17, 0xB3); - hwp->writeSeq(hwp, 0x18, 0x8A); - break; - case VIA_P4M890: - break; - case VIA_CX700: - hwp->writeSeq(hwp, 0x16, 0x26); - hwp->writeSeq(hwp, 0x17, 0x5F); - hwp->writeSeq(hwp, 0x18, 0x66); - hwp->writeSeq(hwp, 0x22, 0x1F); - break; - default: - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "ViaSetPrimaryFIFO:" - " Chipset %d not implemented\n", pVia->Chipset); - break; - + if ((mode->HDisplay >= 1400) && (pScrn->bitsPerPixel == 32)) + ViaSeqMask(hwp, 0x22, 0x10, 0x1F); + else + ViaSeqMask(hwp, 0x22, 0x00, 0x1F); + break; + case VIA_K8M890: + hwp->writeSeq(hwp, 0x16, 0x92); + hwp->writeSeq(hwp, 0x17, 0xB3); + hwp->writeSeq(hwp, 0x18, 0x8A); + break; + case VIA_P4M900: + ViaSeqMask(hwp, 0x17, 0x2F, 0xFF); + ViaSeqMask(hwp, 0x16, 0x13, 0x3F); + ViaSeqMask(hwp, 0x16, 0x00, 0x80); + ViaSeqMask(hwp, 0x18, 0x13, 0x3F); + ViaSeqMask(hwp, 0x18, 0x00, 0x80); + break; + case VIA_P4M890: + break; + case VIA_CX700: + hwp->writeSeq(hwp, 0x16, 0x26); + hwp->writeSeq(hwp, 0x17, 0x5F); + hwp->writeSeq(hwp, 0x18, 0x66); + hwp->writeSeq(hwp, 0x22, 0x1F); + break; + default: + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "ViaSetPrimaryFIFO: " + "Chipset %d not implemented\n", pVia->Chipset); + break; } } @@ -253,7 +246,7 @@ * by any currently known TV encoder anyway. -- Luc. * */ -void +void ViaSetSecondaryFIFO(ScrnInfoPtr pScrn, DisplayModePtr mode) { vgaHWPtr hwp = VGAHWPTR(pScrn); @@ -262,139 +255,155 @@ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaSetSecondaryFIFO\n")); switch (pVia->Chipset) { - case VIA_CLE266: - if (CLE266_REV_IS_CX(pVia->ChipRev)) { - if (mode->HDisplay >= 1024) { - ViaCrtcMask(hwp, 0x6A, 0x20, 0x20); - hwp->writeCrtc(hwp, 0x68, 0xAB); /* depth: 10, threshold: 11 */ - } else { - ViaCrtcMask(hwp, 0x6A, 0x00, 0x20); - hwp->writeCrtc(hwp, 0x68, 0x67); /* depth: 6, threshold: 7 */ - } - } else { - if ((pScrn->bitsPerPixel >= 24) && - (((mode->VDisplay > 768) && (pVia->MemClk <= VIA_MEM_DDR200)) || - ((mode->HDisplay > 1280) && (pVia->MemClk <= VIA_MEM_DDR266)))) { - ViaCrtcMask(hwp, 0x6A, 0x20, 0x20); - hwp->writeCrtc(hwp, 0x68, 0xAB); /* depth: 10, threshold: 11 */ - } else { - ViaCrtcMask(hwp, 0x6A, 0x00, 0x20); - hwp->writeCrtc(hwp, 0x68, 0x67); /* depth: 6, threshold: 7 */ - } - } - break; - case VIA_KM400: - if ((mode->HDisplay >= 1600) && (pVia->MemClk <= VIA_MEM_DDR200)) { - ViaCrtcMask(hwp, 0x6A, 0x20, 0x20); - hwp->writeCrtc(hwp, 0x68, 0xEB); /* depth: 14, threshold: 11 */ - } else if ((pScrn->bitsPerPixel == 32) && - (((mode->HDisplay > 1024) && (pVia->MemClk <= VIA_MEM_DDR333)) || - ((mode->HDisplay >= 1024) && (pVia->MemClk <= VIA_MEM_DDR200)))) { - ViaCrtcMask(hwp, 0x6A, 0x20, 0x20); - hwp->writeCrtc(hwp, 0x68, 0xCA); /* depth: 12, threshold: 10 */ - } else if ((pScrn->bitsPerPixel == 16) && - (((mode->HDisplay > 1280) && (pVia->MemClk <= VIA_MEM_DDR333)) || - ((mode->HDisplay >= 1280) && (pVia->MemClk <= VIA_MEM_DDR200)))) { - ViaCrtcMask(hwp, 0x6A, 0x20, 0x20); - hwp->writeCrtc(hwp, 0x68, 0xAB); /* depth: 10, threshold: 11 */ - } else { - ViaCrtcMask(hwp, 0x6A, 0x00, 0x20); - hwp->writeCrtc(hwp, 0x68, 0x67); /* depth: 6, threshold: 7 */ - } - break; - case VIA_K8M800: - /* depth: (384 /8 -1 -1) = 46 = 0x2E */ - ViaCrtcMask(hwp, 0x68, 0xE0, 0xF0); - ViaCrtcMask(hwp, 0x94, 0x00, 0x80); - ViaCrtcMask(hwp, 0x95, 0x80, 0x80); + case VIA_CLE266: + if (CLE266_REV_IS_CX(pVia->ChipRev)) { + if (mode->HDisplay >= 1024) { + ViaCrtcMask(hwp, 0x6A, 0x20, 0x20); + hwp->writeCrtc(hwp, 0x68, 0xAB);/* depth 10, threshold 11 */ + } else { + ViaCrtcMask(hwp, 0x6A, 0x00, 0x20); + hwp->writeCrtc(hwp, 0x68, 0x67);/* depth 6, threshold 7 */ + } + } else { + if ((pScrn->bitsPerPixel >= 24) + && (((mode->VDisplay > 768) + && (pVia->MemClk <= VIA_MEM_DDR200)) || + ((mode->HDisplay > 1280) + && (pVia->MemClk <= VIA_MEM_DDR266)))) { + ViaCrtcMask(hwp, 0x6A, 0x20, 0x20); + hwp->writeCrtc(hwp, 0x68, 0xAB);/* depth 10, threshold 11 */ + } else { + ViaCrtcMask(hwp, 0x6A, 0x00, 0x20); + hwp->writeCrtc(hwp, 0x68, 0x67);/* depth 6, threshold 7 */ + } + } + break; + case VIA_KM400: + if ((mode->HDisplay >= 1600) && (pVia->MemClk <= VIA_MEM_DDR200)) { + ViaCrtcMask(hwp, 0x6A, 0x20, 0x20); + hwp->writeCrtc(hwp, 0x68, 0xEB); /* depth 14, threshold 11 */ + } else if ((pScrn->bitsPerPixel == 32) + && (((mode->HDisplay > 1024) + && (pVia->MemClk <= VIA_MEM_DDR333)) || + ((mode->HDisplay >= 1024) + && (pVia->MemClk <= VIA_MEM_DDR200)))) { + ViaCrtcMask(hwp, 0x6A, 0x20, 0x20); + hwp->writeCrtc(hwp, 0x68, 0xCA); /* depth 12, threshold 10 */ + } else if ((pScrn->bitsPerPixel == 16) + && (((mode->HDisplay > 1280) + && (pVia->MemClk <= VIA_MEM_DDR333)) || + ((mode->HDisplay >= 1280) + && (pVia->MemClk <= VIA_MEM_DDR200)))) { + ViaCrtcMask(hwp, 0x6A, 0x20, 0x20); + hwp->writeCrtc(hwp, 0x68, 0xAB); /* depth 10, threshold 11 */ + } else { + ViaCrtcMask(hwp, 0x6A, 0x00, 0x20); + hwp->writeCrtc(hwp, 0x68, 0x67); /* depth 6, threshold 7 */ + } + break; + case VIA_K8M800: + /* depth: (384 /8 -1 -1) = 46 = 0x2E */ + ViaCrtcMask(hwp, 0x68, 0xE0, 0xF0); + ViaCrtcMask(hwp, 0x94, 0x00, 0x80); + ViaCrtcMask(hwp, 0x95, 0x80, 0x80); - /* threshold: (328/4) = 82 = 0x52 */ - ViaCrtcMask(hwp, 0x68, 0x02, 0x0F); - ViaCrtcMask(hwp, 0x95, 0x50, 0x70); - - /* preq: 74 = 0x4A */ - ViaCrtcMask(hwp, 0x92, 0x0A, 0x0F); - ViaCrtcMask(hwp, 0x95, 0x04, 0x07); + /* threshold: (328/4) = 82 = 0x52 */ + ViaCrtcMask(hwp, 0x68, 0x02, 0x0F); + ViaCrtcMask(hwp, 0x95, 0x50, 0x70); - if ((mode->HDisplay >= 1400) && (pScrn->bitsPerPixel == 32)) - ViaCrtcMask(hwp, 0x94, 0x10, 0x7F); /* 64/4 */ - else - ViaCrtcMask(hwp, 0x94, 0x20, 0x7F); /* 128/4 */ - break; - case VIA_PM800: - /* depth: 12 - 1 = 0x0B */ - ViaCrtcMask(hwp, 0x68, 0xB0, 0xF0); - ViaCrtcMask(hwp, 0x94, 0x00, 0x80); - ViaCrtcMask(hwp, 0x95, 0x00, 0x80); + /* preq: 74 = 0x4A */ + ViaCrtcMask(hwp, 0x92, 0x0A, 0x0F); + ViaCrtcMask(hwp, 0x95, 0x04, 0x07); - /* threshold: 16 = 0x10 */ - ViaCrtcMask(hwp, 0x68, 0x00, 0x0F); - ViaCrtcMask(hwp, 0x95, 0x10, 0x70); + if ((mode->HDisplay >= 1400) && (pScrn->bitsPerPixel == 32)) + ViaCrtcMask(hwp, 0x94, 0x10, 0x7F); /* 64/4 */ + else + ViaCrtcMask(hwp, 0x94, 0x20, 0x7F); /* 128/4 */ + break; + case VIA_PM800: + /* depth: 12 - 1 = 0x0B */ + ViaCrtcMask(hwp, 0x68, 0xB0, 0xF0); + ViaCrtcMask(hwp, 0x94, 0x00, 0x80); + ViaCrtcMask(hwp, 0x95, 0x00, 0x80); - /* preq: 8 = 0x08 */ - ViaCrtcMask(hwp, 0x92, 0x08, 0x0F); - ViaCrtcMask(hwp, 0x95, 0x00, 0x07); + /* threshold: 16 = 0x10 */ + ViaCrtcMask(hwp, 0x68, 0x00, 0x0F); + ViaCrtcMask(hwp, 0x95, 0x10, 0x70); - if ((mode->HDisplay >= 1400) && (pScrn->bitsPerPixel == 32)) - ViaCrtcMask(hwp, 0x94, 0x10, 0x7F); /* 64/4 */ - else - ViaCrtcMask(hwp, 0x94, 0x20, 0x7F); /* 128/4 */ - break; - case VIA_VM800: - ViaCrtcMask(hwp, 0x68, 0xA0, 0xF0); - ViaCrtcMask(hwp, 0x94, 0x00, 0x80); - ViaCrtcMask(hwp, 0x95, 0x00, 0x80); + /* preq: 8 = 0x08 */ + ViaCrtcMask(hwp, 0x92, 0x08, 0x0F); + ViaCrtcMask(hwp, 0x95, 0x00, 0x07); - ViaCrtcMask(hwp, 0x68, 0x04, 0x0F); - ViaCrtcMask(hwp, 0x95, 0x10, 0x70); - - ViaCrtcMask(hwp, 0x92, 0x08, 0x0F); - ViaCrtcMask(hwp, 0x95, 0x00, 0x07); + if ((mode->HDisplay >= 1400) && (pScrn->bitsPerPixel == 32)) + ViaCrtcMask(hwp, 0x94, 0x10, 0x7F); /* 64/4 */ + else + ViaCrtcMask(hwp, 0x94, 0x20, 0x7F); /* 128/4 */ + break; + case VIA_VM800: + ViaCrtcMask(hwp, 0x68, 0xA0, 0xF0); + ViaCrtcMask(hwp, 0x94, 0x00, 0x80); + ViaCrtcMask(hwp, 0x95, 0x00, 0x80); - if ((mode->HDisplay >= 1400) && (pScrn->bitsPerPixel == 32)) - ViaCrtcMask(hwp, 0x94, 0x10, 0x7F); - else - ViaCrtcMask(hwp, 0x94, 0x20, 0x7F); - break; - case VIA_P4M890: - case VIA_K8M890: - case VIA_P4M900: - break; - case VIA_CX700: - ViaCrtcMask(hwp, 0x68, 0xA0, 0xF0); - ViaCrtcMask(hwp, 0x94, 0x00, 0x80); - ViaCrtcMask(hwp, 0x95, 0x00, 0x80); + ViaCrtcMask(hwp, 0x68, 0x04, 0x0F); + ViaCrtcMask(hwp, 0x95, 0x10, 0x70); - ViaCrtcMask(hwp, 0x68, 0x04, 0x0F); - ViaCrtcMask(hwp, 0x95, 0x10, 0x70); + ViaCrtcMask(hwp, 0x92, 0x08, 0x0F); + ViaCrtcMask(hwp, 0x95, 0x00, 0x07); - ViaCrtcMask(hwp, 0x92, 0x08, 0x0F); - ViaCrtcMask(hwp, 0x95, 0x00, 0x07); + if ((mode->HDisplay >= 1400) && (pScrn->bitsPerPixel == 32)) + ViaCrtcMask(hwp, 0x94, 0x10, 0x7F); + else + ViaCrtcMask(hwp, 0x94, 0x20, 0x7F); + break; + case VIA_P4M890: + case VIA_K8M890: + break; + case VIA_P4M900: + ViaCrtcMask(hwp, 0x68, 0xB0, 0xF0); + ViaCrtcMask(hwp, 0x94, 0x00, 0x80); + ViaCrtcMask(hwp, 0x95, 0x00, 0x80); - if ((mode->HDisplay >= 1400) && (pScrn->bitsPerPixel == 32)) - ViaCrtcMask(hwp, 0x94, 0x10, 0x7F); - else - ViaCrtcMask(hwp, 0x94, 0x20, 0x7F); - break; - default: - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "ViaSetSecondaryFIFO:" - " Chipset %d not implemented\n", pVia->Chipset); - break; + ViaCrtcMask(hwp, 0x68, 0x03, 0x0F); + ViaCrtcMask(hwp, 0x95, 0x10, 0x70); + ViaCrtcMask(hwp, 0x92, 0x03, 0x0F); + ViaCrtcMask(hwp, 0x95, 0x01, 0x07); + ViaCrtcMask(hwp, 0x94, 0x08, 0x7F); + break; + case VIA_CX700: + ViaCrtcMask(hwp, 0x68, 0xA0, 0xF0); + ViaCrtcMask(hwp, 0x94, 0x00, 0x80); + ViaCrtcMask(hwp, 0x95, 0x00, 0x80); + + ViaCrtcMask(hwp, 0x68, 0x04, 0x0F); + ViaCrtcMask(hwp, 0x95, 0x10, 0x70); + + ViaCrtcMask(hwp, 0x92, 0x08, 0x0F); + ViaCrtcMask(hwp, 0x95, 0x00, 0x07); + + if ((mode->HDisplay >= 1400) && (pScrn->bitsPerPixel == 32)) + ViaCrtcMask(hwp, 0x94, 0x10, 0x7F); + else + ViaCrtcMask(hwp, 0x94, 0x20, 0x7F); + break; + default: + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "ViaSetSecondaryFIFO: " + "Chipset %d not implemented\n", pVia->Chipset); + break; } } /* - * Wrap around ViaSetCLE266APrimaryFIFO + * Turn off the primary FIFO only for CLE266A. */ -void +void ViaDisablePrimaryFIFO(ScrnInfoPtr pScrn) { VIAPtr pVia = VIAPTR(pScrn); DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaDisablePrimaryFIFO\n")); - /* Cause of exit XWindow will dump back register value, others chipset no - * need to set extended fifo value */ + /* Needed because exiting from X-Window will dump back register values. + * Other chipsets have no need to set extended FIFO values. */ if ((pVia->Chipset == VIA_CLE266) && CLE266_REV_IS_AX(pVia->ChipRev) && ((pScrn->currentMode->HDisplay > 1024) || pVia->HasSecondary)) ViaSetCLE266APrimaryFIFO(pScrn, FALSE); Index: src/via_accel.c =================================================================== --- src/via_accel.c (revision 487) +++ src/via_accel.c (revision 553) @@ -1,7 +1,7 @@ /* * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved. * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved. - * Copyright 2006 Thomas Hellstrom. All Rights Reserved. + * Copyright 2006 Thomas Hellström. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -21,16 +21,13 @@ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. - * - * Mostly rewritten and modified for EXA support by Thomas Hellstrom 2005. */ -/************************************************************************* +/* + * 2D acceleration functions for the VIA/S3G UniChrome IGPs. * - * File: via_accel.c - * Content: 2D acceleration function for VIA/S3G UniChrome - * - ************************************************************************/ + * Mostly rewritten, and modified for EXA support, by Thomas Hellström. + */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -58,7 +55,6 @@ /* * Use PCI MMIO to flush the command buffer when AGP DMA is not available. */ - static void viaDumpDMA(ViaCommandBuffer * buf) { @@ -66,10 +62,10 @@ CARD32 *endp = bp + buf->pos; while (bp != endp) { - if (((bp - buf->buf) & 3) == 0) { - ErrorF("\n %04lx: ", (unsigned long)(bp - buf->buf)); - } - ErrorF("0x%08x ", (unsigned)*bp++); + if (((bp - buf->buf) & 3) == 0) { + ErrorF("\n %04lx: ", (unsigned long)(bp - buf->buf)); + } + ErrorF("0x%08x ", (unsigned)*bp++); } ErrorF("\n"); } @@ -86,57 +82,57 @@ VIAPtr pVia = VIAPTR(buf->pScrn); while (bp < endp) { - if (*bp == HALCYON_HEADER2) { - if (++bp == endp) - return; - VIASETREG(VIA_REG_TRANSET, transSetting = *bp++); - while (bp < endp) { - if ((transSetting != HC_ParaType_CmdVdata) && - ((*bp == HALCYON_HEADER2) - || (*bp & HALCYON_HEADER1MASK) == HALCYON_HEADER1)) - break; - VIASETREG(VIA_REG_TRANSPACE, *bp++); - } - } else if ((*bp & HALCYON_HEADER1MASK) == HALCYON_HEADER1) { + if (*bp == HALCYON_HEADER2) { + if (++bp == endp) + return; + VIASETREG(VIA_REG_TRANSET, transSetting = *bp++); + while (bp < endp) { + if ((transSetting != HC_ParaType_CmdVdata) + && ((*bp == HALCYON_HEADER2) + || (*bp & HALCYON_HEADER1MASK) == HALCYON_HEADER1)) + break; + VIASETREG(VIA_REG_TRANSPACE, *bp++); + } + } else if ((*bp & HALCYON_HEADER1MASK) == HALCYON_HEADER1) { - while (bp < endp) { - if (*bp == HALCYON_HEADER2) - break; - if (offset == 0) { - /* - * Not doing this wait will probably stall the processor - * for an unacceptable amount of time in VIASETREG while - * other high priority interrupts may be pending. - */ - if (pVia->Chipset != VIA_P4M890 && pVia->Chipset != VIA_K8M890 && - pVia->Chipset != VIA_P4M900) { - while (!(VIAGETREG(VIA_REG_STATUS) & VIA_VR_QUEUE_BUSY) - && (loop++ < MAXLOOP)) ; + while (bp < endp) { + if (*bp == HALCYON_HEADER2) + break; + if (offset == 0) { + /* + * Not doing this wait will probably stall the processor + * for an unacceptable amount of time in VIASETREG while + * other high priority interrupts may be pending. + */ + if (pVia->Chipset != VIA_P4M890 && + pVia->Chipset != VIA_K8M890 && + pVia->Chipset != VIA_P4M900) { + while (!(VIAGETREG(VIA_REG_STATUS) & VIA_VR_QUEUE_BUSY) + && (loop++ < MAXLOOP)) ; } - while ((VIAGETREG(VIA_REG_STATUS) & - (VIA_CMD_RGTR_BUSY | VIA_2D_ENG_BUSY)) && - (loop++ < MAXLOOP)) ; - } - offset = (*bp++ & 0x0FFFFFFF) << 2; - value = *bp++; - VIASETREG(offset, value); - } - } else { - ErrorF("Command stream parser error.\n"); - } + while ((VIAGETREG(VIA_REG_STATUS) & + (VIA_CMD_RGTR_BUSY | VIA_2D_ENG_BUSY)) + && (loop++ < MAXLOOP)) ; + } + offset = (*bp++ & 0x0FFFFFFF) << 2; + value = *bp++; + VIASETREG(offset, value); + } + } else { + ErrorF("Command stream parser error.\n"); + } } buf->pos = 0; buf->mode = 0; buf->has3dState = FALSE; } +#ifdef XF86DRI /* * Flush the command buffer using DRM. If in PCI mode, we can bypass DRM, - * but not for command buffers that contains 3D engine state, since then + * but not for command buffers that contain 3D engine state, since then * the DRM command verifier will lose track of the 3D engine state. */ - -#ifdef XF86DRI static void viaFlushDRIEnabled(ViaCommandBuffer * cb) { @@ -146,36 +142,33 @@ int tmpSize; drm_via_cmdbuffer_t b; - /* - * Align command buffer end for AGP DMA. - */ - + /* Align end of command buffer for AGP DMA. */ OUT_RING_H1(0x2f8, 0x67676767); if (pVia->agpDMA && cb->mode == 2 && cb->rindex != HC_ParaType_CmdVdata - && (cb->pos & 1)) { - OUT_RING(HC_DUMMY); + && (cb->pos & 1)) { + OUT_RING(HC_DUMMY); } tmpSize = cb->pos * sizeof(CARD32); if (pVia->agpDMA || (pVia->directRenderingEnabled && cb->has3dState)) { - cb->mode = 0; - cb->has3dState = FALSE; - while (tmpSize > 0) { - b.size = (tmpSize > VIA_DMASIZE) ? VIA_DMASIZE : tmpSize; - tmpSize -= b.size; - b.buf = tmp; - tmp += b.size; - if (drmCommandWrite(pVia->drmFD, - ((pVia->agpDMA) ? DRM_VIA_CMDBUFFER : DRM_VIA_PCICMD), &b, - sizeof(b))) { - ErrorF("DRM command buffer submission failed.\n"); - viaDumpDMA(cb); - return; - } - } - cb->pos = 0; + cb->mode = 0; + cb->has3dState = FALSE; + while (tmpSize > 0) { + b.size = (tmpSize > VIA_DMASIZE) ? VIA_DMASIZE : tmpSize; + tmpSize -= b.size; + b.buf = tmp; + tmp += b.size; + if (drmCommandWrite(pVia->drmFD, ((pVia->agpDMA) + ? DRM_VIA_CMDBUFFER : + DRM_VIA_PCICMD), &b, sizeof(b))) { + ErrorF("DRM command buffer submission failed.\n"); + viaDumpDMA(cb); + return; + } + } + cb->pos = 0; } else { - viaFlushPCI(cb); + viaFlushPCI(cb); } } #endif @@ -184,7 +177,6 @@ * Initialize a command buffer. Some fields are currently not used since they * are intended for Unichrome Pro group A video commands. */ - int viaSetupCBuffer(ScrnInfoPtr pScrn, ViaCommandBuffer * buf, unsigned size) { @@ -196,7 +188,7 @@ buf->bufSize = ((size == 0) ? VIA_DMASIZE : size) >> 2; buf->buf = (CARD32 *) xcalloc(buf->bufSize, sizeof(CARD32)); if (!buf->buf) - return BadAlloc; + return BadAlloc; buf->waitFlags = 0; buf->pos = 0; buf->mode = 0; @@ -206,7 +198,7 @@ buf->flushFunc = viaFlushPCI; #ifdef XF86DRI if (pVia->directRenderingEnabled) { - buf->flushFunc = viaFlushDRIEnabled; + buf->flushFunc = viaFlushDRIEnabled; } #endif return Success; @@ -215,12 +207,11 @@ /* * Free resources associated with a command buffer. */ - void viaTearDownCBuffer(ViaCommandBuffer * buf) { if (buf && buf->buf) - xfree(buf->buf); + xfree(buf->buf); buf->buf = NULL; } @@ -253,12 +244,11 @@ } /* - * Initialize the virtual command queue. Header 2 commands can be put - * in this queue for buffering. AFAIK it doesn't handle Header 1 + * Initialize the virtual command queue. Header-2 commands can be put + * in this queue for buffering. AFAIK it doesn't handle Header-1 * commands, which is really a pity, since it has to be idled before - * issuing a H1 command. + * issuing a Header-1 command. */ - static void viaEnableAgpVQ(VIAPtr pVia) { @@ -271,28 +261,27 @@ ((vqEndAddr & 0xFF000000) >> 16), vqLen = 0x53000000 | (VIA_VQ_SIZE >> 3); + VIASETREG(VIA_REG_TRANSET, 0x00fe0000); + VIASETREG(VIA_REG_TRANSPACE, 0x080003fe); + VIASETREG(VIA_REG_TRANSPACE, 0x0a00027c); + VIASETREG(VIA_REG_TRANSPACE, 0x0b000260); + VIASETREG(VIA_REG_TRANSPACE, 0x0c000274); + VIASETREG(VIA_REG_TRANSPACE, 0x0d000264); + VIASETREG(VIA_REG_TRANSPACE, 0x0e000000); + VIASETREG(VIA_REG_TRANSPACE, 0x0f000020); + VIASETREG(VIA_REG_TRANSPACE, 0x1000027e); + VIASETREG(VIA_REG_TRANSPACE, 0x110002fe); + VIASETREG(VIA_REG_TRANSPACE, 0x200f0060); + VIASETREG(VIA_REG_TRANSPACE, 0x00000006); + VIASETREG(VIA_REG_TRANSPACE, 0x40008c0f); + VIASETREG(VIA_REG_TRANSPACE, 0x44000000); + VIASETREG(VIA_REG_TRANSPACE, 0x45080c04); + VIASETREG(VIA_REG_TRANSPACE, 0x46800408); - VIASETREG(VIA_REG_TRANSET, 0x00fe0000); - VIASETREG(VIA_REG_TRANSPACE, 0x080003fe); - VIASETREG(VIA_REG_TRANSPACE, 0x0a00027c); - VIASETREG(VIA_REG_TRANSPACE, 0x0b000260); - VIASETREG(VIA_REG_TRANSPACE, 0x0c000274); - VIASETREG(VIA_REG_TRANSPACE, 0x0d000264); - VIASETREG(VIA_REG_TRANSPACE, 0x0e000000); - VIASETREG(VIA_REG_TRANSPACE, 0x0f000020); - VIASETREG(VIA_REG_TRANSPACE, 0x1000027e); - VIASETREG(VIA_REG_TRANSPACE, 0x110002fe); - VIASETREG(VIA_REG_TRANSPACE, 0x200f0060); - VIASETREG(VIA_REG_TRANSPACE, 0x00000006); - VIASETREG(VIA_REG_TRANSPACE, 0x40008c0f); - VIASETREG(VIA_REG_TRANSPACE, 0x44000000); - VIASETREG(VIA_REG_TRANSPACE, 0x45080c04); - VIASETREG(VIA_REG_TRANSPACE, 0x46800408); - - VIASETREG(VIA_REG_TRANSPACE, vqStartEndH); - VIASETREG(VIA_REG_TRANSPACE, vqStartL); - VIASETREG(VIA_REG_TRANSPACE, vqEndL); - VIASETREG(VIA_REG_TRANSPACE, vqLen); + VIASETREG(VIA_REG_TRANSPACE, vqStartEndH); + VIASETREG(VIA_REG_TRANSPACE, vqStartL); + VIASETREG(VIA_REG_TRANSPACE, vqEndL); + VIASETREG(VIA_REG_TRANSPACE, vqLen); } static void @@ -307,65 +296,62 @@ ((vqEndAddr & 0xFF000000) >> 16), vqLen = 0x73000000 | (VIA_VQ_SIZE >> 3); - VIASETREG(0x41c, 0x00100000); - VIASETREG(0x420, vqStartEndH); - VIASETREG(0x420, vqStartL); - VIASETREG(0x420, vqEndL); - VIASETREG(0x420, vqLen); - VIASETREG(0x420, 0x74301001); - VIASETREG(0x420, 0x00000000); + VIASETREG(0x41c, 0x00100000); + VIASETREG(0x420, vqStartEndH); + VIASETREG(0x420, vqStartL); + VIASETREG(0x420, vqEndL); + VIASETREG(0x420, vqLen); + VIASETREG(0x420, 0x74301001); + VIASETREG(0x420, 0x00000000); } /* * Disable the virtual command queue. */ - void viaDisableVQ(ScrnInfoPtr pScrn) { VIAPtr pVia = VIAPTR(pScrn); - switch ( pVia->Chipset ) - { - case VIA_P4M890: - case VIA_K8M890: - VIASETREG(0x41c, 0x00100000); - VIASETREG(0x420, 0x74301000); - break; - default: - VIASETREG(VIA_REG_TRANSET, 0x00fe0000); - VIASETREG(VIA_REG_TRANSPACE, 0x00000004); - VIASETREG(VIA_REG_TRANSPACE, 0x40008c0f); - VIASETREG(VIA_REG_TRANSPACE, 0x44000000); - VIASETREG(VIA_REG_TRANSPACE, 0x45080c04); - VIASETREG(VIA_REG_TRANSPACE, 0x46800408); - break; - } + switch (pVia->Chipset) { + case VIA_P4M890: + case VIA_K8M890: + VIASETREG(0x41c, 0x00100000); + VIASETREG(0x420, 0x74301000); + break; + default: + VIASETREG(VIA_REG_TRANSET, 0x00fe0000); + VIASETREG(VIA_REG_TRANSPACE, 0x00000004); + VIASETREG(VIA_REG_TRANSPACE, 0x40008c0f); + VIASETREG(VIA_REG_TRANSPACE, 0x44000000); + VIASETREG(VIA_REG_TRANSPACE, 0x45080c04); + VIASETREG(VIA_REG_TRANSPACE, 0x46800408); + break; + } } /* * Update our 2D state (TwoDContext) with a new mode. */ - static Bool viaAccelSetMode(int bpp, ViaTwodContext * tdc) { switch (bpp) { - case 16: - tdc->mode = VIA_GEM_16bpp; - tdc->bytesPPShift = 1; - return TRUE; - case 32: - tdc->mode = VIA_GEM_32bpp; - tdc->bytesPPShift = 2; - return TRUE; - case 8: - tdc->mode = VIA_GEM_8bpp; - tdc->bytesPPShift = 0; - return TRUE; - default: - tdc->bytesPPShift = 0; - return FALSE; + case 16: + tdc->mode = VIA_GEM_16bpp; + tdc->bytesPPShift = 1; + return TRUE; + case 32: + tdc->mode = VIA_GEM_32bpp; + tdc->bytesPPShift = 2; + return TRUE; + case 8: + tdc->mode = VIA_GEM_8bpp; + tdc->bytesPPShift = 0; + return TRUE; + default: + tdc->bytesPPShift = 0; + return FALSE; } } @@ -373,7 +359,6 @@ * Initialize the 2D engine and set the 2D context mode to the * current screen depth. Also enable the virtual queue. */ - void viaInitialize2DEngine(ScrnInfoPtr pScrn) { @@ -381,34 +366,31 @@ ViaTwodContext *tdc = &pVia->td; int i; - /* - * init 2D engine regs to reset 2D engine - */ - + /* Initialize the 2D engine registers to reset the 2D engine. */ for (i = 0x04; i < 0x44; i += 4) { - VIASETREG(i, 0x0); + VIASETREG(i, 0x0); } - switch( pVia->Chipset ) { + switch (pVia->Chipset) { case VIA_K8M890: - viaInitPCIe(pVia); - break; + viaInitPCIe(pVia); + break; default: - viaInitAgp(pVia); - break; + viaInitAgp(pVia); + break; } if (pVia->VQStart != 0) { - switch( pVia->Chipset ) { + switch (pVia->Chipset) { case VIA_K8M890: - viaEnablePCIeVQ(pVia); - break; + viaEnablePCIeVQ(pVia); + break; default: - viaEnableAgpVQ(pVia); - break; + viaEnableAgpVQ(pVia); + break; } } else { - viaDisableVQ(pScrn); + viaDisableVQ(pScrn); } viaAccelSetMode(pScrn->bitsPerPixel, tdc); @@ -417,7 +399,6 @@ /* * Wait for acceleration engines idle. An expensive way to sync. */ - void viaAccelSync(ScrnInfoPtr pScrn) { @@ -426,29 +407,28 @@ mem_barrier(); - switch (pVia->Chipset) { - case VIA_P4M890: - case VIA_K8M890: - case VIA_P4M900: - while ((VIAGETREG(VIA_REG_STATUS) & - (VIA_CMD_RGTR_BUSY | VIA_2D_ENG_BUSY)) && - (loop++ < MAXLOOP)) ; - break; - default: - while (!(VIAGETREG(VIA_REG_STATUS) & VIA_VR_QUEUE_BUSY) - && (loop++ < MAXLOOP)) ; + switch (pVia->Chipset) { + case VIA_P4M890: + case VIA_K8M890: + case VIA_P4M900: + while ((VIAGETREG(VIA_REG_STATUS) & + (VIA_CMD_RGTR_BUSY | VIA_2D_ENG_BUSY)) + && (loop++ < MAXLOOP)) ; + break; + default: + while (!(VIAGETREG(VIA_REG_STATUS) & VIA_VR_QUEUE_BUSY) + && (loop++ < MAXLOOP)) ; - while ((VIAGETREG(VIA_REG_STATUS) & - (VIA_CMD_RGTR_BUSY | VIA_2D_ENG_BUSY | VIA_3D_ENG_BUSY)) && - (loop++ < MAXLOOP)) ; - break; + while ((VIAGETREG(VIA_REG_STATUS) & + (VIA_CMD_RGTR_BUSY | VIA_2D_ENG_BUSY | VIA_3D_ENG_BUSY)) + && (loop++ < MAXLOOP)) ; + break; } } /* - * Set 2D state clipping on. + * Switch 2D state clipping on. */ - static void viaSetClippingRectangle(ScrnInfoPtr pScrn, int x1, int y1, int x2, int y2) { @@ -463,9 +443,8 @@ } /* - * Set 2D state clipping off. + * Switch 2D state clipping off. */ - static void viaDisableClipping(ScrnInfoPtr pScrn) { @@ -479,32 +458,28 @@ * Emit clipping borders to the command buffer and update the 2D context * current command with clipping info. */ - static int viaAccelClippingHelper(ViaCommandBuffer * cb, int refY, ViaTwodContext * tdc) { if (tdc->clipping) { - refY = (refY < tdc->clipY1) ? refY : tdc->clipY1; - tdc->cmd |= VIA_GEC_CLIP_ENABLE; - BEGIN_RING(4); - OUT_RING_H1(VIA_REG_CLIPTL, - ((tdc->clipY1 - refY) << 16) | tdc->clipX1); - OUT_RING_H1(VIA_REG_CLIPBR, - ((tdc->clipY2 - refY) << 16) | tdc->clipX2); + refY = (refY < tdc->clipY1) ? refY : tdc->clipY1; + tdc->cmd |= VIA_GEC_CLIP_ENABLE; + BEGIN_RING(4); + OUT_RING_H1(VIA_REG_CLIPTL, ((tdc->clipY1 - refY) << 16) | tdc->clipX1); + OUT_RING_H1(VIA_REG_CLIPBR, ((tdc->clipY2 - refY) << 16) | tdc->clipX2); } else { - tdc->cmd &= ~VIA_GEC_CLIP_ENABLE; + tdc->cmd &= ~VIA_GEC_CLIP_ENABLE; } return refY; - } /* * Emit a solid blit operation to the command buffer. */ - static void viaAccelSolidHelper(ViaCommandBuffer * cb, int x, int y, int w, int h, - unsigned fbBase, CARD32 mode, unsigned pitch, CARD32 fg, CARD32 cmd) + unsigned fbBase, CARD32 mode, unsigned pitch, + CARD32 fg, CARD32 cmd) { BEGIN_RING(14); OUT_RING_H1(VIA_REG_GEMODE, mode); @@ -519,7 +494,6 @@ /* * Check if we can use a planeMask and update the 2D context accordingly. */ - static Bool viaAccelPlaneMaskHelper(ViaTwodContext * tdc, CARD32 planeMask) { @@ -530,33 +504,27 @@ if ((planeMask & modeMask) != modeMask) { - /* - * Masking doesn't work in 8bpp. - */ + /* Masking doesn't work in 8bpp. */ + if (modeMask == 0xFF) { + tdc->keyControl &= 0x0FFFFFFF; + return FALSE; + } - if (modeMask == 0xFF) { - tdc->keyControl &= 0x0FFFFFFF; - return FALSE; - } + /* Translate the bit planemask to a byte planemask. */ + for (i = 0; i < (1 << tdc->bytesPPShift); ++i) { + curByteMask = (0xFF << (i << 3)); - /* - * Translate the bit planemask to a byte planemask. - */ + if ((planeMask & curByteMask) == 0) { + curMask |= (1 << i); + } else if ((planeMask & curByteMask) != curByteMask) { + tdc->keyControl &= 0x0FFFFFFF; + return FALSE; + } + } + ErrorF("DEBUG: planeMask 0x%08x, curMask 0%02x\n", + (unsigned)planeMask, (unsigned)curMask); - for (i = 0; i < (1 << tdc->bytesPPShift); ++i) { - curByteMask = (0xFF << (i << 3)); - - if ((planeMask & curByteMask) == 0) { - curMask |= (1 << i); - } else if ((planeMask & curByteMask) != curByteMask) { - tdc->keyControl &= 0x0FFFFFFF; - return FALSE; - } - } - ErrorF("DEBUG: planeMask 0x%08x, curMask 0%02x\n", - (unsigned)planeMask, (unsigned)curMask); - - tdc->keyControl = (tdc->keyControl & 0x0FFFFFFF) | (curMask << 28); + tdc->keyControl = (tdc->keyControl & 0x0FFFFFFF) | (curMask << 28); } return TRUE; @@ -565,37 +533,37 @@ /* * Emit transparency state and color to the command buffer. */ - static void viaAccelTransparentHelper(ViaTwodContext * tdc, ViaCommandBuffer * cb, - CARD32 keyControl, CARD32 transColor, Bool usePlaneMask) + CARD32 keyControl, CARD32 transColor, + Bool usePlaneMask) { tdc->keyControl &= ((usePlaneMask) ? 0xF0000000 : 0x00000000); tdc->keyControl |= (keyControl & 0x0FFFFFFF); BEGIN_RING(4); OUT_RING_H1(VIA_REG_KEYCONTROL, tdc->keyControl); if (keyControl) { - OUT_RING_H1(VIA_REG_SRCCOLORKEY, transColor); + OUT_RING_H1(VIA_REG_SRCCOLORKEY, transColor); } } /* * Emit a copy blit operation to the command buffer. */ - static void viaAccelCopyHelper(ViaCommandBuffer * cb, int xs, int ys, int xd, int yd, - int w, int h, unsigned srcFbBase, unsigned dstFbBase, CARD32 mode, - unsigned srcPitch, unsigned dstPitch, CARD32 cmd) + int w, int h, unsigned srcFbBase, unsigned dstFbBase, + CARD32 mode, unsigned srcPitch, unsigned dstPitch, + CARD32 cmd) { if (cmd & VIA_GEC_DECY) { - ys += h - 1; - yd += h - 1; + ys += h - 1; + yd += h - 1; } if (cmd & VIA_GEC_DECX) { - xs += w - 1; - xd += w - 1; + xs += w - 1; + xd += w - 1; } BEGIN_RING(16); @@ -603,7 +571,7 @@ OUT_RING_H1(VIA_REG_SRCBASE, srcFbBase >> 3); OUT_RING_H1(VIA_REG_DSTBASE, dstFbBase >> 3); OUT_RING_H1(VIA_REG_PITCH, VIA_PITCH_ENABLE | - ((dstPitch >> 3) << 16) | (srcPitch >> 3)); + ((dstPitch >> 3) << 16) | (srcPitch >> 3)); OUT_RING_H1(VIA_REG_SRCPOS, (ys << 16) | (xs & 0xFFFF)); OUT_RING_H1(VIA_REG_DSTPOS, (yd << 16) | (xd & 0xFFFF)); OUT_RING_H1(VIA_REG_DIMENSION, ((h - 1) << 16) | (w - 1)); @@ -611,14 +579,14 @@ } /* - * XAA functions. Note that the 2047 line blitter limit has been worked around by adding - * min(y1, y2, clipping y) * stride to the offset (which is recommended by VIA docs). - * The y values (including clipping) must be subtracted accordingly. + * XAA functions. Note that the blitter limit of 2047 lines has been worked + * around by adding min(y1, y2, clipping y) * stride to the offset (which is + * recommended by VIA docs). The y values (including clipping) must be + * subtracted accordingly. */ - static void viaSetupForScreenToScreenCopy(ScrnInfoPtr pScrn, int xdir, int ydir, int rop, - unsigned planemask, int trans_color) + unsigned planemask, int trans_color) { VIAPtr pVia = VIAPTR(pScrn); CARD32 cmd; @@ -629,19 +597,19 @@ cmd = VIA_GEC_BLT | VIAACCELCOPYROP(rop); if (xdir < 0) - cmd |= VIA_GEC_DECX; + cmd |= VIA_GEC_DECX; if (ydir < 0) - cmd |= VIA_GEC_DECY; + cmd |= VIA_GEC_DECY; tdc->cmd = cmd; viaAccelTransparentHelper(tdc, cb, (trans_color != -1) ? 0x4000 : 0x0000, - trans_color, FALSE); + trans_color, FALSE); } static void viaSubsequentScreenToScreenCopy(ScrnInfoPtr pScrn, int x1, int y1, - int x2, int y2, int w, int h) + int x2, int y2, int w, int h) { VIAPtr pVia = VIAPTR(pScrn); ViaTwodContext *tdc = &pVia->td; @@ -650,22 +618,21 @@ RING_VARS; if (!w || !h) - return; + return; sub = viaAccelClippingHelper(cb, y2, tdc); viaAccelCopyHelper(cb, x1, 0, x2, y2 - sub, w, h, - pScrn->fbOffset + pVia->Bpl * y1, pScrn->fbOffset + pVia->Bpl * sub, - tdc->mode, pVia->Bpl, pVia->Bpl, tdc->cmd); + pScrn->fbOffset + pVia->Bpl * y1, + pScrn->fbOffset + pVia->Bpl * sub, + tdc->mode, pVia->Bpl, pVia->Bpl, tdc->cmd); ADVANCE_RING; } /* * SetupForSolidFill is also called to set up for lines. */ - static void -viaSetupForSolidFill(ScrnInfoPtr pScrn, int color, int rop, - unsigned planemask) +viaSetupForSolidFill(ScrnInfoPtr pScrn, int color, int rop, unsigned planemask) { VIAPtr pVia = VIAPTR(pScrn); ViaTwodContext *tdc = &pVia->td; @@ -687,18 +654,18 @@ RING_VARS; if (!w || !h) - return; + return; sub = viaAccelClippingHelper(cb, y, tdc); viaAccelSolidHelper(cb, x, y - sub, w, h, - pScrn->fbOffset + pVia->Bpl * sub, tdc->mode, pVia->Bpl, tdc->fgColor, - tdc->cmd); + pScrn->fbOffset + pVia->Bpl * sub, tdc->mode, pVia->Bpl, + tdc->fgColor, tdc->cmd); ADVANCE_RING; } /* * Original VIA comment: - * The meaning of the two pattern paremeters to Setup & Subsequent for + * The meaning of the two pattern parameters to Setup & Subsequent for * Mono8x8Patterns varies depending on the flag bits. We specify * HW_PROGRAMMED_BITS, which means our hardware can handle 8x8 patterns * without caching in the frame buffer. Thus, Setup gets the pattern bits. @@ -708,10 +675,9 @@ * then Setup would get the unrotated pattern, and Subsequent gets the * origin values. */ - static void viaSetupForMono8x8PatternFill(ScrnInfoPtr pScrn, int pattern0, int pattern1, - int fg, int bg, int rop, unsigned planemask) + int fg, int bg, int rop, unsigned planemask) { VIAPtr pVia = VIAPTR(pScrn); int cmd; @@ -720,10 +686,10 @@ RING_VARS; cmd = VIA_GEC_BLT | VIA_GEC_PAT_REG | VIA_GEC_PAT_MONO | - VIAACCELPATTERNROP(rop); + VIAACCELPATTERNROP(rop); if (bg == -1) { - cmd |= VIA_GEC_MPAT_TRANS; + cmd |= VIA_GEC_MPAT_TRANS; } tdc->cmd = cmd; @@ -732,12 +698,11 @@ tdc->pattern0 = pattern0; tdc->pattern1 = pattern1; viaAccelTransparentHelper(tdc, cb, 0x00, 0x00, FALSE); - } static void viaSubsequentMono8x8PatternFillRect(ScrnInfoPtr pScrn, int patOffx, - int patOffy, int x, int y, int w, int h) + int patOffy, int x, int y, int w, int h) { VIAPtr pVia = VIAPTR(pScrn); CARD32 patOffset; @@ -748,7 +713,7 @@ RING_VARS; if (!w || !h) - return; + return; patOffset = ((patOffy & 0x7) << 29) | ((patOffx & 0x7) << 26); sub = viaAccelClippingHelper(cb, y, tdc); @@ -771,7 +736,7 @@ static void viaSetupForColor8x8PatternFill(ScrnInfoPtr pScrn, int patternx, int patterny, - int rop, unsigned planemask, int trans_color) + int rop, unsigned planemask, int trans_color) { VIAPtr pVia = VIAPTR(pScrn); ViaTwodContext *tdc = &pVia->td; @@ -781,12 +746,12 @@ tdc->cmd = VIA_GEC_BLT | VIAACCELPATTERNROP(rop); tdc->patternAddr = (patternx * pVia->Bpp + patterny * pVia->Bpl); viaAccelTransparentHelper(tdc, cb, (trans_color != -1) ? 0x4000 : 0x0000, - trans_color, FALSE); + trans_color, FALSE); } static void viaSubsequentColor8x8PatternFillRect(ScrnInfoPtr pScrn, int patOffx, - int patOffy, int x, int y, int w, int h) + int patOffy, int x, int y, int w, int h) { VIAPtr pVia = VIAPTR(pScrn); CARD32 patAddr; @@ -797,10 +762,10 @@ RING_VARS; if (!w || !h) - return; + return; patAddr = (tdc->patternAddr >> 3) | - ((patOffy & 0x7) << 29) | ((patOffx & 0x7) << 26); + ((patOffy & 0x7) << 29) | ((patOffx & 0x7) << 26); sub = viaAccelClippingHelper(cb, y, tdc); dstBase = pScrn->fbOffset + sub * pVia->Bpl; @@ -816,16 +781,15 @@ } /* - * CPU to screen functions cannot use AGP due to complicated syncing. Therefore the - * command buffer is flushed before new command emissions and viaFluchPCI is called - * explicitly instead of cb->flushFunc() at the end of each CPU to screen function. - * Should the buffer get completely filled again by a CPU to screen command emission, - * a horrible error will occur. + * CPU-to-screen functions cannot use AGP due to complicated syncing. + * Therefore the command buffer is flushed before new command emissions, and + * viaFluchPCI() is called explicitly instead of cb->flushFunc() at the end of + * each CPU-to-screen function. Should the buffer get completely filled again + * by a CPU-to-screen command emission, a horrible error will occur. */ - static void viaSetupForCPUToScreenColorExpandFill(ScrnInfoPtr pScrn, int fg, int bg, - int rop, unsigned planemask) + int rop, unsigned planemask) { VIAPtr pVia = VIAPTR(pScrn); int cmd; @@ -834,10 +798,10 @@ RING_VARS; cmd = VIA_GEC_BLT | VIA_GEC_SRC_SYS | VIA_GEC_SRC_MONO | - VIAACCELCOPYROP(rop); + VIAACCELCOPYROP(rop); if (bg == -1) { - cmd |= VIA_GEC_MSRC_TRANS; + cmd |= VIA_GEC_MSRC_TRANS; } tdc->cmd = cmd; @@ -851,7 +815,8 @@ static void viaSubsequentScanlineCPUToScreenColorExpandFill(ScrnInfoPtr pScrn, int x, - int y, int w, int h, int skipleft) + int y, int w, int h, + int skipleft) { VIAPtr pVia = VIAPTR(pScrn); ViaTwodContext *tdc = &pVia->td; @@ -860,8 +825,8 @@ RING_VARS; if (skipleft) { - viaSetClippingRectangle(pScrn, (x + skipleft), y, (x + w - 1), - (y + h - 1)); + viaSetClippingRectangle(pScrn, (x + skipleft), y, (x + w - 1), + (y + h - 1)); } sub = viaAccelClippingHelper(cb, y, tdc); @@ -869,8 +834,8 @@ OUT_RING_H1(VIA_REG_BGCOLOR, tdc->bgColor); OUT_RING_H1(VIA_REG_FGCOLOR, tdc->fgColor); viaAccelCopyHelper(cb, 0, 0, x, y - sub, w, h, 0, - pScrn->fbOffset + sub * pVia->Bpl, tdc->mode, pVia->Bpl, pVia->Bpl, - tdc->cmd); + pScrn->fbOffset + sub * pVia->Bpl, tdc->mode, + pVia->Bpl, pVia->Bpl, tdc->cmd); viaFlushPCI(cb); viaDisableClipping(pScrn); @@ -878,7 +843,7 @@ static void viaSetupForImageWrite(ScrnInfoPtr pScrn, int rop, unsigned planemask, - int trans_color, int bpp, int depth) + int trans_color, int bpp, int depth) { VIAPtr pVia = VIAPTR(pScrn); ViaTwodContext *tdc = &pVia->td; @@ -888,12 +853,12 @@ tdc->cmd = VIA_GEC_BLT | VIA_GEC_SRC_SYS | VIAACCELCOPYROP(rop); ADVANCE_RING; viaAccelTransparentHelper(tdc, cb, (trans_color != -1) ? 0x4000 : 0x0000, - trans_color, FALSE); + trans_color, FALSE); } static void viaSubsequentImageWriteRect(ScrnInfoPtr pScrn, int x, int y, int w, int h, - int skipleft) + int skipleft) { VIAPtr pVia = VIAPTR(pScrn); ViaTwodContext *tdc = &pVia->td; @@ -902,14 +867,14 @@ RING_VARS; if (skipleft) { - viaSetClippingRectangle(pScrn, (x + skipleft), y, (x + w - 1), - (y + h - 1)); + viaSetClippingRectangle(pScrn, (x + skipleft), y, (x + w - 1), + (y + h - 1)); } sub = viaAccelClippingHelper(cb, y, tdc); viaAccelCopyHelper(cb, 0, 0, x, y - sub, w, h, 0, - pScrn->fbOffset + pVia->Bpl * sub, tdc->mode, pVia->Bpl, pVia->Bpl, - tdc->cmd); + pScrn->fbOffset + pVia->Bpl * sub, tdc->mode, + pVia->Bpl, pVia->Bpl, tdc->cmd); viaFlushPCI(cb); viaDisableClipping(pScrn); @@ -917,7 +882,7 @@ static void viaSetupForSolidLine(ScrnInfoPtr pScrn, int color, int rop, - unsigned int planemask) + unsigned int planemask) { VIAPtr pVia = VIAPTR(pScrn); ViaTwodContext *tdc = &pVia->td; @@ -937,7 +902,7 @@ static void viaSubsequentSolidTwoPointLine(ScrnInfoPtr pScrn, int x1, int y1, - int x2, int y2, int flags) + int x2, int y2, int flags) { VIAPtr pVia = VIAPTR(pScrn); int dx, dy, cmd, tmp, error = 1; @@ -952,26 +917,26 @@ dx = x2 - x1; if (dx < 0) { - dx = -dx; - cmd |= VIA_GEC_DECX; /* line will be drawn from right */ - error = 0; + dx = -dx; + cmd |= VIA_GEC_DECX; /* line will be drawn from right */ + error = 0; } dy = y2 - y1; if (dy < 0) { - dy = -dy; - cmd |= VIA_GEC_DECY; /* line will be drawn from bottom */ + dy = -dy; + cmd |= VIA_GEC_DECY; /* line will be drawn from bottom */ } if (dy > dx) { - tmp = dy; - dy = dx; - dx = tmp; /* Swap 'dx' and 'dy' */ - cmd |= VIA_GEC_Y_MAJOR; /* Y major line */ + tmp = dy; + dy = dx; + dx = tmp; /* Swap 'dx' and 'dy' */ + cmd |= VIA_GEC_Y_MAJOR; /* Y major line */ } if (flags & OMIT_LAST) { - cmd |= VIA_GEC_LASTPIXEL_OFF; + cmd |= VIA_GEC_LASTPIXEL_OFF; } dstBase = pScrn->fbOffset + sub * pVia->Bpl; @@ -989,19 +954,18 @@ */ OUT_RING_H1(VIA_REG_LINE_K1K2, - ((((dy << 1) & 0x3fff) << 16) | (((dy - dx) << 1) & 0x3fff))); + ((((dy << 1) & 0x3fff) << 16) | (((dy - dx) << 1) & 0x3fff))); OUT_RING_H1(VIA_REG_LINE_XY, ((y1 << 16) | (x1 & 0xFFFF))); OUT_RING_H1(VIA_REG_DIMENSION, dx); OUT_RING_H1(VIA_REG_LINE_ERROR, - (((dy << 1) - dx - error) & 0x3fff) | ((tdc->dashed) ? 0xFF0000 : 0)); + (((dy << 1) - dx - error) & 0x3fff) | + ((tdc->dashed) ? 0xFF0000 : 0)); OUT_RING_H1(VIA_REG_GECMD, cmd); ADVANCE_RING; - } static void -viaSubsequentSolidHorVertLine(ScrnInfoPtr pScrn, int x, int y, int len, - int dir) +viaSubsequentSolidHorVertLine(ScrnInfoPtr pScrn, int x, int y, int len, int dir) { VIAPtr pVia = VIAPTR(pScrn); ViaTwodContext *tdc = &pVia->td; @@ -1018,20 +982,21 @@ OUT_RING_H1(VIA_REG_PITCH, VIA_PITCH_ENABLE | ((pVia->Bpl >> 3) << 16)); if (dir == DEGREES_0) { - OUT_RING_H1(VIA_REG_DSTPOS, ((y - sub) << 16) | (x & 0xFFFF)); - OUT_RING_H1(VIA_REG_DIMENSION, (len - 1)); - OUT_RING_H1(VIA_REG_GECMD, tdc->cmd | VIA_GEC_BLT); + OUT_RING_H1(VIA_REG_DSTPOS, ((y - sub) << 16) | (x & 0xFFFF)); + OUT_RING_H1(VIA_REG_DIMENSION, (len - 1)); + OUT_RING_H1(VIA_REG_GECMD, tdc->cmd | VIA_GEC_BLT); } else { - OUT_RING_H1(VIA_REG_DSTPOS, ((y - sub) << 16) | (x & 0xFFFF)); - OUT_RING_H1(VIA_REG_DIMENSION, ((len - 1) << 16)); - OUT_RING_H1(VIA_REG_GECMD, tdc->cmd | VIA_GEC_BLT); + OUT_RING_H1(VIA_REG_DSTPOS, ((y - sub) << 16) | (x & 0xFFFF)); + OUT_RING_H1(VIA_REG_DIMENSION, ((len - 1) << 16)); + OUT_RING_H1(VIA_REG_GECMD, tdc->cmd | VIA_GEC_BLT); } ADVANCE_RING; } static void viaSetupForDashedLine(ScrnInfoPtr pScrn, int fg, int bg, int rop, - unsigned int planemask, int length, unsigned char *pattern) + unsigned int planemask, int length, + unsigned char *pattern) { VIAPtr pVia = VIAPTR(pScrn); int cmd; @@ -1044,7 +1009,7 @@ cmd = VIA_GEC_LINE | VIA_GEC_FIXCOLOR_PAT | VIAACCELPATTERNROP(rop); if (bg == -1) { - cmd |= VIA_GEC_MPAT_TRANS; + cmd |= VIA_GEC_MPAT_TRANS; } tdc->cmd = cmd; @@ -1052,14 +1017,14 @@ tdc->bgColor = bg; switch (length) { - case 2: - pat |= pat << 2; /* fall through */ - case 4: - pat |= pat << 4; /* fall through */ - case 8: - pat |= pat << 8; /* fall through */ - case 16: - pat |= pat << 16; + case 2: + pat |= pat << 2; /* fall through */ + case 4: + pat |= pat << 4; /* fall through */ + case 8: + pat |= pat << 8; /* fall through */ + case 16: + pat |= pat << 16; } tdc->pattern0 = pat; @@ -1074,7 +1039,7 @@ static void viaSubsequentDashedTwoPointLine(ScrnInfoPtr pScrn, int x1, int y1, int x2, - int y2, int flags, int phase) + int y2, int flags, int phase) { viaSubsequentSolidTwoPointLine(pScrn, x1, y1, x2, y2, flags); } @@ -1082,33 +1047,30 @@ static int viaInitXAA(ScreenPtr pScreen) { - ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; VIAPtr pVia = VIAPTR(pScrn); XAAInfoRecPtr xaaptr; - /* - * General acceleration flags - */ - if (!(xaaptr = pVia->AccelInfoRec = XAACreateInfoRec())) - return FALSE; + return FALSE; - xaaptr->Flags = PIXMAP_CACHE | - OFFSCREEN_PIXMAPS | LINEAR_FRAMEBUFFER | MICROSOFT_ZERO_LINE_BIAS | 0; + /* General acceleration flags. */ + xaaptr->Flags = (PIXMAP_CACHE | + OFFSCREEN_PIXMAPS | LINEAR_FRAMEBUFFER | + MICROSOFT_ZERO_LINE_BIAS | 0); if (pScrn->bitsPerPixel == 8) - xaaptr->CachePixelGranularity = 128; + xaaptr->CachePixelGranularity = 128; xaaptr->SetClippingRectangle = viaSetClippingRectangle; xaaptr->DisableClipping = viaDisableClipping; - xaaptr->ClippingFlags = HARDWARE_CLIP_SOLID_FILL | - HARDWARE_CLIP_SOLID_LINE | - HARDWARE_CLIP_DASHED_LINE | - HARDWARE_CLIP_SCREEN_TO_SCREEN_COPY | - HARDWARE_CLIP_MONO_8x8_FILL | - HARDWARE_CLIP_COLOR_8x8_FILL | - HARDWARE_CLIP_SCREEN_TO_SCREEN_COLOR_EXPAND | 0; + xaaptr->ClippingFlags = (HARDWARE_CLIP_SOLID_FILL | + HARDWARE_CLIP_SOLID_LINE | + HARDWARE_CLIP_DASHED_LINE | + HARDWARE_CLIP_SCREEN_TO_SCREEN_COPY | + HARDWARE_CLIP_MONO_8x8_FILL | + HARDWARE_CLIP_COLOR_8x8_FILL | + HARDWARE_CLIP_SCREEN_TO_SCREEN_COLOR_EXPAND | 0); xaaptr->Sync = viaAccelSync; @@ -1122,18 +1084,19 @@ xaaptr->SetupForMono8x8PatternFill = viaSetupForMono8x8PatternFill; xaaptr->SubsequentMono8x8PatternFillRect = - viaSubsequentMono8x8PatternFillRect; - xaaptr->Mono8x8PatternFillFlags = NO_PLANEMASK | - HARDWARE_PATTERN_PROGRAMMED_BITS | - HARDWARE_PATTERN_PROGRAMMED_ORIGIN | BIT_ORDER_IN_BYTE_MSBFIRST | 0; + viaSubsequentMono8x8PatternFillRect; + xaaptr->Mono8x8PatternFillFlags = (NO_PLANEMASK | + HARDWARE_PATTERN_PROGRAMMED_BITS | + HARDWARE_PATTERN_PROGRAMMED_ORIGIN | + BIT_ORDER_IN_BYTE_MSBFIRST | 0); xaaptr->SetupForColor8x8PatternFill = viaSetupForColor8x8PatternFill; xaaptr->SubsequentColor8x8PatternFillRect = - viaSubsequentColor8x8PatternFillRect; - xaaptr->Color8x8PatternFillFlags = NO_PLANEMASK | - NO_TRANSPARENCY | - HARDWARE_PATTERN_PROGRAMMED_BITS | - HARDWARE_PATTERN_PROGRAMMED_ORIGIN | 0; + viaSubsequentColor8x8PatternFillRect; + xaaptr->Color8x8PatternFillFlags = (NO_PLANEMASK | + NO_TRANSPARENCY | + HARDWARE_PATTERN_PROGRAMMED_BITS | + HARDWARE_PATTERN_PROGRAMMED_ORIGIN | 0); xaaptr->SetupForSolidLine = viaSetupForSolidLine; xaaptr->SubsequentSolidTwoPointLine = viaSubsequentSolidTwoPointLine; @@ -1144,37 +1107,41 @@ xaaptr->SetupForDashedLine = viaSetupForDashedLine; xaaptr->SubsequentDashedTwoPointLine = viaSubsequentDashedTwoPointLine; xaaptr->DashPatternMaxLength = 8; - xaaptr->DashedLineFlags = NO_PLANEMASK | - ROP_NEEDS_SOURCE | - LINE_PATTERN_POWER_OF_2_ONLY | LINE_PATTERN_MSBFIRST_LSBJUSTIFIED | 0; + xaaptr->DashedLineFlags = (NO_PLANEMASK | + ROP_NEEDS_SOURCE | + LINE_PATTERN_POWER_OF_2_ONLY | + LINE_PATTERN_MSBFIRST_LSBJUSTIFIED | 0); xaaptr->ScanlineCPUToScreenColorExpandFillFlags = NO_PLANEMASK | - CPU_TRANSFER_PAD_DWORD | - SCANLINE_PAD_DWORD | - BIT_ORDER_IN_BYTE_MSBFIRST | - LEFT_EDGE_CLIPPING | ROP_NEEDS_SOURCE | 0; + CPU_TRANSFER_PAD_DWORD | + SCANLINE_PAD_DWORD | + BIT_ORDER_IN_BYTE_MSBFIRST | + LEFT_EDGE_CLIPPING | ROP_NEEDS_SOURCE | 0; xaaptr->SetupForScanlineCPUToScreenColorExpandFill = - viaSetupForCPUToScreenColorExpandFill; + viaSetupForCPUToScreenColorExpandFill; xaaptr->SubsequentScanlineCPUToScreenColorExpandFill = - viaSubsequentScanlineCPUToScreenColorExpandFill; + viaSubsequentScanlineCPUToScreenColorExpandFill; xaaptr->ColorExpandBase = pVia->BltBase; xaaptr->ColorExpandRange = VIA_MMIO_BLTSIZE; - xaaptr->ImageWriteFlags = NO_PLANEMASK | - CPU_TRANSFER_PAD_DWORD | - SCANLINE_PAD_DWORD | - BIT_ORDER_IN_BYTE_MSBFIRST | - LEFT_EDGE_CLIPPING | ROP_NEEDS_SOURCE | SYNC_AFTER_IMAGE_WRITE | 0; + xaaptr->ImageWriteFlags = (NO_PLANEMASK | + CPU_TRANSFER_PAD_DWORD | + SCANLINE_PAD_DWORD | + BIT_ORDER_IN_BYTE_MSBFIRST | + LEFT_EDGE_CLIPPING | ROP_NEEDS_SOURCE | + SYNC_AFTER_IMAGE_WRITE | 0); /* - * Most Unichromes are much faster using processor to - * framebuffer writes than using the 2D engine for this. + * Most Unichromes are much faster using processor-to-framebuffer writes + * than when using the 2D engine for this. * test with x11perf -shmput500! */ - if (pVia->Chipset != VIA_K8M800 && pVia->Chipset != VIA_K8M890 && pVia->Chipset != VIA_P4M900) - xaaptr->ImageWriteFlags |= NO_GXCOPY; + if (pVia->Chipset != VIA_K8M800 && + pVia->Chipset != VIA_K8M890 && + pVia->Chipset != VIA_P4M900) + xaaptr->ImageWriteFlags |= NO_GXCOPY; xaaptr->SetupForImageWrite = viaSetupForImageWrite; xaaptr->SubsequentImageWriteRect = viaSubsequentImageWriteRect; @@ -1191,7 +1158,6 @@ * to have an interrupt generated, provided it is possible to * write to the PCI DMA engines from the AGP command stream. */ - int viaAccelMarkSync(ScreenPtr pScreen) { @@ -1202,19 +1168,16 @@ ++pVia->curMarker; - /* - * Wrap around without possibly affecting the int sign bit. - */ - + /* Wrap around without affecting the sign bit. */ pVia->curMarker &= 0x7FFFFFFF; if (pVia->agpDMA) { - BEGIN_RING(2); - OUT_RING_H1(VIA_REG_KEYCONTROL, 0x00); - viaAccelSolidHelper(cb, 0, 0, 1, 1, pVia->markerOffset, - VIA_GEM_32bpp, 4, pVia->curMarker, - (0xF0 << 24) | VIA_GEC_BLT | VIA_GEC_FIXCOLOR_PAT); - ADVANCE_RING; + BEGIN_RING(2); + OUT_RING_H1(VIA_REG_KEYCONTROL, 0x00); + viaAccelSolidHelper(cb, 0, 0, 1, 1, pVia->markerOffset, + VIA_GEM_32bpp, 4, pVia->curMarker, + (0xF0 << 24) | VIA_GEC_BLT | VIA_GEC_FIXCOLOR_PAT); + ADVANCE_RING; } return pVia->curMarker; } @@ -1222,7 +1185,6 @@ /* * Wait for the value to get blitted, or in the PCI case for engine idle. */ - void viaAccelWaitMarker(ScreenPtr pScreen, int marker) { @@ -1231,19 +1193,17 @@ CARD32 uMarker = marker; if (pVia->agpDMA) { - while ((pVia->lastMarkerRead - uMarker) > (1 << 24)) - pVia->lastMarkerRead = *pVia->markerBuf; + while ((pVia->lastMarkerRead - uMarker) > (1 << 24)) + pVia->lastMarkerRead = *pVia->markerBuf; } else { - viaAccelSync(pScrn); + viaAccelSync(pScrn); } } #ifdef VIA_HAVE_EXA - /* * Exa functions. It is assumed that EXA does not exceed the blitter limits. */ - static Bool viaExaPrepareSolid(PixmapPtr pPixmap, int alu, Pixel planeMask, Pixel fg) { @@ -1254,13 +1214,13 @@ RING_VARS; if (exaGetPixmapPitch(pPixmap) & 7) - return FALSE; + return FALSE; if (!viaAccelSetMode(pPixmap->drawable.depth, tdc)) - return FALSE; + return FALSE; if (!viaAccelPlaneMaskHelper(tdc, planeMask)) - return FALSE; + return FALSE; viaAccelTransparentHelper(tdc, cb, 0x0, 0x0, TRUE); tdc->cmd = VIA_GEC_BLT | VIA_GEC_FIXCOLOR_PAT | VIAACCELPATTERNROP(alu); @@ -1286,7 +1246,7 @@ dstOffset = exaGetPixmapOffset(pPixmap); viaAccelSolidHelper(cb, x1, y1, w, h, dstOffset, - tdc->mode, dstPitch, tdc->fgColor, tdc->cmd); + tdc->mode, dstPitch, tdc->fgColor, tdc->cmd); ADVANCE_RING; } @@ -1297,7 +1257,7 @@ static Bool viaExaPrepareCopy(PixmapPtr pSrcPixmap, PixmapPtr pDstPixmap, int xdir, - int ydir, int alu, Pixel planeMask) + int ydir, int alu, Pixel planeMask) { ScrnInfoPtr pScrn = xf86Screens[pDstPixmap->drawable.pScreen->myNum]; VIAPtr pVia = VIAPTR(pScrn); @@ -1305,29 +1265,28 @@ RING_VARS; - if (pSrcPixmap->drawable.bitsPerPixel != - pDstPixmap->drawable.bitsPerPixel) - return FALSE; + if (pSrcPixmap->drawable.bitsPerPixel != pDstPixmap->drawable.bitsPerPixel) + return FALSE; if ((tdc->srcPitch = exaGetPixmapPitch(pSrcPixmap)) & 3) - return FALSE; + return FALSE; if (exaGetPixmapPitch(pDstPixmap) & 7) - return FALSE; + return FALSE; tdc->srcOffset = exaGetPixmapOffset(pSrcPixmap); tdc->cmd = VIA_GEC_BLT | VIAACCELCOPYROP(alu); if (xdir < 0) - tdc->cmd |= VIA_GEC_DECX; + tdc->cmd |= VIA_GEC_DECX; if (ydir < 0) - tdc->cmd |= VIA_GEC_DECY; + tdc->cmd |= VIA_GEC_DECY; if (!viaAccelSetMode(pDstPixmap->drawable.bitsPerPixel, tdc)) - return FALSE; + return FALSE; if (!viaAccelPlaneMaskHelper(tdc, planeMask)) - return FALSE; + return FALSE; viaAccelTransparentHelper(tdc, cb, 0x0, 0x0, TRUE); return TRUE; @@ -1335,7 +1294,7 @@ static void viaExaCopy(PixmapPtr pDstPixmap, int srcX, int srcY, int dstX, int dstY, - int width, int height) + int width, int height) { ScrnInfoPtr pScrn = xf86Screens[pDstPixmap->drawable.pScreen->myNum]; VIAPtr pVia = VIAPTR(pScrn); @@ -1346,11 +1305,11 @@ RING_VARS; if (!width || !height) - return; + return; viaAccelCopyHelper(cb, srcX, srcY, dstX, dstY, width, height, - srcOffset, dstOffset, tdc->mode, tdc->srcPitch, - exaGetPixmapPitch(pDstPixmap), tdc->cmd); + srcOffset, dstOffset, tdc->mode, tdc->srcPitch, + exaGetPixmapPitch(pDstPixmap), tdc->cmd); ADVANCE_RING; } @@ -1362,58 +1321,58 @@ char size[20]; if (!pict) { - snprintf(string, n, "None"); - return; + snprintf(string, n, "None"); + return; } switch (pict->format) { - case PICT_x8r8g8b8: - snprintf(format, 20, "RGB8888"); - break; - case PICT_a8r8g8b8: - snprintf(format, 20, "ARGB8888"); - break; - case PICT_r5g6b5: - snprintf(format, 20, "RGB565 "); - break; - case PICT_x1r5g5b5: - snprintf(format, 20, "RGB555 "); - break; - case PICT_a8: - snprintf(format, 20, "A8 "); - break; - case PICT_a1: - snprintf(format, 20, "A1 "); - break; - default: - snprintf(format, 20, "0x%x", (int)pict->format); - break; + case PICT_x8r8g8b8: + snprintf(format, 20, "RGB8888"); + break; + case PICT_a8r8g8b8: + snprintf(format, 20, "ARGB8888"); + break; + case PICT_r5g6b5: + snprintf(format, 20, "RGB565 "); + break; + case PICT_x1r5g5b5: + snprintf(format, 20, "RGB555 "); + break; + case PICT_a8: + snprintf(format, 20, "A8 "); + break; + case PICT_a1: + snprintf(format, 20, "A1 "); + break; + default: + snprintf(format, 20, "0x%x", (int)pict->format); + break; } snprintf(size, 20, "%dx%d%s", pict->pDrawable->width, - pict->pDrawable->height, pict->repeat ? " R" : ""); + pict->pDrawable->height, pict->repeat ? " R" : ""); snprintf(string, n, "0x%lx: fmt %s (%s)", (long)pict->pDrawable, format, - size); + size); } static void viaExaPrintComposite(CARD8 op, - PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst) + PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst) { char sop[20]; char srcdesc[40], maskdesc[40], dstdesc[40]; switch (op) { - case PictOpSrc: - sprintf(sop, "Src"); - break; - case PictOpOver: - sprintf(sop, "Over"); - break; - default: - sprintf(sop, "0x%x", (int)op); - break; + case PictOpSrc: + sprintf(sop, "Src"); + break; + case PictOpOver: + sprintf(sop, "Over"); + break; + default: + sprintf(sop, "0x%x", (int)op); + break; } viaExaCompositePictDesc(pSrc, srcdesc, 40); @@ -1421,32 +1380,31 @@ viaExaCompositePictDesc(pDst, dstdesc, 40); ErrorF("Composite fallback: op %s, \n" - " src %s, \n" - " mask %s, \n" - " dst %s, \n", sop, srcdesc, maskdesc, dstdesc); + " src %s, \n" + " mask %s, \n" + " dst %s, \n", sop, srcdesc, maskdesc, dstdesc); } #endif /* VIA_DEBUG_COMPOSITE */ /* * Helper for bitdepth expansion. */ - static CARD32 -viaBitExpandHelper(CARD32 component, CARD32 bits) +viaBitExpandHelper(CARD32 pixel, CARD32 bits) { - CARD32 tmp, mask; + CARD32 component, mask, tmp; + component = pixel & ((1 << bits) - 1); mask = (1 << (8 - bits)) - 1; tmp = component << (8 - bits); - return ((component & 1) ? tmp | mask : tmp); + return ((component & 1) ? (tmp | mask) : tmp); } /* - * Extract the components from a pixel of format "format" to an - * argb8888 pixel. This is used to extract data from one-pixel repeat pixmaps. + * Extract the components from a pixel of the given format to an argb8888 pixel. + * This is used to extract data from one-pixel repeat pixmaps. * Assumes little endian. */ - static void viaPixelARGB8888(unsigned format, void *pixelP, CARD32 * argb8888) { @@ -1455,59 +1413,50 @@ bpp = PICT_FORMAT_BPP(format); if (bpp <= 8) { - pixel = *((CARD8 *) pixelP); + pixel = *((CARD8 *) pixelP); } else if (bpp <= 16) { - pixel = *((CARD16 *) pixelP); + pixel = *((CARD16 *) pixelP); } else { - pixel = *((CARD32 *) pixelP); + pixel = *((CARD32 *) pixelP); } switch (PICT_FORMAT_TYPE(format)) { - case PICT_TYPE_A: - bits = PICT_FORMAT_A(format); - *argb8888 = viaBitExpandHelper(pixel & ((1 << bits) - 1), bits) << 24; - return; - case PICT_TYPE_ARGB: - shift = 0; - bits = PICT_FORMAT_B(format); - *argb8888 = viaBitExpandHelper(pixel & ((1 << bits) - 1), bits); - shift += bits; - bits = PICT_FORMAT_G(format); - *argb8888 |= - viaBitExpandHelper((pixel >> shift) & ((1 << bits) - 1), - bits) << 8; - shift += bits; - bits = PICT_FORMAT_R(format); - *argb8888 |= - viaBitExpandHelper((pixel >> shift) & ((1 << bits) - 1), - bits) << 16; - shift += bits; - bits = PICT_FORMAT_A(format); - *argb8888 |= ((bits) ? - viaBitExpandHelper((pixel >> shift) & ((1 << bits) - 1), - bits) : 0xFF) << 24; - return; - case PICT_TYPE_ABGR: - shift = 0; - bits = PICT_FORMAT_B(format); - *argb8888 = viaBitExpandHelper(pixel & ((1 << bits) - 1), bits) << 16; - shift += bits; - bits = PICT_FORMAT_G(format); - *argb8888 |= - viaBitExpandHelper((pixel >> shift) & ((1 << bits) - 1), - bits) << 8; - shift += bits; - bits = PICT_FORMAT_R(format); - *argb8888 |= - viaBitExpandHelper((pixel >> shift) & ((1 << bits) - 1), bits); - shift += bits; - bits = PICT_FORMAT_A(format); - *argb8888 |= ((bits) ? - viaBitExpandHelper((pixel >> shift) & ((1 << bits) - 1), - bits) : 0xFF) << 24; - return; - default: - break; + case PICT_TYPE_A: + bits = PICT_FORMAT_A(format); + *argb8888 = viaBitExpandHelper(pixel, bits) << 24; + return; + case PICT_TYPE_ARGB: + shift = 0; + bits = PICT_FORMAT_B(format); + *argb8888 = viaBitExpandHelper(pixel, bits); + shift += bits; + bits = PICT_FORMAT_G(format); + *argb8888 |= viaBitExpandHelper(pixel >> shift, bits) << 8; + shift += bits; + bits = PICT_FORMAT_R(format); + *argb8888 |= viaBitExpandHelper(pixel >> shift, bits) << 16; + shift += bits; + bits = PICT_FORMAT_A(format); + *argb8888 |= ((bits) ? viaBitExpandHelper(pixel >> shift, + bits) : 0xFF) << 24; + return; + case PICT_TYPE_ABGR: + shift = 0; + bits = PICT_FORMAT_B(format); + *argb8888 = viaBitExpandHelper(pixel, bits) << 16; + shift += bits; + bits = PICT_FORMAT_G(format); + *argb8888 |= viaBitExpandHelper(pixel >> shift, bits) << 8; + shift += bits; + bits = PICT_FORMAT_R(format); + *argb8888 |= viaBitExpandHelper(pixel >> shift, bits); + shift += bits; + bits = PICT_FORMAT_A(format); + *argb8888 |= ((bits) ? viaBitExpandHelper(pixel >> shift, + bits) : 0xFF) << 24; + return; + default: + break; } return; } @@ -1515,14 +1464,13 @@ /* * Check if the above function will work. */ - static Bool viaExpandablePixel(int format) { int formatType = PICT_FORMAT_TYPE(format); return (formatType == PICT_TYPE_A || - formatType == PICT_TYPE_ABGR || formatType == PICT_TYPE_ARGB); + formatType == PICT_TYPE_ABGR || formatType == PICT_TYPE_ARGB); } /* @@ -1530,7 +1478,6 @@ * clients or subsystems have touched the 3D engine). Also tell DRI * clients and subsystems that we have touched the 3D engine. */ - static Bool viaCheckUpload(ScrnInfoPtr pScrn, Via3DState * v3d) { @@ -1542,12 +1489,12 @@ #ifdef XF86DRI if (pVia->directRenderingEnabled) { - volatile drm_via_sarea_t *saPriv = (drm_via_sarea_t *) - DRIGetSAREAPrivate(pScrn->pScreen); - int myContext = DRIGetContext(pScrn->pScreen); + volatile drm_via_sarea_t *saPriv = (drm_via_sarea_t *) + DRIGetSAREAPrivate(pScrn->pScreen); + int myContext = DRIGetContext(pScrn->pScreen); - forceUpload = forceUpload || (saPriv->ctxOwner != myContext); - saPriv->ctxOwner = myContext; + forceUpload = forceUpload || (saPriv->ctxOwner != myContext); + saPriv->ctxOwner = myContext; } #endif return forceUpload; @@ -1559,7 +1506,7 @@ *shift = 0; while (val > (1 << *shift)) - (*shift)++; + (*shift)++; return (val == (1 << *shift)); } @@ -1567,8 +1514,8 @@ static int viaAccelDMADownload(ScrnInfoPtr pScrn, unsigned long fbOffset, - unsigned srcPitch, unsigned char *dst, - unsigned dstPitch, unsigned w, unsigned h) + unsigned srcPitch, unsigned char *dst, + unsigned dstPitch, unsigned w, unsigned h) { VIAPtr pVia = VIAPTR(pScrn); drm_via_dmablit_t blit[2], *curBlit; @@ -1586,65 +1533,65 @@ blitHeight = h; pitch = dstPitch; if (useBounceBuffer) { - pitch = ALIGN_TO(dstPitch, 16); - blitHeight = VIA_DMA_DL_SIZE / pitch; + pitch = ALIGN_TO(dstPitch, 16); + blitHeight = VIA_DMA_DL_SIZE / pitch; } while (doSync[0] || doSync[1] || h != 0) { - curBuf = 1 - curBuf; - curBlit = &blit[curBuf]; - if (doSync[curBuf]) { + curBuf = 1 - curBuf; + curBlit = &blit[curBuf]; + if (doSync[curBuf]) { - do { - err = drmCommandWrite(pVia->drmFD, DRM_VIA_BLIT_SYNC, - &curBlit->sync, sizeof(curBlit->sync)); - } while (err == -EAGAIN); + do { + err = drmCommandWrite(pVia->drmFD, DRM_VIA_BLIT_SYNC, + &curBlit->sync, sizeof(curBlit->sync)); + } while (err == -EAGAIN); - if (err) - return err; + if (err) + return err; - doSync[curBuf] = FALSE; - if (useBounceBuffer) { - for (i = 0; i < numLines[curBuf]; ++i) { - memcpy(dst, curBlit->mem_addr, w); - dst += dstPitch; - curBlit->mem_addr += pitch; - } - } - } + doSync[curBuf] = FALSE; + if (useBounceBuffer) { + for (i = 0; i < numLines[curBuf]; ++i) { + memcpy(dst, curBlit->mem_addr, w); + dst += dstPitch; + curBlit->mem_addr += pitch; + } + } + } - if (h == 0) - continue; + if (h == 0) + continue; - curBlit->num_lines = (h > blitHeight) ? blitHeight : h; - h -= curBlit->num_lines; - numLines[curBuf] = curBlit->num_lines; + curBlit->num_lines = (h > blitHeight) ? blitHeight : h; + h -= curBlit->num_lines; + numLines[curBuf] = curBlit->num_lines; - sysAligned = - (unsigned char *)pVia->dBounce + (curBuf * VIA_DMA_DL_SIZE); - sysAligned = (unsigned char *) - ALIGN_TO((unsigned long)sysAligned, 16); + sysAligned = + (unsigned char *)pVia->dBounce + (curBuf * VIA_DMA_DL_SIZE); + sysAligned = (unsigned char *) + ALIGN_TO((unsigned long)sysAligned, 16); - curBlit->mem_addr = (useBounceBuffer) ? sysAligned : dst; - curBlit->line_length = w; - curBlit->mem_stride = pitch; - curBlit->fb_addr = fbOffset; - curBlit->fb_stride = srcPitch; - curBlit->to_fb = 0; - fbOffset += curBlit->num_lines * srcPitch; + curBlit->mem_addr = (useBounceBuffer) ? sysAligned : dst; + curBlit->line_length = w; + curBlit->mem_stride = pitch; + curBlit->fb_addr = fbOffset; + curBlit->fb_stride = srcPitch; + curBlit->to_fb = 0; + fbOffset += curBlit->num_lines * srcPitch; - do { - err = drmCommandWriteRead(pVia->drmFD, DRM_VIA_DMA_BLIT, curBlit, - sizeof(*curBlit)); - } while (err == -EAGAIN); + do { + err = drmCommandWriteRead(pVia->drmFD, DRM_VIA_DMA_BLIT, curBlit, + sizeof(*curBlit)); + } while (err == -EAGAIN); - if (err) { - ret = err; - h = 0; - continue; - } + if (err) { + ret = err; + h = 0; + continue; + } - doSync[curBuf] = TRUE; + doSync[curBuf] = TRUE; } return ret; @@ -1655,10 +1602,9 @@ * an aligned bounce buffer for pipelined PCI DMA and memcpy. * Throughput for large transfers is around 65 MB/s. */ - static Bool viaExaDownloadFromScreen(PixmapPtr pSrc, int x, int y, int w, int h, - char *dst, int dst_pitch) + char *dst, int dst_pitch) { ScrnInfoPtr pScrn = xf86Screens[pSrc->drawable.pScreen->myNum]; VIAPtr pVia = VIAPTR(pScrn); @@ -1669,37 +1615,37 @@ unsigned totSize; if (!w || !h) - return TRUE; + return TRUE; srcOffset = x * pSrc->drawable.bitsPerPixel; if (srcOffset & 3) - return FALSE; + return FALSE; srcOffset = exaGetPixmapOffset(pSrc) + y * srcPitch + (srcOffset >> 3); totSize = wBytes * h; exaWaitSync(pScrn->pScreen); if (totSize < VIA_MIN_DOWNLOAD) { - bounceAligned = (char *)pVia->FBBase + srcOffset; - while (h--) { - memcpy(dst, bounceAligned, wBytes); - dst += dst_pitch; - bounceAligned += srcPitch; - } - return TRUE; + bounceAligned = (char *)pVia->FBBase + srcOffset; + while (h--) { + memcpy(dst, bounceAligned, wBytes); + dst += dst_pitch; + bounceAligned += srcPitch; + } + return TRUE; } if (!pVia->directRenderingEnabled) - return FALSE; + return FALSE; if ((srcPitch & 3) || (srcOffset & 3)) { - ErrorF("VIA EXA download src_pitch misaligned\n"); - return FALSE; + ErrorF("VIA EXA download src_pitch misaligned\n"); + return FALSE; } if (viaAccelDMADownload(pScrn, srcOffset, srcPitch, (unsigned char *)dst, - dst_pitch, wBytes, h)) - return FALSE; + dst_pitch, wBytes, h)) + return FALSE; return TRUE; } @@ -1709,10 +1655,9 @@ * 3D engine texture operation from AGP to framebuffer. The AGP buffers (2) * should be kept rather small for optimal pipelining. */ - static Bool viaExaTexUploadToScreen(PixmapPtr pDst, int x, int y, int w, int h, char *src, - int src_pitch) + int src_pitch) { ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum]; VIAPtr pVia = VIAPTR(pScrn); @@ -1727,54 +1672,53 @@ Via3DState *v3d = &pVia->v3d; if (!w || !h) - return TRUE; + return TRUE; if (wBytes * h < VIA_MIN_TEX_UPLOAD) { - dstOffset = x * pDst->drawable.bitsPerPixel; - if (dstOffset & 3) - return FALSE; - dst = - (char *)pVia->FBBase + (exaGetPixmapOffset(pDst) + y * dstPitch + - (dstOffset >> 3)); - exaWaitSync(pScrn->pScreen); + dstOffset = x * pDst->drawable.bitsPerPixel; + if (dstOffset & 3) + return FALSE; + dst = (char *)pVia->FBBase + (exaGetPixmapOffset(pDst) + y * dstPitch + + (dstOffset >> 3)); + exaWaitSync(pScrn->pScreen); - while (h--) { - memcpy(dst, src, wBytes); - dst += dstPitch; - src += src_pitch; - } - return TRUE; + while (h--) { + memcpy(dst, src, wBytes); + dst += dstPitch; + src += src_pitch; + } + return TRUE; } if (!pVia->texAddr) - return FALSE; + return FALSE; switch (pDst->drawable.bitsPerPixel) { - case 32: - format = PICT_a8r8g8b8; - break; - case 16: - format = PICT_r5g6b5; - break; - default: - return FALSE; + case 32: + format = PICT_a8r8g8b8; + break; + case 16: + format = PICT_r5g6b5; + break; + default: + return FALSE; } dstOffset = exaGetPixmapOffset(pDst); if (pVia->nPOT[0]) { - texPitch = ALIGN_TO(wBytes, 32); - height = VIA_AGP_UPL_SIZE / texPitch; + texPitch = ALIGN_TO(wBytes, 32); + height = VIA_AGP_UPL_SIZE / texPitch; } else { - viaOrder(wBytes, &texPitch); - if (texPitch < 3) - texPitch = 3; - height = VIA_AGP_UPL_SIZE >> texPitch; - texPitch = 1 << texPitch; + viaOrder(wBytes, &texPitch); + if (texPitch < 3) + texPitch = 3; + height = VIA_AGP_UPL_SIZE >> texPitch; + texPitch = 1 << texPitch; } if (height > 1024) - height = 1024; + height = 1024; viaOrder(w, &texWidth); texWidth = 1 << texWidth; @@ -1785,13 +1729,13 @@ v3d->setDrawing(v3d, 0x0c, 0xFFFFFFFF, 0x000000FF, 0x00); v3d->setFlags(v3d, 1, TRUE, TRUE, FALSE); if (!v3d->setTexture(v3d, 0, pVia->texOffset + pVia->agpAddr, texPitch, - pVia->nPOT[0], texWidth, texHeight, format, via_single, - via_single, via_src, TRUE)) - return FALSE; + pVia->nPOT[0], texWidth, texHeight, format, + via_single, via_single, via_src, TRUE)) + return FALSE; v3d->emitState(v3d, &pVia->cb, viaCheckUpload(pScrn, v3d)); v3d->emitClipRect(v3d, &pVia->cb, 0, 0, pDst->drawable.width, - pDst->drawable.height); + pDst->drawable.height); buf = 1; yOffs = 0; @@ -1799,30 +1743,30 @@ sync[1] = -1; while (h) { - buf = (buf) ? 0 : 1; - bufH = (h > height) ? height : h; - dst = pVia->texAddr + ((buf) ? bufOffs : 0); + buf = (buf) ? 0 : 1; + bufH = (h > height) ? height : h; + dst = pVia->texAddr + ((buf) ? bufOffs : 0); - if (sync[buf] >= 0) - viaAccelWaitMarker(pScrn->pScreen, sync[buf]); + if (sync[buf] >= 0) + viaAccelWaitMarker(pScrn->pScreen, sync[buf]); - for (i = 0; i < bufH; ++i) { - memcpy(dst, src, wBytes); - dst += texPitch; - src += src_pitch; - } + for (i = 0; i < bufH; ++i) { + memcpy(dst, src, wBytes); + dst += texPitch; + src += src_pitch; + } - v3d->emitQuad(v3d, &pVia->cb, x, y + yOffs, 0, (buf) ? height : 0, 0, - 0, w, bufH); + v3d->emitQuad(v3d, &pVia->cb, x, y + yOffs, 0, (buf) ? height : 0, 0, + 0, w, bufH); - sync[buf] = viaAccelMarkSync(pScrn->pScreen); + sync[buf] = viaAccelMarkSync(pScrn->pScreen); - h -= bufH; - yOffs += bufH; + h -= bufH; + yOffs += bufH; } if (sync[buf] >= 0) - viaAccelWaitMarker(pScrn->pScreen, sync[buf]); + viaAccelWaitMarker(pScrn->pScreen, sync[buf]); return TRUE; } @@ -1832,10 +1776,9 @@ * and I'd guess that in most situations CPU direct writes are faster. * Use DMA only when alignments match. At least it saves some CPU cycles. */ - static Bool viaExaUploadToScreen(PixmapPtr pDst, int x, int y, int w, int h, char *src, - int src_pitch) + int src_pitch) { ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum]; VIAPtr pVia = VIAPTR(pScrn); @@ -1848,29 +1791,29 @@ dstOffset = x * pDst->drawable.bitsPerPixel; if (dstOffset & 3) - return FALSE; + return FALSE; dstOffset = exaGetPixmapOffset(pDst) + y * dstPitch + (dstOffset >> 3); if (wBytes * h < VIA_MIN_UPLOAD || wBytes < 65) { - dst = (char *)pVia->FBBase + dstOffset; + dst = (char *)pVia->FBBase + dstOffset; - exaWaitSync(pScrn->pScreen); - while (h--) { - memcpy(dst, src, wBytes); - dst += dstPitch; - src += src_pitch; - } - return TRUE; + exaWaitSync(pScrn->pScreen); + while (h--) { + memcpy(dst, src, wBytes); + dst += dstPitch; + src += src_pitch; + } + return TRUE; } if (!pVia->directRenderingEnabled) - return FALSE; + return FALSE; if (((unsigned long)src & 15) || (src_pitch & 15)) - return FALSE; + return FALSE; if ((dstPitch & 3) || (dstOffset & 3)) - return FALSE; + return FALSE; blit.line_length = wBytes; blit.num_lines = h; @@ -1881,14 +1824,13 @@ blit.to_fb = 1; exaWaitSync(pScrn->pScreen); - while (-EAGAIN == (err = - drmCommandWriteRead(pVia->drmFD, DRM_VIA_DMA_BLIT, &blit, - sizeof(blit)))) ; + while (-EAGAIN == (err = drmCommandWriteRead(pVia->drmFD, DRM_VIA_DMA_BLIT, + &blit, sizeof(blit)))) ; if (err < 0) - return FALSE; + return FALSE; while (-EAGAIN == (err = drmCommandWrite(pVia->drmFD, DRM_VIA_BLIT_SYNC, - &blit.sync, sizeof(blit.sync)))) ; + &blit.sync, sizeof(blit.sync)))) ; return (err == 0); } @@ -1897,7 +1839,6 @@ static Bool viaExaUploadToScratch(PixmapPtr pSrc, PixmapPtr pDst) { - ScrnInfoPtr pScrn = xf86Screens[pSrc->drawable.pScreen->myNum]; VIAPtr pVia = VIAPTR(pScrn); char *src, *dst; @@ -1905,7 +1846,7 @@ CARD32 dstPitch; if (!pVia->scratchAddr) - return FALSE; + return FALSE; *pDst = *pSrc; w = pSrc->drawable.width; @@ -1915,11 +1856,11 @@ viaOrder(wBytes, &dstPitch); dstPitch = 1 << dstPitch; if (dstPitch < 8) - dstPitch = 8; + dstPitch = 8; if (dstPitch * h > pVia->exaScratchSize * 1024) { - ErrorF("EXA UploadToScratch Failed %u %u %u %u\n", - dstPitch, h, dstPitch * h, pVia->exaScratchSize * 1024); - return FALSE; + ErrorF("EXA UploadToScratch Failed %u %u %u %u\n", + dstPitch, h, dstPitch * h, pVia->exaScratchSize * 1024); + return FALSE; } pDst->devKind = dstPitch; @@ -1935,9 +1876,9 @@ viaAccelSync(pScrn); while (h--) { - memcpy(dst, src, wBytes); - dst += dstPitch; - src += srcPitch; + memcpy(dst, src, wBytes); + dst += dstPitch; + src += srcPitch; } return TRUE; @@ -1945,42 +1886,38 @@ static Bool viaExaCheckComposite(int op, PicturePtr pSrcPicture, - PicturePtr pMaskPicture, PicturePtr pDstPicture) + PicturePtr pMaskPicture, PicturePtr pDstPicture) { - ScrnInfoPtr pScrn = xf86Screens[pDstPicture->pDrawable->pScreen->myNum]; VIAPtr pVia = VIAPTR(pScrn); Via3DState *v3d = &pVia->v3d; - /* - * Reject small composites early. They are done much faster in software. - */ - + /* Reject small composites early. They are done much faster in software. */ if (!pSrcPicture->repeat && - pSrcPicture->pDrawable->width * - pSrcPicture->pDrawable->height < VIA_MIN_COMPOSITE) - return FALSE; + pSrcPicture->pDrawable->width * + pSrcPicture->pDrawable->height < VIA_MIN_COMPOSITE) + return FALSE; if (pMaskPicture && - !pMaskPicture->repeat && - pMaskPicture->pDrawable->width * - pMaskPicture->pDrawable->height < VIA_MIN_COMPOSITE) - return FALSE; + !pMaskPicture->repeat && + pMaskPicture->pDrawable->width * + pMaskPicture->pDrawable->height < VIA_MIN_COMPOSITE) + return FALSE; if (pMaskPicture && pMaskPicture->componentAlpha) { #ifdef VIA_DEBUG_COMPOSITE - ErrorF("Component Alpha operation\n"); + ErrorF("Component Alpha operation\n"); #endif - return FALSE; + return FALSE; } if (!v3d->opSupported(op)) { #ifdef VIA_DEBUG_COMPOSITE #warning Composite verbose debug turned on. - ErrorF("Operator not supported\n"); - viaExaPrintComposite(op, pSrcPicture, pMaskPicture, pDstPicture); + ErrorF("Operator not supported\n"); + viaExaPrintComposite(op, pSrcPicture, pMaskPicture, pDstPicture); #endif - return FALSE; + return FALSE; } /* @@ -1992,22 +1929,22 @@ if (!v3d->dstSupported(pDstPicture->format)) { #ifdef VIA_DEBUG_COMPOSITE - ErrorF("Destination format not supported:\n"); - viaExaPrintComposite(op, pSrcPicture, pMaskPicture, pDstPicture); + ErrorF("Destination format not supported:\n"); + viaExaPrintComposite(op, pSrcPicture, pMaskPicture, pDstPicture); #endif - return FALSE; + return FALSE; } if (v3d->texSupported(pSrcPicture->format)) { - if (pMaskPicture && (PICT_FORMAT_A(pMaskPicture->format) == 0 || - !v3d->texSupported(pMaskPicture->format))) { + if (pMaskPicture && (PICT_FORMAT_A(pMaskPicture->format) == 0 || + !v3d->texSupported(pMaskPicture->format))) { #ifdef VIA_DEBUG_COMPOSITE - ErrorF("Mask format not supported:\n"); - viaExaPrintComposite(op, pSrcPicture, pMaskPicture, pDstPicture); + ErrorF("Mask format not supported:\n"); + viaExaPrintComposite(op, pSrcPicture, pMaskPicture, pDstPicture); #endif - return FALSE; - } - return TRUE; + return FALSE; + } + return TRUE; } #ifdef VIA_DEBUG_COMPOSITE ErrorF("Src format not supported:\n"); @@ -2023,13 +1960,13 @@ unsigned long offs; if (pVia->directRenderingEnabled && !pVia->IsPCI) { - offs = (unsigned long)pPix->devPrivate.ptr - - (unsigned long)pVia->agpMappedAddr; + offs = ((unsigned long)pPix->devPrivate.ptr + - (unsigned long)pVia->agpMappedAddr); - if ((offs - pVia->scratchOffset) < pVia->agpSize) { - *offset = offs + pVia->agpAddr; - return TRUE; - } + if ((offs - pVia->scratchOffset) < pVia->agpSize) { + *offset = offs + pVia->agpAddr; + return TRUE; + } } #endif return FALSE; @@ -2039,13 +1976,13 @@ viaIsOffscreen(VIAPtr pVia, PixmapPtr pPix) { return ((unsigned long)pPix->devPrivate.ptr - - (unsigned long)pVia->FBBase) < pVia->videoRambytes; + (unsigned long)pVia->FBBase) < pVia->videoRambytes; } static Bool viaExaPrepareComposite(int op, PicturePtr pSrcPicture, - PicturePtr pMaskPicture, PicturePtr pDstPicture, - PixmapPtr pSrc, PixmapPtr pMask, PixmapPtr pDst) + PicturePtr pMaskPicture, PicturePtr pDstPicture, + PixmapPtr pSrc, PixmapPtr pMask, PixmapPtr pDst) { CARD32 height, width; ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum]; @@ -2057,7 +1994,7 @@ unsigned long offset; v3d->setDestination(v3d, exaGetPixmapOffset(pDst), - exaGetPixmapPitch(pDst), pDstPicture->format); + exaGetPixmapPitch(pDst), pDstPicture->format); v3d->setCompositeOperator(v3d, op); v3d->setDrawing(v3d, 0x0c, 0xFFFFFFFF, 0x000000FF, 0xFF); @@ -2068,21 +2005,20 @@ * For one-pixel repeat mask pictures we avoid using multitexturing by * modifying the src's texture blending equation and feed the pixel * value as a constant alpha for the src's texture. Multitexturing on the - * unichromes seems somewhat slow, so this speeds up translucent windows. + * Unichromes seems somewhat slow, so this speeds up translucent windows. */ srcMode = via_src; pVia->maskP = NULL; if (pMaskPicture && - (pMaskPicture->pDrawable->height == 1) && - (pMaskPicture->pDrawable->width == 1) && - pMaskPicture->repeat && viaExpandablePixel(pMaskPicture->format)) { - pVia->maskP = pMask->devPrivate.ptr; - pVia->maskFormat = pMaskPicture->format; - pVia->componentAlpha = pMaskPicture->componentAlpha; - srcMode = - (pMaskPicture-> - componentAlpha) ? via_src_onepix_comp_mask : via_src_onepix_mask; + (pMaskPicture->pDrawable->height == 1) && + (pMaskPicture->pDrawable->width == 1) && + pMaskPicture->repeat && viaExpandablePixel(pMaskPicture->format)) { + pVia->maskP = pMask->devPrivate.ptr; + pVia->maskFormat = pMaskPicture->format; + pVia->componentAlpha = pMaskPicture->componentAlpha; + srcMode = ((pMaskPicture->componentAlpha) + ? via_src_onepix_comp_mask : via_src_onepix_mask); } /* @@ -2091,66 +2027,64 @@ */ pVia->srcP = NULL; - if (pSrcPicture && - (pSrcPicture->pDrawable->height == 1) && - (pSrcPicture->pDrawable->width == 1) && - pSrcPicture->repeat && viaExpandablePixel(pSrcPicture->format)) { - pVia->srcP = pSrc->devPrivate.ptr; - pVia->srcFormat = pSrcPicture->format; + if (pSrcPicture && pSrcPicture->repeat + && (pSrcPicture->pDrawable->height == 1) + && (pSrcPicture->pDrawable->width == 1) + && viaExpandablePixel(pSrcPicture->format)) { + pVia->srcP = pSrc->devPrivate.ptr; + pVia->srcFormat = pSrcPicture->format; } - /* - * Exa should be smart enough to eliminate this IN operation. - */ - + /* Exa should be smart enough to eliminate this IN operation. */ if (pVia->srcP && pVia->maskP) { - ErrorF - ("Bad one-pixel IN composite operation. EXA needs to be smarter.\n"); - return FALSE; + ErrorF("Bad one-pixel IN composite operation. " + "EXA needs to be smarter.\n"); + return FALSE; } if (!pVia->srcP) { - offset = exaGetPixmapOffset(pSrc); - isAGP = viaIsAGP(pVia, pSrc, &offset); - if (!isAGP && !viaIsOffscreen(pVia, pSrc)) - return FALSE; - if (!v3d->setTexture(v3d, curTex, offset, - exaGetPixmapPitch(pSrc), pVia->nPOT[curTex], 1 << width, - 1 << height, pSrcPicture->format, via_repeat, via_repeat, - srcMode, isAGP)) { - return FALSE; - } - curTex++; + offset = exaGetPixmapOffset(pSrc); + isAGP = viaIsAGP(pVia, pSrc, &offset); + if (!isAGP && !viaIsOffscreen(pVia, pSrc)) + return FALSE; + if (!v3d->setTexture(v3d, curTex, offset, + exaGetPixmapPitch(pSrc), pVia->nPOT[curTex], + 1 << width, 1 << height, pSrcPicture->format, + via_repeat, via_repeat, srcMode, isAGP)) { + return FALSE; + } + curTex++; } if (pMaskPicture && !pVia->maskP) { - offset = exaGetPixmapOffset(pMask); - isAGP = viaIsAGP(pVia, pMask, &offset); - if (!isAGP && !viaIsOffscreen(pVia, pMask)) - return FALSE; - viaOrder(pMask->drawable.width, &width); - viaOrder(pMask->drawable.height, &height); - if (!v3d->setTexture(v3d, curTex, offset, - exaGetPixmapPitch(pMask), pVia->nPOT[curTex], 1 << width, - 1 << height, pMaskPicture->format, via_repeat, via_repeat, - (pMaskPicture->componentAlpha) ? via_comp_mask : via_mask, - isAGP)) { - return FALSE; - } - curTex++; + offset = exaGetPixmapOffset(pMask); + isAGP = viaIsAGP(pVia, pMask, &offset); + if (!isAGP && !viaIsOffscreen(pVia, pMask)) + return FALSE; + viaOrder(pMask->drawable.width, &width); + viaOrder(pMask->drawable.height, &height); + if (!v3d->setTexture(v3d, curTex, offset, + exaGetPixmapPitch(pMask), pVia->nPOT[curTex], + 1 << width, 1 << height, pMaskPicture->format, + via_repeat, via_repeat, + ((pMaskPicture->componentAlpha) + ? via_comp_mask : via_mask), isAGP)) { + return FALSE; + } + curTex++; } v3d->setFlags(v3d, curTex, FALSE, TRUE, TRUE); v3d->emitState(v3d, &pVia->cb, viaCheckUpload(pScrn, v3d)); v3d->emitClipRect(v3d, &pVia->cb, 0, 0, pDst->drawable.width, - pDst->drawable.height); + pDst->drawable.height); return TRUE; } static void viaExaComposite(PixmapPtr pDst, int srcX, int srcY, int maskX, int maskY, - int dstX, int dstY, int width, int height) + int dstX, int dstY, int width, int height) { ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum]; VIAPtr pVia = VIAPTR(pScrn); @@ -2158,21 +2092,21 @@ CARD32 col; if (pVia->maskP) { - viaPixelARGB8888(pVia->maskFormat, pVia->maskP, &col); - v3d->setTexBlendCol(v3d, 0, pVia->componentAlpha, col); + viaPixelARGB8888(pVia->maskFormat, pVia->maskP, &col); + v3d->setTexBlendCol(v3d, 0, pVia->componentAlpha, col); } if (pVia->srcP) { - viaPixelARGB8888(pVia->srcFormat, pVia->srcP, &col); - v3d->setDrawing(v3d, 0x0c, 0xFFFFFFFF, col & 0x00FFFFFF, col >> 24); - srcX = maskX; - srcY = maskY; + viaPixelARGB8888(pVia->srcFormat, pVia->srcP, &col); + v3d->setDrawing(v3d, 0x0c, 0xFFFFFFFF, col & 0x00FFFFFF, col >> 24); + srcX = maskX; + srcY = maskY; } if (pVia->maskP || pVia->srcP) - v3d->emitState(v3d, &pVia->cb, viaCheckUpload(pScrn, v3d)); + v3d->emitState(v3d, &pVia->cb, viaCheckUpload(pScrn, v3d)); - v3d->emitQuad(v3d, &pVia->cb, dstX, dstY, srcX, srcY, maskX, maskY, width, - height); + v3d->emitQuad(v3d, &pVia->cb, dstX, dstY, srcX, srcY, maskX, maskY, + width, height); } #if (EXA_VERSION_MAJOR >= 2) @@ -2187,7 +2121,7 @@ memset(pExa, 0, sizeof(*pExa)); if (!pExa) - return NULL; + return NULL; pExa->exa_major = EXA_VERSION_MAJOR; pExa->exa_minor = EXA_VERSION_MINOR; @@ -2196,8 +2130,8 @@ pExa->offScreenBase = pScrn->virtualY * pVia->Bpl; pExa->pixmapOffsetAlign = 32; pExa->pixmapPitchAlign = 16; - pExa->flags = EXA_OFFSCREEN_PIXMAPS | - (pVia->nPOT[1] ? 0 : EXA_OFFSCREEN_ALIGN_POT); + pExa->flags = EXA_OFFSCREEN_PIXMAPS | + (pVia->nPOT[1] ? 0 : EXA_OFFSCREEN_ALIGN_POT); pExa->maxX = 2047; pExa->maxY = 2047; pExa->WaitMarker = viaAccelWaitMarker; @@ -2212,39 +2146,38 @@ #ifdef XF86DRI if (pVia->directRenderingEnabled) { #ifdef linux - if ((pVia->drmVerMajor > 2) || - ((pVia->drmVerMajor == 2) && (pVia->drmVerMinor >= 7))) { - pExa->DownloadFromScreen = viaExaDownloadFromScreen; - } + if ((pVia->drmVerMajor > 2) || + ((pVia->drmVerMajor == 2) && (pVia->drmVerMinor >= 7))) { + pExa->DownloadFromScreen = viaExaDownloadFromScreen; + } #endif /* linux */ - switch (pVia->Chipset) { - case VIA_K8M800: - case VIA_KM400: - pExa->UploadToScreen = viaExaTexUploadToScreen; - break; - default: - pExa->UploadToScreen = NULL; - break; - } + switch (pVia->Chipset) { + case VIA_K8M800: + case VIA_KM400: + pExa->UploadToScreen = viaExaTexUploadToScreen; + break; + default: + pExa->UploadToScreen = NULL; + break; + } } #endif /* XF86DRI */ pExa->UploadToScratch = viaExaUploadToScratch; if (!pVia->noComposite) { - pExa->CheckComposite = viaExaCheckComposite; - pExa->PrepareComposite = viaExaPrepareComposite; - pExa->Composite = viaExaComposite; - pExa->DoneComposite = viaExaDoneSolidCopy; + pExa->CheckComposite = viaExaCheckComposite; + pExa->PrepareComposite = viaExaPrepareComposite; + pExa->Composite = viaExaComposite; + pExa->DoneComposite = viaExaDoneSolidCopy; } else { - xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "[EXA] Disabling EXA accelerated composite.\n"); + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "[EXA] Disabling EXA accelerated composite.\n"); } - if (!exaDriverInit(pScreen, pExa)) { - xfree(pExa); - return NULL; + xfree(pExa); + return NULL; } viaInit3DState(&pVia->v3d); @@ -2254,9 +2187,8 @@ #else /* - * Init EXA. Alignments are 2D engine constraints. + * Initialize EXA. Alignments are 2D engine constraints. */ - static ExaDriverPtr viaInitExa(ScreenPtr pScreen) { @@ -2265,7 +2197,7 @@ ExaDriverPtr pExa = (ExaDriverPtr) xnfcalloc(sizeof(ExaDriverRec), 1); if (!pExa) - return NULL; + return NULL; pExa->card.memoryBase = pVia->FBBase; pExa->card.memorySize = pVia->FBFreeEnd; @@ -2273,7 +2205,7 @@ pExa->card.pixmapOffsetAlign = 32; pExa->card.pixmapPitchAlign = 16; pExa->card.flags = EXA_OFFSCREEN_PIXMAPS | - (pVia->nPOT[1] ? 0 : EXA_OFFSCREEN_ALIGN_POT); + (pVia->nPOT[1] ? 0 : EXA_OFFSCREEN_ALIGN_POT); pExa->card.maxX = 2047; pExa->card.maxY = 2047; @@ -2289,33 +2221,33 @@ #ifdef XF86DRI if (pVia->directRenderingEnabled) { #ifdef linux - if ((pVia->drmVerMajor > 2) || - ((pVia->drmVerMajor == 2) && (pVia->drmVerMinor >= 7))) { - if (pVia->Chipset != VIA_K8M800) - pExa->accel.UploadToScreen = viaExaUploadToScreen; - pExa->accel.DownloadFromScreen = viaExaDownloadFromScreen; - } + if ((pVia->drmVerMajor > 2) || + ((pVia->drmVerMajor == 2) && (pVia->drmVerMinor >= 7))) { + if (pVia->Chipset != VIA_K8M800) + pExa->accel.UploadToScreen = viaExaUploadToScreen; + pExa->accel.DownloadFromScreen = viaExaDownloadFromScreen; + } #endif /* linux */ - if (pVia->Chipset == VIA_K8M800) - pExa->accel.UploadToScreen = viaExaTexUploadToScreen; + if (pVia->Chipset == VIA_K8M800) + pExa->accel.UploadToScreen = viaExaTexUploadToScreen; } #endif /* XF86DRI */ pExa->accel.UploadToScratch = viaExaUploadToScratch; if (!pVia->noComposite) { - pExa->accel.CheckComposite = viaExaCheckComposite; - pExa->accel.PrepareComposite = viaExaPrepareComposite; - pExa->accel.Composite = viaExaComposite; - pExa->accel.DoneComposite = viaExaDoneSolidCopy; + pExa->accel.CheckComposite = viaExaCheckComposite; + pExa->accel.PrepareComposite = viaExaPrepareComposite; + pExa->accel.Composite = viaExaComposite; + pExa->accel.DoneComposite = viaExaDoneSolidCopy; } else { - xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "[EXA] Disabling EXA accelerated composite.\n"); + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "[EXA] Disabling EXA accelerated composite.\n"); } if (!exaDriverInit(pScreen, pExa)) { - xfree(pExa); - return NULL; + xfree(pExa); + return NULL; } viaInit3DState(&pVia->v3d); @@ -2326,10 +2258,9 @@ #endif /* VIA_HAVE_EXA */ /* - * Acceleration init function. Sets up offscreen memory disposition, initializes engines - * and acceleration method. + * Acceleration initializatuon function. Sets up offscreen memory disposition, + * and initializes engines and acceleration method. */ - Bool viaInitAccel(ScreenPtr pScreen) { @@ -2340,24 +2271,21 @@ Bool nPOTSupported; pVia->VQStart = 0; - if (((pVia->FBFreeEnd - pVia->FBFreeStart) >= VIA_VQ_SIZE) && - pVia->VQEnable) { - pVia->VQStart = pVia->FBFreeEnd - VIA_VQ_SIZE; - pVia->VQEnd = pVia->VQStart + VIA_VQ_SIZE - 1; - pVia->FBFreeEnd -= VIA_VQ_SIZE; + if (((pVia->FBFreeEnd - pVia->FBFreeStart) >= VIA_VQ_SIZE) + && pVia->VQEnable) { + pVia->VQStart = pVia->FBFreeEnd - VIA_VQ_SIZE; + pVia->VQEnd = pVia->VQStart + VIA_VQ_SIZE - 1; + pVia->FBFreeEnd -= VIA_VQ_SIZE; } if (pVia->hwcursor) { - pVia->FBFreeEnd -= VIA_CURSOR_SIZE; - pVia->CursorStart = pVia->FBFreeEnd; + pVia->FBFreeEnd -= VIA_CURSOR_SIZE; + pVia->CursorStart = pVia->FBFreeEnd; } viaInitialize2DEngine(pScrn); - /* - * Sync marker space. - */ - + /* Sync marker space. */ pVia->FBFreeEnd -= 32; pVia->markerOffset = (pVia->FBFreeEnd + 31) & ~31; pVia->markerBuf = (CARD32 *) ((char *)pVia->FBBase + pVia->markerOffset); @@ -2373,9 +2301,9 @@ nPOTSupported = TRUE; #ifdef XF86DRI - nPOTSupported = (!pVia->directRenderingEnabled) || - (pVia->drmVerMajor > 2) || - ((pVia->drmVerMajor == 2) && (pVia->drmVerMinor >= 11)); + nPOTSupported = ((!pVia->directRenderingEnabled) || + (pVia->drmVerMajor > 2) || + ((pVia->drmVerMajor == 2) && (pVia->drmVerMinor >= 11))); #endif pVia->nPOT[0] = nPOTSupported; pVia->nPOT[1] = nPOTSupported; @@ -2387,31 +2315,31 @@ pVia->scratchAddr = NULL; #endif /* XF86DRI */ if (pVia->useEXA) { - pVia->exaDriverPtr = viaInitExa(pScreen); - if (!pVia->exaDriverPtr) { + pVia->exaDriverPtr = viaInitExa(pScreen); + if (!pVia->exaDriverPtr) { - /* - * Docs recommend turning off also Xv here, but we handle this - * case with the old linear offscreen FB manager through - * VIAInitLinear. - */ + /* + * Docs recommend turning off also Xv here, but we handle this + * case with the old linear offscreen FB manager through + * VIAInitLinear. + */ - pVia->NoAccel = TRUE; - return FALSE; - } + pVia->NoAccel = TRUE; + return FALSE; + } - xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "[EXA] Trying to enable EXA acceleration.\n"); + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "[EXA] Trying to enable EXA acceleration.\n"); - pVia->driSize = (pVia->FBFreeEnd - pVia->FBFreeStart) / 2; + pVia->driSize = (pVia->FBFreeEnd - pVia->FBFreeStart) / 2; - if ((pVia->driSize > (pVia->maxDriSize * 1024)) - && pVia->maxDriSize > 0) - pVia->driSize = pVia->maxDriSize * 1024; + if ((pVia->driSize > (pVia->maxDriSize * 1024)) + && pVia->maxDriSize > 0) + pVia->driSize = pVia->maxDriSize * 1024; - xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "[EXA] Enabled EXA acceleration.\n"); - return TRUE; + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "[EXA] Enabled EXA acceleration.\n"); + return TRUE; } #endif /* VIA_HAVE_EXA */ @@ -2427,15 +2355,15 @@ #ifdef XF86DRI if (pVia->directRenderingEnabled) { - pVia->driSize = (pVia->FBFreeEnd - pVia->FBFreeStart) / 2; - maxY = pScrn->virtualY + (pVia->driSize / pVia->Bpl); + pVia->driSize = (pVia->FBFreeEnd - pVia->FBFreeStart) / 2; + maxY = pScrn->virtualY + (pVia->driSize / pVia->Bpl); } else #endif { - maxY = pVia->FBFreeEnd / pVia->Bpl; + maxY = pVia->FBFreeEnd / pVia->Bpl; } if (maxY > 4 * pScrn->virtualY) - maxY = 4 * pScrn->virtualY; + maxY = 4 * pScrn->virtualY; pVia->FBFreeStart = (maxY + 1) * pVia->Bpl; @@ -2445,11 +2373,11 @@ pVia->driSize = (pVia->FBFreeEnd - pVia->FBFreeStart - pVia->Bpl); if ((pVia->driSize > (pVia->maxDriSize * 1024)) && pVia->maxDriSize > 0) - pVia->driSize = pVia->maxDriSize * 1024; + pVia->driSize = pVia->maxDriSize * 1024; DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "Using %d lines for offscreen memory.\n", - AvailFBArea.y2 - pScrn->virtualY)); + "Using %d lines for offscreen memory.\n", + AvailFBArea.y2 - pScrn->virtualY)); return viaInitXAA(pScreen); } @@ -2457,7 +2385,6 @@ /* * Free the used acceleration resources. */ - void viaExitAccel(ScreenPtr pScreen) { @@ -2470,39 +2397,38 @@ #ifdef VIA_HAVE_EXA if (pVia->useEXA) { #ifdef XF86DRI - if (pVia->directRenderingEnabled) { - if (pVia->texAddr) { - drmCommandWrite(pVia->drmFD, DRM_VIA_FREEMEM, - &pVia->texAGPBuffer, sizeof(drm_via_mem_t)); - pVia->texAddr = NULL; - } - if (pVia->scratchAddr && !pVia->IsPCI && - ((unsigned long)pVia->scratchAddr - - (unsigned long)pVia->agpMappedAddr == - pVia->scratchOffset)) { - drmCommandWrite(pVia->drmFD, DRM_VIA_FREEMEM, - &pVia->scratchAGPBuffer, sizeof(drm_via_mem_t)); - pVia->scratchAddr = NULL; - } - } - if (pVia->dBounce) - xfree(pVia->dBounce); + if (pVia->directRenderingEnabled) { + if (pVia->texAddr) { + drmCommandWrite(pVia->drmFD, DRM_VIA_FREEMEM, + &pVia->texAGPBuffer, sizeof(drm_via_mem_t)); + pVia->texAddr = NULL; + } + if (pVia->scratchAddr && !pVia->IsPCI && + ((unsigned long)pVia->scratchAddr - + (unsigned long)pVia->agpMappedAddr == pVia->scratchOffset)) { + drmCommandWrite(pVia->drmFD, DRM_VIA_FREEMEM, + &pVia->scratchAGPBuffer, sizeof(drm_via_mem_t)); + pVia->scratchAddr = NULL; + } + } + if (pVia->dBounce) + xfree(pVia->dBounce); #endif /* XF86DRI */ - if (pVia->scratchAddr) { - exaOffscreenFree(pScreen, pVia->scratchFBBuffer); - pVia->scratchAddr = NULL; - } - if (pVia->exaDriverPtr) { - exaDriverFini(pScreen); - } - xfree(pVia->exaDriverPtr); - pVia->exaDriverPtr = NULL; - return; + if (pVia->scratchAddr) { + exaOffscreenFree(pScreen, pVia->scratchFBBuffer); + pVia->scratchAddr = NULL; + } + if (pVia->exaDriverPtr) { + exaDriverFini(pScreen); + } + xfree(pVia->exaDriverPtr); + pVia->exaDriverPtr = NULL; + return; } #endif /* VIA_HAVE_EXA */ if (pVia->AccelInfoRec) { - XAADestroyInfoRec(pVia->AccelInfoRec); - pVia->AccelInfoRec = NULL; + XAADestroyInfoRec(pVia->AccelInfoRec); + pVia->AccelInfoRec = NULL; } } @@ -2511,7 +2437,6 @@ * and EXA scratch area. The scratch area resides primarily in AGP memory, * but reverts to FB if AGP is not available. */ - void viaFinishInitAccel(ScreenPtr pScreen) { @@ -2524,92 +2449,87 @@ if (pVia->directRenderingEnabled && pVia->useEXA) { - pVia->dBounce = xcalloc(VIA_DMA_DL_SIZE * 2, 1); + pVia->dBounce = xcalloc(VIA_DMA_DL_SIZE * 2, 1); - if (!pVia->IsPCI) { + if (!pVia->IsPCI) { - /* - * Allocate upload and scratch space. - */ + /* Allocate upload and scratch space. */ #if (EXA_VERSION_MAJOR >= 2) - if (pVia->exaDriverPtr->UploadToScreen == viaExaTexUploadToScreen) { + if (pVia->exaDriverPtr->UploadToScreen == viaExaTexUploadToScreen) { #else - if (pVia->exaDriverPtr->accel.UploadToScreen == - viaExaTexUploadToScreen) { + if (pVia->exaDriverPtr->accel.UploadToScreen == + viaExaTexUploadToScreen) { #endif - size = VIA_AGP_UPL_SIZE * 2 + 32; - pVia->texAGPBuffer.context = 1; - pVia->texAGPBuffer.size = size; - pVia->texAGPBuffer.type = VIA_MEM_AGP; - ret = - drmCommandWriteRead(pVia->drmFD, DRM_VIA_ALLOCMEM, - &pVia->texAGPBuffer, sizeof(drm_via_mem_t)); + size = VIA_AGP_UPL_SIZE * 2 + 32; + pVia->texAGPBuffer.context = 1; + pVia->texAGPBuffer.size = size; + pVia->texAGPBuffer.type = VIA_MEM_AGP; + ret = drmCommandWriteRead(pVia->drmFD, DRM_VIA_ALLOCMEM, + &pVia->texAGPBuffer, + sizeof(drm_via_mem_t)); - if (ret || size != pVia->texAGPBuffer.size) { - pVia->texAGPBuffer.size = 0; - } else { - xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "Allocated %u kiB of AGP memory for system to frame-buffer transfer.\n", - size / 1024); - pVia->texOffset = (pVia->texAGPBuffer.offset + 31) & ~31; - pVia->texAddr = - (char *)pVia->agpMappedAddr + pVia->texOffset; - } + if (ret || size != pVia->texAGPBuffer.size) { + pVia->texAGPBuffer.size = 0; + } else { + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "Allocated %u kiB of AGP memory for " + "system-to-framebuffer transfer.\n", + size / 1024); + pVia->texOffset = (pVia->texAGPBuffer.offset + 31) & ~31; + pVia->texAddr = + (char *)pVia->agpMappedAddr + pVia->texOffset; + } + } - } - - size = pVia->exaScratchSize * 1024 + 32; - pVia->scratchAGPBuffer.context = 1; - pVia->scratchAGPBuffer.size = size; - pVia->scratchAGPBuffer.type = VIA_MEM_AGP; - ret = - drmCommandWriteRead(pVia->drmFD, DRM_VIA_ALLOCMEM, - &pVia->scratchAGPBuffer, sizeof(drm_via_mem_t)); - if (ret || size != pVia->scratchAGPBuffer.size) { - pVia->scratchAGPBuffer.size = 0; - } else { - xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "Allocated %u kiB of AGP memory for EXA scratch area.\n", - size / 1024); - pVia->scratchOffset = - (pVia->scratchAGPBuffer.offset + 31) & ~31; - pVia->scratchAddr = - (char *)pVia->agpMappedAddr + pVia->scratchOffset; - } - - } + size = pVia->exaScratchSize * 1024 + 32; + pVia->scratchAGPBuffer.context = 1; + pVia->scratchAGPBuffer.size = size; + pVia->scratchAGPBuffer.type = VIA_MEM_AGP; + ret = drmCommandWriteRead(pVia->drmFD, DRM_VIA_ALLOCMEM, + &pVia->scratchAGPBuffer, + sizeof(drm_via_mem_t)); + if (ret || size != pVia->scratchAGPBuffer.size) { + pVia->scratchAGPBuffer.size = 0; + } else { + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "Allocated %u kiB of AGP memory for " + "EXA scratch area.\n", size / 1024); + pVia->scratchOffset = + (pVia->scratchAGPBuffer.offset + 31) & ~31; + pVia->scratchAddr = + (char *)pVia->agpMappedAddr + pVia->scratchOffset; + } + } } #endif /* XF86DRI */ if (!pVia->scratchAddr && pVia->useEXA) { - pVia->scratchFBBuffer = - exaOffscreenAlloc(pScreen, pVia->exaScratchSize * 1024, - 32, TRUE, NULL, NULL); - if (pVia->scratchFBBuffer) { - xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "Allocated %u kiB of framebuffer memory for EXA scratch area.\n", - pVia->exaScratchSize); - pVia->scratchOffset = pVia->scratchFBBuffer->offset; - pVia->scratchAddr = (char *)pVia->FBBase + pVia->scratchOffset; - } - + pVia->scratchFBBuffer = + exaOffscreenAlloc(pScreen, pVia->exaScratchSize * 1024, + 32, TRUE, NULL, NULL); + if (pVia->scratchFBBuffer) { + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "Allocated %u kiB of framebuffer memory for " + "EXA scratch area.\n", pVia->exaScratchSize); + pVia->scratchOffset = pVia->scratchFBBuffer->offset; + pVia->scratchAddr = (char *)pVia->FBBase + pVia->scratchOffset; + } } #endif /* VIA_HAVE_EXA */ if (Success != viaSetupCBuffer(pScrn, &pVia->cb, 0)) { - pVia->NoAccel = TRUE; - viaExitAccel(pScreen); - return; + pVia->NoAccel = TRUE; + viaExitAccel(pScreen); + return; } } /* - * DGA accelerated functions go here and let them be independent of acceleration - * method. + * DGA accelerated functions go here and let them be independent of + * acceleration method. */ - void viaAccelBlitRect(ScrnInfoPtr pScrn, int srcx, int srcy, int w, int h, - int dstx, int dsty) + int dstx, int dsty) { VIAPtr pVia = VIAPTR(pScrn); ViaTwodContext *tdc = &pVia->td; @@ -2619,75 +2539,75 @@ RING_VARS; if (!w || !h) - return; + return; if (!pVia->NoAccel) { - int xdir = ((srcx < dstx) && (srcy == dsty)) ? -1 : 1; - int ydir = (srcy < dsty) ? -1 : 1; - CARD32 cmd = VIA_GEC_BLT | VIAACCELCOPYROP(GXcopy); + int xdir = ((srcx < dstx) && (srcy == dsty)) ? -1 : 1; + int ydir = (srcy < dsty) ? -1 : 1; + CARD32 cmd = VIA_GEC_BLT | VIAACCELCOPYROP(GXcopy); - if (xdir < 0) - cmd |= VIA_GEC_DECX; - if (ydir < 0) - cmd |= VIA_GEC_DECY; + if (xdir < 0) + cmd |= VIA_GEC_DECX; + if (ydir < 0) + cmd |= VIA_GEC_DECY; - viaAccelSetMode(pScrn->bitsPerPixel, tdc); - viaAccelTransparentHelper(tdc, cb, 0x0, 0x0, FALSE); - viaAccelCopyHelper(cb, srcx, 0, dstx, 0, w, h, srcOffset, dstOffset, - tdc->mode, pVia->Bpl, pVia->Bpl, cmd); - pVia->accelMarker = viaAccelMarkSync(pScrn->pScreen); - ADVANCE_RING; + viaAccelSetMode(pScrn->bitsPerPixel, tdc); + viaAccelTransparentHelper(tdc, cb, 0x0, 0x0, FALSE); + viaAccelCopyHelper(cb, srcx, 0, dstx, 0, w, h, srcOffset, dstOffset, + tdc->mode, pVia->Bpl, pVia->Bpl, cmd); + pVia->accelMarker = viaAccelMarkSync(pScrn->pScreen); + ADVANCE_RING; } } void viaAccelFillRect(ScrnInfoPtr pScrn, int x, int y, int w, int h, - unsigned long color) + unsigned long color) { VIAPtr pVia = VIAPTR(pScrn); unsigned dstBase = pScrn->fbOffset + y * pVia->Bpl; ViaTwodContext *tdc = &pVia->td; CARD32 cmd = VIA_GEC_BLT | VIA_GEC_FIXCOLOR_PAT | - VIAACCELPATTERNROP(GXcopy); + VIAACCELPATTERNROP(GXcopy); RING_VARS; if (!w || !h) - return; + return; if (!pVia->NoAccel) { - viaAccelSetMode(pScrn->bitsPerPixel, tdc); - viaAccelTransparentHelper(tdc, cb, 0x0, 0x0, FALSE); - viaAccelSolidHelper(cb, x, 0, w, h, dstBase, tdc->mode, - pVia->Bpl, color, cmd); - pVia->accelMarker = viaAccelMarkSync(pScrn->pScreen); - ADVANCE_RING; + viaAccelSetMode(pScrn->bitsPerPixel, tdc); + viaAccelTransparentHelper(tdc, cb, 0x0, 0x0, FALSE); + viaAccelSolidHelper(cb, x, 0, w, h, dstBase, tdc->mode, + pVia->Bpl, color, cmd); + pVia->accelMarker = viaAccelMarkSync(pScrn->pScreen); + ADVANCE_RING; } } void viaAccelFillPixmap(ScrnInfoPtr pScrn, - unsigned long offset, - unsigned long pitch, - int depth, int x, int y, int w, int h, unsigned long color) + unsigned long offset, + unsigned long pitch, + int depth, int x, int y, int w, int h, unsigned long color) { VIAPtr pVia = VIAPTR(pScrn); unsigned dstBase = offset + y * pitch; ViaTwodContext *tdc = &pVia->td; CARD32 cmd = VIA_GEC_BLT | VIA_GEC_FIXCOLOR_PAT | - VIAACCELPATTERNROP(GXcopy); + VIAACCELPATTERNROP(GXcopy); RING_VARS; if (!w || !h) - return; + return; if (!pVia->NoAccel) { - viaAccelSetMode(depth, tdc); - viaAccelTransparentHelper(tdc, cb, 0x0, 0x0, FALSE); - viaAccelSolidHelper(cb, x, 0, w, h, dstBase, tdc->mode, - pitch, color, cmd); - pVia->accelMarker = viaAccelMarkSync(pScrn->pScreen); - ADVANCE_RING; + viaAccelSetMode(depth, tdc); + viaAccelTransparentHelper(tdc, cb, 0x0, 0x0, FALSE); + viaAccelSolidHelper(cb, x, 0, w, h, dstBase, tdc->mode, + pitch, color, cmd); + pVia->accelMarker = viaAccelMarkSync(pScrn->pScreen); + ADVANCE_RING; } } @@ -2701,12 +2621,13 @@ void viaAccelTextureBlit(ScrnInfoPtr pScrn, unsigned long srcOffset, - unsigned srcPitch, unsigned w, unsigned h, unsigned srcX, unsigned srcY, - unsigned srcFormat, unsigned long dstOffset, unsigned dstPitch, - unsigned dstX, unsigned dstY, unsigned dstFormat, int rotate) + unsigned srcPitch, unsigned w, unsigned h, unsigned srcX, + unsigned srcY, unsigned srcFormat, unsigned long dstOffset, + unsigned dstPitch, unsigned dstX, unsigned dstY, + unsigned dstFormat, int rotate) { VIAPtr pVia = VIAPTR(pScrn); - unsigned wOrder, hOrder; + CARD32 wOrder, hOrder; Via3DState *v3d = &pVia->v3d; viaOrder(w, &wOrder); @@ -2715,8 +2636,9 @@ v3d->setDestination(v3d, dstOffset, dstPitch, dstFormat); v3d->setDrawing(v3d, 0x0c, 0xFFFFFFFF, 0x000000FF, 0x00); v3d->setFlags(v3d, 1, TRUE, TRUE, FALSE); - v3d->setTexture(v3d, 0, srcOffset, srcPitch, TRUE, 1 << wOrder, - 1 << hOrder, srcFormat, via_single, via_single, via_src, FALSE); + v3d->setTexture(v3d, 0, srcOffset, srcPitch, TRUE, + 1 << wOrder, 1 << hOrder, srcFormat, + via_single, via_single, via_src, FALSE); v3d->emitState(v3d, &pVia->cb, viaCheckUpload(pScrn, v3d)); v3d->emitClipRect(v3d, &pVia->cb, dstX, dstY, w, h); v3d->emitQuad(v3d, &pVia->cb, dstX, dstY, srcX, srcY, 0, 0, w, h); Index: src/via_memory.c =================================================================== --- src/via_memory.c (revision 487) +++ src/via_memory.c (revision 553) @@ -44,60 +44,61 @@ /* * Isolate the wonders of X memory allocation and DRI memory allocation - * and 4.3 or 4.4 differences in once abstraction + * and 4.3 or 4.4 differences in one abstraction. * - * The pool code indicates who provided the memory - * 0 - nobody - * 1 - xf86 linear - * 2 - DRM + * The pool code indicates who provided the memory: + * 0 - nobody + * 1 - xf86 linear + * 2 - DRM */ - + static void -viaExaFBSave(ScreenPtr pScreen, ExaOffscreenArea *exa) +viaExaFBSave(ScreenPtr pScreen, ExaOffscreenArea * exa) { - FatalError("Xserver is not properly patched and incompatible with OpenChrome exa.\n" - "\tPlease look at Xorg bugzilla bug #7639, and\n" - "\thttp://wiki.openchrome.org/tikiwiki/tiki-index.php?page=EXAAcceleration .\n"); + FatalError("Xserver is incompatible with openchrome EXA.\n" + "\t\tPlease look at Xorg bugzilla bug #7639, and at\n" + "\t\thttp://wiki.openchrome.org/tikiwiki/tiki-index" + ".php?page=EXAAcceleration .\n"); } - -void VIAFreeLinear(VIAMemPtr mem) +void +VIAFreeLinear(VIAMemPtr mem) { DEBUG(ErrorF("Freed %lu (pool %d)\n", mem->base, mem->pool)); - switch(mem->pool) { - case 0: - return; - case 1: + switch (mem->pool) { + case 0: + return; + case 1: #ifdef VIA_HAVE_EXA - { - VIAPtr pVia = VIAPTR(mem->pScrn); - if (pVia->useEXA && !pVia->NoAccel) { - exaOffscreenFree(mem->pScrn->pScreen, mem->exa); - mem->linear = NULL; - mem->pool = 0; - return; - } - } + { + VIAPtr pVia = VIAPTR(mem->pScrn); + + if (pVia->useEXA && !pVia->NoAccel) { + exaOffscreenFree(mem->pScrn->pScreen, mem->exa); + mem->linear = NULL; + mem->pool = 0; + return; + } + } #endif - xf86FreeOffscreenLinear(mem->linear); - mem->linear = NULL; - mem->pool = 0; - return; - case 2: + xf86FreeOffscreenLinear(mem->linear); + mem->linear = NULL; + mem->pool = 0; + return; + case 2: #ifdef XF86DRI - if(drmCommandWrite(mem->drm_fd, DRM_VIA_FREEMEM, - &mem->drm, sizeof(drm_via_mem_t)) < 0) - ErrorF("DRM module failed free.\n"); + if (drmCommandWrite(mem->drm_fd, DRM_VIA_FREEMEM, + &mem->drm, sizeof(drm_via_mem_t)) < 0) + ErrorF("DRM module failed free.\n"); #endif - mem->pool = 0; - return; + mem->pool = 0; + return; } } int -viaOffScreenLinear(VIAMemPtr mem, ScrnInfoPtr pScrn, - unsigned long size) { - +viaOffScreenLinear(VIAMemPtr mem, ScrnInfoPtr pScrn, unsigned long size) +{ int depth = pScrn->bitsPerPixel >> 3; #ifdef VIA_HAVE_EXA @@ -105,90 +106,83 @@ if (pVia->useEXA && !pVia->NoAccel) { - mem->exa = exaOffscreenAlloc(pScrn->pScreen, size, - 32, TRUE, NULL,NULL); - if (mem->exa == NULL) - return BadAlloc; - mem->exa->save = viaExaFBSave; - mem->base = mem->exa->offset; - mem->pool = 1; - mem->pScrn = pScrn; - return Success; + mem->exa = exaOffscreenAlloc(pScrn->pScreen, size, + 32, TRUE, NULL, NULL); + if (mem->exa == NULL) + return BadAlloc; + mem->exa->save = viaExaFBSave; + mem->base = mem->exa->offset; + mem->pool = 1; + mem->pScrn = pScrn; + return Success; } #endif - mem->linear = xf86AllocateOffscreenLinear(pScrn->pScreen, - ( size + depth - 1 ) / depth, - 32, NULL, NULL, NULL); - if(mem->linear == NULL) - return BadAlloc; + mem->linear = xf86AllocateOffscreenLinear(pScrn->pScreen, + (size + depth - 1) / depth, + 32, NULL, NULL, NULL); + if (mem->linear == NULL) + return BadAlloc; mem->base = mem->linear->offset * depth; mem->pool = 1; mem->pScrn = pScrn; return Success; - } int VIAAllocLinear(VIAMemPtr mem, ScrnInfoPtr pScrn, unsigned long size) { - #ifdef XF86DRI - VIAPtr pVia = VIAPTR(pScrn); + VIAPtr pVia = VIAPTR(pScrn); int ret; - if(mem->pool) - ErrorF("VIA Double Alloc.\n"); - - if(pVia->directRenderingEnabled) { - mem->pScrn = pScrn; - mem->drm_fd = pVia->drmFD; - mem->drm.context = DRIGetContext(pScrn->pScreen); - mem->drm.size = size; - mem->drm.type = VIA_MEM_VIDEO; - ret = drmCommandWriteRead(mem->drm_fd, DRM_VIA_ALLOCMEM, &mem->drm, - sizeof(drm_via_mem_t)); - if (ret || (size != mem->drm.size)) { + if (mem->pool) + ErrorF("VIA Double Alloc.\n"); - /* - * Try X Offsceen fallback before failing. - */ - - if (Success == viaOffScreenLinear(mem, pScrn, size)) - return Success; - ErrorF("DRM memory allocation failed\n"); - return BadAlloc; - } - - mem->base = mem->drm.offset; - mem->pool = 2; - DEBUG(ErrorF("Fulfilled via DRI at %lu\n", mem->base)); - return Success; + if (pVia->directRenderingEnabled) { + mem->pScrn = pScrn; + mem->drm_fd = pVia->drmFD; + mem->drm.context = DRIGetContext(pScrn->pScreen); + mem->drm.size = size; + mem->drm.type = VIA_MEM_VIDEO; + ret = drmCommandWriteRead(mem->drm_fd, DRM_VIA_ALLOCMEM, + &mem->drm, sizeof(drm_via_mem_t)); + if (ret || (size != mem->drm.size)) { + /* Try X Offsceen fallback before failing. */ + if (Success == viaOffScreenLinear(mem, pScrn, size)) + return Success; + ErrorF("DRM memory allocation failed\n"); + return BadAlloc; + } + + mem->base = mem->drm.offset; + mem->pool = 2; + DEBUG(ErrorF("Fulfilled via DRI at %lu\n", mem->base)); + return Success; } -#endif - { - if (Success == viaOffScreenLinear(mem, pScrn, size)) - return Success; - ErrorF("Linear memory allocation failed\n"); - return BadAlloc; - } - return Success; +#endif + if (Success == viaOffScreenLinear(mem, pScrn, size)) + return Success; + ErrorF("Linear memory allocation failed\n"); + return BadAlloc; } -void VIAInitLinear(ScreenPtr pScreen) +void +VIAInitLinear(ScreenPtr pScreen) { ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; VIAPtr pVia = VIAPTR(pScrn); #ifdef VIA_HAVE_EXA - if (pVia->useEXA && !pVia->NoAccel) { + if (pVia->useEXA && !pVia->NoAccel) return; - } else + else #endif { - unsigned long offset = (pVia->FBFreeStart + pVia->Bpp - 1 ) / pVia->Bpp; + unsigned long offset = (pVia->FBFreeStart + pVia->Bpp - 1) / pVia->Bpp; long size = pVia->FBFreeEnd / pVia->Bpp - offset; - if (size > 0) xf86InitFBManagerLinear(pScreen, offset, size); + + if (size > 0) + xf86InitFBManagerLinear(pScreen, offset, size); } } - Index: src/via_vt162x.c =================================================================== --- src/via_vt162x.c (revision 487) +++ src/via_vt162x.c (revision 553) @@ -32,30 +32,26 @@ #include "via_vt162x.h" #include "via_id.h" -/* - * - */ + static void VT162xPrintRegs(ScrnInfoPtr pScrn) { VIABIOSInfoPtr pBIOSInfo = VIAPTR(pScrn)->pBIOSInfo; CARD8 i, buf; - + xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Printing registers for %s\n", - pBIOSInfo->TVI2CDev->DevName); + pBIOSInfo->TVI2CDev->DevName); for (i = 0; i < pBIOSInfo->TVNumRegs; i++) { - xf86I2CReadByte(pBIOSInfo->TVI2CDev, i, &buf); - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "TV%02X: 0x%02X\n", i, buf); + xf86I2CReadByte(pBIOSInfo->TVI2CDev, i, &buf); + xf86DrvMsg(pScrn->scrnIndex, X_INFO, "TV%02X: 0x%02X\n", i, buf); } xf86DrvMsg(pScrn->scrnIndex, X_INFO, "End of TV registers.\n"); } -/* - * - */ + I2CDevPtr ViaVT162xDetect(ScrnInfoPtr pScrn, I2CBusPtr pBus, CARD8 Address) { @@ -68,59 +64,59 @@ pDev->DevName = "VT162x"; pDev->SlaveAddr = Address; pDev->pI2CBus = pBus; - + if (!xf86I2CDevInit(pDev)) { - xf86DestroyI2CDevRec(pDev, TRUE); - return NULL; + xf86DestroyI2CDevRec(pDev, TRUE); + return NULL; } if (!xf86I2CReadByte(pDev, 0x1B, &buf)) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Unable to read from %s Slave %d.\n", - pBus->BusName, Address); - xf86DestroyI2CDevRec(pDev, TRUE); - return NULL; + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "Unable to read from %s Slave %d.\n", + pBus->BusName, Address); + xf86DestroyI2CDevRec(pDev, TRUE); + return NULL; } - + switch (buf) { - case 0x02: - xf86DrvMsg(pScrn->scrnIndex, X_PROBED, - "Detected VIA Technologies VT1621 TV Encoder\n"); - pBIOSInfo->TVEncoder = VIA_VT1621; - pDev->DevName = "VT1621"; - break; - case 0x03: - xf86DrvMsg(pScrn->scrnIndex, X_PROBED, - "Detected VIA Technologies VT1622 TV Encoder\n"); - pBIOSInfo->TVEncoder = VIA_VT1622; - pDev->DevName = "VT1622"; - break; - case 0x10: - xf86DrvMsg(pScrn->scrnIndex, X_PROBED, - "Detected VIA Technologies VT1622A/VT1623 TV Encoder\n"); - pBIOSInfo->TVEncoder = VIA_VT1623; - pDev->DevName = "VT1623"; - break; - case 0x50: - xf86DrvMsg(pScrn->scrnIndex, X_PROBED, - "Detected VIA Technologies VT1625 TV Encoder\n"); - pBIOSInfo->TVEncoder = VIA_VT1625; - pDev->DevName = "VT1625"; - break; - default: - pBIOSInfo->TVEncoder = VIA_NONETV; - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "Unknown TV Encoder found at %s %X.\n", pBus->BusName, Address); - xf86DestroyI2CDevRec(pDev,TRUE); - pDev = NULL; - break; + case 0x02: + xf86DrvMsg(pScrn->scrnIndex, X_PROBED, + "Detected VIA Technologies VT1621 TV Encoder\n"); + pBIOSInfo->TVEncoder = VIA_VT1621; + pDev->DevName = "VT1621"; + break; + case 0x03: + xf86DrvMsg(pScrn->scrnIndex, X_PROBED, + "Detected VIA Technologies VT1622 TV Encoder\n"); + pBIOSInfo->TVEncoder = VIA_VT1622; + pDev->DevName = "VT1622"; + break; + case 0x10: + xf86DrvMsg(pScrn->scrnIndex, X_PROBED, + "Detected VIA Technologies VT1622A/VT1623 TV Encoder\n"); + pBIOSInfo->TVEncoder = VIA_VT1623; + pDev->DevName = "VT1623"; + break; + case 0x50: + xf86DrvMsg(pScrn->scrnIndex, X_PROBED, + "Detected VIA Technologies VT1625 TV Encoder\n"); + pBIOSInfo->TVEncoder = VIA_VT1625; + pDev->DevName = "VT1625"; + break; + default: + pBIOSInfo->TVEncoder = VIA_NONETV; + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, + "Unknown TV Encoder found at %s %X.\n", + pBus->BusName, Address); + xf86DestroyI2CDevRec(pDev, TRUE); + pDev = NULL; + break; } return pDev; } -/* - * - */ + static void VT162xSave(ScrnInfoPtr pScrn) { @@ -130,13 +126,10 @@ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VT162xSave\n")); for (i = 0; i < pBIOSInfo->TVNumRegs; i++) - xf86I2CReadByte(pBIOSInfo->TVI2CDev, i, &(pBIOSInfo->TVRegs[i])); + xf86I2CReadByte(pBIOSInfo->TVI2CDev, i, &(pBIOSInfo->TVRegs[i])); } -/* - * - */ static void VT162xRestore(ScrnInfoPtr pScrn) { @@ -146,17 +139,18 @@ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VT162xRestore\n")); for (i = 0; i < pBIOSInfo->TVNumRegs; i++) - xf86I2CWriteByte(pBIOSInfo->TVI2CDev, i, pBIOSInfo->TVRegs[i]); + xf86I2CWriteByte(pBIOSInfo->TVI2CDev, i, pBIOSInfo->TVRegs[i]); } + /* - * the same for VT1621 as for VT1622/VT1622A/VT1623, result is different though - * still needs testing on vt1621 of course. + * For VT1621 the same as for VT1622/VT1622A/VT1623, but result is different. + * Still needs testing on VT1621, of course. */ static CARD8 VT162xDACSenseI2C(I2CDevPtr pDev) { - CARD8 save, sense; + CARD8 save, sense; xf86I2CReadByte(pDev, 0x0E, &save); xf86I2CWriteByte(pDev, 0x0E, 0x00); @@ -164,17 +158,17 @@ xf86I2CWriteByte(pDev, 0x0E, 0x00); xf86I2CReadByte(pDev, 0x0F, &sense); xf86I2CWriteByte(pDev, 0x0E, save); - + return (sense & 0x0F); } /* - * VT1625 moves DACa through DACd from bits 0-3 to 2-5 + * VT1625 moves DACa through DACd from bits 0-3 to 2-5. */ static CARD8 VT1625DACSenseI2C(I2CDevPtr pDev) { - CARD8 save, sense; + CARD8 save, sense; xf86I2CReadByte(pDev, 0x0E, &save); xf86I2CWriteByte(pDev, 0x0E, 0x00); @@ -187,162 +181,168 @@ } /* - * VT1621 only knows composite and s-video + * VT1621 only knows composite and s-video. */ static Bool VT1621DACSense(ScrnInfoPtr pScrn) { VIABIOSInfoPtr pBIOSInfo = VIAPTR(pScrn)->pBIOSInfo; - CARD8 sense; - + CARD8 sense; + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VT1621DACSense\n")); - + sense = VT162xDACSenseI2C(pBIOSInfo->TVI2CDev); switch (sense) { - case 0x00: - pBIOSInfo->TVOutput = TVOUTPUT_SC; - xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "VT1621: S-Video & Composite connected.\n"); - return TRUE; - case 0x01: - pBIOSInfo->TVOutput = TVOUTPUT_COMPOSITE; - xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "VT1621: Composite connected.\n"); - return TRUE; - case 0x02: - pBIOSInfo->TVOutput = TVOUTPUT_SVIDEO; - xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "VT1621: S-Video connected.\n"); - return TRUE; - case 0x03: - pBIOSInfo->TVOutput = TVOUTPUT_NONE; - xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "VT1621: Nothing connected.\n"); - return FALSE; - default: - pBIOSInfo->TVOutput = TVOUTPUT_NONE; - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "VT1621: Unknown cable combination: 0x0%2X.\n", - sense); - return FALSE; + case 0x00: + pBIOSInfo->TVOutput = TVOUTPUT_SC; + xf86DrvMsg(pScrn->scrnIndex, X_PROBED, + "VT1621: S-Video & Composite connected.\n"); + return TRUE; + case 0x01: + pBIOSInfo->TVOutput = TVOUTPUT_COMPOSITE; + xf86DrvMsg(pScrn->scrnIndex, X_PROBED, + "VT1621: Composite connected.\n"); + return TRUE; + case 0x02: + pBIOSInfo->TVOutput = TVOUTPUT_SVIDEO; + xf86DrvMsg(pScrn->scrnIndex, X_PROBED, + "VT1621: S-Video connected.\n"); + return TRUE; + case 0x03: + pBIOSInfo->TVOutput = TVOUTPUT_NONE; + xf86DrvMsg(pScrn->scrnIndex, X_PROBED, + "VT1621: Nothing connected.\n"); + return FALSE; + default: + pBIOSInfo->TVOutput = TVOUTPUT_NONE; + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, + "VT1621: Unknown cable combination: 0x0%2X.\n", sense); + return FALSE; } } - /* - * VT1622, VT1622A and VT1623 know composite, s-video, RGB and YCBCR + * VT1622, VT1622A and VT1623 know composite, s-video, RGB and YCBCR. */ static Bool VT1622DACSense(ScrnInfoPtr pScrn) { VIABIOSInfoPtr pBIOSInfo = VIAPTR(pScrn)->pBIOSInfo; - CARD8 sense; + CARD8 sense; DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VT1622DACSense\n")); sense = VT162xDACSenseI2C(pBIOSInfo->TVI2CDev); switch (sense) { - case 0x00: /* DAC A,B,C,D */ - pBIOSInfo->TVOutput = TVOUTPUT_RGB; - xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "VT162x: RGB connected.\n"); - return TRUE; - case 0x01: /* DAC A,B,C */ - pBIOSInfo->TVOutput = TVOUTPUT_SC; - xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "VT162x: S-Video & Composite connected.\n"); - return TRUE; - case 0x07: /* DAC A */ - pBIOSInfo->TVOutput = TVOUTPUT_COMPOSITE; - xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "VT162x: Composite connected.\n"); - return TRUE; - case 0x08: /* DAC B,C,D */ - pBIOSInfo->TVOutput = TVOUTPUT_YCBCR; - xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "VT162x: YcBcR connected.\n"); - return TRUE; - case 0x09: /* DAC B,C */ - pBIOSInfo->TVOutput = TVOUTPUT_SVIDEO; - xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "VT162x: S-Video connected.\n"); - return TRUE; - case 0x0F: - pBIOSInfo->TVOutput = TVOUTPUT_NONE; - xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "VT162x: Nothing connected.\n"); - return FALSE; - default: - pBIOSInfo->TVOutput = TVOUTPUT_NONE; - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "VT162x: Unknown cable combination: 0x0%2X.\n", - sense); - return FALSE; + case 0x00: /* DAC A,B,C,D */ + pBIOSInfo->TVOutput = TVOUTPUT_RGB; + xf86DrvMsg(pScrn->scrnIndex, X_PROBED, + "VT162x: RGB connected.\n"); + return TRUE; + case 0x01: /* DAC A,B,C */ + pBIOSInfo->TVOutput = TVOUTPUT_SC; + xf86DrvMsg(pScrn->scrnIndex, X_PROBED, + "VT162x: S-Video & Composite connected.\n"); + return TRUE; + case 0x07: /* DAC A */ + pBIOSInfo->TVOutput = TVOUTPUT_COMPOSITE; + xf86DrvMsg(pScrn->scrnIndex, X_PROBED, + "VT162x: Composite connected.\n"); + return TRUE; + case 0x08: /* DAC B,C,D */ + pBIOSInfo->TVOutput = TVOUTPUT_YCBCR; + xf86DrvMsg(pScrn->scrnIndex, X_PROBED, + "VT162x: YcBcR connected.\n"); + return TRUE; + case 0x09: /* DAC B,C */ + pBIOSInfo->TVOutput = TVOUTPUT_SVIDEO; + xf86DrvMsg(pScrn->scrnIndex, X_PROBED, + "VT162x: S-Video connected.\n"); + return TRUE; + case 0x0F: + pBIOSInfo->TVOutput = TVOUTPUT_NONE; + xf86DrvMsg(pScrn->scrnIndex, X_PROBED, + "VT162x: Nothing connected.\n"); + return FALSE; + default: + pBIOSInfo->TVOutput = TVOUTPUT_NONE; + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, + "VT162x: Unknown cable combination: 0x0%2X.\n", sense); + return FALSE; } } /* - * VT1625 knows composite, s-video, RGB and YCBCR + * VT1625 knows composite, s-video, RGB and YCBCR. */ static Bool VT1625DACSense(ScrnInfoPtr pScrn) { VIABIOSInfoPtr pBIOSInfo = VIAPTR(pScrn)->pBIOSInfo; - CARD8 sense; + CARD8 sense; DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VT1625DACSense\n")); sense = VT1625DACSenseI2C(pBIOSInfo->TVI2CDev); switch (sense) { - case 0x00: /* DAC A,B,C,D,E,F */ - pBIOSInfo->TVOutput = TVOUTPUT_RGB; - xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "VT1625: RGB connected.\n"); - return TRUE; - case 0x07: /* DAC A,B,C */ - pBIOSInfo->TVOutput = TVOUTPUT_SC; - xf86DrvMsg(pScrn->scrnIndex, X_PROBED, - "VT1625: S-Video & Composite connected.\n"); - return TRUE; - case 0x37: /* DAC C */ - pBIOSInfo->TVOutput = TVOUTPUT_COMPOSITE; - xf86DrvMsg(pScrn->scrnIndex, X_PROBED, - "VT1625: Composite connected.\n"); - return TRUE; - case 0x38: /* DAC D,E,F */ - pBIOSInfo->TVOutput = TVOUTPUT_YCBCR; - xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "VT1625: YCbCr connected.\n"); - return TRUE; - case 0x0F: /* DAC A,B */ - pBIOSInfo->TVOutput = TVOUTPUT_SVIDEO; - xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "VT1625: S-Video connected.\n"); - return TRUE; - case 0x3F: - pBIOSInfo->TVOutput = TVOUTPUT_NONE; - xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "VT1625: Nothing connected.\n"); - return FALSE; - default: - pBIOSInfo->TVOutput = TVOUTPUT_NONE; - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "VT1625: Unknown cable combination: 0x0%2X.\n", - sense); - return FALSE; + case 0x00: /* DAC A,B,C,D,E,F */ + pBIOSInfo->TVOutput = TVOUTPUT_RGB; + xf86DrvMsg(pScrn->scrnIndex, X_PROBED, + "VT1625: RGB connected.\n"); + return TRUE; + case 0x07: /* DAC A,B,C */ + pBIOSInfo->TVOutput = TVOUTPUT_SC; + xf86DrvMsg(pScrn->scrnIndex, X_PROBED, + "VT1625: S-Video & Composite connected.\n"); + return TRUE; + case 0x37: /* DAC C */ + pBIOSInfo->TVOutput = TVOUTPUT_COMPOSITE; + xf86DrvMsg(pScrn->scrnIndex, X_PROBED, + "VT1625: Composite connected.\n"); + return TRUE; + case 0x38: /* DAC D,E,F */ + pBIOSInfo->TVOutput = TVOUTPUT_YCBCR; + xf86DrvMsg(pScrn->scrnIndex, X_PROBED, + "VT1625: YCbCr connected.\n"); + return TRUE; + case 0x0F: /* DAC A,B */ + pBIOSInfo->TVOutput = TVOUTPUT_SVIDEO; + xf86DrvMsg(pScrn->scrnIndex, X_PROBED, + "VT1625: S-Video connected.\n"); + return TRUE; + case 0x3F: + pBIOSInfo->TVOutput = TVOUTPUT_NONE; + xf86DrvMsg(pScrn->scrnIndex, X_PROBED, + "VT1625: Nothing connected.\n"); + return FALSE; + default: + pBIOSInfo->TVOutput = TVOUTPUT_NONE; + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, + "VT1625: Unknown cable combination: 0x0%2X.\n", sense); + return FALSE; } } -/* - * - */ static CARD8 VT1621ModeIndex(ScrnInfoPtr pScrn, DisplayModePtr mode) { VIABIOSInfoPtr pBIOSInfo = VIAPTR(pScrn)->pBIOSInfo; int i; - DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VT1621ModeIndex\n")); + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VT1621ModeIndex\n")); for (i = 0; VT1621Table[i].Width; i++) { - if ((VT1621Table[i].Width == mode->CrtcHDisplay) && - (VT1621Table[i].Height == mode->CrtcVDisplay) && - (VT1621Table[i].Standard == pBIOSInfo->TVType) && - !(strcmp(VT1621Table[i].name, mode->name))) - return i; + if ((VT1621Table[i].Width == mode->CrtcHDisplay) && + (VT1621Table[i].Height == mode->CrtcVDisplay) && + (VT1621Table[i].Standard == pBIOSInfo->TVType) && + !(strcmp(VT1621Table[i].name, mode->name))) + return i; } xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "VT1621ModeIndex:" - " Mode \"%s\" not found in Table\n", mode->name); + " Mode \"%s\" not found in Table\n", mode->name); return 0xFF; } -/* - * - */ static ModeStatus VT1621ModeValid(ScrnInfoPtr pScrn, DisplayModePtr mode) { @@ -351,30 +351,30 @@ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VT1621ModeValid\n")); if ((mode->PrivSize != sizeof(struct VT162xModePrivate)) || - ((mode->Private != (void *) &VT162xModePrivateNTSC) && - (mode->Private != (void *) &VT162xModePrivatePAL))) { - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Not a mode defined by the TV Encoder.\n"); - return MODE_BAD; + ((mode->Private != (void *)&VT162xModePrivateNTSC) && + (mode->Private != (void *)&VT162xModePrivatePAL))) { + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "Not a mode defined by the TV Encoder.\n"); + return MODE_BAD; } if ((pBIOSInfo->TVType == TVTYPE_NTSC) && - (mode->Private != (void *) &VT162xModePrivateNTSC)) { - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "TV standard is NTSC. This is a PAL mode.\n"); - return MODE_BAD; + (mode->Private != (void *)&VT162xModePrivateNTSC)) { + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "TV standard is NTSC. This is a PAL mode.\n"); + return MODE_BAD; } else if ((pBIOSInfo->TVType == TVTYPE_PAL) && - (mode->Private != (void *) &VT162xModePrivatePAL)) { - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "TV standard is PAL. This is a NTSC mode.\n"); - return MODE_BAD; + (mode->Private != (void *)&VT162xModePrivatePAL)) { + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "TV standard is PAL. This is a NTSC mode.\n"); + return MODE_BAD; } if (VT1621ModeIndex(pScrn, mode) != 0xFF) - return MODE_OK; + return MODE_OK; return MODE_BAD; } -/* - * - */ static CARD8 VT1622ModeIndex(ScrnInfoPtr pScrn, DisplayModePtr mode) { @@ -382,37 +382,34 @@ struct VT162XTableRec *Table; int i; - DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VT1622ModeIndex\n")); + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VT1622ModeIndex\n")); if (pBIOSInfo->TVEncoder == VIA_VT1622) - Table = VT1622Table; + Table = VT1622Table; else if (pBIOSInfo->TVEncoder == VIA_VT1625) - Table = VT1625Table; + Table = VT1625Table; else - Table = VT1623Table; + Table = VT1623Table; for (i = 0; Table[i].Width; i++) { + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, + "width=%d:%d, height=%d:%d, std=%d:%d, name=%s:%s.\n", + Table[i].Width, mode->CrtcHDisplay, + Table[i].Height, mode->CrtcVDisplay, + Table[i].Standard, pBIOSInfo->TVType, + Table[i].name, mode->name); -xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "width=%d:%d, height=%d:%d, std=%d:%d, name=%s:%s.\n", -Table[i].Width, mode->CrtcHDisplay, -Table[i].Height, mode->CrtcVDisplay, -Table[i].Standard, pBIOSInfo->TVType, -Table[i].name, mode->name); - - if ((Table[i].Width == mode->CrtcHDisplay) && - (Table[i].Height == mode->CrtcVDisplay) && - (Table[i].Standard == pBIOSInfo->TVType) && - !strcmp(Table[i].name, mode->name)) - return i; + if ((Table[i].Width == mode->CrtcHDisplay) && + (Table[i].Height == mode->CrtcVDisplay) && + (Table[i].Standard == pBIOSInfo->TVType) && + !strcmp(Table[i].name, mode->name)) + return i; } xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "VT1622ModeIndex:" - " Mode \"%s\" not found in Table\n", mode->name); + " Mode \"%s\" not found in Table\n", mode->name); return 0xFF; } -/* - * - */ static ModeStatus VT1622ModeValid(ScrnInfoPtr pScrn, DisplayModePtr mode) { @@ -421,24 +418,27 @@ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VT1622ModeValid\n")); if ((mode->PrivSize != sizeof(struct VT162xModePrivate)) || - ((mode->Private != (void *) &VT162xModePrivateNTSC) && - (mode->Private != (void *) &VT162xModePrivatePAL))) { - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Not a mode defined by the TV Encoder.\n"); - return MODE_BAD; + ((mode->Private != (void *)&VT162xModePrivateNTSC) && + (mode->Private != (void *)&VT162xModePrivatePAL))) { + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "Not a mode defined by the TV Encoder.\n"); + return MODE_BAD; } if ((pBIOSInfo->TVType == TVTYPE_NTSC) && - (mode->Private != (void *) &VT162xModePrivateNTSC)) { - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "TV standard is NTSC. This is a PAL mode.\n"); - return MODE_BAD; + (mode->Private != (void *)&VT162xModePrivateNTSC)) { + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "TV standard is NTSC. This is a PAL mode.\n"); + return MODE_BAD; } else if ((pBIOSInfo->TVType == TVTYPE_PAL) && - (mode->Private != (void *) &VT162xModePrivatePAL)) { - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "TV standard is PAL. This is a NTSC mode.\n"); - return MODE_BAD; + (mode->Private != (void *)&VT162xModePrivatePAL)) { + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "TV standard is PAL. This is a NTSC mode.\n"); + return MODE_BAD; } if (VT1622ModeIndex(pScrn, mode) != 0xFF) - return MODE_OK; + return MODE_OK; return MODE_BAD; } @@ -450,53 +450,55 @@ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VT1625ModeValid\n")); if ((mode->PrivSize != sizeof(struct VT162xModePrivate)) || - ((mode->Private != (void *) &VT162xModePrivateNTSC) && - (mode->Private != (void *) &VT162xModePrivatePAL) && - (mode->Private != (void *) &VT162xModePrivate480P) && - (mode->Private != (void *) &VT162xModePrivate576P) && - (mode->Private != (void *) &VT162xModePrivate720P) && - (mode->Private != (void *) &VT162xModePrivate1080I))) { - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Not a mode defined by the TV Encoder.\n"); + ((mode->Private != (void *)&VT162xModePrivateNTSC) && + (mode->Private != (void *)&VT162xModePrivatePAL) && + (mode->Private != (void *)&VT162xModePrivate480P) && + (mode->Private != (void *)&VT162xModePrivate576P) && + (mode->Private != (void *)&VT162xModePrivate720P) && + (mode->Private != (void *)&VT162xModePrivate1080I))) { + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "Not a mode defined by the TV Encoder.\n"); return MODE_BAD; } - + if ((pBIOSInfo->TVType == TVTYPE_NTSC) && - (mode->Private != (void *) &VT162xModePrivateNTSC)) { - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "TV standard is NTSC. This is an incompatible mode.\n"); + (mode->Private != (void *)&VT162xModePrivateNTSC)) { + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "TV standard is NTSC. This is an incompatible mode.\n"); return MODE_BAD; } else if ((pBIOSInfo->TVType == TVTYPE_PAL) && - (mode->Private != (void *) &VT162xModePrivatePAL)) { - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "TV standard is PAL. This is an incompatible mode.\n"); + (mode->Private != (void *)&VT162xModePrivatePAL)) { + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "TV standard is PAL. This is an incompatible mode.\n"); return MODE_BAD; } else if ((pBIOSInfo->TVType == TVTYPE_480P) && - (mode->Private != (void *) &VT162xModePrivate480P)) { - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "TV standard is 480P. This is an incompatible mode.\n"); + (mode->Private != (void *)&VT162xModePrivate480P)) { + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "TV standard is 480P. This is an incompatible mode.\n"); return MODE_BAD; } else if ((pBIOSInfo->TVType == TVTYPE_576P) && - (mode->Private != (void *) &VT162xModePrivate576P)) { - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "TV standard is 576P. This is an incompatible mode.\n"); + (mode->Private != (void *)&VT162xModePrivate576P)) { + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "TV standard is 576P. This is an incompatible mode.\n"); return MODE_BAD; } else if ((pBIOSInfo->TVType == TVTYPE_720P) && - (mode->Private != (void *) &VT162xModePrivate720P)) { - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "TV standard is 720P. This is an incompatible mode.\n"); + (mode->Private != (void *)&VT162xModePrivate720P)) { + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "TV standard is 720P. This is an incompatible mode.\n"); return MODE_BAD; } else if ((pBIOSInfo->TVType == TVTYPE_1080I) && - (mode->Private != (void *) &VT162xModePrivate1080I)) { - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "TV standard is 1080I. This is an incompatible mode.\n"); + (mode->Private != (void *)&VT162xModePrivate1080I)) { + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "TV standard is 1080I. This is an incompatible mode.\n"); return MODE_BAD; } - - if (VT1622ModeIndex(pScrn, mode) != 0xFF) return MODE_OK; return MODE_BAD; } -/* - * - */ static void VT162xSetSubCarrier(I2CDevPtr pDev, CARD32 SubCarrier) { @@ -506,9 +508,6 @@ xf86I2CWriteByte(pDev, 0x19, (SubCarrier >> 24) & 0xFF); } -/* - * - */ static void VT1621ModeI2C(ScrnInfoPtr pScrn, DisplayModePtr mode) { @@ -519,72 +518,67 @@ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VT1621ModeI2C\n")); for (i = 0; i < 0x16; i++) - xf86I2CWriteByte(pBIOSInfo->TVI2CDev, i, Table.TV[i]); + xf86I2CWriteByte(pBIOSInfo->TVI2CDev, i, Table.TV[i]); VT162xSetSubCarrier(pBIOSInfo->TVI2CDev, Table.SubCarrier); - /* skip reserved (1A) and version id (1B). */ - + /* Skip reserved (1A) and version ID (1B). */ xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x1C, Table.TV[0x1C]); - /* skip software reset (1D) */ - + /* Skip software reset (1D). */ for (i = 0x1E; i < 0x24; i++) - xf86I2CWriteByte(pBIOSInfo->TVI2CDev, i, Table.TV[i]); + xf86I2CWriteByte(pBIOSInfo->TVI2CDev, i, Table.TV[i]); - /* write some zeroes? */ + /* Write some zeroes? */ xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x24, 0x00); for (i = 0; i < 0x08; i++) - xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x4A + i, 0x00); + xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x4A + i, 0x00); if (pBIOSInfo->TVOutput == TVOUTPUT_COMPOSITE) - for (i = 0; i < 0x10; i++) - xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x52 + i, Table.TVC[i]); + for (i = 0; i < 0x10; i++) + xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x52 + i, Table.TVC[i]); else - for (i = 0; i < 0x10; i++) - xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x52 + i, Table.TVS[i]); + for (i = 0; i < 0x10; i++) + xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x52 + i, Table.TVS[i]); - /* Turn on all Composite and S-Video output */ + /* Turn on all Composite and S-Video output. */ xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x0E, 0x00); if (pBIOSInfo->TVDotCrawl) { - if (Table.DotCrawlSubCarrier) { - xf86I2CReadByte(pBIOSInfo->TVI2CDev, 0x11, &i); - xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x11, i | 0x08); - - VT162xSetSubCarrier(pBIOSInfo->TVI2CDev, Table.DotCrawlSubCarrier); - } else - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "This mode does not currently " - "support DotCrawl suppression.\n"); + if (Table.DotCrawlSubCarrier) { + xf86I2CReadByte(pBIOSInfo->TVI2CDev, 0x11, &i); + xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x11, i | 0x08); + + VT162xSetSubCarrier(pBIOSInfo->TVI2CDev, Table.DotCrawlSubCarrier); + } else + xf86DrvMsg(pScrn->scrnIndex, X_INFO, "This mode does not currently " + "support DotCrawl suppression.\n"); } } -/* - * - */ static void VT1621ModeCrtc(ScrnInfoPtr pScrn, DisplayModePtr mode) { vgaHWPtr hwp = VGAHWPTR(pScrn); - VIAPtr pVia = VIAPTR(pScrn); + VIAPtr pVia = VIAPTR(pScrn); VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; struct VT1621TableRec Table = VT1621Table[VT1621ModeIndex(pScrn, mode)]; DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VT1621ModeCrtc\n")); if (pVia->IsSecondary) { - hwp->writeCrtc(hwp, 0x6A, 0x80); - hwp->writeCrtc(hwp, 0x6B, 0x20); - hwp->writeCrtc(hwp, 0x6C, 0x80); + hwp->writeCrtc(hwp, 0x6A, 0x80); + hwp->writeCrtc(hwp, 0x6B, 0x20); + hwp->writeCrtc(hwp, 0x6C, 0x80); - /* Disable LCD Scaling */ - if (!pVia->SAMM || pVia->FirstInit) - hwp->writeCrtc(hwp, 0x79, 0x00); + /* Disable LCD Scaling */ + if (!pVia->SAMM || pVia->FirstInit) + hwp->writeCrtc(hwp, 0x79, 0x00); } else { - hwp->writeCrtc(hwp, 0x6A, 0x00); - hwp->writeCrtc(hwp, 0x6B, 0x80); - hwp->writeCrtc(hwp, 0x6C, Table.PrimaryCR6C); + hwp->writeCrtc(hwp, 0x6A, 0x00); + hwp->writeCrtc(hwp, 0x6B, 0x80); + hwp->writeCrtc(hwp, 0x6C, Table.PrimaryCR6C); } pBIOSInfo->ClockExternal = TRUE; ViaCrtcMask(hwp, 0x6A, 0x40, 0x40); @@ -592,7 +586,7 @@ } /* - * also suited for VT1622A, VT1623, VT1625 + * Also suited for VT1622A, VT1623, VT1625. */ static void VT1622ModeI2C(ScrnInfoPtr pScrn, DisplayModePtr mode) @@ -604,79 +598,77 @@ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VT1622ModeI2C\n")); if (pBIOSInfo->TVEncoder == VIA_VT1622) - Table = VT1622Table[VT1622ModeIndex(pScrn, mode)]; + Table = VT1622Table[VT1622ModeIndex(pScrn, mode)]; else if (pBIOSInfo->TVEncoder == VIA_VT1625) - Table = VT1625Table[VT1622ModeIndex(pScrn, mode)]; - else /* VT1622A/VT1623 */ - Table = VT1623Table[VT1622ModeIndex(pScrn, mode)]; + Table = VT1625Table[VT1622ModeIndex(pScrn, mode)]; + else /* VT1622A/VT1623 */ + Table = VT1623Table[VT1622ModeIndex(pScrn, mode)]; - /* TV Reset */ + /* TV reset. */ xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x1D, 0x00); xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x1D, 0x80); for (i = 0; i < 0x16; i++) - xf86I2CWriteByte(pBIOSInfo->TVI2CDev, i, Table.TV1[i]); + xf86I2CWriteByte(pBIOSInfo->TVI2CDev, i, Table.TV1[i]); VT162xSetSubCarrier(pBIOSInfo->TVI2CDev, Table.SubCarrier); xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x1A, Table.TV1[0x1A]); - - /* skip version id */ + /* Skip version ID. */ xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x1C, Table.TV1[0x1C]); - /* skip software reset */ - + /* Skip software reset. */ for (i = 0x1E; i < 0x30; i++) - xf86I2CWriteByte(pBIOSInfo->TVI2CDev, i, Table.TV1[i]); + xf86I2CWriteByte(pBIOSInfo->TVI2CDev, i, Table.TV1[i]); for (i = 0; i < 0x1B; i++) - xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x4A + i, Table.TV2[i]); + xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x4A + i, Table.TV2[i]); - /* Turn on all Composite and S-Video output */ + /* Turn on all Composite and S-Video output. */ xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x0E, 0x00); if (pBIOSInfo->TVDotCrawl) { - if (Table.DotCrawlSubCarrier) { - xf86I2CReadByte(pBIOSInfo->TVI2CDev, 0x11, &save); - xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x11, save | 0x08); - - VT162xSetSubCarrier(pBIOSInfo->TVI2CDev, Table.DotCrawlSubCarrier); - } else - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "This mode does not currently " - "support DotCrawl suppression.\n"); + if (Table.DotCrawlSubCarrier) { + xf86I2CReadByte(pBIOSInfo->TVI2CDev, 0x11, &save); + xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x11, save | 0x08); + + VT162xSetSubCarrier(pBIOSInfo->TVI2CDev, Table.DotCrawlSubCarrier); + } else + xf86DrvMsg(pScrn->scrnIndex, X_INFO, "This mode does not currently " + "support DotCrawl suppression.\n"); } if (pBIOSInfo->TVOutput == TVOUTPUT_RGB) { - xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x02, 0x2A); - xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x65, Table.RGB[0]); - xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x66, Table.RGB[1]); - xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x67, Table.RGB[2]); - if (Table.RGB[3]) - xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x27, Table.RGB[3]); - if (Table.RGB[4]) - xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x2B, Table.RGB[4]); - if (Table.RGB[5]) - xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x2C, Table.RGB[5]); + xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x02, 0x2A); + xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x65, Table.RGB[0]); + xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x66, Table.RGB[1]); + xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x67, Table.RGB[2]); + if (Table.RGB[3]) + xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x27, Table.RGB[3]); + if (Table.RGB[4]) + xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x2B, Table.RGB[4]); + if (Table.RGB[5]) + xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x2C, Table.RGB[5]); } else if (pBIOSInfo->TVOutput == TVOUTPUT_YCBCR) { - xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x02, 0x03); - xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x65, Table.YCbCr[0]); - xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x66, Table.YCbCr[1]); - xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x67, Table.YCbCr[2]); + xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x02, 0x03); + xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x65, Table.YCbCr[0]); + xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x66, Table.YCbCr[1]); + xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x67, Table.YCbCr[2]); } - /* Configure flicker filter */ + /* Configure flicker filter. */ xf86I2CReadByte(pBIOSInfo->TVI2CDev, 0x03, &save); save &= 0xFC; if (pBIOSInfo->TVDeflicker == 1) - save |= 0x01; + save |= 0x01; else if (pBIOSInfo->TVDeflicker == 2) save |= 0x02; xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x03, save); } /* - * Also suited for VT1622A, VT1623, VT1625 + * Also suited for VT1622A, VT1623, VT1625. */ static void VT1622ModeCrtc(ScrnInfoPtr pScrn, DisplayModePtr mode) @@ -689,85 +681,77 @@ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VT1622ModeCrtc\n")); if (pBIOSInfo->TVEncoder == VIA_VT1622) - Table = VT1622Table[VT1622ModeIndex(pScrn, mode)]; + Table = VT1622Table[VT1622ModeIndex(pScrn, mode)]; else if (pBIOSInfo->TVEncoder == VIA_VT1625) - Table = VT1625Table[VT1622ModeIndex(pScrn, mode)]; - else /* VT1622A/VT1623 */ - Table = VT1623Table[VT1622ModeIndex(pScrn, mode)]; + Table = VT1625Table[VT1622ModeIndex(pScrn, mode)]; + else /* VT1622A/VT1623 */ + Table = VT1623Table[VT1622ModeIndex(pScrn, mode)]; hwp->writeCrtc(hwp, 0x6A, 0x00); hwp->writeCrtc(hwp, 0x6B, 0x00); - hwp->writeCrtc(hwp, 0x6C, 0x00); + hwp->writeCrtc(hwp, 0x6C, 0x00); if (pVia->IsSecondary) { - hwp->writeCrtc(hwp, 0x6C, Table.SecondaryCR6C); + hwp->writeCrtc(hwp, 0x6C, Table.SecondaryCR6C); - ViaCrtcMask(hwp, 0x6A, 0x80, 0x80); - ViaCrtcMask(hwp, 0x6C, 0x80, 0x80); + ViaCrtcMask(hwp, 0x6A, 0x80, 0x80); + ViaCrtcMask(hwp, 0x6C, 0x80, 0x80); - /* CLE266Ax use 2x XCLK */ - if ((pVia->Chipset == VIA_CLE266) && CLE266_REV_IS_AX(pVia->ChipRev)) { - ViaCrtcMask(hwp, 0x6B, 0x20, 0x20); - - /* Fix TV clock Polarity for CLE266A2 */ - if (pVia->ChipRev == 0x02) - ViaCrtcMask(hwp, 0x6C, 0x1C, 0x1C); - } + /* CLE266Ax use 2x XCLK. */ + if ((pVia->Chipset == VIA_CLE266) && CLE266_REV_IS_AX(pVia->ChipRev)) { + ViaCrtcMask(hwp, 0x6B, 0x20, 0x20); - /* Disable LCD Scaling */ - if (!pVia->SAMM || pVia->FirstInit) - hwp->writeCrtc(hwp, 0x79, 0x00); + /* Fix TV clock polarity for CLE266A2. */ + if (pVia->ChipRev == 0x02) + ViaCrtcMask(hwp, 0x6C, 0x1C, 0x1C); + } + /* Disable LCD scaling. */ + if (!pVia->SAMM || pVia->FirstInit) + hwp->writeCrtc(hwp, 0x79, 0x00); + } else { if ((pVia->Chipset == VIA_CLE266) && CLE266_REV_IS_AX(pVia->ChipRev)) { - ViaCrtcMask(hwp, 0x6B, 0x80, 0x80); + ViaCrtcMask(hwp, 0x6B, 0x80, 0x80); - /* Fix TV clock Polarity for CLE266A2 */ + /* Fix TV clock polarity for CLE266A2. */ if (pVia->ChipRev == 0x02) - hwp->writeCrtc(hwp, 0x6C, Table.PrimaryCR6C); + hwp->writeCrtc(hwp, 0x6C, Table.PrimaryCR6C); } } pBIOSInfo->ClockExternal = TRUE; ViaCrtcMask(hwp, 0x6A, 0x40, 0x40); ViaCrtcMask(hwp, 0x6C, 0x01, 0x01); - ViaSeqMask(hwp, 0x1E, 0xF0, 0xF0); /* Enable DI0/DVP0 */ + ViaSeqMask(hwp, 0x1E, 0xF0, 0xF0); /* enable DI0/DVP0 */ } -/* - * - */ + static void VT1621Power(ScrnInfoPtr pScrn, Bool On) { VIABIOSInfoPtr pBIOSInfo = VIAPTR(pScrn)->pBIOSInfo; DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VT1621Power\n")); - + if (On) - xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x0E, 0x00); + xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x0E, 0x00); else - xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x0E, 0x03); + xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x0E, 0x03); } -/* - * - */ static void VT1622Power(ScrnInfoPtr pScrn, Bool On) { VIABIOSInfoPtr pBIOSInfo = VIAPTR(pScrn)->pBIOSInfo; DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VT1622Power\n")); - + if (On) - xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x0E, 0x00); + xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x0E, 0x00); else - xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x0E, 0x0F); + xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x0E, 0x0F); } -/* - * - */ static void VT1625Power(ScrnInfoPtr pScrn, Bool On) { @@ -781,9 +765,7 @@ xf86I2CWriteByte(pBIOSInfo->TVI2CDev, 0x0E, 0x3F); } -/* - * - */ + void ViaVT162xInit(ScrnInfoPtr pScrn) { @@ -792,55 +774,55 @@ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaVT162xInit\n")); switch (pBIOSInfo->TVEncoder) { - case VIA_VT1621: - pBIOSInfo->TVSave = VT162xSave; - pBIOSInfo->TVRestore = VT162xRestore; - pBIOSInfo->TVDACSense = VT1621DACSense; - pBIOSInfo->TVModeValid = VT1621ModeValid; - pBIOSInfo->TVModeI2C = VT1621ModeI2C; - pBIOSInfo->TVModeCrtc = VT1621ModeCrtc; - pBIOSInfo->TVPower = VT1621Power; - pBIOSInfo->TVModes = VT1621Modes; - pBIOSInfo->TVPrintRegs = VT162xPrintRegs; - pBIOSInfo->TVNumRegs = 0x68; - break; - case VIA_VT1622: - pBIOSInfo->TVSave = VT162xSave; - pBIOSInfo->TVRestore = VT162xRestore; - pBIOSInfo->TVDACSense = VT1622DACSense; - pBIOSInfo->TVModeValid = VT1622ModeValid; - pBIOSInfo->TVModeI2C = VT1622ModeI2C; - pBIOSInfo->TVModeCrtc = VT1622ModeCrtc; - pBIOSInfo->TVPower = VT1622Power; - pBIOSInfo->TVModes = VT1622Modes; - pBIOSInfo->TVPrintRegs = VT162xPrintRegs; - pBIOSInfo->TVNumRegs = 0x68; - break; - case VIA_VT1623: - pBIOSInfo->TVSave = VT162xSave; - pBIOSInfo->TVRestore = VT162xRestore; - pBIOSInfo->TVDACSense = VT1622DACSense; - pBIOSInfo->TVModeValid = VT1622ModeValid; - pBIOSInfo->TVModeI2C = VT1622ModeI2C; - pBIOSInfo->TVModeCrtc = VT1622ModeCrtc; - pBIOSInfo->TVPower = VT1622Power; - pBIOSInfo->TVModes = VT1623Modes; - pBIOSInfo->TVPrintRegs = VT162xPrintRegs; - pBIOSInfo->TVNumRegs = 0x6C; - break; - case VIA_VT1625: - pBIOSInfo->TVSave = VT162xSave; - pBIOSInfo->TVRestore = VT162xRestore; - pBIOSInfo->TVDACSense = VT1625DACSense; - pBIOSInfo->TVModeValid = VT1625ModeValid; - pBIOSInfo->TVModeI2C = VT1622ModeI2C; - pBIOSInfo->TVModeCrtc = VT1622ModeCrtc; - pBIOSInfo->TVPower = VT1625Power; - pBIOSInfo->TVModes = VT1625Modes; - pBIOSInfo->TVPrintRegs = VT162xPrintRegs; - pBIOSInfo->TVNumRegs = 0x6C; - break; - default: - break; + case VIA_VT1621: + pBIOSInfo->TVSave = VT162xSave; + pBIOSInfo->TVRestore = VT162xRestore; + pBIOSInfo->TVDACSense = VT1621DACSense; + pBIOSInfo->TVModeValid = VT1621ModeValid; + pBIOSInfo->TVModeI2C = VT1621ModeI2C; + pBIOSInfo->TVModeCrtc = VT1621ModeCrtc; + pBIOSInfo->TVPower = VT1621Power; + pBIOSInfo->TVModes = VT1621Modes; + pBIOSInfo->TVPrintRegs = VT162xPrintRegs; + pBIOSInfo->TVNumRegs = 0x68; + break; + case VIA_VT1622: + pBIOSInfo->TVSave = VT162xSave; + pBIOSInfo->TVRestore = VT162xRestore; + pBIOSInfo->TVDACSense = VT1622DACSense; + pBIOSInfo->TVModeValid = VT1622ModeValid; + pBIOSInfo->TVModeI2C = VT1622ModeI2C; + pBIOSInfo->TVModeCrtc = VT1622ModeCrtc; + pBIOSInfo->TVPower = VT1622Power; + pBIOSInfo->TVModes = VT1622Modes; + pBIOSInfo->TVPrintRegs = VT162xPrintRegs; + pBIOSInfo->TVNumRegs = 0x68; + break; + case VIA_VT1623: + pBIOSInfo->TVSave = VT162xSave; + pBIOSInfo->TVRestore = VT162xRestore; + pBIOSInfo->TVDACSense = VT1622DACSense; + pBIOSInfo->TVModeValid = VT1622ModeValid; + pBIOSInfo->TVModeI2C = VT1622ModeI2C; + pBIOSInfo->TVModeCrtc = VT1622ModeCrtc; + pBIOSInfo->TVPower = VT1622Power; + pBIOSInfo->TVModes = VT1623Modes; + pBIOSInfo->TVPrintRegs = VT162xPrintRegs; + pBIOSInfo->TVNumRegs = 0x6C; + break; + case VIA_VT1625: + pBIOSInfo->TVSave = VT162xSave; + pBIOSInfo->TVRestore = VT162xRestore; + pBIOSInfo->TVDACSense = VT1625DACSense; + pBIOSInfo->TVModeValid = VT1625ModeValid; + pBIOSInfo->TVModeI2C = VT1622ModeI2C; + pBIOSInfo->TVModeCrtc = VT1622ModeCrtc; + pBIOSInfo->TVPower = VT1625Power; + pBIOSInfo->TVModes = VT1625Modes; + pBIOSInfo->TVPrintRegs = VT162xPrintRegs; + pBIOSInfo->TVNumRegs = 0x6C; + break; + default: + break; } } Index: src/via_vbe.c =================================================================== --- src/via_vbe.c (revision 487) +++ src/via_vbe.c (revision 553) @@ -21,10 +21,12 @@ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. */ + /* + * VBE Mode setting. * - * VBE Mode setting - * + * The functions were more or less taken from the vesa driver. + * They were added to support BIOS modes directly. */ #ifdef HAVE_CONFIG_H @@ -36,11 +38,8 @@ #include "vbe.h" #include "vbeModes.h" -#define R16(v) ((v) & 0xffff) +#define R16(v) ((v) & 0xffff) -/* - * Functions more or less stolen from the vesa driver. Added to support BIOS modes directly. - */ void ViaVbeAdjustFrame(int scrnIndex, int x, int y, int flags) @@ -49,11 +48,13 @@ VBESetDisplayStart(pVia->pVbe, x, y, TRUE); } + /* - * Default values for pInt10 + * Default values for pInt10. */ -static void ViaVbeInitInt10(vbeInfoPtr pVbe) { - +static void +ViaVbeInitInt10(vbeInfoPtr pVbe) +{ pVbe->pInt10->ax = 0x4F14; pVbe->pInt10->cx = 0; pVbe->pInt10->dx = 0; @@ -61,38 +62,37 @@ pVbe->pInt10->num = 0x10; } -static int ViaVbeGetRefreshRateIndex(int maxRefresh) { +static int +ViaVbeGetRefreshRateIndex(int maxRefresh) +{ + int rri = 0; - int rri ; - rri = 0 ; - if (maxRefresh >= 120) { - rri = 10; + rri = 10; } else if (maxRefresh >= 100) { - rri = 9; + rri = 9; } else if (maxRefresh >= 85) { - rri = 7; + rri = 7; } else if (maxRefresh >= 75) { - rri = 5; + rri = 5; } else { - rri = 0; + rri = 0; } - return rri ; + return rri; } -/* - * - */ -static int ViaVbeGetActiveDevices(ScrnInfoPtr pScrn) { +static int +ViaVbeGetActiveDevices(ScrnInfoPtr pScrn) +{ + VIAPtr pVia = VIAPTR(pScrn); + VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; - VIAPtr pVia = VIAPTR(pScrn); - VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; - int activeDevices; - activeDevices = 0 ; - /* Set Active Device and Translate BIOS byte definition */ + activeDevices = 0; + + /* Set Active Device and translate BIOS byte definition. */ if (pBIOSInfo->CrtActive) activeDevices = 0x01; if (pBIOSInfo->PanelActive) @@ -100,19 +100,19 @@ if (pBIOSInfo->TVActive) activeDevices |= 0x04; - /* TODO: Add others devices */ + /* TODO: Add others devices. */ - return activeDevices ; - + return activeDevices; } /* - * Sets the requested mode, refresh rate and active devices + * Sets the requested mode, refresh rate and active devices. */ -static Bool ViaVbeSetActiveDevices( ScrnInfoPtr pScrn, int mode, int refresh ) { - - VIAPtr pVia = VIAPTR(pScrn); - VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; +static Bool +ViaVbeSetActiveDevices(ScrnInfoPtr pScrn, int mode, int refresh) +{ + VIAPtr pVia = VIAPTR(pScrn); + VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; vbeInfoPtr pVbe = pVia->pVbe; ViaVbeInitInt10(pVbe); @@ -121,24 +121,26 @@ pVbe->pInt10->dx = mode & 0x1FF; pVbe->pInt10->di = ViaVbeGetRefreshRateIndex(refresh); - DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "ViaVbeSetActiveDevices mode: %x, refresh: %d active devices: 0x%2x\n", - mode, refresh, pVbe->pInt10->cx )); + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaVbeSetActiveDevices " + "mode: %x, refresh: %d active devices: 0x%2x\n", + mode, refresh, pVbe->pInt10->cx)); xf86ExecX86int10(pVbe->pInt10); + if (pVbe->pInt10->ax != 0x4F) - return FALSE ; - + return FALSE; + return TRUE; } /* - * Sets the panel mode (expand or center) + * Sets the panel mode (expand or center). */ -static Bool ViaVbeSetPanelMode(ScrnInfoPtr pScrn, Bool expand) { - - VIAPtr pVia = VIAPTR(pScrn); - VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; +static Bool +ViaVbeSetPanelMode(ScrnInfoPtr pScrn, Bool expand) +{ + VIAPtr pVia = VIAPTR(pScrn); + VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; vbeInfoPtr pVbe = pVia->pVbe; DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaVbeSetPanelMode\n")); @@ -146,7 +148,7 @@ ViaVbeInitInt10(pVbe); pVbe->pInt10->ax = 0x4F14; pVbe->pInt10->bx = 0x0306; - pVbe->pInt10->cx = 0x80 | expand; + pVbe->pInt10->cx = 0x80 | expand; xf86ExecX86int10(pVbe->pInt10); @@ -159,8 +161,8 @@ static Bool ViaVbeSetRefresh(ScrnInfoPtr pScrn, int maxRefresh) { - VIAPtr pVia = VIAPTR(pScrn); - VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; + VIAPtr pVia = VIAPTR(pScrn); + VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaVbeSetRefresh\n")); vbeInfoPtr pVbe = pVia->pVbe; @@ -191,50 +193,50 @@ { VIAPtr pVia; VbeModeInfoData *data; + pVia = VIAPTR(pScrn); - VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; + VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; int mode; int refreshRate; pVia->OverlaySupported = FALSE; - data = (VbeModeInfoData*)pMode->Private; + data = (VbeModeInfoData *) pMode->Private; mode = data->mode | (1 << 15); - /* enable linear addressing */ + /* Enable linear addressing. */ mode |= 1 << 14; if (data->block) { refreshRate = data->block->RefreshRate; } else { refreshRate = VBE_DEFAULT_REFRESH; - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "Unable to determine the refresh rate, using %.2f. " - "Please check your configuration.\n", refreshRate/100.); + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, + "Unable to determine the refresh rate, using %.2f. " + "Please check your configuration.\n", refreshRate / 100.); } - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Trying VBE Mode %dx%d (0x%x) Refresh %.2f:\n", - (int) data->data->XResolution, - (int) data->data->YResolution, - mode & ~(1 << 11), (float) refreshRate/100.); + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "Trying VBE Mode %dx%d (0x%x) Refresh %.2f:\n", + (int)data->data->XResolution, (int)data->data->YResolution, + mode & ~(1 << 11), (float)refreshRate / 100.); if (pVia->useLegacyVBE) { - ViaVbeSetRefresh(pScrn, refreshRate/100); + ViaVbeSetRefresh(pScrn, refreshRate / 100); if (VBESetVBEMode(pVia->pVbe, mode, data->block) == FALSE) { xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VBESetVBEMode failed"); if ((data->block || (data->mode & (1 << 11))) && VBESetVBEMode(pVia->pVbe, (mode & ~(1 << 11)), NULL) == TRUE) { - /* Some cards do not like setting the clock. - */ - xf86ErrorF("...but worked OK without customized refresh and dotclock.\n"); - xfree(data->block); - data->block = NULL; + /* Some cards do not like setting the clock. */ + xf86ErrorF("...but worked OK without customized " + "refresh and dotclock.\n"); + xfree(data->block); + data->block = NULL; data->mode &= ~(1 << 11); - } - else { + } else { ErrorF("\n"); xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Set VBE Mode failed!\n"); return (FALSE); @@ -243,29 +245,31 @@ } else { if (pBIOSInfo->PanelActive && !pVia->useLegacyVBE) { - /* - * FIXME: should we always set the panel expansion? - * does it depend on the resolution? - */ + /* + * FIXME: Should we always set the panel expansion? + * Does it depend on the resolution? + */ if (!ViaVbeSetPanelMode(pScrn, !pBIOSInfo->Center)) { - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "Unable to set the panel mode.\n"); - } + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, + "Unable to set the panel mode.\n"); + } } data->mode &= ~(1 << 11); if (VBESetVBEMode(pVia->pVbe, data->mode, NULL) == FALSE) { xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Set VBE Mode failed.\n"); - return (FALSE); - } + return (FALSE); + } - if (!ViaVbeSetActiveDevices(pScrn, data->mode, refreshRate/100)) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Unable to set the active devices.\n"); - return (FALSE); - } + if (!ViaVbeSetActiveDevices(pScrn, data->mode, refreshRate / 100)) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "Unable to set the active devices.\n"); + return (FALSE); + } } if (data->data->XResolution != pScrn->displayWidth) - VBESetLogicalScanline(pVia->pVbe, pScrn->displayWidth); + VBESetLogicalScanline(pVia->pVbe, pScrn->displayWidth); pScrn->vtSema = TRUE; @@ -276,132 +280,131 @@ ViaVbeSaveRestore(ScrnInfoPtr pScrn, vbeSaveRestoreFunction function) { VIAPtr pVia = VIAPTR(pScrn); - vgaHWPtr hwp = VGAHWPTR(pScrn); + vgaHWPtr hwp = VGAHWPTR(pScrn); - DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,"ViaVbeSaveRestore\n")); + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaVbeSaveRestore\n")); if ((MODE_QUERY < 0) || (function > MODE_RESTORE)) - return (FALSE); + return (FALSE); - if (function == MODE_SAVE) { + if (function == MODE_SAVE) pVia->SavedReg.SR1A = hwp->readSeq(hwp, 0x1A); - } - /* Query amount of memory to save state */ + /* Query amount of memory to save state. */ if ((function == MODE_QUERY) || - ((function == MODE_SAVE) && (pVia->vbeMode.state == NULL))) { + ((function == MODE_SAVE) && (pVia->vbeMode.state == NULL))) { - /* Make sure we save at least this information in case of failure */ - (void)VBEGetVBEMode(pVia->pVbe, &(pVia->vbeMode.stateMode)); + /* Make sure we save at least this information in case of failure. */ + (void)VBEGetVBEMode(pVia->pVbe, &(pVia->vbeMode.stateMode)); - if (pVia->vbeMode.major > 1) { - - if (!VBESaveRestore(pVia->pVbe, function, - (pointer) &(pVia->vbeMode.state), - &(pVia->vbeMode.stateSize), - &(pVia->vbeMode.statePage))) { - xf86DrvMsg(pScrn->scrnIndex, X_WARNING,"VBESaveRestore failed\n"); - return FALSE; - } - - } + if (pVia->vbeMode.major > 1) { + if (!VBESaveRestore(pVia->pVbe, function, + (pointer) & (pVia->vbeMode.state), + &(pVia->vbeMode.stateSize), + &(pVia->vbeMode.statePage))) { + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, + "VBESaveRestore failed\n"); + return FALSE; + } + } } - /* Save/Restore Super VGA state */ + /* Save/Restore Super VGA state. */ if (function != MODE_QUERY) { Bool retval = TRUE; - if (pVia->vbeMode.major > 1) { - if (function == MODE_RESTORE) - memcpy(pVia->vbeMode.state, pVia->vbeMode.pstate, pVia->vbeMode.stateSize); + if (pVia->vbeMode.major > 1) { + if (function == MODE_RESTORE) + memcpy(pVia->vbeMode.state, pVia->vbeMode.pstate, + pVia->vbeMode.stateSize); - if ((retval = VBESaveRestore(pVia->pVbe, function, - (pointer) &(pVia->vbeMode.state), - &(pVia->vbeMode.stateSize), - &(pVia->vbeMode.statePage))) - && (function == MODE_SAVE)) { - /* don't rely on the memory not being touched */ - if (pVia->vbeMode.pstate == NULL) - pVia->vbeMode.pstate = xalloc(pVia->vbeMode.stateSize); - memcpy(pVia->vbeMode.pstate, pVia->vbeMode.state, pVia->vbeMode.stateSize); - } - } + if ((retval = VBESaveRestore(pVia->pVbe, function, + (pointer) & (pVia->vbeMode.state), + &(pVia->vbeMode.stateSize), + &(pVia->vbeMode.statePage))) + && (function == MODE_SAVE)) { + /* Do not rely on the memory not being touched. */ + if (pVia->vbeMode.pstate == NULL) + pVia->vbeMode.pstate = xalloc(pVia->vbeMode.stateSize); + memcpy(pVia->vbeMode.pstate, pVia->vbeMode.state, + pVia->vbeMode.stateSize); + } + } - if (function == MODE_RESTORE) { - if (!VBESetVBEMode(pVia->pVbe, pVia->vbeMode.stateMode, NULL)) { - xf86DrvMsg(pScrn->scrnIndex, X_WARNING,"VBESetVBEMode failed\n"); - } - } + if (function == MODE_RESTORE) { + if (!VBESetVBEMode(pVia->pVbe, pVia->vbeMode.stateMode, NULL)) { + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, + "VBESetVBEMode failed\n"); + } + } - if (!retval) - return (FALSE); - + if (!retval) + return (FALSE); } return (TRUE); } -Bool +Bool ViaVbeModePreInit(ScrnInfoPtr pScrn) { VIAPtr pVia = VIAPTR(pScrn); - VbeInfoBlock *vbe; + VbeInfoBlock *vbe; VbeModeInfoBlock *vbeMode; - DisplayModePtr pMode; + DisplayModePtr pMode; int i; memset(&(pVia->vbeMode), 0, sizeof(ViaVbeModeInfo)); - xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "Searching for matching VESA mode(s):\n"); + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "Searching for matching VESA mode(s):\n"); if ((vbe = VBEGetVBEInfo(pVia->pVbe)) == NULL) { - xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "VBEGetVBEInfo failed\n"); - return FALSE; + xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VBEGetVBEInfo failed\n"); + return FALSE; } - pVia->vbeMode.major = (unsigned) (vbe->VESAVersion >> 8); + pVia->vbeMode.major = (unsigned)(vbe->VESAVersion >> 8); pVia->vbeMode.minor = vbe->VESAVersion & 0xff; - pScrn->modePool = VBEGetModePool (pScrn, pVia->pVbe, vbe, V_MODETYPE_VBE); + pScrn->modePool = VBEGetModePool(pScrn, pVia->pVbe, vbe, V_MODETYPE_VBE); if (pScrn->modePool == NULL) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "No matching modes\n"); - return FALSE; + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "No matching modes\n"); + return FALSE; } VBESetModeNames(pScrn->modePool); - i = VBEValidateModes(pScrn, NULL, pScrn->display->modes, - NULL, NULL, 0, 2048, 1, 0, 2048, - pScrn->display->virtualX, - pScrn->display->virtualY, - pScrn->videoRam, LOOKUP_BEST_REFRESH); + i = VBEValidateModes(pScrn, NULL, pScrn->display->modes, + NULL, NULL, 0, 2048, 1, 0, 2048, + pScrn->display->virtualX, + pScrn->display->virtualY, + pScrn->videoRam, LOOKUP_BEST_REFRESH); - if (i <= 0) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "No valid modes.\n"); - return (FALSE); + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "No valid modes.\n"); + return (FALSE); } VBESetModeParameters(pScrn, pVia->pVbe); xf86PruneDriverModes(pScrn); -/* +#if 0 pMode = pScrn->modes; do { - vbeMode = ((VbeModeInfoData*)pMode->Private)->data; - pMode = pMode->next; + vbeMode = ((VbeModeInfoData *) pMode->Private)->data; + pMode = pMode->next; } while (pMode != NULL && pMode != pScrn->modes); -*/ +#endif return TRUE; } -static int ViaVbePanelPower(vbeInfoPtr pVbe, int mode) +static int +ViaVbePanelPower(vbeInfoPtr pVbe, int mode) { pVbe->pInt10->num = 0x10; - pVbe->pInt10->ax = 0x5F54; + pVbe->pInt10->ax = 0x5F54; pVbe->pInt10->bx = (mode) ? 0x00 : 0x01; xf86ExecX86int10(pVbe->pInt10); @@ -409,19 +412,19 @@ return (R16(pVbe->pInt10->ax) == 0x015f); } -#if 0 +#if 0 /* * FIXME: This might be useful in the future. Otherwise feel free to remove. - * if mode=1 sets the panel in a low power, low performance state. - * if mode=0 high performance. + * If mode=1, it sets the panel in a low-power, low-performance state; + * if mode=0, then high performance. */ - -static int ViaVbePanelLowPower(vbeInfoPtr pVbe, int mode) +static int +ViaVbePanelLowPower(vbeInfoPtr pVbe, int mode) { pVbe->pInt10->num = 0x10; - pVbe->pInt10->ax = 0x5F60; + pVbe->pInt10->ax = 0x5F60; pVbe->pInt10->bx = (mode) ? 0x01 : 0x00; - + xf86ExecX86int10(pVbe->pInt10); return (R16(pVbe->pInt10->ax) == 0x015f); @@ -432,20 +435,19 @@ ViaVbeDoDPMS(ScrnInfoPtr pScrn, int mode) { VIAPtr pVia = VIAPTR(pScrn); - VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; + VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; - - if (pBIOSInfo->PanelActive) + if (pBIOSInfo->PanelActive) ViaVbePanelPower(pVia->pVbe, (mode == DPMSModeOn)); - VBEDPMSSet(pVia->pVbe,mode); + VBEDPMSSet(pVia->pVbe, mode); } void ViaVbeDPMS(ScrnInfoPtr pScrn, int mode, int flags) { - if (!pScrn->vtSema) - return; - + if (!pScrn->vtSema) + return; + ViaVbeDoDPMS(pScrn, mode); } Index: src/via_vgahw.c =================================================================== --- src/via_vgahw.c (revision 487) +++ src/via_vgahw.c (revision 553) @@ -22,10 +22,8 @@ */ /* - * Wrap around xf86 vgaHW - * Provide general IO calls too as they are not part of the vgaHW implementation - * It's a bit daft to provide this short stuff in a seperate file, - * but then again, we'd only complicate matters in already complicated files. + * Wrappers around xf86 vgaHW functions. + * And some generic IO calls lacking in the current vgaHW implementation. */ #ifdef HAVE_CONFIG_H @@ -38,87 +36,61 @@ #include "via_driver.h" /* for HAVE_DEBUG */ #include "via_vgahw.h" -/* - * The current vgaHW implementation lacks generic IO - * - */ -/* - * - */ -static -CARD8 +static CARD8 ViaVgahwIn(vgaHWPtr hwp, int address) { if (hwp->MMIOBase) - return MMIO_IN8(hwp->MMIOBase, hwp->MMIOOffset + address); + return MMIO_IN8(hwp->MMIOBase, hwp->MMIOOffset + address); else - return inb(hwp->PIOOffset + address); + return inb(hwp->PIOOffset + address); } -/* - * - */ -static -void +static void ViaVgahwOut(vgaHWPtr hwp, int address, CARD8 value) { if (hwp->MMIOBase) - MMIO_OUT8(hwp->MMIOBase, hwp->MMIOOffset + address, value); + MMIO_OUT8(hwp->MMIOBase, hwp->MMIOOffset + address, value); else - outb(hwp->PIOOffset + address, value); + outb(hwp->PIOOffset + address, value); } /* - * indexed. + * An indexed read. */ -static -CARD8 -ViaVgahwRead(vgaHWPtr hwp, int indexaddress, CARD8 index, - int valueaddress) +static CARD8 +ViaVgahwRead(vgaHWPtr hwp, int indexaddress, CARD8 index, int valueaddress) { ViaVgahwOut(hwp, indexaddress, index); return ViaVgahwIn(hwp, valueaddress); } /* - * indexed. + * An indexed write. */ void ViaVgahwWrite(vgaHWPtr hwp, int indexaddress, CARD8 index, - int valueaddress, CARD8 value) + int valueaddress, CARD8 value) { ViaVgahwOut(hwp, indexaddress, index); ViaVgahwOut(hwp, valueaddress, value); } -/* - * This code makes a big change in readability, allows one to clearly - * formulate what is changed. - * - */ -/* - * - */ -void +void ViaVgahwMask(vgaHWPtr hwp, int indexaddress, CARD8 index, - int valueaddress, CARD8 value, CARD8 mask) + int valueaddress, CARD8 value, CARD8 mask) { CARD8 tmp; tmp = ViaVgahwRead(hwp, indexaddress, index, valueaddress); - tmp &= ~mask; tmp |= (value & mask); - + ViaVgahwWrite(hwp, indexaddress, index, valueaddress, tmp); } -/* - * - */ -void +void ViaCrtcMask(vgaHWPtr hwp, CARD8 index, CARD8 value, CARD8 mask) { CARD8 tmp; @@ -130,10 +102,7 @@ hwp->writeCrtc(hwp, index, tmp); } -/* - * - */ -void +void ViaSeqMask(vgaHWPtr hwp, CARD8 index, CARD8 value, CARD8 mask) { CARD8 tmp; @@ -145,10 +114,7 @@ hwp->writeSeq(hwp, index, tmp); } -/* - * - */ -void +void ViaGrMask(vgaHWPtr hwp, CARD8 index, CARD8 value, CARD8 mask) { CARD8 tmp; @@ -160,35 +126,40 @@ hwp->writeGr(hwp, index, tmp); } -/* - * - */ + #ifdef HAVE_DEBUG void ViaVgahwPrint(vgaHWPtr hwp) { int i; - xf86DrvMsg(hwp->pScrn->scrnIndex, X_INFO, "Printing VGA Sequence registers:\n"); + + xf86DrvMsg(hwp->pScrn->scrnIndex, X_INFO, "VGA Sequence registers:\n"); for (i = 0x00; i < 0x80; i++) - xf86DrvMsg(hwp->pScrn->scrnIndex, X_INFO, "SR%02X: 0x%02X\n", i, hwp->readSeq(hwp, i)); + xf86DrvMsg(hwp->pScrn->scrnIndex, X_INFO, + "SR%02X: 0x%02X\n", i, hwp->readSeq(hwp, i)); - xf86DrvMsg(hwp->pScrn->scrnIndex, X_INFO, "Printing VGA CRTM/C registers:\n"); + xf86DrvMsg(hwp->pScrn->scrnIndex, X_INFO, "VGA CRTM/C registers:\n"); for (i = 0x00; i < 0x19; i++) - xf86DrvMsg(hwp->pScrn->scrnIndex, X_INFO, "CR%02X: 0x%02X\n", i, hwp->readCrtc(hwp, i)); + xf86DrvMsg(hwp->pScrn->scrnIndex, X_INFO, + "CR%02X: 0x%02X\n", i, hwp->readCrtc(hwp, i)); for (i = 0x33; i < 0xA3; i++) - xf86DrvMsg(hwp->pScrn->scrnIndex, X_INFO, "CR%02X: 0x%02X\n", i, hwp->readCrtc(hwp, i)); + xf86DrvMsg(hwp->pScrn->scrnIndex, X_INFO, + "CR%02X: 0x%02X\n", i, hwp->readCrtc(hwp, i)); - xf86DrvMsg(hwp->pScrn->scrnIndex, X_INFO, "Printing VGA Graphics registers:\n"); + xf86DrvMsg(hwp->pScrn->scrnIndex, X_INFO, "VGA Graphics registers:\n"); for (i = 0x00; i < 0x08; i++) - xf86DrvMsg(hwp->pScrn->scrnIndex, X_INFO, "GR%02X: 0x%02X\n", i, hwp->readGr(hwp, i)); + xf86DrvMsg(hwp->pScrn->scrnIndex, X_INFO, + "GR%02X: 0x%02X\n", i, hwp->readGr(hwp, i)); - xf86DrvMsg(hwp->pScrn->scrnIndex, X_INFO, "Printing VGA Attribute registers:\n"); + xf86DrvMsg(hwp->pScrn->scrnIndex, X_INFO, "VGA Attribute registers:\n"); for (i = 0x00; i < 0x14; i++) - xf86DrvMsg(hwp->pScrn->scrnIndex, X_INFO, "AR%02X: 0x%02X\n", i, hwp->readAttr(hwp, i)); - - xf86DrvMsg(hwp->pScrn->scrnIndex, X_INFO, "Printing VGA Miscellaneous register:\n"); - xf86DrvMsg(hwp->pScrn->scrnIndex, X_INFO, "Misc: 0x%02X\n", hwp->readMiscOut(hwp)); + xf86DrvMsg(hwp->pScrn->scrnIndex, X_INFO, + "AR%02X: 0x%02X\n", i, hwp->readAttr(hwp, i)); - xf86DrvMsg(hwp->pScrn->scrnIndex, X_INFO, "End of VGA Registers.\n"); + xf86DrvMsg(hwp->pScrn->scrnIndex, X_INFO, "VGA Miscellaneous register:\n"); + xf86DrvMsg(hwp->pScrn->scrnIndex, X_INFO, + "Misc: 0x%02X\n", hwp->readMiscOut(hwp)); + + xf86DrvMsg(hwp->pScrn->scrnIndex, X_INFO, "End of VGA registers.\n"); } #endif /* HAVE_DEBUG */ Index: src/via_i2c.c =================================================================== --- src/via_i2c.c (revision 487) +++ src/via_i2c.c (revision 553) @@ -22,8 +22,9 @@ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. */ + /* - * Implements three i2c busses through registers SR26, SR2c and SR31 + * Implements three i2c busses through registers SR26, SR2c, and SR31. */ #ifdef HAVE_CONFIG_H @@ -38,57 +39,48 @@ #define SDA_WRITE 0x10 #define SCL_WRITE 0x20 + /* - * * CRT I2C - * */ -/* - * - */ + static void -ViaI2C1PutBits(I2CBusPtr Bus, int clock, int data) +ViaI2C1PutBits(I2CBusPtr Bus, int clock, int data) { vgaHWPtr hwp = VGAHWPTR(xf86Screens[Bus->scrnIndex]); CARD8 value = 0x01; /* Enable */ - + if (clock) value |= SCL_WRITE; - + if (data) value |= SDA_WRITE; ViaSeqMask(hwp, 0x26, value, 0x01 | SCL_WRITE | SDA_WRITE); } -/* - * - */ static void ViaI2C1GetBits(I2CBusPtr Bus, int *clock, int *data) { vgaHWPtr hwp = VGAHWPTR(xf86Screens[Bus->scrnIndex]); CARD8 value = hwp->readSeq(hwp, 0x26); - + *clock = (value & SCL_READ) != 0; - *data = (value & SDA_READ) != 0; + *data = (value & SDA_READ) != 0; } -/* - * - */ static I2CBusPtr ViaI2CBus1Init(int scrnIndex) { I2CBusPtr pI2CBus = xf86CreateI2CBusRec(); - + DEBUG(xf86DrvMsg(scrnIndex, X_INFO, "ViaI2CBus1Init\n")); if (!pI2CBus) - return NULL; - - pI2CBus->BusName = "I2C bus 1"; - pI2CBus->scrnIndex = scrnIndex; + return NULL; + + pI2CBus->BusName = "I2C bus 1"; + pI2CBus->scrnIndex = scrnIndex; pI2CBus->I2CPutBits = ViaI2C1PutBits; pI2CBus->I2CGetBits = ViaI2C1GetBits; @@ -100,57 +92,48 @@ return pI2CBus; } + /* - * - * First data bus I2C: tends to have TV-encoders - * + * First data bus I2C: tends to have TV-encoders. */ -/* - * - */ + static void -ViaI2C2PutBits(I2CBusPtr Bus, int clock, int data) +ViaI2C2PutBits(I2CBusPtr Bus, int clock, int data) { vgaHWPtr hwp = VGAHWPTR(xf86Screens[Bus->scrnIndex]); CARD8 value = 0x01; /* Enable */ - + if (clock) value |= SCL_WRITE; - + if (data) value |= SDA_WRITE; ViaSeqMask(hwp, 0x31, value, 0x01 | SCL_WRITE | SDA_WRITE); } -/* - * - */ static void ViaI2C2GetBits(I2CBusPtr Bus, int *clock, int *data) { vgaHWPtr hwp = VGAHWPTR(xf86Screens[Bus->scrnIndex]); CARD8 value = hwp->readSeq(hwp, 0x31); - + *clock = (value & SCL_READ) != 0; - *data = (value & SDA_READ) != 0; + *data = (value & SDA_READ) != 0; } -/* - * - */ static I2CBusPtr ViaI2CBus2Init(int scrnIndex) { I2CBusPtr pI2CBus = xf86CreateI2CBusRec(); - + DEBUG(xf86DrvMsg(scrnIndex, X_INFO, "ViaI2cBus2Init\n")); if (!pI2CBus) - return NULL; - - pI2CBus->BusName = "I2C bus 2"; - pI2CBus->scrnIndex = scrnIndex; + return NULL; + + pI2CBus->BusName = "I2C bus 2"; + pI2CBus->scrnIndex = scrnIndex; pI2CBus->I2CPutBits = ViaI2C2PutBits; pI2CBus->I2CGetBits = ViaI2C2GetBits; @@ -162,15 +145,12 @@ return pI2CBus; } + /* - * A third I2C bus implemented by a few IO pins. + * A third I2C bus is implemented by a few IO pins. * Requires higher level functions to be used properly. - * Former via_gpioi2c. - * */ -/* - * - */ + static Bool ViaI2C3Start(I2CBusPtr b, int timeout) { @@ -187,9 +167,6 @@ return TRUE; } -/* - * - */ static Bool ViaI2C3Address(I2CDevPtr d, I2CSlaveAddr addr) { @@ -201,8 +178,7 @@ if (ViaI2C3Start(d->pI2CBus, d->StartTimeout)) { #endif if (b->I2CPutByte(d, addr & 0xFF)) { - if ((addr & 0xF8) != 0xF0 && - (addr & 0xFE) != 0x00) + if ((addr & 0xF8) != 0xF0 && (addr & 0xFE) != 0x00) return TRUE; if (b->I2CPutByte(d, (addr >> 8) & 0xFF)) @@ -215,9 +191,6 @@ return FALSE; } -/* - * - */ static void ViaI2C3Stop(I2CDevPtr d) { @@ -229,7 +202,7 @@ ViaSeqMask(hwp, 0x2C, 0x20, 0x20); b->I2CUDelay(b, b->HoldTime); - + ViaSeqMask(hwp, 0x2C, 0x10, 0x10); b->I2CUDelay(b, b->HoldTime); @@ -237,9 +210,6 @@ b->I2CUDelay(b, b->HoldTime); } -/* - * - */ static void ViaI2C3PutBit(I2CBusPtr b, Bool sda, int timeout) { @@ -249,31 +219,28 @@ ViaSeqMask(hwp, 0x2C, 0x50, 0x50); else ViaSeqMask(hwp, 0x2C, 0x40, 0x50); - b->I2CUDelay(b, b->RiseFallTime/5); + b->I2CUDelay(b, b->RiseFallTime / 5); ViaSeqMask(hwp, 0x2C, 0xA0, 0xA0); b->I2CUDelay(b, b->HoldTime); b->I2CUDelay(b, timeout); ViaSeqMask(hwp, 0x2C, 0x80, 0xA0); - b->I2CUDelay(b, b->RiseFallTime/5); + b->I2CUDelay(b, b->RiseFallTime / 5); } -/* - * - */ static Bool ViaI2C3PutByte(I2CDevPtr d, I2CByte data) { I2CBusPtr b = d->pI2CBus; vgaHWPtr hwp = VGAHWPTR(xf86Screens[b->scrnIndex]); Bool ret; - int i; + int i; for (i = 7; i >= 0; i--) ViaI2C3PutBit(b, (data >> i) & 0x01, b->BitTimeout); - /* raise first to avoid false positives */ + /* Raise first to avoid false positives. */ ViaSeqMask(hwp, 0x2C, 0x50, 0x50); ViaSeqMask(hwp, 0x2C, 0x00, 0x40); b->I2CUDelay(b, b->RiseFallTime); @@ -290,9 +257,6 @@ return ret; } -/* - * - */ static Bool ViaI2C3GetBit(I2CBusPtr b, int timeout) { @@ -300,9 +264,9 @@ Bool ret; ViaSeqMask(hwp, 0x2c, 0x80, 0xC0); - b->I2CUDelay(b, b->RiseFallTime/5); - ViaSeqMask(hwp, 0x2c, 0xA0, 0xA0); - b->I2CUDelay(b, 3*b->HoldTime); + b->I2CUDelay(b, b->RiseFallTime / 5); + ViaSeqMask(hwp, 0x2c, 0xA0, 0xA0); + b->I2CUDelay(b, 3 * b->HoldTime); b->I2CUDelay(b, timeout); if (hwp->readSeq(hwp, 0x2C) & 0x04) @@ -312,20 +276,17 @@ ViaSeqMask(hwp, 0x2C, 0x80, 0xA0); b->I2CUDelay(b, b->HoldTime); - b->I2CUDelay(b, b->RiseFallTime/5); + b->I2CUDelay(b, b->RiseFallTime / 5); return ret; } -/* - * - */ static Bool -ViaI2C3GetByte(I2CDevPtr d, I2CByte *data, Bool last) +ViaI2C3GetByte(I2CDevPtr d, I2CByte * data, Bool last) { I2CBusPtr b = d->pI2CBus; vgaHWPtr hwp = VGAHWPTR(xf86Screens[b->scrnIndex]); - int i; + int i; *data = 0x00; @@ -333,34 +294,31 @@ if (ViaI2C3GetBit(b, b->BitTimeout)) *data |= 0x01 << i; - if (last) /* send NACK */ - ViaSeqMask(hwp, 0x2C, 0x50, 0x50); - else /* send ACK */ - ViaSeqMask(hwp, 0x2C, 0x40, 0x50); + if (last) /* send NACK */ + ViaSeqMask(hwp, 0x2C, 0x50, 0x50); + else /* send ACK */ + ViaSeqMask(hwp, 0x2C, 0x40, 0x50); ViaSeqMask(hwp, 0x2C, 0xA0, 0xA0); b->I2CUDelay(b, b->HoldTime); - + ViaSeqMask(hwp, 0x2C, 0x80, 0xA0); return TRUE; } -/* - * - */ static I2CBusPtr ViaI2CBus3Init(int scrnIndex) { I2CBusPtr pI2CBus = xf86CreateI2CBusRec(); - + DEBUG(xf86DrvMsg(scrnIndex, X_INFO, "ViaI2CBus3Init\n")); - + if (!pI2CBus) - return NULL; - - pI2CBus->BusName = "I2C bus 3"; - pI2CBus->scrnIndex = scrnIndex; + return NULL; + + pI2CBus->BusName = "I2C bus 3"; + pI2CBus->scrnIndex = scrnIndex; pI2CBus->I2CAddress = ViaI2C3Address; #ifdef X_NEED_I2CSTART pI2CBus->I2CStart = ViaI2C3Start; @@ -373,39 +331,33 @@ pI2CBus->BitTimeout = 10; pI2CBus->ByteTimeout = 10; pI2CBus->StartTimeout = 10; - + if (!xf86I2CBusInit(pI2CBus)) { - xf86DestroyI2CBusRec(pI2CBus, TRUE, FALSE); - return NULL; + xf86DestroyI2CBusRec(pI2CBus, TRUE, FALSE); + return NULL; } - + return pI2CBus; } + #ifdef HAVE_DEBUG -/* - * - */ static void ViaI2CScan(I2CBusPtr Bus) { CARD8 i; xf86DrvMsg(Bus->scrnIndex, X_INFO, "ViaI2CScan: Scanning %s\n", - Bus->BusName); + Bus->BusName); for (i = 0x10; i < 0xF0; i += 2) - if (xf86I2CProbeAddress(Bus, i)) - xf86DrvMsg(Bus->scrnIndex, X_PROBED, "Found slave on %s " - "- 0x%02X\n", Bus->BusName, i); + if (xf86I2CProbeAddress(Bus, i)) + xf86DrvMsg(Bus->scrnIndex, X_PROBED, "Found slave on %s " + "- 0x%02X\n", Bus->BusName, i); } -#endif +#endif /* HAVE_DEBUG */ -/* - * - * - * - */ + void ViaI2CInit(ScrnInfoPtr pScrn) { @@ -419,10 +371,10 @@ #ifdef HAVE_DEBUG if (pVia->I2CScan) { - if (pVia->pI2CBus2) - ViaI2CScan(pVia->pI2CBus2); - if (pVia->pI2CBus3) - ViaI2CScan(pVia->pI2CBus3); + if (pVia->pI2CBus2) + ViaI2CScan(pVia->pI2CBus2); + if (pVia->pI2CBus3) + ViaI2CScan(pVia->pI2CBus3); } #endif } Index: src/via_xvmc.c =================================================================== --- src/via_xvmc.c (revision 487) +++ src/via_xvmc.c (revision 553) @@ -1,6 +1,4 @@ -/***************************************************************************** - * VIA Unichrome XvMC extension X server driver. - * +/* * Copyright (c) 2004 The Unichrome Project. All rights reserved. * Copyright (c) 2000 Intel Corporation. All rights reserved. * @@ -65,13 +63,13 @@ #define MAKE_ATOM(a) MakeAtom(a, strlen(a), TRUE) + /* - * List Attributes for the XvMC extension to handle: - * As long as the attribute is supported by the Xv adaptor, it needs only to - * be added here to be supported also by XvMC. + * List of attributes for the XvMC extension to handle. + * As long as the attribute is supported by the Xv adaptor, it needs only + * to be added here to be supported also by XvMC. * Currently, only colorkey seems to be supported by Xv for Putimage. */ - static char *attrXvMC[VIA_NUM_XVMC_ATTRIBUTES] = { "XV_COLORKEY", "XV_AUTOPAINT_COLORKEY", "XV_BRIGHTNESS", @@ -84,7 +82,6 @@ /* * Xv Port private structure for XvMC. */ - typedef struct { unsigned ctxDisplaying; @@ -97,78 +94,74 @@ PutImageFuncPtr PutImage; } ViaXvMCXVPriv; -/* - * Proposed XvMC via driver extension: - */ - +/* Proposed XvMC VIA driver extension. */ #define XVMC_VLD 0x0020000 -/* - * Function declarations. - */ +/* Function declarations. */ static int ViaXvMCCreateContext(ScrnInfoPtr pScrn, XvMCContextPtr pContext, - int *num_priv, INT32 ** priv); + int *num_priv, INT32 ** priv); static void ViaXvMCDestroyContext(ScrnInfoPtr pScrn, XvMCContextPtr pContext); static int ViaXvMCCreateSurface(ScrnInfoPtr pScrn, XvMCSurfacePtr pSurf, - int *num_priv, INT32 ** priv); + int *num_priv, INT32 ** priv); static void ViaXvMCDestroySurface(ScrnInfoPtr pScrn, XvMCSurfacePtr pSurf); static int ViaXvMCCreateSubpicture(ScrnInfoPtr pScrn, XvMCSubpicturePtr pSurf, - int *num_priv, INT32 ** priv); + int *num_priv, INT32 ** priv); static void ViaXvMCDestroySubpicture(ScrnInfoPtr pScrn, - XvMCSubpicturePtr pSubp); + XvMCSubpicturePtr pSubp); static int viaXvMCInterceptXvAttribute(ScrnInfoPtr pScrn, Atom attribute, - INT32 value, pointer data); + INT32 value, pointer data); static int viaXvMCInterceptPutImage(ScrnInfoPtr, short, short, short, short, - short, short, short, short, int, unsigned char *, short, short, Bool, - RegionPtr, pointer + short, short, short, short, int, + unsigned char *, short, short, Bool, + RegionPtr, pointer #ifdef USE_NEW_XVABI - , DrawablePtr + , DrawablePtr #endif -); + ); static int viaXvMCInterceptXvGetAttribute(ScrnInfoPtr pScrn, Atom attribute, - INT32 * value, pointer data); + INT32 * value, pointer data); + + /* - * Init and clean up the screen private parts of XvMC. + * Initialize and clean up the screen private parts of XvMC. */ - static void initViaXvMC(ViaXvMCPtr vXvMC) { unsigned i; for (i = 0; i < VIA_XVMC_MAX_CONTEXTS; ++i) { - vXvMC->contexts[i] = 0; - vXvMC->cPrivs[i] = 0; + vXvMC->contexts[i] = 0; + vXvMC->cPrivs[i] = 0; } for (i = 0; i < VIA_XVMC_MAX_SURFACES; ++i) { - vXvMC->surfaces[i] = 0; - vXvMC->sPrivs[i] = 0; + vXvMC->surfaces[i] = 0; + vXvMC->sPrivs[i] = 0; } - } static void cleanupViaXvMC(ViaXvMCPtr vXvMC, XF86VideoAdaptorPtr * XvAdaptors, - int XvAdaptorCount) + int XvAdaptorCount) { unsigned i; for (i = 0; i < VIA_XVMC_MAX_CONTEXTS; ++i) { - vXvMC->contexts[i] = 0; - if (vXvMC->cPrivs[i]) { - xfree(vXvMC->cPrivs[i]); - vXvMC->cPrivs[i] = 0; - } + vXvMC->contexts[i] = 0; + if (vXvMC->cPrivs[i]) { + xfree(vXvMC->cPrivs[i]); + vXvMC->cPrivs[i] = 0; + } } for (i = 0; i < VIA_XVMC_MAX_SURFACES; ++i) { - vXvMC->surfaces[i] = 0; - if (vXvMC->sPrivs[i]) { - xfree(vXvMC->sPrivs[i]); - vXvMC->sPrivs[i] = 0; - } + vXvMC->surfaces[i] = 0; + if (vXvMC->sPrivs[i]) { + xfree(vXvMC->sPrivs[i]); + vXvMC->sPrivs[i] = 0; + } } } @@ -192,6 +185,7 @@ return h * stride(w); } + static int yv12_subpicture_index_list[2] = { FOURCC_IA44, FOURCC_AI44 @@ -264,7 +258,7 @@ (XF86MCSurfaceInfoPtr) & Via_pga_mpg1_surface }; -/* List of subpicture types that we support */ +/* List of supported subpicture types. */ static XF86ImageRec ia44_subpicture = XVIMAGE_IA44; static XF86ImageRec ai44_subpicture = XVIMAGE_AI44; @@ -274,20 +268,19 @@ }; /* - * Fill in the device dependent adaptor record. + * Filling in the device dependent adaptor record. * This is named "VIA Video Overlay" because this code falls under the * XV extenstion, the name must match or it won't be used. * - * Surface and Subpicture - see above - * Function pointers to functions below + * For surface and subpicture, see above. + * The function pointers point to functions below. */ - static XF86MCAdaptorRec pAdapt = { - "XV_SWOV", /* name */ - 2, /* num_surfaces */ - ppSI, /* surfaces */ - 2, /* num_subpictures */ - Via_subpicture_list, /* subpictures */ + "XV_SWOV", /* name */ + 2, /* num_surfaces */ + ppSI, /* surfaces */ + 2, /* num_subpictures */ + Via_subpicture_list, /* subpictures */ (xf86XvMCCreateContextProcPtr) ViaXvMCCreateContext, (xf86XvMCDestroyContextProcPtr) ViaXvMCDestroyContext, (xf86XvMCCreateSurfaceProcPtr) ViaXvMCCreateSurface, @@ -297,11 +290,11 @@ }; static XF86MCAdaptorRec pAdapt_pga = { - "XV_SWOV", /* name */ - 2, /* num_surfaces */ - ppSI_pga, /* surfaces */ - 2, /* num_subpictures */ - Via_subpicture_list, /* subpictures */ + "XV_SWOV", /* name */ + 2, /* num_surfaces */ + ppSI_pga, /* surfaces */ + 2, /* num_subpictures */ + Via_subpicture_list, /* subpictures */ (xf86XvMCCreateContextProcPtr) ViaXvMCCreateContext, (xf86XvMCDestroyContextProcPtr) ViaXvMCDestroyContext, (xf86XvMCCreateSurfaceProcPtr) ViaXvMCCreateSurface, @@ -313,6 +306,7 @@ static XF86MCAdaptorPtr ppAdapt[1] = { (XF86MCAdaptorPtr) & pAdapt }; static XF86MCAdaptorPtr ppAdapt_pga[1] = { (XF86MCAdaptorPtr) & pAdapt_pga }; + static void mpegDisable(VIAPtr pVia, CARD32 val) { @@ -329,69 +323,70 @@ pVia->XvMCEnabled = 0; - if (!(pVia->Chipset == VIA_CLE266) && !(pVia->Chipset == VIA_K8M800) && - !(pVia->Chipset == VIA_PM800) && !(pVia->Chipset == VIA_VM800) && - !(pVia->Chipset == VIA_K8M890) && !(pVia->Chipset == VIA_P4M900) && - !(pVia->Chipset == VIA_P4M890)) { - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "[XvMC] Not supported on this chipset.\n"); - return; + if ((pVia->Chipset == VIA_KM400) || + (pVia->Chipset == VIA_CX700) || + (pVia->Chipset == VIA_K8M890) || + (pVia->Chipset == VIA_P4M900)) { + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, + "[XvMC] XvMC is not supported on this chipset.\n"); + return; } if (!pVia->directRenderingEnabled) { - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "[XvMC] Cannot use XvMC without DRI!\n"); - return; + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, + "[XvMC] Cannot use XvMC without DRI!\n"); + return; } if (((pVia->drmVerMajor <= 2) && (pVia->drmVerMinor < 4))) { - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "[XvMC] Kernel drm is not compatible with XvMC.\n"); - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "[XvMC] Kernel drm version: %d.%d.%d " - "and need at least version 2.4.0.\n", - pVia->drmVerMajor, pVia->drmVerMinor, pVia->drmVerPL); - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "[XvMC] Please update. Disabling XvMC.\n"); - return; + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, + "[XvMC] Kernel drm is not compatible with XvMC.\n"); + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, + "[XvMC] Kernel drm version is %d.%d.%d; " + "at least version 2.4.0 is needed.\n", + pVia->drmVerMajor, pVia->drmVerMinor, pVia->drmVerPL); + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, + "[XvMC] Please update. Disabling XvMC.\n"); + return; } vXvMC->mmioBase = pVia->registerHandle; if (drmAddMap(pVia->drmFD, - (drm_handle_t) pVia->FrameBufferBase, - pVia->videoRambytes, DRM_FRAME_BUFFER, 0, &(vXvMC->fbBase)) < 0) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "[XvMC] drmAddMap(FB) failed. Disabling XvMC.\n"); - return; + (drm_handle_t) pVia->FrameBufferBase, + pVia->videoRambytes, DRM_FRAME_BUFFER, 0, + &(vXvMC->fbBase)) < 0) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "[XvMC] drmAddMap(FB) failed. Disabling XvMC.\n"); + return; } initViaXvMC(vXvMC); - if (!xf86XvMCScreenInit(pScreen, 1, - (pVia->Chipset == VIA_PM800) ? ppAdapt_pga : ppAdapt)) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "[XvMC] XvMCScreenInit failed. Disabling XvMC.\n"); - drmRmMap(pVia->drmFD, vXvMC->fbBase); - return; + if (!xf86XvMCScreenInit(pScreen, 1, ((pVia->Chipset == VIA_PM800) + ? ppAdapt_pga : ppAdapt))) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "[XvMC] XvMCScreenInit failed. Disabling XvMC.\n"); + drmRmMap(pVia->drmFD, vXvMC->fbBase); + return; } #if (XvMCVersion > 1) || (XvMCRevision > 0) { - DRIInfoPtr pDRIInfo = pVia->pDRIInfo; + DRIInfoPtr pDRIInfo = pVia->pDRIInfo; - if (pVia->ChipId != PCI_CHIP_VT3259 && pVia->ChipId != PCI_CHIP_VT3364) { - xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "[XvMC] Registering chromeXvMC.\n"); - xf86XvMCRegisterDRInfo(pScreen, "chromeXvMC", pDRIInfo->busIdString, - VIAXVMC_MAJOR, VIAXVMC_MINOR, VIAXVMC_PL); - } else { - xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "[XvMC] Registering chromeXvMCPro.\n"); - xf86XvMCRegisterDRInfo(pScreen, "chromeXvMCPro", - pDRIInfo->busIdString, VIAXVMC_MAJOR, VIAXVMC_MINOR, - VIAXVMC_PL); - } - + if (pVia->ChipId != PCI_CHIP_VT3259 && + pVia->ChipId != PCI_CHIP_VT3364) { + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "[XvMC] Registering chromeXvMC.\n"); + xf86XvMCRegisterDRInfo(pScreen, "chromeXvMC", pDRIInfo->busIdString, + VIAXVMC_MAJOR, VIAXVMC_MINOR, VIAXVMC_PL); + } else { + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "[XvMC] Registering chromeXvMCPro.\n"); + xf86XvMCRegisterDRInfo(pScreen, "chromeXvMCPro", + pDRIInfo->busIdString, VIAXVMC_MAJOR, + VIAXVMC_MINOR, VIAXVMC_PL); + } } #endif @@ -402,37 +397,37 @@ XVMCLOCKPTR(saPriv, UNICHROME_LOCK_DECODER1)->lock = 0; xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "[XvMC] Initialized XvMC extension.\n"); + "[XvMC] Initialized XvMC extension.\n"); pVia->XvMCEnabled = 1; } void ViaCleanupXVMC(ScrnInfoPtr pScrn, XF86VideoAdaptorPtr * XvAdaptors, - int XvAdaptorCount) + int XvAdaptorCount) { VIAPtr pVia = VIAPTR(pScrn); ViaXvMCPtr vXvMC = &(pVia->xvmc); int i, j; if (pVia->XvMCEnabled) { - mpegDisable(pVia, 0); - drmRmMap(pVia->drmFD, vXvMC->mmioBase); - cleanupViaXvMC(vXvMC, XvAdaptors, XvAdaptorCount); + mpegDisable(pVia, 0); + drmRmMap(pVia->drmFD, vXvMC->mmioBase); + cleanupViaXvMC(vXvMC, XvAdaptors, XvAdaptorCount); } for (i = 0; i < XvAdaptorCount; ++i) { - for (j = 0; j < XvAdaptors[i]->nPorts; ++j) { - viaPortPrivPtr pPriv = XvAdaptors[i]->pPortPrivates[j].ptr; + for (j = 0; j < XvAdaptors[i]->nPorts; ++j) { + viaPortPrivPtr pPriv = XvAdaptors[i]->pPortPrivates[j].ptr; - if (pPriv->xvmc_priv) - xfree(pPriv->xvmc_priv); - } + if (pPriv->xvmc_priv) + xfree(pPriv->xvmc_priv); + } } pVia->XvMCEnabled = 0; } static int ViaXvMCCreateContext(ScrnInfoPtr pScrn, XvMCContextPtr pContext, - int *num_priv, INT32 ** priv) + int *num_priv, INT32 ** priv) { VIAPtr pVia = VIAPTR(pScrn); ViaXvMCPtr vXvMC = &(pVia->xvmc); @@ -449,46 +444,43 @@ sAPriv = (ViaXvMCSAreaPriv *) DRIGetSAREAPrivate(pScrn->pScreen); if (-1 == vx->xvmc_port) { - vx->xvmc_port = (vXvMC->activePorts++); - sAPriv->XvMCSubPicOn[vx->xvmc_port] = 0; - sAPriv->XvMCDisplaying[vx->xvmc_port] = 0; + vx->xvmc_port = (vXvMC->activePorts++); + sAPriv->XvMCSubPicOn[vx->xvmc_port] = 0; + sAPriv->XvMCDisplaying[vx->xvmc_port] = 0; } if (vXvMC->nContexts >= VIA_XVMC_MAX_CONTEXTS) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "[XvMC] ViaXvMCCreateContext: Out of contexts.\n"); - return BadAlloc; + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "[XvMC] ViaXvMCCreateContext: Out of contexts.\n"); + return BadAlloc; } *priv = xcalloc(1, sizeof(ViaXvMCCreateContextRec)); contextRec = (ViaXvMCCreateContextRec *) * priv; if (!*priv) { - *num_priv = 0; - return BadAlloc; + *num_priv = 0; + return BadAlloc; } *num_priv = sizeof(ViaXvMCCreateContextRec) >> 2; for (ctxNo = 0; ctxNo < VIA_XVMC_MAX_CONTEXTS; ++ctxNo) { - if (0 == vXvMC->contexts[ctxNo]) - break; + if (0 == vXvMC->contexts[ctxNo]) + break; } cPriv = (ViaXvMCContextPriv *) xcalloc(1, sizeof(ViaXvMCContextPriv)); if (!cPriv) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "[XvMC] ViaXvMCCreateContext: Unable to allocate memory!\n"); - xfree(*priv); - *num_priv = 0; - return BadAlloc; + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "[XvMC] ViaXvMCCreateContext: Unable to allocate memory!\n"); + xfree(*priv); + *num_priv = 0; + return BadAlloc; } - /* - * Export framebuffer and mmio to non-root clients. - */ - + /* Export framebuffer and mmio to non-root clients. */ contextRec->ctxNo = ctxNo; contextRec->xvmc_port = vx->xvmc_port; contextRec->fbOffset = vXvMC->fbBase; @@ -501,11 +493,11 @@ contextRec->minor = VIAXVMC_MINOR; contextRec->pl = VIAXVMC_PL; contextRec->initAttrs = vx->xvAttr; - contextRec->useAGP = pViaDRI->ringBufActive && - ((pVia->Chipset == VIA_CLE266) || - (pVia->Chipset == VIA_KM400) || - (pVia->Chipset == VIA_P4M900) || - (pVia->Chipset == VIA_PM800)); + contextRec->useAGP = (pViaDRI->ringBufActive && + ((pVia->Chipset == VIA_CLE266) || + (pVia->Chipset == VIA_KM400) || + (pVia->Chipset == VIA_PM800) || + (pVia->Chipset == VIA_P4M900))); contextRec->chipId = pVia->ChipId; contextRec->screen = pScrn->pScreen->myNum; contextRec->depth = pScrn->bitsPerPixel; @@ -520,7 +512,7 @@ static int ViaXvMCCreateSurface(ScrnInfoPtr pScrn, XvMCSurfacePtr pSurf, - int *num_priv, INT32 ** priv) + int *num_priv, INT32 ** priv) { VIAPtr pVia = VIAPTR(pScrn); ViaXvMCPtr vXvMC = &(pVia->xvmc); @@ -530,18 +522,18 @@ unsigned bufSize, yBufSize; if (VIA_XVMC_MAX_SURFACES == vXvMC->nSurfaces) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "[XvMC] ViaXvMCCreateSurface: Too many surfaces !\n"); - return BadAlloc; + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "[XvMC] ViaXvMCCreateSurface: Too many surfaces !\n"); + return BadAlloc; } sPriv = (ViaXvMCSurfacePriv *) xcalloc(1, sizeof(ViaXvMCSurfacePriv)); if (!sPriv) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "[XvMC] ViaXvMCCreateSurface: Unable to allocate memory!\n"); - *num_priv = 0; - return BadAlloc; + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "[XvMC] ViaXvMCCreateSurface: Unable to allocate memory!\n"); + *num_priv = 0; + return BadAlloc; } numBuffers = 1; @@ -552,19 +544,19 @@ * lib will detect the number of buffers allocated and determine the * flipping method from that. */ -#if 0 /* Not enabled yet. */ +#if 0 /* Not enabled yet. */ switch (pVia->ChipSet) { - case VIA_CLE266: - switch (pVia->ChipRev) { - case 0x10: /* CLE266 C0 only? or all C? */ - numBuffers = 2; - break; - default: - break; - } - break; - default: - break; + case VIA_CLE266: + switch (pVia->ChipRev) { + case 0x10: /* CLE266 C0 only? Or all C? */ + numBuffers = 2; + break; + default: + break; + } + break; + default: + break; } #endif *num_priv = numBuffers + 2; @@ -572,16 +564,16 @@ *priv = (INT32 *) xcalloc(*num_priv, sizeof(INT32)); if (!*priv) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "[XvMC] ViaXvMCCreateSurface: Unable to allocate memory!\n"); - *num_priv = 0; - xfree(sPriv); - return BadAlloc; + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "[XvMC] ViaXvMCCreateSurface: Unable to allocate memory!\n"); + *num_priv = 0; + xfree(sPriv); + return BadAlloc; } for (srfNo = 0; srfNo < VIA_XVMC_MAX_SURFACES; ++srfNo) { - if (0 == vXvMC->sPrivs[srfNo]) - break; + if (0 == vXvMC->sPrivs[srfNo]) + break; } (*priv)[0] = srfNo; @@ -590,25 +582,25 @@ bufSize = size_yuv420(ctx->width, ctx->height); sPriv->memory_ref.pool = 0; if (VIAAllocLinear(&(sPriv->memory_ref), pScrn, - numBuffers * bufSize + 32)) { - xfree(*priv); - xfree(sPriv); - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "[XvMC] ViaXvMCCreateSurface: " - "Unable to allocate frambuffer memory!\n"); - return BadAlloc; + numBuffers * bufSize + 32)) { + xfree(*priv); + xfree(sPriv); + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "[XvMC] ViaXvMCCreateSurface: " + "Unable to allocate frambuffer memory!\n"); + return BadAlloc; } (*priv)[1] = numBuffers; (*priv)[2] = sPriv->offsets[0] = ALIGN_TO(sPriv->memory_ref.base, 32); for (i = 1; i < numBuffers; ++i) { - (*priv)[i + 2] = sPriv->offsets[i] = sPriv->offsets[i - 1] + bufSize; + (*priv)[i + 2] = sPriv->offsets[i] = sPriv->offsets[i - 1] + bufSize; } yBufSize = stride(ctx->width) * ctx->height; for (i = 0; i < numBuffers; ++i) { - memset((CARD8 *) (pVia->FBBase) + sPriv->offsets[i], 0, yBufSize); - memset((CARD8 *) (pVia->FBBase) + sPriv->offsets[i] + yBufSize, 0x80, - yBufSize >> 1); + memset((CARD8 *) (pVia->FBBase) + sPriv->offsets[i], 0, yBufSize); + memset((CARD8 *) (pVia->FBBase) + sPriv->offsets[i] + yBufSize, 0x80, + yBufSize >> 1); } vXvMC->sPrivs[srfNo] = sPriv; @@ -619,7 +611,7 @@ static int ViaXvMCCreateSubpicture(ScrnInfoPtr pScrn, XvMCSubpicturePtr pSubp, - int *num_priv, INT32 ** priv) + int *num_priv, INT32 ** priv) { VIAPtr pVia = VIAPTR(pScrn); ViaXvMCPtr vXvMC = &(pVia->xvmc); @@ -629,35 +621,35 @@ unsigned bufSize; if (VIA_XVMC_MAX_SURFACES == vXvMC->nSurfaces) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "[XvMC] ViaXvMCCreateSubpicture: Too many surfaces !\n"); - return BadAlloc; + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "[XvMC] ViaXvMCCreateSubpicture: Too many surfaces !\n"); + return BadAlloc; } sPriv = (ViaXvMCSurfacePriv *) xcalloc(1, sizeof(ViaXvMCSurfacePriv)); if (!sPriv) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "[XvMC] ViaXvMCCreateSubpicture: Unable to allocate memory!\n"); - *num_priv = 0; - return BadAlloc; + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "[XvMC] ViaXvMCCreateSubpicture:" + " Unable to allocate memory!\n"); + *num_priv = 0; + return BadAlloc; } *priv = (INT32 *) xcalloc(3, sizeof(INT32)); if (!*priv) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "[XvMC] ViaXvMCCreateSubpicture: Unable to allocate memory!\n"); - *num_priv = 0; - xfree(sPriv); - return BadAlloc; + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "[XvMC] ViaXvMCCreateSubpicture:" + " Unable to allocate memory!\n"); + *num_priv = 0; + xfree(sPriv); + return BadAlloc; } *num_priv = 2; for (srfNo = 0; srfNo < VIA_XVMC_MAX_SURFACES; ++srfNo) { - if (0 == vXvMC->sPrivs[srfNo]) - break; + if (0 == vXvMC->sPrivs[srfNo]) + break; } (*priv)[0] = srfNo; @@ -666,12 +658,11 @@ bufSize = size_xx44(ctx->width, ctx->height); sPriv->memory_ref.pool = 0; if (VIAAllocLinear(&(sPriv->memory_ref), pScrn, 1 * bufSize + 32)) { - xfree(*priv); - xfree(sPriv); - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "[XvMC] ViaXvMCCreateSubpicture: Unable to allocate " - "framebuffer memory!\n"); - return BadAlloc; + xfree(*priv); + xfree(sPriv); + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "[XvMC] ViaXvMCCreateSubpicture:" + " Unable to allocate framebuffer memory!\n"); + return BadAlloc; } (*priv)[1] = sPriv->offsets[0] = ALIGN_TO(sPriv->memory_ref.base, 32); @@ -694,23 +685,23 @@ ViaXvMCXVPriv *vx; for (i = 0; i < VIA_XVMC_MAX_CONTEXTS; i++) { - if (vXvMC->contexts[i] == pContext->context_id) { + if (vXvMC->contexts[i] == pContext->context_id) { - sAPriv = (ViaXvMCSAreaPriv *) DRIGetSAREAPrivate(pScrn->pScreen); - portPriv = (XvPortRecPrivatePtr) pContext->port_priv; - pPriv = (viaPortPrivPtr) portPriv->DevPriv.ptr; - vx = (ViaXvMCXVPriv *) pPriv->xvmc_priv; + sAPriv = (ViaXvMCSAreaPriv *) DRIGetSAREAPrivate(pScrn->pScreen); + portPriv = (XvPortRecPrivatePtr) pContext->port_priv; + pPriv = (viaPortPrivPtr) portPriv->DevPriv.ptr; + vx = (ViaXvMCXVPriv *) pPriv->xvmc_priv; - if ((i | VIA_XVMC_VALID) == vx->ctxDisplaying) { - vx->ctxDisplaying = 0; - } + if ((i | VIA_XVMC_VALID) == vx->ctxDisplaying) { + vx->ctxDisplaying = 0; + } - xfree(vXvMC->cPrivs[i]); - vXvMC->cPrivs[i] = 0; - vXvMC->nContexts--; - vXvMC->contexts[i] = 0; - return; - } + xfree(vXvMC->cPrivs[i]); + vXvMC->cPrivs[i] = 0; + vXvMC->nContexts--; + vXvMC->contexts[i] = 0; + return; + } } return; } @@ -728,24 +719,24 @@ ViaXvMCXVPriv *vx = (ViaXvMCXVPriv *) pPriv->xvmc_priv; for (i = 0; i < VIA_XVMC_MAX_SURFACES; i++) { - if (vXvMC->surfaces[i] == pSurf->surface_id) { + if (vXvMC->surfaces[i] == pSurf->surface_id) { - sAPriv = (ViaXvMCSAreaPriv *) DRIGetSAREAPrivate(pScrn->pScreen); - { - DRM_CAS_RESULT(__ret); - DRM_CAS(&(sAPriv->XvMCDisplaying[vx->xvmc_port]), - i | VIA_XVMC_VALID, 0, __ret); - if (!__ret) - ViaOverlayHide(pScrn); - } + sAPriv = (ViaXvMCSAreaPriv *) DRIGetSAREAPrivate(pScrn->pScreen); + { + DRM_CAS_RESULT(__ret); + DRM_CAS(&(sAPriv->XvMCDisplaying[vx->xvmc_port]), + i | VIA_XVMC_VALID, 0, __ret); + if (!__ret) + ViaOverlayHide(pScrn); + } - VIAFreeLinear(&(vXvMC->sPrivs[i]->memory_ref)); - xfree(vXvMC->sPrivs[i]); - vXvMC->nSurfaces--; - vXvMC->sPrivs[i] = 0; - vXvMC->surfaces[i] = 0; - return; - } + VIAFreeLinear(&(vXvMC->sPrivs[i]->memory_ref)); + xfree(vXvMC->sPrivs[i]); + vXvMC->nSurfaces--; + vXvMC->sPrivs[i] = 0; + vXvMC->surfaces[i] = 0; + return; + } } return; } @@ -763,70 +754,62 @@ ViaXvMCXVPriv *vx = (ViaXvMCXVPriv *) pPriv->xvmc_priv; for (i = 0; i < VIA_XVMC_MAX_SURFACES; i++) { - if (vXvMC->surfaces[i] == pSubp->subpicture_id) { + if (vXvMC->surfaces[i] == pSubp->subpicture_id) { - sAPriv = (ViaXvMCSAreaPriv *) DRIGetSAREAPrivate(pScrn->pScreen); + sAPriv = (ViaXvMCSAreaPriv *) DRIGetSAREAPrivate(pScrn->pScreen); - { - DRM_CAS_RESULT(__ret); + { + DRM_CAS_RESULT(__ret); - DRM_CAS(&(sAPriv->XvMCSubPicOn[vx->xvmc_port]), - i | VIA_XVMC_VALID, 0, __ret); - if (!__ret) { + DRM_CAS(&(sAPriv->XvMCSubPicOn[vx->xvmc_port]), + i | VIA_XVMC_VALID, 0, __ret); + if (!__ret) { + /* Turn subpicture off. */ + while (VIDInD(V_COMPOSE_MODE) & + (V1_COMMAND_FIRE | V3_COMMAND_FIRE)) ; + VIDOutD(SUBP_CONTROL_STRIDE, + VIDInD(SUBP_CONTROL_STRIDE) & ~SUBP_HQV_ENABLE); + } + } - /* - * Turn subpicture off. - */ + VIAFreeLinear(&(vXvMC->sPrivs[i]->memory_ref)); + xfree(vXvMC->sPrivs[i]); + vXvMC->nSurfaces--; + vXvMC->sPrivs[i] = 0; + vXvMC->surfaces[i] = 0; - while (VIDInD(V_COMPOSE_MODE) & - (V1_COMMAND_FIRE | V3_COMMAND_FIRE)) ; - VIDOutD(SUBP_CONTROL_STRIDE, VIDInD(SUBP_CONTROL_STRIDE) & - ~SUBP_HQV_ENABLE); - - } - } - VIAFreeLinear(&(vXvMC->sPrivs[i]->memory_ref)); - xfree(vXvMC->sPrivs[i]); - vXvMC->nSurfaces--; - vXvMC->sPrivs[i] = 0; - vXvMC->surfaces[i] = 0; - - return; - } + return; + } } return; } /* - * Tell XvMC clients that Xv is currently displaying. + * Tell XvMC clients that Xv is currently displaying; * return 1 if another client was displaying before. */ - static int viaXvMCSetDisplayLock(ScrnInfoPtr pScrn, ViaXvMCXVPriv * vx) { VIAPtr pVia = VIAPTR(pScrn); ViaXvMCSAreaPriv *sAPriv = (ViaXvMCSAreaPriv *) - DRIGetSAREAPrivate(pScrn->pScreen); + DRIGetSAREAPrivate(pScrn->pScreen); if (vx->xvmc_port > 0) { - if ((VIA_XVMC_MAX_SURFACES | VIA_XVMC_VALID) != - sAPriv->XvMCDisplaying[vx->xvmc_port]) { - sAPriv->XvMCDisplaying[vx->xvmc_port] = - (VIA_XVMC_MAX_SURFACES | VIA_XVMC_VALID); - } + if ((VIA_XVMC_MAX_SURFACES | VIA_XVMC_VALID) != + sAPriv->XvMCDisplaying[vx->xvmc_port]) { + sAPriv->XvMCDisplaying[vx->xvmc_port] = + (VIA_XVMC_MAX_SURFACES | VIA_XVMC_VALID); + } - if (sAPriv->XvMCSubPicOn[vx->xvmc_port] & VIA_XVMC_VALID) { - sAPriv->XvMCSubPicOn[vx->xvmc_port] = 0; - - while (VIDInD(V_COMPOSE_MODE) & - (V1_COMMAND_FIRE | V3_COMMAND_FIRE)) ; - VIDOutD(SUBP_CONTROL_STRIDE, VIDInD(SUBP_CONTROL_STRIDE) & - ~SUBP_HQV_ENABLE); - - } + if (sAPriv->XvMCSubPicOn[vx->xvmc_port] & VIA_XVMC_VALID) { + sAPriv->XvMCSubPicOn[vx->xvmc_port] = 0; + while (VIDInD(V_COMPOSE_MODE) & + (V1_COMMAND_FIRE | V3_COMMAND_FIRE)) ; + VIDOutD(SUBP_CONTROL_STRIDE, + VIDInD(SUBP_CONTROL_STRIDE) & ~SUBP_HQV_ENABLE); + } } - return 0; } @@ -838,80 +821,80 @@ unsigned i, j; for (j = 0; j < XvAdapt->nPorts; ++j) { - pPriv = (viaPortPrivPtr) XvAdapt->pPortPrivates[j].ptr; + pPriv = (viaPortPrivPtr) XvAdapt->pPortPrivates[j].ptr; - if (NULL == (pPriv->xvmc_priv = xcalloc(1, sizeof(ViaXvMCXVPriv)))) { - return BadAlloc; - } + if (NULL == (pPriv->xvmc_priv = xcalloc(1, sizeof(ViaXvMCXVPriv)))) + return BadAlloc; - for (i = 0; i < VIA_NUM_XVMC_ATTRIBUTES; ++i) { - attrAtoms[i] = MAKE_ATOM(attrXvMC[i]); - } + for (i = 0; i < VIA_NUM_XVMC_ATTRIBUTES; ++i) { + attrAtoms[i] = MAKE_ATOM(attrXvMC[i]); + } - vx = (ViaXvMCXVPriv *) pPriv->xvmc_priv; + vx = (ViaXvMCXVPriv *) pPriv->xvmc_priv; - vx->ctxDisplaying = 0; - vx->xvAttr.numAttr = VIA_NUM_XVMC_ATTRIBUTES; - vx->xvmc_port = -1; - vx->newAttribute = 1; + vx->ctxDisplaying = 0; + vx->xvAttr.numAttr = VIA_NUM_XVMC_ATTRIBUTES; + vx->xvmc_port = -1; + vx->newAttribute = 1; - /* set up wrappers */ - vx->GetPortAttribute = XvAdapt->GetPortAttribute; - vx->SetPortAttribute = XvAdapt->SetPortAttribute; - vx->PutImage = XvAdapt->PutImage; + /* Set up wrappers. */ + vx->GetPortAttribute = XvAdapt->GetPortAttribute; + vx->SetPortAttribute = XvAdapt->SetPortAttribute; + vx->PutImage = XvAdapt->PutImage; - XvAdapt->GetPortAttribute = viaXvMCInterceptXvGetAttribute; - XvAdapt->SetPortAttribute = viaXvMCInterceptXvAttribute; - XvAdapt->PutImage = viaXvMCInterceptPutImage; + XvAdapt->GetPortAttribute = viaXvMCInterceptXvGetAttribute; + XvAdapt->SetPortAttribute = viaXvMCInterceptXvAttribute; + XvAdapt->PutImage = viaXvMCInterceptPutImage; - for (i = 0; i < VIA_NUM_XVMC_ATTRIBUTES; ++i) { - vx->xvAttr.attributes[i].attribute = attrAtoms[i]; - vx->xvAttr.attributes[i].value = 0; - vx->GetPortAttribute(pScrn, attrAtoms[i], - &(vx->xvAttr.attributes[i].value), pPriv); - } + for (i = 0; i < VIA_NUM_XVMC_ATTRIBUTES; ++i) { + vx->xvAttr.attributes[i].attribute = attrAtoms[i]; + vx->xvAttr.attributes[i].value = 0; + vx->GetPortAttribute(pScrn, attrAtoms[i], + &(vx->xvAttr.attributes[i].value), pPriv); + } } return Success; } static int viaXvMCInterceptXvAttribute(ScrnInfoPtr pScrn, Atom attribute, - INT32 value, pointer data) + INT32 value, pointer data) { unsigned i; viaPortPrivPtr pPriv = (viaPortPrivPtr) data; ViaXvMCXVPriv *vx = (ViaXvMCXVPriv *) pPriv->xvmc_priv; if (VIAPTR(pScrn)->XvMCEnabled) { - for (i = 0; i < vx->xvAttr.numAttr; ++i) { - if (vx->xvAttr.attributes[i].attribute == attribute) { - vx->xvAttr.attributes[i].value = value; - if (vx->ctxDisplaying != - (VIA_XVMC_MAX_CONTEXTS | VIA_XVMC_VALID)) { - vx->newAttribute = 1; - return 0; - } - } - } + for (i = 0; i < vx->xvAttr.numAttr; ++i) { + if (vx->xvAttr.attributes[i].attribute == attribute) { + vx->xvAttr.attributes[i].value = value; + if (vx->ctxDisplaying != + (VIA_XVMC_MAX_CONTEXTS | VIA_XVMC_VALID)) { + vx->newAttribute = 1; + return 0; + } + } + } } + return vx->SetPortAttribute(pScrn, attribute, value, data); } static int viaXvMCInterceptXvGetAttribute(ScrnInfoPtr pScrn, Atom attribute, - INT32 * value, pointer data) + INT32 * value, pointer data) { unsigned i; viaPortPrivPtr pPriv = (viaPortPrivPtr) data; ViaXvMCXVPriv *vx = (ViaXvMCXVPriv *) pPriv->xvmc_priv; if (VIAPTR(pScrn)->XvMCEnabled) { - for (i = 0; i < vx->xvAttr.numAttr; ++i) { - if (vx->xvAttr.attributes[i].attribute == attribute) { - *value = vx->xvAttr.attributes[i].value; - return Success; - } - } + for (i = 0; i < vx->xvAttr.numAttr; ++i) { + if (vx->xvAttr.attributes[i].attribute == attribute) { + *value = vx->xvAttr.attributes[i].value; + return Success; + } + } } return vx->GetPortAttribute(pScrn, attribute, value, data); @@ -919,100 +902,101 @@ static int viaXvMCDisplayAttributes(ScrnInfoPtr pScrn, - const ViaXvMCAttrHolder * ah, viaPortPrivPtr pPriv) + const ViaXvMCAttrHolder * ah, viaPortPrivPtr pPriv) { ViaXvMCXVPriv *vx = (ViaXvMCXVPriv *) pPriv->xvmc_priv; unsigned i; int ret; for (i = 0; i < ah->numAttr; ++i) { - ret = vx->SetPortAttribute(pScrn, ah->attributes[i].attribute, - ah->attributes[i].value, pPriv); - if (ret) - return ret; + ret = vx->SetPortAttribute(pScrn, ah->attributes[i].attribute, + ah->attributes[i].value, pPriv); + if (ret) + return ret; } return Success; } static int viaXvMCInterceptPutImage(ScrnInfoPtr pScrn, short src_x, short src_y, - short drw_x, short drw_y, short src_w, - short src_h, short drw_w, short drw_h, - int id, unsigned char *buf, short width, - short height, Bool sync, RegionPtr clipBoxes, pointer data + short drw_x, short drw_y, short src_w, + short src_h, short drw_w, short drw_h, + int id, unsigned char *buf, short width, + short height, Bool sync, RegionPtr clipBoxes, + pointer data #ifdef USE_NEW_XVABI - , DrawablePtr pDraw + , DrawablePtr pDraw #endif - ) + ) { viaPortPrivPtr pPriv = (viaPortPrivPtr) data; ViaXvMCXVPriv *vx = (ViaXvMCXVPriv *) pPriv->xvmc_priv; if (VIAPTR(pScrn)->XvMCEnabled) { - if (FOURCC_XVMC == id) { - volatile ViaXvMCSAreaPriv *sAPriv; - ViaXvMCCommandBuffer *vXvMCData = (ViaXvMCCommandBuffer *) buf; + if (FOURCC_XVMC == id) { + volatile ViaXvMCSAreaPriv *sAPriv; + ViaXvMCCommandBuffer *vXvMCData = (ViaXvMCCommandBuffer *) buf; - sAPriv = (ViaXvMCSAreaPriv *) DRIGetSAREAPrivate(pScrn->pScreen); + sAPriv = (ViaXvMCSAreaPriv *) DRIGetSAREAPrivate(pScrn->pScreen); - switch (vXvMCData->command) { - case VIA_XVMC_COMMAND_ATTRIBUTES: - if ((vXvMCData->ctxNo | VIA_XVMC_VALID) != vx->ctxDisplaying) - return 1; - viaXvMCDisplayAttributes(pScrn, &vXvMCData->attrib, pPriv); - return 0; - case VIA_XVMC_COMMAND_FDISPLAY: - if (sAPriv->XvMCDisplaying[vx->xvmc_port] != vXvMCData->srfNo) - return 1; - viaXvMCDisplayAttributes(pScrn, &vXvMCData->attrib, pPriv); - vx->ctxDisplaying = vXvMCData->ctxNo; - break; - case VIA_XVMC_COMMAND_DISPLAY: - if ((vXvMCData->ctxNo | VIA_XVMC_VALID) != vx->ctxDisplaying) { - viaXvMCDisplayAttributes(pScrn, &vXvMCData->attrib, - pPriv); - } - if (sAPriv->XvMCDisplaying[vx->xvmc_port] != vXvMCData->srfNo) - return 1; - vx->ctxDisplaying = vXvMCData->ctxNo; - break; - case VIA_XVMC_COMMAND_UNDISPLAY: - { - DRM_CAS_RESULT(__ret); - DRM_CAS(&(sAPriv->XvMCDisplaying[vx->xvmc_port]), - vXvMCData->srfNo, 0, __ret); - if (!__ret) - ViaOverlayHide(pScrn); - } - return Success; - default: - break; - } - } else { - if ((VIA_XVMC_MAX_CONTEXTS | VIA_XVMC_VALID) != vx->ctxDisplaying) { - viaXvMCDisplayAttributes(pScrn, &vx->xvAttr, pPriv); - vx->ctxDisplaying = VIA_XVMC_MAX_CONTEXTS | VIA_XVMC_VALID; - } else if (vx->newAttribute) { - vx->newAttribute = 0; - viaXvMCDisplayAttributes(pScrn, &vx->xvAttr, pPriv); - } - viaXvMCSetDisplayLock(pScrn, vx); - } + switch (vXvMCData->command) { + case VIA_XVMC_COMMAND_ATTRIBUTES: + if ((vXvMCData->ctxNo | VIA_XVMC_VALID) != vx->ctxDisplaying) + return 1; + viaXvMCDisplayAttributes(pScrn, &vXvMCData->attrib, pPriv); + return 0; + case VIA_XVMC_COMMAND_FDISPLAY: + if (sAPriv->XvMCDisplaying[vx->xvmc_port] != vXvMCData->srfNo) + return 1; + viaXvMCDisplayAttributes(pScrn, &vXvMCData->attrib, pPriv); + vx->ctxDisplaying = vXvMCData->ctxNo; + break; + case VIA_XVMC_COMMAND_DISPLAY: + if ((vXvMCData->ctxNo | VIA_XVMC_VALID) != vx->ctxDisplaying) { + viaXvMCDisplayAttributes(pScrn, &vXvMCData->attrib, pPriv); + } + if (sAPriv->XvMCDisplaying[vx->xvmc_port] != vXvMCData->srfNo) + return 1; + vx->ctxDisplaying = vXvMCData->ctxNo; + break; + case VIA_XVMC_COMMAND_UNDISPLAY: + { + DRM_CAS_RESULT(__ret); + DRM_CAS(&(sAPriv->XvMCDisplaying[vx->xvmc_port]), + vXvMCData->srfNo, 0, __ret); + if (!__ret) + ViaOverlayHide(pScrn); + } + return Success; + default: + break; + } + } else { + if ((VIA_XVMC_MAX_CONTEXTS | VIA_XVMC_VALID) != vx->ctxDisplaying) { + viaXvMCDisplayAttributes(pScrn, &vx->xvAttr, pPriv); + vx->ctxDisplaying = VIA_XVMC_MAX_CONTEXTS | VIA_XVMC_VALID; + } else if (vx->newAttribute) { + vx->newAttribute = 0; + viaXvMCDisplayAttributes(pScrn, &vx->xvAttr, pPriv); + } + viaXvMCSetDisplayLock(pScrn, vx); + } } return vx->PutImage(pScrn, src_x, src_y, drw_x, drw_y, src_w, src_h, - drw_w, drw_h, id, buf, width, height, sync, clipBoxes, data + drw_w, drw_h, id, buf, width, height, sync, clipBoxes, + data #ifdef USE_NEW_XVABI - , pDraw + , pDraw #endif - ); + ); } unsigned long viaXvMCPutImageSize(ScrnInfoPtr pScrn) { if (VIAPTR(pScrn)->XvMCEnabled) - return sizeof(ViaXvMCCommandBuffer); + return sizeof(ViaXvMCCommandBuffer); return 0; } -#endif +#endif /* XF86DRI */ Index: src/via_dri.c =================================================================== --- src/via_dri.c (revision 487) +++ src/via_dri.c (revision 553) @@ -1,4 +1,5 @@ /* + * Copyright 2005-2008 The Openchrome Project [openchrome.org] * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved. * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved. * @@ -51,8 +52,8 @@ #define DRIINFO_MINOR_VERSION 0 #endif -#define VIDEO 0 -#define AGP 1 +#define VIDEO 0 +#define AGP 1 #define AGP_CMDBUF_PAGES 512 #define AGP_CMDBUF_SIZE (AGP_PAGE_SIZE * AGP_CMDBUF_PAGES) #define VIA_AGP_MODE_MASK 0x17 @@ -64,13 +65,12 @@ #define VIA_AGP_1X_MODE 0x01 #define VIA_AGP_FW_MODE 0x10 -extern void GlxSetVisualConfigs( - int nconfigs, - __GLXvisualConfig *configs, - void **configprivs -); +extern void GlxSetVisualConfigs(int nconfigs, + __GLXvisualConfig * configs, + void **configprivs); -typedef struct { +typedef struct +{ int major; int minor; int patchlevel; @@ -78,8 +78,8 @@ static char VIAKernelDriverName[] = "via"; static char VIAClientDriverName[] = "unichrome"; -static const ViaDRMVersion drmExpected = {1, 3, 0}; -static const ViaDRMVersion drmCompat = {2, 0, 0}; +static const ViaDRMVersion drmExpected = { 1, 3, 0 }; +static const ViaDRMVersion drmCompat = { 2, 0, 0 }; int test_alloc_FB(ScreenPtr pScreen, VIAPtr pVia, int Size); int test_alloc_AGP(ScreenPtr pScreen, VIAPtr pVia, int Size); @@ -90,57 +90,66 @@ static Bool VIADRIKernelInit(ScreenPtr pScreen, VIAPtr pVia); static Bool VIADRIMapInit(ScreenPtr pScreen, VIAPtr pVia); -static Bool VIACreateContext(ScreenPtr pScreen, VisualPtr visual, - drm_context_t hwContext, void *pVisualConfigPriv, - DRIContextType contextStore); +static Bool VIACreateContext(ScreenPtr pScreen, VisualPtr visual, + drm_context_t hwContext, void *pVisualConfigPriv, + DRIContextType contextStore); static void VIADestroyContext(ScreenPtr pScreen, drm_context_t hwContext, - DRIContextType contextStore); -static void VIADRISwapContext(ScreenPtr pScreen, DRISyncType syncType, - DRIContextType readContextType, - void *readContextStore, - DRIContextType writeContextType, - void *writeContextStore); + DRIContextType contextStore); +static void VIADRISwapContext(ScreenPtr pScreen, DRISyncType syncType, + DRIContextType readContextType, + void *readContextStore, + DRIContextType writeContextType, + void *writeContextStore); static void VIADRIInitBuffers(WindowPtr pWin, RegionPtr prgn, CARD32 index); -static void VIADRIMoveBuffers(WindowPtr pParent, DDXPointRec ptOldOrg, - RegionPtr prgnSrc, CARD32 index); +static void VIADRIMoveBuffers(WindowPtr pParent, DDXPointRec ptOldOrg, + RegionPtr prgnSrc, CARD32 index); -static void VIADRIIrqInit( ScrnInfoPtr pScrn , VIADRIPtr pVIADRI) +static void +VIADRIIrqInit(ScrnInfoPtr pScrn, VIADRIPtr pVIADRI) { - VIAPtr pVia = VIAPTR(pScrn); - + VIAPtr pVia = VIAPTR(pScrn); + pVIADRI->irqEnabled = drmGetInterruptFromBusID - (pVia->drmFD, - ((pciConfigPtr)pVia->PciInfo->thisCard)->busnum, - ((pciConfigPtr)pVia->PciInfo->thisCard)->devnum, - ((pciConfigPtr)pVia->PciInfo->thisCard)->funcnum); + (pVia->drmFD, +#ifdef XSERVER_LIBPCIACCESS + ((pVia->PciInfo->domain << 8) | pVia->PciInfo->bus), + pVia->PciInfo->dev, pVia->PciInfo->func +#else + ((pciConfigPtr)pVia->PciInfo->thisCard)->busnum, + ((pciConfigPtr)pVia->PciInfo->thisCard)->devnum, + ((pciConfigPtr)pVia->PciInfo->thisCard)->funcnum +#endif + ); if ((drmCtlInstHandler(pVia->drmFD, pVIADRI->irqEnabled))) { - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "[drm] Failure adding irq handler. " - "Falling back to irq-free operation.\n"); - pVIADRI->irqEnabled = 0; + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, + "[drm] Failure adding IRQ handler. " + "Falling back to IRQ-free operation.\n"); + pVIADRI->irqEnabled = 0; } if (pVIADRI->irqEnabled) - xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "[drm] Irq handler installed, using IRQ %d.\n", - pVIADRI->irqEnabled); + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "[drm] IRQ handler installed, using IRQ %d.\n", + pVIADRI->irqEnabled); } -static void VIADRIIrqExit( ScrnInfoPtr pScrn , VIADRIPtr pVIADRI) { +static void +VIADRIIrqExit(ScrnInfoPtr pScrn, VIADRIPtr pVIADRI) +{ + VIAPtr pVia = VIAPTR(pScrn); - VIAPtr pVia = VIAPTR(pScrn); - if (pVIADRI->irqEnabled) { - if (drmCtlUninstHandler(pVia->drmFD)) { - xf86DrvMsg(pScrn->scrnIndex, X_INFO,"[drm] Irq handler uninstalled.\n"); - } else { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "[drm] Could not uninstall irq handler.\n"); - } + if (drmCtlUninstHandler(pVia->drmFD)) { + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "[drm] IRQ handler uninstalled.\n"); + } else { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "[drm] Could not uninstall IRQ handler.\n"); + } } } - + void VIADRIRingBufferCleanup(ScrnInfoPtr pScrn) { @@ -148,17 +157,17 @@ VIADRIPtr pVIADRI = pVia->pDRIInfo->devPrivate; if (pVIADRI->ringBufActive) { - drm_via_dma_init_t ringBufInit; + drm_via_dma_init_t ringBufInit; - xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "[drm] Cleaning up DMA ring-buffer.\n"); - ringBufInit.func = VIA_CLEANUP_DMA; - if (drmCommandWrite(pVia->drmFD, DRM_VIA_DMA_INIT, &ringBufInit, - sizeof(ringBufInit))) { - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "[drm] Failed to clean up DMA ring-buffer: %d\n", errno); - } - pVIADRI->ringBufActive = 0; + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "[drm] Cleaning up DMA ring-buffer.\n"); + ringBufInit.func = VIA_CLEANUP_DMA; + if (drmCommandWrite(pVia->drmFD, DRM_VIA_DMA_INIT, &ringBufInit, + sizeof(ringBufInit))) { + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, + "[drm] Failed to clean up DMA ring-buffer: %d\n", errno); + } + pVIADRI->ringBufActive = 0; } } @@ -169,76 +178,79 @@ VIADRIPtr pVIADRI = pVia->pDRIInfo->devPrivate; if (pVIADRI->ringBufActive) - return TRUE; + return TRUE; if (pVia->agpEnable) { - drm_via_dma_init_t ringBufInit; + drm_via_dma_init_t ringBufInit; - if (((pVia->drmVerMajor == 1) && (pVia->drmVerMinor <= 3))) { - return FALSE; - } + if ((pVia->drmVerMajor == 1) && (pVia->drmVerMinor <= 3)) + return FALSE; - /* - * Info frome code-snippet on DRI-DEVEL list; Erdi Chen. - */ + /* + * Info frome code-snippet on DRI-DEVEL list; Erdi Chen. + */ - switch (pVia->ChipId) { - case PCI_CHIP_VT3314: - case PCI_CHIP_VT3259: - case PCI_CHIP_VT3324: - pVIADRI->reg_pause_addr = 0x40c; - break; - default: - pVIADRI->reg_pause_addr = 0x418; - break; - } - - ringBufInit.offset = pVia->agpSize; - ringBufInit.size = AGP_CMDBUF_SIZE; - ringBufInit.reg_pause_addr = pVIADRI->reg_pause_addr; - ringBufInit.func = VIA_INIT_DMA; - if (drmCommandWrite(pVia->drmFD, DRM_VIA_DMA_INIT, &ringBufInit, - sizeof(ringBufInit))) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "[drm] Failed to initialize DMA ring-buffer: %d\n", errno); - return FALSE; - } - xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "[drm] Initialized AGP ring-buffer, size 0x%lx at AGP offset 0x%lx.\n", - ringBufInit.size, ringBufInit.offset); - - pVIADRI->ringBufActive = 1; + switch (pVia->ChipId) { + case PCI_CHIP_VT3314: + case PCI_CHIP_VT3259: + case PCI_CHIP_VT3324: + pVIADRI->reg_pause_addr = 0x40c; + break; + default: + pVIADRI->reg_pause_addr = 0x418; + break; + } + + ringBufInit.offset = pVia->agpSize; + ringBufInit.size = AGP_CMDBUF_SIZE; + ringBufInit.reg_pause_addr = pVIADRI->reg_pause_addr; + ringBufInit.func = VIA_INIT_DMA; + + if (drmCommandWrite(pVia->drmFD, DRM_VIA_DMA_INIT, &ringBufInit, + sizeof(ringBufInit))) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "[drm] Failed to initialize DMA ring-buffer: %d\n", + errno); + return FALSE; + } + + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "[drm] Initialized AGP ring-buffer, size 0x%lx at AGP " + "offset 0x%lx.\n", ringBufInit.size, ringBufInit.offset); + pVIADRI->ringBufActive = 1; } return TRUE; -} +} -static Bool VIASetAgpMode(ScrnInfoPtr pScrn) +static Bool +VIASetAgpMode(ScrnInfoPtr pScrn) { VIAPtr pVia = VIAPTR(pScrn); - CARD32 mode = drmAgpGetMode(pVia->drmFD); + CARD32 mode = drmAgpGetMode(pVia->drmFD); unsigned int vendor = drmAgpVendorId(pVia->drmFD); unsigned int device = drmAgpDeviceId(pVia->drmFD); - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[drm] Detected AGP vendor 0x%04x, device 0x04%x\n", - vendor, device); + xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[drm] Detected AGP " + "vendor 0x%04x, device 0x%04x\n", vendor, device); mode &= ~VIA_AGP_MODE_MASK; - if ((mode & VIA_AGPv3_MODE)) { - mode |= VIA_AGPv3_8X_MODE; - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[drm] Found AGP v3 compatible device. " - "Trying AGP 8X mode.\n"); + if (mode & VIA_AGPv3_MODE) { + mode |= VIA_AGPv3_8X_MODE; + xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[drm] Found AGP v3 " + "compatible device. Trying AGP 8X mode.\n"); } else { - mode |= VIA_AGP_4X_MODE; - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[drm] Didn't find any AGP v3 compatible device. " - "Trying AGP 4X mode.\n"); + mode |= VIA_AGP_4X_MODE; + xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[drm] Didn't find any AGP v3 " + "compatible device. Trying AGP 4X mode.\n"); } - + mode |= VIA_AGP_FW_MODE; - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[drm] Trying to enable AGP fast writes.\n"); + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "[drm] Trying to enable AGP fast writes.\n"); - if (drmAgpEnable(pVia->drmFD, mode) < 0) { + if (drmAgpEnable(pVia->drmFD, mode) < 0) return FALSE; - } + return TRUE; } @@ -251,47 +263,46 @@ drmAddress agpaddr; VIADRIPtr pVIADRI; DRIInfoPtr pDRIInfo; + pDRIInfo = pVia->pDRIInfo; pVIADRI = pDRIInfo->devPrivate; pVia->agpSize = 0; if (drmAgpAcquire(pVia->drmFD) < 0) { - xf86DrvMsg(pScreen->myNum, X_ERROR, "[drm] drmAgpAcquire failed %d\n", errno); + xf86DrvMsg(pScreen->myNum, X_ERROR, "[drm] drmAgpAcquire failed %d\n", + errno); return FALSE; } if (!VIASetAgpMode(xf86Screens[pScreen->myNum])) { - xf86DrvMsg(pScreen->myNum, X_ERROR, "[drm] VIASetAgpMode failed\n"); - drmAgpRelease(pVia->drmFD); + xf86DrvMsg(pScreen->myNum, X_ERROR, "[drm] VIASetAgpMode failed\n"); + drmAgpRelease(pVia->drmFD); return FALSE; } - + xf86DrvMsg(pScreen->myNum, X_INFO, "[drm] drmAgpEnabled succeeded\n"); - + agpCmdSize = (pVia->agpEnable) ? AGP_CMDBUF_SIZE : 0; - if (pVia->agpMem*1024 < agpCmdSize + AGP_PAGE_SIZE) { - pVia->agpMem = (agpCmdSize + AGP_PAGE_SIZE) / 1024; - xf86DrvMsg(pScreen->myNum, X_INFO, - "[drm] Forcing AGP size to %d kB\n", pVia->agpMem); + if (pVia->agpMem * 1024 < agpCmdSize + AGP_PAGE_SIZE) { + pVia->agpMem = (agpCmdSize + AGP_PAGE_SIZE) / 1024; + xf86DrvMsg(pScreen->myNum, X_INFO, + "[drm] Forcing AGP size to %d kB\n", pVia->agpMem); } - agpPages = (pVia->agpMem*1024 + AGP_PAGE_SIZE - 1) / AGP_PAGE_SIZE; - - if (drmAgpAlloc(pVia->drmFD, agpPages*AGP_PAGE_SIZE, - 0, &agp_phys, &pVia->agpHandle) < 0) { - xf86DrvMsg(pScreen->myNum, X_ERROR, - "[drm] drmAgpAlloc failed\n"); + agpPages = (pVia->agpMem * 1024 + AGP_PAGE_SIZE - 1) / AGP_PAGE_SIZE; + + if (drmAgpAlloc(pVia->drmFD, agpPages * AGP_PAGE_SIZE, + 0, &agp_phys, &pVia->agpHandle) < 0) { + xf86DrvMsg(pScreen->myNum, X_ERROR, "[drm] drmAgpAlloc failed\n"); drmAgpRelease(pVia->drmFD); return FALSE; } - + if (drmAgpBind(pVia->drmFD, pVia->agpHandle, 0) < 0) { - xf86DrvMsg(pScreen->myNum, X_ERROR, - "[drm] drmAgpBind failed\n"); + xf86DrvMsg(pScreen->myNum, X_ERROR, "[drm] drmAgpBind failed\n"); drmAgpFree(pVia->drmFD, pVia->agpHandle); drmAgpRelease(pVia->drmFD); - return FALSE; } @@ -300,56 +311,57 @@ * public map not to include the buffer for security reasons. */ - pVia->agpSize = agpPages*AGP_PAGE_SIZE - agpCmdSize; + pVia->agpSize = agpPages * AGP_PAGE_SIZE - agpCmdSize; pVia->agpAddr = drmAgpBase(pVia->drmFD); xf86DrvMsg(pScreen->myNum, X_INFO, - "[drm] agpAddr = 0x%08lx\n",pVia->agpAddr); - + "[drm] agpAddr = 0x%08lx\n", pVia->agpAddr); + pVIADRI->agp.size = pVia->agpSize; - if (drmAddMap(pVia->drmFD, (drm_handle_t)0, - pVIADRI->agp.size, DRM_AGP, 0, - &pVIADRI->agp.handle) < 0) { - xf86DrvMsg(pScreen->myNum, X_ERROR, - "[drm] Failed to map public agp area\n"); + if (drmAddMap(pVia->drmFD, (drm_handle_t) 0, pVIADRI->agp.size, + DRM_AGP, 0, &pVIADRI->agp.handle) < 0) { + xf86DrvMsg(pScreen->myNum, X_ERROR, + "[drm] Failed to map public agp area.\n"); pVIADRI->agp.size = 0; - drmAgpUnbind(pVia->drmFD, pVia->agpHandle); - drmAgpFree(pVia->drmFD, pVia->agpHandle); - drmAgpRelease(pVia->drmFD); - return FALSE; - } + drmAgpUnbind(pVia->drmFD, pVia->agpHandle); + drmAgpFree(pVia->drmFD, pVia->agpHandle); + drmAgpRelease(pVia->drmFD); + return FALSE; + } drmMap(pVia->drmFD, pVIADRI->agp.handle, pVIADRI->agp.size, &agpaddr); pVia->agpMappedAddr = agpaddr; - xf86DrvMsg(pScreen->myNum, X_INFO, - "[drm] agpBase = %p\n", pVia->agpBase); - xf86DrvMsg(pScreen->myNum, X_INFO, - "[drm] agpAddr = 0x%08lx\n", pVia->agpAddr); - xf86DrvMsg(pScreen->myNum, X_INFO, - "[drm] agpSize = 0x%08x\n", pVia->agpSize); - xf86DrvMsg(pScreen->myNum, X_INFO, - "[drm] agp physical addr = 0x%08lx\n", agp_phys); - + xf86DrvMsg(pScreen->myNum, X_INFO, + "[drm] agpBase = %p\n", pVia->agpBase); + xf86DrvMsg(pScreen->myNum, X_INFO, + "[drm] agpAddr = 0x%08lx\n", pVia->agpAddr); + xf86DrvMsg(pScreen->myNum, X_INFO, + "[drm] agpSize = 0x%08x\n", pVia->agpSize); + xf86DrvMsg(pScreen->myNum, X_INFO, + "[drm] agp physical addr = 0x%08lx\n", agp_phys); + { - drm_via_agp_t agp; - agp.offset = 0; - agp.size = pVia->agpSize; - if (drmCommandWrite(pVia->drmFD, DRM_VIA_AGP_INIT, &agp, - sizeof(drm_via_agp_t)) < 0) { - drmUnmap(agpaddr,pVia->agpSize); - drmRmMap(pVia->drmFD,pVIADRI->agp.handle); - drmAgpUnbind(pVia->drmFD, pVia->agpHandle); - drmAgpFree(pVia->drmFD, pVia->agpHandle); - drmAgpRelease(pVia->drmFD); - return FALSE; - } + drm_via_agp_t agp; + + agp.offset = 0; + agp.size = pVia->agpSize; + if (drmCommandWrite(pVia->drmFD, DRM_VIA_AGP_INIT, &agp, + sizeof(drm_via_agp_t)) < 0) { + drmUnmap(agpaddr, pVia->agpSize); + drmRmMap(pVia->drmFD, pVIADRI->agp.handle); + drmAgpUnbind(pVia->drmFD, pVia->agpHandle); + drmAgpFree(pVia->drmFD, pVia->agpHandle); + drmAgpRelease(pVia->drmFD); + return FALSE; + } } - + return TRUE; } -static Bool VIADRIFBInit(ScreenPtr pScreen, VIAPtr pVia) -{ +static Bool +VIADRIFBInit(ScreenPtr pScreen, VIAPtr pVia) +{ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; int FBSize = pVia->driSize; int FBOffset; @@ -357,27 +369,23 @@ if (FBSize < pVia->Bpl) { xf86DrvMsg(pScreen->myNum, X_ERROR, - "[drm] No DRM framebuffer heap available.\n"); - xf86DrvMsg(pScreen->myNum, X_ERROR, - "[drm] Please increase the frame buffer\n"); - xf86DrvMsg(pScreen->myNum, X_ERROR, - "[drm] memory area in BIOS. Disabling DRI.\n"); - return FALSE; + "[drm] No DRM framebuffer heap available.\n" + "[drm] Please increase the frame buffer\n" + "[drm] memory area in the BIOS. Disabling DRI.\n"); + return FALSE; } - if (FBSize < 3*(pScrn->virtualY * pVia->Bpl)) { - xf86DrvMsg(pScreen->myNum, X_WARNING, - "[drm] The DRM Heap and Pixmap cache memory could be too small\n"); - xf86DrvMsg(pScreen->myNum, X_WARNING, - "[drm] for optimal performance. Please increase the frame buffer\n"); - xf86DrvMsg(pScreen->myNum, X_WARNING, - "[drm] memory area in BIOS.\n"); + if (FBSize < 3 * (pScrn->virtualY * pVia->Bpl)) { + xf86DrvMsg(pScreen->myNum, X_WARNING, + "[drm] The DRM heap and pixmap cache memory may be too\n" + "[drm] small for optimal performance. Please increase\n" + "[drm] the frame buffer memory area in the BIOS.\n"); } pVia->driOffScreenMem.pool = 0; if (Success != viaOffScreenLinear(&pVia->driOffScreenMem, pScrn, FBSize)) { xf86DrvMsg(pScreen->myNum, X_ERROR, - "[drm] failed to allocate offscreen frame buffer area\n"); - return FALSE; + "[drm] Failed to allocate offscreen frame buffer area.\n"); + return FALSE; } FBOffset = pVia->driOffScreenMem.base; @@ -386,26 +394,28 @@ pVIADRI->fbSize = FBSize; { - drm_via_fb_t fb; - fb.offset = FBOffset; - fb.size = FBSize; - - if (drmCommandWrite(pVia->drmFD, DRM_VIA_FB_INIT, &fb, - sizeof(drm_via_fb_t)) < 0) { - xf86DrvMsg(pScreen->myNum, X_ERROR, - "[drm] failed to init frame buffer area\n"); - return FALSE; - } else { - xf86DrvMsg(pScreen->myNum, X_INFO, - "[drm] Using %d bytes for DRM memory heap.\n", FBSize); - return TRUE; - } + drm_via_fb_t fb; + + fb.offset = FBOffset; + fb.size = FBSize; + + if (drmCommandWrite(pVia->drmFD, DRM_VIA_FB_INIT, &fb, + sizeof(drm_via_fb_t)) < 0) { + xf86DrvMsg(pScreen->myNum, X_ERROR, + "[drm] Failed to initialize frame buffer area.\n"); + return FALSE; + } else { + xf86DrvMsg(pScreen->myNum, X_INFO, + "[drm] Using %d bytes for DRM memory heap.\n", FBSize); + return TRUE; + } } } -static Bool VIADRIPciInit(ScreenPtr pScreen, VIAPtr pVia) +static Bool +VIADRIPciInit(ScreenPtr pScreen, VIAPtr pVia) { - return TRUE; + return TRUE; } static Bool @@ -419,220 +429,122 @@ VIAConfigPrivPtr *pVIAConfigPtrs = 0; int i, db, stencil, accum; - switch (pScrn->bitsPerPixel) { - case 8: - case 24: - break; - case 16: - numConfigs = 12; - if (!(pConfigs = (__GLXvisualConfig*)xcalloc(sizeof(__GLXvisualConfig), - numConfigs))) - return FALSE; - if (!(pVIAConfigs = (VIAConfigPrivPtr)xcalloc(sizeof(VIAConfigPrivRec), - numConfigs))) { - xfree(pConfigs); - return FALSE; - } - if (!(pVIAConfigPtrs = (VIAConfigPrivPtr*)xcalloc(sizeof(VIAConfigPrivPtr), - numConfigs))) { - xfree(pConfigs); - xfree(pVIAConfigs); - return FALSE; - } - for (i=0; ibitsPerPixel == 16 || pScrn->bitsPerPixel == 32) { + numConfigs = 12; + if (!(pConfigs = (__GLXvisualConfig *) + xcalloc(sizeof(__GLXvisualConfig), numConfigs))) + return FALSE; + if (!(pVIAConfigs = (VIAConfigPrivPtr) + xcalloc(sizeof(VIAConfigPrivRec), numConfigs))) { + xfree(pConfigs); + return FALSE; + } + if (!(pVIAConfigPtrs = (VIAConfigPrivPtr *) + xcalloc(sizeof(VIAConfigPrivPtr), numConfigs))) { + xfree(pConfigs); + xfree(pVIAConfigs); + return FALSE; + } + for (i = 0; i < numConfigs; i++) + pVIAConfigPtrs[i] = &pVIAConfigs[i]; - i = 0; - for (accum = 0; accum <= 1; accum++) { - /* 32bpp depth buffer disabled, as Mesa has limitations */ - for (stencil=0; stencil<=2; stencil++) { - for (db = 0; db <= 1; db++) { - pConfigs[i].vid = -1; - pConfigs[i].class = -1; - pConfigs[i].rgba = TRUE; - pConfigs[i].redSize = -1; - pConfigs[i].greenSize = -1; - pConfigs[i].blueSize = -1; - pConfigs[i].redMask = -1; - pConfigs[i].greenMask = -1; - pConfigs[i].blueMask = -1; - pConfigs[i].alphaSize = 0; - pConfigs[i].alphaMask = 0; - - if (accum) { - pConfigs[i].accumRedSize = 16; - pConfigs[i].accumGreenSize = 16; - pConfigs[i].accumBlueSize = 16; - pConfigs[i].accumAlphaSize = 0; - } - else { - pConfigs[i].accumRedSize = 0; - pConfigs[i].accumGreenSize = 0; - pConfigs[i].accumBlueSize = 0; - pConfigs[i].accumAlphaSize = 0; - } - if (!db) - pConfigs[i].doubleBuffer = TRUE; - else - pConfigs[i].doubleBuffer = FALSE; - - pConfigs[i].stereo = FALSE; - pConfigs[i].bufferSize = -1; - - switch (stencil) { - case 0: - pConfigs[i].depthSize = 24; - pConfigs[i].stencilSize = 8; - break; - case 1: - pConfigs[i].depthSize = 16; - pConfigs[i].stencilSize = 0; - break; - case 2: - pConfigs[i].depthSize = 0; - pConfigs[i].stencilSize = 0; - break; - case 3: - pConfigs[i].depthSize = 32; - pConfigs[i].stencilSize = 0; - break; - } - - pConfigs[i].auxBuffers = 0; - pConfigs[i].level = 0; - if (accum) { - pConfigs[i].visualRating = GLX_SLOW_VISUAL_EXT; - } else { - pConfigs[i].visualRating = GLX_NONE_EXT; - } - pConfigs[i].transparentPixel = GLX_NONE_EXT; - pConfigs[i].transparentRed = 0; - pConfigs[i].transparentGreen = 0; - pConfigs[i].transparentBlue = 0; - pConfigs[i].transparentAlpha = 0; - pConfigs[i].transparentIndex = 0; - i++; - } - } - } - - if (i != numConfigs) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "[dri] Incorrect initialization of visuals. Disabling DRI.\n"); - return FALSE; - } - break; - - case 32: - numConfigs = 12; - if (!(pConfigs = (__GLXvisualConfig*)xcalloc(sizeof(__GLXvisualConfig), - numConfigs))) - return FALSE; - if (!(pVIAConfigs = (VIAConfigPrivPtr)xcalloc(sizeof(VIAConfigPrivRec), - numConfigs))) { - xfree(pConfigs); - return FALSE; - } - if (!(pVIAConfigPtrs = (VIAConfigPrivPtr*)xcalloc(sizeof(VIAConfigPrivPtr), - numConfigs))) { - xfree(pConfigs); - xfree(pVIAConfigs); - return FALSE; - } - for (i=0; ibitsPerPixel == 32) { + pConfigs[i].alphaSize = 8; + pConfigs[i].alphaMask = 0xFF000000; + } else { + pConfigs[i].alphaSize = 0; + pConfigs[i].alphaMask = 0; + } - i = 0; - for (accum = 0; accum <= 1; accum++) { - /* 32bpp depth buffer disabled, as Mesa has limitations */ - for (stencil=0; stencil<=2; stencil++) { - for (db = 0; db <= 1; db++) { - pConfigs[i].vid = -1; - pConfigs[i].class = -1; - pConfigs[i].rgba = TRUE; - pConfigs[i].redSize = -1; - pConfigs[i].greenSize = -1; - pConfigs[i].blueSize = -1; - pConfigs[i].redMask = -1; - pConfigs[i].greenMask = -1; - pConfigs[i].blueMask = -1; - pConfigs[i].alphaSize = 8; - pConfigs[i].alphaMask = 0xFF000000; - - if (accum) { - pConfigs[i].accumRedSize = 16; - pConfigs[i].accumGreenSize = 16; - pConfigs[i].accumBlueSize = 16; - pConfigs[i].accumAlphaSize = 16; - } - else { - pConfigs[i].accumRedSize = 0; - pConfigs[i].accumGreenSize = 0; - pConfigs[i].accumBlueSize = 0; - pConfigs[i].accumAlphaSize = 0; - } - if (!db) - pConfigs[i].doubleBuffer = TRUE; - else - pConfigs[i].doubleBuffer = FALSE; - - pConfigs[i].stereo = FALSE; - pConfigs[i].bufferSize = -1; - - switch (stencil) { - case 0: - pConfigs[i].depthSize = 24; - pConfigs[i].stencilSize = 8; - break; - case 1: - pConfigs[i].depthSize = 16; - pConfigs[i].stencilSize = 0; - break; - case 2: - pConfigs[i].depthSize = 0; - pConfigs[i].stencilSize = 0; - break; - case 3: - pConfigs[i].depthSize = 32; - pConfigs[i].stencilSize = 0; - break; - } - - pConfigs[i].auxBuffers = 0; - pConfigs[i].level = 0; - if (accum) - pConfigs[i].visualRating = GLX_SLOW_VISUAL_EXT; - else - pConfigs[i].visualRating = GLX_NONE_EXT; - pConfigs[i].transparentPixel = GLX_NONE_EXT; - pConfigs[i].transparentRed = 0; - pConfigs[i].transparentGreen = 0; - pConfigs[i].transparentBlue = 0; - pConfigs[i].transparentAlpha = 0; - pConfigs[i].transparentIndex = 0; - i++; - } - } - } - - if (i != numConfigs) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "[dri] Incorrect initialization of visuals. Disabling DRI.\n"); - return FALSE; - } - - break; + if (accum) { + pConfigs[i].accumRedSize = 16; + pConfigs[i].accumGreenSize = 16; + pConfigs[i].accumBlueSize = 16; + if (pScrn->bitsPerPixel == 32) + pConfigs[i].accumAlphaSize = 16; + else + pConfigs[i].accumAlphaSize = 0; + } else { + pConfigs[i].accumRedSize = 0; + pConfigs[i].accumGreenSize = 0; + pConfigs[i].accumBlueSize = 0; + pConfigs[i].accumAlphaSize = 0; + } + if (!db) + pConfigs[i].doubleBuffer = TRUE; + else + pConfigs[i].doubleBuffer = FALSE; + + pConfigs[i].stereo = FALSE; + pConfigs[i].bufferSize = -1; + + switch (stencil) { + case 0: + pConfigs[i].depthSize = 24; + pConfigs[i].stencilSize = 8; + break; + case 1: + pConfigs[i].depthSize = 16; + pConfigs[i].stencilSize = 0; + break; + case 2: + pConfigs[i].depthSize = 0; + pConfigs[i].stencilSize = 0; + break; + case 3: + pConfigs[i].depthSize = 32; + pConfigs[i].stencilSize = 0; + break; + } + + pConfigs[i].auxBuffers = 0; + pConfigs[i].level = 0; + if (accum) + pConfigs[i].visualRating = GLX_SLOW_VISUAL_EXT; + else + pConfigs[i].visualRating = GLX_NONE_EXT; + pConfigs[i].transparentPixel = GLX_NONE_EXT; + pConfigs[i].transparentRed = 0; + pConfigs[i].transparentGreen = 0; + pConfigs[i].transparentBlue = 0; + pConfigs[i].transparentAlpha = 0; + pConfigs[i].transparentIndex = 0; + i++; + } + } + } + + if (i != numConfigs) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "[dri] Incorrect " + "initialization of visuals. Disabling DRI.\n"); + return FALSE; + } } - + pVia->numVisualConfigs = numConfigs; pVia->pVisualConfigs = pConfigs; pVia->pVisualConfigsPriv = pVIAConfigs; - GlxSetVisualConfigs(numConfigs, pConfigs, (void**)pVIAConfigPtrs); + GlxSetVisualConfigs(numConfigs, pConfigs, (void **)pVIAConfigPtrs); return TRUE; } -Bool VIADRIScreenInit(ScreenPtr pScreen) +Bool +VIADRIScreenInit(ScreenPtr pScreen) { ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; VIAPtr pVia = VIAPTR(pScrn); @@ -640,46 +552,55 @@ VIADRIPtr pVIADRI; drmVersionPtr drmVer; - /* if symbols or version check fails, we still want this to be NULL */ + /* If symbols or version check fails, we still want this to be NULL. */ pVia->pDRIInfo = NULL; /* Check that the GLX, DRI, and DRM modules have been loaded by testing - * for canonical symbols in each module. */ - if (!xf86LoaderCheckSymbol("GlxSetVisualConfigs")) return FALSE; - if (!xf86LoaderCheckSymbol("drmAvailable")) return FALSE; + * for canonical symbols in each module. */ + if (!xf86LoaderCheckSymbol("GlxSetVisualConfigs")) + return FALSE; + if (!xf86LoaderCheckSymbol("drmAvailable")) + return FALSE; if (!xf86LoaderCheckSymbol("DRIQueryVersion")) { - xf86DrvMsg(pScreen->myNum, X_ERROR, - "[dri] VIADRIScreenInit failed (libdri.a too old)\n"); + xf86DrvMsg(pScreen->myNum, X_ERROR, + "[dri] VIADRIScreenInit failed (libdri.a is too old).\n"); return FALSE; } - - /* Check the DRI version */ + + /* Check the DRI version. */ { int major, minor, patch; + DRIQueryVersion(&major, &minor, &patch); if (major != DRIINFO_MAJOR_VERSION || minor < DRIINFO_MINOR_VERSION) { xf86DrvMsg(pScreen->myNum, X_ERROR, - "[dri] VIADRIScreenInit failed because of a version mismatch.\n" - "[dri] libdri version is %d.%d.%d but version %d.%d.x is needed.\n" - "[dri] Disabling DRI.\n", - major, minor, patch, - DRIINFO_MAJOR_VERSION, DRIINFO_MINOR_VERSION); + "[dri] VIADRIScreenInit failed -- version mismatch.\n" + "[dri] libdri is %d.%d.%d, but %d.%d.x is needed.\n" + "[dri] Disabling DRI.\n", + major, minor, patch, + DRIINFO_MAJOR_VERSION, DRIINFO_MINOR_VERSION); return FALSE; } } pVia->pDRIInfo = DRICreateInfoRec(); if (!pVia->pDRIInfo) - return FALSE; - + return FALSE; + pDRIInfo = pVia->pDRIInfo; pDRIInfo->drmDriverName = VIAKernelDriverName; pDRIInfo->clientDriverName = VIAClientDriverName; pDRIInfo->busIdString = xalloc(64); sprintf(pDRIInfo->busIdString, "PCI:%d:%d:%d", - ((pciConfigPtr)pVia->PciInfo->thisCard)->busnum, - ((pciConfigPtr)pVia->PciInfo->thisCard)->devnum, - ((pciConfigPtr)pVia->PciInfo->thisCard)->funcnum); +#ifdef XSERVER_LIBPCIACCESS + ((pVia->PciInfo->domain << 8) | pVia->PciInfo->bus), + pVia->PciInfo->dev, pVia->PciInfo->func +#else + ((pciConfigPtr)pVia->PciInfo->thisCard)->busnum, + ((pciConfigPtr)pVia->PciInfo->thisCard)->devnum, + ((pciConfigPtr)pVia->PciInfo->thisCard)->funcnum +#endif + ); pDRIInfo->ddxDriverMajorVersion = VIA_DRIDDX_VERSION_MAJOR; pDRIInfo->ddxDriverMinorVersion = VIA_DRIDDX_VERSION_MINOR; pDRIInfo->ddxDriverPatchVersion = VIA_DRIDDX_VERSION_PATCH; @@ -688,41 +609,38 @@ #else pDRIInfo->frameBufferPhysicalAddress = pVia->FrameBufferBase; #endif - pDRIInfo->frameBufferSize = pVia->videoRambytes; - + pDRIInfo->frameBufferSize = pVia->videoRambytes; + pDRIInfo->frameBufferStride = (pScrn->displayWidth * - pScrn->bitsPerPixel / 8); + pScrn->bitsPerPixel / 8); pDRIInfo->ddxDrawableTableEntry = VIA_MAX_DRAWABLES; if (SAREA_MAX_DRAWABLES < VIA_MAX_DRAWABLES) - pDRIInfo->maxDrawableTableEntry = SAREA_MAX_DRAWABLES; + pDRIInfo->maxDrawableTableEntry = SAREA_MAX_DRAWABLES; else - pDRIInfo->maxDrawableTableEntry = VIA_MAX_DRAWABLES; + pDRIInfo->maxDrawableTableEntry = VIA_MAX_DRAWABLES; #ifdef NOT_DONE - /* FIXME need to extend DRI protocol to pass this size back to client - * for SAREA mapping that includes a device private record - */ - pDRIInfo->SAREASize = - ((sizeof(XF86DRISAREARec) + 0xfff) & 0x1000); /* round to page */ + /* FIXME: need to extend DRI protocol to pass this size back to client + * for SAREA mapping that includes a device private record. */ + pDRIInfo->SAREASize = ((sizeof(XF86DRISAREARec) + 0xfff) & 0x1000); /* round to page */ /* + shared memory device private rec */ #else /* For now the mapping works by using a fixed size defined - * in the SAREA header - */ - if (sizeof(XF86DRISAREARec)+sizeof(drm_via_sarea_t) > SAREA_MAX) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Data does not fit in SAREA\n"); - DRIDestroyInfoRec(pVia->pDRIInfo); - pVia->pDRIInfo = NULL; - return FALSE; + * in the SAREA header. */ + if (sizeof(XF86DRISAREARec) + sizeof(drm_via_sarea_t) > SAREA_MAX) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Data does not fit in SAREA\n"); + DRIDestroyInfoRec(pVia->pDRIInfo); + pVia->pDRIInfo = NULL; + return FALSE; } pDRIInfo->SAREASize = SAREA_MAX; #endif - if (!(pVIADRI = (VIADRIPtr)xcalloc(sizeof(VIADRIRec),1))) { - DRIDestroyInfoRec(pVia->pDRIInfo); - pVia->pDRIInfo = NULL; - return FALSE; + if (!(pVIADRI = (VIADRIPtr) xcalloc(sizeof(VIADRIRec), 1))) { + DRIDestroyInfoRec(pVia->pDRIInfo); + pVia->pDRIInfo = NULL; + return FALSE; } pDRIInfo->devPrivate = pVIADRI; pDRIInfo->devPrivateSize = sizeof(VIADRIRec); @@ -736,65 +654,63 @@ pDRIInfo->bufferRequests = DRI_ALL_WINDOWS; if (!DRIScreenInit(pScreen, pDRIInfo, &pVia->drmFD)) { - xf86DrvMsg(pScreen->myNum, X_ERROR, - "[dri] DRIScreenInit failed. Disabling DRI.\n"); - xfree(pDRIInfo->devPrivate); - pDRIInfo->devPrivate = NULL; - DRIDestroyInfoRec(pVia->pDRIInfo); - pVia->pDRIInfo = NULL; - pVia->drmFD = -1; - return FALSE; + xf86DrvMsg(pScreen->myNum, X_ERROR, + "[dri] DRIScreenInit failed. Disabling DRI.\n"); + xfree(pDRIInfo->devPrivate); + pDRIInfo->devPrivate = NULL; + DRIDestroyInfoRec(pVia->pDRIInfo); + pVia->pDRIInfo = NULL; + pVia->drmFD = -1; + return FALSE; } if (NULL == (drmVer = drmGetVersion(pVia->drmFD))) { - VIADRICloseScreen(pScreen); - return FALSE; + VIADRICloseScreen(pScreen); + return FALSE; } pVia->drmVerMajor = drmVer->version_major; pVia->drmVerMinor = drmVer->version_minor; pVia->drmVerPL = drmVer->version_patchlevel; - if ((drmVer->version_major < drmExpected.major) || - (drmVer->version_major > drmCompat.major) || - ((drmVer->version_major == drmExpected.major ) && - (drmVer->version_minor < drmExpected.minor))) { - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "[dri] Kernel drm is not compatible with this driver.\n"); - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "[dri] Kernel drm version: %d.%d.%d " - "and I can work with versions %d.%d.x - %d.x.x\n", - drmVer->version_major,drmVer->version_minor, - drmVer->version_patchlevel, drmExpected.major, - drmExpected.minor, drmCompat.major); - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "[dri] Please update either this 2D driver or your kernel DRM. " - "Disabling DRI.\n"); - drmFreeVersion(drmVer); - VIADRICloseScreen(pScreen); - return FALSE; - } + if ((drmVer->version_major < drmExpected.major) || + (drmVer->version_major > drmCompat.major) || + ((drmVer->version_major == drmExpected.major) && + (drmVer->version_minor < drmExpected.minor))) { + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, + "[dri] Kernel drm is not compatible with this driver.\n" + "[dri] Kernel drm version is %d.%d.%d, " + "and I can work with versions %d.%d.x - %d.x.x.\n" + "[dri] Update either this 2D driver or your kernel DRM. " + "Disabling DRI.\n", + drmVer->version_major, drmVer->version_minor, + drmVer->version_patchlevel, + drmExpected.major, drmExpected.minor, drmCompat.major); + drmFreeVersion(drmVer); + VIADRICloseScreen(pScreen); + return FALSE; + } drmFreeVersion(drmVer); - if (!(VIAInitVisualConfigs(pScreen))) { - VIADRICloseScreen(pScreen); - return FALSE; + VIADRICloseScreen(pScreen); + return FALSE; } - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[dri] visual configs initialized.\n" ); - - /* DRIScreenInit doesn't add all the common mappings. Add additional mappings here. */ + xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[dri] visual configs initialized.\n"); + + /* DRIScreenInit doesn't add all the common mappings. + * Add additional mappings here. */ if (!VIADRIMapInit(pScreen, pVia)) { - VIADRICloseScreen(pScreen); - return FALSE; + VIADRICloseScreen(pScreen); + return FALSE; } pVIADRI->regs.size = VIA_MMIO_REGSIZE; pVIADRI->regs.handle = pVia->registerHandle; xf86DrvMsg(pScreen->myNum, X_INFO, "[drm] mmio Registers = 0x%08lx\n", - (unsigned long) pVIADRI->regs.handle); - + (unsigned long)pVIADRI->regs.handle); + pVIADRI->drixinerama = FALSE; - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[dri] mmio mapped.\n" ); + xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[dri] mmio mapped.\n"); return TRUE; } @@ -806,54 +722,54 @@ VIAPtr pVia = VIAPTR(pScrn); VIADRIPtr pVIADRI; - VIADRIRingBufferCleanup(pScrn); + VIADRIRingBufferCleanup(pScrn); if (pVia->agpSize) { - drmUnmap(pVia->agpMappedAddr,pVia->agpSize); - drmRmMap(pVia->drmFD,pVia->agpHandle); - drmAgpUnbind(pVia->drmFD, pVia->agpHandle); - xf86DrvMsg(pScreen->myNum, X_INFO, "[drm] Freeing agp memory\n"); - drmAgpFree(pVia->drmFD, pVia->agpHandle); - xf86DrvMsg(pScreen->myNum, X_INFO, "[drm] Releasing agp module\n"); - drmAgpRelease(pVia->drmFD); + drmUnmap(pVia->agpMappedAddr, pVia->agpSize); + drmRmMap(pVia->drmFD, pVia->agpHandle); + drmAgpUnbind(pVia->drmFD, pVia->agpHandle); + xf86DrvMsg(pScreen->myNum, X_INFO, "[drm] Freeing agp memory\n"); + drmAgpFree(pVia->drmFD, pVia->agpHandle); + xf86DrvMsg(pScreen->myNum, X_INFO, "[drm] Releasing agp module\n"); + drmAgpRelease(pVia->drmFD); } DRICloseScreen(pScreen); VIAFreeLinear(&pVia->driOffScreenMem); - + if (pVia->pDRIInfo) { - if ((pVIADRI = (VIADRIPtr) pVia->pDRIInfo->devPrivate)) { - VIADRIIrqExit(pScrn, pVIADRI); - xfree(pVIADRI); - pVia->pDRIInfo->devPrivate = NULL; - } - DRIDestroyInfoRec(pVia->pDRIInfo); - pVia->pDRIInfo = NULL; + if ((pVIADRI = (VIADRIPtr) pVia->pDRIInfo->devPrivate)) { + VIADRIIrqExit(pScrn, pVIADRI); + xfree(pVIADRI); + pVia->pDRIInfo->devPrivate = NULL; + } + DRIDestroyInfoRec(pVia->pDRIInfo); + pVia->pDRIInfo = NULL; } - + if (pVia->pVisualConfigs) { - xfree(pVia->pVisualConfigs); - pVia->pVisualConfigs = NULL; + xfree(pVia->pVisualConfigs); + pVia->pVisualConfigs = NULL; } if (pVia->pVisualConfigsPriv) { - xfree(pVia->pVisualConfigsPriv); - pVia->pVisualConfigsPriv = NULL; + xfree(pVia->pVisualConfigsPriv); + pVia->pVisualConfigsPriv = NULL; } } /* TODO: xserver receives driver's swapping event and does something - * according the data initialized in this function. + * according the data initialized in this function. */ static Bool VIACreateContext(ScreenPtr pScreen, VisualPtr visual, - drm_context_t hwContext, void *pVisualConfigPriv, - DRIContextType contextStore) + drm_context_t hwContext, void *pVisualConfigPriv, + DRIContextType contextStore) { return TRUE; } static void -VIADestroyContext(ScreenPtr pScreen, drm_context_t hwContext, - DRIContextType contextStore) +VIADestroyContext(ScreenPtr pScreen, drm_context_t hwContext, + DRIContextType contextStore) { } @@ -865,238 +781,238 @@ VIADRIPtr pVIADRI; pVia->pDRIInfo->driverSwapMethod = DRI_HIDE_X_CONTEXT; - + pVia->IsPCI = !VIADRIAgpInit(pScreen, pVia); - + if (pVia->IsPCI) { - VIADRIPciInit(pScreen, pVia); - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[dri] use pci.\n" ); - } - else - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[dri] use agp.\n" ); + VIADRIPciInit(pScreen, pVia); + xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[dri] Using PCI.\n"); + } else + xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[dri] Using AGP.\n"); if (!(VIADRIFBInit(pScreen, pVia))) { - VIADRICloseScreen(pScreen); - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "[dri] frame buffer initialization failed.\n" ); - return FALSE; + VIADRICloseScreen(pScreen); + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "[dri] Frame buffer initialization failed.\n"); + return FALSE; } - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[dri] frame buffer initialized.\n" ); - + xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[dri] Frame buffer initialized.\n"); + DRIFinishScreenInit(pScreen); - + if (!VIADRIKernelInit(pScreen, pVia)) { - VIADRICloseScreen(pScreen); - return FALSE; + VIADRICloseScreen(pScreen); + return FALSE; } - xf86DrvMsg(pScreen->myNum, X_INFO, "[dri] kernel data initialized.\n"); + xf86DrvMsg(pScreen->myNum, X_INFO, "[dri] Kernel data initialized.\n"); - /* set SAREA value */ + /* Set SAREA value. */ { - drm_via_sarea_t *saPriv; + drm_via_sarea_t *saPriv; - saPriv=(drm_via_sarea_t *)DRIGetSAREAPrivate(pScreen); - assert(saPriv); - memset(saPriv, 0, sizeof(*saPriv)); - saPriv->ctxOwner = -1; + saPriv = (drm_via_sarea_t *) DRIGetSAREAPrivate(pScreen); + assert(saPriv); + memset(saPriv, 0, sizeof(*saPriv)); + saPriv->ctxOwner = -1; } - pVIADRI=(VIADRIPtr)pVia->pDRIInfo->devPrivate; - pVIADRI->deviceID=pVia->Chipset; - pVIADRI->width=pScrn->virtualX; - pVIADRI->height=pScrn->virtualY; - pVIADRI->mem=pScrn->videoRam*1024; - pVIADRI->bytesPerPixel= (pScrn->bitsPerPixel+7) / 8; + pVIADRI = (VIADRIPtr) pVia->pDRIInfo->devPrivate; + pVIADRI->deviceID = pVia->Chipset; + pVIADRI->width = pScrn->virtualX; + pVIADRI->height = pScrn->virtualY; + pVIADRI->mem = pScrn->videoRam * 1024; + pVIADRI->bytesPerPixel = (pScrn->bitsPerPixel + 7) / 8; pVIADRI->sarea_priv_offset = sizeof(XF86DRISAREARec); /* TODO */ - pVIADRI->scrnX=pVIADRI->width; - pVIADRI->scrnY=pVIADRI->height; - + pVIADRI->scrnX = pVIADRI->width; + pVIADRI->scrnY = pVIADRI->height; - /* Initialize IRQ */ - if (pVia->DRIIrqEnable) - VIADRIIrqInit(pScrn, pVIADRI); - + /* Initialize IRQ. */ + if (pVia->DRIIrqEnable) + VIADRIIrqInit(pScrn, pVIADRI); + pVIADRI->ringBufActive = 0; VIADRIRingBufferInit(pScrn); return TRUE; } static void -VIADRISwapContext(ScreenPtr pScreen, DRISyncType syncType, - DRIContextType oldContextType, void *oldContext, - DRIContextType newContextType, void *newContext) +VIADRISwapContext(ScreenPtr pScreen, DRISyncType syncType, + DRIContextType oldContextType, void *oldContext, + DRIContextType newContextType, void *newContext) { - /*ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; - VIAPtr pVia = VIAPTR(pScrn); - */ - return; +#if 0 + ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; + VIAPtr pVia = VIAPTR(pScrn); +#endif + return; } static void VIADRIInitBuffers(WindowPtr pWin, RegionPtr prgn, CARD32 index) { - /*ScreenPtr pScreen = pWin->drawable.pScreen; - ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; - VIAPtr pVia = VIAPTR(pScrn); - */ - return; +#if 0 + ScreenPtr pScreen = pWin->drawable.pScreen; + ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; + VIAPtr pVia = VIAPTR(pScrn); +#endif + return; } static void -VIADRIMoveBuffers(WindowPtr pParent, DDXPointRec ptOldOrg, - RegionPtr prgnSrc, CARD32 index) +VIADRIMoveBuffers(WindowPtr pParent, DDXPointRec ptOldOrg, + RegionPtr prgnSrc, CARD32 index) { - /*ScreenPtr pScreen = pParent->drawable.pScreen; - ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; - VIAPtr pVia = VIAPTR(pScrn); - */ - return; +#if 0 + ScreenPtr pScreen = pParent->drawable.pScreen; + ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; + VIAPtr pVia = VIAPTR(pScrn); +#endif + return; } /* Initialize the kernel data structures. */ -static Bool VIADRIKernelInit(ScreenPtr pScreen, VIAPtr pVia) +static Bool +VIADRIKernelInit(ScreenPtr pScreen, VIAPtr pVia) { drm_via_init_t drmInfo; + memset(&drmInfo, 0, sizeof(drm_via_init_t)); drmInfo.func = VIA_INIT_MAP; - drmInfo.sarea_priv_offset = sizeof(XF86DRISAREARec); - drmInfo.fb_offset = pVia->frameBufferHandle; - drmInfo.mmio_offset = pVia->registerHandle; + drmInfo.sarea_priv_offset = sizeof(XF86DRISAREARec); + drmInfo.fb_offset = pVia->frameBufferHandle; + drmInfo.mmio_offset = pVia->registerHandle; if (pVia->IsPCI) - drmInfo.agpAddr = (CARD32)NULL; + drmInfo.agpAddr = (CARD32) NULL; else - drmInfo.agpAddr = (CARD32)pVia->agpAddr; + drmInfo.agpAddr = (CARD32) pVia->agpAddr; - if ((drmCommandWrite(pVia->drmFD, DRM_VIA_MAP_INIT,&drmInfo, - sizeof(drm_via_init_t))) < 0) - return FALSE; - + if ((drmCommandWrite(pVia->drmFD, DRM_VIA_MAP_INIT, &drmInfo, + sizeof(drm_via_init_t))) < 0) + return FALSE; return TRUE; } -/* Add a map for the MMIO registers */ -static Bool VIADRIMapInit(ScreenPtr pScreen, VIAPtr pVia) + +/* Add a map for the MMIO registers. */ +static Bool +VIADRIMapInit(ScreenPtr pScreen, VIAPtr pVia) { int flags = DRM_READ_ONLY; if (drmAddMap(pVia->drmFD, pVia->MmioBase, VIA_MMIO_REGSIZE, - DRM_REGISTERS, flags, &pVia->registerHandle) < 0) { - return FALSE; + DRM_REGISTERS, flags, &pVia->registerHandle) < 0) { + return FALSE; } xf86DrvMsg(pScreen->myNum, X_INFO, "[drm] register handle = 0x%08lx\n", - (unsigned long) pVia->registerHandle); + (unsigned long)pVia->registerHandle); if (drmAddMap(pVia->drmFD, pVia->FrameBufferBase, pVia->videoRambytes, - DRM_FRAME_BUFFER, 0, &pVia->frameBufferHandle) < 0) { - return FALSE; + DRM_FRAME_BUFFER, 0, &pVia->frameBufferHandle) < 0) { + return FALSE; } xf86DrvMsg(pScreen->myNum, X_INFO, "[drm] framebuffer handle = 0x%08lx\n", - (unsigned long) pVia->frameBufferHandle); - + (unsigned long)pVia->frameBufferHandle); + return TRUE; } #define DRM_VIA_BLIT_MAX_SIZE (2048*2048*4) static int -viaDRIFBMemcpy(int fd, unsigned long fbOffset, unsigned char *addr, - unsigned long size, Bool toFB) +viaDRIFBMemcpy(int fd, unsigned long fbOffset, unsigned char *addr, + unsigned long size, Bool toFB) { int err; drm_via_dmablit_t blit; unsigned long curSize; do { - curSize = (size > DRM_VIA_BLIT_MAX_SIZE) ? DRM_VIA_BLIT_MAX_SIZE : - size; - - blit.num_lines = 1; - blit.line_length = curSize; - blit.fb_addr = fbOffset; - blit.fb_stride = ALIGN_TO(curSize, 16); - blit.mem_addr = addr; - blit.mem_stride = blit.fb_stride; - blit.to_fb = (toFB) ? 1 : 0; - - do { - err = drmCommandWriteRead(fd, DRM_VIA_DMA_BLIT, - &blit, sizeof(blit)); - } while (-EAGAIN == err); + curSize = (size > DRM_VIA_BLIT_MAX_SIZE) ? DRM_VIA_BLIT_MAX_SIZE : size; - if (err) - return err; + blit.num_lines = 1; + blit.line_length = curSize; + blit.fb_addr = fbOffset; + blit.fb_stride = ALIGN_TO(curSize, 16); + blit.mem_addr = addr; + blit.mem_stride = blit.fb_stride; + blit.to_fb = (toFB) ? 1 : 0; - do { - err = drmCommandWriteRead(fd, DRM_VIA_BLIT_SYNC, - &blit.sync, sizeof(blit.sync)); - } while (-EAGAIN == err); - if (err) - return err; + do { + err = drmCommandWriteRead(fd, DRM_VIA_DMA_BLIT, + &blit, sizeof(blit)); + } while (-EAGAIN == err); + if (err) + return err; - fbOffset += curSize; - addr += curSize; - size -= curSize; + do { + err = drmCommandWriteRead(fd, DRM_VIA_BLIT_SYNC, + &blit.sync, sizeof(blit.sync)); + } while (-EAGAIN == err); + if (err) + return err; + fbOffset += curSize; + addr += curSize; + size -= curSize; + } while (size > 0); return 0; } - -void +void viaDRIOffscreenSave(ScrnInfoPtr pScrn) { VIAPtr pVia = VIAPTR(pScrn); VIADRIPtr pVIADRI = pVia->pDRIInfo->devPrivate; - unsigned char *saveAddr = pVia->FBBase + pVIADRI->fbOffset; + unsigned char *saveAddr = pVia->FBBase + pVIADRI->fbOffset; unsigned long saveSize = pVIADRI->fbSize; unsigned long curSize; int err; - if (pVia->driOffScreenSave) - free(pVia->driOffScreenSave); + free(pVia->driOffScreenSave); pVia->driOffScreenSave = malloc(saveSize + 16); if (pVia->driOffScreenSave) { if ((pVia->drmVerMajor == 2) && (pVia->drmVerMinor >= 8)) { - err = viaDRIFBMemcpy(pVia->drmFD, pVIADRI->fbOffset, - (unsigned char *) - ALIGN_TO((unsigned long) - pVia->driOffScreenSave, 16), - saveSize, FALSE); - if (!err) - return; + err = viaDRIFBMemcpy(pVia->drmFD, pVIADRI->fbOffset, + (unsigned char *) + ALIGN_TO((unsigned long) + pVia->driOffScreenSave, 16), + saveSize, FALSE); + if (!err) + return; - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "Hardware backup of DRI offscreen memory failed: %s.\n" - "\tUsing slow software backup instead.\n", - strerror(-err)); - } - memcpy((void *)ALIGN_TO((unsigned long) pVia->driOffScreenSave, 16), - saveAddr, saveSize); - + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, + "Hardware backup of DRI offscreen memory failed: %s.\n" + "\tUsing slow software backup instead.\n", + strerror(-err)); + } + memcpy((void *)ALIGN_TO((unsigned long)pVia->driOffScreenSave, 16), + saveAddr, saveSize); + } else { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "Out of memory trying to backup DRI offscreen memory.\n"); + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "Out of memory trying to backup DRI offscreen memory.\n"); } return; } - -void +void viaDRIOffscreenRestore(ScrnInfoPtr pScrn) { VIAPtr pVia = VIAPTR(pScrn); VIADRIPtr pVIADRI = pVia->pDRIInfo->devPrivate; - unsigned char *saveAddr = pVia->FBBase + pVIADRI->fbOffset; + unsigned char *saveAddr = pVia->FBBase + pVIADRI->fbOffset; unsigned long saveSize = pVIADRI->fbSize; if (pVia->driOffScreenSave) { - memcpy(saveAddr, - (void *)ALIGN_TO((unsigned long)pVia->driOffScreenSave, 16), - saveSize); - free(pVia->driOffScreenSave); - pVia->driOffScreenSave = NULL; + memcpy(saveAddr, + (void *)ALIGN_TO((unsigned long)pVia->driOffScreenSave, 16), + saveSize); + free(pVia->driOffScreenSave); + pVia->driOffScreenSave = NULL; } } Index: src/via_shadow.c =================================================================== --- src/via_shadow.c (revision 487) +++ src/via_shadow.c (revision 553) @@ -38,15 +38,15 @@ VIAPtr pVia = VIAPTR(pScrn); int width, height, Bpp, FBPitch; unsigned char *src, *dst; - + Bpp = pScrn->bitsPerPixel >> 3; FBPitch = BitmapBytePad(pScrn->displayWidth * pScrn->bitsPerPixel); while (num--) { width = (pbox->x2 - pbox->x1) * Bpp; height = pbox->y2 - pbox->y1; - src = pVia->ShadowPtr + (pbox->y1 * pVia->ShadowPitch) + - (pbox->x1 * Bpp); + src = (pVia->ShadowPtr + (pbox->y1 * pVia->ShadowPitch) + + (pbox->x1 * Bpp)); dst = pVia->FBBase + (pbox->y1 * FBPitch) + (pbox->x1 * Bpp); while (height--) { @@ -54,12 +54,11 @@ dst += FBPitch; src += pVia->ShadowPitch; } - + pbox++; } -} +} - static void VIAPointerMoved(int index, int x, int y) { @@ -70,17 +69,14 @@ if (pVia->rotate == 1) { newX = pScrn->pScreen->height - y - 1; newY = x; - } - else { + } else { newX = y; newY = pScrn->pScreen->width - x - 1; - } - (*pVia->PointerMoved)(index, newX, newY); + (*pVia->PointerMoved) (index, newX, newY); } - static void VIARefreshArea8(ScrnInfoPtr pScrn, int num, BoxPtr pbox) { @@ -99,13 +95,12 @@ height = (y2 - y1) >> 2; /* in dwords */ if (pVia->rotate == 1) { - dstPtr = pVia->FBBase + (pbox->x1 * dstPitch) + - pScrn->virtualX - y2; + dstPtr = (pVia->FBBase + + (pbox->x1 * dstPitch) + pScrn->virtualX - y2); srcPtr = pVia->ShadowPtr + ((1 - y2) * srcPitch) + pbox->x1; - } - else { - dstPtr = pVia->FBBase + - ((pScrn->virtualY - pbox->x2) * dstPitch) + y1; + } else { + dstPtr = (pVia->FBBase + + ((pScrn->virtualY - pbox->x2) * dstPitch) + y1); srcPtr = pVia->ShadowPtr + (y1 * srcPitch) + pbox->x2 - 1; } @@ -113,23 +108,22 @@ src = srcPtr; dst = (CARD32*) dstPtr; count = height; - + while (count--) { - *(dst++) = src[0] | (src[srcPitch] << 8) | - (src[srcPitch * 2] << 16) | - (src[srcPitch * 3] << 24); + *(dst++) = (src[0] | (src[srcPitch] << 8) | + (src[srcPitch * 2] << 16) | + (src[srcPitch * 3] << 24)); src += srcPitch * 4; } - + srcPtr += pVia->rotate; dstPtr += dstPitch; } pbox++; } -} +} - static void VIARefreshArea16(ScrnInfoPtr pScrn, int num, BoxPtr pbox) { @@ -141,35 +135,34 @@ dstPitch = pScrn->displayWidth; srcPitch = -pVia->rotate * pVia->ShadowPitch >> 1; - while(num--) { + while (num--) { width = pbox->x2 - pbox->x1; y1 = pbox->y1 & ~1; y2 = (pbox->y2 + 1) & ~1; height = (y2 - y1) >> 1; /* in dwords */ if (pVia->rotate == 1) { - dstPtr = (CARD16*)pVia->FBBase + - (pbox->x1 * dstPitch) + pScrn->virtualX - y2; - srcPtr = (CARD16*)pVia->ShadowPtr + - ((1 - y2) * srcPitch) + pbox->x1; - } - else { - dstPtr = (CARD16*)pVia->FBBase + - ((pScrn->virtualY - pbox->x2) * dstPitch) + y1; - srcPtr = (CARD16*)pVia->ShadowPtr + - (y1 * srcPitch) + pbox->x2 - 1; + dstPtr = ((CARD16*) pVia->FBBase + + (pbox->x1 * dstPitch) + pScrn->virtualX - y2); + srcPtr = ((CARD16*) pVia->ShadowPtr + + ((1 - y2) * srcPitch) + pbox->x1); + } else { + dstPtr = ((CARD16*) pVia->FBBase + + ((pScrn->virtualY - pbox->x2) * dstPitch) + y1); + srcPtr = ((CARD16*) pVia->ShadowPtr + + (y1 * srcPitch) + pbox->x2 - 1); } while (width--) { src = srcPtr; - dst = (CARD32*)dstPtr; + dst = (CARD32*) dstPtr; count = height; - + while (count--) { *(dst++) = src[0] | (src[srcPitch] << 16); src += srcPitch * 2; } - + srcPtr += pVia->rotate; dstPtr += dstPitch; } @@ -178,7 +171,7 @@ } } -#ifdef UNUSED +#if 0 /* this one could be faster */ void VIARefreshArea24(ScrnInfoPtr pScrn, int num, BoxPtr pbox) @@ -198,41 +191,40 @@ height = (y2 - y1) >> 2; /* blocks of 3 dwords */ if (pVia->rotate == 1) { - dstPtr = pVia->FBBase + - (pbox->x1 * dstPitch) + ((pScrn->virtualX - y2) * 3); + dstPtr = (pVia->FBBase + + (pbox->x1 * dstPitch) + ((pScrn->virtualX - y2) * 3)); srcPtr = pVia->ShadowPtr + ((1 - y2) * srcPitch) + (pbox->x1 * 3); - } - else { - dstPtr = pVia->FBBase + - ((pScrn->virtualY - pbox->x2) * dstPitch) + (y1 * 3); + } else { + dstPtr = (pVia->FBBase + + ((pScrn->virtualY - pbox->x2) * dstPitch) + (y1 * 3)); srcPtr = pVia->ShadowPtr + (y1 * srcPitch) + (pbox->x2 * 3) - 3; } while (width--) { src = srcPtr; - dst = (CARD32*)dstPtr; + dst = (CARD32*) dstPtr; count = height; - while(count--) { - dst[0] = src[0] | (src[1] << 8) | (src[2] << 16) | - (src[srcPitch] << 24); - dst[1] = src[srcPitch + 1] | (src[srcPitch + 2] << 8) | - (src[srcPitch * 2] << 16) | - (src[(srcPitch * 2) + 1] << 24); - dst[2] = src[(srcPitch * 2) + 2] | (src[srcPitch * 3] << 8) | - (src[(srcPitch * 3) + 1] << 16) | - (src[(srcPitch * 3) + 2] << 24); + while (count--) { + dst[0] = (src[0] | (src[1] << 8) | (src[2] << 16) | + (src[srcPitch] << 24)); + dst[1] = (src[srcPitch + 1] | (src[srcPitch + 2] << 8) | + (src[srcPitch * 2] << 16) | + (src[(srcPitch * 2) + 1] << 24)); + dst[2] = (src[(srcPitch * 2) + 2] | (src[srcPitch * 3] << 8) | + (src[(srcPitch * 3) + 1] << 16) | + (src[(srcPitch * 3) + 2] << 24)); dst += 3; src += srcPitch * 4; } - + srcPtr += pVia->rotate * 3; - dstPtr += dstPitch; + dstPtr += dstPitch; } pbox++; } } -#endif /* UNUSED */ +#endif static void VIARefreshArea32(ScrnInfoPtr pScrn, int num, BoxPtr pbox) @@ -249,28 +241,27 @@ height = pbox->y2 - pbox->y1; if (pVia->rotate == 1) { - dstPtr = (CARD32*)pVia->FBBase + - (pbox->x1 * dstPitch) + pScrn->virtualX - pbox->y2; - srcPtr = (CARD32*)pVia->ShadowPtr + - ((1 - pbox->y2) * srcPitch) + pbox->x1; - } - else { - dstPtr = (CARD32*)pVia->FBBase + - ((pScrn->virtualY - pbox->x2) * dstPitch) + pbox->y1; - srcPtr = (CARD32*)pVia->ShadowPtr + - (pbox->y1 * srcPitch) + pbox->x2 - 1; + dstPtr = ((CARD32*) pVia->FBBase + + (pbox->x1 * dstPitch) + pScrn->virtualX - pbox->y2); + srcPtr = ((CARD32*) pVia->ShadowPtr + + ((1 - pbox->y2) * srcPitch) + pbox->x1); + } else { + dstPtr = ((CARD32*) pVia->FBBase + + ((pScrn->virtualY - pbox->x2) * dstPitch) + pbox->y1); + srcPtr = ((CARD32*) pVia->ShadowPtr + + (pbox->y1 * srcPitch) + pbox->x2 - 1); } - while(width--) { + while (width--) { src = srcPtr; dst = dstPtr; count = height; - - while(count--) { + + while (count--) { *(dst++) = *src; src += srcPitch; } - + srcPtr += pVia->rotate; dstPtr += dstPitch; } @@ -279,35 +270,31 @@ } } -/* - * - */ void ViaShadowFBInit(ScrnInfoPtr pScrn, ScreenPtr pScreen) { VIAPtr pVia = VIAPTR(pScrn); RefreshAreaFuncPtr refreshArea = VIARefreshArea; - + if (pVia->rotate) { - if (!pVia->PointerMoved) { - pVia->PointerMoved = pScrn->PointerMoved; - pScrn->PointerMoved = VIAPointerMoved; - } - - switch(pScrn->bitsPerPixel) { - case 8: - refreshArea = VIARefreshArea8; - break; - case 16: - refreshArea = VIARefreshArea16; - break; - case 32: - refreshArea = VIARefreshArea32; - break; - } + if (!pVia->PointerMoved) { + pVia->PointerMoved = pScrn->PointerMoved; + pScrn->PointerMoved = VIAPointerMoved; + } + + switch (pScrn->bitsPerPixel) { + case 8: + refreshArea = VIARefreshArea8; + break; + case 16: + refreshArea = VIARefreshArea16; + break; + case 32: + refreshArea = VIARefreshArea32; + break; + } } - + ShadowFBInit(pScreen, refreshArea); xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ShadowFB initialised.\n"); } - Index: src/via.h =================================================================== --- src/via.h (revision 487) +++ src/via.h (revision 553) @@ -25,8 +25,6 @@ #ifndef _VIA_H_ #define _VIA_H_ 1 -#include "xorgVersion.h" - #include #include #include @@ -664,4 +662,20 @@ #define VBE_DEFAULT_REFRESH 6000 +#ifdef XSERVER_LIBPCIACCESS +#define VIA_MEMBASE(p,n) (p)->regions[(n)].base_addr +#define VENDOR_ID(p) (p)->vendor_id +#define DEVICE_ID(p) (p)->device_id +#define SUBVENDOR_ID(p) (p)->subvendor_id +#define SUBSYS_ID(p) (p)->subdevice_id +#define CHIP_REVISION(p) (p)->revision +#else +#define VIA_MEMBASE(p,n) (p)->memBase[n] +#define VENDOR_ID(p) (p)->vendor +#define DEVICE_ID(p) (p)->chipType +#define SUBVENDOR_ID(p) (p)->subsysVendor +#define SUBSYS_ID(p) (p)->subsysCard +#define CHIP_REVISION(p) (p)->chipRev +#endif + #endif /* _VIA_H_ */ Index: src/Makefile.am =================================================================== --- src/Makefile.am (revision 487) +++ src/Makefile.am (revision 553) @@ -31,20 +32,20 @@ openchrome_drv_ladir = @moduledir@/drivers openchrome_drv_la_SOURCES = \ - via_3d_reg.h \ - via_3d.c \ - via_3d.h \ + via.h \ + via_3d.c \ + via_3d.h \ + via_3d_reg.h \ via_accel.c \ via_bandwidth.c \ via_bios.h \ - via_ch7xxx.c \ - via_ch7xxx.h \ + via_ch7xxx.c \ + via_ch7xxx.h \ via_cursor.c \ via_dga.c \ - via_dmabuffer.h \ + via_dmabuffer.h \ via_driver.c \ via_driver.h \ - via.h \ via_i2c.c \ via_id.c \ via_id.h \ @@ -58,7 +59,7 @@ via_shadow.c \ via_swov.c \ via_swov.h \ - via_vbe.c \ + via_vbe.c \ via_vgahw.c \ via_vgahw.h \ via_video.c \ @@ -74,7 +75,6 @@ via_drmclient.h \ via_xvmc.c \ via_xvmc.h - else EXTRA_DIST += \ via_dri.c \ @@ -84,16 +84,20 @@ via_xvmc.h endif + via_driver.lo: svnversion.h -svnversion.h: +svnversion.h: $(openchrome_drv_la_SOURCES) @if [ -f svnrelease.h ]; then \ echo '#include "svnrelease.h"' > $@.tmp; \ elif [ -d .svn ]; then \ echo '#define BUILDCOMMENT "(development build, at svn revision '\ - "`svnversion -nc .. | sed -e s/^[^:]*://`"')\n"' > $@.tmp; \ - else date +'#define BUILDCOMMENT "(development build, compiled on %c)\n"' > $@.tmp; fi + "`svnversion -nc .. | sed -e s/^[^:]*://`"')"' > $@.tmp; \ + else \ + date +'#define BUILDCOMMENT "(development build, compiled on %c)"' \ + > $@.tmp; \ + fi - @(chmod 666 $@.tmp 2> /dev/null || /bin/true) - @cmp -s $@ $@.tmp || (mv $@.tmp $@ ; echo created $@) + @chmod 666 $@.tmp + @mv $@.tmp $@ + @echo "created $@" -.PHONY: svnversion.h Index: src/via_id.c =================================================================== --- src/via_id.c (revision 487) +++ src/via_id.c (revision 553) @@ -30,6 +30,7 @@ #endif #include "via_driver.h" +#include "via.h" #include "via_id.h" /* @@ -144,6 +145,7 @@ {"Clevo/RoverBook Voyager V511L", VIA_VM800, 0x1558, 0x0662, VIA_DEVICE_CRT | VIA_DEVICE_LCD}, {"Clevo M5xxS", VIA_VM800, 0x1558, 0x5406, VIA_DEVICE_CRT | VIA_DEVICE_LCD}, {"Biostar P4M80-M4 / P4VMA-M", VIA_VM800, 0x1565, 0x1202, VIA_DEVICE_CRT}, + {"Biostar P4M800 Pro-M7", VIA_VM800, 0x1565, 0x1206, VIA_DEVICE_CRT}, {"Fujitsu/Siemens Amilo Pro V2030", VIA_VM800, 0x1734, 0x109B, VIA_DEVICE_CRT | VIA_DEVICE_LCD}, {"Fujitsu/Siemens Amilo Pro V2035", VIA_VM800, 0x1734, 0x10AE, VIA_DEVICE_CRT | VIA_DEVICE_LCD}, {"Fujitsu/Siemens Amilo Pro V2055", VIA_VM800, 0x1734, 0x10CA, VIA_DEVICE_CRT | VIA_DEVICE_LCD}, @@ -160,21 +162,31 @@ {"Fujitsu/Siemens Amilo La 1703", VIA_K8M890, 0x1734, 0x10D9, VIA_DEVICE_CRT | VIA_DEVICE_LCD}, /*** P4M900, VN896, CN896 ***/ + {"VIA Epia SN", VIA_P4M900, 0x0908, 0x1975, VIA_DEVICE_CRT}, {"Asustek P5VD2-VM", VIA_P4M900, 0x1043, 0x81CE, VIA_DEVICE_CRT}, + {"Asustek P5VD2-VM SE", VIA_P4M900, 0x1043, 0x8252, VIA_DEVICE_CRT}, + {"Mitac 8515", VIA_P4M900, 0x1071, 0x8515, VIA_DEVICE_CRT | VIA_DEVICE_LCD}, + {"Medion Notebook MD96483", VIA_P4M900, 0x1071, 0x8615, VIA_DEVICE_CRT | VIA_DEVICE_LCD}, + {"Mitac 8624", VIA_P4M900, 0x1071, 0x8624, VIA_DEVICE_CRT | VIA_DEVICE_LCD}, {"VIA VT3364 (P4M900)", VIA_P4M900, 0x1106, 0x3371, VIA_DEVICE_CRT | VIA_DEVICE_LCD}, {"Gigabyte GA-VM900M", VIA_P4M900, 0x1458, 0xD000, VIA_DEVICE_CRT}, {"MSI P4M900M / P4M900M2-F/L", VIA_P4M900, 0x1462, 0x7255, VIA_DEVICE_CRT}, {"Everex NC1501/NC1503", VIA_P4M900, 0x1509, 0x1E30, VIA_DEVICE_CRT | VIA_DEVICE_LCD}, {"Clevo M660SE", VIA_P4M900, 0x1558, 0x0664, VIA_DEVICE_CRT | VIA_DEVICE_LCD}, + {"Clevo M660SR", VIA_P4M900, 0x1558, 0x0669, VIA_DEVICE_CRT | VIA_DEVICE_LCD}, {"Neo Endura 540SLe", VIA_P4M900, 0x1558, 0x5408, VIA_DEVICE_CRT | VIA_DEVICE_LCD}, + {"Clevo M54xSR", VIA_P4M900, 0x1558, 0x5409, VIA_DEVICE_CRT | VIA_DEVICE_LCD}, {"Biostar P4M900M-M7 SE", VIA_P4M900, 0x1565, 0x1207, VIA_DEVICE_CRT}, {"Fujitsu/Siemens Amilo Pro V3515", VIA_P4M900, 0x1734, 0x10CB, VIA_DEVICE_CRT | VIA_DEVICE_LCD}, {"Fujitsu/Siemens Amilo Li1705", VIA_P4M900, 0x1734, 0x10F7, VIA_DEVICE_CRT | VIA_DEVICE_LCD}, + {"ASRock P4VM900-SATA2", VIA_P4M900, 0x1849, 0x3371, VIA_DEVICE_CRT}, /*** CX700 ***/ {"VIA VT8454B", VIA_CX700, 0x0908, 0x1975, VIA_DEVICE_CRT}, /* Evaluation board, reference possibly wrong */ {"VIA VT3324 (CX700)", VIA_CX700, 0x1106, 0x3157, VIA_DEVICE_CRT}, + {"MSI Fuzzy CX700/CX700D", VIA_CX700, 0x1462, 0x8020, VIA_DEVICE_CRT | VIA_DEVICE_LCD | VIA_DEVICE_TV}, {"FIC CE260", VIA_CX700, 0x1509, 0x2D30, VIA_DEVICE_LCD}, + {"Packard Bell EasyNote XS", VIA_CX700, 0x1631, 0xC201, VIA_DEVICE_LCD}, /* aka Everex Cloudbook CE1200V */ /*** P4M890, VN890 ***/ {"PCChips P29G", VIA_P4M890, 0x1019, 0x1629, VIA_DEVICE_CRT}, @@ -218,15 +230,15 @@ struct ViaCardIdStruct *Id; VIAPtr pVia = VIAPTR(pScrn); - if ((pVia->PciInfo->subsysVendor == pVia->PciInfo->vendor) && - (pVia->PciInfo->subsysCard == pVia->PciInfo->chipType)) + if ((SUBVENDOR_ID(pVia->PciInfo) == VENDOR_ID(pVia->PciInfo)) && + (SUBSYS_ID(pVia->PciInfo) == DEVICE_ID(pVia->PciInfo))) xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "Manufacturer plainly copied main PCI IDs to subsystem/card IDs.\n"); for (Id = ViaCardId; Id->String; Id++) { if ((Id->Chip == pVia->Chipset) && - (Id->Vendor == pVia->PciInfo->subsysVendor) && - (Id->Device == pVia->PciInfo->subsysCard)) { + (Id->Vendor == SUBVENDOR_ID(pVia->PciInfo)) && + (Id->Device == SUBSYS_ID(pVia->PciInfo))) { xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "Detected %s.\n", Id->String); pVia->Id = Id; return; @@ -235,7 +247,7 @@ xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Unknown Card-Ids (%4X|%4X|%4X); please report to openchrome-users@openchrome.org\n", - pVia->PciInfo->chipType, pVia->PciInfo->subsysVendor, pVia->PciInfo->subsysCard); + DEVICE_ID(pVia->PciInfo), SUBVENDOR_ID(pVia->PciInfo), SUBSYS_ID(pVia->PciInfo)); pVia->Id = NULL; }