net: wireless: rockchip_wlan: add rtl8723cs support
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8723cs / hal / phydm / phydm_powertracking_ce.c
1 /******************************************************************************
2  *
3  * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
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  * You should have received a copy of the GNU General Public License along with
15  * this program; if not, write to the Free Software Foundation, Inc.,
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
17  *
18  *
19  ******************************************************************************/
20
21 /*============================================================  */
22 /* include files                                                                                                */
23 /*============================================================  */
24 #include "mp_precomp.h"
25 #include "phydm_precomp.h"
26
27 /* ************************************************************
28  * Global var
29  * ************************************************************ */
30
31 u32     ofdm_swing_table[OFDM_TABLE_SIZE] = {
32         0x7f8001fe,     /* 0, +6.0dB */
33         0x788001e2,     /* 1, +5.5dB */
34         0x71c001c7,     /* 2, +5.0dB*/
35         0x6b8001ae,     /* 3, +4.5dB*/
36         0x65400195,     /* 4, +4.0dB*/
37         0x5fc0017f,     /* 5, +3.5dB*/
38         0x5a400169,     /* 6, +3.0dB*/
39         0x55400155,     /* 7, +2.5dB*/
40         0x50800142,     /* 8, +2.0dB*/
41         0x4c000130,     /* 9, +1.5dB*/
42         0x47c0011f,     /* 10, +1.0dB*/
43         0x43c0010f,     /* 11, +0.5dB*/
44         0x40000100,     /* 12, +0dB*/
45         0x3c8000f2,     /* 13, -0.5dB*/
46         0x390000e4,     /* 14, -1.0dB*/
47         0x35c000d7,     /* 15, -1.5dB*/
48         0x32c000cb,     /* 16, -2.0dB*/
49         0x300000c0,     /* 17, -2.5dB*/
50         0x2d4000b5,     /* 18, -3.0dB*/
51         0x2ac000ab,     /* 19, -3.5dB*/
52         0x288000a2,     /* 20, -4.0dB*/
53         0x26000098,     /* 21, -4.5dB*/
54         0x24000090,     /* 22, -5.0dB*/
55         0x22000088,     /* 23, -5.5dB*/
56         0x20000080,     /* 24, -6.0dB*/
57         0x1e400079,     /* 25, -6.5dB*/
58         0x1c800072,     /* 26, -7.0dB*/
59         0x1b00006c,     /* 27. -7.5dB*/
60         0x19800066,     /* 28, -8.0dB*/
61         0x18000060,     /* 29, -8.5dB*/
62         0x16c0005b,     /* 30, -9.0dB*/
63         0x15800056,     /* 31, -9.5dB*/
64         0x14400051,     /* 32, -10.0dB*/
65         0x1300004c,     /* 33, -10.5dB*/
66         0x12000048,     /* 34, -11.0dB*/
67         0x11000044,     /* 35, -11.5dB*/
68         0x10000040,     /* 36, -12.0dB*/
69 };
70
71 u8      cck_swing_table_ch1_ch13[CCK_TABLE_SIZE][8] = {
72         {0x36, 0x35, 0x2e, 0x25, 0x1c, 0x12, 0x09, 0x04},       /* 0, +0dB */
73         {0x33, 0x32, 0x2b, 0x23, 0x1a, 0x11, 0x08, 0x04},       /* 1, -0.5dB */
74         {0x30, 0x2f, 0x29, 0x21, 0x19, 0x10, 0x08, 0x03},       /* 2, -1.0dB*/
75         {0x2d, 0x2d, 0x27, 0x1f, 0x18, 0x0f, 0x08, 0x03},       /* 3, -1.5dB*/
76         {0x2b, 0x2a, 0x25, 0x1e, 0x16, 0x0e, 0x07, 0x03},       /* 4, -2.0dB */
77         {0x28, 0x28, 0x22, 0x1c, 0x15, 0x0d, 0x07, 0x03},       /* 5, -2.5dB*/
78         {0x26, 0x25, 0x21, 0x1b, 0x14, 0x0d, 0x06, 0x03},       /* 6, -3.0dB*/
79         {0x24, 0x23, 0x1f, 0x19, 0x13, 0x0c, 0x06, 0x03},       /* 7, -3.5dB*/
80         {0x22, 0x21, 0x1d, 0x18, 0x11, 0x0b, 0x06, 0x02},       /* 8, -4.0dB */
81         {0x20, 0x20, 0x1b, 0x16, 0x11, 0x08, 0x05, 0x02},       /* 9, -4.5dB*/
82         {0x1f, 0x1e, 0x1a, 0x15, 0x10, 0x0a, 0x05, 0x02},       /* 10, -5.0dB */
83         {0x1d, 0x1c, 0x18, 0x14, 0x0f, 0x0a, 0x05, 0x02},       /* 11, -5.5dB*/
84         {0x1b, 0x1a, 0x17, 0x13, 0x0e, 0x09, 0x04, 0x02},       /* 12, -6.0dB <== default */
85         {0x1a, 0x19, 0x16, 0x12, 0x0d, 0x09, 0x04, 0x02},       /* 13, -6.5dB*/
86         {0x18, 0x17, 0x15, 0x11, 0x0c, 0x08, 0x04, 0x02},       /* 14, -7.0dB */
87         {0x17, 0x16, 0x13, 0x10, 0x0c, 0x08, 0x04, 0x02},       /* 15, -7.5dB*/
88         {0x16, 0x15, 0x12, 0x0f, 0x0b, 0x07, 0x04, 0x01},       /* 16, -8.0dB */
89         {0x14, 0x14, 0x11, 0x0e, 0x0b, 0x07, 0x03, 0x02},       /* 17, -8.5dB*/
90         {0x13, 0x13, 0x10, 0x0d, 0x0a, 0x06, 0x03, 0x01},       /* 18, -9.0dB */
91         {0x12, 0x12, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01},       /* 19, -9.5dB*/
92         {0x11, 0x11, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01},       /* 20, -10.0dB*/
93         {0x10, 0x10, 0x0e, 0x0b, 0x08, 0x05, 0x03, 0x01},       /* 21, -10.5dB*/
94         {0x0f, 0x0f, 0x0d, 0x0b, 0x08, 0x05, 0x03, 0x01},       /* 22, -11.0dB*/
95         {0x0e, 0x0e, 0x0c, 0x0a, 0x08, 0x05, 0x02, 0x01},       /* 23, -11.5dB*/
96         {0x0d, 0x0d, 0x0c, 0x0a, 0x07, 0x05, 0x02, 0x01},       /* 24, -12.0dB*/
97         {0x0d, 0x0c, 0x0b, 0x09, 0x07, 0x04, 0x02, 0x01},       /* 25, -12.5dB*/
98         {0x0c, 0x0c, 0x0a, 0x09, 0x06, 0x04, 0x02, 0x01},       /* 26, -13.0dB*/
99         {0x0b, 0x0b, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x01},       /* 27, -13.5dB*/
100         {0x0b, 0x0a, 0x09, 0x08, 0x06, 0x04, 0x02, 0x01},       /* 28, -14.0dB*/
101         {0x0a, 0x0a, 0x09, 0x07, 0x05, 0x03, 0x02, 0x01},       /* 29, -14.5dB*/
102         {0x0a, 0x09, 0x08, 0x07, 0x05, 0x03, 0x02, 0x01},       /* 30, -15.0dB*/
103         {0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01},       /* 31, -15.5dB*/
104         {0x09, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x01}        /* 32, -16.0dB*/
105 };
106
107
108 u8      cck_swing_table_ch14[CCK_TABLE_SIZE][8] = {
109         {0x36, 0x35, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00},       /* 0, +0dB */
110         {0x33, 0x32, 0x2b, 0x19, 0x00, 0x00, 0x00, 0x00},       /* 1, -0.5dB */
111         {0x30, 0x2f, 0x29, 0x18, 0x00, 0x00, 0x00, 0x00},       /* 2, -1.0dB */
112         {0x2d, 0x2d, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00},       /* 3, -1.5dB*/
113         {0x2b, 0x2a, 0x25, 0x15, 0x00, 0x00, 0x00, 0x00},       /* 4, -2.0dB */
114         {0x28, 0x28, 0x24, 0x14, 0x00, 0x00, 0x00, 0x00},       /* 5, -2.5dB*/
115         {0x26, 0x25, 0x21, 0x13, 0x00, 0x00, 0x00, 0x00},       /* 6, -3.0dB */
116         {0x24, 0x23, 0x1f, 0x12, 0x00, 0x00, 0x00, 0x00},       /* 7, -3.5dB */
117         {0x22, 0x21, 0x1d, 0x11, 0x00, 0x00, 0x00, 0x00},       /* 8, -4.0dB */
118         {0x20, 0x20, 0x1b, 0x10, 0x00, 0x00, 0x00, 0x00},       /* 9, -4.5dB*/
119         {0x1f, 0x1e, 0x1a, 0x0f, 0x00, 0x00, 0x00, 0x00},       /* 10, -5.0dB */
120         {0x1d, 0x1c, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00},       /* 11, -5.5dB*/
121         {0x1b, 0x1a, 0x17, 0x0e, 0x00, 0x00, 0x00, 0x00},       /* 12, -6.0dB  <== default*/
122         {0x1a, 0x19, 0x16, 0x0d, 0x00, 0x00, 0x00, 0x00},       /* 13, -6.5dB */
123         {0x18, 0x17, 0x15, 0x0c, 0x00, 0x00, 0x00, 0x00},       /* 14, -7.0dB */
124         {0x17, 0x16, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00},       /* 15, -7.5dB*/
125         {0x16, 0x15, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00},       /* 16, -8.0dB */
126         {0x14, 0x14, 0x11, 0x0a, 0x00, 0x00, 0x00, 0x00},       /* 17, -8.5dB*/
127         {0x13, 0x13, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00},       /* 18, -9.0dB */
128         {0x12, 0x12, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00},       /* 19, -9.5dB*/
129         {0x11, 0x11, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00},       /* 20, -10.0dB*/
130         {0x10, 0x10, 0x0e, 0x08, 0x00, 0x00, 0x00, 0x00},       /* 21, -10.5dB*/
131         {0x0f, 0x0f, 0x0d, 0x08, 0x00, 0x00, 0x00, 0x00},       /* 22, -11.0dB*/
132         {0x0e, 0x0e, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00},       /* 23, -11.5dB*/
133         {0x0d, 0x0d, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00},       /* 24, -12.0dB*/
134         {0x0d, 0x0c, 0x0b, 0x06, 0x00, 0x00, 0x00, 0x00},       /* 25, -12.5dB*/
135         {0x0c, 0x0c, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00},       /* 26, -13.0dB*/
136         {0x0b, 0x0b, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00},       /* 27, -13.5dB*/
137         {0x0b, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00},       /* 28, -14.0dB*/
138         {0x0a, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00},       /* 29, -14.5dB*/
139         {0x0a, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00},       /* 30, -15.0dB*/
140         {0x09, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00},       /* 31, -15.5dB*/
141         {0x09, 0x08, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00}        /* 32, -16.0dB*/
142 };
143
144
145 u32 ofdm_swing_table_new[OFDM_TABLE_SIZE] = {
146         0x0b40002d, /* 0,  -15.0dB      */
147         0x0c000030, /* 1,  -14.5dB*/
148         0x0cc00033, /* 2,  -14.0dB*/
149         0x0d800036, /* 3,  -13.5dB*/
150         0x0e400039, /* 4,  -13.0dB */
151         0x0f00003c, /* 5,  -12.5dB*/
152         0x10000040, /* 6,  -12.0dB*/
153         0x11000044, /* 7,  -11.5dB*/
154         0x12000048, /* 8,  -11.0dB*/
155         0x1300004c, /* 9,  -10.5dB*/
156         0x14400051, /* 10, -10.0dB*/
157         0x15800056, /* 11, -9.5dB*/
158         0x16c0005b, /* 12, -9.0dB*/
159         0x18000060, /* 13, -8.5dB*/
160         0x19800066, /* 14, -8.0dB*/
161         0x1b00006c, /* 15, -7.5dB*/
162         0x1c800072, /* 16, -7.0dB*/
163         0x1e400079, /* 17, -6.5dB*/
164         0x20000080, /* 18, -6.0dB*/
165         0x22000088, /* 19, -5.5dB*/
166         0x24000090, /* 20, -5.0dB*/
167         0x26000098, /* 21, -4.5dB*/
168         0x288000a2, /* 22, -4.0dB*/
169         0x2ac000ab, /* 23, -3.5dB*/
170         0x2d4000b5, /* 24, -3.0dB*/
171         0x300000c0, /* 25, -2.5dB*/
172         0x32c000cb, /* 26, -2.0dB*/
173         0x35c000d7, /* 27, -1.5dB*/
174         0x390000e4, /* 28, -1.0dB*/
175         0x3c8000f2, /* 29, -0.5dB*/
176         0x40000100, /* 30, +0dB*/
177         0x43c0010f, /* 31, +0.5dB*/
178         0x47c0011f, /* 32, +1.0dB*/
179         0x4c000130, /* 33, +1.5dB*/
180         0x50800142, /* 34, +2.0dB*/
181         0x55400155, /* 35, +2.5dB*/
182         0x5a400169, /* 36, +3.0dB*/
183         0x5fc0017f, /* 37, +3.5dB*/
184         0x65400195, /* 38, +4.0dB*/
185         0x6b8001ae, /* 39, +4.5dB*/
186         0x71c001c7, /* 40, +5.0dB*/
187         0x788001e2, /* 41, +5.5dB*/
188         0x7f8001fe  /* 42, +6.0dB*/
189 };
190
191
192 u8 cck_swing_table_ch1_ch14_88f[CCK_TABLE_SIZE_88F][16] = {
193         {0x44, 0x42, 0x3C, 0x33, 0x28, 0x1C, 0x13, 0x0B, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-16dB*/
194         {0x48, 0x46, 0x3F, 0x36, 0x2A, 0x1E, 0x14, 0x0B, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-15.5dB*/
195         {0x4D, 0x4A, 0x43, 0x39, 0x2C, 0x20, 0x15, 0x0C, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-15dB*/
196         {0x51, 0x4F, 0x47, 0x3C, 0x2F, 0x22, 0x16, 0x0D, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-14.5dB*/
197         {0x56, 0x53, 0x4B, 0x40, 0x32, 0x24, 0x17, 0x0E, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-14dB*/
198         {0x5B, 0x58, 0x50, 0x43, 0x35, 0x26, 0x19, 0x0E, 0x07, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-13.5dB*/
199         {0x60, 0x5D, 0x54, 0x47, 0x38, 0x28, 0x1A, 0x0F, 0x07, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-13dB*/
200         {0x66, 0x63, 0x59, 0x4C, 0x3B, 0x2B, 0x1C, 0x10, 0x08, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-12.5dB*/
201         {0x6C, 0x69, 0x5F, 0x50, 0x3F, 0x2D, 0x1E, 0x11, 0x08, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-12dB*/
202         {0x73, 0x6F, 0x64, 0x55, 0x42, 0x30, 0x1F, 0x12, 0x08, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-11.5dB*/
203         {0x79, 0x76, 0x6A, 0x5A, 0x46, 0x33, 0x21, 0x13, 0x09, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-11dB*/
204         {0x81, 0x7C, 0x71, 0x5F, 0x4A, 0x36, 0x23, 0x14, 0x0A, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-10.5dB*/
205         {0x88, 0x84, 0x77, 0x65, 0x4F, 0x39, 0x25, 0x15, 0x0A, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-10dB*/
206         {0x90, 0x8C, 0x7E, 0x6B, 0x54, 0x3C, 0x27, 0x17, 0x0B, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-9.5dB*/
207         {0x99, 0x94, 0x86, 0x71, 0x58, 0x40, 0x2A, 0x18, 0x0B, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-9dB*/
208         {0xA2, 0x9D, 0x8E, 0x78, 0x5E, 0x43, 0x2C, 0x19, 0x0C, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-8.5dB*/
209         {0xAC, 0xA6, 0x96, 0x7F, 0x63, 0x47, 0x2F, 0x1B, 0x0D, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-8dB*/
210         {0xB6, 0xB0, 0x9F, 0x87, 0x69, 0x4C, 0x32, 0x1D, 0x0D, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-7.5dB*/
211         {0xC1, 0xBA, 0xA8, 0x8F, 0x6F, 0x50, 0x35, 0x1E, 0x0E, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-7dB*/
212         {0xCC, 0xC5, 0xB2, 0x97, 0x76, 0x55, 0x38, 0x20, 0x0F, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-6.5dB*/
213         {0xD8, 0xD1, 0xBD, 0xA0, 0x7D, 0x5A, 0x3B, 0x22, 0x10, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}     /*-6dB*/
214 };
215
216
217 u8 cck_swing_table_ch1_ch13_88f[CCK_TABLE_SIZE_88F][16] = {
218         {0x44, 0x42, 0x3C, 0x33, 0x28, 0x1C, 0x13, 0x0B, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-16dB*/
219         {0x48, 0x46, 0x3F, 0x36, 0x2A, 0x1E, 0x14, 0x0B, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-15.5dB*/
220         {0x4D, 0x4A, 0x43, 0x39, 0x2C, 0x20, 0x15, 0x0C, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-15dB*/
221         {0x51, 0x4F, 0x47, 0x3C, 0x2F, 0x22, 0x16, 0x0D, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-14.5dB*/
222         {0x56, 0x53, 0x4B, 0x40, 0x32, 0x24, 0x17, 0x0E, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-14dB*/
223         {0x5B, 0x58, 0x50, 0x43, 0x35, 0x26, 0x19, 0x0E, 0x07, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-13.5dB*/
224         {0x60, 0x5D, 0x54, 0x47, 0x38, 0x28, 0x1A, 0x0F, 0x07, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-13dB*/
225         {0x66, 0x63, 0x59, 0x4C, 0x3B, 0x2B, 0x1C, 0x10, 0x08, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-12.5dB*/
226         {0x6C, 0x69, 0x5F, 0x50, 0x3F, 0x2D, 0x1E, 0x11, 0x08, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-12dB*/
227         {0x73, 0x6F, 0x64, 0x55, 0x42, 0x30, 0x1F, 0x12, 0x08, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-11.5dB*/
228         {0x79, 0x76, 0x6A, 0x5A, 0x46, 0x33, 0x21, 0x13, 0x09, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-11dB*/
229         {0x81, 0x7C, 0x71, 0x5F, 0x4A, 0x36, 0x23, 0x14, 0x0A, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-10.5dB*/
230         {0x88, 0x84, 0x77, 0x65, 0x4F, 0x39, 0x25, 0x15, 0x0A, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-10dB*/
231         {0x90, 0x8C, 0x7E, 0x6B, 0x54, 0x3C, 0x27, 0x17, 0x0B, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-9.5dB*/
232         {0x99, 0x94, 0x86, 0x71, 0x58, 0x40, 0x2A, 0x18, 0x0B, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-9dB*/
233         {0xA2, 0x9D, 0x8E, 0x78, 0x5E, 0x43, 0x2C, 0x19, 0x0C, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-8.5dB*/
234         {0xAC, 0xA6, 0x96, 0x7F, 0x63, 0x47, 0x2F, 0x1B, 0x0D, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-8dB*/
235         {0xB6, 0xB0, 0x9F, 0x87, 0x69, 0x4C, 0x32, 0x1D, 0x0D, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-7.5dB*/
236         {0xC1, 0xBA, 0xA8, 0x8F, 0x6F, 0x50, 0x35, 0x1E, 0x0E, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-7dB*/
237         {0xCC, 0xC5, 0xB2, 0x97, 0x76, 0x55, 0x38, 0x20, 0x0F, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-6.5dB*/
238         {0xD8, 0xD1, 0xBD, 0xA0, 0x7D, 0x5A, 0x3B, 0x22, 0x10, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}     /*-6dB*/
239 };
240
241
242 u8 cck_swing_table_ch14_88f[CCK_TABLE_SIZE_88F][16] = {
243         {0x44,   0x42, 0x3C, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-16dB*/
244         {0x48, 0x46, 0x3F, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-15.5dB*/
245         {0x4D, 0x4A, 0x43, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-15dB*/
246         {0x51, 0x4F, 0x47, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},           /*-14.5dB*/
247         {0x56, 0x53, 0x4B, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-14dB*/
248         {0x5B, 0x58, 0x50, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-13.5dB*/
249         {0x60, 0x5D, 0x54, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-13dB*/
250         {0x66, 0x63, 0x59, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-12.5dB*/
251         {0x6C, 0x69, 0x5F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-12dB*/
252         {0x73, 0x6F, 0x64, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-11.5dB*/
253         {0x79, 0x76, 0x6A, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-11dB*/
254         {0x81, 0x7C, 0x71, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-10.5dB*/
255         {0x88, 0x84, 0x77, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-10dB*/
256         {0x90, 0x8C, 0x7E, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-9.5dB*/
257         {0x99, 0x94, 0x86, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-9dB*/
258         {0xA2, 0x9D, 0x8E, 0x5E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-8.5dB*/
259         {0xAC, 0xA6, 0x96, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-8dB*/
260         {0xB6, 0xB0, 0x9F, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-7.5dB*/
261         {0xC1, 0xBA, 0xA8, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-7dB*/
262         {0xCC, 0xC5, 0xB2, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-6.5dB*/
263         {0xD8, 0xD1, 0xBD, 0x7D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}     /*-6dB*/
264 };
265
266
267 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
304 u8 cck_swing_table_ch14_new[CCK_TABLE_SIZE][8] = {
305         {0x09, 0x08, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00},       /*  0, -16.0dB*/
306         {0x09, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00},       /* 1, -15.5dB*/
307         {0x0a, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00},       /*  2, -15.0dB*/
308         {0x0a, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00},       /* 3, -14.5dB*/
309         {0x0b, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00},       /*  4, -14.0dB*/
310         {0x0b, 0x0b, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00},       /*5, -13.5dB*/
311         {0x0c, 0x0c, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00},       /* 6, -13.0dB*/
312         {0x0d, 0x0c, 0x0b, 0x06, 0x00, 0x00, 0x00, 0x00},       /*  7, -12.5dB*/
313         {0x0d, 0x0d, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00},       /* 8, -12.0dB*/
314         {0x0e, 0x0e, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00},       /* 9, -11.5dB*/
315         {0x0f, 0x0f, 0x0d, 0x08, 0x00, 0x00, 0x00, 0x00},       /* 10, -11.0dB*/
316         {0x10, 0x10, 0x0e, 0x08, 0x00, 0x00, 0x00, 0x00},       /*11, -10.5dB*/
317         {0x11, 0x11, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00},       /* 12, -10.0dB*/
318         {0x12, 0x12, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00},       /* 13, -9.5dB*/
319         {0x13, 0x13, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00},       /*14, -9.0dB */
320         {0x14, 0x14, 0x11, 0x0a, 0x00, 0x00, 0x00, 0x00},       /* 15, -8.5dB*/
321         {0x16, 0x15, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00},       /* 16, -8.0dB */
322         {0x17, 0x16, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00},       /* 17, -7.5dB*/
323         {0x18, 0x17, 0x15, 0x0c, 0x00, 0x00, 0x00, 0x00},       /* 18, -7.0dB */
324         {0x1a, 0x19, 0x16, 0x0d, 0x00, 0x00, 0x00, 0x00},       /* 19, -6.5dB */
325         {0x1b, 0x1a, 0x17, 0x0e, 0x00, 0x00, 0x00, 0x00},       /* 20, -6.0dB */
326         {0x1d, 0x1c, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00},       /* 21, -5.5dB*/
327         {0x1f, 0x1e, 0x1a, 0x0f, 0x00, 0x00, 0x00, 0x00},       /* 22, -5.0dB */
328         {0x20, 0x20, 0x1b, 0x10, 0x00, 0x00, 0x00, 0x00},       /*23, -4.5dB*/
329         {0x22, 0x21, 0x1d, 0x11, 0x00, 0x00, 0x00, 0x00},       /* 24, -4.0dB */
330         {0x24, 0x23, 0x1f, 0x12, 0x00, 0x00, 0x00, 0x00},       /* 25, -3.5dB */
331         {0x26, 0x25, 0x21, 0x13, 0x00, 0x00, 0x00, 0x00},       /* 26, -3.0dB */
332         {0x28, 0x28, 0x24, 0x14, 0x00, 0x00, 0x00, 0x00},       /*27, -2.5dB*/
333         {0x2b, 0x2a, 0x25, 0x15, 0x00, 0x00, 0x00, 0x00},       /* 28, -2.0dB */
334         {0x2d, 0x2d, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00},       /*29, -1.5dB*/
335         {0x30, 0x2f, 0x29, 0x18, 0x00, 0x00, 0x00, 0x00},       /* 30, -1.0dB */
336         {0x33, 0x32, 0x2b, 0x19, 0x00, 0x00, 0x00, 0x00},       /* 31, -0.5dB */
337         {0x36, 0x35, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00}        /* 32, +0dB     */
338 };
339 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 /* JJ ADD 20161014 */
383 u32 cck_swing_table_ch1_ch14_8710b[CCK_TABLE_SIZE_8710B] = {
384         0x0CD,          /*0 ,    -20dB*/
385         0x0D9,
386         0x0E6,
387         0x0F3,
388         0x102,
389         0x111,
390         0x121,
391         0x132,
392         0x144,
393         0x158,
394         0x16C,
395         0x182,
396         0x198,
397         0x1B1,
398         0x1CA,
399         0x1E5,
400         0x202,
401         0x221,
402         0x241,
403         0x263,
404         0x287,
405         0x2AE,
406         0x2D6,
407         0x301,
408         0x32F,
409         0x35F,
410         0x392,
411         0x3C9,
412         0x402,
413         0x43F,
414         0x47F,
415         0x4C3,
416         0x50C,
417         0x558,
418         0x5A9,
419         0x5FF,
420         0x65A,
421         0x6BA,
422         0x720,
423         0x78C,
424         0x7FF,
425 };
426
427
428 u32 tx_scaling_table_jaguar[TXSCALE_TABLE_SIZE] = {
429         0x081, /* 0,  -12.0dB*/
430         0x088, /* 1,  -11.5dB*/
431         0x090, /* 2,  -11.0dB*/
432         0x099, /* 3,  -10.5dB*/
433         0x0A2, /* 4,  -10.0dB*/
434         0x0AC, /* 5,  -9.5dB*/
435         0x0B6, /* 6,  -9.0dB*/
436         0x0C0, /*7,  -8.5dB*/
437         0x0CC, /* 8,  -8.0dB*/
438         0x0D8, /* 9,  -7.5dB*/
439         0x0E5, /* 10, -7.0dB*/
440         0x0F2, /* 11, -6.5dB*/
441         0x101, /* 12, -6.0dB*/
442         0x110, /* 13, -5.5dB*/
443         0x120, /* 14, -5.0dB*/
444         0x131, /* 15, -4.5dB*/
445         0x143, /* 16, -4.0dB*/
446         0x156, /* 17, -3.5dB*/
447         0x16A, /* 18, -3.0dB*/
448         0x180, /* 19, -2.5dB*/
449         0x197, /* 20, -2.0dB*/
450         0x1AF, /* 21, -1.5dB*/
451         0x1C8, /* 22, -1.0dB*/
452         0x1E3, /* 23, -0.5dB*/
453         0x200, /* 24, +0  dB*/
454         0x21E, /* 25, +0.5dB*/
455         0x23E, /* 26, +1.0dB*/
456         0x261, /* 27, +1.5dB*/
457         0x285,/* 28, +2.0dB*/
458         0x2AB, /* 29, +2.5dB*/
459         0x2D3, /*30, +3.0dB*/
460         0x2FE, /* 31, +3.5dB*/
461         0x32B, /* 32, +4.0dB*/
462         0x35C, /* 33, +4.5dB*/
463         0x38E, /* 34, +5.0dB*/
464         0x3C4, /* 35, +5.5dB*/
465         0x3FE  /* 36, +6.0dB    */
466 };
467
468 #ifdef AP_BUILD_WORKAROUND
469
470 unsigned int tx_pwr_trk_ofdm_swing_tbl[tx_pwr_trk_ofdm_swing_tbl_len] = {
471         /*  +6.0dB */ 0x7f8001fe,
472         /*  +5.5dB */ 0x788001e2,
473         /*  +5.0dB */ 0x71c001c7,
474         /*  +4.5dB */ 0x6b8001ae,
475         /*  +4.0dB */ 0x65400195,
476         /*  +3.5dB */ 0x5fc0017f,
477         /*  +3.0dB */ 0x5a400169,
478         /*  +2.5dB */ 0x55400155,
479         /*  +2.0dB */ 0x50800142,
480         /*  +1.5dB */ 0x4c000130,
481         /*  +1.0dB */ 0x47c0011f,
482         /*  +0.5dB */ 0x43c0010f,
483         /*   0.0dB */ 0x40000100,
484         /*  -0.5dB */ 0x3c8000f2,
485         /*  -1.0dB */ 0x390000e4,
486         /*  -1.5dB */ 0x35c000d7,
487         /*  -2.0dB */ 0x32c000cb,
488         /*  -2.5dB */ 0x300000c0,
489         /*  -3.0dB */ 0x2d4000b5,
490         /*  -3.5dB */ 0x2ac000ab,
491         /*  -4.0dB */ 0x288000a2,
492         /*  -4.5dB */ 0x26000098,
493         /*  -5.0dB */ 0x24000090,
494         /*  -5.5dB */ 0x22000088,
495         /*  -6.0dB */ 0x20000080,
496         /*  -6.5dB */ 0x1a00006c,
497         /*  -7.0dB */ 0x1c800072,
498         /*  -7.5dB */ 0x18000060,
499         /*  -8.0dB */ 0x19800066,
500         /*  -8.5dB */ 0x15800056,
501         /*  -9.0dB */ 0x26c0005b,
502         /*  -9.5dB */ 0x14400051,
503         /* -10.0dB */ 0x24400051,
504         /* -10.5dB */ 0x1300004c,
505         /* -11.0dB */ 0x12000048,
506         /* -11.5dB */ 0x11000044,
507         /* -12.0dB */ 0x10000040
508 };
509 #endif
510
511
512
513 void
514 odm_txpowertracking_init(
515         void    *p_dm_void
516 )
517 {
518         struct PHY_DM_STRUCT            *p_dm_odm = (struct PHY_DM_STRUCT *)p_dm_void;
519 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))
520         if (!(p_dm_odm->support_ic_type & (ODM_RTL8814A | ODM_IC_11N_SERIES | ODM_RTL8822B)))
521                 return;
522 #endif
523
524         odm_txpowertracking_thermal_meter_init(p_dm_odm);
525 }
526
527 u8
528 get_swing_index(
529         void    *p_dm_void
530 )
531 {
532         struct PHY_DM_STRUCT            *p_dm_odm = (struct PHY_DM_STRUCT *)p_dm_void;
533         struct _ADAPTER         *adapter = p_dm_odm->adapter;
534         HAL_DATA_TYPE   *p_hal_data = GET_HAL_DATA(adapter);
535         u8                      i = 0;
536         u32                     bb_swing;
537         u32                     swing_table_size;
538         u32                     *p_swing_table;
539
540         if (p_dm_odm->support_ic_type == ODM_RTL8188E || p_dm_odm->support_ic_type == ODM_RTL8723B
541             || p_dm_odm->support_ic_type == ODM_RTL8192E || p_dm_odm->support_ic_type == ODM_RTL8188F || p_dm_odm->support_ic_type == ODM_RTL8703B
542            ) {
543                 bb_swing = odm_get_bb_reg(p_dm_odm, REG_OFDM_0_XA_TX_IQ_IMBALANCE, 0xFFC00000);
544
545                 p_swing_table = ofdm_swing_table_new;
546                 swing_table_size = OFDM_TABLE_SIZE;
547         } else {
548 #if ((RTL8812A_SUPPORT == 1) || (RTL8821A_SUPPORT == 1))
549                 if (p_dm_odm->support_ic_type == ODM_RTL8812 || p_dm_odm->support_ic_type == ODM_RTL8821) {
550                         bb_swing = phy_get_tx_bb_swing_8812a(adapter, p_hal_data->current_band_type, ODM_RF_PATH_A);
551                         p_swing_table = tx_scaling_table_jaguar;
552                         swing_table_size = TXSCALE_TABLE_SIZE;
553                 } else
554 #endif
555                 {
556                         bb_swing = 0;
557                         p_swing_table = ofdm_swing_table;
558                         swing_table_size = OFDM_TABLE_SIZE;
559                 }
560         }
561
562         for (i = 0; i < swing_table_size; ++i) {
563                 u32 table_value = p_swing_table[i];
564
565                 if (table_value >= 0x100000)
566                         table_value >>= 22;
567                 if (bb_swing == table_value)
568                         break;
569         }
570         return i;
571 }
572
573 void
574 odm_txpowertracking_thermal_meter_init(
575         void    *p_dm_void
576 )
577 {
578         struct PHY_DM_STRUCT            *p_dm_odm = (struct PHY_DM_STRUCT *)p_dm_void;
579         u8 default_swing_index = get_swing_index(p_dm_odm);
580         u8                      p = 0;
581         struct odm_rf_calibration_structure     *p_rf_calibrate_info = &(p_dm_odm->rf_calibrate_info);
582 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
583         struct _ADAPTER         *adapter = p_dm_odm->adapter;
584         HAL_DATA_TYPE   *p_hal_data = GET_HAL_DATA(adapter);
585
586         if (p_dm_odm->mp_mode == false)
587                 p_hal_data->txpowertrack_control = true;
588 #elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
589         struct _ADAPTER         *adapter = p_dm_odm->adapter;
590         HAL_DATA_TYPE   *p_hal_data = GET_HAL_DATA(adapter);
591
592         p_rf_calibrate_info->is_txpowertracking = _TRUE;
593         p_rf_calibrate_info->tx_powercount = 0;
594         p_rf_calibrate_info->is_txpowertracking_init = _FALSE;
595
596         if (p_dm_odm->mp_mode == false)
597                 p_rf_calibrate_info->txpowertrack_control = _TRUE;
598         else
599                 p_rf_calibrate_info->txpowertrack_control = _FALSE;
600
601         if (p_dm_odm->mp_mode == false)
602                 p_rf_calibrate_info->txpowertrack_control = _TRUE;
603
604         ODM_RT_TRACE(p_dm_odm, ODM_COMP_CALIBRATION, ODM_DBG_LOUD, ("p_dm_odm txpowertrack_control = %d\n", p_rf_calibrate_info->txpowertrack_control));
605
606 #elif (DM_ODM_SUPPORT_TYPE & (ODM_AP))
607 #ifdef RTL8188E_SUPPORT
608         {
609                 p_rf_calibrate_info->is_txpowertracking = _TRUE;
610                 p_rf_calibrate_info->tx_powercount = 0;
611                 p_rf_calibrate_info->is_txpowertracking_init = _FALSE;
612                 p_rf_calibrate_info->txpowertrack_control = _TRUE;
613         }
614 #endif
615 #endif
616
617         /* p_dm_odm->rf_calibrate_info.txpowertrack_control = true; */
618         p_rf_calibrate_info->thermal_value = p_hal_data->eeprom_thermal_meter;
619         p_rf_calibrate_info->thermal_value_iqk = p_hal_data->eeprom_thermal_meter;
620         p_rf_calibrate_info->thermal_value_lck = p_hal_data->eeprom_thermal_meter;
621
622         if (p_rf_calibrate_info->default_bb_swing_index_flag != true) {
623                 /*The index of "0 dB" in SwingTable.*/
624                 if (p_dm_odm->support_ic_type == ODM_RTL8188E || p_dm_odm->support_ic_type == ODM_RTL8723B ||
625                     p_dm_odm->support_ic_type == ODM_RTL8192E || p_dm_odm->support_ic_type == ODM_RTL8703B) {
626                         p_rf_calibrate_info->default_ofdm_index = (default_swing_index >= OFDM_TABLE_SIZE) ? 30 : default_swing_index;
627                         p_rf_calibrate_info->default_cck_index = 20;
628                 } else if (p_dm_odm->support_ic_type == ODM_RTL8188F) {          /*add by Mingzhi.Guo  2015-03-23*/
629                         p_rf_calibrate_info->default_ofdm_index = 28;                                                   /*OFDM: -1dB*/
630                         p_rf_calibrate_info->default_cck_index = 20;                                                    /*CCK:-6dB*/
631                 } else if (p_dm_odm->support_ic_type == ODM_RTL8723D) {                  /*add by zhaohe  2015-10-27*/
632                         p_rf_calibrate_info->default_ofdm_index = 28;                                                      /*OFDM: -1dB*/
633                         p_rf_calibrate_info->default_cck_index = 28;                                                    /*CCK:   -6dB*/
634                 } else if (p_dm_odm->support_ic_type == ODM_RTL8710B) {         /* JJ ADD 20161014 */
635                         p_rf_calibrate_info->default_ofdm_index = 28;                                                      /*OFDM: -1dB*/
636                         p_rf_calibrate_info->default_cck_index = 28;                                                       /*CCK:   -6dB*/
637                 } else {
638                         p_rf_calibrate_info->default_ofdm_index = (default_swing_index >= TXSCALE_TABLE_SIZE) ? 24 : default_swing_index;
639                         p_rf_calibrate_info->default_cck_index = 24;
640                 }
641                 p_rf_calibrate_info->default_bb_swing_index_flag = true;
642         }
643
644         p_rf_calibrate_info->bb_swing_idx_cck_base = p_rf_calibrate_info->default_cck_index;
645         p_rf_calibrate_info->CCK_index = p_rf_calibrate_info->default_cck_index;
646
647         for (p = ODM_RF_PATH_A; p < MAX_RF_PATH; ++p) {
648                 p_rf_calibrate_info->bb_swing_idx_ofdm_base[p] = p_rf_calibrate_info->default_ofdm_index;
649                 p_rf_calibrate_info->OFDM_index[p] = p_rf_calibrate_info->default_ofdm_index;
650                 p_rf_calibrate_info->delta_power_index[p] = 0;
651                 p_rf_calibrate_info->delta_power_index_last[p] = 0;
652                 p_rf_calibrate_info->power_index_offset[p] = 0;
653         }
654         p_rf_calibrate_info->modify_tx_agc_value_ofdm = 0;
655         p_rf_calibrate_info->modify_tx_agc_value_cck = 0;
656
657 }
658
659
660 void
661 odm_txpowertracking_check(
662         void    *p_dm_void
663 )
664 {
665         /* 2011/09/29 MH In HW integration first stage, we provide 4 different handle to operate
666         at the same time. In the stage2/3, we need to prive universal interface and merge all
667         HW dynamic mechanism. */
668         struct PHY_DM_STRUCT            *p_dm_odm = (struct PHY_DM_STRUCT *)p_dm_void;
669         switch  (p_dm_odm->support_platform) {
670         case    ODM_WIN:
671                 odm_txpowertracking_check_mp(p_dm_odm);
672                 break;
673
674         case    ODM_CE:
675                 odm_txpowertracking_check_ce(p_dm_odm);
676                 break;
677
678         case    ODM_AP:
679                 odm_txpowertracking_check_ap(p_dm_odm);
680                 break;
681
682         default:
683                 break;
684         }
685
686 }
687
688 void
689 odm_txpowertracking_check_ce(
690         void    *p_dm_void
691 )
692 {
693         struct PHY_DM_STRUCT            *p_dm_odm = (struct PHY_DM_STRUCT *)p_dm_void;
694 #if (DM_ODM_SUPPORT_TYPE == ODM_CE)
695         struct _ADAPTER *adapter = p_dm_odm->adapter;
696
697         if (!(p_dm_odm->support_ability & ODM_RF_TX_PWR_TRACK))
698                 return;
699
700         if (!p_dm_odm->rf_calibrate_info.tm_trigger) {
701
702                 if (IS_HARDWARE_TYPE_8188E(adapter) || IS_HARDWARE_TYPE_8188F(adapter) || IS_HARDWARE_TYPE_8192E(adapter)
703                     || IS_HARDWARE_TYPE_8723B(adapter) || IS_HARDWARE_TYPE_JAGUAR(adapter) || IS_HARDWARE_TYPE_8814A(adapter)
704                     || IS_HARDWARE_TYPE_8703B(adapter) || IS_HARDWARE_TYPE_8723D(adapter) || IS_HARDWARE_TYPE_8822B(adapter)
705                     || IS_HARDWARE_TYPE_8821C(adapter)  || (p_dm_odm->support_ic_type == ODM_RTL8710B)
706                    )/* JJ ADD 20161014 */
707                         odm_set_rf_reg(p_dm_odm, ODM_RF_PATH_A, RF_T_METER_NEW, (BIT(17) | BIT(16)), 0x03);
708                 else
709                         odm_set_rf_reg(p_dm_odm, ODM_RF_PATH_A, RF_T_METER_OLD, RFREGOFFSETMASK, 0x60);
710
711
712
713                 p_dm_odm->rf_calibrate_info.tm_trigger = 1;
714                 return;
715         } else {
716
717                 odm_txpowertracking_callback_thermal_meter(adapter);
718                 p_dm_odm->rf_calibrate_info.tm_trigger = 0;
719         }
720
721 #endif
722 }
723
724 void
725 odm_txpowertracking_check_mp(
726         void    *p_dm_void
727 )
728 {
729         struct PHY_DM_STRUCT            *p_dm_odm = (struct PHY_DM_STRUCT *)p_dm_void;
730 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
731         struct _ADAPTER *adapter = p_dm_odm->adapter;
732
733         if (odm_check_power_status(adapter) == false) {
734                 RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD, ("===>odm_check_power_status() return false\n"));
735                 return;
736         }
737
738         odm_txpowertracking_thermal_meter_check(adapter);
739 #endif
740
741 }
742
743
744 void
745 odm_txpowertracking_check_ap(
746         void    *p_dm_void
747 )
748 {
749         struct PHY_DM_STRUCT            *p_dm_odm = (struct PHY_DM_STRUCT *)p_dm_void;
750 #if (DM_ODM_SUPPORT_TYPE == ODM_AP)
751         struct rtl8192cd_priv   *priv           = p_dm_odm->priv;
752
753         return;
754
755 #endif
756 }
757
758 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
759 void
760 odm_txpowertracking_thermal_meter_check(
761         struct _ADAPTER         *adapter
762 )
763 {
764 #ifndef AP_BUILD_WORKAROUND
765         static u8                       tm_trigger = 0;
766
767         if (!(GET_HAL_DATA(adapter)->DM_OutSrc.support_ability & ODM_RF_TX_PWR_TRACK)) {
768                 RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,
769                         ("===>odm_txpowertracking_thermal_meter_check(),p_mgnt_info->is_txpowertracking is false, return!!\n"));
770                 return;
771         }
772
773         if (!tm_trigger) {
774                 if (IS_HARDWARE_TYPE_8188E(adapter) || IS_HARDWARE_TYPE_JAGUAR(adapter) || IS_HARDWARE_TYPE_8192E(adapter) ||
775                     IS_HARDWARE_TYPE_8723B(adapter) || IS_HARDWARE_TYPE_8814A(adapter) || IS_HARDWARE_TYPE_8188F(adapter)
776                     || IS_HARDWARE_TYPE_8703B(adapter) || IS_HARDWARE_TYPE_8723D(adapter) || IS_HARDWARE_TYPE_8710B(adapter))/* JJ ADD 20161014 */
777                         phy_set_rf_reg(adapter, ODM_RF_PATH_A, RF_T_METER_88E, BIT(17) | BIT(16), 0x03);
778                 else
779                         phy_set_rf_reg(adapter, ODM_RF_PATH_A, RF_T_METER, RFREGOFFSETMASK, 0x60);
780
781                 RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD, ("Trigger Thermal Meter!!\n"));
782
783                 tm_trigger = 1;
784                 return;
785         } else {
786                 RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD, ("Schedule TxPowerTracking direct call!!\n"));
787                 odm_txpowertracking_direct_call(adapter);
788                 tm_trigger = 0;
789         }
790 #endif
791 }
792 #endif