net: wireless: rockchip_wlan: add rtl8723bs support
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8723bs / hal / phydm / rtl8723b / halhwimg8723b_bb.c
1 /****************************************************************************** \r
2\r
3 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. \r
4\r
5 * This program is free software; you can redistribute it and/or modify it \r
6 * under the terms of version 2 of the GNU General Public License as \r
7 * published by the Free Software Foundation. \r
8\r
9 * This program is distributed in the hope that it will be useful, but WITHOUT \r
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or \r
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for \r
12 * more details. \r
13\r
14 * You should have received a copy of the GNU General Public License along with \r
15 * this program; if not, write to the Free Software Foundation, Inc., \r
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA \r
17\r
18\r
19 ******************************************************************************/\r
20 \r
21 /*Image2HeaderVersion: 2.14*/\r
22 #include "mp_precomp.h"\r
23 #include "../phydm_precomp.h"\r
24 \r
25 #if (RTL8723B_SUPPORT == 1)\r
26 static BOOLEAN\r
27 CheckPositive(\r
28         IN  PDM_ODM_T     pDM_Odm,\r
29         IN  const u4Byte  Condition1,\r
30         IN  const u4Byte  Condition2,\r
31         IN      const u4Byte  Condition3,\r
32         IN      const u4Byte  Condition4\r
33 )\r
34 {\r
35         u1Byte    _BoardType = ((pDM_Odm->BoardType & BIT4) >> 4) << 0 | /* _GLNA*/\r
36                                 ((pDM_Odm->BoardType & BIT3) >> 3) << 1 | /* _GPA*/ \r
37                                 ((pDM_Odm->BoardType & BIT7) >> 7) << 2 | /* _ALNA*/\r
38                                 ((pDM_Odm->BoardType & BIT6) >> 6) << 3 | /* _APA */\r
39                                 ((pDM_Odm->BoardType & BIT2) >> 2) << 4;  /* _BT*/  \r
40 \r
41         u4Byte  cond1   = Condition1, cond2 = Condition2, cond3 = Condition3, cond4 = Condition4;\r
42         u4Byte    driver1 = pDM_Odm->CutVersion       << 24 | \r
43                                 (pDM_Odm->SupportInterface & 0xF0) << 16 | \r
44                                 pDM_Odm->SupportPlatform  << 16 | \r
45                                 pDM_Odm->PackageType      << 12 | \r
46                                 (pDM_Odm->SupportInterface & 0x0F) << 8  |\r
47                                 _BoardType;\r
48 \r
49         u4Byte    driver2 = (pDM_Odm->TypeGLNA & 0xFF) <<  0 |  \r
50                                 (pDM_Odm->TypeGPA & 0xFF)  <<  8 | \r
51                                 (pDM_Odm->TypeALNA & 0xFF) << 16 | \r
52                                 (pDM_Odm->TypeAPA & 0xFF)  << 24; \r
53 \r
54 u4Byte    driver3 = 0;\r
55 \r
56         u4Byte    driver4 = (pDM_Odm->TypeGLNA & 0xFF00) >>  8 |\r
57                                 (pDM_Odm->TypeGPA & 0xFF00) |\r
58                                 (pDM_Odm->TypeALNA & 0xFF00) << 8 |\r
59                                 (pDM_Odm->TypeAPA & 0xFF00)  << 16;\r
60 \r
61         ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE, \r
62         ("===> CheckPositive (cond1, cond2, cond3, cond4) = (0x%X 0x%X 0x%X 0x%X)\n", cond1, cond2, cond3, cond4));\r
63         ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE, \r
64         ("===> CheckPositive (driver1, driver2, driver3, driver4) = (0x%X 0x%X 0x%X 0x%X)\n", driver1, driver2, driver3, driver4));\r
65 \r
66         ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE, \r
67         ("      (Platform, Interface) = (0x%X, 0x%X)\n", pDM_Odm->SupportPlatform, pDM_Odm->SupportInterface));\r
68         ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE, \r
69         ("      (Board, Package) = (0x%X, 0x%X)\n", pDM_Odm->BoardType, pDM_Odm->PackageType));\r
70 \r
71 \r
72         /*============== Value Defined Check ===============*/\r
73         /*QFN Type [15:12] and Cut Version [27:24] need to do value check*/\r
74         \r
75         if (((cond1 & 0x0000F000) != 0) && ((cond1 & 0x0000F000) != (driver1 & 0x0000F000)))\r
76                 return FALSE;\r
77         if (((cond1 & 0x0F000000) != 0) && ((cond1 & 0x0F000000) != (driver1 & 0x0F000000)))\r
78                 return FALSE;\r
79 \r
80         /*=============== Bit Defined Check ================*/\r
81         /* We don't care [31:28] */\r
82 \r
83         cond1   &= 0x00FF0FFF; \r
84         driver1 &= 0x00FF0FFF; \r
85 \r
86         if ((cond1 & driver1) == cond1) {\r
87                 u4Byte bitMask = 0;\r
88 \r
89                 if ((cond1 & 0x0F) == 0) /* BoardType is DONTCARE*/\r
90                         return TRUE;\r
91 \r
92                 if ((cond1 & BIT0) != 0) /*GLNA*/\r
93                         bitMask |= 0x000000FF;\r
94                 if ((cond1 & BIT1) != 0) /*GPA*/\r
95                         bitMask |= 0x0000FF00;\r
96                 if ((cond1 & BIT2) != 0) /*ALNA*/\r
97                         bitMask |= 0x00FF0000;\r
98                 if ((cond1 & BIT3) != 0) /*APA*/\r
99                         bitMask |= 0xFF000000;\r
100 \r
101                 if (((cond2 & bitMask) == (driver2 & bitMask)) && ((cond4 & bitMask) == (driver4 & bitMask)))  /* BoardType of each RF path is matched*/\r
102                         return TRUE;\r
103                 else\r
104                         return FALSE;\r
105         } else\r
106                 return FALSE;\r
107 }\r
108 static BOOLEAN\r
109 CheckNegative(\r
110         IN  PDM_ODM_T     pDM_Odm,\r
111         IN  const u4Byte  Condition1,\r
112         IN  const u4Byte  Condition2\r
113 )\r
114 {\r
115         return TRUE;\r
116 }\r
117 \r
118 /******************************************************************************\r
119 *                           AGC_TAB.TXT\r
120 ******************************************************************************/\r
121 \r
122 u4Byte Array_MP_8723B_AGC_TAB[] = { \r
123                 0xC78, 0xFD000001,\r
124                 0xC78, 0xFC010001,\r
125                 0xC78, 0xFB020001,\r
126                 0xC78, 0xFA030001,\r
127                 0xC78, 0xF9040001,\r
128                 0xC78, 0xF8050001,\r
129                 0xC78, 0xF7060001,\r
130                 0xC78, 0xF6070001,\r
131                 0xC78, 0xF5080001,\r
132                 0xC78, 0xF4090001,\r
133                 0xC78, 0xF30A0001,\r
134                 0xC78, 0xF20B0001,\r
135                 0xC78, 0xF10C0001,\r
136                 0xC78, 0xF00D0001,\r
137                 0xC78, 0xEF0E0001,\r
138                 0xC78, 0xEE0F0001,\r
139                 0xC78, 0xED100001,\r
140                 0xC78, 0xEC110001,\r
141                 0xC78, 0xEB120001,\r
142                 0xC78, 0xEA130001,\r
143                 0xC78, 0xE9140001,\r
144                 0xC78, 0xE8150001,\r
145                 0xC78, 0xE7160001,\r
146                 0xC78, 0xE6170001,\r
147                 0xC78, 0xE5180001,\r
148                 0xC78, 0xE4190001,\r
149                 0xC78, 0xE31A0001,\r
150                 0xC78, 0xA51B0001,\r
151                 0xC78, 0xA41C0001,\r
152                 0xC78, 0xA31D0001,\r
153                 0xC78, 0x671E0001,\r
154                 0xC78, 0x661F0001,\r
155                 0xC78, 0x65200001,\r
156                 0xC78, 0x64210001,\r
157                 0xC78, 0x63220001,\r
158                 0xC78, 0x4A230001,\r
159                 0xC78, 0x49240001,\r
160                 0xC78, 0x48250001,\r
161                 0xC78, 0x47260001,\r
162                 0xC78, 0x46270001,\r
163                 0xC78, 0x45280001,\r
164                 0xC78, 0x44290001,\r
165                 0xC78, 0x432A0001,\r
166                 0xC78, 0x422B0001,\r
167                 0xC78, 0x292C0001,\r
168                 0xC78, 0x282D0001,\r
169                 0xC78, 0x272E0001,\r
170                 0xC78, 0x262F0001,\r
171                 0xC78, 0x0A300001,\r
172                 0xC78, 0x09310001,\r
173                 0xC78, 0x08320001,\r
174                 0xC78, 0x07330001,\r
175                 0xC78, 0x06340001,\r
176                 0xC78, 0x05350001,\r
177                 0xC78, 0x04360001,\r
178                 0xC78, 0x03370001,\r
179                 0xC78, 0x02380001,\r
180                 0xC78, 0x01390001,\r
181                 0xC78, 0x013A0001,\r
182                 0xC78, 0x013B0001,\r
183                 0xC78, 0x013C0001,\r
184                 0xC78, 0x013D0001,\r
185                 0xC78, 0x013E0001,\r
186                 0xC78, 0x013F0001,\r
187                 0xC78, 0xFC400001,\r
188                 0xC78, 0xFB410001,\r
189                 0xC78, 0xFA420001,\r
190                 0xC78, 0xF9430001,\r
191                 0xC78, 0xF8440001,\r
192                 0xC78, 0xF7450001,\r
193                 0xC78, 0xF6460001,\r
194                 0xC78, 0xF5470001,\r
195                 0xC78, 0xF4480001,\r
196                 0xC78, 0xF3490001,\r
197                 0xC78, 0xF24A0001,\r
198                 0xC78, 0xF14B0001,\r
199                 0xC78, 0xF04C0001,\r
200                 0xC78, 0xEF4D0001,\r
201                 0xC78, 0xEE4E0001,\r
202                 0xC78, 0xED4F0001,\r
203                 0xC78, 0xEC500001,\r
204                 0xC78, 0xEB510001,\r
205                 0xC78, 0xEA520001,\r
206                 0xC78, 0xE9530001,\r
207                 0xC78, 0xE8540001,\r
208                 0xC78, 0xE7550001,\r
209                 0xC78, 0xE6560001,\r
210                 0xC78, 0xE5570001,\r
211                 0xC78, 0xE4580001,\r
212                 0xC78, 0xE3590001,\r
213                 0xC78, 0xA65A0001,\r
214                 0xC78, 0xA55B0001,\r
215                 0xC78, 0xA45C0001,\r
216                 0xC78, 0xA35D0001,\r
217                 0xC78, 0x675E0001,\r
218                 0xC78, 0x665F0001,\r
219                 0xC78, 0x65600001,\r
220                 0xC78, 0x64610001,\r
221                 0xC78, 0x63620001,\r
222                 0xC78, 0x62630001,\r
223                 0xC78, 0x61640001,\r
224                 0xC78, 0x48650001,\r
225                 0xC78, 0x47660001,\r
226                 0xC78, 0x46670001,\r
227                 0xC78, 0x45680001,\r
228                 0xC78, 0x44690001,\r
229                 0xC78, 0x436A0001,\r
230                 0xC78, 0x426B0001,\r
231                 0xC78, 0x286C0001,\r
232                 0xC78, 0x276D0001,\r
233                 0xC78, 0x266E0001,\r
234                 0xC78, 0x256F0001,\r
235                 0xC78, 0x24700001,\r
236                 0xC78, 0x09710001,\r
237                 0xC78, 0x08720001,\r
238                 0xC78, 0x07730001,\r
239                 0xC78, 0x06740001,\r
240                 0xC78, 0x05750001,\r
241                 0xC78, 0x04760001,\r
242                 0xC78, 0x03770001,\r
243                 0xC78, 0x02780001,\r
244                 0xC78, 0x01790001,\r
245                 0xC78, 0x017A0001,\r
246                 0xC78, 0x017B0001,\r
247                 0xC78, 0x017C0001,\r
248                 0xC78, 0x017D0001,\r
249                 0xC78, 0x017E0001,\r
250                 0xC78, 0x017F0001,\r
251                 0xC50, 0x69553422,\r
252                 0xC50, 0x69553420,\r
253                 0x824, 0x00390204,\r
254 \r
255 };\r
256 \r
257 void\r
258 ODM_ReadAndConfig_MP_8723B_AGC_TAB(\r
259         IN   PDM_ODM_T  pDM_Odm\r
260 )\r
261 {\r
262         u4Byte     i         = 0;\r
263         u1Byte     cCond;\r
264         BOOLEAN bMatched = TRUE, bSkipped = FALSE;\r
265         u4Byte     ArrayLen    = sizeof(Array_MP_8723B_AGC_TAB)/sizeof(u4Byte);\r
266         pu4Byte    Array       = Array_MP_8723B_AGC_TAB;\r
267         \r
268         u4Byte  v1 = 0, v2 = 0, pre_v1 = 0, pre_v2 = 0;\r
269 \r
270         ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("===> ODM_ReadAndConfig_MP_8723B_AGC_TAB\n"));\r
271 \r
272         while ((i + 1) < ArrayLen) {\r
273                 v1 = Array[i];\r
274                 v2 = Array[i + 1];\r
275 \r
276                 if (v1 & (BIT31 | BIT30)) {/*positive & negative condition*/\r
277                         if (v1 & BIT31) {/* positive condition*/\r
278                                 cCond  = (u1Byte)((v1 & (BIT29|BIT28)) >> 28);\r
279                                 if (cCond == COND_ENDIF) {/*end*/\r
280                                         bMatched = TRUE;\r
281                                         bSkipped = FALSE;\r
282                                         ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("ENDIF\n"));\r
283                                 } else if (cCond == COND_ELSE) { /*else*/\r
284                                         bMatched = bSkipped?FALSE:TRUE;\r
285                                         ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("ELSE\n"));\r
286                                 }\r
287                                 else {/*if , else if*/\r
288                                         pre_v1 = v1;\r
289                                         pre_v2 = v2;\r
290                                         ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("IF or ELSE IF\n"));\r
291                                 }\r
292                         } else if (v1 & BIT30) { /*negative condition*/\r
293                                 if (bSkipped == FALSE) {\r
294                                         if (CheckPositive(pDM_Odm, pre_v1, pre_v2, v1, v2)) {\r
295                                                 bMatched = TRUE;\r
296                                                 bSkipped = TRUE;\r
297                                         } else {\r
298                                                 bMatched = FALSE;\r
299                                                 bSkipped = FALSE;\r
300                                         }\r
301                                 } else\r
302                                         bMatched = FALSE;\r
303                         }\r
304                 } else {\r
305                         if (bMatched)\r
306                                 odm_ConfigBB_AGC_8723B(pDM_Odm, v1, bMaskDWord, v2);\r
307                 }\r
308                 i = i + 2;\r
309         }\r
310 }\r
311 \r
312 u4Byte\r
313 ODM_GetVersion_MP_8723B_AGC_TAB(void)\r
314 {\r
315            return 24;\r
316 }\r
317 \r
318 /******************************************************************************\r
319 *                           PHY_REG.TXT\r
320 ******************************************************************************/\r
321 \r
322 u4Byte Array_MP_8723B_PHY_REG[] = { \r
323                 0x800, 0x80040000,\r
324                 0x804, 0x00000003,\r
325                 0x808, 0x0000FC00,\r
326                 0x80C, 0x0000000A,\r
327                 0x810, 0x10001331,\r
328                 0x814, 0x020C3D10,\r
329                 0x818, 0x02200385,\r
330                 0x81C, 0x00000000,\r
331                 0x820, 0x01000100,\r
332                 0x824, 0x00190204,\r
333                 0x828, 0x00000000,\r
334                 0x82C, 0x00000000,\r
335                 0x830, 0x00000000,\r
336                 0x834, 0x00000000,\r
337                 0x838, 0x00000000,\r
338                 0x83C, 0x00000000,\r
339                 0x840, 0x00010000,\r
340                 0x844, 0x00000000,\r
341                 0x848, 0x00000000,\r
342                 0x84C, 0x00000000,\r
343                 0x850, 0x00000000,\r
344                 0x854, 0x00000000,\r
345                 0x858, 0x569A11A9,\r
346                 0x85C, 0x01000014,\r
347                 0x860, 0x66F60110,\r
348                 0x864, 0x061F0649,\r
349                 0x868, 0x00000000,\r
350                 0x86C, 0x27272700,\r
351                 0x870, 0x07000760,\r
352                 0x874, 0x25004000,\r
353                 0x878, 0x00000808,\r
354                 0x87C, 0x00000000,\r
355                 0x880, 0xB0000C1C,\r
356                 0x884, 0x00000001,\r
357                 0x888, 0x00000000,\r
358                 0x88C, 0xCCC000C0,\r
359                 0x890, 0x00000800,\r
360                 0x894, 0xFFFFFFFE,\r
361                 0x898, 0x40302010,\r
362                 0x89C, 0x00706050,\r
363                 0x900, 0x00000000,\r
364                 0x904, 0x00000023,\r
365                 0x908, 0x00000000,\r
366                 0x90C, 0x81121111,\r
367                 0x910, 0x00000002,\r
368                 0x914, 0x00000201,\r
369                 0xA00, 0x00D047C8,\r
370                 0xA04, 0x80FF800C,\r
371                 0xA08, 0x8C838300,\r
372                 0xA0C, 0x2E7F120F,\r
373                 0xA10, 0x9500BB78,\r
374                 0xA14, 0x1114D028,\r
375                 0xA18, 0x00881117,\r
376                 0xA1C, 0x89140F00,\r
377                 0xA20, 0x1A1B0000,\r
378                 0xA24, 0x090E1317,\r
379                 0xA28, 0x00000204,\r
380                 0xA2C, 0x00D30000,\r
381                 0xA70, 0x101FBF00,\r
382                 0xA74, 0x00000007,\r
383                 0xA78, 0x00000900,\r
384                 0xA7C, 0x225B0606,\r
385                 0xA80, 0x21806490,\r
386                 0xB2C, 0x00000000,\r
387                 0xC00, 0x48071D40,\r
388                 0xC04, 0x03A05611,\r
389                 0xC08, 0x000000E4,\r
390                 0xC0C, 0x6C6C6C6C,\r
391                 0xC10, 0x08800000,\r
392                 0xC14, 0x40000100,\r
393                 0xC18, 0x08800000,\r
394                 0xC1C, 0x40000100,\r
395                 0xC20, 0x00000000,\r
396                 0xC24, 0x00000000,\r
397                 0xC28, 0x00000000,\r
398                 0xC2C, 0x00000000,\r
399                 0xC30, 0x69E9AC44,\r
400                 0xC34, 0x469652AF,\r
401                 0xC38, 0x49795994,\r
402                 0xC3C, 0x0A97971C,\r
403                 0xC40, 0x1F7C403F,\r
404                 0xC44, 0x000100B7,\r
405                 0xC48, 0xEC020107,\r
406                 0xC4C, 0x007F037F,\r
407                 0xC50, 0x69553420,\r
408                 0xC54, 0x43BC0094,\r
409                 0xC58, 0x00013147,\r
410                 0xC5C, 0x00250492,\r
411                 0xC60, 0x00000000,\r
412                 0xC64, 0x7112848B,\r
413                 0xC68, 0x47C00BFF,\r
414                 0xC6C, 0x00000036,\r
415                 0xC70, 0x2C7F000D,\r
416                 0xC74, 0x020610DB,\r
417                 0xC78, 0x0000001F,\r
418                 0xC7C, 0x00B91612,\r
419                 0xC80, 0x390000E4,\r
420                 0xC84, 0x21F60000,\r
421                 0xC88, 0x40000100,\r
422                 0xC8C, 0x20200000,\r
423                 0xC90, 0x00020E1A,\r
424                 0xC94, 0x00000000,\r
425                 0xC98, 0x00020E1A,\r
426                 0xC9C, 0x00007F7F,\r
427                 0xCA0, 0x00000000,\r
428                 0xCA4, 0x000300A0,\r
429                 0xCA8, 0x00000000,\r
430                 0xCAC, 0x00000000,\r
431                 0xCB0, 0x00000000,\r
432                 0xCB4, 0x00000000,\r
433                 0xCB8, 0x00000000,\r
434                 0xCBC, 0x28000000,\r
435                 0xCC0, 0x00000000,\r
436                 0xCC4, 0x00000000,\r
437                 0xCC8, 0x00000000,\r
438                 0xCCC, 0x00000000,\r
439                 0xCD0, 0x00000000,\r
440                 0xCD4, 0x00000000,\r
441                 0xCD8, 0x64B22427,\r
442                 0xCDC, 0x00766932,\r
443                 0xCE0, 0x00222222,\r
444                 0xCE4, 0x00000000,\r
445                 0xCE8, 0x37644302,\r
446                 0xCEC, 0x2F97D40C,\r
447                 0xD00, 0x00000740,\r
448                 0xD04, 0x40020401,\r
449                 0xD08, 0x0000907F,\r
450                 0xD0C, 0x20010201,\r
451                 0xD10, 0xA0633333,\r
452                 0xD14, 0x3333BC53,\r
453                 0xD18, 0x7A8F5B6F,\r
454                 0xD2C, 0xCC979975,\r
455                 0xD30, 0x00000000,\r
456                 0xD34, 0x80608000,\r
457                 0xD38, 0x00000000,\r
458                 0xD3C, 0x00127353,\r
459                 0xD40, 0x00000000,\r
460                 0xD44, 0x00000000,\r
461                 0xD48, 0x00000000,\r
462                 0xD4C, 0x00000000,\r
463                 0xD50, 0x6437140A,\r
464                 0xD54, 0x00000000,\r
465                 0xD58, 0x00000282,\r
466                 0xD5C, 0x30032064,\r
467                 0xD60, 0x4653DE68,\r
468                 0xD64, 0x04518A3C,\r
469                 0xD68, 0x00002101,\r
470                 0xD6C, 0x2A201C16,\r
471                 0xD70, 0x1812362E,\r
472                 0xD74, 0x322C2220,\r
473                 0xD78, 0x000E3C24,\r
474                 0xE00, 0x2D2D2D2D,\r
475                 0xE04, 0x2D2D2D2D,\r
476                 0xE08, 0x0390272D,\r
477                 0xE10, 0x2D2D2D2D,\r
478                 0xE14, 0x2D2D2D2D,\r
479                 0xE18, 0x2D2D2D2D,\r
480                 0xE1C, 0x2D2D2D2D,\r
481                 0xE28, 0x00000000,\r
482                 0xE30, 0x1000DC1F,\r
483                 0xE34, 0x10008C1F,\r
484                 0xE38, 0x02140102,\r
485                 0xE3C, 0x681604C2,\r
486                 0xE40, 0x01007C00,\r
487                 0xE44, 0x01004800,\r
488                 0xE48, 0xFB000000,\r
489                 0xE4C, 0x000028D1,\r
490                 0xE50, 0x1000DC1F,\r
491                 0xE54, 0x10008C1F,\r
492                 0xE58, 0x02140102,\r
493                 0xE5C, 0x28160D05,\r
494                 0xE60, 0x00000048,\r
495                 0xE68, 0x001B2556,\r
496                 0xE6C, 0x00C00096,\r
497                 0xE70, 0x00C00096,\r
498                 0xE74, 0x01000056,\r
499                 0xE78, 0x01000014,\r
500                 0xE7C, 0x01000056,\r
501                 0xE80, 0x01000014,\r
502                 0xE84, 0x00C00096,\r
503                 0xE88, 0x01000056,\r
504                 0xE8C, 0x00C00096,\r
505                 0xED0, 0x00C00096,\r
506                 0xED4, 0x00C00096,\r
507                 0xED8, 0x00C00096,\r
508                 0xEDC, 0x000000D6,\r
509                 0xEE0, 0x000000D6,\r
510                 0xEEC, 0x01C00016,\r
511                 0xF14, 0x00000003,\r
512                 0xF4C, 0x00000000,\r
513                 0xF00, 0x00000300,\r
514                 0x820, 0x01000100,\r
515                 0x800, 0x83040000,\r
516 \r
517 };\r
518 \r
519 void\r
520 ODM_ReadAndConfig_MP_8723B_PHY_REG(\r
521         IN   PDM_ODM_T  pDM_Odm\r
522 )\r
523 {\r
524         u4Byte     i         = 0;\r
525         u1Byte     cCond;\r
526         BOOLEAN bMatched = TRUE, bSkipped = FALSE;\r
527         u4Byte     ArrayLen    = sizeof(Array_MP_8723B_PHY_REG)/sizeof(u4Byte);\r
528         pu4Byte    Array       = Array_MP_8723B_PHY_REG;\r
529         \r
530         u4Byte  v1 = 0, v2 = 0, pre_v1 = 0, pre_v2 = 0;\r
531 \r
532         ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("===> ODM_ReadAndConfig_MP_8723B_PHY_REG\n"));\r
533 \r
534         while ((i + 1) < ArrayLen) {\r
535                 v1 = Array[i];\r
536                 v2 = Array[i + 1];\r
537 \r
538                 if (v1 & (BIT31 | BIT30)) {/*positive & negative condition*/\r
539                         if (v1 & BIT31) {/* positive condition*/\r
540                                 cCond  = (u1Byte)((v1 & (BIT29|BIT28)) >> 28);\r
541                                 if (cCond == COND_ENDIF) {/*end*/\r
542                                         bMatched = TRUE;\r
543                                         bSkipped = FALSE;\r
544                                         ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("ENDIF\n"));\r
545                                 } else if (cCond == COND_ELSE) { /*else*/\r
546                                         bMatched = bSkipped?FALSE:TRUE;\r
547                                         ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("ELSE\n"));\r
548                                 }\r
549                                 else {/*if , else if*/\r
550                                         pre_v1 = v1;\r
551                                         pre_v2 = v2;\r
552                                         ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("IF or ELSE IF\n"));\r
553                                 }\r
554                         } else if (v1 & BIT30) { /*negative condition*/\r
555                                 if (bSkipped == FALSE) {\r
556                                         if (CheckPositive(pDM_Odm, pre_v1, pre_v2, v1, v2)) {\r
557                                                 bMatched = TRUE;\r
558                                                 bSkipped = TRUE;\r
559                                         } else {\r
560                                                 bMatched = FALSE;\r
561                                                 bSkipped = FALSE;\r
562                                         }\r
563                                 } else\r
564                                         bMatched = FALSE;\r
565                         }\r
566                 } else {\r
567                         if (bMatched)\r
568                                 odm_ConfigBB_PHY_8723B(pDM_Odm, v1, bMaskDWord, v2);\r
569                 }\r
570                 i = i + 2;\r
571         }\r
572 }\r
573 \r
574 u4Byte\r
575 ODM_GetVersion_MP_8723B_PHY_REG(void)\r
576 {\r
577            return 24;\r
578 }\r
579 \r
580 /******************************************************************************\r
581 *                           PHY_REG_PG.TXT\r
582 ******************************************************************************/\r
583 \r
584 u4Byte Array_MP_8723B_PHY_REG_PG[] = { \r
585         0, 0, 0, 0x00000e08, 0x0000ff00, 0x00003800,\r
586         0, 0, 0, 0x0000086c, 0xffffff00, 0x32343600,\r
587         0, 0, 0, 0x00000e00, 0xffffffff, 0x40424444,\r
588         0, 0, 0, 0x00000e04, 0xffffffff, 0x28323638,\r
589         0, 0, 0, 0x00000e10, 0xffffffff, 0x38404244,\r
590         0, 0, 0, 0x00000e14, 0xffffffff, 0x26303436\r
591 };\r
592 \r
593 void\r
594 ODM_ReadAndConfig_MP_8723B_PHY_REG_PG(\r
595         IN   PDM_ODM_T  pDM_Odm\r
596 )\r
597 {\r
598         u4Byte     i         = 0;\r
599         u4Byte     ArrayLen    = sizeof(Array_MP_8723B_PHY_REG_PG)/sizeof(u4Byte);\r
600         pu4Byte    Array       = Array_MP_8723B_PHY_REG_PG;\r
601 \r
602 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
603         PADAPTER                Adapter = pDM_Odm->Adapter;\r
604         HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);\r
605 \r
606         PlatformZeroMemory(pHalData->BufOfLinesPwrByRate, MAX_LINES_HWCONFIG_TXT*MAX_BYTES_LINE_HWCONFIG_TXT);\r
607         pHalData->nLinesReadPwrByRate = ArrayLen/6;\r
608 #endif\r
609 \r
610         ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("===> ODM_ReadAndConfig_MP_8723B_PHY_REG_PG\n"));\r
611 \r
612         pDM_Odm->PhyRegPgVersion = 1;\r
613         pDM_Odm->PhyRegPgValueType = PHY_REG_PG_EXACT_VALUE;\r
614 \r
615         for (i = 0; i < ArrayLen; i += 6) {\r
616                 u4Byte v1 = Array[i];\r
617                 u4Byte v2 = Array[i+1];\r
618                 u4Byte v3 = Array[i+2];\r
619                 u4Byte v4 = Array[i+3];\r
620                 u4Byte v5 = Array[i+4];\r
621                 u4Byte v6 = Array[i+5];\r
622 \r
623             odm_ConfigBB_PHY_REG_PG_8723B(pDM_Odm, v1, v2, v3, v4, v5, v6);\r
624 \r
625 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
626         rsprintf(pHalData->BufOfLinesPwrByRate[i/6], 100, "%s, %s, %s, 0x%X, 0x%08X, 0x%08X,",\r
627                 (v1 == 0?"2.4G":"  5G"), (v2 == 0?"A":"B"), (v3 == 0?"1Tx":"2Tx"), v4, v5, v6);\r
628 #endif\r
629         }\r
630 }\r
631 \r
632 \r
633 \r
634 #endif /* end of HWIMG_SUPPORT*/\r
635 \r