164064216a8433360745f69edddce19a606659163The Android Open Source Project/**************************************************************************** 264064216a8433360745f69edddce19a606659163The Android Open Source Project**+-----------------------------------------------------------------------+** 364064216a8433360745f69edddce19a606659163The Android Open Source Project**| |** 464064216a8433360745f69edddce19a606659163The Android Open Source Project**| Copyright(c) 1998 - 2008 Texas Instruments. All rights reserved. |** 564064216a8433360745f69edddce19a606659163The Android Open Source Project**| All rights reserved. |** 664064216a8433360745f69edddce19a606659163The Android Open Source Project**| |** 764064216a8433360745f69edddce19a606659163The Android Open Source Project**| Redistribution and use in source and binary forms, with or without |** 864064216a8433360745f69edddce19a606659163The Android Open Source Project**| modification, are permitted provided that the following conditions |** 964064216a8433360745f69edddce19a606659163The Android Open Source Project**| are met: |** 1064064216a8433360745f69edddce19a606659163The Android Open Source Project**| |** 1164064216a8433360745f69edddce19a606659163The Android Open Source Project**| * Redistributions of source code must retain the above copyright |** 1264064216a8433360745f69edddce19a606659163The Android Open Source Project**| notice, this list of conditions and the following disclaimer. |** 1364064216a8433360745f69edddce19a606659163The Android Open Source Project**| * Redistributions in binary form must reproduce the above copyright |** 1464064216a8433360745f69edddce19a606659163The Android Open Source Project**| notice, this list of conditions and the following disclaimer in |** 1564064216a8433360745f69edddce19a606659163The Android Open Source Project**| the documentation and/or other materials provided with the |** 1664064216a8433360745f69edddce19a606659163The Android Open Source Project**| distribution. |** 1764064216a8433360745f69edddce19a606659163The Android Open Source Project**| * Neither the name Texas Instruments nor the names of its |** 1864064216a8433360745f69edddce19a606659163The Android Open Source Project**| contributors may be used to endorse or promote products derived |** 1964064216a8433360745f69edddce19a606659163The Android Open Source Project**| from this software without specific prior written permission. |** 2064064216a8433360745f69edddce19a606659163The Android Open Source Project**| |** 2164064216a8433360745f69edddce19a606659163The Android Open Source Project**| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |** 2264064216a8433360745f69edddce19a606659163The Android Open Source Project**| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |** 2364064216a8433360745f69edddce19a606659163The Android Open Source Project**| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |** 2464064216a8433360745f69edddce19a606659163The Android Open Source Project**| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |** 2564064216a8433360745f69edddce19a606659163The Android Open Source Project**| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |** 2664064216a8433360745f69edddce19a606659163The Android Open Source Project**| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |** 2764064216a8433360745f69edddce19a606659163The Android Open Source Project**| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |** 2864064216a8433360745f69edddce19a606659163The Android Open Source Project**| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |** 2964064216a8433360745f69edddce19a606659163The Android Open Source Project**| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |** 3064064216a8433360745f69edddce19a606659163The Android Open Source Project**| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |** 3164064216a8433360745f69edddce19a606659163The Android Open Source Project**| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |** 3264064216a8433360745f69edddce19a606659163The Android Open Source Project**| |** 3364064216a8433360745f69edddce19a606659163The Android Open Source Project**+-----------------------------------------------------------------------+** 3464064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************/ 3564064216a8433360745f69edddce19a606659163The Android Open Source Project 3664064216a8433360745f69edddce19a606659163The Android Open Source Project 3764064216a8433360745f69edddce19a606659163The Android Open Source Project/*******************************************************************************/ 3864064216a8433360745f69edddce19a606659163The Android Open Source Project/* */ 3964064216a8433360745f69edddce19a606659163The Android Open Source Project/* MODULE: recoveryMgr.c */ 4064064216a8433360745f69edddce19a606659163The Android Open Source Project/* PURPOSE: The responsibility of RecoveryMgr module is to provide main API */ 4164064216a8433360745f69edddce19a606659163The Android Open Source Project/* to HelthMonitor that invokes the recovery process if failure is */ 4264064216a8433360745f69edddce19a606659163The Android Open Source Project/* detected. It performs disable/enable inputs from outside, calls */ 4364064216a8433360745f69edddce19a606659163The Android Open Source Project/* restart of TWD and informs STAD modules that recovery has been */ 4464064216a8433360745f69edddce19a606659163The Android Open Source Project/* performed. */ 4564064216a8433360745f69edddce19a606659163The Android Open Source Project/* */ 4664064216a8433360745f69edddce19a606659163The Android Open Source Project/*******************************************************************************/ 4764064216a8433360745f69edddce19a606659163The Android Open Source Project 4864064216a8433360745f69edddce19a606659163The Android Open Source Project#include "paramOut.h" 4964064216a8433360745f69edddce19a606659163The Android Open Source Project#include "osApi.h" 5064064216a8433360745f69edddce19a606659163The Android Open Source Project#include "DataCtrl_Api.h" 5164064216a8433360745f69edddce19a606659163The Android Open Source Project#include "report.h" 5264064216a8433360745f69edddce19a606659163The Android Open Source Project#include "recoveryMgr.h" 5364064216a8433360745f69edddce19a606659163The Android Open Source Project#include "recoveryMgr_API.h" 5464064216a8433360745f69edddce19a606659163The Android Open Source Project#include "TNETW_Driver_api.h" 5564064216a8433360745f69edddce19a606659163The Android Open Source Project 5664064216a8433360745f69edddce19a606659163The Android Open Source Project#include "healthMonitor.h" 5764064216a8433360745f69edddce19a606659163The Android Open Source Project#include "PowerMgr_API.h" 5864064216a8433360745f69edddce19a606659163The Android Open Source Project#include "siteMgrApi.h" 5964064216a8433360745f69edddce19a606659163The Android Open Source Project#include "currBss.h" 6064064216a8433360745f69edddce19a606659163The Android Open Source Project#include "whalCtrl.h" 6164064216a8433360745f69edddce19a606659163The Android Open Source Project 6264064216a8433360745f69edddce19a606659163The Android Open Source Project#include "TNETW_Driver.h" 6364064216a8433360745f69edddce19a606659163The Android Open Source Project#include "TNETWIF.h" 6464064216a8433360745f69edddce19a606659163The Android Open Source Project#include "SoftGeminiApi.h" 6564064216a8433360745f69edddce19a606659163The Android Open Source Project 6664064216a8433360745f69edddce19a606659163The Android Open Source Project/* static function */ 6764064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef USE_RECOVERY 6864064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void recoveryMgr_SM(TI_HANDLE hRecoveryMgr); 6964064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS recoveryMgr_notifyStadAboutRecovery(TI_HANDLE hRecoveryMgr); 7064064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /* USE_RECOVERY */ 7164064216a8433360745f69edddce19a606659163The Android Open Source Project 7264064216a8433360745f69edddce19a606659163The Android Open Source Project/******************************************************************************* 7364064216a8433360745f69edddce19a606659163The Android Open Source Project* PUBLIC FUNCTIONS IMPLEMENTATION * 7464064216a8433360745f69edddce19a606659163The Android Open Source Project********************************************************************************/ 7564064216a8433360745f69edddce19a606659163The Android Open Source Project 7664064216a8433360745f69edddce19a606659163The Android Open Source Project/************************************************************************* 7764064216a8433360745f69edddce19a606659163The Android Open Source Project* recoveryMgr_create * 7864064216a8433360745f69edddce19a606659163The Android Open Source Project************************************************************************** 7964064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION: This function initializes the RecoveryMgr module. 8064064216a8433360745f69edddce19a606659163The Android Open Source Project* 8164064216a8433360745f69edddce19a606659163The Android Open Source Project* INPUT: hOs - handle to Os Abstraction Layer 8264064216a8433360745f69edddce19a606659163The Android Open Source Project* 8364064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURN: Handle to the allocated RecoveryMgr module 8464064216a8433360745f69edddce19a606659163The Android Open Source Project*************************************************************************/ 8564064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_HANDLE recoveryMgr_create(TI_HANDLE hOs) 8664064216a8433360745f69edddce19a606659163The Android Open Source Project{ 8764064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef USE_RECOVERY 8864064216a8433360745f69edddce19a606659163The Android Open Source Project recoverMgr_t *hRecoveryMgr; 8964064216a8433360745f69edddce19a606659163The Android Open Source Project 9064064216a8433360745f69edddce19a606659163The Android Open Source Project /* allocate RecoverMgr module */ 9164064216a8433360745f69edddce19a606659163The Android Open Source Project hRecoveryMgr = os_memoryAlloc(hOs, (sizeof(recoverMgr_t))); 9264064216a8433360745f69edddce19a606659163The Android Open Source Project 9364064216a8433360745f69edddce19a606659163The Android Open Source Project if(!hRecoveryMgr) 9464064216a8433360745f69edddce19a606659163The Android Open Source Project { 9564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("Error allocating the RecoverMgr Module\n")); 9664064216a8433360745f69edddce19a606659163The Android Open Source Project return NULL; 9764064216a8433360745f69edddce19a606659163The Android Open Source Project } 9864064216a8433360745f69edddce19a606659163The Android Open Source Project 9964064216a8433360745f69edddce19a606659163The Android Open Source Project /* Reset RecoverMgr module */ 10064064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryZero(hOs, hRecoveryMgr, (sizeof(recoverMgr_t))); 10164064216a8433360745f69edddce19a606659163The Android Open Source Project 10264064216a8433360745f69edddce19a606659163The Android Open Source Project hRecoveryMgr->hOs = hOs; 10364064216a8433360745f69edddce19a606659163The Android Open Source Project 10464064216a8433360745f69edddce19a606659163The Android Open Source Project return(hRecoveryMgr); 10564064216a8433360745f69edddce19a606659163The Android Open Source Project#else 10664064216a8433360745f69edddce19a606659163The Android Open Source Project return NULL; 10764064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /* USE_RECOVERY */ 10864064216a8433360745f69edddce19a606659163The Android Open Source Project} /* recoveryMgr_create */ 10964064216a8433360745f69edddce19a606659163The Android Open Source Project 11064064216a8433360745f69edddce19a606659163The Android Open Source Project 11164064216a8433360745f69edddce19a606659163The Android Open Source Project 11264064216a8433360745f69edddce19a606659163The Android Open Source Project/*************************************************************************** 11364064216a8433360745f69edddce19a606659163The Android Open Source Project* recoveryMgr_config * 11464064216a8433360745f69edddce19a606659163The Android Open Source Project**************************************************************************** 11564064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION: This function configures the recoveryMgr module 11664064216a8433360745f69edddce19a606659163The Android Open Source Project* 11764064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURNS: OK - Configuration successful 11864064216a8433360745f69edddce19a606659163The Android Open Source Project* NOK - Configuration unsuccessful 11964064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************/ 12064064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS recoveryMgr_config(TI_HANDLE hRecoveryMgr, 12164064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hReport, 12264064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hTxData, 12364064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hTnetwDrv, 12464064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hScr, 12564064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hCurrBss, 12664064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hPowerMgr, 12764064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hHealthMonitor, 12864064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hSoftGemini) 12964064216a8433360745f69edddce19a606659163The Android Open Source Project{ 13064064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef USE_RECOVERY 13164064216a8433360745f69edddce19a606659163The Android Open Source Project recoverMgr_t *pRecoverMgr = (recoverMgr_t *)hRecoveryMgr; 13264064216a8433360745f69edddce19a606659163The Android Open Source Project 13364064216a8433360745f69edddce19a606659163The Android Open Source Project /* configure modules handles */ 13464064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoverMgr->hReport = hReport; 13564064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoverMgr->hTxData = hTxData; 13664064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoverMgr->hTnetwDrv = hTnetwDrv; 13764064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoverMgr->hScr = hScr; 13864064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoverMgr->hCurrBss = hCurrBss; 13964064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoverMgr->hPowerMgr = hPowerMgr; 14064064216a8433360745f69edddce19a606659163The Android Open Source Project 14164064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoverMgr->hHealthMonitor = hHealthMonitor; 14264064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoverMgr->hSoftGemini = hSoftGemini; 14364064216a8433360745f69edddce19a606659163The Android Open Source Project 14464064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoverMgr->fRecoveryInProcess = FALSE; 14564064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoverMgr->smState = REC_MGR_STATE_IDLE; 14664064216a8433360745f69edddce19a606659163The Android Open Source Project 14764064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INIT(pRecoverMgr->hReport, RECOVERY_MGR_MODULE_LOG, 14864064216a8433360745f69edddce19a606659163The Android Open Source Project (".....RecoveryMgr configured successfully\n")); 14964064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /* USE_RECOVERY */ 15064064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 15164064216a8433360745f69edddce19a606659163The Android Open Source Project} /* recoveryMgr_config */ 15264064216a8433360745f69edddce19a606659163The Android Open Source Project 15364064216a8433360745f69edddce19a606659163The Android Open Source Project/*************************************************************************** 15464064216a8433360745f69edddce19a606659163The Android Open Source Project* recoveryMgr_destroy * 15564064216a8433360745f69edddce19a606659163The Android Open Source Project**************************************************************************** 15664064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION: This function unload the RecoverMgr module. It frees 15764064216a8433360745f69edddce19a606659163The Android Open Source Project* the RecoveryMgr module 15864064216a8433360745f69edddce19a606659163The Android Open Source Project* 15964064216a8433360745f69edddce19a606659163The Android Open Source Project* INPUTS: hRecoveryMgr - the object 16064064216a8433360745f69edddce19a606659163The Android Open Source Project* 16164064216a8433360745f69edddce19a606659163The Android Open Source Project* OUTPUT: 16264064216a8433360745f69edddce19a606659163The Android Open Source Project* 16364064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURNS: OK - Unload succesfull 16464064216a8433360745f69edddce19a606659163The Android Open Source Project* NOK - Unload unsuccesfull 16564064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************/ 16664064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS recoveryMgr_destroy(TI_HANDLE hRecoveryMgr) 16764064216a8433360745f69edddce19a606659163The Android Open Source Project{ 16864064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef USE_RECOVERY 16964064216a8433360745f69edddce19a606659163The Android Open Source Project recoverMgr_t *pRecoverMgr = (recoverMgr_t *)hRecoveryMgr; 17064064216a8433360745f69edddce19a606659163The Android Open Source Project 17164064216a8433360745f69edddce19a606659163The Android Open Source Project /* free RecoverMgr Module */ 17264064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryFree(pRecoverMgr->hOs, pRecoverMgr, sizeof(recoverMgr_t)); 17364064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /* USE_RECOVERY */ 17464064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 17564064216a8433360745f69edddce19a606659163The Android Open Source Project} 17664064216a8433360745f69edddce19a606659163The Android Open Source Project 17764064216a8433360745f69edddce19a606659163The Android Open Source Project 17864064216a8433360745f69edddce19a606659163The Android Open Source Project/********************************************************************************************** 17964064216a8433360745f69edddce19a606659163The Android Open Source Project * recoveryMgr_SM() 18064064216a8433360745f69edddce19a606659163The Android Open Source Project ********************************************************************************************** 18164064216a8433360745f69edddce19a606659163The Android Open Source Project * DESCRIPTION: 18264064216a8433360745f69edddce19a606659163The Android Open Source Project ============ 18364064216a8433360745f69edddce19a606659163The Android Open Source Project This is the recoveryMgr state machine. 18464064216a8433360745f69edddce19a606659163The Android Open Source Project The inceptive event for RecoveryMgr SM is invoking the recovery process by HelthMonitor. 18564064216a8433360745f69edddce19a606659163The Android Open Source Project After disabling Outside Inputs and starting TWD Restart, RecoveryMgr SM waits end of TWD Restart, 18664064216a8433360745f69edddce19a606659163The Android Open Source Project then informs STAD about recovery and enables Outside Inputs. 18764064216a8433360745f69edddce19a606659163The Android Open Source Project The SM supports both Sync and Async accesses to the HW. 18864064216a8433360745f69edddce19a606659163The Android Open Source Project It loops and progresses from state to state as long as the HW is accessed synchronously. 18964064216a8433360745f69edddce19a606659163The Android Open Source Project Once the access is Asynchronous (TNETWIF_PENDING), it exits and is called later 19064064216a8433360745f69edddce19a606659163The Android Open Source Project by the TNETWIF when the HW is ready. 19164064216a8433360745f69edddce19a606659163The Android Open Source Project That's why it uses unspecified-mode accesses (e.g. TNETWIF_ReadMemOpt) which 19264064216a8433360745f69edddce19a606659163The Android Open Source Project selects either Sync or Async automatically according to the platform and length. 19364064216a8433360745f69edddce19a606659163The Android Open Source Project Yet, the short transactions (EOB and Interrupt-Request 32 bit writes) are done using Sync 19464064216a8433360745f69edddce19a606659163The Android Open Source Project access to simplify the SM 19564064216a8433360745f69edddce19a606659163The Android Open Source Project NOTE: MCS projects may require full Sync/Async support, so the Sync accesses may need to be modified. 19664064216a8433360745f69edddce19a606659163The Android Open Source Project 19764064216a8433360745f69edddce19a606659163The Android Open Source Project NOTE: The recoveryMgr-SM detailed description is provided in "CE-2.0 Recovery LLD.doc". 19864064216a8433360745f69edddce19a606659163The Android Open Source Project 19964064216a8433360745f69edddce19a606659163The Android Open Source Project **********************************************************************************************/ 20064064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef USE_RECOVERY 20164064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void recoveryMgr_SM(TI_HANDLE hRecoveryMgr) 20264064216a8433360745f69edddce19a606659163The Android Open Source Project{ 20364064216a8433360745f69edddce19a606659163The Android Open Source Project recoverMgr_t *pRecoverMgr = (recoverMgr_t *)hRecoveryMgr; 20464064216a8433360745f69edddce19a606659163The Android Open Source Project healthMonitor_t *pHealthMonitor = (healthMonitor_t *)pRecoverMgr->hHealthMonitor; 20564064216a8433360745f69edddce19a606659163The Android Open Source Project 20664064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG 20764064216a8433360745f69edddce19a606659163The Android Open Source Project if (hRecoveryMgr == NULL) 20864064216a8433360745f69edddce19a606659163The Android Open Source Project { 20964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pRecoverMgr->hReport, RECOVERY_MGR_MODULE_LOG, 21064064216a8433360745f69edddce19a606659163The Android Open Source Project ("recoveryMgr_SM(): **** Called with NULL handle!! ****\n")); 21164064216a8433360745f69edddce19a606659163The Android Open Source Project return; 21264064216a8433360745f69edddce19a606659163The Android Open Source Project } 21364064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /* TI_DBG */ 21464064216a8433360745f69edddce19a606659163The Android Open Source Project 21564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRecoverMgr->hReport, RECOVERY_MGR_MODULE_LOG, 21664064216a8433360745f69edddce19a606659163The Android Open Source Project ("recoveryMgr_SM(): smState=%d\n", pRecoverMgr->smState)); 21764064216a8433360745f69edddce19a606659163The Android Open Source Project 21864064216a8433360745f69edddce19a606659163The Android Open Source Project /* 21964064216a8433360745f69edddce19a606659163The Android Open Source Project * Loop through the states sequence as long as the process is synchronous. 22064064216a8433360745f69edddce19a606659163The Android Open Source Project * Exit when finished or if an Asynchronous process is required. In this case 22164064216a8433360745f69edddce19a606659163The Android Open Source Project * the SM process will be resumed later (called back by TNETWIF). 22264064216a8433360745f69edddce19a606659163The Android Open Source Project */ 22364064216a8433360745f69edddce19a606659163The Android Open Source Project switch (pRecoverMgr->smState) 22464064216a8433360745f69edddce19a606659163The Android Open Source Project { 22564064216a8433360745f69edddce19a606659163The Android Open Source Project 22664064216a8433360745f69edddce19a606659163The Android Open Source Project case REC_MGR_STATE_IDLE: 22764064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRecoverMgr->hReport, RECOVERY_MGR_MODULE_LOG, 22864064216a8433360745f69edddce19a606659163The Android Open Source Project (".....REC_MGR_STATE_IDLE\n")); 22964064216a8433360745f69edddce19a606659163The Android Open Source Project 23064064216a8433360745f69edddce19a606659163The Android Open Source Project healthMonitor_suspendPeriodicTest(pRecoverMgr->hHealthMonitor); 23164064216a8433360745f69edddce19a606659163The Android Open Source Project 23264064216a8433360745f69edddce19a606659163The Android Open Source Project /* disabling Outside Inputs and starting TWD Restart */ 23364064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoverMgr->fDisableInputsFromOs = TRUE; 23464064216a8433360745f69edddce19a606659163The Android Open Source Project 23564064216a8433360745f69edddce19a606659163The Android Open Source Project /* suspend TX */ 23664064216a8433360745f69edddce19a606659163The Android Open Source Project txData_stop(pHealthMonitor->hTxData); 23764064216a8433360745f69edddce19a606659163The Android Open Source Project 23864064216a8433360745f69edddce19a606659163The Android Open Source Project /* Disabling the IRQ line so the recovery will be an atomic action */ 23964064216a8433360745f69edddce19a606659163The Android Open Source Project os_disableIrq (pRecoverMgr->hOs); 24064064216a8433360745f69edddce19a606659163The Android Open Source Project 24164064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoverMgr->smState = REC_MGR_STATE_WAIT_TWD_RESTART; 24264064216a8433360745f69edddce19a606659163The Android Open Source Project 24364064216a8433360745f69edddce19a606659163The Android Open Source Project TnetwDrv_StartRecovery(pRecoverMgr->hTnetwDrv, 24464064216a8433360745f69edddce19a606659163The Android Open Source Project (void*)recoveryMgr_endOfRecovery, 24564064216a8433360745f69edddce19a606659163The Android Open Source Project hRecoveryMgr); 24664064216a8433360745f69edddce19a606659163The Android Open Source Project 24764064216a8433360745f69edddce19a606659163The Android Open Source Project return; 24864064216a8433360745f69edddce19a606659163The Android Open Source Project 24964064216a8433360745f69edddce19a606659163The Android Open Source Project case REC_MGR_STATE_WAIT_TWD_RESTART: 25064064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRecoverMgr->hReport, RECOVERY_MGR_MODULE_LOG, 25164064216a8433360745f69edddce19a606659163The Android Open Source Project (".....REC_MGR_STATE_WAIT_TWD_RESTART\n")); 25264064216a8433360745f69edddce19a606659163The Android Open Source Project /* informs STAD about recovery */ 25364064216a8433360745f69edddce19a606659163The Android Open Source Project recoveryMgr_notifyStadAboutRecovery(hRecoveryMgr); 25464064216a8433360745f69edddce19a606659163The Android Open Source Project 25564064216a8433360745f69edddce19a606659163The Android Open Source Project /* TX resume */ 25664064216a8433360745f69edddce19a606659163The Android Open Source Project txData_startAfterRecovery(pHealthMonitor->hTxData); 25764064216a8433360745f69edddce19a606659163The Android Open Source Project 25864064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoverMgr->fDisableInputsFromOs = FALSE; 25964064216a8433360745f69edddce19a606659163The Android Open Source Project 26064064216a8433360745f69edddce19a606659163The Android Open Source Project /* call inside CmdMBox_SetModeNormal */ 26164064216a8433360745f69edddce19a606659163The Android Open Source Project whalCtrl_exitFromInitMode(((healthMonitor_t *)pRecoverMgr->hHealthMonitor)->hHalCtrl); 26264064216a8433360745f69edddce19a606659163The Android Open Source Project 26364064216a8433360745f69edddce19a606659163The Android Open Source Project /* send the min power level to the FW */ 26464064216a8433360745f69edddce19a606659163The Android Open Source Project MacServices_powerAutho_ExitFromInit(((TnetwDrv_t *)pRecoverMgr->hTnetwDrv)->hMacServices); 26564064216a8433360745f69edddce19a606659163The Android Open Source Project 26664064216a8433360745f69edddce19a606659163The Android Open Source Project /* Soft Gemini Section */ 26764064216a8433360745f69edddce19a606659163The Android Open Source Project SoftGemini_handleRecovery(pRecoverMgr->hSoftGemini); 26864064216a8433360745f69edddce19a606659163The Android Open Source Project 26964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT((".....recoveryMgr: End Of Recovery\n")); 27064064216a8433360745f69edddce19a606659163The Android Open Source Project 27164064216a8433360745f69edddce19a606659163The Android Open Source Project healthMonitor_resumePeriodicTest(pRecoverMgr->hHealthMonitor); 27264064216a8433360745f69edddce19a606659163The Android Open Source Project 27364064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoverMgr->fRecoveryInProcess = FALSE; 27464064216a8433360745f69edddce19a606659163The Android Open Source Project 27564064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoverMgr->smState = REC_MGR_STATE_IDLE; 27664064216a8433360745f69edddce19a606659163The Android Open Source Project return; /* recovery process ended */ 27764064216a8433360745f69edddce19a606659163The Android Open Source Project 27864064216a8433360745f69edddce19a606659163The Android Open Source Project default: 27964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pRecoverMgr->hReport, RECOVERY_MGR_MODULE_LOG, 28064064216a8433360745f69edddce19a606659163The Android Open Source Project ("recoveryMgr_SM(): Unexpected state, smState=%d\n", pRecoverMgr->smState)); 28164064216a8433360745f69edddce19a606659163The Android Open Source Project return; 28264064216a8433360745f69edddce19a606659163The Android Open Source Project 28364064216a8433360745f69edddce19a606659163The Android Open Source Project } /* switch (pRecoverMgr->smState) */ 28464064216a8433360745f69edddce19a606659163The Android Open Source Project} /* recoveryMgr_SM */ 28564064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /* USE_RECOVERY */ 28664064216a8433360745f69edddce19a606659163The Android Open Source Project 28764064216a8433360745f69edddce19a606659163The Android Open Source Project/*************************************************************************** 28864064216a8433360745f69edddce19a606659163The Android Open Source Project* recoveryMgr_recoveryProcess * 28964064216a8433360745f69edddce19a606659163The Android Open Source Project**************************************************************************** 29064064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION: Main interface that called if the WLAN driver detects error 29164064216a8433360745f69edddce19a606659163The Android Open Source Project* during the Monitoring process. 29264064216a8433360745f69edddce19a606659163The Android Open Source Project* 29364064216a8433360745f69edddce19a606659163The Android Open Source Project* INPUTS: hRecoveryMgr - the object 29464064216a8433360745f69edddce19a606659163The Android Open Source Project* 29564064216a8433360745f69edddce19a606659163The Android Open Source Project* OUTPUT: 29664064216a8433360745f69edddce19a606659163The Android Open Source Project* 29764064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURNS: OK - Recovery Process started 29864064216a8433360745f69edddce19a606659163The Android Open Source Project* NOK - Recovery cannot started because it's in process already 29964064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************/ 30064064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS recoveryMgr_recoveryProcess(TI_HANDLE hRecoveryMgr) 30164064216a8433360745f69edddce19a606659163The Android Open Source Project{ 30264064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef USE_RECOVERY 30364064216a8433360745f69edddce19a606659163The Android Open Source Project recoverMgr_t *pRecoverMgr = (recoverMgr_t *)hRecoveryMgr; 30464064216a8433360745f69edddce19a606659163The Android Open Source Project healthMonitor_t *pHealthMonitor = (healthMonitor_t *)pRecoverMgr->hHealthMonitor; 30564064216a8433360745f69edddce19a606659163The Android Open Source Project WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)pHealthMonitor->hHalCtrl; 30664064216a8433360745f69edddce19a606659163The Android Open Source Project WlanParams_T *pWlanParams = whal_ParamsGetWlanParams(pWhalCtrl->pWhalParams); 30764064216a8433360745f69edddce19a606659163The Android Open Source Project 30864064216a8433360745f69edddce19a606659163The Android Open Source Project if(!pWlanParams->RecoveryEnable) 30964064216a8433360745f69edddce19a606659163The Android Open Source Project { 31064064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("recoveryMgr_recoveryProcess: Recovery is disabled in tiwlan.ini, abort recovery process\n")); 31164064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 31264064216a8433360745f69edddce19a606659163The Android Open Source Project } 31364064216a8433360745f69edddce19a606659163The Android Open Source Project else 31464064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT((".....recoveryMgr_recoveryProcess\n")); 31564064216a8433360745f69edddce19a606659163The Android Open Source Project 31664064216a8433360745f69edddce19a606659163The Android Open Source Project if(pRecoverMgr->fRecoveryInProcess == FALSE) 31764064216a8433360745f69edddce19a606659163The Android Open Source Project { 31864064216a8433360745f69edddce19a606659163The Android Open Source Project pHealthMonitor->numOfRecoveryPerformed++; 31964064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoverMgr->fRecoveryInProcess = TRUE; 32064064216a8433360745f69edddce19a606659163The Android Open Source Project recoveryMgr_SM(hRecoveryMgr); 32164064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 32264064216a8433360745f69edddce19a606659163The Android Open Source Project } 32364064216a8433360745f69edddce19a606659163The Android Open Source Project else 32464064216a8433360745f69edddce19a606659163The Android Open Source Project { 32564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pRecoverMgr->hReport, RECOVERY_MGR_MODULE_LOG, 32664064216a8433360745f69edddce19a606659163The Android Open Source Project ("recoveryProcess(): **** Recovery in process already!! ****\n")); 32764064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 32864064216a8433360745f69edddce19a606659163The Android Open Source Project } 32964064216a8433360745f69edddce19a606659163The Android Open Source Project#else 33064064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 33164064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /* USE_RECOVERY */ 33264064216a8433360745f69edddce19a606659163The Android Open Source Project} /* recoveryMgr_recoveryProcess */ 33364064216a8433360745f69edddce19a606659163The Android Open Source Project 33464064216a8433360745f69edddce19a606659163The Android Open Source Project 33564064216a8433360745f69edddce19a606659163The Android Open Source Project 33664064216a8433360745f69edddce19a606659163The Android Open Source Project 33764064216a8433360745f69edddce19a606659163The Android Open Source Project/*************************************************************************** 33864064216a8433360745f69edddce19a606659163The Android Open Source Project* recoveryMgr_endOfRecovery * 33964064216a8433360745f69edddce19a606659163The Android Open Source Project**************************************************************************** 34064064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION: This function is the CB from the RecoveryCtrl that will 34164064216a8433360745f69edddce19a606659163The Android Open Source Project* issue the "EndOfTwdRestart" event to the RecoveryMgr SM. 34264064216a8433360745f69edddce19a606659163The Android Open Source Project* Indicates that TWD has performed its recovery. 34364064216a8433360745f69edddce19a606659163The Android Open Source Project* 34464064216a8433360745f69edddce19a606659163The Android Open Source Project* INPUTS: hRecoveryMgr - the object 34564064216a8433360745f69edddce19a606659163The Android Open Source Project* 34664064216a8433360745f69edddce19a606659163The Android Open Source Project* OUTPUT: 34764064216a8433360745f69edddce19a606659163The Android Open Source Project* 34864064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURNS: OK - succesfull 34964064216a8433360745f69edddce19a606659163The Android Open Source Project* NOK - unsuccesfull 35064064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************/ 35164064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS recoveryMgr_endOfRecovery(TI_HANDLE hRecoveryMgr) 35264064216a8433360745f69edddce19a606659163The Android Open Source Project{ 35364064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef USE_RECOVERY 35464064216a8433360745f69edddce19a606659163The Android Open Source Project recoverMgr_t *pRecoverMgr = (recoverMgr_t *)hRecoveryMgr; 35564064216a8433360745f69edddce19a606659163The Android Open Source Project 35664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INIT(pRecoverMgr->hReport, RECOVERY_MGR_MODULE_LOG, 35764064216a8433360745f69edddce19a606659163The Android Open Source Project (".....recoveryMgr_endOfRecovery\n")); 35864064216a8433360745f69edddce19a606659163The Android Open Source Project 35964064216a8433360745f69edddce19a606659163The Android Open Source Project recoveryMgr_SM(hRecoveryMgr); 36064064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /* USE_RECOVERY */ 36164064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 36264064216a8433360745f69edddce19a606659163The Android Open Source Project} /* recoveryMgr_endOfRecovery */ 36364064216a8433360745f69edddce19a606659163The Android Open Source Project 36464064216a8433360745f69edddce19a606659163The Android Open Source Project/*************************************************************************** 36564064216a8433360745f69edddce19a606659163The Android Open Source Project* recoveryMgr_notifyStadAboutRecovery * 36664064216a8433360745f69edddce19a606659163The Android Open Source Project**************************************************************************** 36764064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION: Inform STAD that recovery has been performed: inform TX, 36864064216a8433360745f69edddce19a606659163The Android Open Source Project* SCR, Current BSS and Power Mgr about FW reset. 36964064216a8433360745f69edddce19a606659163The Android Open Source Project* 37064064216a8433360745f69edddce19a606659163The Android Open Source Project* INPUTS: hRecoveryMgr - the object 37164064216a8433360745f69edddce19a606659163The Android Open Source Project* 37264064216a8433360745f69edddce19a606659163The Android Open Source Project* OUTPUT: 37364064216a8433360745f69edddce19a606659163The Android Open Source Project* 37464064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURNS: OK - succesfull 37564064216a8433360745f69edddce19a606659163The Android Open Source Project* NOK - unsuccesfull 37664064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************/ 37764064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef USE_RECOVERY 37864064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS recoveryMgr_notifyStadAboutRecovery(TI_HANDLE hRecoveryMgr) 37964064216a8433360745f69edddce19a606659163The Android Open Source Project{ 38064064216a8433360745f69edddce19a606659163The Android Open Source Project recoverMgr_t *pRecoverMgr = (recoverMgr_t *)hRecoveryMgr; 38164064216a8433360745f69edddce19a606659163The Android Open Source Project healthMonitor_t *pHealthMonitor = (healthMonitor_t *)pRecoverMgr->hHealthMonitor; 38264064216a8433360745f69edddce19a606659163The Android Open Source Project 38364064216a8433360745f69edddce19a606659163The Android Open Source Project txData_recoveryIndication (pHealthMonitor->hTxData); 38464064216a8433360745f69edddce19a606659163The Android Open Source Project TnetwDrv_RecoveryCtrlBlk(pHealthMonitor->hTnetwDrv); 38564064216a8433360745f69edddce19a606659163The Android Open Source Project 38664064216a8433360745f69edddce19a606659163The Android Open Source Project scr_notifyFWReset( pRecoverMgr->hScr ); 38764064216a8433360745f69edddce19a606659163The Android Open Source Project currBSS_performRecovery(pRecoverMgr->hCurrBss); 38864064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_notifyFWReset(pRecoverMgr->hPowerMgr); 38964064216a8433360745f69edddce19a606659163The Android Open Source Project 39064064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 39164064216a8433360745f69edddce19a606659163The Android Open Source Project} /* recoveryMgr_notifyStadAboutRecovery */ 39264064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /* USE_RECOVERY */ 39364064216a8433360745f69edddce19a606659163The Android Open Source Project/*************************************************************************** 39464064216a8433360745f69edddce19a606659163The Android Open Source Project* recoveryMgr_recoveryProcess * 39564064216a8433360745f69edddce19a606659163The Android Open Source Project**************************************************************************** 39664064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION: check if Inputs From OS are Disabled. 39764064216a8433360745f69edddce19a606659163The Android Open Source Project* 39864064216a8433360745f69edddce19a606659163The Android Open Source Project* INPUTS: hRecoveryMgr - the object 39964064216a8433360745f69edddce19a606659163The Android Open Source Project* 40064064216a8433360745f69edddce19a606659163The Android Open Source Project* OUTPUT: 40164064216a8433360745f69edddce19a606659163The Android Open Source Project* 40264064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURN: TRUE - Inputs From OS are Disabled 40364064216a8433360745f69edddce19a606659163The Android Open Source Project* FALSE - Inputs From OS are not Disabled 40464064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************/ 40564064216a8433360745f69edddce19a606659163The Android Open Source ProjectBOOL recoveryMgr_areInputsFromOsDisabled(TI_HANDLE hRecoveryMgr) 40664064216a8433360745f69edddce19a606659163The Android Open Source Project{ 40764064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef USE_RECOVERY 40864064216a8433360745f69edddce19a606659163The Android Open Source Project recoverMgr_t *pRecoverMgr = (recoverMgr_t *)hRecoveryMgr; 40964064216a8433360745f69edddce19a606659163The Android Open Source Project 41064064216a8433360745f69edddce19a606659163The Android Open Source Project return (pRecoverMgr->fDisableInputsFromOs); 41164064216a8433360745f69edddce19a606659163The Android Open Source Project#else 41264064216a8433360745f69edddce19a606659163The Android Open Source Project return FALSE; 41364064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /* USE_RECOVERY */ 41464064216a8433360745f69edddce19a606659163The Android Open Source Project} /* recoveryMgr_recoveryProcess */ 41564064216a8433360745f69edddce19a606659163The Android Open Source Project 41664064216a8433360745f69edddce19a606659163The Android Open Source Project 41764064216a8433360745f69edddce19a606659163The Android Open Source Project 418