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