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 */
29struct 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 */
39static 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 */
68static 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
95static 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
137static 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
147static 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
176static 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 */
188static 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
201static 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
218static 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