]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - drivers/staging/rtl8188eu/hal/HalHWImg8188E_BB.c
arm: imx6: defconfig: update tx6 defconfigs
[karo-tx-linux.git] / drivers / staging / rtl8188eu / hal / HalHWImg8188E_BB.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 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
17 *
18 *
19 ******************************************************************************/
20
21 #include "odm_precomp.h"
22
23 #include <rtw_iol.h>
24
25 #define read_next_pair(array, v1, v2, i)                \
26          do {                                           \
27                  i += 2;                                \
28                  v1 = array[i];                         \
29                  v2 = array[i+1];                       \
30          } while (0)
31
32 static bool CheckCondition(const u32  condition, const u32  hex)
33 {
34         u32 _board     = (hex & 0x000000FF);
35         u32 _interface = (hex & 0x0000FF00) >> 8;
36         u32 _platform  = (hex & 0x00FF0000) >> 16;
37         u32 cond = condition;
38
39         if (condition == 0xCDCDCDCD)
40                 return true;
41
42         cond = condition & 0x000000FF;
43         if ((_board == cond) && cond != 0x00)
44                 return false;
45
46         cond = condition & 0x0000FF00;
47         cond = cond >> 8;
48         if ((_interface & cond) == 0 && cond != 0x07)
49                 return false;
50
51         cond = condition & 0x00FF0000;
52         cond = cond >> 16;
53         if ((_platform & cond) == 0 && cond != 0x0F)
54                 return false;
55         return true;
56 }
57
58
59 /******************************************************************************
60 *                           AGC_TAB_1T.TXT
61 ******************************************************************************/
62
63 static u32 array_agc_tab_1t_8188e[] = {
64                 0xC78, 0xFB000001,
65                 0xC78, 0xFB010001,
66                 0xC78, 0xFB020001,
67                 0xC78, 0xFB030001,
68                 0xC78, 0xFB040001,
69                 0xC78, 0xFB050001,
70                 0xC78, 0xFA060001,
71                 0xC78, 0xF9070001,
72                 0xC78, 0xF8080001,
73                 0xC78, 0xF7090001,
74                 0xC78, 0xF60A0001,
75                 0xC78, 0xF50B0001,
76                 0xC78, 0xF40C0001,
77                 0xC78, 0xF30D0001,
78                 0xC78, 0xF20E0001,
79                 0xC78, 0xF10F0001,
80                 0xC78, 0xF0100001,
81                 0xC78, 0xEF110001,
82                 0xC78, 0xEE120001,
83                 0xC78, 0xED130001,
84                 0xC78, 0xEC140001,
85                 0xC78, 0xEB150001,
86                 0xC78, 0xEA160001,
87                 0xC78, 0xE9170001,
88                 0xC78, 0xE8180001,
89                 0xC78, 0xE7190001,
90                 0xC78, 0xE61A0001,
91                 0xC78, 0xE51B0001,
92                 0xC78, 0xE41C0001,
93                 0xC78, 0xE31D0001,
94                 0xC78, 0xE21E0001,
95                 0xC78, 0xE11F0001,
96                 0xC78, 0x8A200001,
97                 0xC78, 0x89210001,
98                 0xC78, 0x88220001,
99                 0xC78, 0x87230001,
100                 0xC78, 0x86240001,
101                 0xC78, 0x85250001,
102                 0xC78, 0x84260001,
103                 0xC78, 0x83270001,
104                 0xC78, 0x82280001,
105                 0xC78, 0x6B290001,
106                 0xC78, 0x6A2A0001,
107                 0xC78, 0x692B0001,
108                 0xC78, 0x682C0001,
109                 0xC78, 0x672D0001,
110                 0xC78, 0x662E0001,
111                 0xC78, 0x652F0001,
112                 0xC78, 0x64300001,
113                 0xC78, 0x63310001,
114                 0xC78, 0x62320001,
115                 0xC78, 0x61330001,
116                 0xC78, 0x46340001,
117                 0xC78, 0x45350001,
118                 0xC78, 0x44360001,
119                 0xC78, 0x43370001,
120                 0xC78, 0x42380001,
121                 0xC78, 0x41390001,
122                 0xC78, 0x403A0001,
123                 0xC78, 0x403B0001,
124                 0xC78, 0x403C0001,
125                 0xC78, 0x403D0001,
126                 0xC78, 0x403E0001,
127                 0xC78, 0x403F0001,
128                 0xC78, 0xFB400001,
129                 0xC78, 0xFB410001,
130                 0xC78, 0xFB420001,
131                 0xC78, 0xFB430001,
132                 0xC78, 0xFB440001,
133                 0xC78, 0xFB450001,
134                 0xC78, 0xFB460001,
135                 0xC78, 0xFB470001,
136                 0xC78, 0xFB480001,
137                 0xC78, 0xFA490001,
138                 0xC78, 0xF94A0001,
139                 0xC78, 0xF84B0001,
140                 0xC78, 0xF74C0001,
141                 0xC78, 0xF64D0001,
142                 0xC78, 0xF54E0001,
143                 0xC78, 0xF44F0001,
144                 0xC78, 0xF3500001,
145                 0xC78, 0xF2510001,
146                 0xC78, 0xF1520001,
147                 0xC78, 0xF0530001,
148                 0xC78, 0xEF540001,
149                 0xC78, 0xEE550001,
150                 0xC78, 0xED560001,
151                 0xC78, 0xEC570001,
152                 0xC78, 0xEB580001,
153                 0xC78, 0xEA590001,
154                 0xC78, 0xE95A0001,
155                 0xC78, 0xE85B0001,
156                 0xC78, 0xE75C0001,
157                 0xC78, 0xE65D0001,
158                 0xC78, 0xE55E0001,
159                 0xC78, 0xE45F0001,
160                 0xC78, 0xE3600001,
161                 0xC78, 0xE2610001,
162                 0xC78, 0xC3620001,
163                 0xC78, 0xC2630001,
164                 0xC78, 0xC1640001,
165                 0xC78, 0x8B650001,
166                 0xC78, 0x8A660001,
167                 0xC78, 0x89670001,
168                 0xC78, 0x88680001,
169                 0xC78, 0x87690001,
170                 0xC78, 0x866A0001,
171                 0xC78, 0x856B0001,
172                 0xC78, 0x846C0001,
173                 0xC78, 0x676D0001,
174                 0xC78, 0x666E0001,
175                 0xC78, 0x656F0001,
176                 0xC78, 0x64700001,
177                 0xC78, 0x63710001,
178                 0xC78, 0x62720001,
179                 0xC78, 0x61730001,
180                 0xC78, 0x60740001,
181                 0xC78, 0x46750001,
182                 0xC78, 0x45760001,
183                 0xC78, 0x44770001,
184                 0xC78, 0x43780001,
185                 0xC78, 0x42790001,
186                 0xC78, 0x417A0001,
187                 0xC78, 0x407B0001,
188                 0xC78, 0x407C0001,
189                 0xC78, 0x407D0001,
190                 0xC78, 0x407E0001,
191                 0xC78, 0x407F0001,
192 };
193
194 enum HAL_STATUS ODM_ReadAndConfig_AGC_TAB_1T_8188E(struct odm_dm_struct *dm_odm)
195 {
196         u32     hex         = 0;
197         u32     i           = 0;
198         u8     platform    = dm_odm->SupportPlatform;
199         u8     interfaceValue   = dm_odm->SupportInterface;
200         u8     board       = dm_odm->BoardType;
201         u32     arraylen    = sizeof(array_agc_tab_1t_8188e)/sizeof(u32);
202         u32    *array       = array_agc_tab_1t_8188e;
203         bool            biol = false;
204         struct adapter *adapter =  dm_odm->Adapter;
205         struct xmit_frame *pxmit_frame = NULL;
206         u8 bndy_cnt = 1;
207         enum HAL_STATUS rst = HAL_STATUS_SUCCESS;
208
209         hex += board;
210         hex += interfaceValue << 8;
211         hex += platform << 16;
212         hex += 0xFF000000;
213         biol = rtw_IOL_applied(adapter);
214
215         if (biol) {
216                 pxmit_frame = rtw_IOL_accquire_xmit_frame(adapter);
217                 if (pxmit_frame == NULL) {
218                         pr_info("rtw_IOL_accquire_xmit_frame failed\n");
219                         return HAL_STATUS_FAILURE;
220                 }
221         }
222
223         for (i = 0; i < arraylen; i += 2) {
224                 u32 v1 = array[i];
225                 u32 v2 = array[i+1];
226
227                 /*  This (offset, data) pair meets the condition. */
228                 if (v1 < 0xCDCDCDCD) {
229                         if (biol) {
230                                 if (rtw_IOL_cmd_boundary_handle(pxmit_frame))
231                                         bndy_cnt++;
232                                 rtw_IOL_append_WD_cmd(pxmit_frame, (u16)v1, v2, bMaskDWord);
233                         } else {
234                                 odm_ConfigBB_AGC_8188E(dm_odm, v1, bMaskDWord, v2);
235                         }
236                         continue;
237                 } else {
238                         /*  This line is the start line of branch. */
239                         if (!CheckCondition(array[i], hex)) {
240                                 /*  Discard the following (offset, data) pairs. */
241                                 read_next_pair(array, v1, v2, i);
242                                 while (v2 != 0xDEAD &&
243                                        v2 != 0xCDEF &&
244                                        v2 != 0xCDCD && i < arraylen - 2)
245                                         read_next_pair(array, v1, v2, i);
246                                 i -= 2; /*  prevent from for-loop += 2 */
247                         } else { /*  Configure matched pairs and skip to end of if-else. */
248                                 read_next_pair(array, v1, v2, i);
249                                 while (v2 != 0xDEAD &&
250                                        v2 != 0xCDEF &&
251                                        v2 != 0xCDCD && i < arraylen - 2) {
252                                         if (biol) {
253                                                 if (rtw_IOL_cmd_boundary_handle(pxmit_frame))
254                                                         bndy_cnt++;
255                                                 rtw_IOL_append_WD_cmd(pxmit_frame, (u16)v1, v2, bMaskDWord);
256                                         } else {
257                                                 odm_ConfigBB_AGC_8188E(dm_odm, v1, bMaskDWord, v2);
258                                         }
259                                         read_next_pair(array, v1, v2, i);
260                                 }
261
262                                 while (v2 != 0xDEAD && i < arraylen - 2)
263                                         read_next_pair(array, v1, v2, i);
264                         }
265                 }
266         }
267         if (biol) {
268                 if (!rtw_IOL_exec_cmds_sync(dm_odm->Adapter, pxmit_frame, 1000, bndy_cnt)) {
269                         printk("~~~ %s IOL_exec_cmds Failed !!!\n", __func__);
270                         rst = HAL_STATUS_FAILURE;
271                 }
272         }
273         return rst;
274 }
275
276 /******************************************************************************
277 *                           PHY_REG_1T.TXT
278 ******************************************************************************/
279
280 static u32 array_phy_reg_1t_8188e[] = {
281                 0x800, 0x80040000,
282                 0x804, 0x00000003,
283                 0x808, 0x0000FC00,
284                 0x80C, 0x0000000A,
285                 0x810, 0x10001331,
286                 0x814, 0x020C3D10,
287                 0x818, 0x02200385,
288                 0x81C, 0x00000000,
289                 0x820, 0x01000100,
290                 0x824, 0x00390204,
291                 0x828, 0x00000000,
292                 0x82C, 0x00000000,
293                 0x830, 0x00000000,
294                 0x834, 0x00000000,
295                 0x838, 0x00000000,
296                 0x83C, 0x00000000,
297                 0x840, 0x00010000,
298                 0x844, 0x00000000,
299                 0x848, 0x00000000,
300                 0x84C, 0x00000000,
301                 0x850, 0x00000000,
302                 0x854, 0x00000000,
303                 0x858, 0x569A11A9,
304                 0x85C, 0x01000014,
305                 0x860, 0x66F60110,
306                 0x864, 0x061F0649,
307                 0x868, 0x00000000,
308                 0x86C, 0x27272700,
309                 0x870, 0x07000760,
310                 0x874, 0x25004000,
311                 0x878, 0x00000808,
312                 0x87C, 0x00000000,
313                 0x880, 0xB0000C1C,
314                 0x884, 0x00000001,
315                 0x888, 0x00000000,
316                 0x88C, 0xCCC000C0,
317                 0x890, 0x00000800,
318                 0x894, 0xFFFFFFFE,
319                 0x898, 0x40302010,
320                 0x89C, 0x00706050,
321                 0x900, 0x00000000,
322                 0x904, 0x00000023,
323                 0x908, 0x00000000,
324                 0x90C, 0x81121111,
325                 0x910, 0x00000002,
326                 0x914, 0x00000201,
327                 0xA00, 0x00D047C8,
328                 0xA04, 0x80FF000C,
329                 0xA08, 0x8C838300,
330                 0xA0C, 0x2E7F120F,
331                 0xA10, 0x9500BB78,
332                 0xA14, 0x1114D028,
333                 0xA18, 0x00881117,
334                 0xA1C, 0x89140F00,
335                 0xA20, 0x1A1B0000,
336                 0xA24, 0x090E1317,
337                 0xA28, 0x00000204,
338                 0xA2C, 0x00D30000,
339                 0xA70, 0x101FBF00,
340                 0xA74, 0x00000007,
341                 0xA78, 0x00000900,
342                 0xA7C, 0x225B0606,
343                 0xA80, 0x218075B1,
344                 0xB2C, 0x80000000,
345                 0xC00, 0x48071D40,
346                 0xC04, 0x03A05611,
347                 0xC08, 0x000000E4,
348                 0xC0C, 0x6C6C6C6C,
349                 0xC10, 0x08800000,
350                 0xC14, 0x40000100,
351                 0xC18, 0x08800000,
352                 0xC1C, 0x40000100,
353                 0xC20, 0x00000000,
354                 0xC24, 0x00000000,
355                 0xC28, 0x00000000,
356                 0xC2C, 0x00000000,
357                 0xC30, 0x69E9AC47,
358                 0xC34, 0x469652AF,
359                 0xC38, 0x49795994,
360                 0xC3C, 0x0A97971C,
361                 0xC40, 0x1F7C403F,
362                 0xC44, 0x000100B7,
363                 0xC48, 0xEC020107,
364                 0xC4C, 0x007F037F,
365                 0xC50, 0x69553420,
366                 0xC54, 0x43BC0094,
367                 0xC58, 0x00013169,
368                 0xC5C, 0x00250492,
369                 0xC60, 0x00000000,
370                 0xC64, 0x7112848B,
371                 0xC68, 0x47C00BFF,
372                 0xC6C, 0x00000036,
373                 0xC70, 0x2C7F000D,
374                 0xC74, 0x020610DB,
375                 0xC78, 0x0000001F,
376                 0xC7C, 0x00B91612,
377                 0xC80, 0x390000E4,
378                 0xC84, 0x20F60000,
379                 0xC88, 0x40000100,
380                 0xC8C, 0x20200000,
381                 0xC90, 0x00091521,
382                 0xC94, 0x00000000,
383                 0xC98, 0x00121820,
384                 0xC9C, 0x00007F7F,
385                 0xCA0, 0x00000000,
386                 0xCA4, 0x000300A0,
387                 0xCA8, 0x00000000,
388                 0xCAC, 0x00000000,
389                 0xCB0, 0x00000000,
390                 0xCB4, 0x00000000,
391                 0xCB8, 0x00000000,
392                 0xCBC, 0x28000000,
393                 0xCC0, 0x00000000,
394                 0xCC4, 0x00000000,
395                 0xCC8, 0x00000000,
396                 0xCCC, 0x00000000,
397                 0xCD0, 0x00000000,
398                 0xCD4, 0x00000000,
399                 0xCD8, 0x64B22427,
400                 0xCDC, 0x00766932,
401                 0xCE0, 0x00222222,
402                 0xCE4, 0x00000000,
403                 0xCE8, 0x37644302,
404                 0xCEC, 0x2F97D40C,
405                 0xD00, 0x00000740,
406                 0xD04, 0x00020401,
407                 0xD08, 0x0000907F,
408                 0xD0C, 0x20010201,
409                 0xD10, 0xA0633333,
410                 0xD14, 0x3333BC43,
411                 0xD18, 0x7A8F5B6F,
412                 0xD2C, 0xCC979975,
413                 0xD30, 0x00000000,
414                 0xD34, 0x80608000,
415                 0xD38, 0x00000000,
416                 0xD3C, 0x00127353,
417                 0xD40, 0x00000000,
418                 0xD44, 0x00000000,
419                 0xD48, 0x00000000,
420                 0xD4C, 0x00000000,
421                 0xD50, 0x6437140A,
422                 0xD54, 0x00000000,
423                 0xD58, 0x00000282,
424                 0xD5C, 0x30032064,
425                 0xD60, 0x4653DE68,
426                 0xD64, 0x04518A3C,
427                 0xD68, 0x00002101,
428                 0xD6C, 0x2A201C16,
429                 0xD70, 0x1812362E,
430                 0xD74, 0x322C2220,
431                 0xD78, 0x000E3C24,
432                 0xE00, 0x2D2D2D2D,
433                 0xE04, 0x2D2D2D2D,
434                 0xE08, 0x0390272D,
435                 0xE10, 0x2D2D2D2D,
436                 0xE14, 0x2D2D2D2D,
437                 0xE18, 0x2D2D2D2D,
438                 0xE1C, 0x2D2D2D2D,
439                 0xE28, 0x00000000,
440                 0xE30, 0x1000DC1F,
441                 0xE34, 0x10008C1F,
442                 0xE38, 0x02140102,
443                 0xE3C, 0x681604C2,
444                 0xE40, 0x01007C00,
445                 0xE44, 0x01004800,
446                 0xE48, 0xFB000000,
447                 0xE4C, 0x000028D1,
448                 0xE50, 0x1000DC1F,
449                 0xE54, 0x10008C1F,
450                 0xE58, 0x02140102,
451                 0xE5C, 0x28160D05,
452                 0xE60, 0x00000008,
453                 0xE68, 0x001B25A4,
454                 0xE6C, 0x00C00014,
455                 0xE70, 0x00C00014,
456                 0xE74, 0x01000014,
457                 0xE78, 0x01000014,
458                 0xE7C, 0x01000014,
459                 0xE80, 0x01000014,
460                 0xE84, 0x00C00014,
461                 0xE88, 0x01000014,
462                 0xE8C, 0x00C00014,
463                 0xED0, 0x00C00014,
464                 0xED4, 0x00C00014,
465                 0xED8, 0x00C00014,
466                 0xEDC, 0x00000014,
467                 0xEE0, 0x00000014,
468                 0xEEC, 0x01C00014,
469                 0xF14, 0x00000003,
470                 0xF4C, 0x00000000,
471                 0xF00, 0x00000300,
472 };
473
474 enum HAL_STATUS ODM_ReadAndConfig_PHY_REG_1T_8188E(struct odm_dm_struct *dm_odm)
475 {
476         u32     hex         = 0;
477         u32     i           = 0;
478         u8     platform    = dm_odm->SupportPlatform;
479         u8     interfaceValue   = dm_odm->SupportInterface;
480         u8     board       = dm_odm->BoardType;
481         u32     arraylen    = sizeof(array_phy_reg_1t_8188e)/sizeof(u32);
482         u32    *array       = array_phy_reg_1t_8188e;
483         bool    biol = false;
484         struct adapter *adapter =  dm_odm->Adapter;
485         struct xmit_frame *pxmit_frame = NULL;
486         u8 bndy_cnt = 1;
487         enum HAL_STATUS rst = HAL_STATUS_SUCCESS;
488         hex += board;
489         hex += interfaceValue << 8;
490         hex += platform << 16;
491         hex += 0xFF000000;
492         biol = rtw_IOL_applied(adapter);
493
494         if (biol) {
495                 pxmit_frame = rtw_IOL_accquire_xmit_frame(adapter);
496                 if (pxmit_frame == NULL) {
497                         pr_info("rtw_IOL_accquire_xmit_frame failed\n");
498                         return HAL_STATUS_FAILURE;
499                 }
500         }
501
502         for (i = 0; i < arraylen; i += 2) {
503                 u32 v1 = array[i];
504                 u32 v2 = array[i+1];
505
506                 /*  This (offset, data) pair meets the condition. */
507                 if (v1 < 0xCDCDCDCD) {
508                         if (biol) {
509                                 if (rtw_IOL_cmd_boundary_handle(pxmit_frame))
510                                         bndy_cnt++;
511                                 if (v1 == 0xfe) {
512                                         rtw_IOL_append_DELAY_MS_cmd(pxmit_frame, 50);
513                                 } else if (v1 == 0xfd) {
514                                         rtw_IOL_append_DELAY_MS_cmd(pxmit_frame, 5);
515                                 } else if (v1 == 0xfc) {
516                                         rtw_IOL_append_DELAY_MS_cmd(pxmit_frame, 1);
517                                 } else if (v1 == 0xfb) {
518                                         rtw_IOL_append_DELAY_US_cmd(pxmit_frame, 50);
519                                 } else if (v1 == 0xfa) {
520                                         rtw_IOL_append_DELAY_US_cmd(pxmit_frame, 5);
521                                 } else if (v1 == 0xf9) {
522                                         rtw_IOL_append_DELAY_US_cmd(pxmit_frame, 1);
523                                 } else {
524                                         if (v1 == 0xa24)
525                                                 dm_odm->RFCalibrateInfo.RegA24 = v2;
526                                         rtw_IOL_append_WD_cmd(pxmit_frame, (u16)v1, v2, bMaskDWord);
527                                 }
528                         } else {
529                                 odm_ConfigBB_PHY_8188E(dm_odm, v1, bMaskDWord, v2);
530                         }
531                         continue;
532                 } else { /*  This line is the start line of branch. */
533                         if (!CheckCondition(array[i], hex)) {
534                                 /*  Discard the following (offset, data) pairs. */
535                                 read_next_pair(array, v1, v2, i);
536                                 while (v2 != 0xDEAD &&
537                                        v2 != 0xCDEF &&
538                                        v2 != 0xCDCD && i < arraylen - 2)
539                                         read_next_pair(array, v1, v2, i);
540                                 i -= 2; /*  prevent from for-loop += 2 */
541                         } else { /*  Configure matched pairs and skip to end of if-else. */
542                                 read_next_pair(array, v1, v2, i);
543                                 while (v2 != 0xDEAD &&
544                                        v2 != 0xCDEF &&
545                                        v2 != 0xCDCD && i < arraylen - 2) {
546                                         if (biol) {
547                                                 if (rtw_IOL_cmd_boundary_handle(pxmit_frame))
548                                                         bndy_cnt++;
549                                                 if (v1 == 0xfe) {
550                                                         rtw_IOL_append_DELAY_MS_cmd(pxmit_frame, 50);
551                                                 } else if (v1 == 0xfd) {
552                                                         rtw_IOL_append_DELAY_MS_cmd(pxmit_frame, 5);
553                                                 } else if (v1 == 0xfc) {
554                                                         rtw_IOL_append_DELAY_MS_cmd(pxmit_frame, 1);
555                                                 } else if (v1 == 0xfb) {
556                                                         rtw_IOL_append_DELAY_US_cmd(pxmit_frame, 50);
557                                                 } else if (v1 == 0xfa) {
558                                                         rtw_IOL_append_DELAY_US_cmd(pxmit_frame, 5);
559                                                 } else if (v1 == 0xf9) {
560                                                         rtw_IOL_append_DELAY_US_cmd(pxmit_frame, 1);
561                                                 } else{
562                                                         if (v1 == 0xa24)
563                                                                 dm_odm->RFCalibrateInfo.RegA24 = v2;
564
565                                                         rtw_IOL_append_WD_cmd(pxmit_frame, (u16)v1, v2, bMaskDWord);
566                                                 }
567                                         } else {
568                                                 odm_ConfigBB_PHY_8188E(dm_odm, v1, bMaskDWord, v2);
569                                         }
570                                         read_next_pair(array, v1, v2, i);
571                                 }
572
573                                 while (v2 != 0xDEAD && i < arraylen - 2)
574                                         read_next_pair(array, v1, v2, i);
575                         }
576                 }
577         }
578         if (biol) {
579                 if (!rtw_IOL_exec_cmds_sync(dm_odm->Adapter, pxmit_frame, 1000, bndy_cnt)) {
580                         rst = HAL_STATUS_FAILURE;
581                         pr_info("~~~ IOL Config %s Failed !!!\n", __func__);
582                 }
583         }
584         return rst;
585 }
586
587 /******************************************************************************
588 *                           PHY_REG_PG.TXT
589 ******************************************************************************/
590
591 static u32 array_phy_reg_pg_8188e[] = {
592                 0xE00, 0xFFFFFFFF, 0x06070809,
593                 0xE04, 0xFFFFFFFF, 0x02020405,
594                 0xE08, 0x0000FF00, 0x00000006,
595                 0x86C, 0xFFFFFF00, 0x00020400,
596                 0xE10, 0xFFFFFFFF, 0x08090A0B,
597                 0xE14, 0xFFFFFFFF, 0x01030607,
598                 0xE18, 0xFFFFFFFF, 0x08090A0B,
599                 0xE1C, 0xFFFFFFFF, 0x01030607,
600                 0xE00, 0xFFFFFFFF, 0x00000000,
601                 0xE04, 0xFFFFFFFF, 0x00000000,
602                 0xE08, 0x0000FF00, 0x00000000,
603                 0x86C, 0xFFFFFF00, 0x00000000,
604                 0xE10, 0xFFFFFFFF, 0x00000000,
605                 0xE14, 0xFFFFFFFF, 0x00000000,
606                 0xE18, 0xFFFFFFFF, 0x00000000,
607                 0xE1C, 0xFFFFFFFF, 0x00000000,
608                 0xE00, 0xFFFFFFFF, 0x02020202,
609                 0xE04, 0xFFFFFFFF, 0x00020202,
610                 0xE08, 0x0000FF00, 0x00000000,
611                 0x86C, 0xFFFFFF00, 0x00000000,
612                 0xE10, 0xFFFFFFFF, 0x04040404,
613                 0xE14, 0xFFFFFFFF, 0x00020404,
614                 0xE18, 0xFFFFFFFF, 0x00000000,
615                 0xE1C, 0xFFFFFFFF, 0x00000000,
616                 0xE00, 0xFFFFFFFF, 0x02020202,
617                 0xE04, 0xFFFFFFFF, 0x00020202,
618                 0xE08, 0x0000FF00, 0x00000000,
619                 0x86C, 0xFFFFFF00, 0x00000000,
620                 0xE10, 0xFFFFFFFF, 0x04040404,
621                 0xE14, 0xFFFFFFFF, 0x00020404,
622                 0xE18, 0xFFFFFFFF, 0x00000000,
623                 0xE1C, 0xFFFFFFFF, 0x00000000,
624                 0xE00, 0xFFFFFFFF, 0x00000000,
625                 0xE04, 0xFFFFFFFF, 0x00000000,
626                 0xE08, 0x0000FF00, 0x00000000,
627                 0x86C, 0xFFFFFF00, 0x00000000,
628                 0xE10, 0xFFFFFFFF, 0x00000000,
629                 0xE14, 0xFFFFFFFF, 0x00000000,
630                 0xE18, 0xFFFFFFFF, 0x00000000,
631                 0xE1C, 0xFFFFFFFF, 0x00000000,
632                 0xE00, 0xFFFFFFFF, 0x02020202,
633                 0xE04, 0xFFFFFFFF, 0x00020202,
634                 0xE08, 0x0000FF00, 0x00000000,
635                 0x86C, 0xFFFFFF00, 0x00000000,
636                 0xE10, 0xFFFFFFFF, 0x04040404,
637                 0xE14, 0xFFFFFFFF, 0x00020404,
638                 0xE18, 0xFFFFFFFF, 0x00000000,
639                 0xE1C, 0xFFFFFFFF, 0x00000000,
640                 0xE00, 0xFFFFFFFF, 0x00000000,
641                 0xE04, 0xFFFFFFFF, 0x00000000,
642                 0xE08, 0x0000FF00, 0x00000000,
643                 0x86C, 0xFFFFFF00, 0x00000000,
644                 0xE10, 0xFFFFFFFF, 0x00000000,
645                 0xE14, 0xFFFFFFFF, 0x00000000,
646                 0xE18, 0xFFFFFFFF, 0x00000000,
647                 0xE1C, 0xFFFFFFFF, 0x00000000,
648                 0xE00, 0xFFFFFFFF, 0x00000000,
649                 0xE04, 0xFFFFFFFF, 0x00000000,
650                 0xE08, 0x0000FF00, 0x00000000,
651                 0x86C, 0xFFFFFF00, 0x00000000,
652                 0xE10, 0xFFFFFFFF, 0x00000000,
653                 0xE14, 0xFFFFFFFF, 0x00000000,
654                 0xE18, 0xFFFFFFFF, 0x00000000,
655                 0xE1C, 0xFFFFFFFF, 0x00000000,
656                 0xE00, 0xFFFFFFFF, 0x00000000,
657                 0xE04, 0xFFFFFFFF, 0x00000000,
658                 0xE08, 0x0000FF00, 0x00000000,
659                 0x86C, 0xFFFFFF00, 0x00000000,
660                 0xE10, 0xFFFFFFFF, 0x00000000,
661                 0xE14, 0xFFFFFFFF, 0x00000000,
662                 0xE18, 0xFFFFFFFF, 0x00000000,
663                 0xE1C, 0xFFFFFFFF, 0x00000000,
664                 0xE00, 0xFFFFFFFF, 0x00000000,
665                 0xE04, 0xFFFFFFFF, 0x00000000,
666                 0xE08, 0x0000FF00, 0x00000000,
667                 0x86C, 0xFFFFFF00, 0x00000000,
668                 0xE10, 0xFFFFFFFF, 0x00000000,
669                 0xE14, 0xFFFFFFFF, 0x00000000,
670                 0xE18, 0xFFFFFFFF, 0x00000000,
671                 0xE1C, 0xFFFFFFFF, 0x00000000,
672                 0xE00, 0xFFFFFFFF, 0x00000000,
673                 0xE04, 0xFFFFFFFF, 0x00000000,
674                 0xE08, 0x0000FF00, 0x00000000,
675                 0x86C, 0xFFFFFF00, 0x00000000,
676                 0xE10, 0xFFFFFFFF, 0x00000000,
677                 0xE14, 0xFFFFFFFF, 0x00000000,
678                 0xE18, 0xFFFFFFFF, 0x00000000,
679                 0xE1C, 0xFFFFFFFF, 0x00000000,
680
681 };
682
683 void ODM_ReadAndConfig_PHY_REG_PG_8188E(struct odm_dm_struct *dm_odm)
684 {
685         u32  hex;
686         u32  i           = 0;
687         u8  platform    = dm_odm->SupportPlatform;
688         u8  interfaceValue   = dm_odm->SupportInterface;
689         u8  board       = dm_odm->BoardType;
690         u32  arraylen    = sizeof(array_phy_reg_pg_8188e) / sizeof(u32);
691         u32 *array       = array_phy_reg_pg_8188e;
692
693         hex = board + (interfaceValue << 8);
694         hex += (platform << 16) + 0xFF000000;
695
696         for (i = 0; i < arraylen; i += 3) {
697                 u32 v1 = array[i];
698                 u32 v2 = array[i+1];
699                 u32 v3 = array[i+2];
700
701                 /*  this line is a line of pure_body */
702                 if (v1 < 0xCDCDCDCD) {
703                         odm_ConfigBB_PHY_REG_PG_8188E(dm_odm, v1, v2, v3);
704                         continue;
705                 } else { /*  this line is the start of branch */
706                         if (!CheckCondition(array[i], hex)) {
707                                 /*  don't need the hw_body */
708                                 i += 2; /*  skip the pair of expression */
709                                 v1 = array[i];
710                                 v2 = array[i+1];
711                                 v3 = array[i+2];
712                                 while (v2 != 0xDEAD) {
713                                         i += 3;
714                                         v1 = array[i];
715                                         v2 = array[i+1];
716                                         v3 = array[i+1];
717                                 }
718                         }
719                 }
720         }
721 }