From 3efccd393ef3ecedd31b381cede1c39ab77e3f86 Mon Sep 17 00:00:00 2001 From: Luc Verhaegen Date: Fri, 11 Mar 2011 15:02:31 +0100 Subject: [PATCH] gpu: pvr: pdump: reduce error propagation from pdump to userspace When pdump logging fails, the driver should, as much as possible, continue working. Bad arguments should however be flagged. This allows for a rewrite of DbgWrite()/PdumpWriteILock() to pdump_write(). Also remove the parameter write in PDumpPDDevPAddrKM, this parameter data is simply not referenced and the data sent to the script anyway. Signed-off-by: Luc Verhaegen Signed-off-by: Imre Deak --- pvr/bridged_pvr_bridge.c | 111 +++++++++++---------- pvr/pdump.c | 201 ++++++++++++++------------------------- pvr/pdump_common.c | 27 +++--- pvr/pdump_km.h | 65 +++++++------ 4 files changed, 175 insertions(+), 229 deletions(-) diff --git a/pvr/bridged_pvr_bridge.c b/pvr/bridged_pvr_bridge.c index 5da331e..81e5309 100644 --- a/pvr/bridged_pvr_bridge.c +++ b/pvr/bridged_pvr_bridge.c @@ -1059,8 +1059,11 @@ static int PDumpCommentBW(u32 ui32BridgeID, PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_COMMENT); PVR_UNREFERENCED_PARAMETER(psPerProc); - psRetOUT->eError = PDumpCommentKM(&psPDumpCommentIN->szComment[0], - psPDumpCommentIN->ui32Flags); + PDumpCommentKM(&psPDumpCommentIN->szComment[0], + psPDumpCommentIN->ui32Flags); + + psRetOUT->eError = PVRSRV_OK; + return 0; } @@ -1072,7 +1075,9 @@ static int PDumpSetFrameBW(u32 ui32BridgeID, PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_SETFRAME); PVR_UNREFERENCED_PARAMETER(psPerProc); - psRetOUT->eError = PDumpSetFrameKM(psPDumpSetFrameIN->ui32Frame); + PDumpSetFrameKM(psPDumpSetFrameIN->ui32Frame); + + psRetOUT->eError = PVRSRV_OK; return 0; } @@ -1085,10 +1090,11 @@ static int PDumpRegWithFlagsBW(u32 ui32BridgeID, PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_REG); PVR_UNREFERENCED_PARAMETER(psPerProc); - psRetOUT->eError = - PDumpRegWithFlagsKM(psPDumpRegDumpIN->sHWReg.ui32RegAddr, - psPDumpRegDumpIN->sHWReg.ui32RegVal, - psPDumpRegDumpIN->ui32Flags); + PDumpRegWithFlagsKM(psPDumpRegDumpIN->sHWReg.ui32RegAddr, + psPDumpRegDumpIN->sHWReg.ui32RegVal, + psPDumpRegDumpIN->ui32Flags); + + psRetOUT->eError = PVRSRV_OK; return 0; } @@ -1101,11 +1107,12 @@ static int PDumpRegPolBW(u32 ui32BridgeID, PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_REGPOL); PVR_UNREFERENCED_PARAMETER(psPerProc); - psRetOUT->eError = - PDumpRegPolWithFlagsKM(psPDumpRegPolIN->sHWReg.ui32RegAddr, - psPDumpRegPolIN->sHWReg.ui32RegVal, - psPDumpRegPolIN->ui32Mask, - psPDumpRegPolIN->ui32Flags); + PDumpRegPolWithFlagsKM(psPDumpRegPolIN->sHWReg.ui32RegAddr, + psPDumpRegPolIN->sHWReg.ui32RegVal, + psPDumpRegPolIN->ui32Mask, + psPDumpRegPolIN->ui32Flags); + + psRetOUT->eError = PVRSRV_OK; return 0; } @@ -1126,13 +1133,12 @@ static int PDumpMemPolBW(u32 ui32BridgeID, if (psRetOUT->eError != PVRSRV_OK) return 0; - psRetOUT->eError = - PDumpMemPolKM(((struct PVRSRV_KERNEL_MEM_INFO *)pvMemInfo), - psPDumpMemPolIN->ui32Offset, - psPDumpMemPolIN->ui32Value, - psPDumpMemPolIN->ui32Mask, - PDUMP_POLL_OPERATOR_EQUAL, - MAKEUNIQUETAG(pvMemInfo)); + PDumpMemPolKM(((struct PVRSRV_KERNEL_MEM_INFO *)pvMemInfo), + psPDumpMemPolIN->ui32Offset, + psPDumpMemPolIN->ui32Value, + psPDumpMemPolIN->ui32Mask, + PDUMP_POLL_OPERATOR_EQUAL, + MAKEUNIQUETAG(pvMemInfo)); return 0; } @@ -1154,11 +1160,11 @@ static int PDumpMemBW(u32 ui32BridgeID, return 0; psRetOUT->eError = PDumpMemUM(psPerProc, psPDumpMemDumpIN->pvAltLinAddr, - psPDumpMemDumpIN->pvLinAddr, - pvMemInfo, psPDumpMemDumpIN->ui32Offset, - psPDumpMemDumpIN->ui32Bytes, - psPDumpMemDumpIN->ui32Flags, - MAKEUNIQUETAG(pvMemInfo)); + psPDumpMemDumpIN->pvLinAddr, + pvMemInfo, psPDumpMemDumpIN->ui32Offset, + psPDumpMemDumpIN->ui32Bytes, + psPDumpMemDumpIN->ui32Flags, + MAKEUNIQUETAG(pvMemInfo)); return 0; } @@ -1171,16 +1177,18 @@ static int PDumpBitmapBW(u32 ui32BridgeID, PVR_UNREFERENCED_PARAMETER(psPerProc); PVR_UNREFERENCED_PARAMETER(ui32BridgeID); - psRetOUT->eError = PDumpBitmapKM(&psPDumpBitmapIN->szFileName[0], - psPDumpBitmapIN->ui32FileOffset, - psPDumpBitmapIN->ui32Width, - psPDumpBitmapIN->ui32Height, - psPDumpBitmapIN->ui32StrideInBytes, - psPDumpBitmapIN->sDevBaseAddr, - psPDumpBitmapIN->ui32Size, - psPDumpBitmapIN->ePixelFormat, - psPDumpBitmapIN->eMemFormat, - psPDumpBitmapIN->ui32Flags); + PDumpBitmapKM(&psPDumpBitmapIN->szFileName[0], + psPDumpBitmapIN->ui32FileOffset, + psPDumpBitmapIN->ui32Width, + psPDumpBitmapIN->ui32Height, + psPDumpBitmapIN->ui32StrideInBytes, + psPDumpBitmapIN->sDevBaseAddr, + psPDumpBitmapIN->ui32Size, + psPDumpBitmapIN->ePixelFormat, + psPDumpBitmapIN->eMemFormat, + psPDumpBitmapIN->ui32Flags); + + psRetOUT->eError = PVRSRV_OK; return 0; } @@ -1203,12 +1211,12 @@ static int PDumpSyncDumpBW(u32 ui32BridgeID, return 0; psRetOUT->eError = - PDumpMemUM(psPerProc, psPDumpSyncDumpIN->pvAltLinAddr, NULL, - ((struct PVRSRV_KERNEL_SYNC_INFO *)pvSyncInfo)-> - psSyncDataMemInfoKM, - psPDumpSyncDumpIN->ui32Offset, ui32Bytes, 0, - MAKEUNIQUETAG(((struct PVRSRV_KERNEL_SYNC_INFO *) - pvSyncInfo)->psSyncDataMemInfoKM)); + PDumpMemUM(psPerProc, psPDumpSyncDumpIN->pvAltLinAddr, NULL, + ((struct PVRSRV_KERNEL_SYNC_INFO *)pvSyncInfo)-> + psSyncDataMemInfoKM, + psPDumpSyncDumpIN->ui32Offset, ui32Bytes, 0, + MAKEUNIQUETAG(((struct PVRSRV_KERNEL_SYNC_INFO *) + pvSyncInfo)->psSyncDataMemInfoKM)); return 0; } @@ -1237,13 +1245,12 @@ static int PDumpSyncPolBW(u32 ui32BridgeID, ui32Offset = offsetof(struct PVRSRV_SYNC_DATA, ui32WriteOpsComplete); - psRetOUT->eError = - PDumpMemPolKM(((struct PVRSRV_KERNEL_SYNC_INFO *)pvSyncInfo)-> - psSyncDataMemInfoKM, ui32Offset, - psPDumpSyncPolIN->ui32Value, - psPDumpSyncPolIN->ui32Mask, PDUMP_POLL_OPERATOR_EQUAL, - MAKEUNIQUETAG(((struct PVRSRV_KERNEL_SYNC_INFO *) - pvSyncInfo)->psSyncDataMemInfoKM)); + PDumpMemPolKM(((struct PVRSRV_KERNEL_SYNC_INFO *)pvSyncInfo)-> + psSyncDataMemInfoKM, ui32Offset, + psPDumpSyncPolIN->ui32Value, + psPDumpSyncPolIN->ui32Mask, PDUMP_POLL_OPERATOR_EQUAL, + MAKEUNIQUETAG(((struct PVRSRV_KERNEL_SYNC_INFO *) + pvSyncInfo)->psSyncDataMemInfoKM)); return 0; } @@ -1297,11 +1304,11 @@ static int PDumpPDDevPAddrBW(u32 ui32BridgeID, if (psRetOUT->eError != PVRSRV_OK) return 0; - psRetOUT->eError = - PDumpPDDevPAddrKM((struct PVRSRV_KERNEL_MEM_INFO *)pvMemInfo, - psPDumpPDDevPAddrIN->ui32Offset, - psPDumpPDDevPAddrIN->sPDDevPAddr, - MAKEUNIQUETAG(pvMemInfo), PDUMP_PD_UNIQUETAG); + PDumpPDDevPAddrKM((struct PVRSRV_KERNEL_MEM_INFO *)pvMemInfo, + psPDumpPDDevPAddrIN->ui32Offset, + psPDumpPDDevPAddrIN->sPDDevPAddr, + MAKEUNIQUETAG(pvMemInfo), PDUMP_PD_UNIQUETAG); + return 0; } diff --git a/pvr/pdump.c b/pvr/pdump.c index 9b6cac3..a41d666 100644 --- a/pvr/pdump.c +++ b/pvr/pdump.c @@ -120,18 +120,18 @@ DbgDrvSetFrame(struct DBG_STREAM *psStream, u32 ui32Frame) } -static u32 +static void DbgDrvDBGDrivWrite2(struct DBG_STREAM *psStream, u8 *pui8InBuf, u32 ui32InBuffSize, u32 ui32Level) { - return ui32InBuffSize; + } -static u32 +static void DbgDrvWriteBINCM(struct DBG_STREAM *psStream, u8 *pui8InBuf, u32 ui32InBuffSize, u32 ui32Level) { - return ui32InBuffSize; + } static u32 @@ -146,78 +146,46 @@ DbgDrvGetStreamOffset(struct DBG_STREAM *psStream) return 0; } -static u32 DbgWrite(struct DBG_STREAM *psStream, u8 *pui8Data, - u32 ui32BCount, u32 ui32Flags) +static enum PVRSRV_ERROR +pdump_write(struct DBG_STREAM *psStream, u8 *pui8Data, u32 ui32Count, + u32 ui32Flags) { - u32 ui32BytesWritten; + if (!psStream) /* will always hit with the empty backend. */ + return PVRSRV_OK; + + if (PDumpSuspended() || (ui32Flags & PDUMP_FLAGS_NEVER)) + return PVRSRV_OK; if (ui32Flags & PDUMP_FLAGS_CONTINUOUS) { if ((psStream->ui32CapMode & DEBUG_CAPMODE_FRAMED) && (psStream->ui32Start == 0xFFFFFFFF) && (psStream->ui32End == 0xFFFFFFFF) && psStream->bInitPhaseComplete) - ui32BytesWritten = ui32BCount; + return PVRSRV_OK; else - ui32BytesWritten = - DbgDrvDBGDrivWrite2(psStream, pui8Data, - ui32BCount, 1); + DbgDrvDBGDrivWrite2(psStream, pui8Data, + ui32Count, 1); } else - ui32BytesWritten = DbgDrvWriteBINCM(psStream, pui8Data, - ui32BCount, 1); - - return ui32BytesWritten; -} - -static IMG_BOOL PDumpWriteILock(struct DBG_STREAM *psStream, u8 *pui8Data, - u32 ui32Count, u32 ui32Flags) -{ - u32 ui32Written = 0; - u32 ui32Off = 0; - - if (!psStream || PDumpSuspended() || (ui32Flags & PDUMP_FLAGS_NEVER)) - return IMG_TRUE; - - while (((u32) ui32Count > 0) && (ui32Written != 0xFFFFFFFF)) { - ui32Written = - DbgWrite(psStream, &pui8Data[ui32Off], ui32Count, - ui32Flags); - - if (ui32Written == 0) - OSReleaseThreadQuanta(); - - if (ui32Written != 0xFFFFFFFF) { - ui32Off += ui32Written; - ui32Count -= ui32Written; - } - } - - if (ui32Written == 0xFFFFFFFF) - return IMG_FALSE; + DbgDrvWriteBINCM(psStream, pui8Data, ui32Count, 1); - return IMG_TRUE; + /* placeholder, will get proper error handling later. */ + return PVRSRV_OK; } -static IMG_BOOL PDumpWriteString2(char *pszString, u32 ui32Flags) +static void PDumpWriteString2(char *pszString, u32 ui32Flags) { - return PDumpWriteILock(gpsStream[PDUMP_STREAM_SCRIPT2], - (u8 *)pszString, strlen(pszString), ui32Flags); + (void) pdump_write(gpsStream[PDUMP_STREAM_SCRIPT2], + (u8 *)pszString, strlen(pszString), ui32Flags); } -enum PVRSRV_ERROR PDumpCommentKM(char *pszComment, u32 ui32Flags) +void PDumpCommentKM(char *pszComment, u32 ui32Flags) { u32 ui32Count = 0; - enum PVRSRV_ERROR eError; if (PDumpSuspended()) - return PVRSRV_ERROR_GENERIC; - - if (ui32Flags & PDUMP_FLAGS_CONTINUOUS) - eError = PVRSRV_ERROR_GENERIC; - else - eError = PVRSRV_ERROR_CMD_NOT_PROCESSED; + return; - if (!PDumpWriteString2("-- ", ui32Flags)) - return eError; + PDumpWriteString2("-- ", ui32Flags); snprintf(gpszMsg, SZ_MSG_SIZE_MAX, "%s", pszComment); @@ -237,8 +205,6 @@ enum PVRSRV_ERROR PDumpCommentKM(char *pszComment, u32 ui32Flags) } PDumpWriteString2(gpszMsg, ui32Flags); - - return PVRSRV_OK; } void PDumpComment(char *pszFormat, ...) @@ -269,15 +235,13 @@ void PDumpCommentWithFlags(u32 ui32Flags, char *pszFormat, ...) PDumpCommentKM(gpszMsg, ui32Flags); } -enum PVRSRV_ERROR PDumpSetFrameKM(u32 ui32Frame) +void PDumpSetFrameKM(u32 ui32Frame) { u32 ui32Stream; for (ui32Stream = 0; ui32Stream < PDUMP_NUM_STREAMS; ui32Stream++) if (gpsStream[ui32Stream]) DbgDrvSetFrame(gpsStream[ui32Stream], ui32Frame); - - return PVRSRV_OK; } IMG_BOOL PDumpIsCaptureFrameKM(void) @@ -380,16 +344,14 @@ void PDumpDeInit(void) } } -enum PVRSRV_ERROR PDumpRegWithFlagsKM(u32 ui32Reg, u32 ui32Data, u32 ui32Flags) +void PDumpRegWithFlagsKM(u32 ui32Reg, u32 ui32Data, u32 ui32Flags) { if (PDumpSuspended()) - return PVRSRV_ERROR_GENERIC; + return; snprintf(gpszScript, SZ_SCRIPT_SIZE_MAX, "WRW :SGXREG:0x%8.8X 0x%8.8X\r\n", ui32Reg, ui32Data); PDumpWriteString2(gpszScript, ui32Flags); - - return PVRSRV_OK; } void PDumpReg(u32 ui32Reg, u32 ui32Data) @@ -402,8 +364,8 @@ void PDumpReg(u32 ui32Reg, u32 ui32Data) PDumpWriteString2(gpszScript, PDUMP_FLAGS_CONTINUOUS); } -enum PVRSRV_ERROR PDumpRegPolWithFlagsKM(u32 ui32RegAddr, u32 ui32RegValue, - u32 ui32Mask, u32 ui32Flags) +void PDumpRegPolWithFlagsKM(u32 ui32RegAddr, u32 ui32RegValue, + u32 ui32Mask, u32 ui32Flags) { #define POLL_DELAY 1000 #define POLL_COUNT_LONG (2000000000 / POLL_DELAY) @@ -412,7 +374,7 @@ enum PVRSRV_ERROR PDumpRegPolWithFlagsKM(u32 ui32RegAddr, u32 ui32RegValue, u32 ui32PollCount; if (PDumpSuspended()) - return PVRSRV_ERROR_GENERIC; + return; if (((ui32RegAddr == EUR_CR_EVENT_STATUS) && (ui32RegValue & ui32Mask & @@ -432,14 +394,12 @@ enum PVRSRV_ERROR PDumpRegPolWithFlagsKM(u32 ui32RegAddr, u32 ui32RegValue, ui32RegAddr, ui32RegValue, ui32Mask, 0, ui32PollCount, POLL_DELAY); PDumpWriteString2(gpszScript, ui32Flags); - - return PVRSRV_OK; } -enum PVRSRV_ERROR PDumpRegPolKM(u32 ui32RegAddr, u32 ui32RegValue, u32 ui32Mask) +void PDumpRegPolKM(u32 ui32RegAddr, u32 ui32RegValue, u32 ui32Mask) { - return PDumpRegPolWithFlagsKM(ui32RegAddr, ui32RegValue, ui32Mask, - PDUMP_FLAGS_CONTINUOUS); + PDumpRegPolWithFlagsKM(ui32RegAddr, ui32RegValue, ui32Mask, + PDUMP_FLAGS_CONTINUOUS); } void PDumpMallocPages(enum PVRSRV_DEVICE_TYPE eDeviceType, u32 ui32DevVAddr, @@ -621,10 +581,9 @@ void PDumpPDRegWithFlags(u32 ui32Reg, u32 ui32Data, u32 ui32Flags, PDumpWriteString2(gpszScript, ui32Flags); } -enum PVRSRV_ERROR PDumpMemPolKM(struct PVRSRV_KERNEL_MEM_INFO *psMemInfo, - u32 ui32Offset, u32 ui32Value, u32 ui32Mask, - enum PDUMP_POLL_OPERATOR eOperator, - void *hUniqueTag) +void PDumpMemPolKM(struct PVRSRV_KERNEL_MEM_INFO *psMemInfo, + u32 ui32Offset, u32 ui32Value, u32 ui32Mask, + enum PDUMP_POLL_OPERATOR eOperator, void *hUniqueTag) { #define MEMPOLL_DELAY (1000) #define MEMPOLL_COUNT (2000000000 / MEMPOLL_DELAY) @@ -635,7 +594,7 @@ enum PVRSRV_ERROR PDumpMemPolKM(struct PVRSRV_KERNEL_MEM_INFO *psMemInfo, struct IMG_CPU_PHYADDR CpuPAddr; if (PDumpSuspended()) - return PVRSRV_ERROR_GENERIC; + return; PVR_ASSERT((ui32Offset + sizeof(u32)) <= psMemInfo->ui32AllocSize); @@ -658,14 +617,11 @@ enum PVRSRV_ERROR PDumpMemPolKM(struct PVRSRV_KERNEL_MEM_INFO *psMemInfo, ui32Value, ui32Mask, eOperator, MEMPOLL_COUNT, MEMPOLL_DELAY); PDumpWriteString2(gpszScript, 0); - - return PVRSRV_OK; } -enum PVRSRV_ERROR PDumpMemKM(void *pvAltLinAddr, - struct PVRSRV_KERNEL_MEM_INFO *psMemInfo, - u32 ui32Offset, u32 ui32Bytes, u32 ui32Flags, - void *hUniqueTag) +enum PVRSRV_ERROR +PDumpMemKM(void *pvAltLinAddr, struct PVRSRV_KERNEL_MEM_INFO *psMemInfo, + u32 ui32Offset, u32 ui32Bytes, u32 ui32Flags, void *hUniqueTag) { u32 ui32PageByteOffset; u8 *pui8DataLinAddr = NULL; @@ -676,14 +632,15 @@ enum PVRSRV_ERROR PDumpMemKM(void *pvAltLinAddr, u32 ui32ParamOutPos; u32 ui32CurrentOffset; u32 ui32BytesRemaining; + enum PVRSRV_ERROR eError; if (PDumpSuspended()) - return PVRSRV_ERROR_GENERIC; + return PVRSRV_OK; PVR_ASSERT((ui32Offset + ui32Bytes) <= psMemInfo->ui32AllocSize); if (ui32Bytes == 0) - return PVRSRV_OK; + return PVRSRV_ERROR_GENERIC; if (pvAltLinAddr) { pui8DataLinAddr = pvAltLinAddr; @@ -699,9 +656,10 @@ enum PVRSRV_ERROR PDumpMemKM(void *pvAltLinAddr, ui32ParamOutPos = DbgDrvGetStreamOffset(gpsStream[PDUMP_STREAM_PARAM2]); - if (!PDumpWriteILock(gpsStream[PDUMP_STREAM_PARAM2], - pui8DataLinAddr, ui32Bytes, ui32Flags)) - return PVRSRV_ERROR_GENERIC; + eError = pdump_write(gpsStream[PDUMP_STREAM_PARAM2], pui8DataLinAddr, + ui32Bytes, ui32Flags); + if (eError != PVRSRV_OK) + return eError; snprintf(gpszScript, SZ_SCRIPT_SIZE_MAX, @@ -760,10 +718,10 @@ enum PVRSRV_ERROR PDumpMemKM(void *pvAltLinAddr, return PVRSRV_OK; } -enum PVRSRV_ERROR PDumpMem2KM(enum PVRSRV_DEVICE_TYPE eDeviceType, - void *pvLinAddr, u32 ui32Bytes, u32 ui32Flags, - IMG_BOOL bInitialisePages, void *hUniqueTag1, - void *hUniqueTag2) +enum PVRSRV_ERROR +PDumpMem2KM(enum PVRSRV_DEVICE_TYPE eDeviceType, void *pvLinAddr, + u32 ui32Bytes, u32 ui32Flags, IMG_BOOL bInitialisePages, + void *hUniqueTag1, void *hUniqueTag2) { u32 ui32NumPages; u32 ui32PageOffset; @@ -773,9 +731,10 @@ enum PVRSRV_ERROR PDumpMem2KM(enum PVRSRV_DEVICE_TYPE eDeviceType, struct IMG_CPU_PHYADDR sCpuPAddr; u32 ui32Offset; u32 ui32ParamOutPos; + enum PVRSRV_ERROR eError; if (PDumpSuspended()) - return PVRSRV_ERROR_GENERIC; + return PVRSRV_OK; if (ui32Flags) ; @@ -786,11 +745,12 @@ enum PVRSRV_ERROR PDumpMem2KM(enum PVRSRV_DEVICE_TYPE eDeviceType, ui32ParamOutPos = DbgDrvGetStreamOffset(gpsStream[PDUMP_STREAM_PARAM2]); - if (bInitialisePages) - if (!PDumpWriteILock - (gpsStream[PDUMP_STREAM_PARAM2], pvLinAddr, - ui32Bytes, PDUMP_FLAGS_CONTINUOUS)) - return PVRSRV_ERROR_GENERIC; + if (bInitialisePages) { + eError = pdump_write(gpsStream[PDUMP_STREAM_PARAM2], pvLinAddr, + ui32Bytes, PDUMP_FLAGS_CONTINUOUS); + if (eError != PVRSRV_OK) + return eError; + } ui32PageOffset = (u32) pvLinAddr & (HOST_PAGESIZE() - 1); ui32NumPages = @@ -869,12 +829,11 @@ enum PVRSRV_ERROR PDumpMem2KM(enum PVRSRV_DEVICE_TYPE eDeviceType, return PVRSRV_OK; } -enum PVRSRV_ERROR PDumpPDDevPAddrKM(struct PVRSRV_KERNEL_MEM_INFO *psMemInfo, - u32 ui32Offset, - struct IMG_DEV_PHYADDR sPDDevPAddr, - void *hUniqueTag1, void *hUniqueTag2) +void +PDumpPDDevPAddrKM(struct PVRSRV_KERNEL_MEM_INFO *psMemInfo, + u32 ui32Offset, struct IMG_DEV_PHYADDR sPDDevPAddr, + void *hUniqueTag1, void *hUniqueTag2) { - u32 ui32ParamOutPos; struct IMG_CPU_PHYADDR CpuPAddr; u32 ui32PageByteOffset; struct IMG_DEV_VIRTADDR sDevVAddr; @@ -882,15 +841,7 @@ enum PVRSRV_ERROR PDumpPDDevPAddrKM(struct PVRSRV_KERNEL_MEM_INFO *psMemInfo, struct IMG_DEV_PHYADDR sDevPAddr; if (PDumpSuspended()) - return PVRSRV_ERROR_GENERIC; - - ui32ParamOutPos = - DbgDrvGetStreamOffset(gpsStream[PDUMP_STREAM_PARAM2]); - - if (!PDumpWriteILock(gpsStream[PDUMP_STREAM_PARAM2], - (u8 *)&sPDDevPAddr, sizeof(struct IMG_DEV_PHYADDR), - PDUMP_FLAGS_CONTINUOUS)) - return PVRSRV_ERROR_GENERIC; + return; CpuPAddr = OSMemHandleToCpuPAddr(psMemInfo->sMemBlk.hOSMemHandle, ui32Offset); @@ -924,18 +875,16 @@ enum PVRSRV_ERROR PDumpPDDevPAddrKM(struct PVRSRV_KERNEL_MEM_INFO *psMemInfo, sPDDevPAddr.uiAddr); } PDumpWriteString2(gpszScript, PDUMP_FLAGS_CONTINUOUS); - - return PVRSRV_OK; } -enum PVRSRV_ERROR PDumpBitmapKM(char *pszFileName, u32 ui32FileOffset, - u32 ui32Width, u32 ui32Height, u32 ui32StrideInBytes, - struct IMG_DEV_VIRTADDR sDevBaseAddr, - u32 ui32Size, enum PDUMP_PIXEL_FORMAT ePixelFormat, - enum PDUMP_MEM_FORMAT eMemFormat, u32 ui32PDumpFlags) +void PDumpBitmapKM(char *pszFileName, u32 ui32FileOffset, + u32 ui32Width, u32 ui32Height, u32 ui32StrideInBytes, + struct IMG_DEV_VIRTADDR sDevBaseAddr, + u32 ui32Size, enum PDUMP_PIXEL_FORMAT ePixelFormat, + enum PDUMP_MEM_FORMAT eMemFormat, u32 ui32PDumpFlags) { if (PDumpSuspended()) - return PVRSRV_ERROR_GENERIC; + return; PDumpCommentWithFlags(ui32PDumpFlags, "\r\n-- Dump bitmap of render\r\n"); @@ -949,15 +898,13 @@ enum PVRSRV_ERROR PDumpBitmapKM(char *pszFileName, u32 ui32FileOffset, ui32StrideInBytes, eMemFormat); PDumpWriteString2(gpszScript, ui32PDumpFlags); - return PVRSRV_OK; } -static enum PVRSRV_ERROR PDumpReadRegKM(char *pszFileName, u32 ui32FileOffset, - u32 ui32Address, u32 ui32Size, - u32 ui32PDumpFlags) +static void PDumpReadRegKM(char *pszFileName, u32 ui32FileOffset, + u32 ui32Address, u32 ui32Size, u32 ui32PDumpFlags) { if (PDumpSuspended()) - return PVRSRV_ERROR_GENERIC; + return; snprintf(gpszScript, SZ_SCRIPT_SIZE_MAX, @@ -965,8 +912,6 @@ static enum PVRSRV_ERROR PDumpReadRegKM(char *pszFileName, u32 ui32FileOffset, ui32Address, ui32FileOffset, pszFileName); PDumpWriteString2(gpszScript, ui32PDumpFlags); - - return PVRSRV_OK; } void PDump3DSignatureRegisters(u32 ui32DumpFrameNum, diff --git a/pvr/pdump_common.c b/pvr/pdump_common.c index 80c795a..14ce8f6 100644 --- a/pvr/pdump_common.c +++ b/pvr/pdump_common.c @@ -77,20 +77,22 @@ void PDumpDeInitCommon(void) PDumpDeInit(); } -enum PVRSRV_ERROR PDumpMemUM(struct PVRSRV_PER_PROCESS_DATA *psPerProc, - void *pvAltLinAddrUM, void *pvLinAddrUM, - struct PVRSRV_KERNEL_MEM_INFO *psMemInfo, - u32 ui32Offset, u32 ui32Bytes, u32 ui32Flags, - void *hUniqueTag) +enum PVRSRV_ERROR +PDumpMemUM(struct PVRSRV_PER_PROCESS_DATA *psPerProc, + void *pvAltLinAddrUM, void *pvLinAddrUM, + struct PVRSRV_KERNEL_MEM_INFO *psMemInfo, + u32 ui32Offset, u32 ui32Bytes, u32 ui32Flags, + void *hUniqueTag) { void *pvAddrUM; void *pvAddrKM; u32 ui32BytesDumped; u32 ui32CurrentOffset; - if (psMemInfo->pvLinAddrKM != NULL && pvAltLinAddrUM == NULL) + if (psMemInfo->pvLinAddrKM != NULL && pvAltLinAddrUM == NULL) { return PDumpMemKM(NULL, psMemInfo, ui32Offset, ui32Bytes, ui32Flags, hUniqueTag); + } pvAddrUM = (pvAltLinAddrUM != NULL) ? pvAltLinAddrUM : ((pvLinAddrUM != NULL) ? VPTR_PLUS(pvLinAddrUM, @@ -119,21 +121,14 @@ enum PVRSRV_ERROR PDumpMemUM(struct PVRSRV_PER_PROCESS_DATA *psPerProc, pvAddrKM, pvAddrUM, ui32BytesToDump); if (eError != PVRSRV_OK) { PVR_DPF(PVR_DBG_ERROR, - "PDumpMemUM: OSCopyFromUser failed (%d), eError"); - return PVRSRV_ERROR_GENERIC; + "PDumpMemUM: OSCopyFromUser failed (%d)", eError); + return eError; } eError = PDumpMemKM(pvAddrKM, psMemInfo, ui32CurrentOffset, ui32BytesToDump, ui32Flags, hUniqueTag); - - if (eError != PVRSRV_OK) { - if (ui32BytesDumped != 0) - PVR_DPF(PVR_DBG_ERROR, - "PDumpMemUM: PDumpMemKM failed (%d)", - eError); - PVR_ASSERT(ui32BytesDumped == 0); + if (eError != PVRSRV_OK) return eError; - } VPTR_INC(pvAddrUM, ui32BytesToDump); ui32CurrentOffset += ui32BytesToDump; diff --git a/pvr/pdump_km.h b/pvr/pdump_km.h index 5d22fb7..5a18fe5 100644 --- a/pvr/pdump_km.h +++ b/pvr/pdump_km.h @@ -43,23 +43,22 @@ (((struct BM_BUF *)(((struct PVRSRV_KERNEL_MEM_INFO *) \ hMemInfo)->sMemBlk.hBuffer))->pMapping) -enum PVRSRV_ERROR PDumpMemPolKM(struct PVRSRV_KERNEL_MEM_INFO +void PDumpMemPolKM(struct PVRSRV_KERNEL_MEM_INFO *psMemInfo, u32 ui32Offset, u32 ui32Value, u32 ui32Mask, enum PDUMP_POLL_OPERATOR eOperator, void *hUniqueTag); -enum PVRSRV_ERROR PDumpMemUM(struct PVRSRV_PER_PROCESS_DATA - *psProcData, void *pvAltLinAddr, - void *pvLinAddr, - struct PVRSRV_KERNEL_MEM_INFO - *psMemInfo, u32 ui32Offset, - u32 ui32Bytes, u32 ui32Flags, - void *hUniqueTag); +enum PVRSRV_ERROR PDumpMemUM(struct PVRSRV_PER_PROCESS_DATA *psProcData, + void *pvAltLinAddr, void *pvLinAddr, + struct PVRSRV_KERNEL_MEM_INFO *psMemInfo, + u32 ui32Offset, u32 ui32Bytes, u32 ui32Flags, + void *hUniqueTag); enum PVRSRV_ERROR PDumpMemKM(void *pvAltLinAddr, - struct PVRSRV_KERNEL_MEM_INFO *psMemInfo, u32 ui32Offset, - u32 ui32Bytes, u32 ui32Flags, void *hUniqueTag); + struct PVRSRV_KERNEL_MEM_INFO *psMemInfo, + u32 ui32Offset, u32 ui32Bytes, + u32 ui32Flags, void *hUniqueTag); enum PVRSRV_ERROR PDumpMem2KM(enum PVRSRV_DEVICE_TYPE eDeviceType, void *pvLinAddr, @@ -71,28 +70,28 @@ void PDumpInitCommon(void); void PDumpDeInitCommon(void); void PDumpInit(void); void PDumpDeInit(void); -enum PVRSRV_ERROR PDumpSetFrameKM(u32 ui32Frame); -enum PVRSRV_ERROR PDumpCommentKM(char *pszComment, u32 ui32Flags); -enum PVRSRV_ERROR PDumpRegWithFlagsKM(u32 ui32RegAddr, u32 ui32RegValue, - u32 ui32Flags); - -enum PVRSRV_ERROR PDumpBitmapKM(char *pszFileName, u32 ui32FileOffset, - u32 ui32Width, u32 ui32Height, u32 ui32StrideInBytes, - struct IMG_DEV_VIRTADDR sDevBaseAddr, u32 ui32Size, - enum PDUMP_PIXEL_FORMAT ePixelFormat, - enum PDUMP_MEM_FORMAT eMemFormat, u32 ui32PDumpFlags); +void PDumpSetFrameKM(u32 ui32Frame); +void PDumpCommentKM(char *pszComment, u32 ui32Flags); +void PDumpRegWithFlagsKM(u32 ui32RegAddr, u32 ui32RegValue, + u32 ui32Flags); + +void PDumpBitmapKM(char *pszFileName, u32 ui32FileOffset, + u32 ui32Width, u32 ui32Height, u32 ui32StrideInBytes, + struct IMG_DEV_VIRTADDR sDevBaseAddr, u32 ui32Size, + enum PDUMP_PIXEL_FORMAT ePixelFormat, + enum PDUMP_MEM_FORMAT eMemFormat, u32 ui32PDumpFlags); void PDumpHWPerfCBKM(char *pszFileName, u32 ui32FileOffset, - struct IMG_DEV_VIRTADDR sDevBaseAddr, - u32 ui32Size, u32 ui32PDumpFlags); + struct IMG_DEV_VIRTADDR sDevBaseAddr, + u32 ui32Size, u32 ui32PDumpFlags); void PDumpReg(u32 dwReg, u32 dwData); void PDumpComment(char *pszFormat, ...); void PDumpCommentWithFlags(u32 ui32Flags, char *pszFormat, ...); -enum PVRSRV_ERROR PDumpRegPolKM(u32 ui32RegAddr, u32 ui32RegValue, - u32 ui32Mask); -enum PVRSRV_ERROR PDumpRegPolWithFlagsKM(u32 ui32RegAddr, u32 ui32RegValue, - u32 ui32Mask, u32 ui32Flags); +void PDumpRegPolKM(u32 ui32RegAddr, u32 ui32RegValue, + u32 ui32Mask); +void PDumpRegPolWithFlagsKM(u32 ui32RegAddr, u32 ui32RegValue, + u32 ui32Mask, u32 ui32Flags); IMG_BOOL PDumpIsCaptureFrameKM(void); @@ -100,19 +99,19 @@ void PDumpMallocPages(enum PVRSRV_DEVICE_TYPE eDeviceType, u32 ui32DevVAddr, void *pvLinAddr, void *hOSMemHandle, u32 ui32NumBytes, u32 ui32PageSize, void *hUniqueTag); void PDumpMallocPageTable(enum PVRSRV_DEVICE_TYPE eDeviceType, - void *pvLinAddr, u32 ui32NumBytes, void *hUniqueTag); + void *pvLinAddr, u32 ui32NumBytes, void *hUniqueTag); void PDumpFreePages(struct BM_HEAP *psBMHeap, struct IMG_DEV_VIRTADDR sDevVAddr, u32 ui32NumBytes, - u32 ui32PageSize, void *hUniqueTag, IMG_BOOL bInterleaved); + u32 ui32PageSize, void *hUniqueTag, IMG_BOOL bInterleaved); void PDumpFreePageTable(enum PVRSRV_DEVICE_TYPE eDeviceType, - void *pvLinAddr, u32 ui32NumBytes, void *hUniqueTag); + void *pvLinAddr, u32 ui32NumBytes, void *hUniqueTag); void PDumpPDReg(u32 ui32Reg, u32 ui32dwData, void *hUniqueTag); void PDumpPDRegWithFlags(u32 ui32Reg, u32 ui32Data, u32 ui32Flags, - void *hUniqueTag); + void *hUniqueTag); -enum PVRSRV_ERROR PDumpPDDevPAddrKM(struct PVRSRV_KERNEL_MEM_INFO *psMemInfo, - u32 ui32Offset, struct IMG_DEV_PHYADDR sPDDevPAddr, - void *hUniqueTag1, void *hUniqueTag2); +void PDumpPDDevPAddrKM(struct PVRSRV_KERNEL_MEM_INFO *psMemInfo, + u32 ui32Offset, struct IMG_DEV_PHYADDR sPDDevPAddr, + void *hUniqueTag1, void *hUniqueTag2); void PDumpTASignatureRegisters(u32 ui32DumpFrameNum, u32 ui32TAKickCount, u32 *pui32Registers, u32 ui32NumRegisters); -- 2.39.5