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 <wlanfae@realtek.com>
19 * Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,
20 * Hsinchu 300, Taiwan.
21 *
22 * Larry Finger <Larry.Finger@lwfinger.net>
23 *
24 *****************************************************************************/
25
26 /*============================================================ */
27 /* include files */
28 /*============================================================ */
29 #include "mp_precomp.h"
30 #include "phydm_precomp.h"
31
32 /* ************************************************************
33 * Global var
34 * ************************************************************
35 */
36
37 const u32 ofdm_swing_table[OFDM_TABLE_SIZE] = {
38 0x7f8001fe, /* 0, +6.0dB */
39 0x788001e2, /* 1, +5.5dB */
40 0x71c001c7, /* 2, +5.0dB*/
41 0x6b8001ae, /* 3, +4.5dB*/
42 0x65400195, /* 4, +4.0dB*/
43 0x5fc0017f, /* 5, +3.5dB*/
44 0x5a400169, /* 6, +3.0dB*/
45 0x55400155, /* 7, +2.5dB*/
46 0x50800142, /* 8, +2.0dB*/
47 0x4c000130, /* 9, +1.5dB*/
48 0x47c0011f, /* 10, +1.0dB*/
49 0x43c0010f, /* 11, +0.5dB*/
50 0x40000100, /* 12, +0dB*/
51 0x3c8000f2, /* 13, -0.5dB*/
52 0x390000e4, /* 14, -1.0dB*/
53 0x35c000d7, /* 15, -1.5dB*/
54 0x32c000cb, /* 16, -2.0dB*/
55 0x300000c0, /* 17, -2.5dB*/
56 0x2d4000b5, /* 18, -3.0dB*/
57 0x2ac000ab, /* 19, -3.5dB*/
58 0x288000a2, /* 20, -4.0dB*/
59 0x26000098, /* 21, -4.5dB*/
60 0x24000090, /* 22, -5.0dB*/
61 0x22000088, /* 23, -5.5dB*/
62 0x20000080, /* 24, -6.0dB*/
63 0x1e400079, /* 25, -6.5dB*/
64 0x1c800072, /* 26, -7.0dB*/
65 0x1b00006c, /* 27. -7.5dB*/
66 0x19800066, /* 28, -8.0dB*/
67 0x18000060, /* 29, -8.5dB*/
68 0x16c0005b, /* 30, -9.0dB*/
69 0x15800056, /* 31, -9.5dB*/
70 0x14400051, /* 32, -10.0dB*/
71 0x1300004c, /* 33, -10.5dB*/
72 0x12000048, /* 34, -11.0dB*/
73 0x11000044, /* 35, -11.5dB*/
74 0x10000040, /* 36, -12.0dB*/
75 };
76
77 const u8 cck_swing_table_ch1_ch13[CCK_TABLE_SIZE][8] = {
78 {0x36, 0x35, 0x2e, 0x25, 0x1c, 0x12, 0x09, 0x04}, /* 0, +0dB */
79 {0x33, 0x32, 0x2b, 0x23, 0x1a, 0x11, 0x08, 0x04}, /* 1, -0.5dB */
80 {0x30, 0x2f, 0x29, 0x21, 0x19, 0x10, 0x08, 0x03}, /* 2, -1.0dB*/
81 {0x2d, 0x2d, 0x27, 0x1f, 0x18, 0x0f, 0x08, 0x03}, /* 3, -1.5dB*/
82 {0x2b, 0x2a, 0x25, 0x1e, 0x16, 0x0e, 0x07, 0x03}, /* 4, -2.0dB */
83 {0x28, 0x28, 0x22, 0x1c, 0x15, 0x0d, 0x07, 0x03}, /* 5, -2.5dB*/
84 {0x26, 0x25, 0x21, 0x1b, 0x14, 0x0d, 0x06, 0x03}, /* 6, -3.0dB*/
85 {0x24, 0x23, 0x1f, 0x19, 0x13, 0x0c, 0x06, 0x03}, /* 7, -3.5dB*/
86 {0x22, 0x21, 0x1d, 0x18, 0x11, 0x0b, 0x06, 0x02}, /* 8, -4.0dB */
87 {0x20, 0x20, 0x1b, 0x16, 0x11, 0x08, 0x05, 0x02}, /* 9, -4.5dB*/
88 {0x1f, 0x1e, 0x1a, 0x15, 0x10, 0x0a, 0x05, 0x02}, /* 10, -5.0dB */
89 {0x1d, 0x1c, 0x18, 0x14, 0x0f, 0x0a, 0x05, 0x02}, /* 11, -5.5dB*/
90 {0x1b, 0x1a, 0x17, 0x13, 0x0e, 0x09, 0x04, 0x02}, /* 12, -6.0dB <== default */
91 {0x1a, 0x19, 0x16, 0x12, 0x0d, 0x09, 0x04, 0x02}, /* 13, -6.5dB*/
92 {0x18, 0x17, 0x15, 0x11, 0x0c, 0x08, 0x04, 0x02}, /* 14, -7.0dB */
93 {0x17, 0x16, 0x13, 0x10, 0x0c, 0x08, 0x04, 0x02}, /* 15, -7.5dB*/
94 {0x16, 0x15, 0x12, 0x0f, 0x0b, 0x07, 0x04, 0x01}, /* 16, -8.0dB */
95 {0x14, 0x14, 0x11, 0x0e, 0x0b, 0x07, 0x03, 0x02}, /* 17, -8.5dB*/
96 {0x13, 0x13, 0x10, 0x0d, 0x0a, 0x06, 0x03, 0x01}, /* 18, -9.0dB */
97 {0x12, 0x12, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, /* 19, -9.5dB*/
98 {0x11, 0x11, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, /* 20, -10.0dB*/
99 {0x10, 0x10, 0x0e, 0x0b, 0x08, 0x05, 0x03, 0x01}, /* 21, -10.5dB*/
100 {0x0f, 0x0f, 0x0d, 0x0b, 0x08, 0x05, 0x03, 0x01}, /* 22, -11.0dB*/
101 {0x0e, 0x0e, 0x0c, 0x0a, 0x08, 0x05, 0x02, 0x01}, /* 23, -11.5dB*/
102 {0x0d, 0x0d, 0x0c, 0x0a, 0x07, 0x05, 0x02, 0x01}, /* 24, -12.0dB*/
103 {0x0d, 0x0c, 0x0b, 0x09, 0x07, 0x04, 0x02, 0x01}, /* 25, -12.5dB*/
104 {0x0c, 0x0c, 0x0a, 0x09, 0x06, 0x04, 0x02, 0x01}, /* 26, -13.0dB*/
105 {0x0b, 0x0b, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x01}, /* 27, -13.5dB*/
106 {0x0b, 0x0a, 0x09, 0x08, 0x06, 0x04, 0x02, 0x01}, /* 28, -14.0dB*/
107 {0x0a, 0x0a, 0x09, 0x07, 0x05, 0x03, 0x02, 0x01}, /* 29, -14.5dB*/
108 {0x0a, 0x09, 0x08, 0x07, 0x05, 0x03, 0x02, 0x01}, /* 30, -15.0dB*/
109 {0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01}, /* 31, -15.5dB*/
110 {0x09, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x01} /* 32, -16.0dB*/
111 };
112
113 const u8 cck_swing_table_ch14[CCK_TABLE_SIZE][8] = {
114 {0x36, 0x35, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00}, /* 0, +0dB */
115 {0x33, 0x32, 0x2b, 0x19, 0x00, 0x00, 0x00, 0x00}, /* 1, -0.5dB */
116 {0x30, 0x2f, 0x29, 0x18, 0x00, 0x00, 0x00, 0x00}, /* 2, -1.0dB */
117 {0x2d, 0x2d, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00}, /* 3, -1.5dB*/
118 {0x2b, 0x2a, 0x25, 0x15, 0x00, 0x00, 0x00, 0x00}, /* 4, -2.0dB */
119 {0x28, 0x28, 0x24, 0x14, 0x00, 0x00, 0x00, 0x00}, /* 5, -2.5dB*/
120 {0x26, 0x25, 0x21, 0x13, 0x00, 0x00, 0x00, 0x00}, /* 6, -3.0dB */
121 {0x24, 0x23, 0x1f, 0x12, 0x00, 0x00, 0x00, 0x00}, /* 7, -3.5dB */
122 {0x22, 0x21, 0x1d, 0x11, 0x00, 0x00, 0x00, 0x00}, /* 8, -4.0dB */
123 {0x20, 0x20, 0x1b, 0x10, 0x00, 0x00, 0x00, 0x00}, /* 9, -4.5dB*/
124 {0x1f, 0x1e, 0x1a, 0x0f, 0x00, 0x00, 0x00, 0x00}, /* 10, -5.0dB */
125 {0x1d, 0x1c, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00}, /* 11, -5.5dB*/
126 {0x1b, 0x1a, 0x17, 0x0e, 0x00, 0x00, 0x00, 0x00}, /* 12, -6.0dB <== default*/
127 {0x1a, 0x19, 0x16, 0x0d, 0x00, 0x00, 0x00, 0x00}, /* 13, -6.5dB */
128 {0x18, 0x17, 0x15, 0x0c, 0x00, 0x00, 0x00, 0x00}, /* 14, -7.0dB */
129 {0x17, 0x16, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00}, /* 15, -7.5dB*/
130 {0x16, 0x15, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00}, /* 16, -8.0dB */
131 {0x14, 0x14, 0x11, 0x0a, 0x00, 0x00, 0x00, 0x00}, /* 17, -8.5dB*/
132 {0x13, 0x13, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00}, /* 18, -9.0dB */
133 {0x12, 0x12, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00}, /* 19, -9.5dB*/
134 {0x11, 0x11, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00}, /* 20, -10.0dB*/
135 {0x10, 0x10, 0x0e, 0x08, 0x00, 0x00, 0x00, 0x00}, /* 21, -10.5dB*/
136 {0x0f, 0x0f, 0x0d, 0x08, 0x00, 0x00, 0x00, 0x00}, /* 22, -11.0dB*/
137 {0x0e, 0x0e, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00}, /* 23, -11.5dB*/
138 {0x0d, 0x0d, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00}, /* 24, -12.0dB*/
139 {0x0d, 0x0c, 0x0b, 0x06, 0x00, 0x00, 0x00, 0x00}, /* 25, -12.5dB*/
140 {0x0c, 0x0c, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00}, /* 26, -13.0dB*/
141 {0x0b, 0x0b, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00}, /* 27, -13.5dB*/
142 {0x0b, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 28, -14.0dB*/
143 {0x0a, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 29, -14.5dB*/
144 {0x0a, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 30, -15.0dB*/
145 {0x09, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 31, -15.5dB*/
146 {0x09, 0x08, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00} /* 32, -16.0dB*/
147 };
148
149 const u32 ofdm_swing_table_new[OFDM_TABLE_SIZE] = {
150 0x0b40002d, /* 0, -15.0dB */
151 0x0c000030, /* 1, -14.5dB*/
152 0x0cc00033, /* 2, -14.0dB*/
153 0x0d800036, /* 3, -13.5dB*/
154 0x0e400039, /* 4, -13.0dB */
155 0x0f00003c, /* 5, -12.5dB*/
156 0x10000040, /* 6, -12.0dB*/
157 0x11000044, /* 7, -11.5dB*/
158 0x12000048, /* 8, -11.0dB*/
159 0x1300004c, /* 9, -10.5dB*/
160 0x14400051, /* 10, -10.0dB*/
161 0x15800056, /* 11, -9.5dB*/
162 0x16c0005b, /* 12, -9.0dB*/
163 0x18000060, /* 13, -8.5dB*/
164 0x19800066, /* 14, -8.0dB*/
165 0x1b00006c, /* 15, -7.5dB*/
166 0x1c800072, /* 16, -7.0dB*/
167 0x1e400079, /* 17, -6.5dB*/
168 0x20000080, /* 18, -6.0dB*/
169 0x22000088, /* 19, -5.5dB*/
170 0x24000090, /* 20, -5.0dB*/
171 0x26000098, /* 21, -4.5dB*/
172 0x288000a2, /* 22, -4.0dB*/
173 0x2ac000ab, /* 23, -3.5dB*/
174 0x2d4000b5, /* 24, -3.0dB*/
175 0x300000c0, /* 25, -2.5dB*/
176 0x32c000cb, /* 26, -2.0dB*/
177 0x35c000d7, /* 27, -1.5dB*/
178 0x390000e4, /* 28, -1.0dB*/
179 0x3c8000f2, /* 29, -0.5dB*/
180 0x40000100, /* 30, +0dB*/
181 0x43c0010f, /* 31, +0.5dB*/
182 0x47c0011f, /* 32, +1.0dB*/
183 0x4c000130, /* 33, +1.5dB*/
184 0x50800142, /* 34, +2.0dB*/
185 0x55400155, /* 35, +2.5dB*/
186 0x5a400169, /* 36, +3.0dB*/
187 0x5fc0017f, /* 37, +3.5dB*/
188 0x65400195, /* 38, +4.0dB*/
189 0x6b8001ae, /* 39, +4.5dB*/
190 0x71c001c7, /* 40, +5.0dB*/
191 0x788001e2, /* 41, +5.5dB*/
192 0x7f8001fe /* 42, +6.0dB*/
193 };
194
195 const u8 cck_swing_table_ch1_ch14_88f[CCK_TABLE_SIZE_88F][16] = {
196 {0x44, 0x42, 0x3C, 0x33, 0x28, 0x1C, 0x13, 0x0B, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-16dB*/
197 {0x48, 0x46, 0x3F, 0x36, 0x2A, 0x1E, 0x14, 0x0B, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-15.5dB*/
198 {0x4D, 0x4A, 0x43, 0x39, 0x2C, 0x20, 0x15, 0x0C, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-15dB*/
199 {0x51, 0x4F, 0x47, 0x3C, 0x2F, 0x22, 0x16, 0x0D, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-14.5dB*/
200 {0x56, 0x53, 0x4B, 0x40, 0x32, 0x24, 0x17, 0x0E, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-14dB*/
201 {0x5B, 0x58, 0x50, 0x43, 0x35, 0x26, 0x19, 0x0E, 0x07, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-13.5dB*/
202 {0x60, 0x5D, 0x54, 0x47, 0x38, 0x28, 0x1A, 0x0F, 0x07, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-13dB*/
203 {0x66, 0x63, 0x59, 0x4C, 0x3B, 0x2B, 0x1C, 0x10, 0x08, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-12.5dB*/
204 {0x6C, 0x69, 0x5F, 0x50, 0x3F, 0x2D, 0x1E, 0x11, 0x08, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-12dB*/
205 {0x73, 0x6F, 0x64, 0x55, 0x42, 0x30, 0x1F, 0x12, 0x08, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-11.5dB*/
206 {0x79, 0x76, 0x6A, 0x5A, 0x46, 0x33, 0x21, 0x13, 0x09, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-11dB*/
207 {0x81, 0x7C, 0x71, 0x5F, 0x4A, 0x36, 0x23, 0x14, 0x0A, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-10.5dB*/
208 {0x88, 0x84, 0x77, 0x65, 0x4F, 0x39, 0x25, 0x15, 0x0A, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-10dB*/
209 {0x90, 0x8C, 0x7E, 0x6B, 0x54, 0x3C, 0x27, 0x17, 0x0B, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-9.5dB*/
210 {0x99, 0x94, 0x86, 0x71, 0x58, 0x40, 0x2A, 0x18, 0x0B, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-9dB*/
211 {0xA2, 0x9D, 0x8E, 0x78, 0x5E, 0x43, 0x2C, 0x19, 0x0C, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-8.5dB*/
212 {0xAC, 0xA6, 0x96, 0x7F, 0x63, 0x47, 0x2F, 0x1B, 0x0D, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-8dB*/
213 {0xB6, 0xB0, 0x9F, 0x87, 0x69, 0x4C, 0x32, 0x1D, 0x0D, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-7.5dB*/
214 {0xC1, 0xBA, 0xA8, 0x8F, 0x6F, 0x50, 0x35, 0x1E, 0x0E, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-7dB*/
215 {0xCC, 0xC5, 0xB2, 0x97, 0x76, 0x55, 0x38, 0x20, 0x0F, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-6.5dB*/
216 {0xD8, 0xD1, 0xBD, 0xA0, 0x7D, 0x5A, 0x3B, 0x22, 0x10, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} /*-6dB*/
217 };
218
219 const u8 cck_swing_table_ch1_ch13_88f[CCK_TABLE_SIZE_88F][16] = {
220 {0x44, 0x42, 0x3C, 0x33, 0x28, 0x1C, 0x13, 0x0B, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-16dB*/
221 {0x48, 0x46, 0x3F, 0x36, 0x2A, 0x1E, 0x14, 0x0B, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-15.5dB*/
222 {0x4D, 0x4A, 0x43, 0x39, 0x2C, 0x20, 0x15, 0x0C, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-15dB*/
223 {0x51, 0x4F, 0x47, 0x3C, 0x2F, 0x22, 0x16, 0x0D, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-14.5dB*/
224 {0x56, 0x53, 0x4B, 0x40, 0x32, 0x24, 0x17, 0x0E, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-14dB*/
225 {0x5B, 0x58, 0x50, 0x43, 0x35, 0x26, 0x19, 0x0E, 0x07, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-13.5dB*/
226 {0x60, 0x5D, 0x54, 0x47, 0x38, 0x28, 0x1A, 0x0F, 0x07, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-13dB*/
227 {0x66, 0x63, 0x59, 0x4C, 0x3B, 0x2B, 0x1C, 0x10, 0x08, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-12.5dB*/
228 {0x6C, 0x69, 0x5F, 0x50, 0x3F, 0x2D, 0x1E, 0x11, 0x08, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-12dB*/
229 {0x73, 0x6F, 0x64, 0x55, 0x42, 0x30, 0x1F, 0x12, 0x08, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-11.5dB*/
230 {0x79, 0x76, 0x6A, 0x5A, 0x46, 0x33, 0x21, 0x13, 0x09, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-11dB*/
231 {0x81, 0x7C, 0x71, 0x5F, 0x4A, 0x36, 0x23, 0x14, 0x0A, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-10.5dB*/
232 {0x88, 0x84, 0x77, 0x65, 0x4F, 0x39, 0x25, 0x15, 0x0A, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-10dB*/
233 {0x90, 0x8C, 0x7E, 0x6B, 0x54, 0x3C, 0x27, 0x17, 0x0B, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-9.5dB*/
234 {0x99, 0x94, 0x86, 0x71, 0x58, 0x40, 0x2A, 0x18, 0x0B, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-9dB*/
235 {0xA2, 0x9D, 0x8E, 0x78, 0x5E, 0x43, 0x2C, 0x19, 0x0C, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-8.5dB*/
236 {0xAC, 0xA6, 0x96, 0x7F, 0x63, 0x47, 0x2F, 0x1B, 0x0D, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-8dB*/
237 {0xB6, 0xB0, 0x9F, 0x87, 0x69, 0x4C, 0x32, 0x1D, 0x0D, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-7.5dB*/
238 {0xC1, 0xBA, 0xA8, 0x8F, 0x6F, 0x50, 0x35, 0x1E, 0x0E, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-7dB*/
239 {0xCC, 0xC5, 0xB2, 0x97, 0x76, 0x55, 0x38, 0x20, 0x0F, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-6.5dB*/
240 {0xD8, 0xD1, 0xBD, 0xA0, 0x7D, 0x5A, 0x3B, 0x22, 0x10, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} /*-6dB*/
241 };
242
243 const u8 cck_swing_table_ch14_88f[CCK_TABLE_SIZE_88F][16] = {
244 {0x44, 0x42, 0x3C, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-16dB*/
245 {0x48, 0x46, 0x3F, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-15.5dB*/
246 {0x4D, 0x4A, 0x43, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-15dB*/
247 {0x51, 0x4F, 0x47, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-14.5dB*/
248 {0x56, 0x53, 0x4B, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-14dB*/
249 {0x5B, 0x58, 0x50, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-13.5dB*/
250 {0x60, 0x5D, 0x54, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-13dB*/
251 {0x66, 0x63, 0x59, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-12.5dB*/
252 {0x6C, 0x69, 0x5F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-12dB*/
253 {0x73, 0x6F, 0x64, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-11.5dB*/
254 {0x79, 0x76, 0x6A, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-11dB*/
255 {0x81, 0x7C, 0x71, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-10.5dB*/
256 {0x88, 0x84, 0x77, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-10dB*/
257 {0x90, 0x8C, 0x7E, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-9.5dB*/
258 {0x99, 0x94, 0x86, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-9dB*/
259 {0xA2, 0x9D, 0x8E, 0x5E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-8.5dB*/
260 {0xAC, 0xA6, 0x96, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-8dB*/
261 {0xB6, 0xB0, 0x9F, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-7.5dB*/
262 {0xC1, 0xBA, 0xA8, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-7dB*/
263 {0xCC, 0xC5, 0xB2, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*-6.5dB*/
264 {0xD8, 0xD1, 0xBD, 0x7D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} /*-6dB*/
265 };
266
267 const u8 cck_swing_table_ch1_ch13_new[CCK_TABLE_SIZE][8] = {
268 {0x09, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x01}, /* 0, -16.0dB*/
269 {0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01}, /* 1, -15.5dB*/
270 {0x0a, 0x09, 0x08, 0x07, 0x05, 0x03, 0x02, 0x01}, /* 2, -15.0dB*/
271 {0x0a, 0x0a, 0x09, 0x07, 0x05, 0x03, 0x02, 0x01}, /* 3, -14.5dB*/
272 {0x0b, 0x0a, 0x09, 0x08, 0x06, 0x04, 0x02, 0x01}, /* 4, -14.0dB*/
273 {0x0b, 0x0b, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x01}, /* 5, -13.5dB*/
274 {0x0c, 0x0c, 0x0a, 0x09, 0x06, 0x04, 0x02, 0x01}, /* 6, -13.0dB*/
275 {0x0d, 0x0c, 0x0b, 0x09, 0x07, 0x04, 0x02, 0x01}, /* 7, -12.5dB*/
276 {0x0d, 0x0d, 0x0c, 0x0a, 0x07, 0x05, 0x02, 0x01}, /* 8, -12.0dB*/
277 {0x0e, 0x0e, 0x0c, 0x0a, 0x08, 0x05, 0x02, 0x01}, /* 9, -11.5dB*/
278 {0x0f, 0x0f, 0x0d, 0x0b, 0x08, 0x05, 0x03, 0x01}, /* 10, -11.0dB*/
279 {0x10, 0x10, 0x0e, 0x0b, 0x08, 0x05, 0x03, 0x01}, /* 11, -10.5dB*/
280 {0x11, 0x11, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, /* 12, -10.0dB*/
281 {0x12, 0x12, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, /* 13, -9.5dB*/
282 {0x13, 0x13, 0x10, 0x0d, 0x0a, 0x06, 0x03, 0x01}, /* 14, -9.0dB */
283 {0x14, 0x14, 0x11, 0x0e, 0x0b, 0x07, 0x03, 0x02}, /* 15, -8.5dB*/
284 {0x16, 0x15, 0x12, 0x0f, 0x0b, 0x07, 0x04, 0x01}, /* 16, -8.0dB */
285 {0x17, 0x16, 0x13, 0x10, 0x0c, 0x08, 0x04, 0x02}, /* 17, -7.5dB*/
286 {0x18, 0x17, 0x15, 0x11, 0x0c, 0x08, 0x04, 0x02}, /* 18, -7.0dB */
287 {0x1a, 0x19, 0x16, 0x12, 0x0d, 0x09, 0x04, 0x02}, /* 19, -6.5dB*/
288 {0x1b, 0x1a, 0x17, 0x13, 0x0e, 0x09, 0x04, 0x02}, /*20, -6.0dB */
289 {0x1d, 0x1c, 0x18, 0x14, 0x0f, 0x0a, 0x05, 0x02}, /* 21, -5.5dB*/
290 {0x1f, 0x1e, 0x1a, 0x15, 0x10, 0x0a, 0x05, 0x02}, /* 22, -5.0dB */
291 {0x20, 0x20, 0x1b, 0x16, 0x11, 0x08, 0x05, 0x02}, /* 23, -4.5dB*/
292 {0x22, 0x21, 0x1d, 0x18, 0x11, 0x0b, 0x06, 0x02}, /* 24, -4.0dB */
293 {0x24, 0x23, 0x1f, 0x19, 0x13, 0x0c, 0x06, 0x03}, /* 25, -3.5dB*/
294 {0x26, 0x25, 0x21, 0x1b, 0x14, 0x0d, 0x06, 0x03}, /* 26, -3.0dB*/
295 {0x28, 0x28, 0x22, 0x1c, 0x15, 0x0d, 0x07, 0x03}, /* 27, -2.5dB*/
296 {0x2b, 0x2a, 0x25, 0x1e, 0x16, 0x0e, 0x07, 0x03}, /* 28, -2.0dB */
297 {0x2d, 0x2d, 0x27, 0x1f, 0x18, 0x0f, 0x08, 0x03}, /* 29, -1.5dB*/
298 {0x30, 0x2f, 0x29, 0x21, 0x19, 0x10, 0x08, 0x03}, /* 30, -1.0dB*/
299 {0x33, 0x32, 0x2b, 0x23, 0x1a, 0x11, 0x08, 0x04}, /* 31, -0.5dB*/
300 {0x36, 0x35, 0x2e, 0x25, 0x1c, 0x12, 0x09, 0x04} /* 32, +0dB*/
301 };
302
303 const u8 cck_swing_table_ch14_new[CCK_TABLE_SIZE][8] = {
304 {0x09, 0x08, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00}, /* 0, -16.0dB*/
305 {0x09, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 1, -15.5dB*/
306 {0x0a, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 2, -15.0dB*/
307 {0x0a, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 3, -14.5dB*/
308 {0x0b, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 4, -14.0dB*/
309 {0x0b, 0x0b, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00}, /*5, -13.5dB*/
310 {0x0c, 0x0c, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00}, /* 6, -13.0dB*/
311 {0x0d, 0x0c, 0x0b, 0x06, 0x00, 0x00, 0x00, 0x00}, /* 7, -12.5dB*/
312 {0x0d, 0x0d, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00}, /* 8, -12.0dB*/
313 {0x0e, 0x0e, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00}, /* 9, -11.5dB*/
314 {0x0f, 0x0f, 0x0d, 0x08, 0x00, 0x00, 0x00, 0x00}, /* 10, -11.0dB*/
315 {0x10, 0x10, 0x0e, 0x08, 0x00, 0x00, 0x00, 0x00}, /*11, -10.5dB*/
316 {0x11, 0x11, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00}, /* 12, -10.0dB*/
317 {0x12, 0x12, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00}, /* 13, -9.5dB*/
318 {0x13, 0x13, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00}, /*14, -9.0dB */
319 {0x14, 0x14, 0x11, 0x0a, 0x00, 0x00, 0x00, 0x00}, /* 15, -8.5dB*/
320 {0x16, 0x15, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00}, /* 16, -8.0dB */
321 {0x17, 0x16, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00}, /* 17, -7.5dB*/
322 {0x18, 0x17, 0x15, 0x0c, 0x00, 0x00, 0x00, 0x00}, /* 18, -7.0dB */
323 {0x1a, 0x19, 0x16, 0x0d, 0x00, 0x00, 0x00, 0x00}, /* 19, -6.5dB */
324 {0x1b, 0x1a, 0x17, 0x0e, 0x00, 0x00, 0x00, 0x00}, /* 20, -6.0dB */
325 {0x1d, 0x1c, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00}, /* 21, -5.5dB*/
326 {0x1f, 0x1e, 0x1a, 0x0f, 0x00, 0x00, 0x00, 0x00}, /* 22, -5.0dB */
327 {0x20, 0x20, 0x1b, 0x10, 0x00, 0x00, 0x00, 0x00}, /*23, -4.5dB*/
328 {0x22, 0x21, 0x1d, 0x11, 0x00, 0x00, 0x00, 0x00}, /* 24, -4.0dB */
329 {0x24, 0x23, 0x1f, 0x12, 0x00, 0x00, 0x00, 0x00}, /* 25, -3.5dB */
330 {0x26, 0x25, 0x21, 0x13, 0x00, 0x00, 0x00, 0x00}, /* 26, -3.0dB */
331 {0x28, 0x28, 0x24, 0x14, 0x00, 0x00, 0x00, 0x00}, /*27, -2.5dB*/
332 {0x2b, 0x2a, 0x25, 0x15, 0x00, 0x00, 0x00, 0x00}, /* 28, -2.0dB */
333 {0x2d, 0x2d, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00}, /*29, -1.5dB*/
334 {0x30, 0x2f, 0x29, 0x18, 0x00, 0x00, 0x00, 0x00}, /* 30, -1.0dB */
335 {0x33, 0x32, 0x2b, 0x19, 0x00, 0x00, 0x00, 0x00}, /* 31, -0.5dB */
336 {0x36, 0x35, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00} /* 32, +0dB */
337 };
338
339 const u32 cck_swing_table_ch1_ch14_8723d[CCK_TABLE_SIZE_8723D] = {
340 0x0CD, /*0 , -20dB*/
341 0x0D9,
342 0x0E6,
343 0x0F3,
344 0x102,
345 0x111,
346 0x121,
347 0x132,
348 0x144,
349 0x158,
350 0x16C,
351 0x182,
352 0x198,
353 0x1B1,
354 0x1CA,
355 0x1E5,
356 0x202,
357 0x221,
358 0x241,
359 0x263,
360 0x287,
361 0x2AE,
362 0x2D6,
363 0x301,
364 0x32F,
365 0x35F,
366 0x392,
367 0x3C9,
368 0x402,
369 0x43F,
370 0x47F,
371 0x4C3,
372 0x50C,
373 0x558,
374 0x5A9,
375 0x5FF,
376 0x65A,
377 0x6BA,
378 0x720,
379 0x78C,
380 0x7FF,
381 };
382
383 /* JJ ADD 20161014 */
384 const u32 cck_swing_table_ch1_ch14_8710b[CCK_TABLE_SIZE_8710B] = {
385 0x0CD, /*0 , -20dB*/
386 0x0D9,
387 0x0E6,
388 0x0F3,
389 0x102,
390 0x111,
391 0x121,
392 0x132,
393 0x144,
394 0x158,
395 0x16C,
396 0x182,
397 0x198,
398 0x1B1,
399 0x1CA,
400 0x1E5,
401 0x202,
402 0x221,
403 0x241,
404 0x263,
405 0x287,
406 0x2AE,
407 0x2D6,
408 0x301,
409 0x32F,
410 0x35F,
411 0x392,
412 0x3C9,
413 0x402,
414 0x43F,
415 0x47F,
416 0x4C3,
417 0x50C,
418 0x558,
419 0x5A9,
420 0x5FF,
421 0x65A,
422 0x6BA,
423 0x720,
424 0x78C,
425 0x7FF,
426 };
427
428 /* Winnita ADD 20171116 PathA 0xAB4[10:0],PathB 0xAB4[21:11]*/
429 const u32 cck_swing_table_ch1_ch14_8192f[CCK_TABLE_SIZE_8192F] = {
430 0x0CD, /*0 , -20dB*/
431 0x0D9,
432 0x0E6,
433 0x0F3,
434 0x102,
435 0x111,
436 0x121,
437 0x132,
438 0x144,
439 0x158,
440 0x16C,
441 0x182,
442 0x198,
443 0x1B1,
444 0x1CA,
445 0x1E5,
446 0x202,
447 0x221,
448 0x241,
449 0x263, /*19*/
450 0x287, /*20*/
451 0x2AE, /*21*/
452 0x2D6, /*22*/
453 0x301, /*23*/
454 0x32F, /*24*/
455 0x35F, /*25*/
456 0x392, /*26*/
457 0x3C9, /*27*/
458 0x402, /*28*/
459 0x43F, /*29*/
460 0x47F, /*30*/
461 0x4C3, /*31*/
462 0x50C, /*32*/
463 0x558, /*33*/
464 0x5A9, /*34*/
465 0x5FF, /*35*/
466 0x65A, /*36*/
467 0x6BA,
468 0x720,
469 0x78C,
470 0x7FF,
471 };
472
473 /* Winnita ADD 201805 PathA 0xAB4[10:0]*/
474 const u32 cck_swing_table_ch1_ch14_8721d[CCK_TABLE_SIZE_8721D] = {
475 0x0CD, /*0 , -20dB*/
476 0x0D9,
477 0x0E6,
478 0x0F3,
479 0x102,
480 0x111,
481 0x121,
482 0x132,
483 0x144,
484 0x158,
485 0x16C,
486 0x182,
487 0x198,
488 0x1B1,
489 0x1CA,
490 0x1E5,
491 0x202,
492 0x221,
493 0x241,
494 0x263, /*19*/
495 0x287, /*20*/
496 0x2AE, /*21*/
497 0x2D6, /*22*/
498 0x301, /*23*/
499 0x32F, /*24*/
500 0x35F, /*25*/
501 0x392, /*26*/
502 0x3C9, /*27*/
503 0x402, /*28*/
504 0x43F, /*29*/
505 0x47F, /*30*/
506 0x4C3, /*31*/
507 0x50C, /*32*/
508 0x558, /*33*/
509 0x5A9, /*34*/
510 0x5FF, /*35*/
511 0x65A, /*36*/
512 0x6BA,
513 0x720,
514 0x78C,
515 0x7FF,
516 };
517
518 const u32 cck_swing_table_ch1_ch14_8710c[CCK_TABLE_SIZE_8710C] = {
519 0x0CD, /*0 , -20dB*/
520 0x0D9,
521 0x0E6,
522 0x0F3,
523 0x102,
524 0x111,
525 0x121,
526 0x132,
527 0x144,
528 0x158,
529 0x16C,
530 0x182,
531 0x198,
532 0x1B1,
533 0x1CA,
534 0x1E5,
535 0x202,
536 0x221,
537 0x241,
538 0x263,
539 0x287,
540 0x2AE,
541 0x2D6,
542 0x301,
543 0x32F,
544 0x35F,
545 0x392,
546 0x3C9,
547 0x402,
548 0x43F,
549 0x47F,
550 0x4C3,
551 0x50C,
552 0x558,
553 0x5A9,
554 0x5FF,
555 0x65A,
556 0x6BA,
557 0x720,
558 0x78C,
559 0x7FF,
560 };
561
562 const u32 cck_swing_table_03db_ch1_ch14_8710c[CCK_03DB_TABLE_SIZE_8710C] = {
563 0x143, /*0 , -4dB*/
564 0x14C, /*1 , -3.75dB*/
565 0x156, /*2 , -3.5dB*/
566 0x160,
567 0x16A,
568 0x175,
569 0x17F,
570 0x18B,
571 0x196,
572 0x1A2,
573 0x1AE,
574 0x1BB,
575 0x1C8,
576 0x1D5,
577 0x1E3,
578 0x1F1,
579 0x200,
580 0x20F,
581 0x21E,
582 0x22F,
583 0x23F,
584 0x250,
585 0x261,
586 0x273,
587 0x285,
588 0x298,
589 0x2AB,
590 0x2BF,
591 0x2D6,
592 0x2E9,
593 0x2FF,
594 0x315,
595 0x32C,
596 0x344,
597 0x35C,
598 0x375,
599 0x390,
600 0x3AA,
601 0x3C5,
602 0x3E1,
603 0x402, /*40 , +6dB default*/
604 0x41C,
605 0x43B,
606 0x45A,
607 0x47C,
608 0x49C,
609 0x4BF,
610 0x4E2,
611 0x510,
612 0x52C,
613 0x553,
614 0x57B,
615 0x5A5,
616 0x5CE,
617 0x5F9,
618 0x626,
619 0x655,
620 0x683,
621 0x6B5,
622 0x6E6,
623 0x71E,
624 0x74E,
625 0x786,
626 0x7BD,
627 0x7F9,
628 0x832,
629 0x871,
630 0x8AF,
631 0x8F2,
632 0x932,
633 0x977,
634 0x9BE,
635 0xA0E,
636 0xA52,
637 0xAA1,
638 0xAEE,
639 0xB54,
640 0xB95,
641 0xBEB,
642 0xC43,
643 0xCA3 /*80 , +16dB*/
644 };
645
646 const u32 ofdm_swing_table_03DB_8710c[OFDM_03DB_TABLE_SIZE_8710C] = {
647 0xE4, /*0 , -7dB*/
648 0xEB, /*1 , -6.75dB*/
649 0xF2, /*2 , -6.5dB*/
650 0xF9,
651 0x100,
652 0x108,
653 0x110,
654 0x118,
655 0x11F,
656 0x128,
657 0x131,
658 0x13A,
659 0x143,
660 0x14C,
661 0x156,
662 0x160,
663 0x16A,
664 0x175,
665 0x180,
666 0x18B,
667 0x196,
668 0x1A2,
669 0x1AE,
670 0x1BB,
671 0x1C8,
672 0x1D5,
673 0x1E3,
674 0x1F1,
675 0x200,
676 0x20F,
677 0x21F,
678 0x22F,
679 0x23F,
680 0x250,
681 0x261,
682 0x273,
683 0x286,
684 0x298,
685 0x2AB,
686 0x2BF,
687 0x2D6, /*40 , +3dB default*/
688 0x2E9,
689 0x2FF,
690 0x315,
691 0x32C,
692 0x344,
693 0x35C,
694 0x375,
695 0x390,
696 0x3AA,
697 0x3C5,
698 0x3E1,
699 0x3FF,
700 0x41C,
701 0x43B,
702 0x45A,
703 0x47B,
704 0x49C,
705 0x4BF,
706 0x4E2,
707 0x507,
708 0x52C,
709 0x553,
710 0x57B,
711 0x5A4,
712 0x5CE,
713 0x5F9,
714 0x626,
715 0x654,
716 0x683,
717 0x6B4,
718 0x6E6,
719 0x71B,
720 0x74E,
721 0x785,
722 0x7BD,
723 0x7F7,
724 0x832,
725 0x870,
726 0x8AF,
727 0x8F0 /*80 , +13dB*/
728 };
729
730
731
732 const u32 tx_scaling_table_jaguar[TXSCALE_TABLE_SIZE] = {
733 0x081, /* 0, -12.0dB*/
734 0x088, /* 1, -11.5dB*/
735 0x090, /* 2, -11.0dB*/
736 0x099, /* 3, -10.5dB*/
737 0x0A2, /* 4, -10.0dB*/
738 0x0AC, /* 5, -9.5dB*/
739 0x0B6, /* 6, -9.0dB*/
740 0x0C0, /*7, -8.5dB*/
741 0x0CC, /* 8, -8.0dB*/
742 0x0D8, /* 9, -7.5dB*/
743 0x0E5, /* 10, -7.0dB*/
744 0x0F2, /* 11, -6.5dB*/
745 0x101, /* 12, -6.0dB*/
746 0x110, /* 13, -5.5dB*/
747 0x120, /* 14, -5.0dB*/
748 0x131, /* 15, -4.5dB*/
749 0x143, /* 16, -4.0dB*/
750 0x156, /* 17, -3.5dB*/
751 0x16A, /* 18, -3.0dB*/
752 0x180, /* 19, -2.5dB*/
753 0x197, /* 20, -2.0dB*/
754 0x1AF, /* 21, -1.5dB*/
755 0x1C8, /* 22, -1.0dB*/
756 0x1E3, /* 23, -0.5dB*/
757 0x200, /* 24, +0 dB*/
758 0x21E, /* 25, +0.5dB*/
759 0x23E, /* 26, +1.0dB*/
760 0x261, /* 27, +1.5dB*/
761 0x285,/* 28, +2.0dB*/
762 0x2AB, /* 29, +2.5dB*/
763 0x2D3, /*30, +3.0dB*/
764 0x2FE, /* 31, +3.5dB*/
765 0x32B, /* 32, +4.0dB*/
766 0x35C, /* 33, +4.5dB*/
767 0x38E, /* 34, +5.0dB*/
768 0x3C4, /* 35, +5.5dB*/
769 0x3FE /* 36, +6.0dB */
770 };
771
772 void
odm_txpowertracking_init(void * dm_void)773 odm_txpowertracking_init(
774 void *dm_void
775 )
776 {
777 struct dm_struct *dm = (struct dm_struct *)dm_void;
778
779 odm_txpowertracking_thermal_meter_init(dm);
780 }
781
782 u8
get_swing_index(void * dm_void)783 get_swing_index(
784 void *dm_void
785 )
786 {
787 struct dm_struct *dm = (struct dm_struct *)dm_void;
788
789 u8 i = 0;
790 u32 bb_swing;
791 u32 swing_table_size;
792 u32 *swing_table;
793 u32 table_value;
794
795 #if (RTL8710C_SUPPORT == 1)
796 if (dm->support_ic_type == ODM_RTL8710C) {
797 bb_swing = odm_get_bb_reg(dm, R_0xcc8, 0x000007ff);
798
799 for (i = 0; i < OFDM_03DB_TABLE_SIZE_8710C; i++) {
800 if (bb_swing == ofdm_swing_table_03DB_8710c[i])
801 break;
802 }
803 }
804 #elif (RTL8195B_SUPPORT == 1)
805 if (dm->support_ic_type == ODM_RTL8195B) {
806 bb_swing = odm_get_bb_reg(dm, R_0xc1c, 0xFFE00000);
807 swing_table = (u32*)tx_scaling_table_jaguar;
808 swing_table_size = TXSCALE_TABLE_SIZE;
809
810 for (i = 0; i < swing_table_size; i++) {
811 table_value = swing_table[i];
812
813 table_value = table_value;
814 if (bb_swing == table_value)
815 break;
816 }
817 }
818 #endif
819 return i;
820 }
821
822 u8
get_cck_swing_index(void * dm_void)823 get_cck_swing_index(
824 void *dm_void
825 )
826 {
827 struct dm_struct *dm = (struct dm_struct *)dm_void;
828
829 u8 i = 0;
830 u32 bb_cck_swing;
831
832 #if (RTL8188E_SUPPORT == 1 || RTL8723B_SUPPORT == 1 || RTL8192E_SUPPORT == 1)
833 if (dm->support_ic_type == ODM_RTL8188E || dm->support_ic_type == ODM_RTL8723B ||
834 dm->support_ic_type == ODM_RTL8192E) {
835 bb_cck_swing = odm_read_1byte(dm, 0xa22);
836
837 for (i = 0; i < CCK_TABLE_SIZE; i++) {
838 if (bb_cck_swing == cck_swing_table_ch1_ch13_new[i][0])
839 break;
840 }
841 }
842 #elif (RTL8703B_SUPPORT == 1)
843 if (dm->support_ic_type == ODM_RTL8703B) {
844 bb_cck_swing = odm_read_1byte(dm, 0xa22);
845
846 for (i = 0; i < CCK_TABLE_SIZE_88F; i++) {
847 if (bb_cck_swing == cck_swing_table_ch1_ch14_88f[i][0])
848 break;
849 }
850 }
851 #elif (RTL8710C_SUPPORT == 1)
852 if (dm->support_ic_type == ODM_RTL8710C) {
853 bb_cck_swing = odm_get_bb_reg(dm, R_0xab4, 0x7ff);
854
855 RF_DBG(dm, DBG_RF_TX_PWR_TRACK,
856 "bb_cck_swing = 0x%x\n", bb_cck_swing);
857
858 for (i = 0; i < CCK_03DB_TABLE_SIZE_8710C; i++) {
859 if (bb_cck_swing == cck_swing_table_03db_ch1_ch14_8710c[i])
860 break;
861 }
862 }
863 #endif
864
865 return i;
866 }
867
868 s8
get_txagc_default_index(void * dm_void)869 get_txagc_default_index(
870 void *dm_void
871 )
872 {
873 struct dm_struct *dm = (struct dm_struct *)dm_void;
874 s8 tmp;
875
876 if (dm->support_ic_type == ODM_RTL8814B) {
877 tmp = (s8)(odm_get_bb_reg(dm, R_0x18a0, 0x7f) & 0xff);
878 if (tmp & BIT(6))
879 tmp = tmp | 0x80;
880 return tmp;
881 } else
882 return 0;
883 }
884
885 void
odm_txpowertracking_thermal_meter_init(void * dm_void)886 odm_txpowertracking_thermal_meter_init(
887 void *dm_void
888 )
889 {
890 struct dm_struct *dm = (struct dm_struct *)dm_void;
891 u8 default_swing_index;
892 u8 p = 0;
893 struct dm_rf_calibration_struct *cali_info = &dm->rf_calibrate_info;
894 struct _hal_rf_ *rf = &dm->rf_table;
895
896 if (!(*dm->mp_mode))
897 cali_info->txpowertrack_control = true;
898 else
899 cali_info->txpowertrack_control = false;
900
901 RF_DBG(dm, DBG_RF_TX_PWR_TRACK, "dm txpowertrack_control = %d\n", cali_info->txpowertrack_control);
902
903 /* dm->rf_calibrate_info.txpowertrack_control = true; */
904 cali_info->thermal_value = rf->eeprom_thermal;
905 cali_info->thermal_value_iqk = rf->eeprom_thermal;
906 cali_info->thermal_value_lck = rf->eeprom_thermal;
907
908 if (!cali_info->default_bb_swing_index_flag) {
909 if (dm->support_ic_type == ODM_RTL8195B) {
910 default_swing_index = get_swing_index(dm);
911 cali_info->default_ofdm_index = (default_swing_index >= TXSCALE_TABLE_SIZE) ? 24 : default_swing_index;
912 cali_info->default_cck_index = 24;
913 } else if (dm->support_ic_type == ODM_RTL8721D) {
914 cali_info->default_ofdm_index = 28; /*OFDM: -1dB*/
915 cali_info->default_cck_index = 28; /*CCK: -6dB*/
916 } else if (dm->support_ic_type == ODM_RTL8710C) {
917 cali_info->default_ofdm_index = get_swing_index(dm);
918 cali_info->default_cck_index = get_cck_swing_index(dm);
919 }
920 cali_info->default_bb_swing_index_flag = true;
921 }
922
923 cali_info->bb_swing_idx_cck_base = cali_info->default_cck_index;
924 cali_info->CCK_index = cali_info->default_cck_index;
925
926 for (p = RF_PATH_A; p < MAX_RF_PATH; ++p) {
927 cali_info->bb_swing_idx_ofdm_base[p] = cali_info->default_ofdm_index;
928 cali_info->OFDM_index[p] = cali_info->default_ofdm_index;
929 cali_info->delta_power_index[p] = 0;
930 cali_info->delta_power_index_last[p] = 0;
931 cali_info->power_index_offset[p] = 0;
932 }
933 cali_info->modify_tx_agc_value_ofdm = 0;
934 cali_info->modify_tx_agc_value_cck = 0;
935 cali_info->tm_trigger = 0;
936 }
937
938 void
odm_txpowertracking_check(void * dm_void)939 odm_txpowertracking_check(
940 void *dm_void
941 )
942 {
943 struct dm_struct *dm = (struct dm_struct *)dm_void;
944
945 odm_txpowertracking_check_iot(dm);
946 }
947
948 void
odm_txpowertracking_check_iot(void * dm_void)949 odm_txpowertracking_check_iot(
950 void *dm_void
951 )
952 {
953 struct dm_struct *dm = (struct dm_struct *)dm_void;
954 struct _hal_rf_ *rf = &dm->rf_table;
955
956 if (!(rf->rf_supportability & HAL_RF_TX_PWR_TRACK))
957 return;
958
959 if (!dm->rf_calibrate_info.tm_trigger) {
960 if (dm->support_ic_type == ODM_RTL8195B)
961 odm_set_rf_reg(dm, RF_PATH_A, RF_T_METER_NEW, (BIT(17) | BIT(16)), 0x03);
962 else if (dm->support_ic_type == ODM_RTL8721D ||
963 dm->support_ic_type == ODM_RTL8710C)
964 odm_set_rf_reg(dm, RF_PATH_A, RF_T_METER_NEW,
965 (BIT(12) | BIT(11)), 0x03);
966
967 dm->rf_calibrate_info.tm_trigger = 1;
968 return;
969 }
970 odm_txpowertracking_callback_thermal_meter(dm);
971 dm->rf_calibrate_info.tm_trigger = 0;
972 }
973
974 void
odm_txpowertracking_check_mp(void * dm_void)975 odm_txpowertracking_check_mp(
976 void *dm_void
977 )
978 {
979 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
980 struct dm_struct *dm = (struct dm_struct *)dm_void;
981 void *adapter = dm->adapter;
982
983 if (odm_check_power_status(adapter) == false) {
984 RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD, ("check_pow_status, return false\n"));
985 return;
986 }
987
988 odm_txpowertracking_thermal_meter_check(adapter);
989 #endif
990 }
991
992 void
odm_txpowertracking_check_ap(void * dm_void)993 odm_txpowertracking_check_ap(
994 void *dm_void
995 )
996 {
997 #if (DM_ODM_SUPPORT_TYPE == ODM_AP)
998 struct dm_struct *dm = (struct dm_struct *)dm_void;
999 struct rtl8192cd_priv *priv = dm->priv;
1000
1001 return;
1002
1003 #endif
1004 }
1005