⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pvr_pdump.c

📁 Lido PXA270平台开发板的最新BSP,包括源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
	return IMG_TRUE;
}

/*****************************************************************************
 FUNCTION	: 	PDumpLinear
 PURPOSE	:	
 PARAMETERS	: 	
 RETURNS	: 	
*****************************************************************************/
IMG_BOOL PDumpLinear(PDUMP_CONTEXT *psPDContext,
					 IMG_CHAR		*pszComment,
					 IMG_UINT32		*pui32Data,
					 IMG_UINT32		ui32Base,
					 IMG_UINT32		ui32Size)
{
	IMG_UINT32	ui32Pos;
	IMG_CHAR	szTmpStr[256];
	IMG_UINT32	ui32Frame;
	IMG_BOOL	bIs2DWrite;

	VALIDATE_PDUMP_CONTEXT(psPDContext)

	/*
		If were using the global context directly, then
		this is a 2d write
	*/
	bIs2DWrite		= psPDContext->bGlobalContext;

	ui32Frame = psPDContext->ui32CurrentFrame;

	if(!psPDContext->psPDumpMemMap->bPDumpingOn)
	{
		return IMG_FALSE;
	}

	if(!ui32Frame ||
		((ui32Frame >= psPDContext->ui32StartFrame) &&
		(ui32Frame <= psPDContext->ui32StopFrame) &&
		!(ui32Frame%psPDContext->ui32SkipFrame)))
	{
		VALIDATE_PDUMP_FILE(psPDContext->fpPrim, psPDContext->szPrimFilePath, psPDContext->szPrimFileName)

		ui32Pos	= ftell(psPDContext->fpPrim);

		if(!fwrite(pui32Data, ui32Size, 1, psPDContext->fpPrim))
		{
			return IMG_FALSE;
		}
		fflush(psPDContext->fpPrim);
		psPDContext->ui32PrmPos +=	ui32Size;

		sprintf(szTmpStr,"\r\nLDB :FB:%8.8lX %8.8lX %8.8lX %s\r\n", 
				ui32Base, 
				ui32Pos, 
				ui32Size,
				psPDContext->szPrimFileName);
		
		if(!DumpScriptLine(psPDContext, szTmpStr, strlen(szTmpStr), bIs2DWrite))
		{
			return IMG_FALSE;
		}
	}

	return IMG_TRUE;
}

/*****************************************************************************
 PDUMP Functions for backwards compatibility
*****************************************************************************/
/* FIXME - remove these and update various PDUMP calls to use new interface */

IMG_VOID PDumpStart(IMG_VOID)
{
	PDumpEnable();
}

IMG_VOID PDumpStop(IMG_VOID)
{
	PDumpDisable();
}

IMG_VOID PDumpComment(IMG_CHAR *pszComment)
{
	IMG_CHAR	szTmp[256];
	sprintf(szTmp, "-- %s", pszComment);
	PDumpString(IMG_NULL, szTmp);
}

IMG_VOID PDumpScript(IMG_CHAR *pszFormat, ...)
{
	IMG_CHAR	pszScript[128];
	va_list		params;

	va_start(params, pszFormat);
	vsprintf(pszScript, pszFormat, params);
	va_end(params);

	PDumpString(IMG_NULL, pszScript);
}

IMG_VOID PDumpScriptV(IMG_CHAR *pszFormat, IMG_VOID *pvArgs)
{
	PDumpFormatStringV(IMG_NULL, pszFormat, pvArgs);
}

IMG_VOID PDumpSPRepeat(IMG_UINT32 ui32SPTag, IMG_UINT32 ui32Offset, IMG_UINT32 *pui32Data, IMG_UINT32 ui32Count)
{
	PDumpSPBatch(IMG_NULL, ui32SPTag, pui32Data, ui32Count);
}

IMG_VOID PDumpSlavePortKM(IMG_UINT32 ui32SPTag, IMG_UINT32 ui32Data)
{
	PDumpSlavePort(IMG_NULL, ui32SPTag, ui32Data);
}

IMG_VOID PDumpLin(IMG_CHAR *pszComment, IMG_UINT32 *pui32Data, IMG_UINT32 ui32Base, IMG_UINT32 ui32Size)
{
	PDumpLinear(IMG_NULL, pszComment, pui32Data, ui32Base, ui32Size);
}

/***********************************************************************************
 Function Name      : DumpScriptLine
 Inputs             : psPDContext, pszString, ui32Bytes
 Returns            : Success
 Description        : PDUMPing control logic and file writes
************************************************************************************/

