1981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* 2981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * regulatoryDomain.c 3981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * 4981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * Copyright(c) 1998 - 2009 Texas Instruments. All rights reserved. 5981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * All rights reserved. 6981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * 7981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * Redistribution and use in source and binary forms, with or without 8981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * modification, are permitted provided that the following conditions 9981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * are met: 10981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * 11981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * * Redistributions of source code must retain the above copyright 12981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * notice, this list of conditions and the following disclaimer. 13981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * * Redistributions in binary form must reproduce the above copyright 14981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * notice, this list of conditions and the following disclaimer in 15981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * the documentation and/or other materials provided with the 16981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * distribution. 17981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * * Neither the name Texas Instruments nor the names of its 18981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * contributors may be used to endorse or promote products derived 19981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * from this software without specific prior written permission. 20981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * 21981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 24981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 25981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 26981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 27981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 31981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt */ 33981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 34981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/** \file regulatoryDomain.c 35981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * \brief regulatoryDomain module interface 36981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * 37981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * \see regulatoryDomain.h 38981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt */ 39981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 40981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/************************************************************************************************/ 41981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* */ 42981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* MODULE: regulatoryDomain.c */ 43981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* PURPOSE: regulatoryDomain module interface. */ 44981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* This module calculated the channel that should be scanned and that are */ 45981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* supported. Moreover, he set the transmit power level according to the */ 46981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* regulatory domain requirements and the supported channel. */ 47981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* */ 48981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/************************************************************************************************/ 49981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#define __FILE_ID__ FILE_ID_3 50981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "report.h" 51981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "osApi.h" 52981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "paramOut.h" 53981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "regulatoryDomain.h" 54981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "regulatoryDomainApi.h" 55981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "TWDriver.h" 56981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "siteMgrApi.h" 57981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "SwitchChannelApi.h" 58981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "DrvMainModules.h" 59981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "TWDriver.h" 60981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 61981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 62981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* Mask for retrieving the TxPower from the Scan Control Table */ 63981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#define MASK_TX_POWER (0x1f) /* bits 0-4 indicates MaxTxPower */ 64981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#define MASK_ACTIVE_ALLOWED (0x40) /* bit 6 indiactes the channel is allowed for Active scan */ 65981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#define MASK_FREQ_ALLOWED (0x80) /* bit 7 indicates the cahnnel is allowed*/ 66981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 67981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#define CHANNEL_VALIDITY_TS_THRESHOLD 10000 /* 10 sec */ 68981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 69981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* 70981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* Small macro to convert Dbm units into Dbm/10 units. This macro is important 71981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* in order to avoid over-flow of Dbm units bigger than 25 72981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*/ 73981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#define DBM2DBMDIV10(uTxPower) \ 74981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt ((uTxPower) > (MAX_TX_POWER / DBM_TO_TX_POWER_FACTOR) ? \ 75981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt MAX_TX_POWER : (uTxPower) * DBM_TO_TX_POWER_FACTOR) 76981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 77981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 78981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/********************************************************************************/ 79981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* Internal functions prototypes. */ 80981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/********************************************************************************/ 81981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtstatic TI_STATUS regulatoryDomain_updateCurrTxPower(regulatoryDomain_t *pRegulatoryDomain); 82981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 83981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtstatic void regulatoryDomain_setChannelValidity(regulatoryDomain_t *pRegulatoryDomain, 84981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT16 channelNum, TI_BOOL channelValidity); 85981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 86981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtstatic TI_STATUS setSupportedChannelsAccording2CountryIe(regulatoryDomain_t *pRegulatoryDomain, TCountry* pCountry, TI_BOOL band_2_4); 87981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 88981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtstatic void setSupportedChannelsAccording2ScanControlTable(regulatoryDomain_t *pRegulatoryDomain); 89981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 90981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtstatic TI_STATUS regulatoryDomain_getChannelCapability(regulatoryDomain_t *pRegulatoryDomain, 91981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelCapabilityReq_t channelCapabilityReq, 92981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelCapabilityRet_t *channelCapabilityRet); 93981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 94981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtstatic void regulatoryDomain_updateChannelsTs(regulatoryDomain_t *pRegulatoryDomain, TI_UINT8 channel); 95981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 96981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtstatic void regulatoryDomain_buildDefaultListOfChannelsPerBand(regulatoryDomain_t *pRegulatoryDomain, ERadioBand band, TI_UINT8 *listSize); 97981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 98981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtstatic void regulatoryDomain_checkCountryCodeExpiry(regulatoryDomain_t *pRegulatoryDomain); 99981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 100981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtstatic TI_BOOL regulatoryDomain_isChannelSupprted(regulatoryDomain_t *pRegulatoryDomain, TI_UINT8 channel); 101981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 102981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtstatic TI_BOOL regulatoryDomain_isCountryFound(regulatoryDomain_t *pRegulatoryDomain, ERadioBand radioBand); 103981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 104981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtstatic void regulatoryDomain_getPowerTableMinMax (regulatoryDomain_t *pRegulatoryDomain, 105981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt powerCapability_t *pPowerCapability); 106981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 107981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtstatic TI_UINT8 regulatoryDomain_getMaxPowerAllowed(regulatoryDomain_t *pRegulatoryDomain, 108981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT8 uChannel, 109981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt ERadioBand eBand, 110981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_BOOL bServingChannel); 111981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 112981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/********************************************************************************/ 113981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* Interface functions Implementation. */ 114981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/********************************************************************************/ 115981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 116981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 117981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/************************************************************************ 118981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * regulatoryDomain_create * 119981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt ************************************************************************ 120981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtDESCRIPTION: regulatoryDomain module creation function, called by the config mgr in creation phase 121981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt performs the following: 122981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt - Allocate the regulatoryDomain handle 123981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 124981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtINPUT: hOs - Handle to OS 125981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 126981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 127981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtOUTPUT: 128981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 129981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtRETURN: Handle to the regulatoryDomain module on success, NULL otherwise 130981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 131981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt************************************************************************/ 132981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_HANDLE regulatoryDomain_create(TI_HANDLE hOs) 133981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 134981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt regulatoryDomain_t *pRegulatoryDomain = NULL; 135981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 136981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* allocating the regulatoryDomain object */ 137981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain = os_memoryAlloc(hOs,sizeof(regulatoryDomain_t)); 138981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 139981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pRegulatoryDomain == NULL) 140981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return NULL; 141981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 142981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return(pRegulatoryDomain); 143981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 144981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 145981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 146981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/************************************************************************ 147981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * regulatoryDomain_init * 148981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt ************************************************************************ 149981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtDESCRIPTION: Module init function, Called by the DrvMain in init phase 150981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt performs the following: 151981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt - Reset & initializes local variables 152981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt - Init the handles to be used by the module 153981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 154981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtINPUT: pStadHandles - List of handles to be used by the module 155981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 156981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtOUTPUT: 157981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 158981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtRETURN: void 159981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt************************************************************************/ 160981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtvoid regulatoryDomain_init (TStadHandlesList *pStadHandles) 161981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 162981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt regulatoryDomain_t *pRegulatoryDomain = (regulatoryDomain_t *)(pStadHandles->hRegulatoryDomain); 163981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 164981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* init variables */ 165981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->country_2_4_WasFound = TI_FALSE; 166981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->country_5_WasFound = TI_FALSE; 167981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->uExternTxPowerPreferred = MAX_TX_POWER; /* i.e. no restriction */ 168981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->uPowerConstraint = MIN_TX_POWER; /* i.e. no restriction */ 169981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 170981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Init handlers */ 171981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->hSiteMgr = pStadHandles->hSiteMgr; 172981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->hTWD = pStadHandles->hTWD; 173981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->hReport = pStadHandles->hReport; 174981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->hOs = pStadHandles->hOs; 175981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->hSwitchChannel = pStadHandles->hSwitchChannel; 176981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 177981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 178981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 179981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/************************************************************************ 180981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * regulatoryDomain_SetDefaults * 181981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt ************************************************************************ 182981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtDESCRIPTION: regulatoryDomain module configuration function, called by the config mgr in configuration phase 183981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt performs the following: 184981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt - Reset & initializes local variables 185981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt - Init the handles to be used by the module 186981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 187981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtINPUT: hRegulatoryDomain - regulatoryDomain handle 188981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt List of handles to be used by the module 189981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomainInitParams - Init table of the module. 190981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 191981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 192981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtOUTPUT: 193981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 194981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtRETURN: TI_OK on success, TI_NOK otherwise 195981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 196981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt************************************************************************/ 197981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS regulatoryDomain_SetDefaults (TI_HANDLE hRegulatoryDomain, 198981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt regulatoryDomainInitParams_t *pRegulatoryDomainInitParams) 199981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 200981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt regulatoryDomain_t *pRegulatoryDomain = (regulatoryDomain_t *)hRegulatoryDomain; 201981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 202981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* User max Tx power for all channels */ 203981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->uUserMaxTxPower = pRegulatoryDomainInitParams->desiredTxPower; 204981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Temporary Tx Power control to be used */ 205981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->uTemporaryTxPower = pRegulatoryDomainInitParams->uTemporaryTxPower; 206981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->uDesiredTemporaryTxPower = pRegulatoryDomainInitParams->uTemporaryTxPower; 207981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 208981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* 209981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * Indicate the time in which the STA didn't receive any country code and was not connected, and therefore 210981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * will delete its current country code 211981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt */ 212981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->uTimeOutToResetCountryMs = pRegulatoryDomainInitParams->uTimeOutToResetCountryMs; 213981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->uLastCountryReceivedTS = 0; 214981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 215981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->regulatoryDomainEnabled = pRegulatoryDomainInitParams->multiRegulatoryDomainEnabled; 216981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->spectrumManagementEnabled = pRegulatoryDomainInitParams->spectrumManagementEnabled; 217981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pRegulatoryDomain->spectrumManagementEnabled == TI_TRUE) 218981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 219981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->regulatoryDomainEnabled = TI_TRUE; 220981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 221981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 222981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Getting the desired Control Table contents for 2.4 Ghz*/ 223981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt os_memoryCopy(pRegulatoryDomain->hOs, 224981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt (void *)pRegulatoryDomain->scanControlTable.ScanControlTable24.tableString, 225981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt (void *)pRegulatoryDomainInitParams->desiredScanControlTable.ScanControlTable24.tableString, 226981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt NUM_OF_CHANNELS_24 * sizeof(TI_INT8)); 227981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 228981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Getting the desired Control Table contents for 5 Ghz*/ 229981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt os_memoryCopy(pRegulatoryDomain->hOs, 230981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt (void *)pRegulatoryDomain->scanControlTable.ScanControlTable5.tableString, 231981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt (void *)pRegulatoryDomainInitParams->desiredScanControlTable.ScanControlTable5.tableString, 232981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt A_5G_BAND_NUM_CHANNELS * sizeof(TI_INT8)); 233981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 234981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt setSupportedChannelsAccording2ScanControlTable(pRegulatoryDomain); 235981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 236981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->minDFS_channelNum = A_5G_BAND_MIN_MIDDLE_BAND_DFS_CHANNEL; 237981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->maxDFS_channelNum = A_5G_BAND_MAX_UPPER_BAND_DFS_CHANNEL; 238981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 239981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTRACE0(pRegulatoryDomain->hReport, REPORT_SEVERITY_INIT, ".....Regulatory domain configured successfully\n"); 240981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 241981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 242981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 243981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 244981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS regulatoryDomain_setParam(TI_HANDLE hRegulatoryDomain, 245981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt paramInfo_t *pParam) 246981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 247981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt regulatoryDomain_t *pRegulatoryDomain = (regulatoryDomain_t *)hRegulatoryDomain; 248981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 249981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 250981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt switch(pParam->paramType) 251981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 252981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case REGULATORY_DOMAIN_COUNTRY_PARAM: 253981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 254981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_BOOL bBand_2_4; 255981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 256981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Sanity check */ 257981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (NULL == pParam->content.pCountry) 258981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 259981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE0(pRegulatoryDomain->hReport, REPORT_SEVERITY_ERROR, "regulatoryDomain_setParam, REGULATORY_DOMAIN_COUNTRY_PARAM is set with NULL pointer"); 260981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 261981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 262981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 263981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else /* Update country code and supported channels */ 264981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 265981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt bBand_2_4 = siteMgr_isCurrentBand24(pRegulatoryDomain->hSiteMgr); 266981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 267981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Setting the CountryIE for every Band */ 268981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt setSupportedChannelsAccording2CountryIe(pRegulatoryDomain, pParam->content.pCountry, bBand_2_4); 269981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 270981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 271981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 272981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 273981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case REGULATORY_DOMAIN_SET_POWER_CONSTRAINT_PARAM: 274981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 275981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Update only if 11h enabled */ 276981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pRegulatoryDomain->spectrumManagementEnabled) 277981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 278981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Convert to RegDomain units */ 279981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT8 uNewPowerConstraint = DBM2DBMDIV10(pParam->content.powerConstraint); 280981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 281981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTRACE2(pRegulatoryDomain->hReport, REPORT_SEVERITY_INFORMATION, "SET_POWER_CONSTRAINT Old= %d New = %d (Only if bigger...)\n", pRegulatoryDomain->uPowerConstraint, uNewPowerConstraint); 282981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 283981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Update powerConstraint */ 284981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if ( pRegulatoryDomain->uPowerConstraint != uNewPowerConstraint ) 285981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 286981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->uPowerConstraint = uNewPowerConstraint; 287981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Set new Tx power to TWD - only if needed ! */ 288981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt regulatoryDomain_updateCurrTxPower(pRegulatoryDomain); 289981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 290981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 291981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 292981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 293981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case REGULATORY_DOMAIN_EXTERN_TX_POWER_PREFERRED: 294981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* ExternTxPowerPreferred is the TX Power Control (TPC) */ 295981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 296981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Convert to RegDomain units */ 297981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT8 uNewTPC = DBM2DBMDIV10(pParam->content.ExternTxPowerPreferred); 298981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 299981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTRACE2(pRegulatoryDomain->hReport, REPORT_SEVERITY_INFORMATION, "REGULATORY_DOMAIN_EXTERN_TX_POWER_PREFERRED Old= %d New = %d\n", pRegulatoryDomain->uExternTxPowerPreferred, uNewTPC); 300981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 301981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if ( uNewTPC != pRegulatoryDomain->uExternTxPowerPreferred ) 302981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 303981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->uExternTxPowerPreferred = uNewTPC; 304981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Set new Tx power to TWD - only if needed ! */ 305981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt regulatoryDomain_updateCurrTxPower(pRegulatoryDomain); 306981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 307981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 308981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 309981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 310981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case REGULATORY_DOMAIN_SET_CHANNEL_VALIDITY: 311981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Set channel as Valid or Invalid for Active SCAN only. 312981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt Mainly used by DFS when Switch Channel is active */ 313981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt regulatoryDomain_setChannelValidity(pRegulatoryDomain, pParam->content.channelValidity.channelNum, 314981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.channelValidity.channelValidity); 315981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 316981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 317981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case REGULATORY_DOMAIN_CURRENT_TX_POWER_IN_DBM_PARAM: 318981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* This case is called when the desired Tx Power Level in Dbm is changed by the user */ 319981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if(pRegulatoryDomain->uUserMaxTxPower != pParam->content.desiredTxPower) 320981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 321981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->uUserMaxTxPower = pParam->content.desiredTxPower; 322981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Set new Tx power to TWD - only if needed ! */ 323981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt regulatoryDomain_updateCurrTxPower(pRegulatoryDomain); 324981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 325981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 326981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 327981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 328981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case REGULATORY_DOMAIN_TX_POWER_AFTER_SELECTION_PARAM: 329981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Called after joining BSS, set Tx power to TWD */ 330981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 331981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE0(pRegulatoryDomain->hReport, REPORT_SEVERITY_INFORMATION, "regulatoryDomain_setParam, REGULATORY_DOMAIN_TX_POWER_AFTER_SELECTION_PARAM \n"); 332981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 333981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* setting the Tx Power according to the selected channel */ 334981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt regulatoryDomain_updateCurrTxPower(pRegulatoryDomain); 335981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 336981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 337981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 338981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case REGULATORY_DOMAIN_DISCONNECT_PARAM: 339981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE0(pRegulatoryDomain->hReport, REPORT_SEVERITY_INFORMATION, "regulatoryDomain_setParam, REGULATORY_DOMAIN_DISCONNECT_PARAM\n"); 340981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 341981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->uExternTxPowerPreferred = MAX_TX_POWER; /* i.e. no restriction */ 342981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->uPowerConstraint = MIN_TX_POWER; /* i.e. no restriction */ 343981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 344981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Update the last time a country code was used. 345981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt After uTimeOutToResetCountryMs the country code will be deleted */ 346981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pRegulatoryDomain->country_2_4_WasFound || pRegulatoryDomain->country_5_WasFound) 347981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 348981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->uLastCountryReceivedTS = os_timeStampMs(pRegulatoryDomain->hOs); 349981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 350981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 351981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 352981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case REGULATORY_DOMAIN_UPDATE_CHANNEL_VALIDITY: 353981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt regulatoryDomain_updateChannelsTs(pRegulatoryDomain, pParam->content.channel); 354981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 355981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 356981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case REGULATORY_DOMAIN_TEMPORARY_TX_ATTENUATION_PARAM: 357981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Temporary Tx Power control */ 358981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTRACE1(pRegulatoryDomain->hReport, REPORT_SEVERITY_INFORMATION, "regulatoryDomain_setParam: temporary fix = %d, \n", pParam->content.bActivateTempPowerFix); 359981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 360981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->bTemporaryTxPowerEnable = pParam->content.bActivateTempPowerFix; 361981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 362981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt regulatoryDomain_updateCurrTxPower(pRegulatoryDomain); 363981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 364981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 365981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 366981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case REGULATORY_DOMAIN_ENABLE_DISABLE_802_11D: 367981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE1(pRegulatoryDomain->hReport, REPORT_SEVERITY_INFORMATION, "regulatoryDomain_setParam, REGULATORY_DOMAIN_ENABLE_DISABLE_802_11D = %d, \n", pParam->content.enableDisable_802_11d); 368981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 369981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if ((pRegulatoryDomain->regulatoryDomainEnabled != pParam->content.enableDisable_802_11d) && 370981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt !pParam->content.enableDisable_802_11d && pRegulatoryDomain->spectrumManagementEnabled) 371981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { /* Disable of 802_11d, is not allowed when 802_11h is enabled */ 372981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE0(pRegulatoryDomain->hReport, REPORT_SEVERITY_ERROR, "regulatoryDomain_setParam, Disable of 802_11d, is not allowed when 802_11h is enabled \n"); 373981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 374981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 375981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 376981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->regulatoryDomainEnabled = pParam->content.enableDisable_802_11d; 377981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 378981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Mark that no country was found - applies for both enabling and disabling of 11d */ 379981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->country_2_4_WasFound = TI_FALSE; 380981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->country_5_WasFound = TI_FALSE; 381981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 382981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (!pRegulatoryDomain->regulatoryDomainEnabled) 383981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { /* Set regulatory Domain according to scan control table */ 384981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt setSupportedChannelsAccording2ScanControlTable(pRegulatoryDomain); 385981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 386981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 387981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 388981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 389981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case REGULATORY_DOMAIN_ENABLE_DISABLE_802_11H: 390981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE1(pRegulatoryDomain->hReport, REPORT_SEVERITY_INFORMATION, "regulatoryDomain_setParam, REGULATORY_DOMAIN_ENABLE_DISABLE_802_11H = %d, \n", pParam->content.enableDisable_802_11h); 391981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 392981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->spectrumManagementEnabled = pParam->content.enableDisable_802_11h; 393981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pParam->content.enableDisable_802_11h) 394981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { /* If 802_11h is enabled, enable 802_11d as well */ 395981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->regulatoryDomainEnabled = TI_TRUE; 396981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 397981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt switchChannel_enableDisableSpectrumMngmt(pRegulatoryDomain->hSwitchChannel, pRegulatoryDomain->spectrumManagementEnabled); 398981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 399981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 400981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case REGULATORY_DOMAIN_COUNTRY_2_4_PARAM: 401981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* NOTE !!! use this feature carefully. */ 402981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE1(pRegulatoryDomain->hReport, REPORT_SEVERITY_INFORMATION, "regulatoryDomain_setParam, REGULATORY_DOMAIN_COUNTRY_2_4_PARAM Len = %d, \n", pParam->paramLength); 403981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 404981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE_INFO_HEX(pRegulatoryDomain->hReport, (TI_UINT8*)pParam->content.pCountry, sizeof(TCountry)); 405981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 406981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return setSupportedChannelsAccording2CountryIe(pRegulatoryDomain, pParam->content.pCountry, TI_TRUE); 407981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 408981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case REGULATORY_DOMAIN_COUNTRY_5_PARAM: 409981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* NOTE !!! use this feature carefully */ 410981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return setSupportedChannelsAccording2CountryIe(pRegulatoryDomain, pParam->content.pCountry, TI_FALSE); 411981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 412981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 413981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case REGULATORY_DOMAIN_DFS_CHANNELS_RANGE: 414981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE2(pRegulatoryDomain->hReport, REPORT_SEVERITY_INFORMATION, "regulatoryDomain_setParam, DFS_CHANNELS_RANGE, min = %d, max = %d, \n", pParam->content.DFS_ChannelRange.minDFS_channelNum, pParam->content.DFS_ChannelRange.maxDFS_channelNum); 415981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 416981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if ((pParam->content.DFS_ChannelRange.minDFS_channelNum<A_5G_BAND_MIN_CHANNEL) || 417981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt (pParam->content.DFS_ChannelRange.maxDFS_channelNum>A_5G_BAND_MAX_CHANNEL) || 418981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.DFS_ChannelRange.minDFS_channelNum > pParam->content.DFS_ChannelRange.maxDFS_channelNum) 419981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 420981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE2(pRegulatoryDomain->hReport, REPORT_SEVERITY_ERROR, "regulatoryDomain_setParam, Bad DFS_CHANNELS_RANGE, min = %d, max = %d, \n", pParam->content.DFS_ChannelRange.minDFS_channelNum, pParam->content.DFS_ChannelRange.maxDFS_channelNum); 421981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 422981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 423981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->minDFS_channelNum = (TI_UINT8)pParam->content.DFS_ChannelRange.minDFS_channelNum; 424981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->maxDFS_channelNum = (TI_UINT8)pParam->content.DFS_ChannelRange.maxDFS_channelNum; 425981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 426981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 427981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 428981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt default: 429981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTRACE1(pRegulatoryDomain->hReport, REPORT_SEVERITY_ERROR, "Set param, Params is not supported, %d\n\n", pParam->paramType); 430981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return PARAM_NOT_SUPPORTED; 431981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 432981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 433981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 434981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 435981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 436981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS regulatoryDomain_getParam(TI_HANDLE hRegulatoryDomain, 437981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt paramInfo_t *pParam) 438981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 439981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt regulatoryDomain_t *pRegulatoryDomain = (regulatoryDomain_t *)hRegulatoryDomain; 440981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 441981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Check if country code is still valid */ 442981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt regulatoryDomain_checkCountryCodeExpiry(pRegulatoryDomain); 443981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 444981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt switch(pParam->paramType) 445981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 446981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 447981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case REGULATORY_DOMAIN_TX_POWER_LEVEL_TABLE_PARAM: 448981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 449981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TFwInfo *pFwInfo = TWD_GetFWInfo (pRegulatoryDomain->hTWD); 450981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt os_memoryCopy(pRegulatoryDomain->hOs, 451981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt (void *)&pParam->content.powerLevelTable, 452981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt (void *)pFwInfo->txPowerTable, 453981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt sizeof(pFwInfo->txPowerTable)); 454981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 455981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 456981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 457981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case REGULATORY_DOMAIN_MANAGEMENT_CAPABILITY_ENABLED_PARAM: 458981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.spectrumManagementEnabled = pRegulatoryDomain->spectrumManagementEnabled; 459981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 460981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 461981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case REGULATORY_DOMAIN_ENABLED_PARAM: 462981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.regulatoryDomainEnabled = pRegulatoryDomain->regulatoryDomainEnabled; 463981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 464981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 465981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case REGULATORY_DOMAIN_GET_SCAN_CAPABILITIES: 466981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 467981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelCapabilityReq_t channelCapabilityReq; 468981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 469981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelCapabilityReq.band = pParam->content.channelCapabilityReq.band; 470981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelCapabilityReq.channelNum = pParam->content.channelCapabilityReq.channelNum; 471981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelCapabilityReq.scanOption = pParam->content.channelCapabilityReq.scanOption; 472981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 473981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt regulatoryDomain_getChannelCapability(pRegulatoryDomain, channelCapabilityReq, &pParam->content.channelCapabilityRet); 474981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 475981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 476981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 477981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case REGULATORY_DOMAIN_POWER_CAPABILITY_PARAM: 478981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* power capability is only applicable when spectrum management is active (802.11h) */ 479981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if(pRegulatoryDomain->spectrumManagementEnabled) 480981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 481981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt regulatoryDomain_getPowerTableMinMax (pRegulatoryDomain, &pParam->content.powerCapability); 482981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 483981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 484981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 485981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 486981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 487981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 488981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 489981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case REGULATORY_DOMAIN_IS_CHANNEL_SUPPORTED: 490981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* checking if the channel is supported */ 491981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.bIsChannelSupprted = 492981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt regulatoryDomain_isChannelSupprted(pRegulatoryDomain, pParam->content.channel); 493981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 494981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 495981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 496981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case REGULATORY_DOMAIN_ALL_SUPPORTED_CHANNELS: 497981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 498981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt ERadioBand band = pParam->content.siteMgrRadioBand; 499981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt regulatoryDomain_buildDefaultListOfChannelsPerBand(pRegulatoryDomain, band, &pParam->content.supportedChannels.sizeOfList); 500981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.supportedChannels.listOfChannels = pRegulatoryDomain->pDefaultChannels; 501981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 502981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 503981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 504981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case REGULATORY_DOMAIN_CURRENT_TX_POWER_IN_DBM_PARAM: 505981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 506981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 507981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TTwdParamInfo tparam; 508981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Get last configured Tx power from TWD */ 509981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt tparam.paramType = TWD_TX_POWER_PARAM_ID; 510981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TWD_GetParam(pRegulatoryDomain->hTWD, &tparam); 511981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 512981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.desiredTxPower = tparam.content.halCtrlTxPowerDbm; 513981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 514981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTRACE1(pRegulatoryDomain->hReport, REPORT_SEVERITY_INFORMATION, "regulatoryDomain_getParam, CURRENT_TX_POWER_IN_DBM = %d\n", pParam->content.desiredTxPower); 515981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 516981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 517981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 518981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 519981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case REGULATORY_DOMAIN_COUNTRY_PARAM: 520981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 521981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* This case is used as an inner function of the driver to retrieve the full IE of the country */ 522981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_BOOL bBand_2_4 = siteMgr_isCurrentBand24(pRegulatoryDomain->hSiteMgr); 523981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 524981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (bBand_2_4) 525981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 526981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pRegulatoryDomain->country_2_4_WasFound) 527981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 528981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.pCountry = &pRegulatoryDomain->country24; 529981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 530981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else /* Do not use the Inforamtion */ 531981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 532981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.pCountry = NULL; 533981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 534981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } /* band 5.0 */ 535981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 536981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 537981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pRegulatoryDomain->country_5_WasFound) 538981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 539981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.pCountry = &pRegulatoryDomain->country5; 540981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 541981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else /* Do not use the Inforamtion */ 542981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 543981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.pCountry = NULL; 544981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 545981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 546981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 547981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 548981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 549981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case REGULATORY_DOMAIN_COUNTRY_2_4_PARAM: 550981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Getting only country string */ 551981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 552981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pRegulatoryDomain->country_2_4_WasFound) 553981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 554981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt os_memoryCopy(pRegulatoryDomain->hOs, (void*)pParam->content.pCountryString, (void*)pRegulatoryDomain->country24.countryIE.CountryString, DOT11_COUNTRY_STRING_LEN); 555981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 556981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 557981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 558981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.pCountryString[0] = '\0'; 559981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 560981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 561981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 562981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case REGULATORY_DOMAIN_COUNTRY_5_PARAM: 563981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Getting only country string */ 564981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 565981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pRegulatoryDomain->country_5_WasFound) 566981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 567981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt os_memoryCopy(pRegulatoryDomain->hOs, (void*)pParam->content.pCountryString, (void*)pRegulatoryDomain->country5.countryIE.CountryString, DOT11_COUNTRY_STRING_LEN); 568981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 569981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 570981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 571981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.pCountryString[0] = '\0'; 572981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 573981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 574981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 575981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case REGULATORY_DOMAIN_DFS_CHANNELS_RANGE: 576981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE2(pRegulatoryDomain->hReport, REPORT_SEVERITY_INFORMATION, "regulatoryDomain_getParam, DFS_CHANNELS_RANGE, min = %d, max = %d, \n", pRegulatoryDomain->minDFS_channelNum, pRegulatoryDomain->maxDFS_channelNum); 577981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.DFS_ChannelRange.minDFS_channelNum = pRegulatoryDomain->minDFS_channelNum; 578981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.DFS_ChannelRange.maxDFS_channelNum = pRegulatoryDomain->maxDFS_channelNum; 579981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 580981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 581981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 582981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case REGULATORY_DOMAIN_IS_COUNTRY_FOUND: 583981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 584981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.bIsCountryFound = 585981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt regulatoryDomain_isCountryFound(pRegulatoryDomain, pParam->content.eRadioBand); 586981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 587981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 588981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 589981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case REGULATORY_DOMAIN_IS_DFS_CHANNEL: 590981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 591981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if ((pRegulatoryDomain->spectrumManagementEnabled) && /* 802.11h is enabled */ 592981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt (RADIO_BAND_5_0_GHZ == pParam->content.tDfsChannel.eBand) && /* band is 5 GHz */ 593981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt (pRegulatoryDomain->minDFS_channelNum <= pParam->content.tDfsChannel.uChannel) && /* channel is within DFS range */ 594981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt (pRegulatoryDomain->maxDFS_channelNum >= pParam->content.tDfsChannel.uChannel)) 595981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 596981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.tDfsChannel.bDfsChannel = TI_TRUE; 597981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 598981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 599981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 600981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.tDfsChannel.bDfsChannel = TI_FALSE; 601981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 602981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 603981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 604981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case REGULATORY_DOMAIN_TIME_TO_COUNTRY_EXPIRY: 605981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* if a country was found for either band */ 606981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if ((pRegulatoryDomain->country_2_4_WasFound) || (pRegulatoryDomain->country_5_WasFound)) 607981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 608023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt paramInfo_t *tParam; 609981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS connStatus; 610981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT32 uCurrentTS = os_timeStampMs (pRegulatoryDomain->hOs); 611981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 612023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt tParam = (paramInfo_t *)os_memoryAlloc(pRegulatoryDomain->hOs, sizeof(paramInfo_t)); 613023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt if (!tParam) 614023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt return TI_NOK; 615981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 616023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt /* Get connection status */ 617023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt tParam->paramType = SITE_MGR_CURRENT_SSID_PARAM; 618023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt connStatus = siteMgr_getParam (pRegulatoryDomain->hSiteMgr, tParam); 619023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt os_memoryFree(pRegulatoryDomain->hOs, tParam, sizeof(paramInfo_t)); 620981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* if we are connected, return 0 */ 621981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (connStatus != NO_SITE_SELECTED_YET) 622981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 623981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.uTimeToCountryExpiryMs = 0; 624981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 625981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 626981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 627981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* 628981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * if country already expired (shouldn't happen as we are checking it at the top of 629981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * get_param, but just in case... 630981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt */ 631981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if ((uCurrentTS - pRegulatoryDomain->uLastCountryReceivedTS) > pRegulatoryDomain->uTimeOutToResetCountryMs) 632981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 633981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.uTimeToCountryExpiryMs = 0; 634981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 635981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 636981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 637981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.uTimeToCountryExpiryMs = 638981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->uTimeOutToResetCountryMs - (uCurrentTS - pRegulatoryDomain->uLastCountryReceivedTS); 639981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 640981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 641981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 642981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 643981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 644981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.uTimeToCountryExpiryMs = 0; 645981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 646981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 647981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 648981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt default: 649acd89e8f547322db23ab0f7c3775082654c4b13bDmitry Shmidt TRACE1(pRegulatoryDomain->hReport, REPORT_SEVERITY_WARNING, "Get param, Params is not supported, %d\n\n", pParam->paramType); 650981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return PARAM_NOT_SUPPORTED; 651981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 652981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 653981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 654981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 655981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 656981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/************************************************************************ 657981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * regulatoryDomain_destroy * 658981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt ************************************************************************ 659981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtDESCRIPTION: regulatoryDomain module destroy function, called by the config mgr in the destroy phase 660981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt performs the following: 661981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt - Free all memory allocated by the module 662981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 663981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtINPUT: hRegulatoryDomain - regulatoryDomain handle. 664981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 665981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 666981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtOUTPUT: 667981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 668981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtRETURN: TI_OK on success, TI_NOK otherwise 669981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 670981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt************************************************************************/ 671981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS regulatoryDomain_destroy(TI_HANDLE hRegulatoryDomain) 672981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 673981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt regulatoryDomain_t *pRegulatoryDomain = (regulatoryDomain_t *)hRegulatoryDomain; 674981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 675981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pRegulatoryDomain == NULL) 676981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 677981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 678981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt os_memoryFree(pRegulatoryDomain->hOs, pRegulatoryDomain, sizeof(regulatoryDomain_t)); 679981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 680981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 681981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 682981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 683981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/************************************************************************ 684981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * regulatoryDomain_isCountryFound * 685981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt ************************************************************************ 686981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtDESCRIPTION: This function returns the validity of Country according to band 687981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 688981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtINPUT: hRegulatoryDomain - regulatoryDomain handle. 689981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt radioBand - the desired band 690981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 691981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 692981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtOUTPUT: 693981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 694981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtRETURN: TI_TRUE - if country IE was found according to the band. 695981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_FALSE - otherwise. 696981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 697981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt************************************************************************/ 698981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_BOOL regulatoryDomain_isCountryFound(regulatoryDomain_t *pRegulatoryDomain, ERadioBand radioBand) 699981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 700981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 701981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if(radioBand == RADIO_BAND_2_4_GHZ) 702981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 703981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return pRegulatoryDomain->country_2_4_WasFound; 704981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 705981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 706981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 707981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return pRegulatoryDomain->country_5_WasFound; 708981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 709981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 710981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 711981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 712981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/*********************************************************************** 713981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * setSupportedChannelsAccording2CountryIe 714981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *********************************************************************** 715981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtDESCRIPTION: Called when beacon/Probe Response with Country IE 716981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt is found. 717981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt The function sets the local countryIE per band with the CountryIE 718981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt that was detected in the last passive scan. 719981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt It is assumed that only one Country IE per band is allowed. 720981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt If Country is changed when the TNET is loaded, it should 721981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt be re-loaded in order to re-config the new Country domain. 722981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 723981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtINPUT: hRegulatoryDomain - RegulatoryDomain handle. 724981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pCountry - pointer to the detected country IE. 725981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 726981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtOUTPUT: 727981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 728981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtRETURN: TI_OK - New country code was set (or the same one was already configured) 729981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_NOK - The new country code could not be set 730981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 731981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt************************************************************************/ 732981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtstatic TI_STATUS setSupportedChannelsAccording2CountryIe(regulatoryDomain_t *pRegulatoryDomain, TCountry* pCountry, TI_BOOL band_2_4) 733981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 734981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelCapability_t *pSupportedChannels; 735981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT8 channelIndex; 736981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT8 tripletChannelIndex, tripletChannelCnt; 737981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT8 channelStep, numberOfChannels, minChannelNumber, maxChannelNumber; 738981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 739981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 740981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (!pRegulatoryDomain->regulatoryDomainEnabled) 741981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { /* Ignore the Country IE if 802.11d is disabled */ 742981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 743981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 744981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 745981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Check if the country code should be reset */ 746981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt regulatoryDomain_checkCountryCodeExpiry(pRegulatoryDomain); 747981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 748981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if( band_2_4 == TI_TRUE ) 749981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 750981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pRegulatoryDomain->country_2_4_WasFound) 751981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { /* Do not update new Country IE */ 752981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (os_memoryCompare(pRegulatoryDomain->hOs, (void *)&pCountry->countryIE, (void *)&pRegulatoryDomain->country24.countryIE, sizeof(dot11_countryIE_t))) 753981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 754981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTRACE0(pRegulatoryDomain->hReport, REPORT_SEVERITY_WARNING, "setSupportedChannelsAccording2CountryIe different Country, cur=, new=\n"); 755981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 756981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 757981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else /* Same IE - just mark the TS and return TI_OK */ 758981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 759981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Mark the time of the received country IE */ 760981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->uLastCountryReceivedTS = os_timeStampMs(pRegulatoryDomain->hOs); 761981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 762981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 763981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 764981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->country_2_4_WasFound = TI_TRUE; 765981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pSupportedChannels = pRegulatoryDomain->supportedChannels_band_2_4; 766981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelStep = BG_24G_BAND_CHANNEL_HOPS; 767981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt maxChannelNumber = NUM_OF_CHANNELS_24; 768981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt minChannelNumber = BG_24G_BAND_MIN_CHANNEL; 769981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt numberOfChannels = NUM_OF_CHANNELS_24; 770981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* save the country IE */ 771981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt os_memoryCopy(pRegulatoryDomain->hOs, (void*)&pRegulatoryDomain->country24, (void *)pCountry, sizeof(TCountry)); 772981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 773981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE3(pRegulatoryDomain->hReport, REPORT_SEVERITY_INFORMATION, "Country 2.4 =%c%c%c\n",pRegulatoryDomain->country24.countryIE.CountryString[0], pRegulatoryDomain->country24.countryIE.CountryString[1], pRegulatoryDomain->country24.countryIE.CountryString[2]); 774981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 775981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 776981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else /* band 5.0 */ 777981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 778981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pRegulatoryDomain->country_5_WasFound) 779981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { /* Do not update new Country IE if the IE is the same*/ 780981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (os_memoryCompare(pRegulatoryDomain->hOs, (void *)&pCountry->countryIE, (void *)&pRegulatoryDomain->country5.countryIE, sizeof(dot11_countryIE_t))) 781981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 782981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTRACE0(pRegulatoryDomain->hReport, REPORT_SEVERITY_WARNING, "setSupportedChannelsAccording2CountryIe different Country, cur=, new=\n"); 783981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 784981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 785981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else /* Same IE - just mark the TS and return TI_OK */ 786981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 787981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Mark the time of the received country IE */ 788981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->uLastCountryReceivedTS = os_timeStampMs(pRegulatoryDomain->hOs); 789981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 790981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 791981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 792981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->country_5_WasFound = TI_TRUE; 793981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pSupportedChannels = pRegulatoryDomain->supportedChannels_band_5; 794981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelStep = A_5G_BAND_CHANNEL_HOPS; 795981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt maxChannelNumber = A_5G_BAND_MAX_CHANNEL; 796981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt minChannelNumber = A_5G_BAND_MIN_CHANNEL; 797981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt numberOfChannels = A_5G_BAND_NUM_CHANNELS; 798981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* save the country IE */ 799981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt os_memoryCopy(pRegulatoryDomain->hOs, (void*)&pRegulatoryDomain->country5, (void*)pCountry, sizeof(TCountry)); 800981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 801981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE3(pRegulatoryDomain->hReport, REPORT_SEVERITY_INFORMATION, "Country 5 =%c%c%c\n",pRegulatoryDomain->country5.countryIE.CountryString[0], pRegulatoryDomain->country5.countryIE.CountryString[1], pRegulatoryDomain->country5.countryIE.CountryString[2]); 802981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 803981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 804981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* 805981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * New Country IE was saved. Now - update the last received TS and ScanControlTable 806981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt */ 807981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 808981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Mark the time of the received country IE */ 809981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->uLastCountryReceivedTS = os_timeStampMs(pRegulatoryDomain->hOs); 810981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 811981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* First clear the validity of all channels 812981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt Overwrite the ScanControlTable */ 813981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt for (channelIndex=0; channelIndex<numberOfChannels; channelIndex++) 814981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 815981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pSupportedChannels[channelIndex].channelValidityActive = TI_FALSE; 816981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pSupportedChannels[channelIndex].channelValidityPassive = TI_FALSE; 817981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pSupportedChannels[channelIndex].bChanneInCountryIe = TI_FALSE; 818981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pSupportedChannels[channelIndex].uMaxTxPowerDomain = MIN_TX_POWER; 819981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 820981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 821981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt tripletChannelCnt = (pCountry->len - DOT11_COUNTRY_STRING_LEN) / 3; 822981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* set validity of the channels according to the band (2.4 or 5) */ 823981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt for( tripletChannelIndex = 0; tripletChannelIndex < tripletChannelCnt ; tripletChannelIndex++) 824981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 825981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT8 firstChannelNumInTriplet; 826981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 827981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt firstChannelNumInTriplet = pCountry->countryIE.tripletChannels[tripletChannelIndex].firstChannelNumber; 828981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTRACE2(pRegulatoryDomain->hReport, REPORT_SEVERITY_INFORMATION, "firstChannelNumInTriplet=%d,channelStep=%d\n", firstChannelNumInTriplet, channelStep); 829981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt for (channelIndex=0; channelIndex<pCountry->countryIE.tripletChannels[tripletChannelIndex].numberOfChannels; channelIndex++) 830981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 831981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT16 channelNumber; 832981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 833981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelNumber = firstChannelNumInTriplet+(channelIndex*channelStep); 834981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTRACE1(pRegulatoryDomain->hReport, REPORT_SEVERITY_INFORMATION, "setSupportedChannelsAccording2CountryIe of channel=%d\n", channelNumber); 835981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 836981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (channelNumber <= maxChannelNumber) 837981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 838981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT8 channelIndex4Band; 839981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 840981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelIndex4Band = (channelNumber-minChannelNumber); 841981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pSupportedChannels[channelIndex4Band].bChanneInCountryIe = TI_TRUE; 842981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pSupportedChannels[channelIndex4Band].channelValidityPassive = TI_TRUE; 843981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pSupportedChannels[channelIndex4Band].channelValidityActive = TI_TRUE; 844981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 845981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* set the TX power in DBM/10 units */ 846981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pSupportedChannels[channelIndex4Band].uMaxTxPowerDomain = 847981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt DBM2DBMDIV10(pCountry->countryIE.tripletChannels[tripletChannelIndex].maxTxPowerLevel); 848981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 849981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTRACE2(pRegulatoryDomain->hReport, REPORT_SEVERITY_INFORMATION, "channel = %d uMaxTxPowerDomain=%d\n", channelNumber, pSupportedChannels[channelIndex4Band].uMaxTxPowerDomain); 850981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 851981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 852981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 853981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 854981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 855981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 856981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 857981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 858981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/*********************************************************************** 859981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * regulatoryDomain_isChannelSupprted 860981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *********************************************************************** 861981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtDESCRIPTION: The function checks if the input channel is supported. 862981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 863981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtINPUT: pRegulatoryDomain - RegulatoryDomain pointer. 864981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channel - Channel number. 865981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 866981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 867981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtOUTPUT: 868981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 869981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtRETURN: TI_OK if channel is supported, TI_NOK otherwise. 870981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 871981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt************************************************************************/ 872981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtstatic TI_BOOL regulatoryDomain_isChannelSupprted(regulatoryDomain_t *pRegulatoryDomain, TI_UINT8 channel) 873981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 874981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT8 channelIndex; 875981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelCapability_t *pSupportedChannels; 876981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 877981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pRegulatoryDomain==NULL) 878981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 879981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_FALSE; 880981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 881981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 882981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if ((channel<BG_24G_BAND_MIN_CHANNEL) || (channel>A_5G_BAND_MAX_CHANNEL)) 883981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 884981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_FALSE; 885981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 886981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (channel>=A_5G_BAND_MIN_CHANNEL) 887981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 888981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelIndex = (channel-A_5G_BAND_MIN_CHANNEL); 889981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pSupportedChannels = pRegulatoryDomain->supportedChannels_band_5; 890981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 891981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 892981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 893981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelIndex = (channel-BG_24G_BAND_MIN_CHANNEL); 894653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt if (channelIndex >= NUM_OF_CHANNELS_24) 895653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt { 896653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt TRACE1(pRegulatoryDomain->hReport, REPORT_SEVERITY_ERROR, 897653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt "regulatoryDomain_isChannelSupprted(): 2.4G invalid channel # %u\n", channel ); 898653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt return TI_FALSE; 899653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt } 900981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pSupportedChannels = pRegulatoryDomain->supportedChannels_band_2_4; 901981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 902981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pRegulatoryDomain->spectrumManagementEnabled 903981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt && (channel >= pRegulatoryDomain->minDFS_channelNum) 904981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt && (channel <= pRegulatoryDomain->maxDFS_channelNum) 905981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt && ((os_timeStampMs(pRegulatoryDomain->hOs)-pSupportedChannels[channelIndex].timestamp) >=CHANNEL_VALIDITY_TS_THRESHOLD )) 906981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { /* If 802.11h is enabled, a DFS channel is valid only for 10 sec 907981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt from the last Beacon/ProbeResponse */ 908981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pSupportedChannels[channelIndex].channelValidityActive = TI_FALSE; 909981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE1(pRegulatoryDomain->hReport, REPORT_SEVERITY_INFORMATION, "regulatoryDomain_isChannelSupprted(): CHANNEL_VALIDITY_TS_THRESHOLD !! Disable channel no %d, DFS channel\n", channel ); 910981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 911981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 912981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 913981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return (pSupportedChannels[channelIndex].channelValidityActive); 914981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 915981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 916981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 917981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/************************************************************************ 918981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * regulatoryDomain_setChannelValidity * 919981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt ************************************************************************/ 920981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* 921981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 922981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 923981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b Description: 924981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 925981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* This function sets a channel as invalid or valid in the internal Regulatory Domain 926981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * database. 927981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 928981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b ARGS: 929981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 930981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* I - pData - pointer to the regDoamin SM context \n 931981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* I - channelNum - the invalid/valid channel number 932981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* I - channelValidity - TI_TRUE if channel is valid, TI_FALSE channel is invalid 933981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 934981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b RETURNS: 935981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 936981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* None. 937981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 938981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 939981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*************************************************************************/ 940981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtstatic void regulatoryDomain_setChannelValidity(regulatoryDomain_t *pRegulatoryDomain, 941981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT16 channelNum, TI_BOOL channelValidity) 942981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 943981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelCapability_t *pSupportedChannels; 944981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT8 channelIndex; 945981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 946981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 947981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pRegulatoryDomain == NULL) 948981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 949981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return; 950981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 951981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if ((channelNum==0 ) || (channelNum>A_5G_BAND_MAX_CHANNEL)) 952981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 953981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTRACE1(pRegulatoryDomain->hReport, REPORT_SEVERITY_ERROR, "regulatoryDomain_setChannelValidity, invalid channelNum=%d \n", channelNum); 954981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return; 955981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 956981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 957981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (channelNum <= NUM_OF_CHANNELS_24) 958981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 959981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pSupportedChannels = pRegulatoryDomain->supportedChannels_band_2_4; 960981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelIndex = (channelNum-BG_24G_BAND_MIN_CHANNEL); 961981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 962981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 963981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 964981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pSupportedChannels = pRegulatoryDomain->supportedChannels_band_5; 965981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelIndex = (channelNum - A_5G_BAND_MIN_CHANNEL); 966981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 967981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 968981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if(channelValidity == TI_TRUE) 969981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if((pSupportedChannels[channelIndex].bChanneInCountryIe == TI_FALSE) && (pRegulatoryDomain->regulatoryDomainEnabled == TI_TRUE)) 970981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 971981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTRACE1(pRegulatoryDomain->hReport, REPORT_SEVERITY_WARNING, "regulatoryDomain_setChannelValidity: channelNum = %d isn't supported at the Country. wll not set to active!\n", channelNum); 972981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return; 973981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 974981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 975981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE2(pRegulatoryDomain->hReport, REPORT_SEVERITY_INFORMATION, "regulatoryDomain_setChannelValidity: channelNum=%d, validity=%d \n", channelNum, channelValidity); 976981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 977981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 978981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pSupportedChannels[channelIndex].channelValidityActive = channelValidity; 979981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 980981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 981981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 982981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/************************************************************************ 983981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * setSupportedChannelsAccording2ScanControlTable * 984981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt ************************************************************************/ 985981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/** 986981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 987981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 988981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b Description: 989981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 990981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* This function is called in config and sets the supported channels according to 991981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* the scan control table read from registry and reg domain read from the chip. 992981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 993981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b ARGS: 994981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 995981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* I - pRegulatoryDomain - pointer to the regDoamin SM context \n 996981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 997981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b RETURNS: 998981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 999981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* None. 1000981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 1001981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 1002981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*************************************************************************/ 1003981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtstatic void setSupportedChannelsAccording2ScanControlTable(regulatoryDomain_t *pRegulatoryDomain) 1004981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 1005981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT8 channelIndex; 1006981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT8 channelMask; 1007981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1008981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pRegulatoryDomain==NULL) 1009981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1010981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return; 1011981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1012981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1013981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE0(pRegulatoryDomain->hReport, REPORT_SEVERITY_INFORMATION, "setSupportedChannelsAccording2ScanControlTable \n"); 1014981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1015981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt for (channelIndex=0; channelIndex<NUM_OF_CHANNELS_24; channelIndex++) 1016981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1017981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelMask = pRegulatoryDomain->scanControlTable.ScanControlTable24.tableString[channelIndex]; 1018981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->supportedChannels_band_2_4[channelIndex].bChanneInCountryIe = TI_FALSE; 1019981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1020981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Calculate Domain Tx Power - channelMask units are in Dbm. */ 1021981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->supportedChannels_band_2_4[channelIndex].uMaxTxPowerDomain = 1022981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt DBM2DBMDIV10(channelMask & MASK_TX_POWER); 1023981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (channelMask & (MASK_ACTIVE_ALLOWED | MASK_FREQ_ALLOWED)) 1024981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { /* The channel is allowed for Active & Passive scans */ 1025981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pRegulatoryDomain->regulatoryDomainEnabled) 1026981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { /* All channels should be invalid for Active scan */ 1027981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->supportedChannels_band_2_4[channelIndex].channelValidityActive = TI_FALSE; 1028981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE1(pRegulatoryDomain->hReport, REPORT_SEVERITY_INFORMATION, "channelIndex=%d is invalid for Active \n", channelIndex+1); 1029981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1030981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 1031981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1032981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->supportedChannels_band_2_4[channelIndex].channelValidityActive = TI_TRUE; 1033981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE1(pRegulatoryDomain->hReport, REPORT_SEVERITY_INFORMATION, "channelIndex=%d is Active valid \n", channelIndex+1); 1034981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1035981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1036981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1037981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1038981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (channelMask & MASK_FREQ_ALLOWED) 1039981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { /* The channel is allowed for Passive scan */ 1040981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->supportedChannels_band_2_4[channelIndex].channelValidityPassive = TI_TRUE; 1041981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE1(pRegulatoryDomain->hReport, REPORT_SEVERITY_INFORMATION, "channelIndex=%d is Passive valid \n", channelIndex+1); 1042981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1043981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 1044981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { /* The channel is not allowed */ 1045981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->supportedChannels_band_2_4[channelIndex].channelValidityPassive = TI_FALSE; 1046981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->supportedChannels_band_2_4[channelIndex].channelValidityActive = TI_FALSE; 1047981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1048981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1049981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1050981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt for (channelIndex=A_5G_BAND_MIN_CHANNEL; channelIndex<A_5G_BAND_MAX_CHANNEL; channelIndex++) 1051981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1052981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT8 channelIndexInBand5; 1053981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1054981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelIndexInBand5 = (channelIndex-A_5G_BAND_MIN_CHANNEL); 1055981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelMask = pRegulatoryDomain->scanControlTable.ScanControlTable5.tableString[channelIndexInBand5]; 1056981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE3(pRegulatoryDomain->hReport, REPORT_SEVERITY_INFORMATION, "channelIndex=%d, channelIndexInBand5=%d channelMask=%d\n", channelIndex, channelIndexInBand5, channelMask); 1057981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1058981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Calculate Domain Tx Power - channelMask units are in Dbm. */ 1059981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->supportedChannels_band_5[channelIndexInBand5].uMaxTxPowerDomain = 1060981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt DBM2DBMDIV10(channelMask & MASK_TX_POWER); 1061981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1062981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->supportedChannels_band_5[channelIndexInBand5].bChanneInCountryIe = TI_FALSE; 1063981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (channelMask & (MASK_ACTIVE_ALLOWED | MASK_FREQ_ALLOWED)) 1064981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { /* The channel is allowed for Active & Passive scans */ 1065981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pRegulatoryDomain->regulatoryDomainEnabled) 1066981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { /* All channels should be invalid for Active scan */ 1067981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->supportedChannels_band_5[channelIndexInBand5].channelValidityActive = TI_FALSE; 1068981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE1(pRegulatoryDomain->hReport, REPORT_SEVERITY_INFORMATION, "channelIndex=%d is invalid for Active \n", channelIndex); 1069981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1070981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 1071981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1072981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->supportedChannels_band_5[channelIndexInBand5].channelValidityActive = TI_TRUE; 1073981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE2(pRegulatoryDomain->hReport, REPORT_SEVERITY_INFORMATION, "channelIndex=%d, channelIndexInBand5=%d, is Active valid \n", channelIndex, channelIndexInBand5); 1074981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1075981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1076981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1077981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (channelMask & MASK_FREQ_ALLOWED) 1078981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { /* The channel is allowed for Passive scan */ 1079981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->supportedChannels_band_5[channelIndexInBand5].channelValidityPassive = TI_TRUE; 1080981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE2(pRegulatoryDomain->hReport, REPORT_SEVERITY_INFORMATION, "channelIndex=%d, channelIndexInBand5=%d, is Passive valid \n", channelIndex, channelIndexInBand5); 1081981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1082981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 1083981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { /* The channel is not allowed */ 1084981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->supportedChannels_band_5[channelIndexInBand5].channelValidityPassive = TI_FALSE; 1085981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->supportedChannels_band_5[channelIndexInBand5].channelValidityActive = TI_FALSE; 1086981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1087981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1088981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1089981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 1090981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1091981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1092981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/*********************************************************************** 1093981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* regulatoryDomain_getChannelCapability 1094981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*********************************************************************** 1095981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtDESCRIPTION: This function returns the channel capability information 1096981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1097981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtINPUT: pRegulatoryDomain - RegulatoryDomain pointer. 1098981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelCapabilityReq - Channels parameters 1099981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1100981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1101981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtOUTPUT: channelCapabilityRet - Channel capability information 1102981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1103981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtRETURN: TI_OK if information was retrieved, TI_NOK otherwise. 1104981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1105981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt************************************************************************/ 1106981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtstatic TI_STATUS regulatoryDomain_getChannelCapability(regulatoryDomain_t *pRegulatoryDomain, 1107981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelCapabilityReq_t channelCapabilityReq, 1108981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelCapabilityRet_t *channelCapabilityRet) 1109981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 1110981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelCapability_t *pSupportedChannels; 1111023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt TI_UINT8 channelIndex; 1112981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_BOOL bCountryWasFound, bServingChannel; 1113023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt paramInfo_t *pParam; 1114981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1115981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if ((pRegulatoryDomain == NULL) || (channelCapabilityRet == NULL)) 1116981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1117981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1118981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1119023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt 1120981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelCapabilityRet->channelValidity = TI_FALSE; 1121981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelCapabilityRet->maxTxPowerDbm = 0; 1122981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if ((channelCapabilityReq.channelNum==0 ) || (channelCapabilityReq.channelNum > A_5G_BAND_MAX_CHANNEL)) 1123981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1124981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE1(pRegulatoryDomain->hReport, REPORT_SEVERITY_ERROR, "regulatoryDomain_getChannelCapability, invalid channelNum=%d \n", channelCapabilityReq.channelNum); 1125981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1126981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1127981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1128981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (channelCapabilityReq.band==RADIO_BAND_2_4_GHZ) 1129981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1130981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pSupportedChannels = pRegulatoryDomain->supportedChannels_band_2_4; 1131981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelIndex = (channelCapabilityReq.channelNum-BG_24G_BAND_MIN_CHANNEL); 1132653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt if (channelIndex >= NUM_OF_CHANNELS_24) 1133653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt { 1134653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt TRACE1(pRegulatoryDomain->hReport, REPORT_SEVERITY_ERROR, 1135653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt "regulatoryDomain_getChannelCapability(): 2.4G invalid channel # %u\n", channelCapabilityReq.channelNum ); 1136653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt return TI_NOK; 1137653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt } 1138981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt bCountryWasFound = pRegulatoryDomain->country_2_4_WasFound; 1139981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1140981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else if (channelCapabilityReq.band==RADIO_BAND_5_0_GHZ) 1141981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1142981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pSupportedChannels = pRegulatoryDomain->supportedChannels_band_5; 1143981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelIndex = (channelCapabilityReq.channelNum - A_5G_BAND_MIN_CHANNEL); 1144653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt if (channelIndex >= A_5G_BAND_NUM_CHANNELS) 1145653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt { 1146653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt TRACE1(pRegulatoryDomain->hReport, REPORT_SEVERITY_ERROR, 1147653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt "regulatoryDomain_getChannelCapability(): 5G invalid channel # %u\n", channelCapabilityReq.channelNum); 1148653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt return TI_NOK; 1149653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt } 1150981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt bCountryWasFound = pRegulatoryDomain->country_5_WasFound; 1151981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1152981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 1153981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1154653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt TRACE1(pRegulatoryDomain->hReport, REPORT_SEVERITY_ERROR, "regulatoryDomain_getChannelCapability, invalid band=%d \n", channelCapabilityReq.band); 1155981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1156981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1157981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1158981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1159981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* 1160981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * Set channelValidity according to ScanTable and whether 11d is enabled 1161981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt */ 1162981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (channelCapabilityReq.scanOption == ACTIVE_SCANNING) 1163981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1164981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if ( ( pRegulatoryDomain->regulatoryDomainEnabled ) && ( !bCountryWasFound ) ) 1165981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { /* 11d enabled and no country IE was found - set channel to invalid */ 1166981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelCapabilityRet->channelValidity = TI_FALSE; 1167981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1168981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 1169981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1170023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt 1171023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt pParam = (paramInfo_t *)os_memoryAlloc(pRegulatoryDomain->hOs, sizeof(paramInfo_t)); 1172023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt if (!pParam) 1173023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt return TI_NOK; 1174023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt 1175023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt channelCapabilityRet->channelValidity = pSupportedChannels[channelIndex].channelValidityActive; 1176981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* 1177981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * Set Maximum Tx power for the channel - only for active scanning 1178981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt */ 1179981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1180981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Get current channel and check if we are using the same one */ 1181023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt pParam->paramType = SITE_MGR_CURRENT_CHANNEL_PARAM; 1182023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt siteMgr_getParam(pRegulatoryDomain->hSiteMgr, pParam); 1183981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1184023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt bServingChannel = ( pParam->content.siteMgrCurrentChannel == channelCapabilityReq.channelNum ? 1185981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_TRUE : TI_FALSE ); 1186981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1187981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelCapabilityRet->maxTxPowerDbm = regulatoryDomain_getMaxPowerAllowed(pRegulatoryDomain, 1188981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelCapabilityReq.channelNum, 1189981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelCapabilityReq.band, 1190981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt bServingChannel); 1191023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt os_memoryFree(pRegulatoryDomain->hOs, pParam, sizeof(paramInfo_t)); 1192981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1193981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1194981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else /* Passive scanning */ 1195981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1196981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if ( ( pRegulatoryDomain->regulatoryDomainEnabled ) && ( !bCountryWasFound ) ) 1197981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { /* 11d enabled and no country IE was found - set channel to valid for passive scan */ 1198981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelCapabilityRet->channelValidity = TI_TRUE; 1199981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1200981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 1201981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1202981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelCapabilityRet->channelValidity = pSupportedChannels[channelIndex].channelValidityPassive; 1203981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1204981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1205981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1206981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pRegulatoryDomain->spectrumManagementEnabled 1207981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt && (channelCapabilityReq.scanOption == ACTIVE_SCANNING) 1208981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt && (channelCapabilityReq.channelNum >= pRegulatoryDomain->minDFS_channelNum) 1209981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt && (channelCapabilityReq.channelNum <= pRegulatoryDomain->maxDFS_channelNum) 1210981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt && ((os_timeStampMs(pRegulatoryDomain->hOs)-pSupportedChannels[channelIndex].timestamp) >=CHANNEL_VALIDITY_TS_THRESHOLD )) 1211981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { /* If 802.11h is enabled, a DFS channel is valid only for 10 sec 1212981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt from the last Beacon/ProbeResponse */ 1213981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pSupportedChannels[channelIndex].channelValidityActive = TI_FALSE; 1214981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelCapabilityRet->channelValidity = TI_FALSE; 1215981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE1(pRegulatoryDomain->hReport, REPORT_SEVERITY_INFORMATION, "regulatoryDomain_getChannelCapability(): CHANNEL_VALIDITY_TS_THRESHOLD !!! Disable channel no %d, DFS channel\n", channelCapabilityReq.channelNum ); 1216981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1217981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1218981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE4(pRegulatoryDomain->hReport, REPORT_SEVERITY_INFORMATION, " Channel num= %d, scan option=%d validity = %d, TX power = %d \n", channelCapabilityReq.channelNum, channelCapabilityReq.scanOption, channelCapabilityRet->channelValidity, channelCapabilityRet->maxTxPowerDbm); 1219981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 1220981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1221981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 1222981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1223981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1224981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtstatic void regulatoryDomain_updateChannelsTs(regulatoryDomain_t *pRegulatoryDomain, TI_UINT8 channel) 1225981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 1226981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT8 channelIndex; 1227981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelCapability_t *pSupportedChannels; 1228981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1229981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pRegulatoryDomain==NULL) 1230981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1231981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return; 1232981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1233981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1234981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if ((channel<BG_24G_BAND_MIN_CHANNEL) || (channel>A_5G_BAND_MAX_CHANNEL)) 1235981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1236981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return; 1237981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1238981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1239981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (channel>=A_5G_BAND_MIN_CHANNEL) 1240981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1241981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelIndex = (channel-A_5G_BAND_MIN_CHANNEL); 1242981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pSupportedChannels = pRegulatoryDomain->supportedChannels_band_5; 1243981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1244981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 1245981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1246981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelIndex = (channel-BG_24G_BAND_MIN_CHANNEL); 1247653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt if (channelIndex >= NUM_OF_CHANNELS_24) 1248653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt { 1249653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt TRACE1(pRegulatoryDomain->hReport, REPORT_SEVERITY_ERROR, 1250653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt "regulatoryDomain_updateChannelsTs(): 2.4G invalid channel # %u\n", channel ); 1251653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt return; 1252653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt } 1253981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pSupportedChannels = pRegulatoryDomain->supportedChannels_band_2_4; 1254981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1255981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1256981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if((pSupportedChannels[channelIndex].bChanneInCountryIe == TI_FALSE) && (pRegulatoryDomain->regulatoryDomainEnabled == TI_TRUE)) 1257981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1258653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt TRACE1(pRegulatoryDomain->hReport, REPORT_SEVERITY_WARNING, "regulatoryDomain_updateChannelsTs: channelNum = %d isn't supported at the Country. wll not set to active!\n", channel); 1259981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return; 1260981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1261981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1262981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pSupportedChannels[channelIndex].timestamp = os_timeStampMs(pRegulatoryDomain->hOs); 1263981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pSupportedChannels[channelIndex].channelValidityActive = TI_TRUE; 1264981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1265981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 1266981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1267981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/*********************************************************************** 1268981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * regulatoryDomain_updateCurrTxPower 1269981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *********************************************************************** 1270981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtDESCRIPTION: Called when new Tx power should be calculated and configured. 1271981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt Check if we are already joined to BSS/IBSS, calculate 1272981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt new Tx power and configure it to TWD. 1273981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1274981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtINPUT: pRegulatoryDomain - regulatoryDomain pointer. 1275981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1276981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtRETURN: TI_OK - New value was configured to TWD, TI_NOK - Can't configure value 1277981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TX_POWER_SET_SAME_VALUE - Same value was already configured. 1278981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1279981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt************************************************************************/ 1280981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtstatic TI_STATUS regulatoryDomain_updateCurrTxPower(regulatoryDomain_t *pRegulatoryDomain) 1281981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 1282023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt paramInfo_t *pParam; 1283981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS eStatus; 1284023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt TTwdParamInfo ttparam; 1285023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt TI_UINT8 uCurrChannel, uNewTxPower; 1286023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt 1287023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt pParam = (paramInfo_t *)os_memoryAlloc(pRegulatoryDomain->hOs, sizeof(paramInfo_t)); 1288023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt if (!pParam) 1289023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt return TI_NOK; 1290981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1291981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Get the current channel, and update TWD with the changed */ 1292023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt pParam->paramType = SITE_MGR_CURRENT_CHANNEL_PARAM; 1293023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt eStatus = siteMgr_getParam(pRegulatoryDomain->hSiteMgr, pParam); 1294981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1295981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if ( eStatus != TI_OK ) 1296981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1297981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* We are not joined yet - no meaning for new Tx power */ 1298023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt TRACE0(pRegulatoryDomain->hReport, REPORT_SEVERITY_INFORMATION, "regulatoryDomain_updateCurrTxPower, No site selected yet\n"); 1299023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt os_memoryFree(pRegulatoryDomain->hOs, pParam, sizeof(paramInfo_t)); 1300981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1301981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1302981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Save current channel */ 1303023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt uCurrChannel = pParam->content.siteMgrCurrentChannel; 1304981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1305981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Get the current channel, and update TWD with the changed */ 1306023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt pParam->paramType = SITE_MGR_RADIO_BAND_PARAM; 1307023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt siteMgr_getParam(pRegulatoryDomain->hSiteMgr, pParam); 1308981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1309981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Calculate maximum Tx power for the serving channel */ 1310981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt uNewTxPower = regulatoryDomain_getMaxPowerAllowed(pRegulatoryDomain, uCurrChannel, 1311023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt pParam->content.siteMgrRadioBand, TI_TRUE); 1312023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt os_memoryFree(pRegulatoryDomain->hOs, pParam, sizeof(paramInfo_t)); 1313981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Verify that the Temporary TX Power Control doesn't violate the TX Power Constraint */ 1314981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->uTemporaryTxPower = TI_MIN(pRegulatoryDomain->uDesiredTemporaryTxPower, uNewTxPower); 1315981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1316023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt TRACE1(pRegulatoryDomain->hReport, REPORT_SEVERITY_INFORMATION, "regulatoryDomain_updateCurrTxPower, Write to TWD = %d \n", uNewTxPower); 1317981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1318023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt ttparam.paramType = TWD_TX_POWER_PARAM_ID; 1319981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1320981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* set TWD according to Temporary Tx Power Enable flag */ 1321981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (TI_TRUE == pRegulatoryDomain->bTemporaryTxPowerEnable) 1322981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1323023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt ttparam.content.halCtrlTxPowerDbm = pRegulatoryDomain->uTemporaryTxPower; 1324981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1325981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 1326981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1327023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt ttparam.content.halCtrlTxPowerDbm = uNewTxPower; 1328981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1329023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt eStatus = TWD_SetParam(pRegulatoryDomain->hTWD, &ttparam); 1330023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt return eStatus; 1331981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 1332981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1333981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/*********************************************************************** 1334981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * regulatoryDomain_checkCountryCodeExpiry 1335981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *********************************************************************** 1336981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtDESCRIPTION: Check & Reset the country code that was detected earlier. 1337981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt Reseting country code will be done when the STA was not connected for 1338981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt a certain amount of time, and no country code was received in that period (from the same country). 1339981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt This scenario might indicate that the STA has moved to a different country. 1340981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1341981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtINPUT: pRegulatoryDomain - Regulatory Domain handle. 1342981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1343981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtOUTPUT: updating country code if necessary. 1344981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1345981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtRETURN: 1346981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1347981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt************************************************************************/ 1348981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtvoid regulatoryDomain_checkCountryCodeExpiry(regulatoryDomain_t *pRegulatoryDomain) 1349981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 1350023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt paramInfo_t *pParam; 1351981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS connStatus; 1352023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt TI_UINT32 uCurrentTS = os_timeStampMs(pRegulatoryDomain->hOs); 1353981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1354981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if ((pRegulatoryDomain->country_2_4_WasFound) || (pRegulatoryDomain->country_5_WasFound)) 1355981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1356023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt pParam = (paramInfo_t *)os_memoryAlloc(pRegulatoryDomain->hOs, sizeof(paramInfo_t)); 1357023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt if (!pParam) 1358023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt return; 1359981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Get connection status */ 1360023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt pParam->paramType = SITE_MGR_CURRENT_SSID_PARAM; 1361023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt connStatus = siteMgr_getParam(pRegulatoryDomain->hSiteMgr, pParam); 1362981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1363981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* If (uTimeOutToResetCountryMs has elapsed && we are not connected) 1364981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt delete the last country code received */ 1365981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (((uCurrentTS - pRegulatoryDomain->uLastCountryReceivedTS) > pRegulatoryDomain->uTimeOutToResetCountryMs) && 1366981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt (connStatus == NO_SITE_SELECTED_YET)) 1367981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1368981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE1(pRegulatoryDomain->hReport, REPORT_SEVERITY_INFORMATION, ", Reset country code after %d Ms\n",(uCurrentTS - pRegulatoryDomain->uLastCountryReceivedTS)); 1369981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1370981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Reset country codes */ 1371981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->country_2_4_WasFound = TI_FALSE; 1372981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->country_5_WasFound = TI_FALSE; 1373981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1374981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Restore default values of the scan control table */ 1375981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt setSupportedChannelsAccording2ScanControlTable(pRegulatoryDomain); 1376023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt } 1377023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt os_memoryFree(pRegulatoryDomain->hOs, pParam, sizeof(paramInfo_t)); 1378981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1379981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 1380981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1381981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/*********************************************************************** 1382981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* regulatoryDomain_getMaxPowerAllowed 1383981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*********************************************************************** 1384981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtDESCRIPTION: Get the maximum tx power allowed for the given channel. 1385981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt The final value is constructed by: 1386981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1) User max value 1387981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 2) Domain restriction - 11d country code IE 1388981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 3) 11h power constraint - only on serving channel 1389981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 4) XCC TPC - only on serving channel 1390981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1391981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtRETURN: Max power in Dbm/10 for the given channel 1392981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1393981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt************************************************************************/ 1394981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtstatic TI_UINT8 regulatoryDomain_getMaxPowerAllowed(regulatoryDomain_t *pRegulatoryDomain, 1395981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT8 uChannel, 1396981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt ERadioBand eBand, 1397981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_BOOL bServingChannel) 1398981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 1399981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelCapability_t *pSupportedChannels; 1400981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT8 uChannelIndex, uTxPower; 1401981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1402981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if( eBand == RADIO_BAND_2_4_GHZ) 1403981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1404981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pSupportedChannels = pRegulatoryDomain->supportedChannels_band_2_4; 1405981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt uChannelIndex = uChannel - BG_24G_BAND_MIN_CHANNEL; 1406981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1407981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 1408981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1409981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pSupportedChannels = pRegulatoryDomain->supportedChannels_band_5; 1410981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt uChannelIndex = uChannel - A_5G_BAND_MIN_CHANNEL; 1411981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1412981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1413981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* We'll start with the "Domain restriction - 11d country code IE" */ 1414981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt uTxPower = pSupportedChannels[uChannelIndex].uMaxTxPowerDomain; 1415981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1416981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if ( bServingChannel) 1417981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1418981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pRegulatoryDomain->uPowerConstraint < uTxPower) 1419981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1420981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* When 802.11h is disabled, uPowerConstraint is 0 anyway */ 1421981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt uTxPower -= pRegulatoryDomain->uPowerConstraint; 1422981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1423981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1424981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Take XCC limitation too */ 1425981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt uTxPower = TI_MIN(uTxPower, pRegulatoryDomain->uExternTxPowerPreferred); 1426981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1427981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1428981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1429981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Now make sure we are not exceeding the user maximum */ 1430981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt uTxPower = TI_MIN(uTxPower, pRegulatoryDomain->uUserMaxTxPower); 1431981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1432981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTRACE3(pRegulatoryDomain->hReport, REPORT_SEVERITY_INFORMATION, " uChannel = %d bServingChannel = %d uTxPower = %d \n", uChannel, bServingChannel, uTxPower); 1433981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1434981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return uTxPower; 1435981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 1436981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1437981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1438981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtstatic void regulatoryDomain_buildDefaultListOfChannelsPerBand(regulatoryDomain_t *pRegulatoryDomain, ERadioBand band, TI_UINT8 *listSize) 1439981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 1440981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT8 channelIndex; 1441981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT8 numberOfChannels, minChannelNumber; 1442981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelCapability_t *pSupportedChannels; 1443981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT8 maxSupportedChannels=0; 1444981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1445981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if ( (pRegulatoryDomain==NULL) || (listSize==NULL)) 1446981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1447981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return; 1448981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1449981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1450981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if( band == RADIO_BAND_2_4_GHZ) 1451981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1452981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt minChannelNumber = BG_24G_BAND_MIN_CHANNEL; 1453981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt numberOfChannels = NUM_OF_CHANNELS_24; 1454981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pSupportedChannels = pRegulatoryDomain->supportedChannels_band_2_4; 1455981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1456981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 1457981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1458981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt minChannelNumber = A_5G_BAND_MIN_CHANNEL; 1459981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt numberOfChannels = A_5G_BAND_NUM_CHANNELS; 1460981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pSupportedChannels = pRegulatoryDomain->supportedChannels_band_5; 1461981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1462981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1463981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1464981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt for (channelIndex=0; channelIndex<numberOfChannels; channelIndex++) 1465981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1466981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pSupportedChannels[channelIndex].channelValidityPassive) 1467981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1468981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->pDefaultChannels[maxSupportedChannels] = channelIndex+minChannelNumber; 1469981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTRACE1(pRegulatoryDomain->hReport, REPORT_SEVERITY_INFORMATION, "Channel num %d is supported \n", pRegulatoryDomain->pDefaultChannels[maxSupportedChannels]); 1470981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt maxSupportedChannels++; 1471981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1472981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1473981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1474981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *listSize = maxSupportedChannels; 1475981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1476981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 1477981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1478981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/*********************************************************************** 1479981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* regulatoryDomain_getPowerTableMinMax 1480981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*********************************************************************** 1481981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtDESCRIPTION: Find the Tx-power-level table min & max values. 1482981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt The table is made of 4 power levels and 5 bands/sub-bands. 1483981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1484981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtRETURN: void 1485981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt************************************************************************/ 1486981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtstatic void regulatoryDomain_getPowerTableMinMax (regulatoryDomain_t *pRegulatoryDomain, 1487981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt powerCapability_t *pPowerCapability) 1488981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 1489981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TFwInfo *pFwInfo = TWD_GetFWInfo (pRegulatoryDomain->hTWD); 1490981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT8 i; 1491981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1492981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Init the min (max) to the opposite edge so the table values are below (above) this edge */ 1493981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pPowerCapability->minTxPower = MAX_TX_POWER; 1494981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pPowerCapability->maxTxPower = MIN_TX_POWER; 1495981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1496981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Find Min and Max values of the table */ 1497981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt for (i = 0; i < NUMBER_OF_SUB_BANDS_E; i++) 1498981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1499981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pPowerCapability->minTxPower = TI_MIN (pPowerCapability->minTxPower, 1500981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pFwInfo->txPowerTable[i][NUM_OF_POWER_LEVEL-1]); 1501981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pPowerCapability->maxTxPower = TI_MAX (pPowerCapability->maxTxPower, 1502981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pFwInfo->txPowerTable[i][0]); 1503981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1504981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 1505981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1506981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* for debug */ 1507981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtvoid regDomainPrintValidTables(TI_HANDLE hRegulatoryDomain) 1508981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 1509981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt regulatoryDomain_t *pRegulatoryDomain = (regulatoryDomain_t *)hRegulatoryDomain; 1510981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT16 channelIndex; 1511981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1512981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt for (channelIndex=0; channelIndex<NUM_OF_CHANNELS_24; channelIndex++) 1513981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1514981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pRegulatoryDomain->supportedChannels_band_2_4[channelIndex].channelValidityPassive) 1515981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt WLAN_OS_REPORT(("channel num =%d is valid for passive \n", channelIndex+1)); 1516981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pRegulatoryDomain->supportedChannels_band_2_4[channelIndex].channelValidityActive) 1517981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1518981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt WLAN_OS_REPORT(("channel =%d is valid for active TX power=%d\n", 1519981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelIndex+1, pRegulatoryDomain->supportedChannels_band_2_4[channelIndex].uMaxTxPowerDomain)); 1520981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1521981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1522981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1523981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt for (channelIndex=0; channelIndex<A_5G_BAND_NUM_CHANNELS; channelIndex++) 1524981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1525981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT8 channelNum; 1526981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelNum = channelIndex+A_5G_BAND_MIN_CHANNEL; 1527981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pRegulatoryDomain->supportedChannels_band_5[channelIndex].channelValidityPassive) 1528981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt WLAN_OS_REPORT(("channel =%d is valid for passive \n", channelNum)); 1529981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pRegulatoryDomain->supportedChannels_band_5[channelIndex].channelValidityActive) 1530981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1531981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt WLAN_OS_REPORT(("channel =%d is valid for active TX power=%d\n", 1532981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt channelNum,pRegulatoryDomain->supportedChannels_band_5[channelIndex].uMaxTxPowerDomain)); 1533981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1534981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1535981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1536981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt WLAN_OS_REPORT(("11h PowerConstraint = %d, XCC TPC = %d, User = %d\n", 1537981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->uPowerConstraint, pRegulatoryDomain->uExternTxPowerPreferred, 1538981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRegulatoryDomain->uUserMaxTxPower)); 1539981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1540981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 1541