/*! ****************************************************************************** @Function PVRSRVTimeTraceSyncObject @Description Write trace item with a sync object @Input ui32Group : Trace item's group ID @Input ui32Token : Trace item's ui32Token ID @Input psSync : Sync object @Input ui8SyncOpp : Sync object operation @Return None ******************************************************************************/ IMG_VOID PVRSRVTimeTraceSyncObject(IMG_UINT32 ui32Group, IMG_UINT32 ui32Token, PVRSRV_KERNEL_SYNC_INFO *psSync, IMG_UINT8 ui8SyncOp) { IMG_UINT32 *pui32TraceItem; IMG_UINT32 *ui32Ptr; IMG_UINT32 ui32Size = PVRSRV_TRACE_TYPE_SYNC_SIZE; PVRSRVTimeTraceAllocItem(&pui32TraceItem, ui32Size); if (!pui32TraceItem) { PVR_DPF((PVR_DBG_ERROR, "Can't find buffer\n")); return; } ui32Ptr = PVRSRVTimeTraceWriteHeader(pui32TraceItem, ui32Group, PVRSRV_TRACE_CLASS_SYNC, ui32Token, ui32Size, PVRSRV_TRACE_TYPE_SYNC, 1); ui32Ptr[PVRSRV_TRACE_SYNC_UID] = psSync->ui32UID; ui32Ptr[PVRSRV_TRACE_SYNC_WOP] = psSync->psSyncData->ui32WriteOpsPending; ui32Ptr[PVRSRV_TRACE_SYNC_WOC] = psSync->psSyncData->ui32WriteOpsComplete; ui32Ptr[PVRSRV_TRACE_SYNC_ROP] = psSync->psSyncData->ui32ReadOpsPending; ui32Ptr[PVRSRV_TRACE_SYNC_ROC] = psSync->psSyncData->ui32ReadOpsComplete; ui32Ptr[PVRSRV_TRACE_SYNC_RO2P] = psSync->psSyncData->ui32ReadOps2Pending; ui32Ptr[PVRSRV_TRACE_SYNC_RO2C] = psSync->psSyncData->ui32ReadOps2Complete; ui32Ptr[PVRSRV_TRACE_SYNC_WO_DEV_VADDR] = psSync->sWriteOpsCompleteDevVAddr.uiAddr; ui32Ptr[PVRSRV_TRACE_SYNC_RO_DEV_VADDR] = psSync->sReadOpsCompleteDevVAddr.uiAddr; ui32Ptr[PVRSRV_TRACE_SYNC_RO2_DEV_VADDR] = psSync->sReadOps2CompleteDevVAddr.uiAddr; ui32Ptr[PVRSRV_TRACE_SYNC_OP] = ui8SyncOp; }
/*! ****************************************************************************** @Function PVRSRVTimeTraceArray @Description Write trace item with an array of data @Input ui32Group : Trace item's group ID @Input ui32Class : Trace item's class ID @Input ui32Token : Trace item's ui32Token ID @Input ui32Size : Trace item's data payload size @Input ui32Type : Trace item's data type @Input ui32Count : Trace item's data count @Input pui8Data : Pointer to data array @Return Pointer to data payload space, or NULL if no data payload ******************************************************************************/ IMG_VOID PVRSRVTimeTraceArray(IMG_UINT32 ui32Group, IMG_UINT32 ui32Class, IMG_UINT32 ui32Token, IMG_UINT32 ui32Type, IMG_UINT32 ui32Count, IMG_UINT8 *pui8Data) { IMG_UINT32 *pui32TraceItem; IMG_UINT32 ui32Size, ui32TypeSize; IMG_UINT8 *ui8Ptr; /* Only the 1st 4 sizes are for ui types, others are "special" */ switch (ui32Type) { case PVRSRV_TRACE_TYPE_UI8: ui32TypeSize = 1; break; case PVRSRV_TRACE_TYPE_UI16: ui32TypeSize = 2; break; case PVRSRV_TRACE_TYPE_UI32: ui32TypeSize = 4; break; case PVRSRV_TRACE_TYPE_UI64: ui32TypeSize = 8; break; default: PVR_DPF((PVR_DBG_ERROR, "Unsupported size\n")); return; } ui32Size = ui32TypeSize * ui32Count; /* Allocate space from the buffer */ LinuxLockMutex(&g_sTTraceMutex); PVRSRVTimeTraceAllocItem(&pui32TraceItem, ui32Size); if (!pui32TraceItem) { PVR_DPF((PVR_DBG_ERROR, "Can't find buffer\n")); LinuxUnLockMutex(&g_sTTraceMutex); return; } ui8Ptr = PVRSRVTimeTraceWriteHeader(pui32TraceItem, ui32Group, ui32Class, ui32Token, ui32Size, ui32Type, ui32Count); if (ui8Ptr) { OSMemCopy(ui8Ptr, pui8Data, ui32Size); } LinuxUnLockMutex(&g_sTTraceMutex); }