IMG_BOOL DumpScriptLine (PDUMP_CONTEXT	*psPDContext, 
						 IMG_CHAR*		pszString, 
						 IMG_UINT32		ui32Bytes, 
						 IMG_BOOL		bIs2DWrite)
{
	IMG_BOOL		*pbScriptConfigured;
	IMG_HANDLE		**pphFile;
	IMG_CHAR		*pszFilePath;
	IMG_CHAR		*pszFileName;
	IMG_BOOL		bRetVal;

	if(bIs2DWrite)
	{
		/*
			We want to PDUMP to memory files for HW verifier, even
			if normal 2d PDUMPing is disabled
		*/
		if(psPDContext->bVirtualContextEnabled)
		{
			return MemDumpScriptLine(psPDContext, pszString, ui32Bytes);
		}

		if(!psPDContext->psPDumpMemMap->b2DEnabled)
		{
			return IMG_TRUE;
		}
		else
		{
			pphFile				= &psPDContext->fp2DScript;
			pszFilePath			= psPDContext->sz2DScriptFilePath;
			pszFileName			= psPDContext->sz2DScriptFileName;
			pbScriptConfigured	= &psPDContext->b2DScriptConfigured;
		}
	}
	else
	{
		/*
			We want to write all non 2d script commands to the global script file
			unless otherwise specified
		*/
		if(psPDContext->bLocalScriptDumpingOn)
		{
			pphFile				= &psPDContext->fpScript;
			pszFilePath			= psPDContext->szScriptFilePath;
			pszFileName			= psPDContext->szScriptFileName;
			pbScriptConfigured	= &psPDContext->bScriptConfigured;
		}
		else
		{
			pphFile				= &psPDContext->psPDumpMemMap->psGlobalContext->fpScript;
			pszFilePath			= psPDContext->psPDumpMemMap->psGlobalContext->szScriptFilePath;
			pszFileName			= psPDContext->psPDumpMemMap->psGlobalContext->szScriptFileName;
			pbScriptConfigured	= &psPDContext->psPDumpMemMap->psGlobalContext->bScriptConfigured;
		}
	}

	/*
		Check to see if script file exists
	*/
	VALIDATE_PDUMP_FILE(*pphFile, pszFilePath, pszFileName)

	if(!(*pbScriptConfigured))
	{
		ConfigureScriptFile(psPDContext, *pphFile);
		*pbScriptConfigured = IMG_TRUE;
	}

	bRetVal = fwrite(pszString, ui32Bytes, 1, *pphFile);
	fflush(*pphFile);
	return bRetVal;
}

/***********************************************************************************
 Function Name      : MemDumpScriptLine
 Inputs             : psPDContext, pszString, ui32Bytes
 Outputs            : 
 Returns            : Success
 Description        : Writes a line to the memory script file
************************************************************************************/

IMG_BOOL MemDumpScriptLine (PDUMP_CONTEXT *psPDContext, IMG_CHAR* pszString, IMG_UINT32 ui32Bytes)
{
	/*
		Write to virtual file
	*/
	if(psPDContext->ui32MemFileIndex + ui32Bytes > psPDContext->ui32MemFileByteCount)
	{
		IMG_VOID	*pvTemp;
		IMG_UINT32	ui32NewSize = psPDContext->ui32MemFileByteCount + (200 * 40);

		/*
			reallocate mem file to add another 200 lines of 40 chars
		*/
		if(HostAllocMem(PVRSRV_HOST_PAGEABLE_HEAP, ui32NewSize, &pvTemp, 0) != PVRSRV_OK)
		{
			return IMG_FALSE;
		}

		/*
			Copy existing data and free up old buffer
		*/
		HostMemCopy(pvTemp,	psPDContext->pvMemFile, psPDContext->ui32MemFileByteCount);
		HostFreeMem(PVRSRV_HOST_PAGEABLE_HEAP, psPDContext->pvMemFile);

		psPDContext->pvMemFile				= pvTemp;
		psPDContext->ui32MemFileByteCount	= ui32NewSize;
	}

	/*
		Copy data to mem file
	*/
	HostMemCopy((IMG_VOID *)(((IMG_CHAR *)psPDContext->pvMemFile) + psPDContext->ui32MemFileIndex),
				pszString,
				ui32Bytes);

	psPDContext->ui32MemFileIndex += ui32Bytes;
	return IMG_TRUE;
}

