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);
	}
}
Beispiel #5
0
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;
}
Beispiel #6
0
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);
}