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