support different wifi bt chip auto compatible
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / combo_mt66xx / mt6620 / wlan / include / mgmt / rlm_domain.h
1 /*
2 ** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/rlm_domain.h#1 $
3 */
4
5 /*! \file   "rlm_domain.h"
6     \brief
7 */
8
9
10
11 /*
12 ** $Log: rlm_domain.h $
13  *
14  * 09 29 2011 cm.chang
15  * NULL
16  * Change the function prototype of rlmDomainGetChnlList()
17  *
18  * 09 08 2011 cm.chang
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
21  *
22  * 08 31 2011 cm.chang
23  * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code
24  * .
25  *
26  * 06 01 2011 cm.chang
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
29  *
30  * 12 07 2010 cm.chang
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.
34  *
35  * 07 08 2010 cp.wu
36  *
37  * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository.
38  *
39  * 06 28 2010 cm.chang
40  * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver
41  * 1st draft code for RLM module
42  *
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
46  *
47  * 01 13 2010 cm.chang
48  * [BORA00000018]Integrate WIFI part into BORA for the 1st time
49  * Provide query function about full channle list.
50  *
51  * Dec 1 2009 mtk01104
52  * [BORA00000018] Integrate WIFI part into BORA for the 1st time
53  * Declare public rDomainInfo
54  *
55 **
56 */
57
58 #ifndef _RLM_DOMAIN_H
59 #define _RLM_DOMAIN_H
60
61 /*******************************************************************************
62 *                         C O M P I L E R   F L A G S
63 ********************************************************************************
64 */
65
66 /*******************************************************************************
67 *                    E X T E R N A L   R E F E R E N C E S
68 ********************************************************************************
69 */
70
71 /*******************************************************************************
72 *                              C O N S T A N T S
73 ********************************************************************************
74 */
75 #define MAX_SUBBAND_NUM     6
76
77
78 #define COUNTRY_CODE_NULL               ((UINT_16)0x0)
79
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       */
167
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 */
176
177
178 /*******************************************************************************
179 *                             D A T A   T Y P E S
180 ********************************************************************************
181 */
182
183 /* Define channel offset in unit of 5MHz bandwidth */
184 typedef enum _ENUM_CHNL_SPAN_T {
185     CHNL_SPAN_5     = 1,
186     CHNL_SPAN_10    = 2,
187     CHNL_SPAN_20    = 4,
188     CHNL_SPAN_40    = 8
189 } ENUM_CHNL_SPAN_T, *P_ENUM_CHNL_SPAN_T;
190
191 /* Define BSS operating bandwidth */
192 typedef enum _ENUM_CHNL_BW_T {
193     CHNL_BW_20,
194     CHNL_BW_20_40,
195     CHNL_BW_10,
196     CHNL_BW_5
197 } ENUM_CHNL_BW_T, *P_ENUM_CHNL_BW_T;
198
199 #if 0
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.
203  */
204 typedef struct _DOMAIN_SUBBAND_INFO {
205     UINT_8              ucRegClass;
206     ENUM_BAND_T         eBand;
207     ENUM_CHNL_SPAN_T    eChannelSpan;
208     UINT_8              ucFirstChannelNum;
209     UINT_8              ucNumChannels;
210     ENUM_CHNL_BW_T      eChannelBw;
211     BOOLEAN             fgDfsNeeded;
212     BOOLEAN             fgIbssProhibited;
213 } DOMAIN_SUBBAND_INFO, *P_DOMAIN_SUBBAND_INFO;
214
215 /* Use it as all available channel list for STA */
216 typedef struct _DOMAIN_INFO_ENTRY {
217     UINT_16             u2CountryCode;
218     UINT_16             u2MibRegDomainValue;
219
220     /* If different attributes, put them into different rSubBands.
221      * For example, DFS shall be used or not.
222      */
223     DOMAIN_SUBBAND_INFO rSubBand[MAX_SUBBAND_NUM];
224 } DOMAIN_INFO_ENTRY, *P_DOMAIN_INFO_ENTRY;
225
226 #else /* New definition 20110830 */
227
228 /* In all bands, the first channel will be SCA and the second channel is SCB,
229  * then iteratively.
230  * Note the final channel will not be SCA.
231  */
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
238      */
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;
246
247 /* Use it as all available channel list for STA */
248 typedef struct _DOMAIN_INFO_ENTRY {
249     PUINT_16            pu2CountryGroup;
250     UINT_32             u4CountryNum;
251
252     /* If different attributes, put them into different rSubBands.
253      * For example, DFS shall be used or not.
254      */
255     DOMAIN_SUBBAND_INFO rSubBand[MAX_SUBBAND_NUM];
256 } DOMAIN_INFO_ENTRY, *P_DOMAIN_INFO_ENTRY;
257 #endif
258
259 /* The following definitions are not used yet */
260 typedef enum _ENUM_CH_SET_2G4_T {
261     CH_SET_2G4_NA,
262     CH_SET_2G4_1_11,
263     CH_SET_2G4_1_13,
264     CH_SET_2G4_1_14,
265     CH_SET_2G4_NUM
266 } ENUM_CH_SET_2G4_T, *P_ENUM_CH_SET_2G4_T;
267
268 typedef enum _ENUM_CH_SET_UNII_LOW_T {
269     CH_SET_UNII_LOW_NA,
270     CH_SET_UNII_LOW_36_48,
271     CH_SET_UNII_LOW_NUM
272 } ENUM_CH_SET_UNII_LOW_T, *P_ENUM_CH_SET_UNII_LOW_T;
273
274 typedef enum _ENUM_CH_SET_UNII_MID_T {
275     CH_SET_UNII_MID_NA,
276     CH_SET_UNII_MID_52_64,
277     CH_SET_UNII_MID_NUM
278 } ENUM_CH_SET_UNII_MID_T, *P_ENUM_CH_SET_UNII_MID_T;
279
280 typedef enum _ENUM_CH_SET_UNII_WW_T {
281     CH_SET_UNII_WW_NA,
282     CH_SET_UNII_WW_100_128,
283     CH_SET_UNII_WW_100_140,
284     CH_SET_UNII_WW_100_116_132_140,
285     CH_SET_UNII_WW_NUM
286 } ENUM_CH_SET_UNII_WW_T, *P_ENUM_CH_SET_UNII_WW_T;
287
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;
295
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;
303
304
305 /*******************************************************************************
306 *                            P U B L I C   D A T A
307 ********************************************************************************
308 */
309
310 /*******************************************************************************
311 *                           P R I V A T E   D A T A
312 ********************************************************************************
313 */
314
315 /*******************************************************************************
316 *                                 M A C R O S
317 ********************************************************************************
318 */
319
320 /*******************************************************************************
321 *                   F U N C T I O N   D E C L A R A T I O N S
322 ********************************************************************************
323 */
324 P_DOMAIN_INFO_ENTRY
325 rlmDomainGetDomainInfo (
326     P_ADAPTER_T     prAdapter
327     );
328
329 VOID
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
336     );
337
338 VOID
339 rlmDomainSendCmd (
340     P_ADAPTER_T     prAdapter,
341     BOOLEAN         fgIsOid
342     );
343
344 BOOLEAN
345 rlmDomainIsLegalChannel (
346     P_ADAPTER_T     prAdapter,
347     ENUM_BAND_T     eBand,
348     UINT_8          ucChannel
349     );
350
351 /*******************************************************************************
352 *                              F U N C T I O N S
353 ********************************************************************************
354 */
355
356 #endif /* _RLM_DOMAIN_H */
357
358