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