Example #1
0
void
SMI_GEReset(ScrnInfoPtr pScrn, int from_timeout, int line, char *file)
{
	SMIPtr pSmi = SMIPTR(pScrn);
	CARD8 tmp;

	ENTER_PROC("SMI_GEReset");

	if (from_timeout)
	{
		if (pSmi->GEResetCnt++ < 10 || xf86GetVerbosity() > 1)
		{
			xf86DrvMsg(pScrn->scrnIndex,X_INFO,"\tSMI_GEReset called from %s line %d\n", file, line);
		}
	}
	else
	{
		WaitIdleEmpty();
	}

	tmp = VGAIN8_INDEX(pSmi, VGA_SEQ_INDEX, VGA_SEQ_DATA, 0x15);
	VGAOUT8_INDEX(pSmi, VGA_SEQ_INDEX, VGA_SEQ_DATA, 0x15, tmp | 0x30);

	WaitIdleEmpty();

	VGAOUT8_INDEX(pSmi, VGA_SEQ_INDEX, VGA_SEQ_DATA, 0x15, tmp);
	SMI_EngineReset(pScrn);

	LEAVE_PROC("SMI_GEReset");
}
Example #2
0
static void
SMI_SetupForColor8x8PatternFill(ScrnInfoPtr pScrn, int patx, int paty, int rop,
								unsigned int planemask, int trans_color)
{
	SMIPtr pSmi = SMIPTR(pScrn);

	ENTER_PROC("SMI_SetupForColor8x8PatternFill");
	DEBUG((VERBLEV, "patx=%d paty=%d rop=%02X trans_color=%08X\n", patx, paty,
			rop, trans_color));

	pSmi->AccelCmd = XAAPatternROP[rop]
				   | SMI_BITBLT
				   | SMI_COLOR_PATTERN
				   | SMI_START_ENGINE;

	if (pScrn->bitsPerPixel <= 16)
	{
		/* PDR#950 */
		CARD8* pattern = pSmi->FBBase
					   + (patx + paty * pSmi->Stride) * pSmi->Bpp;

		WaitIdleEmpty();
		WRITE_DPR(pSmi, 0x0C, SMI_BITBLT | SMI_COLOR_PATTERN);
		memcpy(pSmi->DataPortBase, pattern, 8 * pSmi->Bpp * 8);
	}
	else
	{
		if (pScrn->bitsPerPixel == 24)
		{
			patx *= 3;

			if (pSmi->Chipset == SMI_LYNX)
			{
				paty *= 3;
			}
		}

		WaitQueue(1);
		WRITE_DPR(pSmi, 0x00, (patx << 16) | (paty & 0xFFFF));
	}

	if (trans_color == -1)
	{
		pSmi->AccelCmd |= SMI_TRANSPARENT_SRC | SMI_TRANSPARENT_PXL;

		WaitQueue(1);
		WRITE_DPR(pSmi, 0x20, trans_color);
	}

	if (pSmi->ClipTurnedOn)
	{
		WaitQueue(1);
		WRITE_DPR(pSmi, 0x2C, pSmi->ScissorsLeft);
		pSmi->ClipTurnedOn = FALSE;
	}

	LEAVE_PROC("SMI_SetupForColor8x8PatternFill");
}
Example #3
0
/* The sync function for the GE */
void
SMI_AccelSync(ScrnInfoPtr pScrn)
{
	SMIPtr pSmi = SMIPTR(pScrn);

	ENTER_PROC("SMI_AccelSync");

	WaitIdleEmpty(); /* #161 */

	LEAVE_PROC("SMI_AccelSync");
}
Example #4
0
/******************************************************************************\
|* SMI_RefreshArea
|*=============================================================================
|*
|*  PARAMETERS:		pScrn	Pointer to ScrnInfo structure.
|*					num		Number of boxes to refresh.
|*					pbox	Pointer to an array of boxes to refresh.
|*
|*  DESCRIPTION:	Refresh a portion of the shadow buffer to the visual screen
|*					buffer.  This is mainly used for rotation purposes.
|*												y
|*  RETURNS:		Nothing.
|*
\******************************************************************************/
void SMI_RefreshArea(ScrnInfoPtr pScrn, int num, BoxPtr pbox)
{
	SMIPtr pSmi = SMIPTR(pScrn);
	int width, height, srcX, srcY, destX, destY;

	ENTER_PROC("SMI_RefreshArea");

	/* #671 */
	if (pSmi->polyLines)
	{
		pSmi->polyLines = FALSE;
		return;
	}

	if (pSmi->rotate)
	{
		/* IF we need to do rotation, setup the hardware here. */
		WaitIdleEmpty();
		WRITE_DPR(pSmi, 0x10, pSmi->ShadowPitch);
		WRITE_DPR(pSmi, 0x3C, pSmi->ShadowPitch);
		WRITE_DPR(pSmi, 0x44, pSmi->FBOffset >> 3);
	}
Example #5
0
void
SMI_EngineReset(ScrnInfoPtr pScrn)
{
	SMIPtr pSmi = SMIPTR(pScrn);
	CARD32 DEDataFormat = 0;
	int i;
	int xyAddress[] = { 320, 400, 512, 640, 800, 1024, 1280, 1600, 2048 };

	ENTER_PROC("SMI_EngineReset");

	pSmi->Stride = (pSmi->width * pSmi->Bpp + 15) & ~15;

	switch (pScrn->bitsPerPixel)
	{
		case 8:
			DEDataFormat = 0x00000000;
			break;

		case 16:
			pSmi->Stride >>= 1;
			DEDataFormat = 0x00100000;
			break;

		case 24:
			DEDataFormat = 0x00300000;
			break;

		case 32:
			pSmi->Stride >>= 2;
			DEDataFormat = 0x00200000;
			break;
	}
	for (i = 0; i < sizeof(xyAddress) / sizeof(xyAddress[0]); i++)
	{
		if (pSmi->rotate)
		{
			if (xyAddress[i] == pSmi->height)
			{
				DEDataFormat |= i << 16;
				break;
			}
		}
		else
		{
			if (xyAddress[i] == pSmi->width)
			{
				DEDataFormat |= i << 16;
				break;
			}
		}
	}

	WaitIdleEmpty();
	WRITE_DPR(pSmi, 0x10, (pSmi->Stride << 16) | pSmi->Stride);
	WRITE_DPR(pSmi, 0x1C, DEDataFormat);
	WRITE_DPR(pSmi, 0x24, 0xFFFFFFFF);
	WRITE_DPR(pSmi, 0x28, 0xFFFFFFFF);
	WRITE_DPR(pSmi, 0x3C, (pSmi->Stride << 16) | pSmi->Stride);
	WRITE_DPR(pSmi, 0x40, 0);
	WRITE_DPR(pSmi, 0x44, 0);

	SMI_DisableClipping(pScrn);

	LEAVE_PROC("SMI_EngineReset");
}