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