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: recoveryCtrl.c */ 4064064216a8433360745f69edddce19a606659163The Android Open Source Project/* PURPOSE: The responsibility of RecoveryCtrl 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 "report.h" 5164064216a8433360745f69edddce19a606659163The Android Open Source Project#include "recoveryCtrl.h" 5264064216a8433360745f69edddce19a606659163The Android Open Source Project#include "recoveryCtrl_API.h" 5364064216a8433360745f69edddce19a606659163The Android Open Source Project 5464064216a8433360745f69edddce19a606659163The Android Open Source Project#include "TNETWIF.h" 5564064216a8433360745f69edddce19a606659163The Android Open Source Project#include "PowerAuthorization.h" 5664064216a8433360745f69edddce19a606659163The Android Open Source Project#include "ScanSrv.h" 5764064216a8433360745f69edddce19a606659163The Android Open Source Project#include "MeasurementSrv.h" 5864064216a8433360745f69edddce19a606659163The Android Open Source Project#include "PowerSrv_API.h" 5964064216a8433360745f69edddce19a606659163The Android Open Source Project#include "FwEvent_api.h" 6064064216a8433360745f69edddce19a606659163The Android Open Source Project#include "rxXfer_api.h" 6164064216a8433360745f69edddce19a606659163The Android Open Source Project#include "MacServices.h" 6264064216a8433360745f69edddce19a606659163The Android Open Source Project#include "txHwQueue_api.h" 6364064216a8433360745f69edddce19a606659163The Android Open Source Project#include "txXfer_api.h" 6464064216a8433360745f69edddce19a606659163The Android Open Source Project#include "txResult_api.h" 6564064216a8433360745f69edddce19a606659163The Android Open Source Project#include "CmdMBox_api.h" 6664064216a8433360745f69edddce19a606659163The Android Open Source Project#include "CmdQueue_api.h" 6764064216a8433360745f69edddce19a606659163The Android Open Source Project#include "whalParams.h" 6864064216a8433360745f69edddce19a606659163The Android Open Source Project#include "whalCtrl.h" 6964064216a8433360745f69edddce19a606659163The Android Open Source Project#include "whalSecurity.h" 7064064216a8433360745f69edddce19a606659163The Android Open Source Project 7164064216a8433360745f69edddce19a606659163The Android Open Source Project#include "TNETWArb.h" 7264064216a8433360745f69edddce19a606659163The Android Open Source Project#include "ElpCtrl.h" 7364064216a8433360745f69edddce19a606659163The Android Open Source Project#include "HwInit_api.h" 7464064216a8433360745f69edddce19a606659163The Android Open Source Project 7564064216a8433360745f69edddce19a606659163The Android Open Source Project/* static function */ 7664064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef USE_RECOVERY 7764064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void recoveryCtrl_SM(TI_HANDLE hRecoveryCtrl); 7864064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic int recoveryCtrl_ReConfig (TI_HANDLE hRecoveryCtrl); 7964064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic int recoveryCtrl_ReJoinBss(TI_HANDLE hRecoveryCtrl); 8064064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /* USE_RECOVERY */ 8164064216a8433360745f69edddce19a606659163The Android Open Source Project 8264064216a8433360745f69edddce19a606659163The Android Open Source Project/******************************************************************************* 8364064216a8433360745f69edddce19a606659163The Android Open Source Project* PUBLIC FUNCTIONS IMPLEMENTATION * 8464064216a8433360745f69edddce19a606659163The Android Open Source Project********************************************************************************/ 8564064216a8433360745f69edddce19a606659163The Android Open Source Project 8664064216a8433360745f69edddce19a606659163The Android Open Source Project 8764064216a8433360745f69edddce19a606659163The Android Open Source Project/************************************************************************* 8864064216a8433360745f69edddce19a606659163The Android Open Source Project* recoveryCtrl_create * 8964064216a8433360745f69edddce19a606659163The Android Open Source Project************************************************************************** 9064064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION: This function initializes the RecoveryCtrl module. 9164064216a8433360745f69edddce19a606659163The Android Open Source Project* 9264064216a8433360745f69edddce19a606659163The Android Open Source Project* INPUT: hOs - handle to Os Abstraction Layer 9364064216a8433360745f69edddce19a606659163The Android Open Source Project* 9464064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURN: Handle to the allocated RecoveryCtrl module 9564064216a8433360745f69edddce19a606659163The Android Open Source Project*************************************************************************/ 9664064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_HANDLE recoveryCtrl_create(TI_HANDLE hOs) 9764064216a8433360745f69edddce19a606659163The Android Open Source Project{ 9864064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef USE_RECOVERY 9964064216a8433360745f69edddce19a606659163The Android Open Source Project recoveryCtrl_t *hRecoveryCtrl; 10064064216a8433360745f69edddce19a606659163The Android Open Source Project 10164064216a8433360745f69edddce19a606659163The Android Open Source Project /* allocate RecoverCtrl module */ 10264064216a8433360745f69edddce19a606659163The Android Open Source Project hRecoveryCtrl = os_memoryAlloc(hOs, (sizeof(recoveryCtrl_t))); 10364064216a8433360745f69edddce19a606659163The Android Open Source Project 10464064216a8433360745f69edddce19a606659163The Android Open Source Project if(!hRecoveryCtrl) 10564064216a8433360745f69edddce19a606659163The Android Open Source Project { 10664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("Error allocating the RecoverCtrl Module\n")); 10764064216a8433360745f69edddce19a606659163The Android Open Source Project return NULL; 10864064216a8433360745f69edddce19a606659163The Android Open Source Project } 10964064216a8433360745f69edddce19a606659163The Android Open Source Project 11064064216a8433360745f69edddce19a606659163The Android Open Source Project /* Reset RecoverCtrl module */ 11164064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryZero(hOs, hRecoveryCtrl, (sizeof(recoveryCtrl_t))); 11264064216a8433360745f69edddce19a606659163The Android Open Source Project 11364064216a8433360745f69edddce19a606659163The Android Open Source Project hRecoveryCtrl->hOs = hOs; 11464064216a8433360745f69edddce19a606659163The Android Open Source Project 11564064216a8433360745f69edddce19a606659163The Android Open Source Project return(hRecoveryCtrl); 11664064216a8433360745f69edddce19a606659163The Android Open Source Project#else 11764064216a8433360745f69edddce19a606659163The Android Open Source Project return NULL; 11864064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /* USE_RECOVERY */ 11964064216a8433360745f69edddce19a606659163The Android Open Source Project} /* recoveryCtrl_create */ 12064064216a8433360745f69edddce19a606659163The Android Open Source Project 12164064216a8433360745f69edddce19a606659163The Android Open Source Project 12264064216a8433360745f69edddce19a606659163The Android Open Source Project/*************************************************************************** 12364064216a8433360745f69edddce19a606659163The Android Open Source Project* recoveryCtrl_config * 12464064216a8433360745f69edddce19a606659163The Android Open Source Project**************************************************************************** 12564064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION: This function configures the recoveryCtrl module 12664064216a8433360745f69edddce19a606659163The Android Open Source Project* 12764064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURNS: OK - Configuration successful 12864064216a8433360745f69edddce19a606659163The Android Open Source Project* NOK - Configuration unsuccessful 12964064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************/ 13064064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS recoveryCtrl_config(TI_HANDLE hRecoveryCtrl, 13164064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hReport, 13264064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hTNETWIF, 13364064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hTxXfer, 13464064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hRxXfer, 13564064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hTxResult, 13664064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hMacServices, 13764064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hTxCtrlBlk, 13864064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hTxHwQueue, 13964064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hHalCtrl, 14064064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hHwIntr, 14164064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hWhalParams, 14264064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hCmdQueue, 14364064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hFwEvent, 14464064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hCmdMBox, 14564064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hHwInit) 14664064216a8433360745f69edddce19a606659163The Android Open Source Project{ 14764064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef USE_RECOVERY 14864064216a8433360745f69edddce19a606659163The Android Open Source Project recoveryCtrl_t *pRecoveryCtrl = (recoveryCtrl_t *)hRecoveryCtrl; 14964064216a8433360745f69edddce19a606659163The Android Open Source Project TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF; 15064064216a8433360745f69edddce19a606659163The Android Open Source Project MacServices_t *pMacServices = (MacServices_t*)hMacServices; 15164064216a8433360745f69edddce19a606659163The Android Open Source Project 15264064216a8433360745f69edddce19a606659163The Android Open Source Project /* configure modules handles */ 15364064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoveryCtrl->hReport = hReport; 15464064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoveryCtrl->hTNETWIF = hTNETWIF; 15564064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoveryCtrl->hTxXfer = hTxXfer; 15664064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoveryCtrl->hRxXfer = hRxXfer; 15764064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoveryCtrl->hTxResult = hTxResult; 15864064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoveryCtrl->hMacServices = hMacServices; 15964064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoveryCtrl->hTxCtrlBlk = hTxCtrlBlk; 16064064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoveryCtrl->hTxHwQueue = hTxHwQueue; 16164064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoveryCtrl->hHalCtrl = hHalCtrl; 16264064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoveryCtrl->hHwIntr = hHwIntr; 16364064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoveryCtrl->hWhalParams = hWhalParams; 16464064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoveryCtrl->hCmdQueue = hCmdQueue; 16564064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoveryCtrl->hFwEvent = hFwEvent; 16664064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoveryCtrl->hCmdMBox = hCmdMBox; 16764064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoveryCtrl->hHwInit = hHwInit; 16864064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoveryCtrl->hTNETWArb = pTNETWIF->hTNETWArb; 16964064216a8433360745f69edddce19a606659163The Android Open Source Project 17064064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoveryCtrl->hELPCtrl = pTNETWIF->hELPCtrl; 17164064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoveryCtrl->hScanSRV = pMacServices->hScanSRV; 17264064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoveryCtrl->hMeasurementSRV = pMacServices->hMeasurementSRV; 17364064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoveryCtrl->hPowerSrv = pMacServices->hPowerSrv; 17464064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoveryCtrl->hPowerAutho = pMacServices->hPowerAutho; 17564064216a8433360745f69edddce19a606659163The Android Open Source Project 17664064216a8433360745f69edddce19a606659163The Android Open Source Project /* pRecoveryCtrl->hRecoveryMgr will be initialized while calling to recoveryCtrl_restartTWD() */ 17764064216a8433360745f69edddce19a606659163The Android Open Source Project 17864064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoveryCtrl->smState = REC_CTRL_STATE_IDLE; 17964064216a8433360745f69edddce19a606659163The Android Open Source Project 18064064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INIT(pRecoveryCtrl->hReport, RECOVERY_CTRL_MODULE_LOG, 18164064216a8433360745f69edddce19a606659163The Android Open Source Project ("RecoveryCtrl configured successfully\n")); 18264064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /* USE_RECOVERY */ 18364064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 18464064216a8433360745f69edddce19a606659163The Android Open Source Project} /* recoveryCtrl_config */ 18564064216a8433360745f69edddce19a606659163The Android Open Source Project 18664064216a8433360745f69edddce19a606659163The Android Open Source Project 18764064216a8433360745f69edddce19a606659163The Android Open Source Project/*************************************************************************** 18864064216a8433360745f69edddce19a606659163The Android Open Source Project* recoveryCtrl_destroy * 18964064216a8433360745f69edddce19a606659163The Android Open Source Project**************************************************************************** 19064064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION: This function unload the RecoverCtrl module. 19164064216a8433360745f69edddce19a606659163The Android Open Source Project* 19264064216a8433360745f69edddce19a606659163The Android Open Source Project* INPUTS: hRecoveryCtrl - the object 19364064216a8433360745f69edddce19a606659163The Android Open Source Project* 19464064216a8433360745f69edddce19a606659163The Android Open Source Project* OUTPUT: 19564064216a8433360745f69edddce19a606659163The Android Open Source Project* 19664064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURNS: OK - Unload succesfull 19764064216a8433360745f69edddce19a606659163The Android Open Source Project* NOK - Unload unsuccesfull 19864064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************/ 19964064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS recoveryCtrl_destroy(TI_HANDLE hRecoveryCtrl) 20064064216a8433360745f69edddce19a606659163The Android Open Source Project{ 20164064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef USE_RECOVERY 20264064216a8433360745f69edddce19a606659163The Android Open Source Project recoveryCtrl_t *pRecoveryCtrl = (recoveryCtrl_t *)hRecoveryCtrl; 20364064216a8433360745f69edddce19a606659163The Android Open Source Project 20464064216a8433360745f69edddce19a606659163The Android Open Source Project /* free RecoverCtrl Module */ 20564064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryFree(pRecoveryCtrl->hOs, pRecoveryCtrl, sizeof(recoveryCtrl_t)); 20664064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /* USE_RECOVERY */ 20764064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 20864064216a8433360745f69edddce19a606659163The Android Open Source Project} 20964064216a8433360745f69edddce19a606659163The Android Open Source Project 21064064216a8433360745f69edddce19a606659163The Android Open Source Project/********************************************************************************************** 21164064216a8433360745f69edddce19a606659163The Android Open Source Project * recoveryCtrl_SM() 21264064216a8433360745f69edddce19a606659163The Android Open Source Project ********************************************************************************************** 21364064216a8433360745f69edddce19a606659163The Android Open Source Project * DESCRIPTION: 21464064216a8433360745f69edddce19a606659163The Android Open Source Project ============ 21564064216a8433360745f69edddce19a606659163The Android Open Source Project This is the recoveryCtrl state machine. 21664064216a8433360745f69edddce19a606659163The Android Open Source Project The inceptive event for RecoveryCtrl SM is invoking the restart of TWD by RecoveryMgr; 21764064216a8433360745f69edddce19a606659163The Android Open Source Project Perform ASYNC restart of BusTxn (if not idle then wait until end of current txn and 21864064216a8433360745f69edddce19a606659163The Android Open Source Project Invoke CB upon TxnComplete) and FW Download; 21964064216a8433360745f69edddce19a606659163The Android Open Source Project HwInit module performs HW Init process; 22064064216a8433360745f69edddce19a606659163The Android Open Source Project Call RecoverMgr CB endOfRecovery() at the end of TWD restart 22164064216a8433360745f69edddce19a606659163The Android Open Source Project 22264064216a8433360745f69edddce19a606659163The Android Open Source Project The SM supports both Sync and Async accesses to the HW. 22364064216a8433360745f69edddce19a606659163The Android Open Source Project It loops and progresses from state to state as long as the HW is accessed synchronously. 22464064216a8433360745f69edddce19a606659163The Android Open Source Project Once the access is Asynchronous (TNETWIF_PENDING), it exits and is called later 22564064216a8433360745f69edddce19a606659163The Android Open Source Project by the TNETWIF when the HW is ready. 22664064216a8433360745f69edddce19a606659163The Android Open Source Project That's why it uses unspecified-mode accesses (e.g. TNETWIF_ReadMemOpt) which 22764064216a8433360745f69edddce19a606659163The Android Open Source Project selects either Sync or Async automatically according to the platform and length. 22864064216a8433360745f69edddce19a606659163The Android Open Source Project Yet, the short transactions (EOB and Interrupt-Request 32 bit writes) are done using Sync 22964064216a8433360745f69edddce19a606659163The Android Open Source Project access to simplify the SM 23064064216a8433360745f69edddce19a606659163The Android Open Source Project NOTE: MCS projects may require full Sync/Async support, so the Sync accesses may need to be modified. 23164064216a8433360745f69edddce19a606659163The Android Open Source Project 23264064216a8433360745f69edddce19a606659163The Android Open Source Project NOTE: The recoveryCtrl-SM detailed description is provided in "CE-2.0 Recovery LLD.doc". 23364064216a8433360745f69edddce19a606659163The Android Open Source Project 23464064216a8433360745f69edddce19a606659163The Android Open Source Project **********************************************************************************************/ 23564064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef USE_RECOVERY 23664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void recoveryCtrl_SM(TI_HANDLE hRecoveryCtrl) 23764064216a8433360745f69edddce19a606659163The Android Open Source Project{ 23864064216a8433360745f69edddce19a606659163The Android Open Source Project recoveryCtrl_t *pRecoveryCtrl = (recoveryCtrl_t *)hRecoveryCtrl; 23964064216a8433360745f69edddce19a606659163The Android Open Source Project TI_STATUS tnetwifStatus = TNETWIF_ERROR; /* Last HW operation status: Complete (Sync) or Pending (Async). */ 24064064216a8433360745f69edddce19a606659163The Android Open Source Project WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)pRecoveryCtrl->hHalCtrl; 24164064216a8433360745f69edddce19a606659163The Android Open Source Project 24264064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG 24364064216a8433360745f69edddce19a606659163The Android Open Source Project if (hRecoveryCtrl == NULL) 24464064216a8433360745f69edddce19a606659163The Android Open Source Project { 24564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pRecoveryCtrl->hReport, RECOVERY_CTRL_MODULE_LOG, 24664064216a8433360745f69edddce19a606659163The Android Open Source Project ("recoveryCtrl_SM(): **** Called with NULL handle!! ****\n")); 24764064216a8433360745f69edddce19a606659163The Android Open Source Project return; 24864064216a8433360745f69edddce19a606659163The Android Open Source Project } 24964064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 25064064216a8433360745f69edddce19a606659163The Android Open Source Project 25164064216a8433360745f69edddce19a606659163The Android Open Source Project /* 25264064216a8433360745f69edddce19a606659163The Android Open Source Project * Loop through the states sequence as long as the process is synchronous. 25364064216a8433360745f69edddce19a606659163The Android Open Source Project * Exit when finished or if an Asynchronous process is required. In this case 25464064216a8433360745f69edddce19a606659163The Android Open Source Project * the SM process will be resumed later (called back by TNETWIF). 25564064216a8433360745f69edddce19a606659163The Android Open Source Project */ 25664064216a8433360745f69edddce19a606659163The Android Open Source Project while (1) 25764064216a8433360745f69edddce19a606659163The Android Open Source Project { 25864064216a8433360745f69edddce19a606659163The Android Open Source Project switch (pRecoveryCtrl->smState) 25964064216a8433360745f69edddce19a606659163The Android Open Source Project { 26064064216a8433360745f69edddce19a606659163The Android Open Source Project case REC_CTRL_STATE_IDLE: 26164064216a8433360745f69edddce19a606659163The Android Open Source Project FwEvent_Stop(pRecoveryCtrl->hFwEvent); 26264064216a8433360745f69edddce19a606659163The Android Open Source Project 26364064216a8433360745f69edddce19a606659163The Android Open Source Project tnetwifStatus = TNETWIF_COMPLETE; 26464064216a8433360745f69edddce19a606659163The Android Open Source Project 26564064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoveryCtrl->smState = REC_CTRL_STATE_WAIT_END_CURR_TXN; 26664064216a8433360745f69edddce19a606659163The Android Open Source Project break; 26764064216a8433360745f69edddce19a606659163The Android Open Source Project 26864064216a8433360745f69edddce19a606659163The Android Open Source Project case REC_CTRL_STATE_WAIT_END_CURR_TXN: 26964064216a8433360745f69edddce19a606659163The Android Open Source Project TNETWArb_Recovery(pRecoveryCtrl->hTNETWArb, pRecoveryCtrl->hELPCtrl); 27064064216a8433360745f69edddce19a606659163The Android Open Source Project 27164064216a8433360745f69edddce19a606659163The Android Open Source Project elpCtrl_Stop(pRecoveryCtrl->hELPCtrl); 27264064216a8433360745f69edddce19a606659163The Android Open Source Project CmdMBox_Restart(pRecoveryCtrl->hCmdMBox); 27364064216a8433360745f69edddce19a606659163The Android Open Source Project CmdQueue_StartReconfig(pRecoveryCtrl->hCmdQueue); 27464064216a8433360745f69edddce19a606659163The Android Open Source Project 27564064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoveryCtrl->smState = REC_CTRL_STATE_INIT_CMPLT; 27664064216a8433360745f69edddce19a606659163The Android Open Source Project tnetwifStatus = hwInit_recovery(pRecoveryCtrl->hHwInit, (TI_HANDLE)(pWhalCtrl->pHwCtrl), (void*)recoveryCtrl_SM, hRecoveryCtrl); 27764064216a8433360745f69edddce19a606659163The Android Open Source Project return; 27864064216a8433360745f69edddce19a606659163The Android Open Source Project 27964064216a8433360745f69edddce19a606659163The Android Open Source Project case REC_CTRL_STATE_INIT_CMPLT: 28064064216a8433360745f69edddce19a606659163The Android Open Source Project elpCtrl_Start(pRecoveryCtrl->hELPCtrl); 28164064216a8433360745f69edddce19a606659163The Android Open Source Project 28264064216a8433360745f69edddce19a606659163The Android Open Source Project /* reconfig FW */ 28364064216a8433360745f69edddce19a606659163The Android Open Source Project recoveryCtrl_ReConfig(hRecoveryCtrl); 28464064216a8433360745f69edddce19a606659163The Android Open Source Project 28564064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoveryCtrl->smState = REC_CTRL_STATE_END_RECONFIG; 28664064216a8433360745f69edddce19a606659163The Android Open Source Project whal_hwInfoElemMiscTableGet (pWhalCtrl->pHwCtrl->pHwMboxConfig, 28764064216a8433360745f69edddce19a606659163The Android Open Source Project &pWhalCtrl->misc, 28864064216a8433360745f69edddce19a606659163The Android Open Source Project (void *)recoveryCtrl_SM, 28964064216a8433360745f69edddce19a606659163The Android Open Source Project hRecoveryCtrl); 29064064216a8433360745f69edddce19a606659163The Android Open Source Project return; 29164064216a8433360745f69edddce19a606659163The Android Open Source Project 29264064216a8433360745f69edddce19a606659163The Android Open Source Project case REC_CTRL_STATE_END_RECONFIG: 29364064216a8433360745f69edddce19a606659163The Android Open Source Project powerAutho_Restart(pRecoveryCtrl->hMacServices); 29464064216a8433360745f69edddce19a606659163The Android Open Source Project RxXfer_ReStart(pRecoveryCtrl->hRxXfer); 29564064216a8433360745f69edddce19a606659163The Android Open Source Project scanSRV_restart(pRecoveryCtrl->hScanSRV); 29664064216a8433360745f69edddce19a606659163The Android Open Source Project measurementSRV_restart(pRecoveryCtrl->hMeasurementSRV); 29764064216a8433360745f69edddce19a606659163The Android Open Source Project powerSrv_restart(pRecoveryCtrl->hPowerSrv); 29864064216a8433360745f69edddce19a606659163The Android Open Source Project 29964064216a8433360745f69edddce19a606659163The Android Open Source Project /*Change the State of the mboxQueue and the interrupt Module */ 30064064216a8433360745f69edddce19a606659163The Android Open Source Project/* moved later whalCtrl_exitFromInitMode(pRecoveryCtrl->hHalCtrl);*/ /* call inside CmdMBox_SetModeNormal */ 30164064216a8433360745f69edddce19a606659163The Android Open Source Project 30264064216a8433360745f69edddce19a606659163The Android Open Source Project /* 30364064216a8433360745f69edddce19a606659163The Android Open Source Project Indicates the MboxQueue that Reconfig Ended in Order To Call the CallBacks 30464064216a8433360745f69edddce19a606659163The Android Open Source Project That Was saved before the recovery process started 30564064216a8433360745f69edddce19a606659163The Android Open Source Project */ 30664064216a8433360745f69edddce19a606659163The Android Open Source Project CmdQueue_EndReconfig(pRecoveryCtrl->hCmdQueue); 30764064216a8433360745f69edddce19a606659163The Android Open Source Project 30864064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoveryCtrl->smState = REC_CTRL_STATE_IDLE; 30964064216a8433360745f69edddce19a606659163The Android Open Source Project 31064064216a8433360745f69edddce19a606659163The Android Open Source Project /* call End Of Recovery CB */ 31164064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoveryCtrl->endOfRecoveryCB(pRecoveryCtrl->hRecoveryMgr); 31264064216a8433360745f69edddce19a606659163The Android Open Source Project 31364064216a8433360745f69edddce19a606659163The Android Open Source Project return; /* recovery process ended */ 31464064216a8433360745f69edddce19a606659163The Android Open Source Project 31564064216a8433360745f69edddce19a606659163The Android Open Source Project default: 31664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pRecoveryCtrl->hReport, RECOVERY_CTRL_MODULE_LOG, 31764064216a8433360745f69edddce19a606659163The Android Open Source Project ("recoveryCtrl_SM(): Unexpected state, smState=%d\n", pRecoveryCtrl->smState)); 31864064216a8433360745f69edddce19a606659163The Android Open Source Project return; 31964064216a8433360745f69edddce19a606659163The Android Open Source Project 32064064216a8433360745f69edddce19a606659163The Android Open Source Project } /* switch (pRecoveryCtrl->smState) */ 32164064216a8433360745f69edddce19a606659163The Android Open Source Project 32264064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRecoveryCtrl->hReport, RECOVERY_CTRL_MODULE_LOG, 32364064216a8433360745f69edddce19a606659163The Android Open Source Project ("recoveryCtrl_SM(): smState=%d\n", pRecoveryCtrl->smState)); 32464064216a8433360745f69edddce19a606659163The Android Open Source Project 32564064216a8433360745f69edddce19a606659163The Android Open Source Project /* 32664064216a8433360745f69edddce19a606659163The Android Open Source Project * If the last HW access request was pended, exit the SM (Asynchronous process). 32764064216a8433360745f69edddce19a606659163The Android Open Source Project * The SM will be called back when the HW access is done. 32864064216a8433360745f69edddce19a606659163The Android Open Source Project * Also reset the Sync flag to notify that the Xfer wasn't completed in the SendPacket context. 32964064216a8433360745f69edddce19a606659163The Android Open Source Project */ 33064064216a8433360745f69edddce19a606659163The Android Open Source Project if (tnetwifStatus == TNETWIF_PENDING) 33164064216a8433360745f69edddce19a606659163The Android Open Source Project { 33264064216a8433360745f69edddce19a606659163The Android Open Source Project return; /********** Exit State Machine (to be called back by TNETWIF) **********/ 33364064216a8433360745f69edddce19a606659163The Android Open Source Project } 33464064216a8433360745f69edddce19a606659163The Android Open Source Project 33564064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG 33664064216a8433360745f69edddce19a606659163The Android Open Source Project else if (tnetwifStatus == TNETWIF_ERROR) 33764064216a8433360745f69edddce19a606659163The Android Open Source Project { 33864064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pRecoveryCtrl->hReport, RECOVERY_CTRL_MODULE_LOG, 33964064216a8433360745f69edddce19a606659163The Android Open Source Project ("recoveryCtrl_SM(): Unexpected state, smState=%d\n", pRecoveryCtrl->smState)); 34064064216a8433360745f69edddce19a606659163The Android Open Source Project return; 34164064216a8433360745f69edddce19a606659163The Android Open Source Project } 34264064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /* TI_DBG */ 34364064216a8433360745f69edddce19a606659163The Android Open Source Project } /* while (1) */ 34464064216a8433360745f69edddce19a606659163The Android Open Source Project} /* recoveryCtrl_SM */ 34564064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /* USE_RECOVERY */ 34664064216a8433360745f69edddce19a606659163The Android Open Source Project 34764064216a8433360745f69edddce19a606659163The Android Open Source Project/*************************************************************************** 34864064216a8433360745f69edddce19a606659163The Android Open Source Project* recoveryCtrl_restartTWD * 34964064216a8433360745f69edddce19a606659163The Android Open Source Project**************************************************************************** 35064064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION: Start TWD recovery. Restart TWD from bottom up. 35164064216a8433360745f69edddce19a606659163The Android Open Source Project* Init HW: (using HW init module in FW Transfer component). 35264064216a8433360745f69edddce19a606659163The Android Open Source Project* Reconfigure FW. 35364064216a8433360745f69edddce19a606659163The Android Open Source Project* 35464064216a8433360745f69edddce19a606659163The Android Open Source Project* INPUTS: hRecoveryCtrl - the object 35564064216a8433360745f69edddce19a606659163The Android Open Source Project* 35664064216a8433360745f69edddce19a606659163The Android Open Source Project* OUTPUT: 35764064216a8433360745f69edddce19a606659163The Android Open Source Project* 35864064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURNS: OK - succesfull 35964064216a8433360745f69edddce19a606659163The Android Open Source Project* NOK - unsuccesfull 36064064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************/ 36164064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS recoveryCtrl_restartTWD(TI_HANDLE hRecoveryCtrl,void *endOfRecoveryCB, TI_HANDLE hRecoveryMgr) 36264064216a8433360745f69edddce19a606659163The Android Open Source Project{ 36364064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef USE_RECOVERY 36464064216a8433360745f69edddce19a606659163The Android Open Source Project recoveryCtrl_t *pRecoveryCtrl = (recoveryCtrl_t *)hRecoveryCtrl; 36564064216a8433360745f69edddce19a606659163The Android Open Source Project 36664064216a8433360745f69edddce19a606659163The Android Open Source Project /* register RecoveryMgr handle and endOfRecoveryCB*/ 36764064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoveryCtrl->hRecoveryMgr = hRecoveryMgr; 36864064216a8433360745f69edddce19a606659163The Android Open Source Project pRecoveryCtrl->endOfRecoveryCB = (EndOfRecoveryCB_t)endOfRecoveryCB; 36964064216a8433360745f69edddce19a606659163The Android Open Source Project 37064064216a8433360745f69edddce19a606659163The Android Open Source Project recoveryCtrl_SM(hRecoveryCtrl); 37164064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /* USE_RECOVERY */ 37264064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 37364064216a8433360745f69edddce19a606659163The Android Open Source Project} 37464064216a8433360745f69edddce19a606659163The Android Open Source Project 37564064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef USE_RECOVERY 37664064216a8433360745f69edddce19a606659163The Android Open Source Projectint recoveryCtrl_ReConfig (TI_HANDLE hRecoveryCtrl) 37764064216a8433360745f69edddce19a606659163The Android Open Source Project{ 37864064216a8433360745f69edddce19a606659163The Android Open Source Project recoveryCtrl_t *pRecoveryCtrl = (recoveryCtrl_t *)hRecoveryCtrl; 37964064216a8433360745f69edddce19a606659163The Android Open Source Project WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)pRecoveryCtrl->hHalCtrl; 38064064216a8433360745f69edddce19a606659163The Android Open Source Project WlanParams_T *pWlanParams = whal_ParamsGetWlanParams(pWhalCtrl->pWhalParams); 38164064216a8433360745f69edddce19a606659163The Android Open Source Project whalParamInfo_t param; 38264064216a8433360745f69edddce19a606659163The Android Open Source Project DmaParams_T *pDmaParams = whal_ParamsGetDmaParams(pWhalCtrl->pWhalParams); 38364064216a8433360745f69edddce19a606659163The Android Open Source Project 38464064216a8433360745f69edddce19a606659163The Android Open Source Project int index = 0; 38564064216a8433360745f69edddce19a606659163The Android Open Source Project int Stt; 38664064216a8433360745f69edddce19a606659163The Android Open Source Project 38764064216a8433360745f69edddce19a606659163The Android Open Source Project if(!pWlanParams->RecoveryEnable) 38864064216a8433360745f69edddce19a606659163The Android Open Source Project { 38964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("whalCtrl_ReConfig: Recovery is disabled in registry, abort recovery process\n")); 39064064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 39164064216a8433360745f69edddce19a606659163The Android Open Source Project } 39264064216a8433360745f69edddce19a606659163The Android Open Source Project 39364064216a8433360745f69edddce19a606659163The Android Open Source Project FwEvent_SetHwInfo (pWhalCtrl->hFwEvent, &(pWhalCtrl->pHwCtrl->DataPathParams)); 39464064216a8433360745f69edddce19a606659163The Android Open Source Project txXfer_restart(pWhalCtrl->hTxXfer); 39564064216a8433360745f69edddce19a606659163The Android Open Source Project txResult_restart(pWhalCtrl->hTxResult); 39664064216a8433360745f69edddce19a606659163The Android Open Source Project 39764064216a8433360745f69edddce19a606659163The Android Open Source Project txXfer_setHwInfo (pWhalCtrl->hTxXfer, &(pWhalCtrl->pHwCtrl->DataPathParams)); 39864064216a8433360745f69edddce19a606659163The Android Open Source Project 39964064216a8433360745f69edddce19a606659163The Android Open Source Project txResult_setHwInfo (pWhalCtrl->hTxResult, &(pWhalCtrl->pHwCtrl->DataPathParams)); 40064064216a8433360745f69edddce19a606659163The Android Open Source Project 40164064216a8433360745f69edddce19a606659163The Android Open Source Project rxXfer_SetDoubleBufferAddr (pWhalCtrl->hRxXfer, &(pWhalCtrl->pHwCtrl->DataPathParams)); 40264064216a8433360745f69edddce19a606659163The Android Open Source Project 40364064216a8433360745f69edddce19a606659163The Android Open Source Project /* Provide number of HW Tx-blocks and descriptors to Tx-HW-Queue module */ 40464064216a8433360745f69edddce19a606659163The Android Open Source Project txHwQueue_setHwInfo (pWhalCtrl->hTxHwQueue, pDmaParams); 40564064216a8433360745f69edddce19a606659163The Android Open Source Project 40664064216a8433360745f69edddce19a606659163The Android Open Source Project whalSecur_HwEncDecrEnable (pWhalCtrl->pWhalSecurity, 1); 40764064216a8433360745f69edddce19a606659163The Android Open Source Project 40864064216a8433360745f69edddce19a606659163The Android Open Source Project /*send the table regardless to the state */ 40964064216a8433360745f69edddce19a606659163The Android Open Source Project whal_hwCtrl_SetBeaconFilterIETable(pWhalCtrl->pHwCtrl, 41064064216a8433360745f69edddce19a606659163The Android Open Source Project &pWhalCtrl->pWhalParams->WlanParams.beaconFilterIETable.numberOfIEs, 41164064216a8433360745f69edddce19a606659163The Android Open Source Project pWhalCtrl->pWhalParams->WlanParams.beaconFilterIETable.IETable, 41264064216a8433360745f69edddce19a606659163The Android Open Source Project &pWhalCtrl->pWhalParams->WlanParams.beaconFilterIETable.IETableSize ); 41364064216a8433360745f69edddce19a606659163The Android Open Source Project 41464064216a8433360745f69edddce19a606659163The Android Open Source Project /* 41564064216a8433360745f69edddce19a606659163The Android Open Source Project * ReConfig the wlan hardware Queues according to the required Quality Of Service. 41664064216a8433360745f69edddce19a606659163The Android Open Source Project */ 41764064216a8433360745f69edddce19a606659163The Android Open Source Project /* Reconfig Roaming thresholds */ 41864064216a8433360745f69edddce19a606659163The Android Open Source Project /* SNR */ 41964064216a8433360745f69edddce19a606659163The Android Open Source Project whalCtrl_SetSNRParamsCmd (pWhalCtrl, &pWhalCtrl->pWhalParams->WlanParams.roamTriggers); 42064064216a8433360745f69edddce19a606659163The Android Open Source Project 42164064216a8433360745f69edddce19a606659163The Android Open Source Project /* RSSI */ 42264064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION (pWhalCtrl->hReport, RECOVERY_CTRL_MODULE_LOG, 42364064216a8433360745f69edddce19a606659163The Android Open Source Project ("\n SetRSSIParamsCmd :\n \ 42464064216a8433360745f69edddce19a606659163The Android Open Source Project RSSIthreshold = %d\n \ 42564064216a8433360745f69edddce19a606659163The Android Open Source Project RSSIFilterWeight = %d\n \ 42664064216a8433360745f69edddce19a606659163The Android Open Source Project RSSIFilterDepth = %d \n ", 42764064216a8433360745f69edddce19a606659163The Android Open Source Project pWhalCtrl->pWhalParams->WlanParams.roamTriggers.rssiThreshold, 42864064216a8433360745f69edddce19a606659163The Android Open Source Project pWhalCtrl->pWhalParams->WlanParams.roamTriggers.rssiFilterWeight, 42964064216a8433360745f69edddce19a606659163The Android Open Source Project pWhalCtrl->pWhalParams->WlanParams.roamTriggers.rssiFilterDepth)); 43064064216a8433360745f69edddce19a606659163The Android Open Source Project whalCtrl_SetRSSIParamsCmd(pWhalCtrl, &pWhalCtrl->pWhalParams->WlanParams.roamTriggers); 43164064216a8433360745f69edddce19a606659163The Android Open Source Project 43264064216a8433360745f69edddce19a606659163The Android Open Source Project /* Max consecutive NACK */ 43364064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION (pWhalCtrl->hReport, RECOVERY_CTRL_MODULE_LOG, 43464064216a8433360745f69edddce19a606659163The Android Open Source Project ("\n SetMaxTxRetryParamsCmdCmd :\n \ 43564064216a8433360745f69edddce19a606659163The Android Open Source Project maxTxRetry = %d \n ", 43664064216a8433360745f69edddce19a606659163The Android Open Source Project pWhalCtrl->pWhalParams->WlanParams.roamTriggers.maxTxRetry)); 43764064216a8433360745f69edddce19a606659163The Android Open Source Project whalCtrl_SetMaxTxRetryParamsCmd(pWhalCtrl, &pWhalCtrl->pWhalParams->WlanParams.roamTriggers); 43864064216a8433360745f69edddce19a606659163The Android Open Source Project /* Out of sync */ 43964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION (pWhalCtrl->hReport, RECOVERY_CTRL_MODULE_LOG, 44064064216a8433360745f69edddce19a606659163The Android Open Source Project ("\n whalCtrl_SetBssLossTsfThresholdParamsCmd :\n \ 44164064216a8433360745f69edddce19a606659163The Android Open Source Project BssLossTimeout = %d\n \ 44264064216a8433360745f69edddce19a606659163The Android Open Source Project TsfMissThreshold = %d \n ", 44364064216a8433360745f69edddce19a606659163The Android Open Source Project pWhalCtrl->pWhalParams->WlanParams.roamTriggers.BssLossTimeout, 44464064216a8433360745f69edddce19a606659163The Android Open Source Project pWhalCtrl->pWhalParams->WlanParams.roamTriggers.TsfMissThreshold)); 44564064216a8433360745f69edddce19a606659163The Android Open Source Project whalCtrl_SetBssLossTsfThresholdParamsCmd(pWhalCtrl, &pWhalCtrl->pWhalParams->WlanParams.roamTriggers); 44664064216a8433360745f69edddce19a606659163The Android Open Source Project 44764064216a8433360745f69edddce19a606659163The Android Open Source Project whalCtrl_setBetParams(pWhalCtrl, 44864064216a8433360745f69edddce19a606659163The Android Open Source Project pWhalCtrl->pWhalParams->WlanParams.BetEnable, 44964064216a8433360745f69edddce19a606659163The Android Open Source Project pWhalCtrl->pWhalParams->WlanParams.MaximumConsecutiveET); 45064064216a8433360745f69edddce19a606659163The Android Open Source Project 45164064216a8433360745f69edddce19a606659163The Android Open Source Project whalCtrl_setRxDataFiltersParams(pWhalCtrl, 45264064216a8433360745f69edddce19a606659163The Android Open Source Project pWhalCtrl->pWhalParams->WlanParams.rxFilterDefaultEnable, 45364064216a8433360745f69edddce19a606659163The Android Open Source Project pWhalCtrl->pWhalParams->WlanParams.rxFilterDefaultAction); 45464064216a8433360745f69edddce19a606659163The Android Open Source Project 45564064216a8433360745f69edddce19a606659163The Android Open Source Project for (index = 0; index < MAX_DATA_FILTERS; index++) 45664064216a8433360745f69edddce19a606659163The Android Open Source Project { 45764064216a8433360745f69edddce19a606659163The Android Open Source Project if (pWhalCtrl->pWhalParams->WlanParams.rxFilterCgf[index].rxFilterCommand == ADD_FILTER) 45864064216a8433360745f69edddce19a606659163The Android Open Source Project { 45964064216a8433360745f69edddce19a606659163The Android Open Source Project whalCtrl_setRxDataFilter(pWhalCtrl, 46064064216a8433360745f69edddce19a606659163The Android Open Source Project index, 46164064216a8433360745f69edddce19a606659163The Android Open Source Project pWhalCtrl->pWhalParams->WlanParams.rxFilterCgf[index].rxFilterCommand, 46264064216a8433360745f69edddce19a606659163The Android Open Source Project pWhalCtrl->pWhalParams->WlanParams.rxFilterCgf[index].rxFilterAction, 46364064216a8433360745f69edddce19a606659163The Android Open Source Project pWhalCtrl->pWhalParams->WlanParams.rxFilterCgf[index].rxFilterNumFieldPatterns, 46464064216a8433360745f69edddce19a606659163The Android Open Source Project pWhalCtrl->pWhalParams->WlanParams.rxFilterCgf[index].rxFilterLenFieldPatterns, 46564064216a8433360745f69edddce19a606659163The Android Open Source Project pWhalCtrl->pWhalParams->WlanParams.rxFilterCgf[index].rxFilterFieldPatterns); 46664064216a8433360745f69edddce19a606659163The Android Open Source Project } 46764064216a8433360745f69edddce19a606659163The Android Open Source Project } 46864064216a8433360745f69edddce19a606659163The Android Open Source Project 46964064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef BTH_COEXISTENCE /* it's solution for collision of BTH and WLAN (by Gemini protocol), we don't need it */ 47064064216a8433360745f69edddce19a606659163The Android Open Source Project /* Soft Gemini Section */ 47164064216a8433360745f69edddce19a606659163The Android Open Source Project /* ReConfig the BTH enable */ 47264064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = HAL_CTRL_SG_ENABLE_PARAM; 47364064216a8433360745f69edddce19a606659163The Android Open Source Project param.content.SoftGeminiEnable = pWhalCtrl->pWhalParams->WlanParams.SoftGeminiEnable; 47464064216a8433360745f69edddce19a606659163The Android Open Source Project whalCtrl_SetParam(pRecoveryCtrl->hHalCtrl, ¶m); 47564064216a8433360745f69edddce19a606659163The Android Open Source Project 47664064216a8433360745f69edddce19a606659163The Android Open Source Project /* ReConfig the BTH config */ 47764064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = HAL_CTRL_SG_CONFIG_PARAM; 47864064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pWhalCtrl->hOs, ¶m.content.SoftGeminiParam, &pWhalCtrl->pWhalParams->WlanParams.SoftGeminiParams, sizeof(SoftGeminiParam_t)); 47964064216a8433360745f69edddce19a606659163The Android Open Source Project whalCtrl_SetParam(pRecoveryCtrl->hHalCtrl, ¶m); 48064064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 48164064216a8433360745f69edddce19a606659163The Android Open Source Project 48264064216a8433360745f69edddce19a606659163The Android Open Source Project 48364064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef DO_CALIBRATION_IN_DRIVER 48464064216a8433360745f69edddce19a606659163The Android Open Source Project /* Perform single calibration for APP scan usage. */ 48564064216a8433360745f69edddce19a606659163The Android Open Source Project whalCtrl_sendRadioAction(pWhalCtrl ,MANUAL_CALIB); 48664064216a8433360745f69edddce19a606659163The Android Open Source Project#endif/* O_CALIBRATION_IN_DRIVER */ 48764064216a8433360745f69edddce19a606659163The Android Open Source Project /* 48864064216a8433360745f69edddce19a606659163The Android Open Source Project * JOIN (use the local parameters), otherwize the CORE will reconnect 48964064216a8433360745f69edddce19a606659163The Android Open Source Project */ 49064064216a8433360745f69edddce19a606659163The Android Open Source Project if (pWlanParams->bJoin) 49164064216a8433360745f69edddce19a606659163The Android Open Source Project { 49264064216a8433360745f69edddce19a606659163The Android Open Source Project /* set TxRatePolicy */ 49364064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = HAL_CTRL_TX_RATE_CLASS_PARAMS; 49464064216a8433360745f69edddce19a606659163The Android Open Source Project param.content.pTxRatePlicy = &pWhalCtrl->pWhalParams->BssInfoParams.TxRateClassParams; 49564064216a8433360745f69edddce19a606659163The Android Open Source Project 49664064216a8433360745f69edddce19a606659163The Android Open Source Project whalCtrl_SetParam(pRecoveryCtrl->hHalCtrl,¶m); 49764064216a8433360745f69edddce19a606659163The Android Open Source Project 49864064216a8433360745f69edddce19a606659163The Android Open Source Project Stt = recoveryCtrl_ReJoinBss(hRecoveryCtrl); 49964064216a8433360745f69edddce19a606659163The Android Open Source Project if (Stt != OK) 50064064216a8433360745f69edddce19a606659163The Android Open Source Project { 50164064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION (pWhalCtrl->hReport, RECOVERY_CTRL_MODULE_LOG, 50264064216a8433360745f69edddce19a606659163The Android Open Source Project ("whalCtrl_ReConfig: recoveryCtrl_ReJoinBss failed\n")); 50364064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 50464064216a8433360745f69edddce19a606659163The Android Open Source Project } 50564064216a8433360745f69edddce19a606659163The Android Open Source Project whal_hwCtrl_AidSet (pWhalCtrl->pHwCtrl, pWhalCtrl->pWhalParams->WlanParams.Aid); 50664064216a8433360745f69edddce19a606659163The Android Open Source Project 50764064216a8433360745f69edddce19a606659163The Android Open Source Project 50864064216a8433360745f69edddce19a606659163The Android Open Source Project /* Slot time must be setting after doing join */ 50964064216a8433360745f69edddce19a606659163The Android Open Source Project whal_hwCtrl_SetSlotTime(pWhalCtrl->pHwCtrl, (slotTime_e)pWhalCtrl->pWhalParams->WlanParams.SlotTime); 51064064216a8433360745f69edddce19a606659163The Android Open Source Project 51164064216a8433360745f69edddce19a606659163The Android Open Source Project /* Reconfig security keys, default key Id and encryption/decryption control to the FW*/ 51264064216a8433360745f69edddce19a606659163The Android Open Source Project if (whalSecur_KeysReconfig (pWhalCtrl->pWhalSecurity) != OK) 51364064216a8433360745f69edddce19a606659163The Android Open Source Project { 51464064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION (pWhalCtrl->hReport, RECOVERY_CTRL_MODULE_LOG, 51564064216a8433360745f69edddce19a606659163The Android Open Source Project ("whalCtrl_ReConfig: ## whalSecur_KeysReconfig failed\n")); 51664064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 51764064216a8433360745f69edddce19a606659163The Android Open Source Project } 51864064216a8433360745f69edddce19a606659163The Android Open Source Project } 51964064216a8433360745f69edddce19a606659163The Android Open Source Project 52064064216a8433360745f69edddce19a606659163The Android Open Source Project return (OK); 52164064216a8433360745f69edddce19a606659163The Android Open Source Project} 52264064216a8433360745f69edddce19a606659163The Android Open Source Project 52364064216a8433360745f69edddce19a606659163The Android Open Source Project 52464064216a8433360745f69edddce19a606659163The Android Open Source Project/* 52564064216a8433360745f69edddce19a606659163The Android Open Source Project * ---------------------------------------------------------------------------- 52664064216a8433360745f69edddce19a606659163The Android Open Source Project * Function : recoveryCtrl_ReJoinBss 52764064216a8433360745f69edddce19a606659163The Android Open Source Project * 52864064216a8433360745f69edddce19a606659163The Android Open Source Project * Input : 52964064216a8433360745f69edddce19a606659163The Android Open Source Project * Output : 53064064216a8433360745f69edddce19a606659163The Android Open Source Project * Process : 53164064216a8433360745f69edddce19a606659163The Android Open Source Project * Note(s) : Done 53264064216a8433360745f69edddce19a606659163The Android Open Source Project * ----------------------------------------------------------------------------- 53364064216a8433360745f69edddce19a606659163The Android Open Source Project */ 53464064216a8433360745f69edddce19a606659163The Android Open Source Project 53564064216a8433360745f69edddce19a606659163The Android Open Source Projectint recoveryCtrl_ReJoinBss (TI_HANDLE hRecoveryCtrl) 53664064216a8433360745f69edddce19a606659163The Android Open Source Project{ 53764064216a8433360745f69edddce19a606659163The Android Open Source Project recoveryCtrl_t *pRecoveryCtrl = (recoveryCtrl_t *)hRecoveryCtrl; 53864064216a8433360745f69edddce19a606659163The Android Open Source Project WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)pRecoveryCtrl->hHalCtrl; 53964064216a8433360745f69edddce19a606659163The Android Open Source Project BssInfoParams_T *pBssInfoParams = &pWhalCtrl->pWhalParams->BssInfoParams; 54064064216a8433360745f69edddce19a606659163The Android Open Source Project TemplateListParams_T *pWhalTemplates = &pWhalCtrl->pWhalParams->TemplateList; 54164064216a8433360745f69edddce19a606659163The Android Open Source Project HwMboxCmd_T *pHwCmd = whal_hwCtrl_GetMboxCmd(pWhalCtrl->pHwCtrl); 54264064216a8433360745f69edddce19a606659163The Android Open Source Project 54364064216a8433360745f69edddce19a606659163The Android Open Source Project /* 54464064216a8433360745f69edddce19a606659163The Android Open Source Project * set the templates 54564064216a8433360745f69edddce19a606659163The Android Open Source Project */ 54664064216a8433360745f69edddce19a606659163The Android Open Source Project 54764064216a8433360745f69edddce19a606659163The Android Open Source Project if (pWhalTemplates->Beacon.Size != 0) 54864064216a8433360745f69edddce19a606659163The Android Open Source Project whal_hwMboxCmd_ConfigureTemplateFrame (pHwCmd, 54964064216a8433360745f69edddce19a606659163The Android Open Source Project pWhalTemplates->Beacon.Buffer, 55064064216a8433360745f69edddce19a606659163The Android Open Source Project (UINT16)pWhalTemplates->Beacon.Size, 55164064216a8433360745f69edddce19a606659163The Android Open Source Project CMD_BEACON, 55264064216a8433360745f69edddce19a606659163The Android Open Source Project NULL, 55364064216a8433360745f69edddce19a606659163The Android Open Source Project NULL); 55464064216a8433360745f69edddce19a606659163The Android Open Source Project 55564064216a8433360745f69edddce19a606659163The Android Open Source Project if (pWhalTemplates->ProbeResp.Size != 0) 55664064216a8433360745f69edddce19a606659163The Android Open Source Project whal_hwMboxCmd_ConfigureTemplateFrame (pHwCmd, 55764064216a8433360745f69edddce19a606659163The Android Open Source Project pWhalTemplates->ProbeResp.Buffer, 55864064216a8433360745f69edddce19a606659163The Android Open Source Project (UINT16)pWhalTemplates->ProbeResp.Size, 55964064216a8433360745f69edddce19a606659163The Android Open Source Project CMD_PROBE_RESP, 56064064216a8433360745f69edddce19a606659163The Android Open Source Project NULL, 56164064216a8433360745f69edddce19a606659163The Android Open Source Project NULL); 56264064216a8433360745f69edddce19a606659163The Android Open Source Project 56364064216a8433360745f69edddce19a606659163The Android Open Source Project if (pWhalTemplates->ProbeReq.Size != 0) 56464064216a8433360745f69edddce19a606659163The Android Open Source Project whal_hwMboxCmd_ConfigureTemplateFrame (pHwCmd, 56564064216a8433360745f69edddce19a606659163The Android Open Source Project pWhalTemplates->ProbeReq.Buffer, 56664064216a8433360745f69edddce19a606659163The Android Open Source Project (UINT16)pWhalTemplates->ProbeReq.Size, 56764064216a8433360745f69edddce19a606659163The Android Open Source Project CMD_PROBE_REQ, 56864064216a8433360745f69edddce19a606659163The Android Open Source Project NULL, 56964064216a8433360745f69edddce19a606659163The Android Open Source Project NULL); 57064064216a8433360745f69edddce19a606659163The Android Open Source Project 57164064216a8433360745f69edddce19a606659163The Android Open Source Project if (pWhalTemplates->NullData.Size != 0) 57264064216a8433360745f69edddce19a606659163The Android Open Source Project whal_hwMboxCmd_ConfigureTemplateFrame (pHwCmd, 57364064216a8433360745f69edddce19a606659163The Android Open Source Project pWhalTemplates->NullData.Buffer, 57464064216a8433360745f69edddce19a606659163The Android Open Source Project (UINT16)pWhalTemplates->NullData.Size, 57564064216a8433360745f69edddce19a606659163The Android Open Source Project CMD_NULL_DATA, 57664064216a8433360745f69edddce19a606659163The Android Open Source Project NULL, 57764064216a8433360745f69edddce19a606659163The Android Open Source Project NULL); 57864064216a8433360745f69edddce19a606659163The Android Open Source Project 57964064216a8433360745f69edddce19a606659163The Android Open Source Project if (pWhalTemplates->PsPoll.Size != 0) 58064064216a8433360745f69edddce19a606659163The Android Open Source Project whal_hwMboxCmd_ConfigureTemplateFrame (pHwCmd, 58164064216a8433360745f69edddce19a606659163The Android Open Source Project pWhalTemplates->PsPoll.Buffer, 58264064216a8433360745f69edddce19a606659163The Android Open Source Project (UINT16)pWhalTemplates->PsPoll.Size, 58364064216a8433360745f69edddce19a606659163The Android Open Source Project CMD_PS_POLL, 58464064216a8433360745f69edddce19a606659163The Android Open Source Project NULL, 58564064216a8433360745f69edddce19a606659163The Android Open Source Project NULL); 58664064216a8433360745f69edddce19a606659163The Android Open Source Project 58764064216a8433360745f69edddce19a606659163The Android Open Source Project if (pWhalTemplates->QosNullData.Size != 0) 58864064216a8433360745f69edddce19a606659163The Android Open Source Project whal_hwMboxCmd_ConfigureTemplateFrame (pHwCmd, 58964064216a8433360745f69edddce19a606659163The Android Open Source Project pWhalTemplates->QosNullData.Buffer, 59064064216a8433360745f69edddce19a606659163The Android Open Source Project (UINT16)pWhalTemplates->QosNullData.Size, 59164064216a8433360745f69edddce19a606659163The Android Open Source Project CMD_QOS_NULL_DATA, 59264064216a8433360745f69edddce19a606659163The Android Open Source Project NULL, 59364064216a8433360745f69edddce19a606659163The Android Open Source Project NULL); 59464064216a8433360745f69edddce19a606659163The Android Open Source Project 59564064216a8433360745f69edddce19a606659163The Android Open Source Project 59664064216a8433360745f69edddce19a606659163The Android Open Source Project /* 59764064216a8433360745f69edddce19a606659163The Android Open Source Project * call the hardware to start/join the bss 59864064216a8433360745f69edddce19a606659163The Android Open Source Project */ 59964064216a8433360745f69edddce19a606659163The Android Open Source Project return whal_hwCtrl_StartJoin(pWhalCtrl->pHwCtrl, (bssType_e)pBssInfoParams->ReqBssType, NULL, NULL); 60064064216a8433360745f69edddce19a606659163The Android Open Source Project 60164064216a8433360745f69edddce19a606659163The Android Open Source Project} 60264064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 60364064216a8433360745f69edddce19a606659163The Android Open Source Project 604