/***********************************************************************************
 Function Name      : WriteLine
 Description        : Writes to file or memfile dependant on value of phfile
************************************************************************************/
IMG_VOID WriteLine(PDUMP_CONTEXT *psPDContext, IMG_CHAR *pszString, IMG_UINT32 ui32Bytes, IMG_HANDLE *phFile)
{
	if(phFile == IMG_NULL)
	{
		MemDumpScriptLine(psPDContext, pszString, ui32Bytes);
	}
	else
	{
		fwrite(pszString, ui32Bytes, 1, phFile);
		fflush(phFile);
	}
}
/***********************************************************************************
 Function Name      : ConfigureScriptFile
 Inputs             : psPDContext, pFile
 Description        : Writes config data to a script file
************************************************************************************/
IMG_VOID ConfigureScriptFile(PDUMP_CONTEXT *psPDContext, IMG_HANDLE *phFile)
{
	IMG_UINT32	ui32Addr;
	IMG_CHAR	pszTmpString[256];

	/*
		Dump Sim config data as defined in sim memory.h file

		#define	MBX1_REG_READ_REGISTER_START_ADDRESS					0x00000000
		#define	MBX1_REG_WRITE_REGISTER_START_ADDRESS					0x00001000
	*/
	ui32Addr = psPDContext->psPDumpMemMap->sMBX.ui32RegBase;
	sprintf(pszTmpString, "WRW :CFG:00000000 %8.8lX\r\n",ui32Addr);
	WriteLine(psPDContext, pszTmpString, strlen(pszTmpString), phFile);
	sprintf(pszTmpString, "WRW :CFG:00001000 %8.8lX\r\n",ui32Addr);
	WriteLine(psPDContext, pszTmpString, strlen(pszTmpString), phFile);

	/*
		#define	MBX1_REG_READ_REGISTER_END_ADDRESS						0x00000004	
		#define	MBX1_REG_WRITE_REGISTER_END_ADDRESS						0x00001004
	*/
	ui32Addr = psPDContext->psPDumpMemMap->sMBX.ui32RegBase +
			   psPDContext->psPDumpMemMap->sMBX.ui32RegRange -1;
	sprintf(pszTmpString, "WRW :CFG:00000004 %8.8lX\r\n",ui32Addr);
	WriteLine(psPDContext, pszTmpString, strlen(pszTmpString), phFile);
	sprintf(pszTmpString, "WRW :CFG:00001004 %8.8lX\r\n",ui32Addr);
	WriteLine(psPDContext, pszTmpString, strlen(pszTmpString), phFile);

	/*
		#define	MBX1_REG_READ_FRAME_BUFFER_START_ADDRESS				0x00000008
		#define	MBX1_REG_WRITE_FRAME_BUFFER_START_ADDRESS				0x00001008
	*/
	ui32Addr = psPDContext->psPDumpMemMap->ui32FBBase;
	sprintf(pszTmpString, "WRW :CFG:00000008 %8.8lX\r\n",ui32Addr);
	WriteLine(psPDContext, pszTmpString, strlen(pszTmpString), phFile);
	sprintf(pszTmpString, "WRW :CFG:00001008 %8.8lX\r\n",ui32Addr);
	WriteLine(psPDContext, pszTmpString, strlen(pszTmpString), phFile);

	/*
		#define	MBX1_REG_READ_FRAME_BUFFER_END_ADDRESS					0x0000000C
		#define	MBX1_REG_WRITE_FRAME_BUFFER_END_ADDRESS					0x0000100C
	*/
	ui32Addr = psPDContext->psPDumpMemMap->ui32FBBase +
				psPDContext->psPDumpMemMap->ui32FBRange -1;
	sprintf(pszTmpString, "WRW :CFG:0000000C %8.8lX\r\n",ui32Addr);
	WriteLine(psPDContext, pszTmpString, strlen(pszTmpString), phFile);
	sprintf(pszTmpString, "WRW :CFG:0000100C %8.8lX\r\n",ui32Addr);
	WriteLine(psPDContext, pszTmpString, strlen(pszTmpString), phFile);

	/*
		#define	MBX1_REG_READ_TA_SLAVE_PORT_START_ADDRESS				0x00000010
		#define	MBX1_REG_WRITE_TA_SLAVE_PORT_START_ADDRESS				0x00001010
	*/
	ui32Addr = psPDContext->psPDumpMemMap->sMBX.ui32SPDataStart;
	sprintf(pszTmpString, "WRW :CFG:00000010 %8.8lX\r\n",ui32Addr);
	WriteLine(psPDContext, pszTmpString, strlen(pszTmpString), phFile);
	sprintf(pszTmpString, "WRW :CFG:00001010 %8.8lX\r\n",ui32Addr);
	WriteLine(psPDContext, pszTmpString, strlen(pszTmpString), phFile);

	/*
		#define	MBX1_REG_READ_TA_SLAVE_PORT_END_ADDRESS					0x00000014
		#define	MBX1_REG_WRITE_TA_SLAVE_PORT_END_ADDRESS				0x00001014
	*/
	ui32Addr = psPDContext->psPDumpMemMap->sMBX.ui32SPDataStart +
			   psPDContext->psPDumpMemMap->sMBX.ui32SPDataRange -1;
	sprintf(pszTmpString, "WRW :CFG:00000014 %8.8lX\r\n",ui32Addr);
	WriteLine(psPDContext, pszTmpString, strlen(pszTmpString), phFile);
	sprintf(pszTmpString, "WRW :CFG:00001014 %8.8lX\r\n",ui32Addr);
	WriteLine(psPDContext, pszTmpString, strlen(pszTmpString), phFile);

	/*
		#define	MBX1_REG_READ_2D_SLAVE_PORT_START_ADDRESS				0x00000018
		#define	MBX1_REG_WRITE_2D_SLAVE_PORT_START_ADDRESS				0x00001018
	*/

	ui32Addr = psPDContext->psPDumpMemMap->sMBX.ui32SP2DStart;
	sprintf(pszTmpString, "WRW :CFG:00000018 %8.8lX\r\n",ui32Addr);
	WriteLine(psPDContext, pszTmpString, strlen(pszTmpString), phFile);
	sprintf(pszTmpString, "WRW :CFG:00001018 %8.8lX\r\n",ui32Addr);
	WriteLine(psPDContext, pszTmpString, strlen(pszTmpString), phFile);

	/*
		#define	MBX1_REG_READ_2D_SLAVE_PORT_END_ADDRESS					0x0000001C
		#define	MBX1_REG_WRITE_2D_SLAVE_PORT_END_ADDRESS				0x0000101C
	*/
	ui32Addr = psPDContext->psPDumpMemMap->sMBX.ui32SP2DStart +
			   psPDContext->psPDumpMemMap->sMBX.ui32SP2DRange -1;
	sprintf(pszTmpString, "WRW :CFG:0000001C %8.8lX\r\n",ui32Addr);
	WriteLine(psPDContext, pszTmpString, strlen(pszTmpString), phFile);
	sprintf(pszTmpString, "WRW :CFG:0000101C %8.8lX\r\n",ui32Addr);
	WriteLine(psPDContext, pszTmpString, strlen(pszTmpString), phFile);

	/*

		#define	MBX1_REG_READ_TA_SLAVE_PORT_TERMINATE_START_ADDRESS		0x00000020
		#define	MBX1_REG_WRITE_TA_SLAVE_PORT_TERMINATE_START_ADDRESS	0x00001020
	*/
	ui32Addr = psPDContext->psPDumpMemMap->sMBX.ui32SPTermStart;
	sprintf(pszTmpString, "WRW :CFG:00000020 %8.8lX\r\n",ui32Addr);
	WriteLine(psPDContext, pszTmpString, strlen(pszTmpString), phFile);
	sprintf(pszTmpString, "WRW :CFG:00001020 %8.8lX\r\n",ui32Addr);
	WriteLine(psPDContext, pszTmpString, strlen(pszTmpString), phFile);

	/*
		#define	MBX1_REG_READ_TA_SLAVE_PORT_TERMINATE_END_ADDRESS		0x00000024
		#define	MBX1_REG_WRITE_TA_SLAVE_PORT_TERMINATE_END_ADDRESS		0x00001024
	*/
	ui32Addr = psPDContext->psPDumpMemMap->sMBX.ui32SPTermStart +
			   psPDContext->psPDumpMemMap->sMBX.ui32SPTermRange -1;
	sprintf(pszTmpString, "WRW :CFG:00000024 %8.8lX\r\n",ui32Addr);
	WriteLine(psPDContext, pszTmpString, strlen(pszTmpString), phFile);
	sprintf(pszTmpString, "WRW :CFG:00001024 %8.8lX\r\n",ui32Addr);
	WriteLine(psPDContext, pszTmpString, strlen(pszTmpString), phFile);

	/*
		#define	MBX1_REG_READ_ENABLE_TNL_VGP							0x00000028
		#define	MBX1_REG_WRITE_ENABLE_TNL_VGP							0x00001028
	*/
	if(psPDContext->psPDumpMemMap->bVGP)
	{
		IMG_CHAR* pszTmp = "WRW :CFG:00000028 00000001\r\n";
		WriteLine(psPDContext, pszTmp, strlen(pszTmp), phFile);
		pszTmp = "WRW :CFG:00001028 00000001\r\n";
		WriteLine(psPDContext, pszTmp, strlen(pszTmp), phFile);
	}
	else
	{
		IMG_CHAR* pszTmp = "WRW :CFG:00000028 00000000\r\n";
		WriteLine(psPDContext, pszTmp, strlen(pszTmp), phFile);
		pszTmp = "WRW :CFG:00001028 00000000\r\n";
		WriteLine(psPDContext, pszTmp, strlen(pszTmp), phFile);
	}
}

#endif /* PDUMP */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -