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