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