📄 pvr_pdump.c
字号:
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 + -