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