1 /*	$NetBSD: arn5416reg.h,v 1.1 2013/03/30 02:53:01 christos Exp $	*/
2 /*	$OpenBSD: ar5416reg.h,v 1.5 2012/10/20 09:54:20 stsp Exp $	*/
3 
4 /*-
5  * Copyright (c) 2009 Damien Bergamini <damien.bergamini@free.fr>
6  * Copyright (c) 2008-2009 Atheros Communications Inc.
7  *
8  * Permission to use, copy, modify, and/or distribute this software for any
9  * purpose with or without fee is hereby granted, provided that the above
10  * copyright notice and this permission notice appear in all copies.
11  *
12  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
15  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19  */
20 
21 #ifndef _ARN5416REG_H_
22 #define _ARN5416REG_H_
23 
24 #define AR5416_MAX_CHAINS	3
25 
26 #define AR5416_PHY_CCA_MAX_GOOD_VALUE	( -85)
27 
28 /*
29  * ROM layout used by AR5416, AR9160 and AR9280.
30  */
31 #define AR5416_EEP_START_LOC		256
32 #define AR5416_NUM_5G_CAL_PIERS		8
33 #define AR5416_NUM_2G_CAL_PIERS		4
34 #define AR5416_NUM_5G_20_TARGET_POWERS	8
35 #define AR5416_NUM_5G_40_TARGET_POWERS	8
36 #define AR5416_NUM_2G_CCK_TARGET_POWERS	3
37 #define AR5416_NUM_2G_20_TARGET_POWERS	4
38 #define AR5416_NUM_2G_40_TARGET_POWERS	4
39 #define AR5416_NUM_CTLS			24
40 #define AR5416_NUM_BAND_EDGES		8
41 #define AR5416_NUM_PD_GAINS		4
42 #define AR5416_PD_GAINS_IN_MASK		4
43 #define AR5416_PD_GAIN_ICEPTS		5
44 
45 struct ar5416_base_eep_header {
46 	uint16_t	length;
47 	uint16_t	checksum;
48 	uint16_t	version;
49 	uint8_t		opCapFlags;
50 	uint8_t		eepMisc;
51 	uint16_t	regDmn[2];
52 	uint8_t		macAddr[6];
53 	uint8_t		rxMask;
54 	uint8_t		txMask;
55 	uint16_t	rfSilent;
56 	uint16_t	blueToothOptions;
57 	uint16_t	deviceCap;
58 	uint32_t	binBuildNumber;
59 	uint8_t		deviceType;
60 	/* End of common header. */
61 	uint8_t		pwdclkind;
62 	uint8_t		fastClk5g;
63 	uint8_t		divChain;
64 	uint8_t		rxGainType;
65 #define AR5416_EEP_RXGAIN_23DB_BACKOFF	0
66 #define AR5416_EEP_RXGAIN_13DB_BACKOFF	1
67 #define AR5416_EEP_RXGAIN_ORIG		2
68 
69 	uint8_t		dacHiPwrMode_5G;
70 	uint8_t		openLoopPwrCntl;
71 	uint8_t		dacLpMode;
72 	uint8_t		txGainType;
73 	uint8_t		rcChainMask;
74 	uint8_t		desiredScaleCCK;
75 	uint8_t		pwrTableOffset;
76 	uint8_t		frac_n_5g;
77 	uint8_t		futureBase[21];
78 } __packed;
79 
80 struct ar5416_modal_eep_header {
81 	uint32_t	antCtrlChain[AR5416_MAX_CHAINS];
82 	uint32_t	antCtrlCommon;
83 	uint8_t		antennaGainCh[AR5416_MAX_CHAINS];
84 	uint8_t		switchSettling;
85 	uint8_t		txRxAttenCh[AR5416_MAX_CHAINS];
86 	uint8_t		rxTxMarginCh[AR5416_MAX_CHAINS];
87 	uint8_t		adcDesiredSize;
88 	uint8_t		pgaDesiredSize;
89 	uint8_t		xlnaGainCh[AR5416_MAX_CHAINS];
90 	uint8_t		txEndToXpaOff;
91 	uint8_t		txEndToRxOn;
92 	uint8_t		txFrameToXpaOn;
93 	uint8_t		thresh62;
94 	uint8_t		noiseFloorThreshCh[AR5416_MAX_CHAINS];
95 	uint8_t		xpdGain;
96 	uint8_t		xpd;
97 	uint8_t		iqCalICh[AR5416_MAX_CHAINS];
98 	uint8_t		iqCalQCh[AR5416_MAX_CHAINS];
99 	uint8_t		pdGainOverlap;
100 	uint8_t		ob;
101 	uint8_t		db;
102 	uint8_t		xpaBiasLvl;
103 	uint8_t		pwrDecreaseFor2Chain;
104 	uint8_t		pwrDecreaseFor3Chain;
105 	uint8_t		txFrameToDataStart;
106 	uint8_t		txFrameToPaOn;
107 	uint8_t		ht40PowerIncForPdadc;
108 	uint8_t		bswAtten[AR5416_MAX_CHAINS];
109 	uint8_t		bswMargin[AR5416_MAX_CHAINS];
110 	uint8_t		swSettleHt40;
111 	uint8_t		xatten2Db[AR5416_MAX_CHAINS];
112 	uint8_t		xatten2Margin[AR5416_MAX_CHAINS];
113 	uint8_t		ob_ch1;
114 	uint8_t		db_ch1;
115 	uint8_t		flagBits;
116 #define AR5416_EEP_FLAG_USEANT1		0x01
117 #define AR5416_EEP_FLAG_FORCEXPAON	0x02
118 #define AR5416_EEP_FLAG_LOCALBIAS	0x04
119 #define AR5416_EEP_FLAG_FEMBANDSELECT	0x08
120 #define AR5416_EEP_FLAG_XLNABUFIN	0x10
121 #define AR5416_EEP_FLAG_XLNAISEL_M	0x60
122 #define AR5416_EEP_FLAG_XLNAISEL_S	5
123 #define AR5416_EEP_FLAG_XLNABUFMODE	0x80
124 
125 	uint8_t		miscBits;
126 #define AR5416_EEP_MISC_TX_DAC_SCALE_CCK_M	0x03
127 #define AR5416_EEP_MISC_TX_DAC_SCALE_CCK_S	0
128 #define AR5416_EEP_MISC_TX_CLIP_M		0xfc
129 #define AR5416_EEP_MISC_TX_CLIP_S		2
130 
131 	uint16_t	xpaBiasLvlFreq[3];
132 	uint8_t		futureModal[6];
133 	struct		ar_spur_chan spurChans[AR_EEPROM_MODAL_SPURS];
134 } __packed;
135 
136 struct ar5416_cal_data_per_freq {
137 	uint8_t	pwrPdg[AR5416_NUM_PD_GAINS][AR5416_PD_GAIN_ICEPTS];
138 	uint8_t	vpdPdg[AR5416_NUM_PD_GAINS][AR5416_PD_GAIN_ICEPTS];
139 } __packed;
140 
141 struct ar5416_cal_ctl_data {
142 	struct ar_cal_ctl_edges
143 	    ctlEdges[AR5416_MAX_CHAINS][AR5416_NUM_BAND_EDGES];
144 } __packed;
145 
146 struct ar5416_eeprom {
147 	struct	ar5416_base_eep_header baseEepHeader;
148 	uint8_t custData[64];
149 	struct	ar5416_modal_eep_header modalHeader[2];
150 	uint8_t calFreqPier5G[AR5416_NUM_5G_CAL_PIERS];
151 	uint8_t calFreqPier2G[AR5416_NUM_2G_CAL_PIERS];
152 	struct	ar5416_cal_data_per_freq
153 	    calPierData5G[AR5416_MAX_CHAINS][AR5416_NUM_5G_CAL_PIERS];
154 	struct	ar5416_cal_data_per_freq
155 	    calPierData2G[AR5416_MAX_CHAINS][AR5416_NUM_2G_CAL_PIERS];
156 	struct	ar_cal_target_power_leg
157 	    calTargetPower5G[AR5416_NUM_5G_20_TARGET_POWERS];
158 	struct	ar_cal_target_power_ht
159 	    calTargetPower5GHT20[AR5416_NUM_5G_20_TARGET_POWERS];
160 	struct	ar_cal_target_power_ht
161 	    calTargetPower5GHT40[AR5416_NUM_5G_40_TARGET_POWERS];
162 	struct	ar_cal_target_power_leg
163 	    calTargetPowerCck[AR5416_NUM_2G_CCK_TARGET_POWERS];
164 	struct	ar_cal_target_power_leg
165 	    calTargetPower2G[AR5416_NUM_2G_20_TARGET_POWERS];
166 	struct	ar_cal_target_power_ht
167 	    calTargetPower2GHT20[AR5416_NUM_2G_20_TARGET_POWERS];
168 	struct	ar_cal_target_power_ht
169 	    calTargetPower2GHT40[AR5416_NUM_2G_40_TARGET_POWERS];
170 	uint8_t	ctlIndex[AR5416_NUM_CTLS];
171 	struct	ar5416_cal_ctl_data ctlData[AR5416_NUM_CTLS];
172 	uint8_t padding;
173 } __packed;
174 
175 /* Macro to "pack" registers to 16-bit to save some .rodata space. */
176 #define P(x)	(x)
177 
178 /*
179  * AR5416 initialization values.
180  */
181 static const uint16_t ar5416_regs[] = {
182 	P(0x01030), P(0x01070), P(0x010b0), P(0x010f0), P(0x08014),
183 	P(0x0801c), P(0x08120), P(0x081d0), P(0x09804), P(0x09820),
184 	P(0x09824), P(0x09828), P(0x09834), P(0x09838), P(0x09844),
185 	P(0x09848), P(0x0a848), P(0x0b848), P(0x09850), P(0x09858),
186 	P(0x0985c), P(0x09860), P(0x09864), P(0x09868), P(0x0986c),
187 	P(0x09914), P(0x09918), P(0x09924), P(0x09944), P(0x09960),
188 	P(0x0a960), P(0x0b960), P(0x09964), P(0x099bc), P(0x099c0),
189 	P(0x099c4), P(0x099c8), P(0x099cc), P(0x099d0), P(0x099d4),
190 	P(0x099d8), P(0x0a204), P(0x0a208), P(0x0a20c), P(0x0b20c),
191 	P(0x0c20c), P(0x0a21c), P(0x0a230), P(0x0a274), P(0x0a300),
192 	P(0x0a304), P(0x0a308), P(0x0a30c), P(0x0a310), P(0x0a314),
193 	P(0x0a318), P(0x0a31c), P(0x0a320), P(0x0a324), P(0x0a328),
194 	P(0x0a32c), P(0x0a330), P(0x0a334)
195 };
196 
197 static const uint32_t ar5416_vals_5g20[] = {
198 	0x00000230, 0x00000168, 0x00000e60, 0x0000a000, 0x03e803e8,
199 	0x128d93a7, 0x08f04800, 0x00003210, 0x00000300, 0x02020200,
200 	0x00000e0e, 0x0a020001, 0x00000e0e, 0x00000007, 0x1372161e,
201 	0x001a6a65, 0x001a6a65, 0x001a6a65, 0x6c48b4e0, 0x7ec82d2e,
202 	0x31395d5e, 0x00049d18, 0x0001ce00, 0x409a4190, 0x050cb081,
203 	0x000007d0, 0x000001b8, 0xd0058a0b, 0xffb81020, 0x00000900,
204 	0x00000900, 0x00000900, 0x00000000, 0x001a0a00, 0x038919be,
205 	0x06336f77, 0x6af6532c, 0x08f186c8, 0x00046384, 0x00000000,
206 	0x00000000, 0x00000880, 0xd6be4788, 0x002ec1e0, 0x002ec1e0,
207 	0x002ec1e0, 0x1883800a, 0x00000000, 0x0a1a9caa, 0x18010000,
208 	0x30032602, 0x48073e06, 0x560b4c0a, 0x641a600f, 0x7a4f6e1b,
209 	0x8c5b7e5a, 0x9d0f96cf, 0xb51fa69f, 0xcb3fbd07, 0x0000d7bf,
210 	0x00000000, 0x00000000, 0x00000000
211 };
212 
213 #ifndef IEEE80211_NO_HT
214 static const uint32_t ar5416_vals_5g40[] = {
215 	0x00000460, 0x000002d0, 0x00001cc0, 0x00014000, 0x07d007d0,
216 	0x128d93cf, 0x08f04800, 0x00003210, 0x000003c4, 0x02020200,
217 	0x00000e0e, 0x0a020001, 0x00000e0e, 0x00000007, 0x1372161e,
218 	0x001a6a65, 0x001a6a65, 0x001a6a65, 0x6d48b4e0, 0x7ec82d2e,
219 	0x3139605e, 0x00049d18, 0x0001ce00, 0x409a4190, 0x050cb081,
220 	0x00000fa0, 0x00000370, 0xd0058a0b, 0xffb81020, 0x00000900,
221 	0x00000900, 0x00000900, 0x00000000, 0x001a0a00, 0x038919be,
222 	0x06336f77, 0x6af6532c, 0x08f186c8, 0x00046384, 0x00000000,
223 	0x00000000, 0x00000880, 0xd6be4788, 0x002ec1e0, 0x002ec1e0,
224 	0x002ec1e0, 0x1883800a, 0x00000000, 0x0a1a9caa, 0x18010000,
225 	0x30032602, 0x48073e06, 0x560b4c0a, 0x641a600f, 0x7a4f6e1b,
226 	0x8c5b7e5a, 0x9d0f96cf, 0xb51fa69f, 0xcb3fbcbf, 0x0000d7bf,
227 	0x00000000, 0x00000000, 0x00000000
228 };
229 
230 static const uint32_t ar5416_vals_2g40[] = {
231 	0x000002c0, 0x00000318, 0x00007c70, 0x00016000, 0x10801600,
232 	0x12e013d7, 0x08f04810, 0x0000320a, 0x000003c4, 0x02020200,
233 	0x00000e0e, 0x0a020001, 0x00000e0e, 0x00000007, 0x137216a0,
234 	0x00197a68, 0x00197a68, 0x00197a68, 0x6d48b0de, 0x7ec82d2e,
235 	0x3139605e, 0x00049d18, 0x0001ce00, 0x409a4190, 0x050cb081,
236 	0x00001130, 0x00000268, 0xd0058a0b, 0xffb81020, 0x00012d80,
237 	0x00012d80, 0x00012d80, 0x00001120, 0x001a0a00, 0x038919be,
238 	0x06336f77, 0x6af6532c, 0x08f186c8, 0x00046384, 0x00000000,
239 	0x00000000, 0x00000880, 0xd03e4788, 0x002ac120, 0x002ac120,
240 	0x002ac120, 0x1883800a, 0x00000210, 0x0a1a7caa, 0x18010000,
241 	0x2e032402, 0x4a0a3c06, 0x621a540b, 0x764f6c1b, 0x845b7a5a,
242 	0x950f8ccf, 0xa5cf9b4f, 0xbddfaf1f, 0xd1ffc93f, 0x00000000,
243 	0x00000000, 0x00000000, 0x00000000
244 };
245 #endif
246 
247 static const uint32_t ar5416_vals_2g20[] = {
248 	0x00000160, 0x0000018c, 0x00003e38, 0x0000b000, 0x08400b00,
249 	0x12e013ab, 0x08f04810, 0x0000320a, 0x00000300, 0x02020200,
250 	0x00000e0e, 0x0a020001, 0x00000e0e, 0x00000007, 0x137216a0,
251 	0x00197a68, 0x00197a68, 0x00197a68, 0x6c48b0de, 0x7ec82d2e,
252 	0x31395d5e, 0x00049d18, 0x0001ce00, 0x409a4190, 0x050cb081,
253 	0x00000898, 0x00000134, 0xd0058a0b, 0xffb81020, 0x00012d80,
254 	0x00012d80, 0x00012d80, 0x00001120, 0x001a0a00, 0x038919be,
255 	0x06336f77, 0x6af6532c, 0x08f186c8, 0x00046384, 0x00000000,
256 	0x00000000, 0x00000880, 0xd03e4788, 0x002ac120, 0x002ac120,
257 	0x002ac120, 0x1883800a, 0x00000108, 0x0a1a7caa, 0x18010000,
258 	0x2e032402, 0x4a0a3c06, 0x621a540b, 0x764f6c1b, 0x845b7a5a,
259 	0x950f8ccf, 0xa5cf9b4f, 0xbddfaf1f, 0xd1ffc93f, 0x00000000,
260 	0x00000000, 0x00000000, 0x00000000
261 };
262 
263 static const uint16_t ar5416_cm_regs[] = {
264 	P(0x0000c), P(0x00030), P(0x00034), P(0x00040), P(0x00044),
265 	P(0x00048), P(0x0004c), P(0x00050), P(0x00054), P(0x00800),
266 	P(0x00804), P(0x00808), P(0x0080c), P(0x00810), P(0x00814),
267 	P(0x00818), P(0x0081c), P(0x00820), P(0x00824), P(0x01040),
268 	P(0x01044), P(0x01048), P(0x0104c), P(0x01050), P(0x01054),
269 	P(0x01058), P(0x0105c), P(0x01060), P(0x01064), P(0x01230),
270 	P(0x01270), P(0x01038), P(0x01078), P(0x010b8), P(0x010f8),
271 	P(0x01138), P(0x01178), P(0x011b8), P(0x011f8), P(0x01238),
272 	P(0x01278), P(0x012b8), P(0x012f8), P(0x01338), P(0x01378),
273 	P(0x013b8), P(0x013f8), P(0x01438), P(0x01478), P(0x014b8),
274 	P(0x014f8), P(0x01538), P(0x01578), P(0x015b8), P(0x015f8),
275 	P(0x01638), P(0x01678), P(0x016b8), P(0x016f8), P(0x01738),
276 	P(0x01778), P(0x017b8), P(0x017f8), P(0x0103c), P(0x0107c),
277 	P(0x010bc), P(0x010fc), P(0x0113c), P(0x0117c), P(0x011bc),
278 	P(0x011fc), P(0x0123c), P(0x0127c), P(0x012bc), P(0x012fc),
279 	P(0x0133c), P(0x0137c), P(0x013bc), P(0x013fc), P(0x0143c),
280 	P(0x0147c), P(0x04030), P(0x0403c), P(0x07010), P(0x07038),
281 	P(0x08004), P(0x08008), P(0x0800c), P(0x08018), P(0x08020),
282 	P(0x08038), P(0x0803c), P(0x08048), P(0x08054), P(0x08058),
283 	P(0x0805c), P(0x08060), P(0x08064), P(0x080c0), P(0x080c4),
284 	P(0x080c8), P(0x080cc), P(0x080d0), P(0x080d4), P(0x080d8),
285 	P(0x080e0), P(0x080e4), P(0x080e8), P(0x080ec), P(0x080f0),
286 	P(0x080f4), P(0x080f8), P(0x080fc), P(0x08100), P(0x08104),
287 	P(0x08108), P(0x0810c), P(0x08110), P(0x08118), P(0x0811c),
288 	P(0x08124), P(0x08128), P(0x0812c), P(0x08130), P(0x08134),
289 	P(0x08138), P(0x0813c), P(0x08144), P(0x08168), P(0x0816c),
290 	P(0x08170), P(0x08174), P(0x08178), P(0x0817c), P(0x081c4),
291 	P(0x081ec), P(0x081f0), P(0x081f4), P(0x081f8), P(0x081fc),
292 	P(0x08200), P(0x08204), P(0x08208), P(0x0820c), P(0x08210),
293 	P(0x08214), P(0x08218), P(0x0821c), P(0x08220), P(0x08224),
294 	P(0x08228), P(0x0822c), P(0x08230), P(0x08234), P(0x08238),
295 	P(0x0823c), P(0x08240), P(0x08244), P(0x08248), P(0x0824c),
296 	P(0x08250), P(0x08254), P(0x08258), P(0x0825c), P(0x08260),
297 	P(0x08264), P(0x08270), P(0x08274), P(0x08278), P(0x0827c),
298 	P(0x08284), P(0x08288), P(0x0828c), P(0x08294), P(0x08298),
299 	P(0x08300), P(0x08304), P(0x08308), P(0x0830c), P(0x08310),
300 	P(0x08314), P(0x08318), P(0x08328), P(0x0832c), P(0x08330),
301 	P(0x08334), P(0x08338), P(0x0833c), P(0x08340), P(0x09808),
302 	P(0x0980c), P(0x09810), P(0x09814), P(0x0981c), P(0x0982c),
303 	P(0x09830), P(0x0983c), P(0x09840), P(0x0984c), P(0x09854),
304 	P(0x09900), P(0x09904), P(0x09908), P(0x0990c), P(0x0991c),
305 	P(0x09920), P(0x0a920), P(0x0b920), P(0x09928), P(0x0992c),
306 	P(0x09934), P(0x09938), P(0x0993c), P(0x09948), P(0x0994c),
307 	P(0x09954), P(0x09958), P(0x0c95c), P(0x0c968), P(0x09970),
308 	P(0x09974), P(0x09978), P(0x0997c), P(0x09980), P(0x09984),
309 	P(0x09988), P(0x0998c), P(0x09990), P(0x09994), P(0x09998),
310 	P(0x0999c), P(0x099a0), P(0x099a4), P(0x099a8), P(0x099ac),
311 	P(0x099b0), P(0x099dc), P(0x099e0), P(0x099e4), P(0x099e8),
312 	P(0x099ec), P(0x099fc), P(0x09b00), P(0x09b04), P(0x09b08),
313 	P(0x09b0c), P(0x09b10), P(0x09b14), P(0x09b18), P(0x09b1c),
314 	P(0x09b20), P(0x09b24), P(0x09b28), P(0x09b2c), P(0x09b30),
315 	P(0x09b34), P(0x09b38), P(0x09b3c), P(0x09b40), P(0x09b44),
316 	P(0x09b48), P(0x09b4c), P(0x09b50), P(0x09b54), P(0x09b58),
317 	P(0x09b5c), P(0x09b60), P(0x09b64), P(0x09b68), P(0x09b6c),
318 	P(0x09b70), P(0x09b74), P(0x09b78), P(0x09b7c), P(0x09b80),
319 	P(0x09b84), P(0x09b88), P(0x09b8c), P(0x09b90), P(0x09b94),
320 	P(0x09b98), P(0x09b9c), P(0x09ba0), P(0x09ba4), P(0x09ba8),
321 	P(0x09bac), P(0x09bb0), P(0x09bb4), P(0x09bb8), P(0x09bbc),
322 	P(0x09bc0), P(0x09bc4), P(0x09bc8), P(0x09bcc), P(0x09bd0),
323 	P(0x09bd4), P(0x09bd8), P(0x09bdc), P(0x09be0), P(0x09be4),
324 	P(0x09be8), P(0x09bec), P(0x09bf0), P(0x09bf4), P(0x09bf8),
325 	P(0x09bfc), P(0x0a210), P(0x0a214), P(0x0a218), P(0x0a220),
326 	P(0x0a224), P(0x0a228), P(0x0a22c), P(0x0a234), P(0x0a238),
327 	P(0x0a23c), P(0x0a240), P(0x0a244), P(0x0a248), P(0x0a24c),
328 	P(0x0a250), P(0x0a254), P(0x0a258), P(0x0a25c), P(0x0a260),
329 	P(0x0a268), P(0x0a26c), P(0x0b26c), P(0x0c26c), P(0x0d270),
330 	P(0x0a278), P(0x0a27c), P(0x0a338), P(0x0a33c), P(0x0a340),
331 	P(0x0a344), P(0x0a348), P(0x0a34c), P(0x0a350), P(0x0a354),
332 	P(0x0a358), P(0x0d35c), P(0x0d360), P(0x0d364), P(0x0d368),
333 	P(0x0d36c), P(0x0d370), P(0x0d374), P(0x0d378), P(0x0d37c),
334 	P(0x0d380), P(0x0d384), P(0x0a388), P(0x0a38c), P(0x0a390),
335 	P(0x0a394), P(0x0a398), P(0x0a39c), P(0x0a3a0), P(0x0a3a4),
336 	P(0x0a3a8), P(0x0a3ac), P(0x0a3b0), P(0x0a3b4), P(0x0a3b8),
337 	P(0x0a3bc), P(0x0a3c0), P(0x0a3c4), P(0x0a3c8), P(0x0a3cc),
338 	P(0x0a3d0), P(0x0a3d4), P(0x0a3dc), P(0x0a3e0)
339 };
340 
341 static const uint32_t ar5416_cm_vals[] = {
342 	0x00000000, 0x00020015, 0x00000005, 0x00000000, 0x00000008,
343 	0x00000008, 0x00000010, 0x00000000, 0x0000001f, 0x00000000,
344 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
345 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x002ffc0f,
346 	0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f,
347 	0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x00000000,
348 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
349 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
350 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
351 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
352 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
353 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
354 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
355 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
356 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
357 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
358 	0x00000000, 0x00000002, 0x00000002, 0x00000000, 0x000004c2,
359 	0x00000000, 0x00000000, 0x00000000, 0x00000700, 0x00000000,
360 	0x00000000, 0x00000000, 0x40000000, 0x00000000, 0x00000000,
361 	0x000fc78f, 0x0000000f, 0x00000000, 0x2a82301a, 0x05dc01e0,
362 	0x1f402710, 0x01f40000, 0x00001e00, 0x00000000, 0x00400000,
363 	0xffffffff, 0x0000ffff, 0x003f3f3f, 0x00000000, 0x00000000,
364 	0x00000000, 0x00000000, 0x00020000, 0x00020000, 0x00000001,
365 	0x00000052, 0x00000000, 0x00000168, 0x000100aa, 0x00003210,
366 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
367 	0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000,
368 	0x32143320, 0xfaa4fa50, 0x00000100, 0x00000000, 0x00000000,
369 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
370 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
371 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
372 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
373 	0x00000000, 0x00100000, 0x0010f400, 0x00000100, 0x0001e800,
374 	0x00000000, 0x00000000, 0x00000000, 0x400000ff, 0x00080922,
375 	0x88000010, 0x00000000, 0x40000000, 0x003e4180, 0x00000000,
376 	0x0000002c, 0x0000002c, 0x00000000, 0x00000000, 0x00000000,
377 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
378 	0x00000000, 0x00000000, 0x00000000, 0x00000007, 0x00000302,
379 	0x00000e00, 0x00070000, 0x00000000, 0x000107ff, 0x00000000,
380 	0xad848e19, 0x7d14e000, 0x9c0a9f6b, 0x00000000, 0x0000a000,
381 	0x00000000, 0x00200400, 0x206a002e, 0x1284233c, 0x00000859,
382 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10000fff,
383 	0x05100000, 0x05100000, 0x05100000, 0x00000001, 0x00000004,
384 	0x1e1f2022, 0x0a0b0c0d, 0x00000000, 0x9280b212, 0x00020028,
385 	0x5d50e188, 0x00081fff, 0x004b6a8e, 0x000003ce, 0x190fb515,
386 	0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000,
387 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
388 	0x00000000, 0x00000000, 0x00000001, 0x001fff00, 0x00000000,
389 	0x03051000, 0x00000000, 0x00000200, 0xaaaaaaaa, 0x3c466478,
390 	0x000000aa, 0x00001042, 0x00000000, 0x00000001, 0x00000002,
391 	0x00000003, 0x00000004, 0x00000005, 0x00000008, 0x00000009,
392 	0x0000000a, 0x0000000b, 0x0000000c, 0x0000000d, 0x00000010,
393 	0x00000011, 0x00000012, 0x00000013, 0x00000014, 0x00000015,
394 	0x00000018, 0x00000019, 0x0000001a, 0x0000001b, 0x0000001c,
395 	0x0000001d, 0x00000020, 0x00000021, 0x00000022, 0x00000023,
396 	0x00000024, 0x00000025, 0x00000028, 0x00000029, 0x0000002a,
397 	0x0000002b, 0x0000002c, 0x0000002d, 0x00000030, 0x00000031,
398 	0x00000032, 0x00000033, 0x00000034, 0x00000035, 0x00000035,
399 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
400 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
401 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
402 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000010,
403 	0x0000001a, 0x40806333, 0x00106c10, 0x009c4060, 0x018830c6,
404 	0x00000400, 0x00000bb5, 0x00000011, 0x20202020, 0x20202020,
405 	0x13c889af, 0x38490a20, 0x00007bb6, 0x0fff3ffc, 0x00000001,
406 	0x0000a000, 0x00000000, 0x0cc75380, 0x0f0f0f01, 0xdfa91f01,
407 	0x00000000, 0x0e79e5c6, 0x0e79e5c6, 0x0e79e5c6, 0x00820820,
408 	0x1ce739ce, 0x051701ce, 0x00000000, 0x00000000, 0x00000000,
409 	0x00000000, 0x3fffffff, 0x3fffffff, 0x3fffffff, 0x0003ffff,
410 	0x79a8aa1f, 0x07ffffef, 0x0fffffe7, 0x17ffffe5, 0x1fffffe4,
411 	0x37ffffe3, 0x3fffffe3, 0x57ffffe3, 0x5fffffe2, 0x7fffffe2,
412 	0x7f3c7bba, 0xf3307ff0, 0x08000000, 0x20202020, 0x20202020,
413 	0x1ce739ce, 0x000001ce, 0x00000001, 0x00000000, 0x00000000,
414 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
415 	0x00000000, 0x00000000, 0x00000000, 0x00000246, 0x20202020,
416 	0x20202020, 0x20202020, 0x1ce739ce, 0x000001ce
417 };
418 
419 static const struct athn_ini ar5416_ini = {
420 	.nregs		= __arraycount(ar5416_regs),
421 	.regs		= ar5416_regs,
422 	.vals_5g20	= ar5416_vals_5g20,
423 #ifndef IEEE80211_NO_HT
424 	.vals_5g40	= ar5416_vals_5g40,
425 	.vals_2g40	= ar5416_vals_2g40,
426 #endif
427 	.vals_2g20	= ar5416_vals_2g20,
428 	.ncmregs	= __arraycount(ar5416_cm_regs),
429 	.cmregs		= ar5416_cm_regs,
430 	.cmvals		= ar5416_cm_vals
431 };
432 
433 /*
434  * AR9160 initialization values.
435  */
436 static const uint16_t ar9160_regs[] = {
437 	P(0x01030), P(0x01070), P(0x010b0), P(0x010f0), P(0x08014),
438 	P(0x0801c), P(0x08120), P(0x081d0), P(0x09804), P(0x09820),
439 	P(0x09824), P(0x09828), P(0x09834), P(0x09838), P(0x09844),
440 	P(0x09848), P(0x0a848), P(0x0b848), P(0x09850), P(0x09858),
441 	P(0x0985c), P(0x09860), P(0x09864), P(0x09868), P(0x0986c),
442 	P(0x09914), P(0x09918), P(0x09924), P(0x09944), P(0x09960),
443 	P(0x0a960), P(0x0b960), P(0x09964), P(0x0c968), P(0x099bc),
444 	P(0x099c0), P(0x099c4), P(0x099c8), P(0x099cc), P(0x099d0),
445 	P(0x099d4), P(0x099d8), P(0x0a204), P(0x0a208), P(0x0a20c),
446 	P(0x0b20c), P(0x0c20c), P(0x0a21c), P(0x0a230), P(0x0a274),
447 	P(0x0a300), P(0x0a304), P(0x0a308), P(0x0a30c), P(0x0a310),
448 	P(0x0a314), P(0x0a318), P(0x0a31c), P(0x0a320), P(0x0a324),
449 	P(0x0a328), P(0x0a32c), P(0x0a330), P(0x0a334)
450 };
451 
452 static const uint32_t ar9160_vals_5g20[] = {
453 	0x00000230, 0x00000168, 0x00000e60, 0x0000a000, 0x03e803e8,
454 	0x128d93a7, 0x08f04800, 0x00003210, 0x00000300, 0x02020200,
455 	0x00000e0e, 0x0a020001, 0x00000e0e, 0x00000007, 0x0372161e,
456 	0x001a6a65, 0x001a6a65, 0x001a6a65, 0x6c48b4e2, 0x7ec82d2e,
457 	0x31395d5e, 0x00048d18, 0x0001ce00, 0x409a40d0, 0x050cb081,
458 	0x000007d0, 0x0000000a, 0xd00a8a07, 0xffb81020, 0x00009b40,
459 	0x00009b40, 0x00009b40, 0x00001120, 0x000003b5, 0x001a0600,
460 	0x038919be, 0x06336f77, 0x6af65329, 0x08f186c8, 0x00046384,
461 	0x00000000, 0x00000000, 0x00000880, 0xd6be4788, 0x002fc160,
462 	0x002fc160, 0x002fc160, 0x1883800a, 0x00000000, 0x0a1a9caa,
463 	0x18010000, 0x30032602, 0x48073e06, 0x560b4c0a, 0x641a600f,
464 	0x7a4f6e1b, 0x8c5b7e5a, 0x9d0f96cf, 0xb51fa69f, 0xcb3fbd07,
465 	0x0000d7bf, 0x00000000, 0x00000000, 0x00000000
466 };
467 
468 #ifndef IEEE80211_NO_HT
469 static const uint32_t ar9160_vals_5g40[] = {
470 	0x00000460, 0x000002d0, 0x00001cc0, 0x00014000, 0x07d007d0,
471 	0x128d93cf, 0x08f04800, 0x00003210, 0x000003c4, 0x02020200,
472 	0x00000e0e, 0x0a020001, 0x00000e0e, 0x00000007, 0x0372161e,
473 	0x001a6a65, 0x001a6a65, 0x001a6a65, 0x6d48b4e2, 0x7ec82d2e,
474 	0x3139605e, 0x00048d18, 0x0001ce00, 0x409a40d0, 0x050cb081,
475 	0x00000fa0, 0x00000014, 0xd00a8a07, 0xffb81020, 0x00009b40,
476 	0x00009b40, 0x00009b40, 0x00001120, 0x000003b5, 0x001a0600,
477 	0x038919be, 0x06336f77, 0x6af65329, 0x08f186c8, 0x00046384,
478 	0x00000000, 0x00000000, 0x00000880, 0xd6be4788, 0x002fc160,
479 	0x002fc160, 0x002fc160, 0x1883800a, 0x00000000, 0x0a1a9caa,
480 	0x18010000, 0x30032602, 0x48073e06, 0x560b4c0a, 0x641a600f,
481 	0x7a4f6e1b, 0x8c5b7e5a, 0x9d0f96cf, 0xb51fa69f, 0xcb3fbcbf,
482 	0x0000d7bf, 0x00000000, 0x00000000, 0x00000000
483 };
484 
485 static const uint32_t ar9160_vals_2g40[] = {
486 	0x000002c0, 0x00000318, 0x00007c70, 0x00016000, 0x10801600,
487 	0x12e013d7, 0x08f04810, 0x0000320a, 0x000003c4, 0x02020200,
488 	0x00000e0e, 0x0a020001, 0x00000e0e, 0x00000007, 0x037216a0,
489 	0x00197a68, 0x00197a68, 0x00197a68, 0x6d48b0e2, 0x7ec82d2e,
490 	0x3139605e, 0x00048d20, 0x0001ce00, 0x409a40d0, 0x050cb081,
491 	0x00001130, 0x00000016, 0xd00a8a0d, 0xffb81020, 0x00009b40,
492 	0x00009b40, 0x00009b40, 0x00001120, 0x000003ce, 0x001a0c00,
493 	0x038919be, 0x06336f77, 0x6af65329, 0x08f186c8, 0x00046384,
494 	0x00000000, 0x00000000, 0x00000880, 0xd03e4788, 0x002ac120,
495 	0x002ac120, 0x002ac120, 0x1883800a, 0x00000210, 0x0a1a7caa,
496 	0x18010000, 0x2e032402, 0x4a0a3c06, 0x621a540b, 0x764f6c1b,
497 	0x845b7a5a, 0x950f8ccf, 0xa5cf9b4f, 0xbddfaf1f, 0xd1ffc93f,
498 	0x00000000, 0x00000000, 0x00000000, 0x00000000
499 };
500 #endif
501 
502 static const uint32_t ar9160_vals_2g20[] = {
503 	0x00000160, 0x0000018c, 0x00003e38, 0x0000b000, 0x08400b00,
504 	0x12e013ab, 0x08f04810, 0x0000320a, 0x00000300, 0x02020200,
505 	0x00000e0e, 0x0a020001, 0x00000e0e, 0x00000007, 0x037216a0,
506 	0x00197a68, 0x00197a68, 0x00197a68, 0x6c48b0e2, 0x7ec82d2e,
507 	0x31395d5e, 0x00048d20, 0x0001ce00, 0x409a40d0, 0x050cb081,
508 	0x00000898, 0x0000000b, 0xd00a8a0d, 0xffb81020, 0x00009b40,
509 	0x00009b40, 0x00009b40, 0x00001120, 0x000003ce, 0x001a0c00,
510 	0x038919be, 0x06336f77, 0x6af65329, 0x08f186c8, 0x00046384,
511 	0x00000000, 0x00000000, 0x00000880, 0xd03e4788, 0x002ac120,
512 	0x002ac120, 0x002ac120, 0x1883800a, 0x00000108, 0x0a1a7caa,
513 	0x18010000, 0x2e032402, 0x4a0a3c06, 0x621a540b, 0x764f6c1b,
514 	0x845b7a5a, 0x950f8ccf, 0xa5cf9b4f, 0xbddfaf1f, 0xd1ffc93f,
515 	0x00000000, 0x00000000, 0x00000000, 0x00000000
516 };
517 
518 static const uint16_t ar9160_cm_regs[] = {
519 	P(0x0000c), P(0x00030), P(0x00034), P(0x00040), P(0x00044),
520 	P(0x00048), P(0x0004c), P(0x00050), P(0x00054), P(0x00800),
521 	P(0x00804), P(0x00808), P(0x0080c), P(0x00810), P(0x00814),
522 	P(0x00818), P(0x0081c), P(0x00820), P(0x00824), P(0x01040),
523 	P(0x01044), P(0x01048), P(0x0104c), P(0x01050), P(0x01054),
524 	P(0x01058), P(0x0105c), P(0x01060), P(0x01064), P(0x01230),
525 	P(0x01270), P(0x01038), P(0x01078), P(0x010b8), P(0x010f8),
526 	P(0x01138), P(0x01178), P(0x011b8), P(0x011f8), P(0x01238),
527 	P(0x01278), P(0x012b8), P(0x012f8), P(0x01338), P(0x01378),
528 	P(0x013b8), P(0x013f8), P(0x01438), P(0x01478), P(0x014b8),
529 	P(0x014f8), P(0x01538), P(0x01578), P(0x015b8), P(0x015f8),
530 	P(0x01638), P(0x01678), P(0x016b8), P(0x016f8), P(0x01738),
531 	P(0x01778), P(0x017b8), P(0x017f8), P(0x0103c), P(0x0107c),
532 	P(0x010bc), P(0x010fc), P(0x0113c), P(0x0117c), P(0x011bc),
533 	P(0x011fc), P(0x0123c), P(0x0127c), P(0x012bc), P(0x012fc),
534 	P(0x0133c), P(0x0137c), P(0x013bc), P(0x013fc), P(0x0143c),
535 	P(0x0147c), P(0x04030), P(0x0403c), P(0x07010), P(0x07038),
536 	P(0x08004), P(0x08008), P(0x0800c), P(0x08018), P(0x08020),
537 	P(0x08038), P(0x0803c), P(0x08048), P(0x08054), P(0x08058),
538 	P(0x0805c), P(0x08060), P(0x08064), P(0x080c0), P(0x080c4),
539 	P(0x080c8), P(0x080cc), P(0x080d0), P(0x080d4), P(0x080d8),
540 	P(0x080e0), P(0x080e4), P(0x080e8), P(0x080ec), P(0x080f0),
541 	P(0x080f4), P(0x080f8), P(0x080fc), P(0x08100), P(0x08104),
542 	P(0x08108), P(0x0810c), P(0x08110), P(0x08118), P(0x0811c),
543 	P(0x08124), P(0x08128), P(0x0812c), P(0x08130), P(0x08134),
544 	P(0x08138), P(0x0813c), P(0x08144), P(0x08168), P(0x0816c),
545 	P(0x08170), P(0x08174), P(0x08178), P(0x0817c), P(0x081c4),
546 	P(0x081ec), P(0x081f0), P(0x081f4), P(0x081f8), P(0x081fc),
547 	P(0x08200), P(0x08204), P(0x08208), P(0x0820c), P(0x08210),
548 	P(0x08214), P(0x08218), P(0x0821c), P(0x08220), P(0x08224),
549 	P(0x08228), P(0x0822c), P(0x08230), P(0x08234), P(0x08238),
550 	P(0x0823c), P(0x08240), P(0x08244), P(0x08248), P(0x0824c),
551 	P(0x08250), P(0x08254), P(0x08258), P(0x0825c), P(0x08260),
552 	P(0x08264), P(0x08270), P(0x08274), P(0x08278), P(0x0827c),
553 	P(0x08284), P(0x08288), P(0x0828c), P(0x08294), P(0x08298),
554 	P(0x08300), P(0x08304), P(0x08308), P(0x0830c), P(0x08310),
555 	P(0x08314), P(0x08318), P(0x08328), P(0x0832c), P(0x08330),
556 	P(0x08334), P(0x08338), P(0x0833c), P(0x08340), P(0x09808),
557 	P(0x0980c), P(0x09810), P(0x09814), P(0x0981c), P(0x0982c),
558 	P(0x09830), P(0x0983c), P(0x09840), P(0x0984c), P(0x09854),
559 	P(0x09900), P(0x09904), P(0x09908), P(0x0990c), P(0x0991c),
560 	P(0x09920), P(0x0a920), P(0x0b920), P(0x09928), P(0x0992c),
561 	P(0x09934), P(0x09938), P(0x0993c), P(0x09948), P(0x0994c),
562 	P(0x09954), P(0x09958), P(0x09940), P(0x0c95c), P(0x09970),
563 	P(0x09974), P(0x09978), P(0x0997c), P(0x09980), P(0x09984),
564 	P(0x09988), P(0x0998c), P(0x09990), P(0x09994), P(0x09998),
565 	P(0x0999c), P(0x099a0), P(0x099a4), P(0x099a8), P(0x099ac),
566 	P(0x099b0), P(0x099dc), P(0x099e0), P(0x099e4), P(0x099e8),
567 	P(0x099ec), P(0x099fc), P(0x09b00), P(0x09b04), P(0x09b08),
568 	P(0x09b0c), P(0x09b10), P(0x09b14), P(0x09b18), P(0x09b1c),
569 	P(0x09b20), P(0x09b24), P(0x09b28), P(0x09b2c), P(0x09b30),
570 	P(0x09b34), P(0x09b38), P(0x09b3c), P(0x09b40), P(0x09b44),
571 	P(0x09b48), P(0x09b4c), P(0x09b50), P(0x09b54), P(0x09b58),
572 	P(0x09b5c), P(0x09b60), P(0x09b64), P(0x09b68), P(0x09b6c),
573 	P(0x09b70), P(0x09b74), P(0x09b78), P(0x09b7c), P(0x09b80),
574 	P(0x09b84), P(0x09b88), P(0x09b8c), P(0x09b90), P(0x09b94),
575 	P(0x09b98), P(0x09b9c), P(0x09ba0), P(0x09ba4), P(0x09ba8),
576 	P(0x09bac), P(0x09bb0), P(0x09bb4), P(0x09bb8), P(0x09bbc),
577 	P(0x09bc0), P(0x09bc4), P(0x09bc8), P(0x09bcc), P(0x09bd0),
578 	P(0x09bd4), P(0x09bd8), P(0x09bdc), P(0x09be0), P(0x09be4),
579 	P(0x09be8), P(0x09bec), P(0x09bf0), P(0x09bf4), P(0x09bf8),
580 	P(0x09bfc), P(0x0a210), P(0x0a214), P(0x0a218), P(0x0a220),
581 	P(0x0a224), P(0x0a228), P(0x0a22c), P(0x0a234), P(0x0a238),
582 	P(0x0a23c), P(0x0a240), P(0x0a244), P(0x0a248), P(0x0a24c),
583 	P(0x0a250), P(0x0a254), P(0x0a258), P(0x0a25c), P(0x0a260),
584 	P(0x0a268), P(0x0a26c), P(0x0b26c), P(0x0c26c), P(0x0d270),
585 	P(0x0a278), P(0x0a27c), P(0x0a338), P(0x0a33c), P(0x0a340),
586 	P(0x0a344), P(0x0a348), P(0x0a34c), P(0x0a350), P(0x0a354),
587 	P(0x0a358), P(0x0d35c), P(0x0d360), P(0x0d364), P(0x0d368),
588 	P(0x0d36c), P(0x0d370), P(0x0d374), P(0x0d378), P(0x0d37c),
589 	P(0x0d380), P(0x0d384), P(0x0a388), P(0x0a38c), P(0x0a390),
590 	P(0x0a394), P(0x0a398), P(0x0a39c), P(0x0a3a0), P(0x0a3a4),
591 	P(0x0a3a8), P(0x0a3ac), P(0x0a3b0), P(0x0a3b4), P(0x0a3b8),
592 	P(0x0a3bc), P(0x0a3c0), P(0x0a3c4), P(0x0a3c8), P(0x0a3cc),
593 	P(0x0a3d0), P(0x0a3d4), P(0x0a3dc), P(0x0a3e0)
594 };
595 
596 static const uint32_t ar9160_cm_vals[] = {
597 	0x00000000, 0x00020015, 0x00000005, 0x00000000, 0x00000008,
598 	0x00000008, 0x00000010, 0x00000000, 0x0000001f, 0x00000000,
599 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
600 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x002ffc0f,
601 	0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f,
602 	0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x00000000,
603 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
604 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
605 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
606 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
607 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
608 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
609 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
610 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
611 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
612 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
613 	0x00000000, 0x00000002, 0x00000002, 0x00000020, 0x000004c2,
614 	0x00000000, 0x00000000, 0x00000000, 0x00000700, 0x00000000,
615 	0x00000000, 0x00000000, 0x40000000, 0x00000000, 0x00000000,
616 	0x000fc78f, 0x0000000f, 0x00000000, 0x2a82301a, 0x05dc01e0,
617 	0x1f402710, 0x01f40000, 0x00001e00, 0x00000000, 0x00400000,
618 	0xffffffff, 0x0000ffff, 0x003f3f3f, 0x00000000, 0x00000000,
619 	0x00000000, 0x00000000, 0x00020000, 0x00020000, 0x00000001,
620 	0x00000052, 0x00000000, 0x00000168, 0x000100aa, 0x00003210,
621 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
622 	0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000,
623 	0x32143320, 0xfaa4fa50, 0x00000100, 0x00000000, 0x00000000,
624 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
625 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
626 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
627 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
628 	0x00000000, 0x00100000, 0x0010f400, 0x00000100, 0x0001e800,
629 	0x00000000, 0x00000000, 0x00000000, 0x400000ff, 0x00080922,
630 	0x88a00010, 0x00000000, 0x40000000, 0x003e4180, 0x00000000,
631 	0x0000002c, 0x0000002c, 0x00000000, 0x00000000, 0x00000000,
632 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
633 	0x00000000, 0x00000000, 0x00000000, 0x00000007, 0x00000302,
634 	0x00000e00, 0x00ff0000, 0x00000000, 0x000107ff, 0x00000000,
635 	0xad848e19, 0x7d14e000, 0x9c0a9f6b, 0x00000000, 0x0000a000,
636 	0x00000000, 0x00200400, 0x206a01ae, 0x1284233c, 0x00000859,
637 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10000fff,
638 	0x05100000, 0x05100000, 0x05100000, 0x00000001, 0x00000004,
639 	0x1e1f2022, 0x0a0b0c0d, 0x00000000, 0x9280b212, 0x00020028,
640 	0x5f3ca3de, 0x2108ecff, 0x00750604, 0x004b6a8e, 0x190fb515,
641 	0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000,
642 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
643 	0x00000000, 0x00000000, 0x00000001, 0x201fff00, 0x006f0000,
644 	0x03051000, 0x00000000, 0x00000200, 0xaaaaaaaa, 0x3c466478,
645 	0x0cc80caa, 0x00001042, 0x00000000, 0x00000001, 0x00000002,
646 	0x00000003, 0x00000004, 0x00000005, 0x00000008, 0x00000009,
647 	0x0000000a, 0x0000000b, 0x0000000c, 0x0000000d, 0x00000010,
648 	0x00000011, 0x00000012, 0x00000013, 0x00000014, 0x00000015,
649 	0x00000018, 0x00000019, 0x0000001a, 0x0000001b, 0x0000001c,
650 	0x0000001d, 0x00000020, 0x00000021, 0x00000022, 0x00000023,
651 	0x00000024, 0x00000025, 0x00000028, 0x00000029, 0x0000002a,
652 	0x0000002b, 0x0000002c, 0x0000002d, 0x00000030, 0x00000031,
653 	0x00000032, 0x00000033, 0x00000034, 0x00000035, 0x00000035,
654 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
655 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
656 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
657 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000010,
658 	0x0000001a, 0x40806333, 0x00106c10, 0x009c4060, 0x018830c6,
659 	0x00000400, 0x001a0bb5, 0x00000000, 0x20202020, 0x20202020,
660 	0x13c889af, 0x38490a20, 0x00007bb6, 0x0fff3ffc, 0x00000001,
661 	0x0000e000, 0x00000000, 0x0cc75380, 0x0f0f0f01, 0xdfa91f01,
662 	0x00000001, 0x0e79e5c6, 0x0e79e5c6, 0x0e79e5c6, 0x00820820,
663 	0x1ce739ce, 0x050701ce, 0x00000000, 0x00000000, 0x00000000,
664 	0x00000000, 0x3fffffff, 0x3fffffff, 0x3fffffff, 0x0003ffff,
665 	0x79bfaa03, 0x07ffffef, 0x0fffffe7, 0x17ffffe5, 0x1fffffe4,
666 	0x37ffffe3, 0x3fffffe3, 0x57ffffe3, 0x5fffffe2, 0x7fffffe2,
667 	0x7f3c7bba, 0xf3307ff0, 0x0c000000, 0x20202020, 0x20202020,
668 	0x1ce739ce, 0x000001ce, 0x00000001, 0x00000000, 0x00000000,
669 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
670 	0x00000000, 0x00000000, 0x00000000, 0x00000246, 0x20202020,
671 	0x20202020, 0x20202020, 0x1ce739ce, 0x000001ce
672 };
673 
674 static const struct athn_ini ar9160_ini = {
675 	.nregs		= __arraycount(ar9160_regs),
676 	.regs		= ar9160_regs,
677 	.vals_5g20	= ar9160_vals_5g20,
678 #ifndef IEEE80211_NO_HT
679 	.vals_5g40	= ar9160_vals_5g40,
680 	.vals_2g40	= ar9160_vals_2g40,
681 #endif
682 	.vals_2g20	= ar9160_vals_2g20,
683 	.ncmregs	= __arraycount(ar9160_cm_regs),
684 	.cmregs		= ar9160_cm_regs,
685 	.cmvals		= ar9160_cm_vals
686 };
687 
688 /*
689  * BB/RF Gains common to AR5416 and AR9160.
690  */
691 static const uint32_t ar5416_bb_rfgain_vals_5g[] = {
692 	0x00000000, 0x00000040, 0x00000080, 0x000001a1, 0x000001e1,
693 	0x00000021, 0x00000061, 0x00000168, 0x000001a8, 0x000001e8,
694 	0x00000028, 0x00000068, 0x00000189, 0x000001c9, 0x00000009,
695 	0x00000049, 0x00000089, 0x00000170, 0x000001b0, 0x000001f0,
696 	0x00000030, 0x00000070, 0x00000191, 0x000001d1, 0x00000011,
697 	0x00000051, 0x00000091, 0x000001b8, 0x000001f8, 0x00000038,
698 	0x00000078, 0x00000199, 0x000001d9, 0x00000019, 0x00000059,
699 	0x00000099, 0x000000d9, 0x000000f9, 0x000000f9, 0x000000f9,
700 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
701 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
702 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
703 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
704 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9
705 };
706 
707 static const uint32_t ar5416_bb_rfgain_vals_2g[] = {
708 	0x00000000, 0x00000040, 0x00000080, 0x00000141, 0x00000181,
709 	0x000001c1, 0x00000001, 0x00000041, 0x000001a8, 0x000001e8,
710 	0x00000028, 0x00000068, 0x000000a8, 0x00000169, 0x000001a9,
711 	0x000001e9, 0x00000029, 0x00000069, 0x00000190, 0x000001d0,
712 	0x00000010, 0x00000050, 0x00000090, 0x00000151, 0x00000191,
713 	0x000001d1, 0x00000011, 0x00000051, 0x00000198, 0x000001d8,
714 	0x00000018, 0x00000058, 0x00000098, 0x00000159, 0x00000199,
715 	0x000001d9, 0x00000019, 0x00000059, 0x00000099, 0x000000d9,
716 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
717 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
718 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
719 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
720 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9
721 };
722 
723 static const uint32_t ar5416_2_1_addac_vals[] = {
724 	0x00000000, 0x00000003, 0x00000000, 0x0000000c, 0x00000000,
725 	0x00000030, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
726 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
727 	0x00000000, 0x00000000, 0x00000000, 0x00000060, 0x00000000,
728 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
729 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
730 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
731 	0x00000000
732 };
733 
734 static const struct athn_addac ar5416_2_1_addac = {
735 	__arraycount(ar5416_2_1_addac_vals),
736 	ar5416_2_1_addac_vals
737 };
738 
739 static const uint32_t ar5416_2_2_addac_vals[] = {
740 	0x00000000, 0x00000003, 0x00000000, 0x0000000c, 0x00000000,
741 	0x00000030, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
742 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
743 	0x00000000, 0x00000000, 0x00000000, 0x00000060, 0x00000000,
744 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
745 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
746 	0x00000000, 0x00000058, 0x00000000, 0x00000000, 0x00000000,
747 	0x00000000
748 };
749 
750 static const struct athn_addac ar5416_2_2_addac = {
751 	__arraycount(ar5416_2_2_addac_vals),
752 	ar5416_2_2_addac_vals
753 };
754 
755 static const uint32_t ar9160_1_0_addac_vals[] = {
756 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
757 	0x00000000, 0x000000c0, 0x00000018, 0x00000004, 0x00000000,
758 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
759 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
760 	0x00000000, 0x000000c0, 0x00000019, 0x00000004, 0x00000000,
761 	0x00000000, 0x00000000, 0x00000004, 0x00000003, 0x00000008,
762 	0x00000000
763 };
764 
765 static const struct athn_addac ar9160_1_0_addac = {
766 	__arraycount(ar9160_1_0_addac_vals),
767 	ar9160_1_0_addac_vals
768 };
769 
770 static const uint32_t ar9160_1_1_addac_vals[] = {
771 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
772 	0x00000000, 0x000000c0, 0x00000018, 0x00000004, 0x00000000,
773 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
774 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
775 	0x00000000, 0x000000c0, 0x00000019, 0x00000004, 0x00000000,
776 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
777 	0x00000000
778 };
779 
780 static const struct athn_addac ar9160_1_1_addac = {
781 	__arraycount(ar9160_1_1_addac_vals),
782 	ar9160_1_1_addac_vals
783 };
784 
785 static const uint32_t ar5416_bank6tpc_vals[] = {
786 	0x00000000, 0x00000000, 0x00000000, 0x00e00000, 0x005e0000,
787 	0x00120000, 0x00620000, 0x00020000, 0x00ff0000, 0x00ff0000,
788 	0x00ff0000, 0x40ff0000, 0x005f0000, 0x00870000, 0x00f90000,
789 	0x007b0000, 0x00ff0000, 0x00f50000, 0x00dc0000, 0x00110000,
790 	0x006100a8, 0x00423022, 0x201400df, 0x00c40002, 0x003000f2,
791 	0x00440016, 0x00410040, 0x0001805e, 0x0000c0ab, 0x000000e1,
792 	0x00007081, 0x000000d4
793 };
794 
795 static const uint32_t ar9160_bank6tpc_vals[] = {
796 	0x00000000, 0x00000000, 0x00000000, 0x00e00000, 0x005e0000,
797 	0x00120000, 0x00620000, 0x00020000, 0x00ff0000, 0x00ff0000,
798 	0x00ff0000, 0x40ff0000, 0x005f0000, 0x00870000, 0x00f90000,
799 	0x007b0000, 0x00ff0000, 0x00f50000, 0x00dc0000, 0x00110000,
800 	0x006100a8, 0x00423022, 0x2014008f, 0x00c40002, 0x003000f2,
801 	0x00440016, 0x00410040, 0x0001805e, 0x0000c0ab, 0x000000e1,
802 	0x00007080, 0x000000d4
803 };
804 
805 static const uint32_t ar5416_bank6_vals[] = {
806 	0x00000000, 0x00000000, 0x00000000, 0x00e00000, 0x005e0000,
807 	0x00120000, 0x00620000, 0x00020000, 0x00ff0000, 0x00ff0000,
808 	0x00ff0000, 0x40ff0000, 0x005f0000, 0x00870000, 0x00f90000,
809 	0x007b0000, 0x00ff0000, 0x00f50000, 0x00dc0000, 0x00110000,
810 	0x006100a8, 0x004210a2, 0x0014008f, 0x00c40003, 0x003000f2,
811 	0x00440016, 0x00410040, 0x0001805e, 0x0000c0ab, 0x000000f1,
812 	0x00002081, 0x000000d4
813 };
814 
815 /*
816  * Serializer/Deserializer programming.
817  */
818 
819 static const uint32_t ar5416_serdes_regs[] = {
820 	AR_PCIE_SERDES,
821 	AR_PCIE_SERDES,
822 	AR_PCIE_SERDES,
823 	AR_PCIE_SERDES,
824 	AR_PCIE_SERDES,
825 	AR_PCIE_SERDES,
826 	AR_PCIE_SERDES,
827 	AR_PCIE_SERDES,
828 	AR_PCIE_SERDES,
829 	AR_PCIE_SERDES2
830 };
831 
832 static const uint32_t ar5416_serdes_vals[] = {
833 	0x9248fc00,
834 	0x24924924,
835 	/* RX shut off when elecidle is asserted. */
836 	0x28000039,
837 	0x53160824,
838 	0xe5980579,
839 	0x001defff,
840 	0x1aaabe40,
841 	0xbe105554,
842 	0x000e3007,
843 	0x00000000
844 };
845 
846 static const struct athn_serdes ar5416_serdes = {
847 	__arraycount(ar5416_serdes_vals),
848 	ar5416_serdes_regs,
849 	ar5416_serdes_vals,
850 };
851 
852 #endif /* _ARN5416REG_H_ */
853