Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
nu11secur1ty
GitHub Repository: nu11secur1ty/Kali-Linux
Path: blob/master/ALFA-W1F1/RTL8814AU/hal/phydm/halrf/halrf_powertracking_ce.c
1308 views
1
/******************************************************************************
2
*
3
* Copyright(c) 2007 - 2017 Realtek Corporation.
4
*
5
* This program is free software; you can redistribute it and/or modify it
6
* under the terms of version 2 of the GNU General Public License as
7
* published by the Free Software Foundation.
8
*
9
* This program is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12
* more details.
13
*
14
* The full GNU General Public License is included in this distribution in the
15
* file called LICENSE.
16
*
17
* Contact Information:
18
* wlanfae <[email protected]>
19
* Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,
20
* Hsinchu 300, Taiwan.
21
*
22
* Larry Finger <[email protected]>
23
*
24
*****************************************************************************/
25
26
/*@===========================================================
27
* include files
28
*============================================================
29
*/
30
31
#include "mp_precomp.h"
32
#include "phydm_precomp.h"
33
34
/*@************************************************************
35
* Global var
36
* ************************************************************
37
*/
38
39
u32 ofdm_swing_table[OFDM_TABLE_SIZE] = {
40
0x7f8001fe, /* 0, +6.0dB */
41
0x788001e2, /* 1, +5.5dB */
42
0x71c001c7, /* 2, +5.0dB*/
43
0x6b8001ae, /* 3, +4.5dB*/
44
0x65400195, /* 4, +4.0dB*/
45
0x5fc0017f, /* 5, +3.5dB*/
46
0x5a400169, /* 6, +3.0dB*/
47
0x55400155, /* 7, +2.5dB*/
48
0x50800142, /* 8, +2.0dB*/
49
0x4c000130, /* 9, +1.5dB*/
50
0x47c0011f, /* 10, +1.0dB*/
51
0x43c0010f, /* 11, +0.5dB*/
52
0x40000100, /* 12, +0dB*/
53
0x3c8000f2, /* 13, -0.5dB*/
54
0x390000e4, /* 14, -1.0dB*/
55
0x35c000d7, /* 15, -1.5dB*/
56
0x32c000cb, /* 16, -2.0dB*/
57
0x300000c0, /* 17, -2.5dB*/
58
0x2d4000b5, /* 18, -3.0dB*/
59
0x2ac000ab, /* 19, -3.5dB*/
60
0x288000a2, /* 20, -4.0dB*/
61
0x26000098, /* 21, -4.5dB*/
62
0x24000090, /* 22, -5.0dB*/
63
0x22000088, /* 23, -5.5dB*/
64
0x20000080, /* 24, -6.0dB*/
65
0x1e400079, /* 25, -6.5dB*/
66
0x1c800072, /* 26, -7.0dB*/
67
0x1b00006c, /* 27. -7.5dB*/
68
0x19800066, /* 28, -8.0dB*/
69
0x18000060, /* 29, -8.5dB*/
70
0x16c0005b, /* 30, -9.0dB*/
71
0x15800056, /* 31, -9.5dB*/
72
0x14400051, /* 32, -10.0dB*/
73
0x1300004c, /* 33, -10.5dB*/
74
0x12000048, /* 34, -11.0dB*/
75
0x11000044, /* 35, -11.5dB*/
76
0x10000040, /* 36, -12.0dB*/
77
};
78
79
u8 cck_swing_table_ch1_ch13[CCK_TABLE_SIZE][8] = {
80
{0x36, 0x35, 0x2e, 0x25, 0x1c, 0x12, 0x09, 0x04}, /* 0, +0dB */
81
{0x33, 0x32, 0x2b, 0x23, 0x1a, 0x11, 0x08, 0x04}, /* 1, -0.5dB */
82
{0x30, 0x2f, 0x29, 0x21, 0x19, 0x10, 0x08, 0x03}, /* 2, -1.0dB */
83
{0x2d, 0x2d, 0x27, 0x1f, 0x18, 0x0f, 0x08, 0x03}, /* 3, -1.5dB */
84
{0x2b, 0x2a, 0x25, 0x1e, 0x16, 0x0e, 0x07, 0x03}, /* 4, -2.0dB */
85
{0x28, 0x28, 0x22, 0x1c, 0x15, 0x0d, 0x07, 0x03}, /* 5, -2.5dB */
86
{0x26, 0x25, 0x21, 0x1b, 0x14, 0x0d, 0x06, 0x03}, /* 6, -3.0dB */
87
{0x24, 0x23, 0x1f, 0x19, 0x13, 0x0c, 0x06, 0x03}, /* 7, -3.5dB */
88
{0x22, 0x21, 0x1d, 0x18, 0x11, 0x0b, 0x06, 0x02}, /* 8, -4.0dB */
89
{0x20, 0x20, 0x1b, 0x16, 0x11, 0x08, 0x05, 0x02}, /* 9, -4.5dB */
90
{0x1f, 0x1e, 0x1a, 0x15, 0x10, 0x0a, 0x05, 0x02}, /* 10, -5.0dB */
91
{0x1d, 0x1c, 0x18, 0x14, 0x0f, 0x0a, 0x05, 0x02}, /* 11, -5.5dB */
92
{0x1b, 0x1a, 0x17, 0x13, 0x0e, 0x09, 0x04, 0x02}, /* 12, -6.0 default*/
93
{0x1a, 0x19, 0x16, 0x12, 0x0d, 0x09, 0x04, 0x02}, /* 13, -6.5dB */
94
{0x18, 0x17, 0x15, 0x11, 0x0c, 0x08, 0x04, 0x02}, /* 14, -7.0dB */
95
{0x17, 0x16, 0x13, 0x10, 0x0c, 0x08, 0x04, 0x02}, /* 15, -7.5dB */
96
{0x16, 0x15, 0x12, 0x0f, 0x0b, 0x07, 0x04, 0x01}, /* 16, -8.0dB */
97
{0x14, 0x14, 0x11, 0x0e, 0x0b, 0x07, 0x03, 0x02}, /* 17, -8.5dB */
98
{0x13, 0x13, 0x10, 0x0d, 0x0a, 0x06, 0x03, 0x01}, /* 18, -9.0dB */
99
{0x12, 0x12, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, /* 19, -9.5dB */
100
{0x11, 0x11, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, /* 20, -10.0dB */
101
{0x10, 0x10, 0x0e, 0x0b, 0x08, 0x05, 0x03, 0x01}, /* 21, -10.5dB */
102
{0x0f, 0x0f, 0x0d, 0x0b, 0x08, 0x05, 0x03, 0x01}, /* 22, -11.0dB */
103
{0x0e, 0x0e, 0x0c, 0x0a, 0x08, 0x05, 0x02, 0x01}, /* 23, -11.5dB */
104
{0x0d, 0x0d, 0x0c, 0x0a, 0x07, 0x05, 0x02, 0x01}, /* 24, -12.0dB */
105
{0x0d, 0x0c, 0x0b, 0x09, 0x07, 0x04, 0x02, 0x01}, /* 25, -12.5dB */
106
{0x0c, 0x0c, 0x0a, 0x09, 0x06, 0x04, 0x02, 0x01}, /* 26, -13.0dB */
107
{0x0b, 0x0b, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x01}, /* 27, -13.5dB */
108
{0x0b, 0x0a, 0x09, 0x08, 0x06, 0x04, 0x02, 0x01}, /* 28, -14.0dB */
109
{0x0a, 0x0a, 0x09, 0x07, 0x05, 0x03, 0x02, 0x01}, /* 29, -14.5dB */
110
{0x0a, 0x09, 0x08, 0x07, 0x05, 0x03, 0x02, 0x01}, /* 30, -15.0dB */
111
{0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01}, /* 31, -15.5dB */
112
{0x09, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x01} /* 32, -16.0dB */
113
};
114
115
u8 cck_swing_table_ch14[CCK_TABLE_SIZE][8] = {
116
{0x36, 0x35, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00}, /* 0, +0dB */
117
{0x33, 0x32, 0x2b, 0x19, 0x00, 0x00, 0x00, 0x00}, /* 1, -0.5dB */
118
{0x30, 0x2f, 0x29, 0x18, 0x00, 0x00, 0x00, 0x00}, /* 2, -1.0dB */
119
{0x2d, 0x2d, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00}, /* 3, -1.5dB */
120
{0x2b, 0x2a, 0x25, 0x15, 0x00, 0x00, 0x00, 0x00}, /* 4, -2.0dB */
121
{0x28, 0x28, 0x24, 0x14, 0x00, 0x00, 0x00, 0x00}, /* 5, -2.5dB */
122
{0x26, 0x25, 0x21, 0x13, 0x00, 0x00, 0x00, 0x00}, /* 6, -3.0dB */
123
{0x24, 0x23, 0x1f, 0x12, 0x00, 0x00, 0x00, 0x00}, /* 7, -3.5dB */
124
{0x22, 0x21, 0x1d, 0x11, 0x00, 0x00, 0x00, 0x00}, /* 8, -4.0dB */
125
{0x20, 0x20, 0x1b, 0x10, 0x00, 0x00, 0x00, 0x00}, /* 9, -4.5dB */
126
{0x1f, 0x1e, 0x1a, 0x0f, 0x00, 0x00, 0x00, 0x00}, /* 10, -5.0dB */
127
{0x1d, 0x1c, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00}, /* 11, -5.5dB */
128
{0x1b, 0x1a, 0x17, 0x0e, 0x00, 0x00, 0x00, 0x00}, /* 12, -6.0 default*/
129
{0x1a, 0x19, 0x16, 0x0d, 0x00, 0x00, 0x00, 0x00}, /* 13, -6.5dB */
130
{0x18, 0x17, 0x15, 0x0c, 0x00, 0x00, 0x00, 0x00}, /* 14, -7.0dB */
131
{0x17, 0x16, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00}, /* 15, -7.5dB */
132
{0x16, 0x15, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00}, /* 16, -8.0dB */
133
{0x14, 0x14, 0x11, 0x0a, 0x00, 0x00, 0x00, 0x00}, /* 17, -8.5dB */
134
{0x13, 0x13, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00}, /* 18, -9.0dB */
135
{0x12, 0x12, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00}, /* 19, -9.5dB */
136
{0x11, 0x11, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00}, /* 20, -10.0dB */
137
{0x10, 0x10, 0x0e, 0x08, 0x00, 0x00, 0x00, 0x00}, /* 21, -10.5dB */
138
{0x0f, 0x0f, 0x0d, 0x08, 0x00, 0x00, 0x00, 0x00}, /* 22, -11.0dB */
139
{0x0e, 0x0e, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00}, /* 23, -11.5dB */
140
{0x0d, 0x0d, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00}, /* 24, -12.0dB */
141
{0x0d, 0x0c, 0x0b, 0x06, 0x00, 0x00, 0x00, 0x00}, /* 25, -12.5dB */
142
{0x0c, 0x0c, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00}, /* 26, -13.0dB */
143
{0x0b, 0x0b, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00}, /* 27, -13.5dB */
144
{0x0b, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 28, -14.0dB */
145
{0x0a, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 29, -14.5dB */
146
{0x0a, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 30, -15.0dB */
147
{0x09, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 31, -15.5dB */
148
{0x09, 0x08, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00} /* 32, -16.0dB */
149
};
150
151
u32 ofdm_swing_table_new[OFDM_TABLE_SIZE] = {
152
0x0b40002d, /* 0, -15.0dB */
153
0x0c000030, /* 1, -14.5dB */
154
0x0cc00033, /* 2, -14.0dB */
155
0x0d800036, /* 3, -13.5dB */
156
0x0e400039, /* 4, -13.0dB */
157
0x0f00003c, /* 5, -12.5dB */
158
0x10000040, /* 6, -12.0dB */
159
0x11000044, /* 7, -11.5dB */
160
0x12000048, /* 8, -11.0dB */
161
0x1300004c, /* 9, -10.5dB */
162
0x14400051, /* 10, -10.0dB */
163
0x15800056, /* 11, -9.5dB */
164
0x16c0005b, /* 12, -9.0dB */
165
0x18000060, /* 13, -8.5dB */
166
0x19800066, /* 14, -8.0dB */
167
0x1b00006c, /* 15, -7.5dB */
168
0x1c800072, /* 16, -7.0dB */
169
0x1e400079, /* 17, -6.5dB */
170
0x20000080, /* 18, -6.0dB */
171
0x22000088, /* 19, -5.5dB */
172
0x24000090, /* 20, -5.0dB */
173
0x26000098, /* 21, -4.5dB */
174
0x288000a2, /* 22, -4.0dB */
175
0x2ac000ab, /* 23, -3.5dB */
176
0x2d4000b5, /* 24, -3.0dB */
177
0x300000c0, /* 25, -2.5dB */
178
0x32c000cb, /* 26, -2.0dB */
179
0x35c000d7, /* 27, -1.5dB */
180
0x390000e4, /* 28, -1.0dB */
181
0x3c8000f2, /* 29, -0.5dB */
182
0x40000100, /* 30, +0dB */
183
0x43c0010f, /* 31, +0.5dB */
184
0x47c0011f, /* 32, +1.0dB */
185
0x4c000130, /* 33, +1.5dB */
186
0x50800142, /* 34, +2.0dB */
187
0x55400155, /* 35, +2.5dB */
188
0x5a400169, /* 36, +3.0dB */
189
0x5fc0017f, /* 37, +3.5dB */
190
0x65400195, /* 38, +4.0dB */
191
0x6b8001ae, /* 39, +4.5dB */
192
0x71c001c7, /* 40, +5.0dB */
193
0x788001e2, /* 41, +5.5dB */
194
0x7f8001fe /* 42, +6.0dB */
195
};
196
197
u8 cck_swing_table_ch1_ch14_88f[CCK_TABLE_SIZE_88F][16] = {
198
{0x44, 0x42, 0x3C, 0x33, 0x28, 0x1C, 0x13, 0x0B, 0x05, 0x02,
199
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-16dB*/
200
{0x48, 0x46, 0x3F, 0x36, 0x2A, 0x1E, 0x14, 0x0B, 0x05, 0x02,
201
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-15.5dB*/
202
{0x4D, 0x4A, 0x43, 0x39, 0x2C, 0x20, 0x15, 0x0C, 0x06, 0x02,
203
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-15dB*/
204
{0x51, 0x4F, 0x47, 0x3C, 0x2F, 0x22, 0x16, 0x0D, 0x06, 0x02,
205
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-14.5dB*/
206
{0x56, 0x53, 0x4B, 0x40, 0x32, 0x24, 0x17, 0x0E, 0x06, 0x02,
207
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-14dB*/
208
{0x5B, 0x58, 0x50, 0x43, 0x35, 0x26, 0x19, 0x0E, 0x07, 0x02,
209
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-13.5dB*/
210
{0x60, 0x5D, 0x54, 0x47, 0x38, 0x28, 0x1A, 0x0F, 0x07, 0x02,
211
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-13dB*/
212
{0x66, 0x63, 0x59, 0x4C, 0x3B, 0x2B, 0x1C, 0x10, 0x08, 0x02,
213
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-12.5dB*/
214
{0x6C, 0x69, 0x5F, 0x50, 0x3F, 0x2D, 0x1E, 0x11, 0x08, 0x03,
215
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-12dB*/
216
{0x73, 0x6F, 0x64, 0x55, 0x42, 0x30, 0x1F, 0x12, 0x08, 0x03,
217
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-11.5dB*/
218
{0x79, 0x76, 0x6A, 0x5A, 0x46, 0x33, 0x21, 0x13, 0x09, 0x03,
219
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-11dB*/
220
{0x81, 0x7C, 0x71, 0x5F, 0x4A, 0x36, 0x23, 0x14, 0x0A, 0x03,
221
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-10.5dB*/
222
{0x88, 0x84, 0x77, 0x65, 0x4F, 0x39, 0x25, 0x15, 0x0A, 0x03,
223
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-10dB*/
224
{0x90, 0x8C, 0x7E, 0x6B, 0x54, 0x3C, 0x27, 0x17, 0x0B, 0x03,
225
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-9.5dB*/
226
{0x99, 0x94, 0x86, 0x71, 0x58, 0x40, 0x2A, 0x18, 0x0B, 0x04,
227
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-9dB*/
228
{0xA2, 0x9D, 0x8E, 0x78, 0x5E, 0x43, 0x2C, 0x19, 0x0C, 0x04,
229
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-8.5dB*/
230
{0xAC, 0xA6, 0x96, 0x7F, 0x63, 0x47, 0x2F, 0x1B, 0x0D, 0x04,
231
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-8dB*/
232
{0xB6, 0xB0, 0x9F, 0x87, 0x69, 0x4C, 0x32, 0x1D, 0x0D, 0x04,
233
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-7.5dB*/
234
{0xC1, 0xBA, 0xA8, 0x8F, 0x6F, 0x50, 0x35, 0x1E, 0x0E, 0x04,
235
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-7dB*/
236
{0xCC, 0xC5, 0xB2, 0x97, 0x76, 0x55, 0x38, 0x20, 0x0F, 0x05,
237
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-6.5dB*/
238
{0xD8, 0xD1, 0xBD, 0xA0, 0x7D, 0x5A, 0x3B, 0x22, 0x10, 0x05,
239
0x00, 0x00, 0x00, 0x00, 0x00, 0x00} /*-6dB*/
240
};
241
242
u8 cck_swing_table_ch1_ch13_88f[CCK_TABLE_SIZE_88F][16] = {
243
{0x44, 0x42, 0x3C, 0x33, 0x28, 0x1C, 0x13, 0x0B, 0x05, 0x02,
244
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-16dB*/
245
{0x48, 0x46, 0x3F, 0x36, 0x2A, 0x1E, 0x14, 0x0B, 0x05, 0x02,
246
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-15.5dB*/
247
{0x4D, 0x4A, 0x43, 0x39, 0x2C, 0x20, 0x15, 0x0C, 0x06, 0x02,
248
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-15dB*/
249
{0x51, 0x4F, 0x47, 0x3C, 0x2F, 0x22, 0x16, 0x0D, 0x06, 0x02,
250
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-14.5dB*/
251
{0x56, 0x53, 0x4B, 0x40, 0x32, 0x24, 0x17, 0x0E, 0x06, 0x02,
252
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-14dB*/
253
{0x5B, 0x58, 0x50, 0x43, 0x35, 0x26, 0x19, 0x0E, 0x07, 0x02,
254
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-13.5dB*/
255
{0x60, 0x5D, 0x54, 0x47, 0x38, 0x28, 0x1A, 0x0F, 0x07, 0x02,
256
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-13dB*/
257
{0x66, 0x63, 0x59, 0x4C, 0x3B, 0x2B, 0x1C, 0x10, 0x08, 0x02,
258
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-12.5dB*/
259
{0x6C, 0x69, 0x5F, 0x50, 0x3F, 0x2D, 0x1E, 0x11, 0x08, 0x03,
260
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-12dB*/
261
{0x73, 0x6F, 0x64, 0x55, 0x42, 0x30, 0x1F, 0x12, 0x08, 0x03,
262
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-11.5dB*/
263
{0x79, 0x76, 0x6A, 0x5A, 0x46, 0x33, 0x21, 0x13, 0x09, 0x03,
264
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-11dB*/
265
{0x81, 0x7C, 0x71, 0x5F, 0x4A, 0x36, 0x23, 0x14, 0x0A, 0x03,
266
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-10.5dB*/
267
{0x88, 0x84, 0x77, 0x65, 0x4F, 0x39, 0x25, 0x15, 0x0A, 0x03,
268
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-10dB*/
269
{0x90, 0x8C, 0x7E, 0x6B, 0x54, 0x3C, 0x27, 0x17, 0x0B, 0x03,
270
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-9.5dB*/
271
{0x99, 0x94, 0x86, 0x71, 0x58, 0x40, 0x2A, 0x18, 0x0B, 0x04,
272
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-9dB*/
273
{0xA2, 0x9D, 0x8E, 0x78, 0x5E, 0x43, 0x2C, 0x19, 0x0C, 0x04,
274
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-8.5dB*/
275
{0xAC, 0xA6, 0x96, 0x7F, 0x63, 0x47, 0x2F, 0x1B, 0x0D, 0x04,
276
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-8dB*/
277
{0xB6, 0xB0, 0x9F, 0x87, 0x69, 0x4C, 0x32, 0x1D, 0x0D, 0x04,
278
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-7.5dB*/
279
{0xC1, 0xBA, 0xA8, 0x8F, 0x6F, 0x50, 0x35, 0x1E, 0x0E, 0x04,
280
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-7dB*/
281
{0xCC, 0xC5, 0xB2, 0x97, 0x76, 0x55, 0x38, 0x20, 0x0F, 0x05,
282
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-6.5dB*/
283
{0xD8, 0xD1, 0xBD, 0xA0, 0x7D, 0x5A, 0x3B, 0x22, 0x10, 0x05,
284
0x00, 0x00, 0x00, 0x00, 0x00, 0x00} /*-6dB*/
285
};
286
287
u8 cck_swing_table_ch14_88f[CCK_TABLE_SIZE_88F][16] = {
288
{0x44, 0x42, 0x3C, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
289
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-16dB*/
290
{0x48, 0x46, 0x3F, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
291
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-15.5dB*/
292
{0x4D, 0x4A, 0x43, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
293
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-15dB*/
294
{0x51, 0x4F, 0x47, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
295
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-14.5dB*/
296
{0x56, 0x53, 0x4B, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
297
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-14dB*/
298
{0x5B, 0x58, 0x50, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
299
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-13.5dB*/
300
{0x60, 0x5D, 0x54, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
301
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-13dB*/
302
{0x66, 0x63, 0x59, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
303
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-12.5dB*/
304
{0x6C, 0x69, 0x5F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
305
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-12dB*/
306
{0x73, 0x6F, 0x64, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
307
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-11.5dB*/
308
{0x79, 0x76, 0x6A, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
309
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-11dB*/
310
{0x81, 0x7C, 0x71, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
311
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-10.5dB*/
312
{0x88, 0x84, 0x77, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
313
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-10dB*/
314
{0x90, 0x8C, 0x7E, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
315
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-9.5dB*/
316
{0x99, 0x94, 0x86, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
317
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-9dB*/
318
{0xA2, 0x9D, 0x8E, 0x5E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
319
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-8.5dB*/
320
{0xAC, 0xA6, 0x96, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
321
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-8dB*/
322
{0xB6, 0xB0, 0x9F, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
323
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-7.5dB*/
324
{0xC1, 0xBA, 0xA8, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
325
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-7dB*/
326
{0xCC, 0xC5, 0xB2, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
327
0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-6.5dB*/
328
{0xD8, 0xD1, 0xBD, 0x7D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
329
0x00, 0x00, 0x00, 0x00, 0x00, 0x00} /*-6dB*/
330
};
331
332
u8 cck_swing_table_ch1_ch13_new[CCK_TABLE_SIZE][8] = {
333
{0x09, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x01}, /* 0, -16.0dB*/
334
{0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01}, /* 1, -15.5dB*/
335
{0x0a, 0x09, 0x08, 0x07, 0x05, 0x03, 0x02, 0x01}, /* 2, -15.0dB*/
336
{0x0a, 0x0a, 0x09, 0x07, 0x05, 0x03, 0x02, 0x01}, /* 3, -14.5dB*/
337
{0x0b, 0x0a, 0x09, 0x08, 0x06, 0x04, 0x02, 0x01}, /* 4, -14.0dB*/
338
{0x0b, 0x0b, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x01}, /* 5, -13.5dB*/
339
{0x0c, 0x0c, 0x0a, 0x09, 0x06, 0x04, 0x02, 0x01}, /* 6, -13.0dB*/
340
{0x0d, 0x0c, 0x0b, 0x09, 0x07, 0x04, 0x02, 0x01}, /* 7, -12.5dB*/
341
{0x0d, 0x0d, 0x0c, 0x0a, 0x07, 0x05, 0x02, 0x01}, /* 8, -12.0dB*/
342
{0x0e, 0x0e, 0x0c, 0x0a, 0x08, 0x05, 0x02, 0x01}, /* 9, -11.5dB*/
343
{0x0f, 0x0f, 0x0d, 0x0b, 0x08, 0x05, 0x03, 0x01}, /* 10, -11.0dB*/
344
{0x10, 0x10, 0x0e, 0x0b, 0x08, 0x05, 0x03, 0x01}, /* 11, -10.5dB*/
345
{0x11, 0x11, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, /* 12, -10.0dB*/
346
{0x12, 0x12, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, /* 13, -9.5dB*/
347
{0x13, 0x13, 0x10, 0x0d, 0x0a, 0x06, 0x03, 0x01}, /* 14, -9.0dB */
348
{0x14, 0x14, 0x11, 0x0e, 0x0b, 0x07, 0x03, 0x02}, /* 15, -8.5dB*/
349
{0x16, 0x15, 0x12, 0x0f, 0x0b, 0x07, 0x04, 0x01}, /* 16, -8.0dB */
350
{0x17, 0x16, 0x13, 0x10, 0x0c, 0x08, 0x04, 0x02}, /* 17, -7.5dB*/
351
{0x18, 0x17, 0x15, 0x11, 0x0c, 0x08, 0x04, 0x02}, /* 18, -7.0dB */
352
{0x1a, 0x19, 0x16, 0x12, 0x0d, 0x09, 0x04, 0x02}, /* 19, -6.5dB*/
353
{0x1b, 0x1a, 0x17, 0x13, 0x0e, 0x09, 0x04, 0x02}, /* 20, -6.0dB */
354
{0x1d, 0x1c, 0x18, 0x14, 0x0f, 0x0a, 0x05, 0x02}, /* 21, -5.5dB*/
355
{0x1f, 0x1e, 0x1a, 0x15, 0x10, 0x0a, 0x05, 0x02}, /* 22, -5.0dB */
356
{0x20, 0x20, 0x1b, 0x16, 0x11, 0x08, 0x05, 0x02}, /* 23, -4.5dB*/
357
{0x22, 0x21, 0x1d, 0x18, 0x11, 0x0b, 0x06, 0x02}, /* 24, -4.0dB */
358
{0x24, 0x23, 0x1f, 0x19, 0x13, 0x0c, 0x06, 0x03}, /* 25, -3.5dB*/
359
{0x26, 0x25, 0x21, 0x1b, 0x14, 0x0d, 0x06, 0x03}, /* 26, -3.0dB*/
360
{0x28, 0x28, 0x22, 0x1c, 0x15, 0x0d, 0x07, 0x03}, /* 27, -2.5dB*/
361
{0x2b, 0x2a, 0x25, 0x1e, 0x16, 0x0e, 0x07, 0x03}, /* 28, -2.0dB */
362
{0x2d, 0x2d, 0x27, 0x1f, 0x18, 0x0f, 0x08, 0x03}, /* 29, -1.5dB*/
363
{0x30, 0x2f, 0x29, 0x21, 0x19, 0x10, 0x08, 0x03}, /* 30, -1.0dB*/
364
{0x33, 0x32, 0x2b, 0x23, 0x1a, 0x11, 0x08, 0x04}, /* 31, -0.5dB*/
365
{0x36, 0x35, 0x2e, 0x25, 0x1c, 0x12, 0x09, 0x04} /* 32, +0dB*/
366
};
367
368
u8 cck_swing_table_ch14_new[CCK_TABLE_SIZE][8] = {
369
{0x09, 0x08, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00}, /* 0, -16.0dB*/
370
{0x09, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 1, -15.5dB*/
371
{0x0a, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 2, -15.0dB*/
372
{0x0a, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 3, -14.5dB*/
373
{0x0b, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 4, -14.0dB*/
374
{0x0b, 0x0b, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00}, /*5, -13.5dB*/
375
{0x0c, 0x0c, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00}, /* 6, -13.0dB*/
376
{0x0d, 0x0c, 0x0b, 0x06, 0x00, 0x00, 0x00, 0x00}, /* 7, -12.5dB*/
377
{0x0d, 0x0d, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00}, /* 8, -12.0dB*/
378
{0x0e, 0x0e, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00}, /* 9, -11.5dB*/
379
{0x0f, 0x0f, 0x0d, 0x08, 0x00, 0x00, 0x00, 0x00}, /* 10, -11.0dB*/
380
{0x10, 0x10, 0x0e, 0x08, 0x00, 0x00, 0x00, 0x00}, /*11, -10.5dB*/
381
{0x11, 0x11, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00}, /* 12, -10.0dB*/
382
{0x12, 0x12, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00}, /* 13, -9.5dB*/
383
{0x13, 0x13, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00}, /*14, -9.0dB */
384
{0x14, 0x14, 0x11, 0x0a, 0x00, 0x00, 0x00, 0x00}, /* 15, -8.5dB*/
385
{0x16, 0x15, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00}, /* 16, -8.0dB */
386
{0x17, 0x16, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00}, /* 17, -7.5dB*/
387
{0x18, 0x17, 0x15, 0x0c, 0x00, 0x00, 0x00, 0x00}, /* 18, -7.0dB */
388
{0x1a, 0x19, 0x16, 0x0d, 0x00, 0x00, 0x00, 0x00}, /* 19, -6.5dB */
389
{0x1b, 0x1a, 0x17, 0x0e, 0x00, 0x00, 0x00, 0x00}, /* 20, -6.0dB */
390
{0x1d, 0x1c, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00}, /* 21, -5.5dB*/
391
{0x1f, 0x1e, 0x1a, 0x0f, 0x00, 0x00, 0x00, 0x00}, /* 22, -5.0dB */
392
{0x20, 0x20, 0x1b, 0x10, 0x00, 0x00, 0x00, 0x00}, /*23, -4.5dB*/
393
{0x22, 0x21, 0x1d, 0x11, 0x00, 0x00, 0x00, 0x00}, /* 24, -4.0dB */
394
{0x24, 0x23, 0x1f, 0x12, 0x00, 0x00, 0x00, 0x00}, /* 25, -3.5dB */
395
{0x26, 0x25, 0x21, 0x13, 0x00, 0x00, 0x00, 0x00}, /* 26, -3.0dB */
396
{0x28, 0x28, 0x24, 0x14, 0x00, 0x00, 0x00, 0x00}, /*27, -2.5dB*/
397
{0x2b, 0x2a, 0x25, 0x15, 0x00, 0x00, 0x00, 0x00}, /* 28, -2.0dB */
398
{0x2d, 0x2d, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00}, /*29, -1.5dB*/
399
{0x30, 0x2f, 0x29, 0x18, 0x00, 0x00, 0x00, 0x00}, /* 30, -1.0dB */
400
{0x33, 0x32, 0x2b, 0x19, 0x00, 0x00, 0x00, 0x00}, /* 31, -0.5dB */
401
{0x36, 0x35, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00} /* 32, +0dB */
402
};
403
404
u32 cck_swing_table_ch1_ch14_8723d[CCK_TABLE_SIZE_8723D] = {
405
0x0CD, /*0 , -20dB*/
406
0x0D9,
407
0x0E6,
408
0x0F3,
409
0x102,
410
0x111,
411
0x121,
412
0x132,
413
0x144,
414
0x158,
415
0x16C,
416
0x182,
417
0x198,
418
0x1B1,
419
0x1CA,
420
0x1E5,
421
0x202,
422
0x221,
423
0x241,
424
0x263,
425
0x287,
426
0x2AE,
427
0x2D6,
428
0x301,
429
0x32F,
430
0x35F,
431
0x392,
432
0x3C9,
433
0x402,
434
0x43F,
435
0x47F,
436
0x4C3,
437
0x50C,
438
0x558,
439
0x5A9,
440
0x5FF,
441
0x65A,
442
0x6BA,
443
0x720,
444
0x78C,
445
0x7FF,
446
};
447
448
/*@JJ ADD 20161014 */
449
u32 cck_swing_table_ch1_ch14_8710b[CCK_TABLE_SIZE_8710B] = {
450
0x0CD, /*0 , -20dB*/
451
0x0D9,
452
0x0E6,
453
0x0F3,
454
0x102,
455
0x111,
456
0x121,
457
0x132,
458
0x144,
459
0x158,
460
0x16C,
461
0x182,
462
0x198,
463
0x1B1,
464
0x1CA,
465
0x1E5,
466
0x202,
467
0x221,
468
0x241,
469
0x263,
470
0x287,
471
0x2AE,
472
0x2D6,
473
0x301,
474
0x32F,
475
0x35F,
476
0x392,
477
0x3C9,
478
0x402,
479
0x43F,
480
0x47F,
481
0x4C3,
482
0x50C,
483
0x558,
484
0x5A9,
485
0x5FF,
486
0x65A,
487
0x6BA,
488
0x720,
489
0x78C,
490
0x7FF,
491
};
492
493
/*@Winnita ADD 20171116 PathA 0xAB4[10:0],PathB 0xAB4[21:11]*/
494
u32 cck_swing_table_ch1_ch14_8192f[CCK_TABLE_SIZE_8192F] = {
495
0x0CD, /*0 , -20dB*/
496
0x0D9,
497
0x0E6,
498
0x0F3,
499
0x102,
500
0x111,
501
0x121,
502
0x132,
503
0x144,
504
0x158,
505
0x16C,
506
0x182,
507
0x198,
508
0x1B1,
509
0x1CA,
510
0x1E5,
511
0x202,
512
0x221,
513
0x241,
514
0x263, /*19*/
515
0x287, /*20*/
516
0x2AE, /*21*/
517
0x2D6, /*22*/
518
0x301, /*23*/
519
0x32F, /*24*/
520
0x35F, /*25*/
521
0x392, /*26*/
522
0x3C9, /*27*/
523
0x402, /*28*/
524
0x43F, /*29*/
525
0x47F, /*30*/
526
0x4C3, /*31*/
527
0x50C, /*32*/
528
0x558, /*33*/
529
0x5A9, /*34*/
530
0x5FF, /*35*/
531
0x65A, /*36*/
532
0x6BA,
533
0x720,
534
0x78C,
535
0x7FF,
536
};
537
538
u32 tx_scaling_table_jaguar[TXSCALE_TABLE_SIZE] = {
539
0x081, /* 0, -12.0dB*/
540
0x088, /* 1, -11.5dB*/
541
0x090, /* 2, -11.0dB*/
542
0x099, /* 3, -10.5dB*/
543
0x0A2, /* 4, -10.0dB*/
544
0x0AC, /* 5, -9.5dB*/
545
0x0B6, /* 6, -9.0dB*/
546
0x0C0, /*7, -8.5dB*/
547
0x0CC, /* 8, -8.0dB*/
548
0x0D8, /* 9, -7.5dB*/
549
0x0E5, /* 10, -7.0dB*/
550
0x0F2, /* 11, -6.5dB*/
551
0x101, /* 12, -6.0dB*/
552
0x110, /* 13, -5.5dB*/
553
0x120, /* 14, -5.0dB*/
554
0x131, /* 15, -4.5dB*/
555
0x143, /* 16, -4.0dB*/
556
0x156, /* 17, -3.5dB*/
557
0x16A, /* 18, -3.0dB*/
558
0x180, /* 19, -2.5dB*/
559
0x197, /* 20, -2.0dB*/
560
0x1AF, /* 21, -1.5dB*/
561
0x1C8, /* 22, -1.0dB*/
562
0x1E3, /* 23, -0.5dB*/
563
0x200, /* 24, +0 dB*/
564
0x21E, /* 25, +0.5dB*/
565
0x23E, /* 26, +1.0dB*/
566
0x261, /* 27, +1.5dB*/
567
0x285, /* 28, +2.0dB*/
568
0x2AB, /* 29, +2.5dB*/
569
0x2D3, /*30, +3.0dB*/
570
0x2FE, /* 31, +3.5dB*/
571
0x32B, /* 32, +4.0dB*/
572
0x35C, /* 33, +4.5dB*/
573
0x38E, /* 34, +5.0dB*/
574
0x3C4, /* 35, +5.5dB*/
575
0x3FE /* 36, +6.0dB */
576
};
577
578
#if (DM_ODM_SUPPORT_TYPE == ODM_CE) && defined(DM_ODM_CE_MAC80211)
579
#else
580
u8 delta_swing_table_idx_2ga_p_8188e[] = {0, 0, 0, 0, 1, 1, 2, 2, 3, 3,
581
4, 4, 4, 4, 4, 4, 4, 4, 5, 5,
582
7, 7, 8, 8, 8, 9, 9, 9, 9, 9};
583
u8 delta_swing_table_idx_2ga_n_8188e[] = {0, 0, 0, 2, 2, 3, 3, 4, 4, 4,
584
4, 5, 5, 6, 6, 7, 7, 7, 7, 8,
585
8, 9, 9, 10, 10, 10, 11, 11, 11, 11};
586
#endif
587
588
void odm_txpowertracking_init(void *dm_void)
589
{
590
struct dm_struct *dm = (struct dm_struct *)dm_void;
591
592
odm_txpowertracking_thermal_meter_init(dm);
593
}
594
595
u8 get_swing_index(void *dm_void)
596
{
597
struct dm_struct *dm = (struct dm_struct *)dm_void;
598
#if ((RTL8812A_SUPPORT == 1) || (RTL8821A_SUPPORT == 1))
599
void *adapter = dm->adapter;
600
HAL_DATA_TYPE *hal_data = GET_HAL_DATA(adapter);
601
#endif
602
u8 i = 0;
603
u32 bb_swing, table_value;
604
605
if (dm->support_ic_type &
606
(ODM_RTL8188E | ODM_RTL8723B | ODM_RTL8192E |
607
ODM_RTL8188F | ODM_RTL8703B | ODM_RTL8723D |
608
ODM_RTL8710B | ODM_RTL8821)) {
609
#if (RTL8821A_SUPPORT == 1)
610
bb_swing =
611
phy_get_tx_bb_swing_8812a(adapter,
612
hal_data->current_band_type,
613
RF_PATH_A);
614
#else
615
bb_swing = odm_get_bb_reg(dm, R_0xc80, 0xFFC00000);
616
#endif
617
for (i = 0; i < OFDM_TABLE_SIZE; i++) {
618
table_value = ofdm_swing_table_new[i];
619
620
if (table_value >= 0x100000)
621
table_value >>= 22;
622
if (bb_swing == table_value)
623
break;
624
}
625
} else {
626
#if (RTL8812A_SUPPORT == 1)
627
bb_swing =
628
phy_get_tx_bb_swing_8812a(adapter,
629
hal_data->current_band_type,
630
RF_PATH_A);
631
#else
632
bb_swing = odm_get_bb_reg(dm, R_0xc1c, 0xFFE00000);
633
#endif
634
for (i = 0; i < TXSCALE_TABLE_SIZE; i++) {
635
table_value = tx_scaling_table_jaguar[i];
636
637
if (bb_swing == table_value)
638
break;
639
}
640
}
641
642
return i;
643
}
644
645
u8 get_cck_swing_index(void *dm_void)
646
{
647
struct dm_struct *dm = (struct dm_struct *)dm_void;
648
649
u8 i = 0;
650
u32 bb_cck_swing;
651
652
if (dm->support_ic_type &
653
(ODM_RTL8188E | ODM_RTL8723B | ODM_RTL8192E)) {
654
bb_cck_swing = odm_read_1byte(dm, 0xa22);
655
656
for (i = 0; i < CCK_TABLE_SIZE; i++) {
657
if (bb_cck_swing == cck_swing_table_ch1_ch13_new[i][0])
658
break;
659
}
660
} else if (dm->support_ic_type & ODM_RTL8703B) {
661
bb_cck_swing = odm_read_1byte(dm, 0xa22);
662
663
for (i = 0; i < CCK_TABLE_SIZE_88F; i++) {
664
if (bb_cck_swing == cck_swing_table_ch1_ch14_88f[i][0])
665
break;
666
}
667
}
668
669
return i;
670
}
671
672
void odm_txpowertracking_thermal_meter_init(void *dm_void)
673
{
674
struct dm_struct *dm = (struct dm_struct *)dm_void;
675
struct dm_rf_calibration_struct *cali_info = &dm->rf_calibrate_info;
676
struct _hal_rf_ *rf = &dm->rf_table;
677
struct _halrf_tssi_data *tssi = &rf->halrf_tssi_data;
678
679
u8 swing_idx = get_swing_index(dm);
680
u8 cckswing_idx = get_cck_swing_index(dm);
681
u8 p = 0;
682
683
cali_info->is_txpowertracking = true;
684
cali_info->tx_powercount = 0;
685
cali_info->is_txpowertracking_init = false;
686
687
if (!(*dm->mp_mode))
688
cali_info->txpowertrack_control = true;
689
else
690
cali_info->txpowertrack_control = false;
691
692
if (!(*dm->mp_mode))
693
cali_info->txpowertrack_control = true;
694
695
RF_DBG(dm, DBG_RF_IQK, "dm txpowertrack_control = %d\n",
696
cali_info->txpowertrack_control);
697
#if 0
698
/* dm->rf_calibrate_info.txpowertrack_control = true; */
699
#endif
700
cali_info->thermal_value = rf->eeprom_thermal;
701
cali_info->thermal_value_iqk = rf->eeprom_thermal;
702
cali_info->thermal_value_lck = rf->eeprom_thermal;
703
704
#if (RTL8822C_SUPPORT == 1 || RTL8814B_SUPPORT == 1)
705
if (dm->support_ic_type == ODM_RTL8822C) {
706
cali_info->thermal_value_path[RF_PATH_A] = tssi->thermal[RF_PATH_A];
707
cali_info->thermal_value_path[RF_PATH_B] = tssi->thermal[RF_PATH_B];
708
cali_info->thermal_value_iqk = tssi->thermal[RF_PATH_A];
709
cali_info->thermal_value_lck = tssi->thermal[RF_PATH_A];
710
}
711
712
if (dm->support_ic_type == ODM_RTL8814B) {
713
cali_info->thermal_value_path[RF_PATH_A] = tssi->thermal[RF_PATH_A];
714
cali_info->thermal_value_path[RF_PATH_B] = tssi->thermal[RF_PATH_B];
715
cali_info->thermal_value_path[RF_PATH_C] = tssi->thermal[RF_PATH_C];
716
cali_info->thermal_value_path[RF_PATH_D] = tssi->thermal[RF_PATH_D];
717
cali_info->thermal_value_iqk = tssi->thermal[RF_PATH_A];
718
cali_info->thermal_value_lck = tssi->thermal[RF_PATH_A];
719
}
720
#endif
721
722
if (!cali_info->default_bb_swing_index_flag) {
723
if (dm->support_ic_type &
724
(ODM_RTL8188E | ODM_RTL8723B | ODM_RTL8192E |
725
ODM_RTL8703B | ODM_RTL8821)) {
726
if (swing_idx >= OFDM_TABLE_SIZE)
727
cali_info->default_ofdm_index = 30;
728
else
729
cali_info->default_ofdm_index = swing_idx;
730
731
if (cckswing_idx >= CCK_TABLE_SIZE)
732
cali_info->default_cck_index = 20;
733
else
734
cali_info->default_cck_index = cckswing_idx;
735
/*@add by Mingzhi.Guo 2015-03-23*/
736
} else if (dm->support_ic_type == ODM_RTL8188F) {
737
cali_info->default_ofdm_index = 28; /*OFDM: -1dB*/
738
cali_info->default_cck_index = 20; /*CCK:-6dB*/
739
/*@add by zhaohe 2015-10-27*/
740
} else if (dm->support_ic_type == ODM_RTL8723D) {
741
cali_info->default_ofdm_index = 28; /*OFDM: -1dB*/
742
cali_info->default_cck_index = 28; /*CCK: -6dB*/
743
/*@JJ ADD 20161014 */
744
} else if (dm->support_ic_type == ODM_RTL8710B) {
745
cali_info->default_ofdm_index = 28; /*OFDM: -1dB*/
746
cali_info->default_cck_index = 28; /*CCK: -6dB*/
747
} else if (dm->support_ic_type == ODM_RTL8192F) {
748
cali_info->default_ofdm_index = 30;/*OFDM: 0dB*/
749
cali_info->default_cck_index = 28; /*CCK: -6dB*/
750
} else {
751
if (swing_idx >= TXSCALE_TABLE_SIZE)
752
cali_info->default_ofdm_index = 24;
753
else
754
cali_info->default_ofdm_index = swing_idx;
755
756
cali_info->default_cck_index = 24;
757
}
758
cali_info->default_bb_swing_index_flag = true;
759
}
760
761
cali_info->bb_swing_idx_cck_base = cali_info->default_cck_index;
762
cali_info->CCK_index = cali_info->default_cck_index;
763
764
for (p = RF_PATH_A; p < MAX_RF_PATH; ++p) {
765
cali_info->bb_swing_idx_ofdm_base[p] =
766
cali_info->default_ofdm_index;
767
cali_info->OFDM_index[p] = cali_info->default_ofdm_index;
768
cali_info->delta_power_index[p] = 0;
769
cali_info->delta_power_index_last[p] = 0;
770
cali_info->power_index_offset[p] = 0;
771
}
772
cali_info->modify_tx_agc_value_ofdm = 0;
773
cali_info->modify_tx_agc_value_cck = 0;
774
cali_info->tm_trigger = 0;
775
}
776
777
void odm_txpowertracking_check(void *dm_void)
778
{
779
/*@2011/09/29 MH In HW integration first stage
780
* we provide 4 different handle to operate at the same time.
781
* In the stage2/3, we need to prive universal interface and merge all
782
* HW dynamic mechanism.
783
*/
784
struct dm_struct *dm = (struct dm_struct *)dm_void;
785
786
switch (dm->support_platform) {
787
case ODM_WIN:
788
odm_txpowertracking_check_mp(dm);
789
break;
790
791
case ODM_CE:
792
odm_txpowertracking_check_ce(dm);
793
break;
794
795
case ODM_AP:
796
odm_txpowertracking_check_ap(dm);
797
break;
798
799
default:
800
break;
801
}
802
}
803
804
void odm_txpowertracking_check_ce(void *dm_void)
805
{
806
struct dm_struct *dm = (struct dm_struct *)dm_void;
807
struct _hal_rf_ *rf = &dm->rf_table;
808
struct _halrf_tssi_data *tssi = &rf->halrf_tssi_data;
809
810
#if (DM_ODM_SUPPORT_TYPE == ODM_CE)
811
if (!(rf->rf_supportability & HAL_RF_TX_PWR_TRACK))
812
return;
813
814
if ((rf->power_track_type & 0xf0) >> 4 != 0) {
815
if (dm->support_ic_type & ODM_RTL8822C) {
816
/*halrf_tssi_cck(dm);*/
817
/*halrf_thermal_cck(dm);*/
818
return;
819
}
820
}
821
822
if (!dm->rf_calibrate_info.tm_trigger) {
823
if (dm->support_ic_type &
824
(ODM_RTL8188E | ODM_RTL8188F | ODM_RTL8192E |
825
ODM_RTL8723B | ODM_RTL8812 | ODM_RTL8821 |
826
ODM_RTL8814A | ODM_RTL8703B | ODM_RTL8723D |
827
ODM_RTL8822B | ODM_RTL8821C | ODM_RTL8710B |
828
ODM_RTL8192F))
829
odm_set_rf_reg(dm, RF_PATH_A, RF_T_METER_NEW,
830
(BIT(17) | BIT(16)), 0x03);
831
else if (dm->support_ic_type & ODM_RTL8822C) {
832
odm_set_rf_reg(dm, RF_PATH_A, R_0x42, BIT(19), 0x01);
833
odm_set_rf_reg(dm, RF_PATH_A, R_0x42, BIT(19), 0x00);
834
odm_set_rf_reg(dm, RF_PATH_A, R_0x42, BIT(19), 0x01);
835
836
odm_set_rf_reg(dm, RF_PATH_B, R_0x42, BIT(19), 0x01);
837
odm_set_rf_reg(dm, RF_PATH_B, R_0x42, BIT(19), 0x00);
838
odm_set_rf_reg(dm, RF_PATH_B, R_0x42, BIT(19), 0x01);
839
} else if (dm->support_ic_type & ODM_RTL8814B) {
840
odm_set_rf_reg(dm, RF_PATH_A, 0x42, BIT(17), 0x1);
841
odm_set_rf_reg(dm, RF_PATH_B, 0x42, BIT(17), 0x1);
842
odm_set_rf_reg(dm, RF_PATH_C, 0x42, BIT(17), 0x1);
843
odm_set_rf_reg(dm, RF_PATH_D, 0x42, BIT(17), 0x1);
844
} else
845
odm_set_rf_reg(dm, RF_PATH_A, RF_T_METER_OLD,
846
RFREGOFFSETMASK, 0x60);
847
848
#if (RTL8814B_SUPPORT == 1)
849
if (dm->support_ic_type & ODM_RTL8814B) {
850
ODM_delay_us(300);
851
odm_txpowertracking_new_callback_thermal_meter(dm);
852
tssi->thermal_trigger = 1;
853
}
854
#endif
855
dm->rf_calibrate_info.tm_trigger = 1;
856
return;
857
}
858
859
if (dm->support_ic_type & (ODM_RTL8822C | ODM_RTL8814B)) {
860
#if (RTL8822C_SUPPORT == 1 || RTL8814B_SUPPORT == 1)
861
odm_txpowertracking_new_callback_thermal_meter(dm);
862
if (dm->support_ic_type & ODM_RTL8814B)
863
tssi->thermal_trigger = 0;
864
#endif
865
} else
866
odm_txpowertracking_callback_thermal_meter(dm);
867
dm->rf_calibrate_info.tm_trigger = 0;
868
#endif
869
}
870
871
void
872
odm_txpowertracking_direct_ce(void *dm_void)
873
{
874
struct dm_struct *dm = (struct dm_struct *)dm_void;
875
struct _hal_rf_ *rf = &dm->rf_table;
876
#if (DM_ODM_SUPPORT_TYPE == ODM_CE)
877
878
if (!(rf->rf_supportability & HAL_RF_TX_PWR_TRACK))
879
return;
880
881
if (dm->support_ic_type & ODM_RTL8822C) {
882
/*halrf_tssi_cck(dm);*/
883
/*halrf_thermal_cck(dm);*/
884
return;
885
}
886
887
if (dm->support_ic_type &
888
(ODM_RTL8188E | ODM_RTL8188F | ODM_RTL8192E |
889
ODM_RTL8723B | ODM_RTL8812 | ODM_RTL8821 |
890
ODM_RTL8814A | ODM_RTL8703B | ODM_RTL8723D |
891
ODM_RTL8822B | ODM_RTL8821C | ODM_RTL8710B |
892
ODM_RTL8192F | ODM_RTL8814B))
893
odm_set_rf_reg(dm, RF_PATH_A, RF_T_METER_NEW, (BIT(17) | BIT(16)), 0x03);
894
else if (dm->support_ic_type & ODM_RTL8822C) {
895
odm_set_rf_reg(dm, RF_PATH_A, R_0x42, BIT(19), 0x01);
896
odm_set_rf_reg(dm, RF_PATH_A, R_0x42, BIT(19), 0x00);
897
odm_set_rf_reg(dm, RF_PATH_A, R_0x42, BIT(19), 0x01);
898
899
odm_set_rf_reg(dm, RF_PATH_B, R_0x42, BIT(19), 0x01);
900
odm_set_rf_reg(dm, RF_PATH_B, R_0x42, BIT(19), 0x00);
901
odm_set_rf_reg(dm, RF_PATH_B, R_0x42, BIT(19), 0x01);
902
} else
903
odm_set_rf_reg(dm, RF_PATH_A, RF_T_METER_OLD, RFREGOFFSETMASK, 0x60);
904
905
if (dm->support_ic_type & (ODM_RTL8822C | ODM_RTL8814B)) {
906
#if (RTL8822C_SUPPORT == 1 || RTL8814B_SUPPORT == 1)
907
odm_txpowertracking_new_callback_thermal_meter(dm);
908
#endif
909
} else
910
odm_txpowertracking_callback_thermal_meter(dm);
911
#endif
912
913
}
914
915
916
void odm_txpowertracking_check_mp(void *dm_void)
917
{
918
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
919
struct dm_struct *dm = (struct dm_struct *)dm_void;
920
void *adapter = dm->adapter;
921
922
if (odm_check_power_status(adapter) == false) {
923
RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,
924
("check_pow_status, return false\n"));
925
return;
926
}
927
928
odm_txpowertracking_thermal_meter_check(adapter);
929
#endif
930
}
931
932
void odm_txpowertracking_check_ap(void *dm_void)
933
{
934
#if (DM_ODM_SUPPORT_TYPE == ODM_AP)
935
struct dm_struct *dm = (struct dm_struct *)dm_void;
936
struct rtl8192cd_priv *priv = dm->priv;
937
938
return;
939
940
#endif
941
}
942
943