//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtaUartInit -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. // DtStatus DtaUartInit(DtaUartPort* pUart, const DtFwbSerialCommCtrl* pFwbUart) { pUart->m_pFwbUart = pFwbUart; DtDpcInit(&pUart->m_IntDpc, DtaUartIntDpc, TRUE); // Init transmitter DtEventInit(&pUart->m_TxEvent, TRUE); // Init receiver DtEventInit(&pUart->m_RxEvent, TRUE); return DT_STATUS_OK; }
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtuEventsInit -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- // // Initialised the events structure and mark the event as Initialised/InUse. // DtStatus DtuEventsInit(DtuDeviceData* pDvcData) { Int i; for (i=0; i<MAX_NUM_FILE_HANDLES; i++) { pDvcData->m_Events[i].m_RefCount = 0; // Initialize spinlock DtSpinLockInit(&pDvcData->m_Events[i].m_Lock); DtEventInit(&pDvcData->m_Events[i].m_PendingEvent, FALSE); } return DT_STATUS_OK; }
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtaNonIpHdmiInit -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- // DtStatus DtaNonIpHdmiInit(DtaNonIpPort* pNonIpPort) { DtaHdmi* pHdmi = &pNonIpPort->m_HdmiRx; pHdmi->m_pFwbHdmiAdv7610Ctrl = &FwbHdmiAdv7610AudioSrc.HdmiAdv7610Ctrl; DT_RETURN_ON_ERROR(DtaI2cmInit(&pHdmi->m_I2c, &pHdmi->m_pFwbHdmiAdv7610Ctrl->I2cMaster)); DtMutexInit(&pHdmi->m_StatusLock); // Init controller thread DtThreadInit(&pHdmi->m_ControlThread, DtaHdmiControllerThread, pNonIpPort); DtaHdmiClearStatus(&pNonIpPort->m_HdmiRx.m_Status); DtEventInit(&pHdmi->m_IntEvent, TRUE); DtDpcInit(&pHdmi->m_HandleIntDpc, DtaHdmiHandleIntDpc, TRUE); return DT_STATUS_OK; }
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtaEventsAllocEventsObject -.-.-.-.-.-.-.-.-.-.-.-.-.-.-. // static DtaEvents* DtaEventsAllocEventsObject( DtaDeviceData* pDvcData, DtFileObject* pFileHandle, UInt EventTypeMask) { DtaEvents* pDtaEvents; pDtaEvents = (DtaEvents*)DtMemAllocPool(DtPoolNonPaged, sizeof(DtaEvents), DTA_TAG); if (pDtaEvents == NULL) { DtDbgOut(ERR, EVENTS, "Out of memory allocating DtaEvents struct"); return NULL; } DtAtomicSet(&pDtaEvents->m_RefCount, 1); pDtaEvents->m_File = *pFileHandle; pDtaEvents->m_EventTypeMask = EventTypeMask; pDtaEvents->m_CancelInProgress = FALSE; pDtaEvents->m_NumPendingEvents = 0; DtEventInit(&pDtaEvents->m_PendingEvent, FALSE); DtSpinLockInit(&pDtaEvents->m_Lock); memset(&pDtaEvents->m_PendingEvents, 0, sizeof(pDtaEvents->m_PendingEvents)); // Insert at start of list DtSpinLockAcquire(&pDvcData->m_EventsSpinlock); pDtaEvents->m_pPrev = NULL; pDtaEvents->m_pNext = NULL; if (pDvcData->m_pEvents != NULL) { pDtaEvents->m_pNext = pDvcData->m_pEvents; pDtaEvents->m_pNext->m_pPrev = pDtaEvents; } pDvcData->m_pEvents = pDtaEvents; DtSpinLockRelease(&pDvcData->m_EventsSpinlock); return pDtaEvents; }