net: wireless: rockchip_wlan: add rtl8723cs support
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8723cs / hal / phydm / rtl8703b / halhwimg8703b_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 /*Image2HeaderVersion: 2.18*/
22 #include "mp_precomp.h"
23 #include "../phydm_precomp.h"
24
25 #if (RTL8703B_SUPPORT == 1)
26 static boolean
27 check_positive(
28         struct PHY_DM_STRUCT     *p_dm_odm,
29         const u32  condition1,
30         const u32  condition2,
31         const u32  condition3,
32         const u32  condition4
33 )
34 {
35         u8    _board_type = ((p_dm_odm->board_type & BIT(4)) >> 4) << 0 | /* _GLNA*/
36                     ((p_dm_odm->board_type & BIT(3)) >> 3) << 1 | /* _GPA*/
37                     ((p_dm_odm->board_type & BIT(7)) >> 7) << 2 | /* _ALNA*/
38                     ((p_dm_odm->board_type & BIT(6)) >> 6) << 3 | /* _APA */
39                     ((p_dm_odm->board_type & BIT(2)) >> 2) << 4;  /* _BT*/
40
41         u32     cond1   = condition1, cond2 = condition2, cond3 = condition3, cond4 = condition4;
42         u32    driver1 = p_dm_odm->cut_version       << 24 |
43                          (p_dm_odm->support_interface & 0xF0) << 16 |
44                          p_dm_odm->support_platform  << 16 |
45                          p_dm_odm->package_type      << 12 |
46                          (p_dm_odm->support_interface & 0x0F) << 8  |
47                          _board_type;
48
49         u32    driver2 = (p_dm_odm->type_glna & 0xFF) <<  0 |
50                          (p_dm_odm->type_gpa & 0xFF)  <<  8 |
51                          (p_dm_odm->type_alna & 0xFF) << 16 |
52                          (p_dm_odm->type_apa & 0xFF)  << 24;
53
54         u32    driver3 = 0;
55
56         u32    driver4 = (p_dm_odm->type_glna & 0xFF00) >>  8 |
57                          (p_dm_odm->type_gpa & 0xFF00) |
58                          (p_dm_odm->type_alna & 0xFF00) << 8 |
59                          (p_dm_odm->type_apa & 0xFF00)  << 16;
60
61         ODM_RT_TRACE(p_dm_odm, ODM_COMP_INIT, ODM_DBG_TRACE,
62                 ("===> check_positive (cond1, cond2, cond3, cond4) = (0x%X 0x%X 0x%X 0x%X)\n", cond1, cond2, cond3, cond4));
63         ODM_RT_TRACE(p_dm_odm, ODM_COMP_INIT, ODM_DBG_TRACE,
64                 ("===> check_positive (driver1, driver2, driver3, driver4) = (0x%X 0x%X 0x%X 0x%X)\n", driver1, driver2, driver3, driver4));
65
66         ODM_RT_TRACE(p_dm_odm, ODM_COMP_INIT, ODM_DBG_TRACE,
67                 ("      (Platform, Interface) = (0x%X, 0x%X)\n", p_dm_odm->support_platform, p_dm_odm->support_interface));
68         ODM_RT_TRACE(p_dm_odm, ODM_COMP_INIT, ODM_DBG_TRACE,
69                 ("      (Board, Package) = (0x%X, 0x%X)\n", p_dm_odm->board_type, p_dm_odm->package_type));
70
71
72         /*============== value Defined Check ===============*/
73         /*QFN type [15:12] and cut version [27:24] need to do value check*/
74
75         if (((cond1 & 0x0000F000) != 0) && ((cond1 & 0x0000F000) != (driver1 & 0x0000F000)))
76                 return false;
77         if (((cond1 & 0x0F000000) != 0) && ((cond1 & 0x0F000000) != (driver1 & 0x0F000000)))
78                 return false;
79
80         /*=============== Bit Defined Check ================*/
81         /* We don't care [31:28] */
82
83         cond1   &= 0x00FF0FFF;
84         driver1 &= 0x00FF0FFF;
85
86         if ((cond1 & driver1) == cond1) {
87                 u32 bit_mask = 0;
88
89                 if ((cond1 & 0x0F) == 0) /* board_type is DONTCARE*/
90                         return true;
91
92                 if ((cond1 & BIT(0)) != 0) /*GLNA*/
93                         bit_mask |= 0x000000FF;
94                 if ((cond1 & BIT(1)) != 0) /*GPA*/
95                         bit_mask |= 0x0000FF00;
96                 if ((cond1 & BIT(2)) != 0) /*ALNA*/
97                         bit_mask |= 0x00FF0000;
98                 if ((cond1 & BIT(3)) != 0) /*APA*/
99                         bit_mask |= 0xFF000000;
100
101                 if (((cond2 & bit_mask) == (driver2 & bit_mask)) && ((cond4 & bit_mask) == (driver4 & bit_mask)))  /* board_type of each RF path is matched*/
102                         return true;
103                 else
104                         return false;
105         } else
106                 return false;
107 }
108 static boolean
109 check_negative(
110         struct PHY_DM_STRUCT     *p_dm_odm,
111         const u32  condition1,
112         const u32  condition2
113 )
114 {
115         return true;
116 }
117
118 /******************************************************************************
119 *                           AGC_TAB.TXT
120 ******************************************************************************/
121
122 u32 array_mp_8703b_agc_tab[] = {
123         0xC78, 0xFC000101,
124         0xC78, 0xFB010101,
125         0xC78, 0xFA020101,
126         0xC78, 0xF9030101,
127         0xC78, 0xF8040101,
128         0xC78, 0xF7050101,
129         0xC78, 0xF6060101,
130         0xC78, 0xF5070101,
131         0xC78, 0xF4080101,
132         0xC78, 0xF3090101,
133         0xC78, 0xF20A0101,
134         0xC78, 0xF10B0101,
135         0xC78, 0xF00C0101,
136         0xC78, 0xEF0D0101,
137         0xC78, 0xEE0E0101,
138         0xC78, 0xED0F0101,
139         0xC78, 0xEC100101,
140         0xC78, 0xEB110101,
141         0xC78, 0xEA120101,
142         0xC78, 0xE9130101,
143         0xC78, 0xE8140101,
144         0xC78, 0xE7150101,
145         0xC78, 0xE6160101,
146         0xC78, 0xE5170101,
147         0xC78, 0xE4180101,
148         0xC78, 0xE3190101,
149         0xC78, 0x661A0101,
150         0xC78, 0x651B0101,
151         0xC78, 0x641C0101,
152         0xC78, 0x631D0101,
153         0xC78, 0x071E0101,
154         0xC78, 0x061F0101,
155         0xC78, 0x05200101,
156         0xC78, 0x04210101,
157         0xC78, 0x03220101,
158         0xC78, 0xE8230001,
159         0xC78, 0xE7240001,
160         0xC78, 0xE6250001,
161         0xC78, 0xE5260001,
162         0xC78, 0xE4270001,
163         0xC78, 0x89280001,
164         0xC78, 0x88290001,
165         0xC78, 0x872A0001,
166         0xC78, 0x862B0001,
167         0xC78, 0x852C0001,
168         0xC78, 0x482D0001,
169         0xC78, 0x472E0001,
170         0xC78, 0x462F0001,
171         0xC78, 0x45300001,
172         0xC78, 0x44310001,
173         0xC78, 0x07320001,
174         0xC78, 0x06330001,
175         0xC78, 0x05340001,
176         0xC78, 0x04350001,
177         0xC78, 0x03360001,
178         0xC78, 0x02370001,
179         0xC78, 0x01380001,
180         0xC78, 0x00390001,
181         0xC78, 0x003A0001,
182         0xC78, 0x003B0001,
183         0xC78, 0x003C0001,
184         0xC78, 0x003D0001,
185         0xC78, 0x003E0001,
186         0xC78, 0x003F0001,
187         0xC78, 0x7F002001,
188         0xC78, 0x7F012001,
189         0xC78, 0x7F022001,
190         0xC78, 0x7F032001,
191         0xC78, 0x7F042001,
192         0xC78, 0x7F052001,
193         0xC78, 0x7F062001,
194         0xC78, 0x7F072001,
195         0xC78, 0x7F082001,
196         0xC78, 0x7F092001,
197         0xC78, 0x7F0A2001,
198         0xC78, 0x7F0B2001,
199         0xC78, 0x7F0C2001,
200         0xC78, 0x7F0D2001,
201         0xC78, 0x7F0E2001,
202         0xC78, 0x7F0F2001,
203         0xC78, 0x7F102001,
204         0xC78, 0x7F112001,
205         0xC78, 0x7E122001,
206         0xC78, 0x7D132001,
207         0xC78, 0x7C142001,
208         0xC78, 0x7B152001,
209         0xC78, 0x7A162001,
210         0xC78, 0x79172001,
211         0xC78, 0x78182001,
212         0xC78, 0x77192001,
213         0xC78, 0x761A2001,
214         0xC78, 0x751B2001,
215         0xC78, 0x741C2001,
216         0xC78, 0x731D2001,
217         0xC78, 0x721E2001,
218         0xC78, 0x711F2001,
219         0xC78, 0x70202001,
220         0xC78, 0x6F212001,
221         0xC78, 0x6E222001,
222         0xC78, 0x6D232001,
223         0xC78, 0x6C242001,
224         0xC78, 0x6B252001,
225         0xC78, 0x6A262001,
226         0xC78, 0x69272001,
227         0xC78, 0x68282001,
228         0xC78, 0x67292001,
229         0xC78, 0x662A2001,
230         0xC78, 0x652B2001,
231         0xC78, 0x642C2001,
232         0xC78, 0x632D2001,
233         0xC78, 0x622E2001,
234         0xC78, 0x612F2001,
235         0xC78, 0x60302001,
236         0xC78, 0x42312001,
237         0xC78, 0x41322001,
238         0xC78, 0x40332001,
239         0xC78, 0x23342001,
240         0xC78, 0x22352001,
241         0xC78, 0x21362001,
242         0xC78, 0x20372001,
243         0xC78, 0x00382001,
244         0xC78, 0x02392001,
245         0xC78, 0x013A2001,
246         0xC78, 0x003B2001,
247         0xC78, 0x003C2001,
248         0xC78, 0x003D2001,
249         0xC78, 0x003E2001,
250         0xC78, 0x003F2001,
251         0xC78, 0x7F003101,
252         0xC78, 0x7F013101,
253         0xC78, 0x7F023101,
254         0xC78, 0x7F033101,
255         0xC78, 0x7F043101,
256         0xC78, 0x7F053101,
257         0xC78, 0x7F063101,
258         0xC78, 0x7E073101,
259         0xC78, 0x7D083101,
260         0xC78, 0x7C093101,
261         0xC78, 0x7B0A3101,
262         0xC78, 0x7A0B3101,
263         0xC78, 0x790C3101,
264         0xC78, 0x780D3101,
265         0xC78, 0x770E3101,
266         0xC78, 0x760F3101,
267         0xC78, 0x75103101,
268         0xC78, 0x74113101,
269         0xC78, 0x73123101,
270         0xC78, 0x72133101,
271         0xC78, 0x71143101,
272         0xC78, 0x70153101,
273         0xC78, 0x6F163101,
274         0xC78, 0x69173101,
275         0xC78, 0x68183101,
276         0xC78, 0x67193101,
277         0xC78, 0x661A3101,
278         0xC78, 0x651B3101,
279         0xC78, 0x641C3101,
280         0xC78, 0x631D3101,
281         0xC78, 0x621E3101,
282         0xC78, 0x611F3101,
283         0xC78, 0x60203101,
284         0xC78, 0x42213101,
285         0xC78, 0x41223101,
286         0xC78, 0x40233101,
287         0xC78, 0x22243101,
288         0xC78, 0x21253101,
289         0xC78, 0x20263101,
290         0xC78, 0x00273101,
291         0xC78, 0x00283101,
292         0xC78, 0x00293101,
293         0xC78, 0x002A3101,
294         0xC78, 0x002B3101,
295         0xC78, 0x002C3101,
296         0xC78, 0x002D3101,
297         0xC78, 0x002E3101,
298         0xC78, 0x002F3101,
299         0xC78, 0x00303101,
300         0xC78, 0x00313101,
301         0xC78, 0x00323101,
302         0xC78, 0x00333101,
303         0xC78, 0x00343101,
304         0xC78, 0x00353101,
305         0xC78, 0x00363101,
306         0xC78, 0x00373101,
307         0xC78, 0x00383101,
308         0xC78, 0x00393101,
309         0xC78, 0x003A3101,
310         0xC78, 0x003B3101,
311         0xC78, 0x003C3101,
312         0xC78, 0x003D3101,
313         0xC78, 0x003E3101,
314         0xC78, 0x003F3101,
315         0xC78, 0xFA403101,
316         0xC78, 0xF9413101,
317         0xC78, 0xF8423101,
318         0xC78, 0xF7433101,
319         0xC78, 0xF6443101,
320         0xC78, 0xF5453101,
321         0xC78, 0xF4463101,
322         0xC78, 0xF3473101,
323         0xC78, 0xF2483101,
324         0xC78, 0xE1493101,
325         0xC78, 0xE04A3101,
326         0xC78, 0xEF4B3101,
327         0xC78, 0xEE4C3101,
328         0xC78, 0xED4D3101,
329         0xC78, 0xEC4E3101,
330         0xC78, 0xEB4F3101,
331         0xC78, 0xEA503101,
332         0xC78, 0xE9513101,
333         0xC78, 0xE8523101,
334         0xC78, 0xE7533101,
335         0xC78, 0xE6543101,
336         0xC78, 0xE5553101,
337         0xC78, 0xE4563101,
338         0xC78, 0xE3573101,
339         0xC78, 0xE2583101,
340         0xC78, 0xE1593101,
341         0xC78, 0xE05A3101,
342         0xC78, 0xC25B3101,
343         0xC78, 0xC15C3101,
344         0xC78, 0xC05D3101,
345         0xC78, 0x825E3101,
346         0xC78, 0x815F3101,
347         0xC78, 0x80603101,
348         0xC78, 0x80613101,
349         0xC78, 0x80623101,
350         0xC78, 0x80633101,
351         0xC78, 0x80643101,
352         0xC78, 0x80653101,
353         0xC78, 0x80663101,
354         0xC78, 0x80673101,
355         0xC78, 0x80683101,
356         0xC78, 0x80693101,
357         0xC78, 0x806A3101,
358         0xC78, 0x806B3101,
359         0xC78, 0x806C3101,
360         0xC78, 0x806D3101,
361         0xC78, 0x806E3101,
362         0xC78, 0x806F3101,
363         0xC78, 0x80703101,
364         0xC78, 0x80713101,
365         0xC78, 0x80723101,
366         0xC78, 0x80733101,
367         0xC78, 0x80743101,
368         0xC78, 0x80753101,
369         0xC78, 0x80763101,
370         0xC78, 0x80773101,
371         0xC78, 0x80783101,
372         0xC78, 0x80793101,
373         0xC78, 0x807A3101,
374         0xC78, 0x807B3101,
375         0xC78, 0x807C3101,
376         0xC78, 0x807D3101,
377         0xC78, 0x807E3101,
378         0xC78, 0x807F3101,
379         0xC78, 0xFF402001,
380         0xC78, 0xFF412001,
381         0xC78, 0xFF422001,
382         0xC78, 0xFF432001,
383         0xC78, 0xFF442001,
384         0xC78, 0xFF452001,
385         0xC78, 0xFF462001,
386         0xC78, 0xFF472001,
387         0xC78, 0xFF482001,
388         0xC78, 0xFF492001,
389         0xC78, 0xFF4A2001,
390         0xC78, 0xFF4B2001,
391         0xC78, 0xFF4C2001,
392         0xC78, 0xFE4D2001,
393         0xC78, 0xFD4E2001,
394         0xC78, 0xFC4F2001,
395         0xC78, 0xFB502001,
396         0xC78, 0xFA512001,
397         0xC78, 0xF9522001,
398         0xC78, 0xF8532001,
399         0xC78, 0xF7542001,
400         0xC78, 0xF6552001,
401         0xC78, 0xF5562001,
402         0xC78, 0xF4572001,
403         0xC78, 0xF3582001,
404         0xC78, 0xF2592001,
405         0xC78, 0xF15A2001,
406         0xC78, 0xF05B2001,
407         0xC78, 0xEF5C2001,
408         0xC78, 0xEE5D2001,
409         0xC78, 0xED5E2001,
410         0xC78, 0xEC5F2001,
411         0xC78, 0xEB602001,
412         0xC78, 0xEA612001,
413         0xC78, 0xE9622001,
414         0xC78, 0xE8632001,
415         0xC78, 0xE7642001,
416         0xC78, 0xE6652001,
417         0xC78, 0xE5662001,
418         0xC78, 0xE4672001,
419         0xC78, 0xE3682001,
420         0xC78, 0xC5692001,
421         0xC78, 0xC46A2001,
422         0xC78, 0xC36B2001,
423         0xC78, 0xA46C2001,
424         0xC78, 0x846D2001,
425         0xC78, 0x836E2001,
426         0xC78, 0x826F2001,
427         0xC78, 0x81702001,
428         0xC78, 0x80712001,
429         0xC78, 0x80722001,
430         0xC78, 0x80732001,
431         0xC78, 0x80742001,
432         0xC78, 0x80752001,
433         0xC78, 0x80762001,
434         0xC78, 0x80772001,
435         0xC78, 0x80782001,
436         0xC78, 0x80792001,
437         0xC78, 0x807A2001,
438         0xC78, 0x807B2001,
439         0xC78, 0x807C2001,
440         0xC78, 0x807D2001,
441         0xC78, 0x807E2001,
442         0xC78, 0x807F2001,
443         0xC50, 0x69553422,
444         0xC50, 0x69553420,
445
446 };
447
448 void
449 odm_read_and_config_mp_8703b_agc_tab(
450         struct PHY_DM_STRUCT  *p_dm_odm
451 )
452 {
453         u32     i         = 0;
454         u8     c_cond;
455         boolean is_matched = true, is_skipped = false;
456         u32     array_len    = sizeof(array_mp_8703b_agc_tab) / sizeof(u32);
457         u32    *array       = array_mp_8703b_agc_tab;
458
459         u32     v1 = 0, v2 = 0, pre_v1 = 0, pre_v2 = 0;
460
461         ODM_RT_TRACE(p_dm_odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("===> odm_read_and_config_mp_8703b_agc_tab\n"));
462
463         while ((i + 1) < array_len) {
464                 v1 = array[i];
465                 v2 = array[i + 1];
466
467                 if (v1 & (BIT(31) | BIT30)) {/*positive & negative condition*/
468                         if (v1 & BIT(31)) {/* positive condition*/
469                                 c_cond  = (u8)((v1 & (BIT(29) | BIT(28))) >> 28);
470                                 if (c_cond == COND_ENDIF) {/*end*/
471                                         is_matched = true;
472                                         is_skipped = false;
473                                         ODM_RT_TRACE(p_dm_odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("ENDIF\n"));
474                                 } else if (c_cond == COND_ELSE) { /*else*/
475                                         is_matched = is_skipped ? false : true;
476                                         ODM_RT_TRACE(p_dm_odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("ELSE\n"));
477                                 } else {/*if , else if*/
478                                         pre_v1 = v1;
479                                         pre_v2 = v2;
480                                         ODM_RT_TRACE(p_dm_odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("IF or ELSE IF\n"));
481                                 }
482                         } else if (v1 & BIT(30)) { /*negative condition*/
483                                 if (is_skipped == false) {
484                                         if (check_positive(p_dm_odm, pre_v1, pre_v2, v1, v2)) {
485                                                 is_matched = true;
486                                                 is_skipped = true;
487                                         } else {
488                                                 is_matched = false;
489                                                 is_skipped = false;
490                                         }
491                                 } else
492                                         is_matched = false;
493                         }
494                 } else {
495                         if (is_matched)
496                                 odm_config_bb_agc_8703b(p_dm_odm, v1, MASKDWORD, v2);
497                 }
498                 i = i + 2;
499         }
500 }
501
502 u32
503 odm_get_version_mp_8703b_agc_tab(void)
504 {
505         return 17;
506 }
507
508 /******************************************************************************
509 *                           PHY_REG.TXT
510 ******************************************************************************/
511
512 u32 array_mp_8703b_phy_reg[] = {
513         0x800, 0x83045700,
514         0x804, 0x00000003,
515         0x808, 0x0000FC00,
516         0x80C, 0x0000000A,
517         0x810, 0x10001331,
518         0x814, 0x020C3D10,
519         0x818, 0x02200385,
520         0x81C, 0x00000000,
521         0x820, 0x01000100,
522         0x824, 0x00390204,
523         0x828, 0x00000000,
524         0x82C, 0x00000000,
525         0x830, 0x00000000,
526         0x834, 0x00000000,
527         0x838, 0x00000000,
528         0x83C, 0x00000000,
529         0x840, 0x00010000,
530         0x844, 0x00000000,
531         0x848, 0x00000000,
532         0x84C, 0x00000000,
533         0x850, 0x00000000,
534         0x854, 0x00000000,
535         0x858, 0x569A11A9,
536         0x85C, 0x01000014,
537         0x860, 0x66F60110,
538         0x864, 0x061F0649,
539         0x868, 0x00000000,
540         0x86C, 0x27272700,
541         0x870, 0x07000760,
542         0x874, 0x25004000,
543         0x878, 0x00000808,
544         0x87C, 0x004F0201,
545         0x880, 0xB0000B1E,
546         0x884, 0x00000001,
547         0x888, 0x00000000,
548         0x88C, 0xCCC000C0,
549         0x890, 0x00000800,
550         0x894, 0xFFFFFFFE,
551         0x898, 0x40302010,
552         0x89C, 0x00706050,
553         0x900, 0x00000000,
554         0x904, 0x00000023,
555         0x908, 0x00000000,
556         0x90C, 0x81121111,
557         0x910, 0x00000002,
558         0x914, 0x00000201,
559         0x948, 0x99000000,
560         0x94C, 0x00000010,
561         0x950, 0x20003800,
562         0x954, 0x4A880000,
563         0x958, 0x4BC5D87A,
564         0x95C, 0x04EB9B79,
565         0xA00, 0x00D047C8,
566         0xA04, 0x80FF800C,
567         0xA08, 0x8C838300,
568         0xA0C, 0x2E7F120F,
569         0xA10, 0x9500BB78,
570         0xA14, 0x1114D028,
571         0xA18, 0x00881117,
572         0xA1C, 0x89140F00,
573         0xA20, 0xD1D80000,
574         0xA24, 0x5A7DA0BD,
575         0xA28, 0x0000223B,
576         0xA2C, 0x00D30000,
577         0xA70, 0x101FBF00,
578         0xA74, 0x00000007,
579         0xA78, 0x00008900,
580         0xA7C, 0x225B0606,
581         0xA80, 0x2180FA74,
582         0xA84, 0x00120000,
583         0xA88, 0x040C0000,
584         0xA8C, 0x12345678,
585         0xA90, 0xABCDEF00,
586         0xA94, 0x001B1B89,
587         0xA98, 0x05100000,
588         0xA9C, 0x3F000000,
589         0xAA0, 0x00000000,
590         0xB2C, 0x00000000,
591         0xC00, 0x48071D40,
592         0xC04, 0x03A05611,
593         0xC08, 0x000000E4,
594         0xC0C, 0x6C6C6C6C,
595         0xC10, 0x18800000,
596         0xC14, 0x40000100,
597         0xC18, 0x08800000,
598         0xC1C, 0x40000100,
599         0xC20, 0x00000000,
600         0xC24, 0x00000000,
601         0xC28, 0x00000000,
602         0xC2C, 0x00000000,
603         0xC30, 0x69E9AC4B,
604         0xC34, 0x31000040,
605         0xC38, 0x21688080,
606         0xC3C, 0x000016CC,
607         0xC40, 0x1F78403F,
608         0xC44, 0x00010036,
609         0xC48, 0xEC020107,
610         0xC4C, 0x007F037F,
611         0xC50, 0x69553420,
612         0xC54, 0x43BC0094,
613         0xC58, 0x00015967,
614         0xC5C, 0x18250492,
615         0xC60, 0x00000000,
616         0xC64, 0x7112848B,
617         0xC68, 0x47C07BFF,
618         0xC6C, 0x00000036,
619         0xC70, 0x2C7F000D,
620         0xC74, 0x020600DB,
621         0xC78, 0x0000001F,
622         0xC7C, 0x00B91612,
623         0xC80, 0x390000E4,
624         0xC84, 0x19F60000,
625         0xC88, 0x40000100,
626         0xC8C, 0x20200000,
627         0xC90, 0x00091521,
628         0xC94, 0x00000000,
629         0xC98, 0x00121820,
630         0xC9C, 0x00007F7F,
631         0xCA0, 0x00000000,
632         0xCA4, 0x000300A0,
633         0xCA8, 0x00000000,
634         0xCAC, 0x00000000,
635         0xCB0, 0x00000000,
636         0xCB4, 0x00000000,
637         0xCB8, 0x00000000,
638         0xCBC, 0x28000000,
639         0xCC0, 0x00000000,
640         0xCC4, 0x00000000,
641         0xCC8, 0x00000000,
642         0xCCC, 0x00000000,
643         0xCD0, 0x00000000,
644         0xCD4, 0x00000000,
645         0xCD8, 0x64B22427,
646         0xCDC, 0x00766932,
647         0xCE0, 0x00222222,
648         0xCE4, 0x10000000,
649         0xCE8, 0x37644302,
650         0xCEC, 0x2F97D40C,
651         0xD00, 0x00030740,
652         0xD04, 0x40020401,
653         0xD08, 0x0000907F,
654         0xD0C, 0x20010201,
655         0xD10, 0xA0633333,
656         0xD14, 0x3333BC53,
657         0xD18, 0x7A8F5B6F,
658         0xD2C, 0xCB979975,
659         0xD30, 0x00000000,
660         0xD34, 0x80608000,
661         0xD38, 0x98000000,
662         0xD3C, 0x40127353,
663         0xD40, 0x00000000,
664         0xD44, 0x00000000,
665         0xD48, 0x00000000,
666         0xD4C, 0x00000000,
667         0xD50, 0x6437140A,
668         0xD54, 0x00000000,
669         0xD58, 0x00000282,
670         0xD5C, 0x30032064,
671         0xD60, 0x4653DE68,
672         0xD64, 0x04518A3C,
673         0xD68, 0x00002101,
674         0xE00, 0x2D2D2D2D,
675         0xE04, 0x2D2D2D2D,
676         0xE08, 0x0390272D,
677         0xE10, 0x2D2D2D2D,
678         0xE14, 0x2D2D2D2D,
679         0xE18, 0x2D2D2D2D,
680         0xE1C, 0x2D2D2D2D,
681         0xE28, 0x00000000,
682         0xE30, 0x1000DC1F,
683         0xE34, 0x10008C1F,
684         0xE38, 0x02140102,
685         0xE3C, 0x681604C2,
686         0xE40, 0x01007C00,
687         0xE44, 0x01004800,
688         0xE48, 0xFB000000,
689         0xE4C, 0x000028D1,
690         0xE50, 0x1000DC1F,
691         0xE54, 0x10008C1F,
692         0xE58, 0x02140102,
693         0xE5C, 0x28160D05,
694         0xE60, 0x00000048,
695         0xE68, 0x001B25A4,
696         0xE6C, 0x01C00014,
697         0xE70, 0x01C00014,
698         0xE74, 0x02000014,
699         0xE78, 0x02000014,
700         0xE7C, 0x02000014,
701         0xE80, 0x02000014,
702         0xE84, 0x01C00014,
703         0xE88, 0x02000014,
704         0xE8C, 0x01C00014,
705         0xED0, 0x01C00014,
706         0xED4, 0x01C00014,
707         0xED8, 0x01C00014,
708         0xEDC, 0x00000014,
709         0xEE0, 0x00000014,
710         0xEE8, 0x21555448,
711         0xEEC, 0x03C00014,
712         0xF14, 0x00000003,
713         0xF4C, 0x00000000,
714         0xF00, 0x00000300,
715
716 };
717
718 void
719 odm_read_and_config_mp_8703b_phy_reg(
720         struct PHY_DM_STRUCT  *p_dm_odm
721 )
722 {
723         u32     i         = 0;
724         u8     c_cond;
725         boolean is_matched = true, is_skipped = false;
726         u32     array_len    = sizeof(array_mp_8703b_phy_reg) / sizeof(u32);
727         u32    *array       = array_mp_8703b_phy_reg;
728
729         u32     v1 = 0, v2 = 0, pre_v1 = 0, pre_v2 = 0;
730
731         ODM_RT_TRACE(p_dm_odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("===> odm_read_and_config_mp_8703b_phy_reg\n"));
732
733         while ((i + 1) < array_len) {
734                 v1 = array[i];
735                 v2 = array[i + 1];
736
737                 if (v1 & (BIT(31) | BIT30)) {/*positive & negative condition*/
738                         if (v1 & BIT(31)) {/* positive condition*/
739                                 c_cond  = (u8)((v1 & (BIT(29) | BIT(28))) >> 28);
740                                 if (c_cond == COND_ENDIF) {/*end*/
741                                         is_matched = true;
742                                         is_skipped = false;
743                                         ODM_RT_TRACE(p_dm_odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("ENDIF\n"));
744                                 } else if (c_cond == COND_ELSE) { /*else*/
745                                         is_matched = is_skipped ? false : true;
746                                         ODM_RT_TRACE(p_dm_odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("ELSE\n"));
747                                 } else {/*if , else if*/
748                                         pre_v1 = v1;
749                                         pre_v2 = v2;
750                                         ODM_RT_TRACE(p_dm_odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("IF or ELSE IF\n"));
751                                 }
752                         } else if (v1 & BIT(30)) { /*negative condition*/
753                                 if (is_skipped == false) {
754                                         if (check_positive(p_dm_odm, pre_v1, pre_v2, v1, v2)) {
755                                                 is_matched = true;
756                                                 is_skipped = true;
757                                         } else {
758                                                 is_matched = false;
759                                                 is_skipped = false;
760                                         }
761                                 } else
762                                         is_matched = false;
763                         }
764                 } else {
765                         if (is_matched)
766                                 odm_config_bb_phy_8703b(p_dm_odm, v1, MASKDWORD, v2);
767                 }
768                 i = i + 2;
769         }
770 }
771
772 u32
773 odm_get_version_mp_8703b_phy_reg(void)
774 {
775         return 17;
776 }
777
778 /******************************************************************************
779 *                           PHY_REG_PG.TXT
780 ******************************************************************************/
781
782 u32 array_mp_8703b_phy_reg_pg[] = {
783         0, 0, 0, 0x00000e08, 0x0000ff00, 0x00003200,
784         0, 0, 0, 0x0000086c, 0xffffff00, 0x32323200,
785         0, 0, 0, 0x00000e00, 0xffffffff, 0x34363636,
786         0, 0, 0, 0x00000e04, 0xffffffff, 0x28303234,
787         0, 0, 0, 0x00000e10, 0xffffffff, 0x30343434,
788         0, 0, 0, 0x00000e14, 0xffffffff, 0x26262830
789 };
790
791 void
792 odm_read_and_config_mp_8703b_phy_reg_pg(
793         struct PHY_DM_STRUCT  *p_dm_odm
794 )
795 {
796         u32     i         = 0;
797         u32     array_len    = sizeof(array_mp_8703b_phy_reg_pg) / sizeof(u32);
798         u32    *array       = array_mp_8703b_phy_reg_pg;
799
800 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
801         struct _ADAPTER         *adapter = p_dm_odm->adapter;
802         HAL_DATA_TYPE   *p_hal_data = GET_HAL_DATA(adapter);
803
804         PlatformZeroMemory(p_hal_data->BufOfLinesPwrByRate, MAX_LINES_HWCONFIG_TXT * MAX_BYTES_LINE_HWCONFIG_TXT);
805         p_hal_data->nLinesReadPwrByRate = array_len / 6;
806 #endif
807
808         ODM_RT_TRACE(p_dm_odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("===> odm_read_and_config_mp_8703b_phy_reg_pg\n"));
809
810         p_dm_odm->phy_reg_pg_version = 1;
811         p_dm_odm->phy_reg_pg_value_type = PHY_REG_PG_EXACT_VALUE;
812
813         for (i = 0; i < array_len; i += 6) {
814                 u32 v1 = array[i];
815                 u32 v2 = array[i + 1];
816                 u32 v3 = array[i + 2];
817                 u32 v4 = array[i + 3];
818                 u32 v5 = array[i + 4];
819                 u32 v6 = array[i + 5];
820
821                 odm_config_bb_phy_reg_pg_8703b(p_dm_odm, v1, v2, v3, v4, v5, v6);
822
823 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
824                 rsprintf((char *)p_hal_data->BufOfLinesPwrByRate[i / 6], 100, "%s, %s, %s, 0x%X, 0x%08X, 0x%08X,",
825                         (v1 == 0 ? "2.4G" : "  5G"), (v2 == 0 ? "A" : "B"), (v3 == 0 ? "1Tx" : "2Tx"), v4, v5, v6);
826 #endif
827         }
828 }
829
830
831
832 #endif /* end of HWIMG_SUPPORT*/