Example #1
0
INT CmDevice_RT::CreateAuxDevice(CmDriverContext * pDriverContext)
{
	INT hr = CM_SUCCESS;
	PCM_HAL_STATE pCmHalState;
	PCM_CONTEXT pCmCtx;
	PGENOS_CONTEXT pOsContext;

	pOsContext =
	    (PGENOS_CONTEXT) GENOS_AllocAndZeroMemory(sizeof(GENOS_CONTEXT));
	CMCHK_NULL(pOsContext);

	if (pDriverContext) {
		pOsContext->wDeviceID = pDriverContext->deviceid;
		pOsContext->wRevision = pDriverContext->device_rev;
		pOsContext->bufmgr = pDriverContext->bufmgr;
	}

	m_pUmdContext = pOsContext;

	CHK_GENOSSTATUS_RETURN_CMERROR(HalCm_Create
				       (pOsContext, &m_DevCreateOption,
					&pCmHalState));

	CHK_GENOSSTATUS_RETURN_CMERROR(pCmHalState->pfnCmAllocate(pCmHalState));

	pCmCtx = (PCM_CONTEXT) GENOS_AllocAndZeroMemory(sizeof(CM_CONTEXT));
	CMCHK_NULL(pCmCtx);
	pCmCtx->GenHwDrvCtx = *pOsContext;
	pCmCtx->pCmHalState = pCmHalState;

	m_pAccelData = (PVOID) pCmCtx;

	CMCHK_HR_MESSAGE(GetMaxValueFromCaps(m_HalMaxValues, m_HalMaxValuesEx),
			 "Failed to get Max values.");
	CMCHK_HR_MESSAGE(GetGenPlatform(m_Platform), "Failed to get GPU type.");

	m_DDIVersion = VA_CM_VERSION;

 finish:
	return hr;
}
Example #2
0
GENOS_STATUS IntelGen_HwAllocateSshBuffer(PGENHW_HW_INTERFACE pHwInterface,
					  PGENHW_SSH pSSH)
{
	GENOS_STATUS eStatus;
	PGENOS_INTERFACE pOsInterface;

	GENHW_HW_ASSERT(pHwInterface);
	GENHW_HW_ASSERT(pSSH);

	eStatus = GENOS_STATUS_UNKNOWN;

	pOsInterface = pHwInterface->pfnGetOsInterface(pHwInterface);

	if (pSSH->pSshBuffer != NULL) {
		GENHW_HW_ASSERTMESSAGE("SSH buffer already allocated.");
		goto finish;
	}
	pSSH->iBindingTableSize =
	    GENOS_ALIGN_CEIL(pHwInterface->SshSettings.iSurfacesPerBT *
			     sizeof(BINDING_TABLE_STATE_G5),
			     pHwInterface->SshSettings.iBTAlignment);

	pSSH->iBindingTableOffset = 0;
	pSSH->iSurfaceStateOffset = pHwInterface->SshSettings.iBindingTables *
	    pSSH->iBindingTableSize;

	pSSH->dwSshIntanceSize = pSSH->iSurfaceStateOffset +
	    (pHwInterface->SshSettings.iSurfaceStates *
	     sizeof(GENHW_SURFACE_STATE));

	pSSH->dwSshSize = pSSH->dwSshIntanceSize;

	pHwInterface->dwIndirectHeapSize =
	    GENOS_ALIGN_CEIL(pSSH->dwSshIntanceSize, 0x00001000);

	GENHW_HW_CHK_STATUS(pOsInterface->pfnSetIndirectStateSize(pOsInterface,
								  pHwInterface->dwIndirectHeapSize));

	pSSH->pSshBuffer = (PBYTE) GENOS_AllocAndZeroMemory(pSSH->dwSshSize);
	if (!pSSH->pSshBuffer) {
		GENHW_HW_ASSERTMESSAGE("Fail to Allocate SSH buffer.");
		goto finish;
	}
	pSSH->iCurSshBufferIndex = 0;
	pSSH->iCurrentBindingTable = 0;
	pSSH->iCurrentSurfaceState = 0;

	eStatus = GENOS_STATUS_SUCCESS;

 finish:
	return eStatus;
}