OSDN Git Service

staging: rtl8723bs: update to the latest driver
[android-x86/kernel.git] / drivers / staging / rtl8723bs / hal / HalHWImg8723B_RF.c
1 /******************************************************************************
2 *
3 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of version 2 of the GNU General Public License as
7 * published by the Free Software Foundation.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 ******************************************************************************/
15
16
17 #include "odm_precomp.h"
18
19 static bool
20 CheckPositive(
21     PDM_ODM_T     pDM_Odm,
22     const u32  Condition1,
23     const u32  Condition2
24    )
25 {
26         u8    _BoardType = ((pDM_Odm->BoardType & BIT4) >> 4) << 0 | /*  _GLNA */
27                            ((pDM_Odm->BoardType & BIT3) >> 3) << 1 | /*  _GPA */
28                            ((pDM_Odm->BoardType & BIT7) >> 7) << 2 | /*  _ALNA */
29                            ((pDM_Odm->BoardType & BIT6) >> 6) << 3 | /*  _APA */
30                            ((pDM_Odm->BoardType & BIT2) >> 2) << 4;  /*  _BT */
31
32         u32   cond1   = Condition1, cond2 = Condition2;
33         u32    driver1 = pDM_Odm->CutVersion       << 24 |
34                                 pDM_Odm->SupportPlatform  << 16 |
35                                 pDM_Odm->PackageType      << 12 |
36                                 pDM_Odm->SupportInterface << 8  |
37                                 _BoardType;
38
39         u32    driver2 = pDM_Odm->TypeGLNA <<  0 |
40                                 pDM_Odm->TypeGPA  <<  8 |
41                                 pDM_Odm->TypeALNA << 16 |
42                                 pDM_Odm->TypeAPA  << 24;
43
44         ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE,
45                 ("===> [8812A] CheckPositive (cond1, cond2) = (0x%X 0x%X)\n", cond1, cond2));
46         ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE,
47                 ("===> [8812A] CheckPositive (driver1, driver2) = (0x%X 0x%X)\n", driver1, driver2));
48
49         ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE,
50                 ("      (Platform, Interface) = (0x%X, 0x%X)\n", pDM_Odm->SupportPlatform, pDM_Odm->SupportInterface));
51         ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE,
52                 ("      (Board, Package) = (0x%X, 0x%X)\n", pDM_Odm->BoardType, pDM_Odm->PackageType));
53
54         /*  Value Defined Check =============== */
55         /* QFN Type [15:12] and Cut Version [27:24] need to do value check */
56
57         if (((cond1 & 0x0000F000) != 0) && ((cond1 & 0x0000F000) != (driver1 & 0x0000F000)))
58                 return false;
59         if (((cond1 & 0x0F000000) != 0) && ((cond1 & 0x0F000000) != (driver1 & 0x0F000000)))
60                 return false;
61
62         /*  Bit Defined Check ================ */
63         /*  We don't care [31:28] and [23:20] */
64         cond1   &= 0x000F0FFF;
65         driver1 &= 0x000F0FFF;
66
67         if ((cond1 & driver1) == cond1) {
68                 u32 bitMask = 0;
69                 if ((cond1 & 0x0F) == 0) /*  BoardType is DONTCARE */
70                         return true;
71
72                 if ((cond1 & BIT0) != 0) /* GLNA */
73                         bitMask |= 0x000000FF;
74                 if ((cond1 & BIT1) != 0) /* GPA */
75                         bitMask |= 0x0000FF00;
76                 if ((cond1 & BIT2) != 0) /* ALNA */
77                         bitMask |= 0x00FF0000;
78                 if ((cond1 & BIT3) != 0) /* APA */
79                         bitMask |= 0xFF000000;
80
81                 if ((cond2 & bitMask) == (driver2 & bitMask)) /*  BoardType of each RF path is matched */
82                         return true;
83                 return false;
84         }
85         return false;
86 }
87
88 static bool
89 CheckNegative(
90     PDM_ODM_T     pDM_Odm,
91     const u32  Condition1,
92     const u32  Condition2
93    )
94 {
95     return true;
96 }
97
98 /******************************************************************************
99 *                           RadioA.TXT
100 ******************************************************************************/
101
102 static u32 Array_MP_8723B_RadioA[] = {
103                 0x000, 0x00010000,
104                 0x0B0, 0x000DFFE0,
105                 0x0FE, 0x00000000,
106                 0x0FE, 0x00000000,
107                 0x0FE, 0x00000000,
108                 0x0B1, 0x00000018,
109                 0x0FE, 0x00000000,
110                 0x0FE, 0x00000000,
111                 0x0FE, 0x00000000,
112                 0x0B2, 0x00084C00,
113                 0x0B5, 0x0000D2CC,
114                 0x0B6, 0x000925AA,
115                 0x0B7, 0x00000010,
116                 0x0B8, 0x0000907F,
117                 0x05C, 0x00000002,
118                 0x07C, 0x00000002,
119                 0x07E, 0x00000005,
120                 0x08B, 0x0006FC00,
121                 0x0B0, 0x000FF9F0,
122                 0x01C, 0x000739D2,
123                 0x01E, 0x00000000,
124                 0x0DF, 0x00000780,
125                 0x050, 0x00067435,
126         0x80002000, 0x00000000, 0x40000000, 0x00000000,
127                 0x051, 0x0006B10E,
128         0x90003000, 0x00000000, 0x40000000, 0x00000000,
129                 0x051, 0x0006B10E,
130         0x90004000, 0x00000000, 0x40000000, 0x00000000,
131                 0x051, 0x0006B10E,
132         0xA0000000, 0x00000000,
133                 0x051, 0x0006B04E,
134         0xB0000000, 0x00000000,
135                 0x052, 0x000007D2,
136                 0x053, 0x00000000,
137                 0x054, 0x00050400,
138                 0x055, 0x0004026E,
139                 0x0DD, 0x0000004C,
140                 0x070, 0x00067435,
141         0x80002000, 0x00000000, 0x40000000, 0x00000000,
142                 0x071, 0x0006B10E,
143         0x90003000, 0x00000000, 0x40000000, 0x00000000,
144                 0x071, 0x0006B10E,
145         0x90004000, 0x00000000, 0x40000000, 0x00000000,
146                 0x071, 0x0006B10E,
147         0xA0000000, 0x00000000,
148                 0x071, 0x0006B04E,
149         0xB0000000, 0x00000000,
150                 0x072, 0x000007D2,
151                 0x073, 0x00000000,
152                 0x074, 0x00050400,
153                 0x075, 0x0004026E,
154                 0x0EF, 0x00000100,
155                 0x034, 0x0000ADD7,
156                 0x035, 0x00005C00,
157                 0x034, 0x00009DD4,
158                 0x035, 0x00005000,
159                 0x034, 0x00008DD1,
160                 0x035, 0x00004400,
161                 0x034, 0x00007DCE,
162                 0x035, 0x00003800,
163                 0x034, 0x00006CD1,
164                 0x035, 0x00004400,
165                 0x034, 0x00005CCE,
166                 0x035, 0x00003800,
167                 0x034, 0x000048CE,
168                 0x035, 0x00004400,
169                 0x034, 0x000034CE,
170                 0x035, 0x00003800,
171                 0x034, 0x00002451,
172                 0x035, 0x00004400,
173                 0x034, 0x0000144E,
174                 0x035, 0x00003800,
175                 0x034, 0x00000051,
176                 0x035, 0x00004400,
177                 0x0EF, 0x00000000,
178                 0x0EF, 0x00000100,
179                 0x0ED, 0x00000010,
180                 0x044, 0x0000ADD7,
181                 0x044, 0x00009DD4,
182                 0x044, 0x00008DD1,
183                 0x044, 0x00007DCE,
184                 0x044, 0x00006CC1,
185                 0x044, 0x00005CCE,
186                 0x044, 0x000044D1,
187                 0x044, 0x000034CE,
188                 0x044, 0x00002451,
189                 0x044, 0x0000144E,
190                 0x044, 0x00000051,
191                 0x0EF, 0x00000000,
192                 0x0ED, 0x00000000,
193                 0x07F, 0x00020080,
194                 0x0EF, 0x00002000,
195                 0x03B, 0x000380EF,
196                 0x03B, 0x000302FE,
197                 0x03B, 0x00028CE6,
198                 0x03B, 0x000200BC,
199                 0x03B, 0x000188A5,
200                 0x03B, 0x00010FBC,
201                 0x03B, 0x00008F71,
202                 0x03B, 0x00000900,
203                 0x0EF, 0x00000000,
204                 0x0ED, 0x00000001,
205                 0x040, 0x000380EF,
206                 0x040, 0x000302FE,
207                 0x040, 0x00028CE6,
208                 0x040, 0x000200BC,
209                 0x040, 0x000188A5,
210                 0x040, 0x00010FBC,
211                 0x040, 0x00008F71,
212                 0x040, 0x00000900,
213                 0x0ED, 0x00000000,
214                 0x082, 0x00080000,
215                 0x083, 0x00008000,
216                 0x084, 0x00048D80,
217                 0x085, 0x00068000,
218                 0x0A2, 0x00080000,
219                 0x0A3, 0x00008000,
220                 0x0A4, 0x00048D80,
221                 0x0A5, 0x00068000,
222                 0x0ED, 0x00000002,
223                 0x0EF, 0x00000002,
224                 0x056, 0x00000032,
225                 0x076, 0x00000032,
226                 0x001, 0x00000780,
227
228 };
229
230 void
231 ODM_ReadAndConfig_MP_8723B_RadioA(
232         PDM_ODM_T  pDM_Odm
233         )
234 {
235     u32     i         = 0;
236     u32     ArrayLen    = sizeof(Array_MP_8723B_RadioA)/sizeof(u32);
237     u32 *    Array       = Array_MP_8723B_RadioA;
238
239     ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("===> ODM_ReadAndConfig_MP_8723B_RadioA\n"));
240
241     for (i = 0; i < ArrayLen; i += 2)
242     {
243         u32 v1 = Array[i];
244         u32 v2 = Array[i+1];
245
246         /*  This (offset, data) pair doesn't care the condition. */
247         if (v1 < 0x40000000)
248         {
249            odm_ConfigRF_RadioA_8723B(pDM_Odm, v1, v2);
250            continue;
251         }
252         else
253         {   /*  This line is the beginning of branch. */
254             bool bMatched = true;
255             u8  cCond  = (u8)((v1 & (BIT29|BIT28)) >> 28);
256
257             if (cCond == COND_ELSE) { /*  ELSE, ENDIF */
258                 bMatched = true;
259                 READ_NEXT_PAIR(v1, v2, i);
260             } else if (! CheckPositive(pDM_Odm, v1, v2)) {
261                 bMatched = false;
262                 READ_NEXT_PAIR(v1, v2, i);
263                 READ_NEXT_PAIR(v1, v2, i);
264             } else {
265                 READ_NEXT_PAIR(v1, v2, i);
266                 if (! CheckNegative(pDM_Odm, v1, v2))
267                     bMatched = false;
268                 else
269                     bMatched = true;
270                 READ_NEXT_PAIR(v1, v2, i);
271             }
272
273             if (bMatched == false)
274             {   /*  Condition isn't matched. Discard the following (offset, data) pairs. */
275                 while (v1 < 0x40000000 && i < ArrayLen -2)
276                     READ_NEXT_PAIR(v1, v2, i);
277
278                 i -= 2; /*  prevent from for-loop += 2 */
279             }
280             else /*  Configure matched pairs and skip to end of if-else. */
281             {
282                 while (v1 < 0x40000000 && i < ArrayLen-2) {
283                     odm_ConfigRF_RadioA_8723B(pDM_Odm, v1, v2);
284                     READ_NEXT_PAIR(v1, v2, i);
285                 }
286
287                 /*  Keeps reading until ENDIF. */
288                 cCond = (u8)((v1 & (BIT29|BIT28)) >> 28);
289                 while (cCond != COND_ENDIF && i < ArrayLen-2) {
290                     READ_NEXT_PAIR(v1, v2, i);
291                     cCond = (u8)((v1 & (BIT29|BIT28)) >> 28);
292                 }
293             }
294         }
295     }
296 }
297
298 /******************************************************************************
299 *                           TxPowerTrack_SDIO.TXT
300 ******************************************************************************/
301
302 static u8 gDeltaSwingTableIdx_MP_5GB_N_TxPowerTrack_SDIO_8723B[][DELTA_SWINGIDX_SIZE] = {
303         {0, 1, 1, 2, 2, 3, 4, 5, 5, 6,  6,  7,  7,  8,  8,  9,  9, 10, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14},
304         {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  7,  8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14},
305         {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  7,  8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14},
306 };
307 static u8 gDeltaSwingTableIdx_MP_5GB_P_TxPowerTrack_SDIO_8723B[][DELTA_SWINGIDX_SIZE] = {
308         {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  8,  9,  9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 16, 17, 17, 18, 19, 20, 20, 20},
309         {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  8,  9,  9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 19, 20, 20, 20},
310         {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  8,  9,  9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 21, 21, 21},
311 };
312 static u8 gDeltaSwingTableIdx_MP_5GA_N_TxPowerTrack_SDIO_8723B[][DELTA_SWINGIDX_SIZE] = {
313         {0, 1, 2, 3, 3, 4, 4, 5, 5, 6,  7,  8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14},
314         {0, 1, 2, 3, 3, 4, 5, 6, 6, 6,  7,  7,  8,  8,  9, 10, 11, 11, 12, 13, 13, 14, 15, 16, 16, 16, 16, 16, 16, 16},
315         {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  8,  9,  9, 10, 10, 11, 11, 12, 13, 14, 14, 15, 15, 16, 16, 16, 16, 16, 16, 16},
316 };
317 static u8 gDeltaSwingTableIdx_MP_5GA_P_TxPowerTrack_SDIO_8723B[][DELTA_SWINGIDX_SIZE] = {
318         {0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
319         {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  8,  9,  9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 21, 21, 21},
320         {0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  8,  9,  9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 21, 21, 21},
321 };
322 static u8 gDeltaSwingTableIdx_MP_2GB_N_TxPowerTrack_SDIO_8723B[]    = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4,  5,  5,  6,  6,  6,  6,  7,  7,  7,  8,  8,  9,  9, 10, 10, 11, 12, 13, 14, 15};
323 static u8 gDeltaSwingTableIdx_MP_2GB_P_TxPowerTrack_SDIO_8723B[]    = {0, 0, 1, 2, 2, 3, 3, 4, 5, 5,  6,  6,  7,  7,  8,  8,  9,  9, 10, 10, 10, 11, 11, 12, 12, 13, 13, 14, 15, 15};
324 static u8 gDeltaSwingTableIdx_MP_2GA_N_TxPowerTrack_SDIO_8723B[]    = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4,  5,  5,  6,  6,  6,  6,  7,  7,  7,  8,  8,  9,  9, 10, 10, 11, 12, 13, 14, 15};
325 static u8 gDeltaSwingTableIdx_MP_2GA_P_TxPowerTrack_SDIO_8723B[]    = {0, 0, 1, 2, 2, 3, 3, 4, 5, 5,  6,  6,  7,  7,  8,  8,  9,  9, 10, 10, 10, 11, 11, 12, 12, 13, 13, 14, 15, 15};
326 static u8 gDeltaSwingTableIdx_MP_2GCCKB_N_TxPowerTrack_SDIO_8723B[] = {0, 0, 1, 2, 2, 3, 3, 4, 4, 5,  6,  6,  7,  7,  7,  8,  8,  8,  9,  9,  9, 10, 10, 11, 11, 12, 12, 13, 14, 15};
327 static u8 gDeltaSwingTableIdx_MP_2GCCKB_P_TxPowerTrack_SDIO_8723B[] = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4,  5,  5,  6,  6,  7,  7,  8,  8,  9,  9,  9, 10, 10, 11, 11, 12, 12, 13, 14, 15};
328 static u8 gDeltaSwingTableIdx_MP_2GCCKA_N_TxPowerTrack_SDIO_8723B[] = {0, 0, 1, 2, 2, 3, 3, 4, 4, 5,  6,  6,  7,  7,  7,  8,  8,  8,  9,  9,  9, 10, 10, 11, 11, 12, 12, 13, 14, 15};
329 static u8 gDeltaSwingTableIdx_MP_2GCCKA_P_TxPowerTrack_SDIO_8723B[] = {0, 0, 1, 2, 2, 2, 3, 3, 3, 4,  5,  5,  6,  6,  7,  7,  8,  8,  9,  9,  9, 10, 10, 11, 11, 12, 12, 13, 14, 15};
330
331 void
332 ODM_ReadAndConfig_MP_8723B_TxPowerTrack_SDIO(
333         PDM_ODM_T  pDM_Odm
334         )
335 {
336         PODM_RF_CAL_T  pRFCalibrateInfo = &(pDM_Odm->RFCalibrateInfo);
337
338         ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("===> ODM_ReadAndConfig_MP_MP_8723B\n"));
339
340
341         memcpy(pRFCalibrateInfo->DeltaSwingTableIdx_2GA_P, gDeltaSwingTableIdx_MP_2GA_P_TxPowerTrack_SDIO_8723B, DELTA_SWINGIDX_SIZE);
342         memcpy(pRFCalibrateInfo->DeltaSwingTableIdx_2GA_N, gDeltaSwingTableIdx_MP_2GA_N_TxPowerTrack_SDIO_8723B, DELTA_SWINGIDX_SIZE);
343         memcpy(pRFCalibrateInfo->DeltaSwingTableIdx_2GB_P, gDeltaSwingTableIdx_MP_2GB_P_TxPowerTrack_SDIO_8723B, DELTA_SWINGIDX_SIZE);
344         memcpy(pRFCalibrateInfo->DeltaSwingTableIdx_2GB_N, gDeltaSwingTableIdx_MP_2GB_N_TxPowerTrack_SDIO_8723B, DELTA_SWINGIDX_SIZE);
345
346         memcpy(pRFCalibrateInfo->DeltaSwingTableIdx_2GCCKA_P, gDeltaSwingTableIdx_MP_2GCCKA_P_TxPowerTrack_SDIO_8723B, DELTA_SWINGIDX_SIZE);
347         memcpy(pRFCalibrateInfo->DeltaSwingTableIdx_2GCCKA_N, gDeltaSwingTableIdx_MP_2GCCKA_N_TxPowerTrack_SDIO_8723B, DELTA_SWINGIDX_SIZE);
348         memcpy(pRFCalibrateInfo->DeltaSwingTableIdx_2GCCKB_P, gDeltaSwingTableIdx_MP_2GCCKB_P_TxPowerTrack_SDIO_8723B, DELTA_SWINGIDX_SIZE);
349         memcpy(pRFCalibrateInfo->DeltaSwingTableIdx_2GCCKB_N, gDeltaSwingTableIdx_MP_2GCCKB_N_TxPowerTrack_SDIO_8723B, DELTA_SWINGIDX_SIZE);
350
351         memcpy(pRFCalibrateInfo->DeltaSwingTableIdx_5GA_P, gDeltaSwingTableIdx_MP_5GA_P_TxPowerTrack_SDIO_8723B, DELTA_SWINGIDX_SIZE*3);
352         memcpy(pRFCalibrateInfo->DeltaSwingTableIdx_5GA_N, gDeltaSwingTableIdx_MP_5GA_N_TxPowerTrack_SDIO_8723B, DELTA_SWINGIDX_SIZE*3);
353         memcpy(pRFCalibrateInfo->DeltaSwingTableIdx_5GB_P, gDeltaSwingTableIdx_MP_5GB_P_TxPowerTrack_SDIO_8723B, DELTA_SWINGIDX_SIZE*3);
354         memcpy(pRFCalibrateInfo->DeltaSwingTableIdx_5GB_N, gDeltaSwingTableIdx_MP_5GB_N_TxPowerTrack_SDIO_8723B, DELTA_SWINGIDX_SIZE*3);
355 }
356
357 /******************************************************************************
358 *                           TXPWR_LMT.TXT
359 ******************************************************************************/
360
361 static u8 * Array_MP_8723B_TXPWR_LMT[] = {
362         "FCC", "2.4G", "20M", "CCK", "1T", "01", "32",
363         "ETSI", "2.4G", "20M", "CCK", "1T", "01", "32",
364         "MKK", "2.4G", "20M", "CCK", "1T", "01", "32",
365         "FCC", "2.4G", "20M", "CCK", "1T", "02", "32",
366         "ETSI", "2.4G", "20M", "CCK", "1T", "02", "32",
367         "MKK", "2.4G", "20M", "CCK", "1T", "02", "32",
368         "FCC", "2.4G", "20M", "CCK", "1T", "03", "32",
369         "ETSI", "2.4G", "20M", "CCK", "1T", "03", "32",
370         "MKK", "2.4G", "20M", "CCK", "1T", "03", "32",
371         "FCC", "2.4G", "20M", "CCK", "1T", "04", "32",
372         "ETSI", "2.4G", "20M", "CCK", "1T", "04", "32",
373         "MKK", "2.4G", "20M", "CCK", "1T", "04", "32",
374         "FCC", "2.4G", "20M", "CCK", "1T", "05", "32",
375         "ETSI", "2.4G", "20M", "CCK", "1T", "05", "32",
376         "MKK", "2.4G", "20M", "CCK", "1T", "05", "32",
377         "FCC", "2.4G", "20M", "CCK", "1T", "06", "32",
378         "ETSI", "2.4G", "20M", "CCK", "1T", "06", "32",
379         "MKK", "2.4G", "20M", "CCK", "1T", "06", "32",
380         "FCC", "2.4G", "20M", "CCK", "1T", "07", "32",
381         "ETSI", "2.4G", "20M", "CCK", "1T", "07", "32",
382         "MKK", "2.4G", "20M", "CCK", "1T", "07", "32",
383         "FCC", "2.4G", "20M", "CCK", "1T", "08", "32",
384         "ETSI", "2.4G", "20M", "CCK", "1T", "08", "32",
385         "MKK", "2.4G", "20M", "CCK", "1T", "08", "32",
386         "FCC", "2.4G", "20M", "CCK", "1T", "09", "32",
387         "ETSI", "2.4G", "20M", "CCK", "1T", "09", "32",
388         "MKK", "2.4G", "20M", "CCK", "1T", "09", "32",
389         "FCC", "2.4G", "20M", "CCK", "1T", "10", "32",
390         "ETSI", "2.4G", "20M", "CCK", "1T", "10", "32",
391         "MKK", "2.4G", "20M", "CCK", "1T", "10", "32",
392         "FCC", "2.4G", "20M", "CCK", "1T", "11", "32",
393         "ETSI", "2.4G", "20M", "CCK", "1T", "11", "32",
394         "MKK", "2.4G", "20M", "CCK", "1T", "11", "32",
395         "FCC", "2.4G", "20M", "CCK", "1T", "12", "63",
396         "ETSI", "2.4G", "20M", "CCK", "1T", "12", "32",
397         "MKK", "2.4G", "20M", "CCK", "1T", "12", "32",
398         "FCC", "2.4G", "20M", "CCK", "1T", "13", "63",
399         "ETSI", "2.4G", "20M", "CCK", "1T", "13", "32",
400         "MKK", "2.4G", "20M", "CCK", "1T", "13", "32",
401         "FCC", "2.4G", "20M", "CCK", "1T", "14", "63",
402         "ETSI", "2.4G", "20M", "CCK", "1T", "14", "63",
403         "MKK", "2.4G", "20M", "CCK", "1T", "14", "32",
404         "FCC", "2.4G", "20M", "OFDM", "1T", "01", "28",
405         "ETSI", "2.4G", "20M", "OFDM", "1T", "01", "32",
406         "MKK", "2.4G", "20M", "OFDM", "1T", "01", "32",
407         "FCC", "2.4G", "20M", "OFDM", "1T", "02", "28",
408         "ETSI", "2.4G", "20M", "OFDM", "1T", "02", "32",
409         "MKK", "2.4G", "20M", "OFDM", "1T", "02", "32",
410         "FCC", "2.4G", "20M", "OFDM", "1T", "03", "32",
411         "ETSI", "2.4G", "20M", "OFDM", "1T", "03", "32",
412         "MKK", "2.4G", "20M", "OFDM", "1T", "03", "32",
413         "FCC", "2.4G", "20M", "OFDM", "1T", "04", "32",
414         "ETSI", "2.4G", "20M", "OFDM", "1T", "04", "32",
415         "MKK", "2.4G", "20M", "OFDM", "1T", "04", "32",
416         "FCC", "2.4G", "20M", "OFDM", "1T", "05", "32",
417         "ETSI", "2.4G", "20M", "OFDM", "1T", "05", "32",
418         "MKK", "2.4G", "20M", "OFDM", "1T", "05", "32",
419         "FCC", "2.4G", "20M", "OFDM", "1T", "06", "32",
420         "ETSI", "2.4G", "20M", "OFDM", "1T", "06", "32",
421         "MKK", "2.4G", "20M", "OFDM", "1T", "06", "32",
422         "FCC", "2.4G", "20M", "OFDM", "1T", "07", "32",
423         "ETSI", "2.4G", "20M", "OFDM", "1T", "07", "32",
424         "MKK", "2.4G", "20M", "OFDM", "1T", "07", "32",
425         "FCC", "2.4G", "20M", "OFDM", "1T", "08", "32",
426         "ETSI", "2.4G", "20M", "OFDM", "1T", "08", "32",
427         "MKK", "2.4G", "20M", "OFDM", "1T", "08", "32",
428         "FCC", "2.4G", "20M", "OFDM", "1T", "09", "32",
429         "ETSI", "2.4G", "20M", "OFDM", "1T", "09", "32",
430         "MKK", "2.4G", "20M", "OFDM", "1T", "09", "32",
431         "FCC", "2.4G", "20M", "OFDM", "1T", "10", "28",
432         "ETSI", "2.4G", "20M", "OFDM", "1T", "10", "32",
433         "MKK", "2.4G", "20M", "OFDM", "1T", "10", "32",
434         "FCC", "2.4G", "20M", "OFDM", "1T", "11", "28",
435         "ETSI", "2.4G", "20M", "OFDM", "1T", "11", "32",
436         "MKK", "2.4G", "20M", "OFDM", "1T", "11", "32",
437         "FCC", "2.4G", "20M", "OFDM", "1T", "12", "63",
438         "ETSI", "2.4G", "20M", "OFDM", "1T", "12", "32",
439         "MKK", "2.4G", "20M", "OFDM", "1T", "12", "32",
440         "FCC", "2.4G", "20M", "OFDM", "1T", "13", "63",
441         "ETSI", "2.4G", "20M", "OFDM", "1T", "13", "32",
442         "MKK", "2.4G", "20M", "OFDM", "1T", "13", "32",
443         "FCC", "2.4G", "20M", "OFDM", "1T", "14", "63",
444         "ETSI", "2.4G", "20M", "OFDM", "1T", "14", "63",
445         "MKK", "2.4G", "20M", "OFDM", "1T", "14", "63",
446         "FCC", "2.4G", "20M", "HT", "1T", "01", "26",
447         "ETSI", "2.4G", "20M", "HT", "1T", "01", "32",
448         "MKK", "2.4G", "20M", "HT", "1T", "01", "32",
449         "FCC", "2.4G", "20M", "HT", "1T", "02", "26",
450         "ETSI", "2.4G", "20M", "HT", "1T", "02", "32",
451         "MKK", "2.4G", "20M", "HT", "1T", "02", "32",
452         "FCC", "2.4G", "20M", "HT", "1T", "03", "32",
453         "ETSI", "2.4G", "20M", "HT", "1T", "03", "32",
454         "MKK", "2.4G", "20M", "HT", "1T", "03", "32",
455         "FCC", "2.4G", "20M", "HT", "1T", "04", "32",
456         "ETSI", "2.4G", "20M", "HT", "1T", "04", "32",
457         "MKK", "2.4G", "20M", "HT", "1T", "04", "32",
458         "FCC", "2.4G", "20M", "HT", "1T", "05", "32",
459         "ETSI", "2.4G", "20M", "HT", "1T", "05", "32",
460         "MKK", "2.4G", "20M", "HT", "1T", "05", "32",
461         "FCC", "2.4G", "20M", "HT", "1T", "06", "32",
462         "ETSI", "2.4G", "20M", "HT", "1T", "06", "32",
463         "MKK", "2.4G", "20M", "HT", "1T", "06", "32",
464         "FCC", "2.4G", "20M", "HT", "1T", "07", "32",
465         "ETSI", "2.4G", "20M", "HT", "1T", "07", "32",
466         "MKK", "2.4G", "20M", "HT", "1T", "07", "32",
467         "FCC", "2.4G", "20M", "HT", "1T", "08", "32",
468         "ETSI", "2.4G", "20M", "HT", "1T", "08", "32",
469         "MKK", "2.4G", "20M", "HT", "1T", "08", "32",
470         "FCC", "2.4G", "20M", "HT", "1T", "09", "32",
471         "ETSI", "2.4G", "20M", "HT", "1T", "09", "32",
472         "MKK", "2.4G", "20M", "HT", "1T", "09", "32",
473         "FCC", "2.4G", "20M", "HT", "1T", "10", "26",
474         "ETSI", "2.4G", "20M", "HT", "1T", "10", "32",
475         "MKK", "2.4G", "20M", "HT", "1T", "10", "32",
476         "FCC", "2.4G", "20M", "HT", "1T", "11", "26",
477         "ETSI", "2.4G", "20M", "HT", "1T", "11", "32",
478         "MKK", "2.4G", "20M", "HT", "1T", "11", "32",
479         "FCC", "2.4G", "20M", "HT", "1T", "12", "63",
480         "ETSI", "2.4G", "20M", "HT", "1T", "12", "32",
481         "MKK", "2.4G", "20M", "HT", "1T", "12", "32",
482         "FCC", "2.4G", "20M", "HT", "1T", "13", "63",
483         "ETSI", "2.4G", "20M", "HT", "1T", "13", "32",
484         "MKK", "2.4G", "20M", "HT", "1T", "13", "32",
485         "FCC", "2.4G", "20M", "HT", "1T", "14", "63",
486         "ETSI", "2.4G", "20M", "HT", "1T", "14", "63",
487         "MKK", "2.4G", "20M", "HT", "1T", "14", "63",
488         "FCC", "2.4G", "20M", "HT", "2T", "01", "30",
489         "ETSI", "2.4G", "20M", "HT", "2T", "01", "32",
490         "MKK", "2.4G", "20M", "HT", "2T", "01", "32",
491         "FCC", "2.4G", "20M", "HT", "2T", "02", "32",
492         "ETSI", "2.4G", "20M", "HT", "2T", "02", "32",
493         "MKK", "2.4G", "20M", "HT", "2T", "02", "32",
494         "FCC", "2.4G", "20M", "HT", "2T", "03", "32",
495         "ETSI", "2.4G", "20M", "HT", "2T", "03", "32",
496         "MKK", "2.4G", "20M", "HT", "2T", "03", "32",
497         "FCC", "2.4G", "20M", "HT", "2T", "04", "32",
498         "ETSI", "2.4G", "20M", "HT", "2T", "04", "32",
499         "MKK", "2.4G", "20M", "HT", "2T", "04", "32",
500         "FCC", "2.4G", "20M", "HT", "2T", "05", "32",
501         "ETSI", "2.4G", "20M", "HT", "2T", "05", "32",
502         "MKK", "2.4G", "20M", "HT", "2T", "05", "32",
503         "FCC", "2.4G", "20M", "HT", "2T", "06", "32",
504         "ETSI", "2.4G", "20M", "HT", "2T", "06", "32",
505         "MKK", "2.4G", "20M", "HT", "2T", "06", "32",
506         "FCC", "2.4G", "20M", "HT", "2T", "07", "32",
507         "ETSI", "2.4G", "20M", "HT", "2T", "07", "32",
508         "MKK", "2.4G", "20M", "HT", "2T", "07", "32",
509         "FCC", "2.4G", "20M", "HT", "2T", "08", "32",
510         "ETSI", "2.4G", "20M", "HT", "2T", "08", "32",
511         "MKK", "2.4G", "20M", "HT", "2T", "08", "32",
512         "FCC", "2.4G", "20M", "HT", "2T", "09", "32",
513         "ETSI", "2.4G", "20M", "HT", "2T", "09", "32",
514         "MKK", "2.4G", "20M", "HT", "2T", "09", "32",
515         "FCC", "2.4G", "20M", "HT", "2T", "10", "32",
516         "ETSI", "2.4G", "20M", "HT", "2T", "10", "32",
517         "MKK", "2.4G", "20M", "HT", "2T", "10", "32",
518         "FCC", "2.4G", "20M", "HT", "2T", "11", "30",
519         "ETSI", "2.4G", "20M", "HT", "2T", "11", "32",
520         "MKK", "2.4G", "20M", "HT", "2T", "11", "32",
521         "FCC", "2.4G", "20M", "HT", "2T", "12", "63",
522         "ETSI", "2.4G", "20M", "HT", "2T", "12", "32",
523         "MKK", "2.4G", "20M", "HT", "2T", "12", "32",
524         "FCC", "2.4G", "20M", "HT", "2T", "13", "63",
525         "ETSI", "2.4G", "20M", "HT", "2T", "13", "32",
526         "MKK", "2.4G", "20M", "HT", "2T", "13", "32",
527         "FCC", "2.4G", "20M", "HT", "2T", "14", "63",
528         "ETSI", "2.4G", "20M", "HT", "2T", "14", "63",
529         "MKK", "2.4G", "20M", "HT", "2T", "14", "63",
530         "FCC", "2.4G", "40M", "HT", "1T", "01", "63",
531         "ETSI", "2.4G", "40M", "HT", "1T", "01", "63",
532         "MKK", "2.4G", "40M", "HT", "1T", "01", "63",
533         "FCC", "2.4G", "40M", "HT", "1T", "02", "63",
534         "ETSI", "2.4G", "40M", "HT", "1T", "02", "63",
535         "MKK", "2.4G", "40M", "HT", "1T", "02", "63",
536         "FCC", "2.4G", "40M", "HT", "1T", "03", "26",
537         "ETSI", "2.4G", "40M", "HT", "1T", "03", "32",
538         "MKK", "2.4G", "40M", "HT", "1T", "03", "32",
539         "FCC", "2.4G", "40M", "HT", "1T", "04", "26",
540         "ETSI", "2.4G", "40M", "HT", "1T", "04", "32",
541         "MKK", "2.4G", "40M", "HT", "1T", "04", "32",
542         "FCC", "2.4G", "40M", "HT", "1T", "05", "32",
543         "ETSI", "2.4G", "40M", "HT", "1T", "05", "32",
544         "MKK", "2.4G", "40M", "HT", "1T", "05", "32",
545         "FCC", "2.4G", "40M", "HT", "1T", "06", "32",
546         "ETSI", "2.4G", "40M", "HT", "1T", "06", "32",
547         "MKK", "2.4G", "40M", "HT", "1T", "06", "32",
548         "FCC", "2.4G", "40M", "HT", "1T", "07", "32",
549         "ETSI", "2.4G", "40M", "HT", "1T", "07", "32",
550         "MKK", "2.4G", "40M", "HT", "1T", "07", "32",
551         "FCC", "2.4G", "40M", "HT", "1T", "08", "26",
552         "ETSI", "2.4G", "40M", "HT", "1T", "08", "32",
553         "MKK", "2.4G", "40M", "HT", "1T", "08", "32",
554         "FCC", "2.4G", "40M", "HT", "1T", "09", "26",
555         "ETSI", "2.4G", "40M", "HT", "1T", "09", "32",
556         "MKK", "2.4G", "40M", "HT", "1T", "09", "32",
557         "FCC", "2.4G", "40M", "HT", "1T", "10", "26",
558         "ETSI", "2.4G", "40M", "HT", "1T", "10", "32",
559         "MKK", "2.4G", "40M", "HT", "1T", "10", "32",
560         "FCC", "2.4G", "40M", "HT", "1T", "11", "26",
561         "ETSI", "2.4G", "40M", "HT", "1T", "11", "32",
562         "MKK", "2.4G", "40M", "HT", "1T", "11", "32",
563         "FCC", "2.4G", "40M", "HT", "1T", "12", "63",
564         "ETSI", "2.4G", "40M", "HT", "1T", "12", "32",
565         "MKK", "2.4G", "40M", "HT", "1T", "12", "32",
566         "FCC", "2.4G", "40M", "HT", "1T", "13", "63",
567         "ETSI", "2.4G", "40M", "HT", "1T", "13", "32",
568         "MKK", "2.4G", "40M", "HT", "1T", "13", "32",
569         "FCC", "2.4G", "40M", "HT", "1T", "14", "63",
570         "ETSI", "2.4G", "40M", "HT", "1T", "14", "63",
571         "MKK", "2.4G", "40M", "HT", "1T", "14", "63",
572         "FCC", "2.4G", "40M", "HT", "2T", "01", "63",
573         "ETSI", "2.4G", "40M", "HT", "2T", "01", "63",
574         "MKK", "2.4G", "40M", "HT", "2T", "01", "63",
575         "FCC", "2.4G", "40M", "HT", "2T", "02", "63",
576         "ETSI", "2.4G", "40M", "HT", "2T", "02", "63",
577         "MKK", "2.4G", "40M", "HT", "2T", "02", "63",
578         "FCC", "2.4G", "40M", "HT", "2T", "03", "30",
579         "ETSI", "2.4G", "40M", "HT", "2T", "03", "30",
580         "MKK", "2.4G", "40M", "HT", "2T", "03", "30",
581         "FCC", "2.4G", "40M", "HT", "2T", "04", "32",
582         "ETSI", "2.4G", "40M", "HT", "2T", "04", "30",
583         "MKK", "2.4G", "40M", "HT", "2T", "04", "30",
584         "FCC", "2.4G", "40M", "HT", "2T", "05", "32",
585         "ETSI", "2.4G", "40M", "HT", "2T", "05", "30",
586         "MKK", "2.4G", "40M", "HT", "2T", "05", "30",
587         "FCC", "2.4G", "40M", "HT", "2T", "06", "32",
588         "ETSI", "2.4G", "40M", "HT", "2T", "06", "30",
589         "MKK", "2.4G", "40M", "HT", "2T", "06", "30",
590         "FCC", "2.4G", "40M", "HT", "2T", "07", "32",
591         "ETSI", "2.4G", "40M", "HT", "2T", "07", "30",
592         "MKK", "2.4G", "40M", "HT", "2T", "07", "30",
593         "FCC", "2.4G", "40M", "HT", "2T", "08", "32",
594         "ETSI", "2.4G", "40M", "HT", "2T", "08", "30",
595         "MKK", "2.4G", "40M", "HT", "2T", "08", "30",
596         "FCC", "2.4G", "40M", "HT", "2T", "09", "32",
597         "ETSI", "2.4G", "40M", "HT", "2T", "09", "30",
598         "MKK", "2.4G", "40M", "HT", "2T", "09", "30",
599         "FCC", "2.4G", "40M", "HT", "2T", "10", "32",
600         "ETSI", "2.4G", "40M", "HT", "2T", "10", "30",
601         "MKK", "2.4G", "40M", "HT", "2T", "10", "30",
602         "FCC", "2.4G", "40M", "HT", "2T", "11", "30",
603         "ETSI", "2.4G", "40M", "HT", "2T", "11", "30",
604         "MKK", "2.4G", "40M", "HT", "2T", "11", "30",
605         "FCC", "2.4G", "40M", "HT", "2T", "12", "63",
606         "ETSI", "2.4G", "40M", "HT", "2T", "12", "32",
607         "MKK", "2.4G", "40M", "HT", "2T", "12", "32",
608         "FCC", "2.4G", "40M", "HT", "2T", "13", "63",
609         "ETSI", "2.4G", "40M", "HT", "2T", "13", "32",
610         "MKK", "2.4G", "40M", "HT", "2T", "13", "32",
611         "FCC", "2.4G", "40M", "HT", "2T", "14", "63",
612         "ETSI", "2.4G", "40M", "HT", "2T", "14", "63",
613         "MKK", "2.4G", "40M", "HT", "2T", "14", "63"
614 };
615
616 void
617 ODM_ReadAndConfig_MP_8723B_TXPWR_LMT(
618         PDM_ODM_T  pDM_Odm
619         )
620 {
621         u32     i           = 0;
622         u32     ArrayLen    = sizeof(Array_MP_8723B_TXPWR_LMT)/sizeof(u8 *);
623         u8 *    *Array      = Array_MP_8723B_TXPWR_LMT;
624
625         ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("===> ODM_ReadAndConfig_MP_8723B_TXPWR_LMT\n"));
626
627         for (i = 0; i < ArrayLen; i += 7) {
628                 u8 * regulation = Array[i];
629                 u8 * band = Array[i+1];
630                 u8 * bandwidth = Array[i+2];
631                 u8 * rate = Array[i+3];
632                 u8 * rfPath = Array[i+4];
633                 u8 * chnl = Array[i+5];
634                 u8 * val = Array[i+6];
635
636                 odm_ConfigBB_TXPWR_LMT_8723B(pDM_Odm, regulation, band, bandwidth, rate, rfPath, chnl, val);
637         }
638 }