net: wireless: rockchip_wlan: add rtl8723cs support
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8723cs / hal / phydm / phydm_powertracking_ap.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 #if !defined(_OUTSRC_COEXIST)
28 /* ************************************************************
29  * Global var
30  * ************************************************************ */
31
32
33 u32 ofdm_swing_table_new[OFDM_TABLE_SIZE_92D] = {
34         0x0b40002d, /* 0,  -15.0dB */
35         0x0c000030, /* 1,  -14.5dB */
36         0x0cc00033, /* 2,  -14.0dB */
37         0x0d800036, /* 3,  -13.5dB */
38         0x0e400039, /* 4,  -13.0dB */
39         0x0f00003c, /* 5,  -12.5dB */
40         0x10000040, /* 6,  -12.0dB */
41         0x11000044, /* 7,  -11.5dB */
42         0x12000048, /* 8,  -11.0dB */
43         0x1300004c, /* 9,  -10.5dB */
44         0x14400051, /* 10, -10.0dB */
45         0x15800056, /* 11, -9.5dB */
46         0x16c0005b, /* 12, -9.0dB */
47         0x18000060, /* 13, -8.5dB */
48         0x19800066, /* 14, -8.0dB */
49         0x1b00006c, /* 15, -7.5dB */
50         0x1c800072, /* 16, -7.0dB */
51         0x1e400079, /* 17, -6.5dB */
52         0x20000080, /* 18, -6.0dB */
53         0x22000088, /* 19, -5.5dB */
54         0x24000090, /* 20, -5.0dB */
55         0x26000098, /* 21, -4.5dB */
56         0x288000a2, /* 22, -4.0dB */
57         0x2ac000ab, /* 23, -3.5dB */
58         0x2d4000b5, /* 24, -3.0dB */
59         0x300000c0, /* 25, -2.5dB */
60         0x32c000cb, /* 26, -2.0dB */
61         0x35c000d7, /* 27, -1.5dB */
62         0x390000e4, /* 28, -1.0dB */
63         0x3c8000f2, /* 29, -0.5dB */
64         0x40000100, /* 30, +0dB */
65         0x43c0010f, /* 31, +0.5dB */
66         0x47c0011f, /* 32, +1.0dB */
67         0x4c000130, /* 33, +1.5dB */
68         0x50800142, /* 34, +2.0dB */
69         0x55400155, /* 35, +2.5dB */
70         0x5a400169, /* 36, +3.0dB */
71         0x5fc0017f, /* 37, +3.5dB */
72         0x65400195, /* 38, +4.0dB */
73         0x6b8001ae, /* 39, +4.5dB */
74         0x71c001c7, /* 40, +5.0dB */
75         0x788001e2, /* 41, +5.5dB */
76         0x7f8001fe  /* 42, +6.0dB */
77 };
78
79 u8 cck_swing_table_ch1_ch13_new[CCK_TABLE_SIZE][8] = {
80         {0x09, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x01},       /* 0, -16.0dB */
81         {0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01},       /* 1, -15.5dB */
82         {0x0a, 0x09, 0x08, 0x07, 0x05, 0x03, 0x02, 0x01},       /* 2, -15.0dB */
83         {0x0a, 0x0a, 0x09, 0x07, 0x05, 0x03, 0x02, 0x01},       /* 3, -14.5dB */
84         {0x0b, 0x0a, 0x09, 0x08, 0x06, 0x04, 0x02, 0x01},       /* 4, -14.0dB */
85         {0x0b, 0x0b, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x01},       /* 5, -13.5dB */
86         {0x0c, 0x0c, 0x0a, 0x09, 0x06, 0x04, 0x02, 0x01},       /* 6, -13.0dB */
87         {0x0d, 0x0c, 0x0b, 0x09, 0x07, 0x04, 0x02, 0x01},       /* 7, -12.5dB */
88         {0x0d, 0x0d, 0x0c, 0x0a, 0x07, 0x05, 0x02, 0x01},       /* 8, -12.0dB */
89         {0x0e, 0x0e, 0x0c, 0x0a, 0x08, 0x05, 0x02, 0x01},       /* 9, -11.5dB */
90         {0x0f, 0x0f, 0x0d, 0x0b, 0x08, 0x05, 0x03, 0x01},       /* 10, -11.0dB */
91         {0x10, 0x10, 0x0e, 0x0b, 0x08, 0x05, 0x03, 0x01},       /* 11, -10.5dB */
92         {0x11, 0x11, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01},       /* 12, -10.0dB */
93         {0x12, 0x12, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01},       /* 13, -9.5dB */
94         {0x13, 0x13, 0x10, 0x0d, 0x0a, 0x06, 0x03, 0x01},       /* 14, -9.0dB */
95         {0x14, 0x14, 0x11, 0x0e, 0x0b, 0x07, 0x03, 0x02},       /* 15, -8.5dB */
96         {0x16, 0x15, 0x12, 0x0f, 0x0b, 0x07, 0x04, 0x01},       /* 16, -8.0dB */
97         {0x17, 0x16, 0x13, 0x10, 0x0c, 0x08, 0x04, 0x02},       /* 17, -7.5dB */
98         {0x18, 0x17, 0x15, 0x11, 0x0c, 0x08, 0x04, 0x02},       /* 18, -7.0dB */
99         {0x1a, 0x19, 0x16, 0x12, 0x0d, 0x09, 0x04, 0x02},       /* 19, -6.5dB */
100         {0x1c, 0x1a, 0x18, 0x12, 0x0e, 0x08, 0x04, 0x02},       /* 20, -6.0dB */
101         {0x1d, 0x1c, 0x18, 0x14, 0x0f, 0x0a, 0x05, 0x02},       /* 21, -5.5dB */
102         {0x1f, 0x1e, 0x1a, 0x15, 0x10, 0x0a, 0x05, 0x02},       /* 22, -5.0dB */
103         {0x20, 0x20, 0x1b, 0x16, 0x11, 0x08, 0x05, 0x02},       /* 23, -4.5dB */
104         {0x22, 0x21, 0x1d, 0x18, 0x11, 0x0b, 0x06, 0x02},       /* 24, -4.0dB */
105         {0x24, 0x23, 0x1f, 0x19, 0x13, 0x0c, 0x06, 0x03},       /* 25, -3.5dB */
106         {0x26, 0x25, 0x21, 0x1b, 0x14, 0x0d, 0x06, 0x03},       /* 26, -3.0dB */
107         {0x28, 0x28, 0x22, 0x1c, 0x15, 0x0d, 0x07, 0x03},       /* 27, -2.5dB */
108         {0x2b, 0x2a, 0x25, 0x1e, 0x16, 0x0e, 0x07, 0x03},       /* 28, -2.0dB */
109         {0x2d, 0x2d, 0x27, 0x1f, 0x18, 0x0f, 0x08, 0x03},       /* 29, -1.5dB */
110         {0x30, 0x2f, 0x29, 0x21, 0x19, 0x10, 0x08, 0x03},       /* 30, -1.0dB */
111         {0x33, 0x32, 0x2b, 0x23, 0x1a, 0x11, 0x08, 0x04},       /* 31, -0.5dB */
112         {0x36, 0x35, 0x2e, 0x25, 0x1c, 0x12, 0x09, 0x04}        /* 32, +0dB */
113 };
114
115
116 u8 cck_swing_table_ch14_new[CCK_TABLE_SIZE][8] = {
117         {0x09, 0x08, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00},       /* 0, -16.0dB */
118         {0x09, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00},       /* 1, -15.5dB */
119         {0x0a, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00},       /* 2, -15.0dB */
120         {0x0a, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00},       /* 3, -14.5dB */
121         {0x0b, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00},       /* 4, -14.0dB */
122         {0x0b, 0x0b, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00},       /* 5, -13.5dB */
123         {0x0c, 0x0c, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00},       /* 6, -13.0dB */
124         {0x0d, 0x0c, 0x0b, 0x06, 0x00, 0x00, 0x00, 0x00},       /* 7, -12.5dB */
125         {0x0d, 0x0d, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00},       /* 8, -12.0dB */
126         {0x0e, 0x0e, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00},       /* 9, -11.5dB */
127         {0x0f, 0x0f, 0x0d, 0x08, 0x00, 0x00, 0x00, 0x00},       /* 10, -11.0dB */
128         {0x10, 0x10, 0x0e, 0x08, 0x00, 0x00, 0x00, 0x00},       /* 11, -10.5dB */
129         {0x11, 0x11, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00},       /* 12, -10.0dB */
130         {0x12, 0x12, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00},       /* 13, -9.5dB */
131         {0x13, 0x13, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00},       /* 14, -9.0dB */
132         {0x14, 0x14, 0x11, 0x0a, 0x00, 0x00, 0x00, 0x00},       /* 15, -8.5dB */
133         {0x16, 0x15, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00},       /* 16, -8.0dB */
134         {0x17, 0x16, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00},       /* 17, -7.5dB */
135         {0x18, 0x17, 0x15, 0x0c, 0x00, 0x00, 0x00, 0x00},       /* 18, -7.0dB */
136         {0x1a, 0x19, 0x16, 0x0d, 0x00, 0x00, 0x00, 0x00},       /* 19, -6.5dB */
137         {0x1c, 0x1a, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00},       /* 20, -6.0dB */
138         {0x1d, 0x1c, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00},       /* 21, -5.5dB */
139         {0x1f, 0x1e, 0x1a, 0x0f, 0x00, 0x00, 0x00, 0x00},       /* 22, -5.0dB */
140         {0x20, 0x20, 0x1b, 0x10, 0x00, 0x00, 0x00, 0x00},       /* 23, -4.5dB */
141         {0x22, 0x21, 0x1d, 0x11, 0x00, 0x00, 0x00, 0x00},       /* 24, -4.0dB */
142         {0x24, 0x23, 0x1f, 0x12, 0x00, 0x00, 0x00, 0x00},       /* 25, -3.5dB */
143         {0x26, 0x25, 0x21, 0x13, 0x00, 0x00, 0x00, 0x00},       /* 26, -3.0dB */
144         {0x28, 0x28, 0x24, 0x14, 0x00, 0x00, 0x00, 0x00},       /* 27, -2.5dB */
145         {0x2b, 0x2a, 0x25, 0x15, 0x00, 0x00, 0x00, 0x00},       /* 28, -2.0dB */
146         {0x2d, 0x2d, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00},       /* 29, -1.5dB */
147         {0x30, 0x2f, 0x29, 0x18, 0x00, 0x00, 0x00, 0x00},       /* 30, -1.0dB */
148         {0x33, 0x32, 0x2b, 0x19, 0x00, 0x00, 0x00, 0x00},       /* 31, -0.5dB */
149         {0x36, 0x35, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00}        /* 32, +0dB */
150 };
151
152 u32 ofdm_swing_table[OFDM_TABLE_SIZE_92D] = {
153         0x0b40002d, /* 0,  -15.0dB */
154         0x0c000030, /* 1,  -14.5dB */
155         0x0cc00033, /* 2,  -14.0dB */
156         0x0d800036, /* 3,  -13.5dB */
157         0x0e400039, /* 4,  -13.0dB */
158         0x0f00003c, /* 5,  -12.5dB */
159         0x10000040, /* 6,  -12.0dB */
160         0x11000044, /* 7,  -11.5dB */
161         0x12000048, /* 8,  -11.0dB */
162         0x1300004c, /* 9,  -10.5dB */
163         0x14400051, /* 10, -10.0dB */
164         0x15800056, /* 11, -9.5dB */
165         0x16c0005b, /* 12, -9.0dB */
166         0x18000060, /* 13, -8.5dB */
167         0x19800066, /* 14, -8.0dB */
168         0x1b00006c, /* 15, -7.5dB */
169         0x1c800072, /* 16, -7.0dB */
170         0x1e400079, /* 17, -6.5dB */
171         0x20000080, /* 18, -6.0dB */
172         0x22000088, /* 19, -5.5dB */
173         0x24000090, /* 20, -5.0dB */
174         0x26000098, /* 21, -4.5dB */
175         0x288000a2, /* 22, -4.0dB */
176         0x2ac000ab, /* 23, -3.5dB */
177         0x2d4000b5, /* 24, -3.0dB */
178         0x300000c0, /* 25, -2.5dB */
179         0x32c000cb, /* 26, -2.0dB */
180         0x35c000d7, /* 27, -1.5dB */
181         0x390000e4, /* 28, -1.0dB */
182         0x3c8000f2, /* 29, -0.5dB */
183         0x40000100, /* 30, +0dB */
184         0x43c0010f, /* 31, +0.5dB */
185         0x47c0011f, /* 32, +1.0dB */
186         0x4c000130, /* 33, +1.5dB */
187         0x50800142, /* 34, +2.0dB */
188         0x55400155, /* 35, +2.5dB */
189         0x5a400169, /* 36, +3.0dB */
190         0x5fc0017f, /* 37, +3.5dB */
191         0x65400195, /* 38, +4.0dB */
192         0x6b8001ae, /* 39, +4.5dB */
193         0x71c001c7, /* 40, +5.0dB */
194         0x788001e2, /* 41, +5.5dB */
195         0x7f8001fe  /* 42, +6.0dB */
196 };
197
198
199 u8 cck_swing_table_ch1_ch13[CCK_TABLE_SIZE][8] = {
200         {0x09, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x01},       /* 0, -16.0dB */
201         {0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01},       /* 1, -15.5dB */
202         {0x0a, 0x09, 0x08, 0x07, 0x05, 0x03, 0x02, 0x01},       /* 2, -15.0dB */
203         {0x0a, 0x0a, 0x09, 0x07, 0x05, 0x03, 0x02, 0x01},       /* 3, -14.5dB */
204         {0x0b, 0x0a, 0x09, 0x08, 0x06, 0x04, 0x02, 0x01},       /* 4, -14.0dB */
205         {0x0b, 0x0b, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x01},       /* 5, -13.5dB */
206         {0x0c, 0x0c, 0x0a, 0x09, 0x06, 0x04, 0x02, 0x01},       /* 6, -13.0dB */
207         {0x0d, 0x0c, 0x0b, 0x09, 0x07, 0x04, 0x02, 0x01},       /* 7, -12.5dB */
208         {0x0d, 0x0d, 0x0c, 0x0a, 0x07, 0x05, 0x02, 0x01},       /* 8, -12.0dB */
209         {0x0e, 0x0e, 0x0c, 0x0a, 0x08, 0x05, 0x02, 0x01},       /* 9, -11.5dB */
210         {0x0f, 0x0f, 0x0d, 0x0b, 0x08, 0x05, 0x03, 0x01},       /* 10, -11.0dB */
211         {0x10, 0x10, 0x0e, 0x0b, 0x08, 0x05, 0x03, 0x01},       /* 11, -10.5dB */
212         {0x11, 0x11, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01},       /* 12, -10.0dB */
213         {0x12, 0x12, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01},       /* 13, -9.5dB */
214         {0x13, 0x13, 0x10, 0x0d, 0x0a, 0x06, 0x03, 0x01},       /* 14, -9.0dB */
215         {0x14, 0x14, 0x11, 0x0e, 0x0b, 0x07, 0x03, 0x02},       /* 15, -8.5dB */
216         {0x16, 0x15, 0x12, 0x0f, 0x0b, 0x07, 0x04, 0x01},       /* 16, -8.0dB */
217         {0x17, 0x16, 0x13, 0x10, 0x0c, 0x08, 0x04, 0x02},       /* 17, -7.5dB */
218         {0x18, 0x17, 0x15, 0x11, 0x0c, 0x08, 0x04, 0x02},       /* 18, -7.0dB */
219         {0x1a, 0x19, 0x16, 0x12, 0x0d, 0x09, 0x04, 0x02},       /* 19, -6.5dB */
220         {0x1c, 0x1a, 0x18, 0x12, 0x0e, 0x08, 0x04, 0x02},       /* 20, -6.0dB */
221         {0x1d, 0x1c, 0x18, 0x14, 0x0f, 0x0a, 0x05, 0x02},       /* 21, -5.5dB */
222         {0x1f, 0x1e, 0x1a, 0x15, 0x10, 0x0a, 0x05, 0x02},       /* 22, -5.0dB */
223         {0x20, 0x20, 0x1b, 0x16, 0x11, 0x08, 0x05, 0x02},       /* 23, -4.5dB */
224         {0x22, 0x21, 0x1d, 0x18, 0x11, 0x0b, 0x06, 0x02},       /* 24, -4.0dB */
225         {0x24, 0x23, 0x1f, 0x19, 0x13, 0x0c, 0x06, 0x03},       /* 25, -3.5dB */
226         {0x26, 0x25, 0x21, 0x1b, 0x14, 0x0d, 0x06, 0x03},       /* 26, -3.0dB */
227         {0x28, 0x28, 0x22, 0x1c, 0x15, 0x0d, 0x07, 0x03},       /* 27, -2.5dB */
228         {0x2b, 0x2a, 0x25, 0x1e, 0x16, 0x0e, 0x07, 0x03},       /* 28, -2.0dB */
229         {0x2d, 0x2d, 0x27, 0x1f, 0x18, 0x0f, 0x08, 0x03},       /* 29, -1.5dB */
230         {0x30, 0x2f, 0x29, 0x21, 0x19, 0x10, 0x08, 0x03},       /* 30, -1.0dB */
231         {0x33, 0x32, 0x2b, 0x23, 0x1a, 0x11, 0x08, 0x04},       /* 31, -0.5dB */
232         {0x36, 0x35, 0x2e, 0x25, 0x1c, 0x12, 0x09, 0x04}        /* 32, +0dB */
233 };
234
235
236 u8 cck_swing_table_ch14[CCK_TABLE_SIZE][8] = {
237         {0x09, 0x08, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00},       /* 0, -16.0dB */
238         {0x09, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00},       /* 1, -15.5dB */
239         {0x0a, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00},       /* 2, -15.0dB */
240         {0x0a, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00},       /* 3, -14.5dB */
241         {0x0b, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00},       /* 4, -14.0dB */
242         {0x0b, 0x0b, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00},       /* 5, -13.5dB */
243         {0x0c, 0x0c, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00},       /* 6, -13.0dB */
244         {0x0d, 0x0c, 0x0b, 0x06, 0x00, 0x00, 0x00, 0x00},       /* 7, -12.5dB */
245         {0x0d, 0x0d, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00},       /* 8, -12.0dB */
246         {0x0e, 0x0e, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00},       /* 9, -11.5dB */
247         {0x0f, 0x0f, 0x0d, 0x08, 0x00, 0x00, 0x00, 0x00},       /* 10, -11.0dB */
248         {0x10, 0x10, 0x0e, 0x08, 0x00, 0x00, 0x00, 0x00},       /* 11, -10.5dB */
249         {0x11, 0x11, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00},       /* 12, -10.0dB */
250         {0x12, 0x12, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00},       /* 13, -9.5dB */
251         {0x13, 0x13, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00},       /* 14, -9.0dB */
252         {0x14, 0x14, 0x11, 0x0a, 0x00, 0x00, 0x00, 0x00},       /* 15, -8.5dB */
253         {0x16, 0x15, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00},       /* 16, -8.0dB */
254         {0x17, 0x16, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00},       /* 17, -7.5dB */
255         {0x18, 0x17, 0x15, 0x0c, 0x00, 0x00, 0x00, 0x00},       /* 18, -7.0dB */
256         {0x1a, 0x19, 0x16, 0x0d, 0x00, 0x00, 0x00, 0x00},       /* 19, -6.5dB */
257         {0x1c, 0x1a, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00},       /* 20, -6.0dB */
258         {0x1d, 0x1c, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00},       /* 21, -5.5dB */
259         {0x1f, 0x1e, 0x1a, 0x0f, 0x00, 0x00, 0x00, 0x00},       /* 22, -5.0dB */
260         {0x20, 0x20, 0x1b, 0x10, 0x00, 0x00, 0x00, 0x00},       /* 23, -4.5dB */
261         {0x22, 0x21, 0x1d, 0x11, 0x00, 0x00, 0x00, 0x00},       /* 24, -4.0dB */
262         {0x24, 0x23, 0x1f, 0x12, 0x00, 0x00, 0x00, 0x00},       /* 25, -3.5dB */
263         {0x26, 0x25, 0x21, 0x13, 0x00, 0x00, 0x00, 0x00},       /* 26, -3.0dB */
264         {0x28, 0x28, 0x24, 0x14, 0x00, 0x00, 0x00, 0x00},       /* 27, -2.5dB */
265         {0x2b, 0x2a, 0x25, 0x15, 0x00, 0x00, 0x00, 0x00},       /* 28, -2.0dB */
266         {0x2d, 0x2d, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00},       /* 29, -1.5dB */
267         {0x30, 0x2f, 0x29, 0x18, 0x00, 0x00, 0x00, 0x00},       /* 30, -1.0dB */
268         {0x33, 0x32, 0x2b, 0x19, 0x00, 0x00, 0x00, 0x00},       /* 31, -0.5dB */
269         {0x36, 0x35, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00}        /* 32, +0dB */
270 };
271
272 u8 cck_swing_table_ch1_ch14_88f[CCK_TABLE_SIZE_88F][16] = {
273         {0x16, 0x15, 0x13, 0x10, 0xD, 0x9, 0x6, 0x3, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 0  -16dB */
274         {0x18, 0x17, 0x15, 0x12, 0xE, 0xA, 0x7, 0x4, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 1  -15.5dB */
275         {0x1B, 0x1A, 0x18, 0x14, 0x10, 0xB, 0x7, 0x4, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 2  -15dB */
276         {0x1F, 0x1E, 0x1B, 0x17, 0x12, 0xD, 0x8, 0x5, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 3  -14.5dB */
277         {0x22, 0x21, 0x1E, 0x19, 0x14, 0xE, 0x9, 0x5, 0x3, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 4  -14dB */
278         {0x26, 0x25, 0x22, 0x1C, 0x16, 0x10, 0xA, 0x6, 0x3, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 5  -13.5dB */
279         {0x2B, 0x2A, 0x26, 0x20, 0x19, 0x12, 0xC, 0x7, 0x3, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 6  -13dB */
280         {0x30, 0x2F, 0x2A, 0x24, 0x1C, 0x14, 0xD, 0x8, 0x4, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 7  -12.5dB */
281         {0x36, 0x34, 0x2F, 0x28, 0x1F, 0x17, 0xF, 0x9, 0x4, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 8  -12dB */
282         {0x3D, 0x3B, 0x35, 0x2D, 0x23, 0x19, 0x11, 0xA, 0x5, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 9  -11.5dB */
283         {0x44, 0x42, 0x3C, 0x33, 0x28, 0x1C, 0x13, 0xB, 0x5, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 10  -11dB */
284         {0x4D, 0x4A, 0x43, 0x39, 0x2C, 0x20, 0x15, 0xC, 0x6, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 11  -10.5dB */
285         {0x56, 0x53, 0x4B, 0x40, 0x32, 0x24, 0x17, 0xE, 0x6, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 12  -10dB */
286         {0x60, 0x5D, 0x54, 0x47, 0x38, 0x28, 0x1A, 0xF, 0x7, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 13  -9.5dB */
287         {0x6C, 0x69, 0x5F, 0x50, 0x3F, 0x2D, 0x1E, 0x11, 0x8, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 14  -9dB */
288         {0x79, 0x76, 0x6A, 0x5A, 0x46, 0x33, 0x21, 0x13, 0x9, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 15  -8.5dB */
289         {0x88, 0x84, 0x77, 0x65, 0x4F, 0x39, 0x25, 0x15, 0xA, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 16  -8dB */
290         {0x99, 0x94, 0x86, 0x71, 0x58, 0x40, 0x2A, 0x18, 0xB, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 17  -7.5dB */
291         {0xAC, 0xA6, 0x96, 0x7F, 0x63, 0x47, 0x2F, 0x1B, 0xD, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 18  -7dB */
292         {0xC1, 0xBA, 0xA8, 0x8F, 0x6F, 0x50, 0x35, 0x1E, 0xE, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 19  -6.5dB */
293         {0xD8, 0xD1, 0xBD, 0xA0, 0x7D, 0x5A, 0x3B, 0x22, 0x10, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}      /* 20  -6dB */
294 };
295
296
297 u8 cck_swing_table_ch1_ch13_88f[CCK_TABLE_SIZE_88F][16] = {
298         {0x16, 0x15, 0x13, 0x10, 0xD, 0x9, 0x6, 0x3, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 0  -16dB */
299         {0x18, 0x17, 0x15, 0x12, 0xE, 0xA, 0x7, 0x4, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 1  -15.5dB */
300         {0x1B, 0x1A, 0x18, 0x14, 0x10, 0xB, 0x7, 0x4, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 2  -15dB */
301         {0x1F, 0x1E, 0x1B, 0x17, 0x12, 0xD, 0x8, 0x5, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 3  -14.5dB */
302         {0x22, 0x21, 0x1E, 0x19, 0x14, 0xE, 0x9, 0x5, 0x3, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 4  -14dB */
303         {0x26, 0x25, 0x22, 0x1C, 0x16, 0x10, 0xA, 0x6, 0x3, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 5  -13.5dB */
304         {0x2B, 0x2A, 0x26, 0x20, 0x19, 0x12, 0xC, 0x7, 0x3, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 6  -13dB */
305         {0x30, 0x2F, 0x2A, 0x24, 0x1C, 0x14, 0xD, 0x8, 0x4, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 7  -12.5dB */
306         {0x36, 0x34, 0x2F, 0x28, 0x1F, 0x17, 0xF, 0x9, 0x4, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 8  -12dB */
307         {0x3D, 0x3B, 0x35, 0x2D, 0x23, 0x19, 0x11, 0xA, 0x5, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 9  -11.5dB */
308         {0x44, 0x42, 0x3C, 0x33, 0x28, 0x1C, 0x13, 0xB, 0x5, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 10  -11dB */
309         {0x4D, 0x4A, 0x43, 0x39, 0x2C, 0x20, 0x15, 0xC, 0x6, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 11  -10.5dB */
310         {0x56, 0x53, 0x4B, 0x40, 0x32, 0x24, 0x17, 0xE, 0x6, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 12  -10dB */
311         {0x60, 0x5D, 0x54, 0x47, 0x38, 0x28, 0x1A, 0xF, 0x7, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 13  -9.5dB */
312         {0x6C, 0x69, 0x5F, 0x50, 0x3F, 0x2D, 0x1E, 0x11, 0x8, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 14  -9dB */
313         {0x79, 0x76, 0x6A, 0x5A, 0x46, 0x33, 0x21, 0x13, 0x9, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 15  -8.5dB */
314         {0x88, 0x84, 0x77, 0x65, 0x4F, 0x39, 0x25, 0x15, 0xA, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 16  -8dB */
315         {0x99, 0x94, 0x86, 0x71, 0x58, 0x40, 0x2A, 0x18, 0xB, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 17  -7.5dB */
316         {0xAC, 0xA6, 0x96, 0x7F, 0x63, 0x47, 0x2F, 0x1B, 0xD, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 18  -7dB */
317         {0xC1, 0xBA, 0xA8, 0x8F, 0x6F, 0x50, 0x35, 0x1E, 0xE, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},        /* 19  -6.5dB */
318         {0xD8, 0xD1, 0xBD, 0xA0, 0x7D, 0x5A, 0x3B, 0x22, 0x10, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}      /* 20  -6dB */
319 };
320
321
322 u8 cck_swing_table_ch14_88f[CCK_TABLE_SIZE_88F][16] = {
323         {0x44,   0x42, 0x3C, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-16dB*/
324         {0x48, 0x46, 0x3F, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-15.5dB*/
325         {0x4D, 0x4A, 0x43, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-15dB*/
326         {0x51, 0x4F, 0x47, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},           /*-14.5dB*/
327         {0x56, 0x53, 0x4B, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-14dB*/
328         {0x5B, 0x58, 0x50, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-13.5dB*/
329         {0x60, 0x5D, 0x54, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-13dB*/
330         {0x66, 0x63, 0x59, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-12.5dB*/
331         {0x6C, 0x69, 0x5F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-12dB*/
332         {0x73, 0x6F, 0x64, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-11.5dB*/
333         {0x79, 0x76, 0x6A, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-11dB*/
334         {0x81, 0x7C, 0x71, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-10.5dB*/
335         {0x88, 0x84, 0x77, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-10dB*/
336         {0x90, 0x8C, 0x7E, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-9.5dB*/
337         {0x99, 0x94, 0x86, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-9dB*/
338         {0xA2, 0x9D, 0x8E, 0x5E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-8.5dB*/
339         {0xAC, 0xA6, 0x96, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-8dB*/
340         {0xB6, 0xB0, 0x9F, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-7.5dB*/
341         {0xC1, 0xBA, 0xA8, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-7dB*/
342         {0xCC, 0xC5, 0xB2, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},    /*-6.5dB*/
343         {0xD8, 0xD1, 0xBD, 0x7D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}     /*-6dB*/
344 };
345
346
347
348 #if 0
349 u32 ofdm_swing_table_92e[OFDM_TABLE_SIZE_92E] = {
350         /* Index0   6  dB */ 0x7fc001ff,
351         /* Index1   5.7dB */ 0x7b4001ed,
352         /* Index2   5.4dB */ 0x774001dd,
353         /* Index3   5.1dB */ 0x734001cd,
354         /* Index4   4.8dB */ 0x6f4001bd,
355         /* Index5   4.5dB */ 0x6b8001ae,
356         /* Index6   4.2dB */ 0x67c0019f,
357         /* Index7   3.9dB */ 0x64400191,
358         /* Index8   3.6dB */ 0x60c00183,
359         /* Index9   3.3dB */ 0x5d800176,
360         /* Index10  3  dB */ 0x5a80016a,
361         /* Index11  2.7dB */ 0x5740015d,
362         /* Index12  2.4dB */ 0x54400151,
363         /* Index13  2.1dB */ 0x51800146,
364         /* Index14  1.8dB */ 0x4ec0013b,
365         /* Index15  1.5dB */ 0x4c000130,
366         /* Index16  1.2dB */ 0x49800126,
367         /* Index17  0.9dB */ 0x4700011c,
368         /* Index18  0.6dB */ 0x44800112,
369         /* Index19  0.3dB */ 0x42000108,
370         /* Index20  0  dB */ 0x40000100, /* 20 This is OFDM base index */
371         /* Index21 -0.3dB */ 0x3dc000f7,
372         /* Index22 -0.6dB */ 0x3bc000ef,
373         /* Index23 -0.9dB */ 0x39c000e7,
374         /* Index24 -1.2dB */ 0x37c000df,
375         /* Index25 -1.5dB */ 0x35c000d7,
376         /* Index26 -1.8dB */ 0x340000d0,
377         /* Index27 -2.1dB */ 0x324000c9,
378         /* Index28 -2.4dB */ 0x308000c2,
379         /* Index29 -2.7dB */ 0x2f0000bc,
380         /* Index30 -3  dB */ 0x2d4000b5,
381         /* Index31 -3.3dB */ 0x2bc000af,
382         /* Index32 -3.6dB */ 0x2a4000a9,
383         /* Index33 -3.9dB */ 0x28c000a3,
384         /* Index34 -4.2dB */ 0x2780009e,
385         /* Index35 -4.5dB */ 0x26000098,
386         /* Index36 -4.8dB */ 0x24c00093,
387         /* Index37 -5.1dB */ 0x2380008e,
388         /* Index38 -5.4dB */ 0x22400089,
389         /* Index39 -5.7dB */ 0x21400085,
390         /* Index40 -6  dB */ 0x20000080,
391         /* Index41 -6.3dB */ 0x1f00007c,
392         /* Index42 -6.6dB */ 0x1e000078,
393         /* Index43 -6.9dB */ 0x1d000074,
394         /* Index44 -7.2dB */ 0x1c000070,
395         /* Index45 -7.5dB */ 0x1b00006c,
396         /* Index46 -7.8dB */ 0x1a000068,
397         /* Index47 -8.1dB */ 0x19400065,
398         /* Index48 -8.4dB */ 0x18400061,
399         /* Index49 -8.7dB */ 0x1780005e,
400         /* Index50 -9  dB */ 0x16c0005b,
401         /* Index51 -9.3dB */ 0x16000058,
402         /* Index52 -9.6dB */ 0x15400055,
403         /* Index53 -9.9dB */ 0x14800052
404 };
405 u8 cck_swing_table_ch1_ch13_92e[CCK_TABLE_SIZE_92E][8] = {
406         /* Index0    0  dB */    {0x36, 0x34, 0x2E, 0x26, 0x1C, 0x12, 0x08, 0x04},
407         /* Index1   -0.3dB */    {0x34, 0x32, 0x2C, 0x25, 0x1B, 0x11, 0x08, 0x04},
408         /* Index2   -0.6dB */    {0x32, 0x30, 0x2B, 0x23, 0x1A, 0x11, 0x07, 0x04},
409         /* Index3   -0.9dB */    {0x31, 0x2F, 0x29, 0x22, 0x19, 0x10, 0x07, 0x04},
410         /* Index4   -1.2dB */    {0x2F, 0x2D, 0x28, 0x21, 0x18, 0x10, 0x07, 0x03},
411         /* Index5   -1.5dB */    {0x2D, 0x2C, 0x27, 0x20, 0x18, 0x0F, 0x07, 0x03},
412         /* Index6   -1.8dB */    {0x2C, 0x2A, 0x25, 0x1F, 0x17, 0x0F, 0x06, 0x03},
413         /* Index7   -2.1dB */    {0x2A, 0x29, 0x24, 0x1E, 0x16, 0x0E, 0x06, 0x03},
414         /* Index8   -2.4dB */    {0x29, 0x27, 0x23, 0x1D, 0x15, 0x0E, 0x06, 0x03},
415         /* Index9   -2.7dB */    {0x27, 0x26, 0x22, 0x1C, 0x14, 0x0D, 0x06, 0x03},
416         /* Index10  -3  dB */    {0x26, 0x25, 0x20, 0x1B, 0x14, 0x0D, 0x06, 0x03},
417         /* Index11  -3.3dB */    {0x25, 0x23, 0x1F, 0x1A, 0x13, 0x0C, 0x05, 0x03},
418         /* Index12  -3.6dB */    {0x24, 0x22, 0x1E, 0x19, 0x12, 0x0C, 0x05, 0x03},
419         /* Index13  -3.9dB */    {0x22, 0x21, 0x1D, 0x18, 0x12, 0x0B, 0x05, 0x03},
420         /* Index14  -4.2dB */    {0x21, 0x20, 0x1C, 0x17, 0x11, 0x0B, 0x05, 0x02},
421         /* Index15  -4.5dB */    {0x20, 0x1F, 0x1B, 0x17, 0x11, 0x0B, 0x05, 0x02},
422         /* Index16  -4.8dB */    {0x1F, 0x1E, 0x1A, 0x16, 0x10, 0x0A, 0x05, 0x02},
423         /* Index17  -5.1dB */    {0x1E, 0x1D, 0x1A, 0x15, 0x10, 0x0A, 0x04, 0x02},
424         /* Index18  -5.4dB */    {0x1D, 0x1C, 0x19, 0x14, 0x0F, 0x0A, 0x04, 0x02},
425         /* Index19  -5.7dB */    {0x1C, 0x1B, 0x18, 0x14, 0x0E, 0x09, 0x04, 0x02},
426         /* Index20  -6.0dB */    {0x1B, 0x1A, 0x17, 0x13, 0x0E, 0x09, 0x04, 0x02}, /* 20 This is CCK base index */
427         /* Index21  -6.3dB */    {0x1A, 0x19, 0x16, 0x12, 0x0E, 0x09, 0x04, 0x02},
428         /* Index22  -6.6dB */    {0x19, 0x18, 0x15, 0x12, 0x0D, 0x08, 0x04, 0x02},
429         /* Index23  -6.9dB */    {0x18, 0x17, 0x15, 0x11, 0x0D, 0x08, 0x04, 0x02},
430         /* Index24  -7.2dB */    {0x18, 0x17, 0x14, 0x11, 0x0C, 0x08, 0x03, 0x02},
431         /* Index25  -7.5dB */    {0x17, 0x16, 0x13, 0x10, 0x0C, 0x08, 0x03, 0x02},
432         /* Index26  -7.8dB */    {0x16, 0x15, 0x13, 0x0F, 0x0B, 0x07, 0x03, 0x02},
433         /* Index27  -8.1dB */    {0x15, 0x14, 0x12, 0x0F, 0x0B, 0x07, 0x03, 0x02},
434         /* Index28  -8.4dB */    {0x14, 0x14, 0x11, 0x0E, 0x0B, 0x07, 0x03, 0x02},
435         /* Index29  -8.7dB */    {0x14, 0x13, 0x11, 0x0E, 0x0A, 0x07, 0x03, 0x01},
436         /* Index30  -9.0dB */    {0x13, 0x12, 0x10, 0x0D, 0x0A, 0x06, 0x03, 0x01}, /* 30 This is hp CCK base index */
437         /* Index31  -9.3dB */    {0x12, 0x12, 0x0F, 0x0D, 0x0A, 0x06, 0x03, 0x01},
438         /* Index32  -9.6dB */    {0x12, 0x11, 0x0F, 0x0D, 0x09, 0x06, 0x03, 0x01},
439         /* Index33  -9.9dB */    {0x11, 0x11, 0x0F, 0x0C, 0x09, 0x06, 0x03, 0x01},
440         /* Index34 -10.2dB */    {0x11, 0x11, 0x0E, 0x0C, 0x09, 0x06, 0x02, 0x01},
441         /* Index35 -10.5dB */    {0x10, 0x0F, 0x0E, 0x0B, 0x08, 0x05, 0x02, 0x01},
442         /* Index36 -10.8dB */    {0x10, 0x0F, 0x0D, 0x0B, 0x08, 0x05, 0x02, 0x01},
443         /* Index37 -11.1dB */    {0x0F, 0x0E, 0x0D, 0x0A, 0x08, 0x05, 0x02, 0x01},
444         /* Index38 -11.4dB */    {0x0E, 0x0E, 0x0C, 0x0A, 0x07, 0x05, 0x02, 0x01},
445         /* Index39 -11.7dB */    {0x0E, 0x0D, 0x0C, 0x0A, 0x07, 0x05, 0x02, 0x01},
446         /* Index40 -12  dB */    {0x0E, 0x0D, 0x0C, 0x0A, 0x07, 0x05, 0x02, 0x01},
447         /* Index41 -12.3dB */    {0x0D, 0x0D, 0x0B, 0x09, 0x07, 0x04, 0x02, 0x01},
448         /* Index42 -12.6dB */    {0x0D, 0x0C, 0x0B, 0x09, 0x07, 0x04, 0x02, 0x01},
449         /* Index43 -12.9dB */    {0x0C, 0x0C, 0x0A, 0x09, 0x06, 0x04, 0x02, 0x01},
450         /* Index44 -13.2dB */    {0x0C, 0x0B, 0x0A, 0x08, 0x06, 0x04, 0x02, 0x01},
451         /* Index45 -13.5dB */    {0x0B, 0x0B, 0x0A, 0x08, 0x06, 0x04, 0x02, 0x01},
452         /* Index46 -13.8dB */    {0x0B, 0x0B, 0x09, 0x08, 0x06, 0x04, 0x02, 0x01},
453         /* Index47 -14.1dB */    {0x0B, 0x0A, 0x09, 0x07, 0x06, 0x04, 0x02, 0x01},
454         /* Index48 -14.4dB */    {0x0A, 0x0A, 0x09, 0x07, 0x05, 0x03, 0x02, 0x01},
455         /* Index49 -14.7dB */    {0x0A, 0x0A, 0x08, 0x07, 0x05, 0x03, 0x01, 0x01},
456         /* Index50 -15  dB */    {0x0A, 0x09, 0x08, 0x07, 0x05, 0x03, 0x01, 0x01},
457         /* Index51 -15.3dB */    {0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01},
458         /* Index52 -15.6dB */    {0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01},
459         /* Index53 -15.9dB */    {0x09, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x01}
460 };
461 u8 cck_swing_table_ch14_92e[CCK_TABLE_SIZE_92E][8] = {
462         /* Index0    0  dB */    {0x36, 0x34, 0x2E, 0x26, 0x00, 0x00, 0x00, 0x00},
463         /* Index1   -0.3dB */    {0x34, 0x32, 0x2C, 0x25, 0x00, 0x00, 0x00, 0x00},
464         /* Index2   -0.6dB */    {0x32, 0x30, 0x2B, 0x23, 0x00, 0x00, 0x00, 0x00},
465         /* Index3   -0.9dB */    {0x31, 0x2F, 0x29, 0x22, 0x00, 0x00, 0x00, 0x00},
466         /* Index4   -1.2dB */    {0x2F, 0x2D, 0x28, 0x21, 0x00, 0x00, 0x00, 0x00},
467         /* Index5   -1.5dB */    {0x2D, 0x2C, 0x27, 0x20, 0x00, 0x00, 0x00, 0x00},
468         /* Index6   -1.8dB */    {0x2C, 0x2A, 0x25, 0x1F, 0x00, 0x00, 0x00, 0x00},
469         /* Index7   -2.1dB */    {0x2A, 0x29, 0x24, 0x1E, 0x00, 0x00, 0x00, 0x00},
470         /* Index8   -2.4dB */    {0x29, 0x27, 0x23, 0x1D, 0x00, 0x00, 0x00, 0x00},
471         /* Index9   -2.7dB */    {0x27, 0x26, 0x22, 0x1C, 0x00, 0x00, 0x00, 0x00},
472         /* Index10  -3  dB */    {0x26, 0x25, 0x20, 0x1B, 0x00, 0x00, 0x00, 0x00},
473         /* Index11  -3.3dB */    {0x25, 0x23, 0x1F, 0x1A, 0x00, 0x00, 0x00, 0x00},
474         /* Index12  -3.6dB */    {0x24, 0x22, 0x1E, 0x19, 0x00, 0x00, 0x00, 0x00},
475         /* Index13  -3.9dB */    {0x22, 0x21, 0x1D, 0x18, 0x00, 0x00, 0x00, 0x00},
476         /* Index14  -4.2dB */    {0x21, 0x20, 0x1C, 0x17, 0x00, 0x00, 0x00, 0x00},
477         /* Index15  -4.5dB */    {0x20, 0x1F, 0x1B, 0x17, 0x00, 0x00, 0x00, 0x00},
478         /* Index16  -4.8dB */    {0x1F, 0x1E, 0x1A, 0x16, 0x00, 0x00, 0x00, 0x00},
479         /* Index17  -5.1dB */    {0x1E, 0x1D, 0x1A, 0x15, 0x00, 0x00, 0x00, 0x00},
480         /* Index18  -5.4dB */    {0x1D, 0x1C, 0x19, 0x14, 0x00, 0x00, 0x00, 0x00},
481         /* Index19  -5.7dB */    {0x1C, 0x1B, 0x18, 0x14, 0x00, 0x00, 0x00, 0x00},
482         /* Index20  -6  dB */     {0x1B, 0x1A, 0x17, 0x13, 0x00, 0x00, 0x00, 0x00},
483         /* Index21  -6.3dB */    {0x1A, 0x19, 0x16, 0x12, 0x00, 0x00, 0x00, 0x00},
484         /* Index22  -6.6dB */    {0x19, 0x18, 0x15, 0x12, 0x00, 0x00, 0x00, 0x00},
485         /* Index23  -6.9dB */    {0x18, 0x17, 0x15, 0x11, 0x00, 0x00, 0x00, 0x00},
486         /* Index24  -7.2dB */    {0x18, 0x17, 0x14, 0x11, 0x00, 0x00, 0x00, 0x00},
487         /* Index25  -7.5dB */    {0x17, 0x16, 0x13, 0x10, 0x00, 0x00, 0x00, 0x00},
488         /* Index26  -7.8dB */    {0x16, 0x15, 0x13, 0x0F, 0x00, 0x00, 0x00, 0x00},
489         /* Index27  -8.1dB */    {0x15, 0x14, 0x12, 0x0F, 0x00, 0x00, 0x00, 0x00},
490         /* Index28  -8.4dB */    {0x14, 0x14, 0x11, 0x0E, 0x00, 0x00, 0x00, 0x00},
491         /* Index29  -8.7dB */    {0x14, 0x13, 0x11, 0x0E, 0x00, 0x00, 0x00, 0x00},
492         /* Index30  -9  dB */    {0x13, 0x12, 0x10, 0x0D, 0x00, 0x00, 0x00, 0x00},
493         /* Index31  -9.3dB */    {0x12, 0x12, 0x0F, 0x0D, 0x00, 0x00, 0x00, 0x00},
494         /* Index32  -9.6dB */    {0x12, 0x11, 0x0F, 0x0D, 0x00, 0x00, 0x00, 0x00},
495         /* Index33  -9.9dB */    {0x11, 0x11, 0x0F, 0x0C, 0x00, 0x00, 0x00, 0x00},
496         /* Index34 -10.2dB */    {0x11, 0x11, 0x0E, 0x0C, 0x00, 0x00, 0x00, 0x00},
497         /* Index35 -10.5dB */    {0x10, 0x0F, 0x0E, 0x0B, 0x00, 0x00, 0x00, 0x00},
498         /* Index36 -10.8dB */    {0x10, 0x0F, 0x0D, 0x0B, 0x00, 0x00, 0x00, 0x00},
499         /* Index37 -11.1dB */    {0x0F, 0x0E, 0x0D, 0x0A, 0x00, 0x00, 0x00, 0x00},
500         /* Index38 -11.4dB */    {0x0E, 0x0E, 0x0C, 0x0A, 0x00, 0x00, 0x00, 0x00},
501         /* Index39 -11.7dB */    {0x0E, 0x0D, 0x0C, 0x0A, 0x00, 0x00, 0x00, 0x00},
502         /* Index40 -12  dB */    {0x0E, 0x0D, 0x0C, 0x0A, 0x00, 0x00, 0x00, 0x00},
503         /* Index41 -12.3dB */    {0x0D, 0x0D, 0x0B, 0x09, 0x00, 0x00, 0x00, 0x00},
504         /* Index42 -12.6dB */    {0x0D, 0x0C, 0x0B, 0x09, 0x00, 0x00, 0x00, 0x00},
505         /* Index43 -12.9dB */    {0x0C, 0x0C, 0x0A, 0x09, 0x00, 0x00, 0x00, 0x00},
506         /* Index44 -13.2dB */    {0x0C, 0x0B, 0x0A, 0x08, 0x00, 0x00, 0x00, 0x00},
507         /* Index45 -13.5dB */    {0x0B, 0x0B, 0x0A, 0x08, 0x00, 0x00, 0x00, 0x00},
508         /* Index46 -13.8dB */    {0x0B, 0x0B, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00},
509         /* Index47 -14.1dB */    {0x0B, 0x0A, 0x09, 0x07, 0x00, 0x00, 0x00, 0x00},
510         /* Index48 -14.4dB */    {0x0A, 0x0A, 0x09, 0x07, 0x00, 0x00, 0x00, 0x00},
511         /* Index49 -14.7dB */    {0x0A, 0x0A, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00},
512         /* Index50 -15  dB */    {0x0A, 0x09, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00},
513         /* Index51 -15.3dB */    {0x09, 0x09, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00},
514         /* Index52 -15.6dB */    {0x09, 0x09, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00},
515         /* Index53 -15.9dB */    {0x09, 0x08, 0x07, 0x06, 0x00, 0x00, 0x00, 0x00}
516 };
517 #endif
518
519 #ifdef AP_BUILD_WORKAROUND
520
521 unsigned int tx_pwr_trk_ofdm_swing_tbl[tx_pwr_trk_ofdm_swing_tbl_len] = {
522         /*  +6.0dB */ 0x7f8001fe,
523         /*  +5.5dB */ 0x788001e2,
524         /*  +5.0dB */ 0x71c001c7,
525         /*  +4.5dB */ 0x6b8001ae,
526         /*  +4.0dB */ 0x65400195,
527         /*  +3.5dB */ 0x5fc0017f,
528         /*  +3.0dB */ 0x5a400169,
529         /*  +2.5dB */ 0x55400155,
530         /*  +2.0dB */ 0x50800142,
531         /*  +1.5dB */ 0x4c000130,
532         /*  +1.0dB */ 0x47c0011f,
533         /*  +0.5dB */ 0x43c0010f,
534         /*   0.0dB */ 0x40000100,
535         /*  -0.5dB */ 0x3c8000f2,
536         /*  -1.0dB */ 0x390000e4,
537         /*  -1.5dB */ 0x35c000d7,
538         /*  -2.0dB */ 0x32c000cb,
539         /*  -2.5dB */ 0x300000c0,
540         /*  -3.0dB */ 0x2d4000b5,
541         /*  -3.5dB */ 0x2ac000ab,
542         /*  -4.0dB */ 0x288000a2,
543         /*  -4.5dB */ 0x26000098,
544         /*  -5.0dB */ 0x24000090,
545         /*  -5.5dB */ 0x22000088,
546         /*  -6.0dB */ 0x20000080,
547         /*  -6.5dB */ 0x1a00006c,
548         /*  -7.0dB */ 0x1c800072,
549         /*  -7.5dB */ 0x18000060,
550         /*  -8.0dB */ 0x19800066,
551         /*  -8.5dB */ 0x15800056,
552         /*  -9.0dB */ 0x26c0005b,
553         /*  -9.5dB */ 0x14400051,
554         /* -10.0dB */ 0x24400051,
555         /* -10.5dB */ 0x1300004c,
556         /* -11.0dB */ 0x12000048,
557         /* -11.5dB */ 0x11000044,
558         /* -12.0dB */ 0x10000040
559 };
560 #endif
561
562 #endif
563
564
565 u8 delta_swing_table_idx_2ga_p_default[DELTA_SWINGIDX_SIZE] = {0, 0, 0, 0, 1, 1, 2, 2, 3, 3
566         , 4, 4, 4,  4,  4,  4,  4,  4,  5,  5,  7,  7,  8,  8,  8,  9,  9,  9,  9,  9
567                                                               };
568 u8 delta_swing_table_idx_2ga_n_default[DELTA_SWINGIDX_SIZE] = {0, 0, 0, 2, 2, 3, 3, 4, 4, 4
569         , 4, 5, 5,  6,  6,  7,  7,  7,  7,  8,  8,  9,  9, 10, 10, 10, 11, 11, 11, 11
570                                                               };
571
572
573 #ifdef CONFIG_WLAN_HAL_8192EE
574 u32 ofdm_swing_table_92e[OFDM_TABLE_SIZE_92E] = {
575         /* Index0   6  dB */ 0x7fc001ff,
576         /* Index1   5.7dB */ 0x7b4001ed,
577         /* Index2   5.4dB */ 0x774001dd,
578         /* Index3   5.1dB */ 0x734001cd,
579         /* Index4   4.8dB */ 0x6f4001bd,
580         /* Index5   4.5dB */ 0x6b8001ae,
581         /* Index6   4.2dB */ 0x67c0019f,
582         /* Index7   3.9dB */ 0x64400191,
583         /* Index8   3.6dB */ 0x60c00183,
584         /* Index9   3.3dB */ 0x5d800176,
585         /* Index10  3  dB */ 0x5a80016a,
586         /* Index11  2.7dB */ 0x5740015d,
587         /* Index12  2.4dB */ 0x54400151,
588         /* Index13  2.1dB */ 0x51800146,
589         /* Index14  1.8dB */ 0x4ec0013b,
590         /* Index15  1.5dB */ 0x4c000130,
591         /* Index16  1.2dB */ 0x49800126,
592         /* Index17  0.9dB */ 0x4700011c,
593         /* Index18  0.6dB */ 0x44800112,
594         /* Index19  0.3dB */ 0x42000108,
595         /* Index20  0  dB */ 0x40000100, /* 20 This is OFDM base index */
596         /* Index21 -0.3dB */ 0x3dc000f7,
597         /* Index22 -0.6dB */ 0x3bc000ef,
598         /* Index23 -0.9dB */ 0x39c000e7,
599         /* Index24 -1.2dB */ 0x37c000df,
600         /* Index25 -1.5dB */ 0x35c000d7,
601         /* Index26 -1.8dB */ 0x340000d0,
602         /* Index27 -2.1dB */ 0x324000c9,
603         /* Index28 -2.4dB */ 0x308000c2,
604         /* Index29 -2.7dB */ 0x2f0000bc,
605         /* Index30 -3  dB */ 0x2d4000b5,
606         /* Index31 -3.3dB */ 0x2bc000af,
607         /* Index32 -3.6dB */ 0x2a4000a9,
608         /* Index33 -3.9dB */ 0x28c000a3,
609         /* Index34 -4.2dB */ 0x2780009e,
610         /* Index35 -4.5dB */ 0x26000098,
611         /* Index36 -4.8dB */ 0x24c00093,
612         /* Index37 -5.1dB */ 0x2380008e,
613         /* Index38 -5.4dB */ 0x22400089,
614         /* Index39 -5.7dB */ 0x21400085,
615         /* Index40 -6  dB */ 0x20000080,
616         /* Index41 -6.3dB */ 0x1f00007c,
617         /* Index42 -6.6dB */ 0x1e000078,
618         /* Index43 -6.9dB */ 0x1d000074,
619         /* Index44 -7.2dB */ 0x1c000070,
620         /* Index45 -7.5dB */ 0x1b00006c,
621         /* Index46 -7.8dB */ 0x1a000068,
622         /* Index47 -8.1dB */ 0x19400065,
623         /* Index48 -8.4dB */ 0x18400061,
624         /* Index49 -8.7dB */ 0x1780005e,
625         /* Index50 -9  dB */ 0x16c0005b,
626         /* Index51 -9.3dB */ 0x16000058,
627         /* Index52 -9.6dB */ 0x15400055,
628         /* Index53 -9.9dB */ 0x14800052
629 };
630 u8 cck_swing_table_ch1_ch13_92e[CCK_TABLE_SIZE_92E][8] = {
631         /* Index0    0  dB */    {0x36, 0x34, 0x2E, 0x26, 0x1C, 0x12, 0x08, 0x04},
632         /* Index1   -0.3dB */    {0x34, 0x32, 0x2C, 0x25, 0x1B, 0x11, 0x08, 0x04},
633         /* Index2   -0.6dB */    {0x32, 0x30, 0x2B, 0x23, 0x1A, 0x11, 0x07, 0x04},
634         /* Index3   -0.9dB */    {0x31, 0x2F, 0x29, 0x22, 0x19, 0x10, 0x07, 0x04},
635         /* Index4   -1.2dB */    {0x2F, 0x2D, 0x28, 0x21, 0x18, 0x10, 0x07, 0x03},
636         /* Index5   -1.5dB */    {0x2D, 0x2C, 0x27, 0x20, 0x18, 0x0F, 0x07, 0x03},
637         /* Index6   -1.8dB */    {0x2C, 0x2A, 0x25, 0x1F, 0x17, 0x0F, 0x06, 0x03},
638         /* Index7   -2.1dB */    {0x2A, 0x29, 0x24, 0x1E, 0x16, 0x0E, 0x06, 0x03},
639         /* Index8   -2.4dB */    {0x29, 0x27, 0x23, 0x1D, 0x15, 0x0E, 0x06, 0x03},
640         /* Index9   -2.7dB */    {0x27, 0x26, 0x22, 0x1C, 0x14, 0x0D, 0x06, 0x03},
641         /* Index10  -3  dB */    {0x26, 0x25, 0x20, 0x1B, 0x14, 0x0D, 0x06, 0x03},
642         /* Index11  -3.3dB */    {0x25, 0x23, 0x1F, 0x1A, 0x13, 0x0C, 0x05, 0x03},
643         /* Index12  -3.6dB */    {0x24, 0x22, 0x1E, 0x19, 0x12, 0x0C, 0x05, 0x03},
644         /* Index13  -3.9dB */    {0x22, 0x21, 0x1D, 0x18, 0x12, 0x0B, 0x05, 0x03},
645         /* Index14  -4.2dB */    {0x21, 0x20, 0x1C, 0x17, 0x11, 0x0B, 0x05, 0x02},
646         /* Index15  -4.5dB */    {0x20, 0x1F, 0x1B, 0x17, 0x11, 0x0B, 0x05, 0x02},
647         /* Index16  -4.8dB */    {0x1F, 0x1E, 0x1A, 0x16, 0x10, 0x0A, 0x05, 0x02},
648         /* Index17  -5.1dB */    {0x1E, 0x1D, 0x1A, 0x15, 0x10, 0x0A, 0x04, 0x02},
649         /* Index18  -5.4dB */    {0x1D, 0x1C, 0x19, 0x14, 0x0F, 0x0A, 0x04, 0x02},
650         /* Index19  -5.7dB */    {0x1C, 0x1B, 0x18, 0x14, 0x0E, 0x09, 0x04, 0x02},
651         /* Index20  -6.0dB */    {0x1B, 0x1A, 0x17, 0x13, 0x0E, 0x09, 0x04, 0x02}, /* 20 This is CCK base index */
652         /* Index21  -6.3dB */    {0x1A, 0x19, 0x16, 0x12, 0x0E, 0x09, 0x04, 0x02},
653         /* Index22  -6.6dB */    {0x19, 0x18, 0x15, 0x12, 0x0D, 0x08, 0x04, 0x02},
654         /* Index23  -6.9dB */    {0x18, 0x17, 0x15, 0x11, 0x0D, 0x08, 0x04, 0x02},
655         /* Index24  -7.2dB */    {0x18, 0x17, 0x14, 0x11, 0x0C, 0x08, 0x03, 0x02},
656         /* Index25  -7.5dB */    {0x17, 0x16, 0x13, 0x10, 0x0C, 0x08, 0x03, 0x02},
657         /* Index26  -7.8dB */    {0x16, 0x15, 0x13, 0x0F, 0x0B, 0x07, 0x03, 0x02},
658         /* Index27  -8.1dB */    {0x15, 0x14, 0x12, 0x0F, 0x0B, 0x07, 0x03, 0x02},
659         /* Index28  -8.4dB */    {0x14, 0x14, 0x11, 0x0E, 0x0B, 0x07, 0x03, 0x02},
660         /* Index29  -8.7dB */    {0x14, 0x13, 0x11, 0x0E, 0x0A, 0x07, 0x03, 0x01},
661         /* Index30  -9.0dB */    {0x13, 0x12, 0x10, 0x0D, 0x0A, 0x06, 0x03, 0x01}, /* 30 This is hp CCK base index */
662         /* Index31  -9.3dB */    {0x12, 0x12, 0x0F, 0x0D, 0x0A, 0x06, 0x03, 0x01},
663         /* Index32  -9.6dB */    {0x12, 0x11, 0x0F, 0x0D, 0x09, 0x06, 0x03, 0x01},
664         /* Index33  -9.9dB */    {0x11, 0x11, 0x0F, 0x0C, 0x09, 0x06, 0x03, 0x01},
665         /* Index34 -10.2dB */    {0x11, 0x11, 0x0E, 0x0C, 0x09, 0x06, 0x02, 0x01},
666         /* Index35 -10.5dB */    {0x10, 0x0F, 0x0E, 0x0B, 0x08, 0x05, 0x02, 0x01},
667         /* Index36 -10.8dB */    {0x10, 0x0F, 0x0D, 0x0B, 0x08, 0x05, 0x02, 0x01},
668         /* Index37 -11.1dB */    {0x0F, 0x0E, 0x0D, 0x0A, 0x08, 0x05, 0x02, 0x01},
669         /* Index38 -11.4dB */    {0x0E, 0x0E, 0x0C, 0x0A, 0x07, 0x05, 0x02, 0x01},
670         /* Index39 -11.7dB */    {0x0E, 0x0D, 0x0C, 0x0A, 0x07, 0x05, 0x02, 0x01},
671         /* Index40 -12  dB */    {0x0E, 0x0D, 0x0C, 0x0A, 0x07, 0x05, 0x02, 0x01},
672         /* Index41 -12.3dB */    {0x0D, 0x0D, 0x0B, 0x09, 0x07, 0x04, 0x02, 0x01},
673         /* Index42 -12.6dB */    {0x0D, 0x0C, 0x0B, 0x09, 0x07, 0x04, 0x02, 0x01},
674         /* Index43 -12.9dB */    {0x0C, 0x0C, 0x0A, 0x09, 0x06, 0x04, 0x02, 0x01},
675         /* Index44 -13.2dB */    {0x0C, 0x0B, 0x0A, 0x08, 0x06, 0x04, 0x02, 0x01},
676         /* Index45 -13.5dB */    {0x0B, 0x0B, 0x0A, 0x08, 0x06, 0x04, 0x02, 0x01},
677         /* Index46 -13.8dB */    {0x0B, 0x0B, 0x09, 0x08, 0x06, 0x04, 0x02, 0x01},
678         /* Index47 -14.1dB */    {0x0B, 0x0A, 0x09, 0x07, 0x06, 0x04, 0x02, 0x01},
679         /* Index48 -14.4dB */    {0x0A, 0x0A, 0x09, 0x07, 0x05, 0x03, 0x02, 0x01},
680         /* Index49 -14.7dB */    {0x0A, 0x0A, 0x08, 0x07, 0x05, 0x03, 0x01, 0x01},
681         /* Index50 -15  dB */    {0x0A, 0x09, 0x08, 0x07, 0x05, 0x03, 0x01, 0x01},
682         /* Index51 -15.3dB */    {0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01},
683         /* Index52 -15.6dB */    {0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01},
684         /* Index53 -15.9dB */    {0x09, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x01}
685 };
686 u8 cck_swing_table_ch14_92e[CCK_TABLE_SIZE_92E][8] = {
687         /* Index0    0  dB */    {0x36, 0x34, 0x2E, 0x26, 0x00, 0x00, 0x00, 0x00},
688         /* Index1   -0.3dB */    {0x34, 0x32, 0x2C, 0x25, 0x00, 0x00, 0x00, 0x00},
689         /* Index2   -0.6dB */    {0x32, 0x30, 0x2B, 0x23, 0x00, 0x00, 0x00, 0x00},
690         /* Index3   -0.9dB */    {0x31, 0x2F, 0x29, 0x22, 0x00, 0x00, 0x00, 0x00},
691         /* Index4   -1.2dB */    {0x2F, 0x2D, 0x28, 0x21, 0x00, 0x00, 0x00, 0x00},
692         /* Index5   -1.5dB */    {0x2D, 0x2C, 0x27, 0x20, 0x00, 0x00, 0x00, 0x00},
693         /* Index6   -1.8dB */    {0x2C, 0x2A, 0x25, 0x1F, 0x00, 0x00, 0x00, 0x00},
694         /* Index7   -2.1dB */    {0x2A, 0x29, 0x24, 0x1E, 0x00, 0x00, 0x00, 0x00},
695         /* Index8   -2.4dB */    {0x29, 0x27, 0x23, 0x1D, 0x00, 0x00, 0x00, 0x00},
696         /* Index9   -2.7dB */    {0x27, 0x26, 0x22, 0x1C, 0x00, 0x00, 0x00, 0x00},
697         /* Index10  -3  dB */    {0x26, 0x25, 0x20, 0x1B, 0x00, 0x00, 0x00, 0x00},
698         /* Index11  -3.3dB */    {0x25, 0x23, 0x1F, 0x1A, 0x00, 0x00, 0x00, 0x00},
699         /* Index12  -3.6dB */    {0x24, 0x22, 0x1E, 0x19, 0x00, 0x00, 0x00, 0x00},
700         /* Index13  -3.9dB */    {0x22, 0x21, 0x1D, 0x18, 0x00, 0x00, 0x00, 0x00},
701         /* Index14  -4.2dB */    {0x21, 0x20, 0x1C, 0x17, 0x00, 0x00, 0x00, 0x00},
702         /* Index15  -4.5dB */    {0x20, 0x1F, 0x1B, 0x17, 0x00, 0x00, 0x00, 0x00},
703         /* Index16  -4.8dB */    {0x1F, 0x1E, 0x1A, 0x16, 0x00, 0x00, 0x00, 0x00},
704         /* Index17  -5.1dB */    {0x1E, 0x1D, 0x1A, 0x15, 0x00, 0x00, 0x00, 0x00},
705         /* Index18  -5.4dB */    {0x1D, 0x1C, 0x19, 0x14, 0x00, 0x00, 0x00, 0x00},
706         /* Index19  -5.7dB */    {0x1C, 0x1B, 0x18, 0x14, 0x00, 0x00, 0x00, 0x00},
707         /* Index20  -6  dB */     {0x1B, 0x1A, 0x17, 0x13, 0x00, 0x00, 0x00, 0x00},
708         /* Index21  -6.3dB */    {0x1A, 0x19, 0x16, 0x12, 0x00, 0x00, 0x00, 0x00},
709         /* Index22  -6.6dB */    {0x19, 0x18, 0x15, 0x12, 0x00, 0x00, 0x00, 0x00},
710         /* Index23  -6.9dB */    {0x18, 0x17, 0x15, 0x11, 0x00, 0x00, 0x00, 0x00},
711         /* Index24  -7.2dB */    {0x18, 0x17, 0x14, 0x11, 0x00, 0x00, 0x00, 0x00},
712         /* Index25  -7.5dB */    {0x17, 0x16, 0x13, 0x10, 0x00, 0x00, 0x00, 0x00},
713         /* Index26  -7.8dB */    {0x16, 0x15, 0x13, 0x0F, 0x00, 0x00, 0x00, 0x00},
714         /* Index27  -8.1dB */    {0x15, 0x14, 0x12, 0x0F, 0x00, 0x00, 0x00, 0x00},
715         /* Index28  -8.4dB */    {0x14, 0x14, 0x11, 0x0E, 0x00, 0x00, 0x00, 0x00},
716         /* Index29  -8.7dB */    {0x14, 0x13, 0x11, 0x0E, 0x00, 0x00, 0x00, 0x00},
717         /* Index30  -9  dB */    {0x13, 0x12, 0x10, 0x0D, 0x00, 0x00, 0x00, 0x00},
718         /* Index31  -9.3dB */    {0x12, 0x12, 0x0F, 0x0D, 0x00, 0x00, 0x00, 0x00},
719         /* Index32  -9.6dB */    {0x12, 0x11, 0x0F, 0x0D, 0x00, 0x00, 0x00, 0x00},
720         /* Index33  -9.9dB */    {0x11, 0x11, 0x0F, 0x0C, 0x00, 0x00, 0x00, 0x00},
721         /* Index34 -10.2dB */    {0x11, 0x11, 0x0E, 0x0C, 0x00, 0x00, 0x00, 0x00},
722         /* Index35 -10.5dB */    {0x10, 0x0F, 0x0E, 0x0B, 0x00, 0x00, 0x00, 0x00},
723         /* Index36 -10.8dB */    {0x10, 0x0F, 0x0D, 0x0B, 0x00, 0x00, 0x00, 0x00},
724         /* Index37 -11.1dB */    {0x0F, 0x0E, 0x0D, 0x0A, 0x00, 0x00, 0x00, 0x00},
725         /* Index38 -11.4dB */    {0x0E, 0x0E, 0x0C, 0x0A, 0x00, 0x00, 0x00, 0x00},
726         /* Index39 -11.7dB */    {0x0E, 0x0D, 0x0C, 0x0A, 0x00, 0x00, 0x00, 0x00},
727         /* Index40 -12  dB */    {0x0E, 0x0D, 0x0C, 0x0A, 0x00, 0x00, 0x00, 0x00},
728         /* Index41 -12.3dB */    {0x0D, 0x0D, 0x0B, 0x09, 0x00, 0x00, 0x00, 0x00},
729         /* Index42 -12.6dB */    {0x0D, 0x0C, 0x0B, 0x09, 0x00, 0x00, 0x00, 0x00},
730         /* Index43 -12.9dB */    {0x0C, 0x0C, 0x0A, 0x09, 0x00, 0x00, 0x00, 0x00},
731         /* Index44 -13.2dB */    {0x0C, 0x0B, 0x0A, 0x08, 0x00, 0x00, 0x00, 0x00},
732         /* Index45 -13.5dB */    {0x0B, 0x0B, 0x0A, 0x08, 0x00, 0x00, 0x00, 0x00},
733         /* Index46 -13.8dB */    {0x0B, 0x0B, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00},
734         /* Index47 -14.1dB */    {0x0B, 0x0A, 0x09, 0x07, 0x00, 0x00, 0x00, 0x00},
735         /* Index48 -14.4dB */    {0x0A, 0x0A, 0x09, 0x07, 0x00, 0x00, 0x00, 0x00},
736         /* Index49 -14.7dB */    {0x0A, 0x0A, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00},
737         /* Index50 -15  dB */    {0x0A, 0x09, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00},
738         /* Index51 -15.3dB */    {0x09, 0x09, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00},
739         /* Index52 -15.6dB */    {0x09, 0x09, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00},
740         /* Index53 -15.9dB */    {0x09, 0x08, 0x07, 0x06, 0x00, 0x00, 0x00, 0x00}
741 };
742 #endif
743
744 #if (RTL8814A_SUPPORT == 1 || RTL8822B_SUPPORT == 1)
745 u32 tx_scaling_table_jaguar[TXSCALE_TABLE_SIZE] = {
746         0x081, /* 0,  -12.0dB */
747         0x088, /* 1,  -11.5dB */
748         0x090, /* 2,  -11.0dB */
749         0x099, /* 3,  -10.5dB */
750         0x0A2, /* 4,  -10.0dB */
751         0x0AC, /* 5,  -9.5dB */
752         0x0B6, /* 6,  -9.0dB */
753         0x0C0, /* 7,  -8.5dB */
754         0x0CC, /* 8,  -8.0dB */
755         0x0D8, /* 9,  -7.5dB */
756         0x0E5, /* 10, -7.0dB */
757         0x0F2, /* 11, -6.5dB */
758         0x101, /* 12, -6.0dB */
759         0x110, /* 13, -5.5dB */
760         0x120, /* 14, -5.0dB */
761         0x131, /* 15, -4.5dB */
762         0x143, /* 16, -4.0dB */
763         0x156, /* 17, -3.5dB */
764         0x16A, /* 18, -3.0dB */
765         0x180, /* 19, -2.5dB */
766         0x197, /* 20, -2.0dB */
767         0x1AF, /* 21, -1.5dB */
768         0x1C8, /* 22, -1.0dB */
769         0x1E3, /* 23, -0.5dB */
770         0x200, /* 24, +0  dB */
771         0x21E, /* 25, +0.5dB */
772         0x23E, /* 26, +1.0dB */
773         0x261, /* 27, +1.5dB */
774         0x285, /* 28, +2.0dB */
775         0x2AB, /* 29, +2.5dB */
776         0x2D3, /* 30, +3.0dB */
777         0x2FE, /* 31, +3.5dB */
778         0x32B, /* 32, +4.0dB */
779         0x35C, /* 33, +4.5dB */
780         0x38E, /* 34, +5.0dB */
781         0x3C4, /* 35, +5.5dB */
782         0x3FE  /* 36, +6.0dB */
783 };
784 #elif(ODM_IC_11AC_SERIES_SUPPORT)
785 u32 ofdm_swing_table_8812[OFDM_TABLE_SIZE_8812] = {
786         0x3FE, /* 0,  (6dB) */
787         0x3C4, /* 1,  (5.5dB) */
788         0x38E, /* 2,  (5dB) */
789         0x35C, /* 3,  (4.5dB) */
790         0x32B, /* 4,  (4dB) */
791         0x2FE, /* 5,  (3.5dB) */
792         0x2D3, /* 6,  (3dB) */
793         0x2AB, /* 7,  (2.5dB) */
794         0x285, /* 8,  (2dB) */
795         0x261, /* 9,  (1.5dB */
796         0x23E, /* 10, (1dB) */
797         0x21E, /* 11, (0.5dB) */
798         0x200, /* 12, (0dB)             8814 int PA 2G default */
799         0x1E3, /* 13, (-0.5dB) */
800         0x1C8, /* 14, (-1dB) */
801         0x1AF, /* 15, (-1.5dB) */
802         0x197, /* 16, (-2dB) */
803         0x180, /* 17, (-2.5dB) */
804         0x16A, /* 18, (-3dB)            8812 / 8814 int PA 5G / 8814 ext PA 2G5G default */
805         0x156, /* 19, (-3.5dB) */
806         0x143, /* 20, (-4dB)            8812 HP default */
807         0x131, /* 21, (-4.5dB) */
808         0x120, /* 22, (-5dB) */
809         0x110, /* 23, (-5.5dB) */
810         0x101, /* 24, (-6dB) */
811         0x0F2, /* 25, (-6.5dB) */
812         0x0E5, /* 26, (-7dB) */
813         0x0D8, /* 27, (-7.5dB) */
814         0x0CC, /* 28, (-8dB) */
815         0x0C0, /* 29, (-8.5dB) */
816         0x0B6, /* 30, (-9dB) */
817         0x0AC, /* 31, (-9.5dB) */
818         0x0A2, /* 32, (-10dB) */
819         0x099, /* 33, (-10.5dB) */
820         0x090, /* 34, (-11dB) */
821         0x088, /* 35, (-11.5dB) */
822         0x081, /* 36, (-12dB) */
823         0x079, /* 37, (-12.5dB) */
824         0x072, /* 38, (-13dB) */
825         0x06c, /* 39, (-13.5dB) */
826         0x066, /* 40, (-14dB) */
827         0x060, /* 41, (-14.5dB) */
828         0x05B  /* 42, (-15dB) */
829 };
830 #endif
831
832 u32 cck_swing_table_ch1_ch14_8723d[CCK_TABLE_SIZE_8723D] = {
833         0x0CD,
834         0x0D9,
835         0x0E6,
836         0x0F3,
837         0x102,
838         0x111,
839         0x121,
840         0x132,
841         0x144,
842         0x158,
843         0x16C,
844         0x182,
845         0x198,
846         0x1B1,
847         0x1CA,
848         0x1E5,
849         0x202,
850         0x221,
851         0x241,
852         0x263,
853         0x287,
854         0x2AE,
855         0x2D6,
856         0x301,
857         0x32F,
858         0x35F,
859         0x392,
860         0x3C9,
861         0x402,
862         0x43F,
863         0x47F,
864         0x4C3,
865         0x50C,
866         0x558,
867         0x5A9,
868         0x5FF,
869         0x65A,
870         0x6BA,
871         0x720,
872         0x78C,
873         0x7FF,
874 };
875 /* JJ ADD 20161014 */
876 u32 cck_swing_table_ch1_ch14_8710b[CCK_TABLE_SIZE_8710B] = {
877         0x0CD,
878         0x0D9,
879         0x0E6,
880         0x0F3,
881         0x102,
882         0x111,
883         0x121,
884         0x132,
885         0x144,
886         0x158,
887         0x16C,
888         0x182,
889         0x198,
890         0x1B1,
891         0x1CA,
892         0x1E5,
893         0x202,
894         0x221,
895         0x241,
896         0x263,
897         0x287,
898         0x2AE,
899         0x2D6,
900         0x301,
901         0x32F,
902         0x35F,
903         0x392,
904         0x3C9,
905         0x402,
906         0x43F,
907         0x47F,
908         0x4C3,
909         0x50C,
910         0x558,
911         0x5A9,
912         0x5FF,
913         0x65A,
914         0x6BA,
915         0x720,
916         0x78C,
917         0x7FF,
918 };
919
920
921 /* #endif */
922 /* 3============================================================
923  * 3 Tx Power Tracking
924  * 3============================================================ */
925
926 void
927 odm_txpowertracking_init(
928         void            *p_dm_void
929 )
930 {
931         struct PHY_DM_STRUCT            *p_dm_odm = (struct PHY_DM_STRUCT *)p_dm_void;
932 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))
933         if (!(p_dm_odm->support_ic_type & (ODM_RTL8814A | ODM_RTL8822B | ODM_IC_11N_SERIES)))
934                 return;
935 #endif
936
937         odm_txpowertracking_thermal_meter_init(p_dm_odm);
938 }
939
940
941 u8
942 get_swing_index(
943         void            *p_dm_void
944 )
945 {
946         struct PHY_DM_STRUCT            *p_dm_odm = (struct PHY_DM_STRUCT *)p_dm_void;
947         u8                      i = 0, bb_swing_mask = 0;
948         u32                     bb_swing = 0;
949         u32                     swing_table_size = 0;
950         u32                     *p_swing_table = 0;
951         struct rtl8192cd_priv   *priv = p_dm_odm->priv;
952
953 #if (RTL8197F_SUPPORT == 1)
954         if (GET_CHIP_VER(priv) == VERSION_8197F) {
955                 bb_swing = phy_query_bb_reg(priv, REG_OFDM_0_XA_TX_IQ_IMBALANCE, MASKOFDM_D);
956                 p_swing_table = ofdm_swing_table_new;
957                 swing_table_size = OFDM_TABLE_SIZE_92D;
958                 bb_swing_mask = 22;
959         }
960 #endif
961
962 #if (RTL8822B_SUPPORT == 1)
963         if (GET_CHIP_VER(priv) == VERSION_8822B) {
964                 bb_swing = phy_query_bb_reg(priv, REG_A_TX_SCALE_JAGUAR, 0xFFE00000);
965                 p_swing_table = tx_scaling_table_jaguar;
966                 swing_table_size = TXSCALE_TABLE_SIZE;
967                 bb_swing_mask = 0;
968         }
969 #endif
970
971         for (i = 0; i < swing_table_size - 1; i++) {
972                 u32 table_value = p_swing_table[i] >> bb_swing_mask;
973
974                 if (bb_swing == table_value)
975                         break;
976         }
977
978         ODM_RT_TRACE(p_dm_odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD, ("bb_swing=0x%x bbswing_index=%d\n", bb_swing, i));
979
980
981         return i;
982 }
983
984
985 void
986 odm_txpowertracking_thermal_meter_init(
987         void            *p_dm_void
988 )
989 {
990         struct PHY_DM_STRUCT            *p_dm_odm = (struct PHY_DM_STRUCT *)p_dm_void;
991         struct odm_rf_calibration_structure     *p_rf_calibrate_info = &(p_dm_odm->rf_calibrate_info);
992         struct rtl8192cd_priv           *priv = p_dm_odm->priv;
993         u8 p;
994         u8 default_swing_index;
995 #if (RTL8197F_SUPPORT == 1 || RTL8822B_SUPPORT == 1)
996         if ((GET_CHIP_VER(priv) == VERSION_8197F) || (GET_CHIP_VER(priv) == VERSION_8822B))
997                 default_swing_index = get_swing_index(p_dm_odm);
998 #endif
999
1000 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
1001         struct _ADAPTER         *adapter = p_dm_odm->adapter;
1002         PMGNT_INFO      p_mgnt_info = &adapter->MgntInfo;
1003         HAL_DATA_TYPE           *p_hal_data = GET_HAL_DATA(adapter);
1004
1005         p_mgnt_info->is_txpowertracking = true;
1006         p_hal_data->tx_powercount       = 0;
1007         p_hal_data->is_txpowertracking_init = false;
1008
1009         if (p_dm_odm->mp_mode == false)
1010                 p_hal_data->txpowertrack_control = true;
1011         ODM_RT_TRACE(p_dm_odm, COMP_POWER_TRACKING, DBG_LOUD, ("p_mgnt_info->is_txpowertracking = %d\n", p_mgnt_info->is_txpowertracking));
1012 #elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
1013 #ifdef CONFIG_RTL8188E
1014         {
1015                 p_dm_odm->rf_calibrate_info.is_txpowertracking = _TRUE;
1016                 p_dm_odm->rf_calibrate_info.tx_powercount = 0;
1017                 p_dm_odm->rf_calibrate_info.is_txpowertracking_init = _FALSE;
1018
1019                 if (p_dm_odm->mp_mode == false)
1020                         p_dm_odm->rf_calibrate_info.txpowertrack_control = _TRUE;
1021
1022                 MSG_8192C("p_dm_odm txpowertrack_control = %d\n", p_dm_odm->rf_calibrate_info.txpowertrack_control);
1023         }
1024 #else
1025         {
1026                 struct _ADAPTER         *adapter = p_dm_odm->adapter;
1027                 HAL_DATA_TYPE   *p_hal_data = GET_HAL_DATA(adapter);
1028                 struct dm_priv  *pdmpriv = &p_hal_data->dmpriv;
1029
1030                 /* if(IS_HARDWARE_TYPE_8192C(p_hal_data)) */
1031                 {
1032                         pdmpriv->is_txpowertracking = _TRUE;
1033                         pdmpriv->tx_powercount = 0;
1034                         pdmpriv->is_txpowertracking_init = _FALSE;
1035
1036                         if (p_dm_odm->mp_mode == false)         /* for mp driver, turn off txpwrtracking as default */
1037                                 pdmpriv->txpowertrack_control = _TRUE;
1038
1039                 }
1040                 MSG_8192C("pdmpriv->txpowertrack_control = %d\n", pdmpriv->txpowertrack_control);
1041
1042         }
1043 #endif/* endif (CONFIG_RTL8188E==1) */
1044 #elif (DM_ODM_SUPPORT_TYPE & (ODM_AP))
1045
1046 #ifdef RTL8188E_SUPPORT
1047         {
1048                 p_dm_odm->rf_calibrate_info.is_txpowertracking = _TRUE;
1049                 p_dm_odm->rf_calibrate_info.tx_powercount = 0;
1050                 p_dm_odm->rf_calibrate_info.is_txpowertracking_init = _FALSE;
1051                 p_dm_odm->rf_calibrate_info.txpowertrack_control = _TRUE;
1052                 p_dm_odm->rf_calibrate_info.tm_trigger = 0;
1053         }
1054 #endif
1055 #endif
1056
1057         p_dm_odm->rf_calibrate_info.txpowertrack_control = true;
1058         p_dm_odm->rf_calibrate_info.delta_power_index = 0;
1059         p_dm_odm->rf_calibrate_info.delta_power_index_last = 0;
1060         p_dm_odm->rf_calibrate_info.power_index_offset = 0;
1061         p_dm_odm->rf_calibrate_info.thermal_value = 0;
1062         p_rf_calibrate_info->default_ofdm_index = 28;
1063
1064 #if (RTL8197F_SUPPORT == 1)
1065         if (GET_CHIP_VER(priv) == VERSION_8197F) {
1066                 p_rf_calibrate_info->default_ofdm_index = (default_swing_index >= (OFDM_TABLE_SIZE_92D - 1)) ? 30 : default_swing_index;
1067                 p_rf_calibrate_info->default_cck_index = 28;
1068         }
1069 #endif
1070
1071 #if (RTL8822B_SUPPORT == 1)
1072         if (GET_CHIP_VER(priv) == VERSION_8822B) {
1073                 p_rf_calibrate_info->default_ofdm_index = (default_swing_index >= (TXSCALE_TABLE_SIZE - 1)) ? 24 : default_swing_index;
1074                 p_rf_calibrate_info->default_cck_index = 20;
1075         }
1076 #endif
1077
1078
1079 #if RTL8188E_SUPPORT
1080         p_rf_calibrate_info->default_cck_index = 20;    /* -6 dB */
1081 #elif RTL8192E_SUPPORT
1082         p_rf_calibrate_info->default_cck_index = 8;     /* -12 dB */
1083 #endif
1084         p_rf_calibrate_info->bb_swing_idx_ofdm_base = p_rf_calibrate_info->default_ofdm_index;
1085         p_rf_calibrate_info->bb_swing_idx_cck_base = p_rf_calibrate_info->default_cck_index;
1086         p_dm_odm->rf_calibrate_info.CCK_index = p_rf_calibrate_info->default_cck_index;
1087
1088         for (p = 0; p < MAX_RF_PATH; p++) {
1089                 p_dm_odm->rf_calibrate_info.OFDM_index[p] = p_rf_calibrate_info->default_ofdm_index;
1090                 p_rf_calibrate_info->bb_swing_idx_ofdm[p] = p_rf_calibrate_info->default_ofdm_index;
1091                 p_rf_calibrate_info->kfree_offset[p] = 0;       /* for 8814 kfree*/
1092         }
1093         p_rf_calibrate_info->bb_swing_idx_cck = p_rf_calibrate_info->default_cck_index;
1094
1095         ODM_RT_TRACE(p_dm_odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD, ("p_rf_calibrate_info->default_ofdm_index=%d p_rf_calibrate_info->default_cck_index=%d\n", p_rf_calibrate_info->default_ofdm_index, p_rf_calibrate_info->default_cck_index));
1096
1097
1098 }
1099
1100
1101 void
1102 odm_txpowertracking_check(
1103         void            *p_dm_void
1104 )
1105 {
1106         /*  */
1107         /* For AP/ADSL use struct rtl8192cd_priv* */
1108         /* For CE/NIC use struct _ADAPTER* */
1109         /*  */
1110         struct PHY_DM_STRUCT            *p_dm_odm = (struct PHY_DM_STRUCT *)p_dm_void;
1111
1112
1113
1114         if (!(p_dm_odm->support_ability & ODM_RF_TX_PWR_TRACK))
1115                 return;
1116
1117         /*  */
1118         /* 2011/09/29 MH In HW integration first stage, we provide 4 different handle to operate */
1119         /* at the same time. In the stage2/3, we need to prive universal interface and merge all */
1120         /* HW dynamic mechanism. */
1121         /*  */
1122         switch  (p_dm_odm->support_platform) {
1123         case    ODM_WIN:
1124                 odm_txpowertracking_check_mp(p_dm_odm);
1125                 break;
1126
1127         case    ODM_CE:
1128                 odm_txpowertracking_check_ce(p_dm_odm);
1129                 break;
1130
1131         case    ODM_AP:
1132                 odm_txpowertracking_check_ap(p_dm_odm);
1133                 break;
1134
1135         case    ODM_ADSL:
1136                 /*odm_DIGAP(p_dm_odm);*/
1137                 break;
1138         }
1139
1140 }
1141
1142 void
1143 odm_txpowertracking_check_ce(
1144         void            *p_dm_void
1145 )
1146 {
1147 #if (DM_ODM_SUPPORT_TYPE == ODM_CE)
1148         struct PHY_DM_STRUCT            *p_dm_odm = (struct PHY_DM_STRUCT *)p_dm_void;
1149         struct _ADAPTER *adapter = p_dm_odm->adapter;
1150
1151 #if (RTL8188E_SUPPORT == 1)
1152
1153         /* if(!p_mgnt_info->is_txpowertracking || (!pdmpriv->txpowertrack_control && pdmpriv->is_ap_kdone)) */
1154         if (!(p_dm_odm->support_ability & ODM_RF_TX_PWR_TRACK))
1155                 return;
1156
1157         if (!p_dm_odm->rf_calibrate_info.tm_trigger) {  /* at least delay 1 sec */
1158                 /* p_hal_data->TxPowerCheckCnt++;        */ /* cosa add for debug */
1159                 odm_set_rf_reg(p_dm_odm, RF_PATH_A, RF_T_METER, RFREGOFFSETMASK, 0x60);
1160                 /* DBG_8192C("Trigger 92C Thermal Meter!!\n"); */
1161
1162                 p_dm_odm->rf_calibrate_info.tm_trigger = 1;
1163                 return;
1164
1165         } else {
1166                 /* DBG_8192C("Schedule TxPowerTracking direct call!!\n"); */
1167                 odm_txpowertracking_callback_thermal_meter_8188e(adapter);
1168                 p_dm_odm->rf_calibrate_info.tm_trigger = 0;
1169         }
1170 #endif
1171
1172 #endif
1173 }
1174
1175 void
1176 odm_txpowertracking_check_mp(
1177         void            *p_dm_void
1178 )
1179 {
1180 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
1181         struct PHY_DM_STRUCT            *p_dm_odm = (struct PHY_DM_STRUCT *)p_dm_void;
1182         struct _ADAPTER *adapter = p_dm_odm->adapter;
1183
1184         if (odm_check_power_status(adapter) == false)
1185                 return;
1186
1187         if (!adapter->is_slave_of_dmsp || adapter->dual_mac_smart_concurrent == false)
1188                 odm_txpowertracking_thermal_meter_check(adapter);
1189 #endif
1190
1191 }
1192
1193
1194 void
1195 odm_txpowertracking_check_ap(
1196         void            *p_dm_void
1197 )
1198 {
1199         struct PHY_DM_STRUCT            *p_dm_odm = (struct PHY_DM_STRUCT *)p_dm_void;
1200 #if (DM_ODM_SUPPORT_TYPE == ODM_AP)
1201         struct rtl8192cd_priv   *priv           = p_dm_odm->priv;
1202
1203 #if ((RTL8188E_SUPPORT == 1) || (RTL8192E_SUPPORT == 1) || (RTL8812A_SUPPORT == 1) || (RTL8881A_SUPPORT == 1) || (RTL8814A_SUPPORT == 1) || (RTL8197F_SUPPORT == 1))
1204         if (p_dm_odm->support_ic_type & (ODM_RTL8188E | ODM_RTL8192E | ODM_RTL8812 | ODM_RTL8881A | ODM_RTL8814A | ODM_RTL8197F | ODM_RTL8822B))
1205                 odm_txpowertracking_callback_thermal_meter(p_dm_odm);
1206         else
1207 #endif
1208         {
1209         }
1210 #endif
1211
1212 }
1213
1214 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
1215
1216 void
1217 odm_txpowertracking_thermal_meter_check(
1218         struct _ADAPTER         *adapter
1219 )
1220 {
1221 #ifndef AP_BUILD_WORKAROUND
1222 #if (HAL_CODE_BASE == RTL8192_C)
1223         PMGNT_INFO              p_mgnt_info = &adapter->MgntInfo;
1224         /* HAL_DATA_TYPE                        *p_hal_data = GET_HAL_DATA(adapter); */
1225         static u8                       tm_trigger = 0;
1226         /* u8                                   TxPowerCheckCnt = 5;     */ /* 10 sec */
1227
1228         if (!p_mgnt_info->is_txpowertracking /*|| (!p_hal_data->txpowertrack_control && p_hal_data->is_ap_kdone)*/)
1229                 return;
1230
1231         if (!tm_trigger) {      /* at least delay 1 sec */
1232                 if (IS_HARDWARE_TYPE_8188E(adapter) || IS_HARDWARE_TYPE_8812(adapter))
1233                         phy_set_rf_reg(adapter, RF_PATH_A, RF_T_METER_88E, BIT(17) | BIT(16), 0x03);
1234                 else
1235                         phy_set_rf_reg(adapter, RF_PATH_A, RF_T_METER, RFREGOFFSETMASK, 0x60);
1236                 RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD, ("Trigger 92C Thermal Meter!!\n"));
1237
1238                 tm_trigger = 1;
1239                 return;
1240         } else {
1241                 RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD, ("Schedule TxPowerTracking direct call!!\n"));
1242                 odm_txpowertracking_direct_call(adapter); /* Using direct call is instead, added by Roger, 2009.06.18. */
1243                 tm_trigger = 0;
1244         }
1245 #endif
1246 #endif
1247 }
1248
1249 #endif