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, &param);
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, &param.content.SoftGeminiParam, &pWhalCtrl->pWhalParams->WlanParams.SoftGeminiParams, sizeof(SoftGeminiParam_t));
47964064216a8433360745f69edddce19a606659163The Android Open Source Project    whalCtrl_SetParam(pRecoveryCtrl->hHalCtrl, &param);
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,&param);
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