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