gpu: pvr: pdump: reduce error propagation from pdump to userspace
authorLuc Verhaegen <libv@codethink.co.uk>
Fri, 11 Mar 2011 14:02:31 +0000 (15:02 +0100)
committerGrazvydas Ignotas <notasas@gmail.com>
Sun, 20 May 2012 18:43:03 +0000 (21:43 +0300)
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 <libv@codethink.co.uk>
Signed-off-by: Imre Deak <imre.deak@nokia.com>
pvr/bridged_pvr_bridge.c
pvr/pdump.c
pvr/pdump_common.c
pvr/pdump_km.h

index 5da331e..81e5309 100644 (file)
@@ -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;
 }
 
index 9b6cac3..a41d666 100644 (file)
@@ -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,
index 80c795a..14ce8f6 100644 (file)
@@ -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;
index 5d22fb7..5a18fe5 100644 (file)
        (((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);