void PDumpInit(void) { if (!gpszFile) if (OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, SZ_FILENAME_SIZE_MAX, (void **)&gpszFile, NULL) != PVRSRV_OK) goto init_failed; if (!gpszComment) if (OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, SZ_COMMENT_SIZE_MAX, (void **)&gpszComment, NULL) != PVRSRV_OK) goto init_failed; if (!gpszScript) if (OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, SZ_SCRIPT_SIZE_MAX, (void **)&gpszScript, NULL) != PVRSRV_OK) goto init_failed; if (pdumpfs_init()) { pr_err("%s: pdumpfs_init failed.\n", __func__); goto init_failed; } PDumpComment("Driver Product Name: %s", VS_PRODUCT_NAME); PDumpComment("Driver Product Version: %s (%s)", PVRVERSION_STRING, PVRVERSION_FILE); PDumpComment("Start of Init Phase"); return; init_failed: if (gpszFile) { OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, SZ_FILENAME_SIZE_MAX, (void *)gpszFile, NULL); gpszFile = NULL; } if (gpszScript) { OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, SZ_SCRIPT_SIZE_MAX, (void *)gpszScript, NULL); gpszScript = NULL; } if (gpszComment) { OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, SZ_COMMENT_SIZE_MAX, (void *)gpszComment, NULL); gpszComment = NULL; } }
void PDumpSetFrameKM(u32 ui32PID, u32 ui32Frame) { if (PDumpSuspended()) return; PDumpComment("Ending current Frame\r\n"); pdumpfs_frame_set(ui32PID, ui32Frame); PDumpComment("PID %d: Starting Frame %d\r\n", ui32PID, ui32Frame); }
void PDumpFreePages(struct BM_HEAP *psBMHeap, struct IMG_DEV_VIRTADDR sDevVAddr, u32 ui32NumBytes, void *hUniqueTag, IMG_BOOL bInterleaved) { struct IMG_DEV_PHYADDR sDevPAddr; struct PVRSRV_DEVICE_NODE *psDeviceNode = psBMHeap->pBMContext->psDeviceNode; int i; PVR_ASSERT(((u32) sDevVAddr.uiAddr & ~PAGE_MASK) == 0); PVR_ASSERT(((u32) ui32NumBytes & ~PAGE_MASK) == 0); PDumpComment("FREE :SGXMEM:VA_%8.8X\r\n", sDevVAddr.uiAddr); for (i = 0; (i * PAGE_SIZE) < ui32NumBytes; i++) { if (!bInterleaved || (i % 2) == 0) { sDevPAddr = psDeviceNode->pfnMMUGetPhysPageAddr(psBMHeap-> pMMUHeap, sDevVAddr); pdump_print(PDUMP_FLAGS_CONTINUOUS, "FREE :SGXMEM:PA_%8.8X%8.8X\r\n", (u32)hUniqueTag, sDevPAddr.uiAddr); } sDevVAddr.uiAddr += PAGE_SIZE; } }
void PDumpMallocPages(u32 ui32DevVAddr, void *hOSMemHandle, u32 ui32NumBytes, void *hUniqueTag) { struct IMG_CPU_PHYADDR sCpuPAddr; struct IMG_DEV_PHYADDR sDevPAddr; u32 ui32Offset; PVR_ASSERT(((u32) ui32DevVAddr & ~PAGE_MASK) == 0); PVR_ASSERT(hOSMemHandle); PVR_ASSERT(((u32) ui32NumBytes & ~PAGE_MASK) == 0); PDumpComment("MALLOC :SGXMEM:VA_%8.8X 0x%8.8X %u\r\n", ui32DevVAddr, ui32NumBytes, PAGE_SIZE); for (ui32Offset = 0; ui32Offset < ui32NumBytes; ui32Offset += PAGE_SIZE) { sCpuPAddr = OSMemHandleToCpuPAddr(hOSMemHandle, ui32Offset); sDevPAddr = SysCpuPAddrToDevPAddr(0, sCpuPAddr); pdump_print(PDUMP_FLAGS_CONTINUOUS, "MALLOC :SGXMEM:PA_%8.8X%8.8X %u %u 0x%8.8X\r\n", (u32)hUniqueTag, sDevPAddr.uiAddr, PAGE_SIZE, PAGE_SIZE, sDevPAddr.uiAddr); } }
PVRSRV_ERROR PDumpClearMMUContext(PVRSRV_DEVICE_TYPE eDeviceType, char *pszMemSpace, u32 ui32MMUContextID, u32 ui32MMUType) { PVRSRV_ERROR eError; PDumpComment("Clear MMU Context for memory space %s\r\n", pszMemSpace); PDumpComment("MMU :%s:v%d %d\r\n", pszMemSpace, ui32MMUContextID, ui32MMUType); eError = _PdumpFreeMMUContext(ui32MMUContextID); if (eError != PVRSRV_OK) { PVR_DPF((PVR_DBG_ERROR, "PDumpClearMMUContext: _PdumpFreeMMUContext failed: %d", eError)); return eError; } return PVRSRV_OK; }
PVRSRV_ERROR PDumpSetMMUContext(PVRSRV_DEVICE_TYPE eDeviceType, char *pszMemSpace, u32 * pui32MMUContextID, u32 ui32MMUType, void *hUniqueTag1, void *pvPDCPUAddr) { u8 *pui8LinAddr = (u8 *) pvPDCPUAddr; IMG_CPU_PHYADDR sCpuPAddr; IMG_DEV_PHYADDR sDevPAddr; u32 ui32MMUContextID; PVRSRV_ERROR eError; eError = _PdumpAllocMMUContext(&ui32MMUContextID); if (eError != PVRSRV_OK) { PVR_DPF((PVR_DBG_ERROR, "PDumpSetMMUContext: _PdumpAllocMMUContext failed: %d", eError)); return eError; } sCpuPAddr = OSMapLinToCPUPhys(pui8LinAddr); sDevPAddr = SysCpuPAddrToDevPAddr(eDeviceType, sCpuPAddr); sDevPAddr.uiAddr &= ~((PVRSRV_4K_PAGE_SIZE) - 1); PDumpComment("Set MMU Context\r\n"); PDumpComment("MMU :%s:v%d %d :%s:PA_%8.8lX%8.8lX\r\n", pszMemSpace, ui32MMUContextID, ui32MMUType, pszMemSpace, hUniqueTag1, sDevPAddr.uiAddr); *pui32MMUContextID = ui32MMUContextID; return PVRSRV_OK; }
void PDumpFreePageTable(void *pvLinAddr) { struct IMG_CPU_PHYADDR sCpuPAddr; struct IMG_DEV_PHYADDR sDevPAddr; PVR_ASSERT(((u32) pvLinAddr & ~PAGE_MASK) == 0); PDumpComment("FREE :SGXMEM:PAGE_TABLE\r\n"); sCpuPAddr = OSMapLinToCPUPhys(pvLinAddr); sDevPAddr = SysCpuPAddrToDevPAddr(0, sCpuPAddr); pdump_print(PDUMP_FLAGS_CONTINUOUS, "FREE :SGXMEM:PA_%8.8X%8.8lX\r\n", PDUMP_PT_UNIQUETAG, sDevPAddr.uiAddr); }
void PDumpMallocPageTable(void *pvLinAddr, void *hUniqueTag) { struct IMG_CPU_PHYADDR sCpuPAddr; struct IMG_DEV_PHYADDR sDevPAddr; PVR_ASSERT(((u32) pvLinAddr & ~PAGE_MASK) == 0); PDumpComment("MALLOC :SGXMEM:PAGE_TABLE 0x%8.8X %lu\r\n", PAGE_SIZE, PAGE_SIZE); sCpuPAddr = OSMapLinToCPUPhys(pvLinAddr); sDevPAddr = SysCpuPAddrToDevPAddr(0, sCpuPAddr); pdump_print(PDUMP_FLAGS_CONTINUOUS, "MALLOC :SGXMEM:PA_%8.8X%8.8lX " "0x%lX %lu 0x%8.8lX\r\n", (u32)hUniqueTag, sDevPAddr.uiAddr, PAGE_SIZE, PAGE_SIZE, sDevPAddr.uiAddr); }