1/*	$NetBSD: if_urtwn_data.h,v 1.1 2012/03/25 00:11:16 nonaka Exp $	*/
2/*	$OpenBSD: if_urtwnreg.h,v 1.3 2010/11/16 18:02:59 damien Exp $	*/
3
4/*-
5 * Copyright (c) 2010 Damien Bergamini <damien.bergamini@free.fr>
6 *
7 * Permission to use, copy, modify, and distribute this software for any
8 * purpose with or without fee is hereby granted, provided that the above
9 * copyright notice and this permission notice appear in all copies.
10 *
11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 */
19
20/*
21 * MAC initialization values.
22 */
23static const struct {
24	uint16_t	reg;
25	uint8_t		val;
26} rtl8192cu_mac[] = {
27	{ 0x420, 0x80 }, { 0x423, 0x00 }, { 0x430, 0x00 }, { 0x431, 0x00 },
28	{ 0x432, 0x00 }, { 0x433, 0x01 }, { 0x434, 0x04 }, { 0x435, 0x05 },
29	{ 0x436, 0x06 }, { 0x437, 0x07 }, { 0x438, 0x00 }, { 0x439, 0x00 },
30	{ 0x43a, 0x00 }, { 0x43b, 0x01 }, { 0x43c, 0x04 }, { 0x43d, 0x05 },
31	{ 0x43e, 0x06 }, { 0x43f, 0x07 }, { 0x440, 0x5d }, { 0x441, 0x01 },
32	{ 0x442, 0x00 }, { 0x444, 0x15 }, { 0x445, 0xf0 }, { 0x446, 0x0f },
33	{ 0x447, 0x00 }, { 0x458, 0x41 }, { 0x459, 0xa8 }, { 0x45a, 0x72 },
34	{ 0x45b, 0xb9 }, { 0x460, 0x66 }, { 0x461, 0x66 }, { 0x462, 0x08 },
35	{ 0x463, 0x03 }, { 0x4c8, 0xff }, { 0x4c9, 0x08 }, { 0x4cc, 0xff },
36	{ 0x4cd, 0xff }, { 0x4ce, 0x01 }, { 0x500, 0x26 }, { 0x501, 0xa2 },
37	{ 0x502, 0x2f }, { 0x503, 0x00 }, { 0x504, 0x28 }, { 0x505, 0xa3 },
38	{ 0x506, 0x5e }, { 0x507, 0x00 }, { 0x508, 0x2b }, { 0x509, 0xa4 },
39	{ 0x50a, 0x5e }, { 0x50b, 0x00 }, { 0x50c, 0x4f }, { 0x50d, 0xa4 },
40	{ 0x50e, 0x00 }, { 0x50f, 0x00 }, { 0x512, 0x1c }, { 0x514, 0x0a },
41	{ 0x515, 0x10 }, { 0x516, 0x0a }, { 0x517, 0x10 }, { 0x51a, 0x16 },
42	{ 0x524, 0x0f }, { 0x525, 0x4f }, { 0x546, 0x40 }, { 0x547, 0x00 },
43	{ 0x550, 0x10 }, { 0x551, 0x10 }, { 0x559, 0x02 }, { 0x55a, 0x02 },
44	{ 0x55d, 0xff }, { 0x605, 0x30 }, { 0x608, 0x0e }, { 0x609, 0x2a },
45	{ 0x652, 0x20 }, { 0x63c, 0x0a }, { 0x63d, 0x0e }, { 0x63e, 0x0a },
46	{ 0x63f, 0x0e }, { 0x66e, 0x05 }, { 0x700, 0x21 }, { 0x701, 0x43 },
47	{ 0x702, 0x65 }, { 0x703, 0x87 }, { 0x708, 0x21 }, { 0x709, 0x43 },
48	{ 0x70a, 0x65 }, { 0x70b, 0x87 }
49};
50
51/*
52 * Baseband initialization values.
53 */
54struct urtwn_bb_prog {
55	int		count;
56	const uint16_t	*regs;
57	const uint32_t	*vals;
58	int		agccount;
59	const uint32_t	*agcvals;
60};
61
62/*
63 * RTL8192CU and RTL8192CE-VAU.
64 */
65static const uint16_t rtl8192ce_bb_regs[] = {
66	0x024, 0x028, 0x800, 0x804, 0x808, 0x80c, 0x810, 0x814, 0x818,
67	0x81c, 0x820, 0x824, 0x828, 0x82c, 0x830, 0x834, 0x838, 0x83c,
68	0x840, 0x844, 0x848, 0x84c, 0x850, 0x854, 0x858, 0x85c, 0x860,
69	0x864, 0x868, 0x86c, 0x870, 0x874, 0x878, 0x87c, 0x880, 0x884,
70	0x888, 0x88c, 0x890, 0x894, 0x898, 0x89c, 0x900, 0x904, 0x908,
71	0x90c, 0xa00, 0xa04, 0xa08, 0xa0c, 0xa10, 0xa14, 0xa18, 0xa1c,
72	0xa20, 0xa24, 0xa28, 0xa2c, 0xa70, 0xa74, 0xc00, 0xc04, 0xc08,
73	0xc0c, 0xc10, 0xc14, 0xc18, 0xc1c, 0xc20, 0xc24, 0xc28, 0xc2c,
74	0xc30, 0xc34, 0xc38, 0xc3c, 0xc40, 0xc44, 0xc48, 0xc4c, 0xc50,
75	0xc54, 0xc58, 0xc5c, 0xc60, 0xc64, 0xc68, 0xc6c, 0xc70, 0xc74,
76	0xc78, 0xc7c, 0xc80, 0xc84, 0xc88, 0xc8c, 0xc90, 0xc94, 0xc98,
77	0xc9c, 0xca0, 0xca4, 0xca8, 0xcac, 0xcb0, 0xcb4, 0xcb8, 0xcbc,
78	0xcc0, 0xcc4, 0xcc8, 0xccc, 0xcd0, 0xcd4, 0xcd8, 0xcdc, 0xce0,
79	0xce4, 0xce8, 0xcec, 0xd00, 0xd04, 0xd08, 0xd0c, 0xd10, 0xd14,
80	0xd18, 0xd2c, 0xd30, 0xd34, 0xd38, 0xd3c, 0xd40, 0xd44, 0xd48,
81	0xd4c, 0xd50, 0xd54, 0xd58, 0xd5c, 0xd60, 0xd64, 0xd68, 0xd6c,
82	0xd70, 0xd74, 0xd78, 0xe00, 0xe04, 0xe08, 0xe10, 0xe14, 0xe18,
83	0xe1c, 0xe28, 0xe30, 0xe34, 0xe38, 0xe3c, 0xe40, 0xe44, 0xe48,
84	0xe4c, 0xe50, 0xe54, 0xe58, 0xe5c, 0xe60, 0xe68, 0xe6c, 0xe70,
85	0xe74, 0xe78, 0xe7c, 0xe80, 0xe84, 0xe88, 0xe8c, 0xed0, 0xed4,
86	0xed8, 0xedc, 0xee0, 0xeec, 0xf14, 0xf4c, 0xf00
87};
88
89static const uint32_t rtl8192ce_bb_vals[] = {
90	0x0011800d, 0x00ffdb83, 0x80040002, 0x00000003, 0x0000fc00,
91	0x0000000a, 0x10005388, 0x020c3d10, 0x02200385, 0x00000000,
92	0x01000100, 0x00390004, 0x01000100, 0x00390004, 0x27272727,
93	0x27272727, 0x27272727, 0x27272727, 0x00010000, 0x00010000,
94	0x27272727, 0x27272727, 0x00000000, 0x00000000, 0x569a569a,
95	0x0c1b25a4, 0x66e60230, 0x061f0130, 0x27272727, 0x2b2b2b27,
96	0x07000700, 0x22184000, 0x08080808, 0x00000000, 0xc0083070,
97	0x000004d5, 0x00000000, 0xcc0000c0, 0x00000800, 0xfffffffe,
98	0x40302010, 0x00706050, 0x00000000, 0x00000023, 0x00000000,
99	0x81121313, 0x00d047c8, 0x80ff000c, 0x8c838300, 0x2e68120f,
100	0x9500bb78, 0x11144028, 0x00881117, 0x89140f00, 0x1a1b0000,
101	0x090e1317, 0x00000204, 0x00d30000, 0x101fbf00, 0x00000007,
102	0x48071d40, 0x03a05633, 0x000000e4, 0x6c6c6c6c, 0x08800000,
103	0x40000100, 0x08800000, 0x40000100, 0x00000000, 0x00000000,
104	0x00000000, 0x00000000, 0x69e9ac44, 0x469652cf, 0x49795994,
105	0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107, 0x007f037f,
106	0x6954341e, 0x43bc0094, 0x6954341e, 0x433c0094, 0x00000000,
107	0x5116848b, 0x47c00bff, 0x00000036, 0x2c7f000d, 0x018610db,
108	0x0000001f, 0x00b91612, 0x40000100, 0x20f60000, 0x40000100,
109	0x20200000, 0x00121820, 0x00000000, 0x00121820, 0x00007f7f,
110	0x00000000, 0x00000080, 0x00000000, 0x00000000, 0x00000000,
111	0x00000000, 0x00000000, 0x28000000, 0x00000000, 0x00000000,
112	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x64b22427,
113	0x00766932, 0x00222222, 0x00000000, 0x37644302, 0x2f97d40c,
114	0x00080740, 0x00020403, 0x0000907f, 0x20010201, 0xa0633333,
115	0x3333bc43, 0x7a8f5b6b, 0xcc979975, 0x00000000, 0x80608000,
116	0x00000000, 0x00027293, 0x00000000, 0x00000000, 0x00000000,
117	0x00000000, 0x6437140a, 0x00000000, 0x00000000, 0x30032064,
118	0x4653de68, 0x04518a3c, 0x00002101, 0x2a201c16, 0x1812362e,
119	0x322c2220, 0x000e3c24, 0x2a2a2a2a, 0x2a2a2a2a, 0x03902a2a,
120	0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x00000000,
121	0x1000dc1f, 0x10008c1f, 0x02140102, 0x681604c2, 0x01007c00,
122	0x01004800, 0xfb000000, 0x000028d1, 0x1000dc1f, 0x10008c1f,
123	0x02140102, 0x28160d05, 0x00000010, 0x001b25a4, 0x63db25a4,
124	0x63db25a4, 0x0c1b25a4, 0x0c1b25a4, 0x0c1b25a4, 0x0c1b25a4,
125	0x63db25a4, 0x0c1b25a4, 0x63db25a4, 0x63db25a4, 0x63db25a4,
126	0x63db25a4, 0x001b25a4, 0x001b25a4, 0x6fdb25a4, 0x00000003,
127	0x00000000, 0x00000300
128};
129
130static const uint32_t rtl8192ce_agc_vals[] = {
131	0x7b000001, 0x7b010001, 0x7b020001, 0x7b030001, 0x7b040001,
132	0x7b050001, 0x7a060001, 0x79070001, 0x78080001, 0x77090001,
133	0x760a0001, 0x750b0001, 0x740c0001, 0x730d0001, 0x720e0001,
134	0x710f0001, 0x70100001, 0x6f110001, 0x6e120001, 0x6d130001,
135	0x6c140001, 0x6b150001, 0x6a160001, 0x69170001, 0x68180001,
136	0x67190001, 0x661a0001, 0x651b0001, 0x641c0001, 0x631d0001,
137	0x621e0001, 0x611f0001, 0x60200001, 0x49210001, 0x48220001,
138	0x47230001, 0x46240001, 0x45250001, 0x44260001, 0x43270001,
139	0x42280001, 0x41290001, 0x402a0001, 0x262b0001, 0x252c0001,
140	0x242d0001, 0x232e0001, 0x222f0001, 0x21300001, 0x20310001,
141	0x06320001, 0x05330001, 0x04340001, 0x03350001, 0x02360001,
142	0x01370001, 0x00380001, 0x00390001, 0x003a0001, 0x003b0001,
143	0x003c0001, 0x003d0001, 0x003e0001, 0x003f0001, 0x7b400001,
144	0x7b410001, 0x7b420001, 0x7b430001, 0x7b440001, 0x7b450001,
145	0x7a460001, 0x79470001, 0x78480001, 0x77490001, 0x764a0001,
146	0x754b0001, 0x744c0001, 0x734d0001, 0x724e0001, 0x714f0001,
147	0x70500001, 0x6f510001, 0x6e520001, 0x6d530001, 0x6c540001,
148	0x6b550001, 0x6a560001, 0x69570001, 0x68580001, 0x67590001,
149	0x665a0001, 0x655b0001, 0x645c0001, 0x635d0001, 0x625e0001,
150	0x615f0001, 0x60600001, 0x49610001, 0x48620001, 0x47630001,
151	0x46640001, 0x45650001, 0x44660001, 0x43670001, 0x42680001,
152	0x41690001, 0x406a0001, 0x266b0001, 0x256c0001, 0x246d0001,
153	0x236e0001, 0x226f0001, 0x21700001, 0x20710001, 0x06720001,
154	0x05730001, 0x04740001, 0x03750001, 0x02760001, 0x01770001,
155	0x00780001, 0x00790001, 0x007a0001, 0x007b0001, 0x007c0001,
156	0x007d0001, 0x007e0001, 0x007f0001, 0x3800001e, 0x3801001e,
157	0x3802001e, 0x3803001e, 0x3804001e, 0x3805001e, 0x3806001e,
158	0x3807001e, 0x3808001e, 0x3c09001e, 0x3e0a001e, 0x400b001e,
159	0x440c001e, 0x480d001e, 0x4c0e001e, 0x500f001e, 0x5210001e,
160	0x5611001e, 0x5a12001e, 0x5e13001e, 0x6014001e, 0x6015001e,
161	0x6016001e, 0x6217001e, 0x6218001e, 0x6219001e, 0x621a001e,
162	0x621b001e, 0x621c001e, 0x621d001e, 0x621e001e, 0x621f001e
163};
164
165static const struct urtwn_bb_prog rtl8192ce_bb_prog = {
166	__arraycount(rtl8192ce_bb_regs),
167	rtl8192ce_bb_regs,
168	rtl8192ce_bb_vals,
169	__arraycount(rtl8192ce_agc_vals),
170	rtl8192ce_agc_vals
171};
172
173/*
174 * RTL8188CU.
175 */
176static const uint32_t rtl8192cu_bb_vals[] = {
177	0x0011800d, 0x00ffdb83, 0x80040002, 0x00000003, 0x0000fc00,
178	0x0000000a, 0x10005388, 0x020c3d10, 0x02200385, 0x00000000,
179	0x01000100, 0x00390004, 0x01000100, 0x00390004, 0x27272727,
180	0x27272727, 0x27272727, 0x27272727, 0x00010000, 0x00010000,
181	0x27272727, 0x27272727, 0x00000000, 0x00000000, 0x569a569a,
182	0x0c1b25a4, 0x66e60230, 0x061f0130, 0x27272727, 0x2b2b2b27,
183	0x07000700, 0x22184000, 0x08080808, 0x00000000, 0xc0083070,
184	0x000004d5, 0x00000000, 0xcc0000c0, 0x00000800, 0xfffffffe,
185	0x40302010, 0x00706050, 0x00000000, 0x00000023, 0x00000000,
186	0x81121313, 0x00d047c8, 0x80ff000c, 0x8c838300, 0x2e68120f,
187	0x9500bb78, 0x11144028, 0x00881117, 0x89140f00, 0x1a1b0000,
188	0x090e1317, 0x00000204, 0x00d30000, 0x101fbf00, 0x00000007,
189	0x48071d40, 0x03a05633, 0x000000e4, 0x6c6c6c6c, 0x08800000,
190	0x40000100, 0x08800000, 0x40000100, 0x00000000, 0x00000000,
191	0x00000000, 0x00000000, 0x69e9ac44, 0x469652cf, 0x49795994,
192	0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107, 0x007f037f,
193	0x6954341e, 0x43bc0094, 0x6954341e, 0x433c0094, 0x00000000,
194	0x5116848b, 0x47c00bff, 0x00000036, 0x2c7f000d, 0x0186115b,
195	0x0000001f, 0x00b99612, 0x40000100, 0x20f60000, 0x40000100,
196	0x20200000, 0x00121820, 0x00000000, 0x00121820, 0x00007f7f,
197	0x00000000, 0x00000080, 0x00000000, 0x00000000, 0x00000000,
198	0x00000000, 0x00000000, 0x28000000, 0x00000000, 0x00000000,
199	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x64b22427,
200	0x00766932, 0x00222222, 0x00000000, 0x37644302, 0x2f97d40c,
201	0x00080740, 0x00020403, 0x0000907f, 0x20010201, 0xa0633333,
202	0x3333bc43, 0x7a8f5b6b, 0xcc979975, 0x00000000, 0x80608000,
203	0x00000000, 0x00027293, 0x00000000, 0x00000000, 0x00000000,
204	0x00000000, 0x6437140a, 0x00000000, 0x00000000, 0x30032064,
205	0x4653de68, 0x04518a3c, 0x00002101, 0x2a201c16, 0x1812362e,
206	0x322c2220, 0x000e3c24, 0x2a2a2a2a, 0x2a2a2a2a, 0x03902a2a,
207	0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x00000000,
208	0x1000dc1f, 0x10008c1f, 0x02140102, 0x681604c2, 0x01007c00,
209	0x01004800, 0xfb000000, 0x000028d1, 0x1000dc1f, 0x10008c1f,
210	0x02140102, 0x28160d05, 0x00000010, 0x001b25a4, 0x63db25a4,
211	0x63db25a4, 0x0c1b25a4, 0x0c1b25a4, 0x0c1b25a4, 0x0c1b25a4,
212	0x63db25a4, 0x0c1b25a4, 0x63db25a4, 0x63db25a4, 0x63db25a4,
213	0x63db25a4, 0x001b25a4, 0x001b25a4, 0x6fdb25a4, 0x00000003,
214	0x00000000, 0x00000300
215};
216
217static const struct urtwn_bb_prog rtl8192cu_bb_prog = {
218	__arraycount(rtl8192ce_bb_regs),
219	rtl8192ce_bb_regs,
220	rtl8192cu_bb_vals,
221	__arraycount(rtl8192ce_agc_vals),
222	rtl8192ce_agc_vals
223};
224
225/*
226 * RTL8188CE-VAU.
227 */
228static const uint32_t rtl8188ce_bb_vals[] = {
229	0x0011800d, 0x00ffdb83, 0x80040000, 0x00000001, 0x0000fc00,
230	0x0000000a, 0x10005388, 0x020c3d10, 0x02200385, 0x00000000,
231	0x01000100, 0x00390004, 0x00000000, 0x00000000, 0x00000000,
232	0x00000000, 0x00000000, 0x00000000, 0x00010000, 0x00000000,
233	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x569a569a,
234	0x001b25a4, 0x66e60230, 0x061f0130, 0x00000000, 0x32323200,
235	0x07000700, 0x22004000, 0x00000808, 0x00000000, 0xc0083070,
236	0x000004d5, 0x00000000, 0xccc000c0, 0x00000800, 0xfffffffe,
237	0x40302010, 0x00706050, 0x00000000, 0x00000023, 0x00000000,
238	0x81121111, 0x00d047c8, 0x80ff000c, 0x8c838300, 0x2e68120f,
239	0x9500bb78, 0x11144028, 0x00881117, 0x89140f00, 0x1a1b0000,
240	0x090e1317, 0x00000204, 0x00d30000, 0x101fbf00, 0x00000007,
241	0x48071d40, 0x03a05611, 0x000000e4, 0x6c6c6c6c, 0x08800000,
242	0x40000100, 0x08800000, 0x40000100, 0x00000000, 0x00000000,
243	0x00000000, 0x00000000, 0x69e9ac44, 0x469652cf, 0x49795994,
244	0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107, 0x007f037f,
245	0x6954341e, 0x43bc0094, 0x6954341e, 0x433c0094, 0x00000000,
246	0x5116848b, 0x47c00bff, 0x00000036, 0x2c7f000d, 0x018610db,
247	0x0000001f, 0x00b91612, 0x40000100, 0x20f60000, 0x40000100,
248	0x20200000, 0x00121820, 0x00000000, 0x00121820, 0x00007f7f,
249	0x00000000, 0x00000080, 0x00000000, 0x00000000, 0x00000000,
250	0x00000000, 0x00000000, 0x28000000, 0x00000000, 0x00000000,
251	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x64b22427,
252	0x00766932, 0x00222222, 0x00000000, 0x37644302, 0x2f97d40c,
253	0x00080740, 0x00020401, 0x0000907f, 0x20010201, 0xa0633333,
254	0x3333bc43, 0x7a8f5b6b, 0xcc979975, 0x00000000, 0x80608000,
255	0x00000000, 0x00027293, 0x00000000, 0x00000000, 0x00000000,
256	0x00000000, 0x6437140a, 0x00000000, 0x00000000, 0x30032064,
257	0x4653de68, 0x04518a3c, 0x00002101, 0x2a201c16, 0x1812362e,
258	0x322c2220, 0x000e3c24, 0x2a2a2a2a, 0x2a2a2a2a, 0x03902a2a,
259	0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x00000000,
260	0x1000dc1f, 0x10008c1f, 0x02140102, 0x681604c2, 0x01007c00,
261	0x01004800, 0xfb000000, 0x000028d1, 0x1000dc1f, 0x10008c1f,
262	0x02140102, 0x28160d05, 0x00000008, 0x001b25a4, 0x631b25a0,
263	0x631b25a0, 0x081b25a0, 0x081b25a0, 0x081b25a0, 0x081b25a0,
264	0x631b25a0, 0x081b25a0, 0x631b25a0, 0x631b25a0, 0x631b25a0,
265	0x631b25a0, 0x001b25a0, 0x001b25a0, 0x6b1b25a0, 0x00000003,
266	0x00000000, 0x00000300
267};
268
269static const uint32_t rtl8188ce_agc_vals[] = {
270	0x7b000001, 0x7b010001, 0x7b020001, 0x7b030001, 0x7b040001,
271	0x7b050001, 0x7a060001, 0x79070001, 0x78080001, 0x77090001,
272	0x760a0001, 0x750b0001, 0x740c0001, 0x730d0001, 0x720e0001,
273	0x710f0001, 0x70100001, 0x6f110001, 0x6e120001, 0x6d130001,
274	0x6c140001, 0x6b150001, 0x6a160001, 0x69170001, 0x68180001,
275	0x67190001, 0x661a0001, 0x651b0001, 0x641c0001, 0x631d0001,
276	0x621e0001, 0x611f0001, 0x60200001, 0x49210001, 0x48220001,
277	0x47230001, 0x46240001, 0x45250001, 0x44260001, 0x43270001,
278	0x42280001, 0x41290001, 0x402a0001, 0x262b0001, 0x252c0001,
279	0x242d0001, 0x232e0001, 0x222f0001, 0x21300001, 0x20310001,
280	0x06320001, 0x05330001, 0x04340001, 0x03350001, 0x02360001,
281	0x01370001, 0x00380001, 0x00390001, 0x003a0001, 0x003b0001,
282	0x003c0001, 0x003d0001, 0x003e0001, 0x003f0001, 0x7b400001,
283	0x7b410001, 0x7b420001, 0x7b430001, 0x7b440001, 0x7b450001,
284	0x7a460001, 0x79470001, 0x78480001, 0x77490001, 0x764a0001,
285	0x754b0001, 0x744c0001, 0x734d0001, 0x724e0001, 0x714f0001,
286	0x70500001, 0x6f510001, 0x6e520001, 0x6d530001, 0x6c540001,
287	0x6b550001, 0x6a560001, 0x69570001, 0x68580001, 0x67590001,
288	0x665a0001, 0x655b0001, 0x645c0001, 0x635d0001, 0x625e0001,
289	0x615f0001, 0x60600001, 0x49610001, 0x48620001, 0x47630001,
290	0x46640001, 0x45650001, 0x44660001, 0x43670001, 0x42680001,
291	0x41690001, 0x406a0001, 0x266b0001, 0x256c0001, 0x246d0001,
292	0x236e0001, 0x226f0001, 0x21700001, 0x20710001, 0x06720001,
293	0x05730001, 0x04740001, 0x03750001, 0x02760001, 0x01770001,
294	0x00780001, 0x00790001, 0x007a0001, 0x007b0001, 0x007c0001,
295	0x007d0001, 0x007e0001, 0x007f0001, 0x3800001e, 0x3801001e,
296	0x3802001e, 0x3803001e, 0x3804001e, 0x3805001e, 0x3806001e,
297	0x3807001e, 0x3808001e, 0x3c09001e, 0x3e0a001e, 0x400b001e,
298	0x440c001e, 0x480d001e, 0x4c0e001e, 0x500f001e, 0x5210001e,
299	0x5611001e, 0x5a12001e, 0x5e13001e, 0x6014001e, 0x6015001e,
300	0x6016001e, 0x6217001e, 0x6218001e, 0x6219001e, 0x621a001e,
301	0x621b001e, 0x621c001e, 0x621d001e, 0x621e001e, 0x621f001e
302};
303
304static const struct urtwn_bb_prog rtl8188ce_bb_prog = {
305	__arraycount(rtl8192ce_bb_regs),
306	rtl8192ce_bb_regs,
307	rtl8188ce_bb_vals,
308	__arraycount(rtl8188ce_agc_vals),
309	rtl8188ce_agc_vals
310};
311
312static const uint32_t rtl8188cu_bb_vals[] = {
313	0x0011800d, 0x00ffdb83, 0x80040000, 0x00000001, 0x0000fc00,
314	0x0000000a, 0x10005388, 0x020c3d10, 0x02200385, 0x00000000,
315	0x01000100, 0x00390004, 0x00000000, 0x00000000, 0x00000000,
316	0x00000000, 0x00000000, 0x00000000, 0x00010000, 0x00000000,
317	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x569a569a,
318	0x001b25a4, 0x66e60230, 0x061f0130, 0x00000000, 0x32323200,
319	0x07000700, 0x22004000, 0x00000808, 0x00000000, 0xc0083070,
320	0x000004d5, 0x00000000, 0xccc000c0, 0x00000800, 0xfffffffe,
321	0x40302010, 0x00706050, 0x00000000, 0x00000023, 0x00000000,
322	0x81121111, 0x00d047c8, 0x80ff000c, 0x8c838300, 0x2e68120f,
323	0x9500bb78, 0x11144028, 0x00881117, 0x89140f00, 0x1a1b0000,
324	0x090e1317, 0x00000204, 0x00d30000, 0x101fbf00, 0x00000007,
325	0x48071d40, 0x03a05611, 0x000000e4, 0x6c6c6c6c, 0x08800000,
326	0x40000100, 0x08800000, 0x40000100, 0x00000000, 0x00000000,
327	0x00000000, 0x00000000, 0x69e9ac44, 0x469652cf, 0x49795994,
328	0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107, 0x007f037f,
329	0x6954341e, 0x43bc0094, 0x6954341e, 0x433c0094, 0x00000000,
330	0x5116848b, 0x47c00bff, 0x00000036, 0x2c7f000d, 0x018610db,
331	0x0000001f, 0x00b91612, 0x40000100, 0x20f60000, 0x40000100,
332	0x20200000, 0x00121820, 0x00000000, 0x00121820, 0x00007f7f,
333	0x00000000, 0x00000080, 0x00000000, 0x00000000, 0x00000000,
334	0x00000000, 0x00000000, 0x28000000, 0x00000000, 0x00000000,
335	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x64b22427,
336	0x00766932, 0x00222222, 0x00000000, 0x37644302, 0x2f97d40c,
337	0x00080740, 0x00020401, 0x0000907f, 0x20010201, 0xa0633333,
338	0x3333bc43, 0x7a8f5b6b, 0xcc979975, 0x00000000, 0x80608000,
339	0x00000000, 0x00027293, 0x00000000, 0x00000000, 0x00000000,
340	0x00000000, 0x6437140a, 0x00000000, 0x00000000, 0x30032064,
341	0x4653de68, 0x04518a3c, 0x00002101, 0x2a201c16, 0x1812362e,
342	0x322c2220, 0x000e3c24, 0x2a2a2a2a, 0x2a2a2a2a, 0x03902a2a,
343	0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x00000000,
344	0x1000dc1f, 0x10008c1f, 0x02140102, 0x681604c2, 0x01007c00,
345	0x01004800, 0xfb000000, 0x000028d1, 0x1000dc1f, 0x10008c1f,
346	0x02140102, 0x28160d05, 0x00000008, 0x001b25a4, 0x631b25a0,
347	0x631b25a0, 0x081b25a0, 0x081b25a0, 0x081b25a0, 0x081b25a0,
348	0x631b25a0, 0x081b25a0, 0x631b25a0, 0x631b25a0, 0x631b25a0,
349	0x631b25a0, 0x001b25a0, 0x001b25a0, 0x6b1b25a0, 0x00000003,
350	0x00000000, 0x00000300
351};
352
353static const struct urtwn_bb_prog rtl8188cu_bb_prog = {
354	__arraycount(rtl8192ce_bb_regs),
355	rtl8192ce_bb_regs,
356	rtl8188cu_bb_vals,
357	__arraycount(rtl8188ce_agc_vals),
358	rtl8188ce_agc_vals
359};
360
361/*
362 * RTL8188RU.
363 */
364static const uint16_t rtl8188ru_bb_regs[] = {
365	0x024, 0x028, 0x040, 0x800, 0x804, 0x808, 0x80c, 0x810, 0x814,
366	0x818, 0x81c, 0x820, 0x824, 0x828, 0x82c, 0x830, 0x834, 0x838,
367	0x83c, 0x840, 0x844, 0x848, 0x84c, 0x850, 0x854, 0x858, 0x85c,
368	0x860, 0x864, 0x868, 0x86c, 0x870, 0x874, 0x878, 0x87c, 0x880,
369	0x884, 0x888, 0x88c, 0x890, 0x894, 0x898, 0x89c, 0x900, 0x904,
370	0x908, 0x90c, 0xa00, 0xa04, 0xa08, 0xa0c, 0xa10, 0xa14, 0xa18,
371	0xa1c, 0xa20, 0xa24, 0xa28, 0xa2c, 0xa70, 0xa74, 0xc00, 0xc04,
372	0xc08, 0xc0c, 0xc10, 0xc14, 0xc18, 0xc1c, 0xc20, 0xc24, 0xc28,
373	0xc2c, 0xc30, 0xc34, 0xc38, 0xc3c, 0xc40, 0xc44, 0xc48, 0xc4c,
374	0xc50, 0xc54, 0xc58, 0xc5c, 0xc60, 0xc64, 0xc68, 0xc6c, 0xc70,
375	0xc74, 0xc78, 0xc7c, 0xc80, 0xc84, 0xc88, 0xc8c, 0xc90, 0xc94,
376	0xc98, 0xc9c, 0xca0, 0xca4, 0xca8, 0xcac, 0xcb0, 0xcb4, 0xcb8,
377	0xcbc, 0xcc0, 0xcc4, 0xcc8, 0xccc, 0xcd0, 0xcd4, 0xcd8, 0xcdc,
378	0xce0, 0xce4, 0xce8, 0xcec, 0xd00, 0xd04, 0xd08, 0xd0c, 0xd10,
379	0xd14, 0xd18, 0xd2c, 0xd30, 0xd34, 0xd38, 0xd3c, 0xd40, 0xd44,
380	0xd48, 0xd4c, 0xd50, 0xd54, 0xd58, 0xd5c, 0xd60, 0xd64, 0xd68,
381	0xd6c, 0xd70, 0xd74, 0xd78, 0xe00, 0xe04, 0xe08, 0xe10, 0xe14,
382	0xe18, 0xe1c, 0xe28, 0xe30, 0xe34, 0xe38, 0xe3c, 0xe40, 0xe44,
383	0xe48, 0xe4c, 0xe50, 0xe54, 0xe58, 0xe5c, 0xe60, 0xe68, 0xe6c,
384	0xe70, 0xe74, 0xe78, 0xe7c, 0xe80, 0xe84, 0xe88, 0xe8c, 0xed0,
385	0xed4, 0xed8, 0xedc, 0xee0, 0xeec, 0xee8, 0xf14, 0xf4c, 0xf00
386};
387
388static const uint32_t rtl8188ru_bb_vals[] = {
389	0x0011800d, 0x00ffdb83, 0x000c0004, 0x80040000, 0x00000001,
390	0x0000fc00, 0x0000000a, 0x10005388, 0x020c3d10, 0x02200385,
391	0x00000000, 0x01000100, 0x00390204, 0x00000000, 0x00000000,
392	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000,
393	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
394	0x569a569a, 0x001b25a4, 0x66e60230, 0x061f0130, 0x00000000,
395	0x32323200, 0x03000300, 0x22004000, 0x00000808, 0x00ffc3f1,
396	0xc0083070, 0x000004d5, 0x00000000, 0xccc000c0, 0x00000800,
397	0xfffffffe, 0x40302010, 0x00706050, 0x00000000, 0x00000023,
398	0x00000000, 0x81121111, 0x00d047c8, 0x80ff000c, 0x8c838300,
399	0x2e68120f, 0x9500bb78, 0x11144028, 0x00881117, 0x89140f00,
400	0x15160000, 0x070b0f12, 0x00000104, 0x00d30000, 0x101fbf00,
401	0x00000007, 0x48071d40, 0x03a05611, 0x000000e4, 0x6c6c6c6c,
402	0x08800000, 0x40000100, 0x08800000, 0x40000100, 0x00000000,
403	0x00000000, 0x00000000, 0x00000000, 0x69e9ac44, 0x469652cf,
404	0x49795994, 0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107,
405	0x007f037f, 0x6954342e, 0x43bc0094, 0x6954342f, 0x433c0094,
406	0x00000000, 0x5116848b, 0x47c00bff, 0x00000036, 0x2c56000d,
407	0x018610db, 0x0000001f, 0x00b91612, 0x24000090, 0x20f60000,
408	0x24000090, 0x20200000, 0x00121820, 0x00000000, 0x00121820,
409	0x00007f7f, 0x00000000, 0x00000080, 0x00000000, 0x00000000,
410	0x00000000, 0x00000000, 0x00000000, 0x28000000, 0x00000000,
411	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
412	0x64b22427, 0x00766932, 0x00222222, 0x00000000, 0x37644302,
413	0x2f97d40c, 0x00080740, 0x00020401, 0x0000907f, 0x20010201,
414	0xa0633333, 0x3333bc43, 0x7a8f5b6b, 0xcc979975, 0x00000000,
415	0x80608000, 0x00000000, 0x00027293, 0x00000000, 0x00000000,
416	0x00000000, 0x00000000, 0x6437140a, 0x00000000, 0x00000000,
417	0x30032064, 0x4653de68, 0x04518a3c, 0x00002101, 0x2a201c16,
418	0x1812362e, 0x322c2220, 0x000e3c24, 0x2a2a2a2a, 0x2a2a2a2a,
419	0x03902a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a,
420	0x00000000, 0x1000dc1f, 0x10008c1f, 0x02140102, 0x681604c2,
421	0x01007c00, 0x01004800, 0xfb000000, 0x000028d1, 0x1000dc1f,
422	0x10008c1f, 0x02140102, 0x28160d05, 0x00000010, 0x001b25a4,
423	0x631b25a0, 0x631b25a0, 0x081b25a0, 0x081b25a0, 0x081b25a0,
424	0x081b25a0, 0x631b25a0, 0x081b25a0, 0x631b25a0, 0x631b25a0,
425	0x631b25a0, 0x631b25a0, 0x001b25a0, 0x001b25a0, 0x6b1b25a0,
426	0x31555448, 0x00000003, 0x00000000, 0x00000300
427};
428
429static const uint32_t rtl8188ru_agc_vals[] = {
430	0x7b000001, 0x7b010001, 0x7b020001, 0x7b030001, 0x7b040001,
431	0x7b050001, 0x7b060001, 0x7b070001, 0x7b080001, 0x7a090001,
432	0x790a0001, 0x780b0001, 0x770c0001, 0x760d0001, 0x750e0001,
433	0x740f0001, 0x73100001, 0x72110001, 0x71120001, 0x70130001,
434	0x6f140001, 0x6e150001, 0x6d160001, 0x6c170001, 0x6b180001,
435	0x6a190001, 0x691a0001, 0x681b0001, 0x671c0001, 0x661d0001,
436	0x651e0001, 0x641f0001, 0x63200001, 0x62210001, 0x61220001,
437	0x60230001, 0x46240001, 0x45250001, 0x44260001, 0x43270001,
438	0x42280001, 0x41290001, 0x402a0001, 0x262b0001, 0x252c0001,
439	0x242d0001, 0x232e0001, 0x222f0001, 0x21300001, 0x20310001,
440	0x06320001, 0x05330001, 0x04340001, 0x03350001, 0x02360001,
441	0x01370001, 0x00380001, 0x00390001, 0x003a0001, 0x003b0001,
442	0x003c0001, 0x003d0001, 0x003e0001, 0x003f0001, 0x7b400001,
443	0x7b410001, 0x7b420001, 0x7b430001, 0x7b440001, 0x7b450001,
444	0x7b460001, 0x7b470001, 0x7b480001, 0x7a490001, 0x794a0001,
445	0x784b0001, 0x774c0001, 0x764d0001, 0x754e0001, 0x744f0001,
446	0x73500001, 0x72510001, 0x71520001, 0x70530001, 0x6f540001,
447	0x6e550001, 0x6d560001, 0x6c570001, 0x6b580001, 0x6a590001,
448	0x695a0001, 0x685b0001, 0x675c0001, 0x665d0001, 0x655e0001,
449	0x645f0001, 0x63600001, 0x62610001, 0x61620001, 0x60630001,
450	0x46640001, 0x45650001, 0x44660001, 0x43670001, 0x42680001,
451	0x41690001, 0x406a0001, 0x266b0001, 0x256c0001, 0x246d0001,
452	0x236e0001, 0x226f0001, 0x21700001, 0x20710001, 0x06720001,
453	0x05730001, 0x04740001, 0x03750001, 0x02760001, 0x01770001,
454	0x00780001, 0x00790001, 0x007a0001, 0x007b0001, 0x007c0001,
455	0x007d0001, 0x007e0001, 0x007f0001, 0x3800001e, 0x3801001e,
456	0x3802001e, 0x3803001e, 0x3804001e, 0x3805001e, 0x3806001e,
457	0x3807001e, 0x3808001e, 0x3c09001e, 0x3e0a001e, 0x400b001e,
458	0x440c001e, 0x480d001e, 0x4c0e001e, 0x500f001e, 0x5210001e,
459	0x5611001e, 0x5a12001e, 0x5e13001e, 0x6014001e, 0x6015001e,
460	0x6016001e, 0x6217001e, 0x6218001e, 0x6219001e, 0x621a001e,
461	0x621b001e, 0x621c001e, 0x621d001e, 0x621e001e, 0x621f001e
462};
463
464static const struct urtwn_bb_prog rtl8188ru_bb_prog = {
465	__arraycount(rtl8188ru_bb_regs),
466	rtl8188ru_bb_regs,
467	rtl8188ru_bb_vals,
468	__arraycount(rtl8188ru_agc_vals),
469	rtl8188ru_agc_vals
470};
471
472/*
473 * RF initialization values.
474 */
475struct urtwn_rf_prog {
476	int		count;
477	const uint8_t	*regs;
478	const uint32_t	*vals;
479};
480
481/*
482 * RTL8192CU and RTL8192CE-VAU.
483 */
484static const uint8_t rtl8192ce_rf1_regs[] = {
485	0x00, 0x01, 0x02, 0x03, 0x04, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e,
486	0x0f, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22,
487	0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2a, 0x2b,
488	0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b,
489	0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b,
490	0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a,
491	0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c,
492	0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b,
493	0x2c, 0x2a, 0x10, 0x11, 0x10, 0x11, 0x10, 0x11, 0x10, 0x11, 0x10,
494	0x11, 0x10, 0x11, 0x10, 0x11, 0x12, 0x12, 0x12, 0x12, 0x13, 0x13,
495	0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x14,
496	0x14, 0x14, 0x15, 0x15, 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x00,
497	0x18, 0xfe, 0xfe, 0x1f, 0xfe, 0xfe, 0x1e, 0x1f, 0x00
498};
499
500static const uint32_t rtl8192ce_rf1_vals[] = {
501	0x30159, 0x31284, 0x98000, 0x18c63, 0x210e7, 0x2044f, 0x1adb1,
502	0x54867, 0x8992e, 0x0e52c, 0x39ce7, 0x00451, 0x00000, 0x10255,
503	0x60a00, 0xfc378, 0xa1250, 0x4445f, 0x80001, 0x0b614, 0x6c000,
504	0x00000, 0x01558, 0x00060, 0x00483, 0x4f000, 0xec7d9, 0x577c0,
505	0x04783, 0x00001, 0x21334, 0x00000, 0x00054, 0x00001, 0x00808,
506	0x53333, 0x0000c, 0x00002, 0x00808, 0x5b333, 0x0000d, 0x00003,
507	0x00808, 0x63333, 0x0000d, 0x00004, 0x00808, 0x6b333, 0x0000d,
508	0x00005, 0x00808, 0x73333, 0x0000d, 0x00006, 0x00709, 0x5b333,
509	0x0000d, 0x00007, 0x00709, 0x63333, 0x0000d, 0x00008, 0x0060a,
510	0x4b333, 0x0000d, 0x00009, 0x0060a, 0x53333, 0x0000d, 0x0000a,
511	0x0060a, 0x5b333, 0x0000d, 0x0000b, 0x0060a, 0x63333, 0x0000d,
512	0x0000c, 0x0060a, 0x6b333, 0x0000d, 0x0000d, 0x0060a, 0x73333,
513	0x0000d, 0x0000e, 0x0050b, 0x66666, 0x0001a, 0xe0000, 0x4000f,
514	0xe31fc, 0x6000f, 0xff9f8, 0x2000f, 0x203f9, 0x3000f, 0xff500,
515	0x00000, 0x00000, 0x8000f, 0x3f100, 0x9000f, 0x23100, 0x32000,
516	0x71000, 0xb0000, 0xfc000, 0x287af, 0x244b7, 0x204ab, 0x1c49f,
517	0x18493, 0x14297, 0x10295, 0x0c298, 0x0819c, 0x040a8, 0x0001c,
518	0x1944c, 0x59444, 0x9944c, 0xd9444, 0x0f424, 0x4f424, 0x8f424,
519	0xcf424, 0xe0330, 0xa0330, 0x60330, 0x20330, 0x10159, 0x0f401,
520	0x00000, 0x00000, 0x80003, 0x00000, 0x00000, 0x44457, 0x80000,
521	0x30159
522};
523
524static const uint8_t rtl8192ce_rf2_regs[] = {
525	0x00, 0x01, 0x02, 0x03, 0x04, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e,
526	0x0f, 0x12, 0x12, 0x12, 0x12, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
527	0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x14, 0x14, 0x14, 0x15, 0x15,
528	0x15, 0x15, 0x16, 0x16, 0x16, 0x16
529};
530
531static const uint32_t rtl8192ce_rf2_vals[] = {
532	0x30159, 0x31284, 0x98000, 0x18c63, 0x210e7, 0x2044f, 0x1adb1,
533	0x54867, 0x8992e, 0x0e52c, 0x39ce7, 0x00451, 0x32000, 0x71000,
534	0xb0000, 0xfc000, 0x287af, 0x244b7, 0x204ab, 0x1c49f, 0x18493,
535	0x14297, 0x10295, 0x0c298, 0x0819c, 0x040a8, 0x0001c, 0x1944c,
536	0x59444, 0x9944c, 0xd9444, 0x0f424, 0x4f424, 0x8f424, 0xcf424,
537	0xe0330, 0xa0330, 0x60330, 0x20330
538};
539
540static const struct urtwn_rf_prog rtl8192ce_rf_prog[] = {
541	{
542		__arraycount(rtl8192ce_rf1_regs),
543		rtl8192ce_rf1_regs,
544		rtl8192ce_rf1_vals
545	},
546	{
547		__arraycount(rtl8192ce_rf2_regs),
548		rtl8192ce_rf2_regs,
549		rtl8192ce_rf2_vals
550	}
551};
552
553/*
554 * RTL8188CE-VAU.
555 */
556static const uint32_t rtl8188ce_rf_vals[] = {
557	0x30159, 0x31284, 0x98000, 0x18c63, 0x210e7, 0x2044f, 0x1adb1,
558	0x54867, 0x8992e, 0x0e52c, 0x39ce7, 0x00451, 0x00000, 0x10255,
559	0x60a00, 0xfc378, 0xa1250, 0x4445f, 0x80001, 0x0b614, 0x6c000,
560	0x00000, 0x01558, 0x00060, 0x00483, 0x4f200, 0xec7d9, 0x577c0,
561	0x04783, 0x00001, 0x21334, 0x00000, 0x00054, 0x00001, 0x00808,
562	0x53333, 0x0000c, 0x00002, 0x00808, 0x5b333, 0x0000d, 0x00003,
563	0x00808, 0x63333, 0x0000d, 0x00004, 0x00808, 0x6b333, 0x0000d,
564	0x00005, 0x00808, 0x73333, 0x0000d, 0x00006, 0x00709, 0x5b333,
565	0x0000d, 0x00007, 0x00709, 0x63333, 0x0000d, 0x00008, 0x0060a,
566	0x4b333, 0x0000d, 0x00009, 0x0060a, 0x53333, 0x0000d, 0x0000a,
567	0x0060a, 0x5b333, 0x0000d, 0x0000b, 0x0060a, 0x63333, 0x0000d,
568	0x0000c, 0x0060a, 0x6b333, 0x0000d, 0x0000d, 0x0060a, 0x73333,
569	0x0000d, 0x0000e, 0x0050b, 0x66666, 0x0001a, 0xe0000, 0x4000f,
570	0xe31fc, 0x6000f, 0xff9f8, 0x2000f, 0x203f9, 0x3000f, 0xff500,
571	0x00000, 0x00000, 0x8000f, 0x3f100, 0x9000f, 0x23100, 0x32000,
572	0x71000, 0xb0000, 0xfc000, 0x287b3, 0x244b7, 0x204ab, 0x1c49f,
573	0x18493, 0x1429b, 0x10299, 0x0c29c, 0x081a0, 0x040ac, 0x00020,
574	0x1944c, 0x59444, 0x9944c, 0xd9444, 0x0f424, 0x4f424, 0x8f424,
575	0xcf424, 0xe0330, 0xa0330, 0x60330, 0x20330, 0x10159, 0x0f401,
576	0x00000, 0x00000, 0x80003, 0x00000, 0x00000, 0x44457, 0x80000,
577	0x30159
578};
579
580static const struct urtwn_rf_prog rtl8188ce_rf_prog[] = {
581	{
582		__arraycount(rtl8192ce_rf1_regs),
583		rtl8192ce_rf1_regs,
584		rtl8188ce_rf_vals
585	}
586};
587
588
589/*
590 * RTL8188CU.
591 */
592static const uint32_t rtl8188cu_rf_vals[] = {
593	0x30159, 0x31284, 0x98000, 0x18c63, 0x210e7, 0x2044f, 0x1adb1,
594	0x54867, 0x8992e, 0x0e52c, 0x39ce7, 0x00451, 0x00000, 0x10255,
595	0x60a00, 0xfc378, 0xa1250, 0x4445f, 0x80001, 0x0b614, 0x6c000,
596	0x00000, 0x01558, 0x00060, 0x00483, 0x4f000, 0xec7d9, 0x577c0,
597	0x04783, 0x00001, 0x21334, 0x00000, 0x00054, 0x00001, 0x00808,
598	0x53333, 0x0000c, 0x00002, 0x00808, 0x5b333, 0x0000d, 0x00003,
599	0x00808, 0x63333, 0x0000d, 0x00004, 0x00808, 0x6b333, 0x0000d,
600	0x00005, 0x00808, 0x73333, 0x0000d, 0x00006, 0x00709, 0x5b333,
601	0x0000d, 0x00007, 0x00709, 0x63333, 0x0000d, 0x00008, 0x0060a,
602	0x4b333, 0x0000d, 0x00009, 0x0060a, 0x53333, 0x0000d, 0x0000a,
603	0x0060a, 0x5b333, 0x0000d, 0x0000b, 0x0060a, 0x63333, 0x0000d,
604	0x0000c, 0x0060a, 0x6b333, 0x0000d, 0x0000d, 0x0060a, 0x73333,
605	0x0000d, 0x0000e, 0x0050b, 0x66666, 0x0001a, 0xe0000, 0x4000f,
606	0xe31fc, 0x6000f, 0xff9f8, 0x2000f, 0x203f9, 0x3000f, 0xff500,
607	0x00000, 0x00000, 0x8000f, 0x3f100, 0x9000f, 0x23100, 0x32000,
608	0x71000, 0xb0000, 0xfc000, 0x287b3, 0x244b7, 0x204ab, 0x1c49f,
609	0x18493, 0x1429b, 0x10299, 0x0c29c, 0x081a0, 0x040ac, 0x00020,
610	0x1944c, 0x59444, 0x9944c, 0xd9444, 0x0f405, 0x4f405, 0x8f405,
611	0xcf405, 0xe0330, 0xa0330, 0x60330, 0x20330, 0x10159, 0x0f401,
612	0x00000, 0x00000, 0x80003, 0x00000, 0x00000, 0x44457, 0x80000,
613	0x30159
614};
615
616static const struct urtwn_rf_prog rtl8188cu_rf_prog[] = {
617	{
618		__arraycount(rtl8192ce_rf1_regs),
619		rtl8192ce_rf1_regs,
620		rtl8188cu_rf_vals
621	}
622};
623
624/*
625 * RTL8188RU.
626 */
627static const uint32_t rtl8188ru_rf_vals[] = {
628	0x30159, 0x31284, 0x98000, 0x18c63, 0x210e7, 0x2044f, 0x1adb0,
629	0x54867, 0x8992e, 0x0e529, 0x39ce7, 0x00451, 0x00000, 0x00255,
630	0x60a00, 0xfc378, 0xa1250, 0x4445f, 0x80001, 0x0b614, 0x6c000,
631	0x0083c, 0x01558, 0x00060, 0x00483, 0x4f000, 0xec7d9, 0x977c0,
632	0x04783, 0x00001, 0x21334, 0x00000, 0x00054, 0x00001, 0x00808,
633	0x53333, 0x0000c, 0x00002, 0x00808, 0x5b333, 0x0000d, 0x00003,
634	0x00808, 0x63333, 0x0000d, 0x00004, 0x00808, 0x6b333, 0x0000d,
635	0x00005, 0x00808, 0x73333, 0x0000d, 0x00006, 0x00709, 0x5b333,
636	0x0000d, 0x00007, 0x00709, 0x63333, 0x0000d, 0x00008, 0x0060a,
637	0x4b333, 0x0000d, 0x00009, 0x0060a, 0x53333, 0x0000d, 0x0000a,
638	0x0060a, 0x5b333, 0x0000d, 0x0000b, 0x0060a, 0x63333, 0x0000d,
639	0x0000c, 0x0060a, 0x6b333, 0x0000d, 0x0000d, 0x0060a, 0x73333,
640	0x0000d, 0x0000e, 0x0050b, 0x66666, 0x0001a, 0xe0000, 0x4000f,
641	0xe31fc, 0x6000f, 0xff9f8, 0x2000f, 0x203f9, 0x3000f, 0xff500,
642	0x00000, 0x00000, 0x8000f, 0x3f100, 0x9000f, 0x23100, 0xd8000,
643	0x90000, 0x51000, 0x12000, 0x28fb4, 0x24fa8, 0x207a4, 0x1c798,
644	0x183a4, 0x14398, 0x101a4, 0x0c198, 0x080a4, 0x04098, 0x00014,
645	0x1944c, 0x59444, 0x9944c, 0xd9444, 0x0f405, 0x4f405, 0x8f405,
646	0xcf405, 0xe0330, 0xa0330, 0x60330, 0x20330, 0x10159, 0x0f401,
647	0x00000, 0x00000, 0x80003, 0x00000, 0x00000, 0x44457, 0x80000,
648	0x30159
649};
650
651static const struct urtwn_rf_prog rtl8188ru_rf_prog[] = {
652	{
653		__arraycount(rtl8192ce_rf1_regs),
654		rtl8192ce_rf1_regs,
655		rtl8188ru_rf_vals
656	}
657};
658
659struct urtwn_txpwr {
660	uint8_t	pwr[3][28];
661};
662
663/*
664 * Per RF chain/group/rate Tx gain values.
665 */
666static const struct urtwn_txpwr rtl8192cu_txagc[] = {
667	{ {	/* Chain 0. */
668	{	/* Group 0. */
669	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
670	0x0c, 0x0c, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02,	/* OFDM6~54. */
671	0x0e, 0x0d, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02,	/* MCS0~7. */
672	0x0e, 0x0d, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02	/* MCS8~15. */
673	},
674	{	/* Group 1. */
675	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
676	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* OFDM6~54. */
677	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
678	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00	/* MCS8~15. */
679	},
680	{	/* Group 2. */
681	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
682	0x04, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x00,	/* OFDM6~54. */
683	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
684	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00	/* MCS8~15. */
685	}
686	} },
687	{ {	/* Chain 1. */
688	{	/* Group 0. */
689	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
690	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* OFDM6~54. */
691	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
692	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00	/* MCS8~15. */
693	},
694	{	/* Group 1. */
695	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
696	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* OFDM6~54. */
697	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
698	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00	/* MCS8~15. */
699	},
700	{	/* Group 2. */
701	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
702	0x04, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x00,	/* OFDM6~54. */
703	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
704	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00	/* MCS8~15. */
705	}
706	} }
707};
708
709static const struct urtwn_txpwr rtl8188ru_txagc[] = {
710	{ {	/* Chain 0. */
711	{	/* Group 0. */
712	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
713	0x08, 0x08, 0x08, 0x06, 0x06, 0x04, 0x04, 0x00,	/* OFDM6~54. */
714	0x08, 0x06, 0x06, 0x04, 0x04, 0x02, 0x02, 0x00,	/* MCS0~7. */
715	0x08, 0x06, 0x06, 0x04, 0x04, 0x02, 0x02, 0x00	/* MCS8~15. */
716	},
717	{	/* Group 1. */
718	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
719	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* OFDM6~54. */
720	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
721	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00	/* MCS8~15. */
722	},
723	{	/* Group 2. */
724	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
725	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* OFDM6~54. */
726	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
727	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00	/* MCS8~15. */
728	}
729	} }
730};
731