net: wireless: rockchip_wlan: add rtl8723ds support
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8723ds / hal / phydm / phydm_powertracking_win.c
1 /******************************************************************************\r
2  *\r
3  * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
4  *                                        \r
5  * This program is free software; you can redistribute it and/or modify it\r
6  * under the terms of version 2 of the GNU General Public License as\r
7  * published by the Free Software Foundation.\r
8  *\r
9  * This program is distributed in the hope that it will be useful, but WITHOUT\r
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
11  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
12  * more details.\r
13  *\r
14  * You should have received a copy of the GNU General Public License along with\r
15  * this program; if not, write to the Free Software Foundation, Inc.,\r
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
17  *\r
18  *\r
19  ******************************************************************************/\r
20 \r
21 //============================================================\r
22 // include files\r
23 //============================================================\r
24 #include "mp_precomp.h"\r
25 #include "phydm_precomp.h"\r
26 \r
27 //============================================================\r
28 // Global var\r
29 //============================================================\r
30 \r
31 u4Byte  OFDMSwingTable[OFDM_TABLE_SIZE] = {\r
32         0x7f8001fe,     // 0, +6.0dB\r
33         0x788001e2,     // 1, +5.5dB\r
34         0x71c001c7,     // 2, +5.0dB\r
35         0x6b8001ae,     // 3, +4.5dB\r
36         0x65400195,     // 4, +4.0dB\r
37         0x5fc0017f,     // 5, +3.5dB\r
38         0x5a400169,     // 6, +3.0dB\r
39         0x55400155,     // 7, +2.5dB\r
40         0x50800142,     // 8, +2.0dB\r
41         0x4c000130,     // 9, +1.5dB\r
42         0x47c0011f,     // 10, +1.0dB\r
43         0x43c0010f,     // 11, +0.5dB\r
44         0x40000100,     // 12, +0dB\r
45         0x3c8000f2,     // 13, -0.5dB\r
46         0x390000e4,     // 14, -1.0dB\r
47         0x35c000d7,     // 15, -1.5dB\r
48         0x32c000cb,     // 16, -2.0dB\r
49         0x300000c0,     // 17, -2.5dB\r
50         0x2d4000b5,     // 18, -3.0dB\r
51         0x2ac000ab,     // 19, -3.5dB\r
52         0x288000a2,     // 20, -4.0dB\r
53         0x26000098,     // 21, -4.5dB\r
54         0x24000090,     // 22, -5.0dB\r
55         0x22000088,     // 23, -5.5dB\r
56         0x20000080,     // 24, -6.0dB\r
57         0x1e400079,     // 25, -6.5dB\r
58         0x1c800072,     // 26, -7.0dB\r
59         0x1b00006c,     // 27. -7.5dB\r
60         0x19800066,     // 28, -8.0dB\r
61         0x18000060,     // 29, -8.5dB\r
62         0x16c0005b,     // 30, -9.0dB\r
63         0x15800056,     // 31, -9.5dB\r
64         0x14400051,     // 32, -10.0dB\r
65         0x1300004c,     // 33, -10.5dB\r
66         0x12000048,     // 34, -11.0dB\r
67         0x11000044,     // 35, -11.5dB\r
68         0x10000040,     // 36, -12.0dB\r
69 };\r
70 \r
71 u1Byte  CCKSwingTable_Ch1_Ch13[CCK_TABLE_SIZE][8] = {\r
72         {0x36, 0x35, 0x2e, 0x25, 0x1c, 0x12, 0x09, 0x04},       // 0, +0dB\r
73         {0x33, 0x32, 0x2b, 0x23, 0x1a, 0x11, 0x08, 0x04},       // 1, -0.5dB\r
74         {0x30, 0x2f, 0x29, 0x21, 0x19, 0x10, 0x08, 0x03},       // 2, -1.0dB\r
75         {0x2d, 0x2d, 0x27, 0x1f, 0x18, 0x0f, 0x08, 0x03},       // 3, -1.5dB\r
76         {0x2b, 0x2a, 0x25, 0x1e, 0x16, 0x0e, 0x07, 0x03},       // 4, -2.0dB \r
77         {0x28, 0x28, 0x22, 0x1c, 0x15, 0x0d, 0x07, 0x03},       // 5, -2.5dB\r
78         {0x26, 0x25, 0x21, 0x1b, 0x14, 0x0d, 0x06, 0x03},       // 6, -3.0dB\r
79         {0x24, 0x23, 0x1f, 0x19, 0x13, 0x0c, 0x06, 0x03},       // 7, -3.5dB\r
80         {0x22, 0x21, 0x1d, 0x18, 0x11, 0x0b, 0x06, 0x02},       // 8, -4.0dB \r
81         {0x20, 0x20, 0x1b, 0x16, 0x11, 0x08, 0x05, 0x02},       // 9, -4.5dB\r
82         {0x1f, 0x1e, 0x1a, 0x15, 0x10, 0x0a, 0x05, 0x02},       // 10, -5.0dB \r
83         {0x1d, 0x1c, 0x18, 0x14, 0x0f, 0x0a, 0x05, 0x02},       // 11, -5.5dB\r
84         {0x1b, 0x1a, 0x17, 0x13, 0x0e, 0x09, 0x04, 0x02},       // 12, -6.0dB <== default\r
85         {0x1a, 0x19, 0x16, 0x12, 0x0d, 0x09, 0x04, 0x02},       // 13, -6.5dB\r
86         {0x18, 0x17, 0x15, 0x11, 0x0c, 0x08, 0x04, 0x02},       // 14, -7.0dB \r
87         {0x17, 0x16, 0x13, 0x10, 0x0c, 0x08, 0x04, 0x02},       // 15, -7.5dB\r
88         {0x16, 0x15, 0x12, 0x0f, 0x0b, 0x07, 0x04, 0x01},       // 16, -8.0dB \r
89         {0x14, 0x14, 0x11, 0x0e, 0x0b, 0x07, 0x03, 0x02},       // 17, -8.5dB\r
90         {0x13, 0x13, 0x10, 0x0d, 0x0a, 0x06, 0x03, 0x01},       // 18, -9.0dB \r
91         {0x12, 0x12, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01},       // 19, -9.5dB\r
92         {0x11, 0x11, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01},       // 20, -10.0dB\r
93         {0x10, 0x10, 0x0e, 0x0b, 0x08, 0x05, 0x03, 0x01},       // 21, -10.5dB\r
94         {0x0f, 0x0f, 0x0d, 0x0b, 0x08, 0x05, 0x03, 0x01},       // 22, -11.0dB\r
95         {0x0e, 0x0e, 0x0c, 0x0a, 0x08, 0x05, 0x02, 0x01},       // 23, -11.5dB\r
96         {0x0d, 0x0d, 0x0c, 0x0a, 0x07, 0x05, 0x02, 0x01},       // 24, -12.0dB\r
97         {0x0d, 0x0c, 0x0b, 0x09, 0x07, 0x04, 0x02, 0x01},       // 25, -12.5dB\r
98         {0x0c, 0x0c, 0x0a, 0x09, 0x06, 0x04, 0x02, 0x01},       // 26, -13.0dB\r
99         {0x0b, 0x0b, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x01},       // 27, -13.5dB\r
100         {0x0b, 0x0a, 0x09, 0x08, 0x06, 0x04, 0x02, 0x01},       // 28, -14.0dB\r
101         {0x0a, 0x0a, 0x09, 0x07, 0x05, 0x03, 0x02, 0x01},       // 29, -14.5dB\r
102         {0x0a, 0x09, 0x08, 0x07, 0x05, 0x03, 0x02, 0x01},       // 30, -15.0dB\r
103         {0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01},       // 31, -15.5dB\r
104         {0x09, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x01}        // 32, -16.0dB\r
105 };\r
106 \r
107 \r
108 u1Byte  CCKSwingTable_Ch14[CCK_TABLE_SIZE][8] = {\r
109         {0x36, 0x35, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00},       // 0, +0dB  \r
110         {0x33, 0x32, 0x2b, 0x19, 0x00, 0x00, 0x00, 0x00},       // 1, -0.5dB \r
111         {0x30, 0x2f, 0x29, 0x18, 0x00, 0x00, 0x00, 0x00},       // 2, -1.0dB  \r
112         {0x2d, 0x2d, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00},       // 3, -1.5dB\r
113         {0x2b, 0x2a, 0x25, 0x15, 0x00, 0x00, 0x00, 0x00},       // 4, -2.0dB  \r
114         {0x28, 0x28, 0x24, 0x14, 0x00, 0x00, 0x00, 0x00},       // 5, -2.5dB\r
115         {0x26, 0x25, 0x21, 0x13, 0x00, 0x00, 0x00, 0x00},       // 6, -3.0dB  \r
116         {0x24, 0x23, 0x1f, 0x12, 0x00, 0x00, 0x00, 0x00},       // 7, -3.5dB  \r
117         {0x22, 0x21, 0x1d, 0x11, 0x00, 0x00, 0x00, 0x00},       // 8, -4.0dB  \r
118         {0x20, 0x20, 0x1b, 0x10, 0x00, 0x00, 0x00, 0x00},       // 9, -4.5dB\r
119         {0x1f, 0x1e, 0x1a, 0x0f, 0x00, 0x00, 0x00, 0x00},       // 10, -5.0dB  \r
120         {0x1d, 0x1c, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00},       // 11, -5.5dB\r
121         {0x1b, 0x1a, 0x17, 0x0e, 0x00, 0x00, 0x00, 0x00},       // 12, -6.0dB  <== default\r
122         {0x1a, 0x19, 0x16, 0x0d, 0x00, 0x00, 0x00, 0x00},       // 13, -6.5dB \r
123         {0x18, 0x17, 0x15, 0x0c, 0x00, 0x00, 0x00, 0x00},       // 14, -7.0dB  \r
124         {0x17, 0x16, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00},       // 15, -7.5dB\r
125         {0x16, 0x15, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00},       // 16, -8.0dB  \r
126         {0x14, 0x14, 0x11, 0x0a, 0x00, 0x00, 0x00, 0x00},       // 17, -8.5dB\r
127         {0x13, 0x13, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00},       // 18, -9.0dB  \r
128         {0x12, 0x12, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00},       // 19, -9.5dB\r
129         {0x11, 0x11, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00},       // 20, -10.0dB\r
130         {0x10, 0x10, 0x0e, 0x08, 0x00, 0x00, 0x00, 0x00},       // 21, -10.5dB\r
131         {0x0f, 0x0f, 0x0d, 0x08, 0x00, 0x00, 0x00, 0x00},       // 22, -11.0dB\r
132         {0x0e, 0x0e, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00},       // 23, -11.5dB\r
133         {0x0d, 0x0d, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00},       // 24, -12.0dB\r
134         {0x0d, 0x0c, 0x0b, 0x06, 0x00, 0x00, 0x00, 0x00},       // 25, -12.5dB\r
135         {0x0c, 0x0c, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00},       // 26, -13.0dB\r
136         {0x0b, 0x0b, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00},       // 27, -13.5dB\r
137         {0x0b, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00},       // 28, -14.0dB\r
138         {0x0a, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00},       // 29, -14.5dB\r
139         {0x0a, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00},       // 30, -15.0dB\r
140         {0x09, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00},       // 31, -15.5dB\r
141         {0x09, 0x08, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00}        // 32, -16.0dB\r
142 };\r
143 \r
144 \r
145 u4Byte OFDMSwingTable_New[OFDM_TABLE_SIZE] = {\r
146         0x0b40002d, // 0,  -15.0dB      \r
147         0x0c000030, // 1,  -14.5dB\r
148         0x0cc00033, // 2,  -14.0dB\r
149         0x0d800036, // 3,  -13.5dB\r
150         0x0e400039, // 4,  -13.0dB    \r
151         0x0f00003c, // 5,  -12.5dB\r
152         0x10000040, // 6,  -12.0dB\r
153         0x11000044, // 7,  -11.5dB\r
154         0x12000048, // 8,  -11.0dB\r
155         0x1300004c, // 9,  -10.5dB\r
156         0x14400051, // 10, -10.0dB\r
157         0x15800056, // 11, -9.5dB\r
158         0x16c0005b, // 12, -9.0dB\r
159         0x18000060, // 13, -8.5dB\r
160         0x19800066, // 14, -8.0dB\r
161         0x1b00006c, // 15, -7.5dB\r
162         0x1c800072, // 16, -7.0dB\r
163         0x1e400079, // 17, -6.5dB\r
164         0x20000080, // 18, -6.0dB\r
165         0x22000088, // 19, -5.5dB\r
166         0x24000090, // 20, -5.0dB\r
167         0x26000098, // 21, -4.5dB\r
168         0x288000a2, // 22, -4.0dB\r
169         0x2ac000ab, // 23, -3.5dB\r
170         0x2d4000b5, // 24, -3.0dB\r
171         0x300000c0, // 25, -2.5dB\r
172         0x32c000cb, // 26, -2.0dB\r
173         0x35c000d7, // 27, -1.5dB\r
174         0x390000e4, // 28, -1.0dB\r
175         0x3c8000f2, // 29, -0.5dB\r
176         0x40000100, // 30, +0dB\r
177         0x43c0010f, // 31, +0.5dB\r
178         0x47c0011f, // 32, +1.0dB\r
179         0x4c000130, // 33, +1.5dB\r
180         0x50800142, // 34, +2.0dB\r
181         0x55400155, // 35, +2.5dB\r
182         0x5a400169, // 36, +3.0dB\r
183         0x5fc0017f, // 37, +3.5dB\r
184         0x65400195, // 38, +4.0dB\r
185         0x6b8001ae, // 39, +4.5dB\r
186         0x71c001c7, // 40, +5.0dB\r
187         0x788001e2, // 41, +5.5dB\r
188         0x7f8001fe  // 42, +6.0dB\r
189 };               \r
190 \r
191 \r
192 u1Byte CCKSwingTable_Ch1_Ch14_88F[CCK_TABLE_SIZE_88F][16] = {\r
193 {0x44, 0x42, 0x3C, 0x33, 0x28, 0x1C, 0x13, 0x0B, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-16dB*/\r
194 {0x48, 0x46, 0x3F, 0x36, 0x2A, 0x1E, 0x14, 0x0B, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-15.5dB*/\r
195 {0x4D, 0x4A, 0x43, 0x39, 0x2C, 0x20, 0x15, 0x0C, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-15dB*/\r
196 {0x51, 0x4F, 0x47, 0x3C, 0x2F, 0x22, 0x16, 0x0D, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-14.5dB*/\r
197 {0x56, 0x53, 0x4B, 0x40, 0x32, 0x24, 0x17, 0x0E, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-14dB*/\r
198 {0x5B, 0x58, 0x50, 0x43, 0x35, 0x26, 0x19, 0x0E, 0x07, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-13.5dB*/\r
199 {0x60, 0x5D, 0x54, 0x47, 0x38, 0x28, 0x1A, 0x0F, 0x07, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-13dB*/\r
200 {0x66, 0x63, 0x59, 0x4C, 0x3B, 0x2B, 0x1C, 0x10, 0x08, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-12.5dB*/\r
201 {0x6C, 0x69, 0x5F, 0x50, 0x3F, 0x2D, 0x1E, 0x11, 0x08, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-12dB*/\r
202 {0x73, 0x6F, 0x64, 0x55, 0x42, 0x30, 0x1F, 0x12, 0x08, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-11.5dB*/\r
203 {0x79, 0x76, 0x6A, 0x5A, 0x46, 0x33, 0x21, 0x13, 0x09, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-11dB*/\r
204 {0x81, 0x7C, 0x71, 0x5F, 0x4A, 0x36, 0x23, 0x14, 0x0A, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-10.5dB*/\r
205 {0x88, 0x84, 0x77, 0x65, 0x4F, 0x39, 0x25, 0x15, 0x0A, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-10dB*/\r
206 {0x90, 0x8C, 0x7E, 0x6B, 0x54, 0x3C, 0x27, 0x17, 0x0B, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-9.5dB*/\r
207 {0x99, 0x94, 0x86, 0x71, 0x58, 0x40, 0x2A, 0x18, 0x0B, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-9dB*/\r
208 {0xA2, 0x9D, 0x8E, 0x78, 0x5E, 0x43, 0x2C, 0x19, 0x0C, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-8.5dB*/\r
209 {0xAC, 0xA6, 0x96, 0x7F, 0x63, 0x47, 0x2F, 0x1B, 0x0D, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-8dB*/\r
210 {0xB6, 0xB0, 0x9F, 0x87, 0x69, 0x4C, 0x32, 0x1D, 0x0D, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-7.5dB*/\r
211 {0xC1, 0xBA, 0xA8, 0x8F, 0x6F, 0x50, 0x35, 0x1E, 0x0E, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-7dB*/\r
212 {0xCC, 0xC5, 0xB2, 0x97, 0x76, 0x55, 0x38, 0x20, 0x0F, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-6.5dB*/\r
213 {0xD8, 0xD1, 0xBD, 0xA0, 0x7D, 0x5A, 0x3B, 0x22, 0x10, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}     /*-6dB*/\r
214 };\r
215 \r
216 \r
217 u1Byte CCKSwingTable_Ch1_Ch13_88F[CCK_TABLE_SIZE_88F][16] = {\r
218 {0x44, 0x42, 0x3C, 0x33, 0x28, 0x1C, 0x13, 0x0B, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-16dB*/\r
219 {0x48, 0x46, 0x3F, 0x36, 0x2A, 0x1E, 0x14, 0x0B, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-15.5dB*/\r
220 {0x4D, 0x4A, 0x43, 0x39, 0x2C, 0x20, 0x15, 0x0C, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-15dB*/\r
221 {0x51, 0x4F, 0x47, 0x3C, 0x2F, 0x22, 0x16, 0x0D, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-14.5dB*/\r
222 {0x56, 0x53, 0x4B, 0x40, 0x32, 0x24, 0x17, 0x0E, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-14dB*/\r
223 {0x5B, 0x58, 0x50, 0x43, 0x35, 0x26, 0x19, 0x0E, 0x07, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-13.5dB*/\r
224 {0x60, 0x5D, 0x54, 0x47, 0x38, 0x28, 0x1A, 0x0F, 0x07, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-13dB*/\r
225 {0x66, 0x63, 0x59, 0x4C, 0x3B, 0x2B, 0x1C, 0x10, 0x08, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-12.5dB*/\r
226 {0x6C, 0x69, 0x5F, 0x50, 0x3F, 0x2D, 0x1E, 0x11, 0x08, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-12dB*/\r
227 {0x73, 0x6F, 0x64, 0x55, 0x42, 0x30, 0x1F, 0x12, 0x08, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-11.5dB*/\r
228 {0x79, 0x76, 0x6A, 0x5A, 0x46, 0x33, 0x21, 0x13, 0x09, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-11dB*/\r
229 {0x81, 0x7C, 0x71, 0x5F, 0x4A, 0x36, 0x23, 0x14, 0x0A, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-10.5dB*/\r
230 {0x88, 0x84, 0x77, 0x65, 0x4F, 0x39, 0x25, 0x15, 0x0A, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-10dB*/\r
231 {0x90, 0x8C, 0x7E, 0x6B, 0x54, 0x3C, 0x27, 0x17, 0x0B, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-9.5dB*/\r
232 {0x99, 0x94, 0x86, 0x71, 0x58, 0x40, 0x2A, 0x18, 0x0B, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-9dB*/\r
233 {0xA2, 0x9D, 0x8E, 0x78, 0x5E, 0x43, 0x2C, 0x19, 0x0C, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-8.5dB*/\r
234 {0xAC, 0xA6, 0x96, 0x7F, 0x63, 0x47, 0x2F, 0x1B, 0x0D, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-8dB*/\r
235 {0xB6, 0xB0, 0x9F, 0x87, 0x69, 0x4C, 0x32, 0x1D, 0x0D, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-7.5dB*/\r
236 {0xC1, 0xBA, 0xA8, 0x8F, 0x6F, 0x50, 0x35, 0x1E, 0x0E, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-7dB*/\r
237 {0xCC, 0xC5, 0xB2, 0x97, 0x76, 0x55, 0x38, 0x20, 0x0F, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-6.5dB*/\r
238 {0xD8, 0xD1, 0xBD, 0xA0, 0x7D, 0x5A, 0x3B, 0x22, 0x10, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}     /*-6dB*/\r
239 };\r
240 \r
241 \r
242 u1Byte CCKSwingTable_Ch14_88F[CCK_TABLE_SIZE_88F][16] = {\r
243 {0x44,   0x42, 0x3C, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-16dB*/\r
244 {0x48, 0x46, 0x3F, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-15.5dB*/\r
245 {0x4D, 0x4A, 0x43, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-15dB*/\r
246 {0x51, 0x4F, 0x47, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},           /*-14.5dB*/\r
247 {0x56, 0x53, 0x4B, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-14dB*/\r
248 {0x5B, 0x58, 0x50, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-13.5dB*/\r
249 {0x60, 0x5D, 0x54, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-13dB*/\r
250 {0x66, 0x63, 0x59, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-12.5dB*/\r
251 {0x6C, 0x69, 0x5F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-12dB*/\r
252 {0x73, 0x6F, 0x64, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-11.5dB*/\r
253 {0x79, 0x76, 0x6A, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-11dB*/\r
254 {0x81, 0x7C, 0x71, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-10.5dB*/\r
255 {0x88, 0x84, 0x77, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-10dB*/\r
256 {0x90, 0x8C, 0x7E, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-9.5dB*/\r
257 {0x99, 0x94, 0x86, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-9dB*/\r
258 {0xA2, 0x9D, 0x8E, 0x5E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-8.5dB*/\r
259 {0xAC, 0xA6, 0x96, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-8dB*/\r
260 {0xB6, 0xB0, 0x9F, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-7.5dB*/\r
261 {0xC1, 0xBA, 0xA8, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-7dB*/\r
262 {0xCC, 0xC5, 0xB2, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-6.5dB*/\r
263 {0xD8, 0xD1, 0xBD, 0x7D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}     /*-6dB*/\r
264 };\r
265 \r
266 \r
267 \r
268 \r
269 u1Byte CCKSwingTable_Ch1_Ch13_New[CCK_TABLE_SIZE][8] = {\r
270         {0x09, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x01},       //  0, -16.0dB\r
271         {0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01},       //  1, -15.5dB\r
272         {0x0a, 0x09, 0x08, 0x07, 0x05, 0x03, 0x02, 0x01},       //  2, -15.0dB\r
273         {0x0a, 0x0a, 0x09, 0x07, 0x05, 0x03, 0x02, 0x01},       //  3, -14.5dB\r
274         {0x0b, 0x0a, 0x09, 0x08, 0x06, 0x04, 0x02, 0x01},       //  4, -14.0dB\r
275         {0x0b, 0x0b, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x01},       //  5, -13.5dB\r
276         {0x0c, 0x0c, 0x0a, 0x09, 0x06, 0x04, 0x02, 0x01},       //  6, -13.0dB\r
277         {0x0d, 0x0c, 0x0b, 0x09, 0x07, 0x04, 0x02, 0x01},       //  7, -12.5dB\r
278         {0x0d, 0x0d, 0x0c, 0x0a, 0x07, 0x05, 0x02, 0x01},       //  8, -12.0dB\r
279         {0x0e, 0x0e, 0x0c, 0x0a, 0x08, 0x05, 0x02, 0x01},       //  9, -11.5dB\r
280         {0x0f, 0x0f, 0x0d, 0x0b, 0x08, 0x05, 0x03, 0x01},       // 10, -11.0dB\r
281         {0x10, 0x10, 0x0e, 0x0b, 0x08, 0x05, 0x03, 0x01},       // 11, -10.5dB\r
282         {0x11, 0x11, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01},       // 12, -10.0dB\r
283         {0x12, 0x12, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01},       // 13, -9.5dB\r
284         {0x13, 0x13, 0x10, 0x0d, 0x0a, 0x06, 0x03, 0x01},       // 14, -9.0dB \r
285         {0x14, 0x14, 0x11, 0x0e, 0x0b, 0x07, 0x03, 0x02},       // 15, -8.5dB\r
286         {0x16, 0x15, 0x12, 0x0f, 0x0b, 0x07, 0x04, 0x01},       // 16, -8.0dB \r
287         {0x17, 0x16, 0x13, 0x10, 0x0c, 0x08, 0x04, 0x02},       // 17, -7.5dB\r
288         {0x18, 0x17, 0x15, 0x11, 0x0c, 0x08, 0x04, 0x02},       // 18, -7.0dB \r
289         {0x1a, 0x19, 0x16, 0x12, 0x0d, 0x09, 0x04, 0x02},       // 19, -6.5dB\r
290     {0x1b, 0x1a, 0x17, 0x13, 0x0e, 0x09, 0x04, 0x02},   // 20, -6.0dB \r
291         {0x1d, 0x1c, 0x18, 0x14, 0x0f, 0x0a, 0x05, 0x02},       // 21, -5.5dB\r
292         {0x1f, 0x1e, 0x1a, 0x15, 0x10, 0x0a, 0x05, 0x02},       // 22, -5.0dB \r
293         {0x20, 0x20, 0x1b, 0x16, 0x11, 0x08, 0x05, 0x02},       // 23, -4.5dB\r
294         {0x22, 0x21, 0x1d, 0x18, 0x11, 0x0b, 0x06, 0x02},       // 24, -4.0dB \r
295         {0x24, 0x23, 0x1f, 0x19, 0x13, 0x0c, 0x06, 0x03},       // 25, -3.5dB\r
296         {0x26, 0x25, 0x21, 0x1b, 0x14, 0x0d, 0x06, 0x03},       // 26, -3.0dB\r
297         {0x28, 0x28, 0x22, 0x1c, 0x15, 0x0d, 0x07, 0x03},       // 27, -2.5dB\r
298         {0x2b, 0x2a, 0x25, 0x1e, 0x16, 0x0e, 0x07, 0x03},       // 28, -2.0dB \r
299         {0x2d, 0x2d, 0x27, 0x1f, 0x18, 0x0f, 0x08, 0x03},       // 29, -1.5dB\r
300         {0x30, 0x2f, 0x29, 0x21, 0x19, 0x10, 0x08, 0x03},       // 30, -1.0dB\r
301         {0x33, 0x32, 0x2b, 0x23, 0x1a, 0x11, 0x08, 0x04},       // 31, -0.5dB\r
302         {0x36, 0x35, 0x2e, 0x25, 0x1c, 0x12, 0x09, 0x04}        // 32, +0dB\r
303 };                                                                  \r
304 \r
305 \r
306 u1Byte CCKSwingTable_Ch14_New[CCK_TABLE_SIZE][8]= {\r
307         {0x09, 0x08, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00},       //  0, -16.0dB\r
308         {0x09, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00},       //  1, -15.5dB\r
309         {0x0a, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00},       //  2, -15.0dB\r
310         {0x0a, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00},       //  3, -14.5dB\r
311         {0x0b, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00},       //  4, -14.0dB\r
312         {0x0b, 0x0b, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00},       //  5, -13.5dB\r
313         {0x0c, 0x0c, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00},       //  6, -13.0dB\r
314         {0x0d, 0x0c, 0x0b, 0x06, 0x00, 0x00, 0x00, 0x00},       //  7, -12.5dB\r
315         {0x0d, 0x0d, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00},       //  8, -12.0dB\r
316         {0x0e, 0x0e, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00},       //  9, -11.5dB\r
317         {0x0f, 0x0f, 0x0d, 0x08, 0x00, 0x00, 0x00, 0x00},       // 10, -11.0dB\r
318         {0x10, 0x10, 0x0e, 0x08, 0x00, 0x00, 0x00, 0x00},       // 11, -10.5dB\r
319         {0x11, 0x11, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00},       // 12, -10.0dB\r
320         {0x12, 0x12, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00},       // 13, -9.5dB\r
321         {0x13, 0x13, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00},       // 14, -9.0dB  \r
322         {0x14, 0x14, 0x11, 0x0a, 0x00, 0x00, 0x00, 0x00},       // 15, -8.5dB\r
323         {0x16, 0x15, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00},       // 16, -8.0dB  \r
324         {0x17, 0x16, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00},       // 17, -7.5dB\r
325         {0x18, 0x17, 0x15, 0x0c, 0x00, 0x00, 0x00, 0x00},       // 18, -7.0dB  \r
326         {0x1a, 0x19, 0x16, 0x0d, 0x00, 0x00, 0x00, 0x00},       // 19, -6.5dB \r
327         {0x1b, 0x1a, 0x17, 0x0e, 0x00, 0x00, 0x00, 0x00},       // 20, -6.0dB  \r
328         {0x1d, 0x1c, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00},       // 21, -5.5dB\r
329         {0x1f, 0x1e, 0x1a, 0x0f, 0x00, 0x00, 0x00, 0x00},       // 22, -5.0dB  \r
330         {0x20, 0x20, 0x1b, 0x10, 0x00, 0x00, 0x00, 0x00},       // 23, -4.5dB\r
331         {0x22, 0x21, 0x1d, 0x11, 0x00, 0x00, 0x00, 0x00},       // 24, -4.0dB  \r
332         {0x24, 0x23, 0x1f, 0x12, 0x00, 0x00, 0x00, 0x00},       // 25, -3.5dB  \r
333         {0x26, 0x25, 0x21, 0x13, 0x00, 0x00, 0x00, 0x00},       // 26, -3.0dB  \r
334         {0x28, 0x28, 0x24, 0x14, 0x00, 0x00, 0x00, 0x00},       // 27, -2.5dB\r
335         {0x2b, 0x2a, 0x25, 0x15, 0x00, 0x00, 0x00, 0x00},       // 28, -2.0dB  \r
336         {0x2d, 0x2d, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00},       // 29, -1.5dB\r
337         {0x30, 0x2f, 0x29, 0x18, 0x00, 0x00, 0x00, 0x00},       // 30, -1.0dB  \r
338         {0x33, 0x32, 0x2b, 0x19, 0x00, 0x00, 0x00, 0x00},       // 31, -0.5dB \r
339         {0x36, 0x35, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00}        // 32, +0dB     \r
340 };\r
341 u4Byte CCKSwingTable_Ch1_Ch14_8723D[CCK_TABLE_SIZE_8723D] = {\r
342         0x0CD,         \r
343         0x0D9,        \r
344         0x0E6,         \r
345         0x0F3,      \r
346         0x102,         \r
347         0x111,         \r
348         0x121,         \r
349         0x132,        \r
350         0x144,         \r
351         0x158,      \r
352         0x16C,        \r
353         0x182,        \r
354         0x198,        \r
355         0x1B1,        \r
356         0x1CA,      \r
357         0x1E5,         \r
358         0x202,        \r
359         0x221,        \r
360         0x241,        \r
361         0x263,        \r
362         0x287,       \r
363         0x2AE,        \r
364         0x2D6,         \r
365         0x301,        \r
366         0x32F,       \r
367         0x35F,       \r
368         0x392,        \r
369         0x3C9,        \r
370         0x402,        \r
371         0x43F,      \r
372         0x47F,      \r
373         0x4C3,        \r
374         0x50C,         \r
375         0x558,      \r
376         0x5A9,         \r
377         0x5FF,         \r
378         0x65A,        \r
379         0x6BA,       \r
380         0x720,        \r
381         0x78C,        \r
382         0x7FF,        \r
383 };\r
384 \r
385 \r
386 u4Byte TxScalingTable_Jaguar[TXSCALE_TABLE_SIZE] =\r
387 {\r
388         0x081, // 0,  -12.0dB\r
389         0x088, // 1,  -11.5dB\r
390         0x090, // 2,  -11.0dB\r
391         0x099, // 3,  -10.5dB\r
392         0x0A2, // 4,  -10.0dB\r
393         0x0AC, // 5,  -9.5dB\r
394         0x0B6, // 6,  -9.0dB\r
395         0x0C0, // 7,  -8.5dB\r
396         0x0CC, // 8,  -8.0dB\r
397         0x0D8, // 9,  -7.5dB\r
398         0x0E5, // 10, -7.0dB\r
399         0x0F2, // 11, -6.5dB\r
400         0x101, // 12, -6.0dB\r
401         0x110, // 13, -5.5dB\r
402         0x120, // 14, -5.0dB\r
403         0x131, // 15, -4.5dB\r
404         0x143, // 16, -4.0dB\r
405         0x156, // 17, -3.5dB\r
406         0x16A, // 18, -3.0dB\r
407         0x180, // 19, -2.5dB\r
408         0x197, // 20, -2.0dB\r
409         0x1AF, // 21, -1.5dB\r
410         0x1C8, // 22, -1.0dB\r
411         0x1E3, // 23, -0.5dB\r
412         0x200, // 24, +0  dB\r
413         0x21E, // 25, +0.5dB\r
414         0x23E, // 26, +1.0dB\r
415         0x261, // 27, +1.5dB\r
416         0x285, // 28, +2.0dB\r
417         0x2AB, // 29, +2.5dB\r
418         0x2D3, // 30, +3.0dB\r
419         0x2FE, // 31, +3.5dB\r
420         0x32B, // 32, +4.0dB\r
421         0x35C, // 33, +4.5dB\r
422         0x38E, // 34, +5.0dB\r
423         0x3C4, // 35, +5.5dB\r
424         0x3FE  // 36, +6.0dB    \r
425 };\r
426 \r
427 \r
428 #ifdef AP_BUILD_WORKAROUND\r
429 \r
430 unsigned int TxPwrTrk_OFDM_SwingTbl[TxPwrTrk_OFDM_SwingTbl_Len] = {\r
431         /*  +6.0dB */ 0x7f8001fe,\r
432         /*  +5.5dB */ 0x788001e2,\r
433         /*  +5.0dB */ 0x71c001c7,\r
434         /*  +4.5dB */ 0x6b8001ae,\r
435         /*  +4.0dB */ 0x65400195,\r
436         /*  +3.5dB */ 0x5fc0017f,\r
437         /*  +3.0dB */ 0x5a400169,\r
438         /*  +2.5dB */ 0x55400155,\r
439         /*  +2.0dB */ 0x50800142,\r
440         /*  +1.5dB */ 0x4c000130,\r
441         /*  +1.0dB */ 0x47c0011f,\r
442         /*  +0.5dB */ 0x43c0010f,\r
443         /*   0.0dB */ 0x40000100,\r
444         /*  -0.5dB */ 0x3c8000f2,\r
445         /*  -1.0dB */ 0x390000e4,\r
446         /*  -1.5dB */ 0x35c000d7,\r
447         /*  -2.0dB */ 0x32c000cb,\r
448         /*  -2.5dB */ 0x300000c0,\r
449         /*  -3.0dB */ 0x2d4000b5,\r
450         /*  -3.5dB */ 0x2ac000ab,\r
451         /*  -4.0dB */ 0x288000a2,\r
452         /*  -4.5dB */ 0x26000098,\r
453         /*  -5.0dB */ 0x24000090,\r
454         /*  -5.5dB */ 0x22000088,\r
455         /*  -6.0dB */ 0x20000080,\r
456         /*  -6.5dB */ 0x1a00006c,\r
457         /*  -7.0dB */ 0x1c800072,\r
458         /*  -7.5dB */ 0x18000060,\r
459         /*  -8.0dB */ 0x19800066,\r
460         /*  -8.5dB */ 0x15800056,\r
461         /*  -9.0dB */ 0x26c0005b,\r
462         /*  -9.5dB */ 0x14400051,\r
463         /* -10.0dB */ 0x24400051,\r
464         /* -10.5dB */ 0x1300004c,\r
465         /* -11.0dB */ 0x12000048,\r
466         /* -11.5dB */ 0x11000044,\r
467         /* -12.0dB */ 0x10000040\r
468 };\r
469 \r
470 #endif\r
471 \r
472 VOID\r
473 odm_TXPowerTrackingInit(\r
474         IN      PVOID           pDM_VOID\r
475         )\r
476 {\r
477         PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
478 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
479         if (!(pDM_Odm->SupportICType & (ODM_RTL8814A | ODM_IC_11N_SERIES | ODM_RTL8822B)))\r
480                 return;\r
481 #endif\r
482 \r
483         odm_TXPowerTrackingThermalMeterInit(pDM_Odm);\r
484 }       \r
485 \r
486 u1Byte \r
487 getSwingIndex(\r
488         IN      PVOID           pDM_VOID\r
489         )\r
490 {\r
491         PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
492         PADAPTER                Adapter = pDM_Odm->Adapter;\r
493         HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);\r
494         u1Byte                  i = 0;\r
495         u4Byte                  bbSwing;\r
496         u4Byte                  swingTableSize;\r
497         pu4Byte                         pSwingTable;\r
498 \r
499         if (pDM_Odm->SupportICType == ODM_RTL8188E || pDM_Odm->SupportICType == ODM_RTL8723B ||\r
500                 pDM_Odm->SupportICType == ODM_RTL8192E || pDM_Odm->SupportICType == ODM_RTL8188F || pDM_Odm->SupportICType == ODM_RTL8703B) \r
501         {\r
502                 bbSwing = PHY_QueryBBReg(Adapter, rOFDM0_XATxIQImbalance, 0xFFC00000);\r
503 \r
504                 pSwingTable = OFDMSwingTable_New;\r
505                 swingTableSize = OFDM_TABLE_SIZE;\r
506         } else {\r
507                 bbSwing = PHY_GetTxBBSwing_8812A(Adapter, pHalData->CurrentBandType, ODM_RF_PATH_A);\r
508                 pSwingTable = TxScalingTable_Jaguar;\r
509                 swingTableSize = TXSCALE_TABLE_SIZE;            \r
510         }\r
511 \r
512         for (i = 0; i < swingTableSize; ++i) {\r
513                 u4Byte tableValue = pSwingTable[i];\r
514                 \r
515                 if (tableValue >= 0x100000 )\r
516                         tableValue >>= 22;\r
517                 if (bbSwing == tableValue)\r
518                         break;\r
519         }\r
520         return i;\r
521 }\r
522 \r
523 VOID\r
524 odm_TXPowerTrackingThermalMeterInit(\r
525         IN      PVOID           pDM_VOID\r
526         )\r
527 {\r
528         PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
529         u1Byte defaultSwingIndex = getSwingIndex(pDM_Odm);\r
530         PODM_RF_CAL_T   pRFCalibrateInfo = &(pDM_Odm->RFCalibrateInfo);\r
531         \r
532 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
533         PADAPTER                Adapter = pDM_Odm->Adapter;\r
534         HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);\r
535         u1Byte                  p = 0;\r
536 \r
537         if(pDM_Odm->mp_mode == FALSE)\r
538                 pRFCalibrateInfo->TxPowerTrackControl = TRUE;\r
539 #elif (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
540         #ifdef CONFIG_RTL8188E\r
541         {\r
542                 pRFCalibrateInfo->bTXPowerTracking = _TRUE;\r
543                 pRFCalibrateInfo->TXPowercount = 0;\r
544                 pRFCalibrateInfo->bTXPowerTrackingInit = _FALSE;\r
545 \r
546                 if(pDM_Odm->mp_mode == FALSE)\r
547                         pRFCalibrateInfo->TxPowerTrackControl = _TRUE;\r
548                 \r
549                 MSG_8192C("pDM_Odm TxPowerTrackControl = %d\n", pRFCalibrateInfo->TxPowerTrackControl);\r
550         }\r
551         #else\r
552         {\r
553                 PADAPTER                Adapter = pDM_Odm->Adapter;\r
554                 HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);\r
555                 struct dm_priv  *pdmpriv = &pHalData->dmpriv;\r
556 \r
557                 pdmpriv->bTXPowerTracking = _TRUE;\r
558                 pdmpriv->TXPowercount = 0;\r
559                 pdmpriv->bTXPowerTrackingInit = _FALSE;\r
560 \r
561                 if(pDM_Odm->mp_mode == FALSE)\r
562                         pdmpriv->TxPowerTrackControl = _TRUE;\r
563 \r
564                 MSG_8192C("pdmpriv->TxPowerTrackControl = %d\n", pdmpriv->TxPowerTrackControl);\r
565         \r
566         }       \r
567         #endif\r
568 #elif (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
569         #ifdef RTL8188E_SUPPORT\r
570         {\r
571                 pRFCalibrateInfo->bTXPowerTracking = _TRUE;\r
572                 pRFCalibrateInfo->TXPowercount = 0;\r
573                 pRFCalibrateInfo->bTXPowerTrackingInit = _FALSE;\r
574                 pRFCalibrateInfo->TxPowerTrackControl = _TRUE;\r
575         }\r
576         #endif\r
577 #endif\r
578 \r
579 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
580         #if (MP_DRIVER == 1)\r
581                 pRFCalibrateInfo->TxPowerTrackControl = FALSE;\r
582         #else\r
583                 pRFCalibrateInfo->TxPowerTrackControl = TRUE;\r
584         #endif\r
585 #else\r
586         pRFCalibrateInfo->TxPowerTrackControl = TRUE;\r
587 #endif\r
588 \r
589         pRFCalibrateInfo->ThermalValue          = pHalData->EEPROMThermalMeter;\r
590         pRFCalibrateInfo->ThermalValue_IQK      = pHalData->EEPROMThermalMeter;\r
591         pRFCalibrateInfo->ThermalValue_LCK      = pHalData->EEPROMThermalMeter;\r
592 \r
593         if (pRFCalibrateInfo->DefaultBbSwingIndexFlag != TRUE) {\r
594                 /*The index of "0 dB" in SwingTable.*/\r
595                 if (pDM_Odm->SupportICType == ODM_RTL8188E || pDM_Odm->SupportICType == ODM_RTL8723B ||\r
596                         pDM_Odm->SupportICType == ODM_RTL8192E || pDM_Odm->SupportICType == ODM_RTL8703B) {\r
597                         pRFCalibrateInfo->DefaultOfdmIndex = (defaultSwingIndex >= OFDM_TABLE_SIZE) ? 30 : defaultSwingIndex;\r
598                         pRFCalibrateInfo->DefaultCckIndex = 20; \r
599                 } else if (pDM_Odm->SupportICType == ODM_RTL8188F) {          /*add by Mingzhi.Guo  2015-03-23*/\r
600                         pRFCalibrateInfo->DefaultOfdmIndex = 28;                                                        /*OFDM: -1dB*/\r
601                         pRFCalibrateInfo->DefaultCckIndex = 20;                                                 /*CCK:-6dB*/\r
602                 } else if (pDM_Odm->SupportICType == ODM_RTL8723D) {                     /*add by zhaohe  2015-10-27*/\r
603                         pRFCalibrateInfo->DefaultOfdmIndex = 28;                                                           /*OFDM: -1dB*/\r
604                         pRFCalibrateInfo->DefaultCckIndex = 28;                                                 /*CCK:   -6dB*/\r
605                 } else {\r
606                         pRFCalibrateInfo->DefaultOfdmIndex = (defaultSwingIndex >= TXSCALE_TABLE_SIZE) ? 24 : defaultSwingIndex;\r
607                         pRFCalibrateInfo->DefaultCckIndex = 24; \r
608                 }\r
609                 pRFCalibrateInfo->DefaultBbSwingIndexFlag = TRUE;\r
610         }\r
611 \r
612         pRFCalibrateInfo->BbSwingIdxCckBase = pRFCalibrateInfo->DefaultCckIndex;\r
613         pRFCalibrateInfo->CCK_index = pRFCalibrateInfo->DefaultCckIndex;\r
614         \r
615         for (p = ODM_RF_PATH_A; p < MAX_RF_PATH; ++p)\r
616         {\r
617                 pRFCalibrateInfo->BbSwingIdxOfdmBase[p] = pRFCalibrateInfo->DefaultOfdmIndex;           \r
618                 pRFCalibrateInfo->OFDM_index[p] = pRFCalibrateInfo->DefaultOfdmIndex;           \r
619                 pRFCalibrateInfo->DeltaPowerIndex[p] = 0;\r
620                 pRFCalibrateInfo->DeltaPowerIndexLast[p] = 0;\r
621                 pRFCalibrateInfo->PowerIndexOffset[p] = 0;\r
622                 pRFCalibrateInfo->KfreeOffset[p] = 0;\r
623         }\r
624         pRFCalibrateInfo->Modify_TxAGC_Value_OFDM = 0;                  \r
625         pRFCalibrateInfo->Modify_TxAGC_Value_CCK = 0;                   \r
626 \r
627 }\r
628 \r
629 \r
630 VOID\r
631 ODM_TXPowerTrackingCheck(\r
632         IN      PVOID           pDM_VOID\r
633         )\r
634 {\r
635         \r
636         /* 2011/09/29 MH In HW integration first stage, we provide 4 different handle to operate\r
637         // at the same time. In the stage2/3, we need to prive universal interface and merge all\r
638         // HW dynamic mechanism.*/\r
639         \r
640         PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
641         switch  (pDM_Odm->SupportPlatform)\r
642         {\r
643                 case    ODM_WIN:\r
644                         odm_TXPowerTrackingCheckMP(pDM_Odm);\r
645                         break;\r
646 \r
647                 case    ODM_CE:\r
648                         odm_TXPowerTrackingCheckCE(pDM_Odm);\r
649                         break;\r
650 \r
651                 case    ODM_AP:\r
652                         odm_TXPowerTrackingCheckAP(pDM_Odm);            \r
653                         break;          \r
654 \r
655                 default:\r
656                         break;  \r
657         }\r
658 \r
659 }\r
660 \r
661 VOID\r
662 odm_TXPowerTrackingCheckCE(\r
663         IN      PVOID           pDM_VOID\r
664         )\r
665 {\r
666         PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
667 #if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
668         PADAPTER        Adapter = pDM_Odm->Adapter;\r
669         #if ((RTL8188F_SUPPORT == 1))\r
670         rtl8192c_odm_CheckTXPowerTracking(Adapter);\r
671         #endif\r
672 \r
673         #if(RTL8188E_SUPPORT==1)\r
674 \r
675         if (!(pDM_Odm->SupportAbility & ODM_RF_TX_PWR_TRACK)) {\r
676                 return;\r
677         }\r
678 \r
679         if (!pRFCalibrateInfo->TM_Trigger) {\r
680                 ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_T_METER, bRFRegOffsetMask, 0x60);\r
681                 /*DBG_8192C("Trigger 92C Thermal Meter!!\n");*/\r
682                 \r
683                 pRFCalibrateInfo->TM_Trigger = 1;\r
684                 return;\r
685                 \r
686         } else {\r
687                 /*DBG_8192C("Schedule TxPowerTracking direct call!!\n");*/\r
688                 odm_TXPowerTrackingCallback_ThermalMeter_8188E(Adapter);\r
689                 pRFCalibrateInfo->TM_Trigger = 0;\r
690         }\r
691         #endif\r
692 #endif  \r
693 }\r
694 \r
695 VOID\r
696 odm_TXPowerTrackingCheckMP(\r
697         IN      PVOID           pDM_VOID\r
698         )\r
699 {\r
700         PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
701 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
702         PADAPTER        Adapter = pDM_Odm->Adapter;\r
703 \r
704         if (*pDM_Odm->pIsFcsModeEnable)\r
705                 return;\r
706 \r
707         if (ODM_CheckPowerStatus(Adapter) == FALSE) \r
708         {\r
709                 RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD, ("===>ODM_CheckPowerStatus() return FALSE\n"));\r
710                 return;\r
711         }\r
712 \r
713         if (IS_HARDWARE_TYPE_8821B(Adapter)) /* TODO: Don't Do PowerTracking*/\r
714                 return;\r
715         \r
716         odm_TXPowerTrackingThermalMeterCheck(Adapter);\r
717         \r
718 \r
719 #endif\r
720         \r
721 }\r
722 \r
723 \r
724 VOID\r
725 odm_TXPowerTrackingCheckAP(\r
726         IN      PVOID           pDM_VOID\r
727         )\r
728 {\r
729 return;\r
730 \r
731 }\r
732 \r
733 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
734 \r
735 VOID\r
736 odm_TXPowerTrackingDirectCall(\r
737         IN      PADAPTER                Adapter\r
738         )\r
739 {\r
740         HAL_DATA_TYPE           *pHalData       = GET_HAL_DATA(Adapter);\r
741         PDM_ODM_T                       pDM_Odm = &pHalData->DM_OutSrc;\r
742         \r
743         ODM_TXPowerTrackingCallback_ThermalMeter(Adapter);\r
744 }\r
745 \r
746 VOID\r
747 odm_TXPowerTrackingThermalMeterCheck(\r
748         IN      PADAPTER                Adapter\r
749         )\r
750 {\r
751 #ifndef AP_BUILD_WORKAROUND\r
752         static u1Byte                   TM_Trigger = 0;\r
753 \r
754         if (!(GET_HAL_DATA(Adapter)->DM_OutSrc.SupportAbility & ODM_RF_TX_PWR_TRACK))\r
755         {\r
756                 RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,\r
757                         ("===>odm_TXPowerTrackingThermalMeterCheck(),pMgntInfo->bTXPowerTracking is FALSE, return!!\n"));\r
758                 return;\r
759         }\r
760 \r
761         if (!TM_Trigger)                \r
762         {\r
763                 if (IS_HARDWARE_TYPE_8188E(Adapter) || IS_HARDWARE_TYPE_JAGUAR(Adapter) || IS_HARDWARE_TYPE_8192E(Adapter) ||\r
764                             IS_HARDWARE_TYPE_8723B(Adapter) || IS_HARDWARE_TYPE_8814A(Adapter) || IS_HARDWARE_TYPE_8188F(Adapter) || IS_HARDWARE_TYPE_8703B(Adapter)\r
765                             || IS_HARDWARE_TYPE_8822B(Adapter) || IS_HARDWARE_TYPE_8723D(Adapter) || IS_HARDWARE_TYPE_8821C(Adapter))\r
766                         PHY_SetRFReg(Adapter, ODM_RF_PATH_A, RF_T_METER_88E, BIT17 | BIT16, 0x03);\r
767                 else\r
768                         PHY_SetRFReg(Adapter, ODM_RF_PATH_A, RF_T_METER, bRFRegOffsetMask, 0x60);\r
769                 \r
770                 RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("Trigger Thermal Meter!!\n"));\r
771                 \r
772                 TM_Trigger = 1;\r
773                 return;\r
774         } else {\r
775                 RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("Schedule TxPowerTracking direct call!!\n"));           \r
776                 odm_TXPowerTrackingDirectCall(Adapter); \r
777                 TM_Trigger = 0;\r
778         }\r
779 #endif\r
780 }\r
781 \r
782 #endif \r
783 \r
784 \r