Home | History | Annotate | Download | only in Sta_Management
      1 /*
      2  * systemConfig.c
      3  *
      4  * Copyright(c) 1998 - 2010 Texas Instruments. All rights reserved.
      5  * All rights reserved.
      6  *
      7  * Redistribution and use in source and binary forms, with or without
      8  * modification, are permitted provided that the following conditions
      9  * are met:
     10  *
     11  *  * Redistributions of source code must retain the above copyright
     12  *    notice, this list of conditions and the following disclaimer.
     13  *  * Redistributions in binary form must reproduce the above copyright
     14  *    notice, this list of conditions and the following disclaimer in
     15  *    the documentation and/or other materials provided with the
     16  *    distribution.
     17  *  * Neither the name Texas Instruments nor the names of its
     18  *    contributors may be used to endorse or promote products derived
     19  *    from this software without specific prior written permission.
     20  *
     21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     24  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     25  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     26  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     27  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     28  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     29  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     30  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     31  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     32  */
     33 
     34 /** \file reportReplvl.c
     35  *  \brief Report level implementation
     36  *
     37  *  \see reportReplvl.h
     38  */
     39 
     40 /***************************************************************************/
     41 /*																			*/
     42 /*		MODULE:	reportReplvl.c												*/
     43 /*    PURPOSE:	Report level implementation	 								*/
     44 /*																			*/
     45 /***************************************************************************/
     46 #define __FILE_ID__  FILE_ID_87
     47 #include "tidef.h"
     48 #include "osApi.h"
     49 #include "siteHash.h"
     50 #include "sme.h"
     51 #include "rate.h"
     52 #include "smeApi.h"
     53 #include "rsnApi.h"
     54 #include "report.h"
     55 #include "TWDriver.h"
     56 #include "connApi.h"
     57 #include "DataCtrl_Api.h"
     58 #include "siteMgrApi.h"
     59 #include "EvHandler.h"
     60 #include "TI_IPC_Api.h"
     61 #include "regulatoryDomainApi.h"
     62 #include "measurementMgrApi.h"
     63 #ifdef XCC_MODULE_INCLUDED
     64 #include "XCCMngr.h"
     65 #include "TransmitPowerXCC.h"
     66 #include "XCCRMMngr.h"
     67 #endif
     68 
     69 #include "qosMngr_API.h"
     70 #include "StaCap.h"
     71 
     72 
     73 /****************************************************************************
     74 								MATRIC ISSUE
     75 	Each function in the select process returns a MATCH, NO_MATCH value in order to
     76 	skip non relevant sites. In addition, some of the functions also measures a matching level of a site.
     77 	The matching level is returned as a bit map. The select function 'OR's those bit maps in order to
     78 	select the site that has the biggest matching level. If a function returns a NO_MATCH value, the matching level of the
     79 	site is reset.
     80 	Following is the site matching level bit map structure.
     81 	Please notice, that if all the match functions returned MATCH for a site, its matric must be different than 0,
     82 	because of the rates bits.
     83 
     84 
     85 	    31 - 24           23 - 20           20 - 16             15 - 10       9 - 8         7         6           5         4 - 0
     86 	+---------------+---------------+-----------------------+-------------+------------+----------+---------+-----------+-----------+
     87 	| Rx Level      | Privacy       | Attempts              |Rates        | Modulation |Preamble  | Channel | Spectrum  | Reserved  |
     88 	|		        |	    		|		                | 		      |			   |		  |		    | management|		    |
     89 	+---------------+---------------+-----------------------+-------------+------------+----------+---------+-----------+-----------+
     90 ****************************************************************************/
     91 
     92 /* Matric bit map definition */
     93 typedef enum
     94 {
     95 	/* Rx level */
     96 	METRIC_RX_LEVEL_MASK			= 0xFF,
     97 	METRIC_RX_LEVEL_SHIFT			= 24,
     98 
     99 	/* Privacy */
    100 	METRIC_PRIVACY_MASK				= 0x0F,
    101 	METRIC_PRIVACY_SHIFT			= 20,
    102 
    103 	/* Number of attempts */
    104 	METRIC_ATTEMPTS_NUMBER_MASK		= 0x0F,
    105 	METRIC_ATTEMPTS_NUMBER_SHIFT	= 16,
    106 
    107 
    108 	/* Rates */
    109 	METRIC_RATES_MASK				= 0x3F,
    110 	METRIC_RATES_SHIFT				= 10,
    111 
    112 	/* PBCC */
    113 	METRIC_MODULATION_MASK			= 0x03,
    114 	METRIC_MODULATION_SHIFT			= 8,
    115 
    116 	/* Preamble*/
    117 	METRIC_PREAMBLE_MASK			= 0x01,
    118 	METRIC_PREAMBLE_SHIFT			= 7,
    119 
    120 	/* Channel */
    121 	METRIC_CHANNEL_MASK				= 0x01,
    122 	METRIC_CHANNEL_SHIFT			= 6,
    123 
    124 	/* Spectrum management Capability */
    125 	METRIC_SPECTRUM_MANAGEMENT_MASK	= 0x01,
    126 	METRIC_SPECTRUM_MANAGEMENT_SHIFT= 5,
    127 
    128 	/* Priority Site */
    129 	METRIC_PRIORITY_SITE_MASK		= 0x01,
    130 	METRIC_PRIORITY_SITE_SHIFT		= 4
    131 
    132 } matric_e;
    133 
    134 #define MAX_GB_MODE_CHANEL		14
    135 
    136 #define MAX_RSN_DATA_SIZE       256
    137 
    138 /* RSSI values boundaries and metric values for best, good, etc  signals */
    139 #define SELECT_RSSI_BEST_LEVEL      (-22)
    140 #define SELECT_RSSI_GOOD_LEVEL      (-38)
    141 #define SELECT_RSSI_NORMAL_LEVEL    (-56)
    142 #define SELECT_RSSI_POOR_LEVEL      (-72)
    143 #define SELECT_RSSI_BAD_LEVEL       (-82)
    144 
    145 
    146 #define  RSSI_METRIC_BEST      6
    147 #define  RSSI_METRIC_GOOD      5
    148 #define  RSSI_METRIC_NORMAL    4
    149 #define  RSSI_METRIC_POOR      3
    150 #define  RSSI_METRIC_BAD       2
    151 #define  RSSI_METRIC_NOSIGNAL  1
    152 
    153 /* Local functions prototypes */
    154 
    155 static TI_STATUS sendProbeResponse(siteMgr_t *pSiteMgr, TMacAddr *pBssid);
    156 
    157 /* Interface functions Implementation */
    158 
    159 /***********************************************************************
    160  *                        addSelfSite
    161  ***********************************************************************
    162 DESCRIPTION: This function is called if the selection fails and desired BSS type is IBSS
    163 			That means we creating our own network and wait for other stations to join us.
    164 			the best site for teh station.
    165 			Performs the following:
    166 				-	If the desired BSSID is broadcast, we generate a random BSSId, otherwise we use the desired one.
    167 				-	If the site table is full we remove the most old site
    168 				-	We send a probe response with our oiwn desired attributes in order to add the site to the site table
    169 
    170 INPUT:      pSiteMgr	-	site mgr handle.
    171 
    172 OUTPUT:
    173 
    174 RETURN:     Pointer to rthe self site entry in the site table
    175 
    176 ************************************************************************/
    177 siteEntry_t *addSelfSite(TI_HANDLE hSiteMgr)
    178 {
    179 	siteMgr_t       *pSiteMgr = (siteMgr_t *)hSiteMgr;
    180     siteEntry_t		*pSite;
    181 	TMacAddr		bssid;
    182     TSsid           *pSsid    = &pSiteMgr->pDesiredParams->siteMgrDesiredSSID;
    183 
    184 	if (OS_802_11_SSID_JUNK (pSsid->str, pSsid->len))
    185 		return NULL;
    186 
    187 	if ((MAC_BROADCAST (pSiteMgr->pDesiredParams->siteMgrDesiredBSSID)) ||
    188 		(BSS_INDEPENDENT == pSiteMgr->pDesiredParams->siteMgrDesiredBSSType))
    189 	{
    190 		MAC_COPY (bssid, pSiteMgr->ibssBssid);
    191 	}
    192 	else
    193 	{
    194 		MAC_COPY (bssid, pSiteMgr->pDesiredParams->siteMgrDesiredBSSID);
    195 	}
    196 
    197 	if(pSiteMgr->pDesiredParams->siteMgrDesiredChannel <= 14)
    198 	{
    199 		pSiteMgr->pSitesMgmtParams->pCurrentSiteTable = &pSiteMgr->pSitesMgmtParams->dot11BG_sitesTables;
    200         pSiteMgr->siteMgrOperationalMode = DOT11_G_MODE;
    201 	}
    202 	else
    203 	{
    204 		pSiteMgr->pSitesMgmtParams->pCurrentSiteTable = (siteTablesParams_t *)&pSiteMgr->pSitesMgmtParams->dot11A_sitesTables;
    205 		pSiteMgr->siteMgrOperationalMode = DOT11_A_MODE;
    206 	}
    207 
    208     siteMgr_ConfigRate(pSiteMgr);
    209 
    210 	/* First make sure that there is a place in the site table, if not, reomve the eldest site. */
    211 	if (pSiteMgr->pSitesMgmtParams->pCurrentSiteTable->numOfSites == pSiteMgr->pSitesMgmtParams->pCurrentSiteTable->maxNumOfSites)
    212 		removeEldestSite(pSiteMgr);
    213 
    214 	sendProbeResponse(pSiteMgr, &bssid);
    215 
    216 	/* Now find the site in the site table. */
    217 	pSite = findSiteEntry(pSiteMgr, &bssid);
    218 	if (pSite == NULL)
    219 	{
    220 		return NULL;
    221 	}
    222 	pSite->beaconModulation = pSite->probeModulation;
    223 	pSite->barkerPreambleType = PREAMBLE_UNSPECIFIED;
    224 
    225    	pSiteMgr->pSitesMgmtParams->pPrimarySite = pSite;
    226 	pSite->siteType = SITE_SELF;
    227     pSite->bssType = BSS_INDEPENDENT;
    228 
    229 	return pSite;
    230 }
    231 
    232 /***********************************************************************
    233  *                        sendProbeResponse
    234  ***********************************************************************
    235 DESCRIPTION: This function is called by the function 'addSelfSite()' in order to send a probe response
    236 			to the site mgr. This will cause the site manager to add a new entry to the site table, the self site entry.
    237 
    238 INPUT:      pSiteMgr	-	site mgr handle.
    239 			pBssid		-	Received BSSID
    240 
    241 OUTPUT:
    242 
    243 RETURN:     TI_OK
    244 
    245 ************************************************************************/
    246 static TI_STATUS sendProbeResponse(siteMgr_t *pSiteMgr, TMacAddr *pBssid)
    247 {
    248 	mlmeFrameInfo_t		frame;
    249     ECipherSuite        rsnStatus;
    250 	dot11_SSID_t 		ssid;
    251 	dot11_RATES_t 		rates;
    252 	dot11_FH_PARAMS_t 	FHParamsSet;
    253 	dot11_DS_PARAMS_t 	DSParamsSet;
    254 	dot11_CF_PARAMS_t 	CFParamsSet;
    255 	dot11_IBSS_PARAMS_t IBSSParamsSet;
    256 	TI_UINT32			len = 0, ofdmIndex = 0;
    257     ERadioBand          band;
    258 	dot11_RATES_t 		extRates;
    259 	TI_UINT8			ratesBuf[DOT11_MAX_SUPPORTED_RATES];
    260 	TI_BOOL				extRatesInd = TI_FALSE;
    261 
    262 	/* The easiest way to add a site to the site table is to simulate a probe frame. */
    263 	frame.subType = PROBE_RESPONSE;
    264 	os_memoryZero(pSiteMgr->hOs, &frame, sizeof(mlmeFrameInfo_t));
    265 		/* Initialize the frame fields */
    266 	frame.subType = PROBE_RESPONSE;
    267 	os_memoryZero(pSiteMgr->hOs, (void *)frame.content.iePacket.timestamp, TIME_STAMP_LEN);
    268 
    269 	/* Build  Beacon interval  */
    270 	frame.content.iePacket.beaconInerval = pSiteMgr->pDesiredParams->siteMgrDesiredBeaconInterval;
    271 
    272 	/* Build  capability field */
    273 	frame.content.iePacket.capabilities = 0;
    274 	frame.content.iePacket.capabilities |= (TI_TRUE << CAP_IBSS_SHIFT); /* Bss type must be independent */
    275 
    276 	if ((pSiteMgr->pDesiredParams->siteMgrDesiredPreambleType == PREAMBLE_SHORT))
    277 		frame.content.iePacket.capabilities |= (TI_TRUE << CAP_PREAMBLE_SHIFT);
    278 
    279 	/* call RSN to get the privacy desired */
    280     rsn_getParamEncryptionStatus(pSiteMgr->hRsn, &rsnStatus); /* RSN_ENCRYPTION_STATUS_PARAM */
    281 	if (rsnStatus == TWD_CIPHER_NONE)
    282 	{
    283 		frame.content.iePacket.capabilities |= (TI_FALSE << CAP_PRIVACY_SHIFT);
    284 	}
    285     else
    286     {
    287 		frame.content.iePacket.capabilities |= (TI_TRUE << CAP_PRIVACY_SHIFT);
    288 	}
    289 
    290 	if (pSiteMgr->pDesiredParams->siteMgrDesiredModulationType == DRV_MODULATION_PBCC)
    291 		frame.content.iePacket.capabilities |= (TI_TRUE << CAP_PBCC_SHIFT);
    292 
    293     if (pSiteMgr->siteMgrOperationalMode == DOT11_G_MODE)
    294     {
    295         if(pSiteMgr->pDesiredParams->siteMgrDesiredSlotTime == PHY_SLOT_TIME_SHORT)
    296             frame.content.iePacket.capabilities |= (TI_TRUE << CAP_SLOT_TIME_SHIFT);
    297     }
    298 
    299 	/* Build ssid */
    300 	os_memoryZero(pSiteMgr->hOs, (void *)ssid.serviceSetId, MAX_SSID_LEN);
    301 
    302     ssid.hdr[1] = pSiteMgr->pDesiredParams->siteMgrDesiredSSID.len;
    303     if (ssid.hdr[1] > MAX_SSID_LEN)
    304     {
    305         TRACE2(pSiteMgr->hReport, REPORT_SEVERITY_ERROR,
    306                "sendProbeResponse. siteMgrDesiredSSID.len=%d exceeds the limit %d\n",
    307                pSiteMgr->pDesiredParams->siteMgrDesiredSSID.len, MAX_SSID_LEN);
    308         ssid.hdr[1] = MAX_SSID_LEN;
    309     }
    310     os_memoryCopy(pSiteMgr->hOs, (void *)ssid.serviceSetId, (void *)pSiteMgr->pDesiredParams->siteMgrDesiredSSID.str, ssid.hdr[1]);
    311 
    312 	if(pSiteMgr->pDesiredParams->siteMgrDesiredChannel <= MAX_GB_MODE_CHANEL)
    313 		siteMgr_updateRates(pSiteMgr, TI_FALSE, TI_TRUE);
    314 	else
    315 		siteMgr_updateRates(pSiteMgr, TI_TRUE, TI_TRUE);
    316 
    317 	/* Build Rates */
    318 	rate_DrvBitmapToNetStr (pSiteMgr->pDesiredParams->siteMgrCurrentDesiredRateMask.supportedRateMask,
    319 						    pSiteMgr->pDesiredParams->siteMgrCurrentDesiredRateMask.basicRateMask,
    320                             ratesBuf,
    321                             &len,
    322                             &ofdmIndex);
    323 
    324 	if(pSiteMgr->siteMgrOperationalMode != DOT11_G_MODE ||
    325        pSiteMgr->pDesiredParams->siteMgrUseDraftNum == DRAFT_5_AND_EARLIER ||
    326 	   ofdmIndex == len)
    327 	{
    328 		rates.hdr[0] = DOT11_SUPPORTED_RATES_ELE_ID;
    329 		rates.hdr[1] = len;
    330 		os_memoryCopy(pSiteMgr->hOs, (void *)rates.rates, ratesBuf, rates.hdr[1]);
    331 	}
    332 	else
    333 	{
    334 		rates.hdr[0] = DOT11_SUPPORTED_RATES_ELE_ID;
    335 		rates.hdr[1] = ofdmIndex;
    336 		os_memoryCopy(pSiteMgr->hOs, (void *)rates.rates, ratesBuf, rates.hdr[1]);
    337 
    338 		extRates.hdr[0] = DOT11_EXT_SUPPORTED_RATES_ELE_ID;
    339 		extRates.hdr[1] = len - ofdmIndex;
    340 		os_memoryCopy(pSiteMgr->hOs, (void *)extRates.rates, &ratesBuf[ofdmIndex], extRates.hdr[1]);
    341 		extRatesInd = TI_TRUE;
    342 	}
    343 
    344     if((pSiteMgr->siteMgrOperationalMode == DOT11_G_MODE) || (pSiteMgr->siteMgrOperationalMode == DOT11_DUAL_MODE))
    345     {
    346         erpProtectionType_e protType;
    347         ctrlData_getParamProtType(pSiteMgr->hCtrlData, &protType); /* CTRL_DATA_CURRENT_IBSS_PROTECTION_PARAM */
    348         frame.content.iePacket.useProtection = protType;
    349     }
    350     else
    351     {
    352         frame.content.iePacket.useProtection = ERP_PROTECTION_NONE;
    353     }
    354 
    355 	/* Build FH */
    356 	os_memoryZero(pSiteMgr->hOs, &FHParamsSet, sizeof(dot11_FH_PARAMS_t));
    357 
    358 	/* Build DS */
    359 	DSParamsSet.hdr[1] = 1;
    360 	DSParamsSet.currChannel = pSiteMgr->pDesiredParams->siteMgrDesiredChannel;
    361 
    362 	/* Build CF */
    363 	os_memoryZero(pSiteMgr->hOs, &CFParamsSet, sizeof(dot11_CF_PARAMS_t));
    364 
    365 	/* Build IBSS */
    366 	os_memoryZero(pSiteMgr->hOs, &IBSSParamsSet, sizeof(dot11_IBSS_PARAMS_t));
    367 	IBSSParamsSet.hdr[1] = 2;
    368 	IBSSParamsSet.atimWindow = pSiteMgr->pDesiredParams->siteMgrDesiredAtimWindow;
    369 
    370 	frame.content.iePacket.pSsid = &ssid;
    371 	frame.content.iePacket.pRates = &rates;
    372 
    373 	if(extRatesInd)
    374 		frame.content.iePacket.pExtRates = &extRates;
    375 	else
    376 		frame.content.iePacket.pExtRates = NULL;
    377 
    378 	frame.content.iePacket.pFHParamsSet = &FHParamsSet;
    379 	frame.content.iePacket.pDSParamsSet = &DSParamsSet;
    380 	frame.content.iePacket.pCFParamsSet = &CFParamsSet;
    381 	frame.content.iePacket.pIBSSParamsSet = &IBSSParamsSet;
    382 
    383     band = ( MAX_GB_MODE_CHANEL >= pSiteMgr->pDesiredParams->siteMgrDesiredChannel ? RADIO_BAND_2_4_GHZ : RADIO_BAND_5_0_GHZ );
    384 	/* Update site */
    385 	siteMgr_updateSite(pSiteMgr, pBssid, &frame ,pSiteMgr->pDesiredParams->siteMgrDesiredChannel, band, TI_FALSE);
    386 
    387 	return TI_OK;
    388 }
    389 
    390 /***********************************************************************
    391  *                        systemConfig
    392  ***********************************************************************
    393 DESCRIPTION: This function is called by the function 'siteMgr_selectSite()' in order to configure
    394 			the system with the chosen site attribute.
    395 
    396 INPUT:      pSiteMgr	-	site mgr handle.
    397 
    398 OUTPUT:
    399 
    400 RETURN:     TI_OK
    401 
    402 ************************************************************************/
    403 TI_STATUS systemConfig(siteMgr_t *pSiteMgr)
    404 {
    405 	paramInfo_t *pParam;
    406 	siteEntry_t *pPrimarySite = pSiteMgr->pSitesMgmtParams->pPrimarySite;
    407 	TRsnData	rsnData;
    408 	TI_UINT8	rsnAssocIeLen;
    409     dot11_RSN_t *pRsnIe;
    410     TI_UINT8    rsnIECount=0;
    411     TI_UINT8    *curRsnData;
    412     TI_UINT16   length;
    413     TI_UINT16   capabilities;
    414     TI_UINT16   PktLength=0;
    415     TI_UINT8	*pIeBuffer=NULL;
    416     TI_BOOL     b11nEnable;
    417     TI_BOOL     bWmeEnable;
    418 
    419 #ifdef XCC_MODULE_INCLUDED
    420     TI_UINT8     ExternTxPower;
    421 #endif
    422 	TI_STATUS	status;
    423 	ESlotTime	slotTime;
    424 	TI_UINT32	StaTotalRates;
    425 	dot11_ACParameters_t *p_ACParametersDummy = NULL;
    426     TtxCtrlHtControl tHtControl;
    427 
    428     curRsnData = os_memoryAlloc(pSiteMgr->hOs, MAX_RSN_DATA_SIZE);
    429     if (!curRsnData)
    430         return TI_NOK;
    431     pParam = (paramInfo_t *)os_memoryAlloc(pSiteMgr->hOs, sizeof(paramInfo_t));
    432     if (!pParam) {
    433         os_memoryFree(pSiteMgr->hOs, curRsnData, MAX_RSN_DATA_SIZE);
    434         return TI_NOK;
    435     }
    436 
    437 	if (pPrimarySite->probeRecv)
    438 	{
    439 		pIeBuffer = pPrimarySite->probeRespBuffer;
    440 		PktLength = pPrimarySite->probeRespLength;
    441 	}
    442     else if (pPrimarySite->beaconRecv)
    443 	{
    444 		pIeBuffer = pPrimarySite->beaconBuffer;
    445 		PktLength = pPrimarySite->beaconLength;
    446 	}
    447 
    448 	pSiteMgr->prevRadioBand = pSiteMgr->radioBand;
    449 
    450     TRACE2(pSiteMgr->hReport, REPORT_SEVERITY_INFORMATION, ": Capabilities, Slot Time Bit = %d (capabilities = %d)\n", (pPrimarySite->capabilities >> CAP_SLOT_TIME_SHIFT) & 1, pPrimarySite->capabilities);
    451 
    452 	if(pPrimarySite->channel <= MAX_GB_MODE_CHANEL)
    453 	{
    454 		if(pSiteMgr->pDesiredParams->siteMgrDesiredDot11Mode == DOT11_B_MODE)
    455 		{
    456 			pSiteMgr->siteMgrOperationalMode = DOT11_B_MODE;
    457 			slotTime = PHY_SLOT_TIME_LONG;
    458 
    459             TRACE1(pSiteMgr->hReport, REPORT_SEVERITY_INFORMATION, ": 11b Mode, Slot Time = %d\n", (TI_UINT8)slotTime);
    460 		}
    461 		else
    462 		{
    463 			pSiteMgr->siteMgrOperationalMode = DOT11_G_MODE;
    464 
    465 			if (((pPrimarySite->capabilities >> CAP_SLOT_TIME_SHIFT) & CAP_SLOT_TIME_MASK) == PHY_SLOT_TIME_SHORT)
    466 			{
    467 			slotTime = pSiteMgr->pDesiredParams->siteMgrDesiredSlotTime;
    468 
    469             TRACE1(pSiteMgr->hReport, REPORT_SEVERITY_INFORMATION, ": 11g Mode, Slot Time = %d (desired)\n", (TI_UINT8)slotTime);
    470 			}
    471 			else
    472 			{
    473 				slotTime = PHY_SLOT_TIME_LONG;
    474 
    475                 TRACE1(pSiteMgr->hReport, REPORT_SEVERITY_INFORMATION, ": 11g Mode, Slot Time = %d\n", (TI_UINT8) slotTime);
    476 			}
    477 		}
    478 
    479 		pSiteMgr->radioBand = RADIO_BAND_2_4_GHZ;
    480 		pSiteMgr->pSitesMgmtParams->pCurrentSiteTable = &pSiteMgr->pSitesMgmtParams->dot11BG_sitesTables;
    481 	}
    482 	else
    483 	{
    484 		pSiteMgr->siteMgrOperationalMode = DOT11_A_MODE;
    485 		pSiteMgr->radioBand = RADIO_BAND_5_0_GHZ;
    486 		slotTime = PHY_SLOT_TIME_SHORT;
    487 
    488         TRACE1(pSiteMgr->hReport, REPORT_SEVERITY_INFORMATION, ": 11a Mode, Slot Time = %d\n", (TI_UINT8)slotTime);
    489 
    490 		pSiteMgr->pSitesMgmtParams->pCurrentSiteTable = (siteTablesParams_t *)&pSiteMgr->pSitesMgmtParams->dot11A_sitesTables;
    491 	}
    492 
    493 	/* since we are moving to the different band, the siteMgr should be reconfigured */
    494 	if(pSiteMgr->prevRadioBand != pSiteMgr->radioBand)
    495 		siteMgr_bandParamsConfig(pSiteMgr, TI_TRUE);
    496 
    497 	if(pPrimarySite->channel <= MAX_GB_MODE_CHANEL)
    498 		siteMgr_updateRates(pSiteMgr, TI_FALSE, TI_TRUE);
    499 	else
    500 		siteMgr_updateRates(pSiteMgr, TI_TRUE, TI_TRUE);
    501 
    502 	/* configure hal with common core-hal parameters */
    503 	TWD_SetRadioBand (pSiteMgr->hTWD, pSiteMgr->radioBand);
    504 
    505 	pPrimarySite->currentSlotTime = slotTime;
    506 	TWD_CfgSlotTime (pSiteMgr->hTWD, slotTime);
    507 
    508 	/***************** Config Site Manager *************************/
    509 	/* L.M. Should be fixed, should take into account the AP's rates */
    510 	if(pSiteMgr->pDesiredParams->siteMgrDesiredModulationType == DRV_MODULATION_CCK)
    511 		pSiteMgr->chosenModulation = DRV_MODULATION_CCK;
    512 	else if(pSiteMgr->pDesiredParams->siteMgrDesiredModulationType == DRV_MODULATION_PBCC)
    513 	{
    514 		if(pPrimarySite->probeModulation != DRV_MODULATION_NONE)
    515 			pSiteMgr->chosenModulation = pPrimarySite->probeModulation;
    516 		else
    517 			pSiteMgr->chosenModulation = pPrimarySite->beaconModulation;
    518 	}
    519 	else
    520 		pSiteMgr->chosenModulation = DRV_MODULATION_OFDM;
    521 
    522 	/* We use this variable in order tp perform the PBCC algorithm. */
    523 	pSiteMgr->currentDataModulation = pSiteMgr->chosenModulation;
    524 	/***************** Config Data CTRL *************************/
    525 
    526 	pParam->paramType = CTRL_DATA_CURRENT_BSSID_PARAM;							/* Current BSSID */
    527 	MAC_COPY (pParam->content.ctrlDataCurrentBSSID, pPrimarySite->bssid);
    528 	ctrlData_setParam(pSiteMgr->hCtrlData, pParam);
    529 
    530 	pParam->paramType = CTRL_DATA_CURRENT_BSS_TYPE_PARAM;							/* Current BSS Type */
    531 	pParam->content.ctrlDataCurrentBssType = pPrimarySite->bssType;
    532 	ctrlData_setParam(pSiteMgr->hCtrlData, pParam);
    533 
    534 	pParam->paramType = CTRL_DATA_CURRENT_PREAMBLE_TYPE_PARAM;					/* Current Preamble Type */
    535 	if ((pSiteMgr->pDesiredParams->siteMgrDesiredPreambleType == PREAMBLE_SHORT) &&
    536 		(pPrimarySite->currentPreambleType == PREAMBLE_SHORT))
    537 		pParam->content.ctrlDataCurrentPreambleType = PREAMBLE_SHORT;
    538 	else
    539 		pParam->content.ctrlDataCurrentPreambleType = PREAMBLE_LONG;
    540 	ctrlData_setParam(pSiteMgr->hCtrlData, pParam);
    541 
    542     /* Mutual Rates Matching */
    543 	StaTotalRates = pSiteMgr->pDesiredParams->siteMgrCurrentDesiredRateMask.basicRateMask |
    544 					pSiteMgr->pDesiredParams->siteMgrCurrentDesiredRateMask.supportedRateMask;
    545 
    546 
    547     pSiteMgr->pDesiredParams->siteMgrMatchedSuppRateMask = StaTotalRates &
    548 														   pPrimarySite->rateMask.supportedRateMask;
    549 
    550 	pSiteMgr->pDesiredParams->siteMgrMatchedBasicRateMask = StaTotalRates &
    551 															pPrimarySite->rateMask.basicRateMask;
    552 	if (pSiteMgr->pDesiredParams->siteMgrMatchedBasicRateMask == 0)
    553 	{
    554 		pSiteMgr->pDesiredParams->siteMgrMatchedBasicRateMask =
    555 			pSiteMgr->pDesiredParams->siteMgrCurrentDesiredRateMask.basicRateMask;
    556 	}
    557 
    558     /* set protection */
    559     if(BSS_INDEPENDENT == pPrimarySite->bssType)
    560     {
    561         pParam->paramType = CTRL_DATA_CURRENT_IBSS_PROTECTION_PARAM;
    562     }
    563     else
    564     {
    565         pParam->paramType = CTRL_DATA_CURRENT_PROTECTION_STATUS_PARAM;
    566     }
    567     pParam->content.ctrlDataProtectionEnabled = pPrimarySite->useProtection;
    568     ctrlData_setParam(pSiteMgr->hCtrlData, pParam);
    569 
    570 	pbccAlgorithm(pSiteMgr);
    571 
    572 	/********** Set Site QOS protocol support *************/
    573 
    574 	/* Set WME Params */
    575 	 status = siteMgr_getWMEParamsSite(pSiteMgr,&p_ACParametersDummy);
    576 	 if(status == TI_OK)
    577 	 {
    578 		 pParam->content.qosSiteProtocol = QOS_WME;
    579 	 }
    580 	 else
    581 	 {
    582 		 pParam->content.qosSiteProtocol = QOS_NONE;
    583 	 }
    584 
    585      TRACE1(pSiteMgr->hReport, REPORT_SEVERITY_INFORMATION, " systemConfigt() : pParam->content.qosSiteProtoco %d\n", pParam->content.qosSiteProtocol);
    586 
    587 	 pParam->paramType = QOS_MNGR_SET_SITE_PROTOCOL;
    588 	 qosMngr_setParams(pSiteMgr->hQosMngr, pParam);
    589 
    590      /* Set active protocol in qosMngr according to station desired mode and site capabilities
    591 	    Must be called BEFORE setting the "CURRENT_PS_MODE" into the QosMngr */
    592      qosMngr_selectActiveProtocol(pSiteMgr->hQosMngr);
    593 
    594 	 /* set PS capability parameter */
    595 	 pParam->paramType = QOS_MNGR_CURRENT_PS_MODE;
    596 	 if(pPrimarySite->APSDSupport == TI_TRUE)
    597 		 pParam->content.currentPsMode = PS_SCHEME_UPSD_TRIGGER;
    598 	 else
    599 		 pParam->content.currentPsMode = PS_SCHEME_LEGACY;
    600       qosMngr_setParams(pSiteMgr->hQosMngr, pParam);
    601 
    602      /* Set upsd/ps_poll configuration */
    603      /* Must be done AFTER setting the active Protocol */
    604      qosMngr_setAcPsDeliveryMode (pSiteMgr->hQosMngr);
    605 
    606 
    607      /********** Set Site HT setting support *************/
    608      /* set HT setting to the FW */
    609      /* verify 11n_Enable and Chip type */
    610      StaCap_IsHtEnable (pSiteMgr->hStaCap, &b11nEnable);
    611 
    612      /* verify that WME flag enable */
    613      qosMngr_GetWmeEnableFlag (pSiteMgr->hQosMngr, &bWmeEnable);
    614 
    615      if ((b11nEnable != TI_FALSE) &&
    616          (bWmeEnable != TI_FALSE) &&
    617          (pPrimarySite->tHtCapabilities.tHdr[0] != TI_FALSE) &&
    618          (pPrimarySite->tHtInformation.tHdr[0] != TI_FALSE))
    619      {
    620          TWD_CfgSetFwHtCapabilities (pSiteMgr->hTWD, &pPrimarySite->tHtCapabilities, TI_TRUE);
    621          TWD_CfgSetFwHtInformation (pSiteMgr->hTWD, &pPrimarySite->tHtInformation);
    622 
    623          /* the FW not supported in HT control field in TX */
    624 
    625         tHtControl.bHtEnable = TI_FALSE;
    626          txCtrlParams_SetHtControl (pSiteMgr->hTxCtrl, &tHtControl);
    627      }
    628      else
    629      {
    630          TWD_CfgSetFwHtCapabilities (pSiteMgr->hTWD, &pPrimarySite->tHtCapabilities, TI_FALSE);
    631 
    632          tHtControl.bHtEnable = TI_FALSE;
    633          txCtrlParams_SetHtControl (pSiteMgr->hTxCtrl, &tHtControl);
    634      }
    635 
    636 	/***************** Config RSN *************************/
    637     /* Get the RSN IE data */
    638     pRsnIe = pPrimarySite->pRsnIe;
    639 	length = 0;
    640     rsnIECount = 0;
    641     while ((length < pPrimarySite->rsnIeLen) && (pPrimarySite->rsnIeLen < 255)
    642            && (rsnIECount < MAX_RSN_IE))
    643     {
    644         curRsnData[0+length] = pRsnIe->hdr[0];
    645         curRsnData[1+length] = pRsnIe->hdr[1];
    646         os_memoryCopy(pSiteMgr->hOs, &curRsnData[2+length], (void *)pRsnIe->rsnIeData, pRsnIe->hdr[1]);
    647         length += pRsnIe->hdr[1]+2;
    648         pRsnIe += 1;
    649         rsnIECount++;
    650     }
    651     if (length<pPrimarySite->rsnIeLen)
    652     {
    653         TRACE2(pSiteMgr->hReport, REPORT_SEVERITY_ERROR, "siteMgr_selectSiteFromTable, RSN IE is too long: rsnIeLen=%d, MAX_RSN_IE=%d\n", pPrimarySite->rsnIeLen, MAX_RSN_IE);
    654     }
    655 
    656 	rsnData.pIe = (pPrimarySite->rsnIeLen==0) ? NULL : curRsnData;
    657 	rsnData.ieLen = pPrimarySite->rsnIeLen;
    658     rsnData.privacy = pPrimarySite->privacy;
    659 
    660     rsn_setSite(pSiteMgr->hRsn, &rsnData, NULL, &rsnAssocIeLen);
    661 
    662 	/***************** Config RegulatoryDomain **************************/
    663 
    664 #ifdef XCC_MODULE_INCLUDED
    665 	/* set XCC TPC if present */
    666 	if(XCC_ParseClientTP(pSiteMgr->hOs,pPrimarySite,(TI_INT8 *)&ExternTxPower,pIeBuffer,PktLength) == TI_OK)
    667     {
    668         TRACE1(pSiteMgr->hReport, REPORT_SEVERITY_INFORMATION, "Select XCC_ParseClientTP == OK: Dbm = %d\n",ExternTxPower);
    669         pParam->paramType = REGULATORY_DOMAIN_EXTERN_TX_POWER_PREFERRED;
    670         pParam->content.ExternTxPowerPreferred = ExternTxPower;
    671         regulatoryDomain_setParam(pSiteMgr->hRegulatoryDomain, pParam);
    672     }
    673 	/* Parse and save the XCC Version Number if exists */
    674 	XCCMngr_parseXCCVer(pSiteMgr->hXCCMngr, pIeBuffer, PktLength);
    675 
    676 #endif
    677 
    678 	/* Note: TX Power Control adjustment is now done through siteMgr_assocReport() */
    679 	if (pPrimarySite->powerConstraint>0)
    680 	{	/* setting power constraint */
    681 		pParam->paramType = REGULATORY_DOMAIN_SET_POWER_CONSTRAINT_PARAM;
    682 		pParam->content.powerConstraint = pPrimarySite->powerConstraint;
    683 		regulatoryDomain_setParam(pSiteMgr->hRegulatoryDomain, pParam);
    684 	}
    685 
    686 
    687 	/***************** Config MeasurementMgr object **************************/
    688     capabilities = pPrimarySite->capabilities;
    689 
    690     /* Updating the Measurement Module Mode */
    691     measurementMgr_setMeasurementMode(pSiteMgr->hMeasurementMgr, capabilities,
    692 									pIeBuffer, PktLength);
    693     os_memoryFree(pSiteMgr->hOs, curRsnData, MAX_RSN_DATA_SIZE);
    694     os_memoryFree(pSiteMgr->hOs, pParam, sizeof(paramInfo_t));
    695 	return TI_OK;
    696 }
    697 
    698