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, ¶ms); 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, ¶ms); 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, ¶ms); 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, ¶ms); 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, ¶m); 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, ¶m); 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, ¶m); 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, ¶m); 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, ¶m); 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, ¶m); 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, ¶m); 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, ¶m); 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,¶m); 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, ¶m); 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, ¶m); 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, ¶m); 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, ¶m); 98164064216a8433360745f69edddce19a606659163The Android Open Source Project buildProbeReqTemplate(pCurrBSS->hSiteMgr, &templateStruct, ¶m.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, ¶m); 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, ¶m); 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, ¶m); 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