xref: /freebsd/sys/dev/rtwn/rtl8192c/r92c_priv.h (revision 193d9e768ba63fcfb187cfd17f461f7d41345048)
1 /*-
2  * Copyright (c) 2010 Damien Bergamini <damien.bergamini@free.fr>
3  * Copyright (c) 2016 Andriy Voskoboinyk <avos@FreeBSD.org>
4  *
5  * Permission to use, copy, modify, and distribute this software for any
6  * purpose with or without fee is hereby granted, provided that the above
7  * copyright notice and this permission notice appear in all copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16  *
17  * $OpenBSD: if_urtwnreg.h,v 1.3 2010/11/16 18:02:59 damien Exp $
18  * $FreeBSD$
19  */
20 
21 #ifndef R92C_PRIV_H
22 #define R92C_PRIV_H
23 
24 #include <dev/rtwn/rtl8192c/r92c_rom_defs.h>
25 
26 /*
27  * Parsed Tx power (diff) values.
28  */
29 struct rtwn_r92c_txpwr {
30 	uint8_t		cck_tx_pwr[R92C_MAX_CHAINS][R92C_GROUP_2G];
31 	uint8_t		ht40_1s_tx_pwr[R92C_MAX_CHAINS][R92C_GROUP_2G];
32 	int8_t		ht40_2s_tx_pwr_diff[R92C_MAX_CHAINS][R92C_GROUP_2G];
33 	int8_t		ht20_tx_pwr_diff[R92C_MAX_CHAINS][R92C_GROUP_2G];
34 	int8_t		ofdm_tx_pwr_diff[R92C_MAX_CHAINS][R92C_GROUP_2G];
35 	int8_t		ht40_max_pwr[R92C_MAX_CHAINS][R92C_GROUP_2G];
36 	int8_t		ht20_max_pwr[R92C_MAX_CHAINS][R92C_GROUP_2G];
37 };
38 
39 
40 /*
41  * Baseband initialization values (shared parts).
42  */
43 #define R92C_COND_RTL8188CE	0x01
44 #define R92C_COND_RTL8188CU	0x02
45 #define R92C_COND_RTL8188RU	0x04
46 #define R92C_COND_RTL8192CE	0x08
47 #define R92C_COND_RTL8192CU	0x10
48 
49 /* Shortcut. */
50 #define R92C_COND_RTL8192C	(R92C_COND_RTL8192CE | R92C_COND_RTL8192CU)
51 
52 static const uint16_t rtl8192c_bb_regs3[] = {
53 	0xd04
54 }, rtl8192c_bb_regs4[] = {
55 	0xd08, 0xd0c, 0xd10, 0xd14, 0xd18, 0xd2c, 0xd30, 0xd34, 0xd38,
56 	0xd3c, 0xd40, 0xd44, 0xd48, 0xd4c, 0xd50, 0xd54, 0xd58, 0xd5c,
57 	0xd60, 0xd64, 0xd68, 0xd6c, 0xd70, 0xd74, 0xd78, 0xe00, 0xe04,
58 	0xe08, 0xe10, 0xe14, 0xe18, 0xe1c, 0xe28, 0xe30, 0xe34, 0xe38,
59 	0xe3c, 0xe40, 0xe44, 0xe48, 0xe4c, 0xe50, 0xe54, 0xe58, 0xe5c
60 }, rtl8192c_bb_regs5[] = {
61 	0xe60, 0xe68, 0xe6c, 0xe70, 0xe74, 0xe78, 0xe7c, 0xe80, 0xe84,
62 	0xe88, 0xe8c, 0xed0, 0xed4, 0xed8, 0xedc, 0xee0, 0xeec, 0xf14,
63 	0xf4c, 0xf00
64 };
65 
66 static const uint32_t rtl8192c_bb_vals3_88cu_88ru[] = {
67 	0x00020401
68 }, rtl8192c_bb_vals3_92ce_92cu[] = {
69 	0x00020403
70 }, rtl8192c_bb_vals4[] = {
71 	0x0000907f, 0x20010201, 0xa0633333, 0x3333bc43, 0x7a8f5b6b,
72 	0xcc979975, 0x00000000, 0x80608000, 0x00000000, 0x00027293,
73 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6437140a,
74 	0x00000000, 0x00000000, 0x30032064, 0x4653de68, 0x04518a3c,
75 	0x00002101, 0x2a201c16, 0x1812362e, 0x322c2220, 0x000e3c24,
76 	0x2a2a2a2a, 0x2a2a2a2a, 0x03902a2a, 0x2a2a2a2a, 0x2a2a2a2a,
77 	0x2a2a2a2a, 0x2a2a2a2a, 0x00000000, 0x1000dc1f, 0x10008c1f,
78 	0x02140102, 0x681604c2, 0x01007c00, 0x01004800, 0xfb000000,
79 	0x000028d1, 0x1000dc1f, 0x10008c1f, 0x02140102, 0x28160d05
80 },rtl8192c_bb_vals5_92ce_92cu[] = {
81 	0x00000010, 0x001b25a4, 0x63db25a4, 0x63db25a4, 0x0c1b25a4,
82 	0x0c1b25a4, 0x0c1b25a4, 0x0c1b25a4, 0x63db25a4, 0x0c1b25a4,
83 	0x63db25a4, 0x63db25a4, 0x63db25a4, 0x63db25a4, 0x001b25a4,
84 	0x001b25a4, 0x6fdb25a4, 0x00000003, 0x00000000, 0x00000300
85 };
86 
87 /*
88  * RTL8192CU and RTL8192CE-VAU.
89  */
90 
91 static const uint32_t rtl8192ce_agc_vals[] = {
92 	0x7b000001, 0x7b010001, 0x7b020001, 0x7b030001, 0x7b040001,
93 	0x7b050001, 0x7a060001, 0x79070001, 0x78080001, 0x77090001,
94 	0x760a0001, 0x750b0001, 0x740c0001, 0x730d0001, 0x720e0001,
95 	0x710f0001, 0x70100001, 0x6f110001, 0x6e120001, 0x6d130001,
96 	0x6c140001, 0x6b150001, 0x6a160001, 0x69170001, 0x68180001,
97 	0x67190001, 0x661a0001, 0x651b0001, 0x641c0001, 0x631d0001,
98 	0x621e0001, 0x611f0001, 0x60200001, 0x49210001, 0x48220001,
99 	0x47230001, 0x46240001, 0x45250001, 0x44260001, 0x43270001,
100 	0x42280001, 0x41290001, 0x402a0001, 0x262b0001, 0x252c0001,
101 	0x242d0001, 0x232e0001, 0x222f0001, 0x21300001, 0x20310001,
102 	0x06320001, 0x05330001, 0x04340001, 0x03350001, 0x02360001,
103 	0x01370001, 0x00380001, 0x00390001, 0x003a0001, 0x003b0001,
104 	0x003c0001, 0x003d0001, 0x003e0001, 0x003f0001, 0x7b400001,
105 	0x7b410001, 0x7b420001, 0x7b430001, 0x7b440001, 0x7b450001,
106 	0x7a460001, 0x79470001, 0x78480001, 0x77490001, 0x764a0001,
107 	0x754b0001, 0x744c0001, 0x734d0001, 0x724e0001, 0x714f0001,
108 	0x70500001, 0x6f510001, 0x6e520001, 0x6d530001, 0x6c540001,
109 	0x6b550001, 0x6a560001, 0x69570001, 0x68580001, 0x67590001,
110 	0x665a0001, 0x655b0001, 0x645c0001, 0x635d0001, 0x625e0001,
111 	0x615f0001, 0x60600001, 0x49610001, 0x48620001, 0x47630001,
112 	0x46640001, 0x45650001, 0x44660001, 0x43670001, 0x42680001,
113 	0x41690001, 0x406a0001, 0x266b0001, 0x256c0001, 0x246d0001,
114 	0x236e0001, 0x226f0001, 0x21700001, 0x20710001, 0x06720001,
115 	0x05730001, 0x04740001, 0x03750001, 0x02760001, 0x01770001,
116 	0x00780001, 0x00790001, 0x007a0001, 0x007b0001, 0x007c0001,
117 	0x007d0001, 0x007e0001, 0x007f0001, 0x3800001e, 0x3801001e,
118 	0x3802001e, 0x3803001e, 0x3804001e, 0x3805001e, 0x3806001e,
119 	0x3807001e, 0x3808001e, 0x3c09001e, 0x3e0a001e, 0x400b001e,
120 	0x440c001e, 0x480d001e, 0x4c0e001e, 0x500f001e, 0x5210001e,
121 	0x5611001e, 0x5a12001e, 0x5e13001e, 0x6014001e, 0x6015001e,
122 	0x6016001e, 0x6217001e, 0x6218001e, 0x6219001e, 0x621a001e,
123 	0x621b001e, 0x621c001e, 0x621d001e, 0x621e001e, 0x621f001e
124 };
125 
126 static const struct rtwn_agc_prog rtl8192ce_agc[] = {
127 	{
128 		nitems(rtl8192ce_agc_vals),
129 		rtl8192ce_agc_vals,
130 		{ 0 },
131 		NULL
132 	}
133 };
134 
135 
136 /*
137  * RF initialization values.
138  */
139 static const uint8_t rtl8192c_rf0_regs0[] = {
140 	0x00, 0x01, 0x02, 0x03, 0x04, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e,
141 	0x0f, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21
142 }, rtl8192c_rf0_regs1[] = {
143 	0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28
144 }, rtl8192c_rf0_regs2[] = {
145 	0x29, 0x2a, 0x2b, 0x2a, 0x2b, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b,
146 	0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a,
147 	0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c,
148 	0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b,
149 	0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b,
150 	0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x10, 0x11, 0x10, 0x11,
151 	0x10, 0x11, 0x10, 0x11, 0x10, 0x11, 0x10, 0x11, 0x10, 0x11
152 }, rtl8192c_rf0_regs3[] = {
153 	0x12, 0x12, 0x12, 0x12, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
154 	0x13, 0x13, 0x13, 0x13
155 }, rtl8192c_rf0_regs4[] = {
156 	0x14, 0x14, 0x14, 0x14, 0x15, 0x15, 0x15, 0x15
157 }, rtl8192c_rf0_regs5[] = {
158 	0x16, 0x16, 0x16, 0x16, 0x00, 0x18, 0xfe, 0xfe, 0x1f, 0xfe, 0xfe,
159 	0x1e, 0x1f, 0x00
160 };
161 
162 static const uint32_t rtl8192c_rf0_vals0_88ce_88cu_92ce[] = {
163 	0x30159, 0x31284, 0x98000, 0x18c63, 0x210e7, 0x2044f, 0x1adb1,
164 	0x54867, 0x8992e, 0x0e52c, 0x39ce7, 0x00451, 0x00000, 0x10255,
165 	0x60a00, 0xfc378, 0xa1250, 0x4445f, 0x80001, 0x0b614, 0x6c000
166 }, rtl8192c_rf0_vals0_88ru[] = {
167 	0x30159, 0x31284, 0x98000, 0x18c63, 0x210e7, 0x2044f, 0x1adb0,
168 	0x54867, 0x8992e, 0x0e529, 0x39ce7, 0x00451, 0x00000, 0x00255,
169 	0x60a00, 0xfc378, 0xa1250, 0x4445f, 0x80001, 0x0b614, 0x6c000
170 }, rtl8192c_rf0_vals1_88ru[] = {
171 	0x0083c, 0x01558, 0x00060, 0x00483, 0x4f000, 0xec7d9, 0x977c0
172 }, rtl8192c_rf0_vals1_88ce[] = {
173 	0x00000, 0x01558, 0x00060, 0x00483, 0x4f200, 0xec7d9, 0x577c0
174 }, rtl8192c_rf0_vals1_88cu_92ce[] = {
175 	0x00000, 0x01558, 0x00060, 0x00483, 0x4f000, 0xec7d9, 0x577c0
176 }, rtl8192c_rf0_vals2[] = {
177 	0x04783, 0x00001, 0x21334, 0x00000, 0x00054, 0x00001, 0x00808,
178 	0x53333, 0x0000c, 0x00002, 0x00808, 0x5b333, 0x0000d, 0x00003,
179 	0x00808, 0x63333, 0x0000d, 0x00004, 0x00808, 0x6b333, 0x0000d,
180 	0x00005, 0x00808, 0x73333, 0x0000d, 0x00006, 0x00709, 0x5b333,
181 	0x0000d, 0x00007, 0x00709, 0x63333, 0x0000d, 0x00008, 0x0060a,
182 	0x4b333, 0x0000d, 0x00009, 0x0060a, 0x53333, 0x0000d, 0x0000a,
183 	0x0060a, 0x5b333, 0x0000d, 0x0000b, 0x0060a, 0x63333, 0x0000d,
184 	0x0000c, 0x0060a, 0x6b333, 0x0000d, 0x0000d, 0x0060a, 0x73333,
185 	0x0000d, 0x0000e, 0x0050b, 0x66666, 0x0001a, 0xe0000, 0x4000f,
186 	0xe31fc, 0x6000f, 0xff9f8, 0x2000f, 0x203f9, 0x3000f, 0xff500,
187 	0x00000, 0x00000, 0x8000f, 0x3f100, 0x9000f, 0x23100
188 }, rtl8192c_rf0_vals3_88ru[] = {
189 	0xd8000, 0x90000, 0x51000, 0x12000, 0x28fb4, 0x24fa8, 0x207a4,
190 	0x1c798, 0x183a4, 0x14398, 0x101a4, 0x0c198, 0x080a4, 0x04098,
191 	0x00014
192 }, rtl8192c_rf0_vals3_92ce[] = {
193 	0x32000, 0x71000, 0xb0000, 0xfc000, 0x287af, 0x244b7, 0x204ab,
194 	0x1c49f, 0x18493, 0x14297, 0x10295, 0x0c298, 0x0819c, 0x040a8,
195 	0x0001c
196 }, rtl8192c_rf0_vals3_88cu_88ce[] = {
197 	0x32000, 0x71000, 0xb0000, 0xfc000, 0x287b3, 0x244b7, 0x204ab,
198 	0x1c49f, 0x18493, 0x1429b, 0x10299, 0x0c29c, 0x081a0, 0x040ac,
199 	0x00020
200 }, rtl8192c_rf0_vals4_92ce_88ce[] = {
201 	0x1944c, 0x59444, 0x9944c, 0xd9444, 0x0f424, 0x4f424, 0x8f424,
202 	0xcf424
203 }, rtl8192c_rf0_vals4_88cu_88ru[] = {
204 	0x1944c, 0x59444, 0x9944c, 0xd9444, 0x0f405, 0x4f405, 0x8f405,
205 	0xcf405
206 }, rtl8192c_rf0_vals5[] = {
207 	0xe0330, 0xa0330, 0x60330, 0x20330, 0x10159, 0x0f401, 0x0c350,
208 	0x0c350, 0x80003, 0x0c350, 0x0c350, 0x44457, 0x80000, 0x30159
209 };
210 
211 static const struct rtwn_rf_prog rtl8192c_rf[] = {
212 	/* RF chain 0 */
213 	/* RTL8188RU. */
214 	{
215 		nitems(rtl8192c_rf0_regs0),
216 		rtl8192c_rf0_regs0,
217 		rtl8192c_rf0_vals0_88ru,
218 		{ R92C_COND_RTL8188RU },
219 		/* Others. */
220 		&(const struct rtwn_rf_prog){
221 			nitems(rtl8192c_rf0_regs0),
222 			rtl8192c_rf0_regs0,
223 			rtl8192c_rf0_vals0_88ce_88cu_92ce,
224 			{ 0 },
225 			NULL
226 		}
227 	},
228 	/* RTL8188RU. */
229 	{
230 		nitems(rtl8192c_rf0_regs1),
231 		rtl8192c_rf0_regs1,
232 		rtl8192c_rf0_vals1_88ru,
233 		{ R92C_COND_RTL8188RU },
234 		/* RTL8188CE. */
235 		&(const struct rtwn_rf_prog){
236 			nitems(rtl8192c_rf0_regs1),
237 			rtl8192c_rf0_regs1,
238 			rtl8192c_rf0_vals1_88ce,
239 			{ R92C_COND_RTL8188CE },
240 			/* Others. */
241 			&(const struct rtwn_rf_prog){
242 				nitems(rtl8192c_rf0_regs1),
243 				rtl8192c_rf0_regs1,
244 				rtl8192c_rf0_vals1_88cu_92ce,
245 				{ 0 },
246 				NULL
247 			}
248 		}
249 	},
250 	{
251 		nitems(rtl8192c_rf0_regs2),
252 		rtl8192c_rf0_regs2,
253 		rtl8192c_rf0_vals2,
254 		{ 0 },
255 		NULL
256 	},
257 	/* RTL8188RU. */
258 	{
259 		nitems(rtl8192c_rf0_regs3),
260 		rtl8192c_rf0_regs3,
261 		rtl8192c_rf0_vals3_88ru,
262 		{ R92C_COND_RTL8188RU },
263 		/* RTL8192C. */
264 		&(const struct rtwn_rf_prog){
265 			nitems(rtl8192c_rf0_regs3),
266 			rtl8192c_rf0_regs3,
267 			rtl8192c_rf0_vals3_92ce,
268 			{ R92C_COND_RTL8192C },
269 			/* Others. */
270 			&(struct rtwn_rf_prog){
271 				nitems(rtl8192c_rf0_regs3),
272 				rtl8192c_rf0_regs3,
273 				rtl8192c_rf0_vals3_88cu_88ce,
274 				{ 0 },
275 				NULL
276 			}
277 		}
278 	},
279 	/* RTL8188CE / RTL8192C. */
280 	{
281 		nitems(rtl8192c_rf0_regs4),
282 		rtl8192c_rf0_regs4,
283 		rtl8192c_rf0_vals4_92ce_88ce,
284 		{ R92C_COND_RTL8188CE | R92C_COND_RTL8192C },
285 		/* Others. */
286 		&(const struct rtwn_rf_prog){
287 			nitems(rtl8192c_rf0_regs4),
288 			rtl8192c_rf0_regs4,
289 			rtl8192c_rf0_vals4_88cu_88ru,
290 			{ 0 },
291 			NULL
292 		}
293 	},
294 	{
295 		nitems(rtl8192c_rf0_regs5),
296 		rtl8192c_rf0_regs5,
297 		rtl8192c_rf0_vals5,
298 		{ 0 },
299 		NULL
300 	},
301 	{ 0, NULL, NULL, { 0 }, NULL },
302 	/* RF chain 1 (RTL8192C). */
303 	{
304 		12,				/* 0x00 - 0x0f */
305 		rtl8192c_rf0_regs0,
306 		rtl8192c_rf0_vals0_88ce_88cu_92ce,
307 		{ 0 },
308 		NULL
309 	},
310 	{
311 		nitems(rtl8192c_rf0_regs3),	/* 0x12 - 0x13 */
312 		rtl8192c_rf0_regs3,
313 		rtl8192c_rf0_vals3_92ce,
314 		{ 0 },
315 		NULL
316 	},
317 	{
318 		nitems(rtl8192c_rf0_regs4),	/* 0x14 - 0x15 */
319 		rtl8192c_rf0_regs4,
320 		rtl8192c_rf0_vals4_92ce_88ce,
321 		{ 0 },
322 		NULL
323 	},
324 	{
325 		4,				/* 0x16 */
326 		rtl8192c_rf0_regs5,
327 		rtl8192c_rf0_vals5,
328 		{ 0 },
329 		NULL
330 	},
331 	{ 0, NULL, NULL, { 0 }, NULL }
332 };
333 
334 
335 struct rtwn_r92c_txagc {
336 	uint8_t	pwr[R92C_GROUP_2G][28];	/* RTWN_RIDX_MCS(15) + 1 */
337 };
338 
339 /*
340  * Per RF chain/group/rate Tx gain values.
341  */
342 static const struct rtwn_r92c_txagc rtl8192cu_txagc[] = {
343 	{ {	/* Chain 0. */
344 	{	/* Group 0. */
345 	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
346 	0x0c, 0x0c, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02,	/* OFDM6~54. */
347 	0x0e, 0x0d, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02,	/* MCS0~7. */
348 	0x0e, 0x0d, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02	/* MCS8~15. */
349 	},
350 	{	/* Group 1. */
351 	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
352 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* OFDM6~54. */
353 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
354 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00	/* MCS8~15. */
355 	},
356 	{	/* Group 2. */
357 	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
358 	0x04, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x00,	/* OFDM6~54. */
359 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
360 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00	/* MCS8~15. */
361 	}
362 	} },
363 	{ {	/* Chain 1. */
364 	{	/* Group 0. */
365 	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
366 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* OFDM6~54. */
367 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
368 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00	/* MCS8~15. */
369 	},
370 	{	/* Group 1. */
371 	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
372 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* OFDM6~54. */
373 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
374 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00	/* MCS8~15. */
375 	},
376 	{	/* Group 2. */
377 	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
378 	0x04, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x00,	/* OFDM6~54. */
379 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
380 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00	/* MCS8~15. */
381 	}
382 	} }
383 };
384 
385 static const struct rtwn_r92c_txagc rtl8188ru_txagc[] = {
386 	{ {	/* Chain 0. */
387 	{	/* Group 0. */
388 	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
389 	0x08, 0x08, 0x08, 0x06, 0x06, 0x04, 0x04, 0x00,	/* OFDM6~54. */
390 	0x08, 0x06, 0x06, 0x04, 0x04, 0x02, 0x02, 0x00,	/* MCS0~7. */
391 	0x08, 0x06, 0x06, 0x04, 0x04, 0x02, 0x02, 0x00	/* MCS8~15. */
392 	},
393 	{	/* Group 1. */
394 	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
395 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* OFDM6~54. */
396 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
397 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00	/* MCS8~15. */
398 	},
399 	{	/* Group 2. */
400 	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
401 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* OFDM6~54. */
402 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
403 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00	/* MCS8~15. */
404 	}
405 	} }
406 };
407 
408 #endif	/* R92C_PRIV_H */
409