164064216a8433360745f69edddce19a606659163The Android Open Source Project/** \file currBss.c
264064216a8433360745f69edddce19a606659163The Android Open Source Project *  \brief Current BSS info
364064216a8433360745f69edddce19a606659163The Android Open Source Project *
464064216a8433360745f69edddce19a606659163The Android Open Source Project *  \see currBss.h
564064216a8433360745f69edddce19a606659163The Android Open Source Project */
664064216a8433360745f69edddce19a606659163The Android Open Source Project/****************************************************************************
764064216a8433360745f69edddce19a606659163The Android Open Source Project**+-----------------------------------------------------------------------+**
864064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
964064216a8433360745f69edddce19a606659163The Android Open Source Project**| Copyright(c) 1998 - 2008 Texas Instruments. All rights reserved.      |**
1064064216a8433360745f69edddce19a606659163The Android Open Source Project**| All rights reserved.                                                  |**
1164064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
1264064216a8433360745f69edddce19a606659163The Android Open Source Project**| Redistribution and use in source and binary forms, with or without    |**
1364064216a8433360745f69edddce19a606659163The Android Open Source Project**| modification, are permitted provided that the following conditions    |**
1464064216a8433360745f69edddce19a606659163The Android Open Source Project**| are met:                                                              |**
1564064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
1664064216a8433360745f69edddce19a606659163The Android Open Source Project**|  * Redistributions of source code must retain the above copyright     |**
1764064216a8433360745f69edddce19a606659163The Android Open Source Project**|    notice, this list of conditions and the following disclaimer.      |**
1864064216a8433360745f69edddce19a606659163The Android Open Source Project**|  * Redistributions in binary form must reproduce the above copyright  |**
1964064216a8433360745f69edddce19a606659163The Android Open Source Project**|    notice, this list of conditions and the following disclaimer in    |**
2064064216a8433360745f69edddce19a606659163The Android Open Source Project**|    the documentation and/or other materials provided with the         |**
2164064216a8433360745f69edddce19a606659163The Android Open Source Project**|    distribution.                                                      |**
2264064216a8433360745f69edddce19a606659163The Android Open Source Project**|  * Neither the name Texas Instruments nor the names of its            |**
2364064216a8433360745f69edddce19a606659163The Android Open Source Project**|    contributors may be used to endorse or promote products derived    |**
2464064216a8433360745f69edddce19a606659163The Android Open Source Project**|    from this software without specific prior written permission.      |**
2564064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
2664064216a8433360745f69edddce19a606659163The Android Open Source Project**| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   |**
2764064216a8433360745f69edddce19a606659163The Android Open Source Project**| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     |**
2864064216a8433360745f69edddce19a606659163The Android Open Source Project**| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |**
2964064216a8433360745f69edddce19a606659163The Android Open Source Project**| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  |**
3064064216a8433360745f69edddce19a606659163The Android Open Source Project**| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |**
3164064216a8433360745f69edddce19a606659163The Android Open Source Project**| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      |**
3264064216a8433360745f69edddce19a606659163The Android Open Source Project**| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |**
3364064216a8433360745f69edddce19a606659163The Android Open Source Project**| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |**
3464064216a8433360745f69edddce19a606659163The Android Open Source Project**| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   |**
3564064216a8433360745f69edddce19a606659163The Android Open Source Project**| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |**
3664064216a8433360745f69edddce19a606659163The Android Open Source Project**| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  |**
3764064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
3864064216a8433360745f69edddce19a606659163The Android Open Source Project**+-----------------------------------------------------------------------+**
3964064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************/
4064064216a8433360745f69edddce19a606659163The Android Open Source Project
4164064216a8433360745f69edddce19a606659163The Android Open Source Project/****************************************************************************
4264064216a8433360745f69edddce19a606659163The Android Open Source Project *                                                                          *
4364064216a8433360745f69edddce19a606659163The Android Open Source Project *   MODULE:  Current BSS                                                   *
4464064216a8433360745f69edddce19a606659163The Android Open Source Project *   PURPOSE:                                                               *
4564064216a8433360745f69edddce19a606659163The Android Open Source Project *   Roaming ability of eSTA is implemented by Roaming Manager Component and
4664064216a8433360745f69edddce19a606659163The Android Open Source Project *   described in "Roaming Manager module LLD" document, and by
4764064216a8433360745f69edddce19a606659163The Android Open Source Project *   AP Connection module. AP Connection module implemented as two sub-modules.
4864064216a8433360745f69edddce19a606659163The Android Open Source Project *   The major one is AP Connection, that is responsible for:
4964064216a8433360745f69edddce19a606659163The Android Open Source Project *   - providing Roaming Manager with access to other parts of WLAN Driver,
5064064216a8433360745f69edddce19a606659163The Android Open Source Project *   - implementing low levels of roaming mechanism.
5164064216a8433360745f69edddce19a606659163The Android Open Source Project *   Current BSS sub-module takes care of:
5264064216a8433360745f69edddce19a606659163The Android Open Source Project *   - maintaining database of current AP info,
5364064216a8433360745f69edddce19a606659163The Android Open Source Project *   - providing access to database of current AP info.
5464064216a8433360745f69edddce19a606659163The Android Open Source Project *   The Current BSS represents the BSS we are currently connected to.
5564064216a8433360745f69edddce19a606659163The Android Open Source Project *   Among other parameters, it holds the capabilities of the current AP,
5664064216a8433360745f69edddce19a606659163The Android Open Source Project *   its ID and its quality.
5764064216a8433360745f69edddce19a606659163The Android Open Source Project *   When FW indicates 'Out of Sync' event, Current BSS module is responsible
5864064216a8433360745f69edddce19a606659163The Android Open Source Project *   for awaking the device, sending unicast Probe request, waiting for
5964064216a8433360745f69edddce19a606659163The Android Open Source Project *   response and - in case FW comes to the conclusion that there was
6064064216a8433360745f69edddce19a606659163The Android Open Source Project *   no response - for triggering "Beacon missed" to AP Connection module.
6164064216a8433360745f69edddce19a606659163The Android Open Source Project *   In eSTA5.0 FW updates and checks the quality of the connection with
6264064216a8433360745f69edddce19a606659163The Android Open Source Project *   current AP. Current BSS module is responsible to handle event of type
6364064216a8433360745f69edddce19a606659163The Android Open Source Project *   'Low RSSI' from FW. Third type of roaming event reported by FW is
6464064216a8433360745f69edddce19a606659163The Android Open Source Project *   'Consecutive no ack on TX", and it is handled as well by Current
6564064216a8433360745f69edddce19a606659163The Android Open Source Project *   BSS module.Upon reception of any roaming event from FW, Current BSS
6664064216a8433360745f69edddce19a606659163The Android Open Source Project *   module is transferring this event to the AP Connection module in case
6764064216a8433360745f69edddce19a606659163The Android Open Source Project *   of BSS connection, or to SME module in case of IBSS connection.
6864064216a8433360745f69edddce19a606659163The Android Open Source Project *   When WLAN driver is working in IBSS mode, Current BSS module is holding
6964064216a8433360745f69edddce19a606659163The Android Open Source Project *   the parameters of BSS (channel, band, SSID etc.).
7064064216a8433360745f69edddce19a606659163The Android Open Source Project *                                                                          *
7164064216a8433360745f69edddce19a606659163The Android Open Source Project ****************************************************************************/
7264064216a8433360745f69edddce19a606659163The Android Open Source Project
7364064216a8433360745f69edddce19a606659163The Android Open Source Project#include "currBss.h"
7464064216a8433360745f69edddce19a606659163The Android Open Source Project#include "osApi.h"
7564064216a8433360745f69edddce19a606659163The Android Open Source Project#include "paramIn.h"
7664064216a8433360745f69edddce19a606659163The Android Open Source Project#include "report.h"
7764064216a8433360745f69edddce19a606659163The Android Open Source Project#include "802_11Defs.h"
7864064216a8433360745f69edddce19a606659163The Android Open Source Project#include "utils.h"
7964064216a8433360745f69edddce19a606659163The Android Open Source Project#include "memMngrEx.h"
8064064216a8433360745f69edddce19a606659163The Android Open Source Project#include "DataCtrl_Api.h"
8164064216a8433360745f69edddce19a606659163The Android Open Source Project#include "qosMngr_API.h"
8264064216a8433360745f69edddce19a606659163The Android Open Source Project#include "regulatoryDomainApi.h"
8364064216a8433360745f69edddce19a606659163The Android Open Source Project#include "apConn.h"
8464064216a8433360745f69edddce19a606659163The Android Open Source Project#include "scanMngrApi.h"
8564064216a8433360745f69edddce19a606659163The Android Open Source Project#include "MacServices_api.h"
8664064216a8433360745f69edddce19a606659163The Android Open Source Project#include "smeApi.h"
8764064216a8433360745f69edddce19a606659163The Android Open Source Project#include "smeSmApi.h"
8864064216a8433360745f69edddce19a606659163The Android Open Source Project#include "TNETW_Driver_types.h"
8964064216a8433360745f69edddce19a606659163The Android Open Source Project
9064064216a8433360745f69edddce19a606659163The Android Open Source Project/* Constants */
9164064216a8433360745f69edddce19a606659163The Android Open Source Project
9264064216a8433360745f69edddce19a606659163The Android Open Source Project#define NUM_PACKETS_4_CONN_LIVENESS 2
9364064216a8433360745f69edddce19a606659163The Android Open Source Project
9464064216a8433360745f69edddce19a606659163The Android Open Source Project/* Enumerations */
9564064216a8433360745f69edddce19a606659163The Android Open Source Project
9664064216a8433360745f69edddce19a606659163The Android Open Source Project
9764064216a8433360745f69edddce19a606659163The Android Open Source Project/* Typedefs */
9864064216a8433360745f69edddce19a606659163The Android Open Source Project
9964064216a8433360745f69edddce19a606659163The Android Open Source Projecttypedef UINT8 (*currBSS_beaconRxCallb_t) (TI_HANDLE hModule, UINT64 staTSF, UINT8 dtimCount);
10064064216a8433360745f69edddce19a606659163The Android Open Source Project
10164064216a8433360745f69edddce19a606659163The Android Open Source Project
10264064216a8433360745f69edddce19a606659163The Android Open Source Project/* Structures */
10364064216a8433360745f69edddce19a606659163The Android Open Source Project
10464064216a8433360745f69edddce19a606659163The Android Open Source Project/**
10564064216a8433360745f69edddce19a606659163The Android Open Source Project* Current BSS control block
10664064216a8433360745f69edddce19a606659163The Android Open Source Project* Following structure defines parameters that can be configured externally,
10764064216a8433360745f69edddce19a606659163The Android Open Source Project* internal variables, and handlers of other modules used by Current BSS module
10864064216a8433360745f69edddce19a606659163The Android Open Source Project*/
10964064216a8433360745f69edddce19a606659163The Android Open Source Projecttypedef struct _currBSS_t
11064064216a8433360745f69edddce19a606659163The Android Open Source Project{
11164064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Internal variables and configurable parameters */
11264064216a8433360745f69edddce19a606659163The Android Open Source Project    bssType_e   type;                   /**< Set by SME module; EBSS, IBSS or none */
11364064216a8433360745f69edddce19a606659163The Android Open Source Project    radioBand_e band;                   /**< Set by SME module */
11464064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT8       channel;                /**< Set by AP Connection, SME and Switch Channel modules */
11564064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT8       numOfPktsInRevivalTest; /**< Set by AP Connection; nmber of Probe Request Packets sent when 'Out of sync' suspected */
11664064216a8433360745f69edddce19a606659163The Android Open Source Project    BOOLEAN     fwIsOutOfSync;          /**< TRUE if 'Out of Sync' event received */
11764064216a8433360745f69edddce19a606659163The Android Open Source Project    BOOLEAN     isConnected;            /**< Default: not connected */
11864064216a8433360745f69edddce19a606659163The Android Open Source Project    bssEntry_t  currAPInfo;             /**< Set by SME upon request from AP Connection */
11964064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT8       snr;                    /**< Value of SNR of last management packet received form the current AP */
12064064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT8        snrFilterWeight;            /**< The weigh for average SNR value of management packets received form the current AP */
12164064216a8433360745f69edddce19a606659163The Android Open Source Project    BOOLEAN     rssiBelowThrReported;   /**< Set to TRUE whem low RSSI threshold crossed */
12264064216a8433360745f69edddce19a606659163The Android Open Source Project    BOOLEAN     rssiAboveThrReported;   /**< Set to TRUE whem high RSSI threshold crossed */
12364064216a8433360745f69edddce19a606659163The Android Open Source Project    INT8        averageRssi;            /**< Average value of RSSI of management packets received form the current AP */
12464064216a8433360745f69edddce19a606659163The Android Open Source Project    INT8        lowRssiThreshold;       /**< Indicator used to increase the background scan period when quality is low */
12564064216a8433360745f69edddce19a606659163The Android Open Source Project    INT8        highRssiThreshold;      /**< Indicator used to reduce the background scan period when quality is normal */
12664064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT8        rssiFilterWeight;            /**< The weigh for average RSSI value of management packets received form the current AP */
12764064216a8433360745f69edddce19a606659163The Android Open Source Project    BOOLEAN     bUseSGParams;           /**< Whether to use the Soft Gemini compensation on the roaming triggers (currently: BSS Loss) */
12864064216a8433360745f69edddce19a606659163The Android Open Source Project                                        /**< This compensation is needed since BT Activity might over-run beacons                       */
12964064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT8       numExpectedTbttForBSSLoss; /**< last configured value without Soft Gemini compensation                                 */
13064064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32      SGcompensationPercent;  /*< the percentage of increasing the TbttForBSSLoss value when SG is enabled */
13164064216a8433360745f69edddce19a606659163The Android Open Source Project
13264064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Handlers of other modules used by AP Connection */
13364064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_HANDLE   hOs;
13464064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_HANDLE   hPowerMngr;
13564064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_HANDLE   hAPConn;
13664064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_HANDLE   hSme;
13764064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_HANDLE   hHal;
13864064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_HANDLE   hMlme;
13964064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_HANDLE   hReport;
14064064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_HANDLE   hRegulatoryDomain;
14164064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_HANDLE   hMemMgr;
14264064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_HANDLE   hTxData;
14364064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_HANDLE   hSiteMgr;
14464064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_HANDLE   hScanMngr;
14564064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_HANDLE   hMacServices;
14664064216a8433360745f69edddce19a606659163The Android Open Source Project} currBSS_t;
14764064216a8433360745f69edddce19a606659163The Android Open Source Project
14864064216a8433360745f69edddce19a606659163The Android Open Source Project
14964064216a8433360745f69edddce19a606659163The Android Open Source Project/* Internal functions prototypes */
15064064216a8433360745f69edddce19a606659163The Android Open Source Project
15164064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void currBSS_lowRssiThrCrossed(currBSS_t *hCurrBSS, UINT8 *data, UINT8 dataLength);
15264064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void currBSS_lowSnrThrCrossed(currBSS_t *hCurrBSS, UINT8 *data, UINT8 dataLength);
15364064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void currBSS_consecTxErrors(currBSS_t *hCurrBSS, UINT8 *data, UINT8 dataLength);
15464064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void currBSS_outOfSync(currBSS_t *hCurrBSS, UINT8 *data, UINT8 dataLength);
15564064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void currBSS_reviveConnection(currBSS_t *hCurrBSS);
15664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void currBSS_terminateOutOfSyncMode(currBSS_t *pCurrBSS);
15764064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void currBSS_beaconMissed(currBSS_t *hCurrBSS, UINT8 *data, UINT8 dataLength);
15864064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void currBSS_sendUnicastProbeRequest(currBSS_t *pCurrBSS);
15964064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void currBSS_reportRoamingEvent(currBSS_t *hCurrBSS, apConn_roamingTrigger_e roamingEventType, roamingEventData_u *pRoamingEventData);
16064064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void currBSS_updateBSSLoss(currBSS_t *pCurrBSS);
16164064216a8433360745f69edddce19a606659163The Android Open Source Project
16264064216a8433360745f69edddce19a606659163The Android Open Source Project/* Public functions implementation */
16364064216a8433360745f69edddce19a606659163The Android Open Source Project
16464064216a8433360745f69edddce19a606659163The Android Open Source Project
16564064216a8433360745f69edddce19a606659163The Android Open Source Project/**
16664064216a8433360745f69edddce19a606659163The Android Open Source Project*
16764064216a8433360745f69edddce19a606659163The Android Open Source Project* currBSS_create
16864064216a8433360745f69edddce19a606659163The Android Open Source Project*
16964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
17064064216a8433360745f69edddce19a606659163The Android Open Source Project*
17164064216a8433360745f69edddce19a606659163The Android Open Source Project* Create the Current BSS context: allocate memory for internal variables
17264064216a8433360745f69edddce19a606659163The Android Open Source Project*
17364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
17464064216a8433360745f69edddce19a606659163The Android Open Source Project*
17564064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hOS - the handle to the OS object
17664064216a8433360745f69edddce19a606659163The Android Open Source Project*
17764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
17864064216a8433360745f69edddce19a606659163The Android Open Source Project*
17964064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK on failure.
18064064216a8433360745f69edddce19a606659163The Android Open Source Project*
18164064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
18264064216a8433360745f69edddce19a606659163The Android Open Source Project*/
18364064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_HANDLE currBSS_create(TI_HANDLE hOs)
18464064216a8433360745f69edddce19a606659163The Android Open Source Project{
18564064216a8433360745f69edddce19a606659163The Android Open Source Project    currBSS_t   *pCurrBss;
18664064216a8433360745f69edddce19a606659163The Android Open Source Project
18764064216a8433360745f69edddce19a606659163The Android Open Source Project    if ((pCurrBss = os_memoryAlloc(hOs, sizeof(currBSS_t))) != NULL)
18864064216a8433360745f69edddce19a606659163The Android Open Source Project    {
18964064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBss->hOs = hOs;
19064064216a8433360745f69edddce19a606659163The Android Open Source Project
19164064216a8433360745f69edddce19a606659163The Android Open Source Project        return pCurrBss;
19264064216a8433360745f69edddce19a606659163The Android Open Source Project    }
19364064216a8433360745f69edddce19a606659163The Android Open Source Project    else /* Failed to allocate control block */
19464064216a8433360745f69edddce19a606659163The Android Open Source Project    {
19564064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_OS_REPORT(("FATAL ERROR: currBSS_create(): Error allocating cb - aborting\n"));
19664064216a8433360745f69edddce19a606659163The Android Open Source Project        return NULL;
19764064216a8433360745f69edddce19a606659163The Android Open Source Project    }
19864064216a8433360745f69edddce19a606659163The Android Open Source Project}
19964064216a8433360745f69edddce19a606659163The Android Open Source Project
20064064216a8433360745f69edddce19a606659163The Android Open Source Project
20164064216a8433360745f69edddce19a606659163The Android Open Source Project/**
20264064216a8433360745f69edddce19a606659163The Android Open Source Project*
20364064216a8433360745f69edddce19a606659163The Android Open Source Project* currBSS_unload
20464064216a8433360745f69edddce19a606659163The Android Open Source Project*
20564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
20664064216a8433360745f69edddce19a606659163The Android Open Source Project*
20764064216a8433360745f69edddce19a606659163The Android Open Source Project* Finish Current BSS module work.
20864064216a8433360745f69edddce19a606659163The Android Open Source Project*
20964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
21064064216a8433360745f69edddce19a606659163The Android Open Source Project*
21164064216a8433360745f69edddce19a606659163The Android Open Source Project*
21264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
21364064216a8433360745f69edddce19a606659163The Android Open Source Project*
21464064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK on failure.
21564064216a8433360745f69edddce19a606659163The Android Open Source Project*
21664064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
21764064216a8433360745f69edddce19a606659163The Android Open Source Project*/
21864064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS currBSS_unload(TI_HANDLE hCurrBSS)
21964064216a8433360745f69edddce19a606659163The Android Open Source Project{
22064064216a8433360745f69edddce19a606659163The Android Open Source Project    currBSS_t   *pCurrBSS;
22164064216a8433360745f69edddce19a606659163The Android Open Source Project
22264064216a8433360745f69edddce19a606659163The Android Open Source Project    if (hCurrBSS != NULL)
22364064216a8433360745f69edddce19a606659163The Android Open Source Project    {
22464064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS = (currBSS_t *)hCurrBSS;
22564064216a8433360745f69edddce19a606659163The Android Open Source Project
22664064216a8433360745f69edddce19a606659163The Android Open Source Project        /* Free pre-allocated control block */
22764064216a8433360745f69edddce19a606659163The Android Open Source Project        utils_nullMemoryFree(pCurrBSS->hOs, pCurrBSS, sizeof(currBSS_t));
22864064216a8433360745f69edddce19a606659163The Android Open Source Project    }
22964064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
23064064216a8433360745f69edddce19a606659163The Android Open Source Project}
23164064216a8433360745f69edddce19a606659163The Android Open Source Project
23264064216a8433360745f69edddce19a606659163The Android Open Source Project/**
23364064216a8433360745f69edddce19a606659163The Android Open Source Project*
23464064216a8433360745f69edddce19a606659163The Android Open Source Project* currBSS_init
23564064216a8433360745f69edddce19a606659163The Android Open Source Project*
23664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
23764064216a8433360745f69edddce19a606659163The Android Open Source Project*
23864064216a8433360745f69edddce19a606659163The Android Open Source Project* Prepare Current BSS module to work
23964064216a8433360745f69edddce19a606659163The Android Open Source Project*
24064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
24164064216a8433360745f69edddce19a606659163The Android Open Source Project*
24264064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hCurrBSS - Current BSS handle \n
24364064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hMlme  \n
24464064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hScanMng  \n
24564064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hPowerMgr  \n
24664064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hAPConnection  \n
24764064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hSME  \n
24864064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hHal  \n
24964064216a8433360745f69edddce19a606659163The Android Open Source Project*
25064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
25164064216a8433360745f69edddce19a606659163The Android Open Source Project*
25264064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK on failure.
25364064216a8433360745f69edddce19a606659163The Android Open Source Project*
25464064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
25564064216a8433360745f69edddce19a606659163The Android Open Source Project*/
25664064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS currBSS_init(TI_HANDLE hCurrBSS,
25764064216a8433360745f69edddce19a606659163The Android Open Source Project                       TI_HANDLE hMlme,
25864064216a8433360745f69edddce19a606659163The Android Open Source Project                       TI_HANDLE hPowerMgr,
25964064216a8433360745f69edddce19a606659163The Android Open Source Project                       TI_HANDLE hAPConnection,
26064064216a8433360745f69edddce19a606659163The Android Open Source Project                       TI_HANDLE hSME,
26164064216a8433360745f69edddce19a606659163The Android Open Source Project                       TI_HANDLE hHal,
26264064216a8433360745f69edddce19a606659163The Android Open Source Project                       TI_HANDLE hReport,
26364064216a8433360745f69edddce19a606659163The Android Open Source Project                       TI_HANDLE hMemMgr,
26464064216a8433360745f69edddce19a606659163The Android Open Source Project                       TI_HANDLE hTxData,
26564064216a8433360745f69edddce19a606659163The Android Open Source Project                       TI_HANDLE hSiteMngr,
26664064216a8433360745f69edddce19a606659163The Android Open Source Project                       TI_HANDLE hScanMngr,
26764064216a8433360745f69edddce19a606659163The Android Open Source Project                       TI_HANDLE hMacServices)
26864064216a8433360745f69edddce19a606659163The Android Open Source Project{
26964064216a8433360745f69edddce19a606659163The Android Open Source Project    currBSS_t   *pCurrBSS;
27064064216a8433360745f69edddce19a606659163The Android Open Source Project    whalCtrl_roamingTriggerCmd_t params;
27164064216a8433360745f69edddce19a606659163The Android Open Source Project
27264064216a8433360745f69edddce19a606659163The Android Open Source Project    if (hCurrBSS != NULL)
27364064216a8433360745f69edddce19a606659163The Android Open Source Project    {
27464064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS = (currBSS_t *)hCurrBSS;
27564064216a8433360745f69edddce19a606659163The Android Open Source Project
27664064216a8433360745f69edddce19a606659163The Android Open Source Project        /* Registration succeeded, continue with init procedure */
27764064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->band = RADIO_BAND_2_4_GHZ;
27864064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->channel = 0;
27964064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->isConnected = FALSE;
28064064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->fwIsOutOfSync = FALSE;
28164064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->rssiAboveThrReported = FALSE;
28264064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->rssiBelowThrReported = FALSE;
28364064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->type = BSS_ANY;
28464064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->numOfPktsInRevivalTest = NUM_PACKETS_4_CONN_LIVENESS;
28564064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->snr = 0;
28664064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->snrFilterWeight = SNR_DEFAULT_WEIGHT;
28764064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->averageRssi = 0;
28864064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->rssiFilterWeight = RSSI_DEFAULT_WEIGHT;
28964064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->currAPInfo.RSSI = 0;
29064064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->highRssiThreshold = RSSI_DEFAULT_THRESHOLD;
29164064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->lowRssiThreshold = RSSI_DEFAULT_THRESHOLD;
29264064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->bUseSGParams = FALSE;
29364064216a8433360745f69edddce19a606659163The Android Open Source Project
29464064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->hAPConn = hAPConnection;
29564064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->hTxData = hTxData;
29664064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->hHal = hHal;
29764064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->hMlme = hMlme;
29864064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->hPowerMngr = hPowerMgr;
29964064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->hSme = hSME;
30064064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->hMemMgr = hMemMgr;
30164064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->hSiteMgr = hSiteMngr;
30264064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->hReport = hReport;
30364064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->hScanMngr = hScanMngr;
30464064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->hMacServices = hMacServices;
30564064216a8433360745f69edddce19a606659163The Android Open Source Project
30664064216a8433360745f69edddce19a606659163The Android Open Source Project        /* Configure and enable the Low RSSI, the Low SNR and the Missed beacon events */
30764064216a8433360745f69edddce19a606659163The Android Open Source Project        whalCtrl_EventMbox_RegisterForEvent(pCurrBSS->hHal, HAL_EVENT_RSSI_LEVEL, (void *)currBSS_lowRssiThrCrossed, pCurrBSS);
30864064216a8433360745f69edddce19a606659163The Android Open Source Project        whalCtrl_EventMbox_Enable(pCurrBSS->hHal, HAL_EVENT_RSSI_LEVEL);
30964064216a8433360745f69edddce19a606659163The Android Open Source Project
31064064216a8433360745f69edddce19a606659163The Android Open Source Project        whalCtrl_EventMbox_RegisterForEvent(pCurrBSS->hHal, HAL_EVENT_LOW_SNR, (void *)currBSS_lowSnrThrCrossed, pCurrBSS);
31164064216a8433360745f69edddce19a606659163The Android Open Source Project        whalCtrl_EventMbox_Enable(pCurrBSS->hHal, HAL_EVENT_LOW_SNR);
31264064216a8433360745f69edddce19a606659163The Android Open Source Project
31364064216a8433360745f69edddce19a606659163The Android Open Source Project        whalCtrl_EventMbox_RegisterForEvent(pCurrBSS->hHal, HAL_EVENT_BSS_REGAIN, (void *)currBSS_Bss_Regain_CallB , pCurrBSS);
31464064216a8433360745f69edddce19a606659163The Android Open Source Project        whalCtrl_EventMbox_Enable(pCurrBSS->hHal, HAL_EVENT_BSS_REGAIN);
31564064216a8433360745f69edddce19a606659163The Android Open Source Project
31664064216a8433360745f69edddce19a606659163The Android Open Source Project        params.rssiFilterDepth = RSSI_DEFAULT_DEPTH;
31764064216a8433360745f69edddce19a606659163The Android Open Source Project        params.rssiFilterWeight = RSSI_DEFAULT_WEIGHT;
31864064216a8433360745f69edddce19a606659163The Android Open Source Project        params.rssiThreshold =  RSSI_DEFAULT_THRESHOLD;
31964064216a8433360745f69edddce19a606659163The Android Open Source Project        params.lowRSSIEventType = LOW_RSSI_EVENT_LEVEL;
32064064216a8433360745f69edddce19a606659163The Android Open Source Project        whalCtrl_SetRSSIParamsCmd(pCurrBSS->hHal, &params);
32164064216a8433360745f69edddce19a606659163The Android Open Source Project
32264064216a8433360745f69edddce19a606659163The Android Open Source Project        params.snrFilterDepth = SNR_DEFAULT_DEPTH;
32364064216a8433360745f69edddce19a606659163The Android Open Source Project        params.snrFilterWeight = SNR_DEFAULT_WEIGHT;
32464064216a8433360745f69edddce19a606659163The Android Open Source Project        params.snrThreshold =  SNR_DEFAULT_THRESHOLD;
32564064216a8433360745f69edddce19a606659163The Android Open Source Project        params.lowSNREventType = LOW_SNR_EVENT_LEVEL;
32664064216a8433360745f69edddce19a606659163The Android Open Source Project        whalCtrl_SetSNRParamsCmd(pCurrBSS->hHal, &params);
32764064216a8433360745f69edddce19a606659163The Android Open Source Project
32864064216a8433360745f69edddce19a606659163The Android Open Source Project        /* Register for 'Out of Sync' and 'No Beacon trigger' events */
32964064216a8433360745f69edddce19a606659163The Android Open Source Project        whalCtrl_EventMbox_RegisterForEvent(pCurrBSS->hHal, HAL_EVENT_BSS_LOSE, (void *)currBSS_beaconMissed, pCurrBSS);
33064064216a8433360745f69edddce19a606659163The Android Open Source Project        whalCtrl_EventMbox_Enable(pCurrBSS->hHal, HAL_EVENT_BSS_LOSE);
33164064216a8433360745f69edddce19a606659163The Android Open Source Project        whalCtrl_EventMbox_RegisterForEvent(pCurrBSS->hHal, HAL_EVENT_SYNCHRONIZATION_TIMEOUT, (void *)currBSS_outOfSync, pCurrBSS);
33264064216a8433360745f69edddce19a606659163The Android Open Source Project        whalCtrl_EventMbox_Enable(pCurrBSS->hHal, HAL_EVENT_SYNCHRONIZATION_TIMEOUT);
33364064216a8433360745f69edddce19a606659163The Android Open Source Project            /* save last configured value for handling Soft Gemini changes */
33464064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->numExpectedTbttForBSSLoss = OUT_OF_SYNC_DEFAULT_THRESHOLD;
33564064216a8433360745f69edddce19a606659163The Android Open Source Project        params.TsfMissThreshold = OUT_OF_SYNC_DEFAULT_THRESHOLD;
33664064216a8433360745f69edddce19a606659163The Android Open Source Project        params.BssLossTimeout = NO_BEACON_DEFAULT_TIMEOUT;
33764064216a8433360745f69edddce19a606659163The Android Open Source Project        whalCtrl_SetBssLossTsfThresholdParamsCmd(pCurrBSS->hHal, &params);
33864064216a8433360745f69edddce19a606659163The Android Open Source Project
33964064216a8433360745f69edddce19a606659163The Android Open Source Project        /* Register for BSS_RESET event' */
34064064216a8433360745f69edddce19a606659163The Android Open Source Project        whalCtrl_EventMbox_RegisterForEvent(pCurrBSS->hHal, HAL_EVENT_BSS_RESET, (void *)currBSS_Bss_Reset_CallB , pCurrBSS);
34164064216a8433360745f69edddce19a606659163The Android Open Source Project        /* Register for 'Consec. Tx error' */
34264064216a8433360745f69edddce19a606659163The Android Open Source Project        whalCtrl_EventMbox_RegisterForEvent(pCurrBSS->hHal, HAL_EVENT_MAX_TX_RETRY, (void *)currBSS_consecTxErrors, pCurrBSS);
34364064216a8433360745f69edddce19a606659163The Android Open Source Project        whalCtrl_EventMbox_Enable(pCurrBSS->hHal, HAL_EVENT_MAX_TX_RETRY);
34464064216a8433360745f69edddce19a606659163The Android Open Source Project        params.maxTxRetry = NO_ACK_DEFAULT_THRESHOLD;
34564064216a8433360745f69edddce19a606659163The Android Open Source Project        whalCtrl_SetMaxTxRetryParamsCmd(pCurrBSS->hHal, &params);
34664064216a8433360745f69edddce19a606659163The Android Open Source Project
34764064216a8433360745f69edddce19a606659163The Android Open Source Project        return OK;
34864064216a8433360745f69edddce19a606659163The Android Open Source Project    }
34964064216a8433360745f69edddce19a606659163The Android Open Source Project    else /* Current BSS handle is NULL */
35064064216a8433360745f69edddce19a606659163The Android Open Source Project    {
35164064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_OS_REPORT(("FATAL ERROR: Current BSS context is not initiated\n"));
35264064216a8433360745f69edddce19a606659163The Android Open Source Project        return NOK;
35364064216a8433360745f69edddce19a606659163The Android Open Source Project    }
35464064216a8433360745f69edddce19a606659163The Android Open Source Project}
35564064216a8433360745f69edddce19a606659163The Android Open Source Project
35664064216a8433360745f69edddce19a606659163The Android Open Source Project
35764064216a8433360745f69edddce19a606659163The Android Open Source Project/**
35864064216a8433360745f69edddce19a606659163The Android Open Source Project*
35964064216a8433360745f69edddce19a606659163The Android Open Source Project* currBSS_updateRoamingTriggers
36064064216a8433360745f69edddce19a606659163The Android Open Source Project*
36164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
36264064216a8433360745f69edddce19a606659163The Android Open Source Project*
36364064216a8433360745f69edddce19a606659163The Android Open Source Project* Configure parameter of Current BSS
36464064216a8433360745f69edddce19a606659163The Android Open Source Project*
36564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
36664064216a8433360745f69edddce19a606659163The Android Open Source Project*
36764064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hCurrBSS - Current BSS handle \n
36864064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - params - pointer to datablock of roaming threshols \n
36964064216a8433360745f69edddce19a606659163The Android Open Source Project*
37064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
37164064216a8433360745f69edddce19a606659163The Android Open Source Project*
37264064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK on failure.
37364064216a8433360745f69edddce19a606659163The Android Open Source Project*
37464064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
37564064216a8433360745f69edddce19a606659163The Android Open Source Project*/
37664064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS currBSS_updateRoamingTriggers(TI_HANDLE hCurrBSS,
37764064216a8433360745f69edddce19a606659163The Android Open Source Project                                        roamingMngrThresholdsConfig_t *params)
37864064216a8433360745f69edddce19a606659163The Android Open Source Project{
37964064216a8433360745f69edddce19a606659163The Android Open Source Project    currBSS_t   *pCurrBSS = (currBSS_t *)hCurrBSS;
38064064216a8433360745f69edddce19a606659163The Android Open Source Project    whalCtrl_roamingTriggerCmd_t roamingTriggersParams;
38164064216a8433360745f69edddce19a606659163The Android Open Source Project
38264064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Configure HAL with RSSI parameters */
38364064216a8433360745f69edddce19a606659163The Android Open Source Project    roamingTriggersParams.rssiFilterDepth = RSSI_DEFAULT_DEPTH;
38464064216a8433360745f69edddce19a606659163The Android Open Source Project    roamingTriggersParams.rssiFilterWeight = params->rssiFilterWeight /* RSSI_DEFAULT_WEIGHT */ ;
38564064216a8433360745f69edddce19a606659163The Android Open Source Project    roamingTriggersParams.rssiThreshold = params->lowRssiThreshold;
38664064216a8433360745f69edddce19a606659163The Android Open Source Project    roamingTriggersParams.lowRSSIEventType = LOW_RSSI_EVENT_LEVEL;
38764064216a8433360745f69edddce19a606659163The Android Open Source Project    whalCtrl_SetRSSIParamsCmd(pCurrBSS->hHal, &roamingTriggersParams);
38864064216a8433360745f69edddce19a606659163The Android Open Source Project
38964064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Configure HAL with SNR parameters */
39064064216a8433360745f69edddce19a606659163The Android Open Source Project    roamingTriggersParams.snrFilterDepth = SNR_DEFAULT_DEPTH;
39164064216a8433360745f69edddce19a606659163The Android Open Source Project    roamingTriggersParams.snrFilterWeight = params->snrFilterWeight /* SNR_DEFAULT_WEIGHT */ ;
39264064216a8433360745f69edddce19a606659163The Android Open Source Project    roamingTriggersParams.snrThreshold = params->lowSnrThreshold;
39364064216a8433360745f69edddce19a606659163The Android Open Source Project    roamingTriggersParams.lowSNREventType = LOW_SNR_EVENT_LEVEL;
39464064216a8433360745f69edddce19a606659163The Android Open Source Project    whalCtrl_SetSNRParamsCmd(pCurrBSS->hHal, &roamingTriggersParams);
39564064216a8433360745f69edddce19a606659163The Android Open Source Project
39664064216a8433360745f69edddce19a606659163The Android Open Source Project    /* save last configured value for handling Soft Gemini changes */
39764064216a8433360745f69edddce19a606659163The Android Open Source Project    pCurrBSS->numExpectedTbttForBSSLoss = params->numExpectedTbttForBSSLoss;
39864064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Configure HAL with 'No BSS' thresholds (Same as the other parameters but in  a special
39964064216a8433360745f69edddce19a606659163The Android Open Source Project        function for the Soft Gemini module consideration) */
40064064216a8433360745f69edddce19a606659163The Android Open Source Project    currBSS_updateBSSLoss(pCurrBSS);
40164064216a8433360745f69edddce19a606659163The Android Open Source Project
40264064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Configure HAL with 'Consecutive NACK' thresholds */
40364064216a8433360745f69edddce19a606659163The Android Open Source Project    roamingTriggersParams.maxTxRetry = params->dataRetryThreshold;
40464064216a8433360745f69edddce19a606659163The Android Open Source Project    whalCtrl_SetMaxTxRetryParamsCmd(pCurrBSS->hHal, &roamingTriggersParams);
40564064216a8433360745f69edddce19a606659163The Android Open Source Project
40664064216a8433360745f69edddce19a606659163The Android Open Source Project    pCurrBSS->lowRssiThreshold = params->lowQualityForBackgroungScanCondition;
40764064216a8433360745f69edddce19a606659163The Android Open Source Project
40864064216a8433360745f69edddce19a606659163The Android Open Source Project    pCurrBSS->highRssiThreshold = params->normalQualityForBackgroungScanCondition;
40964064216a8433360745f69edddce19a606659163The Android Open Source Project
41064064216a8433360745f69edddce19a606659163The Android Open Source Project    pCurrBSS->rssiFilterWeight = params->rssiFilterWeight;
41164064216a8433360745f69edddce19a606659163The Android Open Source Project
41264064216a8433360745f69edddce19a606659163The Android Open Source Project    pCurrBSS->snrFilterWeight = params->snrFilterWeight;
41364064216a8433360745f69edddce19a606659163The Android Open Source Project
41464064216a8433360745f69edddce19a606659163The Android Open Source Project
41564064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
41664064216a8433360745f69edddce19a606659163The Android Open Source Project}
41764064216a8433360745f69edddce19a606659163The Android Open Source Project
41864064216a8433360745f69edddce19a606659163The Android Open Source Project/**
41964064216a8433360745f69edddce19a606659163The Android Open Source Project*
42064064216a8433360745f69edddce19a606659163The Android Open Source Project* currBSS_getRoamingParams
42164064216a8433360745f69edddce19a606659163The Android Open Source Project*
42264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
42364064216a8433360745f69edddce19a606659163The Android Open Source Project*
42464064216a8433360745f69edddce19a606659163The Android Open Source Project* Retrieves the roaming triggers stored in the CurrBSS module.
42564064216a8433360745f69edddce19a606659163The Android Open Source Project*
42664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
42764064216a8433360745f69edddce19a606659163The Android Open Source Project*
42864064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hCurrBSS - Current BSS handle \n
42964064216a8433360745f69edddce19a606659163The Android Open Source Project*  O   - aNumExpectedTbttForBSSLoss - Current BSS handle \n
43064064216a8433360745f69edddce19a606659163The Android Open Source Project*  O   - aLowQualityForBackgroungScanCondition - Current BSS handle \n
43164064216a8433360745f69edddce19a606659163The Android Open Source Project*  O   - aNormalQualityForBackgroungScanCondition - Current BSS handle \n
43264064216a8433360745f69edddce19a606659163The Android Open Source Project*
43364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
43464064216a8433360745f69edddce19a606659163The Android Open Source Project*
43564064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK on failure.
43664064216a8433360745f69edddce19a606659163The Android Open Source Project*
43764064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
43864064216a8433360745f69edddce19a606659163The Android Open Source Project*/
43964064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS currBSS_getRoamingParams(TI_HANDLE hCurrBSS,
44064064216a8433360745f69edddce19a606659163The Android Open Source Project                                   UINT8 * aNumExpectedTbttForBSSLoss,
44164064216a8433360745f69edddce19a606659163The Android Open Source Project                                   INT8 * aLowQualityForBackgroungScanCondition,
44264064216a8433360745f69edddce19a606659163The Android Open Source Project                                   INT8 * aNormalQualityForBackgroungScanCondition,
44364064216a8433360745f69edddce19a606659163The Android Open Source Project                                   UINT8 * rssiFilterWeight,
44464064216a8433360745f69edddce19a606659163The Android Open Source Project                                   UINT8 * snrFilterWeight)
44564064216a8433360745f69edddce19a606659163The Android Open Source Project{
44664064216a8433360745f69edddce19a606659163The Android Open Source Project    currBSS_t * pCurrBSS = (currBSS_t *) hCurrBSS;
44764064216a8433360745f69edddce19a606659163The Android Open Source Project
44864064216a8433360745f69edddce19a606659163The Android Open Source Project    *aNumExpectedTbttForBSSLoss = pCurrBSS->numExpectedTbttForBSSLoss;
44964064216a8433360745f69edddce19a606659163The Android Open Source Project    *aLowQualityForBackgroungScanCondition = pCurrBSS->lowRssiThreshold;
45064064216a8433360745f69edddce19a606659163The Android Open Source Project    *aNormalQualityForBackgroungScanCondition = pCurrBSS->highRssiThreshold;
45164064216a8433360745f69edddce19a606659163The Android Open Source Project    *rssiFilterWeight = pCurrBSS->rssiFilterWeight;
45264064216a8433360745f69edddce19a606659163The Android Open Source Project    *snrFilterWeight = pCurrBSS->snrFilterWeight;
45364064216a8433360745f69edddce19a606659163The Android Open Source Project
45464064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
45564064216a8433360745f69edddce19a606659163The Android Open Source Project}
45664064216a8433360745f69edddce19a606659163The Android Open Source Project
45764064216a8433360745f69edddce19a606659163The Android Open Source Project/**
45864064216a8433360745f69edddce19a606659163The Android Open Source Project*
45964064216a8433360745f69edddce19a606659163The Android Open Source Project* currBSS_SGconfigureBSSLoss
46064064216a8433360745f69edddce19a606659163The Android Open Source Project*
46164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
46264064216a8433360745f69edddce19a606659163The Android Open Source Project*
46364064216a8433360745f69edddce19a606659163The Android Open Source Project*   This function is called by the Soft Gemini module in order to enable/disable the use of
46464064216a8433360745f69edddce19a606659163The Android Open Source Project*   the compensation value for the BSSLoss count , and the percent of increasing that value
46564064216a8433360745f69edddce19a606659163The Android Open Source Project*   It also set the new parameter to the FW (with another generic function)
46664064216a8433360745f69edddce19a606659163The Android Open Source Project*   The compensation is needed since BT activity might over-run recieved beacons
46764064216a8433360745f69edddce19a606659163The Android Open Source Project*
46864064216a8433360745f69edddce19a606659163The Android Open Source Project*
46964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
47064064216a8433360745f69edddce19a606659163The Android Open Source Project*
47164064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hCurrBSS - Current BSS handle \n
47264064216a8433360745f69edddce19a606659163The Android Open Source Project*        SGcompensationPercent - percent of increasing the BSSLoss value to the FW \n
47364064216a8433360745f69edddce19a606659163The Android Open Source Project*        bUseSGParams - whether to use the SG compensation
47464064216a8433360745f69edddce19a606659163The Android Open Source Project*
47564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
47664064216a8433360745f69edddce19a606659163The Android Open Source Project*
47764064216a8433360745f69edddce19a606659163The Android Open Source Project*  -
47864064216a8433360745f69edddce19a606659163The Android Open Source Project*
47964064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
48064064216a8433360745f69edddce19a606659163The Android Open Source Project*/
48164064216a8433360745f69edddce19a606659163The Android Open Source Project
48264064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid currBSS_SGconfigureBSSLoss(TI_HANDLE hCurrBSS,
48364064216a8433360745f69edddce19a606659163The Android Open Source Project                                        UINT32 SGcompensationPercent , BOOLEAN bUseSGParams)
48464064216a8433360745f69edddce19a606659163The Android Open Source Project{
48564064216a8433360745f69edddce19a606659163The Android Open Source Project    currBSS_t   *pCurrBSS = (currBSS_t *)hCurrBSS;
48664064216a8433360745f69edddce19a606659163The Android Open Source Project
48764064216a8433360745f69edddce19a606659163The Android Open Source Project    pCurrBSS->bUseSGParams = bUseSGParams;
48864064216a8433360745f69edddce19a606659163The Android Open Source Project    pCurrBSS->SGcompensationPercent = SGcompensationPercent;
48964064216a8433360745f69edddce19a606659163The Android Open Source Project
49064064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_REPORT_INFORMATION(pCurrBSS->hReport, ROAMING_MANAGER_MODULE_LOG,("CurrBSS_SGConf: SG =%d\n",
49164064216a8433360745f69edddce19a606659163The Android Open Source Project																		   pCurrBSS->bUseSGParams));
49264064216a8433360745f69edddce19a606659163The Android Open Source Project
49364064216a8433360745f69edddce19a606659163The Android Open Source Project    /* update the change of BSSLoss in the FW */
49464064216a8433360745f69edddce19a606659163The Android Open Source Project    currBSS_updateBSSLoss(pCurrBSS);
49564064216a8433360745f69edddce19a606659163The Android Open Source Project}
49664064216a8433360745f69edddce19a606659163The Android Open Source Project
49764064216a8433360745f69edddce19a606659163The Android Open Source Project/**
49864064216a8433360745f69edddce19a606659163The Android Open Source Project*
49964064216a8433360745f69edddce19a606659163The Android Open Source Project* currBSS_updateBSSLoss
50064064216a8433360745f69edddce19a606659163The Android Open Source Project*
50164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
50264064216a8433360745f69edddce19a606659163The Android Open Source Project*
50364064216a8433360745f69edddce19a606659163The Android Open Source Project*   This function updates only BSS Loss parameter , we need it to be able to consider the
50464064216a8433360745f69edddce19a606659163The Android Open Source Project*   Soft Gemini status , and change the parameter according to it
50564064216a8433360745f69edddce19a606659163The Android Open Source Project*
50664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
50764064216a8433360745f69edddce19a606659163The Android Open Source Project*
50864064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - pCurrBSS - Current BSS handle \n
50964064216a8433360745f69edddce19a606659163The Android Open Source Project*
51064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
51164064216a8433360745f69edddce19a606659163The Android Open Source Project*
51264064216a8433360745f69edddce19a606659163The Android Open Source Project*  -
51364064216a8433360745f69edddce19a606659163The Android Open Source Project*
51464064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
51564064216a8433360745f69edddce19a606659163The Android Open Source Project*/
51664064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid currBSS_updateBSSLoss(currBSS_t   *pCurrBSS)
51764064216a8433360745f69edddce19a606659163The Android Open Source Project{
51864064216a8433360745f69edddce19a606659163The Android Open Source Project    whalCtrl_roamingTriggerCmd_t roamingTriggersParams;
51964064216a8433360745f69edddce19a606659163The Android Open Source Project
52064064216a8433360745f69edddce19a606659163The Android Open Source Project    /* In Ad-Hoc we use default parameter */
52164064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pCurrBSS->type == BSS_INDEPENDENT)
52264064216a8433360745f69edddce19a606659163The Android Open Source Project    {
52364064216a8433360745f69edddce19a606659163The Android Open Source Project       roamingTriggersParams.TsfMissThreshold = OUT_OF_SYNC_IBSS_THRESHOLD;
52464064216a8433360745f69edddce19a606659163The Android Open Source Project    }
52564064216a8433360745f69edddce19a606659163The Android Open Source Project    else /* In Infra we use the saved parameter */
52664064216a8433360745f69edddce19a606659163The Android Open Source Project    {
52764064216a8433360745f69edddce19a606659163The Android Open Source Project        roamingTriggersParams.TsfMissThreshold = pCurrBSS->numExpectedTbttForBSSLoss;
52864064216a8433360745f69edddce19a606659163The Android Open Source Project    }
52964064216a8433360745f69edddce19a606659163The Android Open Source Project
53064064216a8433360745f69edddce19a606659163The Android Open Source Project    roamingTriggersParams.BssLossTimeout = NO_BEACON_DEFAULT_TIMEOUT;
53164064216a8433360745f69edddce19a606659163The Android Open Source Project
53264064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_REPORT_INFORMATION(pCurrBSS->hReport, ROAMING_MANAGER_MODULE_LOG,("CurrBSS: SG=%d, Band=%d\n",
53364064216a8433360745f69edddce19a606659163The Android Open Source Project																		   pCurrBSS->bUseSGParams,
53464064216a8433360745f69edddce19a606659163The Android Open Source Project																		   pCurrBSS->currAPInfo.band));
53564064216a8433360745f69edddce19a606659163The Android Open Source Project    /* if Soft Gemini is enabled - increase the BSSLoss value (because BT activity might over-run beacons) */
53664064216a8433360745f69edddce19a606659163The Android Open Source Project    if ((pCurrBSS->bUseSGParams) && (pCurrBSS->currAPInfo.band == RADIO_BAND_2_4_GHZ))
53764064216a8433360745f69edddce19a606659163The Android Open Source Project    {
53864064216a8433360745f69edddce19a606659163The Android Open Source Project        roamingTriggersParams.TsfMissThreshold = (roamingTriggersParams.TsfMissThreshold *
53964064216a8433360745f69edddce19a606659163The Android Open Source Project            (100 + pCurrBSS->SGcompensationPercent)) / 100;
54064064216a8433360745f69edddce19a606659163The Android Open Source Project
54164064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_INFORMATION(pCurrBSS->hReport, ROAMING_MANAGER_MODULE_LOG,
54264064216a8433360745f69edddce19a606659163The Android Open Source Project            ("%s: old value = %d, new value (for SG compensation) = %d\n", __FUNCTION__,
54364064216a8433360745f69edddce19a606659163The Android Open Source Project            pCurrBSS->numExpectedTbttForBSSLoss,roamingTriggersParams.TsfMissThreshold));
54464064216a8433360745f69edddce19a606659163The Android Open Source Project    }
54564064216a8433360745f69edddce19a606659163The Android Open Source Project    whalCtrl_SetBssLossTsfThresholdParamsCmd(pCurrBSS->hHal, &roamingTriggersParams);
54664064216a8433360745f69edddce19a606659163The Android Open Source Project}
54764064216a8433360745f69edddce19a606659163The Android Open Source Project
54864064216a8433360745f69edddce19a606659163The Android Open Source Project/**
54964064216a8433360745f69edddce19a606659163The Android Open Source Project*
55064064216a8433360745f69edddce19a606659163The Android Open Source Project* currBSS_swChFinished
55164064216a8433360745f69edddce19a606659163The Android Open Source Project*
55264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
55364064216a8433360745f69edddce19a606659163The Android Open Source Project*
55464064216a8433360745f69edddce19a606659163The Android Open Source Project* Called when switch channel process is complete in order to reset RSSI calculations
55564064216a8433360745f69edddce19a606659163The Android Open Source Project*
55664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
55764064216a8433360745f69edddce19a606659163The Android Open Source Project*
55864064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hCurrBSS - Current BSS handle \n
55964064216a8433360745f69edddce19a606659163The Android Open Source Project*
56064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
56164064216a8433360745f69edddce19a606659163The Android Open Source Project*
56264064216a8433360745f69edddce19a606659163The Android Open Source Project*  -
56364064216a8433360745f69edddce19a606659163The Android Open Source Project*
56464064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
56564064216a8433360745f69edddce19a606659163The Android Open Source Project*/
56664064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid currBSS_restartRssiCounting(TI_HANDLE hCurrBSS)
56764064216a8433360745f69edddce19a606659163The Android Open Source Project{
56864064216a8433360745f69edddce19a606659163The Android Open Source Project    currBSS_t   *pCurrBSS = (currBSS_t *)hCurrBSS;
56964064216a8433360745f69edddce19a606659163The Android Open Source Project
57064064216a8433360745f69edddce19a606659163The Android Open Source Project    pCurrBSS->averageRssi = 0;
57164064216a8433360745f69edddce19a606659163The Android Open Source Project    pCurrBSS->currAPInfo.RSSI = 0;
57264064216a8433360745f69edddce19a606659163The Android Open Source Project}
57364064216a8433360745f69edddce19a606659163The Android Open Source Project
57464064216a8433360745f69edddce19a606659163The Android Open Source Project/**
57564064216a8433360745f69edddce19a606659163The Android Open Source Project*
57664064216a8433360745f69edddce19a606659163The Android Open Source Project* currBSS_getBssInfo
57764064216a8433360745f69edddce19a606659163The Android Open Source Project*
57864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
57964064216a8433360745f69edddce19a606659163The Android Open Source Project*
58064064216a8433360745f69edddce19a606659163The Android Open Source Project* Get parameter of Current BSS
58164064216a8433360745f69edddce19a606659163The Android Open Source Project*
58264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
58364064216a8433360745f69edddce19a606659163The Android Open Source Project*
58464064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hCurrBSS - Current BSS handle \n
58564064216a8433360745f69edddce19a606659163The Android Open Source Project*
58664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
58764064216a8433360745f69edddce19a606659163The Android Open Source Project*
58864064216a8433360745f69edddce19a606659163The Android Open Source Project*  pointer to current BSS info block.
58964064216a8433360745f69edddce19a606659163The Android Open Source Project*
59064064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
59164064216a8433360745f69edddce19a606659163The Android Open Source Project*/
59264064216a8433360745f69edddce19a606659163The Android Open Source ProjectbssEntry_t *currBSS_getBssInfo(TI_HANDLE hCurrBSS)
59364064216a8433360745f69edddce19a606659163The Android Open Source Project{
59464064216a8433360745f69edddce19a606659163The Android Open Source Project    currBSS_t   *pCurrBSS = (currBSS_t *)hCurrBSS;
59564064216a8433360745f69edddce19a606659163The Android Open Source Project
59664064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Return pointer to current AP info */
59764064216a8433360745f69edddce19a606659163The Android Open Source Project    return &(pCurrBSS->currAPInfo);
59864064216a8433360745f69edddce19a606659163The Android Open Source Project}
59964064216a8433360745f69edddce19a606659163The Android Open Source Project
60064064216a8433360745f69edddce19a606659163The Android Open Source Project
60164064216a8433360745f69edddce19a606659163The Android Open Source Project/**
60264064216a8433360745f69edddce19a606659163The Android Open Source Project*
60364064216a8433360745f69edddce19a606659163The Android Open Source Project* currBSS_probRespReceivedCallb
60464064216a8433360745f69edddce19a606659163The Android Open Source Project*
60564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
60664064216a8433360745f69edddce19a606659163The Android Open Source Project*
60764064216a8433360745f69edddce19a606659163The Android Open Source Project* Callback function, provided to MLME module. Called each time Probe response received.
60864064216a8433360745f69edddce19a606659163The Android Open Source Project* This function verifies that the Probe response was sent by current AP, and then
60964064216a8433360745f69edddce19a606659163The Android Open Source Project* updates current AP database.
61064064216a8433360745f69edddce19a606659163The Android Open Source Project*
61164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
61264064216a8433360745f69edddce19a606659163The Android Open Source Project*
61364064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hCurrBSS - Current BSS handle \n
61464064216a8433360745f69edddce19a606659163The Android Open Source Project*
61564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
61664064216a8433360745f69edddce19a606659163The Android Open Source Project*
61764064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK on failure.
61864064216a8433360745f69edddce19a606659163The Android Open Source Project*
61964064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
62064064216a8433360745f69edddce19a606659163The Android Open Source Project*/
62164064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS currBSS_probRespReceivedCallb(TI_HANDLE hCurrBSS,
62264064216a8433360745f69edddce19a606659163The Android Open Source Project                                        Rx_attr_t *pRxAttr,
62364064216a8433360745f69edddce19a606659163The Android Open Source Project                                        macAddress_t *bssid,
62464064216a8433360745f69edddce19a606659163The Android Open Source Project                                        mlmeFrameInfo_t *pFrameInfo,
62564064216a8433360745f69edddce19a606659163The Android Open Source Project                                        char *dataBuffer,
62664064216a8433360745f69edddce19a606659163The Android Open Source Project                                        UINT16 bufLength)
62764064216a8433360745f69edddce19a606659163The Android Open Source Project{
62864064216a8433360745f69edddce19a606659163The Android Open Source Project    currBSS_t   *pCurrBSS = (currBSS_t *)hCurrBSS;
62964064216a8433360745f69edddce19a606659163The Android Open Source Project    paramInfo_t param;
63064064216a8433360745f69edddce19a606659163The Android Open Source Project
63164064216a8433360745f69edddce19a606659163The Android Open Source Project    param.paramType = SITE_MGR_CURRENT_BSSID_PARAM;
63264064216a8433360745f69edddce19a606659163The Android Open Source Project    siteMgr_getParam(pCurrBSS->hSiteMgr, &param);
63364064216a8433360745f69edddce19a606659163The Android Open Source Project
63464064216a8433360745f69edddce19a606659163The Android Open Source Project    if ((pCurrBSS->isConnected) && (MAC_EQUAL((&(param.content.siteMgrDesiredBSSID)), (bssid))))
63564064216a8433360745f69edddce19a606659163The Android Open Source Project    {
63664064216a8433360745f69edddce19a606659163The Android Open Source Project            /* If this is first probe response since FW reported 'Out of sync' situation,
63764064216a8433360745f69edddce19a606659163The Android Open Source Project               then we were trying to revive connection, now stop sending probe requests */
63864064216a8433360745f69edddce19a606659163The Android Open Source Project        currBSS_terminateOutOfSyncMode(pCurrBSS);
63964064216a8433360745f69edddce19a606659163The Android Open Source Project
64064064216a8433360745f69edddce19a606659163The Android Open Source Project        siteMgr_updateSite(pCurrBSS->hSiteMgr, bssid, pFrameInfo, pRxAttr->channel, (radioBand_e)pRxAttr->band, FALSE);
64164064216a8433360745f69edddce19a606659163The Android Open Source Project        /* Save the IE part of the Probe Response buffer in the site table */
64264064216a8433360745f69edddce19a606659163The Android Open Source Project        siteMgr_saveProbeRespBuffer(pCurrBSS->hSiteMgr, bssid, (UINT8 *)dataBuffer, bufLength);
64364064216a8433360745f69edddce19a606659163The Android Open Source Project    }
64464064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
64564064216a8433360745f69edddce19a606659163The Android Open Source Project}
64664064216a8433360745f69edddce19a606659163The Android Open Source Project
64764064216a8433360745f69edddce19a606659163The Android Open Source Project
64864064216a8433360745f69edddce19a606659163The Android Open Source Project
64964064216a8433360745f69edddce19a606659163The Android Open Source Project/**
65064064216a8433360745f69edddce19a606659163The Android Open Source Project*
65164064216a8433360745f69edddce19a606659163The Android Open Source Project* currBSS_beaconReceivedCallb
65264064216a8433360745f69edddce19a606659163The Android Open Source Project*
65364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
65464064216a8433360745f69edddce19a606659163The Android Open Source Project*
65564064216a8433360745f69edddce19a606659163The Android Open Source Project* Callback function, provided to MLME module. Called each time Beacon received.
65664064216a8433360745f69edddce19a606659163The Android Open Source Project* This function verifies that the Probe response was sent by current AP, and then
65764064216a8433360745f69edddce19a606659163The Android Open Source Project* updates current AP database.
65864064216a8433360745f69edddce19a606659163The Android Open Source Project*
65964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
66064064216a8433360745f69edddce19a606659163The Android Open Source Project*
66164064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hCurrBSS - Current BSS handle \n
66264064216a8433360745f69edddce19a606659163The Android Open Source Project*
66364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
66464064216a8433360745f69edddce19a606659163The Android Open Source Project*
66564064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK on failure.
66664064216a8433360745f69edddce19a606659163The Android Open Source Project*
66764064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
66864064216a8433360745f69edddce19a606659163The Android Open Source Project*/
66964064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS currBSS_beaconReceivedCallb(TI_HANDLE hCurrBSS,
67064064216a8433360745f69edddce19a606659163The Android Open Source Project                                      Rx_attr_t *pRxAttr,
67164064216a8433360745f69edddce19a606659163The Android Open Source Project                                      macAddress_t *bssid,
67264064216a8433360745f69edddce19a606659163The Android Open Source Project                                      mlmeFrameInfo_t *pFrameInfo,
67364064216a8433360745f69edddce19a606659163The Android Open Source Project                                      char *dataBuffer,
67464064216a8433360745f69edddce19a606659163The Android Open Source Project                                      UINT16 bufLength)
67564064216a8433360745f69edddce19a606659163The Android Open Source Project{
67664064216a8433360745f69edddce19a606659163The Android Open Source Project    currBSS_t   *pCurrBSS = (currBSS_t *)hCurrBSS;
67764064216a8433360745f69edddce19a606659163The Android Open Source Project    paramInfo_t param;
67864064216a8433360745f69edddce19a606659163The Android Open Source Project    param.paramType = SITE_MGR_CURRENT_BSSID_PARAM;
67964064216a8433360745f69edddce19a606659163The Android Open Source Project    siteMgr_getParam(pCurrBSS->hSiteMgr, &param);
68064064216a8433360745f69edddce19a606659163The Android Open Source Project
68164064216a8433360745f69edddce19a606659163The Android Open Source Project    if ((pCurrBSS->isConnected) && (MAC_EQUAL((&(param.content.siteMgrDesiredBSSID)), (bssid))))
68264064216a8433360745f69edddce19a606659163The Android Open Source Project    {
68364064216a8433360745f69edddce19a606659163The Android Open Source Project        /* If this is first beacon since FW reported 'Out of sync' situation,
68464064216a8433360745f69edddce19a606659163The Android Open Source Project           then we were trying to revive connection, now stop sending probe requests */
68564064216a8433360745f69edddce19a606659163The Android Open Source Project        currBSS_terminateOutOfSyncMode(pCurrBSS);
68664064216a8433360745f69edddce19a606659163The Android Open Source Project
68764064216a8433360745f69edddce19a606659163The Android Open Source Project        siteMgr_updateSite(pCurrBSS->hSiteMgr, bssid, pFrameInfo, pRxAttr->channel, (radioBand_e)pRxAttr->band, FALSE);
68864064216a8433360745f69edddce19a606659163The Android Open Source Project        /* Save the IE part of the beacon buffer in the site table */
68964064216a8433360745f69edddce19a606659163The Android Open Source Project        siteMgr_saveBeaconBuffer(pCurrBSS->hSiteMgr, bssid, (UINT8 *)dataBuffer, bufLength);
69064064216a8433360745f69edddce19a606659163The Android Open Source Project
69164064216a8433360745f69edddce19a606659163The Android Open Source Project        currBSS_updateRxSignal(hCurrBSS, pRxAttr->SNR, pRxAttr->Rssi, FALSE);
69264064216a8433360745f69edddce19a606659163The Android Open Source Project    }
69364064216a8433360745f69edddce19a606659163The Android Open Source Project
69464064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
69564064216a8433360745f69edddce19a606659163The Android Open Source Project}
69664064216a8433360745f69edddce19a606659163The Android Open Source Project
69764064216a8433360745f69edddce19a606659163The Android Open Source Project
69864064216a8433360745f69edddce19a606659163The Android Open Source Project
69964064216a8433360745f69edddce19a606659163The Android Open Source Project/**
70064064216a8433360745f69edddce19a606659163The Android Open Source Project*
70164064216a8433360745f69edddce19a606659163The Android Open Source Project* currBSS_performRecovery
70264064216a8433360745f69edddce19a606659163The Android Open Source Project*
70364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
70464064216a8433360745f69edddce19a606659163The Android Open Source Project*
70564064216a8433360745f69edddce19a606659163The Android Open Source Project* This function is called when FW recovery performed.
70664064216a8433360745f69edddce19a606659163The Android Open Source Project*
70764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
70864064216a8433360745f69edddce19a606659163The Android Open Source Project*
70964064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hCurrBSS - Current BSS handle \n
71064064216a8433360745f69edddce19a606659163The Android Open Source Project*
71164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
71264064216a8433360745f69edddce19a606659163The Android Open Source Project*
71364064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK on failure.
71464064216a8433360745f69edddce19a606659163The Android Open Source Project*
71564064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
71664064216a8433360745f69edddce19a606659163The Android Open Source Project*/
71764064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS currBSS_performRecovery(TI_HANDLE hCurrBSS)
71864064216a8433360745f69edddce19a606659163The Android Open Source Project{
71964064216a8433360745f69edddce19a606659163The Android Open Source Project    currBSS_terminateOutOfSyncMode(hCurrBSS);
72064064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
72164064216a8433360745f69edddce19a606659163The Android Open Source Project}
72264064216a8433360745f69edddce19a606659163The Android Open Source Project
72364064216a8433360745f69edddce19a606659163The Android Open Source Project
72464064216a8433360745f69edddce19a606659163The Android Open Source Project/**
72564064216a8433360745f69edddce19a606659163The Android Open Source Project*
72664064216a8433360745f69edddce19a606659163The Android Open Source Project* currBSS_updateConnectedState
72764064216a8433360745f69edddce19a606659163The Android Open Source Project*
72864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
72964064216a8433360745f69edddce19a606659163The Android Open Source Project*
73064064216a8433360745f69edddce19a606659163The Android Open Source Project* This function is called when FW recovery performed.
73164064216a8433360745f69edddce19a606659163The Android Open Source Project*
73264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
73364064216a8433360745f69edddce19a606659163The Android Open Source Project*
73464064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hCurrBSS - Current BSS handle \n
73564064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - isConnected - TRUE or FALSE \n
73664064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - type - IBSS or EBSS \n
73764064216a8433360745f69edddce19a606659163The Android Open Source Project*
73864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
73964064216a8433360745f69edddce19a606659163The Android Open Source Project*
74064064216a8433360745f69edddce19a606659163The Android Open Source Project*  -
74164064216a8433360745f69edddce19a606659163The Android Open Source Project*
74264064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
74364064216a8433360745f69edddce19a606659163The Android Open Source Project*/
74464064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid currBSS_updateConnectedState(TI_HANDLE hCurrBSS, BOOLEAN isConnected, bssType_e type)
74564064216a8433360745f69edddce19a606659163The Android Open Source Project{
74664064216a8433360745f69edddce19a606659163The Android Open Source Project    currBSS_t   *pCurrBSS = (currBSS_t *)hCurrBSS;
74764064216a8433360745f69edddce19a606659163The Android Open Source Project    paramInfo_t param;
74864064216a8433360745f69edddce19a606659163The Android Open Source Project    pCurrBSS->type = type;
74964064216a8433360745f69edddce19a606659163The Android Open Source Project    pCurrBSS->isConnected = isConnected;
75064064216a8433360745f69edddce19a606659163The Android Open Source Project
75164064216a8433360745f69edddce19a606659163The Android Open Source Project    /* If new connection established or roaming started, as well as
75264064216a8433360745f69edddce19a606659163The Android Open Source Project       in case of disconnect, the event 'Out of sync' from FW is
75364064216a8433360745f69edddce19a606659163The Android Open Source Project       no more relevant, do not proceed with it's handling */
75464064216a8433360745f69edddce19a606659163The Android Open Source Project    currBSS_terminateOutOfSyncMode(pCurrBSS);
75564064216a8433360745f69edddce19a606659163The Android Open Source Project    pCurrBSS->averageRssi = pCurrBSS->currAPInfo.RSSI;
75664064216a8433360745f69edddce19a606659163The Android Open Source Project
75764064216a8433360745f69edddce19a606659163The Android Open Source Project    if (isConnected)
75864064216a8433360745f69edddce19a606659163The Android Open Source Project    {
75964064216a8433360745f69edddce19a606659163The Android Open Source Project        /*** Store the info of current AP ***/
76064064216a8433360745f69edddce19a606659163The Android Open Source Project
76164064216a8433360745f69edddce19a606659163The Android Open Source Project        /* BSSID */
76264064216a8433360745f69edddce19a606659163The Android Open Source Project        param.paramType = SITE_MGR_CURRENT_BSSID_PARAM;
76364064216a8433360745f69edddce19a606659163The Android Open Source Project        siteMgr_getParam(pCurrBSS->hSiteMgr, &param);
76464064216a8433360745f69edddce19a606659163The Android Open Source Project        os_memoryCopy(pCurrBSS->hOs, (void *)pCurrBSS->currAPInfo.BSSID.addr, (void *)param.content.siteMgrDesiredBSSID.addr, MAC_ADDR_LEN);
76564064216a8433360745f69edddce19a606659163The Android Open Source Project
76664064216a8433360745f69edddce19a606659163The Android Open Source Project        /* Rx rate */
76764064216a8433360745f69edddce19a606659163The Android Open Source Project        param.paramType = SITE_MGR_LAST_RX_RATE_PARAM;
76864064216a8433360745f69edddce19a606659163The Android Open Source Project        siteMgr_getParam(pCurrBSS->hSiteMgr, &param);
76964064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->currAPInfo.rxRate = param.content.ctrlDataCurrentBasicRate;
77064064216a8433360745f69edddce19a606659163The Android Open Source Project
77164064216a8433360745f69edddce19a606659163The Android Open Source Project        /* Band */
77264064216a8433360745f69edddce19a606659163The Android Open Source Project        param.paramType = SITE_MGR_RADIO_BAND_PARAM;
77364064216a8433360745f69edddce19a606659163The Android Open Source Project        siteMgr_getParam(pCurrBSS->hSiteMgr, &param);
77464064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->currAPInfo.band = param.content.siteMgrRadioBand;
77564064216a8433360745f69edddce19a606659163The Android Open Source Project
77664064216a8433360745f69edddce19a606659163The Android Open Source Project        /* Channel */
77764064216a8433360745f69edddce19a606659163The Android Open Source Project        param.paramType = SITE_MGR_CURRENT_CHANNEL_PARAM;
77864064216a8433360745f69edddce19a606659163The Android Open Source Project        siteMgr_getParam(pCurrBSS->hSiteMgr, &param);
77964064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->currAPInfo.channel = param.content.siteMgrCurrentChannel;
78064064216a8433360745f69edddce19a606659163The Android Open Source Project
78164064216a8433360745f69edddce19a606659163The Android Open Source Project        /* Last Rx Tsf */
78264064216a8433360745f69edddce19a606659163The Android Open Source Project        param.paramType = SITE_MGR_CURRENT_TSF_TIME_STAMP;
78364064216a8433360745f69edddce19a606659163The Android Open Source Project        siteMgr_getParam(pCurrBSS->hSiteMgr, &param);
78464064216a8433360745f69edddce19a606659163The Android Open Source Project        os_memoryCopy(pCurrBSS->hOs, &pCurrBSS->currAPInfo.lastRxTSF,
78564064216a8433360745f69edddce19a606659163The Android Open Source Project                      param.content.siteMgrCurrentTsfTimeStamp, sizeof(pCurrBSS->currAPInfo.lastRxTSF));
78664064216a8433360745f69edddce19a606659163The Android Open Source Project
78764064216a8433360745f69edddce19a606659163The Android Open Source Project        /* Beacon interval */
78864064216a8433360745f69edddce19a606659163The Android Open Source Project        param.paramType = SITE_MGR_BEACON_INTERVAL_PARAM;
78964064216a8433360745f69edddce19a606659163The Android Open Source Project        siteMgr_getParam(pCurrBSS->hSiteMgr, &param);
79064064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->currAPInfo.beaconInterval = param.content.beaconInterval;
79164064216a8433360745f69edddce19a606659163The Android Open Source Project
79264064216a8433360745f69edddce19a606659163The Android Open Source Project        /* Capability */
79364064216a8433360745f69edddce19a606659163The Android Open Source Project        param.paramType = SITE_MGR_SITE_CAPABILITY_PARAM;
79464064216a8433360745f69edddce19a606659163The Android Open Source Project        siteMgr_getParam(pCurrBSS->hSiteMgr,&param);
79564064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->currAPInfo.capabilities = param.content.siteMgrSiteCapability;
79664064216a8433360745f69edddce19a606659163The Android Open Source Project        param.paramType = SITE_MGR_CURRENT_TSF_TIME_STAMP;
79764064216a8433360745f69edddce19a606659163The Android Open Source Project        siteMgr_getParam(pCurrBSS->hSiteMgr, &param);
79864064216a8433360745f69edddce19a606659163The Android Open Source Project
79964064216a8433360745f69edddce19a606659163The Android Open Source Project        /* pCurrBSS->currAPInfo.lastRxHostTimestamp = *((UINT64 *)(pIEs->TimeStamp));*/ /* TBD*/
80064064216a8433360745f69edddce19a606659163The Android Open Source Project        os_memoryCopy(pCurrBSS->hOs, &pCurrBSS->currAPInfo.lastRxHostTimestamp, param.content.siteMgrCurrentTsfTimeStamp, sizeof(UINT32));
80164064216a8433360745f69edddce19a606659163The Android Open Source Project
80264064216a8433360745f69edddce19a606659163The Android Open Source Project        param.paramType = SITE_MGR_LAST_BEACON_BUF_PARAM;
80364064216a8433360745f69edddce19a606659163The Android Open Source Project        siteMgr_getParam(pCurrBSS->hSiteMgr, &param);
80464064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->currAPInfo.pBuffer = param.content.siteMgrLastBeacon.buffer;
80564064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->currAPInfo.bufferLength = param.content.siteMgrLastBeacon.bufLength;
80664064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->currAPInfo.resultType = (param.content.siteMgrLastBeacon.isBeacon) ? SCAN_RFT_BEACON : SCAN_RFT_PROBE_RESPONSE;
80764064216a8433360745f69edddce19a606659163The Android Open Source Project
80864064216a8433360745f69edddce19a606659163The Android Open Source Project        /* Set BSS Loss to Fw - note that it depends on the Connection type - (Infa/IBSS) */
80964064216a8433360745f69edddce19a606659163The Android Open Source Project        currBSS_updateBSSLoss(pCurrBSS);
81064064216a8433360745f69edddce19a606659163The Android Open Source Project
81164064216a8433360745f69edddce19a606659163The Android Open Source Project        /*
81264064216a8433360745f69edddce19a606659163The Android Open Source Project        this section is for the first beacon. in here we set the flag for waiting for
81364064216a8433360745f69edddce19a606659163The Android Open Source Project        the first beacon and during all this time we must keep the Hw awake
81464064216a8433360745f69edddce19a606659163The Android Open Source Project        this things are done only for INFRA connection.
81564064216a8433360745f69edddce19a606659163The Android Open Source Project        */
81664064216a8433360745f69edddce19a606659163The Android Open Source Project        if(type == BSS_INFRASTRUCTURE)
81764064216a8433360745f69edddce19a606659163The Android Open Source Project        {
81864064216a8433360745f69edddce19a606659163The Android Open Source Project                siteMgr_clearFirstBcnFlag(pCurrBSS->hSiteMgr);
81964064216a8433360745f69edddce19a606659163The Android Open Source Project        }
82064064216a8433360745f69edddce19a606659163The Android Open Source Project    }
82164064216a8433360745f69edddce19a606659163The Android Open Source Project    else
82264064216a8433360745f69edddce19a606659163The Android Open Source Project    {
82364064216a8433360745f69edddce19a606659163The Android Open Source Project        /*
82464064216a8433360745f69edddce19a606659163The Android Open Source Project        this section is for the first beacon. in here we cancel the setting of the flag
82564064216a8433360745f69edddce19a606659163The Android Open Source Project        and the Hw available in case that the connection was closed.
82664064216a8433360745f69edddce19a606659163The Android Open Source Project        this things are done only for INFRA connection.
82764064216a8433360745f69edddce19a606659163The Android Open Source Project        */
82864064216a8433360745f69edddce19a606659163The Android Open Source Project        if(type == BSS_INFRASTRUCTURE)
82964064216a8433360745f69edddce19a606659163The Android Open Source Project            siteMgr_setFirstBcnFlag(pCurrBSS->hSiteMgr);
83064064216a8433360745f69edddce19a606659163The Android Open Source Project
83164064216a8433360745f69edddce19a606659163The Android Open Source Project    }
83264064216a8433360745f69edddce19a606659163The Android Open Source Project}
83364064216a8433360745f69edddce19a606659163The Android Open Source Project
83464064216a8433360745f69edddce19a606659163The Android Open Source Project/* Internal functions implementation */
83564064216a8433360745f69edddce19a606659163The Android Open Source Project
83664064216a8433360745f69edddce19a606659163The Android Open Source Project
83764064216a8433360745f69edddce19a606659163The Android Open Source Project/**
83864064216a8433360745f69edddce19a606659163The Android Open Source Project*
83964064216a8433360745f69edddce19a606659163The Android Open Source Project* currBSS_outOfSync
84064064216a8433360745f69edddce19a606659163The Android Open Source Project*
84164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
84264064216a8433360745f69edddce19a606659163The Android Open Source Project*
84364064216a8433360745f69edddce19a606659163The Android Open Source Project* Callback function, provided to HAL module.
84464064216a8433360745f69edddce19a606659163The Android Open Source Project*
84564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
84664064216a8433360745f69edddce19a606659163The Android Open Source Project*
84764064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hCurrBSS - Current BSS handle \n
84864064216a8433360745f69edddce19a606659163The Android Open Source Project*
84964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
85064064216a8433360745f69edddce19a606659163The Android Open Source Project*
85164064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK on failure.
85264064216a8433360745f69edddce19a606659163The Android Open Source Project*
85364064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
85464064216a8433360745f69edddce19a606659163The Android Open Source Project*/
85564064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void currBSS_outOfSync(currBSS_t *hCurrBSS,
85664064216a8433360745f69edddce19a606659163The Android Open Source Project                              UINT8     *data,
85764064216a8433360745f69edddce19a606659163The Android Open Source Project                              UINT8     dataLength)
85864064216a8433360745f69edddce19a606659163The Android Open Source Project{
85964064216a8433360745f69edddce19a606659163The Android Open Source Project    currBSS_t   *pCurrBSS = (currBSS_t *)hCurrBSS;
86064064216a8433360745f69edddce19a606659163The Android Open Source Project    /*while syn with current BSS is lost, we need beacons to resynchronize*/
86164064216a8433360745f69edddce19a606659163The Android Open Source Project
86264064216a8433360745f69edddce19a606659163The Android Open Source Project    /* If connected, and this kind of event was not received yet, handle it */
86364064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pCurrBSS->isConnected &&
86464064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->fwIsOutOfSync == FALSE &&
86564064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->type != BSS_INDEPENDENT)
86664064216a8433360745f69edddce19a606659163The Android Open Source Project    {
86764064216a8433360745f69edddce19a606659163The Android Open Source Project
86864064216a8433360745f69edddce19a606659163The Android Open Source Project        /* TBD IBSS configuration; no roaming enabled, report SME */
86964064216a8433360745f69edddce19a606659163The Android Open Source Project
87064064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->fwIsOutOfSync = TRUE;
87164064216a8433360745f69edddce19a606659163The Android Open Source Project
87264064216a8433360745f69edddce19a606659163The Android Open Source Project        /* force TNETW to active */
87364064216a8433360745f69edddce19a606659163The Android Open Source Project        MacServices_powerAutho_AwakeRequiredUpdate(pCurrBSS->hMacServices, POWERAUTHO_AWAKE_REQUIRED, POWERAUTHO_AWAKE_REASON_OUT_OS_SYNC);
87464064216a8433360745f69edddce19a606659163The Android Open Source Project
87564064216a8433360745f69edddce19a606659163The Android Open Source Project        /* try to send Unicast Probe requests */
87664064216a8433360745f69edddce19a606659163The Android Open Source Project        currBSS_reviveConnection(pCurrBSS);
87764064216a8433360745f69edddce19a606659163The Android Open Source Project
87864064216a8433360745f69edddce19a606659163The Android Open Source Project    }
87964064216a8433360745f69edddce19a606659163The Android Open Source Project    else
88064064216a8433360745f69edddce19a606659163The Android Open Source Project    {
88164064216a8433360745f69edddce19a606659163The Android Open Source Project    /*  If no connection,
88264064216a8433360745f69edddce19a606659163The Android Open Source Project        or in the middle of roaming,
88364064216a8433360745f69edddce19a606659163The Android Open Source Project        or this kind of event was already received, - do nothing */
88464064216a8433360745f69edddce19a606659163The Android Open Source Project    }
88564064216a8433360745f69edddce19a606659163The Android Open Source Project}
88664064216a8433360745f69edddce19a606659163The Android Open Source Project
88764064216a8433360745f69edddce19a606659163The Android Open Source Project
88864064216a8433360745f69edddce19a606659163The Android Open Source Project
88964064216a8433360745f69edddce19a606659163The Android Open Source Project/**
89064064216a8433360745f69edddce19a606659163The Android Open Source Project*
89164064216a8433360745f69edddce19a606659163The Android Open Source Project* currBSS_reviveConnection
89264064216a8433360745f69edddce19a606659163The Android Open Source Project*
89364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
89464064216a8433360745f69edddce19a606659163The Android Open Source Project*
89564064216a8433360745f69edddce19a606659163The Android Open Source Project* Called when FW indicates "Beacon missed" problem ('Out of sync' event).
89664064216a8433360745f69edddce19a606659163The Android Open Source Project* This function makes sure that FW is not asleep (the radio is awake), and
89764064216a8433360745f69edddce19a606659163The Android Open Source Project* sends Unicast Probe Request packet in order to provoke AP to answer with
89864064216a8433360745f69edddce19a606659163The Android Open Source Project* Probe response.
89964064216a8433360745f69edddce19a606659163The Android Open Source Project* If HW interface is available (normal case), called immediately upon reception
90064064216a8433360745f69edddce19a606659163The Android Open Source Project* of the event from FW. Otherwise, this function is a function, provided to Power control.
90164064216a8433360745f69edddce19a606659163The Android Open Source Project* Called by Power control module in several cases:
90264064216a8433360745f69edddce19a606659163The Android Open Source Project* - when Power control exits pending and informs registered clients about HW availability;
90364064216a8433360745f69edddce19a606659163The Android Open Source Project* - when FW recovery occurs - timeout waiting for FW to wakeup
90464064216a8433360745f69edddce19a606659163The Android Open Source Project*
90564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
90664064216a8433360745f69edddce19a606659163The Android Open Source Project*
90764064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hCurrBSS - Current BSS handle \n
90864064216a8433360745f69edddce19a606659163The Android Open Source Project*
90964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
91064064216a8433360745f69edddce19a606659163The Android Open Source Project*
91164064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK on failure.
91264064216a8433360745f69edddce19a606659163The Android Open Source Project*
91364064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
91464064216a8433360745f69edddce19a606659163The Android Open Source Project*/
91564064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void currBSS_reviveConnection(currBSS_t *pCurrBSS)
91664064216a8433360745f69edddce19a606659163The Android Open Source Project{
91764064216a8433360745f69edddce19a606659163The Android Open Source Project    int pktsCount;
91864064216a8433360745f69edddce19a606659163The Android Open Source Project
91964064216a8433360745f69edddce19a606659163The Android Open Source Project    /* TBD Turn ON LNA if the current state is OFF */
92064064216a8433360745f69edddce19a606659163The Android Open Source Project
92164064216a8433360745f69edddce19a606659163The Android Open Source Project#if 0
92264064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Perform MAC RX module reset. */
92364064216a8433360745f69edddce19a606659163The Android Open Source Project    /* For the moment we don't think the Rx Reset is nessasery */
92464064216a8433360745f69edddce19a606659163The Android Open Source Project    whalCtrl_resetMacRx(pCurrBSS->hHal);
92564064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
92664064216a8433360745f69edddce19a606659163The Android Open Source Project
92764064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION(pCurrBSS->hReport, ROAMING_MANAGER_MODULE_LOG,("currBSS_reviveConnection: sending %d Probe requests\n", pCurrBSS->numOfPktsInRevivalTest));
92864064216a8433360745f69edddce19a606659163The Android Open Source Project
92964064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Test connection with Unicast Probe request */
93064064216a8433360745f69edddce19a606659163The Android Open Source Project    for (pktsCount = pCurrBSS->numOfPktsInRevivalTest; pktsCount > 0; pktsCount--)
93164064216a8433360745f69edddce19a606659163The Android Open Source Project    {
93264064216a8433360745f69edddce19a606659163The Android Open Source Project        currBSS_sendUnicastProbeRequest(pCurrBSS);
93364064216a8433360745f69edddce19a606659163The Android Open Source Project    }
93464064216a8433360745f69edddce19a606659163The Android Open Source Project}
93564064216a8433360745f69edddce19a606659163The Android Open Source Project
93664064216a8433360745f69edddce19a606659163The Android Open Source Project
93764064216a8433360745f69edddce19a606659163The Android Open Source Project/**
93864064216a8433360745f69edddce19a606659163The Android Open Source Project*
93964064216a8433360745f69edddce19a606659163The Android Open Source Project* currBSS_sendUnicastProbeRequest
94064064216a8433360745f69edddce19a606659163The Android Open Source Project*
94164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
94264064216a8433360745f69edddce19a606659163The Android Open Source Project*
94364064216a8433360745f69edddce19a606659163The Android Open Source Project* This function creaes and sends Unicast Probe request packet to current AP
94464064216a8433360745f69edddce19a606659163The Android Open Source Project*
94564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
94664064216a8433360745f69edddce19a606659163The Android Open Source Project*
94764064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - pCurrBSS - Current BSS handle \n
94864064216a8433360745f69edddce19a606659163The Android Open Source Project*
94964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
95064064216a8433360745f69edddce19a606659163The Android Open Source Project*
95164064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK on failure.
95264064216a8433360745f69edddce19a606659163The Android Open Source Project*
95364064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
95464064216a8433360745f69edddce19a606659163The Android Open Source Project*/
95564064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void currBSS_sendUnicastProbeRequest(currBSS_t *pCurrBSS)
95664064216a8433360745f69edddce19a606659163The Android Open Source Project{
95764064216a8433360745f69edddce19a606659163The Android Open Source Project    paramInfo_t             param;
95864064216a8433360745f69edddce19a606659163The Android Open Source Project    mem_MSDU_T              *pMsdu;
95964064216a8433360745f69edddce19a606659163The Android Open Source Project    probeReqTemplate_t      *pProbeReqTemplate;
96064064216a8433360745f69edddce19a606659163The Android Open Source Project    whalCtrl_setTemplate_t  templateStruct;
96164064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_STATUS               status;
96264064216a8433360745f69edddce19a606659163The Android Open Source Project	radioBand_e				eRadioBand;
96364064216a8433360745f69edddce19a606659163The Android Open Source Project    /* 1. Allocate packet */
96464064216a8433360745f69edddce19a606659163The Android Open Source Project    status = wlan_memMngrAllocMSDU(pCurrBSS->hMemMgr, &pMsdu, sizeof(probeReqTemplate_t)+TX_TOTAL_OFFSET_BEFORE_DATA, CURRENT_BSS_MODULE);
96564064216a8433360745f69edddce19a606659163The Android Open Source Project    if (status != OK)
96664064216a8433360745f69edddce19a606659163The Android Open Source Project    {
96764064216a8433360745f69edddce19a606659163The Android Open Source Project        return;
96864064216a8433360745f69edddce19a606659163The Android Open Source Project    }
96964064216a8433360745f69edddce19a606659163The Android Open Source Project
97064064216a8433360745f69edddce19a606659163The Android Open Source Project    /* 2. Build a probe request template */
97164064216a8433360745f69edddce19a606659163The Android Open Source Project    pProbeReqTemplate = (probeReqTemplate_t *)((char *)(memMgr_BufData(pMsdu->firstBDPtr))+ TX_TOTAL_OFFSET_BEFORE_DATA);
97264064216a8433360745f69edddce19a606659163The Android Open Source Project    templateStruct.pTemplate = (UINT8 *)pProbeReqTemplate;
97364064216a8433360745f69edddce19a606659163The Android Open Source Project    templateStruct.templateType = PROBE_REQUEST_TEMPLATE;
97464064216a8433360745f69edddce19a606659163The Android Open Source Project
97564064216a8433360745f69edddce19a606659163The Android Open Source Project	param.paramType = SITE_MGR_RADIO_BAND_PARAM;
97664064216a8433360745f69edddce19a606659163The Android Open Source Project	siteMgr_getParam(pCurrBSS->hSiteMgr, &param);
97764064216a8433360745f69edddce19a606659163The Android Open Source Project	eRadioBand = param.content.siteMgrRadioBand;
97864064216a8433360745f69edddce19a606659163The Android Open Source Project
97964064216a8433360745f69edddce19a606659163The Android Open Source Project    param.paramType = SITE_MGR_CURRENT_SSID_PARAM;
98064064216a8433360745f69edddce19a606659163The Android Open Source Project    siteMgr_getParam(pCurrBSS->hSiteMgr, &param);
98164064216a8433360745f69edddce19a606659163The Android Open Source Project    buildProbeReqTemplate(pCurrBSS->hSiteMgr, &templateStruct, &param.content.siteMgrCurrentSSID, eRadioBand);
98264064216a8433360745f69edddce19a606659163The Android Open Source Project
98364064216a8433360745f69edddce19a606659163The Android Open Source Project    /* 3. Update BSSID to current BSSID */
98464064216a8433360745f69edddce19a606659163The Android Open Source Project    param.paramType = SITE_MGR_CURRENT_BSSID_PARAM;
98564064216a8433360745f69edddce19a606659163The Android Open Source Project    siteMgr_getParam(pCurrBSS->hSiteMgr, &param);
98664064216a8433360745f69edddce19a606659163The Android Open Source Project    os_memoryCopy(pCurrBSS->hOs, &(pProbeReqTemplate->hdr.DA.addr), (void *)param.content.siteMgrDesiredBSSID.addr, MAC_ADDR_LEN);
98764064216a8433360745f69edddce19a606659163The Android Open Source Project    os_memoryCopy(pCurrBSS->hOs, &(pProbeReqTemplate->hdr.BSSID.addr), (void *)param.content.siteMgrDesiredBSSID.addr, MAC_ADDR_LEN);
98864064216a8433360745f69edddce19a606659163The Android Open Source Project    os_memoryCopy(pCurrBSS->hOs, &(pProbeReqTemplate->hdr.DA.addr), (void *)param.content.siteMgrDesiredBSSID.addr, MAC_ADDR_LEN);
98964064216a8433360745f69edddce19a606659163The Android Open Source Project    /* 4. Update MSDU parameters */
99064064216a8433360745f69edddce19a606659163The Android Open Source Project    pMsdu->headerLen = sizeof(dot11_mgmtHeader_t) + TX_TOTAL_OFFSET_BEFORE_DATA;
99164064216a8433360745f69edddce19a606659163The Android Open Source Project    pMsdu->dataLen = templateStruct.templateLen;
99264064216a8433360745f69edddce19a606659163The Android Open Source Project    memMgr_BufOffset(pMsdu->firstBDPtr) = TX_TOTAL_OFFSET_BEFORE_DATA;
99364064216a8433360745f69edddce19a606659163The Android Open Source Project    /*
99464064216a8433360745f69edddce19a606659163The Android Open Source Project     * Fix length according to TX_DESCRIPTOR_SIZE and bus txn reserved place
99564064216a8433360745f69edddce19a606659163The Android Open Source Project     */
99664064216a8433360745f69edddce19a606659163The Android Open Source Project    pMsdu->firstBDPtr->length = pMsdu->dataLen + TX_TOTAL_OFFSET_BEFORE_DATA;
99764064216a8433360745f69edddce19a606659163The Android Open Source Project
99864064216a8433360745f69edddce19a606659163The Android Open Source Project    /* 5. Send the packet to the TX */
99964064216a8433360745f69edddce19a606659163The Android Open Source Project    pMsdu->txFlags |= TX_DATA_MGMT_MSDU;
100064064216a8433360745f69edddce19a606659163The Android Open Source Project    status = txData_txSendMsdu(pCurrBSS->hTxData, pMsdu);
100164064216a8433360745f69edddce19a606659163The Android Open Source Project}
100264064216a8433360745f69edddce19a606659163The Android Open Source Project
100364064216a8433360745f69edddce19a606659163The Android Open Source Project
100464064216a8433360745f69edddce19a606659163The Android Open Source Project/**
100564064216a8433360745f69edddce19a606659163The Android Open Source Project*
100664064216a8433360745f69edddce19a606659163The Android Open Source Project* currBSS_terminateOutOfSyncMode
100764064216a8433360745f69edddce19a606659163The Android Open Source Project*
100864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
100964064216a8433360745f69edddce19a606659163The Android Open Source Project*
101064064216a8433360745f69edddce19a606659163The Android Open Source Project* Beacon/probe response received, or connected state is changes -
101164064216a8433360745f69edddce19a606659163The Android Open Source Project* if was in the middle of handling 'Out os sync' event, give it up
101264064216a8433360745f69edddce19a606659163The Android Open Source Project*
101364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
101464064216a8433360745f69edddce19a606659163The Android Open Source Project*
101564064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - pCurrBSS - Current BSS handle \n
101664064216a8433360745f69edddce19a606659163The Android Open Source Project*
101764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
101864064216a8433360745f69edddce19a606659163The Android Open Source Project*
101964064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK on failure.
102064064216a8433360745f69edddce19a606659163The Android Open Source Project*
102164064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
102264064216a8433360745f69edddce19a606659163The Android Open Source Project*/
102364064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void currBSS_terminateOutOfSyncMode(currBSS_t *pCurrBSS)
102464064216a8433360745f69edddce19a606659163The Android Open Source Project{
102564064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pCurrBSS->fwIsOutOfSync)
102664064216a8433360745f69edddce19a606659163The Android Open Source Project    {
102764064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->fwIsOutOfSync = FALSE;
102864064216a8433360745f69edddce19a606659163The Android Open Source Project
102964064216a8433360745f69edddce19a606659163The Android Open Source Project        /* undo forcing TNETW to active */
103064064216a8433360745f69edddce19a606659163The Android Open Source Project        MacServices_powerAutho_AwakeRequiredUpdate(pCurrBSS->hMacServices, POWERAUTHO_AWAKE_NOT_REQUIRED, POWERAUTHO_AWAKE_REASON_OUT_OS_SYNC);
103164064216a8433360745f69edddce19a606659163The Android Open Source Project    }
103264064216a8433360745f69edddce19a606659163The Android Open Source Project}
103364064216a8433360745f69edddce19a606659163The Android Open Source Project
103464064216a8433360745f69edddce19a606659163The Android Open Source Project/**
103564064216a8433360745f69edddce19a606659163The Android Open Source Project*
103664064216a8433360745f69edddce19a606659163The Android Open Source Project* currBSS_beaconMissed
103764064216a8433360745f69edddce19a606659163The Android Open Source Project*
103864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
103964064216a8433360745f69edddce19a606659163The Android Open Source Project*
104064064216a8433360745f69edddce19a606659163The Android Open Source Project* Callback function, provided to HAL module.
104164064216a8433360745f69edddce19a606659163The Android Open Source Project*
104264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
104364064216a8433360745f69edddce19a606659163The Android Open Source Project*
104464064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - pCurrBSS - Current BSS handle \n
104564064216a8433360745f69edddce19a606659163The Android Open Source Project*
104664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
104764064216a8433360745f69edddce19a606659163The Android Open Source Project*
104864064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK on failure.
104964064216a8433360745f69edddce19a606659163The Android Open Source Project*
105064064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
105164064216a8433360745f69edddce19a606659163The Android Open Source Project*/
105264064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void currBSS_beaconMissed(currBSS_t *hCurrBSS,
105364064216a8433360745f69edddce19a606659163The Android Open Source Project                                      UINT8     *data,
105464064216a8433360745f69edddce19a606659163The Android Open Source Project                                      UINT8     dataLength)
105564064216a8433360745f69edddce19a606659163The Android Open Source Project{
105664064216a8433360745f69edddce19a606659163The Android Open Source Project    currBSS_terminateOutOfSyncMode(hCurrBSS);
105764064216a8433360745f69edddce19a606659163The Android Open Source Project    currBSS_reportRoamingEvent(hCurrBSS, ROAMING_TRIGGER_BSS_LOSS, NULL);
105864064216a8433360745f69edddce19a606659163The Android Open Source Project}
105964064216a8433360745f69edddce19a606659163The Android Open Source Project
106064064216a8433360745f69edddce19a606659163The Android Open Source Project
106164064216a8433360745f69edddce19a606659163The Android Open Source Project/**
106264064216a8433360745f69edddce19a606659163The Android Open Source Project*
106364064216a8433360745f69edddce19a606659163The Android Open Source Project* currBSS_consecTxErrors
106464064216a8433360745f69edddce19a606659163The Android Open Source Project*
106564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
106664064216a8433360745f69edddce19a606659163The Android Open Source Project*
106764064216a8433360745f69edddce19a606659163The Android Open Source Project* Callback function, provided to HAL module.
106864064216a8433360745f69edddce19a606659163The Android Open Source Project*
106964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
107064064216a8433360745f69edddce19a606659163The Android Open Source Project*
107164064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - pCurrBSS - Current BSS handle \n
107264064216a8433360745f69edddce19a606659163The Android Open Source Project*
107364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
107464064216a8433360745f69edddce19a606659163The Android Open Source Project*
107564064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK on failure.
107664064216a8433360745f69edddce19a606659163The Android Open Source Project*
107764064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
107864064216a8433360745f69edddce19a606659163The Android Open Source Project*/
107964064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void currBSS_consecTxErrors(currBSS_t *hCurrBSS,
108064064216a8433360745f69edddce19a606659163The Android Open Source Project                                   UINT8     *data,
108164064216a8433360745f69edddce19a606659163The Android Open Source Project                                   UINT8     dataLength)
108264064216a8433360745f69edddce19a606659163The Android Open Source Project{
108364064216a8433360745f69edddce19a606659163The Android Open Source Project    currBSS_reportRoamingEvent(hCurrBSS, ROAMING_TRIGGER_MAX_TX_RETRIES, NULL);
108464064216a8433360745f69edddce19a606659163The Android Open Source Project}
108564064216a8433360745f69edddce19a606659163The Android Open Source Project
108664064216a8433360745f69edddce19a606659163The Android Open Source Project
108764064216a8433360745f69edddce19a606659163The Android Open Source Project/**
108864064216a8433360745f69edddce19a606659163The Android Open Source Project*
108964064216a8433360745f69edddce19a606659163The Android Open Source Project* currBSS_lowRssiThrCrossed
109064064216a8433360745f69edddce19a606659163The Android Open Source Project*
109164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
109264064216a8433360745f69edddce19a606659163The Android Open Source Project*
109364064216a8433360745f69edddce19a606659163The Android Open Source Project* Callback function, provided to HAL module.
109464064216a8433360745f69edddce19a606659163The Android Open Source Project*
109564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
109664064216a8433360745f69edddce19a606659163The Android Open Source Project*
109764064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - pCurrBSS - Current BSS handle \n
109864064216a8433360745f69edddce19a606659163The Android Open Source Project*
109964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
110064064216a8433360745f69edddce19a606659163The Android Open Source Project*
110164064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK on failure.
110264064216a8433360745f69edddce19a606659163The Android Open Source Project*
110364064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
110464064216a8433360745f69edddce19a606659163The Android Open Source Project*/
110564064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void currBSS_lowRssiThrCrossed(currBSS_t *hCurrBSS,
110664064216a8433360745f69edddce19a606659163The Android Open Source Project                                      UINT8     *data,
110764064216a8433360745f69edddce19a606659163The Android Open Source Project                                      UINT8     dataLength)
110864064216a8433360745f69edddce19a606659163The Android Open Source Project{
110964064216a8433360745f69edddce19a606659163The Android Open Source Project    currBSS_reportRoamingEvent(hCurrBSS, ROAMING_TRIGGER_LOW_QUALITY, NULL);
111064064216a8433360745f69edddce19a606659163The Android Open Source Project}
111164064216a8433360745f69edddce19a606659163The Android Open Source Project
111264064216a8433360745f69edddce19a606659163The Android Open Source Project
111364064216a8433360745f69edddce19a606659163The Android Open Source Project/**
111464064216a8433360745f69edddce19a606659163The Android Open Source Project*
111564064216a8433360745f69edddce19a606659163The Android Open Source Project* currBSS_lowSnrThrCrossed
111664064216a8433360745f69edddce19a606659163The Android Open Source Project*
111764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
111864064216a8433360745f69edddce19a606659163The Android Open Source Project*
111964064216a8433360745f69edddce19a606659163The Android Open Source Project* Callback function, provided to HAL module.
112064064216a8433360745f69edddce19a606659163The Android Open Source Project*
112164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
112264064216a8433360745f69edddce19a606659163The Android Open Source Project*
112364064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - pCurrBSS - Current BSS handle \n
112464064216a8433360745f69edddce19a606659163The Android Open Source Project*
112564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
112664064216a8433360745f69edddce19a606659163The Android Open Source Project*
112764064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK on failure.
112864064216a8433360745f69edddce19a606659163The Android Open Source Project*
112964064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
113064064216a8433360745f69edddce19a606659163The Android Open Source Project*/
113164064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void currBSS_lowSnrThrCrossed(currBSS_t *hCurrBSS,
113264064216a8433360745f69edddce19a606659163The Android Open Source Project                                      UINT8     *data,
113364064216a8433360745f69edddce19a606659163The Android Open Source Project                                      UINT8     dataLength)
113464064216a8433360745f69edddce19a606659163The Android Open Source Project{
113564064216a8433360745f69edddce19a606659163The Android Open Source Project    currBSS_reportRoamingEvent(hCurrBSS, ROAMING_TRIGGER_LOW_SNR, NULL);
113664064216a8433360745f69edddce19a606659163The Android Open Source Project}
113764064216a8433360745f69edddce19a606659163The Android Open Source Project
113864064216a8433360745f69edddce19a606659163The Android Open Source Project/**
113964064216a8433360745f69edddce19a606659163The Android Open Source Project*
114064064216a8433360745f69edddce19a606659163The Android Open Source Project* currBSS_reportRoamingEvent
114164064216a8433360745f69edddce19a606659163The Android Open Source Project*
114264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
114364064216a8433360745f69edddce19a606659163The Android Open Source Project*
114464064216a8433360745f69edddce19a606659163The Android Open Source Project* This function checks the mode of Current BSS module.
114564064216a8433360745f69edddce19a606659163The Android Open Source Project* If connected to EBSS, it reports roaming event to AP Connection.
114664064216a8433360745f69edddce19a606659163The Android Open Source Project*
114764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
114864064216a8433360745f69edddce19a606659163The Android Open Source Project*
114964064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - pCurrBSS - Current BSS handle \n
115064064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - roamingEventType - Roaming trigger to report \n
115164064216a8433360745f69edddce19a606659163The Android Open Source Project*
115264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
115364064216a8433360745f69edddce19a606659163The Android Open Source Project*
115464064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK on failure.
115564064216a8433360745f69edddce19a606659163The Android Open Source Project*
115664064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
115764064216a8433360745f69edddce19a606659163The Android Open Source Project*/
115864064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void currBSS_reportRoamingEvent(currBSS_t *pCurrBSS,
115964064216a8433360745f69edddce19a606659163The Android Open Source Project                                       apConn_roamingTrigger_e roamingEventType,
116064064216a8433360745f69edddce19a606659163The Android Open Source Project									   roamingEventData_u *pRoamingEventData)
116164064216a8433360745f69edddce19a606659163The Android Open Source Project{
116264064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION(pCurrBSS->hReport, ROAMING_MANAGER_MODULE_LOG,("currBSS_reportRoamingEvent: trigger %d\n", roamingEventType));
116364064216a8433360745f69edddce19a606659163The Android Open Source Project
116464064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pCurrBSS->isConnected)
116564064216a8433360745f69edddce19a606659163The Android Open Source Project    {
116664064216a8433360745f69edddce19a606659163The Android Open Source Project        if (pCurrBSS->type == BSS_INFRASTRUCTURE)
116764064216a8433360745f69edddce19a606659163The Android Open Source Project        {
116864064216a8433360745f69edddce19a606659163The Android Open Source Project            apConn_reportRoamingEvent(pCurrBSS->hAPConn, roamingEventType, pRoamingEventData);
116964064216a8433360745f69edddce19a606659163The Android Open Source Project        }
117064064216a8433360745f69edddce19a606659163The Android Open Source Project        else /* IBSS */
117164064216a8433360745f69edddce19a606659163The Android Open Source Project        {
117264064216a8433360745f69edddce19a606659163The Android Open Source Project            if( roamingEventType == ROAMING_TRIGGER_BSS_LOSS )
117364064216a8433360745f69edddce19a606659163The Android Open Source Project            {
117464064216a8433360745f69edddce19a606659163The Android Open Source Project                /* If in IBSS call the SME reselect function, this logic issues a DISCONNECT
117564064216a8433360745f69edddce19a606659163The Android Open Source Project                 * event and tries to connect to other STA or establish self connection.
117664064216a8433360745f69edddce19a606659163The Android Open Source Project                 */
117764064216a8433360745f69edddce19a606659163The Android Open Source Project                smeSm_reselect(pCurrBSS->hSme);
117864064216a8433360745f69edddce19a606659163The Android Open Source Project            }
117964064216a8433360745f69edddce19a606659163The Android Open Source Project        }
118064064216a8433360745f69edddce19a606659163The Android Open Source Project    }
118164064216a8433360745f69edddce19a606659163The Android Open Source Project}
118264064216a8433360745f69edddce19a606659163The Android Open Source Project
118364064216a8433360745f69edddce19a606659163The Android Open Source Project/***********************************************************************
118464064216a8433360745f69edddce19a606659163The Android Open Source Project *                        currBSS_updateRxSignal
118564064216a8433360745f69edddce19a606659163The Android Open Source Project ***********************************************************************
118664064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: Called when receiving beacon or Probe response from current AP
118764064216a8433360745f69edddce19a606659163The Android Open Source Project             updates SNR and RSSI in siteMgr and calls apConn in case
118864064216a8433360745f69edddce19a606659163The Android Open Source Project             roaming trigger for BG scan occurred.
118964064216a8433360745f69edddce19a606659163The Android Open Source Project
119064064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT:      hCurrBSS    -   currBss handle.
119164064216a8433360745f69edddce19a606659163The Android Open Source Project            uSNR
119264064216a8433360745f69edddce19a606659163The Android Open Source Project            iRSSI
119364064216a8433360745f69edddce19a606659163The Android Open Source Project            bAveragedData - indicate whether the given SNR,RSSI are already averaged.
119464064216a8433360745f69edddce19a606659163The Android Open Source Project                            This is done since this values can be given directly from the
119564064216a8433360745f69edddce19a606659163The Android Open Source Project                            Fw, which average those values.
119664064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT:
119764064216a8433360745f69edddce19a606659163The Android Open Source Project
119864064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN:
119964064216a8433360745f69edddce19a606659163The Android Open Source Project
120064064216a8433360745f69edddce19a606659163The Android Open Source Project************************************************************************/
120164064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid currBSS_updateRxSignal(TI_HANDLE hCurrBSS, UINT8 uSNR, INT8 iRSSI, BOOL bAveragedData)
120264064216a8433360745f69edddce19a606659163The Android Open Source Project{
120364064216a8433360745f69edddce19a606659163The Android Open Source Project    currBSS_t   *pCurrBSS = (currBSS_t *)hCurrBSS;
120464064216a8433360745f69edddce19a606659163The Android Open Source Project    INT8 tmpRssiAvg;
120564064216a8433360745f69edddce19a606659163The Android Open Source Project    INT8 rssiPrevVal;
120664064216a8433360745f69edddce19a606659163The Android Open Source Project    INT8 rssiLatestVal;
120764064216a8433360745f69edddce19a606659163The Android Open Source Project    paramInfo_t param;
120864064216a8433360745f69edddce19a606659163The Android Open Source Project
120964064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Update SNR */
121064064216a8433360745f69edddce19a606659163The Android Open Source Project    pCurrBSS->snr = uSNR;
121164064216a8433360745f69edddce19a606659163The Android Open Source Project
121264064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Update Rx rate of primary site is done in Site Manager */
121364064216a8433360745f69edddce19a606659163The Android Open Source Project
121464064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Update RSSI: */
121564064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Count average RSSI */
121664064216a8433360745f69edddce19a606659163The Android Open Source Project    rssiPrevVal = pCurrBSS->averageRssi;
121764064216a8433360745f69edddce19a606659163The Android Open Source Project    rssiLatestVal = pCurrBSS->currAPInfo.RSSI = iRSSI;
121864064216a8433360745f69edddce19a606659163The Android Open Source Project
121964064216a8433360745f69edddce19a606659163The Android Open Source Project    /* if the data is already averaged, or this is the first measured RSSI */
122064064216a8433360745f69edddce19a606659163The Android Open Source Project    if ((bAveragedData) || (rssiPrevVal == 0))
122164064216a8433360745f69edddce19a606659163The Android Open Source Project    {
122264064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->averageRssi = rssiLatestVal;
122364064216a8433360745f69edddce19a606659163The Android Open Source Project    }
122464064216a8433360745f69edddce19a606659163The Android Open Source Project    else /* average the RSSI given */
122564064216a8433360745f69edddce19a606659163The Android Open Source Project    {
122664064216a8433360745f69edddce19a606659163The Android Open Source Project        tmpRssiAvg = ((rssiLatestVal*pCurrBSS->rssiFilterWeight) + (rssiPrevVal*(100-pCurrBSS->rssiFilterWeight)))/100;
122764064216a8433360745f69edddce19a606659163The Android Open Source Project
122864064216a8433360745f69edddce19a606659163The Android Open Source Project        /* for faster convergence on RSSI changes use rounding error calculation with latest sample and not */
122964064216a8433360745f69edddce19a606659163The Android Open Source Project        /* on latest average */
123064064216a8433360745f69edddce19a606659163The Android Open Source Project        if (rssiLatestVal > tmpRssiAvg)
123164064216a8433360745f69edddce19a606659163The Android Open Source Project            tmpRssiAvg++;
123264064216a8433360745f69edddce19a606659163The Android Open Source Project        else
123364064216a8433360745f69edddce19a606659163The Android Open Source Project            if (rssiLatestVal < tmpRssiAvg)
123464064216a8433360745f69edddce19a606659163The Android Open Source Project                tmpRssiAvg--;
123564064216a8433360745f69edddce19a606659163The Android Open Source Project
123664064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->averageRssi = tmpRssiAvg;
123764064216a8433360745f69edddce19a606659163The Android Open Source Project    }
123864064216a8433360745f69edddce19a606659163The Android Open Source Project
123964064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Report to AP Connection about reaching RSSI low or normal threshold */
124064064216a8433360745f69edddce19a606659163The Android Open Source Project    if ((pCurrBSS->rssiBelowThrReported == FALSE) && (pCurrBSS->averageRssi < pCurrBSS->lowRssiThreshold))
124164064216a8433360745f69edddce19a606659163The Android Open Source Project    {
124264064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->rssiAboveThrReported = FALSE;
124364064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->rssiBelowThrReported = TRUE;
124464064216a8433360745f69edddce19a606659163The Android Open Source Project        apConn_reportRoamingEvent(pCurrBSS->hAPConn, ROAMING_TRIGGER_LOW_QUALITY_FOR_BG_SCAN, NULL);
124564064216a8433360745f69edddce19a606659163The Android Open Source Project    }
124664064216a8433360745f69edddce19a606659163The Android Open Source Project    if ((pCurrBSS->rssiAboveThrReported == FALSE) && (pCurrBSS->averageRssi > pCurrBSS->highRssiThreshold))
124764064216a8433360745f69edddce19a606659163The Android Open Source Project    {
124864064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->rssiAboveThrReported = TRUE;
124964064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrBSS->rssiBelowThrReported = FALSE;
125064064216a8433360745f69edddce19a606659163The Android Open Source Project        apConn_reportRoamingEvent(pCurrBSS->hAPConn, ROAMING_TRIGGER_NORMAL_QUALITY_FOR_BG_SCAN, NULL);
125164064216a8433360745f69edddce19a606659163The Android Open Source Project    }
125264064216a8433360745f69edddce19a606659163The Android Open Source Project
125364064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Update Site Table in order to represent the RSSI of current AP correctly in the utility */
125464064216a8433360745f69edddce19a606659163The Android Open Source Project    param.paramType = SITE_MGR_CURRENT_SIGNAL_PARAM;
125564064216a8433360745f69edddce19a606659163The Android Open Source Project    param.content.siteMgrCurrentSignal.rssi = pCurrBSS->averageRssi;
125664064216a8433360745f69edddce19a606659163The Android Open Source Project    siteMgr_setParam(pCurrBSS->hSiteMgr, &param);
125764064216a8433360745f69edddce19a606659163The Android Open Source Project}
125864064216a8433360745f69edddce19a606659163The Android Open Source Project
125964064216a8433360745f69edddce19a606659163The Android Open Source Project/**
126064064216a8433360745f69edddce19a606659163The Android Open Source Project*
126164064216a8433360745f69edddce19a606659163The Android Open Source Project* currBSS_Bss_Regain_CallB
126264064216a8433360745f69edddce19a606659163The Android Open Source Project*
126364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
126464064216a8433360745f69edddce19a606659163The Android Open Source Project*   Used by site manager in case of BSS regain
126564064216a8433360745f69edddce19a606659163The Android Open Source Project*
126664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
126764064216a8433360745f69edddce19a606659163The Android Open Source Project*
126864064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hCurrBSS - Current BSS handle \n
126964064216a8433360745f69edddce19a606659163The Android Open Source Project*
127064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
127164064216a8433360745f69edddce19a606659163The Android Open Source Project*
127264064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK on failure.
127364064216a8433360745f69edddce19a606659163The Android Open Source Project*
127464064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
127564064216a8433360745f69edddce19a606659163The Android Open Source Project*/
127664064216a8433360745f69edddce19a606659163The Android Open Source Project
127764064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS currBSS_Bss_Regain_CallB(TI_HANDLE hCurrBSS)
127864064216a8433360745f69edddce19a606659163The Android Open Source Project
127964064216a8433360745f69edddce19a606659163The Android Open Source Project{
128064064216a8433360745f69edddce19a606659163The Android Open Source Project    currBSS_t *pCurrBSS = (currBSS_t *)hCurrBSS;
128164064216a8433360745f69edddce19a606659163The Android Open Source Project    paramInfo_t param;
128264064216a8433360745f69edddce19a606659163The Android Open Source Project
128364064216a8433360745f69edddce19a606659163The Android Open Source Project    if ( NULL == hCurrBSS )
128464064216a8433360745f69edddce19a606659163The Android Open Source Project    {
128564064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_ERROR(pCurrBSS->hReport, CURR_BSS_MODULE_LOG,("Pointer to Curr BSS NULL, abort regain !")) ;
128664064216a8433360745f69edddce19a606659163The Android Open Source Project        return NOK;
128764064216a8433360745f69edddce19a606659163The Android Open Source Project    }
128864064216a8433360745f69edddce19a606659163The Android Open Source Project
128964064216a8433360745f69edddce19a606659163The Android Open Source Project    param.paramType = SITE_MGR_CURRENT_BSSID_PARAM;
129064064216a8433360745f69edddce19a606659163The Android Open Source Project    siteMgr_getParam(pCurrBSS->hSiteMgr, &param);
129164064216a8433360745f69edddce19a606659163The Android Open Source Project
129264064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pCurrBSS->isConnected)
129364064216a8433360745f69edddce19a606659163The Android Open Source Project    {
129464064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_INFORMATION(pCurrBSS->hReport, CURR_BSS_MODULE_LOG,("Regain Current Connected BSS" ));
129564064216a8433360745f69edddce19a606659163The Android Open Source Project
129664064216a8433360745f69edddce19a606659163The Android Open Source Project        /* If we got the REGAIN_BSS Event from FW since it reported 'Out of sync' situation*/
129764064216a8433360745f69edddce19a606659163The Android Open Source Project        /* then we were trying to revive connection, now stop sending probe requests */
129864064216a8433360745f69edddce19a606659163The Android Open Source Project        currBSS_terminateOutOfSyncMode(pCurrBSS);
129964064216a8433360745f69edddce19a606659163The Android Open Source Project
130064064216a8433360745f69edddce19a606659163The Android Open Source Project    }
130164064216a8433360745f69edddce19a606659163The Android Open Source Project    else
130264064216a8433360745f69edddce19a606659163The Android Open Source Project    {
130364064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_INFORMATION(pCurrBSS->hReport, CURR_BSS_MODULE_LOG,("Can't Regain BSS not connected !" ));
130464064216a8433360745f69edddce19a606659163The Android Open Source Project    }
130564064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
130664064216a8433360745f69edddce19a606659163The Android Open Source Project
130764064216a8433360745f69edddce19a606659163The Android Open Source Project}
130864064216a8433360745f69edddce19a606659163The Android Open Source Project
130964064216a8433360745f69edddce19a606659163The Android Open Source Project/**
131064064216a8433360745f69edddce19a606659163The Android Open Source Project*
131164064216a8433360745f69edddce19a606659163The Android Open Source Project* currBSS_Bss_Reset_CallB
131264064216a8433360745f69edddce19a606659163The Android Open Source Project*
131364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
131464064216a8433360745f69edddce19a606659163The Android Open Source Project*	Used by site manager in case of BSS Reset - if tsf was changed FW will signal with this event
131564064216a8433360745f69edddce19a606659163The Android Open Source Project*
131664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
131764064216a8433360745f69edddce19a606659163The Android Open Source Project*
131864064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hCurrBSS - Current BSS handle \n
131964064216a8433360745f69edddce19a606659163The Android Open Source Project*
132064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
132164064216a8433360745f69edddce19a606659163The Android Open Source Project*
132264064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK on failure.
132364064216a8433360745f69edddce19a606659163The Android Open Source Project*
132464064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
132564064216a8433360745f69edddce19a606659163The Android Open Source Project*/
132664064216a8433360745f69edddce19a606659163The Android Open Source Project
132764064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS currBSS_Bss_Reset_CallB(TI_HANDLE hCurrBSS)
132864064216a8433360745f69edddce19a606659163The Android Open Source Project
132964064216a8433360745f69edddce19a606659163The Android Open Source Project{
133064064216a8433360745f69edddce19a606659163The Android Open Source Project	currBSS_t *pCurrBSS = (currBSS_t *)hCurrBSS;
133164064216a8433360745f69edddce19a606659163The Android Open Source Project
133264064216a8433360745f69edddce19a606659163The Android Open Source Project	if ( NULL == hCurrBSS )
133364064216a8433360745f69edddce19a606659163The Android Open Source Project	{
133464064216a8433360745f69edddce19a606659163The Android Open Source Project		WLAN_REPORT_ERROR(pCurrBSS->hReport, CURR_BSS_MODULE_LOG,("Pointer to Curr BSS NULL, abort Reset !")) ;
133564064216a8433360745f69edddce19a606659163The Android Open Source Project		return NOK;
133664064216a8433360745f69edddce19a606659163The Android Open Source Project	}
133764064216a8433360745f69edddce19a606659163The Android Open Source Project
133864064216a8433360745f69edddce19a606659163The Android Open Source Project
133964064216a8433360745f69edddce19a606659163The Android Open Source Project	if (pCurrBSS->isConnected)
134064064216a8433360745f69edddce19a606659163The Android Open Source Project		{
134164064216a8433360745f69edddce19a606659163The Android Open Source Project			WLAN_REPORT_INFORMATION(pCurrBSS->hReport, CURR_BSS_MODULE_LOG,("Reset Current Connected BSS" ));
134264064216a8433360745f69edddce19a606659163The Android Open Source Project
134364064216a8433360745f69edddce19a606659163The Android Open Source Project           /* If we got the Reset_BSS Event from FW since TSF was changed may indicate BSS reset in the AP
134464064216a8433360745f69edddce19a606659163The Android Open Source Project           requier to initiate fist beacon mechanism and also test connectivity with the AP (NULL packet)*/
134564064216a8433360745f69edddce19a606659163The Android Open Source Project           siteMgr_clearFirstBcnFlag(pCurrBSS->hSiteMgr);
134664064216a8433360745f69edddce19a606659163The Android Open Source Project
134764064216a8433360745f69edddce19a606659163The Android Open Source Project
134864064216a8433360745f69edddce19a606659163The Android Open Source Project
134964064216a8433360745f69edddce19a606659163The Android Open Source Project        }
135064064216a8433360745f69edddce19a606659163The Android Open Source Project	else
135164064216a8433360745f69edddce19a606659163The Android Open Source Project	{
135264064216a8433360745f69edddce19a606659163The Android Open Source Project		WLAN_REPORT_ERROR(pCurrBSS->hReport, CURR_BSS_MODULE_LOG,("Can't Reset BSS not connected !" ));
135364064216a8433360745f69edddce19a606659163The Android Open Source Project	}
135464064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
135564064216a8433360745f69edddce19a606659163The Android Open Source Project
135664064216a8433360745f69edddce19a606659163The Android Open Source Project}
135764064216a8433360745f69edddce19a606659163The Android Open Source Project
1358