164064216a8433360745f69edddce19a606659163The Android Open Source Project/** \file reportReplvl.c 264064216a8433360745f69edddce19a606659163The Android Open Source Project * \brief Report level implementation 364064216a8433360745f69edddce19a606659163The Android Open Source Project * 464064216a8433360745f69edddce19a606659163The Android Open Source Project * \see reportReplvl.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: reportReplvl.c */ 4464064216a8433360745f69edddce19a606659163The Android Open Source Project/* PURPOSE: Report level implementation */ 4564064216a8433360745f69edddce19a606659163The Android Open Source Project/* */ 4664064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************/ 4764064216a8433360745f69edddce19a606659163The Android Open Source Project#include "osTIType.h" 4864064216a8433360745f69edddce19a606659163The Android Open Source Project#include "osApi.h" 4964064216a8433360745f69edddce19a606659163The Android Open Source Project#include "siteHash.h" 5064064216a8433360745f69edddce19a606659163The Android Open Source Project#include "smeSmApi.h" 5164064216a8433360745f69edddce19a606659163The Android Open Source Project#include "utils.h" 5264064216a8433360745f69edddce19a606659163The Android Open Source Project#include "smeApi.h" 5364064216a8433360745f69edddce19a606659163The Android Open Source Project#include "rsnApi.h" 5464064216a8433360745f69edddce19a606659163The Android Open Source Project#include "report.h" 5564064216a8433360745f69edddce19a606659163The Android Open Source Project#include "whalCtrl_api.h" 5664064216a8433360745f69edddce19a606659163The Android Open Source Project#include "connApi.h" 5764064216a8433360745f69edddce19a606659163The Android Open Source Project#include "DataCtrl_Api.h" 5864064216a8433360745f69edddce19a606659163The Android Open Source Project#include "siteMgrApi.h" 5964064216a8433360745f69edddce19a606659163The Android Open Source Project#include "regulatoryDomainApi.h" 6064064216a8433360745f69edddce19a606659163The Android Open Source Project#include "measurementMgrApi.h" 6164064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef EXC_MODULE_INCLUDED 6264064216a8433360745f69edddce19a606659163The Android Open Source Project#include "excMngr.h" 6364064216a8433360745f69edddce19a606659163The Android Open Source Project#include "TransmitPowerExc.h" 6464064216a8433360745f69edddce19a606659163The Android Open Source Project#include "excRMMngr.h" 6564064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 6664064216a8433360745f69edddce19a606659163The Android Open Source Project 6764064216a8433360745f69edddce19a606659163The Android Open Source Project#include "qosMngr_API.h" 6864064216a8433360745f69edddce19a606659163The Android Open Source Project 6964064216a8433360745f69edddce19a606659163The Android Open Source Project 7064064216a8433360745f69edddce19a606659163The Android Open Source Project/**************************************************************************** 7164064216a8433360745f69edddce19a606659163The Android Open Source Project MATRIC ISSUE 7264064216a8433360745f69edddce19a606659163The Android Open Source Project Each function in the select process returns a MATCH, NO_MATCH value in order to 7364064216a8433360745f69edddce19a606659163The Android Open Source Project skip non relevant sites. In addition, some of the functions also measures a matching level of a site. 7464064216a8433360745f69edddce19a606659163The Android Open Source Project The matching level is returned as a bit map. The select function 'OR's those bit maps in order to 7564064216a8433360745f69edddce19a606659163The Android Open Source Project select the site that has the biggest matching level. If a function returns a NO_MATCH value, the matching level of the 7664064216a8433360745f69edddce19a606659163The Android Open Source Project site is reset. 7764064216a8433360745f69edddce19a606659163The Android Open Source Project Following is the site matching level bit map structure. 7864064216a8433360745f69edddce19a606659163The Android Open Source Project Please notice, that if all the match functions returned MATCH for a site, its matric must be different than 0, 7964064216a8433360745f69edddce19a606659163The Android Open Source Project because of the rates bits. 8064064216a8433360745f69edddce19a606659163The Android Open Source Project 8164064216a8433360745f69edddce19a606659163The Android Open Source Project 8264064216a8433360745f69edddce19a606659163The Android Open Source Project 31 - 24 23 - 20 20 - 16 15 - 10 9 - 8 7 6 5 4 - 0 8364064216a8433360745f69edddce19a606659163The Android Open Source Project +---------------+---------------+-----------------------+-------------+------------+----------+---------+-----------+-----------+ 8464064216a8433360745f69edddce19a606659163The Android Open Source Project | Rx Level | Privacy | Attempts |Rates | Modulation |Preamble | Channel | Spectrum | Reserved | 8564064216a8433360745f69edddce19a606659163The Android Open Source Project | | | | | | | | management| | 8664064216a8433360745f69edddce19a606659163The Android Open Source Project +---------------+---------------+-----------------------+-------------+------------+----------+---------+-----------+-----------+ 8764064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************/ 8864064216a8433360745f69edddce19a606659163The Android Open Source Project 8964064216a8433360745f69edddce19a606659163The Android Open Source Project/* Matric bit map definition */ 9064064216a8433360745f69edddce19a606659163The Android Open Source Projecttypedef enum 9164064216a8433360745f69edddce19a606659163The Android Open Source Project{ 9264064216a8433360745f69edddce19a606659163The Android Open Source Project /* Rx level */ 9364064216a8433360745f69edddce19a606659163The Android Open Source Project METRIC_RX_LEVEL_MASK = 0xFF, 9464064216a8433360745f69edddce19a606659163The Android Open Source Project METRIC_RX_LEVEL_SHIFT = 24, 9564064216a8433360745f69edddce19a606659163The Android Open Source Project 9664064216a8433360745f69edddce19a606659163The Android Open Source Project /* Privacy */ 9764064216a8433360745f69edddce19a606659163The Android Open Source Project METRIC_PRIVACY_MASK = 0x0F, 9864064216a8433360745f69edddce19a606659163The Android Open Source Project METRIC_PRIVACY_SHIFT = 20, 9964064216a8433360745f69edddce19a606659163The Android Open Source Project 10064064216a8433360745f69edddce19a606659163The Android Open Source Project /* Number of attempts */ 10164064216a8433360745f69edddce19a606659163The Android Open Source Project METRIC_ATTEMPTS_NUMBER_MASK = 0x0F, 10264064216a8433360745f69edddce19a606659163The Android Open Source Project METRIC_ATTEMPTS_NUMBER_SHIFT = 16, 10364064216a8433360745f69edddce19a606659163The Android Open Source Project 10464064216a8433360745f69edddce19a606659163The Android Open Source Project 10564064216a8433360745f69edddce19a606659163The Android Open Source Project /* Rates */ 10664064216a8433360745f69edddce19a606659163The Android Open Source Project METRIC_RATES_MASK = 0x3F, 10764064216a8433360745f69edddce19a606659163The Android Open Source Project METRIC_RATES_SHIFT = 10, 10864064216a8433360745f69edddce19a606659163The Android Open Source Project 10964064216a8433360745f69edddce19a606659163The Android Open Source Project /* PBCC */ 11064064216a8433360745f69edddce19a606659163The Android Open Source Project METRIC_MODULATION_MASK = 0x03, 11164064216a8433360745f69edddce19a606659163The Android Open Source Project METRIC_MODULATION_SHIFT = 8, 11264064216a8433360745f69edddce19a606659163The Android Open Source Project 11364064216a8433360745f69edddce19a606659163The Android Open Source Project /* Preamble*/ 11464064216a8433360745f69edddce19a606659163The Android Open Source Project METRIC_PREAMBLE_MASK = 0x01, 11564064216a8433360745f69edddce19a606659163The Android Open Source Project METRIC_PREAMBLE_SHIFT = 7, 11664064216a8433360745f69edddce19a606659163The Android Open Source Project 11764064216a8433360745f69edddce19a606659163The Android Open Source Project /* Channel */ 11864064216a8433360745f69edddce19a606659163The Android Open Source Project METRIC_CHANNEL_MASK = 0x01, 11964064216a8433360745f69edddce19a606659163The Android Open Source Project METRIC_CHANNEL_SHIFT = 6, 12064064216a8433360745f69edddce19a606659163The Android Open Source Project 12164064216a8433360745f69edddce19a606659163The Android Open Source Project /* Spectrum management Capability */ 12264064216a8433360745f69edddce19a606659163The Android Open Source Project METRIC_SPECTRUM_MANAGEMENT_MASK = 0x01, 12364064216a8433360745f69edddce19a606659163The Android Open Source Project METRIC_SPECTRUM_MANAGEMENT_SHIFT= 5, 12464064216a8433360745f69edddce19a606659163The Android Open Source Project 12564064216a8433360745f69edddce19a606659163The Android Open Source Project /* Priority Site */ 12664064216a8433360745f69edddce19a606659163The Android Open Source Project METRIC_PRIORITY_SITE_MASK = 0x01, 12764064216a8433360745f69edddce19a606659163The Android Open Source Project METRIC_PRIORITY_SITE_SHIFT = 4, 12864064216a8433360745f69edddce19a606659163The Android Open Source Project 12964064216a8433360745f69edddce19a606659163The Android Open Source Project} matric_e; 13064064216a8433360745f69edddce19a606659163The Android Open Source Project 13164064216a8433360745f69edddce19a606659163The Android Open Source Project#define MAX_GB_MODE_CHANEL 14 13264064216a8433360745f69edddce19a606659163The Android Open Source Project 13364064216a8433360745f69edddce19a606659163The Android Open Source Project/* RSSI values boundaries and metric values for best, good, etc signals */ 13464064216a8433360745f69edddce19a606659163The Android Open Source Project#define SELECT_RSSI_BEST_LEVEL (-22) 13564064216a8433360745f69edddce19a606659163The Android Open Source Project#define SELECT_RSSI_GOOD_LEVEL (-38) 13664064216a8433360745f69edddce19a606659163The Android Open Source Project#define SELECT_RSSI_NORMAL_LEVEL (-56) 13764064216a8433360745f69edddce19a606659163The Android Open Source Project#define SELECT_RSSI_POOR_LEVEL (-72) 13864064216a8433360745f69edddce19a606659163The Android Open Source Project#define SELECT_RSSI_BAD_LEVEL (-82) 13964064216a8433360745f69edddce19a606659163The Android Open Source Project 14064064216a8433360745f69edddce19a606659163The Android Open Source Project 14164064216a8433360745f69edddce19a606659163The Android Open Source Project#define RSSI_METRIC_BEST 6 14264064216a8433360745f69edddce19a606659163The Android Open Source Project#define RSSI_METRIC_GOOD 5 14364064216a8433360745f69edddce19a606659163The Android Open Source Project#define RSSI_METRIC_NORMAL 4 14464064216a8433360745f69edddce19a606659163The Android Open Source Project#define RSSI_METRIC_POOR 3 14564064216a8433360745f69edddce19a606659163The Android Open Source Project#define RSSI_METRIC_BAD 2 14664064216a8433360745f69edddce19a606659163The Android Open Source Project#define RSSI_METRIC_NOSIGNAL 1 14764064216a8433360745f69edddce19a606659163The Android Open Source Project 14864064216a8433360745f69edddce19a606659163The Android Open Source Project/* Local functions prototypes */ 14964064216a8433360745f69edddce19a606659163The Android Open Source Project 15064064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic match_e ssidMatchingLevel(siteMgr_t *pSiteMgr, siteEntry_t *pSite); 15164064216a8433360745f69edddce19a606659163The Android Open Source Project 15264064216a8433360745f69edddce19a606659163The Android Open Source Project 15364064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic match_e bssidMatchingLevel(siteMgr_t *pSiteMgr, siteEntry_t *pSite); 15464064216a8433360745f69edddce19a606659163The Android Open Source Project 15564064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic match_e bssTypeMatchingLevel(siteMgr_t *pSiteMgr, siteEntry_t *pSite); 15664064216a8433360745f69edddce19a606659163The Android Open Source Project 15764064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic match_e ratesMatchingLevel(siteMgr_t *pSiteMgr, siteEntry_t *pSite, UINT32 *matchingLevel); 15864064216a8433360745f69edddce19a606659163The Android Open Source Project 15964064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic match_e modulationTypeMatchingLevel(siteMgr_t *pSiteMgr, siteEntry_t *pSite, UINT32 *matchingLevel); 16064064216a8433360745f69edddce19a606659163The Android Open Source Project 16164064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic match_e preambleTypeMatchingLevel(siteMgr_t *pSiteMgr, siteEntry_t *pSite, UINT32 *matchingLevel); 16264064216a8433360745f69edddce19a606659163The Android Open Source Project 16364064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic match_e channelMatchingLevel(siteMgr_t *pSiteMgr, siteEntry_t *pSite, UINT32 *matchingLevel); 16464064216a8433360745f69edddce19a606659163The Android Open Source Project 16564064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic match_e spectrumManagementMatchingLevel(siteMgr_t *pSiteMgr, UINT16 siteCapability, UINT32 *matchingLevel); 16664064216a8433360745f69edddce19a606659163The Android Open Source Project 16764064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic match_e rxLevelMatchingLevel(siteMgr_t *pSiteMgr, siteEntry_t *pSite, UINT32 *matchingLevel); 16864064216a8433360745f69edddce19a606659163The Android Open Source Project 16964064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic match_e attemptsNumberMatchingLevel(siteMgr_t *pSiteMgr, siteEntry_t *pSite, UINT32 *matchingLevel); 17064064216a8433360745f69edddce19a606659163The Android Open Source Project 17164064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic match_e prioritySiteMatchingLevel(siteMgr_t *pSiteMgr, siteEntry_t *pSite, UINT32 *matchingLevel); 17264064216a8433360745f69edddce19a606659163The Android Open Source Project 17364064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic siteEntry_t *addSelfSite(siteMgr_t *pSiteMgr); 17464064216a8433360745f69edddce19a606659163The Android Open Source Project 17564064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS sendProbeResponse(siteMgr_t *pSiteMgr, macAddress_t *pBssid); 17664064216a8433360745f69edddce19a606659163The Android Open Source Project 17764064216a8433360745f69edddce19a606659163The Android Open Source Project/* Interface functions Implementation */ 17864064216a8433360745f69edddce19a606659163The Android Open Source Project 17964064216a8433360745f69edddce19a606659163The Android Open Source Project 18045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt/**************************************************************/ 18145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt/* DEBUG CLI CRASH (systemConfig stack usage reduction) */ 18245544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt/**************************************************************/ 18345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt 18445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidtstatic paramInfo_t gSystemCfgParam; 18545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidtstatic UINT8 curRsnData[255]; 18645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt/**************************************************************/ 18745544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt 18864064216a8433360745f69edddce19a606659163The Android Open Source Project/*********************************************************************** 18964064216a8433360745f69edddce19a606659163The Android Open Source Project * siteMgr_disSelectSite 19064064216a8433360745f69edddce19a606659163The Android Open Source Project *********************************************************************** 19164064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: Called by the SME SM in order to dis select the primary site. 19264064216a8433360745f69edddce19a606659163The Android Open Source Project The function set the primary site pointer to NULL and set its type to type regular 19364064216a8433360745f69edddce19a606659163The Android Open Source Project 19464064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT: hSiteMgr - site mgr handle. 19564064216a8433360745f69edddce19a606659163The Android Open Source Project 19664064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT: 19764064216a8433360745f69edddce19a606659163The Android Open Source Project 19864064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN: OK 19964064216a8433360745f69edddce19a606659163The Android Open Source Project 20064064216a8433360745f69edddce19a606659163The Android Open Source Project************************************************************************/ 20164064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS siteMgr_disSelectSite(TI_HANDLE hSiteMgr) 20264064216a8433360745f69edddce19a606659163The Android Open Source Project{ 20364064216a8433360745f69edddce19a606659163The Android Open Source Project siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr; 20464064216a8433360745f69edddce19a606659163The Android Open Source Project 20564064216a8433360745f69edddce19a606659163The Android Open Source Project /* This protection is because in the case that the BSS was LOST the primary site was removed already. */ 20664064216a8433360745f69edddce19a606659163The Android Open Source Project if (pSiteMgr->pSitesMgmtParams->pPrimarySite != NULL) 20764064216a8433360745f69edddce19a606659163The Android Open Source Project { 20864064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("siteMgr_disSelectSite REMOVE Primary ssid=%s, bssid= 0x%x-0x%x-0x%x-0x%x-0x%x-0x%x\n\n", 20964064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->pSitesMgmtParams->pPrimarySite->ssid.ssidString, 21064064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->pSitesMgmtParams->pPrimarySite->bssid.addr[0], pSiteMgr->pSitesMgmtParams->pPrimarySite->bssid.addr[1], pSiteMgr->pSitesMgmtParams->pPrimarySite->bssid.addr[2], 21164064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->pSitesMgmtParams->pPrimarySite->bssid.addr[3], pSiteMgr->pSitesMgmtParams->pPrimarySite->bssid.addr[4], pSiteMgr->pSitesMgmtParams->pPrimarySite->bssid.addr[5] )); 21264064216a8433360745f69edddce19a606659163The Android Open Source Project 21364064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->pSitesMgmtParams->pPrimarySite->siteType = SITE_REGULAR; 21464064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->pSitesMgmtParams->pPrevPrimarySite = pSiteMgr->pSitesMgmtParams->pPrimarySite; 21564064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->pSitesMgmtParams->pPrimarySite = NULL; 21664064216a8433360745f69edddce19a606659163The Android Open Source Project } 21764064216a8433360745f69edddce19a606659163The Android Open Source Project 21864064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 21964064216a8433360745f69edddce19a606659163The Android Open Source Project} 22064064216a8433360745f69edddce19a606659163The Android Open Source Project 22164064216a8433360745f69edddce19a606659163The Android Open Source Project/*********************************************************************** 22264064216a8433360745f69edddce19a606659163The Android Open Source Project * siteMgr_selectSite 22364064216a8433360745f69edddce19a606659163The Android Open Source Project *********************************************************************** 22464064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: Site selection function. Called by the SME SM in order to select 22564064216a8433360745f69edddce19a606659163The Android Open Source Project the best site for teh station. 22664064216a8433360745f69edddce19a606659163The Android Open Source Project The function go over the site table, and for each site it calls the match functions 22764064216a8433360745f69edddce19a606659163The Android Open Source Project If one fo the functions returns NO_MATCH from some reason, it skips the current site 22864064216a8433360745f69edddce19a606659163The Android Open Source Project and move to the next one. 22964064216a8433360745f69edddce19a606659163The Android Open Source Project The site that has the biggest bit map is chosen. 23064064216a8433360745f69edddce19a606659163The Android Open Source Project - If a site is chosen, the function calls the 'systemConfig()' function in order 23164064216a8433360745f69edddce19a606659163The Android Open Source Project to configure the station with the chosen site attribute. Than it reports 23264064216a8433360745f69edddce19a606659163The Android Open Source Project a select status success to the SME SM. 23364064216a8433360745f69edddce19a606659163The Android Open Source Project - If no site is chosen & the desired BSS type is infrastructure, it reports 23464064216a8433360745f69edddce19a606659163The Android Open Source Project a select status failure to the SME SM. 23564064216a8433360745f69edddce19a606659163The Android Open Source Project - If no site is chosen but the desired BSS type is IBSS, we create a self site by adding an entry 23664064216a8433360745f69edddce19a606659163The Android Open Source Project to the site table, than we configure the system and reports a select status success to the SME SM. 23764064216a8433360745f69edddce19a606659163The Android Open Source Project 23864064216a8433360745f69edddce19a606659163The Android Open Source Project NOTE: if the reScanFlag is set, means we received a scan command from the utility while in the 23964064216a8433360745f69edddce19a606659163The Android Open Source Project previous scanning, we report a select status failure to the SME SM because a re scan is needed 24064064216a8433360745f69edddce19a606659163The Android Open Source Project and we don't perform a selection. 24164064216a8433360745f69edddce19a606659163The Android Open Source Project 24264064216a8433360745f69edddce19a606659163The Android Open Source Project 24364064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT: hSiteMgr - site mgr handle. 24464064216a8433360745f69edddce19a606659163The Android Open Source Project 24564064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT: 24664064216a8433360745f69edddce19a606659163The Android Open Source Project 24764064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN: OK 24864064216a8433360745f69edddce19a606659163The Android Open Source Project 24964064216a8433360745f69edddce19a606659163The Android Open Source Project************************************************************************/ 25064064216a8433360745f69edddce19a606659163The Android Open Source ProjectsiteEntry_t* siteMgr_selectSiteFromTable(TI_HANDLE hSiteMgr) 25164064216a8433360745f69edddce19a606659163The Android Open Source Project{ 25264064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 metric; 25364064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 prevMatchingLevel = 0; 25464064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 siteIndex, tableIndex, numberOfSites = 0; 25564064216a8433360745f69edddce19a606659163The Android Open Source Project siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr; 256b6ad5d195ebff3812ef53a65edfe329372506491Dmitry Shmidt siteEntry_t *pSiteEntry, *pLastMatchSite = NULL; 25764064216a8433360745f69edddce19a606659163The Android Open Source Project rsnData_t rsnData; 258b6ad5d195ebff3812ef53a65edfe329372506491Dmitry Shmidt dot11_RSN_t *pRsnIe; 259b6ad5d195ebff3812ef53a65edfe329372506491Dmitry Shmidt UINT8 rsnIECount=0; 260b6ad5d195ebff3812ef53a65edfe329372506491Dmitry Shmidt UINT8 length=0; 26164064216a8433360745f69edddce19a606659163The Android Open Source Project paramInfo_t param; 262b6ad5d195ebff3812ef53a65edfe329372506491Dmitry Shmidt radioBand_e radioBand; 26364064216a8433360745f69edddce19a606659163The Android Open Source Project BOOL bRegulatoryDomainEnabled; 26464064216a8433360745f69edddce19a606659163The Android Open Source Project 26564064216a8433360745f69edddce19a606659163The Android Open Source Project siteTablesParams_t* currTable = pSiteMgr->pSitesMgmtParams->pCurrentSiteTable; 26664064216a8433360745f69edddce19a606659163The Android Open Source Project 267b6ad5d195ebff3812ef53a65edfe329372506491Dmitry Shmidt WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, 26864064216a8433360745f69edddce19a606659163The Android Open Source Project ("SITE MATCH , Desired ssid (%s) len= (%d)\n\n", 26964064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->pDesiredParams->siteMgrDesiredSSID.ssidString, 27064064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->pDesiredParams->siteMgrDesiredSSID.len)); 27164064216a8433360745f69edddce19a606659163The Android Open Source Project 27264064216a8433360745f69edddce19a606659163The Android Open Source Project 27364064216a8433360745f69edddce19a606659163The Android Open Source Project for (tableIndex = 0; tableIndex < NUM_OF_SITE_TABLE ; tableIndex++) 27464064216a8433360745f69edddce19a606659163The Android Open Source Project { 27564064216a8433360745f69edddce19a606659163The Android Open Source Project /* If regulatoryDomains is enable, it should be checked if Country IE was detected */ 27664064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = REGULATORY_DOMAIN_ENABLED_PARAM; 27764064216a8433360745f69edddce19a606659163The Android Open Source Project regulatoryDomain_getParam(pSiteMgr->hRegulatoryDomain,¶m); 27864064216a8433360745f69edddce19a606659163The Android Open Source Project bRegulatoryDomainEnabled = param.content.regulatoryDomainEnabled; 27964064216a8433360745f69edddce19a606659163The Android Open Source Project 28064064216a8433360745f69edddce19a606659163The Android Open Source Project if(currTable == &pSiteMgr->pSitesMgmtParams->dot11BG_sitesTables) 28164064216a8433360745f69edddce19a606659163The Android Open Source Project radioBand = RADIO_BAND_2_4_GHZ; 28264064216a8433360745f69edddce19a606659163The Android Open Source Project else 28364064216a8433360745f69edddce19a606659163The Android Open Source Project radioBand = RADIO_BAND_5_0_GHZ; 28464064216a8433360745f69edddce19a606659163The Android Open Source Project 28564064216a8433360745f69edddce19a606659163The Android Open Source Project /* Check if country code was received */ 28664064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = REGULATORY_DOMAIN_IS_COUNTRY_FOUND; 28764064216a8433360745f69edddce19a606659163The Android Open Source Project param.content.eRadioBand = radioBand; 28864064216a8433360745f69edddce19a606659163The Android Open Source Project regulatoryDomain_getParam(pSiteMgr->hRegulatoryDomain,¶m); 28964064216a8433360745f69edddce19a606659163The Android Open Source Project 29064064216a8433360745f69edddce19a606659163The Android Open Source Project if( ( bRegulatoryDomainEnabled == TRUE) && ( !param.content.bIsCountryFound ) ) 29164064216a8433360745f69edddce19a606659163The Android Open Source Project { 29264064216a8433360745f69edddce19a606659163The Android Open Source Project if( radioBand == RADIO_BAND_2_4_GHZ) 29364064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_WARNING(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("There is no valid Country IE for 2.4G band\n")); 29464064216a8433360745f69edddce19a606659163The Android Open Source Project else 29564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_WARNING(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("There is no valid Country IE for 5G band\n")); 29664064216a8433360745f69edddce19a606659163The Android Open Source Project 29764064216a8433360745f69edddce19a606659163The Android Open Source Project if(pSiteMgr->pDesiredParams->siteMgrDesiredDot11Mode == DOT11_DUAL_MODE) 29864064216a8433360745f69edddce19a606659163The Android Open Source Project { 29964064216a8433360745f69edddce19a606659163The Android Open Source Project /* change site table */ 30064064216a8433360745f69edddce19a606659163The Android Open Source Project if(currTable == &pSiteMgr->pSitesMgmtParams->dot11BG_sitesTables) 30164064216a8433360745f69edddce19a606659163The Android Open Source Project { 30264064216a8433360745f69edddce19a606659163The Android Open Source Project currTable = (siteTablesParams_t *)&pSiteMgr->pSitesMgmtParams->dot11A_sitesTables; 30364064216a8433360745f69edddce19a606659163The Android Open Source Project/* siteMgr_updateRates(pSiteMgr, TRUE, TRUE);*/ 30464064216a8433360745f69edddce19a606659163The Android Open Source Project } 30564064216a8433360745f69edddce19a606659163The Android Open Source Project else 30664064216a8433360745f69edddce19a606659163The Android Open Source Project { 30764064216a8433360745f69edddce19a606659163The Android Open Source Project currTable = &pSiteMgr->pSitesMgmtParams->dot11BG_sitesTables; 30864064216a8433360745f69edddce19a606659163The Android Open Source Project/* siteMgr_updateRates(pSiteMgr, FALSE, TRUE);*/ 30964064216a8433360745f69edddce19a606659163The Android Open Source Project } 31064064216a8433360745f69edddce19a606659163The Android Open Source Project } 31164064216a8433360745f69edddce19a606659163The Android Open Source Project continue; 31264064216a8433360745f69edddce19a606659163The Android Open Source Project } 31364064216a8433360745f69edddce19a606659163The Android Open Source Project 31464064216a8433360745f69edddce19a606659163The Android Open Source Project for (siteIndex = 0; siteIndex < currTable->maxNumOfSites; siteIndex++) 31564064216a8433360745f69edddce19a606659163The Android Open Source Project { 31664064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteEntry = &(currTable->siteTable[siteIndex]); 31764064216a8433360745f69edddce19a606659163The Android Open Source Project 31864064216a8433360745f69edddce19a606659163The Android Open Source Project length = 0; 31964064216a8433360745f69edddce19a606659163The Android Open Source Project metric = 0; 32064064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteEntry->matchingLevel = 0; 32164064216a8433360745f69edddce19a606659163The Android Open Source Project 32264064216a8433360745f69edddce19a606659163The Android Open Source Project 32364064216a8433360745f69edddce19a606659163The Android Open Source Project if(pSiteEntry->siteType == SITE_PRIMARY) 32464064216a8433360745f69edddce19a606659163The Android Open Source Project { 32564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("SITE PRIMARY, ssid (%s len= %d ), %X-%X-%X-%X-%X-%X\n\n", pSiteEntry->ssid.ssidString, pSiteEntry->ssid.len, pSiteEntry->bssid.addr[0], pSiteEntry->bssid.addr[1], pSiteEntry->bssid.addr[2], pSiteEntry->bssid.addr[3], pSiteEntry->bssid.addr[4], pSiteEntry->bssid.addr[5])); 32664064216a8433360745f69edddce19a606659163The Android Open Source Project } 32764064216a8433360745f69edddce19a606659163The Android Open Source Project 32864064216a8433360745f69edddce19a606659163The Android Open Source Project 32964064216a8433360745f69edddce19a606659163The Android Open Source Project if (pSiteEntry->siteType != SITE_REGULAR) 33064064216a8433360745f69edddce19a606659163The Android Open Source Project continue; 33164064216a8433360745f69edddce19a606659163The Android Open Source Project 33264064216a8433360745f69edddce19a606659163The Android Open Source Project numberOfSites++; 33364064216a8433360745f69edddce19a606659163The Android Open Source Project 33464064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteEntry->ssid.ssidString[pSiteEntry->ssid.len] = 0; 33564064216a8433360745f69edddce19a606659163The Android Open Source Project if (ssidMatchingLevel(pSiteMgr, pSiteEntry) != MATCH) 33664064216a8433360745f69edddce19a606659163The Android Open Source Project { 33764064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("SITE MATCH FAILURE, ssid (%s len= %d ), %X-%X-%X-%X-%X-%X\n\n", pSiteEntry->ssid.ssidString, pSiteEntry->ssid.len, pSiteEntry->bssid.addr[0], pSiteEntry->bssid.addr[1], pSiteEntry->bssid.addr[2], pSiteEntry->bssid.addr[3], pSiteEntry->bssid.addr[4], pSiteEntry->bssid.addr[5])); 33864064216a8433360745f69edddce19a606659163The Android Open Source Project continue; 33964064216a8433360745f69edddce19a606659163The Android Open Source Project } 34064064216a8433360745f69edddce19a606659163The Android Open Source Project 34164064216a8433360745f69edddce19a606659163The Android Open Source Project if (bssidMatchingLevel(pSiteMgr, pSiteEntry) != MATCH) 34264064216a8433360745f69edddce19a606659163The Android Open Source Project { 34364064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("SITE MATCH FAILURE, bssid, %X-%X-%X-%X-%X-%X\n\n", pSiteEntry->bssid.addr[0], pSiteEntry->bssid.addr[1], pSiteEntry->bssid.addr[2], pSiteEntry->bssid.addr[3], pSiteEntry->bssid.addr[4], pSiteEntry->bssid.addr[5])); 34464064216a8433360745f69edddce19a606659163The Android Open Source Project continue; 34564064216a8433360745f69edddce19a606659163The Android Open Source Project } 34664064216a8433360745f69edddce19a606659163The Android Open Source Project 34764064216a8433360745f69edddce19a606659163The Android Open Source Project if (bssTypeMatchingLevel(pSiteMgr, pSiteEntry) != MATCH) 34864064216a8433360745f69edddce19a606659163The Android Open Source Project { 34964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("SITE MATCH FAILURE, bss Type, %X-%X-%X-%X-%X-%X\n", pSiteEntry->bssid.addr[0], pSiteEntry->bssid.addr[1], pSiteEntry->bssid.addr[2], pSiteEntry->bssid.addr[3], pSiteEntry->bssid.addr[4], pSiteEntry->bssid.addr[5])); 35064064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("SITE MATCH FAILURE, bss Type, siteMgrDesiredBSSType=%d, bssType=%d\n",pSiteMgr->pDesiredParams->siteMgrDesiredBSSType, pSiteEntry->bssType)); 35164064216a8433360745f69edddce19a606659163The Android Open Source Project continue; 35264064216a8433360745f69edddce19a606659163The Android Open Source Project } 35364064216a8433360745f69edddce19a606659163The Android Open Source Project 35464064216a8433360745f69edddce19a606659163The Android Open Source Project if (ratesMatchingLevel(pSiteMgr, pSiteEntry, &metric) != MATCH) 35564064216a8433360745f69edddce19a606659163The Android Open Source Project { 35664064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteEntry->matchingLevel = 0; 35764064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("SITE MATCH FAILURE, rates, %X-%X-%X-%X-%X-%X\n\n", pSiteEntry->bssid.addr[0], pSiteEntry->bssid.addr[1], pSiteEntry->bssid.addr[2], pSiteEntry->bssid.addr[3], pSiteEntry->bssid.addr[4], pSiteEntry->bssid.addr[5])); 35864064216a8433360745f69edddce19a606659163The Android Open Source Project continue; 35964064216a8433360745f69edddce19a606659163The Android Open Source Project } 36064064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteEntry->matchingLevel |= metric << METRIC_RATES_SHIFT; 36164064216a8433360745f69edddce19a606659163The Android Open Source Project 36264064216a8433360745f69edddce19a606659163The Android Open Source Project 36364064216a8433360745f69edddce19a606659163The Android Open Source Project /* Get the RSN IE data */ 36464064216a8433360745f69edddce19a606659163The Android Open Source Project pRsnIe = pSiteEntry->pRsnIe; 36564064216a8433360745f69edddce19a606659163The Android Open Source Project rsnIECount = 0; 36664064216a8433360745f69edddce19a606659163The Android Open Source Project while ((length < pSiteEntry->rsnIeLen) && (rsnIECount < MAX_RSN_IE)) 36764064216a8433360745f69edddce19a606659163The Android Open Source Project { 36864064216a8433360745f69edddce19a606659163The Android Open Source Project curRsnData[0+length] = pRsnIe->hdr.eleId; 36964064216a8433360745f69edddce19a606659163The Android Open Source Project curRsnData[1+length] = pRsnIe->hdr.eleLen; 37064064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pSiteMgr->hOs, &curRsnData[2+length], (void *)pRsnIe->rsnIeData, pRsnIe->hdr.eleLen); 37164064216a8433360745f69edddce19a606659163The Android Open Source Project length += pRsnIe->hdr.eleLen+2; 37264064216a8433360745f69edddce19a606659163The Android Open Source Project pRsnIe += 1; 37364064216a8433360745f69edddce19a606659163The Android Open Source Project rsnIECount++; 37464064216a8433360745f69edddce19a606659163The Android Open Source Project } 37564064216a8433360745f69edddce19a606659163The Android Open Source Project if (length<pSiteEntry->rsnIeLen) 37664064216a8433360745f69edddce19a606659163The Android Open Source Project { 37764064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, 37864064216a8433360745f69edddce19a606659163The Android Open Source Project ("siteMgr_selectSiteFromTable, RSN IE is too long: rsnIeLen=%d, MAX_RSN_IE=%d\n", 37964064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteEntry->rsnIeLen, MAX_RSN_IE)); 38064064216a8433360745f69edddce19a606659163The Android Open Source Project } 38164064216a8433360745f69edddce19a606659163The Android Open Source Project 38264064216a8433360745f69edddce19a606659163The Android Open Source Project rsnData.pIe = (pSiteEntry->rsnIeLen==0) ? NULL :curRsnData; 38364064216a8433360745f69edddce19a606659163The Android Open Source Project rsnData.ieLen = pSiteEntry->rsnIeLen; 38464064216a8433360745f69edddce19a606659163The Android Open Source Project rsnData.privacy = pSiteEntry->privacy; 38564064216a8433360745f69edddce19a606659163The Android Open Source Project 38664064216a8433360745f69edddce19a606659163The Android Open Source Project if (rsn_evalSite(pSiteMgr->hRsn, &rsnData, pSiteEntry->bssType, pSiteEntry->bssid, &metric) != OK) 38764064216a8433360745f69edddce19a606659163The Android Open Source Project { 38864064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteEntry->matchingLevel = 0; 38964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("SITE MATCH FAILURE, RSN, %X-%X-%X-%X-%X-%X\n\n", pSiteEntry->bssid.addr[0], pSiteEntry->bssid.addr[1], pSiteEntry->bssid.addr[2], pSiteEntry->bssid.addr[3], pSiteEntry->bssid.addr[4], pSiteEntry->bssid.addr[5])); 39064064216a8433360745f69edddce19a606659163The Android Open Source Project continue; 39164064216a8433360745f69edddce19a606659163The Android Open Source Project } 39264064216a8433360745f69edddce19a606659163The Android Open Source Project 39364064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteEntry->matchingLevel |= metric << METRIC_PRIVACY_SHIFT; 39464064216a8433360745f69edddce19a606659163The Android Open Source Project 39564064216a8433360745f69edddce19a606659163The Android Open Source Project 39664064216a8433360745f69edddce19a606659163The Android Open Source Project 39764064216a8433360745f69edddce19a606659163The Android Open Source Project 39864064216a8433360745f69edddce19a606659163The Android Open Source Project#if 0 /* TODO - Define 4x evaluation */ 39964064216a8433360745f69edddce19a606659163The Android Open Source Project if (ctrlData_evalSite(pSiteMgr->hCtrlData, &pSiteEntry->fourXParams, &metric) != OK) 40064064216a8433360745f69edddce19a606659163The Android Open Source Project { 40164064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteEntry->matchingLevel = 0; 40264064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("SITE MATCH FAILURE, RSN, %X-%X-%X-%X-%X-%X\n\n", pSiteEntry->bssid.addr[0], pSiteEntry->bssid.addr[1], pSiteEntry->bssid.addr[2], pSiteEntry->bssid.addr[3], pSiteEntry->bssid.addr[4], pSiteEntry->bssid.addr[5])); 40364064216a8433360745f69edddce19a606659163The Android Open Source Project continue; 40464064216a8433360745f69edddce19a606659163The Android Open Source Project } 40564064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteEntry->matchingLevel |= metric << METRIC_4X_SHIFT; 40664064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 40764064216a8433360745f69edddce19a606659163The Android Open Source Project 40864064216a8433360745f69edddce19a606659163The Android Open Source Project if (modulationTypeMatchingLevel(pSiteMgr, pSiteEntry, &metric) != MATCH) 40964064216a8433360745f69edddce19a606659163The Android Open Source Project { 41064064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteEntry->matchingLevel = 0; 41164064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("SITE MATCH FAILURE, modulation Type, %X-%X-%X-%X-%X-%X\n\n", pSiteEntry->bssid.addr[0], pSiteEntry->bssid.addr[1], pSiteEntry->bssid.addr[2], pSiteEntry->bssid.addr[3], pSiteEntry->bssid.addr[4], pSiteEntry->bssid.addr[5])); 41264064216a8433360745f69edddce19a606659163The Android Open Source Project continue; 41364064216a8433360745f69edddce19a606659163The Android Open Source Project } 41464064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteEntry->matchingLevel |= metric << METRIC_MODULATION_SHIFT; 41564064216a8433360745f69edddce19a606659163The Android Open Source Project 41664064216a8433360745f69edddce19a606659163The Android Open Source Project if (preambleTypeMatchingLevel(pSiteMgr, pSiteEntry, &metric) != MATCH) 41764064216a8433360745f69edddce19a606659163The Android Open Source Project { 41864064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteEntry->matchingLevel = 0; 41964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("SITE MATCH FAILURE, preamble, %X-%X-%X-%X-%X-%X\n\n", pSiteEntry->bssid.addr[0], pSiteEntry->bssid.addr[1], pSiteEntry->bssid.addr[2], pSiteEntry->bssid.addr[3], pSiteEntry->bssid.addr[4], pSiteEntry->bssid.addr[5])); 42064064216a8433360745f69edddce19a606659163The Android Open Source Project continue; 42164064216a8433360745f69edddce19a606659163The Android Open Source Project } 42264064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteEntry->matchingLevel |= metric << METRIC_PREAMBLE_SHIFT; 42364064216a8433360745f69edddce19a606659163The Android Open Source Project 42464064216a8433360745f69edddce19a606659163The Android Open Source Project if (channelMatchingLevel(pSiteMgr, pSiteEntry, &metric) != MATCH) 42564064216a8433360745f69edddce19a606659163The Android Open Source Project { 42664064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteEntry->matchingLevel = 0; 42764064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("SITE MATCH FAILURE, channel, %X-%X-%X-%X-%X-%X\n\n", pSiteEntry->bssid.addr[0], pSiteEntry->bssid.addr[1], pSiteEntry->bssid.addr[2], pSiteEntry->bssid.addr[3], pSiteEntry->bssid.addr[4], pSiteEntry->bssid.addr[5])); 42864064216a8433360745f69edddce19a606659163The Android Open Source Project continue; 42964064216a8433360745f69edddce19a606659163The Android Open Source Project } 43064064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteEntry->matchingLevel |= metric << METRIC_CHANNEL_SHIFT; 43164064216a8433360745f69edddce19a606659163The Android Open Source Project 43264064216a8433360745f69edddce19a606659163The Android Open Source Project if (spectrumManagementMatchingLevel(pSiteMgr,pSiteEntry->capabilities,&metric) != MATCH) 43364064216a8433360745f69edddce19a606659163The Android Open Source Project { 43464064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteEntry->matchingLevel = 0; 43564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("SITE MATCH FAILURE, spectrum management.\n\n")); 43664064216a8433360745f69edddce19a606659163The Android Open Source Project continue; 43764064216a8433360745f69edddce19a606659163The Android Open Source Project } 43864064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteEntry->matchingLevel |= metric << METRIC_SPECTRUM_MANAGEMENT_SHIFT; 43964064216a8433360745f69edddce19a606659163The Android Open Source Project 44064064216a8433360745f69edddce19a606659163The Android Open Source Project if (rxLevelMatchingLevel(pSiteMgr, pSiteEntry, &metric) != MATCH) 44164064216a8433360745f69edddce19a606659163The Android Open Source Project { 44264064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteEntry->matchingLevel = 0; 44364064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("SITE MATCH FAILURE, Rx level, %X-%X-%X-%X-%X-%X\n\n", pSiteEntry->bssid.addr[0], pSiteEntry->bssid.addr[1], pSiteEntry->bssid.addr[2], pSiteEntry->bssid.addr[3], pSiteEntry->bssid.addr[4], pSiteEntry->bssid.addr[5])); 44464064216a8433360745f69edddce19a606659163The Android Open Source Project continue; 44564064216a8433360745f69edddce19a606659163The Android Open Source Project } 44664064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteEntry->matchingLevel |= metric << METRIC_RX_LEVEL_SHIFT; 44764064216a8433360745f69edddce19a606659163The Android Open Source Project 44864064216a8433360745f69edddce19a606659163The Android Open Source Project if (attemptsNumberMatchingLevel(pSiteMgr, pSiteEntry, &metric) != MATCH) 44964064216a8433360745f69edddce19a606659163The Android Open Source Project { 45064064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteEntry->matchingLevel = 0; 45164064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("SITE MATCH FAILURE, Number of attempts, %X-%X-%X-%X-%X-%X\n\n", pSiteEntry->bssid.addr[0], pSiteEntry->bssid.addr[1], pSiteEntry->bssid.addr[2], pSiteEntry->bssid.addr[3], pSiteEntry->bssid.addr[4], pSiteEntry->bssid.addr[5])); 45264064216a8433360745f69edddce19a606659163The Android Open Source Project continue; 45364064216a8433360745f69edddce19a606659163The Android Open Source Project } 45464064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteEntry->matchingLevel |= metric << METRIC_ATTEMPTS_NUMBER_SHIFT; 45564064216a8433360745f69edddce19a606659163The Android Open Source Project 45664064216a8433360745f69edddce19a606659163The Android Open Source Project if (prioritySiteMatchingLevel(pSiteMgr, pSiteEntry, &metric) != MATCH) 45764064216a8433360745f69edddce19a606659163The Android Open Source Project { 45864064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteEntry->matchingLevel = 0; 45964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("SITE MATCH FAILURE, priority Site, %X-%X-%X-%X-%X-%X\n\n", pSiteEntry->bssid.addr[0], pSiteEntry->bssid.addr[1], pSiteEntry->bssid.addr[2], pSiteEntry->bssid.addr[3], pSiteEntry->bssid.addr[4], pSiteEntry->bssid.addr[5])); 46064064216a8433360745f69edddce19a606659163The Android Open Source Project continue; 46164064216a8433360745f69edddce19a606659163The Android Open Source Project } 46264064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteEntry->matchingLevel |= metric << METRIC_PRIORITY_SITE_SHIFT; 46364064216a8433360745f69edddce19a606659163The Android Open Source Project 46464064216a8433360745f69edddce19a606659163The Android Open Source Project if(pSiteEntry->matchingLevel > prevMatchingLevel) 46564064216a8433360745f69edddce19a606659163The Android Open Source Project { 46664064216a8433360745f69edddce19a606659163The Android Open Source Project prevMatchingLevel = pSiteEntry->matchingLevel; 46764064216a8433360745f69edddce19a606659163The Android Open Source Project pLastMatchSite = pSiteEntry; 46864064216a8433360745f69edddce19a606659163The Android Open Source Project } 46964064216a8433360745f69edddce19a606659163The Android Open Source Project } 47064064216a8433360745f69edddce19a606659163The Android Open Source Project if(pSiteMgr->pDesiredParams->siteMgrDesiredDot11Mode == DOT11_DUAL_MODE) 47164064216a8433360745f69edddce19a606659163The Android Open Source Project { 47264064216a8433360745f69edddce19a606659163The Android Open Source Project /* change site table */ 47364064216a8433360745f69edddce19a606659163The Android Open Source Project if(currTable == &pSiteMgr->pSitesMgmtParams->dot11BG_sitesTables) 47464064216a8433360745f69edddce19a606659163The Android Open Source Project { 47564064216a8433360745f69edddce19a606659163The Android Open Source Project currTable = (siteTablesParams_t *)&pSiteMgr->pSitesMgmtParams->dot11A_sitesTables; 47664064216a8433360745f69edddce19a606659163The Android Open Source Project/* siteMgr_updateRates(pSiteMgr, TRUE, TRUE);*/ 47764064216a8433360745f69edddce19a606659163The Android Open Source Project } 47864064216a8433360745f69edddce19a606659163The Android Open Source Project else 47964064216a8433360745f69edddce19a606659163The Android Open Source Project { 48064064216a8433360745f69edddce19a606659163The Android Open Source Project currTable = &pSiteMgr->pSitesMgmtParams->dot11BG_sitesTables; 48164064216a8433360745f69edddce19a606659163The Android Open Source Project /* siteMgr_updateRates(pSiteMgr, FALSE, TRUE);*/ 48264064216a8433360745f69edddce19a606659163The Android Open Source Project } 48364064216a8433360745f69edddce19a606659163The Android Open Source Project } 48464064216a8433360745f69edddce19a606659163The Android Open Source Project else 48564064216a8433360745f69edddce19a606659163The Android Open Source Project break; 48664064216a8433360745f69edddce19a606659163The Android Open Source Project 48764064216a8433360745f69edddce19a606659163The Android Open Source Project } 48864064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, (" NUMBER OF SITES: %d\n\n", numberOfSites)); 48964064216a8433360745f69edddce19a606659163The Android Open Source Project 49064064216a8433360745f69edddce19a606659163The Android Open Source Project return pLastMatchSite; 49164064216a8433360745f69edddce19a606659163The Android Open Source Project} 49264064216a8433360745f69edddce19a606659163The Android Open Source Project 49364064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS siteMgr_selectSite(TI_HANDLE hSiteMgr) 49464064216a8433360745f69edddce19a606659163The Android Open Source Project{ 49564064216a8433360745f69edddce19a606659163The Android Open Source Project radioBand_e radioBand; 49664064216a8433360745f69edddce19a606659163The Android Open Source Project paramInfo_t param; 49764064216a8433360745f69edddce19a606659163The Android Open Source Project siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr; 49864064216a8433360745f69edddce19a606659163The Android Open Source Project 49964064216a8433360745f69edddce19a606659163The Android Open Source Project siteEntry_t* pLastMatchSite = siteMgr_selectSiteFromTable(hSiteMgr); 50064064216a8433360745f69edddce19a606659163The Android Open Source Project 50164064216a8433360745f69edddce19a606659163The Android Open Source Project if (pLastMatchSite != NULL) 50264064216a8433360745f69edddce19a606659163The Android Open Source Project { 50364064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->pSitesMgmtParams->pPrimarySite = pLastMatchSite; 50464064216a8433360745f69edddce19a606659163The Android Open Source Project pLastMatchSite->siteType = SITE_PRIMARY; 50564064216a8433360745f69edddce19a606659163The Android Open Source Project 50664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("SELECT SUCCESS FROM TABLE, bssid: %X-%X-%X-%X-%X-%X\n\n", pLastMatchSite->bssid.addr[0], pLastMatchSite->bssid.addr[1], pLastMatchSite->bssid.addr[2], pLastMatchSite->bssid.addr[3], pLastMatchSite->bssid.addr[4], pLastMatchSite->bssid.addr[5])); 50764064216a8433360745f69edddce19a606659163The Android Open Source Project 50864064216a8433360745f69edddce19a606659163The Android Open Source Project 50964064216a8433360745f69edddce19a606659163The Android Open Source Project /***************** Config Connection *************************/ 51064064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = CONN_TYPE_PARAM; 51164064216a8433360745f69edddce19a606659163The Android Open Source Project if (pLastMatchSite->bssType == BSS_INDEPENDENT) 51264064216a8433360745f69edddce19a606659163The Android Open Source Project param.content.connType = CONNECTION_IBSS; 51364064216a8433360745f69edddce19a606659163The Android Open Source Project else 51464064216a8433360745f69edddce19a606659163The Android Open Source Project param.content.connType = CONNECTION_INFRA; 51564064216a8433360745f69edddce19a606659163The Android Open Source Project conn_setParam(pSiteMgr->hConn, ¶m); 51664064216a8433360745f69edddce19a606659163The Android Open Source Project 51764064216a8433360745f69edddce19a606659163The Android Open Source Project return smeSm_reportSelectStatus(pSiteMgr->hSmeSm, (mgmtStatus_e)SELECT_STATUS_SUCCESS); 51864064216a8433360745f69edddce19a606659163The Android Open Source Project } 51964064216a8433360745f69edddce19a606659163The Android Open Source Project 52064064216a8433360745f69edddce19a606659163The Android Open Source Project if ((pSiteMgr->pDesiredParams->siteMgrDesiredBSSType == BSS_ANY) || 52164064216a8433360745f69edddce19a606659163The Android Open Source Project (pSiteMgr->pDesiredParams->siteMgrDesiredBSSType == BSS_INDEPENDENT)) /* Means we can start our own BSS */ 52264064216a8433360745f69edddce19a606659163The Android Open Source Project { 52364064216a8433360745f69edddce19a606659163The Android Open Source Project 52464064216a8433360745f69edddce19a606659163The Android Open Source Project if (pSiteMgr->pDesiredParams->siteMgrDesiredChannel >= SITE_MGR_CHANNEL_A_MIN) 52564064216a8433360745f69edddce19a606659163The Android Open Source Project { 52664064216a8433360745f69edddce19a606659163The Android Open Source Project radioBand = RADIO_BAND_5_0_GHZ; 52764064216a8433360745f69edddce19a606659163The Android Open Source Project } 52864064216a8433360745f69edddce19a606659163The Android Open Source Project else { 52964064216a8433360745f69edddce19a606659163The Android Open Source Project radioBand = RADIO_BAND_2_4_GHZ; 53064064216a8433360745f69edddce19a606659163The Android Open Source Project } 53164064216a8433360745f69edddce19a606659163The Android Open Source Project 53264064216a8433360745f69edddce19a606659163The Android Open Source Project /* 53364064216a8433360745f69edddce19a606659163The Android Open Source Project update the regulatory domain with the selected band 53464064216a8433360745f69edddce19a606659163The Android Open Source Project */ 53564064216a8433360745f69edddce19a606659163The Android Open Source Project /* Check if the selected channel is valid according to regDomain */ 53664064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = REGULATORY_DOMAIN_GET_SCAN_CAPABILITIES; 53764064216a8433360745f69edddce19a606659163The Android Open Source Project param.content.channelCapabilityReq.band = radioBand; 53864064216a8433360745f69edddce19a606659163The Android Open Source Project param.content.channelCapabilityReq.scanOption = ACTIVE_SCANNING; 53964064216a8433360745f69edddce19a606659163The Android Open Source Project param.content.channelCapabilityReq.channelNum = pSiteMgr->pDesiredParams->siteMgrDesiredChannel; 54064064216a8433360745f69edddce19a606659163The Android Open Source Project regulatoryDomain_getParam(pSiteMgr->hRegulatoryDomain,¶m); 54164064216a8433360745f69edddce19a606659163The Android Open Source Project if (!param.content.channelCapabilityRet.channelValidity) 54264064216a8433360745f69edddce19a606659163The Android Open Source Project { 54364064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("IBSS SELECT FAILURE - No channel !!!\n\n")); 54464064216a8433360745f69edddce19a606659163The Android Open Source Project return smeSm_reportSelectStatus(pSiteMgr->hSmeSm, (mgmtStatus_e)SELECT_STATUS_FAILURE); 54564064216a8433360745f69edddce19a606659163The Android Open Source Project } 54664064216a8433360745f69edddce19a606659163The Android Open Source Project 54764064216a8433360745f69edddce19a606659163The Android Open Source Project pLastMatchSite = addSelfSite(pSiteMgr); 54864064216a8433360745f69edddce19a606659163The Android Open Source Project if (pLastMatchSite == NULL) 54964064216a8433360745f69edddce19a606659163The Android Open Source Project { 55064064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("IBSS SELECT FAILURE - could not open self site !!!\n\n")); 55164064216a8433360745f69edddce19a606659163The Android Open Source Project return smeSm_reportSelectStatus(pSiteMgr->hSmeSm, (mgmtStatus_e)SELECT_STATUS_FAILURE); 55264064216a8433360745f69edddce19a606659163The Android Open Source Project } 55364064216a8433360745f69edddce19a606659163The Android Open Source Project 55464064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->pSitesMgmtParams->pPrimarySite = pLastMatchSite; 55564064216a8433360745f69edddce19a606659163The Android Open Source Project pLastMatchSite->siteType = SITE_SELF; 55664064216a8433360745f69edddce19a606659163The Android Open Source Project 55764064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("%%%%%%%%%%%%%% SELF SELECT SUCCESS, bssid: %X-%X-%X-%X-%X-%X %%%%%%%%%%%%%%\n\n", pLastMatchSite->bssid.addr[0], pLastMatchSite->bssid.addr[1], pLastMatchSite->bssid.addr[2], pLastMatchSite->bssid.addr[3], pLastMatchSite->bssid.addr[4], pLastMatchSite->bssid.addr[5])); 55864064216a8433360745f69edddce19a606659163The Android Open Source Project 55964064216a8433360745f69edddce19a606659163The Android Open Source Project /***************** Config Connection *************************/ 56064064216a8433360745f69edddce19a606659163The Android Open Source Project 56164064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = CONN_TYPE_PARAM; /* Connection Type*/ 56264064216a8433360745f69edddce19a606659163The Android Open Source Project param.content.connType = CONNECTION_SELF; 56364064216a8433360745f69edddce19a606659163The Android Open Source Project conn_setParam(pSiteMgr->hConn, ¶m); 56464064216a8433360745f69edddce19a606659163The Android Open Source Project 56564064216a8433360745f69edddce19a606659163The Android Open Source Project return smeSm_reportSelectStatus(pSiteMgr->hSmeSm, (mgmtStatus_e)SELECT_STATUS_SUCCESS); 56664064216a8433360745f69edddce19a606659163The Android Open Source Project } 56764064216a8433360745f69edddce19a606659163The Android Open Source Project 56864064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("SELECT FAILURE \n\n")); 56964064216a8433360745f69edddce19a606659163The Android Open Source Project 57064064216a8433360745f69edddce19a606659163The Android Open Source Project return smeSm_reportSelectStatus(pSiteMgr->hSmeSm, (mgmtStatus_e)SELECT_STATUS_FAILURE); 57164064216a8433360745f69edddce19a606659163The Android Open Source Project} 57264064216a8433360745f69edddce19a606659163The Android Open Source Project 57364064216a8433360745f69edddce19a606659163The Android Open Source Project 57464064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid siteMgr_setNotReceivedParameter(TI_HANDLE hSiteMgr, ssid_t* ssid , radioBand_e band) 57564064216a8433360745f69edddce19a606659163The Android Open Source Project{ 57664064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 siteIndex; 57764064216a8433360745f69edddce19a606659163The Android Open Source Project siteEntry_t *pSiteEntry; 57864064216a8433360745f69edddce19a606659163The Android Open Source Project siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr; 57964064216a8433360745f69edddce19a606659163The Android Open Source Project siteTablesParams_t* currTable=NULL; 58064064216a8433360745f69edddce19a606659163The Android Open Source Project 58164064216a8433360745f69edddce19a606659163The Android Open Source Project 58264064216a8433360745f69edddce19a606659163The Android Open Source Project /* 58364064216a8433360745f69edddce19a606659163The Android Open Source Project * Set the propiate site table. 58464064216a8433360745f69edddce19a606659163The Android Open Source Project */ 58564064216a8433360745f69edddce19a606659163The Android Open Source Project switch (band) { 58664064216a8433360745f69edddce19a606659163The Android Open Source Project case RADIO_BAND_2_4_GHZ : 58764064216a8433360745f69edddce19a606659163The Android Open Source Project currTable = &pSiteMgr->pSitesMgmtParams->dot11BG_sitesTables; 58864064216a8433360745f69edddce19a606659163The Android Open Source Project break; 58964064216a8433360745f69edddce19a606659163The Android Open Source Project 59064064216a8433360745f69edddce19a606659163The Android Open Source Project case RADIO_BAND_5_0_GHZ : 59164064216a8433360745f69edddce19a606659163The Android Open Source Project currTable = (siteTablesParams_t*)&pSiteMgr->pSitesMgmtParams->dot11A_sitesTables; 59264064216a8433360745f69edddce19a606659163The Android Open Source Project break; 59364064216a8433360745f69edddce19a606659163The Android Open Source Project 59464064216a8433360745f69edddce19a606659163The Android Open Source Project case RADIO_BAND_DUAL: 59564064216a8433360745f69edddce19a606659163The Android Open Source Project default: 59664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("siteMgr_setNotReceivedParameter() invalid band.\n")); 59764064216a8433360745f69edddce19a606659163The Android Open Source Project 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 * Increase the scanned sites "Not_Received" counter, this counter is used by the 60364064216a8433360745f69edddce19a606659163The Android Open Source Project * aging logic to clean old sites. 60464064216a8433360745f69edddce19a606659163The Android Open Source Project */ 60564064216a8433360745f69edddce19a606659163The Android Open Source Project for (siteIndex = 0; siteIndex < currTable->maxNumOfSites; siteIndex++) 60664064216a8433360745f69edddce19a606659163The Android Open Source Project { 60764064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteEntry = &(currTable->siteTable[siteIndex]); 60864064216a8433360745f69edddce19a606659163The Android Open Source Project 60964064216a8433360745f69edddce19a606659163The Android Open Source Project /* Self site & null site are never aged out. */ 61064064216a8433360745f69edddce19a606659163The Android Open Source Project if ((pSiteEntry->siteType == SITE_SELF) || (pSiteEntry->siteType == SITE_NULL) || (pSiteEntry->siteType == SITE_PRIMARY)) 61164064216a8433360745f69edddce19a606659163The Android Open Source Project continue; 61264064216a8433360745f69edddce19a606659163The Android Open Source Project 61364064216a8433360745f69edddce19a606659163The Android Open Source Project /* If scan for any ssid all sites are expected to be found, and all should be marked. */ 61464064216a8433360745f69edddce19a606659163The Android Open Source Project if( utils_isAnySSID(ssid) ) 61564064216a8433360745f69edddce19a606659163The Android Open Source Project { 61664064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteEntry->Not_Received++; 61764064216a8433360745f69edddce19a606659163The Android Open Source Project } 61864064216a8433360745f69edddce19a606659163The Android Open Source Project /* otherwise, the scan was a unicast scan, and thus only sites that match the desired SSID are marked*/ 61964064216a8433360745f69edddce19a606659163The Android Open Source Project else 62064064216a8433360745f69edddce19a606659163The Android Open Source Project { 62164064216a8433360745f69edddce19a606659163The Android Open Source Project if(os_memoryCompare(pSiteMgr->hOs, (UINT8 *)ssid->ssidString, (UINT8 *)pSiteEntry->ssid.ssidString, pSiteEntry->ssid.len) == 0) 62264064216a8433360745f69edddce19a606659163The Android Open Source Project { 62364064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteEntry->Not_Received++; 62464064216a8433360745f69edddce19a606659163The Android Open Source Project } 62564064216a8433360745f69edddce19a606659163The Android Open Source Project } 62664064216a8433360745f69edddce19a606659163The Android Open Source Project } /* for (... all sites in table ) */ 62764064216a8433360745f69edddce19a606659163The Android Open Source Project} 62864064216a8433360745f69edddce19a606659163The Android Open Source Project 62964064216a8433360745f69edddce19a606659163The Android Open Source Project 63064064216a8433360745f69edddce19a606659163The Android Open Source Project 63164064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid siteMgr_resetAttemptsNumberParameter(TI_HANDLE hSiteMgr) 63264064216a8433360745f69edddce19a606659163The Android Open Source Project{ 63364064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 siteIndex, tableIndex; 63464064216a8433360745f69edddce19a606659163The Android Open Source Project siteEntry_t *pSiteEntry; 63564064216a8433360745f69edddce19a606659163The Android Open Source Project siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr; 63664064216a8433360745f69edddce19a606659163The Android Open Source Project 63764064216a8433360745f69edddce19a606659163The Android Open Source Project siteTablesParams_t* currTable = pSiteMgr->pSitesMgmtParams->pCurrentSiteTable; 63864064216a8433360745f69edddce19a606659163The Android Open Source Project 63964064216a8433360745f69edddce19a606659163The Android Open Source Project for (tableIndex = 0; tableIndex < NUM_OF_SITE_TABLE ; tableIndex++) 64064064216a8433360745f69edddce19a606659163The Android Open Source Project { 64164064216a8433360745f69edddce19a606659163The Android Open Source Project for (siteIndex = 0; siteIndex < currTable->maxNumOfSites; siteIndex++) 64264064216a8433360745f69edddce19a606659163The Android Open Source Project { 64364064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteEntry = &(currTable->siteTable[siteIndex]); 64464064216a8433360745f69edddce19a606659163The Android Open Source Project 64564064216a8433360745f69edddce19a606659163The Android Open Source Project /* Self site & null site are never aged out. */ 64664064216a8433360745f69edddce19a606659163The Android Open Source Project if ((pSiteEntry->siteType == SITE_SELF) || (pSiteEntry->siteType == SITE_NULL)) 64764064216a8433360745f69edddce19a606659163The Android Open Source Project continue; 64864064216a8433360745f69edddce19a606659163The Android Open Source Project 64964064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteEntry->attemptsNumber = 0; 65064064216a8433360745f69edddce19a606659163The Android Open Source Project } 65164064216a8433360745f69edddce19a606659163The Android Open Source Project if(pSiteMgr->pDesiredParams->siteMgrDesiredDot11Mode == DOT11_DUAL_MODE) 65264064216a8433360745f69edddce19a606659163The Android Open Source Project { 65364064216a8433360745f69edddce19a606659163The Android Open Source Project /* change site table */ 65464064216a8433360745f69edddce19a606659163The Android Open Source Project if(currTable == &pSiteMgr->pSitesMgmtParams->dot11BG_sitesTables) 65564064216a8433360745f69edddce19a606659163The Android Open Source Project currTable = (siteTablesParams_t *)&pSiteMgr->pSitesMgmtParams->dot11A_sitesTables; 65664064216a8433360745f69edddce19a606659163The Android Open Source Project else 65764064216a8433360745f69edddce19a606659163The Android Open Source Project currTable = &pSiteMgr->pSitesMgmtParams->dot11BG_sitesTables; 65864064216a8433360745f69edddce19a606659163The Android Open Source Project } 65964064216a8433360745f69edddce19a606659163The Android Open Source Project else 66064064216a8433360745f69edddce19a606659163The Android Open Source Project break; 66164064216a8433360745f69edddce19a606659163The Android Open Source Project 66264064216a8433360745f69edddce19a606659163The Android Open Source Project } 66364064216a8433360745f69edddce19a606659163The Android Open Source Project} 66464064216a8433360745f69edddce19a606659163The Android Open Source Project 66564064216a8433360745f69edddce19a606659163The Android Open Source Project/* Local functions Implementation */ 66664064216a8433360745f69edddce19a606659163The Android Open Source Project 66764064216a8433360745f69edddce19a606659163The Android Open Source Project/************************************************************************************************************/ 66864064216a8433360745f69edddce19a606659163The Android Open Source Project/* Each functions of the following measures the matching level of a site for the specific attribute, 66964064216a8433360745f69edddce19a606659163The Android Open Source Project for example: BSSId, SSID, etc... 67064064216a8433360745f69edddce19a606659163The Android Open Source Project The input is the site manager handle which contains the desired attributes, and a pointer 67164064216a8433360745f69edddce19a606659163The Android Open Source Project to the site in the site table. 67264064216a8433360745f69edddce19a606659163The Android Open Source Project The function returns NO_MATCH if it is not possible to work with this site and MATCH otherwise. 67364064216a8433360745f69edddce19a606659163The Android Open Source Project Some of the functions, in a case of a MATCH, compute also the site matching level and returns it too. 67464064216a8433360745f69edddce19a606659163The Android Open Source Project This used later in the function 'siteMgr_selectSite()'. 67564064216a8433360745f69edddce19a606659163The Android Open Source Project */ 67664064216a8433360745f69edddce19a606659163The Android Open Source Project/************************************************************************************************************/ 67764064216a8433360745f69edddce19a606659163The Android Open Source Project 67864064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic match_e ssidMatchingLevel(siteMgr_t *pSiteMgr, siteEntry_t *pSite) 67964064216a8433360745f69edddce19a606659163The Android Open Source Project{ 68064064216a8433360745f69edddce19a606659163The Android Open Source Project if (pSiteMgr->pDesiredParams->siteMgrDesiredSSID.len == 0) 68164064216a8433360745f69edddce19a606659163The Android Open Source Project { /* match any site that is not hidden */ 68264064216a8433360745f69edddce19a606659163The Android Open Source Project if (pSite->ssid.ssidString[0]=='\0') /* hidden ssid */ 68364064216a8433360745f69edddce19a606659163The Android Open Source Project { 68464064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("Null SSID and hidden ssid \n\n")); 68564064216a8433360745f69edddce19a606659163The Android Open Source Project return NO_MATCH; 68664064216a8433360745f69edddce19a606659163The Android Open Source Project } 68764064216a8433360745f69edddce19a606659163The Android Open Source Project else 68864064216a8433360745f69edddce19a606659163The Android Open Source Project { 68964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("Null SSID and not hidden ssid \n\n")); 69064064216a8433360745f69edddce19a606659163The Android Open Source Project return MATCH; 69164064216a8433360745f69edddce19a606659163The Android Open Source Project } 69264064216a8433360745f69edddce19a606659163The Android Open Source Project } 69364064216a8433360745f69edddce19a606659163The Android Open Source Project if ((pSiteMgr->pDesiredParams->siteMgrDesiredSSID.len == pSite->ssid.len) && 69464064216a8433360745f69edddce19a606659163The Android Open Source Project (os_memoryCompare(pSiteMgr->hOs, (UINT8 *)pSiteMgr->pDesiredParams->siteMgrDesiredSSID.ssidString, (UINT8 *)pSite->ssid.ssidString, pSite->ssid.len) == 0)) 69564064216a8433360745f69edddce19a606659163The Android Open Source Project return MATCH; 69664064216a8433360745f69edddce19a606659163The Android Open Source Project 69764064216a8433360745f69edddce19a606659163The Android Open Source Project else 69864064216a8433360745f69edddce19a606659163The Android Open Source Project return NO_MATCH; 69964064216a8433360745f69edddce19a606659163The Android Open Source Project} 70064064216a8433360745f69edddce19a606659163The Android Open Source Project 70164064216a8433360745f69edddce19a606659163The Android Open Source Project 70264064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic match_e bssidMatchingLevel(siteMgr_t *pSiteMgr, siteEntry_t *pSite) 70364064216a8433360745f69edddce19a606659163The Android Open Source Project{ 70464064216a8433360745f69edddce19a606659163The Android Open Source Project /* If BSSID is NULL, return NO_MATCH */ 70564064216a8433360745f69edddce19a606659163The Android Open Source Project if MAC_NULL((&(pSite->bssid))) 70664064216a8433360745f69edddce19a606659163The Android Open Source Project return NO_MATCH; 70764064216a8433360745f69edddce19a606659163The Android Open Source Project 70864064216a8433360745f69edddce19a606659163The Android Open Source Project if MAC_BROADCAST((&(pSiteMgr->pDesiredParams->siteMgrDesiredBSSID))) 70964064216a8433360745f69edddce19a606659163The Android Open Source Project return MATCH; 71064064216a8433360745f69edddce19a606659163The Android Open Source Project 71164064216a8433360745f69edddce19a606659163The Android Open Source Project if MAC_EQUAL((&(pSite->bssid)), (&(pSiteMgr->pDesiredParams->siteMgrDesiredBSSID))) 71264064216a8433360745f69edddce19a606659163The Android Open Source Project return MATCH; 71364064216a8433360745f69edddce19a606659163The Android Open Source Project 71464064216a8433360745f69edddce19a606659163The Android Open Source Project return NO_MATCH; 71564064216a8433360745f69edddce19a606659163The Android Open Source Project} 71664064216a8433360745f69edddce19a606659163The Android Open Source Project 71764064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic match_e bssTypeMatchingLevel(siteMgr_t *pSiteMgr, siteEntry_t *pSite) 71864064216a8433360745f69edddce19a606659163The Android Open Source Project{ 71964064216a8433360745f69edddce19a606659163The Android Open Source Project if (pSiteMgr->pDesiredParams->siteMgrDesiredBSSType == BSS_ANY) 72064064216a8433360745f69edddce19a606659163The Android Open Source Project return MATCH; 72164064216a8433360745f69edddce19a606659163The Android Open Source Project 72264064216a8433360745f69edddce19a606659163The Android Open Source Project if (pSiteMgr->pDesiredParams->siteMgrDesiredBSSType == pSite->bssType) 72364064216a8433360745f69edddce19a606659163The Android Open Source Project return MATCH; 72464064216a8433360745f69edddce19a606659163The Android Open Source Project 72564064216a8433360745f69edddce19a606659163The Android Open Source Project return NO_MATCH; 72664064216a8433360745f69edddce19a606659163The Android Open Source Project} 72764064216a8433360745f69edddce19a606659163The Android Open Source Project 72864064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic match_e ratesMatchingLevel(siteMgr_t *pSiteMgr, siteEntry_t *pSite, UINT32 *matchingLevel) 72964064216a8433360745f69edddce19a606659163The Android Open Source Project{ 73064064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 MatchedBasicRateMask; 73164064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 MatchedSupportedRateMask; 73264064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 MatchedMaxBasicRate; 73364064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 MatchedMaxActiveRate; 73464064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 StaTotalRates; 73564064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 SiteTotalRates; 73664064216a8433360745f69edddce19a606659163The Android Open Source Project 73764064216a8433360745f69edddce19a606659163The Android Open Source Project /* If the basic or active rate are invalid (0), return NO_MATCH. */ 73864064216a8433360745f69edddce19a606659163The Android Open Source Project if ((pSite->maxBasicRate == DRV_RATE_INVALID) || (pSite->maxActiveRate == DRV_RATE_INVALID)) 73964064216a8433360745f69edddce19a606659163The Android Open Source Project { 74064064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("SITE MATCH FAILURE, 1.maxBasic=%d,maxActive=%d \n", pSite->maxBasicRate,pSite->maxActiveRate)); 74164064216a8433360745f69edddce19a606659163The Android Open Source Project return NO_MATCH; 74264064216a8433360745f69edddce19a606659163The Android Open Source Project } 74364064216a8433360745f69edddce19a606659163The Android Open Source Project 74464064216a8433360745f69edddce19a606659163The Android Open Source Project if (DRV_RATE_MAX < pSite->maxBasicRate) 74564064216a8433360745f69edddce19a606659163The Android Open Source Project { 74664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("SITE MATCH FAILURE, 1.maxBasic=%d,maxActive=%d \n", pSite->maxBasicRate,pSite->maxActiveRate)); 74764064216a8433360745f69edddce19a606659163The Android Open Source Project return NO_MATCH; 74864064216a8433360745f69edddce19a606659163The Android Open Source Project } 74964064216a8433360745f69edddce19a606659163The Android Open Source Project 75064064216a8433360745f69edddce19a606659163The Android Open Source Project if(pSite->channel <= 14) 75164064216a8433360745f69edddce19a606659163The Android Open Source Project siteMgr_updateRates(pSiteMgr, FALSE, TRUE); 75264064216a8433360745f69edddce19a606659163The Android Open Source Project else 75364064216a8433360745f69edddce19a606659163The Android Open Source Project siteMgr_updateRates(pSiteMgr, TRUE, TRUE); 75464064216a8433360745f69edddce19a606659163The Android Open Source Project 75564064216a8433360745f69edddce19a606659163The Android Open Source Project StaTotalRates = pSiteMgr->pDesiredParams->siteMgrCurrentDesiredRateMask.basicRateMask 75664064216a8433360745f69edddce19a606659163The Android Open Source Project | pSiteMgr->pDesiredParams->siteMgrCurrentDesiredRateMask.supportedRateMask; 75764064216a8433360745f69edddce19a606659163The Android Open Source Project 75864064216a8433360745f69edddce19a606659163The Android Open Source Project SiteTotalRates = pSite->rateMask.basicRateMask | pSite->rateMask.supportedRateMask; 75964064216a8433360745f69edddce19a606659163The Android Open Source Project 76064064216a8433360745f69edddce19a606659163The Android Open Source Project MatchedBasicRateMask = SiteTotalRates 76164064216a8433360745f69edddce19a606659163The Android Open Source Project & pSiteMgr->pDesiredParams->siteMgrCurrentDesiredRateMask.basicRateMask; 76264064216a8433360745f69edddce19a606659163The Android Open Source Project 76364064216a8433360745f69edddce19a606659163The Android Open Source Project 76464064216a8433360745f69edddce19a606659163The Android Open Source Project MatchedSupportedRateMask = SiteTotalRates & 76564064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->pDesiredParams->siteMgrCurrentDesiredRateMask.supportedRateMask; 76664064216a8433360745f69edddce19a606659163The Android Open Source Project 76764064216a8433360745f69edddce19a606659163The Android Open Source Project if ((StaTotalRates & pSite->rateMask.basicRateMask) != pSite->rateMask.basicRateMask) 76864064216a8433360745f69edddce19a606659163The Android Open Source Project { 76964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("SITE MATCH FAILURE, Basic or Supported Rates Doesn't Match \n")); 77064064216a8433360745f69edddce19a606659163The Android Open Source Project return NO_MATCH; 77164064216a8433360745f69edddce19a606659163The Android Open Source Project 77264064216a8433360745f69edddce19a606659163The Android Open Source Project } 77364064216a8433360745f69edddce19a606659163The Android Open Source Project 77464064216a8433360745f69edddce19a606659163The Android Open Source Project 77564064216a8433360745f69edddce19a606659163The Android Open Source Project MatchedMaxBasicRate = getMaxRatefromBitmap(MatchedBasicRateMask); 77664064216a8433360745f69edddce19a606659163The Android Open Source Project MatchedMaxActiveRate = getMaxRatefromBitmap(MatchedSupportedRateMask); 77764064216a8433360745f69edddce19a606659163The Android Open Source Project 77864064216a8433360745f69edddce19a606659163The Android Open Source Project MatchedMaxActiveRate = MAX(MatchedMaxBasicRate,MatchedMaxActiveRate); 77964064216a8433360745f69edddce19a606659163The Android Open Source Project 78064064216a8433360745f69edddce19a606659163The Android Open Source Project *matchingLevel = MatchedMaxActiveRate; 78164064216a8433360745f69edddce19a606659163The Android Open Source Project return MATCH; 78264064216a8433360745f69edddce19a606659163The Android Open Source Project} 78364064216a8433360745f69edddce19a606659163The Android Open Source Project 78464064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic match_e modulationTypeMatchingLevel(siteMgr_t *pSiteMgr, siteEntry_t *pSite, UINT32 *matchingLevel) 78564064216a8433360745f69edddce19a606659163The Android Open Source Project{ 78664064216a8433360745f69edddce19a606659163The Android Open Source Project /* If the desired modulation is CCK, we set the modulation bits off. */ 78764064216a8433360745f69edddce19a606659163The Android Open Source Project if (pSiteMgr->pDesiredParams->siteMgrDesiredModulationType == DRV_MODULATION_CCK) 78864064216a8433360745f69edddce19a606659163The Android Open Source Project { 78964064216a8433360745f69edddce19a606659163The Android Open Source Project *matchingLevel = 0; 79064064216a8433360745f69edddce19a606659163The Android Open Source Project return MATCH; 79164064216a8433360745f69edddce19a606659163The Android Open Source Project } 79264064216a8433360745f69edddce19a606659163The Android Open Source Project 79364064216a8433360745f69edddce19a606659163The Android Open Source Project /* Now, the desired modulation is PBCC */ 79464064216a8433360745f69edddce19a606659163The Android Open Source Project if (pSite->beaconModulation == DRV_MODULATION_PBCC) /* if the site current modulation is PBCC */ 79564064216a8433360745f69edddce19a606659163The Android Open Source Project { 79664064216a8433360745f69edddce19a606659163The Android Open Source Project *matchingLevel = 2; 79764064216a8433360745f69edddce19a606659163The Android Open Source Project return MATCH; 79864064216a8433360745f69edddce19a606659163The Android Open Source Project } 79964064216a8433360745f69edddce19a606659163The Android Open Source Project 80064064216a8433360745f69edddce19a606659163The Android Open Source Project if (pSite->probeModulation == DRV_MODULATION_PBCC) /* if the site potential modulation is PBCC */ 80164064216a8433360745f69edddce19a606659163The Android Open Source Project { 80264064216a8433360745f69edddce19a606659163The Android Open Source Project *matchingLevel = 1; 80364064216a8433360745f69edddce19a606659163The Android Open Source Project return MATCH; 80464064216a8433360745f69edddce19a606659163The Android Open Source Project } 80564064216a8433360745f69edddce19a606659163The Android Open Source Project else /* the current modulation is CCK */ 80664064216a8433360745f69edddce19a606659163The Android Open Source Project { 80764064216a8433360745f69edddce19a606659163The Android Open Source Project *matchingLevel = 0; 80864064216a8433360745f69edddce19a606659163The Android Open Source Project return MATCH; 80964064216a8433360745f69edddce19a606659163The Android Open Source Project } 81064064216a8433360745f69edddce19a606659163The Android Open Source Project} 81164064216a8433360745f69edddce19a606659163The Android Open Source Project 81264064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic match_e preambleTypeMatchingLevel(siteMgr_t *pSiteMgr, siteEntry_t *pSite, UINT32 *matchingLevel) 81364064216a8433360745f69edddce19a606659163The Android Open Source Project{ 81464064216a8433360745f69edddce19a606659163The Android Open Source Project /* NOw, the chip preamble is SHORT */ 81564064216a8433360745f69edddce19a606659163The Android Open Source Project /* If the desired preamble is LONG, we set the preamble bits off. */ 81664064216a8433360745f69edddce19a606659163The Android Open Source Project if (pSiteMgr->pDesiredParams->siteMgrDesiredPreambleType == PREAMBLE_LONG) 81764064216a8433360745f69edddce19a606659163The Android Open Source Project { 81864064216a8433360745f69edddce19a606659163The Android Open Source Project *matchingLevel = 0; 81964064216a8433360745f69edddce19a606659163The Android Open Source Project return MATCH; 82064064216a8433360745f69edddce19a606659163The Android Open Source Project } 82164064216a8433360745f69edddce19a606659163The Android Open Source Project 82264064216a8433360745f69edddce19a606659163The Android Open Source Project /* Now, the desired preamble is SHORT */ 82364064216a8433360745f69edddce19a606659163The Android Open Source Project if (pSite->currentPreambleType == PREAMBLE_SHORT) /* site preamble is SHORT */ 82464064216a8433360745f69edddce19a606659163The Android Open Source Project { 82564064216a8433360745f69edddce19a606659163The Android Open Source Project *matchingLevel = 1; 82664064216a8433360745f69edddce19a606659163The Android Open Source Project return MATCH; 82764064216a8433360745f69edddce19a606659163The Android Open Source Project } 82864064216a8433360745f69edddce19a606659163The Android Open Source Project else /* site preamble is LONG */ 82964064216a8433360745f69edddce19a606659163The Android Open Source Project { 83064064216a8433360745f69edddce19a606659163The Android Open Source Project *matchingLevel = 0; 83164064216a8433360745f69edddce19a606659163The Android Open Source Project return MATCH; 83264064216a8433360745f69edddce19a606659163The Android Open Source Project } 83364064216a8433360745f69edddce19a606659163The Android Open Source Project} 83464064216a8433360745f69edddce19a606659163The Android Open Source Project 83564064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic match_e channelMatchingLevel(siteMgr_t *pSiteMgr, siteEntry_t *pSite, UINT32 *matchingLevel) 83664064216a8433360745f69edddce19a606659163The Android Open Source Project{ 83764064216a8433360745f69edddce19a606659163The Android Open Source Project paramInfo_t tParam; 83864064216a8433360745f69edddce19a606659163The Android Open Source Project /* when 802.11d is enabled, 83964064216a8433360745f69edddce19a606659163The Android Open Source Project channels that are not valid for Active, will not be mach.*/ 84064064216a8433360745f69edddce19a606659163The Android Open Source Project tParam.content.channel = pSite->channel; 84164064216a8433360745f69edddce19a606659163The Android Open Source Project tParam.paramType = REGULATORY_DOMAIN_IS_CHANNEL_SUPPORTED; 84264064216a8433360745f69edddce19a606659163The Android Open Source Project regulatoryDomain_getParam(pSiteMgr->hRegulatoryDomain, &tParam); 84364064216a8433360745f69edddce19a606659163The Android Open Source Project if ( !tParam.content.bIsChannelSupprted ) 84464064216a8433360745f69edddce19a606659163The Android Open Source Project { 84564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, 84664064216a8433360745f69edddce19a606659163The Android Open Source Project ("channelMatchingLevel: channel =%d isn't valid for Active and will not be matched.\n", 84764064216a8433360745f69edddce19a606659163The Android Open Source Project pSite->channel)); 84864064216a8433360745f69edddce19a606659163The Android Open Source Project return NO_MATCH; 84964064216a8433360745f69edddce19a606659163The Android Open Source Project } 85064064216a8433360745f69edddce19a606659163The Android Open Source Project 85164064216a8433360745f69edddce19a606659163The Android Open Source Project /* If the site channel is equal to the desired channel, we set the channel bit on. */ 85264064216a8433360745f69edddce19a606659163The Android Open Source Project if (pSite->channel == pSiteMgr->pDesiredParams->siteMgrDesiredChannel) 85364064216a8433360745f69edddce19a606659163The Android Open Source Project { 85464064216a8433360745f69edddce19a606659163The Android Open Source Project *matchingLevel = 1; 85564064216a8433360745f69edddce19a606659163The Android Open Source Project return MATCH; 85664064216a8433360745f69edddce19a606659163The Android Open Source Project } 85764064216a8433360745f69edddce19a606659163The Android Open Source Project else 85864064216a8433360745f69edddce19a606659163The Android Open Source Project { 85964064216a8433360745f69edddce19a606659163The Android Open Source Project *matchingLevel = 0; 86064064216a8433360745f69edddce19a606659163The Android Open Source Project return MATCH; 86164064216a8433360745f69edddce19a606659163The Android Open Source Project } 86264064216a8433360745f69edddce19a606659163The Android Open Source Project/* return NO_MATCH; - unreachable*/ 86364064216a8433360745f69edddce19a606659163The Android Open Source Project 86464064216a8433360745f69edddce19a606659163The Android Open Source Project} 86564064216a8433360745f69edddce19a606659163The Android Open Source Project 86664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic match_e rxLevelMatchingLevel(siteMgr_t *pSiteMgr, siteEntry_t *pSite, UINT32 *matchingLevel) 86764064216a8433360745f69edddce19a606659163The Android Open Source Project{ 86864064216a8433360745f69edddce19a606659163The Android Open Source Project 86964064216a8433360745f69edddce19a606659163The Android Open Source Project if(pSite->rssi > SELECT_RSSI_BEST_LEVEL) 87064064216a8433360745f69edddce19a606659163The Android Open Source Project *matchingLevel = (UINT8)RSSI_METRIC_BEST; 87164064216a8433360745f69edddce19a606659163The Android Open Source Project else if (pSite->rssi > SELECT_RSSI_GOOD_LEVEL) 87264064216a8433360745f69edddce19a606659163The Android Open Source Project *matchingLevel = (UINT8)RSSI_METRIC_GOOD; 87364064216a8433360745f69edddce19a606659163The Android Open Source Project else if(pSite->rssi > SELECT_RSSI_NORMAL_LEVEL) 87464064216a8433360745f69edddce19a606659163The Android Open Source Project *matchingLevel = (UINT8)RSSI_METRIC_NORMAL; 87564064216a8433360745f69edddce19a606659163The Android Open Source Project else if (pSite->rssi > SELECT_RSSI_POOR_LEVEL) 87664064216a8433360745f69edddce19a606659163The Android Open Source Project *matchingLevel = (UINT8)RSSI_METRIC_POOR; 87764064216a8433360745f69edddce19a606659163The Android Open Source Project else if(pSite->rssi > SELECT_RSSI_BAD_LEVEL) 87864064216a8433360745f69edddce19a606659163The Android Open Source Project *matchingLevel = (UINT8)RSSI_METRIC_BAD; 87964064216a8433360745f69edddce19a606659163The Android Open Source Project else 88064064216a8433360745f69edddce19a606659163The Android Open Source Project *matchingLevel = (UINT8)RSSI_METRIC_NOSIGNAL; 88164064216a8433360745f69edddce19a606659163The Android Open Source Project 88264064216a8433360745f69edddce19a606659163The Android Open Source Project return MATCH; 88364064216a8433360745f69edddce19a606659163The Android Open Source Project 88464064216a8433360745f69edddce19a606659163The Android Open Source Project} 88564064216a8433360745f69edddce19a606659163The Android Open Source Project 88664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic match_e attemptsNumberMatchingLevel(siteMgr_t *pSiteMgr, siteEntry_t *pSite, UINT32 *matchingLevel) 88764064216a8433360745f69edddce19a606659163The Android Open Source Project{ 88864064216a8433360745f69edddce19a606659163The Android Open Source Project if(pSite->attemptsNumber > 0) 88964064216a8433360745f69edddce19a606659163The Android Open Source Project { 89064064216a8433360745f69edddce19a606659163The Android Open Source Project return NO_MATCH; 89164064216a8433360745f69edddce19a606659163The Android Open Source Project } 89264064216a8433360745f69edddce19a606659163The Android Open Source Project else 89364064216a8433360745f69edddce19a606659163The Android Open Source Project { 89464064216a8433360745f69edddce19a606659163The Android Open Source Project *matchingLevel = 0x0F - pSite->attemptsNumber; 89564064216a8433360745f69edddce19a606659163The Android Open Source Project return MATCH; 89664064216a8433360745f69edddce19a606659163The Android Open Source Project } 89764064216a8433360745f69edddce19a606659163The Android Open Source Project} 89864064216a8433360745f69edddce19a606659163The Android Open Source Project 89964064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic match_e spectrumManagementMatchingLevel(siteMgr_t *pSiteMgr, UINT16 siteCapability, UINT32 *matchingLevel) 90064064216a8433360745f69edddce19a606659163The Android Open Source Project{ 90164064216a8433360745f69edddce19a606659163The Android Open Source Project paramInfo_t param; 90264064216a8433360745f69edddce19a606659163The Android Open Source Project TI_STATUS status; 90364064216a8433360745f69edddce19a606659163The Android Open Source Project /* If the site has spectrum management capabilty and the station 90464064216a8433360745f69edddce19a606659163The Android Open Source Project spectrumManagementCapabilty is enabled, we set the spectrum management bit on. */ 90564064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = REGULATORY_DOMAIN_MANAGEMENT_CAPABILITY_ENABLED_PARAM; 90664064216a8433360745f69edddce19a606659163The Android Open Source Project status = regulatoryDomain_getParam(pSiteMgr->hRegulatoryDomain,¶m); 90764064216a8433360745f69edddce19a606659163The Android Open Source Project if(status == OK && param.content.spectrumManagementEnabled) 90864064216a8433360745f69edddce19a606659163The Android Open Source Project { 90964064216a8433360745f69edddce19a606659163The Android Open Source Project if (siteCapability & DOT11_SPECTRUM_MANAGEMENT) 91064064216a8433360745f69edddce19a606659163The Android Open Source Project *matchingLevel = 1; 91164064216a8433360745f69edddce19a606659163The Android Open Source Project else 91264064216a8433360745f69edddce19a606659163The Android Open Source Project *matchingLevel = 0; 91364064216a8433360745f69edddce19a606659163The Android Open Source Project } 91464064216a8433360745f69edddce19a606659163The Android Open Source Project 91564064216a8433360745f69edddce19a606659163The Android Open Source Project return MATCH; 91664064216a8433360745f69edddce19a606659163The Android Open Source Project} 91764064216a8433360745f69edddce19a606659163The Android Open Source Project 91864064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic match_e prioritySiteMatchingLevel(siteMgr_t *pSiteMgr, siteEntry_t *pSite, UINT32 *matchingLevel) 91964064216a8433360745f69edddce19a606659163The Android Open Source Project{ 92064064216a8433360745f69edddce19a606659163The Android Open Source Project /* If the site channel is equal to the desired channel, we set the channel bit on. */ 92164064216a8433360745f69edddce19a606659163The Android Open Source Project if (pSite->prioritySite) 92264064216a8433360745f69edddce19a606659163The Android Open Source Project { 92364064216a8433360745f69edddce19a606659163The Android Open Source Project *matchingLevel = 1; 92464064216a8433360745f69edddce19a606659163The Android Open Source Project return MATCH; 92564064216a8433360745f69edddce19a606659163The Android Open Source Project } 92664064216a8433360745f69edddce19a606659163The Android Open Source Project else 92764064216a8433360745f69edddce19a606659163The Android Open Source Project { 92864064216a8433360745f69edddce19a606659163The Android Open Source Project *matchingLevel = 0; 92964064216a8433360745f69edddce19a606659163The Android Open Source Project return MATCH; 93064064216a8433360745f69edddce19a606659163The Android Open Source Project } 93164064216a8433360745f69edddce19a606659163The Android Open Source Project/* return NO_MATCH; - unreachable */ 93264064216a8433360745f69edddce19a606659163The Android Open Source Project} 93364064216a8433360745f69edddce19a606659163The Android Open Source Project 93464064216a8433360745f69edddce19a606659163The Android Open Source Project/*********************************************************************** 93564064216a8433360745f69edddce19a606659163The Android Open Source Project * addSelfSite 93664064216a8433360745f69edddce19a606659163The Android Open Source Project *********************************************************************** 93764064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: This function is called if the selection fails and desired BSS type is IBSS 93864064216a8433360745f69edddce19a606659163The Android Open Source Project That means we creating our own network and wait for other stations to join us. 93964064216a8433360745f69edddce19a606659163The Android Open Source Project the best site for teh station. 94064064216a8433360745f69edddce19a606659163The Android Open Source Project Performs the following: 94164064216a8433360745f69edddce19a606659163The Android Open Source Project - If the desired BSSID is broadcast, we generate a random BSSId, otherwise we use the desired one. 94264064216a8433360745f69edddce19a606659163The Android Open Source Project - If the site table is full we remove the most old site 94364064216a8433360745f69edddce19a606659163The Android Open Source Project - We send a probe response with our oiwn desired attributes in order to add the site to the site table 94464064216a8433360745f69edddce19a606659163The Android Open Source Project 94564064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT: pSiteMgr - site mgr handle. 94664064216a8433360745f69edddce19a606659163The Android Open Source Project 94764064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT: 94864064216a8433360745f69edddce19a606659163The Android Open Source Project 94964064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN: Pointer to rthe self site entry in the site table 95064064216a8433360745f69edddce19a606659163The Android Open Source Project 95164064216a8433360745f69edddce19a606659163The Android Open Source Project************************************************************************/ 95264064216a8433360745f69edddce19a606659163The Android Open Source ProjectsiteEntry_t *addSelfSite(siteMgr_t *pSiteMgr) 95364064216a8433360745f69edddce19a606659163The Android Open Source Project{ 95464064216a8433360745f69edddce19a606659163The Android Open Source Project siteEntry_t *pSite; 95564064216a8433360745f69edddce19a606659163The Android Open Source Project macAddress_t bssid; 95664064216a8433360745f69edddce19a606659163The Android Open Source Project 95764064216a8433360745f69edddce19a606659163The Android Open Source Project 95864064216a8433360745f69edddce19a606659163The Android Open Source Project if (utils_isJunkSSID(&(pSiteMgr->pDesiredParams->siteMgrDesiredSSID)) == TRUE) 95964064216a8433360745f69edddce19a606659163The Android Open Source Project return NULL ; 96064064216a8433360745f69edddce19a606659163The Android Open Source Project 96164064216a8433360745f69edddce19a606659163The Android Open Source Project if MAC_BROADCAST((&(pSiteMgr->pDesiredParams->siteMgrDesiredBSSID))) 96264064216a8433360745f69edddce19a606659163The Android Open Source Project { 96364064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pSiteMgr->hOs, (void *)bssid.addr, (void *)pSiteMgr->ibssBssid.addr, sizeof(macAddress_t)); 96464064216a8433360745f69edddce19a606659163The Android Open Source Project } 96564064216a8433360745f69edddce19a606659163The Android Open Source Project else 96664064216a8433360745f69edddce19a606659163The Android Open Source Project { 96764064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pSiteMgr->hOs, (void *)bssid.addr, (void *)pSiteMgr->pDesiredParams->siteMgrDesiredBSSID.addr, sizeof(macAddress_t)); 96864064216a8433360745f69edddce19a606659163The Android Open Source Project } 96964064216a8433360745f69edddce19a606659163The Android Open Source Project 97064064216a8433360745f69edddce19a606659163The Android Open Source Project if(pSiteMgr->pDesiredParams->siteMgrDesiredChannel <= 14) 97164064216a8433360745f69edddce19a606659163The Android Open Source Project { 97264064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->pSitesMgmtParams->pCurrentSiteTable = &pSiteMgr->pSitesMgmtParams->dot11BG_sitesTables; 97364064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->siteMgrOperationalMode = DOT11_G_MODE; 97464064216a8433360745f69edddce19a606659163The Android Open Source Project } 97564064216a8433360745f69edddce19a606659163The Android Open Source Project else 97664064216a8433360745f69edddce19a606659163The Android Open Source Project { 97764064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->pSitesMgmtParams->pCurrentSiteTable = (siteTablesParams_t *)&pSiteMgr->pSitesMgmtParams->dot11A_sitesTables; 97864064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->siteMgrOperationalMode = DOT11_A_MODE; 97964064216a8433360745f69edddce19a606659163The Android Open Source Project } 98064064216a8433360745f69edddce19a606659163The Android Open Source Project 98164064216a8433360745f69edddce19a606659163The Android Open Source Project siteMgr_ConfigRate(pSiteMgr); 98264064216a8433360745f69edddce19a606659163The Android Open Source Project 98364064216a8433360745f69edddce19a606659163The Android Open Source Project /* First make sure that there is a place in the site table, if not, reomve the eldest site. */ 98464064216a8433360745f69edddce19a606659163The Android Open Source Project if (pSiteMgr->pSitesMgmtParams->pCurrentSiteTable->numOfSites == pSiteMgr->pSitesMgmtParams->pCurrentSiteTable->maxNumOfSites) 98564064216a8433360745f69edddce19a606659163The Android Open Source Project removeEldestSite(pSiteMgr); 98664064216a8433360745f69edddce19a606659163The Android Open Source Project 98764064216a8433360745f69edddce19a606659163The Android Open Source Project sendProbeResponse(pSiteMgr, &bssid); 98864064216a8433360745f69edddce19a606659163The Android Open Source Project 98964064216a8433360745f69edddce19a606659163The Android Open Source Project /* Now find the site in the site table. */ 99064064216a8433360745f69edddce19a606659163The Android Open Source Project pSite = findSiteEntry(pSiteMgr, &bssid); 99164064216a8433360745f69edddce19a606659163The Android Open Source Project if (pSite == NULL) 99264064216a8433360745f69edddce19a606659163The Android Open Source Project { 99364064216a8433360745f69edddce19a606659163The Android Open Source Project return NULL; 99464064216a8433360745f69edddce19a606659163The Android Open Source Project } 99564064216a8433360745f69edddce19a606659163The Android Open Source Project pSite->beaconModulation = pSite->probeModulation; 99664064216a8433360745f69edddce19a606659163The Android Open Source Project pSite->barkerPreambleType = PREAMBLE_UNSPECIFIED; 99764064216a8433360745f69edddce19a606659163The Android Open Source Project 99864064216a8433360745f69edddce19a606659163The Android Open Source Project return pSite; 99964064216a8433360745f69edddce19a606659163The Android Open Source Project 100064064216a8433360745f69edddce19a606659163The Android Open Source Project} 100164064216a8433360745f69edddce19a606659163The Android Open Source Project 100264064216a8433360745f69edddce19a606659163The Android Open Source Project/*********************************************************************** 100364064216a8433360745f69edddce19a606659163The Android Open Source Project * sendProbeResponse 100464064216a8433360745f69edddce19a606659163The Android Open Source Project *********************************************************************** 100564064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: This function is called by the function 'addSelfSite()' in order to send a probe response 100664064216a8433360745f69edddce19a606659163The Android Open Source Project to the site mgr. This will cause the site manager to add a new entry to the site table, the self site entry. 100764064216a8433360745f69edddce19a606659163The Android Open Source Project 100864064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT: pSiteMgr - site mgr handle. 100964064216a8433360745f69edddce19a606659163The Android Open Source Project pBssid - Received BSSID 101064064216a8433360745f69edddce19a606659163The Android Open Source Project 101164064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT: 101264064216a8433360745f69edddce19a606659163The Android Open Source Project 101364064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN: OK 101464064216a8433360745f69edddce19a606659163The Android Open Source Project 101564064216a8433360745f69edddce19a606659163The Android Open Source Project************************************************************************/ 101664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS sendProbeResponse(siteMgr_t *pSiteMgr, macAddress_t *pBssid) 101764064216a8433360745f69edddce19a606659163The Android Open Source Project{ 101864064216a8433360745f69edddce19a606659163The Android Open Source Project mlmeFrameInfo_t frame; 101964064216a8433360745f69edddce19a606659163The Android Open Source Project paramInfo_t param; 102064064216a8433360745f69edddce19a606659163The Android Open Source Project dot11_SSID_t ssid; 102164064216a8433360745f69edddce19a606659163The Android Open Source Project dot11_RATES_t rates; 102264064216a8433360745f69edddce19a606659163The Android Open Source Project dot11_FH_PARAMS_t FHParamsSet; 102364064216a8433360745f69edddce19a606659163The Android Open Source Project dot11_DS_PARAMS_t DSParamsSet; 102464064216a8433360745f69edddce19a606659163The Android Open Source Project dot11_CF_PARAMS_t CFParamsSet; 102564064216a8433360745f69edddce19a606659163The Android Open Source Project dot11_IBSS_PARAMS_t IBSSParamsSet; 102664064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 len = 0, ofdmIndex = 0; 102764064216a8433360745f69edddce19a606659163The Android Open Source Project radioBand_e band; 102864064216a8433360745f69edddce19a606659163The Android Open Source Project dot11_RATES_t extRates; 102964064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 ratesBuf[MAX_SUPPORTED_RATES]; 103064064216a8433360745f69edddce19a606659163The Android Open Source Project BOOL extRatesInd = FALSE; 103164064216a8433360745f69edddce19a606659163The Android Open Source Project 103264064216a8433360745f69edddce19a606659163The Android Open Source Project /* The easiest way to add a site to the site table is to simulate a probe frame. */ 103364064216a8433360745f69edddce19a606659163The Android Open Source Project frame.subType = PROBE_RESPONSE; 103464064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryZero(pSiteMgr->hOs, &frame, sizeof(mlmeFrameInfo_t)); 103564064216a8433360745f69edddce19a606659163The Android Open Source Project /* Initialize the frame fields */ 103664064216a8433360745f69edddce19a606659163The Android Open Source Project frame.subType = PROBE_RESPONSE; 103764064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryZero(pSiteMgr->hOs, (void *)frame.content.iePacket.timestamp, TIME_STAMP_LEN); 103864064216a8433360745f69edddce19a606659163The Android Open Source Project 103964064216a8433360745f69edddce19a606659163The Android Open Source Project /* Build Beacon interval */ 104064064216a8433360745f69edddce19a606659163The Android Open Source Project frame.content.iePacket.beaconInerval = pSiteMgr->pDesiredParams->siteMgrDesiredBeaconInterval; 104164064216a8433360745f69edddce19a606659163The Android Open Source Project 104264064216a8433360745f69edddce19a606659163The Android Open Source Project /* Build capability field */ 104364064216a8433360745f69edddce19a606659163The Android Open Source Project frame.content.iePacket.capabilities = 0; 104464064216a8433360745f69edddce19a606659163The Android Open Source Project frame.content.iePacket.capabilities |= (TRUE << CAP_IBSS_SHIFT); /* Bss type must be independent */ 104564064216a8433360745f69edddce19a606659163The Android Open Source Project 104664064216a8433360745f69edddce19a606659163The Android Open Source Project if ((pSiteMgr->pDesiredParams->siteMgrDesiredPreambleType == PREAMBLE_SHORT)) 104764064216a8433360745f69edddce19a606659163The Android Open Source Project frame.content.iePacket.capabilities |= (TRUE << CAP_PREAMBLE_SHIFT); 104864064216a8433360745f69edddce19a606659163The Android Open Source Project 104964064216a8433360745f69edddce19a606659163The Android Open Source Project /* call RSN to get the privacy desired */ 105064064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = RSN_ENCRYPTION_STATUS_PARAM; 105164064216a8433360745f69edddce19a606659163The Android Open Source Project rsn_getParam(pSiteMgr->hRsn, ¶m); 105264064216a8433360745f69edddce19a606659163The Android Open Source Project if (param.content.rsnEncryptionStatus == RSN_CIPHER_NONE) 105364064216a8433360745f69edddce19a606659163The Android Open Source Project { 105464064216a8433360745f69edddce19a606659163The Android Open Source Project frame.content.iePacket.capabilities |= (FALSE << CAP_PRIVACY_SHIFT); 105564064216a8433360745f69edddce19a606659163The Android Open Source Project } else { 105664064216a8433360745f69edddce19a606659163The Android Open Source Project frame.content.iePacket.capabilities |= (TRUE << CAP_PRIVACY_SHIFT); 105764064216a8433360745f69edddce19a606659163The Android Open Source Project } 105864064216a8433360745f69edddce19a606659163The Android Open Source Project 105964064216a8433360745f69edddce19a606659163The Android Open Source Project if (pSiteMgr->pDesiredParams->siteMgrDesiredModulationType == DRV_MODULATION_PBCC) 106064064216a8433360745f69edddce19a606659163The Android Open Source Project frame.content.iePacket.capabilities |= (TRUE << CAP_PBCC_SHIFT); 106164064216a8433360745f69edddce19a606659163The Android Open Source Project 106264064216a8433360745f69edddce19a606659163The Android Open Source Project if (pSiteMgr->siteMgrOperationalMode == DOT11_G_MODE) 106364064216a8433360745f69edddce19a606659163The Android Open Source Project { 106464064216a8433360745f69edddce19a606659163The Android Open Source Project if(pSiteMgr->pDesiredParams->siteMgrDesiredSlotTime == PHY_SLOT_TIME_SHORT) 106564064216a8433360745f69edddce19a606659163The Android Open Source Project frame.content.iePacket.capabilities |= (TRUE << CAP_SLOT_TIME_SHIFT); 106664064216a8433360745f69edddce19a606659163The Android Open Source Project } 106764064216a8433360745f69edddce19a606659163The Android Open Source Project 106864064216a8433360745f69edddce19a606659163The Android Open Source Project /* Build ssid */ 106964064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryZero(pSiteMgr->hOs, (void *)ssid.serviceSetId, MAX_SSID_LEN); 107064064216a8433360745f69edddce19a606659163The Android Open Source Project 107164064216a8433360745f69edddce19a606659163The Android Open Source Project if (pSiteMgr->pDesiredParams->siteMgrDesiredSSID.len == 0) 107264064216a8433360745f69edddce19a606659163The Android Open Source Project ssid.hdr.eleLen = 0; 107364064216a8433360745f69edddce19a606659163The Android Open Source Project else 107464064216a8433360745f69edddce19a606659163The Android Open Source Project { 107564064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pSiteMgr->hOs, (void *)ssid.serviceSetId, (void *)pSiteMgr->pDesiredParams->siteMgrDesiredSSID.ssidString, pSiteMgr->pDesiredParams->siteMgrDesiredSSID.len); 107664064216a8433360745f69edddce19a606659163The Android Open Source Project ssid.hdr.eleLen = pSiteMgr->pDesiredParams->siteMgrDesiredSSID.len; 107764064216a8433360745f69edddce19a606659163The Android Open Source Project } 107864064216a8433360745f69edddce19a606659163The Android Open Source Project 107964064216a8433360745f69edddce19a606659163The Android Open Source Project if(pSiteMgr->pDesiredParams->siteMgrDesiredChannel <= MAX_GB_MODE_CHANEL) 108064064216a8433360745f69edddce19a606659163The Android Open Source Project siteMgr_updateRates(pSiteMgr, FALSE, TRUE); 108164064216a8433360745f69edddce19a606659163The Android Open Source Project else 108264064216a8433360745f69edddce19a606659163The Android Open Source Project siteMgr_updateRates(pSiteMgr, TRUE, TRUE); 108364064216a8433360745f69edddce19a606659163The Android Open Source Project 108464064216a8433360745f69edddce19a606659163The Android Open Source Project /* Build Rates */ 108564064216a8433360745f69edddce19a606659163The Android Open Source Project bitMapToNetworkStringRates(pSiteMgr->pDesiredParams->siteMgrCurrentDesiredRateMask.supportedRateMask, 108664064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->pDesiredParams->siteMgrCurrentDesiredRateMask.basicRateMask, 108764064216a8433360745f69edddce19a606659163The Android Open Source Project ratesBuf, &len, &ofdmIndex); 108864064216a8433360745f69edddce19a606659163The Android Open Source Project 108964064216a8433360745f69edddce19a606659163The Android Open Source Project if(pSiteMgr->siteMgrOperationalMode != DOT11_G_MODE || 109064064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->pDesiredParams->siteMgrUseDraftNum == DRAFT_5_AND_EARLIER || 109164064216a8433360745f69edddce19a606659163The Android Open Source Project ofdmIndex == len) 109264064216a8433360745f69edddce19a606659163The Android Open Source Project { 109364064216a8433360745f69edddce19a606659163The Android Open Source Project rates.hdr.eleId = DOT11_SUPPORTED_RATES_ELE_ID; 109464064216a8433360745f69edddce19a606659163The Android Open Source Project rates.hdr.eleLen = len; 109564064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pSiteMgr->hOs, (void *)rates.rates, ratesBuf, rates.hdr.eleLen); 109664064216a8433360745f69edddce19a606659163The Android Open Source Project } 109764064216a8433360745f69edddce19a606659163The Android Open Source Project else 109864064216a8433360745f69edddce19a606659163The Android Open Source Project { 109964064216a8433360745f69edddce19a606659163The Android Open Source Project rates.hdr.eleId = DOT11_SUPPORTED_RATES_ELE_ID; 110064064216a8433360745f69edddce19a606659163The Android Open Source Project rates.hdr.eleLen = ofdmIndex; 110164064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pSiteMgr->hOs, (void *)rates.rates, ratesBuf, rates.hdr.eleLen); 110264064216a8433360745f69edddce19a606659163The Android Open Source Project 110364064216a8433360745f69edddce19a606659163The Android Open Source Project extRates.hdr.eleId = DOT11_EXT_SUPPORTED_RATES_ELE_ID; 110464064216a8433360745f69edddce19a606659163The Android Open Source Project extRates.hdr.eleLen = len - ofdmIndex; 110564064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pSiteMgr->hOs, (void *)extRates.rates, &ratesBuf[ofdmIndex], extRates.hdr.eleLen); 110664064216a8433360745f69edddce19a606659163The Android Open Source Project extRatesInd = TRUE; 110764064216a8433360745f69edddce19a606659163The Android Open Source Project } 110864064216a8433360745f69edddce19a606659163The Android Open Source Project 110964064216a8433360745f69edddce19a606659163The Android Open Source Project 111064064216a8433360745f69edddce19a606659163The Android Open Source Project /* Build FH */ 111164064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryZero(pSiteMgr->hOs, &FHParamsSet, sizeof(dot11_FH_PARAMS_t)); 111264064216a8433360745f69edddce19a606659163The Android Open Source Project 111364064216a8433360745f69edddce19a606659163The Android Open Source Project /* Build DS */ 111464064216a8433360745f69edddce19a606659163The Android Open Source Project DSParamsSet.hdr.eleLen = 1; 111564064216a8433360745f69edddce19a606659163The Android Open Source Project DSParamsSet.currChannel = pSiteMgr->pDesiredParams->siteMgrDesiredChannel; 111664064216a8433360745f69edddce19a606659163The Android Open Source Project 111764064216a8433360745f69edddce19a606659163The Android Open Source Project /* Build CF */ 111864064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryZero(pSiteMgr->hOs, &CFParamsSet, sizeof(dot11_CF_PARAMS_t)); 111964064216a8433360745f69edddce19a606659163The Android Open Source Project 112064064216a8433360745f69edddce19a606659163The Android Open Source Project /* Build IBSS */ 112164064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryZero(pSiteMgr->hOs, &IBSSParamsSet, sizeof(dot11_IBSS_PARAMS_t)); 112264064216a8433360745f69edddce19a606659163The Android Open Source Project IBSSParamsSet.hdr.eleLen = 2; 112364064216a8433360745f69edddce19a606659163The Android Open Source Project IBSSParamsSet.atimWindow = pSiteMgr->pDesiredParams->siteMgrDesiredAtimWindow; 112464064216a8433360745f69edddce19a606659163The Android Open Source Project 112564064216a8433360745f69edddce19a606659163The Android Open Source Project frame.content.iePacket.pSsid = &ssid; 112664064216a8433360745f69edddce19a606659163The Android Open Source Project frame.content.iePacket.pRates = &rates; 112764064216a8433360745f69edddce19a606659163The Android Open Source Project 112864064216a8433360745f69edddce19a606659163The Android Open Source Project if(extRatesInd) 112964064216a8433360745f69edddce19a606659163The Android Open Source Project frame.content.iePacket.pExtRates = &extRates; 113064064216a8433360745f69edddce19a606659163The Android Open Source Project else 113164064216a8433360745f69edddce19a606659163The Android Open Source Project frame.content.iePacket.pExtRates = NULL; 113264064216a8433360745f69edddce19a606659163The Android Open Source Project 113364064216a8433360745f69edddce19a606659163The Android Open Source Project frame.content.iePacket.pFHParamsSet = &FHParamsSet; 113464064216a8433360745f69edddce19a606659163The Android Open Source Project frame.content.iePacket.pDSParamsSet = &DSParamsSet; 113564064216a8433360745f69edddce19a606659163The Android Open Source Project frame.content.iePacket.pCFParamsSet = &CFParamsSet; 113664064216a8433360745f69edddce19a606659163The Android Open Source Project frame.content.iePacket.pIBSSParamsSet = &IBSSParamsSet; 113764064216a8433360745f69edddce19a606659163The Android Open Source Project 113864064216a8433360745f69edddce19a606659163The Android Open Source Project band = ( MAX_GB_MODE_CHANEL >= pSiteMgr->pDesiredParams->siteMgrDesiredChannel ? RADIO_BAND_2_4_GHZ : RADIO_BAND_5_0_GHZ ); 113964064216a8433360745f69edddce19a606659163The Android Open Source Project /* Update site */ 114064064216a8433360745f69edddce19a606659163The Android Open Source Project siteMgr_updateSite(pSiteMgr, pBssid, &frame ,pSiteMgr->pDesiredParams->siteMgrDesiredChannel, band, FALSE); 114164064216a8433360745f69edddce19a606659163The Android Open Source Project 114264064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 114364064216a8433360745f69edddce19a606659163The Android Open Source Project} 114464064216a8433360745f69edddce19a606659163The Android Open Source Project 114564064216a8433360745f69edddce19a606659163The Android Open Source Project/*********************************************************************** 114664064216a8433360745f69edddce19a606659163The Android Open Source Project * systemConfig 114764064216a8433360745f69edddce19a606659163The Android Open Source Project *********************************************************************** 114864064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: This function is called by the function 'siteMgr_selectSite()' in order to configure 114964064216a8433360745f69edddce19a606659163The Android Open Source Project the system with the chosen site attribute. 115064064216a8433360745f69edddce19a606659163The Android Open Source Project 115164064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT: pSiteMgr - site mgr handle. 115264064216a8433360745f69edddce19a606659163The Android Open Source Project 115364064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT: 115464064216a8433360745f69edddce19a606659163The Android Open Source Project 115564064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN: OK 115664064216a8433360745f69edddce19a606659163The Android Open Source Project 115764064216a8433360745f69edddce19a606659163The Android Open Source Project************************************************************************/ 115864064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS systemConfig(siteMgr_t *pSiteMgr) 115964064216a8433360745f69edddce19a606659163The Android Open Source Project{ 116064064216a8433360745f69edddce19a606659163The Android Open Source Project siteEntry_t *pPrimarySite = pSiteMgr->pSitesMgmtParams->pPrimarySite; 116164064216a8433360745f69edddce19a606659163The Android Open Source Project rsnData_t rsnData; 116264064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 rsnAssocIeLen; 116364064216a8433360745f69edddce19a606659163The Android Open Source Project dot11_RSN_t *pRsnIe; 116464064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 rsnIECount=0; 116564064216a8433360745f69edddce19a606659163The Android Open Source Project UINT16 length; 116664064216a8433360745f69edddce19a606659163The Android Open Source Project UINT16 capabilities; 116764064216a8433360745f69edddce19a606659163The Android Open Source Project UINT16 PktLength=0; 116864064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 *pIeBuffer=NULL; 116964064216a8433360745f69edddce19a606659163The Android Open Source Project 117064064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef EXC_MODULE_INCLUDED 117164064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 ExternTxPower; 117264064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 117364064216a8433360745f69edddce19a606659163The Android Open Source Project TI_STATUS status; 117464064216a8433360745f69edddce19a606659163The Android Open Source Project slotTime_e slotTime; 117564064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 StaTotalRates; 117664064216a8433360745f69edddce19a606659163The Android Open Source Project ACParameters_t *p_ACParametersDummy = NULL; 117764064216a8433360745f69edddce19a606659163The Android Open Source Project 117864064216a8433360745f69edddce19a606659163The Android Open Source Project 117964064216a8433360745f69edddce19a606659163The Android Open Source Project if (pPrimarySite->probeRecv) 118064064216a8433360745f69edddce19a606659163The Android Open Source Project { 118164064216a8433360745f69edddce19a606659163The Android Open Source Project pIeBuffer = pPrimarySite->probeRespBuffer; 118264064216a8433360745f69edddce19a606659163The Android Open Source Project PktLength = pPrimarySite->probeRespLength; 118364064216a8433360745f69edddce19a606659163The Android Open Source Project } 118464064216a8433360745f69edddce19a606659163The Android Open Source Project else if (pPrimarySite->beaconRecv) 118564064216a8433360745f69edddce19a606659163The Android Open Source Project { 118664064216a8433360745f69edddce19a606659163The Android Open Source Project pIeBuffer = pPrimarySite->beaconBuffer; 118764064216a8433360745f69edddce19a606659163The Android Open Source Project PktLength = pPrimarySite->beaconLength; 118864064216a8433360745f69edddce19a606659163The Android Open Source Project } 118964064216a8433360745f69edddce19a606659163The Android Open Source Project 119064064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->prevRadioBand = pSiteMgr->radioBand; 119164064216a8433360745f69edddce19a606659163The Android Open Source Project 119264064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, 119364064216a8433360745f69edddce19a606659163The Android Open Source Project ("%s: Capabilities, Slot Time Bit = %d (capabilities = %d)\n", __FUNCTION__, (pPrimarySite->capabilities >> CAP_SLOT_TIME_SHIFT) & 1, pPrimarySite->capabilities)); 119464064216a8433360745f69edddce19a606659163The Android Open Source Project 119564064216a8433360745f69edddce19a606659163The Android Open Source Project if(pPrimarySite->channel <= MAX_GB_MODE_CHANEL) 119664064216a8433360745f69edddce19a606659163The Android Open Source Project { 119764064216a8433360745f69edddce19a606659163The Android Open Source Project if(pSiteMgr->pDesiredParams->siteMgrDesiredDot11Mode == DOT11_B_MODE) 119864064216a8433360745f69edddce19a606659163The Android Open Source Project { 119964064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->siteMgrOperationalMode = DOT11_B_MODE; 120064064216a8433360745f69edddce19a606659163The Android Open Source Project slotTime = PHY_SLOT_TIME_LONG; 120164064216a8433360745f69edddce19a606659163The Android Open Source Project 120264064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, 120364064216a8433360745f69edddce19a606659163The Android Open Source Project ("%s: 11b Mode, Slot Time = %d\n", __FUNCTION__, (UINT8)slotTime)); 120464064216a8433360745f69edddce19a606659163The Android Open Source Project } 120564064216a8433360745f69edddce19a606659163The Android Open Source Project else 120664064216a8433360745f69edddce19a606659163The Android Open Source Project { 120764064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->siteMgrOperationalMode = DOT11_G_MODE; 120864064216a8433360745f69edddce19a606659163The Android Open Source Project 120964064216a8433360745f69edddce19a606659163The Android Open Source Project if (((pPrimarySite->capabilities >> CAP_SLOT_TIME_SHIFT) & CAP_SLOT_TIME_MASK) == PHY_SLOT_TIME_SHORT) 121064064216a8433360745f69edddce19a606659163The Android Open Source Project { 121164064216a8433360745f69edddce19a606659163The Android Open Source Project slotTime = pSiteMgr->pDesiredParams->siteMgrDesiredSlotTime; 121264064216a8433360745f69edddce19a606659163The Android Open Source Project 121364064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, 121464064216a8433360745f69edddce19a606659163The Android Open Source Project ("%s: 11g Mode, Slot Time = %d (desired)\n", __FUNCTION__, (UINT8)slotTime)); 121564064216a8433360745f69edddce19a606659163The Android Open Source Project } 121664064216a8433360745f69edddce19a606659163The Android Open Source Project else 121764064216a8433360745f69edddce19a606659163The Android Open Source Project { 121864064216a8433360745f69edddce19a606659163The Android Open Source Project slotTime = PHY_SLOT_TIME_LONG; 121964064216a8433360745f69edddce19a606659163The Android Open Source Project 122064064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, 122164064216a8433360745f69edddce19a606659163The Android Open Source Project ("%s: 11g Mode, Slot Time = %d\n", __FUNCTION__, (UINT8) slotTime)); 122264064216a8433360745f69edddce19a606659163The Android Open Source Project } 122364064216a8433360745f69edddce19a606659163The Android Open Source Project } 122464064216a8433360745f69edddce19a606659163The Android Open Source Project 122564064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->radioBand = RADIO_BAND_2_4_GHZ; 122664064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->pSitesMgmtParams->pCurrentSiteTable = &pSiteMgr->pSitesMgmtParams->dot11BG_sitesTables; 122764064216a8433360745f69edddce19a606659163The Android Open Source Project } 122864064216a8433360745f69edddce19a606659163The Android Open Source Project else 122964064216a8433360745f69edddce19a606659163The Android Open Source Project { 123064064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->siteMgrOperationalMode = DOT11_A_MODE; 123164064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->radioBand = RADIO_BAND_5_0_GHZ; 123264064216a8433360745f69edddce19a606659163The Android Open Source Project slotTime = PHY_SLOT_TIME_SHORT; 123364064216a8433360745f69edddce19a606659163The Android Open Source Project 123464064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, 123564064216a8433360745f69edddce19a606659163The Android Open Source Project ("%s: 11a Mode, Slot Time = %d\n", __FUNCTION__, (UINT8)slotTime)); 123664064216a8433360745f69edddce19a606659163The Android Open Source Project 123764064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->pSitesMgmtParams->pCurrentSiteTable = (siteTablesParams_t *)&pSiteMgr->pSitesMgmtParams->dot11A_sitesTables; 123864064216a8433360745f69edddce19a606659163The Android Open Source Project } 123964064216a8433360745f69edddce19a606659163The Android Open Source Project 124064064216a8433360745f69edddce19a606659163The Android Open Source Project /* since we are moving to the different band, the siteMgr should be reconfigured */ 124164064216a8433360745f69edddce19a606659163The Android Open Source Project if(pSiteMgr->prevRadioBand != pSiteMgr->radioBand) 124264064216a8433360745f69edddce19a606659163The Android Open Source Project siteMgr_bandParamsConfig(pSiteMgr, TRUE); 124364064216a8433360745f69edddce19a606659163The Android Open Source Project 124464064216a8433360745f69edddce19a606659163The Android Open Source Project if(pPrimarySite->channel <= MAX_GB_MODE_CHANEL) 124564064216a8433360745f69edddce19a606659163The Android Open Source Project siteMgr_updateRates(pSiteMgr, FALSE, TRUE); 124664064216a8433360745f69edddce19a606659163The Android Open Source Project else 124764064216a8433360745f69edddce19a606659163The Android Open Source Project siteMgr_updateRates(pSiteMgr, TRUE, TRUE); 124864064216a8433360745f69edddce19a606659163The Android Open Source Project 124964064216a8433360745f69edddce19a606659163The Android Open Source Project /* configure hal with common core-hal parameters */ 125064064216a8433360745f69edddce19a606659163The Android Open Source Project whalCtrl_SetRadioBand(pSiteMgr->hHalCtrl, pSiteMgr->radioBand); 125164064216a8433360745f69edddce19a606659163The Android Open Source Project 125264064216a8433360745f69edddce19a606659163The Android Open Source Project pPrimarySite->currentSlotTime = slotTime; 125364064216a8433360745f69edddce19a606659163The Android Open Source Project whalCtrl_SetSlotTime(pSiteMgr->hHalCtrl, slotTime); 125464064216a8433360745f69edddce19a606659163The Android Open Source Project 125564064216a8433360745f69edddce19a606659163The Android Open Source Project /***************** Config HAL *************************/ 125664064216a8433360745f69edddce19a606659163The Android Open Source Project /* Current Beacon Interval */ 125764064216a8433360745f69edddce19a606659163The Android Open Source Project whalCtrl_SetBeaconInterval( pSiteMgr->hHalCtrl , pPrimarySite->beaconInterval); 125864064216a8433360745f69edddce19a606659163The Android Open Source Project 125964064216a8433360745f69edddce19a606659163The Android Open Source Project /***************** Config Site Manager *************************/ 126064064216a8433360745f69edddce19a606659163The Android Open Source Project /* L.M. Should be fixed, should take into account the AP's rates */ 126164064216a8433360745f69edddce19a606659163The Android Open Source Project if(pSiteMgr->pDesiredParams->siteMgrDesiredModulationType == DRV_MODULATION_CCK) 126264064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->chosenModulation = DRV_MODULATION_CCK; 126364064216a8433360745f69edddce19a606659163The Android Open Source Project else if(pSiteMgr->pDesiredParams->siteMgrDesiredModulationType == DRV_MODULATION_PBCC) 126464064216a8433360745f69edddce19a606659163The Android Open Source Project { 126564064216a8433360745f69edddce19a606659163The Android Open Source Project if(pPrimarySite->probeModulation != DRV_MODULATION_NONE) 126664064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->chosenModulation = pPrimarySite->probeModulation; 126764064216a8433360745f69edddce19a606659163The Android Open Source Project else 126864064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->chosenModulation = pPrimarySite->beaconModulation; 126964064216a8433360745f69edddce19a606659163The Android Open Source Project } 127064064216a8433360745f69edddce19a606659163The Android Open Source Project else 127164064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->chosenModulation = DRV_MODULATION_OFDM; 127264064216a8433360745f69edddce19a606659163The Android Open Source Project 127364064216a8433360745f69edddce19a606659163The Android Open Source Project /* We use this variable in order tp perform the PBCC algorithm. */ 127464064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->currentDataModulation = pSiteMgr->chosenModulation; 127564064216a8433360745f69edddce19a606659163The Android Open Source Project /***************** Config Data CTRL *************************/ 127664064216a8433360745f69edddce19a606659163The Android Open Source Project 127745544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt gSystemCfgParam.paramType = CTRL_DATA_CURRENT_BSSID_PARAM; /* Current BSSID */ 127845544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt os_memoryCopy(pSiteMgr->hOs, &(gSystemCfgParam.content.ctrlDataCurrentBSSID), &(pPrimarySite->bssid), sizeof(macAddress_t)); 127945544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt ctrlData_setParam(pSiteMgr->hCtrlData, &gSystemCfgParam); 128064064216a8433360745f69edddce19a606659163The Android Open Source Project 128145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt gSystemCfgParam.paramType = CTRL_DATA_CURRENT_BSS_TYPE_PARAM; /* Current BSS Type */ 128245544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt gSystemCfgParam.content.ctrlDataCurrentBssType = pPrimarySite->bssType; 128345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt ctrlData_setParam(pSiteMgr->hCtrlData, &gSystemCfgParam); 128464064216a8433360745f69edddce19a606659163The Android Open Source Project 128545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt gSystemCfgParam.paramType = CTRL_DATA_CURRENT_PREAMBLE_TYPE_PARAM; /* Current Preamble Type */ 128664064216a8433360745f69edddce19a606659163The Android Open Source Project if ((pSiteMgr->pDesiredParams->siteMgrDesiredPreambleType == PREAMBLE_SHORT) && 128764064216a8433360745f69edddce19a606659163The Android Open Source Project (pPrimarySite->currentPreambleType == PREAMBLE_SHORT)) 128845544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt gSystemCfgParam.content.ctrlDataCurrentPreambleType = PREAMBLE_SHORT; 128964064216a8433360745f69edddce19a606659163The Android Open Source Project else 129045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt gSystemCfgParam.content.ctrlDataCurrentPreambleType = PREAMBLE_LONG; 129145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt ctrlData_setParam(pSiteMgr->hCtrlData, &gSystemCfgParam); 129264064216a8433360745f69edddce19a606659163The Android Open Source Project 129364064216a8433360745f69edddce19a606659163The Android Open Source Project /* Mutual Rates Matching */ 129464064216a8433360745f69edddce19a606659163The Android Open Source Project StaTotalRates = pSiteMgr->pDesiredParams->siteMgrCurrentDesiredRateMask.basicRateMask | 129564064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->pDesiredParams->siteMgrCurrentDesiredRateMask.supportedRateMask; 129664064216a8433360745f69edddce19a606659163The Android Open Source Project 129764064216a8433360745f69edddce19a606659163The Android Open Source Project 129864064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->pDesiredParams->siteMgrMatchedSuppRateMask = StaTotalRates & 129964064216a8433360745f69edddce19a606659163The Android Open Source Project pPrimarySite->rateMask.supportedRateMask; 130064064216a8433360745f69edddce19a606659163The Android Open Source Project 130164064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->pDesiredParams->siteMgrMatchedBasicRateMask = StaTotalRates & 130264064216a8433360745f69edddce19a606659163The Android Open Source Project pPrimarySite->rateMask.basicRateMask; 130364064216a8433360745f69edddce19a606659163The Android Open Source Project if (pSiteMgr->pDesiredParams->siteMgrMatchedBasicRateMask == 0) 130464064216a8433360745f69edddce19a606659163The Android Open Source Project { 130564064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->pDesiredParams->siteMgrMatchedBasicRateMask = 130664064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->pDesiredParams->siteMgrCurrentDesiredRateMask.basicRateMask; 130764064216a8433360745f69edddce19a606659163The Android Open Source Project } 130864064216a8433360745f69edddce19a606659163The Android Open Source Project 130964064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->pDesiredParams->siteMgrMatchedMaxBasicRate = getMaxRatefromBitmap(pSiteMgr->pDesiredParams->siteMgrMatchedBasicRateMask); 131064064216a8433360745f69edddce19a606659163The Android Open Source Project 131164064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->pDesiredParams->siteMgrMatchedMaxActiveRate = getMaxRatefromBitmap(pSiteMgr->pDesiredParams->siteMgrMatchedSuppRateMask); 131264064216a8433360745f69edddce19a606659163The Android Open Source Project 131364064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->pDesiredParams->siteMgrMatchedMaxActiveRate = MAX(pSiteMgr->pDesiredParams->siteMgrMatchedMaxBasicRate,pSiteMgr->pDesiredParams->siteMgrMatchedMaxActiveRate); 131464064216a8433360745f69edddce19a606659163The Android Open Source Project 131545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt gSystemCfgParam.paramType = CTRL_DATA_CURRENT_BASIC_RATE_PARAM; /* Current Basic Rate */ 131645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt gSystemCfgParam.content.ctrlDataCurrentBasicRate = (rate_e)pSiteMgr->pDesiredParams->siteMgrMatchedMaxBasicRate; 131745544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt ctrlData_setParam(pSiteMgr->hCtrlData, &gSystemCfgParam); 131864064216a8433360745f69edddce19a606659163The Android Open Source Project 131945544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt gSystemCfgParam.paramType = CTRL_DATA_CURRENT_BASIC_RATE_MASK_PARAM; 132045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt gSystemCfgParam.content.ctrlDataBasicRateBitMask = pSiteMgr->pDesiredParams->siteMgrMatchedBasicRateMask; 132145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt ctrlData_setParam(pSiteMgr->hCtrlData, &gSystemCfgParam); 132245544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt gSystemCfgParam.paramType = CTRL_DATA_CURRENT_BASIC_MODULATION_PARAM; /* Current Mgmt Rate */ 132364064216a8433360745f69edddce19a606659163The Android Open Source Project if ((pPrimarySite->maxBasicRate == DRV_RATE_1M) || (pPrimarySite->maxBasicRate == DRV_RATE_2M)) 132445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt gSystemCfgParam.content.ctrlDataCurrentBasicModulationType = DRV_MODULATION_QPSK; 132564064216a8433360745f69edddce19a606659163The Android Open Source Project else if (pPrimarySite->maxBasicRate == DRV_RATE_22M) 132645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt gSystemCfgParam.content.ctrlDataCurrentBasicModulationType = DRV_MODULATION_PBCC; 132764064216a8433360745f69edddce19a606659163The Android Open Source Project else if (pPrimarySite->maxBasicRate < DRV_RATE_22M) 132845544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt gSystemCfgParam.content.ctrlDataCurrentBasicModulationType = DRV_MODULATION_CCK; 132964064216a8433360745f69edddce19a606659163The Android Open Source Project else 133045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt gSystemCfgParam.content.ctrlDataCurrentBasicModulationType = DRV_MODULATION_OFDM; 133164064216a8433360745f69edddce19a606659163The Android Open Source Project 133245544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt ctrlData_setParam(pSiteMgr->hCtrlData, &gSystemCfgParam); 133345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt gSystemCfgParam.paramType = CTRL_DATA_CURRENT_PROTECTION_STATUS_PARAM; 133445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt gSystemCfgParam.content.ctrlDataProtectionEnabled = pPrimarySite->useProtection; 133545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt ctrlData_setParam(pSiteMgr->hCtrlData, &gSystemCfgParam); 133664064216a8433360745f69edddce19a606659163The Android Open Source Project 133764064216a8433360745f69edddce19a606659163The Android Open Source Project ctrlData_setSite(pSiteMgr->hCtrlData, &pPrimarySite->fourXParams); 133864064216a8433360745f69edddce19a606659163The Android Open Source Project 133964064216a8433360745f69edddce19a606659163The Android Open Source Project pbccAlgorithm(pSiteMgr); 134064064216a8433360745f69edddce19a606659163The Android Open Source Project 134164064216a8433360745f69edddce19a606659163The Android Open Source Project /********** Set Site QOS protocol support *************/ 134264064216a8433360745f69edddce19a606659163The Android Open Source Project 134364064216a8433360745f69edddce19a606659163The Android Open Source Project /* Set WME Params */ 134464064216a8433360745f69edddce19a606659163The Android Open Source Project status = siteMgr_getWMEParamsSite(pSiteMgr,&p_ACParametersDummy); 134564064216a8433360745f69edddce19a606659163The Android Open Source Project if(status == OK) 134664064216a8433360745f69edddce19a606659163The Android Open Source Project { 134745544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt gSystemCfgParam.content.qosSiteProtocol = WME; 134864064216a8433360745f69edddce19a606659163The Android Open Source Project } 134964064216a8433360745f69edddce19a606659163The Android Open Source Project else 135064064216a8433360745f69edddce19a606659163The Android Open Source Project { 135145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt gSystemCfgParam.content.qosSiteProtocol = NONE_QOS; 135264064216a8433360745f69edddce19a606659163The Android Open Source Project } 135364064216a8433360745f69edddce19a606659163The Android Open Source Project 135464064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_DEBUG_TX(pSiteMgr->hReport, 135545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt (" systemConfigt() : param.content.qosSiteProtoco %d\n", gSystemCfgParam.content.qosSiteProtocol)); 135664064216a8433360745f69edddce19a606659163The Android Open Source Project 135745544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt gSystemCfgParam.paramType = QOS_MNGR_SET_SITE_PROTOCOL; 135845544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt qosMngr_setParams(pSiteMgr->hQosMngr,&gSystemCfgParam); 135964064216a8433360745f69edddce19a606659163The Android Open Source Project 136064064216a8433360745f69edddce19a606659163The Android Open Source Project /* Set active protocol in qosMngr according to station desired mode and site capabilities 136164064216a8433360745f69edddce19a606659163The Android Open Source Project Must be called BEFORE setting the "CURRENT_PS_MODE" into the QosMngr */ 136264064216a8433360745f69edddce19a606659163The Android Open Source Project qosMngr_selectActiveProtocol(pSiteMgr->hQosMngr); 136364064216a8433360745f69edddce19a606659163The Android Open Source Project 136464064216a8433360745f69edddce19a606659163The Android Open Source Project /* set PS capability parameter */ 136545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt gSystemCfgParam.paramType = QOS_MNGR_CURRENT_PS_MODE; 136664064216a8433360745f69edddce19a606659163The Android Open Source Project if(pPrimarySite->APSDSupport == TRUE) 136745544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt gSystemCfgParam.content.currentPsMode = PS_SCHEME_UPSD_TRIGGER; 136864064216a8433360745f69edddce19a606659163The Android Open Source Project else 136945544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt gSystemCfgParam.content.currentPsMode = PS_SCHEME_LEGACY_PSPOLL; 137045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt qosMngr_setParams(pSiteMgr->hQosMngr,&gSystemCfgParam); 137164064216a8433360745f69edddce19a606659163The Android Open Source Project 137264064216a8433360745f69edddce19a606659163The Android Open Source Project /* Set upsd/ps_poll configuration */ 137364064216a8433360745f69edddce19a606659163The Android Open Source Project /* Must be done AFTER setting the active Protocol */ 137464064216a8433360745f69edddce19a606659163The Android Open Source Project qosMngr_setAcPsDeliveryMode (pSiteMgr->hQosMngr); 137564064216a8433360745f69edddce19a606659163The Android Open Source Project 137664064216a8433360745f69edddce19a606659163The Android Open Source Project /***************** Config RSN *************************/ 137764064216a8433360745f69edddce19a606659163The Android Open Source Project /* Get the RSN IE data */ 137864064216a8433360745f69edddce19a606659163The Android Open Source Project pRsnIe = pPrimarySite->pRsnIe; 137964064216a8433360745f69edddce19a606659163The Android Open Source Project length=0; 138064064216a8433360745f69edddce19a606659163The Android Open Source Project rsnIECount = 0; 138164064216a8433360745f69edddce19a606659163The Android Open Source Project while ((length < pPrimarySite->rsnIeLen) && (pPrimarySite->rsnIeLen < 255) 138264064216a8433360745f69edddce19a606659163The Android Open Source Project && (rsnIECount < MAX_RSN_IE)) 138364064216a8433360745f69edddce19a606659163The Android Open Source Project { 138464064216a8433360745f69edddce19a606659163The Android Open Source Project curRsnData[0+length] = pRsnIe->hdr.eleId; 138564064216a8433360745f69edddce19a606659163The Android Open Source Project curRsnData[1+length] = pRsnIe->hdr.eleLen; 138664064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pSiteMgr->hOs, &curRsnData[2+length], (void *)pRsnIe->rsnIeData, pRsnIe->hdr.eleLen); 138764064216a8433360745f69edddce19a606659163The Android Open Source Project length += pRsnIe->hdr.eleLen+2; 138864064216a8433360745f69edddce19a606659163The Android Open Source Project pRsnIe += 1; 138964064216a8433360745f69edddce19a606659163The Android Open Source Project rsnIECount++; 139064064216a8433360745f69edddce19a606659163The Android Open Source Project } 139164064216a8433360745f69edddce19a606659163The Android Open Source Project if (length<pPrimarySite->rsnIeLen) 139264064216a8433360745f69edddce19a606659163The Android Open Source Project { 139364064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, 139464064216a8433360745f69edddce19a606659163The Android Open Source Project ("siteMgr_selectSiteFromTable, RSN IE is too long: rsnIeLen=%d, MAX_RSN_IE=%d\n", 139564064216a8433360745f69edddce19a606659163The Android Open Source Project pPrimarySite->rsnIeLen, MAX_RSN_IE)); 139664064216a8433360745f69edddce19a606659163The Android Open Source Project } 139764064216a8433360745f69edddce19a606659163The Android Open Source Project 139864064216a8433360745f69edddce19a606659163The Android Open Source Project rsnData.pIe = (pPrimarySite->rsnIeLen==0) ? NULL :curRsnData; 139964064216a8433360745f69edddce19a606659163The Android Open Source Project rsnData.ieLen = pPrimarySite->rsnIeLen; 140064064216a8433360745f69edddce19a606659163The Android Open Source Project rsnData.privacy = pPrimarySite->privacy; 140164064216a8433360745f69edddce19a606659163The Android Open Source Project 140264064216a8433360745f69edddce19a606659163The Android Open Source Project rsn_setSite(pSiteMgr->hRsn, &rsnData, NULL, &rsnAssocIeLen); 140364064216a8433360745f69edddce19a606659163The Android Open Source Project 140464064216a8433360745f69edddce19a606659163The Android Open Source Project /***************** Config RegulatoryDomain **************************/ 140564064216a8433360745f69edddce19a606659163The Android Open Source Project 140664064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef EXC_MODULE_INCLUDED 140764064216a8433360745f69edddce19a606659163The Android Open Source Project /* set EXC TPC if present */ 140864064216a8433360745f69edddce19a606659163The Android Open Source Project if(Exc_ParseClientTP(pSiteMgr->hOs,pPrimarySite,&ExternTxPower,pIeBuffer,PktLength) == OK) 140964064216a8433360745f69edddce19a606659163The Android Open Source Project { 141064064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, 141164064216a8433360745f69edddce19a606659163The Android Open Source Project ("Select Exc_ParseClientTP == OK: Dbm = %d\n",ExternTxPower)); 141245544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt gSystemCfgParam.paramType = REGULATORY_DOMAIN_EXTERN_TX_POWER_PREFERRED; 141345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt gSystemCfgParam.content.ExternTxPowerPreferred = ExternTxPower; 141445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt regulatoryDomain_setParam(pSiteMgr->hRegulatoryDomain,&gSystemCfgParam); 141564064216a8433360745f69edddce19a606659163The Android Open Source Project } 141664064216a8433360745f69edddce19a606659163The Android Open Source Project /* Parse and save the EXC Version Number if exists */ 141764064216a8433360745f69edddce19a606659163The Android Open Source Project excMngr_parseExcVer(pSiteMgr->hExcMngr, pIeBuffer, PktLength); 141864064216a8433360745f69edddce19a606659163The Android Open Source Project 141964064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 142064064216a8433360745f69edddce19a606659163The Android Open Source Project 142164064216a8433360745f69edddce19a606659163The Android Open Source Project /* Note: TX Power Control adjustment is now done through siteMgr_assocReport() */ 142264064216a8433360745f69edddce19a606659163The Android Open Source Project if (pPrimarySite->powerConstraint>0) 142364064216a8433360745f69edddce19a606659163The Android Open Source Project { /* setting power constraint */ 142445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt gSystemCfgParam.paramType = REGULATORY_DOMAIN_SET_POWER_CONSTRAINT_PARAM; 142545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt gSystemCfgParam.content.powerConstraint = pPrimarySite->powerConstraint; 142645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt regulatoryDomain_setParam(pSiteMgr->hRegulatoryDomain,&gSystemCfgParam); 142764064216a8433360745f69edddce19a606659163The Android Open Source Project } 142864064216a8433360745f69edddce19a606659163The Android Open Source Project 142964064216a8433360745f69edddce19a606659163The Android Open Source Project 143064064216a8433360745f69edddce19a606659163The Android Open Source Project /***************** Config MeasurementMgr object **************************/ 143164064216a8433360745f69edddce19a606659163The Android Open Source Project capabilities = pPrimarySite->capabilities; 143264064216a8433360745f69edddce19a606659163The Android Open Source Project 143364064216a8433360745f69edddce19a606659163The Android Open Source Project /* Updating the Measurement Module Mode */ 143464064216a8433360745f69edddce19a606659163The Android Open Source Project measurementMgr_setMeasurementMode(pSiteMgr->hMeasurementMgr, capabilities, 143564064216a8433360745f69edddce19a606659163The Android Open Source Project pIeBuffer, PktLength); 143664064216a8433360745f69edddce19a606659163The Android Open Source Project 143764064216a8433360745f69edddce19a606659163The Android Open Source Project 143864064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 143964064216a8433360745f69edddce19a606659163The Android Open Source Project} 1440