net: wireless: rockchip_wlan: add rtl8723cs support
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8723cs / hal / phydm / phydm_powertracking_win.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
268
269 u8 cck_swing_table_ch1_ch13_new[CCK_TABLE_SIZE][8] = {
270         {0x09, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x01},       /* 0, -16.0dB */
271         {0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01},       /* 1, -15.5dB */
272         {0x0a, 0x09, 0x08, 0x07, 0x05, 0x03, 0x02, 0x01},       /* 2, -15.0dB */
273         {0x0a, 0x0a, 0x09, 0x07, 0x05, 0x03, 0x02, 0x01},       /* 3, -14.5dB */
274         {0x0b, 0x0a, 0x09, 0x08, 0x06, 0x04, 0x02, 0x01},       /* 4, -14.0dB */
275         {0x0b, 0x0b, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x01},       /* 5, -13.5dB */
276         {0x0c, 0x0c, 0x0a, 0x09, 0x06, 0x04, 0x02, 0x01},       /* 6, -13.0dB */
277         {0x0d, 0x0c, 0x0b, 0x09, 0x07, 0x04, 0x02, 0x01},       /* 7, -12.5dB */
278         {0x0d, 0x0d, 0x0c, 0x0a, 0x07, 0x05, 0x02, 0x01},       /* 8, -12.0dB */
279         {0x0e, 0x0e, 0x0c, 0x0a, 0x08, 0x05, 0x02, 0x01},       /* 9, -11.5dB */
280         {0x0f, 0x0f, 0x0d, 0x0b, 0x08, 0x05, 0x03, 0x01},       /* 10, -11.0dB */
281         {0x10, 0x10, 0x0e, 0x0b, 0x08, 0x05, 0x03, 0x01},       /* 11, -10.5dB */
282         {0x11, 0x11, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01},       /* 12, -10.0dB */
283         {0x12, 0x12, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01},       /* 13, -9.5dB */
284         {0x13, 0x13, 0x10, 0x0d, 0x0a, 0x06, 0x03, 0x01},       /* 14, -9.0dB */
285         {0x14, 0x14, 0x11, 0x0e, 0x0b, 0x07, 0x03, 0x02},       /* 15, -8.5dB */
286         {0x16, 0x15, 0x12, 0x0f, 0x0b, 0x07, 0x04, 0x01},       /* 16, -8.0dB */
287         {0x17, 0x16, 0x13, 0x10, 0x0c, 0x08, 0x04, 0x02},       /* 17, -7.5dB */
288         {0x18, 0x17, 0x15, 0x11, 0x0c, 0x08, 0x04, 0x02},       /* 18, -7.0dB */
289         {0x1a, 0x19, 0x16, 0x12, 0x0d, 0x09, 0x04, 0x02},       /* 19, -6.5dB */
290         {0x1b, 0x1a, 0x17, 0x13, 0x0e, 0x09, 0x04, 0x02},       /* 20, -6.0dB */
291         {0x1d, 0x1c, 0x18, 0x14, 0x0f, 0x0a, 0x05, 0x02},       /* 21, -5.5dB */
292         {0x1f, 0x1e, 0x1a, 0x15, 0x10, 0x0a, 0x05, 0x02},       /* 22, -5.0dB */
293         {0x20, 0x20, 0x1b, 0x16, 0x11, 0x08, 0x05, 0x02},       /* 23, -4.5dB */
294         {0x22, 0x21, 0x1d, 0x18, 0x11, 0x0b, 0x06, 0x02},       /* 24, -4.0dB */
295         {0x24, 0x23, 0x1f, 0x19, 0x13, 0x0c, 0x06, 0x03},       /* 25, -3.5dB */
296         {0x26, 0x25, 0x21, 0x1b, 0x14, 0x0d, 0x06, 0x03},       /* 26, -3.0dB */
297         {0x28, 0x28, 0x22, 0x1c, 0x15, 0x0d, 0x07, 0x03},       /* 27, -2.5dB */
298         {0x2b, 0x2a, 0x25, 0x1e, 0x16, 0x0e, 0x07, 0x03},       /* 28, -2.0dB */
299         {0x2d, 0x2d, 0x27, 0x1f, 0x18, 0x0f, 0x08, 0x03},       /* 29, -1.5dB */
300         {0x30, 0x2f, 0x29, 0x21, 0x19, 0x10, 0x08, 0x03},       /* 30, -1.0dB */
301         {0x33, 0x32, 0x2b, 0x23, 0x1a, 0x11, 0x08, 0x04},       /* 31, -0.5dB */
302         {0x36, 0x35, 0x2e, 0x25, 0x1c, 0x12, 0x09, 0x04}        /* 32, +0dB */
303 };
304
305
306 u8 cck_swing_table_ch14_new[CCK_TABLE_SIZE][8] = {
307         {0x09, 0x08, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00},       /* 0, -16.0dB */
308         {0x09, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00},       /* 1, -15.5dB */
309         {0x0a, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00},       /* 2, -15.0dB */
310         {0x0a, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00},       /* 3, -14.5dB */
311         {0x0b, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00},       /* 4, -14.0dB */
312         {0x0b, 0x0b, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00},       /* 5, -13.5dB */
313         {0x0c, 0x0c, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00},       /* 6, -13.0dB */
314         {0x0d, 0x0c, 0x0b, 0x06, 0x00, 0x00, 0x00, 0x00},       /* 7, -12.5dB */
315         {0x0d, 0x0d, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00},       /* 8, -12.0dB */
316         {0x0e, 0x0e, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00},       /* 9, -11.5dB */
317         {0x0f, 0x0f, 0x0d, 0x08, 0x00, 0x00, 0x00, 0x00},       /* 10, -11.0dB */
318         {0x10, 0x10, 0x0e, 0x08, 0x00, 0x00, 0x00, 0x00},       /* 11, -10.5dB */
319         {0x11, 0x11, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00},       /* 12, -10.0dB */
320         {0x12, 0x12, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00},       /* 13, -9.5dB */
321         {0x13, 0x13, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00},       /* 14, -9.0dB */
322         {0x14, 0x14, 0x11, 0x0a, 0x00, 0x00, 0x00, 0x00},       /* 15, -8.5dB */
323         {0x16, 0x15, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00},       /* 16, -8.0dB */
324         {0x17, 0x16, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00},       /* 17, -7.5dB */
325         {0x18, 0x17, 0x15, 0x0c, 0x00, 0x00, 0x00, 0x00},       /* 18, -7.0dB */
326         {0x1a, 0x19, 0x16, 0x0d, 0x00, 0x00, 0x00, 0x00},       /* 19, -6.5dB */
327         {0x1b, 0x1a, 0x17, 0x0e, 0x00, 0x00, 0x00, 0x00},       /* 20, -6.0dB */
328         {0x1d, 0x1c, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00},       /* 21, -5.5dB */
329         {0x1f, 0x1e, 0x1a, 0x0f, 0x00, 0x00, 0x00, 0x00},       /* 22, -5.0dB */
330         {0x20, 0x20, 0x1b, 0x10, 0x00, 0x00, 0x00, 0x00},       /* 23, -4.5dB */
331         {0x22, 0x21, 0x1d, 0x11, 0x00, 0x00, 0x00, 0x00},       /* 24, -4.0dB */
332         {0x24, 0x23, 0x1f, 0x12, 0x00, 0x00, 0x00, 0x00},       /* 25, -3.5dB */
333         {0x26, 0x25, 0x21, 0x13, 0x00, 0x00, 0x00, 0x00},       /* 26, -3.0dB */
334         {0x28, 0x28, 0x24, 0x14, 0x00, 0x00, 0x00, 0x00},       /* 27, -2.5dB */
335         {0x2b, 0x2a, 0x25, 0x15, 0x00, 0x00, 0x00, 0x00},       /* 28, -2.0dB */
336         {0x2d, 0x2d, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00},       /* 29, -1.5dB */
337         {0x30, 0x2f, 0x29, 0x18, 0x00, 0x00, 0x00, 0x00},       /* 30, -1.0dB */
338         {0x33, 0x32, 0x2b, 0x19, 0x00, 0x00, 0x00, 0x00},       /* 31, -0.5dB */
339         {0x36, 0x35, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00}        /* 32, +0dB */
340 };
341 u32 cck_swing_table_ch1_ch14_8723d[CCK_TABLE_SIZE_8723D] = {
342         0x0CD,
343         0x0D9,
344         0x0E6,
345         0x0F3,
346         0x102,
347         0x111,
348         0x121,
349         0x132,
350         0x144,
351         0x158,
352         0x16C,
353         0x182,
354         0x198,
355         0x1B1,
356         0x1CA,
357         0x1E5,
358         0x202,
359         0x221,
360         0x241,
361         0x263,
362         0x287,
363         0x2AE,
364         0x2D6,
365         0x301,
366         0x32F,
367         0x35F,
368         0x392,
369         0x3C9,
370         0x402,
371         0x43F,
372         0x47F,
373         0x4C3,
374         0x50C,
375         0x558,
376         0x5A9,
377         0x5FF,
378         0x65A,
379         0x6BA,
380         0x720,
381         0x78C,
382         0x7FF,
383 };
384 /* JJ ADD 20161014 */
385 u32 cck_swing_table_ch1_ch14_8710b[CCK_TABLE_SIZE_8710B] = {
386         0x0CD,
387         0x0D9,
388         0x0E6,
389         0x0F3,
390         0x102,
391         0x111,
392         0x121,
393         0x132,
394         0x144,
395         0x158,
396         0x16C,
397         0x182,
398         0x198,
399         0x1B1,
400         0x1CA,
401         0x1E5,
402         0x202,
403         0x221,
404         0x241,
405         0x263,
406         0x287,
407         0x2AE,
408         0x2D6,
409         0x301,
410         0x32F,
411         0x35F,
412         0x392,
413         0x3C9,
414         0x402,
415         0x43F,
416         0x47F,
417         0x4C3,
418         0x50C,
419         0x558,
420         0x5A9,
421         0x5FF,
422         0x65A,
423         0x6BA,
424         0x720,
425         0x78C,
426         0x7FF,
427 };
428
429
430 u32 tx_scaling_table_jaguar[TXSCALE_TABLE_SIZE] = {
431         0x081, /* 0,  -12.0dB */
432         0x088, /* 1,  -11.5dB */
433         0x090, /* 2,  -11.0dB */
434         0x099, /* 3,  -10.5dB */
435         0x0A2, /* 4,  -10.0dB */
436         0x0AC, /* 5,  -9.5dB */
437         0x0B6, /* 6,  -9.0dB */
438         0x0C0, /* 7,  -8.5dB */
439         0x0CC, /* 8,  -8.0dB */
440         0x0D8, /* 9,  -7.5dB */
441         0x0E5, /* 10, -7.0dB */
442         0x0F2, /* 11, -6.5dB */
443         0x101, /* 12, -6.0dB */
444         0x110, /* 13, -5.5dB */
445         0x120, /* 14, -5.0dB */
446         0x131, /* 15, -4.5dB */
447         0x143, /* 16, -4.0dB */
448         0x156, /* 17, -3.5dB */
449         0x16A, /* 18, -3.0dB */
450         0x180, /* 19, -2.5dB */
451         0x197, /* 20, -2.0dB */
452         0x1AF, /* 21, -1.5dB */
453         0x1C8, /* 22, -1.0dB */
454         0x1E3, /* 23, -0.5dB */
455         0x200, /* 24, +0  dB */
456         0x21E, /* 25, +0.5dB */
457         0x23E, /* 26, +1.0dB */
458         0x261, /* 27, +1.5dB */
459         0x285, /* 28, +2.0dB */
460         0x2AB, /* 29, +2.5dB */
461         0x2D3, /* 30, +3.0dB */
462         0x2FE, /* 31, +3.5dB */
463         0x32B, /* 32, +4.0dB */
464         0x35C, /* 33, +4.5dB */
465         0x38E, /* 34, +5.0dB */
466         0x3C4, /* 35, +5.5dB */
467         0x3FE  /* 36, +6.0dB */
468 };
469
470
471 #ifdef AP_BUILD_WORKAROUND
472
473 unsigned int tx_pwr_trk_ofdm_swing_tbl[tx_pwr_trk_ofdm_swing_tbl_len] = {
474         /*  +6.0dB */ 0x7f8001fe,
475         /*  +5.5dB */ 0x788001e2,
476         /*  +5.0dB */ 0x71c001c7,
477         /*  +4.5dB */ 0x6b8001ae,
478         /*  +4.0dB */ 0x65400195,
479         /*  +3.5dB */ 0x5fc0017f,
480         /*  +3.0dB */ 0x5a400169,
481         /*  +2.5dB */ 0x55400155,
482         /*  +2.0dB */ 0x50800142,
483         /*  +1.5dB */ 0x4c000130,
484         /*  +1.0dB */ 0x47c0011f,
485         /*  +0.5dB */ 0x43c0010f,
486         /*   0.0dB */ 0x40000100,
487         /*  -0.5dB */ 0x3c8000f2,
488         /*  -1.0dB */ 0x390000e4,
489         /*  -1.5dB */ 0x35c000d7,
490         /*  -2.0dB */ 0x32c000cb,
491         /*  -2.5dB */ 0x300000c0,
492         /*  -3.0dB */ 0x2d4000b5,
493         /*  -3.5dB */ 0x2ac000ab,
494         /*  -4.0dB */ 0x288000a2,
495         /*  -4.5dB */ 0x26000098,
496         /*  -5.0dB */ 0x24000090,
497         /*  -5.5dB */ 0x22000088,
498         /*  -6.0dB */ 0x20000080,
499         /*  -6.5dB */ 0x1a00006c,
500         /*  -7.0dB */ 0x1c800072,
501         /*  -7.5dB */ 0x18000060,
502         /*  -8.0dB */ 0x19800066,
503         /*  -8.5dB */ 0x15800056,
504         /*  -9.0dB */ 0x26c0005b,
505         /*  -9.5dB */ 0x14400051,
506         /* -10.0dB */ 0x24400051,
507         /* -10.5dB */ 0x1300004c,
508         /* -11.0dB */ 0x12000048,
509         /* -11.5dB */ 0x11000044,
510         /* -12.0dB */ 0x10000040
511 };
512
513 #endif
514
515 void
516 odm_txpowertracking_init(
517         void            *p_dm_void
518 )
519 {
520         struct PHY_DM_STRUCT            *p_dm_odm = (struct PHY_DM_STRUCT *)p_dm_void;
521 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))
522         if (!(p_dm_odm->support_ic_type & (ODM_RTL8814A | ODM_IC_11N_SERIES | ODM_RTL8822B)))
523                 return;
524 #endif
525
526         odm_txpowertracking_thermal_meter_init(p_dm_odm);
527 }
528
529 u8
530 get_swing_index(
531         void            *p_dm_void
532 )
533 {
534         struct PHY_DM_STRUCT            *p_dm_odm = (struct PHY_DM_STRUCT *)p_dm_void;
535         struct _ADAPTER         *adapter = p_dm_odm->adapter;
536         HAL_DATA_TYPE   *p_hal_data = GET_HAL_DATA(adapter);
537         u8                      i = 0;
538         u32                     bb_swing;
539         u32                     swing_table_size;
540         u32                     *p_swing_table;
541
542         if (p_dm_odm->support_ic_type == ODM_RTL8188E || p_dm_odm->support_ic_type == ODM_RTL8723B ||
543             p_dm_odm->support_ic_type == ODM_RTL8192E || p_dm_odm->support_ic_type == ODM_RTL8188F || p_dm_odm->support_ic_type == ODM_RTL8703B) {
544                 bb_swing = odm_get_bb_reg(p_dm_odm, REG_OFDM_0_XA_TX_IQ_IMBALANCE, 0xFFC00000);
545
546                 p_swing_table = ofdm_swing_table_new;
547                 swing_table_size = OFDM_TABLE_SIZE;
548         } else {
549                 bb_swing = PHY_GetTxBBSwing_8812A(adapter, p_hal_data->CurrentBandType, ODM_RF_PATH_A);
550                 p_swing_table = tx_scaling_table_jaguar;
551                 swing_table_size = TXSCALE_TABLE_SIZE;
552         }
553
554         for (i = 0; i < swing_table_size; ++i) {
555                 u32 table_value = p_swing_table[i];
556
557                 if (table_value >= 0x100000)
558                         table_value >>= 22;
559                 if (bb_swing == table_value)
560                         break;
561         }
562         return i;
563 }
564
565 void
566 odm_txpowertracking_thermal_meter_init(
567         void            *p_dm_void
568 )
569 {
570         struct PHY_DM_STRUCT            *p_dm_odm = (struct PHY_DM_STRUCT *)p_dm_void;
571         u8 default_swing_index = get_swing_index(p_dm_odm);
572         struct odm_rf_calibration_structure     *p_rf_calibrate_info = &(p_dm_odm->rf_calibrate_info);
573
574 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
575         struct _ADAPTER         *adapter = p_dm_odm->adapter;
576         HAL_DATA_TYPE   *p_hal_data = GET_HAL_DATA(adapter);
577         u8                      p = 0;
578
579         if (p_dm_odm->mp_mode == false)
580                 p_rf_calibrate_info->txpowertrack_control = true;
581 #elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
582 #ifdef CONFIG_RTL8188E
583         {
584                 p_rf_calibrate_info->is_txpowertracking = _TRUE;
585                 p_rf_calibrate_info->tx_powercount = 0;
586                 p_rf_calibrate_info->is_txpowertracking_init = _FALSE;
587
588                 if (p_dm_odm->mp_mode == false)
589                         p_rf_calibrate_info->txpowertrack_control = _TRUE;
590
591                 MSG_8192C("p_dm_odm txpowertrack_control = %d\n", p_rf_calibrate_info->txpowertrack_control);
592         }
593 #else
594         {
595                 struct _ADAPTER         *adapter = p_dm_odm->adapter;
596                 HAL_DATA_TYPE   *p_hal_data = GET_HAL_DATA(adapter);
597                 struct dm_priv  *pdmpriv = &p_hal_data->dmpriv;
598
599                 pdmpriv->is_txpowertracking = _TRUE;
600                 pdmpriv->tx_powercount = 0;
601                 pdmpriv->is_txpowertracking_init = _FALSE;
602
603                 if (p_dm_odm->mp_mode == false)
604                         pdmpriv->txpowertrack_control = _TRUE;
605
606                 MSG_8192C("pdmpriv->txpowertrack_control = %d\n", pdmpriv->txpowertrack_control);
607
608         }
609 #endif
610 #elif (DM_ODM_SUPPORT_TYPE & (ODM_AP))
611 #ifdef RTL8188E_SUPPORT
612         {
613                 p_rf_calibrate_info->is_txpowertracking = _TRUE;
614                 p_rf_calibrate_info->tx_powercount = 0;
615                 p_rf_calibrate_info->is_txpowertracking_init = _FALSE;
616                 p_rf_calibrate_info->txpowertrack_control = _TRUE;
617         }
618 #endif
619 #endif
620
621 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
622 #if (MP_DRIVER == 1)
623         p_rf_calibrate_info->txpowertrack_control = false;
624 #else
625         p_rf_calibrate_info->txpowertrack_control = true;
626 #endif
627 #else
628         p_rf_calibrate_info->txpowertrack_control = true;
629 #endif
630
631         p_rf_calibrate_info->thermal_value              = p_hal_data->eeprom_thermal_meter;
632         p_rf_calibrate_info->thermal_value_iqk  = p_hal_data->eeprom_thermal_meter;
633         p_rf_calibrate_info->thermal_value_lck  = p_hal_data->eeprom_thermal_meter;
634
635         if (p_rf_calibrate_info->default_bb_swing_index_flag != true) {
636                 /*The index of "0 dB" in SwingTable.*/
637                 if (p_dm_odm->support_ic_type == ODM_RTL8188E || p_dm_odm->support_ic_type == ODM_RTL8723B ||
638                     p_dm_odm->support_ic_type == ODM_RTL8192E || p_dm_odm->support_ic_type == ODM_RTL8703B) {
639                         p_rf_calibrate_info->default_ofdm_index = (default_swing_index >= OFDM_TABLE_SIZE) ? 30 : default_swing_index;
640                         p_rf_calibrate_info->default_cck_index = 20;
641                 } else if (p_dm_odm->support_ic_type == ODM_RTL8188F) {          /*add by Mingzhi.Guo  2015-03-23*/
642                         p_rf_calibrate_info->default_ofdm_index = 28;                                                   /*OFDM: -1dB*/
643                         p_rf_calibrate_info->default_cck_index = 20;                                                    /*CCK:-6dB*/
644                 } else if (p_dm_odm->support_ic_type == ODM_RTL8723D) {                  /*add by zhaohe  2015-10-27*/
645                         p_rf_calibrate_info->default_ofdm_index = 28;                                                      /*OFDM: -1dB*/
646                         p_rf_calibrate_info->default_cck_index = 28;                                                    /*CCK:   -6dB*/
647                         /* JJ ADD 20161014 */
648                 } else if (p_dm_odm->support_ic_type == ODM_RTL8710B) {                 
649                         p_rf_calibrate_info->default_ofdm_index = 28;                                   /*OFDM: -1dB*/
650                         p_rf_calibrate_info->default_cck_index = 28;                                    /*CCK:   -6dB*/
651                 } else {
652                         p_rf_calibrate_info->default_ofdm_index = (default_swing_index >= TXSCALE_TABLE_SIZE) ? 24 : default_swing_index;
653                         p_rf_calibrate_info->default_cck_index = 24;
654                 }
655                 p_rf_calibrate_info->default_bb_swing_index_flag = true;
656         }
657
658         p_rf_calibrate_info->bb_swing_idx_cck_base = p_rf_calibrate_info->default_cck_index;
659         p_rf_calibrate_info->CCK_index = p_rf_calibrate_info->default_cck_index;
660
661         for (p = ODM_RF_PATH_A; p < MAX_RF_PATH; ++p) {
662                 p_rf_calibrate_info->bb_swing_idx_ofdm_base[p] = p_rf_calibrate_info->default_ofdm_index;
663                 p_rf_calibrate_info->OFDM_index[p] = p_rf_calibrate_info->default_ofdm_index;
664                 p_rf_calibrate_info->delta_power_index[p] = 0;
665                 p_rf_calibrate_info->delta_power_index_last[p] = 0;
666                 p_rf_calibrate_info->power_index_offset[p] = 0;
667                 p_rf_calibrate_info->kfree_offset[p] = 0;
668         }
669         p_rf_calibrate_info->modify_tx_agc_value_ofdm = 0;
670         p_rf_calibrate_info->modify_tx_agc_value_cck = 0;
671
672 }
673
674
675 void
676 odm_txpowertracking_check(
677         void            *p_dm_void
678 )
679 {
680
681 #if 0
682         /* 2011/09/29 MH In HW integration first stage, we provide 4 different handle to operate */
683         /*  at the same time. In the stage2/3, we need to prive universal interface and merge all */
684         /* HW dynamic mechanism. */
685 #endif
686
687         struct PHY_DM_STRUCT            *p_dm_odm = (struct PHY_DM_STRUCT *)p_dm_void;
688         switch  (p_dm_odm->support_platform) {
689         case    ODM_WIN:
690                 odm_txpowertracking_check_mp(p_dm_odm);
691                 break;
692
693         case    ODM_CE:
694                 odm_txpowertracking_check_ce(p_dm_odm);
695                 break;
696
697         case    ODM_AP:
698                 odm_txpowertracking_check_ap(p_dm_odm);
699                 break;
700
701         default:
702                 break;
703         }
704
705 }
706
707 void
708 odm_txpowertracking_check_ce(
709         void            *p_dm_void
710 )
711 {
712         struct PHY_DM_STRUCT            *p_dm_odm = (struct PHY_DM_STRUCT *)p_dm_void;
713 #if (DM_ODM_SUPPORT_TYPE == ODM_CE)
714         struct _ADAPTER *adapter = p_dm_odm->adapter;
715 #if ((RTL8188F_SUPPORT == 1))
716         rtl8192c_odm_check_txpowertracking(adapter);
717 #endif
718
719 #if (RTL8188E_SUPPORT == 1)
720
721         if (!(p_dm_odm->support_ability & ODM_RF_TX_PWR_TRACK))
722                 return;
723
724         if (!p_rf_calibrate_info->tm_trigger) {
725                 odm_set_rf_reg(p_dm_odm, ODM_RF_PATH_A, RF_T_METER, RFREGOFFSETMASK, 0x60);
726                 /*DBG_8192C("Trigger 92C Thermal Meter!!\n");*/
727
728                 p_rf_calibrate_info->tm_trigger = 1;
729                 return;
730
731         } else {
732                 /*DBG_8192C("Schedule TxPowerTracking direct call!!\n");*/
733                 odm_txpowertracking_callback_thermal_meter_8188e(adapter);
734                 p_rf_calibrate_info->tm_trigger = 0;
735         }
736 #endif
737 #endif
738 }
739
740 void
741 odm_txpowertracking_check_mp(
742         void            *p_dm_void
743 )
744 {
745         struct PHY_DM_STRUCT            *p_dm_odm = (struct PHY_DM_STRUCT *)p_dm_void;
746 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
747         struct _ADAPTER *adapter = p_dm_odm->adapter;
748
749         if (*p_dm_odm->p_is_fcs_mode_enable)
750                 return;
751
752         if (odm_check_power_status(adapter) == false) {
753                 RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD, ("===>odm_check_power_status() return false\n"));
754                 return;
755         }
756
757         if (IS_HARDWARE_TYPE_8821B(adapter)) /* TODO: Don't Do PowerTracking*/
758                 return;
759
760         odm_txpowertracking_thermal_meter_check(adapter);
761
762
763 #endif
764
765 }
766
767
768 void
769 odm_txpowertracking_check_ap(
770         void            *p_dm_void
771 )
772 {
773         return;
774
775 }
776
777 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
778
779 void
780 odm_txpowertracking_direct_call(
781         struct _ADAPTER         *adapter
782 )
783 {
784         HAL_DATA_TYPE           *p_hal_data     = GET_HAL_DATA(adapter);
785         struct PHY_DM_STRUCT                    *p_dm_odm = &p_hal_data->DM_OutSrc;
786
787         odm_txpowertracking_callback_thermal_meter(adapter);
788 }
789
790 void
791 odm_txpowertracking_thermal_meter_check(
792         struct _ADAPTER         *adapter
793 )
794 {
795 #ifndef AP_BUILD_WORKAROUND
796         static u8                       tm_trigger = 0;
797
798         if (!(GET_HAL_DATA(adapter)->DM_OutSrc.support_ability & ODM_RF_TX_PWR_TRACK)) {
799                 RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,
800                         ("===>odm_txpowertracking_thermal_meter_check(),p_mgnt_info->is_txpowertracking is false, return!!\n"));
801                 return;
802         }
803
804         if (!tm_trigger) {
805                 if (IS_HARDWARE_TYPE_8188E(adapter) || IS_HARDWARE_TYPE_JAGUAR(adapter) || IS_HARDWARE_TYPE_8192E(adapter) ||
806                     IS_HARDWARE_TYPE_8723B(adapter) || IS_HARDWARE_TYPE_8814A(adapter) || IS_HARDWARE_TYPE_8188F(adapter) || IS_HARDWARE_TYPE_8703B(adapter)
807                     || IS_HARDWARE_TYPE_8822B(adapter) || IS_HARDWARE_TYPE_8723D(adapter) || IS_HARDWARE_TYPE_8821C(adapter) || IS_HARDWARE_TYPE_8710B(adapter))/* JJ ADD 20161014 */
808                         PHY_SetRFReg(adapter, ODM_RF_PATH_A, RF_T_METER_88E, BIT(17) | BIT(16), 0x03);
809                 else
810                         PHY_SetRFReg(adapter, ODM_RF_PATH_A, RF_T_METER, RFREGOFFSETMASK, 0x60);
811
812                 RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD, ("Trigger Thermal Meter!!\n"));
813
814                 tm_trigger = 1;
815                 return;
816         } else {
817                 RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD, ("Schedule TxPowerTracking direct call!!\n"));
818                 odm_txpowertracking_direct_call(adapter);
819                 tm_trigger = 0;
820         }
821 #endif
822 }
823
824 #endif