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