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