static TI_STATUS state_Sleep(TI_HANDLE hPwrState, EPwrStateSmEvent eEvent) { TPwrState *this = (TPwrState*) hPwrState; TI_STATUS rc; reportEvent(this, eEvent); switch (eEvent) { case PWRSTATE_EVNT_OFF: this->fCurrentState = state_WaitDrvStop; wlanDrvIf_UpdateDriverState(this->hOs, DRV_STATE_STOPING); rc = drvMain_Stop(this->hDrvMain, pwrState_DrvMainStopped, this); /* if failed to stop driver, revert back to this state */ if (TI_NOK == rc) { this->fCurrentState = state_Sleep; } break; case PWRSTATE_EVNT_ON: this->fCurrentState = state_Standby; scanCncn_Resume(this->hScanCncn); measurementMgr_Resume(this->hMeasurementMgr); sme_Start(this->hSme); /* transition is now complete */ notifyTransitionComplete(this, TI_FALSE); rc = TI_OK; break; default: handleUnexpectedEvent(this, eEvent); rc = TI_NOK; } return rc; }
VOS_STATUS vos_start( v_CONTEXT_t vosContext ) { VOS_STATUS vStatus = VOS_STATUS_SUCCESS; tSirRetStatus sirStatus = eSIR_SUCCESS; pVosContextType pVosContext = (pVosContextType)vosContext; tHalMacStartParameters halStartParams; VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, "%s: Starting Libra SW", __func__); if (gpVosContext != pVosContext) { VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: mismatch in context", __func__); return VOS_STATUS_E_FAILURE; } if (( pVosContext->pWDAContext == NULL) || ( pVosContext->pMACContext == NULL) || ( pVosContext->pTLContext == NULL)) { if (pVosContext->pWDAContext == NULL) VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: WDA NULL context", __func__); else if (pVosContext->pMACContext == NULL) VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: MAC NULL context", __func__); else VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: TL NULL context", __func__); return VOS_STATUS_E_FAILURE; } vos_event_reset( &(gpVosContext->wdaCompleteEvent) ); vStatus = WDA_NVDownload_Start(pVosContext); if ( vStatus != VOS_STATUS_SUCCESS ) { VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: Failed to start NV Download", __func__); return VOS_STATUS_E_FAILURE; } vStatus = vos_wait_single_event( &(gpVosContext->wdaCompleteEvent), VOS_WDA_TIMEOUT ); if ( vStatus != VOS_STATUS_SUCCESS ) { if ( vStatus == VOS_STATUS_E_TIMEOUT ) { VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: Timeout occurred before WDA_NVDownload_start complete", __func__); } else { VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: WDA_NVDownload_start reporting other error", __func__); } VOS_ASSERT(0); vos_event_reset( &(gpVosContext->wdaCompleteEvent) ); if (vos_is_logp_in_progress(VOS_MODULE_ID_VOSS, NULL)) { VOS_BUG(0); } WDA_setNeedShutdown(vosContext); return VOS_STATUS_E_FAILURE; } VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, "%s: WDA_NVDownload_start correctly started", __func__); vStatus = WDA_start(pVosContext); if ( vStatus != VOS_STATUS_SUCCESS ) { VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: Failed to start WDA", __func__); return VOS_STATUS_E_FAILURE; } VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, "%s: WDA correctly started", __func__); vos_mem_zero((v_PVOID_t)&halStartParams, sizeof(tHalMacStartParameters)); sirStatus = macStart(pVosContext->pMACContext,(v_PVOID_t)&halStartParams); if (eSIR_SUCCESS != sirStatus) { VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, "%s: Failed to start MAC", __func__); goto err_wda_stop; } VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, "%s: MAC correctly started", __func__); vStatus = sme_Start(pVosContext->pMACContext); if (!VOS_IS_STATUS_SUCCESS(vStatus)) { VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, "%s: Failed to start SME", __func__); goto err_mac_stop; } VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, "%s: SME correctly started", __func__); vStatus = WLANTL_Start(pVosContext); if (!VOS_IS_STATUS_SUCCESS(vStatus)) { VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, "%s: Failed to start TL", __func__); goto err_sme_stop; } VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, "TL correctly started"); VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, "%s: VOSS Start is successful!!", __func__); return VOS_STATUS_SUCCESS; err_sme_stop: sme_Stop(pVosContext->pMACContext, HAL_STOP_TYPE_SYS_RESET); err_mac_stop: macStop( pVosContext->pMACContext, HAL_STOP_TYPE_SYS_RESET ); err_wda_stop: vos_event_reset( &(gpVosContext->wdaCompleteEvent) ); vStatus = WDA_stop( pVosContext, HAL_STOP_TYPE_RF_KILL); if (!VOS_IS_STATUS_SUCCESS(vStatus)) { VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: Failed to stop WDA", __func__); VOS_ASSERT( VOS_IS_STATUS_SUCCESS( vStatus ) ); WDA_setNeedShutdown(vosContext); } else { vStatus = vos_wait_single_event( &(gpVosContext->wdaCompleteEvent), VOS_WDA_TIMEOUT ); if( vStatus != VOS_STATUS_SUCCESS ) { if( vStatus == VOS_STATUS_E_TIMEOUT ) { VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, "%s: Timeout occurred before WDA_stop complete", __func__); } else { VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, "%s: WDA_stop reporting other error", __func__); } VOS_ASSERT( 0 ); WDA_setNeedShutdown(vosContext); } } return VOS_STATUS_E_FAILURE; }