xref: /OK3568_Linux_fs/external/rkwifibt/drivers/rtl8189fs/hal/phydm/halrf/halrf_powertracking_iot.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  * The full GNU General Public License is included in this distribution in the
15  * file called LICENSE.
16  *
17  * Contact Information:
18  * wlanfae <wlanfae@realtek.com>
19  * Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,
20  * Hsinchu 300, Taiwan.
21  *
22  * Larry Finger <Larry.Finger@lwfinger.net>
23  *
24  *****************************************************************************/
25 
26 /*============================================================	*/
27 /* include files												*/
28 /*============================================================	*/
29 #include "mp_precomp.h"
30 #include "phydm_precomp.h"
31 
32 /* ************************************************************
33  * Global var
34  * ************************************************************
35  */
36 
37 const u32 ofdm_swing_table[OFDM_TABLE_SIZE] = {
38 	0x7f8001fe,	/* 0, +6.0dB */
39 	0x788001e2,	/* 1, +5.5dB */
40 	0x71c001c7,	/* 2, +5.0dB*/
41 	0x6b8001ae,	/* 3, +4.5dB*/
42 	0x65400195,	/* 4, +4.0dB*/
43 	0x5fc0017f,	/* 5, +3.5dB*/
44 	0x5a400169,	/* 6, +3.0dB*/
45 	0x55400155,	/* 7, +2.5dB*/
46 	0x50800142,	/* 8, +2.0dB*/
47 	0x4c000130,	/* 9, +1.5dB*/
48 	0x47c0011f,	/* 10, +1.0dB*/
49 	0x43c0010f,	/* 11, +0.5dB*/
50 	0x40000100,	/* 12, +0dB*/
51 	0x3c8000f2,	/* 13, -0.5dB*/
52 	0x390000e4,	/* 14, -1.0dB*/
53 	0x35c000d7,	/* 15, -1.5dB*/
54 	0x32c000cb,	/* 16, -2.0dB*/
55 	0x300000c0,	/* 17, -2.5dB*/
56 	0x2d4000b5,	/* 18, -3.0dB*/
57 	0x2ac000ab,	/* 19, -3.5dB*/
58 	0x288000a2,	/* 20, -4.0dB*/
59 	0x26000098,	/* 21, -4.5dB*/
60 	0x24000090,	/* 22, -5.0dB*/
61 	0x22000088,	/* 23, -5.5dB*/
62 	0x20000080,	/* 24, -6.0dB*/
63 	0x1e400079,	/* 25, -6.5dB*/
64 	0x1c800072,	/* 26, -7.0dB*/
65 	0x1b00006c,	/* 27. -7.5dB*/
66 	0x19800066,	/* 28, -8.0dB*/
67 	0x18000060,	/* 29, -8.5dB*/
68 	0x16c0005b,	/* 30, -9.0dB*/
69 	0x15800056,	/* 31, -9.5dB*/
70 	0x14400051,	/* 32, -10.0dB*/
71 	0x1300004c,	/* 33, -10.5dB*/
72 	0x12000048,	/* 34, -11.0dB*/
73 	0x11000044,	/* 35, -11.5dB*/
74 	0x10000040,	/* 36, -12.0dB*/
75 };
76 
77 const u8 cck_swing_table_ch1_ch13[CCK_TABLE_SIZE][8] = {
78 	{0x36, 0x35, 0x2e, 0x25, 0x1c, 0x12, 0x09, 0x04},	/* 0, +0dB */
79 	{0x33, 0x32, 0x2b, 0x23, 0x1a, 0x11, 0x08, 0x04},	/* 1, -0.5dB */
80 	{0x30, 0x2f, 0x29, 0x21, 0x19, 0x10, 0x08, 0x03},	/* 2, -1.0dB*/
81 	{0x2d, 0x2d, 0x27, 0x1f, 0x18, 0x0f, 0x08, 0x03},	/* 3, -1.5dB*/
82 	{0x2b, 0x2a, 0x25, 0x1e, 0x16, 0x0e, 0x07, 0x03},	/* 4, -2.0dB */
83 	{0x28, 0x28, 0x22, 0x1c, 0x15, 0x0d, 0x07, 0x03},	/* 5, -2.5dB*/
84 	{0x26, 0x25, 0x21, 0x1b, 0x14, 0x0d, 0x06, 0x03},	/* 6, -3.0dB*/
85 	{0x24, 0x23, 0x1f, 0x19, 0x13, 0x0c, 0x06, 0x03},	/* 7, -3.5dB*/
86 	{0x22, 0x21, 0x1d, 0x18, 0x11, 0x0b, 0x06, 0x02},	/* 8, -4.0dB */
87 	{0x20, 0x20, 0x1b, 0x16, 0x11, 0x08, 0x05, 0x02},	/* 9, -4.5dB*/
88 	{0x1f, 0x1e, 0x1a, 0x15, 0x10, 0x0a, 0x05, 0x02},	/* 10, -5.0dB */
89 	{0x1d, 0x1c, 0x18, 0x14, 0x0f, 0x0a, 0x05, 0x02},	/* 11, -5.5dB*/
90 	{0x1b, 0x1a, 0x17, 0x13, 0x0e, 0x09, 0x04, 0x02},	/* 12, -6.0dB <== default */
91 	{0x1a, 0x19, 0x16, 0x12, 0x0d, 0x09, 0x04, 0x02},	/* 13, -6.5dB*/
92 	{0x18, 0x17, 0x15, 0x11, 0x0c, 0x08, 0x04, 0x02},	/* 14, -7.0dB */
93 	{0x17, 0x16, 0x13, 0x10, 0x0c, 0x08, 0x04, 0x02},	/* 15, -7.5dB*/
94 	{0x16, 0x15, 0x12, 0x0f, 0x0b, 0x07, 0x04, 0x01},	/* 16, -8.0dB */
95 	{0x14, 0x14, 0x11, 0x0e, 0x0b, 0x07, 0x03, 0x02},	/* 17, -8.5dB*/
96 	{0x13, 0x13, 0x10, 0x0d, 0x0a, 0x06, 0x03, 0x01},	/* 18, -9.0dB */
97 	{0x12, 0x12, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01},	/* 19, -9.5dB*/
98 	{0x11, 0x11, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01},	/* 20, -10.0dB*/
99 	{0x10, 0x10, 0x0e, 0x0b, 0x08, 0x05, 0x03, 0x01},	/* 21, -10.5dB*/
100 	{0x0f, 0x0f, 0x0d, 0x0b, 0x08, 0x05, 0x03, 0x01},	/* 22, -11.0dB*/
101 	{0x0e, 0x0e, 0x0c, 0x0a, 0x08, 0x05, 0x02, 0x01},	/* 23, -11.5dB*/
102 	{0x0d, 0x0d, 0x0c, 0x0a, 0x07, 0x05, 0x02, 0x01},	/* 24, -12.0dB*/
103 	{0x0d, 0x0c, 0x0b, 0x09, 0x07, 0x04, 0x02, 0x01},	/* 25, -12.5dB*/
104 	{0x0c, 0x0c, 0x0a, 0x09, 0x06, 0x04, 0x02, 0x01},	/* 26, -13.0dB*/
105 	{0x0b, 0x0b, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x01},	/* 27, -13.5dB*/
106 	{0x0b, 0x0a, 0x09, 0x08, 0x06, 0x04, 0x02, 0x01},	/* 28, -14.0dB*/
107 	{0x0a, 0x0a, 0x09, 0x07, 0x05, 0x03, 0x02, 0x01},	/* 29, -14.5dB*/
108 	{0x0a, 0x09, 0x08, 0x07, 0x05, 0x03, 0x02, 0x01},	/* 30, -15.0dB*/
109 	{0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01},	/* 31, -15.5dB*/
110 	{0x09, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x01}	/* 32, -16.0dB*/
111 };
112 
113 const u8 cck_swing_table_ch14[CCK_TABLE_SIZE][8] = {
114 	{0x36, 0x35, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00},	/* 0, +0dB */
115 	{0x33, 0x32, 0x2b, 0x19, 0x00, 0x00, 0x00, 0x00},	/* 1, -0.5dB */
116 	{0x30, 0x2f, 0x29, 0x18, 0x00, 0x00, 0x00, 0x00},	/* 2, -1.0dB */
117 	{0x2d, 0x2d, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00},	/* 3, -1.5dB*/
118 	{0x2b, 0x2a, 0x25, 0x15, 0x00, 0x00, 0x00, 0x00},	/* 4, -2.0dB */
119 	{0x28, 0x28, 0x24, 0x14, 0x00, 0x00, 0x00, 0x00},	/* 5, -2.5dB*/
120 	{0x26, 0x25, 0x21, 0x13, 0x00, 0x00, 0x00, 0x00},	/* 6, -3.0dB */
121 	{0x24, 0x23, 0x1f, 0x12, 0x00, 0x00, 0x00, 0x00},	/* 7, -3.5dB */
122 	{0x22, 0x21, 0x1d, 0x11, 0x00, 0x00, 0x00, 0x00},	/* 8, -4.0dB */
123 	{0x20, 0x20, 0x1b, 0x10, 0x00, 0x00, 0x00, 0x00},	/* 9, -4.5dB*/
124 	{0x1f, 0x1e, 0x1a, 0x0f, 0x00, 0x00, 0x00, 0x00},	/* 10, -5.0dB */
125 	{0x1d, 0x1c, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00},	/* 11, -5.5dB*/
126 	{0x1b, 0x1a, 0x17, 0x0e, 0x00, 0x00, 0x00, 0x00},	/* 12, -6.0dB  <== default*/
127 	{0x1a, 0x19, 0x16, 0x0d, 0x00, 0x00, 0x00, 0x00},	/* 13, -6.5dB */
128 	{0x18, 0x17, 0x15, 0x0c, 0x00, 0x00, 0x00, 0x00},	/* 14, -7.0dB */
129 	{0x17, 0x16, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00},	/* 15, -7.5dB*/
130 	{0x16, 0x15, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00},	/* 16, -8.0dB */
131 	{0x14, 0x14, 0x11, 0x0a, 0x00, 0x00, 0x00, 0x00},	/* 17, -8.5dB*/
132 	{0x13, 0x13, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00},	/* 18, -9.0dB */
133 	{0x12, 0x12, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00},	/* 19, -9.5dB*/
134 	{0x11, 0x11, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00},	/* 20, -10.0dB*/
135 	{0x10, 0x10, 0x0e, 0x08, 0x00, 0x00, 0x00, 0x00},	/* 21, -10.5dB*/
136 	{0x0f, 0x0f, 0x0d, 0x08, 0x00, 0x00, 0x00, 0x00},	/* 22, -11.0dB*/
137 	{0x0e, 0x0e, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00},	/* 23, -11.5dB*/
138 	{0x0d, 0x0d, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00},	/* 24, -12.0dB*/
139 	{0x0d, 0x0c, 0x0b, 0x06, 0x00, 0x00, 0x00, 0x00},	/* 25, -12.5dB*/
140 	{0x0c, 0x0c, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00},	/* 26, -13.0dB*/
141 	{0x0b, 0x0b, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00},	/* 27, -13.5dB*/
142 	{0x0b, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00},	/* 28, -14.0dB*/
143 	{0x0a, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00},	/* 29, -14.5dB*/
144 	{0x0a, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00},	/* 30, -15.0dB*/
145 	{0x09, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00},	/* 31, -15.5dB*/
146 	{0x09, 0x08, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00}	/* 32, -16.0dB*/
147 };
148 
149 const u32 ofdm_swing_table_new[OFDM_TABLE_SIZE] = {
150 	0x0b40002d, /* 0,  -15.0dB	*/
151 	0x0c000030, /* 1,  -14.5dB*/
152 	0x0cc00033, /* 2,  -14.0dB*/
153 	0x0d800036, /* 3,  -13.5dB*/
154 	0x0e400039, /* 4,  -13.0dB */
155 	0x0f00003c, /* 5,  -12.5dB*/
156 	0x10000040, /* 6,  -12.0dB*/
157 	0x11000044, /* 7,  -11.5dB*/
158 	0x12000048, /* 8,  -11.0dB*/
159 	0x1300004c, /* 9,  -10.5dB*/
160 	0x14400051, /* 10, -10.0dB*/
161 	0x15800056, /* 11, -9.5dB*/
162 	0x16c0005b, /* 12, -9.0dB*/
163 	0x18000060, /* 13, -8.5dB*/
164 	0x19800066, /* 14, -8.0dB*/
165 	0x1b00006c, /* 15, -7.5dB*/
166 	0x1c800072, /* 16, -7.0dB*/
167 	0x1e400079, /* 17, -6.5dB*/
168 	0x20000080, /* 18, -6.0dB*/
169 	0x22000088, /* 19, -5.5dB*/
170 	0x24000090, /* 20, -5.0dB*/
171 	0x26000098, /* 21, -4.5dB*/
172 	0x288000a2, /* 22, -4.0dB*/
173 	0x2ac000ab, /* 23, -3.5dB*/
174 	0x2d4000b5, /* 24, -3.0dB*/
175 	0x300000c0, /* 25, -2.5dB*/
176 	0x32c000cb, /* 26, -2.0dB*/
177 	0x35c000d7, /* 27, -1.5dB*/
178 	0x390000e4, /* 28, -1.0dB*/
179 	0x3c8000f2, /* 29, -0.5dB*/
180 	0x40000100, /* 30, +0dB*/
181 	0x43c0010f, /* 31, +0.5dB*/
182 	0x47c0011f, /* 32, +1.0dB*/
183 	0x4c000130, /* 33, +1.5dB*/
184 	0x50800142, /* 34, +2.0dB*/
185 	0x55400155, /* 35, +2.5dB*/
186 	0x5a400169, /* 36, +3.0dB*/
187 	0x5fc0017f, /* 37, +3.5dB*/
188 	0x65400195, /* 38, +4.0dB*/
189 	0x6b8001ae, /* 39, +4.5dB*/
190 	0x71c001c7, /* 40, +5.0dB*/
191 	0x788001e2, /* 41, +5.5dB*/
192 	0x7f8001fe  /* 42, +6.0dB*/
193 };
194 
195 const u8 cck_swing_table_ch1_ch14_88f[CCK_TABLE_SIZE_88F][16] = {
196 	{0x44, 0x42, 0x3C, 0x33, 0x28, 0x1C, 0x13, 0x0B, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-16dB*/
197 	{0x48, 0x46, 0x3F, 0x36, 0x2A, 0x1E, 0x14, 0x0B, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-15.5dB*/
198 	{0x4D, 0x4A, 0x43, 0x39, 0x2C, 0x20, 0x15, 0x0C, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-15dB*/
199 	{0x51, 0x4F, 0x47, 0x3C, 0x2F, 0x22, 0x16, 0x0D, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-14.5dB*/
200 	{0x56, 0x53, 0x4B, 0x40, 0x32, 0x24, 0x17, 0x0E, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-14dB*/
201 	{0x5B, 0x58, 0x50, 0x43, 0x35, 0x26, 0x19, 0x0E, 0x07, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-13.5dB*/
202 	{0x60, 0x5D, 0x54, 0x47, 0x38, 0x28, 0x1A, 0x0F, 0x07, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-13dB*/
203 	{0x66, 0x63, 0x59, 0x4C, 0x3B, 0x2B, 0x1C, 0x10, 0x08, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-12.5dB*/
204 	{0x6C, 0x69, 0x5F, 0x50, 0x3F, 0x2D, 0x1E, 0x11, 0x08, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-12dB*/
205 	{0x73, 0x6F, 0x64, 0x55, 0x42, 0x30, 0x1F, 0x12, 0x08, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-11.5dB*/
206 	{0x79, 0x76, 0x6A, 0x5A, 0x46, 0x33, 0x21, 0x13, 0x09, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-11dB*/
207 	{0x81, 0x7C, 0x71, 0x5F, 0x4A, 0x36, 0x23, 0x14, 0x0A, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-10.5dB*/
208 	{0x88, 0x84, 0x77, 0x65, 0x4F, 0x39, 0x25, 0x15, 0x0A, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-10dB*/
209 	{0x90, 0x8C, 0x7E, 0x6B, 0x54, 0x3C, 0x27, 0x17, 0x0B, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-9.5dB*/
210 	{0x99, 0x94, 0x86, 0x71, 0x58, 0x40, 0x2A, 0x18, 0x0B, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-9dB*/
211 	{0xA2, 0x9D, 0x8E, 0x78, 0x5E, 0x43, 0x2C, 0x19, 0x0C, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-8.5dB*/
212 	{0xAC, 0xA6, 0x96, 0x7F, 0x63, 0x47, 0x2F, 0x1B, 0x0D, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-8dB*/
213 	{0xB6, 0xB0, 0x9F, 0x87, 0x69, 0x4C, 0x32, 0x1D, 0x0D, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-7.5dB*/
214 	{0xC1, 0xBA, 0xA8, 0x8F, 0x6F, 0x50, 0x35, 0x1E, 0x0E, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-7dB*/
215 	{0xCC, 0xC5, 0xB2, 0x97, 0x76, 0x55, 0x38, 0x20, 0x0F, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-6.5dB*/
216 	{0xD8, 0xD1, 0xBD, 0xA0, 0x7D, 0x5A, 0x3B, 0x22, 0x10, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}     /*-6dB*/
217 };
218 
219 const u8 cck_swing_table_ch1_ch13_88f[CCK_TABLE_SIZE_88F][16] = {
220 	{0x44, 0x42, 0x3C, 0x33, 0x28, 0x1C, 0x13, 0x0B, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-16dB*/
221 	{0x48, 0x46, 0x3F, 0x36, 0x2A, 0x1E, 0x14, 0x0B, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-15.5dB*/
222 	{0x4D, 0x4A, 0x43, 0x39, 0x2C, 0x20, 0x15, 0x0C, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-15dB*/
223 	{0x51, 0x4F, 0x47, 0x3C, 0x2F, 0x22, 0x16, 0x0D, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-14.5dB*/
224 	{0x56, 0x53, 0x4B, 0x40, 0x32, 0x24, 0x17, 0x0E, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-14dB*/
225 	{0x5B, 0x58, 0x50, 0x43, 0x35, 0x26, 0x19, 0x0E, 0x07, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-13.5dB*/
226 	{0x60, 0x5D, 0x54, 0x47, 0x38, 0x28, 0x1A, 0x0F, 0x07, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-13dB*/
227 	{0x66, 0x63, 0x59, 0x4C, 0x3B, 0x2B, 0x1C, 0x10, 0x08, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-12.5dB*/
228 	{0x6C, 0x69, 0x5F, 0x50, 0x3F, 0x2D, 0x1E, 0x11, 0x08, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-12dB*/
229 	{0x73, 0x6F, 0x64, 0x55, 0x42, 0x30, 0x1F, 0x12, 0x08, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-11.5dB*/
230 	{0x79, 0x76, 0x6A, 0x5A, 0x46, 0x33, 0x21, 0x13, 0x09, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-11dB*/
231 	{0x81, 0x7C, 0x71, 0x5F, 0x4A, 0x36, 0x23, 0x14, 0x0A, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-10.5dB*/
232 	{0x88, 0x84, 0x77, 0x65, 0x4F, 0x39, 0x25, 0x15, 0x0A, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-10dB*/
233 	{0x90, 0x8C, 0x7E, 0x6B, 0x54, 0x3C, 0x27, 0x17, 0x0B, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-9.5dB*/
234 	{0x99, 0x94, 0x86, 0x71, 0x58, 0x40, 0x2A, 0x18, 0x0B, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-9dB*/
235 	{0xA2, 0x9D, 0x8E, 0x78, 0x5E, 0x43, 0x2C, 0x19, 0x0C, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-8.5dB*/
236 	{0xAC, 0xA6, 0x96, 0x7F, 0x63, 0x47, 0x2F, 0x1B, 0x0D, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-8dB*/
237 	{0xB6, 0xB0, 0x9F, 0x87, 0x69, 0x4C, 0x32, 0x1D, 0x0D, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-7.5dB*/
238 	{0xC1, 0xBA, 0xA8, 0x8F, 0x6F, 0x50, 0x35, 0x1E, 0x0E, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-7dB*/
239 	{0xCC, 0xC5, 0xB2, 0x97, 0x76, 0x55, 0x38, 0x20, 0x0F, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-6.5dB*/
240 	{0xD8, 0xD1, 0xBD, 0xA0, 0x7D, 0x5A, 0x3B, 0x22, 0x10, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}     /*-6dB*/
241 };
242 
243 const u8 cck_swing_table_ch14_88f[CCK_TABLE_SIZE_88F][16] = {
244 	{0x44,	 0x42, 0x3C, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-16dB*/
245 	{0x48, 0x46, 0x3F, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-15.5dB*/
246 	{0x4D, 0x4A, 0x43, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-15dB*/
247 	{0x51, 0x4F, 0x47, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},	    /*-14.5dB*/
248 	{0x56, 0x53, 0x4B, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-14dB*/
249 	{0x5B, 0x58, 0x50, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-13.5dB*/
250 	{0x60, 0x5D, 0x54, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-13dB*/
251 	{0x66, 0x63, 0x59, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-12.5dB*/
252 	{0x6C, 0x69, 0x5F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-12dB*/
253 	{0x73, 0x6F, 0x64, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-11.5dB*/
254 	{0x79, 0x76, 0x6A, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-11dB*/
255 	{0x81, 0x7C, 0x71, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-10.5dB*/
256 	{0x88, 0x84, 0x77, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-10dB*/
257 	{0x90, 0x8C, 0x7E, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-9.5dB*/
258 	{0x99, 0x94, 0x86, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-9dB*/
259 	{0xA2, 0x9D, 0x8E, 0x5E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-8.5dB*/
260 	{0xAC, 0xA6, 0x96, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-8dB*/
261 	{0xB6, 0xB0, 0x9F, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-7.5dB*/
262 	{0xC1, 0xBA, 0xA8, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-7dB*/
263 	{0xCC, 0xC5, 0xB2, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-6.5dB*/
264 	{0xD8, 0xD1, 0xBD, 0x7D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}     /*-6dB*/
265 };
266 
267 const u8 cck_swing_table_ch1_ch13_new[CCK_TABLE_SIZE][8] = {
268 	{0x09, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x01},	/*  0, -16.0dB*/
269 	{0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01},	/*   1, -15.5dB*/
270 	{0x0a, 0x09, 0x08, 0x07, 0x05, 0x03, 0x02, 0x01},	/*  2, -15.0dB*/
271 	{0x0a, 0x0a, 0x09, 0x07, 0x05, 0x03, 0x02, 0x01},	/*   3, -14.5dB*/
272 	{0x0b, 0x0a, 0x09, 0x08, 0x06, 0x04, 0x02, 0x01},	/*   4, -14.0dB*/
273 	{0x0b, 0x0b, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x01},	/*   5, -13.5dB*/
274 	{0x0c, 0x0c, 0x0a, 0x09, 0x06, 0x04, 0x02, 0x01},	/*   6, -13.0dB*/
275 	{0x0d, 0x0c, 0x0b, 0x09, 0x07, 0x04, 0x02, 0x01},	/*   7, -12.5dB*/
276 	{0x0d, 0x0d, 0x0c, 0x0a, 0x07, 0x05, 0x02, 0x01},	/*  8, -12.0dB*/
277 	{0x0e, 0x0e, 0x0c, 0x0a, 0x08, 0x05, 0x02, 0x01},	/*   9, -11.5dB*/
278 	{0x0f, 0x0f, 0x0d, 0x0b, 0x08, 0x05, 0x03, 0x01},	/*  10, -11.0dB*/
279 	{0x10, 0x10, 0x0e, 0x0b, 0x08, 0x05, 0x03, 0x01},	/*  11, -10.5dB*/
280 	{0x11, 0x11, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01},	/*  12, -10.0dB*/
281 	{0x12, 0x12, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01},	/*  13, -9.5dB*/
282 	{0x13, 0x13, 0x10, 0x0d, 0x0a, 0x06, 0x03, 0x01},	/*  14, -9.0dB */
283 	{0x14, 0x14, 0x11, 0x0e, 0x0b, 0x07, 0x03, 0x02},	/*  15, -8.5dB*/
284 	{0x16, 0x15, 0x12, 0x0f, 0x0b, 0x07, 0x04, 0x01},	/*  16, -8.0dB */
285 	{0x17, 0x16, 0x13, 0x10, 0x0c, 0x08, 0x04, 0x02},	/*  17, -7.5dB*/
286 	{0x18, 0x17, 0x15, 0x11, 0x0c, 0x08, 0x04, 0x02},	/*  18, -7.0dB */
287 	{0x1a, 0x19, 0x16, 0x12, 0x0d, 0x09, 0x04, 0x02},	/*  19, -6.5dB*/
288 	{0x1b, 0x1a, 0x17, 0x13, 0x0e, 0x09, 0x04, 0x02},	/*20, -6.0dB */
289 	{0x1d, 0x1c, 0x18, 0x14, 0x0f, 0x0a, 0x05, 0x02},	/*  21, -5.5dB*/
290 	{0x1f, 0x1e, 0x1a, 0x15, 0x10, 0x0a, 0x05, 0x02},	/* 22, -5.0dB */
291 	{0x20, 0x20, 0x1b, 0x16, 0x11, 0x08, 0x05, 0x02},	/*  23, -4.5dB*/
292 	{0x22, 0x21, 0x1d, 0x18, 0x11, 0x0b, 0x06, 0x02},	/*  24, -4.0dB */
293 	{0x24, 0x23, 0x1f, 0x19, 0x13, 0x0c, 0x06, 0x03},	/*  25, -3.5dB*/
294 	{0x26, 0x25, 0x21, 0x1b, 0x14, 0x0d, 0x06, 0x03},	/*  26, -3.0dB*/
295 	{0x28, 0x28, 0x22, 0x1c, 0x15, 0x0d, 0x07, 0x03},	/*  27, -2.5dB*/
296 	{0x2b, 0x2a, 0x25, 0x1e, 0x16, 0x0e, 0x07, 0x03},	/*  28, -2.0dB */
297 	{0x2d, 0x2d, 0x27, 0x1f, 0x18, 0x0f, 0x08, 0x03},	/*  29, -1.5dB*/
298 	{0x30, 0x2f, 0x29, 0x21, 0x19, 0x10, 0x08, 0x03},	/*  30, -1.0dB*/
299 	{0x33, 0x32, 0x2b, 0x23, 0x1a, 0x11, 0x08, 0x04},	/*  31, -0.5dB*/
300 	{0x36, 0x35, 0x2e, 0x25, 0x1c, 0x12, 0x09, 0x04}	/*  32, +0dB*/
301 };
302 
303 const u8 cck_swing_table_ch14_new[CCK_TABLE_SIZE][8] = {
304 	{0x09, 0x08, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00},	/*  0, -16.0dB*/
305 	{0x09, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00},	/* 1, -15.5dB*/
306 	{0x0a, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00},	/*  2, -15.0dB*/
307 	{0x0a, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00},	/* 3, -14.5dB*/
308 	{0x0b, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00},	/*  4, -14.0dB*/
309 	{0x0b, 0x0b, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00},	/*5, -13.5dB*/
310 	{0x0c, 0x0c, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00},	/* 6, -13.0dB*/
311 	{0x0d, 0x0c, 0x0b, 0x06, 0x00, 0x00, 0x00, 0x00},	/*  7, -12.5dB*/
312 	{0x0d, 0x0d, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00},	/* 8, -12.0dB*/
313 	{0x0e, 0x0e, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00},	/* 9, -11.5dB*/
314 	{0x0f, 0x0f, 0x0d, 0x08, 0x00, 0x00, 0x00, 0x00},	/* 10, -11.0dB*/
315 	{0x10, 0x10, 0x0e, 0x08, 0x00, 0x00, 0x00, 0x00},	/*11, -10.5dB*/
316 	{0x11, 0x11, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00},	/* 12, -10.0dB*/
317 	{0x12, 0x12, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00},	/* 13, -9.5dB*/
318 	{0x13, 0x13, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00},	/*14, -9.0dB */
319 	{0x14, 0x14, 0x11, 0x0a, 0x00, 0x00, 0x00, 0x00},	/* 15, -8.5dB*/
320 	{0x16, 0x15, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00},	/* 16, -8.0dB */
321 	{0x17, 0x16, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00},	/* 17, -7.5dB*/
322 	{0x18, 0x17, 0x15, 0x0c, 0x00, 0x00, 0x00, 0x00},	/* 18, -7.0dB */
323 	{0x1a, 0x19, 0x16, 0x0d, 0x00, 0x00, 0x00, 0x00},	/* 19, -6.5dB */
324 	{0x1b, 0x1a, 0x17, 0x0e, 0x00, 0x00, 0x00, 0x00},	/* 20, -6.0dB */
325 	{0x1d, 0x1c, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00},	/* 21, -5.5dB*/
326 	{0x1f, 0x1e, 0x1a, 0x0f, 0x00, 0x00, 0x00, 0x00},	/* 22, -5.0dB */
327 	{0x20, 0x20, 0x1b, 0x10, 0x00, 0x00, 0x00, 0x00},	/*23, -4.5dB*/
328 	{0x22, 0x21, 0x1d, 0x11, 0x00, 0x00, 0x00, 0x00},	/* 24, -4.0dB */
329 	{0x24, 0x23, 0x1f, 0x12, 0x00, 0x00, 0x00, 0x00},	/* 25, -3.5dB */
330 	{0x26, 0x25, 0x21, 0x13, 0x00, 0x00, 0x00, 0x00},	/* 26, -3.0dB */
331 	{0x28, 0x28, 0x24, 0x14, 0x00, 0x00, 0x00, 0x00},	/*27, -2.5dB*/
332 	{0x2b, 0x2a, 0x25, 0x15, 0x00, 0x00, 0x00, 0x00},	/* 28, -2.0dB */
333 	{0x2d, 0x2d, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00},	/*29, -1.5dB*/
334 	{0x30, 0x2f, 0x29, 0x18, 0x00, 0x00, 0x00, 0x00},	/* 30, -1.0dB */
335 	{0x33, 0x32, 0x2b, 0x19, 0x00, 0x00, 0x00, 0x00},	/* 31, -0.5dB */
336 	{0x36, 0x35, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00}	/* 32, +0dB	*/
337 };
338 
339 const u32 cck_swing_table_ch1_ch14_8723d[CCK_TABLE_SIZE_8723D] = {
340 	0x0CD,          /*0 ,    -20dB*/
341 	0x0D9,
342 	0x0E6,
343 	0x0F3,
344 	0x102,
345 	0x111,
346 	0x121,
347 	0x132,
348 	0x144,
349 	0x158,
350 	0x16C,
351 	0x182,
352 	0x198,
353 	0x1B1,
354 	0x1CA,
355 	0x1E5,
356 	0x202,
357 	0x221,
358 	0x241,
359 	0x263,
360 	0x287,
361 	0x2AE,
362 	0x2D6,
363 	0x301,
364 	0x32F,
365 	0x35F,
366 	0x392,
367 	0x3C9,
368 	0x402,
369 	0x43F,
370 	0x47F,
371 	0x4C3,
372 	0x50C,
373 	0x558,
374 	0x5A9,
375 	0x5FF,
376 	0x65A,
377 	0x6BA,
378 	0x720,
379 	0x78C,
380 	0x7FF,
381 };
382 
383 /* JJ ADD 20161014 */
384 const u32 cck_swing_table_ch1_ch14_8710b[CCK_TABLE_SIZE_8710B] = {
385 	0x0CD,          /*0 ,    -20dB*/
386 	0x0D9,
387 	0x0E6,
388 	0x0F3,
389 	0x102,
390 	0x111,
391 	0x121,
392 	0x132,
393 	0x144,
394 	0x158,
395 	0x16C,
396 	0x182,
397 	0x198,
398 	0x1B1,
399 	0x1CA,
400 	0x1E5,
401 	0x202,
402 	0x221,
403 	0x241,
404 	0x263,
405 	0x287,
406 	0x2AE,
407 	0x2D6,
408 	0x301,
409 	0x32F,
410 	0x35F,
411 	0x392,
412 	0x3C9,
413 	0x402,
414 	0x43F,
415 	0x47F,
416 	0x4C3,
417 	0x50C,
418 	0x558,
419 	0x5A9,
420 	0x5FF,
421 	0x65A,
422 	0x6BA,
423 	0x720,
424 	0x78C,
425 	0x7FF,
426 };
427 
428 /* Winnita ADD 20171116 PathA 0xAB4[10:0],PathB 0xAB4[21:11]*/
429 const u32 cck_swing_table_ch1_ch14_8192f[CCK_TABLE_SIZE_8192F] = {
430 	0x0CD,			 /*0 ,    -20dB*/
431 	0x0D9,
432 	0x0E6,
433 	0x0F3,
434 	0x102,
435 	0x111,
436 	0x121,
437 	0x132,
438 	0x144,
439 	0x158,
440 	0x16C,
441 	0x182,
442 	0x198,
443 	0x1B1,
444 	0x1CA,
445 	0x1E5,
446 	0x202,
447 	0x221,
448 	0x241,
449 	0x263,		/*19*/
450 	0x287,		/*20*/
451 	0x2AE,		/*21*/
452 	0x2D6,		/*22*/
453 	0x301,		/*23*/
454 	0x32F,		/*24*/
455 	0x35F,		/*25*/
456 	0x392,		/*26*/
457 	0x3C9,		/*27*/
458 	0x402,		/*28*/
459 	0x43F,		/*29*/
460 	0x47F,		/*30*/
461 	0x4C3,		/*31*/
462 	0x50C,		/*32*/
463 	0x558,		/*33*/
464 	0x5A9,		/*34*/
465 	0x5FF,		/*35*/
466 	0x65A,		/*36*/
467 	0x6BA,
468 	0x720,
469 	0x78C,
470 	0x7FF,
471 };
472 
473 /* Winnita ADD 201805 PathA 0xAB4[10:0]*/
474 const u32 cck_swing_table_ch1_ch14_8721d[CCK_TABLE_SIZE_8721D] = {
475 	0x0CD,			 /*0 ,    -20dB*/
476 	0x0D9,
477 	0x0E6,
478 	0x0F3,
479 	0x102,
480 	0x111,
481 	0x121,
482 	0x132,
483 	0x144,
484 	0x158,
485 	0x16C,
486 	0x182,
487 	0x198,
488 	0x1B1,
489 	0x1CA,
490 	0x1E5,
491 	0x202,
492 	0x221,
493 	0x241,
494 	0x263,		/*19*/
495 	0x287,		/*20*/
496 	0x2AE,		/*21*/
497 	0x2D6,		/*22*/
498 	0x301,		/*23*/
499 	0x32F,		/*24*/
500 	0x35F,		/*25*/
501 	0x392,		/*26*/
502 	0x3C9,		/*27*/
503 	0x402,		/*28*/
504 	0x43F,		/*29*/
505 	0x47F,		/*30*/
506 	0x4C3,		/*31*/
507 	0x50C,		/*32*/
508 	0x558,		/*33*/
509 	0x5A9,		/*34*/
510 	0x5FF,		/*35*/
511 	0x65A,		/*36*/
512 	0x6BA,
513 	0x720,
514 	0x78C,
515 	0x7FF,
516 };
517 
518 const u32 cck_swing_table_ch1_ch14_8710c[CCK_TABLE_SIZE_8710C] = {
519 	0x0CD,          /*0 ,    -20dB*/
520 	0x0D9,
521 	0x0E6,
522 	0x0F3,
523 	0x102,
524 	0x111,
525 	0x121,
526 	0x132,
527 	0x144,
528 	0x158,
529 	0x16C,
530 	0x182,
531 	0x198,
532 	0x1B1,
533 	0x1CA,
534 	0x1E5,
535 	0x202,
536 	0x221,
537 	0x241,
538 	0x263,
539 	0x287,
540 	0x2AE,
541 	0x2D6,
542 	0x301,
543 	0x32F,
544 	0x35F,
545 	0x392,
546 	0x3C9,
547 	0x402,
548 	0x43F,
549 	0x47F,
550 	0x4C3,
551 	0x50C,
552 	0x558,
553 	0x5A9,
554 	0x5FF,
555 	0x65A,
556 	0x6BA,
557 	0x720,
558 	0x78C,
559 	0x7FF,
560 };
561 
562 const u32 cck_swing_table_03db_ch1_ch14_8710c[CCK_03DB_TABLE_SIZE_8710C] = {
563 	0x143,		/*0 ,    -4dB*/
564 	0x14C,		/*1 ,    -3.75dB*/
565 	0x156,		/*2 ,    -3.5dB*/
566 	0x160,
567 	0x16A,
568 	0x175,
569 	0x17F,
570 	0x18B,
571 	0x196,
572 	0x1A2,
573 	0x1AE,
574 	0x1BB,
575 	0x1C8,
576 	0x1D5,
577 	0x1E3,
578 	0x1F1,
579 	0x200,
580 	0x20F,
581 	0x21E,
582 	0x22F,
583 	0x23F,
584 	0x250,
585 	0x261,
586 	0x273,
587 	0x285,
588 	0x298,
589 	0x2AB,
590 	0x2BF,
591 	0x2D6,
592 	0x2E9,
593 	0x2FF,
594 	0x315,
595 	0x32C,
596 	0x344,
597 	0x35C,
598 	0x375,
599 	0x390,
600 	0x3AA,
601 	0x3C5,
602 	0x3E1,
603 	0x402,		/*40 ,    +6dB	default*/
604 	0x41C,
605 	0x43B,
606 	0x45A,
607 	0x47C,
608 	0x49C,
609 	0x4BF,
610 	0x4E2,
611 	0x510,
612 	0x52C,
613 	0x553,
614 	0x57B,
615 	0x5A5,
616 	0x5CE,
617 	0x5F9,
618 	0x626,
619 	0x655,
620 	0x683,
621 	0x6B5,
622 	0x6E6,
623 	0x71E,
624 	0x74E,
625 	0x786,
626 	0x7BD,
627 	0x7F9,
628 	0x832,
629 	0x871,
630 	0x8AF,
631 	0x8F2,
632 	0x932,
633 	0x977,
634 	0x9BE,
635 	0xA0E,
636 	0xA52,
637 	0xAA1,
638 	0xAEE,
639 	0xB54,
640 	0xB95,
641 	0xBEB,
642 	0xC43,
643 	0xCA3		/*80 ,    +16dB*/
644 };
645 
646 const u32 ofdm_swing_table_03DB_8710c[OFDM_03DB_TABLE_SIZE_8710C] = {
647 	0xE4,		/*0 ,    -7dB*/
648 	0xEB,		/*1 ,    -6.75dB*/
649 	0xF2,		/*2 ,    -6.5dB*/
650 	0xF9,
651 	0x100,
652 	0x108,
653 	0x110,
654 	0x118,
655 	0x11F,
656 	0x128,
657 	0x131,
658 	0x13A,
659 	0x143,
660 	0x14C,
661 	0x156,
662 	0x160,
663 	0x16A,
664 	0x175,
665 	0x180,
666 	0x18B,
667 	0x196,
668 	0x1A2,
669 	0x1AE,
670 	0x1BB,
671 	0x1C8,
672 	0x1D5,
673 	0x1E3,
674 	0x1F1,
675 	0x200,
676 	0x20F,
677 	0x21F,
678 	0x22F,
679 	0x23F,
680 	0x250,
681 	0x261,
682 	0x273,
683 	0x286,
684 	0x298,
685 	0x2AB,
686 	0x2BF,
687 	0x2D6,		/*40 ,    +3dB default*/
688 	0x2E9,
689 	0x2FF,
690 	0x315,
691 	0x32C,
692 	0x344,
693 	0x35C,
694 	0x375,
695 	0x390,
696 	0x3AA,
697 	0x3C5,
698 	0x3E1,
699 	0x3FF,
700 	0x41C,
701 	0x43B,
702 	0x45A,
703 	0x47B,
704 	0x49C,
705 	0x4BF,
706 	0x4E2,
707 	0x507,
708 	0x52C,
709 	0x553,
710 	0x57B,
711 	0x5A4,
712 	0x5CE,
713 	0x5F9,
714 	0x626,
715 	0x654,
716 	0x683,
717 	0x6B4,
718 	0x6E6,
719 	0x71B,
720 	0x74E,
721 	0x785,
722 	0x7BD,
723 	0x7F7,
724 	0x832,
725 	0x870,
726 	0x8AF,
727 	0x8F0		/*80 ,    +13dB*/
728 };
729 
730 
731 
732 const u32 tx_scaling_table_jaguar[TXSCALE_TABLE_SIZE] = {
733 	0x081, /* 0,  -12.0dB*/
734 	0x088, /* 1,  -11.5dB*/
735 	0x090, /* 2,  -11.0dB*/
736 	0x099, /* 3,  -10.5dB*/
737 	0x0A2, /* 4,  -10.0dB*/
738 	0x0AC, /* 5,  -9.5dB*/
739 	0x0B6, /* 6,  -9.0dB*/
740 	0x0C0, /*7,  -8.5dB*/
741 	0x0CC, /* 8,  -8.0dB*/
742 	0x0D8, /* 9,  -7.5dB*/
743 	0x0E5, /* 10, -7.0dB*/
744 	0x0F2, /* 11, -6.5dB*/
745 	0x101, /* 12, -6.0dB*/
746 	0x110, /* 13, -5.5dB*/
747 	0x120, /* 14, -5.0dB*/
748 	0x131, /* 15, -4.5dB*/
749 	0x143, /* 16, -4.0dB*/
750 	0x156, /* 17, -3.5dB*/
751 	0x16A, /* 18, -3.0dB*/
752 	0x180, /* 19, -2.5dB*/
753 	0x197, /* 20, -2.0dB*/
754 	0x1AF, /* 21, -1.5dB*/
755 	0x1C8, /* 22, -1.0dB*/
756 	0x1E3, /* 23, -0.5dB*/
757 	0x200, /* 24, +0  dB*/
758 	0x21E, /* 25, +0.5dB*/
759 	0x23E, /* 26, +1.0dB*/
760 	0x261, /* 27, +1.5dB*/
761 	0x285,/* 28, +2.0dB*/
762 	0x2AB, /* 29, +2.5dB*/
763 	0x2D3, /*30, +3.0dB*/
764 	0x2FE, /* 31, +3.5dB*/
765 	0x32B, /* 32, +4.0dB*/
766 	0x35C, /* 33, +4.5dB*/
767 	0x38E, /* 34, +5.0dB*/
768 	0x3C4, /* 35, +5.5dB*/
769 	0x3FE  /* 36, +6.0dB	*/
770 };
771 
772 void
odm_txpowertracking_init(void * dm_void)773 odm_txpowertracking_init(
774 	void	*dm_void
775 )
776 {
777 	struct dm_struct	*dm = (struct dm_struct *)dm_void;
778 
779 	odm_txpowertracking_thermal_meter_init(dm);
780 }
781 
782 u8
get_swing_index(void * dm_void)783 get_swing_index(
784 	void	*dm_void
785 )
786 {
787 	struct dm_struct *dm = (struct dm_struct *)dm_void;
788 
789 	u8 i = 0;
790 	u32 bb_swing;
791 	u32 swing_table_size;
792 	u32 *swing_table;
793 	u32 table_value;
794 
795 #if (RTL8710C_SUPPORT == 1)
796 	if (dm->support_ic_type == ODM_RTL8710C) {
797 		bb_swing = odm_get_bb_reg(dm, R_0xcc8, 0x000007ff);
798 
799 		for (i = 0; i < OFDM_03DB_TABLE_SIZE_8710C; i++) {
800 			if (bb_swing == ofdm_swing_table_03DB_8710c[i])
801 				break;
802 		}
803 	}
804 #elif (RTL8195B_SUPPORT == 1)
805 	if (dm->support_ic_type == ODM_RTL8195B) {
806 		bb_swing = odm_get_bb_reg(dm, R_0xc1c, 0xFFE00000);
807 		swing_table = (u32*)tx_scaling_table_jaguar;
808 		swing_table_size = TXSCALE_TABLE_SIZE;
809 
810 		for (i = 0; i < swing_table_size; i++) {
811 			table_value = swing_table[i];
812 
813 			table_value = table_value;
814 			if (bb_swing == table_value)
815 				break;
816 		}
817 	}
818 #endif
819 	return i;
820 }
821 
822 u8
get_cck_swing_index(void * dm_void)823 get_cck_swing_index(
824 	void		*dm_void
825 )
826 {
827 	struct dm_struct *dm = (struct dm_struct *)dm_void;
828 
829 	u8 i = 0;
830 	u32 bb_cck_swing;
831 
832 #if (RTL8188E_SUPPORT == 1 || RTL8723B_SUPPORT == 1 || RTL8192E_SUPPORT == 1)
833 	if (dm->support_ic_type == ODM_RTL8188E || dm->support_ic_type == ODM_RTL8723B ||
834 	    dm->support_ic_type == ODM_RTL8192E) {
835 		bb_cck_swing = odm_read_1byte(dm, 0xa22);
836 
837 		for (i = 0; i < CCK_TABLE_SIZE; i++) {
838 			if (bb_cck_swing == cck_swing_table_ch1_ch13_new[i][0])
839 				break;
840 		}
841 	}
842 #elif (RTL8703B_SUPPORT == 1)
843 	if (dm->support_ic_type == ODM_RTL8703B) {
844 		bb_cck_swing = odm_read_1byte(dm, 0xa22);
845 
846 		for (i = 0; i < CCK_TABLE_SIZE_88F; i++) {
847 			if (bb_cck_swing == cck_swing_table_ch1_ch14_88f[i][0])
848 				break;
849 		}
850 	}
851 #elif (RTL8710C_SUPPORT == 1)
852 	if (dm->support_ic_type == ODM_RTL8710C) {
853 		bb_cck_swing = odm_get_bb_reg(dm, R_0xab4, 0x7ff);
854 
855 		RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
856 		       "bb_cck_swing = 0x%x\n", bb_cck_swing);
857 
858 		for (i = 0; i < CCK_03DB_TABLE_SIZE_8710C; i++) {
859 			if (bb_cck_swing == cck_swing_table_03db_ch1_ch14_8710c[i])
860 				break;
861 		}
862 	}
863 #endif
864 
865 	return i;
866 }
867 
868 s8
get_txagc_default_index(void * dm_void)869 get_txagc_default_index(
870 	void *dm_void
871 )
872 {
873 	struct dm_struct *dm = (struct dm_struct *)dm_void;
874 	s8 tmp;
875 
876 	if (dm->support_ic_type == ODM_RTL8814B) {
877 		tmp = (s8)(odm_get_bb_reg(dm, R_0x18a0, 0x7f) & 0xff);
878 		if (tmp & BIT(6))
879 			tmp = tmp | 0x80;
880 		return tmp;
881 	} else
882 		return 0;
883 }
884 
885 void
odm_txpowertracking_thermal_meter_init(void * dm_void)886 odm_txpowertracking_thermal_meter_init(
887 	void	*dm_void
888 )
889 {
890 	struct dm_struct	*dm = (struct dm_struct *)dm_void;
891 	u8 default_swing_index;
892 	u8 p = 0;
893 	struct dm_rf_calibration_struct	*cali_info = &dm->rf_calibrate_info;
894 	struct _hal_rf_ *rf = &dm->rf_table;
895 
896 	if (!(*dm->mp_mode))
897 		cali_info->txpowertrack_control = true;
898 	else
899 		cali_info->txpowertrack_control = false;
900 
901 	RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "dm txpowertrack_control = %d\n", cali_info->txpowertrack_control);
902 
903 	/* dm->rf_calibrate_info.txpowertrack_control = true; */
904 	cali_info->thermal_value = rf->eeprom_thermal;
905 	cali_info->thermal_value_iqk = rf->eeprom_thermal;
906 	cali_info->thermal_value_lck = rf->eeprom_thermal;
907 
908 	if (!cali_info->default_bb_swing_index_flag) {
909 		if (dm->support_ic_type == ODM_RTL8195B) {
910 			default_swing_index = get_swing_index(dm);
911 			cali_info->default_ofdm_index = (default_swing_index >= TXSCALE_TABLE_SIZE) ? 24 : default_swing_index;
912 			cali_info->default_cck_index = 24;
913 		} else if (dm->support_ic_type == ODM_RTL8721D) {
914 			cali_info->default_ofdm_index = 28;	/*OFDM: -1dB*/
915 			cali_info->default_cck_index = 28;	/*CCK: -6dB*/
916 		} else if (dm->support_ic_type == ODM_RTL8710C) {
917 			cali_info->default_ofdm_index = get_swing_index(dm);
918 			cali_info->default_cck_index = get_cck_swing_index(dm);
919 		}
920 		cali_info->default_bb_swing_index_flag = true;
921 	}
922 
923 	cali_info->bb_swing_idx_cck_base = cali_info->default_cck_index;
924 	cali_info->CCK_index = cali_info->default_cck_index;
925 
926 	for (p = RF_PATH_A; p < MAX_RF_PATH; ++p) {
927 		cali_info->bb_swing_idx_ofdm_base[p] = cali_info->default_ofdm_index;
928 		cali_info->OFDM_index[p] = cali_info->default_ofdm_index;
929 		cali_info->delta_power_index[p] = 0;
930 		cali_info->delta_power_index_last[p] = 0;
931 		cali_info->power_index_offset[p] = 0;
932 	}
933 	cali_info->modify_tx_agc_value_ofdm = 0;
934 	cali_info->modify_tx_agc_value_cck = 0;
935 	cali_info->tm_trigger = 0;
936 }
937 
938 void
odm_txpowertracking_check(void * dm_void)939 odm_txpowertracking_check(
940 	void	*dm_void
941 )
942 {
943 	struct dm_struct	*dm = (struct dm_struct *)dm_void;
944 
945 	odm_txpowertracking_check_iot(dm);
946 }
947 
948 void
odm_txpowertracking_check_iot(void * dm_void)949 odm_txpowertracking_check_iot(
950 	void	*dm_void
951 )
952 {
953 	struct dm_struct	*dm = (struct dm_struct *)dm_void;
954 	struct _hal_rf_		*rf = &dm->rf_table;
955 
956 	if (!(rf->rf_supportability & HAL_RF_TX_PWR_TRACK))
957 		return;
958 
959 	if (!dm->rf_calibrate_info.tm_trigger) {
960 		if (dm->support_ic_type == ODM_RTL8195B)
961 			odm_set_rf_reg(dm, RF_PATH_A, RF_T_METER_NEW, (BIT(17) | BIT(16)), 0x03);
962 		else if (dm->support_ic_type == ODM_RTL8721D ||
963 			dm->support_ic_type == ODM_RTL8710C)
964 			odm_set_rf_reg(dm, RF_PATH_A, RF_T_METER_NEW,
965 				       (BIT(12) | BIT(11)), 0x03);
966 
967 		dm->rf_calibrate_info.tm_trigger = 1;
968 		return;
969 	}
970 	odm_txpowertracking_callback_thermal_meter(dm);
971 	dm->rf_calibrate_info.tm_trigger = 0;
972 }
973 
974 void
odm_txpowertracking_check_mp(void * dm_void)975 odm_txpowertracking_check_mp(
976 	void	*dm_void
977 )
978 {
979 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
980 	struct dm_struct		*dm = (struct dm_struct *)dm_void;
981 	void	*adapter = dm->adapter;
982 
983 	if (odm_check_power_status(adapter) == false) {
984 		RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD, ("check_pow_status, return false\n"));
985 		return;
986 	}
987 
988 	odm_txpowertracking_thermal_meter_check(adapter);
989 #endif
990 }
991 
992 void
odm_txpowertracking_check_ap(void * dm_void)993 odm_txpowertracking_check_ap(
994 	void	*dm_void
995 )
996 {
997 #if (DM_ODM_SUPPORT_TYPE == ODM_AP)
998 	struct dm_struct		*dm = (struct dm_struct *)dm_void;
999 	struct rtl8192cd_priv	*priv		= dm->priv;
1000 
1001 	return;
1002 
1003 #endif
1004 }
1005