2 ** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/rlm_domain.h#1 $
5 /*! \file "rlm_domain.h"
12 ** $Log: rlm_domain.h $
16 * Change the function prototype of rlmDomainGetChnlList()
19 * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code
20 * Use new fields ucChannelListMap and ucChannelListIndex in NVRAM
23 * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code
27 * [WCXRP00000756] [MT6620 Wi-Fi][Driver] 1. AIS follow channel of BOW 2. Provide legal channel function
28 * Provide legal channel function based on domain
31 * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant
32 * 1. Country code is from NVRAM or supplicant
33 * 2. Change band definition in CMD/EVENT.
37 * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository.
40 * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver
41 * 1st draft code for RLM module
43 * 02 23 2010 kevin.huang
44 * [BORA00000603][WIFISYS] [New Feature] AAA Module Support
45 * Add support scan channel 1~14 and update scan result's frequency infou1rwduu`wvpghlqg|n`slk+mpdkb
48 * [BORA00000018]Integrate WIFI part into BORA for the 1st time
49 * Provide query function about full channle list.
52 * [BORA00000018] Integrate WIFI part into BORA for the 1st time
53 * Declare public rDomainInfo
61 /*******************************************************************************
62 * C O M P I L E R F L A G S
63 ********************************************************************************
66 /*******************************************************************************
67 * E X T E R N A L R E F E R E N C E S
68 ********************************************************************************
71 /*******************************************************************************
73 ********************************************************************************
75 #define MAX_SUBBAND_NUM 6
78 #define COUNTRY_CODE_NULL ((UINT_16)0x0)
80 /* ISO/IEC 3166-1 two-character country codes */
81 #define COUNTRY_CODE_AG (((UINT_16) 'A' << 8) | (UINT_16) 'G') /* Antigua/Barbuda */
82 #define COUNTRY_CODE_AI (((UINT_16) 'A' << 8) | (UINT_16) 'I') /* Anguilla */
83 #define COUNTRY_CODE_AR (((UINT_16) 'A' << 8) | (UINT_16) 'T') /* Argentina */
84 #define COUNTRY_CODE_AT (((UINT_16) 'A' << 8) | (UINT_16) 'T') /* Austria */
85 #define COUNTRY_CODE_AU (((UINT_16) 'A' << 8) | (UINT_16) 'U') /* Australia */
86 #define COUNTRY_CODE_AW (((UINT_16) 'A' << 8) | (UINT_16) 'W') /* Aruba */
87 #define COUNTRY_CODE_BB (((UINT_16) 'B' << 8) | (UINT_16) 'B') /* Barbados */
88 #define COUNTRY_CODE_BE (((UINT_16) 'B' << 8) | (UINT_16) 'E') /* Belgium */
89 #define COUNTRY_CODE_BM (((UINT_16) 'B' << 8) | (UINT_16) 'M') /* Bermuda */
90 #define COUNTRY_CODE_BO (((UINT_16) 'B' << 8) | (UINT_16) 'O') /* Bolivia */
91 #define COUNTRY_CODE_BR (((UINT_16) 'B' << 8) | (UINT_16) 'R') /* Brazil */
92 #define COUNTRY_CODE_BS (((UINT_16) 'B' << 8) | (UINT_16) 'S') /* Bahamas */
93 #define COUNTRY_CODE_BY (((UINT_16) 'B' << 8) | (UINT_16) 'Y') /* Belarus */
94 #define COUNTRY_CODE_CA (((UINT_16) 'C' << 8) | (UINT_16) 'A') /* Canada */
95 #define COUNTRY_CODE_CH (((UINT_16) 'C' << 8) | (UINT_16) 'H') /* Switzerland */
96 #define COUNTRY_CODE_CL (((UINT_16) 'C' << 8) | (UINT_16) 'L') /* Chile */
97 #define COUNTRY_CODE_CN (((UINT_16) 'C' << 8) | (UINT_16) 'N') /* China */
98 #define COUNTRY_CODE_CO (((UINT_16) 'C' << 8) | (UINT_16) 'O') /* Colombia */
99 #define COUNTRY_CODE_CR (((UINT_16) 'C' << 8) | (UINT_16) 'R') /* Costa Rica */
100 #define COUNTRY_CODE_CU (((UINT_16) 'C' << 8) | (UINT_16) 'U') /* Cuba */
101 #define COUNTRY_CODE_DE (((UINT_16) 'D' << 8) | (UINT_16) 'E') /* Germany */
102 #define COUNTRY_CODE_DK (((UINT_16) 'D' << 8) | (UINT_16) 'K') /* Denmark */
103 #define COUNTRY_CODE_DM (((UINT_16) 'D' << 8) | (UINT_16) 'M') /* Dominica */
104 #define COUNTRY_CODE_DO (((UINT_16) 'D' << 8) | (UINT_16) 'O') /* Dominican Republic */
105 #define COUNTRY_CODE_EC (((UINT_16) 'E' << 8) | (UINT_16) 'C') /* Ecuador */
106 #define COUNTRY_CODE_EG (((UINT_16) 'E' << 8) | (UINT_16) 'G') /* Egypt */
107 #define COUNTRY_CODE_ES (((UINT_16) 'E' << 8) | (UINT_16) 'S') /* Spain */
108 #define COUNTRY_CODE_EU (((UINT_16) 'E' << 8) | (UINT_16) 'U') /* ETSI (Europe) */
109 #define COUNTRY_CODE_FI (((UINT_16) 'F' << 8) | (UINT_16) 'I') /* Finland */
110 #define COUNTRY_CODE_FR (((UINT_16) 'F' << 8) | (UINT_16) 'R') /* France */
111 #define COUNTRY_CODE_GB (((UINT_16) 'G' << 8) | (UINT_16) 'B') /* United Kingdom */
112 #define COUNTRY_CODE_GD (((UINT_16) 'G' << 8) | (UINT_16) 'D') /* Grenada */
113 #define COUNTRY_CODE_GR (((UINT_16) 'G' << 8) | (UINT_16) 'R') /* Greece */
114 #define COUNTRY_CODE_GY (((UINT_16) 'G' << 8) | (UINT_16) 'Y') /* Guyana */
115 #define COUNTRY_CODE_HK (((UINT_16) 'H' << 8) | (UINT_16) 'K') /* Hong Kong */
116 #define COUNTRY_CODE_HT (((UINT_16) 'H' << 8) | (UINT_16) 'T') /* Haiti */
117 #define COUNTRY_CODE_HN (((UINT_16) 'H' << 8) | (UINT_16) 'N') /* Honduras */
118 #define COUNTRY_CODE_ID (((UINT_16) 'I' << 8) | (UINT_16) 'D') /* Indonesia */
119 #define COUNTRY_CODE_IE (((UINT_16) 'I' << 8) | (UINT_16) 'E') /* Ireland */
120 #define COUNTRY_CODE_IL (((UINT_16) 'I' << 8) | (UINT_16) 'L') /* Israel */
121 #define COUNTRY_CODE_IN (((UINT_16) 'I' << 8) | (UINT_16) 'N') /* India */
122 #define COUNTRY_CODE_IR (((UINT_16) 'I' << 8) | (UINT_16) 'R') /* Iran */
123 #define COUNTRY_CODE_IS (((UINT_16) 'I' << 8) | (UINT_16) 'S') /* Iceland */
124 #define COUNTRY_CODE_IT (((UINT_16) 'I' << 8) | (UINT_16) 'T') /* Italy */
125 #define COUNTRY_CODE_JM (((UINT_16) 'J' << 8) | (UINT_16) 'M') /* Jamaica */
126 #define COUNTRY_CODE_JO (((UINT_16) 'J' << 8) | (UINT_16) 'O') /* Jordan */
127 #define COUNTRY_CODE_JP (((UINT_16) 'J' << 8) | (UINT_16) 'P') /* Japan */
128 #define COUNTRY_CODE_KN (((UINT_16) 'K' << 8) | (UINT_16) 'N') /* Saint Kitts and Nevis */
129 #define COUNTRY_CODE_KR (((UINT_16) 'K' << 8) | (UINT_16) 'R') /* South Korea */
130 #define COUNTRY_CODE_KW (((UINT_16) 'K' << 8) | (UINT_16) 'W') /* Kuwait */
131 #define COUNTRY_CODE_LC (((UINT_16) 'L' << 8) | (UINT_16) 'C') /* Saint Lucia */
132 #define COUNTRY_CODE_LI (((UINT_16) 'L' << 8) | (UINT_16) 'I') /* Liechtenstein */
133 #define COUNTRY_CODE_LK (((UINT_16) 'L' << 8) | (UINT_16) 'K') /* Sri Lanka */
134 #define COUNTRY_CODE_LU (((UINT_16) 'L' << 8) | (UINT_16) 'U') /* Luxembourg */
135 #define COUNTRY_CODE_MA (((UINT_16) 'M' << 8) | (UINT_16) 'A') /* Morocco */
136 #define COUNTRY_CODE_MD (((UINT_16) 'M' << 8) | (UINT_16) 'D') /* Moldova */
137 #define COUNTRY_CODE_MX (((UINT_16) 'M' << 8) | (UINT_16) 'X') /* Mexico */
138 #define COUNTRY_CODE_MY (((UINT_16) 'M' << 8) | (UINT_16) 'Y') /* Malaysia */
139 #define COUNTRY_CODE_NI (((UINT_16) 'N' << 8) | (UINT_16) 'I') /* Nicaragua */
140 #define COUNTRY_CODE_NL (((UINT_16) 'N' << 8) | (UINT_16) 'L') /* Netherlands */
141 #define COUNTRY_CODE_NO (((UINT_16) 'N' << 8) | (UINT_16) 'O') /* Norway */
142 #define COUNTRY_CODE_NZ (((UINT_16) 'N' << 8) | (UINT_16) 'Z') /* New Zealand */
143 #define COUNTRY_CODE_OM (((UINT_16) 'O' << 8) | (UINT_16) 'M') /* Oman */
144 #define COUNTRY_CODE_PE (((UINT_16) 'P' << 8) | (UINT_16) 'E') /* Peru */
145 #define COUNTRY_CODE_PG (((UINT_16) 'P' << 8) | (UINT_16) 'G') /* Papua New Guinea */
146 #define COUNTRY_CODE_PH (((UINT_16) 'P' << 8) | (UINT_16) 'H') /* Philippines */
147 #define COUNTRY_CODE_PK (((UINT_16) 'P' << 8) | (UINT_16) 'K') /* Pakistan */
148 #define COUNTRY_CODE_PR (((UINT_16) 'P' << 8) | (UINT_16) 'R') /* Puerto Rico */
149 #define COUNTRY_CODE_PT (((UINT_16) 'P' << 8) | (UINT_16) 'T') /* Portugal */
150 #define COUNTRY_CODE_PY (((UINT_16) 'P' << 8) | (UINT_16) 'Y') /* Paraguay */
151 #define COUNTRY_CODE_PZ (((UINT_16) 'P' << 8) | (UINT_16) 'Z') /* Panama */
152 #define COUNTRY_CODE_RU (((UINT_16) 'R' << 8) | (UINT_16) 'U') /* Russian */
153 #define COUNTRY_CODE_SA (((UINT_16) 'S' << 8) | (UINT_16) 'A') /* Saudi Arabia */
154 #define COUNTRY_CODE_SE (((UINT_16) 'S' << 8) | (UINT_16) 'E') /* Sweden */
155 #define COUNTRY_CODE_SG (((UINT_16) 'S' << 8) | (UINT_16) 'G') /* Singapore */
156 #define COUNTRY_CODE_SR (((UINT_16) 'S' << 8) | (UINT_16) 'R') /* Suriname */
157 #define COUNTRY_CODE_TW (((UINT_16) 'T' << 8) | (UINT_16) 'W') /* Taiwan */
158 #define COUNTRY_CODE_TH (((UINT_16) 'T' << 8) | (UINT_16) 'H') /* Thailand */
159 #define COUNTRY_CODE_TR (((UINT_16) 'T' << 8) | (UINT_16) 'R') /* Turkey */
160 #define COUNTRY_CODE_TT (((UINT_16) 'T' << 8) | (UINT_16) 'T') /* Trinidad */
161 #define COUNTRY_CODE_UA (((UINT_16) 'U' << 8) | (UINT_16) 'A') /* Ukraine */
162 #define COUNTRY_CODE_US (((UINT_16) 'U' << 8) | (UINT_16) 'S') /* United States */
163 #define COUNTRY_CODE_UY (((UINT_16) 'U' << 8) | (UINT_16) 'Y') /* Uruguay */
164 #define COUNTRY_CODE_VC (((UINT_16) 'V' << 8) | (UINT_16) 'C') /* Saint Vincent */
165 #define COUNTRY_CODE_VE (((UINT_16) 'V' << 8) | (UINT_16) 'E') /* Venezuela */
166 #define COUNTRY_CODE_VN (((UINT_16) 'V' << 8) | (UINT_16) 'N') /* Vietnam */
168 /* dot11RegDomainsSupportValue */
169 #define MIB_REG_DOMAIN_FCC 0x10 /* FCC (US) */
170 #define MIB_REG_DOMAIN_IC 0x20 /* IC or DOC (Canada) */
171 #define MIB_REG_DOMAIN_ETSI 0x30 /* ETSI (Europe) */
172 #define MIB_REG_DOMAIN_SPAIN 0x31 /* Spain */
173 #define MIB_REG_DOMAIN_FRANCE 0x32 /* France */
174 #define MIB_REG_DOMAIN_JAPAN 0x40 /* MPHPT (Japan) */
175 #define MIB_REG_DOMAIN_OTHER 0x00 /* other */
178 /*******************************************************************************
180 ********************************************************************************
183 /* Define channel offset in unit of 5MHz bandwidth */
184 typedef enum _ENUM_CHNL_SPAN_T {
189 } ENUM_CHNL_SPAN_T, *P_ENUM_CHNL_SPAN_T;
191 /* Define BSS operating bandwidth */
192 typedef enum _ENUM_CHNL_BW_T {
197 } ENUM_CHNL_BW_T, *P_ENUM_CHNL_BW_T;
200 /* If channel width is CHNL_BW_20_40, the first channel will be SCA and
201 * the second channel is SCB, then iteratively.
202 * Note the final channel will not be SCA.
204 typedef struct _DOMAIN_SUBBAND_INFO {
207 ENUM_CHNL_SPAN_T eChannelSpan;
208 UINT_8 ucFirstChannelNum;
209 UINT_8 ucNumChannels;
210 ENUM_CHNL_BW_T eChannelBw;
212 BOOLEAN fgIbssProhibited;
213 } DOMAIN_SUBBAND_INFO, *P_DOMAIN_SUBBAND_INFO;
215 /* Use it as all available channel list for STA */
216 typedef struct _DOMAIN_INFO_ENTRY {
217 UINT_16 u2CountryCode;
218 UINT_16 u2MibRegDomainValue;
220 /* If different attributes, put them into different rSubBands.
221 * For example, DFS shall be used or not.
223 DOMAIN_SUBBAND_INFO rSubBand[MAX_SUBBAND_NUM];
224 } DOMAIN_INFO_ENTRY, *P_DOMAIN_INFO_ENTRY;
226 #else /* New definition 20110830 */
228 /* In all bands, the first channel will be SCA and the second channel is SCB,
230 * Note the final channel will not be SCA.
232 typedef struct _DOMAIN_SUBBAND_INFO {
233 /* Note1: regulation class depends on operation bandwidth and RF band.
234 * For example: 2.4GHz, 1~13, 20MHz ==> regulation class = 81
235 * 2.4GHz, 1~13, SCA ==> regulation class = 83
236 * 2.4GHz, 1~13, SCB ==> regulation class = 84
237 * Note2: TX power limit is not specified here because path loss is unknown
239 UINT_8 ucRegClass; /* Regulation class for 20MHz */
240 UINT_8 ucBand; /* Type: ENUM_BAND_T */
241 UINT_8 ucChannelSpan; /* Type: ENUM_CHNL_SPAN_T */
242 UINT_8 ucFirstChannelNum;
243 UINT_8 ucNumChannels;
244 UINT_8 ucReserved; /* Type: BOOLEAN (fgDfsNeeded) */
245 } DOMAIN_SUBBAND_INFO, *P_DOMAIN_SUBBAND_INFO;
247 /* Use it as all available channel list for STA */
248 typedef struct _DOMAIN_INFO_ENTRY {
249 PUINT_16 pu2CountryGroup;
250 UINT_32 u4CountryNum;
252 /* If different attributes, put them into different rSubBands.
253 * For example, DFS shall be used or not.
255 DOMAIN_SUBBAND_INFO rSubBand[MAX_SUBBAND_NUM];
256 } DOMAIN_INFO_ENTRY, *P_DOMAIN_INFO_ENTRY;
259 /* The following definitions are not used yet */
260 typedef enum _ENUM_CH_SET_2G4_T {
266 } ENUM_CH_SET_2G4_T, *P_ENUM_CH_SET_2G4_T;
268 typedef enum _ENUM_CH_SET_UNII_LOW_T {
270 CH_SET_UNII_LOW_36_48,
272 } ENUM_CH_SET_UNII_LOW_T, *P_ENUM_CH_SET_UNII_LOW_T;
274 typedef enum _ENUM_CH_SET_UNII_MID_T {
276 CH_SET_UNII_MID_52_64,
278 } ENUM_CH_SET_UNII_MID_T, *P_ENUM_CH_SET_UNII_MID_T;
280 typedef enum _ENUM_CH_SET_UNII_WW_T {
282 CH_SET_UNII_WW_100_128,
283 CH_SET_UNII_WW_100_140,
284 CH_SET_UNII_WW_100_116_132_140,
286 } ENUM_CH_SET_UNII_WW_T, *P_ENUM_CH_SET_UNII_WW_T;
288 typedef enum _ENUM_CH_SET_UNII_UPPER_T {
289 CH_SET_UNII_UPPER_NA,
290 CH_SET_UNII_UPPER_149_161,
291 CH_SET_UNII_UPPER_149_165,
292 CH_SET_UNII_UPPER_149_173,
293 CH_SET_UNII_UPPER_NUM
294 } ENUM_CH_SET_UNII_UPPER_T, *P_ENUM_CH_SET_UNII_UPPER_T;
296 typedef struct _COUNTRY_CH_SET_T {
297 ENUM_CH_SET_2G4_T e2G4;
298 ENUM_CH_SET_UNII_LOW_T eUniiLow;
299 ENUM_CH_SET_UNII_MID_T eUniiMid;
300 ENUM_CH_SET_UNII_WW_T eUniiWw;
301 ENUM_CH_SET_UNII_UPPER_T eUniiUpper;
302 } COUNTRY_CH_SET_T, *P_COUNTRY_CH_SET_T;
305 /*******************************************************************************
306 * P U B L I C D A T A
307 ********************************************************************************
310 /*******************************************************************************
311 * P R I V A T E D A T A
312 ********************************************************************************
315 /*******************************************************************************
317 ********************************************************************************
320 /*******************************************************************************
321 * F U N C T I O N D E C L A R A T I O N S
322 ********************************************************************************
325 rlmDomainGetDomainInfo (
326 P_ADAPTER_T prAdapter
330 rlmDomainGetChnlList (
331 P_ADAPTER_T prAdapter,
332 ENUM_BAND_T eSpecificBand,
333 UINT_8 ucMaxChannelNum,
334 PUINT_8 pucNumOfChannel,
335 P_RF_CHANNEL_INFO_T paucChannelList
340 P_ADAPTER_T prAdapter,
345 rlmDomainIsLegalChannel (
346 P_ADAPTER_T prAdapter,
351 /*******************************************************************************
353 ********************************************************************************
356 #endif /* _RLM_DOMAIN_H */