/drivers/net/wireless/tiwlan1251/common/src/core/sme/siteMgr/siteMgr.c
C | 5078 lines | 3114 code | 869 blank | 1095 comment | 612 complexity | fc5aa5f93c7269c70b6e0b8c26ae5906 MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.0, AGPL-1.0
- /****************************************************************************
- **+-----------------------------------------------------------------------+**
- **| |**
- **| Copyright(c) 1998 - 2008 Texas Instruments. All rights reserved. |**
- **| All rights reserved. |**
- **| |**
- **| Redistribution and use in source and binary forms, with or without |**
- **| modification, are permitted provided that the following conditions |**
- **| are met: |**
- **| |**
- **| * Redistributions of source code must retain the above copyright |**
- **| notice, this list of conditions and the following disclaimer. |**
- **| * Redistributions in binary form must reproduce the above copyright |**
- **| notice, this list of conditions and the following disclaimer in |**
- **| the documentation and/or other materials provided with the |**
- **| distribution. |**
- **| * Neither the name Texas Instruments nor the names of its |**
- **| contributors may be used to endorse or promote products derived |**
- **| from this software without specific prior written permission. |**
- **| |**
- **| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |**
- **| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |**
- **| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |**
- **| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |**
- **| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |**
- **| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |**
- **| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |**
- **| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |**
- **| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |**
- **| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |**
- **| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |**
- **| |**
- **+-----------------------------------------------------------------------+**
- ****************************************************************************/
- /** \file siteMgr.c
- * \brief Site Manager implementation
- *
- * \see siteMgr.h
- */
- #include "report.h"
- #include "osTIType.h"
- #include "osApi.h"
- #include "siteMgrApi.h"
- #include "siteHash.h"
- #include "smeApi.h"
- #include "utils.h"
- #include "connApi.h"
- #include "mlmeSm.h"
- #include "smeSmApi.h"
- #include "DataCtrl_Api.h"
- #include "regulatoryDomainApi.h"
- #include "rsnApi.h"
- #include "measurementMgrApi.h"
- #include "qosMngr_API.h"
- #include "PowerMgr_API.h"
- #include "EvHandler.h"
- #include "TI_IPC_Api.h"
- #include "MacServices_api.h"
- #include "whalHwDefs.h"
- #include "apConn.h"
- #include "currBss.h"
- #include "PowerMgr.h"
- #ifdef EXC_MODULE_INCLUDED
- #include "excMngr.h"
- #endif
- #include "configMgr.h"
- /* definitions */
- #define JOIN_RATE_MASK_1M 0x01
- #define JOIN_RATE_MASK_2M 0x02
- #define JOIN_RATE_MASK_5_5M 0x04
- #define JOIN_RATE_MASK_11M 0x08
- #define JOIN_RATE_MASK_22M 0x10
- #define SITE_MGR_INIT_BIT 1
- #define TIMER_INIT_BIT 2
- #define DESIRED_PARAMS_INIT_BIT 3
- #define MGMT_PARAMS_INIT_BIT 4
- #define BUILT_IN_TEST_PERIOD 500
- #define KEEP_ALIVE_SEND_NULL_DATA_PERIOD 10000
- #define SITE_MGR_IBSS_AGING_TIMEOUT_DEF 10 * 1000 /* 10 seconds */
- #define DEAFULT_BEACON_FILTERING_NUM (10)
- /* Reconfig constants */
- #define SCAN_FAIL_THRESHOLD_FOR_RECONFIG 4 /* After 4 times we reset the 580 register and still no AP found - make recovery */
- #define SCAN_FAIL_THRESHOLD_FOR_RESET_REG_580 90 /* After 90 times (45 seconds) and no AP found - reset the 580 register */
- #define SCAN_FAIL_RECONFIG_ENABLED TRUE
- #define SCAN_FAIL_RECONFIG_DISABLED FALSE
- /* Local Macros */
- #define UPDATE_BEACON_INTERVAL(pSite, pFrameInfo) pSite->beaconInterval = pFrameInfo->content.iePacket.beaconInerval
- #define UPDATE_CAPABILITIES(pSite, pFrameInfo) pSite->capabilities = pFrameInfo->content.iePacket.capabilities
- #define UPDATE_PRIVACY(pSite, pFrameInfo) pSite->privacy = ((pFrameInfo->content.iePacket.capabilities >> CAP_PRIVACY_SHIFT) & CAP_PRIVACY_MASK) ? TRUE : FALSE
- #define UPDATE_AGILITY(pSite, pFrameInfo) pSite->agility = ((pFrameInfo->content.iePacket.capabilities >> CAP_AGILE_SHIFT) & CAP_AGILE_MASK) ? TRUE : FALSE
- #define UPDATE_SLOT_TIME(pSite, pFrameInfo) pSite->newSlotTime = ((pFrameInfo->content.iePacket.capabilities >> CAP_SLOT_TIME_SHIFT) & CAP_SLOT_TIME_MASK) ? PHY_SLOT_TIME_SHORT : PHY_SLOT_TIME_LONG
- #define UPDATE_PROTECTION(pSite, pFrameInfo) pSite->useProtection = (pFrameInfo->content.iePacket.useProtection)
- #define UPDATE_SSID(pSite, pFrameInfo) if (pFrameInfo->content.iePacket.pSsid != NULL) { \
- pSite->ssid.len = pFrameInfo->content.iePacket.pSsid->hdr.eleLen; \
- os_memoryCopy(pSiteMgr->hOs, (void *)pSite->ssid.ssidString, (void *)pFrameInfo->content.iePacket.pSsid->serviceSetId, pFrameInfo->content.iePacket.pSsid->hdr.eleLen) ;}
- #define UPDATE_CHANNEL(pSite, pFrameInfo, rxChannel) if (pFrameInfo->content.iePacket.pDSParamsSet == NULL) \
- pSite->channel = rxChannel; \
- else \
- pSite->channel = pFrameInfo->content.iePacket.pDSParamsSet->currChannel;
- #define UPDATE_DTIM_PERIOD(pSite, pFrameInfo) if (pFrameInfo->content.iePacket.pTIM != NULL) \
- pSite->dtimPeriod = pFrameInfo->content.iePacket.pTIM->dtimPeriod
- #define UPDATE_ATIM_WINDOW(pSite, pFrameInfo) if (pFrameInfo->content.iePacket.pIBSSParamsSet != NULL) \
- pSite->atimWindow = pFrameInfo->content.iePacket.pIBSSParamsSet->atimWindow
- #define UPDATE_BEACON_AP_TX_POWER(pSite, pFrameInfo) if (pFrameInfo->content.iePacket.TPCReport != NULL) \
- pSite->APTxPower = pFrameInfo->content.iePacket.TPCReport->transmitPower
- #define UPDATE_PROBE_AP_TX_POWER(pSite, pFrameInfo) if (pFrameInfo->content.iePacket.TPCReport != NULL) \
- pSite->APTxPower = pFrameInfo->content.iePacket.TPCReport->transmitPower
- #define UPDATE_BSS_TYPE(pSite, pFrameInfo) pSite->bssType = ((pFrameInfo->content.iePacket.capabilities >> CAP_ESS_SHIFT) & CAP_ESS_MASK) ? BSS_INFRASTRUCTURE : BSS_INDEPENDENT
- #define UPDATE_LOCAL_TIME_STAMP(pSiteMgr, pSite, pFrameInfo) pSite->localTimeStamp = os_timeStampMs(pSiteMgr->hOs)
- #define UPDATE_DTIM_TIME(pSiteMgr, pSite, pFrameInfo) pSite->dtimTimeStamp = os_timeStampMs(pSiteMgr->hOs)
- /* Updated from beacons */
- #define UPDATE_BEACON_MODULATION(pSite, pFrameInfo) pSite->beaconModulation = ((pFrameInfo->content.iePacket.capabilities >> CAP_PBCC_SHIFT) & CAP_PBCC_MASK) ? DRV_MODULATION_PBCC : DRV_MODULATION_CCK
- /* Updated from probes */
- #define UPDATE_PROBE_MODULATION(pSite, pFrameInfo) pSite->probeModulation = ((pFrameInfo->content.iePacket.capabilities >> CAP_PBCC_SHIFT) & CAP_PBCC_MASK) ? DRV_MODULATION_PBCC : DRV_MODULATION_CCK
- #define UPDATE_BEACON_RECV(pSite) pSite->beaconRecv = TRUE
- #define UPDATE_PROBE_RECV(pSite) pSite->probeRecv = TRUE
- #define UPDATE_RSN_IE(pSite, pRsnIe, rsnIeLen) if (pRsnIe != NULL) { \
- UINT8 length=0, index=0;\
- pSite->rsnIeLen = rsnIeLen;\
- while ((length < pSite->rsnIeLen) && (index<MAX_RSN_IE)){\
- pSite->pRsnIe[index].hdr = pRsnIe->hdr;\
- os_memoryCopy(pSiteMgr->hOs, (void *)pSite->pRsnIe[index].rsnIeData, (void *)pRsnIe->rsnIeData, pRsnIe->hdr.eleLen);\
- length += (pRsnIe->hdr.eleLen+2); \
- pRsnIe += 1; \
- index++;}\
- } \
- else {pSite->rsnIeLen = 0;}
- #define UPDATE_BEACON_TIMESTAMP(pSiteMgr, pSite, pFrameInfo) os_memoryCopy(pSiteMgr->hOs, pSite->tsfTimeStamp, (void *)pFrameInfo->content.iePacket.timestamp, TIME_STAMP_LEN)
- #define SET_ENTRY_FLAG_IN_SITE_TABLE(pSite) pSite->Not_Received = 0
- /* Local functions definitions*/
- static void update_apsd(siteEntry_t *pSite, mlmeFrameInfo_t *pFrameInfo);
- static void release_module(siteMgr_t *pSiteMgr, UINT32 initVec);
- static void updateSiteInfo(siteMgr_t *pSiteMgr, mlmeFrameInfo_t *pFrameInfo, siteEntry_t *pSite, UINT8 rxChannel);
- static void updateRates(siteMgr_t *pSiteMgr, siteEntry_t *pSite, mlmeFrameInfo_t *pFrameInfo);
- static void updateBeaconQosParams(siteMgr_t *pSiteMgr, siteEntry_t *pSite, mlmeFrameInfo_t *pFrameInfo);
- static void updateProbeQosParams(siteMgr_t *pSiteMgr, siteEntry_t *pSite, mlmeFrameInfo_t *pFrameInfo);
- static void updatePreamble(siteMgr_t *pSiteMgr, siteEntry_t *pSite, mlmeFrameInfo_t *pFrameInfo);
- static void updateFourX(siteMgr_t *pSiteMgr, siteEntry_t *pSite, mlmeFrameInfo_t *pFrameInfo);
- static TI_STATUS getBssidList(siteMgr_t *pSiteMgr, OS_802_11_BSSID_LIST_EX *bssidList, UINT32* pLength, BOOL allVarIes);
- static void getPrimarySiteDesc(siteMgr_t *pSiteMgr, OS_802_11_BSSID *pPrimarySiteDesc, BOOL supplyExtendedInfo);
- static TI_STATUS getPrimaryBssid(siteMgr_t *pSiteMgr, OS_802_11_BSSID_EX *primaryBssid, UINT32 *pLength);
- static rate_e translateRateMaskToValue(siteMgr_t *pSiteMgr, UINT32 rateMask);
- static void getSupportedRateSet(siteMgr_t *pSiteMgr, rates_t *pRatesSet);
- static TI_STATUS setSupportedRateSet(siteMgr_t *pSiteMgr, rates_t *pRatesSet);
- static void validateDesiredTxRate(rate_e desiredTxRate,modulationType_e desiredModulation,UINT32 suppRates,UINT32 *bitMap,BOOL *txDesiredRateSupported);
- static TI_STATUS calculateBssidListSize(siteMgr_t *pSiteMgr, UINT32 *pLength, BOOL allVarIes);
- static void siteMgr_externalConfigurationParametersSet(TI_HANDLE hSiteMgr);
- void siteMgr_gotFirstBcn(TI_HANDLE hSiteMgr);
- /**************************************************************/
- /* DEBUG CLI CRASH */
- /**************************************************************/
- static whalCtrl_joinBss_t joinParams;
- static whalCtrl_setTemplate_t templateStruct;
- static probeRspTemplate_t probeRspTemplate;
- static nullDataTemplate_t nullDataTemplate;
- static psPollTemplate_t psPollTemplate;
- static QosNullDataTemplate_t QosNullDataTemplate;
- /**************************************************************/
- #define CHAN_FREQ_TABLE_SIZE (sizeof(ChanFreq) / sizeof(struct CHAN_FREQ))
- struct CHAN_FREQ {
- UINT8 chan;
- UINT32 freq;
- } ChanFreq[] = {
- {1,2412000}, {2,2417000}, {3,2422000}, {4,2427000},
- {5,2432000}, {6,2437000}, {7,2442000}, {8,2447000},
- {9,2452000},
- {10,2457000}, {11,2462000}, {12,2467000}, {13,2472000},
- {14,2484000}, {36,5180000}, {40,5200000}, {44,5220000},
- {48,5240000}, {52,5260000}, {56,5280000}, {60,5300000},
- {64,5320000},
- {100,5500000}, {104,5520000}, {108,5540000}, {112,5560000},
- {116,5580000}, {120,5600000}, {124,5620000}, {128,5640000},
- {132,5660000}, {136,5680000}, {140,5700000}, {149,5745000},
- {153,5765000}, {157,5785000}, {161,5805000} };
- static UINT8 Freq2Chan(UINT32 freq)
- {
- UINT32 i;
- for(i=0; i<CHAN_FREQ_TABLE_SIZE; i++)
- if(ChanFreq[i].freq == freq) return ChanFreq[i].chan;
- return 0;
- }
- static UINT32 Chan2Freq(UINT8 chan)
- {
- UINT32 i;
- for(i=0; i<CHAN_FREQ_TABLE_SIZE; i++)
- if(ChanFreq[i].chan == chan) return ChanFreq[i].freq;
- return 0;
- }
- /************************************************************************
- * siteMgr_setTemporaryTxPower *
- *************************************************************************
- DESCRIPTION: This function is used to start the Tx Power Control adjust mechanism
- in regulatoryDomain.
- INPUT: bActivateTempFix - Whether the power should be adjusted
- ************************************************************************/
- void siteMgr_setTemporaryTxPower(siteMgr_t* pSiteMgr, BOOL bActivateTempFix)
- {
- paramInfo_t param;
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("siteMgr_setTemporaryTxPower is = %s \n", (bActivateTempFix ? "ON" : "OFF")));
- /* Set the temporary Power Level via the Regulatory Domain*/
- param.paramType = REGULATORY_DOMAIN_TEMPORARY_TX_ATTENUATION_PARAM;
- param.content.bActivateTempPowerFix = bActivateTempFix;
- regulatoryDomain_setParam(pSiteMgr->hRegulatoryDomain,¶m);
- }
- /* Interface functions Implementation */
- /*static void UPDATE_RSN_IE (siteMgr_t* pSiteMgr, siteEntry_t *pSite, dot11_RSN_t *pRsnIe, UINT8 rsnIeLen)
- {
- if (pRsnIe != NULL) {
- UINT8 length=0, index=0;
- pSite->rsnIeLen = rsnIeLen;
- while ((length < pSite->rsnIeLen) && (index<MAX_RSN_IE)){
- pSite->pRsnIe[index].hdr = pRsnIe->hdr;
- os_memoryCopy(pSiteMgr->hOs, pSite->pRsnIe[index].rsnIeData, pRsnIe->rsnIeData, pRsnIe->hdr.eleLen);
- length += (pRsnIe->hdr.eleLen+2);
- pRsnIe += 1;
- index++;}
- }
- else {pSite->rsnIeLen = 0;}
- }*/
- /************************************************************************
- * siteMgr_create *
- ************************************************************************
- DESCRIPTION: Site manager module creation function, called by the config mgr in creation phase
- performs the following:
- - Allocate the site manager handle
- - Allocate the desired & mgmt params structure
- INPUT: hOs - Handle to OS
- OUTPUT:
- RETURN: Handle to the site manager module on success, NULL otherwise
- ************************************************************************/
- TI_HANDLE siteMgr_create(TI_HANDLE hOs)
- {
- siteMgr_t *pSiteMgr;
- UINT32 initVec;
- initVec = 0;
- pSiteMgr = os_memoryAlloc(hOs, sizeof(siteMgr_t));
- if (pSiteMgr == NULL)
- return NULL;
- os_memoryZero(hOs, pSiteMgr, sizeof(siteMgr_t));
- initVec |= (1 << SITE_MGR_INIT_BIT);
- pSiteMgr->pDesiredParams = os_memoryAlloc(hOs, sizeof(siteMgrInitParams_t));
- if (pSiteMgr->pDesiredParams == NULL)
- {
- release_module(pSiteMgr, initVec);
- return NULL;
- }
- initVec |= (1 << DESIRED_PARAMS_INIT_BIT);
- pSiteMgr->pSitesMgmtParams = os_memoryAlloc(hOs, sizeof(sitesMgmtParams_t));
- if (pSiteMgr->pSitesMgmtParams == NULL)
- {
- release_module(pSiteMgr, initVec);
- return NULL;
- }
- initVec |= (1 << MGMT_PARAMS_INIT_BIT);
- pSiteMgr->hOs = hOs;
- return(pSiteMgr);
- }
- /************************************************************************
- * siteMgr_config *
- ************************************************************************
- DESCRIPTION: Site manager module configuration function, called by the config mgr in configuration phase
- performs the following:
- - Reset & initiailzes local variables
- - Init the handles to be used by the module
- INPUT: hSiteMgr - site manager handle
- List of handles to be used by the module
- pSiteMgrInitParams - Init table of the module, contains the following:
- - Parameters read from registry
- - Chip parameters
- OUTPUT:
- RETURN: OK on success, NOK otherwise
- ************************************************************************/
- TI_STATUS siteMgr_config( TI_HANDLE hSiteMgr,
- TI_HANDLE hConn,
- TI_HANDLE hSmeSm,
- TI_HANDLE hCtrlData,
- TI_HANDLE hRxData,
- TI_HANDLE hTxData,
- TI_HANDLE hRsn,
- TI_HANDLE hAuth,
- TI_HANDLE hAssoc,
- TI_HANDLE hHalCtrl,
- TI_HANDLE hMlmeSm,
- TI_HANDLE hRegulatoryDomain,
- TI_HANDLE hMeasurementMgr,
- TI_HANDLE hApConn,
- TI_HANDLE hCurrBss,
- TI_HANDLE hReport,
- TI_HANDLE hOs ,
- TI_HANDLE hExcMngr,
- TI_HANDLE hQosMngr,
- TI_HANDLE thePowerMgrHandle,
- TI_HANDLE hScr,
- TI_HANDLE hEvHandler,
- TI_HANDLE hMacServices,
- siteMgrInitParams_t *pSiteMgrInitParams)
- {
- siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr;
- UINT32 timestamp;
- slotTime_e slotTime;
- paramInfo_t saParam;
- TI_STATUS status;
- /* Init handles */
- pSiteMgr->hConn = hConn;
- pSiteMgr->hSmeSm = hSmeSm;
- pSiteMgr->hHalCtrl = hHalCtrl;
- pSiteMgr->hCtrlData = hCtrlData;
- pSiteMgr->hRxData = hRxData;
- pSiteMgr->hTxData = hTxData;
- pSiteMgr->hRsn = hRsn;
- pSiteMgr->hAuth = hAuth;
- pSiteMgr->hAssoc = hAssoc;
- pSiteMgr->hRegulatoryDomain = hRegulatoryDomain;
- pSiteMgr->hMeasurementMgr = hMeasurementMgr;
- pSiteMgr->hReport = hReport;
- pSiteMgr->hOs = hOs;
- pSiteMgr->hMlmeSm = hMlmeSm;
- pSiteMgr->hAssoc = hAssoc;
- pSiteMgr->hReport = hReport;
- pSiteMgr->hExcMngr = hExcMngr;
- pSiteMgr->hApConn = hApConn;
- pSiteMgr->hCurrBss = hCurrBss;
- pSiteMgr->hQosMngr = hQosMngr;
- pSiteMgr->hPowerMgr = thePowerMgrHandle;
- pSiteMgr->hScr = hScr;
- pSiteMgr->hEvHandler = hEvHandler;
- pSiteMgr->hMacServices = hMacServices;
- /* Reset counter for Tx Power Control adjustment */
- pSiteMgr->siteMgrTxPowerCheckTime = 0;
- /* Init desired parameters */
- os_memoryCopy(hOs, pSiteMgr->pDesiredParams, pSiteMgrInitParams, sizeof(siteMgrInitParams_t));
- /* Init Beacon Filter Desired State */
- pSiteMgr->beaconFilterParams.desiredState = pSiteMgrInitParams->beaconFilterParams.desiredState;
- /* Init Beacon Filter numOfStored parameter */
- pSiteMgr->beaconFilterParams.numOfStored = pSiteMgrInitParams->beaconFilterParams.numOfStored;
- /* Init management params */
- pSiteMgr->pSitesMgmtParams->dot11A_sitesTables.maxNumOfSites = MAX_SITES_A_BAND;
- siteMgr_resetSiteTable(pSiteMgr,(siteTablesParams_t *)&pSiteMgr->pSitesMgmtParams->dot11A_sitesTables);
- pSiteMgr->pSitesMgmtParams->dot11BG_sitesTables.maxNumOfSites = MAX_SITES_BG_BAND;
- siteMgr_resetSiteTable(pSiteMgr,&pSiteMgr->pSitesMgmtParams->dot11BG_sitesTables);
- /* calculate random BSSID for usage in IBSS */
- timestamp = os_timeStampMs(pSiteMgr->hOs);
- os_memoryCopy(pSiteMgr->hOs, (void *)&(pSiteMgr->ibssBssid.addr[0]), ×tamp, sizeof(UINT32));
- pSiteMgr->ibssBssid.addr[0] = 0x00;
- timestamp = os_timeStampMs(pSiteMgr->hOs);
- os_memoryCopy(pSiteMgr->hOs, (void *)&(pSiteMgr->ibssBssid.addr[2]), ×tamp, sizeof(UINT32));
- /* Get the Source MAC address in order to use it for AD-Hoc BSSID, solving Conexant ST issue for WiFi test */
- saParam.paramType = CTRL_DATA_MAC_ADDRESS;
- status = ctrlData_getParam(hCtrlData, &saParam);
- if (status != OK)
- {
- WLAN_OS_REPORT(("\n ERROR !!! : siteMgr_config - Error in getting MAC address\n" ));
- return NOK;
- }
- pSiteMgr->ibssBssid.addr[0] = 0x02;
- pSiteMgr->ibssBssid.addr[1] = saParam.content.ctrlDataDeviceMacAddress.addr[1];
- pSiteMgr->ibssBssid.addr[2] = saParam.content.ctrlDataDeviceMacAddress.addr[2];
- pSiteMgr->keepAliveEnable = pSiteMgrInitParams->siteMgrDesiredkeepAliveEnable;
- pSiteMgr->numOfBeaconFiltering = DEAFULT_BEACON_FILTERING_NUM;
- switch(pSiteMgr->pDesiredParams->siteMgrRadioValues.siteMgr_radioType)
- {
- case MAXIM:
- pSiteMgr->pDesiredParams->siteMgrRadioValues.pSiteMgr_selectedRadioValues =
- &pSiteMgr->pDesiredParams->siteMgrRadioValues.siteMgr_maximRadioValues;
- pSiteMgr->pDesiredParams->siteMgrSupportedBand = RADIO_BAND_2_4_GHZ;
- WLAN_REPORT_INIT(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("MAXIM !!! \n"));
-
- break;
- case RFMD:
- pSiteMgr->pDesiredParams->siteMgrRadioValues.pSiteMgr_selectedRadioValues =
- &pSiteMgr->pDesiredParams->siteMgrRadioValues.siteMgr_rfmdRadioValues;
- pSiteMgr->pDesiredParams->siteMgrSupportedBand = RADIO_BAND_2_4_GHZ;
- WLAN_REPORT_INIT(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("RFMD !!! \n"));
- break;
- case RADIA_BG:
- pSiteMgr->pDesiredParams->siteMgrRadioValues.pSiteMgr_selectedRadioValues =
- &pSiteMgr->pDesiredParams->siteMgrRadioValues.siteMgr_radiaRadioValues;
- pSiteMgr->pDesiredParams->siteMgrSupportedBand = RADIO_BAND_2_4_GHZ;
- WLAN_REPORT_INIT(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("RADIA bg !!! \n"));
- break;
- case RADIA_ABG:
- pSiteMgr->pDesiredParams->siteMgrRadioValues.pSiteMgr_selectedRadioValues =
- &pSiteMgr->pDesiredParams->siteMgrRadioValues.siteMgr_radiaRadioValues;
- pSiteMgr->pDesiredParams->siteMgrSupportedBand = RADIO_BAND_DUAL;
- WLAN_REPORT_INIT(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("RADIA abg !!! \n"));
- break;
- default:
- pSiteMgr->pDesiredParams->siteMgrRadioValues.pSiteMgr_selectedRadioValues = NULL;
- WLAN_REPORT_ERROR(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("!!!.....UnKnown Radio Type !!!\n"));
- }
- pSiteMgr->beaconSentCount = 0;
- pSiteMgr->pDesiredParams->siteMgrDesiredAtimWindow = 0;
- if(pSiteMgr->pDesiredParams->siteMgrDesiredDot11Mode == DOT11_DUAL_MODE)
- {
- if(pSiteMgr->pDesiredParams->siteMgrSupportedBand == RADIO_BAND_DUAL)
- {
- pSiteMgr->siteMgrOperationalMode = DOT11_G_MODE;
- pSiteMgr->radioBand = RADIO_BAND_2_4_GHZ;
- slotTime = pSiteMgr->pDesiredParams->siteMgrDesiredSlotTime;
- pSiteMgr->pSitesMgmtParams->pCurrentSiteTable = &pSiteMgr->pSitesMgmtParams->dot11BG_sitesTables;
- }
- else if(pSiteMgr->pDesiredParams->siteMgrSupportedBand == RADIO_BAND_2_4_GHZ)
- {
- pSiteMgr->pDesiredParams->siteMgrDesiredDot11Mode = DOT11_G_MODE;
- pSiteMgr->siteMgrOperationalMode = DOT11_G_MODE;
- pSiteMgr->radioBand = RADIO_BAND_2_4_GHZ;
- slotTime = pSiteMgr->pDesiredParams->siteMgrDesiredSlotTime;
- pSiteMgr->pSitesMgmtParams->pCurrentSiteTable = &pSiteMgr->pSitesMgmtParams->dot11BG_sitesTables;
- }
- else
- {
- pSiteMgr->pDesiredParams->siteMgrDesiredDot11Mode = DOT11_A_MODE;
- pSiteMgr->siteMgrOperationalMode = DOT11_A_MODE;
- pSiteMgr->radioBand = RADIO_BAND_5_0_GHZ;
- slotTime = PHY_SLOT_TIME_SHORT;
- pSiteMgr->pSitesMgmtParams->pCurrentSiteTable = (siteTablesParams_t *)&pSiteMgr->pSitesMgmtParams->dot11A_sitesTables;
- }
- }
- else if(pSiteMgr->pDesiredParams->siteMgrDesiredDot11Mode == DOT11_G_MODE)
- {
- slotTime = pSiteMgr->pDesiredParams->siteMgrDesiredSlotTime;
- pSiteMgr->radioBand = RADIO_BAND_2_4_GHZ;
- if((pSiteMgr->pDesiredParams->siteMgrSupportedBand == RADIO_BAND_DUAL) ||
- (pSiteMgr->pDesiredParams->siteMgrSupportedBand == RADIO_BAND_2_4_GHZ))
- {
- pSiteMgr->pSitesMgmtParams->pCurrentSiteTable = &pSiteMgr->pSitesMgmtParams->dot11BG_sitesTables;
- pSiteMgr->siteMgrOperationalMode = pSiteMgr->pDesiredParams->siteMgrDesiredDot11Mode;
- }
- else
- {
- WLAN_OS_REPORT(("\nERROR !!!.....The radio doesn't support the desired dot11 mode !!! \n"));
- return NOK;
- }
- }
- else if(pSiteMgr->pDesiredParams->siteMgrDesiredDot11Mode == DOT11_B_MODE)
- {
- slotTime = PHY_SLOT_TIME_LONG;
- pSiteMgr->radioBand = RADIO_BAND_2_4_GHZ;
- if((pSiteMgr->pDesiredParams->siteMgrSupportedBand == RADIO_BAND_DUAL) ||
- (pSiteMgr->pDesiredParams->siteMgrSupportedBand == RADIO_BAND_2_4_GHZ))
- {
- pSiteMgr->pSitesMgmtParams->pCurrentSiteTable = &pSiteMgr->pSitesMgmtParams->dot11BG_sitesTables;
- pSiteMgr->siteMgrOperationalMode = pSiteMgr->pDesiredParams->siteMgrDesiredDot11Mode;
- }
- else
- {
- WLAN_OS_REPORT(("\nERROR !!!.....The radio doesn't support the desired dot11 mode !!! \n"));
- return NOK;
- }
- }
- else
- {
- slotTime = PHY_SLOT_TIME_SHORT;
- pSiteMgr->radioBand = RADIO_BAND_5_0_GHZ;
- if((pSiteMgr->pDesiredParams->siteMgrSupportedBand == RADIO_BAND_DUAL) ||
- (pSiteMgr->pDesiredParams->siteMgrSupportedBand == RADIO_BAND_5_0_GHZ))
- {
- pSiteMgr->siteMgrOperationalMode = pSiteMgr->pDesiredParams->siteMgrDesiredDot11Mode;
- pSiteMgr->pSitesMgmtParams->pCurrentSiteTable = (siteTablesParams_t *)&pSiteMgr->pSitesMgmtParams->dot11A_sitesTables;
- }
- else
- {
- WLAN_OS_REPORT(("\nERROR !!!.....The radio doesn't support the desired dot11 mode !!! \n"));
- return NOK;
- }
- }
- /* configure hal with common core-hal parameters */
- whalCtrl_SetRadioBand(pSiteMgr->hHalCtrl, pSiteMgr->radioBand);
- whalCtrl_SetSlotTime(pSiteMgr->hHalCtrl, slotTime);
- siteMgr_ConfigRate(hSiteMgr);
- WLAN_REPORT_INIT(hReport, SITE_MGR_MODULE_LOG,
- (" SiteMgr - numOfElements = %d IETableSize = %d\n" , pSiteMgrInitParams->beaconFilterParams.numOfElements, pSiteMgrInitParams->beaconFilterParams.IETableSize)) ;
- /*send the table regardless to the state*/
- whalCtrl_SetBeaconFilterIETable(pSiteMgr->hHalCtrl ,(UINT8 *)&(pSiteMgrInitParams->beaconFilterParams.numOfElements), (UINT8 *)&(pSiteMgrInitParams->beaconFilterParams.IETable[0]) , (UINT8 *)&(pSiteMgrInitParams->beaconFilterParams.IETableSize)) ;
- /* At start-up Set the Beacon Filter state as the User required */
- whalCtrl_SetBeaconFiltering(pSiteMgr->hHalCtrl, pSiteMgrInitParams->beaconFilterParams.desiredState, pSiteMgr->beaconFilterParams.numOfStored);
-
- pSiteMgr->pSitesMgmtParams->pPrevPrimarySite = NULL;
- pSiteMgr->powerSaveLdMode = FALSE;
- WLAN_REPORT_INIT(hReport, SITE_MGR_MODULE_LOG, (".....Site manager configured successfully\n"));
- return OK;
- }
- /************************************************************************
- * siteMgr_unLoad *
- ************************************************************************
- DESCRIPTION: site manager module unload function, called by the config mgr in the unlod phase
- performs the following:
- - Free all memory aloocated by the module
- INPUT: hSiteMgr - site mgr handle.
- OUTPUT:
- RETURN: OK on success, NOK otherwise
- ************************************************************************/
- TI_STATUS siteMgr_unLoad(TI_HANDLE hSiteMgr)
- {
- UINT32 initVec;
- siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr;
- if (!pSiteMgr)
- return OK;
- initVec = 0xFFFF;
- release_module(pSiteMgr, initVec);
- return OK;
- }
- /***********************************************************************
- * siteMgr_setParam
- ***********************************************************************
- DESCRIPTION: site mgr set param function, called by the following:
- - config mgr in order to set a parameter from the OS abstraction layer.
- In this fuction, the site manager OS abstraction layer configures the site manager to the desired params.
- Sometimes it requires a re scan, depending in the parameter type
- INPUT: hSiteMgr - Connection handle.
- pParam - Pointer to the parameter
- OUTPUT:
- RETURN: RE_SCAN_NEEDED if re scan needed, OK on success, NOK on failure
- ************************************************************************/
- TI_STATUS siteMgr_setParam(TI_HANDLE hSiteMgr,
- paramInfo_t *pParam)
- {
- siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr;
- siteEntry_t *pPrimarySite = pSiteMgr->pSitesMgmtParams->pPrimarySite;
- OS_802_11_CONFIGURATION *pConfig;
- UINT32 channel;
- slotTime_e slotTime;
- switch(pParam->paramType)
- {
- case SITE_MGR_CONFIGURATION_PARAM:
- pConfig = pParam->content.pSiteMgrConfiguration;
- /* for(channel = 0; channel < SITE_MGR_CHANNEL_MAX+1; channel++)
- {
- if(pConfig->channel == pSiteMgr->pDesiredParams->siteMgrFreq2ChannelTable[channel])
- break;
- }*/
- channel = Freq2Chan(pConfig->Union.channel);
- if(channel == 0 || channel > SITE_MGR_CHANNEL_MAX)
- return PARAM_VALUE_NOT_VALID;
- else
- pConfig->Union.channel = channel;
- if((pSiteMgr->pDesiredParams->siteMgrDesiredChannel != pConfig->Union.channel) ||
- (pSiteMgr->pDesiredParams->siteMgrDesiredChannel != pConfig->Union.channel) ||
- (pSiteMgr->pDesiredParams->siteMgrDesiredAtimWindow != pConfig->ATIMWindow))
- {
- pSiteMgr->pDesiredParams->siteMgrDesiredChannel = (UINT8)pConfig->Union.channel;
- pSiteMgr->pDesiredParams->siteMgrDesiredBeaconInterval = (UINT16)pConfig->BeaconPeriod;
- pSiteMgr->pDesiredParams->siteMgrDesiredAtimWindow = pConfig->ATIMWindow;
- }
- return OK;
- case SITE_MGR_DESIRED_CHANNEL_PARAM:
- if (pParam->content.siteMgrDesiredChannel > SITE_MGR_CHANNEL_MAX)
- return PARAM_VALUE_NOT_VALID;
- if (pSiteMgr->pDesiredParams->siteMgrDesiredChannel != pParam->content.siteMgrDesiredChannel)
- pSiteMgr->pDesiredParams->siteMgrDesiredChannel = (UINT8)pParam->content.siteMgrDesiredChannel;
- return OK;
- case SITE_MGR_DESIRED_BSSID_PARAM:
- os_memoryCopy(pSiteMgr->hOs, (void *)pSiteMgr->pDesiredParams->siteMgrDesiredBSSID.addr, (void *)pParam->content.siteMgrDesiredBSSID.addr, sizeof(macAddress_t));
- #if 0
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("Set BSSID = 0x%02x:0x%02x:0x%02x:0x%02x:0x%02x:0x%02x \n",
- pSiteMgr->pDesiredParams->siteMgrDesiredBSSID.addr[0],
- pSiteMgr->pDesiredParams->siteMgrDesiredBSSID.addr[1],
- pSiteMgr->pDesiredParams->siteMgrDesiredBSSID.addr[2],
- pSiteMgr->pDesiredParams->siteMgrDesiredBSSID.addr[3],
- pSiteMgr->pDesiredParams->siteMgrDesiredBSSID.addr[4],
- pSiteMgr->pDesiredParams->siteMgrDesiredBSSID.addr[5]));
- #endif
- return OK;
-
- case SITE_MGR_DESIRED_SSID_PARAM:
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("\nSet new SSID=%s (len=%d) \n",
- pParam->content.siteMgrDesiredSSID.ssidString,
- pParam->content.siteMgrDesiredSSID.len));
- if (pParam->content.siteMgrDesiredSSID.len > MAX_SSID_LEN)
- return PARAM_VALUE_NOT_VALID;
- os_memoryCopy(pSiteMgr->hOs, &pSiteMgr->pDesiredParams->siteMgrDesiredSSID, &pParam->content.siteMgrDesiredSSID, sizeof(ssid_t));
- /* only add null at the end of the string if the string length is less than 32 bytes and so we have one char left
- TODO: another byte must be added, and the alignment change MUST be tested (esp. in CLI commands with ssid_t */
- if ( MAX_SSID_LEN > pSiteMgr->pDesiredParams->siteMgrDesiredSSID.len )
- {
- pSiteMgr->pDesiredParams->siteMgrDesiredSSID.ssidString[pSiteMgr->pDesiredParams->siteMgrDesiredSSID.len] = '\0';
- }
- /* increase the random IBSS BSSID calculated during init */
- pSiteMgr->ibssBssid.addr[MAC_ADDR_LEN - 1] ++;
- if (utils_isJunkSSID(&pSiteMgr->pDesiredParams->siteMgrDesiredSSID))
- {
- rsn_removedDefKeys(pSiteMgr->hRsn);
- }
- return RE_SCAN_NEEDED;
- case SITE_MGR_DESIRED_BSS_TYPE_PARAM:
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("\nSet BssType = %d\n", pParam->content.siteMgrDesiredBSSType));
- if (pParam->content.siteMgrDesiredBSSType > BSS_ANY)
- return PARAM_VALUE_NOT_VALID;
- if (pSiteMgr->pDesiredParams->siteMgrDesiredBSSType != pParam->content.siteMgrDesiredBSSType)
- {
- pSiteMgr->pDesiredParams->siteMgrDesiredBSSType = pParam->content.siteMgrDesiredBSSType;
- /* If the new BSS type is NOT Ad_Hoc, We make sure that the rate masks are set to G */
- if(pSiteMgr->pDesiredParams->siteMgrDesiredBSSType != BSS_INDEPENDENT)
- {
- pSiteMgr->siteMgrOperationalMode = DOT11_G_MODE;
- siteMgr_ConfigRate(pSiteMgr);
- }
- /* If the new BSS type is Ad_Hoc, increase the random BSSID calculated during init */
- if(pSiteMgr->pDesiredParams->siteMgrDesiredBSSType == BSS_INDEPENDENT)
- {
- pSiteMgr->ibssBssid.addr[MAC_ADDR_LEN - 1] ++;
- }
- /* go to B_ONLY Mode only if WiFI bit is Set*/
- if (pSiteMgr->pDesiredParams->siteMgrWiFiAdhoc == TRUE)
- { /* Configuration For AdHoc when using external configuration */
- if(pSiteMgr->pDesiredParams->siteMgrExternalConfiguration == FALSE)
- {
- siteMgr_externalConfigurationParametersSet(hSiteMgr);
- }
- }
- }
- return OK;
- case SITE_MGR_DESIRED_MODULATION_TYPE_PARAM:
- if ((pParam->content.siteMgrDesiredModulationType < DRV_MODULATION_CCK) ||
- (pParam->content.siteMgrDesiredModulationType > DRV_MODULATION_OFDM))
- return PARAM_VALUE_NOT_VALID;
- if (pSiteMgr->pDesiredParams->siteMgrDesiredModulationType != pParam->content.siteMgrDesiredModulationType)
- {
- pSiteMgr->pDesiredParams->siteMgrDesiredModulationType = pParam->content.siteMgrDesiredModulationType;
- /* means that we are moving from non-pbcc network to pbcc */
- if (pParam->content.siteMgrDesiredModulationType == DRV_MODULATION_PBCC)
- return RE_SCAN_NEEDED;
- return OK;
- }
- return OK;
- case SITE_MGR_BEACON_RECV:
- if (!pPrimarySite)
- {
- return NO_SITE_SELECTED_YET;
- }
- pPrimarySite->beaconRecv = pParam->content.siteMgrBeaconRecv;
- return OK;
- case SITE_MGR_DESIRED_BEACON_INTERVAL_PARAM:
- if (pParam->content.siteMgrDesiredBeaconInterval < SITE_MGR_BEACON_INTERVAL_MIN)
- return PARAM_VALUE_NOT_VALID;
- if (pSiteMgr->pDesiredParams->siteMgrDesiredBeaconInterval != pParam->content.siteMgrDesiredBeaconInterval)
- pSiteMgr->pDesiredParams->siteMgrDesiredBeaconInterval = pParam->content.siteMgrDesiredBeaconInterval;
- return OK;
- case SITE_MGR_DESIRED_PREAMBLE_TYPE_PARAM:
- if ((pParam->content.siteMgrDesiredPreambleType != PREAMBLE_LONG) &&
- (pParam->content.siteMgrDesiredPreambleType != PREAMBLE_SHORT))
- return PARAM_VALUE_NOT_VALID;
- if (pSiteMgr->pDesiredParams->siteMgrDesiredPreambleType != pParam->content.siteMgrDesiredPreambleType)
- {
- pSiteMgr->pDesiredParams->siteMgrDesiredPreambleType = pParam->content.siteMgrDesiredPreambleType;
- }
- return OK;
- case SITE_MGR_DESIRED_SUPPORTED_RATE_SET_PARAM:
- return setSupportedRateSet(pSiteMgr, &(pParam->content.siteMgrDesiredSupportedRateSet));
- case SITE_MGR_DESIRED_DOT11_MODE_PARAM:
- if(pParam->content.siteMgrDot11Mode > DOT11_MAX_MODE)
- return PARAM_VALUE_NOT_VALID;
- if(pSiteMgr->pDesiredParams->siteMgrDesiredDot11Mode != pParam->content.siteMgrDot11Mode)
- {
- pSiteMgr->pDesiredParams->siteMgrDesiredDot11Mode = pParam->content.siteMgrDot11Mode;
- /* since the dot11ABAmode changed, the STA operational mode should be changed */
- if(pSiteMgr->pDesiredParams->siteMgrDesiredDot11Mode == DOT11_DUAL_MODE)
- {
- if(pSiteMgr->pDesiredParams->siteMgrSupportedBand == RADIO_BAND_DUAL)
- {
- pSiteMgr->siteMgrOperationalMode = DOT11_G_MODE;
- }
- else if(pSiteMgr->pDesiredParams->siteMgrSupportedBand == RADIO_BAND_2_4_GHZ)
- {
- pSiteMgr->pDesiredParams->siteMgrDesiredDot11Mode = DOT11_G_MODE;
- pSiteMgr->siteMgrOperationalMode = DOT11_G_MODE;
- }
- else
- {
- pSiteMgr->pDesiredParams->siteMgrDesiredDot11Mode = DOT11_G_MODE;
- pSiteMgr->siteMgrOperationalMode = DOT11_A_MODE;
- }
- }
- else
- pSiteMgr->siteMgrOperationalMode = pSiteMgr->pDesiredParams->siteMgrDesiredDot11Mode;
- /* configure HAL with new parameters update rates and select site table */
- pSiteMgr->prevRadioBand = pSiteMgr->radioBand;
- if(pSiteMgr->siteMgrOperationalMode == DOT11_A_MODE)
- {
- pSiteMgr->pSitesMgmtParams->pCurrentSiteTable = (siteTablesParams_t *)&pSiteMgr->pSitesMgmtParams->dot11A_sitesTables;
- pSiteMgr->radioBand = RADIO_BAND_5_0_GHZ;
- slotTime = PHY_SLOT_TIME_SHORT;
- }
- else if(pSiteMgr->siteMgrOperationalMode == DOT11_G_MODE)
- {
- pSiteMgr->pSitesMgmtParams->pCurrentSiteTable = &pSiteMgr->pSitesMgmtParams->dot11BG_sitesTables;
- pSiteMgr->radioBand = RADIO_BAND_2_4_GHZ;
- slotTime = pSiteMgr->pDesiredParams->siteMgrDesiredSlotTime;
- }
- else
- {
- pSiteMgr->pSitesMgmtParams->pCurrentSiteTable = &pSiteMgr->pSitesMgmtParams->dot11BG_sitesTables;
- pSiteMgr->radioBand = RADIO_BAND_2_4_GHZ;
- slotTime = PHY_SLOT_TIME_LONG;
- }
- if(pSiteMgr->prevRadioBand != pSiteMgr->radioBand)
- siteMgr_bandParamsConfig(pSiteMgr, TRUE);
- /* configure HAL */
- whalCtrl_SetRadioBand(pSiteMgr->hHalCtrl, pSiteMgr->radioBand);
- whalCtrl_SetSlotTime(pSiteMgr->hHalCtrl, slotTime);
- /* If the BSS type is Ad_Hoc, increase the random BSSID calculated during init */
- if(pSiteMgr->pDesiredParams->siteMgrDesiredBSSType == BSS_INDEPENDENT)
- {
- pSiteMgr->ibssBssid.addr[MAC_ADDR_LEN - 1] ++;
- }
- /*siteMgr_resetAllSiteTables(pSiteMgr); */
- return RE_SCAN_NEEDED;
- }
- return OK;
- case SITE_MGR_OPERATIONAL_MODE_PARAM:
- if(pParam->content.siteMgrDot11OperationalMode < DOT11_B_MODE ||
- pParam->content.siteMgrDot11OperationalMode > DOT11_G_MODE )
- return PARAM_VALUE_NOT_VALID;
- pSiteMgr->siteMgrOperationalMode = pParam->content.siteMgrDot11OperationalMode;
- break;
- case SITE_MGR_USE_DRAFT_NUM_PARAM:
- if(pParam->content.siteMgrUseDraftNum != DRAFT_5_AND_EARLIER &&
- pParam->content.siteMgrUseDraftNum != DRAFT_6_AND_LATER)
- return PARAM_VALUE_NOT_VALID;
- if(pSiteMgr->pDesiredParams->siteMgrUseDraftNum != pParam->content.siteMgrUseDraftNum)
- {
- pSiteMgr->pDesiredParams->siteMgrUseDraftNum = pParam->content.siteMgrUseDraftNum;
- return RE_SCAN_NEEDED;
- }
- return OK;
- case SITE_MGR_RADIO_BAND_PARAM:
- if((INT8)pParam->content.siteMgrRadioBand < RADIO_BAND_2_4_GHZ ||
- (INT8)pParam->content.siteMgrRadioBand > RADIO_BAND_DUAL )
- return PARAM_VALUE_NOT_VALID;
- pSiteMgr->prevRadioBand = pSiteMgr->radioBand;
- pSiteMgr->radioBand = pParam->content.siteMgrRadioBand;
- if(pSiteMgr->prevRadioBand != pSiteMgr->radioBand)
- siteMgr_bandParamsConfig(pSiteMgr, FALSE);
- break;
- case SITE_MGR_DESIRED_SLOT_TIME_PARAM:
- if(pParam->content.siteMgrSlotTime != PHY_SLOT_TIME_LONG &&
- pParam->content.siteMgrSlotTime != PHY_SLOT_TIME_SHORT)
- return PARAM_VALUE_NOT_VALID;
- if(pSiteMgr->pDesiredParams->siteMgrDesiredSlotTime != pParam->content.siteMgrSlotTime)
- {
- if(pSiteMgr->siteMgrOperationalMode == DOT11_G_MODE)
- {
- pSiteMgr->pDesiredParams->siteMgrDesiredSlotTime = pParam->content.siteMgrSlotTime;
- if(!pPrimarySite)
- whalCtrl_SetSlotTime(pSiteMgr->hHalCtrl, pSiteMgr->pDesiredParams->siteMgrDesiredSlotTime);
- else if(pPrimarySite->bssType != BSS_INFRASTRUCTURE)
- whalCtrl_SetSlotTime(pSiteMgr->hHalCtrl, pSiteMgr->pDesiredParams->siteMgrDesiredSlotTime);
- }
- }
- return OK;
- case SITE_MGR_BEACON_FILTER_DESIRED_STATE_PARAM:
- {
- int desiredStateBeforeChange = pSiteMgr->beaconFilterParams.desiredState;
- /* Set the New Desired User request of Beacon Filter */
- pSiteMgr->beaconFilterParams.desiredState = pParam->content.siteMgrDesiredBeaconFilterState;
-
- /* Check if the Desired mode has changed - If not no need to send the MIB to the FW */
- if ( pSiteMgr->beaconFilterParams.desiredState == desiredStateBeforeChange )
- {
- WLAN_REPORT_DEBUG_CONTROL(pSiteMgr->hReport,
- ("Beacon Filter already %s" , (TRUE == desiredStateBeforeChange)? "ENABLED":"DISABLED" ) );
- break;
- }
- WLAN_REPORT_DEBUG_CONTROL(pSiteMgr->hReport,
- ("\n New Beacon Filter Desired State is : %s pSiteMgr->beaconFilterParams.currentState %s\n" , ( TRUE == (pSiteMgr->beaconFilterParams.desiredState) )?"ENABLED":"DISABLED",( TRUE == (pSiteMgr->beaconFilterParams.currentState) )?"ENABLED":"DISABLED"));
- /* Check if the new Desired state is TRUE then Also check the Current State and then if FALSEdo not send the MIB to FW*/
- if ( (TRUE == pSiteMgr->beaconFilterParams.desiredState ) && (FALSE == pSiteMgr->beaconFilterParams.currentState ))
- {
- WLAN_REPORT_DEBUG_CONTROL(pSiteMgr->hReport,
- ("\n New Beacon Filter Desired State is TRUE But Current State is DISABLED So the MIBwill be sent Later !!!!"));
- }
- /* In any other cases the User required Beacon Filter Configuration will be sent to FW immediately */
- else
- {
- WLAN_REPORT_DEBUG_CONTROL(pSiteMgr->hReport,
- ("\n New Sending Beacon Filter Desired State To FW !!!!"));
- whalCtrl_SetBeaconFiltering(pSiteMgr->hHalCtrl, pSiteMgr->beaconFilterParams.desiredState, pSiteMgr->beaconFilterParams.numOfStored);
- }
- }
- break;
- case SITE_MGR_DISASSOCIATE_PARAM:
- case SITE_MGR_DEAUTHENTICATE_PARAM:
- if(!pPrimarySite)
- return OK;
- else { /* Set Junk SSID */
- pSiteMgr->pDesiredParams->siteMgrDesiredSSID.len = 4;
- pSiteMgr->pDesiredParams->siteMgrDesiredSSID.ssidString[0]=1;
- pSiteMgr->pDesiredParams->siteMgrDesiredSSID.ssidString[1]=1;
- pSiteMgr->pDesiredParams->siteMgrDesiredSSID.ssidString[2]=1;
- pSiteMgr->pDesiredParams->siteMgrDesiredSSID.ssidString[3]=1;
- return RE_SCAN_NEEDED;
- }
- case SITE_MGR_BSSID_LIST_SCAN_PARAM:
- #if 0
- /* TODO - merge fix from WinCE version (and generalize it if time permits) */
- /* Must return NOK in each case the scan is not actually performed */
- if(!pPrimarySite)
- {
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("Not connected to Network => do the BSSID_LIST_SCAN command\n"));
- smeSm_startScan(pSiteMgr->hSmeSm);
- }
- param.paramType = RX_DATA_COUNTERS_PARAM;
- rxData_getParam(pSiteMgr->hRxData, ¶m);
- /* get current received data frames counter */
- currRxPacketsCount = param.content.siteMgrTiWlanCounters.DirectedFramesRecv;
- if((pSiteMgr->rxPacketsCount + 1) < currRxPacketsCount)
- {
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("Traffic is active now => ignoring the BSSID_LIST_SCAN command\n"));
- return NOK;
- }
- else
- {
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("Traffic is not active now => do the BSSID_LIST_SCAN command\n"));
- smeSm_startScan(pSiteMgr->hSmeSm);
- }
- }
- #endif
- return OK;
- case SITE_MGR_LAST_RX_RATE_PARAM:
- if (pPrimarySite != NULL)
- {
- pPrimarySite->rxRate = pParam->content.ctrlDataCurrentBasicRate;
- }
- break;
- case SITE_MGR_CURRENT_CHANNEL_PARAM:
- if (!pPrimarySite)
- {
- return NO_SITE_SELECTED_YET;
- }
- pPrimarySite->channel = pParam->content.siteMgrCurrentChannel;
- break;
- case SITE_MGR_CURRENT_SIGNAL_PARAM:
- if (!pPrimarySite)
- {
- return NO_SITE_SELECTED_YET;
- }
- pPrimarySite->rssi = pParam->content.siteMgrCurrentSignal.rssi;
- break;
- default:
- WLAN_REPORT_ERROR(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("Set param, Params is not supported, %d\n", pParam->paramType));
- return PARAM_NOT_SUPPORTED;
- }
- return OK;
- }
- /***********************************************************************
- * siteMgr_getParam
- ***********************************************************************
- DESCRIPTION: Site mgr get param function, called by the following:
- - config mgr in order to get a parameter from the OS abstraction layer.
- - From inside the dirver
- INPUT: hSiteMgr - site mgr handle.
- pParam - Pointer to the parameter
- OUTPUT:
- RETURN: OK on success, NOK otherwise
- ************************************************************************/
- TI_STATUS siteMgr_getParam(TI_HANDLE hSiteMgr,
- paramInfo_t *pParam)
- {
- siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr;
- siteEntry_t *pPrimarySite = pSiteMgr->pSitesMgmtParams->pPrimarySite;
- TI_STATUS status = OK;
- UINT8 siteEntryIndex;
- UINT32 dtimInterval;
- UINT32 delta;
- whalParamInfo_t whalParam;
- switch(pParam->paramType)
- {
- case SITE_MGR_CONFIGURATION_PARAM:
- pParam->content.pSiteMgrConfiguration->Length = sizeof(OS_802_11_CONFIGURATION);
- pParam->content.pSiteMgrConfiguration->ATIMWindow = pSiteMgr->pDesiredParams->siteMgrDesiredAtimWindow;
- pParam->content.pSiteMgrConfiguration->BeaconPeriod = pSiteMgr->pDesiredParams->siteMgrDesiredBeaconInterval;
- pParam->content.pSiteMgrConfiguration->Union.channel =
- Chan2Freq(pSiteMgr->pDesiredParams->siteMgrDesiredChannel);
- /*pSiteMgr->pDesiredParams->siteMgrFreq2ChannelTable[pSiteMgr->pDesiredParams->siteMgrDesiredChannel];*/
- if(pPrimarySite) {
- pParam->content.pSiteMgrConfiguration->FHConfig.DwellTime = pPrimarySite->FHParams.dwellTime;
- pParam->content.pSiteMgrConfiguration->FHConfig.HopPattern = pPrimarySite->FHParams.hopPattern;
- pParam->content.pSiteMgrConfiguration->FHConfig.HopSet = pPrimarySite->FHParams.hopSet;
- }
- else {
- pParam->content.pSiteMgrConfiguration->FHConfig.DwellTime = 0;
- pParam->content.pSiteMgrConfiguration->FHConfig.HopPattern = 0;
- pParam->content.pSiteMgrConfiguration->FHConfig.HopSet = 0;
- }
- pParam->content.pSiteMgrConfiguration->FHConfig.Length = sizeof(OS_802_11_CONFIGURATION_FH);
- break;
- case SITE_MGR_DESIRED_CHANNEL_PARAM:
- pParam->content.siteMgrDesiredChannel = pSiteMgr->pDesiredParams->siteMgrDesiredChannel;
- break;
- case SITE_MGR_DESIRED_BSSID_PARAM:
- os_memoryCopy(pSiteMgr->hOs, &pParam->content.siteMgrDesiredBSSID, &pSiteMgr->pDesiredParams->siteMgrDesiredBSSID, sizeof(macAddress_t));
- break;
- case SITE_MGR_DESIRED_SSID_PARAM:
- os_memoryCopy(pSiteMgr->hOs, &pParam->content.siteMgrDesiredSSID, &pSiteMgr->pDesiredParams->siteMgrDesiredSSID, sizeof(ssid_t));
- break;
- case SITE_MGR_DESIRED_BSS_TYPE_PARAM:
- pParam->content.siteMgrDesiredBSSType = pSiteMgr->pDesiredParams->siteMgrDesiredBSSType;
- break;
- case SITE_MGR_DESIRED_SUPPORTED_RATE_SET_PARAM:
- getSupportedRateSet(pSiteMgr, &(pParam->content.siteMgrDesiredSupportedRateSet));
- break;
- case SITE_MGR_DESIRED_MODULATION_TYPE_PARAM:
- pParam->content.siteMgrDesiredModulationType = pSiteMgr->pDesiredParams->siteMgrDesiredModulationType;
- break;
- case SITE_MGR_DESIRED_BEACON_INTERVAL_PARAM:
- pParam->content.siteMgrDesiredBeaconInterval = pSiteMgr->pDesiredParams->siteMgrDesiredBeaconInterval;
- break;
- case SITE_MGR_DESIRED_PREAMBLE_TYPE_PARAM:
- pParam->content.siteMgrDesiredPreambleType = pSiteMgr->pDesiredParams->siteMgrDesiredPreambleType;
- break;
- case SITE_MGR_CURRENT_RADIO_TYPE_PARAM:
- pParam->content.siteMgrRadioType = pSiteMgr->pDesiredParams->siteMgrRadioValues.siteMgr_radioType;
- break;
- case SITE_MGR_CURRENT_SIGNAL_PARAM:
- if (!pPrimarySite)
- {
- pParam->content.siteMgrCurrentSignal.rssi = 0;
- pParam->content.siteMgrCurrentSignal.snr = 0;
- return NO_SITE_SELECTED_YET;
- }
- pParam->content.siteMgrCurrentSignal.rssi = pPrimarySite->rssi;
- pParam->content.siteMgrCurrentSignal.snr = pPrimarySite->snr;
- break;
- case SITE_MGR_POWER_CONSTRAINT_PARAM:
- if (!pPrimarySite)
- {
- pParam->content.powerConstraint = 0;
- return NO_SITE_SELECTED_YET;
- }
- pParam->content.powerConstraint = pPrimarySite->powerConstraint;
- break;
- case SITE_MGR_DTIM_PERIOD_PARAM:
- if (!pPrimarySite)
- {
- pParam->content.siteMgrDtimPeriod = 0;
- return NO_SITE_SELECTED_YET;
- }
- pParam->content.siteMgrDtimPeriod = pPrimarySite->dtimPeriod;
- break;
- case SITE_MGR_BEACON_RECV:
- if (!pPrimarySite)
- {
- pParam->content.siteMgrBeaconRecv = FALSE;
- return NO_SITE_SELECTED_YET;
- }
- pParam->content.siteMgrBeaconRecv = pPrimarySite->beaconRecv;
- break;
- case SITE_MGR_BEACON_INTERVAL_PARAM:
- if (!pPrimarySite)
- {
- pParam->content.beaconInterval = 0;
- return NO_SITE_SELECTED_YET;
- }
- pParam->content.beaconInterval = pPrimarySite->beaconInterval;
- break;
- case SITE_MGR_AP_TX_POWER_PARAM:
- if (!pPrimarySite)
- {
- pParam->content.APTxPower = 0;
- return NO_SITE_SELECTED_YET;
- }
- pParam->content.APTxPower = pPrimarySite->APTxPower;
- break;
- case SITE_MGR_SITE_CAPABILITY_PARAM:
- if (!pPrimarySite)
- {
- pParam->content.siteMgrSiteCapability = 0;
- return NO_SITE_SELECTED_YET;
- }
- pParam->content.siteMgrSiteCapability = pPrimarySite->capabilities;
- break;
- case SITE_MGR_4X_PARAM:
- if(!pPrimarySite)
- return NO_SITE_SELECTED_YET;
- pParam->content.siteMgrFourxParam = pPrimarySite->fourXsupported;
- break;
- case SITE_MGR_CURRENT_CHANNEL_PARAM:
- if (!pPrimarySite)
- {
- pParam->content.siteMgrCurrentChannel = 0;
- return NO_SITE_SELECTED_YET;
- }
- pParam->content.siteMgrCurrentChannel = pPrimarySite->channel;
- break;
- case SITE_MGR_CURRENT_SSID_PARAM:
- if (!pPrimarySite)
- {
- os_memoryZero(pSiteMgr->hOs, (void *)pParam->content.siteMgrCurrentSSID.ssidString, MAX_SSID_LEN);
- pParam->content.siteMgrCurrentSSID.len = 0;
- return NO_SITE_SELECTED_YET;
- }
- if(pPrimarySite->ssid.len == 0)
- WLAN_REPORT_ERROR(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("siteMgr_getParam: ssid length is zero, while primarySite is selected \n"));
- os_memoryCopy(pSiteMgr->hOs, &pParam->content.siteMgrCurrentSSID, &pPrimarySite->ssid, sizeof(ssid_t));
- break;
- case SITE_MGR_CURRENT_BSS_TYPE_PARAM:
- if (!pPrimarySite)
- {
- pParam->content.siteMgrCurrentBSSType = pSiteMgr->pDesiredParams->siteMgrDesiredBSSType;
- WLAN_REPORT_ERROR(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("Trying to get current BSS Type while no site is selected\n"));
-
- }
- else{
- pParam->content.siteMgrCurrentBSSType = pPrimarySite->bssType;
- }
- break;
- case SITE_MGR_CURRENT_RATE_PAIR_PARAM:
- if (!pPrimarySite)
- {
- pParam->content.siteMgrCurrentRateMask.basicRateMask = 0;
- pParam->content.siteMgrCurrentRateMask.supportedRateMask = 0;
- return NO_SITE_SELECTED_YET;
- }
- pParam->content.siteMgrCurrentRateMask.basicRateMask = pSiteMgr->pDesiredParams->siteMgrMatchedBasicRateMask;
- pParam->content.siteMgrCurrentRateMask.supportedRateMask = pSiteMgr->pDesiredParams->siteMgrMatchedSuppRateMask;
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("SITE_MGR: bitmapBasicPrimary= 0x%X,bitMapBasicDesired = 0x%X,bitMapSuppPrimary = 0x%X, bitMapSuppDesired = 0x%X\n",
- pPrimarySite->rateMask.basicRateMask,pSiteMgr->pDesiredParams->siteMgrCurrentDesiredRateMask.basicRateMask,
- pPrimarySite->rateMask.supportedRateMask,pSiteMgr->pDesiredParams->siteMgrCurrentDesiredRateMask.supportedRateMask));
- break;
- case SITE_MGR_CURRENT_MODULATION_TYPE_PARAM:
- if (!pPrimarySite)
- {
- pParam->content.siteMgrCurrentModulationType = DRV_MODULATION_NONE;
- return NO_SITE_SELECTED_YET;
- }
- pParam->content.siteMgrCurrentModulationType = pSiteMgr->chosenModulation;
- break;
- case SITE_MGR_NEXT_DTIM_TIME_STAMP_PARAM:
- if (!pPrimarySite)
- {
- pParam->content.siteMgrNextDtimTimeStamp = 0;
- return NO_SITE_SELECTED_YET;
- }
- /* Convert TBTT to msec (*1024/1000) */
- dtimInterval = (UINT32)pPrimarySite->beaconInterval * 1024 *
- (UINT32)pPrimarySite->dtimPeriod / 1000 ;
- delta = os_timeStampMs(pSiteMgr->hOs) - pPrimarySite->dtimTimeStamp;
- if(delta < dtimInterval)
- delta = 0;
- pParam->content.siteMgrNextDtimTimeStamp = pPrimarySite->dtimTimeStamp + dtimInterval + delta;
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("Get DTIM - dtimTimeStamp=%d, dtimInterval=%d, delta=%d\n",
- pPrimarySite->dtimTimeStamp, dtimInterval, delta));
- break;
- case SITE_MGR_DESIRED_SLOT_TIME_PARAM:
- pParam->content.siteMgrSlotTime = pSiteMgr->pDesiredParams->siteMgrDesiredSlotTime;
- break;
- case SITE_MGR_CURRENT_SLOT_TIME_PARAM:
- if(pSiteMgr->siteMgrOperationalMode == DOT11_G_MODE)
- {
- if(!pPrimarySite)
- pParam->content.siteMgrSlotTime = pSiteMgr->pDesiredParams->siteMgrDesiredSlotTime;
- else
- pParam->content.siteMgrSlotTime = pPrimarySite->currentSlotTime;
- }
- else if(pSiteMgr->siteMgrOperationalMode == DOT11_A_MODE)
- pParam->content.siteMgrSlotTime = PHY_SLOT_TIME_SHORT;
- else
- pParam->content.siteMgrSlotTime = PHY_SLOT_TIME_LONG;
- break;
- case SITE_MGR_BSSID_LIST_PARAM:
- if (pParam->paramLength == 0)
- {
- calculateBssidListSize(pSiteMgr, &pParam->paramLength, FALSE);
- return NOK;
- }
- else
- {
- status = getBssidList(pSiteMgr, pParam->content.pSiteMgrBssidList, &pParam->paramLength, FALSE);
- }
- break;
- case SITE_MGR_BSSID_FULL_LIST_PARAM:
- if (pParam->paramLength == 0)
- {
- calculateBssidListSize(pSiteMgr, &pParam->paramLength, TRUE);
- return NOK;
- }
- else
- {
- status = getBssidList(pSiteMgr, pParam->content.pSiteMgrBssidList, &pParam->paramLength, TRUE);
- }
- break;
- case SITE_MGR_LAST_BEACON_BUF_PARAM:
- if (pPrimarySite != NULL)
- {
- if (pPrimarySite->probeRecv)
- {
- pParam->content.siteMgrLastBeacon.isBeacon = FALSE;
- pParam->content.siteMgrLastBeacon.bufLength = pPrimarySite->probeRespLength;
- pParam->content.siteMgrLastBeacon.buffer = pPrimarySite->probeRespBuffer;
- }
- else
- {
- pParam->content.siteMgrLastBeacon.isBeacon = TRUE;
- pParam->content.siteMgrLastBeacon.bufLength = pPrimarySite->beaconLength;
- pParam->content.siteMgrLastBeacon.buffer = pPrimarySite->beaconBuffer;
- }
- }
- break;
- case SITE_MGR_BEACON_FILTER_DESIRED_STATE_PARAM:
- {
- if ( NULL != pSiteMgr )
- {
- pParam->content.siteMgrDesiredBeaconFilterState = pSiteMgr->beaconFilterParams.desiredState;
- }
- else
- {
- WLAN_REPORT_ERROR(pSiteMgr->hReport, SITE_MGR_MODULE_LOG ,("pSite = NULL ! No info available"));
- }
- }
- break;
- case SITE_MGR_GET_SELECTED_BSSID_INFO:
- getPrimarySiteDesc(pSiteMgr, pParam->content.pSiteMgrPrimarySiteDesc, FALSE);
- break;
- case SITE_MGR_PRIMARY_SITE_PARAM:
- status = getPrimaryBssid(pSiteMgr, (OS_802_11_BSSID_EX *)pParam->content.pSiteMgrSelectedSiteInfo, &pParam->paramLength);
- break;
- case SITE_MGR_TI_WLAN_COUNTERS_PARAM:
- pParam->paramType = RX_DATA_COUNTERS_PARAM;
- rxData_getParam(pSiteMgr->hRxData, pParam);
- whalParam.paramType = HAL_CTRL_COUNTERS_PARAM;
- whalCtrl_GetParam(pSiteMgr->hHalCtrl, &whalParam);
- pParam->content.siteMgrTiWlanCounters.RecvNoBuffer = whalParam.content.halCtrlCounters.RecvNoBuffer;
- pParam->content.siteMgrTiWlanCounters.FragmentsRecv = whalParam.content.halCtrlCounters.FragmentsRecv;
- pParam->content.siteMgrTiWlanCounters.FrameDuplicates = whalParam.content.halCtrlCounters.FrameDuplicates;
- pParam->content.siteMgrTiWlanCounters.FcsErrors = whalParam.content.halCtrlCounters.FcsErrors;
- pParam->content.siteMgrTiWlanCounters.RecvError = whalParam.content.halCtrlCounters.RecvError;
- pParam->paramType = AUTH_COUNTERS_PARAM;
- auth_getParam(pSiteMgr->hAuth, pParam);
-
- pParam->paramType = ASSOC_COUNTERS_PARAM;
- assoc_getParam(pSiteMgr->hAssoc, pParam);
- pParam->content.siteMgrTiWlanCounters.BeaconsXmit = pSiteMgr->beaconSentCount;
- break;
-
- case SITE_MGR_EEPROM_VERSION_PARAM:
- os_memoryCopy(pSiteMgr->hOs, &(pParam->content.siteMgrEEpromVersion), &(pSiteMgr->pDesiredParams->siteMgrEEpromVersion), sizeof(e2Version_t));
- break;
- case SITE_MGR_FIRMWARE_VERSION_PARAM:
- os_memoryCopy(pSiteMgr->hOs, &(pParam->content.siteMgrFwVersion), &(pSiteMgr->pDesiredParams->siteMgrFwVersion), FW_VERSION_LEN);
- break;
- case SITE_MGR_DESIRED_TX_RATE_PARAM:
- pParam->content.siteMgrDesiredTxRate = hostToUtilityRate(pSiteMgr->pDesiredParams->siteMgrCurrentDesiredTxRate);
- break;
- case SITE_MGR_CURRENT_TX_RATE_PARAM:
- /* Collect txAttr from control */
- { txData_attr_t txAttr;
-
- ctrlData_getTxAttributes(pSiteMgr->hCtrlData, TX_DATA_DATA_MSDU, &txAttr, QOS_AC_BE);
- pParam->content.siteMgrCurrentTxRate = hostToUtilityRate( txAttr.Rate );
- }
- break;
- case SITE_MGR_DESIRED_DOT11_MODE_PARAM:
- pParam->content.siteMgrDot11Mode = pSiteMgr->pDesiredParams->siteMgrDesiredDot11Mode;
- break;
- case SITE_MGR_NETWORK_TYPE_IN_USE:
- if (pPrimarySite)
- { /* Connected - return the current mode */
- pParam->content.siteMgrDot11Mode = pSiteMgr->siteMgrOperationalMode;
- }
- else
- { /* Disconnected - return the desired mode */
- pParam->content.siteMgrDot11Mode = pSiteMgr->pDesiredParams->siteMgrDesiredDot11Mode;
- }
- break;
- case SITE_MGR_OPERATIONAL_MODE_PARAM:
- pParam->content.siteMgrDot11OperationalMode = pSiteMgr->siteMgrOperationalMode;
- break;
- case SITE_MGR_USE_DRAFT_NUM_PARAM:
- pParam->content.siteMgrUseDraftNum = pSiteMgr->pDesiredParams->siteMgrUseDraftNum;
- break;
- case SITE_MGR_RADIO_BAND_PARAM:
- pParam->content.siteMgrRadioBand = pSiteMgr->radioBand;
- break;
- case SITE_MGR_CURRENT_PREAMBLE_TYPE_PARAM:
- if (!pPrimarySite)
- return NO_SITE_SELECTED_YET;
- pParam->content.siteMgrCurrentPreambleType = pPrimarySite->currentPreambleType;
- break;
- case SITE_MGR_CURRENT_BSSID_PARAM:
- if (pPrimarySite != NULL)
- {
- os_memoryCopy(pSiteMgr->hOs, (void *)pParam->content.siteMgrDesiredBSSID.addr, (void *)pPrimarySite->bssid.addr, MAC_ADDR_LEN);
- }
- break;
- case SITE_MGR_LAST_RX_RATE_PARAM:
- if (pPrimarySite != NULL)
- {
- pParam->content.ctrlDataCurrentBasicRate = pPrimarySite->rxRate;
- }
- break;
- case SITE_MGR_PREV_SITE_BSSID_PARAM:
- if (pSiteMgr->pSitesMgmtParams->pPrevPrimarySite==NULL)
- {
- return NOK;
- }
- os_memoryCopy(pSiteMgr->hOs, (void *)pParam->content.siteMgrDesiredBSSID.addr, (void *)pSiteMgr->pSitesMgmtParams->pPrevPrimarySite->bssid.addr, MAC_ADDR_LEN);
- break;
- case SITE_MGR_PREV_SITE_SSID_PARAM:
- if (pSiteMgr->pSitesMgmtParams->pPrevPrimarySite==NULL)
- {
- return NOK;
- }
- pParam->content.siteMgrDesiredSSID.len = pSiteMgr->pSitesMgmtParams->pPrevPrimarySite->ssid.len;
- os_memoryCopy(pSiteMgr->hOs, (void *)pParam->content.siteMgrDesiredSSID.ssidString, (void *)pSiteMgr->pSitesMgmtParams->pPrevPrimarySite->ssid.ssidString, pSiteMgr->pSitesMgmtParams->pPrevPrimarySite->ssid.len);
- break;
- case SITE_MGR_PREV_SITE_CHANNEL_PARAM:
- if (pSiteMgr->pSitesMgmtParams->pPrevPrimarySite==NULL)
- {
- return NOK;
- }
- pParam->content.siteMgrDesiredChannel = pSiteMgr->pSitesMgmtParams->pPrevPrimarySite->channel;
- break;
- case SITE_MGR_SITE_ENTRY_BY_INDEX:
- siteEntryIndex = pParam->content.siteMgrIndexOfDesiredSiteEntry;
- if(siteEntryIndex >= MAX_SITES_BG_BAND)
- {
- return NOK;
- }
- pParam->content.pSiteMgrDesiredSiteEntry =
- (UINT8*)(&(pSiteMgr->pSitesMgmtParams->pCurrentSiteTable->siteTable[siteEntryIndex]));
- break;
- case SITE_MGR_CUR_NUM_OF_SITES:
- pParam->content.siteMgrNumberOfSites = pSiteMgr->pSitesMgmtParams->pCurrentSiteTable->numOfSites;
- break;
- case SITE_MGR_CURRENT_TSF_TIME_STAMP:
- os_memoryCopy(pSiteMgr->hOs, pParam->content.siteMgrCurrentTsfTimeStamp,
- pSiteMgr->pSitesMgmtParams->pPrimarySite->tsfTimeStamp,
- TIME_STAMP_LEN);
- break;
- case SITE_MGR_GET_AP_QOS_CAPABILITIES:
- if (!pPrimarySite)
- {
- pParam->content.qosApCapabilities.uQOSFlag = 0;
- pParam->content.qosApCapabilities.uAPSDFlag = 0;
- return NOT_CONNECTED;
- }
- pParam->content.qosApCapabilities.uQOSFlag = pPrimarySite->WMESupported;
- pParam->content.qosApCapabilities.uAPSDFlag = pPrimarySite->APSDSupport;
-
- break;
- default:
- {
- UINT8* ptr = NULL;
- WLAN_REPORT_ERROR(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("Get param, Params is not supported, %d\n", pParam->paramType));
- *ptr=3;
- }
- return PARAM_NOT_SUPPORTED;
- }
- return status;
- }
- /***********************************************************************
- * calculateHwGenTxRate
- ***********************************************************************
- DESCRIPTION: Service routine, which calculates the HW generated frames rate
- to be used.
- INPUT: basicBitMap - bit map of basic rates
- mode - operating mode
- OUTPUT:
- RETURN: rate
- ************************************************************************/
- void calculateHwGenTxRate(siteMgr_t *pSiteMgr, rate_e *rate)
- {
- UINT32 rateBitMap = 0;
- modulationType_e modulation = DRV_MODULATION_NONE; /* Not used */
- mgmtCtrlTxRateOption_e mgmtCtrlTxRateOption = pSiteMgr->pDesiredParams->siteMgrRegstryDesiredMgmtCtrlTxRateOption;
- UINT32 mgmtCtrlDesiredTxRateBitMap = ((0x01) << (pSiteMgr->pDesiredParams->siteMgrRegstryDesiredMgmtCtrlTxRate -1));
-
- /* ratebitmap is the matched basic rate from the STA and AP */
- if (pSiteMgr->pSitesMgmtParams->pPrimarySite->channel == SPECIAL_BG_CHANNEL)
- {
- rateBitMap = (UINT16)getBasicRateMaskForSpecialBGchannel() ;
- }
- else
- {
- rateBitMap = pSiteMgr->pDesiredParams->siteMgrMatchedBasicRateMask;
- }
- /* Check if the user request specific Rate */
- if(mgmtCtrlTxRateOption == SPECIFIC_TX_RATE)
- {
- /* If the required rate is included in the matched basic rate, this specific rate is the only one to use */
- if(rateBitMap & mgmtCtrlDesiredTxRateBitMap)
- {
- rateBitMap = mgmtCtrlDesiredTxRateBitMap;
- }
- else
- {
- /* If the specific required Tx Rate is not in the basic rate => Use Max basic rate */
- mgmtCtrlTxRateOption = MAX_BASIC_TX_RATE;
- }
- }
- /* Now calculate HW Tx rate according to the rate bitmap */
- if(mgmtCtrlTxRateOption == MAX_BASIC_TX_RATE)
- getMaxRate(rateBitMap,rate,&modulation,pSiteMgr->siteMgrOperationalMode);
- else
- {
- /* If we are here , means: The mgmtCtrlTxRateOption is either MIN_BASIC_TX_RATE or SPECIFIC_TX_RATE. */
- getMinRate(rateBitMap,rate,&modulation,pSiteMgr->siteMgrOperationalMode);
- }
- }
- /***********************************************************************
- * siteMgr_join
- ***********************************************************************
- DESCRIPTION: Called by the connection state machine in order to join a BSS.
- - If the BSS is infrastructure, sets a NULL data template to the HAL
- - If the BSS is IBSS, sets a probe response & beacon template to the HAL
- Call the HAL with the join parameters
- INPUT: hSiteMgr - site mgr handle.
- JoinCompleteCB - join command complete callback function ptr
- CB_handle - handle to pass to callback function
- OUTPUT:
- RETURN: OK on success, NOK otherwise
- ************************************************************************/
- TI_STATUS siteMgr_join(TI_HANDLE hSiteMgr)
- {
- siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr;
- siteEntry_t *pPrimarySite = pSiteMgr->pSitesMgmtParams->pPrimarySite;
- rate_e rate;
- paramInfoPartial_t param;
- if (pPrimarySite == NULL)
- {
- WLAN_REPORT_ERROR(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("Join BSS, Primary Site is NULL\n"));
- return OK;
- }
- /* Configure the system according to parameters of Primary Site */
- systemConfig(pSiteMgr);
- joinParams.bssType = pPrimarySite->bssType;
- joinParams.beaconInterval = pPrimarySite->beaconInterval;
- joinParams.dtimInterval = pPrimarySite->dtimPeriod;
- joinParams.pBSSID = (UINT8 *)&(pPrimarySite->bssid.addr);
- joinParams.pSSID = (UINT8 *)&(pPrimarySite->ssid.ssidString);
- joinParams.ssidLength = pPrimarySite->ssid.len;
- joinParams.channel = pPrimarySite->channel;
- if (joinParams.channel == SPECIAL_BG_CHANNEL)
- {
- joinParams.basicRateSet = (UINT16)getBasicRateMaskForSpecialBGchannel() ;
- joinParams.supportedRateSet = (UINT16)getSupportedRateMaskForSpecialBGchannel() ;
- }
- else /* != SPECIAL_BG_CHANNEL */
- {
- joinParams.basicRateSet = (UINT16)pSiteMgr->pDesiredParams->siteMgrMatchedBasicRateMask;
- joinParams.supportedRateSet = (UINT16)pSiteMgr->pDesiredParams->siteMgrMatchedSuppRateMask;
- }
- calculateHwGenTxRate(pSiteMgr, &rate);
- joinParams.hwGenCtrlTxRate = rate;
- param.paramType = CTRL_DATA_CURRENT_PREAMBLE_TYPE_PARAM;
- ctrlData_getParamPartial(pSiteMgr->hCtrlData, ¶m);
- joinParams.preamble = param.content.ctrlDataCurrentPreambleType;
- /*set the preamble before the join*/
- whalCtrl_SetPreamble(pSiteMgr->hHalCtrl, joinParams.preamble);
-
-
- /*
- * Set the radio band and the HW management Tx rate according to operational mode.
- * The HW management frames includes Beacon and Probe-Response (in IBSS).
- */
- if(pSiteMgr->siteMgrOperationalMode == DOT11_A_MODE)
- {
- joinParams.radioBand = RADIO_BAND_5_0_GHZ;
- joinParams.hwGenMgmtTxRate = DRV_RATE_6M;
- }
- else
- {
- joinParams.radioBand = RADIO_BAND_2_4_GHZ;
- joinParams.hwGenMgmtTxRate = DRV_RATE_2M;
- }
- /* Now, Set templates to the HAL */
- if (pPrimarySite->bssType == BSS_INDEPENDENT)
- {
- templateStruct.pTemplate = (UINT8 *)&probeRspTemplate;
- templateStruct.templateType = PROBE_RESPONSE_TEMPLATE;
- buildProbeRspTemplate(pSiteMgr, &templateStruct);
- whalCtrl_SetTemplate(pSiteMgr->hHalCtrl, &templateStruct);
- /* We don't have to build a beacon template, because it is equal to probe response,
- we only have to change the frame sup type */
- probeRspTemplate.hdr.fc = ENDIAN_HANDLE_WORD(DOT11_FC_BEACON);
- templateStruct.templateType = BEACON_TEMPLATE;
- whalCtrl_SetTemplate(pSiteMgr->hHalCtrl, &templateStruct);
- }
- else
- {
- templateStruct.pTemplate = (UINT8 *)&nullDataTemplate;
- templateStruct.templateType = NULL_DATA_TEMPLATE;
- buildNullTemplate(pSiteMgr, &templateStruct);
- whalCtrl_SetTemplate(pSiteMgr->hHalCtrl, &templateStruct);
- /* Send PsPoll template to HAL */
- templateStruct.pTemplate = (UINT8 *)&psPollTemplate;
- templateStruct.templateType = PS_POLL_TEMPLATE;
- buildPsPollTemplate(pSiteMgr, &templateStruct);
- whalCtrl_SetTemplate(pSiteMgr->hHalCtrl, &templateStruct);
-
- /* Set QOS Null data template to the firmware.
- Note: the AC to use with this template may change in QoS-manager. */
- templateStruct.pTemplate = (UINT8 *)&QosNullDataTemplate;
- templateStruct.templateType = QOS_NULL_DATA_TEMPLATE;
- buildQosNullDataTemplate(pSiteMgr, &templateStruct, 0);
- whalCtrl_SetTemplate(pSiteMgr->hHalCtrl, &templateStruct);
- }
- /* Reset the Tx Power Control adjustment in RegulatoryDomain */
- siteMgr_setTemporaryTxPower(pSiteMgr, FALSE);
-
- /*
- clear the beacon receive flag to indicates when receive a beacon after the join command.
- need for PowerMgr_startPS() - must be called only after join command and then only after
- receiving beacon of the primary site!
- */
- pPrimarySite->beaconReceiveAfterJoin = FALSE;
-
- /* Stop Tx till geting Join Event complete */
- txData_disableTransmission(pSiteMgr->hTxData, DISABLE_IMMEDIATELY);
-
- /* This is the forbidden period to enable the current state from the cli, even if desired state is TRUE */
- /* Also This is set to FALSE since the First Beaqcin shall be received for the Power Manager */
- pSiteMgr->beaconFilterParams.currentState = FALSE;
- whalCtrl_SetBeaconFiltering(pSiteMgr->hHalCtrl, FALSE, pSiteMgr->beaconFilterParams.numOfStored);
-
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport , SITE_MGR_MODULE_LOG , ("-- Beacon Filter Active Mode Disable Beacon Filtering !!! --\n"));
- return (TI_STATUS)whalCtrl_JoinBss (((siteMgr_t *)hSiteMgr)->hHalCtrl, &joinParams);
- }
- /***********************************************************************
- * siteMgr_forceInfraJoin
- ***********************************************************************
- DESCRIPTION: Called by the connection state machine in order to join a BSS.
- - If the BSS is infrastructure, sets a NULL data template to the HAL
- - If the BSS is IBSS, sets a probe response & beacon template to the HAL
- Call the HAL with the join parameters
- INPUT: hSiteMgr - site mgr handle.
- JoinCompleteCB - join command complete callback function ptr
- CB_handle - handle to pass to callback function
- OUTPUT:
- RETURN: OK on success, NOK otherwise
- ************************************************************************/
- TI_STATUS siteMgr_forceInfraJoin(TI_HANDLE hSiteMgr)
- {
- siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr;
- whalCtrl_joinBss_t joinParams;
- UINT8 junkBSSID[MAC_ADDR_LEN] = {0xAA,0xAA,0xAA,0xAA,0xAA,0xAA};
- UINT8 junkSSID[1] = {0x01};
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("Force INFRA Join\n"));
- joinParams.bssType = BSS_INFRASTRUCTURE;
- joinParams.beaconInterval = 200;
- joinParams.dtimInterval = 3;
- joinParams.pBSSID = (UINT8 *)junkBSSID;
- joinParams.pSSID = (UINT8 *)junkSSID;
- joinParams.ssidLength = 1;
- joinParams.channel = 11;
- joinParams.basicRateSet = (UINT16)pSiteMgr->pDesiredParams->siteMgrMatchedBasicRateMask;
- joinParams.supportedRateSet = (UINT16)pSiteMgr->pDesiredParams->siteMgrMatchedSuppRateMask;
-
- joinParams.hwGenCtrlTxRate = DRV_RATE_2M;
- joinParams.hwGenMgmtTxRate = DRV_RATE_2M;
- joinParams.preamble = PREAMBLE_LONG;
- if(pSiteMgr->siteMgrOperationalMode == DOT11_A_MODE)
- joinParams.radioBand = RADIO_BAND_5_0_GHZ;
- else
- joinParams.radioBand = RADIO_BAND_2_4_GHZ;
- /* Stop Tx till geting Join Event complete */
- txData_disableTransmission(pSiteMgr->hTxData, DISABLE_IMMEDIATELY);
- return (TI_STATUS)whalCtrl_JoinBss (((siteMgr_t *)hSiteMgr)->hHalCtrl, &joinParams);
- }
- /***********************************************************************
- * siteMgr_disJoin
- ***********************************************************************
- DESCRIPTION: Called by the connection state machine in order to dis join a BSS.
- INPUT: hSiteMgr - site mgr handle.
- OUTPUT:
- RETURN: OK on success, NOK otherwise
- ************************************************************************/
- TI_STATUS siteMgr_disJoin(TI_HANDLE hSiteMgr)
- {
- #if 0
- siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr;
- whalCtrl_joinBss_t joinParams;
- macAddress_t dummyMac = {0xDE, 0xAD, 0xBE, 0xEF, 0xDE, 0xAD};
- ssid_t dummySsid;
- joinParams.bssType = BSS_INFRASTRUCTURE;
- joinParams.beaconInterval = SITE_MGR_BEACON_INTERVAL_DEF;
- joinParams.dtimInterval = 1;
- joinParams.channel = SITE_MGR_CHANNEL_DEF;
- joinParams.pBSSID = (UINT8 *)&(dummyMac.addr);
- dummySsid.len = 2;
- os_memoryCopy(pSiteMgr->hOs, dummySsid.ssidString, "TI_WLAN", 7);
- joinParams.pSSID = (UINT8 *)&(dummySsid.ssidString);
- joinParams.ssidLength = dummySsid.len;
- joinParams.basicRateSet = buildRatesBitMap(pSiteMgr, SITE_MGR_DEF_RATE_SET_MAX_BASIC_DEF);
- joinParams.supportedRateSet = buildRatesBitMap(pSiteMgr, SITE_MGR_DEF_RATE_SET_MAX_ACTIVE_DEF);
- return whalCtrl_JoinBss (((siteMgr_t *)hSiteMgr)->hHalCtrl, &joinParams);
- #else
- return OK;
- #endif
- }
- /***********************************************************************
- * siteMgr_removeSelfSite
- ***********************************************************************
- DESCRIPTION: Called by the Self connection state machine in order to remove the self site from the site table.
- Remove the site entry form the table and reset the primary site pointer
- INPUT: hSiteMgr - site mgr handle.
- OUTPUT:
- RETURN: OK on success, NOK otherwise
- ************************************************************************/
- TI_STATUS siteMgr_removeSelfSite(TI_HANDLE hSiteMgr)
- {
- siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr;
- siteTablesParams_t *currTable = pSiteMgr->pSitesMgmtParams->pCurrentSiteTable;
- if(pSiteMgr->pSitesMgmtParams->pPrimarySite == NULL)
- {
- WLAN_REPORT_WARNING(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("Remove self site Failure, pointer is NULL\n\n"));
- return OK;
- }
- if(pSiteMgr->pSitesMgmtParams->pPrimarySite->siteType != SITE_SELF)
- {
- WLAN_REPORT_ERROR(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("Remove self site Failure, site is not self\n\n"));
- return OK;
- }
- removeSiteEntry(pSiteMgr, currTable, pSiteMgr->pSitesMgmtParams->pPrimarySite);
- pSiteMgr->pSitesMgmtParams->pPrimarySite = NULL;
- return OK;
- }
- /***********************************************************************
- * siteMgr_updateSite
- ***********************************************************************
- DESCRIPTION: Called by the MLME parser upon receiving a beacon or probe response.
- Performs the following:
- - Insert the site entry into the site hash table
- - Update the site information in the site table
- - If the site is the primary site, it handles the PBCC algorithm if needed
- - If the site is NULL (means it is the first frame received from this site)
- we update the site type to be regular
- - If the site type is self, we inform the self connection SM
- that another station joined the network we created
- INPUT: hSiteMgr - site mgr handle.
- bssid - BSSID received
- pFrameInfo - Frame content after the parsing
- rxChannel - The channel on which frame was received
- band - Band on which frame was received
- measuring - Determines whether the beacon or probe response
- has been received while a beacon measurement
- took place
- OUTPUT:
- RETURN: OK on success, NOK otherwise
- ************************************************************************/
- TI_STATUS siteMgr_updateSite(TI_HANDLE hSiteMgr,
- macAddress_t *bssid,
- mlmeFrameInfo_t *pFrameInfo,
- UINT8 rxChannel,
- radioBand_e band,
- BOOL measuring)
- {
- siteEntry_t *pSite;
- siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr;
- paramInfo_t param;
- /* The following is not required, since the scanCncn is responsible to check
- the channels validity before scanning.
- The problem it caused was that when 802.11d is enabled,
- channels that are valid for Passive only, will not be updated.*/
- /*if (isChannelSupprted(pSiteMgr->hRegulatoryDomain , rxChannel) == FALSE)
- {
- WLAN_REPORT_WARNING(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("Channel ERROR - try to register a site that its channel (=%d) isn't in the regulatory domain.\n\
- registration ABORTED!!!",
- rxChannel));
- return NOK;
- }*/
- pSite = findAndInsertSiteEntry(pSiteMgr, bssid, band);
- if (pSite == NULL)
- {
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("Site Update failure, table is full, bssid: %X-%X-%X-%X-%X-%X\n", bssid->addr[0], bssid->addr[1], bssid->addr[2], bssid->addr[3], bssid->addr[4], bssid->addr[5]));
- return OK;
- }
- updateSiteInfo(pSiteMgr, pFrameInfo, pSite, rxChannel);
- if (measuring != FALSE)
- {
- pSite->detectedWhileMeasuring = TRUE;
- }
- switch(pSite->siteType)
- {
- case SITE_PRIMARY:
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_UPDATE_MODULE_LOG, ("PRIMARY site updated, bssid: %X-%X-%X-%X-%X-%X\n\n", bssid->addr[0], bssid->addr[1], bssid->addr[2], bssid->addr[3], bssid->addr[4], bssid->addr[5]));
- if (pSiteMgr->pSitesMgmtParams->pPrimarySite == NULL)
- {
- WLAN_REPORT_ERROR(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("siteMgr_updateSite: Primary Site Is NULL\n"));
- pSite->siteType = SITE_REGULAR;
- break;
- }
- /* Now, if the following is TRUE we perform the PBCC algorithm: */
- /* If the BSS type is infrastructure, &&
- The chosen modulation is PBCC &&
- The beacon modulation is not NONE &&
- The current data modulation is different than the beacon modulation. */
- if ((pSite->bssType == BSS_INFRASTRUCTURE) &&
- (pSiteMgr->chosenModulation == DRV_MODULATION_PBCC) &&
- (pSite->beaconModulation != DRV_MODULATION_NONE) &&
- (pSiteMgr->currentDataModulation != pSite->beaconModulation))
- {
- pSiteMgr->currentDataModulation = pSite->beaconModulation;
- pbccAlgorithm(pSiteMgr);
- }
- /* Now handle the slot time, first check if the slot time changed since the last
- setting to the HAL ,and if yes set the new value */
- if((pSiteMgr->siteMgrOperationalMode == DOT11_G_MODE) &&
- (pSite->bssType == BSS_INFRASTRUCTURE))
- {
- if (pSite->currentSlotTime != pSite->newSlotTime)
- {
- pSite->currentSlotTime = pSite->newSlotTime;
- whalCtrl_SetSlotTime(pSiteMgr->hHalCtrl, pSite->currentSlotTime);
- }
- }
- /* Now handle the current protection status */
- if((pSiteMgr->siteMgrOperationalMode == DOT11_G_MODE) &&
- (pSite->bssType == BSS_INFRASTRUCTURE))
- {
- param.paramType = CTRL_DATA_CURRENT_PROTECTION_STATUS_PARAM;
- param.content.ctrlDataProtectionEnabled = pSite->useProtection;
- ctrlData_setParam(pSiteMgr->hCtrlData, ¶m);
- }
- /* Now handle the current preamble type,
- if desired preamble type is long, the ctrl data param should not be changed */
- if((pSiteMgr->siteMgrOperationalMode == DOT11_G_MODE) &&
- (pSite->bssType == BSS_INFRASTRUCTURE) &&
- (pSiteMgr->pDesiredParams->siteMgrDesiredPreambleType != PREAMBLE_LONG))
- {
- param.paramType = CTRL_DATA_CURRENT_PREAMBLE_TYPE_PARAM;
- if((pSite->preambleAssRspCap == PREAMBLE_LONG) ||
- (pSite->barkerPreambleType == PREAMBLE_LONG))
- {
- param.content.ctrlDataCurrentPreambleType = PREAMBLE_LONG;
- }
- else
- param.content.ctrlDataCurrentPreambleType = PREAMBLE_SHORT;
- ctrlData_setParam(pSiteMgr->hCtrlData, ¶m);
-
- }
- /*
- * NOTE: THIS MUST BE AFTER SETTING PREAMBLE TYPE
- */
- if (pSiteMgr->chosenModulation != DRV_MODULATION_PBCC)
- {
- if (pSiteMgr->pDesiredParams->siteMgrCurrentDesiredTxRate == DRV_RATE_AUTO)
- {
- param.paramType = CTRL_DATA_RATE_CONTROL_ENABLE_PARAM;
- param.content.ctrlDataRateControlEnable = TRUE;
- ctrlData_setParam(pSiteMgr->hCtrlData, ¶m);
- }
- else
- {
- param.paramType = CTRL_DATA_RATE_CONTROL_ENABLE_PARAM;
- param.content.ctrlDataRateControlEnable = FALSE;
- ctrlData_setParam(pSiteMgr->hCtrlData, ¶m);
- }
- }
- break;
- case SITE_NULL:
- pSite->siteType = SITE_REGULAR;
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_UPDATE_MODULE_LOG, ("REGULAR site added, bssid: %X-%X-%X-%X-%X-%X\n\n", bssid->addr[0], bssid->addr[1], bssid->addr[2], bssid->addr[3], bssid->addr[4], bssid->addr[5]));
- break;
- case SITE_SELF:
- pSite->siteType = SITE_PRIMARY;
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("SELF ----> PRIMARY site , bssid: %X-%X-%X-%X-%X-%X\n\n", bssid->addr[0], bssid->addr[1], bssid->addr[2], bssid->addr[3], bssid->addr[4], bssid->addr[5]));
- conn_ibssStaJoined(pSiteMgr->hConn);
- break;
- case SITE_REGULAR:
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_UPDATE_MODULE_LOG, ("REGULAR site updated, bssid: %X-%X-%X-%X-%X-%X\n\n", bssid->addr[0], bssid->addr[1], bssid->addr[2], bssid->addr[3], bssid->addr[4], bssid->addr[5]));
- break;
- default:
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("Setting site type failure, bssid: %X-%X-%X-%X-%X-%X\n\n", bssid->addr[0], bssid->addr[1], bssid->addr[2], bssid->addr[3], bssid->addr[4], bssid->addr[5]));
- break;
- }
- return OK;
- }
- /***********************************************************************
- * siteMgr_start
- ***********************************************************************
- DESCRIPTION: Called by the SME SM in order to start the aging timer
- INPUT: hSiteMgr - site mgr handle.
- OUTPUT:
- RETURN: OK on success, NOK otherwise
- ************************************************************************/
- TI_STATUS siteMgr_start(TI_HANDLE hSiteMgr)
- {
- siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr;
- /* update timestamp each time aging started (needed for quiet scan) */
- if(pSiteMgr->pSitesMgmtParams->pPrimarySite)
- pSiteMgr->pSitesMgmtParams->pPrimarySite->localTimeStamp = os_timeStampMs(pSiteMgr->hOs);
- return OK;
- }
- /***********************************************************************
- * siteMgr_stop
- ***********************************************************************
- DESCRIPTION: Called by the SME SM in order to stop site mgr timers
- INPUT: hSiteMgr - site mgr handle.
- OUTPUT:
- RETURN: OK on success, NOK otherwise
- ************************************************************************/
- TI_STATUS siteMgr_stop(TI_HANDLE hSiteMgr)
- {
- return OK;
- }
- /***********************************************************************
- * siteMgr_CheckRxSignalValidity
- ***********************************************************************
- DESCRIPTION: Called by the mlme_parserRecv when receiving managment frame
- Find the ste in the site table and validate that the
- RSSI of that site signal is not lower then -80DB + not lower
- then the exising site RSSI
- INPUT: hSiteMgr - site mgr handle.
- rxLevel - Rx level the frame received in
- bssid - BSSID of the frame
- OUTPUT:
- RETURN: OK / NOK
- ************************************************************************/
- TI_STATUS siteMgr_CheckRxSignalValidity(TI_HANDLE hSiteMgr,
- INT8 rxLevel,
- UINT8 channel,
- macAddress_t *bssid)
- {
- siteEntry_t *pSite;
- siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr;
- pSite = NULL;
- pSite = findSiteEntry(pSiteMgr, bssid);
- if (pSite != NULL)
- {
- if ((channel != pSite->channel) &&
- (rxLevel < pSite->rssi))
- { /* Ignore wrong packets with lower RSSI that were detect as
- ripples from different channels */
- WLAN_REPORT_WARNING(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("siteMgr_CheckRxSignalValidity:Rx RSSI =%d, on channel=%d, is lower then given RSSI =%d on channel=%d, dropping it.\n",
- rxLevel, channel, pSite->rssi, pSite->channel));
- return NOK;
- }
- }
- return OK;
- }
- /***********************************************************************
- * siteMgr_updateRxSignal
- ***********************************************************************
- DESCRIPTION: Called by the Rx data when receiving a frae in the RX
- Find the ste in the site table and updates the SNR and RSSI
- INPUT: hSiteMgr - site mgr handle.
- snr - SNR the frame received in
- rxLevel - Rx level the frame received in
- bssid - BSSID of the frame
- OUTPUT:
- RETURN: OK on success, NOK otherwise
- ************************************************************************/
- TI_STATUS siteMgr_updateRxSignal(TI_HANDLE hSiteMgr,
- UINT8 snr,
- INT8 rxLevel,
- rate_e rate,
- macAddress_t *bssid,
- BOOL dataMsdu)
- {
- siteEntry_t *pSite;
- siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr;
- pSite = findSiteEntry(pSiteMgr, bssid);
- if (pSite != NULL)
- {
- pSite->localTimeStamp = os_timeStampMs(pSiteMgr->hOs);
- pSite->snr = snr;
- /* We check the rate just for finding error case */
- switch(rate)
- {
- case DRV_RATE_1M:
- case DRV_RATE_2M:
- case DRV_RATE_5_5M:
- case DRV_RATE_11M:
- case DRV_RATE_22M:
- case DRV_RATE_6M:
- case DRV_RATE_9M:
- case DRV_RATE_12M:
- case DRV_RATE_18M:
- case DRV_RATE_24M:
- case DRV_RATE_36M:
- case DRV_RATE_48M:
- case DRV_RATE_54M:
- pSite->rxRate = rate;
- break;
- default:
- pSite->rxRate = (rate_e)0;
- WLAN_REPORT_ERROR(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("siteMgr_updateRxSignal:Rx Rate is GARBAGE!\nRx Rate = %d\n", rate));
- break;
- }
- /* Is this is not a primary site, update rssi;
- For the Primary site, we store average RSSI that is counted and updated from Current BSS module */
- if (pSite->siteType != SITE_PRIMARY)
- {
- pSite->rssi = (INT8)rxLevel;
- }
- }
- return OK;
- }
- /***********************************************************************
- * siteMgr_updatePrimarySiteFailStatus
- ***********************************************************************
- DESCRIPTION: Called by the SME SM when the connection with the primary site fails
- If the primary site is NULL, return.
- INPUT: hSiteMgr - site mgr handle.
- bRemoveSite - Whether to remove the site
- OUTPUT:
- RETURN: OK on success, NOK otherwise
- ************************************************************************/
- TI_STATUS siteMgr_updatePrimarySiteFailStatus(TI_HANDLE hSiteMgr,
- BOOL bRemoveSite)
- {
- siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr;
- siteTablesParams_t *currTable = pSiteMgr->pSitesMgmtParams->pCurrentSiteTable;
- if (pSiteMgr->pSitesMgmtParams->pPrimarySite == NULL)
- return OK;
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- (" SITE MGR: bRemoveSite = %d \n", bRemoveSite));
- if (bRemoveSite)
- {
- removeSiteEntry(pSiteMgr, currTable, pSiteMgr->pSitesMgmtParams->pPrimarySite);
- pSiteMgr->pSitesMgmtParams->pPrimarySite = NULL;
- }
- else /* Currently never used */
- {
- pSiteMgr->pSitesMgmtParams->pPrimarySite->failStatus = STATUS_UNSPECIFIED;
- pSiteMgr->pSitesMgmtParams->pPrimarySite->attemptsNumber++;
- pSiteMgr->pSitesMgmtParams->pPrimarySite->attemptsNumber &= 0x0F;
- }
- return OK;
- }
- /***********************************************************************
- * siteMgr_resetEventStatisticsHistory
- ***********************************************************************
- DESCRIPTION: Called by the SME SM when successing in establishing a connection with the primary site
- If thr primary site is NULL, return.
- Otherwise, reset the site rssi level
- INPUT: hSiteMgr - site mgr handle.
- OUTPUT:
- RETURN: OK on success, NOK otherwise
- ************************************************************************/
- TI_STATUS siteMgr_resetEventStatisticsHistory(TI_HANDLE hSiteMgr)
- {
- siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr;
- if (pSiteMgr->pSitesMgmtParams->pPrimarySite == NULL)
- {
- WLAN_REPORT_ERROR(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("siteMgr_resetPrimarySiteRssiPerLevelBeaconMissed: Primary Site Is NULL\n"));
- return OK;
- }
- return OK;
- }
- /***********************************************************************
- * siteMgr_resetPrimarySiteAttemptsNumber
- ***********************************************************************
- DESCRIPTION: Called by the SME SM when successing in establishing a connection with the primary site
- If thr primary site is NULL, return.
- Otherwise, reset the site attemptsNumber counter.
- INPUT: hSiteMgr - site mgr handle.
- OUTPUT:
- RETURN: OK on success, NOK otherwise
- ************************************************************************/
- TI_STATUS siteMgr_resetPrimarySiteAttemptsNumber(TI_HANDLE hSiteMgr)
- {
- siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr;
- if (pSiteMgr->pSitesMgmtParams->pPrimarySite == NULL)
- {
- WLAN_REPORT_ERROR(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("siteMgr_resetPrimarySiteAttemptsNumber: Primary Site Is NULL\n"));
- return OK;
- }
- pSiteMgr->pSitesMgmtParams->pPrimarySite->attemptsNumber = 0;
- return OK;
- }
- /***********************************************************************
- * siteMgr_resetPrevPrimarySiteRssi
- ***********************************************************************
- DESCRIPTION: Called by the SME SM when successing in establishing a connection with the primary site
- If thr primary site is NULL, return.
- Otherwise, reset the site attemptsNumber counter.
- INPUT: hSiteMgr - site mgr handle.
- OUTPUT:
- RETURN: OK on success, NOK otherwise
- ************************************************************************/
- TI_STATUS siteMgr_resetPrevPrimarySiteRssi(TI_HANDLE hSiteMgr)
- {
- siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr;
- if (pSiteMgr->pSitesMgmtParams->pPrevPrimarySite == NULL)
- {
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("Previous Primary Site Is NULL\n"));
- return OK;
- }
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("Resetting previous primary site RSSI\n"));
- /*
- pSiteMgr->pSitesMgmtParams->pPrevPrimarySite->rssi = 0;
- pSiteMgr->pSitesMgmtParams->pPrevPrimarySite->attemptsNumber = 0;
- */
- return OK;
- }
- /***********************************************************************
- * siteMgr_isCurrentBand24
- ***********************************************************************
- DESCRIPTION: The function checks the current operational mode and
- returns if the current band is 2.4Ghz or 5Ghz.
- INPUT: hSiteMgr - site mgr handle.
- OUTPUT:
- RETURN: TRUE if current band is 2.4Ghz, FALSE otherwise.
- ************************************************************************/
- BOOL siteMgr_isCurrentBand24(TI_HANDLE hSiteMgr)
- {
- siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr;
- if(pSiteMgr->siteMgrOperationalMode == DOT11_A_MODE)
- return FALSE;
- return TRUE; /* 802.11b supports onlty 2.4G band */
- }
- /***********************************************************************
- * siteMgr_isThereValidSSID
- ***********************************************************************
- DESCRIPTION: checks if a valid SSID exists
- INPUT: hSiteMgr - site mgr handle.
- OUTPUT:
- RETURN: TRUE if valid SSID found, FALSE if not
- ************************************************************************/
- BOOL siteMgr_isThereValidSSID (TI_HANDLE hSiteMgr)
- {
- paramInfo_t param;
- param.paramType = SITE_MGR_DESIRED_SSID_PARAM;
- siteMgr_getParam(hSiteMgr,¶m);
- if((utils_isAnySSID(¶m.content.siteMgrDesiredSSID)) || (utils_isJunkSSID(¶m.content.siteMgrDesiredSSID)))
- return (FALSE);
- else
- return (TRUE);
- }
- /***********************************************************************
- * removeEldestSite
- ***********************************************************************
- DESCRIPTION: Called by the select when trying to create an IBSS and site table is full
- Remove the eldest site from the table
- INPUT: hSiteMgr - site mgr handle.
- OUTPUT:
- RETURN: OK on success, NOK otherwise
- ************************************************************************/
- TI_STATUS removeEldestSite(siteMgr_t *pSiteMgr)
- {
- int i;
- siteEntry_t *pEldestSite = NULL, *pSiteTable = pSiteMgr->pSitesMgmtParams->pCurrentSiteTable->siteTable;
- siteTablesParams_t *currTable = pSiteMgr->pSitesMgmtParams->pCurrentSiteTable;
- UINT32 currentTimsStamp = os_timeStampMs(pSiteMgr->hOs);
- UINT32 biggestGap = 0;
- for (i = 0; i < currTable->maxNumOfSites; i++)
- {
- if (biggestGap < ((UINT32)(currentTimsStamp - pSiteTable[i].localTimeStamp)))
- {
- biggestGap = ((UINT32)(currentTimsStamp - pSiteTable[i].localTimeStamp));
- pEldestSite = &(pSiteTable[i]);
- }
- }
- removeSiteEntry(pSiteMgr, currTable, pEldestSite);
- return OK;
- }
- /***********************************************************************
- * update_apsd
- ***********************************************************************
- DESCRIPTION: Sets the site APSD support flag according to the
- beacon's capabilities vector and the WME-params IE if exists.
- INPUT: pSite - Pointer to the site entry in the site table
- pFrameInfo - Frame information after the parsing
-
- OUTPUT: pSite->APSDSupport flag
- RETURN:
- ************************************************************************/
- static void update_apsd(siteEntry_t *pSite, mlmeFrameInfo_t *pFrameInfo)
- {
- /* If WME-Params IE is not included in the beacon, set the APSD-Support flag
- only by the beacons capabilities bit map. */
- if (pFrameInfo->content.iePacket.WMEParams == NULL)
- pSite->APSDSupport = (((pFrameInfo->content.iePacket.capabilities >> CAP_APSD_SHIFT) & CAP_APSD_MASK) ? TRUE : FALSE);
- /* Else, set the APSD-Support flag if either the capabilities APSD bit or the
- WME-Params APSD bit indicate so. */
- else
- pSite->APSDSupport = ((((pFrameInfo->content.iePacket.capabilities >> CAP_APSD_SHIFT) & CAP_APSD_MASK) ? TRUE : FALSE) ||
- (((pFrameInfo->content.iePacket.WMEParams->ACInfoField >> AP_QOS_INFO_UAPSD_SHIFT) & AP_QOS_INFO_UAPSD_MASK) ? TRUE : FALSE));
- }
- /***********************************************************************
- * release_module
- ***********************************************************************
- DESCRIPTION: Called by the un load function
- Go over the vector, for each bit that is set, release the corresponding module.
- INPUT: pSiteMgr - site mgr handle.
- initVec - Vector that contains a bit set for each module thah had been initiualized
- OUTPUT:
- RETURN: OK on success, NOK otherwise
- ************************************************************************/
- static void release_module(siteMgr_t *pSiteMgr, UINT32 initVec)
- {
- if (initVec & (1 << MGMT_PARAMS_INIT_BIT))
- utils_nullMemoryFree(pSiteMgr->hOs, pSiteMgr->pSitesMgmtParams, sizeof(sitesMgmtParams_t));
- if (initVec & (1 << DESIRED_PARAMS_INIT_BIT))
- utils_nullMemoryFree(pSiteMgr->hOs, pSiteMgr->pDesiredParams, sizeof(siteMgrInitParams_t));
- if (initVec & (1 << SITE_MGR_INIT_BIT))
- utils_nullMemoryFree(pSiteMgr->hOs, pSiteMgr, sizeof(siteMgr_t));
- initVec = 0;
- }
- /***********************************************************************
- * updateSiteInfo
- ***********************************************************************
- DESCRIPTION: Called upon receiving a beacon or probe response
- Go over the vector, for each bit that is set, release the corresponding module.
- Update theaite entry in the site table with the information received in the frame
- INPUT: pSiteMgr - site mgr handle.
- pFrameInfo - Frame information after the parsing
- pSite - Pointer to the site entry in the site table
- OUTPUT:
- RETURN: OK on success, NOK otherwise
- ************************************************************************/
- static void updateSiteInfo(siteMgr_t *pSiteMgr, mlmeFrameInfo_t *pFrameInfo, siteEntry_t *pSite, UINT8 rxChannel)
- {
- paramInfo_t param;
- BOOL ssidUpdated;
- SET_ENTRY_FLAG_IN_SITE_TABLE(pSite);
- ssidUpdated = FALSE;
- switch (pFrameInfo->subType)
- {
- case BEACON:
- UPDATE_BEACON_INTERVAL(pSite, pFrameInfo);
-
- UPDATE_CAPABILITIES(pSite, pFrameInfo);
-
- if (utils_isIESSID_Broadcast(pFrameInfo->content.iePacket.pSsid) == FALSE)
- { /* And the SSID is not Broadcast */
- ssidUpdated = TRUE;
- UPDATE_SSID(pSite, pFrameInfo);
- }
- if (ssidUpdated)
- {
- UPDATE_PRIVACY(pSite, pFrameInfo);
- }
- update_apsd(pSite, pFrameInfo);
- updatePreamble(pSiteMgr, pSite, pFrameInfo);
- UPDATE_AGILITY(pSite, pFrameInfo);
- if(pSiteMgr->siteMgrOperationalMode == DOT11_G_MODE)
- {
- UPDATE_SLOT_TIME(pSite, pFrameInfo);
- UPDATE_PROTECTION(pSite, pFrameInfo);
- }
- updateRates(pSiteMgr, pSite, pFrameInfo);
- if ((pFrameInfo->content.iePacket.pDSParamsSet != NULL) &&
- (pFrameInfo->content.iePacket.pDSParamsSet->currChannel!=rxChannel))
- {
- WLAN_REPORT_ERROR(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("updateSiteInfo, wrong CHANNELS:rxChannel=%d,currChannel=%d\n",
- rxChannel, pFrameInfo->content.iePacket.pDSParamsSet->currChannel));
- }
- else
- UPDATE_CHANNEL(pSite, pFrameInfo , rxChannel);
- UPDATE_BSS_TYPE(pSite, pFrameInfo);
- if (pSite->bssType == BSS_INFRASTRUCTURE)
- UPDATE_DTIM_PERIOD(pSite, pFrameInfo);
- UPDATE_ATIM_WINDOW(pSite, pFrameInfo);
- UPDATE_BEACON_AP_TX_POWER(pSite, pFrameInfo);
- /* Updating QoS params */
- updateBeaconQosParams(pSiteMgr, pSite, pFrameInfo);
- /* updating CountryIE */
- if ((pFrameInfo->content.iePacket.country != NULL) &&
- (pFrameInfo->content.iePacket.country->hdr.eleLen != 0))
- {
- /* set the country info in the regulatory domain - If a different code was detected earlier
- the regDomain will ignore it */
- param.paramType = REGULATORY_DOMAIN_COUNTRY_PARAM;
- param.content.pCountry = (country_t *)pFrameInfo->content.iePacket.country;
- regulatoryDomain_setParam(pSiteMgr->hRegulatoryDomain,¶m);
- }
- /* Checking if this beacon is a DTIM i.e. DTIM count is zero */
- if( (pFrameInfo->content.iePacket.pTIM != NULL) && (pFrameInfo->content.iePacket.pTIM->dtimCount == 0))
- {
- /* Update the DTIM beacon time */
- UPDATE_DTIM_TIME(pSiteMgr, pSite, pFrameInfo);
- }
- UPDATE_LOCAL_TIME_STAMP(pSiteMgr, pSite, pFrameInfo);
- UPDATE_BEACON_MODULATION(pSite, pFrameInfo);
- /* If the BSS type is independent, the beacon & probe modulation are equal,
- It is important to update this field here for dynamic PBCC algorithm compatibility */
- if (pSite->bssType == BSS_INDEPENDENT)
- UPDATE_PROBE_MODULATION(pSite, pFrameInfo);
- if (pSite->siteType == SITE_PRIMARY)
- {
-
- if (pSiteMgr->pSitesMgmtParams->pPrimarySite == NULL)
- {
- WLAN_REPORT_ERROR(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("updateSiteInfo: Primary Site Is NULL\n"));
- pSite->siteType = SITE_REGULAR;
- }
- else
- {
- /* If the site that we got the beacon on is the primary site - which means we are either trying */
- /* to connect to it or we are already connected - send the EVENT_GOT_BEACON to the conn module (through the SME module) */
- /* so the conn module will be aware of the beacon status of the site it's trying to connect to */
-
- #ifdef EXC_MODULE_INCLUDED
- UINT8 ExternTxPower;
- if (pFrameInfo->content.iePacket.cellTP != NULL)
- {
- ExternTxPower = pFrameInfo->content.iePacket.cellTP->power;
- }
- else /* Set to maximum possible. Note that we add +1 so that Dbm = 26 and not 25 */
- {
- ExternTxPower = MAX_TX_POWER / DBM_TO_TX_POWER_FACTOR + 1;
- }
- param.paramType = REGULATORY_DOMAIN_EXTERN_TX_POWER_PREFERRED;
- param.content.ExternTxPowerPreferred = ExternTxPower;
- regulatoryDomain_setParam(pSiteMgr->hRegulatoryDomain, ¶m);
- #endif
- /* Updating the Tx Power according to the received Power Constraint */
- if(pFrameInfo->content.iePacket.powerConstraint != NULL)
- { /* Checking if the recieved constraint is different from the one that is already known */
- if( pFrameInfo->content.iePacket.powerConstraint->powerConstraint != pSite->powerConstraint)
- { /* check if Spectrum Management is enabled */
- param.paramType = REGULATORY_DOMAIN_MANAGEMENT_CAPABILITY_ENABLED_PARAM;
- regulatoryDomain_getParam(pSiteMgr->hRegulatoryDomain,¶m);
- if(param.content.spectrumManagementEnabled)
- { /* setting power constraint */
- pSite->powerConstraint = pFrameInfo->content.iePacket.powerConstraint->powerConstraint;
- param.paramType = REGULATORY_DOMAIN_SET_POWER_CONSTRAINT_PARAM;
- param.content.powerConstraint = pSite->powerConstraint;
- regulatoryDomain_setParam(pSiteMgr->hRegulatoryDomain,¶m);
- }
- }
- }
- if (pSite->beaconReceiveAfterJoin == FALSE)
- {
- /*
- use for indicate to that it safe to call to PowerMgr_startPS() that can be call only
- after join command followed by beacon receive later.
- every join command the beaconReceiveAfterJoin flag is cleared therefor it will
- be true after the join command.
- the right follow is: join --> receive primary site beacon --> PowerMgr_startPS().
- Note: the beaconReceiveAfterJoin flag is in use for the SME path!
- */
- siteMgr_gotFirstBcn(pSiteMgr);
- /* set Hw not available now that the first beacon arrived */
- MacServices_powerAutho_AwakeRequiredUpdate(pSiteMgr->hMacServices, POWERAUTHO_AWAKE_NOT_REQUIRED, POWERAUTHO_AWAKE_REASON_FIRST_BEACON);
- pSite->beaconReceiveAfterJoin = TRUE;
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport,
- SITE_MGR_MODULE_LOG,
- ("1st beacon after join command RECEIVED!!!\n"));
- }
- }
- }
- UPDATE_BEACON_RECV(pSite);
-
- if (ssidUpdated)
- {
- dot11_RSN_t *pRsnIe = pFrameInfo->content.iePacket.pRsnIe;
- UINT8 rsnIeLen = pFrameInfo->content.iePacket.rsnIeLen;
- UPDATE_RSN_IE(pSite, pRsnIe, rsnIeLen);
- }
- UPDATE_BEACON_TIMESTAMP(pSiteMgr, pSite, pFrameInfo);
- break;
- case PROBE_RESPONSE:
- UPDATE_BEACON_INTERVAL(pSite, pFrameInfo);
- UPDATE_CAPABILITIES(pSite, pFrameInfo);
- ssidUpdated = TRUE;
- if (pSite->siteType == SITE_PRIMARY)
- { /* Primary SITE */
- if ((pFrameInfo->content.iePacket.pSsid != NULL) &&
- (pSiteMgr->pDesiredParams->siteMgrDesiredSSID.len>0))
- { /* There's a desired SSID*/
- if (os_memoryCompare(pSiteMgr->hOs, (UINT8*)(pSiteMgr->pDesiredParams->siteMgrDesiredSSID.ssidString),
- (UINT8*)(pFrameInfo->content.iePacket.pSsid->serviceSetId), pFrameInfo->content.iePacket.pSsid->hdr.eleLen)!=0)
- { /* Do not overwrite the primary site's SSID with a different than the desired SSID*/
- ssidUpdated = FALSE;
- }
-
- }
- else if (pFrameInfo->content.iePacket.pSsid == NULL)
- {
- WLAN_REPORT_ERROR(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("updateSiteInfo PROBE_RESP, pSsid=NULL\n"));
- }
- }
- if (ssidUpdated)
- {
- UPDATE_SSID(pSite, pFrameInfo);
- UPDATE_PRIVACY(pSite, pFrameInfo);
- }
- update_apsd(pSite, pFrameInfo);
- if(pSiteMgr->siteMgrOperationalMode == DOT11_G_MODE)
- {
- UPDATE_PROTECTION(pSite, pFrameInfo);
- }
- updateFourX(pSiteMgr, pSite, pFrameInfo);
- updatePreamble(pSiteMgr, pSite, pFrameInfo);
- UPDATE_AGILITY(pSite, pFrameInfo);
- updateRates(pSiteMgr, pSite, pFrameInfo);
- if ((pFrameInfo->content.iePacket.pDSParamsSet != NULL) &&
- (pFrameInfo->content.iePacket.pDSParamsSet->currChannel!=rxChannel))
- {
- WLAN_REPORT_ERROR(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("updateSiteInfo, wrong CHANNELS:rxChannel=%d,currChannel=%d\n",
- rxChannel, pFrameInfo->content.iePacket.pDSParamsSet->currChannel));
- }
- else
- UPDATE_CHANNEL(pSite, pFrameInfo, rxChannel);
- UPDATE_BSS_TYPE(pSite, pFrameInfo);
- UPDATE_ATIM_WINDOW(pSite, pFrameInfo);
- UPDATE_PROBE_AP_TX_POWER(pSite, pFrameInfo);
- /* Updating WME params */
- updateProbeQosParams(pSiteMgr, pSite, pFrameInfo);
- /* updating CountryIE */
- if ((pFrameInfo->content.iePacket.country != NULL) &&
- (pFrameInfo->content.iePacket.country->hdr.eleLen != 0))
- {
- /* set the country info in the regulatory domain - If a different code was detected earlier
- the regDomain will ignore it */
- param.paramType = REGULATORY_DOMAIN_COUNTRY_PARAM;
- param.content.pCountry = (country_t *)pFrameInfo->content.iePacket.country;
- regulatoryDomain_setParam(pSiteMgr->hRegulatoryDomain,¶m);
- }
- UPDATE_LOCAL_TIME_STAMP(pSiteMgr, pSite, pFrameInfo);
- UPDATE_PROBE_MODULATION(pSite, pFrameInfo);
- /* If the BSS type is independent, the beacon & probe modulation are equal,
- It is important to update this field here for dynamic PBCC algorithm compatibility */
- if (pSite->bssType == BSS_INDEPENDENT)
- UPDATE_BEACON_MODULATION(pSite, pFrameInfo);
- UPDATE_PROBE_RECV(pSite);
- if (ssidUpdated)
- {
- dot11_RSN_t *pRsnIe = pFrameInfo->content.iePacket.pRsnIe;
- UINT8 rsnIeLen = pFrameInfo->content.iePacket.rsnIeLen;
- UPDATE_RSN_IE(pSite, pRsnIe, rsnIeLen);
- }
- UPDATE_BEACON_TIMESTAMP(pSiteMgr, pSite, pFrameInfo);
- break;
- default:
- WLAN_REPORT_ERROR(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("Site Update failure, un known frame sub type %d\n\n", pFrameInfo->subType));
- break;
- }
- }
- /***********************************************************************
- * updateFourX
- ***********************************************************************
- DESCRIPTION: Called by the function 'updateSiteInfo()'
- INPUT: pSiteMgr - site mgr handle.
- pFrameInfo - Frame information after the parsing
- pSite - Pointer to the site entry in the site table
- OUTPUT:
- RETURN:
- ************************************************************************/
- static void updateFourX(siteMgr_t *pSiteMgr, siteEntry_t *pSite, mlmeFrameInfo_t *pFrameInfo)
- {
- UINT8 ti_oui[] = TI_OUI;
- /* It is done to overcome interop issues. We don't send AssocReq with 4x IE
- if ProbeReq without 4x IE was received previously */
- if (pFrameInfo->content.iePacket.fourXParams != NULL)
- {
- os_memoryCopy(pSiteMgr->hOs, &pSite->fourXParams, pFrameInfo->content.iePacket.fourXParams, pFrameInfo->content.iePacket.fourXParams->hdr.eleLen+sizeof( dot11_eleHdr_t));
- if( (pSite->fourXParams.hdr.eleId != DOT11_4X_ELE_ID) ||
- (pSite->fourXParams.hdr.eleLen > DOT11_4X_MAX_LEN) ||
- (os_memoryCompare(pSiteMgr->hOs ,ti_oui, (PUINT8)pSite->fourXParams.fourXCapabilities, DOT11_OUI_LEN) != 0) )
- {
- pSite->fourXsupported = FALSE;
- }
- }
- else
- pSite->fourXsupported = FALSE;
- }
- /***********************************************************************
- * updatePreamble
- ***********************************************************************
- DESCRIPTION: Called by the function 'updateSiteInfo()'
- INPUT: pSiteMgr - site mgr handle.
- pFrameInfo - Frame information after the parsing
- pSite - Pointer to the site entry in the site table
- OUTPUT:
- RETURN:
- ************************************************************************/
- static void updatePreamble(siteMgr_t *pSiteMgr, siteEntry_t *pSite, mlmeFrameInfo_t *pFrameInfo)
- {
- pSite->currentPreambleType = ((pFrameInfo->content.iePacket.capabilities >> CAP_PREAMBLE_SHIFT) & CAP_PREAMBLE_MASK) ? PREAMBLE_SHORT : PREAMBLE_LONG;
- pSite->barkerPreambleType = pFrameInfo->content.iePacket.barkerPreambleMode;
- }
- /***********************************************************************
- * updateBeaconQosParams
- ***********************************************************************
- DESCRIPTION: Called by the function 'updateSiteInfo()'
- INPUT: pSiteMgr - site mgr handle.
- pFrameInfo - Frame information after the parsing
- pSite - Pointer to the site entry in the site table
- OUTPUT:
- RETURN:
- ************************************************************************/
- static void updateBeaconQosParams(siteMgr_t *pSiteMgr, siteEntry_t *pSite, mlmeFrameInfo_t *pFrameInfo)
- {
- /* Updating WME params */
- if (pFrameInfo->content.iePacket.WMEParams != NULL)
- {
- /* Checking if this is IE includes new WME Parameters */
- if(( ((pFrameInfo->content.iePacket.WMEParams->ACInfoField) & dot11_WME_ACINFO_MASK ) != pSite->lastWMEParameterCnt) ||
- (!pSite->WMESupported) )
- {
- pSite->WMESupported = TRUE;
- /* Checking if this IE is information only or is a paremeters IE */
- if(pFrameInfo->content.iePacket.WMEParams->OUISubType == dot11_WME_OUI_SUB_TYPE_PARAMS_IE)
- {
- if(pSite->siteType == SITE_PRIMARY)
- {
- qosMngr_updateIEinfo(pSiteMgr->hQosMngr,(UINT8 *)(pFrameInfo->content.iePacket.WMEParams),WME);
- }
- /* updating the WME paraeters into the site table. */
- os_memoryCopy(pSiteMgr->hOs, &pSite->WMEParameters, &(pFrameInfo->content.iePacket.WMEParams->WME_ACParameteres), sizeof( ACParameters_t));
- pSite->lastWMEParameterCnt = (pFrameInfo->content.iePacket.WMEParams->ACInfoField) & dot11_WME_ACINFO_MASK;
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,("$$$$$$ WME parameters were updates according to beacon, cntSeq = %d\n",pSite->lastWMEParameterCnt));
- }
- }
- }else
- {
- pSite->WMESupported = FALSE;
- }
- }
- /***********************************************************************
- * updateProbeQosParams
- ***********************************************************************
- DESCRIPTION: Called by the function 'updateSiteInfo()'
- INPUT: pSiteMgr - site mgr handle.
- pFrameInfo - Frame information after the parsing
- pSite - Pointer to the site entry in the site table
- OUTPUT:
- RETURN:
- ************************************************************************/
- static void updateProbeQosParams(siteMgr_t *pSiteMgr, siteEntry_t *pSite, mlmeFrameInfo_t *pFrameInfo)
- {
- /* Updating WME params */
- if (pFrameInfo->content.iePacket.WMEParams != NULL)
- {
- /* Checking if this is IE includes new WME Parameters */
- if(( ((pFrameInfo->content.iePacket.WMEParams->ACInfoField) & dot11_WME_ACINFO_MASK ) != pSite->lastWMEParameterCnt) ||
- (!pSite->WMESupported) )
- {
- pSite->WMESupported = TRUE;
- /* Checking if this IE is information only or is a paremeters IE */
- if(pFrameInfo->content.iePacket.WMEParams->OUISubType == dot11_WME_OUI_SUB_TYPE_PARAMS_IE)
- {
- if(pSite->siteType == SITE_PRIMARY)
- {
- qosMngr_updateIEinfo(pSiteMgr->hQosMngr,(UINT8 *)(pFrameInfo->content.iePacket.WMEParams),WME);
- }
- /* updating the WME paraeters into the site table. */
- os_memoryCopy(pSiteMgr->hOs, &pSite->WMEParameters, &(pFrameInfo->content.iePacket.WMEParams->WME_ACParameteres), sizeof( ACParameters_t));
- pSite->lastWMEParameterCnt = (pFrameInfo->content.iePacket.WMEParams->ACInfoField) & dot11_WME_ACINFO_MASK;
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,("$$$$$$ WME parameters were updates according to probe response, cntSeq = %d\n",pSite->lastWMEParameterCnt));
- }
- }
- }else
- {
- pSite->WMESupported = FALSE;
- }
- }
- /***********************************************************************
- * updateRates
- ***********************************************************************
- DESCRIPTION: Called by the function 'updateSiteInfo()' in order to translate the rates received
- in the beacon or probe response to rate used by the driver. Perfoms the following:
- - Check the rates. validity. If rates are invalid, return
- - Get the max active rate & max basic rate, if invalid, return
- - Translate the max active rate and max basic rate from network rates to host rates.
- The max active & max basic rate are used by the driver from now on in all the processes:
- (selection, join, transmission, etc....)
- INPUT: pSiteMgr - site mgr handle.
- pFrameInfo - Frame information after the parsing
- pSite - Pointer to the site entry in the site table
- OUTPUT:
- RETURN: OK on success, NOK otherwise
- ************************************************************************/
- static void updateRates(siteMgr_t *pSiteMgr, siteEntry_t *pSite, mlmeFrameInfo_t *pFrameInfo)
- {
- UINT8 maxBasicRate = 0, maxActiveRate = 0;
- UINT32 bitMapExtSupp = 0;
- paramInfo_t param;
- if (pFrameInfo->content.iePacket.pRates == NULL)
- {
- WLAN_REPORT_ERROR(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("updateRates, pRates=NULL, beacon & probeResp are: \n"));
- WLAN_REPORT_HEX_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- (UINT8*)pFrameInfo->content.iePacket.pRates, pFrameInfo->content.iePacket.pRates->hdr.eleLen+2);
- WLAN_REPORT_HEX_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- (UINT8*)pFrameInfo->content.iePacket.pRates, pFrameInfo->content.iePacket.pRates->hdr.eleLen+2);
- return;
- }
- /* Update the rate elements */
- maxBasicRate = getMaxBasicRatefromString((UINT8 *)pFrameInfo->content.iePacket.pRates->rates,pFrameInfo->content.iePacket.pRates->hdr.eleLen, maxBasicRate);
- maxActiveRate = getMaxActiveRatefromString((UINT8 *)pFrameInfo->content.iePacket.pRates->rates,pFrameInfo->content.iePacket.pRates->hdr.eleLen, maxActiveRate);
-
- if(pFrameInfo->content.iePacket.pExtRates)
- {
- maxBasicRate = getMaxBasicRatefromString((UINT8 *)pFrameInfo->content.iePacket.pExtRates->rates,pFrameInfo->content.iePacket.pExtRates->hdr.eleLen, maxBasicRate);
- maxActiveRate = getMaxActiveRatefromString((UINT8 *)pFrameInfo->content.iePacket.pExtRates->rates,pFrameInfo->content.iePacket.pExtRates->hdr.eleLen, maxActiveRate);
- }
- /*WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("1- maxBasicRate = 0x%X, maxActiveRate = 0x%X \n", maxBasicRate,maxActiveRate));*/
- if (maxActiveRate == 0)
- maxActiveRate = maxBasicRate;
- /* Now update it from network to host rates */
- pSite->maxBasicRate = networkToHostRate(maxBasicRate);
- pSite->maxActiveRate = networkToHostRate(maxActiveRate);
- if (pSite->maxActiveRate == DRV_RATE_INVALID)
- WLAN_REPORT_ERROR(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("Network To Host Rate failure, no active network rate\n"));
- if (pSite->maxBasicRate != DRV_RATE_INVALID)
- {
- if (pSite->maxActiveRate != DRV_RATE_INVALID)
- {
- pSite->maxActiveRate = MAX(pSite->maxActiveRate,pSite->maxBasicRate);
- }
- } else { /* in case some vendors don't specify basic rates */
- WLAN_REPORT_WARNING(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("Network To Host Rate failure, no basic network rate"));
- pSite->maxBasicRate = pSite->maxActiveRate;
- }
- /* build rates bit map */
- networkStringToBitMapSuppRates((UINT32 *)&pSite->rateMask.supportedRateMask,
- (UINT8 *)pFrameInfo->content.iePacket.pRates->rates,
- pFrameInfo->content.iePacket.pRates->hdr.eleLen);
- networkStringToBitMapBasicRates((UINT32 *)&pSite->rateMask.basicRateMask,
- (UINT8 *)pFrameInfo->content.iePacket.pRates->rates,
- pFrameInfo->content.iePacket.pRates->hdr.eleLen);
- if(pFrameInfo->content.iePacket.pExtRates)
- {
- networkStringToBitMapSuppRates(&bitMapExtSupp, (UINT8 *)pFrameInfo->content.iePacket.pExtRates->rates,
- pFrameInfo->content.iePacket.pExtRates->hdr.eleLen);
- pSite->rateMask.supportedRateMask |= bitMapExtSupp;
- networkStringToBitMapBasicRates(&bitMapExtSupp, (UINT8 *)pFrameInfo->content.iePacket.pExtRates->rates,
- pFrameInfo->content.iePacket.pExtRates->hdr.eleLen);
- pSite->rateMask.basicRateMask |= bitMapExtSupp;
- }
-
-
- param.paramType = CTRL_DATA_CURRENT_SUPPORTED_RATE_MASK_PARAM;
- param.content.ctrlDataCurrentRateMask = pSite->rateMask.supportedRateMask;
- /* clear the 22Mbps bit in case the PBCC is not allowed */
- if(pSiteMgr->currentDataModulation != DRV_MODULATION_PBCC && pSiteMgr->currentDataModulation != DRV_MODULATION_OFDM)
- {
- param.content.ctrlDataCurrentRateMask &= ~DRV_RATE_MASK_22_PBCC;
- }
- ctrlData_setParam(pSiteMgr->hCtrlData, ¶m);
- param.paramType = CTRL_DATA_CURRENT_BASIC_RATE_MASK_PARAM;
- param.content.ctrlDataBasicRateBitMask = pSite->rateMask.basicRateMask;
- ctrlData_setParam(pSiteMgr->hCtrlData, ¶m);
- /*WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("2- pSite->maxActiveRate = 0x%X, pSite->maxBasicRate = 0x%X \n", pSite->maxActiveRate,pSite->maxBasicRate));*/
- }
- /***********************************************************************
- * getBssidList
- ***********************************************************************
- DESCRIPTION: Called by the OS abstraction layer in order to get the BSSID list from the site table
- INPUT: pSiteMgr - site mgr handle.
- OUTPUT: bssidList - BSSID list pointer
- RETURN:
- ************************************************************************/
- static TI_STATUS getBssidList(siteMgr_t *pSiteMgr, OS_802_11_BSSID_LIST_EX *bssidList, UINT32 *pLength, BOOL allVarIes)
- {
- UINT8 siteTableIndex, tableIndex, i, index, rsnIeLength;
- siteEntry_t *pSiteEntry;
- OS_802_11_BSSID_EX *pBssid;
- OS_802_11_FIXED_IEs *pFixedIes;
- OS_802_11_VARIABLE_IEs *pVarIes;
-
- UINT32 length;
- UINT8 *pData;
- UINT32 len, firstOFDMloc = 0;
- siteTablesParams_t *currTable;
- short numOfTables;
- UINT8 *pDesiredIe;
- UINT8 *pSiteEntryIeBuffer;
- UINT16 ieLength;
-
- UINT8 wpsOuiBuffer[DOT11_WPS_OUI_LEN+1]=DOT11_WPS_OUI;
- #ifdef DBG_BSSIS_NAME_PRINT
- UINT8 tempName[33];
- #endif
- numOfTables = NUM_OF_SITE_TABLE;
- bssidList->NumberOfItems = 0;
- calculateBssidListSize(pSiteMgr, &length, allVarIes);
- if (length > *pLength)
- {
- *pLength = length;
- return NOK;
- }
- length = sizeof(OS_802_11_BSSID_LIST_EX) - sizeof(OS_802_11_BSSID_EX);
- pData = (UINT8*)&bssidList->Bssid[0];
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("Entering getBssidList, length = %d, pData = 0x%X\n", *pLength, (UINT32)pData));
- currTable = pSiteMgr->pSitesMgmtParams->pCurrentSiteTable;
- for (tableIndex = 0; tableIndex < numOfTables ; tableIndex++)
- {
- for (siteTableIndex = 0, i = 0; siteTableIndex < currTable->maxNumOfSites; siteTableIndex++)
- {
- pBssid = (OS_802_11_BSSID_EX*)pData;
- pSiteEntry = &(currTable->siteTable[siteTableIndex]);
- if (pSiteEntry->siteType == SITE_NULL)
- continue;
- /* MacAddress */
- os_memoryCopy(pSiteMgr->hOs, (void *)pBssid->MacAddress, (void *)&(pSiteEntry->bssid.addr), MAC_ADDR_LEN);
-
- /* Capabilities */
- pBssid->Union.Capabilities = pSiteEntry->capabilities;
- /* SSID */
- /* This line is in order to prevent presantation problems at the utility. */
- os_memoryZero(pSiteMgr->hOs, &(pBssid->Ssid.Ssid), MAX_SSID_LEN);
- if (pSiteEntry->ssid.len > MAX_SSID_LEN)
- {
- pSiteEntry->ssid.len = MAX_SSID_LEN;
- }
- os_memoryCopy(pSiteMgr->hOs, (void *)pBssid->Ssid.Ssid, &(pSiteEntry->ssid.ssidString), pSiteEntry->ssid.len);
- pBssid->Ssid.SsidLength = pSiteEntry->ssid.len;
- /* privacy */
- pBssid->Privacy = pSiteEntry->privacy;
- /* RSSI */
- pBssid->Rssi = (pSiteEntry->rssi);
- pBssid->Configuration.Length = sizeof(OS_802_11_CONFIGURATION);
- pBssid->Configuration.BeaconPeriod = pSiteEntry->beaconInterval;
- pBssid->Configuration.ATIMWindow = pSiteEntry->atimWindow;
- pBssid->Configuration.Union.channel = Chan2Freq(pSiteEntry->channel);
- pBssid->Configuration.FHConfig.Length = sizeof(OS_802_11_CONFIGURATION_FH);
- pBssid->Configuration.FHConfig.DwellTime = pSiteEntry->FHParams.dwellTime;
- pBssid->Configuration.FHConfig.HopPattern = pSiteEntry->FHParams.hopPattern;
- pBssid->Configuration.FHConfig.HopSet = pSiteEntry->FHParams.hopSet;
- if (pSiteEntry->bssType == BSS_INDEPENDENT)
- pBssid->InfrastructureMode = os802_11IBSS;
- else
- pBssid->InfrastructureMode = os802_11Infrastructure;
- /* SupportedRates */
- os_memoryZero(pSiteMgr->hOs, (void *)pBssid->SupportedRates, sizeof(OS_802_11_RATES_EX));
- bitMapToNetworkStringRates(pSiteEntry->rateMask.supportedRateMask,
- pSiteEntry->rateMask.basicRateMask,
- (UINT8 *)pBssid->SupportedRates,
- &len, &firstOFDMloc);
- /* set network type acording to band and rates */
- if (currTable == &pSiteMgr->pSitesMgmtParams->dot11BG_sitesTables)
- {
- if (firstOFDMloc == len)
- {
- pBssid->NetworkTypeInUse = os802_11DS;
- } else {
- pBssid->NetworkTypeInUse = os802_11OFDM24;
- }
- } else {
- pBssid->NetworkTypeInUse = os802_11OFDM5;
- }
- pBssid->IELength = 0;
- /* copy fixed IEs from site entry */
- pFixedIes = (OS_802_11_FIXED_IEs*)&pBssid->IEs[pBssid->IELength];
- os_memoryCopy(pSiteMgr->hOs, (void *)pFixedIes->TimeStamp, &pSiteEntry->localTimeStamp, sizeof(pSiteEntry->localTimeStamp));
- pFixedIes->BeaconInterval = pSiteEntry->beaconInterval;
- pFixedIes->Capabilities = pSiteEntry->capabilities;
- pBssid->IELength += sizeof(OS_802_11_FIXED_IEs);
- pVarIes = (OS_802_11_VARIABLE_IEs*)&pBssid->IEs[pBssid->IELength];
- if (!allVarIes)
- { /* copy only several variable IEs */
- /* copy SSID */
- pVarIes->ElementID = SSID_IE_ID;
- pVarIes->Length = pSiteEntry->ssid.len;
- os_memoryCopy(pSiteMgr->hOs, (void *)pVarIes->data, (void *)pSiteEntry->ssid.ssidString, pSiteEntry->ssid.len);
- pBssid->IELength += (pVarIes->Length + 2);
-
- /* copy RATES */
- pVarIes = (OS_802_11_VARIABLE_IEs*)&pBssid->IEs[pBssid->IELength];
- pVarIes->ElementID = SUPPORTED_RATES_IE_ID;
- bitMapToNetworkStringRates(pSiteEntry->rateMask.supportedRateMask, pSiteEntry->rateMask.basicRateMask,
- (UINT8 *)pVarIes->data, &len, &firstOFDMloc);
- pVarIes->Length = len;
- pBssid->IELength += (pVarIes->Length + 2);
-
- /* copy FH */
- pVarIes = (OS_802_11_VARIABLE_IEs*)&pBssid->IEs[pBssid->IELength];
- pVarIes->ElementID = FH_PARAMETER_SET_IE_ID;
- pVarIes->Length = DOT11_FH_PARAMS_ELE_LEN;
- os_memoryCopy(pSiteMgr->hOs, (void *)pVarIes->data, &pSiteEntry->FHParams.dwellTime, sizeof(pSiteEntry->FHParams.dwellTime));
- os_memoryCopy(pSiteMgr->hOs, (void *)&pVarIes->data[2], &pSiteEntry->FHParams.hopSet, sizeof(pSiteEntry->FHParams.hopSet));
- os_memoryCopy(pSiteMgr->hOs, (void *)&pVarIes->data[3], &pSiteEntry->FHParams.hopPattern, sizeof(pSiteEntry->FHParams.hopPattern));
- pVarIes->data[4] = 1;
- pBssid->IELength += (pVarIes->Length + 2);
-
- /* copy DS */
- pVarIes = (OS_802_11_VARIABLE_IEs*)&pBssid->IEs[pBssid->IELength];
- pVarIes->ElementID = DS_PARAMETER_SET_IE_ID;
- pVarIes->Length = DOT11_DS_PARAMS_ELE_LEN;
- os_memoryCopy(pSiteMgr->hOs, (void *)pVarIes->data, &pSiteEntry->channel, DOT11_DS_PARAMS_ELE_LEN);
- pBssid->IELength += (pVarIes->Length + 2);
-
- /* copy RSN information elements */
- rsnIeLength = 0;
- for (index=0; index<MAX_RSN_IE && pSiteEntry->pRsnIe[index].hdr.eleLen>0; index++)
- {
- pVarIes = (OS_802_11_VARIABLE_IEs*)&pBssid->IEs[pBssid->IELength+rsnIeLength];
- pVarIes->ElementID = pSiteEntry->pRsnIe[index].hdr.eleId;
- pVarIes->Length = pSiteEntry->pRsnIe[index].hdr.eleLen;
- os_memoryCopy(pSiteMgr->hOs, (void *)pVarIes->data, (void *)pSiteEntry->pRsnIe[index].rsnIeData, pSiteEntry->pRsnIe[index].hdr.eleLen);
- rsnIeLength += pSiteEntry->pRsnIe[index].hdr.eleLen+2;
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("RSN IE ID=%d, Length=%x\n", pVarIes->ElementID, pVarIes->Length));
-
- WLAN_REPORT_HEX_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, (UINT8 *)pVarIes->data,pVarIes->Length);
- }
-
- pBssid->IELength += pSiteEntry->rsnIeLen;
-
- /* create information element for the WME/EXC.
- Note that the existence of these IEs should be considered as a fact that the site supports this feature.
- by alcel
- */
- if (pSiteEntry->WMESupported)
- {
- /* oui */
- UINT8 ouiWME[3] = { 0x50,0xf2,0x01};
- dot11_WME_PARAM_t *pWMEParams;
-
-
- /* fill in the general element parameters */
-
- pVarIes = (OS_802_11_VARIABLE_IEs*)&pBssid->IEs[pBssid->IELength];
- pVarIes->ElementID =DOT11_WME_ELE_ID;
- pVarIes->Length = DOT11_WME_PARAM_ELE_LEN;
-
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("WMESupported ID=%d, Length=%x\n", pVarIes->ElementID, pVarIes->Length));
-
- /* fill in the specific element parameters */
- pWMEParams = (dot11_WME_PARAM_t *) pVarIes;
- os_memoryCopy(pSiteMgr->hOs,(void *)pWMEParams->OUI,ouiWME,3);
- pWMEParams->OUIType = dot11_WME_OUI_TYPE;
- pWMEParams->OUISubType = dot11_WME_OUI_SUB_TYPE_PARAMS_IE;
- pWMEParams->version = dot11_WME_VERSION;
- pWMEParams->ACInfoField = dot11_WME_ACINFO_MASK & pSiteEntry->lastWMEParameterCnt;
-
- /* fill in the data */
-
- os_memoryCopy(pSiteMgr->hOs,&(pWMEParams->WME_ACParameteres),&(pSiteEntry->WMEParameters),sizeof(ACParameters_t));
-
-
- /* update the general length */
-
- pBssid->IELength += (pVarIes->Length + 2);
- }
- /* copy WPS information elements */
-
- if ((pSiteEntry->probeRecv) &&
- (pSiteEntry->siteType != SITE_PRIMARY))
- {
- pSiteEntryIeBuffer = pSiteEntry->probeRespBuffer;
- ieLength = pSiteEntry->probeRespLength;
- }
- else
- {
- pSiteEntryIeBuffer = pSiteEntry->beaconBuffer;
- ieLength = pSiteEntry->beaconLength;
- }
-
- parseIeBuffer(pSiteMgr->hOs, pSiteEntryIeBuffer, ieLength, DOT11_WPS_ELE_ID, &pDesiredIe, wpsOuiBuffer, DOT11_WPS_OUI_LEN);
- if (pDesiredIe)
- {
- pVarIes = (OS_802_11_VARIABLE_IEs*)&pBssid->IEs[pBssid->IELength];
- pVarIes->ElementID = DOT11_WPS_ELE_ID;
- pVarIes->Length = *((UINT8*)(pDesiredIe + 1));
- os_memoryCopy(pSiteMgr->hOs, (void *)pVarIes->data, (UINT8*)(pDesiredIe+2), pVarIes->Length);
- pBssid->IELength += (pVarIes->Length + 2);
- }
- }
- else
- { /* Copy all variable IEs */
-
- if ((pSiteEntry->probeRecv) &&
- (pSiteEntry->siteType != SITE_PRIMARY))
- {
- pSiteEntryIeBuffer = pSiteEntry->probeRespBuffer;
- ieLength = pSiteEntry->probeRespLength;
- }
- else
- {
- pSiteEntryIeBuffer = pSiteEntry->beaconBuffer;
- ieLength = pSiteEntry->beaconLength;
- }
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("Copy all variable IEs Length=%x\n", ieLength));
- WLAN_REPORT_HEX_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- pSiteEntryIeBuffer, ieLength);
- os_memoryCopy(pSiteMgr->hOs, pVarIes, pSiteEntryIeBuffer, ieLength);
- pBssid->IELength += ieLength;
- }
- pBssid->Length = sizeof(OS_802_11_BSSID_EX) + pBssid->IELength - 1;
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("BSSID MAC = %x-%x-%x-%x-%x-%x\n",
- pBssid->MacAddress[0], pBssid->MacAddress[1], pBssid->MacAddress[2],
- pBssid->MacAddress[3], pBssid->MacAddress[4], pBssid->MacAddress[5]));
- #ifdef DBG_BSSIS_NAME_PRINT
- os_memoryCopy(pSiteMgr->hOs, tempName, &pBssid->Ssid.Ssid[0], pBssid->Ssid.SsidLength);
- tempName[pBssid->Ssid.SsidLength] ='\0';
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("BSSID NAME = %s\n",tempName)) ;
- #endif
- /* make sure length is 4 bytes aligned */
- if (pBssid->Length % 4)
- {
- pBssid->Length += (4 - (pBssid->Length % 4));
- }
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("BSSID length after alignment = %d\n", pBssid->Length));
- pData += pBssid->Length;
- length += pBssid->Length;
- i++;
- }
- bssidList->NumberOfItems += i;
- if(pSiteMgr->pDesiredParams->siteMgrDesiredDot11Mode == DOT11_DUAL_MODE)
- {
- /* change site table */
- if(currTable == &pSiteMgr->pSitesMgmtParams->dot11BG_sitesTables)
- currTable = (siteTablesParams_t *)&pSiteMgr->pSitesMgmtParams->dot11A_sitesTables;
- else
- currTable = &pSiteMgr->pSitesMgmtParams->dot11BG_sitesTables;
- }
- else
- break;
- }
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("Exiting getBssidList, site count = %i, length = %d, pData = 0x%X\n",
- bssidList->NumberOfItems, length, (UINT32)pData));
- *pLength = length;
- return OK;
- }
- /***********************************************************************
- * getPrimaryBssid
- ***********************************************************************
- DESCRIPTION: Called by the OS abstraction layer in order to get the BSSID list from the site table
- INPUT: pSiteMgr - site mgr handle.
- OUTPUT: bssidList - BSSID list pointer
- RETURN:
- ************************************************************************/
- static TI_STATUS getPrimaryBssid(siteMgr_t *pSiteMgr, OS_802_11_BSSID_EX *primaryBssid, UINT32 *pLength)
- {
- siteEntry_t *pPrimarySite = pSiteMgr->pSitesMgmtParams->pPrimarySite;
- UINT32 len, firstOFDMloc = 0;
- OS_802_11_FIXED_IEs *pFixedIes;
- OS_802_11_VARIABLE_IEs *pVarIes;
- UINT32 length;
- if ((primaryBssid==NULL) || (pLength==NULL))
- {
- *pLength = 0;
- WLAN_REPORT_ERROR(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("getPrimaryBssid, one of the ptr is NULL, primaryBssid=%p,pLength=%p \n",
- primaryBssid, pLength));
- return NOK;
- }
- if (pPrimarySite==NULL)
- {
- *pLength = 0;
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("getPrimaryBssid, pPrimarySite is NULL \n"));
- return NOK;
- }
- length = pPrimarySite->beaconLength + sizeof(OS_802_11_BSSID_EX) + sizeof(OS_802_11_FIXED_IEs);
- if (length > *pLength)
- {
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("getPrimaryBssid, insufficient length, required length=%d, pLength=%d \n",
- length, *pLength));
- *pLength = length;
- return NOK;
- }
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("Entering getPrimaryBssid, length = %d\n", *pLength));
- primaryBssid->Length = length;
- /* MacAddress */
- os_memoryCopy(pSiteMgr->hOs, (void *)primaryBssid->MacAddress, (void *)&(pPrimarySite->bssid.addr), MAC_ADDR_LEN);
-
- /* Capabilities */
- primaryBssid->Union.Capabilities = pPrimarySite->capabilities;
- /* SSID */
- os_memoryZero(pSiteMgr->hOs, &(primaryBssid->Ssid.Ssid), MAX_SSID_LEN);
- if (pPrimarySite->ssid.len > MAX_SSID_LEN)
- {
- pPrimarySite->ssid.len = MAX_SSID_LEN;
- }
- os_memoryCopy(pSiteMgr->hOs, (void *)primaryBssid->Ssid.Ssid, (void *)&(pPrimarySite->ssid.ssidString), pPrimarySite->ssid.len);
- primaryBssid->Ssid.SsidLength = pPrimarySite->ssid.len;
- /* privacy */
- primaryBssid->Privacy = pPrimarySite->privacy;
- /* RSSI */
- primaryBssid->Rssi = pPrimarySite->rssi;
- /* NetworkTypeInUse & SupportedRates */
- /* SupportedRates */
- os_memoryZero(pSiteMgr->hOs, (void *)primaryBssid->SupportedRates, sizeof(OS_802_11_RATES_EX));
- bitMapToNetworkStringRates(pPrimarySite->rateMask.supportedRateMask,
- pPrimarySite->rateMask.basicRateMask,
- (UINT8 *)primaryBssid->SupportedRates,
- &len, &firstOFDMloc);
- /* set network type acording to band and rates */
- if (pPrimarySite->channel <= SITE_MGR_CHANNEL_B_G_MAX)
- {
- if (firstOFDMloc == len)
- {
- primaryBssid->NetworkTypeInUse = os802_11DS;
- } else {
- primaryBssid->NetworkTypeInUse = os802_11OFDM24;
- }
- } else {
- primaryBssid->NetworkTypeInUse = os802_11OFDM5;
- }
- /* Configuration */
- primaryBssid->Configuration.Length = sizeof(OS_802_11_CONFIGURATION);
- primaryBssid->Configuration.BeaconPeriod = pPrimarySite->beaconInterval;
- primaryBssid->Configuration.ATIMWindow = pPrimarySite->atimWindow;
- primaryBssid->Configuration.Union.channel = Chan2Freq(pPrimarySite->channel);
- primaryBssid->Configuration.FHConfig.Length = sizeof(OS_802_11_CONFIGURATION_FH);
- primaryBssid->Configuration.FHConfig.DwellTime = pPrimarySite->FHParams.dwellTime;
- primaryBssid->Configuration.FHConfig.HopPattern = pPrimarySite->FHParams.hopPattern;
- primaryBssid->Configuration.FHConfig.HopSet = pPrimarySite->FHParams.hopSet;
- /* InfrastructureMode */
- if (pPrimarySite->bssType == BSS_INDEPENDENT)
- primaryBssid->InfrastructureMode = os802_11IBSS;
- else
- primaryBssid->InfrastructureMode = os802_11Infrastructure;
- primaryBssid->IELength = 0;
- /* copy fixed IEs from site entry */
- pFixedIes = (OS_802_11_FIXED_IEs*)&primaryBssid->IEs[primaryBssid->IELength];
- os_memoryCopy(pSiteMgr->hOs, (void *)pFixedIes->TimeStamp, (void *)&pPrimarySite->localTimeStamp, sizeof(pPrimarySite->localTimeStamp));
- pFixedIes->BeaconInterval = pPrimarySite->beaconInterval;
- pFixedIes->Capabilities = pPrimarySite->capabilities;
- primaryBssid->IELength += sizeof(OS_802_11_FIXED_IEs);
- pVarIes = (OS_802_11_VARIABLE_IEs*)&primaryBssid->IEs[primaryBssid->IELength];
- /* Coppy all variable IEs */
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("Coppy all variable beaconLength=%d, IELength=%d\n",
- pPrimarySite->beaconLength, primaryBssid->IELength));
- WLAN_REPORT_HEX_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- pPrimarySite->beaconBuffer, pPrimarySite->beaconLength);
- os_memoryCopy(pSiteMgr->hOs, pVarIes, pPrimarySite->beaconBuffer, pPrimarySite->beaconLength);
- primaryBssid->IELength += pPrimarySite->beaconLength;
- primaryBssid->Length = sizeof(OS_802_11_BSSID_EX) + primaryBssid->IELength - 1;
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("BSSID MAC = %x-%x-%x-%x-%x-%x\n",
- primaryBssid->MacAddress[0], primaryBssid->MacAddress[1], primaryBssid->MacAddress[2],
- primaryBssid->MacAddress[3], primaryBssid->MacAddress[4], primaryBssid->MacAddress[5]));
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("primaryBssid is\n"));
- WLAN_REPORT_HEX_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- (UINT8*)primaryBssid, primaryBssid->Length);
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("Exiting getBssidList, length =%d, IELength=%d \n",
- primaryBssid->Length,
- primaryBssid->IELength));
- *pLength = primaryBssid->Length;
- return OK;
- }
- /***********************************************************************
- * siteMgr_printPrimarySiteDesc
- ***********************************************************************
- DESCRIPTION: Called by the OS abstraction layer in order to get the primary site description
- INPUT: pSiteMgr - site mgr handle.
- supplyExtendedInfo - If OS_802_11_BSSID_EX structure should be used (extended info)
- (Assuming that if this function is called with TRUE, enough memory was allocated to hold the extended info)
- OUTPUT: pPrimarySiteDesc - Primary site description pointer
- RETURN:
- ************************************************************************/
- void siteMgr_printPrimarySiteDesc(TI_HANDLE hSiteMgr )
- {
- siteMgr_t *pSiteMgr = (siteMgr_t*) hSiteMgr;
- #ifdef REPORT_LOG
- siteEntry_t *pPrimarySite = pSiteMgr->pSitesMgmtParams->pPrimarySite;
- macAddress_t *bssid = &pPrimarySite->bssid;
- #endif
- WLAN_REPORT_INFORMATION( pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("-- SSID = %s \n",pPrimarySite->ssid.ssidString) );
- WLAN_REPORT_INFORMATION( pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("-- BSSID = %02X-%02X-%02X-%02X-%02X-%02X\n",
- bssid->addr[0], bssid->addr[1], bssid->addr[2],
- bssid->addr[3], bssid->addr[4], bssid->addr[5]) );
- }
- /***********************************************************************
- * getPrimarySiteDesc
- ***********************************************************************
- DESCRIPTION: Called by the OS abstraction layer in order to get the primary site description
- INPUT: pSiteMgr - site mgr handle.
- supplyExtendedInfo - If OS_802_11_BSSID_EX structure should be used (extended info)
- (Assuming that if this function is called with TRUE, enough memory was allocated to hold the extended info)
- OUTPUT: pPrimarySiteDesc - Primary site description pointer
- RETURN:
- ************************************************************************/
- static void getPrimarySiteDesc(siteMgr_t *pSiteMgr, OS_802_11_BSSID *pPrimarySiteDesc, BOOL supplyExtendedInfo)
- {
- siteEntry_t *pPrimarySite = pSiteMgr->pSitesMgmtParams->pPrimarySite;
- OS_802_11_BSSID_EX *pExPrimarySiteDesc = (OS_802_11_BSSID_EX *) pPrimarySiteDesc;
- UINT32 len, firstOFDMloc = 0;
- OS_802_11_FIXED_IEs *pFixedIes;
- OS_802_11_VARIABLE_IEs *pVarIes;
- UINT8 rsnIeLength,index;
- OS_802_11_RATES_EX SupportedRates;
- if (pPrimarySiteDesc == NULL)
- {
- return;
- }
- if (pPrimarySite == NULL)
- {
- os_memoryZero(pSiteMgr->hOs, pPrimarySiteDesc, sizeof(OS_802_11_BSSID));
- return;
- }
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("getPrimarySiteDesc - enter\n"));
-
- /* If an "extended" request has been made - update the length accordingly */
- if (supplyExtendedInfo == FALSE)
- pPrimarySiteDesc->Length = sizeof(OS_802_11_BSSID);
- else
- pPrimarySiteDesc->Length = sizeof(OS_802_11_BSSID_EX);
- /* MacAddress */
- os_memoryCopy(pSiteMgr->hOs, (void *)pPrimarySiteDesc->MacAddress, (void *)&(pPrimarySite->bssid.addr), MAC_ADDR_LEN);
- /* Capabilities */
- pPrimarySiteDesc->Union.Capabilities = pPrimarySite->capabilities;
- /* SSID */
- os_memoryCopy(pSiteMgr->hOs, (void *)&(pPrimarySiteDesc->Ssid.Ssid[0]), (void *)&(pPrimarySite->ssid.ssidString[0]), pPrimarySite->ssid.len);
- pPrimarySiteDesc->Ssid.SsidLength = pPrimarySite->ssid.len;
- /* privacy */
- pPrimarySiteDesc->Privacy = pPrimarySite->privacy;
- /* RSSI */
- pPrimarySiteDesc->Rssi = pPrimarySite->rssi;
- bitMapToNetworkStringRates(pPrimarySite->rateMask.supportedRateMask,
- pPrimarySite->rateMask.basicRateMask,
- &SupportedRates[0],
- &len, &firstOFDMloc);
- /* set network type acording to band and rates */
- if (pPrimarySite->channel <= SITE_MGR_CHANNEL_B_G_MAX)
- {
- if (firstOFDMloc == len)
- {
- pPrimarySiteDesc->NetworkTypeInUse = os802_11DS;
- } else {
- pPrimarySiteDesc->NetworkTypeInUse = os802_11OFDM24;
- }
- } else {
- pPrimarySiteDesc->NetworkTypeInUse = os802_11OFDM5;
- }
- pPrimarySiteDesc->Configuration.Length = sizeof(OS_802_11_CONFIGURATION);
- pPrimarySiteDesc->Configuration.BeaconPeriod = pPrimarySite->beaconInterval;
- pPrimarySiteDesc->Configuration.ATIMWindow = pPrimarySite->atimWindow;
- pPrimarySiteDesc->Configuration.Union.channel = pPrimarySite->channel;
- pPrimarySiteDesc->Configuration.FHConfig.Length = sizeof(OS_802_11_CONFIGURATION_FH);
- pPrimarySiteDesc->Configuration.FHConfig.DwellTime = pPrimarySite->FHParams.dwellTime;
- pPrimarySiteDesc->Configuration.FHConfig.HopPattern = pPrimarySite->FHParams.hopPattern;
- pPrimarySiteDesc->Configuration.FHConfig.HopSet = pPrimarySite->FHParams.hopSet;
- if (pPrimarySite->bssType == BSS_INDEPENDENT)
- pPrimarySiteDesc->InfrastructureMode = os802_11IBSS;
- else
- pPrimarySiteDesc->InfrastructureMode = os802_11Infrastructure;
- /* SupportedRates */
- if (supplyExtendedInfo == FALSE)
- os_memoryZero(pSiteMgr->hOs, (void *)pPrimarySiteDesc->SupportedRates, sizeof(OS_802_11_RATES));
- else
- os_memoryZero(pSiteMgr->hOs, (void *)pPrimarySiteDesc->SupportedRates, sizeof(OS_802_11_RATES_EX));
- if (supplyExtendedInfo == FALSE)
- os_memoryCopy(pSiteMgr->hOs, (void *)pPrimarySiteDesc->SupportedRates, (void *)SupportedRates, sizeof(OS_802_11_RATES));
- else
- os_memoryCopy(pSiteMgr->hOs, (void *)pPrimarySiteDesc->SupportedRates, (void *)SupportedRates, sizeof(OS_802_11_RATES_EX));
-
- if (supplyExtendedInfo == TRUE)
- {
- pExPrimarySiteDesc->IELength = 0;
- /* copy fixed IEs from site entry */
- pFixedIes = (OS_802_11_FIXED_IEs*)&pExPrimarySiteDesc->IEs[pExPrimarySiteDesc->IELength];
- os_memoryCopy(pSiteMgr->hOs, (void *)pFixedIes->TimeStamp, (void *)&pPrimarySite->localTimeStamp, sizeof(pPrimarySite->localTimeStamp));
- pFixedIes->BeaconInterval = pPrimarySite->beaconInterval;
- pFixedIes->Capabilities = pPrimarySite->capabilities;
- pExPrimarySiteDesc->IELength += sizeof(OS_802_11_FIXED_IEs);
- /* copy variable IEs */
- /* copy SSID */
- pVarIes = (OS_802_11_VARIABLE_IEs*)&pExPrimarySiteDesc->IEs[pExPrimarySiteDesc->IELength];
- pVarIes->ElementID = SSID_IE_ID;
- pVarIes->Length = pPrimarySite->ssid.len;
- os_memoryCopy(pSiteMgr->hOs, (void *)pVarIes->data, (void *)pPrimarySite->ssid.ssidString, pPrimarySite->ssid.len);
- pExPrimarySiteDesc->IELength += (pVarIes->Length + 2);
- /* copy RATES */
-
- pVarIes = (OS_802_11_VARIABLE_IEs*)&pExPrimarySiteDesc->IEs[pExPrimarySiteDesc->IELength];
- pVarIes->ElementID = SUPPORTED_RATES_IE_ID;
- bitMapToNetworkStringRates(pPrimarySite->rateMask.supportedRateMask, pPrimarySite->rateMask.basicRateMask,
- (UINT8 *)pVarIes->data, &len, &firstOFDMloc);
- pVarIes->Length = len;
- pExPrimarySiteDesc->IELength += (pVarIes->Length + 2);
- /* copy FH */
- pVarIes = (OS_802_11_VARIABLE_IEs*)&pExPrimarySiteDesc->IEs[pExPrimarySiteDesc->IELength];
- pVarIes->ElementID = FH_PARAMETER_SET_IE_ID;
- pVarIes->Length = DOT11_FH_PARAMS_ELE_LEN;
- os_memoryCopy(pSiteMgr->hOs, (void *)pVarIes->data, (void *)&pPrimarySite->FHParams.dwellTime, sizeof(pPrimarySite->FHParams.dwellTime));
- os_memoryCopy(pSiteMgr->hOs, (void *)&pVarIes->data[2], (void *)&pPrimarySite->FHParams.hopSet, sizeof(pPrimarySite->FHParams.hopSet));
- os_memoryCopy(pSiteMgr->hOs, (void *)&pVarIes->data[3], (void *)&pPrimarySite->FHParams.hopPattern, sizeof(pPrimarySite->FHParams.hopPattern));
- pVarIes->data[4] = 1;
- pExPrimarySiteDesc->IELength += (pVarIes->Length + 2);
- /* copy DS */
- pVarIes = (OS_802_11_VARIABLE_IEs*)&pExPrimarySiteDesc->IEs[pExPrimarySiteDesc->IELength];
- pVarIes->ElementID = DS_PARAMETER_SET_IE_ID;
- pVarIes->Length = DOT11_DS_PARAMS_ELE_LEN;
- os_memoryCopy(pSiteMgr->hOs, (void *)pVarIes->data, (void *)&pPrimarySite->channel, DOT11_DS_PARAMS_ELE_LEN);
- pExPrimarySiteDesc->IELength += (pVarIes->Length + 2);
- /* copy RSN information elements */
- rsnIeLength = 0;
- for (index=0; index<MAX_RSN_IE && pPrimarySite->pRsnIe[index].hdr.eleLen>0; index++)
- {
- pVarIes = (OS_802_11_VARIABLE_IEs*)&pExPrimarySiteDesc->IEs[pExPrimarySiteDesc->IELength+rsnIeLength];
- pVarIes->ElementID = pPrimarySite->pRsnIe[index].hdr.eleId;
- pVarIes->Length = pPrimarySite->pRsnIe[index].hdr.eleLen;
- os_memoryCopy(pSiteMgr->hOs, (void *)pVarIes->data, (void *)pPrimarySite->pRsnIe[index].rsnIeData, pPrimarySite->pRsnIe[index].hdr.eleLen);
- rsnIeLength += pPrimarySite->pRsnIe[index].hdr.eleLen+2;
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("RSN IE ID=%d, Length=%x\n", pVarIes->ElementID, pVarIes->Length));
- WLAN_REPORT_HEX_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, (UINT8 *)pVarIes->data,pVarIes->Length);
- }
- pExPrimarySiteDesc->IELength += pPrimarySite->rsnIeLen;
- pExPrimarySiteDesc->Length = sizeof(OS_802_11_BSSID_EX) + pExPrimarySiteDesc->IELength - 1;
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("BSSID MAC = %x-%x-%x-%x-%x-%x\n",
- pExPrimarySiteDesc->MacAddress[0], pExPrimarySiteDesc->MacAddress[1], pExPrimarySiteDesc->MacAddress[2],
- pExPrimarySiteDesc->MacAddress[3], pExPrimarySiteDesc->MacAddress[4], pExPrimarySiteDesc->MacAddress[5]));
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("pExPrimarySiteDesc length before alignment = %d\n", pExPrimarySiteDesc->Length));
- /* make sure length is 4 bytes aligned */
- if (pExPrimarySiteDesc->Length % 4)
- {
- pExPrimarySiteDesc->Length += (4 - (pExPrimarySiteDesc->Length % 4));
- }
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("pExPrimarySiteDesc length after alignment = %d\n", pExPrimarySiteDesc->Length));
- }
- }
- /***********************************************************************
- * translateRateMaskToValue
- ***********************************************************************
- DESCRIPTION: Called by the function 'siteMgr_config()' in order to translate the rate mask read
- from registry to rate value
- INPUT: pSiteMgr - site mgr handle.
- rateMask - Rate mask
- OUTPUT: The rate after the translation
- RETURN:
- ************************************************************************/
- static rate_e translateRateMaskToValue(siteMgr_t *pSiteMgr, UINT32 rateMask)
- {
- if (rateMask & DRV_RATE_MASK_54_OFDM)
- return DRV_RATE_54M;
- if (rateMask & DRV_RATE_MASK_48_OFDM)
- return DRV_RATE_48M;
- if (rateMask & DRV_RATE_MASK_36_OFDM)
- return DRV_RATE_36M;
- if (rateMask & DRV_RATE_MASK_24_OFDM)
- return DRV_RATE_24M;
- if (rateMask & DRV_RATE_MASK_22_PBCC)
- return DRV_RATE_22M;
- if (rateMask & DRV_RATE_MASK_18_OFDM)
- return DRV_RATE_18M;
- if (rateMask & DRV_RATE_MASK_12_OFDM)
- return DRV_RATE_12M;
- if (rateMask & DRV_RATE_MASK_11_CCK)
- return DRV_RATE_11M;
- if (rateMask & DRV_RATE_MASK_9_OFDM)
- return DRV_RATE_9M;
- if (rateMask & DRV_RATE_MASK_6_OFDM)
- return DRV_RATE_6M;
- if (rateMask & DRV_RATE_MASK_5_5_CCK)
- return DRV_RATE_5_5M;
- if (rateMask & DRV_RATE_MASK_2_BARKER)
- return DRV_RATE_2M;
- if (rateMask & DRV_RATE_MASK_1_BARKER)
- return DRV_RATE_1M;
- WLAN_REPORT_WARNING(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("Translate rate mask to value, mask is 0x%X\n", rateMask));
- if(pSiteMgr->siteMgrOperationalMode != DOT11_A_MODE)
- return DRV_RATE_1M;
- else
- return DRV_RATE_6M;
- }
- /***********************************************************************
- * getSupportedRateSet
- ***********************************************************************
- DESCRIPTION: Called by the function 'siteMgr_getParam()' in order to get the supported rate set
- Build an array of network rates based on the max active & max basic rates
- INPUT: pSiteMgr - site mgr handle.
- OUTPUT: pRatesSet - The array built
- RETURN:
- ************************************************************************/
- static void getSupportedRateSet(siteMgr_t *pSiteMgr, rates_t *pRatesSet)
- {
- UINT32 dontCareParam;
- UINT32 len = 0;
- bitMapToNetworkStringRates(pSiteMgr->pDesiredParams->siteMgrRegstrySuppRateMask,
- pSiteMgr->pDesiredParams->siteMgrRegstryBasicRateMask,
- (UINT8 *)pRatesSet->ratesString, &len, &dontCareParam);
- pRatesSet->len = (UINT8) len;
- }
- /***********************************************************************
- * setSupportedRateSet
- ***********************************************************************
- DESCRIPTION: Called by the function 'siteMgr_setParam()' in order to set the supported rate set
- Go over the input array and set the max active & max basic rates. (after translation from network
- rates to host rates ofcourse)
- If max basic rate is bigger than the mac active one, print an error.
- If the basic or active rate are different than the ones already stored by the site manager,
- it returns RE_SCAN_NEEDED
- INPUT: pSiteMgr - site mgr handle.
- pRatesSet - The rates array received
- OUTPUT:
- RETURN: RE_SCAN_NEEDED if re scan is needed, OK on success
- ************************************************************************/
- static TI_STATUS setSupportedRateSet(siteMgr_t *pSiteMgr, rates_t *pRatesSet)
- {
- UINT8 i,j, drvRate;
- rate_e maxActiveRate = (rate_e)0, maxBasicRate = (rate_e)0;
- UINT32 suppBitMap, basicBitMap;
- static rate_e basicRates_G[] = {DRV_RATE_1M,DRV_RATE_2M,DRV_RATE_5_5M,DRV_RATE_11M};
- static rate_e basicRates_A[] = {DRV_RATE_6M,DRV_RATE_12M,DRV_RATE_24M};
- rate_e* currentBasicRates;
- UINT32 currentBasicRatesLength;
- #ifndef NET_BASIC_MASK
- #define NET_BASIC_MASK 0x80 /* defined in common/src/utils/utils.c */
- #endif
- if(pSiteMgr->siteMgrOperationalMode == DOT11_A_MODE)
- {
- currentBasicRates = &basicRates_A[0];
- currentBasicRatesLength = sizeof(basicRates_A) / sizeof(basicRates_A[0]);
- }
- else
- {
- currentBasicRates = &basicRates_G[0];
- currentBasicRatesLength = sizeof(basicRates_G) / sizeof(basicRates_G[0]);
- }
-
- /* Basic rates must be supported. If one of 1M,2M,5.5M,11M is not supported fail.*/
- for (j=0;j < currentBasicRatesLength;j++)
- {
- for (i = 0; i < pRatesSet->len; i++)
- {
- drvRate = utilityToHostRate(pRatesSet->ratesString[i]);
- if ((drvRate & ( NET_BASIC_MASK-1)) == currentBasicRates[j])
- break;
- }
- /* not all the basic rates are supported! Failure*/
- if (i == pRatesSet->len)
- {
- WLAN_REPORT_ERROR(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("Rates set must contain the basic set! Failing\n"));
- return PARAM_VALUE_NOT_VALID;
- }
- }
-
- for (i = 0; i < pRatesSet->len; i++)
- {
- drvRate = utilityToHostRate(pRatesSet->ratesString[i]);
- if(pSiteMgr->siteMgrOperationalMode == DOT11_A_MODE)
- {
- if(drvRate < DRV_RATE_6M)
- {
- WLAN_REPORT_ERROR(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("Notice, the driver configured in 11a mode, but CCK rate appears\n"));
- return PARAM_VALUE_NOT_VALID;
- }
- }
- else if(pSiteMgr->siteMgrOperationalMode == DOT11_B_MODE)
- {
- if(drvRate >= DRV_RATE_6M)
- {
- WLAN_REPORT_ERROR(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("Notice, the driver configured in 11b mode, but OFDM rate appears\n"));
- return PARAM_VALUE_NOT_VALID;
- }
- }
- maxActiveRate = MAX((rate_e)drvRate, maxActiveRate);
- }
- for (i = 0; i < pRatesSet->len; i++)
- {
- if (IS_BASIC_RATE(pRatesSet->ratesString[i]))
- maxBasicRate = MAX(utilityToHostRate(pRatesSet->ratesString[i]), maxBasicRate);
- }
- /* If the basic rate is bigger than the supported one, we print an error */
- if (pSiteMgr->pDesiredParams->siteMgrDesiredRatePair.maxBasic > pSiteMgr->pDesiredParams->siteMgrDesiredRatePair.maxActive)
- {
- WLAN_REPORT_ERROR(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("Notice, the rates configuration is invalid, basic rate is bigger than supported, Max Basic: %d Max Supported: %d\n", pSiteMgr->pDesiredParams->siteMgrDesiredRatePair.maxBasic, pSiteMgr->pDesiredParams->siteMgrDesiredRatePair.maxActive));
- return PARAM_VALUE_NOT_VALID;
- }
- pSiteMgr->pDesiredParams->siteMgrDesiredRatePair.maxActive = maxActiveRate;
- pSiteMgr->pDesiredParams->siteMgrDesiredRatePair.maxBasic = maxBasicRate;
-
- /* configure desired modulation */
- if(maxActiveRate == DRV_RATE_22M)
- pSiteMgr->pDesiredParams->siteMgrDesiredModulationType = DRV_MODULATION_PBCC;
- else if(maxActiveRate < DRV_RATE_22M)
- pSiteMgr->pDesiredParams->siteMgrDesiredModulationType = DRV_MODULATION_CCK;
- else
- pSiteMgr->pDesiredParams->siteMgrDesiredModulationType = DRV_MODULATION_OFDM;
- networkStringToBitMapSuppRates(&suppBitMap,
- (UINT8 *)pRatesSet->ratesString,
- pRatesSet->len);
- networkStringToBitMapBasicRates(&basicBitMap,
- (UINT8 *)pRatesSet->ratesString,
- pRatesSet->len);
- if((pSiteMgr->pDesiredParams->siteMgrRegstryBasicRateMask != basicBitMap) ||
- (pSiteMgr->pDesiredParams->siteMgrRegstrySuppRateMask != suppBitMap))
- {
- pSiteMgr->pDesiredParams->siteMgrCurrentDesiredRateMask.supportedRateMask = suppBitMap;
- pSiteMgr->pDesiredParams->siteMgrCurrentDesiredRateMask.basicRateMask = basicBitMap;
- pSiteMgr->pDesiredParams->siteMgrRegstryBasicRateMask = basicBitMap;
- pSiteMgr->pDesiredParams->siteMgrRegstrySuppRateMask = suppBitMap;
- /* Initialize Mutual Rates Matching */
- pSiteMgr->pDesiredParams->siteMgrMatchedBasicRateMask = pSiteMgr->pDesiredParams->siteMgrCurrentDesiredRateMask.basicRateMask;
- pSiteMgr->pDesiredParams->siteMgrMatchedSuppRateMask = pSiteMgr->pDesiredParams->siteMgrCurrentDesiredRateMask.supportedRateMask;
- pSiteMgr->pDesiredParams->siteMgrMatchedMaxBasicRate = getMaxRatefromBitmap(pSiteMgr->pDesiredParams->siteMgrMatchedBasicRateMask);
- pSiteMgr->pDesiredParams->siteMgrMatchedMaxActiveRate = getMaxRatefromBitmap(pSiteMgr->pDesiredParams->siteMgrMatchedSuppRateMask);
- return RE_SCAN_NEEDED;
- }
- return OK;
- }
- /***********************************************************************
- * pbccAlgorithm
- ***********************************************************************
- DESCRIPTION: Called by the following functions:
- - systemConfig(), in the system configuration phase after the selection
- - siteMgr_updateSite(), in a case of a primary site update & if a PBCC algorithm
- is needed to be performed
- Performs the PBCC algorithm
- INPUT: hSiteMgr - site mgr handle.
- OUTPUT:
- RETURN: OK on always
- ************************************************************************/
- TI_STATUS pbccAlgorithm(TI_HANDLE hSiteMgr)
- {
- siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr;
- paramInfo_t param;
- siteEntry_t *pPrimarySite = pSiteMgr->pSitesMgmtParams->pPrimarySite;
- UINT32 bitMap = 0;
- BOOL desiredTxRateSupported = FALSE;
- UINT32 supportedRateMask ;
- /* First set the data modulation. */
- param.paramType = CTRL_DATA_CURRENT_MODULATION_TYPE_PARAM; /* Current Modulation Type */
- param.content.ctrlDataCurrentModulationType = pSiteMgr->currentDataModulation;
- ctrlData_setParam(pSiteMgr->hCtrlData, ¶m);
- if (pPrimarySite->channel == SPECIAL_BG_CHANNEL)
- supportedRateMask = (getSupportedRateMaskForSpecialBGchannel() & pSiteMgr->pDesiredParams->siteMgrMatchedSuppRateMask) ;
- else
- supportedRateMask = pSiteMgr->pDesiredParams->siteMgrMatchedSuppRateMask ;
- validateDesiredTxRate(pSiteMgr->pDesiredParams->siteMgrCurrentDesiredTxRate,
- pSiteMgr->currentDataModulation,
- supportedRateMask,
- &bitMap,
- &desiredTxRateSupported);
- if(desiredTxRateSupported == FALSE)
- {
- WLAN_REPORT_ERROR(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("Notice, the rates configuration is invalid, desired tx rate is not supported => switched to auto"));
- pSiteMgr->pDesiredParams->siteMgrCurrentDesiredTxRate = DRV_RATE_AUTO;
- }
- param.paramType = CTRL_DATA_CURRENT_SUPPORTED_RATE_MASK_PARAM;
- param.content.ctrlDataCurrentRateMask = supportedRateMask;
- /* clear the 22Mbps bit in case the PBCC is not allowed */
- if(pSiteMgr->currentDataModulation != DRV_MODULATION_PBCC &&
- pSiteMgr->currentDataModulation != DRV_MODULATION_OFDM)
- param.content.ctrlDataCurrentRateMask &= ~DRV_RATE_MASK_22_PBCC;
- ctrlData_setParam(pSiteMgr->hCtrlData, ¶m);
- param.paramType = CTRL_DATA_CURRENT_ACTIVE_RATE_PARAM;
- param.content.ctrlDataCurrentActiveRate = pSiteMgr->pDesiredParams->siteMgrCurrentDesiredTxRate;
- ctrlData_setParam(pSiteMgr->hCtrlData, ¶m);
- /*
- * NOTE: THIS MUST BE AFTER SETTING PREAMBLE TYPE
- */
-
- if (pSiteMgr->pDesiredParams->siteMgrCurrentDesiredTxRate == DRV_RATE_AUTO)
- {
- param.paramType = CTRL_DATA_RATE_CONTROL_ENABLE_PARAM;
- param.content.ctrlDataRateControlEnable = TRUE;
- ctrlData_setParam(pSiteMgr->hCtrlData, ¶m);
- }
- else
- {
- param.paramType = CTRL_DATA_RATE_CONTROL_ENABLE_PARAM;
- param.content.ctrlDataRateControlEnable = FALSE;
- ctrlData_setParam(pSiteMgr->hCtrlData, ¶m);
- }
- return OK;
- }
- /***********************************************************************
- * validateDesiredTxRate
- ***********************************************************************
- DESCRIPTION: Called by the following functions:
- - pbccAlgorithm()
- INPUT: desiredTxRate - configured desired tx rate.
- desiredModulation - configured desired tx modulation.
- suppRates - rates, supported by both STA and primary site.
- OUTPUT: bitMap - rates bit map to be set to the ctrlData module
- txDesiredRateSupported - indication whether the desired tx rate supported
- by both STA and the primary site.
- RETURN: OK on always
- ************************************************************************/
- void validateDesiredTxRate(rate_e desiredTxRate, modulationType_e desiredModulation,
- UINT32 suppRates, UINT32 *bitMap, BOOL *txDesiredRateSupported)
- {
- UINT32 maskTable[DRV_RATE_MAX+1] =
- {DRV_RATE_MASK_AUTO,
- DRV_RATE_MASK_1_BARKER,
- DRV_RATE_MASK_2_BARKER,
- DRV_RATE_MASK_5_5_CCK,
- DRV_RATE_MASK_11_CCK,
- DRV_RATE_MASK_22_PBCC
- ,DRV_RATE_MASK_6_OFDM,
- DRV_RATE_MASK_9_OFDM,
- DRV_RATE_MASK_12_OFDM,
- DRV_RATE_MASK_18_OFDM,
- DRV_RATE_MASK_24_OFDM,
- DRV_RATE_MASK_36_OFDM,
- DRV_RATE_MASK_48_OFDM,
- DRV_RATE_MASK_54_OFDM
- };
- if(desiredModulation != DRV_MODULATION_PBCC)
- {
- if(desiredTxRate == DRV_RATE_22M)
- *bitMap = DRV_RATE_MASK_11_CCK;
- else
- *bitMap = maskTable[desiredTxRate];
- }
- else
- *bitMap = maskTable[desiredTxRate];
- if((suppRates & maskTable[desiredTxRate]) || (desiredTxRate == DRV_RATE_AUTO))
- *txDesiredRateSupported = TRUE;
- else
- *txDesiredRateSupported = FALSE;
- }
- /***********************************************************************
- * siteMgr_assocReport
- ***********************************************************************
- DESCRIPTION: Called by the following functions:
- - assoc_recv()
- INPUT: hSiteMgr - siteMgr handle.
- capabilities - assoc rsp capabilities field.
- bCiscoAP - whether we are connected to a Cisco AP. Used for Tx Power Control adjustment
- OUTPUT:
- RETURN: OK on always
- ************************************************************************/
- TI_STATUS siteMgr_assocReport(TI_HANDLE hSiteMgr, UINT16 capabilities, BOOL bCiscoAP)
- {
- siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr;
- siteEntry_t *pPrimarySite = pSiteMgr->pSitesMgmtParams->pPrimarySite;
- /* handle AP's preamble capability */
- pPrimarySite->preambleAssRspCap = ((capabilities >> CAP_PREAMBLE_SHIFT) & CAP_PREAMBLE_MASK) ? PREAMBLE_SHORT : PREAMBLE_LONG;
- /*
- * Enable/Disable the ATx Power Control adjustment.
- * When we are connected to Cisco AP - TX Power Control adjustment is disabled.
- */
- pSiteMgr->bTempTxPowerEnabled = ( !bCiscoAP ) && ( pSiteMgr->pDesiredParams->TxPowerControlOn );
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("%s: Tx Power Control adjustment is %d\n",__FUNCTION__, pSiteMgr->bTempTxPowerEnabled));
- return OK;
- }
- /***********************************************************************
- * siteMgr_setWMEParamsSite
- ***********************************************************************
- DESCRIPTION: Set the WME params as received from the associated
- AP. The function is called by the QoS Mgr
- after receving association response succefully.
- INPUT: hSiteMgr - SiteMgr handle.
- OUTPUT: pDot11_WME_PARAM_t - pointer to the WME Param IE.
- RETURN: OK on always
- ************************************************************************/
- TI_STATUS siteMgr_setWMEParamsSite(TI_HANDLE hSiteMgr,dot11_WME_PARAM_t *pDot11_WME_PARAM)
- {
- siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr;
- siteEntry_t *pPrimarySite = pSiteMgr->pSitesMgmtParams->pPrimarySite;
- if( pPrimarySite == NULL )
- {
- return OK;
- }
- if( pDot11_WME_PARAM == NULL )
- {
- pPrimarySite->WMESupported = FALSE;
- return OK;
- }
- /* Update the WME params */
- os_memoryCopy(pSiteMgr->hOs,&pPrimarySite->WMEParameters,&pDot11_WME_PARAM->WME_ACParameteres,sizeof(ACParameters_t));
- pPrimarySite->lastWMEParameterCnt = (pDot11_WME_PARAM->ACInfoField & dot11_WME_ACINFO_MASK);
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,("$$$$$$ WME parameters were updates according to association response, cntSeq = %d\n",pPrimarySite->lastWMEParameterCnt));
- return OK;
- }
- /***********************************************************************
- * siteMgr_getWMEParamsSite
- ***********************************************************************
- DESCRIPTION: Get the WME params as recieved from the associated
- AP. The function is called by the Qos Mgr in order
- to set all WME parameters to the core and Hal
- INPUT: hSiteMgr - SiteMgr handle.
- OUTPUT: pWME_ACParameters_t - pointer to the WME Param.
- RETURN: OK if there are valid WME parameters , NOK otherwise.
- ************************************************************************/
- TI_STATUS siteMgr_getWMEParamsSite(TI_HANDLE hSiteMgr,ACParameters_t **pWME_ACParameters_t)
- {
- siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr;
- siteEntry_t *pPrimarySite = pSiteMgr->pSitesMgmtParams->pPrimarySite;
- if(pPrimarySite->WMESupported == TRUE)
- {
- *pWME_ACParameters_t = &pPrimarySite->WMEParameters;
- return OK;
- }
- else
- {
- *pWME_ACParameters_t = NULL;
- return NOK;
- }
- }
- /***********************************************************************
- * calculateBssidListSize
- ***********************************************************************
- DESCRIPTION: Calculate the size of memory buffer required for BSSID
- List.
- INPUT: hSiteMgr - site mgr handle.
- OUTPUT:
- RETURN: OK on always
- ************************************************************************/
- static TI_STATUS calculateBssidListSize(siteMgr_t *pSiteMgr, UINT32 *pLength, BOOL allVarIes)
- {
- UINT32 siteTableIndex, tableIndex;
- UINT32 length;
- siteEntry_t* pSiteEntry;
- siteTablesParams_t* currTable;
- *pLength = sizeof(OS_802_11_BSSID_LIST_EX) - sizeof(OS_802_11_BSSID_EX);
- currTable = pSiteMgr->pSitesMgmtParams->pCurrentSiteTable;
- for (tableIndex = 0; tableIndex < NUM_OF_SITE_TABLE ; tableIndex++)
- {
- for (siteTableIndex = 0; siteTableIndex < currTable->maxNumOfSites; siteTableIndex++)
- {
- pSiteEntry = (siteEntry_t*)&currTable->siteTable[siteTableIndex];
- if (pSiteEntry->siteType != SITE_NULL)
- {
- if (allVarIes)
- {
- length = sizeof(OS_802_11_BSSID_EX) + sizeof(OS_802_11_FIXED_IEs);
- if (pSiteEntry->probeRecv)
- {
- length += pSiteEntry->probeRespLength;
- }
- else
- {
- length += pSiteEntry->beaconLength;
- }
-
- }
- else
- {
- length = (sizeof(OS_802_11_BSSID_EX) + sizeof(OS_802_11_FIXED_IEs) +
- (pSiteEntry->ssid.len + 2) + (MAX_SUPPORTED_RATES + 2) +
- (DOT11_FH_PARAMS_ELE_LEN + 2) + (DOT11_DS_PARAMS_ELE_LEN +2) +
- pSiteEntry->rsnIeLen);
- /* WME information element by alcel*/
- if (pSiteEntry->WMESupported)
- {
- /* length of element + header*/
- length += (DOT11_WME_ELE_LEN + 2);
- }
- }
- /* make sure length is 4 bytes aligned */
- if (length % 4)
- {
- length += (4 - (length % 4));
- }
- *pLength += length;
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("BSSID length =%d on table index %d \n", length, tableIndex));
- }
- }
- if(pSiteMgr->pDesiredParams->siteMgrDesiredDot11Mode == DOT11_DUAL_MODE)
- {
- /* change site table */
- if(currTable == &pSiteMgr->pSitesMgmtParams->dot11BG_sitesTables)
- currTable = (siteTablesParams_t *)&pSiteMgr->pSitesMgmtParams->dot11A_sitesTables;
- else
- currTable = &pSiteMgr->pSitesMgmtParams->dot11BG_sitesTables;
- }
- else
- break;
- }
- return OK;
- }
- /***********************************************************************
- * siteMgr_setCurrentTable
- ***********************************************************************
- DESCRIPTION:
- INPUT: hSiteMgr - SiteMgr handle.
- OUTPUT:
- RETURN:
- ************************************************************************/
- void siteMgr_setCurrentTable(TI_HANDLE hSiteMgr, radioBand_e radioBand)
- {
- siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr;
- if(radioBand == RADIO_BAND_2_4_GHZ)
- pSiteMgr->pSitesMgmtParams->pCurrentSiteTable = &pSiteMgr->pSitesMgmtParams->dot11BG_sitesTables;
- else
- pSiteMgr->pSitesMgmtParams->pCurrentSiteTable = (siteTablesParams_t *)&pSiteMgr->pSitesMgmtParams->dot11A_sitesTables;
- }
- /***********************************************************************
- * siteMgr_updateRates
- ***********************************************************************
- DESCRIPTION:
- INPUT: hSiteMgr - SiteMgr handle.
- OUTPUT:
- RETURN:
- ************************************************************************/
- void siteMgr_updateRates(TI_HANDLE hSiteMgr, BOOL dot11a, BOOL updateToOS)
- {
- UINT32 statusData;
- rate_e txDesiredRate;
- UINT32 localSuppRateMask, localBasicRateMask;
- siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr;
- localSuppRateMask = pSiteMgr->pDesiredParams->siteMgrRegstrySuppRateMask;
- localBasicRateMask = pSiteMgr->pDesiredParams->siteMgrRegstryBasicRateMask;
- validateRatesVsBand(&localSuppRateMask, &localBasicRateMask, dot11a);
- pSiteMgr->pDesiredParams->siteMgrCurrentDesiredRateMask.basicRateMask = localBasicRateMask;
- pSiteMgr->pDesiredParams->siteMgrCurrentDesiredRateMask.supportedRateMask = localSuppRateMask;
- /* Initialize Mutual Rates Matching */
- pSiteMgr->pDesiredParams->siteMgrMatchedBasicRateMask = pSiteMgr->pDesiredParams->siteMgrCurrentDesiredRateMask.basicRateMask;
- pSiteMgr->pDesiredParams->siteMgrMatchedSuppRateMask = pSiteMgr->pDesiredParams->siteMgrCurrentDesiredRateMask.supportedRateMask;
- pSiteMgr->pDesiredParams->siteMgrMatchedMaxBasicRate = getMaxRatefromBitmap(pSiteMgr->pDesiredParams->siteMgrMatchedBasicRateMask);
- pSiteMgr->pDesiredParams->siteMgrMatchedMaxActiveRate = getMaxRatefromBitmap(pSiteMgr->pDesiredParams->siteMgrMatchedSuppRateMask);
- /*If we are in dual mode and we are only scanning A band we don't have to set the siteMgrCurrentDesiredTxRate.*/
- if (updateToOS == TRUE)
- {
- /* Validate that the masks and tx rate are OK */
- txDesiredRate = pSiteMgr->pDesiredParams->siteMgrRegstryDesiredTxRate;
- validateRates((UINT32 *)&pSiteMgr->pDesiredParams->siteMgrCurrentDesiredRateMask.basicRateMask,
- (UINT32 *)&pSiteMgr->pDesiredParams->siteMgrCurrentDesiredRateMask.supportedRateMask,
- (UINT32 *)&txDesiredRate,
- &pSiteMgr->pDesiredParams->siteMgrDesiredModulationType, dot11a);
- pSiteMgr->pDesiredParams->siteMgrCurrentDesiredTxRate = txDesiredRate;
- }
- pSiteMgr->pDesiredParams->siteMgrDesiredRatePair.maxBasic = translateRateMaskToValue(pSiteMgr, pSiteMgr->pDesiredParams->siteMgrCurrentDesiredRateMask.basicRateMask);
- pSiteMgr->pDesiredParams->siteMgrDesiredRatePair.maxActive = translateRateMaskToValue(pSiteMgr, pSiteMgr->pDesiredParams->siteMgrCurrentDesiredRateMask.supportedRateMask);
- if (updateToOS == TRUE) {
- /* report the desired rate to OS */
- statusData = hostToUtilityRate(pSiteMgr->pDesiredParams->siteMgrDesiredRatePair.maxActive);
- EvHandlerSendEvent(pSiteMgr->hEvHandler, IPC_EVENT_LINK_SPEED, (UINT8 *)&statusData,sizeof(UINT32));
- }
- }
- /***********************************************************************
- * siteMgr_bandParamsConfig
- ***********************************************************************
- DESCRIPTION:
- INPUT: hSiteMgr - SiteMgr handle.
- OUTPUT:
- RETURN:
- ************************************************************************/
- void siteMgr_bandParamsConfig(TI_HANDLE hSiteMgr, BOOL updateToOS)
- {
- siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr;
- /* reconfig rates */
- if(pSiteMgr->siteMgrOperationalMode == DOT11_A_MODE)
- siteMgr_updateRates(hSiteMgr, TRUE, updateToOS);
- else
- siteMgr_updateRates(hSiteMgr, FALSE, updateToOS);
- /* go to B_ONLY Mode only if WiFI bit is Set*/
- if (pSiteMgr->pDesiredParams->siteMgrWiFiAdhoc == TRUE)
- { /* Configuration For AdHoc when using external configuration */
- if (pSiteMgr->pDesiredParams->siteMgrExternalConfiguration == FALSE)
- {
- siteMgr_externalConfigurationParametersSet(hSiteMgr);
- }
- }
- }
- void siteMgr_keepAliveSendNullDataTimer(TI_HANDLE hSiteMgr)
- {
- paramInfo_t param;
- siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr;
- UINT32 txPacketsCount = 0;
- UINT32 TxQid;
- if ((pSiteMgr->pSitesMgmtParams->pPrimarySite != NULL) &&
- (pSiteMgr->pSitesMgmtParams->pPrimarySite->bssType != BSS_INFRASTRUCTURE))
- { /* No need for kepp alive when not in Infra */
- return;
- }
- param.paramType = TX_DATA_COUNTERS_PARAM;
- txData_getParam(pSiteMgr->hTxData, ¶m);
- /* get current tx data frames counter */
- for (TxQid = 0; TxQid < MAX_NUM_OF_TX_QUEUES; TxQid++)
- txPacketsCount += param.content.pTxDataCounters[TxQid].XmitOk;
- if (pSiteMgr->txPacketsCount==txPacketsCount)
- { /* send NULL data */
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,("siteMgr_keepAliveSendNullDataTimer\n"));
- /* sending null frame with power save bit set to off (if keepAliveEnable in the registry)
- Note: the Hardware modify the PS bit according to the current PS mode. */
- if(pSiteMgr->keepAliveEnable == TRUE)
- {
- txData_sendNullFrame(pSiteMgr->hTxData, FALSE, SITE_MGR_MODULE);
- }
- txPacketsCount++;
- }
- pSiteMgr->txPacketsCount=txPacketsCount;
- }
- void siteMgr_ConfigRate(TI_HANDLE hSiteMgr)
- {
- siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr;
- BOOL dot11a;
- dot11mode_e OperationMode ;
- OperationMode = pSiteMgr->siteMgrOperationalMode;
- /* reconfig rates */
- if(OperationMode == DOT11_A_MODE)
- dot11a = TRUE;
- else
- dot11a = FALSE;
- /*
- ** Specific change to ch 14, that channel is only used in Japan, and is limited
- ** to rates 1,2,5.5,11
- */
- if(pSiteMgr->pDesiredParams->siteMgrDesiredChannel == SPECIAL_BG_CHANNEL)
- {
- if(pSiteMgr->pDesiredParams->siteMgrRegstryBasicRate[OperationMode] > BASIC_RATE_SET_1_2_5_5_11)
- pSiteMgr->pDesiredParams->siteMgrRegstryBasicRate[OperationMode] = BASIC_RATE_SET_1_2_5_5_11;
- if(pSiteMgr->pDesiredParams->siteMgrRegstrySuppRate[OperationMode] > SUPPORTED_RATE_SET_1_2_5_5_11)
- pSiteMgr->pDesiredParams->siteMgrRegstrySuppRate[OperationMode] = SUPPORTED_RATE_SET_1_2_5_5_11;
- }
- pSiteMgr->pDesiredParams->siteMgrRegstryBasicRateMask =
- translateBasicRateValueToMask(pSiteMgr->pDesiredParams->siteMgrRegstryBasicRate[OperationMode], dot11a);
- pSiteMgr->pDesiredParams->siteMgrRegstrySuppRateMask =
- translateSupportedRateValueToMask(pSiteMgr->pDesiredParams->siteMgrRegstrySuppRate[OperationMode], dot11a);
- siteMgr_updateRates(pSiteMgr, dot11a, TRUE);
- /* go to B_ONLY Mode only if WiFI bit is Set*/
- if (pSiteMgr->pDesiredParams->siteMgrWiFiAdhoc == TRUE)
- { /* Configuration For AdHoc when using external configuration */
- if (pSiteMgr->pDesiredParams->siteMgrExternalConfiguration == FALSE)
- {
- siteMgr_externalConfigurationParametersSet(hSiteMgr);
- }
- }
- }
- static void siteMgr_externalConfigurationParametersSet(TI_HANDLE hSiteMgr)
- {
- siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr;
- /* Overwrite the parameters for AdHoc with External Configuration */
- if( ((pSiteMgr->pDesiredParams->siteMgrDesiredDot11Mode == DOT11_A_MODE) ||
- (pSiteMgr->pDesiredParams->siteMgrDesiredDot11Mode == DOT11_DUAL_MODE)) &&
- !pSiteMgr->pDesiredParams->siteMgrWiFiAdhoc && pSiteMgr->pDesiredParams->siteMgrDesiredBSSType == BSS_INDEPENDENT)
- return;
- if(pSiteMgr->pDesiredParams->siteMgrDesiredBSSType == BSS_INDEPENDENT)
- {
- pSiteMgr->siteMgrOperationalMode = DOT11_B_MODE;
- pSiteMgr->pDesiredParams->siteMgrCurrentDesiredRateMask.basicRateMask = translateBasicRateValueToMask(BASIC_RATE_SET_1_2_5_5_11, FALSE);
- pSiteMgr->pDesiredParams->siteMgrCurrentDesiredRateMask.supportedRateMask = translateSupportedRateValueToMask(SUPPORTED_RATE_SET_1_2_5_5_11, FALSE);
- pSiteMgr->pDesiredParams->siteMgrCurrentDesiredTxRate = DRV_RATE_AUTO;
- pSiteMgr->pDesiredParams->siteMgrRegstryBasicRateMask = translateBasicRateValueToMask(BASIC_RATE_SET_1_2_5_5_11, FALSE);
- pSiteMgr->pDesiredParams->siteMgrRegstrySuppRateMask = translateSupportedRateValueToMask(SUPPORTED_RATE_SET_1_2_5_5_11, FALSE);
- pSiteMgr->pDesiredParams->siteMgrRegstryDesiredTxRate = DRV_RATE_AUTO;
- pSiteMgr->pDesiredParams->siteMgrDesiredSlotTime = PHY_SLOT_TIME_LONG;
- whalCtrl_SetRadioBand(pSiteMgr->hHalCtrl, RADIO_BAND_2_4_GHZ);
- whalCtrl_SetSlotTime(pSiteMgr->hHalCtrl, PHY_SLOT_TIME_LONG);
- }
- else
- {
- if(pSiteMgr->radioBand == RADIO_BAND_2_4_GHZ)
- pSiteMgr->siteMgrOperationalMode = DOT11_G_MODE;
- else
- pSiteMgr->siteMgrOperationalMode = DOT11_A_MODE;
- pSiteMgr->pDesiredParams->siteMgrCurrentDesiredRateMask.basicRateMask = translateBasicRateValueToMask(BASIC_RATE_SET_1_2_5_5_11, FALSE);
- pSiteMgr->pDesiredParams->siteMgrCurrentDesiredRateMask.supportedRateMask = translateSupportedRateValueToMask(SUPPORTED_RATE_SET_ALL, FALSE);
- pSiteMgr->pDesiredParams->siteMgrCurrentDesiredTxRate = DRV_RATE_AUTO;
- pSiteMgr->pDesiredParams->siteMgrRegstryBasicRateMask = translateBasicRateValueToMask(BASIC_RATE_SET_1_2_5_5_11, FALSE);
- pSiteMgr->pDesiredParams->siteMgrRegstrySuppRateMask = translateSupportedRateValueToMask(SUPPORTED_RATE_SET_ALL, FALSE);
- pSiteMgr->pDesiredParams->siteMgrRegstryDesiredTxRate = DRV_RATE_AUTO;
- pSiteMgr->pDesiredParams->siteMgrDesiredSlotTime = PHY_SLOT_TIME_LONG;
- whalCtrl_SetSlotTime(pSiteMgr->hHalCtrl, PHY_SLOT_TIME_LONG);
- }
- }
- void siteMgr_checkTxPower(TI_HANDLE hSiteMgr)
- {
- siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr;
- if ( (pSiteMgr->pSitesMgmtParams->pPrimarySite) && (pSiteMgr->bTempTxPowerEnabled)
- && (++pSiteMgr->siteMgrTxPowerCheckTime >= pSiteMgr->pDesiredParams->TxPowerCheckTime) )
- {
- pSiteMgr->siteMgrTxPowerCheckTime = 0; /* reset counter for next check */
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("%s: RSSI = %d TxPowerRssiThresh = %d TxPowerRssiRestoreThresh = %D\n",
- __FUNCTION__, pSiteMgr->pSitesMgmtParams->pPrimarySite->rssi,
- pSiteMgr->pDesiredParams->TxPowerRssiThresh,pSiteMgr->pDesiredParams->TxPowerRssiRestoreThresh));
- if ((pSiteMgr->pSitesMgmtParams->pPrimarySite->rssi) >= (INT32) (0 - pSiteMgr->pDesiredParams->TxPowerRssiThresh))
- {
- /* activate Tx Power Control adjustment */
- siteMgr_setTemporaryTxPower(pSiteMgr, TRUE);
- }
- else if (pSiteMgr->pSitesMgmtParams->pPrimarySite->rssi <= (INT32) (0 - pSiteMgr->pDesiredParams->TxPowerRssiRestoreThresh))
- {
- /* deactivate Tx Power Control adjustment */
- siteMgr_setTemporaryTxPower(pSiteMgr, FALSE);
- }
- }
- }
- TI_STATUS siteMgr_saveProbeRespBuffer(TI_HANDLE hSiteMgr, macAddress_t *bssid, UINT8 *pProbeRespBuffer, UINT32 length)
- {
- siteEntry_t *pSite;
- siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr;
- if ((pSiteMgr==NULL) || (pProbeRespBuffer==NULL) || (length>=MAX_MGMT_BODY_LENGTH))
- {
- return NOK;
- }
- pSite = findSiteEntry(pSiteMgr, bssid);
- if (pSite==NULL)
- {
- /*WLAN_REPORT_ERROR(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("siteMgr_saveProbeRespBuffer: site doesn't exist\n"));*/
- return NOK;
- }
- os_memoryCopy(pSiteMgr->hOs, pSite->probeRespBuffer, pProbeRespBuffer, length);
- pSite->osTimeStamp = os_timeStampMs(pSiteMgr->hOs);
- pSite->probeRespLength = length;
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("siteMgr_saveProbeRespBuffer: BSSID=%x-%x-%x-%x-%x-%x, TSF=%x-%x-%x-%x-%x-%x-%x-%x, \n ts=%d, rssi=%d\n channel = %d \n",
- pSite->bssid.addr[0], pSite->bssid.addr[1], pSite->bssid.addr[2],
- pSite->bssid.addr[3], pSite->bssid.addr[4], pSite->bssid.addr[5],
- pSite->tsfTimeStamp[0], pSite->tsfTimeStamp[1], pSite->tsfTimeStamp[2], pSite->tsfTimeStamp[3],
- pSite->tsfTimeStamp[4], pSite->tsfTimeStamp[5], pSite->tsfTimeStamp[6], pSite->tsfTimeStamp[7],
- pSite->osTimeStamp, pSite->rssi, pSite->channel));
- return OK;
- }
- TI_STATUS siteMgr_saveBeaconBuffer(TI_HANDLE hSiteMgr, macAddress_t *bssid, UINT8 *pBeaconBuffer, UINT32 length)
- {
- siteEntry_t *pSite;
- siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr;
- if ((pSiteMgr==NULL) || (pBeaconBuffer==NULL) || (length>=MAX_MGMT_BODY_LENGTH))
- {
- return NOK;
- }
- pSite = findSiteEntry(pSiteMgr, bssid);
- if (pSite==NULL)
- {
- /*WLAN_REPORT_ERROR(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("siteMgr_saveBeaconBuffer: site doesn't exist\n"));*/
- return NOK;
- }
- os_memoryCopy(pSiteMgr->hOs, pSite->beaconBuffer, pBeaconBuffer, length);
- pSite->osTimeStamp = os_timeStampMs(pSiteMgr->hOs);
- pSite->beaconLength = length;
- /*if (pSiteMgr->pSitesMgmtParams->pPrimarySite!=NULL)
- {
- if (!os_memoryCompare(pSiteMgr->hOs, pSiteMgr->pSitesMgmtParams->pPrimarySite->ssid.ssidString, pSite->ssid.ssidString, pSiteMgr->pSitesMgmtParams->pPrimarySite->ssid.len))
- {
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("siteMgr_saveBeaconBuffer: BSSID=%x-%x-%x-%x-%x-%x, TSF=%x-%x-%x-%x-%x-%x-%x-%x, \n ts=%d, rssi=%d \n",
- pSite->bssid.addr[0], pSite->bssid.addr[1], pSite->bssid.addr[2],
- pSite->bssid.addr[3], pSite->bssid.addr[4], pSite->bssid.addr[5],
- pSite->tsfTimeStamp[0], pSite->tsfTimeStamp[1], pSite->tsfTimeStamp[2], pSite->tsfTimeStamp[3],
- pSite->tsfTimeStamp[4], pSite->tsfTimeStamp[5], pSite->tsfTimeStamp[6], pSite->tsfTimeStamp[7],
- pSite->osTimeStamp, pSite->rssi));
- }
- }*/
- pSite->ssid.ssidString[pSite->ssid.len] = '\0';
- /*WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("siteMgr_saveBeaconBuffer: BSSID=%x-%x-%x-%x-%x-%x, SSID=%s, \n ts=%d, rssi=%d\n channel = %d \n",
- pSite->bssid.addr[0], pSite->bssid.addr[1], pSite->bssid.addr[2],
- pSite->bssid.addr[3], pSite->bssid.addr[4], pSite->bssid.addr[5],
- pSite->ssid.ssidString, pSite->osTimeStamp, pSite->rssi, pSite->channel));
- */
- return OK;
- }
- void siteMgr_resetChannelList(TI_HANDLE hSiteMgr)
- {
- UINT8 index;
- siteMgr_t *pSiteMgr = (siteMgr_t*)hSiteMgr;
- if (hSiteMgr==NULL)
- {
- return;
- }
- for (index=0; index < pSiteMgr->pSitesMgmtParams->pCurrentSiteTable->maxNumOfSites; index++)
- {
- if (pSiteMgr->pSitesMgmtParams->pCurrentSiteTable->siteTable[index].siteType != SITE_NULL)
- {
- pSiteMgr->pSitesMgmtParams->pCurrentSiteTable->siteTable[index].prioritySite = FALSE;
- }
- }
- }
- siteEntry_t *siteMgr_findSiteEntry(TI_HANDLE hSiteMgrm, macAddress_t *bssid)
- {
- return (findSiteEntry(hSiteMgrm, bssid));
- }
- void siteMgr_IsERP_Needed(TI_HANDLE hSiteMgr,BOOL *useProtection,BOOL *NonErpPresent,BOOL *barkerPreambleType)
- {
- siteMgr_t *pSiteMgr = (siteMgr_t*)hSiteMgr;
- paramInfo_t param;
- siteEntry_t *pPrimarySite = pSiteMgr->pSitesMgmtParams->pPrimarySite;
- *useProtection = FALSE;
- *NonErpPresent = FALSE;
- *barkerPreambleType = FALSE;
- param.paramType = CTRL_DATA_CURRENT_IBSS_PROTECTION_PARAM;
- ctrlData_getParam(pSiteMgr->hCtrlData, ¶m);
- /* On WifiAdhoc (for band B) The STa should not include in the beacon an ERP IE (see WiFi B clause 2.2, 5.8.2) */
- if (pSiteMgr->pDesiredParams->siteMgrWiFiAdhoc == TRUE)
- {
- /* Return the default => ERP is not needed */
- return;
- }
- /* check if STA is connected */
- if (pPrimarySite)
- {
- if(pSiteMgr->siteMgrOperationalMode == DOT11_G_MODE || pSiteMgr->siteMgrOperationalMode == DOT11_DUAL_MODE)
- {
- if(param.content.ctrlDataIbssProtecionType == ERP_PROTECTION_STANDARD)
- {
- if(pPrimarySite->siteType == SITE_SELF)
- {
- if(pPrimarySite->channel <= SITE_MGR_CHANNEL_B_G_MAX) /* if channel B&G*/
- {
- *useProtection = TRUE;
- *NonErpPresent = TRUE;
- *barkerPreambleType = TRUE;
- }
- }
- else if(pPrimarySite->bssType == BSS_INDEPENDENT)
- {
- if(pPrimarySite->useProtection == TRUE)
- *useProtection = TRUE;
- if(pPrimarySite->NonErpPresent == TRUE)
- *NonErpPresent = TRUE;
- if(pPrimarySite->barkerPreambleType == PREAMBLE_SHORT)
- *barkerPreambleType = TRUE;
- }
- }
- }
- }
- }
- void siteMgr_gotFirstBcn(TI_HANDLE hSiteMgr)
- {
- siteMgr_t *pSiteMgr = (siteMgr_t*)hSiteMgr;
- int status ;
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
- ("siteMgr_gotFirstBcn: dtimPeriod=%d, beaconInterval=%d\n",
- pSiteMgr->pSitesMgmtParams->pPrimarySite->dtimPeriod,
- pSiteMgr->pSitesMgmtParams->pPrimarySite->beaconInterval));
- /* Check if the Beacon Filter Desired State is TRUE */
- pSiteMgr->beaconFilterParams.currentState = TRUE;
- /* If the Beacon Filter was TRUE then send it to FW if not do not do nothing */
- if( TRUE == pSiteMgr->beaconFilterParams.desiredState )
- {
- if ( (status = whalCtrl_SetBeaconFiltering(pSiteMgr->hHalCtrl, pSiteMgr->beaconFilterParams.desiredState, pSiteMgr->beaconFilterParams.numOfStored)) != OK)
- {
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport,
- POWER_MANAGER_MODULE_LOG,
- ("%s(%d) - Error N.%d in configuring beacon filtering !\n",
- __FILE__,__LINE__,status));
- }
- else
- {
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport,SITE_MGR_MODULE_LOG , ("-- Beacon Filter Enable Beacon Filtering MIB Was Sent to FW !!! --\n"));
- }
- }
- else
- {
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport,SITE_MGR_MODULE_LOG , ("-- Beacon Filter Disable Beacon Filtering - Do not send to FW Already Disabled !!! --\n"));
- }
- whalCtrl_setDtimPeriod(pSiteMgr->hHalCtrl, pSiteMgr->pSitesMgmtParams->pPrimarySite->dtimPeriod,
- pSiteMgr->pSitesMgmtParams->pPrimarySite->beaconInterval);
- /* The power mode configuration gets overridden by the above DTIM period */
- /* configuration. We use this call to send it again to the firmware. */
- PowerMgr_reloadPowerMode(pSiteMgr->hPowerMgr);
- }
- void siteMgr_clearFirstBcnFlag(TI_HANDLE hSiteMgr)
- {
- siteMgr_t *pSiteMgr = (siteMgr_t*)hSiteMgr;
- /* This is set to FALSE since the First Beaqcin should be received for the first beacon mechanism */
- pSiteMgr->beaconFilterParams.currentState = FALSE;
- whalCtrl_SetBeaconFiltering(pSiteMgr->hHalCtrl, FALSE, pSiteMgr->beaconFilterParams.numOfStored);
-
- /* set Hw available until we get the first beacon */
- MacServices_powerAutho_AwakeRequiredUpdate(pSiteMgr->hMacServices, POWERAUTHO_AWAKE_REQUIRED, POWERAUTHO_AWAKE_REASON_FIRST_BEACON);
- if(pSiteMgr->pSitesMgmtParams->pPrimarySite != NULL)
- pSiteMgr->pSitesMgmtParams->pPrimarySite->beaconReceiveAfterJoin = FALSE;
- }
- void siteMgr_setFirstBcnFlag(TI_HANDLE hSiteMgr)
- {
- siteMgr_t *pSiteMgr = (siteMgr_t*)hSiteMgr;
- /* set Hw not available until now that the connection was closed */
- MacServices_powerAutho_AwakeRequiredUpdate(pSiteMgr->hMacServices, POWERAUTHO_AWAKE_NOT_REQUIRED, POWERAUTHO_AWAKE_REASON_FIRST_BEACON);
-
- if(pSiteMgr->pSitesMgmtParams->pPrimarySite != NULL)
- pSiteMgr->pSitesMgmtParams->pPrimarySite->beaconReceiveAfterJoin = TRUE;
- }
- /**
- *
- * siteMgr_overwritePrimarySite
- *
- * \b Description:
- *
- * This function sets new AP as a primary site and, if requested, stores previous
- * AP's info; called during roaming
- *
- * \b ARGS:
- *
- * I - pCurrBSS - Current BSS handle \n
- *
- * \b RETURNS:
- *
- * OK on success, NOK on failure.
- *
- * \sa
- */
- TI_STATUS siteMgr_overwritePrimarySite(TI_HANDLE hSiteMgr, bssEntry_t *newAP, BOOL requiredToStorePrevSite)
- {
- siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr;
- siteEntry_t *newApEntry;
- mlmeIEParsingParams_t *ieListParseParams = mlmeParser_getParseIEsBuffer(pSiteMgr->hMlmeSm);
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("siteMgr_overwritePrimarySite: new site bssid= 0x%x-0x%x-0x%x-0x%x-0x%x-0x%x\n\n",
- newAP->BSSID.addr[0], newAP->BSSID.addr[1], newAP->BSSID.addr[2],
- newAP->BSSID.addr[3], newAP->BSSID.addr[4], newAP->BSSID.addr[5]));
- /* If previous primary site present, and requested to save it - store it */
- if (requiredToStorePrevSite)
- {
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport,
- SITE_MGR_MODULE_LOG,
- ("siteMgr_overwritePrimarySite: required to store prev prim site \n"));
- /* Store latest primary site, make ite a regular site */
- pSiteMgr->pSitesMgmtParams->pPrevPrimarySite = pSiteMgr->pSitesMgmtParams->pPrimarySite;
- pSiteMgr->pSitesMgmtParams->pPrevPrimarySite->siteType = SITE_REGULAR;
- }
- else
- {
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport,
- SITE_MGR_MODULE_LOG,
- ("siteMgr_overwritePrimarySite: not required to store prev prim site \n"));
- if (pSiteMgr->pSitesMgmtParams->pPrimarySite != NULL)
- {
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("Removing Primary ssid=%s, bssid= 0x%x-0x%x-0x%x-0x%x-0x%x-0x%x\n\n",
- pSiteMgr->pSitesMgmtParams->pPrimarySite->ssid.ssidString,
- pSiteMgr->pSitesMgmtParams->pPrimarySite->bssid.addr[0], pSiteMgr->pSitesMgmtParams->pPrimarySite->bssid.addr[1], pSiteMgr->pSitesMgmtParams->pPrimarySite->bssid.addr[2],
- pSiteMgr->pSitesMgmtParams->pPrimarySite->bssid.addr[3], pSiteMgr->pSitesMgmtParams->pPrimarySite->bssid.addr[4], pSiteMgr->pSitesMgmtParams->pPrimarySite->bssid.addr[5] ));
- pSiteMgr->pSitesMgmtParams->pPrimarySite->siteType = SITE_REGULAR;
- pSiteMgr->pSitesMgmtParams->pPrimarySite->beaconRecv = FALSE;
- pSiteMgr->pSitesMgmtParams->pPrimarySite->beaconReceiveAfterJoin = TRUE;
- pSiteMgr->pSitesMgmtParams->pPrimarySite = NULL;
- }
- else
- {
- WLAN_REPORT_ERROR(pSiteMgr->hReport,
- SITE_MGR_MODULE_LOG,
- ("siteMgr_overwritePrimarySite: primary site is NULL \n"));
- }
- }
- /* Find not occupied entry in site table, and store new AP BSSID in */
- /* If pPrimarySite is not set to NULL, store it in pPrevSite before updating */
- newApEntry = findAndInsertSiteEntry(pSiteMgr, &(newAP->BSSID), newAP->band);
- if (newApEntry != NULL)
- {
- /* Zero frame content */
- os_memoryZero(pSiteMgr->hOs, ieListParseParams, sizeof(mlmeIEParsingParams_t));
- /* Update parameters of new AP */
- newApEntry->rssi = newAP->RSSI;
- newApEntry->bssType = BSS_INFRASTRUCTURE;
- newApEntry->dtimPeriod = 1;
- newApEntry->rxRate = (rate_e)newAP->rxRate;
- /* Mark the site as regular in order to prevent from calling Power manager during beacon parsing */
- newApEntry->siteType = SITE_REGULAR;
- os_memoryCopy(pSiteMgr->hOs, &newApEntry->ssid, &pSiteMgr->pDesiredParams->siteMgrDesiredSSID, sizeof(ssid_t));
- if (newAP->resultType == SCAN_RFT_PROBE_RESPONSE)
- {
- ieListParseParams->frame.subType = PROBE_RESPONSE;
- siteMgr_saveProbeRespBuffer(hSiteMgr, &(newAP->BSSID), newAP->pBuffer, newAP->bufferLength);
- }
- else
- {
- ieListParseParams->frame.subType = BEACON;
- siteMgr_saveBeaconBuffer(hSiteMgr, &(newAP->BSSID), newAP->pBuffer, newAP->bufferLength);
- }
- ieListParseParams->band = newAP->band;
- ieListParseParams->rxChannel = newAP->channel;
- ieListParseParams->myBssid = FALSE;
- ieListParseParams->frame.content.iePacket.pRsnIe = NULL;
- ieListParseParams->frame.content.iePacket.rsnIeLen = 0;
- ieListParseParams->frame.content.iePacket.barkerPreambleMode = PREAMBLE_UNSPECIFIED;
- os_memoryCopy(pSiteMgr->hOs, (void *)ieListParseParams->frame.content.iePacket.timestamp, (void *)&newAP->lastRxTSF, TIME_STAMP_LEN);
- ieListParseParams->frame.content.iePacket.beaconInerval = newAP->beaconInterval;
- ieListParseParams->frame.content.iePacket.capabilities = newAP->capabilities;
- if (mlmeParser_parseIEs(pSiteMgr->hMlmeSm, newAP->pBuffer, newAP->bufferLength, ieListParseParams) != OK)
- {
- /* Error in parsing Probe response packet - exit */
- return NOK;
- }
- siteMgr_updateSite(hSiteMgr, &(newAP->BSSID), &ieListParseParams->frame, newAP->channel, newAP->band, FALSE);
- /* Select the entry as primary site */
- newApEntry->siteType = SITE_PRIMARY;
- pSiteMgr->pSitesMgmtParams->pPrimarySite = newApEntry;
- return OK;
- }
- else
- {
- return NOK;
- }
- }
- #if 0
- /***********************************************************************
- siteMgr_updateLowPriorityTimeout
- ***********************************************************************
- DESCRIPTION: Call to the PowerCtrl with the new claculated low priority
- timeout that is depend on the:
- - short/long doze.
- - beacon filtering number.
- - beacon interval.
- INPUT: hSiteMgr - site mgr handle.
- OUTPUT:
- RETURN: UINT32 - the timeout in mSec.
- ************************************************************************/
- static void siteMgr_updateLowPriorityTimeout(TI_HANDLE hSiteMgr)
- {
- siteMgr_t *pSiteMgr = (siteMgr_t*)hSiteMgr;
- UINT32 lowPriorityTimeout = 0;
- if(pSiteMgr->pDesiredParams->siteMgrDesiredBSSType == BSS_INDEPENDENT)
- {
- lowPriorityTimeout = SITE_MGR_IBSS_AGING_TIMEOUT_DEF;
- }
- else
- {
- /*
- If the pPrimarySite is NULL then we cannot update the aging timeout
- */
- if (pSiteMgr->pSitesMgmtParams->pPrimarySite == NULL)
- {
- WLAN_REPORT_ERROR(pSiteMgr->hReport,
- SITE_MGR_MODULE_LOG,
- ("there is NO primary site! pPrimarySite is NULL\n"));
- return;
- }
- else
- {
- /*
- in shortDoze and active mode the system behaviour is the same as regarding to
- beacon evnets. On each beacon the TNET is awake and should received the beacon
- */
- if(pSiteMgr->powerSaveLdMode == FALSE)
- {
- lowPriorityTimeout = pSiteMgr->pSitesMgmtParams->pPrimarySite->beaconInterval;
- }
- else
- /*
- In longDoze, the interval time should based on numOfBeaconFiltering * Dtim interval
- */
- {
- /*
- if beacon filtering disable.
- */
- if ( 0 == pSiteMgr->numOfBeaconFiltering )
- {
- lowPriorityTimeout = pSiteMgr->pSitesMgmtParams->pPrimarySite->dtimPeriod * pSiteMgr->pSitesMgmtParams->pPrimarySite->beaconInterval;
- }
- else
- {
- lowPriorityTimeout = pSiteMgr->numOfBeaconFiltering * pSiteMgr->pSitesMgmtParams->pPrimarySite->dtimPeriod * pSiteMgr->pSitesMgmtParams->pPrimarySite->beaconInterval;
- }
- }
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport,
- SITE_MGR_MODULE_LOG,
- ("siteMgr_calcLowPriorityTimeout: lowPriorityTimeout = %d, BeaconInterval = %d, DtimPeriod = %d,powerSaveLdMode = %d, numOfBeaconFiltering = %d\n",
- lowPriorityTimeout,
- pSiteMgr->pSitesMgmtParams->pPrimarySite->beaconInterval,
- pSiteMgr->pSitesMgmtParams->pPrimarySite->dtimPeriod,
- pSiteMgr->powerSaveLdMode,
- pSiteMgr->numOfBeaconFiltering));
- }
- }
- if (lowPriorityTimeout != 0)
- {
- #ifdef NO_HAL_VOB
- whalCtrl_setLowPriorityTimeout(pSiteMgr->hHalCtrl,
- lowPriorityTimeout);
- #endif
- }
- else
- {
- WLAN_REPORT_ERROR(pSiteMgr->hReport,
- SITE_MGR_MODULE_LOG,
- ("illegal lowPriorityTimeout (=%d), configuration ABORTED!\n",lowPriorityTimeout));
- }
- }
- #endif