xref: /freebsd/sys/dev/rtwn/rtl8188e/r88e_priv.h (revision 5dae51da3da0cc94d17bd67b308fad304ebec7e0)
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 R88E_PRIV_H
22 #define R88E_PRIV_H
23 
24 #include <dev/rtwn/rtl8188e/r88e_rom_defs.h>
25 
26 /*
27  * Parsed Tx power (diff) values.
28  */
29 struct rtwn_r88e_txpwr {
30 	uint8_t		cck_tx_pwr[R88E_GROUP_2G];
31 	uint8_t		ht40_tx_pwr[R88E_GROUP_2G - 1];
32 	int8_t		ofdm_tx_pwr_diff;
33 	int8_t		bw20_tx_pwr_diff;
34 };
35 
36 
37 /*
38  * MAC initialization values.
39  */
40 static const struct rtwn_mac_prog rtl8188eu_mac[] = {
41 	{ 0x026, 0x41 }, { 0x027, 0x35 }, { 0x040, 0x00 }, { 0x428, 0x0a },
42 	{ 0x429, 0x10 }, { 0x430, 0x00 }, { 0x431, 0x01 }, { 0x432, 0x02 },
43 	{ 0x433, 0x04 }, { 0x434, 0x05 }, { 0x435, 0x06 }, { 0x436, 0x07 },
44 	{ 0x437, 0x08 }, { 0x438, 0x00 }, { 0x439, 0x00 }, { 0x43a, 0x01 },
45 	{ 0x43b, 0x02 }, { 0x43c, 0x04 }, { 0x43d, 0x05 }, { 0x43e, 0x06 },
46 	{ 0x43f, 0x07 }, { 0x440, 0x5d }, { 0x441, 0x01 }, { 0x442, 0x00 },
47 	{ 0x444, 0x15 }, { 0x445, 0xf0 }, { 0x446, 0x0f }, { 0x447, 0x00 },
48 	{ 0x458, 0x41 }, { 0x459, 0xa8 }, { 0x45a, 0x72 }, { 0x45b, 0xb9 },
49 	{ 0x460, 0x66 }, { 0x461, 0x66 }, { 0x480, 0x08 }, { 0x4c8, 0xff },
50 	{ 0x4c9, 0x08 }, { 0x4cc, 0xff }, { 0x4cd, 0xff }, { 0x4ce, 0x01 },
51 	{ 0x4d3, 0x01 }, { 0x500, 0x26 }, { 0x501, 0xa2 }, { 0x502, 0x2f },
52 	{ 0x503, 0x00 }, { 0x504, 0x28 }, { 0x505, 0xa3 }, { 0x506, 0x5e },
53 	{ 0x507, 0x00 }, { 0x508, 0x2b }, { 0x509, 0xa4 }, { 0x50a, 0x5e },
54 	{ 0x50b, 0x00 }, { 0x50c, 0x4f }, { 0x50d, 0xa4 }, { 0x50e, 0x00 },
55 	{ 0x50f, 0x00 }, { 0x512, 0x1c }, { 0x514, 0x0a }, { 0x516, 0x0a },
56 	{ 0x525, 0x4f }, { 0x550, 0x10 }, { 0x551, 0x10 }, { 0x559, 0x02 },
57 	{ 0x55d, 0xff }, { 0x605, 0x30 }, { 0x608, 0x0e }, { 0x609, 0x2a },
58 	{ 0x620, 0xff }, { 0x621, 0xff }, { 0x622, 0xff }, { 0x623, 0xff },
59 	{ 0x624, 0xff }, { 0x625, 0xff }, { 0x626, 0xff }, { 0x627, 0xff },
60 	{ 0x652, 0x20 }, { 0x63c, 0x0a }, { 0x63d, 0x0a }, { 0x63e, 0x0e },
61 	{ 0x63f, 0x0e }, { 0x640, 0x40 }, { 0x66e, 0x05 }, { 0x700, 0x21 },
62 	{ 0x701, 0x43 }, { 0x702, 0x65 }, { 0x703, 0x87 }, { 0x708, 0x21 },
63 	{ 0x709, 0x43 }, { 0x70a, 0x65 }, { 0x70b, 0x87 }
64 };
65 
66 /*
67  * Baseband initialization values.
68  */
69 static const uint16_t rtl8188eu_bb_regs[] = {
70 	0x800, 0x804, 0x808, 0x80c, 0x810, 0x814, 0x818, 0x81c,
71 	0x820, 0x824, 0x828, 0x82c, 0x830, 0x834, 0x838, 0x83c,
72 	0x840, 0x844, 0x848, 0x84c, 0x850, 0x854, 0x858, 0x85c,
73 	0x860, 0x864, 0x868, 0x86c, 0x870, 0x874, 0x878, 0x87c,
74 	0x880, 0x884, 0x888, 0x88c, 0x890, 0x894, 0x898, 0x89c,
75 	0x900, 0x904, 0x908, 0x90c, 0x910, 0x914, 0xa00, 0xa04,
76 	0xa08, 0xa0c, 0xa10, 0xa14, 0xa18, 0xa1c, 0xa20, 0xa24,
77 	0xa28, 0xa2c, 0xa70, 0xa74, 0xa78, 0xa7c, 0xa80, 0xb2c,
78 	0xc00, 0xc04, 0xc08, 0xc0c, 0xc10, 0xc14, 0xc18, 0xc1c,
79 	0xc20, 0xc24, 0xc28, 0xc2c, 0xc30, 0xc34, 0xc38, 0xc3c,
80 	0xc40, 0xc44, 0xc48, 0xc4c, 0xc50, 0xc54, 0xc58, 0xc5c,
81 	0xc60, 0xc64, 0xc68, 0xc6c, 0xc70, 0xc74, 0xc78, 0xc7c,
82 	0xc80, 0xc84, 0xc88, 0xc8c, 0xc90, 0xc94, 0xc98, 0xc9c,
83 	0xca0, 0xca4, 0xca8, 0xcac, 0xcb0, 0xcb4, 0xcb8, 0xcbc,
84 	0xcc0, 0xcc4, 0xcc8, 0xccc, 0xcd0, 0xcd4, 0xcd8, 0xcdc,
85 	0xce0, 0xce4, 0xce8, 0xcec, 0xd00, 0xd04, 0xd08, 0xd0c,
86 	0xd10, 0xd14, 0xd18, 0xd2c, 0xd30, 0xd34, 0xd38, 0xd3c,
87 	0xd40, 0xd44, 0xd48, 0xd4c, 0xd50, 0xd54, 0xd58, 0xd5c,
88 	0xd60, 0xd64, 0xd68, 0xd6c, 0xd70, 0xd74, 0xd78, 0xe00,
89 	0xe04, 0xe08, 0xe10, 0xe14, 0xe18, 0xe1c, 0xe28, 0xe30,
90 	0xe34, 0xe38, 0xe3c, 0xe40, 0xe44, 0xe48, 0xe4c, 0xe50,
91 	0xe54, 0xe58, 0xe5c, 0xe60, 0xe68, 0xe6c, 0xe70, 0xe74,
92 	0xe78, 0xe7c, 0xe80, 0xe84, 0xe88, 0xe8c, 0xed0, 0xed4,
93 	0xed8, 0xedc, 0xee0, 0xee8, 0xeec, 0xf14, 0xf4c, 0xf00
94 };
95 
96 static const uint32_t rtl8188eu_bb_vals[] = {
97 	0x80040000, 0x00000003, 0x0000fc00, 0x0000000a, 0x10001331,
98 	0x020c3d10, 0x02200385, 0x00000000, 0x01000100, 0x00390204,
99 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
100 	0x00000000, 0x00010000, 0x00000000, 0x00000000, 0x00000000,
101 	0x00000000, 0x00000000, 0x569a11a9, 0x01000014, 0x66f60110,
102 	0x061f0649, 0x00000000, 0x27272700, 0x07000760, 0x25004000,
103 	0x00000808, 0x00000000, 0xb0000c1c, 0x00000001, 0x00000000,
104 	0xccc000c0, 0x00000800, 0xfffffffe, 0x40302010, 0x00706050,
105 	0x00000000, 0x00000023, 0x00000000, 0x81121111, 0x00000002,
106 	0x00000201, 0x00d047c8, 0x80ff000c, 0x8c838300, 0x2e7f120f,
107 	0x9500bb78, 0x1114d028, 0x00881117, 0x89140f00, 0x1a1b0000,
108 	0x090e1317, 0x00000204, 0x00d30000, 0x101fbf00, 0x00000007,
109 	0x00000900, 0x225b0606, 0x218075b1, 0x80000000, 0x48071d40,
110 	0x03a05611, 0x000000e4, 0x6c6c6c6c, 0x08800000, 0x40000100,
111 	0x08800000, 0x40000100, 0x00000000, 0x00000000, 0x00000000,
112 	0x00000000, 0x69e9ac47, 0x469652af, 0x49795994, 0x0a97971c,
113 	0x1f7c403f, 0x000100b7, 0xec020107, 0x007f037f, 0x69553420,
114 	0x43bc0094, 0x00013169, 0x00250492, 0x00000000, 0x7112848b,
115 	0x47c00bff, 0x00000036, 0x2c7f000d, 0x020610db, 0x0000001f,
116 	0x00b91612, 0x390000e4, 0x20f60000, 0x40000100, 0x20200000,
117 	0x00091521, 0x00000000, 0x00121820, 0x00007f7f, 0x00000000,
118 	0x000300a0, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
119 	0x00000000, 0x28000000, 0x00000000, 0x00000000, 0x00000000,
120 	0x00000000, 0x00000000, 0x00000000, 0x64b22427, 0x00766932,
121 	0x00222222, 0x00000000, 0x37644302, 0x2f97d40c, 0x00000740,
122 	0x00020401, 0x0000907f, 0x20010201, 0xa0633333, 0x3333bc43,
123 	0x7a8f5b6f, 0xcc979975, 0x00000000, 0x80608000, 0x00000000,
124 	0x00127353, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
125 	0x6437140a, 0x00000000, 0x00000282, 0x30032064, 0x4653de68,
126 	0x04518a3c, 0x00002101, 0x2a201c16, 0x1812362e, 0x322c2220,
127 	0x000e3c24, 0x2d2d2d2d, 0x2d2d2d2d, 0x0390272d, 0x2d2d2d2d,
128 	0x2d2d2d2d, 0x2d2d2d2d, 0x2d2d2d2d, 0x00000000, 0x1000dc1f,
129 	0x10008c1f, 0x02140102, 0x681604c2, 0x01007c00, 0x01004800,
130 	0xfb000000, 0x000028d1, 0x1000dc1f, 0x10008c1f, 0x02140102,
131 	0x28160d05, 0x00000008, 0x001b25a4, 0x00c00014, 0x00c00014,
132 	0x01000014, 0x01000014, 0x01000014, 0x01000014, 0x00c00014,
133 	0x01000014, 0x00c00014, 0x00c00014, 0x00c00014, 0x00c00014,
134 	0x00000014, 0x00000014, 0x21555448, 0x01c00014, 0x00000003,
135 	0x00000000, 0x00000300
136 };
137 
138 static const struct rtwn_bb_prog rtl8188eu_bb[] = {
139 	{
140 		nitems(rtl8188eu_bb_regs),
141 		rtl8188eu_bb_regs,
142 		rtl8188eu_bb_vals,
143 		{ 0 },
144 		NULL
145 	}
146 };
147 
148 static const uint32_t rtl8188eu_agc_vals[] = {
149 	0xfb000001, 0xfb010001, 0xfb020001, 0xfb030001, 0xfb040001,
150 	0xfb050001, 0xfa060001, 0xf9070001, 0xf8080001, 0xf7090001,
151 	0xf60a0001, 0xf50b0001, 0xf40c0001, 0xf30d0001, 0xf20e0001,
152 	0xf10f0001, 0xf0100001, 0xef110001, 0xee120001, 0xed130001,
153 	0xec140001, 0xeb150001, 0xea160001, 0xe9170001, 0xe8180001,
154 	0xe7190001, 0xe61a0001, 0xe51b0001, 0xe41c0001, 0xe31d0001,
155 	0xe21e0001, 0xe11f0001, 0x8a200001, 0x89210001, 0x88220001,
156 	0x87230001, 0x86240001, 0x85250001, 0x84260001, 0x83270001,
157 	0x82280001, 0x6b290001, 0x6a2a0001, 0x692b0001, 0x682c0001,
158 	0x672d0001, 0x662e0001, 0x652f0001, 0x64300001, 0x63310001,
159 	0x62320001, 0x61330001, 0x46340001, 0x45350001, 0x44360001,
160 	0x43370001, 0x42380001, 0x41390001, 0x403a0001, 0x403b0001,
161 	0x403c0001, 0x403d0001, 0x403e0001, 0x403f0001, 0xfb400001,
162 	0xfb410001, 0xfb420001, 0xfb430001, 0xfb440001, 0xfb450001,
163 	0xfb460001, 0xfb470001, 0xfb480001, 0xfa490001, 0xf94a0001,
164 	0xf84B0001, 0xf74c0001, 0xf64d0001, 0xf54e0001, 0xf44f0001,
165 	0xf3500001, 0xf2510001, 0xf1520001, 0xf0530001, 0xef540001,
166 	0xee550001, 0xed560001, 0xec570001, 0xeb580001, 0xea590001,
167 	0xe95a0001, 0xe85b0001, 0xe75c0001, 0xe65d0001, 0xe55e0001,
168 	0xe45f0001, 0xe3600001, 0xe2610001, 0xc3620001, 0xc2630001,
169 	0xc1640001, 0x8b650001, 0x8a660001, 0x89670001, 0x88680001,
170 	0x87690001, 0x866a0001, 0x856b0001, 0x846c0001, 0x676d0001,
171 	0x666e0001, 0x656f0001, 0x64700001, 0x63710001, 0x62720001,
172 	0x61730001, 0x60740001, 0x46750001, 0x45760001, 0x44770001,
173 	0x43780001, 0x42790001, 0x417a0001, 0x407b0001, 0x407c0001,
174 	0x407d0001, 0x407e0001, 0x407f0001
175 };
176 
177 static const struct rtwn_agc_prog rtl8188eu_agc[] = {
178 	{
179 		nitems(rtl8188eu_agc_vals),
180 		rtl8188eu_agc_vals,
181 		{ 0 },
182 		NULL
183 	}
184 };
185 
186 /*
187  * RF initialization values.
188  */
189 static const uint8_t rtl8188eu_rf_regs[] = {
190 	0x00, 0x08, 0x18, 0x19, 0x1e, 0x1f, 0x2f, 0x3f, 0x42, 0x57,
191 	0x58, 0x67, 0x83, 0xb0, 0xb1, 0xb2, 0xb4, 0xb6, 0xb7, 0xb8,
192 	0xb9, 0xba, 0xbb, 0xbf, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
193 	0xc8, 0xc9, 0xca, 0xdf, 0xef, 0x51, 0x52, 0x53, 0x56,
194 	0x35, 0x35, 0x35, 0x36, 0x36, 0x36, 0x36, 0xb6, 0x18, 0x5a,
195 	0x19, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34,
196 	0x34, 0x34, 0x00, 0x84, 0x86, 0x87, 0x8e, 0x8f, 0xef, 0x3b,
197 	0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b,
198 	0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0xef, 0x00, 0x18, 0xfe, 0xfe,
199 	0x1f, 0xfe, 0xfe, 0x1e, 0x1f, 0x00
200 };
201 
202 static const uint32_t rtl8188eu_rf_vals[] = {
203 	0x30000, 0x84000, 0x00407, 0x00012, 0x80009, 0x00880, 0x1a060,
204 	0x00000, 0x060c0, 0xd0000, 0xbe180, 0x01552, 0x00000, 0xff8fc,
205 	0x54400, 0xccc19, 0x43003, 0x4953e, 0x1c718, 0x060ff, 0x80001,
206 	0x40000, 0x00400, 0xc0000, 0x02400, 0x00009, 0x40c91, 0x99999,
207 	0x000a3, 0x88820, 0x76c06, 0x00000, 0x80000, 0x00180, 0x001a0,
208 	0x6b27d, 0x7e49d, 0x00073, 0x51ff3, 0x00086, 0x00186,
209 	0x00286, 0x01c25, 0x09c25, 0x11c25, 0x19c25, 0x48538, 0x00c07,
210 	0x4bd00, 0x739d0, 0x0adf3, 0x09df0, 0x08ded, 0x07dea, 0x06de7,
211 	0x054ee, 0x044eb, 0x034e8, 0x0246b, 0x01468, 0x0006d, 0x30159,
212 	0x68200, 0x000ce, 0x48a00, 0x65540, 0x88000, 0x020a0, 0xf02b0,
213 	0xef7b0, 0xd4fb0, 0xcf060, 0xb0090, 0xa0080, 0x90080, 0x8f780,
214 	0x722b0, 0x6f7b0, 0x54fb0, 0x4f060, 0x30090, 0x20080, 0x10080,
215 	0x0f780, 0x000a0, 0x10159, 0x0f407, 0x0c350, 0x0c350, 0x80003,
216 	0x0c350, 0x0c350, 0x00001, 0x80000, 0x33e60
217 };
218 
219 static const struct rtwn_rf_prog rtl8188eu_rf[] = {
220 	{
221 		nitems(rtl8188eu_rf_regs),
222 		rtl8188eu_rf_regs,
223 		rtl8188eu_rf_vals,
224 		{ 0 },
225 		NULL
226 	},
227 	{ 0, NULL, NULL, { 0 }, NULL }
228 };
229 
230 
231 struct rtwn_r88e_txagc {
232 	uint8_t	pwr[R88E_GROUP_2G][20];	/* RTWN_RIDX_MCS(7) + 1 */
233 };
234 
235 /*
236  * Per RF chain/group/rate Tx gain values.
237  */
238 static const struct rtwn_r88e_txagc r88e_txagc[] = {
239 	{ {	/* Chain 0. */
240 	{	/* Group 0. */
241 	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
242 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* OFDM6~54. */
243 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
244 	},
245 	{	/* Group 1. */
246 	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
247 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* OFDM6~54. */
248 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
249 	},
250 	{	/* Group 2. */
251 	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
252 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* OFDM6~54. */
253 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
254 	},
255 	{	/* Group 3. */
256 	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
257 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* OFDM6~54. */
258 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
259 	},
260 	{	/* Group 4. */
261 	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
262 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* OFDM6~54. */
263 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
264 	},
265 	{	/* Group 5. */
266 	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
267 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* OFDM6~54. */
268 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
269 	}
270 	} }
271 };
272 
273 #endif	/* R88E_PRIV_H */
274