1
2
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
14static 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
42
43
44static 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
175enum 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) {
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
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
220 if (!CheckCondition(array[i], hex)) {
221
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;
228 } 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
259
260
261static 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
455enum 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) {
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
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 {
514 if (!CheckCondition(array[i], hex)) {
515
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;
522 } 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
570
571
572static 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
664void 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
683 if (v1 < 0xCDCDCDCD) {
684 odm_ConfigBB_PHY_REG_PG_8188E(dm_odm, v1, v2, v3);
685 continue;
686 } else {
687 if (!CheckCondition(array[i], hex)) {
688
689 i += 2;
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}
703