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