1/*-
2 * Copyright (c) 2017 Kevin Lo <kevlo@FreeBSD.org>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 *    notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 *    notice, this list of conditions and the following disclaimer in the
12 *    documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 *
26 * $FreeBSD$
27 */
28
29#ifndef R92E_PRIV_H
30#define R92E_PRIV_H
31
32/*
33 * MAC initialization values.
34 */
35static const struct rtwn_mac_prog rtl8192eu_mac[] = {
36	{ 0x011, 0xeb }, { 0x012, 0x07 }, { 0x014, 0x75 }, { 0x303, 0xa7 },
37	{ 0x428, 0x0a }, { 0x429, 0x10 }, { 0x430, 0x00 }, { 0x431, 0x00 },
38	{ 0x432, 0x00 }, { 0x433, 0x01 }, { 0x434, 0x04 }, { 0x435, 0x05 },
39	{ 0x436, 0x07 }, { 0x437, 0x08 }, { 0x43c, 0x04 }, { 0x43d, 0x05 },
40	{ 0x43e, 0x07 }, { 0x43f, 0x08 }, { 0x440, 0x5d }, { 0x441, 0x01 },
41	{ 0x442, 0x00 }, { 0x444, 0x10 }, { 0x445, 0x00 }, { 0x446, 0x00 },
42	{ 0x447, 0x00 }, { 0x448, 0x00 }, { 0x449, 0xf0 }, { 0x44a, 0x0f },
43	{ 0x44b, 0x3e }, { 0x44c, 0x10 }, { 0x44d, 0x00 }, { 0x44e, 0x00 },
44	{ 0x44f, 0x00 }, { 0x450, 0x00 }, { 0x451, 0xf0 }, { 0x452, 0x0f },
45	{ 0x453, 0x00 }, { 0x456, 0x5e }, { 0x460, 0x66 }, { 0x461, 0x66 },
46	{ 0x4c8, 0xff }, { 0x4c9, 0x08 }, { 0x4cc, 0xff }, { 0x4cd, 0xff },
47	{ 0x4ce, 0x01 }, { 0x500, 0x26 }, { 0x501, 0xa2 }, { 0x502, 0x2f },
48	{ 0x503, 0x00 }, { 0x504, 0x28 }, { 0x505, 0xa3 }, { 0x506, 0x5e },
49	{ 0x507, 0x00 }, { 0x508, 0x2b }, { 0x509, 0xa4 }, { 0x50a, 0x5e },
50	{ 0x50b, 0x00 }, { 0x50c, 0x4f }, { 0x50d, 0xa4 }, { 0x50e, 0x00 },
51	{ 0x50f, 0x00 }, { 0x512, 0x1c }, { 0x514, 0x0a }, { 0x516, 0x0a },
52	{ 0x525, 0x4f }, { 0x540, 0x12 }, { 0x541, 0x64 }, { 0x550, 0x10 },
53	{ 0x551, 0x10 }, { 0x559, 0x02 }, { 0x55c, 0x50 }, { 0x55d, 0xff },
54	{ 0x605, 0x30 }, { 0x608, 0x0e }, { 0x609, 0x2a }, { 0x620, 0xff },
55	{ 0x621, 0xff }, { 0x622, 0xff }, { 0x623, 0xff }, { 0x624, 0xff },
56	{ 0x625, 0xff }, { 0x626, 0xff }, { 0x627, 0xff }, { 0x638, 0x50 },
57	{ 0x63c, 0x0a }, { 0x63d, 0x0a }, { 0x63e, 0x0e }, { 0x63f, 0x0e },
58	{ 0x640, 0x40 }, { 0x642, 0x40 }, { 0x643, 0x00 }, { 0x652, 0xc8 },
59	{ 0x66e, 0x05 }, { 0x700, 0x21 }, { 0x701, 0x43 }, { 0x702, 0x65 },
60	{ 0x703, 0x87 }, { 0x708, 0x21 }, { 0x709, 0x43 }, { 0x70a, 0x65 },
61	{ 0x70b, 0x87 }
62};
63
64/*
65 * Baseband initialization values.
66 */
67static const uint16_t rtl8192eu_bb_regs[] = {
68	0x800, 0x804, 0x808, 0x80c, 0x810, 0x814, 0x818, 0x81c, 0x820,
69	0x824, 0x828, 0x82c, 0x830, 0x834, 0x838, 0x83c, 0x840, 0x844,
70	0x848, 0x84c, 0x850, 0x854, 0x858, 0x85c, 0x860, 0x864, 0x868,
71	0x86c, 0x870, 0x874, 0x878, 0x87c, 0x880, 0x884, 0x888, 0x88c,
72	0x890, 0x894, 0x898, 0x900, 0x904, 0x908, 0x90c, 0x910, 0x914,
73	0x918, 0x91c, 0x924, 0x928, 0x92c, 0x930, 0x934, 0x938, 0x93c,
74	0x940, 0x944, 0x94c, 0xa00, 0xa04, 0xa08, 0xa0c, 0xa10, 0xa14,
75	0xa18, 0xa1c, 0xa20, 0xa24, 0xa28, 0xa2c, 0xa70, 0xa74, 0xa78,
76	0xa7c, 0xa80, 0xb38, 0xc00, 0xc04, 0xc08, 0xc0c, 0xc10, 0xc14,
77	0xc18, 0xc1c, 0xc20, 0xc24, 0xc28, 0xc2c, 0xc30, 0xc34, 0xc38,
78	0xc3c, 0xc40, 0xc44, 0xc48, 0xc4c, 0xc50, 0xc54, 0xc58, 0xc5c,
79	0xc60, 0xc64, 0xc68, 0xc6c, 0xc70, 0xc74, 0xc78, 0xc7c, 0xc80,
80	0xc84, 0xc88, 0xc8c, 0xc90, 0xc94, 0xc98, 0xc9c, 0xca0, 0xca4,
81	0xca8, 0xcac, 0xcb0, 0xcb4, 0xcb8, 0xcbc, 0xcc0, 0xcc4, 0xcc8,
82	0xccc, 0xcd0, 0xcd4, 0xcd8, 0xcdc, 0xce0, 0xce4, 0xce8, 0xcec,
83	0xd00, 0xd04, 0xd08, 0xd0c, 0xd10, 0xd14, 0xd18, 0xd1c, 0xd2c,
84	0xd30, 0xd34, 0xd38, 0xd3c, 0xd40, 0xd44, 0xd48, 0xd4c, 0xd50,
85	0xd54, 0xd58, 0xd5c, 0xd60, 0xd64, 0xd68, 0xd6c, 0xd70, 0xd74,
86	0xd78, 0xd80, 0xd84, 0xd88, 0xe00, 0xe04, 0xe08, 0xe10, 0xe14,
87	0xe18, 0xe1c, 0xe28, 0xe30, 0xe34, 0xe38, 0xe3c, 0xe40, 0xe44,
88	0xe48, 0xe4c, 0xe50, 0xe54, 0xe58, 0xe5c, 0xe60, 0xe68, 0xe6c,
89	0xe70, 0xe74, 0xe78, 0xe7c, 0xe80, 0xe84, 0xe88, 0xe8c, 0xed0,
90	0xed4, 0xed8, 0xedc, 0xee0, 0xeec, 0xee4, 0xee8, 0xf14, 0xf4c,
91	0xf00
92};
93
94static const uint32_t rtl8192eu_bb_vals[] = {
95	0x80040000, 0x00000003, 0x0000fc00, 0x0000000a, 0x10001331,
96	0x020c3d10, 0x02220385, 0x00000000, 0x01000100, 0x00390204,
97	0x01000100, 0x00390204, 0x32323232, 0x30303030, 0x30303030,
98	0x30303030, 0x00010000, 0x00010000, 0x28282828, 0x28282828,
99	0x00000000, 0x00000000, 0x009a009a, 0x01000014, 0x66f60000,
100	0x061f0000, 0x30303030, 0x30303030, 0x00000000, 0x55004200,
101	0x08080808, 0x00000000, 0xb0000c1c, 0x00000001, 0x00000000,
102	0xcc0000c0, 0x00000800, 0xfffffffe, 0x40302010, 0x00000000,
103	0x00000023, 0x00000000, 0x81121313, 0x806c0001, 0x00000001,
104	0x00000000, 0x00010000, 0x00000001, 0x00000000, 0x00000000,
105	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
106	0x00000000, 0x00000008, 0x00d0c7c8, 0x81ff000c, 0x8c838300,
107	0x2e68120f, 0x95009b78, 0x1114d028, 0x00881117, 0x89140f00,
108	0x1a1b0000, 0x090e1317, 0x00000204, 0x00d30000, 0x101fff00,
109	0x00000007, 0x00000900, 0x225b0606, 0x218075b1, 0x00000000,
110	0x48071d40, 0x03a05633, 0x000000e4, 0x6c6c6c6c, 0x08800000,
111	0x40000100, 0x08800000, 0x40000100, 0x00000000, 0x00000000,
112	0x00000000, 0x00000000, 0x69e9ac47, 0x469652af, 0x49795994,
113	0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107, 0x007f037f,
114	0x00340020, 0x0080801f, 0x00000020, 0x00248492, 0x00000000,
115	0x7112848b, 0x47c00bff, 0x00000036, 0x00000600, 0x02013169,
116	0x0000001f, 0x00b91612, 0x40000100, 0x21f60000, 0x40000100,
117	0xa0e40000, 0x00121820, 0x00000000, 0x00121820, 0x00007f7f,
118	0x00000000, 0x000300a0, 0x00000000, 0x00000000, 0x00000000,
119	0x00000000, 0x00000000, 0x28000000, 0x00000000, 0x00000000,
120	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x64b22427,
121	0x00766932, 0x00222222, 0x00040000, 0x77644302, 0x2f97d40c,
122	0x00080740, 0x00020403, 0x0000907f, 0x20010201, 0xa0633333,
123	0x3333bc43, 0x7a8f5b6b, 0x0000007f, 0xcc979975, 0x00000000,
124	0x80608000, 0x00000000, 0x00127353, 0x00000000, 0x00000000,
125	0x00000000, 0x00000000, 0x6437140a, 0x00000000, 0x00000282,
126	0x30032064, 0x4653de68, 0x04518a3c, 0x00002101, 0x2a201c16,
127	0x1812362e, 0x322c2220, 0x000e3c24, 0x01081008, 0x00000800,
128	0xf0b50000, 0x30303030, 0x30303030, 0x03903030, 0x30303030,
129	0x30303030, 0x30303030, 0x30303030, 0x00000000, 0x1000dc1f,
130	0x10008c1f, 0x02140102, 0x681604c2, 0x01007c00, 0x01004800,
131	0xfb000000, 0x000028d1, 0x1000dc1f, 0x10008c1f, 0x02140102,
132	0x28160d05, 0x00000008, 0x0fc05656, 0x03c09696, 0x03c09696,
133	0x0c005656, 0x0c005656, 0x0c005656, 0x0c005656, 0x03c09696,
134	0x0c005656, 0x03c09696, 0x03c09696, 0x03c09696, 0x03c09696,
135	0x0000d6d6, 0x0000d6d6, 0x0fc01616, 0xb0000c1c, 0x00000001,
136	0x00000003, 0x00000000, 0x00000300
137};
138
139static const struct rtwn_bb_prog rtl8192eu_bb[] = {
140	{
141		nitems(rtl8192eu_bb_regs),
142		rtl8192eu_bb_regs,
143		rtl8192eu_bb_vals,
144		{ 0 },
145		NULL
146	}
147};
148
149static const uint32_t rtl8192eu_agc_vals[] = {
150	0xfb000001, 0xfb010001, 0xfb020001, 0xfb030001, 0xfb040001,
151	0xfb050001, 0xfa060001, 0xf9070001, 0xf8080001, 0xf7090001,
152	0xf60a0001, 0xf50b0001, 0xf40c0001, 0xf30d0001, 0xf20e0001,
153	0xf10f0001, 0xf0100001, 0xef110001, 0xee120001, 0xed130001,
154	0xec140001, 0xeb150001, 0xea160001, 0xe9170001, 0xe8180001,
155	0xe7190001, 0xc81a0001, 0xc71b0001, 0xc61c0001, 0x071d0001,
156	0x061e0001, 0x051f0001, 0x04200001, 0x03210001, 0xaa220001,
157	0xa9230001, 0xa8240001, 0xa7250001, 0xa6260001, 0x85270001,
158	0x84280001, 0x83290001, 0x252a0001, 0x242b0001, 0x232c0001,
159	0x222d0001, 0x672e0001, 0x662f0001, 0x65300001, 0x64310001,
160	0x63320001, 0x62330001, 0x61340001, 0x45350001, 0x44360001,
161	0x43370001, 0x42380001, 0x41390001, 0x403a0001, 0x403b0001,
162	0x403c0001, 0x403d0001, 0x403e0001, 0x403f0001, 0xfb400001,
163	0xfb410001, 0xfb420001, 0xfb430001, 0xfb440001, 0xfb450001,
164	0xfa460001, 0xf9470001, 0xf8480001, 0xf7490001, 0xf64a0001,
165	0xf54b0001, 0xf44c0001, 0xf34d0001, 0xf24e0001, 0xf14f0001,
166	0xf0500001, 0xef510001, 0xee520001, 0xed530001, 0xec540001,
167	0xeb550001, 0xea560001, 0xe9570001, 0xe8580001, 0xe7590001,
168	0xe65a0001, 0xe55b0001, 0xe45c0001, 0xe35d0001, 0xe25e0001,
169	0xe15f0001, 0x8a600001, 0x89610001, 0x88620001, 0x87630001,
170	0x86640001, 0x85650001, 0x84660001, 0x83670001, 0x82680001,
171	0x6b690001, 0x6a6a0001, 0x696b0001, 0x686c0001, 0x676d0001,
172	0x666e0001, 0x656f0001, 0x64700001, 0x63710001, 0x62720001,
173	0x61730001, 0x49740001, 0x48750001, 0x47760001, 0x46770001,
174	0x45780001, 0x44790001, 0x437a0001, 0x427b0001, 0x417c0001,
175	0x407d0001, 0x407e0001, 0x407f0001
176};
177
178static const struct rtwn_agc_prog rtl8192eu_agc[] = {
179	{
180		nitems(rtl8192eu_agc_vals),
181		rtl8192eu_agc_vals,
182		{ 0 },
183		NULL
184	}
185};
186
187/*
188 * RF initialization values.
189 */
190static const uint8_t rtl8192eu_rf0_regs[] = {
191	0x7f, 0x81, 0x00, 0x08, 0x18, 0x19, 0x1b, 0x1e, 0x1f, 0x2f, 0x3f,
192	0x42, 0x57, 0x58, 0x67, 0x83, 0xb0, 0xb1, 0xb2, 0xb4, 0xb5, 0xb6,
193	0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbf, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6,
194	0xc7, 0xc8, 0xc9, 0xca, 0xdf, 0xef, 0x51, 0x52, 0x53, 0x56, 0x35,
195	0x35, 0x35, 0x36, 0x36, 0x36, 0x36, 0x18, 0x5a, 0x19, 0x34, 0x34,
196	0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x00, 0x84,
197	0x86, 0x87, 0x8e, 0x8f, 0xef, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b,
198	0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0xef,
199	0x18, 0x1e, 0x1f, 0x00
200}, rtl8192eu_rf1_regs[] = {
201	0x7f, 0x81, 0x00, 0x08, 0x18, 0x19, 0x1b, 0x1e, 0x1f, 0x2f, 0x3f,
202	0x42, 0x57, 0x58, 0x67, 0x7f, 0x81, 0x83, 0xdf, 0xef, 0x51, 0x52,
203	0x53, 0x56, 0x35, 0x35, 0x35, 0x36, 0x36, 0x36, 0x36, 0x18, 0x5a,
204	0x19, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34,
205	0x34, 0x00, 0x84, 0x86, 0x87, 0x8e, 0x8f, 0xef, 0x3b, 0x3b, 0x3b,
206	0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b,
207	0x3b, 0x3b, 0xef, 0x00, 0x1e, 0x1f, 0x00
208};
209
210static const uint32_t rtl8192eu_rf0_vals[] = {
211	0x00082, 0x3fc00, 0x30000, 0x08400, 0x00407, 0x00012, 0x00064,
212	0x80009, 0x00880, 0x1a060, 0x00000, 0x060c0, 0xd0000, 0xbe180,
213	0x01552, 0x00000, 0xff9f1, 0x55418, 0x8cc00, 0x43083, 0x08166,
214	0x0803e, 0x1c69f, 0x0407f, 0x80001, 0x40001, 0x00400, 0xc0000,
215	0x02400, 0x00009, 0x40c91, 0x99999, 0x000a3, 0x88820, 0x76c06,
216	0x00000, 0x80000, 0x00180, 0x001a0, 0x69545, 0x7e45e, 0x00071,
217	0x51ff3, 0x000a8, 0x001e2, 0x002a8, 0x01c24, 0x09c24, 0x11c24,
218	0x19c24, 0x00c07, 0x48000, 0x739d0, 0x0add7, 0x09dd4, 0x08dd1,
219	0x07dce, 0x06dcb, 0x05dc8, 0x04dc5, 0x034cc, 0x0244f, 0x0144c,
220	0x00014, 0x30159, 0x68180, 0x0014e, 0x48e00, 0x65540, 0x88000,
221	0x020a0, 0xf02b0, 0xef7b0, 0xd4fb0, 0xcf060, 0xb0090, 0xa0080,
222	0x90080, 0x8f780, 0x78730, 0x60fb0, 0x5ffa0, 0x40620, 0x37090,
223	0x20080, 0x1f060, 0x0ffb0, 0x000a0, 0x0fc07, 0x00001, 0x80000,
224	0x33e70
225}, rtl8192eu_rf1_vals[] = {
226	0x00082, 0x3fc00, 0x30000, 0x08400, 0x00407, 0x00012, 0x00064,
227	0x80009, 0x00880, 0x1a060, 0x00000, 0x060c0, 0xd0000, 0xbe180,
228	0x01552, 0x00082, 0x3f000, 0x00000, 0x00180, 0x001a0, 0x69545,
229	0x7e42e, 0x00071, 0x51ff3, 0x000a8, 0x001e0, 0x002a8, 0x01ca8,
230	0x09c24, 0x11c24, 0x19c24, 0x00c07, 0x48000, 0x739d0, 0x0add7,
231	0x09dd4, 0x08dd1, 0x07dce, 0x06dcb, 0x05dc8, 0x04dc5, 0x034cc,
232	0x0244f, 0x0144c, 0x00014, 0x30159, 0x68180, 0x000ce, 0x48a00,
233	0x65540, 0x88000, 0x020a0, 0xf02b0, 0xef7b0, 0xd4fb0, 0xcf060,
234	0xb0090, 0xa0080, 0x90080, 0x8f780, 0x78730, 0x60fb0, 0x5ffa0,
235	0x40620, 0x37090, 0x20080, 0x1f060, 0x0ffb0, 0x000a0, 0x10159,
236	0x00001, 0x80000, 0x33e70
237};
238
239static const struct rtwn_rf_prog rtl8192eu_rf[] = {
240	/* RF chain 0. */
241	{
242		nitems(rtl8192eu_rf0_regs),
243		rtl8192eu_rf0_regs,
244		rtl8192eu_rf0_vals,
245		{ 0 },
246		NULL
247	},
248	{ 0, NULL, NULL, { 0 },	NULL },
249	/* RF chain 1. */
250	{
251		nitems(rtl8192eu_rf1_regs),
252		rtl8192eu_rf1_regs,
253		rtl8192eu_rf1_vals,
254		{ 0 },
255		NULL
256	},
257	{ 0, NULL, NULL, { 0 }, NULL }
258};
259
260#endif	/* R92E_PRIV_H */
261