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,&param);
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,&param);
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, &param);
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,&param);
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, &param);
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,&param);
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, &param);
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