xref: /OK3568_Linux_fs/external/rkwifibt/drivers/rtl8188fu/hal/phydm/rtl8188f/halhwimg8188f_rf.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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.2*/
17 #include "mp_precomp.h"
18 #include "../phydm_precomp.h"
19 
20 #if (RTL8188F_SUPPORT == 1)
21 static boolean
check_positive(struct dm_struct * dm,const u32 condition1,const u32 condition2,const u32 condition3,const u32 condition4)22 check_positive(
23 	struct dm_struct *dm,
24 	const u32	condition1,
25 	const u32	condition2,
26 	const u32	condition3,
27 	const u32	condition4
28 )
29 {
30 	u8	_board_type = ((dm->board_type & BIT(4)) >> 4) << 0 | /* _GLNA*/
31 			((dm->board_type & BIT(3)) >> 3) << 1 | /* _GPA*/
32 			((dm->board_type & BIT(7)) >> 7) << 2 | /* _ALNA*/
33 			((dm->board_type & BIT(6)) >> 6) << 3 | /* _APA */
34 			((dm->board_type & BIT(2)) >> 2) << 4 | /* _BT*/
35 			((dm->board_type & BIT(1)) >> 1) << 5 | /* _NGFF*/
36 			((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 = (dm->cut_version ==  ODM_CUT_A) ? 15 : dm->cut_version;
41 	u8	pkg_type_for_para = (dm->package_type == 0) ? 15 : dm->package_type;
42 
43 	u32	driver1 = cut_version_for_para << 24 |
44 			(dm->support_interface & 0xF0) << 16 |
45 			dm->support_platform << 16 |
46 			pkg_type_for_para << 12 |
47 			(dm->support_interface & 0x0F) << 8  |
48 			_board_type;
49 
50 	u32	driver2 = (dm->type_glna & 0xFF) <<  0 |
51 			(dm->type_gpa & 0xFF)  <<  8 |
52 			(dm->type_alna & 0xFF) << 16 |
53 			(dm->type_apa & 0xFF)  << 24;
54 
55 	u32	driver3 = 0;
56 
57 	u32	driver4 = (dm->type_glna & 0xFF00) >>  8 |
58 			(dm->type_gpa & 0xFF00) |
59 			(dm->type_alna & 0xFF00) << 8 |
60 			(dm->type_apa & 0xFF00)  << 16;
61 
62 	PHYDM_DBG(dm, ODM_COMP_INIT,
63 		  "===> %s (cond1, cond2, cond3, cond4) = (0x%X 0x%X 0x%X 0x%X)\n",
64 		  __func__, cond1, cond2, cond3, cond4);
65 	PHYDM_DBG(dm, ODM_COMP_INIT,
66 		  "===> %s (driver1, driver2, driver3, driver4) = (0x%X 0x%X 0x%X 0x%X)\n",
67 		  __func__, driver1, driver2, driver3, driver4);
68 
69 	PHYDM_DBG(dm, ODM_COMP_INIT,
70 		  "	(Platform, Interface) = (0x%X, 0x%X)\n",
71 		  dm->support_platform, dm->support_interface);
72 	PHYDM_DBG(dm, ODM_COMP_INIT,
73 		  "	(Board, Package) = (0x%X, 0x%X)\n", dm->board_type,
74 		  dm->package_type);
75 
76 
77 	/*============== value Defined Check ===============*/
78 	/*QFN type [15:12] and cut version [27:24] need to do value check*/
79 
80 	if (((cond1 & 0x0000F000) != 0) && ((cond1 & 0x0000F000) != (driver1 & 0x0000F000)))
81 		return false;
82 	if (((cond1 & 0x0F000000) != 0) && ((cond1 & 0x0F000000) != (driver1 & 0x0F000000)))
83 		return false;
84 
85 	/*=============== Bit Defined Check ================*/
86 	/* We don't care [31:28] */
87 
88 	cond1 &= 0x00FF0FFF;
89 	driver1 &= 0x00FF0FFF;
90 
91 	if ((cond1 & driver1) == cond1) {
92 		u32	bit_mask = 0;
93 
94 		if ((cond1 & 0x0F) == 0) /* board_type is DONTCARE*/
95 			return true;
96 
97 		if ((cond1 & BIT(0)) != 0) /*GLNA*/
98 			bit_mask |= 0x000000FF;
99 		if ((cond1 & BIT(1)) != 0) /*GPA*/
100 			bit_mask |= 0x0000FF00;
101 		if ((cond1 & BIT(2)) != 0) /*ALNA*/
102 			bit_mask |= 0x00FF0000;
103 		if ((cond1 & BIT(3)) != 0) /*APA*/
104 			bit_mask |= 0xFF000000;
105 
106 		if (((cond2 & bit_mask) == (driver2 & bit_mask)) && ((cond4 & bit_mask) == (driver4 & bit_mask)))  /* board_type of each RF path is matched*/
107 			return true;
108 		else
109 			return false;
110 	} else
111 		return false;
112 }
113 
114 /******************************************************************************
115 *                           radioa.TXT
116 ******************************************************************************/
117 
118 u32 array_mp_8188f_radioa[] = {
119 		0x000, 0x00030000,
120 		0x008, 0x00008400,
121 		0x018, 0x00000407,
122 		0x019, 0x00000012,
123 	0x80000400,	0x00000000,	0x40000000,	0x00000000,
124 		0x01B, 0x00000C6C,
125 	0xA0000000,	0x00000000,
126 		0x01B, 0x00001C6C,
127 	0xB0000000,	0x00000000,
128 		0x01E, 0x00080009,
129 		0x01F, 0x00000880,
130 		0x02F, 0x0001A060,
131 		0x03F, 0x00028000,
132 		0x042, 0x000060C0,
133 		0x057, 0x000D0000,
134 		0x058, 0x000C0160,
135 		0x067, 0x00001552,
136 		0x083, 0x00000000,
137 		0x0B0, 0x000FF9F0,
138 		0x0B1, 0x00022218,
139 		0x0B2, 0x00034C00,
140 	0x8c000400,	0x00000000,	0x40000000,	0x00000000,
141 		0x0B4, 0x0004486B,
142 	0x9c000000,	0x00000000,	0x40000000,	0x00000000,
143 		0x0B4, 0x0004486B,
144 	0xA0000000,	0x00000000,
145 		0x0B4, 0x0004484B,
146 	0xB0000000,	0x00000000,
147 		0x0B5, 0x0000112A,
148 		0x0B6, 0x0000053E,
149 		0x0B7, 0x00010408,
150 	0x8c000400,	0x00000000,	0x40000000,	0x00000000,
151 		0x0B8, 0x000100AF,
152 	0x9c000000,	0x00000000,	0x40000000,	0x00000000,
153 		0x0B8, 0x000100AF,
154 	0xA0000000,	0x00000000,
155 		0x0B8, 0x00010200,
156 	0xB0000000,	0x00000000,
157 		0x0B9, 0x00080001,
158 		0x0BA, 0x00040001,
159 		0x0BB, 0x00000400,
160 		0x0BF, 0x000C0000,
161 		0x0C2, 0x00002400,
162 		0x0C3, 0x00000009,
163 		0x0C4, 0x00040C91,
164 		0x0C5, 0x00099999,
165 		0x0C6, 0x000000A3,
166 		0x0C7, 0x0008F820,
167 		0x0C8, 0x00076C06,
168 		0x0C9, 0x00000000,
169 		0x0CA, 0x00080000,
170 		0x0DF, 0x00000180,
171 		0x0EF, 0x000001A0,
172 	0x8f000000,	0x00000000,	0x40000000,	0x00000000,
173 		0x051, 0x000E8333,
174 	0xA0000000,	0x00000000,
175 		0x051, 0x000E8231,
176 	0xB0000000,	0x00000000,
177 	0x80000400,	0x00000000,	0x40000000,	0x00000000,
178 		0x052, 0x000FAC88,
179 	0x9f000000,	0x00000000,	0x40000000,	0x00000000,
180 		0x052, 0x000FAC2C,
181 	0xA0000000,	0x00000000,
182 		0x052, 0x000FAC2F,
183 	0xB0000000,	0x00000000,
184 	0x8f000000,	0x00000000,	0x40000000,	0x00000000,
185 		0x053, 0x00000103,
186 	0xA0000000,	0x00000000,
187 		0x053, 0x000001C1,
188 	0xB0000000,	0x00000000,
189 		0x054, 0x00055007,
190 		0x056, 0x000517F0,
191 	0x8f000000,	0x00000000,	0x40000000,	0x00000000,
192 		0x035, 0x00000099,
193 		0x035, 0x00000199,
194 		0x035, 0x00000299,
195 	0xA0000000,	0x00000000,
196 		0x035, 0x00000090,
197 		0x035, 0x00000190,
198 		0x035, 0x00000290,
199 	0xB0000000,	0x00000000,
200 	0x8b000000,	0x00000000,	0x40000000,	0x00000000,
201 		0x05F, 0x00023500,
202 	0x9c000400,	0x00000000,	0x40000000,	0x00000000,
203 		0x05F, 0x00023504,
204 	0x9c000000,	0x00000000,	0x40000000,	0x00000000,
205 		0x05F, 0x00023504,
206 	0xA0000000,	0x00000000,
207 		0x05F, 0x000FFFFF,
208 	0xB0000000,	0x00000000,
209 	0x8f000000,	0x00000000,	0x40000000,	0x00000000,
210 		0x036, 0x00000064,
211 		0x036, 0x00008064,
212 		0x036, 0x00010064,
213 		0x036, 0x00018064,
214 	0x9c000400,	0x00000000,	0x40000000,	0x00000000,
215 		0x036, 0x00001068,
216 		0x036, 0x00009068,
217 		0x036, 0x00011068,
218 		0x036, 0x00019068,
219 	0x9c000000,	0x00000000,	0x40000000,	0x00000000,
220 		0x036, 0x00001068,
221 		0x036, 0x00009068,
222 		0x036, 0x00011068,
223 		0x036, 0x00019068,
224 	0xA0000000,	0x00000000,
225 		0x036, 0x00001064,
226 		0x036, 0x00009064,
227 		0x036, 0x00011064,
228 		0x036, 0x00019064,
229 	0xB0000000,	0x00000000,
230 		0x018, 0x00000C07,
231 		0x05A, 0x00048000,
232 		0x019, 0x000739D0,
233 	0x80000400,	0x00000000,	0x40000000,	0x00000000,
234 		0x034, 0x0000ADD2,
235 		0x034, 0x00009DCF,
236 		0x034, 0x00008CF2,
237 		0x034, 0x00007CEF,
238 		0x034, 0x00006CEC,
239 		0x034, 0x00005CE9,
240 		0x034, 0x00004CCE,
241 		0x034, 0x00003CCB,
242 		0x034, 0x00002CC8,
243 		0x034, 0x00001C4B,
244 		0x034, 0x00000C48,
245 	0x9f000000,	0x00000000,	0x40000000,	0x00000000,
246 		0x034, 0x0000ADD6,
247 		0x034, 0x00009DD3,
248 		0x034, 0x00008CF4,
249 		0x034, 0x00007CF1,
250 		0x034, 0x00006CEE,
251 		0x034, 0x00005CEB,
252 		0x034, 0x00004CCE,
253 		0x034, 0x00003CCB,
254 		0x034, 0x00002CC8,
255 		0x034, 0x00001C4B,
256 		0x034, 0x00000C48,
257 	0xA0000000,	0x00000000,
258 		0x034, 0x0000ADD2,
259 		0x034, 0x00009DD0,
260 		0x034, 0x00008CF2,
261 		0x034, 0x00007CEF,
262 		0x034, 0x00006CEC,
263 		0x034, 0x00005CD1,
264 		0x034, 0x00004CCE,
265 		0x034, 0x00003CCB,
266 		0x034, 0x00002CC8,
267 		0x034, 0x00001C4B,
268 		0x034, 0x00000C48,
269 	0xB0000000,	0x00000000,
270 		0x000, 0x00030159,
271 		0x084, 0x00048000,
272 		0x086, 0x0000002A,
273 		0x087, 0x00000025,
274 		0x08E, 0x00065540,
275 		0x08F, 0x00088000,
276 		0x0EF, 0x000020A0,
277 		0x03B, 0x000F0F00,
278 		0x03B, 0x000E0B00,
279 		0x03B, 0x000D0900,
280 		0x03B, 0x000C0700,
281 		0x03B, 0x000B0600,
282 		0x03B, 0x000A0400,
283 		0x03B, 0x00090200,
284 		0x03B, 0x00080000,
285 		0x03B, 0x0007BF00,
286 		0x03B, 0x00060B00,
287 		0x03B, 0x0005C900,
288 		0x03B, 0x00040700,
289 		0x03B, 0x00030600,
290 		0x03B, 0x0002D500,
291 		0x03B, 0x00010200,
292 		0x03B, 0x0000E000,
293 		0x0EF, 0x000000A0,
294 		0x0EF, 0x00000010,
295 		0x03B, 0x0000C0A8,
296 		0x03B, 0x00010400,
297 		0x0EF, 0x00000000,
298 		0x0EF, 0x00080000,
299 		0x030, 0x00010000,
300 		0x031, 0x0000000F,
301 		0x032, 0x00007EFE,
302 		0x0EF, 0x00000000,
303 		0x000, 0x00010159,
304 		0x018, 0x0000FC07,
305 		0xFFE, 0x00000000,
306 		0xFFE, 0x00000000,
307 		0x01F, 0x00080003,
308 		0xFFE, 0x00000000,
309 		0xFFE, 0x00000000,
310 		0x01E, 0x00000001,
311 		0x01F, 0x00080000,
312 		0x000, 0x00033D95,
313 
314 };
315 
316 void
odm_read_and_config_mp_8188f_radioa(struct dm_struct * dm)317 odm_read_and_config_mp_8188f_radioa(struct dm_struct *dm)
318 {
319 	u32	i = 0;
320 	u8	c_cond;
321 	boolean	is_matched = true, is_skipped = false;
322 	u32	array_len = sizeof(array_mp_8188f_radioa) / sizeof(u32);
323 	u32	*array = array_mp_8188f_radioa;
324 
325 	u32	v1 = 0, v2 = 0, pre_v1 = 0, pre_v2 = 0;
326 
327 	PHYDM_DBG(dm, ODM_COMP_INIT, "===> %s\n", __func__);
328 
329 	while ((i + 1) < array_len) {
330 		v1 = array[i];
331 		v2 = array[i + 1];
332 
333 		if (v1 & (BIT(31) | BIT(30))) {/*positive & negative condition*/
334 			if (v1 & BIT(31)) {/* positive condition*/
335 				c_cond  = (u8)((v1 & (BIT(29) | BIT(28))) >> 28);
336 				if (c_cond == COND_ENDIF) {/*end*/
337 					is_matched = true;
338 					is_skipped = false;
339 					PHYDM_DBG(dm, ODM_COMP_INIT, "ENDIF\n");
340 				} else if (c_cond == COND_ELSE) { /*else*/
341 					is_matched = is_skipped ? false : true;
342 					PHYDM_DBG(dm, ODM_COMP_INIT, "ELSE\n");
343 				} else {/*if , else if*/
344 					pre_v1 = v1;
345 					pre_v2 = v2;
346 					PHYDM_DBG(dm, ODM_COMP_INIT, "IF or ELSE IF\n");
347 				}
348 			} else if (v1 & BIT(30)) { /*negative condition*/
349 				if (is_skipped == false) {
350 					if (check_positive(dm, pre_v1, pre_v2, v1, v2)) {
351 						is_matched = true;
352 						is_skipped = true;
353 					} else {
354 						is_matched = false;
355 						is_skipped = false;
356 					}
357 				} else
358 					is_matched = false;
359 			}
360 		} else {
361 			if (is_matched)
362 				odm_config_rf_radio_a_8188f(dm, v1, v2);
363 		}
364 		i = i + 2;
365 	}
366 }
367 
368 u32
odm_get_version_mp_8188f_radioa(void)369 odm_get_version_mp_8188f_radioa(void)
370 {
371 		return 39;
372 }
373 
374 /******************************************************************************
375 *                           txpowertrack_ap.TXT
376 ******************************************************************************/
377 
378 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))
379 u8 g_delta_swing_table_idx_mp_5gb_n_txpowertrack_ap_8188f[][DELTA_SWINGIDX_SIZE] = {
380 	{0, 1, 2, 3, 3, 5, 5, 6, 6, 7, 8, 9, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 16, 17, 17, 17, 17, 18, 18, 18},
381 	{0, 1, 2, 3, 3, 5, 5, 6, 6, 7, 8, 9, 10, 11, 11, 12, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 18, 18, 18},
382 	{0, 1, 2, 3, 3, 5, 5, 6, 6, 7, 8, 9, 10, 11, 11, 12, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 18, 18, 18},
383 };
384 u8 g_delta_swing_table_idx_mp_5gb_p_txpowertrack_ap_8188f[][DELTA_SWINGIDX_SIZE] = {
385 	{0, 1, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15},
386 	{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15},
387 	{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15},
388 };
389 u8 g_delta_swing_table_idx_mp_5ga_n_txpowertrack_ap_8188f[][DELTA_SWINGIDX_SIZE] = {
390 	{0, 1, 2, 3, 3, 5, 5, 6, 6, 7, 8, 9, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 16, 17, 17, 17, 17, 18, 18, 18},
391 	{0, 1, 2, 3, 3, 5, 5, 6, 6, 7, 8, 9, 10, 11, 11, 12, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 18, 18, 18},
392 	{0, 1, 2, 3, 3, 5, 5, 6, 6, 7, 8, 9, 10, 11, 11, 12, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 18, 18, 18},
393 };
394 u8 g_delta_swing_table_idx_mp_5ga_p_txpowertrack_ap_8188f[][DELTA_SWINGIDX_SIZE] = {
395 	{0, 1, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15},
396 	{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15},
397 	{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15},
398 };
399 u8 g_delta_swing_table_idx_mp_2gb_n_txpowertrack_ap_8188f[]    = {0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5, 5, 5, 6, 6, 6, 7, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11};
400 u8 g_delta_swing_table_idx_mp_2gb_p_txpowertrack_ap_8188f[]    = {0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9, 9};
401 u8 g_delta_swing_table_idx_mp_2ga_n_txpowertrack_ap_8188f[]    = {0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5, 5, 5, 6, 6, 6, 7, 8, 8, 9, 9, 9, 10, 10, 10, 10, 11, 11};
402 u8 g_delta_swing_table_idx_mp_2ga_p_txpowertrack_ap_8188f[]    = {0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9, 9};
403 u8 g_delta_swing_table_idx_mp_2g_cck_b_n_txpowertrack_ap_8188f[] = {0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5, 5, 5, 6, 6, 6, 7, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11};
404 u8 g_delta_swing_table_idx_mp_2g_cck_b_p_txpowertrack_ap_8188f[] = {0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9, 9};
405 u8 g_delta_swing_table_idx_mp_2g_cck_a_n_txpowertrack_ap_8188f[] = {0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5, 5, 5, 6, 6, 6, 7, 8, 8, 9, 9, 9, 10, 10, 10, 10, 11, 11};
406 u8 g_delta_swing_table_idx_mp_2g_cck_a_p_txpowertrack_ap_8188f[] = {0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9, 9};
407 #endif
408 
409 void
odm_read_and_config_mp_8188f_txpowertrack_ap(struct dm_struct * dm)410 odm_read_and_config_mp_8188f_txpowertrack_ap(struct dm_struct *dm)
411 {
412 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))
413 	struct dm_rf_calibration_struct  *cali_info = &(dm->rf_calibrate_info);
414 
415 	PHYDM_DBG(dm, ODM_COMP_INIT, "===> ODM_ReadAndConfig_MP_mp_8188f\n");
416 
417 
418 	odm_move_memory(dm, cali_info->delta_swing_table_idx_2ga_p, g_delta_swing_table_idx_mp_2ga_p_txpowertrack_ap_8188f, DELTA_SWINGIDX_SIZE);
419 	odm_move_memory(dm, cali_info->delta_swing_table_idx_2ga_n, g_delta_swing_table_idx_mp_2ga_n_txpowertrack_ap_8188f, DELTA_SWINGIDX_SIZE);
420 	odm_move_memory(dm, cali_info->delta_swing_table_idx_2gb_p, g_delta_swing_table_idx_mp_2gb_p_txpowertrack_ap_8188f, DELTA_SWINGIDX_SIZE);
421 	odm_move_memory(dm, cali_info->delta_swing_table_idx_2gb_n, g_delta_swing_table_idx_mp_2gb_n_txpowertrack_ap_8188f, DELTA_SWINGIDX_SIZE);
422 
423 	odm_move_memory(dm, cali_info->delta_swing_table_idx_2g_cck_a_p, g_delta_swing_table_idx_mp_2g_cck_a_p_txpowertrack_ap_8188f, DELTA_SWINGIDX_SIZE);
424 	odm_move_memory(dm, cali_info->delta_swing_table_idx_2g_cck_a_n, g_delta_swing_table_idx_mp_2g_cck_a_n_txpowertrack_ap_8188f, DELTA_SWINGIDX_SIZE);
425 	odm_move_memory(dm, cali_info->delta_swing_table_idx_2g_cck_b_p, g_delta_swing_table_idx_mp_2g_cck_b_p_txpowertrack_ap_8188f, DELTA_SWINGIDX_SIZE);
426 	odm_move_memory(dm, cali_info->delta_swing_table_idx_2g_cck_b_n, g_delta_swing_table_idx_mp_2g_cck_b_n_txpowertrack_ap_8188f, DELTA_SWINGIDX_SIZE);
427 
428 	odm_move_memory(dm, cali_info->delta_swing_table_idx_5ga_p, g_delta_swing_table_idx_mp_5ga_p_txpowertrack_ap_8188f, DELTA_SWINGIDX_SIZE * 3);
429 	odm_move_memory(dm, cali_info->delta_swing_table_idx_5ga_n, g_delta_swing_table_idx_mp_5ga_n_txpowertrack_ap_8188f, DELTA_SWINGIDX_SIZE * 3);
430 	odm_move_memory(dm, cali_info->delta_swing_table_idx_5gb_p, g_delta_swing_table_idx_mp_5gb_p_txpowertrack_ap_8188f, DELTA_SWINGIDX_SIZE * 3);
431 	odm_move_memory(dm, cali_info->delta_swing_table_idx_5gb_n, g_delta_swing_table_idx_mp_5gb_n_txpowertrack_ap_8188f, DELTA_SWINGIDX_SIZE * 3);
432 #endif
433 }
434 
435 /******************************************************************************
436 *                           txpowertrack_sdio.TXT
437 ******************************************************************************/
438 
439 #if DEV_BUS_TYPE == RT_SDIO_INTERFACE
440 u8 g_delta_swing_table_idx_mp_5gb_n_txpowertrack_sdio_8188f[][DELTA_SWINGIDX_SIZE] = {
441 	{0, 1, 2, 3, 3, 5, 5, 6, 6, 7, 8, 9, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 16, 17, 17, 17, 17, 18, 18, 18},
442 	{0, 1, 2, 3, 3, 5, 5, 6, 6, 7, 8, 9, 10, 11, 11, 12, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 18, 18, 18},
443 	{0, 1, 2, 3, 3, 5, 5, 6, 6, 7, 8, 9, 10, 11, 11, 12, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 18, 18, 18},
444 };
445 u8 g_delta_swing_table_idx_mp_5gb_p_txpowertrack_sdio_8188f[][DELTA_SWINGIDX_SIZE] = {
446 	{0, 1, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15},
447 	{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15},
448 	{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15},
449 };
450 u8 g_delta_swing_table_idx_mp_5ga_n_txpowertrack_sdio_8188f[][DELTA_SWINGIDX_SIZE] = {
451 	{0, 1, 2, 3, 3, 5, 5, 6, 6, 7, 8, 9, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 16, 17, 17, 17, 17, 18, 18, 18},
452 	{0, 1, 2, 3, 3, 5, 5, 6, 6, 7, 8, 9, 10, 11, 11, 12, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 18, 18, 18},
453 	{0, 1, 2, 3, 3, 5, 5, 6, 6, 7, 8, 9, 10, 11, 11, 12, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 18, 18, 18},
454 };
455 u8 g_delta_swing_table_idx_mp_5ga_p_txpowertrack_sdio_8188f[][DELTA_SWINGIDX_SIZE] = {
456 	{0, 1, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15},
457 	{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15},
458 	{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15},
459 };
460 u8 g_delta_swing_table_idx_mp_2gb_n_txpowertrack_sdio_8188f[]    = {0, 0, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 5, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9};
461 u8 g_delta_swing_table_idx_mp_2gb_p_txpowertrack_sdio_8188f[]    = {0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 7, 8, 8, 8, 8};
462 u8 g_delta_swing_table_idx_mp_2ga_n_txpowertrack_sdio_8188f[]    = {0, 1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 9, 10, 11, 12, 13, 14, 15, 16, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18};
463 u8 g_delta_swing_table_idx_mp_2ga_p_txpowertrack_sdio_8188f[]    = {0, 1, 2, 2, 3, 3, 4, 5, 5, 6, 7, 8, 9, 10, 11, 11, 12, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15};
464 u8 g_delta_swing_table_idx_mp_2g_cck_b_n_txpowertrack_sdio_8188f[] = {0, 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9};
465 u8 g_delta_swing_table_idx_mp_2g_cck_b_p_txpowertrack_sdio_8188f[] = {0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 6, 6, 6, 6, 7, 7};
466 u8 g_delta_swing_table_idx_mp_2g_cck_a_n_txpowertrack_sdio_8188f[] = {0, 1, 2, 3, 4, 6, 7, 7, 8, 9, 10, 11, 11, 12, 13, 14, 14, 15, 16, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18};
467 u8 g_delta_swing_table_idx_mp_2g_cck_a_p_txpowertrack_sdio_8188f[] = {0, 0, 1, 2, 2, 3, 3, 4, 5, 5, 6, 7, 8, 9, 10, 11, 12, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14};
468 #endif
469 
470 void
odm_read_and_config_mp_8188f_txpowertrack_sdio(struct dm_struct * dm)471 odm_read_and_config_mp_8188f_txpowertrack_sdio(struct dm_struct *dm)
472 {
473 #if DEV_BUS_TYPE == RT_SDIO_INTERFACE
474 	struct dm_rf_calibration_struct  *cali_info = &(dm->rf_calibrate_info);
475 
476 	PHYDM_DBG(dm, ODM_COMP_INIT, "===> ODM_ReadAndConfig_MP_mp_8188f\n");
477 
478 
479 	odm_move_memory(dm, cali_info->delta_swing_table_idx_2ga_p, g_delta_swing_table_idx_mp_2ga_p_txpowertrack_sdio_8188f, DELTA_SWINGIDX_SIZE);
480 	odm_move_memory(dm, cali_info->delta_swing_table_idx_2ga_n, g_delta_swing_table_idx_mp_2ga_n_txpowertrack_sdio_8188f, DELTA_SWINGIDX_SIZE);
481 	odm_move_memory(dm, cali_info->delta_swing_table_idx_2gb_p, g_delta_swing_table_idx_mp_2gb_p_txpowertrack_sdio_8188f, DELTA_SWINGIDX_SIZE);
482 	odm_move_memory(dm, cali_info->delta_swing_table_idx_2gb_n, g_delta_swing_table_idx_mp_2gb_n_txpowertrack_sdio_8188f, DELTA_SWINGIDX_SIZE);
483 
484 	odm_move_memory(dm, cali_info->delta_swing_table_idx_2g_cck_a_p, g_delta_swing_table_idx_mp_2g_cck_a_p_txpowertrack_sdio_8188f, DELTA_SWINGIDX_SIZE);
485 	odm_move_memory(dm, cali_info->delta_swing_table_idx_2g_cck_a_n, g_delta_swing_table_idx_mp_2g_cck_a_n_txpowertrack_sdio_8188f, DELTA_SWINGIDX_SIZE);
486 	odm_move_memory(dm, cali_info->delta_swing_table_idx_2g_cck_b_p, g_delta_swing_table_idx_mp_2g_cck_b_p_txpowertrack_sdio_8188f, DELTA_SWINGIDX_SIZE);
487 	odm_move_memory(dm, cali_info->delta_swing_table_idx_2g_cck_b_n, g_delta_swing_table_idx_mp_2g_cck_b_n_txpowertrack_sdio_8188f, DELTA_SWINGIDX_SIZE);
488 
489 	odm_move_memory(dm, cali_info->delta_swing_table_idx_5ga_p, g_delta_swing_table_idx_mp_5ga_p_txpowertrack_sdio_8188f, DELTA_SWINGIDX_SIZE * 3);
490 	odm_move_memory(dm, cali_info->delta_swing_table_idx_5ga_n, g_delta_swing_table_idx_mp_5ga_n_txpowertrack_sdio_8188f, DELTA_SWINGIDX_SIZE * 3);
491 	odm_move_memory(dm, cali_info->delta_swing_table_idx_5gb_p, g_delta_swing_table_idx_mp_5gb_p_txpowertrack_sdio_8188f, DELTA_SWINGIDX_SIZE * 3);
492 	odm_move_memory(dm, cali_info->delta_swing_table_idx_5gb_n, g_delta_swing_table_idx_mp_5gb_n_txpowertrack_sdio_8188f, DELTA_SWINGIDX_SIZE * 3);
493 #endif
494 }
495 
496 /******************************************************************************
497 *                           txpowertrack_usb.TXT
498 ******************************************************************************/
499 
500 #if DEV_BUS_TYPE == RT_USB_INTERFACE
501 u8 g_delta_swing_table_idx_mp_5gb_n_txpowertrack_usb_8188f[][DELTA_SWINGIDX_SIZE] = {
502 	{0, 1, 2, 3, 3, 5, 5, 6, 6, 7, 8, 9, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 16, 17, 17, 17, 17, 18, 18, 18},
503 	{0, 1, 2, 3, 3, 5, 5, 6, 6, 7, 8, 9, 10, 11, 11, 12, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 18, 18, 18},
504 	{0, 1, 2, 3, 3, 5, 5, 6, 6, 7, 8, 9, 10, 11, 11, 12, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 18, 18, 18},
505 };
506 u8 g_delta_swing_table_idx_mp_5gb_p_txpowertrack_usb_8188f[][DELTA_SWINGIDX_SIZE] = {
507 	{0, 1, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15},
508 	{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15},
509 	{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15},
510 };
511 u8 g_delta_swing_table_idx_mp_5ga_n_txpowertrack_usb_8188f[][DELTA_SWINGIDX_SIZE] = {
512 	{0, 1, 2, 3, 3, 5, 5, 6, 6, 7, 8, 9, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 16, 17, 17, 17, 17, 18, 18, 18},
513 	{0, 1, 2, 3, 3, 5, 5, 6, 6, 7, 8, 9, 10, 11, 11, 12, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 18, 18, 18},
514 	{0, 1, 2, 3, 3, 5, 5, 6, 6, 7, 8, 9, 10, 11, 11, 12, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 18, 18, 18},
515 };
516 u8 g_delta_swing_table_idx_mp_5ga_p_txpowertrack_usb_8188f[][DELTA_SWINGIDX_SIZE] = {
517 	{0, 1, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15},
518 	{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15},
519 	{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15},
520 };
521 u8 g_delta_swing_table_idx_mp_2gb_n_txpowertrack_usb_8188f[]    = {0, 0, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 5, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9};
522 u8 g_delta_swing_table_idx_mp_2gb_p_txpowertrack_usb_8188f[]    = {0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 7, 8, 8, 8, 8};
523 u8 g_delta_swing_table_idx_mp_2ga_n_txpowertrack_usb_8188f[]    = {0, 1, 1, 2, 3, 4, 4, 4, 5, 6, 7, 8, 8, 9, 10, 11, 12, 13, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15};
524 u8 g_delta_swing_table_idx_mp_2ga_p_txpowertrack_usb_8188f[]    = {0, 1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10, 10, 11, 12, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15};
525 u8 g_delta_swing_table_idx_mp_2g_cck_b_n_txpowertrack_usb_8188f[] = {0, 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9};
526 u8 g_delta_swing_table_idx_mp_2g_cck_b_p_txpowertrack_usb_8188f[] = {0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 6, 6, 6, 6, 7, 7};
527 u8 g_delta_swing_table_idx_mp_2g_cck_a_n_txpowertrack_usb_8188f[] = {0, 1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 14, 14, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16};
528 u8 g_delta_swing_table_idx_mp_2g_cck_a_p_txpowertrack_usb_8188f[] = {0, 0, 1, 2, 2, 3, 3, 4, 6, 6, 7, 8, 8, 10, 10, 11, 13, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15};
529 #endif
530 
531 void
odm_read_and_config_mp_8188f_txpowertrack_usb(struct dm_struct * dm)532 odm_read_and_config_mp_8188f_txpowertrack_usb(struct dm_struct *dm)
533 {
534 #if DEV_BUS_TYPE == RT_USB_INTERFACE
535 	struct dm_rf_calibration_struct  *cali_info = &(dm->rf_calibrate_info);
536 
537 	PHYDM_DBG(dm, ODM_COMP_INIT, "===> ODM_ReadAndConfig_MP_mp_8188f\n");
538 
539 
540 	odm_move_memory(dm, cali_info->delta_swing_table_idx_2ga_p, g_delta_swing_table_idx_mp_2ga_p_txpowertrack_usb_8188f, DELTA_SWINGIDX_SIZE);
541 	odm_move_memory(dm, cali_info->delta_swing_table_idx_2ga_n, g_delta_swing_table_idx_mp_2ga_n_txpowertrack_usb_8188f, DELTA_SWINGIDX_SIZE);
542 	odm_move_memory(dm, cali_info->delta_swing_table_idx_2gb_p, g_delta_swing_table_idx_mp_2gb_p_txpowertrack_usb_8188f, DELTA_SWINGIDX_SIZE);
543 	odm_move_memory(dm, cali_info->delta_swing_table_idx_2gb_n, g_delta_swing_table_idx_mp_2gb_n_txpowertrack_usb_8188f, DELTA_SWINGIDX_SIZE);
544 
545 	odm_move_memory(dm, cali_info->delta_swing_table_idx_2g_cck_a_p, g_delta_swing_table_idx_mp_2g_cck_a_p_txpowertrack_usb_8188f, DELTA_SWINGIDX_SIZE);
546 	odm_move_memory(dm, cali_info->delta_swing_table_idx_2g_cck_a_n, g_delta_swing_table_idx_mp_2g_cck_a_n_txpowertrack_usb_8188f, DELTA_SWINGIDX_SIZE);
547 	odm_move_memory(dm, cali_info->delta_swing_table_idx_2g_cck_b_p, g_delta_swing_table_idx_mp_2g_cck_b_p_txpowertrack_usb_8188f, DELTA_SWINGIDX_SIZE);
548 	odm_move_memory(dm, cali_info->delta_swing_table_idx_2g_cck_b_n, g_delta_swing_table_idx_mp_2g_cck_b_n_txpowertrack_usb_8188f, DELTA_SWINGIDX_SIZE);
549 
550 	odm_move_memory(dm, cali_info->delta_swing_table_idx_5ga_p, g_delta_swing_table_idx_mp_5ga_p_txpowertrack_usb_8188f, DELTA_SWINGIDX_SIZE * 3);
551 	odm_move_memory(dm, cali_info->delta_swing_table_idx_5ga_n, g_delta_swing_table_idx_mp_5ga_n_txpowertrack_usb_8188f, DELTA_SWINGIDX_SIZE * 3);
552 	odm_move_memory(dm, cali_info->delta_swing_table_idx_5gb_p, g_delta_swing_table_idx_mp_5gb_p_txpowertrack_usb_8188f, DELTA_SWINGIDX_SIZE * 3);
553 	odm_move_memory(dm, cali_info->delta_swing_table_idx_5gb_n, g_delta_swing_table_idx_mp_5gb_n_txpowertrack_usb_8188f, DELTA_SWINGIDX_SIZE * 3);
554 #endif
555 }
556 
557 /******************************************************************************
558 *                           txpwr_lmt.TXT
559 ******************************************************************************/
560 
561 const char *array_mp_8188f_txpwr_lmt[] = {
562 	"FCC", "2.4G", "20M", "CCK", "1T", "01", "32",
563 	"ETSI", "2.4G", "20M", "CCK", "1T", "01", "26",
564 	"MKK", "2.4G", "20M", "CCK", "1T", "01", "32",
565 	"FCC", "2.4G", "20M", "CCK", "1T", "02", "32",
566 	"ETSI", "2.4G", "20M", "CCK", "1T", "02", "26",
567 	"MKK", "2.4G", "20M", "CCK", "1T", "02", "32",
568 	"FCC", "2.4G", "20M", "CCK", "1T", "03", "32",
569 	"ETSI", "2.4G", "20M", "CCK", "1T", "03", "26",
570 	"MKK", "2.4G", "20M", "CCK", "1T", "03", "32",
571 	"FCC", "2.4G", "20M", "CCK", "1T", "04", "32",
572 	"ETSI", "2.4G", "20M", "CCK", "1T", "04", "26",
573 	"MKK", "2.4G", "20M", "CCK", "1T", "04", "32",
574 	"FCC", "2.4G", "20M", "CCK", "1T", "05", "32",
575 	"ETSI", "2.4G", "20M", "CCK", "1T", "05", "26",
576 	"MKK", "2.4G", "20M", "CCK", "1T", "05", "32",
577 	"FCC", "2.4G", "20M", "CCK", "1T", "06", "32",
578 	"ETSI", "2.4G", "20M", "CCK", "1T", "06", "26",
579 	"MKK", "2.4G", "20M", "CCK", "1T", "06", "32",
580 	"FCC", "2.4G", "20M", "CCK", "1T", "07", "32",
581 	"ETSI", "2.4G", "20M", "CCK", "1T", "07", "26",
582 	"MKK", "2.4G", "20M", "CCK", "1T", "07", "32",
583 	"FCC", "2.4G", "20M", "CCK", "1T", "08", "32",
584 	"ETSI", "2.4G", "20M", "CCK", "1T", "08", "26",
585 	"MKK", "2.4G", "20M", "CCK", "1T", "08", "32",
586 	"FCC", "2.4G", "20M", "CCK", "1T", "09", "32",
587 	"ETSI", "2.4G", "20M", "CCK", "1T", "09", "26",
588 	"MKK", "2.4G", "20M", "CCK", "1T", "09", "32",
589 	"FCC", "2.4G", "20M", "CCK", "1T", "10", "32",
590 	"ETSI", "2.4G", "20M", "CCK", "1T", "10", "26",
591 	"MKK", "2.4G", "20M", "CCK", "1T", "10", "32",
592 	"FCC", "2.4G", "20M", "CCK", "1T", "11", "32",
593 	"ETSI", "2.4G", "20M", "CCK", "1T", "11", "26",
594 	"MKK", "2.4G", "20M", "CCK", "1T", "11", "32",
595 	"FCC", "2.4G", "20M", "CCK", "1T", "12", "30",
596 	"ETSI", "2.4G", "20M", "CCK", "1T", "12", "26",
597 	"MKK", "2.4G", "20M", "CCK", "1T", "12", "32",
598 	"FCC", "2.4G", "20M", "CCK", "1T", "13", "26",
599 	"ETSI", "2.4G", "20M", "CCK", "1T", "13", "26",
600 	"MKK", "2.4G", "20M", "CCK", "1T", "13", "32",
601 	"FCC", "2.4G", "20M", "CCK", "1T", "14", "63",
602 	"ETSI", "2.4G", "20M", "CCK", "1T", "14", "63",
603 	"MKK", "2.4G", "20M", "CCK", "1T", "14", "32",
604 	"FCC", "2.4G", "20M", "OFDM", "1T", "01", "28",
605 	"ETSI", "2.4G", "20M", "OFDM", "1T", "01", "30",
606 	"MKK", "2.4G", "20M", "OFDM", "1T", "01", "30",
607 	"FCC", "2.4G", "20M", "OFDM", "1T", "02", "28",
608 	"ETSI", "2.4G", "20M", "OFDM", "1T", "02", "30",
609 	"MKK", "2.4G", "20M", "OFDM", "1T", "02", "30",
610 	"FCC", "2.4G", "20M", "OFDM", "1T", "03", "30",
611 	"ETSI", "2.4G", "20M", "OFDM", "1T", "03", "30",
612 	"MKK", "2.4G", "20M", "OFDM", "1T", "03", "30",
613 	"FCC", "2.4G", "20M", "OFDM", "1T", "04", "30",
614 	"ETSI", "2.4G", "20M", "OFDM", "1T", "04", "30",
615 	"MKK", "2.4G", "20M", "OFDM", "1T", "04", "30",
616 	"FCC", "2.4G", "20M", "OFDM", "1T", "05", "30",
617 	"ETSI", "2.4G", "20M", "OFDM", "1T", "05", "30",
618 	"MKK", "2.4G", "20M", "OFDM", "1T", "05", "30",
619 	"FCC", "2.4G", "20M", "OFDM", "1T", "06", "30",
620 	"ETSI", "2.4G", "20M", "OFDM", "1T", "06", "30",
621 	"MKK", "2.4G", "20M", "OFDM", "1T", "06", "30",
622 	"FCC", "2.4G", "20M", "OFDM", "1T", "07", "30",
623 	"ETSI", "2.4G", "20M", "OFDM", "1T", "07", "30",
624 	"MKK", "2.4G", "20M", "OFDM", "1T", "07", "30",
625 	"FCC", "2.4G", "20M", "OFDM", "1T", "08", "30",
626 	"ETSI", "2.4G", "20M", "OFDM", "1T", "08", "30",
627 	"MKK", "2.4G", "20M", "OFDM", "1T", "08", "30",
628 	"FCC", "2.4G", "20M", "OFDM", "1T", "09", "28",
629 	"ETSI", "2.4G", "20M", "OFDM", "1T", "09", "30",
630 	"MKK", "2.4G", "20M", "OFDM", "1T", "09", "30",
631 	"FCC", "2.4G", "20M", "OFDM", "1T", "10", "28",
632 	"ETSI", "2.4G", "20M", "OFDM", "1T", "10", "30",
633 	"MKK", "2.4G", "20M", "OFDM", "1T", "10", "30",
634 	"FCC", "2.4G", "20M", "OFDM", "1T", "11", "28",
635 	"ETSI", "2.4G", "20M", "OFDM", "1T", "11", "30",
636 	"MKK", "2.4G", "20M", "OFDM", "1T", "11", "30",
637 	"FCC", "2.4G", "20M", "OFDM", "1T", "12", "24",
638 	"ETSI", "2.4G", "20M", "OFDM", "1T", "12", "30",
639 	"MKK", "2.4G", "20M", "OFDM", "1T", "12", "30",
640 	"FCC", "2.4G", "20M", "OFDM", "1T", "13", "16",
641 	"ETSI", "2.4G", "20M", "OFDM", "1T", "13", "30",
642 	"MKK", "2.4G", "20M", "OFDM", "1T", "13", "30",
643 	"FCC", "2.4G", "20M", "OFDM", "1T", "14", "63",
644 	"ETSI", "2.4G", "20M", "OFDM", "1T", "14", "63",
645 	"MKK", "2.4G", "20M", "OFDM", "1T", "14", "63",
646 	"FCC", "2.4G", "20M", "HT", "1T", "01", "28",
647 	"ETSI", "2.4G", "20M", "HT", "1T", "01", "30",
648 	"MKK", "2.4G", "20M", "HT", "1T", "01", "30",
649 	"FCC", "2.4G", "20M", "HT", "1T", "02", "28",
650 	"ETSI", "2.4G", "20M", "HT", "1T", "02", "30",
651 	"MKK", "2.4G", "20M", "HT", "1T", "02", "30",
652 	"FCC", "2.4G", "20M", "HT", "1T", "03", "30",
653 	"ETSI", "2.4G", "20M", "HT", "1T", "03", "30",
654 	"MKK", "2.4G", "20M", "HT", "1T", "03", "30",
655 	"FCC", "2.4G", "20M", "HT", "1T", "04", "30",
656 	"ETSI", "2.4G", "20M", "HT", "1T", "04", "30",
657 	"MKK", "2.4G", "20M", "HT", "1T", "04", "30",
658 	"FCC", "2.4G", "20M", "HT", "1T", "05", "30",
659 	"ETSI", "2.4G", "20M", "HT", "1T", "05", "30",
660 	"MKK", "2.4G", "20M", "HT", "1T", "05", "30",
661 	"FCC", "2.4G", "20M", "HT", "1T", "06", "30",
662 	"ETSI", "2.4G", "20M", "HT", "1T", "06", "30",
663 	"MKK", "2.4G", "20M", "HT", "1T", "06", "30",
664 	"FCC", "2.4G", "20M", "HT", "1T", "07", "30",
665 	"ETSI", "2.4G", "20M", "HT", "1T", "07", "30",
666 	"MKK", "2.4G", "20M", "HT", "1T", "07", "30",
667 	"FCC", "2.4G", "20M", "HT", "1T", "08", "30",
668 	"ETSI", "2.4G", "20M", "HT", "1T", "08", "30",
669 	"MKK", "2.4G", "20M", "HT", "1T", "08", "30",
670 	"FCC", "2.4G", "20M", "HT", "1T", "09", "28",
671 	"ETSI", "2.4G", "20M", "HT", "1T", "09", "30",
672 	"MKK", "2.4G", "20M", "HT", "1T", "09", "30",
673 	"FCC", "2.4G", "20M", "HT", "1T", "10", "28",
674 	"ETSI", "2.4G", "20M", "HT", "1T", "10", "30",
675 	"MKK", "2.4G", "20M", "HT", "1T", "10", "30",
676 	"FCC", "2.4G", "20M", "HT", "1T", "11", "28",
677 	"ETSI", "2.4G", "20M", "HT", "1T", "11", "30",
678 	"MKK", "2.4G", "20M", "HT", "1T", "11", "30",
679 	"FCC", "2.4G", "20M", "HT", "1T", "12", "24",
680 	"ETSI", "2.4G", "20M", "HT", "1T", "12", "30",
681 	"MKK", "2.4G", "20M", "HT", "1T", "12", "30",
682 	"FCC", "2.4G", "20M", "HT", "1T", "13", "16",
683 	"ETSI", "2.4G", "20M", "HT", "1T", "13", "30",
684 	"MKK", "2.4G", "20M", "HT", "1T", "13", "30",
685 	"FCC", "2.4G", "20M", "HT", "1T", "14", "63",
686 	"ETSI", "2.4G", "20M", "HT", "1T", "14", "63",
687 	"MKK", "2.4G", "20M", "HT", "1T", "14", "63",
688 	"FCC", "2.4G", "20M", "HT", "2T", "01", "28",
689 	"ETSI", "2.4G", "20M", "HT", "2T", "01", "30",
690 	"MKK", "2.4G", "20M", "HT", "2T", "01", "30",
691 	"FCC", "2.4G", "20M", "HT", "2T", "02", "28",
692 	"ETSI", "2.4G", "20M", "HT", "2T", "02", "30",
693 	"MKK", "2.4G", "20M", "HT", "2T", "02", "30",
694 	"FCC", "2.4G", "20M", "HT", "2T", "03", "30",
695 	"ETSI", "2.4G", "20M", "HT", "2T", "03", "30",
696 	"MKK", "2.4G", "20M", "HT", "2T", "03", "30",
697 	"FCC", "2.4G", "20M", "HT", "2T", "04", "30",
698 	"ETSI", "2.4G", "20M", "HT", "2T", "04", "30",
699 	"MKK", "2.4G", "20M", "HT", "2T", "04", "30",
700 	"FCC", "2.4G", "20M", "HT", "2T", "05", "30",
701 	"ETSI", "2.4G", "20M", "HT", "2T", "05", "30",
702 	"MKK", "2.4G", "20M", "HT", "2T", "05", "30",
703 	"FCC", "2.4G", "20M", "HT", "2T", "06", "30",
704 	"ETSI", "2.4G", "20M", "HT", "2T", "06", "30",
705 	"MKK", "2.4G", "20M", "HT", "2T", "06", "30",
706 	"FCC", "2.4G", "20M", "HT", "2T", "07", "30",
707 	"ETSI", "2.4G", "20M", "HT", "2T", "07", "30",
708 	"MKK", "2.4G", "20M", "HT", "2T", "07", "30",
709 	"FCC", "2.4G", "20M", "HT", "2T", "08", "30",
710 	"ETSI", "2.4G", "20M", "HT", "2T", "08", "30",
711 	"MKK", "2.4G", "20M", "HT", "2T", "08", "30",
712 	"FCC", "2.4G", "20M", "HT", "2T", "09", "28",
713 	"ETSI", "2.4G", "20M", "HT", "2T", "09", "30",
714 	"MKK", "2.4G", "20M", "HT", "2T", "09", "30",
715 	"FCC", "2.4G", "20M", "HT", "2T", "10", "28",
716 	"ETSI", "2.4G", "20M", "HT", "2T", "10", "30",
717 	"MKK", "2.4G", "20M", "HT", "2T", "10", "30",
718 	"FCC", "2.4G", "20M", "HT", "2T", "11", "28",
719 	"ETSI", "2.4G", "20M", "HT", "2T", "11", "30",
720 	"MKK", "2.4G", "20M", "HT", "2T", "11", "30",
721 	"FCC", "2.4G", "20M", "HT", "2T", "12", "63",
722 	"ETSI", "2.4G", "20M", "HT", "2T", "12", "30",
723 	"MKK", "2.4G", "20M", "HT", "2T", "12", "30",
724 	"FCC", "2.4G", "20M", "HT", "2T", "13", "63",
725 	"ETSI", "2.4G", "20M", "HT", "2T", "13", "30",
726 	"MKK", "2.4G", "20M", "HT", "2T", "13", "30",
727 	"FCC", "2.4G", "20M", "HT", "2T", "14", "63",
728 	"ETSI", "2.4G", "20M", "HT", "2T", "14", "63",
729 	"MKK", "2.4G", "20M", "HT", "2T", "14", "63",
730 	"FCC", "2.4G", "40M", "HT", "1T", "01", "63",
731 	"ETSI", "2.4G", "40M", "HT", "1T", "01", "63",
732 	"MKK", "2.4G", "40M", "HT", "1T", "01", "63",
733 	"FCC", "2.4G", "40M", "HT", "1T", "02", "63",
734 	"ETSI", "2.4G", "40M", "HT", "1T", "02", "63",
735 	"MKK", "2.4G", "40M", "HT", "1T", "02", "63",
736 	"FCC", "2.4G", "40M", "HT", "1T", "03", "26",
737 	"ETSI", "2.4G", "40M", "HT", "1T", "03", "26",
738 	"MKK", "2.4G", "40M", "HT", "1T", "03", "26",
739 	"FCC", "2.4G", "40M", "HT", "1T", "04", "26",
740 	"ETSI", "2.4G", "40M", "HT", "1T", "04", "26",
741 	"MKK", "2.4G", "40M", "HT", "1T", "04", "26",
742 	"FCC", "2.4G", "40M", "HT", "1T", "05", "26",
743 	"ETSI", "2.4G", "40M", "HT", "1T", "05", "26",
744 	"MKK", "2.4G", "40M", "HT", "1T", "05", "26",
745 	"FCC", "2.4G", "40M", "HT", "1T", "06", "26",
746 	"ETSI", "2.4G", "40M", "HT", "1T", "06", "26",
747 	"MKK", "2.4G", "40M", "HT", "1T", "06", "26",
748 	"FCC", "2.4G", "40M", "HT", "1T", "07", "26",
749 	"ETSI", "2.4G", "40M", "HT", "1T", "07", "26",
750 	"MKK", "2.4G", "40M", "HT", "1T", "07", "26",
751 	"FCC", "2.4G", "40M", "HT", "1T", "08", "26",
752 	"ETSI", "2.4G", "40M", "HT", "1T", "08", "26",
753 	"MKK", "2.4G", "40M", "HT", "1T", "08", "26",
754 	"FCC", "2.4G", "40M", "HT", "1T", "09", "26",
755 	"ETSI", "2.4G", "40M", "HT", "1T", "09", "26",
756 	"MKK", "2.4G", "40M", "HT", "1T", "09", "26",
757 	"FCC", "2.4G", "40M", "HT", "1T", "10", "24",
758 	"ETSI", "2.4G", "40M", "HT", "1T", "10", "26",
759 	"MKK", "2.4G", "40M", "HT", "1T", "10", "26",
760 	"FCC", "2.4G", "40M", "HT", "1T", "11", "10",
761 	"ETSI", "2.4G", "40M", "HT", "1T", "11", "26",
762 	"MKK", "2.4G", "40M", "HT", "1T", "11", "26",
763 	"FCC", "2.4G", "40M", "HT", "1T", "12", "63",
764 	"ETSI", "2.4G", "40M", "HT", "1T", "12", "26",
765 	"MKK", "2.4G", "40M", "HT", "1T", "12", "26",
766 	"FCC", "2.4G", "40M", "HT", "1T", "13", "63",
767 	"ETSI", "2.4G", "40M", "HT", "1T", "13", "26",
768 	"MKK", "2.4G", "40M", "HT", "1T", "13", "26",
769 	"FCC", "2.4G", "40M", "HT", "1T", "14", "63",
770 	"ETSI", "2.4G", "40M", "HT", "1T", "14", "63",
771 	"MKK", "2.4G", "40M", "HT", "1T", "14", "63",
772 	"FCC", "2.4G", "40M", "HT", "2T", "01", "63",
773 	"ETSI", "2.4G", "40M", "HT", "2T", "01", "63",
774 	"MKK", "2.4G", "40M", "HT", "2T", "01", "63",
775 	"FCC", "2.4G", "40M", "HT", "2T", "02", "63",
776 	"ETSI", "2.4G", "40M", "HT", "2T", "02", "63",
777 	"MKK", "2.4G", "40M", "HT", "2T", "02", "63",
778 	"FCC", "2.4G", "40M", "HT", "2T", "03", "26",
779 	"ETSI", "2.4G", "40M", "HT", "2T", "03", "26",
780 	"MKK", "2.4G", "40M", "HT", "2T", "03", "26",
781 	"FCC", "2.4G", "40M", "HT", "2T", "04", "26",
782 	"ETSI", "2.4G", "40M", "HT", "2T", "04", "26",
783 	"MKK", "2.4G", "40M", "HT", "2T", "04", "26",
784 	"FCC", "2.4G", "40M", "HT", "2T", "05", "26",
785 	"ETSI", "2.4G", "40M", "HT", "2T", "05", "26",
786 	"MKK", "2.4G", "40M", "HT", "2T", "05", "26",
787 	"FCC", "2.4G", "40M", "HT", "2T", "06", "26",
788 	"ETSI", "2.4G", "40M", "HT", "2T", "06", "26",
789 	"MKK", "2.4G", "40M", "HT", "2T", "06", "26",
790 	"FCC", "2.4G", "40M", "HT", "2T", "07", "26",
791 	"ETSI", "2.4G", "40M", "HT", "2T", "07", "26",
792 	"MKK", "2.4G", "40M", "HT", "2T", "07", "26",
793 	"FCC", "2.4G", "40M", "HT", "2T", "08", "26",
794 	"ETSI", "2.4G", "40M", "HT", "2T", "08", "26",
795 	"MKK", "2.4G", "40M", "HT", "2T", "08", "26",
796 	"FCC", "2.4G", "40M", "HT", "2T", "09", "26",
797 	"ETSI", "2.4G", "40M", "HT", "2T", "09", "26",
798 	"MKK", "2.4G", "40M", "HT", "2T", "09", "26",
799 	"FCC", "2.4G", "40M", "HT", "2T", "10", "26",
800 	"ETSI", "2.4G", "40M", "HT", "2T", "10", "26",
801 	"MKK", "2.4G", "40M", "HT", "2T", "10", "26",
802 	"FCC", "2.4G", "40M", "HT", "2T", "11", "26",
803 	"ETSI", "2.4G", "40M", "HT", "2T", "11", "26",
804 	"MKK", "2.4G", "40M", "HT", "2T", "11", "26",
805 	"FCC", "2.4G", "40M", "HT", "2T", "12", "63",
806 	"ETSI", "2.4G", "40M", "HT", "2T", "12", "26",
807 	"MKK", "2.4G", "40M", "HT", "2T", "12", "26",
808 	"FCC", "2.4G", "40M", "HT", "2T", "13", "63",
809 	"ETSI", "2.4G", "40M", "HT", "2T", "13", "26",
810 	"MKK", "2.4G", "40M", "HT", "2T", "13", "26",
811 	"FCC", "2.4G", "40M", "HT", "2T", "14", "63",
812 	"ETSI", "2.4G", "40M", "HT", "2T", "14", "63",
813 	"MKK", "2.4G", "40M", "HT", "2T", "14", "63"
814 };
815 
816 void
odm_read_and_config_mp_8188f_txpwr_lmt(struct dm_struct * dm)817 odm_read_and_config_mp_8188f_txpwr_lmt(struct dm_struct *dm)
818 {
819 	u32	i = 0;
820 #if (DM_ODM_SUPPORT_TYPE == ODM_IOT)
821 	u32	array_len = sizeof(array_mp_8188f_txpwr_lmt) / sizeof(u8);
822 	u8	*array = (u8 *)array_mp_8188f_txpwr_lmt;
823 #else
824 	u32	array_len = sizeof(array_mp_8188f_txpwr_lmt) / sizeof(u8 *);
825 	u8	**array = (u8 **)array_mp_8188f_txpwr_lmt;
826 #endif
827 
828 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
829 	void	*adapter = dm->adapter;
830 	HAL_DATA_TYPE	*hal_data = GET_HAL_DATA(((PADAPTER)adapter));
831 
832 	PlatformZeroMemory(hal_data->BufOfLinesPwrLmt, MAX_LINES_HWCONFIG_TXT * MAX_BYTES_LINE_HWCONFIG_TXT);
833 	hal_data->nLinesReadPwrLmt = array_len / 7;
834 #endif
835 
836 	PHYDM_DBG(dm, ODM_COMP_INIT, "===> %s\n", __func__);
837 
838 	for (i = 0; i < array_len; i += 7) {
839 #if (DM_ODM_SUPPORT_TYPE == ODM_IOT)
840 		u8	regulation = array[i];
841 		u8	band = array[i + 1];
842 		u8	bandwidth = array[i + 2];
843 		u8	rate = array[i + 3];
844 		u8	rf_path = array[i + 4];
845 		u8	chnl = array[i + 5];
846 		u8	val = array[i + 6];
847 #else
848 		u8	*regulation = array[i];
849 		u8	*band = array[i + 1];
850 		u8	*bandwidth = array[i + 2];
851 		u8	*rate = array[i + 3];
852 		u8	*rf_path = array[i + 4];
853 		u8	*chnl = array[i + 5];
854 		u8	*val = array[i + 6];
855 #endif
856 
857 		odm_config_bb_txpwr_lmt_8188f(dm, regulation, band, bandwidth, rate, rf_path, chnl, val);
858 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
859 		rsprintf((char *)hal_data->BufOfLinesPwrLmt[i / 7], 100, "\"%s\", \"%s\", \"%s\", \"%s\", \"%s\", \"%s\", \"%s\",",
860 		regulation, band, bandwidth, rate, rf_path, chnl, val);
861 #endif
862 	}
863 }
864 
865 #endif /* end of HWIMG_SUPPORT*/
866 
867