1 /*        $NetBSD: arn9285reg.h,v 1.1 2013/03/30 02:53:01 christos Exp $        */
2 /*        $OpenBSD: ar9285reg.h,v 1.7 2011/01/06 07:27:15 damien 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 _ARN9285REG_H_
22 #define _ARN9285REG_H_
23 
24 #define AR9285_MAX_CHAINS     1
25 
26 #define AR9285_PHY_CCA_MAX_GOOD_VALUE   (-118)
27 
28 #define AR9285_CL_CAL_REDO_THRESH       1
29 
30 /*
31  * Analog registers.
32  */
33 #define AR9285_AN_RF2G1                           0x7820
34 #define AR9285_AN_RF2G2                           0x7824
35 #define AR9285_AN_RF2G3                           0x7828
36 #define AR9285_AN_RF2G4                           0x782c
37 #define AR9285_AN_RF2G5                           0x7830
38 #define AR9285_AN_RF2G6                           0x7834
39 #define AR9285_AN_RF2G7                           0x7838
40 #define AR9285_AN_RF2G8                           0x783c
41 #define AR9285_AN_RF2G9                           0x7840
42 #define AR9285_AN_RXTXBB1               0x7854
43 #define AR9285_AN_TOP2                            0x7868
44 #define AR9285_AN_TOP3                            0x786c
45 #define AR9285_AN_TOP4                            0x7870
46 
47 /* Bits for AR9285_AN_RF2G1. */
48 #define AR9285_AN_RF2G1_ENPACAL                   0x00000800
49 #define AR9285_AN_RF2G1_PDPAOUT                   0x00800000
50 #define AR9285_AN_RF2G1_PDPADRV2        0x01000000
51 #define AR9285_AN_RF2G1_PDPADRV1        0x02000000
52 
53 /* Bits for AR9285_AN_RF2G2. */
54 #define AR9285_AN_RF2G2_OFFCAL          0x00001000
55 
56 /* Bits for AR9285_AN_RF2G3. */
57 #define AR9285_AN_RF2G3_DB1_2_M                   0x00000007
58 #define AR9285_AN_RF2G3_DB1_2_S                   0
59 #define AR9285_AN_RF2G3_DB1_1_M                   0x00000038
60 #define AR9285_AN_RF2G3_DB1_1_S                   3
61 #define AR9285_AN_RF2G3_DB1_0_M                   0x000001c0
62 #define AR9285_AN_RF2G3_DB1_0_S                   6
63 #define AR9285_AN_RF2G3_OB_4_M                    0x00000e00
64 #define AR9285_AN_RF2G3_OB_4_S                    9
65 #define AR9285_AN_RF2G3_OB_3_M                    0x00007000
66 #define AR9285_AN_RF2G3_OB_3_S                    12
67 #define AR9285_AN_RF2G3_OB_2_M                    0x00038000
68 #define AR9285_AN_RF2G3_OB_2_S                    15
69 #define AR9285_AN_RF2G3_OB_1_M                    0x001c0000
70 #define AR9285_AN_RF2G3_OB_1_S                    18
71 #define AR9285_AN_RF2G3_OB_0_M                    0x00e00000
72 #define AR9285_AN_RF2G3_OB_0_S                    21
73 #define AR9285_AN_RF2G3_PDVCCOMP        0x02000000
74 #define AR9271_AN_RF2G3_CCOMP_M                   0x00000fff
75 #define AR9271_AN_RF2G3_CCOMP_S                   0
76 #define AR9271_AN_RF2G3_OB_QAM_M        0x00007000
77 #define AR9271_AN_RF2G3_OB_QAM_S        12
78 #define AR9271_AN_RF2G3_OB_PSK_M        0x00038000
79 #define AR9271_AN_RF2G3_OB_PSK_S        15
80 #define AR9271_AN_RF2G3_OB_CCK_M        0x001c0000
81 #define AR9271_AN_RF2G3_OB_CCK_S        18
82 #define AR9271_AN_RF2G3_DB1_M           0x00e00000
83 #define AR9271_AN_RF2G3_DB1_S           21
84 
85 /* Bits for AR9285_AN_RF2G4. */
86 #define AR9285_AN_RF2G4_DB2_4_M                   0x00003800
87 #define AR9285_AN_RF2G4_DB2_4_S                   11
88 #define AR9285_AN_RF2G4_DB2_3_M                   0x0001c000
89 #define AR9285_AN_RF2G4_DB2_3_S                   14
90 #define AR9285_AN_RF2G4_DB2_2_M                   0x000e0000
91 #define AR9285_AN_RF2G4_DB2_2_S                   17
92 #define AR9285_AN_RF2G4_DB2_1_M                   0x00700000
93 #define AR9285_AN_RF2G4_DB2_1_S                   20
94 #define AR9285_AN_RF2G4_DB2_0_M                   0x03800000
95 #define AR9285_AN_RF2G4_DB2_0_S                   23
96 #define AR9285_AN_RF2G4_DB1_4_M                   0x1c000000
97 #define AR9285_AN_RF2G4_DB1_4_S                   26
98 #define AR9285_AN_RF2G4_DB1_3_M                   0xe0000000
99 #define AR9285_AN_RF2G4_DB1_3_S                   29
100 #define AR9271_AN_RF2G4_DB2_M           0xe0000000
101 #define AR9271_AN_RF2G4_DB2_S           29
102 
103 /* Bits for AR9285_AN_RF2G5. */
104 #define AR9285_AN_RF2G5_IC50TX_M        0x00000700
105 #define AR9285_AN_RF2G5_IC50TX_S        8
106 
107 /* Bits for AR9285_AN_RF2G6. */
108 #define AR9285_AN_RF2G6_CCOMP_M                   0x00007800
109 #define AR9285_AN_RF2G6_CCOMP_S                   11
110 #define AR9285_AN_RF2G6_OFFS_6_1        0x03f00000
111 #define AR9285_AN_RF2G6_OFFS(i)                   (1 << (19 + (i)))
112 #define AR9271_AN_RF2G6_OFFS_6_0        0x07f00000
113 #define AR9271_AN_RF2G6_OFFS(i)                   (1 << (20 + (i)))
114 
115 /* Bits for AR9285_AN_RF2G7. */
116 #define AR9285_AN_RF2G7_PWDDB           0x00000002
117 #define AR9285_AN_RF2G7_PADRVGN2TAB0_M  0xe0000000
118 #define AR9285_AN_RF2G7_PADRVGN2TAB0_S  29
119 
120 /* Bits for AR9285_AN_RF2G8. */
121 #define AR9285_AN_RF2G8_PADRVGN2TAB0_M  0x0001c000
122 #define AR9285_AN_RF2G8_PADRVGN2TAB0_S  14
123 
124 /* Bits for AR9285_AN_RXTXBB1. */
125 #define AR9285_AN_RXTXBB1_SPARE9        0x00000001
126 #define AR9285_AN_RXTXBB1_PDRXTXBB1     0x00000020
127 #define AR9285_AN_RXTXBB1_PDV2I                   0x00000080
128 #define AR9285_AN_RXTXBB1_PDDACIF       0x00000100
129 
130 /* Bits for AR9285_AN_TOP2. */
131 #define AR9285_AN_TOP2_DEFAULT                    0xca0358a0          /* XXX magic */
132 
133 /* Bits for AR9285_AN_TOP3. */
134 #define AR9285_AN_TOP3_XPABIAS_LVL_M    0x0000000c
135 #define AR9285_AN_TOP3_XPABIAS_LVL_S    2
136 #define AR9285_AN_TOP3_PWDDAC           0x00800000
137 
138 /* Bits for AR9285_AN_TOP4. */
139 #define AR9285_AN_TOP4_DEFAULT                    0x10142c00          /* XXX magic */
140 #define AR9285_AN_TOP4_UNLOCKED                   0x10142c14          /* XXX magic */
141 
142 /* Bits for AR_PHY_MULTICHAIN_GAIN_CTL. */
143 #define AR9285_PHY_ANT_DIV_CTL_ALL_M              0x7f000000
144 #define AR9285_PHY_ANT_DIV_CTL_ALL_S              24
145 #define AR9285_PHY_ANT_DIV_CTL_M                  0x01000000
146 #define AR9285_PHY_ANT_DIV_CTL_S                  24
147 #define AR9285_PHY_ANT_DIV_ALT_LNACONF_M          0x06000000
148 #define AR9285_PHY_ANT_DIV_ALT_LNACONF_S          25
149 #define AR9285_PHY_ANT_DIV_MAIN_LNACONF_M         0x18000000
150 #define AR9285_PHY_ANT_DIV_MAIN_LNACONF_S         27
151 #define AR9285_PHY_ANT_DIV_ALT_GAINTB_M           0x20000000
152 #define AR9285_PHY_ANT_DIV_ALT_GAINTB_S           29
153 #define AR9285_PHY_ANT_DIV_MAIN_GAINTB_M          0x40000000
154 #define AR9285_PHY_ANT_DIV_MAIN_GAINTB_S          30
155 
156 /*
157  * ROM layout used by AR9285 (single-stream, 2GHz only).
158  */
159 #define AR9285_EEP_START_LOC            64
160 #define AR9285_NUM_2G_CAL_PIERS                   3
161 #define AR9285_NUM_2G_CCK_TARGET_POWERS 3
162 #define AR9285_NUM_2G_20_TARGET_POWERS  3
163 #define AR9285_NUM_2G_40_TARGET_POWERS  3
164 #define AR9285_NUM_CTLS                           12
165 #define AR9285_NUM_BAND_EDGES           4
166 #define AR9285_NUM_PD_GAINS             2
167 #define AR9285_PD_GAINS_IN_MASK                   4
168 #define AR9285_PD_GAIN_ICEPTS           5
169 
170 struct ar9285_base_eep_header {
171           uint16_t  length;
172           uint16_t  checksum;
173           uint16_t  version;
174           uint8_t             opCapFlags;
175           uint8_t             eepMisc;
176           uint16_t  regDmn[2];
177           uint8_t             macAddr[6];
178           uint8_t             rxMask;
179           uint8_t             txMask;
180           uint16_t  rfSilent;
181           uint16_t  blueToothOptions;
182           uint16_t  deviceCap;
183           uint32_t  binBuildNumber;
184           uint8_t             deviceType;
185           /* End of common header. */
186           uint8_t             txGainType;
187 } __packed;
188 
189 struct ar9285_modal_eep_header {
190           uint32_t  antCtrlChain;
191           uint32_t  antCtrlCommon;
192           uint8_t             antennaGain;
193           uint8_t             switchSettling;
194           uint8_t             txRxAtten;
195           uint8_t             rxTxMargin;
196           uint8_t             adcDesiredSize;
197           uint8_t             pgaDesiredSize;
198           uint8_t             xlnaGain;
199           uint8_t             txEndToXpaOff;
200           uint8_t             txEndToRxOn;
201           uint8_t             txFrameToXpaOn;
202           uint8_t             thresh62;
203           uint8_t             noiseFloorThresh;
204           uint8_t             xpdGain;
205           uint8_t             xpd;
206           uint8_t             iqCalI;
207           uint8_t             iqCalQ;
208           uint8_t             pdGainOverlap;
209           uint8_t             ob_01;
210           uint8_t             db1_01;
211           uint8_t             xpaBiasLvl;
212           uint8_t             txFrameToDataStart;
213           uint8_t             txFrameToPaOn;
214           uint8_t             ht40PowerIncForPdadc;
215           uint8_t             bswAtten;
216           uint8_t             bswMargin;
217           uint8_t             swSettleHt40;
218           uint8_t             xatten2Db;
219           uint8_t             xatten2Margin;
220           uint8_t             db2_01;
221           uint8_t             version;
222           uint16_t  ob_234;
223           uint16_t  db1_234;
224           uint16_t  db2_234;
225           uint8_t             futureModal[4];
226           struct              ar_spur_chan spurChans[AR_EEPROM_MODAL_SPURS];
227 } __packed;
228 
229 struct ar9285_cal_data_per_freq {
230           uint8_t   pwrPdg[AR9285_NUM_PD_GAINS][AR9285_PD_GAIN_ICEPTS];
231           uint8_t   vpdPdg[AR9285_NUM_PD_GAINS][AR9285_PD_GAIN_ICEPTS];
232 } __packed;
233 
234 struct ar9285_cal_ctl_data {
235           struct ar_cal_ctl_edges       ctlEdges[AR9285_NUM_BAND_EDGES];
236 } __packed;
237 
238 struct ar9285_eeprom {
239           struct    ar9285_base_eep_header baseEepHeader;
240           uint8_t   custData[20];
241           struct    ar9285_modal_eep_header modalHeader;
242           uint8_t   calFreqPier2G[AR9285_NUM_2G_CAL_PIERS];
243           struct    ar9285_cal_data_per_freq
244               calPierData2G[AR9285_NUM_2G_CAL_PIERS];
245           struct    ar_cal_target_power_leg
246               calTargetPowerCck[AR9285_NUM_2G_CCK_TARGET_POWERS];
247           struct    ar_cal_target_power_leg
248               calTargetPower2G[AR9285_NUM_2G_20_TARGET_POWERS];
249           struct    ar_cal_target_power_ht
250               calTargetPower2GHT20[AR9285_NUM_2G_20_TARGET_POWERS];
251           struct    ar_cal_target_power_ht
252               calTargetPower2GHT40[AR9285_NUM_2G_40_TARGET_POWERS];
253           uint8_t   ctlIndex[AR9285_NUM_CTLS];
254           struct    ar9285_cal_ctl_data ctlData[AR9285_NUM_CTLS];
255           uint8_t   padding;
256 } __packed;
257 
258 /* Macro to "pack" registers to 16-bit to save some .rodata space. */
259 #define P(x)        (x)
260 
261 /*
262  * AR9285 1.2 initialization values.
263  */
264 static const uint16_t ar9285_1_2_regs[] = {
265           P(0x01030), P(0x01070), P(0x010b0), P(0x010f0), P(0x08014),
266           P(0x0801c), P(0x08318), P(0x09804), P(0x09820), P(0x09824),
267           P(0x09828), P(0x09834), P(0x09838), P(0x09840), P(0x09844),
268           P(0x09848), P(0x0a848), P(0x09850), P(0x09858), P(0x0985c),
269           P(0x09860), P(0x09864), P(0x09868), P(0x0986c), P(0x09914),
270           P(0x09918), P(0x09924), P(0x09944), P(0x09960), P(0x09964),
271           P(0x099b8), P(0x099bc), P(0x099c0), P(0x099c4), P(0x099c8),
272           P(0x099cc), P(0x099d0), P(0x099d4), P(0x099d8), P(0x09a00),
273           P(0x09a04), P(0x09a08), P(0x09a0c), P(0x09a10), P(0x09a14),
274           P(0x09a18), P(0x09a1c), P(0x09a20), P(0x09a24), P(0x09a28),
275           P(0x09a2c), P(0x09a30), P(0x09a34), P(0x09a38), P(0x09a3c),
276           P(0x09a40), P(0x09a44), P(0x09a48), P(0x09a4c), P(0x09a50),
277           P(0x09a54), P(0x09a58), P(0x09a5c), P(0x09a60), P(0x09a64),
278           P(0x09a68), P(0x09a6c), P(0x09a70), P(0x09a74), P(0x09a78),
279           P(0x09a7c), P(0x09a80), P(0x09a84), P(0x09a88), P(0x09a8c),
280           P(0x09a90), P(0x09a94), P(0x09a98), P(0x09a9c), P(0x09aa0),
281           P(0x09aa4), P(0x09aa8), P(0x09aac), P(0x09ab0), P(0x09ab4),
282           P(0x09ab8), P(0x09abc), P(0x09ac0), P(0x09ac4), P(0x09ac8),
283           P(0x09acc), P(0x09ad0), P(0x09ad4), P(0x09ad8), P(0x09adc),
284           P(0x09ae0), P(0x09ae4), P(0x09ae8), P(0x09aec), P(0x09af0),
285           P(0x09af4), P(0x09af8), P(0x09afc), P(0x09b00), P(0x09b04),
286           P(0x09b08), P(0x09b0c), P(0x09b10), P(0x09b14), P(0x09b18),
287           P(0x09b1c), P(0x09b20), P(0x09b24), P(0x09b28), P(0x09b2c),
288           P(0x09b30), P(0x09b34), P(0x09b38), P(0x09b3c), P(0x09b40),
289           P(0x09b44), P(0x09b48), P(0x09b4c), P(0x09b50), P(0x09b54),
290           P(0x09b58), P(0x09b5c), P(0x09b60), P(0x09b64), P(0x09b68),
291           P(0x09b6c), P(0x09b70), P(0x09b74), P(0x09b78), P(0x09b7c),
292           P(0x09b80), P(0x09b84), P(0x09b88), P(0x09b8c), P(0x09b90),
293           P(0x09b94), P(0x09b98), P(0x09b9c), P(0x09ba0), P(0x09ba4),
294           P(0x09ba8), P(0x09bac), P(0x09bb0), P(0x09bb4), P(0x09bb8),
295           P(0x09bbc), P(0x09bc0), P(0x09bc4), P(0x09bc8), P(0x09bcc),
296           P(0x09bd0), P(0x09bd4), P(0x09bd8), P(0x09bdc), P(0x09be0),
297           P(0x09be4), P(0x09be8), P(0x09bec), P(0x09bf0), P(0x09bf4),
298           P(0x09bf8), P(0x09bfc), P(0x0aa00), P(0x0aa04), P(0x0aa08),
299           P(0x0aa0c), P(0x0aa10), P(0x0aa14), P(0x0aa18), P(0x0aa1c),
300           P(0x0aa20), P(0x0aa24), P(0x0aa28), P(0x0aa2c), P(0x0aa30),
301           P(0x0aa34), P(0x0aa38), P(0x0aa3c), P(0x0aa40), P(0x0aa44),
302           P(0x0aa48), P(0x0aa4c), P(0x0aa50), P(0x0aa54), P(0x0aa58),
303           P(0x0aa5c), P(0x0aa60), P(0x0aa64), P(0x0aa68), P(0x0aa6c),
304           P(0x0aa70), P(0x0aa74), P(0x0aa78), P(0x0aa7c), P(0x0aa80),
305           P(0x0aa84), P(0x0aa88), P(0x0aa8c), P(0x0aa90), P(0x0aa94),
306           P(0x0aa98), P(0x0aa9c), P(0x0aaa0), P(0x0aaa4), P(0x0aaa8),
307           P(0x0aaac), P(0x0aab0), P(0x0aab4), P(0x0aab8), P(0x0aabc),
308           P(0x0aac0), P(0x0aac4), P(0x0aac8), P(0x0aacc), P(0x0aad0),
309           P(0x0aad4), P(0x0aad8), P(0x0aadc), P(0x0aae0), P(0x0aae4),
310           P(0x0aae8), P(0x0aaec), P(0x0aaf0), P(0x0aaf4), P(0x0aaf8),
311           P(0x0aafc), P(0x0ab00), P(0x0ab04), P(0x0ab08), P(0x0ab0c),
312           P(0x0ab10), P(0x0ab14), P(0x0ab18), P(0x0ab1c), P(0x0ab20),
313           P(0x0ab24), P(0x0ab28), P(0x0ab2c), P(0x0ab30), P(0x0ab34),
314           P(0x0ab38), P(0x0ab3c), P(0x0ab40), P(0x0ab44), P(0x0ab48),
315           P(0x0ab4c), P(0x0ab50), P(0x0ab54), P(0x0ab58), P(0x0ab5c),
316           P(0x0ab60), P(0x0ab64), P(0x0ab68), P(0x0ab6c), P(0x0ab70),
317           P(0x0ab74), P(0x0ab78), P(0x0ab7c), P(0x0ab80), P(0x0ab84),
318           P(0x0ab88), P(0x0ab8c), P(0x0ab90), P(0x0ab94), P(0x0ab98),
319           P(0x0ab9c), P(0x0aba0), P(0x0aba4), P(0x0aba8), P(0x0abac),
320           P(0x0abb0), P(0x0abb4), P(0x0abb8), P(0x0abbc), P(0x0abc0),
321           P(0x0abc4), P(0x0abc8), P(0x0abcc), P(0x0abd0), P(0x0abd4),
322           P(0x0abd8), P(0x0abdc), P(0x0abe0), P(0x0abe4), P(0x0abe8),
323           P(0x0abec), P(0x0abf0), P(0x0abf4), P(0x0abf8), P(0x0abfc),
324           P(0x0a204), P(0x0a20c), P(0x0b20c), P(0x0a21c), P(0x0a230),
325           P(0x0a250), P(0x0a358)
326 };
327 
328 #ifndef IEEE80211_NO_HT
329 static const uint32_t ar9285_1_2_vals_2g40[] = {
330           0x000002c0, 0x00000318, 0x00007c70, 0x00000000, 0x10801600,
331           0x12e00057, 0x00006880, 0x000003c4, 0x02020200, 0x01000e0e,
332           0x0a020001, 0x00000e0e, 0x00000007, 0x206a012e, 0x03721620,
333           0x00001053, 0x00001053, 0x6d4000e2, 0x7ec84d2e, 0x3137605e,
334           0x00058d20, 0x0001ce00, 0x5ac640d0, 0x06903881, 0x00001130,
335           0x00000016, 0xd00a800d, 0xffbc1020, 0x00000000, 0x00000000,
336           0x0000421c, 0x00000c00, 0x05eea6d4, 0x06336f77, 0x6af6532f,
337           0x08f186c8, 0x00046384, 0x00000000, 0x00000000, 0x00058084,
338           0x00058088, 0x0005808c, 0x00058100, 0x00058104, 0x00058108,
339           0x0005810c, 0x00058110, 0x00058114, 0x00058180, 0x00058184,
340           0x00058188, 0x0005818c, 0x00058190, 0x00058194, 0x000581a0,
341           0x0005820c, 0x000581a8, 0x00058284, 0x00058288, 0x00058224,
342           0x00058290, 0x00058300, 0x00058304, 0x00058308, 0x0005830c,
343           0x00058380, 0x00058384, 0x00068700, 0x00068704, 0x00068708,
344           0x0006870c, 0x00068780, 0x00068784, 0x00078b00, 0x00078b04,
345           0x00078b08, 0x00078b0c, 0x00078b80, 0x00078b84, 0x00078b88,
346           0x00078b8c, 0x00078b90, 0x000caf80, 0x000caf84, 0x000caf88,
347           0x000caf8c, 0x000caf90, 0x000db30c, 0x000db310, 0x000db384,
348           0x000db388, 0x000db324, 0x000eb704, 0x000eb6a4, 0x000eb6a8,
349           0x000eb710, 0x000eb714, 0x000eb720, 0x000eb724, 0x000eb728,
350           0x000eb72c, 0x000eb7a0, 0x000eb7a4, 0x000eb7a8, 0x000eb7b0,
351           0x000eb7b4, 0x000eb7b8, 0x000eb7a5, 0x000eb7a9, 0x000eb7ad,
352           0x000eb7b1, 0x000eb7b5, 0x000eb7b9, 0x000eb7c5, 0x000eb7c9,
353           0x000eb7d1, 0x000eb7d5, 0x000eb7d9, 0x000eb7c6, 0x000eb7ca,
354           0x000eb7ce, 0x000eb7d2, 0x000eb7d6, 0x000eb7c3, 0x000eb7c7,
355           0x000eb7cb, 0x000eb7cf, 0x000eb7d7, 0x000eb7db, 0x000eb7db,
356           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
357           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
358           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
359           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
360           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
361           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
362           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
363           0x000eb7db, 0x000eb7db, 0x00058084, 0x00058088, 0x0005808c,
364           0x00058100, 0x00058104, 0x00058108, 0x0005810c, 0x00058110,
365           0x00058114, 0x00058180, 0x00058184, 0x00058188, 0x0005818c,
366           0x00058190, 0x00058194, 0x000581a0, 0x0005820c, 0x000581a8,
367           0x00058284, 0x00058288, 0x00058224, 0x00058290, 0x00058300,
368           0x00058304, 0x00058308, 0x0005830c, 0x00058380, 0x00058384,
369           0x00068700, 0x00068704, 0x00068708, 0x0006870c, 0x00068780,
370           0x00068784, 0x00078b00, 0x00078b04, 0x00078b08, 0x00078b0c,
371           0x00078b80, 0x00078b84, 0x00078b88, 0x00078b8c, 0x00078b90,
372           0x000caf80, 0x000caf84, 0x000caf88, 0x000caf8c, 0x000caf90,
373           0x000db30c, 0x000db310, 0x000db384, 0x000db388, 0x000db324,
374           0x000eb704, 0x000eb6a4, 0x000eb6a8, 0x000eb710, 0x000eb714,
375           0x000eb720, 0x000eb724, 0x000eb728, 0x000eb72c, 0x000eb7a0,
376           0x000eb7a4, 0x000eb7a8, 0x000eb7b0, 0x000eb7b4, 0x000eb7b8,
377           0x000eb7a5, 0x000eb7a9, 0x000eb7ad, 0x000eb7b1, 0x000eb7b5,
378           0x000eb7b9, 0x000eb7c5, 0x000eb7c9, 0x000eb7d1, 0x000eb7d5,
379           0x000eb7d9, 0x000eb7c6, 0x000eb7ca, 0x000eb7ce, 0x000eb7d2,
380           0x000eb7d6, 0x000eb7c3, 0x000eb7c7, 0x000eb7cb, 0x000eb7cf,
381           0x000eb7d7, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
382           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
383           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
384           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
385           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
386           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
387           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
388           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
389           0x00000004, 0x0001f000, 0x0001f000, 0x1883800a, 0x00000210,
390           0x0004a000, 0x7999aa0e
391 };
392 #endif
393 
394 static const uint32_t ar9285_1_2_vals_2g20[] = {
395           0x00000160, 0x0000018c, 0x00003e38, 0x00000000, 0x08400b00,
396           0x12e0002b, 0x00003440, 0x00000300, 0x02020200, 0x01000e0e,
397           0x0a020001, 0x00000e0e, 0x00000007, 0x206a012e, 0x03721620,
398           0x00001053, 0x00001053, 0x6d4000e2, 0x7ec84d2e, 0x3137605e,
399           0x00058d20, 0x0001ce00, 0x5ac640d0, 0x06903881, 0x00000898,
400           0x0000000b, 0xd00a800d, 0xffbc1020, 0x00000000, 0x00000000,
401           0x0000421c, 0x00000c00, 0x05eea6d4, 0x06336f77, 0x6af6532f,
402           0x08f186c8, 0x00046384, 0x00000000, 0x00000000, 0x00058084,
403           0x00058088, 0x0005808c, 0x00058100, 0x00058104, 0x00058108,
404           0x0005810c, 0x00058110, 0x00058114, 0x00058180, 0x00058184,
405           0x00058188, 0x0005818c, 0x00058190, 0x00058194, 0x000581a0,
406           0x0005820c, 0x000581a8, 0x00058284, 0x00058288, 0x00058224,
407           0x00058290, 0x00058300, 0x00058304, 0x00058308, 0x0005830c,
408           0x00058380, 0x00058384, 0x00068700, 0x00068704, 0x00068708,
409           0x0006870c, 0x00068780, 0x00068784, 0x00078b00, 0x00078b04,
410           0x00078b08, 0x00078b0c, 0x00078b80, 0x00078b84, 0x00078b88,
411           0x00078b8c, 0x00078b90, 0x000caf80, 0x000caf84, 0x000caf88,
412           0x000caf8c, 0x000caf90, 0x000db30c, 0x000db310, 0x000db384,
413           0x000db388, 0x000db324, 0x000eb704, 0x000eb6a4, 0x000eb6a8,
414           0x000eb710, 0x000eb714, 0x000eb720, 0x000eb724, 0x000eb728,
415           0x000eb72c, 0x000eb7a0, 0x000eb7a4, 0x000eb7a8, 0x000eb7b0,
416           0x000eb7b4, 0x000eb7b8, 0x000eb7a5, 0x000eb7a9, 0x000eb7ad,
417           0x000eb7b1, 0x000eb7b5, 0x000eb7b9, 0x000eb7c5, 0x000eb7c9,
418           0x000eb7d1, 0x000eb7d5, 0x000eb7d9, 0x000eb7c6, 0x000eb7ca,
419           0x000eb7ce, 0x000eb7d2, 0x000eb7d6, 0x000eb7c3, 0x000eb7c7,
420           0x000eb7cb, 0x000eb7cf, 0x000eb7d7, 0x000eb7db, 0x000eb7db,
421           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
422           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
423           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
424           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
425           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
426           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
427           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
428           0x000eb7db, 0x000eb7db, 0x00058084, 0x00058088, 0x0005808c,
429           0x00058100, 0x00058104, 0x00058108, 0x0005810c, 0x00058110,
430           0x00058114, 0x00058180, 0x00058184, 0x00058188, 0x0005818c,
431           0x00058190, 0x00058194, 0x000581a0, 0x0005820c, 0x000581a8,
432           0x00058284, 0x00058288, 0x00058224, 0x00058290, 0x00058300,
433           0x00058304, 0x00058308, 0x0005830c, 0x00058380, 0x00058384,
434           0x00068700, 0x00068704, 0x00068708, 0x0006870c, 0x00068780,
435           0x00068784, 0x00078b00, 0x00078b04, 0x00078b08, 0x00078b0c,
436           0x00078b80, 0x00078b84, 0x00078b88, 0x00078b8c, 0x00078b90,
437           0x000caf80, 0x000caf84, 0x000caf88, 0x000caf8c, 0x000caf90,
438           0x000db30c, 0x000db310, 0x000db384, 0x000db388, 0x000db324,
439           0x000eb704, 0x000eb6a4, 0x000eb6a8, 0x000eb710, 0x000eb714,
440           0x000eb720, 0x000eb724, 0x000eb728, 0x000eb72c, 0x000eb7a0,
441           0x000eb7a4, 0x000eb7a8, 0x000eb7b0, 0x000eb7b4, 0x000eb7b8,
442           0x000eb7a5, 0x000eb7a9, 0x000eb7ad, 0x000eb7b1, 0x000eb7b5,
443           0x000eb7b9, 0x000eb7c5, 0x000eb7c9, 0x000eb7d1, 0x000eb7d5,
444           0x000eb7d9, 0x000eb7c6, 0x000eb7ca, 0x000eb7ce, 0x000eb7d2,
445           0x000eb7d6, 0x000eb7c3, 0x000eb7c7, 0x000eb7cb, 0x000eb7cf,
446           0x000eb7d7, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
447           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
448           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
449           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
450           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
451           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
452           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
453           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
454           0x00000004, 0x0001f000, 0x0001f000, 0x1883800a, 0x00000108,
455           0x0004a000, 0x7999aa0e
456 };
457 
458 static const uint16_t ar9285_1_2_cm_regs[] = {
459           P(0x0000c), P(0x00030), P(0x00034), P(0x00040), P(0x00044),
460           P(0x00048), P(0x0004c), P(0x00050), P(0x00054), P(0x00800),
461           P(0x00804), P(0x00808), P(0x0080c), P(0x00810), P(0x00814),
462           P(0x00818), P(0x0081c), P(0x00820), P(0x00824), P(0x01040),
463           P(0x01044), P(0x01048), P(0x0104c), P(0x01050), P(0x01054),
464           P(0x01058), P(0x0105c), P(0x01060), P(0x01064), P(0x01230),
465           P(0x01270), P(0x01038), P(0x01078), P(0x010b8), P(0x010f8),
466           P(0x01138), P(0x01178), P(0x011b8), P(0x011f8), P(0x01238),
467           P(0x01278), P(0x012b8), P(0x012f8), P(0x01338), P(0x01378),
468           P(0x013b8), P(0x013f8), P(0x01438), P(0x01478), P(0x014b8),
469           P(0x014f8), P(0x01538), P(0x01578), P(0x015b8), P(0x015f8),
470           P(0x01638), P(0x01678), P(0x016b8), P(0x016f8), P(0x01738),
471           P(0x01778), P(0x017b8), P(0x017f8), P(0x0103c), P(0x0107c),
472           P(0x010bc), P(0x010fc), P(0x0113c), P(0x0117c), P(0x011bc),
473           P(0x011fc), P(0x0123c), P(0x0127c), P(0x012bc), P(0x012fc),
474           P(0x0133c), P(0x0137c), P(0x013bc), P(0x013fc), P(0x0143c),
475           P(0x0147c), P(0x04030), P(0x0403c), P(0x04024), P(0x04060),
476           P(0x04064), P(0x07010), P(0x07034), P(0x07038), P(0x08004),
477           P(0x08008), P(0x0800c), P(0x08018), P(0x08020), P(0x08038),
478           P(0x0803c), P(0x08048), P(0x08054), P(0x08058), P(0x0805c),
479           P(0x08060), P(0x08064), P(0x08070), P(0x080c0), P(0x080c4),
480           P(0x080c8), P(0x080cc), P(0x080d0), P(0x080d4), P(0x080d8),
481           P(0x080e0), P(0x080e4), P(0x080e8), P(0x080ec), P(0x080f0),
482           P(0x080f4), P(0x080f8), P(0x080fc), P(0x08100), P(0x08104),
483           P(0x08108), P(0x0810c), P(0x08110), P(0x08118), P(0x0811c),
484           P(0x08120), P(0x08124), P(0x08128), P(0x0812c), P(0x08130),
485           P(0x08134), P(0x08138), P(0x0813c), P(0x08144), P(0x08168),
486           P(0x0816c), P(0x08170), P(0x08174), P(0x08178), P(0x0817c),
487           P(0x081c0), P(0x081d0), P(0x081ec), P(0x081f0), P(0x081f4),
488           P(0x081f8), P(0x081fc), P(0x08200), P(0x08204), P(0x08208),
489           P(0x0820c), P(0x08210), P(0x08214), P(0x08218), P(0x0821c),
490           P(0x08220), P(0x08224), P(0x08228), P(0x0822c), P(0x08230),
491           P(0x08234), P(0x08238), P(0x0823c), P(0x08240), P(0x08244),
492           P(0x08248), P(0x0824c), P(0x08250), P(0x08254), P(0x08258),
493           P(0x0825c), P(0x08260), P(0x08264), P(0x08270), P(0x08274),
494           P(0x08278), P(0x0827c), P(0x08284), P(0x08288), P(0x0828c),
495           P(0x08294), P(0x08298), P(0x0829c), P(0x08300), P(0x08314),
496           P(0x08328), P(0x0832c), P(0x08330), P(0x08334), P(0x08338),
497           P(0x0833c), P(0x08340), P(0x08344), P(0x09808), P(0x0980c),
498           P(0x09810), P(0x09814), P(0x0981c), P(0x0982c), P(0x09830),
499           P(0x0983c), P(0x0984c), P(0x09854), P(0x09900), P(0x09904),
500           P(0x09908), P(0x0990c), P(0x09910), P(0x0991c), P(0x09920),
501           P(0x09928), P(0x0992c), P(0x09934), P(0x09938), P(0x0993c),
502           P(0x09940), P(0x09948), P(0x0994c), P(0x09954), P(0x09958),
503           P(0x09968), P(0x09970), P(0x09974), P(0x09978), P(0x0997c),
504           P(0x09980), P(0x09984), P(0x09988), P(0x0998c), P(0x09990),
505           P(0x09994), P(0x09998), P(0x0999c), P(0x099a0), P(0x099a4),
506           P(0x099a8), P(0x099ac), P(0x099b0), P(0x099b4), P(0x099dc),
507           P(0x099e0), P(0x099e4), P(0x099e8), P(0x099ec), P(0x099f0),
508           P(0x0a208), P(0x0a210), P(0x0a214), P(0x0a218), P(0x0a220),
509           P(0x0a224), P(0x0a228), P(0x0a22c), P(0x0a234), P(0x0a238),
510           P(0x0a244), P(0x0a248), P(0x0a24c), P(0x0a254), P(0x0a258),
511           P(0x0a25c), P(0x0a260), P(0x0a268), P(0x0a26c), P(0x0d270),
512           P(0x0d35c), P(0x0d360), P(0x0d364), P(0x0d368), P(0x0d36c),
513           P(0x0d370), P(0x0d374), P(0x0d378), P(0x0d37c), P(0x0d380),
514           P(0x0d384), P(0x0a388), P(0x0a38c), P(0x0a390), P(0x0a39c),
515           P(0x0a3a0), P(0x0a3a4), P(0x0a3a8), P(0x0a3ac), P(0x0a3b0),
516           P(0x0a3b4), P(0x0a3b8), P(0x0a3bc), P(0x0a3c0), P(0x0a3c4),
517           P(0x0a3cc), P(0x0a3d0), P(0x0a3d4), P(0x0a3e4), P(0x0a3e8),
518           P(0x0a3ec), P(0x07800), P(0x07804), P(0x07808), P(0x0780c),
519           P(0x07810), P(0x0781c), P(0x07824), P(0x0782c), P(0x07834),
520           P(0x07844), P(0x07848), P(0x0784c), P(0x07850), P(0x07854),
521           P(0x07858), P(0x0785c), P(0x07860), P(0x07864), P(0x07868),
522           P(0x07870)
523 };
524 
525 static const uint32_t ar9285_1_2_cm_vals[] = {
526           0x00000000, 0x00020045, 0x00000005, 0x00000000, 0x00000008,
527           0x00000008, 0x00000010, 0x00000000, 0x0000001f, 0x00000000,
528           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
529           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x002ffc0f,
530           0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f,
531           0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x00000000,
532           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
533           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
534           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
535           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
536           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
537           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
538           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
539           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
540           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
541           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
542           0x00000000, 0x00000002, 0x00000002, 0x0000001f, 0x00000000,
543           0x00000000, 0x00000031, 0x00000002, 0x000004c2, 0x00000000,
544           0x00000000, 0x00000000, 0x00000700, 0x00000000, 0x00000000,
545           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000fc78f,
546           0x0000000f, 0x00000000, 0x00000000, 0x2a80001a, 0x05dc01e0,
547           0x1f402710, 0x01f40000, 0x00001e00, 0x00000000, 0x00400000,
548           0xffffffff, 0x0000ffff, 0x003f3f3f, 0x00000000, 0x00000000,
549           0x00000000, 0x00000000, 0x00020000, 0x00020000, 0x00000001,
550           0x00000052, 0x00000000, 0x00000168, 0x000100aa, 0x00003210,
551           0x08f04810, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
552           0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000,
553           0x00000000, 0x32143320, 0xfaa4fa50, 0x00000100, 0x00000000,
554           0x00000000, 0x0000320a, 0x00000000, 0x00000000, 0x00000000,
555           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
556           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
557           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
558           0x00000000, 0x00000000, 0x00000000, 0x00100000, 0x0010f400,
559           0x00000100, 0x0001e800, 0x00000000, 0x00000000, 0x00000000,
560           0x400000ff, 0x00080922, 0x88a00010, 0x00000000, 0x40000000,
561           0x003e4180, 0x00000000, 0x0000002c, 0x0000002c, 0x00000000,
562           0x00000000, 0x00000000, 0x00000000, 0x00000040, 0x00000000,
563           0x00000000, 0x00000001, 0x00000302, 0x00000e00, 0x00ff0000,
564           0x00000000, 0x00010380, 0x00481043, 0x00000000, 0xafe68e30,
565           0xfd14e000, 0x9c0a9f6b, 0x00000000, 0x0000a000, 0x00000000,
566           0x00200400, 0x0040233c, 0x00000044, 0x00000000, 0x00000000,
567           0x00000000, 0x00000000, 0x01002310, 0x10000fff, 0x04900000,
568           0x00000001, 0x00000004, 0x1e1f2022, 0x0a0b0c0d, 0x00000000,
569           0x14750604, 0x9280c00a, 0x00020028, 0x5f3ca3de, 0x2108ecff,
570           0x000003ce, 0x192bb514, 0x00000000, 0x00000001, 0x00000000,
571           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
572           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001,
573           0x201fff00, 0x2def0400, 0x03051000, 0x00000820, 0x00000000,
574           0x00000000, 0xaaaaaaaa, 0x3c466478, 0x0cc80caa, 0x00000000,
575           0x803e68c8, 0x4080a333, 0x00206c10, 0x009c4060, 0x01834061,
576           0x00000400, 0x000003b5, 0x00000000, 0x20202020, 0x20202020,
577           0x00000000, 0xfffffffc, 0x00000000, 0x00000000, 0x0ccb5380,
578           0x15151501, 0xdfa90f01, 0x00000000, 0x0ebae9e6, 0x0d820820,
579           0x07ffffef, 0x0fffffe7, 0x17ffffe5, 0x1fffffe4, 0x37ffffe3,
580           0x3fffffe3, 0x57ffffe3, 0x5fffffe2, 0x7fffffe2, 0x7f3c7bba,
581           0xf3307ff0, 0x0c000000, 0x20202020, 0x20202020, 0x00000001,
582           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
583           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
584           0x20202020, 0x20202020, 0x20202020, 0x00000000, 0x18c43433,
585           0x00f70081, 0x00140000, 0x0e4548d8, 0x54214514, 0x02025830,
586           0x71c0d388, 0x00000000, 0x00d86fff, 0x6e36d97b, 0x71400087,
587           0x000c0db6, 0x6db6246f, 0x6d9b66db, 0x6d8c6dba, 0x00040000,
588           0xdb003012, 0x04924914, 0x21084210, 0xf7d7ffde, 0xc2034080,
589           0x10142c00
590 };
591 
592 static const struct athn_ini ar9285_1_2_ini = {
593           .nregs              = __arraycount(ar9285_1_2_regs),
594           .regs               = ar9285_1_2_regs,
595           .vals_5g20          = NULL,   /* 2GHz only. */
596 #ifndef IEEE80211_NO_HT
597           .vals_5g40          = NULL,   /* 2GHz only. */
598           .vals_2g40          = ar9285_1_2_vals_2g40,
599 #endif
600           .vals_2g20          = ar9285_1_2_vals_2g20,
601           .ncmregs  = __arraycount(ar9285_1_2_cm_regs),
602           .cmregs             = ar9285_1_2_cm_regs,
603           .cmvals             = ar9285_1_2_cm_vals,
604 };
605 
606 #if NATHN_USB > 0
607 /*
608  * AR9271 programming.
609  */
610 static const uint16_t ar9271_regs[] = {
611           P(0x01030), P(0x01070), P(0x010b0), P(0x010f0), P(0x08014),
612           P(0x0801c), P(0x08318), P(0x09804), P(0x09820), P(0x09824),
613           P(0x09828), P(0x09834), P(0x09838), P(0x09840), P(0x09844),
614           P(0x09848), P(0x0a848), P(0x09850), P(0x09858), P(0x0985c),
615           P(0x09860), P(0x09864), P(0x09868), P(0x0986c), P(0x09910),
616           P(0x09914), P(0x09918), P(0x09924), P(0x09944), P(0x09960),
617           P(0x09964), P(0x099b8), P(0x099bc), P(0x099c0), P(0x099c4),
618           P(0x099c8), P(0x099cc), P(0x099d0), P(0x099d4), P(0x099d8),
619           P(0x09a00), P(0x09a04), P(0x09a08), P(0x09a0c), P(0x09a10),
620           P(0x09a14), P(0x09a18), P(0x09a1c), P(0x09a20), P(0x09a24),
621           P(0x09a28), P(0x09a2c), P(0x09a30), P(0x09a34), P(0x09a38),
622           P(0x09a3c), P(0x09a40), P(0x09a44), P(0x09a48), P(0x09a4c),
623           P(0x09a50), P(0x09a54), P(0x09a58), P(0x09a5c), P(0x09a60),
624           P(0x09a64), P(0x09a68), P(0x09a6c), P(0x09a70), P(0x09a74),
625           P(0x09a78), P(0x09a7c), P(0x09a80), P(0x09a84), P(0x09a88),
626           P(0x09a8c), P(0x09a90), P(0x09a94), P(0x09a98), P(0x09a9c),
627           P(0x09aa0), P(0x09aa4), P(0x09aa8), P(0x09aac), P(0x09ab0),
628           P(0x09ab4), P(0x09ab8), P(0x09abc), P(0x09ac0), P(0x09ac4),
629           P(0x09ac8), P(0x09acc), P(0x09ad0), P(0x09ad4), P(0x09ad8),
630           P(0x09adc), P(0x09ae0), P(0x09ae4), P(0x09ae8), P(0x09aec),
631           P(0x09af0), P(0x09af4), P(0x09af8), P(0x09afc), P(0x09b00),
632           P(0x09b04), P(0x09b08), P(0x09b0c), P(0x09b10), P(0x09b14),
633           P(0x09b18), P(0x09b1c), P(0x09b20), P(0x09b24), P(0x09b28),
634           P(0x09b2c), P(0x09b30), P(0x09b34), P(0x09b38), P(0x09b3c),
635           P(0x09b40), P(0x09b44), P(0x09b48), P(0x09b4c), P(0x09b50),
636           P(0x09b54), P(0x09b58), P(0x09b5c), P(0x09b60), P(0x09b64),
637           P(0x09b68), P(0x09b6c), P(0x09b70), P(0x09b74), P(0x09b78),
638           P(0x09b7c), P(0x09b80), P(0x09b84), P(0x09b88), P(0x09b8c),
639           P(0x09b90), P(0x09b94), P(0x09b98), P(0x09b9c), P(0x09ba0),
640           P(0x09ba4), P(0x09ba8), P(0x09bac), P(0x09bb0), P(0x09bb4),
641           P(0x09bb8), P(0x09bbc), P(0x09bc0), P(0x09bc4), P(0x09bc8),
642           P(0x09bcc), P(0x09bd0), P(0x09bd4), P(0x09bd8), P(0x09bdc),
643           P(0x09be0), P(0x09be4), P(0x09be8), P(0x09bec), P(0x09bf0),
644           P(0x09bf4), P(0x09bf8), P(0x09bfc), P(0x0aa00), P(0x0aa04),
645           P(0x0aa08), P(0x0aa0c), P(0x0aa10), P(0x0aa14), P(0x0aa18),
646           P(0x0aa1c), P(0x0aa20), P(0x0aa24), P(0x0aa28), P(0x0aa2c),
647           P(0x0aa30), P(0x0aa34), P(0x0aa38), P(0x0aa3c), P(0x0aa40),
648           P(0x0aa44), P(0x0aa48), P(0x0aa4c), P(0x0aa50), P(0x0aa54),
649           P(0x0aa58), P(0x0aa5c), P(0x0aa60), P(0x0aa64), P(0x0aa68),
650           P(0x0aa6c), P(0x0aa70), P(0x0aa74), P(0x0aa78), P(0x0aa7c),
651           P(0x0aa80), P(0x0aa84), P(0x0aa88), P(0x0aa8c), P(0x0aa90),
652           P(0x0aa94), P(0x0aa98), P(0x0aa9c), P(0x0aaa0), P(0x0aaa4),
653           P(0x0aaa8), P(0x0aaac), P(0x0aab0), P(0x0aab4), P(0x0aab8),
654           P(0x0aabc), P(0x0aac0), P(0x0aac4), P(0x0aac8), P(0x0aacc),
655           P(0x0aad0), P(0x0aad4), P(0x0aad8), P(0x0aadc), P(0x0aae0),
656           P(0x0aae4), P(0x0aae8), P(0x0aaec), P(0x0aaf0), P(0x0aaf4),
657           P(0x0aaf8), P(0x0aafc), P(0x0ab00), P(0x0ab04), P(0x0ab08),
658           P(0x0ab0c), P(0x0ab10), P(0x0ab14), P(0x0ab18), P(0x0ab1c),
659           P(0x0ab20), P(0x0ab24), P(0x0ab28), P(0x0ab2c), P(0x0ab30),
660           P(0x0ab34), P(0x0ab38), P(0x0ab3c), P(0x0ab40), P(0x0ab44),
661           P(0x0ab48), P(0x0ab4c), P(0x0ab50), P(0x0ab54), P(0x0ab58),
662           P(0x0ab5c), P(0x0ab60), P(0x0ab64), P(0x0ab68), P(0x0ab6c),
663           P(0x0ab70), P(0x0ab74), P(0x0ab78), P(0x0ab7c), P(0x0ab80),
664           P(0x0ab84), P(0x0ab88), P(0x0ab8c), P(0x0ab90), P(0x0ab94),
665           P(0x0ab98), P(0x0ab9c), P(0x0aba0), P(0x0aba4), P(0x0aba8),
666           P(0x0abac), P(0x0abb0), P(0x0abb4), P(0x0abb8), P(0x0abbc),
667           P(0x0abc0), P(0x0abc4), P(0x0abc8), P(0x0abcc), P(0x0abd0),
668           P(0x0abd4), P(0x0abd8), P(0x0abdc), P(0x0abe0), P(0x0abe4),
669           P(0x0abe8), P(0x0abec), P(0x0abf0), P(0x0abf4), P(0x0abf8),
670           P(0x0abfc), P(0x0a204), P(0x0a20c), P(0x0b20c), P(0x0a21c),
671           P(0x0a230), P(0x0a250), P(0x0a358)
672 };
673 
674 #ifndef IEEE80211_NO_HT
675 static const uint32_t ar9271_vals_2g40[] = {
676           0x000002c0, 0x00000318, 0x00007c70, 0x00000000, 0x10801600,
677           0x12e00057, 0x00006880, 0x000003c4, 0x02020200, 0x01000e0e,
678           0x3a020001, 0x00000e0e, 0x00000007, 0x206a012e, 0x03721620,
679           0x00001053, 0x00001053, 0x6d4000e2, 0x7ec84d2e, 0x3137605e,
680           0x00058d18, 0x0001ce00, 0x5ac640d0, 0x06903881, 0x30002310,
681           0x00001130, 0x00000016, 0xd00a800d, 0xffbc1020, 0x00000000,
682           0x00000000, 0x0000421c, 0x00000c00, 0x05eea6d4, 0x06336f77,
683           0x6af6532f, 0x08f186c8, 0x00046384, 0x00000000, 0x00000000,
684           0x00058084, 0x00058088, 0x0005808c, 0x00058100, 0x00058104,
685           0x00058108, 0x0005810c, 0x00058110, 0x00058114, 0x00058180,
686           0x00058184, 0x00058188, 0x0005818c, 0x00058190, 0x00058194,
687           0x000581a0, 0x0005820c, 0x000581a8, 0x00058284, 0x00058288,
688           0x00058224, 0x00058290, 0x00058300, 0x00058304, 0x00058308,
689           0x0005830c, 0x00058380, 0x00058384, 0x00068700, 0x00068704,
690           0x00068708, 0x0006870c, 0x00068780, 0x00068784, 0x00078b00,
691           0x00078b04, 0x00078b08, 0x00078b0c, 0x00078b80, 0x00078b84,
692           0x00078b88, 0x00078b8c, 0x00078b90, 0x000caf80, 0x000caf84,
693           0x000caf88, 0x000caf8c, 0x000caf90, 0x000db30c, 0x000db310,
694           0x000db384, 0x000db388, 0x000db324, 0x000eb704, 0x000eb6a4,
695           0x000eb6a8, 0x000eb710, 0x000eb714, 0x000eb720, 0x000eb724,
696           0x000eb728, 0x000eb72c, 0x000eb7a0, 0x000eb7a4, 0x000eb7a8,
697           0x000eb7b0, 0x000eb7b4, 0x000eb7b8, 0x000eb7a5, 0x000eb7a9,
698           0x000eb7ad, 0x000eb7b1, 0x000eb7b5, 0x000eb7b9, 0x000eb7c5,
699           0x000eb7c9, 0x000eb7d1, 0x000eb7d5, 0x000eb7d9, 0x000eb7c6,
700           0x000eb7ca, 0x000eb7ce, 0x000eb7d2, 0x000eb7d6, 0x000eb7c3,
701           0x000eb7c7, 0x000eb7cb, 0x000eb7cf, 0x000eb7d7, 0x000eb7db,
702           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
703           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
704           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
705           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
706           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
707           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
708           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
709           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x00058084, 0x00058088,
710           0x0005808c, 0x00058100, 0x00058104, 0x00058108, 0x0005810c,
711           0x00058110, 0x00058114, 0x00058180, 0x00058184, 0x00058188,
712           0x0005818c, 0x00058190, 0x00058194, 0x000581a0, 0x0005820c,
713           0x000581a8, 0x00058284, 0x00058288, 0x00058224, 0x00058290,
714           0x00058300, 0x00058304, 0x00058308, 0x0005830c, 0x00058380,
715           0x00058384, 0x00068700, 0x00068704, 0x00068708, 0x0006870c,
716           0x00068780, 0x00068784, 0x00078b00, 0x00078b04, 0x00078b08,
717           0x00078b0c, 0x00078b80, 0x00078b84, 0x00078b88, 0x00078b8c,
718           0x00078b90, 0x000caf80, 0x000caf84, 0x000caf88, 0x000caf8c,
719           0x000caf90, 0x000db30c, 0x000db310, 0x000db384, 0x000db388,
720           0x000db324, 0x000eb704, 0x000eb6a4, 0x000eb6a8, 0x000eb710,
721           0x000eb714, 0x000eb720, 0x000eb724, 0x000eb728, 0x000eb72c,
722           0x000eb7a0, 0x000eb7a4, 0x000eb7a8, 0x000eb7b0, 0x000eb7b4,
723           0x000eb7b8, 0x000eb7a5, 0x000eb7a9, 0x000eb7ad, 0x000eb7b1,
724           0x000eb7b5, 0x000eb7b9, 0x000eb7c5, 0x000eb7c9, 0x000eb7d1,
725           0x000eb7d5, 0x000eb7d9, 0x000eb7c6, 0x000eb7ca, 0x000eb7ce,
726           0x000eb7d2, 0x000eb7d6, 0x000eb7c3, 0x000eb7c7, 0x000eb7cb,
727           0x000eb7cf, 0x000eb7d7, 0x000eb7db, 0x000eb7db, 0x000eb7db,
728           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
729           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
730           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
731           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
732           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
733           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
734           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
735           0x000eb7db, 0x00000004, 0x0001f000, 0x0001f000, 0x1883800a,
736           0x00000210, 0x0004a000, 0x7999aa0e
737 };
738 #endif
739 
740 static const uint32_t ar9271_vals_2g20[] = {
741           0x00000160, 0x0000018c, 0x00003e38, 0x00000000, 0x08400b00,
742           0x12e0002b, 0x00003440, 0x00000300, 0x02020200, 0x01000e0e,
743           0x3a020001, 0x00000e0e, 0x00000007, 0x206a012e, 0x03721620,
744           0x00001053, 0x00001053, 0x6d4000e2, 0x7ec84d2e, 0x3137605e,
745           0x00058d18, 0x0001ce00, 0x5ac640d0, 0x06903881, 0x30002310,
746           0x00000898, 0x0000000b, 0xd00a800d, 0xffbc1020, 0x00000000,
747           0x00000000, 0x0000421c, 0x00000c00, 0x05eea6d4, 0x06336f77,
748           0x6af6532f, 0x08f186c8, 0x00046384, 0x00000000, 0x00000000,
749           0x00058084, 0x00058088, 0x0005808c, 0x00058100, 0x00058104,
750           0x00058108, 0x0005810c, 0x00058110, 0x00058114, 0x00058180,
751           0x00058184, 0x00058188, 0x0005818c, 0x00058190, 0x00058194,
752           0x000581a0, 0x0005820c, 0x000581a8, 0x00058284, 0x00058288,
753           0x00058224, 0x00058290, 0x00058300, 0x00058304, 0x00058308,
754           0x0005830c, 0x00058380, 0x00058384, 0x00068700, 0x00068704,
755           0x00068708, 0x0006870c, 0x00068780, 0x00068784, 0x00078b00,
756           0x00078b04, 0x00078b08, 0x00078b0c, 0x00078b80, 0x00078b84,
757           0x00078b88, 0x00078b8c, 0x00078b90, 0x000caf80, 0x000caf84,
758           0x000caf88, 0x000caf8c, 0x000caf90, 0x000db30c, 0x000db310,
759           0x000db384, 0x000db388, 0x000db324, 0x000eb704, 0x000eb6a4,
760           0x000eb6a8, 0x000eb710, 0x000eb714, 0x000eb720, 0x000eb724,
761           0x000eb728, 0x000eb72c, 0x000eb7a0, 0x000eb7a4, 0x000eb7a8,
762           0x000eb7b0, 0x000eb7b4, 0x000eb7b8, 0x000eb7a5, 0x000eb7a9,
763           0x000eb7ad, 0x000eb7b1, 0x000eb7b5, 0x000eb7b9, 0x000eb7c5,
764           0x000eb7c9, 0x000eb7d1, 0x000eb7d5, 0x000eb7d9, 0x000eb7c6,
765           0x000eb7ca, 0x000eb7ce, 0x000eb7d2, 0x000eb7d6, 0x000eb7c3,
766           0x000eb7c7, 0x000eb7cb, 0x000eb7cf, 0x000eb7d7, 0x000eb7db,
767           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
768           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
769           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
770           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
771           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
772           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
773           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
774           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x00058084, 0x00058088,
775           0x0005808c, 0x00058100, 0x00058104, 0x00058108, 0x0005810c,
776           0x00058110, 0x00058114, 0x00058180, 0x00058184, 0x00058188,
777           0x0005818c, 0x00058190, 0x00058194, 0x000581a0, 0x0005820c,
778           0x000581a8, 0x00058284, 0x00058288, 0x00058224, 0x00058290,
779           0x00058300, 0x00058304, 0x00058308, 0x0005830c, 0x00058380,
780           0x00058384, 0x00068700, 0x00068704, 0x00068708, 0x0006870c,
781           0x00068780, 0x00068784, 0x00078b00, 0x00078b04, 0x00078b08,
782           0x00078b0c, 0x00078b80, 0x00078b84, 0x00078b88, 0x00078b8c,
783           0x00078b90, 0x000caf80, 0x000caf84, 0x000caf88, 0x000caf8c,
784           0x000caf90, 0x000db30c, 0x000db310, 0x000db384, 0x000db388,
785           0x000db324, 0x000eb704, 0x000eb6a4, 0x000eb6a8, 0x000eb710,
786           0x000eb714, 0x000eb720, 0x000eb724, 0x000eb728, 0x000eb72c,
787           0x000eb7a0, 0x000eb7a4, 0x000eb7a8, 0x000eb7b0, 0x000eb7b4,
788           0x000eb7b8, 0x000eb7a5, 0x000eb7a9, 0x000eb7ad, 0x000eb7b1,
789           0x000eb7b5, 0x000eb7b9, 0x000eb7c5, 0x000eb7c9, 0x000eb7d1,
790           0x000eb7d5, 0x000eb7d9, 0x000eb7c6, 0x000eb7ca, 0x000eb7ce,
791           0x000eb7d2, 0x000eb7d6, 0x000eb7c3, 0x000eb7c7, 0x000eb7cb,
792           0x000eb7cf, 0x000eb7d7, 0x000eb7db, 0x000eb7db, 0x000eb7db,
793           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
794           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
795           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
796           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
797           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
798           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
799           0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db,
800           0x000eb7db, 0x00000004, 0x0001f000, 0x0001f000, 0x1883800a,
801           0x00000108, 0x0004a000, 0x7999aa0e
802 };
803 
804 static const uint16_t ar9271_cm_regs[] = {
805           P(0x0000c), P(0x00030), P(0x00034), P(0x00040), P(0x00044),
806           P(0x00048), P(0x0004c), P(0x00050), P(0x00054), P(0x00800),
807           P(0x00804), P(0x00808), P(0x0080c), P(0x00810), P(0x00814),
808           P(0x00818), P(0x0081c), P(0x00820), P(0x00824), P(0x01040),
809           P(0x01044), P(0x01048), P(0x0104c), P(0x01050), P(0x01054),
810           P(0x01058), P(0x0105c), P(0x01060), P(0x01064), P(0x01230),
811           P(0x01270), P(0x01038), P(0x01078), P(0x010b8), P(0x010f8),
812           P(0x01138), P(0x01178), P(0x011b8), P(0x011f8), P(0x01238),
813           P(0x01278), P(0x012b8), P(0x012f8), P(0x01338), P(0x01378),
814           P(0x013b8), P(0x013f8), P(0x01438), P(0x01478), P(0x014b8),
815           P(0x014f8), P(0x01538), P(0x01578), P(0x015b8), P(0x015f8),
816           P(0x01638), P(0x01678), P(0x016b8), P(0x016f8), P(0x01738),
817           P(0x01778), P(0x017b8), P(0x017f8), P(0x0103c), P(0x0107c),
818           P(0x010bc), P(0x010fc), P(0x0113c), P(0x0117c), P(0x011bc),
819           P(0x011fc), P(0x0123c), P(0x0127c), P(0x012bc), P(0x012fc),
820           P(0x0133c), P(0x0137c), P(0x013bc), P(0x013fc), P(0x0143c),
821           P(0x0147c), P(0x04030), P(0x0403c), P(0x04024), P(0x04060),
822           P(0x04064), P(0x08004), P(0x08008), P(0x0800c), P(0x08018),
823           P(0x08020), P(0x08038), P(0x0803c), P(0x08048), P(0x08054),
824           P(0x08058), P(0x0805c), P(0x08060), P(0x08064), P(0x08070),
825           P(0x080b0), P(0x080b4), P(0x080b8), P(0x080bc), P(0x080c0),
826           P(0x080c4), P(0x080c8), P(0x080cc), P(0x080d0), P(0x080d4),
827           P(0x080d8), P(0x080e0), P(0x080e4), P(0x080e8), P(0x080ec),
828           P(0x080f0), P(0x080f4), P(0x080f8), P(0x080fc), P(0x08100),
829           P(0x08104), P(0x08108), P(0x0810c), P(0x08110), P(0x08118),
830           P(0x0811c), P(0x08120), P(0x08124), P(0x08128), P(0x0812c),
831           P(0x08130), P(0x08134), P(0x08138), P(0x0813c), P(0x08144),
832           P(0x08168), P(0x0816c), P(0x08170), P(0x08174), P(0x08178),
833           P(0x0817c), P(0x081c0), P(0x081d0), P(0x081ec), P(0x081f0),
834           P(0x081f4), P(0x081f8), P(0x081fc), P(0x08200), P(0x08204),
835           P(0x08208), P(0x0820c), P(0x08210), P(0x08214), P(0x08218),
836           P(0x0821c), P(0x08220), P(0x08224), P(0x08228), P(0x0822c),
837           P(0x08230), P(0x08234), P(0x08238), P(0x0823c), P(0x08240),
838           P(0x08244), P(0x08248), P(0x0824c), P(0x08250), P(0x08254),
839           P(0x08258), P(0x0825c), P(0x08260), P(0x08264), P(0x08270),
840           P(0x08274), P(0x08278), P(0x0827c), P(0x08284), P(0x08288),
841           P(0x0828c), P(0x08294), P(0x08298), P(0x0829c), P(0x08300),
842           P(0x08314), P(0x08328), P(0x0832c), P(0x08330), P(0x08334),
843           P(0x08338), P(0x0833c), P(0x08340), P(0x08344), P(0x07010),
844           P(0x07034), P(0x07038), P(0x07800), P(0x07804), P(0x07808),
845           P(0x0780c), P(0x07810), P(0x07814), P(0x0781c), P(0x07828),
846           P(0x0782c), P(0x07830), P(0x07834), P(0x0783c), P(0x07840),
847           P(0x07844), P(0x07848), P(0x0784c), P(0x07850), P(0x07854),
848           P(0x07858), P(0x0785c), P(0x07860), P(0x07864), P(0x07868),
849           P(0x07870), P(0x09808), P(0x0980c), P(0x09810), P(0x09814),
850           P(0x0981c), P(0x0982c), P(0x09830), P(0x0983c), P(0x0984c),
851           P(0x09854), P(0x09900), P(0x09904), P(0x09908), P(0x0990c),
852           P(0x0991c), P(0x09920), P(0x09928), P(0x0992c), P(0x09934),
853           P(0x09938), P(0x0993c), P(0x09940), P(0x09948), P(0x0994c),
854           P(0x09954), P(0x09958), P(0x09968), P(0x09970), P(0x09974),
855           P(0x09978), P(0x0997c), P(0x09980), P(0x09984), P(0x09988),
856           P(0x0998c), P(0x09990), P(0x09994), P(0x09998), P(0x0999c),
857           P(0x099a0), P(0x099a4), P(0x099a8), P(0x099ac), P(0x099b0),
858           P(0x099b4), P(0x099dc), P(0x099e0), P(0x099e4), P(0x099e8),
859           P(0x099ec), P(0x099f0), P(0x0a208), P(0x0a210), P(0x0a214),
860           P(0x0a218), P(0x0a220), P(0x0a224), P(0x0a228), P(0x0a22c),
861           P(0x0a234), P(0x0a238), P(0x0a244), P(0x0a248), P(0x0a24c),
862           P(0x0a254), P(0x0a258), P(0x0a25c), P(0x0a260), P(0x0a268),
863           P(0x0a26c), P(0x0a388), P(0x0a38c), P(0x0a390), P(0x0a39c),
864           P(0x0a3a0), P(0x0a3a4), P(0x0a3a8), P(0x0a3ac), P(0x0a3b0),
865           P(0x0a3b4), P(0x0a3b8), P(0x0a3bc), P(0x0a3c0), P(0x0a3c4),
866           P(0x0a3cc), P(0x0a3d0), P(0x0a3d4), P(0x0a3e4), P(0x0a3e8),
867           P(0x0a3ec), P(0x0a3f0), P(0x0a3f4), P(0x0d270), P(0x0d35c),
868           P(0x0d360), P(0x0d364), P(0x0d368), P(0x0d36c), P(0x0d370),
869           P(0x0d374), P(0x0d378), P(0x0d37c), P(0x0d380), P(0x0d384)
870 };
871 
872 static const uint32_t ar9271_cm_vals[] = {
873           0x00000000, 0x00020045, 0x00000005, 0x00000000, 0x00000008,
874           0x00000008, 0x00000010, 0x00000000, 0x0000001f, 0x00000000,
875           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
876           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x002ffc0f,
877           0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f,
878           0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x00000000,
879           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
880           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
881           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
882           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
883           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
884           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
885           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
886           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
887           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
888           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
889           0x00000000, 0x00000002, 0x00000002, 0x0000001f, 0x00000000,
890           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000700,
891           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
892           0x00000000, 0x000fc78f, 0x0000000f, 0x00000000, 0x00000000,
893           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x2a80001a,
894           0x05dc01e0, 0x1f402710, 0x01f40000, 0x00001e00, 0x00000000,
895           0x00400000, 0xffffffff, 0x0000ffff, 0x003f3f3f, 0x00000000,
896           0x00000000, 0x00000000, 0x00000000, 0x00020000, 0x00020000,
897           0x00000001, 0x00000052, 0x00000000, 0x00000168, 0x000100aa,
898           0x00003210, 0x08f04810, 0x00000000, 0x00000000, 0x00000000,
899           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff,
900           0x00000000, 0x00000000, 0x32143320, 0xfaa4fa50, 0x00000100,
901           0x00000000, 0x00000000, 0x0000320a, 0x00000000, 0x00000000,
902           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
903           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
904           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
905           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00100000,
906           0x0010f400, 0x00000100, 0x0001e800, 0x00000000, 0x00000000,
907           0x00000000, 0x400000ff, 0x00080922, 0x88a00010, 0x00000000,
908           0x40000000, 0x003e4180, 0x00000000, 0x0000002c, 0x0000002c,
909           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040,
910           0x00000000, 0x00000000, 0x00000001, 0x00000302, 0x00000e00,
911           0x00ff0000, 0x00000000, 0x00010380, 0x00581043, 0x00000030,
912           0x00000002, 0x000004c2, 0x00140000, 0x0e4548d8, 0x54214514,
913           0x02025820, 0x71c0d388, 0x924934a8, 0x00000000, 0x66964300,
914           0x8db6d961, 0x8db6d96c, 0x6140008b, 0x72ee0a72, 0xbbfffffc,
915           0x000c0db6, 0x6db6246f, 0x6d9b66db, 0x6d8c6dba, 0x00040000,
916           0xdb003012, 0x04924914, 0x21084210, 0xf7d7ffde, 0xc2034080,
917           0x10142c00, 0x00000000, 0xafe68e30, 0xfd14e000, 0x9c0a9f6b,
918           0x00000000, 0x0000a000, 0x00000000, 0x00200400, 0x0040233c,
919           0x00000044, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
920           0x10000fff, 0x04900000, 0x00000001, 0x00000004, 0x1e1f2022,
921           0x0a0b0c0d, 0x00000000, 0x14750604, 0x9280c00a, 0x00020028,
922           0x5f3ca3de, 0x0108ecff, 0x000003ce, 0x192bb514, 0x00000000,
923           0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
924           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
925           0x00000000, 0x00000001, 0x201fff00, 0x2def0400, 0x03051000,
926           0x00000820, 0x00000000, 0x00000000, 0xaaaaaaaa, 0x3c466478,
927           0x0cc80caa, 0x00000000, 0x803e68c8, 0x4080a333, 0x00206c10,
928           0x009c4060, 0x01834061, 0x00000400, 0x000003b5, 0x00000000,
929           0x20202020, 0x20202020, 0x00000000, 0xfffffffc, 0x00000000,
930           0x00000000, 0x0ccb5380, 0x15151501, 0xdfa90f01, 0x00000000,
931           0x0ebae9e6, 0x0c000000, 0x20202020, 0x20202020, 0x00000001,
932           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
933           0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
934           0x20202020, 0x20202020, 0x20202020, 0x00000000, 0x18c43433,
935           0x00f70081, 0x01036a2f, 0x00000000, 0x0d820820, 0x07ffffef,
936           0x0fffffe7, 0x17ffffe5, 0x1fffffe4, 0x37ffffe3, 0x3fffffe3,
937           0x57ffffe3, 0x5fffffe2, 0x7fffffe2, 0x7f3c7bba, 0xf3307ff0
938 };
939 
940 static const struct athn_ini ar9271_ini = {
941           .nregs              = __arraycount(ar9271_regs),
942           .regs               = ar9271_regs,
943           .vals_5g20          = NULL,   /* 2GHz only. */
944 #ifndef IEEE80211_NO_HT
945           .vals_5g40          = NULL,   /* 2GHz only. */
946           .vals_2g40          = ar9271_vals_2g40,
947 #endif
948           .vals_2g20          = ar9271_vals_2g20,
949           .ncmregs  = __arraycount(ar9271_cm_regs),
950           .cmregs             = ar9271_cm_regs,
951           .cmvals             = ar9271_cm_vals,
952 };
953 #endif    /* NATHN_USB */
954 
955 /*
956  * AR9285 1.2 Tx gains.
957  */
958 static const uint16_t ar9285_1_2_tx_gain_regs[] = {
959           P(0x0a300), P(0x0a304), P(0x0a308), P(0x0a30c), P(0x0a310),
960           P(0x0a314), P(0x0a318), P(0x0a31c), P(0x0a320), P(0x0a324),
961           P(0x0a328), P(0x0a32c), P(0x0a330), P(0x0a334), P(0x0a338),
962           P(0x0a33c), P(0x0a340), P(0x0a344), P(0x0a348), P(0x0a34c),
963           P(0x0a350), P(0x0a354), P(0x07814), P(0x07828), P(0x07830),
964           P(0x07838), P(0x0783c), P(0x07840), P(0x0786c), P(0x07820),
965           P(0x0a274), P(0x0a278), P(0x0a27c), P(0x0a394), P(0x0a398),
966           P(0x0a3dc), P(0x0a3e0)
967 };
968 
969 static const uint32_t ar9285_1_2_tx_gain_vals_2g[] = {
970           0x00000000, 0x00009200, 0x00010208, 0x00019608, 0x00022618,
971           0x0002a6c9, 0x00031710, 0x00035718, 0x00038758, 0x0003c75a,
972           0x0004075c, 0x0004475e, 0x0004679f, 0x000487df, 0x0003891e,
973           0x0003a95e, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
974           0x0003e9df, 0x0003e9df, 0x924934a8, 0x26d2491b, 0xedb6d96e,
975           0xfac68801, 0x0001fffe, 0xffeb1a20, 0x48609eb4, 0x00000c04,
976           0x0a21a652, 0x39ce739c, 0x050e039c, 0x39ce739c, 0x0000039c,
977           0x39ce739c, 0x0000039c
978 };
979 
980 static const struct athn_gain ar9285_1_2_tx_gain = {
981           __arraycount(ar9285_1_2_tx_gain_regs),
982           ar9285_1_2_tx_gain_regs,
983           NULL,     /* 2GHz only. */
984           ar9285_1_2_tx_gain_vals_2g
985 };
986 
987 static const uint32_t ar9285_1_2_tx_gain_high_power_vals_2g[] = {
988           0x00000000, 0x00006200, 0x00008201, 0x0000b240, 0x0000d241,
989           0x0000f600, 0x00012800, 0x00016802, 0x0001b805, 0x00021a80,
990           0x00028b00, 0x0002ab40, 0x0002cd80, 0x00033d82, 0x0003891e,
991           0x0003a95e, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
992           0x0003e9df, 0x0003e9df, 0x924934a8, 0x26d2491b, 0xedb6d96e,
993           0xfac68803, 0x0001fffe, 0xffeb1a20, 0x08609ebe, 0x00000c00,
994           0x0a216652, 0x0e739ce7, 0x050380e7, 0x0e739ce7, 0x000000e7,
995           0x0e739ce7, 0x000000e7
996 };
997 
998 static const struct athn_gain ar9285_1_2_tx_gain_high_power = {
999           __arraycount(ar9285_1_2_tx_gain_regs),
1000           ar9285_1_2_tx_gain_regs,
1001           NULL,     /* 2GHz only. */
1002           ar9285_1_2_tx_gain_high_power_vals_2g
1003 };
1004 
1005 /*
1006  * AR9285 XE 2.0 Tx gains.
1007  */
1008 static const uint32_t ar9285_2_0_tx_gain_vals_2g[] = {
1009           0x00000000, 0x00009200, 0x00010208, 0x00019608, 0x00022618,
1010           0x0002a6c9, 0x00031710, 0x00035718, 0x00038758, 0x0003c75a,
1011           0x0004075c, 0x0004475e, 0x0004679f, 0x000487df, 0x0003891e,
1012           0x0003a95e, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
1013           0x0003e9df, 0x0003e9df, 0x92497ca8, 0x2ad2491b, 0xedb6da6e,
1014           0xdac71441, 0x2481f6fe, 0xba5f638c, 0x48609eb4, 0x00000c04,
1015           0x0a21a652, 0x39ce739c, 0x050e039c, 0x39ce739c, 0x0000039c,
1016           0x39ce739c, 0x0000039c
1017 };
1018 
1019 static const struct athn_gain ar9285_2_0_tx_gain = {
1020           __arraycount(ar9285_1_2_tx_gain_regs),
1021           ar9285_1_2_tx_gain_regs,
1022           NULL,     /* 2GHz only. */
1023           ar9285_2_0_tx_gain_vals_2g
1024 };
1025 
1026 static const uint32_t ar9285_2_0_tx_gain_high_power_vals_2g[] = {
1027           0x00000000, 0x00006200, 0x00008201, 0x0000b240, 0x0000d241,
1028           0x0000f600, 0x00012800, 0x00016802, 0x0001b805, 0x00021a80,
1029           0x00028b00, 0x0002ab40, 0x0002cd80, 0x00033d82, 0x0003891e,
1030           0x0003a95e, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
1031           0x0003e9df, 0x0003e9df, 0x92497ca8, 0x2ad2491b, 0xedb6da6e,
1032           0xdac71443, 0x2481f6fe, 0xba5f638c, 0x08609ebe, 0x00000c00,
1033           0x0a216652, 0x0e739ce7, 0x050380e7, 0x0e739ce7, 0x000000e7,
1034           0x0e739ce7, 0x000000e7
1035 };
1036 
1037 static const struct athn_gain ar9285_2_0_tx_gain_high_power = {
1038           __arraycount(ar9285_1_2_tx_gain_regs),
1039           ar9285_1_2_tx_gain_regs,
1040           NULL,     /* 2GHz only. */
1041           ar9285_2_0_tx_gain_high_power_vals_2g
1042 };
1043 
1044 #if NATHN_USB > 0
1045 /*
1046  * AR9271 Tx gains.
1047  */
1048 static const uint16_t ar9271_tx_gain_regs[] = {
1049           P(0x0a300), P(0x0a304), P(0x0a308), P(0x0a30c), P(0x0a310),
1050           P(0x0a314), P(0x0a318), P(0x0a31c), P(0x0a320), P(0x0a324),
1051           P(0x0a328), P(0x0a32c), P(0x0a330), P(0x0a334), P(0x0a338),
1052           P(0x0a33c), P(0x0a340), P(0x0a344), P(0x0a348), P(0x0a34c),
1053           P(0x0a350), P(0x0a354), P(0x07838), P(0x07824), P(0x0786c),
1054           P(0x07820), P(0x0a274), P(0x0a278), P(0x0a27c), P(0x0a394),
1055           P(0x0a398), P(0x0a3dc), P(0x0a3e0)
1056 };
1057 
1058 static const uint32_t ar9271_tx_gain_vals_2g[] = {
1059           0x00000000, 0x00009200, 0x00010208, 0x00019608, 0x0001e610,
1060           0x0002d6d0, 0x00039758, 0x0003b759, 0x0003d75a, 0x0004175c,
1061           0x0004575e, 0x0004979f, 0x0004d7df, 0x000368de, 0x0003891e,
1062           0x0003a95e, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
1063           0x0003e9df, 0x0003e9df, 0x00000029, 0x00d8abff, 0x48609eb4,
1064           0x00000c04, 0x0a218652, 0x3bdef7bd, 0x050e83bd, 0x3bdef7bd,
1065           0x000003bd, 0x3bdef7bd, 0x000003bd
1066 };
1067 
1068 static const struct athn_gain ar9271_tx_gain = {
1069           __arraycount(ar9271_tx_gain_regs),
1070           ar9271_tx_gain_regs,
1071           NULL,     /* 2GHz only. */
1072           ar9271_tx_gain_vals_2g
1073 };
1074 
1075 static const uint32_t ar9271_tx_gain_high_power_vals_2g[] = {
1076           0x00010000, 0x00016200, 0x00018201, 0x0001b240, 0x0001d241,
1077           0x0001f600, 0x00022800, 0x00026802, 0x0002b805, 0x0002ea41,
1078           0x00038b00, 0x0003ab40, 0x0003cd80, 0x000368de, 0x0003891e,
1079           0x0003a95e, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
1080           0x0003e9df, 0x0003e9df, 0x0000002b, 0x00d8a7ff, 0x08609eba,
1081           0x00000c00, 0x0a214652, 0x0e739ce7, 0x05018063, 0x06318c63,
1082           0x00000063, 0x06318c63, 0x00000063
1083 };
1084 
1085 static const struct athn_gain ar9271_tx_gain_high_power = {
1086           __arraycount(ar9271_tx_gain_regs),
1087           ar9271_tx_gain_regs,
1088           NULL,     /* 2GHz only. */
1089           ar9271_tx_gain_high_power_vals_2g
1090 };
1091 #endif    /* NATHN_USB */
1092 
1093 #endif /* _ARN9285REG_H_ */
1094