Exemplo n.º 1
0
IMG_EXPORT PVRSRV_ERROR 
PVRSRVRGXKickSyncCDMKM(RGX_SERVER_COMPUTE_CONTEXT  *psComputeContext,
                       IMG_UINT32                  ui32ClientFenceCount,
                       PRGXFWIF_UFO_ADDR           *pauiClientFenceUFOAddress,
                       IMG_UINT32                  *paui32ClientFenceValue,
                       IMG_UINT32                  ui32ClientUpdateCount,
                       PRGXFWIF_UFO_ADDR           *pauiClientUpdateUFOAddress,
                       IMG_UINT32                  *paui32ClientUpdateValue,
                       IMG_UINT32                  ui32ServerSyncPrims,
                       IMG_UINT32                  *paui32ServerSyncFlags,
                       SERVER_SYNC_PRIMITIVE       **pasServerSyncs,
					   IMG_UINT32				   ui32NumFenceFDs,
					   IMG_INT32				   *paui32FenceFDs,
                       IMG_BOOL                    bPDumpContinuous)
{
	if (ui32NumFenceFDs > 0)
	{
		return PVRSRV_ERROR_NOT_IMPLEMENTED;
	}

	return RGXKickSyncKM(psComputeContext->psDeviceNode,
	                     psComputeContext->psServerCommonContext,
	                     RGXFWIF_DM_CDM,
						 "SyncCDM",
	                     ui32ClientFenceCount,
	                     pauiClientFenceUFOAddress,
	                     paui32ClientFenceValue,
	                     ui32ClientUpdateCount,
	                     pauiClientUpdateUFOAddress,
	                     paui32ClientUpdateValue,
	                     ui32ServerSyncPrims,
	                     paui32ServerSyncFlags,
	                     pasServerSyncs,
	                     bPDumpContinuous);
}
IMG_EXPORT PVRSRV_ERROR 
PVRSRVRGXKickSyncCDMKM(RGX_SERVER_COMPUTE_CONTEXT  *psComputeContext,
                       IMG_UINT32                  ui32ClientFenceCount,
                       SYNC_PRIMITIVE_BLOCK          **pauiClientFenceUFOSyncPrimBlock,
                       IMG_UINT32                  *paui32ClientFenceSyncOffset,
                       IMG_UINT32                  *paui32ClientFenceValue,
                       IMG_UINT32                  ui32ClientUpdateCount,
                       SYNC_PRIMITIVE_BLOCK           **pauiClientUpdateUFOSyncPrimBlock,
                       IMG_UINT32                  *paui32ClientUpdateSyncOffset,
                       IMG_UINT32                  *paui32ClientUpdateValue,
                       IMG_UINT32                  ui32ServerSyncPrims,
                       IMG_UINT32                  *paui32ServerSyncFlags,
                       SERVER_SYNC_PRIMITIVE       **pasServerSyncs,
					   IMG_UINT32				   ui32NumCheckFenceFDs,
					   IMG_INT32				   *pai32CheckFenceFDs,
					   IMG_INT32                   i32UpdateFenceFD,
                       IMG_BOOL                    bPDumpContinuous)
{
	PVRSRV_ERROR eError;

	eError = SyncAddrListPopulate(&psComputeContext->sSyncAddrListFence,
									ui32ClientFenceCount,
									pauiClientFenceUFOSyncPrimBlock,
									paui32ClientFenceSyncOffset);
	if(eError != PVRSRV_OK)
	{
		goto err_populate_sync_addr_list;
	}

	eError = SyncAddrListPopulate(&psComputeContext->sSyncAddrListUpdate,
									ui32ClientUpdateCount,
									pauiClientUpdateUFOSyncPrimBlock,
									paui32ClientUpdateSyncOffset);
	if(eError != PVRSRV_OK)
	{
		goto err_populate_sync_addr_list;
	}


	if (ui32NumCheckFenceFDs > 0 || i32UpdateFenceFD >= 0)
	{
		return PVRSRV_ERROR_NOT_IMPLEMENTED;
	}

	eError = RGXKickSyncKM(psComputeContext->psDeviceNode,
	                     psComputeContext->psServerCommonContext,
	                     RGXFWIF_DM_CDM,
						 "SyncCDM",
	                     ui32ClientFenceCount,
	                     psComputeContext->sSyncAddrListFence.pasFWAddrs,
	                     paui32ClientFenceValue,
	                     ui32ClientUpdateCount,
	                     psComputeContext->sSyncAddrListUpdate.pasFWAddrs,
	                     paui32ClientUpdateValue,
	                     ui32ServerSyncPrims,
	                     paui32ServerSyncFlags,
	                     pasServerSyncs,
	                     bPDumpContinuous);

err_populate_sync_addr_list:
	return eError;
}