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 R92CU_PRIV_H
22#define R92CU_PRIV_H
23
24#include <dev/rtwn/rtl8192c/r92c_priv.h>
25
26/*
27 * MAC initialization values.
28 */
29static const struct rtwn_mac_prog rtl8192cu_mac[] = {
30	{ 0x420, 0x80 }, { 0x423, 0x00 }, { 0x430, 0x00 }, { 0x431, 0x00 },
31	{ 0x432, 0x00 }, { 0x433, 0x01 }, { 0x434, 0x04 }, { 0x435, 0x05 },
32	{ 0x436, 0x06 }, { 0x437, 0x07 }, { 0x438, 0x00 }, { 0x439, 0x00 },
33	{ 0x43a, 0x00 }, { 0x43b, 0x01 }, { 0x43c, 0x04 }, { 0x43d, 0x05 },
34	{ 0x43e, 0x06 }, { 0x43f, 0x07 }, { 0x440, 0x5d }, { 0x441, 0x01 },
35	{ 0x442, 0x00 }, { 0x444, 0x15 }, { 0x445, 0xf0 }, { 0x446, 0x0f },
36	{ 0x447, 0x00 }, { 0x458, 0x41 }, { 0x459, 0xa8 }, { 0x45a, 0x72 },
37	{ 0x45b, 0xb9 }, { 0x460, 0x66 }, { 0x461, 0x66 }, { 0x462, 0x08 },
38	{ 0x463, 0x03 }, { 0x4c8, 0xff }, { 0x4c9, 0x08 }, { 0x4cc, 0xff },
39	{ 0x4cd, 0xff }, { 0x4ce, 0x01 }, { 0x500, 0x26 }, { 0x501, 0xa2 },
40	{ 0x502, 0x2f }, { 0x503, 0x00 }, { 0x504, 0x28 }, { 0x505, 0xa3 },
41	{ 0x506, 0x5e }, { 0x507, 0x00 }, { 0x508, 0x2b }, { 0x509, 0xa4 },
42	{ 0x50a, 0x5e }, { 0x50b, 0x00 }, { 0x50c, 0x4f }, { 0x50d, 0xa4 },
43	{ 0x50e, 0x00 }, { 0x50f, 0x00 }, { 0x512, 0x1c }, { 0x514, 0x0a },
44	{ 0x515, 0x10 }, { 0x516, 0x0a }, { 0x517, 0x10 }, { 0x51a, 0x16 },
45	{ 0x524, 0x0f }, { 0x525, 0x4f }, { 0x546, 0x40 }, { 0x547, 0x00 },
46	{ 0x550, 0x10 }, { 0x551, 0x10 }, { 0x559, 0x02 }, { 0x55a, 0x02 },
47	{ 0x55d, 0xff }, { 0x605, 0x30 }, { 0x608, 0x0e }, { 0x609, 0x2a },
48	{ 0x652, 0x20 }, { 0x63c, 0x0a }, { 0x63d, 0x0e }, { 0x63e, 0x0a },
49	{ 0x63f, 0x0e }, { 0x66e, 0x05 }, { 0x700, 0x21 }, { 0x701, 0x43 },
50	{ 0x702, 0x65 }, { 0x703, 0x87 }, { 0x708, 0x21 }, { 0x709, 0x43 },
51	{ 0x70a, 0x65 }, { 0x70b, 0x87 }
52};
53
54/*
55 * Baseband initialization values.
56 */
57static const uint16_t rtl8192cu_bb_regs0_88ru[] = {
58	0x024, 0x028, 0x040, 0x800, 0x804, 0x808, 0x80c, 0x810, 0x814,
59	0x818, 0x81c, 0x820, 0x824, 0x828, 0x82c, 0x830, 0x834, 0x838,
60	0x83c, 0x840, 0x844, 0x848, 0x84c, 0x850, 0x854, 0x858, 0x85c,
61	0x860, 0x864, 0x868, 0x86c, 0x870, 0x874, 0x878, 0x87c, 0x880,
62	0x884, 0x888, 0x88c, 0x890, 0x894, 0x898, 0x89c, 0x900, 0x904,
63	0x908, 0x90c, 0xa00, 0xa04, 0xa08, 0xa0c, 0xa10, 0xa14, 0xa18,
64	0xa1c, 0xa20, 0xa24, 0xa28, 0xa2c, 0xa70, 0xa74, 0xc00, 0xc04,
65	0xc08, 0xc0c, 0xc10, 0xc14, 0xc18, 0xc1c, 0xc20, 0xc24, 0xc28,
66	0xc2c, 0xc30, 0xc34, 0xc38, 0xc3c, 0xc40, 0xc44, 0xc48, 0xc4c,
67	0xc50, 0xc54, 0xc58, 0xc5c, 0xc60, 0xc64, 0xc68, 0xc6c, 0xc70
68}, rtl8192cu_bb_regs0[] = {
69	0x024, 0x028, 0x800, 0x804, 0x808, 0x80c, 0x810, 0x814, 0x818,
70	0x81c, 0x820, 0x824, 0x828, 0x82c, 0x830, 0x834, 0x838, 0x83c,
71	0x840, 0x844, 0x848, 0x84c, 0x850, 0x854, 0x858, 0x85c, 0x860,
72	0x864, 0x868, 0x86c, 0x870, 0x874, 0x878, 0x87c, 0x880, 0x884,
73	0x888, 0x88c, 0x890, 0x894, 0x898, 0x89c, 0x900, 0x904, 0x908,
74	0x90c, 0xa00, 0xa04, 0xa08, 0xa0c, 0xa10, 0xa14, 0xa18, 0xa1c,
75	0xa20, 0xa24, 0xa28, 0xa2c, 0xa70, 0xa74, 0xc00, 0xc04, 0xc08,
76	0xc0c, 0xc10, 0xc14, 0xc18, 0xc1c, 0xc20, 0xc24, 0xc28, 0xc2c,
77	0xc30, 0xc34, 0xc38, 0xc3c, 0xc40, 0xc44, 0xc48, 0xc4c, 0xc50,
78	0xc54, 0xc58, 0xc5c, 0xc60, 0xc64, 0xc68, 0xc6c, 0xc70
79}, rtl8192cu_bb_regs1[] = {
80	0xc74, 0xc78, 0xc7c, 0xc80, 0xc84, 0xc88
81}, rtl8192cu_bb_regs2[] = {
82	0xc8c, 0xc90, 0xc94, 0xc98, 0xc9c, 0xca0, 0xca4, 0xca8, 0xcac,
83	0xcb0, 0xcb4, 0xcb8, 0xcbc, 0xcc0, 0xcc4, 0xcc8, 0xccc, 0xcd0,
84	0xcd4, 0xcd8, 0xcdc, 0xce0, 0xce4, 0xce8, 0xcec, 0xd00
85}, rtl8192cu_bb_regs5_88ru[] = {
86	0xe60, 0xe68, 0xe6c, 0xe70, 0xe74, 0xe78, 0xe7c, 0xe80, 0xe84,
87	0xe88, 0xe8c, 0xed0, 0xed4, 0xed8, 0xedc, 0xee0, 0xeec, 0xee8,
88	0xf14, 0xf4c, 0xf00
89};
90
91static const uint32_t rtl8192cu_bb_vals0_88cu[] = {
92	0x0011800d, 0x00ffdb83, 0x80040000, 0x00000001, 0x0000fc00,
93	0x0000000a, 0x10005388, 0x020c3d10, 0x02200385, 0x00000000,
94	0x01000100, 0x00390004, 0x00000000, 0x00000000, 0x00000000,
95	0x00000000, 0x00000000, 0x00000000, 0x00010000, 0x00000000,
96	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x569a569a,
97	0x001b25a4, 0x66e60230, 0x061f0130, 0x00000000, 0x32323200,
98	0x07000700, 0x22004000, 0x00000808, 0x00000000, 0xc0083070,
99	0x000004d5, 0x00000000, 0xccc000c0, 0x00000800, 0xfffffffe,
100	0x40302010, 0x00706050, 0x00000000, 0x00000023, 0x00000000,
101	0x81121111, 0x00d047c8, 0x80ff000c, 0x8c838300, 0x2e68120f,
102	0x9500bb78, 0x11144028, 0x00881117, 0x89140f00, 0x1a1b0000,
103	0x090e1317, 0x00000204, 0x00d30000, 0x101fbf00, 0x00000007,
104	0x48071d40, 0x03a05611, 0x000000e4, 0x6c6c6c6c, 0x08800000,
105	0x40000100, 0x08800000, 0x40000100, 0x00000000, 0x00000000,
106	0x00000000, 0x00000000, 0x69e9ac44, 0x469652cf, 0x49795994,
107	0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107, 0x007f037f,
108	0x6954341e, 0x43bc0094, 0x6954341e, 0x433c0094, 0x00000000,
109	0x5116848b, 0x47c00bff, 0x00000036, 0x2c7f000d
110}, rtl8192cu_bb_vals0_88ru[] = {
111	0x0011800d, 0x00ffdb83, 0x000c0004, 0x80040000, 0x00000001,
112	0x0000fc00, 0x0000000a, 0x10005388, 0x020c3d10, 0x02200385,
113	0x00000000, 0x01000100, 0x00390204, 0x00000000, 0x00000000,
114	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000,
115	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
116	0x569a569a, 0x001b25a4, 0x66e60230, 0x061f0130, 0x00000000,
117	0x32323200, 0x03000300, 0x22004000, 0x00000808, 0x00ffc3f1,
118	0xc0083070, 0x000004d5, 0x00000000, 0xccc000c0, 0x00000800,
119	0xfffffffe, 0x40302010, 0x00706050, 0x00000000, 0x00000023,
120	0x00000000, 0x81121111, 0x00d047c8, 0x80ff000c, 0x8c838300,
121	0x2e68120f, 0x9500bb78, 0x11144028, 0x00881117, 0x89140f00,
122	0x15160000, 0x070b0f12, 0x00000104, 0x00d30000, 0x101fbf00,
123	0x00000007, 0x48071d40, 0x03a05611, 0x000000e4, 0x6c6c6c6c,
124	0x08800000, 0x40000100, 0x08800000, 0x40000100, 0x00000000,
125	0x00000000, 0x00000000, 0x00000000, 0x69e9ac44, 0x469652cf,
126	0x49795994, 0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107,
127	0x007f037f, 0x6954342e, 0x43bc0094, 0x6954342f, 0x433c0094,
128	0x00000000, 0x5116848b, 0x47c00bff, 0x00000036, 0x2c56000d
129}, rtl8192cu_bb_vals0_92ce_92cu[] = {
130	0x0011800d, 0x00ffdb83, 0x80040002, 0x00000003, 0x0000fc00,
131	0x0000000a, 0x10005388, 0x020c3d10, 0x02200385, 0x00000000,
132	0x01000100, 0x00390004, 0x01000100, 0x00390004, 0x27272727,
133	0x27272727, 0x27272727, 0x27272727, 0x00010000, 0x00010000,
134	0x27272727, 0x27272727, 0x00000000, 0x00000000, 0x569a569a,
135	0x0c1b25a4, 0x66e60230, 0x061f0130, 0x27272727, 0x2b2b2b27,
136	0x07000700, 0x22184000, 0x08080808, 0x00000000, 0xc0083070,
137	0x000004d5, 0x00000000, 0xcc0000c0, 0x00000800, 0xfffffffe,
138	0x40302010, 0x00706050, 0x00000000, 0x00000023, 0x00000000,
139	0x81121313, 0x00d047c8, 0x80ff000c, 0x8c838300, 0x2e68120f,
140	0x9500bb78, 0x11144028, 0x00881117, 0x89140f00, 0x1a1b0000,
141	0x090e1317, 0x00000204, 0x00d30000, 0x101fbf00, 0x00000007,
142	0x48071d40, 0x03a05633, 0x000000e4, 0x6c6c6c6c, 0x08800000,
143	0x40000100, 0x08800000, 0x40000100, 0x00000000, 0x00000000,
144	0x00000000, 0x00000000, 0x69e9ac44, 0x469652cf, 0x49795994,
145	0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107, 0x007f037f,
146	0x6954341e, 0x43bc0094, 0x6954341e, 0x433c0094, 0x00000000,
147	0x5116848b, 0x47c00bff, 0x00000036, 0x2c7f000d
148}, rtl8192cu_bb_vals1_88ru[] = {
149	0x018610db, 0x0000001f, 0x00b91612, 0x24000090, 0x20f60000,
150	0x24000090
151}, rtl8192cu_bb_vals1_92cu[] = {
152	0x0186115b, 0x0000001f, 0x00b99612, 0x40000100, 0x20f60000,
153	0x40000100
154}, rtl8192cu_bb_vals1_88cu_92ce[] = {
155	0x018610db, 0x0000001f, 0x00b91612, 0x40000100, 0x20f60000,
156	0x40000100
157}, rtl8192cu_bb_vals2[] = {
158	0x20200000, 0x00121820, 0x00000000, 0x00121820, 0x00007f7f,
159	0x00000000, 0x00000080, 0x00000000, 0x00000000, 0x00000000,
160	0x00000000, 0x00000000, 0x28000000, 0x00000000, 0x00000000,
161	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x64b22427,
162	0x00766932, 0x00222222, 0x00000000, 0x37644302, 0x2f97d40c,
163	0x00080740
164}, rtl8192cu_bb_vals5_88cu[] = {
165	0x00000008, 0x001b25a4, 0x631b25a0, 0x631b25a0, 0x081b25a0,
166	0x081b25a0, 0x081b25a0, 0x081b25a0, 0x631b25a0, 0x081b25a0,
167	0x631b25a0, 0x631b25a0, 0x631b25a0, 0x631b25a0, 0x001b25a0,
168	0x001b25a0, 0x6b1b25a0, 0x00000003, 0x00000000, 0x00000300
169}, rtl8192cu_bb_vals5_88ru[] = {
170	0x00000010, 0x001b25a4, 0x631b25a0, 0x631b25a0, 0x081b25a0,
171	0x081b25a0, 0x081b25a0, 0x081b25a0, 0x631b25a0, 0x081b25a0,
172	0x631b25a0, 0x631b25a0, 0x631b25a0, 0x631b25a0, 0x001b25a0,
173	0x001b25a0, 0x6b1b25a0, 0x31555448, 0x00000003, 0x00000000,
174	0x00000300
175};
176
177static const struct rtwn_bb_prog rtl8192cu_bb[] = {
178	/* RTL8188CE / RTL8188CU. */
179	{
180		nitems(rtl8192cu_bb_regs0),
181		rtl8192cu_bb_regs0,
182		rtl8192cu_bb_vals0_88cu,
183		{ R92C_COND_RTL8188CU | R92C_COND_RTL8188CE },
184		/* RTL8188RU. */
185		&(const struct rtwn_bb_prog){
186			nitems(rtl8192cu_bb_regs0_88ru),
187			rtl8192cu_bb_regs0_88ru,
188			rtl8192cu_bb_vals0_88ru,
189			{ R92C_COND_RTL8188RU },
190			/* Others. */
191			&(const struct rtwn_bb_prog){
192				nitems(rtl8192cu_bb_regs0),
193				rtl8192cu_bb_regs0,
194				rtl8192cu_bb_vals0_92ce_92cu,
195				{ 0 },
196				NULL
197			}
198		}
199	},
200	/* RTL8188RU. */
201	{
202		nitems(rtl8192cu_bb_regs1),
203		rtl8192cu_bb_regs1,
204		rtl8192cu_bb_vals1_88ru,
205		{ R92C_COND_RTL8188RU },
206		/* RTL8192CU. */
207		&(const struct rtwn_bb_prog){
208			nitems(rtl8192cu_bb_regs1),
209			rtl8192cu_bb_regs1,
210			rtl8192cu_bb_vals1_92cu,
211			{ R92C_COND_RTL8192CU },
212			/* Others. */
213			&(const struct rtwn_bb_prog){
214				nitems(rtl8192cu_bb_regs1),
215				rtl8192cu_bb_regs1,
216				rtl8192cu_bb_vals1_88cu_92ce,
217				{ 0 },
218				NULL
219			}
220		}
221	},
222	{
223		nitems(rtl8192cu_bb_regs2),
224		rtl8192cu_bb_regs2,
225		rtl8192cu_bb_vals2,
226		{ 0 },
227		NULL
228	},
229	/* RTL8192CE / RTL8192CU. */
230	{
231		nitems(rtl8192c_bb_regs3),
232		rtl8192c_bb_regs3,
233		rtl8192c_bb_vals3_92ce_92cu,
234		{ R92C_COND_RTL8192C },
235		/* Others. */
236		&(const struct rtwn_bb_prog){
237			nitems(rtl8192c_bb_regs3),
238			rtl8192c_bb_regs3,
239			rtl8192c_bb_vals3_88cu_88ru,
240			{ 0 },
241			NULL
242		}
243	},
244	{
245		nitems(rtl8192c_bb_regs4),
246		rtl8192c_bb_regs4,
247		rtl8192c_bb_vals4,
248		{ 0 },
249		NULL
250	},
251	/* RTL8188CE / RTL8188CU. */
252	{
253		nitems(rtl8192c_bb_regs5),
254		rtl8192c_bb_regs5,
255		rtl8192cu_bb_vals5_88cu,
256		{ R92C_COND_RTL8188CU | R92C_COND_RTL8188CE },
257		/* RTL8188RU. */
258		&(const struct rtwn_bb_prog){
259			nitems(rtl8192cu_bb_regs5_88ru),
260			rtl8192cu_bb_regs5_88ru,
261			rtl8192cu_bb_vals5_88ru,
262			{ R92C_COND_RTL8188RU },
263			/* Others. */
264			&(const struct rtwn_bb_prog){
265				nitems(rtl8192c_bb_regs5),
266				rtl8192c_bb_regs5,
267				rtl8192c_bb_vals5_92ce_92cu,
268				{ 0 },
269				NULL
270			}
271		}
272	}
273};
274
275static const uint32_t rtl8188ru_agc_vals[] = {
276	0x7b000001, 0x7b010001, 0x7b020001, 0x7b030001, 0x7b040001,
277	0x7b050001, 0x7b060001, 0x7b070001, 0x7b080001, 0x7a090001,
278	0x790a0001, 0x780b0001, 0x770c0001, 0x760d0001, 0x750e0001,
279	0x740f0001, 0x73100001, 0x72110001, 0x71120001, 0x70130001,
280	0x6f140001, 0x6e150001, 0x6d160001, 0x6c170001, 0x6b180001,
281	0x6a190001, 0x691a0001, 0x681b0001, 0x671c0001, 0x661d0001,
282	0x651e0001, 0x641f0001, 0x63200001, 0x62210001, 0x61220001,
283	0x60230001, 0x46240001, 0x45250001, 0x44260001, 0x43270001,
284	0x42280001, 0x41290001, 0x402a0001, 0x262b0001, 0x252c0001,
285	0x242d0001, 0x232e0001, 0x222f0001, 0x21300001, 0x20310001,
286	0x06320001, 0x05330001, 0x04340001, 0x03350001, 0x02360001,
287	0x01370001, 0x00380001, 0x00390001, 0x003a0001, 0x003b0001,
288	0x003c0001, 0x003d0001, 0x003e0001, 0x003f0001, 0x7b400001,
289	0x7b410001, 0x7b420001, 0x7b430001, 0x7b440001, 0x7b450001,
290	0x7b460001, 0x7b470001, 0x7b480001, 0x7a490001, 0x794a0001,
291	0x784b0001, 0x774c0001, 0x764d0001, 0x754e0001, 0x744f0001,
292	0x73500001, 0x72510001, 0x71520001, 0x70530001, 0x6f540001,
293	0x6e550001, 0x6d560001, 0x6c570001, 0x6b580001, 0x6a590001,
294	0x695a0001, 0x685b0001, 0x675c0001, 0x665d0001, 0x655e0001,
295	0x645f0001, 0x63600001, 0x62610001, 0x61620001, 0x60630001,
296	0x46640001, 0x45650001, 0x44660001, 0x43670001, 0x42680001,
297	0x41690001, 0x406a0001, 0x266b0001, 0x256c0001, 0x246d0001,
298	0x236e0001, 0x226f0001, 0x21700001, 0x20710001, 0x06720001,
299	0x05730001, 0x04740001, 0x03750001, 0x02760001, 0x01770001,
300	0x00780001, 0x00790001, 0x007a0001, 0x007b0001, 0x007c0001,
301	0x007d0001, 0x007e0001, 0x007f0001, 0x3800001e, 0x3801001e,
302	0x3802001e, 0x3803001e, 0x3804001e, 0x3805001e, 0x3806001e,
303	0x3807001e, 0x3808001e, 0x3c09001e, 0x3e0a001e, 0x400b001e,
304	0x440c001e, 0x480d001e, 0x4c0e001e, 0x500f001e, 0x5210001e,
305	0x5611001e, 0x5a12001e, 0x5e13001e, 0x6014001e, 0x6015001e,
306	0x6016001e, 0x6217001e, 0x6218001e, 0x6219001e, 0x621a001e,
307	0x621b001e, 0x621c001e, 0x621d001e, 0x621e001e, 0x621f001e
308};
309
310static const struct rtwn_agc_prog rtl8188ru_agc[] = {
311	{
312		nitems(rtl8188ru_agc_vals),
313		rtl8188ru_agc_vals,
314		{ 0 },
315		NULL
316	}
317};
318
319#endif	/* R92CU_PRIV_H */
320