mac80211: update to wireless-testing 2010-04-09, add work-in-progress ar9300 patches
[openwrt.git] / package / mac80211 / patches / 300-ar9300_support.patch
1 diff --git a/drivers/net/wireless/ath/ath9k/Makefile b/drivers/net/wireless/ath/ath9k/Makefile
2 index 97133be..dd112be 100644
3 --- a/drivers/net/wireless/ath/ath9k/Makefile
4 +++ b/drivers/net/wireless/ath/ath9k/Makefile
5 @@ -13,16 +13,26 @@ ath9k-$(CONFIG_ATH9K_DEBUGFS) += debug.o
6  
7  obj-$(CONFIG_ATH9K) += ath9k.o
8  
9 -ath9k_hw-y:=   hw.o \
10 +ath9k_hw-y:=   \
11 +               ar9002_hw.o \
12 +               ar9003_hw.o \
13 +               hw.o \
14 +               ar9003_phy.o \
15 +               ar9002_phy.o \
16 +               ar5008_phy.o \
17 +               ar9002_calib.o \
18 +               ar9003_calib.o \
19 +               calib.o \
20                 eeprom.o \
21                 eeprom_def.o \
22                 eeprom_4k.o \
23                 eeprom_9287.o \
24 -               calib.o \
25                 ani.o \
26 -               phy.o \
27                 btcoex.o \
28                 mac.o \
29 +               ar9002_mac.o \
30 +               ar9003_mac.o \
31 +               ar9003_eeprom.o
32  
33  obj-$(CONFIG_ATH9K_HW) += ath9k_hw.o
34  
35 diff --git a/drivers/net/wireless/ath/ath9k/ani.c b/drivers/net/wireless/ath/ath9k/ani.c
36 index 2a0cd64..5a2d867 100644
37 --- a/drivers/net/wireless/ath/ath9k/ani.c
38 +++ b/drivers/net/wireless/ath/ath9k/ani.c
39 @@ -15,6 +15,7 @@
40   */
41  
42  #include "hw.h"
43 +#include "hw-ops.h"
44  
45  static int ath9k_hw_get_ani_channel_idx(struct ath_hw *ah,
46                                         struct ath9k_channel *chan)
47 @@ -37,190 +38,6 @@ static int ath9k_hw_get_ani_channel_idx(struct ath_hw *ah,
48         return 0;
49  }
50  
51 -static bool ath9k_hw_ani_control(struct ath_hw *ah,
52 -                                enum ath9k_ani_cmd cmd, int param)
53 -{
54 -       struct ar5416AniState *aniState = ah->curani;
55 -       struct ath_common *common = ath9k_hw_common(ah);
56 -
57 -       switch (cmd & ah->ani_function) {
58 -       case ATH9K_ANI_NOISE_IMMUNITY_LEVEL:{
59 -               u32 level = param;
60 -
61 -               if (level >= ARRAY_SIZE(ah->totalSizeDesired)) {
62 -                       ath_print(common, ATH_DBG_ANI,
63 -                                 "level out of range (%u > %u)\n",
64 -                                 level,
65 -                                 (unsigned)ARRAY_SIZE(ah->totalSizeDesired));
66 -                       return false;
67 -               }
68 -
69 -               REG_RMW_FIELD(ah, AR_PHY_DESIRED_SZ,
70 -                             AR_PHY_DESIRED_SZ_TOT_DES,
71 -                             ah->totalSizeDesired[level]);
72 -               REG_RMW_FIELD(ah, AR_PHY_AGC_CTL1,
73 -                             AR_PHY_AGC_CTL1_COARSE_LOW,
74 -                             ah->coarse_low[level]);
75 -               REG_RMW_FIELD(ah, AR_PHY_AGC_CTL1,
76 -                             AR_PHY_AGC_CTL1_COARSE_HIGH,
77 -                             ah->coarse_high[level]);
78 -               REG_RMW_FIELD(ah, AR_PHY_FIND_SIG,
79 -                             AR_PHY_FIND_SIG_FIRPWR,
80 -                             ah->firpwr[level]);
81 -
82 -               if (level > aniState->noiseImmunityLevel)
83 -                       ah->stats.ast_ani_niup++;
84 -               else if (level < aniState->noiseImmunityLevel)
85 -                       ah->stats.ast_ani_nidown++;
86 -               aniState->noiseImmunityLevel = level;
87 -               break;
88 -       }
89 -       case ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION:{
90 -               const int m1ThreshLow[] = { 127, 50 };
91 -               const int m2ThreshLow[] = { 127, 40 };
92 -               const int m1Thresh[] = { 127, 0x4d };
93 -               const int m2Thresh[] = { 127, 0x40 };
94 -               const int m2CountThr[] = { 31, 16 };
95 -               const int m2CountThrLow[] = { 63, 48 };
96 -               u32 on = param ? 1 : 0;
97 -
98 -               REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW,
99 -                             AR_PHY_SFCORR_LOW_M1_THRESH_LOW,
100 -                             m1ThreshLow[on]);
101 -               REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW,
102 -                             AR_PHY_SFCORR_LOW_M2_THRESH_LOW,
103 -                             m2ThreshLow[on]);
104 -               REG_RMW_FIELD(ah, AR_PHY_SFCORR,
105 -                             AR_PHY_SFCORR_M1_THRESH,
106 -                             m1Thresh[on]);
107 -               REG_RMW_FIELD(ah, AR_PHY_SFCORR,
108 -                             AR_PHY_SFCORR_M2_THRESH,
109 -                             m2Thresh[on]);
110 -               REG_RMW_FIELD(ah, AR_PHY_SFCORR,
111 -                             AR_PHY_SFCORR_M2COUNT_THR,
112 -                             m2CountThr[on]);
113 -               REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW,
114 -                             AR_PHY_SFCORR_LOW_M2COUNT_THR_LOW,
115 -                             m2CountThrLow[on]);
116 -
117 -               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
118 -                             AR_PHY_SFCORR_EXT_M1_THRESH_LOW,
119 -                             m1ThreshLow[on]);
120 -               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
121 -                             AR_PHY_SFCORR_EXT_M2_THRESH_LOW,
122 -                             m2ThreshLow[on]);
123 -               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
124 -                             AR_PHY_SFCORR_EXT_M1_THRESH,
125 -                             m1Thresh[on]);
126 -               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
127 -                             AR_PHY_SFCORR_EXT_M2_THRESH,
128 -                             m2Thresh[on]);
129 -
130 -               if (on)
131 -                       REG_SET_BIT(ah, AR_PHY_SFCORR_LOW,
132 -                                   AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW);
133 -               else
134 -                       REG_CLR_BIT(ah, AR_PHY_SFCORR_LOW,
135 -                                   AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW);
136 -
137 -               if (!on != aniState->ofdmWeakSigDetectOff) {
138 -                       if (on)
139 -                               ah->stats.ast_ani_ofdmon++;
140 -                       else
141 -                               ah->stats.ast_ani_ofdmoff++;
142 -                       aniState->ofdmWeakSigDetectOff = !on;
143 -               }
144 -               break;
145 -       }
146 -       case ATH9K_ANI_CCK_WEAK_SIGNAL_THR:{
147 -               const int weakSigThrCck[] = { 8, 6 };
148 -               u32 high = param ? 1 : 0;
149 -
150 -               REG_RMW_FIELD(ah, AR_PHY_CCK_DETECT,
151 -                             AR_PHY_CCK_DETECT_WEAK_SIG_THR_CCK,
152 -                             weakSigThrCck[high]);
153 -               if (high != aniState->cckWeakSigThreshold) {
154 -                       if (high)
155 -                               ah->stats.ast_ani_cckhigh++;
156 -                       else
157 -                               ah->stats.ast_ani_ccklow++;
158 -                       aniState->cckWeakSigThreshold = high;
159 -               }
160 -               break;
161 -       }
162 -       case ATH9K_ANI_FIRSTEP_LEVEL:{
163 -               const int firstep[] = { 0, 4, 8 };
164 -               u32 level = param;
165 -
166 -               if (level >= ARRAY_SIZE(firstep)) {
167 -                       ath_print(common, ATH_DBG_ANI,
168 -                                 "level out of range (%u > %u)\n",
169 -                                 level,
170 -                                 (unsigned) ARRAY_SIZE(firstep));
171 -                       return false;
172 -               }
173 -               REG_RMW_FIELD(ah, AR_PHY_FIND_SIG,
174 -                             AR_PHY_FIND_SIG_FIRSTEP,
175 -                             firstep[level]);
176 -               if (level > aniState->firstepLevel)
177 -                       ah->stats.ast_ani_stepup++;
178 -               else if (level < aniState->firstepLevel)
179 -                       ah->stats.ast_ani_stepdown++;
180 -               aniState->firstepLevel = level;
181 -               break;
182 -       }
183 -       case ATH9K_ANI_SPUR_IMMUNITY_LEVEL:{
184 -               const int cycpwrThr1[] =
185 -                       { 2, 4, 6, 8, 10, 12, 14, 16 };
186 -               u32 level = param;
187 -
188 -               if (level >= ARRAY_SIZE(cycpwrThr1)) {
189 -                       ath_print(common, ATH_DBG_ANI,
190 -                                 "level out of range (%u > %u)\n",
191 -                                 level,
192 -                                 (unsigned) ARRAY_SIZE(cycpwrThr1));
193 -                       return false;
194 -               }
195 -               REG_RMW_FIELD(ah, AR_PHY_TIMING5,
196 -                             AR_PHY_TIMING5_CYCPWR_THR1,
197 -                             cycpwrThr1[level]);
198 -               if (level > aniState->spurImmunityLevel)
199 -                       ah->stats.ast_ani_spurup++;
200 -               else if (level < aniState->spurImmunityLevel)
201 -                       ah->stats.ast_ani_spurdown++;
202 -               aniState->spurImmunityLevel = level;
203 -               break;
204 -       }
205 -       case ATH9K_ANI_PRESENT:
206 -               break;
207 -       default:
208 -               ath_print(common, ATH_DBG_ANI,
209 -                         "invalid cmd %u\n", cmd);
210 -               return false;
211 -       }
212 -
213 -       ath_print(common, ATH_DBG_ANI, "ANI parameters:\n");
214 -       ath_print(common, ATH_DBG_ANI,
215 -                 "noiseImmunityLevel=%d, spurImmunityLevel=%d, "
216 -                 "ofdmWeakSigDetectOff=%d\n",
217 -                 aniState->noiseImmunityLevel,
218 -                 aniState->spurImmunityLevel,
219 -                 !aniState->ofdmWeakSigDetectOff);
220 -       ath_print(common, ATH_DBG_ANI,
221 -                 "cckWeakSigThreshold=%d, "
222 -                 "firstepLevel=%d, listenTime=%d\n",
223 -                 aniState->cckWeakSigThreshold,
224 -                 aniState->firstepLevel,
225 -                 aniState->listenTime);
226 -       ath_print(common, ATH_DBG_ANI,
227 -               "cycleCount=%d, ofdmPhyErrCount=%d, cckPhyErrCount=%d\n\n",
228 -               aniState->cycleCount,
229 -               aniState->ofdmPhyErrCount,
230 -               aniState->cckPhyErrCount);
231 -
232 -       return true;
233 -}
234 -
235  static void ath9k_hw_update_mibstats(struct ath_hw *ah,
236                                      struct ath9k_mib_stats *stats)
237  {
238 diff --git a/drivers/net/wireless/ath/ath9k/ar5008_initvals.h b/drivers/net/wireless/ath/ath9k/ar5008_initvals.h
239 new file mode 100644
240 index 0000000..ba899f9
241 --- /dev/null
242 +++ b/drivers/net/wireless/ath/ath9k/ar5008_initvals.h
243 @@ -0,0 +1,873 @@
244 +/*
245 + * Copyright (c) 2008-2009 Atheros Communications Inc.
246 + *
247 + * Permission to use, copy, modify, and/or distribute this software for any
248 + * purpose with or without fee is hereby granted, provided that the above
249 + * copyright notice and this permission notice appear in all copies.
250 + *
251 + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
252 + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
253 + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
254 + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
255 + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
256 + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
257 + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
258 + */
259 +
260 +#ifndef INITVALS_AR5008_H
261 +#define INITVALS_AR5008_H
262 +
263 +static const u32 ar5416Modes[][6] = {
264 +       {0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160,
265 +        0x000001e0},
266 +       {0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c,
267 +        0x000001e0},
268 +       {0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38,
269 +        0x00001180},
270 +       {0x000010f0, 0x0000a000, 0x00014000, 0x00016000, 0x0000b000,
271 +        0x00014008},
272 +       {0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00,
273 +        0x06e006e0},
274 +       {0x0000801c, 0x128d93a7, 0x128d93cf, 0x12e013d7, 0x12e013ab,
275 +        0x098813cf},
276 +       {0x00008120, 0x08f04800, 0x08f04800, 0x08f04810, 0x08f04810,
277 +        0x08f04810},
278 +       {0x000081d0, 0x00003210, 0x00003210, 0x0000320a, 0x0000320a,
279 +        0x0000320a},
280 +       {0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300,
281 +        0x00000303},
282 +       {0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200,
283 +        0x02020200},
284 +       {0x00009824, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e,
285 +        0x00000e0e},
286 +       {0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001,
287 +        0x0a020001},
288 +       {0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e,
289 +        0x00000e0e},
290 +       {0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007,
291 +        0x00000007},
292 +       {0x00009844, 0x1372161e, 0x1372161e, 0x137216a0, 0x137216a0,
293 +        0x137216a0},
294 +       {0x00009848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68,
295 +        0x00197a68},
296 +       {0x0000a848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68,
297 +        0x00197a68},
298 +       {0x0000b848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68,
299 +        0x00197a68},
300 +       {0x00009850, 0x6c48b4e0, 0x6d48b4e0, 0x6d48b0de, 0x6c48b0de,
301 +        0x6c48b0de},
302 +       {0x00009858, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e,
303 +        0x7ec82d2e},
304 +       {0x0000985c, 0x31395d5e, 0x3139605e, 0x3139605e, 0x31395d5e,
305 +        0x31395d5e},
306 +       {0x00009860, 0x00049d18, 0x00049d18, 0x00049d18, 0x00049d18,
307 +        0x00049d18},
308 +       {0x00009864, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00,
309 +        0x0001ce00},
310 +       {0x00009868, 0x409a4190, 0x409a4190, 0x409a4190, 0x409a4190,
311 +        0x409a4190},
312 +       {0x0000986c, 0x050cb081, 0x050cb081, 0x050cb081, 0x050cb081,
313 +        0x050cb081},
314 +       {0x00009914, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898,
315 +        0x000007d0},
316 +       {0x00009918, 0x000001b8, 0x00000370, 0x00000268, 0x00000134,
317 +        0x00000134},
318 +       {0x00009924, 0xd0058a0b, 0xd0058a0b, 0xd0058a0b, 0xd0058a0b,
319 +        0xd0058a0b},
320 +       {0x00009944, 0xffb81020, 0xffb81020, 0xffb81020, 0xffb81020,
321 +        0xffb81020},
322 +       {0x00009960, 0x00000900, 0x00000900, 0x00012d80, 0x00012d80,
323 +        0x00012d80},
324 +       {0x0000a960, 0x00000900, 0x00000900, 0x00012d80, 0x00012d80,
325 +        0x00012d80},
326 +       {0x0000b960, 0x00000900, 0x00000900, 0x00012d80, 0x00012d80,
327 +        0x00012d80},
328 +       {0x00009964, 0x00000000, 0x00000000, 0x00001120, 0x00001120,
329 +        0x00001120},
330 +       {0x000099bc, 0x001a0a00, 0x001a0a00, 0x001a0a00, 0x001a0a00,
331 +        0x001a0a00},
332 +       {0x000099c0, 0x038919be, 0x038919be, 0x038919be, 0x038919be,
333 +        0x038919be},
334 +       {0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77,
335 +        0x06336f77},
336 +       {0x000099c8, 0x6af6532c, 0x6af6532c, 0x6af6532c, 0x6af6532c,
337 +        0x6af6532c},
338 +       {0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8,
339 +        0x08f186c8},
340 +       {0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384,
341 +        0x00046384},
342 +       {0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
343 +        0x00000000},
344 +       {0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
345 +        0x00000000},
346 +       {0x0000a204, 0x00000880, 0x00000880, 0x00000880, 0x00000880,
347 +        0x00000880},
348 +       {0x0000a208, 0xd6be4788, 0xd6be4788, 0xd03e4788, 0xd03e4788,
349 +        0xd03e4788},
350 +       {0x0000a20c, 0x002ec1e0, 0x002ec1e0, 0x002ac120, 0x002ac120,
351 +        0x002ac120},
352 +       {0x0000b20c, 0x002ec1e0, 0x002ec1e0, 0x002ac120, 0x002ac120,
353 +        0x002ac120},
354 +       {0x0000c20c, 0x002ec1e0, 0x002ec1e0, 0x002ac120, 0x002ac120,
355 +        0x002ac120},
356 +       {0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a,
357 +        0x1883800a},
358 +       {0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108,
359 +        0x00000000},
360 +       {0x0000a274, 0x0a1a9caa, 0x0a1a9caa, 0x0a1a7caa, 0x0a1a7caa,
361 +        0x0a1a7caa},
362 +       {0x0000a300, 0x18010000, 0x18010000, 0x18010000, 0x18010000,
363 +        0x18010000},
364 +       {0x0000a304, 0x30032602, 0x30032602, 0x2e032402, 0x2e032402,
365 +        0x2e032402},
366 +       {0x0000a308, 0x48073e06, 0x48073e06, 0x4a0a3c06, 0x4a0a3c06,
367 +        0x4a0a3c06},
368 +       {0x0000a30c, 0x560b4c0a, 0x560b4c0a, 0x621a540b, 0x621a540b,
369 +        0x621a540b},
370 +       {0x0000a310, 0x641a600f, 0x641a600f, 0x764f6c1b, 0x764f6c1b,
371 +        0x764f6c1b},
372 +       {0x0000a314, 0x7a4f6e1b, 0x7a4f6e1b, 0x845b7a5a, 0x845b7a5a,
373 +        0x845b7a5a},
374 +       {0x0000a318, 0x8c5b7e5a, 0x8c5b7e5a, 0x950f8ccf, 0x950f8ccf,
375 +        0x950f8ccf},
376 +       {0x0000a31c, 0x9d0f96cf, 0x9d0f96cf, 0xa5cf9b4f, 0xa5cf9b4f,
377 +        0xa5cf9b4f},
378 +       {0x0000a320, 0xb51fa69f, 0xb51fa69f, 0xbddfaf1f, 0xbddfaf1f,
379 +        0xbddfaf1f},
380 +       {0x0000a324, 0xcb3fbd07, 0xcb3fbcbf, 0xd1ffc93f, 0xd1ffc93f,
381 +        0xd1ffc93f},
382 +       {0x0000a328, 0x0000d7bf, 0x0000d7bf, 0x00000000, 0x00000000,
383 +        0x00000000},
384 +       {0x0000a32c, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
385 +        0x00000000},
386 +       {0x0000a330, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
387 +        0x00000000},
388 +       {0x0000a334, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
389 +        0x00000000},
390 +};
391 +
392 +static const u32 ar5416Common[][2] = {
393 +       {0x0000000c, 0x00000000},
394 +       {0x00000030, 0x00020015},
395 +       {0x00000034, 0x00000005},
396 +       {0x00000040, 0x00000000},
397 +       {0x00000044, 0x00000008},
398 +       {0x00000048, 0x00000008},
399 +       {0x0000004c, 0x00000010},
400 +       {0x00000050, 0x00000000},
401 +       {0x00000054, 0x0000001f},
402 +       {0x00000800, 0x00000000},
403 +       {0x00000804, 0x00000000},
404 +       {0x00000808, 0x00000000},
405 +       {0x0000080c, 0x00000000},
406 +       {0x00000810, 0x00000000},
407 +       {0x00000814, 0x00000000},
408 +       {0x00000818, 0x00000000},
409 +       {0x0000081c, 0x00000000},
410 +       {0x00000820, 0x00000000},
411 +       {0x00000824, 0x00000000},
412 +       {0x00001040, 0x002ffc0f},
413 +       {0x00001044, 0x002ffc0f},
414 +       {0x00001048, 0x002ffc0f},
415 +       {0x0000104c, 0x002ffc0f},
416 +       {0x00001050, 0x002ffc0f},
417 +       {0x00001054, 0x002ffc0f},
418 +       {0x00001058, 0x002ffc0f},
419 +       {0x0000105c, 0x002ffc0f},
420 +       {0x00001060, 0x002ffc0f},
421 +       {0x00001064, 0x002ffc0f},
422 +       {0x00001230, 0x00000000},
423 +       {0x00001270, 0x00000000},
424 +       {0x00001038, 0x00000000},
425 +       {0x00001078, 0x00000000},
426 +       {0x000010b8, 0x00000000},
427 +       {0x000010f8, 0x00000000},
428 +       {0x00001138, 0x00000000},
429 +       {0x00001178, 0x00000000},
430 +       {0x000011b8, 0x00000000},
431 +       {0x000011f8, 0x00000000},
432 +       {0x00001238, 0x00000000},
433 +       {0x00001278, 0x00000000},
434 +       {0x000012b8, 0x00000000},
435 +       {0x000012f8, 0x00000000},
436 +       {0x00001338, 0x00000000},
437 +       {0x00001378, 0x00000000},
438 +       {0x000013b8, 0x00000000},
439 +       {0x000013f8, 0x00000000},
440 +       {0x00001438, 0x00000000},
441 +       {0x00001478, 0x00000000},
442 +       {0x000014b8, 0x00000000},
443 +       {0x000014f8, 0x00000000},
444 +       {0x00001538, 0x00000000},
445 +       {0x00001578, 0x00000000},
446 +       {0x000015b8, 0x00000000},
447 +       {0x000015f8, 0x00000000},
448 +       {0x00001638, 0x00000000},
449 +       {0x00001678, 0x00000000},
450 +       {0x000016b8, 0x00000000},
451 +       {0x000016f8, 0x00000000},
452 +       {0x00001738, 0x00000000},
453 +       {0x00001778, 0x00000000},
454 +       {0x000017b8, 0x00000000},
455 +       {0x000017f8, 0x00000000},
456 +       {0x0000103c, 0x00000000},
457 +       {0x0000107c, 0x00000000},
458 +       {0x000010bc, 0x00000000},
459 +       {0x000010fc, 0x00000000},
460 +       {0x0000113c, 0x00000000},
461 +       {0x0000117c, 0x00000000},
462 +       {0x000011bc, 0x00000000},
463 +       {0x000011fc, 0x00000000},
464 +       {0x0000123c, 0x00000000},
465 +       {0x0000127c, 0x00000000},
466 +       {0x000012bc, 0x00000000},
467 +       {0x000012fc, 0x00000000},
468 +       {0x0000133c, 0x00000000},
469 +       {0x0000137c, 0x00000000},
470 +       {0x000013bc, 0x00000000},
471 +       {0x000013fc, 0x00000000},
472 +       {0x0000143c, 0x00000000},
473 +       {0x0000147c, 0x00000000},
474 +       {0x00004030, 0x00000002},
475 +       {0x0000403c, 0x00000002},
476 +       {0x00007010, 0x00000000},
477 +       {0x00007038, 0x000004c2},
478 +       {0x00008004, 0x00000000},
479 +       {0x00008008, 0x00000000},
480 +       {0x0000800c, 0x00000000},
481 +       {0x00008018, 0x00000700},
482 +       {0x00008020, 0x00000000},
483 +       {0x00008038, 0x00000000},
484 +       {0x0000803c, 0x00000000},
485 +       {0x00008048, 0x40000000},
486 +       {0x00008054, 0x00000000},
487 +       {0x00008058, 0x00000000},
488 +       {0x0000805c, 0x000fc78f},
489 +       {0x00008060, 0x0000000f},
490 +       {0x00008064, 0x00000000},
491 +       {0x000080c0, 0x2a82301a},
492 +       {0x000080c4, 0x05dc01e0},
493 +       {0x000080c8, 0x1f402710},
494 +       {0x000080cc, 0x01f40000},
495 +       {0x000080d0, 0x00001e00},
496 +       {0x000080d4, 0x00000000},
497 +       {0x000080d8, 0x00400000},
498 +       {0x000080e0, 0xffffffff},
499 +       {0x000080e4, 0x0000ffff},
500 +       {0x000080e8, 0x003f3f3f},
501 +       {0x000080ec, 0x00000000},
502 +       {0x000080f0, 0x00000000},
503 +       {0x000080f4, 0x00000000},
504 +       {0x000080f8, 0x00000000},
505 +       {0x000080fc, 0x00020000},
506 +       {0x00008100, 0x00020000},
507 +       {0x00008104, 0x00000001},
508 +       {0x00008108, 0x00000052},
509 +       {0x0000810c, 0x00000000},
510 +       {0x00008110, 0x00000168},
511 +       {0x00008118, 0x000100aa},
512 +       {0x0000811c, 0x00003210},
513 +       {0x00008124, 0x00000000},
514 +       {0x00008128, 0x00000000},
515 +       {0x0000812c, 0x00000000},
516 +       {0x00008130, 0x00000000},
517 +       {0x00008134, 0x00000000},
518 +       {0x00008138, 0x00000000},
519 +       {0x0000813c, 0x00000000},
520 +       {0x00008144, 0xffffffff},
521 +       {0x00008168, 0x00000000},
522 +       {0x0000816c, 0x00000000},
523 +       {0x00008170, 0x32143320},
524 +       {0x00008174, 0xfaa4fa50},
525 +       {0x00008178, 0x00000100},
526 +       {0x0000817c, 0x00000000},
527 +       {0x000081c4, 0x00000000},
528 +       {0x000081ec, 0x00000000},
529 +       {0x000081f0, 0x00000000},
530 +       {0x000081f4, 0x00000000},
531 +       {0x000081f8, 0x00000000},
532 +       {0x000081fc, 0x00000000},
533 +       {0x00008200, 0x00000000},
534 +       {0x00008204, 0x00000000},
535 +       {0x00008208, 0x00000000},
536 +       {0x0000820c, 0x00000000},
537 +       {0x00008210, 0x00000000},
538 +       {0x00008214, 0x00000000},
539 +       {0x00008218, 0x00000000},
540 +       {0x0000821c, 0x00000000},
541 +       {0x00008220, 0x00000000},
542 +       {0x00008224, 0x00000000},
543 +       {0x00008228, 0x00000000},
544 +       {0x0000822c, 0x00000000},
545 +       {0x00008230, 0x00000000},
546 +       {0x00008234, 0x00000000},
547 +       {0x00008238, 0x00000000},
548 +       {0x0000823c, 0x00000000},
549 +       {0x00008240, 0x00100000},
550 +       {0x00008244, 0x0010f400},
551 +       {0x00008248, 0x00000100},
552 +       {0x0000824c, 0x0001e800},
553 +       {0x00008250, 0x00000000},
554 +       {0x00008254, 0x00000000},
555 +       {0x00008258, 0x00000000},
556 +       {0x0000825c, 0x400000ff},
557 +       {0x00008260, 0x00080922},
558 +       {0x00008264, 0xa8000010},
559 +       {0x00008270, 0x00000000},
560 +       {0x00008274, 0x40000000},
561 +       {0x00008278, 0x003e4180},
562 +       {0x0000827c, 0x00000000},
563 +       {0x00008284, 0x0000002c},
564 +       {0x00008288, 0x0000002c},
565 +       {0x0000828c, 0x00000000},
566 +       {0x00008294, 0x00000000},
567 +       {0x00008298, 0x00000000},
568 +       {0x00008300, 0x00000000},
569 +       {0x00008304, 0x00000000},
570 +       {0x00008308, 0x00000000},
571 +       {0x0000830c, 0x00000000},
572 +       {0x00008310, 0x00000000},
573 +       {0x00008314, 0x00000000},
574 +       {0x00008318, 0x00000000},
575 +       {0x00008328, 0x00000000},
576 +       {0x0000832c, 0x00000007},
577 +       {0x00008330, 0x00000302},
578 +       {0x00008334, 0x00000e00},
579 +       {0x00008338, 0x00070000},
580 +       {0x0000833c, 0x00000000},
581 +       {0x00008340, 0x000107ff},
582 +       {0x00009808, 0x00000000},
583 +       {0x0000980c, 0xad848e19},
584 +       {0x00009810, 0x7d14e000},
585 +       {0x00009814, 0x9c0a9f6b},
586 +       {0x0000981c, 0x00000000},
587 +       {0x0000982c, 0x0000a000},
588 +       {0x00009830, 0x00000000},
589 +       {0x0000983c, 0x00200400},
590 +       {0x00009840, 0x206a002e},
591 +       {0x0000984c, 0x1284233c},
592 +       {0x00009854, 0x00000859},
593 +       {0x00009900, 0x00000000},
594 +       {0x00009904, 0x00000000},
595 +       {0x00009908, 0x00000000},
596 +       {0x0000990c, 0x00000000},
597 +       {0x0000991c, 0x10000fff},
598 +       {0x00009920, 0x05100000},
599 +       {0x0000a920, 0x05100000},
600 +       {0x0000b920, 0x05100000},
601 +       {0x00009928, 0x00000001},
602 +       {0x0000992c, 0x00000004},
603 +       {0x00009934, 0x1e1f2022},
604 +       {0x00009938, 0x0a0b0c0d},
605 +       {0x0000993c, 0x00000000},
606 +       {0x00009948, 0x9280b212},
607 +       {0x0000994c, 0x00020028},
608 +       {0x00009954, 0x5d50e188},
609 +       {0x00009958, 0x00081fff},
610 +       {0x0000c95c, 0x004b6a8e},
611 +       {0x0000c968, 0x000003ce},
612 +       {0x00009970, 0x190fb515},
613 +       {0x00009974, 0x00000000},
614 +       {0x00009978, 0x00000001},
615 +       {0x0000997c, 0x00000000},
616 +       {0x00009980, 0x00000000},
617 +       {0x00009984, 0x00000000},
618 +       {0x00009988, 0x00000000},
619 +       {0x0000998c, 0x00000000},
620 +       {0x00009990, 0x00000000},
621 +       {0x00009994, 0x00000000},
622 +       {0x00009998, 0x00000000},
623 +       {0x0000999c, 0x00000000},
624 +       {0x000099a0, 0x00000000},
625 +       {0x000099a4, 0x00000001},
626 +       {0x000099a8, 0x001fff00},
627 +       {0x000099ac, 0x00000000},
628 +       {0x000099b0, 0x03051000},
629 +       {0x000099dc, 0x00000000},
630 +       {0x000099e0, 0x00000200},
631 +       {0x000099e4, 0xaaaaaaaa},
632 +       {0x000099e8, 0x3c466478},
633 +       {0x000099ec, 0x000000aa},
634 +       {0x000099fc, 0x00001042},
635 +       {0x00009b00, 0x00000000},
636 +       {0x00009b04, 0x00000001},
637 +       {0x00009b08, 0x00000002},
638 +       {0x00009b0c, 0x00000003},
639 +       {0x00009b10, 0x00000004},
640 +       {0x00009b14, 0x00000005},
641 +       {0x00009b18, 0x00000008},
642 +       {0x00009b1c, 0x00000009},
643 +       {0x00009b20, 0x0000000a},
644 +       {0x00009b24, 0x0000000b},
645 +       {0x00009b28, 0x0000000c},
646 +       {0x00009b2c, 0x0000000d},
647 +       {0x00009b30, 0x00000010},
648 +       {0x00009b34, 0x00000011},
649 +       {0x00009b38, 0x00000012},
650 +       {0x00009b3c, 0x00000013},
651 +       {0x00009b40, 0x00000014},
652 +       {0x00009b44, 0x00000015},
653 +       {0x00009b48, 0x00000018},
654 +       {0x00009b4c, 0x00000019},
655 +       {0x00009b50, 0x0000001a},
656 +       {0x00009b54, 0x0000001b},
657 +       {0x00009b58, 0x0000001c},
658 +       {0x00009b5c, 0x0000001d},
659 +       {0x00009b60, 0x00000020},
660 +       {0x00009b64, 0x00000021},
661 +       {0x00009b68, 0x00000022},
662 +       {0x00009b6c, 0x00000023},
663 +       {0x00009b70, 0x00000024},
664 +       {0x00009b74, 0x00000025},
665 +       {0x00009b78, 0x00000028},
666 +       {0x00009b7c, 0x00000029},
667 +       {0x00009b80, 0x0000002a},
668 +       {0x00009b84, 0x0000002b},
669 +       {0x00009b88, 0x0000002c},
670 +       {0x00009b8c, 0x0000002d},
671 +       {0x00009b90, 0x00000030},
672 +       {0x00009b94, 0x00000031},
673 +       {0x00009b98, 0x00000032},
674 +       {0x00009b9c, 0x00000033},
675 +       {0x00009ba0, 0x00000034},
676 +       {0x00009ba4, 0x00000035},
677 +       {0x00009ba8, 0x00000035},
678 +       {0x00009bac, 0x00000035},
679 +       {0x00009bb0, 0x00000035},
680 +       {0x00009bb4, 0x00000035},
681 +       {0x00009bb8, 0x00000035},
682 +       {0x00009bbc, 0x00000035},
683 +       {0x00009bc0, 0x00000035},
684 +       {0x00009bc4, 0x00000035},
685 +       {0x00009bc8, 0x00000035},
686 +       {0x00009bcc, 0x00000035},
687 +       {0x00009bd0, 0x00000035},
688 +       {0x00009bd4, 0x00000035},
689 +       {0x00009bd8, 0x00000035},
690 +       {0x00009bdc, 0x00000035},
691 +       {0x00009be0, 0x00000035},
692 +       {0x00009be4, 0x00000035},
693 +       {0x00009be8, 0x00000035},
694 +       {0x00009bec, 0x00000035},
695 +       {0x00009bf0, 0x00000035},
696 +       {0x00009bf4, 0x00000035},
697 +       {0x00009bf8, 0x00000010},
698 +       {0x00009bfc, 0x0000001a},
699 +       {0x0000a210, 0x40806333},
700 +       {0x0000a214, 0x00106c10},
701 +       {0x0000a218, 0x009c4060},
702 +       {0x0000a220, 0x018830c6},
703 +       {0x0000a224, 0x00000400},
704 +       {0x0000a228, 0x00000bb5},
705 +       {0x0000a22c, 0x00000011},
706 +       {0x0000a234, 0x20202020},
707 +       {0x0000a238, 0x20202020},
708 +       {0x0000a23c, 0x13c889af},
709 +       {0x0000a240, 0x38490a20},
710 +       {0x0000a244, 0x00007bb6},
711 +       {0x0000a248, 0x0fff3ffc},
712 +       {0x0000a24c, 0x00000001},
713 +       {0x0000a250, 0x0000a000},
714 +       {0x0000a254, 0x00000000},
715 +       {0x0000a258, 0x0cc75380},
716 +       {0x0000a25c, 0x0f0f0f01},
717 +       {0x0000a260, 0xdfa91f01},
718 +       {0x0000a268, 0x00000000},
719 +       {0x0000a26c, 0x0e79e5c6},
720 +       {0x0000b26c, 0x0e79e5c6},
721 +       {0x0000c26c, 0x0e79e5c6},
722 +       {0x0000d270, 0x00820820},
723 +       {0x0000a278, 0x1ce739ce},
724 +       {0x0000a27c, 0x051701ce},
725 +       {0x0000a338, 0x00000000},
726 +       {0x0000a33c, 0x00000000},
727 +       {0x0000a340, 0x00000000},
728 +       {0x0000a344, 0x00000000},
729 +       {0x0000a348, 0x3fffffff},
730 +       {0x0000a34c, 0x3fffffff},
731 +       {0x0000a350, 0x3fffffff},
732 +       {0x0000a354, 0x0003ffff},
733 +       {0x0000a358, 0x79a8aa1f},
734 +       {0x0000d35c, 0x07ffffef},
735 +       {0x0000d360, 0x0fffffe7},
736 +       {0x0000d364, 0x17ffffe5},
737 +       {0x0000d368, 0x1fffffe4},
738 +       {0x0000d36c, 0x37ffffe3},
739 +       {0x0000d370, 0x3fffffe3},
740 +       {0x0000d374, 0x57ffffe3},
741 +       {0x0000d378, 0x5fffffe2},
742 +       {0x0000d37c, 0x7fffffe2},
743 +       {0x0000d380, 0x7f3c7bba},
744 +       {0x0000d384, 0xf3307ff0},
745 +       {0x0000a388, 0x08000000},
746 +       {0x0000a38c, 0x20202020},
747 +       {0x0000a390, 0x20202020},
748 +       {0x0000a394, 0x1ce739ce},
749 +       {0x0000a398, 0x000001ce},
750 +       {0x0000a39c, 0x00000001},
751 +       {0x0000a3a0, 0x00000000},
752 +       {0x0000a3a4, 0x00000000},
753 +       {0x0000a3a8, 0x00000000},
754 +       {0x0000a3ac, 0x00000000},
755 +       {0x0000a3b0, 0x00000000},
756 +       {0x0000a3b4, 0x00000000},
757 +       {0x0000a3b8, 0x00000000},
758 +       {0x0000a3bc, 0x00000000},
759 +       {0x0000a3c0, 0x00000000},
760 +       {0x0000a3c4, 0x00000000},
761 +       {0x0000a3c8, 0x00000246},
762 +       {0x0000a3cc, 0x20202020},
763 +       {0x0000a3d0, 0x20202020},
764 +       {0x0000a3d4, 0x20202020},
765 +       {0x0000a3dc, 0x1ce739ce},
766 +       {0x0000a3e0, 0x000001ce},
767 +};
768 +
769 +static const u32 ar5416Bank0[][2] = {
770 +       {0x000098b0, 0x1e5795e5},
771 +       {0x000098e0, 0x02008020},
772 +};
773 +
774 +static const u32 ar5416BB_RfGain[][3] = {
775 +       {0x00009a00, 0x00000000, 0x00000000},
776 +       {0x00009a04, 0x00000040, 0x00000040},
777 +       {0x00009a08, 0x00000080, 0x00000080},
778 +       {0x00009a0c, 0x000001a1, 0x00000141},
779 +       {0x00009a10, 0x000001e1, 0x00000181},
780 +       {0x00009a14, 0x00000021, 0x000001c1},
781 +       {0x00009a18, 0x00000061, 0x00000001},
782 +       {0x00009a1c, 0x00000168, 0x00000041},
783 +       {0x00009a20, 0x000001a8, 0x000001a8},
784 +       {0x00009a24, 0x000001e8, 0x000001e8},
785 +       {0x00009a28, 0x00000028, 0x00000028},
786 +       {0x00009a2c, 0x00000068, 0x00000068},
787 +       {0x00009a30, 0x00000189, 0x000000a8},
788 +       {0x00009a34, 0x000001c9, 0x00000169},
789 +       {0x00009a38, 0x00000009, 0x000001a9},
790 +       {0x00009a3c, 0x00000049, 0x000001e9},
791 +       {0x00009a40, 0x00000089, 0x00000029},
792 +       {0x00009a44, 0x00000170, 0x00000069},
793 +       {0x00009a48, 0x000001b0, 0x00000190},
794 +       {0x00009a4c, 0x000001f0, 0x000001d0},
795 +       {0x00009a50, 0x00000030, 0x00000010},
796 +       {0x00009a54, 0x00000070, 0x00000050},
797 +       {0x00009a58, 0x00000191, 0x00000090},
798 +       {0x00009a5c, 0x000001d1, 0x00000151},
799 +       {0x00009a60, 0x00000011, 0x00000191},
800 +       {0x00009a64, 0x00000051, 0x000001d1},
801 +       {0x00009a68, 0x00000091, 0x00000011},
802 +       {0x00009a6c, 0x000001b8, 0x00000051},
803 +       {0x00009a70, 0x000001f8, 0x00000198},
804 +       {0x00009a74, 0x00000038, 0x000001d8},
805 +       {0x00009a78, 0x00000078, 0x00000018},
806 +       {0x00009a7c, 0x00000199, 0x00000058},
807 +       {0x00009a80, 0x000001d9, 0x00000098},
808 +       {0x00009a84, 0x00000019, 0x00000159},
809 +       {0x00009a88, 0x00000059, 0x00000199},
810 +       {0x00009a8c, 0x00000099, 0x000001d9},
811 +       {0x00009a90, 0x000000d9, 0x00000019},
812 +       {0x00009a94, 0x000000f9, 0x00000059},
813 +       {0x00009a98, 0x000000f9, 0x00000099},
814 +       {0x00009a9c, 0x000000f9, 0x000000d9},
815 +       {0x00009aa0, 0x000000f9, 0x000000f9},
816 +       {0x00009aa4, 0x000000f9, 0x000000f9},
817 +       {0x00009aa8, 0x000000f9, 0x000000f9},
818 +       {0x00009aac, 0x000000f9, 0x000000f9},
819 +       {0x00009ab0, 0x000000f9, 0x000000f9},
820 +       {0x00009ab4, 0x000000f9, 0x000000f9},
821 +       {0x00009ab8, 0x000000f9, 0x000000f9},
822 +       {0x00009abc, 0x000000f9, 0x000000f9},
823 +       {0x00009ac0, 0x000000f9, 0x000000f9},
824 +       {0x00009ac4, 0x000000f9, 0x000000f9},
825 +       {0x00009ac8, 0x000000f9, 0x000000f9},
826 +       {0x00009acc, 0x000000f9, 0x000000f9},
827 +       {0x00009ad0, 0x000000f9, 0x000000f9},
828 +       {0x00009ad4, 0x000000f9, 0x000000f9},
829 +       {0x00009ad8, 0x000000f9, 0x000000f9},
830 +       {0x00009adc, 0x000000f9, 0x000000f9},
831 +       {0x00009ae0, 0x000000f9, 0x000000f9},
832 +       {0x00009ae4, 0x000000f9, 0x000000f9},
833 +       {0x00009ae8, 0x000000f9, 0x000000f9},
834 +       {0x00009aec, 0x000000f9, 0x000000f9},
835 +       {0x00009af0, 0x000000f9, 0x000000f9},
836 +       {0x00009af4, 0x000000f9, 0x000000f9},
837 +       {0x00009af8, 0x000000f9, 0x000000f9},
838 +       {0x00009afc, 0x000000f9, 0x000000f9},
839 +};
840 +
841 +static const u32 ar5416Bank1[][2] = {
842 +       {0x000098b0, 0x02108421},
843 +       {0x000098ec, 0x00000008},
844 +};
845 +
846 +static const u32 ar5416Bank2[][2] = {
847 +       {0x000098b0, 0x0e73ff17},
848 +       {0x000098e0, 0x00000420},
849 +};
850 +
851 +static const u32 ar5416Bank3[][3] = {
852 +       {0x000098f0, 0x01400018, 0x01c00018},
853 +};
854 +
855 +static const u32 ar5416Bank6[][3] = {
856 +
857 +       {0x0000989c, 0x00000000, 0x00000000},
858 +       {0x0000989c, 0x00000000, 0x00000000},
859 +       {0x0000989c, 0x00000000, 0x00000000},
860 +       {0x0000989c, 0x00e00000, 0x00e00000},
861 +       {0x0000989c, 0x005e0000, 0x005e0000},
862 +       {0x0000989c, 0x00120000, 0x00120000},
863 +       {0x0000989c, 0x00620000, 0x00620000},
864 +       {0x0000989c, 0x00020000, 0x00020000},
865 +       {0x0000989c, 0x00ff0000, 0x00ff0000},
866 +       {0x0000989c, 0x00ff0000, 0x00ff0000},
867 +       {0x0000989c, 0x00ff0000, 0x00ff0000},
868 +       {0x0000989c, 0x40ff0000, 0x40ff0000},
869 +       {0x0000989c, 0x005f0000, 0x005f0000},
870 +       {0x0000989c, 0x00870000, 0x00870000},
871 +       {0x0000989c, 0x00f90000, 0x00f90000},
872 +       {0x0000989c, 0x007b0000, 0x007b0000},
873 +       {0x0000989c, 0x00ff0000, 0x00ff0000},
874 +       {0x0000989c, 0x00f50000, 0x00f50000},
875 +       {0x0000989c, 0x00dc0000, 0x00dc0000},
876 +       {0x0000989c, 0x00110000, 0x00110000},
877 +       {0x0000989c, 0x006100a8, 0x006100a8},
878 +       {0x0000989c, 0x004210a2, 0x004210a2},
879 +       {0x0000989c, 0x0014008f, 0x0014008f},
880 +       {0x0000989c, 0x00c40003, 0x00c40003},
881 +       {0x0000989c, 0x003000f2, 0x003000f2},
882 +       {0x0000989c, 0x00440016, 0x00440016},
883 +       {0x0000989c, 0x00410040, 0x00410040},
884 +       {0x0000989c, 0x0001805e, 0x0001805e},
885 +       {0x0000989c, 0x0000c0ab, 0x0000c0ab},
886 +       {0x0000989c, 0x000000f1, 0x000000f1},
887 +       {0x0000989c, 0x00002081, 0x00002081},
888 +       {0x0000989c, 0x000000d4, 0x000000d4},
889 +       {0x000098d0, 0x0000000f, 0x0010000f},
890 +};
891 +
892 +static const u32 ar5416Bank6TPC[][3] = {
893 +       {0x0000989c, 0x00000000, 0x00000000},
894 +       {0x0000989c, 0x00000000, 0x00000000},
895 +       {0x0000989c, 0x00000000, 0x00000000},
896 +       {0x0000989c, 0x00e00000, 0x00e00000},
897 +       {0x0000989c, 0x005e0000, 0x005e0000},
898 +       {0x0000989c, 0x00120000, 0x00120000},
899 +       {0x0000989c, 0x00620000, 0x00620000},
900 +       {0x0000989c, 0x00020000, 0x00020000},
901 +       {0x0000989c, 0x00ff0000, 0x00ff0000},
902 +       {0x0000989c, 0x00ff0000, 0x00ff0000},
903 +       {0x0000989c, 0x00ff0000, 0x00ff0000},
904 +       {0x0000989c, 0x40ff0000, 0x40ff0000},
905 +       {0x0000989c, 0x005f0000, 0x005f0000},
906 +       {0x0000989c, 0x00870000, 0x00870000},
907 +       {0x0000989c, 0x00f90000, 0x00f90000},
908 +       {0x0000989c, 0x007b0000, 0x007b0000},
909 +       {0x0000989c, 0x00ff0000, 0x00ff0000},
910 +       {0x0000989c, 0x00f50000, 0x00f50000},
911 +       {0x0000989c, 0x00dc0000, 0x00dc0000},
912 +       {0x0000989c, 0x00110000, 0x00110000},
913 +       {0x0000989c, 0x006100a8, 0x006100a8},
914 +       {0x0000989c, 0x00423022, 0x00423022},
915 +       {0x0000989c, 0x201400df, 0x201400df},
916 +       {0x0000989c, 0x00c40002, 0x00c40002},
917 +       {0x0000989c, 0x003000f2, 0x003000f2},
918 +       {0x0000989c, 0x00440016, 0x00440016},
919 +       {0x0000989c, 0x00410040, 0x00410040},
920 +       {0x0000989c, 0x0001805e, 0x0001805e},
921 +       {0x0000989c, 0x0000c0ab, 0x0000c0ab},
922 +       {0x0000989c, 0x000000e1, 0x000000e1},
923 +       {0x0000989c, 0x00007081, 0x00007081},
924 +       {0x0000989c, 0x000000d4, 0x000000d4},
925 +       {0x000098d0, 0x0000000f, 0x0010000f},
926 +};
927 +
928 +static const u32 ar5416Bank7[][2] = {
929 +       {0x0000989c, 0x00000500},
930 +       {0x0000989c, 0x00000800},
931 +       {0x000098cc, 0x0000000e},
932 +};
933 +
934 +static const u32 ar5416Addac[][2] = {
935 +       {0x0000989c, 0x00000000},
936 +       {0x0000989c, 0x00000003},
937 +       {0x0000989c, 0x00000000},
938 +       {0x0000989c, 0x0000000c},
939 +       {0x0000989c, 0x00000000},
940 +       {0x0000989c, 0x00000030},
941 +       {0x0000989c, 0x00000000},
942 +       {0x0000989c, 0x00000000},
943 +       {0x0000989c, 0x00000000},
944 +       {0x0000989c, 0x00000000},
945 +       {0x0000989c, 0x00000000},
946 +       {0x0000989c, 0x00000000},
947 +       {0x0000989c, 0x00000000},
948 +       {0x0000989c, 0x00000000},
949 +       {0x0000989c, 0x00000000},
950 +       {0x0000989c, 0x00000000},
951 +       {0x0000989c, 0x00000000},
952 +       {0x0000989c, 0x00000000},
953 +       {0x0000989c, 0x00000060},
954 +       {0x0000989c, 0x00000000},
955 +       {0x0000989c, 0x00000000},
956 +       {0x0000989c, 0x00000000},
957 +       {0x0000989c, 0x00000000},
958 +       {0x0000989c, 0x00000000},
959 +       {0x0000989c, 0x00000000},
960 +       {0x0000989c, 0x00000000},
961 +       {0x0000989c, 0x00000000},
962 +       {0x0000989c, 0x00000000},
963 +       {0x0000989c, 0x00000000},
964 +       {0x0000989c, 0x00000000},
965 +       {0x0000989c, 0x00000000},
966 +       {0x0000989c, 0x00000058},
967 +       {0x0000989c, 0x00000000},
968 +       {0x0000989c, 0x00000000},
969 +       {0x0000989c, 0x00000000},
970 +       {0x0000989c, 0x00000000},
971 +       {0x000098cc, 0x00000000},
972 +};
973 +
974 +static const u32 ar5416Modes_9100[][6] = {
975 +       {0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160,
976 +        0x000001e0},
977 +       {0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c,
978 +        0x000001e0},
979 +       {0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38,
980 +        0x00001180},
981 +       {0x000010f0, 0x0000a000, 0x00014000, 0x00016000, 0x0000b000,
982 +        0x00014008},
983 +       {0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00,
984 +        0x06e006e0},
985 +       {0x0000801c, 0x128d93a7, 0x128d93cf, 0x12e013d7, 0x12e013ab,
986 +        0x098813cf},
987 +       {0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300,
988 +        0x00000303},
989 +       {0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200,
990 +        0x02020200},
991 +       {0x00009824, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e,
992 +        0x00000e0e},
993 +       {0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001,
994 +        0x0a020001},
995 +       {0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e,
996 +        0x00000e0e},
997 +       {0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007,
998 +        0x00000007},
999 +       {0x00009844, 0x0372161e, 0x0372161e, 0x037216a0, 0x037216a0,
1000 +        0x037216a0},
1001 +       {0x00009848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68,
1002 +        0x00197a68},
1003 +       {0x0000a848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68,
1004 +        0x00197a68},
1005 +       {0x0000b848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68,
1006 +        0x00197a68},
1007 +       {0x00009850, 0x6d48b4e2, 0x6d48b4e2, 0x6d48b0e2, 0x6d48b0e2,
1008 +        0x6d48b0e2},
1009 +       {0x00009858, 0x7ec82d2e, 0x7ec82d2e, 0x7ec86d2e, 0x7ec84d2e,
1010 +        0x7ec82d2e},
1011 +       {0x0000985c, 0x3139605e, 0x3139605e, 0x3139605e, 0x3139605e,
1012 +        0x3139605e},
1013 +       {0x00009860, 0x00048d18, 0x00048d18, 0x00048d20, 0x00048d20,
1014 +        0x00048d18},
1015 +       {0x0000c864, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00,
1016 +        0x0001ce00},
1017 +       {0x00009868, 0x409a40d0, 0x409a40d0, 0x409a40d0, 0x409a40d0,
1018 +        0x409a40d0},
1019 +       {0x0000986c, 0x050cb081, 0x050cb081, 0x050cb081, 0x050cb081,
1020 +        0x050cb081},
1021 +       {0x00009914, 0x000007d0, 0x000007d0, 0x00000898, 0x00000898,
1022 +        0x000007d0},
1023 +       {0x00009918, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b,
1024 +        0x00000016},
1025 +       {0x00009924, 0xd00a8a07, 0xd00a8a07, 0xd00a8a11, 0xd00a8a0d,
1026 +        0xd00a8a0d},
1027 +       {0x00009940, 0x00754604, 0x00754604, 0xfff81204, 0xfff81204,
1028 +        0xfff81204},
1029 +       {0x00009944, 0xdfb81020, 0xdfb81020, 0xdfb81020, 0xdfb81020,
1030 +        0xdfb81020},
1031 +       {0x00009954, 0x5f3ca3de, 0x5f3ca3de, 0xe250a51e, 0xe250a51e,
1032 +        0xe250a51e},
1033 +       {0x00009958, 0x2108ecff, 0x2108ecff, 0x3388ffff, 0x3388ffff,
1034 +        0x3388ffff},
1035 +#ifdef TB243
1036 +       {0x00009960, 0x00000900, 0x00000900, 0x00009b40, 0x00009b40,
1037 +        0x00012d80},
1038 +       {0x0000a960, 0x00000900, 0x00000900, 0x00009b40, 0x00009b40,
1039 +        0x00012d80},
1040 +       {0x0000b960, 0x00000900, 0x00000900, 0x00009b40, 0x00009b40,
1041 +        0x00012d80},
1042 +       {0x00009964, 0x00000000, 0x00000000, 0x00002210, 0x00002210,
1043 +        0x00001120},
1044 +#else
1045 +       {0x00009960, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0,
1046 +        0x0001bfc0},
1047 +       {0x0000a960, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0,
1048 +        0x0001bfc0},
1049 +       {0x0000b960, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0,
1050 +        0x0001bfc0},
1051 +       {0x00009964, 0x00001120, 0x00001120, 0x00001120, 0x00001120,
1052 +        0x00001120},
1053 +#endif
1054 +       {0x0000c9bc, 0x001a0600, 0x001a0600, 0x001a1000, 0x001a0c00,
1055 +        0x001a0c00},
1056 +       {0x000099c0, 0x038919be, 0x038919be, 0x038919be, 0x038919be,
1057 +        0x038919be},
1058 +       {0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77,
1059 +        0x06336f77},
1060 +       {0x000099c8, 0x60f65329, 0x60f65329, 0x60f65329, 0x60f65329,
1061 +        0x60f65329},
1062 +       {0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8,
1063 +        0x08f186c8},
1064 +       {0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384,
1065 +        0x00046384},
1066 +       {0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1067 +        0x00000000},
1068 +       {0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1069 +        0x00000000},
1070 +       {0x0000a204, 0x00000880, 0x00000880, 0x00000880, 0x00000880,
1071 +        0x00000880},
1072 +       {0x0000a208, 0xd6be4788, 0xd6be4788, 0xd03e4788, 0xd03e4788,
1073 +        0xd03e4788},
1074 +       {0x0000a20c, 0x002fc160, 0x002fc160, 0x002ac120, 0x002ac120,
1075 +        0x002ac120},
1076 +       {0x0000b20c, 0x002fc160, 0x002fc160, 0x002ac120, 0x002ac120,
1077 +        0x002ac120},
1078 +       {0x0000c20c, 0x002fc160, 0x002fc160, 0x002ac120, 0x002ac120,
1079 +        0x002ac120},
1080 +       {0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a,
1081 +        0x1883800a},
1082 +       {0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108,
1083 +        0x00000000},
1084 +       {0x0000a274, 0x0a1a9caa, 0x0a1a9caa, 0x0a1a7caa, 0x0a1a7caa,
1085 +        0x0a1a7caa},
1086 +       {0x0000a300, 0x18010000, 0x18010000, 0x18010000, 0x18010000,
1087 +        0x18010000},
1088 +       {0x0000a304, 0x30032602, 0x30032602, 0x2e032402, 0x2e032402,
1089 +        0x2e032402},
1090 +       {0x0000a308, 0x48073e06, 0x48073e06, 0x4a0a3c06, 0x4a0a3c06,
1091 +        0x4a0a3c06},
1092 +       {0x0000a30c, 0x560b4c0a, 0x560b4c0a, 0x621a540b, 0x621a540b,
1093 +        0x621a540b},
1094 +       {0x0000a310, 0x641a600f, 0x641a600f, 0x764f6c1b, 0x764f6c1b,
1095 +        0x764f6c1b},
1096 +       {0x0000a314, 0x7a4f6e1b, 0x7a4f6e1b, 0x845b7a5a, 0x845b7a5a,
1097 +        0x845b7a5a},
1098 +       {0x0000a318, 0x8c5b7e5a, 0x8c5b7e5a, 0x950f8ccf, 0x950f8ccf,
1099 +        0x950f8ccf},
1100 +       {0x0000a31c, 0x9d0f96cf, 0x9d0f96cf, 0xa5cf9b4f, 0xa5cf9b4f,
1101 +        0xa5cf9b4f},
1102 +       {0x0000a320, 0xb51fa69f, 0xb51fa69f, 0xbddfaf1f, 0xbddfaf1f,
1103 +        0xbddfaf1f},
1104 +       {0x0000a324, 0xcb3fbd07, 0xcb3fbcbf, 0xd1ffc93f, 0xd1ffc93f,
1105 +        0xd1ffc93f},
1106 +       {0x0000a328, 0x0000d7bf, 0x0000d7bf, 0x00000000, 0x00000000,
1107 +        0x00000000},
1108 +       {0x0000a32c, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1109 +        0x00000000},
1110 +       {0x0000a330, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1111 +        0x00000000},
1112 +       {0x0000a334, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1113 +        0x00000000},
1114 +};
1115 +
1116 +#endif /* INITVALS_AR5008_H */
1117 diff --git a/drivers/net/wireless/ath/ath9k/ar5008_phy.c b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
1118 new file mode 100644
1119 index 0000000..60fe5bb
1120 --- /dev/null
1121 +++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
1122 @@ -0,0 +1,1278 @@
1123 +/*
1124 + * Copyright (c) 2008-2010 Atheros Communications Inc.
1125 + *
1126 + * Permission to use, copy, modify, and/or distribute this software for any
1127 + * purpose with or without fee is hereby granted, provided that the above
1128 + * copyright notice and this permission notice appear in all copies.
1129 + *
1130 + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
1131 + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1132 + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
1133 + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1134 + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
1135 + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
1136 + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1137 + */
1138 +
1139 +#include "hw.h"
1140 +#include "hw-ops.h"
1141 +#include "../regd.h"
1142 +#include "ar9002_phy.h"
1143 +
1144 +/* All code below is for non single-chip solutions */
1145 +
1146 +/**
1147 + * ar5008_hw_phy_modify_rx_buffer() - perform analog swizzling of parameters
1148 + * @rfbuf:
1149 + * @reg32:
1150 + * @numBits:
1151 + * @firstBit:
1152 + * @column:
1153 + *
1154 + * Performs analog "swizzling" of parameters into their location.
1155 + * Used on external AR2133/AR5133 radios.
1156 + */
1157 +static void ar5008_hw_phy_modify_rx_buffer(u32 *rfBuf, u32 reg32,
1158 +                                          u32 numBits, u32 firstBit,
1159 +                                          u32 column)
1160 +{
1161 +       u32 tmp32, mask, arrayEntry, lastBit;
1162 +       int32_t bitPosition, bitsLeft;
1163 +
1164 +       tmp32 = ath9k_hw_reverse_bits(reg32, numBits);
1165 +       arrayEntry = (firstBit - 1) / 8;
1166 +       bitPosition = (firstBit - 1) % 8;
1167 +       bitsLeft = numBits;
1168 +       while (bitsLeft > 0) {
1169 +               lastBit = (bitPosition + bitsLeft > 8) ?
1170 +                   8 : bitPosition + bitsLeft;
1171 +               mask = (((1 << lastBit) - 1) ^ ((1 << bitPosition) - 1)) <<
1172 +                   (column * 8);
1173 +               rfBuf[arrayEntry] &= ~mask;
1174 +               rfBuf[arrayEntry] |= ((tmp32 << bitPosition) <<
1175 +                                     (column * 8)) & mask;
1176 +               bitsLeft -= 8 - bitPosition;
1177 +               tmp32 = tmp32 >> (8 - bitPosition);
1178 +               bitPosition = 0;
1179 +               arrayEntry++;
1180 +       }
1181 +}
1182 +
1183 +/*
1184 + * Fix on 2.4 GHz band for orientation sensitivity issue by increasing
1185 + * rf_pwd_icsyndiv.
1186 + *
1187 + * Theoretical Rules:
1188 + *   if 2 GHz band
1189 + *      if forceBiasAuto
1190 + *         if synth_freq < 2412
1191 + *            bias = 0
1192 + *         else if 2412 <= synth_freq <= 2422
1193 + *            bias = 1
1194 + *         else // synth_freq > 2422
1195 + *            bias = 2
1196 + *      else if forceBias > 0
1197 + *         bias = forceBias & 7
1198 + *      else
1199 + *         no change, use value from ini file
1200 + *   else
1201 + *      no change, invalid band
1202 + *
1203 + *  1st Mod:
1204 + *    2422 also uses value of 2
1205 + *    <approved>
1206 + *
1207 + *  2nd Mod:
1208 + *    Less than 2412 uses value of 0, 2412 and above uses value of 2
1209 + */
1210 +static void ar5008_hw_force_bias(struct ath_hw *ah, u16 synth_freq)
1211 +{
1212 +       struct ath_common *common = ath9k_hw_common(ah);
1213 +       u32 tmp_reg;
1214 +       int reg_writes = 0;
1215 +       u32 new_bias = 0;
1216 +
1217 +       if (!AR_SREV_5416(ah) || synth_freq >= 3000) {
1218 +               return;
1219 +       }
1220 +
1221 +       BUG_ON(AR_SREV_9280_10_OR_LATER(ah));
1222 +
1223 +       if (synth_freq < 2412)
1224 +               new_bias = 0;
1225 +       else if (synth_freq < 2422)
1226 +               new_bias = 1;
1227 +       else
1228 +               new_bias = 2;
1229 +
1230 +       /* pre-reverse this field */
1231 +       tmp_reg = ath9k_hw_reverse_bits(new_bias, 3);
1232 +
1233 +       ath_print(common, ATH_DBG_CONFIG,
1234 +                 "Force rf_pwd_icsyndiv to %1d on %4d\n",
1235 +                 new_bias, synth_freq);
1236 +
1237 +       /* swizzle rf_pwd_icsyndiv */
1238 +       ar5008_hw_phy_modify_rx_buffer(ah->analogBank6Data, tmp_reg, 3, 181, 3);
1239 +
1240 +       /* write Bank 6 with new params */
1241 +       REG_WRITE_RF_ARRAY(&ah->iniBank6, ah->analogBank6Data, reg_writes);
1242 +}
1243 +
1244 +/**
1245 + * ar5008_hw_set_channel - tune to a channel on the external AR2133/AR5133 radios
1246 + * @ah: atheros hardware stucture
1247 + * @chan:
1248 + *
1249 + * For the external AR2133/AR5133 radios, takes the MHz channel value and set
1250 + * the channel value. Assumes writes enabled to analog bus and bank6 register
1251 + * cache in ah->analogBank6Data.
1252 + */
1253 +static int ar5008_hw_set_channel(struct ath_hw *ah, struct ath9k_channel *chan)
1254 +{
1255 +       struct ath_common *common = ath9k_hw_common(ah);
1256 +       u32 channelSel = 0;
1257 +       u32 bModeSynth = 0;
1258 +       u32 aModeRefSel = 0;
1259 +       u32 reg32 = 0;
1260 +       u16 freq;
1261 +       struct chan_centers centers;
1262 +
1263 +       ath9k_hw_get_channel_centers(ah, chan, &centers);
1264 +       freq = centers.synth_center;
1265 +
1266 +       if (freq < 4800) {
1267 +               u32 txctl;
1268 +
1269 +               if (((freq - 2192) % 5) == 0) {
1270 +                       channelSel = ((freq - 672) * 2 - 3040) / 10;
1271 +                       bModeSynth = 0;
1272 +               } else if (((freq - 2224) % 5) == 0) {
1273 +                       channelSel = ((freq - 704) * 2 - 3040) / 10;
1274 +                       bModeSynth = 1;
1275 +               } else {
1276 +                       ath_print(common, ATH_DBG_FATAL,
1277 +                                 "Invalid channel %u MHz\n", freq);
1278 +                       return -EINVAL;
1279 +               }
1280 +
1281 +               channelSel = (channelSel << 2) & 0xff;
1282 +               channelSel = ath9k_hw_reverse_bits(channelSel, 8);
1283 +
1284 +               txctl = REG_READ(ah, AR_PHY_CCK_TX_CTRL);
1285 +               if (freq == 2484) {
1286 +
1287 +                       REG_WRITE(ah, AR_PHY_CCK_TX_CTRL,
1288 +                                 txctl | AR_PHY_CCK_TX_CTRL_JAPAN);
1289 +               } else {
1290 +                       REG_WRITE(ah, AR_PHY_CCK_TX_CTRL,
1291 +                                 txctl & ~AR_PHY_CCK_TX_CTRL_JAPAN);
1292 +               }
1293 +
1294 +       } else if ((freq % 20) == 0 && freq >= 5120) {
1295 +               channelSel =
1296 +                   ath9k_hw_reverse_bits(((freq - 4800) / 20 << 2), 8);
1297 +               aModeRefSel = ath9k_hw_reverse_bits(1, 2);
1298 +       } else if ((freq % 10) == 0) {
1299 +               channelSel =
1300 +                   ath9k_hw_reverse_bits(((freq - 4800) / 10 << 1), 8);
1301 +               if (AR_SREV_9100(ah) || AR_SREV_9160_10_OR_LATER(ah))
1302 +                       aModeRefSel = ath9k_hw_reverse_bits(2, 2);
1303 +               else
1304 +                       aModeRefSel = ath9k_hw_reverse_bits(1, 2);
1305 +       } else if ((freq % 5) == 0) {
1306 +               channelSel = ath9k_hw_reverse_bits((freq - 4800) / 5, 8);
1307 +               aModeRefSel = ath9k_hw_reverse_bits(1, 2);
1308 +       } else {
1309 +               ath_print(common, ATH_DBG_FATAL,
1310 +                         "Invalid channel %u MHz\n", freq);
1311 +               return -EINVAL;
1312 +       }
1313 +
1314 +       ar5008_hw_force_bias(ah, freq);
1315 +
1316 +       reg32 =
1317 +           (channelSel << 8) | (aModeRefSel << 2) | (bModeSynth << 1) |
1318 +           (1 << 5) | 0x1;
1319 +
1320 +       REG_WRITE(ah, AR_PHY(0x37), reg32);
1321 +
1322 +       ah->curchan = chan;
1323 +       ah->curchan_rad_index = -1;
1324 +
1325 +       return 0;
1326 +}
1327 +
1328 +/**
1329 + * ar5008_hw_spur_mitigate - convert baseband spur frequency for external radios
1330 + * @ah: atheros hardware structure
1331 + * @chan:
1332 + *
1333 + * For non single-chip solutions. Converts to baseband spur frequency given the
1334 + * input channel frequency and compute register settings below.
1335 + */
1336 +static void ar5008_hw_spur_mitigate(struct ath_hw *ah, struct ath9k_channel *chan)
1337 +{
1338 +       int bb_spur = AR_NO_SPUR;
1339 +       int bin, cur_bin;
1340 +       int spur_freq_sd;
1341 +       int spur_delta_phase;
1342 +       int denominator;
1343 +       int upper, lower, cur_vit_mask;
1344 +       int tmp, new;
1345 +       int i;
1346 +       int pilot_mask_reg[4] = { AR_PHY_TIMING7, AR_PHY_TIMING8,
1347 +                         AR_PHY_PILOT_MASK_01_30, AR_PHY_PILOT_MASK_31_60
1348 +       };
1349 +       int chan_mask_reg[4] = { AR_PHY_TIMING9, AR_PHY_TIMING10,
1350 +                        AR_PHY_CHANNEL_MASK_01_30, AR_PHY_CHANNEL_MASK_31_60
1351 +       };
1352 +       int inc[4] = { 0, 100, 0, 0 };
1353 +
1354 +       int8_t mask_m[123];
1355 +       int8_t mask_p[123];
1356 +       int8_t mask_amt;
1357 +       int tmp_mask;
1358 +       int cur_bb_spur;
1359 +       bool is2GHz = IS_CHAN_2GHZ(chan);
1360 +
1361 +       memset(&mask_m, 0, sizeof(int8_t) * 123);
1362 +       memset(&mask_p, 0, sizeof(int8_t) * 123);
1363 +
1364 +       for (i = 0; i < AR_EEPROM_MODAL_SPURS; i++) {
1365 +               cur_bb_spur = ah->eep_ops->get_spur_channel(ah, i, is2GHz);
1366 +               if (AR_NO_SPUR == cur_bb_spur)
1367 +                       break;
1368 +               cur_bb_spur = cur_bb_spur - (chan->channel * 10);
1369 +               if ((cur_bb_spur > -95) && (cur_bb_spur < 95)) {
1370 +                       bb_spur = cur_bb_spur;
1371 +                       break;
1372 +               }
1373 +       }
1374 +
1375 +       if (AR_NO_SPUR == bb_spur)
1376 +               return;
1377 +
1378 +       bin = bb_spur * 32;
1379 +
1380 +       tmp = REG_READ(ah, AR_PHY_TIMING_CTRL4(0));
1381 +       new = tmp | (AR_PHY_TIMING_CTRL4_ENABLE_SPUR_RSSI |
1382 +                    AR_PHY_TIMING_CTRL4_ENABLE_SPUR_FILTER |
1383 +                    AR_PHY_TIMING_CTRL4_ENABLE_CHAN_MASK |
1384 +                    AR_PHY_TIMING_CTRL4_ENABLE_PILOT_MASK);
1385 +
1386 +       REG_WRITE(ah, AR_PHY_TIMING_CTRL4(0), new);
1387 +
1388 +       new = (AR_PHY_SPUR_REG_MASK_RATE_CNTL |
1389 +              AR_PHY_SPUR_REG_ENABLE_MASK_PPM |
1390 +              AR_PHY_SPUR_REG_MASK_RATE_SELECT |
1391 +              AR_PHY_SPUR_REG_ENABLE_VIT_SPUR_RSSI |
1392 +              SM(SPUR_RSSI_THRESH, AR_PHY_SPUR_REG_SPUR_RSSI_THRESH));
1393 +       REG_WRITE(ah, AR_PHY_SPUR_REG, new);
1394 +
1395 +       spur_delta_phase = ((bb_spur * 524288) / 100) &
1396 +               AR_PHY_TIMING11_SPUR_DELTA_PHASE;
1397 +
1398 +       denominator = IS_CHAN_2GHZ(chan) ? 440 : 400;
1399 +       spur_freq_sd = ((bb_spur * 2048) / denominator) & 0x3ff;
1400 +
1401 +       new = (AR_PHY_TIMING11_USE_SPUR_IN_AGC |
1402 +              SM(spur_freq_sd, AR_PHY_TIMING11_SPUR_FREQ_SD) |
1403 +              SM(spur_delta_phase, AR_PHY_TIMING11_SPUR_DELTA_PHASE));
1404 +       REG_WRITE(ah, AR_PHY_TIMING11, new);
1405 +
1406 +       cur_bin = -6000;
1407 +       upper = bin + 100;
1408 +       lower = bin - 100;
1409 +
1410 +       for (i = 0; i < 4; i++) {
1411 +               int pilot_mask = 0;
1412 +               int chan_mask = 0;
1413 +               int bp = 0;
1414 +               for (bp = 0; bp < 30; bp++) {
1415 +                       if ((cur_bin > lower) && (cur_bin < upper)) {
1416 +                               pilot_mask = pilot_mask | 0x1 << bp;
1417 +                               chan_mask = chan_mask | 0x1 << bp;
1418 +                       }
1419 +                       cur_bin += 100;
1420 +               }
1421 +               cur_bin += inc[i];
1422 +               REG_WRITE(ah, pilot_mask_reg[i], pilot_mask);
1423 +               REG_WRITE(ah, chan_mask_reg[i], chan_mask);
1424 +       }
1425 +
1426 +       cur_vit_mask = 6100;
1427 +       upper = bin + 120;
1428 +       lower = bin - 120;
1429 +
1430 +       for (i = 0; i < 123; i++) {
1431 +               if ((cur_vit_mask > lower) && (cur_vit_mask < upper)) {
1432 +
1433 +                       /* workaround for gcc bug #37014 */
1434 +                       volatile int tmp_v = abs(cur_vit_mask - bin);
1435 +
1436 +                       if (tmp_v < 75)
1437 +                               mask_amt = 1;
1438 +                       else
1439 +                               mask_amt = 0;
1440 +                       if (cur_vit_mask < 0)
1441 +                               mask_m[abs(cur_vit_mask / 100)] = mask_amt;
1442 +                       else
1443 +                               mask_p[cur_vit_mask / 100] = mask_amt;
1444 +               }
1445 +               cur_vit_mask -= 100;
1446 +       }
1447 +
1448 +       tmp_mask = (mask_m[46] << 30) | (mask_m[47] << 28)
1449 +               | (mask_m[48] << 26) | (mask_m[49] << 24)
1450 +               | (mask_m[50] << 22) | (mask_m[51] << 20)
1451 +               | (mask_m[52] << 18) | (mask_m[53] << 16)
1452 +               | (mask_m[54] << 14) | (mask_m[55] << 12)
1453 +               | (mask_m[56] << 10) | (mask_m[57] << 8)
1454 +               | (mask_m[58] << 6) | (mask_m[59] << 4)
1455 +               | (mask_m[60] << 2) | (mask_m[61] << 0);
1456 +       REG_WRITE(ah, AR_PHY_BIN_MASK_1, tmp_mask);
1457 +       REG_WRITE(ah, AR_PHY_VIT_MASK2_M_46_61, tmp_mask);
1458 +
1459 +       tmp_mask = (mask_m[31] << 28)
1460 +               | (mask_m[32] << 26) | (mask_m[33] << 24)
1461 +               | (mask_m[34] << 22) | (mask_m[35] << 20)
1462 +               | (mask_m[36] << 18) | (mask_m[37] << 16)
1463 +               | (mask_m[48] << 14) | (mask_m[39] << 12)
1464 +               | (mask_m[40] << 10) | (mask_m[41] << 8)
1465 +               | (mask_m[42] << 6) | (mask_m[43] << 4)
1466 +               | (mask_m[44] << 2) | (mask_m[45] << 0);
1467 +       REG_WRITE(ah, AR_PHY_BIN_MASK_2, tmp_mask);
1468 +       REG_WRITE(ah, AR_PHY_MASK2_M_31_45, tmp_mask);
1469 +
1470 +       tmp_mask = (mask_m[16] << 30) | (mask_m[16] << 28)
1471 +               | (mask_m[18] << 26) | (mask_m[18] << 24)
1472 +               | (mask_m[20] << 22) | (mask_m[20] << 20)
1473 +               | (mask_m[22] << 18) | (mask_m[22] << 16)
1474 +               | (mask_m[24] << 14) | (mask_m[24] << 12)
1475 +               | (mask_m[25] << 10) | (mask_m[26] << 8)
1476 +               | (mask_m[27] << 6) | (mask_m[28] << 4)
1477 +               | (mask_m[29] << 2) | (mask_m[30] << 0);
1478 +       REG_WRITE(ah, AR_PHY_BIN_MASK_3, tmp_mask);
1479 +       REG_WRITE(ah, AR_PHY_MASK2_M_16_30, tmp_mask);
1480 +
1481 +       tmp_mask = (mask_m[0] << 30) | (mask_m[1] << 28)
1482 +               | (mask_m[2] << 26) | (mask_m[3] << 24)
1483 +               | (mask_m[4] << 22) | (mask_m[5] << 20)
1484 +               | (mask_m[6] << 18) | (mask_m[7] << 16)
1485 +               | (mask_m[8] << 14) | (mask_m[9] << 12)
1486 +               | (mask_m[10] << 10) | (mask_m[11] << 8)
1487 +               | (mask_m[12] << 6) | (mask_m[13] << 4)
1488 +               | (mask_m[14] << 2) | (mask_m[15] << 0);
1489 +       REG_WRITE(ah, AR_PHY_MASK_CTL, tmp_mask);
1490 +       REG_WRITE(ah, AR_PHY_MASK2_M_00_15, tmp_mask);
1491 +
1492 +       tmp_mask = (mask_p[15] << 28)
1493 +               | (mask_p[14] << 26) | (mask_p[13] << 24)
1494 +               | (mask_p[12] << 22) | (mask_p[11] << 20)
1495 +               | (mask_p[10] << 18) | (mask_p[9] << 16)
1496 +               | (mask_p[8] << 14) | (mask_p[7] << 12)
1497 +               | (mask_p[6] << 10) | (mask_p[5] << 8)
1498 +               | (mask_p[4] << 6) | (mask_p[3] << 4)
1499 +               | (mask_p[2] << 2) | (mask_p[1] << 0);
1500 +       REG_WRITE(ah, AR_PHY_BIN_MASK2_1, tmp_mask);
1501 +       REG_WRITE(ah, AR_PHY_MASK2_P_15_01, tmp_mask);
1502 +
1503 +       tmp_mask = (mask_p[30] << 28)
1504 +               | (mask_p[29] << 26) | (mask_p[28] << 24)
1505 +               | (mask_p[27] << 22) | (mask_p[26] << 20)
1506 +               | (mask_p[25] << 18) | (mask_p[24] << 16)
1507 +               | (mask_p[23] << 14) | (mask_p[22] << 12)
1508 +               | (mask_p[21] << 10) | (mask_p[20] << 8)
1509 +               | (mask_p[19] << 6) | (mask_p[18] << 4)
1510 +               | (mask_p[17] << 2) | (mask_p[16] << 0);
1511 +       REG_WRITE(ah, AR_PHY_BIN_MASK2_2, tmp_mask);
1512 +       REG_WRITE(ah, AR_PHY_MASK2_P_30_16, tmp_mask);
1513 +
1514 +       tmp_mask = (mask_p[45] << 28)
1515 +               | (mask_p[44] << 26) | (mask_p[43] << 24)
1516 +               | (mask_p[42] << 22) | (mask_p[41] << 20)
1517 +               | (mask_p[40] << 18) | (mask_p[39] << 16)
1518 +               | (mask_p[38] << 14) | (mask_p[37] << 12)
1519 +               | (mask_p[36] << 10) | (mask_p[35] << 8)
1520 +               | (mask_p[34] << 6) | (mask_p[33] << 4)
1521 +               | (mask_p[32] << 2) | (mask_p[31] << 0);
1522 +       REG_WRITE(ah, AR_PHY_BIN_MASK2_3, tmp_mask);
1523 +       REG_WRITE(ah, AR_PHY_MASK2_P_45_31, tmp_mask);
1524 +
1525 +       tmp_mask = (mask_p[61] << 30) | (mask_p[60] << 28)
1526 +               | (mask_p[59] << 26) | (mask_p[58] << 24)
1527 +               | (mask_p[57] << 22) | (mask_p[56] << 20)
1528 +               | (mask_p[55] << 18) | (mask_p[54] << 16)
1529 +               | (mask_p[53] << 14) | (mask_p[52] << 12)
1530 +               | (mask_p[51] << 10) | (mask_p[50] << 8)
1531 +               | (mask_p[49] << 6) | (mask_p[48] << 4)
1532 +               | (mask_p[47] << 2) | (mask_p[46] << 0);
1533 +       REG_WRITE(ah, AR_PHY_BIN_MASK2_4, tmp_mask);
1534 +       REG_WRITE(ah, AR_PHY_MASK2_P_61_45, tmp_mask);
1535 +}
1536 +
1537 +/**
1538 + * ar5008_hw_rf_alloc_ext_banks - allocates banks for external radio programming
1539 + * @ah: atheros hardware structure
1540 + *
1541 + * Only required for older devices with external AR2133/AR5133 radios.
1542 + */
1543 +static int ar5008_hw_rf_alloc_ext_banks(struct ath_hw *ah)
1544 +{
1545 +#define ATH_ALLOC_BANK(bank, size) do { \
1546 +               bank = kzalloc((sizeof(u32) * size), GFP_KERNEL); \
1547 +               if (!bank) { \
1548 +                       ath_print(common, ATH_DBG_FATAL, \
1549 +                                 "Cannot allocate RF banks\n"); \
1550 +                       return -ENOMEM; \
1551 +               } \
1552 +       } while (0);
1553 +
1554 +       struct ath_common *common = ath9k_hw_common(ah);
1555 +
1556 +       BUG_ON(AR_SREV_9280_10_OR_LATER(ah));
1557 +
1558 +       ATH_ALLOC_BANK(ah->analogBank0Data, ah->iniBank0.ia_rows);
1559 +       ATH_ALLOC_BANK(ah->analogBank1Data, ah->iniBank1.ia_rows);
1560 +       ATH_ALLOC_BANK(ah->analogBank2Data, ah->iniBank2.ia_rows);
1561 +       ATH_ALLOC_BANK(ah->analogBank3Data, ah->iniBank3.ia_rows);
1562 +       ATH_ALLOC_BANK(ah->analogBank6Data, ah->iniBank6.ia_rows);
1563 +       ATH_ALLOC_BANK(ah->analogBank6TPCData, ah->iniBank6TPC.ia_rows);
1564 +       ATH_ALLOC_BANK(ah->analogBank7Data, ah->iniBank7.ia_rows);
1565 +       ATH_ALLOC_BANK(ah->addac5416_21,
1566 +                      ah->iniAddac.ia_rows * ah->iniAddac.ia_columns);
1567 +       ATH_ALLOC_BANK(ah->bank6Temp, ah->iniBank6.ia_rows);
1568 +
1569 +       return 0;
1570 +#undef ATH_ALLOC_BANK
1571 +}
1572 +
1573 +
1574 +/**
1575 + * ar5008_hw_rf_free_ext_banks - Free memory for analog bank scratch buffers
1576 + * @ah: atheros hardware struture
1577 + * For the external AR2133/AR5133 radios banks.
1578 + */
1579 +static void ar5008_hw_rf_free_ext_banks(struct ath_hw *ah)
1580 +{
1581 +#define ATH_FREE_BANK(bank) do { \
1582 +               kfree(bank); \
1583 +               bank = NULL; \
1584 +       } while (0);
1585 +
1586 +       BUG_ON(AR_SREV_9280_10_OR_LATER(ah));
1587 +
1588 +       ATH_FREE_BANK(ah->analogBank0Data);
1589 +       ATH_FREE_BANK(ah->analogBank1Data);
1590 +       ATH_FREE_BANK(ah->analogBank2Data);
1591 +       ATH_FREE_BANK(ah->analogBank3Data);
1592 +       ATH_FREE_BANK(ah->analogBank6Data);
1593 +       ATH_FREE_BANK(ah->analogBank6TPCData);
1594 +       ATH_FREE_BANK(ah->analogBank7Data);
1595 +       ATH_FREE_BANK(ah->addac5416_21);
1596 +       ATH_FREE_BANK(ah->bank6Temp);
1597 +
1598 +#undef ATH_FREE_BANK
1599 +}
1600 +
1601 +/* *
1602 + * ar5008_hw_set_rf_regs - programs rf registers based on EEPROM
1603 + * @ah: atheros hardware structure
1604 + * @chan:
1605 + * @modesIndex:
1606 + *
1607 + * Used for the external AR2133/AR5133 radios.
1608 + *
1609 + * Reads the EEPROM header info from the device structure and programs
1610 + * all rf registers. This routine requires access to the analog
1611 + * rf device. This is not required for single-chip devices.
1612 + */
1613 +static bool ar5008_hw_set_rf_regs(struct ath_hw *ah,
1614 +                                 struct ath9k_channel *chan,
1615 +                                 u16 modesIndex)
1616 +{
1617 +       u32 eepMinorRev;
1618 +       u32 ob5GHz = 0, db5GHz = 0;
1619 +       u32 ob2GHz = 0, db2GHz = 0;
1620 +       int regWrites = 0;
1621 +
1622 +       /*
1623 +        * Software does not need to program bank data
1624 +        * for single chip devices, that is AR9280 or anything
1625 +        * after that.
1626 +        */
1627 +       if (AR_SREV_9280_10_OR_LATER(ah))
1628 +               return true;
1629 +
1630 +       /* Setup rf parameters */
1631 +       eepMinorRev = ah->eep_ops->get_eeprom(ah, EEP_MINOR_REV);
1632 +
1633 +       /* Setup Bank 0 Write */
1634 +       RF_BANK_SETUP(ah->analogBank0Data, &ah->iniBank0, 1);
1635 +
1636 +       /* Setup Bank 1 Write */
1637 +       RF_BANK_SETUP(ah->analogBank1Data, &ah->iniBank1, 1);
1638 +
1639 +       /* Setup Bank 2 Write */
1640 +       RF_BANK_SETUP(ah->analogBank2Data, &ah->iniBank2, 1);
1641 +
1642 +       /* Setup Bank 6 Write */
1643 +       RF_BANK_SETUP(ah->analogBank3Data, &ah->iniBank3,
1644 +                     modesIndex);
1645 +       {
1646 +               int i;
1647 +               for (i = 0; i < ah->iniBank6TPC.ia_rows; i++) {
1648 +                       ah->analogBank6Data[i] =
1649 +                           INI_RA(&ah->iniBank6TPC, i, modesIndex);
1650 +               }
1651 +       }
1652 +
1653 +       /* Only the 5 or 2 GHz OB/DB need to be set for a mode */
1654 +       if (eepMinorRev >= 2) {
1655 +               if (IS_CHAN_2GHZ(chan)) {
1656 +                       ob2GHz = ah->eep_ops->get_eeprom(ah, EEP_OB_2);
1657 +                       db2GHz = ah->eep_ops->get_eeprom(ah, EEP_DB_2);
1658 +                       ar5008_hw_phy_modify_rx_buffer(ah->analogBank6Data,
1659 +                                                      ob2GHz, 3, 197, 0);
1660 +                       ar5008_hw_phy_modify_rx_buffer(ah->analogBank6Data,
1661 +                                                      db2GHz, 3, 194, 0);
1662 +               } else {
1663 +                       ob5GHz = ah->eep_ops->get_eeprom(ah, EEP_OB_5);
1664 +                       db5GHz = ah->eep_ops->get_eeprom(ah, EEP_DB_5);
1665 +                       ar5008_hw_phy_modify_rx_buffer(ah->analogBank6Data,
1666 +                                                      ob5GHz, 3, 203, 0);
1667 +                       ar5008_hw_phy_modify_rx_buffer(ah->analogBank6Data,
1668 +                                                      db5GHz, 3, 200, 0);
1669 +               }
1670 +       }
1671 +
1672 +       /* Setup Bank 7 Setup */
1673 +       RF_BANK_SETUP(ah->analogBank7Data, &ah->iniBank7, 1);
1674 +
1675 +       /* Write Analog registers */
1676 +       REG_WRITE_RF_ARRAY(&ah->iniBank0, ah->analogBank0Data,
1677 +                          regWrites);
1678 +       REG_WRITE_RF_ARRAY(&ah->iniBank1, ah->analogBank1Data,
1679 +                          regWrites);
1680 +       REG_WRITE_RF_ARRAY(&ah->iniBank2, ah->analogBank2Data,
1681 +                          regWrites);
1682 +       REG_WRITE_RF_ARRAY(&ah->iniBank3, ah->analogBank3Data,
1683 +                          regWrites);
1684 +       REG_WRITE_RF_ARRAY(&ah->iniBank6TPC, ah->analogBank6Data,
1685 +                          regWrites);
1686 +       REG_WRITE_RF_ARRAY(&ah->iniBank7, ah->analogBank7Data,
1687 +                          regWrites);
1688 +
1689 +       return true;
1690 +}
1691 +
1692 +static void ar5008_hw_init_bb(struct ath_hw *ah,
1693 +                             struct ath9k_channel *chan)
1694 +{
1695 +       u32 synthDelay;
1696 +
1697 +       synthDelay = REG_READ(ah, AR_PHY_RX_DELAY) & AR_PHY_RX_DELAY_DELAY;
1698 +       if (IS_CHAN_B(chan))
1699 +               synthDelay = (4 * synthDelay) / 22;
1700 +       else
1701 +               synthDelay /= 10;
1702 +
1703 +       REG_WRITE(ah, AR_PHY_ACTIVE, AR_PHY_ACTIVE_EN);
1704 +
1705 +       udelay(synthDelay + BASE_ACTIVATE_DELAY);
1706 +}
1707 +
1708 +static void ar5008_hw_init_chain_masks(struct ath_hw *ah)
1709 +{
1710 +       int rx_chainmask, tx_chainmask;
1711 +
1712 +       rx_chainmask = ah->rxchainmask;
1713 +       tx_chainmask = ah->txchainmask;
1714 +
1715 +       switch (rx_chainmask) {
1716 +       case 0x5:
1717 +               REG_SET_BIT(ah, AR_PHY_ANALOG_SWAP,
1718 +                           AR_PHY_SWAP_ALT_CHAIN);
1719 +       case 0x3:
1720 +               if (ah->hw_version.macVersion == AR_SREV_REVISION_5416_10) {
1721 +                       REG_WRITE(ah, AR_PHY_RX_CHAINMASK, 0x7);
1722 +                       REG_WRITE(ah, AR_PHY_CAL_CHAINMASK, 0x7);
1723 +                       break;
1724 +               }
1725 +       case 0x1:
1726 +       case 0x2:
1727 +       case 0x7:
1728 +               REG_WRITE(ah, AR_PHY_RX_CHAINMASK, rx_chainmask);
1729 +               REG_WRITE(ah, AR_PHY_CAL_CHAINMASK, rx_chainmask);
1730 +               break;
1731 +       default:
1732 +               break;
1733 +       }
1734 +
1735 +       REG_WRITE(ah, AR_SELFGEN_MASK, tx_chainmask);
1736 +       if (tx_chainmask == 0x5) {
1737 +               REG_SET_BIT(ah, AR_PHY_ANALOG_SWAP,
1738 +                           AR_PHY_SWAP_ALT_CHAIN);
1739 +       }
1740 +       if (AR_SREV_9100(ah))
1741 +               REG_WRITE(ah, AR_PHY_ANALOG_SWAP,
1742 +                         REG_READ(ah, AR_PHY_ANALOG_SWAP) | 0x00000001);
1743 +}
1744 +
1745 +static void ar5008_hw_override_ini(struct ath_hw *ah,
1746 +                                  struct ath9k_channel *chan)
1747 +{
1748 +       u32 val;
1749 +
1750 +       /*
1751 +        * Set the RX_ABORT and RX_DIS and clear if off only after
1752 +        * RXE is set for MAC. This prevents frames with corrupted
1753 +        * descriptor status.
1754 +        */
1755 +       REG_SET_BIT(ah, AR_DIAG_SW, (AR_DIAG_RX_DIS | AR_DIAG_RX_ABORT));
1756 +
1757 +       if (AR_SREV_9280_10_OR_LATER(ah)) {
1758 +               val = REG_READ(ah, AR_PCU_MISC_MODE2);
1759 +
1760 +               if (!AR_SREV_9271(ah))
1761 +                       val &= ~AR_PCU_MISC_MODE2_HWWAR1;
1762 +
1763 +               if (AR_SREV_9287_10_OR_LATER(ah))
1764 +                       val = val & (~AR_PCU_MISC_MODE2_HWWAR2);
1765 +
1766 +               REG_WRITE(ah, AR_PCU_MISC_MODE2, val);
1767 +       }
1768 +
1769 +       if (!AR_SREV_5416_20_OR_LATER(ah) ||
1770 +           AR_SREV_9280_10_OR_LATER(ah))
1771 +               return;
1772 +       /*
1773 +        * Disable BB clock gating
1774 +        * Necessary to avoid issues on AR5416 2.0
1775 +        */
1776 +       REG_WRITE(ah, 0x9800 + (651 << 2), 0x11);
1777 +
1778 +       /*
1779 +        * Disable RIFS search on some chips to avoid baseband
1780 +        * hang issues.
1781 +        */
1782 +       if (AR_SREV_9100(ah) || AR_SREV_9160(ah)) {
1783 +               val = REG_READ(ah, AR_PHY_HEAVY_CLIP_FACTOR_RIFS);
1784 +               val &= ~AR_PHY_RIFS_INIT_DELAY;
1785 +               REG_WRITE(ah, AR_PHY_HEAVY_CLIP_FACTOR_RIFS, val);
1786 +       }
1787 +}
1788 +
1789 +static void ar5008_hw_set_channel_regs(struct ath_hw *ah,
1790 +                                      struct ath9k_channel *chan)
1791 +{
1792 +       u32 phymode;
1793 +       u32 enableDacFifo = 0;
1794 +
1795 +       if (AR_SREV_9285_10_OR_LATER(ah))
1796 +               enableDacFifo = (REG_READ(ah, AR_PHY_TURBO) &
1797 +                                        AR_PHY_FC_ENABLE_DAC_FIFO);
1798 +
1799 +       phymode = AR_PHY_FC_HT_EN | AR_PHY_FC_SHORT_GI_40
1800 +               | AR_PHY_FC_SINGLE_HT_LTF1 | AR_PHY_FC_WALSH | enableDacFifo;
1801 +
1802 +       if (IS_CHAN_HT40(chan)) {
1803 +               phymode |= AR_PHY_FC_DYN2040_EN;
1804 +
1805 +               if ((chan->chanmode == CHANNEL_A_HT40PLUS) ||
1806 +                   (chan->chanmode == CHANNEL_G_HT40PLUS))
1807 +                       phymode |= AR_PHY_FC_DYN2040_PRI_CH;
1808 +
1809 +       }
1810 +       REG_WRITE(ah, AR_PHY_TURBO, phymode);
1811 +
1812 +       ath9k_hw_set11nmac2040(ah);
1813 +
1814 +       REG_WRITE(ah, AR_GTXTO, 25 << AR_GTXTO_TIMEOUT_LIMIT_S);
1815 +       REG_WRITE(ah, AR_CST, 0xF << AR_CST_TIMEOUT_LIMIT_S);
1816 +}
1817 +
1818 +
1819 +static int ar5008_hw_process_ini(struct ath_hw *ah,
1820 +                                struct ath9k_channel *chan)
1821 +{
1822 +       struct ath_regulatory *regulatory = ath9k_hw_regulatory(ah);
1823 +       int i, regWrites = 0;
1824 +       struct ieee80211_channel *channel = chan->chan;
1825 +       u32 modesIndex, freqIndex;
1826 +
1827 +       switch (chan->chanmode) {
1828 +       case CHANNEL_A:
1829 +       case CHANNEL_A_HT20:
1830 +               modesIndex = 1;
1831 +               freqIndex = 1;
1832 +               break;
1833 +       case CHANNEL_A_HT40PLUS:
1834 +       case CHANNEL_A_HT40MINUS:
1835 +               modesIndex = 2;
1836 +               freqIndex = 1;
1837 +               break;
1838 +       case CHANNEL_G:
1839 +       case CHANNEL_G_HT20:
1840 +       case CHANNEL_B:
1841 +               modesIndex = 4;
1842 +               freqIndex = 2;
1843 +               break;
1844 +       case CHANNEL_G_HT40PLUS:
1845 +       case CHANNEL_G_HT40MINUS:
1846 +               modesIndex = 3;
1847 +               freqIndex = 2;
1848 +               break;
1849 +
1850 +       default:
1851 +               return -EINVAL;
1852 +       }
1853 +
1854 +       if (AR_SREV_9287_12_OR_LATER(ah)) {
1855 +               /* Enable ASYNC FIFO */
1856 +               REG_SET_BIT(ah, AR_MAC_PCU_ASYNC_FIFO_REG3,
1857 +                               AR_MAC_PCU_ASYNC_FIFO_REG3_DATAPATH_SEL);
1858 +               REG_SET_BIT(ah, AR_PHY_MODE, AR_PHY_MODE_ASYNCFIFO);
1859 +               REG_CLR_BIT(ah, AR_MAC_PCU_ASYNC_FIFO_REG3,
1860 +                               AR_MAC_PCU_ASYNC_FIFO_REG3_SOFT_RESET);
1861 +               REG_SET_BIT(ah, AR_MAC_PCU_ASYNC_FIFO_REG3,
1862 +                               AR_MAC_PCU_ASYNC_FIFO_REG3_SOFT_RESET);
1863 +       }
1864 +
1865 +       /* Set correct baseband to analog shift setting to access analog chips */
1866 +       REG_WRITE(ah, AR_PHY(0), 0x00000007);
1867 +
1868 +       /* Write ADDAC shifts */
1869 +       REG_WRITE(ah, AR_PHY_ADC_SERIAL_CTL, AR_PHY_SEL_EXTERNAL_RADIO);
1870 +       ah->eep_ops->set_addac(ah, chan);
1871 +
1872 +       if (AR_SREV_5416_22_OR_LATER(ah)) {
1873 +               REG_WRITE_ARRAY(&ah->iniAddac, 1, regWrites);
1874 +       } else {
1875 +               struct ar5416IniArray temp;
1876 +               u32 addacSize =
1877 +                       sizeof(u32) * ah->iniAddac.ia_rows *
1878 +                       ah->iniAddac.ia_columns;
1879 +
1880 +               /* For AR5416 2.0/2.1 */
1881 +               memcpy(ah->addac5416_21,
1882 +                      ah->iniAddac.ia_array, addacSize);
1883 +
1884 +               /* override CLKDRV value at [row, column] = [31, 1] */
1885 +               (ah->addac5416_21)[31 * ah->iniAddac.ia_columns + 1] = 0;
1886 +
1887 +               temp.ia_array = ah->addac5416_21;
1888 +               temp.ia_columns = ah->iniAddac.ia_columns;
1889 +               temp.ia_rows = ah->iniAddac.ia_rows;
1890 +               REG_WRITE_ARRAY(&temp, 1, regWrites);
1891 +       }
1892 +
1893 +       REG_WRITE(ah, AR_PHY_ADC_SERIAL_CTL, AR_PHY_SEL_INTERNAL_ADDAC);
1894 +
1895 +       for (i = 0; i < ah->iniModes.ia_rows; i++) {
1896 +               u32 reg = INI_RA(&ah->iniModes, i, 0);
1897 +               u32 val = INI_RA(&ah->iniModes, i, modesIndex);
1898 +
1899 +               if (reg == AR_AN_TOP2 && ah->need_an_top2_fixup)
1900 +                       val &= ~AR_AN_TOP2_PWDCLKIND;
1901 +
1902 +               REG_WRITE(ah, reg, val);
1903 +
1904 +               if (reg >= 0x7800 && reg < 0x78a0
1905 +                   && ah->config.analog_shiftreg) {
1906 +                       udelay(100);
1907 +               }
1908 +
1909 +               DO_DELAY(regWrites);
1910 +       }
1911 +
1912 +       if (AR_SREV_9280(ah) || AR_SREV_9287_10_OR_LATER(ah))
1913 +               REG_WRITE_ARRAY(&ah->iniModesRxGain, modesIndex, regWrites);
1914 +
1915 +       if (AR_SREV_9280(ah) || AR_SREV_9285_12_OR_LATER(ah) ||
1916 +           AR_SREV_9287_10_OR_LATER(ah))
1917 +               REG_WRITE_ARRAY(&ah->iniModesTxGain, modesIndex, regWrites);
1918 +
1919 +       if (AR_SREV_9271_10(ah))
1920 +               REG_WRITE_ARRAY(&ah->iniModes_9271_1_0_only,
1921 +                               modesIndex, regWrites);
1922 +
1923 +       /* Write common array parameters */
1924 +       for (i = 0; i < ah->iniCommon.ia_rows; i++) {
1925 +               u32 reg = INI_RA(&ah->iniCommon, i, 0);
1926 +               u32 val = INI_RA(&ah->iniCommon, i, 1);
1927 +
1928 +               REG_WRITE(ah, reg, val);
1929 +
1930 +               if (reg >= 0x7800 && reg < 0x78a0
1931 +                   && ah->config.analog_shiftreg) {
1932 +                       udelay(100);
1933 +               }
1934 +
1935 +               DO_DELAY(regWrites);
1936 +       }
1937 +
1938 +       if (AR_SREV_9271(ah)) {
1939 +               if (ah->eep_ops->get_eeprom(ah, EEP_TXGAIN_TYPE) == 1)
1940 +                       REG_WRITE_ARRAY(&ah->iniModes_high_power_tx_gain_9271,
1941 +                                       modesIndex, regWrites);
1942 +               else
1943 +                       REG_WRITE_ARRAY(&ah->iniModes_normal_power_tx_gain_9271,
1944 +                                       modesIndex, regWrites);
1945 +       }
1946 +
1947 +       REG_WRITE_ARRAY(&ah->iniBB_RfGain, freqIndex, regWrites);
1948 +
1949 +       if (AR_SREV_9280_20(ah) && IS_CHAN_A_5MHZ_SPACED(chan)) {
1950 +               REG_WRITE_ARRAY(&ah->iniModesAdditional, modesIndex,
1951 +                               regWrites);
1952 +       }
1953 +
1954 +       ar5008_hw_override_ini(ah, chan);
1955 +       ar5008_hw_set_channel_regs(ah, chan);
1956 +       ar5008_hw_init_chain_masks(ah);
1957 +       ath9k_olc_init(ah);
1958 +
1959 +       /* Set TX power */
1960 +       ah->eep_ops->set_txpower(ah, chan,
1961 +                                ath9k_regd_get_ctl(regulatory, chan),
1962 +                                channel->max_antenna_gain * 2,
1963 +                                channel->max_power * 2,
1964 +                                min((u32) MAX_RATE_POWER,
1965 +                                (u32) regulatory->power_limit));
1966 +
1967 +       /* Write analog registers */
1968 +       if (!ath9k_hw_set_rf_regs(ah, chan, freqIndex)) {
1969 +               ath_print(ath9k_hw_common(ah), ATH_DBG_FATAL,
1970 +                         "ar5416SetRfRegs failed\n");
1971 +               return -EIO;
1972 +       }
1973 +
1974 +       return 0;
1975 +}
1976 +
1977 +static void ar5008_hw_set_rfmode(struct ath_hw *ah, struct ath9k_channel *chan)
1978 +{
1979 +       u32 rfMode = 0;
1980 +
1981 +       if (chan == NULL)
1982 +               return;
1983 +
1984 +       rfMode |= (IS_CHAN_B(chan) || IS_CHAN_G(chan))
1985 +               ? AR_PHY_MODE_DYNAMIC : AR_PHY_MODE_OFDM;
1986 +
1987 +       if (!AR_SREV_9280_10_OR_LATER(ah))
1988 +               rfMode |= (IS_CHAN_5GHZ(chan)) ?
1989 +                       AR_PHY_MODE_RF5GHZ : AR_PHY_MODE_RF2GHZ;
1990 +
1991 +       if ((AR_SREV_9280_20(ah) || AR_SREV_9300_20_OR_LATER(ah))
1992 +           && IS_CHAN_A_5MHZ_SPACED(chan))
1993 +               rfMode |= (AR_PHY_MODE_DYNAMIC | AR_PHY_MODE_DYN_CCK_DISABLE);
1994 +
1995 +       REG_WRITE(ah, AR_PHY_MODE, rfMode);
1996 +}
1997 +
1998 +static void ar5008_hw_mark_phy_inactive(struct ath_hw *ah)
1999 +{
2000 +       REG_WRITE(ah, AR_PHY_ACTIVE, AR_PHY_ACTIVE_DIS);
2001 +}
2002 +
2003 +static void ar5008_hw_set_delta_slope(struct ath_hw *ah,
2004 +                                     struct ath9k_channel *chan)
2005 +{
2006 +       u32 coef_scaled, ds_coef_exp, ds_coef_man;
2007 +       u32 clockMhzScaled = 0x64000000;
2008 +       struct chan_centers centers;
2009 +
2010 +       if (IS_CHAN_HALF_RATE(chan))
2011 +               clockMhzScaled = clockMhzScaled >> 1;
2012 +       else if (IS_CHAN_QUARTER_RATE(chan))
2013 +               clockMhzScaled = clockMhzScaled >> 2;
2014 +
2015 +       ath9k_hw_get_channel_centers(ah, chan, &centers);
2016 +       coef_scaled = clockMhzScaled / centers.synth_center;
2017 +
2018 +       ath9k_hw_get_delta_slope_vals(ah, coef_scaled, &ds_coef_man,
2019 +                                     &ds_coef_exp);
2020 +
2021 +       REG_RMW_FIELD(ah, AR_PHY_TIMING3,
2022 +                     AR_PHY_TIMING3_DSC_MAN, ds_coef_man);
2023 +       REG_RMW_FIELD(ah, AR_PHY_TIMING3,
2024 +                     AR_PHY_TIMING3_DSC_EXP, ds_coef_exp);
2025 +
2026 +       coef_scaled = (9 * coef_scaled) / 10;
2027 +
2028 +       ath9k_hw_get_delta_slope_vals(ah, coef_scaled, &ds_coef_man,
2029 +                                     &ds_coef_exp);
2030 +
2031 +       REG_RMW_FIELD(ah, AR_PHY_HALFGI,
2032 +                     AR_PHY_HALFGI_DSC_MAN, ds_coef_man);
2033 +       REG_RMW_FIELD(ah, AR_PHY_HALFGI,
2034 +                     AR_PHY_HALFGI_DSC_EXP, ds_coef_exp);
2035 +}
2036 +
2037 +static bool ar5008_hw_rfbus_req(struct ath_hw *ah)
2038 +{
2039 +       REG_WRITE(ah, AR_PHY_RFBUS_REQ, AR_PHY_RFBUS_REQ_EN);
2040 +       return ath9k_hw_wait(ah, AR_PHY_RFBUS_GRANT, AR_PHY_RFBUS_GRANT_EN,
2041 +                          AR_PHY_RFBUS_GRANT_EN, AH_WAIT_TIMEOUT);
2042 +}
2043 +
2044 +static void ar5008_hw_rfbus_done(struct ath_hw *ah)
2045 +{
2046 +       u32 synthDelay = REG_READ(ah, AR_PHY_RX_DELAY) & AR_PHY_RX_DELAY_DELAY;
2047 +       if (IS_CHAN_B(ah->curchan))
2048 +               synthDelay = (4 * synthDelay) / 22;
2049 +       else
2050 +               synthDelay /= 10;
2051 +
2052 +       udelay(synthDelay + BASE_ACTIVATE_DELAY);
2053 +
2054 +       REG_WRITE(ah, AR_PHY_RFBUS_REQ, 0);
2055 +}
2056 +
2057 +static void ar5008_hw_enable_rfkill(struct ath_hw *ah)
2058 +{
2059 +       REG_SET_BIT(ah, AR_GPIO_INPUT_EN_VAL,
2060 +                   AR_GPIO_INPUT_EN_VAL_RFSILENT_BB);
2061 +
2062 +       REG_CLR_BIT(ah, AR_GPIO_INPUT_MUX2,
2063 +                   AR_GPIO_INPUT_MUX2_RFSILENT);
2064 +
2065 +       ath9k_hw_cfg_gpio_input(ah, ah->rfkill_gpio);
2066 +       REG_SET_BIT(ah, AR_PHY_TEST, RFSILENT_BB);
2067 +}
2068 +
2069 +static void ar5008_restore_chainmask(struct ath_hw *ah)
2070 +{
2071 +       int rx_chainmask = ah->rxchainmask;
2072 +
2073 +       if ((rx_chainmask == 0x5) || (rx_chainmask == 0x3)) {
2074 +               REG_WRITE(ah, AR_PHY_RX_CHAINMASK, rx_chainmask);
2075 +               REG_WRITE(ah, AR_PHY_CAL_CHAINMASK, rx_chainmask);
2076 +       }
2077 +}
2078 +
2079 +static void ar5008_set_diversity(struct ath_hw *ah, bool value)
2080 +{
2081 +       u32 v = REG_READ(ah, AR_PHY_CCK_DETECT);
2082 +       if (value)
2083 +               v |= AR_PHY_CCK_DETECT_BB_ENABLE_ANT_FAST_DIV;
2084 +       else
2085 +               v &= ~AR_PHY_CCK_DETECT_BB_ENABLE_ANT_FAST_DIV;
2086 +       REG_WRITE(ah, AR_PHY_CCK_DETECT, v);
2087 +}
2088 +
2089 +static u32 ar9100_hw_compute_pll_control(struct ath_hw *ah,
2090 +                                        struct ath9k_channel *chan)
2091 +{
2092 +       if (chan && IS_CHAN_5GHZ(chan))
2093 +               return 0x1450;
2094 +       return 0x1458;
2095 +}
2096 +
2097 +static u32 ar9160_hw_compute_pll_control(struct ath_hw *ah,
2098 +                                        struct ath9k_channel *chan)
2099 +{
2100 +       u32 pll;
2101 +
2102 +       pll = SM(0x5, AR_RTC_9160_PLL_REFDIV);
2103 +
2104 +       if (chan && IS_CHAN_HALF_RATE(chan))
2105 +               pll |= SM(0x1, AR_RTC_9160_PLL_CLKSEL);
2106 +       else if (chan && IS_CHAN_QUARTER_RATE(chan))
2107 +               pll |= SM(0x2, AR_RTC_9160_PLL_CLKSEL);
2108 +
2109 +       if (chan && IS_CHAN_5GHZ(chan))
2110 +               pll |= SM(0x50, AR_RTC_9160_PLL_DIV);
2111 +       else
2112 +               pll |= SM(0x58, AR_RTC_9160_PLL_DIV);
2113 +
2114 +       return pll;
2115 +}
2116 +
2117 +static u32 ar5008_hw_compute_pll_control(struct ath_hw *ah,
2118 +                                        struct ath9k_channel *chan)
2119 +{
2120 +       u32 pll;
2121 +
2122 +       pll = AR_RTC_PLL_REFDIV_5 | AR_RTC_PLL_DIV2;
2123 +
2124 +       if (chan && IS_CHAN_HALF_RATE(chan))
2125 +               pll |= SM(0x1, AR_RTC_PLL_CLKSEL);
2126 +       else if (chan && IS_CHAN_QUARTER_RATE(chan))
2127 +               pll |= SM(0x2, AR_RTC_PLL_CLKSEL);
2128 +
2129 +       if (chan && IS_CHAN_5GHZ(chan))
2130 +               pll |= SM(0xa, AR_RTC_PLL_DIV);
2131 +       else
2132 +               pll |= SM(0xb, AR_RTC_PLL_DIV);
2133 +
2134 +       return pll;
2135 +}
2136 +
2137 +static bool ar5008_hw_ani_control(struct ath_hw *ah,
2138 +                                 enum ath9k_ani_cmd cmd, int param)
2139 +{
2140 +       struct ar5416AniState *aniState = ah->curani;
2141 +       struct ath_common *common = ath9k_hw_common(ah);
2142 +
2143 +       switch (cmd & ah->ani_function) {
2144 +       case ATH9K_ANI_NOISE_IMMUNITY_LEVEL:{
2145 +               u32 level = param;
2146 +
2147 +               if (level >= ARRAY_SIZE(ah->totalSizeDesired)) {
2148 +                       ath_print(common, ATH_DBG_ANI,
2149 +                                 "level out of range (%u > %u)\n",
2150 +                                 level,
2151 +                                 (unsigned)ARRAY_SIZE(ah->totalSizeDesired));
2152 +                       return false;
2153 +               }
2154 +
2155 +               REG_RMW_FIELD(ah, AR_PHY_DESIRED_SZ,
2156 +                             AR_PHY_DESIRED_SZ_TOT_DES,
2157 +                             ah->totalSizeDesired[level]);
2158 +               REG_RMW_FIELD(ah, AR_PHY_AGC_CTL1,
2159 +                             AR_PHY_AGC_CTL1_COARSE_LOW,
2160 +                             ah->coarse_low[level]);
2161 +               REG_RMW_FIELD(ah, AR_PHY_AGC_CTL1,
2162 +                             AR_PHY_AGC_CTL1_COARSE_HIGH,
2163 +                             ah->coarse_high[level]);
2164 +               REG_RMW_FIELD(ah, AR_PHY_FIND_SIG,
2165 +                             AR_PHY_FIND_SIG_FIRPWR,
2166 +                             ah->firpwr[level]);
2167 +
2168 +               if (level > aniState->noiseImmunityLevel)
2169 +                       ah->stats.ast_ani_niup++;
2170 +               else if (level < aniState->noiseImmunityLevel)
2171 +                       ah->stats.ast_ani_nidown++;
2172 +               aniState->noiseImmunityLevel = level;
2173 +               break;
2174 +       }
2175 +       case ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION:{
2176 +               const int m1ThreshLow[] = { 127, 50 };
2177 +               const int m2ThreshLow[] = { 127, 40 };
2178 +               const int m1Thresh[] = { 127, 0x4d };
2179 +               const int m2Thresh[] = { 127, 0x40 };
2180 +               const int m2CountThr[] = { 31, 16 };
2181 +               const int m2CountThrLow[] = { 63, 48 };
2182 +               u32 on = param ? 1 : 0;
2183 +
2184 +               REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW,
2185 +                             AR_PHY_SFCORR_LOW_M1_THRESH_LOW,
2186 +                             m1ThreshLow[on]);
2187 +               REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW,
2188 +                             AR_PHY_SFCORR_LOW_M2_THRESH_LOW,
2189 +                             m2ThreshLow[on]);
2190 +               REG_RMW_FIELD(ah, AR_PHY_SFCORR,
2191 +                             AR_PHY_SFCORR_M1_THRESH,
2192 +                             m1Thresh[on]);
2193 +               REG_RMW_FIELD(ah, AR_PHY_SFCORR,
2194 +                             AR_PHY_SFCORR_M2_THRESH,
2195 +                             m2Thresh[on]);
2196 +               REG_RMW_FIELD(ah, AR_PHY_SFCORR,
2197 +                             AR_PHY_SFCORR_M2COUNT_THR,
2198 +                             m2CountThr[on]);
2199 +               REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW,
2200 +                             AR_PHY_SFCORR_LOW_M2COUNT_THR_LOW,
2201 +                             m2CountThrLow[on]);
2202 +
2203 +               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
2204 +                             AR_PHY_SFCORR_EXT_M1_THRESH_LOW,
2205 +                             m1ThreshLow[on]);
2206 +               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
2207 +                             AR_PHY_SFCORR_EXT_M2_THRESH_LOW,
2208 +                             m2ThreshLow[on]);
2209 +               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
2210 +                             AR_PHY_SFCORR_EXT_M1_THRESH,
2211 +                             m1Thresh[on]);
2212 +               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
2213 +                             AR_PHY_SFCORR_EXT_M2_THRESH,
2214 +                             m2Thresh[on]);
2215 +
2216 +               if (on)
2217 +                       REG_SET_BIT(ah, AR_PHY_SFCORR_LOW,
2218 +                                   AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW);
2219 +               else
2220 +                       REG_CLR_BIT(ah, AR_PHY_SFCORR_LOW,
2221 +                                   AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW);
2222 +
2223 +               if (!on != aniState->ofdmWeakSigDetectOff) {
2224 +                       if (on)
2225 +                               ah->stats.ast_ani_ofdmon++;
2226 +                       else
2227 +                               ah->stats.ast_ani_ofdmoff++;
2228 +                       aniState->ofdmWeakSigDetectOff = !on;
2229 +               }
2230 +               break;
2231 +       }
2232 +       case ATH9K_ANI_CCK_WEAK_SIGNAL_THR:{
2233 +               const int weakSigThrCck[] = { 8, 6 };
2234 +               u32 high = param ? 1 : 0;
2235 +
2236 +               REG_RMW_FIELD(ah, AR_PHY_CCK_DETECT,
2237 +                             AR_PHY_CCK_DETECT_WEAK_SIG_THR_CCK,
2238 +                             weakSigThrCck[high]);
2239 +               if (high != aniState->cckWeakSigThreshold) {
2240 +                       if (high)
2241 +                               ah->stats.ast_ani_cckhigh++;
2242 +                       else
2243 +                               ah->stats.ast_ani_ccklow++;
2244 +                       aniState->cckWeakSigThreshold = high;
2245 +               }
2246 +               break;
2247 +       }
2248 +       case ATH9K_ANI_FIRSTEP_LEVEL:{
2249 +               const int firstep[] = { 0, 4, 8 };
2250 +               u32 level = param;
2251 +
2252 +               if (level >= ARRAY_SIZE(firstep)) {
2253 +                       ath_print(common, ATH_DBG_ANI,
2254 +                                 "level out of range (%u > %u)\n",
2255 +                                 level,
2256 +                                 (unsigned) ARRAY_SIZE(firstep));
2257 +                       return false;
2258 +               }
2259 +               REG_RMW_FIELD(ah, AR_PHY_FIND_SIG,
2260 +                             AR_PHY_FIND_SIG_FIRSTEP,
2261 +                             firstep[level]);
2262 +               if (level > aniState->firstepLevel)
2263 +                       ah->stats.ast_ani_stepup++;
2264 +               else if (level < aniState->firstepLevel)
2265 +                       ah->stats.ast_ani_stepdown++;
2266 +               aniState->firstepLevel = level;
2267 +               break;
2268 +       }
2269 +       case ATH9K_ANI_SPUR_IMMUNITY_LEVEL:{
2270 +               const int cycpwrThr1[] =
2271 +                       { 2, 4, 6, 8, 10, 12, 14, 16 };
2272 +               u32 level = param;
2273 +
2274 +               if (level >= ARRAY_SIZE(cycpwrThr1)) {
2275 +                       ath_print(common, ATH_DBG_ANI,
2276 +                                 "level out of range (%u > %u)\n",
2277 +                                 level,
2278 +                                 (unsigned) ARRAY_SIZE(cycpwrThr1));
2279 +                       return false;
2280 +               }
2281 +               REG_RMW_FIELD(ah, AR_PHY_TIMING5,
2282 +                             AR_PHY_TIMING5_CYCPWR_THR1,
2283 +                             cycpwrThr1[level]);
2284 +               if (level > aniState->spurImmunityLevel)
2285 +                       ah->stats.ast_ani_spurup++;
2286 +               else if (level < aniState->spurImmunityLevel)
2287 +                       ah->stats.ast_ani_spurdown++;
2288 +               aniState->spurImmunityLevel = level;
2289 +               break;
2290 +       }
2291 +       case ATH9K_ANI_PRESENT:
2292 +               break;
2293 +       default:
2294 +               ath_print(common, ATH_DBG_ANI,
2295 +                         "invalid cmd %u\n", cmd);
2296 +               return false;
2297 +       }
2298 +
2299 +       ath_print(common, ATH_DBG_ANI, "ANI parameters:\n");
2300 +       ath_print(common, ATH_DBG_ANI,
2301 +                 "noiseImmunityLevel=%d, spurImmunityLevel=%d, "
2302 +                 "ofdmWeakSigDetectOff=%d\n",
2303 +                 aniState->noiseImmunityLevel,
2304 +                 aniState->spurImmunityLevel,
2305 +                 !aniState->ofdmWeakSigDetectOff);
2306 +       ath_print(common, ATH_DBG_ANI,
2307 +                 "cckWeakSigThreshold=%d, "
2308 +                 "firstepLevel=%d, listenTime=%d\n",
2309 +                 aniState->cckWeakSigThreshold,
2310 +                 aniState->firstepLevel,
2311 +                 aniState->listenTime);
2312 +       ath_print(common, ATH_DBG_ANI,
2313 +               "cycleCount=%d, ofdmPhyErrCount=%d, cckPhyErrCount=%d\n\n",
2314 +               aniState->cycleCount,
2315 +               aniState->ofdmPhyErrCount,
2316 +               aniState->cckPhyErrCount);
2317 +
2318 +       return true;
2319 +}
2320 +
2321 +static void ar5008_hw_do_getnf(struct ath_hw *ah,
2322 +                             int16_t nfarray[NUM_NF_READINGS])
2323 +{
2324 +       struct ath_common *common = ath9k_hw_common(ah);
2325 +       int16_t nf;
2326 +
2327 +       nf = MS(REG_READ(ah, AR_PHY_CCA), AR_PHY_MINCCA_PWR);
2328 +       if (nf & 0x100)
2329 +               nf = 0 - ((nf ^ 0x1ff) + 1);
2330 +       ath_print(common, ATH_DBG_CALIBRATE,
2331 +                 "NF calibrated [ctl] [chain 0] is %d\n", nf);
2332 +       nfarray[0] = nf;
2333 +
2334 +       nf = MS(REG_READ(ah, AR_PHY_CH1_CCA), AR_PHY_CH1_MINCCA_PWR);
2335 +       if (nf & 0x100)
2336 +               nf = 0 - ((nf ^ 0x1ff) + 1);
2337 +       ath_print(common, ATH_DBG_CALIBRATE,
2338 +                 "NF calibrated [ctl] [chain 1] is %d\n", nf);
2339 +       nfarray[1] = nf;
2340 +
2341 +       nf = MS(REG_READ(ah, AR_PHY_CH2_CCA), AR_PHY_CH2_MINCCA_PWR);
2342 +       if (nf & 0x100)
2343 +               nf = 0 - ((nf ^ 0x1ff) + 1);
2344 +       ath_print(common, ATH_DBG_CALIBRATE,
2345 +                 "NF calibrated [ctl] [chain 2] is %d\n", nf);
2346 +       nfarray[2] = nf;
2347 +
2348 +       nf = MS(REG_READ(ah, AR_PHY_EXT_CCA), AR_PHY_EXT_MINCCA_PWR);
2349 +       if (nf & 0x100)
2350 +               nf = 0 - ((nf ^ 0x1ff) + 1);
2351 +       ath_print(common, ATH_DBG_CALIBRATE,
2352 +                 "NF calibrated [ext] [chain 0] is %d\n", nf);
2353 +       nfarray[3] = nf;
2354 +
2355 +       nf = MS(REG_READ(ah, AR_PHY_CH1_EXT_CCA), AR_PHY_CH1_EXT_MINCCA_PWR);
2356 +       if (nf & 0x100)
2357 +               nf = 0 - ((nf ^ 0x1ff) + 1);
2358 +       ath_print(common, ATH_DBG_CALIBRATE,
2359 +                 "NF calibrated [ext] [chain 1] is %d\n", nf);
2360 +       nfarray[4] = nf;
2361 +
2362 +       nf = MS(REG_READ(ah, AR_PHY_CH2_EXT_CCA), AR_PHY_CH2_EXT_MINCCA_PWR);
2363 +       if (nf & 0x100)
2364 +               nf = 0 - ((nf ^ 0x1ff) + 1);
2365 +       ath_print(common, ATH_DBG_CALIBRATE,
2366 +                 "NF calibrated [ext] [chain 2] is %d\n", nf);
2367 +       nfarray[5] = nf;
2368 +}
2369 +
2370 +void ar5008_hw_attach_phy_ops(struct ath_hw *ah)
2371 +{
2372 +       struct ath_hw_private_ops *priv_ops = ath9k_hw_private_ops(ah);
2373 +
2374 +       priv_ops->rf_set_freq = ar5008_hw_set_channel;
2375 +       priv_ops->spur_mitigate_freq = ar5008_hw_spur_mitigate;
2376 +
2377 +       priv_ops->rf_alloc_ext_banks = ar5008_hw_rf_alloc_ext_banks;
2378 +       priv_ops->rf_free_ext_banks = ar5008_hw_rf_free_ext_banks;
2379 +       priv_ops->set_rf_regs = ar5008_hw_set_rf_regs;
2380 +       priv_ops->set_channel_regs = ar5008_hw_set_channel_regs;
2381 +       priv_ops->init_bb = ar5008_hw_init_bb;
2382 +       priv_ops->process_ini = ar5008_hw_process_ini;
2383 +       priv_ops->set_rfmode = ar5008_hw_set_rfmode;
2384 +       priv_ops->mark_phy_inactive = ar5008_hw_mark_phy_inactive;
2385 +       priv_ops->set_delta_slope = ar5008_hw_set_delta_slope;
2386 +       priv_ops->rfbus_req = ar5008_hw_rfbus_req;
2387 +       priv_ops->rfbus_done = ar5008_hw_rfbus_done;
2388 +       priv_ops->enable_rfkill = ar5008_hw_enable_rfkill;
2389 +       priv_ops->restore_chainmask = ar5008_restore_chainmask;
2390 +       priv_ops->set_diversity = ar5008_set_diversity;
2391 +       priv_ops->ani_control = ar5008_hw_ani_control;
2392 +       priv_ops->do_getnf = ar5008_hw_do_getnf;
2393 +
2394 +       if (AR_SREV_9100(ah))
2395 +               priv_ops->compute_pll_control = ar9100_hw_compute_pll_control;
2396 +       else if (AR_SREV_9160_10_OR_LATER(ah))
2397 +               priv_ops->compute_pll_control = ar9160_hw_compute_pll_control;
2398 +       else
2399 +               priv_ops->compute_pll_control = ar5008_hw_compute_pll_control;
2400 +}
2401 diff --git a/drivers/net/wireless/ath/ath9k/ar9001_initvals.h b/drivers/net/wireless/ath/ath9k/ar9001_initvals.h
2402 new file mode 100644
2403 index 0000000..3e34dc9
2404 --- /dev/null
2405 +++ b/drivers/net/wireless/ath/ath9k/ar9001_initvals.h
2406 @@ -0,0 +1,1314 @@
2407 +
2408 +static const u32 ar5416Common_9100[][2] = {
2409 +       {0x0000000c, 0x00000000},
2410 +       {0x00000030, 0x00020015},
2411 +       {0x00000034, 0x00000005},
2412 +       {0x00000040, 0x00000000},
2413 +       {0x00000044, 0x00000008},
2414 +       {0x00000048, 0x00000008},
2415 +       {0x0000004c, 0x00000010},
2416 +       {0x00000050, 0x00000000},
2417 +       {0x00000054, 0x0000001f},
2418 +       {0x00000800, 0x00000000},
2419 +       {0x00000804, 0x00000000},
2420 +       {0x00000808, 0x00000000},
2421 +       {0x0000080c, 0x00000000},
2422 +       {0x00000810, 0x00000000},
2423 +       {0x00000814, 0x00000000},
2424 +       {0x00000818, 0x00000000},
2425 +       {0x0000081c, 0x00000000},
2426 +       {0x00000820, 0x00000000},
2427 +       {0x00000824, 0x00000000},
2428 +       {0x00001040, 0x002ffc0f},
2429 +       {0x00001044, 0x002ffc0f},
2430 +       {0x00001048, 0x002ffc0f},
2431 +       {0x0000104c, 0x002ffc0f},
2432 +       {0x00001050, 0x002ffc0f},
2433 +       {0x00001054, 0x002ffc0f},
2434 +       {0x00001058, 0x002ffc0f},
2435 +       {0x0000105c, 0x002ffc0f},
2436 +       {0x00001060, 0x002ffc0f},
2437 +       {0x00001064, 0x002ffc0f},
2438 +       {0x00001230, 0x00000000},
2439 +       {0x00001270, 0x00000000},
2440 +       {0x00001038, 0x00000000},
2441 +       {0x00001078, 0x00000000},
2442 +       {0x000010b8, 0x00000000},
2443 +       {0x000010f8, 0x00000000},
2444 +       {0x00001138, 0x00000000},
2445 +       {0x00001178, 0x00000000},
2446 +       {0x000011b8, 0x00000000},
2447 +       {0x000011f8, 0x00000000},
2448 +       {0x00001238, 0x00000000},
2449 +       {0x00001278, 0x00000000},
2450 +       {0x000012b8, 0x00000000},
2451 +       {0x000012f8, 0x00000000},
2452 +       {0x00001338, 0x00000000},
2453 +       {0x00001378, 0x00000000},
2454 +       {0x000013b8, 0x00000000},
2455 +       {0x000013f8, 0x00000000},
2456 +       {0x00001438, 0x00000000},
2457 +       {0x00001478, 0x00000000},
2458 +       {0x000014b8, 0x00000000},
2459 +       {0x000014f8, 0x00000000},
2460 +       {0x00001538, 0x00000000},
2461 +       {0x00001578, 0x00000000},
2462 +       {0x000015b8, 0x00000000},
2463 +       {0x000015f8, 0x00000000},
2464 +       {0x00001638, 0x00000000},
2465 +       {0x00001678, 0x00000000},
2466 +       {0x000016b8, 0x00000000},
2467 +       {0x000016f8, 0x00000000},
2468 +       {0x00001738, 0x00000000},
2469 +       {0x00001778, 0x00000000},
2470 +       {0x000017b8, 0x00000000},
2471 +       {0x000017f8, 0x00000000},
2472 +       {0x0000103c, 0x00000000},
2473 +       {0x0000107c, 0x00000000},
2474 +       {0x000010bc, 0x00000000},
2475 +       {0x000010fc, 0x00000000},
2476 +       {0x0000113c, 0x00000000},
2477 +       {0x0000117c, 0x00000000},
2478 +       {0x000011bc, 0x00000000},
2479 +       {0x000011fc, 0x00000000},
2480 +       {0x0000123c, 0x00000000},
2481 +       {0x0000127c, 0x00000000},
2482 +       {0x000012bc, 0x00000000},
2483 +       {0x000012fc, 0x00000000},
2484 +       {0x0000133c, 0x00000000},
2485 +       {0x0000137c, 0x00000000},
2486 +       {0x000013bc, 0x00000000},
2487 +       {0x000013fc, 0x00000000},
2488 +       {0x0000143c, 0x00000000},
2489 +       {0x0000147c, 0x00000000},
2490 +       {0x00020010, 0x00000003},
2491 +       {0x00020038, 0x000004c2},
2492 +       {0x00008004, 0x00000000},
2493 +       {0x00008008, 0x00000000},
2494 +       {0x0000800c, 0x00000000},
2495 +       {0x00008018, 0x00000700},
2496 +       {0x00008020, 0x00000000},
2497 +       {0x00008038, 0x00000000},
2498 +       {0x0000803c, 0x00000000},
2499 +       {0x00008048, 0x40000000},
2500 +       {0x00008054, 0x00004000},
2501 +       {0x00008058, 0x00000000},
2502 +       {0x0000805c, 0x000fc78f},
2503 +       {0x00008060, 0x0000000f},
2504 +       {0x00008064, 0x00000000},
2505 +       {0x000080c0, 0x2a82301a},
2506 +       {0x000080c4, 0x05dc01e0},
2507 +       {0x000080c8, 0x1f402710},
2508 +       {0x000080cc, 0x01f40000},
2509 +       {0x000080d0, 0x00001e00},
2510 +       {0x000080d4, 0x00000000},
2511 +       {0x000080d8, 0x00400000},
2512 +       {0x000080e0, 0xffffffff},
2513 +       {0x000080e4, 0x0000ffff},
2514 +       {0x000080e8, 0x003f3f3f},
2515 +       {0x000080ec, 0x00000000},
2516 +       {0x000080f0, 0x00000000},
2517 +       {0x000080f4, 0x00000000},
2518 +       {0x000080f8, 0x00000000},
2519 +       {0x000080fc, 0x00020000},
2520 +       {0x00008100, 0x00020000},
2521 +       {0x00008104, 0x00000001},
2522 +       {0x00008108, 0x00000052},
2523 +       {0x0000810c, 0x00000000},
2524 +       {0x00008110, 0x00000168},
2525 +       {0x00008118, 0x000100aa},
2526 +       {0x0000811c, 0x00003210},
2527 +       {0x00008120, 0x08f04800},
2528 +       {0x00008124, 0x00000000},
2529 +       {0x00008128, 0x00000000},
2530 +       {0x0000812c, 0x00000000},
2531 +       {0x00008130, 0x00000000},
2532 +       {0x00008134, 0x00000000},
2533 +       {0x00008138, 0x00000000},
2534 +       {0x0000813c, 0x00000000},
2535 +       {0x00008144, 0x00000000},
2536 +       {0x00008168, 0x00000000},
2537 +       {0x0000816c, 0x00000000},
2538 +       {0x00008170, 0x32143320},
2539 +       {0x00008174, 0xfaa4fa50},
2540 +       {0x00008178, 0x00000100},
2541 +       {0x0000817c, 0x00000000},
2542 +       {0x000081c4, 0x00000000},
2543 +       {0x000081d0, 0x00003210},
2544 +       {0x000081ec, 0x00000000},
2545 +       {0x000081f0, 0x00000000},
2546 +       {0x000081f4, 0x00000000},
2547 +       {0x000081f8, 0x00000000},
2548 +       {0x000081fc, 0x00000000},
2549 +       {0x00008200, 0x00000000},
2550 +       {0x00008204, 0x00000000},
2551 +       {0x00008208, 0x00000000},
2552 +       {0x0000820c, 0x00000000},
2553 +       {0x00008210, 0x00000000},
2554 +       {0x00008214, 0x00000000},
2555 +       {0x00008218, 0x00000000},
2556 +       {0x0000821c, 0x00000000},
2557 +       {0x00008220, 0x00000000},
2558 +       {0x00008224, 0x00000000},
2559 +       {0x00008228, 0x00000000},
2560 +       {0x0000822c, 0x00000000},
2561 +       {0x00008230, 0x00000000},
2562 +       {0x00008234, 0x00000000},
2563 +       {0x00008238, 0x00000000},
2564 +       {0x0000823c, 0x00000000},
2565 +       {0x00008240, 0x00100000},
2566 +       {0x00008244, 0x0010f400},
2567 +       {0x00008248, 0x00000100},
2568 +       {0x0000824c, 0x0001e800},
2569 +       {0x00008250, 0x00000000},
2570 +       {0x00008254, 0x00000000},
2571 +       {0x00008258, 0x00000000},
2572 +       {0x0000825c, 0x400000ff},
2573 +       {0x00008260, 0x00080922},
2574 +       {0x00008270, 0x00000000},
2575 +       {0x00008274, 0x40000000},
2576 +       {0x00008278, 0x003e4180},
2577 +       {0x0000827c, 0x00000000},
2578 +       {0x00008284, 0x0000002c},
2579 +       {0x00008288, 0x0000002c},
2580 +       {0x0000828c, 0x00000000},
2581 +       {0x00008294, 0x00000000},
2582 +       {0x00008298, 0x00000000},
2583 +       {0x00008300, 0x00000000},
2584 +       {0x00008304, 0x00000000},
2585 +       {0x00008308, 0x00000000},
2586 +       {0x0000830c, 0x00000000},
2587 +       {0x00008310, 0x00000000},
2588 +       {0x00008314, 0x00000000},
2589 +       {0x00008318, 0x00000000},
2590 +       {0x00008328, 0x00000000},
2591 +       {0x0000832c, 0x00000007},
2592 +       {0x00008330, 0x00000302},
2593 +       {0x00008334, 0x00000e00},
2594 +       {0x00008338, 0x00000000},
2595 +       {0x0000833c, 0x00000000},
2596 +       {0x00008340, 0x000107ff},
2597 +       {0x00009808, 0x00000000},
2598 +       {0x0000980c, 0xad848e19},
2599 +       {0x00009810, 0x7d14e000},
2600 +       {0x00009814, 0x9c0a9f6b},
2601 +       {0x0000981c, 0x00000000},
2602 +       {0x0000982c, 0x0000a000},
2603 +       {0x00009830, 0x00000000},
2604 +       {0x0000983c, 0x00200400},
2605 +       {0x00009840, 0x206a01ae},
2606 +       {0x0000984c, 0x1284233c},
2607 +       {0x00009854, 0x00000859},
2608 +       {0x00009900, 0x00000000},
2609 +       {0x00009904, 0x00000000},
2610 +       {0x00009908, 0x00000000},
2611 +       {0x0000990c, 0x00000000},
2612 +       {0x0000991c, 0x10000fff},
2613 +       {0x00009920, 0x05100000},
2614 +       {0x0000a920, 0x05100000},
2615 +       {0x0000b920, 0x05100000},
2616 +       {0x00009928, 0x00000001},
2617 +       {0x0000992c, 0x00000004},
2618 +       {0x00009934, 0x1e1f2022},
2619 +       {0x00009938, 0x0a0b0c0d},
2620 +       {0x0000993c, 0x00000000},
2621 +       {0x00009948, 0x9280b212},
2622 +       {0x0000994c, 0x00020028},
2623 +       {0x0000c95c, 0x004b6a8e},
2624 +       {0x0000c968, 0x000003ce},
2625 +       {0x00009970, 0x190fb515},
2626 +       {0x00009974, 0x00000000},
2627 +       {0x00009978, 0x00000001},
2628 +       {0x0000997c, 0x00000000},
2629 +       {0x00009980, 0x00000000},
2630 +       {0x00009984, 0x00000000},
2631 +       {0x00009988, 0x00000000},
2632 +       {0x0000998c, 0x00000000},
2633 +       {0x00009990, 0x00000000},
2634 +       {0x00009994, 0x00000000},
2635 +       {0x00009998, 0x00000000},
2636 +       {0x0000999c, 0x00000000},
2637 +       {0x000099a0, 0x00000000},
2638 +       {0x000099a4, 0x00000001},
2639 +       {0x000099a8, 0x201fff00},
2640 +       {0x000099ac, 0x006f0000},
2641 +       {0x000099b0, 0x03051000},
2642 +       {0x000099dc, 0x00000000},
2643 +       {0x000099e0, 0x00000200},
2644 +       {0x000099e4, 0xaaaaaaaa},
2645 +       {0x000099e8, 0x3c466478},
2646 +       {0x000099ec, 0x0cc80caa},
2647 +       {0x000099fc, 0x00001042},
2648 +       {0x00009b00, 0x00000000},
2649 +       {0x00009b04, 0x00000001},
2650 +       {0x00009b08, 0x00000002},
2651 +       {0x00009b0c, 0x00000003},
2652 +       {0x00009b10, 0x00000004},
2653 +       {0x00009b14, 0x00000005},
2654 +       {0x00009b18, 0x00000008},
2655 +       {0x00009b1c, 0x00000009},
2656 +       {0x00009b20, 0x0000000a},
2657 +       {0x00009b24, 0x0000000b},
2658 +       {0x00009b28, 0x0000000c},
2659 +       {0x00009b2c, 0x0000000d},
2660 +       {0x00009b30, 0x00000010},
2661 +       {0x00009b34, 0x00000011},
2662 +       {0x00009b38, 0x00000012},
2663 +       {0x00009b3c, 0x00000013},
2664 +       {0x00009b40, 0x00000014},
2665 +       {0x00009b44, 0x00000015},
2666 +       {0x00009b48, 0x00000018},
2667 +       {0x00009b4c, 0x00000019},
2668 +       {0x00009b50, 0x0000001a},
2669 +       {0x00009b54, 0x0000001b},
2670 +       {0x00009b58, 0x0000001c},
2671 +       {0x00009b5c, 0x0000001d},
2672 +       {0x00009b60, 0x00000020},
2673 +       {0x00009b64, 0x00000021},
2674 +       {0x00009b68, 0x00000022},
2675 +       {0x00009b6c, 0x00000023},
2676 +       {0x00009b70, 0x00000024},
2677 +       {0x00009b74, 0x00000025},
2678 +       {0x00009b78, 0x00000028},
2679 +       {0x00009b7c, 0x00000029},
2680 +       {0x00009b80, 0x0000002a},
2681 +       {0x00009b84, 0x0000002b},
2682 +       {0x00009b88, 0x0000002c},
2683 +       {0x00009b8c, 0x0000002d},
2684 +       {0x00009b90, 0x00000030},
2685 +       {0x00009b94, 0x00000031},
2686 +       {0x00009b98, 0x00000032},
2687 +       {0x00009b9c, 0x00000033},
2688 +       {0x00009ba0, 0x00000034},
2689 +       {0x00009ba4, 0x00000035},
2690 +       {0x00009ba8, 0x00000035},
2691 +       {0x00009bac, 0x00000035},
2692 +       {0x00009bb0, 0x00000035},
2693 +       {0x00009bb4, 0x00000035},
2694 +       {0x00009bb8, 0x00000035},
2695 +       {0x00009bbc, 0x00000035},
2696 +       {0x00009bc0, 0x00000035},
2697 +       {0x00009bc4, 0x00000035},
2698 +       {0x00009bc8, 0x00000035},
2699 +       {0x00009bcc, 0x00000035},
2700 +       {0x00009bd0, 0x00000035},
2701 +       {0x00009bd4, 0x00000035},
2702 +       {0x00009bd8, 0x00000035},
2703 +       {0x00009bdc, 0x00000035},
2704 +       {0x00009be0, 0x00000035},
2705 +       {0x00009be4, 0x00000035},
2706 +       {0x00009be8, 0x00000035},
2707 +       {0x00009bec, 0x00000035},
2708 +       {0x00009bf0, 0x00000035},
2709 +       {0x00009bf4, 0x00000035},
2710 +       {0x00009bf8, 0x00000010},
2711 +       {0x00009bfc, 0x0000001a},
2712 +       {0x0000a210, 0x40806333},
2713 +       {0x0000a214, 0x00106c10},
2714 +       {0x0000a218, 0x009c4060},
2715 +       {0x0000a220, 0x018830c6},
2716 +       {0x0000a224, 0x00000400},
2717 +       {0x0000a228, 0x001a0bb5},
2718 +       {0x0000a22c, 0x00000000},
2719 +       {0x0000a234, 0x20202020},
2720 +       {0x0000a238, 0x20202020},
2721 +       {0x0000a23c, 0x13c889ae},
2722 +       {0x0000a240, 0x38490a20},
2723 +       {0x0000a244, 0x00007bb6},
2724 +       {0x0000a248, 0x0fff3ffc},
2725 +       {0x0000a24c, 0x00000001},
2726 +       {0x0000a250, 0x0000a000},
2727 +       {0x0000a254, 0x00000000},
2728 +       {0x0000a258, 0x0cc75380},
2729 +       {0x0000a25c, 0x0f0f0f01},
2730 +       {0x0000a260, 0xdfa91f01},
2731 +       {0x0000a268, 0x00000001},
2732 +       {0x0000a26c, 0x0ebae9c6},
2733 +       {0x0000b26c, 0x0ebae9c6},
2734 +       {0x0000c26c, 0x0ebae9c6},
2735 +       {0x0000d270, 0x00820820},
2736 +       {0x0000a278, 0x1ce739ce},
2737 +       {0x0000a27c, 0x050701ce},
2738 +       {0x0000a338, 0x00000000},
2739 +       {0x0000a33c, 0x00000000},
2740 +       {0x0000a340, 0x00000000},
2741 +       {0x0000a344, 0x00000000},
2742 +       {0x0000a348, 0x3fffffff},
2743 +       {0x0000a34c, 0x3fffffff},
2744 +       {0x0000a350, 0x3fffffff},
2745 +       {0x0000a354, 0x0003ffff},
2746 +       {0x0000a358, 0x79a8aa33},
2747 +       {0x0000d35c, 0x07ffffef},
2748 +       {0x0000d360, 0x0fffffe7},
2749 +       {0x0000d364, 0x17ffffe5},
2750 +       {0x0000d368, 0x1fffffe4},
2751 +       {0x0000d36c, 0x37ffffe3},
2752 +       {0x0000d370, 0x3fffffe3},
2753 +       {0x0000d374, 0x57ffffe3},
2754 +       {0x0000d378, 0x5fffffe2},
2755 +       {0x0000d37c, 0x7fffffe2},
2756 +       {0x0000d380, 0x7f3c7bba},
2757 +       {0x0000d384, 0xf3307ff0},
2758 +       {0x0000a388, 0x0c000000},
2759 +       {0x0000a38c, 0x20202020},
2760 +       {0x0000a390, 0x20202020},
2761 +       {0x0000a394, 0x1ce739ce},
2762 +       {0x0000a398, 0x000001ce},
2763 +       {0x0000a39c, 0x00000001},
2764 +       {0x0000a3a0, 0x00000000},
2765 +       {0x0000a3a4, 0x00000000},
2766 +       {0x0000a3a8, 0x00000000},
2767 +       {0x0000a3ac, 0x00000000},
2768 +       {0x0000a3b0, 0x00000000},
2769 +       {0x0000a3b4, 0x00000000},
2770 +       {0x0000a3b8, 0x00000000},
2771 +       {0x0000a3bc, 0x00000000},
2772 +       {0x0000a3c0, 0x00000000},
2773 +       {0x0000a3c4, 0x00000000},
2774 +       {0x0000a3c8, 0x00000246},
2775 +       {0x0000a3cc, 0x20202020},
2776 +       {0x0000a3d0, 0x20202020},
2777 +       {0x0000a3d4, 0x20202020},
2778 +       {0x0000a3dc, 0x1ce739ce},
2779 +       {0x0000a3e0, 0x000001ce},
2780 +};
2781 +
2782 +static const u32 ar5416Bank0_9100[][2] = {
2783 +       {0x000098b0, 0x1e5795e5},
2784 +       {0x000098e0, 0x02008020},
2785 +};
2786 +
2787 +static const u32 ar5416BB_RfGain_9100[][3] = {
2788 +       {0x00009a00, 0x00000000, 0x00000000},
2789 +       {0x00009a04, 0x00000040, 0x00000040},
2790 +       {0x00009a08, 0x00000080, 0x00000080},
2791 +       {0x00009a0c, 0x000001a1, 0x00000141},
2792 +       {0x00009a10, 0x000001e1, 0x00000181},
2793 +       {0x00009a14, 0x00000021, 0x000001c1},
2794 +       {0x00009a18, 0x00000061, 0x00000001},
2795 +       {0x00009a1c, 0x00000168, 0x00000041},
2796 +       {0x00009a20, 0x000001a8, 0x000001a8},
2797 +       {0x00009a24, 0x000001e8, 0x000001e8},
2798 +       {0x00009a28, 0x00000028, 0x00000028},
2799 +       {0x00009a2c, 0x00000068, 0x00000068},
2800 +       {0x00009a30, 0x00000189, 0x000000a8},
2801 +       {0x00009a34, 0x000001c9, 0x00000169},
2802 +       {0x00009a38, 0x00000009, 0x000001a9},
2803 +       {0x00009a3c, 0x00000049, 0x000001e9},
2804 +       {0x00009a40, 0x00000089, 0x00000029},
2805 +       {0x00009a44, 0x00000170, 0x00000069},
2806 +       {0x00009a48, 0x000001b0, 0x00000190},
2807 +       {0x00009a4c, 0x000001f0, 0x000001d0},
2808 +       {0x00009a50, 0x00000030, 0x00000010},
2809 +       {0x00009a54, 0x00000070, 0x00000050},
2810 +       {0x00009a58, 0x00000191, 0x00000090},
2811 +       {0x00009a5c, 0x000001d1, 0x00000151},
2812 +       {0x00009a60, 0x00000011, 0x00000191},
2813 +       {0x00009a64, 0x00000051, 0x000001d1},
2814 +       {0x00009a68, 0x00000091, 0x00000011},
2815 +       {0x00009a6c, 0x000001b8, 0x00000051},
2816 +       {0x00009a70, 0x000001f8, 0x00000198},
2817 +       {0x00009a74, 0x00000038, 0x000001d8},
2818 +       {0x00009a78, 0x00000078, 0x00000018},
2819 +       {0x00009a7c, 0x00000199, 0x00000058},
2820 +       {0x00009a80, 0x000001d9, 0x00000098},
2821 +       {0x00009a84, 0x00000019, 0x00000159},
2822 +       {0x00009a88, 0x00000059, 0x00000199},
2823 +       {0x00009a8c, 0x00000099, 0x000001d9},
2824 +       {0x00009a90, 0x000000d9, 0x00000019},
2825 +       {0x00009a94, 0x000000f9, 0x00000059},
2826 +       {0x00009a98, 0x000000f9, 0x00000099},
2827 +       {0x00009a9c, 0x000000f9, 0x000000d9},
2828 +       {0x00009aa0, 0x000000f9, 0x000000f9},
2829 +       {0x00009aa4, 0x000000f9, 0x000000f9},
2830 +       {0x00009aa8, 0x000000f9, 0x000000f9},
2831 +       {0x00009aac, 0x000000f9, 0x000000f9},
2832 +       {0x00009ab0, 0x000000f9, 0x000000f9},
2833 +       {0x00009ab4, 0x000000f9, 0x000000f9},
2834 +       {0x00009ab8, 0x000000f9, 0x000000f9},
2835 +       {0x00009abc, 0x000000f9, 0x000000f9},
2836 +       {0x00009ac0, 0x000000f9, 0x000000f9},
2837 +       {0x00009ac4, 0x000000f9, 0x000000f9},
2838 +       {0x00009ac8, 0x000000f9, 0x000000f9},
2839 +       {0x00009acc, 0x000000f9, 0x000000f9},
2840 +       {0x00009ad0, 0x000000f9, 0x000000f9},
2841 +       {0x00009ad4, 0x000000f9, 0x000000f9},
2842 +       {0x00009ad8, 0x000000f9, 0x000000f9},
2843 +       {0x00009adc, 0x000000f9, 0x000000f9},
2844 +       {0x00009ae0, 0x000000f9, 0x000000f9},
2845 +       {0x00009ae4, 0x000000f9, 0x000000f9},
2846 +       {0x00009ae8, 0x000000f9, 0x000000f9},
2847 +       {0x00009aec, 0x000000f9, 0x000000f9},
2848 +       {0x00009af0, 0x000000f9, 0x000000f9},
2849 +       {0x00009af4, 0x000000f9, 0x000000f9},
2850 +       {0x00009af8, 0x000000f9, 0x000000f9},
2851 +       {0x00009afc, 0x000000f9, 0x000000f9},
2852 +};
2853 +
2854 +static const u32 ar5416Bank1_9100[][2] = {
2855 +       {0x000098b0, 0x02108421},
2856 +       {0x000098ec, 0x00000008},
2857 +};
2858 +
2859 +static const u32 ar5416Bank2_9100[][2] = {
2860 +       {0x000098b0, 0x0e73ff17},
2861 +       {0x000098e0, 0x00000420},
2862 +};
2863 +
2864 +static const u32 ar5416Bank3_9100[][3] = {
2865 +       {0x000098f0, 0x01400018, 0x01c00018},
2866 +};
2867 +
2868 +static const u32 ar5416Bank6_9100[][3] = {
2869 +
2870 +       {0x0000989c, 0x00000000, 0x00000000},
2871 +       {0x0000989c, 0x00000000, 0x00000000},
2872 +       {0x0000989c, 0x00000000, 0x00000000},
2873 +       {0x0000989c, 0x00e00000, 0x00e00000},
2874 +       {0x0000989c, 0x005e0000, 0x005e0000},
2875 +       {0x0000989c, 0x00120000, 0x00120000},
2876 +       {0x0000989c, 0x00620000, 0x00620000},
2877 +       {0x0000989c, 0x00020000, 0x00020000},
2878 +       {0x0000989c, 0x00ff0000, 0x00ff0000},
2879 +       {0x0000989c, 0x00ff0000, 0x00ff0000},
2880 +       {0x0000989c, 0x00ff0000, 0x00ff0000},
2881 +       {0x0000989c, 0x00ff0000, 0x00ff0000},
2882 +       {0x0000989c, 0x005f0000, 0x005f0000},
2883 +       {0x0000989c, 0x00870000, 0x00870000},
2884 +       {0x0000989c, 0x00f90000, 0x00f90000},
2885 +       {0x0000989c, 0x007b0000, 0x007b0000},
2886 +       {0x0000989c, 0x00ff0000, 0x00ff0000},
2887 +       {0x0000989c, 0x00f50000, 0x00f50000},
2888 +       {0x0000989c, 0x00dc0000, 0x00dc0000},
2889 +       {0x0000989c, 0x00110000, 0x00110000},
2890 +       {0x0000989c, 0x006100a8, 0x006100a8},
2891 +       {0x0000989c, 0x004210a2, 0x004210a2},
2892 +       {0x0000989c, 0x0014000f, 0x0014000f},
2893 +       {0x0000989c, 0x00c40002, 0x00c40002},
2894 +       {0x0000989c, 0x003000f2, 0x003000f2},
2895 +       {0x0000989c, 0x00440016, 0x00440016},
2896 +       {0x0000989c, 0x00410040, 0x00410040},
2897 +       {0x0000989c, 0x000180d6, 0x000180d6},
2898 +       {0x0000989c, 0x0000c0aa, 0x0000c0aa},
2899 +       {0x0000989c, 0x000000b1, 0x000000b1},
2900 +       {0x0000989c, 0x00002000, 0x00002000},
2901 +       {0x0000989c, 0x000000d4, 0x000000d4},
2902 +       {0x000098d0, 0x0000000f, 0x0010000f},
2903 +};
2904 +
2905 +static const u32 ar5416Bank6TPC_9100[][3] = {
2906 +
2907 +       {0x0000989c, 0x00000000, 0x00000000},
2908 +       {0x0000989c, 0x00000000, 0x00000000},
2909 +       {0x0000989c, 0x00000000, 0x00000000},
2910 +       {0x0000989c, 0x00e00000, 0x00e00000},
2911 +       {0x0000989c, 0x005e0000, 0x005e0000},
2912 +       {0x0000989c, 0x00120000, 0x00120000},
2913 +       {0x0000989c, 0x00620000, 0x00620000},
2914 +       {0x0000989c, 0x00020000, 0x00020000},
2915 +       {0x0000989c, 0x00ff0000, 0x00ff0000},
2916 +       {0x0000989c, 0x00ff0000, 0x00ff0000},
2917 +       {0x0000989c, 0x00ff0000, 0x00ff0000},
2918 +       {0x0000989c, 0x40ff0000, 0x40ff0000},
2919 +       {0x0000989c, 0x005f0000, 0x005f0000},
2920 +       {0x0000989c, 0x00870000, 0x00870000},
2921 +       {0x0000989c, 0x00f90000, 0x00f90000},
2922 +       {0x0000989c, 0x007b0000, 0x007b0000},
2923 +       {0x0000989c, 0x00ff0000, 0x00ff0000},
2924 +       {0x0000989c, 0x00f50000, 0x00f50000},
2925 +       {0x0000989c, 0x00dc0000, 0x00dc0000},
2926 +       {0x0000989c, 0x00110000, 0x00110000},
2927 +       {0x0000989c, 0x006100a8, 0x006100a8},
2928 +       {0x0000989c, 0x00423022, 0x00423022},
2929 +       {0x0000989c, 0x2014008f, 0x2014008f},
2930 +       {0x0000989c, 0x00c40002, 0x00c40002},
2931 +       {0x0000989c, 0x003000f2, 0x003000f2},
2932 +       {0x0000989c, 0x00440016, 0x00440016},
2933 +       {0x0000989c, 0x00410040, 0x00410040},
2934 +       {0x0000989c, 0x0001805e, 0x0001805e},
2935 +       {0x0000989c, 0x0000c0ab, 0x0000c0ab},
2936 +       {0x0000989c, 0x000000e1, 0x000000e1},
2937 +       {0x0000989c, 0x00007080, 0x00007080},
2938 +       {0x0000989c, 0x000000d4, 0x000000d4},
2939 +       {0x000098d0, 0x0000000f, 0x0010000f},
2940 +};
2941 +
2942 +static const u32 ar5416Bank7_9100[][2] = {
2943 +       {0x0000989c, 0x00000500},
2944 +       {0x0000989c, 0x00000800},
2945 +       {0x000098cc, 0x0000000e},
2946 +};
2947 +
2948 +static const u32 ar5416Addac_9100[][2] = {
2949 +       {0x0000989c, 0x00000000},
2950 +       {0x0000989c, 0x00000000},
2951 +       {0x0000989c, 0x00000000},
2952 +       {0x0000989c, 0x00000000},
2953 +       {0x0000989c, 0x00000000},
2954 +       {0x0000989c, 0x00000000},
2955 +       {0x0000989c, 0x00000000},
2956 +       {0x0000989c, 0x00000010},
2957 +       {0x0000989c, 0x00000000},
2958 +       {0x0000989c, 0x00000000},
2959 +       {0x0000989c, 0x00000000},
2960 +       {0x0000989c, 0x00000000},
2961 +       {0x0000989c, 0x00000000},
2962 +       {0x0000989c, 0x00000000},
2963 +       {0x0000989c, 0x00000000},
2964 +       {0x0000989c, 0x00000000},
2965 +       {0x0000989c, 0x00000000},
2966 +       {0x0000989c, 0x00000000},
2967 +       {0x0000989c, 0x00000000},
2968 +       {0x0000989c, 0x00000000},
2969 +       {0x0000989c, 0x00000000},
2970 +       {0x0000989c, 0x000000c0},
2971 +       {0x0000989c, 0x00000015},
2972 +       {0x0000989c, 0x00000000},
2973 +       {0x0000989c, 0x00000000},
2974 +       {0x0000989c, 0x00000000},
2975 +       {0x0000989c, 0x00000000},
2976 +       {0x0000989c, 0x00000000},
2977 +       {0x0000989c, 0x00000000},
2978 +       {0x0000989c, 0x00000000},
2979 +       {0x0000989c, 0x00000000},
2980 +       {0x000098cc, 0x00000000},
2981 +};
2982 +
2983 +static const u32 ar5416Modes_9160[][6] = {
2984 +       {0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160,
2985 +        0x000001e0},
2986 +       {0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c,
2987 +        0x000001e0},
2988 +       {0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38,
2989 +        0x00001180},
2990 +       {0x000010f0, 0x0000a000, 0x00014000, 0x00016000, 0x0000b000,
2991 +        0x00014008},
2992 +       {0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00,
2993 +        0x06e006e0},
2994 +       {0x0000801c, 0x128d93a7, 0x128d93cf, 0x12e013d7, 0x12e013ab,
2995 +        0x098813cf},
2996 +       {0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300,
2997 +        0x00000303},
2998 +       {0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200,
2999 +        0x02020200},
3000 +       {0x00009824, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e,
3001 +        0x00000e0e},
3002 +       {0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001,
3003 +        0x0a020001},
3004 +       {0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e,
3005 +        0x00000e0e},
3006 +       {0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007,
3007 +        0x00000007},
3008 +       {0x00009844, 0x0372161e, 0x0372161e, 0x037216a0, 0x037216a0,
3009 +        0x037216a0},
3010 +       {0x00009848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68,
3011 +        0x00197a68},
3012 +       {0x0000a848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68,
3013 +        0x00197a68},
3014 +       {0x0000b848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68,
3015 +        0x00197a68},
3016 +       {0x00009850, 0x6c48b4e2, 0x6c48b4e2, 0x6c48b0e2, 0x6c48b0e2,
3017 +        0x6c48b0e2},
3018 +       {0x00009858, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e,
3019 +        0x7ec82d2e},
3020 +       {0x0000985c, 0x31395d5e, 0x31395d5e, 0x31395d5e, 0x31395d5e,
3021 +        0x31395d5e},
3022 +       {0x00009860, 0x00048d18, 0x00048d18, 0x00048d20, 0x00048d20,
3023 +        0x00048d18},
3024 +       {0x0000c864, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00,
3025 +        0x0001ce00},
3026 +       {0x00009868, 0x409a40d0, 0x409a40d0, 0x409a40d0, 0x409a40d0,
3027 +        0x409a40d0},
3028 +       {0x0000986c, 0x050cb081, 0x050cb081, 0x050cb081, 0x050cb081,
3029 +        0x050cb081},
3030 +       {0x00009914, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898,
3031 +        0x000007d0},
3032 +       {0x00009918, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b,
3033 +        0x00000016},
3034 +       {0x00009924, 0xd00a8a07, 0xd00a8a07, 0xd00a8a0d, 0xd00a8a0d,
3035 +        0xd00a8a0d},
3036 +       {0x00009944, 0xffb81020, 0xffb81020, 0xffb81020, 0xffb81020,
3037 +        0xffb81020},
3038 +       {0x00009960, 0x00009b40, 0x00009b40, 0x00009b40, 0x00009b40,
3039 +        0x00009b40},
3040 +       {0x0000a960, 0x00009b40, 0x00009b40, 0x00009b40, 0x00009b40,
3041 +        0x00009b40},
3042 +       {0x0000b960, 0x00009b40, 0x00009b40, 0x00009b40, 0x00009b40,
3043 +        0x00009b40},
3044 +       {0x00009964, 0x00001120, 0x00001120, 0x00001120, 0x00001120,
3045 +        0x00001120},
3046 +       {0x0000c968, 0x000003b5, 0x000003b5, 0x000003ce, 0x000003ce,
3047 +        0x000003ce},
3048 +       {0x0000c9bc, 0x001a0600, 0x001a0600, 0x001a0c00, 0x001a0c00,
3049 +        0x001a0c00},
3050 +       {0x000099c0, 0x038919be, 0x038919be, 0x038919be, 0x038919be,
3051 +        0x038919be},
3052 +       {0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77,
3053 +        0x06336f77},
3054 +       {0x000099c8, 0x60f65329, 0x60f65329, 0x60f65329, 0x60f65329,
3055 +        0x60f65329},
3056 +       {0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8,
3057 +        0x08f186c8},
3058 +       {0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384,
3059 +        0x00046384},
3060 +       {0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3061 +        0x00000000},
3062 +       {0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3063 +        0x00000000},
3064 +       {0x0000a204, 0x00000880, 0x00000880, 0x00000880, 0x00000880,
3065 +        0x00000880},
3066 +       {0x0000a208, 0xd6be4788, 0xd6be4788, 0xd03e4788, 0xd03e4788,
3067 +        0xd03e4788},
3068 +       {0x0000a20c, 0x002fc160, 0x002fc160, 0x002ac120, 0x002ac120,
3069 +        0x002ac120},
3070 +       {0x0000b20c, 0x002fc160, 0x002fc160, 0x002ac120, 0x002ac120,
3071 +        0x002ac120},
3072 +       {0x0000c20c, 0x002fc160, 0x002fc160, 0x002ac120, 0x002ac120,
3073 +        0x002ac120},
3074 +       {0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a,
3075 +        0x1883800a},
3076 +       {0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108,
3077 +        0x00000000},
3078 +       {0x0000a274, 0x0a1a9caa, 0x0a1a9caa, 0x0a1a7caa, 0x0a1a7caa,
3079 +        0x0a1a7caa},
3080 +       {0x0000a300, 0x18010000, 0x18010000, 0x18010000, 0x18010000,
3081 +        0x18010000},
3082 +       {0x0000a304, 0x30032602, 0x30032602, 0x2e032402, 0x2e032402,
3083 +        0x2e032402},
3084 +       {0x0000a308, 0x48073e06, 0x48073e06, 0x4a0a3c06, 0x4a0a3c06,
3085 +        0x4a0a3c06},
3086 +       {0x0000a30c, 0x560b4c0a, 0x560b4c0a, 0x621a540b, 0x621a540b,
3087 +        0x621a540b},
3088 +       {0x0000a310, 0x641a600f, 0x641a600f, 0x764f6c1b, 0x764f6c1b,
3089 +        0x764f6c1b},
3090 +       {0x0000a314, 0x7a4f6e1b, 0x7a4f6e1b, 0x845b7a5a, 0x845b7a5a,
3091 +        0x845b7a5a},
3092 +       {0x0000a318, 0x8c5b7e5a, 0x8c5b7e5a, 0x950f8ccf, 0x950f8ccf,
3093 +        0x950f8ccf},
3094 +       {0x0000a31c, 0x9d0f96cf, 0x9d0f96cf, 0xa5cf9b4f, 0xa5cf9b4f,
3095 +        0xa5cf9b4f},
3096 +       {0x0000a320, 0xb51fa69f, 0xb51fa69f, 0xbddfaf1f, 0xbddfaf1f,
3097 +        0xbddfaf1f},
3098 +       {0x0000a324, 0xcb3fbd07, 0xcb3fbcbf, 0xd1ffc93f, 0xd1ffc93f,
3099 +        0xd1ffc93f},
3100 +       {0x0000a328, 0x0000d7bf, 0x0000d7bf, 0x00000000, 0x00000000,
3101 +        0x00000000},
3102 +       {0x0000a32c, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3103 +        0x00000000},
3104 +       {0x0000a330, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3105 +        0x00000000},
3106 +       {0x0000a334, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3107 +        0x00000000},
3108 +};
3109 +
3110 +static const u32 ar5416Common_9160[][2] = {
3111 +       {0x0000000c, 0x00000000},
3112 +       {0x00000030, 0x00020015},
3113 +       {0x00000034, 0x00000005},
3114 +       {0x00000040, 0x00000000},
3115 +       {0x00000044, 0x00000008},
3116 +       {0x00000048, 0x00000008},
3117 +       {0x0000004c, 0x00000010},
3118 +       {0x00000050, 0x00000000},
3119 +       {0x00000054, 0x0000001f},
3120 +       {0x00000800, 0x00000000},
3121 +       {0x00000804, 0x00000000},
3122 +       {0x00000808, 0x00000000},
3123 +       {0x0000080c, 0x00000000},
3124 +       {0x00000810, 0x00000000},
3125 +       {0x00000814, 0x00000000},
3126 +       {0x00000818, 0x00000000},
3127 +       {0x0000081c, 0x00000000},
3128 +       {0x00000820, 0x00000000},
3129 +       {0x00000824, 0x00000000},
3130 +       {0x00001040, 0x002ffc0f},
3131 +       {0x00001044, 0x002ffc0f},
3132 +       {0x00001048, 0x002ffc0f},
3133 +       {0x0000104c, 0x002ffc0f},
3134 +       {0x00001050, 0x002ffc0f},
3135 +       {0x00001054, 0x002ffc0f},
3136 +       {0x00001058, 0x002ffc0f},
3137 +       {0x0000105c, 0x002ffc0f},
3138 +       {0x00001060, 0x002ffc0f},
3139 +       {0x00001064, 0x002ffc0f},
3140 +       {0x00001230, 0x00000000},
3141 +       {0x00001270, 0x00000000},
3142 +       {0x00001038, 0x00000000},
3143 +       {0x00001078, 0x00000000},
3144 +       {0x000010b8, 0x00000000},
3145 +       {0x000010f8, 0x00000000},
3146 +       {0x00001138, 0x00000000},
3147 +       {0x00001178, 0x00000000},
3148 +       {0x000011b8, 0x00000000},
3149 +       {0x000011f8, 0x00000000},
3150 +       {0x00001238, 0x00000000},
3151 +       {0x00001278, 0x00000000},
3152 +       {0x000012b8, 0x00000000},
3153 +       {0x000012f8, 0x00000000},
3154 +       {0x00001338, 0x00000000},
3155 +       {0x00001378, 0x00000000},
3156 +       {0x000013b8, 0x00000000},
3157 +       {0x000013f8, 0x00000000},
3158 +       {0x00001438, 0x00000000},
3159 +       {0x00001478, 0x00000000},
3160 +       {0x000014b8, 0x00000000},
3161 +       {0x000014f8, 0x00000000},
3162 +       {0x00001538, 0x00000000},
3163 +       {0x00001578, 0x00000000},
3164 +       {0x000015b8, 0x00000000},
3165 +       {0x000015f8, 0x00000000},
3166 +       {0x00001638, 0x00000000},
3167 +       {0x00001678, 0x00000000},
3168 +       {0x000016b8, 0x00000000},
3169 +       {0x000016f8, 0x00000000},
3170 +       {0x00001738, 0x00000000},
3171 +       {0x00001778, 0x00000000},
3172 +       {0x000017b8, 0x00000000},
3173 +       {0x000017f8, 0x00000000},
3174 +       {0x0000103c, 0x00000000},
3175 +       {0x0000107c, 0x00000000},
3176 +       {0x000010bc, 0x00000000},
3177 +       {0x000010fc, 0x00000000},
3178 +       {0x0000113c, 0x00000000},
3179 +       {0x0000117c, 0x00000000},
3180 +       {0x000011bc, 0x00000000},
3181 +       {0x000011fc, 0x00000000},
3182 +       {0x0000123c, 0x00000000},
3183 +       {0x0000127c, 0x00000000},
3184 +       {0x000012bc, 0x00000000},
3185 +       {0x000012fc, 0x00000000},
3186 +       {0x0000133c, 0x00000000},
3187 +       {0x0000137c, 0x00000000},
3188 +       {0x000013bc, 0x00000000},
3189 +       {0x000013fc, 0x00000000},
3190 +       {0x0000143c, 0x00000000},
3191 +       {0x0000147c, 0x00000000},
3192 +       {0x00004030, 0x00000002},
3193 +       {0x0000403c, 0x00000002},
3194 +       {0x00007010, 0x00000020},
3195 +       {0x00007038, 0x000004c2},
3196 +       {0x00008004, 0x00000000},
3197 +       {0x00008008, 0x00000000},
3198 +       {0x0000800c, 0x00000000},
3199 +       {0x00008018, 0x00000700},
3200 +       {0x00008020, 0x00000000},
3201 +       {0x00008038, 0x00000000},
3202 +       {0x0000803c, 0x00000000},
3203 +       {0x00008048, 0x40000000},
3204 +       {0x00008054, 0x00000000},
3205 +       {0x00008058, 0x00000000},
3206 +       {0x0000805c, 0x000fc78f},
3207 +       {0x00008060, 0x0000000f},
3208 +       {0x00008064, 0x00000000},
3209 +       {0x000080c0, 0x2a82301a},
3210 +       {0x000080c4, 0x05dc01e0},
3211 +       {0x000080c8, 0x1f402710},
3212 +       {0x000080cc, 0x01f40000},
3213 +       {0x000080d0, 0x00001e00},
3214 +       {0x000080d4, 0x00000000},
3215 +       {0x000080d8, 0x00400000},
3216 +       {0x000080e0, 0xffffffff},
3217 +       {0x000080e4, 0x0000ffff},
3218 +       {0x000080e8, 0x003f3f3f},
3219 +       {0x000080ec, 0x00000000},
3220 +       {0x000080f0, 0x00000000},
3221 +       {0x000080f4, 0x00000000},
3222 +       {0x000080f8, 0x00000000},
3223 +       {0x000080fc, 0x00020000},
3224 +       {0x00008100, 0x00020000},
3225 +       {0x00008104, 0x00000001},
3226 +       {0x00008108, 0x00000052},
3227 +       {0x0000810c, 0x00000000},
3228 +       {0x00008110, 0x00000168},
3229 +       {0x00008118, 0x000100aa},
3230 +       {0x0000811c, 0x00003210},
3231 +       {0x00008120, 0x08f04800},
3232 +       {0x00008124, 0x00000000},
3233 +       {0x00008128, 0x00000000},
3234 +       {0x0000812c, 0x00000000},
3235 +       {0x00008130, 0x00000000},
3236 +       {0x00008134, 0x00000000},
3237 +       {0x00008138, 0x00000000},
3238 +       {0x0000813c, 0x00000000},
3239 +       {0x00008144, 0xffffffff},
3240 +       {0x00008168, 0x00000000},
3241 +       {0x0000816c, 0x00000000},
3242 +       {0x00008170, 0x32143320},
3243 +       {0x00008174, 0xfaa4fa50},
3244 +       {0x00008178, 0x00000100},
3245 +       {0x0000817c, 0x00000000},
3246 +       {0x000081c4, 0x00000000},
3247 +       {0x000081d0, 0x00003210},
3248 +       {0x000081ec, 0x00000000},
3249 +       {0x000081f0, 0x00000000},
3250 +       {0x000081f4, 0x00000000},
3251 +       {0x000081f8, 0x00000000},
3252 +       {0x000081fc, 0x00000000},
3253 +       {0x00008200, 0x00000000},
3254 +       {0x00008204, 0x00000000},
3255 +       {0x00008208, 0x00000000},
3256 +       {0x0000820c, 0x00000000},
3257 +       {0x00008210, 0x00000000},
3258 +       {0x00008214, 0x00000000},
3259 +       {0x00008218, 0x00000000},
3260 +       {0x0000821c, 0x00000000},
3261 +       {0x00008220, 0x00000000},
3262 +       {0x00008224, 0x00000000},
3263 +       {0x00008228, 0x00000000},
3264 +       {0x0000822c, 0x00000000},
3265 +       {0x00008230, 0x00000000},
3266 +       {0x00008234, 0x00000000},
3267 +       {0x00008238, 0x00000000},
3268 +       {0x0000823c, 0x00000000},
3269 +       {0x00008240, 0x00100000},
3270 +       {0x00008244, 0x0010f400},
3271 +       {0x00008248, 0x00000100},
3272 +       {0x0000824c, 0x0001e800},
3273 +       {0x00008250, 0x00000000},
3274 +       {0x00008254, 0x00000000},
3275 +       {0x00008258, 0x00000000},
3276 +       {0x0000825c, 0x400000ff},
3277 +       {0x00008260, 0x00080922},
3278 +       {0x00008270, 0x00000000},
3279 +       {0x00008274, 0x40000000},
3280 +       {0x00008278, 0x003e4180},
3281 +       {0x0000827c, 0x00000000},
3282 +       {0x00008284, 0x0000002c},
3283 +       {0x00008288, 0x0000002c},
3284 +       {0x0000828c, 0x00000000},
3285 +       {0x00008294, 0x00000000},
3286 +       {0x00008298, 0x00000000},
3287 +       {0x00008300, 0x00000000},
3288 +       {0x00008304, 0x00000000},
3289 +       {0x00008308, 0x00000000},
3290 +       {0x0000830c, 0x00000000},
3291 +       {0x00008310, 0x00000000},
3292 +       {0x00008314, 0x00000000},
3293 +       {0x00008318, 0x00000000},
3294 +       {0x00008328, 0x00000000},
3295 +       {0x0000832c, 0x00000007},
3296 +       {0x00008330, 0x00000302},
3297 +       {0x00008334, 0x00000e00},
3298 +       {0x00008338, 0x00ff0000},
3299 +       {0x0000833c, 0x00000000},
3300 +       {0x00008340, 0x000107ff},
3301 +       {0x00009808, 0x00000000},
3302 +       {0x0000980c, 0xad848e19},
3303 +       {0x00009810, 0x7d14e000},
3304 +       {0x00009814, 0x9c0a9f6b},
3305 +       {0x0000981c, 0x00000000},
3306 +       {0x0000982c, 0x0000a000},
3307 +       {0x00009830, 0x00000000},
3308 +       {0x0000983c, 0x00200400},
3309 +       {0x00009840, 0x206a01ae},
3310 +       {0x0000984c, 0x1284233c},
3311 +       {0x00009854, 0x00000859},
3312 +       {0x00009900, 0x00000000},
3313 +       {0x00009904, 0x00000000},
3314 +       {0x00009908, 0x00000000},
3315 +       {0x0000990c, 0x00000000},
3316 +       {0x0000991c, 0x10000fff},
3317 +       {0x00009920, 0x05100000},
3318 +       {0x0000a920, 0x05100000},
3319 +       {0x0000b920, 0x05100000},
3320 +       {0x00009928, 0x00000001},
3321 +       {0x0000992c, 0x00000004},
3322 +       {0x00009934, 0x1e1f2022},
3323 +       {0x00009938, 0x0a0b0c0d},
3324 +       {0x0000993c, 0x00000000},
3325 +       {0x00009948, 0x9280b212},
3326 +       {0x0000994c, 0x00020028},
3327 +       {0x00009954, 0x5f3ca3de},
3328 +       {0x00009958, 0x2108ecff},
3329 +       {0x00009940, 0x00750604},
3330 +       {0x0000c95c, 0x004b6a8e},
3331 +       {0x00009970, 0x190fb515},
3332 +       {0x00009974, 0x00000000},
3333 +       {0x00009978, 0x00000001},
3334 +       {0x0000997c, 0x00000000},
3335 +       {0x00009980, 0x00000000},
3336 +       {0x00009984, 0x00000000},
3337 +       {0x00009988, 0x00000000},
3338 +       {0x0000998c, 0x00000000},
3339 +       {0x00009990, 0x00000000},
3340 +       {0x00009994, 0x00000000},
3341 +       {0x00009998, 0x00000000},
3342 +       {0x0000999c, 0x00000000},
3343 +       {0x000099a0, 0x00000000},
3344 +       {0x000099a4, 0x00000001},
3345 +       {0x000099a8, 0x201fff00},
3346 +       {0x000099ac, 0x006f0000},
3347 +       {0x000099b0, 0x03051000},
3348 +       {0x000099dc, 0x00000000},
3349 +       {0x000099e0, 0x00000200},
3350 +       {0x000099e4, 0xaaaaaaaa},
3351 +       {0x000099e8, 0x3c466478},
3352 +       {0x000099ec, 0x0cc80caa},
3353 +       {0x000099fc, 0x00001042},
3354 +       {0x00009b00, 0x00000000},
3355 +       {0x00009b04, 0x00000001},
3356 +       {0x00009b08, 0x00000002},
3357 +       {0x00009b0c, 0x00000003},
3358 +       {0x00009b10, 0x00000004},
3359 +       {0x00009b14, 0x00000005},
3360 +       {0x00009b18, 0x00000008},
3361 +       {0x00009b1c, 0x00000009},
3362 +       {0x00009b20, 0x0000000a},
3363 +       {0x00009b24, 0x0000000b},
3364 +       {0x00009b28, 0x0000000c},
3365 +       {0x00009b2c, 0x0000000d},
3366 +       {0x00009b30, 0x00000010},
3367 +       {0x00009b34, 0x00000011},
3368 +       {0x00009b38, 0x00000012},
3369 +       {0x00009b3c, 0x00000013},
3370 +       {0x00009b40, 0x00000014},
3371 +       {0x00009b44, 0x00000015},
3372 +       {0x00009b48, 0x00000018},
3373 +       {0x00009b4c, 0x00000019},
3374 +       {0x00009b50, 0x0000001a},
3375 +       {0x00009b54, 0x0000001b},
3376 +       {0x00009b58, 0x0000001c},
3377 +       {0x00009b5c, 0x0000001d},
3378 +       {0x00009b60, 0x00000020},
3379 +       {0x00009b64, 0x00000021},
3380 +       {0x00009b68, 0x00000022},
3381 +       {0x00009b6c, 0x00000023},
3382 +       {0x00009b70, 0x00000024},
3383 +       {0x00009b74, 0x00000025},
3384 +       {0x00009b78, 0x00000028},
3385 +       {0x00009b7c, 0x00000029},
3386 +       {0x00009b80, 0x0000002a},
3387 +       {0x00009b84, 0x0000002b},
3388 +       {0x00009b88, 0x0000002c},
3389 +       {0x00009b8c, 0x0000002d},
3390 +       {0x00009b90, 0x00000030},
3391 +       {0x00009b94, 0x00000031},
3392 +       {0x00009b98, 0x00000032},
3393 +       {0x00009b9c, 0x00000033},
3394 +       {0x00009ba0, 0x00000034},
3395 +       {0x00009ba4, 0x00000035},
3396 +       {0x00009ba8, 0x00000035},
3397 +       {0x00009bac, 0x00000035},
3398 +       {0x00009bb0, 0x00000035},
3399 +       {0x00009bb4, 0x00000035},
3400 +       {0x00009bb8, 0x00000035},
3401 +       {0x00009bbc, 0x00000035},
3402 +       {0x00009bc0, 0x00000035},
3403 +       {0x00009bc4, 0x00000035},
3404 +       {0x00009bc8, 0x00000035},
3405 +       {0x00009bcc, 0x00000035},
3406 +       {0x00009bd0, 0x00000035},
3407 +       {0x00009bd4, 0x00000035},
3408 +       {0x00009bd8, 0x00000035},
3409 +       {0x00009bdc, 0x00000035},
3410 +       {0x00009be0, 0x00000035},
3411 +       {0x00009be4, 0x00000035},
3412 +       {0x00009be8, 0x00000035},
3413 +       {0x00009bec, 0x00000035},
3414 +       {0x00009bf0, 0x00000035},
3415 +       {0x00009bf4, 0x00000035},
3416 +       {0x00009bf8, 0x00000010},
3417 +       {0x00009bfc, 0x0000001a},
3418 +       {0x0000a210, 0x40806333},
3419 +       {0x0000a214, 0x00106c10},
3420 +       {0x0000a218, 0x009c4060},
3421 +       {0x0000a220, 0x018830c6},
3422 +       {0x0000a224, 0x00000400},
3423 +       {0x0000a228, 0x001a0bb5},
3424 +       {0x0000a22c, 0x00000000},
3425 +       {0x0000a234, 0x20202020},
3426 +       {0x0000a238, 0x20202020},
3427 +       {0x0000a23c, 0x13c889af},
3428 +       {0x0000a240, 0x38490a20},
3429 +       {0x0000a244, 0x00007bb6},
3430 +       {0x0000a248, 0x0fff3ffc},
3431 +       {0x0000a24c, 0x00000001},
3432 +       {0x0000a250, 0x0000e000},
3433 +       {0x0000a254, 0x00000000},
3434 +       {0x0000a258, 0x0cc75380},
3435 +       {0x0000a25c, 0x0f0f0f01},
3436 +       {0x0000a260, 0xdfa91f01},
3437 +       {0x0000a268, 0x00000001},
3438 +       {0x0000a26c, 0x0ebae9c6},
3439 +       {0x0000b26c, 0x0ebae9c6},
3440 +       {0x0000c26c, 0x0ebae9c6},
3441 +       {0x0000d270, 0x00820820},
3442 +       {0x0000a278, 0x1ce739ce},
3443 +       {0x0000a27c, 0x050701ce},
3444 +       {0x0000a338, 0x00000000},
3445 +       {0x0000a33c, 0x00000000},
3446 +       {0x0000a340, 0x00000000},
3447 +       {0x0000a344, 0x00000000},
3448 +       {0x0000a348, 0x3fffffff},
3449 +       {0x0000a34c, 0x3fffffff},
3450 +       {0x0000a350, 0x3fffffff},
3451 +       {0x0000a354, 0x0003ffff},
3452 +       {0x0000a358, 0x79bfaa03},
3453 +       {0x0000d35c, 0x07ffffef},
3454 +       {0x0000d360, 0x0fffffe7},
3455 +       {0x0000d364, 0x17ffffe5},
3456 +       {0x0000d368, 0x1fffffe4},
3457 +       {0x0000d36c, 0x37ffffe3},
3458 +       {0x0000d370, 0x3fffffe3},
3459 +       {0x0000d374, 0x57ffffe3},
3460 +       {0x0000d378, 0x5fffffe2},
3461 +       {0x0000d37c, 0x7fffffe2},
3462 +       {0x0000d380, 0x7f3c7bba},
3463 +       {0x0000d384, 0xf3307ff0},
3464 +       {0x0000a388, 0x0c000000},
3465 +       {0x0000a38c, 0x20202020},
3466 +       {0x0000a390, 0x20202020},
3467 +       {0x0000a394, 0x1ce739ce},
3468 +       {0x0000a398, 0x000001ce},
3469 +       {0x0000a39c, 0x00000001},
3470 +       {0x0000a3a0, 0x00000000},
3471 +       {0x0000a3a4, 0x00000000},
3472 +       {0x0000a3a8, 0x00000000},
3473 +       {0x0000a3ac, 0x00000000},
3474 +       {0x0000a3b0, 0x00000000},
3475 +       {0x0000a3b4, 0x00000000},
3476 +       {0x0000a3b8, 0x00000000},
3477 +       {0x0000a3bc, 0x00000000},
3478 +       {0x0000a3c0, 0x00000000},
3479 +       {0x0000a3c4, 0x00000000},
3480 +       {0x0000a3c8, 0x00000246},
3481 +       {0x0000a3cc, 0x20202020},
3482 +       {0x0000a3d0, 0x20202020},
3483 +       {0x0000a3d4, 0x20202020},
3484 +       {0x0000a3dc, 0x1ce739ce},
3485 +       {0x0000a3e0, 0x000001ce},
3486 +};
3487 +
3488 +static const u32 ar5416Bank0_9160[][2] = {
3489 +       {0x000098b0, 0x1e5795e5},
3490 +       {0x000098e0, 0x02008020},
3491 +};
3492 +
3493 +static const u32 ar5416BB_RfGain_9160[][3] = {
3494 +       {0x00009a00, 0x00000000, 0x00000000},
3495 +       {0x00009a04, 0x00000040, 0x00000040},
3496 +       {0x00009a08, 0x00000080, 0x00000080},
3497 +       {0x00009a0c, 0x000001a1, 0x00000141},
3498 +       {0x00009a10, 0x000001e1, 0x00000181},
3499 +       {0x00009a14, 0x00000021, 0x000001c1},
3500 +       {0x00009a18, 0x00000061, 0x00000001},
3501 +       {0x00009a1c, 0x00000168, 0x00000041},
3502 +       {0x00009a20, 0x000001a8, 0x000001a8},
3503 +       {0x00009a24, 0x000001e8, 0x000001e8},
3504 +       {0x00009a28, 0x00000028, 0x00000028},
3505 +       {0x00009a2c, 0x00000068, 0x00000068},
3506 +       {0x00009a30, 0x00000189, 0x000000a8},
3507 +       {0x00009a34, 0x000001c9, 0x00000169},
3508 +       {0x00009a38, 0x00000009, 0x000001a9},
3509 +       {0x00009a3c, 0x00000049, 0x000001e9},
3510 +       {0x00009a40, 0x00000089, 0x00000029},
3511 +       {0x00009a44, 0x00000170, 0x00000069},
3512 +       {0x00009a48, 0x000001b0, 0x00000190},
3513 +       {0x00009a4c, 0x000001f0, 0x000001d0},
3514 +       {0x00009a50, 0x00000030, 0x00000010},
3515 +       {0x00009a54, 0x00000070, 0x00000050},
3516 +       {0x00009a58, 0x00000191, 0x00000090},
3517 +       {0x00009a5c, 0x000001d1, 0x00000151},
3518 +       {0x00009a60, 0x00000011, 0x00000191},
3519 +       {0x00009a64, 0x00000051, 0x000001d1},
3520 +       {0x00009a68, 0x00000091, 0x00000011},
3521 +       {0x00009a6c, 0x000001b8, 0x00000051},
3522 +       {0x00009a70, 0x000001f8, 0x00000198},
3523 +       {0x00009a74, 0x00000038, 0x000001d8},
3524 +       {0x00009a78, 0x00000078, 0x00000018},
3525 +       {0x00009a7c, 0x00000199, 0x00000058},
3526 +       {0x00009a80, 0x000001d9, 0x00000098},
3527 +       {0x00009a84, 0x00000019, 0x00000159},
3528 +       {0x00009a88, 0x00000059, 0x00000199},
3529 +       {0x00009a8c, 0x00000099, 0x000001d9},
3530 +       {0x00009a90, 0x000000d9, 0x00000019},
3531 +       {0x00009a94, 0x000000f9, 0x00000059},
3532 +       {0x00009a98, 0x000000f9, 0x00000099},
3533 +       {0x00009a9c, 0x000000f9, 0x000000d9},
3534 +       {0x00009aa0, 0x000000f9, 0x000000f9},
3535 +       {0x00009aa4, 0x000000f9, 0x000000f9},
3536 +       {0x00009aa8, 0x000000f9, 0x000000f9},
3537 +       {0x00009aac, 0x000000f9, 0x000000f9},
3538 +       {0x00009ab0, 0x000000f9, 0x000000f9},
3539 +       {0x00009ab4, 0x000000f9, 0x000000f9},
3540 +       {0x00009ab8, 0x000000f9, 0x000000f9},
3541 +       {0x00009abc, 0x000000f9, 0x000000f9},
3542 +       {0x00009ac0, 0x000000f9, 0x000000f9},
3543 +       {0x00009ac4, 0x000000f9, 0x000000f9},
3544 +       {0x00009ac8, 0x000000f9, 0x000000f9},
3545 +       {0x00009acc, 0x000000f9, 0x000000f9},
3546 +       {0x00009ad0, 0x000000f9, 0x000000f9},
3547 +       {0x00009ad4, 0x000000f9, 0x000000f9},
3548 +       {0x00009ad8, 0x000000f9, 0x000000f9},
3549 +       {0x00009adc, 0x000000f9, 0x000000f9},
3550 +       {0x00009ae0, 0x000000f9, 0x000000f9},
3551 +       {0x00009ae4, 0x000000f9, 0x000000f9},
3552 +       {0x00009ae8, 0x000000f9, 0x000000f9},
3553 +       {0x00009aec, 0x000000f9, 0x000000f9},
3554 +       {0x00009af0, 0x000000f9, 0x000000f9},
3555 +       {0x00009af4, 0x000000f9, 0x000000f9},
3556 +       {0x00009af8, 0x000000f9, 0x000000f9},
3557 +       {0x00009afc, 0x000000f9, 0x000000f9},
3558 +};
3559 +
3560 +static const u32 ar5416Bank1_9160[][2] = {
3561 +       {0x000098b0, 0x02108421},
3562 +       {0x000098ec, 0x00000008},
3563 +};
3564 +
3565 +static const u32 ar5416Bank2_9160[][2] = {
3566 +       {0x000098b0, 0x0e73ff17},
3567 +       {0x000098e0, 0x00000420},
3568 +};
3569 +
3570 +static const u32 ar5416Bank3_9160[][3] = {
3571 +       {0x000098f0, 0x01400018, 0x01c00018},
3572 +};
3573 +
3574 +static const u32 ar5416Bank6_9160[][3] = {
3575 +       {0x0000989c, 0x00000000, 0x00000000},
3576 +       {0x0000989c, 0x00000000, 0x00000000},
3577 +       {0x0000989c, 0x00000000, 0x00000000},
3578 +       {0x0000989c, 0x00e00000, 0x00e00000},
3579 +       {0x0000989c, 0x005e0000, 0x005e0000},
3580 +       {0x0000989c, 0x00120000, 0x00120000},
3581 +       {0x0000989c, 0x00620000, 0x00620000},
3582 +       {0x0000989c, 0x00020000, 0x00020000},
3583 +       {0x0000989c, 0x00ff0000, 0x00ff0000},
3584 +       {0x0000989c, 0x00ff0000, 0x00ff0000},
3585 +       {0x0000989c, 0x00ff0000, 0x00ff0000},
3586 +       {0x0000989c, 0x40ff0000, 0x40ff0000},
3587 +       {0x0000989c, 0x005f0000, 0x005f0000},
3588 +       {0x0000989c, 0x00870000, 0x00870000},
3589 +       {0x0000989c, 0x00f90000, 0x00f90000},
3590 +       {0x0000989c, 0x007b0000, 0x007b0000},
3591 +       {0x0000989c, 0x00ff0000, 0x00ff0000},
3592 +       {0x0000989c, 0x00f50000, 0x00f50000},
3593 +       {0x0000989c, 0x00dc0000, 0x00dc0000},
3594 +       {0x0000989c, 0x00110000, 0x00110000},
3595 +       {0x0000989c, 0x006100a8, 0x006100a8},
3596 +       {0x0000989c, 0x004210a2, 0x004210a2},
3597 +       {0x0000989c, 0x0014008f, 0x0014008f},
3598 +       {0x0000989c, 0x00c40003, 0x00c40003},
3599 +       {0x0000989c, 0x003000f2, 0x003000f2},
3600 +       {0x0000989c, 0x00440016, 0x00440016},
3601 +       {0x0000989c, 0x00410040, 0x00410040},
3602 +       {0x0000989c, 0x0001805e, 0x0001805e},
3603 +       {0x0000989c, 0x0000c0ab, 0x0000c0ab},
3604 +       {0x0000989c, 0x000000f1, 0x000000f1},
3605 +       {0x0000989c, 0x00002081, 0x00002081},
3606 +       {0x0000989c, 0x000000d4, 0x000000d4},
3607 +       {0x000098d0, 0x0000000f, 0x0010000f},
3608 +};
3609 +
3610 +static const u32 ar5416Bank6TPC_9160[][3] = {
3611 +       {0x0000989c, 0x00000000, 0x00000000},
3612 +       {0x0000989c, 0x00000000, 0x00000000},
3613 +       {0x0000989c, 0x00000000, 0x00000000},
3614 +       {0x0000989c, 0x00e00000, 0x00e00000},
3615 +       {0x0000989c, 0x005e0000, 0x005e0000},
3616 +       {0x0000989c, 0x00120000, 0x00120000},
3617 +       {0x0000989c, 0x00620000, 0x00620000},
3618 +       {0x0000989c, 0x00020000, 0x00020000},
3619 +       {0x0000989c, 0x00ff0000, 0x00ff0000},
3620 +       {0x0000989c, 0x00ff0000, 0x00ff0000},
3621 +       {0x0000989c, 0x00ff0000, 0x00ff0000},
3622 +       {0x0000989c, 0x40ff0000, 0x40ff0000},
3623 +       {0x0000989c, 0x005f0000, 0x005f0000},
3624 +       {0x0000989c, 0x00870000, 0x00870000},
3625 +       {0x0000989c, 0x00f90000, 0x00f90000},
3626 +       {0x0000989c, 0x007b0000, 0x007b0000},
3627 +       {0x0000989c, 0x00ff0000, 0x00ff0000},
3628 +       {0x0000989c, 0x00f50000, 0x00f50000},
3629 +       {0x0000989c, 0x00dc0000, 0x00dc0000},
3630 +       {0x0000989c, 0x00110000, 0x00110000},
3631 +       {0x0000989c, 0x006100a8, 0x006100a8},
3632 +       {0x0000989c, 0x00423022, 0x00423022},
3633 +       {0x0000989c, 0x2014008f, 0x2014008f},
3634 +       {0x0000989c, 0x00c40002, 0x00c40002},
3635 +       {0x0000989c, 0x003000f2, 0x003000f2},
3636 +       {0x0000989c, 0x00440016, 0x00440016},
3637 +       {0x0000989c, 0x00410040, 0x00410040},
3638 +       {0x0000989c, 0x0001805e, 0x0001805e},
3639 +       {0x0000989c, 0x0000c0ab, 0x0000c0ab},
3640 +       {0x0000989c, 0x000000e1, 0x000000e1},
3641 +       {0x0000989c, 0x00007080, 0x00007080},
3642 +       {0x0000989c, 0x000000d4, 0x000000d4},
3643 +       {0x000098d0, 0x0000000f, 0x0010000f},
3644 +};
3645 +
3646 +static const u32 ar5416Bank7_9160[][2] = {
3647 +       {0x0000989c, 0x00000500},
3648 +       {0x0000989c, 0x00000800},
3649 +       {0x000098cc, 0x0000000e},
3650 +};
3651 +
3652 +static u32 ar5416Addac_9160[][2] = {
3653 +       {0x0000989c, 0x00000000},
3654 +       {0x0000989c, 0x00000000},
3655 +       {0x0000989c, 0x00000000},
3656 +       {0x0000989c, 0x00000000},
3657 +       {0x0000989c, 0x00000000},
3658 +       {0x0000989c, 0x00000000},
3659 +       {0x0000989c, 0x000000c0},
3660 +       {0x0000989c, 0x00000018},
3661 +       {0x0000989c, 0x00000004},
3662 +       {0x0000989c, 0x00000000},
3663 +       {0x0000989c, 0x00000000},
3664 +       {0x0000989c, 0x00000000},
3665 +       {0x0000989c, 0x00000000},
3666 +       {0x0000989c, 0x00000000},
3667 +       {0x0000989c, 0x00000000},
3668 +       {0x0000989c, 0x00000000},
3669 +       {0x0000989c, 0x00000000},
3670 +       {0x0000989c, 0x00000000},
3671 +       {0x0000989c, 0x00000000},
3672 +       {0x0000989c, 0x00000000},
3673 +       {0x0000989c, 0x00000000},
3674 +       {0x0000989c, 0x000000c0},
3675 +       {0x0000989c, 0x00000019},
3676 +       {0x0000989c, 0x00000004},
3677 +       {0x0000989c, 0x00000000},
3678 +       {0x0000989c, 0x00000000},
3679 +       {0x0000989c, 0x00000000},
3680 +       {0x0000989c, 0x00000004},
3681 +       {0x0000989c, 0x00000003},
3682 +       {0x0000989c, 0x00000008},
3683 +       {0x0000989c, 0x00000000},
3684 +       {0x000098cc, 0x00000000},
3685 +};
3686 +
3687 +static u32 ar5416Addac_91601_1[][2] = {
3688 +       {0x0000989c, 0x00000000},
3689 +       {0x0000989c, 0x00000000},
3690 +       {0x0000989c, 0x00000000},
3691 +       {0x0000989c, 0x00000000},
3692 +       {0x0000989c, 0x00000000},
3693 +       {0x0000989c, 0x00000000},
3694 +       {0x0000989c, 0x000000c0},
3695 +       {0x0000989c, 0x00000018},
3696 +       {0x0000989c, 0x00000004},
3697 +       {0x0000989c, 0x00000000},
3698 +       {0x0000989c, 0x00000000},
3699 +       {0x0000989c, 0x00000000},
3700 +       {0x0000989c, 0x00000000},
3701 +       {0x0000989c, 0x00000000},
3702 +       {0x0000989c, 0x00000000},
3703 +       {0x0000989c, 0x00000000},
3704 +       {0x0000989c, 0x00000000},
3705 +       {0x0000989c, 0x00000000},
3706 +       {0x0000989c, 0x00000000},
3707 +       {0x0000989c, 0x00000000},
3708 +       {0x0000989c, 0x00000000},
3709 +       {0x0000989c, 0x000000c0},
3710 +       {0x0000989c, 0x00000019},
3711 +       {0x0000989c, 0x00000004},
3712 +       {0x0000989c, 0x00000000},
3713 +       {0x0000989c, 0x00000000},
3714 +       {0x0000989c, 0x00000000},
3715 +       {0x0000989c, 0x00000000},
3716 +       {0x0000989c, 0x00000000},
3717 +       {0x0000989c, 0x00000000},
3718 +       {0x0000989c, 0x00000000},
3719 +       {0x000098cc, 0x00000000},
3720 +};
3721 diff --git a/drivers/net/wireless/ath/ath9k/ar9002_calib.c b/drivers/net/wireless/ath/ath9k/ar9002_calib.c
3722 new file mode 100644
3723 index 0000000..4237269
3724 --- /dev/null
3725 +++ b/drivers/net/wireless/ath/ath9k/ar9002_calib.c
3726 @@ -0,0 +1,988 @@
3727 +/*
3728 + * Copyright (c) 2008-2010 Atheros Communications Inc.
3729 + *
3730 + * Permission to use, copy, modify, and/or distribute this software for any
3731 + * purpose with or without fee is hereby granted, provided that the above
3732 + * copyright notice and this permission notice appear in all copies.
3733 + *
3734 + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
3735 + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
3736 + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
3737 + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
3738 + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
3739 + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
3740 + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
3741 + */
3742 +
3743 +#include "hw.h"
3744 +#include "hw-ops.h"
3745 +#include "ar9002_phy.h"
3746 +
3747 +#define AR9285_CLCAL_REDO_THRESH    1
3748 +
3749 +static void ar9002_hw_setup_calibration(struct ath_hw *ah,
3750 +                                       struct ath9k_cal_list *currCal)
3751 +{
3752 +       struct ath_common *common = ath9k_hw_common(ah);
3753 +
3754 +       REG_RMW_FIELD(ah, AR_PHY_TIMING_CTRL4(0),
3755 +                     AR_PHY_TIMING_CTRL4_IQCAL_LOG_COUNT_MAX,
3756 +                     currCal->calData->calCountMax);
3757 +
3758 +       switch (currCal->calData->calType) {
3759 +       case IQ_MISMATCH_CAL:
3760 +               REG_WRITE(ah, AR_PHY_CALMODE, AR_PHY_CALMODE_IQ);
3761 +               ath_print(common, ATH_DBG_CALIBRATE,
3762 +                         "starting IQ Mismatch Calibration\n");
3763 +               break;
3764 +       case ADC_GAIN_CAL:
3765 +               REG_WRITE(ah, AR_PHY_CALMODE, AR_PHY_CALMODE_ADC_GAIN);
3766 +               ath_print(common, ATH_DBG_CALIBRATE,
3767 +                         "starting ADC Gain Calibration\n");
3768 +               break;
3769 +       case ADC_DC_CAL:
3770 +               REG_WRITE(ah, AR_PHY_CALMODE, AR_PHY_CALMODE_ADC_DC_PER);
3771 +               ath_print(common, ATH_DBG_CALIBRATE,
3772 +                         "starting ADC DC Calibration\n");
3773 +               break;
3774 +       case ADC_DC_INIT_CAL:
3775 +               REG_WRITE(ah, AR_PHY_CALMODE, AR_PHY_CALMODE_ADC_DC_INIT);
3776 +               ath_print(common, ATH_DBG_CALIBRATE,
3777 +                         "starting Init ADC DC Calibration\n");
3778 +               break;
3779 +       case TEMP_COMP_CAL:
3780 +               break; /* Not supported */
3781 +       }
3782 +
3783 +       REG_SET_BIT(ah, AR_PHY_TIMING_CTRL4(0),
3784 +                   AR_PHY_TIMING_CTRL4_DO_CAL);
3785 +}
3786 +
3787 +static bool ar9002_hw_per_calibration(struct ath_hw *ah,
3788 +                                     struct ath9k_channel *ichan,
3789 +                                     u8 rxchainmask,
3790 +                                     struct ath9k_cal_list *currCal)
3791 +{
3792 +       bool iscaldone = false;
3793 +
3794 +       if (currCal->calState == CAL_RUNNING) {
3795 +               if (!(REG_READ(ah, AR_PHY_TIMING_CTRL4(0)) &
3796 +                     AR_PHY_TIMING_CTRL4_DO_CAL)) {
3797 +
3798 +                       currCal->calData->calCollect(ah);
3799 +                       ah->cal_samples++;
3800 +
3801 +                       if (ah->cal_samples >= currCal->calData->calNumSamples) {
3802 +                               int i, numChains = 0;
3803 +                               for (i = 0; i < AR5416_MAX_CHAINS; i++) {
3804 +                                       if (rxchainmask & (1 << i))
3805 +                                               numChains++;
3806 +                               }
3807 +
3808 +                               currCal->calData->calPostProc(ah, numChains);
3809 +                               ichan->CalValid |= currCal->calData->calType;
3810 +                               currCal->calState = CAL_DONE;
3811 +                               iscaldone = true;
3812 +                       } else {
3813 +                               ar9002_hw_setup_calibration(ah, currCal);
3814 +                       }
3815 +               }
3816 +       } else if (!(ichan->CalValid & currCal->calData->calType)) {
3817 +               ath9k_hw_reset_calibration(ah, currCal);
3818 +       }
3819 +
3820 +       return iscaldone;
3821 +}
3822 +
3823 +/* Assumes you are talking about the currently configured channel */
3824 +static bool ar9002_hw_iscal_supported(struct ath_hw *ah,
3825 +                                     enum ath9k_cal_types calType)
3826 +{
3827 +       struct ieee80211_conf *conf = &ath9k_hw_common(ah)->hw->conf;
3828 +
3829 +       switch (calType & ah->supp_cals) {
3830 +       case IQ_MISMATCH_CAL: /* Both 2 GHz and 5 GHz support OFDM */
3831 +               return true;
3832 +       case ADC_GAIN_CAL:
3833 +       case ADC_DC_CAL:
3834 +               if (!(conf->channel->band == IEEE80211_BAND_2GHZ &&
3835 +                     conf_is_ht20(conf)))
3836 +                       return true;
3837 +               break;
3838 +       }
3839 +       return false;
3840 +}
3841 +
3842 +static void ar9002_hw_iqcal_collect(struct ath_hw *ah)
3843 +{
3844 +       int i;
3845 +
3846 +       for (i = 0; i < AR5416_MAX_CHAINS; i++) {
3847 +               ah->totalPowerMeasI[i] +=
3848 +                       REG_READ(ah, AR_PHY_CAL_MEAS_0(i));
3849 +               ah->totalPowerMeasQ[i] +=
3850 +                       REG_READ(ah, AR_PHY_CAL_MEAS_1(i));
3851 +               ah->totalIqCorrMeas[i] +=
3852 +                       (int32_t) REG_READ(ah, AR_PHY_CAL_MEAS_2(i));
3853 +               ath_print(ath9k_hw_common(ah), ATH_DBG_CALIBRATE,
3854 +                         "%d: Chn %d pmi=0x%08x;pmq=0x%08x;iqcm=0x%08x;\n",
3855 +                         ah->cal_samples, i, ah->totalPowerMeasI[i],
3856 +                         ah->totalPowerMeasQ[i],
3857 +                         ah->totalIqCorrMeas[i]);
3858 +       }
3859 +}
3860 +
3861 +static void ar9002_hw_adc_gaincal_collect(struct ath_hw *ah)
3862 +{
3863 +       int i;
3864 +
3865 +       for (i = 0; i < AR5416_MAX_CHAINS; i++) {
3866 +               ah->totalAdcIOddPhase[i] +=
3867 +                       REG_READ(ah, AR_PHY_CAL_MEAS_0(i));
3868 +               ah->totalAdcIEvenPhase[i] +=
3869 +                       REG_READ(ah, AR_PHY_CAL_MEAS_1(i));
3870 +               ah->totalAdcQOddPhase[i] +=
3871 +                       REG_READ(ah, AR_PHY_CAL_MEAS_2(i));
3872 +               ah->totalAdcQEvenPhase[i] +=
3873 +                       REG_READ(ah, AR_PHY_CAL_MEAS_3(i));
3874 +
3875 +               ath_print(ath9k_hw_common(ah), ATH_DBG_CALIBRATE,
3876 +                         "%d: Chn %d oddi=0x%08x; eveni=0x%08x; "
3877 +                         "oddq=0x%08x; evenq=0x%08x;\n",
3878 +                         ah->cal_samples, i,
3879 +                         ah->totalAdcIOddPhase[i],
3880 +                         ah->totalAdcIEvenPhase[i],
3881 +                         ah->totalAdcQOddPhase[i],
3882 +                         ah->totalAdcQEvenPhase[i]);
3883 +       }
3884 +}
3885 +
3886 +static void ar9002_hw_adc_dccal_collect(struct ath_hw *ah)
3887 +{
3888 +       int i;
3889 +
3890 +       for (i = 0; i < AR5416_MAX_CHAINS; i++) {
3891 +               ah->totalAdcDcOffsetIOddPhase[i] +=
3892 +                       (int32_t) REG_READ(ah, AR_PHY_CAL_MEAS_0(i));
3893 +               ah->totalAdcDcOffsetIEvenPhase[i] +=
3894 +                       (int32_t) REG_READ(ah, AR_PHY_CAL_MEAS_1(i));
3895 +               ah->totalAdcDcOffsetQOddPhase[i] +=
3896 +                       (int32_t) REG_READ(ah, AR_PHY_CAL_MEAS_2(i));
3897 +               ah->totalAdcDcOffsetQEvenPhase[i] +=
3898 +                       (int32_t) REG_READ(ah, AR_PHY_CAL_MEAS_3(i));
3899 +
3900 +               ath_print(ath9k_hw_common(ah), ATH_DBG_CALIBRATE,
3901 +                         "%d: Chn %d oddi=0x%08x; eveni=0x%08x; "
3902 +                         "oddq=0x%08x; evenq=0x%08x;\n",
3903 +                         ah->cal_samples, i,
3904 +                         ah->totalAdcDcOffsetIOddPhase[i],
3905 +                         ah->totalAdcDcOffsetIEvenPhase[i],
3906 +                         ah->totalAdcDcOffsetQOddPhase[i],
3907 +                         ah->totalAdcDcOffsetQEvenPhase[i]);
3908 +       }
3909 +}
3910 +
3911 +static void ar9002_hw_iqcalibrate(struct ath_hw *ah, u8 numChains)
3912 +{
3913 +       struct ath_common *common = ath9k_hw_common(ah);
3914 +       u32 powerMeasQ, powerMeasI, iqCorrMeas;
3915 +       u32 qCoffDenom, iCoffDenom;
3916 +       int32_t qCoff, iCoff;
3917 +       int iqCorrNeg, i;
3918 +
3919 +       for (i = 0; i < numChains; i++) {
3920 +               powerMeasI = ah->totalPowerMeasI[i];
3921 +               powerMeasQ = ah->totalPowerMeasQ[i];
3922 +               iqCorrMeas = ah->totalIqCorrMeas[i];
3923 +
3924 +               ath_print(common, ATH_DBG_CALIBRATE,
3925 +                         "Starting IQ Cal and Correction for Chain %d\n",
3926 +                         i);
3927 +
3928 +               ath_print(common, ATH_DBG_CALIBRATE,
3929 +                         "Orignal: Chn %diq_corr_meas = 0x%08x\n",
3930 +                         i, ah->totalIqCorrMeas[i]);
3931 +
3932 +               iqCorrNeg = 0;
3933 +
3934 +               if (iqCorrMeas > 0x80000000) {
3935 +                       iqCorrMeas = (0xffffffff - iqCorrMeas) + 1;
3936 +                       iqCorrNeg = 1;
3937 +               }
3938 +
3939 +               ath_print(common, ATH_DBG_CALIBRATE,
3940 +                         "Chn %d pwr_meas_i = 0x%08x\n", i, powerMeasI);
3941 +               ath_print(common, ATH_DBG_CALIBRATE,
3942 +                         "Chn %d pwr_meas_q = 0x%08x\n", i, powerMeasQ);
3943 +               ath_print(common, ATH_DBG_CALIBRATE, "iqCorrNeg is 0x%08x\n",
3944 +                         iqCorrNeg);
3945 +
3946 +               iCoffDenom = (powerMeasI / 2 + powerMeasQ / 2) / 128;
3947 +               qCoffDenom = powerMeasQ / 64;
3948 +
3949 +               if ((powerMeasQ != 0) && (iCoffDenom != 0) &&
3950 +                   (qCoffDenom != 0)) {
3951 +                       iCoff = iqCorrMeas / iCoffDenom;
3952 +                       qCoff = powerMeasI / qCoffDenom - 64;
3953 +                       ath_print(common, ATH_DBG_CALIBRATE,
3954 +                                 "Chn %d iCoff = 0x%08x\n", i, iCoff);
3955 +                       ath_print(common, ATH_DBG_CALIBRATE,
3956 +                                 "Chn %d qCoff = 0x%08x\n", i, qCoff);
3957 +
3958 +                       iCoff = iCoff & 0x3f;
3959 +                       ath_print(common, ATH_DBG_CALIBRATE,
3960 +                                 "New: Chn %d iCoff = 0x%08x\n", i, iCoff);
3961 +                       if (iqCorrNeg == 0x0)
3962 +                               iCoff = 0x40 - iCoff;
3963 +
3964 +                       if (qCoff > 15)
3965 +                               qCoff = 15;
3966 +                       else if (qCoff <= -16)
3967 +                               qCoff = 16;
3968 +
3969 +                       ath_print(common, ATH_DBG_CALIBRATE,
3970 +                                 "Chn %d : iCoff = 0x%x  qCoff = 0x%x\n",
3971 +                                 i, iCoff, qCoff);
3972 +
3973 +                       REG_RMW_FIELD(ah, AR_PHY_TIMING_CTRL4(i),
3974 +                                     AR_PHY_TIMING_CTRL4_IQCORR_Q_I_COFF,
3975 +                                     iCoff);
3976 +                       REG_RMW_FIELD(ah, AR_PHY_TIMING_CTRL4(i),
3977 +                                     AR_PHY_TIMING_CTRL4_IQCORR_Q_Q_COFF,
3978 +                                     qCoff);
3979 +                       ath_print(common, ATH_DBG_CALIBRATE,
3980 +                                 "IQ Cal and Correction done for Chain %d\n",
3981 +                                 i);
3982 +               }
3983 +       }
3984 +
3985 +       REG_SET_BIT(ah, AR_PHY_TIMING_CTRL4(0),
3986 +                   AR_PHY_TIMING_CTRL4_IQCORR_ENABLE);
3987 +}
3988 +
3989 +static void ar9002_hw_adc_gaincal_calibrate(struct ath_hw *ah, u8 numChains)
3990 +{
3991 +       struct ath_common *common = ath9k_hw_common(ah);
3992 +       u32 iOddMeasOffset, iEvenMeasOffset, qOddMeasOffset, qEvenMeasOffset;
3993 +       u32 qGainMismatch, iGainMismatch, val, i;
3994 +
3995 +       for (i = 0; i < numChains; i++) {
3996 +               iOddMeasOffset = ah->totalAdcIOddPhase[i];
3997 +               iEvenMeasOffset = ah->totalAdcIEvenPhase[i];
3998 +               qOddMeasOffset = ah->totalAdcQOddPhase[i];
3999 +               qEvenMeasOffset = ah->totalAdcQEvenPhase[i];
4000 +
4001 +               ath_print(common, ATH_DBG_CALIBRATE,
4002 +                         "Starting ADC Gain Cal for Chain %d\n", i);
4003 +
4004 +               ath_print(common, ATH_DBG_CALIBRATE,
4005 +                         "Chn %d pwr_meas_odd_i = 0x%08x\n", i,
4006 +                         iOddMeasOffset);
4007 +               ath_print(common, ATH_DBG_CALIBRATE,
4008 +                         "Chn %d pwr_meas_even_i = 0x%08x\n", i,
4009 +                         iEvenMeasOffset);
4010 +               ath_print(common, ATH_DBG_CALIBRATE,
4011 +                         "Chn %d pwr_meas_odd_q = 0x%08x\n", i,
4012 +                         qOddMeasOffset);
4013 +               ath_print(common, ATH_DBG_CALIBRATE,
4014 +                         "Chn %d pwr_meas_even_q = 0x%08x\n", i,
4015 +                         qEvenMeasOffset);
4016 +
4017 +               if (iOddMeasOffset != 0 && qEvenMeasOffset != 0) {
4018 +                       iGainMismatch =
4019 +                               ((iEvenMeasOffset * 32) /
4020 +                                iOddMeasOffset) & 0x3f;
4021 +                       qGainMismatch =
4022 +                               ((qOddMeasOffset * 32) /
4023 +                                qEvenMeasOffset) & 0x3f;
4024 +
4025 +                       ath_print(common, ATH_DBG_CALIBRATE,
4026 +                                 "Chn %d gain_mismatch_i = 0x%08x\n", i,
4027 +                                 iGainMismatch);
4028 +                       ath_print(common, ATH_DBG_CALIBRATE,
4029 +                                 "Chn %d gain_mismatch_q = 0x%08x\n", i,
4030 +                                 qGainMismatch);
4031 +
4032 +                       val = REG_READ(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(i));
4033 +                       val &= 0xfffff000;
4034 +                       val |= (qGainMismatch) | (iGainMismatch << 6);
4035 +                       REG_WRITE(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(i), val);
4036 +
4037 +                       ath_print(common, ATH_DBG_CALIBRATE,
4038 +                                 "ADC Gain Cal done for Chain %d\n", i);
4039 +               }
4040 +       }
4041 +
4042 +       REG_WRITE(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(0),
4043 +                 REG_READ(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(0)) |
4044 +                 AR_PHY_NEW_ADC_GAIN_CORR_ENABLE);
4045 +}
4046 +
4047 +static void ar9002_hw_adc_dccal_calibrate(struct ath_hw *ah, u8 numChains)
4048 +{
4049 +       struct ath_common *common = ath9k_hw_common(ah);
4050 +       u32 iOddMeasOffset, iEvenMeasOffset, val, i;
4051 +       int32_t qOddMeasOffset, qEvenMeasOffset, qDcMismatch, iDcMismatch;
4052 +       const struct ath9k_percal_data *calData =
4053 +               ah->cal_list_curr->calData;
4054 +       u32 numSamples =
4055 +               (1 << (calData->calCountMax + 5)) * calData->calNumSamples;
4056 +
4057 +       for (i = 0; i < numChains; i++) {
4058 +               iOddMeasOffset = ah->totalAdcDcOffsetIOddPhase[i];
4059 +               iEvenMeasOffset = ah->totalAdcDcOffsetIEvenPhase[i];
4060 +               qOddMeasOffset = ah->totalAdcDcOffsetQOddPhase[i];
4061 +               qEvenMeasOffset = ah->totalAdcDcOffsetQEvenPhase[i];
4062 +
4063 +               ath_print(common, ATH_DBG_CALIBRATE,
4064 +                          "Starting ADC DC Offset Cal for Chain %d\n", i);
4065 +
4066 +               ath_print(common, ATH_DBG_CALIBRATE,
4067 +                         "Chn %d pwr_meas_odd_i = %d\n", i,
4068 +                         iOddMeasOffset);
4069 +               ath_print(common, ATH_DBG_CALIBRATE,
4070 +                         "Chn %d pwr_meas_even_i = %d\n", i,
4071 +                         iEvenMeasOffset);
4072 +               ath_print(common, ATH_DBG_CALIBRATE,
4073 +                         "Chn %d pwr_meas_odd_q = %d\n", i,
4074 +                         qOddMeasOffset);
4075 +               ath_print(common, ATH_DBG_CALIBRATE,
4076 +                         "Chn %d pwr_meas_even_q = %d\n", i,
4077 +                         qEvenMeasOffset);
4078 +
4079 +               iDcMismatch = (((iEvenMeasOffset - iOddMeasOffset) * 2) /
4080 +                              numSamples) & 0x1ff;
4081 +               qDcMismatch = (((qOddMeasOffset - qEvenMeasOffset) * 2) /
4082 +                              numSamples) & 0x1ff;
4083 +
4084 +               ath_print(common, ATH_DBG_CALIBRATE,
4085 +                         "Chn %d dc_offset_mismatch_i = 0x%08x\n", i,
4086 +                         iDcMismatch);
4087 +               ath_print(common, ATH_DBG_CALIBRATE,
4088 +                         "Chn %d dc_offset_mismatch_q = 0x%08x\n", i,
4089 +                         qDcMismatch);
4090 +
4091 +               val = REG_READ(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(i));
4092 +               val &= 0xc0000fff;
4093 +               val |= (qDcMismatch << 12) | (iDcMismatch << 21);
4094 +               REG_WRITE(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(i), val);
4095 +
4096 +               ath_print(common, ATH_DBG_CALIBRATE,
4097 +                         "ADC DC Offset Cal done for Chain %d\n", i);
4098 +       }
4099 +
4100 +       REG_WRITE(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(0),
4101 +                 REG_READ(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(0)) |
4102 +                 AR_PHY_NEW_ADC_DC_OFFSET_CORR_ENABLE);
4103 +}
4104 +
4105 +static void ar9287_hw_olc_temp_compensation(struct ath_hw *ah)
4106 +{
4107 +       u32 rddata;
4108 +       int32_t delta, currPDADC, slope;
4109 +
4110 +       rddata = REG_READ(ah, AR_PHY_TX_PWRCTRL4);
4111 +       currPDADC = MS(rddata, AR_PHY_TX_PWRCTRL_PD_AVG_OUT);
4112 +
4113 +       if (ah->initPDADC == 0 || currPDADC == 0) {
4114 +               /*
4115 +                * Zero value indicates that no frames have been transmitted yet,
4116 +                * can't do temperature compensation until frames are transmitted.
4117 +                */
4118 +               return;
4119 +       } else {
4120 +               slope = ah->eep_ops->get_eeprom(ah, EEP_TEMPSENSE_SLOPE);
4121 +
4122 +               if (slope == 0) { /* to avoid divide by zero case */
4123 +                       delta = 0;
4124 +               } else {
4125 +                       delta = ((currPDADC - ah->initPDADC)*4) / slope;
4126 +               }
4127 +               REG_RMW_FIELD(ah, AR_PHY_CH0_TX_PWRCTRL11,
4128 +                             AR_PHY_TX_PWRCTRL_OLPC_TEMP_COMP, delta);
4129 +               REG_RMW_FIELD(ah, AR_PHY_CH1_TX_PWRCTRL11,
4130 +                             AR_PHY_TX_PWRCTRL_OLPC_TEMP_COMP, delta);
4131 +       }
4132 +}
4133 +
4134 +static void ar9280_hw_olc_temp_compensation(struct ath_hw *ah)
4135 +{
4136 +       u32 rddata, i;
4137 +       int delta, currPDADC, regval;
4138 +
4139 +       rddata = REG_READ(ah, AR_PHY_TX_PWRCTRL4);
4140 +       currPDADC = MS(rddata, AR_PHY_TX_PWRCTRL_PD_AVG_OUT);
4141 +
4142 +       if (ah->initPDADC == 0 || currPDADC == 0)
4143 +               return;
4144 +
4145 +       if (ah->eep_ops->get_eeprom(ah, EEP_DAC_HPWR_5G))
4146 +               delta = (currPDADC - ah->initPDADC + 4) / 8;
4147 +       else
4148 +               delta = (currPDADC - ah->initPDADC + 5) / 10;
4149 +
4150 +       if (delta != ah->PDADCdelta) {
4151 +               ah->PDADCdelta = delta;
4152 +               for (i = 1; i < AR9280_TX_GAIN_TABLE_SIZE; i++) {
4153 +                       regval = ah->originalGain[i] - delta;
4154 +                       if (regval < 0)
4155 +                               regval = 0;
4156 +
4157 +                       REG_RMW_FIELD(ah,
4158 +                                     AR_PHY_TX_GAIN_TBL1 + i * 4,
4159 +                                     AR_PHY_TX_GAIN, regval);
4160 +               }
4161 +       }
4162 +}
4163 +
4164 +static void ar9271_hw_pa_cal(struct ath_hw *ah, bool is_reset)
4165 +{
4166 +       u32 regVal;
4167 +       unsigned int i;
4168 +       u32 regList [][2] = {
4169 +               { 0x786c, 0 },
4170 +               { 0x7854, 0 },
4171 +               { 0x7820, 0 },
4172 +               { 0x7824, 0 },
4173 +               { 0x7868, 0 },
4174 +               { 0x783c, 0 },
4175 +               { 0x7838, 0 } ,
4176 +               { 0x7828, 0 } ,
4177 +       };
4178 +
4179 +       for (i = 0; i < ARRAY_SIZE(regList); i++)
4180 +               regList[i][1] = REG_READ(ah, regList[i][0]);
4181 +
4182 +       regVal = REG_READ(ah, 0x7834);
4183 +       regVal &= (~(0x1));
4184 +       REG_WRITE(ah, 0x7834, regVal);
4185 +       regVal = REG_READ(ah, 0x9808);
4186 +       regVal |= (0x1 << 27);
4187 +       REG_WRITE(ah, 0x9808, regVal);
4188 +
4189 +       /* 786c,b23,1, pwddac=1 */
4190 +       REG_RMW_FIELD(ah, AR9285_AN_TOP3, AR9285_AN_TOP3_PWDDAC, 1);
4191 +       /* 7854, b5,1, pdrxtxbb=1 */
4192 +       REG_RMW_FIELD(ah, AR9285_AN_RXTXBB1, AR9285_AN_RXTXBB1_PDRXTXBB1, 1);
4193 +       /* 7854, b7,1, pdv2i=1 */
4194 +       REG_RMW_FIELD(ah, AR9285_AN_RXTXBB1, AR9285_AN_RXTXBB1_PDV2I, 1);
4195 +       /* 7854, b8,1, pddacinterface=1 */
4196 +       REG_RMW_FIELD(ah, AR9285_AN_RXTXBB1, AR9285_AN_RXTXBB1_PDDACIF, 1);
4197 +       /* 7824,b12,0, offcal=0 */
4198 +       REG_RMW_FIELD(ah, AR9285_AN_RF2G2, AR9285_AN_RF2G2_OFFCAL, 0);
4199 +       /* 7838, b1,0, pwddb=0 */
4200 +       REG_RMW_FIELD(ah, AR9285_AN_RF2G7, AR9285_AN_RF2G7_PWDDB, 0);
4201 +       /* 7820,b11,0, enpacal=0 */
4202 +       REG_RMW_FIELD(ah, AR9285_AN_RF2G1, AR9285_AN_RF2G1_ENPACAL, 0);
4203 +       /* 7820,b25,1, pdpadrv1=0 */
4204 +       REG_RMW_FIELD(ah, AR9285_AN_RF2G1, AR9285_AN_RF2G1_PDPADRV1, 0);
4205 +       /* 7820,b24,0, pdpadrv2=0 */
4206 +       REG_RMW_FIELD(ah, AR9285_AN_RF2G1,AR9285_AN_RF2G1_PDPADRV2,0);
4207 +       /* 7820,b23,0, pdpaout=0 */
4208 +       REG_RMW_FIELD(ah, AR9285_AN_RF2G1, AR9285_AN_RF2G1_PDPAOUT, 0);
4209 +       /* 783c,b14-16,7, padrvgn2tab_0=7 */
4210 +       REG_RMW_FIELD(ah, AR9285_AN_RF2G8,AR9285_AN_RF2G8_PADRVGN2TAB0, 7);
4211 +       /*
4212 +        * 7838,b29-31,0, padrvgn1tab_0=0
4213 +        * does not matter since we turn it off
4214 +        */
4215 +       REG_RMW_FIELD(ah, AR9285_AN_RF2G7,AR9285_AN_RF2G7_PADRVGN2TAB0, 0);
4216 +
4217 +       REG_RMW_FIELD(ah, AR9285_AN_RF2G3, AR9271_AN_RF2G3_CCOMP, 0xfff);
4218 +
4219 +       /* Set:
4220 +        * localmode=1,bmode=1,bmoderxtx=1,synthon=1,
4221 +        * txon=1,paon=1,oscon=1,synthon_force=1
4222 +        */
4223 +       REG_WRITE(ah, AR9285_AN_TOP2, 0xca0358a0);
4224 +       udelay(30);
4225 +       REG_RMW_FIELD(ah, AR9285_AN_RF2G6, AR9271_AN_RF2G6_OFFS, 0);
4226 +
4227 +       /* find off_6_1; */
4228 +       for (i = 6; i > 0; i--) {
4229 +               regVal = REG_READ(ah, 0x7834);
4230 +               regVal |= (1 << (20 + i));
4231 +               REG_WRITE(ah, 0x7834, regVal);
4232 +               udelay(1);
4233 +               //regVal = REG_READ(ah, 0x7834);
4234 +               regVal &= (~(0x1 << (20 + i)));
4235 +               regVal |= (MS(REG_READ(ah, 0x7840), AR9285_AN_RXTXBB1_SPARE9)
4236 +                           << (20 + i));
4237 +               REG_WRITE(ah, 0x7834, regVal);
4238 +       }
4239 +
4240 +       regVal = (regVal >>20) & 0x7f;
4241 +
4242 +       /* Update PA cal info */
4243 +       if ((!is_reset) && (ah->pacal_info.prev_offset == regVal)) {
4244 +               if (ah->pacal_info.max_skipcount < MAX_PACAL_SKIPCOUNT)
4245 +                       ah->pacal_info.max_skipcount =
4246 +                               2 * ah->pacal_info.max_skipcount;
4247 +               ah->pacal_info.skipcount = ah->pacal_info.max_skipcount;
4248 +       } else {
4249 +               ah->pacal_info.max_skipcount = 1;
4250 +               ah->pacal_info.skipcount = 0;
4251 +               ah->pacal_info.prev_offset = regVal;
4252 +       }
4253 +
4254 +       regVal = REG_READ(ah, 0x7834);
4255 +       regVal |= 0x1;
4256 +       REG_WRITE(ah, 0x7834, regVal);
4257 +       regVal = REG_READ(ah, 0x9808);
4258 +       regVal &= (~(0x1 << 27));
4259 +       REG_WRITE(ah, 0x9808, regVal);
4260 +
4261 +       for (i = 0; i < ARRAY_SIZE(regList); i++)
4262 +               REG_WRITE(ah, regList[i][0], regList[i][1]);
4263 +}
4264 +
4265 +static inline void ar9285_hw_pa_cal(struct ath_hw *ah, bool is_reset)
4266 +{
4267 +       struct ath_common *common = ath9k_hw_common(ah);
4268 +       u32 regVal;
4269 +       int i, offset, offs_6_1, offs_0;
4270 +       u32 ccomp_org, reg_field;
4271 +       u32 regList[][2] = {
4272 +               { 0x786c, 0 },
4273 +               { 0x7854, 0 },
4274 +               { 0x7820, 0 },
4275 +               { 0x7824, 0 },
4276 +               { 0x7868, 0 },
4277 +               { 0x783c, 0 },
4278 +               { 0x7838, 0 },
4279 +       };
4280 +
4281 +       ath_print(common, ATH_DBG_CALIBRATE, "Running PA Calibration\n");
4282 +
4283 +       /* PA CAL is not needed for high power solution */
4284 +       if (ah->eep_ops->get_eeprom(ah, EEP_TXGAIN_TYPE) ==
4285 +           AR5416_EEP_TXGAIN_HIGH_POWER)
4286 +               return;
4287 +
4288 +       if (AR_SREV_9285_11(ah)) {
4289 +               REG_WRITE(ah, AR9285_AN_TOP4, (AR9285_AN_TOP4_DEFAULT | 0x14));
4290 +               udelay(10);
4291 +       }
4292 +
4293 +       for (i = 0; i < ARRAY_SIZE(regList); i++)
4294 +               regList[i][1] = REG_READ(ah, regList[i][0]);
4295 +
4296 +       regVal = REG_READ(ah, 0x7834);
4297 +       regVal &= (~(0x1));
4298 +       REG_WRITE(ah, 0x7834, regVal);
4299 +       regVal = REG_READ(ah, 0x9808);
4300 +       regVal |= (0x1 << 27);
4301 +       REG_WRITE(ah, 0x9808, regVal);
4302 +
4303 +       REG_RMW_FIELD(ah, AR9285_AN_TOP3, AR9285_AN_TOP3_PWDDAC, 1);
4304 +       REG_RMW_FIELD(ah, AR9285_AN_RXTXBB1, AR9285_AN_RXTXBB1_PDRXTXBB1, 1);
4305 +       REG_RMW_FIELD(ah, AR9285_AN_RXTXBB1, AR9285_AN_RXTXBB1_PDV2I, 1);
4306 +       REG_RMW_FIELD(ah, AR9285_AN_RXTXBB1, AR9285_AN_RXTXBB1_PDDACIF, 1);
4307 +       REG_RMW_FIELD(ah, AR9285_AN_RF2G2, AR9285_AN_RF2G2_OFFCAL, 0);
4308 +       REG_RMW_FIELD(ah, AR9285_AN_RF2G7, AR9285_AN_RF2G7_PWDDB, 0);
4309 +       REG_RMW_FIELD(ah, AR9285_AN_RF2G1, AR9285_AN_RF2G1_ENPACAL, 0);
4310 +       REG_RMW_FIELD(ah, AR9285_AN_RF2G1, AR9285_AN_RF2G1_PDPADRV1, 0);
4311 +       REG_RMW_FIELD(ah, AR9285_AN_RF2G1, AR9285_AN_RF2G1_PDPADRV2, 0);
4312 +       REG_RMW_FIELD(ah, AR9285_AN_RF2G1, AR9285_AN_RF2G1_PDPAOUT, 0);
4313 +       REG_RMW_FIELD(ah, AR9285_AN_RF2G8, AR9285_AN_RF2G8_PADRVGN2TAB0, 7);
4314 +       REG_RMW_FIELD(ah, AR9285_AN_RF2G7, AR9285_AN_RF2G7_PADRVGN2TAB0, 0);
4315 +       ccomp_org = MS(REG_READ(ah, AR9285_AN_RF2G6), AR9285_AN_RF2G6_CCOMP);
4316 +       REG_RMW_FIELD(ah, AR9285_AN_RF2G6, AR9285_AN_RF2G6_CCOMP, 0xf);
4317 +
4318 +       REG_WRITE(ah, AR9285_AN_TOP2, 0xca0358a0);
4319 +       udelay(30);
4320 +       REG_RMW_FIELD(ah, AR9285_AN_RF2G6, AR9285_AN_RF2G6_OFFS, 0);
4321 +       REG_RMW_FIELD(ah, AR9285_AN_RF2G3, AR9285_AN_RF2G3_PDVCCOMP, 0);
4322 +
4323 +       for (i = 6; i > 0; i--) {
4324 +               regVal = REG_READ(ah, 0x7834);
4325 +               regVal |= (1 << (19 + i));
4326 +               REG_WRITE(ah, 0x7834, regVal);
4327 +               udelay(1);
4328 +               regVal = REG_READ(ah, 0x7834);
4329 +               regVal &= (~(0x1 << (19 + i)));
4330 +               reg_field = MS(REG_READ(ah, 0x7840), AR9285_AN_RXTXBB1_SPARE9);
4331 +               regVal |= (reg_field << (19 + i));
4332 +               REG_WRITE(ah, 0x7834, regVal);
4333 +       }
4334 +
4335 +       REG_RMW_FIELD(ah, AR9285_AN_RF2G3, AR9285_AN_RF2G3_PDVCCOMP, 1);
4336 +       udelay(1);
4337 +       reg_field = MS(REG_READ(ah, AR9285_AN_RF2G9), AR9285_AN_RXTXBB1_SPARE9);
4338 +       REG_RMW_FIELD(ah, AR9285_AN_RF2G3, AR9285_AN_RF2G3_PDVCCOMP, reg_field);
4339 +       offs_6_1 = MS(REG_READ(ah, AR9285_AN_RF2G6), AR9285_AN_RF2G6_OFFS);
4340 +       offs_0   = MS(REG_READ(ah, AR9285_AN_RF2G3), AR9285_AN_RF2G3_PDVCCOMP);
4341 +
4342 +       offset = (offs_6_1<<1) | offs_0;
4343 +       offset = offset - 0;
4344 +       offs_6_1 = offset>>1;
4345 +       offs_0 = offset & 1;
4346 +
4347 +       if ((!is_reset) && (ah->pacal_info.prev_offset == offset)) {
4348 +               if (ah->pacal_info.max_skipcount < MAX_PACAL_SKIPCOUNT)
4349 +                       ah->pacal_info.max_skipcount =
4350 +                               2 * ah->pacal_info.max_skipcount;
4351 +               ah->pacal_info.skipcount = ah->pacal_info.max_skipcount;
4352 +       } else {
4353 +               ah->pacal_info.max_skipcount = 1;
4354 +               ah->pacal_info.skipcount = 0;
4355 +               ah->pacal_info.prev_offset = offset;
4356 +       }
4357 +
4358 +       REG_RMW_FIELD(ah, AR9285_AN_RF2G6, AR9285_AN_RF2G6_OFFS, offs_6_1);
4359 +       REG_RMW_FIELD(ah, AR9285_AN_RF2G3, AR9285_AN_RF2G3_PDVCCOMP, offs_0);
4360 +
4361 +       regVal = REG_READ(ah, 0x7834);
4362 +       regVal |= 0x1;
4363 +       REG_WRITE(ah, 0x7834, regVal);
4364 +       regVal = REG_READ(ah, 0x9808);
4365 +       regVal &= (~(0x1 << 27));
4366 +       REG_WRITE(ah, 0x9808, regVal);
4367 +
4368 +       for (i = 0; i < ARRAY_SIZE(regList); i++)
4369 +               REG_WRITE(ah, regList[i][0], regList[i][1]);
4370 +
4371 +       REG_RMW_FIELD(ah, AR9285_AN_RF2G6, AR9285_AN_RF2G6_CCOMP, ccomp_org);
4372 +
4373 +       if (AR_SREV_9285_11(ah))
4374 +               REG_WRITE(ah, AR9285_AN_TOP4, AR9285_AN_TOP4_DEFAULT);
4375 +
4376 +}
4377 +
4378 +static void ar9002_hw_pa_cal(struct ath_hw *ah, bool is_reset)
4379 +{
4380 +       if (AR_SREV_9271(ah)) {
4381 +               if (is_reset || !ah->pacal_info.skipcount)
4382 +                       ar9271_hw_pa_cal(ah, is_reset);
4383 +               else
4384 +                       ah->pacal_info.skipcount--;
4385 +       } else if (AR_SREV_9285_11_OR_LATER(ah)) {
4386 +               if (is_reset || !ah->pacal_info.skipcount)
4387 +                       ar9285_hw_pa_cal(ah, is_reset);
4388 +               else
4389 +                       ah->pacal_info.skipcount--;
4390 +       }
4391 +}
4392 +
4393 +static void ar9002_hw_olc_temp_compensation(struct ath_hw *ah)
4394 +{
4395 +       if (OLC_FOR_AR9287_10_LATER)
4396 +               ar9287_hw_olc_temp_compensation(ah);
4397 +       else if (OLC_FOR_AR9280_20_LATER)
4398 +               ar9280_hw_olc_temp_compensation(ah);
4399 +}
4400 +
4401 +static bool ar9002_hw_calibrate(struct ath_hw *ah,
4402 +                               struct ath9k_channel *chan,
4403 +                               u8 rxchainmask,
4404 +                               bool longcal)
4405 +{
4406 +       bool iscaldone = true;
4407 +       struct ath9k_cal_list *currCal = ah->cal_list_curr;
4408 +
4409 +       if (currCal &&
4410 +           (currCal->calState == CAL_RUNNING ||
4411 +            currCal->calState == CAL_WAITING)) {
4412 +               iscaldone = ar9002_hw_per_calibration(ah, chan,
4413 +                                                     rxchainmask, currCal);
4414 +               if (iscaldone) {
4415 +                       ah->cal_list_curr = currCal = currCal->calNext;
4416 +
4417 +                       if (currCal->calState == CAL_WAITING) {
4418 +                               iscaldone = false;
4419 +                               ath9k_hw_reset_calibration(ah, currCal);
4420 +                       }
4421 +               }
4422 +       }
4423 +
4424 +       /* Do NF cal only at longer intervals */
4425 +       if (longcal) {
4426 +               /* Do periodic PAOffset Cal */
4427 +               ar9002_hw_pa_cal(ah, false);
4428 +               ar9002_hw_olc_temp_compensation(ah);
4429 +
4430 +               /* Get the value from the previous NF cal and update history buffer */
4431 +               ath9k_hw_getnf(ah, chan);
4432 +
4433 +               /*
4434 +                * Load the NF from history buffer of the current channel.
4435 +                * NF is slow time-variant, so it is OK to use a historical value.
4436 +                */
4437 +               ath9k_hw_loadnf(ah, ah->curchan);
4438 +
4439 +               ath9k_hw_start_nfcal(ah);
4440 +       }
4441 +
4442 +       return iscaldone;
4443 +}
4444 +
4445 +/* Carrier leakage Calibration fix */
4446 +static bool ar9285_hw_cl_cal(struct ath_hw *ah, struct ath9k_channel *chan)
4447 +{
4448 +       struct ath_common *common = ath9k_hw_common(ah);
4449 +
4450 +       REG_SET_BIT(ah, AR_PHY_CL_CAL_CTL, AR_PHY_CL_CAL_ENABLE);
4451 +       if (IS_CHAN_HT20(chan)) {
4452 +               REG_SET_BIT(ah, AR_PHY_CL_CAL_CTL, AR_PHY_PARALLEL_CAL_ENABLE);
4453 +               REG_SET_BIT(ah, AR_PHY_TURBO, AR_PHY_FC_DYN2040_EN);
4454 +               REG_CLR_BIT(ah, AR_PHY_AGC_CONTROL,
4455 +                           AR_PHY_AGC_CONTROL_FLTR_CAL);
4456 +               REG_CLR_BIT(ah, AR_PHY_TPCRG1, AR_PHY_TPCRG1_PD_CAL_ENABLE);
4457 +               REG_SET_BIT(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_CAL);
4458 +               if (!ath9k_hw_wait(ah, AR_PHY_AGC_CONTROL,
4459 +                                 AR_PHY_AGC_CONTROL_CAL, 0, AH_WAIT_TIMEOUT)) {
4460 +                       ath_print(common, ATH_DBG_CALIBRATE, "offset "
4461 +                                 "calibration failed to complete in "
4462 +                                 "1ms; noisy ??\n");
4463 +                       return false;
4464 +               }
4465 +               REG_CLR_BIT(ah, AR_PHY_TURBO, AR_PHY_FC_DYN2040_EN);
4466 +               REG_CLR_BIT(ah, AR_PHY_CL_CAL_CTL, AR_PHY_PARALLEL_CAL_ENABLE);
4467 +               REG_CLR_BIT(ah, AR_PHY_CL_CAL_CTL, AR_PHY_CL_CAL_ENABLE);
4468 +       }
4469 +       REG_CLR_BIT(ah, AR_PHY_ADC_CTL, AR_PHY_ADC_CTL_OFF_PWDADC);
4470 +       REG_SET_BIT(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_FLTR_CAL);
4471 +       REG_SET_BIT(ah, AR_PHY_TPCRG1, AR_PHY_TPCRG1_PD_CAL_ENABLE);
4472 +       REG_SET_BIT(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_CAL);
4473 +       if (!ath9k_hw_wait(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_CAL,
4474 +                         0, AH_WAIT_TIMEOUT)) {
4475 +               ath_print(common, ATH_DBG_CALIBRATE, "offset calibration "
4476 +                         "failed to complete in 1ms; noisy ??\n");
4477 +               return false;
4478 +       }
4479 +
4480 +       REG_SET_BIT(ah, AR_PHY_ADC_CTL, AR_PHY_ADC_CTL_OFF_PWDADC);
4481 +       REG_CLR_BIT(ah, AR_PHY_CL_CAL_CTL, AR_PHY_CL_CAL_ENABLE);
4482 +       REG_CLR_BIT(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_FLTR_CAL);
4483 +
4484 +       return true;
4485 +}
4486 +
4487 +static bool ar9285_hw_clc(struct ath_hw *ah, struct ath9k_channel *chan)
4488 +{
4489 +       int i;
4490 +       u_int32_t txgain_max;
4491 +       u_int32_t clc_gain, gain_mask = 0, clc_num = 0;
4492 +       u_int32_t reg_clc_I0, reg_clc_Q0;
4493 +       u_int32_t i0_num = 0;
4494 +       u_int32_t q0_num = 0;
4495 +       u_int32_t total_num = 0;
4496 +       u_int32_t reg_rf2g5_org;
4497 +       bool retv = true;
4498 +
4499 +       if (!(ar9285_hw_cl_cal(ah, chan)))
4500 +               return false;
4501 +
4502 +       txgain_max = MS(REG_READ(ah, AR_PHY_TX_PWRCTRL7),
4503 +                       AR_PHY_TX_PWRCTRL_TX_GAIN_TAB_MAX);
4504 +
4505 +       for (i = 0; i < (txgain_max+1); i++) {
4506 +               clc_gain = (REG_READ(ah, (AR_PHY_TX_GAIN_TBL1+(i<<2))) &
4507 +                          AR_PHY_TX_GAIN_CLC) >> AR_PHY_TX_GAIN_CLC_S;
4508 +               if (!(gain_mask & (1 << clc_gain))) {
4509 +                       gain_mask |= (1 << clc_gain);
4510 +                       clc_num++;
4511 +               }
4512 +       }
4513 +
4514 +       for (i = 0; i < clc_num; i++) {
4515 +               reg_clc_I0 = (REG_READ(ah, (AR_PHY_CLC_TBL1 + (i << 2)))
4516 +                             & AR_PHY_CLC_I0) >> AR_PHY_CLC_I0_S;
4517 +               reg_clc_Q0 = (REG_READ(ah, (AR_PHY_CLC_TBL1 + (i << 2)))
4518 +                             & AR_PHY_CLC_Q0) >> AR_PHY_CLC_Q0_S;
4519 +               if (reg_clc_I0 == 0)
4520 +                       i0_num++;
4521 +
4522 +               if (reg_clc_Q0 == 0)
4523 +                       q0_num++;
4524 +       }
4525 +       total_num = i0_num + q0_num;
4526 +       if (total_num > AR9285_CLCAL_REDO_THRESH) {
4527 +               reg_rf2g5_org = REG_READ(ah, AR9285_RF2G5);
4528 +               if (AR_SREV_9285E_20(ah)) {
4529 +                       REG_WRITE(ah, AR9285_RF2G5,
4530 +                                 (reg_rf2g5_org & AR9285_RF2G5_IC50TX) |
4531 +                                 AR9285_RF2G5_IC50TX_XE_SET);
4532 +               } else {
4533 +                       REG_WRITE(ah, AR9285_RF2G5,
4534 +                                 (reg_rf2g5_org & AR9285_RF2G5_IC50TX) |
4535 +                                 AR9285_RF2G5_IC50TX_SET);
4536 +               }
4537 +               retv = ar9285_hw_cl_cal(ah, chan);
4538 +               REG_WRITE(ah, AR9285_RF2G5, reg_rf2g5_org);
4539 +       }
4540 +       return retv;
4541 +}
4542 +
4543 +static bool ar9002_hw_init_cal(struct ath_hw *ah, struct ath9k_channel *chan)
4544 +{
4545 +       struct ath_common *common = ath9k_hw_common(ah);
4546 +
4547 +       if (AR_SREV_9271(ah) || AR_SREV_9285_12_OR_LATER(ah)) {
4548 +               if (!ar9285_hw_clc(ah, chan))
4549 +                       return false;
4550 +       } else {
4551 +               if (AR_SREV_9280_10_OR_LATER(ah)) {
4552 +                       if (!AR_SREV_9287_10_OR_LATER(ah))
4553 +                               REG_CLR_BIT(ah, AR_PHY_ADC_CTL,
4554 +                                           AR_PHY_ADC_CTL_OFF_PWDADC);
4555 +                       REG_SET_BIT(ah, AR_PHY_AGC_CONTROL,
4556 +                                   AR_PHY_AGC_CONTROL_FLTR_CAL);
4557 +               }
4558 +
4559 +               /* Calibrate the AGC */
4560 +               REG_WRITE(ah, AR_PHY_AGC_CONTROL,
4561 +                         REG_READ(ah, AR_PHY_AGC_CONTROL) |
4562 +                         AR_PHY_AGC_CONTROL_CAL);
4563 +
4564 +               /* Poll for offset calibration complete */
4565 +               if (!ath9k_hw_wait(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_CAL,
4566 +                                  0, AH_WAIT_TIMEOUT)) {
4567 +                       ath_print(common, ATH_DBG_CALIBRATE,
4568 +                                 "offset calibration failed to "
4569 +                                 "complete in 1ms; noisy environment?\n");
4570 +                       return false;
4571 +               }
4572 +
4573 +               if (AR_SREV_9280_10_OR_LATER(ah)) {
4574 +                       if (!AR_SREV_9287_10_OR_LATER(ah))
4575 +                               REG_SET_BIT(ah, AR_PHY_ADC_CTL,
4576 +                                           AR_PHY_ADC_CTL_OFF_PWDADC);
4577 +                       REG_CLR_BIT(ah, AR_PHY_AGC_CONTROL,
4578 +                                   AR_PHY_AGC_CONTROL_FLTR_CAL);
4579 +               }
4580 +       }
4581 +
4582 +       /* Do PA Calibration */
4583 +       ar9002_hw_pa_cal(ah, true);
4584 +
4585 +       /* Do NF Calibration after DC offset and other calibrations */
4586 +       REG_WRITE(ah, AR_PHY_AGC_CONTROL,
4587 +                 REG_READ(ah, AR_PHY_AGC_CONTROL) | AR_PHY_AGC_CONTROL_NF);
4588 +
4589 +       ah->cal_list = ah->cal_list_last = ah->cal_list_curr = NULL;
4590 +
4591 +       /* Enable IQ, ADC Gain and ADC DC offset CALs */
4592 +       if (AR_SREV_9100(ah) || AR_SREV_9160_10_OR_LATER(ah)) {
4593 +               if (ar9002_hw_iscal_supported(ah, ADC_GAIN_CAL)) {
4594 +                       INIT_CAL(&ah->adcgain_caldata);
4595 +                       INSERT_CAL(ah, &ah->adcgain_caldata);
4596 +                       ath_print(common, ATH_DBG_CALIBRATE,
4597 +                                 "enabling ADC Gain Calibration.\n");
4598 +               }
4599 +               if (ar9002_hw_iscal_supported(ah, ADC_DC_CAL)) {
4600 +                       INIT_CAL(&ah->adcdc_caldata);
4601 +                       INSERT_CAL(ah, &ah->adcdc_caldata);
4602 +                       ath_print(common, ATH_DBG_CALIBRATE,
4603 +                                 "enabling ADC DC Calibration.\n");
4604 +               }
4605 +               if (ar9002_hw_iscal_supported(ah, IQ_MISMATCH_CAL)) {
4606 +                       INIT_CAL(&ah->iq_caldata);
4607 +                       INSERT_CAL(ah, &ah->iq_caldata);
4608 +                       ath_print(common, ATH_DBG_CALIBRATE,
4609 +                                 "enabling IQ Calibration.\n");
4610 +               }
4611 +
4612 +               ah->cal_list_curr = ah->cal_list;
4613 +
4614 +               if (ah->cal_list_curr)
4615 +                       ath9k_hw_reset_calibration(ah, ah->cal_list_curr);
4616 +       }
4617 +
4618 +       chan->CalValid = 0;
4619 +
4620 +       return true;
4621 +}
4622 +
4623 +static const struct ath9k_percal_data iq_cal_multi_sample = {
4624 +       IQ_MISMATCH_CAL,
4625 +       MAX_CAL_SAMPLES,
4626 +       PER_MIN_LOG_COUNT,
4627 +       ar9002_hw_iqcal_collect,
4628 +       ar9002_hw_iqcalibrate
4629 +};
4630 +static const struct ath9k_percal_data iq_cal_single_sample = {
4631 +       IQ_MISMATCH_CAL,
4632 +       MIN_CAL_SAMPLES,
4633 +       PER_MAX_LOG_COUNT,
4634 +       ar9002_hw_iqcal_collect,
4635 +       ar9002_hw_iqcalibrate
4636 +};
4637 +static const struct ath9k_percal_data adc_gain_cal_multi_sample = {
4638 +       ADC_GAIN_CAL,
4639 +       MAX_CAL_SAMPLES,
4640 +       PER_MIN_LOG_COUNT,
4641 +       ar9002_hw_adc_gaincal_collect,
4642 +       ar9002_hw_adc_gaincal_calibrate
4643 +};
4644 +static const struct ath9k_percal_data adc_gain_cal_single_sample = {
4645 +       ADC_GAIN_CAL,
4646 +       MIN_CAL_SAMPLES,
4647 +       PER_MAX_LOG_COUNT,
4648 +       ar9002_hw_adc_gaincal_collect,
4649 +       ar9002_hw_adc_gaincal_calibrate
4650 +};
4651 +static const struct ath9k_percal_data adc_dc_cal_multi_sample = {
4652 +       ADC_DC_CAL,
4653 +       MAX_CAL_SAMPLES,
4654 +       PER_MIN_LOG_COUNT,
4655 +       ar9002_hw_adc_dccal_collect,
4656 +       ar9002_hw_adc_dccal_calibrate
4657 +};
4658 +static const struct ath9k_percal_data adc_dc_cal_single_sample = {
4659 +       ADC_DC_CAL,
4660 +       MIN_CAL_SAMPLES,
4661 +       PER_MAX_LOG_COUNT,
4662 +       ar9002_hw_adc_dccal_collect,
4663 +       ar9002_hw_adc_dccal_calibrate
4664 +};
4665 +static const struct ath9k_percal_data adc_init_dc_cal = {
4666 +       ADC_DC_INIT_CAL,
4667 +       MIN_CAL_SAMPLES,
4668 +       INIT_LOG_COUNT,
4669 +       ar9002_hw_adc_dccal_collect,
4670 +       ar9002_hw_adc_dccal_calibrate
4671 +};
4672 +
4673 +static void ar9002_hw_init_cal_settings(struct ath_hw *ah)
4674 +{
4675 +       if (AR_SREV_9100(ah)) {
4676 +               ah->iq_caldata.calData = &iq_cal_multi_sample;
4677 +               ah->supp_cals = IQ_MISMATCH_CAL;
4678 +               return;
4679 +       }
4680 +
4681 +       if (AR_SREV_9160_10_OR_LATER(ah)) {
4682 +               if (AR_SREV_9280_10_OR_LATER(ah)) {
4683 +                       ah->iq_caldata.calData = &iq_cal_single_sample;
4684 +                       ah->adcgain_caldata.calData =
4685 +                               &adc_gain_cal_single_sample;
4686 +                       ah->adcdc_caldata.calData =
4687 +                               &adc_dc_cal_single_sample;
4688 +                       ah->adcdc_calinitdata.calData =
4689 +                               &adc_init_dc_cal;
4690 +               } else {
4691 +                       ah->iq_caldata.calData = &iq_cal_multi_sample;
4692 +                       ah->adcgain_caldata.calData =
4693 +                               &adc_gain_cal_multi_sample;
4694 +                       ah->adcdc_caldata.calData =
4695 +                               &adc_dc_cal_multi_sample;
4696 +                       ah->adcdc_calinitdata.calData =
4697 +                               &adc_init_dc_cal;
4698 +               }
4699 +               ah->supp_cals = ADC_GAIN_CAL | ADC_DC_CAL | IQ_MISMATCH_CAL;
4700 +       }
4701 +}
4702 +
4703 +void ar9002_hw_attach_calib_ops(struct ath_hw *ah)
4704 +{
4705 +       struct ath_hw_private_ops *priv_ops = ath9k_hw_private_ops(ah);
4706 +       struct ath_hw_ops *ops = ath9k_hw_ops(ah);
4707 +
4708 +       priv_ops->init_cal_settings = ar9002_hw_init_cal_settings;
4709 +       priv_ops->init_cal = ar9002_hw_init_cal;
4710 +       priv_ops->setup_calibration = ar9002_hw_setup_calibration;
4711 +       priv_ops->iscal_supported = ar9002_hw_iscal_supported;
4712 +
4713 +       ops->calibrate = ar9002_hw_calibrate;
4714 +}
4715 diff --git a/drivers/net/wireless/ath/ath9k/ar9002_hw.c b/drivers/net/wireless/ath/ath9k/ar9002_hw.c
4716 new file mode 100644
4717 index 0000000..c1b4f14
4718 --- /dev/null
4719 +++ b/drivers/net/wireless/ath/ath9k/ar9002_hw.c
4720 @@ -0,0 +1,601 @@
4721 +/*
4722 + * Copyright (c) 2008-2010 Atheros Communications Inc.
4723 + *
4724 + * Permission to use, copy, modify, and/or distribute this software for any
4725 + * purpose with or without fee is hereby granted, provided that the above
4726 + * copyright notice and this permission notice appear in all copies.
4727 + *
4728 + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
4729 + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
4730 + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
4731 + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
4732 + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
4733 + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
4734 + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
4735 + */
4736 +
4737 +#include "hw.h"
4738 +#include "ar5008_initvals.h"
4739 +#include "ar9001_initvals.h"
4740 +#include "ar9002_initvals.h"
4741 +
4742 +/* General hardware code for the A5008/AR9001/AR9002 hadware families */
4743 +
4744 +static bool ar9002_hw_macversion_supported(u32 macversion)
4745 +{
4746 +       switch (macversion) {
4747 +       case AR_SREV_VERSION_5416_PCI:
4748 +       case AR_SREV_VERSION_5416_PCIE:
4749 +       case AR_SREV_VERSION_9160:
4750 +       case AR_SREV_VERSION_9100:
4751 +       case AR_SREV_VERSION_9280:
4752 +       case AR_SREV_VERSION_9285:
4753 +       case AR_SREV_VERSION_9287:
4754 +       case AR_SREV_VERSION_9271:
4755 +               return true;
4756 +       default:
4757 +               break;
4758 +       }
4759 +       return false;
4760 +}
4761 +
4762 +static void ar9002_hw_init_mode_regs(struct ath_hw *ah)
4763 +{
4764 +       if (AR_SREV_9271(ah)) {
4765 +               INIT_INI_ARRAY(&ah->iniModes, ar9271Modes_9271,
4766 +                              ARRAY_SIZE(ar9271Modes_9271), 6);
4767 +               INIT_INI_ARRAY(&ah->iniCommon, ar9271Common_9271,
4768 +                              ARRAY_SIZE(ar9271Common_9271), 2);
4769 +               INIT_INI_ARRAY(&ah->iniCommon_normal_cck_fir_coeff_9271,
4770 +                              ar9271Common_normal_cck_fir_coeff_9271,
4771 +                              ARRAY_SIZE(ar9271Common_normal_cck_fir_coeff_9271), 2);
4772 +               INIT_INI_ARRAY(&ah->iniCommon_japan_2484_cck_fir_coeff_9271,
4773 +                              ar9271Common_japan_2484_cck_fir_coeff_9271,
4774 +                              ARRAY_SIZE(ar9271Common_japan_2484_cck_fir_coeff_9271), 2);
4775 +               INIT_INI_ARRAY(&ah->iniModes_9271_1_0_only,
4776 +                              ar9271Modes_9271_1_0_only,
4777 +                              ARRAY_SIZE(ar9271Modes_9271_1_0_only), 6);
4778 +               INIT_INI_ARRAY(&ah->iniModes_9271_ANI_reg, ar9271Modes_9271_ANI_reg,
4779 +                              ARRAY_SIZE(ar9271Modes_9271_ANI_reg), 6);
4780 +               INIT_INI_ARRAY(&ah->iniModes_high_power_tx_gain_9271,
4781 +                              ar9271Modes_high_power_tx_gain_9271,
4782 +                              ARRAY_SIZE(ar9271Modes_high_power_tx_gain_9271), 6);
4783 +               INIT_INI_ARRAY(&ah->iniModes_normal_power_tx_gain_9271,
4784 +                              ar9271Modes_normal_power_tx_gain_9271,
4785 +                              ARRAY_SIZE(ar9271Modes_normal_power_tx_gain_9271), 6);
4786 +               return;
4787 +       }
4788 +
4789 +       if (AR_SREV_9287_11_OR_LATER(ah)) {
4790 +               INIT_INI_ARRAY(&ah->iniModes, ar9287Modes_9287_1_1,
4791 +                               ARRAY_SIZE(ar9287Modes_9287_1_1), 6);
4792 +               INIT_INI_ARRAY(&ah->iniCommon, ar9287Common_9287_1_1,
4793 +                               ARRAY_SIZE(ar9287Common_9287_1_1), 2);
4794 +               if (ah->config.pcie_clock_req)
4795 +                       INIT_INI_ARRAY(&ah->iniPcieSerdes,
4796 +                       ar9287PciePhy_clkreq_off_L1_9287_1_1,
4797 +                       ARRAY_SIZE(ar9287PciePhy_clkreq_off_L1_9287_1_1), 2);
4798 +               else
4799 +                       INIT_INI_ARRAY(&ah->iniPcieSerdes,
4800 +                       ar9287PciePhy_clkreq_always_on_L1_9287_1_1,
4801 +                       ARRAY_SIZE(ar9287PciePhy_clkreq_always_on_L1_9287_1_1),
4802 +                                       2);
4803 +       } else if (AR_SREV_9287_10_OR_LATER(ah)) {
4804 +               INIT_INI_ARRAY(&ah->iniModes, ar9287Modes_9287_1_0,
4805 +                               ARRAY_SIZE(ar9287Modes_9287_1_0), 6);
4806 +               INIT_INI_ARRAY(&ah->iniCommon, ar9287Common_9287_1_0,
4807 +                               ARRAY_SIZE(ar9287Common_9287_1_0), 2);
4808 +
4809 +               if (ah->config.pcie_clock_req)
4810 +                       INIT_INI_ARRAY(&ah->iniPcieSerdes,
4811 +                       ar9287PciePhy_clkreq_off_L1_9287_1_0,
4812 +                       ARRAY_SIZE(ar9287PciePhy_clkreq_off_L1_9287_1_0), 2);
4813 +               else
4814 +                       INIT_INI_ARRAY(&ah->iniPcieSerdes,
4815 +                       ar9287PciePhy_clkreq_always_on_L1_9287_1_0,
4816 +                       ARRAY_SIZE(ar9287PciePhy_clkreq_always_on_L1_9287_1_0),
4817 +                                 2);
4818 +       } else if (AR_SREV_9285_12_OR_LATER(ah)) {
4819 +
4820 +
4821 +               INIT_INI_ARRAY(&ah->iniModes, ar9285Modes_9285_1_2,
4822 +                              ARRAY_SIZE(ar9285Modes_9285_1_2), 6);
4823 +               INIT_INI_ARRAY(&ah->iniCommon, ar9285Common_9285_1_2,
4824 +                              ARRAY_SIZE(ar9285Common_9285_1_2), 2);
4825 +
4826 +               if (ah->config.pcie_clock_req) {
4827 +                       INIT_INI_ARRAY(&ah->iniPcieSerdes,
4828 +                       ar9285PciePhy_clkreq_off_L1_9285_1_2,
4829 +                       ARRAY_SIZE(ar9285PciePhy_clkreq_off_L1_9285_1_2), 2);
4830 +               } else {
4831 +                       INIT_INI_ARRAY(&ah->iniPcieSerdes,
4832 +                       ar9285PciePhy_clkreq_always_on_L1_9285_1_2,
4833 +                       ARRAY_SIZE(ar9285PciePhy_clkreq_always_on_L1_9285_1_2),
4834 +                                 2);
4835 +               }
4836 +       } else if (AR_SREV_9285_10_OR_LATER(ah)) {
4837 +               INIT_INI_ARRAY(&ah->iniModes, ar9285Modes_9285,
4838 +                              ARRAY_SIZE(ar9285Modes_9285), 6);
4839 +               INIT_INI_ARRAY(&ah->iniCommon, ar9285Common_9285,
4840 +                              ARRAY_SIZE(ar9285Common_9285), 2);
4841 +
4842 +               if (ah->config.pcie_clock_req) {
4843 +                       INIT_INI_ARRAY(&ah->iniPcieSerdes,
4844 +                       ar9285PciePhy_clkreq_off_L1_9285,
4845 +                       ARRAY_SIZE(ar9285PciePhy_clkreq_off_L1_9285), 2);
4846 +               } else {
4847 +                       INIT_INI_ARRAY(&ah->iniPcieSerdes,
4848 +                       ar9285PciePhy_clkreq_always_on_L1_9285,
4849 +                       ARRAY_SIZE(ar9285PciePhy_clkreq_always_on_L1_9285), 2);
4850 +               }
4851 +       } else if (AR_SREV_9280_20_OR_LATER(ah)) {
4852 +               INIT_INI_ARRAY(&ah->iniModes, ar9280Modes_9280_2,
4853 +                              ARRAY_SIZE(ar9280Modes_9280_2), 6);
4854 +               INIT_INI_ARRAY(&ah->iniCommon, ar9280Common_9280_2,
4855 +                              ARRAY_SIZE(ar9280Common_9280_2), 2);
4856 +
4857 +               if (ah->config.pcie_clock_req) {
4858 +                       INIT_INI_ARRAY(&ah->iniPcieSerdes,
4859 +                              ar9280PciePhy_clkreq_off_L1_9280,
4860 +                              ARRAY_SIZE(ar9280PciePhy_clkreq_off_L1_9280),2);
4861 +               } else {
4862 +                       INIT_INI_ARRAY(&ah->iniPcieSerdes,
4863 +                              ar9280PciePhy_clkreq_always_on_L1_9280,
4864 +                              ARRAY_SIZE(ar9280PciePhy_clkreq_always_on_L1_9280), 2);
4865 +               }
4866 +               INIT_INI_ARRAY(&ah->iniModesAdditional,
4867 +                              ar9280Modes_fast_clock_9280_2,
4868 +                              ARRAY_SIZE(ar9280Modes_fast_clock_9280_2), 3);
4869 +       } else if (AR_SREV_9280_10_OR_LATER(ah)) {
4870 +               INIT_INI_ARRAY(&ah->iniModes, ar9280Modes_9280,
4871 +                              ARRAY_SIZE(ar9280Modes_9280), 6);
4872 +               INIT_INI_ARRAY(&ah->iniCommon, ar9280Common_9280,
4873 +                              ARRAY_SIZE(ar9280Common_9280), 2);
4874 +       } else if (AR_SREV_9160_10_OR_LATER(ah)) {
4875 +               INIT_INI_ARRAY(&ah->iniModes, ar5416Modes_9160,
4876 +                              ARRAY_SIZE(ar5416Modes_9160), 6);
4877 +               INIT_INI_ARRAY(&ah->iniCommon, ar5416Common_9160,
4878 +                              ARRAY_SIZE(ar5416Common_9160), 2);
4879 +               INIT_INI_ARRAY(&ah->iniBank0, ar5416Bank0_9160,
4880 +                              ARRAY_SIZE(ar5416Bank0_9160), 2);
4881 +               INIT_INI_ARRAY(&ah->iniBB_RfGain, ar5416BB_RfGain_9160,
4882 +                              ARRAY_SIZE(ar5416BB_RfGain_9160), 3);
4883 +               INIT_INI_ARRAY(&ah->iniBank1, ar5416Bank1_9160,
4884 +                              ARRAY_SIZE(ar5416Bank1_9160), 2);
4885 +               INIT_INI_ARRAY(&ah->iniBank2, ar5416Bank2_9160,
4886 +                              ARRAY_SIZE(ar5416Bank2_9160), 2);
4887 +               INIT_INI_ARRAY(&ah->iniBank3, ar5416Bank3_9160,
4888 +                              ARRAY_SIZE(ar5416Bank3_9160), 3);
4889 +               INIT_INI_ARRAY(&ah->iniBank6, ar5416Bank6_9160,
4890 +                              ARRAY_SIZE(ar5416Bank6_9160), 3);
4891 +               INIT_INI_ARRAY(&ah->iniBank6TPC, ar5416Bank6TPC_9160,
4892 +                              ARRAY_SIZE(ar5416Bank6TPC_9160), 3);
4893 +               INIT_INI_ARRAY(&ah->iniBank7, ar5416Bank7_9160,
4894 +                              ARRAY_SIZE(ar5416Bank7_9160), 2);
4895 +               if (AR_SREV_9160_11(ah)) {
4896 +                       INIT_INI_ARRAY(&ah->iniAddac,
4897 +                                      ar5416Addac_91601_1,
4898 +                                      ARRAY_SIZE(ar5416Addac_91601_1), 2);
4899 +               } else {
4900 +                       INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac_9160,
4901 +                                      ARRAY_SIZE(ar5416Addac_9160), 2);
4902 +               }
4903 +       } else if (AR_SREV_9100_OR_LATER(ah)) {
4904 +               INIT_INI_ARRAY(&ah->iniModes, ar5416Modes_9100,
4905 +                              ARRAY_SIZE(ar5416Modes_9100), 6);
4906 +               INIT_INI_ARRAY(&ah->iniCommon, ar5416Common_9100,
4907 +                              ARRAY_SIZE(ar5416Common_9100), 2);
4908 +               INIT_INI_ARRAY(&ah->iniBank0, ar5416Bank0_9100,
4909 +                              ARRAY_SIZE(ar5416Bank0_9100), 2);
4910 +               INIT_INI_ARRAY(&ah->iniBB_RfGain, ar5416BB_RfGain_9100,
4911 +                              ARRAY_SIZE(ar5416BB_RfGain_9100), 3);
4912 +               INIT_INI_ARRAY(&ah->iniBank1, ar5416Bank1_9100,
4913 +                              ARRAY_SIZE(ar5416Bank1_9100), 2);
4914 +               INIT_INI_ARRAY(&ah->iniBank2, ar5416Bank2_9100,
4915 +                              ARRAY_SIZE(ar5416Bank2_9100), 2);
4916 +               INIT_INI_ARRAY(&ah->iniBank3, ar5416Bank3_9100,
4917 +                              ARRAY_SIZE(ar5416Bank3_9100), 3);
4918 +               INIT_INI_ARRAY(&ah->iniBank6, ar5416Bank6_9100,
4919 +                              ARRAY_SIZE(ar5416Bank6_9100), 3);
4920 +               INIT_INI_ARRAY(&ah->iniBank6TPC, ar5416Bank6TPC_9100,
4921 +                              ARRAY_SIZE(ar5416Bank6TPC_9100), 3);
4922 +               INIT_INI_ARRAY(&ah->iniBank7, ar5416Bank7_9100,
4923 +                              ARRAY_SIZE(ar5416Bank7_9100), 2);
4924 +               INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac_9100,
4925 +                              ARRAY_SIZE(ar5416Addac_9100), 2);
4926 +       } else {
4927 +               INIT_INI_ARRAY(&ah->iniModes, ar5416Modes,
4928 +                              ARRAY_SIZE(ar5416Modes), 6);
4929 +               INIT_INI_ARRAY(&ah->iniCommon, ar5416Common,
4930 +                              ARRAY_SIZE(ar5416Common), 2);
4931 +               INIT_INI_ARRAY(&ah->iniBank0, ar5416Bank0,
4932 +                              ARRAY_SIZE(ar5416Bank0), 2);
4933 +               INIT_INI_ARRAY(&ah->iniBB_RfGain, ar5416BB_RfGain,
4934 +                              ARRAY_SIZE(ar5416BB_RfGain), 3);
4935 +               INIT_INI_ARRAY(&ah->iniBank1, ar5416Bank1,
4936 +                              ARRAY_SIZE(ar5416Bank1), 2);
4937 +               INIT_INI_ARRAY(&ah->iniBank2, ar5416Bank2,
4938 +                              ARRAY_SIZE(ar5416Bank2), 2);
4939 +               INIT_INI_ARRAY(&ah->iniBank3, ar5416Bank3,
4940 +                              ARRAY_SIZE(ar5416Bank3), 3);
4941 +               INIT_INI_ARRAY(&ah->iniBank6, ar5416Bank6,
4942 +                              ARRAY_SIZE(ar5416Bank6), 3);
4943 +               INIT_INI_ARRAY(&ah->iniBank6TPC, ar5416Bank6TPC,
4944 +                              ARRAY_SIZE(ar5416Bank6TPC), 3);
4945 +               INIT_INI_ARRAY(&ah->iniBank7, ar5416Bank7,
4946 +                              ARRAY_SIZE(ar5416Bank7), 2);
4947 +               INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac,
4948 +                              ARRAY_SIZE(ar5416Addac), 2);
4949 +       }
4950 +}
4951 +
4952 +/* Support for Japan ch.14 (2484) spread */
4953 +void ar9002_hw_cck_chan14_spread(struct ath_hw *ah)
4954 +{
4955 +       if (AR_SREV_9287_11_OR_LATER(ah)) {
4956 +               INIT_INI_ARRAY(&ah->iniCckfirNormal,
4957 +                      ar9287Common_normal_cck_fir_coeff_92871_1,
4958 +                      ARRAY_SIZE(ar9287Common_normal_cck_fir_coeff_92871_1), 2);
4959 +               INIT_INI_ARRAY(&ah->iniCckfirJapan2484,
4960 +                      ar9287Common_japan_2484_cck_fir_coeff_92871_1,
4961 +                      ARRAY_SIZE(ar9287Common_japan_2484_cck_fir_coeff_92871_1), 2);
4962 +       }
4963 +}
4964 +
4965 +static void ar9280_20_hw_init_rxgain_ini(struct ath_hw *ah)
4966 +{
4967 +       u32 rxgain_type;
4968 +
4969 +       if (ah->eep_ops->get_eeprom(ah, EEP_MINOR_REV) >= AR5416_EEP_MINOR_VER_17) {
4970 +               rxgain_type = ah->eep_ops->get_eeprom(ah, EEP_RXGAIN_TYPE);
4971 +
4972 +               if (rxgain_type == AR5416_EEP_RXGAIN_13DB_BACKOFF)
4973 +                       INIT_INI_ARRAY(&ah->iniModesRxGain,
4974 +                       ar9280Modes_backoff_13db_rxgain_9280_2,
4975 +                       ARRAY_SIZE(ar9280Modes_backoff_13db_rxgain_9280_2), 6);
4976 +               else if (rxgain_type == AR5416_EEP_RXGAIN_23DB_BACKOFF)
4977 +                       INIT_INI_ARRAY(&ah->iniModesRxGain,
4978 +                       ar9280Modes_backoff_23db_rxgain_9280_2,
4979 +                       ARRAY_SIZE(ar9280Modes_backoff_23db_rxgain_9280_2), 6);
4980 +               else
4981 +                       INIT_INI_ARRAY(&ah->iniModesRxGain,
4982 +                       ar9280Modes_original_rxgain_9280_2,
4983 +                       ARRAY_SIZE(ar9280Modes_original_rxgain_9280_2), 6);
4984 +       } else {
4985 +               INIT_INI_ARRAY(&ah->iniModesRxGain,
4986 +                       ar9280Modes_original_rxgain_9280_2,
4987 +                       ARRAY_SIZE(ar9280Modes_original_rxgain_9280_2), 6);
4988 +       }
4989 +}
4990 +
4991 +static void ar9280_20_hw_init_txgain_ini(struct ath_hw *ah)
4992 +{
4993 +       u32 txgain_type;
4994 +
4995 +       if (ah->eep_ops->get_eeprom(ah, EEP_MINOR_REV) >= AR5416_EEP_MINOR_VER_19) {
4996 +               txgain_type = ah->eep_ops->get_eeprom(ah, EEP_TXGAIN_TYPE);
4997 +
4998 +               if (txgain_type == AR5416_EEP_TXGAIN_HIGH_POWER)
4999 +                       INIT_INI_ARRAY(&ah->iniModesTxGain,
5000 +                       ar9280Modes_high_power_tx_gain_9280_2,
5001 +                       ARRAY_SIZE(ar9280Modes_high_power_tx_gain_9280_2), 6);
5002 +               else
5003 +                       INIT_INI_ARRAY(&ah->iniModesTxGain,
5004 +                       ar9280Modes_original_tx_gain_9280_2,
5005 +                       ARRAY_SIZE(ar9280Modes_original_tx_gain_9280_2), 6);
5006 +       } else {
5007 +               INIT_INI_ARRAY(&ah->iniModesTxGain,
5008 +               ar9280Modes_original_tx_gain_9280_2,
5009 +               ARRAY_SIZE(ar9280Modes_original_tx_gain_9280_2), 6);
5010 +       }
5011 +}
5012 +
5013 +static void ar9002_hw_init_mode_gain_regs(struct ath_hw *ah)
5014 +{
5015 +       if (AR_SREV_9287_11_OR_LATER(ah))
5016 +               INIT_INI_ARRAY(&ah->iniModesRxGain,
5017 +               ar9287Modes_rx_gain_9287_1_1,
5018 +               ARRAY_SIZE(ar9287Modes_rx_gain_9287_1_1), 6);
5019 +       else if (AR_SREV_9287_10(ah))
5020 +               INIT_INI_ARRAY(&ah->iniModesRxGain,
5021 +               ar9287Modes_rx_gain_9287_1_0,
5022 +               ARRAY_SIZE(ar9287Modes_rx_gain_9287_1_0), 6);
5023 +       else if (AR_SREV_9280_20(ah))
5024 +               ar9280_20_hw_init_rxgain_ini(ah);
5025 +
5026 +       if (AR_SREV_9287_11_OR_LATER(ah)) {
5027 +               INIT_INI_ARRAY(&ah->iniModesTxGain,
5028 +               ar9287Modes_tx_gain_9287_1_1,
5029 +               ARRAY_SIZE(ar9287Modes_tx_gain_9287_1_1), 6);
5030 +       } else if (AR_SREV_9287_10(ah)) {
5031 +               INIT_INI_ARRAY(&ah->iniModesTxGain,
5032 +               ar9287Modes_tx_gain_9287_1_0,
5033 +               ARRAY_SIZE(ar9287Modes_tx_gain_9287_1_0), 6);
5034 +       } else if (AR_SREV_9280_20(ah)) {
5035 +               ar9280_20_hw_init_txgain_ini(ah);
5036 +       } else if (AR_SREV_9285_12_OR_LATER(ah)) {
5037 +               u32 txgain_type = ah->eep_ops->get_eeprom(ah, EEP_TXGAIN_TYPE);
5038 +
5039 +               /* txgain table */
5040 +               if (txgain_type == AR5416_EEP_TXGAIN_HIGH_POWER) {
5041 +                       if (AR_SREV_9285E_20(ah)) {
5042 +                               INIT_INI_ARRAY(&ah->iniModesTxGain,
5043 +                               ar9285Modes_XE2_0_high_power,
5044 +                               ARRAY_SIZE(
5045 +                                 ar9285Modes_XE2_0_high_power), 6);
5046 +                       } else {
5047 +                               INIT_INI_ARRAY(&ah->iniModesTxGain,
5048 +                               ar9285Modes_high_power_tx_gain_9285_1_2,
5049 +                               ARRAY_SIZE(
5050 +                                 ar9285Modes_high_power_tx_gain_9285_1_2), 6);
5051 +                       }
5052 +               } else {
5053 +                       if (AR_SREV_9285E_20(ah)) {
5054 +                               INIT_INI_ARRAY(&ah->iniModesTxGain,
5055 +                               ar9285Modes_XE2_0_normal_power,
5056 +                               ARRAY_SIZE(
5057 +                                 ar9285Modes_XE2_0_normal_power), 6);
5058 +                       } else {
5059 +                               INIT_INI_ARRAY(&ah->iniModesTxGain,
5060 +                               ar9285Modes_original_tx_gain_9285_1_2,
5061 +                               ARRAY_SIZE(
5062 +                                 ar9285Modes_original_tx_gain_9285_1_2), 6);
5063 +                       }
5064 +               }
5065 +       }
5066 +}
5067 +
5068 +/*
5069 + * Helper for ASPM support.
5070 + *
5071 + * Disable PLL when in L0s as well as receiver clock when in L1.
5072 + * This power saving option must be enabled through the SerDes.
5073 + *
5074 + * Programming the SerDes must go through the same 288 bit serial shift
5075 + * register as the other analog registers.  Hence the 9 writes.
5076 + */
5077 +static void ar9002_hw_configpcipowersave(struct ath_hw *ah,
5078 +                                        int restore,
5079 +                                        int power_off)
5080 +{
5081 +       u8 i;
5082 +       u32 val;
5083 +
5084 +       if (ah->is_pciexpress != true)
5085 +               return;
5086 +
5087 +       /* Do not touch SerDes registers */
5088 +       if (ah->config.pcie_powersave_enable == 2)
5089 +               return;
5090 +
5091 +       /* Nothing to do on restore for 11N */
5092 +       if (!restore) {
5093 +               if (AR_SREV_9280_20_OR_LATER(ah)) {
5094 +                       /*
5095 +                        * AR9280 2.0 or later chips use SerDes values from the
5096 +                        * initvals.h initialized depending on chipset during
5097 +                        * __ath9k_hw_init()
5098 +                        */
5099 +                       for (i = 0; i < ah->iniPcieSerdes.ia_rows; i++) {
5100 +                               REG_WRITE(ah, INI_RA(&ah->iniPcieSerdes, i, 0),
5101 +                                         INI_RA(&ah->iniPcieSerdes, i, 1));
5102 +                       }
5103 +               } else if (AR_SREV_9280(ah) &&
5104 +                          (ah->hw_version.macRev == AR_SREV_REVISION_9280_10)) {
5105 +                       REG_WRITE(ah, AR_PCIE_SERDES, 0x9248fd00);
5106 +                       REG_WRITE(ah, AR_PCIE_SERDES, 0x24924924);
5107 +
5108 +                       /* RX shut off when elecidle is asserted */
5109 +                       REG_WRITE(ah, AR_PCIE_SERDES, 0xa8000019);
5110 +                       REG_WRITE(ah, AR_PCIE_SERDES, 0x13160820);
5111 +                       REG_WRITE(ah, AR_PCIE_SERDES, 0xe5980560);
5112 +
5113 +                       /* Shut off CLKREQ active in L1 */
5114 +                       if (ah->config.pcie_clock_req)
5115 +                               REG_WRITE(ah, AR_PCIE_SERDES, 0x401deffc);
5116 +                       else
5117 +                               REG_WRITE(ah, AR_PCIE_SERDES, 0x401deffd);
5118 +
5119 +                       REG_WRITE(ah, AR_PCIE_SERDES, 0x1aaabe40);
5120 +                       REG_WRITE(ah, AR_PCIE_SERDES, 0xbe105554);
5121 +                       REG_WRITE(ah, AR_PCIE_SERDES, 0x00043007);
5122 +
5123 +                       /* Load the new settings */
5124 +                       REG_WRITE(ah, AR_PCIE_SERDES2, 0x00000000);
5125 +
5126 +               } else {
5127 +                       REG_WRITE(ah, AR_PCIE_SERDES, 0x9248fc00);
5128 +                       REG_WRITE(ah, AR_PCIE_SERDES, 0x24924924);
5129 +
5130 +                       /* RX shut off when elecidle is asserted */
5131 +                       REG_WRITE(ah, AR_PCIE_SERDES, 0x28000039);
5132 +                       REG_WRITE(ah, AR_PCIE_SERDES, 0x53160824);
5133 +                       REG_WRITE(ah, AR_PCIE_SERDES, 0xe5980579);
5134 +
5135 +                       /*
5136 +                        * Ignore ah->ah_config.pcie_clock_req setting for
5137 +                        * pre-AR9280 11n
5138 +                        */
5139 +                       REG_WRITE(ah, AR_PCIE_SERDES, 0x001defff);
5140 +
5141 +                       REG_WRITE(ah, AR_PCIE_SERDES, 0x1aaabe40);
5142 +                       REG_WRITE(ah, AR_PCIE_SERDES, 0xbe105554);
5143 +                       REG_WRITE(ah, AR_PCIE_SERDES, 0x000e3007);
5144 +
5145 +                       /* Load the new settings */
5146 +                       REG_WRITE(ah, AR_PCIE_SERDES2, 0x00000000);
5147 +               }
5148 +
5149 +               udelay(1000);
5150 +
5151 +               /* set bit 19 to allow forcing of pcie core into L1 state */
5152 +               REG_SET_BIT(ah, AR_PCIE_PM_CTRL, AR_PCIE_PM_CTRL_ENA);
5153 +
5154 +               /* Several PCIe massages to ensure proper behaviour */
5155 +               if (ah->config.pcie_waen) {
5156 +                       val = ah->config.pcie_waen;
5157 +                       if (!power_off)
5158 +                               val &= (~AR_WA_D3_L1_DISABLE);
5159 +               } else {
5160 +                       if (AR_SREV_9285(ah) || AR_SREV_9271(ah) ||
5161 +                           AR_SREV_9287(ah)) {
5162 +                               val = AR9285_WA_DEFAULT;
5163 +                               if (!power_off)
5164 +                                       val &= (~AR_WA_D3_L1_DISABLE);
5165 +                       } else if (AR_SREV_9280(ah)) {
5166 +                               /*
5167 +                                * On AR9280 chips bit 22 of 0x4004 needs to be
5168 +                                * set otherwise card may disappear.
5169 +                                */
5170 +                               val = AR9280_WA_DEFAULT;
5171 +                               if (!power_off)
5172 +                                       val &= (~AR_WA_D3_L1_DISABLE);
5173 +                       } else
5174 +                               val = AR_WA_DEFAULT;
5175 +               }
5176 +
5177 +               REG_WRITE(ah, AR_WA, val);
5178 +       }
5179 +
5180 +       if (power_off) {
5181 +               /*
5182 +                * Set PCIe workaround bits
5183 +                * bit 14 in WA register (disable L1) should only
5184 +                * be set when device enters D3 and be cleared
5185 +                * when device comes back to D0.
5186 +                */
5187 +               if (ah->config.pcie_waen) {
5188 +                       if (ah->config.pcie_waen & AR_WA_D3_L1_DISABLE)
5189 +                               REG_SET_BIT(ah, AR_WA, AR_WA_D3_L1_DISABLE);
5190 +               } else {
5191 +                       if (((AR_SREV_9285(ah) || AR_SREV_9271(ah) ||
5192 +                             AR_SREV_9287(ah)) &&
5193 +                            (AR9285_WA_DEFAULT & AR_WA_D3_L1_DISABLE)) ||
5194 +                           (AR_SREV_9280(ah) &&
5195 +                            (AR9280_WA_DEFAULT & AR_WA_D3_L1_DISABLE))) {
5196 +                               REG_SET_BIT(ah, AR_WA, AR_WA_D3_L1_DISABLE);
5197 +                       }
5198 +               }
5199 +       }
5200 +}
5201 +
5202 +static void ar9002_hw_init_eeprom_fix(struct ath_hw *ah)
5203 +{
5204 +       struct base_eep_header *pBase = &(ah->eeprom.def.baseEepHeader);
5205 +       struct ath_common *common = ath9k_hw_common(ah);
5206 +
5207 +       ah->need_an_top2_fixup = (ah->hw_version.devid == AR9280_DEVID_PCI) &&
5208 +                                !AR_SREV_9285(ah) && !AR_SREV_9271(ah) &&
5209 +                                ((pBase->version & 0xff) > 0x0a) &&
5210 +                                (pBase->pwdclkind == 0);
5211 +
5212 +       if (ah->need_an_top2_fixup)
5213 +               ath_print(common, ATH_DBG_EEPROM,
5214 +                         "needs fixup for AR_AN_TOP2 register\n");
5215 +}
5216 +
5217 +
5218 +static int ar9002_hw_get_radiorev(struct ath_hw *ah)
5219 +{
5220 +       u32 val;
5221 +       int i;
5222 +
5223 +       REG_WRITE(ah, AR_PHY(0x36), 0x00007058);
5224 +
5225 +       for (i = 0; i < 8; i++)
5226 +               REG_WRITE(ah, AR_PHY(0x20), 0x00010000);
5227 +       val = (REG_READ(ah, AR_PHY(256)) >> 24) & 0xff;
5228 +       val = ((val & 0xf0) >> 4) | ((val & 0x0f) << 4);
5229 +
5230 +       return ath9k_hw_reverse_bits(val, 8);
5231 +}
5232 +
5233 +int ar9002_hw_rf_claim(struct ath_hw *ah)
5234 +{
5235 +       u32 val;
5236 +
5237 +       REG_WRITE(ah, AR_PHY(0), 0x00000007);
5238 +
5239 +       val = ar9002_hw_get_radiorev(ah);
5240 +       switch (val & AR_RADIO_SREV_MAJOR) {
5241 +       case 0:
5242 +               val = AR_RAD5133_SREV_MAJOR;
5243 +               break;
5244 +       case AR_RAD5133_SREV_MAJOR:
5245 +       case AR_RAD5122_SREV_MAJOR:
5246 +       case AR_RAD2133_SREV_MAJOR:
5247 +       case AR_RAD2122_SREV_MAJOR:
5248 +               break;
5249 +       default:
5250 +               ath_print(ath9k_hw_common(ah), ATH_DBG_FATAL,
5251 +                         "Radio Chip Rev 0x%02X not supported\n",
5252 +                         val & AR_RADIO_SREV_MAJOR);
5253 +               return -EOPNOTSUPP;
5254 +       }
5255 +
5256 +       ah->hw_version.analog5GhzRev = val;
5257 +
5258 +       return 0;
5259 +}
5260 +
5261 +/*
5262 + * Enable ASYNC FIFO
5263 + *
5264 + * If Async FIFO is enabled, the following counters change as MAC now runs
5265 + * at 117 Mhz instead of 88/44MHz when async FIFO is disabled.
5266 + *
5267 + * The values below tested for ht40 2 chain.
5268 + * Overwrite the delay/timeouts initialized in process ini.
5269 + */
5270 +void ar9002_hw_enable_async_fifo(struct ath_hw *ah)
5271 +{
5272 +       if (AR_SREV_9287_12_OR_LATER(ah)) {
5273 +               REG_WRITE(ah, AR_D_GBL_IFS_SIFS,
5274 +                         AR_D_GBL_IFS_SIFS_ASYNC_FIFO_DUR);
5275 +               REG_WRITE(ah, AR_D_GBL_IFS_SLOT,
5276 +                         AR_D_GBL_IFS_SLOT_ASYNC_FIFO_DUR);
5277 +               REG_WRITE(ah, AR_D_GBL_IFS_EIFS,
5278 +                         AR_D_GBL_IFS_EIFS_ASYNC_FIFO_DUR);
5279 +
5280 +               REG_WRITE(ah, AR_TIME_OUT, AR_TIME_OUT_ACK_CTS_ASYNC_FIFO_DUR);
5281 +               REG_WRITE(ah, AR_USEC, AR_USEC_ASYNC_FIFO_DUR);
5282 +
5283 +               REG_SET_BIT(ah, AR_MAC_PCU_LOGIC_ANALYZER,
5284 +                           AR_MAC_PCU_LOGIC_ANALYZER_DISBUG20768);
5285 +               REG_RMW_FIELD(ah, AR_AHB_MODE, AR_AHB_CUSTOM_BURST_EN,
5286 +                             AR_AHB_CUSTOM_BURST_ASYNC_FIFO_VAL);
5287 +       }
5288 +}
5289 +
5290 +/*
5291 + * We don't enable WEP aggregation on mac80211 but we keep this
5292 + * around for HAL unification purposes.
5293 + */
5294 +void ar9002_hw_enable_wep_aggregation(struct ath_hw *ah)
5295 +{
5296 +       if (AR_SREV_9287_12_OR_LATER(ah)) {
5297 +               REG_SET_BIT(ah, AR_PCU_MISC_MODE2,
5298 +                               AR_PCU_MISC_MODE2_ENABLE_AGGWEP);
5299 +       }
5300 +}
5301 +
5302 +/* Sets up the AR5008/AR9001/AR9002 hardware familiy callbacks */
5303 +void ar9002_hw_attach_ops(struct ath_hw *ah)
5304 +{
5305 +       struct ath_hw_private_ops *priv_ops = ath9k_hw_private_ops(ah);
5306 +       struct ath_hw_ops *ops = ath9k_hw_ops(ah);
5307 +
5308 +       priv_ops->init_mode_regs = ar9002_hw_init_mode_regs;
5309 +       priv_ops->init_mode_gain_regs = ar9002_hw_init_mode_gain_regs;
5310 +       priv_ops->macversion_supported = ar9002_hw_macversion_supported;
5311 +
5312 +       ops->config_pci_powersave = ar9002_hw_configpcipowersave;
5313 +
5314 +       ar5008_hw_attach_phy_ops(ah);
5315 +       if (AR_SREV_9280_10_OR_LATER(ah))
5316 +               ar9002_hw_attach_phy_ops(ah);
5317 +
5318 +       ar9002_hw_attach_calib_ops(ah);
5319 +       ar9002_hw_attach_mac_ops(ah);
5320 +       ar9002_hw_init_eeprom_fix(ah);
5321 +}
5322 diff --git a/drivers/net/wireless/ath/ath9k/ar9002_initvals.h b/drivers/net/wireless/ath/ath9k/ar9002_initvals.h
5323 new file mode 100644
5324 index 0000000..a0711c7
5325 --- /dev/null
5326 +++ b/drivers/net/wireless/ath/ath9k/ar9002_initvals.h
5327 @@ -0,0 +1,7768 @@
5328 +/*
5329 + * Copyright (c) 2010 Atheros Communications Inc.
5330 + *
5331 + * Permission to use, copy, modify, and/or distribute this software for any
5332 + * purpose with or without fee is hereby granted, provided that the above
5333 + * copyright notice and this permission notice appear in all copies.
5334 + *
5335 + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
5336 + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
5337 + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
5338 + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
5339 + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
5340 + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
5341 + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
5342 + */
5343 +
5344 +#ifndef INITVALS_9002_10_H
5345 +#define INITVALS_9002_10_H
5346 +
5347 +static const u32 ar9280Modes_9280[][6] = {
5348 +       {0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160,
5349 +        0x000001e0},
5350 +       {0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c,
5351 +        0x000001e0},
5352 +       {0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38,
5353 +        0x00001180},
5354 +       {0x000010f0, 0x0000a000, 0x00014000, 0x00016000, 0x0000b000,
5355 +        0x00014008},
5356 +       {0x00008014, 0x03e803e8, 0x07d007d0, 0x10801080, 0x08400840,
5357 +        0x06e006e0},
5358 +       {0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b,
5359 +        0x0988004f},
5360 +       {0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300,
5361 +        0x00000303},
5362 +       {0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200,
5363 +        0x02020200},
5364 +       {0x00009824, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e,
5365 +        0x00000e0e},
5366 +       {0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001,
5367 +        0x0a020001},
5368 +       {0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e,
5369 +        0x00000e0e},
5370 +       {0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007,
5371 +        0x00000007},
5372 +       {0x00009844, 0x1372161e, 0x1372161e, 0x137216a0, 0x137216a0,
5373 +        0x137216a0},
5374 +       {0x00009848, 0x00028566, 0x00028566, 0x00028563, 0x00028563,
5375 +        0x00028563},
5376 +       {0x0000a848, 0x00028566, 0x00028566, 0x00028563, 0x00028563,
5377 +        0x00028563},
5378 +       {0x00009850, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2,
5379 +        0x6d4000e2},
5380 +       {0x00009858, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e,
5381 +        0x7ec82d2e},
5382 +       {0x0000985c, 0x3139605e, 0x3139605e, 0x3139605e, 0x3139605e,
5383 +        0x3139605e},
5384 +       {0x00009860, 0x00049d18, 0x00049d18, 0x00049d20, 0x00049d20,
5385 +        0x00049d18},
5386 +       {0x0000c864, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00,
5387 +        0x0001ce00},
5388 +       {0x00009868, 0x5ac64190, 0x5ac64190, 0x5ac64190, 0x5ac64190,
5389 +        0x5ac64190},
5390 +       {0x0000986c, 0x06903081, 0x06903081, 0x06903881, 0x06903881,
5391 +        0x06903881},
5392 +       {0x00009914, 0x000007d0, 0x000007d0, 0x00000898, 0x00000898,
5393 +        0x000007d0},
5394 +       {0x00009918, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b,
5395 +        0x00000016},
5396 +       {0x00009924, 0xd00a8a07, 0xd00a8a07, 0xd00a8a0d, 0xd00a8a0d,
5397 +        0xd00a8a0d},
5398 +       {0x00009944, 0xdfbc1010, 0xdfbc1010, 0xdfbc1010, 0xdfbc1010,
5399 +        0xdfbc1010},
5400 +       {0x00009960, 0x00000010, 0x00000010, 0x00000010, 0x00000010,
5401 +        0x00000010},
5402 +       {0x0000a960, 0x00000010, 0x00000010, 0x00000010, 0x00000010,
5403 +        0x00000010},
5404 +       {0x00009964, 0x00000210, 0x00000210, 0x00000210, 0x00000210,
5405 +        0x00000210},
5406 +       {0x0000c9b8, 0x0000001a, 0x0000001a, 0x0000001a, 0x0000001a,
5407 +        0x0000001a},
5408 +       {0x0000c9bc, 0x00000600, 0x00000600, 0x00000c00, 0x00000c00,
5409 +        0x00000c00},
5410 +       {0x000099c0, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4,
5411 +        0x05eea6d4},
5412 +       {0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77,
5413 +        0x06336f77},
5414 +       {0x000099c8, 0x60f6532c, 0x60f6532c, 0x60f6532c, 0x60f6532c,
5415 +        0x60f6532c},
5416 +       {0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8,
5417 +        0x08f186c8},
5418 +       {0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384,
5419 +        0x00046384},
5420 +       {0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
5421 +        0x00000000},
5422 +       {0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
5423 +        0x00000000},
5424 +       {0x00009a00, 0x00008184, 0x00008184, 0x00000214, 0x00000214,
5425 +        0x00000214},
5426 +       {0x00009a04, 0x00008188, 0x00008188, 0x00000218, 0x00000218,
5427 +        0x00000218},
5428 +       {0x00009a08, 0x0000818c, 0x0000818c, 0x00000224, 0x00000224,
5429 +        0x00000224},
5430 +       {0x00009a0c, 0x00008190, 0x00008190, 0x00000228, 0x00000228,
5431 +        0x00000228},
5432 +       {0x00009a10, 0x00008194, 0x00008194, 0x0000022c, 0x0000022c,
5433 +        0x0000022c},
5434 +       {0x00009a14, 0x00008200, 0x00008200, 0x00000230, 0x00000230,
5435 +        0x00000230},
5436 +       {0x00009a18, 0x00008204, 0x00008204, 0x000002a4, 0x000002a4,
5437 +        0x000002a4},
5438 +       {0x00009a1c, 0x00008208, 0x00008208, 0x000002a8, 0x000002a8,
5439 +        0x000002a8},
5440 +       {0x00009a20, 0x0000820c, 0x0000820c, 0x000002ac, 0x000002ac,
5441 +        0x000002ac},
5442 +       {0x00009a24, 0x00008210, 0x00008210, 0x000002b0, 0x000002b0,
5443 +        0x000002b0},
5444 +       {0x00009a28, 0x00008214, 0x00008214, 0x000002b4, 0x000002b4,
5445 +        0x000002b4},
5446 +       {0x00009a2c, 0x00008280, 0x00008280, 0x000002b8, 0x000002b8,
5447 +        0x000002b8},
5448 +       {0x00009a30, 0x00008284, 0x00008284, 0x00000390, 0x00000390,
5449 +        0x00000390},
5450 +       {0x00009a34, 0x00008288, 0x00008288, 0x00000394, 0x00000394,
5451 +        0x00000394},
5452 +       {0x00009a38, 0x0000828c, 0x0000828c, 0x00000398, 0x00000398,
5453 +        0x00000398},
5454 +       {0x00009a3c, 0x00008290, 0x00008290, 0x00000334, 0x00000334,
5455 +        0x00000334},
5456 +       {0x00009a40, 0x00008300, 0x00008300, 0x00000338, 0x00000338,
5457 +        0x00000338},
5458 +       {0x00009a44, 0x00008304, 0x00008304, 0x000003ac, 0x000003ac,
5459 +        0x000003ac},
5460 +       {0x00009a48, 0x00008308, 0x00008308, 0x000003b0, 0x000003b0,
5461 +        0x000003b0},
5462 +       {0x00009a4c, 0x0000830c, 0x0000830c, 0x000003b4, 0x000003b4,
5463 +        0x000003b4},
5464 +       {0x00009a50, 0x00008310, 0x00008310, 0x000003b8, 0x000003b8,
5465 +        0x000003b8},
5466 +       {0x00009a54, 0x00008314, 0x00008314, 0x000003a5, 0x000003a5,
5467 +        0x000003a5},
5468 +       {0x00009a58, 0x00008380, 0x00008380, 0x000003a9, 0x000003a9,
5469 +        0x000003a9},
5470 +       {0x00009a5c, 0x00008384, 0x00008384, 0x000003ad, 0x000003ad,
5471 +        0x000003ad},
5472 +       {0x00009a60, 0x00008388, 0x00008388, 0x00008194, 0x00008194,
5473 +        0x00008194},
5474 +       {0x00009a64, 0x0000838c, 0x0000838c, 0x000081a0, 0x000081a0,
5475 +        0x000081a0},
5476 +       {0x00009a68, 0x00008390, 0x00008390, 0x0000820c, 0x0000820c,
5477 +        0x0000820c},
5478 +       {0x00009a6c, 0x00008394, 0x00008394, 0x000081a8, 0x000081a8,
5479 +        0x000081a8},
5480 +       {0x00009a70, 0x0000a380, 0x0000a380, 0x00008284, 0x00008284,
5481 +        0x00008284},
5482 +       {0x00009a74, 0x0000a384, 0x0000a384, 0x00008288, 0x00008288,
5483 +        0x00008288},
5484 +       {0x00009a78, 0x0000a388, 0x0000a388, 0x00008224, 0x00008224,
5485 +        0x00008224},
5486 +       {0x00009a7c, 0x0000a38c, 0x0000a38c, 0x00008290, 0x00008290,
5487 +        0x00008290},
5488 +       {0x00009a80, 0x0000a390, 0x0000a390, 0x00008300, 0x00008300,
5489 +        0x00008300},
5490 +       {0x00009a84, 0x0000a394, 0x0000a394, 0x00008304, 0x00008304,
5491 +        0x00008304},
5492 +       {0x00009a88, 0x0000a780, 0x0000a780, 0x00008308, 0x00008308,
5493 +        0x00008308},
5494 +       {0x00009a8c, 0x0000a784, 0x0000a784, 0x0000830c, 0x0000830c,
5495 +        0x0000830c},
5496 +       {0x00009a90, 0x0000a788, 0x0000a788, 0x00008380, 0x00008380,
5497 +        0x00008380},
5498 +       {0x00009a94, 0x0000a78c, 0x0000a78c, 0x00008384, 0x00008384,
5499 +        0x00008384},
5500 +       {0x00009a98, 0x0000a790, 0x0000a790, 0x00008700, 0x00008700,
5501 +        0x00008700},
5502 +       {0x00009a9c, 0x0000a794, 0x0000a794, 0x00008704, 0x00008704,
5503 +        0x00008704},
5504 +       {0x00009aa0, 0x0000ab84, 0x0000ab84, 0x00008708, 0x00008708,
5505 +        0x00008708},
5506 +       {0x00009aa4, 0x0000ab88, 0x0000ab88, 0x0000870c, 0x0000870c,
5507 +        0x0000870c},
5508 +       {0x00009aa8, 0x0000ab8c, 0x0000ab8c, 0x00008780, 0x00008780,
5509 +        0x00008780},
5510 +       {0x00009aac, 0x0000ab90, 0x0000ab90, 0x00008784, 0x00008784,
5511 +        0x00008784},
5512 +       {0x00009ab0, 0x0000ab94, 0x0000ab94, 0x00008b00, 0x00008b00,
5513 +        0x00008b00},
5514 +       {0x00009ab4, 0x0000af80, 0x0000af80, 0x00008b04, 0x00008b04,
5515 +        0x00008b04},
5516 +       {0x00009ab8, 0x0000af84, 0x0000af84, 0x00008b08, 0x00008b08,
5517 +        0x00008b08},
5518 +       {0x00009abc, 0x0000af88, 0x0000af88, 0x00008b0c, 0x00008b0c,
5519 +        0x00008b0c},
5520 +       {0x00009ac0, 0x0000af8c, 0x0000af8c, 0x00008b80, 0x00008b80,
5521 +        0x00008b80},
5522 +       {0x00009ac4, 0x0000af90, 0x0000af90, 0x00008b84, 0x00008b84,
5523 +        0x00008b84},
5524 +       {0x00009ac8, 0x0000af94, 0x0000af94, 0x00008b88, 0x00008b88,
5525 +        0x00008b88},
5526 +       {0x00009acc, 0x0000b380, 0x0000b380, 0x00008b8c, 0x00008b8c,
5527 +        0x00008b8c},
5528 +       {0x00009ad0, 0x0000b384, 0x0000b384, 0x00008b90, 0x00008b90,
5529 +        0x00008b90},
5530 +       {0x00009ad4, 0x0000b388, 0x0000b388, 0x00008f80, 0x00008f80,
5531 +        0x00008f80},
5532 +       {0x00009ad8, 0x0000b38c, 0x0000b38c, 0x00008f84, 0x00008f84,
5533 +        0x00008f84},
5534 +       {0x00009adc, 0x0000b390, 0x0000b390, 0x00008f88, 0x00008f88,
5535 +        0x00008f88},
5536 +       {0x00009ae0, 0x0000b394, 0x0000b394, 0x00008f8c, 0x00008f8c,
5537 +        0x00008f8c},
5538 +       {0x00009ae4, 0x0000b398, 0x0000b398, 0x00008f90, 0x00008f90,
5539 +        0x00008f90},
5540 +       {0x00009ae8, 0x0000b780, 0x0000b780, 0x0000930c, 0x0000930c,
5541 +        0x0000930c},
5542 +       {0x00009aec, 0x0000b784, 0x0000b784, 0x00009310, 0x00009310,
5543 +        0x00009310},
5544 +       {0x00009af0, 0x0000b788, 0x0000b788, 0x00009384, 0x00009384,
5545 +        0x00009384},
5546 +       {0x00009af4, 0x0000b78c, 0x0000b78c, 0x00009388, 0x00009388,
5547 +        0x00009388},
5548 +       {0x00009af8, 0x0000b790, 0x0000b790, 0x00009324, 0x00009324,
5549 +        0x00009324},
5550 +       {0x00009afc, 0x0000b794, 0x0000b794, 0x00009704, 0x00009704,
5551 +        0x00009704},
5552 +       {0x00009b00, 0x0000b798, 0x0000b798, 0x000096a4, 0x000096a4,
5553 +        0x000096a4},
5554 +       {0x00009b04, 0x0000d784, 0x0000d784, 0x000096a8, 0x000096a8,
5555 +        0x000096a8},
5556 +       {0x00009b08, 0x0000d788, 0x0000d788, 0x00009710, 0x00009710,
5557 +        0x00009710},
5558 +       {0x00009b0c, 0x0000d78c, 0x0000d78c, 0x00009714, 0x00009714,
5559 +        0x00009714},
5560 +       {0x00009b10, 0x0000d790, 0x0000d790, 0x00009720, 0x00009720,
5561 +        0x00009720},
5562 +       {0x00009b14, 0x0000f780, 0x0000f780, 0x00009724, 0x00009724,
5563 +        0x00009724},
5564 +       {0x00009b18, 0x0000f784, 0x0000f784, 0x00009728, 0x00009728,
5565 +        0x00009728},
5566 +       {0x00009b1c, 0x0000f788, 0x0000f788, 0x0000972c, 0x0000972c,
5567 +        0x0000972c},
5568 +       {0x00009b20, 0x0000f78c, 0x0000f78c, 0x000097a0, 0x000097a0,
5569 +        0x000097a0},
5570 +       {0x00009b24, 0x0000f790, 0x0000f790, 0x000097a4, 0x000097a4,
5571 +        0x000097a4},
5572 +       {0x00009b28, 0x0000f794, 0x0000f794, 0x000097a8, 0x000097a8,
5573 +        0x000097a8},
5574 +       {0x00009b2c, 0x0000f7a4, 0x0000f7a4, 0x000097b0, 0x000097b0,
5575 +        0x000097b0},
5576 +       {0x00009b30, 0x0000f7a8, 0x0000f7a8, 0x000097b4, 0x000097b4,
5577 +        0x000097b4},
5578 +       {0x00009b34, 0x0000f7ac, 0x0000f7ac, 0x000097b8, 0x000097b8,
5579 +        0x000097b8},
5580 +       {0x00009b38, 0x0000f7b0, 0x0000f7b0, 0x000097a5, 0x000097a5,
5581 +        0x000097a5},
5582 +       {0x00009b3c, 0x0000f7b4, 0x0000f7b4, 0x000097a9, 0x000097a9,
5583 +        0x000097a9},
5584 +       {0x00009b40, 0x0000f7a1, 0x0000f7a1, 0x000097ad, 0x000097ad,
5585 +        0x000097ad},
5586 +       {0x00009b44, 0x0000f7a5, 0x0000f7a5, 0x000097b1, 0x000097b1,
5587 +        0x000097b1},
5588 +       {0x00009b48, 0x0000f7a9, 0x0000f7a9, 0x000097b5, 0x000097b5,
5589 +        0x000097b5},
5590 +       {0x00009b4c, 0x0000f7ad, 0x0000f7ad, 0x000097b9, 0x000097b9,
5591 +        0x000097b9},
5592 +       {0x00009b50, 0x0000f7b1, 0x0000f7b1, 0x000097c5, 0x000097c5,
5593 +        0x000097c5},
5594 +       {0x00009b54, 0x0000f7b5, 0x0000f7b5, 0x000097c9, 0x000097c9,
5595 +        0x000097c9},
5596 +       {0x00009b58, 0x0000f7c5, 0x0000f7c5, 0x000097d1, 0x000097d1,
5597 +        0x000097d1},
5598 +       {0x00009b5c, 0x0000f7c9, 0x0000f7c9, 0x000097d5, 0x000097d5,
5599 +        0x000097d5},
5600 +       {0x00009b60, 0x0000f7cd, 0x0000f7cd, 0x000097d9, 0x000097d9,
5601 +        0x000097d9},
5602 +       {0x00009b64, 0x0000f7d1, 0x0000f7d1, 0x000097c6, 0x000097c6,
5603 +        0x000097c6},
5604 +       {0x00009b68, 0x0000f7d5, 0x0000f7d5, 0x000097ca, 0x000097ca,
5605 +        0x000097ca},
5606 +       {0x00009b6c, 0x0000f7c2, 0x0000f7c2, 0x000097ce, 0x000097ce,
5607 +        0x000097ce},
5608 +       {0x00009b70, 0x0000f7c6, 0x0000f7c6, 0x000097d2, 0x000097d2,
5609 +        0x000097d2},
5610 +       {0x00009b74, 0x0000f7ca, 0x0000f7ca, 0x000097d6, 0x000097d6,
5611 +        0x000097d6},
5612 +       {0x00009b78, 0x0000f7ce, 0x0000f7ce, 0x000097c3, 0x000097c3,
5613 +        0x000097c3},
5614 +       {0x00009b7c, 0x0000f7d2, 0x0000f7d2, 0x000097c7, 0x000097c7,
5615 +        0x000097c7},
5616 +       {0x00009b80, 0x0000f7d6, 0x0000f7d6, 0x000097cb, 0x000097cb,
5617 +        0x000097cb},
5618 +       {0x00009b84, 0x0000f7c3, 0x0000f7c3, 0x000097cf, 0x000097cf,
5619 +        0x000097cf},
5620 +       {0x00009b88, 0x0000f7c7, 0x0000f7c7, 0x000097d7, 0x000097d7,
5621 +        0x000097d7},
5622 +       {0x00009b8c, 0x0000f7cb, 0x0000f7cb, 0x000097db, 0x000097db,
5623 +        0x000097db},
5624 +       {0x00009b90, 0x0000f7d3, 0x0000f7d3, 0x000097db, 0x000097db,
5625 +        0x000097db},
5626 +       {0x00009b94, 0x0000f7d7, 0x0000f7d7, 0x000097db, 0x000097db,
5627 +        0x000097db},
5628 +       {0x00009b98, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
5629 +        0x000097db},
5630 +       {0x00009b9c, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
5631 +        0x000097db},
5632 +       {0x00009ba0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
5633 +        0x000097db},
5634 +       {0x00009ba4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
5635 +        0x000097db},
5636 +       {0x00009ba8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
5637 +        0x000097db},
5638 +       {0x00009bac, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
5639 +        0x000097db},
5640 +       {0x00009bb0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
5641 +        0x000097db},
5642 +       {0x00009bb4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
5643 +        0x000097db},
5644 +       {0x00009bb8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
5645 +        0x000097db},
5646 +       {0x00009bbc, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
5647 +        0x000097db},
5648 +       {0x00009bc0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
5649 +        0x000097db},
5650 +       {0x00009bc4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
5651 +        0x000097db},
5652 +       {0x00009bc8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
5653 +        0x000097db},
5654 +       {0x00009bcc, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
5655 +        0x000097db},
5656 +       {0x00009bd0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
5657 +        0x000097db},
5658 +       {0x00009bd4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
5659 +        0x000097db},
5660 +       {0x00009bd8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
5661 +        0x000097db},
5662 +       {0x00009bdc, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
5663 +        0x000097db},
5664 +       {0x00009be0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
5665 +        0x000097db},
5666 +       {0x00009be4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
5667 +        0x000097db},
5668 +       {0x00009be8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
5669 +        0x000097db},
5670 +       {0x00009bec, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
5671 +        0x000097db},
5672 +       {0x00009bf0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
5673 +        0x000097db},
5674 +       {0x00009bf4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
5675 +        0x000097db},
5676 +       {0x00009bf8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
5677 +        0x000097db},
5678 +       {0x00009bfc, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
5679 +        0x000097db},
5680 +       {0x0000a204, 0x00000444, 0x00000444, 0x00000444, 0x00000444,
5681 +        0x00000444},
5682 +       {0x0000a208, 0x803e4788, 0x803e4788, 0x803e4788, 0x803e4788,
5683 +        0x803e4788},
5684 +       {0x0000a20c, 0x000c6019, 0x000c6019, 0x000c6019, 0x000c6019,
5685 +        0x000c6019},
5686 +       {0x0000b20c, 0x000c6019, 0x000c6019, 0x000c6019, 0x000c6019,
5687 +        0x000c6019},
5688 +       {0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a,
5689 +        0x1883800a},
5690 +       {0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108,
5691 +        0x00000000},
5692 +       {0x0000a274, 0x0a19c652, 0x0a19c652, 0x0a1aa652, 0x0a1aa652,
5693 +        0x0a1aa652},
5694 +       {0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
5695 +        0x00000000},
5696 +       {0x0000a304, 0x00003002, 0x00003002, 0x00003002, 0x00003002,
5697 +        0x00003002},
5698 +       {0x0000a308, 0x00006004, 0x00006004, 0x00008009, 0x00008009,
5699 +        0x00008009},
5700 +       {0x0000a30c, 0x0000a006, 0x0000a006, 0x0000b00b, 0x0000b00b,
5701 +        0x0000b00b},
5702 +       {0x0000a310, 0x0000e012, 0x0000e012, 0x0000e012, 0x0000e012,
5703 +        0x0000e012},
5704 +       {0x0000a314, 0x00011014, 0x00011014, 0x00012048, 0x00012048,
5705 +        0x00012048},
5706 +       {0x0000a318, 0x0001504a, 0x0001504a, 0x0001604a, 0x0001604a,
5707 +        0x0001604a},
5708 +       {0x0000a31c, 0x0001904c, 0x0001904c, 0x0001a211, 0x0001a211,
5709 +        0x0001a211},
5710 +       {0x0000a320, 0x0001c04e, 0x0001c04e, 0x0001e213, 0x0001e213,
5711 +        0x0001e213},
5712 +       {0x0000a324, 0x00020092, 0x00020092, 0x0002121b, 0x0002121b,
5713 +        0x0002121b},
5714 +       {0x0000a328, 0x0002410a, 0x0002410a, 0x00024412, 0x00024412,
5715 +        0x00024412},
5716 +       {0x0000a32c, 0x0002710c, 0x0002710c, 0x00028414, 0x00028414,
5717 +        0x00028414},
5718 +       {0x0000a330, 0x0002b18b, 0x0002b18b, 0x0002b44a, 0x0002b44a,
5719 +        0x0002b44a},
5720 +       {0x0000a334, 0x0002e1cc, 0x0002e1cc, 0x00030649, 0x00030649,
5721 +        0x00030649},
5722 +       {0x0000a338, 0x000321ec, 0x000321ec, 0x0003364b, 0x0003364b,
5723 +        0x0003364b},
5724 +       {0x0000a33c, 0x000321ec, 0x000321ec, 0x00038a49, 0x00038a49,
5725 +        0x00038a49},
5726 +       {0x0000a340, 0x000321ec, 0x000321ec, 0x0003be48, 0x0003be48,
5727 +        0x0003be48},
5728 +       {0x0000a344, 0x000321ec, 0x000321ec, 0x0003ee4a, 0x0003ee4a,
5729 +        0x0003ee4a},
5730 +       {0x0000a348, 0x000321ec, 0x000321ec, 0x00042e88, 0x00042e88,
5731 +        0x00042e88},
5732 +       {0x0000a34c, 0x000321ec, 0x000321ec, 0x00046e8a, 0x00046e8a,
5733 +        0x00046e8a},
5734 +       {0x0000a350, 0x000321ec, 0x000321ec, 0x00049ec9, 0x00049ec9,
5735 +        0x00049ec9},
5736 +       {0x0000a354, 0x000321ec, 0x000321ec, 0x0004bf42, 0x0004bf42,
5737 +        0x0004bf42},
5738 +       {0x0000784c, 0x0e4f048c, 0x0e4f048c, 0x0e4d048c, 0x0e4d048c,
5739 +        0x0e4d048c},
5740 +       {0x00007854, 0x12031828, 0x12031828, 0x12035828, 0x12035828,
5741 +        0x12035828},
5742 +       {0x00007870, 0x807ec400, 0x807ec400, 0x807ec000, 0x807ec000,
5743 +        0x807ec000},
5744 +       {0x0000788c, 0x00010000, 0x00010000, 0x00110000, 0x00110000,
5745 +        0x00110000},
5746 +};
5747 +
5748 +static const u32 ar9280Common_9280[][2] = {
5749 +       {0x0000000c, 0x00000000},
5750 +       {0x00000030, 0x00020015},
5751 +       {0x00000034, 0x00000005},
5752 +       {0x00000040, 0x00000000},
5753 +       {0x00000044, 0x00000008},
5754 +       {0x00000048, 0x00000008},
5755 +       {0x0000004c, 0x00000010},
5756 +       {0x00000050, 0x00000000},
5757 +       {0x00000054, 0x0000001f},
5758 +       {0x00000800, 0x00000000},
5759 +       {0x00000804, 0x00000000},
5760 +       {0x00000808, 0x00000000},
5761 +       {0x0000080c, 0x00000000},
5762 +       {0x00000810, 0x00000000},
5763 +       {0x00000814, 0x00000000},
5764 +       {0x00000818, 0x00000000},
5765 +       {0x0000081c, 0x00000000},
5766 +       {0x00000820, 0x00000000},
5767 +       {0x00000824, 0x00000000},
5768 +       {0x00001040, 0x002ffc0f},
5769 +       {0x00001044, 0x002ffc0f},
5770 +       {0x00001048, 0x002ffc0f},
5771 +       {0x0000104c, 0x002ffc0f},
5772 +       {0x00001050, 0x002ffc0f},
5773 +       {0x00001054, 0x002ffc0f},
5774 +       {0x00001058, 0x002ffc0f},
5775 +       {0x0000105c, 0x002ffc0f},
5776 +       {0x00001060, 0x002ffc0f},
5777 +       {0x00001064, 0x002ffc0f},
5778 +       {0x00001230, 0x00000000},
5779 +       {0x00001270, 0x00000000},
5780 +       {0x00001038, 0x00000000},
5781 +       {0x00001078, 0x00000000},
5782 +       {0x000010b8, 0x00000000},
5783 +       {0x000010f8, 0x00000000},
5784 +       {0x00001138, 0x00000000},
5785 +       {0x00001178, 0x00000000},
5786 +       {0x000011b8, 0x00000000},
5787 +       {0x000011f8, 0x00000000},
5788 +       {0x00001238, 0x00000000},
5789 +       {0x00001278, 0x00000000},
5790 +       {0x000012b8, 0x00000000},
5791 +       {0x000012f8, 0x00000000},
5792 +       {0x00001338, 0x00000000},
5793 +       {0x00001378, 0x00000000},
5794 +       {0x000013b8, 0x00000000},
5795 +       {0x000013f8, 0x00000000},
5796 +       {0x00001438, 0x00000000},
5797 +       {0x00001478, 0x00000000},
5798 +       {0x000014b8, 0x00000000},
5799 +       {0x000014f8, 0x00000000},
5800 +       {0x00001538, 0x00000000},
5801 +       {0x00001578, 0x00000000},
5802 +       {0x000015b8, 0x00000000},
5803 +       {0x000015f8, 0x00000000},
5804 +       {0x00001638, 0x00000000},
5805 +       {0x00001678, 0x00000000},
5806 +       {0x000016b8, 0x00000000},
5807 +       {0x000016f8, 0x00000000},
5808 +       {0x00001738, 0x00000000},
5809 +       {0x00001778, 0x00000000},
5810 +       {0x000017b8, 0x00000000},
5811 +       {0x000017f8, 0x00000000},
5812 +       {0x0000103c, 0x00000000},
5813 +       {0x0000107c, 0x00000000},
5814 +       {0x000010bc, 0x00000000},
5815 +       {0x000010fc, 0x00000000},
5816 +       {0x0000113c, 0x00000000},
5817 +       {0x0000117c, 0x00000000},
5818 +       {0x000011bc, 0x00000000},
5819 +       {0x000011fc, 0x00000000},
5820 +       {0x0000123c, 0x00000000},
5821 +       {0x0000127c, 0x00000000},
5822 +       {0x000012bc, 0x00000000},
5823 +       {0x000012fc, 0x00000000},
5824 +       {0x0000133c, 0x00000000},
5825 +       {0x0000137c, 0x00000000},
5826 +       {0x000013bc, 0x00000000},
5827 +       {0x000013fc, 0x00000000},
5828 +       {0x0000143c, 0x00000000},
5829 +       {0x0000147c, 0x00000000},
5830 +       {0x00004030, 0x00000002},
5831 +       {0x0000403c, 0x00000002},
5832 +       {0x00004024, 0x0000001f},
5833 +       {0x00007010, 0x00000033},
5834 +       {0x00007038, 0x000004c2},
5835 +       {0x00008004, 0x00000000},
5836 +       {0x00008008, 0x00000000},
5837 +       {0x0000800c, 0x00000000},
5838 +       {0x00008018, 0x00000700},
5839 +       {0x00008020, 0x00000000},
5840 +       {0x00008038, 0x00000000},
5841 +       {0x0000803c, 0x00000000},
5842 +       {0x00008048, 0x40000000},
5843 +       {0x00008054, 0x00000000},
5844 +       {0x00008058, 0x00000000},
5845 +       {0x0000805c, 0x000fc78f},
5846 +       {0x00008060, 0x0000000f},
5847 +       {0x00008064, 0x00000000},
5848 +       {0x00008070, 0x00000000},
5849 +       {0x000080c0, 0x2a82301a},
5850 +       {0x000080c4, 0x05dc01e0},
5851 +       {0x000080c8, 0x1f402710},
5852 +       {0x000080cc, 0x01f40000},
5853 +       {0x000080d0, 0x00001e00},
5854 +       {0x000080d4, 0x00000000},
5855 +       {0x000080d8, 0x00400000},
5856 +       {0x000080e0, 0xffffffff},
5857 +       {0x000080e4, 0x0000ffff},
5858 +       {0x000080e8, 0x003f3f3f},
5859 +       {0x000080ec, 0x00000000},
5860 +       {0x000080f0, 0x00000000},
5861 +       {0x000080f4, 0x00000000},
5862 +       {0x000080f8, 0x00000000},
5863 +       {0x000080fc, 0x00020000},
5864 +       {0x00008100, 0x00020000},
5865 +       {0x00008104, 0x00000001},
5866 +       {0x00008108, 0x00000052},
5867 +       {0x0000810c, 0x00000000},
5868 +       {0x00008110, 0x00000168},
5869 +       {0x00008118, 0x000100aa},
5870 +       {0x0000811c, 0x00003210},
5871 +       {0x00008120, 0x08f04800},
5872 +       {0x00008124, 0x00000000},
5873 +       {0x00008128, 0x00000000},
5874 +       {0x0000812c, 0x00000000},
5875 +       {0x00008130, 0x00000000},
5876 +       {0x00008134, 0x00000000},
5877 +       {0x00008138, 0x00000000},
5878 +       {0x0000813c, 0x00000000},
5879 +       {0x00008144, 0x00000000},
5880 +       {0x00008168, 0x00000000},
5881 +       {0x0000816c, 0x00000000},
5882 +       {0x00008170, 0x32143320},
5883 +       {0x00008174, 0xfaa4fa50},
5884 +       {0x00008178, 0x00000100},
5885 +       {0x0000817c, 0x00000000},
5886 +       {0x000081c4, 0x00000000},
5887 +       {0x000081d0, 0x00003210},
5888 +       {0x000081ec, 0x00000000},
5889 +       {0x000081f0, 0x00000000},
5890 +       {0x000081f4, 0x00000000},
5891 +       {0x000081f8, 0x00000000},
5892 +       {0x000081fc, 0x00000000},
5893 +       {0x00008200, 0x00000000},
5894 +       {0x00008204, 0x00000000},
5895 +       {0x00008208, 0x00000000},
5896 +       {0x0000820c, 0x00000000},
5897 +       {0x00008210, 0x00000000},
5898 +       {0x00008214, 0x00000000},
5899 +       {0x00008218, 0x00000000},
5900 +       {0x0000821c, 0x00000000},
5901 +       {0x00008220, 0x00000000},
5902 +       {0x00008224, 0x00000000},
5903 +       {0x00008228, 0x00000000},
5904 +       {0x0000822c, 0x00000000},
5905 +       {0x00008230, 0x00000000},
5906 +       {0x00008234, 0x00000000},
5907 +       {0x00008238, 0x00000000},
5908 +       {0x0000823c, 0x00000000},
5909 +       {0x00008240, 0x00100000},
5910 +       {0x00008244, 0x0010f400},
5911 +       {0x00008248, 0x00000100},
5912 +       {0x0000824c, 0x0001e800},
5913 +       {0x00008250, 0x00000000},
5914 +       {0x00008254, 0x00000000},
5915 +       {0x00008258, 0x00000000},
5916 +       {0x0000825c, 0x400000ff},
5917 +       {0x00008260, 0x00080922},
5918 +       {0x00008270, 0x00000000},
5919 +       {0x00008274, 0x40000000},
5920 +       {0x00008278, 0x003e4180},
5921 +       {0x0000827c, 0x00000000},
5922 +       {0x00008284, 0x0000002c},
5923 +       {0x00008288, 0x0000002c},
5924 +       {0x0000828c, 0x00000000},
5925 +       {0x00008294, 0x00000000},
5926 +       {0x00008298, 0x00000000},
5927 +       {0x00008300, 0x00000000},
5928 +       {0x00008304, 0x00000000},
5929 +       {0x00008308, 0x00000000},
5930 +       {0x0000830c, 0x00000000},
5931 +       {0x00008310, 0x00000000},
5932 +       {0x00008314, 0x00000000},
5933 +       {0x00008318, 0x00000000},
5934 +       {0x00008328, 0x00000000},
5935 +       {0x0000832c, 0x00000007},
5936 +       {0x00008330, 0x00000302},
5937 +       {0x00008334, 0x00000e00},
5938 +       {0x00008338, 0x00000000},
5939 +       {0x0000833c, 0x00000000},
5940 +       {0x00008340, 0x000107ff},
5941 +       {0x00008344, 0x00000000},
5942 +       {0x00009808, 0x00000000},
5943 +       {0x0000980c, 0xaf268e30},
5944 +       {0x00009810, 0xfd14e000},
5945 +       {0x00009814, 0x9c0a9f6b},
5946 +       {0x0000981c, 0x00000000},
5947 +       {0x0000982c, 0x0000a000},
5948 +       {0x00009830, 0x00000000},
5949 +       {0x0000983c, 0x00200400},
5950 +       {0x00009840, 0x206a01ae},
5951 +       {0x0000984c, 0x0040233c},
5952 +       {0x0000a84c, 0x0040233c},
5953 +       {0x00009854, 0x00000044},
5954 +       {0x00009900, 0x00000000},
5955 +       {0x00009904, 0x00000000},
5956 +       {0x00009908, 0x00000000},
5957 +       {0x0000990c, 0x00000000},
5958 +       {0x0000991c, 0x10000fff},
5959 +       {0x00009920, 0x04900000},
5960 +       {0x0000a920, 0x04900000},
5961 +       {0x00009928, 0x00000001},
5962 +       {0x0000992c, 0x00000004},
5963 +       {0x00009934, 0x1e1f2022},
5964 +       {0x00009938, 0x0a0b0c0d},
5965 +       {0x0000993c, 0x00000000},
5966 +       {0x00009948, 0x9280c00a},
5967 +       {0x0000994c, 0x00020028},
5968 +       {0x00009954, 0xe250a51e},
5969 +       {0x00009958, 0x3388ffff},
5970 +       {0x00009940, 0x00781204},
5971 +       {0x0000c95c, 0x004b6a8e},
5972 +       {0x0000c968, 0x000003ce},
5973 +       {0x00009970, 0x190fb514},
5974 +       {0x00009974, 0x00000000},
5975 +       {0x00009978, 0x00000001},
5976 +       {0x0000997c, 0x00000000},
5977 +       {0x00009980, 0x00000000},
5978 +       {0x00009984, 0x00000000},
5979 +       {0x00009988, 0x00000000},
5980 +       {0x0000998c, 0x00000000},
5981 +       {0x00009990, 0x00000000},
5982 +       {0x00009994, 0x00000000},
5983 +       {0x00009998, 0x00000000},
5984 +       {0x0000999c, 0x00000000},
5985 +       {0x000099a0, 0x00000000},
5986 +       {0x000099a4, 0x00000001},
5987 +       {0x000099a8, 0x201fff00},
5988 +       {0x000099ac, 0x006f00c4},
5989 +       {0x000099b0, 0x03051000},
5990 +       {0x000099b4, 0x00000820},
5991 +       {0x000099dc, 0x00000000},
5992 +       {0x000099e0, 0x00000000},
5993 +       {0x000099e4, 0xaaaaaaaa},
5994 +       {0x000099e8, 0x3c466478},
5995 +       {0x000099ec, 0x0cc80caa},
5996 +       {0x000099fc, 0x00001042},
5997 +       {0x0000a210, 0x4080a333},
5998 +       {0x0000a214, 0x40206c10},
5999 +       {0x0000a218, 0x009c4060},
6000 +       {0x0000a220, 0x01834061},
6001 +       {0x0000a224, 0x00000400},
6002 +       {0x0000a228, 0x000003b5},
6003 +       {0x0000a22c, 0x23277200},
6004 +       {0x0000a234, 0x20202020},
6005 +       {0x0000a238, 0x20202020},
6006 +       {0x0000a23c, 0x13c889af},
6007 +       {0x0000a240, 0x38490a20},
6008 +       {0x0000a244, 0x00007bb6},
6009 +       {0x0000a248, 0x0fff3ffc},
6010 +       {0x0000a24c, 0x00000001},
6011 +       {0x0000a250, 0x001da000},
6012 +       {0x0000a254, 0x00000000},
6013 +       {0x0000a258, 0x0cdbd380},
6014 +       {0x0000a25c, 0x0f0f0f01},
6015 +       {0x0000a260, 0xdfa91f01},
6016 +       {0x0000a268, 0x00000000},
6017 +       {0x0000a26c, 0x0ebae9c6},
6018 +       {0x0000b26c, 0x0ebae9c6},
6019 +       {0x0000d270, 0x00820820},
6020 +       {0x0000a278, 0x1ce739ce},
6021 +       {0x0000a27c, 0x050701ce},
6022 +       {0x0000a358, 0x7999aa0f},
6023 +       {0x0000d35c, 0x07ffffef},
6024 +       {0x0000d360, 0x0fffffe7},
6025 +       {0x0000d364, 0x17ffffe5},
6026 +       {0x0000d368, 0x1fffffe4},
6027 +       {0x0000d36c, 0x37ffffe3},
6028 +       {0x0000d370, 0x3fffffe3},
6029 +       {0x0000d374, 0x57ffffe3},
6030 +       {0x0000d378, 0x5fffffe2},
6031 +       {0x0000d37c, 0x7fffffe2},
6032 +       {0x0000d380, 0x7f3c7bba},
6033 +       {0x0000d384, 0xf3307ff0},
6034 +       {0x0000a388, 0x0c000000},
6035 +       {0x0000a38c, 0x20202020},
6036 +       {0x0000a390, 0x20202020},
6037 +       {0x0000a394, 0x1ce739ce},
6038 +       {0x0000a398, 0x000001ce},
6039 +       {0x0000a39c, 0x00000001},
6040 +       {0x0000a3a0, 0x00000000},
6041 +       {0x0000a3a4, 0x00000000},
6042 +       {0x0000a3a8, 0x00000000},
6043 +       {0x0000a3ac, 0x00000000},
6044 +       {0x0000a3b0, 0x00000000},
6045 +       {0x0000a3b4, 0x00000000},
6046 +       {0x0000a3b8, 0x00000000},
6047 +       {0x0000a3bc, 0x00000000},
6048 +       {0x0000a3c0, 0x00000000},
6049 +       {0x0000a3c4, 0x00000000},
6050 +       {0x0000a3c8, 0x00000246},
6051 +       {0x0000a3cc, 0x20202020},
6052 +       {0x0000a3d0, 0x20202020},
6053 +       {0x0000a3d4, 0x20202020},
6054 +       {0x0000a3dc, 0x1ce739ce},
6055 +       {0x0000a3e0, 0x000001ce},
6056 +       {0x0000a3e4, 0x00000000},
6057 +       {0x0000a3e8, 0x18c43433},
6058 +       {0x0000a3ec, 0x00f38081},
6059 +       {0x00007800, 0x00040000},
6060 +       {0x00007804, 0xdb005012},
6061 +       {0x00007808, 0x04924914},
6062 +       {0x0000780c, 0x21084210},
6063 +       {0x00007810, 0x6d801300},
6064 +       {0x00007814, 0x0019beff},
6065 +       {0x00007818, 0x07e40000},
6066 +       {0x0000781c, 0x00492000},
6067 +       {0x00007820, 0x92492480},
6068 +       {0x00007824, 0x00040000},
6069 +       {0x00007828, 0xdb005012},
6070 +       {0x0000782c, 0x04924914},
6071 +       {0x00007830, 0x21084210},
6072 +       {0x00007834, 0x6d801300},
6073 +       {0x00007838, 0x0019beff},
6074 +       {0x0000783c, 0x07e40000},
6075 +       {0x00007840, 0x00492000},
6076 +       {0x00007844, 0x92492480},
6077 +       {0x00007848, 0x00120000},
6078 +       {0x00007850, 0x54214514},
6079 +       {0x00007858, 0x92592692},
6080 +       {0x00007860, 0x52802000},
6081 +       {0x00007864, 0x0a8e370e},
6082 +       {0x00007868, 0xc0102850},
6083 +       {0x0000786c, 0x812d4000},
6084 +       {0x00007874, 0x001b6db0},
6085 +       {0x00007878, 0x00376b63},
6086 +       {0x0000787c, 0x06db6db6},
6087 +       {0x00007880, 0x006d8000},
6088 +       {0x00007884, 0xffeffffe},
6089 +       {0x00007888, 0xffeffffe},
6090 +       {0x00007890, 0x00060aeb},
6091 +       {0x00007894, 0x5a108000},
6092 +       {0x00007898, 0x2a850160},
6093 +};
6094 +
6095 +/* XXX 9280 2 */
6096 +static const u32 ar9280Modes_9280_2[][6] = {
6097 +       {0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160,
6098 +        0x000001e0},
6099 +       {0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c,
6100 +        0x000001e0},
6101 +       {0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38,
6102 +        0x00001180},
6103 +       {0x000010f0, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
6104 +        0x00000008},
6105 +       {0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00,
6106 +        0x06e006e0},
6107 +       {0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b,
6108 +        0x0988004f},
6109 +       {0x00008120, 0x08f04800, 0x08f04800, 0x08f04810, 0x08f04810,
6110 +        0x08f04810},
6111 +       {0x000081d0, 0x00003210, 0x00003210, 0x0000320a, 0x0000320a,
6112 +        0x0000320a},
6113 +       {0x00008318, 0x00003e80, 0x00007d00, 0x00006880, 0x00003440,
6114 +        0x00006880},
6115 +       {0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300,
6116 +        0x00000303},
6117 +       {0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200,
6118 +        0x02020200},
6119 +       {0x00009824, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e,
6120 +        0x01000e0e},
6121 +       {0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001,
6122 +        0x0a020001},
6123 +       {0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e,
6124 +        0x00000e0e},
6125 +       {0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007,
6126 +        0x00000007},
6127 +       {0x00009840, 0x206a022e, 0x206a022e, 0x206a012e, 0x206a012e,
6128 +        0x206a012e},
6129 +       {0x00009844, 0x0372161e, 0x0372161e, 0x037216a0, 0x037216a0,
6130 +        0x037216a0},
6131 +       {0x00009850, 0x6c4000e2, 0x6d4000e2, 0x6d4000e2, 0x6c4000e2,
6132 +        0x6c4000e2},
6133 +       {0x00009858, 0x7ec88d2e, 0x7ec88d2e, 0x7ec84d2e, 0x7ec84d2e,
6134 +        0x7ec84d2e},
6135 +       {0x0000985c, 0x31395d5e, 0x3139605e, 0x3139605e, 0x31395d5e,
6136 +        0x31395d5e},
6137 +       {0x00009860, 0x00048d18, 0x00048d18, 0x00048d20, 0x00048d20,
6138 +        0x00048d18},
6139 +       {0x00009864, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00,
6140 +        0x0001ce00},
6141 +       {0x00009868, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0,
6142 +        0x5ac640d0},
6143 +       {0x0000986c, 0x06903081, 0x06903081, 0x06903881, 0x06903881,
6144 +        0x06903881},
6145 +       {0x00009914, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898,
6146 +        0x000007d0},
6147 +       {0x00009918, 0x0000000a, 0x00000014, 0x00000268, 0x0000000b,
6148 +        0x00000016},
6149 +       {0x00009924, 0xd00a8a0b, 0xd00a8a0b, 0xd00a8a0d, 0xd00a8a0d,
6150 +        0xd00a8a0d},
6151 +       {0x00009944, 0xffbc1010, 0xffbc1010, 0xffbc1010, 0xffbc1010,
6152 +        0xffbc1010},
6153 +       {0x00009960, 0x00000010, 0x00000010, 0x00000010, 0x00000010,
6154 +        0x00000010},
6155 +       {0x0000a960, 0x00000010, 0x00000010, 0x00000010, 0x00000010,
6156 +        0x00000010},
6157 +       {0x00009964, 0x00000210, 0x00000210, 0x00000210, 0x00000210,
6158 +        0x00000210},
6159 +       {0x0000c968, 0x000003b5, 0x000003b5, 0x000003ce, 0x000003ce,
6160 +        0x000003ce},
6161 +       {0x000099b8, 0x0000001c, 0x0000001c, 0x0000001c, 0x0000001c,
6162 +        0x0000001c},
6163 +       {0x000099bc, 0x00000a00, 0x00000a00, 0x00000c00, 0x00000c00,
6164 +        0x00000c00},
6165 +       {0x000099c0, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4,
6166 +        0x05eea6d4},
6167 +       {0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77,
6168 +        0x06336f77},
6169 +       {0x000099c8, 0x60f65329, 0x60f65329, 0x60f65329, 0x60f65329,
6170 +        0x60f65329},
6171 +       {0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8,
6172 +        0x08f186c8},
6173 +       {0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384,
6174 +        0x00046384},
6175 +       {0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
6176 +        0x00000000},
6177 +       {0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
6178 +        0x00000000},
6179 +       {0x0000a204, 0x00000444, 0x00000444, 0x00000444, 0x00000444,
6180 +        0x00000444},
6181 +       {0x0000a20c, 0x00000014, 0x00000014, 0x0001f019, 0x0001f019,
6182 +        0x0001f019},
6183 +       {0x0000b20c, 0x00000014, 0x00000014, 0x0001f019, 0x0001f019,
6184 +        0x0001f019},
6185 +       {0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a,
6186 +        0x1883800a},
6187 +       {0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108,
6188 +        0x00000000},
6189 +       {0x0000a23c, 0x13c88000, 0x13c88000, 0x13c88001, 0x13c88000,
6190 +        0x13c88000},
6191 +       {0x0000a250, 0x001ff000, 0x001ff000, 0x0004a000, 0x0004a000,
6192 +        0x0004a000},
6193 +       {0x0000a358, 0x7999aa02, 0x7999aa02, 0x7999aa0e, 0x7999aa0e,
6194 +        0x7999aa0e},
6195 +       {0x0000a388, 0x0c000000, 0x0c000000, 0x08000000, 0x0c000000,
6196 +        0x0c000000},
6197 +       {0x0000a3d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
6198 +        0x00000000},
6199 +       {0x00007894, 0x5a508000, 0x5a508000, 0x5a508000, 0x5a508000,
6200 +        0x5a508000},
6201 +};
6202 +
6203 +static const u32 ar9280Common_9280_2[][2] = {
6204 +       {0x0000000c, 0x00000000},
6205 +       {0x00000030, 0x00020015},
6206 +       {0x00000034, 0x00000005},
6207 +       {0x00000040, 0x00000000},
6208 +       {0x00000044, 0x00000008},
6209 +       {0x00000048, 0x00000008},
6210 +       {0x0000004c, 0x00000010},
6211 +       {0x00000050, 0x00000000},
6212 +       {0x00000054, 0x0000001f},
6213 +       {0x00000800, 0x00000000},
6214 +       {0x00000804, 0x00000000},
6215 +       {0x00000808, 0x00000000},
6216 +       {0x0000080c, 0x00000000},
6217 +       {0x00000810, 0x00000000},
6218 +       {0x00000814, 0x00000000},
6219 +       {0x00000818, 0x00000000},
6220 +       {0x0000081c, 0x00000000},
6221 +       {0x00000820, 0x00000000},
6222 +       {0x00000824, 0x00000000},
6223 +       {0x00001040, 0x002ffc0f},
6224 +       {0x00001044, 0x002ffc0f},
6225 +       {0x00001048, 0x002ffc0f},
6226 +       {0x0000104c, 0x002ffc0f},
6227 +       {0x00001050, 0x002ffc0f},
6228 +       {0x00001054, 0x002ffc0f},
6229 +       {0x00001058, 0x002ffc0f},
6230 +       {0x0000105c, 0x002ffc0f},
6231 +       {0x00001060, 0x002ffc0f},
6232 +       {0x00001064, 0x002ffc0f},
6233 +       {0x00001230, 0x00000000},
6234 +       {0x00001270, 0x00000000},
6235 +       {0x00001038, 0x00000000},
6236 +       {0x00001078, 0x00000000},
6237 +       {0x000010b8, 0x00000000},
6238 +       {0x000010f8, 0x00000000},
6239 +       {0x00001138, 0x00000000},
6240 +       {0x00001178, 0x00000000},
6241 +       {0x000011b8, 0x00000000},
6242 +       {0x000011f8, 0x00000000},
6243 +       {0x00001238, 0x00000000},
6244 +       {0x00001278, 0x00000000},
6245 +       {0x000012b8, 0x00000000},
6246 +       {0x000012f8, 0x00000000},
6247 +       {0x00001338, 0x00000000},
6248 +       {0x00001378, 0x00000000},
6249 +       {0x000013b8, 0x00000000},
6250 +       {0x000013f8, 0x00000000},
6251 +       {0x00001438, 0x00000000},
6252 +       {0x00001478, 0x00000000},
6253 +       {0x000014b8, 0x00000000},
6254 +       {0x000014f8, 0x00000000},
6255 +       {0x00001538, 0x00000000},
6256 +       {0x00001578, 0x00000000},
6257 +       {0x000015b8, 0x00000000},
6258 +       {0x000015f8, 0x00000000},
6259 +       {0x00001638, 0x00000000},
6260 +       {0x00001678, 0x00000000},
6261 +       {0x000016b8, 0x00000000},
6262 +       {0x000016f8, 0x00000000},
6263 +       {0x00001738, 0x00000000},
6264 +       {0x00001778, 0x00000000},
6265 +       {0x000017b8, 0x00000000},
6266 +       {0x000017f8, 0x00000000},
6267 +       {0x0000103c, 0x00000000},
6268 +       {0x0000107c, 0x00000000},
6269 +       {0x000010bc, 0x00000000},
6270 +       {0x000010fc, 0x00000000},
6271 +       {0x0000113c, 0x00000000},
6272 +       {0x0000117c, 0x00000000},
6273 +       {0x000011bc, 0x00000000},
6274 +       {0x000011fc, 0x00000000},
6275 +       {0x0000123c, 0x00000000},
6276 +       {0x0000127c, 0x00000000},
6277 +       {0x000012bc, 0x00000000},
6278 +       {0x000012fc, 0x00000000},
6279 +       {0x0000133c, 0x00000000},
6280 +       {0x0000137c, 0x00000000},
6281 +       {0x000013bc, 0x00000000},
6282 +       {0x000013fc, 0x00000000},
6283 +       {0x0000143c, 0x00000000},
6284 +       {0x0000147c, 0x00000000},
6285 +       {0x00004030, 0x00000002},
6286 +       {0x0000403c, 0x00000002},
6287 +       {0x00004024, 0x0000001f},
6288 +       {0x00004060, 0x00000000},
6289 +       {0x00004064, 0x00000000},
6290 +       {0x00007010, 0x00000033},
6291 +       {0x00007034, 0x00000002},
6292 +       {0x00007038, 0x000004c2},
6293 +       {0x00008004, 0x00000000},
6294 +       {0x00008008, 0x00000000},
6295 +       {0x0000800c, 0x00000000},
6296 +       {0x00008018, 0x00000700},
6297 +       {0x00008020, 0x00000000},
6298 +       {0x00008038, 0x00000000},
6299 +       {0x0000803c, 0x00000000},
6300 +       {0x00008048, 0x40000000},
6301 +       {0x00008054, 0x00000000},
6302 +       {0x00008058, 0x00000000},
6303 +       {0x0000805c, 0x000fc78f},
6304 +       {0x00008060, 0x0000000f},
6305 +       {0x00008064, 0x00000000},
6306 +       {0x00008070, 0x00000000},
6307 +       {0x000080c0, 0x2a80001a},
6308 +       {0x000080c4, 0x05dc01e0},
6309 +       {0x000080c8, 0x1f402710},
6310 +       {0x000080cc, 0x01f40000},
6311 +       {0x000080d0, 0x00001e00},
6312 +       {0x000080d4, 0x00000000},
6313 +       {0x000080d8, 0x00400000},
6314 +       {0x000080e0, 0xffffffff},
6315 +       {0x000080e4, 0x0000ffff},
6316 +       {0x000080e8, 0x003f3f3f},
6317 +       {0x000080ec, 0x00000000},
6318 +       {0x000080f0, 0x00000000},
6319 +       {0x000080f4, 0x00000000},
6320 +       {0x000080f8, 0x00000000},
6321 +       {0x000080fc, 0x00020000},
6322 +       {0x00008100, 0x00020000},
6323 +       {0x00008104, 0x00000001},
6324 +       {0x00008108, 0x00000052},
6325 +       {0x0000810c, 0x00000000},
6326 +       {0x00008110, 0x00000168},
6327 +       {0x00008118, 0x000100aa},
6328 +       {0x0000811c, 0x00003210},
6329 +       {0x00008124, 0x00000000},
6330 +       {0x00008128, 0x00000000},
6331 +       {0x0000812c, 0x00000000},
6332 +       {0x00008130, 0x00000000},
6333 +       {0x00008134, 0x00000000},
6334 +       {0x00008138, 0x00000000},
6335 +       {0x0000813c, 0x00000000},
6336 +       {0x00008144, 0xffffffff},
6337 +       {0x00008168, 0x00000000},
6338 +       {0x0000816c, 0x00000000},
6339 +       {0x00008170, 0x32143320},
6340 +       {0x00008174, 0xfaa4fa50},
6341 +       {0x00008178, 0x00000100},
6342 +       {0x0000817c, 0x00000000},
6343 +       {0x000081c0, 0x00000000},
6344 +       {0x000081ec, 0x00000000},
6345 +       {0x000081f0, 0x00000000},
6346 +       {0x000081f4, 0x00000000},
6347 +       {0x000081f8, 0x00000000},
6348 +       {0x000081fc, 0x00000000},
6349 +       {0x00008200, 0x00000000},
6350 +       {0x00008204, 0x00000000},
6351 +       {0x00008208, 0x00000000},
6352 +       {0x0000820c, 0x00000000},
6353 +       {0x00008210, 0x00000000},
6354 +       {0x00008214, 0x00000000},
6355 +       {0x00008218, 0x00000000},
6356 +       {0x0000821c, 0x00000000},
6357 +       {0x00008220, 0x00000000},
6358 +       {0x00008224, 0x00000000},
6359 +       {0x00008228, 0x00000000},
6360 +       {0x0000822c, 0x00000000},
6361 +       {0x00008230, 0x00000000},
6362 +       {0x00008234, 0x00000000},
6363 +       {0x00008238, 0x00000000},
6364 +       {0x0000823c, 0x00000000},
6365 +       {0x00008240, 0x00100000},
6366 +       {0x00008244, 0x0010f400},
6367 +       {0x00008248, 0x00000100},
6368 +       {0x0000824c, 0x0001e800},
6369 +       {0x00008250, 0x00000000},
6370 +       {0x00008254, 0x00000000},
6371 +       {0x00008258, 0x00000000},
6372 +       {0x0000825c, 0x400000ff},
6373 +       {0x00008260, 0x00080922},
6374 +       {0x00008264, 0xa8a00010},
6375 +       {0x00008270, 0x00000000},
6376 +       {0x00008274, 0x40000000},
6377 +       {0x00008278, 0x003e4180},
6378 +       {0x0000827c, 0x00000000},
6379 +       {0x00008284, 0x0000002c},
6380 +       {0x00008288, 0x0000002c},
6381 +       {0x0000828c, 0x00000000},
6382 +       {0x00008294, 0x00000000},
6383 +       {0x00008298, 0x00000000},
6384 +       {0x0000829c, 0x00000000},
6385 +       {0x00008300, 0x00000040},
6386 +       {0x00008314, 0x00000000},
6387 +       {0x00008328, 0x00000000},
6388 +       {0x0000832c, 0x00000007},
6389 +       {0x00008330, 0x00000302},
6390 +       {0x00008334, 0x00000e00},
6391 +       {0x00008338, 0x00ff0000},
6392 +       {0x0000833c, 0x00000000},
6393 +       {0x00008340, 0x000107ff},
6394 +       {0x00008344, 0x00481043},
6395 +       {0x00009808, 0x00000000},
6396 +       {0x0000980c, 0xafa68e30},
6397 +       {0x00009810, 0xfd14e000},
6398 +       {0x00009814, 0x9c0a9f6b},
6399 +       {0x0000981c, 0x00000000},
6400 +       {0x0000982c, 0x0000a000},
6401 +       {0x00009830, 0x00000000},
6402 +       {0x0000983c, 0x00200400},
6403 +       {0x0000984c, 0x0040233c},
6404 +       {0x0000a84c, 0x0040233c},
6405 +       {0x00009854, 0x00000044},
6406 +       {0x00009900, 0x00000000},
6407 +       {0x00009904, 0x00000000},
6408 +       {0x00009908, 0x00000000},
6409 +       {0x0000990c, 0x00000000},
6410 +       {0x00009910, 0x01002310},
6411 +       {0x0000991c, 0x10000fff},
6412 +       {0x00009920, 0x04900000},
6413 +       {0x0000a920, 0x04900000},
6414 +       {0x00009928, 0x00000001},
6415 +       {0x0000992c, 0x00000004},
6416 +       {0x00009934, 0x1e1f2022},
6417 +       {0x00009938, 0x0a0b0c0d},
6418 +       {0x0000993c, 0x00000000},
6419 +       {0x00009948, 0x9280c00a},
6420 +       {0x0000994c, 0x00020028},
6421 +       {0x00009954, 0x5f3ca3de},
6422 +       {0x00009958, 0x2108ecff},
6423 +       {0x00009940, 0x14750604},
6424 +       {0x0000c95c, 0x004b6a8e},
6425 +       {0x00009970, 0x190fb515},
6426 +       {0x00009974, 0x00000000},
6427 +       {0x00009978, 0x00000001},
6428 +       {0x0000997c, 0x00000000},
6429 +       {0x00009980, 0x00000000},
6430 +       {0x00009984, 0x00000000},
6431 +       {0x00009988, 0x00000000},
6432 +       {0x0000998c, 0x00000000},
6433 +       {0x00009990, 0x00000000},
6434 +       {0x00009994, 0x00000000},
6435 +       {0x00009998, 0x00000000},
6436 +       {0x0000999c, 0x00000000},
6437 +       {0x000099a0, 0x00000000},
6438 +       {0x000099a4, 0x00000001},
6439 +       {0x000099a8, 0x201fff00},
6440 +       {0x000099ac, 0x006f0000},
6441 +       {0x000099b0, 0x03051000},
6442 +       {0x000099b4, 0x00000820},
6443 +       {0x000099dc, 0x00000000},
6444 +       {0x000099e0, 0x00000000},
6445 +       {0x000099e4, 0xaaaaaaaa},
6446 +       {0x000099e8, 0x3c466478},
6447 +       {0x000099ec, 0x0cc80caa},
6448 +       {0x000099f0, 0x00000000},
6449 +       {0x000099fc, 0x00001042},
6450 +       {0x0000a208, 0x803e4788},
6451 +       {0x0000a210, 0x4080a333},
6452 +       {0x0000a214, 0x40206c10},
6453 +       {0x0000a218, 0x009c4060},
6454 +       {0x0000a220, 0x01834061},
6455 +       {0x0000a224, 0x00000400},
6456 +       {0x0000a228, 0x000003b5},
6457 +       {0x0000a22c, 0x233f7180},
6458 +       {0x0000a234, 0x20202020},
6459 +       {0x0000a238, 0x20202020},
6460 +       {0x0000a240, 0x38490a20},
6461 +       {0x0000a244, 0x00007bb6},
6462 +       {0x0000a248, 0x0fff3ffc},
6463 +       {0x0000a24c, 0x00000000},
6464 +       {0x0000a254, 0x00000000},
6465 +       {0x0000a258, 0x0cdbd380},
6466 +       {0x0000a25c, 0x0f0f0f01},
6467 +       {0x0000a260, 0xdfa91f01},
6468 +       {0x0000a268, 0x00000000},
6469 +       {0x0000a26c, 0x0e79e5c6},
6470 +       {0x0000b26c, 0x0e79e5c6},
6471 +       {0x0000d270, 0x00820820},
6472 +       {0x0000a278, 0x1ce739ce},
6473 +       {0x0000d35c, 0x07ffffef},
6474 +       {0x0000d360, 0x0fffffe7},
6475 +       {0x0000d364, 0x17ffffe5},
6476 +       {0x0000d368, 0x1fffffe4},
6477 +       {0x0000d36c, 0x37ffffe3},
6478 +       {0x0000d370, 0x3fffffe3},
6479 +       {0x0000d374, 0x57ffffe3},
6480 +       {0x0000d378, 0x5fffffe2},
6481 +       {0x0000d37c, 0x7fffffe2},
6482 +       {0x0000d380, 0x7f3c7bba},
6483 +       {0x0000d384, 0xf3307ff0},
6484 +       {0x0000a38c, 0x20202020},
6485 +       {0x0000a390, 0x20202020},
6486 +       {0x0000a394, 0x1ce739ce},
6487 +       {0x0000a398, 0x000001ce},
6488 +       {0x0000a39c, 0x00000001},
6489 +       {0x0000a3a0, 0x00000000},
6490 +       {0x0000a3a4, 0x00000000},
6491 +       {0x0000a3a8, 0x00000000},
6492 +       {0x0000a3ac, 0x00000000},
6493 +       {0x0000a3b0, 0x00000000},
6494 +       {0x0000a3b4, 0x00000000},
6495 +       {0x0000a3b8, 0x00000000},
6496 +       {0x0000a3bc, 0x00000000},
6497 +       {0x0000a3c0, 0x00000000},
6498 +       {0x0000a3c4, 0x00000000},
6499 +       {0x0000a3c8, 0x00000246},
6500 +       {0x0000a3cc, 0x20202020},
6501 +       {0x0000a3d0, 0x20202020},
6502 +       {0x0000a3d4, 0x20202020},
6503 +       {0x0000a3dc, 0x1ce739ce},
6504 +       {0x0000a3e0, 0x000001ce},
6505 +       {0x0000a3e4, 0x00000000},
6506 +       {0x0000a3e8, 0x18c43433},
6507 +       {0x0000a3ec, 0x00f70081},
6508 +       {0x00007800, 0x00040000},
6509 +       {0x00007804, 0xdb005012},
6510 +       {0x00007808, 0x04924914},
6511 +       {0x0000780c, 0x21084210},
6512 +       {0x00007810, 0x6d801300},
6513 +       {0x00007818, 0x07e41000},
6514 +       {0x00007824, 0x00040000},
6515 +       {0x00007828, 0xdb005012},
6516 +       {0x0000782c, 0x04924914},
6517 +       {0x00007830, 0x21084210},
6518 +       {0x00007834, 0x6d801300},
6519 +       {0x0000783c, 0x07e40000},
6520 +       {0x00007848, 0x00100000},
6521 +       {0x0000784c, 0x773f0567},
6522 +       {0x00007850, 0x54214514},
6523 +       {0x00007854, 0x12035828},
6524 +       {0x00007858, 0x9259269a},
6525 +       {0x00007860, 0x52802000},
6526 +       {0x00007864, 0x0a8e370e},
6527 +       {0x00007868, 0xc0102850},
6528 +       {0x0000786c, 0x812d4000},
6529 +       {0x00007870, 0x807ec400},
6530 +       {0x00007874, 0x001b6db0},
6531 +       {0x00007878, 0x00376b63},
6532 +       {0x0000787c, 0x06db6db6},
6533 +       {0x00007880, 0x006d8000},
6534 +       {0x00007884, 0xffeffffe},
6535 +       {0x00007888, 0xffeffffe},
6536 +       {0x0000788c, 0x00010000},
6537 +       {0x00007890, 0x02060aeb},
6538 +       {0x00007898, 0x2a850160},
6539 +};
6540 +
6541 +static const u32 ar9280Modes_fast_clock_9280_2[][3] = {
6542 +       {0x00001030, 0x00000268, 0x000004d0},
6543 +       {0x00001070, 0x0000018c, 0x00000318},
6544 +       {0x000010b0, 0x00000fd0, 0x00001fa0},
6545 +       {0x00008014, 0x044c044c, 0x08980898},
6546 +       {0x0000801c, 0x148ec02b, 0x148ec057},
6547 +       {0x00008318, 0x000044c0, 0x00008980},
6548 +       {0x00009820, 0x02020200, 0x02020200},
6549 +       {0x00009824, 0x01000f0f, 0x01000f0f},
6550 +       {0x00009828, 0x0b020001, 0x0b020001},
6551 +       {0x00009834, 0x00000f0f, 0x00000f0f},
6552 +       {0x00009844, 0x03721821, 0x03721821},
6553 +       {0x00009914, 0x00000898, 0x00001130},
6554 +       {0x00009918, 0x0000000b, 0x00000016},
6555 +};
6556 +
6557 +static const u32 ar9280Modes_backoff_23db_rxgain_9280_2[][6] = {
6558 +       {0x00009a00, 0x00008184, 0x00008184, 0x00000290, 0x00000290,
6559 +        0x00000290},
6560 +       {0x00009a04, 0x00008188, 0x00008188, 0x00000300, 0x00000300,
6561 +        0x00000300},
6562 +       {0x00009a08, 0x0000818c, 0x0000818c, 0x00000304, 0x00000304,
6563 +        0x00000304},
6564 +       {0x00009a0c, 0x00008190, 0x00008190, 0x00000308, 0x00000308,
6565 +        0x00000308},
6566 +       {0x00009a10, 0x00008194, 0x00008194, 0x0000030c, 0x0000030c,
6567 +        0x0000030c},
6568 +       {0x00009a14, 0x00008200, 0x00008200, 0x00008000, 0x00008000,
6569 +        0x00008000},
6570 +       {0x00009a18, 0x00008204, 0x00008204, 0x00008004, 0x00008004,
6571 +        0x00008004},
6572 +       {0x00009a1c, 0x00008208, 0x00008208, 0x00008008, 0x00008008,
6573 +        0x00008008},
6574 +       {0x00009a20, 0x0000820c, 0x0000820c, 0x0000800c, 0x0000800c,
6575 +        0x0000800c},
6576 +       {0x00009a24, 0x00008210, 0x00008210, 0x00008080, 0x00008080,
6577 +        0x00008080},
6578 +       {0x00009a28, 0x00008214, 0x00008214, 0x00008084, 0x00008084,
6579 +        0x00008084},
6580 +       {0x00009a2c, 0x00008280, 0x00008280, 0x00008088, 0x00008088,
6581 +        0x00008088},
6582 +       {0x00009a30, 0x00008284, 0x00008284, 0x0000808c, 0x0000808c,
6583 +        0x0000808c},
6584 +       {0x00009a34, 0x00008288, 0x00008288, 0x00008100, 0x00008100,
6585 +        0x00008100},
6586 +       {0x00009a38, 0x0000828c, 0x0000828c, 0x00008104, 0x00008104,
6587 +        0x00008104},
6588 +       {0x00009a3c, 0x00008290, 0x00008290, 0x00008108, 0x00008108,
6589 +        0x00008108},
6590 +       {0x00009a40, 0x00008300, 0x00008300, 0x0000810c, 0x0000810c,
6591 +        0x0000810c},
6592 +       {0x00009a44, 0x00008304, 0x00008304, 0x00008110, 0x00008110,
6593 +        0x00008110},
6594 +       {0x00009a48, 0x00008308, 0x00008308, 0x00008114, 0x00008114,
6595 +        0x00008114},
6596 +       {0x00009a4c, 0x0000830c, 0x0000830c, 0x00008180, 0x00008180,
6597 +        0x00008180},
6598 +       {0x00009a50, 0x00008310, 0x00008310, 0x00008184, 0x00008184,
6599 +        0x00008184},
6600 +       {0x00009a54, 0x00008314, 0x00008314, 0x00008188, 0x00008188,
6601 +        0x00008188},
6602 +       {0x00009a58, 0x00008380, 0x00008380, 0x0000818c, 0x0000818c,
6603 +        0x0000818c},
6604 +       {0x00009a5c, 0x00008384, 0x00008384, 0x00008190, 0x00008190,
6605 +        0x00008190},
6606 +       {0x00009a60, 0x00008388, 0x00008388, 0x00008194, 0x00008194,
6607 +        0x00008194},
6608 +       {0x00009a64, 0x0000838c, 0x0000838c, 0x000081a0, 0x000081a0,
6609 +        0x000081a0},
6610 +       {0x00009a68, 0x00008390, 0x00008390, 0x0000820c, 0x0000820c,
6611 +        0x0000820c},
6612 +       {0x00009a6c, 0x00008394, 0x00008394, 0x000081a8, 0x000081a8,
6613 +        0x000081a8},
6614 +       {0x00009a70, 0x0000a380, 0x0000a380, 0x00008284, 0x00008284,
6615 +        0x00008284},
6616 +       {0x00009a74, 0x0000a384, 0x0000a384, 0x00008288, 0x00008288,
6617 +        0x00008288},
6618 +       {0x00009a78, 0x0000a388, 0x0000a388, 0x00008224, 0x00008224,
6619 +        0x00008224},
6620 +       {0x00009a7c, 0x0000a38c, 0x0000a38c, 0x00008290, 0x00008290,
6621 +        0x00008290},
6622 +       {0x00009a80, 0x0000a390, 0x0000a390, 0x00008300, 0x00008300,
6623 +        0x00008300},
6624 +       {0x00009a84, 0x0000a394, 0x0000a394, 0x00008304, 0x00008304,
6625 +        0x00008304},
6626 +       {0x00009a88, 0x0000a780, 0x0000a780, 0x00008308, 0x00008308,
6627 +        0x00008308},
6628 +       {0x00009a8c, 0x0000a784, 0x0000a784, 0x0000830c, 0x0000830c,
6629 +        0x0000830c},
6630 +       {0x00009a90, 0x0000a788, 0x0000a788, 0x00008380, 0x00008380,
6631 +        0x00008380},
6632 +       {0x00009a94, 0x0000a78c, 0x0000a78c, 0x00008384, 0x00008384,
6633 +        0x00008384},
6634 +       {0x00009a98, 0x0000a790, 0x0000a790, 0x00008700, 0x00008700,
6635 +        0x00008700},
6636 +       {0x00009a9c, 0x0000a794, 0x0000a794, 0x00008704, 0x00008704,
6637 +        0x00008704},
6638 +       {0x00009aa0, 0x0000ab84, 0x0000ab84, 0x00008708, 0x00008708,
6639 +        0x00008708},
6640 +       {0x00009aa4, 0x0000ab88, 0x0000ab88, 0x0000870c, 0x0000870c,
6641 +        0x0000870c},
6642 +       {0x00009aa8, 0x0000ab8c, 0x0000ab8c, 0x00008780, 0x00008780,
6643 +        0x00008780},
6644 +       {0x00009aac, 0x0000ab90, 0x0000ab90, 0x00008784, 0x00008784,
6645 +        0x00008784},
6646 +       {0x00009ab0, 0x0000ab94, 0x0000ab94, 0x00008b00, 0x00008b00,
6647 +        0x00008b00},
6648 +       {0x00009ab4, 0x0000af80, 0x0000af80, 0x00008b04, 0x00008b04,
6649 +        0x00008b04},
6650 +       {0x00009ab8, 0x0000af84, 0x0000af84, 0x00008b08, 0x00008b08,
6651 +        0x00008b08},
6652 +       {0x00009abc, 0x0000af88, 0x0000af88, 0x00008b0c, 0x00008b0c,
6653 +        0x00008b0c},
6654 +       {0x00009ac0, 0x0000af8c, 0x0000af8c, 0x00008b10, 0x00008b10,
6655 +        0x00008b10},
6656 +       {0x00009ac4, 0x0000af90, 0x0000af90, 0x00008b14, 0x00008b14,
6657 +        0x00008b14},
6658 +       {0x00009ac8, 0x0000af94, 0x0000af94, 0x00008b01, 0x00008b01,
6659 +        0x00008b01},
6660 +       {0x00009acc, 0x0000b380, 0x0000b380, 0x00008b05, 0x00008b05,
6661 +        0x00008b05},
6662 +       {0x00009ad0, 0x0000b384, 0x0000b384, 0x00008b09, 0x00008b09,
6663 +        0x00008b09},
6664 +       {0x00009ad4, 0x0000b388, 0x0000b388, 0x00008b0d, 0x00008b0d,
6665 +        0x00008b0d},
6666 +       {0x00009ad8, 0x0000b38c, 0x0000b38c, 0x00008b11, 0x00008b11,
6667 +        0x00008b11},
6668 +       {0x00009adc, 0x0000b390, 0x0000b390, 0x00008b15, 0x00008b15,
6669 +        0x00008b15},
6670 +       {0x00009ae0, 0x0000b394, 0x0000b394, 0x00008b02, 0x00008b02,
6671 +        0x00008b02},
6672 +       {0x00009ae4, 0x0000b398, 0x0000b398, 0x00008b06, 0x00008b06,
6673 +        0x00008b06},
6674 +       {0x00009ae8, 0x0000b780, 0x0000b780, 0x00008b0a, 0x00008b0a,
6675 +        0x00008b0a},
6676 +       {0x00009aec, 0x0000b784, 0x0000b784, 0x00008b0e, 0x00008b0e,
6677 +        0x00008b0e},
6678 +       {0x00009af0, 0x0000b788, 0x0000b788, 0x00008b12, 0x00008b12,
6679 +        0x00008b12},
6680 +       {0x00009af4, 0x0000b78c, 0x0000b78c, 0x00008b16, 0x00008b16,
6681 +        0x00008b16},
6682 +       {0x00009af8, 0x0000b790, 0x0000b790, 0x00008b03, 0x00008b03,
6683 +        0x00008b03},
6684 +       {0x00009afc, 0x0000b794, 0x0000b794, 0x00008b07, 0x00008b07,
6685 +        0x00008b07},
6686 +       {0x00009b00, 0x0000b798, 0x0000b798, 0x00008b0b, 0x00008b0b,
6687 +        0x00008b0b},
6688 +       {0x00009b04, 0x0000d784, 0x0000d784, 0x00008b0f, 0x00008b0f,
6689 +        0x00008b0f},
6690 +       {0x00009b08, 0x0000d788, 0x0000d788, 0x00008b13, 0x00008b13,
6691 +        0x00008b13},
6692 +       {0x00009b0c, 0x0000d78c, 0x0000d78c, 0x00008b17, 0x00008b17,
6693 +        0x00008b17},
6694 +       {0x00009b10, 0x0000d790, 0x0000d790, 0x00008b23, 0x00008b23,
6695 +        0x00008b23},
6696 +       {0x00009b14, 0x0000f780, 0x0000f780, 0x00008b27, 0x00008b27,
6697 +        0x00008b27},
6698 +       {0x00009b18, 0x0000f784, 0x0000f784, 0x00008b2b, 0x00008b2b,
6699 +        0x00008b2b},
6700 +       {0x00009b1c, 0x0000f788, 0x0000f788, 0x00008b2f, 0x00008b2f,
6701 +        0x00008b2f},
6702 +       {0x00009b20, 0x0000f78c, 0x0000f78c, 0x00008b33, 0x00008b33,
6703 +        0x00008b33},
6704 +       {0x00009b24, 0x0000f790, 0x0000f790, 0x00008b37, 0x00008b37,
6705 +        0x00008b37},
6706 +       {0x00009b28, 0x0000f794, 0x0000f794, 0x00008b43, 0x00008b43,
6707 +        0x00008b43},
6708 +       {0x00009b2c, 0x0000f7a4, 0x0000f7a4, 0x00008b47, 0x00008b47,
6709 +        0x00008b47},
6710 +       {0x00009b30, 0x0000f7a8, 0x0000f7a8, 0x00008b4b, 0x00008b4b,
6711 +        0x00008b4b},
6712 +       {0x00009b34, 0x0000f7ac, 0x0000f7ac, 0x00008b4f, 0x00008b4f,
6713 +        0x00008b4f},
6714 +       {0x00009b38, 0x0000f7b0, 0x0000f7b0, 0x00008b53, 0x00008b53,
6715 +        0x00008b53},
6716 +       {0x00009b3c, 0x0000f7b4, 0x0000f7b4, 0x00008b57, 0x00008b57,
6717 +        0x00008b57},
6718 +       {0x00009b40, 0x0000f7a1, 0x0000f7a1, 0x00008b5b, 0x00008b5b,
6719 +        0x00008b5b},
6720 +       {0x00009b44, 0x0000f7a5, 0x0000f7a5, 0x00008b5b, 0x00008b5b,
6721 +        0x00008b5b},
6722 +       {0x00009b48, 0x0000f7a9, 0x0000f7a9, 0x00008b5b, 0x00008b5b,
6723 +        0x00008b5b},
6724 +       {0x00009b4c, 0x0000f7ad, 0x0000f7ad, 0x00008b5b, 0x00008b5b,
6725 +        0x00008b5b},
6726 +       {0x00009b50, 0x0000f7b1, 0x0000f7b1, 0x00008b5b, 0x00008b5b,
6727 +        0x00008b5b},
6728 +       {0x00009b54, 0x0000f7b5, 0x0000f7b5, 0x00008b5b, 0x00008b5b,
6729 +        0x00008b5b},
6730 +       {0x00009b58, 0x0000f7c5, 0x0000f7c5, 0x00008b5b, 0x00008b5b,
6731 +        0x00008b5b},
6732 +       {0x00009b5c, 0x0000f7c9, 0x0000f7c9, 0x00008b5b, 0x00008b5b,
6733 +        0x00008b5b},
6734 +       {0x00009b60, 0x0000f7cd, 0x0000f7cd, 0x00008b5b, 0x00008b5b,
6735 +        0x00008b5b},
6736 +       {0x00009b64, 0x0000f7d1, 0x0000f7d1, 0x00008b5b, 0x00008b5b,
6737 +        0x00008b5b},
6738 +       {0x00009b68, 0x0000f7d5, 0x0000f7d5, 0x00008b5b, 0x00008b5b,
6739 +        0x00008b5b},
6740 +       {0x00009b6c, 0x0000f7c2, 0x0000f7c2, 0x00008b5b, 0x00008b5b,
6741 +        0x00008b5b},
6742 +       {0x00009b70, 0x0000f7c6, 0x0000f7c6, 0x00008b5b, 0x00008b5b,
6743 +        0x00008b5b},
6744 +       {0x00009b74, 0x0000f7ca, 0x0000f7ca, 0x00008b5b, 0x00008b5b,
6745 +        0x00008b5b},
6746 +       {0x00009b78, 0x0000f7ce, 0x0000f7ce, 0x00008b5b, 0x00008b5b,
6747 +        0x00008b5b},
6748 +       {0x00009b7c, 0x0000f7d2, 0x0000f7d2, 0x00008b5b, 0x00008b5b,
6749 +        0x00008b5b},
6750 +       {0x00009b80, 0x0000f7d6, 0x0000f7d6, 0x00008b5b, 0x00008b5b,
6751 +        0x00008b5b},
6752 +       {0x00009b84, 0x0000f7c3, 0x0000f7c3, 0x00008b5b, 0x00008b5b,
6753 +        0x00008b5b},
6754 +       {0x00009b88, 0x0000f7c7, 0x0000f7c7, 0x00008b5b, 0x00008b5b,
6755 +        0x00008b5b},
6756 +       {0x00009b8c, 0x0000f7cb, 0x0000f7cb, 0x00008b5b, 0x00008b5b,
6757 +        0x00008b5b},
6758 +       {0x00009b90, 0x0000f7d3, 0x0000f7d3, 0x00008b5b, 0x00008b5b,
6759 +        0x00008b5b},
6760 +       {0x00009b94, 0x0000f7d7, 0x0000f7d7, 0x00008b5b, 0x00008b5b,
6761 +        0x00008b5b},
6762 +       {0x00009b98, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b,
6763 +        0x00008b5b},
6764 +       {0x00009b9c, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b,
6765 +        0x00008b5b},
6766 +       {0x00009ba0, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b,
6767 +        0x00008b5b},
6768 +       {0x00009ba4, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b,
6769 +        0x00008b5b},
6770 +       {0x00009ba8, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b,
6771 +        0x00008b5b},
6772 +       {0x00009bac, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b,
6773 +        0x00008b5b},
6774 +       {0x00009bb0, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b,
6775 +        0x00008b5b},
6776 +       {0x00009bb4, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b,
6777 +        0x00008b5b},
6778 +       {0x00009bb8, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b,
6779 +        0x00008b5b},
6780 +       {0x00009bbc, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b,
6781 +        0x00008b5b},
6782 +       {0x00009bc0, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b,
6783 +        0x00008b5b},
6784 +       {0x00009bc4, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b,
6785 +        0x00008b5b},
6786 +       {0x00009bc8, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b,
6787 +        0x00008b5b},
6788 +       {0x00009bcc, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b,
6789 +        0x00008b5b},
6790 +       {0x00009bd0, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b,
6791 +        0x00008b5b},
6792 +       {0x00009bd4, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b,
6793 +        0x00008b5b},
6794 +       {0x00009bd8, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b,
6795 +        0x00008b5b},
6796 +       {0x00009bdc, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b,
6797 +        0x00008b5b},
6798 +       {0x00009be0, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b,
6799 +        0x00008b5b},
6800 +       {0x00009be4, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b,
6801 +        0x00008b5b},
6802 +       {0x00009be8, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b,
6803 +        0x00008b5b},
6804 +       {0x00009bec, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b,
6805 +        0x00008b5b},
6806 +       {0x00009bf0, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b,
6807 +        0x00008b5b},
6808 +       {0x00009bf4, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b,
6809 +        0x00008b5b},
6810 +       {0x00009bf8, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b,
6811 +        0x00008b5b},
6812 +       {0x00009bfc, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b,
6813 +        0x00008b5b},
6814 +       {0x00009848, 0x00001066, 0x00001066, 0x00001050, 0x00001050,
6815 +        0x00001050},
6816 +       {0x0000a848, 0x00001066, 0x00001066, 0x00001050, 0x00001050,
6817 +        0x00001050},
6818 +};
6819 +
6820 +static const u32 ar9280Modes_original_rxgain_9280_2[][6] = {
6821 +       {0x00009a00, 0x00008184, 0x00008184, 0x00000290, 0x00000290,
6822 +        0x00000290},
6823 +       {0x00009a04, 0x00008188, 0x00008188, 0x00000300, 0x00000300,
6824 +        0x00000300},
6825 +       {0x00009a08, 0x0000818c, 0x0000818c, 0x00000304, 0x00000304,
6826 +        0x00000304},
6827 +       {0x00009a0c, 0x00008190, 0x00008190, 0x00000308, 0x00000308,
6828 +        0x00000308},
6829 +       {0x00009a10, 0x00008194, 0x00008194, 0x0000030c, 0x0000030c,
6830 +        0x0000030c},
6831 +       {0x00009a14, 0x00008200, 0x00008200, 0x00008000, 0x00008000,
6832 +        0x00008000},
6833 +       {0x00009a18, 0x00008204, 0x00008204, 0x00008004, 0x00008004,
6834 +        0x00008004},
6835 +       {0x00009a1c, 0x00008208, 0x00008208, 0x00008008, 0x00008008,
6836 +        0x00008008},
6837 +       {0x00009a20, 0x0000820c, 0x0000820c, 0x0000800c, 0x0000800c,
6838 +        0x0000800c},
6839 +       {0x00009a24, 0x00008210, 0x00008210, 0x00008080, 0x00008080,
6840 +        0x00008080},
6841 +       {0x00009a28, 0x00008214, 0x00008214, 0x00008084, 0x00008084,
6842 +        0x00008084},
6843 +       {0x00009a2c, 0x00008280, 0x00008280, 0x00008088, 0x00008088,
6844 +        0x00008088},
6845 +       {0x00009a30, 0x00008284, 0x00008284, 0x0000808c, 0x0000808c,
6846 +        0x0000808c},
6847 +       {0x00009a34, 0x00008288, 0x00008288, 0x00008100, 0x00008100,
6848 +        0x00008100},
6849 +       {0x00009a38, 0x0000828c, 0x0000828c, 0x00008104, 0x00008104,
6850 +        0x00008104},
6851 +       {0x00009a3c, 0x00008290, 0x00008290, 0x00008108, 0x00008108,
6852 +        0x00008108},
6853 +       {0x00009a40, 0x00008300, 0x00008300, 0x0000810c, 0x0000810c,
6854 +        0x0000810c},
6855 +       {0x00009a44, 0x00008304, 0x00008304, 0x00008110, 0x00008110,
6856 +        0x00008110},
6857 +       {0x00009a48, 0x00008308, 0x00008308, 0x00008114, 0x00008114,
6858 +        0x00008114},
6859 +       {0x00009a4c, 0x0000830c, 0x0000830c, 0x00008180, 0x00008180,
6860 +        0x00008180},
6861 +       {0x00009a50, 0x00008310, 0x00008310, 0x00008184, 0x00008184,
6862 +        0x00008184},
6863 +       {0x00009a54, 0x00008314, 0x00008314, 0x00008188, 0x00008188,
6864 +        0x00008188},
6865 +       {0x00009a58, 0x00008380, 0x00008380, 0x0000818c, 0x0000818c,
6866 +        0x0000818c},
6867 +       {0x00009a5c, 0x00008384, 0x00008384, 0x00008190, 0x00008190,
6868 +        0x00008190},
6869 +       {0x00009a60, 0x00008388, 0x00008388, 0x00008194, 0x00008194,
6870 +        0x00008194},
6871 +       {0x00009a64, 0x0000838c, 0x0000838c, 0x000081a0, 0x000081a0,
6872 +        0x000081a0},
6873 +       {0x00009a68, 0x00008390, 0x00008390, 0x0000820c, 0x0000820c,
6874 +        0x0000820c},
6875 +       {0x00009a6c, 0x00008394, 0x00008394, 0x000081a8, 0x000081a8,
6876 +        0x000081a8},
6877 +       {0x00009a70, 0x0000a380, 0x0000a380, 0x00008284, 0x00008284,
6878 +        0x00008284},
6879 +       {0x00009a74, 0x0000a384, 0x0000a384, 0x00008288, 0x00008288,
6880 +        0x00008288},
6881 +       {0x00009a78, 0x0000a388, 0x0000a388, 0x00008224, 0x00008224,
6882 +        0x00008224},
6883 +       {0x00009a7c, 0x0000a38c, 0x0000a38c, 0x00008290, 0x00008290,
6884 +        0x00008290},
6885 +       {0x00009a80, 0x0000a390, 0x0000a390, 0x00008300, 0x00008300,
6886 +        0x00008300},
6887 +       {0x00009a84, 0x0000a394, 0x0000a394, 0x00008304, 0x00008304,
6888 +        0x00008304},
6889 +       {0x00009a88, 0x0000a780, 0x0000a780, 0x00008308, 0x00008308,
6890 +        0x00008308},
6891 +       {0x00009a8c, 0x0000a784, 0x0000a784, 0x0000830c, 0x0000830c,
6892 +        0x0000830c},
6893 +       {0x00009a90, 0x0000a788, 0x0000a788, 0x00008380, 0x00008380,
6894 +        0x00008380},
6895 +       {0x00009a94, 0x0000a78c, 0x0000a78c, 0x00008384, 0x00008384,
6896 +        0x00008384},
6897 +       {0x00009a98, 0x0000a790, 0x0000a790, 0x00008700, 0x00008700,
6898 +        0x00008700},
6899 +       {0x00009a9c, 0x0000a794, 0x0000a794, 0x00008704, 0x00008704,
6900 +        0x00008704},
6901 +       {0x00009aa0, 0x0000ab84, 0x0000ab84, 0x00008708, 0x00008708,
6902 +        0x00008708},
6903 +       {0x00009aa4, 0x0000ab88, 0x0000ab88, 0x0000870c, 0x0000870c,
6904 +        0x0000870c},
6905 +       {0x00009aa8, 0x0000ab8c, 0x0000ab8c, 0x00008780, 0x00008780,
6906 +        0x00008780},
6907 +       {0x00009aac, 0x0000ab90, 0x0000ab90, 0x00008784, 0x00008784,
6908 +        0x00008784},
6909 +       {0x00009ab0, 0x0000ab94, 0x0000ab94, 0x00008b00, 0x00008b00,
6910 +        0x00008b00},
6911 +       {0x00009ab4, 0x0000af80, 0x0000af80, 0x00008b04, 0x00008b04,
6912 +        0x00008b04},
6913 +       {0x00009ab8, 0x0000af84, 0x0000af84, 0x00008b08, 0x00008b08,
6914 +        0x00008b08},
6915 +       {0x00009abc, 0x0000af88, 0x0000af88, 0x00008b0c, 0x00008b0c,
6916 +        0x00008b0c},
6917 +       {0x00009ac0, 0x0000af8c, 0x0000af8c, 0x00008b80, 0x00008b80,
6918 +        0x00008b80},
6919 +       {0x00009ac4, 0x0000af90, 0x0000af90, 0x00008b84, 0x00008b84,
6920 +        0x00008b84},
6921 +       {0x00009ac8, 0x0000af94, 0x0000af94, 0x00008b88, 0x00008b88,
6922 +        0x00008b88},
6923 +       {0x00009acc, 0x0000b380, 0x0000b380, 0x00008b8c, 0x00008b8c,
6924 +        0x00008b8c},
6925 +       {0x00009ad0, 0x0000b384, 0x0000b384, 0x00008b90, 0x00008b90,
6926 +        0x00008b90},
6927 +       {0x00009ad4, 0x0000b388, 0x0000b388, 0x00008f80, 0x00008f80,
6928 +        0x00008f80},
6929 +       {0x00009ad8, 0x0000b38c, 0x0000b38c, 0x00008f84, 0x00008f84,
6930 +        0x00008f84},
6931 +       {0x00009adc, 0x0000b390, 0x0000b390, 0x00008f88, 0x00008f88,
6932 +        0x00008f88},
6933 +       {0x00009ae0, 0x0000b394, 0x0000b394, 0x00008f8c, 0x00008f8c,
6934 +        0x00008f8c},
6935 +       {0x00009ae4, 0x0000b398, 0x0000b398, 0x00008f90, 0x00008f90,
6936 +        0x00008f90},
6937 +       {0x00009ae8, 0x0000b780, 0x0000b780, 0x0000930c, 0x0000930c,
6938 +        0x0000930c},
6939 +       {0x00009aec, 0x0000b784, 0x0000b784, 0x00009310, 0x00009310,
6940 +        0x00009310},
6941 +       {0x00009af0, 0x0000b788, 0x0000b788, 0x00009384, 0x00009384,
6942 +        0x00009384},
6943 +       {0x00009af4, 0x0000b78c, 0x0000b78c, 0x00009388, 0x00009388,
6944 +        0x00009388},
6945 +       {0x00009af8, 0x0000b790, 0x0000b790, 0x00009324, 0x00009324,
6946 +        0x00009324},
6947 +       {0x00009afc, 0x0000b794, 0x0000b794, 0x00009704, 0x00009704,
6948 +        0x00009704},
6949 +       {0x00009b00, 0x0000b798, 0x0000b798, 0x000096a4, 0x000096a4,
6950 +        0x000096a4},
6951 +       {0x00009b04, 0x0000d784, 0x0000d784, 0x000096a8, 0x000096a8,
6952 +        0x000096a8},
6953 +       {0x00009b08, 0x0000d788, 0x0000d788, 0x00009710, 0x00009710,
6954 +        0x00009710},
6955 +       {0x00009b0c, 0x0000d78c, 0x0000d78c, 0x00009714, 0x00009714,
6956 +        0x00009714},
6957 +       {0x00009b10, 0x0000d790, 0x0000d790, 0x00009720, 0x00009720,
6958 +        0x00009720},
6959 +       {0x00009b14, 0x0000f780, 0x0000f780, 0x00009724, 0x00009724,
6960 +        0x00009724},
6961 +       {0x00009b18, 0x0000f784, 0x0000f784, 0x00009728, 0x00009728,
6962 +        0x00009728},
6963 +       {0x00009b1c, 0x0000f788, 0x0000f788, 0x0000972c, 0x0000972c,
6964 +        0x0000972c},
6965 +       {0x00009b20, 0x0000f78c, 0x0000f78c, 0x000097a0, 0x000097a0,
6966 +        0x000097a0},
6967 +       {0x00009b24, 0x0000f790, 0x0000f790, 0x000097a4, 0x000097a4,
6968 +        0x000097a4},
6969 +       {0x00009b28, 0x0000f794, 0x0000f794, 0x000097a8, 0x000097a8,
6970 +        0x000097a8},
6971 +       {0x00009b2c, 0x0000f7a4, 0x0000f7a4, 0x000097b0, 0x000097b0,
6972 +        0x000097b0},
6973 +       {0x00009b30, 0x0000f7a8, 0x0000f7a8, 0x000097b4, 0x000097b4,
6974 +        0x000097b4},
6975 +       {0x00009b34, 0x0000f7ac, 0x0000f7ac, 0x000097b8, 0x000097b8,
6976 +        0x000097b8},
6977 +       {0x00009b38, 0x0000f7b0, 0x0000f7b0, 0x000097a5, 0x000097a5,
6978 +        0x000097a5},
6979 +       {0x00009b3c, 0x0000f7b4, 0x0000f7b4, 0x000097a9, 0x000097a9,
6980 +        0x000097a9},
6981 +       {0x00009b40, 0x0000f7a1, 0x0000f7a1, 0x000097ad, 0x000097ad,
6982 +        0x000097ad},
6983 +       {0x00009b44, 0x0000f7a5, 0x0000f7a5, 0x000097b1, 0x000097b1,
6984 +        0x000097b1},
6985 +       {0x00009b48, 0x0000f7a9, 0x0000f7a9, 0x000097b5, 0x000097b5,
6986 +        0x000097b5},
6987 +       {0x00009b4c, 0x0000f7ad, 0x0000f7ad, 0x000097b9, 0x000097b9,
6988 +        0x000097b9},
6989 +       {0x00009b50, 0x0000f7b1, 0x0000f7b1, 0x000097c5, 0x000097c5,
6990 +        0x000097c5},
6991 +       {0x00009b54, 0x0000f7b5, 0x0000f7b5, 0x000097c9, 0x000097c9,
6992 +        0x000097c9},
6993 +       {0x00009b58, 0x0000f7c5, 0x0000f7c5, 0x000097d1, 0x000097d1,
6994 +        0x000097d1},
6995 +       {0x00009b5c, 0x0000f7c9, 0x0000f7c9, 0x000097d5, 0x000097d5,
6996 +        0x000097d5},
6997 +       {0x00009b60, 0x0000f7cd, 0x0000f7cd, 0x000097d9, 0x000097d9,
6998 +        0x000097d9},
6999 +       {0x00009b64, 0x0000f7d1, 0x0000f7d1, 0x000097c6, 0x000097c6,
7000 +        0x000097c6},
7001 +       {0x00009b68, 0x0000f7d5, 0x0000f7d5, 0x000097ca, 0x000097ca,
7002 +        0x000097ca},
7003 +       {0x00009b6c, 0x0000f7c2, 0x0000f7c2, 0x000097ce, 0x000097ce,
7004 +        0x000097ce},
7005 +       {0x00009b70, 0x0000f7c6, 0x0000f7c6, 0x000097d2, 0x000097d2,
7006 +        0x000097d2},
7007 +       {0x00009b74, 0x0000f7ca, 0x0000f7ca, 0x000097d6, 0x000097d6,
7008 +        0x000097d6},
7009 +       {0x00009b78, 0x0000f7ce, 0x0000f7ce, 0x000097c3, 0x000097c3,
7010 +        0x000097c3},
7011 +       {0x00009b7c, 0x0000f7d2, 0x0000f7d2, 0x000097c7, 0x000097c7,
7012 +        0x000097c7},
7013 +       {0x00009b80, 0x0000f7d6, 0x0000f7d6, 0x000097cb, 0x000097cb,
7014 +        0x000097cb},
7015 +       {0x00009b84, 0x0000f7c3, 0x0000f7c3, 0x000097cf, 0x000097cf,
7016 +        0x000097cf},
7017 +       {0x00009b88, 0x0000f7c7, 0x0000f7c7, 0x000097d7, 0x000097d7,
7018 +        0x000097d7},
7019 +       {0x00009b8c, 0x0000f7cb, 0x0000f7cb, 0x000097db, 0x000097db,
7020 +        0x000097db},
7021 +       {0x00009b90, 0x0000f7d3, 0x0000f7d3, 0x000097db, 0x000097db,
7022 +        0x000097db},
7023 +       {0x00009b94, 0x0000f7d7, 0x0000f7d7, 0x000097db, 0x000097db,
7024 +        0x000097db},
7025 +       {0x00009b98, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
7026 +        0x000097db},
7027 +       {0x00009b9c, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
7028 +        0x000097db},
7029 +       {0x00009ba0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
7030 +        0x000097db},
7031 +       {0x00009ba4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
7032 +        0x000097db},
7033 +       {0x00009ba8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
7034 +        0x000097db},
7035 +       {0x00009bac, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
7036 +        0x000097db},
7037 +       {0x00009bb0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
7038 +        0x000097db},
7039 +       {0x00009bb4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
7040 +        0x000097db},
7041 +       {0x00009bb8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
7042 +        0x000097db},
7043 +       {0x00009bbc, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
7044 +        0x000097db},
7045 +       {0x00009bc0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
7046 +        0x000097db},
7047 +       {0x00009bc4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
7048 +        0x000097db},
7049 +       {0x00009bc8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
7050 +        0x000097db},
7051 +       {0x00009bcc, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
7052 +        0x000097db},
7053 +       {0x00009bd0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
7054 +        0x000097db},
7055 +       {0x00009bd4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
7056 +        0x000097db},
7057 +       {0x00009bd8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
7058 +        0x000097db},
7059 +       {0x00009bdc, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
7060 +        0x000097db},
7061 +       {0x00009be0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
7062 +        0x000097db},
7063 +       {0x00009be4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
7064 +        0x000097db},
7065 +       {0x00009be8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
7066 +        0x000097db},
7067 +       {0x00009bec, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
7068 +        0x000097db},
7069 +       {0x00009bf0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
7070 +        0x000097db},
7071 +       {0x00009bf4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
7072 +        0x000097db},
7073 +       {0x00009bf8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
7074 +        0x000097db},
7075 +       {0x00009bfc, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db,
7076 +        0x000097db},
7077 +       {0x00009848, 0x00001066, 0x00001066, 0x00001063, 0x00001063,
7078 +        0x00001063},
7079 +       {0x0000a848, 0x00001066, 0x00001066, 0x00001063, 0x00001063,
7080 +        0x00001063},
7081 +};
7082 +
7083 +static const u32 ar9280Modes_backoff_13db_rxgain_9280_2[][6] = {
7084 +       {0x00009a00, 0x00008184, 0x00008184, 0x00000290, 0x00000290,
7085 +        0x00000290},
7086 +       {0x00009a04, 0x00008188, 0x00008188, 0x00000300, 0x00000300,
7087 +        0x00000300},
7088 +       {0x00009a08, 0x0000818c, 0x0000818c, 0x00000304, 0x00000304,
7089 +        0x00000304},
7090 +       {0x00009a0c, 0x00008190, 0x00008190, 0x00000308, 0x00000308,
7091 +        0x00000308},
7092 +       {0x00009a10, 0x00008194, 0x00008194, 0x0000030c, 0x0000030c,
7093 +        0x0000030c},
7094 +       {0x00009a14, 0x00008200, 0x00008200, 0x00008000, 0x00008000,
7095 +        0x00008000},
7096 +       {0x00009a18, 0x00008204, 0x00008204, 0x00008004, 0x00008004,
7097 +        0x00008004},
7098 +       {0x00009a1c, 0x00008208, 0x00008208, 0x00008008, 0x00008008,
7099 +        0x00008008},
7100 +       {0x00009a20, 0x0000820c, 0x0000820c, 0x0000800c, 0x0000800c,
7101 +        0x0000800c},
7102 +       {0x00009a24, 0x00008210, 0x00008210, 0x00008080, 0x00008080,
7103 +        0x00008080},
7104 +       {0x00009a28, 0x00008214, 0x00008214, 0x00008084, 0x00008084,
7105 +        0x00008084},
7106 +       {0x00009a2c, 0x00008280, 0x00008280, 0x00008088, 0x00008088,
7107 +        0x00008088},
7108 +       {0x00009a30, 0x00008284, 0x00008284, 0x0000808c, 0x0000808c,
7109 +        0x0000808c},
7110 +       {0x00009a34, 0x00008288, 0x00008288, 0x00008100, 0x00008100,
7111 +        0x00008100},
7112 +       {0x00009a38, 0x0000828c, 0x0000828c, 0x00008104, 0x00008104,
7113 +        0x00008104},
7114 +       {0x00009a3c, 0x00008290, 0x00008290, 0x00008108, 0x00008108,
7115 +        0x00008108},
7116 +       {0x00009a40, 0x00008300, 0x00008300, 0x0000810c, 0x0000810c,
7117 +        0x0000810c},
7118 +       {0x00009a44, 0x00008304, 0x00008304, 0x00008110, 0x00008110,
7119 +        0x00008110},
7120 +       {0x00009a48, 0x00008308, 0x00008308, 0x00008114, 0x00008114,
7121 +        0x00008114},
7122 +       {0x00009a4c, 0x0000830c, 0x0000830c, 0x00008180, 0x00008180,
7123 +        0x00008180},
7124 +       {0x00009a50, 0x00008310, 0x00008310, 0x00008184, 0x00008184,
7125 +        0x00008184},
7126 +       {0x00009a54, 0x00008314, 0x00008314, 0x00008188, 0x00008188,
7127 +        0x00008188},
7128 +       {0x00009a58, 0x00008380, 0x00008380, 0x0000818c, 0x0000818c,
7129 +        0x0000818c},
7130 +       {0x00009a5c, 0x00008384, 0x00008384, 0x00008190, 0x00008190,
7131 +        0x00008190},
7132 +       {0x00009a60, 0x00008388, 0x00008388, 0x00008194, 0x00008194,
7133 +        0x00008194},
7134 +       {0x00009a64, 0x0000838c, 0x0000838c, 0x000081a0, 0x000081a0,
7135 +        0x000081a0},
7136 +       {0x00009a68, 0x00008390, 0x00008390, 0x0000820c, 0x0000820c,
7137 +        0x0000820c},
7138 +       {0x00009a6c, 0x00008394, 0x00008394, 0x000081a8, 0x000081a8,
7139 +        0x000081a8},
7140 +       {0x00009a70, 0x0000a380, 0x0000a380, 0x00008284, 0x00008284,
7141 +        0x00008284},
7142 +       {0x00009a74, 0x0000a384, 0x0000a384, 0x00008288, 0x00008288,
7143 +        0x00008288},
7144 +       {0x00009a78, 0x0000a388, 0x0000a388, 0x00008224, 0x00008224,
7145 +        0x00008224},
7146 +       {0x00009a7c, 0x0000a38c, 0x0000a38c, 0x00008290, 0x00008290,
7147 +        0x00008290},
7148 +       {0x00009a80, 0x0000a390, 0x0000a390, 0x00008300, 0x00008300,
7149 +        0x00008300},
7150 +       {0x00009a84, 0x0000a394, 0x0000a394, 0x00008304, 0x00008304,
7151 +        0x00008304},
7152 +       {0x00009a88, 0x0000a780, 0x0000a780, 0x00008308, 0x00008308,
7153 +        0x00008308},
7154 +       {0x00009a8c, 0x0000a784, 0x0000a784, 0x0000830c, 0x0000830c,
7155 +        0x0000830c},
7156 +       {0x00009a90, 0x0000a788, 0x0000a788, 0x00008380, 0x00008380,
7157 +        0x00008380},
7158 +       {0x00009a94, 0x0000a78c, 0x0000a78c, 0x00008384, 0x00008384,
7159 +        0x00008384},
7160 +       {0x00009a98, 0x0000a790, 0x0000a790, 0x00008700, 0x00008700,
7161 +        0x00008700},
7162 +       {0x00009a9c, 0x0000a794, 0x0000a794, 0x00008704, 0x00008704,
7163 +        0x00008704},
7164 +       {0x00009aa0, 0x0000ab84, 0x0000ab84, 0x00008708, 0x00008708,
7165 +        0x00008708},
7166 +       {0x00009aa4, 0x0000ab88, 0x0000ab88, 0x0000870c, 0x0000870c,
7167 +        0x0000870c},
7168 +       {0x00009aa8, 0x0000ab8c, 0x0000ab8c, 0x00008780, 0x00008780,
7169 +        0x00008780},
7170 +       {0x00009aac, 0x0000ab90, 0x0000ab90, 0x00008784, 0x00008784,
7171 +        0x00008784},
7172 +       {0x00009ab0, 0x0000ab94, 0x0000ab94, 0x00008b00, 0x00008b00,
7173 +        0x00008b00},
7174 +       {0x00009ab4, 0x0000af80, 0x0000af80, 0x00008b04, 0x00008b04,
7175 +        0x00008b04},
7176 +       {0x00009ab8, 0x0000af84, 0x0000af84, 0x00008b08, 0x00008b08,
7177 +        0x00008b08},
7178 +       {0x00009abc, 0x0000af88, 0x0000af88, 0x00008b0c, 0x00008b0c,
7179 +        0x00008b0c},
7180 +       {0x00009ac0, 0x0000af8c, 0x0000af8c, 0x00008b80, 0x00008b80,
7181 +        0x00008b80},
7182 +       {0x00009ac4, 0x0000af90, 0x0000af90, 0x00008b84, 0x00008b84,
7183 +        0x00008b84},
7184 +       {0x00009ac8, 0x0000af94, 0x0000af94, 0x00008b88, 0x00008b88,
7185 +        0x00008b88},
7186 +       {0x00009acc, 0x0000b380, 0x0000b380, 0x00008b8c, 0x00008b8c,
7187 +        0x00008b8c},
7188 +       {0x00009ad0, 0x0000b384, 0x0000b384, 0x00008b90, 0x00008b90,
7189 +        0x00008b90},
7190 +       {0x00009ad4, 0x0000b388, 0x0000b388, 0x00008f80, 0x00008f80,
7191 +        0x00008f80},
7192 +       {0x00009ad8, 0x0000b38c, 0x0000b38c, 0x00008f84, 0x00008f84,
7193 +        0x00008f84},
7194 +       {0x00009adc, 0x0000b390, 0x0000b390, 0x00008f88, 0x00008f88,
7195 +        0x00008f88},
7196 +       {0x00009ae0, 0x0000b394, 0x0000b394, 0x00008f8c, 0x00008f8c,
7197 +        0x00008f8c},
7198 +       {0x00009ae4, 0x0000b398, 0x0000b398, 0x00008f90, 0x00008f90,
7199 +        0x00008f90},
7200 +       {0x00009ae8, 0x0000b780, 0x0000b780, 0x00009310, 0x00009310,
7201 +        0x00009310},
7202 +       {0x00009aec, 0x0000b784, 0x0000b784, 0x00009314, 0x00009314,
7203 +        0x00009314},
7204 +       {0x00009af0, 0x0000b788, 0x0000b788, 0x00009320, 0x00009320,
7205 +        0x00009320},
7206 +       {0x00009af4, 0x0000b78c, 0x0000b78c, 0x00009324, 0x00009324,
7207 +        0x00009324},
7208 +       {0x00009af8, 0x0000b790, 0x0000b790, 0x00009328, 0x00009328,
7209 +        0x00009328},
7210 +       {0x00009afc, 0x0000b794, 0x0000b794, 0x0000932c, 0x0000932c,
7211 +        0x0000932c},
7212 +       {0x00009b00, 0x0000b798, 0x0000b798, 0x00009330, 0x00009330,
7213 +        0x00009330},
7214 +       {0x00009b04, 0x0000d784, 0x0000d784, 0x00009334, 0x00009334,
7215 +        0x00009334},
7216 +       {0x00009b08, 0x0000d788, 0x0000d788, 0x00009321, 0x00009321,
7217 +        0x00009321},
7218 +       {0x00009b0c, 0x0000d78c, 0x0000d78c, 0x00009325, 0x00009325,
7219 +        0x00009325},
7220 +       {0x00009b10, 0x0000d790, 0x0000d790, 0x00009329, 0x00009329,
7221 +        0x00009329},
7222 +       {0x00009b14, 0x0000f780, 0x0000f780, 0x0000932d, 0x0000932d,
7223 +        0x0000932d},
7224 +       {0x00009b18, 0x0000f784, 0x0000f784, 0x00009331, 0x00009331,
7225 +        0x00009331},
7226 +       {0x00009b1c, 0x0000f788, 0x0000f788, 0x00009335, 0x00009335,
7227 +        0x00009335},
7228 +       {0x00009b20, 0x0000f78c, 0x0000f78c, 0x00009322, 0x00009322,
7229 +        0x00009322},
7230 +       {0x00009b24, 0x0000f790, 0x0000f790, 0x00009326, 0x00009326,
7231 +        0x00009326},
7232 +       {0x00009b28, 0x0000f794, 0x0000f794, 0x0000932a, 0x0000932a,
7233 +        0x0000932a},
7234 +       {0x00009b2c, 0x0000f7a4, 0x0000f7a4, 0x0000932e, 0x0000932e,
7235 +        0x0000932e},
7236 +       {0x00009b30, 0x0000f7a8, 0x0000f7a8, 0x00009332, 0x00009332,
7237 +        0x00009332},
7238 +       {0x00009b34, 0x0000f7ac, 0x0000f7ac, 0x00009336, 0x00009336,
7239 +        0x00009336},
7240 +       {0x00009b38, 0x0000f7b0, 0x0000f7b0, 0x00009323, 0x00009323,
7241 +        0x00009323},
7242 +       {0x00009b3c, 0x0000f7b4, 0x0000f7b4, 0x00009327, 0x00009327,
7243 +        0x00009327},
7244 +       {0x00009b40, 0x0000f7a1, 0x0000f7a1, 0x0000932b, 0x0000932b,
7245 +        0x0000932b},
7246 +       {0x00009b44, 0x0000f7a5, 0x0000f7a5, 0x0000932f, 0x0000932f,
7247 +        0x0000932f},
7248 +       {0x00009b48, 0x0000f7a9, 0x0000f7a9, 0x00009333, 0x00009333,
7249 +        0x00009333},
7250 +       {0x00009b4c, 0x0000f7ad, 0x0000f7ad, 0x00009337, 0x00009337,
7251 +        0x00009337},
7252 +       {0x00009b50, 0x0000f7b1, 0x0000f7b1, 0x00009343, 0x00009343,
7253 +        0x00009343},
7254 +       {0x00009b54, 0x0000f7b5, 0x0000f7b5, 0x00009347, 0x00009347,
7255 +        0x00009347},
7256 +       {0x00009b58, 0x0000f7c5, 0x0000f7c5, 0x0000934b, 0x0000934b,
7257 +        0x0000934b},
7258 +       {0x00009b5c, 0x0000f7c9, 0x0000f7c9, 0x0000934f, 0x0000934f,
7259 +        0x0000934f},
7260 +       {0x00009b60, 0x0000f7cd, 0x0000f7cd, 0x00009353, 0x00009353,
7261 +        0x00009353},
7262 +       {0x00009b64, 0x0000f7d1, 0x0000f7d1, 0x00009357, 0x00009357,
7263 +        0x00009357},
7264 +       {0x00009b68, 0x0000f7d5, 0x0000f7d5, 0x0000935b, 0x0000935b,
7265 +        0x0000935b},
7266 +       {0x00009b6c, 0x0000f7c2, 0x0000f7c2, 0x0000935b, 0x0000935b,
7267 +        0x0000935b},
7268 +       {0x00009b70, 0x0000f7c6, 0x0000f7c6, 0x0000935b, 0x0000935b,
7269 +        0x0000935b},
7270 +       {0x00009b74, 0x0000f7ca, 0x0000f7ca, 0x0000935b, 0x0000935b,
7271 +        0x0000935b},
7272 +       {0x00009b78, 0x0000f7ce, 0x0000f7ce, 0x0000935b, 0x0000935b,
7273 +        0x0000935b},
7274 +       {0x00009b7c, 0x0000f7d2, 0x0000f7d2, 0x0000935b, 0x0000935b,
7275 +        0x0000935b},
7276 +       {0x00009b80, 0x0000f7d6, 0x0000f7d6, 0x0000935b, 0x0000935b,
7277 +        0x0000935b},
7278 +       {0x00009b84, 0x0000f7c3, 0x0000f7c3, 0x0000935b, 0x0000935b,
7279 +        0x0000935b},
7280 +       {0x00009b88, 0x0000f7c7, 0x0000f7c7, 0x0000935b, 0x0000935b,
7281 +        0x0000935b},
7282 +       {0x00009b8c, 0x0000f7cb, 0x0000f7cb, 0x0000935b, 0x0000935b,
7283 +        0x0000935b},
7284 +       {0x00009b90, 0x0000f7d3, 0x0000f7d3, 0x0000935b, 0x0000935b,
7285 +        0x0000935b},
7286 +       {0x00009b94, 0x0000f7d7, 0x0000f7d7, 0x0000935b, 0x0000935b,
7287 +        0x0000935b},
7288 +       {0x00009b98, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b,
7289 +        0x0000935b},
7290 +       {0x00009b9c, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b,
7291 +        0x0000935b},
7292 +       {0x00009ba0, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b,
7293 +        0x0000935b},
7294 +       {0x00009ba4, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b,
7295 +        0x0000935b},
7296 +       {0x00009ba8, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b,
7297 +        0x0000935b},
7298 +       {0x00009bac, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b,
7299 +        0x0000935b},
7300 +       {0x00009bb0, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b,
7301 +        0x0000935b},
7302 +       {0x00009bb4, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b,
7303 +        0x0000935b},
7304 +       {0x00009bb8, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b,
7305 +        0x0000935b},
7306 +       {0x00009bbc, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b,
7307 +        0x0000935b},
7308 +       {0x00009bc0, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b,
7309 +        0x0000935b},
7310 +       {0x00009bc4, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b,
7311 +        0x0000935b},
7312 +       {0x00009bc8, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b,
7313 +        0x0000935b},
7314 +       {0x00009bcc, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b,
7315 +        0x0000935b},
7316 +       {0x00009bd0, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b,
7317 +        0x0000935b},
7318 +       {0x00009bd4, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b,
7319 +        0x0000935b},
7320 +       {0x00009bd8, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b,
7321 +        0x0000935b},
7322 +       {0x00009bdc, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b,
7323 +        0x0000935b},
7324 +       {0x00009be0, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b,
7325 +        0x0000935b},
7326 +       {0x00009be4, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b,
7327 +        0x0000935b},
7328 +       {0x00009be8, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b,
7329 +        0x0000935b},
7330 +       {0x00009bec, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b,
7331 +        0x0000935b},
7332 +       {0x00009bf0, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b,
7333 +        0x0000935b},
7334 +       {0x00009bf4, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b,
7335 +        0x0000935b},
7336 +       {0x00009bf8, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b,
7337 +        0x0000935b},
7338 +       {0x00009bfc, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b,
7339 +        0x0000935b},
7340 +       {0x00009848, 0x00001066, 0x00001066, 0x0000105a, 0x0000105a,
7341 +        0x0000105a},
7342 +       {0x0000a848, 0x00001066, 0x00001066, 0x0000105a, 0x0000105a,
7343 +        0x0000105a},
7344 +};
7345 +
7346 +static const u32 ar9280Modes_high_power_tx_gain_9280_2[][6] = {
7347 +       {0x0000a274, 0x0a19e652, 0x0a19e652, 0x0a1aa652, 0x0a1aa652,
7348 +        0x0a1aa652},
7349 +       {0x0000a27c, 0x050739ce, 0x050739ce, 0x050739ce, 0x050739ce,
7350 +        0x050739ce},
7351 +       {0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
7352 +        0x00000000},
7353 +       {0x0000a304, 0x00003002, 0x00003002, 0x00004002, 0x00004002,
7354 +        0x00004002},
7355 +       {0x0000a308, 0x00006004, 0x00006004, 0x00007008, 0x00007008,
7356 +        0x00007008},
7357 +       {0x0000a30c, 0x0000a006, 0x0000a006, 0x0000c010, 0x0000c010,
7358 +        0x0000c010},
7359 +       {0x0000a310, 0x0000e012, 0x0000e012, 0x00010012, 0x00010012,
7360 +        0x00010012},
7361 +       {0x0000a314, 0x00011014, 0x00011014, 0x00013014, 0x00013014,
7362 +        0x00013014},
7363 +       {0x0000a318, 0x0001504a, 0x0001504a, 0x0001820a, 0x0001820a,
7364 +        0x0001820a},
7365 +       {0x0000a31c, 0x0001904c, 0x0001904c, 0x0001b211, 0x0001b211,
7366 +        0x0001b211},
7367 +       {0x0000a320, 0x0001c04e, 0x0001c04e, 0x0001e213, 0x0001e213,
7368 +        0x0001e213},
7369 +       {0x0000a324, 0x00021092, 0x00021092, 0x00022411, 0x00022411,
7370 +        0x00022411},
7371 +       {0x0000a328, 0x0002510a, 0x0002510a, 0x00025413, 0x00025413,
7372 +        0x00025413},
7373 +       {0x0000a32c, 0x0002910c, 0x0002910c, 0x00029811, 0x00029811,
7374 +        0x00029811},
7375 +       {0x0000a330, 0x0002c18b, 0x0002c18b, 0x0002c813, 0x0002c813,
7376 +        0x0002c813},
7377 +       {0x0000a334, 0x0002f1cc, 0x0002f1cc, 0x00030a14, 0x00030a14,
7378 +        0x00030a14},
7379 +       {0x0000a338, 0x000321eb, 0x000321eb, 0x00035a50, 0x00035a50,
7380 +        0x00035a50},
7381 +       {0x0000a33c, 0x000341ec, 0x000341ec, 0x00039c4c, 0x00039c4c,
7382 +        0x00039c4c},
7383 +       {0x0000a340, 0x000341ec, 0x000341ec, 0x0003de8a, 0x0003de8a,
7384 +        0x0003de8a},
7385 +       {0x0000a344, 0x000341ec, 0x000341ec, 0x00042e92, 0x00042e92,
7386 +        0x00042e92},
7387 +       {0x0000a348, 0x000341ec, 0x000341ec, 0x00046ed2, 0x00046ed2,
7388 +        0x00046ed2},
7389 +       {0x0000a34c, 0x000341ec, 0x000341ec, 0x0004bed5, 0x0004bed5,
7390 +        0x0004bed5},
7391 +       {0x0000a350, 0x000341ec, 0x000341ec, 0x0004ff54, 0x0004ff54,
7392 +        0x0004ff54},
7393 +       {0x0000a354, 0x000341ec, 0x000341ec, 0x00055fd5, 0x00055fd5,
7394 +        0x00055fd5},
7395 +       {0x00007814, 0x00198eff, 0x00198eff, 0x00198eff, 0x00198eff,
7396 +        0x00198eff},
7397 +       {0x00007838, 0x00198eff, 0x00198eff, 0x00198eff, 0x00198eff,
7398 +        0x00198eff},
7399 +       {0x0000781c, 0x00172000, 0x00172000, 0x00172000, 0x00172000,
7400 +        0x00172000},
7401 +       {0x00007840, 0x00172000, 0x00172000, 0x00172000, 0x00172000,
7402 +        0x00172000},
7403 +       {0x00007820, 0xf258a480, 0xf258a480, 0xf258a480, 0xf258a480,
7404 +        0xf258a480},
7405 +       {0x00007844, 0xf258a480, 0xf258a480, 0xf258a480, 0xf258a480,
7406 +        0xf258a480},
7407 +};
7408 +
7409 +static const u32 ar9280Modes_original_tx_gain_9280_2[][6] = {
7410 +       {0x0000a274, 0x0a19c652, 0x0a19c652, 0x0a1aa652, 0x0a1aa652,
7411 +        0x0a1aa652},
7412 +       {0x0000a27c, 0x050701ce, 0x050701ce, 0x050701ce, 0x050701ce,
7413 +        0x050701ce},
7414 +       {0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
7415 +        0x00000000},
7416 +       {0x0000a304, 0x00003002, 0x00003002, 0x00003002, 0x00003002,
7417 +        0x00003002},
7418 +       {0x0000a308, 0x00006004, 0x00006004, 0x00008009, 0x00008009,
7419 +        0x00008009},
7420 +       {0x0000a30c, 0x0000a006, 0x0000a006, 0x0000b00b, 0x0000b00b,
7421 +        0x0000b00b},
7422 +       {0x0000a310, 0x0000e012, 0x0000e012, 0x0000e012, 0x0000e012,
7423 +        0x0000e012},
7424 +       {0x0000a314, 0x00011014, 0x00011014, 0x00012048, 0x00012048,
7425 +        0x00012048},
7426 +       {0x0000a318, 0x0001504a, 0x0001504a, 0x0001604a, 0x0001604a,
7427 +        0x0001604a},
7428 +       {0x0000a31c, 0x0001904c, 0x0001904c, 0x0001a211, 0x0001a211,
7429 +        0x0001a211},
7430 +       {0x0000a320, 0x0001c04e, 0x0001c04e, 0x0001e213, 0x0001e213,
7431 +        0x0001e213},
7432 +       {0x0000a324, 0x00020092, 0x00020092, 0x0002121b, 0x0002121b,
7433 +        0x0002121b},
7434 +       {0x0000a328, 0x0002410a, 0x0002410a, 0x00024412, 0x00024412,
7435 +        0x00024412},
7436 +       {0x0000a32c, 0x0002710c, 0x0002710c, 0x00028414, 0x00028414,
7437 +        0x00028414},
7438 +       {0x0000a330, 0x0002b18b, 0x0002b18b, 0x0002b44a, 0x0002b44a,
7439 +        0x0002b44a},
7440 +       {0x0000a334, 0x0002e1cc, 0x0002e1cc, 0x00030649, 0x00030649,
7441 +        0x00030649},
7442 +       {0x0000a338, 0x000321ec, 0x000321ec, 0x0003364b, 0x0003364b,
7443 +        0x0003364b},
7444 +       {0x0000a33c, 0x000321ec, 0x000321ec, 0x00038a49, 0x00038a49,
7445 +        0x00038a49},
7446 +       {0x0000a340, 0x000321ec, 0x000321ec, 0x0003be48, 0x0003be48,
7447 +        0x0003be48},
7448 +       {0x0000a344, 0x000321ec, 0x000321ec, 0x0003ee4a, 0x0003ee4a,
7449 +        0x0003ee4a},
7450 +       {0x0000a348, 0x000321ec, 0x000321ec, 0x00042e88, 0x00042e88,
7451 +        0x00042e88},
7452 +       {0x0000a34c, 0x000321ec, 0x000321ec, 0x00046e8a, 0x00046e8a,
7453 +        0x00046e8a},
7454 +       {0x0000a350, 0x000321ec, 0x000321ec, 0x00049ec9, 0x00049ec9,
7455 +        0x00049ec9},
7456 +       {0x0000a354, 0x000321ec, 0x000321ec, 0x0004bf42, 0x0004bf42,
7457 +        0x0004bf42},
7458 +       {0x00007814, 0x0019beff, 0x0019beff, 0x0019beff, 0x0019beff,
7459 +        0x0019beff},
7460 +       {0x00007838, 0x0019beff, 0x0019beff, 0x0019beff, 0x0019beff,
7461 +        0x0019beff},
7462 +       {0x0000781c, 0x00392000, 0x00392000, 0x00392000, 0x00392000,
7463 +        0x00392000},
7464 +       {0x00007840, 0x00392000, 0x00392000, 0x00392000, 0x00392000,
7465 +        0x00392000},
7466 +       {0x00007820, 0x92592480, 0x92592480, 0x92592480, 0x92592480,
7467 +        0x92592480},
7468 +       {0x00007844, 0x92592480, 0x92592480, 0x92592480, 0x92592480,
7469 +        0x92592480},
7470 +};
7471 +
7472 +static const u32 ar9280PciePhy_clkreq_off_L1_9280[][2] = {
7473 +       {0x00004040, 0x9248fd00},
7474 +       {0x00004040, 0x24924924},
7475 +       {0x00004040, 0xa8000019},
7476 +       {0x00004040, 0x13160820},
7477 +       {0x00004040, 0xe5980560},
7478 +       {0x00004040, 0xc01dcffc},
7479 +       {0x00004040, 0x1aaabe41},
7480 +       {0x00004040, 0xbe105554},
7481 +       {0x00004040, 0x00043007},
7482 +       {0x00004044, 0x00000000},
7483 +};
7484 +
7485 +static const u32 ar9280PciePhy_clkreq_always_on_L1_9280[][2] = {
7486 +       {0x00004040, 0x9248fd00},
7487 +       {0x00004040, 0x24924924},
7488 +       {0x00004040, 0xa8000019},
7489 +       {0x00004040, 0x13160820},
7490 +       {0x00004040, 0xe5980560},
7491 +       {0x00004040, 0xc01dcffd},
7492 +       {0x00004040, 0x1aaabe41},
7493 +       {0x00004040, 0xbe105554},
7494 +       {0x00004040, 0x00043007},
7495 +       {0x00004044, 0x00000000},
7496 +};
7497 +
7498 +/* AR9285 Revsion 10*/
7499 +static const u_int32_t ar9285Modes_9285[][6] = {
7500 +       {0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160,
7501 +        0x000001e0},
7502 +       {0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c,
7503 +        0x000001e0},
7504 +       {0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38,
7505 +        0x00001180},
7506 +       {0x000010f0, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
7507 +        0x00000008},
7508 +       {0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00,
7509 +        0x06e006e0},
7510 +       {0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b,
7511 +        0x0988004f},
7512 +       {0x00008318, 0x00003e80, 0x00007d00, 0x00006880, 0x00003440,
7513 +        0x00006880},
7514 +       {0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300,
7515 +        0x00000303},
7516 +       {0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200,
7517 +        0x02020200},
7518 +       {0x00009824, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e,
7519 +        0x00000e0e},
7520 +       {0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001,
7521 +        0x0a020001},
7522 +       {0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e,
7523 +        0x00000e0e},
7524 +       {0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007,
7525 +        0x00000007},
7526 +       {0x00009840, 0x206a012e, 0x206a012e, 0x206a012e, 0x206a012e,
7527 +        0x206a012e},
7528 +       {0x00009844, 0x0372161e, 0x0372161e, 0x03720020, 0x03720020,
7529 +        0x037216a0},
7530 +       {0x00009848, 0x00001066, 0x00001066, 0x0000004e, 0x0000004e,
7531 +        0x00001059},
7532 +       {0x00009850, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2,
7533 +        0x6d4000e2},
7534 +       {0x00009858, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e,
7535 +        0x7ec84d2e},
7536 +       {0x0000985c, 0x3139605e, 0x3139605e, 0x3136605e, 0x3136605e,
7537 +        0x3139605e},
7538 +       {0x00009860, 0x00058d18, 0x00058d18, 0x00058d20, 0x00058d20,
7539 +        0x00058d18},
7540 +       {0x00009864, 0x0000fe00, 0x0000fe00, 0x0001ce00, 0x0001ce00,
7541 +        0x0001ce00},
7542 +       {0x00009868, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0,
7543 +        0x5ac640d0},
7544 +       {0x0000986c, 0x06903081, 0x06903081, 0x06903881, 0x06903881,
7545 +        0x06903881},
7546 +       {0x00009914, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898,
7547 +        0x000007d0},
7548 +       {0x00009918, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b,
7549 +        0x00000016},
7550 +       {0x00009924, 0xd00a8007, 0xd00a8007, 0xd00a800d, 0xd00a800d,
7551 +        0xd00a800d},
7552 +       {0x00009944, 0xdfbc1010, 0xdfbc1010, 0xdfbc1020, 0xdfbc1020,
7553 +        0xdfbc1010},
7554 +       {0x00009960, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
7555 +        0x00000000},
7556 +       {0x00009964, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
7557 +        0x00000000},
7558 +       {0x000099b8, 0x00cf4d1c, 0x00cf4d1c, 0x00cf4d1c, 0x00cf4d1c,
7559 +        0x00cf4d1c},
7560 +       {0x000099bc, 0x00000600, 0x00000600, 0x00000c00, 0x00000c00,
7561 +        0x00000c00},
7562 +       {0x000099c0, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4,
7563 +        0x05eea6d4},
7564 +       {0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77,
7565 +        0x06336f77},
7566 +       {0x000099c8, 0x60f65329, 0x60f65329, 0x60f65329, 0x60f65329,
7567 +        0x60f65329},
7568 +       {0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8,
7569 +        0x08f186c8},
7570 +       {0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384,
7571 +        0x00046384},
7572 +       {0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
7573 +        0x00000000},
7574 +       {0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
7575 +        0x00000000},
7576 +       {0x00009a00, 0x00000000, 0x00000000, 0x00068084, 0x00068084,
7577 +        0x00000000},
7578 +       {0x00009a04, 0x00000000, 0x00000000, 0x00068088, 0x00068088,
7579 +        0x00000000},
7580 +       {0x00009a08, 0x00000000, 0x00000000, 0x0006808c, 0x0006808c,
7581 +        0x00000000},
7582 +       {0x00009a0c, 0x00000000, 0x00000000, 0x00068100, 0x00068100,
7583 +        0x00000000},
7584 +       {0x00009a10, 0x00000000, 0x00000000, 0x00068104, 0x00068104,
7585 +        0x00000000},
7586 +       {0x00009a14, 0x00000000, 0x00000000, 0x00068108, 0x00068108,
7587 +        0x00000000},
7588 +       {0x00009a18, 0x00000000, 0x00000000, 0x0006810c, 0x0006810c,
7589 +        0x00000000},
7590 +       {0x00009a1c, 0x00000000, 0x00000000, 0x00068110, 0x00068110,
7591 +        0x00000000},
7592 +       {0x00009a20, 0x00000000, 0x00000000, 0x00068114, 0x00068114,
7593 +        0x00000000},
7594 +       {0x00009a24, 0x00000000, 0x00000000, 0x00068180, 0x00068180,
7595 +        0x00000000},
7596 +       {0x00009a28, 0x00000000, 0x00000000, 0x00068184, 0x00068184,
7597 +        0x00000000},
7598 +       {0x00009a2c, 0x00000000, 0x00000000, 0x00068188, 0x00068188,
7599 +        0x00000000},
7600 +       {0x00009a30, 0x00000000, 0x00000000, 0x0006818c, 0x0006818c,
7601 +        0x00000000},
7602 +       {0x00009a34, 0x00000000, 0x00000000, 0x00068190, 0x00068190,
7603 +        0x00000000},
7604 +       {0x00009a38, 0x00000000, 0x00000000, 0x00068194, 0x00068194,
7605 +        0x00000000},
7606 +       {0x00009a3c, 0x00000000, 0x00000000, 0x000681a0, 0x000681a0,
7607 +        0x00000000},
7608 +       {0x00009a40, 0x00000000, 0x00000000, 0x0006820c, 0x0006820c,
7609 +        0x00000000},
7610 +       {0x00009a44, 0x00000000, 0x00000000, 0x000681a8, 0x000681a8,
7611 +        0x00000000},
7612 +       {0x00009a48, 0x00000000, 0x00000000, 0x00068284, 0x00068284,
7613 +        0x00000000},
7614 +       {0x00009a4c, 0x00000000, 0x00000000, 0x00068288, 0x00068288,
7615 +        0x00000000},
7616 +       {0x00009a50, 0x00000000, 0x00000000, 0x00068220, 0x00068220,
7617 +        0x00000000},
7618 +       {0x00009a54, 0x00000000, 0x00000000, 0x00068290, 0x00068290,
7619 +        0x00000000},
7620 +       {0x00009a58, 0x00000000, 0x00000000, 0x00068300, 0x00068300,
7621 +        0x00000000},
7622 +       {0x00009a5c, 0x00000000, 0x00000000, 0x00068304, 0x00068304,
7623 +        0x00000000},
7624 +       {0x00009a60, 0x00000000, 0x00000000, 0x00068308, 0x00068308,
7625 +        0x00000000},
7626 +       {0x00009a64, 0x00000000, 0x00000000, 0x0006830c, 0x0006830c,
7627 +        0x00000000},
7628 +       {0x00009a68, 0x00000000, 0x00000000, 0x00068380, 0x00068380,
7629 +        0x00000000},
7630 +       {0x00009a6c, 0x00000000, 0x00000000, 0x00068384, 0x00068384,
7631 +        0x00000000},
7632 +       {0x00009a70, 0x00000000, 0x00000000, 0x00068700, 0x00068700,
7633 +        0x00000000},
7634 +       {0x00009a74, 0x00000000, 0x00000000, 0x00068704, 0x00068704,
7635 +        0x00000000},
7636 +       {0x00009a78, 0x00000000, 0x00000000, 0x00068708, 0x00068708,
7637 +        0x00000000},
7638 +       {0x00009a7c, 0x00000000, 0x00000000, 0x0006870c, 0x0006870c,
7639 +        0x00000000},
7640 +       {0x00009a80, 0x00000000, 0x00000000, 0x00068780, 0x00068780,
7641 +        0x00000000},
7642 +       {0x00009a84, 0x00000000, 0x00000000, 0x00068784, 0x00068784,
7643 +        0x00000000},
7644 +       {0x00009a88, 0x00000000, 0x00000000, 0x00068b04, 0x00068b04,
7645 +        0x00000000},
7646 +       {0x00009a8c, 0x00000000, 0x00000000, 0x00068b08, 0x00068b08,
7647 +        0x00000000},
7648 +       {0x00009a90, 0x00000000, 0x00000000, 0x00068b08, 0x00068b08,
7649 +        0x00000000},
7650 +       {0x00009a94, 0x00000000, 0x00000000, 0x00068b0c, 0x00068b0c,
7651 +        0x00000000},
7652 +       {0x00009a98, 0x00000000, 0x00000000, 0x00068b80, 0x00068b80,
7653 +        0x00000000},
7654 +       {0x00009a9c, 0x00000000, 0x00000000, 0x00068b84, 0x00068b84,
7655 +        0x00000000},
7656 +       {0x00009aa0, 0x00000000, 0x00000000, 0x00068b88, 0x00068b88,
7657 +        0x00000000},
7658 +       {0x00009aa4, 0x00000000, 0x00000000, 0x00068b8c, 0x00068b8c,
7659 +        0x00000000},
7660 +       {0x00009aa8, 0x00000000, 0x00000000, 0x000b8b90, 0x000b8b90,
7661 +        0x00000000},
7662 +       {0x00009aac, 0x00000000, 0x00000000, 0x000b8f80, 0x000b8f80,
7663 +        0x00000000},
7664 +       {0x00009ab0, 0x00000000, 0x00000000, 0x000b8f84, 0x000b8f84,
7665 +        0x00000000},
7666 +       {0x00009ab4, 0x00000000, 0x00000000, 0x000b8f88, 0x000b8f88,
7667 +        0x00000000},
7668 +       {0x00009ab8, 0x00000000, 0x00000000, 0x000b8f8c, 0x000b8f8c,
7669 +        0x00000000},
7670 +       {0x00009abc, 0x00000000, 0x00000000, 0x000b8f90, 0x000b8f90,
7671 +        0x00000000},
7672 +       {0x00009ac0, 0x00000000, 0x00000000, 0x000bb30c, 0x000bb30c,
7673 +        0x00000000},
7674 +       {0x00009ac4, 0x00000000, 0x00000000, 0x000bb310, 0x000bb310,
7675 +        0x00000000},
7676 +       {0x00009ac8, 0x00000000, 0x00000000, 0x000bb384, 0x000bb384,
7677 +        0x00000000},
7678 +       {0x00009acc, 0x00000000, 0x00000000, 0x000bb388, 0x000bb388,
7679 +        0x00000000},
7680 +       {0x00009ad0, 0x00000000, 0x00000000, 0x000bb324, 0x000bb324,
7681 +        0x00000000},
7682 +       {0x00009ad4, 0x00000000, 0x00000000, 0x000bb704, 0x000bb704,
7683 +        0x00000000},
7684 +       {0x00009ad8, 0x00000000, 0x00000000, 0x000f96a4, 0x000f96a4,
7685 +        0x00000000},
7686 +       {0x00009adc, 0x00000000, 0x00000000, 0x000f96a8, 0x000f96a8,
7687 +        0x00000000},
7688 +       {0x00009ae0, 0x00000000, 0x00000000, 0x000f9710, 0x000f9710,
7689 +        0x00000000},
7690 +       {0x00009ae4, 0x00000000, 0x00000000, 0x000f9714, 0x000f9714,
7691 +        0x00000000},
7692 +       {0x00009ae8, 0x00000000, 0x00000000, 0x000f9720, 0x000f9720,
7693 +        0x00000000},
7694 +       {0x00009aec, 0x00000000, 0x00000000, 0x000f9724, 0x000f9724,
7695 +        0x00000000},
7696 +       {0x00009af0, 0x00000000, 0x00000000, 0x000f9728, 0x000f9728,
7697 +        0x00000000},
7698 +       {0x00009af4, 0x00000000, 0x00000000, 0x000f972c, 0x000f972c,
7699 +        0x00000000},
7700 +       {0x00009af8, 0x00000000, 0x00000000, 0x000f97a0, 0x000f97a0,
7701 +        0x00000000},
7702 +       {0x00009afc, 0x00000000, 0x00000000, 0x000f97a4, 0x000f97a4,
7703 +        0x00000000},
7704 +       {0x00009b00, 0x00000000, 0x00000000, 0x000fb7a8, 0x000fb7a8,
7705 +        0x00000000},
7706 +       {0x00009b04, 0x00000000, 0x00000000, 0x000fb7b0, 0x000fb7b0,
7707 +        0x00000000},
7708 +       {0x00009b08, 0x00000000, 0x00000000, 0x000fb7b4, 0x000fb7b4,
7709 +        0x00000000},
7710 +       {0x00009b0c, 0x00000000, 0x00000000, 0x000fb7b8, 0x000fb7b8,
7711 +        0x00000000},
7712 +       {0x00009b10, 0x00000000, 0x00000000, 0x000fb7a5, 0x000fb7a5,
7713 +        0x00000000},
7714 +       {0x00009b14, 0x00000000, 0x00000000, 0x000fb7a9, 0x000fb7a9,
7715 +        0x00000000},
7716 +       {0x00009b18, 0x00000000, 0x00000000, 0x000fb7ad, 0x000fb7ad,
7717 +        0x00000000},
7718 +       {0x00009b1c, 0x00000000, 0x00000000, 0x000fb7b1, 0x000fb7b1,
7719 +        0x00000000},
7720 +       {0x00009b20, 0x00000000, 0x00000000, 0x000fb7b5, 0x000fb7b5,
7721 +        0x00000000},
7722 +       {0x00009b24, 0x00000000, 0x00000000, 0x000fb7b9, 0x000fb7b9,
7723 +        0x00000000},
7724 +       {0x00009b28, 0x00000000, 0x00000000, 0x000fb7c5, 0x000fb7c5,
7725 +        0x00000000},
7726 +       {0x00009b2c, 0x00000000, 0x00000000, 0x000fb7c9, 0x000fb7c9,
7727 +        0x00000000},
7728 +       {0x00009b30, 0x00000000, 0x00000000, 0x000fb7d1, 0x000fb7d1,
7729 +        0x00000000},
7730 +       {0x00009b34, 0x00000000, 0x00000000, 0x000fb7d5, 0x000fb7d5,
7731 +        0x00000000},
7732 +       {0x00009b38, 0x00000000, 0x00000000, 0x000fb7d9, 0x000fb7d9,
7733 +        0x00000000},
7734 +       {0x00009b3c, 0x00000000, 0x00000000, 0x000fb7c6, 0x000fb7c6,
7735 +        0x00000000},
7736 +       {0x00009b40, 0x00000000, 0x00000000, 0x000fb7ca, 0x000fb7ca,
7737 +        0x00000000},
7738 +       {0x00009b44, 0x00000000, 0x00000000, 0x000fb7ce, 0x000fb7ce,
7739 +        0x00000000},
7740 +       {0x00009b48, 0x00000000, 0x00000000, 0x000fb7d2, 0x000fb7d2,
7741 +        0x00000000},
7742 +       {0x00009b4c, 0x00000000, 0x00000000, 0x000fb7d6, 0x000fb7d6,
7743 +        0x00000000},
7744 +       {0x00009b50, 0x00000000, 0x00000000, 0x000fb7c3, 0x000fb7c3,
7745 +        0x00000000},
7746 +       {0x00009b54, 0x00000000, 0x00000000, 0x000fb7c7, 0x000fb7c7,
7747 +        0x00000000},
7748 +       {0x00009b58, 0x00000000, 0x00000000, 0x000fb7cb, 0x000fb7cb,
7749 +        0x00000000},
7750 +       {0x00009b5c, 0x00000000, 0x00000000, 0x000fb7cf, 0x000fb7cf,
7751 +        0x00000000},
7752 +       {0x00009b60, 0x00000000, 0x00000000, 0x000fb7d7, 0x000fb7d7,
7753 +        0x00000000},
7754 +       {0x00009b64, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7755 +        0x00000000},
7756 +       {0x00009b68, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7757 +        0x00000000},
7758 +       {0x00009b6c, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7759 +        0x00000000},
7760 +       {0x00009b70, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7761 +        0x00000000},
7762 +       {0x00009b74, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7763 +        0x00000000},
7764 +       {0x00009b78, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7765 +        0x00000000},
7766 +       {0x00009b7c, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7767 +        0x00000000},
7768 +       {0x00009b80, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7769 +        0x00000000},
7770 +       {0x00009b84, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7771 +        0x00000000},
7772 +       {0x00009b88, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7773 +        0x00000000},
7774 +       {0x00009b8c, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7775 +        0x00000000},
7776 +       {0x00009b90, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7777 +        0x00000000},
7778 +       {0x00009b94, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7779 +        0x00000000},
7780 +       {0x00009b98, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7781 +        0x00000000},
7782 +       {0x00009b9c, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7783 +        0x00000000},
7784 +       {0x00009ba0, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7785 +        0x00000000},
7786 +       {0x00009ba4, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7787 +        0x00000000},
7788 +       {0x00009ba8, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7789 +        0x00000000},
7790 +       {0x00009bac, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7791 +        0x00000000},
7792 +       {0x00009bb0, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7793 +        0x00000000},
7794 +       {0x00009bb4, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7795 +        0x00000000},
7796 +       {0x00009bb8, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7797 +        0x00000000},
7798 +       {0x00009bbc, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7799 +        0x00000000},
7800 +       {0x00009bc0, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7801 +        0x00000000},
7802 +       {0x00009bc4, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7803 +        0x00000000},
7804 +       {0x00009bc8, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7805 +        0x00000000},
7806 +       {0x00009bcc, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7807 +        0x00000000},
7808 +       {0x00009bd0, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7809 +        0x00000000},
7810 +       {0x00009bd4, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7811 +        0x00000000},
7812 +       {0x00009bd8, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7813 +        0x00000000},
7814 +       {0x00009bdc, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7815 +        0x00000000},
7816 +       {0x00009be0, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7817 +        0x00000000},
7818 +       {0x00009be4, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7819 +        0x00000000},
7820 +       {0x00009be8, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7821 +        0x00000000},
7822 +       {0x00009bec, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7823 +        0x00000000},
7824 +       {0x00009bf0, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7825 +        0x00000000},
7826 +       {0x00009bf4, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7827 +        0x00000000},
7828 +       {0x00009bf8, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7829 +        0x00000000},
7830 +       {0x00009bfc, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db,
7831 +        0x00000000},
7832 +       {0x0000aa00, 0x00000000, 0x00000000, 0x0006801c, 0x0006801c,
7833 +        0x00000000},
7834 +       {0x0000aa04, 0x00000000, 0x00000000, 0x00068080, 0x00068080,
7835 +        0x00000000},
7836 +       {0x0000aa08, 0x00000000, 0x00000000, 0x00068084, 0x00068084,
7837 +        0x00000000},
7838 +       {0x0000aa0c, 0x00000000, 0x00000000, 0x00068088, 0x00068088,
7839 +        0x00000000},
7840 +       {0x0000aa10, 0x00000000, 0x00000000, 0x0006808c, 0x0006808c,
7841 +        0x00000000},
7842 +       {0x0000aa14, 0x00000000, 0x00000000, 0x00068100, 0x00068100,
7843 +        0x00000000},
7844 +       {0x0000aa18, 0x00000000, 0x00000000, 0x00068104, 0x00068104,
7845 +        0x00000000},
7846 +       {0x0000aa1c, 0x00000000, 0x00000000, 0x00068108, 0x00068108,
7847 +        0x00000000},
7848 +       {0x0000aa20, 0x00000000, 0x00000000, 0x0006810c, 0x0006810c,
7849 +        0x00000000},
7850 +       {0x0000aa24, 0x00000000, 0x00000000, 0x00068110, 0x00068110,
7851 +        0x00000000},
7852 +       {0x0000aa28, 0x00000000, 0x00000000, 0x00068110, 0x00068110,
7853 +        0x00000000},
7854 +       {0x0000aa2c, 0x00000000, 0x00000000, 0x00068180, 0x00068180,
7855 +        0x00000000},
7856 +       {0x0000aa30, 0x00000000, 0x00000000, 0x00068184, 0x00068184,
7857 +        0x00000000},
7858 +       {0x0000aa34, 0x00000000, 0x00000000, 0x00068188, 0x00068188,
7859 +        0x00000000},
7860 +       {0x0000aa38, 0x00000000, 0x00000000, 0x0006818c, 0x0006818c,
7861 +        0x00000000},
7862 +       {0x0000aa3c, 0x00000000, 0x00000000, 0x00068190, 0x00068190,
7863 +        0x00000000},
7864 +       {0x0000aa40, 0x00000000, 0x00000000, 0x00068194, 0x00068194,
7865 +        0x00000000},
7866 +       {0x0000aa44, 0x00000000, 0x00000000, 0x000681a0, 0x000681a0,
7867 +        0x00000000},
7868 +       {0x0000aa48, 0x00000000, 0x00000000, 0x0006820c, 0x0006820c,
7869 +        0x00000000},
7870 +       {0x0000aa4c, 0x00000000, 0x00000000, 0x000681a8, 0x000681a8,
7871 +        0x00000000},
7872 +       {0x0000aa50, 0x00000000, 0x00000000, 0x000681ac, 0x000681ac,
7873 +        0x00000000},
7874 +       {0x0000aa54, 0x00000000, 0x00000000, 0x0006821c, 0x0006821c,
7875 +        0x00000000},
7876 +       {0x0000aa58, 0x00000000, 0x00000000, 0x00068224, 0x00068224,
7877 +        0x00000000},
7878 +       {0x0000aa5c, 0x00000000, 0x00000000, 0x00068290, 0x00068290,
7879 +        0x00000000},
7880 +       {0x0000aa60, 0x00000000, 0x00000000, 0x00068300, 0x00068300,
7881 +        0x00000000},
7882 +       {0x0000aa64, 0x00000000, 0x00000000, 0x00068308, 0x00068308,
7883 +        0x00000000},
7884 +       {0x0000aa68, 0x00000000, 0x00000000, 0x0006830c, 0x0006830c,
7885 +        0x00000000},
7886 +       {0x0000aa6c, 0x00000000, 0x00000000, 0x00068310, 0x00068310,
7887 +        0x00000000},
7888 +       {0x0000aa70, 0x00000000, 0x00000000, 0x00068788, 0x00068788,
7889 +        0x00000000},
7890 +       {0x0000aa74, 0x00000000, 0x00000000, 0x0006878c, 0x0006878c,
7891 +        0x00000000},
7892 +       {0x0000aa78, 0x00000000, 0x00000000, 0x00068790, 0x00068790,
7893 +        0x00000000},
7894 +       {0x0000aa7c, 0x00000000, 0x00000000, 0x00068794, 0x00068794,
7895 +        0x00000000},
7896 +       {0x0000aa80, 0x00000000, 0x00000000, 0x00068798, 0x00068798,
7897 +        0x00000000},
7898 +       {0x0000aa84, 0x00000000, 0x00000000, 0x0006879c, 0x0006879c,
7899 +        0x00000000},
7900 +       {0x0000aa88, 0x00000000, 0x00000000, 0x00068b89, 0x00068b89,
7901 +        0x00000000},
7902 +       {0x0000aa8c, 0x00000000, 0x00000000, 0x00068b8d, 0x00068b8d,
7903 +        0x00000000},
7904 +       {0x0000aa90, 0x00000000, 0x00000000, 0x00068b91, 0x00068b91,
7905 +        0x00000000},
7906 +       {0x0000aa94, 0x00000000, 0x00000000, 0x00068b95, 0x00068b95,
7907 +        0x00000000},
7908 +       {0x0000aa98, 0x00000000, 0x00000000, 0x00068b99, 0x00068b99,
7909 +        0x00000000},
7910 +       {0x0000aa9c, 0x00000000, 0x00000000, 0x00068ba5, 0x00068ba5,
7911 +        0x00000000},
7912 +       {0x0000aaa0, 0x00000000, 0x00000000, 0x00068ba9, 0x00068ba9,
7913 +        0x00000000},
7914 +       {0x0000aaa4, 0x00000000, 0x00000000, 0x00068bad, 0x00068bad,
7915 +        0x00000000},
7916 +       {0x0000aaa8, 0x00000000, 0x00000000, 0x000b8b0c, 0x000b8b0c,
7917 +        0x00000000},
7918 +       {0x0000aaac, 0x00000000, 0x00000000, 0x000b8f10, 0x000b8f10,
7919 +        0x00000000},
7920 +       {0x0000aab0, 0x00000000, 0x00000000, 0x000b8f14, 0x000b8f14,
7921 +        0x00000000},
7922 +       {0x0000aab4, 0x00000000, 0x00000000, 0x000b8f84, 0x000b8f84,
7923 +        0x00000000},
7924 +       {0x0000aab8, 0x00000000, 0x00000000, 0x000b8f84, 0x000b8f84,
7925 +        0x00000000},
7926 +       {0x0000aabc, 0x00000000, 0x00000000, 0x000b8f88, 0x000b8f88,
7927 +        0x00000000},
7928 +       {0x0000aac0, 0x00000000, 0x00000000, 0x000bb380, 0x000bb380,
7929 +        0x00000000},
7930 +       {0x0000aac4, 0x00000000, 0x00000000, 0x000bb384, 0x000bb384,
7931 +        0x00000000},
7932 +       {0x0000aac8, 0x00000000, 0x00000000, 0x000bb388, 0x000bb388,
7933 +        0x00000000},
7934 +       {0x0000aacc, 0x00000000, 0x00000000, 0x000bb38c, 0x000bb38c,
7935 +        0x00000000},
7936 +       {0x0000aad0, 0x00000000, 0x00000000, 0x000bb394, 0x000bb394,
7937 +        0x00000000},
7938 +       {0x0000aad4, 0x00000000, 0x00000000, 0x000bb798, 0x000bb798,
7939 +        0x00000000},
7940 +       {0x0000aad8, 0x00000000, 0x00000000, 0x000f970c, 0x000f970c,
7941 +        0x00000000},
7942 +       {0x0000aadc, 0x00000000, 0x00000000, 0x000f9710, 0x000f9710,
7943 +        0x00000000},
7944 +       {0x0000aae0, 0x00000000, 0x00000000, 0x000f9714, 0x000f9714,
7945 +        0x00000000},
7946 +       {0x0000aae4, 0x00000000, 0x00000000, 0x000f9718, 0x000f9718,
7947 +        0x00000000},
7948 +       {0x0000aae8, 0x00000000, 0x00000000, 0x000f9705, 0x000f9705,
7949 +        0x00000000},
7950 +       {0x0000aaec, 0x00000000, 0x00000000, 0x000f9709, 0x000f9709,
7951 +        0x00000000},
7952 +       {0x0000aaf0, 0x00000000, 0x00000000, 0x000f970d, 0x000f970d,
7953 +        0x00000000},
7954 +       {0x0000aaf4, 0x00000000, 0x00000000, 0x000f9711, 0x000f9711,
7955 +        0x00000000},
7956 +       {0x0000aaf8, 0x00000000, 0x00000000, 0x000f9715, 0x000f9715,
7957 +        0x00000000},
7958 +       {0x0000aafc, 0x00000000, 0x00000000, 0x000f9719, 0x000f9719,
7959 +        0x00000000},
7960 +       {0x0000ab00, 0x00000000, 0x00000000, 0x000fb7a4, 0x000fb7a4,
7961 +        0x00000000},
7962 +       {0x0000ab04, 0x00000000, 0x00000000, 0x000fb7a8, 0x000fb7a8,
7963 +        0x00000000},
7964 +       {0x0000ab08, 0x00000000, 0x00000000, 0x000fb7ac, 0x000fb7ac,
7965 +        0x00000000},
7966 +       {0x0000ab0c, 0x00000000, 0x00000000, 0x000fb7ac, 0x000fb7ac,
7967 +        0x00000000},
7968 +       {0x0000ab10, 0x00000000, 0x00000000, 0x000fb7b0, 0x000fb7b0,
7969 +        0x00000000},
7970 +       {0x0000ab14, 0x00000000, 0x00000000, 0x000fb7b8, 0x000fb7b8,
7971 +        0x00000000},
7972 +       {0x0000ab18, 0x00000000, 0x00000000, 0x000fb7bc, 0x000fb7bc,
7973 +        0x00000000},
7974 +       {0x0000ab1c, 0x00000000, 0x00000000, 0x000fb7a1, 0x000fb7a1,
7975 +        0x00000000},
7976 +       {0x0000ab20, 0x00000000, 0x00000000, 0x000fb7a5, 0x000fb7a5,
7977 +        0x00000000},
7978 +       {0x0000ab24, 0x00000000, 0x00000000, 0x000fb7a9, 0x000fb7a9,
7979 +        0x00000000},
7980 +       {0x0000ab28, 0x00000000, 0x00000000, 0x000fb7b1, 0x000fb7b1,
7981 +        0x00000000},
7982 +       {0x0000ab2c, 0x00000000, 0x00000000, 0x000fb7b5, 0x000fb7b5,
7983 +        0x00000000},
7984 +       {0x0000ab30, 0x00000000, 0x00000000, 0x000fb7bd, 0x000fb7bd,
7985 +        0x00000000},
7986 +       {0x0000ab34, 0x00000000, 0x00000000, 0x000fb7c9, 0x000fb7c9,
7987 +        0x00000000},
7988 +       {0x0000ab38, 0x00000000, 0x00000000, 0x000fb7cd, 0x000fb7cd,
7989 +        0x00000000},
7990 +       {0x0000ab3c, 0x00000000, 0x00000000, 0x000fb7d1, 0x000fb7d1,
7991 +        0x00000000},
7992 +       {0x0000ab40, 0x00000000, 0x00000000, 0x000fb7d9, 0x000fb7d9,
7993 +        0x00000000},
7994 +       {0x0000ab44, 0x00000000, 0x00000000, 0x000fb7c2, 0x000fb7c2,
7995 +        0x00000000},
7996 +       {0x0000ab48, 0x00000000, 0x00000000, 0x000fb7c6, 0x000fb7c6,
7997 +        0x00000000},
7998 +       {0x0000ab4c, 0x00000000, 0x00000000, 0x000fb7ca, 0x000fb7ca,
7999 +        0x00000000},
8000 +       {0x0000ab50, 0x00000000, 0x00000000, 0x000fb7ce, 0x000fb7ce,
8001 +        0x00000000},
8002 +       {0x0000ab54, 0x00000000, 0x00000000, 0x000fb7d2, 0x000fb7d2,
8003 +        0x00000000},
8004 +       {0x0000ab58, 0x00000000, 0x00000000, 0x000fb7d6, 0x000fb7d6,
8005 +        0x00000000},
8006 +       {0x0000ab5c, 0x00000000, 0x00000000, 0x000fb7c3, 0x000fb7c3,
8007 +        0x00000000},
8008 +       {0x0000ab60, 0x00000000, 0x00000000, 0x000fb7cb, 0x000fb7cb,
8009 +        0x00000000},
8010 +       {0x0000ab64, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8011 +        0x00000000},
8012 +       {0x0000ab68, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8013 +        0x00000000},
8014 +       {0x0000ab6c, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8015 +        0x00000000},
8016 +       {0x0000ab70, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8017 +        0x00000000},
8018 +       {0x0000ab74, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8019 +        0x00000000},
8020 +       {0x0000ab78, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8021 +        0x00000000},
8022 +       {0x0000ab7c, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8023 +        0x00000000},
8024 +       {0x0000ab80, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8025 +        0x00000000},
8026 +       {0x0000ab84, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8027 +        0x00000000},
8028 +       {0x0000ab88, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8029 +        0x00000000},
8030 +       {0x0000ab8c, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8031 +        0x00000000},
8032 +       {0x0000ab90, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8033 +        0x00000000},
8034 +       {0x0000ab94, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8035 +        0x00000000},
8036 +       {0x0000ab98, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8037 +        0x00000000},
8038 +       {0x0000ab9c, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8039 +        0x00000000},
8040 +       {0x0000aba0, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8041 +        0x00000000},
8042 +       {0x0000aba4, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8043 +        0x00000000},
8044 +       {0x0000aba8, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8045 +        0x00000000},
8046 +       {0x0000abac, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8047 +        0x00000000},
8048 +       {0x0000abb0, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8049 +        0x00000000},
8050 +       {0x0000abb4, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8051 +        0x00000000},
8052 +       {0x0000abb8, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8053 +        0x00000000},
8054 +       {0x0000abbc, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8055 +        0x00000000},
8056 +       {0x0000abc0, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8057 +        0x00000000},
8058 +       {0x0000abc4, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8059 +        0x00000000},
8060 +       {0x0000abc8, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8061 +        0x00000000},
8062 +       {0x0000abcc, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8063 +        0x00000000},
8064 +       {0x0000abd0, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8065 +        0x00000000},
8066 +       {0x0000abd4, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8067 +        0x00000000},
8068 +       {0x0000abd8, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8069 +        0x00000000},
8070 +       {0x0000abdc, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8071 +        0x00000000},
8072 +       {0x0000abe0, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8073 +        0x00000000},
8074 +       {0x0000abe4, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8075 +        0x00000000},
8076 +       {0x0000abe8, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8077 +        0x00000000},
8078 +       {0x0000abec, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8079 +        0x00000000},
8080 +       {0x0000abf0, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8081 +        0x00000000},
8082 +       {0x0000abf4, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8083 +        0x00000000},
8084 +       {0x0000abf8, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8085 +        0x00000000},
8086 +       {0x0000abfc, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3,
8087 +        0x00000000},
8088 +       {0x0000a204, 0x00000004, 0x00000004, 0x00000004, 0x00000004,
8089 +        0x00000004},
8090 +       {0x0000a20c, 0x00000014, 0x00000014, 0x00000000, 0x00000000,
8091 +        0x0001f000},
8092 +       {0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a,
8093 +        0x1883800a},
8094 +       {0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108,
8095 +        0x00000000},
8096 +       {0x0000a250, 0x001ff000, 0x001ff000, 0x001ca000, 0x001ca000,
8097 +        0x001da000},
8098 +       {0x0000a274, 0x0a81c652, 0x0a81c652, 0x0a820652, 0x0a820652,
8099 +        0x0a82a652},
8100 +       {0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
8101 +        0x00000000},
8102 +       {0x0000a304, 0x00000000, 0x00000000, 0x00007201, 0x00007201,
8103 +        0x00000000},
8104 +       {0x0000a308, 0x00000000, 0x00000000, 0x00010408, 0x00010408,
8105 +        0x00000000},
8106 +       {0x0000a30c, 0x00000000, 0x00000000, 0x0001860a, 0x0001860a,
8107 +        0x00000000},
8108 +       {0x0000a310, 0x00000000, 0x00000000, 0x00020818, 0x00020818,
8109 +        0x00000000},
8110 +       {0x0000a314, 0x00000000, 0x00000000, 0x00024858, 0x00024858,
8111 +        0x00000000},
8112 +       {0x0000a318, 0x00000000, 0x00000000, 0x00026859, 0x00026859,
8113 +        0x00000000},
8114 +       {0x0000a31c, 0x00000000, 0x00000000, 0x0002985b, 0x0002985b,
8115 +        0x00000000},
8116 +       {0x0000a320, 0x00000000, 0x00000000, 0x0002c89a, 0x0002c89a,
8117 +        0x00000000},
8118 +       {0x0000a324, 0x00000000, 0x00000000, 0x0002e89b, 0x0002e89b,
8119 +        0x00000000},
8120 +       {0x0000a328, 0x00000000, 0x00000000, 0x0003089c, 0x0003089c,
8121 +        0x00000000},
8122 +       {0x0000a32c, 0x00000000, 0x00000000, 0x0003289d, 0x0003289d,
8123 +        0x00000000},
8124 +       {0x0000a330, 0x00000000, 0x00000000, 0x0003489e, 0x0003489e,
8125 +        0x00000000},
8126 +       {0x0000a334, 0x00000000, 0x00000000, 0x000388de, 0x000388de,
8127 +        0x00000000},
8128 +       {0x0000a338, 0x00000000, 0x00000000, 0x0003b91e, 0x0003b91e,
8129 +        0x00000000},
8130 +       {0x0000a33c, 0x00000000, 0x00000000, 0x0003d95e, 0x0003d95e,
8131 +        0x00000000},
8132 +       {0x0000a340, 0x00000000, 0x00000000, 0x000419df, 0x000419df,
8133 +        0x00000000},
8134 +       {0x0000a344, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
8135 +        0x00000000},
8136 +       {0x0000a358, 0x7999aa02, 0x7999aa02, 0x7999aa0e, 0x7999aa0e,
8137 +        0x7999aa0e},
8138 +};
8139 +
8140 +static const u_int32_t ar9285Common_9285[][2] = {
8141 +       {0x0000000c, 0x00000000},
8142 +       {0x00000030, 0x00020045},
8143 +       {0x00000034, 0x00000005},
8144 +       {0x00000040, 0x00000000},
8145 +       {0x00000044, 0x00000008},
8146 +       {0x00000048, 0x00000008},
8147 +       {0x0000004c, 0x00000010},
8148 +       {0x00000050, 0x00000000},
8149 +       {0x00000054, 0x0000001f},
8150 +       {0x00000800, 0x00000000},
8151 +       {0x00000804, 0x00000000},
8152 +       {0x00000808, 0x00000000},
8153 +       {0x0000080c, 0x00000000},
8154 +       {0x00000810, 0x00000000},
8155 +       {0x00000814, 0x00000000},
8156 +       {0x00000818, 0x00000000},
8157 +       {0x0000081c, 0x00000000},
8158 +       {0x00000820, 0x00000000},
8159 +       {0x00000824, 0x00000000},
8160 +       {0x00001040, 0x002ffc0f},
8161 +       {0x00001044, 0x002ffc0f},
8162 +       {0x00001048, 0x002ffc0f},
8163 +       {0x0000104c, 0x002ffc0f},
8164 +       {0x00001050, 0x002ffc0f},
8165 +       {0x00001054, 0x002ffc0f},
8166 +       {0x00001058, 0x002ffc0f},
8167 +       {0x0000105c, 0x002ffc0f},
8168 +       {0x00001060, 0x002ffc0f},
8169 +       {0x00001064, 0x002ffc0f},
8170 +       {0x00001230, 0x00000000},
8171 +       {0x00001270, 0x00000000},
8172 +       {0x00001038, 0x00000000},
8173 +       {0x00001078, 0x00000000},
8174 +       {0x000010b8, 0x00000000},
8175 +       {0x000010f8, 0x00000000},
8176 +       {0x00001138, 0x00000000},
8177 +       {0x00001178, 0x00000000},
8178 +       {0x000011b8, 0x00000000},
8179 +       {0x000011f8, 0x00000000},
8180 +       {0x00001238, 0x00000000},
8181 +       {0x00001278, 0x00000000},
8182 +       {0x000012b8, 0x00000000},
8183 +       {0x000012f8, 0x00000000},
8184 +       {0x00001338, 0x00000000},
8185 +       {0x00001378, 0x00000000},
8186 +       {0x000013b8, 0x00000000},
8187 +       {0x000013f8, 0x00000000},
8188 +       {0x00001438, 0x00000000},
8189 +       {0x00001478, 0x00000000},
8190 +       {0x000014b8, 0x00000000},
8191 +       {0x000014f8, 0x00000000},
8192 +       {0x00001538, 0x00000000},
8193 +       {0x00001578, 0x00000000},
8194 +       {0x000015b8, 0x00000000},
8195 +       {0x000015f8, 0x00000000},
8196 +       {0x00001638, 0x00000000},
8197 +       {0x00001678, 0x00000000},
8198 +       {0x000016b8, 0x00000000},
8199 +       {0x000016f8, 0x00000000},
8200 +       {0x00001738, 0x00000000},
8201 +       {0x00001778, 0x00000000},
8202 +       {0x000017b8, 0x00000000},
8203 +       {0x000017f8, 0x00000000},
8204 +       {0x0000103c, 0x00000000},
8205 +       {0x0000107c, 0x00000000},
8206 +       {0x000010bc, 0x00000000},
8207 +       {0x000010fc, 0x00000000},
8208 +       {0x0000113c, 0x00000000},
8209 +       {0x0000117c, 0x00000000},
8210 +       {0x000011bc, 0x00000000},
8211 +       {0x000011fc, 0x00000000},
8212 +       {0x0000123c, 0x00000000},
8213 +       {0x0000127c, 0x00000000},
8214 +       {0x000012bc, 0x00000000},
8215 +       {0x000012fc, 0x00000000},
8216 +       {0x0000133c, 0x00000000},
8217 +       {0x0000137c, 0x00000000},
8218 +       {0x000013bc, 0x00000000},
8219 +       {0x000013fc, 0x00000000},
8220 +       {0x0000143c, 0x00000000},
8221 +       {0x0000147c, 0x00000000},
8222 +       {0x00004030, 0x00000002},
8223 +       {0x0000403c, 0x00000002},
8224 +       {0x00004024, 0x0000001f},
8225 +       {0x00004060, 0x00000000},
8226 +       {0x00004064, 0x00000000},
8227 +       {0x00007010, 0x00000031},
8228 +       {0x00007034, 0x00000002},
8229 +       {0x00007038, 0x000004c2},
8230 +       {0x00008004, 0x00000000},
8231 +       {0x00008008, 0x00000000},
8232 +       {0x0000800c, 0x00000000},
8233 +       {0x00008018, 0x00000700},
8234 +       {0x00008020, 0x00000000},
8235 +       {0x00008038, 0x00000000},
8236 +       {0x0000803c, 0x00000000},
8237 +       {0x00008048, 0x00000000},
8238 +       {0x00008054, 0x00000000},
8239 +       {0x00008058, 0x00000000},
8240 +       {0x0000805c, 0x000fc78f},
8241 +       {0x00008060, 0x0000000f},
8242 +       {0x00008064, 0x00000000},
8243 +       {0x00008070, 0x00000000},
8244 +       {0x000080c0, 0x2a80001a},
8245 +       {0x000080c4, 0x05dc01e0},
8246 +       {0x000080c8, 0x1f402710},
8247 +       {0x000080cc, 0x01f40000},
8248 +       {0x000080d0, 0x00001e00},
8249 +       {0x000080d4, 0x00000000},
8250 +       {0x000080d8, 0x00400000},
8251 +       {0x000080e0, 0xffffffff},
8252 +       {0x000080e4, 0x0000ffff},
8253 +       {0x000080e8, 0x003f3f3f},
8254 +       {0x000080ec, 0x00000000},
8255 +       {0x000080f0, 0x00000000},
8256 +       {0x000080f4, 0x00000000},
8257 +       {0x000080f8, 0x00000000},
8258 +       {0x000080fc, 0x00020000},
8259 +       {0x00008100, 0x00020000},
8260 +       {0x00008104, 0x00000001},
8261 +       {0x00008108, 0x00000052},
8262 +       {0x0000810c, 0x00000000},
8263 +       {0x00008110, 0x00000168},
8264 +       {0x00008118, 0x000100aa},
8265 +       {0x0000811c, 0x00003210},
8266 +       {0x00008120, 0x08f04800},
8267 +       {0x00008124, 0x00000000},
8268 +       {0x00008128, 0x00000000},
8269 +       {0x0000812c, 0x00000000},
8270 +       {0x00008130, 0x00000000},
8271 +       {0x00008134, 0x00000000},
8272 +       {0x00008138, 0x00000000},
8273 +       {0x0000813c, 0x00000000},
8274 +       {0x00008144, 0x00000000},
8275 +       {0x00008168, 0x00000000},
8276 +       {0x0000816c, 0x00000000},
8277 +       {0x00008170, 0x32143320},
8278 +       {0x00008174, 0xfaa4fa50},
8279 +       {0x00008178, 0x00000100},
8280 +       {0x0000817c, 0x00000000},
8281 +       {0x000081c0, 0x00000000},
8282 +       {0x000081d0, 0x00003210},
8283 +       {0x000081ec, 0x00000000},
8284 +       {0x000081f0, 0x00000000},
8285 +       {0x000081f4, 0x00000000},
8286 +       {0x000081f8, 0x00000000},
8287 +       {0x000081fc, 0x00000000},
8288 +       {0x00008200, 0x00000000},
8289 +       {0x00008204, 0x00000000},
8290 +       {0x00008208, 0x00000000},
8291 +       {0x0000820c, 0x00000000},
8292 +       {0x00008210, 0x00000000},
8293 +       {0x00008214, 0x00000000},
8294 +       {0x00008218, 0x00000000},
8295 +       {0x0000821c, 0x00000000},
8296 +       {0x00008220, 0x00000000},
8297 +       {0x00008224, 0x00000000},
8298 +       {0x00008228, 0x00000000},
8299 +       {0x0000822c, 0x00000000},
8300 +       {0x00008230, 0x00000000},
8301 +       {0x00008234, 0x00000000},
8302 +       {0x00008238, 0x00000000},
8303 +       {0x0000823c, 0x00000000},
8304 +       {0x00008240, 0x00100000},
8305 +       {0x00008244, 0x0010f400},
8306 +       {0x00008248, 0x00000100},
8307 +       {0x0000824c, 0x0001e800},
8308 +       {0x00008250, 0x00000000},
8309 +       {0x00008254, 0x00000000},
8310 +       {0x00008258, 0x00000000},
8311 +       {0x0000825c, 0x400000ff},
8312 +       {0x00008260, 0x00080922},
8313 +       {0x00008264, 0xa8a00010},
8314 +       {0x00008270, 0x00000000},
8315 +       {0x00008274, 0x40000000},
8316 +       {0x00008278, 0x003e4180},
8317 +       {0x0000827c, 0x00000000},
8318 +       {0x00008284, 0x0000002c},
8319 +       {0x00008288, 0x0000002c},
8320 +       {0x0000828c, 0x00000000},
8321 +       {0x00008294, 0x00000000},
8322 +       {0x00008298, 0x00000000},
8323 +       {0x0000829c, 0x00000000},
8324 +       {0x00008300, 0x00000040},
8325 +       {0x00008314, 0x00000000},
8326 +       {0x00008328, 0x00000000},
8327 +       {0x0000832c, 0x00000001},
8328 +       {0x00008330, 0x00000302},
8329 +       {0x00008334, 0x00000e00},
8330 +       {0x00008338, 0x00000000},
8331 +       {0x0000833c, 0x00000000},
8332 +       {0x00008340, 0x00010380},
8333 +       {0x00008344, 0x00481043},
8334 +       {0x00009808, 0x00000000},
8335 +       {0x0000980c, 0xafe68e30},
8336 +       {0x00009810, 0xfd14e000},
8337 +       {0x00009814, 0x9c0a9f6b},
8338 +       {0x0000981c, 0x00000000},
8339 +       {0x0000982c, 0x0000a000},
8340 +       {0x00009830, 0x00000000},
8341 +       {0x0000983c, 0x00200400},
8342 +       {0x0000984c, 0x0040233c},
8343 +       {0x00009854, 0x00000044},
8344 +       {0x00009900, 0x00000000},
8345 +       {0x00009904, 0x00000000},
8346 +       {0x00009908, 0x00000000},
8347 +       {0x0000990c, 0x00000000},
8348 +       {0x00009910, 0x01002310},
8349 +       {0x0000991c, 0x10000fff},
8350 +       {0x00009920, 0x04900000},
8351 +       {0x00009928, 0x00000001},
8352 +       {0x0000992c, 0x00000004},
8353 +       {0x00009934, 0x1e1f2022},
8354 +       {0x00009938, 0x0a0b0c0d},
8355 +       {0x0000993c, 0x00000000},
8356 +       {0x00009940, 0x14750604},
8357 +       {0x00009948, 0x9280c00a},
8358 +       {0x0000994c, 0x00020028},
8359 +       {0x00009954, 0x5f3ca3de},
8360 +       {0x00009958, 0x2108ecff},
8361 +       {0x00009968, 0x000003ce},
8362 +       {0x00009970, 0x1927b515},
8363 +       {0x00009974, 0x00000000},
8364 +       {0x00009978, 0x00000001},
8365 +       {0x0000997c, 0x00000000},
8366 +       {0x00009980, 0x00000000},
8367 +       {0x00009984, 0x00000000},
8368 +       {0x00009988, 0x00000000},
8369 +       {0x0000998c, 0x00000000},
8370 +       {0x00009990, 0x00000000},
8371 +       {0x00009994, 0x00000000},
8372 +       {0x00009998, 0x00000000},
8373 +       {0x0000999c, 0x00000000},
8374 +       {0x000099a0, 0x00000000},
8375 +       {0x000099a4, 0x00000001},
8376 +       {0x000099a8, 0x201fff00},
8377 +       {0x000099ac, 0x2def0a00},
8378 +       {0x000099b0, 0x03051000},
8379 +       {0x000099b4, 0x00000820},
8380 +       {0x000099dc, 0x00000000},
8381 +       {0x000099e0, 0x00000000},
8382 +       {0x000099e4, 0xaaaaaaaa},
8383 +       {0x000099e8, 0x3c466478},
8384 +       {0x000099ec, 0x0cc80caa},
8385 +       {0x000099f0, 0x00000000},
8386 +       {0x0000a208, 0x803e6788},
8387 +       {0x0000a210, 0x4080a333},
8388 +       {0x0000a214, 0x00206c10},
8389 +       {0x0000a218, 0x009c4060},
8390 +       {0x0000a220, 0x01834061},
8391 +       {0x0000a224, 0x00000400},
8392 +       {0x0000a228, 0x000003b5},
8393 +       {0x0000a22c, 0x00000000},
8394 +       {0x0000a234, 0x20202020},
8395 +       {0x0000a238, 0x20202020},
8396 +       {0x0000a244, 0x00000000},
8397 +       {0x0000a248, 0xfffffffc},
8398 +       {0x0000a24c, 0x00000000},
8399 +       {0x0000a254, 0x00000000},
8400 +       {0x0000a258, 0x0ccb5380},
8401 +       {0x0000a25c, 0x15151501},
8402 +       {0x0000a260, 0xdfa90f01},
8403 +       {0x0000a268, 0x00000000},
8404 +       {0x0000a26c, 0x0ebae9e6},
8405 +       {0x0000d270, 0x0d820820},
8406 +       {0x0000a278, 0x39ce739c},
8407 +       {0x0000a27c, 0x050e039c},
8408 +       {0x0000d35c, 0x07ffffef},
8409 +       {0x0000d360, 0x0fffffe7},
8410 +       {0x0000d364, 0x17ffffe5},
8411 +       {0x0000d368, 0x1fffffe4},
8412 +       {0x0000d36c, 0x37ffffe3},
8413 +       {0x0000d370, 0x3fffffe3},
8414 +       {0x0000d374, 0x57ffffe3},
8415 +       {0x0000d378, 0x5fffffe2},
8416 +       {0x0000d37c, 0x7fffffe2},
8417 +       {0x0000d380, 0x7f3c7bba},
8418 +       {0x0000d384, 0xf3307ff0},
8419 +       {0x0000a388, 0x0c000000},
8420 +       {0x0000a38c, 0x20202020},
8421 +       {0x0000a390, 0x20202020},
8422 +       {0x0000a394, 0x39ce739c},
8423 +       {0x0000a398, 0x0000039c},
8424 +       {0x0000a39c, 0x00000001},
8425 +       {0x0000a3a0, 0x00000000},
8426 +       {0x0000a3a4, 0x00000000},
8427 +       {0x0000a3a8, 0x00000000},
8428 +       {0x0000a3ac, 0x00000000},
8429 +       {0x0000a3b0, 0x00000000},
8430 +       {0x0000a3b4, 0x00000000},
8431 +       {0x0000a3b8, 0x00000000},
8432 +       {0x0000a3bc, 0x00000000},
8433 +       {0x0000a3c0, 0x00000000},
8434 +       {0x0000a3c4, 0x00000000},
8435 +       {0x0000a3cc, 0x20202020},
8436 +       {0x0000a3d0, 0x20202020},
8437 +       {0x0000a3d4, 0x20202020},
8438 +       {0x0000a3dc, 0x39ce739c},
8439 +       {0x0000a3e0, 0x0000039c},
8440 +       {0x0000a3e4, 0x00000000},
8441 +       {0x0000a3e8, 0x18c43433},
8442 +       {0x0000a3ec, 0x00f70081},
8443 +       {0x00007800, 0x00140000},
8444 +       {0x00007804, 0x0e4548d8},
8445 +       {0x00007808, 0x54214514},
8446 +       {0x0000780c, 0x02025820},
8447 +       {0x00007810, 0x71c0d388},
8448 +       {0x00007814, 0x924934a8},
8449 +       {0x0000781c, 0x00000000},
8450 +       {0x00007820, 0x00000c04},
8451 +       {0x00007824, 0x00d86fff},
8452 +       {0x00007828, 0x26d2491b},
8453 +       {0x0000782c, 0x6e36d97b},
8454 +       {0x00007830, 0xedb6d96c},
8455 +       {0x00007834, 0x71400086},
8456 +       {0x00007838, 0xfac68800},
8457 +       {0x0000783c, 0x0001fffe},
8458 +       {0x00007840, 0xffeb1a20},
8459 +       {0x00007844, 0x000c0db6},
8460 +       {0x00007848, 0x6db61b6f},
8461 +       {0x0000784c, 0x6d9b66db},
8462 +       {0x00007850, 0x6d8c6dba},
8463 +       {0x00007854, 0x00040000},
8464 +       {0x00007858, 0xdb003012},
8465 +       {0x0000785c, 0x04924914},
8466 +       {0x00007860, 0x21084210},
8467 +       {0x00007864, 0xf7d7ffde},
8468 +       {0x00007868, 0xc2034080},
8469 +       {0x0000786c, 0x48609eb4},
8470 +       {0x00007870, 0x10142c00},
8471 +};
8472 +
8473 +static const u_int32_t ar9285PciePhy_clkreq_always_on_L1_9285[][2] = {
8474 +       {0x00004040, 0x9248fd00},
8475 +       {0x00004040, 0x24924924},
8476 +       {0x00004040, 0xa8000019},
8477 +       {0x00004040, 0x13160820},
8478 +       {0x00004040, 0xe5980560},
8479 +       {0x00004040, 0xc01dcffd},
8480 +       {0x00004040, 0x1aaabe41},
8481 +       {0x00004040, 0xbe105554},
8482 +       {0x00004040, 0x00043007},
8483 +       {0x00004044, 0x00000000},
8484 +};
8485 +
8486 +static const u_int32_t ar9285PciePhy_clkreq_off_L1_9285[][2] = {
8487 +       {0x00004040, 0x9248fd00},
8488 +       {0x00004040, 0x24924924},
8489 +       {0x00004040, 0xa8000019},
8490 +       {0x00004040, 0x13160820},
8491 +       {0x00004040, 0xe5980560},
8492 +       {0x00004040, 0xc01dcffc},
8493 +       {0x00004040, 0x1aaabe41},
8494 +       {0x00004040, 0xbe105554},
8495 +       {0x00004040, 0x00043007},
8496 +       {0x00004044, 0x00000000},
8497 +};
8498 +
8499 +/* AR9285 v1_2 PCI Register Writes.  Created: 04/13/09 */
8500 +static const u_int32_t ar9285Modes_9285_1_2[][6] = {
8501 +       /* Address      5G-HT20     5G-HT40     2G-HT40     2G-HT20     Turbo   */
8502 +       {0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160,
8503 +        0x000001e0},
8504 +       {0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c,
8505 +        0x000001e0},
8506 +       {0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38,
8507 +        0x00001180},
8508 +       {0x000010f0, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
8509 +        0x00000008},
8510 +       {0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00,
8511 +        0x06e006e0},
8512 +       {0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b,
8513 +        0x0988004f},
8514 +       {0x00008318, 0x00003e80, 0x00007d00, 0x00006880, 0x00003440,
8515 +        0x00006880},
8516 +       {0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300,
8517 +        0x00000303},
8518 +       {0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200,
8519 +        0x02020200},
8520 +       {0x00009824, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e,
8521 +        0x01000e0e},
8522 +       {0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001,
8523 +        0x0a020001},
8524 +       {0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e,
8525 +        0x00000e0e},
8526 +       {0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007,
8527 +        0x00000007},
8528 +       {0x00009840, 0x206a012e, 0x206a012e, 0x206a012e, 0x206a012e,
8529 +        0x206a012e},
8530 +       {0x00009844, 0x0372161e, 0x0372161e, 0x03721620, 0x03721620,
8531 +        0x037216a0},
8532 +       {0x00009848, 0x00001066, 0x00001066, 0x00001053, 0x00001053,
8533 +        0x00001059},
8534 +       {0x0000a848, 0x00001066, 0x00001066, 0x00001053, 0x00001053,
8535 +        0x00001059},
8536 +       {0x00009850, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2,
8537 +        0x6d4000e2},
8538 +       {0x00009858, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e,
8539 +        0x7ec84d2e},
8540 +       {0x0000985c, 0x3139605e, 0x3139605e, 0x3137605e, 0x3137605e,
8541 +        0x3139605e},
8542 +       {0x00009860, 0x00058d18, 0x00058d18, 0x00058d20, 0x00058d20,
8543 +        0x00058d18},
8544 +       {0x00009864, 0x0000fe00, 0x0000fe00, 0x0001ce00, 0x0001ce00,
8545 +        0x0001ce00},
8546 +       {0x00009868, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0,
8547 +        0x5ac640d0},
8548 +       {0x0000986c, 0x06903081, 0x06903081, 0x06903881, 0x06903881,
8549 +        0x06903881},
8550 +       {0x00009914, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898,
8551 +        0x000007d0},
8552 +       {0x00009918, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b,
8553 +        0x00000016},
8554 +       {0x00009924, 0xd00a8007, 0xd00a8007, 0xd00a800d, 0xd00a800d,
8555 +        0xd00a800d},
8556 +       {0x00009944, 0xffbc1010, 0xffbc1010, 0xffbc1020, 0xffbc1020,
8557 +        0xffbc1010},
8558 +       {0x00009960, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
8559 +        0x00000000},
8560 +       {0x00009964, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
8561 +        0x00000000},
8562 +       {0x000099b8, 0x0000421c, 0x0000421c, 0x0000421c, 0x0000421c,
8563 +        0x0000421c},
8564 +       {0x000099bc, 0x00000600, 0x00000600, 0x00000c00, 0x00000c00,
8565 +        0x00000c00},
8566 +       {0x000099c0, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4,
8567 +        0x05eea6d4},
8568 +       {0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77,
8569 +        0x06336f77},
8570 +       {0x000099c8, 0x6af6532f, 0x6af6532f, 0x6af6532f, 0x6af6532f,
8571 +        0x6af6532f},
8572 +       {0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8,
8573 +        0x08f186c8},
8574 +       {0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384,
8575 +        0x00046384},
8576 +       {0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
8577 +        0x00000000},
8578 +       {0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
8579 +        0x00000000},
8580 +       {0x00009a00, 0x00000000, 0x00000000, 0x00058084, 0x00058084,
8581 +        0x00000000},
8582 +       {0x00009a04, 0x00000000, 0x00000000, 0x00058088, 0x00058088,
8583 +        0x00000000},
8584 +       {0x00009a08, 0x00000000, 0x00000000, 0x0005808c, 0x0005808c,
8585 +        0x00000000},
8586 +       {0x00009a0c, 0x00000000, 0x00000000, 0x00058100, 0x00058100,
8587 +        0x00000000},
8588 +       {0x00009a10, 0x00000000, 0x00000000, 0x00058104, 0x00058104,
8589 +        0x00000000},
8590 +       {0x00009a14, 0x00000000, 0x00000000, 0x00058108, 0x00058108,
8591 +        0x00000000},
8592 +       {0x00009a18, 0x00000000, 0x00000000, 0x0005810c, 0x0005810c,
8593 +        0x00000000},
8594 +       {0x00009a1c, 0x00000000, 0x00000000, 0x00058110, 0x00058110,
8595 +        0x00000000},
8596 +       {0x00009a20, 0x00000000, 0x00000000, 0x00058114, 0x00058114,
8597 +        0x00000000},
8598 +       {0x00009a24, 0x00000000, 0x00000000, 0x00058180, 0x00058180,
8599 +        0x00000000},
8600 +       {0x00009a28, 0x00000000, 0x00000000, 0x00058184, 0x00058184,
8601 +        0x00000000},
8602 +       {0x00009a2c, 0x00000000, 0x00000000, 0x00058188, 0x00058188,
8603 +        0x00000000},
8604 +       {0x00009a30, 0x00000000, 0x00000000, 0x0005818c, 0x0005818c,
8605 +        0x00000000},
8606 +       {0x00009a34, 0x00000000, 0x00000000, 0x00058190, 0x00058190,
8607 +        0x00000000},
8608 +       {0x00009a38, 0x00000000, 0x00000000, 0x00058194, 0x00058194,
8609 +        0x00000000},
8610 +       {0x00009a3c, 0x00000000, 0x00000000, 0x000581a0, 0x000581a0,
8611 +        0x00000000},
8612 +       {0x00009a40, 0x00000000, 0x00000000, 0x0005820c, 0x0005820c,
8613 +        0x00000000},
8614 +       {0x00009a44, 0x00000000, 0x00000000, 0x000581a8, 0x000581a8,
8615 +        0x00000000},
8616 +       {0x00009a48, 0x00000000, 0x00000000, 0x00058284, 0x00058284,
8617 +        0x00000000},
8618 +       {0x00009a4c, 0x00000000, 0x00000000, 0x00058288, 0x00058288,
8619 +        0x00000000},
8620 +       {0x00009a50, 0x00000000, 0x00000000, 0x00058224, 0x00058224,
8621 +        0x00000000},
8622 +       {0x00009a54, 0x00000000, 0x00000000, 0x00058290, 0x00058290,
8623 +        0x00000000},
8624 +       {0x00009a58, 0x00000000, 0x00000000, 0x00058300, 0x00058300,
8625 +        0x00000000},
8626 +       {0x00009a5c, 0x00000000, 0x00000000, 0x00058304, 0x00058304,
8627 +        0x00000000},
8628 +       {0x00009a60, 0x00000000, 0x00000000, 0x00058308, 0x00058308,
8629 +        0x00000000},
8630 +       {0x00009a64, 0x00000000, 0x00000000, 0x0005830c, 0x0005830c,
8631 +        0x00000000},
8632 +       {0x00009a68, 0x00000000, 0x00000000, 0x00058380, 0x00058380,
8633 +        0x00000000},
8634 +       {0x00009a6c, 0x00000000, 0x00000000, 0x00058384, 0x00058384,
8635 +        0x00000000},
8636 +       {0x00009a70, 0x00000000, 0x00000000, 0x00068700, 0x00068700,
8637 +        0x00000000},
8638 +       {0x00009a74, 0x00000000, 0x00000000, 0x00068704, 0x00068704,
8639 +        0x00000000},
8640 +       {0x00009a78, 0x00000000, 0x00000000, 0x00068708, 0x00068708,
8641 +        0x00000000},
8642 +       {0x00009a7c, 0x00000000, 0x00000000, 0x0006870c, 0x0006870c,
8643 +        0x00000000},
8644 +       {0x00009a80, 0x00000000, 0x00000000, 0x00068780, 0x00068780,
8645 +        0x00000000},
8646 +       {0x00009a84, 0x00000000, 0x00000000, 0x00068784, 0x00068784,
8647 +        0x00000000},
8648 +       {0x00009a88, 0x00000000, 0x00000000, 0x00078b00, 0x00078b00,
8649 +        0x00000000},
8650 +       {0x00009a8c, 0x00000000, 0x00000000, 0x00078b04, 0x00078b04,
8651 +        0x00000000},
8652 +       {0x00009a90, 0x00000000, 0x00000000, 0x00078b08, 0x00078b08,
8653 +        0x00000000},
8654 +       {0x00009a94, 0x00000000, 0x00000000, 0x00078b0c, 0x00078b0c,
8655 +        0x00000000},
8656 +       {0x00009a98, 0x00000000, 0x00000000, 0x00078b80, 0x00078b80,
8657 +        0x00000000},
8658 +       {0x00009a9c, 0x00000000, 0x00000000, 0x00078b84, 0x00078b84,
8659 +        0x00000000},
8660 +       {0x00009aa0, 0x00000000, 0x00000000, 0x00078b88, 0x00078b88,
8661 +        0x00000000},
8662 +       {0x00009aa4, 0x00000000, 0x00000000, 0x00078b8c, 0x00078b8c,
8663 +        0x00000000},
8664 +       {0x00009aa8, 0x00000000, 0x00000000, 0x00078b90, 0x00078b90,
8665 +        0x00000000},
8666 +       {0x00009aac, 0x00000000, 0x00000000, 0x000caf80, 0x000caf80,
8667 +        0x00000000},
8668 +       {0x00009ab0, 0x00000000, 0x00000000, 0x000caf84, 0x000caf84,
8669 +        0x00000000},
8670 +       {0x00009ab4, 0x00000000, 0x00000000, 0x000caf88, 0x000caf88,
8671 +        0x00000000},
8672 +       {0x00009ab8, 0x00000000, 0x00000000, 0x000caf8c, 0x000caf8c,
8673 +        0x00000000},
8674 +       {0x00009abc, 0x00000000, 0x00000000, 0x000caf90, 0x000caf90,
8675 +        0x00000000},
8676 +       {0x00009ac0, 0x00000000, 0x00000000, 0x000db30c, 0x000db30c,
8677 +        0x00000000},
8678 +       {0x00009ac4, 0x00000000, 0x00000000, 0x000db310, 0x000db310,
8679 +        0x00000000},
8680 +       {0x00009ac8, 0x00000000, 0x00000000, 0x000db384, 0x000db384,
8681 +        0x00000000},
8682 +       {0x00009acc, 0x00000000, 0x00000000, 0x000db388, 0x000db388,
8683 +        0x00000000},
8684 +       {0x00009ad0, 0x00000000, 0x00000000, 0x000db324, 0x000db324,
8685 +        0x00000000},
8686 +       {0x00009ad4, 0x00000000, 0x00000000, 0x000eb704, 0x000eb704,
8687 +        0x00000000},
8688 +       {0x00009ad8, 0x00000000, 0x00000000, 0x000eb6a4, 0x000eb6a4,
8689 +        0x00000000},
8690 +       {0x00009adc, 0x00000000, 0x00000000, 0x000eb6a8, 0x000eb6a8,
8691 +        0x00000000},
8692 +       {0x00009ae0, 0x00000000, 0x00000000, 0x000eb710, 0x000eb710,
8693 +        0x00000000},
8694 +       {0x00009ae4, 0x00000000, 0x00000000, 0x000eb714, 0x000eb714,
8695 +        0x00000000},
8696 +       {0x00009ae8, 0x00000000, 0x00000000, 0x000eb720, 0x000eb720,
8697 +        0x00000000},
8698 +       {0x00009aec, 0x00000000, 0x00000000, 0x000eb724, 0x000eb724,
8699 +        0x00000000},
8700 +       {0x00009af0, 0x00000000, 0x00000000, 0x000eb728, 0x000eb728,
8701 +        0x00000000},
8702 +       {0x00009af4, 0x00000000, 0x00000000, 0x000eb72c, 0x000eb72c,
8703 +        0x00000000},
8704 +       {0x00009af8, 0x00000000, 0x00000000, 0x000eb7a0, 0x000eb7a0,
8705 +        0x00000000},
8706 +       {0x00009afc, 0x00000000, 0x00000000, 0x000eb7a4, 0x000eb7a4,
8707 +        0x00000000},
8708 +       {0x00009b00, 0x00000000, 0x00000000, 0x000eb7a8, 0x000eb7a8,
8709 +        0x00000000},
8710 +       {0x00009b04, 0x00000000, 0x00000000, 0x000eb7b0, 0x000eb7b0,
8711 +        0x00000000},
8712 +       {0x00009b08, 0x00000000, 0x00000000, 0x000eb7b4, 0x000eb7b4,
8713 +        0x00000000},
8714 +       {0x00009b0c, 0x00000000, 0x00000000, 0x000eb7b8, 0x000eb7b8,
8715 +        0x00000000},
8716 +       {0x00009b10, 0x00000000, 0x00000000, 0x000eb7a5, 0x000eb7a5,
8717 +        0x00000000},
8718 +       {0x00009b14, 0x00000000, 0x00000000, 0x000eb7a9, 0x000eb7a9,
8719 +        0x00000000},
8720 +       {0x00009b18, 0x00000000, 0x00000000, 0x000eb7ad, 0x000eb7ad,
8721 +        0x00000000},
8722 +       {0x00009b1c, 0x00000000, 0x00000000, 0x000eb7b1, 0x000eb7b1,
8723 +        0x00000000},
8724 +       {0x00009b20, 0x00000000, 0x00000000, 0x000eb7b5, 0x000eb7b5,
8725 +        0x00000000},
8726 +       {0x00009b24, 0x00000000, 0x00000000, 0x000eb7b9, 0x000eb7b9,
8727 +        0x00000000},
8728 +       {0x00009b28, 0x00000000, 0x00000000, 0x000eb7c5, 0x000eb7c5,
8729 +        0x00000000},
8730 +       {0x00009b2c, 0x00000000, 0x00000000, 0x000eb7c9, 0x000eb7c9,
8731 +        0x00000000},
8732 +       {0x00009b30, 0x00000000, 0x00000000, 0x000eb7d1, 0x000eb7d1,
8733 +        0x00000000},
8734 +       {0x00009b34, 0x00000000, 0x00000000, 0x000eb7d5, 0x000eb7d5,
8735 +        0x00000000},
8736 +       {0x00009b38, 0x00000000, 0x00000000, 0x000eb7d9, 0x000eb7d9,
8737 +        0x00000000},
8738 +       {0x00009b3c, 0x00000000, 0x00000000, 0x000eb7c6, 0x000eb7c6,
8739 +        0x00000000},
8740 +       {0x00009b40, 0x00000000, 0x00000000, 0x000eb7ca, 0x000eb7ca,
8741 +        0x00000000},
8742 +       {0x00009b44, 0x00000000, 0x00000000, 0x000eb7ce, 0x000eb7ce,
8743 +        0x00000000},
8744 +       {0x00009b48, 0x00000000, 0x00000000, 0x000eb7d2, 0x000eb7d2,
8745 +        0x00000000},
8746 +       {0x00009b4c, 0x00000000, 0x00000000, 0x000eb7d6, 0x000eb7d6,
8747 +        0x00000000},
8748 +       {0x00009b50, 0x00000000, 0x00000000, 0x000eb7c3, 0x000eb7c3,
8749 +        0x00000000},
8750 +       {0x00009b54, 0x00000000, 0x00000000, 0x000eb7c7, 0x000eb7c7,
8751 +        0x00000000},
8752 +       {0x00009b58, 0x00000000, 0x00000000, 0x000eb7cb, 0x000eb7cb,
8753 +        0x00000000},
8754 +       {0x00009b5c, 0x00000000, 0x00000000, 0x000eb7cf, 0x000eb7cf,
8755 +        0x00000000},
8756 +       {0x00009b60, 0x00000000, 0x00000000, 0x000eb7d7, 0x000eb7d7,
8757 +        0x00000000},
8758 +       {0x00009b64, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8759 +        0x00000000},
8760 +       {0x00009b68, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8761 +        0x00000000},
8762 +       {0x00009b6c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8763 +        0x00000000},
8764 +       {0x00009b70, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8765 +        0x00000000},
8766 +       {0x00009b74, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8767 +        0x00000000},
8768 +       {0x00009b78, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8769 +        0x00000000},
8770 +       {0x00009b7c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8771 +        0x00000000},
8772 +       {0x00009b80, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8773 +        0x00000000},
8774 +       {0x00009b84, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8775 +        0x00000000},
8776 +       {0x00009b88, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8777 +        0x00000000},
8778 +       {0x00009b8c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8779 +        0x00000000},
8780 +       {0x00009b90, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8781 +        0x00000000},
8782 +       {0x00009b94, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8783 +        0x00000000},
8784 +       {0x00009b98, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8785 +        0x00000000},
8786 +       {0x00009b9c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8787 +        0x00000000},
8788 +       {0x00009ba0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8789 +        0x00000000},
8790 +       {0x00009ba4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8791 +        0x00000000},
8792 +       {0x00009ba8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8793 +        0x00000000},
8794 +       {0x00009bac, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8795 +        0x00000000},
8796 +       {0x00009bb0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8797 +        0x00000000},
8798 +       {0x00009bb4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8799 +        0x00000000},
8800 +       {0x00009bb8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8801 +        0x00000000},
8802 +       {0x00009bbc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8803 +        0x00000000},
8804 +       {0x00009bc0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8805 +        0x00000000},
8806 +       {0x00009bc4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8807 +        0x00000000},
8808 +       {0x00009bc8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8809 +        0x00000000},
8810 +       {0x00009bcc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8811 +        0x00000000},
8812 +       {0x00009bd0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8813 +        0x00000000},
8814 +       {0x00009bd4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8815 +        0x00000000},
8816 +       {0x00009bd8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8817 +        0x00000000},
8818 +       {0x00009bdc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8819 +        0x00000000},
8820 +       {0x00009be0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8821 +        0x00000000},
8822 +       {0x00009be4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8823 +        0x00000000},
8824 +       {0x00009be8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8825 +        0x00000000},
8826 +       {0x00009bec, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8827 +        0x00000000},
8828 +       {0x00009bf0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8829 +        0x00000000},
8830 +       {0x00009bf4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8831 +        0x00000000},
8832 +       {0x00009bf8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8833 +        0x00000000},
8834 +       {0x00009bfc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
8835 +        0x00000000},
8836 +       {0x0000aa00, 0x00000000, 0x00000000, 0x00058084, 0x00058084,
8837 +        0x00000000},
8838 +       {0x0000aa04, 0x00000000, 0x00000000, 0x00058088, 0x00058088,
8839 +        0x00000000},
8840 +       {0x0000aa08, 0x00000000, 0x00000000, 0x0005808c, 0x0005808c,
8841 +        0x00000000},
8842 +       {0x0000aa0c, 0x00000000, 0x00000000, 0x00058100, 0x00058100,
8843 +        0x00000000},
8844 +       {0x0000aa10, 0x00000000, 0x00000000, 0x00058104, 0x00058104,
8845 +        0x00000000},
8846 +       {0x0000aa14, 0x00000000, 0x00000000, 0x00058108, 0x00058108,
8847 +        0x00000000},
8848 +       {0x0000aa18, 0x00000000, 0x00000000, 0x0005810c, 0x0005810c,
8849 +        0x00000000},
8850 +       {0x0000aa1c, 0x00000000, 0x00000000, 0x00058110, 0x00058110,
8851 +        0x00000000},
8852 +       {0x0000aa20, 0x00000000, 0x00000000, 0x00058114, 0x00058114,
8853 +        0x00000000},
8854 +       {0x0000aa24, 0x00000000, 0x00000000, 0x00058180, 0x00058180,
8855 +        0x00000000},
8856 +       {0x0000aa28, 0x00000000, 0x00000000, 0x00058184, 0x00058184,
8857 +        0x00000000},
8858 +       {0x0000aa2c, 0x00000000, 0x00000000, 0x00058188, 0x00058188,
8859 +        0x00000000},
8860 +       {0x0000aa30, 0x00000000, 0x00000000, 0x0005818c, 0x0005818c,
8861 +        0x00000000},
8862 +       {0x0000aa34, 0x00000000, 0x00000000, 0x00058190, 0x00058190,
8863 +        0x00000000},
8864 +       {0x0000aa38, 0x00000000, 0x00000000, 0x00058194, 0x00058194,
8865 +        0x00000000},
8866 +       {0x0000aa3c, 0x00000000, 0x00000000, 0x000581a0, 0x000581a0,
8867 +        0x00000000},
8868 +       {0x0000aa40, 0x00000000, 0x00000000, 0x0005820c, 0x0005820c,
8869 +        0x00000000},
8870 +       {0x0000aa44, 0x00000000, 0x00000000, 0x000581a8, 0x000581a8,
8871 +        0x00000000},
8872 +       {0x0000aa48, 0x00000000, 0x00000000, 0x00058284, 0x00058284,
8873 +        0x00000000},
8874 +       {0x0000aa4c, 0x00000000, 0x00000000, 0x00058288, 0x00058288,
8875 +        0x00000000},
8876 +       {0x0000aa50, 0x00000000, 0x00000000, 0x00058224, 0x00058224,
8877 +        0x00000000},
8878 +       {0x0000aa54, 0x00000000, 0x00000000, 0x00058290, 0x00058290,
8879 +        0x00000000},
8880 +       {0x0000aa58, 0x00000000, 0x00000000, 0x00058300, 0x00058300,
8881 +        0x00000000},
8882 +       {0x0000aa5c, 0x00000000, 0x00000000, 0x00058304, 0x00058304,
8883 +        0x00000000},
8884 +       {0x0000aa60, 0x00000000, 0x00000000, 0x00058308, 0x00058308,
8885 +        0x00000000},
8886 +       {0x0000aa64, 0x00000000, 0x00000000, 0x0005830c, 0x0005830c,
8887 +        0x00000000},
8888 +       {0x0000aa68, 0x00000000, 0x00000000, 0x00058380, 0x00058380,
8889 +        0x00000000},
8890 +       {0x0000aa6c, 0x00000000, 0x00000000, 0x00058384, 0x00058384,
8891 +        0x00000000},
8892 +       {0x0000aa70, 0x00000000, 0x00000000, 0x00068700, 0x00068700,
8893 +        0x00000000},
8894 +       {0x0000aa74, 0x00000000, 0x00000000, 0x00068704, 0x00068704,
8895 +        0x00000000},
8896 +       {0x0000aa78, 0x00000000, 0x00000000, 0x00068708, 0x00068708,
8897 +        0x00000000},
8898 +       {0x0000aa7c, 0x00000000, 0x00000000, 0x0006870c, 0x0006870c,
8899 +        0x00000000},
8900 +       {0x0000aa80, 0x00000000, 0x00000000, 0x00068780, 0x00068780,
8901 +        0x00000000},
8902 +       {0x0000aa84, 0x00000000, 0x00000000, 0x00068784, 0x00068784,
8903 +        0x00000000},
8904 +       {0x0000aa88, 0x00000000, 0x00000000, 0x00078b00, 0x00078b00,
8905 +        0x00000000},
8906 +       {0x0000aa8c, 0x00000000, 0x00000000, 0x00078b04, 0x00078b04,
8907 +        0x00000000},
8908 +       {0x0000aa90, 0x00000000, 0x00000000, 0x00078b08, 0x00078b08,
8909 +        0x00000000},
8910 +       {0x0000aa94, 0x00000000, 0x00000000, 0x00078b0c, 0x00078b0c,
8911 +        0x00000000},
8912 +       {0x0000aa98, 0x00000000, 0x00000000, 0x00078b80, 0x00078b80,
8913 +        0x00000000},
8914 +       {0x0000aa9c, 0x00000000, 0x00000000, 0x00078b84, 0x00078b84,
8915 +        0x00000000},
8916 +       {0x0000aaa0, 0x00000000, 0x00000000, 0x00078b88, 0x00078b88,
8917 +        0x00000000},
8918 +       {0x0000aaa4, 0x00000000, 0x00000000, 0x00078b8c, 0x00078b8c,
8919 +        0x00000000},
8920 +       {0x0000aaa8, 0x00000000, 0x00000000, 0x00078b90, 0x00078b90,
8921 +        0x00000000},
8922 +       {0x0000aaac, 0x00000000, 0x00000000, 0x000caf80, 0x000caf80,
8923 +        0x00000000},
8924 +       {0x0000aab0, 0x00000000, 0x00000000, 0x000caf84, 0x000caf84,
8925 +        0x00000000},
8926 +       {0x0000aab4, 0x00000000, 0x00000000, 0x000caf88, 0x000caf88,
8927 +        0x00000000},
8928 +       {0x0000aab8, 0x00000000, 0x00000000, 0x000caf8c, 0x000caf8c,
8929 +        0x00000000},
8930 +       {0x0000aabc, 0x00000000, 0x00000000, 0x000caf90, 0x000caf90,
8931 +        0x00000000},
8932 +       {0x0000aac0, 0x00000000, 0x00000000, 0x000db30c, 0x000db30c,
8933 +        0x00000000},
8934 +       {0x0000aac4, 0x00000000, 0x00000000, 0x000db310, 0x000db310,
8935 +        0x00000000},
8936 +       {0x0000aac8, 0x00000000, 0x00000000, 0x000db384, 0x000db384,
8937 +        0x00000000},
8938 +       {0x0000aacc, 0x00000000, 0x00000000, 0x000db388, 0x000db388,
8939 +        0x00000000},
8940 +       {0x0000aad0, 0x00000000, 0x00000000, 0x000db324, 0x000db324,
8941 +        0x00000000},
8942 +       {0x0000aad4, 0x00000000, 0x00000000, 0x000eb704, 0x000eb704,
8943 +        0x00000000},
8944 +       {0x0000aad8, 0x00000000, 0x00000000, 0x000eb6a4, 0x000eb6a4,
8945 +        0x00000000},
8946 +       {0x0000aadc, 0x00000000, 0x00000000, 0x000eb6a8, 0x000eb6a8,
8947 +        0x00000000},
8948 +       {0x0000aae0, 0x00000000, 0x00000000, 0x000eb710, 0x000eb710,
8949 +        0x00000000},
8950 +       {0x0000aae4, 0x00000000, 0x00000000, 0x000eb714, 0x000eb714,
8951 +        0x00000000},
8952 +       {0x0000aae8, 0x00000000, 0x00000000, 0x000eb720, 0x000eb720,
8953 +        0x00000000},
8954 +       {0x0000aaec, 0x00000000, 0x00000000, 0x000eb724, 0x000eb724,
8955 +        0x00000000},
8956 +       {0x0000aaf0, 0x00000000, 0x00000000, 0x000eb728, 0x000eb728,
8957 +        0x00000000},
8958 +       {0x0000aaf4, 0x00000000, 0x00000000, 0x000eb72c, 0x000eb72c,
8959 +        0x00000000},
8960 +       {0x0000aaf8, 0x00000000, 0x00000000, 0x000eb7a0, 0x000eb7a0,
8961 +        0x00000000},
8962 +       {0x0000aafc, 0x00000000, 0x00000000, 0x000eb7a4, 0x000eb7a4,
8963 +        0x00000000},
8964 +       {0x0000ab00, 0x00000000, 0x00000000, 0x000eb7a8, 0x000eb7a8,
8965 +        0x00000000},
8966 +       {0x0000ab04, 0x00000000, 0x00000000, 0x000eb7b0, 0x000eb7b0,
8967 +        0x00000000},
8968 +       {0x0000ab08, 0x00000000, 0x00000000, 0x000eb7b4, 0x000eb7b4,
8969 +        0x00000000},
8970 +       {0x0000ab0c, 0x00000000, 0x00000000, 0x000eb7b8, 0x000eb7b8,
8971 +        0x00000000},
8972 +       {0x0000ab10, 0x00000000, 0x00000000, 0x000eb7a5, 0x000eb7a5,
8973 +        0x00000000},
8974 +       {0x0000ab14, 0x00000000, 0x00000000, 0x000eb7a9, 0x000eb7a9,
8975 +        0x00000000},
8976 +       {0x0000ab18, 0x00000000, 0x00000000, 0x000eb7ad, 0x000eb7ad,
8977 +        0x00000000},
8978 +       {0x0000ab1c, 0x00000000, 0x00000000, 0x000eb7b1, 0x000eb7b1,
8979 +        0x00000000},
8980 +       {0x0000ab20, 0x00000000, 0x00000000, 0x000eb7b5, 0x000eb7b5,
8981 +        0x00000000},
8982 +       {0x0000ab24, 0x00000000, 0x00000000, 0x000eb7b9, 0x000eb7b9,
8983 +        0x00000000},
8984 +       {0x0000ab28, 0x00000000, 0x00000000, 0x000eb7c5, 0x000eb7c5,
8985 +        0x00000000},
8986 +       {0x0000ab2c, 0x00000000, 0x00000000, 0x000eb7c9, 0x000eb7c9,
8987 +        0x00000000},
8988 +       {0x0000ab30, 0x00000000, 0x00000000, 0x000eb7d1, 0x000eb7d1,
8989 +        0x00000000},
8990 +       {0x0000ab34, 0x00000000, 0x00000000, 0x000eb7d5, 0x000eb7d5,
8991 +        0x00000000},
8992 +       {0x0000ab38, 0x00000000, 0x00000000, 0x000eb7d9, 0x000eb7d9,
8993 +        0x00000000},
8994 +       {0x0000ab3c, 0x00000000, 0x00000000, 0x000eb7c6, 0x000eb7c6,
8995 +        0x00000000},
8996 +       {0x0000ab40, 0x00000000, 0x00000000, 0x000eb7ca, 0x000eb7ca,
8997 +        0x00000000},
8998 +       {0x0000ab44, 0x00000000, 0x00000000, 0x000eb7ce, 0x000eb7ce,
8999 +        0x00000000},
9000 +       {0x0000ab48, 0x00000000, 0x00000000, 0x000eb7d2, 0x000eb7d2,
9001 +        0x00000000},
9002 +       {0x0000ab4c, 0x00000000, 0x00000000, 0x000eb7d6, 0x000eb7d6,
9003 +        0x00000000},
9004 +       {0x0000ab50, 0x00000000, 0x00000000, 0x000eb7c3, 0x000eb7c3,
9005 +        0x00000000},
9006 +       {0x0000ab54, 0x00000000, 0x00000000, 0x000eb7c7, 0x000eb7c7,
9007 +        0x00000000},
9008 +       {0x0000ab58, 0x00000000, 0x00000000, 0x000eb7cb, 0x000eb7cb,
9009 +        0x00000000},
9010 +       {0x0000ab5c, 0x00000000, 0x00000000, 0x000eb7cf, 0x000eb7cf,
9011 +        0x00000000},
9012 +       {0x0000ab60, 0x00000000, 0x00000000, 0x000eb7d7, 0x000eb7d7,
9013 +        0x00000000},
9014 +       {0x0000ab64, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9015 +        0x00000000},
9016 +       {0x0000ab68, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9017 +        0x00000000},
9018 +       {0x0000ab6c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9019 +        0x00000000},
9020 +       {0x0000ab70, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9021 +        0x00000000},
9022 +       {0x0000ab74, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9023 +        0x00000000},
9024 +       {0x0000ab78, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9025 +        0x00000000},
9026 +       {0x0000ab7c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9027 +        0x00000000},
9028 +       {0x0000ab80, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9029 +        0x00000000},
9030 +       {0x0000ab84, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9031 +        0x00000000},
9032 +       {0x0000ab88, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9033 +        0x00000000},
9034 +       {0x0000ab8c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9035 +        0x00000000},
9036 +       {0x0000ab90, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9037 +        0x00000000},
9038 +       {0x0000ab94, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9039 +        0x00000000},
9040 +       {0x0000ab98, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9041 +        0x00000000},
9042 +       {0x0000ab9c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9043 +        0x00000000},
9044 +       {0x0000aba0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9045 +        0x00000000},
9046 +       {0x0000aba4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9047 +        0x00000000},
9048 +       {0x0000aba8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9049 +        0x00000000},
9050 +       {0x0000abac, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9051 +        0x00000000},
9052 +       {0x0000abb0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9053 +        0x00000000},
9054 +       {0x0000abb4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9055 +        0x00000000},
9056 +       {0x0000abb8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9057 +        0x00000000},
9058 +       {0x0000abbc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9059 +        0x00000000},
9060 +       {0x0000abc0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9061 +        0x00000000},
9062 +       {0x0000abc4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9063 +        0x00000000},
9064 +       {0x0000abc8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9065 +        0x00000000},
9066 +       {0x0000abcc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9067 +        0x00000000},
9068 +       {0x0000abd0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9069 +        0x00000000},
9070 +       {0x0000abd4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9071 +        0x00000000},
9072 +       {0x0000abd8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9073 +        0x00000000},
9074 +       {0x0000abdc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9075 +        0x00000000},
9076 +       {0x0000abe0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9077 +        0x00000000},
9078 +       {0x0000abe4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9079 +        0x00000000},
9080 +       {0x0000abe8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9081 +        0x00000000},
9082 +       {0x0000abec, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9083 +        0x00000000},
9084 +       {0x0000abf0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9085 +        0x00000000},
9086 +       {0x0000abf4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9087 +        0x00000000},
9088 +       {0x0000abf8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9089 +        0x00000000},
9090 +       {0x0000abfc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
9091 +        0x00000000},
9092 +       {0x0000a204, 0x00000004, 0x00000004, 0x00000004, 0x00000004,
9093 +        0x00000004},
9094 +       {0x0000a20c, 0x00000014, 0x00000014, 0x0001f000, 0x0001f000,
9095 +        0x0001f000},
9096 +       {0x0000b20c, 0x00000014, 0x00000014, 0x0001f000, 0x0001f000,
9097 +        0x0001f000},
9098 +       {0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a,
9099 +        0x1883800a},
9100 +       {0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108,
9101 +        0x00000000},
9102 +       {0x0000a250, 0x0004f000, 0x0004f000, 0x0004a000, 0x0004a000,
9103 +        0x0004a000},
9104 +       {0x0000a358, 0x7999aa02, 0x7999aa02, 0x7999aa0e, 0x7999aa0e,
9105 +        0x7999aa0e},
9106 +};
9107 +
9108 +static const u_int32_t ar9285Common_9285_1_2[][2] = {
9109 +       {0x0000000c, 0x00000000},
9110 +       {0x00000030, 0x00020045},
9111 +       {0x00000034, 0x00000005},
9112 +       {0x00000040, 0x00000000},
9113 +       {0x00000044, 0x00000008},
9114 +       {0x00000048, 0x00000008},
9115 +       {0x0000004c, 0x00000010},
9116 +       {0x00000050, 0x00000000},
9117 +       {0x00000054, 0x0000001f},
9118 +       {0x00000800, 0x00000000},
9119 +       {0x00000804, 0x00000000},
9120 +       {0x00000808, 0x00000000},
9121 +       {0x0000080c, 0x00000000},
9122 +       {0x00000810, 0x00000000},
9123 +       {0x00000814, 0x00000000},
9124 +       {0x00000818, 0x00000000},
9125 +       {0x0000081c, 0x00000000},
9126 +       {0x00000820, 0x00000000},
9127 +       {0x00000824, 0x00000000},
9128 +       {0x00001040, 0x002ffc0f},
9129 +       {0x00001044, 0x002ffc0f},
9130 +       {0x00001048, 0x002ffc0f},
9131 +       {0x0000104c, 0x002ffc0f},
9132 +       {0x00001050, 0x002ffc0f},
9133 +       {0x00001054, 0x002ffc0f},
9134 +       {0x00001058, 0x002ffc0f},
9135 +       {0x0000105c, 0x002ffc0f},
9136 +       {0x00001060, 0x002ffc0f},
9137 +       {0x00001064, 0x002ffc0f},
9138 +       {0x00001230, 0x00000000},
9139 +       {0x00001270, 0x00000000},
9140 +       {0x00001038, 0x00000000},
9141 +       {0x00001078, 0x00000000},
9142 +       {0x000010b8, 0x00000000},
9143 +       {0x000010f8, 0x00000000},
9144 +       {0x00001138, 0x00000000},
9145 +       {0x00001178, 0x00000000},
9146 +       {0x000011b8, 0x00000000},
9147 +       {0x000011f8, 0x00000000},
9148 +       {0x00001238, 0x00000000},
9149 +       {0x00001278, 0x00000000},
9150 +       {0x000012b8, 0x00000000},
9151 +       {0x000012f8, 0x00000000},
9152 +       {0x00001338, 0x00000000},
9153 +       {0x00001378, 0x00000000},
9154 +       {0x000013b8, 0x00000000},
9155 +       {0x000013f8, 0x00000000},
9156 +       {0x00001438, 0x00000000},
9157 +       {0x00001478, 0x00000000},
9158 +       {0x000014b8, 0x00000000},
9159 +       {0x000014f8, 0x00000000},
9160 +       {0x00001538, 0x00000000},
9161 +       {0x00001578, 0x00000000},
9162 +       {0x000015b8, 0x00000000},
9163 +       {0x000015f8, 0x00000000},
9164 +       {0x00001638, 0x00000000},
9165 +       {0x00001678, 0x00000000},
9166 +       {0x000016b8, 0x00000000},
9167 +       {0x000016f8, 0x00000000},
9168 +       {0x00001738, 0x00000000},
9169 +       {0x00001778, 0x00000000},
9170 +       {0x000017b8, 0x00000000},
9171 +       {0x000017f8, 0x00000000},
9172 +       {0x0000103c, 0x00000000},
9173 +       {0x0000107c, 0x00000000},
9174 +       {0x000010bc, 0x00000000},
9175 +       {0x000010fc, 0x00000000},
9176 +       {0x0000113c, 0x00000000},
9177 +       {0x0000117c, 0x00000000},
9178 +       {0x000011bc, 0x00000000},
9179 +       {0x000011fc, 0x00000000},
9180 +       {0x0000123c, 0x00000000},
9181 +       {0x0000127c, 0x00000000},
9182 +       {0x000012bc, 0x00000000},
9183 +       {0x000012fc, 0x00000000},
9184 +       {0x0000133c, 0x00000000},
9185 +       {0x0000137c, 0x00000000},
9186 +       {0x000013bc, 0x00000000},
9187 +       {0x000013fc, 0x00000000},
9188 +       {0x0000143c, 0x00000000},
9189 +       {0x0000147c, 0x00000000},
9190 +       {0x00004030, 0x00000002},
9191 +       {0x0000403c, 0x00000002},
9192 +       {0x00004024, 0x0000001f},
9193 +       {0x00004060, 0x00000000},
9194 +       {0x00004064, 0x00000000},
9195 +       {0x00007010, 0x00000031},
9196 +       {0x00007034, 0x00000002},
9197 +       {0x00007038, 0x000004c2},
9198 +       {0x00008004, 0x00000000},
9199 +       {0x00008008, 0x00000000},
9200 +       {0x0000800c, 0x00000000},
9201 +       {0x00008018, 0x00000700},
9202 +       {0x00008020, 0x00000000},
9203 +       {0x00008038, 0x00000000},
9204 +       {0x0000803c, 0x00000000},
9205 +       {0x00008048, 0x00000000},
9206 +       {0x00008054, 0x00000000},
9207 +       {0x00008058, 0x00000000},
9208 +       {0x0000805c, 0x000fc78f},
9209 +       {0x00008060, 0x0000000f},
9210 +       {0x00008064, 0x00000000},
9211 +       {0x00008070, 0x00000000},
9212 +       {0x000080c0, 0x2a80001a},
9213 +       {0x000080c4, 0x05dc01e0},
9214 +       {0x000080c8, 0x1f402710},
9215 +       {0x000080cc, 0x01f40000},
9216 +       {0x000080d0, 0x00001e00},
9217 +       {0x000080d4, 0x00000000},
9218 +       {0x000080d8, 0x00400000},
9219 +       {0x000080e0, 0xffffffff},
9220 +       {0x000080e4, 0x0000ffff},
9221 +       {0x000080e8, 0x003f3f3f},
9222 +       {0x000080ec, 0x00000000},
9223 +       {0x000080f0, 0x00000000},
9224 +       {0x000080f4, 0x00000000},
9225 +       {0x000080f8, 0x00000000},
9226 +       {0x000080fc, 0x00020000},
9227 +       {0x00008100, 0x00020000},
9228 +       {0x00008104, 0x00000001},
9229 +       {0x00008108, 0x00000052},
9230 +       {0x0000810c, 0x00000000},
9231 +       {0x00008110, 0x00000168},
9232 +       {0x00008118, 0x000100aa},
9233 +       {0x0000811c, 0x00003210},
9234 +       {0x00008120, 0x08f04810},
9235 +       {0x00008124, 0x00000000},
9236 +       {0x00008128, 0x00000000},
9237 +       {0x0000812c, 0x00000000},
9238 +       {0x00008130, 0x00000000},
9239 +       {0x00008134, 0x00000000},
9240 +       {0x00008138, 0x00000000},
9241 +       {0x0000813c, 0x00000000},
9242 +       {0x00008144, 0xffffffff},
9243 +       {0x00008168, 0x00000000},
9244 +       {0x0000816c, 0x00000000},
9245 +       {0x00008170, 0x32143320},
9246 +       {0x00008174, 0xfaa4fa50},
9247 +       {0x00008178, 0x00000100},
9248 +       {0x0000817c, 0x00000000},
9249 +       {0x000081c0, 0x00000000},
9250 +       {0x000081d0, 0x0000320a},
9251 +       {0x000081ec, 0x00000000},
9252 +       {0x000081f0, 0x00000000},
9253 +       {0x000081f4, 0x00000000},
9254 +       {0x000081f8, 0x00000000},
9255 +       {0x000081fc, 0x00000000},
9256 +       {0x00008200, 0x00000000},
9257 +       {0x00008204, 0x00000000},
9258 +       {0x00008208, 0x00000000},
9259 +       {0x0000820c, 0x00000000},
9260 +       {0x00008210, 0x00000000},
9261 +       {0x00008214, 0x00000000},
9262 +       {0x00008218, 0x00000000},
9263 +       {0x0000821c, 0x00000000},
9264 +       {0x00008220, 0x00000000},
9265 +       {0x00008224, 0x00000000},
9266 +       {0x00008228, 0x00000000},
9267 +       {0x0000822c, 0x00000000},
9268 +       {0x00008230, 0x00000000},
9269 +       {0x00008234, 0x00000000},
9270 +       {0x00008238, 0x00000000},
9271 +       {0x0000823c, 0x00000000},
9272 +       {0x00008240, 0x00100000},
9273 +       {0x00008244, 0x0010f400},
9274 +       {0x00008248, 0x00000100},
9275 +       {0x0000824c, 0x0001e800},
9276 +       {0x00008250, 0x00000000},
9277 +       {0x00008254, 0x00000000},
9278 +       {0x00008258, 0x00000000},
9279 +       {0x0000825c, 0x400000ff},
9280 +       {0x00008260, 0x00080922},
9281 +       {0x00008264, 0x88a00010},
9282 +       {0x00008270, 0x00000000},
9283 +       {0x00008274, 0x40000000},
9284 +       {0x00008278, 0x003e4180},
9285 +       {0x0000827c, 0x00000000},
9286 +       {0x00008284, 0x0000002c},
9287 +       {0x00008288, 0x0000002c},
9288 +       {0x0000828c, 0x00000000},
9289 +       {0x00008294, 0x00000000},
9290 +       {0x00008298, 0x00000000},
9291 +       {0x0000829c, 0x00000000},
9292 +       {0x00008300, 0x00000040},
9293 +       {0x00008314, 0x00000000},
9294 +       {0x00008328, 0x00000000},
9295 +       {0x0000832c, 0x00000001},
9296 +       {0x00008330, 0x00000302},
9297 +       {0x00008334, 0x00000e00},
9298 +       {0x00008338, 0x00ff0000},
9299 +       {0x0000833c, 0x00000000},
9300 +       {0x00008340, 0x00010380},
9301 +       {0x00008344, 0x00481043},
9302 +       {0x00009808, 0x00000000},
9303 +       {0x0000980c, 0xafe68e30},
9304 +       {0x00009810, 0xfd14e000},
9305 +       {0x00009814, 0x9c0a9f6b},
9306 +       {0x0000981c, 0x00000000},
9307 +       {0x0000982c, 0x0000a000},
9308 +       {0x00009830, 0x00000000},
9309 +       {0x0000983c, 0x00200400},
9310 +       {0x0000984c, 0x0040233c},
9311 +       {0x00009854, 0x00000044},
9312 +       {0x00009900, 0x00000000},
9313 +       {0x00009904, 0x00000000},
9314 +       {0x00009908, 0x00000000},
9315 +       {0x0000990c, 0x00000000},
9316 +       {0x00009910, 0x01002310},
9317 +       {0x0000991c, 0x10000fff},
9318 +       {0x00009920, 0x04900000},
9319 +       {0x00009928, 0x00000001},
9320 +       {0x0000992c, 0x00000004},
9321 +       {0x00009934, 0x1e1f2022},
9322 +       {0x00009938, 0x0a0b0c0d},
9323 +       {0x0000993c, 0x00000000},
9324 +       {0x00009940, 0x14750604},
9325 +       {0x00009948, 0x9280c00a},
9326 +       {0x0000994c, 0x00020028},
9327 +       {0x00009954, 0x5f3ca3de},
9328 +       {0x00009958, 0x2108ecff},
9329 +       {0x00009968, 0x000003ce},
9330 +       {0x00009970, 0x192bb514},
9331 +       {0x00009974, 0x00000000},
9332 +       {0x00009978, 0x00000001},
9333 +       {0x0000997c, 0x00000000},
9334 +       {0x00009980, 0x00000000},
9335 +       {0x00009984, 0x00000000},
9336 +       {0x00009988, 0x00000000},
9337 +       {0x0000998c, 0x00000000},
9338 +       {0x00009990, 0x00000000},
9339 +       {0x00009994, 0x00000000},
9340 +       {0x00009998, 0x00000000},
9341 +       {0x0000999c, 0x00000000},
9342 +       {0x000099a0, 0x00000000},
9343 +       {0x000099a4, 0x00000001},
9344 +       {0x000099a8, 0x201fff00},
9345 +       {0x000099ac, 0x2def0400},
9346 +       {0x000099b0, 0x03051000},
9347 +       {0x000099b4, 0x00000820},
9348 +       {0x000099dc, 0x00000000},
9349 +       {0x000099e0, 0x00000000},
9350 +       {0x000099e4, 0xaaaaaaaa},
9351 +       {0x000099e8, 0x3c466478},
9352 +       {0x000099ec, 0x0cc80caa},
9353 +       {0x000099f0, 0x00000000},
9354 +       {0x0000a208, 0x803e68c8},
9355 +       {0x0000a210, 0x4080a333},
9356 +       {0x0000a214, 0x00206c10},
9357 +       {0x0000a218, 0x009c4060},
9358 +       {0x0000a220, 0x01834061},
9359 +       {0x0000a224, 0x00000400},
9360 +       {0x0000a228, 0x000003b5},
9361 +       {0x0000a22c, 0x00000000},
9362 +       {0x0000a234, 0x20202020},
9363 +       {0x0000a238, 0x20202020},
9364 +       {0x0000a244, 0x00000000},
9365 +       {0x0000a248, 0xfffffffc},
9366 +       {0x0000a24c, 0x00000000},
9367 +       {0x0000a254, 0x00000000},
9368 +       {0x0000a258, 0x0ccb5380},
9369 +       {0x0000a25c, 0x15151501},
9370 +       {0x0000a260, 0xdfa90f01},
9371 +       {0x0000a268, 0x00000000},
9372 +       {0x0000a26c, 0x0ebae9e6},
9373 +       {0x0000d270, 0x0d820820},
9374 +       {0x0000d35c, 0x07ffffef},
9375 +       {0x0000d360, 0x0fffffe7},
9376 +       {0x0000d364, 0x17ffffe5},
9377 +       {0x0000d368, 0x1fffffe4},
9378 +       {0x0000d36c, 0x37ffffe3},
9379 +       {0x0000d370, 0x3fffffe3},
9380 +       {0x0000d374, 0x57ffffe3},
9381 +       {0x0000d378, 0x5fffffe2},
9382 +       {0x0000d37c, 0x7fffffe2},
9383 +       {0x0000d380, 0x7f3c7bba},
9384 +       {0x0000d384, 0xf3307ff0},
9385 +       {0x0000a388, 0x0c000000},
9386 +       {0x0000a38c, 0x20202020},
9387 +       {0x0000a390, 0x20202020},
9388 +       {0x0000a39c, 0x00000001},
9389 +       {0x0000a3a0, 0x00000000},
9390 +       {0x0000a3a4, 0x00000000},
9391 +       {0x0000a3a8, 0x00000000},
9392 +       {0x0000a3ac, 0x00000000},
9393 +       {0x0000a3b0, 0x00000000},
9394 +       {0x0000a3b4, 0x00000000},
9395 +       {0x0000a3b8, 0x00000000},
9396 +       {0x0000a3bc, 0x00000000},
9397 +       {0x0000a3c0, 0x00000000},
9398 +       {0x0000a3c4, 0x00000000},
9399 +       {0x0000a3cc, 0x20202020},
9400 +       {0x0000a3d0, 0x20202020},
9401 +       {0x0000a3d4, 0x20202020},
9402 +       {0x0000a3e4, 0x00000000},
9403 +       {0x0000a3e8, 0x18c43433},
9404 +       {0x0000a3ec, 0x00f70081},
9405 +       {0x00007800, 0x00140000},
9406 +       {0x00007804, 0x0e4548d8},
9407 +       {0x00007808, 0x54214514},
9408 +       {0x0000780c, 0x02025830},
9409 +       {0x00007810, 0x71c0d388},
9410 +       {0x0000781c, 0x00000000},
9411 +       {0x00007824, 0x00d86fff},
9412 +       {0x0000782c, 0x6e36d97b},
9413 +       {0x00007834, 0x71400087},
9414 +       {0x00007844, 0x000c0db6},
9415 +       {0x00007848, 0x6db6246f},
9416 +       {0x0000784c, 0x6d9b66db},
9417 +       {0x00007850, 0x6d8c6dba},
9418 +       {0x00007854, 0x00040000},
9419 +       {0x00007858, 0xdb003012},
9420 +       {0x0000785c, 0x04924914},
9421 +       {0x00007860, 0x21084210},
9422 +       {0x00007864, 0xf7d7ffde},
9423 +       {0x00007868, 0xc2034080},
9424 +       {0x00007870, 0x10142c00},
9425 +};
9426 +
9427 +static const u_int32_t ar9285Modes_high_power_tx_gain_9285_1_2[][6] = {
9428 +       /* Address      5G-HT20     5G-HT40     2G-HT40     2G-HT20     Turbo   */
9429 +       {0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
9430 +        0x00000000},
9431 +       {0x0000a304, 0x00000000, 0x00000000, 0x00006200, 0x00006200,
9432 +        0x00000000},
9433 +       {0x0000a308, 0x00000000, 0x00000000, 0x00008201, 0x00008201,
9434 +        0x00000000},
9435 +       {0x0000a30c, 0x00000000, 0x00000000, 0x0000b240, 0x0000b240,
9436 +        0x00000000},
9437 +       {0x0000a310, 0x00000000, 0x00000000, 0x0000d241, 0x0000d241,
9438 +        0x00000000},
9439 +       {0x0000a314, 0x00000000, 0x00000000, 0x0000f600, 0x0000f600,
9440 +        0x00000000},
9441 +       {0x0000a318, 0x00000000, 0x00000000, 0x00012800, 0x00012800,
9442 +        0x00000000},
9443 +       {0x0000a31c, 0x00000000, 0x00000000, 0x00016802, 0x00016802,
9444 +        0x00000000},
9445 +       {0x0000a320, 0x00000000, 0x00000000, 0x0001b805, 0x0001b805,
9446 +        0x00000000},
9447 +       {0x0000a324, 0x00000000, 0x00000000, 0x00021a80, 0x00021a80,
9448 +        0x00000000},
9449 +       {0x0000a328, 0x00000000, 0x00000000, 0x00028b00, 0x00028b00,
9450 +        0x00000000},
9451 +       {0x0000a32c, 0x00000000, 0x00000000, 0x0002ab40, 0x0002ab40,
9452 +        0x00000000},
9453 +       {0x0000a330, 0x00000000, 0x00000000, 0x0002cd80, 0x0002cd80,
9454 +        0x00000000},
9455 +       {0x0000a334, 0x00000000, 0x00000000, 0x00033d82, 0x00033d82,
9456 +        0x00000000},
9457 +       {0x0000a338, 0x0003891e, 0x0003891e, 0x0003891e, 0x0003891e,
9458 +        0x00000000},
9459 +       {0x0000a33c, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x0003a95e,
9460 +        0x00000000},
9461 +       {0x0000a340, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
9462 +        0x00000000},
9463 +       {0x0000a344, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
9464 +        0x00000000},
9465 +       {0x0000a348, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
9466 +        0x00000000},
9467 +       {0x0000a34c, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
9468 +        0x00000000},
9469 +       {0x0000a350, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
9470 +        0x00000000},
9471 +       {0x0000a354, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
9472 +        0x00000000},
9473 +       {0x00007814, 0x924934a8, 0x924934a8, 0x924934a8, 0x924934a8,
9474 +        0x924934a8},
9475 +       {0x00007828, 0x26d2491b, 0x26d2491b, 0x26d2491b, 0x26d2491b,
9476 +        0x26d2491b},
9477 +       {0x00007830, 0xedb6d96e, 0xedb6d96e, 0xedb6d96e, 0xedb6d96e,
9478 +        0xedb6d96e},
9479 +       {0x00007838, 0xfac68803, 0xfac68803, 0xfac68803, 0xfac68803,
9480 +        0xfac68803},
9481 +       {0x0000783c, 0x0001fffe, 0x0001fffe, 0x0001fffe, 0x0001fffe,
9482 +        0x0001fffe},
9483 +       {0x00007840, 0xffeb1a20, 0xffeb1a20, 0xffeb1a20, 0xffeb1a20,
9484 +        0xffeb1a20},
9485 +       {0x0000786c, 0x08609ebe, 0x08609ebe, 0x08609ebe, 0x08609ebe,
9486 +        0x08609ebe},
9487 +       {0x00007820, 0x00000c00, 0x00000c00, 0x00000c00, 0x00000c00,
9488 +        0x00000c00},
9489 +       {0x0000a274, 0x0a22a652, 0x0a22a652, 0x0a216652, 0x0a216652,
9490 +        0x0a22a652},
9491 +       {0x0000a278, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7,
9492 +        0x0e739ce7},
9493 +       {0x0000a27c, 0x050380e7, 0x050380e7, 0x050380e7, 0x050380e7,
9494 +        0x050380e7},
9495 +       {0x0000a394, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7,
9496 +        0x0e739ce7},
9497 +       {0x0000a398, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7,
9498 +        0x000000e7},
9499 +       {0x0000a3dc, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7,
9500 +        0x0e739ce7},
9501 +       {0x0000a3e0, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7,
9502 +        0x000000e7},
9503 +};
9504 +
9505 +static const u_int32_t ar9285Modes_original_tx_gain_9285_1_2[][6] = {
9506 +       /* Address      5G-HT20     5G-HT40     2G-HT40     2G-HT20     Turbo   */
9507 +       {0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
9508 +        0x00000000},
9509 +       {0x0000a304, 0x00000000, 0x00000000, 0x00009200, 0x00009200,
9510 +        0x00000000},
9511 +       {0x0000a308, 0x00000000, 0x00000000, 0x00010208, 0x00010208,
9512 +        0x00000000},
9513 +       {0x0000a30c, 0x00000000, 0x00000000, 0x00019608, 0x00019608,
9514 +        0x00000000},
9515 +       {0x0000a310, 0x00000000, 0x00000000, 0x00022618, 0x00022618,
9516 +        0x00000000},
9517 +       {0x0000a314, 0x00000000, 0x00000000, 0x0002a6c9, 0x0002a6c9,
9518 +        0x00000000},
9519 +       {0x0000a318, 0x00000000, 0x00000000, 0x00031710, 0x00031710,
9520 +        0x00000000},
9521 +       {0x0000a31c, 0x00000000, 0x00000000, 0x00035718, 0x00035718,
9522 +        0x00000000},
9523 +       {0x0000a320, 0x00000000, 0x00000000, 0x00038758, 0x00038758,
9524 +        0x00000000},
9525 +       {0x0000a324, 0x00000000, 0x00000000, 0x0003c75a, 0x0003c75a,
9526 +        0x00000000},
9527 +       {0x0000a328, 0x00000000, 0x00000000, 0x0004075c, 0x0004075c,
9528 +        0x00000000},
9529 +       {0x0000a32c, 0x00000000, 0x00000000, 0x0004475e, 0x0004475e,
9530 +        0x00000000},
9531 +       {0x0000a330, 0x00000000, 0x00000000, 0x0004679f, 0x0004679f,
9532 +        0x00000000},
9533 +       {0x0000a334, 0x00000000, 0x00000000, 0x000487df, 0x000487df,
9534 +        0x00000000},
9535 +       {0x0000a338, 0x0003891e, 0x0003891e, 0x0003891e, 0x0003891e,
9536 +        0x00000000},
9537 +       {0x0000a33c, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x0003a95e,
9538 +        0x00000000},
9539 +       {0x0000a340, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
9540 +        0x00000000},
9541 +       {0x0000a344, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
9542 +        0x00000000},
9543 +       {0x0000a348, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
9544 +        0x00000000},
9545 +       {0x0000a34c, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
9546 +        0x00000000},
9547 +       {0x0000a350, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
9548 +        0x00000000},
9549 +       {0x0000a354, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
9550 +        0x00000000},
9551 +       {0x00007814, 0x924934a8, 0x924934a8, 0x924934a8, 0x924934a8,
9552 +        0x924934a8},
9553 +       {0x00007828, 0x26d2491b, 0x26d2491b, 0x26d2491b, 0x26d2491b,
9554 +        0x26d2491b},
9555 +       {0x00007830, 0xedb6d96e, 0xedb6d96e, 0xedb6d96e, 0xedb6d96e,
9556 +        0xedb6d96e},
9557 +       {0x00007838, 0xfac68801, 0xfac68801, 0xfac68801, 0xfac68801,
9558 +        0xfac68801},
9559 +       {0x0000783c, 0x0001fffe, 0x0001fffe, 0x0001fffe, 0x0001fffe,
9560 +        0x0001fffe},
9561 +       {0x00007840, 0xffeb1a20, 0xffeb1a20, 0xffeb1a20, 0xffeb1a20,
9562 +        0xffeb1a20},
9563 +       {0x0000786c, 0x48609eb4, 0x48609eb4, 0x48609eb4, 0x48609eb4,
9564 +        0x48609eb4},
9565 +       {0x00007820, 0x00000c04, 0x00000c04, 0x00000c04, 0x00000c04,
9566 +        0x00000c04},
9567 +       {0x0000a274, 0x0a21c652, 0x0a21c652, 0x0a21a652, 0x0a21a652,
9568 +        0x0a22a652},
9569 +       {0x0000a278, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c,
9570 +        0x39ce739c},
9571 +       {0x0000a27c, 0x050e039c, 0x050e039c, 0x050e039c, 0x050e039c,
9572 +        0x050e039c},
9573 +       {0x0000a394, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c,
9574 +        0x39ce739c},
9575 +       {0x0000a398, 0x0000039c, 0x0000039c, 0x0000039c, 0x0000039c,
9576 +        0x0000039c},
9577 +       {0x0000a3dc, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c,
9578 +        0x39ce739c},
9579 +       {0x0000a3e0, 0x0000039c, 0x0000039c, 0x0000039c, 0x0000039c,
9580 +        0x0000039c},
9581 +};
9582 +
9583 +static const u_int32_t ar9285Modes_XE2_0_normal_power[][6] = {
9584 +       {0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
9585 +        0x00000000},
9586 +       {0x0000a304, 0x00000000, 0x00000000, 0x00009200, 0x00009200,
9587 +        0x00000000},
9588 +       {0x0000a308, 0x00000000, 0x00000000, 0x00010208, 0x00010208,
9589 +        0x00000000},
9590 +       {0x0000a30c, 0x00000000, 0x00000000, 0x00019608, 0x00019608,
9591 +        0x00000000},
9592 +       {0x0000a310, 0x00000000, 0x00000000, 0x00022618, 0x00022618,
9593 +        0x00000000},
9594 +       {0x0000a314, 0x00000000, 0x00000000, 0x0002a6c9, 0x0002a6c9,
9595 +        0x00000000},
9596 +       {0x0000a318, 0x00000000, 0x00000000, 0x00031710, 0x00031710,
9597 +        0x00000000},
9598 +       {0x0000a31c, 0x00000000, 0x00000000, 0x00035718, 0x00035718,
9599 +        0x00000000},
9600 +       {0x0000a320, 0x00000000, 0x00000000, 0x00038758, 0x00038758,
9601 +        0x00000000},
9602 +       {0x0000a324, 0x00000000, 0x00000000, 0x0003c75a, 0x0003c75a,
9603 +        0x00000000},
9604 +       {0x0000a328, 0x00000000, 0x00000000, 0x0004075c, 0x0004075c,
9605 +        0x00000000},
9606 +       {0x0000a32c, 0x00000000, 0x00000000, 0x0004475e, 0x0004475e,
9607 +        0x00000000},
9608 +       {0x0000a330, 0x00000000, 0x00000000, 0x0004679f, 0x0004679f,
9609 +        0x00000000},
9610 +       {0x0000a334, 0x00000000, 0x00000000, 0x000487df, 0x000487df,
9611 +        0x00000000},
9612 +       {0x0000a338, 0x0003891e, 0x0003891e, 0x0003891e, 0x0003891e,
9613 +        0x00000000},
9614 +       {0x0000a33c, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x0003a95e,
9615 +        0x00000000},
9616 +       {0x0000a340, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
9617 +        0x00000000},
9618 +       {0x0000a344, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
9619 +        0x00000000},
9620 +       {0x0000a348, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
9621 +        0x00000000},
9622 +       {0x0000a34c, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
9623 +        0x00000000},
9624 +       {0x0000a350, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
9625 +        0x00000000},
9626 +       {0x0000a354, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
9627 +        0x00000000},
9628 +       {0x00007814, 0x92497ca8, 0x92497ca8, 0x92497ca8, 0x92497ca8,
9629 +        0x92497ca8},
9630 +       {0x00007828, 0x4ad2491b, 0x4ad2491b, 0x2ad2491b, 0x4ad2491b,
9631 +        0x4ad2491b},
9632 +       {0x00007830, 0xedb6da6e, 0xedb6da6e, 0xedb6da6e, 0xedb6da6e,
9633 +        0xedb6dbae},
9634 +       {0x00007838, 0xdac71441, 0xdac71441, 0xdac71441, 0xdac71441,
9635 +        0xdac71441},
9636 +       {0x0000783c, 0x2481f6fe, 0x2481f6fe, 0x2481f6fe, 0x2481f6fe,
9637 +        0x2481f6fe},
9638 +       {0x00007840, 0xba5f638c, 0xba5f638c, 0xba5f638c, 0xba5f638c,
9639 +        0xba5f638c},
9640 +       {0x0000786c, 0x48609eb4, 0x48609eb4, 0x48609eb4, 0x48609eb4,
9641 +        0x48609eb4},
9642 +       {0x00007820, 0x00000c04, 0x00000c04, 0x00000c04, 0x00000c04,
9643 +        0x00000c04},
9644 +       {0x0000a274, 0x0a21c652, 0x0a21c652, 0x0a21a652, 0x0a21a652,
9645 +        0x0a22a652},
9646 +       {0x0000a278, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c,
9647 +        0x39ce739c},
9648 +       {0x0000a27c, 0x050e039c, 0x050e039c, 0x050e039c, 0x050e039c,
9649 +        0x050e039c},
9650 +       {0x0000a394, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c,
9651 +        0x39ce739c},
9652 +       {0x0000a398, 0x0000039c, 0x0000039c, 0x0000039c, 0x0000039c,
9653 +        0x0000039c},
9654 +       {0x0000a3dc, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c,
9655 +        0x39ce739c},
9656 +       {0x0000a3e0, 0x0000039c, 0x0000039c, 0x0000039c, 0x0000039c,
9657 +        0x0000039c},
9658 +};
9659 +
9660 +static const u_int32_t ar9285Modes_XE2_0_high_power[][6] = {
9661 +       {0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
9662 +        0x00000000},
9663 +       {0x0000a304, 0x00000000, 0x00000000, 0x00006200, 0x00006200,
9664 +        0x00000000},
9665 +       {0x0000a308, 0x00000000, 0x00000000, 0x00008201, 0x00008201,
9666 +        0x00000000},
9667 +       {0x0000a30c, 0x00000000, 0x00000000, 0x0000b240, 0x0000b240,
9668 +        0x00000000},
9669 +       {0x0000a310, 0x00000000, 0x00000000, 0x0000d241, 0x0000d241,
9670 +        0x00000000},
9671 +       {0x0000a314, 0x00000000, 0x00000000, 0x0000f600, 0x0000f600,
9672 +        0x00000000},
9673 +       {0x0000a318, 0x00000000, 0x00000000, 0x00012800, 0x00012800,
9674 +        0x00000000},
9675 +       {0x0000a31c, 0x00000000, 0x00000000, 0x00016802, 0x00016802,
9676 +        0x00000000},
9677 +       {0x0000a320, 0x00000000, 0x00000000, 0x0001b805, 0x0001b805,
9678 +        0x00000000},
9679 +       {0x0000a324, 0x00000000, 0x00000000, 0x00021a80, 0x00021a80,
9680 +        0x00000000},
9681 +       {0x0000a328, 0x00000000, 0x00000000, 0x00028b00, 0x00028b00,
9682 +        0x00000000},
9683 +       {0x0000a32c, 0x00000000, 0x00000000, 0x0002ab40, 0x0002ab40,
9684 +        0x00000000},
9685 +       {0x0000a330, 0x00000000, 0x00000000, 0x0002cd80, 0x0002cd80,
9686 +        0x00000000},
9687 +       {0x0000a334, 0x00000000, 0x00000000, 0x00033d82, 0x00033d82,
9688 +        0x00000000},
9689 +       {0x0000a338, 0x0003891e, 0x0003891e, 0x0003891e, 0x0003891e,
9690 +        0x00000000},
9691 +       {0x0000a33c, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x0003a95e,
9692 +        0x00000000},
9693 +       {0x0000a340, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
9694 +        0x00000000},
9695 +       {0x0000a344, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
9696 +        0x00000000},
9697 +       {0x0000a348, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
9698 +        0x00000000},
9699 +       {0x0000a34c, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
9700 +        0x00000000},
9701 +       {0x0000a350, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
9702 +        0x00000000},
9703 +       {0x0000a354, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
9704 +        0x00000000},
9705 +       {0x00007814, 0x92497ca8, 0x92497ca8, 0x92497ca8, 0x92497ca8,
9706 +        0x92497ca8},
9707 +       {0x00007828, 0x4ad2491b, 0x4ad2491b, 0x2ad2491b, 0x4ad2491b,
9708 +        0x4ad2491b},
9709 +       {0x00007830, 0xedb6da6e, 0xedb6da6e, 0xedb6da6e, 0xedb6da6e,
9710 +        0xedb6da6e},
9711 +       {0x00007838, 0xdac71443, 0xdac71443, 0xdac71443, 0xdac71443,
9712 +        0xdac71443},
9713 +       {0x0000783c, 0x2481f6fe, 0x2481f6fe, 0x2481f6fe, 0x2481f6fe,
9714 +        0x2481f6fe},
9715 +       {0x00007840, 0xba5f638c, 0xba5f638c, 0xba5f638c, 0xba5f638c,
9716 +        0xba5f638c},
9717 +       {0x0000786c, 0x08609ebe, 0x08609ebe, 0x08609ebe, 0x08609ebe,
9718 +        0x08609ebe},
9719 +       {0x00007820, 0x00000c00, 0x00000c00, 0x00000c00, 0x00000c00,
9720 +        0x00000c00},
9721 +       {0x0000a274, 0x0a22a652, 0x0a22a652, 0x0a216652, 0x0a216652,
9722 +        0x0a22a652},
9723 +       {0x0000a278, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7,
9724 +        0x0e739ce7},
9725 +       {0x0000a27c, 0x050380e7, 0x050380e7, 0x050380e7, 0x050380e7,
9726 +        0x050380e7},
9727 +       {0x0000a394, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7,
9728 +        0x0e739ce7},
9729 +       {0x0000a398, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7,
9730 +        0x000000e7},
9731 +       {0x0000a3dc, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7,
9732 +        0x0e739ce7},
9733 +       {0x0000a3e0, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7,
9734 +        0x000000e7},
9735 +};
9736 +
9737 +static const u_int32_t ar9285PciePhy_clkreq_always_on_L1_9285_1_2[][2] = {
9738 +       {0x00004040, 0x9248fd00},
9739 +       {0x00004040, 0x24924924},
9740 +       {0x00004040, 0xa8000019},
9741 +       {0x00004040, 0x13160820},
9742 +       {0x00004040, 0xe5980560},
9743 +       {0x00004040, 0xc01dcffd},
9744 +       {0x00004040, 0x1aaabe41},
9745 +       {0x00004040, 0xbe105554},
9746 +       {0x00004040, 0x00043007},
9747 +       {0x00004044, 0x00000000},
9748 +};
9749 +
9750 +static const u_int32_t ar9285PciePhy_clkreq_off_L1_9285_1_2[][2] = {
9751 +       {0x00004040, 0x9248fd00},
9752 +       {0x00004040, 0x24924924},
9753 +       {0x00004040, 0xa8000019},
9754 +       {0x00004040, 0x13160820},
9755 +       {0x00004040, 0xe5980560},
9756 +       {0x00004040, 0xc01dcffc},
9757 +       {0x00004040, 0x1aaabe41},
9758 +       {0x00004040, 0xbe105554},
9759 +       {0x00004040, 0x00043007},
9760 +       {0x00004044, 0x00000000},
9761 +};
9762 +
9763 +/* AR9287 Revision 10 */
9764 +static const u_int32_t ar9287Modes_9287_1_0[][6] = {
9765 +       /* Address      5G-HT20     5G-HT40     2G-HT40     2G-HT20     Turbo   */
9766 +       {0x00001030, 0x00000000, 0x00000000, 0x000002c0, 0x00000160,
9767 +        0x000001e0},
9768 +       {0x00001070, 0x00000000, 0x00000000, 0x00000318, 0x0000018c,
9769 +        0x000001e0},
9770 +       {0x000010b0, 0x00000000, 0x00000000, 0x00007c70, 0x00003e38,
9771 +        0x00001180},
9772 +       {0x000010f0, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
9773 +        0x00000008},
9774 +       {0x00008014, 0x00000000, 0x00000000, 0x10801600, 0x08400b00,
9775 +        0x06e006e0},
9776 +       {0x0000801c, 0x00000000, 0x00000000, 0x12e00057, 0x12e0002b,
9777 +        0x0988004f},
9778 +       {0x00008120, 0x08f04800, 0x08f04800, 0x08f04810, 0x08f04810,
9779 +        0x08f04810},
9780 +       {0x000081d0, 0x00003200, 0x00003200, 0x0000320a, 0x0000320a,
9781 +        0x0000320a},
9782 +       {0x00008318, 0x00000000, 0x00000000, 0x00006880, 0x00003440,
9783 +        0x00006880},
9784 +       {0x00009804, 0x00000000, 0x00000000, 0x000003c4, 0x00000300,
9785 +        0x00000303},
9786 +       {0x00009820, 0x00000000, 0x00000000, 0x02020200, 0x02020200,
9787 +        0x02020200},
9788 +       {0x00009824, 0x00000000, 0x00000000, 0x01000e0e, 0x01000e0e,
9789 +        0x01000e0e},
9790 +       {0x00009828, 0x00000000, 0x00000000, 0x0a020001, 0x0a020001,
9791 +        0x0a020001},
9792 +       {0x00009834, 0x00000000, 0x00000000, 0x00000e0e, 0x00000e0e,
9793 +        0x00000e0e},
9794 +       {0x00009838, 0x00000003, 0x00000003, 0x00000007, 0x00000007,
9795 +        0x00000007},
9796 +       {0x00009840, 0x206a002e, 0x206a002e, 0x206a012e, 0x206a012e,
9797 +        0x206a012e},
9798 +       {0x00009844, 0x03720000, 0x03720000, 0x037216a0, 0x037216a0,
9799 +        0x037216a0},
9800 +       {0x00009850, 0x60000000, 0x60000000, 0x6d4000e2, 0x6c4000e2,
9801 +        0x6c4000e2},
9802 +       {0x00009858, 0x7c000d00, 0x7c000d00, 0x7ec84d2e, 0x7ec84d2e,
9803 +        0x7ec84d2e},
9804 +       {0x0000985c, 0x3100005e, 0x3100005e, 0x3139605e, 0x31395d5e,
9805 +        0x31395d5e},
9806 +       {0x00009860, 0x00058d00, 0x00058d00, 0x00058d20, 0x00058d20,
9807 +        0x00058d18},
9808 +       {0x00009864, 0x00000e00, 0x00000e00, 0x0001ce00, 0x0001ce00,
9809 +        0x0001ce00},
9810 +       {0x00009868, 0x000040c0, 0x000040c0, 0x5ac640d0, 0x5ac640d0,
9811 +        0x5ac640d0},
9812 +       {0x0000986c, 0x00000080, 0x00000080, 0x06903881, 0x06903881,
9813 +        0x06903881},
9814 +       {0x00009914, 0x00000000, 0x00000000, 0x00001130, 0x00000898,
9815 +        0x000007d0},
9816 +       {0x00009918, 0x00000000, 0x00000000, 0x00000016, 0x0000000b,
9817 +        0x00000016},
9818 +       {0x00009924, 0xd00a8a01, 0xd00a8a01, 0xd00a8a0d, 0xd00a8a0d,
9819 +        0xd00a8a0d},
9820 +       {0x00009944, 0xefbc0000, 0xefbc0000, 0xefbc1010, 0xefbc1010,
9821 +        0xefbc1010},
9822 +       {0x00009960, 0x00000000, 0x00000000, 0x00000010, 0x00000010,
9823 +        0x00000010},
9824 +       {0x0000a960, 0x00000000, 0x00000000, 0x00000010, 0x00000010,
9825 +        0x00000010},
9826 +       {0x00009964, 0x00000000, 0x00000000, 0x00000210, 0x00000210,
9827 +        0x00000210},
9828 +       {0x0000c968, 0x00000200, 0x00000200, 0x000003ce, 0x000003ce,
9829 +        0x000003ce},
9830 +       {0x000099b8, 0x00000000, 0x00000000, 0x0000001c, 0x0000001c,
9831 +        0x0000001c},
9832 +       {0x000099bc, 0x00000000, 0x00000000, 0x00000c00, 0x00000c00,
9833 +        0x00000c00},
9834 +       {0x000099c0, 0x00000000, 0x00000000, 0x05eea6d4, 0x05eea6d4,
9835 +        0x05eea6d4},
9836 +       {0x0000a204, 0x00000440, 0x00000440, 0x00000444, 0x00000444,
9837 +        0x00000444},
9838 +       {0x0000a20c, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
9839 +        0x00000000},
9840 +       {0x0000b20c, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
9841 +        0x00000000},
9842 +       {0x0000a21c, 0x1803800a, 0x1803800a, 0x1883800a, 0x1883800a,
9843 +        0x1883800a},
9844 +       {0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108,
9845 +        0x00000000},
9846 +       {0x0000a250, 0x00000000, 0x00000000, 0x0004a000, 0x0004a000,
9847 +        0x0004a000},
9848 +       {0x0000a358, 0x7999aa02, 0x7999aa02, 0x7999aa0e, 0x7999aa0e,
9849 +        0x7999aa0e},
9850 +       {0x0000a3d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
9851 +        0x00000000},
9852 +};
9853 +
9854 +static const u_int32_t ar9287Common_9287_1_0[][2] = {
9855 +       {0x0000000c, 0x00000000},
9856 +       {0x00000030, 0x00020015},
9857 +       {0x00000034, 0x00000005},
9858 +       {0x00000040, 0x00000000},
9859 +       {0x00000044, 0x00000008},
9860 +       {0x00000048, 0x00000008},
9861 +       {0x0000004c, 0x00000010},
9862 +       {0x00000050, 0x00000000},
9863 +       {0x00000054, 0x0000001f},
9864 +       {0x00000800, 0x00000000},
9865 +       {0x00000804, 0x00000000},
9866 +       {0x00000808, 0x00000000},
9867 +       {0x0000080c, 0x00000000},
9868 +       {0x00000810, 0x00000000},
9869 +       {0x00000814, 0x00000000},
9870 +       {0x00000818, 0x00000000},
9871 +       {0x0000081c, 0x00000000},
9872 +       {0x00000820, 0x00000000},
9873 +       {0x00000824, 0x00000000},
9874 +       {0x00001040, 0x002ffc0f},
9875 +       {0x00001044, 0x002ffc0f},
9876 +       {0x00001048, 0x002ffc0f},
9877 +       {0x0000104c, 0x002ffc0f},
9878 +       {0x00001050, 0x002ffc0f},
9879 +       {0x00001054, 0x002ffc0f},
9880 +       {0x00001058, 0x002ffc0f},
9881 +       {0x0000105c, 0x002ffc0f},
9882 +       {0x00001060, 0x002ffc0f},
9883 +       {0x00001064, 0x002ffc0f},
9884 +       {0x00001230, 0x00000000},
9885 +       {0x00001270, 0x00000000},
9886 +       {0x00001038, 0x00000000},
9887 +       {0x00001078, 0x00000000},
9888 +       {0x000010b8, 0x00000000},
9889 +       {0x000010f8, 0x00000000},
9890 +       {0x00001138, 0x00000000},
9891 +       {0x00001178, 0x00000000},
9892 +       {0x000011b8, 0x00000000},
9893 +       {0x000011f8, 0x00000000},
9894 +       {0x00001238, 0x00000000},
9895 +       {0x00001278, 0x00000000},
9896 +       {0x000012b8, 0x00000000},
9897 +       {0x000012f8, 0x00000000},
9898 +       {0x00001338, 0x00000000},
9899 +       {0x00001378, 0x00000000},
9900 +       {0x000013b8, 0x00000000},
9901 +       {0x000013f8, 0x00000000},
9902 +       {0x00001438, 0x00000000},
9903 +       {0x00001478, 0x00000000},
9904 +       {0x000014b8, 0x00000000},
9905 +       {0x000014f8, 0x00000000},
9906 +       {0x00001538, 0x00000000},
9907 +       {0x00001578, 0x00000000},
9908 +       {0x000015b8, 0x00000000},
9909 +       {0x000015f8, 0x00000000},
9910 +       {0x00001638, 0x00000000},
9911 +       {0x00001678, 0x00000000},
9912 +       {0x000016b8, 0x00000000},
9913 +       {0x000016f8, 0x00000000},
9914 +       {0x00001738, 0x00000000},
9915 +       {0x00001778, 0x00000000},
9916 +       {0x000017b8, 0x00000000},
9917 +       {0x000017f8, 0x00000000},
9918 +       {0x0000103c, 0x00000000},
9919 +       {0x0000107c, 0x00000000},
9920 +       {0x000010bc, 0x00000000},
9921 +       {0x000010fc, 0x00000000},
9922 +       {0x0000113c, 0x00000000},
9923 +       {0x0000117c, 0x00000000},
9924 +       {0x000011bc, 0x00000000},
9925 +       {0x000011fc, 0x00000000},
9926 +       {0x0000123c, 0x00000000},
9927 +       {0x0000127c, 0x00000000},
9928 +       {0x000012bc, 0x00000000},
9929 +       {0x000012fc, 0x00000000},
9930 +       {0x0000133c, 0x00000000},
9931 +       {0x0000137c, 0x00000000},
9932 +       {0x000013bc, 0x00000000},
9933 +       {0x000013fc, 0x00000000},
9934 +       {0x0000143c, 0x00000000},
9935 +       {0x0000147c, 0x00000000},
9936 +       {0x00004030, 0x00000002},
9937 +       {0x0000403c, 0x00000002},
9938 +       {0x00004024, 0x0000001f},
9939 +       {0x00004060, 0x00000000},
9940 +       {0x00004064, 0x00000000},
9941 +       {0x00007010, 0x00000033},
9942 +       {0x00007020, 0x00000000},
9943 +       {0x00007034, 0x00000002},
9944 +       {0x00007038, 0x000004c2},
9945 +       {0x00008004, 0x00000000},
9946 +       {0x00008008, 0x00000000},
9947 +       {0x0000800c, 0x00000000},
9948 +       {0x00008018, 0x00000700},
9949 +       {0x00008020, 0x00000000},
9950 +       {0x00008038, 0x00000000},
9951 +       {0x0000803c, 0x00000000},
9952 +       {0x00008048, 0x40000000},
9953 +       {0x00008054, 0x00000000},
9954 +       {0x00008058, 0x00000000},
9955 +       {0x0000805c, 0x000fc78f},
9956 +       {0x00008060, 0x0000000f},
9957 +       {0x00008064, 0x00000000},
9958 +       {0x00008070, 0x00000000},
9959 +       {0x000080c0, 0x2a80001a},
9960 +       {0x000080c4, 0x05dc01e0},
9961 +       {0x000080c8, 0x1f402710},
9962 +       {0x000080cc, 0x01f40000},
9963 +       {0x000080d0, 0x00001e00},
9964 +       {0x000080d4, 0x00000000},
9965 +       {0x000080d8, 0x00400000},
9966 +       {0x000080e0, 0xffffffff},
9967 +       {0x000080e4, 0x0000ffff},
9968 +       {0x000080e8, 0x003f3f3f},
9969 +       {0x000080ec, 0x00000000},
9970 +       {0x000080f0, 0x00000000},
9971 +       {0x000080f4, 0x00000000},
9972 +       {0x000080f8, 0x00000000},
9973 +       {0x000080fc, 0x00020000},
9974 +       {0x00008100, 0x00020000},
9975 +       {0x00008104, 0x00000001},
9976 +       {0x00008108, 0x00000052},
9977 +       {0x0000810c, 0x00000000},
9978 +       {0x00008110, 0x00000168},
9979 +       {0x00008118, 0x000100aa},
9980 +       {0x0000811c, 0x00003210},
9981 +       {0x00008124, 0x00000000},
9982 +       {0x00008128, 0x00000000},
9983 +       {0x0000812c, 0x00000000},
9984 +       {0x00008130, 0x00000000},
9985 +       {0x00008134, 0x00000000},
9986 +       {0x00008138, 0x00000000},
9987 +       {0x0000813c, 0x00000000},
9988 +       {0x00008144, 0xffffffff},
9989 +       {0x00008168, 0x00000000},
9990 +       {0x0000816c, 0x00000000},
9991 +       {0x00008170, 0x18487320},
9992 +       {0x00008174, 0xfaa4fa50},
9993 +       {0x00008178, 0x00000100},
9994 +       {0x0000817c, 0x00000000},
9995 +       {0x000081c0, 0x00000000},
9996 +       {0x000081c4, 0x00000000},
9997 +       {0x000081d4, 0x00000000},
9998 +       {0x000081ec, 0x00000000},
9999 +       {0x000081f0, 0x00000000},
10000 +       {0x000081f4, 0x00000000},
10001 +       {0x000081f8, 0x00000000},
10002 +       {0x000081fc, 0x00000000},
10003 +       {0x00008200, 0x00000000},
10004 +       {0x00008204, 0x00000000},
10005 +       {0x00008208, 0x00000000},
10006 +       {0x0000820c, 0x00000000},
10007 +       {0x00008210, 0x00000000},
10008 +       {0x00008214, 0x00000000},
10009 +       {0x00008218, 0x00000000},
10010 +       {0x0000821c, 0x00000000},
10011 +       {0x00008220, 0x00000000},
10012 +       {0x00008224, 0x00000000},
10013 +       {0x00008228, 0x00000000},
10014 +       {0x0000822c, 0x00000000},
10015 +       {0x00008230, 0x00000000},
10016 +       {0x00008234, 0x00000000},
10017 +       {0x00008238, 0x00000000},
10018 +       {0x0000823c, 0x00000000},
10019 +       {0x00008240, 0x00100000},
10020 +       {0x00008244, 0x0010f400},
10021 +       {0x00008248, 0x00000100},
10022 +       {0x0000824c, 0x0001e800},
10023 +       {0x00008250, 0x00000000},
10024 +       {0x00008254, 0x00000000},
10025 +       {0x00008258, 0x00000000},
10026 +       {0x0000825c, 0x400000ff},
10027 +       {0x00008260, 0x00080922},
10028 +       {0x00008264, 0xa8a00010},
10029 +       {0x00008270, 0x00000000},
10030 +       {0x00008274, 0x40000000},
10031 +       {0x00008278, 0x003e4180},
10032 +       {0x0000827c, 0x00000000},
10033 +       {0x00008284, 0x0000002c},
10034 +       {0x00008288, 0x0000002c},
10035 +       {0x0000828c, 0x000000ff},
10036 +       {0x00008294, 0x00000000},
10037 +       {0x00008298, 0x00000000},
10038 +       {0x0000829c, 0x00000000},
10039 +       {0x00008300, 0x00000040},
10040 +       {0x00008314, 0x00000000},
10041 +       {0x00008328, 0x00000000},
10042 +       {0x0000832c, 0x00000007},
10043 +       {0x00008330, 0x00000302},
10044 +       {0x00008334, 0x00000e00},
10045 +       {0x00008338, 0x00ff0000},
10046 +       {0x0000833c, 0x00000000},
10047 +       {0x00008340, 0x000107ff},
10048 +       {0x00008344, 0x01c81043},
10049 +       {0x00008360, 0xffffffff},
10050 +       {0x00008364, 0xffffffff},
10051 +       {0x00008368, 0x00000000},
10052 +       {0x00008370, 0x00000000},
10053 +       {0x00008374, 0x000000ff},
10054 +       {0x00008378, 0x00000000},
10055 +       {0x0000837c, 0x00000000},
10056 +       {0x00008380, 0xffffffff},
10057 +       {0x00008384, 0xffffffff},
10058 +       {0x00008390, 0x0fffffff},
10059 +       {0x00008394, 0x0fffffff},
10060 +       {0x00008398, 0x00000000},
10061 +       {0x0000839c, 0x00000000},
10062 +       {0x000083a0, 0x00000000},
10063 +       {0x00009808, 0x00000000},
10064 +       {0x0000980c, 0xafe68e30},
10065 +       {0x00009810, 0xfd14e000},
10066 +       {0x00009814, 0x9c0a9f6b},
10067 +       {0x0000981c, 0x00000000},
10068 +       {0x0000982c, 0x0000a000},
10069 +       {0x00009830, 0x00000000},
10070 +       {0x0000983c, 0x00200400},
10071 +       {0x0000984c, 0x0040233c},
10072 +       {0x0000a84c, 0x0040233c},
10073 +       {0x00009854, 0x00000044},
10074 +       {0x00009900, 0x00000000},
10075 +       {0x00009904, 0x00000000},
10076 +       {0x00009908, 0x00000000},
10077 +       {0x0000990c, 0x00000000},
10078 +       {0x00009910, 0x10002310},
10079 +       {0x0000991c, 0x10000fff},
10080 +       {0x00009920, 0x04900000},
10081 +       {0x0000a920, 0x04900000},
10082 +       {0x00009928, 0x00000001},
10083 +       {0x0000992c, 0x00000004},
10084 +       {0x00009930, 0x00000000},
10085 +       {0x0000a930, 0x00000000},
10086 +       {0x00009934, 0x1e1f2022},
10087 +       {0x00009938, 0x0a0b0c0d},
10088 +       {0x0000993c, 0x00000000},
10089 +       {0x00009948, 0x9280c00a},
10090 +       {0x0000994c, 0x00020028},
10091 +       {0x00009954, 0x5f3ca3de},
10092 +       {0x00009958, 0x0108ecff},
10093 +       {0x00009940, 0x14750604},
10094 +       {0x0000c95c, 0x004b6a8e},
10095 +       {0x00009970, 0x990bb515},
10096 +       {0x00009974, 0x00000000},
10097 +       {0x00009978, 0x00000001},
10098 +       {0x0000997c, 0x00000000},
10099 +       {0x000099a0, 0x00000000},
10100 +       {0x000099a4, 0x00000001},
10101 +       {0x000099a8, 0x201fff00},
10102 +       {0x000099ac, 0x0c6f0000},
10103 +       {0x000099b0, 0x03051000},
10104 +       {0x000099b4, 0x00000820},
10105 +       {0x000099c4, 0x06336f77},
10106 +       {0x000099c8, 0x6af65329},
10107 +       {0x000099cc, 0x08f186c8},
10108 +       {0x000099d0, 0x00046384},
10109 +       {0x000099dc, 0x00000000},
10110 +       {0x000099e0, 0x00000000},
10111 +       {0x000099e4, 0xaaaaaaaa},
10112 +       {0x000099e8, 0x3c466478},
10113 +       {0x000099ec, 0x0cc80caa},
10114 +       {0x000099f0, 0x00000000},
10115 +       {0x000099fc, 0x00001042},
10116 +       {0x0000a1f4, 0x00fffeff},
10117 +       {0x0000a1f8, 0x00f5f9ff},
10118 +       {0x0000a1fc, 0xb79f6427},
10119 +       {0x0000a208, 0x803e4788},
10120 +       {0x0000a210, 0x4080a333},
10121 +       {0x0000a214, 0x40206c10},
10122 +       {0x0000a218, 0x009c4060},
10123 +       {0x0000a220, 0x01834061},
10124 +       {0x0000a224, 0x00000400},
10125 +       {0x0000a228, 0x000003b5},
10126 +       {0x0000a22c, 0x233f7180},
10127 +       {0x0000a234, 0x20202020},
10128 +       {0x0000a238, 0x20202020},
10129 +       {0x0000a23c, 0x13c889af},
10130 +       {0x0000a240, 0x38490a20},
10131 +       {0x0000a244, 0x00000000},
10132 +       {0x0000a248, 0xfffffffc},
10133 +       {0x0000a24c, 0x00000000},
10134 +       {0x0000a254, 0x00000000},
10135 +       {0x0000a258, 0x0cdbd380},
10136 +       {0x0000a25c, 0x0f0f0f01},
10137 +       {0x0000a260, 0xdfa91f01},
10138 +       {0x0000a264, 0x00418a11},
10139 +       {0x0000b264, 0x00418a11},
10140 +       {0x0000a268, 0x00000000},
10141 +       {0x0000a26c, 0x0e79e5c6},
10142 +       {0x0000b26c, 0x0e79e5c6},
10143 +       {0x0000d270, 0x00820820},
10144 +       {0x0000a278, 0x1ce739ce},
10145 +       {0x0000a27c, 0x050701ce},
10146 +       {0x0000d35c, 0x07ffffef},
10147 +       {0x0000d360, 0x0fffffe7},
10148 +       {0x0000d364, 0x17ffffe5},
10149 +       {0x0000d368, 0x1fffffe4},
10150 +       {0x0000d36c, 0x37ffffe3},
10151 +       {0x0000d370, 0x3fffffe3},
10152 +       {0x0000d374, 0x57ffffe3},
10153 +       {0x0000d378, 0x5fffffe2},
10154 +       {0x0000d37c, 0x7fffffe2},
10155 +       {0x0000d380, 0x7f3c7bba},
10156 +       {0x0000d384, 0xf3307ff0},
10157 +       {0x0000a388, 0x0c000000},
10158 +       {0x0000a38c, 0x20202020},
10159 +       {0x0000a390, 0x20202020},
10160 +       {0x0000a394, 0x1ce739ce},
10161 +       {0x0000a398, 0x000001ce},
10162 +       {0x0000b398, 0x000001ce},
10163 +       {0x0000a39c, 0x00000001},
10164 +       {0x0000a3c8, 0x00000246},
10165 +       {0x0000a3cc, 0x20202020},
10166 +       {0x0000a3d0, 0x20202020},
10167 +       {0x0000a3d4, 0x20202020},
10168 +       {0x0000a3dc, 0x1ce739ce},
10169 +       {0x0000a3e0, 0x000001ce},
10170 +       {0x0000a3e4, 0x00000000},
10171 +       {0x0000a3e8, 0x18c43433},
10172 +       {0x0000a3ec, 0x00f70081},
10173 +       {0x0000a3f0, 0x01036a1e},
10174 +       {0x0000a3f4, 0x00000000},
10175 +       {0x0000b3f4, 0x00000000},
10176 +       {0x0000a7d8, 0x00000001},
10177 +       {0x00007800, 0x00000800},
10178 +       {0x00007804, 0x6c35ffb0},
10179 +       {0x00007808, 0x6db6c000},
10180 +       {0x0000780c, 0x6db6cb30},
10181 +       {0x00007810, 0x6db6cb6c},
10182 +       {0x00007814, 0x0501e200},
10183 +       {0x00007818, 0x0094128d},
10184 +       {0x0000781c, 0x976ee392},
10185 +       {0x00007820, 0xf75ff6fc},
10186 +       {0x00007824, 0x00040000},
10187 +       {0x00007828, 0xdb003012},
10188 +       {0x0000782c, 0x04924914},
10189 +       {0x00007830, 0x21084210},
10190 +       {0x00007834, 0x00140000},
10191 +       {0x00007838, 0x0e4548d8},
10192 +       {0x0000783c, 0x54214514},
10193 +       {0x00007840, 0x02025820},
10194 +       {0x00007844, 0x71c0d388},
10195 +       {0x00007848, 0x934934a8},
10196 +       {0x00007850, 0x00000000},
10197 +       {0x00007854, 0x00000800},
10198 +       {0x00007858, 0x6c35ffb0},
10199 +       {0x0000785c, 0x6db6c000},
10200 +       {0x00007860, 0x6db6cb2c},
10201 +       {0x00007864, 0x6db6cb6c},
10202 +       {0x00007868, 0x0501e200},
10203 +       {0x0000786c, 0x0094128d},
10204 +       {0x00007870, 0x976ee392},
10205 +       {0x00007874, 0xf75ff6fc},
10206 +       {0x00007878, 0x00040000},
10207 +       {0x0000787c, 0xdb003012},
10208 +       {0x00007880, 0x04924914},
10209 +       {0x00007884, 0x21084210},
10210 +       {0x00007888, 0x001b6db0},
10211 +       {0x0000788c, 0x00376b63},
10212 +       {0x00007890, 0x06db6db6},
10213 +       {0x00007894, 0x006d8000},
10214 +       {0x00007898, 0x48100000},
10215 +       {0x0000789c, 0x00000000},
10216 +       {0x000078a0, 0x08000000},
10217 +       {0x000078a4, 0x0007ffd8},
10218 +       {0x000078a8, 0x0007ffd8},
10219 +       {0x000078ac, 0x001c0020},
10220 +       {0x000078b0, 0x000611eb},
10221 +       {0x000078b4, 0x40008080},
10222 +       {0x000078b8, 0x2a850160},
10223 +};
10224 +
10225 +static const u_int32_t ar9287Modes_tx_gain_9287_1_0[][6] = {
10226 +       /* Address      5G-HT20     5G-HT40     2G-HT40     2G-HT20     Turbo   */
10227 +       {0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
10228 +        0x00000000},
10229 +       {0x0000a304, 0x00000000, 0x00000000, 0x00004002, 0x00004002,
10230 +        0x00004002},
10231 +       {0x0000a308, 0x00000000, 0x00000000, 0x00008004, 0x00008004,
10232 +        0x00008004},
10233 +       {0x0000a30c, 0x00000000, 0x00000000, 0x0000c00a, 0x0000c00a,
10234 +        0x0000c00a},
10235 +       {0x0000a310, 0x00000000, 0x00000000, 0x0001000c, 0x0001000c,
10236 +        0x0001000c},
10237 +       {0x0000a314, 0x00000000, 0x00000000, 0x0001420b, 0x0001420b,
10238 +        0x0001420b},
10239 +       {0x0000a318, 0x00000000, 0x00000000, 0x0001824a, 0x0001824a,
10240 +        0x0001824a},
10241 +       {0x0000a31c, 0x00000000, 0x00000000, 0x0001c44a, 0x0001c44a,
10242 +        0x0001c44a},
10243 +       {0x0000a320, 0x00000000, 0x00000000, 0x0002064a, 0x0002064a,
10244 +        0x0002064a},
10245 +       {0x0000a324, 0x00000000, 0x00000000, 0x0002484a, 0x0002484a,
10246 +        0x0002484a},
10247 +       {0x0000a328, 0x00000000, 0x00000000, 0x00028a4a, 0x00028a4a,
10248 +        0x00028a4a},
10249 +       {0x0000a32c, 0x00000000, 0x00000000, 0x0002cc4a, 0x0002cc4a,
10250 +        0x0002cc4a},
10251 +       {0x0000a330, 0x00000000, 0x00000000, 0x00030e4a, 0x00030e4a,
10252 +        0x00030e4a},
10253 +       {0x0000a334, 0x00000000, 0x00000000, 0x00034e8a, 0x00034e8a,
10254 +        0x00034e8a},
10255 +       {0x0000a338, 0x00000000, 0x00000000, 0x00038e8c, 0x00038e8c,
10256 +        0x00038e8c},
10257 +       {0x0000a33c, 0x00000000, 0x00000000, 0x0003cecc, 0x0003cecc,
10258 +        0x0003cecc},
10259 +       {0x0000a340, 0x00000000, 0x00000000, 0x00040ed4, 0x00040ed4,
10260 +        0x00040ed4},
10261 +       {0x0000a344, 0x00000000, 0x00000000, 0x00044edc, 0x00044edc,
10262 +        0x00044edc},
10263 +       {0x0000a348, 0x00000000, 0x00000000, 0x00048ede, 0x00048ede,
10264 +        0x00048ede},
10265 +       {0x0000a34c, 0x00000000, 0x00000000, 0x0004cf1e, 0x0004cf1e,
10266 +        0x0004cf1e},
10267 +       {0x0000a350, 0x00000000, 0x00000000, 0x00050f5e, 0x00050f5e,
10268 +        0x00050f5e},
10269 +       {0x0000a354, 0x00000000, 0x00000000, 0x00054f9e, 0x00054f9e,
10270 +        0x00054f9e},
10271 +       {0x0000a780, 0x00000000, 0x00000000, 0x00000060, 0x00000060,
10272 +        0x00000060},
10273 +       {0x0000a784, 0x00000000, 0x00000000, 0x00004062, 0x00004062,
10274 +        0x00004062},
10275 +       {0x0000a788, 0x00000000, 0x00000000, 0x00008064, 0x00008064,
10276 +        0x00008064},
10277 +       {0x0000a78c, 0x00000000, 0x00000000, 0x0000c0a4, 0x0000c0a4,
10278 +        0x0000c0a4},
10279 +       {0x0000a790, 0x00000000, 0x00000000, 0x000100b0, 0x000100b0,
10280 +        0x000100b0},
10281 +       {0x0000a794, 0x00000000, 0x00000000, 0x000140b2, 0x000140b2,
10282 +        0x000140b2},
10283 +       {0x0000a798, 0x00000000, 0x00000000, 0x000180b4, 0x000180b4,
10284 +        0x000180b4},
10285 +       {0x0000a79c, 0x00000000, 0x00000000, 0x0001c0f4, 0x0001c0f4,
10286 +        0x0001c0f4},
10287 +       {0x0000a7a0, 0x00000000, 0x00000000, 0x00020134, 0x00020134,
10288 +        0x00020134},
10289 +       {0x0000a7a4, 0x00000000, 0x00000000, 0x000240fe, 0x000240fe,
10290 +        0x000240fe},
10291 +       {0x0000a7a8, 0x00000000, 0x00000000, 0x0002813e, 0x0002813e,
10292 +        0x0002813e},
10293 +       {0x0000a7ac, 0x00000000, 0x00000000, 0x0002c17e, 0x0002c17e,
10294 +        0x0002c17e},
10295 +       {0x0000a7b0, 0x00000000, 0x00000000, 0x000301be, 0x000301be,
10296 +        0x000301be},
10297 +       {0x0000a7b4, 0x00000000, 0x00000000, 0x000341fe, 0x000341fe,
10298 +        0x000341fe},
10299 +       {0x0000a7b8, 0x00000000, 0x00000000, 0x000341fe, 0x000341fe,
10300 +        0x000341fe},
10301 +       {0x0000a7bc, 0x00000000, 0x00000000, 0x000341fe, 0x000341fe,
10302 +        0x000341fe},
10303 +       {0x0000a7c0, 0x00000000, 0x00000000, 0x000341fe, 0x000341fe,
10304 +        0x000341fe},
10305 +       {0x0000a7c4, 0x00000000, 0x00000000, 0x000341fe, 0x000341fe,
10306 +        0x000341fe},
10307 +       {0x0000a7c8, 0x00000000, 0x00000000, 0x000341fe, 0x000341fe,
10308 +        0x000341fe},
10309 +       {0x0000a7cc, 0x00000000, 0x00000000, 0x000341fe, 0x000341fe,
10310 +        0x000341fe},
10311 +       {0x0000a7d0, 0x00000000, 0x00000000, 0x000341fe, 0x000341fe,
10312 +        0x000341fe},
10313 +       {0x0000a7d4, 0x00000000, 0x00000000, 0x000341fe, 0x000341fe,
10314 +        0x000341fe},
10315 +       {0x0000a274, 0x0a180000, 0x0a180000, 0x0a1aa000, 0x0a1aa000,
10316 +        0x0a1aa000},
10317 +};
10318 +
10319 +static const u_int32_t ar9287Modes_rx_gain_9287_1_0[][6] = {
10320 +       /* Address      5G-HT20     5G-HT40     2G-HT40     2G-HT20     Turbo   */
10321 +       {0x00009a00, 0x00000000, 0x00000000, 0x0000a120, 0x0000a120,
10322 +        0x0000a120},
10323 +       {0x00009a04, 0x00000000, 0x00000000, 0x0000a124, 0x0000a124,
10324 +        0x0000a124},
10325 +       {0x00009a08, 0x00000000, 0x00000000, 0x0000a128, 0x0000a128,
10326 +        0x0000a128},
10327 +       {0x00009a0c, 0x00000000, 0x00000000, 0x0000a12c, 0x0000a12c,
10328 +        0x0000a12c},
10329 +       {0x00009a10, 0x00000000, 0x00000000, 0x0000a130, 0x0000a130,
10330 +        0x0000a130},
10331 +       {0x00009a14, 0x00000000, 0x00000000, 0x0000a194, 0x0000a194,
10332 +        0x0000a194},
10333 +       {0x00009a18, 0x00000000, 0x00000000, 0x0000a198, 0x0000a198,
10334 +        0x0000a198},
10335 +       {0x00009a1c, 0x00000000, 0x00000000, 0x0000a20c, 0x0000a20c,
10336 +        0x0000a20c},
10337 +       {0x00009a20, 0x00000000, 0x00000000, 0x0000a210, 0x0000a210,
10338 +        0x0000a210},
10339 +       {0x00009a24, 0x00000000, 0x00000000, 0x0000a284, 0x0000a284,
10340 +        0x0000a284},
10341 +       {0x00009a28, 0x00000000, 0x00000000, 0x0000a288, 0x0000a288,
10342 +        0x0000a288},
10343 +       {0x00009a2c, 0x00000000, 0x00000000, 0x0000a28c, 0x0000a28c,
10344 +        0x0000a28c},
10345 +       {0x00009a30, 0x00000000, 0x00000000, 0x0000a290, 0x0000a290,
10346 +        0x0000a290},
10347 +       {0x00009a34, 0x00000000, 0x00000000, 0x0000a294, 0x0000a294,
10348 +        0x0000a294},
10349 +       {0x00009a38, 0x00000000, 0x00000000, 0x0000a2a0, 0x0000a2a0,
10350 +        0x0000a2a0},
10351 +       {0x00009a3c, 0x00000000, 0x00000000, 0x0000a2a4, 0x0000a2a4,
10352 +        0x0000a2a4},
10353 +       {0x00009a40, 0x00000000, 0x00000000, 0x0000a2a8, 0x0000a2a8,
10354 +        0x0000a2a8},
10355 +       {0x00009a44, 0x00000000, 0x00000000, 0x0000a2ac, 0x0000a2ac,
10356 +        0x0000a2ac},
10357 +       {0x00009a48, 0x00000000, 0x00000000, 0x0000a2b0, 0x0000a2b0,
10358 +        0x0000a2b0},
10359 +       {0x00009a4c, 0x00000000, 0x00000000, 0x0000a2b4, 0x0000a2b4,
10360 +        0x0000a2b4},
10361 +       {0x00009a50, 0x00000000, 0x00000000, 0x0000a2b8, 0x0000a2b8,
10362 +        0x0000a2b8},
10363 +       {0x00009a54, 0x00000000, 0x00000000, 0x0000a2c4, 0x0000a2c4,
10364 +        0x0000a2c4},
10365 +       {0x00009a58, 0x00000000, 0x00000000, 0x0000a708, 0x0000a708,
10366 +        0x0000a708},
10367 +       {0x00009a5c, 0x00000000, 0x00000000, 0x0000a70c, 0x0000a70c,
10368 +        0x0000a70c},
10369 +       {0x00009a60, 0x00000000, 0x00000000, 0x0000a710, 0x0000a710,
10370 +        0x0000a710},
10371 +       {0x00009a64, 0x00000000, 0x00000000, 0x0000ab04, 0x0000ab04,
10372 +        0x0000ab04},
10373 +       {0x00009a68, 0x00000000, 0x00000000, 0x0000ab08, 0x0000ab08,
10374 +        0x0000ab08},
10375 +       {0x00009a6c, 0x00000000, 0x00000000, 0x0000ab0c, 0x0000ab0c,
10376 +        0x0000ab0c},
10377 +       {0x00009a70, 0x00000000, 0x00000000, 0x0000ab10, 0x0000ab10,
10378 +        0x0000ab10},
10379 +       {0x00009a74, 0x00000000, 0x00000000, 0x0000ab14, 0x0000ab14,
10380 +        0x0000ab14},
10381 +       {0x00009a78, 0x00000000, 0x00000000, 0x0000ab18, 0x0000ab18,
10382 +        0x0000ab18},
10383 +       {0x00009a7c, 0x00000000, 0x00000000, 0x0000ab8c, 0x0000ab8c,
10384 +        0x0000ab8c},
10385 +       {0x00009a80, 0x00000000, 0x00000000, 0x0000ab90, 0x0000ab90,
10386 +        0x0000ab90},
10387 +       {0x00009a84, 0x00000000, 0x00000000, 0x0000ab94, 0x0000ab94,
10388 +        0x0000ab94},
10389 +       {0x00009a88, 0x00000000, 0x00000000, 0x0000ab98, 0x0000ab98,
10390 +        0x0000ab98},
10391 +       {0x00009a8c, 0x00000000, 0x00000000, 0x0000aba4, 0x0000aba4,
10392 +        0x0000aba4},
10393 +       {0x00009a90, 0x00000000, 0x00000000, 0x0000aba8, 0x0000aba8,
10394 +        0x0000aba8},
10395 +       {0x00009a94, 0x00000000, 0x00000000, 0x0000cb04, 0x0000cb04,
10396 +        0x0000cb04},
10397 +       {0x00009a98, 0x00000000, 0x00000000, 0x0000cb08, 0x0000cb08,
10398 +        0x0000cb08},
10399 +       {0x00009a9c, 0x00000000, 0x00000000, 0x0000cb0c, 0x0000cb0c,
10400 +        0x0000cb0c},
10401 +       {0x00009aa0, 0x00000000, 0x00000000, 0x0000cb10, 0x0000cb10,
10402 +        0x0000cb10},
10403 +       {0x00009aa4, 0x00000000, 0x00000000, 0x0000cb14, 0x0000cb14,
10404 +        0x0000cb14},
10405 +       {0x00009aa8, 0x00000000, 0x00000000, 0x0000cb18, 0x0000cb18,
10406 +        0x0000cb18},
10407 +       {0x00009aac, 0x00000000, 0x00000000, 0x0000cb8c, 0x0000cb8c,
10408 +        0x0000cb8c},
10409 +       {0x00009ab0, 0x00000000, 0x00000000, 0x0000cb90, 0x0000cb90,
10410 +        0x0000cb90},
10411 +       {0x00009ab4, 0x00000000, 0x00000000, 0x0000cf18, 0x0000cf18,
10412 +        0x0000cf18},
10413 +       {0x00009ab8, 0x00000000, 0x00000000, 0x0000cf24, 0x0000cf24,
10414 +        0x0000cf24},
10415 +       {0x00009abc, 0x00000000, 0x00000000, 0x0000cf28, 0x0000cf28,
10416 +        0x0000cf28},
10417 +       {0x00009ac0, 0x00000000, 0x00000000, 0x0000d314, 0x0000d314,
10418 +        0x0000d314},
10419 +       {0x00009ac4, 0x00000000, 0x00000000, 0x0000d318, 0x0000d318,
10420 +        0x0000d318},
10421 +       {0x00009ac8, 0x00000000, 0x00000000, 0x0000d38c, 0x0000d38c,
10422 +        0x0000d38c},
10423 +       {0x00009acc, 0x00000000, 0x00000000, 0x0000d390, 0x0000d390,
10424 +        0x0000d390},
10425 +       {0x00009ad0, 0x00000000, 0x00000000, 0x0000d394, 0x0000d394,
10426 +        0x0000d394},
10427 +       {0x00009ad4, 0x00000000, 0x00000000, 0x0000d398, 0x0000d398,
10428 +        0x0000d398},
10429 +       {0x00009ad8, 0x00000000, 0x00000000, 0x0000d3a4, 0x0000d3a4,
10430 +        0x0000d3a4},
10431 +       {0x00009adc, 0x00000000, 0x00000000, 0x0000d3a8, 0x0000d3a8,
10432 +        0x0000d3a8},
10433 +       {0x00009ae0, 0x00000000, 0x00000000, 0x0000d3ac, 0x0000d3ac,
10434 +        0x0000d3ac},
10435 +       {0x00009ae4, 0x00000000, 0x00000000, 0x0000d3b0, 0x0000d3b0,
10436 +        0x0000d3b0},
10437 +       {0x00009ae8, 0x00000000, 0x00000000, 0x0000f380, 0x0000f380,
10438 +        0x0000f380},
10439 +       {0x00009aec, 0x00000000, 0x00000000, 0x0000f384, 0x0000f384,
10440 +        0x0000f384},
10441 +       {0x00009af0, 0x00000000, 0x00000000, 0x0000f388, 0x0000f388,
10442 +        0x0000f388},
10443 +       {0x00009af4, 0x00000000, 0x00000000, 0x0000f710, 0x0000f710,
10444 +        0x0000f710},
10445 +       {0x00009af8, 0x00000000, 0x00000000, 0x0000f714, 0x0000f714,
10446 +        0x0000f714},
10447 +       {0x00009afc, 0x00000000, 0x00000000, 0x0000f718, 0x0000f718,
10448 +        0x0000f718},
10449 +       {0x00009b00, 0x00000000, 0x00000000, 0x0000fb10, 0x0000fb10,
10450 +        0x0000fb10},
10451 +       {0x00009b04, 0x00000000, 0x00000000, 0x0000fb14, 0x0000fb14,
10452 +        0x0000fb14},
10453 +       {0x00009b08, 0x00000000, 0x00000000, 0x0000fb18, 0x0000fb18,
10454 +        0x0000fb18},
10455 +       {0x00009b0c, 0x00000000, 0x00000000, 0x0000fb8c, 0x0000fb8c,
10456 +        0x0000fb8c},
10457 +       {0x00009b10, 0x00000000, 0x00000000, 0x0000fb90, 0x0000fb90,
10458 +        0x0000fb90},
10459 +       {0x00009b14, 0x00000000, 0x00000000, 0x0000fb94, 0x0000fb94,
10460 +        0x0000fb94},
10461 +       {0x00009b18, 0x00000000, 0x00000000, 0x0000ff8c, 0x0000ff8c,
10462 +        0x0000ff8c},
10463 +       {0x00009b1c, 0x00000000, 0x00000000, 0x0000ff90, 0x0000ff90,
10464 +        0x0000ff90},
10465 +       {0x00009b20, 0x00000000, 0x00000000, 0x0000ff94, 0x0000ff94,
10466 +        0x0000ff94},
10467 +       {0x00009b24, 0x00000000, 0x00000000, 0x0000ffa0, 0x0000ffa0,
10468 +        0x0000ffa0},
10469 +       {0x00009b28, 0x00000000, 0x00000000, 0x0000ffa4, 0x0000ffa4,
10470 +        0x0000ffa4},
10471 +       {0x00009b2c, 0x00000000, 0x00000000, 0x0000ffa8, 0x0000ffa8,
10472 +        0x0000ffa8},
10473 +       {0x00009b30, 0x00000000, 0x00000000, 0x0000ffac, 0x0000ffac,
10474 +        0x0000ffac},
10475 +       {0x00009b34, 0x00000000, 0x00000000, 0x0000ffb0, 0x0000ffb0,
10476 +        0x0000ffb0},
10477 +       {0x00009b38, 0x00000000, 0x00000000, 0x0000ffb4, 0x0000ffb4,
10478 +        0x0000ffb4},
10479 +       {0x00009b3c, 0x00000000, 0x00000000, 0x0000ffa1, 0x0000ffa1,
10480 +        0x0000ffa1},
10481 +       {0x00009b40, 0x00000000, 0x00000000, 0x0000ffa5, 0x0000ffa5,
10482 +        0x0000ffa5},
10483 +       {0x00009b44, 0x00000000, 0x00000000, 0x0000ffa9, 0x0000ffa9,
10484 +        0x0000ffa9},
10485 +       {0x00009b48, 0x00000000, 0x00000000, 0x0000ffad, 0x0000ffad,
10486 +        0x0000ffad},
10487 +       {0x00009b4c, 0x00000000, 0x00000000, 0x0000ffb1, 0x0000ffb1,
10488 +        0x0000ffb1},
10489 +       {0x00009b50, 0x00000000, 0x00000000, 0x0000ffb5, 0x0000ffb5,
10490 +        0x0000ffb5},
10491 +       {0x00009b54, 0x00000000, 0x00000000, 0x0000ffb9, 0x0000ffb9,
10492 +        0x0000ffb9},
10493 +       {0x00009b58, 0x00000000, 0x00000000, 0x0000ffc5, 0x0000ffc5,
10494 +        0x0000ffc5},
10495 +       {0x00009b5c, 0x00000000, 0x00000000, 0x0000ffc9, 0x0000ffc9,
10496 +        0x0000ffc9},
10497 +       {0x00009b60, 0x00000000, 0x00000000, 0x0000ffcd, 0x0000ffcd,
10498 +        0x0000ffcd},
10499 +       {0x00009b64, 0x00000000, 0x00000000, 0x0000ffd1, 0x0000ffd1,
10500 +        0x0000ffd1},
10501 +       {0x00009b68, 0x00000000, 0x00000000, 0x0000ffd5, 0x0000ffd5,
10502 +        0x0000ffd5},
10503 +       {0x00009b6c, 0x00000000, 0x00000000, 0x0000ffc2, 0x0000ffc2,
10504 +        0x0000ffc2},
10505 +       {0x00009b70, 0x00000000, 0x00000000, 0x0000ffc6, 0x0000ffc6,
10506 +        0x0000ffc6},
10507 +       {0x00009b74, 0x00000000, 0x00000000, 0x0000ffca, 0x0000ffca,
10508 +        0x0000ffca},
10509 +       {0x00009b78, 0x00000000, 0x00000000, 0x0000ffce, 0x0000ffce,
10510 +        0x0000ffce},
10511 +       {0x00009b7c, 0x00000000, 0x00000000, 0x0000ffd2, 0x0000ffd2,
10512 +        0x0000ffd2},
10513 +       {0x00009b80, 0x00000000, 0x00000000, 0x0000ffd6, 0x0000ffd6,
10514 +        0x0000ffd6},
10515 +       {0x00009b84, 0x00000000, 0x00000000, 0x0000ffda, 0x0000ffda,
10516 +        0x0000ffda},
10517 +       {0x00009b88, 0x00000000, 0x00000000, 0x0000ffc7, 0x0000ffc7,
10518 +        0x0000ffc7},
10519 +       {0x00009b8c, 0x00000000, 0x00000000, 0x0000ffcb, 0x0000ffcb,
10520 +        0x0000ffcb},
10521 +       {0x00009b90, 0x00000000, 0x00000000, 0x0000ffcf, 0x0000ffcf,
10522 +        0x0000ffcf},
10523 +       {0x00009b94, 0x00000000, 0x00000000, 0x0000ffd3, 0x0000ffd3,
10524 +        0x0000ffd3},
10525 +       {0x00009b98, 0x00000000, 0x00000000, 0x0000ffd7, 0x0000ffd7,
10526 +        0x0000ffd7},
10527 +       {0x00009b9c, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10528 +        0x0000ffdb},
10529 +       {0x00009ba0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10530 +        0x0000ffdb},
10531 +       {0x00009ba4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10532 +        0x0000ffdb},
10533 +       {0x00009ba8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10534 +        0x0000ffdb},
10535 +       {0x00009bac, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10536 +        0x0000ffdb},
10537 +       {0x00009bb0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10538 +        0x0000ffdb},
10539 +       {0x00009bb4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10540 +        0x0000ffdb},
10541 +       {0x00009bb8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10542 +        0x0000ffdb},
10543 +       {0x00009bbc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10544 +        0x0000ffdb},
10545 +       {0x00009bc0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10546 +        0x0000ffdb},
10547 +       {0x00009bc4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10548 +        0x0000ffdb},
10549 +       {0x00009bc8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10550 +        0x0000ffdb},
10551 +       {0x00009bcc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10552 +        0x0000ffdb},
10553 +       {0x00009bd0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10554 +        0x0000ffdb},
10555 +       {0x00009bd4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10556 +        0x0000ffdb},
10557 +       {0x00009bd8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10558 +        0x0000ffdb},
10559 +       {0x00009bdc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10560 +        0x0000ffdb},
10561 +       {0x00009be0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10562 +        0x0000ffdb},
10563 +       {0x00009be4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10564 +        0x0000ffdb},
10565 +       {0x00009be8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10566 +        0x0000ffdb},
10567 +       {0x00009bec, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10568 +        0x0000ffdb},
10569 +       {0x00009bf0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10570 +        0x0000ffdb},
10571 +       {0x00009bf4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10572 +        0x0000ffdb},
10573 +       {0x00009bf8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10574 +        0x0000ffdb},
10575 +       {0x00009bfc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10576 +        0x0000ffdb},
10577 +       {0x0000aa00, 0x00000000, 0x00000000, 0x0000a120, 0x0000a120,
10578 +        0x0000a120},
10579 +       {0x0000aa04, 0x00000000, 0x00000000, 0x0000a124, 0x0000a124,
10580 +        0x0000a124},
10581 +       {0x0000aa08, 0x00000000, 0x00000000, 0x0000a128, 0x0000a128,
10582 +        0x0000a128},
10583 +       {0x0000aa0c, 0x00000000, 0x00000000, 0x0000a12c, 0x0000a12c,
10584 +        0x0000a12c},
10585 +       {0x0000aa10, 0x00000000, 0x00000000, 0x0000a130, 0x0000a130,
10586 +        0x0000a130},
10587 +       {0x0000aa14, 0x00000000, 0x00000000, 0x0000a194, 0x0000a194,
10588 +        0x0000a194},
10589 +       {0x0000aa18, 0x00000000, 0x00000000, 0x0000a198, 0x0000a198,
10590 +        0x0000a198},
10591 +       {0x0000aa1c, 0x00000000, 0x00000000, 0x0000a20c, 0x0000a20c,
10592 +        0x0000a20c},
10593 +       {0x0000aa20, 0x00000000, 0x00000000, 0x0000a210, 0x0000a210,
10594 +        0x0000a210},
10595 +       {0x0000aa24, 0x00000000, 0x00000000, 0x0000a284, 0x0000a284,
10596 +        0x0000a284},
10597 +       {0x0000aa28, 0x00000000, 0x00000000, 0x0000a288, 0x0000a288,
10598 +        0x0000a288},
10599 +       {0x0000aa2c, 0x00000000, 0x00000000, 0x0000a28c, 0x0000a28c,
10600 +        0x0000a28c},
10601 +       {0x0000aa30, 0x00000000, 0x00000000, 0x0000a290, 0x0000a290,
10602 +        0x0000a290},
10603 +       {0x0000aa34, 0x00000000, 0x00000000, 0x0000a294, 0x0000a294,
10604 +        0x0000a294},
10605 +       {0x0000aa38, 0x00000000, 0x00000000, 0x0000a2a0, 0x0000a2a0,
10606 +        0x0000a2a0},
10607 +       {0x0000aa3c, 0x00000000, 0x00000000, 0x0000a2a4, 0x0000a2a4,
10608 +        0x0000a2a4},
10609 +       {0x0000aa40, 0x00000000, 0x00000000, 0x0000a2a8, 0x0000a2a8,
10610 +        0x0000a2a8},
10611 +       {0x0000aa44, 0x00000000, 0x00000000, 0x0000a2ac, 0x0000a2ac,
10612 +        0x0000a2ac},
10613 +       {0x0000aa48, 0x00000000, 0x00000000, 0x0000a2b0, 0x0000a2b0,
10614 +        0x0000a2b0},
10615 +       {0x0000aa4c, 0x00000000, 0x00000000, 0x0000a2b4, 0x0000a2b4,
10616 +        0x0000a2b4},
10617 +       {0x0000aa50, 0x00000000, 0x00000000, 0x0000a2b8, 0x0000a2b8,
10618 +        0x0000a2b8},
10619 +       {0x0000aa54, 0x00000000, 0x00000000, 0x0000a2c4, 0x0000a2c4,
10620 +        0x0000a2c4},
10621 +       {0x0000aa58, 0x00000000, 0x00000000, 0x0000a708, 0x0000a708,
10622 +        0x0000a708},
10623 +       {0x0000aa5c, 0x00000000, 0x00000000, 0x0000a70c, 0x0000a70c,
10624 +        0x0000a70c},
10625 +       {0x0000aa60, 0x00000000, 0x00000000, 0x0000a710, 0x0000a710,
10626 +        0x0000a710},
10627 +       {0x0000aa64, 0x00000000, 0x00000000, 0x0000ab04, 0x0000ab04,
10628 +        0x0000ab04},
10629 +       {0x0000aa68, 0x00000000, 0x00000000, 0x0000ab08, 0x0000ab08,
10630 +        0x0000ab08},
10631 +       {0x0000aa6c, 0x00000000, 0x00000000, 0x0000ab0c, 0x0000ab0c,
10632 +        0x0000ab0c},
10633 +       {0x0000aa70, 0x00000000, 0x00000000, 0x0000ab10, 0x0000ab10,
10634 +        0x0000ab10},
10635 +       {0x0000aa74, 0x00000000, 0x00000000, 0x0000ab14, 0x0000ab14,
10636 +        0x0000ab14},
10637 +       {0x0000aa78, 0x00000000, 0x00000000, 0x0000ab18, 0x0000ab18,
10638 +        0x0000ab18},
10639 +       {0x0000aa7c, 0x00000000, 0x00000000, 0x0000ab8c, 0x0000ab8c,
10640 +        0x0000ab8c},
10641 +       {0x0000aa80, 0x00000000, 0x00000000, 0x0000ab90, 0x0000ab90,
10642 +        0x0000ab90},
10643 +       {0x0000aa84, 0x00000000, 0x00000000, 0x0000ab94, 0x0000ab94,
10644 +        0x0000ab94},
10645 +       {0x0000aa88, 0x00000000, 0x00000000, 0x0000ab98, 0x0000ab98,
10646 +        0x0000ab98},
10647 +       {0x0000aa8c, 0x00000000, 0x00000000, 0x0000aba4, 0x0000aba4,
10648 +        0x0000aba4},
10649 +       {0x0000aa90, 0x00000000, 0x00000000, 0x0000aba8, 0x0000aba8,
10650 +        0x0000aba8},
10651 +       {0x0000aa94, 0x00000000, 0x00000000, 0x0000cb04, 0x0000cb04,
10652 +        0x0000cb04},
10653 +       {0x0000aa98, 0x00000000, 0x00000000, 0x0000cb08, 0x0000cb08,
10654 +        0x0000cb08},
10655 +       {0x0000aa9c, 0x00000000, 0x00000000, 0x0000cb0c, 0x0000cb0c,
10656 +        0x0000cb0c},
10657 +       {0x0000aaa0, 0x00000000, 0x00000000, 0x0000cb10, 0x0000cb10,
10658 +        0x0000cb10},
10659 +       {0x0000aaa4, 0x00000000, 0x00000000, 0x0000cb14, 0x0000cb14,
10660 +        0x0000cb14},
10661 +       {0x0000aaa8, 0x00000000, 0x00000000, 0x0000cb18, 0x0000cb18,
10662 +        0x0000cb18},
10663 +       {0x0000aaac, 0x00000000, 0x00000000, 0x0000cb8c, 0x0000cb8c,
10664 +        0x0000cb8c},
10665 +       {0x0000aab0, 0x00000000, 0x00000000, 0x0000cb90, 0x0000cb90,
10666 +        0x0000cb90},
10667 +       {0x0000aab4, 0x00000000, 0x00000000, 0x0000cf18, 0x0000cf18,
10668 +        0x0000cf18},
10669 +       {0x0000aab8, 0x00000000, 0x00000000, 0x0000cf24, 0x0000cf24,
10670 +        0x0000cf24},
10671 +       {0x0000aabc, 0x00000000, 0x00000000, 0x0000cf28, 0x0000cf28,
10672 +        0x0000cf28},
10673 +       {0x0000aac0, 0x00000000, 0x00000000, 0x0000d314, 0x0000d314,
10674 +        0x0000d314},
10675 +       {0x0000aac4, 0x00000000, 0x00000000, 0x0000d318, 0x0000d318,
10676 +        0x0000d318},
10677 +       {0x0000aac8, 0x00000000, 0x00000000, 0x0000d38c, 0x0000d38c,
10678 +        0x0000d38c},
10679 +       {0x0000aacc, 0x00000000, 0x00000000, 0x0000d390, 0x0000d390,
10680 +        0x0000d390},
10681 +       {0x0000aad0, 0x00000000, 0x00000000, 0x0000d394, 0x0000d394,
10682 +        0x0000d394},
10683 +       {0x0000aad4, 0x00000000, 0x00000000, 0x0000d398, 0x0000d398,
10684 +        0x0000d398},
10685 +       {0x0000aad8, 0x00000000, 0x00000000, 0x0000d3a4, 0x0000d3a4,
10686 +        0x0000d3a4},
10687 +       {0x0000aadc, 0x00000000, 0x00000000, 0x0000d3a8, 0x0000d3a8,
10688 +        0x0000d3a8},
10689 +       {0x0000aae0, 0x00000000, 0x00000000, 0x0000d3ac, 0x0000d3ac,
10690 +        0x0000d3ac},
10691 +       {0x0000aae4, 0x00000000, 0x00000000, 0x0000d3b0, 0x0000d3b0,
10692 +        0x0000d3b0},
10693 +       {0x0000aae8, 0x00000000, 0x00000000, 0x0000f380, 0x0000f380,
10694 +        0x0000f380},
10695 +       {0x0000aaec, 0x00000000, 0x00000000, 0x0000f384, 0x0000f384,
10696 +        0x0000f384},
10697 +       {0x0000aaf0, 0x00000000, 0x00000000, 0x0000f388, 0x0000f388,
10698 +        0x0000f388},
10699 +       {0x0000aaf4, 0x00000000, 0x00000000, 0x0000f710, 0x0000f710,
10700 +        0x0000f710},
10701 +       {0x0000aaf8, 0x00000000, 0x00000000, 0x0000f714, 0x0000f714,
10702 +        0x0000f714},
10703 +       {0x0000aafc, 0x00000000, 0x00000000, 0x0000f718, 0x0000f718,
10704 +        0x0000f718},
10705 +       {0x0000ab00, 0x00000000, 0x00000000, 0x0000fb10, 0x0000fb10,
10706 +        0x0000fb10},
10707 +       {0x0000ab04, 0x00000000, 0x00000000, 0x0000fb14, 0x0000fb14,
10708 +        0x0000fb14},
10709 +       {0x0000ab08, 0x00000000, 0x00000000, 0x0000fb18, 0x0000fb18,
10710 +        0x0000fb18},
10711 +       {0x0000ab0c, 0x00000000, 0x00000000, 0x0000fb8c, 0x0000fb8c,
10712 +        0x0000fb8c},
10713 +       {0x0000ab10, 0x00000000, 0x00000000, 0x0000fb90, 0x0000fb90,
10714 +        0x0000fb90},
10715 +       {0x0000ab14, 0x00000000, 0x00000000, 0x0000fb94, 0x0000fb94,
10716 +        0x0000fb94},
10717 +       {0x0000ab18, 0x00000000, 0x00000000, 0x0000ff8c, 0x0000ff8c,
10718 +        0x0000ff8c},
10719 +       {0x0000ab1c, 0x00000000, 0x00000000, 0x0000ff90, 0x0000ff90,
10720 +        0x0000ff90},
10721 +       {0x0000ab20, 0x00000000, 0x00000000, 0x0000ff94, 0x0000ff94,
10722 +        0x0000ff94},
10723 +       {0x0000ab24, 0x00000000, 0x00000000, 0x0000ffa0, 0x0000ffa0,
10724 +        0x0000ffa0},
10725 +       {0x0000ab28, 0x00000000, 0x00000000, 0x0000ffa4, 0x0000ffa4,
10726 +        0x0000ffa4},
10727 +       {0x0000ab2c, 0x00000000, 0x00000000, 0x0000ffa8, 0x0000ffa8,
10728 +        0x0000ffa8},
10729 +       {0x0000ab30, 0x00000000, 0x00000000, 0x0000ffac, 0x0000ffac,
10730 +        0x0000ffac},
10731 +       {0x0000ab34, 0x00000000, 0x00000000, 0x0000ffb0, 0x0000ffb0,
10732 +        0x0000ffb0},
10733 +       {0x0000ab38, 0x00000000, 0x00000000, 0x0000ffb4, 0x0000ffb4,
10734 +        0x0000ffb4},
10735 +       {0x0000ab3c, 0x00000000, 0x00000000, 0x0000ffa1, 0x0000ffa1,
10736 +        0x0000ffa1},
10737 +       {0x0000ab40, 0x00000000, 0x00000000, 0x0000ffa5, 0x0000ffa5,
10738 +        0x0000ffa5},
10739 +       {0x0000ab44, 0x00000000, 0x00000000, 0x0000ffa9, 0x0000ffa9,
10740 +        0x0000ffa9},
10741 +       {0x0000ab48, 0x00000000, 0x00000000, 0x0000ffad, 0x0000ffad,
10742 +        0x0000ffad},
10743 +       {0x0000ab4c, 0x00000000, 0x00000000, 0x0000ffb1, 0x0000ffb1,
10744 +        0x0000ffb1},
10745 +       {0x0000ab50, 0x00000000, 0x00000000, 0x0000ffb5, 0x0000ffb5,
10746 +        0x0000ffb5},
10747 +       {0x0000ab54, 0x00000000, 0x00000000, 0x0000ffb9, 0x0000ffb9,
10748 +        0x0000ffb9},
10749 +       {0x0000ab58, 0x00000000, 0x00000000, 0x0000ffc5, 0x0000ffc5,
10750 +        0x0000ffc5},
10751 +       {0x0000ab5c, 0x00000000, 0x00000000, 0x0000ffc9, 0x0000ffc9,
10752 +        0x0000ffc9},
10753 +       {0x0000ab60, 0x00000000, 0x00000000, 0x0000ffcd, 0x0000ffcd,
10754 +        0x0000ffcd},
10755 +       {0x0000ab64, 0x00000000, 0x00000000, 0x0000ffd1, 0x0000ffd1,
10756 +        0x0000ffd1},
10757 +       {0x0000ab68, 0x00000000, 0x00000000, 0x0000ffd5, 0x0000ffd5,
10758 +        0x0000ffd5},
10759 +       {0x0000ab6c, 0x00000000, 0x00000000, 0x0000ffc2, 0x0000ffc2,
10760 +        0x0000ffc2},
10761 +       {0x0000ab70, 0x00000000, 0x00000000, 0x0000ffc6, 0x0000ffc6,
10762 +        0x0000ffc6},
10763 +       {0x0000ab74, 0x00000000, 0x00000000, 0x0000ffca, 0x0000ffca,
10764 +        0x0000ffca},
10765 +       {0x0000ab78, 0x00000000, 0x00000000, 0x0000ffce, 0x0000ffce,
10766 +        0x0000ffce},
10767 +       {0x0000ab7c, 0x00000000, 0x00000000, 0x0000ffd2, 0x0000ffd2,
10768 +        0x0000ffd2},
10769 +       {0x0000ab80, 0x00000000, 0x00000000, 0x0000ffd6, 0x0000ffd6,
10770 +        0x0000ffd6},
10771 +       {0x0000ab84, 0x00000000, 0x00000000, 0x0000ffda, 0x0000ffda,
10772 +        0x0000ffda},
10773 +       {0x0000ab88, 0x00000000, 0x00000000, 0x0000ffc7, 0x0000ffc7,
10774 +        0x0000ffc7},
10775 +       {0x0000ab8c, 0x00000000, 0x00000000, 0x0000ffcb, 0x0000ffcb,
10776 +        0x0000ffcb},
10777 +       {0x0000ab90, 0x00000000, 0x00000000, 0x0000ffcf, 0x0000ffcf,
10778 +        0x0000ffcf},
10779 +       {0x0000ab94, 0x00000000, 0x00000000, 0x0000ffd3, 0x0000ffd3,
10780 +        0x0000ffd3},
10781 +       {0x0000ab98, 0x00000000, 0x00000000, 0x0000ffd7, 0x0000ffd7,
10782 +        0x0000ffd7},
10783 +       {0x0000ab9c, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10784 +        0x0000ffdb},
10785 +       {0x0000aba0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10786 +        0x0000ffdb},
10787 +       {0x0000aba4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10788 +        0x0000ffdb},
10789 +       {0x0000aba8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10790 +        0x0000ffdb},
10791 +       {0x0000abac, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10792 +        0x0000ffdb},
10793 +       {0x0000abb0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10794 +        0x0000ffdb},
10795 +       {0x0000abb4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10796 +        0x0000ffdb},
10797 +       {0x0000abb8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10798 +        0x0000ffdb},
10799 +       {0x0000abbc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10800 +        0x0000ffdb},
10801 +       {0x0000abc0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10802 +        0x0000ffdb},
10803 +       {0x0000abc4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10804 +        0x0000ffdb},
10805 +       {0x0000abc8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10806 +        0x0000ffdb},
10807 +       {0x0000abcc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10808 +        0x0000ffdb},
10809 +       {0x0000abd0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10810 +        0x0000ffdb},
10811 +       {0x0000abd4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10812 +        0x0000ffdb},
10813 +       {0x0000abd8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10814 +        0x0000ffdb},
10815 +       {0x0000abdc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10816 +        0x0000ffdb},
10817 +       {0x0000abe0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10818 +        0x0000ffdb},
10819 +       {0x0000abe4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10820 +        0x0000ffdb},
10821 +       {0x0000abe8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10822 +        0x0000ffdb},
10823 +       {0x0000abec, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10824 +        0x0000ffdb},
10825 +       {0x0000abf0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10826 +        0x0000ffdb},
10827 +       {0x0000abf4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10828 +        0x0000ffdb},
10829 +       {0x0000abf8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10830 +        0x0000ffdb},
10831 +       {0x0000abfc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
10832 +        0x0000ffdb},
10833 +       {0x00009848, 0x00000000, 0x00000000, 0x00001067, 0x00001067,
10834 +        0x00001067},
10835 +       {0x0000a848, 0x00000000, 0x00000000, 0x00001067, 0x00001067,
10836 +        0x00001067},
10837 +};
10838 +
10839 +static const u_int32_t ar9287PciePhy_clkreq_always_on_L1_9287_1_0[][2] = {
10840 +       {0x00004040, 0x9248fd00},
10841 +       {0x00004040, 0x24924924},
10842 +       {0x00004040, 0xa8000019},
10843 +       {0x00004040, 0x13160820},
10844 +       {0x00004040, 0xe5980560},
10845 +       {0x00004040, 0xc01dcffd},
10846 +       {0x00004040, 0x1aaabe41},
10847 +       {0x00004040, 0xbe105554},
10848 +       {0x00004040, 0x00043007},
10849 +       {0x00004044, 0x00000000},
10850 +};
10851 +
10852 +static const u_int32_t ar9287PciePhy_clkreq_off_L1_9287_1_0[][2] = {
10853 +       {0x00004040, 0x9248fd00},
10854 +       {0x00004040, 0x24924924},
10855 +       {0x00004040, 0xa8000019},
10856 +       {0x00004040, 0x13160820},
10857 +       {0x00004040, 0xe5980560},
10858 +       {0x00004040, 0xc01dcffc},
10859 +       {0x00004040, 0x1aaabe41},
10860 +       {0x00004040, 0xbe105554},
10861 +       {0x00004040, 0x00043007},
10862 +       {0x00004044, 0x00000000},
10863 +};
10864 +
10865 +/* AR9287 Revision 11 */
10866 +
10867 +static const u_int32_t ar9287Modes_9287_1_1[][6] = {
10868 +       /* Address      5G-HT20     5G-HT40     2G-HT40     2G-HT20     Turbo   */
10869 +       {0x00001030, 0x00000000, 0x00000000, 0x000002c0, 0x00000160,
10870 +        0x000001e0},
10871 +       {0x00001070, 0x00000000, 0x00000000, 0x00000318, 0x0000018c,
10872 +        0x000001e0},
10873 +       {0x000010b0, 0x00000000, 0x00000000, 0x00007c70, 0x00003e38,
10874 +        0x00001180},
10875 +       {0x000010f0, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
10876 +        0x00000008},
10877 +       {0x00008014, 0x00000000, 0x00000000, 0x10801600, 0x08400b00,
10878 +        0x06e006e0},
10879 +       {0x0000801c, 0x00000000, 0x00000000, 0x12e00057, 0x12e0002b,
10880 +        0x0988004f},
10881 +       {0x00008120, 0x08f04800, 0x08f04800, 0x08f04810, 0x08f04810,
10882 +        0x08f04810},
10883 +       {0x000081d0, 0x00003200, 0x00003200, 0x0000320a, 0x0000320a,
10884 +        0x0000320a},
10885 +       {0x00008318, 0x00000000, 0x00000000, 0x00006880, 0x00003440,
10886 +        0x00006880},
10887 +       {0x00009804, 0x00000000, 0x00000000, 0x000003c4, 0x00000300,
10888 +        0x00000303},
10889 +       {0x00009820, 0x00000000, 0x00000000, 0x02020200, 0x02020200,
10890 +        0x02020200},
10891 +       {0x00009824, 0x00000000, 0x00000000, 0x01000e0e, 0x01000e0e,
10892 +        0x01000e0e},
10893 +       {0x00009828, 0x00000000, 0x00000000, 0x3a020001, 0x3a020001,
10894 +        0x3a020001},
10895 +       {0x00009834, 0x00000000, 0x00000000, 0x00000e0e, 0x00000e0e,
10896 +        0x00000e0e},
10897 +       {0x00009838, 0x00000003, 0x00000003, 0x00000007, 0x00000007,
10898 +        0x00000007},
10899 +       {0x00009840, 0x206a002e, 0x206a002e, 0x206a012e, 0x206a012e,
10900 +        0x206a012e},
10901 +       {0x00009844, 0x03720000, 0x03720000, 0x037216a0, 0x037216a0,
10902 +        0x037216a0},
10903 +       {0x00009850, 0x60000000, 0x60000000, 0x6d4000e2, 0x6c4000e2,
10904 +        0x6c4000e2},
10905 +       {0x00009858, 0x7c000d00, 0x7c000d00, 0x7ec84d2e, 0x7ec84d2e,
10906 +        0x7ec84d2e},
10907 +       {0x0000985c, 0x3100005e, 0x3100005e, 0x3139605e, 0x31395d5e,
10908 +        0x31395d5e},
10909 +       {0x00009860, 0x00058d00, 0x00058d00, 0x00058d20, 0x00058d20,
10910 +        0x00058d18},
10911 +       {0x00009864, 0x00000e00, 0x00000e00, 0x0001ce00, 0x0001ce00,
10912 +        0x0001ce00},
10913 +       {0x00009868, 0x000040c0, 0x000040c0, 0x5ac640d0, 0x5ac640d0,
10914 +        0x5ac640d0},
10915 +       {0x0000986c, 0x00000080, 0x00000080, 0x06903881, 0x06903881,
10916 +        0x06903881},
10917 +       {0x00009914, 0x00000000, 0x00000000, 0x00001130, 0x00000898,
10918 +        0x000007d0},
10919 +       {0x00009918, 0x00000000, 0x00000000, 0x00000016, 0x0000000b,
10920 +        0x00000016},
10921 +       {0x00009924, 0xd00a8a01, 0xd00a8a01, 0xd00a8a0d, 0xd00a8a0d,
10922 +        0xd00a8a0d},
10923 +       {0x00009944, 0xefbc0000, 0xefbc0000, 0xefbc1010, 0xefbc1010,
10924 +        0xefbc1010},
10925 +       {0x00009960, 0x00000000, 0x00000000, 0x00000010, 0x00000010,
10926 +        0x00000010},
10927 +       {0x0000a960, 0x00000000, 0x00000000, 0x00000010, 0x00000010,
10928 +        0x00000010},
10929 +       {0x00009964, 0x00000000, 0x00000000, 0x00000210, 0x00000210,
10930 +        0x00000210},
10931 +       {0x0000c968, 0x00000200, 0x00000200, 0x000003ce, 0x000003ce,
10932 +        0x000003ce},
10933 +       {0x000099b8, 0x00000000, 0x00000000, 0x0000001c, 0x0000001c,
10934 +        0x0000001c},
10935 +       {0x000099bc, 0x00000000, 0x00000000, 0x00000c00, 0x00000c00,
10936 +        0x00000c00},
10937 +       {0x000099c0, 0x00000000, 0x00000000, 0x05eea6d4, 0x05eea6d4,
10938 +        0x05eea6d4},
10939 +       {0x0000a204, 0x00000440, 0x00000440, 0x00000444, 0x00000444,
10940 +        0x00000444},
10941 +       {0x0000a20c, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
10942 +        0x00000000},
10943 +       {0x0000b20c, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
10944 +        0x00000000},
10945 +       {0x0000a21c, 0x1803800a, 0x1803800a, 0x1883800a, 0x1883800a,
10946 +        0x1883800a},
10947 +       {0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108,
10948 +        0x00000000},
10949 +       {0x0000a250, 0x00000000, 0x00000000, 0x0004a000, 0x0004a000,
10950 +        0x0004a000},
10951 +       {0x0000a358, 0x7999aa02, 0x7999aa02, 0x7999aa0e, 0x7999aa0e,
10952 +        0x7999aa0e},
10953 +       {0x0000a3d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
10954 +        0x00000000},
10955 +};
10956 +
10957 +static const u_int32_t ar9287Common_9287_1_1[][2] = {
10958 +       {0x0000000c, 0x00000000},
10959 +       {0x00000030, 0x00020015},
10960 +       {0x00000034, 0x00000005},
10961 +       {0x00000040, 0x00000000},
10962 +       {0x00000044, 0x00000008},
10963 +       {0x00000048, 0x00000008},
10964 +       {0x0000004c, 0x00000010},
10965 +       {0x00000050, 0x00000000},
10966 +       {0x00000054, 0x0000001f},
10967 +       {0x00000800, 0x00000000},
10968 +       {0x00000804, 0x00000000},
10969 +       {0x00000808, 0x00000000},
10970 +       {0x0000080c, 0x00000000},
10971 +       {0x00000810, 0x00000000},
10972 +       {0x00000814, 0x00000000},
10973 +       {0x00000818, 0x00000000},
10974 +       {0x0000081c, 0x00000000},
10975 +       {0x00000820, 0x00000000},
10976 +       {0x00000824, 0x00000000},
10977 +       {0x00001040, 0x002ffc0f},
10978 +       {0x00001044, 0x002ffc0f},
10979 +       {0x00001048, 0x002ffc0f},
10980 +       {0x0000104c, 0x002ffc0f},
10981 +       {0x00001050, 0x002ffc0f},
10982 +       {0x00001054, 0x002ffc0f},
10983 +       {0x00001058, 0x002ffc0f},
10984 +       {0x0000105c, 0x002ffc0f},
10985 +       {0x00001060, 0x002ffc0f},
10986 +       {0x00001064, 0x002ffc0f},
10987 +       {0x00001230, 0x00000000},
10988 +       {0x00001270, 0x00000000},
10989 +       {0x00001038, 0x00000000},
10990 +       {0x00001078, 0x00000000},
10991 +       {0x000010b8, 0x00000000},
10992 +       {0x000010f8, 0x00000000},
10993 +       {0x00001138, 0x00000000},
10994 +       {0x00001178, 0x00000000},
10995 +       {0x000011b8, 0x00000000},
10996 +       {0x000011f8, 0x00000000},
10997 +       {0x00001238, 0x00000000},
10998 +       {0x00001278, 0x00000000},
10999 +       {0x000012b8, 0x00000000},
11000 +       {0x000012f8, 0x00000000},
11001 +       {0x00001338, 0x00000000},
11002 +       {0x00001378, 0x00000000},
11003 +       {0x000013b8, 0x00000000},
11004 +       {0x000013f8, 0x00000000},
11005 +       {0x00001438, 0x00000000},
11006 +       {0x00001478, 0x00000000},
11007 +       {0x000014b8, 0x00000000},
11008 +       {0x000014f8, 0x00000000},
11009 +       {0x00001538, 0x00000000},
11010 +       {0x00001578, 0x00000000},
11011 +       {0x000015b8, 0x00000000},
11012 +       {0x000015f8, 0x00000000},
11013 +       {0x00001638, 0x00000000},
11014 +       {0x00001678, 0x00000000},
11015 +       {0x000016b8, 0x00000000},
11016 +       {0x000016f8, 0x00000000},
11017 +       {0x00001738, 0x00000000},
11018 +       {0x00001778, 0x00000000},
11019 +       {0x000017b8, 0x00000000},
11020 +       {0x000017f8, 0x00000000},
11021 +       {0x0000103c, 0x00000000},
11022 +       {0x0000107c, 0x00000000},
11023 +       {0x000010bc, 0x00000000},
11024 +       {0x000010fc, 0x00000000},
11025 +       {0x0000113c, 0x00000000},
11026 +       {0x0000117c, 0x00000000},
11027 +       {0x000011bc, 0x00000000},
11028 +       {0x000011fc, 0x00000000},
11029 +       {0x0000123c, 0x00000000},
11030 +       {0x0000127c, 0x00000000},
11031 +       {0x000012bc, 0x00000000},
11032 +       {0x000012fc, 0x00000000},
11033 +       {0x0000133c, 0x00000000},
11034 +       {0x0000137c, 0x00000000},
11035 +       {0x000013bc, 0x00000000},
11036 +       {0x000013fc, 0x00000000},
11037 +       {0x0000143c, 0x00000000},
11038 +       {0x0000147c, 0x00000000},
11039 +       {0x00004030, 0x00000002},
11040 +       {0x0000403c, 0x00000002},
11041 +       {0x00004024, 0x0000001f},
11042 +       {0x00004060, 0x00000000},
11043 +       {0x00004064, 0x00000000},
11044 +       {0x00007010, 0x00000033},
11045 +       {0x00007020, 0x00000000},
11046 +       {0x00007034, 0x00000002},
11047 +       {0x00007038, 0x000004c2},
11048 +       {0x00008004, 0x00000000},
11049 +       {0x00008008, 0x00000000},
11050 +       {0x0000800c, 0x00000000},
11051 +       {0x00008018, 0x00000700},
11052 +       {0x00008020, 0x00000000},
11053 +       {0x00008038, 0x00000000},
11054 +       {0x0000803c, 0x00000000},
11055 +       {0x00008048, 0x40000000},
11056 +       {0x00008054, 0x00000000},
11057 +       {0x00008058, 0x00000000},
11058 +       {0x0000805c, 0x000fc78f},
11059 +       {0x00008060, 0x0000000f},
11060 +       {0x00008064, 0x00000000},
11061 +       {0x00008070, 0x00000000},
11062 +       {0x000080c0, 0x2a80001a},
11063 +       {0x000080c4, 0x05dc01e0},
11064 +       {0x000080c8, 0x1f402710},
11065 +       {0x000080cc, 0x01f40000},
11066 +       {0x000080d0, 0x00001e00},
11067 +       {0x000080d4, 0x00000000},
11068 +       {0x000080d8, 0x00400000},
11069 +       {0x000080e0, 0xffffffff},
11070 +       {0x000080e4, 0x0000ffff},
11071 +       {0x000080e8, 0x003f3f3f},
11072 +       {0x000080ec, 0x00000000},
11073 +       {0x000080f0, 0x00000000},
11074 +       {0x000080f4, 0x00000000},
11075 +       {0x000080f8, 0x00000000},
11076 +       {0x000080fc, 0x00020000},
11077 +       {0x00008100, 0x00020000},
11078 +       {0x00008104, 0x00000001},
11079 +       {0x00008108, 0x00000052},
11080 +       {0x0000810c, 0x00000000},
11081 +       {0x00008110, 0x00000168},
11082 +       {0x00008118, 0x000100aa},
11083 +       {0x0000811c, 0x00003210},
11084 +       {0x00008124, 0x00000000},
11085 +       {0x00008128, 0x00000000},
11086 +       {0x0000812c, 0x00000000},
11087 +       {0x00008130, 0x00000000},
11088 +       {0x00008134, 0x00000000},
11089 +       {0x00008138, 0x00000000},
11090 +       {0x0000813c, 0x00000000},
11091 +       {0x00008144, 0xffffffff},
11092 +       {0x00008168, 0x00000000},
11093 +       {0x0000816c, 0x00000000},
11094 +       {0x00008170, 0x18487320},
11095 +       {0x00008174, 0xfaa4fa50},
11096 +       {0x00008178, 0x00000100},
11097 +       {0x0000817c, 0x00000000},
11098 +       {0x000081c0, 0x00000000},
11099 +       {0x000081c4, 0x00000000},
11100 +       {0x000081d4, 0x00000000},
11101 +       {0x000081ec, 0x00000000},
11102 +       {0x000081f0, 0x00000000},
11103 +       {0x000081f4, 0x00000000},
11104 +       {0x000081f8, 0x00000000},
11105 +       {0x000081fc, 0x00000000},
11106 +       {0x00008200, 0x00000000},
11107 +       {0x00008204, 0x00000000},
11108 +       {0x00008208, 0x00000000},
11109 +       {0x0000820c, 0x00000000},
11110 +       {0x00008210, 0x00000000},
11111 +       {0x00008214, 0x00000000},
11112 +       {0x00008218, 0x00000000},
11113 +       {0x0000821c, 0x00000000},
11114 +       {0x00008220, 0x00000000},
11115 +       {0x00008224, 0x00000000},
11116 +       {0x00008228, 0x00000000},
11117 +       {0x0000822c, 0x00000000},
11118 +       {0x00008230, 0x00000000},
11119 +       {0x00008234, 0x00000000},
11120 +       {0x00008238, 0x00000000},
11121 +       {0x0000823c, 0x00000000},
11122 +       {0x00008240, 0x00100000},
11123 +       {0x00008244, 0x0010f400},
11124 +       {0x00008248, 0x00000100},
11125 +       {0x0000824c, 0x0001e800},
11126 +       {0x00008250, 0x00000000},
11127 +       {0x00008254, 0x00000000},
11128 +       {0x00008258, 0x00000000},
11129 +       {0x0000825c, 0x400000ff},
11130 +       {0x00008260, 0x00080922},
11131 +       {0x00008264, 0x88a00010},
11132 +       {0x00008270, 0x00000000},
11133 +       {0x00008274, 0x40000000},
11134 +       {0x00008278, 0x003e4180},
11135 +       {0x0000827c, 0x00000000},
11136 +       {0x00008284, 0x0000002c},
11137 +       {0x00008288, 0x0000002c},
11138 +       {0x0000828c, 0x000000ff},
11139 +       {0x00008294, 0x00000000},
11140 +       {0x00008298, 0x00000000},
11141 +       {0x0000829c, 0x00000000},
11142 +       {0x00008300, 0x00000040},
11143 +       {0x00008314, 0x00000000},
11144 +       {0x00008328, 0x00000000},
11145 +       {0x0000832c, 0x00000007},
11146 +       {0x00008330, 0x00000302},
11147 +       {0x00008334, 0x00000e00},
11148 +       {0x00008338, 0x00ff0000},
11149 +       {0x0000833c, 0x00000000},
11150 +       {0x00008340, 0x000107ff},
11151 +       {0x00008344, 0x01c81043},
11152 +       {0x00008360, 0xffffffff},
11153 +       {0x00008364, 0xffffffff},
11154 +       {0x00008368, 0x00000000},
11155 +       {0x00008370, 0x00000000},
11156 +       {0x00008374, 0x000000ff},
11157 +       {0x00008378, 0x00000000},
11158 +       {0x0000837c, 0x00000000},
11159 +       {0x00008380, 0xffffffff},
11160 +       {0x00008384, 0xffffffff},
11161 +       {0x00008390, 0x0fffffff},
11162 +       {0x00008394, 0x0fffffff},
11163 +       {0x00008398, 0x00000000},
11164 +       {0x0000839c, 0x00000000},
11165 +       {0x000083a0, 0x00000000},
11166 +       {0x00009808, 0x00000000},
11167 +       {0x0000980c, 0xafe68e30},
11168 +       {0x00009810, 0xfd14e000},
11169 +       {0x00009814, 0x9c0a9f6b},
11170 +       {0x0000981c, 0x00000000},
11171 +       {0x0000982c, 0x0000a000},
11172 +       {0x00009830, 0x00000000},
11173 +       {0x0000983c, 0x00200400},
11174 +       {0x0000984c, 0x0040233c},
11175 +       {0x0000a84c, 0x0040233c},
11176 +       {0x00009854, 0x00000044},
11177 +       {0x00009900, 0x00000000},
11178 +       {0x00009904, 0x00000000},
11179 +       {0x00009908, 0x00000000},
11180 +       {0x0000990c, 0x00000000},
11181 +       {0x00009910, 0x10002310},
11182 +       {0x0000991c, 0x10000fff},
11183 +       {0x00009920, 0x04900000},
11184 +       {0x0000a920, 0x04900000},
11185 +       {0x00009928, 0x00000001},
11186 +       {0x0000992c, 0x00000004},
11187 +       {0x00009930, 0x00000000},
11188 +       {0x0000a930, 0x00000000},
11189 +       {0x00009934, 0x1e1f2022},
11190 +       {0x00009938, 0x0a0b0c0d},
11191 +       {0x0000993c, 0x00000000},
11192 +       {0x00009948, 0x9280c00a},
11193 +       {0x0000994c, 0x00020028},
11194 +       {0x00009954, 0x5f3ca3de},
11195 +       {0x00009958, 0x0108ecff},
11196 +       {0x00009940, 0x14750604},
11197 +       {0x0000c95c, 0x004b6a8e},
11198 +       {0x00009970, 0x990bb514},
11199 +       {0x00009974, 0x00000000},
11200 +       {0x00009978, 0x00000001},
11201 +       {0x0000997c, 0x00000000},
11202 +       {0x000099a0, 0x00000000},
11203 +       {0x000099a4, 0x00000001},
11204 +       {0x000099a8, 0x201fff00},
11205 +       {0x000099ac, 0x0c6f0000},
11206 +       {0x000099b0, 0x03051000},
11207 +       {0x000099b4, 0x00000820},
11208 +       {0x000099c4, 0x06336f77},
11209 +       {0x000099c8, 0x6af6532f},
11210 +       {0x000099cc, 0x08f186c8},
11211 +       {0x000099d0, 0x00046384},
11212 +       {0x000099dc, 0x00000000},
11213 +       {0x000099e0, 0x00000000},
11214 +       {0x000099e4, 0xaaaaaaaa},
11215 +       {0x000099e8, 0x3c466478},
11216 +       {0x000099ec, 0x0cc80caa},
11217 +       {0x000099f0, 0x00000000},
11218 +       {0x000099fc, 0x00001042},
11219 +       {0x0000a208, 0x803e4788},
11220 +       {0x0000a210, 0x4080a333},
11221 +       {0x0000a214, 0x40206c10},
11222 +       {0x0000a218, 0x009c4060},
11223 +       {0x0000a220, 0x01834061},
11224 +       {0x0000a224, 0x00000400},
11225 +       {0x0000a228, 0x000003b5},
11226 +       {0x0000a22c, 0x233f7180},
11227 +       {0x0000a234, 0x20202020},
11228 +       {0x0000a238, 0x20202020},
11229 +       {0x0000a23c, 0x13c889af},
11230 +       {0x0000a240, 0x38490a20},
11231 +       {0x0000a244, 0x00000000},
11232 +       {0x0000a248, 0xfffffffc},
11233 +       {0x0000a24c, 0x00000000},
11234 +       {0x0000a254, 0x00000000},
11235 +       {0x0000a258, 0x0cdbd380},
11236 +       {0x0000a25c, 0x0f0f0f01},
11237 +       {0x0000a260, 0xdfa91f01},
11238 +       {0x0000a264, 0x00418a11},
11239 +       {0x0000b264, 0x00418a11},
11240 +       {0x0000a268, 0x00000000},
11241 +       {0x0000a26c, 0x0e79e5c6},
11242 +       {0x0000b26c, 0x0e79e5c6},
11243 +       {0x0000d270, 0x00820820},
11244 +       {0x0000a278, 0x1ce739ce},
11245 +       {0x0000a27c, 0x050701ce},
11246 +       {0x0000d35c, 0x07ffffef},
11247 +       {0x0000d360, 0x0fffffe7},
11248 +       {0x0000d364, 0x17ffffe5},
11249 +       {0x0000d368, 0x1fffffe4},
11250 +       {0x0000d36c, 0x37ffffe3},
11251 +       {0x0000d370, 0x3fffffe3},
11252 +       {0x0000d374, 0x57ffffe3},
11253 +       {0x0000d378, 0x5fffffe2},
11254 +       {0x0000d37c, 0x7fffffe2},
11255 +       {0x0000d380, 0x7f3c7bba},
11256 +       {0x0000d384, 0xf3307ff0},
11257 +       {0x0000a388, 0x0c000000},
11258 +       {0x0000a38c, 0x20202020},
11259 +       {0x0000a390, 0x20202020},
11260 +       {0x0000a394, 0x1ce739ce},
11261 +       {0x0000a398, 0x000001ce},
11262 +       {0x0000b398, 0x000001ce},
11263 +       {0x0000a39c, 0x00000001},
11264 +       {0x0000a3c8, 0x00000246},
11265 +       {0x0000a3cc, 0x20202020},
11266 +       {0x0000a3d0, 0x20202020},
11267 +       {0x0000a3d4, 0x20202020},
11268 +       {0x0000a3dc, 0x1ce739ce},
11269 +       {0x0000a3e0, 0x000001ce},
11270 +       {0x0000a3e4, 0x00000000},
11271 +       {0x0000a3e8, 0x18c43433},
11272 +       {0x0000a3ec, 0x00f70081},
11273 +       {0x0000a3f0, 0x01036a1e},
11274 +       {0x0000a3f4, 0x00000000},
11275 +       {0x0000b3f4, 0x00000000},
11276 +       {0x0000a7d8, 0x000003f1},
11277 +       {0x00007800, 0x00000800},
11278 +       {0x00007804, 0x6c35ffd2},
11279 +       {0x00007808, 0x6db6c000},
11280 +       {0x0000780c, 0x6db6cb30},
11281 +       {0x00007810, 0x6db6cb6c},
11282 +       {0x00007814, 0x0501e200},
11283 +       {0x00007818, 0x0094128d},
11284 +       {0x0000781c, 0x976ee392},
11285 +       {0x00007820, 0xf75ff6fc},
11286 +       {0x00007824, 0x00040000},
11287 +       {0x00007828, 0xdb003012},
11288 +       {0x0000782c, 0x04924914},
11289 +       {0x00007830, 0x21084210},
11290 +       {0x00007834, 0x00140000},
11291 +       {0x00007838, 0x0e4548d8},
11292 +       {0x0000783c, 0x54214514},
11293 +       {0x00007840, 0x02025830},
11294 +       {0x00007844, 0x71c0d388},
11295 +       {0x00007848, 0x934934a8},
11296 +       {0x00007850, 0x00000000},
11297 +       {0x00007854, 0x00000800},
11298 +       {0x00007858, 0x6c35ffd2},
11299 +       {0x0000785c, 0x6db6c000},
11300 +       {0x00007860, 0x6db6cb30},
11301 +       {0x00007864, 0x6db6cb6c},
11302 +       {0x00007868, 0x0501e200},
11303 +       {0x0000786c, 0x0094128d},
11304 +       {0x00007870, 0x976ee392},
11305 +       {0x00007874, 0xf75ff6fc},
11306 +       {0x00007878, 0x00040000},
11307 +       {0x0000787c, 0xdb003012},
11308 +       {0x00007880, 0x04924914},
11309 +       {0x00007884, 0x21084210},
11310 +       {0x00007888, 0x001b6db0},
11311 +       {0x0000788c, 0x00376b63},
11312 +       {0x00007890, 0x06db6db6},
11313 +       {0x00007894, 0x006d8000},
11314 +       {0x00007898, 0x48100000},
11315 +       {0x0000789c, 0x00000000},
11316 +       {0x000078a0, 0x08000000},
11317 +       {0x000078a4, 0x0007ffd8},
11318 +       {0x000078a8, 0x0007ffd8},
11319 +       {0x000078ac, 0x001c0020},
11320 +       {0x000078b0, 0x00060aeb},
11321 +       {0x000078b4, 0x40008080},
11322 +       {0x000078b8, 0x2a850160},
11323 +};
11324 +
11325 +/*
11326 + * For Japanese regulatory requirements, 2484 MHz requires the following three
11327 + * registers be programmed differently from the channel between 2412 and 2472 MHz.
11328 + */
11329 +static const u_int32_t ar9287Common_normal_cck_fir_coeff_92871_1[][2] = {
11330 +       {0x0000a1f4, 0x00fffeff},
11331 +       {0x0000a1f8, 0x00f5f9ff},
11332 +       {0x0000a1fc, 0xb79f6427},
11333 +};
11334 +
11335 +static const u_int32_t ar9287Common_japan_2484_cck_fir_coeff_92871_1[][2] = {
11336 +       {0x0000a1f4, 0x00000000},
11337 +       {0x0000a1f8, 0xefff0301},
11338 +       {0x0000a1fc, 0xca9228ee},
11339 +};
11340 +
11341 +static const u_int32_t ar9287Modes_tx_gain_9287_1_1[][6] = {
11342 +       /* Address      5G-HT20     5G-HT40     2G-HT40     2G-HT20     Turbo   */
11343 +       {0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
11344 +        0x00000000},
11345 +       {0x0000a304, 0x00000000, 0x00000000, 0x00004002, 0x00004002,
11346 +        0x00004002},
11347 +       {0x0000a308, 0x00000000, 0x00000000, 0x00008004, 0x00008004,
11348 +        0x00008004},
11349 +       {0x0000a30c, 0x00000000, 0x00000000, 0x0000c00a, 0x0000c00a,
11350 +        0x0000c00a},
11351 +       {0x0000a310, 0x00000000, 0x00000000, 0x0001000c, 0x0001000c,
11352 +        0x0001000c},
11353 +       {0x0000a314, 0x00000000, 0x00000000, 0x0001420b, 0x0001420b,
11354 +        0x0001420b},
11355 +       {0x0000a318, 0x00000000, 0x00000000, 0x0001824a, 0x0001824a,
11356 +        0x0001824a},
11357 +       {0x0000a31c, 0x00000000, 0x00000000, 0x0001c44a, 0x0001c44a,
11358 +        0x0001c44a},
11359 +       {0x0000a320, 0x00000000, 0x00000000, 0x0002064a, 0x0002064a,
11360 +        0x0002064a},
11361 +       {0x0000a324, 0x00000000, 0x00000000, 0x0002484a, 0x0002484a,
11362 +        0x0002484a},
11363 +       {0x0000a328, 0x00000000, 0x00000000, 0x00028a4a, 0x00028a4a,
11364 +        0x00028a4a},
11365 +       {0x0000a32c, 0x00000000, 0x00000000, 0x0002cc4a, 0x0002cc4a,
11366 +        0x0002cc4a},
11367 +       {0x0000a330, 0x00000000, 0x00000000, 0x00030e4a, 0x00030e4a,
11368 +        0x00030e4a},
11369 +       {0x0000a334, 0x00000000, 0x00000000, 0x00034e8a, 0x00034e8a,
11370 +        0x00034e8a},
11371 +       {0x0000a338, 0x00000000, 0x00000000, 0x00038e8c, 0x00038e8c,
11372 +        0x00038e8c},
11373 +       {0x0000a33c, 0x00000000, 0x00000000, 0x0003cecc, 0x0003cecc,
11374 +        0x0003cecc},
11375 +       {0x0000a340, 0x00000000, 0x00000000, 0x00040ed4, 0x00040ed4,
11376 +        0x00040ed4},
11377 +       {0x0000a344, 0x00000000, 0x00000000, 0x00044edc, 0x00044edc,
11378 +        0x00044edc},
11379 +       {0x0000a348, 0x00000000, 0x00000000, 0x00048ede, 0x00048ede,
11380 +        0x00048ede},
11381 +       {0x0000a34c, 0x00000000, 0x00000000, 0x0004cf1e, 0x0004cf1e,
11382 +        0x0004cf1e},
11383 +       {0x0000a350, 0x00000000, 0x00000000, 0x00050f5e, 0x00050f5e,
11384 +        0x00050f5e},
11385 +       {0x0000a354, 0x00000000, 0x00000000, 0x00054f9e, 0x00054f9e,
11386 +        0x00054f9e},
11387 +       {0x0000a780, 0x00000000, 0x00000000, 0x00000062, 0x00000062,
11388 +        0x00000062},
11389 +       {0x0000a784, 0x00000000, 0x00000000, 0x00004064, 0x00004064,
11390 +        0x00004064},
11391 +       {0x0000a788, 0x00000000, 0x00000000, 0x000080a4, 0x000080a4,
11392 +        0x000080a4},
11393 +       {0x0000a78c, 0x00000000, 0x00000000, 0x0000c0aa, 0x0000c0aa,
11394 +        0x0000c0aa},
11395 +       {0x0000a790, 0x00000000, 0x00000000, 0x000100ac, 0x000100ac,
11396 +        0x000100ac},
11397 +       {0x0000a794, 0x00000000, 0x00000000, 0x000140b4, 0x000140b4,
11398 +        0x000140b4},
11399 +       {0x0000a798, 0x00000000, 0x00000000, 0x000180f4, 0x000180f4,
11400 +        0x000180f4},
11401 +       {0x0000a79c, 0x00000000, 0x00000000, 0x0001c134, 0x0001c134,
11402 +        0x0001c134},
11403 +       {0x0000a7a0, 0x00000000, 0x00000000, 0x00020174, 0x00020174,
11404 +        0x00020174},
11405 +       {0x0000a7a4, 0x00000000, 0x00000000, 0x0002417c, 0x0002417c,
11406 +        0x0002417c},
11407 +       {0x0000a7a8, 0x00000000, 0x00000000, 0x0002817e, 0x0002817e,
11408 +        0x0002817e},
11409 +       {0x0000a7ac, 0x00000000, 0x00000000, 0x0002c1be, 0x0002c1be,
11410 +        0x0002c1be},
11411 +       {0x0000a7b0, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe,
11412 +        0x000301fe},
11413 +       {0x0000a7b4, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe,
11414 +        0x000301fe},
11415 +       {0x0000a7b8, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe,
11416 +        0x000301fe},
11417 +       {0x0000a7bc, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe,
11418 +        0x000301fe},
11419 +       {0x0000a7c0, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe,
11420 +        0x000301fe},
11421 +       {0x0000a7c4, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe,
11422 +        0x000301fe},
11423 +       {0x0000a7c8, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe,
11424 +        0x000301fe},
11425 +       {0x0000a7cc, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe,
11426 +        0x000301fe},
11427 +       {0x0000a7d0, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe,
11428 +        0x000301fe},
11429 +       {0x0000a7d4, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe,
11430 +        0x000301fe},
11431 +       {0x0000a274, 0x0a180000, 0x0a180000, 0x0a1aa000, 0x0a1aa000,
11432 +        0x0a1aa000},
11433 +};
11434 +
11435 +static const u_int32_t ar9287Modes_rx_gain_9287_1_1[][6] = {
11436 +       /* Address      5G-HT20     5G-HT40     2G-HT40     2G-HT20     Turbo   */
11437 +       {0x00009a00, 0x00000000, 0x00000000, 0x0000a120, 0x0000a120,
11438 +        0x0000a120},
11439 +       {0x00009a04, 0x00000000, 0x00000000, 0x0000a124, 0x0000a124,
11440 +        0x0000a124},
11441 +       {0x00009a08, 0x00000000, 0x00000000, 0x0000a128, 0x0000a128,
11442 +        0x0000a128},
11443 +       {0x00009a0c, 0x00000000, 0x00000000, 0x0000a12c, 0x0000a12c,
11444 +        0x0000a12c},
11445 +       {0x00009a10, 0x00000000, 0x00000000, 0x0000a130, 0x0000a130,
11446 +        0x0000a130},
11447 +       {0x00009a14, 0x00000000, 0x00000000, 0x0000a194, 0x0000a194,
11448 +        0x0000a194},
11449 +       {0x00009a18, 0x00000000, 0x00000000, 0x0000a198, 0x0000a198,
11450 +        0x0000a198},
11451 +       {0x00009a1c, 0x00000000, 0x00000000, 0x0000a20c, 0x0000a20c,
11452 +        0x0000a20c},
11453 +       {0x00009a20, 0x00000000, 0x00000000, 0x0000a210, 0x0000a210,
11454 +        0x0000a210},
11455 +       {0x00009a24, 0x00000000, 0x00000000, 0x0000a284, 0x0000a284,
11456 +        0x0000a284},
11457 +       {0x00009a28, 0x00000000, 0x00000000, 0x0000a288, 0x0000a288,
11458 +        0x0000a288},
11459 +       {0x00009a2c, 0x00000000, 0x00000000, 0x0000a28c, 0x0000a28c,
11460 +        0x0000a28c},
11461 +       {0x00009a30, 0x00000000, 0x00000000, 0x0000a290, 0x0000a290,
11462 +        0x0000a290},
11463 +       {0x00009a34, 0x00000000, 0x00000000, 0x0000a294, 0x0000a294,
11464 +        0x0000a294},
11465 +       {0x00009a38, 0x00000000, 0x00000000, 0x0000a2a0, 0x0000a2a0,
11466 +        0x0000a2a0},
11467 +       {0x00009a3c, 0x00000000, 0x00000000, 0x0000a2a4, 0x0000a2a4,
11468 +        0x0000a2a4},
11469 +       {0x00009a40, 0x00000000, 0x00000000, 0x0000a2a8, 0x0000a2a8,
11470 +        0x0000a2a8},
11471 +       {0x00009a44, 0x00000000, 0x00000000, 0x0000a2ac, 0x0000a2ac,
11472 +        0x0000a2ac},
11473 +       {0x00009a48, 0x00000000, 0x00000000, 0x0000a2b0, 0x0000a2b0,
11474 +        0x0000a2b0},
11475 +       {0x00009a4c, 0x00000000, 0x00000000, 0x0000a2b4, 0x0000a2b4,
11476 +        0x0000a2b4},
11477 +       {0x00009a50, 0x00000000, 0x00000000, 0x0000a2b8, 0x0000a2b8,
11478 +        0x0000a2b8},
11479 +       {0x00009a54, 0x00000000, 0x00000000, 0x0000a2c4, 0x0000a2c4,
11480 +        0x0000a2c4},
11481 +       {0x00009a58, 0x00000000, 0x00000000, 0x0000a708, 0x0000a708,
11482 +        0x0000a708},
11483 +       {0x00009a5c, 0x00000000, 0x00000000, 0x0000a70c, 0x0000a70c,
11484 +        0x0000a70c},
11485 +       {0x00009a60, 0x00000000, 0x00000000, 0x0000a710, 0x0000a710,
11486 +        0x0000a710},
11487 +       {0x00009a64, 0x00000000, 0x00000000, 0x0000ab04, 0x0000ab04,
11488 +        0x0000ab04},
11489 +       {0x00009a68, 0x00000000, 0x00000000, 0x0000ab08, 0x0000ab08,
11490 +        0x0000ab08},
11491 +       {0x00009a6c, 0x00000000, 0x00000000, 0x0000ab0c, 0x0000ab0c,
11492 +        0x0000ab0c},
11493 +       {0x00009a70, 0x00000000, 0x00000000, 0x0000ab10, 0x0000ab10,
11494 +        0x0000ab10},
11495 +       {0x00009a74, 0x00000000, 0x00000000, 0x0000ab14, 0x0000ab14,
11496 +        0x0000ab14},
11497 +       {0x00009a78, 0x00000000, 0x00000000, 0x0000ab18, 0x0000ab18,
11498 +        0x0000ab18},
11499 +       {0x00009a7c, 0x00000000, 0x00000000, 0x0000ab8c, 0x0000ab8c,
11500 +        0x0000ab8c},
11501 +       {0x00009a80, 0x00000000, 0x00000000, 0x0000ab90, 0x0000ab90,
11502 +        0x0000ab90},
11503 +       {0x00009a84, 0x00000000, 0x00000000, 0x0000ab94, 0x0000ab94,
11504 +        0x0000ab94},
11505 +       {0x00009a88, 0x00000000, 0x00000000, 0x0000ab98, 0x0000ab98,
11506 +        0x0000ab98},
11507 +       {0x00009a8c, 0x00000000, 0x00000000, 0x0000aba4, 0x0000aba4,
11508 +        0x0000aba4},
11509 +       {0x00009a90, 0x00000000, 0x00000000, 0x0000aba8, 0x0000aba8,
11510 +        0x0000aba8},
11511 +       {0x00009a94, 0x00000000, 0x00000000, 0x0000cb04, 0x0000cb04,
11512 +        0x0000cb04},
11513 +       {0x00009a98, 0x00000000, 0x00000000, 0x0000cb08, 0x0000cb08,
11514 +        0x0000cb08},
11515 +       {0x00009a9c, 0x00000000, 0x00000000, 0x0000cb0c, 0x0000cb0c,
11516 +        0x0000cb0c},
11517 +       {0x00009aa0, 0x00000000, 0x00000000, 0x0000cb10, 0x0000cb10,
11518 +        0x0000cb10},
11519 +       {0x00009aa4, 0x00000000, 0x00000000, 0x0000cb14, 0x0000cb14,
11520 +        0x0000cb14},
11521 +       {0x00009aa8, 0x00000000, 0x00000000, 0x0000cb18, 0x0000cb18,
11522 +        0x0000cb18},
11523 +       {0x00009aac, 0x00000000, 0x00000000, 0x0000cb8c, 0x0000cb8c,
11524 +        0x0000cb8c},
11525 +       {0x00009ab0, 0x00000000, 0x00000000, 0x0000cb90, 0x0000cb90,
11526 +        0x0000cb90},
11527 +       {0x00009ab4, 0x00000000, 0x00000000, 0x0000cf18, 0x0000cf18,
11528 +        0x0000cf18},
11529 +       {0x00009ab8, 0x00000000, 0x00000000, 0x0000cf24, 0x0000cf24,
11530 +        0x0000cf24},
11531 +       {0x00009abc, 0x00000000, 0x00000000, 0x0000cf28, 0x0000cf28,
11532 +        0x0000cf28},
11533 +       {0x00009ac0, 0x00000000, 0x00000000, 0x0000d314, 0x0000d314,
11534 +        0x0000d314},
11535 +       {0x00009ac4, 0x00000000, 0x00000000, 0x0000d318, 0x0000d318,
11536 +        0x0000d318},
11537 +       {0x00009ac8, 0x00000000, 0x00000000, 0x0000d38c, 0x0000d38c,
11538 +        0x0000d38c},
11539 +       {0x00009acc, 0x00000000, 0x00000000, 0x0000d390, 0x0000d390,
11540 +        0x0000d390},
11541 +       {0x00009ad0, 0x00000000, 0x00000000, 0x0000d394, 0x0000d394,
11542 +        0x0000d394},
11543 +       {0x00009ad4, 0x00000000, 0x00000000, 0x0000d398, 0x0000d398,
11544 +        0x0000d398},
11545 +       {0x00009ad8, 0x00000000, 0x00000000, 0x0000d3a4, 0x0000d3a4,
11546 +        0x0000d3a4},
11547 +       {0x00009adc, 0x00000000, 0x00000000, 0x0000d3a8, 0x0000d3a8,
11548 +        0x0000d3a8},
11549 +       {0x00009ae0, 0x00000000, 0x00000000, 0x0000d3ac, 0x0000d3ac,
11550 +        0x0000d3ac},
11551 +       {0x00009ae4, 0x00000000, 0x00000000, 0x0000d3b0, 0x0000d3b0,
11552 +        0x0000d3b0},
11553 +       {0x00009ae8, 0x00000000, 0x00000000, 0x0000f380, 0x0000f380,
11554 +        0x0000f380},
11555 +       {0x00009aec, 0x00000000, 0x00000000, 0x0000f384, 0x0000f384,
11556 +        0x0000f384},
11557 +       {0x00009af0, 0x00000000, 0x00000000, 0x0000f388, 0x0000f388,
11558 +        0x0000f388},
11559 +       {0x00009af4, 0x00000000, 0x00000000, 0x0000f710, 0x0000f710,
11560 +        0x0000f710},
11561 +       {0x00009af8, 0x00000000, 0x00000000, 0x0000f714, 0x0000f714,
11562 +        0x0000f714},
11563 +       {0x00009afc, 0x00000000, 0x00000000, 0x0000f718, 0x0000f718,
11564 +        0x0000f718},
11565 +       {0x00009b00, 0x00000000, 0x00000000, 0x0000fb10, 0x0000fb10,
11566 +        0x0000fb10},
11567 +       {0x00009b04, 0x00000000, 0x00000000, 0x0000fb14, 0x0000fb14,
11568 +        0x0000fb14},
11569 +       {0x00009b08, 0x00000000, 0x00000000, 0x0000fb18, 0x0000fb18,
11570 +        0x0000fb18},
11571 +       {0x00009b0c, 0x00000000, 0x00000000, 0x0000fb8c, 0x0000fb8c,
11572 +        0x0000fb8c},
11573 +       {0x00009b10, 0x00000000, 0x00000000, 0x0000fb90, 0x0000fb90,
11574 +        0x0000fb90},
11575 +       {0x00009b14, 0x00000000, 0x00000000, 0x0000fb94, 0x0000fb94,
11576 +        0x0000fb94},
11577 +       {0x00009b18, 0x00000000, 0x00000000, 0x0000ff8c, 0x0000ff8c,
11578 +        0x0000ff8c},
11579 +       {0x00009b1c, 0x00000000, 0x00000000, 0x0000ff90, 0x0000ff90,
11580 +        0x0000ff90},
11581 +       {0x00009b20, 0x00000000, 0x00000000, 0x0000ff94, 0x0000ff94,
11582 +        0x0000ff94},
11583 +       {0x00009b24, 0x00000000, 0x00000000, 0x0000ffa0, 0x0000ffa0,
11584 +        0x0000ffa0},
11585 +       {0x00009b28, 0x00000000, 0x00000000, 0x0000ffa4, 0x0000ffa4,
11586 +        0x0000ffa4},
11587 +       {0x00009b2c, 0x00000000, 0x00000000, 0x0000ffa8, 0x0000ffa8,
11588 +        0x0000ffa8},
11589 +       {0x00009b30, 0x00000000, 0x00000000, 0x0000ffac, 0x0000ffac,
11590 +        0x0000ffac},
11591 +       {0x00009b34, 0x00000000, 0x00000000, 0x0000ffb0, 0x0000ffb0,
11592 +        0x0000ffb0},
11593 +       {0x00009b38, 0x00000000, 0x00000000, 0x0000ffb4, 0x0000ffb4,
11594 +        0x0000ffb4},
11595 +       {0x00009b3c, 0x00000000, 0x00000000, 0x0000ffa1, 0x0000ffa1,
11596 +        0x0000ffa1},
11597 +       {0x00009b40, 0x00000000, 0x00000000, 0x0000ffa5, 0x0000ffa5,
11598 +        0x0000ffa5},
11599 +       {0x00009b44, 0x00000000, 0x00000000, 0x0000ffa9, 0x0000ffa9,
11600 +        0x0000ffa9},
11601 +       {0x00009b48, 0x00000000, 0x00000000, 0x0000ffad, 0x0000ffad,
11602 +        0x0000ffad},
11603 +       {0x00009b4c, 0x00000000, 0x00000000, 0x0000ffb1, 0x0000ffb1,
11604 +        0x0000ffb1},
11605 +       {0x00009b50, 0x00000000, 0x00000000, 0x0000ffb5, 0x0000ffb5,
11606 +        0x0000ffb5},
11607 +       {0x00009b54, 0x00000000, 0x00000000, 0x0000ffb9, 0x0000ffb9,
11608 +        0x0000ffb9},
11609 +       {0x00009b58, 0x00000000, 0x00000000, 0x0000ffc5, 0x0000ffc5,
11610 +        0x0000ffc5},
11611 +       {0x00009b5c, 0x00000000, 0x00000000, 0x0000ffc9, 0x0000ffc9,
11612 +        0x0000ffc9},
11613 +       {0x00009b60, 0x00000000, 0x00000000, 0x0000ffcd, 0x0000ffcd,
11614 +        0x0000ffcd},
11615 +       {0x00009b64, 0x00000000, 0x00000000, 0x0000ffd1, 0x0000ffd1,
11616 +        0x0000ffd1},
11617 +       {0x00009b68, 0x00000000, 0x00000000, 0x0000ffd5, 0x0000ffd5,
11618 +        0x0000ffd5},
11619 +       {0x00009b6c, 0x00000000, 0x00000000, 0x0000ffc2, 0x0000ffc2,
11620 +        0x0000ffc2},
11621 +       {0x00009b70, 0x00000000, 0x00000000, 0x0000ffc6, 0x0000ffc6,
11622 +        0x0000ffc6},
11623 +       {0x00009b74, 0x00000000, 0x00000000, 0x0000ffca, 0x0000ffca,
11624 +        0x0000ffca},
11625 +       {0x00009b78, 0x00000000, 0x00000000, 0x0000ffce, 0x0000ffce,
11626 +        0x0000ffce},
11627 +       {0x00009b7c, 0x00000000, 0x00000000, 0x0000ffd2, 0x0000ffd2,
11628 +        0x0000ffd2},
11629 +       {0x00009b80, 0x00000000, 0x00000000, 0x0000ffd6, 0x0000ffd6,
11630 +        0x0000ffd6},
11631 +       {0x00009b84, 0x00000000, 0x00000000, 0x0000ffda, 0x0000ffda,
11632 +        0x0000ffda},
11633 +       {0x00009b88, 0x00000000, 0x00000000, 0x0000ffc7, 0x0000ffc7,
11634 +        0x0000ffc7},
11635 +       {0x00009b8c, 0x00000000, 0x00000000, 0x0000ffcb, 0x0000ffcb,
11636 +        0x0000ffcb},
11637 +       {0x00009b90, 0x00000000, 0x00000000, 0x0000ffcf, 0x0000ffcf,
11638 +        0x0000ffcf},
11639 +       {0x00009b94, 0x00000000, 0x00000000, 0x0000ffd3, 0x0000ffd3,
11640 +        0x0000ffd3},
11641 +       {0x00009b98, 0x00000000, 0x00000000, 0x0000ffd7, 0x0000ffd7,
11642 +        0x0000ffd7},
11643 +       {0x00009b9c, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11644 +        0x0000ffdb},
11645 +       {0x00009ba0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11646 +        0x0000ffdb},
11647 +       {0x00009ba4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11648 +        0x0000ffdb},
11649 +       {0x00009ba8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11650 +        0x0000ffdb},
11651 +       {0x00009bac, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11652 +        0x0000ffdb},
11653 +       {0x00009bb0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11654 +        0x0000ffdb},
11655 +       {0x00009bb4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11656 +        0x0000ffdb},
11657 +       {0x00009bb8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11658 +        0x0000ffdb},
11659 +       {0x00009bbc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11660 +        0x0000ffdb},
11661 +       {0x00009bc0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11662 +        0x0000ffdb},
11663 +       {0x00009bc4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11664 +        0x0000ffdb},
11665 +       {0x00009bc8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11666 +        0x0000ffdb},
11667 +       {0x00009bcc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11668 +        0x0000ffdb},
11669 +       {0x00009bd0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11670 +        0x0000ffdb},
11671 +       {0x00009bd4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11672 +        0x0000ffdb},
11673 +       {0x00009bd8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11674 +        0x0000ffdb},
11675 +       {0x00009bdc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11676 +        0x0000ffdb},
11677 +       {0x00009be0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11678 +        0x0000ffdb},
11679 +       {0x00009be4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11680 +        0x0000ffdb},
11681 +       {0x00009be8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11682 +        0x0000ffdb},
11683 +       {0x00009bec, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11684 +        0x0000ffdb},
11685 +       {0x00009bf0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11686 +        0x0000ffdb},
11687 +       {0x00009bf4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11688 +        0x0000ffdb},
11689 +       {0x00009bf8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11690 +        0x0000ffdb},
11691 +       {0x00009bfc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11692 +        0x0000ffdb},
11693 +       {0x0000aa00, 0x00000000, 0x00000000, 0x0000a120, 0x0000a120,
11694 +        0x0000a120},
11695 +       {0x0000aa04, 0x00000000, 0x00000000, 0x0000a124, 0x0000a124,
11696 +        0x0000a124},
11697 +       {0x0000aa08, 0x00000000, 0x00000000, 0x0000a128, 0x0000a128,
11698 +        0x0000a128},
11699 +       {0x0000aa0c, 0x00000000, 0x00000000, 0x0000a12c, 0x0000a12c,
11700 +        0x0000a12c},
11701 +       {0x0000aa10, 0x00000000, 0x00000000, 0x0000a130, 0x0000a130,
11702 +        0x0000a130},
11703 +       {0x0000aa14, 0x00000000, 0x00000000, 0x0000a194, 0x0000a194,
11704 +        0x0000a194},
11705 +       {0x0000aa18, 0x00000000, 0x00000000, 0x0000a198, 0x0000a198,
11706 +        0x0000a198},
11707 +       {0x0000aa1c, 0x00000000, 0x00000000, 0x0000a20c, 0x0000a20c,
11708 +        0x0000a20c},
11709 +       {0x0000aa20, 0x00000000, 0x00000000, 0x0000a210, 0x0000a210,
11710 +        0x0000a210},
11711 +       {0x0000aa24, 0x00000000, 0x00000000, 0x0000a284, 0x0000a284,
11712 +        0x0000a284},
11713 +       {0x0000aa28, 0x00000000, 0x00000000, 0x0000a288, 0x0000a288,
11714 +        0x0000a288},
11715 +       {0x0000aa2c, 0x00000000, 0x00000000, 0x0000a28c, 0x0000a28c,
11716 +        0x0000a28c},
11717 +       {0x0000aa30, 0x00000000, 0x00000000, 0x0000a290, 0x0000a290,
11718 +        0x0000a290},
11719 +       {0x0000aa34, 0x00000000, 0x00000000, 0x0000a294, 0x0000a294,
11720 +        0x0000a294},
11721 +       {0x0000aa38, 0x00000000, 0x00000000, 0x0000a2a0, 0x0000a2a0,
11722 +        0x0000a2a0},
11723 +       {0x0000aa3c, 0x00000000, 0x00000000, 0x0000a2a4, 0x0000a2a4,
11724 +        0x0000a2a4},
11725 +       {0x0000aa40, 0x00000000, 0x00000000, 0x0000a2a8, 0x0000a2a8,
11726 +        0x0000a2a8},
11727 +       {0x0000aa44, 0x00000000, 0x00000000, 0x0000a2ac, 0x0000a2ac,
11728 +        0x0000a2ac},
11729 +       {0x0000aa48, 0x00000000, 0x00000000, 0x0000a2b0, 0x0000a2b0,
11730 +        0x0000a2b0},
11731 +       {0x0000aa4c, 0x00000000, 0x00000000, 0x0000a2b4, 0x0000a2b4,
11732 +        0x0000a2b4},
11733 +       {0x0000aa50, 0x00000000, 0x00000000, 0x0000a2b8, 0x0000a2b8,
11734 +        0x0000a2b8},
11735 +       {0x0000aa54, 0x00000000, 0x00000000, 0x0000a2c4, 0x0000a2c4,
11736 +        0x0000a2c4},
11737 +       {0x0000aa58, 0x00000000, 0x00000000, 0x0000a708, 0x0000a708,
11738 +        0x0000a708},
11739 +       {0x0000aa5c, 0x00000000, 0x00000000, 0x0000a70c, 0x0000a70c,
11740 +        0x0000a70c},
11741 +       {0x0000aa60, 0x00000000, 0x00000000, 0x0000a710, 0x0000a710,
11742 +        0x0000a710},
11743 +       {0x0000aa64, 0x00000000, 0x00000000, 0x0000ab04, 0x0000ab04,
11744 +        0x0000ab04},
11745 +       {0x0000aa68, 0x00000000, 0x00000000, 0x0000ab08, 0x0000ab08,
11746 +        0x0000ab08},
11747 +       {0x0000aa6c, 0x00000000, 0x00000000, 0x0000ab0c, 0x0000ab0c,
11748 +        0x0000ab0c},
11749 +       {0x0000aa70, 0x00000000, 0x00000000, 0x0000ab10, 0x0000ab10,
11750 +        0x0000ab10},
11751 +       {0x0000aa74, 0x00000000, 0x00000000, 0x0000ab14, 0x0000ab14,
11752 +        0x0000ab14},
11753 +       {0x0000aa78, 0x00000000, 0x00000000, 0x0000ab18, 0x0000ab18,
11754 +        0x0000ab18},
11755 +       {0x0000aa7c, 0x00000000, 0x00000000, 0x0000ab8c, 0x0000ab8c,
11756 +        0x0000ab8c},
11757 +       {0x0000aa80, 0x00000000, 0x00000000, 0x0000ab90, 0x0000ab90,
11758 +        0x0000ab90},
11759 +       {0x0000aa84, 0x00000000, 0x00000000, 0x0000ab94, 0x0000ab94,
11760 +        0x0000ab94},
11761 +       {0x0000aa88, 0x00000000, 0x00000000, 0x0000ab98, 0x0000ab98,
11762 +        0x0000ab98},
11763 +       {0x0000aa8c, 0x00000000, 0x00000000, 0x0000aba4, 0x0000aba4,
11764 +        0x0000aba4},
11765 +       {0x0000aa90, 0x00000000, 0x00000000, 0x0000aba8, 0x0000aba8,
11766 +        0x0000aba8},
11767 +       {0x0000aa94, 0x00000000, 0x00000000, 0x0000cb04, 0x0000cb04,
11768 +        0x0000cb04},
11769 +       {0x0000aa98, 0x00000000, 0x00000000, 0x0000cb08, 0x0000cb08,
11770 +        0x0000cb08},
11771 +       {0x0000aa9c, 0x00000000, 0x00000000, 0x0000cb0c, 0x0000cb0c,
11772 +        0x0000cb0c},
11773 +       {0x0000aaa0, 0x00000000, 0x00000000, 0x0000cb10, 0x0000cb10,
11774 +        0x0000cb10},
11775 +       {0x0000aaa4, 0x00000000, 0x00000000, 0x0000cb14, 0x0000cb14,
11776 +        0x0000cb14},
11777 +       {0x0000aaa8, 0x00000000, 0x00000000, 0x0000cb18, 0x0000cb18,
11778 +        0x0000cb18},
11779 +       {0x0000aaac, 0x00000000, 0x00000000, 0x0000cb8c, 0x0000cb8c,
11780 +        0x0000cb8c},
11781 +       {0x0000aab0, 0x00000000, 0x00000000, 0x0000cb90, 0x0000cb90,
11782 +        0x0000cb90},
11783 +       {0x0000aab4, 0x00000000, 0x00000000, 0x0000cf18, 0x0000cf18,
11784 +        0x0000cf18},
11785 +       {0x0000aab8, 0x00000000, 0x00000000, 0x0000cf24, 0x0000cf24,
11786 +        0x0000cf24},
11787 +       {0x0000aabc, 0x00000000, 0x00000000, 0x0000cf28, 0x0000cf28,
11788 +        0x0000cf28},
11789 +       {0x0000aac0, 0x00000000, 0x00000000, 0x0000d314, 0x0000d314,
11790 +        0x0000d314},
11791 +       {0x0000aac4, 0x00000000, 0x00000000, 0x0000d318, 0x0000d318,
11792 +        0x0000d318},
11793 +       {0x0000aac8, 0x00000000, 0x00000000, 0x0000d38c, 0x0000d38c,
11794 +        0x0000d38c},
11795 +       {0x0000aacc, 0x00000000, 0x00000000, 0x0000d390, 0x0000d390,
11796 +        0x0000d390},
11797 +       {0x0000aad0, 0x00000000, 0x00000000, 0x0000d394, 0x0000d394,
11798 +        0x0000d394},
11799 +       {0x0000aad4, 0x00000000, 0x00000000, 0x0000d398, 0x0000d398,
11800 +        0x0000d398},
11801 +       {0x0000aad8, 0x00000000, 0x00000000, 0x0000d3a4, 0x0000d3a4,
11802 +        0x0000d3a4},
11803 +       {0x0000aadc, 0x00000000, 0x00000000, 0x0000d3a8, 0x0000d3a8,
11804 +        0x0000d3a8},
11805 +       {0x0000aae0, 0x00000000, 0x00000000, 0x0000d3ac, 0x0000d3ac,
11806 +        0x0000d3ac},
11807 +       {0x0000aae4, 0x00000000, 0x00000000, 0x0000d3b0, 0x0000d3b0,
11808 +        0x0000d3b0},
11809 +       {0x0000aae8, 0x00000000, 0x00000000, 0x0000f380, 0x0000f380,
11810 +        0x0000f380},
11811 +       {0x0000aaec, 0x00000000, 0x00000000, 0x0000f384, 0x0000f384,
11812 +        0x0000f384},
11813 +       {0x0000aaf0, 0x00000000, 0x00000000, 0x0000f388, 0x0000f388,
11814 +        0x0000f388},
11815 +       {0x0000aaf4, 0x00000000, 0x00000000, 0x0000f710, 0x0000f710,
11816 +        0x0000f710},
11817 +       {0x0000aaf8, 0x00000000, 0x00000000, 0x0000f714, 0x0000f714,
11818 +        0x0000f714},
11819 +       {0x0000aafc, 0x00000000, 0x00000000, 0x0000f718, 0x0000f718,
11820 +        0x0000f718},
11821 +       {0x0000ab00, 0x00000000, 0x00000000, 0x0000fb10, 0x0000fb10,
11822 +        0x0000fb10},
11823 +       {0x0000ab04, 0x00000000, 0x00000000, 0x0000fb14, 0x0000fb14,
11824 +        0x0000fb14},
11825 +       {0x0000ab08, 0x00000000, 0x00000000, 0x0000fb18, 0x0000fb18,
11826 +        0x0000fb18},
11827 +       {0x0000ab0c, 0x00000000, 0x00000000, 0x0000fb8c, 0x0000fb8c,
11828 +        0x0000fb8c},
11829 +       {0x0000ab10, 0x00000000, 0x00000000, 0x0000fb90, 0x0000fb90,
11830 +        0x0000fb90},
11831 +       {0x0000ab14, 0x00000000, 0x00000000, 0x0000fb94, 0x0000fb94,
11832 +        0x0000fb94},
11833 +       {0x0000ab18, 0x00000000, 0x00000000, 0x0000ff8c, 0x0000ff8c,
11834 +        0x0000ff8c},
11835 +       {0x0000ab1c, 0x00000000, 0x00000000, 0x0000ff90, 0x0000ff90,
11836 +        0x0000ff90},
11837 +       {0x0000ab20, 0x00000000, 0x00000000, 0x0000ff94, 0x0000ff94,
11838 +        0x0000ff94},
11839 +       {0x0000ab24, 0x00000000, 0x00000000, 0x0000ffa0, 0x0000ffa0,
11840 +        0x0000ffa0},
11841 +       {0x0000ab28, 0x00000000, 0x00000000, 0x0000ffa4, 0x0000ffa4,
11842 +        0x0000ffa4},
11843 +       {0x0000ab2c, 0x00000000, 0x00000000, 0x0000ffa8, 0x0000ffa8,
11844 +        0x0000ffa8},
11845 +       {0x0000ab30, 0x00000000, 0x00000000, 0x0000ffac, 0x0000ffac,
11846 +        0x0000ffac},
11847 +       {0x0000ab34, 0x00000000, 0x00000000, 0x0000ffb0, 0x0000ffb0,
11848 +        0x0000ffb0},
11849 +       {0x0000ab38, 0x00000000, 0x00000000, 0x0000ffb4, 0x0000ffb4,
11850 +        0x0000ffb4},
11851 +       {0x0000ab3c, 0x00000000, 0x00000000, 0x0000ffa1, 0x0000ffa1,
11852 +        0x0000ffa1},
11853 +       {0x0000ab40, 0x00000000, 0x00000000, 0x0000ffa5, 0x0000ffa5,
11854 +        0x0000ffa5},
11855 +       {0x0000ab44, 0x00000000, 0x00000000, 0x0000ffa9, 0x0000ffa9,
11856 +        0x0000ffa9},
11857 +       {0x0000ab48, 0x00000000, 0x00000000, 0x0000ffad, 0x0000ffad,
11858 +        0x0000ffad},
11859 +       {0x0000ab4c, 0x00000000, 0x00000000, 0x0000ffb1, 0x0000ffb1,
11860 +        0x0000ffb1},
11861 +       {0x0000ab50, 0x00000000, 0x00000000, 0x0000ffb5, 0x0000ffb5,
11862 +        0x0000ffb5},
11863 +       {0x0000ab54, 0x00000000, 0x00000000, 0x0000ffb9, 0x0000ffb9,
11864 +        0x0000ffb9},
11865 +       {0x0000ab58, 0x00000000, 0x00000000, 0x0000ffc5, 0x0000ffc5,
11866 +        0x0000ffc5},
11867 +       {0x0000ab5c, 0x00000000, 0x00000000, 0x0000ffc9, 0x0000ffc9,
11868 +        0x0000ffc9},
11869 +       {0x0000ab60, 0x00000000, 0x00000000, 0x0000ffcd, 0x0000ffcd,
11870 +        0x0000ffcd},
11871 +       {0x0000ab64, 0x00000000, 0x00000000, 0x0000ffd1, 0x0000ffd1,
11872 +        0x0000ffd1},
11873 +       {0x0000ab68, 0x00000000, 0x00000000, 0x0000ffd5, 0x0000ffd5,
11874 +        0x0000ffd5},
11875 +       {0x0000ab6c, 0x00000000, 0x00000000, 0x0000ffc2, 0x0000ffc2,
11876 +        0x0000ffc2},
11877 +       {0x0000ab70, 0x00000000, 0x00000000, 0x0000ffc6, 0x0000ffc6,
11878 +        0x0000ffc6},
11879 +       {0x0000ab74, 0x00000000, 0x00000000, 0x0000ffca, 0x0000ffca,
11880 +        0x0000ffca},
11881 +       {0x0000ab78, 0x00000000, 0x00000000, 0x0000ffce, 0x0000ffce,
11882 +        0x0000ffce},
11883 +       {0x0000ab7c, 0x00000000, 0x00000000, 0x0000ffd2, 0x0000ffd2,
11884 +        0x0000ffd2},
11885 +       {0x0000ab80, 0x00000000, 0x00000000, 0x0000ffd6, 0x0000ffd6,
11886 +        0x0000ffd6},
11887 +       {0x0000ab84, 0x00000000, 0x00000000, 0x0000ffda, 0x0000ffda,
11888 +        0x0000ffda},
11889 +       {0x0000ab88, 0x00000000, 0x00000000, 0x0000ffc7, 0x0000ffc7,
11890 +        0x0000ffc7},
11891 +       {0x0000ab8c, 0x00000000, 0x00000000, 0x0000ffcb, 0x0000ffcb,
11892 +        0x0000ffcb},
11893 +       {0x0000ab90, 0x00000000, 0x00000000, 0x0000ffcf, 0x0000ffcf,
11894 +        0x0000ffcf},
11895 +       {0x0000ab94, 0x00000000, 0x00000000, 0x0000ffd3, 0x0000ffd3,
11896 +        0x0000ffd3},
11897 +       {0x0000ab98, 0x00000000, 0x00000000, 0x0000ffd7, 0x0000ffd7,
11898 +        0x0000ffd7},
11899 +       {0x0000ab9c, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11900 +        0x0000ffdb},
11901 +       {0x0000aba0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11902 +        0x0000ffdb},
11903 +       {0x0000aba4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11904 +        0x0000ffdb},
11905 +       {0x0000aba8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11906 +        0x0000ffdb},
11907 +       {0x0000abac, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11908 +        0x0000ffdb},
11909 +       {0x0000abb0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11910 +        0x0000ffdb},
11911 +       {0x0000abb4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11912 +        0x0000ffdb},
11913 +       {0x0000abb8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11914 +        0x0000ffdb},
11915 +       {0x0000abbc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11916 +        0x0000ffdb},
11917 +       {0x0000abc0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11918 +        0x0000ffdb},
11919 +       {0x0000abc4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11920 +        0x0000ffdb},
11921 +       {0x0000abc8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11922 +        0x0000ffdb},
11923 +       {0x0000abcc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11924 +        0x0000ffdb},
11925 +       {0x0000abd0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11926 +        0x0000ffdb},
11927 +       {0x0000abd4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11928 +        0x0000ffdb},
11929 +       {0x0000abd8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11930 +        0x0000ffdb},
11931 +       {0x0000abdc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11932 +        0x0000ffdb},
11933 +       {0x0000abe0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11934 +        0x0000ffdb},
11935 +       {0x0000abe4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11936 +        0x0000ffdb},
11937 +       {0x0000abe8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11938 +        0x0000ffdb},
11939 +       {0x0000abec, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11940 +        0x0000ffdb},
11941 +       {0x0000abf0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11942 +        0x0000ffdb},
11943 +       {0x0000abf4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11944 +        0x0000ffdb},
11945 +       {0x0000abf8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11946 +        0x0000ffdb},
11947 +       {0x0000abfc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb,
11948 +        0x0000ffdb},
11949 +       {0x00009848, 0x00000000, 0x00000000, 0x00001067, 0x00001067,
11950 +        0x00001067},
11951 +       {0x0000a848, 0x00000000, 0x00000000, 0x00001067, 0x00001067,
11952 +        0x00001067},
11953 +};
11954 +
11955 +static const u_int32_t ar9287PciePhy_clkreq_always_on_L1_9287_1_1[][2] = {
11956 +       {0x00004040, 0x9248fd00},
11957 +       {0x00004040, 0x24924924},
11958 +       {0x00004040, 0xa8000019},
11959 +       {0x00004040, 0x13160820},
11960 +       {0x00004040, 0xe5980560},
11961 +       {0x00004040, 0xc01dcffd},
11962 +       {0x00004040, 0x1aaabe41},
11963 +       {0x00004040, 0xbe105554},
11964 +       {0x00004040, 0x00043007},
11965 +       {0x00004044, 0x00000000},
11966 +};
11967 +
11968 +static const u_int32_t ar9287PciePhy_clkreq_off_L1_9287_1_1[][2] = {
11969 +       {0x00004040, 0x9248fd00},
11970 +       {0x00004040, 0x24924924},
11971 +       {0x00004040, 0xa8000019},
11972 +       {0x00004040, 0x13160820},
11973 +       {0x00004040, 0xe5980560},
11974 +       {0x00004040, 0xc01dcffc},
11975 +       {0x00004040, 0x1aaabe41},
11976 +       {0x00004040, 0xbe105554},
11977 +       {0x00004040, 0x00043007},
11978 +       {0x00004044, 0x00000000},
11979 +};
11980 +
11981 +/* AR9271 initialization values automaticaly created: 06/04/09 */
11982 +static const u_int32_t ar9271Modes_9271[][6] = {
11983 +       {0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160,
11984 +        0x000001e0},
11985 +       {0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c,
11986 +        0x000001e0},
11987 +       {0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38,
11988 +        0x00001180},
11989 +       {0x000010f0, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
11990 +        0x00000008},
11991 +       {0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00,
11992 +        0x06e006e0},
11993 +       {0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b,
11994 +        0x0988004f},
11995 +       {0x00008318, 0x00003e80, 0x00007d00, 0x00006880, 0x00003440,
11996 +        0x00006880},
11997 +       {0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300,
11998 +        0x00000303},
11999 +       {0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200,
12000 +        0x02020200},
12001 +       {0x00009824, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e,
12002 +        0x01000e0e},
12003 +       {0x00009828, 0x3a020001, 0x3a020001, 0x3a020001, 0x3a020001,
12004 +        0x3a020001},
12005 +       {0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e,
12006 +        0x00000e0e},
12007 +       {0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007,
12008 +        0x00000007},
12009 +       {0x00009840, 0x206a012e, 0x206a012e, 0x206a012e, 0x206a012e,
12010 +        0x206a012e},
12011 +       {0x00009844, 0x0372161e, 0x0372161e, 0x03721620, 0x03721620,
12012 +        0x037216a0},
12013 +       {0x00009848, 0x00001066, 0x00001066, 0x00001053, 0x00001053,
12014 +        0x00001059},
12015 +       {0x0000a848, 0x00001066, 0x00001066, 0x00001053, 0x00001053,
12016 +        0x00001059},
12017 +       {0x00009850, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2,
12018 +        0x6d4000e2},
12019 +       {0x00009858, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e,
12020 +        0x7ec84d2e},
12021 +       {0x0000985c, 0x3139605e, 0x3139605e, 0x3137605e, 0x3137605e,
12022 +        0x3139605e},
12023 +       {0x00009860, 0x00058d18, 0x00058d18, 0x00058d18, 0x00058d18,
12024 +        0x00058d18},
12025 +       {0x00009864, 0x0000fe00, 0x0000fe00, 0x0001ce00, 0x0001ce00,
12026 +        0x0001ce00},
12027 +       {0x00009868, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0,
12028 +        0x5ac640d0},
12029 +       {0x0000986c, 0x06903081, 0x06903081, 0x06903881, 0x06903881,
12030 +        0x06903881},
12031 +       {0x00009910, 0x30002310, 0x30002310, 0x30002310, 0x30002310,
12032 +        0x30002310},
12033 +       {0x00009914, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898,
12034 +        0x000007d0},
12035 +       {0x00009918, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b,
12036 +        0x00000016},
12037 +       {0x00009924, 0xd00a8007, 0xd00a8007, 0xd00a800d, 0xd00a800d,
12038 +        0xd00a800d},
12039 +       {0x00009944, 0xffbc1010, 0xffbc1010, 0xffbc1020, 0xffbc1020,
12040 +        0xffbc1010},
12041 +       {0x00009960, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
12042 +        0x00000000},
12043 +       {0x00009964, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
12044 +        0x00000000},
12045 +       {0x000099b8, 0x0000421c, 0x0000421c, 0x0000421c, 0x0000421c,
12046 +        0x0000421c},
12047 +       {0x000099bc, 0x00000600, 0x00000600, 0x00000c00, 0x00000c00,
12048 +        0x00000c00},
12049 +       {0x000099c0, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4,
12050 +        0x05eea6d4},
12051 +       {0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77,
12052 +        0x06336f77},
12053 +       {0x000099c8, 0x6af6532f, 0x6af6532f, 0x6af6532f, 0x6af6532f,
12054 +        0x6af6532f},
12055 +       {0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8,
12056 +        0x08f186c8},
12057 +       {0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384,
12058 +        0x00046384},
12059 +       {0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
12060 +        0x00000000},
12061 +       {0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
12062 +        0x00000000},
12063 +       {0x00009a00, 0x00000000, 0x00000000, 0x00058084, 0x00058084,
12064 +        0x00000000},
12065 +       {0x00009a04, 0x00000000, 0x00000000, 0x00058088, 0x00058088,
12066 +        0x00000000},
12067 +       {0x00009a08, 0x00000000, 0x00000000, 0x0005808c, 0x0005808c,
12068 +        0x00000000},
12069 +       {0x00009a0c, 0x00000000, 0x00000000, 0x00058100, 0x00058100,
12070 +        0x00000000},
12071 +       {0x00009a10, 0x00000000, 0x00000000, 0x00058104, 0x00058104,
12072 +        0x00000000},
12073 +       {0x00009a14, 0x00000000, 0x00000000, 0x00058108, 0x00058108,
12074 +        0x00000000},
12075 +       {0x00009a18, 0x00000000, 0x00000000, 0x0005810c, 0x0005810c,
12076 +        0x00000000},
12077 +       {0x00009a1c, 0x00000000, 0x00000000, 0x00058110, 0x00058110,
12078 +        0x00000000},
12079 +       {0x00009a20, 0x00000000, 0x00000000, 0x00058114, 0x00058114,
12080 +        0x00000000},
12081 +       {0x00009a24, 0x00000000, 0x00000000, 0x00058180, 0x00058180,
12082 +        0x00000000},
12083 +       {0x00009a28, 0x00000000, 0x00000000, 0x00058184, 0x00058184,
12084 +        0x00000000},
12085 +       {0x00009a2c, 0x00000000, 0x00000000, 0x00058188, 0x00058188,
12086 +        0x00000000},
12087 +       {0x00009a30, 0x00000000, 0x00000000, 0x0005818c, 0x0005818c,
12088 +        0x00000000},
12089 +       {0x00009a34, 0x00000000, 0x00000000, 0x00058190, 0x00058190,
12090 +        0x00000000},
12091 +       {0x00009a38, 0x00000000, 0x00000000, 0x00058194, 0x00058194,
12092 +        0x00000000},
12093 +       {0x00009a3c, 0x00000000, 0x00000000, 0x000581a0, 0x000581a0,
12094 +        0x00000000},
12095 +       {0x00009a40, 0x00000000, 0x00000000, 0x0005820c, 0x0005820c,
12096 +        0x00000000},
12097 +       {0x00009a44, 0x00000000, 0x00000000, 0x000581a8, 0x000581a8,
12098 +        0x00000000},
12099 +       {0x00009a48, 0x00000000, 0x00000000, 0x00058284, 0x00058284,
12100 +        0x00000000},
12101 +       {0x00009a4c, 0x00000000, 0x00000000, 0x00058288, 0x00058288,
12102 +        0x00000000},
12103 +       {0x00009a50, 0x00000000, 0x00000000, 0x00058224, 0x00058224,
12104 +        0x00000000},
12105 +       {0x00009a54, 0x00000000, 0x00000000, 0x00058290, 0x00058290,
12106 +        0x00000000},
12107 +       {0x00009a58, 0x00000000, 0x00000000, 0x00058300, 0x00058300,
12108 +        0x00000000},
12109 +       {0x00009a5c, 0x00000000, 0x00000000, 0x00058304, 0x00058304,
12110 +        0x00000000},
12111 +       {0x00009a60, 0x00000000, 0x00000000, 0x00058308, 0x00058308,
12112 +        0x00000000},
12113 +       {0x00009a64, 0x00000000, 0x00000000, 0x0005830c, 0x0005830c,
12114 +        0x00000000},
12115 +       {0x00009a68, 0x00000000, 0x00000000, 0x00058380, 0x00058380,
12116 +        0x00000000},
12117 +       {0x00009a6c, 0x00000000, 0x00000000, 0x00058384, 0x00058384,
12118 +        0x00000000},
12119 +       {0x00009a70, 0x00000000, 0x00000000, 0x00068700, 0x00068700,
12120 +        0x00000000},
12121 +       {0x00009a74, 0x00000000, 0x00000000, 0x00068704, 0x00068704,
12122 +        0x00000000},
12123 +       {0x00009a78, 0x00000000, 0x00000000, 0x00068708, 0x00068708,
12124 +        0x00000000},
12125 +       {0x00009a7c, 0x00000000, 0x00000000, 0x0006870c, 0x0006870c,
12126 +        0x00000000},
12127 +       {0x00009a80, 0x00000000, 0x00000000, 0x00068780, 0x00068780,
12128 +        0x00000000},
12129 +       {0x00009a84, 0x00000000, 0x00000000, 0x00068784, 0x00068784,
12130 +        0x00000000},
12131 +       {0x00009a88, 0x00000000, 0x00000000, 0x00078b00, 0x00078b00,
12132 +        0x00000000},
12133 +       {0x00009a8c, 0x00000000, 0x00000000, 0x00078b04, 0x00078b04,
12134 +        0x00000000},
12135 +       {0x00009a90, 0x00000000, 0x00000000, 0x00078b08, 0x00078b08,
12136 +        0x00000000},
12137 +       {0x00009a94, 0x00000000, 0x00000000, 0x00078b0c, 0x00078b0c,
12138 +        0x00000000},
12139 +       {0x00009a98, 0x00000000, 0x00000000, 0x00078b80, 0x00078b80,
12140 +        0x00000000},
12141 +       {0x00009a9c, 0x00000000, 0x00000000, 0x00078b84, 0x00078b84,
12142 +        0x00000000},
12143 +       {0x00009aa0, 0x00000000, 0x00000000, 0x00078b88, 0x00078b88,
12144 +        0x00000000},
12145 +       {0x00009aa4, 0x00000000, 0x00000000, 0x00078b8c, 0x00078b8c,
12146 +        0x00000000},
12147 +       {0x00009aa8, 0x00000000, 0x00000000, 0x00078b90, 0x00078b90,
12148 +        0x00000000},
12149 +       {0x00009aac, 0x00000000, 0x00000000, 0x000caf80, 0x000caf80,
12150 +        0x00000000},
12151 +       {0x00009ab0, 0x00000000, 0x00000000, 0x000caf84, 0x000caf84,
12152 +        0x00000000},
12153 +       {0x00009ab4, 0x00000000, 0x00000000, 0x000caf88, 0x000caf88,
12154 +        0x00000000},
12155 +       {0x00009ab8, 0x00000000, 0x00000000, 0x000caf8c, 0x000caf8c,
12156 +        0x00000000},
12157 +       {0x00009abc, 0x00000000, 0x00000000, 0x000caf90, 0x000caf90,
12158 +        0x00000000},
12159 +       {0x00009ac0, 0x00000000, 0x00000000, 0x000db30c, 0x000db30c,
12160 +        0x00000000},
12161 +       {0x00009ac4, 0x00000000, 0x00000000, 0x000db310, 0x000db310,
12162 +        0x00000000},
12163 +       {0x00009ac8, 0x00000000, 0x00000000, 0x000db384, 0x000db384,
12164 +        0x00000000},
12165 +       {0x00009acc, 0x00000000, 0x00000000, 0x000db388, 0x000db388,
12166 +        0x00000000},
12167 +       {0x00009ad0, 0x00000000, 0x00000000, 0x000db324, 0x000db324,
12168 +        0x00000000},
12169 +       {0x00009ad4, 0x00000000, 0x00000000, 0x000eb704, 0x000eb704,
12170 +        0x00000000},
12171 +       {0x00009ad8, 0x00000000, 0x00000000, 0x000eb6a4, 0x000eb6a4,
12172 +        0x00000000},
12173 +       {0x00009adc, 0x00000000, 0x00000000, 0x000eb6a8, 0x000eb6a8,
12174 +        0x00000000},
12175 +       {0x00009ae0, 0x00000000, 0x00000000, 0x000eb710, 0x000eb710,
12176 +        0x00000000},
12177 +       {0x00009ae4, 0x00000000, 0x00000000, 0x000eb714, 0x000eb714,
12178 +        0x00000000},
12179 +       {0x00009ae8, 0x00000000, 0x00000000, 0x000eb720, 0x000eb720,
12180 +        0x00000000},
12181 +       {0x00009aec, 0x00000000, 0x00000000, 0x000eb724, 0x000eb724,
12182 +        0x00000000},
12183 +       {0x00009af0, 0x00000000, 0x00000000, 0x000eb728, 0x000eb728,
12184 +        0x00000000},
12185 +       {0x00009af4, 0x00000000, 0x00000000, 0x000eb72c, 0x000eb72c,
12186 +        0x00000000},
12187 +       {0x00009af8, 0x00000000, 0x00000000, 0x000eb7a0, 0x000eb7a0,
12188 +        0x00000000},
12189 +       {0x00009afc, 0x00000000, 0x00000000, 0x000eb7a4, 0x000eb7a4,
12190 +        0x00000000},
12191 +       {0x00009b00, 0x00000000, 0x00000000, 0x000eb7a8, 0x000eb7a8,
12192 +        0x00000000},
12193 +       {0x00009b04, 0x00000000, 0x00000000, 0x000eb7b0, 0x000eb7b0,
12194 +        0x00000000},
12195 +       {0x00009b08, 0x00000000, 0x00000000, 0x000eb7b4, 0x000eb7b4,
12196 +        0x00000000},
12197 +       {0x00009b0c, 0x00000000, 0x00000000, 0x000eb7b8, 0x000eb7b8,
12198 +        0x00000000},
12199 +       {0x00009b10, 0x00000000, 0x00000000, 0x000eb7a5, 0x000eb7a5,
12200 +        0x00000000},
12201 +       {0x00009b14, 0x00000000, 0x00000000, 0x000eb7a9, 0x000eb7a9,
12202 +        0x00000000},
12203 +       {0x00009b18, 0x00000000, 0x00000000, 0x000eb7ad, 0x000eb7ad,
12204 +        0x00000000},
12205 +       {0x00009b1c, 0x00000000, 0x00000000, 0x000eb7b1, 0x000eb7b1,
12206 +        0x00000000},
12207 +       {0x00009b20, 0x00000000, 0x00000000, 0x000eb7b5, 0x000eb7b5,
12208 +        0x00000000},
12209 +       {0x00009b24, 0x00000000, 0x00000000, 0x000eb7b9, 0x000eb7b9,
12210 +        0x00000000},
12211 +       {0x00009b28, 0x00000000, 0x00000000, 0x000eb7c5, 0x000eb7c5,
12212 +        0x00000000},
12213 +       {0x00009b2c, 0x00000000, 0x00000000, 0x000eb7c9, 0x000eb7c9,
12214 +        0x00000000},
12215 +       {0x00009b30, 0x00000000, 0x00000000, 0x000eb7d1, 0x000eb7d1,
12216 +        0x00000000},
12217 +       {0x00009b34, 0x00000000, 0x00000000, 0x000eb7d5, 0x000eb7d5,
12218 +        0x00000000},
12219 +       {0x00009b38, 0x00000000, 0x00000000, 0x000eb7d9, 0x000eb7d9,
12220 +        0x00000000},
12221 +       {0x00009b3c, 0x00000000, 0x00000000, 0x000eb7c6, 0x000eb7c6,
12222 +        0x00000000},
12223 +       {0x00009b40, 0x00000000, 0x00000000, 0x000eb7ca, 0x000eb7ca,
12224 +        0x00000000},
12225 +       {0x00009b44, 0x00000000, 0x00000000, 0x000eb7ce, 0x000eb7ce,
12226 +        0x00000000},
12227 +       {0x00009b48, 0x00000000, 0x00000000, 0x000eb7d2, 0x000eb7d2,
12228 +        0x00000000},
12229 +       {0x00009b4c, 0x00000000, 0x00000000, 0x000eb7d6, 0x000eb7d6,
12230 +        0x00000000},
12231 +       {0x00009b50, 0x00000000, 0x00000000, 0x000eb7c3, 0x000eb7c3,
12232 +        0x00000000},
12233 +       {0x00009b54, 0x00000000, 0x00000000, 0x000eb7c7, 0x000eb7c7,
12234 +        0x00000000},
12235 +       {0x00009b58, 0x00000000, 0x00000000, 0x000eb7cb, 0x000eb7cb,
12236 +        0x00000000},
12237 +       {0x00009b5c, 0x00000000, 0x00000000, 0x000eb7cf, 0x000eb7cf,
12238 +        0x00000000},
12239 +       {0x00009b60, 0x00000000, 0x00000000, 0x000eb7d7, 0x000eb7d7,
12240 +        0x00000000},
12241 +       {0x00009b64, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12242 +        0x00000000},
12243 +       {0x00009b68, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12244 +        0x00000000},
12245 +       {0x00009b6c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12246 +        0x00000000},
12247 +       {0x00009b70, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12248 +        0x00000000},
12249 +       {0x00009b74, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12250 +        0x00000000},
12251 +       {0x00009b78, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12252 +        0x00000000},
12253 +       {0x00009b7c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12254 +        0x00000000},
12255 +       {0x00009b80, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12256 +        0x00000000},
12257 +       {0x00009b84, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12258 +        0x00000000},
12259 +       {0x00009b88, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12260 +        0x00000000},
12261 +       {0x00009b8c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12262 +        0x00000000},
12263 +       {0x00009b90, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12264 +        0x00000000},
12265 +       {0x00009b94, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12266 +        0x00000000},
12267 +       {0x00009b98, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12268 +        0x00000000},
12269 +       {0x00009b9c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12270 +        0x00000000},
12271 +       {0x00009ba0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12272 +        0x00000000},
12273 +       {0x00009ba4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12274 +        0x00000000},
12275 +       {0x00009ba8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12276 +        0x00000000},
12277 +       {0x00009bac, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12278 +        0x00000000},
12279 +       {0x00009bb0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12280 +        0x00000000},
12281 +       {0x00009bb4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12282 +        0x00000000},
12283 +       {0x00009bb8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12284 +        0x00000000},
12285 +       {0x00009bbc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12286 +        0x00000000},
12287 +       {0x00009bc0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12288 +        0x00000000},
12289 +       {0x00009bc4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12290 +        0x00000000},
12291 +       {0x00009bc8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12292 +        0x00000000},
12293 +       {0x00009bcc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12294 +        0x00000000},
12295 +       {0x00009bd0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12296 +        0x00000000},
12297 +       {0x00009bd4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12298 +        0x00000000},
12299 +       {0x00009bd8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12300 +        0x00000000},
12301 +       {0x00009bdc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12302 +        0x00000000},
12303 +       {0x00009be0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12304 +        0x00000000},
12305 +       {0x00009be4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12306 +        0x00000000},
12307 +       {0x00009be8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12308 +        0x00000000},
12309 +       {0x00009bec, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12310 +        0x00000000},
12311 +       {0x00009bf0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12312 +        0x00000000},
12313 +       {0x00009bf4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12314 +        0x00000000},
12315 +       {0x00009bf8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12316 +        0x00000000},
12317 +       {0x00009bfc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12318 +        0x00000000},
12319 +       {0x0000aa00, 0x00000000, 0x00000000, 0x00058084, 0x00058084,
12320 +        0x00000000},
12321 +       {0x0000aa04, 0x00000000, 0x00000000, 0x00058088, 0x00058088,
12322 +        0x00000000},
12323 +       {0x0000aa08, 0x00000000, 0x00000000, 0x0005808c, 0x0005808c,
12324 +        0x00000000},
12325 +       {0x0000aa0c, 0x00000000, 0x00000000, 0x00058100, 0x00058100,
12326 +        0x00000000},
12327 +       {0x0000aa10, 0x00000000, 0x00000000, 0x00058104, 0x00058104,
12328 +        0x00000000},
12329 +       {0x0000aa14, 0x00000000, 0x00000000, 0x00058108, 0x00058108,
12330 +        0x00000000},
12331 +       {0x0000aa18, 0x00000000, 0x00000000, 0x0005810c, 0x0005810c,
12332 +        0x00000000},
12333 +       {0x0000aa1c, 0x00000000, 0x00000000, 0x00058110, 0x00058110,
12334 +        0x00000000},
12335 +       {0x0000aa20, 0x00000000, 0x00000000, 0x00058114, 0x00058114,
12336 +        0x00000000},
12337 +       {0x0000aa24, 0x00000000, 0x00000000, 0x00058180, 0x00058180,
12338 +        0x00000000},
12339 +       {0x0000aa28, 0x00000000, 0x00000000, 0x00058184, 0x00058184,
12340 +        0x00000000},
12341 +       {0x0000aa2c, 0x00000000, 0x00000000, 0x00058188, 0x00058188,
12342 +        0x00000000},
12343 +       {0x0000aa30, 0x00000000, 0x00000000, 0x0005818c, 0x0005818c,
12344 +        0x00000000},
12345 +       {0x0000aa34, 0x00000000, 0x00000000, 0x00058190, 0x00058190,
12346 +        0x00000000},
12347 +       {0x0000aa38, 0x00000000, 0x00000000, 0x00058194, 0x00058194,
12348 +        0x00000000},
12349 +       {0x0000aa3c, 0x00000000, 0x00000000, 0x000581a0, 0x000581a0,
12350 +        0x00000000},
12351 +       {0x0000aa40, 0x00000000, 0x00000000, 0x0005820c, 0x0005820c,
12352 +        0x00000000},
12353 +       {0x0000aa44, 0x00000000, 0x00000000, 0x000581a8, 0x000581a8,
12354 +        0x00000000},
12355 +       {0x0000aa48, 0x00000000, 0x00000000, 0x00058284, 0x00058284,
12356 +        0x00000000},
12357 +       {0x0000aa4c, 0x00000000, 0x00000000, 0x00058288, 0x00058288,
12358 +        0x00000000},
12359 +       {0x0000aa50, 0x00000000, 0x00000000, 0x00058224, 0x00058224,
12360 +        0x00000000},
12361 +       {0x0000aa54, 0x00000000, 0x00000000, 0x00058290, 0x00058290,
12362 +        0x00000000},
12363 +       {0x0000aa58, 0x00000000, 0x00000000, 0x00058300, 0x00058300,
12364 +        0x00000000},
12365 +       {0x0000aa5c, 0x00000000, 0x00000000, 0x00058304, 0x00058304,
12366 +        0x00000000},
12367 +       {0x0000aa60, 0x00000000, 0x00000000, 0x00058308, 0x00058308,
12368 +        0x00000000},
12369 +       {0x0000aa64, 0x00000000, 0x00000000, 0x0005830c, 0x0005830c,
12370 +        0x00000000},
12371 +       {0x0000aa68, 0x00000000, 0x00000000, 0x00058380, 0x00058380,
12372 +        0x00000000},
12373 +       {0x0000aa6c, 0x00000000, 0x00000000, 0x00058384, 0x00058384,
12374 +        0x00000000},
12375 +       {0x0000aa70, 0x00000000, 0x00000000, 0x00068700, 0x00068700,
12376 +        0x00000000},
12377 +       {0x0000aa74, 0x00000000, 0x00000000, 0x00068704, 0x00068704,
12378 +        0x00000000},
12379 +       {0x0000aa78, 0x00000000, 0x00000000, 0x00068708, 0x00068708,
12380 +        0x00000000},
12381 +       {0x0000aa7c, 0x00000000, 0x00000000, 0x0006870c, 0x0006870c,
12382 +        0x00000000},
12383 +       {0x0000aa80, 0x00000000, 0x00000000, 0x00068780, 0x00068780,
12384 +        0x00000000},
12385 +       {0x0000aa84, 0x00000000, 0x00000000, 0x00068784, 0x00068784,
12386 +        0x00000000},
12387 +       {0x0000aa88, 0x00000000, 0x00000000, 0x00078b00, 0x00078b00,
12388 +        0x00000000},
12389 +       {0x0000aa8c, 0x00000000, 0x00000000, 0x00078b04, 0x00078b04,
12390 +        0x00000000},
12391 +       {0x0000aa90, 0x00000000, 0x00000000, 0x00078b08, 0x00078b08,
12392 +        0x00000000},
12393 +       {0x0000aa94, 0x00000000, 0x00000000, 0x00078b0c, 0x00078b0c,
12394 +        0x00000000},
12395 +       {0x0000aa98, 0x00000000, 0x00000000, 0x00078b80, 0x00078b80,
12396 +        0x00000000},
12397 +       {0x0000aa9c, 0x00000000, 0x00000000, 0x00078b84, 0x00078b84,
12398 +        0x00000000},
12399 +       {0x0000aaa0, 0x00000000, 0x00000000, 0x00078b88, 0x00078b88,
12400 +        0x00000000},
12401 +       {0x0000aaa4, 0x00000000, 0x00000000, 0x00078b8c, 0x00078b8c,
12402 +        0x00000000},
12403 +       {0x0000aaa8, 0x00000000, 0x00000000, 0x00078b90, 0x00078b90,
12404 +        0x00000000},
12405 +       {0x0000aaac, 0x00000000, 0x00000000, 0x000caf80, 0x000caf80,
12406 +        0x00000000},
12407 +       {0x0000aab0, 0x00000000, 0x00000000, 0x000caf84, 0x000caf84,
12408 +        0x00000000},
12409 +       {0x0000aab4, 0x00000000, 0x00000000, 0x000caf88, 0x000caf88,
12410 +        0x00000000},
12411 +       {0x0000aab8, 0x00000000, 0x00000000, 0x000caf8c, 0x000caf8c,
12412 +        0x00000000},
12413 +       {0x0000aabc, 0x00000000, 0x00000000, 0x000caf90, 0x000caf90,
12414 +        0x00000000},
12415 +       {0x0000aac0, 0x00000000, 0x00000000, 0x000db30c, 0x000db30c,
12416 +        0x00000000},
12417 +       {0x0000aac4, 0x00000000, 0x00000000, 0x000db310, 0x000db310,
12418 +        0x00000000},
12419 +       {0x0000aac8, 0x00000000, 0x00000000, 0x000db384, 0x000db384,
12420 +        0x00000000},
12421 +       {0x0000aacc, 0x00000000, 0x00000000, 0x000db388, 0x000db388,
12422 +        0x00000000},
12423 +       {0x0000aad0, 0x00000000, 0x00000000, 0x000db324, 0x000db324,
12424 +        0x00000000},
12425 +       {0x0000aad4, 0x00000000, 0x00000000, 0x000eb704, 0x000eb704,
12426 +        0x00000000},
12427 +       {0x0000aad8, 0x00000000, 0x00000000, 0x000eb6a4, 0x000eb6a4,
12428 +        0x00000000},
12429 +       {0x0000aadc, 0x00000000, 0x00000000, 0x000eb6a8, 0x000eb6a8,
12430 +        0x00000000},
12431 +       {0x0000aae0, 0x00000000, 0x00000000, 0x000eb710, 0x000eb710,
12432 +        0x00000000},
12433 +       {0x0000aae4, 0x00000000, 0x00000000, 0x000eb714, 0x000eb714,
12434 +        0x00000000},
12435 +       {0x0000aae8, 0x00000000, 0x00000000, 0x000eb720, 0x000eb720,
12436 +        0x00000000},
12437 +       {0x0000aaec, 0x00000000, 0x00000000, 0x000eb724, 0x000eb724,
12438 +        0x00000000},
12439 +       {0x0000aaf0, 0x00000000, 0x00000000, 0x000eb728, 0x000eb728,
12440 +        0x00000000},
12441 +       {0x0000aaf4, 0x00000000, 0x00000000, 0x000eb72c, 0x000eb72c,
12442 +        0x00000000},
12443 +       {0x0000aaf8, 0x00000000, 0x00000000, 0x000eb7a0, 0x000eb7a0,
12444 +        0x00000000},
12445 +       {0x0000aafc, 0x00000000, 0x00000000, 0x000eb7a4, 0x000eb7a4,
12446 +        0x00000000},
12447 +       {0x0000ab00, 0x00000000, 0x00000000, 0x000eb7a8, 0x000eb7a8,
12448 +        0x00000000},
12449 +       {0x0000ab04, 0x00000000, 0x00000000, 0x000eb7b0, 0x000eb7b0,
12450 +        0x00000000},
12451 +       {0x0000ab08, 0x00000000, 0x00000000, 0x000eb7b4, 0x000eb7b4,
12452 +        0x00000000},
12453 +       {0x0000ab0c, 0x00000000, 0x00000000, 0x000eb7b8, 0x000eb7b8,
12454 +        0x00000000},
12455 +       {0x0000ab10, 0x00000000, 0x00000000, 0x000eb7a5, 0x000eb7a5,
12456 +        0x00000000},
12457 +       {0x0000ab14, 0x00000000, 0x00000000, 0x000eb7a9, 0x000eb7a9,
12458 +        0x00000000},
12459 +       {0x0000ab18, 0x00000000, 0x00000000, 0x000eb7ad, 0x000eb7ad,
12460 +        0x00000000},
12461 +       {0x0000ab1c, 0x00000000, 0x00000000, 0x000eb7b1, 0x000eb7b1,
12462 +        0x00000000},
12463 +       {0x0000ab20, 0x00000000, 0x00000000, 0x000eb7b5, 0x000eb7b5,
12464 +        0x00000000},
12465 +       {0x0000ab24, 0x00000000, 0x00000000, 0x000eb7b9, 0x000eb7b9,
12466 +        0x00000000},
12467 +       {0x0000ab28, 0x00000000, 0x00000000, 0x000eb7c5, 0x000eb7c5,
12468 +        0x00000000},
12469 +       {0x0000ab2c, 0x00000000, 0x00000000, 0x000eb7c9, 0x000eb7c9,
12470 +        0x00000000},
12471 +       {0x0000ab30, 0x00000000, 0x00000000, 0x000eb7d1, 0x000eb7d1,
12472 +        0x00000000},
12473 +       {0x0000ab34, 0x00000000, 0x00000000, 0x000eb7d5, 0x000eb7d5,
12474 +        0x00000000},
12475 +       {0x0000ab38, 0x00000000, 0x00000000, 0x000eb7d9, 0x000eb7d9,
12476 +        0x00000000},
12477 +       {0x0000ab3c, 0x00000000, 0x00000000, 0x000eb7c6, 0x000eb7c6,
12478 +        0x00000000},
12479 +       {0x0000ab40, 0x00000000, 0x00000000, 0x000eb7ca, 0x000eb7ca,
12480 +        0x00000000},
12481 +       {0x0000ab44, 0x00000000, 0x00000000, 0x000eb7ce, 0x000eb7ce,
12482 +        0x00000000},
12483 +       {0x0000ab48, 0x00000000, 0x00000000, 0x000eb7d2, 0x000eb7d2,
12484 +        0x00000000},
12485 +       {0x0000ab4c, 0x00000000, 0x00000000, 0x000eb7d6, 0x000eb7d6,
12486 +        0x00000000},
12487 +       {0x0000ab50, 0x00000000, 0x00000000, 0x000eb7c3, 0x000eb7c3,
12488 +        0x00000000},
12489 +       {0x0000ab54, 0x00000000, 0x00000000, 0x000eb7c7, 0x000eb7c7,
12490 +        0x00000000},
12491 +       {0x0000ab58, 0x00000000, 0x00000000, 0x000eb7cb, 0x000eb7cb,
12492 +        0x00000000},
12493 +       {0x0000ab5c, 0x00000000, 0x00000000, 0x000eb7cf, 0x000eb7cf,
12494 +        0x00000000},
12495 +       {0x0000ab60, 0x00000000, 0x00000000, 0x000eb7d7, 0x000eb7d7,
12496 +        0x00000000},
12497 +       {0x0000ab64, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12498 +        0x00000000},
12499 +       {0x0000ab68, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12500 +        0x00000000},
12501 +       {0x0000ab6c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12502 +        0x00000000},
12503 +       {0x0000ab70, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12504 +        0x00000000},
12505 +       {0x0000ab74, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12506 +        0x00000000},
12507 +       {0x0000ab78, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12508 +        0x00000000},
12509 +       {0x0000ab7c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12510 +        0x00000000},
12511 +       {0x0000ab80, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12512 +        0x00000000},
12513 +       {0x0000ab84, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12514 +        0x00000000},
12515 +       {0x0000ab88, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12516 +        0x00000000},
12517 +       {0x0000ab8c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12518 +        0x00000000},
12519 +       {0x0000ab90, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12520 +        0x00000000},
12521 +       {0x0000ab94, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12522 +        0x00000000},
12523 +       {0x0000ab98, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12524 +        0x00000000},
12525 +       {0x0000ab9c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12526 +        0x00000000},
12527 +       {0x0000aba0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12528 +        0x00000000},
12529 +       {0x0000aba4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12530 +        0x00000000},
12531 +       {0x0000aba8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12532 +        0x00000000},
12533 +       {0x0000abac, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12534 +        0x00000000},
12535 +       {0x0000abb0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12536 +        0x00000000},
12537 +       {0x0000abb4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12538 +        0x00000000},
12539 +       {0x0000abb8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12540 +        0x00000000},
12541 +       {0x0000abbc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12542 +        0x00000000},
12543 +       {0x0000abc0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12544 +        0x00000000},
12545 +       {0x0000abc4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12546 +        0x00000000},
12547 +       {0x0000abc8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12548 +        0x00000000},
12549 +       {0x0000abcc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12550 +        0x00000000},
12551 +       {0x0000abd0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12552 +        0x00000000},
12553 +       {0x0000abd4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12554 +        0x00000000},
12555 +       {0x0000abd8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12556 +        0x00000000},
12557 +       {0x0000abdc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12558 +        0x00000000},
12559 +       {0x0000abe0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12560 +        0x00000000},
12561 +       {0x0000abe4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12562 +        0x00000000},
12563 +       {0x0000abe8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12564 +        0x00000000},
12565 +       {0x0000abec, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12566 +        0x00000000},
12567 +       {0x0000abf0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12568 +        0x00000000},
12569 +       {0x0000abf4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12570 +        0x00000000},
12571 +       {0x0000abf8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12572 +        0x00000000},
12573 +       {0x0000abfc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db,
12574 +        0x00000000},
12575 +       {0x0000a204, 0x00000004, 0x00000004, 0x00000004, 0x00000004,
12576 +        0x00000004},
12577 +       {0x0000a20c, 0x00000014, 0x00000014, 0x0001f000, 0x0001f000,
12578 +        0x0001f000},
12579 +       {0x0000b20c, 0x00000014, 0x00000014, 0x0001f000, 0x0001f000,
12580 +        0x0001f000},
12581 +       {0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a,
12582 +        0x1883800a},
12583 +       {0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108,
12584 +        0x00000000},
12585 +       {0x0000a250, 0x0004f000, 0x0004f000, 0x0004a000, 0x0004a000,
12586 +        0x0004a000},
12587 +       {0x0000a358, 0x7999aa02, 0x7999aa02, 0x7999aa0e, 0x7999aa0e,
12588 +        0x7999aa0e},
12589 +};
12590 +
12591 +static const u_int32_t ar9271Common_9271[][2] = {
12592 +       {0x0000000c, 0x00000000},
12593 +       {0x00000030, 0x00020045},
12594 +       {0x00000034, 0x00000005},
12595 +       {0x00000040, 0x00000000},
12596 +       {0x00000044, 0x00000008},
12597 +       {0x00000048, 0x00000008},
12598 +       {0x0000004c, 0x00000010},
12599 +       {0x00000050, 0x00000000},
12600 +       {0x00000054, 0x0000001f},
12601 +       {0x00000800, 0x00000000},
12602 +       {0x00000804, 0x00000000},
12603 +       {0x00000808, 0x00000000},
12604 +       {0x0000080c, 0x00000000},
12605 +       {0x00000810, 0x00000000},
12606 +       {0x00000814, 0x00000000},
12607 +       {0x00000818, 0x00000000},
12608 +       {0x0000081c, 0x00000000},
12609 +       {0x00000820, 0x00000000},
12610 +       {0x00000824, 0x00000000},
12611 +       {0x00001040, 0x002ffc0f},
12612 +       {0x00001044, 0x002ffc0f},
12613 +       {0x00001048, 0x002ffc0f},
12614 +       {0x0000104c, 0x002ffc0f},
12615 +       {0x00001050, 0x002ffc0f},
12616 +       {0x00001054, 0x002ffc0f},
12617 +       {0x00001058, 0x002ffc0f},
12618 +       {0x0000105c, 0x002ffc0f},
12619 +       {0x00001060, 0x002ffc0f},
12620 +       {0x00001064, 0x002ffc0f},
12621 +       {0x00001230, 0x00000000},
12622 +       {0x00001270, 0x00000000},
12623 +       {0x00001038, 0x00000000},
12624 +       {0x00001078, 0x00000000},
12625 +       {0x000010b8, 0x00000000},
12626 +       {0x000010f8, 0x00000000},
12627 +       {0x00001138, 0x00000000},
12628 +       {0x00001178, 0x00000000},
12629 +       {0x000011b8, 0x00000000},
12630 +       {0x000011f8, 0x00000000},
12631 +       {0x00001238, 0x00000000},
12632 +       {0x00001278, 0x00000000},
12633 +       {0x000012b8, 0x00000000},
12634 +       {0x000012f8, 0x00000000},
12635 +       {0x00001338, 0x00000000},
12636 +       {0x00001378, 0x00000000},
12637 +       {0x000013b8, 0x00000000},
12638 +       {0x000013f8, 0x00000000},
12639 +       {0x00001438, 0x00000000},
12640 +       {0x00001478, 0x00000000},
12641 +       {0x000014b8, 0x00000000},
12642 +       {0x000014f8, 0x00000000},
12643 +       {0x00001538, 0x00000000},
12644 +       {0x00001578, 0x00000000},
12645 +       {0x000015b8, 0x00000000},
12646 +       {0x000015f8, 0x00000000},
12647 +       {0x00001638, 0x00000000},
12648 +       {0x00001678, 0x00000000},
12649 +       {0x000016b8, 0x00000000},
12650 +       {0x000016f8, 0x00000000},
12651 +       {0x00001738, 0x00000000},
12652 +       {0x00001778, 0x00000000},
12653 +       {0x000017b8, 0x00000000},
12654 +       {0x000017f8, 0x00000000},
12655 +       {0x0000103c, 0x00000000},
12656 +       {0x0000107c, 0x00000000},
12657 +       {0x000010bc, 0x00000000},
12658 +       {0x000010fc, 0x00000000},
12659 +       {0x0000113c, 0x00000000},
12660 +       {0x0000117c, 0x00000000},
12661 +       {0x000011bc, 0x00000000},
12662 +       {0x000011fc, 0x00000000},
12663 +       {0x0000123c, 0x00000000},
12664 +       {0x0000127c, 0x00000000},
12665 +       {0x000012bc, 0x00000000},
12666 +       {0x000012fc, 0x00000000},
12667 +       {0x0000133c, 0x00000000},
12668 +       {0x0000137c, 0x00000000},
12669 +       {0x000013bc, 0x00000000},
12670 +       {0x000013fc, 0x00000000},
12671 +       {0x0000143c, 0x00000000},
12672 +       {0x0000147c, 0x00000000},
12673 +       {0x00004030, 0x00000002},
12674 +       {0x0000403c, 0x00000002},
12675 +       {0x00004024, 0x0000001f},
12676 +       {0x00004060, 0x00000000},
12677 +       {0x00004064, 0x00000000},
12678 +       {0x00008004, 0x00000000},
12679 +       {0x00008008, 0x00000000},
12680 +       {0x0000800c, 0x00000000},
12681 +       {0x00008018, 0x00000700},
12682 +       {0x00008020, 0x00000000},
12683 +       {0x00008038, 0x00000000},
12684 +       {0x0000803c, 0x00000000},
12685 +       {0x00008048, 0x00000000},
12686 +       {0x00008054, 0x00000000},
12687 +       {0x00008058, 0x00000000},
12688 +       {0x0000805c, 0x000fc78f},
12689 +       {0x00008060, 0x0000000f},
12690 +       {0x00008064, 0x00000000},
12691 +       {0x00008070, 0x00000000},
12692 +       {0x000080b0, 0x00000000},
12693 +       {0x000080b4, 0x00000000},
12694 +       {0x000080b8, 0x00000000},
12695 +       {0x000080bc, 0x00000000},
12696 +       {0x000080c0, 0x2a80001a},
12697 +       {0x000080c4, 0x05dc01e0},
12698 +       {0x000080c8, 0x1f402710},
12699 +       {0x000080cc, 0x01f40000},
12700 +       {0x000080d0, 0x00001e00},
12701 +       {0x000080d4, 0x00000000},
12702 +       {0x000080d8, 0x00400000},
12703 +       {0x000080e0, 0xffffffff},
12704 +       {0x000080e4, 0x0000ffff},
12705 +       {0x000080e8, 0x003f3f3f},
12706 +       {0x000080ec, 0x00000000},
12707 +       {0x000080f0, 0x00000000},
12708 +       {0x000080f4, 0x00000000},
12709 +       {0x000080f8, 0x00000000},
12710 +       {0x000080fc, 0x00020000},
12711 +       {0x00008100, 0x00020000},
12712 +       {0x00008104, 0x00000001},
12713 +       {0x00008108, 0x00000052},
12714 +       {0x0000810c, 0x00000000},
12715 +       {0x00008110, 0x00000168},
12716 +       {0x00008118, 0x000100aa},
12717 +       {0x0000811c, 0x00003210},
12718 +       {0x00008120, 0x08f04810},
12719 +       {0x00008124, 0x00000000},
12720 +       {0x00008128, 0x00000000},
12721 +       {0x0000812c, 0x00000000},
12722 +       {0x00008130, 0x00000000},
12723 +       {0x00008134, 0x00000000},
12724 +       {0x00008138, 0x00000000},
12725 +       {0x0000813c, 0x00000000},
12726 +       {0x00008144, 0xffffffff},
12727 +       {0x00008168, 0x00000000},
12728 +       {0x0000816c, 0x00000000},
12729 +       {0x00008170, 0x32143320},
12730 +       {0x00008174, 0xfaa4fa50},
12731 +       {0x00008178, 0x00000100},
12732 +       {0x0000817c, 0x00000000},
12733 +       {0x000081c0, 0x00000000},
12734 +       {0x000081d0, 0x0000320a},
12735 +       {0x000081ec, 0x00000000},
12736 +       {0x000081f0, 0x00000000},
12737 +       {0x000081f4, 0x00000000},
12738 +       {0x000081f8, 0x00000000},
12739 +       {0x000081fc, 0x00000000},
12740 +       {0x00008200, 0x00000000},
12741 +       {0x00008204, 0x00000000},
12742 +       {0x00008208, 0x00000000},
12743 +       {0x0000820c, 0x00000000},
12744 +       {0x00008210, 0x00000000},
12745 +       {0x00008214, 0x00000000},
12746 +       {0x00008218, 0x00000000},
12747 +       {0x0000821c, 0x00000000},
12748 +       {0x00008220, 0x00000000},
12749 +       {0x00008224, 0x00000000},
12750 +       {0x00008228, 0x00000000},
12751 +       {0x0000822c, 0x00000000},
12752 +       {0x00008230, 0x00000000},
12753 +       {0x00008234, 0x00000000},
12754 +       {0x00008238, 0x00000000},
12755 +       {0x0000823c, 0x00000000},
12756 +       {0x00008240, 0x00100000},
12757 +       {0x00008244, 0x0010f400},
12758 +       {0x00008248, 0x00000100},
12759 +       {0x0000824c, 0x0001e800},
12760 +       {0x00008250, 0x00000000},
12761 +       {0x00008254, 0x00000000},
12762 +       {0x00008258, 0x00000000},
12763 +       {0x0000825c, 0x400000ff},
12764 +       {0x00008260, 0x00080922},
12765 +       {0x00008264, 0xa8a00010},
12766 +       {0x00008270, 0x00000000},
12767 +       {0x00008274, 0x40000000},
12768 +       {0x00008278, 0x003e4180},
12769 +       {0x0000827c, 0x00000000},
12770 +       {0x00008284, 0x0000002c},
12771 +       {0x00008288, 0x0000002c},
12772 +       {0x0000828c, 0x00000000},
12773 +       {0x00008294, 0x00000000},
12774 +       {0x00008298, 0x00000000},
12775 +       {0x0000829c, 0x00000000},
12776 +       {0x00008300, 0x00000040},
12777 +       {0x00008314, 0x00000000},
12778 +       {0x00008328, 0x00000000},
12779 +       {0x0000832c, 0x00000001},
12780 +       {0x00008330, 0x00000302},
12781 +       {0x00008334, 0x00000e00},
12782 +       {0x00008338, 0x00ff0000},
12783 +       {0x0000833c, 0x00000000},
12784 +       {0x00008340, 0x00010380},
12785 +       {0x00008344, 0x00581043},
12786 +       {0x00007010, 0x00000030},
12787 +       {0x00007034, 0x00000002},
12788 +       {0x00007038, 0x000004c2},
12789 +       {0x00007800, 0x00140000},
12790 +       {0x00007804, 0x0e4548d8},
12791 +       {0x00007808, 0x54214514},
12792 +       {0x0000780c, 0x02025820},
12793 +       {0x00007810, 0x71c0d388},
12794 +       {0x00007814, 0x924934a8},
12795 +       {0x0000781c, 0x00000000},
12796 +       {0x00007828, 0x66964300},
12797 +       {0x0000782c, 0x8db6d961},
12798 +       {0x00007830, 0x8db6d96c},
12799 +       {0x00007834, 0x6140008b},
12800 +       {0x0000783c, 0x72ee0a72},
12801 +       {0x00007840, 0xbbfffffc},
12802 +       {0x00007844, 0x000c0db6},
12803 +       {0x00007848, 0x6db61b6f},
12804 +       {0x0000784c, 0x6d9b66db},
12805 +       {0x00007850, 0x6d8c6dba},
12806 +       {0x00007854, 0x00040000},
12807 +       {0x00007858, 0xdb003012},
12808 +       {0x0000785c, 0x04924914},
12809 +       {0x00007860, 0x21084210},
12810 +       {0x00007864, 0xf7d7ffde},
12811 +       {0x00007868, 0xc2034080},
12812 +       {0x00007870, 0x10142c00},
12813 +       {0x00009808, 0x00000000},
12814 +       {0x0000980c, 0xafe68e30},
12815 +       {0x00009810, 0xfd14e000},
12816 +       {0x00009814, 0x9c0a9f6b},
12817 +       {0x0000981c, 0x00000000},
12818 +       {0x0000982c, 0x0000a000},
12819 +       {0x00009830, 0x00000000},
12820 +       {0x0000983c, 0x00200400},
12821 +       {0x0000984c, 0x0040233c},
12822 +       {0x00009854, 0x00000044},
12823 +       {0x00009900, 0x00000000},
12824 +       {0x00009904, 0x00000000},
12825 +       {0x00009908, 0x00000000},
12826 +       {0x0000990c, 0x00000000},
12827 +       {0x0000991c, 0x10000fff},
12828 +       {0x00009920, 0x04900000},
12829 +       {0x00009928, 0x00000001},
12830 +       {0x0000992c, 0x00000004},
12831 +       {0x00009934, 0x1e1f2022},
12832 +       {0x00009938, 0x0a0b0c0d},
12833 +       {0x0000993c, 0x00000000},
12834 +       {0x00009940, 0x14750604},
12835 +       {0x00009948, 0x9280c00a},
12836 +       {0x0000994c, 0x00020028},
12837 +       {0x00009954, 0x5f3ca3de},
12838 +       {0x00009958, 0x0108ecff},
12839 +       {0x00009968, 0x000003ce},
12840 +       {0x00009970, 0x192bb514},
12841 +       {0x00009974, 0x00000000},
12842 +       {0x00009978, 0x00000001},
12843 +       {0x0000997c, 0x00000000},
12844 +       {0x00009980, 0x00000000},
12845 +       {0x00009984, 0x00000000},
12846 +       {0x00009988, 0x00000000},
12847 +       {0x0000998c, 0x00000000},
12848 +       {0x00009990, 0x00000000},
12849 +       {0x00009994, 0x00000000},
12850 +       {0x00009998, 0x00000000},
12851 +       {0x0000999c, 0x00000000},
12852 +       {0x000099a0, 0x00000000},
12853 +       {0x000099a4, 0x00000001},
12854 +       {0x000099a8, 0x201fff00},
12855 +       {0x000099ac, 0x2def0400},
12856 +       {0x000099b0, 0x03051000},
12857 +       {0x000099b4, 0x00000820},
12858 +       {0x000099dc, 0x00000000},
12859 +       {0x000099e0, 0x00000000},
12860 +       {0x000099e4, 0xaaaaaaaa},
12861 +       {0x000099e8, 0x3c466478},
12862 +       {0x000099ec, 0x0cc80caa},
12863 +       {0x000099f0, 0x00000000},
12864 +       {0x0000a208, 0x803e68c8},
12865 +       {0x0000a210, 0x4080a333},
12866 +       {0x0000a214, 0x00206c10},
12867 +       {0x0000a218, 0x009c4060},
12868 +       {0x0000a220, 0x01834061},
12869 +       {0x0000a224, 0x00000400},
12870 +       {0x0000a228, 0x000003b5},
12871 +       {0x0000a22c, 0x00000000},
12872 +       {0x0000a234, 0x20202020},
12873 +       {0x0000a238, 0x20202020},
12874 +       {0x0000a244, 0x00000000},
12875 +       {0x0000a248, 0xfffffffc},
12876 +       {0x0000a24c, 0x00000000},
12877 +       {0x0000a254, 0x00000000},
12878 +       {0x0000a258, 0x0ccb5380},
12879 +       {0x0000a25c, 0x15151501},
12880 +       {0x0000a260, 0xdfa90f01},
12881 +       {0x0000a268, 0x00000000},
12882 +       {0x0000a26c, 0x0ebae9e6},
12883 +       {0x0000a388, 0x0c000000},
12884 +       {0x0000a38c, 0x20202020},
12885 +       {0x0000a390, 0x20202020},
12886 +       {0x0000a39c, 0x00000001},
12887 +       {0x0000a3a0, 0x00000000},
12888 +       {0x0000a3a4, 0x00000000},
12889 +       {0x0000a3a8, 0x00000000},
12890 +       {0x0000a3ac, 0x00000000},
12891 +       {0x0000a3b0, 0x00000000},
12892 +       {0x0000a3b4, 0x00000000},
12893 +       {0x0000a3b8, 0x00000000},
12894 +       {0x0000a3bc, 0x00000000},
12895 +       {0x0000a3c0, 0x00000000},
12896 +       {0x0000a3c4, 0x00000000},
12897 +       {0x0000a3cc, 0x20202020},
12898 +       {0x0000a3d0, 0x20202020},
12899 +       {0x0000a3d4, 0x20202020},
12900 +       {0x0000a3e4, 0x00000000},
12901 +       {0x0000a3e8, 0x18c43433},
12902 +       {0x0000a3ec, 0x00f70081},
12903 +       {0x0000a3f0, 0x01036a2f},
12904 +       {0x0000a3f4, 0x00000000},
12905 +       {0x0000d270, 0x0d820820},
12906 +       {0x0000d35c, 0x07ffffef},
12907 +       {0x0000d360, 0x0fffffe7},
12908 +       {0x0000d364, 0x17ffffe5},
12909 +       {0x0000d368, 0x1fffffe4},
12910 +       {0x0000d36c, 0x37ffffe3},
12911 +       {0x0000d370, 0x3fffffe3},
12912 +       {0x0000d374, 0x57ffffe3},
12913 +       {0x0000d378, 0x5fffffe2},
12914 +       {0x0000d37c, 0x7fffffe2},
12915 +       {0x0000d380, 0x7f3c7bba},
12916 +       {0x0000d384, 0xf3307ff0},
12917 +};
12918 +
12919 +static const u_int32_t ar9271Common_normal_cck_fir_coeff_9271[][2] = {
12920 +       {0x0000a1f4, 0x00fffeff},
12921 +       {0x0000a1f8, 0x00f5f9ff},
12922 +       {0x0000a1fc, 0xb79f6427},
12923 +};
12924 +
12925 +static const u_int32_t ar9271Common_japan_2484_cck_fir_coeff_9271[][2] = {
12926 +       {0x0000a1f4, 0x00000000},
12927 +       {0x0000a1f8, 0xefff0301},
12928 +       {0x0000a1fc, 0xca9228ee},
12929 +};
12930 +
12931 +static const u_int32_t ar9271Modes_9271_1_0_only[][6] = {
12932 +       {0x00009910, 0x30002311, 0x30002311, 0x30002311, 0x30002311,
12933 +        0x30002311},
12934 +       {0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001,
12935 +        0x0a020001},
12936 +};
12937 +
12938 +static const u_int32_t ar9271Modes_9271_ANI_reg[][6] = {
12939 +       {0x00009850, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2,
12940 +        0x6d4000e2},
12941 +       {0x0000985c, 0x3139605e, 0x3139605e, 0x3137605e, 0x3137605e,
12942 +        0x3139605e},
12943 +       {0x00009858, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e,
12944 +        0x7ec84d2e},
12945 +       {0x0000986c, 0x06903881, 0x06903881, 0x06903881, 0x06903881,
12946 +        0x06903881},
12947 +       {0x00009868, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0,
12948 +        0x5ac640d0},
12949 +       {0x0000a208, 0x803e68c8, 0x803e68c8, 0x803e68c8, 0x803e68c8,
12950 +        0x803e68c8},
12951 +       {0x00009924, 0xd00a8007, 0xd00a8007, 0xd00a800d, 0xd00a800d,
12952 +        0xd00a800d},
12953 +       {0x000099c0, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4,
12954 +        0x05eea6d4},
12955 +};
12956 +
12957 +static const u_int32_t ar9271Modes_normal_power_tx_gain_9271[][6] = {
12958 +       {0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
12959 +        0x00000000},
12960 +       {0x0000a304, 0x00000000, 0x00000000, 0x00009200, 0x00009200,
12961 +        0x00000000},
12962 +       {0x0000a308, 0x00000000, 0x00000000, 0x00010208, 0x00010208,
12963 +        0x00000000},
12964 +       {0x0000a30c, 0x00000000, 0x00000000, 0x00019608, 0x00019608,
12965 +        0x00000000},
12966 +       {0x0000a310, 0x00000000, 0x00000000, 0x0001e610, 0x0001e610,
12967 +        0x00000000},
12968 +       {0x0000a314, 0x00000000, 0x00000000, 0x0002d6d0, 0x0002d6d0,
12969 +        0x00000000},
12970 +       {0x0000a318, 0x00000000, 0x00000000, 0x00039758, 0x00039758,
12971 +        0x00000000},
12972 +       {0x0000a31c, 0x00000000, 0x00000000, 0x0003b759, 0x0003b759,
12973 +        0x00000000},
12974 +       {0x0000a320, 0x00000000, 0x00000000, 0x0003d75a, 0x0003d75a,
12975 +        0x00000000},
12976 +       {0x0000a324, 0x00000000, 0x00000000, 0x0004175c, 0x0004175c,
12977 +        0x00000000},
12978 +       {0x0000a328, 0x00000000, 0x00000000, 0x0004575e, 0x0004575e,
12979 +        0x00000000},
12980 +       {0x0000a32c, 0x00000000, 0x00000000, 0x0004979f, 0x0004979f,
12981 +        0x00000000},
12982 +       {0x0000a330, 0x00000000, 0x00000000, 0x0004d7df, 0x0004d7df,
12983 +        0x00000000},
12984 +       {0x0000a334, 0x000368de, 0x000368de, 0x000368de, 0x000368de,
12985 +        0x00000000},
12986 +       {0x0000a338, 0x0003891e, 0x0003891e, 0x0003891e, 0x0003891e,
12987 +        0x00000000},
12988 +       {0x0000a33c, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x0003a95e,
12989 +        0x00000000},
12990 +       {0x0000a340, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
12991 +        0x00000000},
12992 +       {0x0000a344, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
12993 +        0x00000000},
12994 +       {0x0000a348, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
12995 +        0x00000000},
12996 +       {0x0000a34c, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
12997 +        0x00000000},
12998 +       {0x0000a350, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
12999 +        0x00000000},
13000 +       {0x0000a354, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
13001 +        0x00000000},
13002 +       {0x00007838, 0x00000029, 0x00000029, 0x00000029, 0x00000029,
13003 +        0x00000029},
13004 +       {0x00007824, 0x00d8abff, 0x00d8abff, 0x00d8abff, 0x00d8abff,
13005 +        0x00d8abff},
13006 +       {0x0000786c, 0x48609eb4, 0x48609eb4, 0x48609eb4, 0x48609eb4,
13007 +        0x48609eb4},
13008 +       {0x00007820, 0x00000c04, 0x00000c04, 0x00000c04, 0x00000c04,
13009 +        0x00000c04},
13010 +       {0x0000a274, 0x0a21c652, 0x0a21c652, 0x0a218652, 0x0a218652,
13011 +        0x0a22a652},
13012 +       {0x0000a278, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd,
13013 +        0x3bdef7bd},
13014 +       {0x0000a27c, 0x050e83bd, 0x050e83bd, 0x050e83bd, 0x050e83bd,
13015 +        0x050e83bd},
13016 +       {0x0000a394, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd,
13017 +        0x3bdef7bd},
13018 +       {0x0000a398, 0x000003bd, 0x000003bd, 0x000003bd, 0x000003bd,
13019 +        0x000003bd},
13020 +       {0x0000a3dc, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd,
13021 +        0x3bdef7bd},
13022 +       {0x0000a3e0, 0x000003bd, 0x000003bd, 0x000003bd, 0x000003bd,
13023 +        0x000003bd},
13024 +};
13025 +
13026 +static const u_int32_t ar9271Modes_high_power_tx_gain_9271[][6] = {
13027 +       {0x0000a300, 0x00000000, 0x00000000, 0x00010000, 0x00010000,
13028 +        0x00000000},
13029 +       {0x0000a304, 0x00000000, 0x00000000, 0x00016200, 0x00016200,
13030 +        0x00000000},
13031 +       {0x0000a308, 0x00000000, 0x00000000, 0x00018201, 0x00018201,
13032 +        0x00000000},
13033 +       {0x0000a30c, 0x00000000, 0x00000000, 0x0001b240, 0x0001b240,
13034 +        0x00000000},
13035 +       {0x0000a310, 0x00000000, 0x00000000, 0x0001d241, 0x0001d241,
13036 +        0x00000000},
13037 +       {0x0000a314, 0x00000000, 0x00000000, 0x0001f600, 0x0001f600,
13038 +        0x00000000},
13039 +       {0x0000a318, 0x00000000, 0x00000000, 0x00022800, 0x00022800,
13040 +        0x00000000},
13041 +       {0x0000a31c, 0x00000000, 0x00000000, 0x00026802, 0x00026802,
13042 +        0x00000000},
13043 +       {0x0000a320, 0x00000000, 0x00000000, 0x0002b805, 0x0002b805,
13044 +        0x00000000},
13045 +       {0x0000a324, 0x00000000, 0x00000000, 0x0002ea41, 0x0002ea41,
13046 +        0x00000000},
13047 +       {0x0000a328, 0x00000000, 0x00000000, 0x00038b00, 0x00038b00,
13048 +        0x00000000},
13049 +       {0x0000a32c, 0x00000000, 0x00000000, 0x0003ab40, 0x0003ab40,
13050 +        0x00000000},
13051 +       {0x0000a330, 0x00000000, 0x00000000, 0x0003cd80, 0x0003cd80,
13052 +        0x00000000},
13053 +       {0x0000a334, 0x000368de, 0x000368de, 0x000368de, 0x000368de,
13054 +        0x00000000},
13055 +       {0x0000a338, 0x0003891e, 0x0003891e, 0x0003891e, 0x0003891e,
13056 +        0x00000000},
13057 +       {0x0000a33c, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x0003a95e,
13058 +        0x00000000},
13059 +       {0x0000a340, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
13060 +        0x00000000},
13061 +       {0x0000a344, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
13062 +        0x00000000},
13063 +       {0x0000a348, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
13064 +        0x00000000},
13065 +       {0x0000a34c, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
13066 +        0x00000000},
13067 +       {0x0000a350, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
13068 +        0x00000000},
13069 +       {0x0000a354, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df,
13070 +        0x00000000},
13071 +       {0x00007838, 0x0000002b, 0x0000002b, 0x0000002b, 0x0000002b,
13072 +        0x0000002b},
13073 +       {0x00007824, 0x00d8a7ff, 0x00d8a7ff, 0x00d8a7ff, 0x00d8a7ff,
13074 +        0x00d8a7ff},
13075 +       {0x0000786c, 0x08609eb6, 0x08609eb6, 0x08609eba, 0x08609eba,
13076 +        0x08609eb6},
13077 +       {0x00007820, 0x00000c00, 0x00000c00, 0x00000c00, 0x00000c00,
13078 +        0x00000c00},
13079 +       {0x0000a274, 0x0a22a652, 0x0a22a652, 0x0a212652, 0x0a212652,
13080 +        0x0a22a652},
13081 +       {0x0000a278, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7,
13082 +        0x0e739ce7},
13083 +       {0x0000a27c, 0x05018063, 0x05038063, 0x05018063, 0x05018063,
13084 +        0x05018063},
13085 +       {0x0000a394, 0x06318c63, 0x06318c63, 0x06318c63, 0x06318c63,
13086 +        0x06318c63},
13087 +       {0x0000a398, 0x00000063, 0x00000063, 0x00000063, 0x00000063,
13088 +        0x00000063},
13089 +       {0x0000a3dc, 0x06318c63, 0x06318c63, 0x06318c63, 0x06318c63,
13090 +        0x06318c63},
13091 +       {0x0000a3e0, 0x00000063, 0x00000063, 0x00000063, 0x00000063,
13092 +        0x00000063},
13093 +};
13094 +
13095 +#endif /* INITVALS_9002_10_H */
13096 diff --git a/drivers/net/wireless/ath/ath9k/ar9002_mac.c b/drivers/net/wireless/ath/ath9k/ar9002_mac.c
13097 new file mode 100644
13098 index 0000000..d36085c
13099 --- /dev/null
13100 +++ b/drivers/net/wireless/ath/ath9k/ar9002_mac.c
13101 @@ -0,0 +1,474 @@
13102 +/*
13103 + * Copyright (c) 2008-2010 Atheros Communications Inc.
13104 + *
13105 + * Permission to use, copy, modify, and/or distribute this software for any
13106 + * purpose with or without fee is hereby granted, provided that the above
13107 + * copyright notice and this permission notice appear in all copies.
13108 + *
13109 + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13110 + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13111 + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13112 + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13113 + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13114 + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
13115 + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
13116 + */
13117 +
13118 +#include "hw.h"
13119 +
13120 +static void ar9002_hw_rx_enable(struct ath_hw *ah)
13121 +{
13122 +       REG_WRITE(ah, AR_CR, AR_CR_RXE);
13123 +}
13124 +
13125 +static void ar9002_hw_set_desc_link(void *ds, u32 ds_link)
13126 +{
13127 +       ((struct ath_desc*) ds)->ds_link = ds_link;
13128 +}
13129 +
13130 +static void ar9002_hw_get_desc_link(void *ds, u32 **ds_link)
13131 +{
13132 +       *ds_link = &((struct ath_desc *)ds)->ds_link;
13133 +}
13134 +
13135 +static bool ar9002_hw_get_isr(struct ath_hw *ah, enum ath9k_int *masked)
13136 +{
13137 +       u32 isr = 0;
13138 +       u32 mask2 = 0;
13139 +       struct ath9k_hw_capabilities *pCap = &ah->caps;
13140 +       u32 sync_cause = 0;
13141 +       bool fatal_int = false;
13142 +       struct ath_common *common = ath9k_hw_common(ah);
13143 +
13144 +       if (!AR_SREV_9100(ah)) {
13145 +               if (REG_READ(ah, AR_INTR_ASYNC_CAUSE) & AR_INTR_MAC_IRQ) {
13146 +                       if ((REG_READ(ah, AR_RTC_STATUS) & AR_RTC_STATUS_M)
13147 +                           == AR_RTC_STATUS_ON) {
13148 +                               isr = REG_READ(ah, AR_ISR);
13149 +                       }
13150 +               }
13151 +
13152 +               sync_cause = REG_READ(ah, AR_INTR_SYNC_CAUSE) &
13153 +                       AR_INTR_SYNC_DEFAULT;
13154 +
13155 +               *masked = 0;
13156 +
13157 +               if (!isr && !sync_cause)
13158 +                       return false;
13159 +       } else {
13160 +               *masked = 0;
13161 +               isr = REG_READ(ah, AR_ISR);
13162 +       }
13163 +
13164 +       if (isr) {
13165 +               if (isr & AR_ISR_BCNMISC) {
13166 +                       u32 isr2;
13167 +                       isr2 = REG_READ(ah, AR_ISR_S2);
13168 +                       if (isr2 & AR_ISR_S2_TIM)
13169 +                               mask2 |= ATH9K_INT_TIM;
13170 +                       if (isr2 & AR_ISR_S2_DTIM)
13171 +                               mask2 |= ATH9K_INT_DTIM;
13172 +                       if (isr2 & AR_ISR_S2_DTIMSYNC)
13173 +                               mask2 |= ATH9K_INT_DTIMSYNC;
13174 +                       if (isr2 & (AR_ISR_S2_CABEND))
13175 +                               mask2 |= ATH9K_INT_CABEND;
13176 +                       if (isr2 & AR_ISR_S2_GTT)
13177 +                               mask2 |= ATH9K_INT_GTT;
13178 +                       if (isr2 & AR_ISR_S2_CST)
13179 +                               mask2 |= ATH9K_INT_CST;
13180 +                       if (isr2 & AR_ISR_S2_TSFOOR)
13181 +                               mask2 |= ATH9K_INT_TSFOOR;
13182 +               }
13183 +
13184 +               isr = REG_READ(ah, AR_ISR_RAC);
13185 +               if (isr == 0xffffffff) {
13186 +                       *masked = 0;
13187 +                       return false;
13188 +               }
13189 +
13190 +               *masked = isr & ATH9K_INT_COMMON;
13191 +
13192 +               if (ah->config.rx_intr_mitigation) {
13193 +                       if (isr & (AR_ISR_RXMINTR | AR_ISR_RXINTM))
13194 +                               *masked |= ATH9K_INT_RX;
13195 +               }
13196 +
13197 +               if (isr & (AR_ISR_RXOK | AR_ISR_RXERR))
13198 +                       *masked |= ATH9K_INT_RX;
13199 +               if (isr &
13200 +                   (AR_ISR_TXOK | AR_ISR_TXDESC | AR_ISR_TXERR |
13201 +                    AR_ISR_TXEOL)) {
13202 +                       u32 s0_s, s1_s;
13203 +
13204 +                       *masked |= ATH9K_INT_TX;
13205 +
13206 +                       s0_s = REG_READ(ah, AR_ISR_S0_S);
13207 +                       ah->intr_txqs |= MS(s0_s, AR_ISR_S0_QCU_TXOK);
13208 +                       ah->intr_txqs |= MS(s0_s, AR_ISR_S0_QCU_TXDESC);
13209 +
13210 +                       s1_s = REG_READ(ah, AR_ISR_S1_S);
13211 +                       ah->intr_txqs |= MS(s1_s, AR_ISR_S1_QCU_TXERR);
13212 +                       ah->intr_txqs |= MS(s1_s, AR_ISR_S1_QCU_TXEOL);
13213 +               }
13214 +
13215 +               if (isr & AR_ISR_RXORN) {
13216 +                       ath_print(common, ATH_DBG_INTERRUPT,
13217 +                                 "receive FIFO overrun interrupt\n");
13218 +               }
13219 +
13220 +               if (!AR_SREV_9100(ah)) {
13221 +                       if (!(pCap->hw_caps & ATH9K_HW_CAP_AUTOSLEEP)) {
13222 +                               u32 isr5 = REG_READ(ah, AR_ISR_S5_S);
13223 +                               if (isr5 & AR_ISR_S5_TIM_TIMER)
13224 +                                       *masked |= ATH9K_INT_TIM_TIMER;
13225 +                       }
13226 +               }
13227 +
13228 +               *masked |= mask2;
13229 +       }
13230 +
13231 +       if (AR_SREV_9100(ah))
13232 +               return true;
13233 +
13234 +       if (isr & AR_ISR_GENTMR) {
13235 +               u32 s5_s;
13236 +
13237 +               s5_s = REG_READ(ah, AR_ISR_S5_S);
13238 +               if (isr & AR_ISR_GENTMR) {
13239 +                       ah->intr_gen_timer_trigger =
13240 +                               MS(s5_s, AR_ISR_S5_GENTIMER_TRIG);
13241 +
13242 +                       ah->intr_gen_timer_thresh =
13243 +                               MS(s5_s, AR_ISR_S5_GENTIMER_THRESH);
13244 +
13245 +                       if (ah->intr_gen_timer_trigger)
13246 +                               *masked |= ATH9K_INT_GENTIMER;
13247 +
13248 +               }
13249 +       }
13250 +
13251 +       if (sync_cause) {
13252 +               fatal_int =
13253 +                       (sync_cause &
13254 +                        (AR_INTR_SYNC_HOST1_FATAL | AR_INTR_SYNC_HOST1_PERR))
13255 +                       ? true : false;
13256 +
13257 +               if (fatal_int) {
13258 +                       if (sync_cause & AR_INTR_SYNC_HOST1_FATAL) {
13259 +                               ath_print(common, ATH_DBG_ANY,
13260 +                                         "received PCI FATAL interrupt\n");
13261 +                       }
13262 +                       if (sync_cause & AR_INTR_SYNC_HOST1_PERR) {
13263 +                               ath_print(common, ATH_DBG_ANY,
13264 +                                         "received PCI PERR interrupt\n");
13265 +                       }
13266 +                       *masked |= ATH9K_INT_FATAL;
13267 +               }
13268 +               if (sync_cause & AR_INTR_SYNC_RADM_CPL_TIMEOUT) {
13269 +                       ath_print(common, ATH_DBG_INTERRUPT,
13270 +                                 "AR_INTR_SYNC_RADM_CPL_TIMEOUT\n");
13271 +                       REG_WRITE(ah, AR_RC, AR_RC_HOSTIF);
13272 +                       REG_WRITE(ah, AR_RC, 0);
13273 +                       *masked |= ATH9K_INT_FATAL;
13274 +               }
13275 +               if (sync_cause & AR_INTR_SYNC_LOCAL_TIMEOUT) {
13276 +                       ath_print(common, ATH_DBG_INTERRUPT,
13277 +                                 "AR_INTR_SYNC_LOCAL_TIMEOUT\n");
13278 +               }
13279 +
13280 +               REG_WRITE(ah, AR_INTR_SYNC_CAUSE_CLR, sync_cause);
13281 +               (void) REG_READ(ah, AR_INTR_SYNC_CAUSE_CLR);
13282 +       }
13283 +       return true;
13284 +}
13285 +
13286 +static void ar9002_hw_fill_txdesc(struct ath_hw *ah, void *ds, u32 seglen,
13287 +                                 bool is_firstseg, bool is_lastseg,
13288 +                                 const void *ds0, dma_addr_t buf_addr,
13289 +                                 unsigned int qcu)
13290 +{
13291 +       struct ar5416_desc *ads = AR5416DESC(ds);
13292 +
13293 +       ads->ds_data = buf_addr;
13294 +
13295 +       if (is_firstseg) {
13296 +               ads->ds_ctl1 |= seglen | (is_lastseg ? 0 : AR_TxMore);
13297 +       } else if (is_lastseg) {
13298 +               ads->ds_ctl0 = 0;
13299 +               ads->ds_ctl1 = seglen;
13300 +               ads->ds_ctl2 = AR5416DESC_CONST(ds0)->ds_ctl2;
13301 +               ads->ds_ctl3 = AR5416DESC_CONST(ds0)->ds_ctl3;
13302 +       } else {
13303 +               ads->ds_ctl0 = 0;
13304 +               ads->ds_ctl1 = seglen | AR_TxMore;
13305 +               ads->ds_ctl2 = 0;
13306 +               ads->ds_ctl3 = 0;
13307 +       }
13308 +       ads->ds_txstatus0 = ads->ds_txstatus1 = 0;
13309 +       ads->ds_txstatus2 = ads->ds_txstatus3 = 0;
13310 +       ads->ds_txstatus4 = ads->ds_txstatus5 = 0;
13311 +       ads->ds_txstatus6 = ads->ds_txstatus7 = 0;
13312 +       ads->ds_txstatus8 = ads->ds_txstatus9 = 0;
13313 +}
13314 +
13315 +static void ar9002_hw_clear_txdesc(struct ath_hw *ah, void *ds)
13316 +{
13317 +       struct ar5416_desc *ads = AR5416DESC(ds);
13318 +
13319 +       ads->ds_txstatus0 = ads->ds_txstatus1 = 0;
13320 +       ads->ds_txstatus2 = ads->ds_txstatus3 = 0;
13321 +       ads->ds_txstatus4 = ads->ds_txstatus5 = 0;
13322 +       ads->ds_txstatus6 = ads->ds_txstatus7 = 0;
13323 +       ads->ds_txstatus8 = ads->ds_txstatus9 = 0;
13324 +}
13325 +
13326 +static int ar9002_hw_proc_txdesc(struct ath_hw *ah, void *ds,
13327 +                                struct ath_tx_status *ts)
13328 +{
13329 +       struct ar5416_desc *ads = AR5416DESC(ds);
13330 +
13331 +       if ((ads->ds_txstatus9 & AR_TxDone) == 0)
13332 +               return -EINPROGRESS;
13333 +
13334 +       ts->ts_seqnum = MS(ads->ds_txstatus9, AR_SeqNum);
13335 +       ts->ts_tstamp = ads->AR_SendTimestamp;
13336 +       ts->ts_status = 0;
13337 +       ts->ts_flags = 0;
13338 +
13339 +       if (ads->ds_txstatus1 & AR_FrmXmitOK)
13340 +               ts->ts_status |= ATH9K_TX_ACKED;
13341 +       if (ads->ds_txstatus1 & AR_ExcessiveRetries)
13342 +               ts->ts_status |= ATH9K_TXERR_XRETRY;
13343 +       if (ads->ds_txstatus1 & AR_Filtered)
13344 +               ts->ts_status |= ATH9K_TXERR_FILT;
13345 +       if (ads->ds_txstatus1 & AR_FIFOUnderrun) {
13346 +               ts->ts_status |= ATH9K_TXERR_FIFO;
13347 +               ath9k_hw_updatetxtriglevel(ah, true);
13348 +       }
13349 +       if (ads->ds_txstatus9 & AR_TxOpExceeded)
13350 +               ts->ts_status |= ATH9K_TXERR_XTXOP;
13351 +       if (ads->ds_txstatus1 & AR_TxTimerExpired)
13352 +               ts->ts_status |= ATH9K_TXERR_TIMER_EXPIRED;
13353 +
13354 +       if (ads->ds_txstatus1 & AR_DescCfgErr)
13355 +               ts->ts_flags |= ATH9K_TX_DESC_CFG_ERR;
13356 +       if (ads->ds_txstatus1 & AR_TxDataUnderrun) {
13357 +               ts->ts_flags |= ATH9K_TX_DATA_UNDERRUN;
13358 +               ath9k_hw_updatetxtriglevel(ah, true);
13359 +       }
13360 +       if (ads->ds_txstatus1 & AR_TxDelimUnderrun) {
13361 +               ts->ts_flags |= ATH9K_TX_DELIM_UNDERRUN;
13362 +               ath9k_hw_updatetxtriglevel(ah, true);
13363 +       }
13364 +       if (ads->ds_txstatus0 & AR_TxBaStatus) {
13365 +               ts->ts_flags |= ATH9K_TX_BA;
13366 +               ts->ba_low = ads->AR_BaBitmapLow;
13367 +               ts->ba_high = ads->AR_BaBitmapHigh;
13368 +       }
13369 +
13370 +       ts->ts_rateindex = MS(ads->ds_txstatus9, AR_FinalTxIdx);
13371 +       switch (ts->ts_rateindex) {
13372 +       case 0:
13373 +               ts->ts_ratecode = MS(ads->ds_ctl3, AR_XmitRate0);
13374 +               break;
13375 +       case 1:
13376 +               ts->ts_ratecode = MS(ads->ds_ctl3, AR_XmitRate1);
13377 +               break;
13378 +       case 2:
13379 +               ts->ts_ratecode = MS(ads->ds_ctl3, AR_XmitRate2);
13380 +               break;
13381 +       case 3:
13382 +               ts->ts_ratecode = MS(ads->ds_ctl3, AR_XmitRate3);
13383 +               break;
13384 +       }
13385 +
13386 +       ts->ts_rssi = MS(ads->ds_txstatus5, AR_TxRSSICombined);
13387 +       ts->ts_rssi_ctl0 = MS(ads->ds_txstatus0, AR_TxRSSIAnt00);
13388 +       ts->ts_rssi_ctl1 = MS(ads->ds_txstatus0, AR_TxRSSIAnt01);
13389 +       ts->ts_rssi_ctl2 = MS(ads->ds_txstatus0, AR_TxRSSIAnt02);
13390 +       ts->ts_rssi_ext0 = MS(ads->ds_txstatus5, AR_TxRSSIAnt10);
13391 +       ts->ts_rssi_ext1 = MS(ads->ds_txstatus5, AR_TxRSSIAnt11);
13392 +       ts->ts_rssi_ext2 = MS(ads->ds_txstatus5, AR_TxRSSIAnt12);
13393 +       ts->evm0 = ads->AR_TxEVM0;
13394 +       ts->evm1 = ads->AR_TxEVM1;
13395 +       ts->evm2 = ads->AR_TxEVM2;
13396 +       ts->ts_shortretry = MS(ads->ds_txstatus1, AR_RTSFailCnt);
13397 +       ts->ts_longretry = MS(ads->ds_txstatus1, AR_DataFailCnt);
13398 +       ts->ts_virtcol = MS(ads->ds_txstatus1, AR_VirtRetryCnt);
13399 +       ts->ts_antenna = 0;
13400 +
13401 +       return 0;
13402 +}
13403 +
13404 +static void ar9002_hw_set11n_txdesc(struct ath_hw *ah, void *ds,
13405 +                                   u32 pktLen, enum ath9k_pkt_type type,
13406 +                                   u32 txPower, u32 keyIx,
13407 +                                   enum ath9k_key_type keyType, u32 flags)
13408 +{
13409 +       struct ar5416_desc *ads = AR5416DESC(ds);
13410 +
13411 +
13412 +       txPower += ah->txpower_indexoffset;
13413 +       if (txPower > 63)
13414 +               txPower = 63;
13415 +
13416 +       ads->ds_ctl0 = (pktLen & AR_FrameLen)
13417 +               | (flags & ATH9K_TXDESC_VMF ? AR_VirtMoreFrag : 0)
13418 +               | SM(txPower, AR_XmitPower)
13419 +               | (flags & ATH9K_TXDESC_VEOL ? AR_VEOL : 0)
13420 +               | (flags & ATH9K_TXDESC_CLRDMASK ? AR_ClrDestMask : 0)
13421 +               | (flags & ATH9K_TXDESC_INTREQ ? AR_TxIntrReq : 0)
13422 +               | (keyIx != ATH9K_TXKEYIX_INVALID ? AR_DestIdxValid : 0);
13423 +
13424 +       ads->ds_ctl1 =
13425 +               (keyIx != ATH9K_TXKEYIX_INVALID ? SM(keyIx, AR_DestIdx) : 0)
13426 +               | SM(type, AR_FrameType)
13427 +               | (flags & ATH9K_TXDESC_NOACK ? AR_NoAck : 0)
13428 +               | (flags & ATH9K_TXDESC_EXT_ONLY ? AR_ExtOnly : 0)
13429 +               | (flags & ATH9K_TXDESC_EXT_AND_CTL ? AR_ExtAndCtl : 0);
13430 +
13431 +       ads->ds_ctl6 = SM(keyType, AR_EncrType);
13432 +
13433 +       if (AR_SREV_9285(ah) || AR_SREV_9271(ah)) {
13434 +               ads->ds_ctl8 = 0;
13435 +               ads->ds_ctl9 = 0;
13436 +               ads->ds_ctl10 = 0;
13437 +               ads->ds_ctl11 = 0;
13438 +       }
13439 +}
13440 +
13441 +static void ar9002_hw_set11n_ratescenario(struct ath_hw *ah, void *ds,
13442 +                                         void *lastds,
13443 +                                         u32 durUpdateEn, u32 rtsctsRate,
13444 +                                         u32 rtsctsDuration,
13445 +                                         struct ath9k_11n_rate_series series[],
13446 +                                         u32 nseries, u32 flags)
13447 +{
13448 +       struct ar5416_desc *ads = AR5416DESC(ds);
13449 +       struct ar5416_desc *last_ads = AR5416DESC(lastds);
13450 +       u32 ds_ctl0;
13451 +
13452 +       if (flags & (ATH9K_TXDESC_RTSENA | ATH9K_TXDESC_CTSENA)) {
13453 +               ds_ctl0 = ads->ds_ctl0;
13454 +
13455 +               if (flags & ATH9K_TXDESC_RTSENA) {
13456 +                       ds_ctl0 &= ~AR_CTSEnable;
13457 +                       ds_ctl0 |= AR_RTSEnable;
13458 +               } else {
13459 +                       ds_ctl0 &= ~AR_RTSEnable;
13460 +                       ds_ctl0 |= AR_CTSEnable;
13461 +               }
13462 +
13463 +               ads->ds_ctl0 = ds_ctl0;
13464 +       } else {
13465 +               ads->ds_ctl0 =
13466 +                       (ads->ds_ctl0 & ~(AR_RTSEnable | AR_CTSEnable));
13467 +       }
13468 +
13469 +       ads->ds_ctl2 = set11nTries(series, 0)
13470 +               | set11nTries(series, 1)
13471 +               | set11nTries(series, 2)
13472 +               | set11nTries(series, 3)
13473 +               | (durUpdateEn ? AR_DurUpdateEna : 0)
13474 +               | SM(0, AR_BurstDur);
13475 +
13476 +       ads->ds_ctl3 = set11nRate(series, 0)
13477 +               | set11nRate(series, 1)
13478 +               | set11nRate(series, 2)
13479 +               | set11nRate(series, 3);
13480 +
13481 +       ads->ds_ctl4 = set11nPktDurRTSCTS(series, 0)
13482 +               | set11nPktDurRTSCTS(series, 1);
13483 +
13484 +       ads->ds_ctl5 = set11nPktDurRTSCTS(series, 2)
13485 +               | set11nPktDurRTSCTS(series, 3);
13486 +
13487 +       ads->ds_ctl7 = set11nRateFlags(series, 0)
13488 +               | set11nRateFlags(series, 1)
13489 +               | set11nRateFlags(series, 2)
13490 +               | set11nRateFlags(series, 3)
13491 +               | SM(rtsctsRate, AR_RTSCTSRate);
13492 +       last_ads->ds_ctl2 = ads->ds_ctl2;
13493 +       last_ads->ds_ctl3 = ads->ds_ctl3;
13494 +}
13495 +
13496 +static void ar9002_hw_set11n_aggr_first(struct ath_hw *ah, void *ds,
13497 +                                       u32 aggrLen)
13498 +{
13499 +       struct ar5416_desc *ads = AR5416DESC(ds);
13500 +
13501 +       ads->ds_ctl1 |= (AR_IsAggr | AR_MoreAggr);
13502 +       ads->ds_ctl6 &= ~AR_AggrLen;
13503 +       ads->ds_ctl6 |= SM(aggrLen, AR_AggrLen);
13504 +}
13505 +
13506 +static void ar9002_hw_set11n_aggr_middle(struct ath_hw *ah, void *ds,
13507 +                                        u32 numDelims)
13508 +{
13509 +       struct ar5416_desc *ads = AR5416DESC(ds);
13510 +       unsigned int ctl6;
13511 +
13512 +       ads->ds_ctl1 |= (AR_IsAggr | AR_MoreAggr);
13513 +
13514 +       ctl6 = ads->ds_ctl6;
13515 +       ctl6 &= ~AR_PadDelim;
13516 +       ctl6 |= SM(numDelims, AR_PadDelim);
13517 +       ads->ds_ctl6 = ctl6;
13518 +}
13519 +
13520 +static void ar9002_hw_set11n_aggr_last(struct ath_hw *ah, void *ds)
13521 +{
13522 +       struct ar5416_desc *ads = AR5416DESC(ds);
13523 +
13524 +       ads->ds_ctl1 |= AR_IsAggr;
13525 +       ads->ds_ctl1 &= ~AR_MoreAggr;
13526 +       ads->ds_ctl6 &= ~AR_PadDelim;
13527 +}
13528 +
13529 +static void ar9002_hw_clr11n_aggr(struct ath_hw *ah, void *ds)
13530 +{
13531 +       struct ar5416_desc *ads = AR5416DESC(ds);
13532 +
13533 +       ads->ds_ctl1 &= (~AR_IsAggr & ~AR_MoreAggr);
13534 +}
13535 +
13536 +static void ar9002_hw_set11n_burstduration(struct ath_hw *ah, void *ds,
13537 +                                          u32 burstDuration)
13538 +{
13539 +       struct ar5416_desc *ads = AR5416DESC(ds);
13540 +
13541 +       ads->ds_ctl2 &= ~AR_BurstDur;
13542 +       ads->ds_ctl2 |= SM(burstDuration, AR_BurstDur);
13543 +}
13544 +
13545 +static void ar9002_hw_set11n_virtualmorefrag(struct ath_hw *ah, void *ds,
13546 +                                           u32 vmf)
13547 +{
13548 +       struct ar5416_desc *ads = AR5416DESC(ds);
13549 +
13550 +       if (vmf)
13551 +               ads->ds_ctl0 |= AR_VirtMoreFrag;
13552 +       else
13553 +               ads->ds_ctl0 &= ~AR_VirtMoreFrag;
13554 +}
13555 +
13556 +void ar9002_hw_attach_mac_ops(struct ath_hw *ah)
13557 +{
13558 +       struct ath_hw_ops *ops = ath9k_hw_ops(ah);
13559 +
13560 +       ops->rx_enable = ar9002_hw_rx_enable;
13561 +       ops->set_desc_link = ar9002_hw_set_desc_link;
13562 +       ops->get_desc_link = ar9002_hw_get_desc_link;
13563 +       ops->get_isr = ar9002_hw_get_isr;
13564 +       ops->fill_txdesc = ar9002_hw_fill_txdesc;
13565 +       ops->clear_txdesc = ar9002_hw_clear_txdesc;
13566 +       ops->proc_txdesc = ar9002_hw_proc_txdesc;
13567 +       ops->set11n_txdesc = ar9002_hw_set11n_txdesc;
13568 +       ops->set11n_ratescenario = ar9002_hw_set11n_ratescenario;
13569 +       ops->set11n_aggr_first = ar9002_hw_set11n_aggr_first;
13570 +       ops->set11n_aggr_middle = ar9002_hw_set11n_aggr_middle;
13571 +       ops->set11n_aggr_last = ar9002_hw_set11n_aggr_last;
13572 +       ops->clr11n_aggr = ar9002_hw_clr11n_aggr;
13573 +       ops->set11n_burstduration = ar9002_hw_set11n_burstduration;
13574 +       ops->set11n_virtualmorefrag = ar9002_hw_set11n_virtualmorefrag;
13575 +}
13576 diff --git a/drivers/net/wireless/ath/ath9k/ar9002_phy.c b/drivers/net/wireless/ath/ath9k/ar9002_phy.c
13577 new file mode 100644
13578 index 0000000..7790d93
13579 --- /dev/null
13580 +++ b/drivers/net/wireless/ath/ath9k/ar9002_phy.c
13581 @@ -0,0 +1,601 @@
13582 +/*
13583 + * Copyright (c) 2008-2010 Atheros Communications Inc.
13584 + *
13585 + * Permission to use, copy, modify, and/or distribute this software for any
13586 + * purpose with or without fee is hereby granted, provided that the above
13587 + * copyright notice and this permission notice appear in all copies.
13588 + *
13589 + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13590 + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13591 + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13592 + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13593 + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13594 + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
13595 + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
13596 + */
13597 +
13598 +/**
13599 + * DOC: Programming Atheros 802.11n analog front end radios
13600 + *
13601 + * AR5416 MAC based PCI devices and AR518 MAC based PCI-Express
13602 + * devices have either an external AR2133 analog front end radio for single
13603 + * band 2.4 GHz communication or an AR5133 analog front end radio for dual
13604 + * band 2.4 GHz / 5 GHz communication.
13605 + *
13606 + * All devices after the AR5416 and AR5418 family starting with the AR9280
13607 + * have their analog front radios, MAC/BB and host PCIe/USB interface embedded
13608 + * into a single-chip and require less programming.
13609 + *
13610 + * The following single-chips exist with a respective embedded radio:
13611 + *
13612 + * AR9280 - 11n dual-band 2x2 MIMO for PCIe
13613 + * AR9281 - 11n single-band 1x2 MIMO for PCIe
13614 + * AR9285 - 11n single-band 1x1 for PCIe
13615 + * AR9287 - 11n single-band 2x2 MIMO for PCIe
13616 + *
13617 + * AR9220 - 11n dual-band 2x2 MIMO for PCI
13618 + * AR9223 - 11n single-band 2x2 MIMO for PCI
13619 + *
13620 + * AR9287 - 11n single-band 1x1 MIMO for USB
13621 + */
13622 +
13623 +#include "hw.h"
13624 +#include "ar9002_phy.h"
13625 +
13626 +/**
13627 + * ar9002_hw_set_channel - set channel on single-chip device
13628 + * @ah: atheros hardware structure
13629 + * @chan:
13630 + *
13631 + * This is the function to change channel on single-chip devices, that is
13632 + * all devices after ar9280.
13633 + *
13634 + * This function takes the channel value in MHz and sets
13635 + * hardware channel value. Assumes writes have been enabled to analog bus.
13636 + *
13637 + * Actual Expression,
13638 + *
13639 + * For 2GHz channel,
13640 + * Channel Frequency = (3/4) * freq_ref * (chansel[8:0] + chanfrac[16:0]/2^17)
13641 + * (freq_ref = 40MHz)
13642 + *
13643 + * For 5GHz channel,
13644 + * Channel Frequency = (3/2) * freq_ref * (chansel[8:0] + chanfrac[16:0]/2^10)
13645 + * (freq_ref = 40MHz/(24>>amodeRefSel))
13646 + */
13647 +static int ar9002_hw_set_channel(struct ath_hw *ah, struct ath9k_channel *chan)
13648 +{
13649 +       u16 bMode, fracMode, aModeRefSel = 0;
13650 +       u32 freq, ndiv, channelSel = 0, channelFrac = 0, reg32 = 0;
13651 +       struct chan_centers centers;
13652 +       u32 refDivA = 24;
13653 +
13654 +       ath9k_hw_get_channel_centers(ah, chan, &centers);
13655 +       freq = centers.synth_center;
13656 +
13657 +       reg32 = REG_READ(ah, AR_PHY_SYNTH_CONTROL);
13658 +       reg32 &= 0xc0000000;
13659 +
13660 +       if (freq < 4800) { /* 2 GHz, fractional mode */
13661 +               u32 txctl;
13662 +               int regWrites = 0;
13663 +
13664 +               bMode = 1;
13665 +               fracMode = 1;
13666 +               aModeRefSel = 0;
13667 +               channelSel = CHANSEL_2G(freq);
13668 +
13669 +               if (AR_SREV_9287_11_OR_LATER(ah)) {
13670 +                       if (freq == 2484) {
13671 +                               /* Enable channel spreading for channel 14 */
13672 +                               REG_WRITE_ARRAY(&ah->iniCckfirJapan2484,
13673 +                                               1, regWrites);
13674 +                       } else {
13675 +                               REG_WRITE_ARRAY(&ah->iniCckfirNormal,
13676 +                                               1, regWrites);
13677 +                       }
13678 +               } else {
13679 +                       txctl = REG_READ(ah, AR_PHY_CCK_TX_CTRL);
13680 +                       if (freq == 2484) {
13681 +                               /* Enable channel spreading for channel 14 */
13682 +                               REG_WRITE(ah, AR_PHY_CCK_TX_CTRL,
13683 +                                         txctl | AR_PHY_CCK_TX_CTRL_JAPAN);
13684 +                       } else {
13685 +                               REG_WRITE(ah, AR_PHY_CCK_TX_CTRL,
13686 +                                         txctl &~ AR_PHY_CCK_TX_CTRL_JAPAN);
13687 +                       }
13688 +               }
13689 +       } else {
13690 +               bMode = 0;
13691 +               fracMode = 0;
13692 +
13693 +               switch(ah->eep_ops->get_eeprom(ah, EEP_FRAC_N_5G)) {
13694 +               case 0:
13695 +                       if ((freq % 20) == 0) {
13696 +                               aModeRefSel = 3;
13697 +                       } else if ((freq % 10) == 0) {
13698 +                               aModeRefSel = 2;
13699 +                       }
13700 +                       if (aModeRefSel)
13701 +                               break;
13702 +               case 1:
13703 +               default:
13704 +                       aModeRefSel = 0;
13705 +                       /*
13706 +                        * Enable 2G (fractional) mode for channels
13707 +                        * which are 5MHz spaced.
13708 +                        */
13709 +                       fracMode = 1;
13710 +                       refDivA = 1;
13711 +                       channelSel = CHANSEL_5G(freq);
13712 +
13713 +                       /* RefDivA setting */
13714 +                       REG_RMW_FIELD(ah, AR_AN_SYNTH9,
13715 +                                     AR_AN_SYNTH9_REFDIVA, refDivA);
13716 +
13717 +               }
13718 +
13719 +               if (!fracMode) {
13720 +                       ndiv = (freq * (refDivA >> aModeRefSel)) / 60;
13721 +                       channelSel = ndiv & 0x1ff;
13722 +                       channelFrac = (ndiv & 0xfffffe00) * 2;
13723 +                       channelSel = (channelSel << 17) | channelFrac;
13724 +               }
13725 +       }
13726 +
13727 +       reg32 = reg32 |
13728 +           (bMode << 29) |
13729 +           (fracMode << 28) | (aModeRefSel << 26) | (channelSel);
13730 +
13731 +       REG_WRITE(ah, AR_PHY_SYNTH_CONTROL, reg32);
13732 +
13733 +       ah->curchan = chan;
13734 +       ah->curchan_rad_index = -1;
13735 +
13736 +       return 0;
13737 +}
13738 +
13739 +/**
13740 + * ar9002_hw_spur_mitigate - convert baseband spur frequency
13741 + * @ah: atheros hardware structure
13742 + * @chan:
13743 + *
13744 + * For single-chip solutions. Converts to baseband spur frequency given the
13745 + * input channel frequency and compute register settings below.
13746 + */
13747 +static void ar9002_hw_spur_mitigate(struct ath_hw *ah, struct ath9k_channel *chan)
13748 +{
13749 +       int bb_spur = AR_NO_SPUR;
13750 +       int freq;
13751 +       int bin, cur_bin;
13752 +       int bb_spur_off, spur_subchannel_sd;
13753 +       int spur_freq_sd;
13754 +       int spur_delta_phase;
13755 +       int denominator;
13756 +       int upper, lower, cur_vit_mask;
13757 +       int tmp, newVal;
13758 +       int i;
13759 +       int pilot_mask_reg[4] = { AR_PHY_TIMING7, AR_PHY_TIMING8,
13760 +                         AR_PHY_PILOT_MASK_01_30, AR_PHY_PILOT_MASK_31_60
13761 +       };
13762 +       int chan_mask_reg[4] = { AR_PHY_TIMING9, AR_PHY_TIMING10,
13763 +                        AR_PHY_CHANNEL_MASK_01_30, AR_PHY_CHANNEL_MASK_31_60
13764 +       };
13765 +       int inc[4] = { 0, 100, 0, 0 };
13766 +       struct chan_centers centers;
13767 +
13768 +       int8_t mask_m[123];
13769 +       int8_t mask_p[123];
13770 +       int8_t mask_amt;
13771 +       int tmp_mask;
13772 +       int cur_bb_spur;
13773 +       bool is2GHz = IS_CHAN_2GHZ(chan);
13774 +
13775 +       memset(&mask_m, 0, sizeof(int8_t) * 123);
13776 +       memset(&mask_p, 0, sizeof(int8_t) * 123);
13777 +
13778 +       ath9k_hw_get_channel_centers(ah, chan, &centers);
13779 +       freq = centers.synth_center;
13780 +
13781 +       ah->config.spurmode = SPUR_ENABLE_EEPROM;
13782 +       for (i = 0; i < AR_EEPROM_MODAL_SPURS; i++) {
13783 +               cur_bb_spur = ah->eep_ops->get_spur_channel(ah, i, is2GHz);
13784 +
13785 +               if (is2GHz)
13786 +                       cur_bb_spur = (cur_bb_spur / 10) + AR_BASE_FREQ_2GHZ;
13787 +               else
13788 +                       cur_bb_spur = (cur_bb_spur / 10) + AR_BASE_FREQ_5GHZ;
13789 +
13790 +               if (AR_NO_SPUR == cur_bb_spur)
13791 +                       break;
13792 +               cur_bb_spur = cur_bb_spur - freq;
13793 +
13794 +               if (IS_CHAN_HT40(chan)) {
13795 +                       if ((cur_bb_spur > -AR_SPUR_FEEQ_BOUND_HT40) &&
13796 +                           (cur_bb_spur < AR_SPUR_FEEQ_BOUND_HT40)) {
13797 +                               bb_spur = cur_bb_spur;
13798 +                               break;
13799 +                       }
13800 +               } else if ((cur_bb_spur > -AR_SPUR_FEEQ_BOUND_HT20) &&
13801 +                          (cur_bb_spur < AR_SPUR_FEEQ_BOUND_HT20)) {
13802 +                       bb_spur = cur_bb_spur;
13803 +                       break;
13804 +               }
13805 +       }
13806 +
13807 +       if (AR_NO_SPUR == bb_spur) {
13808 +               REG_CLR_BIT(ah, AR_PHY_FORCE_CLKEN_CCK,
13809 +                           AR_PHY_FORCE_CLKEN_CCK_MRC_MUX);
13810 +               return;
13811 +       } else {
13812 +               REG_CLR_BIT(ah, AR_PHY_FORCE_CLKEN_CCK,
13813 +                           AR_PHY_FORCE_CLKEN_CCK_MRC_MUX);
13814 +       }
13815 +
13816 +       bin = bb_spur * 320;
13817 +
13818 +       tmp = REG_READ(ah, AR_PHY_TIMING_CTRL4(0));
13819 +
13820 +       newVal = tmp | (AR_PHY_TIMING_CTRL4_ENABLE_SPUR_RSSI |
13821 +                       AR_PHY_TIMING_CTRL4_ENABLE_SPUR_FILTER |
13822 +                       AR_PHY_TIMING_CTRL4_ENABLE_CHAN_MASK |
13823 +                       AR_PHY_TIMING_CTRL4_ENABLE_PILOT_MASK);
13824 +       REG_WRITE(ah, AR_PHY_TIMING_CTRL4(0), newVal);
13825 +
13826 +       newVal = (AR_PHY_SPUR_REG_MASK_RATE_CNTL |
13827 +                 AR_PHY_SPUR_REG_ENABLE_MASK_PPM |
13828 +                 AR_PHY_SPUR_REG_MASK_RATE_SELECT |
13829 +                 AR_PHY_SPUR_REG_ENABLE_VIT_SPUR_RSSI |
13830 +                 SM(SPUR_RSSI_THRESH, AR_PHY_SPUR_REG_SPUR_RSSI_THRESH));
13831 +       REG_WRITE(ah, AR_PHY_SPUR_REG, newVal);
13832 +
13833 +       if (IS_CHAN_HT40(chan)) {
13834 +               if (bb_spur < 0) {
13835 +                       spur_subchannel_sd = 1;
13836 +                       bb_spur_off = bb_spur + 10;
13837 +               } else {
13838 +                       spur_subchannel_sd = 0;
13839 +                       bb_spur_off = bb_spur - 10;
13840 +               }
13841 +       } else {
13842 +               spur_subchannel_sd = 0;
13843 +               bb_spur_off = bb_spur;
13844 +       }
13845 +
13846 +       if (IS_CHAN_HT40(chan))
13847 +               spur_delta_phase =
13848 +                       ((bb_spur * 262144) /
13849 +                        10) & AR_PHY_TIMING11_SPUR_DELTA_PHASE;
13850 +       else
13851 +               spur_delta_phase =
13852 +                       ((bb_spur * 524288) /
13853 +                        10) & AR_PHY_TIMING11_SPUR_DELTA_PHASE;
13854 +
13855 +       denominator = IS_CHAN_2GHZ(chan) ? 44 : 40;
13856 +       spur_freq_sd = ((bb_spur_off * 2048) / denominator) & 0x3ff;
13857 +
13858 +       newVal = (AR_PHY_TIMING11_USE_SPUR_IN_AGC |
13859 +                 SM(spur_freq_sd, AR_PHY_TIMING11_SPUR_FREQ_SD) |
13860 +                 SM(spur_delta_phase, AR_PHY_TIMING11_SPUR_DELTA_PHASE));
13861 +       REG_WRITE(ah, AR_PHY_TIMING11, newVal);
13862 +
13863 +       newVal = spur_subchannel_sd << AR_PHY_SFCORR_SPUR_SUBCHNL_SD_S;
13864 +       REG_WRITE(ah, AR_PHY_SFCORR_EXT, newVal);
13865 +
13866 +       cur_bin = -6000;
13867 +       upper = bin + 100;
13868 +       lower = bin - 100;
13869 +
13870 +       for (i = 0; i < 4; i++) {
13871 +               int pilot_mask = 0;
13872 +               int chan_mask = 0;
13873 +               int bp = 0;
13874 +               for (bp = 0; bp < 30; bp++) {
13875 +                       if ((cur_bin > lower) && (cur_bin < upper)) {
13876 +                               pilot_mask = pilot_mask | 0x1 << bp;
13877 +                               chan_mask = chan_mask | 0x1 << bp;
13878 +                       }
13879 +                       cur_bin += 100;
13880 +               }
13881 +               cur_bin += inc[i];
13882 +               REG_WRITE(ah, pilot_mask_reg[i], pilot_mask);
13883 +               REG_WRITE(ah, chan_mask_reg[i], chan_mask);
13884 +       }
13885 +
13886 +       cur_vit_mask = 6100;
13887 +       upper = bin + 120;
13888 +       lower = bin - 120;
13889 +
13890 +       for (i = 0; i < 123; i++) {
13891 +               if ((cur_vit_mask > lower) && (cur_vit_mask < upper)) {
13892 +
13893 +                       /* workaround for gcc bug #37014 */
13894 +                       volatile int tmp_v = abs(cur_vit_mask - bin);
13895 +
13896 +                       if (tmp_v < 75)
13897 +                               mask_amt = 1;
13898 +                       else
13899 +                               mask_amt = 0;
13900 +                       if (cur_vit_mask < 0)
13901 +                               mask_m[abs(cur_vit_mask / 100)] = mask_amt;
13902 +                       else
13903 +                               mask_p[cur_vit_mask / 100] = mask_amt;
13904 +               }
13905 +               cur_vit_mask -= 100;
13906 +       }
13907 +
13908 +       tmp_mask = (mask_m[46] << 30) | (mask_m[47] << 28)
13909 +               | (mask_m[48] << 26) | (mask_m[49] << 24)
13910 +               | (mask_m[50] << 22) | (mask_m[51] << 20)
13911 +               | (mask_m[52] << 18) | (mask_m[53] << 16)
13912 +               | (mask_m[54] << 14) | (mask_m[55] << 12)
13913 +               | (mask_m[56] << 10) | (mask_m[57] << 8)
13914 +               | (mask_m[58] << 6) | (mask_m[59] << 4)
13915 +               | (mask_m[60] << 2) | (mask_m[61] << 0);
13916 +       REG_WRITE(ah, AR_PHY_BIN_MASK_1, tmp_mask);
13917 +       REG_WRITE(ah, AR_PHY_VIT_MASK2_M_46_61, tmp_mask);
13918 +
13919 +       tmp_mask = (mask_m[31] << 28)
13920 +               | (mask_m[32] << 26) | (mask_m[33] << 24)
13921 +               | (mask_m[34] << 22) | (mask_m[35] << 20)
13922 +               | (mask_m[36] << 18) | (mask_m[37] << 16)
13923 +               | (mask_m[48] << 14) | (mask_m[39] << 12)
13924 +               | (mask_m[40] << 10) | (mask_m[41] << 8)
13925 +               | (mask_m[42] << 6) | (mask_m[43] << 4)
13926 +               | (mask_m[44] << 2) | (mask_m[45] << 0);
13927 +       REG_WRITE(ah, AR_PHY_BIN_MASK_2, tmp_mask);
13928 +       REG_WRITE(ah, AR_PHY_MASK2_M_31_45, tmp_mask);
13929 +
13930 +       tmp_mask = (mask_m[16] << 30) | (mask_m[16] << 28)
13931 +               | (mask_m[18] << 26) | (mask_m[18] << 24)
13932 +               | (mask_m[20] << 22) | (mask_m[20] << 20)
13933 +               | (mask_m[22] << 18) | (mask_m[22] << 16)
13934 +               | (mask_m[24] << 14) | (mask_m[24] << 12)
13935 +               | (mask_m[25] << 10) | (mask_m[26] << 8)
13936 +               | (mask_m[27] << 6) | (mask_m[28] << 4)
13937 +               | (mask_m[29] << 2) | (mask_m[30] << 0);
13938 +       REG_WRITE(ah, AR_PHY_BIN_MASK_3, tmp_mask);
13939 +       REG_WRITE(ah, AR_PHY_MASK2_M_16_30, tmp_mask);
13940 +
13941 +       tmp_mask = (mask_m[0] << 30) | (mask_m[1] << 28)
13942 +               | (mask_m[2] << 26) | (mask_m[3] << 24)
13943 +               | (mask_m[4] << 22) | (mask_m[5] << 20)
13944 +               | (mask_m[6] << 18) | (mask_m[7] << 16)
13945 +               | (mask_m[8] << 14) | (mask_m[9] << 12)
13946 +               | (mask_m[10] << 10) | (mask_m[11] << 8)
13947 +               | (mask_m[12] << 6) | (mask_m[13] << 4)
13948 +               | (mask_m[14] << 2) | (mask_m[15] << 0);
13949 +       REG_WRITE(ah, AR_PHY_MASK_CTL, tmp_mask);
13950 +       REG_WRITE(ah, AR_PHY_MASK2_M_00_15, tmp_mask);
13951 +
13952 +       tmp_mask = (mask_p[15] << 28)
13953 +               | (mask_p[14] << 26) | (mask_p[13] << 24)
13954 +               | (mask_p[12] << 22) | (mask_p[11] << 20)
13955 +               | (mask_p[10] << 18) | (mask_p[9] << 16)
13956 +               | (mask_p[8] << 14) | (mask_p[7] << 12)
13957 +               | (mask_p[6] << 10) | (mask_p[5] << 8)
13958 +               | (mask_p[4] << 6) | (mask_p[3] << 4)
13959 +               | (mask_p[2] << 2) | (mask_p[1] << 0);
13960 +       REG_WRITE(ah, AR_PHY_BIN_MASK2_1, tmp_mask);
13961 +       REG_WRITE(ah, AR_PHY_MASK2_P_15_01, tmp_mask);
13962 +
13963 +       tmp_mask = (mask_p[30] << 28)
13964 +               | (mask_p[29] << 26) | (mask_p[28] << 24)
13965 +               | (mask_p[27] << 22) | (mask_p[26] << 20)
13966 +               | (mask_p[25] << 18) | (mask_p[24] << 16)
13967 +               | (mask_p[23] << 14) | (mask_p[22] << 12)
13968 +               | (mask_p[21] << 10) | (mask_p[20] << 8)
13969 +               | (mask_p[19] << 6) | (mask_p[18] << 4)
13970 +               | (mask_p[17] << 2) | (mask_p[16] << 0);
13971 +       REG_WRITE(ah, AR_PHY_BIN_MASK2_2, tmp_mask);
13972 +       REG_WRITE(ah, AR_PHY_MASK2_P_30_16, tmp_mask);
13973 +
13974 +       tmp_mask = (mask_p[45] << 28)
13975 +               | (mask_p[44] << 26) | (mask_p[43] << 24)
13976 +               | (mask_p[42] << 22) | (mask_p[41] << 20)
13977 +               | (mask_p[40] << 18) | (mask_p[39] << 16)
13978 +               | (mask_p[38] << 14) | (mask_p[37] << 12)
13979 +               | (mask_p[36] << 10) | (mask_p[35] << 8)
13980 +               | (mask_p[34] << 6) | (mask_p[33] << 4)
13981 +               | (mask_p[32] << 2) | (mask_p[31] << 0);
13982 +       REG_WRITE(ah, AR_PHY_BIN_MASK2_3, tmp_mask);
13983 +       REG_WRITE(ah, AR_PHY_MASK2_P_45_31, tmp_mask);
13984 +
13985 +       tmp_mask = (mask_p[61] << 30) | (mask_p[60] << 28)
13986 +               | (mask_p[59] << 26) | (mask_p[58] << 24)
13987 +               | (mask_p[57] << 22) | (mask_p[56] << 20)
13988 +               | (mask_p[55] << 18) | (mask_p[54] << 16)
13989 +               | (mask_p[53] << 14) | (mask_p[52] << 12)
13990 +               | (mask_p[51] << 10) | (mask_p[50] << 8)
13991 +               | (mask_p[49] << 6) | (mask_p[48] << 4)
13992 +               | (mask_p[47] << 2) | (mask_p[46] << 0);
13993 +       REG_WRITE(ah, AR_PHY_BIN_MASK2_4, tmp_mask);
13994 +       REG_WRITE(ah, AR_PHY_MASK2_P_61_45, tmp_mask);
13995 +}
13996 +
13997 +static void ar9002_olc_init(struct ath_hw *ah)
13998 +{
13999 +       u32 i;
14000 +
14001 +       if (!OLC_FOR_AR9280_20_LATER)
14002 +               return;
14003 +
14004 +       if (OLC_FOR_AR9287_10_LATER) {
14005 +               REG_SET_BIT(ah, AR_PHY_TX_PWRCTRL9,
14006 +                               AR_PHY_TX_PWRCTRL9_RES_DC_REMOVAL);
14007 +               ath9k_hw_analog_shift_rmw(ah, AR9287_AN_TXPC0,
14008 +                               AR9287_AN_TXPC0_TXPCMODE,
14009 +                               AR9287_AN_TXPC0_TXPCMODE_S,
14010 +                               AR9287_AN_TXPC0_TXPCMODE_TEMPSENSE);
14011 +               udelay(100);
14012 +       } else {
14013 +               for (i = 0; i < AR9280_TX_GAIN_TABLE_SIZE; i++)
14014 +                       ah->originalGain[i] =
14015 +                               MS(REG_READ(ah, AR_PHY_TX_GAIN_TBL1 + i * 4),
14016 +                                               AR_PHY_TX_GAIN);
14017 +               ah->PDADCdelta = 0;
14018 +       }
14019 +}
14020 +
14021 +static u32 ar9002_hw_compute_pll_control(struct ath_hw *ah,
14022 +                                        struct ath9k_channel *chan)
14023 +{
14024 +       u32 pll;
14025 +
14026 +       pll = SM(0x5, AR_RTC_9160_PLL_REFDIV);
14027 +
14028 +       if (chan && IS_CHAN_HALF_RATE(chan))
14029 +               pll |= SM(0x1, AR_RTC_9160_PLL_CLKSEL);
14030 +       else if (chan && IS_CHAN_QUARTER_RATE(chan))
14031 +               pll |= SM(0x2, AR_RTC_9160_PLL_CLKSEL);
14032 +
14033 +       if (chan && IS_CHAN_5GHZ(chan)) {
14034 +               pll |= SM(0x28, AR_RTC_9160_PLL_DIV);
14035 +
14036 +
14037 +               if (AR_SREV_9280_20(ah)) {
14038 +                       if (((chan->channel % 20) == 0)
14039 +                           || ((chan->channel % 10) == 0))
14040 +                               pll = 0x2850;
14041 +                       else
14042 +                               pll = 0x142c;
14043 +               }
14044 +       } else {
14045 +               pll |= SM(0x2c, AR_RTC_9160_PLL_DIV);
14046 +       }
14047 +
14048 +       return pll;
14049 +}
14050 +
14051 +static void ar9002_hw_do_getnf(struct ath_hw *ah,
14052 +                             int16_t nfarray[NUM_NF_READINGS])
14053 +{
14054 +       struct ath_common *common = ath9k_hw_common(ah);
14055 +       int16_t nf;
14056 +
14057 +       nf = MS(REG_READ(ah, AR_PHY_CCA), AR9280_PHY_MINCCA_PWR);
14058 +
14059 +       if (nf & 0x100)
14060 +               nf = 0 - ((nf ^ 0x1ff) + 1);
14061 +       ath_print(common, ATH_DBG_CALIBRATE,
14062 +                 "NF calibrated [ctl] [chain 0] is %d\n", nf);
14063 +
14064 +       if (AR_SREV_9271(ah) && (nf >= -114))
14065 +               nf = -116;
14066 +
14067 +       nfarray[0] = nf;
14068 +
14069 +       if (!AR_SREV_9285(ah) && !AR_SREV_9271(ah)) {
14070 +               nf = MS(REG_READ(ah, AR_PHY_CH1_CCA),
14071 +                               AR9280_PHY_CH1_MINCCA_PWR);
14072 +
14073 +               if (nf & 0x100)
14074 +                       nf = 0 - ((nf ^ 0x1ff) + 1);
14075 +               ath_print(common, ATH_DBG_CALIBRATE,
14076 +                         "NF calibrated [ctl] [chain 1] is %d\n", nf);
14077 +               nfarray[1] = nf;
14078 +       }
14079 +
14080 +       nf = MS(REG_READ(ah, AR_PHY_EXT_CCA), AR9280_PHY_EXT_MINCCA_PWR);
14081 +       if (nf & 0x100)
14082 +               nf = 0 - ((nf ^ 0x1ff) + 1);
14083 +       ath_print(common, ATH_DBG_CALIBRATE,
14084 +                 "NF calibrated [ext] [chain 0] is %d\n", nf);
14085 +
14086 +       if (AR_SREV_9271(ah) && (nf >= -114))
14087 +               nf = -116;
14088 +
14089 +       nfarray[3] = nf;
14090 +
14091 +       if (!AR_SREV_9285(ah) && !AR_SREV_9271(ah)) {
14092 +               nf = MS(REG_READ(ah, AR_PHY_CH1_EXT_CCA),
14093 +                               AR9280_PHY_CH1_EXT_MINCCA_PWR);
14094 +
14095 +               if (nf & 0x100)
14096 +                       nf = 0 - ((nf ^ 0x1ff) + 1);
14097 +               ath_print(common, ATH_DBG_CALIBRATE,
14098 +                         "NF calibrated [ext] [chain 1] is %d\n", nf);
14099 +               nfarray[4] = nf;
14100 +       }
14101 +}
14102 +
14103 +static void ar9002_hw_loadnf(struct ath_hw *ah, struct ath9k_channel *chan)
14104 +{
14105 +       struct ath9k_nfcal_hist *h;
14106 +       int i, j;
14107 +       int32_t val;
14108 +       const u32 ar5416_cca_regs[6] = {
14109 +               AR_PHY_CCA,
14110 +               AR_PHY_CH1_CCA,
14111 +               AR_PHY_CH2_CCA,
14112 +               AR_PHY_EXT_CCA,
14113 +               AR_PHY_CH1_EXT_CCA,
14114 +               AR_PHY_CH2_EXT_CCA
14115 +       };
14116 +       u8 chainmask, rx_chain_status;
14117 +
14118 +       rx_chain_status = REG_READ(ah, AR_PHY_RX_CHAINMASK);
14119 +       if (AR_SREV_9285(ah) || AR_SREV_9271(ah))
14120 +               chainmask = 0x9;
14121 +       else if (AR_SREV_9280(ah) || AR_SREV_9287(ah)) {
14122 +               if ((rx_chain_status & 0x2) || (rx_chain_status & 0x4))
14123 +                       chainmask = 0x1B;
14124 +               else
14125 +                       chainmask = 0x09;
14126 +       } else {
14127 +               if (rx_chain_status & 0x4)
14128 +                       chainmask = 0x3F;
14129 +               else if (rx_chain_status & 0x2)
14130 +                       chainmask = 0x1B;
14131 +               else
14132 +                       chainmask = 0x09;
14133 +       }
14134 +
14135 +       h = ah->nfCalHist;
14136 +
14137 +       for (i = 0; i < NUM_NF_READINGS; i++) {
14138 +               if (chainmask & (1 << i)) {
14139 +                       val = REG_READ(ah, ar5416_cca_regs[i]);
14140 +                       val &= 0xFFFFFE00;
14141 +                       val |= (((u32) (h[i].privNF) << 1) & 0x1ff);
14142 +                       REG_WRITE(ah, ar5416_cca_regs[i], val);
14143 +               }
14144 +       }
14145 +
14146 +       REG_CLR_BIT(ah, AR_PHY_AGC_CONTROL,
14147 +                   AR_PHY_AGC_CONTROL_ENABLE_NF);
14148 +       REG_CLR_BIT(ah, AR_PHY_AGC_CONTROL,
14149 +                   AR_PHY_AGC_CONTROL_NO_UPDATE_NF);
14150 +       REG_SET_BIT(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_NF);
14151 +
14152 +       for (j = 0; j < 5; j++) {
14153 +               if ((REG_READ(ah, AR_PHY_AGC_CONTROL) &
14154 +                    AR_PHY_AGC_CONTROL_NF) == 0)
14155 +                       break;
14156 +               udelay(50);
14157 +       }
14158 +
14159 +       for (i = 0; i < NUM_NF_READINGS; i++) {
14160 +               if (chainmask & (1 << i)) {
14161 +                       val = REG_READ(ah, ar5416_cca_regs[i]);
14162 +                       val &= 0xFFFFFE00;
14163 +                       val |= (((u32) (-50) << 1) & 0x1ff);
14164 +                       REG_WRITE(ah, ar5416_cca_regs[i], val);
14165 +               }
14166 +       }
14167 +}
14168 +
14169 +void ar9002_hw_attach_phy_ops(struct ath_hw *ah)
14170 +{
14171 +       struct ath_hw_private_ops *priv_ops = ath9k_hw_private_ops(ah);
14172 +
14173 +       priv_ops->set_rf_regs = NULL;
14174 +       priv_ops->rf_alloc_ext_banks = NULL;
14175 +       priv_ops->rf_free_ext_banks = NULL;
14176 +       priv_ops->rf_set_freq = ar9002_hw_set_channel;
14177 +       priv_ops->spur_mitigate_freq = ar9002_hw_spur_mitigate;
14178 +       priv_ops->olc_init = ar9002_olc_init;
14179 +       priv_ops->compute_pll_control = ar9002_hw_compute_pll_control;
14180 +       priv_ops->do_getnf = ar9002_hw_do_getnf;
14181 +       priv_ops->loadnf = ar9002_hw_loadnf;
14182 +}
14183 diff --git a/drivers/net/wireless/ath/ath9k/ar9002_phy.h b/drivers/net/wireless/ath/ath9k/ar9002_phy.h
14184 new file mode 100644
14185 index 0000000..07be17a
14186 --- /dev/null
14187 +++ b/drivers/net/wireless/ath/ath9k/ar9002_phy.h
14188 @@ -0,0 +1,572 @@
14189 +/*
14190 + * Copyright (c) 2008-2010 Atheros Communications Inc.
14191 + *
14192 + * Permission to use, copy, modify, and/or distribute this software for any
14193 + * purpose with or without fee is hereby granted, provided that the above
14194 + * copyright notice and this permission notice appear in all copies.
14195 + *
14196 + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
14197 + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14198 + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14199 + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14200 + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14201 + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14202 + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
14203 + */
14204 +#ifndef AR9002_PHY_H
14205 +#define AR9002_PHY_H
14206 +
14207 +#define AR_PHY_TEST             0x9800
14208 +#define PHY_AGC_CLR             0x10000000
14209 +#define RFSILENT_BB             0x00002000
14210 +
14211 +#define AR_PHY_TURBO                0x9804
14212 +#define AR_PHY_FC_TURBO_MODE        0x00000001
14213 +#define AR_PHY_FC_TURBO_SHORT       0x00000002
14214 +#define AR_PHY_FC_DYN2040_EN        0x00000004
14215 +#define AR_PHY_FC_DYN2040_PRI_ONLY  0x00000008
14216 +#define AR_PHY_FC_DYN2040_PRI_CH    0x00000010
14217 +/* For 25 MHz channel spacing -- not used but supported by hw */
14218 +#define AR_PHY_FC_DYN2040_EXT_CH    0x00000020
14219 +#define AR_PHY_FC_HT_EN             0x00000040
14220 +#define AR_PHY_FC_SHORT_GI_40       0x00000080
14221 +#define AR_PHY_FC_WALSH             0x00000100
14222 +#define AR_PHY_FC_SINGLE_HT_LTF1    0x00000200
14223 +#define AR_PHY_FC_ENABLE_DAC_FIFO   0x00000800
14224 +
14225 +#define AR_PHY_TEST2               0x9808
14226 +
14227 +#define AR_PHY_TIMING2           0x9810
14228 +#define AR_PHY_TIMING3           0x9814
14229 +#define AR_PHY_TIMING3_DSC_MAN   0xFFFE0000
14230 +#define AR_PHY_TIMING3_DSC_MAN_S 17
14231 +#define AR_PHY_TIMING3_DSC_EXP   0x0001E000
14232 +#define AR_PHY_TIMING3_DSC_EXP_S 13
14233 +
14234 +#define AR_PHY_CHIP_ID_REV_0      0x80
14235 +#define AR_PHY_CHIP_ID_REV_1      0x81
14236 +#define AR_PHY_CHIP_ID_9160_REV_0 0xb0
14237 +
14238 +#define AR_PHY_ACTIVE       0x981C
14239 +#define AR_PHY_ACTIVE_EN    0x00000001
14240 +#define AR_PHY_ACTIVE_DIS   0x00000000
14241 +
14242 +#define AR_PHY_RF_CTL2             0x9824
14243 +#define AR_PHY_TX_END_DATA_START   0x000000FF
14244 +#define AR_PHY_TX_END_DATA_START_S 0
14245 +#define AR_PHY_TX_END_PA_ON        0x0000FF00
14246 +#define AR_PHY_TX_END_PA_ON_S      8
14247 +
14248 +#define AR_PHY_RF_CTL3                  0x9828
14249 +#define AR_PHY_TX_END_TO_A2_RX_ON       0x00FF0000
14250 +#define AR_PHY_TX_END_TO_A2_RX_ON_S     16
14251 +
14252 +#define AR_PHY_ADC_CTL                  0x982C
14253 +#define AR_PHY_ADC_CTL_OFF_INBUFGAIN    0x00000003
14254 +#define AR_PHY_ADC_CTL_OFF_INBUFGAIN_S  0
14255 +#define AR_PHY_ADC_CTL_OFF_PWDDAC       0x00002000
14256 +#define AR_PHY_ADC_CTL_OFF_PWDBANDGAP   0x00004000
14257 +#define AR_PHY_ADC_CTL_OFF_PWDADC       0x00008000
14258 +#define AR_PHY_ADC_CTL_ON_INBUFGAIN     0x00030000
14259 +#define AR_PHY_ADC_CTL_ON_INBUFGAIN_S   16
14260 +
14261 +#define AR_PHY_ADC_SERIAL_CTL       0x9830
14262 +#define AR_PHY_SEL_INTERNAL_ADDAC   0x00000000
14263 +#define AR_PHY_SEL_EXTERNAL_RADIO   0x00000001
14264 +
14265 +#define AR_PHY_RF_CTL4                    0x9834
14266 +#define AR_PHY_RF_CTL4_TX_END_XPAB_OFF    0xFF000000
14267 +#define AR_PHY_RF_CTL4_TX_END_XPAB_OFF_S  24
14268 +#define AR_PHY_RF_CTL4_TX_END_XPAA_OFF    0x00FF0000
14269 +#define AR_PHY_RF_CTL4_TX_END_XPAA_OFF_S  16
14270 +#define AR_PHY_RF_CTL4_FRAME_XPAB_ON      0x0000FF00
14271 +#define AR_PHY_RF_CTL4_FRAME_XPAB_ON_S    8
14272 +#define AR_PHY_RF_CTL4_FRAME_XPAA_ON      0x000000FF
14273 +#define AR_PHY_RF_CTL4_FRAME_XPAA_ON_S    0
14274 +
14275 +#define AR_PHY_TSTDAC_CONST               0x983c
14276 +
14277 +#define AR_PHY_SETTLING          0x9844
14278 +#define AR_PHY_SETTLING_SWITCH   0x00003F80
14279 +#define AR_PHY_SETTLING_SWITCH_S 7
14280 +
14281 +#define AR_PHY_RXGAIN                   0x9848
14282 +#define AR_PHY_RXGAIN_TXRX_ATTEN        0x0003F000
14283 +#define AR_PHY_RXGAIN_TXRX_ATTEN_S      12
14284 +#define AR_PHY_RXGAIN_TXRX_RF_MAX       0x007C0000
14285 +#define AR_PHY_RXGAIN_TXRX_RF_MAX_S     18
14286 +#define AR9280_PHY_RXGAIN_TXRX_ATTEN    0x00003F80
14287 +#define AR9280_PHY_RXGAIN_TXRX_ATTEN_S  7
14288 +#define AR9280_PHY_RXGAIN_TXRX_MARGIN   0x001FC000
14289 +#define AR9280_PHY_RXGAIN_TXRX_MARGIN_S 14
14290 +
14291 +#define AR_PHY_DESIRED_SZ           0x9850
14292 +#define AR_PHY_DESIRED_SZ_ADC       0x000000FF
14293 +#define AR_PHY_DESIRED_SZ_ADC_S     0
14294 +#define AR_PHY_DESIRED_SZ_PGA       0x0000FF00
14295 +#define AR_PHY_DESIRED_SZ_PGA_S     8
14296 +#define AR_PHY_DESIRED_SZ_TOT_DES   0x0FF00000
14297 +#define AR_PHY_DESIRED_SZ_TOT_DES_S 20
14298 +
14299 +#define AR_PHY_FIND_SIG           0x9858
14300 +#define AR_PHY_FIND_SIG_FIRSTEP   0x0003F000
14301 +#define AR_PHY_FIND_SIG_FIRSTEP_S 12
14302 +#define AR_PHY_FIND_SIG_FIRPWR    0x03FC0000
14303 +#define AR_PHY_FIND_SIG_FIRPWR_S  18
14304 +
14305 +#define AR_PHY_AGC_CTL1                  0x985C
14306 +#define AR_PHY_AGC_CTL1_COARSE_LOW       0x00007F80
14307 +#define AR_PHY_AGC_CTL1_COARSE_LOW_S     7
14308 +#define AR_PHY_AGC_CTL1_COARSE_HIGH      0x003F8000
14309 +#define AR_PHY_AGC_CTL1_COARSE_HIGH_S    15
14310 +
14311 +#define AR_PHY_CCA                  0x9864
14312 +#define AR_PHY_MINCCA_PWR           0x0FF80000
14313 +#define AR_PHY_MINCCA_PWR_S         19
14314 +#define AR_PHY_CCA_THRESH62         0x0007F000
14315 +#define AR_PHY_CCA_THRESH62_S       12
14316 +#define AR9280_PHY_MINCCA_PWR       0x1FF00000
14317 +#define AR9280_PHY_MINCCA_PWR_S     20
14318 +#define AR9280_PHY_CCA_THRESH62     0x000FF000
14319 +#define AR9280_PHY_CCA_THRESH62_S   12
14320 +
14321 +#define AR_PHY_SFCORR_LOW                    0x986C
14322 +#define AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW  0x00000001
14323 +#define AR_PHY_SFCORR_LOW_M2COUNT_THR_LOW    0x00003F00
14324 +#define AR_PHY_SFCORR_LOW_M2COUNT_THR_LOW_S  8
14325 +#define AR_PHY_SFCORR_LOW_M1_THRESH_LOW      0x001FC000
14326 +#define AR_PHY_SFCORR_LOW_M1_THRESH_LOW_S    14
14327 +#define AR_PHY_SFCORR_LOW_M2_THRESH_LOW      0x0FE00000
14328 +#define AR_PHY_SFCORR_LOW_M2_THRESH_LOW_S    21
14329 +
14330 +#define AR_PHY_SFCORR                0x9868
14331 +#define AR_PHY_SFCORR_M2COUNT_THR    0x0000001F
14332 +#define AR_PHY_SFCORR_M2COUNT_THR_S  0
14333 +#define AR_PHY_SFCORR_M1_THRESH      0x00FE0000
14334 +#define AR_PHY_SFCORR_M1_THRESH_S    17
14335 +#define AR_PHY_SFCORR_M2_THRESH      0x7F000000
14336 +#define AR_PHY_SFCORR_M2_THRESH_S    24
14337 +
14338 +#define AR_PHY_SLEEP_CTR_CONTROL    0x9870
14339 +#define AR_PHY_SLEEP_CTR_LIMIT      0x9874
14340 +#define AR_PHY_SYNTH_CONTROL        0x9874
14341 +#define AR_PHY_SLEEP_SCAL           0x9878
14342 +
14343 +#define AR_PHY_PLL_CTL          0x987c
14344 +#define AR_PHY_PLL_CTL_40       0xaa
14345 +#define AR_PHY_PLL_CTL_40_5413  0x04
14346 +#define AR_PHY_PLL_CTL_44       0xab
14347 +#define AR_PHY_PLL_CTL_44_2133  0xeb
14348 +#define AR_PHY_PLL_CTL_40_2133  0xea
14349 +
14350 +#define AR_PHY_SPECTRAL_SCAN                   0x9910  /* AR9280 spectral scan configuration register */
14351 +#define        AR_PHY_SPECTRAL_SCAN_ENABLE             0x1
14352 +#define AR_PHY_SPECTRAL_SCAN_ENA               0x00000001  /* Enable spectral scan, reg 68, bit 0 */
14353 +#define AR_PHY_SPECTRAL_SCAN_ENA_S             0  /* Enable spectral scan, reg 68, bit 0 */
14354 +#define AR_PHY_SPECTRAL_SCAN_ACTIVE            0x00000002  /* Activate spectral scan reg 68, bit 1*/
14355 +#define AR_PHY_SPECTRAL_SCAN_ACTIVE_S          1  /* Activate spectral scan reg 68, bit 1*/
14356 +#define AR_PHY_SPECTRAL_SCAN_FFT_PERIOD                0x000000F0  /* Interval for FFT reports, reg 68, bits 4-7*/
14357 +#define AR_PHY_SPECTRAL_SCAN_FFT_PERIOD_S      4
14358 +#define AR_PHY_SPECTRAL_SCAN_PERIOD            0x0000FF00  /* Interval for FFT reports, reg 68, bits 8-15*/
14359 +#define AR_PHY_SPECTRAL_SCAN_PERIOD_S          8
14360 +#define AR_PHY_SPECTRAL_SCAN_COUNT             0x00FF0000  /* Number of reports, reg 68, bits 16-23*/
14361 +#define AR_PHY_SPECTRAL_SCAN_COUNT_S           16
14362 +#define AR_PHY_SPECTRAL_SCAN_SHORT_REPEAT      0x01000000  /* Short repeat, reg 68, bit 24*/
14363 +#define AR_PHY_SPECTRAL_SCAN_SHORT_REPEAT_S    24  /* Short repeat, reg 68, bit 24*/
14364 +
14365 +#define AR_PHY_RX_DELAY           0x9914
14366 +#define AR_PHY_SEARCH_START_DELAY 0x9918
14367 +#define AR_PHY_RX_DELAY_DELAY     0x00003FFF
14368 +
14369 +#define AR_PHY_TIMING_CTRL4(_i)     (0x9920 + ((_i) << 12))
14370 +#define AR_PHY_TIMING_CTRL4_IQCORR_Q_Q_COFF 0x01F
14371 +#define AR_PHY_TIMING_CTRL4_IQCORR_Q_Q_COFF_S   0
14372 +#define AR_PHY_TIMING_CTRL4_IQCORR_Q_I_COFF 0x7E0
14373 +#define AR_PHY_TIMING_CTRL4_IQCORR_Q_I_COFF_S   5
14374 +#define AR_PHY_TIMING_CTRL4_IQCORR_ENABLE   0x800
14375 +#define AR_PHY_TIMING_CTRL4_IQCAL_LOG_COUNT_MAX 0xF000
14376 +#define AR_PHY_TIMING_CTRL4_IQCAL_LOG_COUNT_MAX_S   12
14377 +#define AR_PHY_TIMING_CTRL4_DO_CAL    0x10000
14378 +
14379 +#define AR_PHY_TIMING_CTRL4_ENABLE_SPUR_RSSI   0x80000000
14380 +#define        AR_PHY_TIMING_CTRL4_ENABLE_SPUR_FILTER  0x40000000
14381 +#define        AR_PHY_TIMING_CTRL4_ENABLE_CHAN_MASK    0x20000000
14382 +#define        AR_PHY_TIMING_CTRL4_ENABLE_PILOT_MASK   0x10000000
14383 +
14384 +#define AR_PHY_TIMING5               0x9924
14385 +#define AR_PHY_TIMING5_CYCPWR_THR1   0x000000FE
14386 +#define AR_PHY_TIMING5_CYCPWR_THR1_S 1
14387 +
14388 +#define AR_PHY_POWER_TX_RATE1               0x9934
14389 +#define AR_PHY_POWER_TX_RATE2               0x9938
14390 +#define AR_PHY_POWER_TX_RATE_MAX            0x993c
14391 +#define AR_PHY_POWER_TX_RATE_MAX_TPC_ENABLE 0x00000040
14392 +
14393 +#define AR_PHY_FRAME_CTL            0x9944
14394 +#define AR_PHY_FRAME_CTL_TX_CLIP    0x00000038
14395 +#define AR_PHY_FRAME_CTL_TX_CLIP_S  3
14396 +
14397 +#define AR_PHY_TXPWRADJ                   0x994C
14398 +#define AR_PHY_TXPWRADJ_CCK_GAIN_DELTA    0x00000FC0
14399 +#define AR_PHY_TXPWRADJ_CCK_GAIN_DELTA_S  6
14400 +#define AR_PHY_TXPWRADJ_CCK_PCDAC_INDEX   0x00FC0000
14401 +#define AR_PHY_TXPWRADJ_CCK_PCDAC_INDEX_S 18
14402 +
14403 +#define AR_PHY_RADAR_EXT      0x9940
14404 +#define AR_PHY_RADAR_EXT_ENA  0x00004000
14405 +
14406 +#define AR_PHY_RADAR_0          0x9954
14407 +#define AR_PHY_RADAR_0_ENA      0x00000001
14408 +#define AR_PHY_RADAR_0_FFT_ENA  0x80000000
14409 +#define AR_PHY_RADAR_0_INBAND   0x0000003e
14410 +#define AR_PHY_RADAR_0_INBAND_S 1
14411 +#define AR_PHY_RADAR_0_PRSSI    0x00000FC0
14412 +#define AR_PHY_RADAR_0_PRSSI_S  6
14413 +#define AR_PHY_RADAR_0_HEIGHT   0x0003F000
14414 +#define AR_PHY_RADAR_0_HEIGHT_S 12
14415 +#define AR_PHY_RADAR_0_RRSSI    0x00FC0000
14416 +#define AR_PHY_RADAR_0_RRSSI_S  18
14417 +#define AR_PHY_RADAR_0_FIRPWR   0x7F000000
14418 +#define AR_PHY_RADAR_0_FIRPWR_S 24
14419 +
14420 +#define AR_PHY_RADAR_1                  0x9958
14421 +#define AR_PHY_RADAR_1_RELPWR_ENA       0x00800000
14422 +#define AR_PHY_RADAR_1_USE_FIR128       0x00400000
14423 +#define AR_PHY_RADAR_1_RELPWR_THRESH    0x003F0000
14424 +#define AR_PHY_RADAR_1_RELPWR_THRESH_S  16
14425 +#define AR_PHY_RADAR_1_BLOCK_CHECK      0x00008000
14426 +#define AR_PHY_RADAR_1_MAX_RRSSI        0x00004000
14427 +#define AR_PHY_RADAR_1_RELSTEP_CHECK    0x00002000
14428 +#define AR_PHY_RADAR_1_RELSTEP_THRESH   0x00001F00
14429 +#define AR_PHY_RADAR_1_RELSTEP_THRESH_S 8
14430 +#define AR_PHY_RADAR_1_MAXLEN           0x000000FF
14431 +#define AR_PHY_RADAR_1_MAXLEN_S         0
14432 +
14433 +#define AR_PHY_SWITCH_CHAIN_0     0x9960
14434 +#define AR_PHY_SWITCH_COM         0x9964
14435 +
14436 +#define AR_PHY_SIGMA_DELTA            0x996C
14437 +#define AR_PHY_SIGMA_DELTA_ADC_SEL    0x00000003
14438 +#define AR_PHY_SIGMA_DELTA_ADC_SEL_S  0
14439 +#define AR_PHY_SIGMA_DELTA_FILT2      0x000000F8
14440 +#define AR_PHY_SIGMA_DELTA_FILT2_S    3
14441 +#define AR_PHY_SIGMA_DELTA_FILT1      0x00001F00
14442 +#define AR_PHY_SIGMA_DELTA_FILT1_S    8
14443 +#define AR_PHY_SIGMA_DELTA_ADC_CLIP   0x01FFE000
14444 +#define AR_PHY_SIGMA_DELTA_ADC_CLIP_S 13
14445 +
14446 +#define AR_PHY_RESTART          0x9970
14447 +#define AR_PHY_RESTART_DIV_GC   0x001C0000
14448 +#define AR_PHY_RESTART_DIV_GC_S 18
14449 +
14450 +#define AR_PHY_RFBUS_REQ        0x997C
14451 +#define AR_PHY_RFBUS_REQ_EN     0x00000001
14452 +
14453 +#define        AR_PHY_TIMING7                  0x9980
14454 +#define        AR_PHY_TIMING8                  0x9984
14455 +#define        AR_PHY_TIMING8_PILOT_MASK_2     0x000FFFFF
14456 +#define        AR_PHY_TIMING8_PILOT_MASK_2_S   0
14457 +
14458 +#define        AR_PHY_BIN_MASK2_1      0x9988
14459 +#define        AR_PHY_BIN_MASK2_2      0x998c
14460 +#define        AR_PHY_BIN_MASK2_3      0x9990
14461 +#define        AR_PHY_BIN_MASK2_4      0x9994
14462 +
14463 +#define        AR_PHY_BIN_MASK_1       0x9900
14464 +#define        AR_PHY_BIN_MASK_2       0x9904
14465 +#define        AR_PHY_BIN_MASK_3       0x9908
14466 +
14467 +#define        AR_PHY_MASK_CTL         0x990c
14468 +
14469 +#define        AR_PHY_BIN_MASK2_4_MASK_4       0x00003FFF
14470 +#define        AR_PHY_BIN_MASK2_4_MASK_4_S     0
14471 +
14472 +#define        AR_PHY_TIMING9                  0x9998
14473 +#define        AR_PHY_TIMING10                 0x999c
14474 +#define        AR_PHY_TIMING10_PILOT_MASK_2    0x000FFFFF
14475 +#define        AR_PHY_TIMING10_PILOT_MASK_2_S  0
14476 +
14477 +#define        AR_PHY_TIMING11                         0x99a0
14478 +#define        AR_PHY_TIMING11_SPUR_DELTA_PHASE        0x000FFFFF
14479 +#define        AR_PHY_TIMING11_SPUR_DELTA_PHASE_S      0
14480 +#define AR_PHY_TIMING11_USE_SPUR_IN_AGC                0x40000000
14481 +#define AR_PHY_TIMING11_USE_SPUR_IN_SELFCOR    0x80000000
14482 +
14483 +#define AR_PHY_RX_CHAINMASK     0x99a4
14484 +#define AR_PHY_NEW_ADC_DC_GAIN_CORR(_i) (0x99b4 + ((_i) << 12))
14485 +#define AR_PHY_NEW_ADC_GAIN_CORR_ENABLE 0x40000000
14486 +#define AR_PHY_NEW_ADC_DC_OFFSET_CORR_ENABLE 0x80000000
14487 +
14488 +#define AR_PHY_MULTICHAIN_GAIN_CTL          0x99ac
14489 +#define AR_PHY_9285_ANT_DIV_CTL_ALL         0x7f000000
14490 +#define AR_PHY_9285_ANT_DIV_CTL             0x01000000
14491 +#define AR_PHY_9285_ANT_DIV_CTL_S           24
14492 +#define AR_PHY_9285_ANT_DIV_ALT_LNACONF     0x06000000
14493 +#define AR_PHY_9285_ANT_DIV_ALT_LNACONF_S   25
14494 +#define AR_PHY_9285_ANT_DIV_MAIN_LNACONF    0x18000000
14495 +#define AR_PHY_9285_ANT_DIV_MAIN_LNACONF_S  27
14496 +#define AR_PHY_9285_ANT_DIV_ALT_GAINTB      0x20000000
14497 +#define AR_PHY_9285_ANT_DIV_ALT_GAINTB_S    29
14498 +#define AR_PHY_9285_ANT_DIV_MAIN_GAINTB     0x40000000
14499 +#define AR_PHY_9285_ANT_DIV_MAIN_GAINTB_S   30
14500 +#define AR_PHY_9285_ANT_DIV_LNA1            2
14501 +#define AR_PHY_9285_ANT_DIV_LNA2            1
14502 +#define AR_PHY_9285_ANT_DIV_LNA1_PLUS_LNA2  3
14503 +#define AR_PHY_9285_ANT_DIV_LNA1_MINUS_LNA2 0
14504 +#define AR_PHY_9285_ANT_DIV_GAINTB_0        0
14505 +#define AR_PHY_9285_ANT_DIV_GAINTB_1        1
14506 +
14507 +#define AR_PHY_EXT_CCA0             0x99b8
14508 +#define AR_PHY_EXT_CCA0_THRESH62    0x000000FF
14509 +#define AR_PHY_EXT_CCA0_THRESH62_S  0
14510 +
14511 +#define AR_PHY_EXT_CCA                  0x99bc
14512 +#define AR_PHY_EXT_CCA_CYCPWR_THR1      0x0000FE00
14513 +#define AR_PHY_EXT_CCA_CYCPWR_THR1_S    9
14514 +#define AR_PHY_EXT_CCA_THRESH62         0x007F0000
14515 +#define AR_PHY_EXT_CCA_THRESH62_S       16
14516 +#define AR_PHY_EXT_MINCCA_PWR           0xFF800000
14517 +#define AR_PHY_EXT_MINCCA_PWR_S         23
14518 +#define AR9280_PHY_EXT_MINCCA_PWR       0x01FF0000
14519 +#define AR9280_PHY_EXT_MINCCA_PWR_S     16
14520 +
14521 +#define AR_PHY_SFCORR_EXT                 0x99c0
14522 +#define AR_PHY_SFCORR_EXT_M1_THRESH       0x0000007F
14523 +#define AR_PHY_SFCORR_EXT_M1_THRESH_S     0
14524 +#define AR_PHY_SFCORR_EXT_M2_THRESH       0x00003F80
14525 +#define AR_PHY_SFCORR_EXT_M2_THRESH_S     7
14526 +#define AR_PHY_SFCORR_EXT_M1_THRESH_LOW   0x001FC000
14527 +#define AR_PHY_SFCORR_EXT_M1_THRESH_LOW_S 14
14528 +#define AR_PHY_SFCORR_EXT_M2_THRESH_LOW   0x0FE00000
14529 +#define AR_PHY_SFCORR_EXT_M2_THRESH_LOW_S 21
14530 +#define AR_PHY_SFCORR_SPUR_SUBCHNL_SD_S   28
14531 +
14532 +#define AR_PHY_HALFGI           0x99D0
14533 +#define AR_PHY_HALFGI_DSC_MAN   0x0007FFF0
14534 +#define AR_PHY_HALFGI_DSC_MAN_S 4
14535 +#define AR_PHY_HALFGI_DSC_EXP   0x0000000F
14536 +#define AR_PHY_HALFGI_DSC_EXP_S 0
14537 +
14538 +#define AR_PHY_CHAN_INFO_MEMORY               0x99DC
14539 +#define AR_PHY_CHAN_INFO_MEMORY_CAPTURE_MASK  0x0001
14540 +
14541 +#define AR_PHY_HEAVY_CLIP_ENABLE         0x99E0
14542 +
14543 +#define AR_PHY_HEAVY_CLIP_FACTOR_RIFS    0x99EC
14544 +#define AR_PHY_RIFS_INIT_DELAY         0x03ff0000
14545 +
14546 +#define AR_PHY_M_SLEEP      0x99f0
14547 +#define AR_PHY_REFCLKDLY    0x99f4
14548 +#define AR_PHY_REFCLKPD     0x99f8
14549 +
14550 +#define AR_PHY_CALMODE      0x99f0
14551 +
14552 +#define AR_PHY_CALMODE_IQ           0x00000000
14553 +#define AR_PHY_CALMODE_ADC_GAIN     0x00000001
14554 +#define AR_PHY_CALMODE_ADC_DC_PER   0x00000002
14555 +#define AR_PHY_CALMODE_ADC_DC_INIT  0x00000003
14556 +
14557 +#define AR_PHY_CAL_MEAS_0(_i)     (0x9c10 + ((_i) << 12))
14558 +#define AR_PHY_CAL_MEAS_1(_i)     (0x9c14 + ((_i) << 12))
14559 +#define AR_PHY_CAL_MEAS_2(_i)     (0x9c18 + ((_i) << 12))
14560 +#define AR_PHY_CAL_MEAS_3(_i)     (0x9c1c + ((_i) << 12))
14561 +
14562 +#define AR_PHY_CURRENT_RSSI 0x9c1c
14563 +#define AR9280_PHY_CURRENT_RSSI 0x9c3c
14564 +
14565 +#define AR_PHY_RFBUS_GRANT       0x9C20
14566 +#define AR_PHY_RFBUS_GRANT_EN    0x00000001
14567 +
14568 +#define AR_PHY_CHAN_INFO_GAIN_DIFF             0x9CF4
14569 +#define AR_PHY_CHAN_INFO_GAIN_DIFF_UPPER_LIMIT 320
14570 +
14571 +#define AR_PHY_CHAN_INFO_GAIN          0x9CFC
14572 +
14573 +#define AR_PHY_MODE         0xA200
14574 +#define AR_PHY_MODE_ASYNCFIFO 0x80
14575 +#define AR_PHY_MODE_AR2133  0x08
14576 +#define AR_PHY_MODE_AR5111  0x00
14577 +#define AR_PHY_MODE_AR5112  0x08
14578 +#define AR_PHY_MODE_DYNAMIC 0x04
14579 +#define AR_PHY_MODE_RF2GHZ  0x02
14580 +#define AR_PHY_MODE_RF5GHZ  0x00
14581 +#define AR_PHY_MODE_CCK     0x01
14582 +#define AR_PHY_MODE_OFDM    0x00
14583 +#define AR_PHY_MODE_DYN_CCK_DISABLE 0x100
14584 +
14585 +#define AR_PHY_CCK_TX_CTRL       0xA204
14586 +#define AR_PHY_CCK_TX_CTRL_JAPAN 0x00000010
14587 +#define AR_PHY_CCK_TX_CTRL_TX_DAC_SCALE_CCK         0x0000000C
14588 +#define AR_PHY_CCK_TX_CTRL_TX_DAC_SCALE_CCK_S       2
14589 +
14590 +#define AR_PHY_CCK_DETECT                           0xA208
14591 +#define AR_PHY_CCK_DETECT_WEAK_SIG_THR_CCK          0x0000003F
14592 +#define AR_PHY_CCK_DETECT_WEAK_SIG_THR_CCK_S        0
14593 +/* [12:6] settling time for antenna switch */
14594 +#define AR_PHY_CCK_DETECT_ANT_SWITCH_TIME           0x00001FC0
14595 +#define AR_PHY_CCK_DETECT_ANT_SWITCH_TIME_S         6
14596 +#define AR_PHY_CCK_DETECT_BB_ENABLE_ANT_FAST_DIV    0x2000
14597 +#define AR_PHY_CCK_DETECT_BB_ENABLE_ANT_FAST_DIV_S  13
14598 +
14599 +#define AR_PHY_GAIN_2GHZ                0xA20C
14600 +#define AR_PHY_GAIN_2GHZ_RXTX_MARGIN    0x00FC0000
14601 +#define AR_PHY_GAIN_2GHZ_RXTX_MARGIN_S  18
14602 +#define AR_PHY_GAIN_2GHZ_BSW_MARGIN     0x00003C00
14603 +#define AR_PHY_GAIN_2GHZ_BSW_MARGIN_S   10
14604 +#define AR_PHY_GAIN_2GHZ_BSW_ATTEN      0x0000001F
14605 +#define AR_PHY_GAIN_2GHZ_BSW_ATTEN_S    0
14606 +
14607 +#define AR_PHY_GAIN_2GHZ_XATTEN2_MARGIN     0x003E0000
14608 +#define AR_PHY_GAIN_2GHZ_XATTEN2_MARGIN_S   17
14609 +#define AR_PHY_GAIN_2GHZ_XATTEN1_MARGIN     0x0001F000
14610 +#define AR_PHY_GAIN_2GHZ_XATTEN1_MARGIN_S   12
14611 +#define AR_PHY_GAIN_2GHZ_XATTEN2_DB         0x00000FC0
14612 +#define AR_PHY_GAIN_2GHZ_XATTEN2_DB_S       6
14613 +#define AR_PHY_GAIN_2GHZ_XATTEN1_DB         0x0000003F
14614 +#define AR_PHY_GAIN_2GHZ_XATTEN1_DB_S       0
14615 +
14616 +#define AR_PHY_CCK_RXCTRL4  0xA21C
14617 +#define AR_PHY_CCK_RXCTRL4_FREQ_EST_SHORT   0x01F80000
14618 +#define AR_PHY_CCK_RXCTRL4_FREQ_EST_SHORT_S 19
14619 +
14620 +#define AR_PHY_DAG_CTRLCCK  0xA228
14621 +#define AR_PHY_DAG_CTRLCCK_EN_RSSI_THR  0x00000200
14622 +#define AR_PHY_DAG_CTRLCCK_RSSI_THR     0x0001FC00
14623 +#define AR_PHY_DAG_CTRLCCK_RSSI_THR_S   10
14624 +
14625 +#define AR_PHY_FORCE_CLKEN_CCK              0xA22C
14626 +#define AR_PHY_FORCE_CLKEN_CCK_MRC_MUX      0x00000040
14627 +
14628 +#define AR_PHY_POWER_TX_RATE3   0xA234
14629 +#define AR_PHY_POWER_TX_RATE4   0xA238
14630 +
14631 +#define AR_PHY_SCRM_SEQ_XR       0xA23C
14632 +#define AR_PHY_HEADER_DETECT_XR  0xA240
14633 +#define AR_PHY_CHIRP_DETECTED_XR 0xA244
14634 +#define AR_PHY_BLUETOOTH         0xA254
14635 +
14636 +#define AR_PHY_TPCRG1   0xA258
14637 +#define AR_PHY_TPCRG1_NUM_PD_GAIN   0x0000c000
14638 +#define AR_PHY_TPCRG1_NUM_PD_GAIN_S 14
14639 +
14640 +#define AR_PHY_TPCRG1_PD_GAIN_1    0x00030000
14641 +#define AR_PHY_TPCRG1_PD_GAIN_1_S  16
14642 +#define AR_PHY_TPCRG1_PD_GAIN_2    0x000C0000
14643 +#define AR_PHY_TPCRG1_PD_GAIN_2_S  18
14644 +#define AR_PHY_TPCRG1_PD_GAIN_3    0x00300000
14645 +#define AR_PHY_TPCRG1_PD_GAIN_3_S  20
14646 +
14647 +#define AR_PHY_TPCRG1_PD_CAL_ENABLE   0x00400000
14648 +#define AR_PHY_TPCRG1_PD_CAL_ENABLE_S 22
14649 +
14650 +#define AR_PHY_TX_PWRCTRL4       0xa264
14651 +#define AR_PHY_TX_PWRCTRL_PD_AVG_VALID     0x00000001
14652 +#define AR_PHY_TX_PWRCTRL_PD_AVG_VALID_S   0
14653 +#define AR_PHY_TX_PWRCTRL_PD_AVG_OUT       0x000001FE
14654 +#define AR_PHY_TX_PWRCTRL_PD_AVG_OUT_S     1
14655 +
14656 +#define AR_PHY_TX_PWRCTRL6_0     0xa270
14657 +#define AR_PHY_TX_PWRCTRL6_1     0xb270
14658 +#define AR_PHY_TX_PWRCTRL_ERR_EST_MODE     0x03000000
14659 +#define AR_PHY_TX_PWRCTRL_ERR_EST_MODE_S   24
14660 +
14661 +#define AR_PHY_TX_PWRCTRL7       0xa274
14662 +#define AR_PHY_TX_PWRCTRL_INIT_TX_GAIN     0x01F80000
14663 +#define AR_PHY_TX_PWRCTRL_INIT_TX_GAIN_S   19
14664 +
14665 +#define AR_PHY_TX_PWRCTRL9       0xa27C
14666 +#define AR_PHY_TX_DESIRED_SCALE_CCK        0x00007C00
14667 +#define AR_PHY_TX_DESIRED_SCALE_CCK_S      10
14668 +#define AR_PHY_TX_PWRCTRL9_RES_DC_REMOVAL  0x80000000
14669 +#define AR_PHY_TX_PWRCTRL9_RES_DC_REMOVAL_S 31
14670 +
14671 +#define AR_PHY_TX_GAIN_TBL1      0xa300
14672 +#define AR_PHY_TX_GAIN                     0x0007F000
14673 +#define AR_PHY_TX_GAIN_S                   12
14674 +
14675 +#define AR_PHY_CH0_TX_PWRCTRL11  0xa398
14676 +#define AR_PHY_CH1_TX_PWRCTRL11  0xb398
14677 +#define AR_PHY_TX_PWRCTRL_OLPC_TEMP_COMP   0x0000FC00
14678 +#define AR_PHY_TX_PWRCTRL_OLPC_TEMP_COMP_S 10
14679 +
14680 +#define AR_PHY_VIT_MASK2_M_46_61 0xa3a0
14681 +#define AR_PHY_MASK2_M_31_45     0xa3a4
14682 +#define AR_PHY_MASK2_M_16_30     0xa3a8
14683 +#define AR_PHY_MASK2_M_00_15     0xa3ac
14684 +#define AR_PHY_MASK2_P_15_01     0xa3b8
14685 +#define AR_PHY_MASK2_P_30_16     0xa3bc
14686 +#define AR_PHY_MASK2_P_45_31     0xa3c0
14687 +#define AR_PHY_MASK2_P_61_45     0xa3c4
14688 +#define AR_PHY_SPUR_REG          0x994c
14689 +
14690 +#define AR_PHY_SPUR_REG_MASK_RATE_CNTL       (0xFF << 18)
14691 +#define AR_PHY_SPUR_REG_MASK_RATE_CNTL_S     18
14692 +
14693 +#define AR_PHY_SPUR_REG_ENABLE_MASK_PPM      0x20000
14694 +#define AR_PHY_SPUR_REG_MASK_RATE_SELECT     (0xFF << 9)
14695 +#define AR_PHY_SPUR_REG_MASK_RATE_SELECT_S   9
14696 +#define AR_PHY_SPUR_REG_ENABLE_VIT_SPUR_RSSI 0x100
14697 +#define AR_PHY_SPUR_REG_SPUR_RSSI_THRESH     0x7F
14698 +#define AR_PHY_SPUR_REG_SPUR_RSSI_THRESH_S   0
14699 +
14700 +#define AR_PHY_PILOT_MASK_01_30   0xa3b0
14701 +#define AR_PHY_PILOT_MASK_31_60   0xa3b4
14702 +
14703 +#define AR_PHY_CHANNEL_MASK_01_30 0x99d4
14704 +#define AR_PHY_CHANNEL_MASK_31_60 0x99d8
14705 +
14706 +#define AR_PHY_ANALOG_SWAP      0xa268
14707 +#define AR_PHY_SWAP_ALT_CHAIN   0x00000040
14708 +
14709 +#define AR_PHY_TPCRG5   0xA26C
14710 +#define AR_PHY_TPCRG5_PD_GAIN_OVERLAP       0x0000000F
14711 +#define AR_PHY_TPCRG5_PD_GAIN_OVERLAP_S     0
14712 +#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_1    0x000003F0
14713 +#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_1_S  4
14714 +#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_2    0x0000FC00
14715 +#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_2_S  10
14716 +#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_3    0x003F0000
14717 +#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_3_S  16
14718 +#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_4    0x0FC00000
14719 +#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_4_S  22
14720 +
14721 +/* Carrier leak calibration control, do it after AGC calibration */
14722 +#define AR_PHY_CL_CAL_CTL       0xA358
14723 +#define AR_PHY_CL_CAL_ENABLE    0x00000002
14724 +#define AR_PHY_PARALLEL_CAL_ENABLE    0x00000001
14725 +
14726 +#define AR_PHY_POWER_TX_RATE5   0xA38C
14727 +#define AR_PHY_POWER_TX_RATE6   0xA390
14728 +
14729 +#define AR_PHY_CAL_CHAINMASK    0xA39C
14730 +
14731 +#define AR_PHY_POWER_TX_SUB     0xA3C8
14732 +#define AR_PHY_POWER_TX_RATE7   0xA3CC
14733 +#define AR_PHY_POWER_TX_RATE8   0xA3D0
14734 +#define AR_PHY_POWER_TX_RATE9   0xA3D4
14735 +
14736 +#define AR_PHY_XPA_CFG         0xA3D8
14737 +#define AR_PHY_FORCE_XPA_CFG   0x000000001
14738 +#define AR_PHY_FORCE_XPA_CFG_S 0
14739 +
14740 +#define AR_PHY_CH1_CCA          0xa864
14741 +#define AR_PHY_CH1_MINCCA_PWR   0x0FF80000
14742 +#define AR_PHY_CH1_MINCCA_PWR_S 19
14743 +#define AR9280_PHY_CH1_MINCCA_PWR   0x1FF00000
14744 +#define AR9280_PHY_CH1_MINCCA_PWR_S 20
14745 +
14746 +#define AR_PHY_CH2_CCA          0xb864
14747 +#define AR_PHY_CH2_MINCCA_PWR   0x0FF80000
14748 +#define AR_PHY_CH2_MINCCA_PWR_S 19
14749 +
14750 +#define AR_PHY_CH1_EXT_CCA          0xa9bc
14751 +#define AR_PHY_CH1_EXT_MINCCA_PWR   0xFF800000
14752 +#define AR_PHY_CH1_EXT_MINCCA_PWR_S 23
14753 +#define AR9280_PHY_CH1_EXT_MINCCA_PWR   0x01FF0000
14754 +#define AR9280_PHY_CH1_EXT_MINCCA_PWR_S 16
14755 +
14756 +#define AR_PHY_CH2_EXT_CCA          0xb9bc
14757 +#define AR_PHY_CH2_EXT_MINCCA_PWR   0xFF800000
14758 +#define AR_PHY_CH2_EXT_MINCCA_PWR_S 23
14759 +
14760 +#endif
14761 diff --git a/drivers/net/wireless/ath/ath9k/ar9003_calib.c b/drivers/net/wireless/ath/ath9k/ar9003_calib.c
14762 new file mode 100644
14763 index 0000000..498f60a
14764 --- /dev/null
14765 +++ b/drivers/net/wireless/ath/ath9k/ar9003_calib.c
14766 @@ -0,0 +1,798 @@
14767 +/*
14768 + * Copyright (c) 2010 Atheros Communications Inc.
14769 + *
14770 + * Permission to use, copy, modify, and/or distribute this software for any
14771 + * purpose with or without fee is hereby granted, provided that the above
14772 + * copyright notice and this permission notice appear in all copies.
14773 + *
14774 + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
14775 + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14776 + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14777 + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14778 + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14779 + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14780 + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
14781 + */
14782 +
14783 +#include "hw.h"
14784 +#include "hw-ops.h"
14785 +#include "ar9003_phy.h"
14786 +
14787 +static void ar9003_hw_setup_calibration(struct ath_hw *ah,
14788 +                                       struct ath9k_cal_list *currCal)
14789 +{
14790 +       struct ath_common *common = ath9k_hw_common(ah);
14791 +
14792 +       /* Select calibration to run */
14793 +       switch(currCal->calData->calType) {
14794 +       case IQ_MISMATCH_CAL:
14795 +               /*
14796 +                * Start calibration with
14797 +                * 2^(INIT_IQCAL_LOG_COUNT_MAX+1) samples
14798 +                */
14799 +               REG_RMW_FIELD(ah, AR_PHY_TIMING4,
14800 +                             AR_PHY_TIMING4_IQCAL_LOG_COUNT_MAX,
14801 +               currCal->calData->calCountMax);
14802 +               REG_WRITE(ah, AR_PHY_CALMODE, AR_PHY_CALMODE_IQ);
14803 +
14804 +               ath_print(common, ATH_DBG_CALIBRATE,
14805 +                         "starting IQ Mismatch Calibration\n");
14806 +
14807 +               /* Kick-off cal */
14808 +               REG_SET_BIT(ah, AR_PHY_TIMING4, AR_PHY_TIMING4_DO_CAL);
14809 +               break;
14810 +       case TEMP_COMP_CAL:
14811 +               REG_RMW_FIELD(ah, AR_PHY_65NM_CH0_THERM,
14812 +                             AR_PHY_65NM_CH0_THERM_LOCAL, 1);
14813 +               REG_RMW_FIELD(ah, AR_PHY_65NM_CH0_THERM,
14814 +                             AR_PHY_65NM_CH0_THERM_START, 1);
14815 +
14816 +               ath_print(common, ATH_DBG_CALIBRATE,
14817 +                         "starting Temperature Compensation Calibration\n");
14818 +               break;
14819 +       case ADC_DC_INIT_CAL:
14820 +       case ADC_GAIN_CAL:
14821 +       case ADC_DC_CAL:
14822 +               /* Not yet */
14823 +               break;
14824 +       }
14825 +}
14826 +
14827 +/*
14828 + * Generic calibration routine.
14829 + * Recalibrate the lower PHY chips to account for temperature/environment
14830 + * changes.
14831 + */
14832 +static bool ar9003_hw_per_calibration(struct ath_hw *ah,
14833 +                                     struct ath9k_channel *ichan,
14834 +                                     u8 rxchainmask,
14835 +                                     struct ath9k_cal_list *currCal)
14836 +{
14837 +       /* Cal is assumed not done until explicitly set below */
14838 +       bool iscaldone = false;
14839 +
14840 +       /* Calibration in progress. */
14841 +       if (currCal->calState == CAL_RUNNING) {
14842 +               /* Check to see if it has finished. */
14843 +               if (!(REG_READ(ah, AR_PHY_TIMING4) & AR_PHY_TIMING4_DO_CAL)) {
14844 +                       /*
14845 +                       * Accumulate cal measures for active chains
14846 +                       */
14847 +                       currCal->calData->calCollect(ah);
14848 +                       ah->cal_samples++;
14849 +
14850 +                       if (ah->cal_samples >=
14851 +                           currCal->calData->calNumSamples) {
14852 +                               unsigned int i, numChains = 0;
14853 +                               for (i = 0; i < AR9300_MAX_CHAINS; i++) {
14854 +                                       if (rxchainmask & (1 << i))
14855 +                                               numChains++;
14856 +                               }
14857 +
14858 +                               /*
14859 +                               * Process accumulated data
14860 +                               */
14861 +                               currCal->calData->calPostProc(ah, numChains);
14862 +
14863 +                               /* Calibration has finished. */
14864 +                               ichan->CalValid |= currCal->calData->calType;
14865 +                               currCal->calState = CAL_DONE;
14866 +                               iscaldone = true;
14867 +                       } else {
14868 +                       /*
14869 +                        * Set-up collection of another sub-sample until we
14870 +                        * get desired number
14871 +                        */
14872 +                       ar9003_hw_setup_calibration(ah, currCal);
14873 +                       }
14874 +               }
14875 +       } else if (!(ichan->CalValid & currCal->calData->calType)) {
14876 +               /* If current cal is marked invalid in channel, kick it off */
14877 +               ath9k_hw_reset_calibration(ah, currCal);
14878 +       }
14879 +
14880 +       return iscaldone;
14881 +}
14882 +
14883 +static bool ar9003_hw_calibrate(struct ath_hw *ah,
14884 +                               struct ath9k_channel *chan,
14885 +                               u8 rxchainmask,
14886 +                               bool longcal)
14887 +{
14888 +       bool iscaldone = true;
14889 +       struct ath9k_cal_list *currCal = ah->cal_list_curr;
14890 +
14891 +       /*
14892 +        * For given calibration:
14893 +        * 1. Call generic cal routine
14894 +        * 2. When this cal is done (isCalDone) if we have more cals waiting
14895 +        *    (eg after reset), mask this to upper layers by not propagating
14896 +        *    isCalDone if it is set to TRUE.
14897 +        *    Instead, change isCalDone to FALSE and setup the waiting cal(s)
14898 +        *    to be run.
14899 +        */
14900 +       if (currCal &&
14901 +           (currCal->calState == CAL_RUNNING ||
14902 +            currCal->calState == CAL_WAITING)) {
14903 +               iscaldone = ar9003_hw_per_calibration(ah, chan,
14904 +                                                     rxchainmask, currCal);
14905 +               if (iscaldone) {
14906 +                       ah->cal_list_curr = currCal = currCal->calNext;
14907 +
14908 +                       if (currCal->calState == CAL_WAITING) {
14909 +                               iscaldone = false;
14910 +                               ath9k_hw_reset_calibration(ah, currCal);
14911 +                       }
14912 +               }
14913 +       }
14914 +
14915 +       /* Do NF cal only at longer intervals */
14916 +       if (longcal) {
14917 +               /*
14918 +                * Load the NF from history buffer of the current channel.
14919 +                * NF is slow time-variant, so it is OK to use a historical value.
14920 +                */
14921 +               ath9k_hw_loadnf(ah, ah->curchan);
14922 +
14923 +               /* start NF calibration, without updating BB NF register */
14924 +               ath9k_hw_start_nfcal(ah);
14925 +       }
14926 +
14927 +       return iscaldone;
14928 +}
14929 +
14930 +static void ar9003_hw_iqcal_collect(struct ath_hw *ah)
14931 +{
14932 +       int i;
14933 +
14934 +       /* Accumulate IQ cal measures for active chains */
14935 +       for (i = 0; i < AR5416_MAX_CHAINS; i++) {
14936 +               ah->totalPowerMeasI[i] +=
14937 +                       REG_READ(ah, AR_PHY_CAL_MEAS_0(i));
14938 +               ah->totalPowerMeasQ[i] +=
14939 +                       REG_READ(ah, AR_PHY_CAL_MEAS_1(i));
14940 +               ah->totalIqCorrMeas[i] +=
14941 +                       (int32_t) REG_READ(ah, AR_PHY_CAL_MEAS_2(i));
14942 +               ath_print(ath9k_hw_common(ah), ATH_DBG_CALIBRATE,
14943 +                         "%d: Chn %d pmi=0x%08x;pmq=0x%08x;iqcm=0x%08x;\n",
14944 +                         ah->cal_samples, i, ah->totalPowerMeasI[i],
14945 +                         ah->totalPowerMeasQ[i],
14946 +                         ah->totalIqCorrMeas[i]);
14947 +       }
14948 +}
14949 +
14950 +static void ar9003_hw_iqcalibrate(struct ath_hw *ah, u8 numChains)
14951 +{
14952 +       struct ath_common *common = ath9k_hw_common(ah);
14953 +       u32 powerMeasQ, powerMeasI, iqCorrMeas;
14954 +       u32 qCoffDenom, iCoffDenom;
14955 +       int32_t qCoff, iCoff;
14956 +       int iqCorrNeg, i;
14957 +       const u_int32_t offset_array[3] = {
14958 +               AR_PHY_RX_IQCAL_CORR_B0,
14959 +               AR_PHY_RX_IQCAL_CORR_B1,
14960 +               AR_PHY_RX_IQCAL_CORR_B2,
14961 +       };
14962 +
14963 +       for (i = 0; i < numChains; i++) {
14964 +               powerMeasI = ah->totalPowerMeasI[i];
14965 +               powerMeasQ = ah->totalPowerMeasQ[i];
14966 +               iqCorrMeas = ah->totalIqCorrMeas[i];
14967 +
14968 +               ath_print(common, ATH_DBG_CALIBRATE,
14969 +                         "Starting IQ Cal and Correction for Chain %d\n",
14970 +                         i);
14971 +
14972 +               ath_print(common, ATH_DBG_CALIBRATE,
14973 +                         "Orignal: Chn %diq_corr_meas = 0x%08x\n",
14974 +                         i, ah->totalIqCorrMeas[i]);
14975 +
14976 +               iqCorrNeg = 0;
14977 +
14978 +               if (iqCorrMeas > 0x80000000) {
14979 +                       iqCorrMeas = (0xffffffff - iqCorrMeas) + 1;
14980 +                       iqCorrNeg = 1;
14981 +               }
14982 +
14983 +               ath_print(common, ATH_DBG_CALIBRATE,
14984 +                         "Chn %d pwr_meas_i = 0x%08x\n", i, powerMeasI);
14985 +               ath_print(common, ATH_DBG_CALIBRATE,
14986 +                         "Chn %d pwr_meas_q = 0x%08x\n", i, powerMeasQ);
14987 +               ath_print(common, ATH_DBG_CALIBRATE, "iqCorrNeg is 0x%08x\n",
14988 +                         iqCorrNeg);
14989 +
14990 +               iCoffDenom = (powerMeasI / 2 + powerMeasQ / 2) / 256;
14991 +               qCoffDenom = powerMeasQ / 64;
14992 +
14993 +               if ((iCoffDenom != 0) && (qCoffDenom != 0)) {
14994 +                       iCoff = iqCorrMeas / iCoffDenom;
14995 +                       qCoff = powerMeasI / qCoffDenom - 64;
14996 +                       ath_print(common, ATH_DBG_CALIBRATE,
14997 +                                 "Chn %d iCoff = 0x%08x\n", i, iCoff);
14998 +                       ath_print(common, ATH_DBG_CALIBRATE,
14999 +                                 "Chn %d qCoff = 0x%08x\n", i, qCoff);
15000 +
15001 +                       /* Force bounds on iCoff */
15002 +                       if (iCoff >= 63)
15003 +                               iCoff = 63;
15004 +                       else if (iCoff <= -63)
15005 +                               iCoff = -63;
15006 +
15007 +                       /* Negate iCoff if iqCorrNeg == 0 */
15008 +                       if (iqCorrNeg == 0x0)
15009 +                               iCoff = -iCoff;
15010 +
15011 +                       /* Force bounds on qCoff */
15012 +                       if (qCoff >= 63)
15013 +                               qCoff = 63;
15014 +                       else if (qCoff <= -63)
15015 +                               qCoff = -63;
15016 +
15017 +                       iCoff = iCoff & 0x7f;
15018 +                       qCoff = qCoff & 0x7f;
15019 +
15020 +                       ath_print(common, ATH_DBG_CALIBRATE,
15021 +                                 "Chn %d : iCoff = 0x%x  qCoff = 0x%x\n",
15022 +                                 i, iCoff, qCoff);
15023 +                       ath_print(common, ATH_DBG_CALIBRATE,
15024 +                                 "Register offset (0x%04x) "
15025 +                                 "before update = 0x%x\n",
15026 +                                 offset_array[i],
15027 +                                 REG_READ(ah, offset_array[i]));
15028 +
15029 +                       REG_RMW_FIELD(ah, offset_array[i],
15030 +                                     AR_PHY_RX_IQCAL_CORR_IQCORR_Q_I_COFF,
15031 +                                     iCoff);
15032 +                       REG_RMW_FIELD(ah, offset_array[i],
15033 +                                     AR_PHY_RX_IQCAL_CORR_IQCORR_Q_Q_COFF,
15034 +                                     qCoff);
15035 +                       ath_print(common, ATH_DBG_CALIBRATE,
15036 +                                 "Register offset (0x%04x) QI COFF "
15037 +                                 "(bitfields 0x%08x) after update = 0x%x\n",
15038 +                                 offset_array[i],
15039 +                                 AR_PHY_RX_IQCAL_CORR_IQCORR_Q_I_COFF,
15040 +                                 REG_READ(ah, offset_array[i]));
15041 +                       ath_print(common, ATH_DBG_CALIBRATE,
15042 +                                 "Register offset (0x%04x) QQ COFF "
15043 +                                 "(bitfields 0x%08x) after update = 0x%x\n",
15044 +                                 offset_array[i], AR_PHY_RX_IQCAL_CORR_IQCORR_Q_Q_COFF,
15045 +                                 REG_READ(ah, offset_array[i]));
15046 +
15047 +                       ath_print(common, ATH_DBG_CALIBRATE,
15048 +                                 "IQ Cal and Correction done for Chain %d\n",
15049 +                                 i);
15050 +               }
15051 +       }
15052 +
15053 +       REG_SET_BIT(ah, AR_PHY_RX_IQCAL_CORR_B0,
15054 +                   AR_PHY_RX_IQCAL_CORR_IQCORR_ENABLE);
15055 +       ath_print(common, ATH_DBG_CALIBRATE,
15056 +                 "IQ Cal and Correction (offset 0x%04x) enabled "
15057 +                 "(bit position 0x%08x). New Value 0x%08x\n",
15058 +                 (unsigned) (AR_PHY_RX_IQCAL_CORR_B0),
15059 +                 AR_PHY_RX_IQCAL_CORR_IQCORR_ENABLE,
15060 +                 REG_READ(ah, AR_PHY_RX_IQCAL_CORR_B0));
15061 +}
15062 +
15063 +static const struct ath9k_percal_data iq_cal_single_sample = {
15064 +        IQ_MISMATCH_CAL,
15065 +        MIN_CAL_SAMPLES,
15066 +        PER_MAX_LOG_COUNT,
15067 +       ar9003_hw_iqcal_collect,
15068 +       ar9003_hw_iqcalibrate
15069 +};
15070 +
15071 +static void ar9003_hw_init_cal_settings(struct ath_hw *ah)
15072 +{
15073 +       ah->iq_caldata.calData = &iq_cal_single_sample;
15074 +       ah->supp_cals = IQ_MISMATCH_CAL;
15075 +}
15076 +
15077 +static bool ar9003_hw_iscal_supported(struct ath_hw *ah,
15078 +                                     enum ath9k_cal_types calType)
15079 +{
15080 +       switch (calType & ah->supp_cals) {
15081 +       case IQ_MISMATCH_CAL:
15082 +               /*
15083 +                * XXX: Run IQ Mismatch for non-CCK only
15084 +                * Note that CHANNEL_B is never set though.
15085 +                */
15086 +               return true;
15087 +       case ADC_GAIN_CAL:
15088 +       case ADC_DC_CAL:
15089 +               return false;
15090 +       case TEMP_COMP_CAL:
15091 +               return true;
15092 +       }
15093 +
15094 +       return false;
15095 +}
15096 +
15097 +/*
15098 + * solve 4x4 linear equation used in loopback iq cal.
15099 + */
15100 +static bool ar9003_hw_solve_iq_cal(struct ath_hw *ah,
15101 +                                  s32 sin_2phi_1,
15102 +                                  s32 cos_2phi_1,
15103 +                                  s32 sin_2phi_2,
15104 +                                  s32 cos_2phi_2,
15105 +                                  s32 mag_a0_d0,
15106 +                                  s32 phs_a0_d0,
15107 +                                  s32 mag_a1_d0,
15108 +                                  s32 phs_a1_d0,
15109 +                                  s32 solved_eq[])
15110 +{
15111 +       s32 f1 = cos_2phi_1 - cos_2phi_2,
15112 +           f3 = sin_2phi_1 - sin_2phi_2,
15113 +           f2;
15114 +       s32 mag_tx, phs_tx, mag_rx, phs_rx;
15115 +       const s32 result_shift = 1 << 15;
15116 +       struct ath_common *common = ath9k_hw_common(ah);
15117 +
15118 +       f2 = (f1 * f1 + f3 * f3) / result_shift;
15119 +
15120 +       if (!f2) {
15121 +               ath_print(common, ATH_DBG_CALIBRATE, "Divide by 0\n");
15122 +               return false;
15123 +       }
15124 +
15125 +       /* mag mismatch, tx */
15126 +       mag_tx = f1 * (mag_a0_d0  - mag_a1_d0) + f3 * (phs_a0_d0 - phs_a1_d0);
15127 +       /* phs mismatch, tx */
15128 +       phs_tx = f3 * (-mag_a0_d0 + mag_a1_d0) + f1 * (phs_a0_d0 - phs_a1_d0);
15129 +
15130 +       mag_tx = (mag_tx / f2);
15131 +       phs_tx = (phs_tx / f2);
15132 +
15133 +       /* mag mismatch, rx */
15134 +       mag_rx = mag_a0_d0 - (cos_2phi_1 * mag_tx + sin_2phi_1 * phs_tx) /
15135 +                result_shift;
15136 +       /* phs mismatch, rx */
15137 +       phs_rx = phs_a0_d0 + (sin_2phi_1 * mag_tx - cos_2phi_1 * phs_tx) /
15138 +                result_shift;
15139 +
15140 +       solved_eq[0] = mag_tx;
15141 +       solved_eq[1] = phs_tx;
15142 +       solved_eq[2] = mag_rx;
15143 +       solved_eq[3] = phs_rx;
15144 +
15145 +       return true;
15146 +}
15147 +
15148 +static s32 ar9003_hw_find_mag_approx(struct ath_hw *ah, s32 in_re, s32 in_im)
15149 +{
15150 +       s32 abs_i = abs(in_re),
15151 +           abs_q = abs(in_im),
15152 +           max_abs, min_abs;
15153 +
15154 +       if (abs_i > abs_q) {
15155 +               max_abs = abs_i;
15156 +               min_abs = abs_q;
15157 +       } else {
15158 +               max_abs = abs_q;
15159 +               min_abs = abs_i;
15160 +       }
15161 +
15162 +       return (max_abs - (max_abs / 32) + (min_abs / 8) + (min_abs / 4));
15163 +}
15164 +
15165 +#define DELPT 32
15166 +
15167 +static bool ar9003_hw_calc_iq_corr(struct ath_hw *ah,
15168 +                                  s32 chain_idx,
15169 +                                  const s32 iq_res[],
15170 +                                  s32 iqc_coeff[])
15171 +{
15172 +       s32 i2_m_q2_a0_d0, i2_p_q2_a0_d0, iq_corr_a0_d0,
15173 +           i2_m_q2_a0_d1, i2_p_q2_a0_d1, iq_corr_a0_d1,
15174 +           i2_m_q2_a1_d0, i2_p_q2_a1_d0, iq_corr_a1_d0,
15175 +           i2_m_q2_a1_d1, i2_p_q2_a1_d1, iq_corr_a1_d1;
15176 +       s32 mag_a0_d0, mag_a1_d0, mag_a0_d1, mag_a1_d1,
15177 +           phs_a0_d0, phs_a1_d0, phs_a0_d1, phs_a1_d1,
15178 +           sin_2phi_1, cos_2phi_1,
15179 +           sin_2phi_2, cos_2phi_2;
15180 +       s32 mag_tx, phs_tx, mag_rx, phs_rx;
15181 +       s32 solved_eq[4], mag_corr_tx, phs_corr_tx, mag_corr_rx, phs_corr_rx,
15182 +           q_q_coff, q_i_coff;
15183 +       const s32 res_scale = 1 << 15;
15184 +       const s32 delpt_shift = 1 << 8;
15185 +       s32 mag1, mag2;
15186 +       struct ath_common *common = ath9k_hw_common(ah);
15187 +
15188 +       i2_m_q2_a0_d0 = iq_res[0] & 0xfff;
15189 +       i2_p_q2_a0_d0 = (iq_res[0] >> 12) & 0xfff;
15190 +       iq_corr_a0_d0 = ((iq_res[0] >> 24) & 0xff) + ((iq_res[1] & 0xf) << 8);
15191 +
15192 +       if (i2_m_q2_a0_d0 > 0x800)
15193 +               i2_m_q2_a0_d0 = -((0xfff - i2_m_q2_a0_d0) + 1);
15194 +
15195 +       if (i2_p_q2_a0_d0 > 0x800)
15196 +               i2_p_q2_a0_d0 = -((0xfff - i2_p_q2_a0_d0) + 1);
15197 +
15198 +       if (iq_corr_a0_d0 > 0x800)
15199 +               iq_corr_a0_d0 = -((0xfff - iq_corr_a0_d0) + 1);
15200 +
15201 +       i2_m_q2_a0_d1 = (iq_res[1] >> 4) & 0xfff;
15202 +       i2_p_q2_a0_d1 = (iq_res[2] & 0xfff);
15203 +       iq_corr_a0_d1 = (iq_res[2] >> 12) & 0xfff;
15204 +
15205 +       if (i2_m_q2_a0_d1 > 0x800)
15206 +               i2_m_q2_a0_d1 = -((0xfff - i2_m_q2_a0_d1) + 1);
15207 +
15208 +       if (i2_p_q2_a0_d1 > 0x800)
15209 +               i2_p_q2_a0_d1 = -((0xfff - i2_p_q2_a0_d1) + 1);
15210 +
15211 +       if (iq_corr_a0_d1 > 0x800)
15212 +               iq_corr_a0_d1 = -((0xfff - iq_corr_a0_d1) + 1);
15213 +
15214 +       i2_m_q2_a1_d0 = ((iq_res[2] >> 24) & 0xff) + ((iq_res[3] & 0xf) << 8);
15215 +       i2_p_q2_a1_d0 = (iq_res[3] >> 4) & 0xfff;
15216 +       iq_corr_a1_d0 = iq_res[4] & 0xfff;
15217 +
15218 +       if (i2_m_q2_a1_d0 > 0x800)
15219 +               i2_m_q2_a1_d0 = -((0xfff - i2_m_q2_a1_d0) + 1);
15220 +
15221 +       if (i2_p_q2_a1_d0 > 0x800)
15222 +               i2_p_q2_a1_d0 = -((0xfff - i2_p_q2_a1_d0) + 1);
15223 +
15224 +       if (iq_corr_a1_d0 > 0x800)
15225 +               iq_corr_a1_d0 = -((0xfff - iq_corr_a1_d0) + 1);
15226 +
15227 +       i2_m_q2_a1_d1 = (iq_res[4] >> 12) & 0xfff;
15228 +       i2_p_q2_a1_d1 = ((iq_res[4] >> 24) & 0xff) + ((iq_res[5] & 0xf) << 8);
15229 +       iq_corr_a1_d1 = (iq_res[5] >> 4) & 0xfff;
15230 +
15231 +       if (i2_m_q2_a1_d1 > 0x800)
15232 +               i2_m_q2_a1_d1 = -((0xfff - i2_m_q2_a1_d1) + 1);
15233 +
15234 +       if (i2_p_q2_a1_d1 > 0x800)
15235 +               i2_p_q2_a1_d1 = -((0xfff - i2_p_q2_a1_d1) + 1);
15236 +
15237 +       if (iq_corr_a1_d1 > 0x800)
15238 +               iq_corr_a1_d1 = -((0xfff - iq_corr_a1_d1) + 1);
15239 +
15240 +       if ((i2_p_q2_a0_d0 == 0) || (i2_p_q2_a0_d1 == 0) ||
15241 +           (i2_p_q2_a1_d0 == 0) || (i2_p_q2_a1_d1 == 0)) {
15242 +               ath_print(common, ATH_DBG_CALIBRATE,
15243 +                         "Divide by 0:\na0_d0=%d\n"
15244 +                         "a0_d1=%d\na2_d0=%d\na1_d1=%d\n",
15245 +                         i2_p_q2_a0_d0, i2_p_q2_a0_d1,
15246 +                         i2_p_q2_a1_d0, i2_p_q2_a1_d1);
15247 +               return false;
15248 +       }
15249 +
15250 +       mag_a0_d0 = (i2_m_q2_a0_d0 * res_scale) / i2_p_q2_a0_d0;
15251 +       phs_a0_d0 = (iq_corr_a0_d0 * res_scale) / i2_p_q2_a0_d0;
15252 +
15253 +       mag_a0_d1 = (i2_m_q2_a0_d1 * res_scale) / i2_p_q2_a0_d1;
15254 +       phs_a0_d1 = (iq_corr_a0_d1 * res_scale) / i2_p_q2_a0_d1;
15255 +
15256 +       mag_a1_d0 = (i2_m_q2_a1_d0 * res_scale) / i2_p_q2_a1_d0;
15257 +       phs_a1_d0 = (iq_corr_a1_d0 * res_scale) / i2_p_q2_a1_d0;
15258 +
15259 +       mag_a1_d1 = (i2_m_q2_a1_d1 * res_scale) / i2_p_q2_a1_d1;
15260 +       phs_a1_d1 = (iq_corr_a1_d1 * res_scale) / i2_p_q2_a1_d1;
15261 +
15262 +       /* w/o analog phase shift */
15263 +       sin_2phi_1 = (((mag_a0_d0 - mag_a0_d1) * delpt_shift) / DELPT);
15264 +       /* w/o analog phase shift */
15265 +       cos_2phi_1 = (((phs_a0_d1 - phs_a0_d0) * delpt_shift) / DELPT);
15266 +       /* w/  analog phase shift */
15267 +       sin_2phi_2 = (((mag_a1_d0 - mag_a1_d1) * delpt_shift) / DELPT);
15268 +       /* w/  analog phase shift */
15269 +       cos_2phi_2 = (((phs_a1_d1 - phs_a1_d0) * delpt_shift) / DELPT);
15270 +
15271 +       /*
15272 +        * force sin^2 + cos^2 = 1;
15273 +        * find magnitude by approximation
15274 +        */
15275 +       mag1 = ar9003_hw_find_mag_approx(ah, cos_2phi_1, sin_2phi_1);
15276 +       mag2 = ar9003_hw_find_mag_approx(ah, cos_2phi_2, sin_2phi_2);
15277 +
15278 +       if ((mag1 == 0) || (mag2 == 0)) {
15279 +               ath_print(common, ATH_DBG_CALIBRATE,
15280 +                         "Divide by 0: mag1=%d, mag2=%d\n",
15281 +                         mag1, mag2);
15282 +               return false;
15283 +       }
15284 +
15285 +       /* normalization sin and cos by mag */
15286 +       sin_2phi_1 = (sin_2phi_1 * res_scale / mag1);
15287 +       cos_2phi_1 = (cos_2phi_1 * res_scale / mag1);
15288 +       sin_2phi_2 = (sin_2phi_2 * res_scale / mag2);
15289 +       cos_2phi_2 = (cos_2phi_2 * res_scale / mag2);
15290 +
15291 +       /* calculate IQ mismatch */
15292 +       if (!ar9003_hw_solve_iq_cal(ah,
15293 +                            sin_2phi_1, cos_2phi_1,
15294 +                            sin_2phi_2, cos_2phi_2,
15295 +                            mag_a0_d0, phs_a0_d0,
15296 +                            mag_a1_d0,
15297 +                            phs_a1_d0, solved_eq)) {
15298 +               ath_print(common, ATH_DBG_CALIBRATE,
15299 +                         "Call to ar9003_hw_solve_iq_cal() failed.\n");
15300 +               return false;
15301 +       }
15302 +
15303 +       mag_tx = solved_eq[0];
15304 +       phs_tx = solved_eq[1];
15305 +       mag_rx = solved_eq[2];
15306 +       phs_rx = solved_eq[3];
15307 +
15308 +       ath_print(common, ATH_DBG_CALIBRATE,
15309 +                 "chain %d: mag mismatch=%d phase mismatch=%d\n",
15310 +                 chain_idx, mag_tx/res_scale, phs_tx/res_scale);
15311 +
15312 +       if (res_scale == mag_tx) {
15313 +               ath_print(common, ATH_DBG_CALIBRATE,
15314 +                         "Divide by 0: mag_tx=%d, res_scale=%d\n",
15315 +                         mag_tx, res_scale);
15316 +               return false;
15317 +       }
15318 +
15319 +       /* calculate and quantize Tx IQ correction factor */
15320 +       mag_corr_tx = (mag_tx * res_scale) / (res_scale - mag_tx);
15321 +       phs_corr_tx = -phs_tx;
15322 +
15323 +       q_q_coff = (mag_corr_tx * 128 / res_scale);
15324 +       q_i_coff = (phs_corr_tx * 256 / res_scale);
15325 +
15326 +       ath_print(common, ATH_DBG_CALIBRATE,
15327 +                 "tx chain %d: mag corr=%d  phase corr=%d\n",
15328 +                 chain_idx, q_q_coff, q_i_coff);
15329 +
15330 +       if (q_i_coff < -63)
15331 +               q_i_coff = -63;
15332 +       if (q_i_coff > 63)
15333 +               q_i_coff = 63;
15334 +       if (q_q_coff < -63)
15335 +               q_q_coff = -63;
15336 +       if (q_q_coff > 63)
15337 +               q_q_coff = 63;
15338 +
15339 +       iqc_coeff[0] = (q_q_coff * 128) + q_i_coff;
15340 +
15341 +       ath_print(common, ATH_DBG_CALIBRATE,
15342 +                 "tx chain %d: iq corr coeff=%x\n",
15343 +                 chain_idx, iqc_coeff[0]);
15344 +
15345 +       if (-mag_rx == res_scale) {
15346 +               ath_print(common, ATH_DBG_CALIBRATE,
15347 +                         "Divide by 0: mag_rx=%d, res_scale=%d\n",
15348 +                         mag_rx, res_scale);
15349 +               return false;
15350 +       }
15351 +
15352 +       /* calculate and quantize Rx IQ correction factors */
15353 +       mag_corr_rx = (-mag_rx * res_scale) / (res_scale + mag_rx);
15354 +       phs_corr_rx = -phs_rx;
15355 +
15356 +       q_q_coff = (mag_corr_rx * 128 / res_scale);
15357 +       q_i_coff = (phs_corr_rx * 256 / res_scale);
15358 +
15359 +       ath_print(common, ATH_DBG_CALIBRATE,
15360 +                 "rx chain %d: mag corr=%d  phase corr=%d\n",
15361 +                 chain_idx, q_q_coff, q_i_coff);
15362 +
15363 +       if (q_i_coff < -63)
15364 +               q_i_coff = -63;
15365 +       if (q_i_coff > 63)
15366 +               q_i_coff = 63;
15367 +       if (q_q_coff < -63)
15368 +               q_q_coff = -63;
15369 +       if (q_q_coff > 63)
15370 +               q_q_coff = 63;
15371 +
15372 +       iqc_coeff[1] = (q_q_coff * 128) + q_i_coff;
15373 +
15374 +       ath_print(common, ATH_DBG_CALIBRATE,
15375 +                 "rx chain %d: iq corr coeff=%x\n",
15376 +                 chain_idx, iqc_coeff[1]);
15377 +
15378 +       return true;
15379 +}
15380 +
15381 +static void ar9003_hw_tx_iq_cal(struct ath_hw *ah)
15382 +{
15383 +       struct ath_common *common = ath9k_hw_common(ah);
15384 +       const u32 txiqcal_status[AR9300_MAX_CHAINS] = {
15385 +               AR_PHY_TX_IQCAL_STATUS_B0,
15386 +               AR_PHY_TX_IQCAL_STATUS_B1,
15387 +               AR_PHY_TX_IQCAL_STATUS_B2,
15388 +       };
15389 +       const u32 tx_corr_coeff[AR9300_MAX_CHAINS] = {
15390 +               AR_PHY_TX_IQCAL_CORR_COEFF_01_B0,
15391 +               AR_PHY_TX_IQCAL_CORR_COEFF_01_B1,
15392 +               AR_PHY_TX_IQCAL_CORR_COEFF_01_B2,
15393 +       };
15394 +       const u32 rx_corr[AR9300_MAX_CHAINS] = {
15395 +               AR_PHY_RX_IQCAL_CORR_B0,
15396 +               AR_PHY_RX_IQCAL_CORR_B1,
15397 +               AR_PHY_RX_IQCAL_CORR_B2,
15398 +       };
15399 +       const u_int32_t chan_info_tab[] = {
15400 +               AR_PHY_CHAN_INFO_TAB_0,
15401 +               AR_PHY_CHAN_INFO_TAB_1,
15402 +               AR_PHY_CHAN_INFO_TAB_2,
15403 +       };
15404 +       s32 iq_res[6];
15405 +       s32 iqc_coeff[2];
15406 +       s32 i, j;
15407 +       u32 num_chains = 0;
15408 +
15409 +       for (i = 0; i < AR9300_MAX_CHAINS; i++) {
15410 +               if (ah->txchainmask & (1 << i))
15411 +                       num_chains++;
15412 +       }
15413 +
15414 +       REG_RMW_FIELD(ah, AR_PHY_TX_IQCAL_CONTROL_1,
15415 +                     AR_PHY_TX_IQCAQL_CONTROL_1_IQCORR_I_Q_COFF_DELPT,
15416 +                     DELPT);
15417 +       REG_RMW_FIELD(ah, AR_PHY_TX_IQCAL_START,
15418 +                     AR_PHY_TX_IQCAL_START_DO_CAL,
15419 +                     AR_PHY_TX_IQCAL_START_DO_CAL);
15420 +
15421 +       if (!ath9k_hw_wait(ah, AR_PHY_TX_IQCAL_START,
15422 +                          AR_PHY_TX_IQCAL_START_DO_CAL,
15423 +                          0, AH_WAIT_TIMEOUT)) {
15424 +               ath_print(common, ATH_DBG_CALIBRATE,
15425 +                         "Tx IQ Cal not complete.\n");
15426 +               goto TX_IQ_CAL_FAILED;
15427 +       }
15428 +
15429 +       for (i = 0; i < num_chains; i++) {
15430 +               ath_print(common, ATH_DBG_CALIBRATE,
15431 +                         "Doing Tx IQ Cal for chain %d.\n", i);
15432 +
15433 +               if (REG_READ(ah, txiqcal_status[i]) &
15434 +                            AR_PHY_TX_IQCAL_STATUS_FAILED) {
15435 +                       ath_print(common, ATH_DBG_CALIBRATE,
15436 +                                 "Tx IQ Cal failed for chain %d.\n", i);
15437 +                       goto TX_IQ_CAL_FAILED;
15438 +               }
15439 +
15440 +               for (j = 0; j < 3; j++) {
15441 +                       u_int8_t idx = 2 * j,
15442 +                       offset = 4 * j;
15443 +
15444 +                       REG_RMW_FIELD(ah, AR_PHY_CHAN_INFO_MEMORY,
15445 +                                     AR_PHY_CHAN_INFO_TAB_S2_READ, 0);
15446 +
15447 +                       /* 32 bits */
15448 +                       iq_res[idx] = REG_READ(ah, chan_info_tab[i] + offset);
15449 +
15450 +                       REG_RMW_FIELD(ah, AR_PHY_CHAN_INFO_MEMORY,
15451 +                                     AR_PHY_CHAN_INFO_TAB_S2_READ, 1);
15452 +
15453 +                       /* 16 bits */
15454 +                       iq_res[idx+1] = 0xffff & REG_READ(ah, chan_info_tab[i] + offset);
15455 +
15456 +                       ath_print(common, ATH_DBG_CALIBRATE,
15457 +                                 "IQ RES[%d]=0x%x IQ_RES[%d]=0x%x\n",
15458 +                                 idx, iq_res[idx], idx+1, iq_res[idx+1]);
15459 +               }
15460 +
15461 +               if (!ar9003_hw_calc_iq_corr(ah, i, iq_res, iqc_coeff)) {
15462 +                       ath_print(common, ATH_DBG_CALIBRATE,
15463 +                                 "Failed in calculation of IQ correction.\n");
15464 +                       goto TX_IQ_CAL_FAILED;
15465 +               }
15466 +
15467 +               ath_print(common, ATH_DBG_CALIBRATE,
15468 +                         "IQ_COEFF[0] = 0x%x IQ_COEFF[1] = 0x%x\n",
15469 +                         iqc_coeff[0], iqc_coeff[1]);
15470 +
15471 +               REG_RMW_FIELD(ah, tx_corr_coeff[i],
15472 +                             AR_PHY_TX_IQCAL_CORR_COEFF_01_COEFF_TABLE,
15473 +                             iqc_coeff[0]);
15474 +               REG_RMW_FIELD(ah, rx_corr[i],
15475 +                             AR_PHY_RX_IQCAL_CORR_LOOPBACK_IQCORR_Q_Q_COFF,
15476 +                             iqc_coeff[1] >> 7);
15477 +               REG_RMW_FIELD(ah, rx_corr[i],
15478 +                             AR_PHY_RX_IQCAL_CORR_LOOPBACK_IQCORR_Q_I_COFF,
15479 +                             iqc_coeff[1]);
15480 +       }
15481 +
15482 +       REG_RMW_FIELD(ah, AR_PHY_TX_IQCAL_CONTROL_3,
15483 +                     AR_PHY_TX_IQCAL_CONTROL_3_IQCORR_EN, 0x1);
15484 +       REG_RMW_FIELD(ah, AR_PHY_RX_IQCAL_CORR_B0,
15485 +                     AR_PHY_RX_IQCAL_CORR_B0_LOOPBACK_IQCORR_EN, 0x1);
15486 +
15487 +       return;
15488 +
15489 +TX_IQ_CAL_FAILED:
15490 +       ath_print(common, ATH_DBG_CALIBRATE, "Tx IQ Cal failed\n");
15491 +       return;
15492 +}
15493 +
15494 +static bool ar9003_hw_init_cal(struct ath_hw *ah,
15495 +                              struct ath9k_channel *chan)
15496 +{
15497 +       struct ath_common *common = ath9k_hw_common(ah);
15498 +
15499 +       /*
15500 +        * 0x7 = 0b111 , AR9003 needs to be configured for 3-chain mode before
15501 +        * running AGC/TxIQ cals
15502 +        */
15503 +       ar9003_hw_modify_chain_masks(ah, 0x7, 0x7);
15504 +
15505 +       /* Calibrate the AGC */
15506 +       REG_WRITE(ah, AR_PHY_AGC_CONTROL,
15507 +                 REG_READ(ah, AR_PHY_AGC_CONTROL) |
15508 +                 AR_PHY_AGC_CONTROL_CAL);
15509 +
15510 +       /* Poll for offset calibration complete */
15511 +       if (!ath9k_hw_wait(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_CAL,
15512 +                          0, AH_WAIT_TIMEOUT)) {
15513 +               ath_print(common, ATH_DBG_CALIBRATE,
15514 +                         "offset calibration failed to "
15515 +                         "complete in 1ms; noisy environment?\n");
15516 +               return false;
15517 +       }
15518 +
15519 +       /* Do Tx IQ Calibration */
15520 +       ar9003_hw_tx_iq_cal(ah);
15521 +
15522 +       /* Revert chainmasks to their original values before NF cal */
15523 +       ar9003_hw_modify_chain_masks(ah, ah->rxchainmask, ah->txchainmask);
15524 +
15525 +       /* Initialize list pointers */
15526 +       ah->cal_list = ah->cal_list_last = ah->cal_list_curr = NULL;
15527 +
15528 +       if (ar9003_hw_iscal_supported(ah, IQ_MISMATCH_CAL)) {
15529 +               INIT_CAL(&ah->iq_caldata);
15530 +               INSERT_CAL(ah, &ah->iq_caldata);
15531 +               ath_print(common, ATH_DBG_CALIBRATE,
15532 +                         "enabling IQ Calibration.\n");
15533 +       }
15534 +
15535 +       if (ar9003_hw_iscal_supported(ah, TEMP_COMP_CAL)) {
15536 +               INIT_CAL(&ah->tempCompCalData);
15537 +               INSERT_CAL(ah, &ah->tempCompCalData);
15538 +               ath_print(common, ATH_DBG_CALIBRATE,
15539 +                         "enabling Temperature Compensation Calibration.\n");
15540 +       }
15541 +
15542 +       /* Initialize current pointer to first element in list */
15543 +       ah->cal_list_curr = ah->cal_list;
15544 +
15545 +       if (ah->cal_list_curr)
15546 +               ath9k_hw_reset_calibration(ah, ah->cal_list_curr);
15547 +
15548 +       chan->CalValid = 0;
15549 +
15550 +       return true;
15551 +}
15552 +
15553 +void ar9003_hw_attach_calib_ops(struct ath_hw *ah)
15554 +{
15555 +       struct ath_hw_private_ops *priv_ops = ath9k_hw_private_ops(ah);
15556 +       struct ath_hw_ops *ops = ath9k_hw_ops(ah);
15557 +
15558 +       priv_ops->init_cal_settings = ar9003_hw_init_cal_settings;
15559 +       priv_ops->init_cal = ar9003_hw_init_cal;
15560 +       priv_ops->setup_calibration = ar9003_hw_setup_calibration;
15561 +       priv_ops->iscal_supported = ar9003_hw_iscal_supported;
15562 +
15563 +       ops->calibrate = ar9003_hw_calibrate;
15564 +}
15565 diff --git a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
15566 new file mode 100644
15567 index 0000000..a3e5c70
15568 --- /dev/null
15569 +++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
15570 @@ -0,0 +1,1841 @@
15571 +/*
15572 + * Copyright (c) 2010 Atheros Communications Inc.
15573 + *
15574 + * Permission to use, copy, modify, and/or distribute this software for any
15575 + * purpose with or without fee is hereby granted, provided that the above
15576 + * copyright notice and this permission notice appear in all copies.
15577 + *
15578 + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
15579 + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
15580 + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
15581 + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15582 + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15583 + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15584 + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15585 + */
15586 +
15587 +#include "hw.h"
15588 +#include "ar9003_phy.h"
15589 +#include "ar9003_eeprom.h"
15590 +
15591 +#define COMP_HDR_LEN 4
15592 +#define COMP_CKSUM_LEN 2
15593 +
15594 +#define AR_CH0_TOP (0x00016288)
15595 +#define AR_CH0_TOP_XPABIASLVL (0x3)
15596 +#define AR_CH0_TOP_XPABIASLVL_S (8)
15597 +
15598 +#define AR_CH0_THERM (0x00016290)
15599 +#define AR_CH0_THERM_SPARE (0x3f)
15600 +#define AR_CH0_THERM_SPARE_S (0)
15601 +
15602 +#define AR_SWITCH_TABLE_COM_ALL (0xffff)
15603 +#define AR_SWITCH_TABLE_COM_ALL_S (0)
15604 +
15605 +#define AR_SWITCH_TABLE_COM2_ALL (0xffffff)
15606 +#define AR_SWITCH_TABLE_COM2_ALL_S (0)
15607 +
15608 +#define AR_SWITCH_TABLE_ALL (0xfff)
15609 +#define AR_SWITCH_TABLE_ALL_S (0)
15610 +
15611 +static const struct ar9300_eeprom ar9300_default = {
15612 +       .eepromVersion = 2,
15613 +       .templateVersion = 2,
15614 +       .macAddr = {1, 2, 3, 4, 5, 6},
15615 +       .custData = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15616 +                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
15617 +       .baseEepHeader = {
15618 +               .regDmn = {0, 0x1f},
15619 +               .txrxMask =  0x77, /* 4 bits tx and 4 bits rx */
15620 +               .opCapFlags = {
15621 +                       .opFlags = AR9300_OPFLAGS_11G | AR9300_OPFLAGS_11A,
15622 +                       .eepMisc = 0,
15623 +               },
15624 +               .rfSilent = 0,
15625 +               .blueToothOptions = 0,
15626 +               .deviceCap = 0,
15627 +               .deviceType = 5, /* takes lower byte in eeprom location */
15628 +               .pwrTableOffset = AR9300_PWR_TABLE_OFFSET,
15629 +               .params_for_tuning_caps = {0, 0},
15630 +               .featureEnable = 0x0c,
15631 +                /*
15632 +                 * bit0 - enable tx temp comp - disabled
15633 +                 * bit1 - enable tx volt comp - disabled
15634 +                 * bit2 - enable fastClock - enabled
15635 +                 * bit3 - enable doubling - enabled
15636 +                 * bit4 - enable internal regulator - disabled
15637 +                 */
15638 +               .miscConfiguration = 0, /* bit0 - turn down drivestrength */
15639 +               .eepromWriteEnableGpio = 3,
15640 +               .wlanDisableGpio = 0,
15641 +               .wlanLedGpio = 8,
15642 +               .rxBandSelectGpio = 0xff,
15643 +               .txrxgain = 0,
15644 +               .swreg = 0,
15645 +        },
15646 +       .modalHeader2G = {
15647 +       /* ar9300_modal_eep_header  2g */
15648 +               /* 4 idle,t1,t2,b(4 bits per setting) */
15649 +               .antCtrlCommon = 0x110,
15650 +               /* 4 ra1l1, ra2l1, ra1l2, ra2l2, ra12 */
15651 +               .antCtrlCommon2 = 0x22222,
15652 +
15653 +               /*
15654 +                * antCtrlChain[AR9300_MAX_CHAINS]; 6 idle, t, r,
15655 +                * rx1, rx12, b (2 bits each)
15656 +                */
15657 +               .antCtrlChain = {0x150, 0x150, 0x150},
15658 +
15659 +               /*
15660 +                * xatten1DB[AR9300_MAX_CHAINS];  3 xatten1_db
15661 +                * for ar9280 (0xa20c/b20c 5:0)
15662 +                */
15663 +               .xatten1DB = {0, 0, 0},
15664 +
15665 +               /*
15666 +                * xatten1Margin[AR9300_MAX_CHAINS]; 3 xatten1_margin
15667 +                * for ar9280 (0xa20c/b20c 16:12
15668 +                */
15669 +               .xatten1Margin = {0, 0, 0},
15670 +               .tempSlope = 36,
15671 +               .voltSlope = 0,
15672 +
15673 +               /*
15674 +                * spurChans[OSPREY_EEPROM_MODAL_SPURS]; spur
15675 +                * channels in usual fbin coding format
15676 +                */
15677 +               .spurChans = {0, 0, 0, 0, 0},
15678 +
15679 +               /*
15680 +                * noiseFloorThreshCh[AR9300_MAX_CHAINS]; 3 Check
15681 +                * if the register is per chain
15682 +                */
15683 +               .noiseFloorThreshCh = {-1, 0, 0},
15684 +               .ob = {1, 1, 1},/* 3 chain */
15685 +               .db_stage2 = {1, 1, 1}, /* 3 chain  */
15686 +               .db_stage3 = {0, 0, 0},
15687 +               .db_stage4 = {0, 0, 0},
15688 +               .xpaBiasLvl = 0,
15689 +               .txFrameToDataStart = 0x0e,
15690 +               .txFrameToPaOn = 0x0e,
15691 +               .txClip = 3, /* 4 bits tx_clip, 4 bits dac_scale_cck */
15692 +               .antennaGain = 0,
15693 +               .switchSettling = 0x2c,
15694 +               .adcDesiredSize = -30,
15695 +               .txEndToXpaOff = 0,
15696 +               .txEndToRxOn = 0x2,
15697 +               .txFrameToXpaOn = 0xe,
15698 +               .thresh62 = 28,
15699 +               .futureModal = { /* [32] */
15700 +                       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15701 +                       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
15702 +               },
15703 +        },
15704 +       .calFreqPier2G = {
15705 +               FREQ2FBIN(2412, 1),
15706 +               FREQ2FBIN(2437, 1),
15707 +               FREQ2FBIN(2472, 1),
15708 +        },
15709 +       /* ar9300_cal_data_per_freq_op_loop 2g */
15710 +       .calPierData2G = {
15711 +               {{0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}},
15712 +               {{0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}},
15713 +               {{0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}},
15714 +        },
15715 +       .calTarget_freqbin_Cck = {
15716 +               FREQ2FBIN(2412, 1),
15717 +               FREQ2FBIN(2484, 1),
15718 +        },
15719 +       .calTarget_freqbin_2G = {
15720 +               FREQ2FBIN(2412, 1),
15721 +               FREQ2FBIN(2437, 1),
15722 +               FREQ2FBIN(2472, 1)
15723 +        },
15724 +       .calTarget_freqbin_2GHT20 = {
15725 +               FREQ2FBIN(2412, 1),
15726 +               FREQ2FBIN(2437, 1),
15727 +               FREQ2FBIN(2472, 1)
15728 +        },
15729 +       .calTarget_freqbin_2GHT40 = {
15730 +               FREQ2FBIN(2412, 1),
15731 +               FREQ2FBIN(2437, 1),
15732 +               FREQ2FBIN(2472, 1)
15733 +        },
15734 +       .calTargetPowerCck = {
15735 +                /* 1L-5L,5S,11L,11S */
15736 +                {{36, 36, 36, 36}},
15737 +                {{36, 36, 36, 36}},
15738 +       },
15739 +       .calTargetPower2G = {
15740 +                /* 6-24,36,48,54 */
15741 +                {{32, 32, 28, 24}},
15742 +                {{32, 32, 28, 24}},
15743 +                {{32, 32, 28, 24}},
15744 +       },
15745 +       .calTargetPower2GHT20 = {
15746 +               {{32, 32, 32, 32, 28, 20, 32, 32, 28, 20, 32, 32, 28, 20}},
15747 +               {{32, 32, 32, 32, 28, 20, 32, 32, 28, 20, 32, 32, 28, 20}},
15748 +               {{32, 32, 32, 32, 28, 20, 32, 32, 28, 20, 32, 32, 28, 20}},
15749 +       },
15750 +       .calTargetPower2GHT40 = {
15751 +               {{32, 32, 32, 32, 28, 20, 32, 32, 28, 20, 32, 32, 28, 20}},
15752 +               {{32, 32, 32, 32, 28, 20, 32, 32, 28, 20, 32, 32, 28, 20}},
15753 +               {{32, 32, 32, 32, 28, 20, 32, 32, 28, 20, 32, 32, 28, 20}},
15754 +       },
15755 +       .ctlIndex_2G =  {
15756 +               0x11, 0x12, 0x15, 0x17, 0x41, 0x42,
15757 +               0x45, 0x47, 0x31, 0x32, 0x35, 0x37,
15758 +       },
15759 +       .ctl_freqbin_2G = {
15760 +               {
15761 +                       FREQ2FBIN(2412, 1),
15762 +                       FREQ2FBIN(2417, 1),
15763 +                       FREQ2FBIN(2457, 1),
15764 +                       FREQ2FBIN(2462, 1)
15765 +               },
15766 +               {
15767 +                       FREQ2FBIN(2412, 1),
15768 +                       FREQ2FBIN(2417, 1),
15769 +                       FREQ2FBIN(2462, 1),
15770 +                       0xFF,
15771 +               },
15772 +
15773 +               {
15774 +                       FREQ2FBIN(2412, 1),
15775 +                       FREQ2FBIN(2417, 1),
15776 +                       FREQ2FBIN(2462, 1),
15777 +                       0xFF,
15778 +               },
15779 +               {
15780 +                       FREQ2FBIN(2422, 1),
15781 +                       FREQ2FBIN(2427, 1),
15782 +                       FREQ2FBIN(2447, 1),
15783 +                       FREQ2FBIN(2452, 1)
15784 +               },
15785 +
15786 +               {
15787 +                       /* Data[4].ctlEdges[0].bChannel */ FREQ2FBIN(2412, 1),
15788 +                       /* Data[4].ctlEdges[1].bChannel */ FREQ2FBIN(2417, 1),
15789 +                       /* Data[4].ctlEdges[2].bChannel */ FREQ2FBIN(2472, 1),
15790 +                       /* Data[4].ctlEdges[3].bChannel */ FREQ2FBIN(2484, 1),
15791 +               },
15792 +
15793 +               {
15794 +                       /* Data[5].ctlEdges[0].bChannel */ FREQ2FBIN(2412, 1),
15795 +                       /* Data[5].ctlEdges[1].bChannel */ FREQ2FBIN(2417, 1),
15796 +                       /* Data[5].ctlEdges[2].bChannel */ FREQ2FBIN(2472, 1),
15797 +                       0,
15798 +               },
15799 +
15800 +               {
15801 +                       /* Data[6].ctlEdges[0].bChannel */ FREQ2FBIN(2412, 1),
15802 +                       /* Data[6].ctlEdges[1].bChannel */ FREQ2FBIN(2417, 1),
15803 +                       FREQ2FBIN(2472, 1),
15804 +                       0,
15805 +               },
15806 +
15807 +               {
15808 +                       /* Data[7].ctlEdges[0].bChannel */ FREQ2FBIN(2422, 1),
15809 +                       /* Data[7].ctlEdges[1].bChannel */ FREQ2FBIN(2427, 1),
15810 +                       /* Data[7].ctlEdges[2].bChannel */ FREQ2FBIN(2447, 1),
15811 +                       /* Data[7].ctlEdges[3].bChannel */ FREQ2FBIN(2462, 1),
15812 +               },
15813 +
15814 +               {
15815 +                       /* Data[8].ctlEdges[0].bChannel */ FREQ2FBIN(2412, 1),
15816 +                       /* Data[8].ctlEdges[1].bChannel */ FREQ2FBIN(2417, 1),
15817 +                       /* Data[8].ctlEdges[2].bChannel */ FREQ2FBIN(2472, 1),
15818 +               },
15819 +
15820 +               {
15821 +                       /* Data[9].ctlEdges[0].bChannel */ FREQ2FBIN(2412, 1),
15822 +                       /* Data[9].ctlEdges[1].bChannel */ FREQ2FBIN(2417, 1),
15823 +                       /* Data[9].ctlEdges[2].bChannel */ FREQ2FBIN(2472, 1),
15824 +                       0
15825 +               },
15826 +
15827 +               {
15828 +                       /* Data[10].ctlEdges[0].bChannel */ FREQ2FBIN(2412, 1),
15829 +                       /* Data[10].ctlEdges[1].bChannel */ FREQ2FBIN(2417, 1),
15830 +                       /* Data[10].ctlEdges[2].bChannel */ FREQ2FBIN(2472, 1),
15831 +                       0
15832 +               },
15833 +
15834 +               {
15835 +                       /* Data[11].ctlEdges[0].bChannel */ FREQ2FBIN(2422, 1),
15836 +                       /* Data[11].ctlEdges[1].bChannel */ FREQ2FBIN(2427, 1),
15837 +                       /* Data[11].ctlEdges[2].bChannel */ FREQ2FBIN(2447, 1),
15838 +                       /* Data[11].ctlEdges[3].bChannel */
15839 +                       FREQ2FBIN(2462, 1),
15840 +               }
15841 +        },
15842 +       .ctlPowerData_2G = {
15843 +                {{{60, 0}, {60, 1}, {60, 0}, {60, 0}}},
15844 +                {{{60, 0}, {60, 1}, {60, 0}, {60, 0}}},
15845 +                {{{60, 1}, {60, 0}, {60, 0}, {60, 1}}},
15846 +
15847 +                {{{60, 1}, {60, 0}, {0, 0}, {0, 0}}},
15848 +                {{{60, 0}, {60, 1}, {60, 0}, {60, 0}}},
15849 +                {{{60, 0}, {60, 1}, {60, 0}, {60, 0}}},
15850 +
15851 +                {{{60, 0}, {60, 1}, {60, 1}, {60, 0}}},
15852 +                {{{60, 0}, {60, 1}, {60, 0}, {60, 0}}},
15853 +                {{{60, 0}, {60, 1}, {60, 0}, {60, 0}}},
15854 +
15855 +                {{{60, 0}, {60, 1}, {60, 0}, {60, 0}}},
15856 +                {{{60, 0}, {60, 1}, {60, 1}, {60, 1}}},
15857 +        },
15858 +       .modalHeader5G = {
15859 +               /* 4 idle,t1,t2,b (4 bits per setting) */
15860 +               .antCtrlCommon = 0x110,
15861 +               /* 4 ra1l1, ra2l1, ra1l2,ra2l2,ra12 */
15862 +               .antCtrlCommon2 = 0x22222,
15863 +                /* antCtrlChain 6 idle, t,r,rx1,rx12,b (2 bits each) */
15864 +               .antCtrlChain = {
15865 +                       0x000, 0x000, 0x000,
15866 +               },
15867 +                /* xatten1DB 3 xatten1_db for AR9280 (0xa20c/b20c 5:0) */
15868 +               .xatten1DB = {0, 0, 0},
15869 +
15870 +               /*
15871 +                * xatten1Margin[AR9300_MAX_CHAINS]; 3 xatten1_margin
15872 +                * for merlin (0xa20c/b20c 16:12
15873 +                */
15874 +               .xatten1Margin = {0, 0, 0},
15875 +               .tempSlope = 68,
15876 +               .voltSlope = 0,
15877 +               /* spurChans spur channels in usual fbin coding format */
15878 +               .spurChans = {0, 0, 0, 0, 0},
15879 +               /* noiseFloorThreshCh Check if the register is per chain */
15880 +               .noiseFloorThreshCh = {-1, 0, 0},
15881 +               .ob = {3, 3, 3}, /* 3 chain */
15882 +               .db_stage2 = {3, 3, 3}, /* 3 chain */
15883 +               .db_stage3 = {3, 3, 3}, /* doesn't exist for 2G */
15884 +               .db_stage4 = {3, 3, 3},  /* don't exist for 2G */
15885 +               .xpaBiasLvl = 0,
15886 +               .txFrameToDataStart = 0x0e,
15887 +               .txFrameToPaOn = 0x0e,
15888 +               .txClip = 3, /* 4 bits tx_clip, 4 bits dac_scale_cck */
15889 +               .antennaGain = 0,
15890 +               .switchSettling = 0x2d,
15891 +               .adcDesiredSize = -30,
15892 +               .txEndToXpaOff = 0,
15893 +               .txEndToRxOn = 0x2,
15894 +               .txFrameToXpaOn = 0xe,
15895 +               .thresh62 = 28,
15896 +               .futureModal = {
15897 +                       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15898 +                       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
15899 +               },
15900 +        },
15901 +       .calFreqPier5G = {
15902 +               FREQ2FBIN(5180, 0),
15903 +               FREQ2FBIN(5220, 0),
15904 +               FREQ2FBIN(5320, 0),
15905 +               FREQ2FBIN(5400, 0),
15906 +               FREQ2FBIN(5500, 0),
15907 +               FREQ2FBIN(5600, 0),
15908 +               FREQ2FBIN(5725, 0),
15909 +               FREQ2FBIN(5825, 0)
15910 +       },
15911 +       .calPierData5G = {
15912 +                       {
15913 +                               {0, 0, 0, 0, 0},
15914 +                               {0, 0, 0, 0, 0},
15915 +                               {0, 0, 0, 0, 0},
15916 +                               {0, 0, 0, 0, 0},
15917 +                               {0, 0, 0, 0, 0},
15918 +                               {0, 0, 0, 0, 0},
15919 +                               {0, 0, 0, 0, 0},
15920 +                               {0, 0, 0, 0, 0},
15921 +                       },
15922 +                       {
15923 +                               {0, 0, 0, 0, 0},
15924 +                               {0, 0, 0, 0, 0},
15925 +                               {0, 0, 0, 0, 0},
15926 +                               {0, 0, 0, 0, 0},
15927 +                               {0, 0, 0, 0, 0},
15928 +                               {0, 0, 0, 0, 0},
15929 +                               {0, 0, 0, 0, 0},
15930 +                               {0, 0, 0, 0, 0},
15931 +                       },
15932 +                       {
15933 +                               {0, 0, 0, 0, 0},
15934 +                               {0, 0, 0, 0, 0},
15935 +                               {0, 0, 0, 0, 0},
15936 +                               {0, 0, 0, 0, 0},
15937 +                               {0, 0, 0, 0, 0},
15938 +                               {0, 0, 0, 0, 0},
15939 +                               {0, 0, 0, 0, 0},
15940 +                               {0, 0, 0, 0, 0},
15941 +                       },
15942 +
15943 +       },
15944 +       .calTarget_freqbin_5G = {
15945 +               FREQ2FBIN(5180, 0),
15946 +               FREQ2FBIN(5220, 0),
15947 +               FREQ2FBIN(5320, 0),
15948 +               FREQ2FBIN(5400, 0),
15949 +               FREQ2FBIN(5500, 0),
15950 +               FREQ2FBIN(5600, 0),
15951 +               FREQ2FBIN(5725, 0),
15952 +               FREQ2FBIN(5825, 0)
15953 +       },
15954 +       .calTarget_freqbin_5GHT20 = {
15955 +               FREQ2FBIN(5180, 0),
15956 +               FREQ2FBIN(5240, 0),
15957 +               FREQ2FBIN(5320, 0),
15958 +               FREQ2FBIN(5500, 0),
15959 +               FREQ2FBIN(5700, 0),
15960 +               FREQ2FBIN(5745, 0),
15961 +               FREQ2FBIN(5725, 0),
15962 +               FREQ2FBIN(5825, 0)
15963 +       },
15964 +       .calTarget_freqbin_5GHT40 = {
15965 +               FREQ2FBIN(5180, 0),
15966 +               FREQ2FBIN(5240, 0),
15967 +               FREQ2FBIN(5320, 0),
15968 +               FREQ2FBIN(5500, 0),
15969 +               FREQ2FBIN(5700, 0),
15970 +               FREQ2FBIN(5745, 0),
15971 +               FREQ2FBIN(5725, 0),
15972 +               FREQ2FBIN(5825, 0)
15973 +        },
15974 +       .calTargetPower5G = {
15975 +               /* 6-24,36,48,54 */
15976 +               {{20, 20, 20, 10}},
15977 +               {{20, 20, 20, 10}},
15978 +               {{20, 20, 20, 10}},
15979 +               {{20, 20, 20, 10}},
15980 +               {{20, 20, 20, 10}},
15981 +               {{20, 20, 20, 10}},
15982 +               {{20, 20, 20, 10}},
15983 +               {{20, 20, 20, 10}},
15984 +        },
15985 +       .calTargetPower5GHT20 = {
15986 +               /*
15987 +                * 0_8_16,1-3_9-11_17-19,
15988 +                * 4,5,6,7,12,13,14,15,20,21,22,23
15989 +                */
15990 +               {{20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0}},
15991 +               {{20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0}},
15992 +               {{20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0}},
15993 +               {{20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0}},
15994 +               {{20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0}},
15995 +               {{20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0}},
15996 +               {{20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0}},
15997 +               {{20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0}},
15998 +        },
15999 +       .calTargetPower5GHT40 =  {
16000 +               /*
16001 +                * 0_8_16,1-3_9-11_17-19,
16002 +                * 4,5,6,7,12,13,14,15,20,21,22,23
16003 +                */
16004 +               {{20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0}},
16005 +               {{20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0}},
16006 +               {{20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0}},
16007 +               {{20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0}},
16008 +               {{20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0}},
16009 +               {{20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0}},
16010 +               {{20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0}},
16011 +               {{20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0}},
16012 +        },
16013 +       .ctlIndex_5G =  {
16014 +               0x10, 0x16, 0x18, 0x40, 0x46,
16015 +               0x48, 0x30, 0x36, 0x38
16016 +       },
16017 +       .ctl_freqbin_5G =  {
16018 +               {
16019 +                       /* Data[0].ctlEdges[0].bChannel */ FREQ2FBIN(5180, 0),
16020 +                       /* Data[0].ctlEdges[1].bChannel */ FREQ2FBIN(5260, 0),
16021 +                       /* Data[0].ctlEdges[2].bChannel */ FREQ2FBIN(5280, 0),
16022 +                       /* Data[0].ctlEdges[3].bChannel */ FREQ2FBIN(5500, 0),
16023 +                       /* Data[0].ctlEdges[4].bChannel */ FREQ2FBIN(5600, 0),
16024 +                       /* Data[0].ctlEdges[5].bChannel */ FREQ2FBIN(5700, 0),
16025 +                       /* Data[0].ctlEdges[6].bChannel */ FREQ2FBIN(5745, 0),
16026 +                       /* Data[0].ctlEdges[7].bChannel */ FREQ2FBIN(5825, 0)
16027 +               },
16028 +               {
16029 +                       /* Data[1].ctlEdges[0].bChannel */ FREQ2FBIN(5180, 0),
16030 +                       /* Data[1].ctlEdges[1].bChannel */ FREQ2FBIN(5260, 0),
16031 +                       /* Data[1].ctlEdges[2].bChannel */ FREQ2FBIN(5280, 0),
16032 +                       /* Data[1].ctlEdges[3].bChannel */ FREQ2FBIN(5500, 0),
16033 +                       /* Data[1].ctlEdges[4].bChannel */ FREQ2FBIN(5520, 0),
16034 +                       /* Data[1].ctlEdges[5].bChannel */ FREQ2FBIN(5700, 0),
16035 +                       /* Data[1].ctlEdges[6].bChannel */ FREQ2FBIN(5745, 0),
16036 +                       /* Data[1].ctlEdges[7].bChannel */ FREQ2FBIN(5825, 0)
16037 +               },
16038 +
16039 +               {
16040 +                       /* Data[2].ctlEdges[0].bChannel */ FREQ2FBIN(5190, 0),
16041 +                       /* Data[2].ctlEdges[1].bChannel */ FREQ2FBIN(5230, 0),
16042 +                       /* Data[2].ctlEdges[2].bChannel */ FREQ2FBIN(5270, 0),
16043 +                       /* Data[2].ctlEdges[3].bChannel */ FREQ2FBIN(5310, 0),
16044 +                       /* Data[2].ctlEdges[4].bChannel */ FREQ2FBIN(5510, 0),
16045 +                       /* Data[2].ctlEdges[5].bChannel */ FREQ2FBIN(5550, 0),
16046 +                       /* Data[2].ctlEdges[6].bChannel */ FREQ2FBIN(5670, 0),
16047 +                       /* Data[2].ctlEdges[7].bChannel */ FREQ2FBIN(5755, 0)
16048 +               },
16049 +
16050 +               {
16051 +                       /* Data[3].ctlEdges[0].bChannel */ FREQ2FBIN(5180, 0),
16052 +                       /* Data[3].ctlEdges[1].bChannel */ FREQ2FBIN(5200, 0),
16053 +                       /* Data[3].ctlEdges[2].bChannel */ FREQ2FBIN(5260, 0),
16054 +                       /* Data[3].ctlEdges[3].bChannel */ FREQ2FBIN(5320, 0),
16055 +                       /* Data[3].ctlEdges[4].bChannel */ FREQ2FBIN(5500, 0),
16056 +                       /* Data[3].ctlEdges[5].bChannel */ FREQ2FBIN(5700, 0),
16057 +                       /* Data[3].ctlEdges[6].bChannel */ 0xFF,
16058 +                       /* Data[3].ctlEdges[7].bChannel */ 0xFF,
16059 +               },
16060 +
16061 +               {
16062 +                       /* Data[4].ctlEdges[0].bChannel */ FREQ2FBIN(5180, 0),
16063 +                       /* Data[4].ctlEdges[1].bChannel */ FREQ2FBIN(5260, 0),
16064 +                       /* Data[4].ctlEdges[2].bChannel */ FREQ2FBIN(5500, 0),
16065 +                       /* Data[4].ctlEdges[3].bChannel */ FREQ2FBIN(5700, 0),
16066 +                       /* Data[4].ctlEdges[4].bChannel */ 0xFF,
16067 +                       /* Data[4].ctlEdges[5].bChannel */ 0xFF,
16068 +                       /* Data[4].ctlEdges[6].bChannel */ 0xFF,
16069 +                       /* Data[4].ctlEdges[7].bChannel */ 0xFF,
16070 +               },
16071 +
16072 +               {
16073 +                       /* Data[5].ctlEdges[0].bChannel */ FREQ2FBIN(5190, 0),
16074 +                       /* Data[5].ctlEdges[1].bChannel */ FREQ2FBIN(5270, 0),
16075 +                       /* Data[5].ctlEdges[2].bChannel */ FREQ2FBIN(5310, 0),
16076 +                       /* Data[5].ctlEdges[3].bChannel */ FREQ2FBIN(5510, 0),
16077 +                       /* Data[5].ctlEdges[4].bChannel */ FREQ2FBIN(5590, 0),
16078 +                       /* Data[5].ctlEdges[5].bChannel */ FREQ2FBIN(5670, 0),
16079 +                       /* Data[5].ctlEdges[6].bChannel */ 0xFF,
16080 +                       /* Data[5].ctlEdges[7].bChannel */ 0xFF
16081 +               },
16082 +
16083 +               {
16084 +                       /* Data[6].ctlEdges[0].bChannel */ FREQ2FBIN(5180, 0),
16085 +                       /* Data[6].ctlEdges[1].bChannel */ FREQ2FBIN(5200, 0),
16086 +                       /* Data[6].ctlEdges[2].bChannel */ FREQ2FBIN(5220, 0),
16087 +                       /* Data[6].ctlEdges[3].bChannel */ FREQ2FBIN(5260, 0),
16088 +                       /* Data[6].ctlEdges[4].bChannel */ FREQ2FBIN(5500, 0),
16089 +                       /* Data[6].ctlEdges[5].bChannel */ FREQ2FBIN(5600, 0),
16090 +                       /* Data[6].ctlEdges[6].bChannel */ FREQ2FBIN(5700, 0),
16091 +                       /* Data[6].ctlEdges[7].bChannel */ FREQ2FBIN(5745, 0)
16092 +               },
16093 +
16094 +               {
16095 +                       /* Data[7].ctlEdges[0].bChannel */ FREQ2FBIN(5180, 0),
16096 +                       /* Data[7].ctlEdges[1].bChannel */ FREQ2FBIN(5260, 0),
16097 +                       /* Data[7].ctlEdges[2].bChannel */ FREQ2FBIN(5320, 0),
16098 +                       /* Data[7].ctlEdges[3].bChannel */ FREQ2FBIN(5500, 0),
16099 +                       /* Data[7].ctlEdges[4].bChannel */ FREQ2FBIN(5560, 0),
16100 +                       /* Data[7].ctlEdges[5].bChannel */ FREQ2FBIN(5700, 0),
16101 +                       /* Data[7].ctlEdges[6].bChannel */ FREQ2FBIN(5745, 0),
16102 +                       /* Data[7].ctlEdges[7].bChannel */ FREQ2FBIN(5825, 0)
16103 +               },
16104 +
16105 +               {
16106 +                       /* Data[8].ctlEdges[0].bChannel */ FREQ2FBIN(5190, 0),
16107 +                       /* Data[8].ctlEdges[1].bChannel */ FREQ2FBIN(5230, 0),
16108 +                       /* Data[8].ctlEdges[2].bChannel */ FREQ2FBIN(5270, 0),
16109 +                       /* Data[8].ctlEdges[3].bChannel */ FREQ2FBIN(5510, 0),
16110 +                       /* Data[8].ctlEdges[4].bChannel */ FREQ2FBIN(5550, 0),
16111 +                       /* Data[8].ctlEdges[5].bChannel */ FREQ2FBIN(5670, 0),
16112 +                       /* Data[8].ctlEdges[6].bChannel */ FREQ2FBIN(5755, 0),
16113 +                       /* Data[8].ctlEdges[7].bChannel */ FREQ2FBIN(5795, 0)
16114 +               }
16115 +        },
16116 +       .ctlPowerData_5G = {
16117 +               {
16118 +                       {
16119 +                               {60, 1}, {60, 1}, {60, 1}, {60, 1},
16120 +                               {60, 1}, {60, 1}, {60, 1}, {60, 0},
16121 +                       }
16122 +               },
16123 +               {
16124 +                       {
16125 +                               {60, 1}, {60, 1}, {60, 1}, {60, 1},
16126 +                               {60, 1}, {60, 1}, {60, 1}, {60, 0},
16127 +                       }
16128 +               },
16129 +               {
16130 +                       {
16131 +                               {60, 0}, {60, 1}, {60, 0}, {60, 1},
16132 +                               {60, 1}, {60, 1}, {60, 1}, {60, 1},
16133 +                       }
16134 +               },
16135 +               {
16136 +                       {
16137 +                               {60, 0}, {60, 1}, {60, 1}, {60, 0},
16138 +                               {60, 1}, {60, 0}, {60, 0}, {60, 0},
16139 +                       }
16140 +               },
16141 +               {
16142 +                       {
16143 +                               {60, 1}, {60, 1}, {60, 1}, {60, 0},
16144 +                               {60, 0}, {60, 0}, {60, 0}, {60, 0},
16145 +                       }
16146 +               },
16147 +               {
16148 +                       {
16149 +                               {60, 1}, {60, 1}, {60, 1}, {60, 1},
16150 +                               {60, 1}, {60, 0}, {60, 0}, {60, 0},
16151 +                       }
16152 +               },
16153 +               {
16154 +                       {
16155 +                               {60, 1}, {60, 1}, {60, 1}, {60, 1},
16156 +                               {60, 1}, {60, 1}, {60, 1}, {60, 1},
16157 +                       }
16158 +               },
16159 +               {
16160 +                       {
16161 +                               {60, 1}, {60, 1}, {60, 0}, {60, 1},
16162 +                               {60, 1}, {60, 1}, {60, 1}, {60, 0},
16163 +                       }
16164 +               },
16165 +               {
16166 +                       {
16167 +                               {60, 1}, {60, 0}, {60, 1}, {60, 1},
16168 +                               {60, 1}, {60, 1}, {60, 0}, {60, 1},
16169 +                       }
16170 +               },
16171 +        }
16172 +};
16173 +
16174 +static int ath9k_hw_ar9300_check_eeprom(struct ath_hw *ah)
16175 +{
16176 +       return 0;
16177 +}
16178 +
16179 +static u32 ath9k_hw_ar9300_get_eeprom(struct ath_hw *ah,
16180 +                                     enum eeprom_param param)
16181 +{
16182 +       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
16183 +       struct ar9300_base_eep_hdr *pBase = &eep->baseEepHeader;
16184 +
16185 +       switch (param) {
16186 +       case EEP_MAC_LSW:
16187 +               return eep->macAddr[0] << 8 | eep->macAddr[1];
16188 +       case EEP_MAC_MID:
16189 +               return eep->macAddr[2] << 8 | eep->macAddr[3];
16190 +       case EEP_MAC_MSW:
16191 +               return eep->macAddr[4] << 8 | eep->macAddr[5];
16192 +       case EEP_REG_0:
16193 +               return pBase->regDmn[0];
16194 +       case EEP_REG_1:
16195 +               return pBase->regDmn[1];
16196 +       case EEP_OP_CAP:
16197 +               return pBase->deviceCap;
16198 +       case EEP_OP_MODE:
16199 +               return pBase->opCapFlags.opFlags;
16200 +       case EEP_RF_SILENT:
16201 +               return pBase->rfSilent;
16202 +       case EEP_TX_MASK:
16203 +               return (pBase->txrxMask >> 4) & 0xf;
16204 +       case EEP_RX_MASK:
16205 +               return pBase->txrxMask & 0xf;
16206 +       case EEP_DRIVE_STRENGTH:
16207 +#define AR9300_EEP_BASE_DRIV_STRENGTH  0x1
16208 +               return pBase->miscConfiguration & AR9300_EEP_BASE_DRIV_STRENGTH;
16209 +       case EEP_INTERNAL_REGULATOR:
16210 +               /* Bit 4 is internal regulator flag */
16211 +               return ((pBase->featureEnable & 0x10) >> 4);
16212 +       case EEP_SWREG:
16213 +               return (pBase->swreg);
16214 +       default:
16215 +               return 0;
16216 +       }
16217 +}
16218 +
16219 +#ifdef __BIG_ENDIAN
16220 +static void ar9300_swap_eeprom(struct ar9300_eeprom *eep)
16221 +{
16222 +       u32 dword;
16223 +       u16 word;
16224 +       int i;
16225 +
16226 +       word = swab16(eep->baseEepHeader.regDmn[0]);
16227 +       eep->baseEepHeader.regDmn[0] = word;
16228 +
16229 +       word = swab16(eep->baseEepHeader.regDmn[1]);
16230 +       eep->baseEepHeader.regDmn[1] = word;
16231 +
16232 +       dword = swab32(eep->modalHeader2G.antCtrlCommon);
16233 +       eep->modalHeader2G.antCtrlCommon = dword;
16234 +
16235 +       dword = swab32(eep->modalHeader2G.antCtrlCommon2);
16236 +       eep->modalHeader2G.antCtrlCommon2 = dword;
16237 +
16238 +       dword = swab32(eep->modalHeader5G.antCtrlCommon);
16239 +       eep->modalHeader5G.antCtrlCommon = dword;
16240 +
16241 +       dword = swab32(eep->modalHeader5G.antCtrlCommon2);
16242 +       eep->modalHeader5G.antCtrlCommon2 = dword;
16243 +
16244 +       for (i = 0; i < AR9300_MAX_CHAINS; i++) {
16245 +               word = swab16(eep->modalHeader2G.antCtrlChain[i]);
16246 +               eep->modalHeader2G.antCtrlChain[i] = word;
16247 +
16248 +               word = swab16(eep->modalHeader5G.antCtrlChain[i]);
16249 +               eep->modalHeader5G.antCtrlChain[i] = word;
16250 +       }
16251 +}
16252 +#endif
16253 +
16254 +static bool ar9300_hw_read_eeprom(struct ath_hw *ah,
16255 +                                 long address, u8 * buffer, int many)
16256 +{
16257 +       int i;
16258 +       u8 value[2];
16259 +       unsigned long eepAddr;
16260 +       unsigned long byteAddr;
16261 +       u16 *svalue;
16262 +       struct ath_common *common = ath9k_hw_common(ah);
16263 +
16264 +       if ((address < 0) || ((address + many) > AR9300_EEPROM_SIZE - 1)) {
16265 +               ath_print(common, ATH_DBG_EEPROM,
16266 +                         "eeprom address not in range \n");
16267 +               return false;
16268 +       }
16269 +
16270 +       for (i = 0; i < many; i++) {
16271 +               eepAddr = (u16) (address + i) / 2;
16272 +               byteAddr = (u16) (address + i) % 2;
16273 +               svalue = (u16 *) value;
16274 +               if (!ath9k_hw_nvram_read(common, eepAddr, svalue)) {
16275 +                       ath_print(common, ATH_DBG_EEPROM,
16276 +                                 "unable to read eeprom region\n");
16277 +                       return false;
16278 +               }
16279 +               *svalue = le16_to_cpu(*svalue);
16280 +               buffer[i] = value[byteAddr];
16281 +       }
16282 +
16283 +       return true;
16284 +}
16285 +
16286 +static bool ar9300_read_eeprom(struct ath_hw *ah,
16287 +                              int address, u8 * buffer, int many)
16288 +{
16289 +       int it;
16290 +
16291 +       for (it = 0; it < many; it++)
16292 +               if (!ar9300_hw_read_eeprom(ah, (address - it), (buffer + it), 1))
16293 +                       return false;
16294 +       return true;
16295 +}
16296 +
16297 +static void ar9300_comp_hdr_unpack(u8 * best, int *code, int *reference,
16298 +                                  int *length, int *major, int *minor)
16299 +{
16300 +       unsigned long value[4];
16301 +
16302 +       value[0] = best[0];
16303 +       value[1] = best[1];
16304 +       value[2] = best[2];
16305 +       value[3] = best[3];
16306 +       *code = ((value[0] >> 5) & 0x0007);
16307 +       *reference = (value[0] & 0x001f) | ((value[1] >> 2) & 0x0020);
16308 +       *length = ((value[1] << 4) & 0x07f0) | ((value[2] >> 4) & 0x000f);
16309 +       *major = (value[2] & 0x000f);
16310 +       *minor = (value[3] & 0x00ff);
16311 +}
16312 +
16313 +static u16 ar9300_comp_cksum(u8 * data, int dsize)
16314 +{
16315 +       int it, checksum = 0;
16316 +
16317 +       for (it = 0; it < dsize; it++) {
16318 +               checksum += data[it];
16319 +               checksum &= 0xffff;
16320 +       }
16321 +
16322 +       return checksum;
16323 +}
16324 +
16325 +static bool ar9300_uncompress_block(struct ath_hw *ah,
16326 +                                   u8 *mptr,
16327 +                                   int mdataSize,
16328 +                                   u8 *block,
16329 +                                   int size)
16330 +{
16331 +       int it;
16332 +       int spot;
16333 +       int offset;
16334 +       int length;
16335 +       struct ath_common *common = ath9k_hw_common(ah);
16336 +
16337 +       spot = 0;
16338 +
16339 +       for (it = 0; it < size; it += (length+2)) {
16340 +               offset = block[it];
16341 +               offset &= 0xff;
16342 +               spot += offset;
16343 +               length = block[it+1];
16344 +               length &= 0xff;
16345 +
16346 +               if (length > 0 && spot >= 0 && spot+length < mdataSize) {
16347 +                       ath_print(common, ATH_DBG_EEPROM,
16348 +                                 "Restore at %d: spot=%d offset=%d length=%d\n",
16349 +                                  it, spot, offset, length);
16350 +                       memcpy(&mptr[spot],&block[it+2],length);
16351 +                       spot += length;
16352 +               } else if (length > 0) {
16353 +                       ath_print(common, ATH_DBG_EEPROM,
16354 +                                 "Bad restore at %d: spot=%d offset=%d length=%d\n",
16355 +                                 it, spot, offset, length);
16356 +                       return false;
16357 +               }
16358 +       }
16359 +       return true;
16360 +}
16361 +
16362 +static int ar9300_compress_decision(struct ath_hw *ah,
16363 +                                   int it,
16364 +                                   int code,
16365 +                                   int reference,
16366 +                                   u8 * mptr,
16367 +                                   u8 * word, int length, int mdata_size)
16368 +{
16369 +       struct ath_common *common = ath9k_hw_common(ah);
16370 +       u8 *dptr;
16371 +
16372 +       switch (code) {
16373 +       case _CompressNone:
16374 +               if (length != mdata_size) {
16375 +                       ath_print(common, ATH_DBG_EEPROM,
16376 +                                 "EEPROM structure size mismatch"
16377 +                                 "memory=%d eeprom=%d\n", mdata_size, length);
16378 +                       return -1;
16379 +               }
16380 +               memcpy(mptr, (u8 *) (word + COMP_HDR_LEN), length);
16381 +               ath_print(common, ATH_DBG_EEPROM, "restored eeprom %d:"
16382 +                         " uncompressed, length %d\n", it, length);
16383 +               break;
16384 +       case _CompressBlock:
16385 +               if (reference == 0) {
16386 +                       dptr = mptr;
16387 +               } else {
16388 +                       if (reference != 2) {
16389 +                               ath_print(common, ATH_DBG_EEPROM,
16390 +                                         "cant find reference eeprom"
16391 +                                         "struct %d\n", reference);
16392 +                               return -1;
16393 +                       }
16394 +                       memcpy(mptr, &ar9300_default, mdata_size);
16395 +               }
16396 +               ath_print(common, ATH_DBG_EEPROM,
16397 +                         "restore eeprom %d: block, reference %d,"
16398 +                         " length %d\n", it, reference, length);
16399 +               ar9300_uncompress_block(ah, mptr, mdata_size,
16400 +                                       (u8 *) (word + COMP_HDR_LEN), length);
16401 +               break;
16402 +       default:
16403 +               ath_print(common, ATH_DBG_EEPROM, "unknown compression"
16404 +                         " code %d\n", code);
16405 +               return -1;
16406 +       }
16407 +       return 0;
16408 +}
16409 +
16410 +/*
16411 + * Read the configuration data from the eeprom.
16412 + * The data can be put in any specified memory buffer.
16413 + *
16414 + * Returns -1 on error.
16415 + * Returns address of next memory location on success.
16416 + */
16417 +static int ar9300_eeprom_restore_internal(struct ath_hw *ah,
16418 +                                         u8 * mptr, int mdata_size)
16419 +{
16420 +#define MDEFAULT 15
16421 +#define MSTATE 100
16422 +       int cptr;
16423 +       u8 *word;
16424 +       int code;
16425 +       int reference, length, major, minor;
16426 +       int osize;
16427 +       int it;
16428 +       u16 checksum, mchecksum;
16429 +       struct ath_common *common = ath9k_hw_common(ah);
16430 +
16431 +       word = kzalloc(2048, GFP_KERNEL);
16432 +       if (!word)
16433 +               return -1;
16434 +
16435 +       memcpy(mptr, &ar9300_default, mdata_size);
16436 +
16437 +       cptr = AR9300_BASE_ADDR;
16438 +       for (it = 0; it < MSTATE; it++) {
16439 +               if (!ar9300_read_eeprom(ah, cptr, word, COMP_HDR_LEN))
16440 +                       goto fail;
16441 +
16442 +               if ((word[0] == 0 && word[1] == 0 && word[2] == 0 &&
16443 +                    word[3] == 0) || (word[0] == 0xff && word[1] == 0xff
16444 +                                      && word[2] == 0xff && word[3] == 0xff))
16445 +                       break;
16446 +
16447 +               ar9300_comp_hdr_unpack(word, &code, &reference,
16448 +                                      &length, &major, &minor);
16449 +               ath_print(common, ATH_DBG_EEPROM,
16450 +                         "Found block at %x: code=%d ref=%d"
16451 +                         "length=%d major=%d minor=%d\n", cptr, code,
16452 +                         reference, length, major, minor);
16453 +               if (length >= 1024) {
16454 +                       ath_print(common, ATH_DBG_EEPROM,
16455 +                                 "Skipping bad header\n");
16456 +                       cptr -= COMP_HDR_LEN;
16457 +                       continue;
16458 +               }
16459 +
16460 +               osize = length;
16461 +               ar9300_read_eeprom(ah, cptr, word,
16462 +                                  COMP_HDR_LEN + osize + COMP_CKSUM_LEN);
16463 +               checksum = ar9300_comp_cksum(&word[COMP_HDR_LEN], length);
16464 +               mchecksum = word[COMP_HDR_LEN + osize] |
16465 +                   (word[COMP_HDR_LEN + osize + 1] << 8);
16466 +               ath_print(common, ATH_DBG_EEPROM,
16467 +                         "checksum %x %x\n", checksum, mchecksum);
16468 +               if (checksum == mchecksum) {
16469 +                       ar9300_compress_decision(ah, it, code, reference, mptr,
16470 +                                                word, length, mdata_size);
16471 +               } else {
16472 +                       ath_print(common, ATH_DBG_EEPROM,
16473 +                                 "skipping block with bad checksum\n");
16474 +               }
16475 +               cptr -= (COMP_HDR_LEN + osize + COMP_CKSUM_LEN);
16476 +       }
16477 +
16478 +       kfree(word);
16479 +       return cptr;
16480 +
16481 +fail:
16482 +       kfree(word);
16483 +       return -1;
16484 +}
16485 +
16486 +/*
16487 + * Restore the configuration structure by reading the eeprom.
16488 + * This function destroys any existing in-memory structure
16489 + * content.
16490 + */
16491 +static bool ath9k_hw_ar9300_fill_eeprom(struct ath_hw *ah)
16492 +{
16493 +       u8 *mptr = NULL;
16494 +       int mdata_size;
16495 +
16496 +       mptr = (u8 *) & ah->eeprom.ar9300_eep;
16497 +       mdata_size = sizeof(struct ar9300_eeprom);
16498 +
16499 +       if (mptr && mdata_size > 0) {
16500 +               /* At this point, mptr points to the eeprom data structure
16501 +                * in it's "default" state. If this is big endian, swap the
16502 +                * data structures back to "little endian"
16503 +                */
16504 +               /* First swap, default to Little Endian */
16505 +#ifdef __BIG_ENDIAN
16506 +               ar9300_swap_eeprom((struct ar9300_eeprom *)mptr);
16507 +#endif
16508 +               if (ar9300_eeprom_restore_internal(ah, mptr, mdata_size) >= 0)
16509 +                       return true;
16510 +
16511 +               /* Second Swap, back to Big Endian */
16512 +#ifdef __BIG_ENDIAN
16513 +               ar9300_swap_eeprom((struct ar9300_eeprom *)mptr);
16514 +#endif
16515 +       }
16516 +       return false;
16517 +}
16518 +
16519 +/* XXX: review hardware docs */
16520 +static int ath9k_hw_ar9300_get_eeprom_ver(struct ath_hw *ah)
16521 +{
16522 +       return ah->eeprom.ar9300_eep.eepromVersion;
16523 +}
16524 +
16525 +/* XXX: could be read from the eepromVersion, not sure yet */
16526 +static int ath9k_hw_ar9300_get_eeprom_rev(struct ath_hw *ah)
16527 +{
16528 +       return 0;
16529 +}
16530 +
16531 +static u8 ath9k_hw_ar9300_get_num_ant_config(struct ath_hw *ah,
16532 +                                            enum ieee80211_band freq_band)
16533 +{
16534 +       return 1;
16535 +}
16536 +
16537 +static u16 ath9k_hw_ar9300_get_eeprom_antenna_cfg(struct ath_hw *ah,
16538 +                                                 struct ath9k_channel *chan)
16539 +{
16540 +       return -EINVAL;
16541 +}
16542 +
16543 +static s32 ar9003_hw_xpa_bias_level_get(struct ath_hw *ah, bool is2ghz)
16544 +{
16545 +       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
16546 +
16547 +       if (is2ghz)
16548 +               return eep->modalHeader2G.xpaBiasLvl;
16549 +       else
16550 +               return eep->modalHeader5G.xpaBiasLvl;
16551 +}
16552 +
16553 +static void ar9003_hw_xpa_bias_level_apply(struct ath_hw *ah, bool is2ghz)
16554 +{
16555 +       int bias = ar9003_hw_xpa_bias_level_get(ah, is2ghz);
16556 +       REG_RMW_FIELD(ah, AR_CH0_TOP, AR_CH0_TOP_XPABIASLVL, (bias & 0x3));
16557 +       REG_RMW_FIELD(ah, AR_CH0_THERM, AR_CH0_THERM_SPARE,
16558 +                     ((bias >> 2) & 0x3));
16559 +}
16560 +
16561 +static u32 ar9003_hw_ant_ctrl_common_get(struct ath_hw *ah, bool is2ghz)
16562 +{
16563 +       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
16564 +
16565 +       if (is2ghz)
16566 +               return eep->modalHeader2G.antCtrlCommon;
16567 +        else
16568 +               return eep->modalHeader5G.antCtrlCommon;
16569 +}
16570 +
16571 +static u32 ar9003_hw_ant_ctrl_common_2_get(struct ath_hw *ah, bool is2ghz)
16572 +{
16573 +       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
16574 +
16575 +       if (is2ghz)
16576 +               return eep->modalHeader2G.antCtrlCommon2;
16577 +       else
16578 +               return eep->modalHeader5G.antCtrlCommon2;
16579 +}
16580 +
16581 +static u16 ar9003_hw_ant_ctrl_chain_get(struct ath_hw *ah, int chain, bool is2ghz)
16582 +{
16583 +       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
16584 +
16585 +       if (chain >= 0 && chain < AR9300_MAX_CHAINS) {
16586 +               if (is2ghz)
16587 +                       return eep->modalHeader2G.antCtrlChain[chain];
16588 +                else
16589 +                       return eep->modalHeader5G.antCtrlChain[chain];
16590 +       }
16591 +
16592 +        return 0;
16593 +}
16594 +
16595 +static void ar9003_hw_ant_ctrl_apply(struct ath_hw *ah, bool is2ghz)
16596 +{
16597 +       u32 value = ar9003_hw_ant_ctrl_common_get(ah, is2ghz);
16598 +       REG_RMW_FIELD(ah, AR_PHY_SWITCH_COM, AR_SWITCH_TABLE_COM_ALL, value);
16599 +
16600 +       value = ar9003_hw_ant_ctrl_common_2_get(ah, is2ghz);
16601 +       REG_RMW_FIELD(ah, AR_PHY_SWITCH_COM_2, AR_SWITCH_TABLE_COM2_ALL, value);
16602 +
16603 +       value = ar9003_hw_ant_ctrl_chain_get(ah, 0, is2ghz);
16604 +       REG_RMW_FIELD(ah, AR_PHY_SWITCH_CHAIN_0, AR_SWITCH_TABLE_ALL, value);
16605 +
16606 +       value = ar9003_hw_ant_ctrl_chain_get(ah, 1, is2ghz);
16607 +       REG_RMW_FIELD(ah, AR_PHY_SWITCH_CHAIN_1, AR_SWITCH_TABLE_ALL, value);
16608 +
16609 +       value = ar9003_hw_ant_ctrl_chain_get(ah, 2, is2ghz);
16610 +       REG_RMW_FIELD(ah, AR_PHY_SWITCH_CHAIN_2, AR_SWITCH_TABLE_ALL, value);
16611 +}
16612 +
16613 +static void ar9003_hw_drive_strength_apply(struct ath_hw *ah)
16614 +{
16615 +       int drive_strength;
16616 +       unsigned long reg;
16617 +
16618 +       drive_strength = ath9k_hw_ar9300_get_eeprom(ah, EEP_DRIVE_STRENGTH);
16619 +
16620 +       if (!drive_strength)
16621 +               return;
16622 +
16623 +       reg = REG_READ(ah, AR_PHY_65NM_CH0_BIAS1);
16624 +       reg &= ~0x00ffffc0;
16625 +       reg |= 0x5 << 21;
16626 +       reg |= 0x5 << 18;
16627 +       reg |= 0x5 << 15;
16628 +       reg |= 0x5 << 12;
16629 +       reg |= 0x5 << 9;
16630 +       reg |= 0x5 << 6;
16631 +       REG_WRITE(ah, AR_PHY_65NM_CH0_BIAS1, reg);
16632 +
16633 +       reg = REG_READ(ah, AR_PHY_65NM_CH0_BIAS2);
16634 +       reg &= ~0xffffffe0;
16635 +       reg |= 0x5 << 29;
16636 +       reg |= 0x5 << 26;
16637 +       reg |= 0x5 << 23;
16638 +       reg |= 0x5 << 20;
16639 +       reg |= 0x5 << 17;
16640 +       reg |= 0x5 << 14;
16641 +       reg |= 0x5 << 11;
16642 +       reg |= 0x5 << 8;
16643 +       reg |= 0x5 << 5;
16644 +       REG_WRITE(ah, AR_PHY_65NM_CH0_BIAS2, reg);
16645 +
16646 +       reg = REG_READ(ah, AR_PHY_65NM_CH0_BIAS4);
16647 +       reg &= ~0xff800000;
16648 +       reg |= 0x5 << 29;
16649 +       reg |= 0x5 << 26;
16650 +       reg |= 0x5 << 23;
16651 +       REG_WRITE(ah, AR_PHY_65NM_CH0_BIAS4, reg);
16652 +}
16653 +
16654 +static void ar9003_hw_internal_regulator_apply(struct ath_hw *ah)
16655 +{
16656 +       int internal_regulator =
16657 +               ath9k_hw_ar9300_get_eeprom(ah, EEP_INTERNAL_REGULATOR);
16658 +
16659 +       if (internal_regulator) {
16660 +               /* Internal regulator is ON. Write swreg register. */
16661 +               int swreg = ath9k_hw_ar9300_get_eeprom(ah, EEP_SWREG);
16662 +               REG_WRITE(ah, AR_RTC_REG_CONTROL1,
16663 +               REG_READ(ah, AR_RTC_REG_CONTROL1) &
16664 +                        (~AR_RTC_REG_CONTROL1_SWREG_PROGRAM));
16665 +               REG_WRITE(ah, AR_RTC_REG_CONTROL0, swreg);
16666 +               /* Set REG_CONTROL1.SWREG_PROGRAM */
16667 +               REG_WRITE(ah, AR_RTC_REG_CONTROL1,
16668 +                         REG_READ(ah,
16669 +                                  AR_RTC_REG_CONTROL1) |
16670 +                                  AR_RTC_REG_CONTROL1_SWREG_PROGRAM);
16671 +       } else {
16672 +               REG_WRITE(ah, AR_RTC_SLEEP_CLK,
16673 +                         (REG_READ(ah,
16674 +                                   AR_RTC_SLEEP_CLK) |
16675 +                                   AR_RTC_FORCE_SWREG_PRD));
16676 +       }
16677 +}
16678 +
16679 +static void ath9k_hw_ar9300_set_board_values(struct ath_hw *ah,
16680 +                                            struct ath9k_channel *chan)
16681 +{
16682 +       ar9003_hw_xpa_bias_level_apply(ah, IS_CHAN_2GHZ(chan));
16683 +       ar9003_hw_ant_ctrl_apply(ah, IS_CHAN_2GHZ(chan));
16684 +       ar9003_hw_drive_strength_apply(ah);
16685 +       ar9003_hw_internal_regulator_apply(ah);
16686 +}
16687 +
16688 +static void ath9k_hw_ar9300_set_addac(struct ath_hw *ah,
16689 +                                     struct ath9k_channel *chan)
16690 +{
16691 +}
16692 +
16693 +/*
16694 + * Returns the interpolated y value corresponding to the specified x value
16695 + * from the np ordered pairs of data (px,py).
16696 + * The pairs do not have to be in any order.
16697 + * If the specified x value is less than any of the px,
16698 + * the returned y value is equal to the py for the lowest px.
16699 + * If the specified x value is greater than any of the px,
16700 + * the returned y value is equal to the py for the highest px.
16701 + */
16702 +static int ar9003_hw_power_interpolate(int32_t x,
16703 +                                      int32_t * px, int32_t * py, u_int16_t np)
16704 +{
16705 +       int ip = 0;
16706 +       int lx = 0, ly = 0, lhave = 0;
16707 +       int hx = 0, hy = 0, hhave = 0;
16708 +       int dx = 0;
16709 +       int y = 0;
16710 +
16711 +       lhave = 0;
16712 +       hhave = 0;
16713 +
16714 +       /* identify best lower and higher x calibration measurement */
16715 +       for (ip = 0; ip < np; ip++) {
16716 +               dx = x - px[ip];
16717 +
16718 +               /* this measurement is higher than our desired x */
16719 +               if (dx <= 0) {
16720 +                       if (!hhave || dx > (x - hx)) {
16721 +                               /* new best higher x measurement */
16722 +                               hx = px[ip];
16723 +                               hy = py[ip];
16724 +                               hhave = 1;
16725 +                       }
16726 +               }
16727 +               /* this measurement is lower than our desired x */
16728 +               if (dx >= 0) {
16729 +                       if (!lhave || dx < (x - lx)) {
16730 +                               /* new best lower x measurement */
16731 +                               lx = px[ip];
16732 +                               ly = py[ip];
16733 +                               lhave = 1;
16734 +                       }
16735 +               }
16736 +       }
16737 +
16738 +       /* the low x is good */
16739 +       if (lhave) {
16740 +               /* so is the high x */
16741 +               if (hhave) {
16742 +                       /* they're the same, so just pick one */
16743 +                       if (hx == lx)
16744 +                               y = ly;
16745 +                       else    /* interpolate  */
16746 +                               y = ly + (((x - lx) * (hy - ly)) / (hx - lx));
16747 +               } else          /* only low is good, use it */
16748 +                       y = ly;
16749 +       } else if (hhave)       /* only high is good, use it */
16750 +               y = hy;
16751 +       else                    /* nothing is good,this should never happen unless np=0, ???? */
16752 +               y = -(1 << 30);
16753 +       return y;
16754 +}
16755 +
16756 +static u8 ar9003_hw_eeprom_get_tgt_pwr(struct ath_hw *ah,
16757 +                                      u16 rateIndex, u16 freq, bool is2GHz)
16758 +{
16759 +       u16 numPiers, i;
16760 +       s32 targetPowerArray[AR9300_NUM_5G_20_TARGET_POWERS];
16761 +       s32 freqArray[AR9300_NUM_5G_20_TARGET_POWERS];
16762 +       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
16763 +       struct cal_tgt_pow_legacy *pEepromTargetPwr;
16764 +       u8 *pFreqBin;
16765 +
16766 +       if (is2GHz) {
16767 +               numPiers = AR9300_NUM_5G_20_TARGET_POWERS;
16768 +               pEepromTargetPwr = eep->calTargetPower2G;
16769 +               pFreqBin = eep->calTarget_freqbin_2G;
16770 +       } else {
16771 +               numPiers = AR9300_NUM_5G_20_TARGET_POWERS;
16772 +               pEepromTargetPwr = eep->calTargetPower5G;
16773 +               pFreqBin = eep->calTarget_freqbin_5G;
16774 +       }
16775 +
16776 +       /*
16777 +        * create array of channels and targetpower from
16778 +        * targetpower piers stored on eeprom
16779 +        */
16780 +       for (i = 0; i < numPiers; i++) {
16781 +               freqArray[i] = FBIN2FREQ(pFreqBin[i], is2GHz);
16782 +               targetPowerArray[i] = pEepromTargetPwr[i].tPow2x[rateIndex];
16783 +       }
16784 +
16785 +       /* interpolate to get target power for given frequency */
16786 +       return ((u8) ar9003_hw_power_interpolate((s32) freq,
16787 +                                                freqArray,
16788 +                                                targetPowerArray, numPiers));
16789 +}
16790 +
16791 +static u8 ar9003_hw_eeprom_get_ht20_tgt_pwr(struct ath_hw *ah,
16792 +                                           u16 rateIndex,
16793 +                                           u16 freq, bool is2GHz)
16794 +{
16795 +       u16 numPiers, i;
16796 +       s32 targetPowerArray[AR9300_NUM_5G_20_TARGET_POWERS];
16797 +       s32 freqArray[AR9300_NUM_5G_20_TARGET_POWERS];
16798 +       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
16799 +       struct cal_tgt_pow_ht *pEepromTargetPwr;
16800 +       u8 *pFreqBin;
16801 +
16802 +       if (is2GHz) {
16803 +               numPiers = AR9300_NUM_5G_20_TARGET_POWERS;
16804 +               pEepromTargetPwr = eep->calTargetPower2GHT20;
16805 +               pFreqBin = eep->calTarget_freqbin_2GHT20;
16806 +       } else {
16807 +               numPiers = AR9300_NUM_5G_20_TARGET_POWERS;
16808 +               pEepromTargetPwr = eep->calTargetPower5GHT20;
16809 +               pFreqBin = eep->calTarget_freqbin_5GHT20;
16810 +       }
16811 +
16812 +       /*
16813 +        * create array of channels and targetpower
16814 +        * from targetpower piers stored on eeprom
16815 +        */
16816 +       for (i = 0; i < numPiers; i++) {
16817 +               freqArray[i] = FBIN2FREQ(pFreqBin[i], is2GHz);
16818 +               targetPowerArray[i] = pEepromTargetPwr[i].tPow2x[rateIndex];
16819 +       }
16820 +
16821 +       /* interpolate to get target power for given frequency */
16822 +       return ((u8) ar9003_hw_power_interpolate((s32) freq,
16823 +                                                freqArray,
16824 +                                                targetPowerArray, numPiers));
16825 +}
16826 +
16827 +static u8 ar9003_hw_eeprom_get_ht40_tgt_pwr(struct ath_hw *ah,
16828 +                                           u16 rateIndex,
16829 +                                           u16 freq, bool is2GHz)
16830 +{
16831 +       u16 numPiers, i;
16832 +       s32 targetPowerArray[AR9300_NUM_5G_40_TARGET_POWERS];
16833 +       s32 freqArray[AR9300_NUM_5G_40_TARGET_POWERS];
16834 +       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
16835 +       struct cal_tgt_pow_ht *pEepromTargetPwr;
16836 +       u8 *pFreqBin;
16837 +
16838 +       if (is2GHz) {
16839 +               numPiers = AR9300_NUM_2G_40_TARGET_POWERS;
16840 +               pEepromTargetPwr = eep->calTargetPower2GHT40;
16841 +               pFreqBin = eep->calTarget_freqbin_2GHT40;
16842 +       } else {
16843 +               numPiers = AR9300_NUM_5G_40_TARGET_POWERS;
16844 +               pEepromTargetPwr = eep->calTargetPower5GHT40;
16845 +               pFreqBin = eep->calTarget_freqbin_5GHT40;
16846 +       }
16847 +
16848 +       /*
16849 +        * create array of channels and targetpower from
16850 +        * targetpower piers stored on eeprom
16851 +        */
16852 +       for (i = 0; i < numPiers; i++) {
16853 +               freqArray[i] = FBIN2FREQ(pFreqBin[i], is2GHz);
16854 +               targetPowerArray[i] = pEepromTargetPwr[i].tPow2x[rateIndex];
16855 +       }
16856 +
16857 +       /* interpolate to get target power for given frequency */
16858 +       return ((u8) ar9003_hw_power_interpolate((s32) freq,
16859 +                                                freqArray,
16860 +                                                targetPowerArray, numPiers));
16861 +}
16862 +
16863 +static u8 ar9003_hw_eeprom_get_cck_tgt_pwr(struct ath_hw *ah,
16864 +                                          u16 rateIndex, u16 freq)
16865 +{
16866 +       u16 numPiers = AR9300_NUM_2G_CCK_TARGET_POWERS, i;
16867 +       s32 targetPowerArray[AR9300_NUM_2G_CCK_TARGET_POWERS];
16868 +       s32 freqArray[AR9300_NUM_2G_CCK_TARGET_POWERS];
16869 +       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
16870 +       struct cal_tgt_pow_legacy *pEepromTargetPwr = eep->calTargetPowerCck;
16871 +       u8 *pFreqBin = eep->calTarget_freqbin_Cck;
16872 +
16873 +       /*
16874 +        * create array of channels and targetpower from
16875 +        * targetpower piers stored on eeprom
16876 +        */
16877 +       for (i = 0; i < numPiers; i++) {
16878 +               freqArray[i] = FBIN2FREQ(pFreqBin[i], 1);
16879 +               targetPowerArray[i] = pEepromTargetPwr[i].tPow2x[rateIndex];
16880 +       }
16881 +
16882 +       /* interpolate to get target power for given frequency */
16883 +       return ((u8) ar9003_hw_power_interpolate((s32) freq,
16884 +                                                freqArray,
16885 +                                                targetPowerArray, numPiers));
16886 +}
16887 +
16888 +/* Set tx power registers to array of values passed in */
16889 +static int ar9003_hw_tx_power_regwrite(struct ath_hw *ah, u8 * pPwrArray)
16890 +{
16891 +#define POW_SM(_r, _s)     (((_r) & 0x3f) << (_s))
16892 +       /* make sure forced gain is not set */
16893 +       REG_WRITE(ah, 0xa458, 0);
16894 +
16895 +       /* Write the OFDM power per rate set */
16896 +
16897 +       /* 6 (LSB), 9, 12, 18 (MSB) */
16898 +       REG_WRITE(ah, 0xa3c0,
16899 +                 POW_SM(pPwrArray[ALL_TARGET_LEGACY_6_24], 24) |
16900 +                 POW_SM(pPwrArray[ALL_TARGET_LEGACY_6_24], 16) |
16901 +                 POW_SM(pPwrArray[ALL_TARGET_LEGACY_6_24], 8) |
16902 +                 POW_SM(pPwrArray[ALL_TARGET_LEGACY_6_24], 0));
16903 +
16904 +       /* 24 (LSB), 36, 48, 54 (MSB) */
16905 +       REG_WRITE(ah, 0xa3c4,
16906 +                 POW_SM(pPwrArray[ALL_TARGET_LEGACY_54], 24) |
16907 +                 POW_SM(pPwrArray[ALL_TARGET_LEGACY_48], 16) |
16908 +                 POW_SM(pPwrArray[ALL_TARGET_LEGACY_36], 8) |
16909 +                 POW_SM(pPwrArray[ALL_TARGET_LEGACY_6_24], 0));
16910 +
16911 +       /* Write the CCK power per rate set */
16912 +
16913 +       /* 1L (LSB), reserved, 2L, 2S (MSB) */
16914 +       REG_WRITE(ah, 0xa3c8,
16915 +                 POW_SM(pPwrArray[ALL_TARGET_LEGACY_1L_5L], 24) |
16916 +                 POW_SM(pPwrArray[ALL_TARGET_LEGACY_1L_5L], 16) |
16917 +                 // POW_SM(txPowerTimes2,  8) | /* this is reserved for AR9003 */
16918 +                 POW_SM(pPwrArray[ALL_TARGET_LEGACY_1L_5L], 0));
16919 +
16920 +       /* 5.5L (LSB), 5.5S, 11L, 11S (MSB) */
16921 +       REG_WRITE(ah, 0xa3cc,
16922 +                 POW_SM(pPwrArray[ALL_TARGET_LEGACY_11S], 24) |
16923 +                 POW_SM(pPwrArray[ALL_TARGET_LEGACY_11L], 16) |
16924 +                 POW_SM(pPwrArray[ALL_TARGET_LEGACY_5S], 8) |
16925 +                 POW_SM(pPwrArray[ALL_TARGET_LEGACY_1L_5L], 0)
16926 +           );
16927 +
16928 +       /* Write the HT20 power per rate set */
16929 +
16930 +       /* 0/8/16 (LSB), 1-3/9-11/17-19, 4, 5 (MSB) */
16931 +       REG_WRITE(ah, 0xa3d0,
16932 +                 POW_SM(pPwrArray[ALL_TARGET_HT20_5], 24) |
16933 +                 POW_SM(pPwrArray[ALL_TARGET_HT20_4], 16) |
16934 +                 POW_SM(pPwrArray[ALL_TARGET_HT20_1_3_9_11_17_19], 8) |
16935 +                 POW_SM(pPwrArray[ALL_TARGET_HT20_0_8_16], 0)
16936 +           );
16937 +
16938 +       /* 6 (LSB), 7, 12, 13 (MSB) */
16939 +       REG_WRITE(ah, 0xa3d4,
16940 +                 POW_SM(pPwrArray[ALL_TARGET_HT20_13], 24) |
16941 +                 POW_SM(pPwrArray[ALL_TARGET_HT20_12], 16) |
16942 +                 POW_SM(pPwrArray[ALL_TARGET_HT20_7], 8) |
16943 +                 POW_SM(pPwrArray[ALL_TARGET_HT20_6], 0)
16944 +           );
16945 +
16946 +       /* 14 (LSB), 15, 20, 21 */
16947 +       REG_WRITE(ah, 0xa3e4,
16948 +                 POW_SM(pPwrArray[ALL_TARGET_HT20_21], 24) |
16949 +                 POW_SM(pPwrArray[ALL_TARGET_HT20_20], 16) |
16950 +                 POW_SM(pPwrArray[ALL_TARGET_HT20_15], 8) |
16951 +                 POW_SM(pPwrArray[ALL_TARGET_HT20_14], 0)
16952 +           );
16953 +
16954 +       /* Mixed HT20 and HT40 rates */
16955 +
16956 +       /* HT20 22 (LSB), HT20 23, HT40 22, HT40 23 (MSB) */
16957 +       REG_WRITE(ah, 0xa3e8,
16958 +                 POW_SM(pPwrArray[ALL_TARGET_HT40_23], 24) |
16959 +                 POW_SM(pPwrArray[ALL_TARGET_HT40_22], 16) |
16960 +                 POW_SM(pPwrArray[ALL_TARGET_HT20_23], 8) |
16961 +                 POW_SM(pPwrArray[ALL_TARGET_HT20_22], 0)
16962 +           );
16963 +
16964 +       /* Write the HT40 power per rate set */
16965 +       // correct PAR difference between HT40 and HT20/LEGACY
16966 +       /* 0/8/16 (LSB), 1-3/9-11/17-19, 4, 5 (MSB) */
16967 +       REG_WRITE(ah, 0xa3d8,
16968 +                 POW_SM(pPwrArray[ALL_TARGET_HT40_5], 24) |
16969 +                 POW_SM(pPwrArray[ALL_TARGET_HT40_4], 16) |
16970 +                 POW_SM(pPwrArray[ALL_TARGET_HT40_1_3_9_11_17_19], 8) |
16971 +                 POW_SM(pPwrArray[ALL_TARGET_HT40_0_8_16], 0)
16972 +           );
16973 +
16974 +       /* 6 (LSB), 7, 12, 13 (MSB) */
16975 +       REG_WRITE(ah, 0xa3dc,
16976 +                 POW_SM(pPwrArray[ALL_TARGET_HT40_13], 24) |
16977 +                 POW_SM(pPwrArray[ALL_TARGET_HT40_12], 16) |
16978 +                 POW_SM(pPwrArray[ALL_TARGET_HT40_7], 8) |
16979 +                 POW_SM(pPwrArray[ALL_TARGET_HT40_6], 0)
16980 +           );
16981 +
16982 +       /* 14 (LSB), 15, 20, 21 */
16983 +       REG_WRITE(ah, 0xa3ec,
16984 +                 POW_SM(pPwrArray[ALL_TARGET_HT40_21], 24) |
16985 +                 POW_SM(pPwrArray[ALL_TARGET_HT40_20], 16) |
16986 +                 POW_SM(pPwrArray[ALL_TARGET_HT40_15], 8) |
16987 +                 POW_SM(pPwrArray[ALL_TARGET_HT40_14], 0)
16988 +           );
16989 +
16990 +       return 0;
16991 +#undef POW_SM
16992 +}
16993 +
16994 +static void ar9003_hw_set_target_power_eeprom(struct ath_hw *ah, u16 freq)
16995 +{
16996 +       u8 targetPowerValT2[ar9300RateSize];
16997 +       /* XXX: hard code for now, need to get from eeprom struct */
16998 +       u8 ht40PowerIncForPdadc = 0;
16999 +       bool is2GHz = false;
17000 +       unsigned int i = 0;
17001 +       struct ath_common *common = ath9k_hw_common(ah);
17002 +
17003 +       if (freq < 4000)
17004 +               is2GHz = true;
17005 +
17006 +       targetPowerValT2[ALL_TARGET_LEGACY_6_24] =
17007 +           ar9003_hw_eeprom_get_tgt_pwr(ah, LEGACY_TARGET_RATE_6_24, freq,
17008 +                                        is2GHz);
17009 +       targetPowerValT2[ALL_TARGET_LEGACY_36] =
17010 +           ar9003_hw_eeprom_get_tgt_pwr(ah, LEGACY_TARGET_RATE_36, freq,
17011 +                                        is2GHz);
17012 +       targetPowerValT2[ALL_TARGET_LEGACY_48] =
17013 +           ar9003_hw_eeprom_get_tgt_pwr(ah, LEGACY_TARGET_RATE_48, freq,
17014 +                                        is2GHz);
17015 +       targetPowerValT2[ALL_TARGET_LEGACY_54] =
17016 +           ar9003_hw_eeprom_get_tgt_pwr(ah, LEGACY_TARGET_RATE_54, freq,
17017 +                                        is2GHz);
17018 +       targetPowerValT2[ALL_TARGET_LEGACY_1L_5L] =
17019 +           ar9003_hw_eeprom_get_cck_tgt_pwr(ah, LEGACY_TARGET_RATE_1L_5L,
17020 +                                            freq);
17021 +       targetPowerValT2[ALL_TARGET_LEGACY_5S] =
17022 +           ar9003_hw_eeprom_get_cck_tgt_pwr(ah, LEGACY_TARGET_RATE_5S, freq);
17023 +       targetPowerValT2[ALL_TARGET_LEGACY_11L] =
17024 +           ar9003_hw_eeprom_get_cck_tgt_pwr(ah, LEGACY_TARGET_RATE_11L, freq);
17025 +       targetPowerValT2[ALL_TARGET_LEGACY_11S] =
17026 +           ar9003_hw_eeprom_get_cck_tgt_pwr(ah, LEGACY_TARGET_RATE_11S, freq);
17027 +       targetPowerValT2[ALL_TARGET_HT20_0_8_16] =
17028 +           ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_0_8_16, freq,
17029 +                                             is2GHz);
17030 +       targetPowerValT2[ALL_TARGET_HT20_1_3_9_11_17_19] =
17031 +           ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_1_3_9_11_17_19,
17032 +                                             freq, is2GHz);
17033 +       targetPowerValT2[ALL_TARGET_HT20_4] =
17034 +           ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_4, freq,
17035 +                                             is2GHz);
17036 +       targetPowerValT2[ALL_TARGET_HT20_5] =
17037 +           ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_5, freq,
17038 +                                             is2GHz);
17039 +       targetPowerValT2[ALL_TARGET_HT20_6] =
17040 +           ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_6, freq,
17041 +                                             is2GHz);
17042 +       targetPowerValT2[ALL_TARGET_HT20_7] =
17043 +           ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_7, freq,
17044 +                                             is2GHz);
17045 +       targetPowerValT2[ALL_TARGET_HT20_12] =
17046 +           ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_12, freq,
17047 +                                             is2GHz);
17048 +       targetPowerValT2[ALL_TARGET_HT20_13] =
17049 +           ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_13, freq,
17050 +                                             is2GHz);
17051 +       targetPowerValT2[ALL_TARGET_HT20_14] =
17052 +           ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_14, freq,
17053 +                                             is2GHz);
17054 +       targetPowerValT2[ALL_TARGET_HT20_15] =
17055 +           ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_15, freq,
17056 +                                             is2GHz);
17057 +       targetPowerValT2[ALL_TARGET_HT20_20] =
17058 +           ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_20, freq,
17059 +                                             is2GHz);
17060 +       targetPowerValT2[ALL_TARGET_HT20_21] =
17061 +           ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_21, freq,
17062 +                                             is2GHz);
17063 +       targetPowerValT2[ALL_TARGET_HT20_22] =
17064 +           ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_22, freq,
17065 +                                             is2GHz);
17066 +       targetPowerValT2[ALL_TARGET_HT20_23] =
17067 +           ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_23, freq,
17068 +                                             is2GHz);
17069 +       targetPowerValT2[ALL_TARGET_HT40_0_8_16] =
17070 +           ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_0_8_16, freq,
17071 +                                             is2GHz) + ht40PowerIncForPdadc;
17072 +       targetPowerValT2[ALL_TARGET_HT40_1_3_9_11_17_19] =
17073 +           ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_1_3_9_11_17_19,
17074 +                                             freq,
17075 +                                             is2GHz) + ht40PowerIncForPdadc;
17076 +       targetPowerValT2[ALL_TARGET_HT40_4] =
17077 +           ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_4, freq,
17078 +                                             is2GHz) + ht40PowerIncForPdadc;
17079 +       targetPowerValT2[ALL_TARGET_HT40_5] =
17080 +           ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_5, freq,
17081 +                                             is2GHz) + ht40PowerIncForPdadc;
17082 +       targetPowerValT2[ALL_TARGET_HT40_6] =
17083 +           ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_6, freq,
17084 +                                             is2GHz) + ht40PowerIncForPdadc;
17085 +       targetPowerValT2[ALL_TARGET_HT40_7] =
17086 +           ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_7, freq,
17087 +                                             is2GHz) + ht40PowerIncForPdadc;
17088 +       targetPowerValT2[ALL_TARGET_HT40_12] =
17089 +           ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_12, freq,
17090 +                                             is2GHz) + ht40PowerIncForPdadc;
17091 +       targetPowerValT2[ALL_TARGET_HT40_13] =
17092 +           ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_13, freq,
17093 +                                             is2GHz) + ht40PowerIncForPdadc;
17094 +       targetPowerValT2[ALL_TARGET_HT40_14] =
17095 +           ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_14, freq,
17096 +                                             is2GHz) + ht40PowerIncForPdadc;
17097 +       targetPowerValT2[ALL_TARGET_HT40_15] =
17098 +           ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_15, freq,
17099 +                                             is2GHz) + ht40PowerIncForPdadc;
17100 +       targetPowerValT2[ALL_TARGET_HT40_20] =
17101 +           ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_20, freq,
17102 +                                             is2GHz) + ht40PowerIncForPdadc;
17103 +       targetPowerValT2[ALL_TARGET_HT40_21] =
17104 +           ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_21, freq,
17105 +                                             is2GHz) + ht40PowerIncForPdadc;
17106 +       targetPowerValT2[ALL_TARGET_HT40_22] =
17107 +           ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_22, freq,
17108 +                                             is2GHz) + ht40PowerIncForPdadc;
17109 +       targetPowerValT2[ALL_TARGET_HT40_23] =
17110 +           ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_23, freq,
17111 +                                             is2GHz) + ht40PowerIncForPdadc;
17112 +
17113 +       while (i < ar9300RateSize) {
17114 +               ath_print(common, ATH_DBG_EEPROM,
17115 +                         "TPC[%02d] 0x%08x ", i, targetPowerValT2[i]);
17116 +               i++;
17117 +
17118 +               ath_print(common, ATH_DBG_EEPROM,
17119 +                         "TPC[%02d] 0x%08x ", i, targetPowerValT2[i]);
17120 +               i++;
17121 +
17122 +               ath_print(common, ATH_DBG_EEPROM,
17123 +                         "TPC[%02d] 0x%08x ", i, targetPowerValT2[i]);
17124 +               i++;
17125 +
17126 +               ath_print(common, ATH_DBG_EEPROM,
17127 +                         "TPC[%02d] 0x%08x \n", i, targetPowerValT2[i]);
17128 +               i++;
17129 +       }
17130 +
17131 +       /* Write target power array to registers */
17132 +       ar9003_hw_tx_power_regwrite(ah, targetPowerValT2);
17133 +}
17134 +
17135 +static int ar9003_hw_cal_pier_get(struct ath_hw *ah,
17136 +                                 int mode,
17137 +                                 int ipier,
17138 +                                 int ichain,
17139 +                                 int *pfrequency,
17140 +                                 int *pcorrection,
17141 +                                 int *ptemperature, int *pvoltage)
17142 +{
17143 +       u8 *pCalPier;
17144 +       struct ar9300_cal_data_per_freq_op_loop *pCalPierStruct;
17145 +       int is2GHz;
17146 +       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
17147 +       struct ath_common *common = ath9k_hw_common(ah);
17148 +
17149 +       if (ichain >= AR9300_MAX_CHAINS) {
17150 +               ath_print(common, ATH_DBG_EEPROM,
17151 +                         "Invalid chain index, must be less than %d\n",
17152 +                         AR9300_MAX_CHAINS);
17153 +               return -1;
17154 +       }
17155 +
17156 +       if (mode) {             /* 5GHz */
17157 +               if (ipier >= AR9300_NUM_5G_CAL_PIERS) {
17158 +                       ath_print(common, ATH_DBG_EEPROM,
17159 +                                 "Invalid 5GHz cal pier index, must be less than %d\n",
17160 +                                 AR9300_NUM_5G_CAL_PIERS);
17161 +                       return -1;
17162 +               }
17163 +               pCalPier = &(eep->calFreqPier5G[ipier]);
17164 +               pCalPierStruct = &(eep->calPierData5G[ichain][ipier]);
17165 +               is2GHz = 0;
17166 +       } else {
17167 +               if (ipier >= AR9300_NUM_2G_CAL_PIERS) {
17168 +                       ath_print(common, ATH_DBG_EEPROM,
17169 +                                 "Invalid 2GHz cal pier index, must "
17170 +                                 "be less than %d\n", AR9300_NUM_2G_CAL_PIERS);
17171 +                       return -1;
17172 +               }
17173 +
17174 +               pCalPier = &(eep->calFreqPier2G[ipier]);
17175 +               pCalPierStruct = &(eep->calPierData2G[ichain][ipier]);
17176 +               is2GHz = 1;
17177 +       }
17178 +
17179 +       *pfrequency = FBIN2FREQ(*pCalPier, is2GHz);
17180 +       *pcorrection = pCalPierStruct->refPower;
17181 +       *ptemperature = pCalPierStruct->tempMeas;
17182 +       *pvoltage = pCalPierStruct->voltMeas;
17183 +
17184 +       return 0;
17185 +}
17186 +
17187 +static int ar9003_hw_power_control_override(struct ath_hw *ah,
17188 +                                           int frequency,
17189 +                                           int *correction,
17190 +                                           int *voltage, int *temperature)
17191 +{
17192 +       int tempSlope = 0;
17193 +       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
17194 +
17195 +       REG_RMW(ah, AR_PHY_TPC_11_B0,
17196 +               (correction[0] << AR_PHY_TPC_OLPC_GAIN_DELTA_S),
17197 +               AR_PHY_TPC_OLPC_GAIN_DELTA);
17198 +       REG_RMW(ah, AR_PHY_TPC_11_B1,
17199 +               (correction[1] << AR_PHY_TPC_OLPC_GAIN_DELTA_S),
17200 +               AR_PHY_TPC_OLPC_GAIN_DELTA);
17201 +       REG_RMW(ah, AR_PHY_TPC_11_B2,
17202 +               (correction[2] << AR_PHY_TPC_OLPC_GAIN_DELTA_S),
17203 +               AR_PHY_TPC_OLPC_GAIN_DELTA);
17204 +
17205 +       /* enable open loop power control on chip */
17206 +       REG_RMW(ah, AR_PHY_TPC_6_B0,
17207 +               (3 << AR_PHY_TPC_6_ERROR_EST_MODE_S),
17208 +               AR_PHY_TPC_6_ERROR_EST_MODE);
17209 +       REG_RMW(ah, AR_PHY_TPC_6_B1,
17210 +               (3 << AR_PHY_TPC_6_ERROR_EST_MODE_S),
17211 +               AR_PHY_TPC_6_ERROR_EST_MODE);
17212 +       REG_RMW(ah, AR_PHY_TPC_6_B2,
17213 +               (3 << AR_PHY_TPC_6_ERROR_EST_MODE_S),
17214 +               AR_PHY_TPC_6_ERROR_EST_MODE);
17215 +
17216 +       /*
17217 +        * enable temperature compensation
17218 +        * Need to use register names
17219 +        */
17220 +       if (frequency < 4000)
17221 +               tempSlope = eep->modalHeader2G.tempSlope;
17222 +       else
17223 +               tempSlope = eep->modalHeader5G.tempSlope;
17224 +
17225 +       REG_RMW_FIELD(ah, AR_PHY_TPC_19, AR_PHY_TPC_19_ALPHA_THERM, tempSlope);
17226 +       REG_RMW_FIELD(ah, AR_PHY_TPC_18, AR_PHY_TPC_18_THERM_CAL_VALUE,
17227 +                     temperature[0]);
17228 +
17229 +       return 0;
17230 +}
17231 +
17232 +/* Apply the recorded correction values. */
17233 +static int ar9003_hw_calibration_apply(struct ath_hw *ah, int frequency)
17234 +{
17235 +       int ichain, ipier, npier;
17236 +       int mode;
17237 +       int lfrequency[AR9300_MAX_CHAINS],
17238 +           lcorrection[AR9300_MAX_CHAINS],
17239 +           ltemperature[AR9300_MAX_CHAINS], lvoltage[AR9300_MAX_CHAINS];
17240 +       int hfrequency[AR9300_MAX_CHAINS],
17241 +           hcorrection[AR9300_MAX_CHAINS],
17242 +           htemperature[AR9300_MAX_CHAINS], hvoltage[AR9300_MAX_CHAINS];
17243 +       int fdiff;
17244 +       int correction[AR9300_MAX_CHAINS],
17245 +           voltage[AR9300_MAX_CHAINS], temperature[AR9300_MAX_CHAINS];
17246 +       int pfrequency, pcorrection, ptemperature, pvoltage;
17247 +       struct ath_common *common = ath9k_hw_common(ah);
17248 +
17249 +       mode = (frequency >= 4000);
17250 +       if (mode)
17251 +               npier = AR9300_NUM_5G_CAL_PIERS;
17252 +       else
17253 +               npier = AR9300_NUM_2G_CAL_PIERS;
17254 +
17255 +       for (ichain = 0; ichain < AR9300_MAX_CHAINS; ichain++) {
17256 +               lfrequency[ichain] = 0;
17257 +               hfrequency[ichain] = 100000;
17258 +       }
17259 +       /* identify best lower and higher frequency calibration measurement */
17260 +       for (ichain = 0; ichain < AR9300_MAX_CHAINS; ichain++) {
17261 +               for (ipier = 0; ipier < npier; ipier++) {
17262 +                       if (!ar9003_hw_cal_pier_get(ah, mode, ipier, ichain,
17263 +                                                   &pfrequency, &pcorrection,
17264 +                                                   &ptemperature, &pvoltage)) {
17265 +                               fdiff = frequency - pfrequency;
17266 +
17267 +                               /*
17268 +                                * this measurement is higher than
17269 +                                * our desired frequency
17270 +                                */
17271 +                               if (fdiff <= 0) {
17272 +                                       if (hfrequency[ichain] <= 0 ||
17273 +                                           hfrequency[ichain] >= 100000 ||
17274 +                                           fdiff >
17275 +                                           (frequency - hfrequency[ichain])) {
17276 +                                               /* new best higher frequency measurement */
17277 +                                               hfrequency[ichain] = pfrequency;
17278 +                                               hcorrection[ichain] =
17279 +                                                   pcorrection;
17280 +                                               htemperature[ichain] =
17281 +                                                   ptemperature;
17282 +                                               hvoltage[ichain] = pvoltage;
17283 +                                       }
17284 +                               }
17285 +                               if (fdiff >= 0) {
17286 +                                       if (lfrequency[ichain] <= 0
17287 +                                           || fdiff <
17288 +                                           (frequency - lfrequency[ichain])) {
17289 +                                               /* new best lower frequency measurement */
17290 +                                               lfrequency[ichain] = pfrequency;
17291 +                                               lcorrection[ichain] =
17292 +                                                   pcorrection;
17293 +                                               ltemperature[ichain] =
17294 +                                                   ptemperature;
17295 +                                               lvoltage[ichain] = pvoltage;
17296 +                                       }
17297 +                               }
17298 +                       }
17299 +               }
17300 +       }
17301 +
17302 +       /* interpolate  */
17303 +       for (ichain = 0; ichain < AR9300_MAX_CHAINS; ichain++) {
17304 +               ath_print(common, ATH_DBG_EEPROM,
17305 +                         "ch=%d f=%d low=%d %d h=%d %d\n",
17306 +                         ichain, frequency, lfrequency[ichain],
17307 +                         lcorrection[ichain], hfrequency[ichain],
17308 +                         hcorrection[ichain]);
17309 +               /* they're the same, so just pick one */
17310 +               if (hfrequency[ichain] == lfrequency[ichain]) {
17311 +                       correction[ichain] = lcorrection[ichain];
17312 +                       voltage[ichain] = lvoltage[ichain];
17313 +                       temperature[ichain] = ltemperature[ichain];
17314 +               }
17315 +               /* the low frequency is good */
17316 +               else if (frequency - lfrequency[ichain] < 1000) {
17317 +                       /* so is the high frequency, interpolate */
17318 +                       if (hfrequency[ichain] - frequency < 1000) {
17319 +
17320 +                               correction[ichain] = lcorrection[ichain] +
17321 +                                   (((frequency - lfrequency[ichain]) *
17322 +                                     (hcorrection[ichain] -
17323 +                                      lcorrection[ichain])) /
17324 +                                    (hfrequency[ichain] - lfrequency[ichain]));
17325 +
17326 +                               temperature[ichain] = ltemperature[ichain] +
17327 +                                   (((frequency - lfrequency[ichain]) *
17328 +                                     (htemperature[ichain] -
17329 +                                      ltemperature[ichain])) /
17330 +                                    (hfrequency[ichain] - lfrequency[ichain]));
17331 +
17332 +                               voltage[ichain] =
17333 +                                   lvoltage[ichain] +
17334 +                                   (((frequency -
17335 +                                      lfrequency[ichain]) * (hvoltage[ichain] -
17336 +                                                             lvoltage[ichain]))
17337 +                                    / (hfrequency[ichain] -
17338 +                                       lfrequency[ichain]));
17339 +                       }
17340 +                       /* only low is good, use it */
17341 +                       else {
17342 +                               correction[ichain] = lcorrection[ichain];
17343 +                               temperature[ichain] = ltemperature[ichain];
17344 +                               voltage[ichain] = lvoltage[ichain];
17345 +                       }
17346 +               }
17347 +               /* only high is good, use it */
17348 +               else if (hfrequency[ichain] - frequency < 1000) {
17349 +                       correction[ichain] = hcorrection[ichain];
17350 +                       temperature[ichain] = htemperature[ichain];
17351 +                       voltage[ichain] = hvoltage[ichain];
17352 +               } else {        /* nothing is good, presume 0???? */
17353 +                       correction[ichain] = 0;
17354 +                       temperature[ichain] = 0;
17355 +                       voltage[ichain] = 0;
17356 +               }
17357 +       }
17358 +
17359 +       ar9003_hw_power_control_override(ah, frequency, correction, voltage,
17360 +                                        temperature);
17361 +
17362 +       ath_print(common, ATH_DBG_EEPROM,
17363 +                 "for frequency=%d, calibration correction = %d %d %d\n",
17364 +                 frequency, correction[0], correction[1], correction[2]);
17365 +
17366 +       return 0;
17367 +}
17368 +
17369 +static void ath9k_hw_ar9300_set_txpower(struct ath_hw *ah,
17370 +                                       struct ath9k_channel *chan, u16 cfgCtl,
17371 +                                       u8 twiceAntennaReduction,
17372 +                                       u8 twiceMaxRegulatoryPower,
17373 +                                       u8 powerLimit)
17374 +{
17375 +       ar9003_hw_set_target_power_eeprom(ah, chan->channel);
17376 +       ar9003_hw_calibration_apply(ah, chan->channel);
17377 +}
17378 +
17379 +static u16 ath9k_hw_ar9300_get_spur_channel(struct ath_hw *ah,
17380 +                                           u16 i, bool is2GHz)
17381 +{
17382 +       return AR_NO_SPUR;
17383 +}
17384 +
17385 +s32 ar9003_hw_get_tx_gain_idx(struct ath_hw *ah)
17386 +{
17387 +       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
17388 +
17389 +       return (eep->baseEepHeader.txrxgain >> 4) & 0xf; /* bits 7:4 */
17390 +}
17391 +
17392 +s32 ar9003_hw_get_rx_gain_idx(struct ath_hw *ah)
17393 +{
17394 +       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
17395 +
17396 +       return (eep->baseEepHeader.txrxgain) & 0xf; /* bits 3:0 */
17397 +}
17398 +
17399 +const struct eeprom_ops eep_ar9300_ops = {
17400 +       .check_eeprom = ath9k_hw_ar9300_check_eeprom,
17401 +       .get_eeprom = ath9k_hw_ar9300_get_eeprom,
17402 +       .fill_eeprom = ath9k_hw_ar9300_fill_eeprom,
17403 +       .get_eeprom_ver = ath9k_hw_ar9300_get_eeprom_ver,
17404 +       .get_eeprom_rev = ath9k_hw_ar9300_get_eeprom_rev,
17405 +       .get_num_ant_config = ath9k_hw_ar9300_get_num_ant_config,
17406 +       .get_eeprom_antenna_cfg = ath9k_hw_ar9300_get_eeprom_antenna_cfg,
17407 +       .set_board_values = ath9k_hw_ar9300_set_board_values,
17408 +       .set_addac = ath9k_hw_ar9300_set_addac,
17409 +       .set_txpower = ath9k_hw_ar9300_set_txpower,
17410 +       .get_spur_channel = ath9k_hw_ar9300_get_spur_channel
17411 +};
17412 diff --git a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.h b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.h
17413 new file mode 100644
17414 index 0000000..c3e330a
17415 --- /dev/null
17416 +++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.h
17417 @@ -0,0 +1,323 @@
17418 +#ifndef AR9003_EEPROM_H
17419 +#define AR9003_EEPROM_H
17420 +
17421 +#include <linux/types.h>
17422 +
17423 +#define AR9300_EEP_VER               0xD000
17424 +#define AR9300_EEP_VER_MINOR_MASK    0xFFF
17425 +#define AR9300_EEP_MINOR_VER_1       0x1
17426 +#define AR9300_EEP_MINOR_VER         AR9300_EEP_MINOR_VER_1
17427 +
17428 +// 16-bit offset location start of calibration struct
17429 +#define AR9300_EEP_START_LOC         256
17430 +#define AR9300_NUM_5G_CAL_PIERS      8
17431 +#define AR9300_NUM_2G_CAL_PIERS      3
17432 +#define AR9300_NUM_5G_20_TARGET_POWERS  8
17433 +#define AR9300_NUM_5G_40_TARGET_POWERS  8
17434 +#define AR9300_NUM_2G_CCK_TARGET_POWERS 2
17435 +#define AR9300_NUM_2G_20_TARGET_POWERS  3
17436 +#define AR9300_NUM_2G_40_TARGET_POWERS  3
17437 +//#define AR9300_NUM_CTLS              21
17438 +#define AR9300_NUM_CTLS_5G           9
17439 +#define AR9300_NUM_CTLS_2G           12
17440 +#define AR9300_CTL_MODE_M            0xF
17441 +#define AR9300_NUM_BAND_EDGES_5G     8
17442 +#define AR9300_NUM_BAND_EDGES_2G     4
17443 +#define AR9300_NUM_PD_GAINS          4
17444 +#define AR9300_PD_GAINS_IN_MASK      4
17445 +#define AR9300_PD_GAIN_ICEPTS        5
17446 +#define AR9300_EEPROM_MODAL_SPURS    5
17447 +#define AR9300_MAX_RATE_POWER        63
17448 +#define AR9300_NUM_PDADC_VALUES      128
17449 +#define AR9300_NUM_RATES             16
17450 +#define AR9300_BCHAN_UNUSED          0xFF
17451 +#define AR9300_MAX_PWR_RANGE_IN_HALF_DB 64
17452 +#define AR9300_OPFLAGS_11A           0x01
17453 +#define AR9300_OPFLAGS_11G           0x02
17454 +#define AR9300_OPFLAGS_5G_HT40       0x04
17455 +#define AR9300_OPFLAGS_2G_HT40       0x08
17456 +#define AR9300_OPFLAGS_5G_HT20       0x10
17457 +#define AR9300_OPFLAGS_2G_HT20       0x20
17458 +#define AR9300_EEPMISC_BIG_ENDIAN    0x01
17459 +#define AR9300_EEPMISC_WOW           0x02
17460 +#define AR9300_CUSTOMER_DATA_SIZE    20
17461 +
17462 +#define FREQ2FBIN(x,y) ((y) ? ((x) - 2300) : (((x) - 4800) / 5))
17463 +#define FBIN2FREQ(x,y) ((y) ? (2300 + x) : (4800 + 5 * x))
17464 +#define AR9300_MAX_CHAINS            3
17465 +#define AR9300_ANT_16S               25
17466 +#define AR9300_FUTURE_MODAL_SZ       6
17467 +
17468 +#define AR9300_NUM_ANT_CHAIN_FIELDS     7
17469 +#define AR9300_NUM_ANT_COMMON_FIELDS    4
17470 +#define AR9300_SIZE_ANT_CHAIN_FIELD     3
17471 +#define AR9300_SIZE_ANT_COMMON_FIELD    4
17472 +#define AR9300_ANT_CHAIN_MASK           0x7
17473 +#define AR9300_ANT_COMMON_MASK          0xf
17474 +#define AR9300_CHAIN_0_IDX              0
17475 +#define AR9300_CHAIN_1_IDX              1
17476 +#define AR9300_CHAIN_2_IDX              2
17477 +
17478 +#define AR928X_NUM_ANT_CHAIN_FIELDS     6
17479 +#define AR928X_SIZE_ANT_CHAIN_FIELD     2
17480 +#define AR928X_ANT_CHAIN_MASK           0x3
17481 +
17482 +/* Delta from which to start power to pdadc table */
17483 +/* This offset is used in both open loop and closed loop power control
17484 + * schemes. In open loop power control, it is not really needed, but for
17485 + * the "sake of consistency" it was kept. For certain AP designs, this
17486 + * value is overwritten by the value in the flag "pwrTableOffset" just
17487 + * before writing the pdadc vs pwr into the chip registers.
17488 + */
17489 +#define AR9300_PWR_TABLE_OFFSET  0
17490 +
17491 +/* enable flags for voltage and temp compensation */
17492 +#define ENABLE_TEMP_COMPENSATION 0x01
17493 +#define ENABLE_VOLT_COMPENSATION 0x02
17494 +/* byte addressable */
17495 +#define AR9300_EEPROM_SIZE 16*1024
17496 +#define FIXED_CCA_THRESHOLD 15
17497 +
17498 +#define AR9300_BASE_ADDR 0x3ff
17499 +
17500 +enum targetPowerHTRates {
17501 +       HT_TARGET_RATE_0_8_16,
17502 +       HT_TARGET_RATE_1_3_9_11_17_19,
17503 +       HT_TARGET_RATE_4,
17504 +       HT_TARGET_RATE_5,
17505 +       HT_TARGET_RATE_6,
17506 +       HT_TARGET_RATE_7,
17507 +       HT_TARGET_RATE_12,
17508 +       HT_TARGET_RATE_13,
17509 +       HT_TARGET_RATE_14,
17510 +       HT_TARGET_RATE_15,
17511 +       HT_TARGET_RATE_20,
17512 +       HT_TARGET_RATE_21,
17513 +       HT_TARGET_RATE_22,
17514 +       HT_TARGET_RATE_23
17515 +};
17516 +
17517 +enum targetPowerLegacyRates {
17518 +       LEGACY_TARGET_RATE_6_24,
17519 +       LEGACY_TARGET_RATE_36,
17520 +       LEGACY_TARGET_RATE_48,
17521 +       LEGACY_TARGET_RATE_54
17522 +};
17523 +
17524 +enum targetPowerCckRates {
17525 +       LEGACY_TARGET_RATE_1L_5L,
17526 +       LEGACY_TARGET_RATE_5S,
17527 +       LEGACY_TARGET_RATE_11L,
17528 +       LEGACY_TARGET_RATE_11S
17529 +};
17530 +
17531 +enum ar9300_Rates {
17532 +       ALL_TARGET_LEGACY_6_24,
17533 +       ALL_TARGET_LEGACY_36,
17534 +       ALL_TARGET_LEGACY_48,
17535 +       ALL_TARGET_LEGACY_54,
17536 +       ALL_TARGET_LEGACY_1L_5L,
17537 +       ALL_TARGET_LEGACY_5S,
17538 +       ALL_TARGET_LEGACY_11L,
17539 +       ALL_TARGET_LEGACY_11S,
17540 +       ALL_TARGET_HT20_0_8_16,
17541 +       ALL_TARGET_HT20_1_3_9_11_17_19,
17542 +       ALL_TARGET_HT20_4,
17543 +       ALL_TARGET_HT20_5,
17544 +       ALL_TARGET_HT20_6,
17545 +       ALL_TARGET_HT20_7,
17546 +       ALL_TARGET_HT20_12,
17547 +       ALL_TARGET_HT20_13,
17548 +       ALL_TARGET_HT20_14,
17549 +       ALL_TARGET_HT20_15,
17550 +       ALL_TARGET_HT20_20,
17551 +       ALL_TARGET_HT20_21,
17552 +       ALL_TARGET_HT20_22,
17553 +       ALL_TARGET_HT20_23,
17554 +       ALL_TARGET_HT40_0_8_16,
17555 +       ALL_TARGET_HT40_1_3_9_11_17_19,
17556 +       ALL_TARGET_HT40_4,
17557 +       ALL_TARGET_HT40_5,
17558 +       ALL_TARGET_HT40_6,
17559 +       ALL_TARGET_HT40_7,
17560 +       ALL_TARGET_HT40_12,
17561 +       ALL_TARGET_HT40_13,
17562 +       ALL_TARGET_HT40_14,
17563 +       ALL_TARGET_HT40_15,
17564 +       ALL_TARGET_HT40_20,
17565 +       ALL_TARGET_HT40_21,
17566 +       ALL_TARGET_HT40_22,
17567 +       ALL_TARGET_HT40_23,
17568 +       ar9300RateSize,
17569 +};
17570 +
17571 +
17572 +struct eepFlags {
17573 +       u8 opFlags;
17574 +       u8 eepMisc;
17575 +} __packed;
17576 +
17577 +enum CompressAlgorithm {
17578 +       _CompressNone = 0,
17579 +       _CompressLzma,
17580 +       _CompressPairs,
17581 +       _CompressBlock,
17582 +       _Compress4,
17583 +       _Compress5,
17584 +       _Compress6,
17585 +       _Compress7,
17586 +};
17587 +
17588 +struct ar9300_base_eep_hdr {
17589 +       u16 regDmn[2];
17590 +       /* 4 bits tx and 4 bits rx */
17591 +       u8 txrxMask;
17592 +       struct eepFlags opCapFlags;
17593 +       u8 rfSilent;
17594 +       u8 blueToothOptions;
17595 +       u8 deviceCap;
17596 +       /* takes lower byte in eeprom location */
17597 +       u8 deviceType;
17598 +       /* offset in dB to be added to beginning
17599 +        * of pdadc table in calibration
17600 +        */
17601 +       int8_t pwrTableOffset;
17602 +       u8 params_for_tuning_caps[2];
17603 +       /*
17604 +        * bit0 - enable tx temp comp
17605 +        * bit1 - enable tx volt comp
17606 +        * bit2 - enable fastClock - default to 1
17607 +        * bit3 - enable doubling - default to 1
17608 +        * bit4 - enable internal regulator - default to 1
17609 +        */
17610 +       u8 featureEnable;
17611 +       /* misc flags: bit0 - turn down drivestrength */
17612 +       u8 miscConfiguration;
17613 +       u8 eepromWriteEnableGpio;
17614 +       u8 wlanDisableGpio;
17615 +       u8 wlanLedGpio;
17616 +       u8 rxBandSelectGpio;
17617 +       u8 txrxgain;
17618 +       /* SW controlled internal regulator fields */
17619 +       u32 swreg;
17620 +} __packed;
17621 +
17622 +struct ar9300_modal_eep_header {
17623 +       /* 4 idle, t1, t2, b (4 bits per setting) */
17624 +       u32 antCtrlCommon;
17625 +       /* 4 ra1l1, ra2l1, ra1l2, ra2l2, ra12 */
17626 +       u32 antCtrlCommon2;
17627 +       /* 6 idle, t, r, rx1, rx12, b (2 bits each) */
17628 +       u16 antCtrlChain[AR9300_MAX_CHAINS];
17629 +       /* 3 xatten1_db for AR9280 (0xa20c/b20c 5:0) */
17630 +       u8 xatten1DB[AR9300_MAX_CHAINS];
17631 +       /* 3  xatten1_margin for merlin (0xa20c/b20c 16:12 */
17632 +       u8 xatten1Margin[AR9300_MAX_CHAINS];
17633 +       int8_t tempSlope;
17634 +       int8_t voltSlope;
17635 +       /* spur channels in usual fbin coding format */
17636 +       u8 spurChans[AR9300_EEPROM_MODAL_SPURS];
17637 +       /* 3  Check if the register is per chain */
17638 +       int8_t noiseFloorThreshCh[AR9300_MAX_CHAINS];
17639 +       u8 ob[AR9300_MAX_CHAINS];
17640 +       u8 db_stage2[AR9300_MAX_CHAINS];
17641 +       u8 db_stage3[AR9300_MAX_CHAINS];
17642 +       u8 db_stage4[AR9300_MAX_CHAINS];
17643 +       u8 xpaBiasLvl;
17644 +       u8 txFrameToDataStart;
17645 +       u8 txFrameToPaOn;
17646 +       u8 txClip;
17647 +       int8_t antennaGain;
17648 +       u8 switchSettling;
17649 +       int8_t adcDesiredSize;
17650 +       u8 txEndToXpaOff;
17651 +       u8 txEndToRxOn;
17652 +       u8 txFrameToXpaOn;
17653 +       u8 thresh62;
17654 +       u8 futureModal[32];
17655 +} __packed;
17656 +
17657 +struct ar9300_cal_data_per_freq_op_loop {
17658 +       int8_t refPower;
17659 +       /* pdadc voltage at power measurement */
17660 +       u8 voltMeas;
17661 +       /* pcdac used for power measurement   */
17662 +       u8 tempMeas;
17663 +       /* range is -60 to -127 create a mapping equation 1db resolution */
17664 +       int8_t rxNoisefloorCal;
17665 +       /*range is same as noisefloor */
17666 +       int8_t rxNoisefloorPower;
17667 +       /* temp measured when noisefloor cal was performed */
17668 +       u8 rxTempMeas;
17669 +} __packed;
17670 +
17671 +struct cal_tgt_pow_legacy {
17672 +       u8 tPow2x[4];
17673 +} __packed;
17674 +
17675 +struct cal_tgt_pow_ht {
17676 +       u8 tPow2x[14];
17677 +} __packed;
17678 +
17679 +struct cal_ctl_edge_pwr {
17680 +    u8 tPower :6,
17681 +        flag :2;
17682 +} __packed;
17683 +
17684 +struct cal_ctl_data_2g {
17685 +       struct cal_ctl_edge_pwr ctlEdges[AR9300_NUM_BAND_EDGES_5G];
17686 +} __packed;
17687 +
17688 +struct cal_ctl_data_5g {
17689 +       struct cal_ctl_edge_pwr ctlEdges[AR9300_NUM_BAND_EDGES_5G];
17690 +} __packed;
17691 +
17692 +struct ar9300_eeprom {
17693 +       u8 eepromVersion;
17694 +       u8 templateVersion;
17695 +       u8 macAddr[6];
17696 +       u8 custData[AR9300_CUSTOMER_DATA_SIZE];
17697 +
17698 +       struct ar9300_base_eep_hdr baseEepHeader;
17699 +
17700 +       struct ar9300_modal_eep_header modalHeader2G;
17701 +       u8 calFreqPier2G[AR9300_NUM_2G_CAL_PIERS];
17702 +       struct ar9300_cal_data_per_freq_op_loop
17703 +        calPierData2G[AR9300_MAX_CHAINS][AR9300_NUM_2G_CAL_PIERS];
17704 +       u8 calTarget_freqbin_Cck[AR9300_NUM_2G_CCK_TARGET_POWERS];
17705 +       u8 calTarget_freqbin_2G[AR9300_NUM_2G_20_TARGET_POWERS];
17706 +       u8 calTarget_freqbin_2GHT20[AR9300_NUM_2G_20_TARGET_POWERS];
17707 +       u8 calTarget_freqbin_2GHT40[AR9300_NUM_2G_40_TARGET_POWERS];
17708 +       struct cal_tgt_pow_legacy
17709 +        calTargetPowerCck[AR9300_NUM_2G_CCK_TARGET_POWERS];
17710 +       struct cal_tgt_pow_legacy
17711 +        calTargetPower2G[AR9300_NUM_2G_20_TARGET_POWERS];
17712 +       struct cal_tgt_pow_ht
17713 +        calTargetPower2GHT20[AR9300_NUM_2G_20_TARGET_POWERS];
17714 +       struct cal_tgt_pow_ht
17715 +        calTargetPower2GHT40[AR9300_NUM_2G_40_TARGET_POWERS];
17716 +       u8 ctlIndex_2G[AR9300_NUM_CTLS_2G];
17717 +       u8 ctl_freqbin_2G[AR9300_NUM_CTLS_2G][AR9300_NUM_BAND_EDGES_2G];
17718 +       struct cal_ctl_data_2g ctlPowerData_2G[AR9300_NUM_CTLS_2G];
17719 +       struct ar9300_modal_eep_header modalHeader5G;
17720 +       u8 calFreqPier5G[AR9300_NUM_5G_CAL_PIERS];
17721 +       struct ar9300_cal_data_per_freq_op_loop
17722 +        calPierData5G[AR9300_MAX_CHAINS][AR9300_NUM_5G_CAL_PIERS];
17723 +       u8 calTarget_freqbin_5G[AR9300_NUM_5G_20_TARGET_POWERS];
17724 +       u8 calTarget_freqbin_5GHT20[AR9300_NUM_5G_20_TARGET_POWERS];
17725 +       u8 calTarget_freqbin_5GHT40[AR9300_NUM_5G_40_TARGET_POWERS];
17726 +       struct cal_tgt_pow_legacy
17727 +        calTargetPower5G[AR9300_NUM_5G_20_TARGET_POWERS];
17728 +       struct cal_tgt_pow_ht
17729 +        calTargetPower5GHT20[AR9300_NUM_5G_20_TARGET_POWERS];
17730 +       struct cal_tgt_pow_ht
17731 +        calTargetPower5GHT40[AR9300_NUM_5G_40_TARGET_POWERS];
17732 +       u8 ctlIndex_5G[AR9300_NUM_CTLS_5G];
17733 +       u8 ctl_freqbin_5G[AR9300_NUM_CTLS_5G][AR9300_NUM_BAND_EDGES_5G];
17734 +       struct cal_ctl_data_5g ctlPowerData_5G[AR9300_NUM_CTLS_5G];
17735 +} __packed;
17736 +
17737 +s32 ar9003_hw_get_tx_gain_idx(struct ath_hw *ah);
17738 +s32 ar9003_hw_get_rx_gain_idx(struct ath_hw *ah);
17739 +
17740 +#endif
17741 diff --git a/drivers/net/wireless/ath/ath9k/ar9003_hw.c b/drivers/net/wireless/ath/ath9k/ar9003_hw.c
17742 new file mode 100644
17743 index 0000000..95edd25
17744 --- /dev/null
17745 +++ b/drivers/net/wireless/ath/ath9k/ar9003_hw.c
17746 @@ -0,0 +1,205 @@
17747 +/*
17748 + * Copyright (c) 2008-2010 Atheros Communications Inc.
17749 + *
17750 + * Permission to use, copy, modify, and/or distribute this software for any
17751 + * purpose with or without fee is hereby granted, provided that the above
17752 + * copyright notice and this permission notice appear in all copies.
17753 + *
17754 + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
17755 + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
17756 + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
17757 + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
17758 + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17759 + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17760 + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17761 + */
17762 +
17763 +#include "hw.h"
17764 +#include "ar9003_initvals.h"
17765 +
17766 +/* General hardware code for the AR9003 hadware family */
17767 +
17768 +static bool ar9003_hw_macversion_supported(u32 macversion)
17769 +{
17770 +       switch (macversion) {
17771 +       case AR_SREV_VERSION_9300:
17772 +               return true;
17773 +       default:
17774 +               break;
17775 +       }
17776 +       return false;
17777 +}
17778 +
17779 +/* AR9003 2.0 - new INI format (pre, core, post arrays per subsystem) */
17780 +/*
17781 + * XXX: move TX/RX gain INI to its own init_mode_gain_regs after
17782 + * ensuring it does not affect hardware bring up
17783 + */
17784 +static void ar9003_hw_init_mode_regs(struct ath_hw *ah)
17785 +{
17786 +       /* mac */
17787 +       INIT_INI_ARRAY(&ah->iniMac[ATH_INI_PRE], NULL, 0, 0);
17788 +       INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE],
17789 +                      ar9300_2p0_mac_core,
17790 +                      ARRAY_SIZE(ar9300_2p0_mac_core), 2);
17791 +       INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST],
17792 +                      ar9300_2p0_mac_postamble,
17793 +                      ARRAY_SIZE(ar9300_2p0_mac_postamble), 5);
17794 +
17795 +       /* bb */
17796 +       INIT_INI_ARRAY(&ah->iniBB[ATH_INI_PRE], NULL, 0, 0);
17797 +       INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE],
17798 +                      ar9300_2p0_baseband_core,
17799 +                      ARRAY_SIZE(ar9300_2p0_baseband_core), 2);
17800 +       INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST],
17801 +                      ar9300_2p0_baseband_postamble,
17802 +                      ARRAY_SIZE(ar9300_2p0_baseband_postamble), 5);
17803 +
17804 +       /* radio */
17805 +       INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_PRE], NULL, 0, 0);
17806 +       INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE],
17807 +                      ar9300_2p0_radio_core,
17808 +                      ARRAY_SIZE(ar9300_2p0_radio_core), 2);
17809 +       INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST],
17810 +                      ar9300_2p0_radio_postamble,
17811 +                      ARRAY_SIZE(ar9300_2p0_radio_postamble), 5);
17812 +
17813 +       /* soc */
17814 +       INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE],
17815 +                      ar9300_2p0_soc_preamble,
17816 +                      ARRAY_SIZE(ar9300_2p0_soc_preamble), 2);
17817 +       INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_CORE], NULL, 0, 0);
17818 +       INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST],
17819 +                      ar9300_2p0_soc_postamble,
17820 +                      ARRAY_SIZE(ar9300_2p0_soc_postamble), 5);
17821 +
17822 +       /* rx/tx gain */
17823 +       INIT_INI_ARRAY(&ah->iniModesRxGain,
17824 +                      ar9300Common_rx_gain_table_2p0,
17825 +                      ARRAY_SIZE(ar9300Common_rx_gain_table_2p0), 2);
17826 +       INIT_INI_ARRAY(&ah->iniModesTxGain,
17827 +                      ar9300Modes_lowest_ob_db_tx_gain_table_2p0,
17828 +                      ARRAY_SIZE(ar9300Modes_lowest_ob_db_tx_gain_table_2p0),
17829 +                      5);
17830 +
17831 +       /* Load PCIE SERDES settings from INI */
17832 +
17833 +       /* Awake Setting */
17834 +
17835 +       INIT_INI_ARRAY(&ah->iniPcieSerdes,
17836 +                      ar9300PciePhy_pll_on_clkreq_disable_L1_2p0,
17837 +                      ARRAY_SIZE(ar9300PciePhy_pll_on_clkreq_disable_L1_2p0),
17838 +                      2);
17839 +
17840 +       /* Sleep Setting */
17841 +
17842 +       INIT_INI_ARRAY(&ah->iniPcieSerdesLowPower,
17843 +                      ar9300PciePhy_clkreq_enable_L1_2p0,
17844 +                      ARRAY_SIZE(ar9300PciePhy_clkreq_enable_L1_2p0),
17845 +                      2);
17846 +
17847 +       /* Fast clock modal settings */
17848 +       INIT_INI_ARRAY(&ah->iniModesAdditional,
17849 +                      ar9300Modes_fast_clock_2p0,
17850 +                      ARRAY_SIZE(ar9300Modes_fast_clock_2p0),
17851 +                      3);
17852 +}
17853 +
17854 +static void ar9003_tx_gain_table_apply(struct ath_hw *ah)
17855 +{
17856 +       switch(ar9003_hw_get_tx_gain_idx(ah)) {
17857 +       case 0:
17858 +       default:
17859 +               INIT_INI_ARRAY(&ah->iniModesTxGain,
17860 +                              ar9300Modes_lowest_ob_db_tx_gain_table_2p0,
17861 +                              ARRAY_SIZE(ar9300Modes_lowest_ob_db_tx_gain_table_2p0),
17862 +                              5);
17863 +               break;
17864 +       case 1:
17865 +               INIT_INI_ARRAY(&ah->iniModesTxGain,
17866 +                              ar9300Modes_high_ob_db_tx_gain_table_2p0,
17867 +                              ARRAY_SIZE(ar9300Modes_high_ob_db_tx_gain_table_2p0),
17868 +                              5);
17869 +               break;
17870 +       case 2:
17871 +               INIT_INI_ARRAY(&ah->iniModesTxGain,
17872 +                              ar9300Modes_low_ob_db_tx_gain_table_2p0,
17873 +                              ARRAY_SIZE(ar9300Modes_low_ob_db_tx_gain_table_2p0),
17874 +                              5);
17875 +               break;
17876 +       }
17877 +}
17878 +
17879 +static void ar9003_rx_gain_table_apply(struct ath_hw *ah)
17880 +{
17881 +       switch(ar9003_hw_get_rx_gain_idx(ah))
17882 +       {
17883 +       case 0:
17884 +       default:
17885 +               INIT_INI_ARRAY(&ah->iniModesRxGain, ar9300Common_rx_gain_table_2p0,
17886 +                              ARRAY_SIZE(ar9300Common_rx_gain_table_2p0),
17887 +                              2);
17888 +               break;
17889 +       case 1:
17890 +               INIT_INI_ARRAY(&ah->iniModesRxGain,
17891 +                              ar9300Common_wo_xlna_rx_gain_table_2p0,
17892 +                              ARRAY_SIZE(ar9300Common_wo_xlna_rx_gain_table_2p0),
17893 +                              2);
17894 +               break;
17895 +       }
17896 +}
17897 +
17898 +/* set gain table pointers according to values read from the eeprom */
17899 +static void ar9003_hw_init_mode_gain_regs(struct ath_hw *ah)
17900 +{
17901 +       ar9003_tx_gain_table_apply(ah);
17902 +       ar9003_rx_gain_table_apply(ah);
17903 +}
17904 +
17905 +/*
17906 + * Helper for ASPM support.
17907 + *
17908 + * Disable PLL when in L0s as well as receiver clock when in L1.
17909 + * This power saving option must be enabled through the SerDes.
17910 + *
17911 + * Programming the SerDes must go through the same 288 bit serial shift
17912 + * register as the other analog registers.  Hence the 9 writes.
17913 + */
17914 +static void ar9003_hw_configpcipowersave(struct ath_hw *ah,
17915 +                                        int restore,
17916 +                                        int power_off)
17917 +{
17918 +       if (ah->is_pciexpress != true)
17919 +               return;
17920 +
17921 +       /* Do not touch SerDes registers */
17922 +       if (ah->config.pcie_powersave_enable == 2)
17923 +               return;
17924 +
17925 +       /* Nothing to do on restore for 11N */
17926 +       if (!restore) {
17927 +               /* set bit 19 to allow forcing of pcie core into L1 state */
17928 +               REG_SET_BIT(ah, AR_PCIE_PM_CTRL, AR_PCIE_PM_CTRL_ENA);
17929 +
17930 +               /* Several PCIe massages to ensure proper behaviour */
17931 +               if (ah->config.pcie_waen)
17932 +                       REG_WRITE(ah, AR_WA, ah->config.pcie_waen);
17933 +       }
17934 +}
17935 +
17936 +/* Sets up the AR9003 hardware familiy callbacks */
17937 +void ar9003_hw_attach_ops(struct ath_hw *ah)
17938 +{
17939 +       struct ath_hw_private_ops *priv_ops = ath9k_hw_private_ops(ah);
17940 +       struct ath_hw_ops *ops = ath9k_hw_ops(ah);
17941 +
17942 +       priv_ops->init_mode_regs = ar9003_hw_init_mode_regs;
17943 +       priv_ops->init_mode_gain_regs = ar9003_hw_init_mode_gain_regs;
17944 +       priv_ops->macversion_supported = ar9003_hw_macversion_supported;
17945 +
17946 +       ops->config_pci_powersave = ar9003_hw_configpcipowersave;
17947 +
17948 +       ar9003_hw_attach_phy_ops(ah);
17949 +       ar9003_hw_attach_calib_ops(ah);
17950 +       ar9003_hw_attach_mac_ops(ah);
17951 +}
17952 diff --git a/drivers/net/wireless/ath/ath9k/ar9003_initvals.h b/drivers/net/wireless/ath/ath9k/ar9003_initvals.h
17953 new file mode 100644
17954 index 0000000..e0391b1
17955 --- /dev/null
17956 +++ b/drivers/net/wireless/ath/ath9k/ar9003_initvals.h
17957 @@ -0,0 +1,1793 @@
17958 +/*
17959 + * Copyright (c) 2010 Atheros Communications Inc.
17960 + *
17961 + * Permission to use, copy, modify, and/or distribute this software for any
17962 + * purpose with or without fee is hereby granted, provided that the above
17963 + * copyright notice and this permission notice appear in all copies.
17964 + *
17965 + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
17966 + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
17967 + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
17968 + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
17969 + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17970 + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17971 + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17972 + */
17973 +
17974 +#ifndef INITVALS_9003_H
17975 +#define INITVALS_9003_H
17976 +
17977 +/* AR9003 2.0 */
17978 +
17979 +static const u32 ar9300_2p0_radio_postamble[][5] = {
17980 +       /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
17981 +       {0x0001609c, 0x0dd08f29, 0x0dd08f29, 0x0b283f31, 0x0b283f31},
17982 +       {0x000160ac, 0xa4653c00, 0xa4653c00, 0x24652800, 0x24652800},
17983 +       {0x000160b0, 0x03284f3e, 0x03284f3e, 0x05d08f20, 0x05d08f20},
17984 +       {0x0001610c, 0x08000000, 0x00000000, 0x00000000, 0x00000000},
17985 +       {0x0001650c, 0x08000000, 0x00000000, 0x00000000, 0x00000000},
17986 +       {0x0001690c, 0x08000000, 0x00000000, 0x00000000, 0x00000000},
17987 +};
17988 +
17989 +static const u32 ar9300Modes_lowest_ob_db_tx_gain_table_2p0[][5] = {
17990 +       /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
17991 +       {0x0000a410, 0x000050da, 0x000050da, 0x000050da, 0x000050da},
17992 +       {0x0000a500, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
17993 +       {0x0000a504, 0x06000003, 0x06000003, 0x04000002, 0x04000002},
17994 +       {0x0000a508, 0x0a000020, 0x0a000020, 0x08000004, 0x08000004},
17995 +       {0x0000a50c, 0x10000023, 0x10000023, 0x0b000200, 0x0b000200},
17996 +       {0x0000a510, 0x16000220, 0x16000220, 0x0f000202, 0x0f000202},
17997 +       {0x0000a514, 0x1c000223, 0x1c000223, 0x12000400, 0x12000400},
17998 +       {0x0000a518, 0x21020220, 0x21020220, 0x16000402, 0x16000402},
17999 +       {0x0000a51c, 0x27020223, 0x27020223, 0x19000404, 0x19000404},
18000 +       {0x0000a520, 0x2b022220, 0x2b022220, 0x1c000603, 0x1c000603},
18001 +       {0x0000a524, 0x2f022222, 0x2f022222, 0x21000a02, 0x21000a02},
18002 +       {0x0000a528, 0x34022225, 0x34022225, 0x25000a04, 0x25000a04},
18003 +       {0x0000a52c, 0x3a02222a, 0x3a02222a, 0x28000a20, 0x28000a20},
18004 +       {0x0000a530, 0x3e02222c, 0x3e02222c, 0x2c000e20, 0x2c000e20},
18005 +       {0x0000a534, 0x4202242a, 0x4202242a, 0x30000e22, 0x30000e22},
18006 +       {0x0000a538, 0x4702244a, 0x4702244a, 0x34000e24, 0x34000e24},
18007 +       {0x0000a53c, 0x4b02244c, 0x4b02244c, 0x38001640, 0x38001640},
18008 +       {0x0000a540, 0x4e02246c, 0x4e02246c, 0x3c001660, 0x3c001660},
18009 +       {0x0000a544, 0x5302266c, 0x5302266c, 0x3f001861, 0x3f001861},
18010 +       {0x0000a548, 0x5702286c, 0x5702286c, 0x43001a81, 0x43001a81},
18011 +       {0x0000a54c, 0x5c04286b, 0x5c04286b, 0x47001a83, 0x47001a83},
18012 +       {0x0000a550, 0x61042a6c, 0x61042a6c, 0x4a001c84, 0x4a001c84},
18013 +       {0x0000a554, 0x66062a6c, 0x66062a6c, 0x4e001ce3, 0x4e001ce3},
18014 +       {0x0000a558, 0x6b062e6c, 0x6b062e6c, 0x52001ce5, 0x52001ce5},
18015 +       {0x0000a55c, 0x7006308c, 0x7006308c, 0x56001ce9, 0x56001ce9},
18016 +       {0x0000a560, 0x730a308a, 0x730a308a, 0x5a001ceb, 0x5a001ceb},
18017 +       {0x0000a564, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
18018 +       {0x0000a568, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
18019 +       {0x0000a56c, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
18020 +       {0x0000a570, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
18021 +       {0x0000a574, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
18022 +       {0x0000a578, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
18023 +       {0x0000a57c, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
18024 +       {0x0000a580, 0x00800000, 0x00800000, 0x00800000, 0x00800000},
18025 +       {0x0000a584, 0x06800003, 0x06800003, 0x04800002, 0x04800002},
18026 +       {0x0000a588, 0x0a800020, 0x0a800020, 0x08800004, 0x08800004},
18027 +       {0x0000a58c, 0x10800023, 0x10800023, 0x0b800200, 0x0b800200},
18028 +       {0x0000a590, 0x16800220, 0x16800220, 0x0f800202, 0x0f800202},
18029 +       {0x0000a594, 0x1c800223, 0x1c800223, 0x12800400, 0x12800400},
18030 +       {0x0000a598, 0x21820220, 0x21820220, 0x16800402, 0x16800402},
18031 +       {0x0000a59c, 0x27820223, 0x27820223, 0x19800404, 0x19800404},
18032 +       {0x0000a5a0, 0x2b822220, 0x2b822220, 0x1c800603, 0x1c800603},
18033 +       {0x0000a5a4, 0x2f822222, 0x2f822222, 0x21800a02, 0x21800a02},
18034 +       {0x0000a5a8, 0x34822225, 0x34822225, 0x25800a04, 0x25800a04},
18035 +       {0x0000a5ac, 0x3a82222a, 0x3a82222a, 0x28800a20, 0x28800a20},
18036 +       {0x0000a5b0, 0x3e82222c, 0x3e82222c, 0x2c800e20, 0x2c800e20},
18037 +       {0x0000a5b4, 0x4282242a, 0x4282242a, 0x30800e22, 0x30800e22},
18038 +       {0x0000a5b8, 0x4782244a, 0x4782244a, 0x34800e24, 0x34800e24},
18039 +       {0x0000a5bc, 0x4b82244c, 0x4b82244c, 0x38801640, 0x38801640},
18040 +       {0x0000a5c0, 0x4e82246c, 0x4e82246c, 0x3c801660, 0x3c801660},
18041 +       {0x0000a5c4, 0x5382266c, 0x5382266c, 0x3f801861, 0x3f801861},
18042 +       {0x0000a5c8, 0x5782286c, 0x5782286c, 0x43801a81, 0x43801a81},
18043 +       {0x0000a5cc, 0x5c84286b, 0x5c84286b, 0x47801a83, 0x47801a83},
18044 +       {0x0000a5d0, 0x61842a6c, 0x61842a6c, 0x4a801c84, 0x4a801c84},
18045 +       {0x0000a5d4, 0x66862a6c, 0x66862a6c, 0x4e801ce3, 0x4e801ce3},
18046 +       {0x0000a5d8, 0x6b862e6c, 0x6b862e6c, 0x52801ce5, 0x52801ce5},
18047 +       {0x0000a5dc, 0x7086308c, 0x7086308c, 0x56801ce9, 0x56801ce9},
18048 +       {0x0000a5e0, 0x738a308a, 0x738a308a, 0x5a801ceb, 0x5a801ceb},
18049 +       {0x0000a5e4, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
18050 +       {0x0000a5e8, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
18051 +       {0x0000a5ec, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
18052 +       {0x0000a5f0, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
18053 +       {0x0000a5f4, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
18054 +       {0x0000a5f8, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
18055 +       {0x0000a5fc, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
18056 +       {0x00016044, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4},
18057 +       {0x00016048, 0x60001a61, 0x60001a61, 0x60001a61, 0x60001a61},
18058 +       {0x00016068, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
18059 +       {0x00016444, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4},
18060 +       {0x00016448, 0x60001a61, 0x60001a61, 0x60001a61, 0x60001a61},
18061 +       {0x00016468, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
18062 +       {0x00016844, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4},
18063 +       {0x00016848, 0x60001a61, 0x60001a61, 0x60001a61, 0x60001a61},
18064 +       {0x00016868, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
18065 +};
18066 +
18067 +static const u32 ar9300Modes_fast_clock_2p0[][3] = {
18068 +       /* Addr      5G_HT20     5G_HT40   */
18069 +       {0x00001030, 0x00000268, 0x000004d0},
18070 +       {0x00001070, 0x0000018c, 0x00000318},
18071 +       {0x000010b0, 0x00000fd0, 0x00001fa0},
18072 +       {0x00008014, 0x044c044c, 0x08980898},
18073 +       {0x0000801c, 0x148ec02b, 0x148ec057},
18074 +       {0x00008318, 0x000044c0, 0x00008980},
18075 +       {0x00009e00, 0x03721821, 0x03721821},
18076 +       {0x0000a230, 0x0000000b, 0x00000016},
18077 +       {0x0000a254, 0x00000898, 0x00001130},
18078 +};
18079 +
18080 +static const u32 ar9300_2p0_radio_core[][2] = {
18081 +       /* Addr      allmodes  */
18082 +       {0x00016000, 0x36db6db6},
18083 +       {0x00016004, 0x6db6db40},
18084 +       {0x00016008, 0x73f00000},
18085 +       {0x0001600c, 0x00000000},
18086 +       {0x00016040, 0x7f80fff8},
18087 +       {0x0001604c, 0x76d005b5},
18088 +       {0x00016050, 0x556cf031},
18089 +       {0x00016054, 0x43449440},
18090 +       {0x00016058, 0x0c51c92c},
18091 +       {0x0001605c, 0x3db7fffc},
18092 +       {0x00016060, 0xfffffffc},
18093 +       {0x00016064, 0x000f0278},
18094 +       {0x0001606c, 0x6db60000},
18095 +       {0x00016080, 0x00000000},
18096 +       {0x00016084, 0x0e48048c},
18097 +       {0x00016088, 0x54214514},
18098 +       {0x0001608c, 0x119f481e},
18099 +       {0x00016090, 0x24926490},
18100 +       {0x00016098, 0xd2888888},
18101 +       {0x000160a0, 0x0a108ffe},
18102 +       {0x000160a4, 0x812fc370},
18103 +       {0x000160a8, 0x423c8000},
18104 +       {0x000160b4, 0x92480080},
18105 +       {0x000160c0, 0x00adb6d0},
18106 +       {0x000160c4, 0x6db6db60},
18107 +       {0x000160c8, 0x6db6db6c},
18108 +       {0x000160cc, 0x01e6c000},
18109 +       {0x00016100, 0x3fffbe01},
18110 +       {0x00016104, 0xfff80000},
18111 +       {0x00016108, 0x00080010},
18112 +       {0x00016140, 0x10804008},
18113 +       {0x00016144, 0x02084080},
18114 +       {0x00016148, 0x00000000},
18115 +       {0x00016280, 0x058a0001},
18116 +       {0x00016284, 0x3d840208},
18117 +       {0x00016288, 0x01a20408},
18118 +       {0x0001628c, 0x00038c07},
18119 +       {0x00016290, 0x40000004},
18120 +       {0x00016294, 0x458aa14f},
18121 +       {0x00016380, 0x00000000},
18122 +       {0x00016384, 0x00000000},
18123 +       {0x00016388, 0x00800700},
18124 +       {0x0001638c, 0x00800700},
18125 +       {0x00016390, 0x00800700},
18126 +       {0x00016394, 0x00000000},
18127 +       {0x00016398, 0x00000000},
18128 +       {0x0001639c, 0x00000000},
18129 +       {0x000163a0, 0x00000001},
18130 +       {0x000163a4, 0x00000001},
18131 +       {0x000163a8, 0x00000000},
18132 +       {0x000163ac, 0x00000000},
18133 +       {0x000163b0, 0x00000000},
18134 +       {0x000163b4, 0x00000000},
18135 +       {0x000163b8, 0x00000000},
18136 +       {0x000163bc, 0x00000000},
18137 +       {0x000163c0, 0x000000a0},
18138 +       {0x000163c4, 0x000c0000},
18139 +       {0x000163c8, 0x14021402},
18140 +       {0x000163cc, 0x00001402},
18141 +       {0x000163d0, 0x00000000},
18142 +       {0x000163d4, 0x00000000},
18143 +       {0x00016400, 0x36db6db6},
18144 +       {0x00016404, 0x6db6db40},
18145 +       {0x00016408, 0x73f00000},
18146 +       {0x0001640c, 0x00000000},
18147 +       {0x00016440, 0x7f80fff8},
18148 +       {0x0001644c, 0x76d005b5},
18149 +       {0x00016450, 0x556cf031},
18150 +       {0x00016454, 0x43449440},
18151 +       {0x00016458, 0x0c51c92c},
18152 +       {0x0001645c, 0x3db7fffc},
18153 +       {0x00016460, 0xfffffffc},
18154 +       {0x00016464, 0x000f0278},
18155 +       {0x0001646c, 0x6db60000},
18156 +       {0x00016500, 0x3fffbe01},
18157 +       {0x00016504, 0xfff80000},
18158 +       {0x00016508, 0x00080010},
18159 +       {0x00016540, 0x10804008},
18160 +       {0x00016544, 0x02084080},
18161 +       {0x00016548, 0x00000000},
18162 +       {0x00016780, 0x00000000},
18163 +       {0x00016784, 0x00000000},
18164 +       {0x00016788, 0x00800700},
18165 +       {0x0001678c, 0x00800700},
18166 +       {0x00016790, 0x00800700},
18167 +       {0x00016794, 0x00000000},
18168 +       {0x00016798, 0x00000000},
18169 +       {0x0001679c, 0x00000000},
18170 +       {0x000167a0, 0x00000001},
18171 +       {0x000167a4, 0x00000001},
18172 +       {0x000167a8, 0x00000000},
18173 +       {0x000167ac, 0x00000000},
18174 +       {0x000167b0, 0x00000000},
18175 +       {0x000167b4, 0x00000000},
18176 +       {0x000167b8, 0x00000000},
18177 +       {0x000167bc, 0x00000000},
18178 +       {0x000167c0, 0x000000a0},
18179 +       {0x000167c4, 0x000c0000},
18180 +       {0x000167c8, 0x14021402},
18181 +       {0x000167cc, 0x00001402},
18182 +       {0x000167d0, 0x00000000},
18183 +       {0x000167d4, 0x00000000},
18184 +       {0x00016800, 0x36db6db6},
18185 +       {0x00016804, 0x6db6db40},
18186 +       {0x00016808, 0x73f00000},
18187 +       {0x0001680c, 0x00000000},
18188 +       {0x00016840, 0x7f80fff8},
18189 +       {0x0001684c, 0x76d005b5},
18190 +       {0x00016850, 0x556cf031},
18191 +       {0x00016854, 0x43449440},
18192 +       {0x00016858, 0x0c51c92c},
18193 +       {0x0001685c, 0x3db7fffc},
18194 +       {0x00016860, 0xfffffffc},
18195 +       {0x00016864, 0x000f0278},
18196 +       {0x0001686c, 0x6db60000},
18197 +       {0x00016900, 0x3fffbe01},
18198 +       {0x00016904, 0xfff80000},
18199 +       {0x00016908, 0x00080010},
18200 +       {0x00016940, 0x10804008},
18201 +       {0x00016944, 0x02084080},
18202 +       {0x00016948, 0x00000000},
18203 +       {0x00016b80, 0x00000000},
18204 +       {0x00016b84, 0x00000000},
18205 +       {0x00016b88, 0x00800700},
18206 +       {0x00016b8c, 0x00800700},
18207 +       {0x00016b90, 0x00800700},
18208 +       {0x00016b94, 0x00000000},
18209 +       {0x00016b98, 0x00000000},
18210 +       {0x00016b9c, 0x00000000},
18211 +       {0x00016ba0, 0x00000001},
18212 +       {0x00016ba4, 0x00000001},
18213 +       {0x00016ba8, 0x00000000},
18214 +       {0x00016bac, 0x00000000},
18215 +       {0x00016bb0, 0x00000000},
18216 +       {0x00016bb4, 0x00000000},
18217 +       {0x00016bb8, 0x00000000},
18218 +       {0x00016bbc, 0x00000000},
18219 +       {0x00016bc0, 0x000000a0},
18220 +       {0x00016bc4, 0x000c0000},
18221 +       {0x00016bc8, 0x14021402},
18222 +       {0x00016bcc, 0x00001402},
18223 +       {0x00016bd0, 0x00000000},
18224 +       {0x00016bd4, 0x00000000},
18225 +};
18226 +
18227 +static const u32 ar9300Common_rx_gain_table_merlin_2p0[][2] = {
18228 +       /* Addr      allmodes  */
18229 +       {0x0000a000, 0x02000101},
18230 +       {0x0000a004, 0x02000102},
18231 +       {0x0000a008, 0x02000103},
18232 +       {0x0000a00c, 0x02000104},
18233 +       {0x0000a010, 0x02000200},
18234 +       {0x0000a014, 0x02000201},
18235 +       {0x0000a018, 0x02000202},
18236 +       {0x0000a01c, 0x02000203},
18237 +       {0x0000a020, 0x02000204},
18238 +       {0x0000a024, 0x02000205},
18239 +       {0x0000a028, 0x02000208},
18240 +       {0x0000a02c, 0x02000302},
18241 +       {0x0000a030, 0x02000303},
18242 +       {0x0000a034, 0x02000304},
18243 +       {0x0000a038, 0x02000400},
18244 +       {0x0000a03c, 0x02010300},
18245 +       {0x0000a040, 0x02010301},
18246 +       {0x0000a044, 0x02010302},
18247 +       {0x0000a048, 0x02000500},
18248 +       {0x0000a04c, 0x02010400},
18249 +       {0x0000a050, 0x02020300},
18250 +       {0x0000a054, 0x02020301},
18251 +       {0x0000a058, 0x02020302},
18252 +       {0x0000a05c, 0x02020303},
18253 +       {0x0000a060, 0x02020400},
18254 +       {0x0000a064, 0x02030300},
18255 +       {0x0000a068, 0x02030301},
18256 +       {0x0000a06c, 0x02030302},
18257 +       {0x0000a070, 0x02030303},
18258 +       {0x0000a074, 0x02030400},
18259 +       {0x0000a078, 0x02040300},
18260 +       {0x0000a07c, 0x02040301},
18261 +       {0x0000a080, 0x02040302},
18262 +       {0x0000a084, 0x02040303},
18263 +       {0x0000a088, 0x02030500},
18264 +       {0x0000a08c, 0x02040400},
18265 +       {0x0000a090, 0x02050203},
18266 +       {0x0000a094, 0x02050204},
18267 +       {0x0000a098, 0x02050205},
18268 +       {0x0000a09c, 0x02040500},
18269 +       {0x0000a0a0, 0x02050301},
18270 +       {0x0000a0a4, 0x02050302},
18271 +       {0x0000a0a8, 0x02050303},
18272 +       {0x0000a0ac, 0x02050400},
18273 +       {0x0000a0b0, 0x02050401},
18274 +       {0x0000a0b4, 0x02050402},
18275 +       {0x0000a0b8, 0x02050403},
18276 +       {0x0000a0bc, 0x02050500},
18277 +       {0x0000a0c0, 0x02050501},
18278 +       {0x0000a0c4, 0x02050502},
18279 +       {0x0000a0c8, 0x02050503},
18280 +       {0x0000a0cc, 0x02050504},
18281 +       {0x0000a0d0, 0x02050600},
18282 +       {0x0000a0d4, 0x02050601},
18283 +       {0x0000a0d8, 0x02050602},
18284 +       {0x0000a0dc, 0x02050603},
18285 +       {0x0000a0e0, 0x02050604},
18286 +       {0x0000a0e4, 0x02050700},
18287 +       {0x0000a0e8, 0x02050701},
18288 +       {0x0000a0ec, 0x02050702},
18289 +       {0x0000a0f0, 0x02050703},
18290 +       {0x0000a0f4, 0x02050704},
18291 +       {0x0000a0f8, 0x02050705},
18292 +       {0x0000a0fc, 0x02050708},
18293 +       {0x0000a100, 0x02050709},
18294 +       {0x0000a104, 0x0205070a},
18295 +       {0x0000a108, 0x0205070b},
18296 +       {0x0000a10c, 0x0205070c},
18297 +       {0x0000a110, 0x0205070d},
18298 +       {0x0000a114, 0x02050710},
18299 +       {0x0000a118, 0x02050711},
18300 +       {0x0000a11c, 0x02050712},
18301 +       {0x0000a120, 0x02050713},
18302 +       {0x0000a124, 0x02050714},
18303 +       {0x0000a128, 0x02050715},
18304 +       {0x0000a12c, 0x02050730},
18305 +       {0x0000a130, 0x02050731},
18306 +       {0x0000a134, 0x02050732},
18307 +       {0x0000a138, 0x02050733},
18308 +       {0x0000a13c, 0x02050734},
18309 +       {0x0000a140, 0x02050735},
18310 +       {0x0000a144, 0x02050750},
18311 +       {0x0000a148, 0x02050751},
18312 +       {0x0000a14c, 0x02050752},
18313 +       {0x0000a150, 0x02050753},
18314 +       {0x0000a154, 0x02050754},
18315 +       {0x0000a158, 0x02050755},
18316 +       {0x0000a15c, 0x02050770},
18317 +       {0x0000a160, 0x02050771},
18318 +       {0x0000a164, 0x02050772},
18319 +       {0x0000a168, 0x02050773},
18320 +       {0x0000a16c, 0x02050774},
18321 +       {0x0000a170, 0x02050775},
18322 +       {0x0000a174, 0x00000776},
18323 +       {0x0000a178, 0x00000776},
18324 +       {0x0000a17c, 0x00000776},
18325 +       {0x0000a180, 0x00000776},
18326 +       {0x0000a184, 0x00000776},
18327 +       {0x0000a188, 0x00000776},
18328 +       {0x0000a18c, 0x00000776},
18329 +       {0x0000a190, 0x00000776},
18330 +       {0x0000a194, 0x00000776},
18331 +       {0x0000a198, 0x00000776},
18332 +       {0x0000a19c, 0x00000776},
18333 +       {0x0000a1a0, 0x00000776},
18334 +       {0x0000a1a4, 0x00000776},
18335 +       {0x0000a1a8, 0x00000776},
18336 +       {0x0000a1ac, 0x00000776},
18337 +       {0x0000a1b0, 0x00000776},
18338 +       {0x0000a1b4, 0x00000776},
18339 +       {0x0000a1b8, 0x00000776},
18340 +       {0x0000a1bc, 0x00000776},
18341 +       {0x0000a1c0, 0x00000776},
18342 +       {0x0000a1c4, 0x00000776},
18343 +       {0x0000a1c8, 0x00000776},
18344 +       {0x0000a1cc, 0x00000776},
18345 +       {0x0000a1d0, 0x00000776},
18346 +       {0x0000a1d4, 0x00000776},
18347 +       {0x0000a1d8, 0x00000776},
18348 +       {0x0000a1dc, 0x00000776},
18349 +       {0x0000a1e0, 0x00000776},
18350 +       {0x0000a1e4, 0x00000776},
18351 +       {0x0000a1e8, 0x00000776},
18352 +       {0x0000a1ec, 0x00000776},
18353 +       {0x0000a1f0, 0x00000776},
18354 +       {0x0000a1f4, 0x00000776},
18355 +       {0x0000a1f8, 0x00000776},
18356 +       {0x0000a1fc, 0x00000776},
18357 +       {0x0000b000, 0x02000101},
18358 +       {0x0000b004, 0x02000102},
18359 +       {0x0000b008, 0x02000103},
18360 +       {0x0000b00c, 0x02000104},
18361 +       {0x0000b010, 0x02000200},
18362 +       {0x0000b014, 0x02000201},
18363 +       {0x0000b018, 0x02000202},
18364 +       {0x0000b01c, 0x02000203},
18365 +       {0x0000b020, 0x02000204},
18366 +       {0x0000b024, 0x02000205},
18367 +       {0x0000b028, 0x02000208},
18368 +       {0x0000b02c, 0x02000302},
18369 +       {0x0000b030, 0x02000303},
18370 +       {0x0000b034, 0x02000304},
18371 +       {0x0000b038, 0x02000400},
18372 +       {0x0000b03c, 0x02010300},
18373 +       {0x0000b040, 0x02010301},
18374 +       {0x0000b044, 0x02010302},
18375 +       {0x0000b048, 0x02000500},
18376 +       {0x0000b04c, 0x02010400},
18377 +       {0x0000b050, 0x02020300},
18378 +       {0x0000b054, 0x02020301},
18379 +       {0x0000b058, 0x02020302},
18380 +       {0x0000b05c, 0x02020303},
18381 +       {0x0000b060, 0x02020400},
18382 +       {0x0000b064, 0x02030300},
18383 +       {0x0000b068, 0x02030301},
18384 +       {0x0000b06c, 0x02030302},
18385 +       {0x0000b070, 0x02030303},
18386 +       {0x0000b074, 0x02030400},
18387 +       {0x0000b078, 0x02040300},
18388 +       {0x0000b07c, 0x02040301},
18389 +       {0x0000b080, 0x02040302},
18390 +       {0x0000b084, 0x02040303},
18391 +       {0x0000b088, 0x02030500},
18392 +       {0x0000b08c, 0x02040400},
18393 +       {0x0000b090, 0x02050203},
18394 +       {0x0000b094, 0x02050204},
18395 +       {0x0000b098, 0x02050205},
18396 +       {0x0000b09c, 0x02040500},
18397 +       {0x0000b0a0, 0x02050301},
18398 +       {0x0000b0a4, 0x02050302},
18399 +       {0x0000b0a8, 0x02050303},
18400 +       {0x0000b0ac, 0x02050400},
18401 +       {0x0000b0b0, 0x02050401},
18402 +       {0x0000b0b4, 0x02050402},
18403 +       {0x0000b0b8, 0x02050403},
18404 +       {0x0000b0bc, 0x02050500},
18405 +       {0x0000b0c0, 0x02050501},
18406 +       {0x0000b0c4, 0x02050502},
18407 +       {0x0000b0c8, 0x02050503},
18408 +       {0x0000b0cc, 0x02050504},
18409 +       {0x0000b0d0, 0x02050600},
18410 +       {0x0000b0d4, 0x02050601},
18411 +       {0x0000b0d8, 0x02050602},
18412 +       {0x0000b0dc, 0x02050603},
18413 +       {0x0000b0e0, 0x02050604},
18414 +       {0x0000b0e4, 0x02050700},
18415 +       {0x0000b0e8, 0x02050701},
18416 +       {0x0000b0ec, 0x02050702},
18417 +       {0x0000b0f0, 0x02050703},
18418 +       {0x0000b0f4, 0x02050704},
18419 +       {0x0000b0f8, 0x02050705},
18420 +       {0x0000b0fc, 0x02050708},
18421 +       {0x0000b100, 0x02050709},
18422 +       {0x0000b104, 0x0205070a},
18423 +       {0x0000b108, 0x0205070b},
18424 +       {0x0000b10c, 0x0205070c},
18425 +       {0x0000b110, 0x0205070d},
18426 +       {0x0000b114, 0x02050710},
18427 +       {0x0000b118, 0x02050711},
18428 +       {0x0000b11c, 0x02050712},
18429 +       {0x0000b120, 0x02050713},
18430 +       {0x0000b124, 0x02050714},
18431 +       {0x0000b128, 0x02050715},
18432 +       {0x0000b12c, 0x02050730},
18433 +       {0x0000b130, 0x02050731},
18434 +       {0x0000b134, 0x02050732},
18435 +       {0x0000b138, 0x02050733},
18436 +       {0x0000b13c, 0x02050734},
18437 +       {0x0000b140, 0x02050735},
18438 +       {0x0000b144, 0x02050750},
18439 +       {0x0000b148, 0x02050751},
18440 +       {0x0000b14c, 0x02050752},
18441 +       {0x0000b150, 0x02050753},
18442 +       {0x0000b154, 0x02050754},
18443 +       {0x0000b158, 0x02050755},
18444 +       {0x0000b15c, 0x02050770},
18445 +       {0x0000b160, 0x02050771},
18446 +       {0x0000b164, 0x02050772},
18447 +       {0x0000b168, 0x02050773},
18448 +       {0x0000b16c, 0x02050774},
18449 +       {0x0000b170, 0x02050775},
18450 +       {0x0000b174, 0x00000776},
18451 +       {0x0000b178, 0x00000776},
18452 +       {0x0000b17c, 0x00000776},
18453 +       {0x0000b180, 0x00000776},
18454 +       {0x0000b184, 0x00000776},
18455 +       {0x0000b188, 0x00000776},
18456 +       {0x0000b18c, 0x00000776},
18457 +       {0x0000b190, 0x00000776},
18458 +       {0x0000b194, 0x00000776},
18459 +       {0x0000b198, 0x00000776},
18460 +       {0x0000b19c, 0x00000776},
18461 +       {0x0000b1a0, 0x00000776},
18462 +       {0x0000b1a4, 0x00000776},
18463 +       {0x0000b1a8, 0x00000776},
18464 +       {0x0000b1ac, 0x00000776},
18465 +       {0x0000b1b0, 0x00000776},
18466 +       {0x0000b1b4, 0x00000776},
18467 +       {0x0000b1b8, 0x00000776},
18468 +       {0x0000b1bc, 0x00000776},
18469 +       {0x0000b1c0, 0x00000776},
18470 +       {0x0000b1c4, 0x00000776},
18471 +       {0x0000b1c8, 0x00000776},
18472 +       {0x0000b1cc, 0x00000776},
18473 +       {0x0000b1d0, 0x00000776},
18474 +       {0x0000b1d4, 0x00000776},
18475 +       {0x0000b1d8, 0x00000776},
18476 +       {0x0000b1dc, 0x00000776},
18477 +       {0x0000b1e0, 0x00000776},
18478 +       {0x0000b1e4, 0x00000776},
18479 +       {0x0000b1e8, 0x00000776},
18480 +       {0x0000b1ec, 0x00000776},
18481 +       {0x0000b1f0, 0x00000776},
18482 +       {0x0000b1f4, 0x00000776},
18483 +       {0x0000b1f8, 0x00000776},
18484 +       {0x0000b1fc, 0x00000776},
18485 +};
18486 +
18487 +static const u32 ar9300_2p0_mac_postamble[][5] = {
18488 +       /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
18489 +       {0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160},
18490 +       {0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c},
18491 +       {0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38},
18492 +       {0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00},
18493 +       {0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b},
18494 +       {0x00008120, 0x08f04800, 0x08f04800, 0x08f04810, 0x08f04810},
18495 +       {0x000081d0, 0x00003210, 0x00003210, 0x0000320a, 0x0000320a},
18496 +       {0x00008318, 0x00003e80, 0x00007d00, 0x00006880, 0x00003440},
18497 +};
18498 +
18499 +static const u32 ar9300_2p0_soc_postamble[][5] = {
18500 +       /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
18501 +       {0x00007010, 0x00000023, 0x00000023, 0x00000022, 0x00000022},
18502 +};
18503 +
18504 +static const u32 ar9200_merlin_2p0_radio_core[][2] = {
18505 +       /* Addr      common    */
18506 +       {0x00007800, 0x00040000},
18507 +       {0x00007804, 0xdb005012},
18508 +       {0x00007808, 0x04924914},
18509 +       {0x0000780c, 0x21084210},
18510 +       {0x00007810, 0x6d801300},
18511 +       {0x00007814, 0x0019beff},
18512 +       {0x00007818, 0x07e41000},
18513 +       {0x0000781c, 0x00392000},
18514 +       {0x00007820, 0x92592480},
18515 +       {0x00007824, 0x00040000},
18516 +       {0x00007828, 0xdb005012},
18517 +       {0x0000782c, 0x04924914},
18518 +       {0x00007830, 0x21084210},
18519 +       {0x00007834, 0x6d801300},
18520 +       {0x00007838, 0x0019beff},
18521 +       {0x0000783c, 0x07e40000},
18522 +       {0x00007840, 0x00392000},
18523 +       {0x00007844, 0x92592480},
18524 +       {0x00007848, 0x00100000},
18525 +       {0x0000784c, 0x773f0567},
18526 +       {0x00007850, 0x54214514},
18527 +       {0x00007854, 0x12035828},
18528 +       {0x00007858, 0x92592692},
18529 +       {0x0000785c, 0x00000000},
18530 +       {0x00007860, 0x56400000},
18531 +       {0x00007864, 0x0a8e370e},
18532 +       {0x00007868, 0xc0102850},
18533 +       {0x0000786c, 0x812d4000},
18534 +       {0x00007870, 0x807ec400},
18535 +       {0x00007874, 0x001b6db0},
18536 +       {0x00007878, 0x00376b63},
18537 +       {0x0000787c, 0x06db6db6},
18538 +       {0x00007880, 0x006d8000},
18539 +       {0x00007884, 0xffeffffe},
18540 +       {0x00007888, 0xffeffffe},
18541 +       {0x0000788c, 0x00010000},
18542 +       {0x00007890, 0x02060aeb},
18543 +       {0x00007894, 0x5a108000},
18544 +};
18545 +
18546 +static const u32 ar9300_2p0_baseband_postamble[][5] = {
18547 +       /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
18548 +       {0x00009810, 0xd00a8005, 0xd00a8005, 0xd00a8005, 0xd00a8005},
18549 +       {0x00009820, 0x206a022e, 0x206a022e, 0x206a012e, 0x206a012e},
18550 +       {0x00009824, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0},
18551 +       {0x00009828, 0x06903081, 0x06903081, 0x06903881, 0x06903881},
18552 +       {0x0000982c, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4},
18553 +       {0x00009830, 0x0000059c, 0x0000059c, 0x0000059c, 0x0000059c},
18554 +       {0x00009c00, 0x00000044, 0x000000c4, 0x000000c4, 0x00000044},
18555 +       {0x00009e00, 0x0372161e, 0x0372161e, 0x037216a0, 0x037216a0},
18556 +       {0x00009e04, 0x00802020, 0x00802020, 0x00802020, 0x00802020},
18557 +       {0x00009e0c, 0x6c4000e2, 0x6d4000e2, 0x6d4000e2, 0x6c4000e2},
18558 +       {0x00009e10, 0x7ec88d2e, 0x7ec88d2e, 0x7ec84d2e, 0x7ec84d2e},
18559 +       {0x00009e14, 0x31395d5e, 0x3139605e, 0x3139605e, 0x31395d5e},
18560 +       {0x00009e18, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
18561 +       {0x00009e1c, 0x0001cf9c, 0x0001cf9c, 0x00021f9c, 0x00021f9c},
18562 +       {0x00009e20, 0x000003b5, 0x000003b5, 0x000003ce, 0x000003ce},
18563 +       {0x00009e2c, 0x0000001c, 0x0000001c, 0x00000021, 0x00000021},
18564 +       {0x00009e44, 0x02321e27, 0x02321e27, 0x02282324, 0x02282324},
18565 +       {0x00009e48, 0x5030201a, 0x5030201a, 0x50302010, 0x50302010},
18566 +       {0x00009fc8, 0x0003f000, 0x0003f000, 0x0001a000, 0x0001a000},
18567 +       {0x0000a204, 0x000037c0, 0x000037c4, 0x000037c4, 0x000037c0},
18568 +       {0x0000a208, 0x00000104, 0x00000104, 0x00000004, 0x00000004},
18569 +       {0x0000a230, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b},
18570 +       {0x0000a238, 0xffb81018, 0xffb81018, 0xffb81018, 0xffb81018},
18571 +       {0x0000a250, 0x00000000, 0x00000000, 0x00000210, 0x00000108},
18572 +       {0x0000a254, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898},
18573 +       {0x0000a258, 0x02020002, 0x02020002, 0x02020002, 0x02020002},
18574 +       {0x0000a25c, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e},
18575 +       {0x0000a260, 0x0a021501, 0x0a021501, 0x3a021501, 0x3a021501},
18576 +       {0x0000a264, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e},
18577 +       {0x0000a280, 0x00000007, 0x00000007, 0x0000000b, 0x0000000b},
18578 +       {0x0000a284, 0x00000000, 0x00000000, 0x00000150, 0x00000150},
18579 +       {0x0000a288, 0x00000110, 0x00000110, 0x00000110, 0x00000110},
18580 +       {0x0000a28c, 0x00022222, 0x00022222, 0x00022222, 0x00022222},
18581 +       {0x0000a2c4, 0x00158d18, 0x00158d18, 0x00158d18, 0x00158d18},
18582 +       {0x0000a2d0, 0x00071981, 0x00071981, 0x00071981, 0x00071982},
18583 +       {0x0000a2d8, 0xf999a83a, 0xf999a83a, 0xf999a83a, 0xf999a83a},
18584 +       {0x0000a358, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
18585 +       {0x0000a830, 0x0000019c, 0x0000019c, 0x0000019c, 0x0000019c},
18586 +       {0x0000ae04, 0x00800000, 0x00800000, 0x00800000, 0x00800000},
18587 +       {0x0000ae18, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
18588 +       {0x0000ae1c, 0x0000019c, 0x0000019c, 0x0000019c, 0x0000019c},
18589 +       {0x0000ae20, 0x000001b5, 0x000001b5, 0x000001ce, 0x000001ce},
18590 +       {0x0000b284, 0x00000000, 0x00000000, 0x00000150, 0x00000150},
18591 +       {0x0000b830, 0x0000019c, 0x0000019c, 0x0000019c, 0x0000019c},
18592 +       {0x0000be04, 0x00800000, 0x00800000, 0x00800000, 0x00800000},
18593 +       {0x0000be18, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
18594 +       {0x0000be1c, 0x0000019c, 0x0000019c, 0x0000019c, 0x0000019c},
18595 +       {0x0000be20, 0x000001b5, 0x000001b5, 0x000001ce, 0x000001ce},
18596 +       {0x0000c284, 0x00000000, 0x00000000, 0x00000150, 0x00000150},
18597 +};
18598 +
18599 +static const u32 ar9300_2p0_baseband_core[][2] = {
18600 +       /* Addr      allmodes  */
18601 +       {0x00009800, 0xafe68e30},
18602 +       {0x00009804, 0xfd14e000},
18603 +       {0x00009808, 0x9c0a9f6b},
18604 +       {0x0000980c, 0x04900000},
18605 +       {0x00009814, 0x9280c00a},
18606 +       {0x00009818, 0x00000000},
18607 +       {0x0000981c, 0x00020028},
18608 +       {0x00009834, 0x5f3ca3de},
18609 +       {0x00009838, 0x0108ecff},
18610 +       {0x0000983c, 0x14750600},
18611 +       {0x00009880, 0x201fff00},
18612 +       {0x00009884, 0x00001042},
18613 +       {0x000098a4, 0x00200400},
18614 +       {0x000098b0, 0x52440bbe},
18615 +       {0x000098d0, 0x004b6a8e},
18616 +       {0x000098d4, 0x00000820},
18617 +       {0x000098dc, 0x00000000},
18618 +       {0x000098f0, 0x00000000},
18619 +       {0x000098f4, 0x00000000},
18620 +       {0x00009c04, 0xff55ff55},
18621 +       {0x00009c08, 0x0320ff55},
18622 +       {0x00009c0c, 0x00000000},
18623 +       {0x00009c10, 0x00000000},
18624 +       {0x00009c14, 0x00046384},
18625 +       {0x00009c18, 0x05b6b440},
18626 +       {0x00009c1c, 0x00b6b440},
18627 +       {0x00009d00, 0xc080a333},
18628 +       {0x00009d04, 0x40206c10},
18629 +       {0x00009d08, 0x009c4060},
18630 +       {0x00009d0c, 0x9883800a},
18631 +       {0x00009d10, 0x01834061},
18632 +       {0x00009d14, 0x00c0040b},
18633 +       {0x00009d18, 0x00000000},
18634 +       {0x00009e08, 0x0038233c},
18635 +       {0x00009e24, 0x990bb515},
18636 +       {0x00009e28, 0x0c6f0000},
18637 +       {0x00009e30, 0x06336f77},
18638 +       {0x00009e34, 0x6af6532f},
18639 +       {0x00009e38, 0x0cc80c00},
18640 +       {0x00009e3c, 0xcf946222},
18641 +       {0x00009e40, 0x0d261820},
18642 +       {0x00009e4c, 0x00001004},
18643 +       {0x00009e50, 0x00ff03f1},
18644 +       {0x00009e54, 0x00000000},
18645 +       {0x00009fc0, 0x803e4788},
18646 +       {0x00009fc4, 0x0001efb5},
18647 +       {0x00009fcc, 0x40000014},
18648 +       {0x00009fd0, 0x01193b93},
18649 +       {0x0000a20c, 0x00000000},
18650 +       {0x0000a220, 0x00000000},
18651 +       {0x0000a224, 0x00000000},
18652 +       {0x0000a228, 0x10002310},
18653 +       {0x0000a22c, 0x01036a1e},
18654 +       {0x0000a234, 0x10000fff},
18655 +       {0x0000a23c, 0x00000000},
18656 +       {0x0000a244, 0x0c000000},
18657 +       {0x0000a2a0, 0x00000001},
18658 +       {0x0000a2c0, 0x00000001},
18659 +       {0x0000a2c8, 0x00000000},
18660 +       {0x0000a2cc, 0x18c43433},
18661 +       {0x0000a2d4, 0x00000000},
18662 +       {0x0000a2dc, 0x00000000},
18663 +       {0x0000a2e0, 0x00000000},
18664 +       {0x0000a2e4, 0x00000000},
18665 +       {0x0000a2e8, 0x00000000},
18666 +       {0x0000a2ec, 0x00000000},
18667 +       {0x0000a2f0, 0x00000000},
18668 +       {0x0000a2f4, 0x00000000},
18669 +       {0x0000a2f8, 0x00000000},
18670 +       {0x0000a344, 0x00000000},
18671 +       {0x0000a34c, 0x00000000},
18672 +       {0x0000a350, 0x0000a000},
18673 +       {0x0000a364, 0x00000000},
18674 +       {0x0000a370, 0x00000000},
18675 +       {0x0000a390, 0x00000001},
18676 +       {0x0000a394, 0x00000444},
18677 +       {0x0000a398, 0x001f0e0f},
18678 +       {0x0000a39c, 0x0075393f},
18679 +       {0x0000a3a0, 0xb79f6427},
18680 +       {0x0000a3a4, 0x00000000},
18681 +       {0x0000a3a8, 0xaaaaaaaa},
18682 +       {0x0000a3ac, 0x3c466478},
18683 +       {0x0000a3c0, 0x20202020},
18684 +       {0x0000a3c4, 0x22222220},
18685 +       {0x0000a3c8, 0x20200020},
18686 +       {0x0000a3cc, 0x20202020},
18687 +       {0x0000a3d0, 0x20202020},
18688 +       {0x0000a3d4, 0x20202020},
18689 +       {0x0000a3d8, 0x20202020},
18690 +       {0x0000a3dc, 0x20202020},
18691 +       {0x0000a3e0, 0x20202020},
18692 +       {0x0000a3e4, 0x20202020},
18693 +       {0x0000a3e8, 0x20202020},
18694 +       {0x0000a3ec, 0x20202020},
18695 +       {0x0000a3f0, 0x00000000},
18696 +       {0x0000a3f4, 0x00000246},
18697 +       {0x0000a3f8, 0x0cdbd380},
18698 +       {0x0000a3fc, 0x000f0f01},
18699 +       {0x0000a400, 0x8fa91f01},
18700 +       {0x0000a404, 0x00000000},
18701 +       {0x0000a408, 0x0e79e5c6},
18702 +       {0x0000a40c, 0x00820820},
18703 +       {0x0000a414, 0x1ce739ce},
18704 +       {0x0000a418, 0x7d001dce},
18705 +       {0x0000a41c, 0x1ce739ce},
18706 +       {0x0000a420, 0x000001ce},
18707 +       {0x0000a424, 0x1ce739ce},
18708 +       {0x0000a428, 0x000001ce},
18709 +       {0x0000a42c, 0x1ce739ce},
18710 +       {0x0000a430, 0x1ce739ce},
18711 +       {0x0000a434, 0x00000000},
18712 +       {0x0000a438, 0x00001801},
18713 +       {0x0000a43c, 0x00000000},
18714 +       {0x0000a440, 0x00000000},
18715 +       {0x0000a444, 0x00000000},
18716 +       {0x0000a448, 0x07000080},
18717 +       {0x0000a44c, 0x00000001},
18718 +       {0x0000a450, 0x00010000},
18719 +       {0x0000a458, 0x00000000},
18720 +       {0x0000a600, 0x00000000},
18721 +       {0x0000a604, 0x00000000},
18722 +       {0x0000a608, 0x00000000},
18723 +       {0x0000a60c, 0x00000000},
18724 +       {0x0000a610, 0x00000000},
18725 +       {0x0000a614, 0x00000000},
18726 +       {0x0000a618, 0x00000000},
18727 +       {0x0000a61c, 0x00000000},
18728 +       {0x0000a620, 0x00000000},
18729 +       {0x0000a624, 0x00000000},
18730 +       {0x0000a628, 0x00000000},
18731 +       {0x0000a62c, 0x00000000},
18732 +       {0x0000a630, 0x00000000},
18733 +       {0x0000a634, 0x00000000},
18734 +       {0x0000a638, 0x00000000},
18735 +       {0x0000a63c, 0x00000000},
18736 +       {0x0000a640, 0x00000000},
18737 +       {0x0000a644, 0x3ffd9d74},
18738 +       {0x0000a648, 0x0048060a},
18739 +       {0x0000a64c, 0x00000637},
18740 +       {0x0000a670, 0x03020100},
18741 +       {0x0000a674, 0x09080504},
18742 +       {0x0000a678, 0x0d0c0b0a},
18743 +       {0x0000a67c, 0x13121110},
18744 +       {0x0000a680, 0x31301514},
18745 +       {0x0000a684, 0x35343332},
18746 +       {0x0000a688, 0x00000036},
18747 +       {0x0000a690, 0x00000838},
18748 +       {0x0000a7c0, 0x00000000},
18749 +       {0x0000a7c4, 0xfffffffc},
18750 +       {0x0000a7c8, 0x00000000},
18751 +       {0x0000a7cc, 0x00000000},
18752 +       {0x0000a7d0, 0x00000000},
18753 +       {0x0000a7d4, 0x00000004},
18754 +       {0x0000a7dc, 0x00000001},
18755 +       {0x0000a8d0, 0x004b6a8e},
18756 +       {0x0000a8d4, 0x00000820},
18757 +       {0x0000a8dc, 0x00000000},
18758 +       {0x0000a8f0, 0x00000000},
18759 +       {0x0000a8f4, 0x00000000},
18760 +       {0x0000b2d0, 0x00000080},
18761 +       {0x0000b2d4, 0x00000000},
18762 +       {0x0000b2dc, 0x00000000},
18763 +       {0x0000b2e0, 0x00000000},
18764 +       {0x0000b2e4, 0x00000000},
18765 +       {0x0000b2e8, 0x00000000},
18766 +       {0x0000b2ec, 0x00000000},
18767 +       {0x0000b2f0, 0x00000000},
18768 +       {0x0000b2f4, 0x00000000},
18769 +       {0x0000b2f8, 0x00000000},
18770 +       {0x0000b408, 0x0e79e5c0},
18771 +       {0x0000b40c, 0x00820820},
18772 +       {0x0000b420, 0x00000000},
18773 +       {0x0000b8d0, 0x004b6a8e},
18774 +       {0x0000b8d4, 0x00000820},
18775 +       {0x0000b8dc, 0x00000000},
18776 +       {0x0000b8f0, 0x00000000},
18777 +       {0x0000b8f4, 0x00000000},
18778 +       {0x0000c2d0, 0x00000080},
18779 +       {0x0000c2d4, 0x00000000},
18780 +       {0x0000c2dc, 0x00000000},
18781 +       {0x0000c2e0, 0x00000000},
18782 +       {0x0000c2e4, 0x00000000},
18783 +       {0x0000c2e8, 0x00000000},
18784 +       {0x0000c2ec, 0x00000000},
18785 +       {0x0000c2f0, 0x00000000},
18786 +       {0x0000c2f4, 0x00000000},
18787 +       {0x0000c2f8, 0x00000000},
18788 +       {0x0000c408, 0x0e79e5c0},
18789 +       {0x0000c40c, 0x00820820},
18790 +       {0x0000c420, 0x00000000},
18791 +};
18792 +
18793 +static const u32 ar9300Modes_high_power_tx_gain_table_2p0[][5] = {
18794 +       /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
18795 +       {0x0000a410, 0x000050d9, 0x000050d9, 0x000050da, 0x000050da},
18796 +       {0x0000a500, 0x00020220, 0x00020220, 0x00000000, 0x00000000},
18797 +       {0x0000a504, 0x06020223, 0x06020223, 0x04000002, 0x04000002},
18798 +       {0x0000a508, 0x0b022220, 0x0b022220, 0x08000004, 0x08000004},
18799 +       {0x0000a50c, 0x10022223, 0x10022223, 0x0b000200, 0x0b000200},
18800 +       {0x0000a510, 0x17022620, 0x17022620, 0x0f000202, 0x0f000202},
18801 +       {0x0000a514, 0x1b022622, 0x1b022622, 0x11000400, 0x11000400},
18802 +       {0x0000a518, 0x1f022822, 0x1f022822, 0x15000402, 0x15000402},
18803 +       {0x0000a51c, 0x24022842, 0x24022842, 0x19000404, 0x19000404},
18804 +       {0x0000a520, 0x28042840, 0x28042840, 0x1b000603, 0x1b000603},
18805 +       {0x0000a524, 0x2c042842, 0x2c042842, 0x1f000a02, 0x1f000a02},
18806 +       {0x0000a528, 0x30042844, 0x30042844, 0x23000a04, 0x23000a04},
18807 +       {0x0000a52c, 0x34042846, 0x34042846, 0x26000a20, 0x26000a20},
18808 +       {0x0000a530, 0x39042869, 0x39042869, 0x2a000e20, 0x2a000e20},
18809 +       {0x0000a534, 0x3d062869, 0x3d062869, 0x2e000e22, 0x2e000e22},
18810 +       {0x0000a538, 0x44062c69, 0x44062c69, 0x31000e24, 0x31000e24},
18811 +       {0x0000a53c, 0x48063069, 0x48063069, 0x34001640, 0x34001640},
18812 +       {0x0000a540, 0x4c0a3065, 0x4c0a3065, 0x38001660, 0x38001660},
18813 +       {0x0000a544, 0x500a3069, 0x500a3069, 0x3b001861, 0x3b001861},
18814 +       {0x0000a548, 0x530a3469, 0x530a3469, 0x3e001a81, 0x3e001a81},
18815 +       {0x0000a54c, 0x590a7464, 0x590a7464, 0x42001a83, 0x42001a83},
18816 +       {0x0000a550, 0x5e0a7865, 0x5e0a7865, 0x44001c84, 0x44001c84},
18817 +       {0x0000a554, 0x630a7e66, 0x630a7e66, 0x48001ce3, 0x48001ce3},
18818 +       {0x0000a558, 0x680a7e89, 0x680a7e89, 0x4c001ce5, 0x4c001ce5},
18819 +       {0x0000a55c, 0x6e0a7e8c, 0x6e0a7e8c, 0x50001ce9, 0x50001ce9},
18820 +       {0x0000a560, 0x730e7e8c, 0x730e7e8c, 0x54001ceb, 0x54001ceb},
18821 +       {0x0000a564, 0x730e7e8c, 0x730e7e8c, 0x56001eec, 0x56001eec},
18822 +       {0x0000a568, 0x730e7e8c, 0x730e7e8c, 0x56001eec, 0x56001eec},
18823 +       {0x0000a56c, 0x730e7e8c, 0x730e7e8c, 0x56001eec, 0x56001eec},
18824 +       {0x0000a570, 0x730e7e8c, 0x730e7e8c, 0x56001eec, 0x56001eec},
18825 +       {0x0000a574, 0x730e7e8c, 0x730e7e8c, 0x56001eec, 0x56001eec},
18826 +       {0x0000a578, 0x730e7e8c, 0x730e7e8c, 0x56001eec, 0x56001eec},
18827 +       {0x0000a57c, 0x730e7e8c, 0x730e7e8c, 0x56001eec, 0x56001eec},
18828 +       {0x0000a580, 0x00820220, 0x00820220, 0x00800000, 0x00800000},
18829 +       {0x0000a584, 0x06820223, 0x06820223, 0x04800002, 0x04800002},
18830 +       {0x0000a588, 0x0b822220, 0x0b822220, 0x08800004, 0x08800004},
18831 +       {0x0000a58c, 0x10822223, 0x10822223, 0x0b800200, 0x0b800200},
18832 +       {0x0000a590, 0x17822620, 0x17822620, 0x0f800202, 0x0f800202},
18833 +       {0x0000a594, 0x1b822622, 0x1b822622, 0x11800400, 0x11800400},
18834 +       {0x0000a598, 0x1f822822, 0x1f822822, 0x15800402, 0x15800402},
18835 +       {0x0000a59c, 0x24822842, 0x24822842, 0x19800404, 0x19800404},
18836 +       {0x0000a5a0, 0x28842840, 0x28842840, 0x1b800603, 0x1b800603},
18837 +       {0x0000a5a4, 0x2c842842, 0x2c842842, 0x1f800a02, 0x1f800a02},
18838 +       {0x0000a5a8, 0x30842844, 0x30842844, 0x23800a04, 0x23800a04},
18839 +       {0x0000a5ac, 0x34842846, 0x34842846, 0x26800a20, 0x26800a20},
18840 +       {0x0000a5b0, 0x39842869, 0x39842869, 0x2a800e20, 0x2a800e20},
18841 +       {0x0000a5b4, 0x3d862869, 0x3d862869, 0x2e800e22, 0x2e800e22},
18842 +       {0x0000a5b8, 0x44862c69, 0x44862c69, 0x31800e24, 0x31800e24},
18843 +       {0x0000a5bc, 0x48863069, 0x48863069, 0x34801640, 0x34801640},
18844 +       {0x0000a5c0, 0x4c8a3065, 0x4c8a3065, 0x38801660, 0x38801660},
18845 +       {0x0000a5c4, 0x508a3069, 0x508a3069, 0x3b801861, 0x3b801861},
18846 +       {0x0000a5c8, 0x538a3469, 0x538a3469, 0x3e801a81, 0x3e801a81},
18847 +       {0x0000a5cc, 0x598a7464, 0x598a7464, 0x42801a83, 0x42801a83},
18848 +       {0x0000a5d0, 0x5e8a7865, 0x5e8a7865, 0x44801c84, 0x44801c84},
18849 +       {0x0000a5d4, 0x638a7e66, 0x638a7e66, 0x48801ce3, 0x48801ce3},
18850 +       {0x0000a5d8, 0x688a7e89, 0x688a7e89, 0x4c801ce5, 0x4c801ce5},
18851 +       {0x0000a5dc, 0x6e8a7e8c, 0x6e8a7e8c, 0x50801ce9, 0x50801ce9},
18852 +       {0x0000a5e0, 0x738e7e8c, 0x738e7e8c, 0x54801ceb, 0x54801ceb},
18853 +       {0x0000a5e4, 0x738e7e8c, 0x738e7e8c, 0x56801eec, 0x56801eec},
18854 +       {0x0000a5e8, 0x738e7e8c, 0x738e7e8c, 0x56801eec, 0x56801eec},
18855 +       {0x0000a5ec, 0x738e7e8c, 0x738e7e8c, 0x56801eec, 0x56801eec},
18856 +       {0x0000a5f0, 0x738e7e8c, 0x738e7e8c, 0x56801eec, 0x56801eec},
18857 +       {0x0000a5f4, 0x738e7e8c, 0x738e7e8c, 0x56801eec, 0x56801eec},
18858 +       {0x0000a5f8, 0x738e7e8c, 0x738e7e8c, 0x56801eec, 0x56801eec},
18859 +       {0x0000a5fc, 0x738e7e8c, 0x738e7e8c, 0x56801eec, 0x56801eec},
18860 +       {0x00016044, 0x056db2e6, 0x056db2e6, 0x056db2e6, 0x056db2e6},
18861 +       {0x00016048, 0xad241a61, 0xad241a61, 0xad241a61, 0xad241a61},
18862 +       {0x00016068, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c},
18863 +       {0x00016444, 0x056db2e6, 0x056db2e6, 0x056db2e6, 0x056db2e6},
18864 +       {0x00016448, 0xad241a61, 0xad241a61, 0xad241a61, 0xad241a61},
18865 +       {0x00016468, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c},
18866 +       {0x00016844, 0x056db2e6, 0x056db2e6, 0x056db2e6, 0x056db2e6},
18867 +       {0x00016848, 0xad241a61, 0xad241a61, 0xad241a61, 0xad241a61},
18868 +       {0x00016868, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c},
18869 +};
18870 +
18871 +static const u32 ar9300Modes_high_ob_db_tx_gain_table_2p0[][5] = {
18872 +       /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
18873 +       {0x0000a410, 0x000050d9, 0x000050d9, 0x000050da, 0x000050da},
18874 +       {0x0000a500, 0x00020220, 0x00020220, 0x00000000, 0x00000000},
18875 +       {0x0000a504, 0x06020223, 0x06020223, 0x04000002, 0x04000002},
18876 +       {0x0000a508, 0x0b022220, 0x0b022220, 0x08000004, 0x08000004},
18877 +       {0x0000a50c, 0x10022223, 0x10022223, 0x0b000200, 0x0b000200},
18878 +       {0x0000a510, 0x17022620, 0x17022620, 0x0f000202, 0x0f000202},
18879 +       {0x0000a514, 0x1b022622, 0x1b022622, 0x11000400, 0x11000400},
18880 +       {0x0000a518, 0x1f022822, 0x1f022822, 0x15000402, 0x15000402},
18881 +       {0x0000a51c, 0x24022842, 0x24022842, 0x19000404, 0x19000404},
18882 +       {0x0000a520, 0x28042840, 0x28042840, 0x1b000603, 0x1b000603},
18883 +       {0x0000a524, 0x2c042842, 0x2c042842, 0x1f000a02, 0x1f000a02},
18884 +       {0x0000a528, 0x30042844, 0x30042844, 0x23000a04, 0x23000a04},
18885 +       {0x0000a52c, 0x34042846, 0x34042846, 0x26000a20, 0x26000a20},
18886 +       {0x0000a530, 0x39042869, 0x39042869, 0x2a000e20, 0x2a000e20},
18887 +       {0x0000a534, 0x3d062869, 0x3d062869, 0x2e000e22, 0x2e000e22},
18888 +       {0x0000a538, 0x44062c69, 0x44062c69, 0x31000e24, 0x31000e24},
18889 +       {0x0000a53c, 0x48063069, 0x48063069, 0x34001640, 0x34001640},
18890 +       {0x0000a540, 0x4c0a3065, 0x4c0a3065, 0x38001660, 0x38001660},
18891 +       {0x0000a544, 0x500a3069, 0x500a3069, 0x3b001861, 0x3b001861},
18892 +       {0x0000a548, 0x530a3469, 0x530a3469, 0x3e001a81, 0x3e001a81},
18893 +       {0x0000a54c, 0x590a7464, 0x590a7464, 0x42001a83, 0x42001a83},
18894 +       {0x0000a550, 0x5e0a7865, 0x5e0a7865, 0x44001c84, 0x44001c84},
18895 +       {0x0000a554, 0x630a7e66, 0x630a7e66, 0x48001ce3, 0x48001ce3},
18896 +       {0x0000a558, 0x680a7e89, 0x680a7e89, 0x4c001ce5, 0x4c001ce5},
18897 +       {0x0000a55c, 0x6e0a7e8c, 0x6e0a7e8c, 0x50001ce9, 0x50001ce9},
18898 +       {0x0000a560, 0x730e7e8c, 0x730e7e8c, 0x54001ceb, 0x54001ceb},
18899 +       {0x0000a564, 0x730e7e8c, 0x730e7e8c, 0x56001eec, 0x56001eec},
18900 +       {0x0000a568, 0x730e7e8c, 0x730e7e8c, 0x56001eec, 0x56001eec},
18901 +       {0x0000a56c, 0x730e7e8c, 0x730e7e8c, 0x56001eec, 0x56001eec},
18902 +       {0x0000a570, 0x730e7e8c, 0x730e7e8c, 0x56001eec, 0x56001eec},
18903 +       {0x0000a574, 0x730e7e8c, 0x730e7e8c, 0x56001eec, 0x56001eec},
18904 +       {0x0000a578, 0x730e7e8c, 0x730e7e8c, 0x56001eec, 0x56001eec},
18905 +       {0x0000a57c, 0x730e7e8c, 0x730e7e8c, 0x56001eec, 0x56001eec},
18906 +       {0x0000a580, 0x00820220, 0x00820220, 0x00800000, 0x00800000},
18907 +       {0x0000a584, 0x06820223, 0x06820223, 0x04800002, 0x04800002},
18908 +       {0x0000a588, 0x0b822220, 0x0b822220, 0x08800004, 0x08800004},
18909 +       {0x0000a58c, 0x10822223, 0x10822223, 0x0b800200, 0x0b800200},
18910 +       {0x0000a590, 0x17822620, 0x17822620, 0x0f800202, 0x0f800202},
18911 +       {0x0000a594, 0x1b822622, 0x1b822622, 0x11800400, 0x11800400},
18912 +       {0x0000a598, 0x1f822822, 0x1f822822, 0x15800402, 0x15800402},
18913 +       {0x0000a59c, 0x24822842, 0x24822842, 0x19800404, 0x19800404},
18914 +       {0x0000a5a0, 0x28842840, 0x28842840, 0x1b800603, 0x1b800603},
18915 +       {0x0000a5a4, 0x2c842842, 0x2c842842, 0x1f800a02, 0x1f800a02},
18916 +       {0x0000a5a8, 0x30842844, 0x30842844, 0x23800a04, 0x23800a04},
18917 +       {0x0000a5ac, 0x34842846, 0x34842846, 0x26800a20, 0x26800a20},
18918 +       {0x0000a5b0, 0x39842869, 0x39842869, 0x2a800e20, 0x2a800e20},
18919 +       {0x0000a5b4, 0x3d862869, 0x3d862869, 0x2e800e22, 0x2e800e22},
18920 +       {0x0000a5b8, 0x44862c69, 0x44862c69, 0x31800e24, 0x31800e24},
18921 +       {0x0000a5bc, 0x48863069, 0x48863069, 0x34801640, 0x34801640},
18922 +       {0x0000a5c0, 0x4c8a3065, 0x4c8a3065, 0x38801660, 0x38801660},
18923 +       {0x0000a5c4, 0x508a3069, 0x508a3069, 0x3b801861, 0x3b801861},
18924 +       {0x0000a5c8, 0x538a3469, 0x538a3469, 0x3e801a81, 0x3e801a81},
18925 +       {0x0000a5cc, 0x598a7464, 0x598a7464, 0x42801a83, 0x42801a83},
18926 +       {0x0000a5d0, 0x5e8a7865, 0x5e8a7865, 0x44801c84, 0x44801c84},
18927 +       {0x0000a5d4, 0x638a7e66, 0x638a7e66, 0x48801ce3, 0x48801ce3},
18928 +       {0x0000a5d8, 0x688a7e89, 0x688a7e89, 0x4c801ce5, 0x4c801ce5},
18929 +       {0x0000a5dc, 0x6e8a7e8c, 0x6e8a7e8c, 0x50801ce9, 0x50801ce9},
18930 +       {0x0000a5e0, 0x738e7e8c, 0x738e7e8c, 0x54801ceb, 0x54801ceb},
18931 +       {0x0000a5e4, 0x738e7e8c, 0x738e7e8c, 0x56801eec, 0x56801eec},
18932 +       {0x0000a5e8, 0x738e7e8c, 0x738e7e8c, 0x56801eec, 0x56801eec},
18933 +       {0x0000a5ec, 0x738e7e8c, 0x738e7e8c, 0x56801eec, 0x56801eec},
18934 +       {0x0000a5f0, 0x738e7e8c, 0x738e7e8c, 0x56801eec, 0x56801eec},
18935 +       {0x0000a5f4, 0x738e7e8c, 0x738e7e8c, 0x56801eec, 0x56801eec},
18936 +       {0x0000a5f8, 0x738e7e8c, 0x738e7e8c, 0x56801eec, 0x56801eec},
18937 +       {0x0000a5fc, 0x738e7e8c, 0x738e7e8c, 0x56801eec, 0x56801eec},
18938 +       {0x00016044, 0x056db2e4, 0x056db2e4, 0x056db2e4, 0x056db2e4},
18939 +       {0x00016048, 0x8c001a61, 0x8c001a61, 0x8c001a61, 0x8c001a61},
18940 +       {0x00016068, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
18941 +       {0x00016444, 0x056db2e4, 0x056db2e4, 0x056db2e4, 0x056db2e4},
18942 +       {0x00016448, 0x8c001a61, 0x8c001a61, 0x8c001a61, 0x8c001a61},
18943 +       {0x00016468, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
18944 +       {0x00016844, 0x056db2e4, 0x056db2e4, 0x056db2e4, 0x056db2e4},
18945 +       {0x00016848, 0x8c001a61, 0x8c001a61, 0x8c001a61, 0x8c001a61},
18946 +       {0x00016868, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
18947 +};
18948 +
18949 +static const u32 ar9300Common_rx_gain_table_2p0[][2] = {
18950 +       /* Addr      allmodes  */
18951 +       {0x0000a000, 0x00010000},
18952 +       {0x0000a004, 0x00030002},
18953 +       {0x0000a008, 0x00050004},
18954 +       {0x0000a00c, 0x00810080},
18955 +       {0x0000a010, 0x01800082},
18956 +       {0x0000a014, 0x01820181},
18957 +       {0x0000a018, 0x01840183},
18958 +       {0x0000a01c, 0x01880185},
18959 +       {0x0000a020, 0x018a0189},
18960 +       {0x0000a024, 0x02850284},
18961 +       {0x0000a028, 0x02890288},
18962 +       {0x0000a02c, 0x028b028a},
18963 +       {0x0000a030, 0x028d028c},
18964 +       {0x0000a034, 0x02910290},
18965 +       {0x0000a038, 0x02930292},
18966 +       {0x0000a03c, 0x03910390},
18967 +       {0x0000a040, 0x03930392},
18968 +       {0x0000a044, 0x03950394},
18969 +       {0x0000a048, 0x00000396},
18970 +       {0x0000a04c, 0x00000000},
18971 +       {0x0000a050, 0x00000000},
18972 +       {0x0000a054, 0x00000000},
18973 +       {0x0000a058, 0x00000000},
18974 +       {0x0000a05c, 0x00000000},
18975 +       {0x0000a060, 0x00000000},
18976 +       {0x0000a064, 0x00000000},
18977 +       {0x0000a068, 0x00000000},
18978 +       {0x0000a06c, 0x00000000},
18979 +       {0x0000a070, 0x00000000},
18980 +       {0x0000a074, 0x00000000},
18981 +       {0x0000a078, 0x00000000},
18982 +       {0x0000a07c, 0x00000000},
18983 +       {0x0000a080, 0x28282828},
18984 +       {0x0000a084, 0x21212128},
18985 +       {0x0000a088, 0x21212121},
18986 +       {0x0000a08c, 0x1c1c1c21},
18987 +       {0x0000a090, 0x1c1c1c1c},
18988 +       {0x0000a094, 0x17171c1c},
18989 +       {0x0000a098, 0x02020212},
18990 +       {0x0000a09c, 0x02020202},
18991 +       {0x0000a0a0, 0x00000000},
18992 +       {0x0000a0a4, 0x00000000},
18993 +       {0x0000a0a8, 0x00000000},
18994 +       {0x0000a0ac, 0x00000000},
18995 +       {0x0000a0b0, 0x00000000},
18996 +       {0x0000a0b4, 0x00000000},
18997 +       {0x0000a0b8, 0x00000000},
18998 +       {0x0000a0bc, 0x00000000},
18999 +       {0x0000a0c0, 0x001f0000},
19000 +       {0x0000a0c4, 0x011f0100},
19001 +       {0x0000a0c8, 0x011d011e},
19002 +       {0x0000a0cc, 0x011b011c},
19003 +       {0x0000a0d0, 0x02030204},
19004 +       {0x0000a0d4, 0x02010202},
19005 +       {0x0000a0d8, 0x021f0200},
19006 +       {0x0000a0dc, 0x021d021e},
19007 +       {0x0000a0e0, 0x03010302},
19008 +       {0x0000a0e4, 0x031f0300},
19009 +       {0x0000a0e8, 0x0402031e},
19010 +       {0x0000a0ec, 0x04000401},
19011 +       {0x0000a0f0, 0x041e041f},
19012 +       {0x0000a0f4, 0x05010502},
19013 +       {0x0000a0f8, 0x051f0500},
19014 +       {0x0000a0fc, 0x0602051e},
19015 +       {0x0000a100, 0x06000601},
19016 +       {0x0000a104, 0x061e061f},
19017 +       {0x0000a108, 0x0703061d},
19018 +       {0x0000a10c, 0x07010702},
19019 +       {0x0000a110, 0x00000700},
19020 +       {0x0000a114, 0x00000000},
19021 +       {0x0000a118, 0x00000000},
19022 +       {0x0000a11c, 0x00000000},
19023 +       {0x0000a120, 0x00000000},
19024 +       {0x0000a124, 0x00000000},
19025 +       {0x0000a128, 0x00000000},
19026 +       {0x0000a12c, 0x00000000},
19027 +       {0x0000a130, 0x00000000},
19028 +       {0x0000a134, 0x00000000},
19029 +       {0x0000a138, 0x00000000},
19030 +       {0x0000a13c, 0x00000000},
19031 +       {0x0000a140, 0x001f0000},
19032 +       {0x0000a144, 0x011f0100},
19033 +       {0x0000a148, 0x011d011e},
19034 +       {0x0000a14c, 0x011b011c},
19035 +       {0x0000a150, 0x02030204},
19036 +       {0x0000a154, 0x02010202},
19037 +       {0x0000a158, 0x021f0200},
19038 +       {0x0000a15c, 0x021d021e},
19039 +       {0x0000a160, 0x03010302},
19040 +       {0x0000a164, 0x031f0300},
19041 +       {0x0000a168, 0x0402031e},
19042 +       {0x0000a16c, 0x04000401},
19043 +       {0x0000a170, 0x041e041f},
19044 +       {0x0000a174, 0x05010502},
19045 +       {0x0000a178, 0x051f0500},
19046 +       {0x0000a17c, 0x0602051e},
19047 +       {0x0000a180, 0x06000601},
19048 +       {0x0000a184, 0x061e061f},
19049 +       {0x0000a188, 0x0703061d},
19050 +       {0x0000a18c, 0x07010702},
19051 +       {0x0000a190, 0x00000700},
19052 +       {0x0000a194, 0x00000000},
19053 +       {0x0000a198, 0x00000000},
19054 +       {0x0000a19c, 0x00000000},
19055 +       {0x0000a1a0, 0x00000000},
19056 +       {0x0000a1a4, 0x00000000},
19057 +       {0x0000a1a8, 0x00000000},
19058 +       {0x0000a1ac, 0x00000000},
19059 +       {0x0000a1b0, 0x00000000},
19060 +       {0x0000a1b4, 0x00000000},
19061 +       {0x0000a1b8, 0x00000000},
19062 +       {0x0000a1bc, 0x00000000},
19063 +       {0x0000a1c0, 0x00000000},
19064 +       {0x0000a1c4, 0x00000000},
19065 +       {0x0000a1c8, 0x00000000},
19066 +       {0x0000a1cc, 0x00000000},
19067 +       {0x0000a1d0, 0x00000000},
19068 +       {0x0000a1d4, 0x00000000},
19069 +       {0x0000a1d8, 0x00000000},
19070 +       {0x0000a1dc, 0x00000000},
19071 +       {0x0000a1e0, 0x00000000},
19072 +       {0x0000a1e4, 0x00000000},
19073 +       {0x0000a1e8, 0x00000000},
19074 +       {0x0000a1ec, 0x00000000},
19075 +       {0x0000a1f0, 0x00000396},
19076 +       {0x0000a1f4, 0x00000396},
19077 +       {0x0000a1f8, 0x00000396},
19078 +       {0x0000a1fc, 0x00000196},
19079 +       {0x0000b000, 0x00010000},
19080 +       {0x0000b004, 0x00030002},
19081 +       {0x0000b008, 0x00050004},
19082 +       {0x0000b00c, 0x00810080},
19083 +       {0x0000b010, 0x00830082},
19084 +       {0x0000b014, 0x01810180},
19085 +       {0x0000b018, 0x01830182},
19086 +       {0x0000b01c, 0x01850184},
19087 +       {0x0000b020, 0x02810280},
19088 +       {0x0000b024, 0x02830282},
19089 +       {0x0000b028, 0x02850284},
19090 +       {0x0000b02c, 0x02890288},
19091 +       {0x0000b030, 0x028b028a},
19092 +       {0x0000b034, 0x0388028c},
19093 +       {0x0000b038, 0x038a0389},
19094 +       {0x0000b03c, 0x038c038b},
19095 +       {0x0000b040, 0x0390038d},
19096 +       {0x0000b044, 0x03920391},
19097 +       {0x0000b048, 0x03940393},
19098 +       {0x0000b04c, 0x03960395},
19099 +       {0x0000b050, 0x00000000},
19100 +       {0x0000b054, 0x00000000},
19101 +       {0x0000b058, 0x00000000},
19102 +       {0x0000b05c, 0x00000000},
19103 +       {0x0000b060, 0x00000000},
19104 +       {0x0000b064, 0x00000000},
19105 +       {0x0000b068, 0x00000000},
19106 +       {0x0000b06c, 0x00000000},
19107 +       {0x0000b070, 0x00000000},
19108 +       {0x0000b074, 0x00000000},
19109 +       {0x0000b078, 0x00000000},
19110 +       {0x0000b07c, 0x00000000},
19111 +       {0x0000b080, 0x32323232},
19112 +       {0x0000b084, 0x2f2f3232},
19113 +       {0x0000b088, 0x23282a2d},
19114 +       {0x0000b08c, 0x1c1e2123},
19115 +       {0x0000b090, 0x14171919},
19116 +       {0x0000b094, 0x0e0e1214},
19117 +       {0x0000b098, 0x03050707},
19118 +       {0x0000b09c, 0x00030303},
19119 +       {0x0000b0a0, 0x00000000},
19120 +       {0x0000b0a4, 0x00000000},
19121 +       {0x0000b0a8, 0x00000000},
19122 +       {0x0000b0ac, 0x00000000},
19123 +       {0x0000b0b0, 0x00000000},
19124 +       {0x0000b0b4, 0x00000000},
19125 +       {0x0000b0b8, 0x00000000},
19126 +       {0x0000b0bc, 0x00000000},
19127 +       {0x0000b0c0, 0x003f0020},
19128 +       {0x0000b0c4, 0x00400041},
19129 +       {0x0000b0c8, 0x0140005f},
19130 +       {0x0000b0cc, 0x0160015f},
19131 +       {0x0000b0d0, 0x017e017f},
19132 +       {0x0000b0d4, 0x02410242},
19133 +       {0x0000b0d8, 0x025f0240},
19134 +       {0x0000b0dc, 0x027f0260},
19135 +       {0x0000b0e0, 0x0341027e},
19136 +       {0x0000b0e4, 0x035f0340},
19137 +       {0x0000b0e8, 0x037f0360},
19138 +       {0x0000b0ec, 0x04400441},
19139 +       {0x0000b0f0, 0x0460045f},
19140 +       {0x0000b0f4, 0x0541047f},
19141 +       {0x0000b0f8, 0x055f0540},
19142 +       {0x0000b0fc, 0x057f0560},
19143 +       {0x0000b100, 0x06400641},
19144 +       {0x0000b104, 0x0660065f},
19145 +       {0x0000b108, 0x067e067f},
19146 +       {0x0000b10c, 0x07410742},
19147 +       {0x0000b110, 0x075f0740},
19148 +       {0x0000b114, 0x077f0760},
19149 +       {0x0000b118, 0x07800781},
19150 +       {0x0000b11c, 0x07a0079f},
19151 +       {0x0000b120, 0x07c107bf},
19152 +       {0x0000b124, 0x000007c0},
19153 +       {0x0000b128, 0x00000000},
19154 +       {0x0000b12c, 0x00000000},
19155 +       {0x0000b130, 0x00000000},
19156 +       {0x0000b134, 0x00000000},
19157 +       {0x0000b138, 0x00000000},
19158 +       {0x0000b13c, 0x00000000},
19159 +       {0x0000b140, 0x003f0020},
19160 +       {0x0000b144, 0x00400041},
19161 +       {0x0000b148, 0x0140005f},
19162 +       {0x0000b14c, 0x0160015f},
19163 +       {0x0000b150, 0x017e017f},
19164 +       {0x0000b154, 0x02410242},
19165 +       {0x0000b158, 0x025f0240},
19166 +       {0x0000b15c, 0x027f0260},
19167 +       {0x0000b160, 0x0341027e},
19168 +       {0x0000b164, 0x035f0340},
19169 +       {0x0000b168, 0x037f0360},
19170 +       {0x0000b16c, 0x04400441},
19171 +       {0x0000b170, 0x0460045f},
19172 +       {0x0000b174, 0x0541047f},
19173 +       {0x0000b178, 0x055f0540},
19174 +       {0x0000b17c, 0x057f0560},
19175 +       {0x0000b180, 0x06400641},
19176 +       {0x0000b184, 0x0660065f},
19177 +       {0x0000b188, 0x067e067f},
19178 +       {0x0000b18c, 0x07410742},
19179 +       {0x0000b190, 0x075f0740},
19180 +       {0x0000b194, 0x077f0760},
19181 +       {0x0000b198, 0x07800781},
19182 +       {0x0000b19c, 0x07a0079f},
19183 +       {0x0000b1a0, 0x07c107bf},
19184 +       {0x0000b1a4, 0x000007c0},
19185 +       {0x0000b1a8, 0x00000000},
19186 +       {0x0000b1ac, 0x00000000},
19187 +       {0x0000b1b0, 0x00000000},
19188 +       {0x0000b1b4, 0x00000000},
19189 +       {0x0000b1b8, 0x00000000},
19190 +       {0x0000b1bc, 0x00000000},
19191 +       {0x0000b1c0, 0x00000000},
19192 +       {0x0000b1c4, 0x00000000},
19193 +       {0x0000b1c8, 0x00000000},
19194 +       {0x0000b1cc, 0x00000000},
19195 +       {0x0000b1d0, 0x00000000},
19196 +       {0x0000b1d4, 0x00000000},
19197 +       {0x0000b1d8, 0x00000000},
19198 +       {0x0000b1dc, 0x00000000},
19199 +       {0x0000b1e0, 0x00000000},
19200 +       {0x0000b1e4, 0x00000000},
19201 +       {0x0000b1e8, 0x00000000},
19202 +       {0x0000b1ec, 0x00000000},
19203 +       {0x0000b1f0, 0x00000396},
19204 +       {0x0000b1f4, 0x00000396},
19205 +       {0x0000b1f8, 0x00000396},
19206 +       {0x0000b1fc, 0x00000196},
19207 +};
19208 +
19209 +static const u32 ar9300Modes_low_ob_db_tx_gain_table_2p0[][5] = {
19210 +       /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
19211 +       {0x0000a410, 0x000050da, 0x000050da, 0x000050da, 0x000050da},
19212 +       {0x0000a500, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
19213 +       {0x0000a504, 0x06000003, 0x06000003, 0x04000002, 0x04000002},
19214 +       {0x0000a508, 0x0a000020, 0x0a000020, 0x08000004, 0x08000004},
19215 +       {0x0000a50c, 0x10000023, 0x10000023, 0x0b000200, 0x0b000200},
19216 +       {0x0000a510, 0x16000220, 0x16000220, 0x0f000202, 0x0f000202},
19217 +       {0x0000a514, 0x1c000223, 0x1c000223, 0x12000400, 0x12000400},
19218 +       {0x0000a518, 0x21020220, 0x21020220, 0x16000402, 0x16000402},
19219 +       {0x0000a51c, 0x27020223, 0x27020223, 0x19000404, 0x19000404},
19220 +       {0x0000a520, 0x2b022220, 0x2b022220, 0x1c000603, 0x1c000603},
19221 +       {0x0000a524, 0x2f022222, 0x2f022222, 0x21000a02, 0x21000a02},
19222 +       {0x0000a528, 0x34022225, 0x34022225, 0x25000a04, 0x25000a04},
19223 +       {0x0000a52c, 0x3a02222a, 0x3a02222a, 0x28000a20, 0x28000a20},
19224 +       {0x0000a530, 0x3e02222c, 0x3e02222c, 0x2c000e20, 0x2c000e20},
19225 +       {0x0000a534, 0x4202242a, 0x4202242a, 0x30000e22, 0x30000e22},
19226 +       {0x0000a538, 0x4702244a, 0x4702244a, 0x34000e24, 0x34000e24},
19227 +       {0x0000a53c, 0x4b02244c, 0x4b02244c, 0x38001640, 0x38001640},
19228 +       {0x0000a540, 0x4e02246c, 0x4e02246c, 0x3c001660, 0x3c001660},
19229 +       {0x0000a544, 0x5302266c, 0x5302266c, 0x3f001861, 0x3f001861},
19230 +       {0x0000a548, 0x5702286c, 0x5702286c, 0x43001a81, 0x43001a81},
19231 +       {0x0000a54c, 0x5c04286b, 0x5c04286b, 0x47001a83, 0x47001a83},
19232 +       {0x0000a550, 0x61042a6c, 0x61042a6c, 0x4a001c84, 0x4a001c84},
19233 +       {0x0000a554, 0x66062a6c, 0x66062a6c, 0x4e001ce3, 0x4e001ce3},
19234 +       {0x0000a558, 0x6b062e6c, 0x6b062e6c, 0x52001ce5, 0x52001ce5},
19235 +       {0x0000a55c, 0x7006308c, 0x7006308c, 0x56001ce9, 0x56001ce9},
19236 +       {0x0000a560, 0x730a308a, 0x730a308a, 0x5a001ceb, 0x5a001ceb},
19237 +       {0x0000a564, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
19238 +       {0x0000a568, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
19239 +       {0x0000a56c, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
19240 +       {0x0000a570, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
19241 +       {0x0000a574, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
19242 +       {0x0000a578, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
19243 +       {0x0000a57c, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
19244 +       {0x0000a580, 0x00800000, 0x00800000, 0x00800000, 0x00800000},
19245 +       {0x0000a584, 0x06800003, 0x06800003, 0x04800002, 0x04800002},
19246 +       {0x0000a588, 0x0a800020, 0x0a800020, 0x08800004, 0x08800004},
19247 +       {0x0000a58c, 0x10800023, 0x10800023, 0x0b800200, 0x0b800200},
19248 +       {0x0000a590, 0x16800220, 0x16800220, 0x0f800202, 0x0f800202},
19249 +       {0x0000a594, 0x1c800223, 0x1c800223, 0x12800400, 0x12800400},
19250 +       {0x0000a598, 0x21820220, 0x21820220, 0x16800402, 0x16800402},
19251 +       {0x0000a59c, 0x27820223, 0x27820223, 0x19800404, 0x19800404},
19252 +       {0x0000a5a0, 0x2b822220, 0x2b822220, 0x1c800603, 0x1c800603},
19253 +       {0x0000a5a4, 0x2f822222, 0x2f822222, 0x21800a02, 0x21800a02},
19254 +       {0x0000a5a8, 0x34822225, 0x34822225, 0x25800a04, 0x25800a04},
19255 +       {0x0000a5ac, 0x3a82222a, 0x3a82222a, 0x28800a20, 0x28800a20},
19256 +       {0x0000a5b0, 0x3e82222c, 0x3e82222c, 0x2c800e20, 0x2c800e20},
19257 +       {0x0000a5b4, 0x4282242a, 0x4282242a, 0x30800e22, 0x30800e22},
19258 +       {0x0000a5b8, 0x4782244a, 0x4782244a, 0x34800e24, 0x34800e24},
19259 +       {0x0000a5bc, 0x4b82244c, 0x4b82244c, 0x38801640, 0x38801640},
19260 +       {0x0000a5c0, 0x4e82246c, 0x4e82246c, 0x3c801660, 0x3c801660},
19261 +       {0x0000a5c4, 0x5382266c, 0x5382266c, 0x3f801861, 0x3f801861},
19262 +       {0x0000a5c8, 0x5782286c, 0x5782286c, 0x43801a81, 0x43801a81},
19263 +       {0x0000a5cc, 0x5c84286b, 0x5c84286b, 0x47801a83, 0x47801a83},
19264 +       {0x0000a5d0, 0x61842a6c, 0x61842a6c, 0x4a801c84, 0x4a801c84},
19265 +       {0x0000a5d4, 0x66862a6c, 0x66862a6c, 0x4e801ce3, 0x4e801ce3},
19266 +       {0x0000a5d8, 0x6b862e6c, 0x6b862e6c, 0x52801ce5, 0x52801ce5},
19267 +       {0x0000a5dc, 0x7086308c, 0x7086308c, 0x56801ce9, 0x56801ce9},
19268 +       {0x0000a5e0, 0x738a308a, 0x738a308a, 0x5a801ceb, 0x5a801ceb},
19269 +       {0x0000a5e4, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
19270 +       {0x0000a5e8, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
19271 +       {0x0000a5ec, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
19272 +       {0x0000a5f0, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
19273 +       {0x0000a5f4, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
19274 +       {0x0000a5f8, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
19275 +       {0x0000a5fc, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
19276 +       {0x00016044, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4},
19277 +       {0x00016048, 0x64001a61, 0x64001a61, 0x64001a61, 0x64001a61},
19278 +       {0x00016068, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
19279 +       {0x00016444, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4},
19280 +       {0x00016448, 0x64001a61, 0x64001a61, 0x64001a61, 0x64001a61},
19281 +       {0x00016468, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
19282 +       {0x00016844, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4},
19283 +       {0x00016848, 0x64001a61, 0x64001a61, 0x64001a61, 0x64001a61},
19284 +       {0x00016868, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
19285 +};
19286 +
19287 +static const u32 ar9300_2p0_mac_core[][2] = {
19288 +       /* Addr      allmodes  */
19289 +       {0x00000008, 0x00000000},
19290 +       {0x00000030, 0x00020085},
19291 +       {0x00000034, 0x00000005},
19292 +       {0x00000040, 0x00000000},
19293 +       {0x00000044, 0x00000000},
19294 +       {0x00000048, 0x00000008},
19295 +       {0x0000004c, 0x00000010},
19296 +       {0x00000050, 0x00000000},
19297 +       {0x00001040, 0x002ffc0f},
19298 +       {0x00001044, 0x002ffc0f},
19299 +       {0x00001048, 0x002ffc0f},
19300 +       {0x0000104c, 0x002ffc0f},
19301 +       {0x00001050, 0x002ffc0f},
19302 +       {0x00001054, 0x002ffc0f},
19303 +       {0x00001058, 0x002ffc0f},
19304 +       {0x0000105c, 0x002ffc0f},
19305 +       {0x00001060, 0x002ffc0f},
19306 +       {0x00001064, 0x002ffc0f},
19307 +       {0x000010f0, 0x00000100},
19308 +       {0x00001270, 0x00000000},
19309 +       {0x000012b0, 0x00000000},
19310 +       {0x000012f0, 0x00000000},
19311 +       {0x0000143c, 0x00000000},
19312 +       {0x0000147c, 0x00000000},
19313 +       {0x00008000, 0x00000000},
19314 +       {0x00008004, 0x00000000},
19315 +       {0x00008008, 0x00000000},
19316 +       {0x0000800c, 0x00000000},
19317 +       {0x00008018, 0x00000000},
19318 +       {0x00008020, 0x00000000},
19319 +       {0x00008038, 0x00000000},
19320 +       {0x0000803c, 0x00000000},
19321 +       {0x00008040, 0x00000000},
19322 +       {0x00008044, 0x00000000},
19323 +       {0x00008048, 0x00000000},
19324 +       {0x0000804c, 0xffffffff},
19325 +       {0x00008054, 0x00000000},
19326 +       {0x00008058, 0x00000000},
19327 +       {0x0000805c, 0x000fc78f},
19328 +       {0x00008060, 0x0000000f},
19329 +       {0x00008064, 0x00000000},
19330 +       {0x00008070, 0x00000310},
19331 +       {0x00008074, 0x00000020},
19332 +       {0x00008078, 0x00000000},
19333 +       {0x0000809c, 0x0000000f},
19334 +       {0x000080a0, 0x00000000},
19335 +       {0x000080a4, 0x02ff0000},
19336 +       {0x000080a8, 0x0e070605},
19337 +       {0x000080ac, 0x0000000d},
19338 +       {0x000080b0, 0x00000000},
19339 +       {0x000080b4, 0x00000000},
19340 +       {0x000080b8, 0x00000000},
19341 +       {0x000080bc, 0x00000000},
19342 +       {0x000080c0, 0x2a800000},
19343 +       {0x000080c4, 0x06900168},
19344 +       {0x000080c8, 0x13881c20},
19345 +       {0x000080cc, 0x01f40000},
19346 +       {0x000080d0, 0x00252500},
19347 +       {0x000080d4, 0x00a00000},
19348 +       {0x000080d8, 0x00400000},
19349 +       {0x000080dc, 0x00000000},
19350 +       {0x000080e0, 0xffffffff},
19351 +       {0x000080e4, 0x0000ffff},
19352 +       {0x000080e8, 0x3f3f3f3f},
19353 +       {0x000080ec, 0x00000000},
19354 +       {0x000080f0, 0x00000000},
19355 +       {0x000080f4, 0x00000000},
19356 +       {0x000080fc, 0x00020000},
19357 +       {0x00008100, 0x00000000},
19358 +       {0x00008108, 0x00000052},
19359 +       {0x0000810c, 0x00000000},
19360 +       {0x00008110, 0x00000000},
19361 +       {0x00008114, 0x000007ff},
19362 +       {0x00008118, 0x000000aa},
19363 +       {0x0000811c, 0x00003210},
19364 +       {0x00008124, 0x00000000},
19365 +       {0x00008128, 0x00000000},
19366 +       {0x0000812c, 0x00000000},
19367 +       {0x00008130, 0x00000000},
19368 +       {0x00008134, 0x00000000},
19369 +       {0x00008138, 0x00000000},
19370 +       {0x0000813c, 0x0000ffff},
19371 +       {0x00008144, 0xffffffff},
19372 +       {0x00008168, 0x00000000},
19373 +       {0x0000816c, 0x00000000},
19374 +       {0x00008170, 0x18486200},
19375 +       {0x00008174, 0x33332210},
19376 +       {0x00008178, 0x00000000},
19377 +       {0x0000817c, 0x00020000},
19378 +       {0x000081c0, 0x00000000},
19379 +       {0x000081c4, 0x33332210},
19380 +       {0x000081c8, 0x00000000},
19381 +       {0x000081cc, 0x00000000},
19382 +       {0x000081d4, 0x00000000},
19383 +       {0x000081ec, 0x00000000},
19384 +       {0x000081f0, 0x00000000},
19385 +       {0x000081f4, 0x00000000},
19386 +       {0x000081f8, 0x00000000},
19387 +       {0x000081fc, 0x00000000},
19388 +       {0x00008240, 0x00100000},
19389 +       {0x00008244, 0x0010f424},
19390 +       {0x00008248, 0x00000800},
19391 +       {0x0000824c, 0x0001e848},
19392 +       {0x00008250, 0x00000000},
19393 +       {0x00008254, 0x00000000},
19394 +       {0x00008258, 0x00000000},
19395 +       {0x0000825c, 0x40000000},
19396 +       {0x00008260, 0x00080922},
19397 +       {0x00008264, 0x98a00010},
19398 +       {0x00008268, 0xffffffff},
19399 +       {0x0000826c, 0x0000ffff},
19400 +       {0x00008270, 0x00000000},
19401 +       {0x00008274, 0x40000000},
19402 +       {0x00008278, 0x003e4180},
19403 +       {0x0000827c, 0x00000004},
19404 +       {0x00008284, 0x0000002c},
19405 +       {0x00008288, 0x0000002c},
19406 +       {0x0000828c, 0x000000ff},
19407 +       {0x00008294, 0x00000000},
19408 +       {0x00008298, 0x00000000},
19409 +       {0x0000829c, 0x00000000},
19410 +       {0x00008300, 0x00000140},
19411 +       {0x00008314, 0x00000000},
19412 +       {0x0000831c, 0x0000010d},
19413 +       {0x00008328, 0x00000000},
19414 +       {0x0000832c, 0x00000007},
19415 +       {0x00008330, 0x00000302},
19416 +       {0x00008334, 0x00000700},
19417 +       {0x00008338, 0x00ff0000},
19418 +       {0x0000833c, 0x02400000},
19419 +       {0x00008340, 0x000107ff},
19420 +       {0x00008344, 0xaa48105b},
19421 +       {0x00008348, 0x008f0000},
19422 +       {0x0000835c, 0x00000000},
19423 +       {0x00008360, 0xffffffff},
19424 +       {0x00008364, 0xffffffff},
19425 +       {0x00008368, 0x00000000},
19426 +       {0x00008370, 0x00000000},
19427 +       {0x00008374, 0x000000ff},
19428 +       {0x00008378, 0x00000000},
19429 +       {0x0000837c, 0x00000000},
19430 +       {0x00008380, 0xffffffff},
19431 +       {0x00008384, 0xffffffff},
19432 +       {0x00008390, 0xffffffff},
19433 +       {0x00008394, 0xffffffff},
19434 +       {0x00008398, 0x00000000},
19435 +       {0x0000839c, 0x00000000},
19436 +       {0x000083a0, 0x00000000},
19437 +       {0x000083a4, 0x0000fa14},
19438 +       {0x000083a8, 0x000f0c00},
19439 +       {0x000083ac, 0x33332210},
19440 +       {0x000083b0, 0x33332210},
19441 +       {0x000083b4, 0x33332210},
19442 +       {0x000083b8, 0x33332210},
19443 +       {0x000083bc, 0x00000000},
19444 +       {0x000083c0, 0x00000000},
19445 +       {0x000083c4, 0x00000000},
19446 +       {0x000083c8, 0x00000000},
19447 +       {0x000083cc, 0x00000200},
19448 +       {0x000083d0, 0x000301ff},
19449 +};
19450 +
19451 +static const u32 ar9300Common_wo_xlna_rx_gain_table_2p0[][2] = {
19452 +       /* Addr      allmodes  */
19453 +       {0x0000a000, 0x00010000},
19454 +       {0x0000a004, 0x00030002},
19455 +       {0x0000a008, 0x00050004},
19456 +       {0x0000a00c, 0x00810080},
19457 +       {0x0000a010, 0x01800082},
19458 +       {0x0000a014, 0x01820181},
19459 +       {0x0000a018, 0x01840183},
19460 +       {0x0000a01c, 0x01880185},
19461 +       {0x0000a020, 0x018a0189},
19462 +       {0x0000a024, 0x02850284},
19463 +       {0x0000a028, 0x02890288},
19464 +       {0x0000a02c, 0x03850384},
19465 +       {0x0000a030, 0x03890388},
19466 +       {0x0000a034, 0x038b038a},
19467 +       {0x0000a038, 0x038d038c},
19468 +       {0x0000a03c, 0x03910390},
19469 +       {0x0000a040, 0x03930392},
19470 +       {0x0000a044, 0x03950394},
19471 +       {0x0000a048, 0x00000396},
19472 +       {0x0000a04c, 0x00000000},
19473 +       {0x0000a050, 0x00000000},
19474 +       {0x0000a054, 0x00000000},
19475 +       {0x0000a058, 0x00000000},
19476 +       {0x0000a05c, 0x00000000},
19477 +       {0x0000a060, 0x00000000},
19478 +       {0x0000a064, 0x00000000},
19479 +       {0x0000a068, 0x00000000},
19480 +       {0x0000a06c, 0x00000000},
19481 +       {0x0000a070, 0x00000000},
19482 +       {0x0000a074, 0x00000000},
19483 +       {0x0000a078, 0x00000000},
19484 +       {0x0000a07c, 0x00000000},
19485 +       {0x0000a080, 0x28282828},
19486 +       {0x0000a084, 0x28282828},
19487 +       {0x0000a088, 0x28282828},
19488 +       {0x0000a08c, 0x28282828},
19489 +       {0x0000a090, 0x28282828},
19490 +       {0x0000a094, 0x21212128},
19491 +       {0x0000a098, 0x171c1c1c},
19492 +       {0x0000a09c, 0x02020212},
19493 +       {0x0000a0a0, 0x00000202},
19494 +       {0x0000a0a4, 0x00000000},
19495 +       {0x0000a0a8, 0x00000000},
19496 +       {0x0000a0ac, 0x00000000},
19497 +       {0x0000a0b0, 0x00000000},
19498 +       {0x0000a0b4, 0x00000000},
19499 +       {0x0000a0b8, 0x00000000},
19500 +       {0x0000a0bc, 0x00000000},
19501 +       {0x0000a0c0, 0x001f0000},
19502 +       {0x0000a0c4, 0x011f0100},
19503 +       {0x0000a0c8, 0x011d011e},
19504 +       {0x0000a0cc, 0x011b011c},
19505 +       {0x0000a0d0, 0x02030204},
19506 +       {0x0000a0d4, 0x02010202},
19507 +       {0x0000a0d8, 0x021f0200},
19508 +       {0x0000a0dc, 0x021d021e},
19509 +       {0x0000a0e0, 0x03010302},
19510 +       {0x0000a0e4, 0x031f0300},
19511 +       {0x0000a0e8, 0x0402031e},
19512 +       {0x0000a0ec, 0x04000401},
19513 +       {0x0000a0f0, 0x041e041f},
19514 +       {0x0000a0f4, 0x05010502},
19515 +       {0x0000a0f8, 0x051f0500},
19516 +       {0x0000a0fc, 0x0602051e},
19517 +       {0x0000a100, 0x06000601},
19518 +       {0x0000a104, 0x061e061f},
19519 +       {0x0000a108, 0x0703061d},
19520 +       {0x0000a10c, 0x07010702},
19521 +       {0x0000a110, 0x00000700},
19522 +       {0x0000a114, 0x00000000},
19523 +       {0x0000a118, 0x00000000},
19524 +       {0x0000a11c, 0x00000000},
19525 +       {0x0000a120, 0x00000000},
19526 +       {0x0000a124, 0x00000000},
19527 +       {0x0000a128, 0x00000000},
19528 +       {0x0000a12c, 0x00000000},
19529 +       {0x0000a130, 0x00000000},
19530 +       {0x0000a134, 0x00000000},
19531 +       {0x0000a138, 0x00000000},
19532 +       {0x0000a13c, 0x00000000},
19533 +       {0x0000a140, 0x001f0000},
19534 +       {0x0000a144, 0x011f0100},
19535 +       {0x0000a148, 0x011d011e},
19536 +       {0x0000a14c, 0x011b011c},
19537 +       {0x0000a150, 0x02030204},
19538 +       {0x0000a154, 0x02010202},
19539 +       {0x0000a158, 0x021f0200},
19540 +       {0x0000a15c, 0x021d021e},
19541 +       {0x0000a160, 0x03010302},
19542 +       {0x0000a164, 0x031f0300},
19543 +       {0x0000a168, 0x0402031e},
19544 +       {0x0000a16c, 0x04000401},
19545 +       {0x0000a170, 0x041e041f},
19546 +       {0x0000a174, 0x05010502},
19547 +       {0x0000a178, 0x051f0500},
19548 +       {0x0000a17c, 0x0602051e},
19549 +       {0x0000a180, 0x06000601},
19550 +       {0x0000a184, 0x061e061f},
19551 +       {0x0000a188, 0x0703061d},
19552 +       {0x0000a18c, 0x07010702},
19553 +       {0x0000a190, 0x00000700},
19554 +       {0x0000a194, 0x00000000},
19555 +       {0x0000a198, 0x00000000},
19556 +       {0x0000a19c, 0x00000000},
19557 +       {0x0000a1a0, 0x00000000},
19558 +       {0x0000a1a4, 0x00000000},
19559 +       {0x0000a1a8, 0x00000000},
19560 +       {0x0000a1ac, 0x00000000},
19561 +       {0x0000a1b0, 0x00000000},
19562 +       {0x0000a1b4, 0x00000000},
19563 +       {0x0000a1b8, 0x00000000},
19564 +       {0x0000a1bc, 0x00000000},
19565 +       {0x0000a1c0, 0x00000000},
19566 +       {0x0000a1c4, 0x00000000},
19567 +       {0x0000a1c8, 0x00000000},
19568 +       {0x0000a1cc, 0x00000000},
19569 +       {0x0000a1d0, 0x00000000},
19570 +       {0x0000a1d4, 0x00000000},
19571 +       {0x0000a1d8, 0x00000000},
19572 +       {0x0000a1dc, 0x00000000},
19573 +       {0x0000a1e0, 0x00000000},
19574 +       {0x0000a1e4, 0x00000000},
19575 +       {0x0000a1e8, 0x00000000},
19576 +       {0x0000a1ec, 0x00000000},
19577 +       {0x0000a1f0, 0x00000396},
19578 +       {0x0000a1f4, 0x00000396},
19579 +       {0x0000a1f8, 0x00000396},
19580 +       {0x0000a1fc, 0x00000296},
19581 +       {0x0000b000, 0x00010000},
19582 +       {0x0000b004, 0x00030002},
19583 +       {0x0000b008, 0x00050004},
19584 +       {0x0000b00c, 0x00810080},
19585 +       {0x0000b010, 0x00830082},
19586 +       {0x0000b014, 0x01810180},
19587 +       {0x0000b018, 0x01830182},
19588 +       {0x0000b01c, 0x01850184},
19589 +       {0x0000b020, 0x02810280},
19590 +       {0x0000b024, 0x02830282},
19591 +       {0x0000b028, 0x02850284},
19592 +       {0x0000b02c, 0x02890288},
19593 +       {0x0000b030, 0x028b028a},
19594 +       {0x0000b034, 0x0388028c},
19595 +       {0x0000b038, 0x038a0389},
19596 +       {0x0000b03c, 0x038c038b},
19597 +       {0x0000b040, 0x0390038d},
19598 +       {0x0000b044, 0x03920391},
19599 +       {0x0000b048, 0x03940393},
19600 +       {0x0000b04c, 0x03960395},
19601 +       {0x0000b050, 0x00000000},
19602 +       {0x0000b054, 0x00000000},
19603 +       {0x0000b058, 0x00000000},
19604 +       {0x0000b05c, 0x00000000},
19605 +       {0x0000b060, 0x00000000},
19606 +       {0x0000b064, 0x00000000},
19607 +       {0x0000b068, 0x00000000},
19608 +       {0x0000b06c, 0x00000000},
19609 +       {0x0000b070, 0x00000000},
19610 +       {0x0000b074, 0x00000000},
19611 +       {0x0000b078, 0x00000000},
19612 +       {0x0000b07c, 0x00000000},
19613 +       {0x0000b080, 0x32323232},
19614 +       {0x0000b084, 0x2f2f3232},
19615 +       {0x0000b088, 0x23282a2d},
19616 +       {0x0000b08c, 0x1c1e2123},
19617 +       {0x0000b090, 0x14171919},
19618 +       {0x0000b094, 0x0e0e1214},
19619 +       {0x0000b098, 0x03050707},
19620 +       {0x0000b09c, 0x00030303},
19621 +       {0x0000b0a0, 0x00000000},
19622 +       {0x0000b0a4, 0x00000000},
19623 +       {0x0000b0a8, 0x00000000},
19624 +       {0x0000b0ac, 0x00000000},
19625 +       {0x0000b0b0, 0x00000000},
19626 +       {0x0000b0b4, 0x00000000},
19627 +       {0x0000b0b8, 0x00000000},
19628 +       {0x0000b0bc, 0x00000000},
19629 +       {0x0000b0c0, 0x003f0020},
19630 +       {0x0000b0c4, 0x00400041},
19631 +       {0x0000b0c8, 0x0140005f},
19632 +       {0x0000b0cc, 0x0160015f},
19633 +       {0x0000b0d0, 0x017e017f},
19634 +       {0x0000b0d4, 0x02410242},
19635 +       {0x0000b0d8, 0x025f0240},
19636 +       {0x0000b0dc, 0x027f0260},
19637 +       {0x0000b0e0, 0x0341027e},
19638 +       {0x0000b0e4, 0x035f0340},
19639 +       {0x0000b0e8, 0x037f0360},
19640 +       {0x0000b0ec, 0x04400441},
19641 +       {0x0000b0f0, 0x0460045f},
19642 +       {0x0000b0f4, 0x0541047f},
19643 +       {0x0000b0f8, 0x055f0540},
19644 +       {0x0000b0fc, 0x057f0560},
19645 +       {0x0000b100, 0x06400641},
19646 +       {0x0000b104, 0x0660065f},
19647 +       {0x0000b108, 0x067e067f},
19648 +       {0x0000b10c, 0x07410742},
19649 +       {0x0000b110, 0x075f0740},
19650 +       {0x0000b114, 0x077f0760},
19651 +       {0x0000b118, 0x07800781},
19652 +       {0x0000b11c, 0x07a0079f},
19653 +       {0x0000b120, 0x07c107bf},
19654 +       {0x0000b124, 0x000007c0},
19655 +       {0x0000b128, 0x00000000},
19656 +       {0x0000b12c, 0x00000000},
19657 +       {0x0000b130, 0x00000000},
19658 +       {0x0000b134, 0x00000000},
19659 +       {0x0000b138, 0x00000000},
19660 +       {0x0000b13c, 0x00000000},
19661 +       {0x0000b140, 0x003f0020},
19662 +       {0x0000b144, 0x00400041},
19663 +       {0x0000b148, 0x0140005f},
19664 +       {0x0000b14c, 0x0160015f},
19665 +       {0x0000b150, 0x017e017f},
19666 +       {0x0000b154, 0x02410242},
19667 +       {0x0000b158, 0x025f0240},
19668 +       {0x0000b15c, 0x027f0260},
19669 +       {0x0000b160, 0x0341027e},
19670 +       {0x0000b164, 0x035f0340},
19671 +       {0x0000b168, 0x037f0360},
19672 +       {0x0000b16c, 0x04400441},
19673 +       {0x0000b170, 0x0460045f},
19674 +       {0x0000b174, 0x0541047f},
19675 +       {0x0000b178, 0x055f0540},
19676 +       {0x0000b17c, 0x057f0560},
19677 +       {0x0000b180, 0x06400641},
19678 +       {0x0000b184, 0x0660065f},
19679 +       {0x0000b188, 0x067e067f},
19680 +       {0x0000b18c, 0x07410742},
19681 +       {0x0000b190, 0x075f0740},
19682 +       {0x0000b194, 0x077f0760},
19683 +       {0x0000b198, 0x07800781},
19684 +       {0x0000b19c, 0x07a0079f},
19685 +       {0x0000b1a0, 0x07c107bf},
19686 +       {0x0000b1a4, 0x000007c0},
19687 +       {0x0000b1a8, 0x00000000},
19688 +       {0x0000b1ac, 0x00000000},
19689 +       {0x0000b1b0, 0x00000000},
19690 +       {0x0000b1b4, 0x00000000},
19691 +       {0x0000b1b8, 0x00000000},
19692 +       {0x0000b1bc, 0x00000000},
19693 +       {0x0000b1c0, 0x00000000},
19694 +       {0x0000b1c4, 0x00000000},
19695 +       {0x0000b1c8, 0x00000000},
19696 +       {0x0000b1cc, 0x00000000},
19697 +       {0x0000b1d0, 0x00000000},
19698 +       {0x0000b1d4, 0x00000000},
19699 +       {0x0000b1d8, 0x00000000},
19700 +       {0x0000b1dc, 0x00000000},
19701 +       {0x0000b1e0, 0x00000000},
19702 +       {0x0000b1e4, 0x00000000},
19703 +       {0x0000b1e8, 0x00000000},
19704 +       {0x0000b1ec, 0x00000000},
19705 +       {0x0000b1f0, 0x00000396},
19706 +       {0x0000b1f4, 0x00000396},
19707 +       {0x0000b1f8, 0x00000396},
19708 +       {0x0000b1fc, 0x00000196},
19709 +};
19710 +
19711 +static const u32 ar9300_2p0_soc_preamble[][2] = {
19712 +       /* Addr      allmodes  */
19713 +       {0x000040a4, 0x00a0c1c9},
19714 +       {0x00007008, 0x00000000},
19715 +       {0x00007020, 0x00000000},
19716 +       {0x00007034, 0x00000002},
19717 +       {0x00007038, 0x000004c2},
19718 +};
19719 +
19720 +/*
19721 + * PCIE-PHY programming array, to be used prior to entering
19722 + * full sleep (holding RTC in reset, PLL is ON in L1 mode)
19723 + */
19724 +static const u32 ar9300PciePhy_pll_on_clkreq_disable_L1_2p0[][2] = {
19725 +       {0x00004040, 0x08212e5e},
19726 +       {0x00004040, 0x0008003b},
19727 +       {0x00004044, 0x00000000},
19728 +};
19729 +
19730 +/*
19731 + * PCIE-PHY programming array, to be used when not in
19732 + * full sleep (holding RTC in reset)
19733 + */
19734 +static const u32 ar9300PciePhy_clkreq_enable_L1_2p0[][2] = {
19735 +       {0x00004040, 0x08253e5e},
19736 +       {0x00004040, 0x0008003b},
19737 +       {0x00004044, 0x00000000},
19738 +};
19739 +
19740 +/*
19741 + * PCIE-PHY programming array, to be used prior to entering
19742 + * full sleep (holding RTC in reset)
19743 + */
19744 +static const u32 ar9300PciePhy_clkreq_disable_L1_2p0[][2] = {
19745 +       {0x00004040, 0x08213e5e},
19746 +       {0x00004040, 0x0008003b},
19747 +       {0x00004044, 0x00000000},
19748 +};
19749 +
19750 +#endif /* INITVALS_9003_H */
19751 diff --git a/drivers/net/wireless/ath/ath9k/ar9003_mac.c b/drivers/net/wireless/ath/ath9k/ar9003_mac.c
19752 new file mode 100644
19753 index 0000000..098fbad
19754 --- /dev/null
19755 +++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.c
19756 @@ -0,0 +1,618 @@
19757 +/*
19758 + * Copyright (c) 2010 Atheros Communications Inc.
19759 + *
19760 + * Permission to use, copy, modify, and/or distribute this software for any
19761 + * purpose with or without fee is hereby granted, provided that the above
19762 + * copyright notice and this permission notice appear in all copies.
19763 + *
19764 + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
19765 + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
19766 + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
19767 + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
19768 + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
19769 + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
19770 + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19771 + */
19772 +#include "hw.h"
19773 +
19774 +static void ar9003_hw_rx_enable(struct ath_hw *hw)
19775 +{
19776 +       REG_WRITE(hw, AR_CR, 0);
19777 +}
19778 +
19779 +static u16 ar9003_calc_ptr_chksum(struct ar9003_txc *ads)
19780 +{
19781 +       int checksum;
19782 +
19783 +       checksum = ads->info + ads->link
19784 +               + ads->data0 + ads->ctl3
19785 +               + ads->data1 + ads->ctl5
19786 +               + ads->data2 + ads->ctl7
19787 +               + ads->data3 + ads->ctl9;
19788 +
19789 +       return ((checksum & 0xffff) + (checksum >> 16)) & AR_TxPtrChkSum;
19790 +}
19791 +
19792 +static void ar9003_hw_set_desc_link(void *ds, u32 ds_link)
19793 +{
19794 +       struct ar9003_txc *ads = (struct ar9003_txc *) ds;
19795 +
19796 +       ads->link = ds_link;
19797 +       ads->ctl10 &= ~AR_TxPtrChkSum;
19798 +       ads->ctl10 |= ar9003_calc_ptr_chksum(ads);
19799 +}
19800 +
19801 +static void ar9003_hw_get_desc_link(void *ds, u32 **ds_link)
19802 +{
19803 +       *ds_link = &((struct ar9003_txc *) ds)->link;
19804 +}
19805 +
19806 +static bool ar9003_hw_get_isr(struct ath_hw *ah, enum ath9k_int *masked)
19807 +{
19808 +       u32 isr = 0;
19809 +       u32 mask2 = 0;
19810 +       struct ath9k_hw_capabilities *pCap = &ah->caps;
19811 +       u32 sync_cause = 0;
19812 +       struct ath_common *common = ath9k_hw_common(ah);
19813 +
19814 +       if (REG_READ(ah, AR_INTR_ASYNC_CAUSE) & AR_INTR_MAC_IRQ) {
19815 +               if ((REG_READ(ah, AR_RTC_STATUS) & AR_RTC_STATUS_M)
19816 +                               == AR_RTC_STATUS_ON)
19817 +                       isr = REG_READ(ah, AR_ISR);
19818 +       }
19819 +
19820 +       sync_cause = REG_READ(ah, AR_INTR_SYNC_CAUSE) & AR_INTR_SYNC_DEFAULT;
19821 +
19822 +       *masked = 0;
19823 +
19824 +       if (!isr && !sync_cause)
19825 +               return false;
19826 +
19827 +       if (isr) {
19828 +               if (isr & AR_ISR_BCNMISC) {
19829 +                       u32 isr2;
19830 +                       isr2 = REG_READ(ah, AR_ISR_S2);
19831 +
19832 +                       mask2 |= ((isr2 & AR_ISR_S2_TIM) >>
19833 +                                 MAP_ISR_S2_TIM);
19834 +                       mask2 |= ((isr2 & AR_ISR_S2_DTIM) >>
19835 +                                 MAP_ISR_S2_DTIM);
19836 +                       mask2 |= ((isr2 & AR_ISR_S2_DTIMSYNC) >>
19837 +                                 MAP_ISR_S2_DTIMSYNC);
19838 +                       mask2 |= ((isr2 & AR_ISR_S2_CABEND) >>
19839 +                                 MAP_ISR_S2_CABEND);
19840 +                       mask2 |= ((isr2 & AR_ISR_S2_GTT) <<
19841 +                                 MAP_ISR_S2_GTT);
19842 +                       mask2 |= ((isr2 & AR_ISR_S2_CST) <<
19843 +                                 MAP_ISR_S2_CST);
19844 +                       mask2 |= ((isr2 & AR_ISR_S2_TSFOOR) >>
19845 +                                 MAP_ISR_S2_TSFOOR);
19846 +
19847 +                       if (!(pCap->hw_caps & ATH9K_HW_CAP_RAC_SUPPORTED)) {
19848 +                               REG_WRITE(ah, AR_ISR_S2, isr2);
19849 +                               isr &= ~AR_ISR_BCNMISC;
19850 +                       }
19851 +               }
19852 +
19853 +               if ((pCap->hw_caps & ATH9K_HW_CAP_RAC_SUPPORTED))
19854 +                       isr = REG_READ(ah, AR_ISR_RAC);
19855 +
19856 +               if (isr == 0xffffffff) {
19857 +                       *masked = 0;
19858 +                       return false;
19859 +               }
19860 +
19861 +               *masked = isr & ATH9K_INT_COMMON;
19862 +
19863 +               if (ah->config.rx_intr_mitigation)
19864 +                       if (isr & (AR_ISR_RXMINTR | AR_ISR_RXINTM))
19865 +                               *masked |= ATH9K_INT_RXLP;
19866 +
19867 +               if (ah->config.tx_intr_mitigation)
19868 +                       if (isr & (AR_ISR_TXMINTR | AR_ISR_TXINTM))
19869 +                               *masked |= ATH9K_INT_TX;
19870 +
19871 +               if (isr & (AR_ISR_LP_RXOK | AR_ISR_RXERR))
19872 +                       *masked |= ATH9K_INT_RXLP;
19873 +
19874 +               if (isr & AR_ISR_HP_RXOK)
19875 +                       *masked |= ATH9K_INT_RXHP;
19876 +
19877 +               if (isr & (AR_ISR_TXOK | AR_ISR_TXERR | AR_ISR_TXEOL)) {
19878 +                       *masked |= ATH9K_INT_TX;
19879 +
19880 +                       if (!(pCap->hw_caps & ATH9K_HW_CAP_RAC_SUPPORTED)) {
19881 +                               u32 s0, s1;
19882 +                               s0 = REG_READ(ah, AR_ISR_S0);
19883 +                               REG_WRITE(ah, AR_ISR_S0, s0);
19884 +                               s1 = REG_READ(ah, AR_ISR_S1);
19885 +                               REG_WRITE(ah, AR_ISR_S1, s1);
19886 +
19887 +                               isr &= ~(AR_ISR_TXOK | AR_ISR_TXERR |
19888 +                                        AR_ISR_TXEOL);
19889 +                       }
19890 +               }
19891 +
19892 +               if (isr & AR_ISR_GENTMR) {
19893 +                       u32 s5;
19894 +
19895 +                       if (pCap->hw_caps & ATH9K_HW_CAP_RAC_SUPPORTED)
19896 +                               s5 = REG_READ(ah, AR_ISR_S5_S);
19897 +                       else
19898 +                               s5 = REG_READ(ah, AR_ISR_S5);
19899 +
19900 +                       ah->intr_gen_timer_trigger =
19901 +                               MS(s5, AR_ISR_S5_GENTIMER_TRIG);
19902 +
19903 +                       ah->intr_gen_timer_thresh =
19904 +                               MS(s5, AR_ISR_S5_GENTIMER_THRESH);
19905 +
19906 +                       if (ah->intr_gen_timer_trigger)
19907 +                               *masked |= ATH9K_INT_GENTIMER;
19908 +
19909 +                       if (!(pCap->hw_caps & ATH9K_HW_CAP_RAC_SUPPORTED)) {
19910 +                               REG_WRITE(ah, AR_ISR_S5, s5);
19911 +                               isr &= ~AR_ISR_GENTMR;
19912 +                       }
19913 +
19914 +               }
19915 +
19916 +               *masked |= mask2;
19917 +
19918 +               if (!(pCap->hw_caps & ATH9K_HW_CAP_RAC_SUPPORTED)) {
19919 +                       REG_WRITE(ah, AR_ISR, isr);
19920 +
19921 +                       (void) REG_READ(ah, AR_ISR);
19922 +               }
19923 +       }
19924 +
19925 +       if (sync_cause) {
19926 +               if (sync_cause & AR_INTR_SYNC_RADM_CPL_TIMEOUT) {
19927 +                       REG_WRITE(ah, AR_RC, AR_RC_HOSTIF);
19928 +                       REG_WRITE(ah, AR_RC, 0);
19929 +                       *masked |= ATH9K_INT_FATAL;
19930 +               }
19931 +
19932 +               if (sync_cause & AR_INTR_SYNC_LOCAL_TIMEOUT)
19933 +                       ath_print(common, ATH_DBG_INTERRUPT,
19934 +                                 "AR_INTR_SYNC_LOCAL_TIMEOUT\n");
19935 +
19936 +                       REG_WRITE(ah, AR_INTR_SYNC_CAUSE_CLR, sync_cause);
19937 +               (void) REG_READ(ah, AR_INTR_SYNC_CAUSE_CLR);
19938 +
19939 +       }
19940 +       return true;
19941 +}
19942 +
19943 +static void ar9003_hw_fill_txdesc(struct ath_hw *ah, void *ds, u32 seglen,
19944 +                                 bool is_firstseg, bool is_lastseg,
19945 +                                 const void *ds0, dma_addr_t buf_addr,
19946 +                                 unsigned int qcu)
19947 +{
19948 +       struct ar9003_txc *ads = (struct ar9003_txc *) ds;
19949 +       unsigned int descid = 0;
19950 +
19951 +       ads->info = (ATHEROS_VENDOR_ID << AR_DescId_S) |
19952 +                                    (1 << AR_TxRxDesc_S) |
19953 +                                    (1 << AR_CtrlStat_S) |
19954 +                                    (qcu << AR_TxQcuNum_S) | 0x17;
19955 +
19956 +       ads->data0 = buf_addr;
19957 +       ads->data1 = 0;
19958 +       ads->data2 = 0;
19959 +       ads->data3 = 0;
19960 +
19961 +       ads->ctl3 = (seglen << AR_BufLen_S);
19962 +       ads->ctl3 &= AR_BufLen;
19963 +
19964 +       /* Fill in pointer checksum and descriptor id */
19965 +       ads->ctl10 = ar9003_calc_ptr_chksum(ads);
19966 +       ads->ctl10 |= (descid << AR_TxDescId_S);
19967 +
19968 +       if (is_firstseg) {
19969 +               ads->ctl12 |= (is_lastseg ? 0 : AR_TxMore);
19970 +       } else if (is_lastseg) {
19971 +               ads->ctl11 = 0;
19972 +               ads->ctl12 = 0;
19973 +               ads->ctl13 = AR9003TXC_CONST(ds0)->ctl13;
19974 +               ads->ctl14 = AR9003TXC_CONST(ds0)->ctl14;
19975 +       } else {
19976 +               /* XXX Intermediate descriptor in a multi-descriptor frame.*/
19977 +               ads->ctl11 = 0;
19978 +               ads->ctl12 = AR_TxMore;
19979 +               ads->ctl13 = 0;
19980 +               ads->ctl14 = 0;
19981 +       }
19982 +}
19983 +
19984 +static void ar9003_hw_clear_txdesc(struct ath_hw *ah, void *ds)
19985 +{
19986 +    struct ar9003_txs *ads = (struct ar9003_txs *) ds;
19987 +    ads->status1 = ads->status2 = 0;
19988 +    ads->status3 = ads->status4 = 0;
19989 +    ads->status5 = ads->status6 = 0;
19990 +    ads->status7 = ads->status8 = 0;
19991 +}
19992 +
19993 +static int ar9003_hw_proc_txdesc(struct ath_hw *ah, void *ds,
19994 +                                struct ath_tx_status *ts)
19995 +{
19996 +       struct ar9003_txs *ads;
19997 +
19998 +       ads = &ah->ts_ring[ah->ts_tail];
19999 +
20000 +       if ((ads->status8 & AR_TxDone) == 0)
20001 +               return -EINPROGRESS;
20002 +
20003 +       ah->ts_tail = (ah->ts_tail + 1) % ah->ts_size;
20004 +
20005 +       if ((MS(ads->ds_info, AR_DescId) != ATHEROS_VENDOR_ID) ||
20006 +           (MS(ads->ds_info, AR_TxRxDesc) != 1)) {
20007 +               ath_print(ath9k_hw_common(ah), ATH_DBG_XMIT,
20008 +                         "Tx Descriptor error %x\n", ads->ds_info);
20009 +               memset(ads, 0, sizeof(*ads));
20010 +               return -EIO;
20011 +       }
20012 +
20013 +       ts->qid = MS(ads->ds_info, AR_TxQcuNum);
20014 +       ts->desc_id = MS(ads->status1, AR_TxDescId);
20015 +       ts->ts_seqnum = MS(ads->status8, AR_SeqNum);
20016 +       ts->ts_tstamp = ads->status4;
20017 +       ts->ts_status = 0;
20018 +       ts->ts_flags  = 0;
20019 +
20020 +       if (ads->status3 & AR_ExcessiveRetries)
20021 +               ts->ts_status |= ATH9K_TXERR_XRETRY;
20022 +       if (ads->status3 & AR_Filtered)
20023 +               ts->ts_status |= ATH9K_TXERR_FILT;
20024 +       if (ads->status3 & AR_FIFOUnderrun) {
20025 +               ts->ts_status |= ATH9K_TXERR_FIFO;
20026 +               ath9k_hw_updatetxtriglevel(ah, true);
20027 +       }
20028 +       if (ads->status8 & AR_TxOpExceeded)
20029 +               ts->ts_status |= ATH9K_TXERR_XTXOP;
20030 +       if (ads->status3 & AR_TxTimerExpired)
20031 +               ts->ts_status |= ATH9K_TXERR_TIMER_EXPIRED;
20032 +
20033 +       if (ads->status3 & AR_DescCfgErr)
20034 +               ts->ts_flags |= ATH9K_TX_DESC_CFG_ERR;
20035 +       if (ads->status3 & AR_TxDataUnderrun) {
20036 +               ts->ts_flags |= ATH9K_TX_DATA_UNDERRUN;
20037 +               ath9k_hw_updatetxtriglevel(ah, true);
20038 +       }
20039 +       if (ads->status3 & AR_TxDelimUnderrun) {
20040 +               ts->ts_flags |= ATH9K_TX_DELIM_UNDERRUN;
20041 +               ath9k_hw_updatetxtriglevel(ah, true);
20042 +       }
20043 +       if (ads->status2 & AR_TxBaStatus) {
20044 +               ts->ts_flags |= ATH9K_TX_BA;
20045 +               ts->ba_low = ads->status5;
20046 +               ts->ba_high = ads->status6;
20047 +       }
20048 +
20049 +       ts->ts_rateindex = MS(ads->status8, AR_FinalTxIdx);
20050 +
20051 +       ts->ts_rssi = MS(ads->status7, AR_TxRSSICombined);
20052 +       ts->ts_rssi_ctl0 = MS(ads->status2, AR_TxRSSIAnt00);
20053 +       ts->ts_rssi_ctl1 = MS(ads->status2, AR_TxRSSIAnt01);
20054 +       ts->ts_rssi_ctl2 = MS(ads->status2, AR_TxRSSIAnt02);
20055 +       ts->ts_rssi_ext0 = MS(ads->status7, AR_TxRSSIAnt10);
20056 +       ts->ts_rssi_ext1 = MS(ads->status7, AR_TxRSSIAnt11);
20057 +       ts->ts_rssi_ext2 = MS(ads->status7, AR_TxRSSIAnt12);
20058 +       ts->ts_shortretry = MS(ads->status3, AR_RTSFailCnt);
20059 +       ts->ts_longretry = MS(ads->status3, AR_DataFailCnt);
20060 +       ts->ts_virtcol = MS(ads->status3, AR_VirtRetryCnt);
20061 +       ts->ts_antenna = 0;
20062 +
20063 +       ts->tid = MS(ads->status8, AR_TxTid);
20064 +
20065 +       memset(ads, 0, sizeof(*ads));
20066 +
20067 +       return 0;
20068 +}
20069 +
20070 +static void ar9003_hw_set11n_txdesc(struct ath_hw *ah, void *ds,
20071 +               u32 pktlen, enum ath9k_pkt_type type, u32 txpower,
20072 +               u32 keyIx, enum ath9k_key_type keyType, u32 flags)
20073 +{
20074 +       struct ar9003_txc *ads = (struct ar9003_txc *) ds;
20075 +
20076 +       txpower += ah->txpower_indexoffset;
20077 +       if (txpower > 63)
20078 +               txpower = 63;
20079 +
20080 +       ads->ctl11 = (pktlen & AR_FrameLen)
20081 +               | (flags & ATH9K_TXDESC_VMF ? AR_VirtMoreFrag : 0)
20082 +               | SM(txpower, AR_XmitPower)
20083 +               | (flags & ATH9K_TXDESC_VEOL ? AR_VEOL : 0)
20084 +               | (flags & ATH9K_TXDESC_CLRDMASK ? AR_ClrDestMask : 0)
20085 +               | (keyIx != ATH9K_TXKEYIX_INVALID ? AR_DestIdxValid : 0)
20086 +               | (flags & ATH9K_TXDESC_LOWRXCHAIN ? AR_LowRxChain : 0);
20087 +
20088 +       ads->ctl12 =
20089 +               (keyIx != ATH9K_TXKEYIX_INVALID ? SM(keyIx, AR_DestIdx) : 0)
20090 +               | SM(type, AR_FrameType)
20091 +               | (flags & ATH9K_TXDESC_NOACK ? AR_NoAck : 0)
20092 +               | (flags & ATH9K_TXDESC_EXT_ONLY ? AR_ExtOnly : 0)
20093 +               | (flags & ATH9K_TXDESC_EXT_AND_CTL ? AR_ExtAndCtl : 0);
20094 +
20095 +       ads->ctl17 = SM(keyType, AR_EncrType) |
20096 +                    (flags & ATH9K_TXDESC_LDPC ? AR_LDPC : 0);
20097 +       ads->ctl18 = 0;
20098 +       ads->ctl19 = AR_Not_Sounding;
20099 +
20100 +       ads->ctl20 = 0;
20101 +       ads->ctl21 = 0;
20102 +       ads->ctl22 = 0;
20103 +}
20104 +
20105 +static void ar9003_hw_set11n_ratescenario(struct ath_hw *ah, void *ds,
20106 +                                         void *lastds,
20107 +                                         u32 durUpdateEn, u32 rtsctsRate,
20108 +                                         u32 rtsctsDuration,
20109 +                                         struct ath9k_11n_rate_series series[],
20110 +                                         u32 nseries, u32 flags)
20111 +{
20112 +       struct ar9003_txc *ads = (struct ar9003_txc *) ds;
20113 +       struct ar9003_txc *last_ads = (struct ar9003_txc *) lastds;
20114 +       u_int32_t ctl11;
20115 +
20116 +       if (flags & (ATH9K_TXDESC_RTSENA | ATH9K_TXDESC_CTSENA)) {
20117 +               ctl11 = ads->ctl11;
20118 +
20119 +               if (flags & ATH9K_TXDESC_RTSENA) {
20120 +                       ctl11 &= ~AR_CTSEnable;
20121 +                       ctl11 |= AR_RTSEnable;
20122 +               } else {
20123 +                       ctl11 &= ~AR_RTSEnable;
20124 +                       ctl11 |= AR_CTSEnable;
20125 +               }
20126 +
20127 +               ads->ctl11 = ctl11;
20128 +       } else {
20129 +               ads->ctl11 = (ads->ctl11 & ~(AR_RTSEnable | AR_CTSEnable));
20130 +       }
20131 +
20132 +       ads->ctl13 = set11nTries(series, 0)
20133 +               |  set11nTries(series, 1)
20134 +               |  set11nTries(series, 2)
20135 +               |  set11nTries(series, 3)
20136 +               |  (durUpdateEn ? AR_DurUpdateEna : 0)
20137 +               |  SM(0, AR_BurstDur);
20138 +
20139 +       ads->ctl14 = set11nRate(series, 0)
20140 +               |  set11nRate(series, 1)
20141 +               |  set11nRate(series, 2)
20142 +               |  set11nRate(series, 3);
20143 +
20144 +       ads->ctl15 = set11nPktDurRTSCTS(series, 0)
20145 +               |  set11nPktDurRTSCTS(series, 1);
20146 +
20147 +       ads->ctl16 = set11nPktDurRTSCTS(series, 2)
20148 +               |  set11nPktDurRTSCTS(series, 3);
20149 +
20150 +       ads->ctl18 = set11nRateFlags(series, 0)
20151 +               |  set11nRateFlags(series, 1)
20152 +               |  set11nRateFlags(series, 2)
20153 +               |  set11nRateFlags(series, 3)
20154 +               | SM(rtsctsRate, AR_RTSCTSRate);
20155 +       ads->ctl19 = AR_Not_Sounding;
20156 +
20157 +       last_ads->ctl13 = ads->ctl13;
20158 +       last_ads->ctl14 = ads->ctl14;
20159 +}
20160 +
20161 +static void ar9003_hw_set11n_aggr_first(struct ath_hw *ah, void *ds,
20162 +                                       u32 aggrLen)
20163 +{
20164 +       struct ar9003_txc *ads = (struct ar9003_txc *) ds;
20165 +
20166 +       ads->ctl12 |= (AR_IsAggr | AR_MoreAggr);
20167 +
20168 +       ads->ctl17 &= ~AR_AggrLen;
20169 +       ads->ctl17 |= SM(aggrLen, AR_AggrLen);
20170 +}
20171 +
20172 +static void ar9003_hw_set11n_aggr_middle(struct ath_hw *ah, void *ds,
20173 +                                        u32 numDelims)
20174 +{
20175 +       struct ar9003_txc *ads = (struct ar9003_txc *) ds;
20176 +       unsigned int ctl17;
20177 +
20178 +       ads->ctl12 |= (AR_IsAggr | AR_MoreAggr);
20179 +
20180 +       /*
20181 +        * We use a stack variable to manipulate ctl6 to reduce uncached
20182 +        * read modify, modfiy, write.
20183 +        */
20184 +       ctl17 = ads->ctl17;
20185 +       ctl17 &= ~AR_PadDelim;
20186 +       ctl17 |= SM(numDelims, AR_PadDelim);
20187 +       ads->ctl17 = ctl17;
20188 +}
20189 +
20190 +static void ar9003_hw_set11n_aggr_last(struct ath_hw *ah, void *ds)
20191 +{
20192 +       struct ar9003_txc *ads = (struct ar9003_txc *) ds;
20193 +
20194 +       ads->ctl12 |= AR_IsAggr;
20195 +       ads->ctl12 &= ~AR_MoreAggr;
20196 +       ads->ctl17 &= ~AR_PadDelim;
20197 +}
20198 +
20199 +static void ar9003_hw_clr11n_aggr(struct ath_hw *ah, void *ds)
20200 +{
20201 +       struct ar9003_txc *ads = (struct ar9003_txc *) ds;
20202 +
20203 +       ads->ctl12 &= (~AR_IsAggr & ~AR_MoreAggr);
20204 +}
20205 +
20206 +static void ar9003_hw_set11n_burstduration(struct ath_hw *ah, void *ds,
20207 +                                          u32 burstDuration)
20208 +{
20209 +       struct ar9003_txc *ads = (struct ar9003_txc *) ds;
20210 +
20211 +       ads->ctl13 &= ~AR_BurstDur;
20212 +       ads->ctl13 |= SM(burstDuration, AR_BurstDur);
20213 +
20214 +}
20215 +
20216 +static void ar9003_hw_set11n_virtualmorefrag(struct ath_hw *ah, void *ds,
20217 +                                            u32 vmf)
20218 +{
20219 +       struct ar9003_txc *ads = (struct ar9003_txc *) ds;
20220 +
20221 +       if (vmf)
20222 +               ads->ctl11 |=  AR_VirtMoreFrag;
20223 +       else
20224 +               ads->ctl11 &= ~AR_VirtMoreFrag;
20225 +}
20226 +
20227 +void ar9003_hw_attach_mac_ops(struct ath_hw *hw)
20228 +{
20229 +       struct ath_hw_ops *ops = ath9k_hw_ops(hw);
20230 +
20231 +       ops->rx_enable = ar9003_hw_rx_enable;
20232 +       ops->set_desc_link = ar9003_hw_set_desc_link;
20233 +       ops->get_desc_link = ar9003_hw_get_desc_link;
20234 +       ops->get_isr = ar9003_hw_get_isr;
20235 +       ops->fill_txdesc = ar9003_hw_fill_txdesc;
20236 +       ops->clear_txdesc = ar9003_hw_clear_txdesc;
20237 +       ops->proc_txdesc = ar9003_hw_proc_txdesc;
20238 +       ops->set11n_txdesc = ar9003_hw_set11n_txdesc;
20239 +       ops->set11n_ratescenario = ar9003_hw_set11n_ratescenario;
20240 +       ops->set11n_aggr_first = ar9003_hw_set11n_aggr_first;
20241 +       ops->set11n_aggr_middle = ar9003_hw_set11n_aggr_middle;
20242 +       ops->set11n_aggr_last = ar9003_hw_set11n_aggr_last;
20243 +       ops->clr11n_aggr = ar9003_hw_clr11n_aggr;
20244 +       ops->set11n_burstduration = ar9003_hw_set11n_burstduration;
20245 +       ops->set11n_virtualmorefrag = ar9003_hw_set11n_virtualmorefrag;
20246 +}
20247 +
20248 +void ath9k_hw_set_rx_bufsize(struct ath_hw *ah, u16 buf_size)
20249 +{
20250 +       REG_WRITE(ah, AR_DATABUF_SIZE, buf_size & AR_DATABUF_SIZE_MASK);
20251 +}
20252 +EXPORT_SYMBOL(ath9k_hw_set_rx_bufsize);
20253 +
20254 +void ath9k_hw_addrxbuf_edma(struct ath_hw *ah, u32 rxdp,
20255 +                           enum ath9k_rx_qtype qtype)
20256 +{
20257 +       if (qtype == ATH9K_RX_QUEUE_HP)
20258 +               REG_WRITE(ah, AR_HP_RXDP, rxdp);
20259 +       else
20260 +               REG_WRITE(ah, AR_LP_RXDP, rxdp);
20261 +}
20262 +EXPORT_SYMBOL(ath9k_hw_addrxbuf_edma);
20263 +
20264 +int ath9k_hw_process_rxdesc_edma(struct ath_hw *ah, struct ath_rx_status *rxs,
20265 +                                void *buf_addr)
20266 +{
20267 +       struct ar9003_rxs *rxsp = (struct ar9003_rxs *) buf_addr;
20268 +       unsigned int phyerr;
20269 +
20270 +       /* TODO: byte swap on big endian for ar9300_10 */
20271 +
20272 +       if ((rxsp->status11 & AR_RxDone) == 0)
20273 +               return -EINPROGRESS;
20274 +
20275 +       if (MS(rxsp->ds_info, AR_DescId) != 0x168c)
20276 +               return -EINVAL;
20277 +
20278 +       if ((rxsp->ds_info & (AR_TxRxDesc | AR_CtrlStat)) != 0)
20279 +               return -EINPROGRESS;
20280 +
20281 +       if (!rxs)
20282 +               return 0;
20283 +
20284 +       rxs->rs_status = 0;
20285 +       rxs->rs_flags =  0;
20286 +
20287 +       rxs->rs_datalen = rxsp->status2 & AR_DataLen;
20288 +       rxs->rs_tstamp =  rxsp->status3;
20289 +
20290 +       /* XXX: Keycache */
20291 +       rxs->rs_rssi = MS(rxsp->status5, AR_RxRSSICombined);
20292 +       rxs->rs_rssi_ctl0 = MS(rxsp->status1, AR_RxRSSIAnt00);
20293 +       rxs->rs_rssi_ctl1 = MS(rxsp->status1, AR_RxRSSIAnt01);
20294 +       rxs->rs_rssi_ctl2 = MS(rxsp->status1, AR_RxRSSIAnt02);
20295 +       rxs->rs_rssi_ext0 = MS(rxsp->status5, AR_RxRSSIAnt10);
20296 +       rxs->rs_rssi_ext1 = MS(rxsp->status5, AR_RxRSSIAnt11);
20297 +       rxs->rs_rssi_ext2 = MS(rxsp->status5, AR_RxRSSIAnt12);
20298 +
20299 +       if (rxsp->status11 & AR_RxKeyIdxValid)
20300 +               rxs->rs_keyix = MS(rxsp->status11, AR_KeyIdx);
20301 +       else
20302 +               rxs->rs_keyix = ATH9K_RXKEYIX_INVALID;
20303 +
20304 +       rxs->rs_rate = MS(rxsp->status1, AR_RxRate);
20305 +       rxs->rs_more = (rxsp->status2 & AR_RxMore) ? 1 : 0;
20306 +
20307 +       rxs->rs_isaggr = (rxsp->status11 & AR_RxAggr) ? 1 : 0;
20308 +       rxs->rs_moreaggr = (rxsp->status11 & AR_RxMoreAggr) ? 1 : 0;
20309 +       rxs->rs_antenna = (MS(rxsp->status4, AR_RxAntenna) & 0x7);
20310 +       rxs->rs_flags  = (rxsp->status4 & AR_GI) ? ATH9K_RX_GI : 0;
20311 +       rxs->rs_flags  |= (rxsp->status4 & AR_2040) ? ATH9K_RX_2040 : 0;
20312 +
20313 +       rxs->evm0 = rxsp->status6;
20314 +       rxs->evm1 = rxsp->status7;
20315 +       rxs->evm2 = rxsp->status8;
20316 +       rxs->evm3 = rxsp->status9;
20317 +       rxs->evm4 = (rxsp->status10 & 0xffff);
20318 +
20319 +       if (rxsp->status11 & AR_PreDelimCRCErr)
20320 +               rxs->rs_flags |= ATH9K_RX_DELIM_CRC_PRE;
20321 +
20322 +       if (rxsp->status11 & AR_PostDelimCRCErr)
20323 +               rxs->rs_flags |= ATH9K_RX_DELIM_CRC_POST;
20324 +
20325 +       if (rxsp->status11 & AR_DecryptBusyErr)
20326 +               rxs->rs_flags |= ATH9K_RX_DECRYPT_BUSY;
20327 +
20328 +       if ((rxsp->status11 & AR_RxFrameOK) == 0) {
20329 +               if (rxsp->status11 & AR_CRCErr) {
20330 +                       rxs->rs_status |= ATH9K_RXERR_CRC;
20331 +               } else if (rxsp->status11 & AR_PHYErr) {
20332 +                       rxs->rs_status |= ATH9K_RXERR_PHY;
20333 +                       phyerr = MS(rxsp->status11, AR_PHYErrCode);
20334 +                       rxs->rs_phyerr = phyerr;
20335 +               } else if (rxsp->status11 & AR_DecryptCRCErr) {
20336 +                       rxs->rs_status |= ATH9K_RXERR_DECRYPT;
20337 +               } else if (rxsp->status11 & AR_MichaelErr) {
20338 +                       rxs->rs_status |= ATH9K_RXERR_MIC;
20339 +               }
20340 +       }
20341 +
20342 +       return 0;
20343 +}
20344 +EXPORT_SYMBOL(ath9k_hw_process_rxdesc_edma);
20345 +
20346 +void ath9k_hw_reset_txstatus_ring(struct ath_hw *ah)
20347 +{
20348 +       ah->ts_tail = 0;
20349 +
20350 +       memset((void *) ah->ts_ring, 0,
20351 +               ah->ts_size * sizeof(struct ar9003_txs));
20352 +
20353 +       ath_print(ath9k_hw_common(ah), ATH_DBG_XMIT,
20354 +                 "TS Start 0x%x End 0x%x Virt %p, Size %d\n",
20355 +                  ah->ts_paddr_start, ah->ts_paddr_end,
20356 +                  ah->ts_ring, ah->ts_size);
20357 +
20358 +       REG_WRITE(ah, AR_Q_STATUS_RING_START, ah->ts_paddr_start);
20359 +       REG_WRITE(ah, AR_Q_STATUS_RING_END, ah->ts_paddr_end);
20360 +}
20361 +
20362 +void ath9k_hw_setup_statusring(struct ath_hw *ah, void *ts_start,
20363 +                              u32 ts_paddr_start,
20364 +                              u8 size)
20365 +{
20366 +
20367 +       ah->ts_paddr_start = ts_paddr_start;
20368 +       ah->ts_paddr_end = ts_paddr_start + (size * sizeof(struct ar9003_txs));
20369 +       ah->ts_size = size;
20370 +       ah->ts_ring = (struct ar9003_txs *) ts_start;
20371 +
20372 +       ath9k_hw_reset_txstatus_ring(ah);
20373 +}
20374 +EXPORT_SYMBOL(ath9k_hw_setup_statusring);
20375 diff --git a/drivers/net/wireless/ath/ath9k/ar9003_mac.h b/drivers/net/wireless/ath/ath9k/ar9003_mac.h
20376 new file mode 100644
20377 index 0000000..87fb6e1
20378 --- /dev/null
20379 +++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.h
20380 @@ -0,0 +1,124 @@
20381 +/*
20382 + * Copyright (c) 2010 Atheros Communications Inc.
20383 + *
20384 + * Permission to use, copy, modify, and/or distribute this software for any
20385 + * purpose with or without fee is hereby granted, provided that the above
20386 + * copyright notice and this permission notice appear in all copies.
20387 + *
20388 + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
20389 + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
20390 + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
20391 + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
20392 + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
20393 + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
20394 + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20395 + */
20396 +
20397 +#ifndef ar9003_MAC_H
20398 +#define ar9003_MAC_H
20399 +
20400 +#define AR_DescId      0xffff0000
20401 +#define AR_DescId_S    16
20402 +#define AR_CtrlStat    0x00004000
20403 +#define AR_CtrlStat_S  14
20404 +#define AR_TxRxDesc    0x00008000
20405 +#define AR_TxRxDesc_S  15
20406 +#define AR_TxQcuNum    0x00000f00
20407 +#define AR_TxQcuNum_S  8
20408 +#define AR_BufLen_S    16
20409 +
20410 +#define AR_TxDescId    0xffff0000
20411 +#define AR_TxDescId_S  16
20412 +#define AR_TxPtrChkSum 0x0000ffff
20413 +
20414 +#define AR_TxTid       0xf0000000
20415 +#define AR_TxTid_S     28
20416 +
20417 +#define AR_LowRxChain  0x00004000
20418 +
20419 +#define AR_Not_Sounding        0x20000000
20420 +
20421 +#define MAP_ISR_S2_CST          6
20422 +#define MAP_ISR_S2_GTT          6
20423 +#define MAP_ISR_S2_TIM          3
20424 +#define MAP_ISR_S2_CABEND       0
20425 +#define MAP_ISR_S2_DTIMSYNC     7
20426 +#define MAP_ISR_S2_DTIM         7
20427 +#define MAP_ISR_S2_TSFOOR       4
20428 +
20429 +#define AR9003TXC_CONST(_ds) ((const struct ar9003_txc *) _ds)
20430 +
20431 +enum ath9k_rx_qtype {
20432 +       ATH9K_RX_QUEUE_HP,
20433 +       ATH9K_RX_QUEUE_LP,
20434 +       ATH9K_RX_QUEUE_MAX,
20435 +};
20436 +
20437 +struct ar9003_rxs {
20438 +       u32 ds_info;
20439 +       u32 status1;
20440 +       u32 status2;
20441 +       u32 status3;
20442 +       u32 status4;
20443 +       u32 status5;
20444 +       u32 status6;
20445 +       u32 status7;
20446 +       u32 status8;
20447 +       u32 status9;
20448 +       u32 status10;
20449 +       u32 status11;
20450 +} __packed;
20451 +
20452 +/* Transmit Control Descriptor */
20453 +struct ar9003_txc {
20454 +       u32 info;   /* descriptor information */
20455 +       u32 link;   /* link pointer */
20456 +       u32 data0;  /* data pointer to 1st buffer */
20457 +       u32 ctl3;   /* DMA control 3  */
20458 +       u32 data1;  /* data pointer to 2nd buffer */
20459 +       u32 ctl5;   /* DMA control 5  */
20460 +       u32 data2;  /* data pointer to 3rd buffer */
20461 +       u32 ctl7;   /* DMA control 7  */
20462 +       u32 data3;  /* data pointer to 4th buffer */
20463 +       u32 ctl9;   /* DMA control 9  */
20464 +       u32 ctl10;  /* DMA control 10 */
20465 +       u32 ctl11;  /* DMA control 11 */
20466 +       u32 ctl12;  /* DMA control 12 */
20467 +       u32 ctl13;  /* DMA control 13 */
20468 +       u32 ctl14;  /* DMA control 14 */
20469 +       u32 ctl15;  /* DMA control 15 */
20470 +       u32 ctl16;  /* DMA control 16 */
20471 +       u32 ctl17;  /* DMA control 17 */
20472 +       u32 ctl18;  /* DMA control 18 */
20473 +       u32 ctl19;  /* DMA control 19 */
20474 +       u32 ctl20;  /* DMA control 20 */
20475 +       u32 ctl21;  /* DMA control 21 */
20476 +       u32 ctl22;  /* DMA control 22 */
20477 +       u32 pad[9]; /* pad to cache line (128 bytes/32 dwords) */
20478 +} __packed;
20479 +
20480 +struct ar9003_txs {
20481 +       u32 ds_info;
20482 +       u32 status1;
20483 +       u32 status2;
20484 +       u32 status3;
20485 +       u32 status4;
20486 +       u32 status5;
20487 +       u32 status6;
20488 +       u32 status7;
20489 +       u32 status8;
20490 +} __packed;
20491 +
20492 +void ar9003_hw_attach_mac_ops(struct ath_hw *hw);
20493 +void ath9k_hw_set_rx_bufsize(struct ath_hw *ah, u16 buf_size);
20494 +void ath9k_hw_addrxbuf_edma(struct ath_hw *ah, u32 rxdp,
20495 +                           enum ath9k_rx_qtype qtype);
20496 +
20497 +int ath9k_hw_process_rxdesc_edma(struct ath_hw *ah,
20498 +                                struct ath_rx_status *rxs,
20499 +                                void *buf_addr);
20500 +void ath9k_hw_reset_txstatus_ring(struct ath_hw *ah);
20501 +void ath9k_hw_setup_statusring(struct ath_hw *ah, void *ts_start,
20502 +                              u32 ts_paddr_start,
20503 +                              u8 size);
20504 +#endif
20505 diff --git a/drivers/net/wireless/ath/ath9k/ar9003_phy.c b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
20506 new file mode 100644
20507 index 0000000..e9b8474
20508 --- /dev/null
20509 +++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
20510 @@ -0,0 +1,1145 @@
20511 +/*
20512 + * Copyright (c) 2010 Atheros Communications Inc.
20513 + *
20514 + * Permission to use, copy, modify, and/or distribute this software for any
20515 + * purpose with or without fee is hereby granted, provided that the above
20516 + * copyright notice and this permission notice appear in all copies.
20517 + *
20518 + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
20519 + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
20520 + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
20521 + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
20522 + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
20523 + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
20524 + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20525 + */
20526 +
20527 +#include "hw.h"
20528 +#include "ar9003_phy.h"
20529 +
20530 +/**
20531 + * ar9003_hw_set_channel - set channel on single-chip device
20532 + * @ah: atheros hardware structure
20533 + * @chan:
20534 + *
20535 + * This is the function to change channel on single-chip devices, that is
20536 + * all devices after ar9280.
20537 + *
20538 + * This function takes the channel value in MHz and sets
20539 + * hardware channel value. Assumes writes have been enabled to analog bus.
20540 + *
20541 + * Actual Expression,
20542 + *
20543 + * For 2GHz channel,
20544 + * Channel Frequency = (3/4) * freq_ref * (chansel[8:0] + chanfrac[16:0]/2^17)
20545 + * (freq_ref = 40MHz)
20546 + *
20547 + * For 5GHz channel,
20548 + * Channel Frequency = (3/2) * freq_ref * (chansel[8:0] + chanfrac[16:0]/2^10)
20549 + * (freq_ref = 40MHz/(24>>amodeRefSel))
20550 + *
20551 + * For 5GHz channels which are 5MHz spaced,
20552 + * Channel Frequency = (3/2) * freq_ref * (chansel[8:0] + chanfrac[16:0]/2^17)
20553 + * (freq_ref = 40MHz)
20554 + */
20555 +static int ar9003_hw_set_channel(struct ath_hw *ah, struct ath9k_channel *chan)
20556 +{
20557 +       u16 bMode, fracMode = 0, aModeRefSel = 0;
20558 +       u32 freq, channelSel = 0, reg32 = 0;
20559 +       struct chan_centers centers;
20560 +       int loadSynthChannel;
20561 +
20562 +       ath9k_hw_get_channel_centers(ah, chan, &centers);
20563 +       freq = centers.synth_center;
20564 +
20565 +       if (freq < 4800) {     /* 2 GHz, fractional mode */
20566 +               channelSel = CHANSEL_2G(freq);
20567 +               /* Set to 2G mode */
20568 +               bMode = 1;
20569 +       } else {
20570 +               channelSel = CHANSEL_5G(freq);
20571 +               /* Doubler is ON, so, divide channelSel by 2. */
20572 +               channelSel >>= 1;
20573 +               /* Set to 5G mode */
20574 +               bMode = 0;
20575 +       }
20576 +
20577 +       /* Enable fractional mode for all channels */
20578 +       fracMode = 1;
20579 +       aModeRefSel = 0;
20580 +       loadSynthChannel = 0;
20581 +
20582 +       reg32 = (bMode << 29);
20583 +       REG_WRITE(ah, AR_PHY_SYNTH_CONTROL, reg32);
20584 +
20585 +       /* Enable Long shift Select for Synthesizer */
20586 +       REG_RMW_FIELD(ah, AR_PHY_65NM_CH0_SYNTH4,
20587 +                     AR_PHY_SYNTH4_LONG_SHIFT_SELECT, 1);
20588 +
20589 +       /* Program Synth. setting */
20590 +       reg32 = (channelSel << 2 ) | (fracMode << 30) |
20591 +               (aModeRefSel << 28) | (loadSynthChannel << 31);
20592 +       REG_WRITE(ah, AR_PHY_65NM_CH0_SYNTH7, reg32);
20593 +
20594 +       /* Toggle Load Synth channel bit */
20595 +       loadSynthChannel = 1;
20596 +       reg32 = (channelSel << 2 ) | (fracMode << 30) |
20597 +               (aModeRefSel << 28) | (loadSynthChannel << 31);
20598 +       REG_WRITE(ah, AR_PHY_65NM_CH0_SYNTH7, reg32);
20599 +
20600 +       ah->curchan = chan;
20601 +       ah->curchan_rad_index = -1;
20602 +
20603 +       return 0;
20604 +}
20605 +
20606 +/**
20607 + * ar9003_hw_spur_mitigate - convert baseband spur frequency
20608 + * @ah: atheros hardware structure
20609 + * @chan:
20610 + *
20611 + * For single-chip solutions. Converts to baseband spur frequency given the
20612 + * input channel frequency and compute register settings below.
20613 + *
20614 + * Spur mitigation for MRC CCK
20615 + */
20616 +static void ar9003_hw_spur_mitigate_mrc_cck(struct ath_hw *ah,
20617 +                                           struct ath9k_channel *chan)
20618 +{
20619 +       u32 spur_freq[4] = { 2420, 2440, 2464, 2480 };
20620 +       int cur_bb_spur, negative = 0, cck_spur_freq;
20621 +       int i;
20622 +
20623 +       /*
20624 +        * Need to verify range +/- 10 MHz in control channel, otherwise spur
20625 +        * is out-of-band and can be ignored.
20626 +        */
20627 +
20628 +       for (i = 0; i < 4; i++) {
20629 +               negative = 0;
20630 +               cur_bb_spur = spur_freq[i] - chan->channel;
20631 +
20632 +               if(cur_bb_spur < 0) {
20633 +                       negative = 1;
20634 +                       cur_bb_spur = -cur_bb_spur;
20635 +               }
20636 +               if (cur_bb_spur < 10) {
20637 +                       cck_spur_freq = (int)((cur_bb_spur << 19) / 11);
20638 +
20639 +                       if (negative == 1)
20640 +                               cck_spur_freq = -cck_spur_freq;
20641 +
20642 +                       cck_spur_freq = cck_spur_freq & 0xfffff;
20643 +
20644 +                       REG_RMW_FIELD(ah, AR_PHY_AGC_CONTROL,
20645 +                                     AR_PHY_AGC_CONTROL_YCOK_MAX, 0x7);
20646 +                       REG_RMW_FIELD(ah, AR_PHY_CCK_SPUR_MIT,
20647 +                                     AR_PHY_CCK_SPUR_MIT_SPUR_RSSI_THR, 0x7f);
20648 +                       REG_RMW_FIELD(ah, AR_PHY_CCK_SPUR_MIT,
20649 +                                     AR_PHY_CCK_SPUR_MIT_SPUR_FILTER_TYPE, 0x2);
20650 +                       REG_RMW_FIELD(ah, AR_PHY_CCK_SPUR_MIT,
20651 +                                     AR_PHY_CCK_SPUR_MIT_USE_CCK_SPUR_MIT, 0x1);
20652 +                       REG_RMW_FIELD(ah, AR_PHY_CCK_SPUR_MIT,
20653 +                                     AR_PHY_CCK_SPUR_MIT_CCK_SPUR_FREQ, cck_spur_freq);
20654 +
20655 +                       return;
20656 +               }
20657 +       }
20658 +
20659 +       REG_RMW_FIELD(ah, AR_PHY_AGC_CONTROL,
20660 +                     AR_PHY_AGC_CONTROL_YCOK_MAX, 0x5);
20661 +       REG_RMW_FIELD(ah, AR_PHY_CCK_SPUR_MIT,
20662 +                     AR_PHY_CCK_SPUR_MIT_USE_CCK_SPUR_MIT, 0x0);
20663 +       REG_RMW_FIELD(ah, AR_PHY_CCK_SPUR_MIT,
20664 +                     AR_PHY_CCK_SPUR_MIT_CCK_SPUR_FREQ, 0x0);
20665 +}
20666 +
20667 +/* Clean all spur register fields */
20668 +static void ar9003_hw_spur_ofdm_clear(struct ath_hw *ah)
20669 +{
20670 +       REG_RMW_FIELD(ah, AR_PHY_TIMING4,
20671 +                     AR_PHY_TIMING4_ENABLE_SPUR_FILTER, 0);
20672 +       REG_RMW_FIELD(ah, AR_PHY_TIMING11,
20673 +                     AR_PHY_TIMING11_SPUR_FREQ_SD, 0);
20674 +       REG_RMW_FIELD(ah, AR_PHY_TIMING11,
20675 +                     AR_PHY_TIMING11_SPUR_DELTA_PHASE, 0);
20676 +       REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
20677 +                     AR_PHY_SFCORR_EXT_SPUR_SUBCHANNEL_SD, 0);
20678 +       REG_RMW_FIELD(ah, AR_PHY_TIMING11,
20679 +                     AR_PHY_TIMING11_USE_SPUR_FILTER_IN_AGC, 0);
20680 +       REG_RMW_FIELD(ah, AR_PHY_TIMING11,
20681 +                     AR_PHY_TIMING11_USE_SPUR_FILTER_IN_SELFCOR, 0);
20682 +       REG_RMW_FIELD(ah, AR_PHY_TIMING4,
20683 +                     AR_PHY_TIMING4_ENABLE_SPUR_RSSI, 0);
20684 +       REG_RMW_FIELD(ah, AR_PHY_SPUR_REG,
20685 +                     AR_PHY_SPUR_REG_EN_VIT_SPUR_RSSI, 0);
20686 +       REG_RMW_FIELD(ah, AR_PHY_SPUR_REG,
20687 +                     AR_PHY_SPUR_REG_ENABLE_NF_RSSI_SPUR_MIT, 0);
20688 +
20689 +       REG_RMW_FIELD(ah, AR_PHY_SPUR_REG,
20690 +                     AR_PHY_SPUR_REG_ENABLE_MASK_PPM, 0);
20691 +       REG_RMW_FIELD(ah, AR_PHY_TIMING4,
20692 +                     AR_PHY_TIMING4_ENABLE_PILOT_MASK, 0);
20693 +       REG_RMW_FIELD(ah, AR_PHY_TIMING4,
20694 +                     AR_PHY_TIMING4_ENABLE_CHAN_MASK, 0);
20695 +       REG_RMW_FIELD(ah, AR_PHY_PILOT_SPUR_MASK,
20696 +                     AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_IDX_A, 0);
20697 +       REG_RMW_FIELD(ah, AR_PHY_SPUR_MASK_A,
20698 +                     AR_PHY_SPUR_MASK_A_CF_PUNC_MASK_IDX_A, 0);
20699 +       REG_RMW_FIELD(ah, AR_PHY_CHAN_SPUR_MASK,
20700 +                     AR_PHY_CHAN_SPUR_MASK_CF_CHAN_MASK_IDX_A, 0);
20701 +       REG_RMW_FIELD(ah, AR_PHY_PILOT_SPUR_MASK,
20702 +                     AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_A, 0);
20703 +       REG_RMW_FIELD(ah, AR_PHY_CHAN_SPUR_MASK,
20704 +                     AR_PHY_CHAN_SPUR_MASK_CF_CHAN_MASK_A, 0);
20705 +       REG_RMW_FIELD(ah, AR_PHY_SPUR_MASK_A,
20706 +                     AR_PHY_SPUR_MASK_A_CF_PUNC_MASK_A, 0);
20707 +       REG_RMW_FIELD(ah, AR_PHY_SPUR_REG,
20708 +                     AR_PHY_SPUR_REG_MASK_RATE_CNTL, 0);
20709 +}
20710 +
20711 +static void ar9003_hw_spur_ofdm(struct ath_hw *ah,
20712 +                               int freq_offset,
20713 +                               int spur_freq_sd,
20714 +                               int spur_delta_phase,
20715 +                               int spur_subchannel_sd)
20716 +{
20717 +       int mask_index = 0;
20718 +
20719 +       /* OFDM Spur mitigation */
20720 +       REG_RMW_FIELD(ah, AR_PHY_TIMING4,
20721 +                AR_PHY_TIMING4_ENABLE_SPUR_FILTER, 0x1);
20722 +       REG_RMW_FIELD(ah, AR_PHY_TIMING11,
20723 +                     AR_PHY_TIMING11_SPUR_FREQ_SD, spur_freq_sd);
20724 +       REG_RMW_FIELD(ah, AR_PHY_TIMING11,
20725 +                     AR_PHY_TIMING11_SPUR_DELTA_PHASE, spur_delta_phase);
20726 +       REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
20727 +                     AR_PHY_SFCORR_EXT_SPUR_SUBCHANNEL_SD, spur_subchannel_sd);
20728 +       REG_RMW_FIELD(ah, AR_PHY_TIMING11,
20729 +                     AR_PHY_TIMING11_USE_SPUR_FILTER_IN_AGC, 0x1);
20730 +       REG_RMW_FIELD(ah, AR_PHY_TIMING11,
20731 +                     AR_PHY_TIMING11_USE_SPUR_FILTER_IN_SELFCOR, 0x1);
20732 +       REG_RMW_FIELD(ah, AR_PHY_TIMING4,
20733 +                     AR_PHY_TIMING4_ENABLE_SPUR_RSSI, 0x1);
20734 +       REG_RMW_FIELD(ah, AR_PHY_SPUR_REG,
20735 +                     AR_PHY_SPUR_REG_SPUR_RSSI_THRESH, 34);
20736 +       REG_RMW_FIELD(ah, AR_PHY_SPUR_REG,
20737 +                     AR_PHY_SPUR_REG_EN_VIT_SPUR_RSSI, 1);
20738 +
20739 +       if (REG_READ_FIELD(ah, AR_PHY_MODE,
20740 +                          AR_PHY_MODE_DYNAMIC) == 0x1)
20741 +               REG_RMW_FIELD(ah, AR_PHY_SPUR_REG,
20742 +                             AR_PHY_SPUR_REG_ENABLE_NF_RSSI_SPUR_MIT, 1);
20743 +
20744 +       mask_index = (freq_offset << 4) / 5;
20745 +       if (mask_index < 0)
20746 +               mask_index = mask_index - 1;
20747 +
20748 +       mask_index = mask_index & 0x7f;
20749 +
20750 +       REG_RMW_FIELD(ah, AR_PHY_SPUR_REG,
20751 +                     AR_PHY_SPUR_REG_ENABLE_MASK_PPM, 0x1);
20752 +       REG_RMW_FIELD(ah, AR_PHY_TIMING4,
20753 +                     AR_PHY_TIMING4_ENABLE_PILOT_MASK, 0x1);
20754 +       REG_RMW_FIELD(ah, AR_PHY_TIMING4,
20755 +                     AR_PHY_TIMING4_ENABLE_CHAN_MASK, 0x1);
20756 +       REG_RMW_FIELD(ah, AR_PHY_PILOT_SPUR_MASK,
20757 +                     AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_IDX_A, mask_index);
20758 +       REG_RMW_FIELD(ah, AR_PHY_SPUR_MASK_A,
20759 +                     AR_PHY_SPUR_MASK_A_CF_PUNC_MASK_IDX_A, mask_index);
20760 +       REG_RMW_FIELD(ah, AR_PHY_CHAN_SPUR_MASK,
20761 +                     AR_PHY_CHAN_SPUR_MASK_CF_CHAN_MASK_IDX_A, mask_index);
20762 +       REG_RMW_FIELD(ah, AR_PHY_PILOT_SPUR_MASK,
20763 +                     AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_A, 0xc);
20764 +       REG_RMW_FIELD(ah, AR_PHY_CHAN_SPUR_MASK,
20765 +                     AR_PHY_CHAN_SPUR_MASK_CF_CHAN_MASK_A, 0xc);
20766 +       REG_RMW_FIELD(ah, AR_PHY_SPUR_MASK_A,
20767 +                     AR_PHY_SPUR_MASK_A_CF_PUNC_MASK_A, 0xa0);
20768 +       REG_RMW_FIELD(ah, AR_PHY_SPUR_REG,
20769 +                     AR_PHY_SPUR_REG_MASK_RATE_CNTL, 0xff);
20770 +}
20771 +
20772 +static void ar9003_hw_spur_ofdm_work(struct ath_hw *ah,
20773 +                                    struct ath9k_channel *chan,
20774 +                                    int freq_offset)
20775 +{
20776 +       int spur_freq_sd = 0;
20777 +       int spur_subchannel_sd = 0;
20778 +       int spur_delta_phase = 0;
20779 +
20780 +       if (IS_CHAN_HT40(chan)) {
20781 +               if (freq_offset < 0) {
20782 +                       if (REG_READ_FIELD(ah, AR_PHY_GEN_CTRL,
20783 +                                          AR_PHY_GC_DYN2040_PRI_CH) == 0x0)
20784 +                               spur_subchannel_sd = 1;
20785 +                       else
20786 +                               spur_subchannel_sd = 0;
20787 +
20788 +                       spur_freq_sd = ((freq_offset + 10) << 9) / 11;
20789 +
20790 +               } else {
20791 +                       if (REG_READ_FIELD(ah, AR_PHY_GEN_CTRL,
20792 +                           AR_PHY_GC_DYN2040_PRI_CH) == 0x0)
20793 +                               spur_subchannel_sd = 0;
20794 +                       else
20795 +                               spur_subchannel_sd = 1;
20796 +
20797 +                       spur_freq_sd = ((freq_offset - 10) << 9) / 11;
20798 +
20799 +               }
20800 +
20801 +               spur_delta_phase = (freq_offset << 17) / 5;
20802 +
20803 +       } else {
20804 +               spur_subchannel_sd = 0;
20805 +               spur_freq_sd = (freq_offset << 9) /11;
20806 +               spur_delta_phase = (freq_offset << 18) / 5;
20807 +       }
20808 +
20809 +       spur_freq_sd = spur_freq_sd & 0x3ff;
20810 +       spur_delta_phase = spur_delta_phase & 0xfffff;
20811 +
20812 +       ar9003_hw_spur_ofdm(ah,
20813 +                           freq_offset,
20814 +                           spur_freq_sd,
20815 +                           spur_delta_phase,
20816 +                           spur_subchannel_sd);
20817 +}
20818 +
20819 +/* Spur mitigation for OFDM */
20820 +static void ar9003_hw_spur_mitigate_ofdm(struct ath_hw *ah,
20821 +                                        struct ath9k_channel *chan)
20822 +{
20823 +       int synth_freq;
20824 +       int range = 10;
20825 +       int freq_offset = 0;
20826 +       int mode;
20827 +       u8* spurChansPtr;
20828 +       unsigned int i;
20829 +       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
20830 +
20831 +       if (IS_CHAN_5GHZ(chan)) {
20832 +               spurChansPtr = &(eep->modalHeader5G.spurChans[0]);
20833 +               mode = 0;
20834 +       }
20835 +       else {
20836 +               spurChansPtr = &(eep->modalHeader2G.spurChans[0]);
20837 +               mode = 1;
20838 +       }
20839 +
20840 +       if (spurChansPtr[0] == 0)
20841 +               return; /* No spur in the mode */
20842 +
20843 +       if (IS_CHAN_HT40(chan)) {
20844 +               range = 19;
20845 +               if (REG_READ_FIELD(ah, AR_PHY_GEN_CTRL,
20846 +                                  AR_PHY_GC_DYN2040_PRI_CH) == 0x0)
20847 +                       synth_freq = chan->channel - 10;
20848 +               else
20849 +                       synth_freq = chan->channel + 10;
20850 +       } else {
20851 +               range = 10;
20852 +               synth_freq = chan->channel;
20853 +       }
20854 +
20855 +       ar9003_hw_spur_ofdm_clear(ah);
20856 +
20857 +       for (i = 0; spurChansPtr[i] && i < 5; i++) {
20858 +               freq_offset = FBIN2FREQ(spurChansPtr[i], mode) - synth_freq;
20859 +               if (abs(freq_offset) < range) {
20860 +                       ar9003_hw_spur_ofdm_work(ah, chan, freq_offset);
20861 +                       break;
20862 +               }
20863 +       }
20864 +}
20865 +
20866 +static void ar9003_hw_spur_mitigate(struct ath_hw *ah,
20867 +                                   struct ath9k_channel *chan)
20868 +{
20869 +       ar9003_hw_spur_mitigate_mrc_cck(ah, chan);
20870 +       ar9003_hw_spur_mitigate_ofdm(ah, chan);
20871 +}
20872 +
20873 +static u32 ar9003_hw_compute_pll_control(struct ath_hw *ah,
20874 +                                        struct ath9k_channel *chan)
20875 +{
20876 +       u32 pll;
20877 +
20878 +       pll = SM(0x5, AR_RTC_9300_PLL_REFDIV);
20879 +
20880 +       if (chan && IS_CHAN_HALF_RATE(chan))
20881 +               pll |= SM(0x1, AR_RTC_9300_PLL_CLKSEL);
20882 +       else if (chan && IS_CHAN_QUARTER_RATE(chan))
20883 +               pll |= SM(0x2, AR_RTC_9300_PLL_CLKSEL);
20884 +
20885 +       if (chan && IS_CHAN_5GHZ(chan)) {
20886 +               pll |= SM(0x28, AR_RTC_9300_PLL_DIV);
20887 +
20888 +               /*
20889 +                * When doing fast clock, set PLL to 0x142c
20890 +                */
20891 +               if (IS_CHAN_A_5MHZ_SPACED(chan))
20892 +                       pll = 0x142c;
20893 +       } else
20894 +               pll |= SM(0x2c, AR_RTC_9300_PLL_DIV);
20895 +
20896 +       return pll;
20897 +}
20898 +
20899 +static void ar9003_hw_set_channel_regs(struct ath_hw *ah,
20900 +                                      struct ath9k_channel *chan)
20901 +{
20902 +       u32 phymode;
20903 +       u32 enableDacFifo = 0;
20904 +
20905 +       enableDacFifo =
20906 +               (REG_READ(ah, AR_PHY_GEN_CTRL) & AR_PHY_GC_ENABLE_DAC_FIFO);
20907 +
20908 +       /* Enable 11n HT, 20 MHz */
20909 +       phymode = AR_PHY_GC_HT_EN | AR_PHY_GC_SINGLE_HT_LTF1 | AR_PHY_GC_WALSH |
20910 +                 AR_PHY_GC_SHORT_GI_40 | enableDacFifo;
20911 +
20912 +       /* Configure baseband for dynamic 20/40 operation */
20913 +       if (IS_CHAN_HT40(chan)) {
20914 +               phymode |= AR_PHY_GC_DYN2040_EN;
20915 +               /* Configure control (primary) channel at +-10MHz */
20916 +               if ((chan->chanmode == CHANNEL_A_HT40PLUS) ||
20917 +                   (chan->chanmode == CHANNEL_G_HT40PLUS))
20918 +                       phymode |= AR_PHY_GC_DYN2040_PRI_CH;
20919 +
20920 +       }
20921 +
20922 +       /* make sure we preserve INI settings */
20923 +       phymode |= REG_READ(ah, AR_PHY_GEN_CTRL);
20924 +       /* turn off Green Field detection for STA for now */
20925 +       phymode &= ~AR_PHY_GC_GF_DETECT_EN;
20926 +
20927 +       REG_WRITE(ah, AR_PHY_GEN_CTRL, phymode);
20928 +
20929 +       /* Configure MAC for 20/40 operation */
20930 +       ath9k_hw_set11nmac2040(ah);
20931 +
20932 +       /* global transmit timeout (25 TUs default)*/
20933 +       REG_WRITE(ah, AR_GTXTO, 25 << AR_GTXTO_TIMEOUT_LIMIT_S);
20934 +       /* carrier sense timeout */
20935 +       REG_WRITE(ah, AR_CST, 0xF << AR_CST_TIMEOUT_LIMIT_S);
20936 +}
20937 +
20938 +static void ar9003_hw_init_bb(struct ath_hw *ah,
20939 +                             struct ath9k_channel *chan)
20940 +{
20941 +       u32 synthDelay;
20942 +
20943 +       /*
20944 +        * Wait for the frequency synth to settle (synth goes on
20945 +        * via AR_PHY_ACTIVE_EN).  Read the phy active delay register.
20946 +        * Value is in 100ns increments.
20947 +        */
20948 +       synthDelay = REG_READ(ah, AR_PHY_RX_DELAY) & AR_PHY_RX_DELAY_DELAY;
20949 +       if (IS_CHAN_B(chan))
20950 +               synthDelay = (4 * synthDelay) / 22;
20951 +       else
20952 +               synthDelay /= 10;
20953 +
20954 +       /* Activate the PHY (includes baseband activate + synthesizer on) */
20955 +       REG_WRITE(ah, AR_PHY_ACTIVE, AR_PHY_ACTIVE_EN);
20956 +
20957 +       /*
20958 +        * There is an issue if the AP starts the calibration before
20959 +        * the base band timeout completes.  This could result in the
20960 +        * rx_clear false triggering.  As a workaround we add delay an
20961 +        * extra BASE_ACTIVATE_DELAY usecs to ensure this condition
20962 +        * does not happen.
20963 +        */
20964 +       udelay(synthDelay + BASE_ACTIVATE_DELAY);
20965 +}
20966 +
20967 +void ar9003_hw_modify_chain_masks(struct ath_hw *ah,
20968 +                                 u8 rx_chainmask,
20969 +                                 u8 tx_chainmask)
20970 +{
20971 +       switch (rx_chainmask) {
20972 +       case 0x5:
20973 +               REG_SET_BIT(ah, AR_PHY_ANALOG_SWAP,
20974 +                           AR_PHY_SWAP_ALT_CHAIN);
20975 +       case 0x3:
20976 +       case 0x1:
20977 +       case 0x2:
20978 +       case 0x7:
20979 +               REG_WRITE(ah, AR_PHY_RX_CHAINMASK, rx_chainmask);
20980 +               REG_WRITE(ah, AR_PHY_CAL_CHAINMASK, rx_chainmask);
20981 +               break;
20982 +       default:
20983 +               break;
20984 +       }
20985 +
20986 +       REG_WRITE(ah, AR_SELFGEN_MASK, tx_chainmask);
20987 +       if (tx_chainmask == 0x5) {
20988 +               REG_SET_BIT(ah, AR_PHY_ANALOG_SWAP,
20989 +                           AR_PHY_SWAP_ALT_CHAIN);
20990 +       }
20991 +}
20992 +
20993 +static void ar9003_hw_init_chain_masks(struct ath_hw *ah)
20994 +{
20995 +       ar9003_hw_modify_chain_masks(ah, ah->rxchainmask, ah->txchainmask);
20996 +}
20997 +
20998 +/*
20999 + * Override INI values with chip specific configuration.
21000 + */
21001 +static void ar9003_hw_override_ini(struct ath_hw *ah)
21002 +{
21003 +       u32 val;
21004 +
21005 +       /*
21006 +        * Set the RX_ABORT and RX_DIS and clear it only after
21007 +        * RXE is set for MAC. This prevents frames with
21008 +        * corrupted descriptor status.
21009 +        */
21010 +       REG_SET_BIT(ah, AR_DIAG_SW, (AR_DIAG_RX_DIS | AR_DIAG_RX_ABORT));
21011 +
21012 +       /*
21013 +        * For AR9280 and above, there is a new feature that allows
21014 +        * Multicast search based on both MAC Address and Key ID. By default,
21015 +        * this feature is enabled. But since the driver is not using this
21016 +        * feature, we switch it off; otherwise multicast search based on
21017 +        * MAC addr only will fail.
21018 +        */
21019 +       val = REG_READ(ah, AR_PCU_MISC_MODE2) & (~AR_ADHOC_MCAST_KEYID_ENABLE);
21020 +       REG_WRITE(ah, AR_PCU_MISC_MODE2, val | AR_AGG_WEP_ENABLE_FIX | AR_AGG_WEP_ENABLE);
21021 +}
21022 +
21023 +static void ar9003_hw_prog_ini(struct ath_hw *ah,
21024 +                              struct ar5416IniArray *iniArr,
21025 +                              int column)
21026 +{
21027 +       unsigned int i, regWrites = 0;
21028 +
21029 +       /* New INI format: Array may be undefined (pre, core, post arrays) */
21030 +       if (!iniArr->ia_array)
21031 +               return;
21032 +
21033 +       /*
21034 +        * New INI format: Pre, core, and post arrays for a given subsystem
21035 +        * may be modal (> 2 columns) or non-modal (2 columns). Determine if
21036 +        * the array is non-modal and force the column to 1.
21037 +        */
21038 +       if (column >= iniArr->ia_columns)
21039 +               column = 1;
21040 +
21041 +       for (i = 0; i < iniArr->ia_rows; i++) {
21042 +               u32 reg = INI_RA(iniArr, i, 0);
21043 +               u32 val = INI_RA(iniArr, i, column);
21044 +
21045 +               REG_WRITE(ah, reg, val);
21046 +
21047 +               /*
21048 +                * Determine if this is a shift register value, and insert the
21049 +                * configured delay if so.
21050 +                */
21051 +               if (reg >= 0x16000 && reg < 0x17000
21052 +                   && ah->config.analog_shiftreg)
21053 +                       udelay(100);
21054 +
21055 +               DO_DELAY(regWrites);
21056 +       }
21057 +}
21058 +
21059 +static int ar9003_hw_process_ini(struct ath_hw *ah,
21060 +                                struct ath9k_channel *chan)
21061 +{
21062 +       struct ath_regulatory *regulatory = ath9k_hw_regulatory(ah);
21063 +       unsigned int regWrites = 0, i;
21064 +       struct ieee80211_channel *channel = chan->chan;
21065 +       u32 modesIndex, freqIndex;
21066 +
21067 +       switch (chan->chanmode) {
21068 +       case CHANNEL_A:
21069 +       case CHANNEL_A_HT20:
21070 +               modesIndex = 1;
21071 +               freqIndex = 1;
21072 +               break;
21073 +       case CHANNEL_A_HT40PLUS:
21074 +       case CHANNEL_A_HT40MINUS:
21075 +               modesIndex = 2;
21076 +               freqIndex = 1;
21077 +               break;
21078 +       case CHANNEL_G:
21079 +       case CHANNEL_G_HT20:
21080 +       case CHANNEL_B:
21081 +               modesIndex = 4;
21082 +               freqIndex = 2;
21083 +               break;
21084 +       case CHANNEL_G_HT40PLUS:
21085 +       case CHANNEL_G_HT40MINUS:
21086 +               modesIndex = 3;
21087 +               freqIndex = 2;
21088 +               break;
21089 +
21090 +       default:
21091 +               return -EINVAL;
21092 +       }
21093 +
21094 +       for (i = 0; i < ATH_INI_NUM_SPLIT; i++) {
21095 +               ar9003_hw_prog_ini(ah, &ah->iniSOC[i], modesIndex);
21096 +               ar9003_hw_prog_ini(ah, &ah->iniMac[i], modesIndex);
21097 +               ar9003_hw_prog_ini(ah, &ah->iniBB[i], modesIndex);
21098 +               ar9003_hw_prog_ini(ah, &ah->iniRadio[i], modesIndex);
21099 +       }
21100 +
21101 +       REG_WRITE_ARRAY(&ah->iniModesRxGain, 1, regWrites);
21102 +       REG_WRITE_ARRAY(&ah->iniModesTxGain, modesIndex, regWrites);
21103 +
21104 +       /*
21105 +        * For 5GHz channels requiring Fast Clock, apply
21106 +        * different modal values.
21107 +        */
21108 +       if (IS_CHAN_A_5MHZ_SPACED(chan))
21109 +               REG_WRITE_ARRAY(&ah->iniModesAdditional,
21110 +                               modesIndex, regWrites);
21111 +
21112 +       ar9003_hw_override_ini(ah);
21113 +       ar9003_hw_set_channel_regs(ah, chan);
21114 +       ar9003_hw_init_chain_masks(ah);
21115 +
21116 +       /* Set TX power */
21117 +       ah->eep_ops->set_txpower(ah, chan,
21118 +                                ath9k_regd_get_ctl(regulatory, chan),
21119 +                                channel->max_antenna_gain * 2,
21120 +                                channel->max_power * 2,
21121 +                                min((u32) MAX_RATE_POWER,
21122 +                                (u32) regulatory->power_limit));
21123 +
21124 +       return 0;
21125 +}
21126 +
21127 +static void ar9003_hw_set_rfmode(struct ath_hw *ah,
21128 +                                struct ath9k_channel *chan)
21129 +{
21130 +       u32 rfMode = 0;
21131 +
21132 +       if (chan == NULL)
21133 +               return;
21134 +
21135 +       rfMode |= (IS_CHAN_B(chan) || IS_CHAN_G(chan))
21136 +               ? AR_PHY_MODE_DYNAMIC : AR_PHY_MODE_OFDM;
21137 +
21138 +       if (IS_CHAN_A_5MHZ_SPACED(chan))
21139 +               rfMode |= (AR_PHY_MODE_DYNAMIC | AR_PHY_MODE_DYN_CCK_DISABLE);
21140 +
21141 +       REG_WRITE(ah, AR_PHY_MODE, rfMode);
21142 +}
21143 +
21144 +static void ar9003_hw_mark_phy_inactive(struct ath_hw *ah)
21145 +{
21146 +       REG_WRITE(ah, AR_PHY_ACTIVE, AR_PHY_ACTIVE_DIS);
21147 +}
21148 +
21149 +static void ar9003_hw_set_delta_slope(struct ath_hw *ah,
21150 +                                     struct ath9k_channel *chan)
21151 +{
21152 +       u32 coef_scaled, ds_coef_exp, ds_coef_man;
21153 +       u32 clockMhzScaled = 0x64000000;
21154 +       struct chan_centers centers;
21155 +
21156 +       /*
21157 +        * half and quarter rate can divide the scaled clock by 2 or 4
21158 +        * scale for selected channel bandwidth
21159 +        */
21160 +       if (IS_CHAN_HALF_RATE(chan))
21161 +               clockMhzScaled = clockMhzScaled >> 1;
21162 +       else if (IS_CHAN_QUARTER_RATE(chan))
21163 +               clockMhzScaled = clockMhzScaled >> 2;
21164 +
21165 +       /*
21166 +        * ALGO -> coef = 1e8/fcarrier*fclock/40;
21167 +        * scaled coef to provide precision for this floating calculation
21168 +        */
21169 +       ath9k_hw_get_channel_centers(ah, chan, &centers);
21170 +       coef_scaled = clockMhzScaled / centers.synth_center;
21171 +
21172 +       ath9k_hw_get_delta_slope_vals(ah, coef_scaled, &ds_coef_man,
21173 +                                     &ds_coef_exp);
21174 +
21175 +       REG_RMW_FIELD(ah, AR_PHY_TIMING3,
21176 +                     AR_PHY_TIMING3_DSC_MAN, ds_coef_man);
21177 +       REG_RMW_FIELD(ah, AR_PHY_TIMING3,
21178 +                     AR_PHY_TIMING3_DSC_EXP, ds_coef_exp);
21179 +
21180 +       /*
21181 +        * For Short GI,
21182 +        * scaled coeff is 9/10 that of normal coeff
21183 +        */
21184 +       coef_scaled = (9 * coef_scaled) / 10;
21185 +
21186 +       ath9k_hw_get_delta_slope_vals(ah, coef_scaled, &ds_coef_man,
21187 +                                     &ds_coef_exp);
21188 +
21189 +       /* for short gi */
21190 +       REG_RMW_FIELD(ah, AR_PHY_SGI_DELTA,
21191 +                     AR_PHY_SGI_DSC_MAN, ds_coef_man);
21192 +       REG_RMW_FIELD(ah, AR_PHY_SGI_DELTA,
21193 +                     AR_PHY_SGI_DSC_EXP, ds_coef_exp);
21194 +}
21195 +
21196 +static bool ar9003_hw_rfbus_req(struct ath_hw *ah)
21197 +{
21198 +       REG_WRITE(ah, AR_PHY_RFBUS_REQ, AR_PHY_RFBUS_REQ_EN);
21199 +       return ath9k_hw_wait(ah, AR_PHY_RFBUS_GRANT, AR_PHY_RFBUS_GRANT_EN,
21200 +                            AR_PHY_RFBUS_GRANT_EN, AH_WAIT_TIMEOUT);
21201 +}
21202 +
21203 +/*
21204 + * Wait for the frequency synth to settle (synth goes on via PHY_ACTIVE_EN).
21205 + * Read the phy active delay register. Value is in 100ns increments.
21206 + */
21207 +static void ar9003_hw_rfbus_done(struct ath_hw *ah)
21208 +{
21209 +       u32 synthDelay = REG_READ(ah, AR_PHY_RX_DELAY) & AR_PHY_RX_DELAY_DELAY;
21210 +       if (IS_CHAN_B(ah->curchan))
21211 +               synthDelay = (4 * synthDelay) / 22;
21212 +       else
21213 +               synthDelay /= 10;
21214 +
21215 +       udelay(synthDelay + BASE_ACTIVATE_DELAY);
21216 +
21217 +       REG_WRITE(ah, AR_PHY_RFBUS_REQ, 0);
21218 +}
21219 +
21220 +/*
21221 + * Set the interrupt and GPIO values so the ISR can disable RF
21222 + * on a switch signal.  Assumes GPIO port and interrupt polarity
21223 + * are set prior to call.
21224 + */
21225 +static void ar9003_hw_enable_rfkill(struct ath_hw *ah)
21226 +{
21227 +       /* Connect rfsilent_bb_l to baseband */
21228 +       REG_SET_BIT(ah, AR_GPIO_INPUT_EN_VAL,
21229 +                   AR_GPIO_INPUT_EN_VAL_RFSILENT_BB);
21230 +       /* Set input mux for rfsilent_bb_l to GPIO #0 */
21231 +       REG_CLR_BIT(ah, AR_GPIO_INPUT_MUX2,
21232 +                   AR_GPIO_INPUT_MUX2_RFSILENT);
21233 +
21234 +       /*
21235 +        * Configure the desired GPIO port for input and
21236 +        * enable baseband rf silence.
21237 +        */
21238 +       ath9k_hw_cfg_gpio_input(ah, ah->rfkill_gpio);
21239 +       REG_SET_BIT(ah, AR_PHY_TEST, RFSILENT_BB);
21240 +}
21241 +
21242 +static void ar9003_hw_set_diversity(struct ath_hw *ah, bool value)
21243 +{
21244 +       u32 v = REG_READ(ah, AR_PHY_CCK_DETECT);
21245 +       if (value)
21246 +               v |= AR_PHY_CCK_DETECT_BB_ENABLE_ANT_FAST_DIV;
21247 +       else
21248 +               v &= ~AR_PHY_CCK_DETECT_BB_ENABLE_ANT_FAST_DIV;
21249 +       REG_WRITE(ah, AR_PHY_CCK_DETECT, v);
21250 +}
21251 +
21252 +static bool ar9003_hw_ani_control(struct ath_hw *ah,
21253 +                                 enum ath9k_ani_cmd cmd, int param)
21254 +{
21255 +       struct ar5416AniState *aniState = ah->curani;
21256 +       struct ath_common *common = ath9k_hw_common(ah);
21257 +
21258 +       switch (cmd & ah->ani_function) {
21259 +       case ATH9K_ANI_NOISE_IMMUNITY_LEVEL:{
21260 +               u32 level = param;
21261 +
21262 +               if (level >= ARRAY_SIZE(ah->totalSizeDesired)) {
21263 +                       ath_print(common, ATH_DBG_ANI,
21264 +                                 "level out of range (%u > %u)\n",
21265 +                                 level,
21266 +                                 (unsigned)ARRAY_SIZE(ah->totalSizeDesired));
21267 +                       return false;
21268 +               }
21269 +
21270 +               REG_RMW_FIELD(ah, AR_PHY_DESIRED_SZ,
21271 +                             AR_PHY_DESIRED_SZ_TOT_DES,
21272 +                             ah->totalSizeDesired[level]);
21273 +               REG_RMW_FIELD(ah, AR_PHY_AGC,
21274 +                             AR_PHY_AGC_COARSE_LOW,
21275 +                             ah->coarse_low[level]);
21276 +               REG_RMW_FIELD(ah, AR_PHY_AGC,
21277 +                             AR_PHY_AGC_COARSE_HIGH,
21278 +                             ah->coarse_high[level]);
21279 +               REG_RMW_FIELD(ah, AR_PHY_FIND_SIG,
21280 +                             AR_PHY_FIND_SIG_FIRPWR, ah->firpwr[level]);
21281 +
21282 +               if (level > aniState->noiseImmunityLevel)
21283 +                       ah->stats.ast_ani_niup++;
21284 +               else if (level < aniState->noiseImmunityLevel)
21285 +                       ah->stats.ast_ani_nidown++;
21286 +               aniState->noiseImmunityLevel = level;
21287 +               break;
21288 +       }
21289 +       case ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION:{
21290 +               const int m1ThreshLow[] = { 127, 50 };
21291 +               const int m2ThreshLow[] = { 127, 40 };
21292 +               const int m1Thresh[] = { 127, 0x4d };
21293 +               const int m2Thresh[] = { 127, 0x40 };
21294 +               const int m2CountThr[] = { 31, 16 };
21295 +               const int m2CountThrLow[] = { 63, 48 };
21296 +               u32 on = param ? 1 : 0;
21297 +
21298 +               REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW,
21299 +                             AR_PHY_SFCORR_LOW_M1_THRESH_LOW,
21300 +                             m1ThreshLow[on]);
21301 +               REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW,
21302 +                             AR_PHY_SFCORR_LOW_M2_THRESH_LOW,
21303 +                             m2ThreshLow[on]);
21304 +               REG_RMW_FIELD(ah, AR_PHY_SFCORR,
21305 +                             AR_PHY_SFCORR_M1_THRESH, m1Thresh[on]);
21306 +               REG_RMW_FIELD(ah, AR_PHY_SFCORR,
21307 +                             AR_PHY_SFCORR_M2_THRESH, m2Thresh[on]);
21308 +               REG_RMW_FIELD(ah, AR_PHY_SFCORR,
21309 +                             AR_PHY_SFCORR_M2COUNT_THR, m2CountThr[on]);
21310 +               REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW,
21311 +                             AR_PHY_SFCORR_LOW_M2COUNT_THR_LOW, m2CountThrLow[on]);
21312 +
21313 +               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
21314 +                             AR_PHY_SFCORR_EXT_M1_THRESH_LOW, m1ThreshLow[on]);
21315 +               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
21316 +                             AR_PHY_SFCORR_EXT_M2_THRESH_LOW, m2ThreshLow[on]);
21317 +               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
21318 +                             AR_PHY_SFCORR_EXT_M1_THRESH, m1Thresh[on]);
21319 +               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
21320 +                             AR_PHY_SFCORR_EXT_M2_THRESH, m2Thresh[on]);
21321 +
21322 +               if (on)
21323 +                       REG_SET_BIT(ah, AR_PHY_SFCORR_LOW,
21324 +                                   AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW);
21325 +               else
21326 +                       REG_CLR_BIT(ah, AR_PHY_SFCORR_LOW,
21327 +                                   AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW);
21328 +
21329 +               if (!on != aniState->ofdmWeakSigDetectOff) {
21330 +                       if (on)
21331 +                               ah->stats.ast_ani_ofdmon++;
21332 +                       else
21333 +                               ah->stats.ast_ani_ofdmoff++;
21334 +                       aniState->ofdmWeakSigDetectOff = !on;
21335 +               }
21336 +               break;
21337 +       }
21338 +       case ATH9K_ANI_CCK_WEAK_SIGNAL_THR:{
21339 +               const int weakSigThrCck[] = { 8, 6 };
21340 +               u32 high = param ? 1 : 0;
21341 +
21342 +               REG_RMW_FIELD(ah, AR_PHY_CCK_DETECT,
21343 +                             AR_PHY_CCK_DETECT_WEAK_SIG_THR_CCK,
21344 +                             weakSigThrCck[high]);
21345 +               if (high != aniState->cckWeakSigThreshold) {
21346 +                       if (high)
21347 +                               ah->stats.ast_ani_cckhigh++;
21348 +                       else
21349 +                               ah->stats.ast_ani_ccklow++;
21350 +                       aniState->cckWeakSigThreshold = high;
21351 +               }
21352 +               break;
21353 +       }
21354 +       case ATH9K_ANI_FIRSTEP_LEVEL:{
21355 +               const int firstep[] = { 0, 4, 8 };
21356 +               u32 level = param;
21357 +
21358 +               if (level >= ARRAY_SIZE(firstep)) {
21359 +                       ath_print(common, ATH_DBG_ANI,
21360 +                                 "level out of range (%u > %u)\n",
21361 +                                 level,
21362 +                                 (unsigned) ARRAY_SIZE(firstep));
21363 +                       return false;
21364 +               }
21365 +               REG_RMW_FIELD(ah, AR_PHY_FIND_SIG,
21366 +                             AR_PHY_FIND_SIG_FIRSTEP,
21367 +                             firstep[level]);
21368 +               if (level > aniState->firstepLevel)
21369 +                       ah->stats.ast_ani_stepup++;
21370 +               else if (level < aniState->firstepLevel)
21371 +                       ah->stats.ast_ani_stepdown++;
21372 +               aniState->firstepLevel = level;
21373 +               break;
21374 +       }
21375 +       case ATH9K_ANI_SPUR_IMMUNITY_LEVEL:{
21376 +               const int cycpwrThr1[] =
21377 +                       { 2, 4, 6, 8, 10, 12, 14, 16 };
21378 +               u32 level = param;
21379 +
21380 +               if (level >= ARRAY_SIZE(cycpwrThr1)) {
21381 +                       ath_print(common, ATH_DBG_ANI,
21382 +                                 "level out of range (%u > %u)\n",
21383 +                                 level,
21384 +                                 (unsigned) ARRAY_SIZE(cycpwrThr1));
21385 +                       return false;
21386 +               }
21387 +               REG_RMW_FIELD(ah, AR_PHY_TIMING5,
21388 +                             AR_PHY_TIMING5_CYCPWR_THR1,
21389 +                             cycpwrThr1[level]);
21390 +               if (level > aniState->spurImmunityLevel)
21391 +                       ah->stats.ast_ani_spurup++;
21392 +               else if (level < aniState->spurImmunityLevel)
21393 +                       ah->stats.ast_ani_spurdown++;
21394 +               aniState->spurImmunityLevel = level;
21395 +               break;
21396 +       }
21397 +       case ATH9K_ANI_PRESENT:
21398 +               break;
21399 +       default:
21400 +               ath_print(common, ATH_DBG_ANI,
21401 +                         "invalid cmd %u\n", cmd);
21402 +               return false;
21403 +       }
21404 +
21405 +       ath_print(common, ATH_DBG_ANI, "ANI parameters:\n");
21406 +       ath_print(common, ATH_DBG_ANI,
21407 +                 "noiseImmunityLevel=%d, spurImmunityLevel=%d, "
21408 +                 "ofdmWeakSigDetectOff=%d\n",
21409 +                 aniState->noiseImmunityLevel,
21410 +                 aniState->spurImmunityLevel,
21411 +                 !aniState->ofdmWeakSigDetectOff);
21412 +       ath_print(common, ATH_DBG_ANI,
21413 +                 "cckWeakSigThreshold=%d, "
21414 +                 "firstepLevel=%d, listenTime=%d\n",
21415 +                 aniState->cckWeakSigThreshold,
21416 +                 aniState->firstepLevel,
21417 +                 aniState->listenTime);
21418 +       ath_print(common, ATH_DBG_ANI,
21419 +               "cycleCount=%d, ofdmPhyErrCount=%d, cckPhyErrCount=%d\n\n",
21420 +               aniState->cycleCount,
21421 +               aniState->ofdmPhyErrCount,
21422 +               aniState->cckPhyErrCount);
21423 +
21424 +       return true;
21425 +}
21426 +
21427 +static void ar9003_hw_nf_sanitize_2g(struct ath_hw *ah, s16 *nf)
21428 +{
21429 +       struct ath_common *common = ath9k_hw_common(ah);
21430 +
21431 +       if (*nf > ah->nf_2g_max) {
21432 +               ath_print(common, ATH_DBG_CALIBRATE,
21433 +                         "2 GHz NF (%d) > MAX (%d), "
21434 +                         "correcting to MAX",
21435 +                         *nf, ah->nf_2g_max);
21436 +               *nf = ah->nf_2g_max;
21437 +       } else if (*nf < ah->nf_2g_min) {
21438 +               ath_print(common, ATH_DBG_CALIBRATE,
21439 +                         "2 GHz NF (%d) < MIN (%d), "
21440 +                         "correcting to MIN",
21441 +                         *nf, ah->nf_2g_min);
21442 +               *nf = ah->nf_2g_min;
21443 +       }
21444 +}
21445 +
21446 +static void ar9003_hw_nf_sanitize_5g(struct ath_hw *ah, s16 *nf)
21447 +{
21448 +       struct ath_common *common = ath9k_hw_common(ah);
21449 +
21450 +       if (*nf > ah->nf_5g_max) {
21451 +               ath_print(common, ATH_DBG_CALIBRATE,
21452 +                         "5 GHz NF (%d) > MAX (%d), "
21453 +                         "correcting to MAX",
21454 +                         *nf, ah->nf_5g_max);
21455 +               *nf = ah->nf_5g_max;
21456 +       } else if (*nf < ah->nf_5g_min) {
21457 +               ath_print(common, ATH_DBG_CALIBRATE,
21458 +                         "5 GHz NF (%d) < MIN (%d), "
21459 +                         "correcting to MIN",
21460 +                         *nf, ah->nf_5g_min);
21461 +               *nf = ah->nf_5g_min;
21462 +       }
21463 +}
21464 +
21465 +static void ar9003_hw_nf_sanitize(struct ath_hw *ah, s16 *nf)
21466 +{
21467 +       if (IS_CHAN_2GHZ(ah->curchan))
21468 +               ar9003_hw_nf_sanitize_2g(ah, nf);
21469 +       else
21470 +               ar9003_hw_nf_sanitize_5g(ah, nf);
21471 +}
21472 +
21473 +static void ar9003_hw_do_getnf(struct ath_hw *ah,
21474 +                             int16_t nfarray[NUM_NF_READINGS])
21475 +{
21476 +       struct ath_common *common = ath9k_hw_common(ah);
21477 +       int16_t nf;
21478 +
21479 +       nf = MS(REG_READ(ah, AR_PHY_CCA_0), AR_PHY_MINCCA_PWR);
21480 +       if (nf & 0x100)
21481 +               nf = 0 - ((nf ^ 0x1ff) + 1);
21482 +       ar9003_hw_nf_sanitize(ah, &nf);
21483 +       ath_print(common, ATH_DBG_CALIBRATE,
21484 +                 "NF calibrated [ctl] [chain 0] is %d\n", nf);
21485 +       nfarray[0] = nf;
21486 +
21487 +       nf = MS(REG_READ(ah, AR_PHY_CCA_1), AR_PHY_CH1_MINCCA_PWR);
21488 +       if (nf & 0x100)
21489 +               nf = 0 - ((nf ^ 0x1ff) + 1);
21490 +       ar9003_hw_nf_sanitize(ah, &nf);
21491 +       ath_print(common, ATH_DBG_CALIBRATE,
21492 +                 "NF calibrated [ctl] [chain 1] is %d\n", nf);
21493 +       nfarray[1] = nf;
21494 +
21495 +       nf = MS(REG_READ(ah, AR_PHY_CCA_2), AR_PHY_CH2_MINCCA_PWR);
21496 +       if (nf & 0x100)
21497 +               nf = 0 - ((nf ^ 0x1ff) + 1);
21498 +       ar9003_hw_nf_sanitize(ah, &nf);
21499 +       ath_print(common, ATH_DBG_CALIBRATE,
21500 +                 "NF calibrated [ctl] [chain 2] is %d\n", nf);
21501 +       nfarray[2] = nf;
21502 +
21503 +       nf = MS(REG_READ(ah, AR_PHY_EXT_CCA), AR_PHY_EXT_MINCCA_PWR);
21504 +       if (nf & 0x100)
21505 +               nf = 0 - ((nf ^ 0x1ff) + 1);
21506 +       ar9003_hw_nf_sanitize(ah, &nf);
21507 +       ath_print(common, ATH_DBG_CALIBRATE,
21508 +                 "NF calibrated [ext] [chain 0] is %d\n", nf);
21509 +       nfarray[3] = nf;
21510 +
21511 +       nf = MS(REG_READ(ah, AR_PHY_EXT_CCA_1), AR_PHY_CH1_EXT_MINCCA_PWR);
21512 +       if (nf & 0x100)
21513 +               nf = 0 - ((nf ^ 0x1ff) + 1);
21514 +       ar9003_hw_nf_sanitize(ah, &nf);
21515 +       ath_print(common, ATH_DBG_CALIBRATE,
21516 +                 "NF calibrated [ext] [chain 1] is %d\n", nf);
21517 +       nfarray[4] = nf;
21518 +
21519 +       nf = MS(REG_READ(ah, AR_PHY_EXT_CCA_2), AR_PHY_CH2_EXT_MINCCA_PWR);
21520 +       if (nf & 0x100)
21521 +               nf = 0 - ((nf ^ 0x1ff) + 1);
21522 +       ar9003_hw_nf_sanitize(ah, &nf);
21523 +       ath_print(common, ATH_DBG_CALIBRATE,
21524 +                 "NF calibrated [ext] [chain 2] is %d\n", nf);
21525 +       nfarray[5] = nf;
21526 +}
21527 +
21528 +void ar9003_hw_set_nf_limits(struct ath_hw *ah)
21529 +{
21530 +       ah->nf_2g_max = AR_PHY_CCA_MAX_GOOD_VAL_9300_2GHZ;
21531 +       ah->nf_2g_min = AR_PHY_CCA_MIN_GOOD_VAL_9300_2GHZ;
21532 +       ah->nf_5g_max = AR_PHY_CCA_MAX_GOOD_VAL_9300_5GHZ;
21533 +       ah->nf_5g_min = AR_PHY_CCA_MIN_GOOD_VAL_9300_5GHZ;
21534 +}
21535 +
21536 +/*
21537 + * Find out which of the RX chains are enabled
21538 + */
21539 +static u32 ar9003_hw_get_rx_chainmask(struct ath_hw *ah)
21540 +{
21541 +       u32 chain = REG_READ(ah, AR_PHY_RX_CHAINMASK);
21542 +       /*
21543 +        * The bits [2:0] indicate the rx chain mask and are to be
21544 +        * interpreted as follows:
21545 +        * 00x => Only chain 0 is enabled
21546 +        * 01x => Chain 1 and 0 enabled
21547 +        * 1xx => Chain 2,1 and 0 enabled
21548 +        */
21549 +       return (chain & 0x7);
21550 +}
21551 +
21552 +static void ar9003_hw_loadnf(struct ath_hw *ah, struct ath9k_channel *chan)
21553 +{
21554 +       struct ath9k_nfcal_hist *h;
21555 +       unsigned i, j;
21556 +       int32_t val;
21557 +       const u32 ar9300_cca_regs[6] = {
21558 +               AR_PHY_CCA_0,
21559 +               AR_PHY_CCA_1,
21560 +               AR_PHY_CCA_2,
21561 +               AR_PHY_EXT_CCA,
21562 +               AR_PHY_EXT_CCA_1,
21563 +               AR_PHY_EXT_CCA_2,
21564 +       };
21565 +       u8 chainmask, rx_chain_status;
21566 +       struct ath_common *common = ath9k_hw_common(ah);
21567 +
21568 +       rx_chain_status = ar9003_hw_get_rx_chainmask(ah);
21569 +
21570 +       chainmask = 0x3F;
21571 +       h = ah->nfCalHist;
21572 +
21573 +       for (i = 0; i < NUM_NF_READINGS; i++) {
21574 +               if (chainmask & (1 << i)) {
21575 +                       val = REG_READ(ah, ar9300_cca_regs[i]);
21576 +                       val &= 0xFFFFFE00;
21577 +                       val |= (((u32) (h[i].privNF) << 1) & 0x1ff);
21578 +                       REG_WRITE(ah, ar9300_cca_regs[i], val);
21579 +               }
21580 +       }
21581 +
21582 +       /*
21583 +        * Load software filtered NF value into baseband internal minCCApwr
21584 +        * variable.
21585 +        */
21586 +       REG_CLR_BIT(ah, AR_PHY_AGC_CONTROL,
21587 +                   AR_PHY_AGC_CONTROL_ENABLE_NF);
21588 +       REG_CLR_BIT(ah, AR_PHY_AGC_CONTROL,
21589 +                   AR_PHY_AGC_CONTROL_NO_UPDATE_NF);
21590 +       REG_SET_BIT(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_NF);
21591 +
21592 +       /*
21593 +        * Wait for load to complete, should be fast, a few 10s of us.
21594 +        * The max delay was changed from an original 250us to 10000us
21595 +        * since 250us often results in NF load timeout and causes deaf
21596 +        * condition during stress testing 12/12/2009
21597 +        */
21598 +       for (j = 0; j < 1000; j++) {
21599 +               if ((REG_READ(ah, AR_PHY_AGC_CONTROL) &
21600 +                    AR_PHY_AGC_CONTROL_NF) == 0)
21601 +                       break;
21602 +               udelay(10);
21603 +       }
21604 +
21605 +       /*
21606 +        * We timed out waiting for the noisefloor to load, probably due to an
21607 +        * in-progress rx. Simply return here and allow the load plenty of time
21608 +        * to complete before the next calibration interval.  We need to avoid
21609 +        * trying to load -50 (which happens below) while the previous load is
21610 +        * still in progress as this can cause rx deafness. Instead by returning
21611 +        * here, the baseband nf cal will just be capped by our present
21612 +        * noisefloor until the next calibration timer.
21613 +        */
21614 +       if (j == 1000) {
21615 +               ath_print(common, ATH_DBG_ANY, "Timeout while waiting for nf "
21616 +                         "to load: AR_PHY_AGC_CONTROL=0x%x\n",
21617 +                         REG_READ(ah, AR_PHY_AGC_CONTROL));
21618 +       }
21619 +
21620 +       /*
21621 +        * Restore maxCCAPower register parameter again so that we're not capped
21622 +        * by the median we just loaded.  This will be initial (and max) value
21623 +        * of next noise floor calibration the baseband does.
21624 +        */
21625 +       for (i = 0; i < NUM_NF_READINGS; i++) {
21626 +               if (chainmask & (1 << i)) {
21627 +                       val = REG_READ(ah, ar9300_cca_regs[i]);
21628 +                       val &= 0xFFFFFE00;
21629 +                       val |= (((u32) (-50) << 1) & 0x1ff);
21630 +                       REG_WRITE(ah, ar9300_cca_regs[i], val);
21631 +               }
21632 +       }
21633 +}
21634 +
21635 +void ar9003_hw_attach_phy_ops(struct ath_hw *ah)
21636 +{
21637 +       struct ath_hw_private_ops *priv_ops = ath9k_hw_private_ops(ah);
21638 +
21639 +       priv_ops->rf_set_freq = ar9003_hw_set_channel;
21640 +       priv_ops->spur_mitigate_freq = ar9003_hw_spur_mitigate;
21641 +       priv_ops->compute_pll_control = ar9003_hw_compute_pll_control;
21642 +       priv_ops->set_channel_regs = ar9003_hw_set_channel_regs;
21643 +       priv_ops->init_bb = ar9003_hw_init_bb;
21644 +       priv_ops->process_ini = ar9003_hw_process_ini;
21645 +       priv_ops->set_rfmode = ar9003_hw_set_rfmode;
21646 +       priv_ops->mark_phy_inactive = ar9003_hw_mark_phy_inactive;
21647 +       priv_ops->set_delta_slope = ar9003_hw_set_delta_slope;
21648 +       priv_ops->rfbus_req = ar9003_hw_rfbus_req;
21649 +       priv_ops->rfbus_done = ar9003_hw_rfbus_done;
21650 +       priv_ops->enable_rfkill = ar9003_hw_enable_rfkill;
21651 +       priv_ops->set_diversity = ar9003_hw_set_diversity;
21652 +       priv_ops->ani_control = ar9003_hw_ani_control;
21653 +       priv_ops->do_getnf = ar9003_hw_do_getnf;
21654 +       priv_ops->loadnf = ar9003_hw_loadnf;
21655 +}
21656 diff --git a/drivers/net/wireless/ath/ath9k/ar9003_phy.h b/drivers/net/wireless/ath/ath9k/ar9003_phy.h
21657 new file mode 100644
21658 index 0000000..e330382
21659 --- /dev/null
21660 +++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.h
21661 @@ -0,0 +1,849 @@
21662 +/*
21663 + * Copyright (c) 2002-2010 Atheros Communications, Inc.
21664 + *
21665 + * Permission to use, copy, modify, and/or distribute this software for any
21666 + * purpose with or without fee is hereby granted, provided that the above
21667 + * copyright notice and this permission notice appear in all copies.
21668 + *
21669 + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
21670 + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
21671 + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
21672 + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
21673 + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
21674 + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
21675 + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
21676 + */
21677 +
21678 +#ifndef AR9003_PHY_H
21679 +#define AR9003_PHY_H
21680 +
21681 +/*
21682 + * Channel Register Map
21683 + */
21684 +#define AR_CHAN_BASE   0x9800
21685 +
21686 +#define AR_PHY_TIMING1      AR_CHAN_BASE + 0x0
21687 +#define AR_PHY_TIMING2      AR_CHAN_BASE + 0x4
21688 +#define AR_PHY_TIMING3      AR_CHAN_BASE + 0x8
21689 +#define AR_PHY_TIMING4      AR_CHAN_BASE + 0xc
21690 +#define AR_PHY_TIMING5      AR_CHAN_BASE + 0x10
21691 +#define AR_PHY_TIMING6      AR_CHAN_BASE + 0x14
21692 +#define AR_PHY_TIMING11     AR_CHAN_BASE + 0x18
21693 +#define AR_PHY_SPUR_REG     AR_CHAN_BASE + 0x1c
21694 +#define AR_PHY_RX_IQCAL_CORR_B0    AR_CHAN_BASE + 0xdc
21695 +#define AR_PHY_TX_IQCAL_CONTROL_3  AR_CHAN_BASE + 0xb0
21696 +
21697 +#define AR_PHY_TIMING11_SPUR_FREQ_SD    0x3FF00000
21698 +#define AR_PHY_TIMING11_SPUR_FREQ_SD_S  20
21699 +
21700 +#define AR_PHY_TIMING11_SPUR_DELTA_PHASE 0x000FFFFF
21701 +#define AR_PHY_TIMING11_SPUR_DELTA_PHASE_S 0
21702 +
21703 +#define AR_PHY_TIMING11_USE_SPUR_FILTER_IN_AGC 0x40000000
21704 +#define AR_PHY_TIMING11_USE_SPUR_FILTER_IN_AGC_S 30
21705 +
21706 +#define AR_PHY_TIMING11_USE_SPUR_FILTER_IN_SELFCOR 0x80000000
21707 +#define AR_PHY_TIMING11_USE_SPUR_FILTER_IN_SELFCOR_S 31
21708 +
21709 +#define AR_PHY_SPUR_REG_ENABLE_NF_RSSI_SPUR_MIT         0x4000000
21710 +#define AR_PHY_SPUR_REG_ENABLE_NF_RSSI_SPUR_MIT_S       26
21711 +
21712 +#define AR_PHY_SPUR_REG_ENABLE_MASK_PPM                         0x20000     /* bins move with freq offset */
21713 +#define AR_PHY_SPUR_REG_ENABLE_MASK_PPM_S                       17
21714 +#define AR_PHY_SPUR_REG_SPUR_RSSI_THRESH            0x000000FF
21715 +#define AR_PHY_SPUR_REG_SPUR_RSSI_THRESH_S          0
21716 +#define AR_PHY_SPUR_REG_EN_VIT_SPUR_RSSI                        0x00000100
21717 +#define AR_PHY_SPUR_REG_EN_VIT_SPUR_RSSI_S                      8
21718 +#define AR_PHY_SPUR_REG_MASK_RATE_CNTL                          0x03FC0000
21719 +#define AR_PHY_SPUR_REG_MASK_RATE_CNTL_S                       18
21720 +
21721 +#define AR_PHY_RX_IQCAL_CORR_B0_LOOPBACK_IQCORR_EN   0x20000000
21722 +#define AR_PHY_RX_IQCAL_CORR_B0_LOOPBACK_IQCORR_EN_S         29
21723 +
21724 +#define AR_PHY_TX_IQCAL_CONTROL_3_IQCORR_EN   0x80000000
21725 +#define AR_PHY_TX_IQCAL_CONTROL_3_IQCORR_EN_S         31
21726 +
21727 +#define AR_PHY_FIND_SIG_LOW  AR_CHAN_BASE + 0x20
21728 +
21729 +#define AR_PHY_SFCORR           AR_CHAN_BASE + 0x24
21730 +#define AR_PHY_SFCORR_LOW       AR_CHAN_BASE + 0x28
21731 +#define AR_PHY_SFCORR_EXT       AR_CHAN_BASE + 0x2c
21732 +
21733 +#define AR_PHY_EXT_CCA              AR_CHAN_BASE + 0x30
21734 +#define AR_PHY_RADAR_0              AR_CHAN_BASE + 0x34
21735 +#define AR_PHY_RADAR_1              AR_CHAN_BASE + 0x38
21736 +#define AR_PHY_RADAR_EXT            AR_CHAN_BASE + 0x3c
21737 +#define AR_PHY_MULTICHAIN_CTRL      AR_CHAN_BASE + 0x80
21738 +#define AR_PHY_PERCHAIN_CSD         AR_CHAN_BASE + 0x84
21739 +
21740 +#define AR_PHY_TX_PHASE_RAMP_0      AR_CHAN_BASE + 0xd0
21741 +#define AR_PHY_ADC_GAIN_DC_CORR_0   AR_CHAN_BASE + 0xd4
21742 +#define AR_PHY_IQ_ADC_MEAS_0_B0     AR_CHAN_BASE + 0xc0
21743 +#define AR_PHY_IQ_ADC_MEAS_1_B0     AR_CHAN_BASE + 0xc4
21744 +#define AR_PHY_IQ_ADC_MEAS_2_B0     AR_CHAN_BASE + 0xc8
21745 +#define AR_PHY_IQ_ADC_MEAS_3_B0     AR_CHAN_BASE + 0xcc
21746 +
21747 +/* The following registers changed position from AR9300 1.0 to AR9300 2.0 */
21748 +#define AR_PHY_TX_PHASE_RAMP_0_9300_10      (AR_CHAN_BASE + 0xd0 - 0x10)
21749 +#define AR_PHY_ADC_GAIN_DC_CORR_0_9300_10   (AR_CHAN_BASE + 0xd4 - 0x10)
21750 +#define AR_PHY_IQ_ADC_MEAS_0_B0_9300_10     (AR_CHAN_BASE + 0xc0 + 0x8)
21751 +#define AR_PHY_IQ_ADC_MEAS_1_B0_9300_10     (AR_CHAN_BASE + 0xc4 + 0x8)
21752 +#define AR_PHY_IQ_ADC_MEAS_2_B0_9300_10     (AR_CHAN_BASE + 0xc8 + 0x8)
21753 +#define AR_PHY_IQ_ADC_MEAS_3_B0_9300_10     (AR_CHAN_BASE + 0xcc + 0x8)
21754 +
21755 +#define AR_PHY_TX_CRC               AR_CHAN_BASE + 0xa0
21756 +#define AR_PHY_TST_DAC_CONST        AR_CHAN_BASE + 0xa4
21757 +#define AR_PHY_SPUR_REPORT_0        AR_CHAN_BASE + 0xa8
21758 +#define AR_PHY_CHAN_INFO_TAB_0      AR_CHAN_BASE + 0x300
21759 +
21760 +/*
21761 + * Channel Field Definitions
21762 + */
21763 +#define AR_PHY_TIMING2_USE_FORCE_PPM    0x00001000
21764 +#define AR_PHY_TIMING2_FORCE_PPM_VAL    0x00000fff
21765 +#define AR_PHY_TIMING3_DSC_MAN      0xFFFE0000
21766 +#define AR_PHY_TIMING3_DSC_MAN_S    17
21767 +#define AR_PHY_TIMING3_DSC_EXP      0x0001E000
21768 +#define AR_PHY_TIMING3_DSC_EXP_S    13
21769 +#define AR_PHY_TIMING4_IQCAL_LOG_COUNT_MAX 0xF000
21770 +#define AR_PHY_TIMING4_IQCAL_LOG_COUNT_MAX_S   12
21771 +#define AR_PHY_TIMING4_DO_CAL    0x10000
21772 +
21773 +#define AR_PHY_TIMING4_ENABLE_PILOT_MASK        0x10000000
21774 +#define AR_PHY_TIMING4_ENABLE_PILOT_MASK_S      28
21775 +#define AR_PHY_TIMING4_ENABLE_CHAN_MASK         0x20000000
21776 +#define AR_PHY_TIMING4_ENABLE_CHAN_MASK_S       29
21777 +
21778 +#define AR_PHY_TIMING4_ENABLE_SPUR_FILTER 0x40000000
21779 +#define AR_PHY_TIMING4_ENABLE_SPUR_FILTER_S 30
21780 +#define AR_PHY_TIMING4_ENABLE_SPUR_RSSI 0x80000000
21781 +#define AR_PHY_TIMING4_ENABLE_SPUR_RSSI_S 31
21782 +
21783 +#define AR_PHY_NEW_ADC_GAIN_CORR_ENABLE 0x40000000
21784 +#define AR_PHY_NEW_ADC_DC_OFFSET_CORR_ENABLE 0x80000000
21785 +#define AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW  0x00000001
21786 +#define AR_PHY_SFCORR_LOW_M2COUNT_THR_LOW    0x00003F00
21787 +#define AR_PHY_SFCORR_LOW_M2COUNT_THR_LOW_S  8
21788 +#define AR_PHY_SFCORR_LOW_M1_THRESH_LOW      0x001FC000
21789 +#define AR_PHY_SFCORR_LOW_M1_THRESH_LOW_S    14
21790 +#define AR_PHY_SFCORR_LOW_M2_THRESH_LOW      0x0FE00000
21791 +#define AR_PHY_SFCORR_LOW_M2_THRESH_LOW_S    21
21792 +#define AR_PHY_SFCORR_M2COUNT_THR    0x0000001F
21793 +#define AR_PHY_SFCORR_M2COUNT_THR_S  0
21794 +#define AR_PHY_SFCORR_M1_THRESH      0x00FE0000
21795 +#define AR_PHY_SFCORR_M1_THRESH_S    17
21796 +#define AR_PHY_SFCORR_M2_THRESH      0x7F000000
21797 +#define AR_PHY_SFCORR_M2_THRESH_S    24
21798 +#define AR_PHY_SFCORR_EXT_M1_THRESH       0x0000007F
21799 +#define AR_PHY_SFCORR_EXT_M1_THRESH_S     0
21800 +#define AR_PHY_SFCORR_EXT_M2_THRESH       0x00003F80
21801 +#define AR_PHY_SFCORR_EXT_M2_THRESH_S     7
21802 +#define AR_PHY_SFCORR_EXT_M1_THRESH_LOW   0x001FC000
21803 +#define AR_PHY_SFCORR_EXT_M1_THRESH_LOW_S 14
21804 +#define AR_PHY_SFCORR_EXT_M2_THRESH_LOW   0x0FE00000
21805 +#define AR_PHY_SFCORR_EXT_M2_THRESH_LOW_S 21
21806 +#define AR_PHY_SFCORR_EXT_SPUR_SUBCHANNEL_SD 0x10000000
21807 +#define AR_PHY_SFCORR_EXT_SPUR_SUBCHANNEL_SD_S 28
21808 +#define AR_PHY_SFCORR_SPUR_SUBCHNL_SD_S   28
21809 +#define AR_PHY_EXT_CCA_THRESH62 0x007F0000
21810 +#define AR_PHY_EXT_CCA_THRESH62_S       16
21811 +#define AR_PHY_EXT_MINCCA_PWR   0x01FF0000
21812 +#define AR_PHY_EXT_MINCCA_PWR_S 16
21813 +#define AR_PHY_TIMING5_CYCPWR_THR1  0x000000FE
21814 +#define AR_PHY_TIMING5_CYCPWR_THR1_S    1
21815 +#define AR_PHY_TIMING5_CYCPWR_THR1_ENABLE  0x00000001
21816 +#define AR_PHY_TIMING5_CYCPWR_THR1_ENABLE_S    0
21817 +#define AR_PHY_TIMING5_CYCPWR_THR1A  0x007F0000
21818 +#define AR_PHY_TIMING5_CYCPWR_THR1A_S    16
21819 +#define AR_PHY_TIMING5_RSSI_THR1A     (0x7F << 16)
21820 +#define AR_PHY_TIMING5_RSSI_THR1A_S   16
21821 +#define AR_PHY_TIMING5_RSSI_THR1A_ENA (0x1 << 15)
21822 +#define AR_PHY_RADAR_0_ENA  0x00000001
21823 +#define AR_PHY_RADAR_0_FFT_ENA  0x80000000
21824 +#define AR_PHY_RADAR_0_INBAND   0x0000003e
21825 +#define AR_PHY_RADAR_0_INBAND_S 1
21826 +#define AR_PHY_RADAR_0_PRSSI    0x00000FC0
21827 +#define AR_PHY_RADAR_0_PRSSI_S  6
21828 +#define AR_PHY_RADAR_0_HEIGHT   0x0003F000
21829 +#define AR_PHY_RADAR_0_HEIGHT_S 12
21830 +#define AR_PHY_RADAR_0_RRSSI    0x00FC0000
21831 +#define AR_PHY_RADAR_0_RRSSI_S  18
21832 +#define AR_PHY_RADAR_0_FIRPWR   0x7F000000
21833 +#define AR_PHY_RADAR_0_FIRPWR_S 24
21834 +#define AR_PHY_RADAR_1_RELPWR_ENA       0x00800000
21835 +#define AR_PHY_RADAR_1_USE_FIR128       0x00400000
21836 +#define AR_PHY_RADAR_1_RELPWR_THRESH    0x003F0000
21837 +#define AR_PHY_RADAR_1_RELPWR_THRESH_S  16
21838 +#define AR_PHY_RADAR_1_BLOCK_CHECK      0x00008000
21839 +#define AR_PHY_RADAR_1_MAX_RRSSI        0x00004000
21840 +#define AR_PHY_RADAR_1_RELSTEP_CHECK    0x00002000
21841 +#define AR_PHY_RADAR_1_RELSTEP_THRESH   0x00001F00
21842 +#define AR_PHY_RADAR_1_RELSTEP_THRESH_S 8
21843 +#define AR_PHY_RADAR_1_MAXLEN           0x000000FF
21844 +#define AR_PHY_RADAR_1_MAXLEN_S         0
21845 +#define AR_PHY_RADAR_EXT_ENA            0x00004000
21846 +#define AR_PHY_RADAR_DC_PWR_THRESH      0x007f8000
21847 +#define AR_PHY_RADAR_DC_PWR_THRESH_S    15
21848 +#define AR_PHY_RADAR_LB_DC_CAP          0x7f800000
21849 +#define AR_PHY_RADAR_LB_DC_CAP_S        23
21850 +#define AR_PHY_FIND_SIG_LOW_FIRSTEP_LOW (0x3f << 6)
21851 +#define AR_PHY_FIND_SIG_LOW_FIRSTEP_LOW_S   6
21852 +#define AR_PHY_FIND_SIG_LOW_FIRPWR      (0x7f << 12)
21853 +#define AR_PHY_FIND_SIG_LOW_FIRPWR_S    12
21854 +#define AR_PHY_FIND_SIG_LOW_FIRPWR_SIGN_BIT 19
21855 +#define AR_PHY_FIND_SIG_LOW_RELSTEP     0x1f
21856 +#define AR_PHY_FIND_SIG_LOW_RELSTEP_S   0
21857 +#define AR_PHY_FIND_SIG_LOW_RELSTEP_SIGN_BIT 5
21858 +#define AR_PHY_CHAN_INFO_TAB_S2_READ    0x00000008
21859 +#define AR_PHY_CHAN_INFO_TAB_S2_READ_S           3
21860 +#define AR_PHY_RX_IQCAL_CORR_IQCORR_Q_Q_COFF 0x0000007F
21861 +#define AR_PHY_RX_IQCAL_CORR_IQCORR_Q_Q_COFF_S   0
21862 +#define AR_PHY_RX_IQCAL_CORR_IQCORR_Q_I_COFF 0x00003F80
21863 +#define AR_PHY_RX_IQCAL_CORR_IQCORR_Q_I_COFF_S   7
21864 +#define AR_PHY_RX_IQCAL_CORR_IQCORR_ENABLE   0x00004000
21865 +#define AR_PHY_RX_IQCAL_CORR_LOOPBACK_IQCORR_Q_Q_COFF   0x003f8000
21866 +#define AR_PHY_RX_IQCAL_CORR_LOOPBACK_IQCORR_Q_Q_COFF_S 15
21867 +#define AR_PHY_RX_IQCAL_CORR_LOOPBACK_IQCORR_Q_I_COFF   0x1fc00000
21868 +#define AR_PHY_RX_IQCAL_CORR_LOOPBACK_IQCORR_Q_I_COFF_S 22
21869 +
21870 +/*
21871 + * MRC Register Map
21872 + */
21873 +#define AR_MRC_BASE    0x9c00
21874 +
21875 +#define AR_PHY_TIMING_3A       AR_MRC_BASE + 0x0
21876 +#define AR_PHY_LDPC_CNTL1      AR_MRC_BASE + 0x4
21877 +#define AR_PHY_LDPC_CNTL2      AR_MRC_BASE + 0x8
21878 +#define AR_PHY_PILOT_SPUR_MASK AR_MRC_BASE + 0xc
21879 +#define AR_PHY_CHAN_SPUR_MASK  AR_MRC_BASE + 0x10
21880 +#define AR_PHY_SGI_DELTA       AR_MRC_BASE + 0x14
21881 +#define AR_PHY_ML_CNTL_1       AR_MRC_BASE + 0x18
21882 +#define AR_PHY_ML_CNTL_2       AR_MRC_BASE + 0x1c
21883 +#define AR_PHY_TST_ADC         AR_MRC_BASE + 0x20
21884 +
21885 +#define AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_IDX_A              0x00000FE0
21886 +#define AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_IDX_A_S    5
21887 +#define AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_A                  0x1F
21888 +#define AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_A_S                0
21889 +
21890 +#define AR_PHY_CHAN_SPUR_MASK_CF_CHAN_MASK_IDX_A        0x00000FE0
21891 +#define AR_PHY_CHAN_SPUR_MASK_CF_CHAN_MASK_IDX_A_S      5
21892 +#define AR_PHY_CHAN_SPUR_MASK_CF_CHAN_MASK_A            0x1F
21893 +#define AR_PHY_CHAN_SPUR_MASK_CF_CHAN_MASK_A_S         0
21894 +
21895 +/*
21896 + * MRC Feild Definitions
21897 + */
21898 +#define AR_PHY_SGI_DSC_MAN   0x0007FFF0
21899 +#define AR_PHY_SGI_DSC_MAN_S 4
21900 +#define AR_PHY_SGI_DSC_EXP   0x0000000F
21901 +#define AR_PHY_SGI_DSC_EXP_S 0
21902 +/*
21903 + * BBB Register Map
21904 + */
21905 +#define AR_BBB_BASE    0x9d00
21906 +
21907 +/*
21908 + * AGC Register Map
21909 + */
21910 +#define AR_AGC_BASE    0x9e00
21911 +
21912 +#define AR_PHY_SETTLING         AR_AGC_BASE + 0x0
21913 +#define AR_PHY_FORCEMAX_GAINS_0 AR_AGC_BASE + 0x4
21914 +#define AR_PHY_GAINS_MINOFF0    AR_AGC_BASE + 0x8
21915 +#define AR_PHY_DESIRED_SZ       AR_AGC_BASE + 0xc
21916 +#define AR_PHY_FIND_SIG         AR_AGC_BASE + 0x10
21917 +#define AR_PHY_AGC              AR_AGC_BASE + 0x14
21918 +#define AR_PHY_EXT_ATTEN_CTL_0  AR_AGC_BASE + 0x18
21919 +#define AR_PHY_CCA_0            AR_AGC_BASE + 0x1c
21920 +#define AR_PHY_EXT_CCA0         AR_AGC_BASE + 0x20
21921 +#define AR_PHY_RESTART          AR_AGC_BASE + 0x24
21922 +#define AR_PHY_MC_GAIN_CTRL     AR_AGC_BASE + 0x28
21923 +#define AR_PHY_EXTCHN_PWRTHR1   AR_AGC_BASE + 0x2c
21924 +#define AR_PHY_EXT_CHN_WIN      AR_AGC_BASE + 0x30
21925 +#define AR_PHY_20_40_DET_THR    AR_AGC_BASE + 0x34
21926 +#define AR_PHY_RIFS_SRCH        AR_AGC_BASE + 0x38
21927 +#define AR_PHY_PEAK_DET_CTRL_1  AR_AGC_BASE + 0x3c
21928 +#define AR_PHY_PEAK_DET_CTRL_2  AR_AGC_BASE + 0x40
21929 +#define AR_PHY_RX_GAIN_BOUNDS_1 AR_AGC_BASE + 0x44
21930 +#define AR_PHY_RX_GAIN_BOUNDS_2 AR_AGC_BASE + 0x48
21931 +#define AR_PHY_RSSI_0           AR_AGC_BASE + 0x180
21932 +#define AR_PHY_SPUR_CCK_REP0    AR_AGC_BASE + 0x184
21933 +#define AR_PHY_CCK_DETECT       AR_AGC_BASE + 0x1c0
21934 +#define AR_PHY_DAG_CTRLCCK      AR_AGC_BASE + 0x1c4
21935 +#define AR_PHY_IQCORR_CTRL_CCK  AR_AGC_BASE + 0x1c8
21936 +
21937 +#define AR_PHY_CCK_SPUR_MIT     AR_AGC_BASE + 0x1cc
21938 +#define AR_PHY_CCK_SPUR_MIT_SPUR_RSSI_THR                           0x000001fe
21939 +#define AR_PHY_CCK_SPUR_MIT_SPUR_RSSI_THR_S                                  1
21940 +#define AR_PHY_CCK_SPUR_MIT_SPUR_FILTER_TYPE                        0x60000000
21941 +#define AR_PHY_CCK_SPUR_MIT_SPUR_FILTER_TYPE_S                              29
21942 +#define AR_PHY_CCK_SPUR_MIT_USE_CCK_SPUR_MIT                        0x00000001
21943 +#define AR_PHY_CCK_SPUR_MIT_USE_CCK_SPUR_MIT_S                               0
21944 +#define AR_PHY_CCK_SPUR_MIT_CCK_SPUR_FREQ                           0x1ffffe00
21945 +#define AR_PHY_CCK_SPUR_MIT_CCK_SPUR_FREQ_S                                  9
21946 +
21947 +#define AR_PHY_RX_OCGAIN        AR_AGC_BASE + 0x200
21948 +
21949 +#define AR_PHY_CCA_NOM_VAL_9300_2GHZ          -110
21950 +#define AR_PHY_CCA_NOM_VAL_9300_5GHZ          -115
21951 +#define AR_PHY_CCA_MIN_GOOD_VAL_9300_2GHZ     -125
21952 +#define AR_PHY_CCA_MIN_GOOD_VAL_9300_5GHZ     -125
21953 +#define AR_PHY_CCA_MAX_GOOD_VAL_9300_2GHZ     -95
21954 +#define AR_PHY_CCA_MAX_GOOD_VAL_9300_5GHZ     -100
21955 +
21956 +/*
21957 + * AGC Field Definitions
21958 + */
21959 +#define AR_PHY_EXT_ATTEN_CTL_RXTX_MARGIN    0x00FC0000
21960 +#define AR_PHY_EXT_ATTEN_CTL_RXTX_MARGIN_S  18
21961 +#define AR_PHY_EXT_ATTEN_CTL_BSW_MARGIN     0x00003C00
21962 +#define AR_PHY_EXT_ATTEN_CTL_BSW_MARGIN_S   10
21963 +#define AR_PHY_EXT_ATTEN_CTL_BSW_ATTEN      0x0000001F
21964 +#define AR_PHY_EXT_ATTEN_CTL_BSW_ATTEN_S    0
21965 +#define AR_PHY_EXT_ATTEN_CTL_XATTEN2_MARGIN     0x003E0000
21966 +#define AR_PHY_EXT_ATTEN_CTL_XATTEN2_MARGIN_S   17
21967 +#define AR_PHY_EXT_ATTEN_CTL_XATTEN1_MARGIN     0x0001F000
21968 +#define AR_PHY_EXT_ATTEN_CTL_XATTEN1_MARGIN_S   12
21969 +#define AR_PHY_EXT_ATTEN_CTL_XATTEN2_DB         0x00000FC0
21970 +#define AR_PHY_EXT_ATTEN_CTL_XATTEN2_DB_S       6
21971 +#define AR_PHY_EXT_ATTEN_CTL_XATTEN1_DB         0x0000003F
21972 +#define AR_PHY_EXT_ATTEN_CTL_XATTEN1_DB_S       0
21973 +#define AR_PHY_RXGAIN_TXRX_ATTEN    0x0003F000
21974 +#define AR_PHY_RXGAIN_TXRX_ATTEN_S  12
21975 +#define AR_PHY_RXGAIN_TXRX_RF_MAX   0x007C0000
21976 +#define AR_PHY_RXGAIN_TXRX_RF_MAX_S 18
21977 +#define AR9280_PHY_RXGAIN_TXRX_ATTEN    0x00003F80
21978 +#define AR9280_PHY_RXGAIN_TXRX_ATTEN_S  7
21979 +#define AR9280_PHY_RXGAIN_TXRX_MARGIN   0x001FC000
21980 +#define AR9280_PHY_RXGAIN_TXRX_MARGIN_S 14
21981 +#define AR_PHY_SETTLING_SWITCH  0x00003F80
21982 +#define AR_PHY_SETTLING_SWITCH_S    7
21983 +#define AR_PHY_DESIRED_SZ_ADC       0x000000FF
21984 +#define AR_PHY_DESIRED_SZ_ADC_S     0
21985 +#define AR_PHY_DESIRED_SZ_PGA       0x0000FF00
21986 +#define AR_PHY_DESIRED_SZ_PGA_S     8
21987 +#define AR_PHY_DESIRED_SZ_TOT_DES   0x0FF00000
21988 +#define AR_PHY_DESIRED_SZ_TOT_DES_S 20
21989 +#define AR_PHY_MINCCA_PWR       0x1FF00000
21990 +#define AR_PHY_MINCCA_PWR_S     20
21991 +#define AR_PHY_CCA_THRESH62     0x0007F000
21992 +#define AR_PHY_CCA_THRESH62_S   12
21993 +#define AR9280_PHY_MINCCA_PWR       0x1FF00000
21994 +#define AR9280_PHY_MINCCA_PWR_S     20
21995 +#define AR9280_PHY_CCA_THRESH62     0x000FF000
21996 +#define AR9280_PHY_CCA_THRESH62_S   12
21997 +#define AR_PHY_EXT_CCA0_THRESH62    0x000000FF
21998 +#define AR_PHY_EXT_CCA0_THRESH62_S  0
21999 +#define AR_PHY_CCK_DETECT_WEAK_SIG_THR_CCK          0x0000003F
22000 +#define AR_PHY_CCK_DETECT_WEAK_SIG_THR_CCK_S        0
22001 +#define AR_PHY_CCK_DETECT_ANT_SWITCH_TIME           0x00001FC0
22002 +#define AR_PHY_CCK_DETECT_ANT_SWITCH_TIME_S         6
22003 +#define AR_PHY_CCK_DETECT_BB_ENABLE_ANT_FAST_DIV    0x2000
22004 +
22005 +#define AR_PHY_DAG_CTRLCCK_EN_RSSI_THR  0x00000200
22006 +#define AR_PHY_DAG_CTRLCCK_EN_RSSI_THR_S  9
22007 +#define AR_PHY_DAG_CTRLCCK_RSSI_THR 0x0001FC00
22008 +#define AR_PHY_DAG_CTRLCCK_RSSI_THR_S   10
22009 +
22010 +#define AR_PHY_RIFS_INIT_DELAY         0x3ff0000
22011 +#define AR_PHY_AGC_COARSE_LOW       0x00007F80
22012 +#define AR_PHY_AGC_COARSE_LOW_S     7
22013 +#define AR_PHY_AGC_COARSE_HIGH      0x003F8000
22014 +#define AR_PHY_AGC_COARSE_HIGH_S    15
22015 +#define AR_PHY_AGC_COARSE_PWR_CONST 0x0000007F
22016 +#define AR_PHY_AGC_COARSE_PWR_CONST_S   0
22017 +#define AR_PHY_FIND_SIG_FIRSTEP  0x0003F000
22018 +#define AR_PHY_FIND_SIG_FIRSTEP_S        12
22019 +#define AR_PHY_FIND_SIG_FIRPWR   0x03FC0000
22020 +#define AR_PHY_FIND_SIG_FIRPWR_S         18
22021 +#define AR_PHY_FIND_SIG_FIRPWR_SIGN_BIT  25
22022 +#define AR_PHY_FIND_SIG_RELPWR   (0x1f << 6)
22023 +#define AR_PHY_FIND_SIG_RELPWR_S          6
22024 +#define AR_PHY_FIND_SIG_RELPWR_SIGN_BIT  11
22025 +#define AR_PHY_FIND_SIG_RELSTEP        0x1f
22026 +#define AR_PHY_FIND_SIG_RELSTEP_S         0
22027 +#define AR_PHY_FIND_SIG_RELSTEP_SIGN_BIT  5
22028 +#define AR_PHY_RESTART_DIV_GC   0x001C0000
22029 +#define AR_PHY_RESTART_DIV_GC_S 18
22030 +#define AR_PHY_RESTART_ENA      0x01
22031 +#define AR_PHY_DC_RESTART_DIS   0x40000000
22032 +
22033 +#define AR_PHY_TPC_OLPC_GAIN_DELTA_PAL_ON       0xFF000000
22034 +#define AR_PHY_TPC_OLPC_GAIN_DELTA_PAL_ON_S     24
22035 +#define AR_PHY_TPC_OLPC_GAIN_DELTA              0x00FF0000
22036 +#define AR_PHY_TPC_OLPC_GAIN_DELTA_S            16
22037 +
22038 +#define AR_PHY_TPC_6_ERROR_EST_MODE             0x03000000
22039 +#define AR_PHY_TPC_6_ERROR_EST_MODE_S           24
22040 +
22041 +/*
22042 + * SM Register Map
22043 + */
22044 +#define AR_SM_BASE     0xa200
22045 +
22046 +#define AR_PHY_D2_CHIP_ID        AR_SM_BASE + 0x0
22047 +#define AR_PHY_GEN_CTRL          AR_SM_BASE + 0x4
22048 +#define AR_PHY_MODE              AR_SM_BASE + 0x8
22049 +#define AR_PHY_ACTIVE            AR_SM_BASE + 0xc
22050 +#define AR_PHY_SPUR_MASK_A       AR_SM_BASE + 0x20
22051 +#define AR_PHY_SPUR_MASK_B       AR_SM_BASE + 0x24
22052 +#define AR_PHY_SPECTRAL_SCAN     AR_SM_BASE + 0x28
22053 +#define AR_PHY_RADAR_BW_FILTER   AR_SM_BASE + 0x2c
22054 +#define AR_PHY_SEARCH_START_DELAY AR_SM_BASE + 0x30
22055 +#define AR_PHY_MAX_RX_LEN        AR_SM_BASE + 0x34
22056 +#define AR_PHY_FRAME_CTL         AR_SM_BASE + 0x38
22057 +#define AR_PHY_RFBUS_REQ         AR_SM_BASE + 0x3c
22058 +#define AR_PHY_RFBUS_GRANT       AR_SM_BASE + 0x40
22059 +#define AR_PHY_RIFS              AR_SM_BASE + 0x44
22060 +#define AR_PHY_RX_CLR_DELAY      AR_SM_BASE + 0x50
22061 +#define AR_PHY_RX_DELAY          AR_SM_BASE + 0x54
22062 +
22063 +#define AR_PHY_XPA_TIMING_CTL    AR_SM_BASE + 0x64
22064 +#define AR_PHY_MISC_PA_CTL       AR_SM_BASE + 0x80
22065 +#define AR_PHY_SWITCH_CHAIN_0    AR_SM_BASE + 0x84
22066 +#define AR_PHY_SWITCH_COM        AR_SM_BASE + 0x88
22067 +#define AR_PHY_SWITCH_COM_2      AR_SM_BASE + 0x8c
22068 +#define AR_PHY_RX_CHAINMASK      AR_SM_BASE + 0xa0
22069 +#define AR_PHY_CAL_CHAINMASK     AR_SM_BASE + 0xc0
22070 +#define AR_PHY_CALMODE           AR_SM_BASE + 0xc8
22071 +#define AR_PHY_FCAL_1            AR_SM_BASE + 0xcc
22072 +#define AR_PHY_FCAL_2_0          AR_SM_BASE + 0xd0
22073 +#define AR_PHY_DFT_TONE_CTL_0    AR_SM_BASE + 0xd4
22074 +#define AR_PHY_CL_CAL_CTL        AR_SM_BASE + 0xd8
22075 +#define AR_PHY_CL_TAB_0          AR_SM_BASE + 0x100
22076 +#define AR_PHY_SYNTH_CONTROL     AR_SM_BASE + 0x140
22077 +#define AR_PHY_ADDAC_CLK_SEL     AR_SM_BASE + 0x144
22078 +#define AR_PHY_PLL_CTL           AR_SM_BASE + 0x148
22079 +#define AR_PHY_ANALOG_SWAP       AR_SM_BASE + 0x14c
22080 +#define AR_PHY_ADDAC_PARA_CTL    AR_SM_BASE + 0x150
22081 +#define AR_PHY_XPA_CFG           AR_SM_BASE + 0x158
22082 +
22083 +#define AR_PHY_SPUR_MASK_A_CF_PUNC_MASK_IDX_A           0x0001FC00
22084 +#define AR_PHY_SPUR_MASK_A_CF_PUNC_MASK_IDX_A_S         10
22085 +#define AR_PHY_SPUR_MASK_A_CF_PUNC_MASK_A                       0x3FF
22086 +#define AR_PHY_SPUR_MASK_A_CF_PUNC_MASK_A_S                     0
22087 +
22088 +#define AR_PHY_TEST              AR_SM_BASE + 0x160
22089 +
22090 +#define AR_PHY_TEST_BBB_OBS_SEL       0x780000
22091 +#define AR_PHY_TEST_BBB_OBS_SEL_S     19
22092 +
22093 +#define AR_PHY_TEST_RX_OBS_SEL_BIT5_S 23
22094 +#define AR_PHY_TEST_RX_OBS_SEL_BIT5   (1 << AR_PHY_TEST_RX_OBS_SEL_BIT5_S)
22095 +
22096 +#define AR_PHY_TEST_CHAIN_SEL      0xC0000000
22097 +#define AR_PHY_TEST_CHAIN_SEL_S    30
22098 +
22099 +#define AR_PHY_TEST_CTL_STATUS   AR_SM_BASE + 0x164
22100 +#define AR_PHY_TEST_CTL_TSTDAC_EN         0x1
22101 +#define AR_PHY_TEST_CTL_TSTDAC_EN_S       0
22102 +#define AR_PHY_TEST_CTL_TX_OBS_SEL        0x1C
22103 +#define AR_PHY_TEST_CTL_TX_OBS_SEL_S      2
22104 +#define AR_PHY_TEST_CTL_TX_OBS_MUX_SEL    0x60
22105 +#define AR_PHY_TEST_CTL_TX_OBS_MUX_SEL_S  5
22106 +#define AR_PHY_TEST_CTL_TSTADC_EN         0x100
22107 +#define AR_PHY_TEST_CTL_TSTADC_EN_S       8
22108 +#define AR_PHY_TEST_CTL_RX_OBS_SEL        0x3C00
22109 +#define AR_PHY_TEST_CTL_RX_OBS_SEL_S      10
22110 +
22111 +
22112 +#define AR_PHY_TSTDAC            AR_SM_BASE + 0x168
22113 +
22114 +#define AR_PHY_CHAN_STATUS       AR_SM_BASE + 0x16c
22115 +#define AR_PHY_CHAN_INFO_MEMORY  AR_SM_BASE + 0x170
22116 +#define AR_PHY_CHNINFO_NOISEPWR  AR_SM_BASE + 0x174
22117 +#define AR_PHY_CHNINFO_GAINDIFF  AR_SM_BASE + 0x178
22118 +#define AR_PHY_CHNINFO_FINETIM   AR_SM_BASE + 0x17c
22119 +#define AR_PHY_CHAN_INFO_GAIN_0  AR_SM_BASE + 0x180
22120 +#define AR_PHY_SCRAMBLER_SEED    AR_SM_BASE + 0x190
22121 +#define AR_PHY_CCK_TX_CTRL       AR_SM_BASE + 0x194
22122 +
22123 +#define AR_PHY_HEAVYCLIP_CTL     AR_SM_BASE + 0x1a4
22124 +#define AR_PHY_HEAVYCLIP_20      AR_SM_BASE + 0x1a8
22125 +#define AR_PHY_HEAVYCLIP_40      AR_SM_BASE + 0x1ac
22126 +#define AR_PHY_ILLEGAL_TXRATE    AR_SM_BASE + 0x1b0
22127 +
22128 +#define AR_PHY_PWRTX_MAX         AR_SM_BASE + 0x1f0
22129 +#define AR_PHY_POWER_TX_SUB      AR_SM_BASE + 0x1f4
22130 +
22131 +#define AR_PHY_TPC_4_B0          AR_SM_BASE + 0x204
22132 +#define AR_PHY_TPC_5_B0          AR_SM_BASE + 0x208
22133 +#define AR_PHY_TPC_6_B0          AR_SM_BASE + 0x20c
22134 +#define AR_PHY_TPC_11_B0         AR_SM_BASE + 0x220
22135 +#define AR_PHY_TPC_18            AR_SM_BASE + 0x23c
22136 +#define AR_PHY_TPC_19            AR_SM_BASE + 0x240
22137 +
22138 +#define AR_PHY_TX_FORCED_GAIN    AR_SM_BASE + 0x258
22139 +
22140 +#define AR_PHY_PDADC_TAB_0       AR_SM_BASE + 0x280
22141 +
22142 +#define AR_PHY_TX_IQCAL_CONTROL_1   AR_SM_BASE + 0x448
22143 +#define AR_PHY_TX_IQCAL_START       AR_SM_BASE + 0x440
22144 +#define AR_PHY_TX_IQCAL_STATUS_B0   AR_SM_BASE + 0x48c
22145 +#define AR_PHY_TX_IQCAL_CORR_COEFF_01_B0    AR_SM_BASE + 0x450
22146 +
22147 +#define AR_PHY_PANIC_WD_STATUS      AR_SM_BASE + 0x5c0
22148 +#define AR_PHY_PANIC_WD_CTL_1       AR_SM_BASE + 0x5c4
22149 +#define AR_PHY_PANIC_WD_CTL_2       AR_SM_BASE + 0x5c8
22150 +#define AR_PHY_BT_CTL               AR_SM_BASE + 0x5cc
22151 +#define AR_PHY_ONLY_WARMRESET       AR_SM_BASE + 0x5d0
22152 +#define AR_PHY_ONLY_CTL             AR_SM_BASE + 0x5d4
22153 +#define AR_PHY_ECO_CTRL             AR_SM_BASE + 0x5dc
22154 +#define AR_PHY_BB_THERM_ADC_1       AR_SM_BASE + 0x248
22155 +
22156 +#define AR_PHY_65NM_CH0_SYNTH4      0x1608c
22157 +#define AR_PHY_SYNTH4_LONG_SHIFT_SELECT   0x00000002
22158 +#define AR_PHY_SYNTH4_LONG_SHIFT_SELECT_S 1
22159 +#define AR_PHY_65NM_CH0_SYNTH7      0x16098
22160 +#define AR_PHY_65NM_CH0_BIAS1       0x160c0
22161 +#define AR_PHY_65NM_CH0_BIAS2       0x160c4
22162 +#define AR_PHY_65NM_CH0_BIAS4       0x160cc
22163 +#define AR_PHY_65NM_CH0_RXTX4       0x1610c
22164 +#define AR_PHY_65NM_CH0_THERM       0x16290
22165 +
22166 +#define AR_PHY_65NM_CH0_THERM_LOCAL   0x80000000
22167 +#define AR_PHY_65NM_CH0_THERM_LOCAL_S 31
22168 +#define AR_PHY_65NM_CH0_THERM_START   0x20000000
22169 +#define AR_PHY_65NM_CH0_THERM_START_S 29
22170 +#define AR_PHY_65NM_CH0_THERM_SAR_ADC_OUT   0x0000ff00
22171 +#define AR_PHY_65NM_CH0_THERM_SAR_ADC_OUT_S 8
22172 +
22173 +#define AR_PHY_65NM_CH0_RXTX1       0x16100
22174 +#define AR_PHY_65NM_CH0_RXTX2       0x16104
22175 +#define AR_PHY_65NM_CH1_RXTX1       0x16500
22176 +#define AR_PHY_65NM_CH1_RXTX2       0x16504
22177 +#define AR_PHY_65NM_CH2_RXTX1       0x16900
22178 +#define AR_PHY_65NM_CH2_RXTX2       0x16904
22179 +
22180 +#define AR_PHY_RX1DB_BIQUAD_LONG_SHIFT         0x00380000
22181 +#define AR_PHY_RX1DB_BIQUAD_LONG_SHIFT_S       19
22182 +#define AR_PHY_RX6DB_BIQUAD_LONG_SHIFT         0x00c00000
22183 +#define AR_PHY_RX6DB_BIQUAD_LONG_SHIFT_S       22
22184 +#define AR_PHY_LNAGAIN_LONG_SHIFT              0xe0000000
22185 +#define AR_PHY_LNAGAIN_LONG_SHIFT_S            29
22186 +#define AR_PHY_MXRGAIN_LONG_SHIFT              0x03000000
22187 +#define AR_PHY_MXRGAIN_LONG_SHIFT_S            24
22188 +#define AR_PHY_VGAGAIN_LONG_SHIFT              0x1c000000
22189 +#define AR_PHY_VGAGAIN_LONG_SHIFT_S            26
22190 +#define AR_PHY_SCFIR_GAIN_LONG_SHIFT           0x00000001
22191 +#define AR_PHY_SCFIR_GAIN_LONG_SHIFT_S         0
22192 +#define AR_PHY_MANRXGAIN_LONG_SHIFT            0x00000002
22193 +#define AR_PHY_MANRXGAIN_LONG_SHIFT_S          1
22194 +
22195 +/*
22196 + * SM Field Definitions
22197 + */
22198 +#define AR_PHY_CL_CAL_ENABLE          0x00000002
22199 +#define AR_PHY_PARALLEL_CAL_ENABLE    0x00000001
22200 +#define AR_PHY_TPCRG1_PD_CAL_ENABLE   0x00400000
22201 +#define AR_PHY_TPCRG1_PD_CAL_ENABLE_S 22
22202 +
22203 +#define AR_PHY_ADDAC_PARACTL_OFF_PWDADC 0x00008000
22204 +
22205 +#define AR_PHY_FCAL20_CAP_STATUS_0    0x01f00000
22206 +#define AR_PHY_FCAL20_CAP_STATUS_0_S  20
22207 +
22208 +#define AR_PHY_RFBUS_REQ_EN     0x00000001  /* request for RF bus */
22209 +#define AR_PHY_RFBUS_GRANT_EN   0x00000001  /* RF bus granted */
22210 +#define AR_PHY_GC_TURBO_MODE       0x00000001  /* set turbo mode bits */
22211 +#define AR_PHY_GC_TURBO_SHORT      0x00000002  /* set short symbols to turbo mode setting */
22212 +#define AR_PHY_GC_DYN2040_EN       0x00000004  /* enable dyn 20/40 mode */
22213 +#define AR_PHY_GC_DYN2040_PRI_ONLY 0x00000008  /* dyn 20/40 - primary only */
22214 +#define AR_PHY_GC_DYN2040_PRI_CH   0x00000010  /* dyn 20/40 - primary ch offset (0=+10MHz, 1=-10MHz)*/
22215 +#define AR_PHY_GC_DYN2040_PRI_CH_S 4
22216 +#define AR_PHY_GC_DYN2040_EXT_CH   0x00000020  /* dyn 20/40 - ext ch spacing (0=20MHz/ 1=25MHz) */
22217 +#define AR_PHY_GC_HT_EN            0x00000040  /* ht enable */
22218 +#define AR_PHY_GC_SHORT_GI_40      0x00000080  /* allow short GI for HT 40 */
22219 +#define AR_PHY_GC_WALSH            0x00000100  /* walsh spatial spreading for 2 chains,2 streams TX */
22220 +#define AR_PHY_GC_SINGLE_HT_LTF1   0x00000200  /* single length (4us) 1st HT long training symbol */
22221 +#define AR_PHY_GC_GF_DETECT_EN     0x00000400  /* enable Green Field detection. Only affects rx, not tx */
22222 +#define AR_PHY_GC_ENABLE_DAC_FIFO  0x00000800  /* fifo between bb and dac */
22223 +#define AR_PHY_RX_DELAY_DELAY      0x00003FFF  /* delay from wakeup to rx ena */
22224 +
22225 +#define AR_PHY_CALMODE_IQ           0x00000000
22226 +#define AR_PHY_CALMODE_ADC_GAIN     0x00000001
22227 +#define AR_PHY_CALMODE_ADC_DC_PER   0x00000002
22228 +#define AR_PHY_CALMODE_ADC_DC_INIT  0x00000003
22229 +#define AR_PHY_SWAP_ALT_CHAIN       0x00000040
22230 +#define AR_PHY_MODE_OFDM            0x00000000
22231 +#define AR_PHY_MODE_CCK             0x00000001
22232 +#define AR_PHY_MODE_DYNAMIC         0x00000004
22233 +#define AR_PHY_MODE_DYNAMIC_S       2
22234 +#define AR_PHY_MODE_HALF            0x00000020
22235 +#define AR_PHY_MODE_QUARTER         0x00000040
22236 +#define AR_PHY_MAC_CLK_MODE         0x00000080
22237 +#define AR_PHY_MODE_DYN_CCK_DISABLE 0x00000100
22238 +#define AR_PHY_MODE_SVD_HALF        0x00000200
22239 +#define AR_PHY_ACTIVE_EN    0x00000001
22240 +#define AR_PHY_ACTIVE_DIS   0x00000000
22241 +#define AR_PHY_FORCE_XPA_CFG    0x000000001
22242 +#define AR_PHY_FORCE_XPA_CFG_S  0
22243 +#define AR_PHY_XPA_TIMING_CTL_TX_END_XPAB_OFF    0xFF000000
22244 +#define AR_PHY_XPA_TIMING_CTL_TX_END_XPAB_OFF_S  24
22245 +#define AR_PHY_XPA_TIMING_CTL_TX_END_XPAA_OFF    0x00FF0000
22246 +#define AR_PHY_XPA_TIMING_CTL_TX_END_XPAA_OFF_S  16
22247 +#define AR_PHY_XPA_TIMING_CTL_FRAME_XPAB_ON      0x0000FF00
22248 +#define AR_PHY_XPA_TIMING_CTL_FRAME_XPAB_ON_S    8
22249 +#define AR_PHY_XPA_TIMING_CTL_FRAME_XPAA_ON      0x000000FF
22250 +#define AR_PHY_XPA_TIMING_CTL_FRAME_XPAA_ON_S    0
22251 +#define AR_PHY_TX_END_TO_A2_RX_ON       0x00FF0000
22252 +#define AR_PHY_TX_END_TO_A2_RX_ON_S     16
22253 +#define AR_PHY_TX_END_DATA_START  0x000000FF
22254 +#define AR_PHY_TX_END_DATA_START_S  0
22255 +#define AR_PHY_TX_END_PA_ON       0x0000FF00
22256 +#define AR_PHY_TX_END_PA_ON_S       8
22257 +#define AR_PHY_TPCRG5_PD_GAIN_OVERLAP   0x0000000F
22258 +#define AR_PHY_TPCRG5_PD_GAIN_OVERLAP_S     0
22259 +#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_1    0x000003F0
22260 +#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_1_S  4
22261 +#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_2    0x0000FC00
22262 +#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_2_S  10
22263 +#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_3    0x003F0000
22264 +#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_3_S  16
22265 +#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_4    0x0FC00000
22266 +#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_4_S  22
22267 +#define AR_PHY_TPCRG1_NUM_PD_GAIN   0x0000c000
22268 +#define AR_PHY_TPCRG1_NUM_PD_GAIN_S 14
22269 +#define AR_PHY_TPCRG1_PD_GAIN_1    0x00030000
22270 +#define AR_PHY_TPCRG1_PD_GAIN_1_S  16
22271 +#define AR_PHY_TPCRG1_PD_GAIN_2    0x000C0000
22272 +#define AR_PHY_TPCRG1_PD_GAIN_2_S  18
22273 +#define AR_PHY_TPCRG1_PD_GAIN_3    0x00300000
22274 +#define AR_PHY_TPCRG1_PD_GAIN_3_S  20
22275 +#define AR_PHY_TPCGR1_FORCED_DAC_GAIN   0x0000003e
22276 +#define AR_PHY_TPCGR1_FORCED_DAC_GAIN_S 1
22277 +#define AR_PHY_TPCGR1_FORCE_DAC_GAIN    0x00000001
22278 +#define AR_PHY_TXGAIN_FORCE               0x00000001
22279 +#define AR_PHY_TXGAIN_FORCED_PADVGNRA     0x00003c00
22280 +#define AR_PHY_TXGAIN_FORCED_PADVGNRA_S   10
22281 +#define AR_PHY_TXGAIN_FORCED_PADVGNRB     0x0003c000
22282 +#define AR_PHY_TXGAIN_FORCED_PADVGNRB_S   14
22283 +#define AR_PHY_TXGAIN_FORCED_PADVGNRD     0x00c00000
22284 +#define AR_PHY_TXGAIN_FORCED_PADVGNRD_S   22
22285 +#define AR_PHY_TXGAIN_FORCED_TXMXRGAIN    0x000003c0
22286 +#define AR_PHY_TXGAIN_FORCED_TXMXRGAIN_S  6
22287 +#define AR_PHY_TXGAIN_FORCED_TXBB1DBGAIN  0x0000000e
22288 +#define AR_PHY_TXGAIN_FORCED_TXBB1DBGAIN_S 1
22289 +
22290 +#define AR_PHY_POWER_TX_RATE1   0x9934
22291 +#define AR_PHY_POWER_TX_RATE2   0x9938
22292 +#define AR_PHY_POWER_TX_RATE_MAX    0x993c
22293 +#define AR_PHY_POWER_TX_RATE_MAX_TPC_ENABLE 0x00000040
22294 +#define PHY_AGC_CLR             0x10000000
22295 +#define RFSILENT_BB             0x00002000
22296 +#define AR_PHY_CHAN_INFO_GAIN_DIFF_PPM_MASK          0xFFF
22297 +#define AR_PHY_CHAN_INFO_GAIN_DIFF_PPM_SIGNED_BIT    0x800
22298 +#define AR_PHY_CHAN_INFO_GAIN_DIFF_UPPER_LIMIT         320
22299 +#define AR_PHY_CHAN_INFO_MEMORY_CAPTURE_MASK         0x0001
22300 +#define AR_PHY_RX_DELAY_DELAY   0x00003FFF
22301 +#define AR_PHY_CCK_TX_CTRL_JAPAN    0x00000010
22302 +#define AR_PHY_SPECTRAL_SCAN_ENABLE         0x00000001
22303 +#define AR_PHY_SPECTRAL_SCAN_ENABLE_S       0
22304 +#define AR_PHY_SPECTRAL_SCAN_ACTIVE         0x00000002
22305 +#define AR_PHY_SPECTRAL_SCAN_ACTIVE_S       1
22306 +#define AR_PHY_SPECTRAL_SCAN_FFT_PERIOD     0x000000F0
22307 +#define AR_PHY_SPECTRAL_SCAN_FFT_PERIOD_S   4
22308 +#define AR_PHY_SPECTRAL_SCAN_PERIOD         0x0000FF00
22309 +#define AR_PHY_SPECTRAL_SCAN_PERIOD_S       8
22310 +#define AR_PHY_SPECTRAL_SCAN_COUNT          0x00FF0000
22311 +#define AR_PHY_SPECTRAL_SCAN_COUNT_S        16
22312 +#define AR_PHY_SPECTRAL_SCAN_SHORT_REPEAT   0x01000000
22313 +#define AR_PHY_SPECTRAL_SCAN_SHORT_REPEAT_S 24
22314 +#define AR_PHY_CHANNEL_STATUS_RX_CLEAR      0x00000004
22315 +#define AR_PHY_TX_IQCAQL_CONTROL_1_IQCORR_I_Q_COFF_DELPT             0x01fc0000
22316 +#define AR_PHY_TX_IQCAQL_CONTROL_1_IQCORR_I_Q_COFF_DELPT_S                   18
22317 +#define AR_PHY_TX_IQCAL_START_DO_CAL        0x00000001
22318 +#define AR_PHY_TX_IQCAL_START_DO_CAL_S      0
22319 +
22320 +#define AR_PHY_TX_IQCAL_STATUS_FAILED    0x00000001
22321 +#define AR_PHY_TX_IQCAL_CORR_COEFF_01_COEFF_TABLE      0x00003fff
22322 +#define AR_PHY_TX_IQCAL_CORR_COEFF_01_COEFF_TABLE_S    0
22323 +
22324 +#define AR_PHY_TPC_18_THERM_CAL_VALUE           0xff
22325 +#define AR_PHY_TPC_18_THERM_CAL_VALUE_S         0
22326 +#define AR_PHY_TPC_19_ALPHA_THERM               0xff
22327 +#define AR_PHY_TPC_19_ALPHA_THERM_S             0
22328 +
22329 +#define AR_PHY_65NM_CH0_RXTX4_THERM_ON          0x10000000
22330 +#define AR_PHY_65NM_CH0_RXTX4_THERM_ON_S        28
22331 +
22332 +#define AR_PHY_BB_THERM_ADC_1_INIT_THERM        0x000000ff
22333 +#define AR_PHY_BB_THERM_ADC_1_INIT_THERM_S      0
22334 +
22335 +/*
22336 + * Channel 1 Register Map
22337 + */
22338 +#define AR_CHAN1_BASE  0xa800
22339 +
22340 +#define AR_PHY_EXT_CCA_1            AR_CHAN1_BASE + 0x30
22341 +#define AR_PHY_TX_PHASE_RAMP_1      AR_CHAN1_BASE + 0xd0
22342 +#define AR_PHY_ADC_GAIN_DC_CORR_1   AR_CHAN1_BASE + 0xd4
22343 +
22344 +#define AR_PHY_SPUR_REPORT_1        AR_CHAN1_BASE + 0xa8
22345 +#define AR_PHY_CHAN_INFO_TAB_1      AR_CHAN1_BASE + 0x300
22346 +#define AR_PHY_RX_IQCAL_CORR_B1     AR_CHAN1_BASE + 0xdc
22347 +
22348 +/*
22349 + * Channel 1 Field Definitions
22350 + */
22351 +#define AR_PHY_CH1_EXT_MINCCA_PWR   0x01FF0000
22352 +#define AR_PHY_CH1_EXT_MINCCA_PWR_S 16
22353 +
22354 +/*
22355 + * AGC 1 Register Map
22356 + */
22357 +#define AR_AGC1_BASE   0xae00
22358 +
22359 +#define AR_PHY_FORCEMAX_GAINS_1      AR_AGC1_BASE + 0x4
22360 +#define AR_PHY_EXT_ATTEN_CTL_1       AR_AGC1_BASE + 0x18
22361 +#define AR_PHY_CCA_1                 AR_AGC1_BASE + 0x1c
22362 +#define AR_PHY_CCA_CTRL_1            AR_AGC1_BASE + 0x20
22363 +#define AR_PHY_RSSI_1                AR_AGC1_BASE + 0x180
22364 +#define AR_PHY_SPUR_CCK_REP_1        AR_AGC1_BASE + 0x184
22365 +#define AR_PHY_RX_OCGAIN_2           AR_AGC1_BASE + 0x200
22366 +
22367 +/*
22368 + * AGC 1 Field Definitions
22369 + */
22370 +#define AR_PHY_CH1_MINCCA_PWR   0x1FF00000
22371 +#define AR_PHY_CH1_MINCCA_PWR_S 20
22372 +
22373 +/*
22374 + * SM 1 Register Map
22375 + */
22376 +#define AR_SM1_BASE    0xb200
22377 +
22378 +#define AR_PHY_SWITCH_CHAIN_1    AR_SM1_BASE + 0x84
22379 +#define AR_PHY_FCAL_2_1          AR_SM1_BASE + 0xd0
22380 +#define AR_PHY_DFT_TONE_CTL_1    AR_SM1_BASE + 0xd4
22381 +#define AR_PHY_CL_TAB_1          AR_SM1_BASE + 0x100
22382 +#define AR_PHY_CHAN_INFO_GAIN_1  AR_SM1_BASE + 0x180
22383 +#define AR_PHY_TPC_4_B1          AR_SM1_BASE + 0x204
22384 +#define AR_PHY_TPC_5_B1          AR_SM1_BASE + 0x208
22385 +#define AR_PHY_TPC_6_B1          AR_SM1_BASE + 0x20c
22386 +#define AR_PHY_TPC_11_B1         AR_SM1_BASE + 0x220
22387 +#define AR_PHY_PDADC_TAB_1       AR_SM1_BASE + 0x240
22388 +#define AR_PHY_TX_IQCAL_STATUS_B1   AR_SM1_BASE + 0x48c
22389 +#define AR_PHY_TX_IQCAL_CORR_COEFF_01_B1    AR_SM1_BASE + 0x450
22390 +
22391 +/*
22392 + * Channel 2 Register Map
22393 + */
22394 +#define AR_CHAN2_BASE  0xb800
22395 +
22396 +#define AR_PHY_EXT_CCA_2            AR_CHAN2_BASE + 0x30
22397 +#define AR_PHY_TX_PHASE_RAMP_2      AR_CHAN2_BASE + 0xd0
22398 +#define AR_PHY_ADC_GAIN_DC_CORR_2   AR_CHAN2_BASE + 0xd4
22399 +
22400 +#define AR_PHY_SPUR_REPORT_2        AR_CHAN2_BASE + 0xa8
22401 +#define AR_PHY_CHAN_INFO_TAB_2      AR_CHAN2_BASE + 0x300
22402 +#define AR_PHY_RX_IQCAL_CORR_B2     AR_CHAN2_BASE + 0xdc
22403 +
22404 +/*
22405 + * Channel 2 Field Definitions
22406 + */
22407 +#define AR_PHY_CH2_EXT_MINCCA_PWR   0x01FF0000
22408 +#define AR_PHY_CH2_EXT_MINCCA_PWR_S 16
22409 +/*
22410 + * AGC 2 Register Map
22411 + */
22412 +#define AR_AGC2_BASE   0xbe00
22413 +
22414 +#define AR_PHY_FORCEMAX_GAINS_2      AR_AGC2_BASE + 0x4
22415 +#define AR_PHY_EXT_ATTEN_CTL_2       AR_AGC2_BASE + 0x18
22416 +#define AR_PHY_CCA_2                 AR_AGC2_BASE + 0x1c
22417 +#define AR_PHY_CCA_CTRL_2            AR_AGC2_BASE + 0x20
22418 +#define AR_PHY_RSSI_2                AR_AGC2_BASE + 0x180
22419 +
22420 +/*
22421 + * AGC 2 Field Definitions
22422 + */
22423 +#define AR_PHY_CH2_MINCCA_PWR   0x1FF00000
22424 +#define AR_PHY_CH2_MINCCA_PWR_S 20
22425 +
22426 +/*
22427 + * SM 2 Register Map
22428 + */
22429 +#define AR_SM2_BASE    0xc200
22430 +
22431 +#define AR_PHY_SWITCH_CHAIN_2    AR_SM2_BASE + 0x84
22432 +#define AR_PHY_FCAL_2_2          AR_SM2_BASE + 0xd0
22433 +#define AR_PHY_DFT_TONE_CTL_2    AR_SM2_BASE + 0xd4
22434 +#define AR_PHY_CL_TAB_2          AR_SM2_BASE + 0x100
22435 +#define AR_PHY_CHAN_INFO_GAIN_2  AR_SM2_BASE + 0x180
22436 +#define AR_PHY_TPC_4_B2          AR_SM2_BASE + 0x204
22437 +#define AR_PHY_TPC_5_B2          AR_SM2_BASE + 0x208
22438 +#define AR_PHY_TPC_6_B2          AR_SM2_BASE + 0x20c
22439 +#define AR_PHY_TPC_11_B2         AR_SM2_BASE + 0x220
22440 +#define AR_PHY_PDADC_TAB_2       AR_SM2_BASE + 0x240
22441 +#define AR_PHY_TX_IQCAL_STATUS_B2   AR_SM2_BASE + 0x48c
22442 +#define AR_PHY_TX_IQCAL_CORR_COEFF_01_B2    AR_SM2_BASE + 0x450
22443 +
22444 +#define AR_PHY_TX_IQCAL_STATUS_B2_FAILED    0x00000001
22445 +
22446 +/*
22447 + * AGC 3 Register Map
22448 + */
22449 +#define AR_AGC3_BASE   0xce00
22450 +
22451 +#define AR_PHY_RSSI_3            AR_AGC3_BASE + 0x180
22452 +
22453 +/*
22454 + * Misc helper defines
22455 + */
22456 +#define AR_PHY_CHAIN_OFFSET     (AR_CHAN1_BASE - AR_CHAN_BASE)
22457 +
22458 +#define AR_PHY_NEW_ADC_DC_GAIN_CORR(_i) (AR_PHY_ADC_GAIN_DC_CORR_0 + (AR_PHY_CHAIN_OFFSET * (_i)))
22459 +#define AR_PHY_NEW_ADC_DC_GAIN_CORR_9300_10(_i) (AR_PHY_ADC_GAIN_DC_CORR_0_9300_10 + (AR_PHY_CHAIN_OFFSET * (_i)))
22460 +#define AR_PHY_SWITCH_CHAIN(_i)     (AR_PHY_SWITCH_CHAIN_0 + (AR_PHY_CHAIN_OFFSET * (_i)))
22461 +#define AR_PHY_EXT_ATTEN_CTL(_i)    (AR_PHY_EXT_ATTEN_CTL_0 + (AR_PHY_CHAIN_OFFSET * (_i)))
22462 +
22463 +#define AR_PHY_RXGAIN(_i)           (AR_PHY_FORCEMAX_GAINS_0 + (AR_PHY_CHAIN_OFFSET * (_i)))
22464 +#define AR_PHY_TPCRG5(_i)           (AR_PHY_TPC_5_B0 + (AR_PHY_CHAIN_OFFSET * (_i)))
22465 +#define AR_PHY_PDADC_TAB(_i)        (AR_PHY_PDADC_TAB_0 + (AR_PHY_CHAIN_OFFSET * (_i)))
22466 +
22467 +#define AR_PHY_CAL_MEAS_0(_i)       (AR_PHY_IQ_ADC_MEAS_0_B0 + (AR_PHY_CHAIN_OFFSET * (_i)))
22468 +#define AR_PHY_CAL_MEAS_1(_i)       (AR_PHY_IQ_ADC_MEAS_1_B0 + (AR_PHY_CHAIN_OFFSET * (_i)))
22469 +#define AR_PHY_CAL_MEAS_2(_i)       (AR_PHY_IQ_ADC_MEAS_2_B0 + (AR_PHY_CHAIN_OFFSET * (_i)))
22470 +#define AR_PHY_CAL_MEAS_3(_i)       (AR_PHY_IQ_ADC_MEAS_3_B0 + (AR_PHY_CHAIN_OFFSET * (_i)))
22471 +#define AR_PHY_CAL_MEAS_0_9300_10(_i) (AR_PHY_IQ_ADC_MEAS_0_B0_9300_10 + (AR_PHY_CHAIN_OFFSET * (_i)))
22472 +#define AR_PHY_CAL_MEAS_1_9300_10(_i) (AR_PHY_IQ_ADC_MEAS_1_B0_9300_10 + (AR_PHY_CHAIN_OFFSET * (_i)))
22473 +#define AR_PHY_CAL_MEAS_2_9300_10(_i) (AR_PHY_IQ_ADC_MEAS_2_B0_9300_10 + (AR_PHY_CHAIN_OFFSET * (_i)))
22474 +#define AR_PHY_CAL_MEAS_3_9300_10(_i) (AR_PHY_IQ_ADC_MEAS_3_B0_9300_10 + (AR_PHY_CHAIN_OFFSET * (_i)))
22475 +
22476 +#define AR_PHY_BB_PANIC_NON_IDLE_ENABLE 0x00000001
22477 +#define AR_PHY_BB_PANIC_IDLE_ENABLE     0x00000002
22478 +#define AR_PHY_BB_PANIC_IDLE_MASK       0xFFFF0000
22479 +#define AR_PHY_BB_PANIC_NON_IDLE_MASK   0x0000FFFC
22480 +
22481 +#define AR_PHY_BB_PANIC_RST_ENABLE      0x00000002
22482 +#define AR_PHY_BB_PANIC_IRQ_ENABLE      0x00000004
22483 +#define AR_PHY_BB_PANIC_CNTL2_MASK      0xFFFFFFF9
22484 +
22485 +#define AR_PHY_BB_WD_STATUS             0x00000007
22486 +#define AR_PHY_BB_WD_STATUS_S           0
22487 +#define AR_PHY_BB_WD_DET_HANG           0x00000008
22488 +#define AR_PHY_BB_WD_DET_HANG_S         3
22489 +#define AR_PHY_BB_WD_RADAR_SM           0x000000F0
22490 +#define AR_PHY_BB_WD_RADAR_SM_S         4
22491 +#define AR_PHY_BB_WD_RX_OFDM_SM         0x00000F00
22492 +#define AR_PHY_BB_WD_RX_OFDM_SM_S       8
22493 +#define AR_PHY_BB_WD_RX_CCK_SM          0x0000F000
22494 +#define AR_PHY_BB_WD_RX_CCK_SM_S        12
22495 +#define AR_PHY_BB_WD_TX_OFDM_SM         0x000F0000
22496 +#define AR_PHY_BB_WD_TX_OFDM_SM_S       16
22497 +#define AR_PHY_BB_WD_TX_CCK_SM          0x00F00000
22498 +#define AR_PHY_BB_WD_TX_CCK_SM_S        20
22499 +#define AR_PHY_BB_WD_AGC_SM             0x0F000000
22500 +#define AR_PHY_BB_WD_AGC_SM_S           24
22501 +#define AR_PHY_BB_WD_SRCH_SM            0xF0000000
22502 +#define AR_PHY_BB_WD_SRCH_SM_S          28
22503 +
22504 +#define AR_PHY_BB_WD_STATUS_CLR         0x00000008
22505 +
22506 +void ar9003_hw_modify_chain_masks(struct ath_hw *ah,
22507 +                                 u8 rx_chainmask,
22508 +                                 u8 tx_chainmask);
22509 +
22510 +#endif  /* AR9003_PHY_H */
22511 diff --git a/drivers/net/wireless/ath/ath9k/ath9k.h b/drivers/net/wireless/ath/ath9k/ath9k.h
22512 index bdcd257..fbb7dec 100644
22513 --- a/drivers/net/wireless/ath/ath9k/ath9k.h
22514 +++ b/drivers/net/wireless/ath/ath9k/ath9k.h
22515 @@ -114,8 +114,10 @@ enum buffer_type {
22516  #define bf_isretried(bf)       (bf->bf_state.bf_type & BUF_RETRY)
22517  #define bf_isxretried(bf)      (bf->bf_state.bf_type & BUF_XRETRY)
22518  
22519 +#define ATH_TXSTATUS_RING_SIZE 64
22520 +
22521  struct ath_descdma {
22522 -       struct ath_desc *dd_desc;
22523 +       void *dd_desc;
22524         dma_addr_t dd_desc_paddr;
22525         u32 dd_desc_len;
22526         struct ath_buf *dd_bufptr;
22527 @@ -123,7 +125,7 @@ struct ath_descdma {
22528  
22529  int ath_descdma_setup(struct ath_softc *sc, struct ath_descdma *dd,
22530                       struct list_head *head, const char *name,
22531 -                     int nbuf, int ndesc);
22532 +                     int nbuf, int ndesc, bool is_tx);
22533  void ath_descdma_cleanup(struct ath_softc *sc, struct ath_descdma *dd,
22534                          struct list_head *head);
22535  
22536 @@ -188,6 +190,7 @@ enum ATH_AGGR_STATUS {
22537         ATH_AGGR_LIMITED,
22538  };
22539  
22540 +#define ATH_TXFIFO_DEPTH 8
22541  struct ath_txq {
22542         u32 axq_qnum;
22543         u32 *axq_link;
22544 @@ -197,6 +200,10 @@ struct ath_txq {
22545         bool stopped;
22546         bool axq_tx_inprogress;
22547         struct list_head axq_acq;
22548 +       struct list_head txq_fifo[ATH_TXFIFO_DEPTH];
22549 +       struct list_head txq_fifo_pending;
22550 +       u8 txq_headidx;
22551 +       u8 txq_tailidx;
22552  };
22553  
22554  #define AGGR_CLEANUP         BIT(1)
22555 @@ -223,6 +230,12 @@ struct ath_tx {
22556         struct ath_descdma txdma;
22557  };
22558  
22559 +struct ath_rx_edma {
22560 +       struct sk_buff_head rx_fifo;
22561 +       struct sk_buff_head rx_buffers;
22562 +       u32 rx_fifo_hwsize;
22563 +};
22564 +
22565  struct ath_rx {
22566         u8 defant;
22567         u8 rxotherant;
22568 @@ -232,6 +245,8 @@ struct ath_rx {
22569         spinlock_t rxbuflock;
22570         struct list_head rxbuf;
22571         struct ath_descdma rxdma;
22572 +       struct ath_buf *rx_bufptr;
22573 +       struct ath_rx_edma rx_edma[ATH9K_RX_QUEUE_MAX];
22574  };
22575  
22576  int ath_startrecv(struct ath_softc *sc);
22577 @@ -240,7 +255,7 @@ void ath_flushrecv(struct ath_softc *sc);
22578  u32 ath_calcrxfilter(struct ath_softc *sc);
22579  int ath_rx_init(struct ath_softc *sc, int nbufs);
22580  void ath_rx_cleanup(struct ath_softc *sc);
22581 -int ath_rx_tasklet(struct ath_softc *sc, int flush);
22582 +int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp);
22583  struct ath_txq *ath_txq_setup(struct ath_softc *sc, int qtype, int subtype);
22584  void ath_tx_cleanupq(struct ath_softc *sc, struct ath_txq *txq);
22585  int ath_tx_setup(struct ath_softc *sc, int haltype);
22586 @@ -258,6 +273,7 @@ int ath_txq_update(struct ath_softc *sc, int qnum,
22587  int ath_tx_start(struct ieee80211_hw *hw, struct sk_buff *skb,
22588                  struct ath_tx_control *txctl);
22589  void ath_tx_tasklet(struct ath_softc *sc);
22590 +void ath_tx_edma_tasklet(struct ath_softc *sc);
22591  void ath_tx_cabq(struct ieee80211_hw *hw, struct sk_buff *skb);
22592  bool ath_tx_aggr_check(struct ath_softc *sc, struct ath_node *an, u8 tidno);
22593  void ath_tx_aggr_start(struct ath_softc *sc, struct ieee80211_sta *sta,
22594 @@ -507,6 +523,8 @@ struct ath_softc {
22595         struct ath_beacon_config cur_beacon_conf;
22596         struct delayed_work tx_complete_work;
22597         struct ath_btcoex btcoex;
22598 +
22599 +       struct ath_descdma txsdma;
22600  };
22601  
22602  struct ath_wiphy {
22603 diff --git a/drivers/net/wireless/ath/ath9k/beacon.c b/drivers/net/wireless/ath/ath9k/beacon.c
22604 index 22375a7..c8a4558 100644
22605 --- a/drivers/net/wireless/ath/ath9k/beacon.c
22606 +++ b/drivers/net/wireless/ath/ath9k/beacon.c
22607 @@ -93,8 +93,6 @@ static void ath_beacon_setup(struct ath_softc *sc, struct ath_vif *avp,
22608                 antenna = ((sc->beacon.ast_be_xmit / sc->nbcnvifs) & 1 ? 2 : 1);
22609         }
22610  
22611 -       ds->ds_data = bf->bf_buf_addr;
22612 -
22613         sband = &sc->sbands[common->hw->conf.channel->band];
22614         rate = sband->bitrates[rateidx].hw_value;
22615         if (sc->sc_flags & SC_OP_PREAMBLE_SHORT)
22616 @@ -109,7 +107,8 @@ static void ath_beacon_setup(struct ath_softc *sc, struct ath_vif *avp,
22617  
22618         /* NB: beacon's BufLen must be a multiple of 4 bytes */
22619         ath9k_hw_filltxdesc(ah, ds, roundup(skb->len, 4),
22620 -                           true, true, ds);
22621 +                           true, true, ds, bf->bf_buf_addr,
22622 +                           sc->beacon.beaconq);
22623  
22624         memset(series, 0, sizeof(struct ath9k_11n_rate_series) * 4);
22625         series[0].Tries = 1;
22626 diff --git a/drivers/net/wireless/ath/ath9k/calib.c b/drivers/net/wireless/ath/ath9k/calib.c
22627 index 064f5b5..6982577 100644
22628 --- a/drivers/net/wireless/ath/ath9k/calib.c
22629 +++ b/drivers/net/wireless/ath/ath9k/calib.c
22630 @@ -15,10 +15,12 @@
22631   */
22632  
22633  #include "hw.h"
22634 +#include "hw-ops.h"
22635 +
22636 +/* Common calibration code */
22637  
22638  /* We can tune this as we go by monitoring really low values */
22639  #define ATH9K_NF_TOO_LOW       -60
22640 -#define AR9285_CLCAL_REDO_THRESH    1
22641  
22642  /* AR5416 may return very high value (like -31 dBm), in those cases the nf
22643   * is incorrect and we should use the static NF value. Later we can try to
22644 @@ -87,98 +89,9 @@ static void ath9k_hw_update_nfcal_hist_buffer(struct ath9k_nfcal_hist *h,
22645         return;
22646  }
22647  
22648 -static void ath9k_hw_do_getnf(struct ath_hw *ah,
22649 -                             int16_t nfarray[NUM_NF_READINGS])
22650 -{
22651 -       struct ath_common *common = ath9k_hw_common(ah);
22652 -       int16_t nf;
22653 -
22654 -       if (AR_SREV_9280_10_OR_LATER(ah))
22655 -               nf = MS(REG_READ(ah, AR_PHY_CCA), AR9280_PHY_MINCCA_PWR);
22656 -       else
22657 -               nf = MS(REG_READ(ah, AR_PHY_CCA), AR_PHY_MINCCA_PWR);
22658 -
22659 -       if (nf & 0x100)
22660 -               nf = 0 - ((nf ^ 0x1ff) + 1);
22661 -       ath_print(common, ATH_DBG_CALIBRATE,
22662 -                 "NF calibrated [ctl] [chain 0] is %d\n", nf);
22663 -
22664 -       if (AR_SREV_9271(ah) && (nf >= -114))
22665 -               nf = -116;
22666 -
22667 -       nfarray[0] = nf;
22668 -
22669 -       if (!AR_SREV_9285(ah) && !AR_SREV_9271(ah)) {
22670 -               if (AR_SREV_9280_10_OR_LATER(ah))
22671 -                       nf = MS(REG_READ(ah, AR_PHY_CH1_CCA),
22672 -                                       AR9280_PHY_CH1_MINCCA_PWR);
22673 -               else
22674 -                       nf = MS(REG_READ(ah, AR_PHY_CH1_CCA),
22675 -                                       AR_PHY_CH1_MINCCA_PWR);
22676 -
22677 -               if (nf & 0x100)
22678 -                       nf = 0 - ((nf ^ 0x1ff) + 1);
22679 -               ath_print(common, ATH_DBG_CALIBRATE,
22680 -                         "NF calibrated [ctl] [chain 1] is %d\n", nf);
22681 -               nfarray[1] = nf;
22682 -
22683 -               if (!AR_SREV_9280(ah) && !AR_SREV_9287(ah)) {
22684 -                       nf = MS(REG_READ(ah, AR_PHY_CH2_CCA),
22685 -                                       AR_PHY_CH2_MINCCA_PWR);
22686 -                       if (nf & 0x100)
22687 -                               nf = 0 - ((nf ^ 0x1ff) + 1);
22688 -                       ath_print(common, ATH_DBG_CALIBRATE,
22689 -                                 "NF calibrated [ctl] [chain 2] is %d\n", nf);
22690 -                       nfarray[2] = nf;
22691 -               }
22692 -       }
22693 -
22694 -       if (AR_SREV_9280_10_OR_LATER(ah))
22695 -               nf = MS(REG_READ(ah, AR_PHY_EXT_CCA),
22696 -                       AR9280_PHY_EXT_MINCCA_PWR);
22697 -       else
22698 -               nf = MS(REG_READ(ah, AR_PHY_EXT_CCA),
22699 -                       AR_PHY_EXT_MINCCA_PWR);
22700 -
22701 -       if (nf & 0x100)
22702 -               nf = 0 - ((nf ^ 0x1ff) + 1);
22703 -       ath_print(common, ATH_DBG_CALIBRATE,
22704 -                 "NF calibrated [ext] [chain 0] is %d\n", nf);
22705 -
22706 -       if (AR_SREV_9271(ah) && (nf >= -114))
22707 -               nf = -116;
22708 -
22709 -       nfarray[3] = nf;
22710 -
22711 -       if (!AR_SREV_9285(ah) && !AR_SREV_9271(ah)) {
22712 -               if (AR_SREV_9280_10_OR_LATER(ah))
22713 -                       nf = MS(REG_READ(ah, AR_PHY_CH1_EXT_CCA),
22714 -                                       AR9280_PHY_CH1_EXT_MINCCA_PWR);
22715 -               else
22716 -                       nf = MS(REG_READ(ah, AR_PHY_CH1_EXT_CCA),
22717 -                                       AR_PHY_CH1_EXT_MINCCA_PWR);
22718 -
22719 -               if (nf & 0x100)
22720 -                       nf = 0 - ((nf ^ 0x1ff) + 1);
22721 -               ath_print(common, ATH_DBG_CALIBRATE,
22722 -                         "NF calibrated [ext] [chain 1] is %d\n", nf);
22723 -               nfarray[4] = nf;
22724 -
22725 -               if (!AR_SREV_9280(ah) && !AR_SREV_9287(ah)) {
22726 -                       nf = MS(REG_READ(ah, AR_PHY_CH2_EXT_CCA),
22727 -                                       AR_PHY_CH2_EXT_MINCCA_PWR);
22728 -                       if (nf & 0x100)
22729 -                               nf = 0 - ((nf ^ 0x1ff) + 1);
22730 -                       ath_print(common, ATH_DBG_CALIBRATE,
22731 -                                 "NF calibrated [ext] [chain 2] is %d\n", nf);
22732 -                       nfarray[5] = nf;
22733 -               }
22734 -       }
22735 -}
22736 -
22737 -static bool getNoiseFloorThresh(struct ath_hw *ah,
22738 -                               enum ieee80211_band band,
22739 -                               int16_t *nft)
22740 +static bool ath9k_hw_get_nf_thresh(struct ath_hw *ah,
22741 +                                  enum ieee80211_band band,
22742 +                                  int16_t *nft)
22743  {
22744         switch (band) {
22745         case IEEE80211_BAND_5GHZ:
22746 @@ -195,44 +108,8 @@ static bool getNoiseFloorThresh(struct ath_hw *ah,
22747         return true;
22748  }
22749  
22750 -static void ath9k_hw_setup_calibration(struct ath_hw *ah,
22751 -                                      struct ath9k_cal_list *currCal)
22752 -{
22753 -       struct ath_common *common = ath9k_hw_common(ah);
22754 -
22755 -       REG_RMW_FIELD(ah, AR_PHY_TIMING_CTRL4(0),
22756 -                     AR_PHY_TIMING_CTRL4_IQCAL_LOG_COUNT_MAX,
22757 -                     currCal->calData->calCountMax);
22758 -
22759 -       switch (currCal->calData->calType) {
22760 -       case IQ_MISMATCH_CAL:
22761 -               REG_WRITE(ah, AR_PHY_CALMODE, AR_PHY_CALMODE_IQ);
22762 -               ath_print(common, ATH_DBG_CALIBRATE,
22763 -                         "starting IQ Mismatch Calibration\n");
22764 -               break;
22765 -       case ADC_GAIN_CAL:
22766 -               REG_WRITE(ah, AR_PHY_CALMODE, AR_PHY_CALMODE_ADC_GAIN);
22767 -               ath_print(common, ATH_DBG_CALIBRATE,
22768 -                         "starting ADC Gain Calibration\n");
22769 -               break;
22770 -       case ADC_DC_CAL:
22771 -               REG_WRITE(ah, AR_PHY_CALMODE, AR_PHY_CALMODE_ADC_DC_PER);
22772 -               ath_print(common, ATH_DBG_CALIBRATE,
22773 -                         "starting ADC DC Calibration\n");
22774 -               break;
22775 -       case ADC_DC_INIT_CAL:
22776 -               REG_WRITE(ah, AR_PHY_CALMODE, AR_PHY_CALMODE_ADC_DC_INIT);
22777 -               ath_print(common, ATH_DBG_CALIBRATE,
22778 -                         "starting Init ADC DC Calibration\n");
22779 -               break;
22780 -       }
22781 -
22782 -       REG_SET_BIT(ah, AR_PHY_TIMING_CTRL4(0),
22783 -                   AR_PHY_TIMING_CTRL4_DO_CAL);
22784 -}
22785 -
22786 -static void ath9k_hw_reset_calibration(struct ath_hw *ah,
22787 -                                      struct ath9k_cal_list *currCal)
22788 +void ath9k_hw_reset_calibration(struct ath_hw *ah,
22789 +                               struct ath9k_cal_list *currCal)
22790  {
22791         int i;
22792  
22793 @@ -250,324 +127,6 @@ static void ath9k_hw_reset_calibration(struct ath_hw *ah,
22794         ah->cal_samples = 0;
22795  }
22796  
22797 -static bool ath9k_hw_per_calibration(struct ath_hw *ah,
22798 -                                    struct ath9k_channel *ichan,
22799 -                                    u8 rxchainmask,
22800 -                                    struct ath9k_cal_list *currCal)
22801 -{
22802 -       bool iscaldone = false;
22803 -
22804 -       if (currCal->calState == CAL_RUNNING) {
22805 -               if (!(REG_READ(ah, AR_PHY_TIMING_CTRL4(0)) &
22806 -                     AR_PHY_TIMING_CTRL4_DO_CAL)) {
22807 -
22808 -                       currCal->calData->calCollect(ah);
22809 -                       ah->cal_samples++;
22810 -
22811 -                       if (ah->cal_samples >= currCal->calData->calNumSamples) {
22812 -                               int i, numChains = 0;
22813 -                               for (i = 0; i < AR5416_MAX_CHAINS; i++) {
22814 -                                       if (rxchainmask & (1 << i))
22815 -                                               numChains++;
22816 -                               }
22817 -
22818 -                               currCal->calData->calPostProc(ah, numChains);
22819 -                               ichan->CalValid |= currCal->calData->calType;
22820 -                               currCal->calState = CAL_DONE;
22821 -                               iscaldone = true;
22822 -                       } else {
22823 -                               ath9k_hw_setup_calibration(ah, currCal);
22824 -                       }
22825 -               }
22826 -       } else if (!(ichan->CalValid & currCal->calData->calType)) {
22827 -               ath9k_hw_reset_calibration(ah, currCal);
22828 -       }
22829 -
22830 -       return iscaldone;
22831 -}
22832 -
22833 -/* Assumes you are talking about the currently configured channel */
22834 -static bool ath9k_hw_iscal_supported(struct ath_hw *ah,
22835 -                                    enum ath9k_cal_types calType)
22836 -{
22837 -       struct ieee80211_conf *conf = &ath9k_hw_common(ah)->hw->conf;
22838 -
22839 -       switch (calType & ah->supp_cals) {
22840 -       case IQ_MISMATCH_CAL: /* Both 2 GHz and 5 GHz support OFDM */
22841 -               return true;
22842 -       case ADC_GAIN_CAL:
22843 -       case ADC_DC_CAL:
22844 -               if (!(conf->channel->band == IEEE80211_BAND_2GHZ &&
22845 -                     conf_is_ht20(conf)))
22846 -                       return true;
22847 -               break;
22848 -       }
22849 -       return false;
22850 -}
22851 -
22852 -static void ath9k_hw_iqcal_collect(struct ath_hw *ah)
22853 -{
22854 -       int i;
22855 -
22856 -       for (i = 0; i < AR5416_MAX_CHAINS; i++) {
22857 -               ah->totalPowerMeasI[i] +=
22858 -                       REG_READ(ah, AR_PHY_CAL_MEAS_0(i));
22859 -               ah->totalPowerMeasQ[i] +=
22860 -                       REG_READ(ah, AR_PHY_CAL_MEAS_1(i));
22861 -               ah->totalIqCorrMeas[i] +=
22862 -                       (int32_t) REG_READ(ah, AR_PHY_CAL_MEAS_2(i));
22863 -               ath_print(ath9k_hw_common(ah), ATH_DBG_CALIBRATE,
22864 -                         "%d: Chn %d pmi=0x%08x;pmq=0x%08x;iqcm=0x%08x;\n",
22865 -                         ah->cal_samples, i, ah->totalPowerMeasI[i],
22866 -                         ah->totalPowerMeasQ[i],
22867 -                         ah->totalIqCorrMeas[i]);
22868 -       }
22869 -}
22870 -
22871 -static void ath9k_hw_adc_gaincal_collect(struct ath_hw *ah)
22872 -{
22873 -       int i;
22874 -
22875 -       for (i = 0; i < AR5416_MAX_CHAINS; i++) {
22876 -               ah->totalAdcIOddPhase[i] +=
22877 -                       REG_READ(ah, AR_PHY_CAL_MEAS_0(i));
22878 -               ah->totalAdcIEvenPhase[i] +=
22879 -                       REG_READ(ah, AR_PHY_CAL_MEAS_1(i));
22880 -               ah->totalAdcQOddPhase[i] +=
22881 -                       REG_READ(ah, AR_PHY_CAL_MEAS_2(i));
22882 -               ah->totalAdcQEvenPhase[i] +=
22883 -                       REG_READ(ah, AR_PHY_CAL_MEAS_3(i));
22884 -
22885 -               ath_print(ath9k_hw_common(ah), ATH_DBG_CALIBRATE,
22886 -                         "%d: Chn %d oddi=0x%08x; eveni=0x%08x; "
22887 -                         "oddq=0x%08x; evenq=0x%08x;\n",
22888 -                         ah->cal_samples, i,
22889 -                         ah->totalAdcIOddPhase[i],
22890 -                         ah->totalAdcIEvenPhase[i],
22891 -                         ah->totalAdcQOddPhase[i],
22892 -                         ah->totalAdcQEvenPhase[i]);
22893 -       }
22894 -}
22895 -
22896 -static void ath9k_hw_adc_dccal_collect(struct ath_hw *ah)
22897 -{
22898 -       int i;
22899 -
22900 -       for (i = 0; i < AR5416_MAX_CHAINS; i++) {
22901 -               ah->totalAdcDcOffsetIOddPhase[i] +=
22902 -                       (int32_t) REG_READ(ah, AR_PHY_CAL_MEAS_0(i));
22903 -               ah->totalAdcDcOffsetIEvenPhase[i] +=
22904 -                       (int32_t) REG_READ(ah, AR_PHY_CAL_MEAS_1(i));
22905 -               ah->totalAdcDcOffsetQOddPhase[i] +=
22906 -                       (int32_t) REG_READ(ah, AR_PHY_CAL_MEAS_2(i));
22907 -               ah->totalAdcDcOffsetQEvenPhase[i] +=
22908 -                       (int32_t) REG_READ(ah, AR_PHY_CAL_MEAS_3(i));
22909 -
22910 -               ath_print(ath9k_hw_common(ah), ATH_DBG_CALIBRATE,
22911 -                         "%d: Chn %d oddi=0x%08x; eveni=0x%08x; "
22912 -                         "oddq=0x%08x; evenq=0x%08x;\n",
22913 -                         ah->cal_samples, i,
22914 -                         ah->totalAdcDcOffsetIOddPhase[i],
22915 -                         ah->totalAdcDcOffsetIEvenPhase[i],
22916 -                         ah->totalAdcDcOffsetQOddPhase[i],
22917 -                         ah->totalAdcDcOffsetQEvenPhase[i]);
22918 -       }
22919 -}
22920 -
22921 -static void ath9k_hw_iqcalibrate(struct ath_hw *ah, u8 numChains)
22922 -{
22923 -       struct ath_common *common = ath9k_hw_common(ah);
22924 -       u32 powerMeasQ, powerMeasI, iqCorrMeas;
22925 -       u32 qCoffDenom, iCoffDenom;
22926 -       int32_t qCoff, iCoff;
22927 -       int iqCorrNeg, i;
22928 -
22929 -       for (i = 0; i < numChains; i++) {
22930 -               powerMeasI = ah->totalPowerMeasI[i];
22931 -               powerMeasQ = ah->totalPowerMeasQ[i];
22932 -               iqCorrMeas = ah->totalIqCorrMeas[i];
22933 -
22934 -               ath_print(common, ATH_DBG_CALIBRATE,
22935 -                         "Starting IQ Cal and Correction for Chain %d\n",
22936 -                         i);
22937 -
22938 -               ath_print(common, ATH_DBG_CALIBRATE,
22939 -                         "Orignal: Chn %diq_corr_meas = 0x%08x\n",
22940 -                         i, ah->totalIqCorrMeas[i]);
22941 -
22942 -               iqCorrNeg = 0;
22943 -
22944 -               if (iqCorrMeas > 0x80000000) {
22945 -                       iqCorrMeas = (0xffffffff - iqCorrMeas) + 1;
22946 -                       iqCorrNeg = 1;
22947 -               }
22948 -
22949 -               ath_print(common, ATH_DBG_CALIBRATE,
22950 -                         "Chn %d pwr_meas_i = 0x%08x\n", i, powerMeasI);
22951 -               ath_print(common, ATH_DBG_CALIBRATE,
22952 -                         "Chn %d pwr_meas_q = 0x%08x\n", i, powerMeasQ);
22953 -               ath_print(common, ATH_DBG_CALIBRATE, "iqCorrNeg is 0x%08x\n",
22954 -                         iqCorrNeg);
22955 -
22956 -               iCoffDenom = (powerMeasI / 2 + powerMeasQ / 2) / 128;
22957 -               qCoffDenom = powerMeasQ / 64;
22958 -
22959 -               if ((powerMeasQ != 0) && (iCoffDenom != 0) &&
22960 -                   (qCoffDenom != 0)) {
22961 -                       iCoff = iqCorrMeas / iCoffDenom;
22962 -                       qCoff = powerMeasI / qCoffDenom - 64;
22963 -                       ath_print(common, ATH_DBG_CALIBRATE,
22964 -                                 "Chn %d iCoff = 0x%08x\n", i, iCoff);
22965 -                       ath_print(common, ATH_DBG_CALIBRATE,
22966 -                                 "Chn %d qCoff = 0x%08x\n", i, qCoff);
22967 -
22968 -                       iCoff = iCoff & 0x3f;
22969 -                       ath_print(common, ATH_DBG_CALIBRATE,
22970 -                                 "New: Chn %d iCoff = 0x%08x\n", i, iCoff);
22971 -                       if (iqCorrNeg == 0x0)
22972 -                               iCoff = 0x40 - iCoff;
22973 -
22974 -                       if (qCoff > 15)
22975 -                               qCoff = 15;
22976 -                       else if (qCoff <= -16)
22977 -                               qCoff = 16;
22978 -
22979 -                       ath_print(common, ATH_DBG_CALIBRATE,
22980 -                                 "Chn %d : iCoff = 0x%x  qCoff = 0x%x\n",
22981 -                                 i, iCoff, qCoff);
22982 -
22983 -                       REG_RMW_FIELD(ah, AR_PHY_TIMING_CTRL4(i),
22984 -                                     AR_PHY_TIMING_CTRL4_IQCORR_Q_I_COFF,
22985 -                                     iCoff);
22986 -                       REG_RMW_FIELD(ah, AR_PHY_TIMING_CTRL4(i),
22987 -                                     AR_PHY_TIMING_CTRL4_IQCORR_Q_Q_COFF,
22988 -                                     qCoff);
22989 -                       ath_print(common, ATH_DBG_CALIBRATE,
22990 -                                 "IQ Cal and Correction done for Chain %d\n",
22991 -                                 i);
22992 -               }
22993 -       }
22994 -
22995 -       REG_SET_BIT(ah, AR_PHY_TIMING_CTRL4(0),
22996 -                   AR_PHY_TIMING_CTRL4_IQCORR_ENABLE);
22997 -}
22998 -
22999 -static void ath9k_hw_adc_gaincal_calibrate(struct ath_hw *ah, u8 numChains)
23000 -{
23001 -       struct ath_common *common = ath9k_hw_common(ah);
23002 -       u32 iOddMeasOffset, iEvenMeasOffset, qOddMeasOffset, qEvenMeasOffset;
23003 -       u32 qGainMismatch, iGainMismatch, val, i;
23004 -
23005 -       for (i = 0; i < numChains; i++) {
23006 -               iOddMeasOffset = ah->totalAdcIOddPhase[i];
23007 -               iEvenMeasOffset = ah->totalAdcIEvenPhase[i];
23008 -               qOddMeasOffset = ah->totalAdcQOddPhase[i];
23009 -               qEvenMeasOffset = ah->totalAdcQEvenPhase[i];
23010 -
23011 -               ath_print(common, ATH_DBG_CALIBRATE,
23012 -                         "Starting ADC Gain Cal for Chain %d\n", i);
23013 -
23014 -               ath_print(common, ATH_DBG_CALIBRATE,
23015 -                         "Chn %d pwr_meas_odd_i = 0x%08x\n", i,
23016 -                         iOddMeasOffset);
23017 -               ath_print(common, ATH_DBG_CALIBRATE,
23018 -                         "Chn %d pwr_meas_even_i = 0x%08x\n", i,
23019 -                         iEvenMeasOffset);
23020 -               ath_print(common, ATH_DBG_CALIBRATE,
23021 -                         "Chn %d pwr_meas_odd_q = 0x%08x\n", i,
23022 -                         qOddMeasOffset);
23023 -               ath_print(common, ATH_DBG_CALIBRATE,
23024 -                         "Chn %d pwr_meas_even_q = 0x%08x\n", i,
23025 -                         qEvenMeasOffset);
23026 -
23027 -               if (iOddMeasOffset != 0 && qEvenMeasOffset != 0) {
23028 -                       iGainMismatch =
23029 -                               ((iEvenMeasOffset * 32) /
23030 -                                iOddMeasOffset) & 0x3f;
23031 -                       qGainMismatch =
23032 -                               ((qOddMeasOffset * 32) /
23033 -                                qEvenMeasOffset) & 0x3f;
23034 -
23035 -                       ath_print(common, ATH_DBG_CALIBRATE,
23036 -                                 "Chn %d gain_mismatch_i = 0x%08x\n", i,
23037 -                                 iGainMismatch);
23038 -                       ath_print(common, ATH_DBG_CALIBRATE,
23039 -                                 "Chn %d gain_mismatch_q = 0x%08x\n", i,
23040 -                                 qGainMismatch);
23041 -
23042 -                       val = REG_READ(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(i));
23043 -                       val &= 0xfffff000;
23044 -                       val |= (qGainMismatch) | (iGainMismatch << 6);
23045 -                       REG_WRITE(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(i), val);
23046 -
23047 -                       ath_print(common, ATH_DBG_CALIBRATE,
23048 -                                 "ADC Gain Cal done for Chain %d\n", i);
23049 -               }
23050 -       }
23051 -
23052 -       REG_WRITE(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(0),
23053 -                 REG_READ(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(0)) |
23054 -                 AR_PHY_NEW_ADC_GAIN_CORR_ENABLE);
23055 -}
23056 -
23057 -static void ath9k_hw_adc_dccal_calibrate(struct ath_hw *ah, u8 numChains)
23058 -{
23059 -       struct ath_common *common = ath9k_hw_common(ah);
23060 -       u32 iOddMeasOffset, iEvenMeasOffset, val, i;
23061 -       int32_t qOddMeasOffset, qEvenMeasOffset, qDcMismatch, iDcMismatch;
23062 -       const struct ath9k_percal_data *calData =
23063 -               ah->cal_list_curr->calData;
23064 -       u32 numSamples =
23065 -               (1 << (calData->calCountMax + 5)) * calData->calNumSamples;
23066 -
23067 -       for (i = 0; i < numChains; i++) {
23068 -               iOddMeasOffset = ah->totalAdcDcOffsetIOddPhase[i];
23069 -               iEvenMeasOffset = ah->totalAdcDcOffsetIEvenPhase[i];
23070 -               qOddMeasOffset = ah->totalAdcDcOffsetQOddPhase[i];
23071 -               qEvenMeasOffset = ah->totalAdcDcOffsetQEvenPhase[i];
23072 -
23073 -               ath_print(common, ATH_DBG_CALIBRATE,
23074 -                          "Starting ADC DC Offset Cal for Chain %d\n", i);
23075 -
23076 -               ath_print(common, ATH_DBG_CALIBRATE,
23077 -                         "Chn %d pwr_meas_odd_i = %d\n", i,
23078 -                         iOddMeasOffset);
23079 -               ath_print(common, ATH_DBG_CALIBRATE,
23080 -                         "Chn %d pwr_meas_even_i = %d\n", i,
23081 -                         iEvenMeasOffset);
23082 -               ath_print(common, ATH_DBG_CALIBRATE,
23083 -                         "Chn %d pwr_meas_odd_q = %d\n", i,
23084 -                         qOddMeasOffset);
23085 -               ath_print(common, ATH_DBG_CALIBRATE,
23086 -                         "Chn %d pwr_meas_even_q = %d\n", i,
23087 -                         qEvenMeasOffset);
23088 -
23089 -               iDcMismatch = (((iEvenMeasOffset - iOddMeasOffset) * 2) /
23090 -                              numSamples) & 0x1ff;
23091 -               qDcMismatch = (((qOddMeasOffset - qEvenMeasOffset) * 2) /
23092 -                              numSamples) & 0x1ff;
23093 -
23094 -               ath_print(common, ATH_DBG_CALIBRATE,
23095 -                         "Chn %d dc_offset_mismatch_i = 0x%08x\n", i,
23096 -                         iDcMismatch);
23097 -               ath_print(common, ATH_DBG_CALIBRATE,
23098 -                         "Chn %d dc_offset_mismatch_q = 0x%08x\n", i,
23099 -                         qDcMismatch);
23100 -
23101 -               val = REG_READ(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(i));
23102 -               val &= 0xc0000fff;
23103 -               val |= (qDcMismatch << 12) | (iDcMismatch << 21);
23104 -               REG_WRITE(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(i), val);
23105 -
23106 -               ath_print(common, ATH_DBG_CALIBRATE,
23107 -                         "ADC DC Offset Cal done for Chain %d\n", i);
23108 -       }
23109 -
23110 -       REG_WRITE(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(0),
23111 -                 REG_READ(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(0)) |
23112 -                 AR_PHY_NEW_ADC_DC_OFFSET_CORR_ENABLE);
23113 -}
23114 -
23115  /* This is done for the currently configured channel */
23116  bool ath9k_hw_reset_calvalid(struct ath_hw *ah)
23117  {
23118 @@ -614,72 +173,6 @@ void ath9k_hw_start_nfcal(struct ath_hw *ah)
23119         REG_SET_BIT(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_NF);
23120  }
23121  
23122 -void ath9k_hw_loadnf(struct ath_hw *ah, struct ath9k_channel *chan)
23123 -{
23124 -       struct ath9k_nfcal_hist *h;
23125 -       int i, j;
23126 -       int32_t val;
23127 -       const u32 ar5416_cca_regs[6] = {
23128 -               AR_PHY_CCA,
23129 -               AR_PHY_CH1_CCA,
23130 -               AR_PHY_CH2_CCA,
23131 -               AR_PHY_EXT_CCA,
23132 -               AR_PHY_CH1_EXT_CCA,
23133 -               AR_PHY_CH2_EXT_CCA
23134 -       };
23135 -       u8 chainmask, rx_chain_status;
23136 -
23137 -       rx_chain_status = REG_READ(ah, AR_PHY_RX_CHAINMASK);
23138 -       if (AR_SREV_9285(ah) || AR_SREV_9271(ah))
23139 -               chainmask = 0x9;
23140 -       else if (AR_SREV_9280(ah) || AR_SREV_9287(ah)) {
23141 -               if ((rx_chain_status & 0x2) || (rx_chain_status & 0x4))
23142 -                       chainmask = 0x1B;
23143 -               else
23144 -                       chainmask = 0x09;
23145 -       } else {
23146 -               if (rx_chain_status & 0x4)
23147 -                       chainmask = 0x3F;
23148 -               else if (rx_chain_status & 0x2)
23149 -                       chainmask = 0x1B;
23150 -               else
23151 -                       chainmask = 0x09;
23152 -       }
23153 -
23154 -       h = ah->nfCalHist;
23155 -
23156 -       for (i = 0; i < NUM_NF_READINGS; i++) {
23157 -               if (chainmask & (1 << i)) {
23158 -                       val = REG_READ(ah, ar5416_cca_regs[i]);
23159 -                       val &= 0xFFFFFE00;
23160 -                       val |= (((u32) (h[i].privNF) << 1) & 0x1ff);
23161 -                       REG_WRITE(ah, ar5416_cca_regs[i], val);
23162 -               }
23163 -       }
23164 -
23165 -       REG_CLR_BIT(ah, AR_PHY_AGC_CONTROL,
23166 -                   AR_PHY_AGC_CONTROL_ENABLE_NF);
23167 -       REG_CLR_BIT(ah, AR_PHY_AGC_CONTROL,
23168 -                   AR_PHY_AGC_CONTROL_NO_UPDATE_NF);
23169 -       REG_SET_BIT(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_NF);
23170 -
23171 -       for (j = 0; j < 5; j++) {
23172 -               if ((REG_READ(ah, AR_PHY_AGC_CONTROL) &
23173 -                    AR_PHY_AGC_CONTROL_NF) == 0)
23174 -                       break;
23175 -               udelay(50);
23176 -       }
23177 -
23178 -       for (i = 0; i < NUM_NF_READINGS; i++) {
23179 -               if (chainmask & (1 << i)) {
23180 -                       val = REG_READ(ah, ar5416_cca_regs[i]);
23181 -                       val &= 0xFFFFFE00;
23182 -                       val |= (((u32) (-50) << 1) & 0x1ff);
23183 -                       REG_WRITE(ah, ar5416_cca_regs[i], val);
23184 -               }
23185 -       }
23186 -}
23187 -
23188  int16_t ath9k_hw_getnf(struct ath_hw *ah,
23189                        struct ath9k_channel *chan)
23190  {
23191 @@ -699,7 +192,7 @@ int16_t ath9k_hw_getnf(struct ath_hw *ah,
23192         } else {
23193                 ath9k_hw_do_getnf(ah, nfarray);
23194                 nf = nfarray[0];
23195 -               if (getNoiseFloorThresh(ah, c->band, &nfThresh)
23196 +               if (ath9k_hw_get_nf_thresh(ah, c->band, &nfThresh)
23197                     && nf > nfThresh) {
23198                         ath_print(common, ATH_DBG_CALIBRATE,
23199                                   "noise floor failed detected; "
23200 @@ -757,567 +250,3 @@ s16 ath9k_hw_getchan_noise(struct ath_hw *ah, struct ath9k_channel *chan)
23201         return nf;
23202  }
23203  EXPORT_SYMBOL(ath9k_hw_getchan_noise);
23204 -
23205 -static void ath9k_olc_temp_compensation_9287(struct ath_hw *ah)
23206 -{
23207 -       u32 rddata;
23208 -       int32_t delta, currPDADC, slope;
23209 -
23210 -       rddata = REG_READ(ah, AR_PHY_TX_PWRCTRL4);
23211 -       currPDADC = MS(rddata, AR_PHY_TX_PWRCTRL_PD_AVG_OUT);
23212 -
23213 -       if (ah->initPDADC == 0 || currPDADC == 0) {
23214 -               /*
23215 -                * Zero value indicates that no frames have been transmitted yet,
23216 -                * can't do temperature compensation until frames are transmitted.
23217 -                */
23218 -               return;
23219 -       } else {
23220 -               slope = ah->eep_ops->get_eeprom(ah, EEP_TEMPSENSE_SLOPE);
23221 -
23222 -               if (slope == 0) { /* to avoid divide by zero case */
23223 -                       delta = 0;
23224 -               } else {
23225 -                       delta = ((currPDADC - ah->initPDADC)*4) / slope;
23226 -               }
23227 -               REG_RMW_FIELD(ah, AR_PHY_CH0_TX_PWRCTRL11,
23228 -                             AR_PHY_TX_PWRCTRL_OLPC_TEMP_COMP, delta);
23229 -               REG_RMW_FIELD(ah, AR_PHY_CH1_TX_PWRCTRL11,
23230 -                             AR_PHY_TX_PWRCTRL_OLPC_TEMP_COMP, delta);
23231 -       }
23232 -}
23233 -
23234 -static void ath9k_olc_temp_compensation(struct ath_hw *ah)
23235 -{
23236 -       u32 rddata, i;
23237 -       int delta, currPDADC, regval;
23238 -
23239 -       if (OLC_FOR_AR9287_10_LATER) {
23240 -               ath9k_olc_temp_compensation_9287(ah);
23241 -       } else {
23242 -               rddata = REG_READ(ah, AR_PHY_TX_PWRCTRL4);
23243 -               currPDADC = MS(rddata, AR_PHY_TX_PWRCTRL_PD_AVG_OUT);
23244 -
23245 -               if (ah->initPDADC == 0 || currPDADC == 0) {
23246 -                       return;
23247 -               } else {
23248 -                       if (ah->eep_ops->get_eeprom(ah, EEP_DAC_HPWR_5G))
23249 -                               delta = (currPDADC - ah->initPDADC + 4) / 8;
23250 -                       else
23251 -                               delta = (currPDADC - ah->initPDADC + 5) / 10;
23252 -
23253 -                       if (delta != ah->PDADCdelta) {
23254 -                               ah->PDADCdelta = delta;
23255 -                               for (i = 1; i < AR9280_TX_GAIN_TABLE_SIZE; i++) {
23256 -                                       regval = ah->originalGain[i] - delta;
23257 -                                       if (regval < 0)
23258 -                                               regval = 0;
23259 -
23260 -                                       REG_RMW_FIELD(ah,
23261 -                                                     AR_PHY_TX_GAIN_TBL1 + i * 4,
23262 -                                                     AR_PHY_TX_GAIN, regval);
23263 -                               }
23264 -                       }
23265 -               }
23266 -       }
23267 -}
23268 -
23269 -static void ath9k_hw_9271_pa_cal(struct ath_hw *ah, bool is_reset)
23270 -{
23271 -       u32 regVal;
23272 -       unsigned int i;
23273 -       u32 regList [][2] = {
23274 -               { 0x786c, 0 },
23275 -               { 0x7854, 0 },
23276 -               { 0x7820, 0 },
23277 -               { 0x7824, 0 },
23278 -               { 0x7868, 0 },
23279 -               { 0x783c, 0 },
23280 -               { 0x7838, 0 } ,
23281 -               { 0x7828, 0 } ,
23282 -       };
23283 -
23284 -       for (i = 0; i < ARRAY_SIZE(regList); i++)
23285 -               regList[i][1] = REG_READ(ah, regList[i][0]);
23286 -
23287 -       regVal = REG_READ(ah, 0x7834);
23288 -       regVal &= (~(0x1));
23289 -       REG_WRITE(ah, 0x7834, regVal);
23290 -       regVal = REG_READ(ah, 0x9808);
23291 -       regVal |= (0x1 << 27);
23292 -       REG_WRITE(ah, 0x9808, regVal);
23293 -
23294 -       /* 786c,b23,1, pwddac=1 */
23295 -       REG_RMW_FIELD(ah, AR9285_AN_TOP3, AR9285_AN_TOP3_PWDDAC, 1);
23296 -       /* 7854, b5,1, pdrxtxbb=1 */
23297 -       REG_RMW_FIELD(ah, AR9285_AN_RXTXBB1, AR9285_AN_RXTXBB1_PDRXTXBB1, 1);
23298 -       /* 7854, b7,1, pdv2i=1 */
23299 -       REG_RMW_FIELD(ah, AR9285_AN_RXTXBB1, AR9285_AN_RXTXBB1_PDV2I, 1);
23300 -       /* 7854, b8,1, pddacinterface=1 */
23301 -       REG_RMW_FIELD(ah, AR9285_AN_RXTXBB1, AR9285_AN_RXTXBB1_PDDACIF, 1);
23302 -       /* 7824,b12,0, offcal=0 */
23303 -       REG_RMW_FIELD(ah, AR9285_AN_RF2G2, AR9285_AN_RF2G2_OFFCAL, 0);
23304 -       /* 7838, b1,0, pwddb=0 */
23305 -       REG_RMW_FIELD(ah, AR9285_AN_RF2G7, AR9285_AN_RF2G7_PWDDB, 0);
23306 -       /* 7820,b11,0, enpacal=0 */
23307 -       REG_RMW_FIELD(ah, AR9285_AN_RF2G1, AR9285_AN_RF2G1_ENPACAL, 0);
23308 -       /* 7820,b25,1, pdpadrv1=0 */
23309 -       REG_RMW_FIELD(ah, AR9285_AN_RF2G1, AR9285_AN_RF2G1_PDPADRV1, 0);
23310 -       /* 7820,b24,0, pdpadrv2=0 */
23311 -       REG_RMW_FIELD(ah, AR9285_AN_RF2G1,AR9285_AN_RF2G1_PDPADRV2,0);
23312 -       /* 7820,b23,0, pdpaout=0 */
23313 -       REG_RMW_FIELD(ah, AR9285_AN_RF2G1, AR9285_AN_RF2G1_PDPAOUT, 0);
23314 -       /* 783c,b14-16,7, padrvgn2tab_0=7 */
23315 -       REG_RMW_FIELD(ah, AR9285_AN_RF2G8,AR9285_AN_RF2G8_PADRVGN2TAB0, 7);
23316 -       /*
23317 -        * 7838,b29-31,0, padrvgn1tab_0=0
23318 -        * does not matter since we turn it off
23319 -        */
23320 -       REG_RMW_FIELD(ah, AR9285_AN_RF2G7,AR9285_AN_RF2G7_PADRVGN2TAB0, 0);
23321 -
23322 -       REG_RMW_FIELD(ah, AR9285_AN_RF2G3, AR9271_AN_RF2G3_CCOMP, 0xfff);
23323 -
23324 -       /* Set:
23325 -        * localmode=1,bmode=1,bmoderxtx=1,synthon=1,
23326 -        * txon=1,paon=1,oscon=1,synthon_force=1
23327 -        */
23328 -       REG_WRITE(ah, AR9285_AN_TOP2, 0xca0358a0);
23329 -       udelay(30);
23330 -       REG_RMW_FIELD(ah, AR9285_AN_RF2G6, AR9271_AN_RF2G6_OFFS, 0);
23331 -
23332 -       /* find off_6_1; */
23333 -       for (i = 6; i > 0; i--) {
23334 -               regVal = REG_READ(ah, 0x7834);
23335 -               regVal |= (1 << (20 + i));
23336 -               REG_WRITE(ah, 0x7834, regVal);
23337 -               udelay(1);
23338 -               //regVal = REG_READ(ah, 0x7834);
23339 -               regVal &= (~(0x1 << (20 + i)));
23340 -               regVal |= (MS(REG_READ(ah, 0x7840), AR9285_AN_RXTXBB1_SPARE9)
23341 -                           << (20 + i));
23342 -               REG_WRITE(ah, 0x7834, regVal);
23343 -       }
23344 -
23345 -       regVal = (regVal >>20) & 0x7f;
23346 -
23347 -       /* Update PA cal info */
23348 -       if ((!is_reset) && (ah->pacal_info.prev_offset == regVal)) {
23349 -               if (ah->pacal_info.max_skipcount < MAX_PACAL_SKIPCOUNT)
23350 -                       ah->pacal_info.max_skipcount =
23351 -                               2 * ah->pacal_info.max_skipcount;
23352 -               ah->pacal_info.skipcount = ah->pacal_info.max_skipcount;
23353 -       } else {
23354 -               ah->pacal_info.max_skipcount = 1;
23355 -               ah->pacal_info.skipcount = 0;
23356 -               ah->pacal_info.prev_offset = regVal;
23357 -       }
23358 -
23359 -       regVal = REG_READ(ah, 0x7834);
23360 -       regVal |= 0x1;
23361 -       REG_WRITE(ah, 0x7834, regVal);
23362 -       regVal = REG_READ(ah, 0x9808);
23363 -       regVal &= (~(0x1 << 27));
23364 -       REG_WRITE(ah, 0x9808, regVal);
23365 -
23366 -       for (i = 0; i < ARRAY_SIZE(regList); i++)
23367 -               REG_WRITE(ah, regList[i][0], regList[i][1]);
23368 -}
23369 -
23370 -static inline void ath9k_hw_9285_pa_cal(struct ath_hw *ah, bool is_reset)
23371 -{
23372 -       struct ath_common *common = ath9k_hw_common(ah);
23373 -       u32 regVal;
23374 -       int i, offset, offs_6_1, offs_0;
23375 -       u32 ccomp_org, reg_field;
23376 -       u32 regList[][2] = {
23377 -               { 0x786c, 0 },
23378 -               { 0x7854, 0 },
23379 -               { 0x7820, 0 },
23380 -               { 0x7824, 0 },
23381 -               { 0x7868, 0 },
23382 -               { 0x783c, 0 },
23383 -               { 0x7838, 0 },
23384 -       };
23385 -
23386 -       ath_print(common, ATH_DBG_CALIBRATE, "Running PA Calibration\n");
23387 -
23388 -       /* PA CAL is not needed for high power solution */
23389 -       if (ah->eep_ops->get_eeprom(ah, EEP_TXGAIN_TYPE) ==
23390 -           AR5416_EEP_TXGAIN_HIGH_POWER)
23391 -               return;
23392 -
23393 -       if (AR_SREV_9285_11(ah)) {
23394 -               REG_WRITE(ah, AR9285_AN_TOP4, (AR9285_AN_TOP4_DEFAULT | 0x14));
23395 -               udelay(10);
23396 -       }
23397 -
23398 -       for (i = 0; i < ARRAY_SIZE(regList); i++)
23399 -               regList[i][1] = REG_READ(ah, regList[i][0]);
23400 -
23401 -       regVal = REG_READ(ah, 0x7834);
23402 -       regVal &= (~(0x1));
23403 -       REG_WRITE(ah, 0x7834, regVal);
23404 -       regVal = REG_READ(ah, 0x9808);
23405 -       regVal |= (0x1 << 27);
23406 -       REG_WRITE(ah, 0x9808, regVal);
23407 -
23408 -       REG_RMW_FIELD(ah, AR9285_AN_TOP3, AR9285_AN_TOP3_PWDDAC, 1);
23409 -       REG_RMW_FIELD(ah, AR9285_AN_RXTXBB1, AR9285_AN_RXTXBB1_PDRXTXBB1, 1);
23410 -       REG_RMW_FIELD(ah, AR9285_AN_RXTXBB1, AR9285_AN_RXTXBB1_PDV2I, 1);
23411 -       REG_RMW_FIELD(ah, AR9285_AN_RXTXBB1, AR9285_AN_RXTXBB1_PDDACIF, 1);
23412 -       REG_RMW_FIELD(ah, AR9285_AN_RF2G2, AR9285_AN_RF2G2_OFFCAL, 0);
23413 -       REG_RMW_FIELD(ah, AR9285_AN_RF2G7, AR9285_AN_RF2G7_PWDDB, 0);
23414 -       REG_RMW_FIELD(ah, AR9285_AN_RF2G1, AR9285_AN_RF2G1_ENPACAL, 0);
23415 -       REG_RMW_FIELD(ah, AR9285_AN_RF2G1, AR9285_AN_RF2G1_PDPADRV1, 0);
23416 -       REG_RMW_FIELD(ah, AR9285_AN_RF2G1, AR9285_AN_RF2G1_PDPADRV2, 0);
23417 -       REG_RMW_FIELD(ah, AR9285_AN_RF2G1, AR9285_AN_RF2G1_PDPAOUT, 0);
23418 -       REG_RMW_FIELD(ah, AR9285_AN_RF2G8, AR9285_AN_RF2G8_PADRVGN2TAB0, 7);
23419 -       REG_RMW_FIELD(ah, AR9285_AN_RF2G7, AR9285_AN_RF2G7_PADRVGN2TAB0, 0);
23420 -       ccomp_org = MS(REG_READ(ah, AR9285_AN_RF2G6), AR9285_AN_RF2G6_CCOMP);
23421 -       REG_RMW_FIELD(ah, AR9285_AN_RF2G6, AR9285_AN_RF2G6_CCOMP, 0xf);
23422 -
23423 -       REG_WRITE(ah, AR9285_AN_TOP2, 0xca0358a0);
23424 -       udelay(30);
23425 -       REG_RMW_FIELD(ah, AR9285_AN_RF2G6, AR9285_AN_RF2G6_OFFS, 0);
23426 -       REG_RMW_FIELD(ah, AR9285_AN_RF2G3, AR9285_AN_RF2G3_PDVCCOMP, 0);
23427 -
23428 -       for (i = 6; i > 0; i--) {
23429 -               regVal = REG_READ(ah, 0x7834);
23430 -               regVal |= (1 << (19 + i));
23431 -               REG_WRITE(ah, 0x7834, regVal);
23432 -               udelay(1);
23433 -               regVal = REG_READ(ah, 0x7834);
23434 -               regVal &= (~(0x1 << (19 + i)));
23435 -               reg_field = MS(REG_READ(ah, 0x7840), AR9285_AN_RXTXBB1_SPARE9);
23436 -               regVal |= (reg_field << (19 + i));
23437 -               REG_WRITE(ah, 0x7834, regVal);
23438 -       }
23439 -
23440 -       REG_RMW_FIELD(ah, AR9285_AN_RF2G3, AR9285_AN_RF2G3_PDVCCOMP, 1);
23441 -       udelay(1);
23442 -       reg_field = MS(REG_READ(ah, AR9285_AN_RF2G9), AR9285_AN_RXTXBB1_SPARE9);
23443 -       REG_RMW_FIELD(ah, AR9285_AN_RF2G3, AR9285_AN_RF2G3_PDVCCOMP, reg_field);
23444 -       offs_6_1 = MS(REG_READ(ah, AR9285_AN_RF2G6), AR9285_AN_RF2G6_OFFS);
23445 -       offs_0   = MS(REG_READ(ah, AR9285_AN_RF2G3), AR9285_AN_RF2G3_PDVCCOMP);
23446 -
23447 -       offset = (offs_6_1<<1) | offs_0;
23448 -       offset = offset - 0;
23449 -       offs_6_1 = offset>>1;
23450 -       offs_0 = offset & 1;
23451 -
23452 -       if ((!is_reset) && (ah->pacal_info.prev_offset == offset)) {
23453 -               if (ah->pacal_info.max_skipcount < MAX_PACAL_SKIPCOUNT)
23454 -                       ah->pacal_info.max_skipcount =
23455 -                               2 * ah->pacal_info.max_skipcount;
23456 -               ah->pacal_info.skipcount = ah->pacal_info.max_skipcount;
23457 -       } else {
23458 -               ah->pacal_info.max_skipcount = 1;
23459 -               ah->pacal_info.skipcount = 0;
23460 -               ah->pacal_info.prev_offset = offset;
23461 -       }
23462 -
23463 -       REG_RMW_FIELD(ah, AR9285_AN_RF2G6, AR9285_AN_RF2G6_OFFS, offs_6_1);
23464 -       REG_RMW_FIELD(ah, AR9285_AN_RF2G3, AR9285_AN_RF2G3_PDVCCOMP, offs_0);
23465 -
23466 -       regVal = REG_READ(ah, 0x7834);
23467 -       regVal |= 0x1;
23468 -       REG_WRITE(ah, 0x7834, regVal);
23469 -       regVal = REG_READ(ah, 0x9808);
23470 -       regVal &= (~(0x1 << 27));
23471 -       REG_WRITE(ah, 0x9808, regVal);
23472 -
23473 -       for (i = 0; i < ARRAY_SIZE(regList); i++)
23474 -               REG_WRITE(ah, regList[i][0], regList[i][1]);
23475 -
23476 -       REG_RMW_FIELD(ah, AR9285_AN_RF2G6, AR9285_AN_RF2G6_CCOMP, ccomp_org);
23477 -
23478 -       if (AR_SREV_9285_11(ah))
23479 -               REG_WRITE(ah, AR9285_AN_TOP4, AR9285_AN_TOP4_DEFAULT);
23480 -
23481 -}
23482 -
23483 -bool ath9k_hw_calibrate(struct ath_hw *ah, struct ath9k_channel *chan,
23484 -                       u8 rxchainmask, bool longcal)
23485 -{
23486 -       bool iscaldone = true;
23487 -       struct ath9k_cal_list *currCal = ah->cal_list_curr;
23488 -
23489 -       if (currCal &&
23490 -           (currCal->calState == CAL_RUNNING ||
23491 -            currCal->calState == CAL_WAITING)) {
23492 -               iscaldone = ath9k_hw_per_calibration(ah, chan,
23493 -                                                    rxchainmask, currCal);
23494 -               if (iscaldone) {
23495 -                       ah->cal_list_curr = currCal = currCal->calNext;
23496 -
23497 -                       if (currCal->calState == CAL_WAITING) {
23498 -                               iscaldone = false;
23499 -                               ath9k_hw_reset_calibration(ah, currCal);
23500 -                       }
23501 -               }
23502 -       }
23503 -
23504 -       /* Do NF cal only at longer intervals */
23505 -       if (longcal) {
23506 -               /* Do periodic PAOffset Cal */
23507 -               if (AR_SREV_9271(ah)) {
23508 -                       if (!ah->pacal_info.skipcount)
23509 -                               ath9k_hw_9271_pa_cal(ah, false);
23510 -                       else
23511 -                               ah->pacal_info.skipcount--;
23512 -               } else if (AR_SREV_9285_11_OR_LATER(ah)) {
23513 -                       if (!ah->pacal_info.skipcount)
23514 -                               ath9k_hw_9285_pa_cal(ah, false);
23515 -                       else
23516 -                               ah->pacal_info.skipcount--;
23517 -               }
23518 -
23519 -               if (OLC_FOR_AR9280_20_LATER || OLC_FOR_AR9287_10_LATER)
23520 -                       ath9k_olc_temp_compensation(ah);
23521 -
23522 -               /* Get the value from the previous NF cal and update history buffer */
23523 -               ath9k_hw_getnf(ah, chan);
23524 -
23525 -               /*
23526 -                * Load the NF from history buffer of the current channel.
23527 -                * NF is slow time-variant, so it is OK to use a historical value.
23528 -                */
23529 -               ath9k_hw_loadnf(ah, ah->curchan);
23530 -
23531 -               ath9k_hw_start_nfcal(ah);
23532 -       }
23533 -
23534 -       return iscaldone;
23535 -}
23536 -EXPORT_SYMBOL(ath9k_hw_calibrate);
23537 -
23538 -/* Carrier leakage Calibration fix */
23539 -static bool ar9285_cl_cal(struct ath_hw *ah, struct ath9k_channel *chan)
23540 -{
23541 -       struct ath_common *common = ath9k_hw_common(ah);
23542 -
23543 -       REG_SET_BIT(ah, AR_PHY_CL_CAL_CTL, AR_PHY_CL_CAL_ENABLE);
23544 -       if (IS_CHAN_HT20(chan)) {
23545 -               REG_SET_BIT(ah, AR_PHY_CL_CAL_CTL, AR_PHY_PARALLEL_CAL_ENABLE);
23546 -               REG_SET_BIT(ah, AR_PHY_TURBO, AR_PHY_FC_DYN2040_EN);
23547 -               REG_CLR_BIT(ah, AR_PHY_AGC_CONTROL,
23548 -                           AR_PHY_AGC_CONTROL_FLTR_CAL);
23549 -               REG_CLR_BIT(ah, AR_PHY_TPCRG1, AR_PHY_TPCRG1_PD_CAL_ENABLE);
23550 -               REG_SET_BIT(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_CAL);
23551 -               if (!ath9k_hw_wait(ah, AR_PHY_AGC_CONTROL,
23552 -                                 AR_PHY_AGC_CONTROL_CAL, 0, AH_WAIT_TIMEOUT)) {
23553 -                       ath_print(common, ATH_DBG_CALIBRATE, "offset "
23554 -                                 "calibration failed to complete in "
23555 -                                 "1ms; noisy ??\n");
23556 -                       return false;
23557 -               }
23558 -               REG_CLR_BIT(ah, AR_PHY_TURBO, AR_PHY_FC_DYN2040_EN);
23559 -               REG_CLR_BIT(ah, AR_PHY_CL_CAL_CTL, AR_PHY_PARALLEL_CAL_ENABLE);
23560 -               REG_CLR_BIT(ah, AR_PHY_CL_CAL_CTL, AR_PHY_CL_CAL_ENABLE);
23561 -       }
23562 -       REG_CLR_BIT(ah, AR_PHY_ADC_CTL, AR_PHY_ADC_CTL_OFF_PWDADC);
23563 -       REG_SET_BIT(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_FLTR_CAL);
23564 -       REG_SET_BIT(ah, AR_PHY_TPCRG1, AR_PHY_TPCRG1_PD_CAL_ENABLE);
23565 -       REG_SET_BIT(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_CAL);
23566 -       if (!ath9k_hw_wait(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_CAL,
23567 -                         0, AH_WAIT_TIMEOUT)) {
23568 -               ath_print(common, ATH_DBG_CALIBRATE, "offset calibration "
23569 -                         "failed to complete in 1ms; noisy ??\n");
23570 -               return false;
23571 -       }
23572 -
23573 -       REG_SET_BIT(ah, AR_PHY_ADC_CTL, AR_PHY_ADC_CTL_OFF_PWDADC);
23574 -       REG_CLR_BIT(ah, AR_PHY_CL_CAL_CTL, AR_PHY_CL_CAL_ENABLE);
23575 -       REG_CLR_BIT(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_FLTR_CAL);
23576 -
23577 -       return true;
23578 -}
23579 -
23580 -static bool ar9285_clc(struct ath_hw *ah, struct ath9k_channel *chan)
23581 -{
23582 -       int i;
23583 -       u_int32_t txgain_max;
23584 -       u_int32_t clc_gain, gain_mask = 0, clc_num = 0;
23585 -       u_int32_t reg_clc_I0, reg_clc_Q0;
23586 -       u_int32_t i0_num = 0;
23587 -       u_int32_t q0_num = 0;
23588 -       u_int32_t total_num = 0;
23589 -       u_int32_t reg_rf2g5_org;
23590 -       bool retv = true;
23591 -
23592 -       if (!(ar9285_cl_cal(ah, chan)))
23593 -               return false;
23594 -
23595 -       txgain_max = MS(REG_READ(ah, AR_PHY_TX_PWRCTRL7),
23596 -                       AR_PHY_TX_PWRCTRL_TX_GAIN_TAB_MAX);
23597 -
23598 -       for (i = 0; i < (txgain_max+1); i++) {
23599 -               clc_gain = (REG_READ(ah, (AR_PHY_TX_GAIN_TBL1+(i<<2))) &
23600 -                          AR_PHY_TX_GAIN_CLC) >> AR_PHY_TX_GAIN_CLC_S;
23601 -               if (!(gain_mask & (1 << clc_gain))) {
23602 -                       gain_mask |= (1 << clc_gain);
23603 -                       clc_num++;
23604 -               }
23605 -       }
23606 -
23607 -       for (i = 0; i < clc_num; i++) {
23608 -               reg_clc_I0 = (REG_READ(ah, (AR_PHY_CLC_TBL1 + (i << 2)))
23609 -                             & AR_PHY_CLC_I0) >> AR_PHY_CLC_I0_S;
23610 -               reg_clc_Q0 = (REG_READ(ah, (AR_PHY_CLC_TBL1 + (i << 2)))
23611 -                             & AR_PHY_CLC_Q0) >> AR_PHY_CLC_Q0_S;
23612 -               if (reg_clc_I0 == 0)
23613 -                       i0_num++;
23614 -
23615 -               if (reg_clc_Q0 == 0)
23616 -                       q0_num++;
23617 -       }
23618 -       total_num = i0_num + q0_num;
23619 -       if (total_num > AR9285_CLCAL_REDO_THRESH) {
23620 -               reg_rf2g5_org = REG_READ(ah, AR9285_RF2G5);
23621 -               if (AR_SREV_9285E_20(ah)) {
23622 -                       REG_WRITE(ah, AR9285_RF2G5,
23623 -                                 (reg_rf2g5_org & AR9285_RF2G5_IC50TX) |
23624 -                                 AR9285_RF2G5_IC50TX_XE_SET);
23625 -               } else {
23626 -                       REG_WRITE(ah, AR9285_RF2G5,
23627 -                                 (reg_rf2g5_org & AR9285_RF2G5_IC50TX) |
23628 -                                 AR9285_RF2G5_IC50TX_SET);
23629 -               }
23630 -               retv = ar9285_cl_cal(ah, chan);
23631 -               REG_WRITE(ah, AR9285_RF2G5, reg_rf2g5_org);
23632 -       }
23633 -       return retv;
23634 -}
23635 -
23636 -bool ath9k_hw_init_cal(struct ath_hw *ah, struct ath9k_channel *chan)
23637 -{
23638 -       struct ath_common *common = ath9k_hw_common(ah);
23639 -
23640 -       if (AR_SREV_9271(ah) || AR_SREV_9285_12_OR_LATER(ah)) {
23641 -               if (!ar9285_clc(ah, chan))
23642 -                       return false;
23643 -       } else {
23644 -               if (AR_SREV_9280_10_OR_LATER(ah)) {
23645 -                       if (!AR_SREV_9287_10_OR_LATER(ah))
23646 -                               REG_CLR_BIT(ah, AR_PHY_ADC_CTL,
23647 -                                           AR_PHY_ADC_CTL_OFF_PWDADC);
23648 -                       REG_SET_BIT(ah, AR_PHY_AGC_CONTROL,
23649 -                                   AR_PHY_AGC_CONTROL_FLTR_CAL);
23650 -               }
23651 -
23652 -               /* Calibrate the AGC */
23653 -               REG_WRITE(ah, AR_PHY_AGC_CONTROL,
23654 -                         REG_READ(ah, AR_PHY_AGC_CONTROL) |
23655 -                         AR_PHY_AGC_CONTROL_CAL);
23656 -
23657 -               /* Poll for offset calibration complete */
23658 -               if (!ath9k_hw_wait(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_CAL,
23659 -                                  0, AH_WAIT_TIMEOUT)) {
23660 -                       ath_print(common, ATH_DBG_CALIBRATE,
23661 -                                 "offset calibration failed to "
23662 -                                 "complete in 1ms; noisy environment?\n");
23663 -                       return false;
23664 -               }
23665 -
23666 -               if (AR_SREV_9280_10_OR_LATER(ah)) {
23667 -                       if (!AR_SREV_9287_10_OR_LATER(ah))
23668 -                               REG_SET_BIT(ah, AR_PHY_ADC_CTL,
23669 -                                           AR_PHY_ADC_CTL_OFF_PWDADC);
23670 -                       REG_CLR_BIT(ah, AR_PHY_AGC_CONTROL,
23671 -                                   AR_PHY_AGC_CONTROL_FLTR_CAL);
23672 -               }
23673 -       }
23674 -
23675 -       /* Do PA Calibration */
23676 -       if (AR_SREV_9271(ah))
23677 -               ath9k_hw_9271_pa_cal(ah, true);
23678 -       else if (AR_SREV_9285_11_OR_LATER(ah))
23679 -               ath9k_hw_9285_pa_cal(ah, true);
23680 -
23681 -       /* Do NF Calibration after DC offset and other calibrations */
23682 -       REG_WRITE(ah, AR_PHY_AGC_CONTROL,
23683 -                 REG_READ(ah, AR_PHY_AGC_CONTROL) | AR_PHY_AGC_CONTROL_NF);
23684 -
23685 -       ah->cal_list = ah->cal_list_last = ah->cal_list_curr = NULL;
23686 -
23687 -       /* Enable IQ, ADC Gain and ADC DC offset CALs */
23688 -       if (AR_SREV_9100(ah) || AR_SREV_9160_10_OR_LATER(ah)) {
23689 -               if (ath9k_hw_iscal_supported(ah, ADC_GAIN_CAL)) {
23690 -                       INIT_CAL(&ah->adcgain_caldata);
23691 -                       INSERT_CAL(ah, &ah->adcgain_caldata);
23692 -                       ath_print(common, ATH_DBG_CALIBRATE,
23693 -                                 "enabling ADC Gain Calibration.\n");
23694 -               }
23695 -               if (ath9k_hw_iscal_supported(ah, ADC_DC_CAL)) {
23696 -                       INIT_CAL(&ah->adcdc_caldata);
23697 -                       INSERT_CAL(ah, &ah->adcdc_caldata);
23698 -                       ath_print(common, ATH_DBG_CALIBRATE,
23699 -                                 "enabling ADC DC Calibration.\n");
23700 -               }
23701 -               if (ath9k_hw_iscal_supported(ah, IQ_MISMATCH_CAL)) {
23702 -                       INIT_CAL(&ah->iq_caldata);
23703 -                       INSERT_CAL(ah, &ah->iq_caldata);
23704 -                       ath_print(common, ATH_DBG_CALIBRATE,
23705 -                                 "enabling IQ Calibration.\n");
23706 -               }
23707 -
23708 -               ah->cal_list_curr = ah->cal_list;
23709 -
23710 -               if (ah->cal_list_curr)
23711 -                       ath9k_hw_reset_calibration(ah, ah->cal_list_curr);
23712 -       }
23713 -
23714 -       chan->CalValid = 0;
23715 -
23716 -       return true;
23717 -}
23718 -
23719 -const struct ath9k_percal_data iq_cal_multi_sample = {
23720 -       IQ_MISMATCH_CAL,
23721 -       MAX_CAL_SAMPLES,
23722 -       PER_MIN_LOG_COUNT,
23723 -       ath9k_hw_iqcal_collect,
23724 -       ath9k_hw_iqcalibrate
23725 -};
23726 -const struct ath9k_percal_data iq_cal_single_sample = {
23727 -       IQ_MISMATCH_CAL,
23728 -       MIN_CAL_SAMPLES,
23729 -       PER_MAX_LOG_COUNT,
23730 -       ath9k_hw_iqcal_collect,
23731 -       ath9k_hw_iqcalibrate
23732 -};
23733 -const struct ath9k_percal_data adc_gain_cal_multi_sample = {
23734 -       ADC_GAIN_CAL,
23735 -       MAX_CAL_SAMPLES,
23736 -       PER_MIN_LOG_COUNT,
23737 -       ath9k_hw_adc_gaincal_collect,
23738 -       ath9k_hw_adc_gaincal_calibrate
23739 -};
23740 -const struct ath9k_percal_data adc_gain_cal_single_sample = {
23741 -       ADC_GAIN_CAL,
23742 -       MIN_CAL_SAMPLES,
23743 -       PER_MAX_LOG_COUNT,
23744 -       ath9k_hw_adc_gaincal_collect,
23745 -       ath9k_hw_adc_gaincal_calibrate
23746 -};
23747 -const struct ath9k_percal_data adc_dc_cal_multi_sample = {
23748 -       ADC_DC_CAL,
23749 -       MAX_CAL_SAMPLES,
23750 -       PER_MIN_LOG_COUNT,
23751 -       ath9k_hw_adc_dccal_collect,
23752 -       ath9k_hw_adc_dccal_calibrate
23753 -};
23754 -const struct ath9k_percal_data adc_dc_cal_single_sample = {
23755 -       ADC_DC_CAL,
23756 -       MIN_CAL_SAMPLES,
23757 -       PER_MAX_LOG_COUNT,
23758 -       ath9k_hw_adc_dccal_collect,
23759 -       ath9k_hw_adc_dccal_calibrate
23760 -};
23761 -const struct ath9k_percal_data adc_init_dc_cal = {
23762 -       ADC_DC_INIT_CAL,
23763 -       MIN_CAL_SAMPLES,
23764 -       INIT_LOG_COUNT,
23765 -       ath9k_hw_adc_dccal_collect,
23766 -       ath9k_hw_adc_dccal_calibrate
23767 -};
23768 diff --git a/drivers/net/wireless/ath/ath9k/calib.h b/drivers/net/wireless/ath/ath9k/calib.h
23769 index b2c873e..24538bd 100644
23770 --- a/drivers/net/wireless/ath/ath9k/calib.h
23771 +++ b/drivers/net/wireless/ath/ath9k/calib.h
23772 @@ -19,14 +19,6 @@
23773  
23774  #include "hw.h"
23775  
23776 -extern const struct ath9k_percal_data iq_cal_multi_sample;
23777 -extern const struct ath9k_percal_data iq_cal_single_sample;
23778 -extern const struct ath9k_percal_data adc_gain_cal_multi_sample;
23779 -extern const struct ath9k_percal_data adc_gain_cal_single_sample;
23780 -extern const struct ath9k_percal_data adc_dc_cal_multi_sample;
23781 -extern const struct ath9k_percal_data adc_dc_cal_single_sample;
23782 -extern const struct ath9k_percal_data adc_init_dc_cal;
23783 -
23784  #define AR_PHY_CCA_MAX_AR5416_GOOD_VALUE       -85
23785  #define AR_PHY_CCA_MAX_AR9280_GOOD_VALUE       -112
23786  #define AR_PHY_CCA_MAX_AR9285_GOOD_VALUE       -118
23787 @@ -76,7 +68,8 @@ enum ath9k_cal_types {
23788         ADC_DC_INIT_CAL = 0x1,
23789         ADC_GAIN_CAL = 0x2,
23790         ADC_DC_CAL = 0x4,
23791 -       IQ_MISMATCH_CAL = 0x8
23792 +       IQ_MISMATCH_CAL = 0x8,
23793 +       TEMP_COMP_CAL = 0x10,
23794  };
23795  
23796  enum ath9k_cal_state {
23797 @@ -122,14 +115,12 @@ struct ath9k_pacal_info{
23798  
23799  bool ath9k_hw_reset_calvalid(struct ath_hw *ah);
23800  void ath9k_hw_start_nfcal(struct ath_hw *ah);
23801 -void ath9k_hw_loadnf(struct ath_hw *ah, struct ath9k_channel *chan);
23802  int16_t ath9k_hw_getnf(struct ath_hw *ah,
23803                        struct ath9k_channel *chan);
23804  void ath9k_init_nfcal_hist_buffer(struct ath_hw *ah);
23805  s16 ath9k_hw_getchan_noise(struct ath_hw *ah, struct ath9k_channel *chan);
23806 -bool ath9k_hw_calibrate(struct ath_hw *ah, struct ath9k_channel *chan,
23807 -                       u8 rxchainmask, bool longcal);
23808 -bool ath9k_hw_init_cal(struct ath_hw *ah,
23809 -                      struct ath9k_channel *chan);
23810 +void ath9k_hw_reset_calibration(struct ath_hw *ah,
23811 +                               struct ath9k_cal_list *currCal);
23812 +
23813  
23814  #endif /* CALIB_H */
23815 diff --git a/drivers/net/wireless/ath/ath9k/common.h b/drivers/net/wireless/ath/ath9k/common.h
23816 index 72a835d..e08f7e5 100644
23817 --- a/drivers/net/wireless/ath/ath9k/common.h
23818 +++ b/drivers/net/wireless/ath/ath9k/common.h
23819 @@ -20,6 +20,7 @@
23820  #include "../debug.h"
23821  
23822  #include "hw.h"
23823 +#include "hw-ops.h"
23824  
23825  /* Common header for Atheros 802.11n base driver cores */
23826  
23827 @@ -76,11 +77,12 @@ struct ath_buf {
23828                                            an aggregate) */
23829         struct ath_buf *bf_next;        /* next subframe in the aggregate */
23830         struct sk_buff *bf_mpdu;        /* enclosing frame structure */
23831 -       struct ath_desc *bf_desc;       /* virtual addr of desc */
23832 +       void *bf_desc;                  /* virtual addr of desc */
23833         dma_addr_t bf_daddr;            /* physical addr of desc */
23834         dma_addr_t bf_buf_addr;         /* physical addr of data buffer */
23835         bool bf_stale;
23836         bool bf_isnullfunc;
23837 +       bool bf_tx_aborted;
23838         u16 bf_flags;
23839         struct ath_buf_state bf_state;
23840         dma_addr_t bf_dmacontext;
23841 diff --git a/drivers/net/wireless/ath/ath9k/debug.c b/drivers/net/wireless/ath/ath9k/debug.c
23842 index b22d465..008ade2 100644
23843 --- a/drivers/net/wireless/ath/ath9k/debug.c
23844 +++ b/drivers/net/wireless/ath/ath9k/debug.c
23845 @@ -181,6 +181,10 @@ void ath_debug_stat_interrupt(struct ath_softc *sc, enum ath9k_int status)
23846                 sc->debug.stats.istats.total++;
23847         if (status & ATH9K_INT_RX)
23848                 sc->debug.stats.istats.rxok++;
23849 +       if (status & ATH9K_INT_RXLP)
23850 +               sc->debug.stats.istats.rxlp++;
23851 +       if (status & ATH9K_INT_RXHP)
23852 +               sc->debug.stats.istats.rxhp++;
23853         if (status & ATH9K_INT_RXEOL)
23854                 sc->debug.stats.istats.rxeol++;
23855         if (status & ATH9K_INT_RXORN)
23856 @@ -225,6 +229,10 @@ static ssize_t read_file_interrupt(struct file *file, char __user *user_buf,
23857         len += snprintf(buf + len, sizeof(buf) - len,
23858                 "%8s: %10u\n", "RX", sc->debug.stats.istats.rxok);
23859         len += snprintf(buf + len, sizeof(buf) - len,
23860 +               "%8s: %10u\n", "RXLP", sc->debug.stats.istats.rxlp);
23861 +       len += snprintf(buf + len, sizeof(buf) - len,
23862 +               "%8s: %10u\n", "RXHP", sc->debug.stats.istats.rxhp);
23863 +       len += snprintf(buf + len, sizeof(buf) - len,
23864                 "%8s: %10u\n", "RXEOL", sc->debug.stats.istats.rxeol);
23865         len += snprintf(buf + len, sizeof(buf) - len,
23866                 "%8s: %10u\n", "RXORN", sc->debug.stats.istats.rxorn);
23867 diff --git a/drivers/net/wireless/ath/ath9k/debug.h b/drivers/net/wireless/ath/ath9k/debug.h
23868 index b2af9de..c545960 100644
23869 --- a/drivers/net/wireless/ath/ath9k/debug.h
23870 +++ b/drivers/net/wireless/ath/ath9k/debug.h
23871 @@ -35,6 +35,8 @@ struct ath_buf;
23872   * struct ath_interrupt_stats - Contains statistics about interrupts
23873   * @total: Total no. of interrupts generated so far
23874   * @rxok: RX with no errors
23875 + * @rxlp: RX with low priority RX
23876 + * @rxhp: RX with high priority, uapsd only
23877   * @rxeol: RX with no more RXDESC available
23878   * @rxorn: RX FIFO overrun
23879   * @txok: TX completed at the requested rate
23880 @@ -55,6 +57,8 @@ struct ath_buf;
23881  struct ath_interrupt_stats {
23882         u32 total;
23883         u32 rxok;
23884 +       u32 rxlp;
23885 +       u32 rxhp;
23886         u32 rxeol;
23887         u32 rxorn;
23888         u32 txok;
23889 diff --git a/drivers/net/wireless/ath/ath9k/eeprom.c b/drivers/net/wireless/ath/ath9k/eeprom.c
23890 index dacaae9..bd9dff3 100644
23891 --- a/drivers/net/wireless/ath/ath9k/eeprom.c
23892 +++ b/drivers/net/wireless/ath/ath9k/eeprom.c
23893 @@ -256,14 +256,13 @@ int ath9k_hw_eeprom_init(struct ath_hw *ah)
23894  {
23895         int status;
23896  
23897 -       if (AR_SREV_9287(ah)) {
23898 -               ah->eep_map = EEP_MAP_AR9287;
23899 -               ah->eep_ops = &eep_AR9287_ops;
23900 +       if (AR_SREV_9300_20_OR_LATER(ah))
23901 +               ah->eep_ops = &eep_ar9300_ops;
23902 +       else if (AR_SREV_9287(ah)) {
23903 +               ah->eep_ops = &eep_ar9287_ops;
23904         } else if (AR_SREV_9285(ah) || AR_SREV_9271(ah)) {
23905 -               ah->eep_map = EEP_MAP_4KBITS;
23906                 ah->eep_ops = &eep_4k_ops;
23907         } else {
23908 -               ah->eep_map = EEP_MAP_DEFAULT;
23909                 ah->eep_ops = &eep_def_ops;
23910         }
23911  
23912 diff --git a/drivers/net/wireless/ath/ath9k/eeprom.h b/drivers/net/wireless/ath/ath9k/eeprom.h
23913 index 2f2993b..fb9c8c9 100644
23914 --- a/drivers/net/wireless/ath/ath9k/eeprom.h
23915 +++ b/drivers/net/wireless/ath/ath9k/eeprom.h
23916 @@ -19,6 +19,7 @@
23917  
23918  #include "../ath.h"
23919  #include <net/cfg80211.h>
23920 +#include "ar9003_eeprom.h"
23921  
23922  #define AH_USE_EEPROM   0x1
23923  
23924 @@ -93,7 +94,6 @@
23925   */
23926  #define AR9285_RDEXT_DEFAULT    0x1F
23927  
23928 -#define AR_EEPROM_MAC(i)       (0x1d+(i))
23929  #define ATH9K_POW_SM(_r, _s)   (((_r) & 0x3f) << (_s))
23930  #define FREQ2FBIN(x, y)                ((y) ? ((x) - 2300) : (((x) - 4800) / 5))
23931  #define ath9k_hw_use_flash(_ah)        (!(_ah->ah_flags & AH_USE_EEPROM))
23932 @@ -155,6 +155,7 @@
23933  #define AR5416_BCHAN_UNUSED             0xFF
23934  #define AR5416_MAX_PWR_RANGE_IN_HALF_DB 64
23935  #define AR5416_MAX_CHAINS               3
23936 +#define AR9300_MAX_CHAINS              3
23937  #define AR5416_PWR_TABLE_OFFSET_DB     -5
23938  
23939  /* Rx gain type values */
23940 @@ -249,16 +250,20 @@ enum eeprom_param {
23941         EEP_MINOR_REV,
23942         EEP_TX_MASK,
23943         EEP_RX_MASK,
23944 +       EEP_FSTCLK_5G,
23945         EEP_RXGAIN_TYPE,
23946 -       EEP_TXGAIN_TYPE,
23947         EEP_OL_PWRCTRL,
23948 +       EEP_TXGAIN_TYPE,
23949         EEP_RC_CHAIN_MASK,
23950         EEP_DAC_HPWR_5G,
23951         EEP_FRAC_N_5G,
23952         EEP_DEV_TYPE,
23953         EEP_TEMPSENSE_SLOPE,
23954         EEP_TEMPSENSE_SLOPE_PAL_ON,
23955 -       EEP_PWR_TABLE_OFFSET
23956 +       EEP_PWR_TABLE_OFFSET,
23957 +       EEP_DRIVE_STRENGTH,
23958 +       EEP_INTERNAL_REGULATOR,
23959 +       EEP_SWREG
23960  };
23961  
23962  enum ar5416_rates {
23963 @@ -656,13 +661,6 @@ struct ath9k_country_entry {
23964         u8 iso[3];
23965  };
23966  
23967 -enum ath9k_eep_map {
23968 -       EEP_MAP_DEFAULT = 0x0,
23969 -       EEP_MAP_4KBITS,
23970 -       EEP_MAP_AR9287,
23971 -       EEP_MAP_MAX
23972 -};
23973 -
23974  struct eeprom_ops {
23975         int (*check_eeprom)(struct ath_hw *hw);
23976         u32 (*get_eeprom)(struct ath_hw *hw, enum eeprom_param param);
23977 @@ -713,6 +711,8 @@ int ath9k_hw_eeprom_init(struct ath_hw *ah);
23978  
23979  extern const struct eeprom_ops eep_def_ops;
23980  extern const struct eeprom_ops eep_4k_ops;
23981 -extern const struct eeprom_ops eep_AR9287_ops;
23982 +extern const struct eeprom_ops eep_ar9287_ops;
23983 +extern const struct eeprom_ops eep_ar9287_ops;
23984 +extern const struct eeprom_ops eep_ar9300_ops;
23985  
23986  #endif /* EEPROM_H */
23987 diff --git a/drivers/net/wireless/ath/ath9k/eeprom_4k.c b/drivers/net/wireless/ath/ath9k/eeprom_4k.c
23988 index 0354fe5..2384a9f 100644
23989 --- a/drivers/net/wireless/ath/ath9k/eeprom_4k.c
23990 +++ b/drivers/net/wireless/ath/ath9k/eeprom_4k.c
23991 @@ -15,6 +15,7 @@
23992   */
23993  
23994  #include "hw.h"
23995 +#include "ar9002_phy.h"
23996  
23997  static int ath9k_hw_4k_get_eeprom_ver(struct ath_hw *ah)
23998  {
23999 @@ -182,11 +183,11 @@ static u32 ath9k_hw_4k_get_eeprom(struct ath_hw *ah,
24000         switch (param) {
24001         case EEP_NFTHRESH_2:
24002                 return pModal->noiseFloorThreshCh[0];
24003 -       case AR_EEPROM_MAC(0):
24004 +       case EEP_MAC_LSW:
24005                 return pBase->macAddr[0] << 8 | pBase->macAddr[1];
24006 -       case AR_EEPROM_MAC(1):
24007 +       case EEP_MAC_MID:
24008                 return pBase->macAddr[2] << 8 | pBase->macAddr[3];
24009 -       case AR_EEPROM_MAC(2):
24010 +       case EEP_MAC_MSW:
24011                 return pBase->macAddr[4] << 8 | pBase->macAddr[5];
24012         case EEP_REG_0:
24013                 return pBase->regDmn[0];
24014 diff --git a/drivers/net/wireless/ath/ath9k/eeprom_9287.c b/drivers/net/wireless/ath/ath9k/eeprom_9287.c
24015 index d8ca94c..b471db5 100644
24016 --- a/drivers/net/wireless/ath/ath9k/eeprom_9287.c
24017 +++ b/drivers/net/wireless/ath/ath9k/eeprom_9287.c
24018 @@ -15,6 +15,7 @@
24019   */
24020  
24021  #include "hw.h"
24022 +#include "ar9002_phy.h"
24023  
24024  static int ath9k_hw_AR9287_get_eeprom_ver(struct ath_hw *ah)
24025  {
24026 @@ -172,11 +173,11 @@ static u32 ath9k_hw_AR9287_get_eeprom(struct ath_hw *ah,
24027         switch (param) {
24028         case EEP_NFTHRESH_2:
24029                 return pModal->noiseFloorThreshCh[0];
24030 -       case AR_EEPROM_MAC(0):
24031 +       case EEP_MAC_LSW:
24032                 return pBase->macAddr[0] << 8 | pBase->macAddr[1];
24033 -       case AR_EEPROM_MAC(1):
24034 +       case EEP_MAC_MID:
24035                 return pBase->macAddr[2] << 8 | pBase->macAddr[3];
24036 -       case AR_EEPROM_MAC(2):
24037 +       case EEP_MAC_MSW:
24038                 return pBase->macAddr[4] << 8 | pBase->macAddr[5];
24039         case EEP_REG_0:
24040                 return pBase->regDmn[0];
24041 @@ -1169,7 +1170,7 @@ static u16 ath9k_hw_AR9287_get_spur_channel(struct ath_hw *ah,
24042  #undef EEP_MAP9287_SPURCHAN
24043  }
24044  
24045 -const struct eeprom_ops eep_AR9287_ops = {
24046 +const struct eeprom_ops eep_ar9287_ops = {
24047         .check_eeprom           = ath9k_hw_AR9287_check_eeprom,
24048         .get_eeprom             = ath9k_hw_AR9287_get_eeprom,
24049         .fill_eeprom            = ath9k_hw_AR9287_fill_eeprom,
24050 diff --git a/drivers/net/wireless/ath/ath9k/eeprom_def.c b/drivers/net/wireless/ath/ath9k/eeprom_def.c
24051 index 404a034..3d1b86b 100644
24052 --- a/drivers/net/wireless/ath/ath9k/eeprom_def.c
24053 +++ b/drivers/net/wireless/ath/ath9k/eeprom_def.c
24054 @@ -15,6 +15,7 @@
24055   */
24056  
24057  #include "hw.h"
24058 +#include "ar9002_phy.h"
24059  
24060  static void ath9k_get_txgain_index(struct ath_hw *ah,
24061                 struct ath9k_channel *chan,
24062 @@ -237,11 +238,11 @@ static u32 ath9k_hw_def_get_eeprom(struct ath_hw *ah,
24063                 return pModal[0].noiseFloorThreshCh[0];
24064         case EEP_NFTHRESH_2:
24065                 return pModal[1].noiseFloorThreshCh[0];
24066 -       case AR_EEPROM_MAC(0):
24067 +       case EEP_MAC_LSW:
24068                 return pBase->macAddr[0] << 8 | pBase->macAddr[1];
24069 -       case AR_EEPROM_MAC(1):
24070 +       case EEP_MAC_MID:
24071                 return pBase->macAddr[2] << 8 | pBase->macAddr[3];
24072 -       case AR_EEPROM_MAC(2):
24073 +       case EEP_MAC_MSW:
24074                 return pBase->macAddr[4] << 8 | pBase->macAddr[5];
24075         case EEP_REG_0:
24076                 return pBase->regDmn[0];
24077 diff --git a/drivers/net/wireless/ath/ath9k/hw-ops.h b/drivers/net/wireless/ath/ath9k/hw-ops.h
24078 new file mode 100644
24079 index 0000000..8463cb2
24080 --- /dev/null
24081 +++ b/drivers/net/wireless/ath/ath9k/hw-ops.h
24082 @@ -0,0 +1,284 @@
24083 +/*
24084 + * Copyright (c) 2010 Atheros Communications Inc.
24085 + *
24086 + * Permission to use, copy, modify, and/or distribute this software for any
24087 + * purpose with or without fee is hereby granted, provided that the above
24088 + * copyright notice and this permission notice appear in all copies.
24089 + *
24090 + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
24091 + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
24092 + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
24093 + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
24094 + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
24095 + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
24096 + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
24097 + */
24098 +
24099 +#ifndef ATH9K_HW_OPS_H
24100 +#define ATH9K_HW_OPS_H
24101 +
24102 +#include "hw.h"
24103 +
24104 +/* Hardware core and driver accessible callbacks */
24105 +
24106 +static inline void ath9k_hw_configpcipowersave(struct ath_hw *ah,
24107 +                                              int restore,
24108 +                                              int power_off)
24109 +{
24110 +       ath9k_hw_ops(ah)->config_pci_powersave(ah, restore, power_off);
24111 +}
24112 +
24113 +static inline void ath9k_hw_rxena(struct ath_hw *ah)
24114 +{
24115 +       ath9k_hw_ops(ah)->rx_enable(ah);
24116 +}
24117 +
24118 +static inline void ath9k_hw_set_desc_link(struct ath_hw *ah, void *ds,
24119 +                                         u32 link)
24120 +{
24121 +       ath9k_hw_ops(ah)->set_desc_link(ds, link);
24122 +}
24123 +
24124 +static inline void ath9k_hw_get_desc_link(struct ath_hw *ah, void *ds,
24125 +                                         u32 **link)
24126 +{
24127 +       ath9k_hw_ops(ah)->get_desc_link(ds, link);
24128 +}
24129 +static inline bool ath9k_hw_calibrate(struct ath_hw *ah,
24130 +                                     struct ath9k_channel *chan,
24131 +                                     u8 rxchainmask,
24132 +                                     bool longcal)
24133 +{
24134 +       return ath9k_hw_ops(ah)->calibrate(ah, chan, rxchainmask, longcal);
24135 +}
24136 +
24137 +static inline bool ath9k_hw_getisr(struct ath_hw *ah, enum ath9k_int *masked)
24138 +{
24139 +       return ath9k_hw_ops(ah)->get_isr(ah, masked);
24140 +}
24141 +
24142 +static inline void ath9k_hw_filltxdesc(struct ath_hw *ah, void *ds, u32 seglen,
24143 +                                 bool is_firstseg, bool is_lastseg,
24144 +                                 const void *ds0, dma_addr_t buf_addr,
24145 +                                 unsigned int qcu)
24146 +{
24147 +       ath9k_hw_ops(ah)->fill_txdesc(ah, ds, seglen, is_firstseg, is_lastseg,
24148 +                                     ds0, buf_addr, qcu);
24149 +}
24150 +
24151 +static inline void ath9k_hw_cleartxdesc(struct ath_hw *ah, void *ds)
24152 +{
24153 +       ath9k_hw_ops(ah)->clear_txdesc(ah, ds);
24154 +}
24155 +
24156 +static inline int ath9k_hw_txprocdesc(struct ath_hw *ah, void *ds,
24157 +                                     struct ath_tx_status *ts)
24158 +{
24159 +       return ath9k_hw_ops(ah)->proc_txdesc(ah, ds, ts);
24160 +}
24161 +
24162 +static inline void ath9k_hw_set11n_txdesc(struct ath_hw *ah, void *ds,
24163 +                                         u32 pktLen, enum ath9k_pkt_type type,
24164 +                                         u32 txPower, u32 keyIx,
24165 +                                         enum ath9k_key_type keyType,
24166 +                                         u32 flags)
24167 +{
24168 +       ath9k_hw_ops(ah)->set11n_txdesc(ah, ds, pktLen, type, txPower, keyIx,
24169 +                                     keyType, flags);
24170 +}
24171 +
24172 +static inline void ath9k_hw_set11n_ratescenario(struct ath_hw *ah, void *ds,
24173 +                                       void *lastds,
24174 +                                       u32 durUpdateEn, u32 rtsctsRate,
24175 +                                       u32 rtsctsDuration,
24176 +                                       struct ath9k_11n_rate_series series[],
24177 +                                       u32 nseries, u32 flags)
24178 +{
24179 +       ath9k_hw_ops(ah)->set11n_ratescenario(ah, ds, lastds, durUpdateEn,
24180 +                                           rtsctsRate, rtsctsDuration, series,
24181 +                                           nseries, flags);
24182 +}
24183 +
24184 +static inline void ath9k_hw_set11n_aggr_first(struct ath_hw *ah, void *ds,
24185 +                                       u32 aggrLen)
24186 +{
24187 +       ath9k_hw_ops(ah)->set11n_aggr_first(ah, ds, aggrLen);
24188 +}
24189 +
24190 +static inline void ath9k_hw_set11n_aggr_middle(struct ath_hw *ah, void *ds,
24191 +                                              u32 numDelims)
24192 +{
24193 +       ath9k_hw_ops(ah)->set11n_aggr_middle(ah, ds, numDelims);
24194 +}
24195 +
24196 +static inline void ath9k_hw_set11n_aggr_last(struct ath_hw *ah, void *ds)
24197 +{
24198 +       ath9k_hw_ops(ah)->set11n_aggr_last(ah, ds);
24199 +}
24200 +
24201 +static inline void ath9k_hw_clr11n_aggr(struct ath_hw *ah, void *ds)
24202 +{
24203 +       ath9k_hw_ops(ah)->clr11n_aggr(ah, ds);
24204 +}
24205 +
24206 +static inline void ath9k_hw_set11n_burstduration(struct ath_hw *ah, void *ds,
24207 +                                                u32 burstDuration)
24208 +{
24209 +       ath9k_hw_ops(ah)->set11n_burstduration(ah, ds, burstDuration);
24210 +}
24211 +
24212 +static inline void ath9k_hw_set11n_virtualmorefrag(struct ath_hw *ah, void *ds,
24213 +                                                  u32 vmf)
24214 +{
24215 +       ath9k_hw_ops(ah)->set11n_virtualmorefrag(ah, ds, vmf);
24216 +}
24217 +
24218 +/* Private hardware call ops */
24219 +
24220 +/* PHY ops */
24221 +
24222 +static inline int ath9k_hw_rf_set_freq(struct ath_hw *ah,
24223 +                                      struct ath9k_channel *chan)
24224 +{
24225 +       return ath9k_hw_private_ops(ah)->rf_set_freq(ah, chan);
24226 +}
24227 +
24228 +static inline void ath9k_hw_spur_mitigate_freq(struct ath_hw *ah,
24229 +                                              struct ath9k_channel *chan)
24230 +{
24231 +       ath9k_hw_private_ops(ah)->spur_mitigate_freq(ah, chan);
24232 +}
24233 +
24234 +static inline int ath9k_hw_rf_alloc_ext_banks(struct ath_hw *ah)
24235 +{
24236 +       if (!ath9k_hw_private_ops(ah)->rf_alloc_ext_banks)
24237 +               return 0;
24238 +
24239 +       return ath9k_hw_private_ops(ah)->rf_alloc_ext_banks(ah);
24240 +}
24241 +
24242 +static inline void ath9k_hw_rf_free_ext_banks(struct ath_hw *ah)
24243 +{
24244 +       if (!ath9k_hw_private_ops(ah)->rf_free_ext_banks)
24245 +               return;
24246 +
24247 +       ath9k_hw_private_ops(ah)->rf_free_ext_banks(ah);
24248 +}
24249 +
24250 +static inline bool ath9k_hw_set_rf_regs(struct ath_hw *ah,
24251 +                                       struct ath9k_channel *chan,
24252 +                                       u16 modesIndex)
24253 +{
24254 +       if (!ath9k_hw_private_ops(ah)->set_rf_regs)
24255 +               return true;
24256 +
24257 +       return ath9k_hw_private_ops(ah)->set_rf_regs(ah, chan, modesIndex);
24258 +}
24259 +
24260 +static inline void ath9k_hw_init_bb(struct ath_hw *ah,
24261 +                                   struct ath9k_channel *chan)
24262 +{
24263 +       return ath9k_hw_private_ops(ah)->init_bb(ah, chan);
24264 +}
24265 +
24266 +static inline void ath9k_hw_set_channel_regs(struct ath_hw *ah,
24267 +                                            struct ath9k_channel *chan)
24268 +{
24269 +       return ath9k_hw_private_ops(ah)->set_channel_regs(ah, chan);
24270 +}
24271 +
24272 +static inline int ath9k_hw_process_ini(struct ath_hw *ah,
24273 +                                       struct ath9k_channel *chan)
24274 +{
24275 +       return ath9k_hw_private_ops(ah)->process_ini(ah, chan);
24276 +}
24277 +
24278 +static inline void ath9k_olc_init(struct ath_hw *ah)
24279 +{
24280 +       if (!ath9k_hw_private_ops(ah)->olc_init)
24281 +               return;
24282 +
24283 +       return ath9k_hw_private_ops(ah)->olc_init(ah);
24284 +}
24285 +
24286 +static inline void ath9k_hw_set_rfmode(struct ath_hw *ah, struct ath9k_channel *chan)
24287 +{
24288 +       return ath9k_hw_private_ops(ah)->set_rfmode(ah, chan);
24289 +}
24290 +
24291 +static inline void ath9k_hw_mark_phy_inactive(struct ath_hw *ah)
24292 +{
24293 +       return ath9k_hw_private_ops(ah)->mark_phy_inactive(ah);
24294 +}
24295 +
24296 +static inline void ath9k_hw_set_delta_slope(struct ath_hw *ah,
24297 +                                           struct ath9k_channel *chan)
24298 +{
24299 +       return ath9k_hw_private_ops(ah)->set_delta_slope(ah, chan);
24300 +}
24301 +
24302 +static inline bool ath9k_hw_rfbus_req(struct ath_hw *ah)
24303 +{
24304 +       return ath9k_hw_private_ops(ah)->rfbus_req(ah);
24305 +}
24306 +
24307 +static inline void ath9k_hw_rfbus_done(struct ath_hw *ah)
24308 +{
24309 +       return ath9k_hw_private_ops(ah)->rfbus_done(ah);
24310 +}
24311 +
24312 +static inline void ath9k_enable_rfkill(struct ath_hw *ah)
24313 +{
24314 +       return ath9k_hw_private_ops(ah)->enable_rfkill(ah);
24315 +}
24316 +
24317 +static inline void ath9k_hw_restore_chainmask(struct ath_hw *ah)
24318 +{
24319 +       if (!ath9k_hw_private_ops(ah)->restore_chainmask)
24320 +               return;
24321 +
24322 +       return ath9k_hw_private_ops(ah)->restore_chainmask(ah);
24323 +}
24324 +
24325 +static inline void ath9k_hw_set_diversity(struct ath_hw *ah, bool value)
24326 +{
24327 +       return ath9k_hw_private_ops(ah)->set_diversity(ah, value);
24328 +}
24329 +
24330 +static inline bool ath9k_hw_ani_control(struct ath_hw *ah,
24331 +                                       enum ath9k_ani_cmd cmd, int param)
24332 +{
24333 +       return ath9k_hw_private_ops(ah)->ani_control(ah, cmd, param);
24334 +}
24335 +
24336 +static inline void ath9k_hw_do_getnf(struct ath_hw *ah,
24337 +                                    int16_t nfarray[NUM_NF_READINGS])
24338 +{
24339 +       ath9k_hw_private_ops(ah)->do_getnf(ah, nfarray);
24340 +}
24341 +
24342 +static inline void ath9k_hw_loadnf(struct ath_hw *ah,
24343 +                                  struct ath9k_channel *chan)
24344 +{
24345 +       ath9k_hw_private_ops(ah)->loadnf(ah, chan);
24346 +}
24347 +
24348 +static inline bool ath9k_hw_init_cal(struct ath_hw *ah,
24349 +                                    struct ath9k_channel *chan)
24350 +{
24351 +       return ath9k_hw_private_ops(ah)->init_cal(ah, chan);
24352 +}
24353 +
24354 +static inline void ath9k_hw_setup_calibration(struct ath_hw *ah,
24355 +                                             struct ath9k_cal_list *currCal)
24356 +{
24357 +       ath9k_hw_private_ops(ah)->setup_calibration(ah, currCal);
24358 +}
24359 +
24360 +static inline bool ath9k_hw_iscal_supported(struct ath_hw *ah,
24361 +                                           enum ath9k_cal_types calType)
24362 +{
24363 +       return ath9k_hw_private_ops(ah)->iscal_supported(ah, calType);
24364 +}
24365 +
24366 +#endif /* ATH9K_HW_OPS_H */
24367 diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
24368 index 3b9f4c1..11ccb54 100644
24369 --- a/drivers/net/wireless/ath/ath9k/hw.c
24370 +++ b/drivers/net/wireless/ath/ath9k/hw.c
24371 @@ -1,5 +1,5 @@
24372  /*
24373 - * Copyright (c) 2008-2009 Atheros Communications Inc.
24374 + * Copyright (c) 2008-2010 Atheros Communications Inc.
24375   *
24376   * Permission to use, copy, modify, and/or distribute this software for any
24377   * purpose with or without fee is hereby granted, provided that the above
24378 @@ -14,19 +14,17 @@
24379   * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
24380   */
24381  
24382 -#include <linux/io.h>
24383  #include <asm/unaligned.h>
24384  
24385  #include "hw.h"
24386 +#include "hw-ops.h"
24387  #include "rc.h"
24388 -#include "initvals.h"
24389  
24390  #define ATH9K_CLOCK_RATE_CCK           22
24391  #define ATH9K_CLOCK_RATE_5GHZ_OFDM     40
24392  #define ATH9K_CLOCK_RATE_2GHZ_OFDM     44
24393  
24394  static bool ath9k_hw_set_reset_reg(struct ath_hw *ah, u32 type);
24395 -static void ath9k_hw_set_regs(struct ath_hw *ah, struct ath9k_channel *chan);
24396  
24397  MODULE_AUTHOR("Atheros Communications");
24398  MODULE_DESCRIPTION("Support for Atheros 802.11n wireless LAN cards.");
24399 @@ -45,6 +43,37 @@ static void __exit ath9k_exit(void)
24400  }
24401  module_exit(ath9k_exit);
24402  
24403 +/* Private hardware callbacks */
24404 +
24405 +static void ath9k_hw_init_cal_settings(struct ath_hw *ah)
24406 +{
24407 +       ath9k_hw_private_ops(ah)->init_cal_settings(ah);
24408 +}
24409 +
24410 +static void ath9k_hw_init_mode_regs(struct ath_hw *ah)
24411 +{
24412 +       ath9k_hw_private_ops(ah)->init_mode_regs(ah);
24413 +}
24414 +
24415 +static bool ath9k_hw_macversion_supported(struct ath_hw *ah)
24416 +{
24417 +       return ath9k_hw_private_ops(ah)->macversion_supported(ah->hw_version.macVersion);
24418 +}
24419 +
24420 +static u32 ath9k_hw_compute_pll_control(struct ath_hw *ah,
24421 +                                       struct ath9k_channel *chan)
24422 +{
24423 +       return ath9k_hw_private_ops(ah)->compute_pll_control(ah, chan);
24424 +}
24425 +
24426 +static void ath9k_hw_init_mode_gain_regs(struct ath_hw *ah)
24427 +{
24428 +       if (!ath9k_hw_private_ops(ah)->init_mode_gain_regs)
24429 +               return;
24430 +
24431 +       ath9k_hw_private_ops(ah)->init_mode_gain_regs(ah);
24432 +}
24433 +
24434  /********************/
24435  /* Helper Functions */
24436  /********************/
24437 @@ -232,21 +261,6 @@ static void ath9k_hw_read_revisions(struct ath_hw *ah)
24438         }
24439  }
24440  
24441 -static int ath9k_hw_get_radiorev(struct ath_hw *ah)
24442 -{
24443 -       u32 val;
24444 -       int i;
24445 -
24446 -       REG_WRITE(ah, AR_PHY(0x36), 0x00007058);
24447 -
24448 -       for (i = 0; i < 8; i++)
24449 -               REG_WRITE(ah, AR_PHY(0x20), 0x00010000);
24450 -       val = (REG_READ(ah, AR_PHY(256)) >> 24) & 0xff;
24451 -       val = ((val & 0xf0) >> 4) | ((val & 0x0f) << 4);
24452 -
24453 -       return ath9k_hw_reverse_bits(val, 8);
24454 -}
24455 -
24456  /************************************/
24457  /* HW Attach, Detach, Init Routines */
24458  /************************************/
24459 @@ -269,18 +283,25 @@ static void ath9k_hw_disablepcie(struct ath_hw *ah)
24460         REG_WRITE(ah, AR_PCIE_SERDES2, 0x00000000);
24461  }
24462  
24463 +/* This should work for all families including legacy */
24464  static bool ath9k_hw_chip_test(struct ath_hw *ah)
24465  {
24466         struct ath_common *common = ath9k_hw_common(ah);
24467 -       u32 regAddr[2] = { AR_STA_ID0, AR_PHY_BASE + (8 << 2) };
24468 +       u32 regAddr[2] = { AR_STA_ID0 };
24469         u32 regHold[2];
24470         u32 patternData[4] = { 0x55555555,
24471                                0xaaaaaaaa,
24472                                0x66666666,
24473                                0x99999999 };
24474 -       int i, j;
24475 +       int i, j, loop_max;
24476 +
24477 +       if (!AR_SREV_9300_20_OR_LATER(ah)) {
24478 +               loop_max = 2;
24479 +               regAddr[1] = AR_PHY_BASE + (8 << 2);
24480 +       } else
24481 +               loop_max = 1;
24482  
24483 -       for (i = 0; i < 2; i++) {
24484 +       for (i = 0; i < loop_max; i++) {
24485                 u32 addr = regAddr[i];
24486                 u32 wrData, rdData;
24487  
24488 @@ -349,6 +370,9 @@ static void ath9k_hw_init_config(struct ath_hw *ah)
24489  
24490         ah->config.rx_intr_mitigation = true;
24491  
24492 +       if (AR_SREV_9300_20_OR_LATER(ah))
24493 +               ah->config.tx_intr_mitigation = true;
24494 +
24495         /*
24496          * We need this for PCI devices only (Cardbus, PCI, miniPCI)
24497          * _and_ if on non-uniprocessor systems (Multiprocessor/HT).
24498 @@ -368,7 +392,6 @@ static void ath9k_hw_init_config(struct ath_hw *ah)
24499         if (num_possible_cpus() > 1)
24500                 ah->config.serialize_regmode = SER_REG_MODE_AUTO;
24501  }
24502 -EXPORT_SYMBOL(ath9k_hw_init);
24503  
24504  static void ath9k_hw_init_defaults(struct ath_hw *ah)
24505  {
24506 @@ -396,44 +419,17 @@ static void ath9k_hw_init_defaults(struct ath_hw *ah)
24507         ah->power_mode = ATH9K_PM_UNDEFINED;
24508  }
24509  
24510 -static int ath9k_hw_rf_claim(struct ath_hw *ah)
24511 -{
24512 -       u32 val;
24513 -
24514 -       REG_WRITE(ah, AR_PHY(0), 0x00000007);
24515 -
24516 -       val = ath9k_hw_get_radiorev(ah);
24517 -       switch (val & AR_RADIO_SREV_MAJOR) {
24518 -       case 0:
24519 -               val = AR_RAD5133_SREV_MAJOR;
24520 -               break;
24521 -       case AR_RAD5133_SREV_MAJOR:
24522 -       case AR_RAD5122_SREV_MAJOR:
24523 -       case AR_RAD2133_SREV_MAJOR:
24524 -       case AR_RAD2122_SREV_MAJOR:
24525 -               break;
24526 -       default:
24527 -               ath_print(ath9k_hw_common(ah), ATH_DBG_FATAL,
24528 -                         "Radio Chip Rev 0x%02X not supported\n",
24529 -                         val & AR_RADIO_SREV_MAJOR);
24530 -               return -EOPNOTSUPP;
24531 -       }
24532 -
24533 -       ah->hw_version.analog5GhzRev = val;
24534 -
24535 -       return 0;
24536 -}
24537 -
24538  static int ath9k_hw_init_macaddr(struct ath_hw *ah)
24539  {
24540         struct ath_common *common = ath9k_hw_common(ah);
24541         u32 sum;
24542         int i;
24543         u16 eeval;
24544 +       u32 EEP_MAC[] = { EEP_MAC_LSW, EEP_MAC_MID, EEP_MAC_MSW };
24545  
24546         sum = 0;
24547         for (i = 0; i < 3; i++) {
24548 -               eeval = ah->eep_ops->get_eeprom(ah, AR_EEPROM_MAC(i));
24549 +               eeval = ah->eep_ops->get_eeprom(ah, EEP_MAC[i]);
24550                 sum += eeval;
24551                 common->macaddr[2 * i] = eeval >> 8;
24552                 common->macaddr[2 * i + 1] = eeval & 0xff;
24553 @@ -444,54 +440,6 @@ static int ath9k_hw_init_macaddr(struct ath_hw *ah)
24554         return 0;
24555  }
24556  
24557 -static void ath9k_hw_init_rxgain_ini(struct ath_hw *ah)
24558 -{
24559 -       u32 rxgain_type;
24560 -
24561 -       if (ah->eep_ops->get_eeprom(ah, EEP_MINOR_REV) >= AR5416_EEP_MINOR_VER_17) {
24562 -               rxgain_type = ah->eep_ops->get_eeprom(ah, EEP_RXGAIN_TYPE);
24563 -
24564 -               if (rxgain_type == AR5416_EEP_RXGAIN_13DB_BACKOFF)
24565 -                       INIT_INI_ARRAY(&ah->iniModesRxGain,
24566 -                       ar9280Modes_backoff_13db_rxgain_9280_2,
24567 -                       ARRAY_SIZE(ar9280Modes_backoff_13db_rxgain_9280_2), 6);
24568 -               else if (rxgain_type == AR5416_EEP_RXGAIN_23DB_BACKOFF)
24569 -                       INIT_INI_ARRAY(&ah->iniModesRxGain,
24570 -                       ar9280Modes_backoff_23db_rxgain_9280_2,
24571 -                       ARRAY_SIZE(ar9280Modes_backoff_23db_rxgain_9280_2), 6);
24572 -               else
24573 -                       INIT_INI_ARRAY(&ah->iniModesRxGain,
24574 -                       ar9280Modes_original_rxgain_9280_2,
24575 -                       ARRAY_SIZE(ar9280Modes_original_rxgain_9280_2), 6);
24576 -       } else {
24577 -               INIT_INI_ARRAY(&ah->iniModesRxGain,
24578 -                       ar9280Modes_original_rxgain_9280_2,
24579 -                       ARRAY_SIZE(ar9280Modes_original_rxgain_9280_2), 6);
24580 -       }
24581 -}
24582 -
24583 -static void ath9k_hw_init_txgain_ini(struct ath_hw *ah)
24584 -{
24585 -       u32 txgain_type;
24586 -
24587 -       if (ah->eep_ops->get_eeprom(ah, EEP_MINOR_REV) >= AR5416_EEP_MINOR_VER_19) {
24588 -               txgain_type = ah->eep_ops->get_eeprom(ah, EEP_TXGAIN_TYPE);
24589 -
24590 -               if (txgain_type == AR5416_EEP_TXGAIN_HIGH_POWER)
24591 -                       INIT_INI_ARRAY(&ah->iniModesTxGain,
24592 -                       ar9280Modes_high_power_tx_gain_9280_2,
24593 -                       ARRAY_SIZE(ar9280Modes_high_power_tx_gain_9280_2), 6);
24594 -               else
24595 -                       INIT_INI_ARRAY(&ah->iniModesTxGain,
24596 -                       ar9280Modes_original_tx_gain_9280_2,
24597 -                       ARRAY_SIZE(ar9280Modes_original_tx_gain_9280_2), 6);
24598 -       } else {
24599 -               INIT_INI_ARRAY(&ah->iniModesTxGain,
24600 -               ar9280Modes_original_tx_gain_9280_2,
24601 -               ARRAY_SIZE(ar9280Modes_original_tx_gain_9280_2), 6);
24602 -       }
24603 -}
24604 -
24605  static int ath9k_hw_post_init(struct ath_hw *ah)
24606  {
24607         int ecode;
24608 @@ -501,9 +449,11 @@ static int ath9k_hw_post_init(struct ath_hw *ah)
24609                         return -ENODEV;
24610         }
24611  
24612 -       ecode = ath9k_hw_rf_claim(ah);
24613 -       if (ecode != 0)
24614 -               return ecode;
24615 +       if (!AR_SREV_9300_20_OR_LATER(ah)) {
24616 +               ecode = ar9002_hw_rf_claim(ah);
24617 +               if (ecode != 0)
24618 +                       return ecode;
24619 +       }
24620  
24621         ecode = ath9k_hw_eeprom_init(ah);
24622         if (ecode != 0)
24623 @@ -514,14 +464,12 @@ static int ath9k_hw_post_init(struct ath_hw *ah)
24624                   ah->eep_ops->get_eeprom_ver(ah),
24625                   ah->eep_ops->get_eeprom_rev(ah));
24626  
24627 -        if (!AR_SREV_9280_10_OR_LATER(ah)) {
24628 -               ecode = ath9k_hw_rf_alloc_ext_banks(ah);
24629 -               if (ecode) {
24630 -                       ath_print(ath9k_hw_common(ah), ATH_DBG_FATAL,
24631 -                                 "Failed allocating banks for "
24632 -                                 "external radio\n");
24633 -                       return ecode;
24634 -               }
24635 +       ecode = ath9k_hw_rf_alloc_ext_banks(ah);
24636 +       if (ecode) {
24637 +               ath_print(ath9k_hw_common(ah), ATH_DBG_FATAL,
24638 +                         "Failed allocating banks for "
24639 +                         "external radio\n");
24640 +               return ecode;
24641         }
24642  
24643         if (!AR_SREV_9100(ah)) {
24644 @@ -532,351 +480,31 @@ static int ath9k_hw_post_init(struct ath_hw *ah)
24645         return 0;
24646  }
24647  
24648 -static bool ath9k_hw_devid_supported(u16 devid)
24649 -{
24650 -       switch (devid) {
24651 -       case AR5416_DEVID_PCI:
24652 -       case AR5416_DEVID_PCIE:
24653 -       case AR5416_AR9100_DEVID:
24654 -       case AR9160_DEVID_PCI:
24655 -       case AR9280_DEVID_PCI:
24656 -       case AR9280_DEVID_PCIE:
24657 -       case AR9285_DEVID_PCIE:
24658 -       case AR5416_DEVID_AR9287_PCI:
24659 -       case AR5416_DEVID_AR9287_PCIE:
24660 -       case AR2427_DEVID_PCIE:
24661 -               return true;
24662 -       default:
24663 -               break;
24664 -       }
24665 -       return false;
24666 -}
24667 -
24668 -static bool ath9k_hw_macversion_supported(u32 macversion)
24669 -{
24670 -       switch (macversion) {
24671 -       case AR_SREV_VERSION_5416_PCI:
24672 -       case AR_SREV_VERSION_5416_PCIE:
24673 -       case AR_SREV_VERSION_9160:
24674 -       case AR_SREV_VERSION_9100:
24675 -       case AR_SREV_VERSION_9280:
24676 -       case AR_SREV_VERSION_9285:
24677 -       case AR_SREV_VERSION_9287:
24678 -       case AR_SREV_VERSION_9271:
24679 -               return true;
24680 -       default:
24681 -               break;
24682 -       }
24683 -       return false;
24684 -}
24685 -
24686 -static void ath9k_hw_init_cal_settings(struct ath_hw *ah)
24687 -{
24688 -       if (AR_SREV_9160_10_OR_LATER(ah)) {
24689 -               if (AR_SREV_9280_10_OR_LATER(ah)) {
24690 -                       ah->iq_caldata.calData = &iq_cal_single_sample;
24691 -                       ah->adcgain_caldata.calData =
24692 -                               &adc_gain_cal_single_sample;
24693 -                       ah->adcdc_caldata.calData =
24694 -                               &adc_dc_cal_single_sample;
24695 -                       ah->adcdc_calinitdata.calData =
24696 -                               &adc_init_dc_cal;
24697 -               } else {
24698 -                       ah->iq_caldata.calData = &iq_cal_multi_sample;
24699 -                       ah->adcgain_caldata.calData =
24700 -                               &adc_gain_cal_multi_sample;
24701 -                       ah->adcdc_caldata.calData =
24702 -                               &adc_dc_cal_multi_sample;
24703 -                       ah->adcdc_calinitdata.calData =
24704 -                               &adc_init_dc_cal;
24705 -               }
24706 -               ah->supp_cals = ADC_GAIN_CAL | ADC_DC_CAL | IQ_MISMATCH_CAL;
24707 -       }
24708 -}
24709 -
24710 -static void ath9k_hw_init_mode_regs(struct ath_hw *ah)
24711 -{
24712 -       if (AR_SREV_9271(ah)) {
24713 -               INIT_INI_ARRAY(&ah->iniModes, ar9271Modes_9271,
24714 -                              ARRAY_SIZE(ar9271Modes_9271), 6);
24715 -               INIT_INI_ARRAY(&ah->iniCommon, ar9271Common_9271,
24716 -                              ARRAY_SIZE(ar9271Common_9271), 2);
24717 -               INIT_INI_ARRAY(&ah->iniCommon_normal_cck_fir_coeff_9271,
24718 -                              ar9271Common_normal_cck_fir_coeff_9271,
24719 -                              ARRAY_SIZE(ar9271Common_normal_cck_fir_coeff_9271), 2);
24720 -               INIT_INI_ARRAY(&ah->iniCommon_japan_2484_cck_fir_coeff_9271,
24721 -                              ar9271Common_japan_2484_cck_fir_coeff_9271,
24722 -                              ARRAY_SIZE(ar9271Common_japan_2484_cck_fir_coeff_9271), 2);
24723 -               INIT_INI_ARRAY(&ah->iniModes_9271_1_0_only,
24724 -                              ar9271Modes_9271_1_0_only,
24725 -                              ARRAY_SIZE(ar9271Modes_9271_1_0_only), 6);
24726 -               INIT_INI_ARRAY(&ah->iniModes_9271_ANI_reg, ar9271Modes_9271_ANI_reg,
24727 -                              ARRAY_SIZE(ar9271Modes_9271_ANI_reg), 6);
24728 -               INIT_INI_ARRAY(&ah->iniModes_high_power_tx_gain_9271,
24729 -                              ar9271Modes_high_power_tx_gain_9271,
24730 -                              ARRAY_SIZE(ar9271Modes_high_power_tx_gain_9271), 6);
24731 -               INIT_INI_ARRAY(&ah->iniModes_normal_power_tx_gain_9271,
24732 -                              ar9271Modes_normal_power_tx_gain_9271,
24733 -                              ARRAY_SIZE(ar9271Modes_normal_power_tx_gain_9271), 6);
24734 -               return;
24735 -       }
24736 -
24737 -       if (AR_SREV_9287_11_OR_LATER(ah)) {
24738 -               INIT_INI_ARRAY(&ah->iniModes, ar9287Modes_9287_1_1,
24739 -                               ARRAY_SIZE(ar9287Modes_9287_1_1), 6);
24740 -               INIT_INI_ARRAY(&ah->iniCommon, ar9287Common_9287_1_1,
24741 -                               ARRAY_SIZE(ar9287Common_9287_1_1), 2);
24742 -               if (ah->config.pcie_clock_req)
24743 -                       INIT_INI_ARRAY(&ah->iniPcieSerdes,
24744 -                       ar9287PciePhy_clkreq_off_L1_9287_1_1,
24745 -                       ARRAY_SIZE(ar9287PciePhy_clkreq_off_L1_9287_1_1), 2);
24746 -               else
24747 -                       INIT_INI_ARRAY(&ah->iniPcieSerdes,
24748 -                       ar9287PciePhy_clkreq_always_on_L1_9287_1_1,
24749 -                       ARRAY_SIZE(ar9287PciePhy_clkreq_always_on_L1_9287_1_1),
24750 -                                       2);
24751 -       } else if (AR_SREV_9287_10_OR_LATER(ah)) {
24752 -               INIT_INI_ARRAY(&ah->iniModes, ar9287Modes_9287_1_0,
24753 -                               ARRAY_SIZE(ar9287Modes_9287_1_0), 6);
24754 -               INIT_INI_ARRAY(&ah->iniCommon, ar9287Common_9287_1_0,
24755 -                               ARRAY_SIZE(ar9287Common_9287_1_0), 2);
24756 -
24757 -               if (ah->config.pcie_clock_req)
24758 -                       INIT_INI_ARRAY(&ah->iniPcieSerdes,
24759 -                       ar9287PciePhy_clkreq_off_L1_9287_1_0,
24760 -                       ARRAY_SIZE(ar9287PciePhy_clkreq_off_L1_9287_1_0), 2);
24761 -               else
24762 -                       INIT_INI_ARRAY(&ah->iniPcieSerdes,
24763 -                       ar9287PciePhy_clkreq_always_on_L1_9287_1_0,
24764 -                       ARRAY_SIZE(ar9287PciePhy_clkreq_always_on_L1_9287_1_0),
24765 -                                 2);
24766 -       } else if (AR_SREV_9285_12_OR_LATER(ah)) {
24767 -
24768 -
24769 -               INIT_INI_ARRAY(&ah->iniModes, ar9285Modes_9285_1_2,
24770 -                              ARRAY_SIZE(ar9285Modes_9285_1_2), 6);
24771 -               INIT_INI_ARRAY(&ah->iniCommon, ar9285Common_9285_1_2,
24772 -                              ARRAY_SIZE(ar9285Common_9285_1_2), 2);
24773 -
24774 -               if (ah->config.pcie_clock_req) {
24775 -                       INIT_INI_ARRAY(&ah->iniPcieSerdes,
24776 -                       ar9285PciePhy_clkreq_off_L1_9285_1_2,
24777 -                       ARRAY_SIZE(ar9285PciePhy_clkreq_off_L1_9285_1_2), 2);
24778 -               } else {
24779 -                       INIT_INI_ARRAY(&ah->iniPcieSerdes,
24780 -                       ar9285PciePhy_clkreq_always_on_L1_9285_1_2,
24781 -                       ARRAY_SIZE(ar9285PciePhy_clkreq_always_on_L1_9285_1_2),
24782 -                                 2);
24783 -               }
24784 -       } else if (AR_SREV_9285_10_OR_LATER(ah)) {
24785 -               INIT_INI_ARRAY(&ah->iniModes, ar9285Modes_9285,
24786 -                              ARRAY_SIZE(ar9285Modes_9285), 6);
24787 -               INIT_INI_ARRAY(&ah->iniCommon, ar9285Common_9285,
24788 -                              ARRAY_SIZE(ar9285Common_9285), 2);
24789 -
24790 -               if (ah->config.pcie_clock_req) {
24791 -                       INIT_INI_ARRAY(&ah->iniPcieSerdes,
24792 -                       ar9285PciePhy_clkreq_off_L1_9285,
24793 -                       ARRAY_SIZE(ar9285PciePhy_clkreq_off_L1_9285), 2);
24794 -               } else {
24795 -                       INIT_INI_ARRAY(&ah->iniPcieSerdes,
24796 -                       ar9285PciePhy_clkreq_always_on_L1_9285,
24797 -                       ARRAY_SIZE(ar9285PciePhy_clkreq_always_on_L1_9285), 2);
24798 -               }
24799 -       } else if (AR_SREV_9280_20_OR_LATER(ah)) {
24800 -               INIT_INI_ARRAY(&ah->iniModes, ar9280Modes_9280_2,
24801 -                              ARRAY_SIZE(ar9280Modes_9280_2), 6);
24802 -               INIT_INI_ARRAY(&ah->iniCommon, ar9280Common_9280_2,
24803 -                              ARRAY_SIZE(ar9280Common_9280_2), 2);
24804 -
24805 -               if (ah->config.pcie_clock_req) {
24806 -                       INIT_INI_ARRAY(&ah->iniPcieSerdes,
24807 -                              ar9280PciePhy_clkreq_off_L1_9280,
24808 -                              ARRAY_SIZE(ar9280PciePhy_clkreq_off_L1_9280),2);
24809 -               } else {
24810 -                       INIT_INI_ARRAY(&ah->iniPcieSerdes,
24811 -                              ar9280PciePhy_clkreq_always_on_L1_9280,
24812 -                              ARRAY_SIZE(ar9280PciePhy_clkreq_always_on_L1_9280), 2);
24813 -               }
24814 -               INIT_INI_ARRAY(&ah->iniModesAdditional,
24815 -                              ar9280Modes_fast_clock_9280_2,
24816 -                              ARRAY_SIZE(ar9280Modes_fast_clock_9280_2), 3);
24817 -       } else if (AR_SREV_9280_10_OR_LATER(ah)) {
24818 -               INIT_INI_ARRAY(&ah->iniModes, ar9280Modes_9280,
24819 -                              ARRAY_SIZE(ar9280Modes_9280), 6);
24820 -               INIT_INI_ARRAY(&ah->iniCommon, ar9280Common_9280,
24821 -                              ARRAY_SIZE(ar9280Common_9280), 2);
24822 -       } else if (AR_SREV_9160_10_OR_LATER(ah)) {
24823 -               INIT_INI_ARRAY(&ah->iniModes, ar5416Modes_9160,
24824 -                              ARRAY_SIZE(ar5416Modes_9160), 6);
24825 -               INIT_INI_ARRAY(&ah->iniCommon, ar5416Common_9160,
24826 -                              ARRAY_SIZE(ar5416Common_9160), 2);
24827 -               INIT_INI_ARRAY(&ah->iniBank0, ar5416Bank0_9160,
24828 -                              ARRAY_SIZE(ar5416Bank0_9160), 2);
24829 -               INIT_INI_ARRAY(&ah->iniBB_RfGain, ar5416BB_RfGain_9160,
24830 -                              ARRAY_SIZE(ar5416BB_RfGain_9160), 3);
24831 -               INIT_INI_ARRAY(&ah->iniBank1, ar5416Bank1_9160,
24832 -                              ARRAY_SIZE(ar5416Bank1_9160), 2);
24833 -               INIT_INI_ARRAY(&ah->iniBank2, ar5416Bank2_9160,
24834 -                              ARRAY_SIZE(ar5416Bank2_9160), 2);
24835 -               INIT_INI_ARRAY(&ah->iniBank3, ar5416Bank3_9160,
24836 -                              ARRAY_SIZE(ar5416Bank3_9160), 3);
24837 -               INIT_INI_ARRAY(&ah->iniBank6, ar5416Bank6_9160,
24838 -                              ARRAY_SIZE(ar5416Bank6_9160), 3);
24839 -               INIT_INI_ARRAY(&ah->iniBank6TPC, ar5416Bank6TPC_9160,
24840 -                              ARRAY_SIZE(ar5416Bank6TPC_9160), 3);
24841 -               INIT_INI_ARRAY(&ah->iniBank7, ar5416Bank7_9160,
24842 -                              ARRAY_SIZE(ar5416Bank7_9160), 2);
24843 -               if (AR_SREV_9160_11(ah)) {
24844 -                       INIT_INI_ARRAY(&ah->iniAddac,
24845 -                                      ar5416Addac_91601_1,
24846 -                                      ARRAY_SIZE(ar5416Addac_91601_1), 2);
24847 -               } else {
24848 -                       INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac_9160,
24849 -                                      ARRAY_SIZE(ar5416Addac_9160), 2);
24850 -               }
24851 -       } else if (AR_SREV_9100_OR_LATER(ah)) {
24852 -               INIT_INI_ARRAY(&ah->iniModes, ar5416Modes_9100,
24853 -                              ARRAY_SIZE(ar5416Modes_9100), 6);
24854 -               INIT_INI_ARRAY(&ah->iniCommon, ar5416Common_9100,
24855 -                              ARRAY_SIZE(ar5416Common_9100), 2);
24856 -               INIT_INI_ARRAY(&ah->iniBank0, ar5416Bank0_9100,
24857 -                              ARRAY_SIZE(ar5416Bank0_9100), 2);
24858 -               INIT_INI_ARRAY(&ah->iniBB_RfGain, ar5416BB_RfGain_9100,
24859 -                              ARRAY_SIZE(ar5416BB_RfGain_9100), 3);
24860 -               INIT_INI_ARRAY(&ah->iniBank1, ar5416Bank1_9100,
24861 -                              ARRAY_SIZE(ar5416Bank1_9100), 2);
24862 -               INIT_INI_ARRAY(&ah->iniBank2, ar5416Bank2_9100,
24863 -                              ARRAY_SIZE(ar5416Bank2_9100), 2);
24864 -               INIT_INI_ARRAY(&ah->iniBank3, ar5416Bank3_9100,
24865 -                              ARRAY_SIZE(ar5416Bank3_9100), 3);
24866 -               INIT_INI_ARRAY(&ah->iniBank6, ar5416Bank6_9100,
24867 -                              ARRAY_SIZE(ar5416Bank6_9100), 3);
24868 -               INIT_INI_ARRAY(&ah->iniBank6TPC, ar5416Bank6TPC_9100,
24869 -                              ARRAY_SIZE(ar5416Bank6TPC_9100), 3);
24870 -               INIT_INI_ARRAY(&ah->iniBank7, ar5416Bank7_9100,
24871 -                              ARRAY_SIZE(ar5416Bank7_9100), 2);
24872 -               INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac_9100,
24873 -                              ARRAY_SIZE(ar5416Addac_9100), 2);
24874 -       } else {
24875 -               INIT_INI_ARRAY(&ah->iniModes, ar5416Modes,
24876 -                              ARRAY_SIZE(ar5416Modes), 6);
24877 -               INIT_INI_ARRAY(&ah->iniCommon, ar5416Common,
24878 -                              ARRAY_SIZE(ar5416Common), 2);
24879 -               INIT_INI_ARRAY(&ah->iniBank0, ar5416Bank0,
24880 -                              ARRAY_SIZE(ar5416Bank0), 2);
24881 -               INIT_INI_ARRAY(&ah->iniBB_RfGain, ar5416BB_RfGain,
24882 -                              ARRAY_SIZE(ar5416BB_RfGain), 3);
24883 -               INIT_INI_ARRAY(&ah->iniBank1, ar5416Bank1,
24884 -                              ARRAY_SIZE(ar5416Bank1), 2);
24885 -               INIT_INI_ARRAY(&ah->iniBank2, ar5416Bank2,
24886 -                              ARRAY_SIZE(ar5416Bank2), 2);
24887 -               INIT_INI_ARRAY(&ah->iniBank3, ar5416Bank3,
24888 -                              ARRAY_SIZE(ar5416Bank3), 3);
24889 -               INIT_INI_ARRAY(&ah->iniBank6, ar5416Bank6,
24890 -                              ARRAY_SIZE(ar5416Bank6), 3);
24891 -               INIT_INI_ARRAY(&ah->iniBank6TPC, ar5416Bank6TPC,
24892 -                              ARRAY_SIZE(ar5416Bank6TPC), 3);
24893 -               INIT_INI_ARRAY(&ah->iniBank7, ar5416Bank7,
24894 -                              ARRAY_SIZE(ar5416Bank7), 2);
24895 -               INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac,
24896 -                              ARRAY_SIZE(ar5416Addac), 2);
24897 -       }
24898 -}
24899 -
24900 -static void ath9k_hw_init_mode_gain_regs(struct ath_hw *ah)
24901 +static void ath9k_hw_attach_ops(struct ath_hw *ah)
24902  {
24903 -       if (AR_SREV_9287_11_OR_LATER(ah))
24904 -               INIT_INI_ARRAY(&ah->iniModesRxGain,
24905 -               ar9287Modes_rx_gain_9287_1_1,
24906 -               ARRAY_SIZE(ar9287Modes_rx_gain_9287_1_1), 6);
24907 -       else if (AR_SREV_9287_10(ah))
24908 -               INIT_INI_ARRAY(&ah->iniModesRxGain,
24909 -               ar9287Modes_rx_gain_9287_1_0,
24910 -               ARRAY_SIZE(ar9287Modes_rx_gain_9287_1_0), 6);
24911 -       else if (AR_SREV_9280_20(ah))
24912 -               ath9k_hw_init_rxgain_ini(ah);
24913 -
24914 -       if (AR_SREV_9287_11_OR_LATER(ah)) {
24915 -               INIT_INI_ARRAY(&ah->iniModesTxGain,
24916 -               ar9287Modes_tx_gain_9287_1_1,
24917 -               ARRAY_SIZE(ar9287Modes_tx_gain_9287_1_1), 6);
24918 -       } else if (AR_SREV_9287_10(ah)) {
24919 -               INIT_INI_ARRAY(&ah->iniModesTxGain,
24920 -               ar9287Modes_tx_gain_9287_1_0,
24921 -               ARRAY_SIZE(ar9287Modes_tx_gain_9287_1_0), 6);
24922 -       } else if (AR_SREV_9280_20(ah)) {
24923 -               ath9k_hw_init_txgain_ini(ah);
24924 -       } else if (AR_SREV_9285_12_OR_LATER(ah)) {
24925 -               u32 txgain_type = ah->eep_ops->get_eeprom(ah, EEP_TXGAIN_TYPE);
24926 -
24927 -               /* txgain table */
24928 -               if (txgain_type == AR5416_EEP_TXGAIN_HIGH_POWER) {
24929 -                       if (AR_SREV_9285E_20(ah)) {
24930 -                               INIT_INI_ARRAY(&ah->iniModesTxGain,
24931 -                               ar9285Modes_XE2_0_high_power,
24932 -                               ARRAY_SIZE(
24933 -                                 ar9285Modes_XE2_0_high_power), 6);
24934 -                       } else {
24935 -                               INIT_INI_ARRAY(&ah->iniModesTxGain,
24936 -                               ar9285Modes_high_power_tx_gain_9285_1_2,
24937 -                               ARRAY_SIZE(
24938 -                                 ar9285Modes_high_power_tx_gain_9285_1_2), 6);
24939 -                       }
24940 -               } else {
24941 -                       if (AR_SREV_9285E_20(ah)) {
24942 -                               INIT_INI_ARRAY(&ah->iniModesTxGain,
24943 -                               ar9285Modes_XE2_0_normal_power,
24944 -                               ARRAY_SIZE(
24945 -                                 ar9285Modes_XE2_0_normal_power), 6);
24946 -                       } else {
24947 -                               INIT_INI_ARRAY(&ah->iniModesTxGain,
24948 -                               ar9285Modes_original_tx_gain_9285_1_2,
24949 -                               ARRAY_SIZE(
24950 -                                 ar9285Modes_original_tx_gain_9285_1_2), 6);
24951 -                       }
24952 -               }
24953 -       }
24954 -}
24955 -
24956 -static void ath9k_hw_init_eeprom_fix(struct ath_hw *ah)
24957 -{
24958 -       struct base_eep_header *pBase = &(ah->eeprom.def.baseEepHeader);
24959 -       struct ath_common *common = ath9k_hw_common(ah);
24960 -
24961 -       ah->need_an_top2_fixup = (ah->hw_version.devid == AR9280_DEVID_PCI) &&
24962 -                                (ah->eep_map != EEP_MAP_4KBITS) &&
24963 -                                ((pBase->version & 0xff) > 0x0a) &&
24964 -                                (pBase->pwdclkind == 0);
24965 -
24966 -       if (ah->need_an_top2_fixup)
24967 -               ath_print(common, ATH_DBG_EEPROM,
24968 -                         "needs fixup for AR_AN_TOP2 register\n");
24969 +       if (AR_SREV_9300_20_OR_LATER(ah))
24970 +               ar9003_hw_attach_ops(ah);
24971 +       else
24972 +               ar9002_hw_attach_ops(ah);
24973  }
24974  
24975 -int ath9k_hw_init(struct ath_hw *ah)
24976 +/* Called for all hardware families */
24977 +static int __ath9k_hw_init(struct ath_hw *ah)
24978  {
24979         struct ath_common *common = ath9k_hw_common(ah);
24980         int r = 0;
24981  
24982 -       if (common->bus_ops->ath_bus_type != ATH_USB) {
24983 -               if (!ath9k_hw_devid_supported(ah->hw_version.devid)) {
24984 -                       ath_print(common, ATH_DBG_FATAL,
24985 -                                 "Unsupported device ID: 0x%0x\n",
24986 -                                 ah->hw_version.devid);
24987 -                       return -EOPNOTSUPP;
24988 -               }
24989 -       }
24990 -
24991 -       ath9k_hw_init_defaults(ah);
24992 -       ath9k_hw_init_config(ah);
24993 -
24994         if (!ath9k_hw_set_reset_reg(ah, ATH9K_RESET_POWER_ON)) {
24995                 ath_print(common, ATH_DBG_FATAL,
24996                           "Couldn't reset chip\n");
24997                 return -EIO;
24998         }
24999  
25000 +       ath9k_hw_init_defaults(ah);
25001 +       ath9k_hw_init_config(ah);
25002 +
25003 +       ath9k_hw_attach_ops(ah);
25004 +
25005         if (!ath9k_hw_setpower(ah, ATH9K_PM_AWAKE)) {
25006                 ath_print(common, ATH_DBG_FATAL, "Couldn't wakeup chip\n");
25007                 return -EIO;
25008 @@ -901,7 +529,7 @@ int ath9k_hw_init(struct ath_hw *ah)
25009         else
25010                 ah->config.max_txtrig_level = MAX_TX_FIFO_THRESHOLD;
25011  
25012 -       if (!ath9k_hw_macversion_supported(ah->hw_version.macVersion)) {
25013 +       if (!ath9k_hw_macversion_supported(ah)) {
25014                 ath_print(common, ATH_DBG_FATAL,
25015                           "Mac Chip Rev 0x%02x.%x is not supported by "
25016                           "this driver\n", ah->hw_version.macVersion,
25017 @@ -909,28 +537,15 @@ int ath9k_hw_init(struct ath_hw *ah)
25018                 return -EOPNOTSUPP;
25019         }
25020  
25021 -       if (AR_SREV_9100(ah)) {
25022 -               ah->iq_caldata.calData = &iq_cal_multi_sample;
25023 -               ah->supp_cals = IQ_MISMATCH_CAL;
25024 -               ah->is_pciexpress = false;
25025 -       }
25026 -
25027 -       if (AR_SREV_9271(ah))
25028 +       if (AR_SREV_9271(ah) || AR_SREV_9100(ah))
25029                 ah->is_pciexpress = false;
25030  
25031         ah->hw_version.phyRev = REG_READ(ah, AR_PHY_CHIP_ID);
25032 -
25033         ath9k_hw_init_cal_settings(ah);
25034  
25035         ah->ani_function = ATH9K_ANI_ALL;
25036 -       if (AR_SREV_9280_10_OR_LATER(ah)) {
25037 +       if (AR_SREV_9280_10_OR_LATER(ah) && !AR_SREV_9300_20_OR_LATER(ah))
25038                 ah->ani_function &= ~ATH9K_ANI_NOISE_IMMUNITY_LEVEL;
25039 -               ah->ath9k_hw_rf_set_freq = &ath9k_hw_ar9280_set_channel;
25040 -               ah->ath9k_hw_spur_mitigate_freq = &ath9k_hw_9280_spur_mitigate;
25041 -       } else {
25042 -               ah->ath9k_hw_rf_set_freq = &ath9k_hw_set_channel;
25043 -               ah->ath9k_hw_spur_mitigate_freq = &ath9k_hw_spur_mitigate;
25044 -       }
25045  
25046         ath9k_hw_init_mode_regs(ah);
25047  
25048 @@ -939,15 +554,8 @@ int ath9k_hw_init(struct ath_hw *ah)
25049         else
25050                 ath9k_hw_disablepcie(ah);
25051  
25052 -       /* Support for Japan ch.14 (2484) spread */
25053 -       if (AR_SREV_9287_11_OR_LATER(ah)) {
25054 -               INIT_INI_ARRAY(&ah->iniCckfirNormal,
25055 -                      ar9287Common_normal_cck_fir_coeff_92871_1,
25056 -                      ARRAY_SIZE(ar9287Common_normal_cck_fir_coeff_92871_1), 2);
25057 -               INIT_INI_ARRAY(&ah->iniCckfirJapan2484,
25058 -                      ar9287Common_japan_2484_cck_fir_coeff_92871_1,
25059 -                      ARRAY_SIZE(ar9287Common_japan_2484_cck_fir_coeff_92871_1), 2);
25060 -       }
25061 +       if (!AR_SREV_9300_20_OR_LATER(ah))
25062 +               ar9002_hw_cck_chan14_spread(ah);
25063  
25064         r = ath9k_hw_post_init(ah);
25065         if (r)
25066 @@ -958,8 +566,6 @@ int ath9k_hw_init(struct ath_hw *ah)
25067         if (r)
25068                 return r;
25069  
25070 -       ath9k_hw_init_eeprom_fix(ah);
25071 -
25072         r = ath9k_hw_init_macaddr(ah);
25073         if (r) {
25074                 ath_print(common, ATH_DBG_FATAL,
25075 @@ -972,6 +578,9 @@ int ath9k_hw_init(struct ath_hw *ah)
25076         else
25077                 ah->tx_trig_level = (AR_FTRIG_512B >> AR_FTRIG_S);
25078  
25079 +       if (AR_SREV_9300_20_OR_LATER(ah))
25080 +               ar9003_hw_set_nf_limits(ah);
25081 +
25082         ath9k_init_nfcal_hist_buffer(ah);
25083  
25084         common->state = ATH_HW_INITIALIZED;
25085 @@ -979,21 +588,45 @@ int ath9k_hw_init(struct ath_hw *ah)
25086         return 0;
25087  }
25088  
25089 -static void ath9k_hw_init_bb(struct ath_hw *ah,
25090 -                            struct ath9k_channel *chan)
25091 +int ath9k_hw_init(struct ath_hw *ah)
25092  {
25093 -       u32 synthDelay;
25094 +       int ret;
25095 +       struct ath_common *common = ath9k_hw_common(ah);
25096  
25097 -       synthDelay = REG_READ(ah, AR_PHY_RX_DELAY) & AR_PHY_RX_DELAY_DELAY;
25098 -       if (IS_CHAN_B(chan))
25099 -               synthDelay = (4 * synthDelay) / 22;
25100 -       else
25101 -               synthDelay /= 10;
25102 +       /* These are all the AR5008/AR9001/AR9002 hardware family of chipsets */
25103 +       switch (ah->hw_version.devid) {
25104 +       case AR5416_DEVID_PCI:
25105 +       case AR5416_DEVID_PCIE:
25106 +       case AR5416_AR9100_DEVID:
25107 +       case AR9160_DEVID_PCI:
25108 +       case AR9280_DEVID_PCI:
25109 +       case AR9280_DEVID_PCIE:
25110 +       case AR9285_DEVID_PCIE:
25111 +       case AR9287_DEVID_PCI:
25112 +       case AR9287_DEVID_PCIE:
25113 +       case AR2427_DEVID_PCIE:
25114 +       case AR9300_DEVID_PCIE:
25115 +               break;
25116 +       default:
25117 +               if (common->bus_ops->ath_bus_type == ATH_USB)
25118 +                       break;
25119 +               ath_print(common, ATH_DBG_FATAL,
25120 +                         "Hardware device ID 0x%04x not supported\n",
25121 +                         ah->hw_version.devid);
25122 +               return -EOPNOTSUPP;
25123 +       }
25124  
25125 -       REG_WRITE(ah, AR_PHY_ACTIVE, AR_PHY_ACTIVE_EN);
25126 +       ret = __ath9k_hw_init(ah);
25127 +       if (ret) {
25128 +               ath_print(common, ATH_DBG_FATAL,
25129 +                         "Unable to initialize hardware; "
25130 +                         "initialization status: %d\n", ret);
25131 +               return ret;
25132 +       }
25133  
25134 -       udelay(synthDelay + BASE_ACTIVATE_DELAY);
25135 +       return 0;
25136  }
25137 +EXPORT_SYMBOL(ath9k_hw_init);
25138  
25139  static void ath9k_hw_init_qos(struct ath_hw *ah)
25140  {
25141 @@ -1015,64 +648,8 @@ static void ath9k_hw_init_qos(struct ath_hw *ah)
25142  static void ath9k_hw_init_pll(struct ath_hw *ah,
25143                               struct ath9k_channel *chan)
25144  {
25145 -       u32 pll;
25146 -
25147 -       if (AR_SREV_9100(ah)) {
25148 -               if (chan && IS_CHAN_5GHZ(chan))
25149 -                       pll = 0x1450;
25150 -               else
25151 -                       pll = 0x1458;
25152 -       } else {
25153 -               if (AR_SREV_9280_10_OR_LATER(ah)) {
25154 -                       pll = SM(0x5, AR_RTC_9160_PLL_REFDIV);
25155 -
25156 -                       if (chan && IS_CHAN_HALF_RATE(chan))
25157 -                               pll |= SM(0x1, AR_RTC_9160_PLL_CLKSEL);
25158 -                       else if (chan && IS_CHAN_QUARTER_RATE(chan))
25159 -                               pll |= SM(0x2, AR_RTC_9160_PLL_CLKSEL);
25160 -
25161 -                       if (chan && IS_CHAN_5GHZ(chan)) {
25162 -                               pll |= SM(0x28, AR_RTC_9160_PLL_DIV);
25163 -
25164 -
25165 -                               if (AR_SREV_9280_20(ah)) {
25166 -                                       if (((chan->channel % 20) == 0)
25167 -                                           || ((chan->channel % 10) == 0))
25168 -                                               pll = 0x2850;
25169 -                                       else
25170 -                                               pll = 0x142c;
25171 -                               }
25172 -                       } else {
25173 -                               pll |= SM(0x2c, AR_RTC_9160_PLL_DIV);
25174 -                       }
25175 -
25176 -               } else if (AR_SREV_9160_10_OR_LATER(ah)) {
25177 -
25178 -                       pll = SM(0x5, AR_RTC_9160_PLL_REFDIV);
25179 +       u32 pll = ath9k_hw_compute_pll_control(ah, chan);
25180  
25181 -                       if (chan && IS_CHAN_HALF_RATE(chan))
25182 -                               pll |= SM(0x1, AR_RTC_9160_PLL_CLKSEL);
25183 -                       else if (chan && IS_CHAN_QUARTER_RATE(chan))
25184 -                               pll |= SM(0x2, AR_RTC_9160_PLL_CLKSEL);
25185 -
25186 -                       if (chan && IS_CHAN_5GHZ(chan))
25187 -                               pll |= SM(0x50, AR_RTC_9160_PLL_DIV);
25188 -                       else
25189 -                               pll |= SM(0x58, AR_RTC_9160_PLL_DIV);
25190 -               } else {
25191 -                       pll = AR_RTC_PLL_REFDIV_5 | AR_RTC_PLL_DIV2;
25192 -
25193 -                       if (chan && IS_CHAN_HALF_RATE(chan))
25194 -                               pll |= SM(0x1, AR_RTC_PLL_CLKSEL);
25195 -                       else if (chan && IS_CHAN_QUARTER_RATE(chan))
25196 -                               pll |= SM(0x2, AR_RTC_PLL_CLKSEL);
25197 -
25198 -                       if (chan && IS_CHAN_5GHZ(chan))
25199 -                               pll |= SM(0xa, AR_RTC_PLL_DIV);
25200 -                       else
25201 -                               pll |= SM(0xb, AR_RTC_PLL_DIV);
25202 -               }
25203 -       }
25204         REG_WRITE(ah, AR_RTC_PLL_CONTROL, pll);
25205  
25206         /* Switch the core clock for ar9271 to 117Mhz */
25207 @@ -1086,43 +663,6 @@ static void ath9k_hw_init_pll(struct ath_hw *ah,
25208         REG_WRITE(ah, AR_RTC_SLEEP_CLK, AR_RTC_FORCE_DERIVED_CLK);
25209  }
25210  
25211 -static void ath9k_hw_init_chain_masks(struct ath_hw *ah)
25212 -{
25213 -       int rx_chainmask, tx_chainmask;
25214 -
25215 -       rx_chainmask = ah->rxchainmask;
25216 -       tx_chainmask = ah->txchainmask;
25217 -
25218 -       switch (rx_chainmask) {
25219 -       case 0x5:
25220 -               REG_SET_BIT(ah, AR_PHY_ANALOG_SWAP,
25221 -                           AR_PHY_SWAP_ALT_CHAIN);
25222 -       case 0x3:
25223 -               if (ah->hw_version.macVersion == AR_SREV_REVISION_5416_10) {
25224 -                       REG_WRITE(ah, AR_PHY_RX_CHAINMASK, 0x7);
25225 -                       REG_WRITE(ah, AR_PHY_CAL_CHAINMASK, 0x7);
25226 -                       break;
25227 -               }
25228 -       case 0x1:
25229 -       case 0x2:
25230 -       case 0x7:
25231 -               REG_WRITE(ah, AR_PHY_RX_CHAINMASK, rx_chainmask);
25232 -               REG_WRITE(ah, AR_PHY_CAL_CHAINMASK, rx_chainmask);
25233 -               break;
25234 -       default:
25235 -               break;
25236 -       }
25237 -
25238 -       REG_WRITE(ah, AR_SELFGEN_MASK, tx_chainmask);
25239 -       if (tx_chainmask == 0x5) {
25240 -               REG_SET_BIT(ah, AR_PHY_ANALOG_SWAP,
25241 -                           AR_PHY_SWAP_ALT_CHAIN);
25242 -       }
25243 -       if (AR_SREV_9100(ah))
25244 -               REG_WRITE(ah, AR_PHY_ANALOG_SWAP,
25245 -                         REG_READ(ah, AR_PHY_ANALOG_SWAP) | 0x00000001);
25246 -}
25247 -
25248  static void ath9k_hw_init_interrupt_masks(struct ath_hw *ah,
25249                                           enum nl80211_iftype opmode)
25250  {
25251 @@ -1132,12 +672,24 @@ static void ath9k_hw_init_interrupt_masks(struct ath_hw *ah,
25252                 AR_IMR_RXORN |
25253                 AR_IMR_BCNMISC;
25254  
25255 -       if (ah->config.rx_intr_mitigation)
25256 -               imr_reg |= AR_IMR_RXINTM | AR_IMR_RXMINTR;
25257 -       else
25258 -               imr_reg |= AR_IMR_RXOK;
25259 +       if (AR_SREV_9300_20_OR_LATER(ah)) {
25260 +               imr_reg |= AR_IMR_RXOK_HP;
25261 +               if (ah->config.rx_intr_mitigation)
25262 +                       imr_reg |= AR_IMR_RXINTM | AR_IMR_RXMINTR;
25263 +               else
25264 +                       imr_reg |= AR_IMR_RXOK_LP;
25265 +
25266 +       } else {
25267 +               if (ah->config.rx_intr_mitigation)
25268 +                       imr_reg |= AR_IMR_RXINTM | AR_IMR_RXMINTR;
25269 +               else
25270 +                       imr_reg |= AR_IMR_RXOK;
25271 +       }
25272  
25273 -       imr_reg |= AR_IMR_TXOK;
25274 +       if (ah->config.tx_intr_mitigation)
25275 +               imr_reg |= AR_IMR_TXINTM | AR_IMR_TXMINTR;
25276 +       else
25277 +               imr_reg |= AR_IMR_TXOK;
25278  
25279         if (opmode == NL80211_IFTYPE_AP)
25280                 imr_reg |= AR_IMR_MIB;
25281 @@ -1151,6 +703,13 @@ static void ath9k_hw_init_interrupt_masks(struct ath_hw *ah,
25282                 REG_WRITE(ah, AR_INTR_SYNC_ENABLE, AR_INTR_SYNC_DEFAULT);
25283                 REG_WRITE(ah, AR_INTR_SYNC_MASK, 0);
25284         }
25285 +
25286 +       if (AR_SREV_9300_20_OR_LATER(ah)) {
25287 +               REG_WRITE(ah, AR_INTR_PRIO_ASYNC_ENABLE, 0);
25288 +               REG_WRITE(ah, AR_INTR_PRIO_ASYNC_MASK, 0);
25289 +               REG_WRITE(ah, AR_INTR_PRIO_SYNC_ENABLE, 0);
25290 +               REG_WRITE(ah, AR_INTR_PRIO_SYNC_MASK, 0);
25291 +       }
25292  }
25293  
25294  static void ath9k_hw_setslottime(struct ath_hw *ah, u32 us)
25295 @@ -1242,8 +801,7 @@ void ath9k_hw_deinit(struct ath_hw *ah)
25296         ath9k_hw_setpower(ah, ATH9K_PM_FULL_SLEEP);
25297  
25298  free_hw:
25299 -       if (!AR_SREV_9280_10_OR_LATER(ah))
25300 -               ath9k_hw_rf_free_ext_banks(ah);
25301 +       ath9k_hw_rf_free_ext_banks(ah);
25302  }
25303  EXPORT_SYMBOL(ath9k_hw_deinit);
25304  
25305 @@ -1251,73 +809,7 @@ EXPORT_SYMBOL(ath9k_hw_deinit);
25306  /* INI */
25307  /*******/
25308  
25309 -static void ath9k_hw_override_ini(struct ath_hw *ah,
25310 -                                 struct ath9k_channel *chan)
25311 -{
25312 -       u32 val;
25313 -
25314 -       /*
25315 -        * Set the RX_ABORT and RX_DIS and clear if off only after
25316 -        * RXE is set for MAC. This prevents frames with corrupted
25317 -        * descriptor status.
25318 -        */
25319 -       REG_SET_BIT(ah, AR_DIAG_SW, (AR_DIAG_RX_DIS | AR_DIAG_RX_ABORT));
25320 -
25321 -       if (AR_SREV_9280_10_OR_LATER(ah)) {
25322 -               val = REG_READ(ah, AR_PCU_MISC_MODE2);
25323 -
25324 -               if (!AR_SREV_9271(ah))
25325 -                       val &= ~AR_PCU_MISC_MODE2_HWWAR1;
25326 -
25327 -               if (AR_SREV_9287_10_OR_LATER(ah))
25328 -                       val = val & (~AR_PCU_MISC_MODE2_HWWAR2);
25329 -
25330 -               REG_WRITE(ah, AR_PCU_MISC_MODE2, val);
25331 -       }
25332 -
25333 -       if (!AR_SREV_5416_20_OR_LATER(ah) ||
25334 -           AR_SREV_9280_10_OR_LATER(ah))
25335 -               return;
25336 -       /*
25337 -        * Disable BB clock gating
25338 -        * Necessary to avoid issues on AR5416 2.0
25339 -        */
25340 -       REG_WRITE(ah, 0x9800 + (651 << 2), 0x11);
25341 -
25342 -       /*
25343 -        * Disable RIFS search on some chips to avoid baseband
25344 -        * hang issues.
25345 -        */
25346 -       if (AR_SREV_9100(ah) || AR_SREV_9160(ah)) {
25347 -               val = REG_READ(ah, AR_PHY_HEAVY_CLIP_FACTOR_RIFS);
25348 -               val &= ~AR_PHY_RIFS_INIT_DELAY;
25349 -               REG_WRITE(ah, AR_PHY_HEAVY_CLIP_FACTOR_RIFS, val);
25350 -       }
25351 -}
25352 -
25353 -static void ath9k_olc_init(struct ath_hw *ah)
25354 -{
25355 -       u32 i;
25356 -
25357 -       if (OLC_FOR_AR9287_10_LATER) {
25358 -               REG_SET_BIT(ah, AR_PHY_TX_PWRCTRL9,
25359 -                               AR_PHY_TX_PWRCTRL9_RES_DC_REMOVAL);
25360 -               ath9k_hw_analog_shift_rmw(ah, AR9287_AN_TXPC0,
25361 -                               AR9287_AN_TXPC0_TXPCMODE,
25362 -                               AR9287_AN_TXPC0_TXPCMODE_S,
25363 -                               AR9287_AN_TXPC0_TXPCMODE_TEMPSENSE);
25364 -               udelay(100);
25365 -       } else {
25366 -               for (i = 0; i < AR9280_TX_GAIN_TABLE_SIZE; i++)
25367 -                       ah->originalGain[i] =
25368 -                               MS(REG_READ(ah, AR_PHY_TX_GAIN_TBL1 + i * 4),
25369 -                                               AR_PHY_TX_GAIN);
25370 -               ah->PDADCdelta = 0;
25371 -       }
25372 -}
25373 -
25374 -static u32 ath9k_regd_get_ctl(struct ath_regulatory *reg,
25375 -                             struct ath9k_channel *chan)
25376 +u32 ath9k_regd_get_ctl(struct ath_regulatory *reg, struct ath9k_channel *chan)
25377  {
25378         u32 ctl = ath_regd_get_band_ctl(reg, chan->chan->band);
25379  
25380 @@ -1331,193 +823,22 @@ static u32 ath9k_regd_get_ctl(struct ath_regulatory *reg,
25381         return ctl;
25382  }
25383  
25384 -static int ath9k_hw_process_ini(struct ath_hw *ah,
25385 -                               struct ath9k_channel *chan)
25386 -{
25387 -       struct ath_regulatory *regulatory = ath9k_hw_regulatory(ah);
25388 -       int i, regWrites = 0;
25389 -       struct ieee80211_channel *channel = chan->chan;
25390 -       u32 modesIndex, freqIndex;
25391 -
25392 -       switch (chan->chanmode) {
25393 -       case CHANNEL_A:
25394 -       case CHANNEL_A_HT20:
25395 -               modesIndex = 1;
25396 -               freqIndex = 1;
25397 -               break;
25398 -       case CHANNEL_A_HT40PLUS:
25399 -       case CHANNEL_A_HT40MINUS:
25400 -               modesIndex = 2;
25401 -               freqIndex = 1;
25402 -               break;
25403 -       case CHANNEL_G:
25404 -       case CHANNEL_G_HT20:
25405 -       case CHANNEL_B:
25406 -               modesIndex = 4;
25407 -               freqIndex = 2;
25408 -               break;
25409 -       case CHANNEL_G_HT40PLUS:
25410 -       case CHANNEL_G_HT40MINUS:
25411 -               modesIndex = 3;
25412 -               freqIndex = 2;
25413 -               break;
25414 -
25415 -       default:
25416 -               return -EINVAL;
25417 -       }
25418 -
25419 -       /* Set correct baseband to analog shift setting to access analog chips */
25420 -       REG_WRITE(ah, AR_PHY(0), 0x00000007);
25421 -
25422 -       /* Write ADDAC shifts */
25423 -       REG_WRITE(ah, AR_PHY_ADC_SERIAL_CTL, AR_PHY_SEL_EXTERNAL_RADIO);
25424 -       ah->eep_ops->set_addac(ah, chan);
25425 -
25426 -       if (AR_SREV_5416_22_OR_LATER(ah)) {
25427 -               REG_WRITE_ARRAY(&ah->iniAddac, 1, regWrites);
25428 -       } else {
25429 -               struct ar5416IniArray temp;
25430 -               u32 addacSize =
25431 -                       sizeof(u32) * ah->iniAddac.ia_rows *
25432 -                       ah->iniAddac.ia_columns;
25433 -
25434 -               /* For AR5416 2.0/2.1 */
25435 -               memcpy(ah->addac5416_21,
25436 -                      ah->iniAddac.ia_array, addacSize);
25437 -
25438 -               /* override CLKDRV value at [row, column] = [31, 1] */
25439 -               (ah->addac5416_21)[31 * ah->iniAddac.ia_columns + 1] = 0;
25440 -
25441 -               temp.ia_array = ah->addac5416_21;
25442 -               temp.ia_columns = ah->iniAddac.ia_columns;
25443 -               temp.ia_rows = ah->iniAddac.ia_rows;
25444 -               REG_WRITE_ARRAY(&temp, 1, regWrites);
25445 -       }
25446 -
25447 -       REG_WRITE(ah, AR_PHY_ADC_SERIAL_CTL, AR_PHY_SEL_INTERNAL_ADDAC);
25448 -
25449 -       for (i = 0; i < ah->iniModes.ia_rows; i++) {
25450 -               u32 reg = INI_RA(&ah->iniModes, i, 0);
25451 -               u32 val = INI_RA(&ah->iniModes, i, modesIndex);
25452 -
25453 -               if (reg == AR_AN_TOP2 && ah->need_an_top2_fixup)
25454 -                       val &= ~AR_AN_TOP2_PWDCLKIND;
25455 -
25456 -               REG_WRITE(ah, reg, val);
25457 -
25458 -               if (reg >= 0x7800 && reg < 0x78a0
25459 -                   && ah->config.analog_shiftreg) {
25460 -                       udelay(100);
25461 -               }
25462 -
25463 -               DO_DELAY(regWrites);
25464 -       }
25465 -
25466 -       if (AR_SREV_9280(ah) || AR_SREV_9287_10_OR_LATER(ah))
25467 -               REG_WRITE_ARRAY(&ah->iniModesRxGain, modesIndex, regWrites);
25468 -
25469 -       if (AR_SREV_9280(ah) || AR_SREV_9285_12_OR_LATER(ah) ||
25470 -           AR_SREV_9287_10_OR_LATER(ah))
25471 -               REG_WRITE_ARRAY(&ah->iniModesTxGain, modesIndex, regWrites);
25472 -
25473 -       if (AR_SREV_9271_10(ah))
25474 -               REG_WRITE_ARRAY(&ah->iniModes_9271_1_0_only,
25475 -                               modesIndex, regWrites);
25476 -
25477 -       /* Write common array parameters */
25478 -       for (i = 0; i < ah->iniCommon.ia_rows; i++) {
25479 -               u32 reg = INI_RA(&ah->iniCommon, i, 0);
25480 -               u32 val = INI_RA(&ah->iniCommon, i, 1);
25481 -
25482 -               REG_WRITE(ah, reg, val);
25483 -
25484 -               if (reg >= 0x7800 && reg < 0x78a0
25485 -                   && ah->config.analog_shiftreg) {
25486 -                       udelay(100);
25487 -               }
25488 -
25489 -               DO_DELAY(regWrites);
25490 -       }
25491 -
25492 -       if (AR_SREV_9271(ah)) {
25493 -               if (ah->eep_ops->get_eeprom(ah, EEP_TXGAIN_TYPE) == 1)
25494 -                       REG_WRITE_ARRAY(&ah->iniModes_high_power_tx_gain_9271,
25495 -                                       modesIndex, regWrites);
25496 -               else
25497 -                       REG_WRITE_ARRAY(&ah->iniModes_normal_power_tx_gain_9271,
25498 -                                       modesIndex, regWrites);
25499 -       }
25500 -
25501 -       ath9k_hw_write_regs(ah, freqIndex, regWrites);
25502 -
25503 -       if (AR_SREV_9280_20(ah) && IS_CHAN_A_5MHZ_SPACED(chan)) {
25504 -               REG_WRITE_ARRAY(&ah->iniModesAdditional, modesIndex,
25505 -                               regWrites);
25506 -       }
25507 -
25508 -       ath9k_hw_override_ini(ah, chan);
25509 -       ath9k_hw_set_regs(ah, chan);
25510 -       ath9k_hw_init_chain_masks(ah);
25511 -
25512 -       if (OLC_FOR_AR9280_20_LATER)
25513 -               ath9k_olc_init(ah);
25514 -
25515 -       /* Set TX power */
25516 -       ah->eep_ops->set_txpower(ah, chan,
25517 -                                ath9k_regd_get_ctl(regulatory, chan),
25518 -                                channel->max_antenna_gain * 2,
25519 -                                channel->max_power * 2,
25520 -                                min((u32) MAX_RATE_POWER,
25521 -                                (u32) regulatory->power_limit));
25522 -
25523 -       /* Write analog registers */
25524 -       if (!ath9k_hw_set_rf_regs(ah, chan, freqIndex)) {
25525 -               ath_print(ath9k_hw_common(ah), ATH_DBG_FATAL,
25526 -                         "ar5416SetRfRegs failed\n");
25527 -               return -EIO;
25528 -       }
25529 -
25530 -       return 0;
25531 -}
25532 -
25533  /****************************************/
25534  /* Reset and Channel Switching Routines */
25535  /****************************************/
25536  
25537 -static void ath9k_hw_set_rfmode(struct ath_hw *ah, struct ath9k_channel *chan)
25538 -{
25539 -       u32 rfMode = 0;
25540 -
25541 -       if (chan == NULL)
25542 -               return;
25543 -
25544 -       rfMode |= (IS_CHAN_B(chan) || IS_CHAN_G(chan))
25545 -               ? AR_PHY_MODE_DYNAMIC : AR_PHY_MODE_OFDM;
25546 -
25547 -       if (!AR_SREV_9280_10_OR_LATER(ah))
25548 -               rfMode |= (IS_CHAN_5GHZ(chan)) ?
25549 -                       AR_PHY_MODE_RF5GHZ : AR_PHY_MODE_RF2GHZ;
25550 -
25551 -       if (AR_SREV_9280_20(ah) && IS_CHAN_A_5MHZ_SPACED(chan))
25552 -               rfMode |= (AR_PHY_MODE_DYNAMIC | AR_PHY_MODE_DYN_CCK_DISABLE);
25553 -
25554 -       REG_WRITE(ah, AR_PHY_MODE, rfMode);
25555 -}
25556 -
25557 -static void ath9k_hw_mark_phy_inactive(struct ath_hw *ah)
25558 -{
25559 -       REG_WRITE(ah, AR_PHY_ACTIVE, AR_PHY_ACTIVE_DIS);
25560 -}
25561 -
25562  static inline void ath9k_hw_set_dma(struct ath_hw *ah)
25563  {
25564 +       struct ath_common *common = ath9k_hw_common(ah);
25565         u32 regval;
25566  
25567         /*
25568          * set AHB_MODE not to do cacheline prefetches
25569         */
25570 -       regval = REG_READ(ah, AR_AHB_MODE);
25571 -       REG_WRITE(ah, AR_AHB_MODE, regval | AR_AHB_PREFETCH_RD_EN);
25572 +       if (!AR_SREV_9300_20_OR_LATER(ah)) {
25573 +               regval = REG_READ(ah, AR_AHB_MODE);
25574 +               REG_WRITE(ah, AR_AHB_MODE, regval | AR_AHB_PREFETCH_RD_EN);
25575 +       }
25576  
25577         /*
25578          * let mac dma reads be in 128 byte chunks
25579 @@ -1530,7 +851,8 @@ static inline void ath9k_hw_set_dma(struct ath_hw *ah)
25580          * The initial value depends on whether aggregation is enabled, and is
25581          * adjusted whenever underruns are detected.
25582          */
25583 -       REG_RMW_FIELD(ah, AR_TXCFG, AR_FTRIG, ah->tx_trig_level);
25584 +       if (!AR_SREV_9300_20_OR_LATER(ah))
25585 +               REG_RMW_FIELD(ah, AR_TXCFG, AR_FTRIG, ah->tx_trig_level);
25586  
25587         /*
25588          * let mac dma writes be in 128 byte chunks
25589 @@ -1543,6 +865,14 @@ static inline void ath9k_hw_set_dma(struct ath_hw *ah)
25590          */
25591         REG_WRITE(ah, AR_RXFIFO_CFG, 0x200);
25592  
25593 +       if (AR_SREV_9300_20_OR_LATER(ah)) {
25594 +               REG_RMW_FIELD(ah, AR_RXBP_THRESH, AR_RXBP_THRESH_HP, 0x1);
25595 +               REG_RMW_FIELD(ah, AR_RXBP_THRESH, AR_RXBP_THRESH_LP, 0x1);
25596 +
25597 +               ath9k_hw_set_rx_bufsize(ah, common->rx_bufsize -
25598 +                       ah->caps.rx_status_len);
25599 +       }
25600 +
25601         /*
25602          * reduce the number of usable entries in PCU TXBUF to avoid
25603          * wrap around issues.
25604 @@ -1558,6 +888,9 @@ static inline void ath9k_hw_set_dma(struct ath_hw *ah)
25605                 REG_WRITE(ah, AR_PCU_TXBUF_CTRL,
25606                           AR_PCU_TXBUF_CTRL_USABLE_SIZE);
25607         }
25608 +
25609 +       if (AR_SREV_9300_20_OR_LATER(ah))
25610 +               ath9k_hw_reset_txstatus_ring(ah);
25611  }
25612  
25613  static void ath9k_hw_set_operating_mode(struct ath_hw *ah, int opmode)
25614 @@ -1585,10 +918,8 @@ static void ath9k_hw_set_operating_mode(struct ath_hw *ah, int opmode)
25615         }
25616  }
25617  
25618 -static inline void ath9k_hw_get_delta_slope_vals(struct ath_hw *ah,
25619 -                                                u32 coef_scaled,
25620 -                                                u32 *coef_mantissa,
25621 -                                                u32 *coef_exponent)
25622 +void ath9k_hw_get_delta_slope_vals(struct ath_hw *ah, u32 coef_scaled,
25623 +                                  u32 *coef_mantissa, u32 *coef_exponent)
25624  {
25625         u32 coef_exp, coef_man;
25626  
25627 @@ -1604,40 +935,6 @@ static inline void ath9k_hw_get_delta_slope_vals(struct ath_hw *ah,
25628         *coef_exponent = coef_exp - 16;
25629  }
25630  
25631 -static void ath9k_hw_set_delta_slope(struct ath_hw *ah,
25632 -                                    struct ath9k_channel *chan)
25633 -{
25634 -       u32 coef_scaled, ds_coef_exp, ds_coef_man;
25635 -       u32 clockMhzScaled = 0x64000000;
25636 -       struct chan_centers centers;
25637 -
25638 -       if (IS_CHAN_HALF_RATE(chan))
25639 -               clockMhzScaled = clockMhzScaled >> 1;
25640 -       else if (IS_CHAN_QUARTER_RATE(chan))
25641 -               clockMhzScaled = clockMhzScaled >> 2;
25642 -
25643 -       ath9k_hw_get_channel_centers(ah, chan, &centers);
25644 -       coef_scaled = clockMhzScaled / centers.synth_center;
25645 -
25646 -       ath9k_hw_get_delta_slope_vals(ah, coef_scaled, &ds_coef_man,
25647 -                                     &ds_coef_exp);
25648 -
25649 -       REG_RMW_FIELD(ah, AR_PHY_TIMING3,
25650 -                     AR_PHY_TIMING3_DSC_MAN, ds_coef_man);
25651 -       REG_RMW_FIELD(ah, AR_PHY_TIMING3,
25652 -                     AR_PHY_TIMING3_DSC_EXP, ds_coef_exp);
25653 -
25654 -       coef_scaled = (9 * coef_scaled) / 10;
25655 -
25656 -       ath9k_hw_get_delta_slope_vals(ah, coef_scaled, &ds_coef_man,
25657 -                                     &ds_coef_exp);
25658 -
25659 -       REG_RMW_FIELD(ah, AR_PHY_HALFGI,
25660 -                     AR_PHY_HALFGI_DSC_MAN, ds_coef_man);
25661 -       REG_RMW_FIELD(ah, AR_PHY_HALFGI,
25662 -                     AR_PHY_HALFGI_DSC_EXP, ds_coef_exp);
25663 -}
25664 -
25665  static bool ath9k_hw_set_reset(struct ath_hw *ah, int type)
25666  {
25667         u32 rst_flags;
25668 @@ -1658,15 +955,21 @@ static bool ath9k_hw_set_reset(struct ath_hw *ah, int type)
25669                 rst_flags = AR_RTC_RC_MAC_WARM | AR_RTC_RC_MAC_COLD |
25670                         AR_RTC_RC_COLD_RESET | AR_RTC_RC_WARM_RESET;
25671         } else {
25672 +
25673                 tmpReg = REG_READ(ah, AR_INTR_SYNC_CAUSE);
25674                 if (tmpReg &
25675                     (AR_INTR_SYNC_LOCAL_TIMEOUT |
25676                      AR_INTR_SYNC_RADM_CPL_TIMEOUT)) {
25677 +                       u32 val;
25678                         REG_WRITE(ah, AR_INTR_SYNC_ENABLE, 0);
25679 -                       REG_WRITE(ah, AR_RC, AR_RC_AHB | AR_RC_HOSTIF);
25680 -               } else {
25681 +
25682 +                       val = AR_RC_HOSTIF;
25683 +                       if (!AR_SREV_9300_20_OR_LATER(ah))
25684 +                               val |= AR_RC_AHB;
25685 +                       REG_WRITE(ah, AR_RC, val);
25686 +
25687 +               } else if (!AR_SREV_9300_20_OR_LATER(ah))
25688                         REG_WRITE(ah, AR_RC, AR_RC_AHB);
25689 -               }
25690  
25691                 rst_flags = AR_RTC_RC_MAC_WARM;
25692                 if (type == ATH9K_RESET_COLD)
25693 @@ -1697,13 +1000,15 @@ static bool ath9k_hw_set_reset_power_on(struct ath_hw *ah)
25694         REG_WRITE(ah, AR_RTC_FORCE_WAKE, AR_RTC_FORCE_WAKE_EN |
25695                   AR_RTC_FORCE_WAKE_ON_INT);
25696  
25697 -       if (!AR_SREV_9100(ah))
25698 +       if (!AR_SREV_9100(ah) && !AR_SREV_9300_20_OR_LATER(ah))
25699                 REG_WRITE(ah, AR_RC, AR_RC_AHB);
25700  
25701         REG_WRITE(ah, AR_RTC_RESET, 0);
25702 -       udelay(2);
25703  
25704 -       if (!AR_SREV_9100(ah))
25705 +       if (!AR_SREV_9300_20_OR_LATER(ah))
25706 +               udelay(2);
25707 +
25708 +       if (!AR_SREV_9100(ah) && !AR_SREV_9300_20_OR_LATER(ah))
25709                 REG_WRITE(ah, AR_RC, 0);
25710  
25711         REG_WRITE(ah, AR_RTC_RESET, 1);
25712 @@ -1739,34 +1044,6 @@ static bool ath9k_hw_set_reset_reg(struct ath_hw *ah, u32 type)
25713         }
25714  }
25715  
25716 -static void ath9k_hw_set_regs(struct ath_hw *ah, struct ath9k_channel *chan)
25717 -{
25718 -       u32 phymode;
25719 -       u32 enableDacFifo = 0;
25720 -
25721 -       if (AR_SREV_9285_10_OR_LATER(ah))
25722 -               enableDacFifo = (REG_READ(ah, AR_PHY_TURBO) &
25723 -                                        AR_PHY_FC_ENABLE_DAC_FIFO);
25724 -
25725 -       phymode = AR_PHY_FC_HT_EN | AR_PHY_FC_SHORT_GI_40
25726 -               | AR_PHY_FC_SINGLE_HT_LTF1 | AR_PHY_FC_WALSH | enableDacFifo;
25727 -
25728 -       if (IS_CHAN_HT40(chan)) {
25729 -               phymode |= AR_PHY_FC_DYN2040_EN;
25730 -
25731 -               if ((chan->chanmode == CHANNEL_A_HT40PLUS) ||
25732 -                   (chan->chanmode == CHANNEL_G_HT40PLUS))
25733 -                       phymode |= AR_PHY_FC_DYN2040_PRI_CH;
25734 -
25735 -       }
25736 -       REG_WRITE(ah, AR_PHY_TURBO, phymode);
25737 -
25738 -       ath9k_hw_set11nmac2040(ah);
25739 -
25740 -       REG_WRITE(ah, AR_GTXTO, 25 << AR_GTXTO_TIMEOUT_LIMIT_S);
25741 -       REG_WRITE(ah, AR_CST, 0xF << AR_CST_TIMEOUT_LIMIT_S);
25742 -}
25743 -
25744  static bool ath9k_hw_chip_reset(struct ath_hw *ah,
25745                                 struct ath9k_channel *chan)
25746  {
25747 @@ -1792,7 +1069,7 @@ static bool ath9k_hw_channel_change(struct ath_hw *ah,
25748         struct ath_regulatory *regulatory = ath9k_hw_regulatory(ah);
25749         struct ath_common *common = ath9k_hw_common(ah);
25750         struct ieee80211_channel *channel = chan->chan;
25751 -       u32 synthDelay, qnum;
25752 +       u32 qnum;
25753         int r;
25754  
25755         for (qnum = 0; qnum < AR_NUM_QCU; qnum++) {
25756 @@ -1804,17 +1081,15 @@ static bool ath9k_hw_channel_change(struct ath_hw *ah,
25757                 }
25758         }
25759  
25760 -       REG_WRITE(ah, AR_PHY_RFBUS_REQ, AR_PHY_RFBUS_REQ_EN);
25761 -       if (!ath9k_hw_wait(ah, AR_PHY_RFBUS_GRANT, AR_PHY_RFBUS_GRANT_EN,
25762 -                          AR_PHY_RFBUS_GRANT_EN, AH_WAIT_TIMEOUT)) {
25763 +       if (!ath9k_hw_rfbus_req(ah)) {
25764                 ath_print(common, ATH_DBG_FATAL,
25765                           "Could not kill baseband RX\n");
25766                 return false;
25767         }
25768  
25769 -       ath9k_hw_set_regs(ah, chan);
25770 +       ath9k_hw_set_channel_regs(ah, chan);
25771  
25772 -       r = ah->ath9k_hw_rf_set_freq(ah, chan);
25773 +       r = ath9k_hw_rf_set_freq(ah, chan);
25774         if (r) {
25775                 ath_print(common, ATH_DBG_FATAL,
25776                           "Failed to set channel\n");
25777 @@ -1828,20 +1103,12 @@ static bool ath9k_hw_channel_change(struct ath_hw *ah,
25778                              min((u32) MAX_RATE_POWER,
25779                              (u32) regulatory->power_limit));
25780  
25781 -       synthDelay = REG_READ(ah, AR_PHY_RX_DELAY) & AR_PHY_RX_DELAY_DELAY;
25782 -       if (IS_CHAN_B(chan))
25783 -               synthDelay = (4 * synthDelay) / 22;
25784 -       else
25785 -               synthDelay /= 10;
25786 -
25787 -       udelay(synthDelay + BASE_ACTIVATE_DELAY);
25788 -
25789 -       REG_WRITE(ah, AR_PHY_RFBUS_REQ, 0);
25790 +       ath9k_hw_rfbus_done(ah);
25791  
25792         if (IS_CHAN_OFDM(chan) || IS_CHAN_HT(chan))
25793                 ath9k_hw_set_delta_slope(ah, chan);
25794  
25795 -       ah->ath9k_hw_spur_mitigate_freq(ah, chan);
25796 +       ath9k_hw_spur_mitigate_freq(ah, chan);
25797  
25798         if (!chan->oneTimeCalsDone)
25799                 chan->oneTimeCalsDone = true;
25800 @@ -1849,18 +1116,6 @@ static bool ath9k_hw_channel_change(struct ath_hw *ah,
25801         return true;
25802  }
25803  
25804 -static void ath9k_enable_rfkill(struct ath_hw *ah)
25805 -{
25806 -       REG_SET_BIT(ah, AR_GPIO_INPUT_EN_VAL,
25807 -                   AR_GPIO_INPUT_EN_VAL_RFSILENT_BB);
25808 -
25809 -       REG_CLR_BIT(ah, AR_GPIO_INPUT_MUX2,
25810 -                   AR_GPIO_INPUT_MUX2_RFSILENT);
25811 -
25812 -       ath9k_hw_cfg_gpio_input(ah, ah->rfkill_gpio);
25813 -       REG_SET_BIT(ah, AR_PHY_TEST, RFSILENT_BB);
25814 -}
25815 -
25816  int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan,
25817                     bool bChannelChange)
25818  {
25819 @@ -1870,11 +1125,18 @@ int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan,
25820         u32 saveDefAntenna;
25821         u32 macStaId1;
25822         u64 tsf = 0;
25823 -       int i, rx_chainmask, r;
25824 +       int i, r;
25825  
25826         ah->txchainmask = common->tx_chainmask;
25827         ah->rxchainmask = common->rx_chainmask;
25828  
25829 +       if (!ah->chip_fullsleep) {
25830 +               ath9k_hw_abortpcurecv(ah);
25831 +               if (!ath9k_hw_stopdmarecv(ah))
25832 +                       ath_print(common, ATH_DBG_XMIT,
25833 +                               "Failed to stop receive dma\n");
25834 +       }
25835 +
25836         if (!ath9k_hw_setpower(ah, ATH9K_PM_AWAKE))
25837                 return -EIO;
25838  
25839 @@ -1939,19 +1201,14 @@ int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan,
25840         if (tsf && AR_SREV_9280(ah) && ah->eep_ops->get_eeprom(ah, EEP_OL_PWRCTRL))
25841                 ath9k_hw_settsf64(ah, tsf);
25842  
25843 +       if (AR_SREV_9300_20_OR_LATER(ah))
25844 +               ar9003_hw_attach_mac_ops(ah);
25845 +       else
25846 +               ar9002_hw_attach_mac_ops(ah);
25847 +
25848         if (AR_SREV_9280_10_OR_LATER(ah))
25849                 REG_SET_BIT(ah, AR_GPIO_INPUT_EN_VAL, AR_GPIO_JTAG_DISABLE);
25850  
25851 -       if (AR_SREV_9287_12_OR_LATER(ah)) {
25852 -               /* Enable ASYNC FIFO */
25853 -               REG_SET_BIT(ah, AR_MAC_PCU_ASYNC_FIFO_REG3,
25854 -                               AR_MAC_PCU_ASYNC_FIFO_REG3_DATAPATH_SEL);
25855 -               REG_SET_BIT(ah, AR_PHY_MODE, AR_PHY_MODE_ASYNCFIFO);
25856 -               REG_CLR_BIT(ah, AR_MAC_PCU_ASYNC_FIFO_REG3,
25857 -                               AR_MAC_PCU_ASYNC_FIFO_REG3_SOFT_RESET);
25858 -               REG_SET_BIT(ah, AR_MAC_PCU_ASYNC_FIFO_REG3,
25859 -                               AR_MAC_PCU_ASYNC_FIFO_REG3_SOFT_RESET);
25860 -       }
25861         r = ath9k_hw_process_ini(ah, chan);
25862         if (r)
25863                 return r;
25864 @@ -1976,7 +1233,7 @@ int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan,
25865         if (IS_CHAN_OFDM(chan) || IS_CHAN_HT(chan))
25866                 ath9k_hw_set_delta_slope(ah, chan);
25867  
25868 -       ah->ath9k_hw_spur_mitigate_freq(ah, chan);
25869 +       ath9k_hw_spur_mitigate_freq(ah, chan);
25870         ah->eep_ops->set_board_values(ah, chan);
25871  
25872         REG_WRITE(ah, AR_STA_ID0, get_unaligned_le32(common->macaddr));
25873 @@ -1998,7 +1255,7 @@ int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan,
25874  
25875         REG_WRITE(ah, AR_RSSI_THR, INIT_RSSI_THR);
25876  
25877 -       r = ah->ath9k_hw_rf_set_freq(ah, chan);
25878 +       r = ath9k_hw_rf_set_freq(ah, chan);
25879         if (r)
25880                 return r;
25881  
25882 @@ -2017,25 +1274,9 @@ int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan,
25883  
25884         ath9k_hw_init_global_settings(ah);
25885  
25886 -       if (AR_SREV_9287_12_OR_LATER(ah)) {
25887 -               REG_WRITE(ah, AR_D_GBL_IFS_SIFS,
25888 -                         AR_D_GBL_IFS_SIFS_ASYNC_FIFO_DUR);
25889 -               REG_WRITE(ah, AR_D_GBL_IFS_SLOT,
25890 -                         AR_D_GBL_IFS_SLOT_ASYNC_FIFO_DUR);
25891 -               REG_WRITE(ah, AR_D_GBL_IFS_EIFS,
25892 -                         AR_D_GBL_IFS_EIFS_ASYNC_FIFO_DUR);
25893 -
25894 -               REG_WRITE(ah, AR_TIME_OUT, AR_TIME_OUT_ACK_CTS_ASYNC_FIFO_DUR);
25895 -               REG_WRITE(ah, AR_USEC, AR_USEC_ASYNC_FIFO_DUR);
25896 -
25897 -               REG_SET_BIT(ah, AR_MAC_PCU_LOGIC_ANALYZER,
25898 -                           AR_MAC_PCU_LOGIC_ANALYZER_DISBUG20768);
25899 -               REG_RMW_FIELD(ah, AR_AHB_MODE, AR_AHB_CUSTOM_BURST_EN,
25900 -                             AR_AHB_CUSTOM_BURST_ASYNC_FIFO_VAL);
25901 -       }
25902 -       if (AR_SREV_9287_12_OR_LATER(ah)) {
25903 -               REG_SET_BIT(ah, AR_PCU_MISC_MODE2,
25904 -                               AR_PCU_MISC_MODE2_ENABLE_AGGWEP);
25905 +       if (!AR_SREV_9300_20_OR_LATER(ah)) {
25906 +               ar9002_hw_enable_async_fifo(ah);
25907 +               ar9002_hw_enable_wep_aggregation(ah);
25908         }
25909  
25910         REG_WRITE(ah, AR_STA_ID1,
25911 @@ -2050,17 +1291,17 @@ int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan,
25912                 REG_RMW_FIELD(ah, AR_RIMT, AR_RIMT_FIRST, 2000);
25913         }
25914  
25915 +       if (ah->config.tx_intr_mitigation) {
25916 +               REG_RMW_FIELD(ah, AR_TIMT, AR_TIMT_LAST, 300);
25917 +               REG_RMW_FIELD(ah, AR_TIMT, AR_TIMT_FIRST, 750);
25918 +       }
25919 +
25920         ath9k_hw_init_bb(ah, chan);
25921  
25922         if (!ath9k_hw_init_cal(ah, chan))
25923                 return -EIO;
25924  
25925 -       rx_chainmask = ah->rxchainmask;
25926 -       if ((rx_chainmask == 0x5) || (rx_chainmask == 0x3)) {
25927 -               REG_WRITE(ah, AR_PHY_RX_CHAINMASK, rx_chainmask);
25928 -               REG_WRITE(ah, AR_PHY_CAL_CHAINMASK, rx_chainmask);
25929 -       }
25930 -
25931 +       ath9k_hw_restore_chainmask(ah);
25932         REG_WRITE(ah, AR_CFG_LED, saveLedState | AR_CFG_SCLK_32KHZ);
25933  
25934         /*
25935 @@ -2092,6 +1333,11 @@ int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan,
25936         if (ah->btcoex_hw.enabled)
25937                 ath9k_hw_btcoex_enable(ah);
25938  
25939 +       if (AR_SREV_9300_20_OR_LATER(ah)) {
25940 +               ath9k_hw_loadnf(ah, curchan);
25941 +               ath9k_hw_start_nfcal(ah);
25942 +       }
25943 +
25944         return 0;
25945  }
25946  EXPORT_SYMBOL(ath9k_hw_reset);
25947 @@ -2378,21 +1624,31 @@ EXPORT_SYMBOL(ath9k_hw_keyisvalid);
25948  /* Power Management (Chipset) */
25949  /******************************/
25950  
25951 +/*
25952 + * Notify Power Mgt is disabled in self-generated frames.
25953 + * If requested, force chip to sleep.
25954 + */
25955  static void ath9k_set_power_sleep(struct ath_hw *ah, int setChip)
25956  {
25957         REG_SET_BIT(ah, AR_STA_ID1, AR_STA_ID1_PWR_SAV);
25958         if (setChip) {
25959 +               /* Clear the RTC force wake bit to allow the mac to go to sleep */
25960                 REG_CLR_BIT(ah, AR_RTC_FORCE_WAKE,
25961                             AR_RTC_FORCE_WAKE_EN);
25962 -               if (!AR_SREV_9100(ah))
25963 +               if (!AR_SREV_9100(ah) && !AR_SREV_9300_20_OR_LATER(ah))
25964                         REG_WRITE(ah, AR_RC, AR_RC_AHB | AR_RC_HOSTIF);
25965 -
25966 +               /* Shutdown chip. Active low */
25967                 if (!AR_SREV_5416(ah) && !AR_SREV_9271(ah))
25968                         REG_CLR_BIT(ah, (AR_RTC_RESET),
25969                                     AR_RTC_RESET_EN);
25970         }
25971  }
25972  
25973 +/*
25974 + * Notify Power Management is enabled in self-generating
25975 + * frames. If request, set power mode of chip to
25976 + * auto/normal.  Duration in units of 128us (1/8 TU).
25977 + */
25978  static void ath9k_set_power_network_sleep(struct ath_hw *ah, int setChip)
25979  {
25980         REG_SET_BIT(ah, AR_STA_ID1, AR_STA_ID1_PWR_SAV);
25981 @@ -2400,9 +1656,14 @@ static void ath9k_set_power_network_sleep(struct ath_hw *ah, int setChip)
25982                 struct ath9k_hw_capabilities *pCap = &ah->caps;
25983  
25984                 if (!(pCap->hw_caps & ATH9K_HW_CAP_AUTOSLEEP)) {
25985 +                       /* Set WakeOnInterrupt bit; clear ForceWake bit */
25986                         REG_WRITE(ah, AR_RTC_FORCE_WAKE,
25987                                   AR_RTC_FORCE_WAKE_ON_INT);
25988                 } else {
25989 +                       /*
25990 +                        * Clear the RTC force wake bit to allow the
25991 +                        * mac to go to sleep.
25992 +                        */
25993                         REG_CLR_BIT(ah, AR_RTC_FORCE_WAKE,
25994                                     AR_RTC_FORCE_WAKE_EN);
25995                 }
25996 @@ -2421,7 +1682,8 @@ static bool ath9k_hw_set_power_awake(struct ath_hw *ah, int setChip)
25997                                            ATH9K_RESET_POWER_ON) != true) {
25998                                 return false;
25999                         }
26000 -                       ath9k_hw_init_pll(ah, NULL);
26001 +                       if (!AR_SREV_9300_20_OR_LATER(ah))
26002 +                               ath9k_hw_init_pll(ah, NULL);
26003                 }
26004                 if (AR_SREV_9100(ah))
26005                         REG_SET_BIT(ah, AR_RTC_RESET,
26006 @@ -2491,420 +1753,6 @@ bool ath9k_hw_setpower(struct ath_hw *ah, enum ath9k_power_mode mode)
26007  }
26008  EXPORT_SYMBOL(ath9k_hw_setpower);
26009  
26010 -/*
26011 - * Helper for ASPM support.
26012 - *
26013 - * Disable PLL when in L0s as well as receiver clock when in L1.
26014 - * This power saving option must be enabled through the SerDes.
26015 - *
26016 - * Programming the SerDes must go through the same 288 bit serial shift
26017 - * register as the other analog registers.  Hence the 9 writes.
26018 - */
26019 -void ath9k_hw_configpcipowersave(struct ath_hw *ah, int restore, int power_off)
26020 -{
26021 -       u8 i;
26022 -       u32 val;
26023 -
26024 -       if (ah->is_pciexpress != true)
26025 -               return;
26026 -
26027 -       /* Do not touch SerDes registers */
26028 -       if (ah->config.pcie_powersave_enable == 2)
26029 -               return;
26030 -
26031 -       /* Nothing to do on restore for 11N */
26032 -       if (!restore) {
26033 -               if (AR_SREV_9280_20_OR_LATER(ah)) {
26034 -                       /*
26035 -                        * AR9280 2.0 or later chips use SerDes values from the
26036 -                        * initvals.h initialized depending on chipset during
26037 -                        * ath9k_hw_init()
26038 -                        */
26039 -                       for (i = 0; i < ah->iniPcieSerdes.ia_rows; i++) {
26040 -                               REG_WRITE(ah, INI_RA(&ah->iniPcieSerdes, i, 0),
26041 -                                         INI_RA(&ah->iniPcieSerdes, i, 1));
26042 -                       }
26043 -               } else if (AR_SREV_9280(ah) &&
26044 -                          (ah->hw_version.macRev == AR_SREV_REVISION_9280_10)) {
26045 -                       REG_WRITE(ah, AR_PCIE_SERDES, 0x9248fd00);
26046 -                       REG_WRITE(ah, AR_PCIE_SERDES, 0x24924924);
26047 -
26048 -                       /* RX shut off when elecidle is asserted */
26049 -                       REG_WRITE(ah, AR_PCIE_SERDES, 0xa8000019);
26050 -                       REG_WRITE(ah, AR_PCIE_SERDES, 0x13160820);
26051 -                       REG_WRITE(ah, AR_PCIE_SERDES, 0xe5980560);
26052 -
26053 -                       /* Shut off CLKREQ active in L1 */
26054 -                       if (ah->config.pcie_clock_req)
26055 -                               REG_WRITE(ah, AR_PCIE_SERDES, 0x401deffc);
26056 -                       else
26057 -                               REG_WRITE(ah, AR_PCIE_SERDES, 0x401deffd);
26058 -
26059 -                       REG_WRITE(ah, AR_PCIE_SERDES, 0x1aaabe40);
26060 -                       REG_WRITE(ah, AR_PCIE_SERDES, 0xbe105554);
26061 -                       REG_WRITE(ah, AR_PCIE_SERDES, 0x00043007);
26062 -
26063 -                       /* Load the new settings */
26064 -                       REG_WRITE(ah, AR_PCIE_SERDES2, 0x00000000);
26065 -
26066 -               } else {
26067 -                       REG_WRITE(ah, AR_PCIE_SERDES, 0x9248fc00);
26068 -                       REG_WRITE(ah, AR_PCIE_SERDES, 0x24924924);
26069 -
26070 -                       /* RX shut off when elecidle is asserted */
26071 -                       REG_WRITE(ah, AR_PCIE_SERDES, 0x28000039);
26072 -                       REG_WRITE(ah, AR_PCIE_SERDES, 0x53160824);
26073 -                       REG_WRITE(ah, AR_PCIE_SERDES, 0xe5980579);
26074 -
26075 -                       /*
26076 -                        * Ignore ah->ah_config.pcie_clock_req setting for
26077 -                        * pre-AR9280 11n
26078 -                        */
26079 -                       REG_WRITE(ah, AR_PCIE_SERDES, 0x001defff);
26080 -
26081 -                       REG_WRITE(ah, AR_PCIE_SERDES, 0x1aaabe40);
26082 -                       REG_WRITE(ah, AR_PCIE_SERDES, 0xbe105554);
26083 -                       REG_WRITE(ah, AR_PCIE_SERDES, 0x000e3007);
26084 -
26085 -                       /* Load the new settings */
26086 -                       REG_WRITE(ah, AR_PCIE_SERDES2, 0x00000000);
26087 -               }
26088 -
26089 -               udelay(1000);
26090 -
26091 -               /* set bit 19 to allow forcing of pcie core into L1 state */
26092 -               REG_SET_BIT(ah, AR_PCIE_PM_CTRL, AR_PCIE_PM_CTRL_ENA);
26093 -
26094 -               /* Several PCIe massages to ensure proper behaviour */
26095 -               if (ah->config.pcie_waen) {
26096 -                       val = ah->config.pcie_waen;
26097 -                       if (!power_off)
26098 -                               val &= (~AR_WA_D3_L1_DISABLE);
26099 -               } else {
26100 -                       if (AR_SREV_9285(ah) || AR_SREV_9271(ah) ||
26101 -                           AR_SREV_9287(ah)) {
26102 -                               val = AR9285_WA_DEFAULT;
26103 -                               if (!power_off)
26104 -                                       val &= (~AR_WA_D3_L1_DISABLE);
26105 -                       } else if (AR_SREV_9280(ah)) {
26106 -                               /*
26107 -                                * On AR9280 chips bit 22 of 0x4004 needs to be
26108 -                                * set otherwise card may disappear.
26109 -                                */
26110 -                               val = AR9280_WA_DEFAULT;
26111 -                               if (!power_off)
26112 -                                       val &= (~AR_WA_D3_L1_DISABLE);
26113 -                       } else
26114 -                               val = AR_WA_DEFAULT;
26115 -               }
26116 -
26117 -               REG_WRITE(ah, AR_WA, val);
26118 -       }
26119 -
26120 -       if (power_off) {
26121 -               /*
26122 -                * Set PCIe workaround bits
26123 -                * bit 14 in WA register (disable L1) should only
26124 -                * be set when device enters D3 and be cleared
26125 -                * when device comes back to D0.
26126 -                */
26127 -               if (ah->config.pcie_waen) {
26128 -                       if (ah->config.pcie_waen & AR_WA_D3_L1_DISABLE)
26129 -                               REG_SET_BIT(ah, AR_WA, AR_WA_D3_L1_DISABLE);
26130 -               } else {
26131 -                       if (((AR_SREV_9285(ah) || AR_SREV_9271(ah) ||
26132 -                             AR_SREV_9287(ah)) &&
26133 -                            (AR9285_WA_DEFAULT & AR_WA_D3_L1_DISABLE)) ||
26134 -                           (AR_SREV_9280(ah) &&
26135 -                            (AR9280_WA_DEFAULT & AR_WA_D3_L1_DISABLE))) {
26136 -                               REG_SET_BIT(ah, AR_WA, AR_WA_D3_L1_DISABLE);
26137 -                       }
26138 -               }
26139 -       }
26140 -}
26141 -EXPORT_SYMBOL(ath9k_hw_configpcipowersave);
26142 -
26143 -/**********************/
26144 -/* Interrupt Handling */
26145 -/**********************/
26146 -
26147 -bool ath9k_hw_intrpend(struct ath_hw *ah)
26148 -{
26149 -       u32 host_isr;
26150 -
26151 -       if (AR_SREV_9100(ah))
26152 -               return true;
26153 -
26154 -       host_isr = REG_READ(ah, AR_INTR_ASYNC_CAUSE);
26155 -       if ((host_isr & AR_INTR_MAC_IRQ) && (host_isr != AR_INTR_SPURIOUS))
26156 -               return true;
26157 -
26158 -       host_isr = REG_READ(ah, AR_INTR_SYNC_CAUSE);
26159 -       if ((host_isr & AR_INTR_SYNC_DEFAULT)
26160 -           && (host_isr != AR_INTR_SPURIOUS))
26161 -               return true;
26162 -
26163 -       return false;
26164 -}
26165 -EXPORT_SYMBOL(ath9k_hw_intrpend);
26166 -
26167 -bool ath9k_hw_getisr(struct ath_hw *ah, enum ath9k_int *masked)
26168 -{
26169 -       u32 isr = 0;
26170 -       u32 mask2 = 0;
26171 -       struct ath9k_hw_capabilities *pCap = &ah->caps;
26172 -       u32 sync_cause = 0;
26173 -       bool fatal_int = false;
26174 -       struct ath_common *common = ath9k_hw_common(ah);
26175 -
26176 -       if (!AR_SREV_9100(ah)) {
26177 -               if (REG_READ(ah, AR_INTR_ASYNC_CAUSE) & AR_INTR_MAC_IRQ) {
26178 -                       if ((REG_READ(ah, AR_RTC_STATUS) & AR_RTC_STATUS_M)
26179 -                           == AR_RTC_STATUS_ON) {
26180 -                               isr = REG_READ(ah, AR_ISR);
26181 -                       }
26182 -               }
26183 -
26184 -               sync_cause = REG_READ(ah, AR_INTR_SYNC_CAUSE) &
26185 -                       AR_INTR_SYNC_DEFAULT;
26186 -
26187 -               *masked = 0;
26188 -
26189 -               if (!isr && !sync_cause)
26190 -                       return false;
26191 -       } else {
26192 -               *masked = 0;
26193 -               isr = REG_READ(ah, AR_ISR);
26194 -       }
26195 -
26196 -       if (isr) {
26197 -               if (isr & AR_ISR_BCNMISC) {
26198 -                       u32 isr2;
26199 -                       isr2 = REG_READ(ah, AR_ISR_S2);
26200 -                       if (isr2 & AR_ISR_S2_TIM)
26201 -                               mask2 |= ATH9K_INT_TIM;
26202 -                       if (isr2 & AR_ISR_S2_DTIM)
26203 -                               mask2 |= ATH9K_INT_DTIM;
26204 -                       if (isr2 & AR_ISR_S2_DTIMSYNC)
26205 -                               mask2 |= ATH9K_INT_DTIMSYNC;
26206 -                       if (isr2 & (AR_ISR_S2_CABEND))
26207 -                               mask2 |= ATH9K_INT_CABEND;
26208 -                       if (isr2 & AR_ISR_S2_GTT)
26209 -                               mask2 |= ATH9K_INT_GTT;
26210 -                       if (isr2 & AR_ISR_S2_CST)
26211 -                               mask2 |= ATH9K_INT_CST;
26212 -                       if (isr2 & AR_ISR_S2_TSFOOR)
26213 -                               mask2 |= ATH9K_INT_TSFOOR;
26214 -               }
26215 -
26216 -               isr = REG_READ(ah, AR_ISR_RAC);
26217 -               if (isr == 0xffffffff) {
26218 -                       *masked = 0;
26219 -                       return false;
26220 -               }
26221 -
26222 -               *masked = isr & ATH9K_INT_COMMON;
26223 -
26224 -               if (ah->config.rx_intr_mitigation) {
26225 -                       if (isr & (AR_ISR_RXMINTR | AR_ISR_RXINTM))
26226 -                               *masked |= ATH9K_INT_RX;
26227 -               }
26228 -
26229 -               if (isr & (AR_ISR_RXOK | AR_ISR_RXERR))
26230 -                       *masked |= ATH9K_INT_RX;
26231 -               if (isr &
26232 -                   (AR_ISR_TXOK | AR_ISR_TXDESC | AR_ISR_TXERR |
26233 -                    AR_ISR_TXEOL)) {
26234 -                       u32 s0_s, s1_s;
26235 -
26236 -                       *masked |= ATH9K_INT_TX;
26237 -
26238 -                       s0_s = REG_READ(ah, AR_ISR_S0_S);
26239 -                       ah->intr_txqs |= MS(s0_s, AR_ISR_S0_QCU_TXOK);
26240 -                       ah->intr_txqs |= MS(s0_s, AR_ISR_S0_QCU_TXDESC);
26241 -
26242 -                       s1_s = REG_READ(ah, AR_ISR_S1_S);
26243 -                       ah->intr_txqs |= MS(s1_s, AR_ISR_S1_QCU_TXERR);
26244 -                       ah->intr_txqs |= MS(s1_s, AR_ISR_S1_QCU_TXEOL);
26245 -               }
26246 -
26247 -               if (isr & AR_ISR_RXORN) {
26248 -                       ath_print(common, ATH_DBG_INTERRUPT,
26249 -                                 "receive FIFO overrun interrupt\n");
26250 -               }
26251 -
26252 -               if (!AR_SREV_9100(ah)) {
26253 -                       if (!(pCap->hw_caps & ATH9K_HW_CAP_AUTOSLEEP)) {
26254 -                               u32 isr5 = REG_READ(ah, AR_ISR_S5_S);
26255 -                               if (isr5 & AR_ISR_S5_TIM_TIMER)
26256 -                                       *masked |= ATH9K_INT_TIM_TIMER;
26257 -                       }
26258 -               }
26259 -
26260 -               *masked |= mask2;
26261 -       }
26262 -
26263 -       if (AR_SREV_9100(ah))
26264 -               return true;
26265 -
26266 -       if (isr & AR_ISR_GENTMR) {
26267 -               u32 s5_s;
26268 -
26269 -               s5_s = REG_READ(ah, AR_ISR_S5_S);
26270 -               if (isr & AR_ISR_GENTMR) {
26271 -                       ah->intr_gen_timer_trigger =
26272 -                               MS(s5_s, AR_ISR_S5_GENTIMER_TRIG);
26273 -
26274 -                       ah->intr_gen_timer_thresh =
26275 -                               MS(s5_s, AR_ISR_S5_GENTIMER_THRESH);
26276 -
26277 -                       if (ah->intr_gen_timer_trigger)
26278 -                               *masked |= ATH9K_INT_GENTIMER;
26279 -
26280 -               }
26281 -       }
26282 -
26283 -       if (sync_cause) {
26284 -               fatal_int =
26285 -                       (sync_cause &
26286 -                        (AR_INTR_SYNC_HOST1_FATAL | AR_INTR_SYNC_HOST1_PERR))
26287 -                       ? true : false;
26288 -
26289 -               if (fatal_int) {
26290 -                       if (sync_cause & AR_INTR_SYNC_HOST1_FATAL) {
26291 -                               ath_print(common, ATH_DBG_ANY,
26292 -                                         "received PCI FATAL interrupt\n");
26293 -                       }
26294 -                       if (sync_cause & AR_INTR_SYNC_HOST1_PERR) {
26295 -                               ath_print(common, ATH_DBG_ANY,
26296 -                                         "received PCI PERR interrupt\n");
26297 -                       }
26298 -                       *masked |= ATH9K_INT_FATAL;
26299 -               }
26300 -               if (sync_cause & AR_INTR_SYNC_RADM_CPL_TIMEOUT) {
26301 -                       ath_print(common, ATH_DBG_INTERRUPT,
26302 -                                 "AR_INTR_SYNC_RADM_CPL_TIMEOUT\n");
26303 -                       REG_WRITE(ah, AR_RC, AR_RC_HOSTIF);
26304 -                       REG_WRITE(ah, AR_RC, 0);
26305 -                       *masked |= ATH9K_INT_FATAL;
26306 -               }
26307 -               if (sync_cause & AR_INTR_SYNC_LOCAL_TIMEOUT) {
26308 -                       ath_print(common, ATH_DBG_INTERRUPT,
26309 -                                 "AR_INTR_SYNC_LOCAL_TIMEOUT\n");
26310 -               }
26311 -
26312 -               REG_WRITE(ah, AR_INTR_SYNC_CAUSE_CLR, sync_cause);
26313 -               (void) REG_READ(ah, AR_INTR_SYNC_CAUSE_CLR);
26314 -       }
26315 -
26316 -       return true;
26317 -}
26318 -EXPORT_SYMBOL(ath9k_hw_getisr);
26319 -
26320 -enum ath9k_int ath9k_hw_set_interrupts(struct ath_hw *ah, enum ath9k_int ints)
26321 -{
26322 -       enum ath9k_int omask = ah->imask;
26323 -       u32 mask, mask2;
26324 -       struct ath9k_hw_capabilities *pCap = &ah->caps;
26325 -       struct ath_common *common = ath9k_hw_common(ah);
26326 -
26327 -       ath_print(common, ATH_DBG_INTERRUPT, "0x%x => 0x%x\n", omask, ints);
26328 -
26329 -       if (omask & ATH9K_INT_GLOBAL) {
26330 -               ath_print(common, ATH_DBG_INTERRUPT, "disable IER\n");
26331 -               REG_WRITE(ah, AR_IER, AR_IER_DISABLE);
26332 -               (void) REG_READ(ah, AR_IER);
26333 -               if (!AR_SREV_9100(ah)) {
26334 -                       REG_WRITE(ah, AR_INTR_ASYNC_ENABLE, 0);
26335 -                       (void) REG_READ(ah, AR_INTR_ASYNC_ENABLE);
26336 -
26337 -                       REG_WRITE(ah, AR_INTR_SYNC_ENABLE, 0);
26338 -                       (void) REG_READ(ah, AR_INTR_SYNC_ENABLE);
26339 -               }
26340 -       }
26341 -
26342 -       mask = ints & ATH9K_INT_COMMON;
26343 -       mask2 = 0;
26344 -
26345 -       if (ints & ATH9K_INT_TX) {
26346 -               if (ah->txok_interrupt_mask)
26347 -                       mask |= AR_IMR_TXOK;
26348 -               if (ah->txdesc_interrupt_mask)
26349 -                       mask |= AR_IMR_TXDESC;
26350 -               if (ah->txerr_interrupt_mask)
26351 -                       mask |= AR_IMR_TXERR;
26352 -               if (ah->txeol_interrupt_mask)
26353 -                       mask |= AR_IMR_TXEOL;
26354 -       }
26355 -       if (ints & ATH9K_INT_RX) {
26356 -               mask |= AR_IMR_RXERR;
26357 -               if (ah->config.rx_intr_mitigation)
26358 -                       mask |= AR_IMR_RXMINTR | AR_IMR_RXINTM;
26359 -               else
26360 -                       mask |= AR_IMR_RXOK | AR_IMR_RXDESC;
26361 -               if (!(pCap->hw_caps & ATH9K_HW_CAP_AUTOSLEEP))
26362 -                       mask |= AR_IMR_GENTMR;
26363 -       }
26364 -
26365 -       if (ints & (ATH9K_INT_BMISC)) {
26366 -               mask |= AR_IMR_BCNMISC;
26367 -               if (ints & ATH9K_INT_TIM)
26368 -                       mask2 |= AR_IMR_S2_TIM;
26369 -               if (ints & ATH9K_INT_DTIM)
26370 -                       mask2 |= AR_IMR_S2_DTIM;
26371 -               if (ints & ATH9K_INT_DTIMSYNC)
26372 -                       mask2 |= AR_IMR_S2_DTIMSYNC;
26373 -               if (ints & ATH9K_INT_CABEND)
26374 -                       mask2 |= AR_IMR_S2_CABEND;
26375 -               if (ints & ATH9K_INT_TSFOOR)
26376 -                       mask2 |= AR_IMR_S2_TSFOOR;
26377 -       }
26378 -
26379 -       if (ints & (ATH9K_INT_GTT | ATH9K_INT_CST)) {
26380 -               mask |= AR_IMR_BCNMISC;
26381 -               if (ints & ATH9K_INT_GTT)
26382 -                       mask2 |= AR_IMR_S2_GTT;
26383 -               if (ints & ATH9K_INT_CST)
26384 -                       mask2 |= AR_IMR_S2_CST;
26385 -       }
26386 -
26387 -       ath_print(common, ATH_DBG_INTERRUPT, "new IMR 0x%x\n", mask);
26388 -       REG_WRITE(ah, AR_IMR, mask);
26389 -       ah->imrs2_reg &= ~(AR_IMR_S2_TIM | AR_IMR_S2_DTIM | AR_IMR_S2_DTIMSYNC |
26390 -                          AR_IMR_S2_CABEND | AR_IMR_S2_CABTO |
26391 -                          AR_IMR_S2_TSFOOR | AR_IMR_S2_GTT | AR_IMR_S2_CST);
26392 -       ah->imrs2_reg |= mask2;
26393 -       REG_WRITE(ah, AR_IMR_S2, ah->imrs2_reg);
26394 -
26395 -       if (!(pCap->hw_caps & ATH9K_HW_CAP_AUTOSLEEP)) {
26396 -               if (ints & ATH9K_INT_TIM_TIMER)
26397 -                       REG_SET_BIT(ah, AR_IMR_S5, AR_IMR_S5_TIM_TIMER);
26398 -               else
26399 -                       REG_CLR_BIT(ah, AR_IMR_S5, AR_IMR_S5_TIM_TIMER);
26400 -       }
26401 -
26402 -       if (ints & ATH9K_INT_GLOBAL) {
26403 -               ath_print(common, ATH_DBG_INTERRUPT, "enable IER\n");
26404 -               REG_WRITE(ah, AR_IER, AR_IER_ENABLE);
26405 -               if (!AR_SREV_9100(ah)) {
26406 -                       REG_WRITE(ah, AR_INTR_ASYNC_ENABLE,
26407 -                                 AR_INTR_MAC_IRQ);
26408 -                       REG_WRITE(ah, AR_INTR_ASYNC_MASK, AR_INTR_MAC_IRQ);
26409 -
26410 -
26411 -                       REG_WRITE(ah, AR_INTR_SYNC_ENABLE,
26412 -                                 AR_INTR_SYNC_DEFAULT);
26413 -                       REG_WRITE(ah, AR_INTR_SYNC_MASK,
26414 -                                 AR_INTR_SYNC_DEFAULT);
26415 -               }
26416 -               ath_print(common, ATH_DBG_INTERRUPT, "AR_IMR 0x%x IER 0x%x\n",
26417 -                         REG_READ(ah, AR_IMR), REG_READ(ah, AR_IER));
26418 -       }
26419 -
26420 -       return omask;
26421 -}
26422 -EXPORT_SYMBOL(ath9k_hw_set_interrupts);
26423 -
26424  /*******************/
26425  /* Beacon Handling */
26426  /*******************/
26427 @@ -3240,6 +2088,24 @@ int ath9k_hw_fill_cap_info(struct ath_hw *ah)
26428                 btcoex_hw->scheme = ATH_BTCOEX_CFG_NONE;
26429         }
26430  
26431 +       if (AR_SREV_9300_20_OR_LATER(ah)) {
26432 +               pCap->hw_caps |= ATH9K_HW_CAP_EDMA | ATH9K_HW_CAP_LDPC;
26433 +               pCap->rx_hp_qdepth = ATH9K_HW_RX_HP_QDEPTH;
26434 +               if (AR_SREV_9300_20_OR_LATER(ah))
26435 +                       pCap->rx_lp_qdepth = ATH9K_HW_RX_LP_QDEPTH;
26436 +               else
26437 +                       pCap->rx_lp_qdepth = ATH9K_HW_RX_LP_QDEPTH_AR9300_10;
26438 +
26439 +               pCap->rx_status_len = sizeof(struct ar9003_rxs);
26440 +               pCap->tx_desc_len = sizeof(struct ar9003_txc);
26441 +               pCap->txs_len = sizeof(struct ar9003_txs);
26442 +       } else {
26443 +               pCap->tx_desc_len = sizeof(struct ath_desc);
26444 +       }
26445 +
26446 +       if (AR_SREV_9300_20_OR_LATER(ah))
26447 +               pCap->hw_caps |= ATH9K_HW_CAP_RAC_SUPPORTED;
26448 +
26449         return 0;
26450  }
26451  
26452 @@ -3272,10 +2138,6 @@ bool ath9k_hw_getcapability(struct ath_hw *ah, enum ath9k_capability_type type,
26453         case ATH9K_CAP_TKIP_SPLIT:
26454                 return (ah->misc_mode & AR_PCU_MIC_NEW_LOC_ENA) ?
26455                         false : true;
26456 -       case ATH9K_CAP_DIVERSITY:
26457 -               return (REG_READ(ah, AR_PHY_CCK_DETECT) &
26458 -                       AR_PHY_CCK_DETECT_BB_ENABLE_ANT_FAST_DIV) ?
26459 -                       true : false;
26460         case ATH9K_CAP_MCAST_KEYSRCH:
26461                 switch (capability) {
26462                 case 0:
26463 @@ -3318,8 +2180,6 @@ EXPORT_SYMBOL(ath9k_hw_getcapability);
26464  bool ath9k_hw_setcapability(struct ath_hw *ah, enum ath9k_capability_type type,
26465                             u32 capability, u32 setting, int *status)
26466  {
26467 -       u32 v;
26468 -
26469         switch (type) {
26470         case ATH9K_CAP_TKIP_MIC:
26471                 if (setting)
26472 @@ -3329,14 +2189,6 @@ bool ath9k_hw_setcapability(struct ath_hw *ah, enum ath9k_capability_type type,
26473                         ah->sta_id1_defaults &=
26474                                 ~AR_STA_ID1_CRPT_MIC_ENABLE;
26475                 return true;
26476 -       case ATH9K_CAP_DIVERSITY:
26477 -               v = REG_READ(ah, AR_PHY_CCK_DETECT);
26478 -               if (setting)
26479 -                       v |= AR_PHY_CCK_DETECT_BB_ENABLE_ANT_FAST_DIV;
26480 -               else
26481 -                       v &= ~AR_PHY_CCK_DETECT_BB_ENABLE_ANT_FAST_DIV;
26482 -               REG_WRITE(ah, AR_PHY_CCK_DETECT, v);
26483 -               return true;
26484         case ATH9K_CAP_MCAST_KEYSRCH:
26485                 if (setting)
26486                         ah->sta_id1_defaults |= AR_STA_ID1_MCAST_KSRCH;
26487 @@ -3404,7 +2256,9 @@ u32 ath9k_hw_gpio_get(struct ath_hw *ah, u32 gpio)
26488         if (gpio >= ah->caps.num_gpio_pins)
26489                 return 0xffffffff;
26490  
26491 -       if (AR_SREV_9271(ah))
26492 +       if (AR_SREV_9300_20_OR_LATER(ah))
26493 +               return MS_REG_READ(AR9300, gpio) != 0;
26494 +       else if (AR_SREV_9271(ah))
26495                 return MS_REG_READ(AR9271, gpio) != 0;
26496         else if (AR_SREV_9287_10_OR_LATER(ah))
26497                 return MS_REG_READ(AR9287, gpio) != 0;
26498 @@ -3846,6 +2700,7 @@ static struct {
26499         { AR_SREV_VERSION_9285,         "9285" },
26500         { AR_SREV_VERSION_9287,         "9287" },
26501         { AR_SREV_VERSION_9271,         "9271" },
26502 +       { AR_SREV_VERSION_9300,         "9300" },
26503  };
26504  
26505  /* For devices with external radios */
26506 diff --git a/drivers/net/wireless/ath/ath9k/hw.h b/drivers/net/wireless/ath/ath9k/hw.h
26507 index f4821cf..43a1a44 100644
26508 --- a/drivers/net/wireless/ath/ath9k/hw.h
26509 +++ b/drivers/net/wireless/ath/ath9k/hw.h
26510 @@ -1,5 +1,5 @@
26511  /*
26512 - * Copyright (c) 2008-2009 Atheros Communications Inc.
26513 + * Copyright (c) 2008-2010 Atheros Communications Inc.
26514   *
26515   * Permission to use, copy, modify, and/or distribute this software for any
26516   * purpose with or without fee is hereby granted, provided that the above
26517 @@ -28,6 +28,7 @@
26518  #include "reg.h"
26519  #include "phy.h"
26520  #include "btcoex.h"
26521 +#include "ar9003_mac.h"
26522  
26523  #include "../regd.h"
26524  #include "../debug.h"
26525 @@ -41,6 +42,9 @@
26526  #define AR9280_DEVID_PCIE      0x002a
26527  #define AR9285_DEVID_PCIE      0x002b
26528  #define AR2427_DEVID_PCIE      0x002c
26529 +#define AR9287_DEVID_PCI       0x002d
26530 +#define AR9287_DEVID_PCIE      0x002e
26531 +#define AR9300_DEVID_PCIE      0x0030
26532  
26533  #define AR5416_AR9100_DEVID    0x000b
26534  
26535 @@ -48,9 +52,6 @@
26536  #define AR_SUBVENDOR_ID_NEW_A  0x7065
26537  #define AR5416_MAGIC           0x19641014
26538  
26539 -#define AR5416_DEVID_AR9287_PCI  0x002D
26540 -#define AR5416_DEVID_AR9287_PCIE 0x002E
26541 -
26542  #define AR9280_COEX2WIRE_SUBSYSID      0x309b
26543  #define AT9285_COEX3WIRE_SA_SUBSYSID   0x30aa
26544  #define AT9285_COEX3WIRE_DA_SUBSYSID   0x30ab
26545 @@ -75,6 +76,8 @@
26546  #define REG_RMW_FIELD(_a, _r, _f, _v) \
26547         REG_WRITE(_a, _r, \
26548         (REG_READ(_a, _r) & ~_f) | (((_v) << _f##_S) & _f))
26549 +#define REG_READ_FIELD(_a, _r, _f) \
26550 +       (((REG_READ(_a, _r) & _f) >> _f##_S))
26551  #define REG_SET_BIT(_a, _r, _f) \
26552         REG_WRITE(_a, _r, REG_READ(_a, _r) | _f)
26553  #define REG_CLR_BIT(_a, _r, _f) \
26554 @@ -135,6 +138,17 @@
26555  
26556  #define TU_TO_USEC(_tu)             ((_tu) << 10)
26557  
26558 +#define ATH9K_HW_RX_HP_QDEPTH  16
26559 +#define ATH9K_HW_RX_LP_QDEPTH_AR9300_10        64
26560 +#define ATH9K_HW_RX_LP_QDEPTH  128
26561 +
26562 +enum ath_ini_subsys {
26563 +       ATH_INI_PRE = 0,
26564 +       ATH_INI_CORE,
26565 +       ATH_INI_POST,
26566 +       ATH_INI_NUM_SPLIT,
26567 +};
26568 +
26569  enum wireless_mode {
26570         ATH9K_MODE_11A = 0,
26571         ATH9K_MODE_11G,
26572 @@ -165,13 +179,15 @@ enum ath9k_hw_caps {
26573         ATH9K_HW_CAP_ENHANCEDPM                 = BIT(14),
26574         ATH9K_HW_CAP_AUTOSLEEP                  = BIT(15),
26575         ATH9K_HW_CAP_4KB_SPLITTRANS             = BIT(16),
26576 +       ATH9K_HW_CAP_EDMA                       = BIT(17),
26577 +       ATH9K_HW_CAP_RAC_SUPPORTED              = BIT(18),
26578 +       ATH9K_HW_CAP_LDPC                       = BIT(19),
26579  };
26580  
26581  enum ath9k_capability_type {
26582         ATH9K_CAP_CIPHER = 0,
26583         ATH9K_CAP_TKIP_MIC,
26584         ATH9K_CAP_TKIP_SPLIT,
26585 -       ATH9K_CAP_DIVERSITY,
26586         ATH9K_CAP_TXPOW,
26587         ATH9K_CAP_MCAST_KEYSRCH,
26588         ATH9K_CAP_DS
26589 @@ -192,6 +208,11 @@ struct ath9k_hw_capabilities {
26590         u8 num_gpio_pins;
26591         u8 num_antcfg_2ghz;
26592         u8 num_antcfg_5ghz;
26593 +       u8 rx_hp_qdepth;
26594 +       u8 rx_lp_qdepth;
26595 +       u8 rx_status_len;
26596 +       u8 tx_desc_len;
26597 +       u8 txs_len;
26598  };
26599  
26600  struct ath9k_ops_config {
26601 @@ -212,6 +233,7 @@ struct ath9k_ops_config {
26602         u32 enable_ani;
26603         int serialize_regmode;
26604         bool rx_intr_mitigation;
26605 +       bool tx_intr_mitigation;
26606  #define SPUR_DISABLE           0
26607  #define SPUR_ENABLE_IOCTL      1
26608  #define SPUR_ENABLE_EEPROM     2
26609 @@ -231,6 +253,8 @@ struct ath9k_ops_config {
26610  enum ath9k_int {
26611         ATH9K_INT_RX = 0x00000001,
26612         ATH9K_INT_RXDESC = 0x00000002,
26613 +       ATH9K_INT_RXHP = 0x00000001,
26614 +       ATH9K_INT_RXLP = 0x00000002,
26615         ATH9K_INT_RXNOFRM = 0x00000008,
26616         ATH9K_INT_RXEOL = 0x00000010,
26617         ATH9K_INT_RXORN = 0x00000020,
26618 @@ -440,6 +464,125 @@ struct ath_gen_timer_table {
26619         } timer_mask;
26620  };
26621  
26622 +/**
26623 + * struct ath_hw_private_ops - callbacks used internally by hardware code
26624 + *
26625 + * This structure contains private callbacks designed to only be used internally
26626 + * by the hardware core.
26627 + *
26628 + * @init_cal_settings: setup types of calibrations supported
26629 + * @init_cal: starts actual calibration
26630 + *
26631 + * @init_mode_regs: Initializes mode registers
26632 + * @init_mode_gain_regs: Initialize TX/RX gain registers
26633 + * @macversion_supported: If this specific mac revision is supported
26634 + *
26635 + * @rf_set_freq: change frequency
26636 + * @spur_mitigate_freq: spur mitigation
26637 + * @rf_alloc_ext_banks:
26638 + * @rf_free_ext_banks:
26639 + * @set_rf_regs:
26640 + * @compute_pll_control: compute the PLL control value to use for
26641 + *     AR_RTC_PLL_CONTROL for a given channel
26642 + * @setup_calibration: set up calibration
26643 + * @iscal_supported: used to query if a type of calibration is supported
26644 + * @loadnf: load noise floor read from each chain on the CCA registers
26645 + */
26646 +struct ath_hw_private_ops {
26647 +       /* Calibration ops */
26648 +       void (*init_cal_settings)(struct ath_hw *ah);
26649 +       bool (*init_cal)(struct ath_hw *ah, struct ath9k_channel *chan);
26650 +
26651 +       void (*init_mode_regs)(struct ath_hw *ah);
26652 +       void (*init_mode_gain_regs)(struct ath_hw *ah);
26653 +       bool (*macversion_supported)(u32 macversion);
26654 +       void (*setup_calibration)(struct ath_hw *ah,
26655 +                                 struct ath9k_cal_list *currCal);
26656 +       bool (*iscal_supported)(struct ath_hw *ah,
26657 +                               enum ath9k_cal_types calType);
26658 +
26659 +       /* PHY ops */
26660 +       int (*rf_set_freq)(struct ath_hw *ah,
26661 +                          struct ath9k_channel *chan);
26662 +       void (*spur_mitigate_freq)(struct ath_hw *ah,
26663 +                                  struct ath9k_channel *chan);
26664 +       int (*rf_alloc_ext_banks)(struct ath_hw *ah);
26665 +       void (*rf_free_ext_banks)(struct ath_hw *ah);
26666 +       bool (*set_rf_regs)(struct ath_hw *ah,
26667 +                           struct ath9k_channel *chan,
26668 +                           u16 modesIndex);
26669 +       void (*set_channel_regs)(struct ath_hw *ah, struct ath9k_channel *chan);
26670 +       void (*init_bb)(struct ath_hw *ah,
26671 +                       struct ath9k_channel *chan);
26672 +       int (*process_ini)(struct ath_hw *ah, struct ath9k_channel *chan);
26673 +       void (*olc_init)(struct ath_hw *ah);
26674 +       void (*set_rfmode)(struct ath_hw *ah, struct ath9k_channel *chan);
26675 +       void (*mark_phy_inactive)(struct ath_hw *ah);
26676 +       void (*set_delta_slope)(struct ath_hw *ah, struct ath9k_channel *chan);
26677 +       bool (*rfbus_req)(struct ath_hw *ah);
26678 +       void (*rfbus_done)(struct ath_hw *ah);
26679 +       void (*enable_rfkill)(struct ath_hw *ah);
26680 +       void (*restore_chainmask)(struct ath_hw *ah);
26681 +       void (*set_diversity)(struct ath_hw *ah, bool value);
26682 +       u32 (*compute_pll_control)(struct ath_hw *ah,
26683 +                                  struct ath9k_channel *chan);
26684 +       bool (*ani_control)(struct ath_hw *ah, enum ath9k_ani_cmd cmd,
26685 +                           int param);
26686 +       void (*do_getnf)(struct ath_hw *ah, int16_t nfarray[NUM_NF_READINGS]);
26687 +       void (*loadnf)(struct ath_hw *ah, struct ath9k_channel *chan);
26688 +};
26689 +
26690 +/**
26691 + * struct ath_hw_ops - callbacks used by hardware code and driver code
26692 + *
26693 + * This structure contains callbacks designed to to be used internally by
26694 + * hardware code and also by the lower level driver.
26695 + *
26696 + * @config_pci_powersave:
26697 + * @calibrate: periodic calibration for NF, ANI, IQ, ADC gain, ADC-DC
26698 + */
26699 +struct ath_hw_ops {
26700 +       void (*config_pci_powersave)(struct ath_hw *ah,
26701 +                                    int restore,
26702 +                                    int power_off);
26703 +       void (*rx_enable)(struct ath_hw *ah);
26704 +       void (*set_desc_link)(void *ds, u32 link);
26705 +       void (*get_desc_link)(void *ds, u32 **link);
26706 +       bool (*calibrate)(struct ath_hw *ah,
26707 +                         struct ath9k_channel *chan,
26708 +                         u8 rxchainmask,
26709 +                         bool longcal);
26710 +       bool (*get_isr)(struct ath_hw *ah, enum ath9k_int *masked);
26711 +       void (*fill_txdesc)(struct ath_hw *ah, void *ds, u32 seglen,
26712 +                           bool is_firstseg, bool is_is_lastseg,
26713 +                           const void *ds0, dma_addr_t buf_addr,
26714 +                           unsigned int qcu);
26715 +       void (*clear_txdesc)(struct ath_hw *ah, void *ds);
26716 +       int (*proc_txdesc)(struct ath_hw *ah, void *ds,
26717 +                          struct ath_tx_status *ts);
26718 +       void (*set11n_txdesc)(struct ath_hw *ah, void *ds,
26719 +                             u32 pktLen, enum ath9k_pkt_type type,
26720 +                             u32 txPower, u32 keyIx,
26721 +                             enum ath9k_key_type keyType,
26722 +                             u32 flags);
26723 +       void (*set11n_ratescenario)(struct ath_hw *ah, void *ds,
26724 +                               void *lastds,
26725 +                               u32 durUpdateEn, u32 rtsctsRate,
26726 +                               u32 rtsctsDuration,
26727 +                               struct ath9k_11n_rate_series series[],
26728 +                               u32 nseries, u32 flags);
26729 +       void (*set11n_aggr_first)(struct ath_hw *ah, void *ds,
26730 +                                 u32 aggrLen);
26731 +       void (*set11n_aggr_middle)(struct ath_hw *ah, void *ds,
26732 +                                  u32 numDelims);
26733 +       void (*set11n_aggr_last)(struct ath_hw *ah, void *ds);
26734 +       void (*clr11n_aggr)(struct ath_hw *ah, void *ds);
26735 +       void (*set11n_burstduration)(struct ath_hw *ah, void *ds,
26736 +                                    u32 burstDuration);
26737 +       void (*set11n_virtualmorefrag)(struct ath_hw *ah, void *ds,
26738 +                                      u32 vmf);
26739 +};
26740 +
26741  struct ath_hw {
26742         struct ieee80211_hw *hw;
26743         struct ath_common common;
26744 @@ -453,14 +596,18 @@ struct ath_hw {
26745                 struct ar5416_eeprom_def def;
26746                 struct ar5416_eeprom_4k map4k;
26747                 struct ar9287_eeprom map9287;
26748 +               struct ar9300_eeprom ar9300_eep;
26749         } eeprom;
26750         const struct eeprom_ops *eep_ops;
26751 -       enum ath9k_eep_map eep_map;
26752  
26753         bool sw_mgmt_crypto;
26754         bool is_pciexpress;
26755         bool need_an_top2_fixup;
26756         u16 tx_trig_level;
26757 +       s16 nf_2g_max;
26758 +       s16 nf_2g_min;
26759 +       s16 nf_5g_max;
26760 +       s16 nf_5g_min;
26761         u16 rfsilent;
26762         u32 rfkill_gpio;
26763         u32 rfkill_polarity;
26764 @@ -493,6 +640,7 @@ struct ath_hw {
26765         struct ath9k_cal_list adcgain_caldata;
26766         struct ath9k_cal_list adcdc_calinitdata;
26767         struct ath9k_cal_list adcdc_caldata;
26768 +       struct ath9k_cal_list tempCompCalData;
26769         struct ath9k_cal_list *cal_list;
26770         struct ath9k_cal_list *cal_list_last;
26771         struct ath9k_cal_list *cal_list_curr;
26772 @@ -533,12 +681,10 @@ struct ath_hw {
26773                 DONT_USE_32KHZ,
26774         } enable_32kHz_clock;
26775  
26776 -       /* Callback for radio frequency change */
26777 -       int (*ath9k_hw_rf_set_freq)(struct ath_hw *ah, struct ath9k_channel *chan);
26778 -
26779 -       /* Callback for baseband spur frequency */
26780 -       void (*ath9k_hw_spur_mitigate_freq)(struct ath_hw *ah,
26781 -                                           struct ath9k_channel *chan);
26782 +       /* Private to hardware code */
26783 +       struct ath_hw_private_ops private_ops;
26784 +       /* Accessed by the lower level driver */
26785 +       struct ath_hw_ops ops;
26786  
26787         /* Used to program the radio on non single-chip devices */
26788         u32 *analogBank0Data;
26789 @@ -592,6 +738,7 @@ struct ath_hw {
26790         struct ar5416IniArray iniBank7;
26791         struct ar5416IniArray iniAddac;
26792         struct ar5416IniArray iniPcieSerdes;
26793 +       struct ar5416IniArray iniPcieSerdesLowPower;
26794         struct ar5416IniArray iniModesAdditional;
26795         struct ar5416IniArray iniModesRxGain;
26796         struct ar5416IniArray iniModesTxGain;
26797 @@ -604,9 +751,21 @@ struct ath_hw {
26798         struct ar5416IniArray iniModes_high_power_tx_gain_9271;
26799         struct ar5416IniArray iniModes_normal_power_tx_gain_9271;
26800  
26801 +       struct ar5416IniArray iniMac[ATH_INI_NUM_SPLIT];
26802 +       struct ar5416IniArray iniBB[ATH_INI_NUM_SPLIT];
26803 +       struct ar5416IniArray iniRadio[ATH_INI_NUM_SPLIT];
26804 +       struct ar5416IniArray iniSOC[ATH_INI_NUM_SPLIT];
26805 +
26806         u32 intr_gen_timer_trigger;
26807         u32 intr_gen_timer_thresh;
26808         struct ath_gen_timer_table hw_gen_timers;
26809 +
26810 +       struct ar9003_txs *ts_ring;
26811 +       void *ts_start;
26812 +       u32 ts_paddr_start;
26813 +       u32 ts_paddr_end;
26814 +       u16 ts_tail;
26815 +       u8 ts_size;
26816  };
26817  
26818  static inline struct ath_common *ath9k_hw_common(struct ath_hw *ah)
26819 @@ -619,6 +778,16 @@ static inline struct ath_regulatory *ath9k_hw_regulatory(struct ath_hw *ah)
26820         return &(ath9k_hw_common(ah)->regulatory);
26821  }
26822  
26823 +static inline struct ath_hw_private_ops *ath9k_hw_private_ops(struct ath_hw *ah)
26824 +{
26825 +       return &ah->private_ops;
26826 +}
26827 +
26828 +static inline struct ath_hw_ops *ath9k_hw_ops(struct ath_hw *ah)
26829 +{
26830 +       return &ah->ops;
26831 +}
26832 +
26833  /* Initialization, Detach, Reset */
26834  const char *ath9k_hw_probe(u16 vendorid, u16 devid);
26835  void ath9k_hw_deinit(struct ath_hw *ah);
26836 @@ -630,6 +799,7 @@ bool ath9k_hw_getcapability(struct ath_hw *ah, enum ath9k_capability_type type,
26837                             u32 capability, u32 *result);
26838  bool ath9k_hw_setcapability(struct ath_hw *ah, enum ath9k_capability_type type,
26839                             u32 capability, u32 setting, int *status);
26840 +u32 ath9k_regd_get_ctl(struct ath_regulatory *reg, struct ath9k_channel *chan);
26841  
26842  /* Key Cache Management */
26843  bool ath9k_hw_keyreset(struct ath_hw *ah, u16 entry);
26844 @@ -681,13 +851,6 @@ void ath9k_hw_set_sta_beacon_timers(struct ath_hw *ah,
26845  
26846  bool ath9k_hw_setpower(struct ath_hw *ah, enum ath9k_power_mode mode);
26847  
26848 -void ath9k_hw_configpcipowersave(struct ath_hw *ah, int restore, int power_off);
26849 -
26850 -/* Interrupt Handling */
26851 -bool ath9k_hw_intrpend(struct ath_hw *ah);
26852 -bool ath9k_hw_getisr(struct ath_hw *ah, enum ath9k_int *masked);
26853 -enum ath9k_int ath9k_hw_set_interrupts(struct ath_hw *ah, enum ath9k_int ints);
26854 -
26855  /* Generic hw timer primitives */
26856  struct ath_gen_timer *ath_gen_timer_alloc(struct ath_hw *ah,
26857                                           void (*trigger)(void *),
26858 @@ -709,6 +872,36 @@ void ath9k_hw_name(struct ath_hw *ah, char *hw_name, size_t len);
26859  /* HTC */
26860  void ath9k_hw_htc_resetinit(struct ath_hw *ah);
26861  
26862 +/* PHY */
26863 +void ath9k_hw_get_delta_slope_vals(struct ath_hw *ah, u32 coef_scaled,
26864 +                                  u32 *coef_mantissa, u32 *coef_exponent);
26865 +
26866 +/*
26867 + * Code Specific to AR5008, AR9001 or AR9002,
26868 + * we stuff these here to avoid callbacks for AR9003.
26869 + */
26870 +void ar9002_hw_cck_chan14_spread(struct ath_hw *ah);
26871 +int ar9002_hw_rf_claim(struct ath_hw *ah);
26872 +void ar9002_hw_enable_async_fifo(struct ath_hw *ah);
26873 +void ar9002_hw_enable_wep_aggregation(struct ath_hw *ah);
26874 +
26875 +/*
26876 + * Code specifric to AR9003, we stuff these here to avoid callbacks
26877 + * for older families
26878 + */
26879 +void ar9003_hw_set_nf_limits(struct ath_hw *ah);
26880 +
26881 +/* Hardware family op attach helpers */
26882 +void ar5008_hw_attach_phy_ops(struct ath_hw *ah);
26883 +void ar9002_hw_attach_phy_ops(struct ath_hw *ah);
26884 +void ar9003_hw_attach_phy_ops(struct ath_hw *ah);
26885 +
26886 +void ar9002_hw_attach_calib_ops(struct ath_hw *ah);
26887 +void ar9003_hw_attach_calib_ops(struct ath_hw *ah);
26888 +
26889 +void ar9002_hw_attach_ops(struct ath_hw *ah);
26890 +void ar9003_hw_attach_ops(struct ath_hw *ah);
26891 +
26892  #define ATH_PCIE_CAP_LINK_CTRL 0x70
26893  #define ATH_PCIE_CAP_LINK_L0S  1
26894  #define ATH_PCIE_CAP_LINK_L1   2
26895 diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c
26896 index 6063f54..5adc2e3 100644
26897 --- a/drivers/net/wireless/ath/ath9k/init.c
26898 +++ b/drivers/net/wireless/ath/ath9k/init.c
26899 @@ -189,6 +189,9 @@ static void setup_ht_cap(struct ath_softc *sc,
26900                        IEEE80211_HT_CAP_SGI_40 |
26901                        IEEE80211_HT_CAP_DSSSCCK40;
26902  
26903 +       if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_LDPC)
26904 +               ht_info->cap |= IEEE80211_HT_CAP_LDPC_CODING;
26905 +
26906         ht_info->ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
26907         ht_info->ampdu_density = IEEE80211_HT_MPDU_DENSITY_8;
26908  
26909 @@ -233,31 +236,37 @@ static int ath9k_reg_notifier(struct wiphy *wiphy,
26910  */
26911  int ath_descdma_setup(struct ath_softc *sc, struct ath_descdma *dd,
26912                       struct list_head *head, const char *name,
26913 -                     int nbuf, int ndesc)
26914 +                     int nbuf, int ndesc, bool is_tx)
26915  {
26916  #define        DS2PHYS(_dd, _ds)                                               \
26917         ((_dd)->dd_desc_paddr + ((caddr_t)(_ds) - (caddr_t)(_dd)->dd_desc))
26918  #define ATH_DESC_4KB_BOUND_CHECK(_daddr) ((((_daddr) & 0xFFF) > 0xF7F) ? 1 : 0)
26919  #define ATH_DESC_4KB_BOUND_NUM_SKIPPED(_len) ((_len) / 4096)
26920         struct ath_common *common = ath9k_hw_common(sc->sc_ah);
26921 -       struct ath_desc *ds;
26922 +       u8 *ds;
26923         struct ath_buf *bf;
26924 -       int i, bsize, error;
26925 +       int i, bsize, error, desc_len;
26926  
26927         ath_print(common, ATH_DBG_CONFIG, "%s DMA: %u buffers %u desc/buf\n",
26928                   name, nbuf, ndesc);
26929  
26930         INIT_LIST_HEAD(head);
26931 +
26932 +       if (is_tx)
26933 +               desc_len = sc->sc_ah->caps.tx_desc_len;
26934 +       else
26935 +               desc_len = sizeof(struct ath_desc);
26936 +
26937         /* ath_desc must be a multiple of DWORDs */
26938 -       if ((sizeof(struct ath_desc) % 4) != 0) {
26939 +       if ((desc_len % 4) != 0) {
26940                 ath_print(common, ATH_DBG_FATAL,
26941                           "ath_desc not DWORD aligned\n");
26942 -               BUG_ON((sizeof(struct ath_desc) % 4) != 0);
26943 +               BUG_ON((desc_len % 4) != 0);
26944                 error = -ENOMEM;
26945                 goto fail;
26946         }
26947  
26948 -       dd->dd_desc_len = sizeof(struct ath_desc) * nbuf * ndesc;
26949 +       dd->dd_desc_len = desc_len * nbuf * ndesc;
26950  
26951         /*
26952          * Need additional DMA memory because we can't use
26953 @@ -270,7 +279,7 @@ int ath_descdma_setup(struct ath_softc *sc, struct ath_descdma *dd,
26954                 u32 dma_len;
26955  
26956                 while (ndesc_skipped) {
26957 -                       dma_len = ndesc_skipped * sizeof(struct ath_desc);
26958 +                       dma_len = ndesc_skipped * desc_len;
26959                         dd->dd_desc_len += dma_len;
26960  
26961                         ndesc_skipped = ATH_DESC_4KB_BOUND_NUM_SKIPPED(dma_len);
26962 @@ -284,7 +293,7 @@ int ath_descdma_setup(struct ath_softc *sc, struct ath_descdma *dd,
26963                 error = -ENOMEM;
26964                 goto fail;
26965         }
26966 -       ds = dd->dd_desc;
26967 +       ds = (u8 *) dd->dd_desc;
26968         ath_print(common, ATH_DBG_CONFIG, "%s DMA map: %p (%u) -> %llx (%u)\n",
26969                   name, ds, (u32) dd->dd_desc_len,
26970                   ito64(dd->dd_desc_paddr), /*XXX*/(u32) dd->dd_desc_len);
26971 @@ -298,7 +307,7 @@ int ath_descdma_setup(struct ath_softc *sc, struct ath_descdma *dd,
26972         }
26973         dd->dd_bufptr = bf;
26974  
26975 -       for (i = 0; i < nbuf; i++, bf++, ds += ndesc) {
26976 +       for (i = 0; i < nbuf; i++, bf++, ds += (desc_len * ndesc)) {
26977                 bf->bf_desc = ds;
26978                 bf->bf_daddr = DS2PHYS(dd, ds);
26979  
26980 @@ -314,7 +323,7 @@ int ath_descdma_setup(struct ath_softc *sc, struct ath_descdma *dd,
26981                                        ((caddr_t) dd->dd_desc +
26982                                         dd->dd_desc_len));
26983  
26984 -                               ds += ndesc;
26985 +                               ds += (desc_len * ndesc);
26986                                 bf->bf_desc = ds;
26987                                 bf->bf_daddr = DS2PHYS(dd, ds);
26988                         }
26989 @@ -512,7 +521,7 @@ static void ath9k_init_misc(struct ath_softc *sc)
26990         common->tx_chainmask = sc->sc_ah->caps.tx_chainmask;
26991         common->rx_chainmask = sc->sc_ah->caps.rx_chainmask;
26992  
26993 -       ath9k_hw_setcapability(sc->sc_ah, ATH9K_CAP_DIVERSITY, 1, true, NULL);
26994 +       ath9k_hw_set_diversity(sc->sc_ah, true);
26995         sc->rx.defant = ath9k_hw_getdefantenna(sc->sc_ah);
26996  
26997         if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_BSSIDMASK)
26998 @@ -566,13 +575,10 @@ static int ath9k_init_softc(u16 devid, struct ath_softc *sc, u16 subsysid,
26999         ath_read_cachesize(common, &csz);
27000         common->cachelsz = csz << 2; /* convert to bytes */
27001  
27002 +       /* Initializes the hardware for all supported chipsets */
27003         ret = ath9k_hw_init(ah);
27004 -       if (ret) {
27005 -               ath_print(common, ATH_DBG_FATAL,
27006 -                         "Unable to initialize hardware; "
27007 -                         "initialization status: %d\n", ret);
27008 +       if (ret)
27009                 goto err_hw;
27010 -       }
27011  
27012         ret = ath9k_init_debug(ah);
27013         if (ret) {
27014 diff --git a/drivers/net/wireless/ath/ath9k/initvals.h b/drivers/net/wireless/ath/ath9k/initvals.h
27015 deleted file mode 100644
27016 index 455e9d3..0000000
27017 --- a/drivers/net/wireless/ath/ath9k/initvals.h
27018 +++ /dev/null
27019 @@ -1,7200 +0,0 @@
27020 -/*
27021 - * Copyright (c) 2008-2009 Atheros Communications Inc.
27022 - *
27023 - * Permission to use, copy, modify, and/or distribute this software for any
27024 - * purpose with or without fee is hereby granted, provided that the above
27025 - * copyright notice and this permission notice appear in all copies.
27026 - *
27027 - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
27028 - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
27029 - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
27030 - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
27031 - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
27032 - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
27033 - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
27034 - */
27035 -
27036 -static const u32 ar5416Modes[][6] = {
27037 -    { 0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160, 0x000001e0 },
27038 -    { 0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c, 0x000001e0 },
27039 -    { 0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38, 0x00001180 },
27040 -    { 0x000010f0, 0x0000a000, 0x00014000, 0x00016000, 0x0000b000, 0x00014008 },
27041 -    { 0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00, 0x06e006e0 },
27042 -    { 0x0000801c, 0x128d93a7, 0x128d93cf, 0x12e013d7, 0x12e013ab, 0x098813cf },
27043 -    { 0x00008120, 0x08f04800, 0x08f04800, 0x08f04810, 0x08f04810, 0x08f04810 },
27044 -    { 0x000081d0, 0x00003210, 0x00003210, 0x0000320a, 0x0000320a, 0x0000320a },
27045 -    { 0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300, 0x00000303 },
27046 -    { 0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200, 0x02020200 },
27047 -    { 0x00009824, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
27048 -    { 0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001 },
27049 -    { 0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
27050 -    { 0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000007 },
27051 -    { 0x00009844, 0x1372161e, 0x1372161e, 0x137216a0, 0x137216a0, 0x137216a0 },
27052 -    { 0x00009848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68, 0x00197a68 },
27053 -    { 0x0000a848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68, 0x00197a68 },
27054 -    { 0x0000b848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68, 0x00197a68 },
27055 -    { 0x00009850, 0x6c48b4e0, 0x6d48b4e0, 0x6d48b0de, 0x6c48b0de, 0x6c48b0de },
27056 -    { 0x00009858, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e },
27057 -    { 0x0000985c, 0x31395d5e, 0x3139605e, 0x3139605e, 0x31395d5e, 0x31395d5e },
27058 -    { 0x00009860, 0x00049d18, 0x00049d18, 0x00049d18, 0x00049d18, 0x00049d18 },
27059 -    { 0x00009864, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00 },
27060 -    { 0x00009868, 0x409a4190, 0x409a4190, 0x409a4190, 0x409a4190, 0x409a4190 },
27061 -    { 0x0000986c, 0x050cb081, 0x050cb081, 0x050cb081, 0x050cb081, 0x050cb081 },
27062 -    { 0x00009914, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898, 0x000007d0 },
27063 -    { 0x00009918, 0x000001b8, 0x00000370, 0x00000268, 0x00000134, 0x00000134 },
27064 -    { 0x00009924, 0xd0058a0b, 0xd0058a0b, 0xd0058a0b, 0xd0058a0b, 0xd0058a0b },
27065 -    { 0x00009944, 0xffb81020, 0xffb81020, 0xffb81020, 0xffb81020, 0xffb81020 },
27066 -    { 0x00009960, 0x00000900, 0x00000900, 0x00012d80, 0x00012d80, 0x00012d80 },
27067 -    { 0x0000a960, 0x00000900, 0x00000900, 0x00012d80, 0x00012d80, 0x00012d80 },
27068 -    { 0x0000b960, 0x00000900, 0x00000900, 0x00012d80, 0x00012d80, 0x00012d80 },
27069 -    { 0x00009964, 0x00000000, 0x00000000, 0x00001120, 0x00001120, 0x00001120 },
27070 -    { 0x000099bc, 0x001a0a00, 0x001a0a00, 0x001a0a00, 0x001a0a00, 0x001a0a00 },
27071 -    { 0x000099c0, 0x038919be, 0x038919be, 0x038919be, 0x038919be, 0x038919be },
27072 -    { 0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77 },
27073 -    { 0x000099c8, 0x6af6532c, 0x6af6532c, 0x6af6532c, 0x6af6532c, 0x6af6532c },
27074 -    { 0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8 },
27075 -    { 0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384, 0x00046384 },
27076 -    { 0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
27077 -    { 0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
27078 -    { 0x0000a204, 0x00000880, 0x00000880, 0x00000880, 0x00000880, 0x00000880 },
27079 -    { 0x0000a208, 0xd6be4788, 0xd6be4788, 0xd03e4788, 0xd03e4788, 0xd03e4788 },
27080 -    { 0x0000a20c, 0x002ec1e0, 0x002ec1e0, 0x002ac120, 0x002ac120, 0x002ac120 },
27081 -    { 0x0000b20c, 0x002ec1e0, 0x002ec1e0, 0x002ac120, 0x002ac120, 0x002ac120 },
27082 -    { 0x0000c20c, 0x002ec1e0, 0x002ec1e0, 0x002ac120, 0x002ac120, 0x002ac120 },
27083 -    { 0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a },
27084 -    { 0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000 },
27085 -    { 0x0000a274, 0x0a1a9caa, 0x0a1a9caa, 0x0a1a7caa, 0x0a1a7caa, 0x0a1a7caa },
27086 -    { 0x0000a300, 0x18010000, 0x18010000, 0x18010000, 0x18010000, 0x18010000 },
27087 -    { 0x0000a304, 0x30032602, 0x30032602, 0x2e032402, 0x2e032402, 0x2e032402 },
27088 -    { 0x0000a308, 0x48073e06, 0x48073e06, 0x4a0a3c06, 0x4a0a3c06, 0x4a0a3c06 },
27089 -    { 0x0000a30c, 0x560b4c0a, 0x560b4c0a, 0x621a540b, 0x621a540b, 0x621a540b },
27090 -    { 0x0000a310, 0x641a600f, 0x641a600f, 0x764f6c1b, 0x764f6c1b, 0x764f6c1b },
27091 -    { 0x0000a314, 0x7a4f6e1b, 0x7a4f6e1b, 0x845b7a5a, 0x845b7a5a, 0x845b7a5a },
27092 -    { 0x0000a318, 0x8c5b7e5a, 0x8c5b7e5a, 0x950f8ccf, 0x950f8ccf, 0x950f8ccf },
27093 -    { 0x0000a31c, 0x9d0f96cf, 0x9d0f96cf, 0xa5cf9b4f, 0xa5cf9b4f, 0xa5cf9b4f },
27094 -    { 0x0000a320, 0xb51fa69f, 0xb51fa69f, 0xbddfaf1f, 0xbddfaf1f, 0xbddfaf1f },
27095 -    { 0x0000a324, 0xcb3fbd07, 0xcb3fbcbf, 0xd1ffc93f, 0xd1ffc93f, 0xd1ffc93f },
27096 -    { 0x0000a328, 0x0000d7bf, 0x0000d7bf, 0x00000000, 0x00000000, 0x00000000 },
27097 -    { 0x0000a32c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
27098 -    { 0x0000a330, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
27099 -    { 0x0000a334, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
27100 -};
27101 -
27102 -static const u32 ar5416Common[][2] = {
27103 -    { 0x0000000c, 0x00000000 },
27104 -    { 0x00000030, 0x00020015 },
27105 -    { 0x00000034, 0x00000005 },
27106 -    { 0x00000040, 0x00000000 },
27107 -    { 0x00000044, 0x00000008 },
27108 -    { 0x00000048, 0x00000008 },
27109 -    { 0x0000004c, 0x00000010 },
27110 -    { 0x00000050, 0x00000000 },
27111 -    { 0x00000054, 0x0000001f },
27112 -    { 0x00000800, 0x00000000 },
27113 -    { 0x00000804, 0x00000000 },
27114 -    { 0x00000808, 0x00000000 },
27115 -    { 0x0000080c, 0x00000000 },
27116 -    { 0x00000810, 0x00000000 },
27117 -    { 0x00000814, 0x00000000 },
27118 -    { 0x00000818, 0x00000000 },
27119 -    { 0x0000081c, 0x00000000 },
27120 -    { 0x00000820, 0x00000000 },
27121 -    { 0x00000824, 0x00000000 },
27122 -    { 0x00001040, 0x002ffc0f },
27123 -    { 0x00001044, 0x002ffc0f },
27124 -    { 0x00001048, 0x002ffc0f },
27125 -    { 0x0000104c, 0x002ffc0f },
27126 -    { 0x00001050, 0x002ffc0f },
27127 -    { 0x00001054, 0x002ffc0f },
27128 -    { 0x00001058, 0x002ffc0f },
27129 -    { 0x0000105c, 0x002ffc0f },
27130 -    { 0x00001060, 0x002ffc0f },
27131 -    { 0x00001064, 0x002ffc0f },
27132 -    { 0x00001230, 0x00000000 },
27133 -    { 0x00001270, 0x00000000 },
27134 -    { 0x00001038, 0x00000000 },
27135 -    { 0x00001078, 0x00000000 },
27136 -    { 0x000010b8, 0x00000000 },
27137 -    { 0x000010f8, 0x00000000 },
27138 -    { 0x00001138, 0x00000000 },
27139 -    { 0x00001178, 0x00000000 },
27140 -    { 0x000011b8, 0x00000000 },
27141 -    { 0x000011f8, 0x00000000 },
27142 -    { 0x00001238, 0x00000000 },
27143 -    { 0x00001278, 0x00000000 },
27144 -    { 0x000012b8, 0x00000000 },
27145 -    { 0x000012f8, 0x00000000 },
27146 -    { 0x00001338, 0x00000000 },
27147 -    { 0x00001378, 0x00000000 },
27148 -    { 0x000013b8, 0x00000000 },
27149 -    { 0x000013f8, 0x00000000 },
27150 -    { 0x00001438, 0x00000000 },
27151 -    { 0x00001478, 0x00000000 },
27152 -    { 0x000014b8, 0x00000000 },
27153 -    { 0x000014f8, 0x00000000 },
27154 -    { 0x00001538, 0x00000000 },
27155 -    { 0x00001578, 0x00000000 },
27156 -    { 0x000015b8, 0x00000000 },
27157 -    { 0x000015f8, 0x00000000 },
27158 -    { 0x00001638, 0x00000000 },
27159 -    { 0x00001678, 0x00000000 },
27160 -    { 0x000016b8, 0x00000000 },
27161 -    { 0x000016f8, 0x00000000 },
27162 -    { 0x00001738, 0x00000000 },
27163 -    { 0x00001778, 0x00000000 },
27164 -    { 0x000017b8, 0x00000000 },
27165 -    { 0x000017f8, 0x00000000 },
27166 -    { 0x0000103c, 0x00000000 },
27167 -    { 0x0000107c, 0x00000000 },
27168 -    { 0x000010bc, 0x00000000 },
27169 -    { 0x000010fc, 0x00000000 },
27170 -    { 0x0000113c, 0x00000000 },
27171 -    { 0x0000117c, 0x00000000 },
27172 -    { 0x000011bc, 0x00000000 },
27173 -    { 0x000011fc, 0x00000000 },
27174 -    { 0x0000123c, 0x00000000 },
27175 -    { 0x0000127c, 0x00000000 },
27176 -    { 0x000012bc, 0x00000000 },
27177 -    { 0x000012fc, 0x00000000 },
27178 -    { 0x0000133c, 0x00000000 },
27179 -    { 0x0000137c, 0x00000000 },
27180 -    { 0x000013bc, 0x00000000 },
27181 -    { 0x000013fc, 0x00000000 },
27182 -    { 0x0000143c, 0x00000000 },
27183 -    { 0x0000147c, 0x00000000 },
27184 -    { 0x00004030, 0x00000002 },
27185 -    { 0x0000403c, 0x00000002 },
27186 -    { 0x00007010, 0x00000000 },
27187 -    { 0x00007038, 0x000004c2 },
27188 -    { 0x00008004, 0x00000000 },
27189 -    { 0x00008008, 0x00000000 },
27190 -    { 0x0000800c, 0x00000000 },
27191 -    { 0x00008018, 0x00000700 },
27192 -    { 0x00008020, 0x00000000 },
27193 -    { 0x00008038, 0x00000000 },
27194 -    { 0x0000803c, 0x00000000 },
27195 -    { 0x00008048, 0x40000000 },
27196 -    { 0x00008054, 0x00000000 },
27197 -    { 0x00008058, 0x00000000 },
27198 -    { 0x0000805c, 0x000fc78f },
27199 -    { 0x00008060, 0x0000000f },
27200 -    { 0x00008064, 0x00000000 },
27201 -    { 0x000080c0, 0x2a82301a },
27202 -    { 0x000080c4, 0x05dc01e0 },
27203 -    { 0x000080c8, 0x1f402710 },
27204 -    { 0x000080cc, 0x01f40000 },
27205 -    { 0x000080d0, 0x00001e00 },
27206 -    { 0x000080d4, 0x00000000 },
27207 -    { 0x000080d8, 0x00400000 },
27208 -    { 0x000080e0, 0xffffffff },
27209 -    { 0x000080e4, 0x0000ffff },
27210 -    { 0x000080e8, 0x003f3f3f },
27211 -    { 0x000080ec, 0x00000000 },
27212 -    { 0x000080f0, 0x00000000 },
27213 -    { 0x000080f4, 0x00000000 },
27214 -    { 0x000080f8, 0x00000000 },
27215 -    { 0x000080fc, 0x00020000 },
27216 -    { 0x00008100, 0x00020000 },
27217 -    { 0x00008104, 0x00000001 },
27218 -    { 0x00008108, 0x00000052 },
27219 -    { 0x0000810c, 0x00000000 },
27220 -    { 0x00008110, 0x00000168 },
27221 -    { 0x00008118, 0x000100aa },
27222 -    { 0x0000811c, 0x00003210 },
27223 -    { 0x00008124, 0x00000000 },
27224 -    { 0x00008128, 0x00000000 },
27225 -    { 0x0000812c, 0x00000000 },
27226 -    { 0x00008130, 0x00000000 },
27227 -    { 0x00008134, 0x00000000 },
27228 -    { 0x00008138, 0x00000000 },
27229 -    { 0x0000813c, 0x00000000 },
27230 -    { 0x00008144, 0xffffffff },
27231 -    { 0x00008168, 0x00000000 },
27232 -    { 0x0000816c, 0x00000000 },
27233 -    { 0x00008170, 0x32143320 },
27234 -    { 0x00008174, 0xfaa4fa50 },
27235 -    { 0x00008178, 0x00000100 },
27236 -    { 0x0000817c, 0x00000000 },
27237 -    { 0x000081c4, 0x00000000 },
27238 -    { 0x000081ec, 0x00000000 },
27239 -    { 0x000081f0, 0x00000000 },
27240 -    { 0x000081f4, 0x00000000 },
27241 -    { 0x000081f8, 0x00000000 },
27242 -    { 0x000081fc, 0x00000000 },
27243 -    { 0x00008200, 0x00000000 },
27244 -    { 0x00008204, 0x00000000 },
27245 -    { 0x00008208, 0x00000000 },
27246 -    { 0x0000820c, 0x00000000 },
27247 -    { 0x00008210, 0x00000000 },
27248 -    { 0x00008214, 0x00000000 },
27249 -    { 0x00008218, 0x00000000 },
27250 -    { 0x0000821c, 0x00000000 },
27251 -    { 0x00008220, 0x00000000 },
27252 -    { 0x00008224, 0x00000000 },
27253 -    { 0x00008228, 0x00000000 },
27254 -    { 0x0000822c, 0x00000000 },
27255 -    { 0x00008230, 0x00000000 },
27256 -    { 0x00008234, 0x00000000 },
27257 -    { 0x00008238, 0x00000000 },
27258 -    { 0x0000823c, 0x00000000 },
27259 -    { 0x00008240, 0x00100000 },
27260 -    { 0x00008244, 0x0010f400 },
27261 -    { 0x00008248, 0x00000100 },
27262 -    { 0x0000824c, 0x0001e800 },
27263 -    { 0x00008250, 0x00000000 },
27264 -    { 0x00008254, 0x00000000 },
27265 -    { 0x00008258, 0x00000000 },
27266 -    { 0x0000825c, 0x400000ff },
27267 -    { 0x00008260, 0x00080922 },
27268 -    { 0x00008264, 0xa8000010 },
27269 -    { 0x00008270, 0x00000000 },
27270 -    { 0x00008274, 0x40000000 },
27271 -    { 0x00008278, 0x003e4180 },
27272 -    { 0x0000827c, 0x00000000 },
27273 -    { 0x00008284, 0x0000002c },
27274 -    { 0x00008288, 0x0000002c },
27275 -    { 0x0000828c, 0x00000000 },
27276 -    { 0x00008294, 0x00000000 },
27277 -    { 0x00008298, 0x00000000 },
27278 -    { 0x00008300, 0x00000000 },
27279 -    { 0x00008304, 0x00000000 },
27280 -    { 0x00008308, 0x00000000 },
27281 -    { 0x0000830c, 0x00000000 },
27282 -    { 0x00008310, 0x00000000 },
27283 -    { 0x00008314, 0x00000000 },
27284 -    { 0x00008318, 0x00000000 },
27285 -    { 0x00008328, 0x00000000 },
27286 -    { 0x0000832c, 0x00000007 },
27287 -    { 0x00008330, 0x00000302 },
27288 -    { 0x00008334, 0x00000e00 },
27289 -    { 0x00008338, 0x00070000 },
27290 -    { 0x0000833c, 0x00000000 },
27291 -    { 0x00008340, 0x000107ff },
27292 -    { 0x00009808, 0x00000000 },
27293 -    { 0x0000980c, 0xad848e19 },
27294 -    { 0x00009810, 0x7d14e000 },
27295 -    { 0x00009814, 0x9c0a9f6b },
27296 -    { 0x0000981c, 0x00000000 },
27297 -    { 0x0000982c, 0x0000a000 },
27298 -    { 0x00009830, 0x00000000 },
27299 -    { 0x0000983c, 0x00200400 },
27300 -    { 0x00009840, 0x206a002e },
27301 -    { 0x0000984c, 0x1284233c },
27302 -    { 0x00009854, 0x00000859 },
27303 -    { 0x00009900, 0x00000000 },
27304 -    { 0x00009904, 0x00000000 },
27305 -    { 0x00009908, 0x00000000 },
27306 -    { 0x0000990c, 0x00000000 },
27307 -    { 0x0000991c, 0x10000fff },
27308 -    { 0x00009920, 0x05100000 },
27309 -    { 0x0000a920, 0x05100000 },
27310 -    { 0x0000b920, 0x05100000 },
27311 -    { 0x00009928, 0x00000001 },
27312 -    { 0x0000992c, 0x00000004 },
27313 -    { 0x00009934, 0x1e1f2022 },
27314 -    { 0x00009938, 0x0a0b0c0d },
27315 -    { 0x0000993c, 0x00000000 },
27316 -    { 0x00009948, 0x9280b212 },
27317 -    { 0x0000994c, 0x00020028 },
27318 -    { 0x00009954, 0x5d50e188 },
27319 -    { 0x00009958, 0x00081fff },
27320 -    { 0x0000c95c, 0x004b6a8e },
27321 -    { 0x0000c968, 0x000003ce },
27322 -    { 0x00009970, 0x190fb515 },
27323 -    { 0x00009974, 0x00000000 },
27324 -    { 0x00009978, 0x00000001 },
27325 -    { 0x0000997c, 0x00000000 },
27326 -    { 0x00009980, 0x00000000 },
27327 -    { 0x00009984, 0x00000000 },
27328 -    { 0x00009988, 0x00000000 },
27329 -    { 0x0000998c, 0x00000000 },
27330 -    { 0x00009990, 0x00000000 },
27331 -    { 0x00009994, 0x00000000 },
27332 -    { 0x00009998, 0x00000000 },
27333 -    { 0x0000999c, 0x00000000 },
27334 -    { 0x000099a0, 0x00000000 },
27335 -    { 0x000099a4, 0x00000001 },
27336 -    { 0x000099a8, 0x001fff00 },
27337 -    { 0x000099ac, 0x00000000 },
27338 -    { 0x000099b0, 0x03051000 },
27339 -    { 0x000099dc, 0x00000000 },
27340 -    { 0x000099e0, 0x00000200 },
27341 -    { 0x000099e4, 0xaaaaaaaa },
27342 -    { 0x000099e8, 0x3c466478 },
27343 -    { 0x000099ec, 0x000000aa },
27344 -    { 0x000099fc, 0x00001042 },
27345 -    { 0x00009b00, 0x00000000 },
27346 -    { 0x00009b04, 0x00000001 },
27347 -    { 0x00009b08, 0x00000002 },
27348 -    { 0x00009b0c, 0x00000003 },
27349 -    { 0x00009b10, 0x00000004 },
27350 -    { 0x00009b14, 0x00000005 },
27351 -    { 0x00009b18, 0x00000008 },
27352 -    { 0x00009b1c, 0x00000009 },
27353 -    { 0x00009b20, 0x0000000a },
27354 -    { 0x00009b24, 0x0000000b },
27355 -    { 0x00009b28, 0x0000000c },
27356 -    { 0x00009b2c, 0x0000000d },
27357 -    { 0x00009b30, 0x00000010 },
27358 -    { 0x00009b34, 0x00000011 },
27359 -    { 0x00009b38, 0x00000012 },
27360 -    { 0x00009b3c, 0x00000013 },
27361 -    { 0x00009b40, 0x00000014 },
27362 -    { 0x00009b44, 0x00000015 },
27363 -    { 0x00009b48, 0x00000018 },
27364 -    { 0x00009b4c, 0x00000019 },
27365 -    { 0x00009b50, 0x0000001a },
27366 -    { 0x00009b54, 0x0000001b },
27367 -    { 0x00009b58, 0x0000001c },
27368 -    { 0x00009b5c, 0x0000001d },
27369 -    { 0x00009b60, 0x00000020 },
27370 -    { 0x00009b64, 0x00000021 },
27371 -    { 0x00009b68, 0x00000022 },
27372 -    { 0x00009b6c, 0x00000023 },
27373 -    { 0x00009b70, 0x00000024 },
27374 -    { 0x00009b74, 0x00000025 },
27375 -    { 0x00009b78, 0x00000028 },
27376 -    { 0x00009b7c, 0x00000029 },
27377 -    { 0x00009b80, 0x0000002a },
27378 -    { 0x00009b84, 0x0000002b },
27379 -    { 0x00009b88, 0x0000002c },
27380 -    { 0x00009b8c, 0x0000002d },
27381 -    { 0x00009b90, 0x00000030 },
27382 -    { 0x00009b94, 0x00000031 },
27383 -    { 0x00009b98, 0x00000032 },
27384 -    { 0x00009b9c, 0x00000033 },
27385 -    { 0x00009ba0, 0x00000034 },
27386 -    { 0x00009ba4, 0x00000035 },
27387 -    { 0x00009ba8, 0x00000035 },
27388 -    { 0x00009bac, 0x00000035 },
27389 -    { 0x00009bb0, 0x00000035 },
27390 -    { 0x00009bb4, 0x00000035 },
27391 -    { 0x00009bb8, 0x00000035 },
27392 -    { 0x00009bbc, 0x00000035 },
27393 -    { 0x00009bc0, 0x00000035 },
27394 -    { 0x00009bc4, 0x00000035 },
27395 -    { 0x00009bc8, 0x00000035 },
27396 -    { 0x00009bcc, 0x00000035 },
27397 -    { 0x00009bd0, 0x00000035 },
27398 -    { 0x00009bd4, 0x00000035 },
27399 -    { 0x00009bd8, 0x00000035 },
27400 -    { 0x00009bdc, 0x00000035 },
27401 -    { 0x00009be0, 0x00000035 },
27402 -    { 0x00009be4, 0x00000035 },
27403 -    { 0x00009be8, 0x00000035 },
27404 -    { 0x00009bec, 0x00000035 },
27405 -    { 0x00009bf0, 0x00000035 },
27406 -    { 0x00009bf4, 0x00000035 },
27407 -    { 0x00009bf8, 0x00000010 },
27408 -    { 0x00009bfc, 0x0000001a },
27409 -    { 0x0000a210, 0x40806333 },
27410 -    { 0x0000a214, 0x00106c10 },
27411 -    { 0x0000a218, 0x009c4060 },
27412 -    { 0x0000a220, 0x018830c6 },
27413 -    { 0x0000a224, 0x00000400 },
27414 -    { 0x0000a228, 0x00000bb5 },
27415 -    { 0x0000a22c, 0x00000011 },
27416 -    { 0x0000a234, 0x20202020 },
27417 -    { 0x0000a238, 0x20202020 },
27418 -    { 0x0000a23c, 0x13c889af },
27419 -    { 0x0000a240, 0x38490a20 },
27420 -    { 0x0000a244, 0x00007bb6 },
27421 -    { 0x0000a248, 0x0fff3ffc },
27422 -    { 0x0000a24c, 0x00000001 },
27423 -    { 0x0000a250, 0x0000a000 },
27424 -    { 0x0000a254, 0x00000000 },
27425 -    { 0x0000a258, 0x0cc75380 },
27426 -    { 0x0000a25c, 0x0f0f0f01 },
27427 -    { 0x0000a260, 0xdfa91f01 },
27428 -    { 0x0000a268, 0x00000000 },
27429 -    { 0x0000a26c, 0x0e79e5c6 },
27430 -    { 0x0000b26c, 0x0e79e5c6 },
27431 -    { 0x0000c26c, 0x0e79e5c6 },
27432 -    { 0x0000d270, 0x00820820 },
27433 -    { 0x0000a278, 0x1ce739ce },
27434 -    { 0x0000a27c, 0x051701ce },
27435 -    { 0x0000a338, 0x00000000 },
27436 -    { 0x0000a33c, 0x00000000 },
27437 -    { 0x0000a340, 0x00000000 },
27438 -    { 0x0000a344, 0x00000000 },
27439 -    { 0x0000a348, 0x3fffffff },
27440 -    { 0x0000a34c, 0x3fffffff },
27441 -    { 0x0000a350, 0x3fffffff },
27442 -    { 0x0000a354, 0x0003ffff },
27443 -    { 0x0000a358, 0x79a8aa1f },
27444 -    { 0x0000d35c, 0x07ffffef },
27445 -    { 0x0000d360, 0x0fffffe7 },
27446 -    { 0x0000d364, 0x17ffffe5 },
27447 -    { 0x0000d368, 0x1fffffe4 },
27448 -    { 0x0000d36c, 0x37ffffe3 },
27449 -    { 0x0000d370, 0x3fffffe3 },
27450 -    { 0x0000d374, 0x57ffffe3 },
27451 -    { 0x0000d378, 0x5fffffe2 },
27452 -    { 0x0000d37c, 0x7fffffe2 },
27453 -    { 0x0000d380, 0x7f3c7bba },
27454 -    { 0x0000d384, 0xf3307ff0 },
27455 -    { 0x0000a388, 0x08000000 },
27456 -    { 0x0000a38c, 0x20202020 },
27457 -    { 0x0000a390, 0x20202020 },
27458 -    { 0x0000a394, 0x1ce739ce },
27459 -    { 0x0000a398, 0x000001ce },
27460 -    { 0x0000a39c, 0x00000001 },
27461 -    { 0x0000a3a0, 0x00000000 },
27462 -    { 0x0000a3a4, 0x00000000 },
27463 -    { 0x0000a3a8, 0x00000000 },
27464 -    { 0x0000a3ac, 0x00000000 },
27465 -    { 0x0000a3b0, 0x00000000 },
27466 -    { 0x0000a3b4, 0x00000000 },
27467 -    { 0x0000a3b8, 0x00000000 },
27468 -    { 0x0000a3bc, 0x00000000 },
27469 -    { 0x0000a3c0, 0x00000000 },
27470 -    { 0x0000a3c4, 0x00000000 },
27471 -    { 0x0000a3c8, 0x00000246 },
27472 -    { 0x0000a3cc, 0x20202020 },
27473 -    { 0x0000a3d0, 0x20202020 },
27474 -    { 0x0000a3d4, 0x20202020 },
27475 -    { 0x0000a3dc, 0x1ce739ce },
27476 -    { 0x0000a3e0, 0x000001ce },
27477 -};
27478 -
27479 -static const u32 ar5416Bank0[][2] = {
27480 -    { 0x000098b0, 0x1e5795e5 },
27481 -    { 0x000098e0, 0x02008020 },
27482 -};
27483 -
27484 -static const u32 ar5416BB_RfGain[][3] = {
27485 -    { 0x00009a00, 0x00000000, 0x00000000 },
27486 -    { 0x00009a04, 0x00000040, 0x00000040 },
27487 -    { 0x00009a08, 0x00000080, 0x00000080 },
27488 -    { 0x00009a0c, 0x000001a1, 0x00000141 },
27489 -    { 0x00009a10, 0x000001e1, 0x00000181 },
27490 -    { 0x00009a14, 0x00000021, 0x000001c1 },
27491 -    { 0x00009a18, 0x00000061, 0x00000001 },
27492 -    { 0x00009a1c, 0x00000168, 0x00000041 },
27493 -    { 0x00009a20, 0x000001a8, 0x000001a8 },
27494 -    { 0x00009a24, 0x000001e8, 0x000001e8 },
27495 -    { 0x00009a28, 0x00000028, 0x00000028 },
27496 -    { 0x00009a2c, 0x00000068, 0x00000068 },
27497 -    { 0x00009a30, 0x00000189, 0x000000a8 },
27498 -    { 0x00009a34, 0x000001c9, 0x00000169 },
27499 -    { 0x00009a38, 0x00000009, 0x000001a9 },
27500 -    { 0x00009a3c, 0x00000049, 0x000001e9 },
27501 -    { 0x00009a40, 0x00000089, 0x00000029 },
27502 -    { 0x00009a44, 0x00000170, 0x00000069 },
27503 -    { 0x00009a48, 0x000001b0, 0x00000190 },
27504 -    { 0x00009a4c, 0x000001f0, 0x000001d0 },
27505 -    { 0x00009a50, 0x00000030, 0x00000010 },
27506 -    { 0x00009a54, 0x00000070, 0x00000050 },
27507 -    { 0x00009a58, 0x00000191, 0x00000090 },
27508 -    { 0x00009a5c, 0x000001d1, 0x00000151 },
27509 -    { 0x00009a60, 0x00000011, 0x00000191 },
27510 -    { 0x00009a64, 0x00000051, 0x000001d1 },
27511 -    { 0x00009a68, 0x00000091, 0x00000011 },
27512 -    { 0x00009a6c, 0x000001b8, 0x00000051 },
27513 -    { 0x00009a70, 0x000001f8, 0x00000198 },
27514 -    { 0x00009a74, 0x00000038, 0x000001d8 },
27515 -    { 0x00009a78, 0x00000078, 0x00000018 },
27516 -    { 0x00009a7c, 0x00000199, 0x00000058 },
27517 -    { 0x00009a80, 0x000001d9, 0x00000098 },
27518 -    { 0x00009a84, 0x00000019, 0x00000159 },
27519 -    { 0x00009a88, 0x00000059, 0x00000199 },
27520 -    { 0x00009a8c, 0x00000099, 0x000001d9 },
27521 -    { 0x00009a90, 0x000000d9, 0x00000019 },
27522 -    { 0x00009a94, 0x000000f9, 0x00000059 },
27523 -    { 0x00009a98, 0x000000f9, 0x00000099 },
27524 -    { 0x00009a9c, 0x000000f9, 0x000000d9 },
27525 -    { 0x00009aa0, 0x000000f9, 0x000000f9 },
27526 -    { 0x00009aa4, 0x000000f9, 0x000000f9 },
27527 -    { 0x00009aa8, 0x000000f9, 0x000000f9 },
27528 -    { 0x00009aac, 0x000000f9, 0x000000f9 },
27529 -    { 0x00009ab0, 0x000000f9, 0x000000f9 },
27530 -    { 0x00009ab4, 0x000000f9, 0x000000f9 },
27531 -    { 0x00009ab8, 0x000000f9, 0x000000f9 },
27532 -    { 0x00009abc, 0x000000f9, 0x000000f9 },
27533 -    { 0x00009ac0, 0x000000f9, 0x000000f9 },
27534 -    { 0x00009ac4, 0x000000f9, 0x000000f9 },
27535 -    { 0x00009ac8, 0x000000f9, 0x000000f9 },
27536 -    { 0x00009acc, 0x000000f9, 0x000000f9 },
27537 -    { 0x00009ad0, 0x000000f9, 0x000000f9 },
27538 -    { 0x00009ad4, 0x000000f9, 0x000000f9 },
27539 -    { 0x00009ad8, 0x000000f9, 0x000000f9 },
27540 -    { 0x00009adc, 0x000000f9, 0x000000f9 },
27541 -    { 0x00009ae0, 0x000000f9, 0x000000f9 },
27542 -    { 0x00009ae4, 0x000000f9, 0x000000f9 },
27543 -    { 0x00009ae8, 0x000000f9, 0x000000f9 },
27544 -    { 0x00009aec, 0x000000f9, 0x000000f9 },
27545 -    { 0x00009af0, 0x000000f9, 0x000000f9 },
27546 -    { 0x00009af4, 0x000000f9, 0x000000f9 },
27547 -    { 0x00009af8, 0x000000f9, 0x000000f9 },
27548 -    { 0x00009afc, 0x000000f9, 0x000000f9 },
27549 -};
27550 -
27551 -static const u32 ar5416Bank1[][2] = {
27552 -    { 0x000098b0, 0x02108421 },
27553 -    { 0x000098ec, 0x00000008 },
27554 -};
27555 -
27556 -static const u32 ar5416Bank2[][2] = {
27557 -    { 0x000098b0, 0x0e73ff17 },
27558 -    { 0x000098e0, 0x00000420 },
27559 -};
27560 -
27561 -static const u32 ar5416Bank3[][3] = {
27562 -    { 0x000098f0, 0x01400018, 0x01c00018 },
27563 -};
27564 -
27565 -static const u32 ar5416Bank6[][3] = {
27566 -
27567 -    { 0x0000989c, 0x00000000, 0x00000000 },
27568 -    { 0x0000989c, 0x00000000, 0x00000000 },
27569 -    { 0x0000989c, 0x00000000, 0x00000000 },
27570 -    { 0x0000989c, 0x00e00000, 0x00e00000 },
27571 -    { 0x0000989c, 0x005e0000, 0x005e0000 },
27572 -    { 0x0000989c, 0x00120000, 0x00120000 },
27573 -    { 0x0000989c, 0x00620000, 0x00620000 },
27574 -    { 0x0000989c, 0x00020000, 0x00020000 },
27575 -    { 0x0000989c, 0x00ff0000, 0x00ff0000 },
27576 -    { 0x0000989c, 0x00ff0000, 0x00ff0000 },
27577 -    { 0x0000989c, 0x00ff0000, 0x00ff0000 },
27578 -    { 0x0000989c, 0x40ff0000, 0x40ff0000 },
27579 -    { 0x0000989c, 0x005f0000, 0x005f0000 },
27580 -    { 0x0000989c, 0x00870000, 0x00870000 },
27581 -    { 0x0000989c, 0x00f90000, 0x00f90000 },
27582 -    { 0x0000989c, 0x007b0000, 0x007b0000 },
27583 -    { 0x0000989c, 0x00ff0000, 0x00ff0000 },
27584 -    { 0x0000989c, 0x00f50000, 0x00f50000 },
27585 -    { 0x0000989c, 0x00dc0000, 0x00dc0000 },
27586 -    { 0x0000989c, 0x00110000, 0x00110000 },
27587 -    { 0x0000989c, 0x006100a8, 0x006100a8 },
27588 -    { 0x0000989c, 0x004210a2, 0x004210a2 },
27589 -    { 0x0000989c, 0x0014008f, 0x0014008f },
27590 -    { 0x0000989c, 0x00c40003, 0x00c40003 },
27591 -    { 0x0000989c, 0x003000f2, 0x003000f2 },
27592 -    { 0x0000989c, 0x00440016, 0x00440016 },
27593 -    { 0x0000989c, 0x00410040, 0x00410040 },
27594 -    { 0x0000989c, 0x0001805e, 0x0001805e },
27595 -    { 0x0000989c, 0x0000c0ab, 0x0000c0ab },
27596 -    { 0x0000989c, 0x000000f1, 0x000000f1 },
27597 -    { 0x0000989c, 0x00002081, 0x00002081 },
27598 -    { 0x0000989c, 0x000000d4, 0x000000d4 },
27599 -    { 0x000098d0, 0x0000000f, 0x0010000f },
27600 -};
27601 -
27602 -static const u32 ar5416Bank6TPC[][3] = {
27603 -    { 0x0000989c, 0x00000000, 0x00000000 },
27604 -    { 0x0000989c, 0x00000000, 0x00000000 },
27605 -    { 0x0000989c, 0x00000000, 0x00000000 },
27606 -    { 0x0000989c, 0x00e00000, 0x00e00000 },
27607 -    { 0x0000989c, 0x005e0000, 0x005e0000 },
27608 -    { 0x0000989c, 0x00120000, 0x00120000 },
27609 -    { 0x0000989c, 0x00620000, 0x00620000 },
27610 -    { 0x0000989c, 0x00020000, 0x00020000 },
27611 -    { 0x0000989c, 0x00ff0000, 0x00ff0000 },
27612 -    { 0x0000989c, 0x00ff0000, 0x00ff0000 },
27613 -    { 0x0000989c, 0x00ff0000, 0x00ff0000 },
27614 -    { 0x0000989c, 0x40ff0000, 0x40ff0000 },
27615 -    { 0x0000989c, 0x005f0000, 0x005f0000 },
27616 -    { 0x0000989c, 0x00870000, 0x00870000 },
27617 -    { 0x0000989c, 0x00f90000, 0x00f90000 },
27618 -    { 0x0000989c, 0x007b0000, 0x007b0000 },
27619 -    { 0x0000989c, 0x00ff0000, 0x00ff0000 },
27620 -    { 0x0000989c, 0x00f50000, 0x00f50000 },
27621 -    { 0x0000989c, 0x00dc0000, 0x00dc0000 },
27622 -    { 0x0000989c, 0x00110000, 0x00110000 },
27623 -    { 0x0000989c, 0x006100a8, 0x006100a8 },
27624 -    { 0x0000989c, 0x00423022, 0x00423022 },
27625 -    { 0x0000989c, 0x201400df, 0x201400df },
27626 -    { 0x0000989c, 0x00c40002, 0x00c40002 },
27627 -    { 0x0000989c, 0x003000f2, 0x003000f2 },
27628 -    { 0x0000989c, 0x00440016, 0x00440016 },
27629 -    { 0x0000989c, 0x00410040, 0x00410040 },
27630 -    { 0x0000989c, 0x0001805e, 0x0001805e },
27631 -    { 0x0000989c, 0x0000c0ab, 0x0000c0ab },
27632 -    { 0x0000989c, 0x000000e1, 0x000000e1 },
27633 -    { 0x0000989c, 0x00007081, 0x00007081 },
27634 -    { 0x0000989c, 0x000000d4, 0x000000d4 },
27635 -    { 0x000098d0, 0x0000000f, 0x0010000f },
27636 -};
27637 -
27638 -static const u32 ar5416Bank7[][2] = {
27639 -    { 0x0000989c, 0x00000500 },
27640 -    { 0x0000989c, 0x00000800 },
27641 -    { 0x000098cc, 0x0000000e },
27642 -};
27643 -
27644 -static const u32 ar5416Addac[][2] = {
27645 -    {0x0000989c,  0x00000000 },
27646 -    {0x0000989c,  0x00000003 },
27647 -    {0x0000989c,  0x00000000 },
27648 -    {0x0000989c,  0x0000000c },
27649 -    {0x0000989c,  0x00000000 },
27650 -    {0x0000989c,  0x00000030 },
27651 -    {0x0000989c,  0x00000000 },
27652 -    {0x0000989c,  0x00000000 },
27653 -    {0x0000989c,  0x00000000 },
27654 -    {0x0000989c,  0x00000000 },
27655 -    {0x0000989c,  0x00000000 },
27656 -    {0x0000989c,  0x00000000 },
27657 -    {0x0000989c,  0x00000000 },
27658 -    {0x0000989c,  0x00000000 },
27659 -    {0x0000989c,  0x00000000 },
27660 -    {0x0000989c,  0x00000000 },
27661 -    {0x0000989c,  0x00000000 },
27662 -    {0x0000989c,  0x00000000 },
27663 -    {0x0000989c,  0x00000060 },
27664 -    {0x0000989c,  0x00000000 },
27665 -    {0x0000989c,  0x00000000 },
27666 -    {0x0000989c,  0x00000000 },
27667 -    {0x0000989c,  0x00000000 },
27668 -    {0x0000989c,  0x00000000 },
27669 -    {0x0000989c,  0x00000000 },
27670 -    {0x0000989c,  0x00000000 },
27671 -    {0x0000989c,  0x00000000 },
27672 -    {0x0000989c,  0x00000000 },
27673 -    {0x0000989c,  0x00000000 },
27674 -    {0x0000989c,  0x00000000 },
27675 -    {0x0000989c,  0x00000000 },
27676 -    {0x0000989c,  0x00000058 },
27677 -    {0x0000989c,  0x00000000 },
27678 -    {0x0000989c,  0x00000000 },
27679 -    {0x0000989c,  0x00000000 },
27680 -    {0x0000989c,  0x00000000 },
27681 -    {0x000098cc,  0x00000000 },
27682 -};
27683 -
27684 -static const u32 ar5416Modes_9100[][6] = {
27685 -    { 0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160, 0x000001e0 },
27686 -    { 0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c, 0x000001e0 },
27687 -    { 0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38, 0x00001180 },
27688 -    { 0x000010f0, 0x0000a000, 0x00014000, 0x00016000, 0x0000b000, 0x00014008 },
27689 -    { 0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00, 0x06e006e0 },
27690 -    { 0x0000801c, 0x128d93a7, 0x128d93cf, 0x12e013d7, 0x12e013ab, 0x098813cf },
27691 -    { 0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300, 0x00000303 },
27692 -    { 0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200, 0x02020200 },
27693 -    { 0x00009824, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
27694 -    { 0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001 },
27695 -    { 0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
27696 -    { 0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000007 },
27697 -    { 0x00009844, 0x0372161e, 0x0372161e, 0x037216a0, 0x037216a0, 0x037216a0 },
27698 -    { 0x00009848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68, 0x00197a68 },
27699 -    { 0x0000a848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68, 0x00197a68 },
27700 -    { 0x0000b848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68, 0x00197a68 },
27701 -    { 0x00009850, 0x6d48b4e2, 0x6d48b4e2, 0x6d48b0e2, 0x6d48b0e2, 0x6d48b0e2 },
27702 -    { 0x00009858, 0x7ec82d2e, 0x7ec82d2e, 0x7ec86d2e, 0x7ec84d2e, 0x7ec82d2e },
27703 -    { 0x0000985c, 0x3139605e, 0x3139605e, 0x3139605e, 0x3139605e, 0x3139605e },
27704 -    { 0x00009860, 0x00048d18, 0x00048d18, 0x00048d20, 0x00048d20, 0x00048d18 },
27705 -    { 0x0000c864, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00 },
27706 -    { 0x00009868, 0x409a40d0, 0x409a40d0, 0x409a40d0, 0x409a40d0, 0x409a40d0 },
27707 -    { 0x0000986c, 0x050cb081, 0x050cb081, 0x050cb081, 0x050cb081, 0x050cb081 },
27708 -    { 0x00009914, 0x000007d0, 0x000007d0, 0x00000898, 0x00000898, 0x000007d0 },
27709 -    { 0x00009918, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b, 0x00000016 },
27710 -    { 0x00009924, 0xd00a8a07, 0xd00a8a07, 0xd00a8a11, 0xd00a8a0d, 0xd00a8a0d },
27711 -    { 0x00009940, 0x00754604, 0x00754604, 0xfff81204, 0xfff81204, 0xfff81204 },
27712 -    { 0x00009944, 0xdfb81020, 0xdfb81020, 0xdfb81020, 0xdfb81020, 0xdfb81020 },
27713 -    { 0x00009954, 0x5f3ca3de, 0x5f3ca3de, 0xe250a51e, 0xe250a51e, 0xe250a51e },
27714 -    { 0x00009958, 0x2108ecff, 0x2108ecff, 0x3388ffff, 0x3388ffff, 0x3388ffff },
27715 -#ifdef TB243
27716 -    { 0x00009960, 0x00000900, 0x00000900, 0x00009b40, 0x00009b40, 0x00012d80 },
27717 -    { 0x0000a960, 0x00000900, 0x00000900, 0x00009b40, 0x00009b40, 0x00012d80 },
27718 -    { 0x0000b960, 0x00000900, 0x00000900, 0x00009b40, 0x00009b40, 0x00012d80 },
27719 -    { 0x00009964, 0x00000000, 0x00000000, 0x00002210, 0x00002210, 0x00001120 },
27720 -#else
27721 -    { 0x00009960, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0 },
27722 -    { 0x0000a960, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0 },
27723 -    { 0x0000b960, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0 },
27724 -    { 0x00009964, 0x00001120, 0x00001120, 0x00001120, 0x00001120, 0x00001120 },
27725 -#endif
27726 -    { 0x0000c9bc, 0x001a0600, 0x001a0600, 0x001a1000, 0x001a0c00, 0x001a0c00 },
27727 -    { 0x000099c0, 0x038919be, 0x038919be, 0x038919be, 0x038919be, 0x038919be },
27728 -    { 0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77 },
27729 -    { 0x000099c8, 0x60f65329, 0x60f65329, 0x60f65329, 0x60f65329, 0x60f65329 },
27730 -    { 0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8 },
27731 -    { 0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384, 0x00046384 },
27732 -    { 0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
27733 -    { 0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
27734 -    { 0x0000a204, 0x00000880, 0x00000880, 0x00000880, 0x00000880, 0x00000880 },
27735 -    { 0x0000a208, 0xd6be4788, 0xd6be4788, 0xd03e4788, 0xd03e4788, 0xd03e4788 },
27736 -    { 0x0000a20c, 0x002fc160, 0x002fc160, 0x002ac120, 0x002ac120, 0x002ac120 },
27737 -    { 0x0000b20c, 0x002fc160, 0x002fc160, 0x002ac120, 0x002ac120, 0x002ac120 },
27738 -    { 0x0000c20c, 0x002fc160, 0x002fc160, 0x002ac120, 0x002ac120, 0x002ac120 },
27739 -    { 0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a },
27740 -    { 0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000 },
27741 -    { 0x0000a274, 0x0a1a9caa, 0x0a1a9caa, 0x0a1a7caa, 0x0a1a7caa, 0x0a1a7caa },
27742 -    { 0x0000a300, 0x18010000, 0x18010000, 0x18010000, 0x18010000, 0x18010000 },
27743 -    { 0x0000a304, 0x30032602, 0x30032602, 0x2e032402, 0x2e032402, 0x2e032402 },
27744 -    { 0x0000a308, 0x48073e06, 0x48073e06, 0x4a0a3c06, 0x4a0a3c06, 0x4a0a3c06 },
27745 -    { 0x0000a30c, 0x560b4c0a, 0x560b4c0a, 0x621a540b, 0x621a540b, 0x621a540b },
27746 -    { 0x0000a310, 0x641a600f, 0x641a600f, 0x764f6c1b, 0x764f6c1b, 0x764f6c1b },
27747 -    { 0x0000a314, 0x7a4f6e1b, 0x7a4f6e1b, 0x845b7a5a, 0x845b7a5a, 0x845b7a5a },
27748 -    { 0x0000a318, 0x8c5b7e5a, 0x8c5b7e5a, 0x950f8ccf, 0x950f8ccf, 0x950f8ccf },
27749 -    { 0x0000a31c, 0x9d0f96cf, 0x9d0f96cf, 0xa5cf9b4f, 0xa5cf9b4f, 0xa5cf9b4f },
27750 -    { 0x0000a320, 0xb51fa69f, 0xb51fa69f, 0xbddfaf1f, 0xbddfaf1f, 0xbddfaf1f },
27751 -    { 0x0000a324, 0xcb3fbd07, 0xcb3fbcbf, 0xd1ffc93f, 0xd1ffc93f, 0xd1ffc93f },
27752 -    { 0x0000a328, 0x0000d7bf, 0x0000d7bf, 0x00000000, 0x00000000, 0x00000000 },
27753 -    { 0x0000a32c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
27754 -    { 0x0000a330, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
27755 -    { 0x0000a334, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
27756 -};
27757 -
27758 -static const u32 ar5416Common_9100[][2] = {
27759 -    { 0x0000000c, 0x00000000 },
27760 -    { 0x00000030, 0x00020015 },
27761 -    { 0x00000034, 0x00000005 },
27762 -    { 0x00000040, 0x00000000 },
27763 -    { 0x00000044, 0x00000008 },
27764 -    { 0x00000048, 0x00000008 },
27765 -    { 0x0000004c, 0x00000010 },
27766 -    { 0x00000050, 0x00000000 },
27767 -    { 0x00000054, 0x0000001f },
27768 -    { 0x00000800, 0x00000000 },
27769 -    { 0x00000804, 0x00000000 },
27770 -    { 0x00000808, 0x00000000 },
27771 -    { 0x0000080c, 0x00000000 },
27772 -    { 0x00000810, 0x00000000 },
27773 -    { 0x00000814, 0x00000000 },
27774 -    { 0x00000818, 0x00000000 },
27775 -    { 0x0000081c, 0x00000000 },
27776 -    { 0x00000820, 0x00000000 },
27777 -    { 0x00000824, 0x00000000 },
27778 -    { 0x00001040, 0x002ffc0f },
27779 -    { 0x00001044, 0x002ffc0f },
27780 -    { 0x00001048, 0x002ffc0f },
27781 -    { 0x0000104c, 0x002ffc0f },
27782 -    { 0x00001050, 0x002ffc0f },
27783 -    { 0x00001054, 0x002ffc0f },
27784 -    { 0x00001058, 0x002ffc0f },
27785 -    { 0x0000105c, 0x002ffc0f },
27786 -    { 0x00001060, 0x002ffc0f },
27787 -    { 0x00001064, 0x002ffc0f },
27788 -    { 0x00001230, 0x00000000 },
27789 -    { 0x00001270, 0x00000000 },
27790 -    { 0x00001038, 0x00000000 },
27791 -    { 0x00001078, 0x00000000 },
27792 -    { 0x000010b8, 0x00000000 },
27793 -    { 0x000010f8, 0x00000000 },
27794 -    { 0x00001138, 0x00000000 },
27795 -    { 0x00001178, 0x00000000 },
27796 -    { 0x000011b8, 0x00000000 },
27797 -    { 0x000011f8, 0x00000000 },
27798 -    { 0x00001238, 0x00000000 },
27799 -    { 0x00001278, 0x00000000 },
27800 -    { 0x000012b8, 0x00000000 },
27801 -    { 0x000012f8, 0x00000000 },
27802 -    { 0x00001338, 0x00000000 },
27803 -    { 0x00001378, 0x00000000 },
27804 -    { 0x000013b8, 0x00000000 },
27805 -    { 0x000013f8, 0x00000000 },
27806 -    { 0x00001438, 0x00000000 },
27807 -    { 0x00001478, 0x00000000 },
27808 -    { 0x000014b8, 0x00000000 },
27809 -    { 0x000014f8, 0x00000000 },
27810 -    { 0x00001538, 0x00000000 },
27811 -    { 0x00001578, 0x00000000 },
27812 -    { 0x000015b8, 0x00000000 },
27813 -    { 0x000015f8, 0x00000000 },
27814 -    { 0x00001638, 0x00000000 },
27815 -    { 0x00001678, 0x00000000 },
27816 -    { 0x000016b8, 0x00000000 },
27817 -    { 0x000016f8, 0x00000000 },
27818 -    { 0x00001738, 0x00000000 },
27819 -    { 0x00001778, 0x00000000 },
27820 -    { 0x000017b8, 0x00000000 },
27821 -    { 0x000017f8, 0x00000000 },
27822 -    { 0x0000103c, 0x00000000 },
27823 -    { 0x0000107c, 0x00000000 },
27824 -    { 0x000010bc, 0x00000000 },
27825 -    { 0x000010fc, 0x00000000 },
27826 -    { 0x0000113c, 0x00000000 },
27827 -    { 0x0000117c, 0x00000000 },
27828 -    { 0x000011bc, 0x00000000 },
27829 -    { 0x000011fc, 0x00000000 },
27830 -    { 0x0000123c, 0x00000000 },
27831 -    { 0x0000127c, 0x00000000 },
27832 -    { 0x000012bc, 0x00000000 },
27833 -    { 0x000012fc, 0x00000000 },
27834 -    { 0x0000133c, 0x00000000 },
27835 -    { 0x0000137c, 0x00000000 },
27836 -    { 0x000013bc, 0x00000000 },
27837 -    { 0x000013fc, 0x00000000 },
27838 -    { 0x0000143c, 0x00000000 },
27839 -    { 0x0000147c, 0x00000000 },
27840 -    { 0x00020010, 0x00000003 },
27841 -    { 0x00020038, 0x000004c2 },
27842 -    { 0x00008004, 0x00000000 },
27843 -    { 0x00008008, 0x00000000 },
27844 -    { 0x0000800c, 0x00000000 },
27845 -    { 0x00008018, 0x00000700 },
27846 -    { 0x00008020, 0x00000000 },
27847 -    { 0x00008038, 0x00000000 },
27848 -    { 0x0000803c, 0x00000000 },
27849 -    { 0x00008048, 0x40000000 },
27850 -    { 0x00008054, 0x00004000 },
27851 -    { 0x00008058, 0x00000000 },
27852 -    { 0x0000805c, 0x000fc78f },
27853 -    { 0x00008060, 0x0000000f },
27854 -    { 0x00008064, 0x00000000 },
27855 -    { 0x000080c0, 0x2a82301a },
27856 -    { 0x000080c4, 0x05dc01e0 },
27857 -    { 0x000080c8, 0x1f402710 },
27858 -    { 0x000080cc, 0x01f40000 },
27859 -    { 0x000080d0, 0x00001e00 },
27860 -    { 0x000080d4, 0x00000000 },
27861 -    { 0x000080d8, 0x00400000 },
27862 -    { 0x000080e0, 0xffffffff },
27863 -    { 0x000080e4, 0x0000ffff },
27864 -    { 0x000080e8, 0x003f3f3f },
27865 -    { 0x000080ec, 0x00000000 },
27866 -    { 0x000080f0, 0x00000000 },
27867 -    { 0x000080f4, 0x00000000 },
27868 -    { 0x000080f8, 0x00000000 },
27869 -    { 0x000080fc, 0x00020000 },
27870 -    { 0x00008100, 0x00020000 },
27871 -    { 0x00008104, 0x00000001 },
27872 -    { 0x00008108, 0x00000052 },
27873 -    { 0x0000810c, 0x00000000 },
27874 -    { 0x00008110, 0x00000168 },
27875 -    { 0x00008118, 0x000100aa },
27876 -    { 0x0000811c, 0x00003210 },
27877 -    { 0x00008120, 0x08f04800 },
27878 -    { 0x00008124, 0x00000000 },
27879 -    { 0x00008128, 0x00000000 },
27880 -    { 0x0000812c, 0x00000000 },
27881 -    { 0x00008130, 0x00000000 },
27882 -    { 0x00008134, 0x00000000 },
27883 -    { 0x00008138, 0x00000000 },
27884 -    { 0x0000813c, 0x00000000 },
27885 -    { 0x00008144, 0x00000000 },
27886 -    { 0x00008168, 0x00000000 },
27887 -    { 0x0000816c, 0x00000000 },
27888 -    { 0x00008170, 0x32143320 },
27889 -    { 0x00008174, 0xfaa4fa50 },
27890 -    { 0x00008178, 0x00000100 },
27891 -    { 0x0000817c, 0x00000000 },
27892 -    { 0x000081c4, 0x00000000 },
27893 -    { 0x000081d0, 0x00003210 },
27894 -    { 0x000081ec, 0x00000000 },
27895 -    { 0x000081f0, 0x00000000 },
27896 -    { 0x000081f4, 0x00000000 },
27897 -    { 0x000081f8, 0x00000000 },
27898 -    { 0x000081fc, 0x00000000 },
27899 -    { 0x00008200, 0x00000000 },
27900 -    { 0x00008204, 0x00000000 },
27901 -    { 0x00008208, 0x00000000 },
27902 -    { 0x0000820c, 0x00000000 },
27903 -    { 0x00008210, 0x00000000 },
27904 -    { 0x00008214, 0x00000000 },
27905 -    { 0x00008218, 0x00000000 },
27906 -    { 0x0000821c, 0x00000000 },
27907 -    { 0x00008220, 0x00000000 },
27908 -    { 0x00008224, 0x00000000 },
27909 -    { 0x00008228, 0x00000000 },
27910 -    { 0x0000822c, 0x00000000 },
27911 -    { 0x00008230, 0x00000000 },
27912 -    { 0x00008234, 0x00000000 },
27913 -    { 0x00008238, 0x00000000 },
27914 -    { 0x0000823c, 0x00000000 },
27915 -    { 0x00008240, 0x00100000 },
27916 -    { 0x00008244, 0x0010f400 },
27917 -    { 0x00008248, 0x00000100 },
27918 -    { 0x0000824c, 0x0001e800 },
27919 -    { 0x00008250, 0x00000000 },
27920 -    { 0x00008254, 0x00000000 },
27921 -    { 0x00008258, 0x00000000 },
27922 -    { 0x0000825c, 0x400000ff },
27923 -    { 0x00008260, 0x00080922 },
27924 -    { 0x00008270, 0x00000000 },
27925 -    { 0x00008274, 0x40000000 },
27926 -    { 0x00008278, 0x003e4180 },
27927 -    { 0x0000827c, 0x00000000 },
27928 -    { 0x00008284, 0x0000002c },
27929 -    { 0x00008288, 0x0000002c },
27930 -    { 0x0000828c, 0x00000000 },
27931 -    { 0x00008294, 0x00000000 },
27932 -    { 0x00008298, 0x00000000 },
27933 -    { 0x00008300, 0x00000000 },
27934 -    { 0x00008304, 0x00000000 },
27935 -    { 0x00008308, 0x00000000 },
27936 -    { 0x0000830c, 0x00000000 },
27937 -    { 0x00008310, 0x00000000 },
27938 -    { 0x00008314, 0x00000000 },
27939 -    { 0x00008318, 0x00000000 },
27940 -    { 0x00008328, 0x00000000 },
27941 -    { 0x0000832c, 0x00000007 },
27942 -    { 0x00008330, 0x00000302 },
27943 -    { 0x00008334, 0x00000e00 },
27944 -    { 0x00008338, 0x00000000 },
27945 -    { 0x0000833c, 0x00000000 },
27946 -    { 0x00008340, 0x000107ff },
27947 -    { 0x00009808, 0x00000000 },
27948 -    { 0x0000980c, 0xad848e19 },
27949 -    { 0x00009810, 0x7d14e000 },
27950 -    { 0x00009814, 0x9c0a9f6b },
27951 -    { 0x0000981c, 0x00000000 },
27952 -    { 0x0000982c, 0x0000a000 },
27953 -    { 0x00009830, 0x00000000 },
27954 -    { 0x0000983c, 0x00200400 },
27955 -    { 0x00009840, 0x206a01ae },
27956 -    { 0x0000984c, 0x1284233c },
27957 -    { 0x00009854, 0x00000859 },
27958 -    { 0x00009900, 0x00000000 },
27959 -    { 0x00009904, 0x00000000 },
27960 -    { 0x00009908, 0x00000000 },
27961 -    { 0x0000990c, 0x00000000 },
27962 -    { 0x0000991c, 0x10000fff },
27963 -    { 0x00009920, 0x05100000 },
27964 -    { 0x0000a920, 0x05100000 },
27965 -    { 0x0000b920, 0x05100000 },
27966 -    { 0x00009928, 0x00000001 },
27967 -    { 0x0000992c, 0x00000004 },
27968 -    { 0x00009934, 0x1e1f2022 },
27969 -    { 0x00009938, 0x0a0b0c0d },
27970 -    { 0x0000993c, 0x00000000 },
27971 -    { 0x00009948, 0x9280b212 },
27972 -    { 0x0000994c, 0x00020028 },
27973 -    { 0x0000c95c, 0x004b6a8e },
27974 -    { 0x0000c968, 0x000003ce },
27975 -    { 0x00009970, 0x190fb515 },
27976 -    { 0x00009974, 0x00000000 },
27977 -    { 0x00009978, 0x00000001 },
27978 -    { 0x0000997c, 0x00000000 },
27979 -    { 0x00009980, 0x00000000 },
27980 -    { 0x00009984, 0x00000000 },
27981 -    { 0x00009988, 0x00000000 },
27982 -    { 0x0000998c, 0x00000000 },
27983 -    { 0x00009990, 0x00000000 },
27984 -    { 0x00009994, 0x00000000 },
27985 -    { 0x00009998, 0x00000000 },
27986 -    { 0x0000999c, 0x00000000 },
27987 -    { 0x000099a0, 0x00000000 },
27988 -    { 0x000099a4, 0x00000001 },
27989 -    { 0x000099a8, 0x201fff00 },
27990 -    { 0x000099ac, 0x006f0000 },
27991 -    { 0x000099b0, 0x03051000 },
27992 -    { 0x000099dc, 0x00000000 },
27993 -    { 0x000099e0, 0x00000200 },
27994 -    { 0x000099e4, 0xaaaaaaaa },
27995 -    { 0x000099e8, 0x3c466478 },
27996 -    { 0x000099ec, 0x0cc80caa },
27997 -    { 0x000099fc, 0x00001042 },
27998 -    { 0x00009b00, 0x00000000 },
27999 -    { 0x00009b04, 0x00000001 },
28000 -    { 0x00009b08, 0x00000002 },
28001 -    { 0x00009b0c, 0x00000003 },
28002 -    { 0x00009b10, 0x00000004 },
28003 -    { 0x00009b14, 0x00000005 },
28004 -    { 0x00009b18, 0x00000008 },
28005 -    { 0x00009b1c, 0x00000009 },
28006 -    { 0x00009b20, 0x0000000a },
28007 -    { 0x00009b24, 0x0000000b },
28008 -    { 0x00009b28, 0x0000000c },
28009 -    { 0x00009b2c, 0x0000000d },
28010 -    { 0x00009b30, 0x00000010 },
28011 -    { 0x00009b34, 0x00000011 },
28012 -    { 0x00009b38, 0x00000012 },
28013 -    { 0x00009b3c, 0x00000013 },
28014 -    { 0x00009b40, 0x00000014 },
28015 -    { 0x00009b44, 0x00000015 },
28016 -    { 0x00009b48, 0x00000018 },
28017 -    { 0x00009b4c, 0x00000019 },
28018 -    { 0x00009b50, 0x0000001a },
28019 -    { 0x00009b54, 0x0000001b },
28020 -    { 0x00009b58, 0x0000001c },
28021 -    { 0x00009b5c, 0x0000001d },
28022 -    { 0x00009b60, 0x00000020 },
28023 -    { 0x00009b64, 0x00000021 },
28024 -    { 0x00009b68, 0x00000022 },
28025 -    { 0x00009b6c, 0x00000023 },
28026 -    { 0x00009b70, 0x00000024 },
28027 -    { 0x00009b74, 0x00000025 },
28028 -    { 0x00009b78, 0x00000028 },
28029 -    { 0x00009b7c, 0x00000029 },
28030 -    { 0x00009b80, 0x0000002a },
28031 -    { 0x00009b84, 0x0000002b },
28032 -    { 0x00009b88, 0x0000002c },
28033 -    { 0x00009b8c, 0x0000002d },
28034 -    { 0x00009b90, 0x00000030 },
28035 -    { 0x00009b94, 0x00000031 },
28036 -    { 0x00009b98, 0x00000032 },
28037 -    { 0x00009b9c, 0x00000033 },
28038 -    { 0x00009ba0, 0x00000034 },
28039 -    { 0x00009ba4, 0x00000035 },
28040 -    { 0x00009ba8, 0x00000035 },
28041 -    { 0x00009bac, 0x00000035 },
28042 -    { 0x00009bb0, 0x00000035 },
28043 -    { 0x00009bb4, 0x00000035 },
28044 -    { 0x00009bb8, 0x00000035 },
28045 -    { 0x00009bbc, 0x00000035 },
28046 -    { 0x00009bc0, 0x00000035 },
28047 -    { 0x00009bc4, 0x00000035 },
28048 -    { 0x00009bc8, 0x00000035 },
28049 -    { 0x00009bcc, 0x00000035 },
28050 -    { 0x00009bd0, 0x00000035 },
28051 -    { 0x00009bd4, 0x00000035 },
28052 -    { 0x00009bd8, 0x00000035 },
28053 -    { 0x00009bdc, 0x00000035 },
28054 -    { 0x00009be0, 0x00000035 },
28055 -    { 0x00009be4, 0x00000035 },
28056 -    { 0x00009be8, 0x00000035 },
28057 -    { 0x00009bec, 0x00000035 },
28058 -    { 0x00009bf0, 0x00000035 },
28059 -    { 0x00009bf4, 0x00000035 },
28060 -    { 0x00009bf8, 0x00000010 },
28061 -    { 0x00009bfc, 0x0000001a },
28062 -    { 0x0000a210, 0x40806333 },
28063 -    { 0x0000a214, 0x00106c10 },
28064 -    { 0x0000a218, 0x009c4060 },
28065 -    { 0x0000a220, 0x018830c6 },
28066 -    { 0x0000a224, 0x00000400 },
28067 -    { 0x0000a228, 0x001a0bb5 },
28068 -    { 0x0000a22c, 0x00000000 },
28069 -    { 0x0000a234, 0x20202020 },
28070 -    { 0x0000a238, 0x20202020 },
28071 -    { 0x0000a23c, 0x13c889ae },
28072 -    { 0x0000a240, 0x38490a20 },
28073 -    { 0x0000a244, 0x00007bb6 },
28074 -    { 0x0000a248, 0x0fff3ffc },
28075 -    { 0x0000a24c, 0x00000001 },
28076 -    { 0x0000a250, 0x0000a000 },
28077 -    { 0x0000a254, 0x00000000 },
28078 -    { 0x0000a258, 0x0cc75380 },
28079 -    { 0x0000a25c, 0x0f0f0f01 },
28080 -    { 0x0000a260, 0xdfa91f01 },
28081 -    { 0x0000a268, 0x00000001 },
28082 -    { 0x0000a26c, 0x0ebae9c6 },
28083 -    { 0x0000b26c, 0x0ebae9c6 },
28084 -    { 0x0000c26c, 0x0ebae9c6 },
28085 -    { 0x0000d270, 0x00820820 },
28086 -    { 0x0000a278, 0x1ce739ce },
28087 -    { 0x0000a27c, 0x050701ce },
28088 -    { 0x0000a338, 0x00000000 },
28089 -    { 0x0000a33c, 0x00000000 },
28090 -    { 0x0000a340, 0x00000000 },
28091 -    { 0x0000a344, 0x00000000 },
28092 -    { 0x0000a348, 0x3fffffff },
28093 -    { 0x0000a34c, 0x3fffffff },
28094 -    { 0x0000a350, 0x3fffffff },
28095 -    { 0x0000a354, 0x0003ffff },
28096 -    { 0x0000a358, 0x79a8aa33 },
28097 -    { 0x0000d35c, 0x07ffffef },
28098 -    { 0x0000d360, 0x0fffffe7 },
28099 -    { 0x0000d364, 0x17ffffe5 },
28100 -    { 0x0000d368, 0x1fffffe4 },
28101 -    { 0x0000d36c, 0x37ffffe3 },
28102 -    { 0x0000d370, 0x3fffffe3 },
28103 -    { 0x0000d374, 0x57ffffe3 },
28104 -    { 0x0000d378, 0x5fffffe2 },
28105 -    { 0x0000d37c, 0x7fffffe2 },
28106 -    { 0x0000d380, 0x7f3c7bba },
28107 -    { 0x0000d384, 0xf3307ff0 },
28108 -    { 0x0000a388, 0x0c000000 },
28109 -    { 0x0000a38c, 0x20202020 },
28110 -    { 0x0000a390, 0x20202020 },
28111 -    { 0x0000a394, 0x1ce739ce },
28112 -    { 0x0000a398, 0x000001ce },
28113 -    { 0x0000a39c, 0x00000001 },
28114 -    { 0x0000a3a0, 0x00000000 },
28115 -    { 0x0000a3a4, 0x00000000 },
28116 -    { 0x0000a3a8, 0x00000000 },
28117 -    { 0x0000a3ac, 0x00000000 },
28118 -    { 0x0000a3b0, 0x00000000 },
28119 -    { 0x0000a3b4, 0x00000000 },
28120 -    { 0x0000a3b8, 0x00000000 },
28121 -    { 0x0000a3bc, 0x00000000 },
28122 -    { 0x0000a3c0, 0x00000000 },
28123 -    { 0x0000a3c4, 0x00000000 },
28124 -    { 0x0000a3c8, 0x00000246 },
28125 -    { 0x0000a3cc, 0x20202020 },
28126 -    { 0x0000a3d0, 0x20202020 },
28127 -    { 0x0000a3d4, 0x20202020 },
28128 -    { 0x0000a3dc, 0x1ce739ce },
28129 -    { 0x0000a3e0, 0x000001ce },
28130 -};
28131 -
28132 -static const u32 ar5416Bank0_9100[][2] = {
28133 -    { 0x000098b0, 0x1e5795e5 },
28134 -    { 0x000098e0, 0x02008020 },
28135 -};
28136 -
28137 -static const u32 ar5416BB_RfGain_9100[][3] = {
28138 -    { 0x00009a00, 0x00000000, 0x00000000 },
28139 -    { 0x00009a04, 0x00000040, 0x00000040 },
28140 -    { 0x00009a08, 0x00000080, 0x00000080 },
28141 -    { 0x00009a0c, 0x000001a1, 0x00000141 },
28142 -    { 0x00009a10, 0x000001e1, 0x00000181 },
28143 -    { 0x00009a14, 0x00000021, 0x000001c1 },
28144 -    { 0x00009a18, 0x00000061, 0x00000001 },
28145 -    { 0x00009a1c, 0x00000168, 0x00000041 },
28146 -    { 0x00009a20, 0x000001a8, 0x000001a8 },
28147 -    { 0x00009a24, 0x000001e8, 0x000001e8 },
28148 -    { 0x00009a28, 0x00000028, 0x00000028 },
28149 -    { 0x00009a2c, 0x00000068, 0x00000068 },
28150 -    { 0x00009a30, 0x00000189, 0x000000a8 },
28151 -    { 0x00009a34, 0x000001c9, 0x00000169 },
28152 -    { 0x00009a38, 0x00000009, 0x000001a9 },
28153 -    { 0x00009a3c, 0x00000049, 0x000001e9 },
28154 -    { 0x00009a40, 0x00000089, 0x00000029 },
28155 -    { 0x00009a44, 0x00000170, 0x00000069 },
28156 -    { 0x00009a48, 0x000001b0, 0x00000190 },
28157 -    { 0x00009a4c, 0x000001f0, 0x000001d0 },
28158 -    { 0x00009a50, 0x00000030, 0x00000010 },
28159 -    { 0x00009a54, 0x00000070, 0x00000050 },
28160 -    { 0x00009a58, 0x00000191, 0x00000090 },
28161 -    { 0x00009a5c, 0x000001d1, 0x00000151 },
28162 -    { 0x00009a60, 0x00000011, 0x00000191 },
28163 -    { 0x00009a64, 0x00000051, 0x000001d1 },
28164 -    { 0x00009a68, 0x00000091, 0x00000011 },
28165 -    { 0x00009a6c, 0x000001b8, 0x00000051 },
28166 -    { 0x00009a70, 0x000001f8, 0x00000198 },
28167 -    { 0x00009a74, 0x00000038, 0x000001d8 },
28168 -    { 0x00009a78, 0x00000078, 0x00000018 },
28169 -    { 0x00009a7c, 0x00000199, 0x00000058 },
28170 -    { 0x00009a80, 0x000001d9, 0x00000098 },
28171 -    { 0x00009a84, 0x00000019, 0x00000159 },
28172 -    { 0x00009a88, 0x00000059, 0x00000199 },
28173 -    { 0x00009a8c, 0x00000099, 0x000001d9 },
28174 -    { 0x00009a90, 0x000000d9, 0x00000019 },
28175 -    { 0x00009a94, 0x000000f9, 0x00000059 },
28176 -    { 0x00009a98, 0x000000f9, 0x00000099 },
28177 -    { 0x00009a9c, 0x000000f9, 0x000000d9 },
28178 -    { 0x00009aa0, 0x000000f9, 0x000000f9 },
28179 -    { 0x00009aa4, 0x000000f9, 0x000000f9 },
28180 -    { 0x00009aa8, 0x000000f9, 0x000000f9 },
28181 -    { 0x00009aac, 0x000000f9, 0x000000f9 },
28182 -    { 0x00009ab0, 0x000000f9, 0x000000f9 },
28183 -    { 0x00009ab4, 0x000000f9, 0x000000f9 },
28184 -    { 0x00009ab8, 0x000000f9, 0x000000f9 },
28185 -    { 0x00009abc, 0x000000f9, 0x000000f9 },
28186 -    { 0x00009ac0, 0x000000f9, 0x000000f9 },
28187 -    { 0x00009ac4, 0x000000f9, 0x000000f9 },
28188 -    { 0x00009ac8, 0x000000f9, 0x000000f9 },
28189 -    { 0x00009acc, 0x000000f9, 0x000000f9 },
28190 -    { 0x00009ad0, 0x000000f9, 0x000000f9 },
28191 -    { 0x00009ad4, 0x000000f9, 0x000000f9 },
28192 -    { 0x00009ad8, 0x000000f9, 0x000000f9 },
28193 -    { 0x00009adc, 0x000000f9, 0x000000f9 },
28194 -    { 0x00009ae0, 0x000000f9, 0x000000f9 },
28195 -    { 0x00009ae4, 0x000000f9, 0x000000f9 },
28196 -    { 0x00009ae8, 0x000000f9, 0x000000f9 },
28197 -    { 0x00009aec, 0x000000f9, 0x000000f9 },
28198 -    { 0x00009af0, 0x000000f9, 0x000000f9 },
28199 -    { 0x00009af4, 0x000000f9, 0x000000f9 },
28200 -    { 0x00009af8, 0x000000f9, 0x000000f9 },
28201 -    { 0x00009afc, 0x000000f9, 0x000000f9 },
28202 -};
28203 -
28204 -static const u32 ar5416Bank1_9100[][2] = {
28205 -    { 0x000098b0, 0x02108421},
28206 -    { 0x000098ec, 0x00000008},
28207 -};
28208 -
28209 -static const u32 ar5416Bank2_9100[][2] = {
28210 -    { 0x000098b0, 0x0e73ff17},
28211 -    { 0x000098e0, 0x00000420},
28212 -};
28213 -
28214 -static const u32 ar5416Bank3_9100[][3] = {
28215 -    { 0x000098f0, 0x01400018, 0x01c00018 },
28216 -};
28217 -
28218 -static const u32 ar5416Bank6_9100[][3] = {
28219 -
28220 -    { 0x0000989c, 0x00000000, 0x00000000 },
28221 -    { 0x0000989c, 0x00000000, 0x00000000 },
28222 -    { 0x0000989c, 0x00000000, 0x00000000 },
28223 -    { 0x0000989c, 0x00e00000, 0x00e00000 },
28224 -    { 0x0000989c, 0x005e0000, 0x005e0000 },
28225 -    { 0x0000989c, 0x00120000, 0x00120000 },
28226 -    { 0x0000989c, 0x00620000, 0x00620000 },
28227 -    { 0x0000989c, 0x00020000, 0x00020000 },
28228 -    { 0x0000989c, 0x00ff0000, 0x00ff0000 },
28229 -    { 0x0000989c, 0x00ff0000, 0x00ff0000 },
28230 -    { 0x0000989c, 0x00ff0000, 0x00ff0000 },
28231 -    { 0x0000989c, 0x00ff0000, 0x00ff0000 },
28232 -    { 0x0000989c, 0x005f0000, 0x005f0000 },
28233 -    { 0x0000989c, 0x00870000, 0x00870000 },
28234 -    { 0x0000989c, 0x00f90000, 0x00f90000 },
28235 -    { 0x0000989c, 0x007b0000, 0x007b0000 },
28236 -    { 0x0000989c, 0x00ff0000, 0x00ff0000 },
28237 -    { 0x0000989c, 0x00f50000, 0x00f50000 },
28238 -    { 0x0000989c, 0x00dc0000, 0x00dc0000 },
28239 -    { 0x0000989c, 0x00110000, 0x00110000 },
28240 -    { 0x0000989c, 0x006100a8, 0x006100a8 },
28241 -    { 0x0000989c, 0x004210a2, 0x004210a2 },
28242 -    { 0x0000989c, 0x0014000f, 0x0014000f },
28243 -    { 0x0000989c, 0x00c40002, 0x00c40002 },
28244 -    { 0x0000989c, 0x003000f2, 0x003000f2 },
28245 -    { 0x0000989c, 0x00440016, 0x00440016 },
28246 -    { 0x0000989c, 0x00410040, 0x00410040 },
28247 -    { 0x0000989c, 0x000180d6, 0x000180d6 },
28248 -    { 0x0000989c, 0x0000c0aa, 0x0000c0aa },
28249 -    { 0x0000989c, 0x000000b1, 0x000000b1 },
28250 -    { 0x0000989c, 0x00002000, 0x00002000 },
28251 -    { 0x0000989c, 0x000000d4, 0x000000d4 },
28252 -    { 0x000098d0, 0x0000000f, 0x0010000f },
28253 -};
28254 -
28255 -
28256 -static const u32 ar5416Bank6TPC_9100[][3] = {
28257 -
28258 -    { 0x0000989c, 0x00000000, 0x00000000 },
28259 -    { 0x0000989c, 0x00000000, 0x00000000 },
28260 -    { 0x0000989c, 0x00000000, 0x00000000 },
28261 -    { 0x0000989c, 0x00e00000, 0x00e00000 },
28262 -    { 0x0000989c, 0x005e0000, 0x005e0000 },
28263 -    { 0x0000989c, 0x00120000, 0x00120000 },
28264 -    { 0x0000989c, 0x00620000, 0x00620000 },
28265 -    { 0x0000989c, 0x00020000, 0x00020000 },
28266 -    { 0x0000989c, 0x00ff0000, 0x00ff0000 },
28267 -    { 0x0000989c, 0x00ff0000, 0x00ff0000 },
28268 -    { 0x0000989c, 0x00ff0000, 0x00ff0000 },
28269 -    { 0x0000989c, 0x40ff0000, 0x40ff0000 },
28270 -    { 0x0000989c, 0x005f0000, 0x005f0000 },
28271 -    { 0x0000989c, 0x00870000, 0x00870000 },
28272 -    { 0x0000989c, 0x00f90000, 0x00f90000 },
28273 -    { 0x0000989c, 0x007b0000, 0x007b0000 },
28274 -    { 0x0000989c, 0x00ff0000, 0x00ff0000 },
28275 -    { 0x0000989c, 0x00f50000, 0x00f50000 },
28276 -    { 0x0000989c, 0x00dc0000, 0x00dc0000 },
28277 -    { 0x0000989c, 0x00110000, 0x00110000 },
28278 -    { 0x0000989c, 0x006100a8, 0x006100a8 },
28279 -    { 0x0000989c, 0x00423022, 0x00423022 },
28280 -    { 0x0000989c, 0x2014008f, 0x2014008f },
28281 -    { 0x0000989c, 0x00c40002, 0x00c40002 },
28282 -    { 0x0000989c, 0x003000f2, 0x003000f2 },
28283 -    { 0x0000989c, 0x00440016, 0x00440016 },
28284 -    { 0x0000989c, 0x00410040, 0x00410040 },
28285 -    { 0x0000989c, 0x0001805e, 0x0001805e },
28286 -    { 0x0000989c, 0x0000c0ab, 0x0000c0ab },
28287 -    { 0x0000989c, 0x000000e1, 0x000000e1 },
28288 -    { 0x0000989c, 0x00007080, 0x00007080 },
28289 -    { 0x0000989c, 0x000000d4, 0x000000d4 },
28290 -    { 0x000098d0, 0x0000000f, 0x0010000f },
28291 -};
28292 -
28293 -static const u32 ar5416Bank7_9100[][2] = {
28294 -    { 0x0000989c, 0x00000500 },
28295 -    { 0x0000989c, 0x00000800 },
28296 -    { 0x000098cc, 0x0000000e },
28297 -};
28298 -
28299 -static const u32 ar5416Addac_9100[][2] = {
28300 -    {0x0000989c, 0x00000000 },
28301 -    {0x0000989c, 0x00000000 },
28302 -    {0x0000989c, 0x00000000 },
28303 -    {0x0000989c, 0x00000000 },
28304 -    {0x0000989c, 0x00000000 },
28305 -    {0x0000989c, 0x00000000 },
28306 -    {0x0000989c, 0x00000000 },
28307 -    {0x0000989c, 0x00000010 },
28308 -    {0x0000989c, 0x00000000 },
28309 -    {0x0000989c, 0x00000000 },
28310 -    {0x0000989c, 0x00000000 },
28311 -    {0x0000989c, 0x00000000 },
28312 -    {0x0000989c, 0x00000000 },
28313 -    {0x0000989c, 0x00000000 },
28314 -    {0x0000989c, 0x00000000 },
28315 -    {0x0000989c, 0x00000000 },
28316 -    {0x0000989c, 0x00000000 },
28317 -    {0x0000989c, 0x00000000 },
28318 -    {0x0000989c, 0x00000000 },
28319 -    {0x0000989c, 0x00000000 },
28320 -    {0x0000989c, 0x00000000 },
28321 -    {0x0000989c, 0x000000c0 },
28322 -    {0x0000989c, 0x00000015 },
28323 -    {0x0000989c, 0x00000000 },
28324 -    {0x0000989c, 0x00000000 },
28325 -    {0x0000989c, 0x00000000 },
28326 -    {0x0000989c, 0x00000000 },
28327 -    {0x0000989c, 0x00000000 },
28328 -    {0x0000989c, 0x00000000 },
28329 -    {0x0000989c, 0x00000000 },
28330 -    {0x0000989c, 0x00000000 },
28331 -    {0x000098cc, 0x00000000 },
28332 -};
28333 -
28334 -static const u32 ar5416Modes_9160[][6] = {
28335 -    { 0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160, 0x000001e0 },
28336 -    { 0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c, 0x000001e0 },
28337 -    { 0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38, 0x00001180 },
28338 -    { 0x000010f0, 0x0000a000, 0x00014000, 0x00016000, 0x0000b000, 0x00014008 },
28339 -    { 0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00, 0x06e006e0 },
28340 -    { 0x0000801c, 0x128d93a7, 0x128d93cf, 0x12e013d7, 0x12e013ab, 0x098813cf },
28341 -    { 0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300, 0x00000303 },
28342 -    { 0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200, 0x02020200 },
28343 -    { 0x00009824, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
28344 -    { 0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001 },
28345 -    { 0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
28346 -    { 0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000007 },
28347 -    { 0x00009844, 0x0372161e, 0x0372161e, 0x037216a0, 0x037216a0, 0x037216a0 },
28348 -    { 0x00009848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68, 0x00197a68 },
28349 -    { 0x0000a848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68, 0x00197a68 },
28350 -    { 0x0000b848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68, 0x00197a68 },
28351 -    { 0x00009850, 0x6c48b4e2, 0x6c48b4e2, 0x6c48b0e2, 0x6c48b0e2, 0x6c48b0e2 },
28352 -    { 0x00009858, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e },
28353 -    { 0x0000985c, 0x31395d5e, 0x31395d5e, 0x31395d5e, 0x31395d5e, 0x31395d5e },
28354 -    { 0x00009860, 0x00048d18, 0x00048d18, 0x00048d20, 0x00048d20, 0x00048d18 },
28355 -    { 0x0000c864, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00 },
28356 -    { 0x00009868, 0x409a40d0, 0x409a40d0, 0x409a40d0, 0x409a40d0, 0x409a40d0 },
28357 -    { 0x0000986c, 0x050cb081, 0x050cb081, 0x050cb081, 0x050cb081, 0x050cb081 },
28358 -    { 0x00009914, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898, 0x000007d0 },
28359 -    { 0x00009918, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b, 0x00000016 },
28360 -    { 0x00009924, 0xd00a8a07, 0xd00a8a07, 0xd00a8a0d, 0xd00a8a0d, 0xd00a8a0d },
28361 -    { 0x00009944, 0xffb81020, 0xffb81020, 0xffb81020, 0xffb81020, 0xffb81020 },
28362 -    { 0x00009960, 0x00009b40, 0x00009b40, 0x00009b40, 0x00009b40, 0x00009b40 },
28363 -    { 0x0000a960, 0x00009b40, 0x00009b40, 0x00009b40, 0x00009b40, 0x00009b40 },
28364 -    { 0x0000b960, 0x00009b40, 0x00009b40, 0x00009b40, 0x00009b40, 0x00009b40 },
28365 -    { 0x00009964, 0x00001120, 0x00001120, 0x00001120, 0x00001120, 0x00001120 },
28366 -    { 0x0000c968, 0x000003b5, 0x000003b5, 0x000003ce, 0x000003ce, 0x000003ce },
28367 -    { 0x0000c9bc, 0x001a0600, 0x001a0600, 0x001a0c00, 0x001a0c00, 0x001a0c00 },
28368 -    { 0x000099c0, 0x038919be, 0x038919be, 0x038919be, 0x038919be, 0x038919be },
28369 -    { 0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77 },
28370 -    { 0x000099c8, 0x60f65329, 0x60f65329, 0x60f65329, 0x60f65329, 0x60f65329 },
28371 -    { 0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8 },
28372 -    { 0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384, 0x00046384 },
28373 -    { 0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
28374 -    { 0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
28375 -    { 0x0000a204, 0x00000880, 0x00000880, 0x00000880, 0x00000880, 0x00000880 },
28376 -    { 0x0000a208, 0xd6be4788, 0xd6be4788, 0xd03e4788, 0xd03e4788, 0xd03e4788 },
28377 -    { 0x0000a20c, 0x002fc160, 0x002fc160, 0x002ac120, 0x002ac120, 0x002ac120 },
28378 -    { 0x0000b20c, 0x002fc160, 0x002fc160, 0x002ac120, 0x002ac120, 0x002ac120 },
28379 -    { 0x0000c20c, 0x002fc160, 0x002fc160, 0x002ac120, 0x002ac120, 0x002ac120 },
28380 -    { 0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a },
28381 -    { 0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000 },
28382 -    { 0x0000a274, 0x0a1a9caa, 0x0a1a9caa, 0x0a1a7caa, 0x0a1a7caa, 0x0a1a7caa },
28383 -    { 0x0000a300, 0x18010000, 0x18010000, 0x18010000, 0x18010000, 0x18010000 },
28384 -    { 0x0000a304, 0x30032602, 0x30032602, 0x2e032402, 0x2e032402, 0x2e032402 },
28385 -    { 0x0000a308, 0x48073e06, 0x48073e06, 0x4a0a3c06, 0x4a0a3c06, 0x4a0a3c06 },
28386 -    { 0x0000a30c, 0x560b4c0a, 0x560b4c0a, 0x621a540b, 0x621a540b, 0x621a540b },
28387 -    { 0x0000a310, 0x641a600f, 0x641a600f, 0x764f6c1b, 0x764f6c1b, 0x764f6c1b },
28388 -    { 0x0000a314, 0x7a4f6e1b, 0x7a4f6e1b, 0x845b7a5a, 0x845b7a5a, 0x845b7a5a },
28389 -    { 0x0000a318, 0x8c5b7e5a, 0x8c5b7e5a, 0x950f8ccf, 0x950f8ccf, 0x950f8ccf },
28390 -    { 0x0000a31c, 0x9d0f96cf, 0x9d0f96cf, 0xa5cf9b4f, 0xa5cf9b4f, 0xa5cf9b4f },
28391 -    { 0x0000a320, 0xb51fa69f, 0xb51fa69f, 0xbddfaf1f, 0xbddfaf1f, 0xbddfaf1f },
28392 -    { 0x0000a324, 0xcb3fbd07, 0xcb3fbcbf, 0xd1ffc93f, 0xd1ffc93f, 0xd1ffc93f },
28393 -    { 0x0000a328, 0x0000d7bf, 0x0000d7bf, 0x00000000, 0x00000000, 0x00000000 },
28394 -    { 0x0000a32c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
28395 -    { 0x0000a330, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
28396 -    { 0x0000a334, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
28397 -};
28398 -
28399 -static const u32 ar5416Common_9160[][2] = {
28400 -    { 0x0000000c, 0x00000000 },
28401 -    { 0x00000030, 0x00020015 },
28402 -    { 0x00000034, 0x00000005 },
28403 -    { 0x00000040, 0x00000000 },
28404 -    { 0x00000044, 0x00000008 },
28405 -    { 0x00000048, 0x00000008 },
28406 -    { 0x0000004c, 0x00000010 },
28407 -    { 0x00000050, 0x00000000 },
28408 -    { 0x00000054, 0x0000001f },
28409 -    { 0x00000800, 0x00000000 },
28410 -    { 0x00000804, 0x00000000 },
28411 -    { 0x00000808, 0x00000000 },
28412 -    { 0x0000080c, 0x00000000 },
28413 -    { 0x00000810, 0x00000000 },
28414 -    { 0x00000814, 0x00000000 },
28415 -    { 0x00000818, 0x00000000 },
28416 -    { 0x0000081c, 0x00000000 },
28417 -    { 0x00000820, 0x00000000 },
28418 -    { 0x00000824, 0x00000000 },
28419 -    { 0x00001040, 0x002ffc0f },
28420 -    { 0x00001044, 0x002ffc0f },
28421 -    { 0x00001048, 0x002ffc0f },
28422 -    { 0x0000104c, 0x002ffc0f },
28423 -    { 0x00001050, 0x002ffc0f },
28424 -    { 0x00001054, 0x002ffc0f },
28425 -    { 0x00001058, 0x002ffc0f },
28426 -    { 0x0000105c, 0x002ffc0f },
28427 -    { 0x00001060, 0x002ffc0f },
28428 -    { 0x00001064, 0x002ffc0f },
28429 -    { 0x00001230, 0x00000000 },
28430 -    { 0x00001270, 0x00000000 },
28431 -    { 0x00001038, 0x00000000 },
28432 -    { 0x00001078, 0x00000000 },
28433 -    { 0x000010b8, 0x00000000 },
28434 -    { 0x000010f8, 0x00000000 },
28435 -    { 0x00001138, 0x00000000 },
28436 -    { 0x00001178, 0x00000000 },
28437 -    { 0x000011b8, 0x00000000 },
28438 -    { 0x000011f8, 0x00000000 },
28439 -    { 0x00001238, 0x00000000 },
28440 -    { 0x00001278, 0x00000000 },
28441 -    { 0x000012b8, 0x00000000 },
28442 -    { 0x000012f8, 0x00000000 },
28443 -    { 0x00001338, 0x00000000 },
28444 -    { 0x00001378, 0x00000000 },
28445 -    { 0x000013b8, 0x00000000 },
28446 -    { 0x000013f8, 0x00000000 },
28447 -    { 0x00001438, 0x00000000 },
28448 -    { 0x00001478, 0x00000000 },
28449 -    { 0x000014b8, 0x00000000 },
28450 -    { 0x000014f8, 0x00000000 },
28451 -    { 0x00001538, 0x00000000 },
28452 -    { 0x00001578, 0x00000000 },
28453 -    { 0x000015b8, 0x00000000 },
28454 -    { 0x000015f8, 0x00000000 },
28455 -    { 0x00001638, 0x00000000 },
28456 -    { 0x00001678, 0x00000000 },
28457 -    { 0x000016b8, 0x00000000 },
28458 -    { 0x000016f8, 0x00000000 },
28459 -    { 0x00001738, 0x00000000 },
28460 -    { 0x00001778, 0x00000000 },
28461 -    { 0x000017b8, 0x00000000 },
28462 -    { 0x000017f8, 0x00000000 },
28463 -    { 0x0000103c, 0x00000000 },
28464 -    { 0x0000107c, 0x00000000 },
28465 -    { 0x000010bc, 0x00000000 },
28466 -    { 0x000010fc, 0x00000000 },
28467 -    { 0x0000113c, 0x00000000 },
28468 -    { 0x0000117c, 0x00000000 },
28469 -    { 0x000011bc, 0x00000000 },
28470 -    { 0x000011fc, 0x00000000 },
28471 -    { 0x0000123c, 0x00000000 },
28472 -    { 0x0000127c, 0x00000000 },
28473 -    { 0x000012bc, 0x00000000 },
28474 -    { 0x000012fc, 0x00000000 },
28475 -    { 0x0000133c, 0x00000000 },
28476 -    { 0x0000137c, 0x00000000 },
28477 -    { 0x000013bc, 0x00000000 },
28478 -    { 0x000013fc, 0x00000000 },
28479 -    { 0x0000143c, 0x00000000 },
28480 -    { 0x0000147c, 0x00000000 },
28481 -    { 0x00004030, 0x00000002 },
28482 -    { 0x0000403c, 0x00000002 },
28483 -    { 0x00007010, 0x00000020 },
28484 -    { 0x00007038, 0x000004c2 },
28485 -    { 0x00008004, 0x00000000 },
28486 -    { 0x00008008, 0x00000000 },
28487 -    { 0x0000800c, 0x00000000 },
28488 -    { 0x00008018, 0x00000700 },
28489 -    { 0x00008020, 0x00000000 },
28490 -    { 0x00008038, 0x00000000 },
28491 -    { 0x0000803c, 0x00000000 },
28492 -    { 0x00008048, 0x40000000 },
28493 -    { 0x00008054, 0x00000000 },
28494 -    { 0x00008058, 0x00000000 },
28495 -    { 0x0000805c, 0x000fc78f },
28496 -    { 0x00008060, 0x0000000f },
28497 -    { 0x00008064, 0x00000000 },
28498 -    { 0x000080c0, 0x2a82301a },
28499 -    { 0x000080c4, 0x05dc01e0 },
28500 -    { 0x000080c8, 0x1f402710 },
28501 -    { 0x000080cc, 0x01f40000 },
28502 -    { 0x000080d0, 0x00001e00 },
28503 -    { 0x000080d4, 0x00000000 },
28504 -    { 0x000080d8, 0x00400000 },
28505 -    { 0x000080e0, 0xffffffff },
28506 -    { 0x000080e4, 0x0000ffff },
28507 -    { 0x000080e8, 0x003f3f3f },
28508 -    { 0x000080ec, 0x00000000 },
28509 -    { 0x000080f0, 0x00000000 },
28510 -    { 0x000080f4, 0x00000000 },
28511 -    { 0x000080f8, 0x00000000 },
28512 -    { 0x000080fc, 0x00020000 },
28513 -    { 0x00008100, 0x00020000 },
28514 -    { 0x00008104, 0x00000001 },
28515 -    { 0x00008108, 0x00000052 },
28516 -    { 0x0000810c, 0x00000000 },
28517 -    { 0x00008110, 0x00000168 },
28518 -    { 0x00008118, 0x000100aa },
28519 -    { 0x0000811c, 0x00003210 },
28520 -    { 0x00008120, 0x08f04800 },
28521 -    { 0x00008124, 0x00000000 },
28522 -    { 0x00008128, 0x00000000 },
28523 -    { 0x0000812c, 0x00000000 },
28524 -    { 0x00008130, 0x00000000 },
28525 -    { 0x00008134, 0x00000000 },
28526 -    { 0x00008138, 0x00000000 },
28527 -    { 0x0000813c, 0x00000000 },
28528 -    { 0x00008144, 0xffffffff },
28529 -    { 0x00008168, 0x00000000 },
28530 -    { 0x0000816c, 0x00000000 },
28531 -    { 0x00008170, 0x32143320 },
28532 -    { 0x00008174, 0xfaa4fa50 },
28533 -    { 0x00008178, 0x00000100 },
28534 -    { 0x0000817c, 0x00000000 },
28535 -    { 0x000081c4, 0x00000000 },
28536 -    { 0x000081d0, 0x00003210 },
28537 -    { 0x000081ec, 0x00000000 },
28538 -    { 0x000081f0, 0x00000000 },
28539 -    { 0x000081f4, 0x00000000 },
28540 -    { 0x000081f8, 0x00000000 },
28541 -    { 0x000081fc, 0x00000000 },
28542 -    { 0x00008200, 0x00000000 },
28543 -    { 0x00008204, 0x00000000 },
28544 -    { 0x00008208, 0x00000000 },
28545 -    { 0x0000820c, 0x00000000 },
28546 -    { 0x00008210, 0x00000000 },
28547 -    { 0x00008214, 0x00000000 },
28548 -    { 0x00008218, 0x00000000 },
28549 -    { 0x0000821c, 0x00000000 },
28550 -    { 0x00008220, 0x00000000 },
28551 -    { 0x00008224, 0x00000000 },
28552 -    { 0x00008228, 0x00000000 },
28553 -    { 0x0000822c, 0x00000000 },
28554 -    { 0x00008230, 0x00000000 },
28555 -    { 0x00008234, 0x00000000 },
28556 -    { 0x00008238, 0x00000000 },
28557 -    { 0x0000823c, 0x00000000 },
28558 -    { 0x00008240, 0x00100000 },
28559 -    { 0x00008244, 0x0010f400 },
28560 -    { 0x00008248, 0x00000100 },
28561 -    { 0x0000824c, 0x0001e800 },
28562 -    { 0x00008250, 0x00000000 },
28563 -    { 0x00008254, 0x00000000 },
28564 -    { 0x00008258, 0x00000000 },
28565 -    { 0x0000825c, 0x400000ff },
28566 -    { 0x00008260, 0x00080922 },
28567 -    { 0x00008270, 0x00000000 },
28568 -    { 0x00008274, 0x40000000 },
28569 -    { 0x00008278, 0x003e4180 },
28570 -    { 0x0000827c, 0x00000000 },
28571 -    { 0x00008284, 0x0000002c },
28572 -    { 0x00008288, 0x0000002c },
28573 -    { 0x0000828c, 0x00000000 },
28574 -    { 0x00008294, 0x00000000 },
28575 -    { 0x00008298, 0x00000000 },
28576 -    { 0x00008300, 0x00000000 },
28577 -    { 0x00008304, 0x00000000 },
28578 -    { 0x00008308, 0x00000000 },
28579 -    { 0x0000830c, 0x00000000 },
28580 -    { 0x00008310, 0x00000000 },
28581 -    { 0x00008314, 0x00000000 },
28582 -    { 0x00008318, 0x00000000 },
28583 -    { 0x00008328, 0x00000000 },
28584 -    { 0x0000832c, 0x00000007 },
28585 -    { 0x00008330, 0x00000302 },
28586 -    { 0x00008334, 0x00000e00 },
28587 -    { 0x00008338, 0x00ff0000 },
28588 -    { 0x0000833c, 0x00000000 },
28589 -    { 0x00008340, 0x000107ff },
28590 -    { 0x00009808, 0x00000000 },
28591 -    { 0x0000980c, 0xad848e19 },
28592 -    { 0x00009810, 0x7d14e000 },
28593 -    { 0x00009814, 0x9c0a9f6b },
28594 -    { 0x0000981c, 0x00000000 },
28595 -    { 0x0000982c, 0x0000a000 },
28596 -    { 0x00009830, 0x00000000 },
28597 -    { 0x0000983c, 0x00200400 },
28598 -    { 0x00009840, 0x206a01ae },
28599 -    { 0x0000984c, 0x1284233c },
28600 -    { 0x00009854, 0x00000859 },
28601 -    { 0x00009900, 0x00000000 },
28602 -    { 0x00009904, 0x00000000 },
28603 -    { 0x00009908, 0x00000000 },
28604 -    { 0x0000990c, 0x00000000 },
28605 -    { 0x0000991c, 0x10000fff },
28606 -    { 0x00009920, 0x05100000 },
28607 -    { 0x0000a920, 0x05100000 },
28608 -    { 0x0000b920, 0x05100000 },
28609 -    { 0x00009928, 0x00000001 },
28610 -    { 0x0000992c, 0x00000004 },
28611 -    { 0x00009934, 0x1e1f2022 },
28612 -    { 0x00009938, 0x0a0b0c0d },
28613 -    { 0x0000993c, 0x00000000 },
28614 -    { 0x00009948, 0x9280b212 },
28615 -    { 0x0000994c, 0x00020028 },
28616 -    { 0x00009954, 0x5f3ca3de },
28617 -    { 0x00009958, 0x2108ecff },
28618 -    { 0x00009940, 0x00750604 },
28619 -    { 0x0000c95c, 0x004b6a8e },
28620 -    { 0x00009970, 0x190fb515 },
28621 -    { 0x00009974, 0x00000000 },
28622 -    { 0x00009978, 0x00000001 },
28623 -    { 0x0000997c, 0x00000000 },
28624 -    { 0x00009980, 0x00000000 },
28625 -    { 0x00009984, 0x00000000 },
28626 -    { 0x00009988, 0x00000000 },
28627 -    { 0x0000998c, 0x00000000 },
28628 -    { 0x00009990, 0x00000000 },
28629 -    { 0x00009994, 0x00000000 },
28630 -    { 0x00009998, 0x00000000 },
28631 -    { 0x0000999c, 0x00000000 },
28632 -    { 0x000099a0, 0x00000000 },
28633 -    { 0x000099a4, 0x00000001 },
28634 -    { 0x000099a8, 0x201fff00 },
28635 -    { 0x000099ac, 0x006f0000 },
28636 -    { 0x000099b0, 0x03051000 },
28637 -    { 0x000099dc, 0x00000000 },
28638 -    { 0x000099e0, 0x00000200 },
28639 -    { 0x000099e4, 0xaaaaaaaa },
28640 -    { 0x000099e8, 0x3c466478 },
28641 -    { 0x000099ec, 0x0cc80caa },
28642 -    { 0x000099fc, 0x00001042 },
28643 -    { 0x00009b00, 0x00000000 },
28644 -    { 0x00009b04, 0x00000001 },
28645 -    { 0x00009b08, 0x00000002 },
28646 -    { 0x00009b0c, 0x00000003 },
28647 -    { 0x00009b10, 0x00000004 },
28648 -    { 0x00009b14, 0x00000005 },
28649 -    { 0x00009b18, 0x00000008 },
28650 -    { 0x00009b1c, 0x00000009 },
28651 -    { 0x00009b20, 0x0000000a },
28652 -    { 0x00009b24, 0x0000000b },
28653 -    { 0x00009b28, 0x0000000c },
28654 -    { 0x00009b2c, 0x0000000d },
28655 -    { 0x00009b30, 0x00000010 },
28656 -    { 0x00009b34, 0x00000011 },
28657 -    { 0x00009b38, 0x00000012 },
28658 -    { 0x00009b3c, 0x00000013 },
28659 -    { 0x00009b40, 0x00000014 },
28660 -    { 0x00009b44, 0x00000015 },
28661 -    { 0x00009b48, 0x00000018 },
28662 -    { 0x00009b4c, 0x00000019 },
28663 -    { 0x00009b50, 0x0000001a },
28664 -    { 0x00009b54, 0x0000001b },
28665 -    { 0x00009b58, 0x0000001c },
28666 -    { 0x00009b5c, 0x0000001d },
28667 -    { 0x00009b60, 0x00000020 },
28668 -    { 0x00009b64, 0x00000021 },
28669 -    { 0x00009b68, 0x00000022 },
28670 -    { 0x00009b6c, 0x00000023 },
28671 -    { 0x00009b70, 0x00000024 },
28672 -    { 0x00009b74, 0x00000025 },
28673 -    { 0x00009b78, 0x00000028 },
28674 -    { 0x00009b7c, 0x00000029 },
28675 -    { 0x00009b80, 0x0000002a },
28676 -    { 0x00009b84, 0x0000002b },
28677 -    { 0x00009b88, 0x0000002c },
28678 -    { 0x00009b8c, 0x0000002d },
28679 -    { 0x00009b90, 0x00000030 },
28680 -    { 0x00009b94, 0x00000031 },
28681 -    { 0x00009b98, 0x00000032 },
28682 -    { 0x00009b9c, 0x00000033 },
28683 -    { 0x00009ba0, 0x00000034 },
28684 -    { 0x00009ba4, 0x00000035 },
28685 -    { 0x00009ba8, 0x00000035 },
28686 -    { 0x00009bac, 0x00000035 },
28687 -    { 0x00009bb0, 0x00000035 },
28688 -    { 0x00009bb4, 0x00000035 },
28689 -    { 0x00009bb8, 0x00000035 },
28690 -    { 0x00009bbc, 0x00000035 },
28691 -    { 0x00009bc0, 0x00000035 },
28692 -    { 0x00009bc4, 0x00000035 },
28693 -    { 0x00009bc8, 0x00000035 },
28694 -    { 0x00009bcc, 0x00000035 },
28695 -    { 0x00009bd0, 0x00000035 },
28696 -    { 0x00009bd4, 0x00000035 },
28697 -    { 0x00009bd8, 0x00000035 },
28698 -    { 0x00009bdc, 0x00000035 },
28699 -    { 0x00009be0, 0x00000035 },
28700 -    { 0x00009be4, 0x00000035 },
28701 -    { 0x00009be8, 0x00000035 },
28702 -    { 0x00009bec, 0x00000035 },
28703 -    { 0x00009bf0, 0x00000035 },
28704 -    { 0x00009bf4, 0x00000035 },
28705 -    { 0x00009bf8, 0x00000010 },
28706 -    { 0x00009bfc, 0x0000001a },
28707 -    { 0x0000a210, 0x40806333 },
28708 -    { 0x0000a214, 0x00106c10 },
28709 -    { 0x0000a218, 0x009c4060 },
28710 -    { 0x0000a220, 0x018830c6 },
28711 -    { 0x0000a224, 0x00000400 },
28712 -    { 0x0000a228, 0x001a0bb5 },
28713 -    { 0x0000a22c, 0x00000000 },
28714 -    { 0x0000a234, 0x20202020 },
28715 -    { 0x0000a238, 0x20202020 },
28716 -    { 0x0000a23c, 0x13c889af },
28717 -    { 0x0000a240, 0x38490a20 },
28718 -    { 0x0000a244, 0x00007bb6 },
28719 -    { 0x0000a248, 0x0fff3ffc },
28720 -    { 0x0000a24c, 0x00000001 },
28721 -    { 0x0000a250, 0x0000e000 },
28722 -    { 0x0000a254, 0x00000000 },
28723 -    { 0x0000a258, 0x0cc75380 },
28724 -    { 0x0000a25c, 0x0f0f0f01 },
28725 -    { 0x0000a260, 0xdfa91f01 },
28726 -    { 0x0000a268, 0x00000001 },
28727 -    { 0x0000a26c, 0x0ebae9c6 },
28728 -    { 0x0000b26c, 0x0ebae9c6 },
28729 -    { 0x0000c26c, 0x0ebae9c6 },
28730 -    { 0x0000d270, 0x00820820 },
28731 -    { 0x0000a278, 0x1ce739ce },
28732 -    { 0x0000a27c, 0x050701ce },
28733 -    { 0x0000a338, 0x00000000 },
28734 -    { 0x0000a33c, 0x00000000 },
28735 -    { 0x0000a340, 0x00000000 },
28736 -    { 0x0000a344, 0x00000000 },
28737 -    { 0x0000a348, 0x3fffffff },
28738 -    { 0x0000a34c, 0x3fffffff },
28739 -    { 0x0000a350, 0x3fffffff },
28740 -    { 0x0000a354, 0x0003ffff },
28741 -    { 0x0000a358, 0x79bfaa03 },
28742 -    { 0x0000d35c, 0x07ffffef },
28743 -    { 0x0000d360, 0x0fffffe7 },
28744 -    { 0x0000d364, 0x17ffffe5 },
28745 -    { 0x0000d368, 0x1fffffe4 },
28746 -    { 0x0000d36c, 0x37ffffe3 },
28747 -    { 0x0000d370, 0x3fffffe3 },
28748 -    { 0x0000d374, 0x57ffffe3 },
28749 -    { 0x0000d378, 0x5fffffe2 },
28750 -    { 0x0000d37c, 0x7fffffe2 },
28751 -    { 0x0000d380, 0x7f3c7bba },
28752 -    { 0x0000d384, 0xf3307ff0 },
28753 -    { 0x0000a388, 0x0c000000 },
28754 -    { 0x0000a38c, 0x20202020 },
28755 -    { 0x0000a390, 0x20202020 },
28756 -    { 0x0000a394, 0x1ce739ce },
28757 -    { 0x0000a398, 0x000001ce },
28758 -    { 0x0000a39c, 0x00000001 },
28759 -    { 0x0000a3a0, 0x00000000 },
28760 -    { 0x0000a3a4, 0x00000000 },
28761 -    { 0x0000a3a8, 0x00000000 },
28762 -    { 0x0000a3ac, 0x00000000 },
28763 -    { 0x0000a3b0, 0x00000000 },
28764 -    { 0x0000a3b4, 0x00000000 },
28765 -    { 0x0000a3b8, 0x00000000 },
28766 -    { 0x0000a3bc, 0x00000000 },
28767 -    { 0x0000a3c0, 0x00000000 },
28768 -    { 0x0000a3c4, 0x00000000 },
28769 -    { 0x0000a3c8, 0x00000246 },
28770 -    { 0x0000a3cc, 0x20202020 },
28771 -    { 0x0000a3d0, 0x20202020 },
28772 -    { 0x0000a3d4, 0x20202020 },
28773 -    { 0x0000a3dc, 0x1ce739ce },
28774 -    { 0x0000a3e0, 0x000001ce },
28775 -};
28776 -
28777 -static const u32 ar5416Bank0_9160[][2] = {
28778 -    { 0x000098b0, 0x1e5795e5 },
28779 -    { 0x000098e0, 0x02008020 },
28780 -};
28781 -
28782 -static const u32 ar5416BB_RfGain_9160[][3] = {
28783 -    { 0x00009a00, 0x00000000, 0x00000000 },
28784 -    { 0x00009a04, 0x00000040, 0x00000040 },
28785 -    { 0x00009a08, 0x00000080, 0x00000080 },
28786 -    { 0x00009a0c, 0x000001a1, 0x00000141 },
28787 -    { 0x00009a10, 0x000001e1, 0x00000181 },
28788 -    { 0x00009a14, 0x00000021, 0x000001c1 },
28789 -    { 0x00009a18, 0x00000061, 0x00000001 },
28790 -    { 0x00009a1c, 0x00000168, 0x00000041 },
28791 -    { 0x00009a20, 0x000001a8, 0x000001a8 },
28792 -    { 0x00009a24, 0x000001e8, 0x000001e8 },
28793 -    { 0x00009a28, 0x00000028, 0x00000028 },
28794 -    { 0x00009a2c, 0x00000068, 0x00000068 },
28795 -    { 0x00009a30, 0x00000189, 0x000000a8 },
28796 -    { 0x00009a34, 0x000001c9, 0x00000169 },
28797 -    { 0x00009a38, 0x00000009, 0x000001a9 },
28798 -    { 0x00009a3c, 0x00000049, 0x000001e9 },
28799 -    { 0x00009a40, 0x00000089, 0x00000029 },
28800 -    { 0x00009a44, 0x00000170, 0x00000069 },
28801 -    { 0x00009a48, 0x000001b0, 0x00000190 },
28802 -    { 0x00009a4c, 0x000001f0, 0x000001d0 },
28803 -    { 0x00009a50, 0x00000030, 0x00000010 },
28804 -    { 0x00009a54, 0x00000070, 0x00000050 },
28805 -    { 0x00009a58, 0x00000191, 0x00000090 },
28806 -    { 0x00009a5c, 0x000001d1, 0x00000151 },
28807 -    { 0x00009a60, 0x00000011, 0x00000191 },
28808 -    { 0x00009a64, 0x00000051, 0x000001d1 },
28809 -    { 0x00009a68, 0x00000091, 0x00000011 },
28810 -    { 0x00009a6c, 0x000001b8, 0x00000051 },
28811 -    { 0x00009a70, 0x000001f8, 0x00000198 },
28812 -    { 0x00009a74, 0x00000038, 0x000001d8 },
28813 -    { 0x00009a78, 0x00000078, 0x00000018 },
28814 -    { 0x00009a7c, 0x00000199, 0x00000058 },
28815 -    { 0x00009a80, 0x000001d9, 0x00000098 },
28816 -    { 0x00009a84, 0x00000019, 0x00000159 },
28817 -    { 0x00009a88, 0x00000059, 0x00000199 },
28818 -    { 0x00009a8c, 0x00000099, 0x000001d9 },
28819 -    { 0x00009a90, 0x000000d9, 0x00000019 },
28820 -    { 0x00009a94, 0x000000f9, 0x00000059 },
28821 -    { 0x00009a98, 0x000000f9, 0x00000099 },
28822 -    { 0x00009a9c, 0x000000f9, 0x000000d9 },
28823 -    { 0x00009aa0, 0x000000f9, 0x000000f9 },
28824 -    { 0x00009aa4, 0x000000f9, 0x000000f9 },
28825 -    { 0x00009aa8, 0x000000f9, 0x000000f9 },
28826 -    { 0x00009aac, 0x000000f9, 0x000000f9 },
28827 -    { 0x00009ab0, 0x000000f9, 0x000000f9 },
28828 -    { 0x00009ab4, 0x000000f9, 0x000000f9 },
28829 -    { 0x00009ab8, 0x000000f9, 0x000000f9 },
28830 -    { 0x00009abc, 0x000000f9, 0x000000f9 },
28831 -    { 0x00009ac0, 0x000000f9, 0x000000f9 },
28832 -    { 0x00009ac4, 0x000000f9, 0x000000f9 },
28833 -    { 0x00009ac8, 0x000000f9, 0x000000f9 },
28834 -    { 0x00009acc, 0x000000f9, 0x000000f9 },
28835 -    { 0x00009ad0, 0x000000f9, 0x000000f9 },
28836 -    { 0x00009ad4, 0x000000f9, 0x000000f9 },
28837 -    { 0x00009ad8, 0x000000f9, 0x000000f9 },
28838 -    { 0x00009adc, 0x000000f9, 0x000000f9 },
28839 -    { 0x00009ae0, 0x000000f9, 0x000000f9 },
28840 -    { 0x00009ae4, 0x000000f9, 0x000000f9 },
28841 -    { 0x00009ae8, 0x000000f9, 0x000000f9 },
28842 -    { 0x00009aec, 0x000000f9, 0x000000f9 },
28843 -    { 0x00009af0, 0x000000f9, 0x000000f9 },
28844 -    { 0x00009af4, 0x000000f9, 0x000000f9 },
28845 -    { 0x00009af8, 0x000000f9, 0x000000f9 },
28846 -    { 0x00009afc, 0x000000f9, 0x000000f9 },
28847 -};
28848 -
28849 -static const u32 ar5416Bank1_9160[][2] = {
28850 -    { 0x000098b0, 0x02108421 },
28851 -    { 0x000098ec, 0x00000008 },
28852 -};
28853 -
28854 -static const u32 ar5416Bank2_9160[][2] = {
28855 -    { 0x000098b0, 0x0e73ff17 },
28856 -    { 0x000098e0, 0x00000420 },
28857 -};
28858 -
28859 -static const u32 ar5416Bank3_9160[][3] = {
28860 -    { 0x000098f0, 0x01400018, 0x01c00018 },
28861 -};
28862 -
28863 -static const u32 ar5416Bank6_9160[][3] = {
28864 -    { 0x0000989c, 0x00000000, 0x00000000 },
28865 -    { 0x0000989c, 0x00000000, 0x00000000 },
28866 -    { 0x0000989c, 0x00000000, 0x00000000 },
28867 -    { 0x0000989c, 0x00e00000, 0x00e00000 },
28868 -    { 0x0000989c, 0x005e0000, 0x005e0000 },
28869 -    { 0x0000989c, 0x00120000, 0x00120000 },
28870 -    { 0x0000989c, 0x00620000, 0x00620000 },
28871 -    { 0x0000989c, 0x00020000, 0x00020000 },
28872 -    { 0x0000989c, 0x00ff0000, 0x00ff0000 },
28873 -    { 0x0000989c, 0x00ff0000, 0x00ff0000 },
28874 -    { 0x0000989c, 0x00ff0000, 0x00ff0000 },
28875 -    { 0x0000989c, 0x40ff0000, 0x40ff0000 },
28876 -    { 0x0000989c, 0x005f0000, 0x005f0000 },
28877 -    { 0x0000989c, 0x00870000, 0x00870000 },
28878 -    { 0x0000989c, 0x00f90000, 0x00f90000 },
28879 -    { 0x0000989c, 0x007b0000, 0x007b0000 },
28880 -    { 0x0000989c, 0x00ff0000, 0x00ff0000 },
28881 -    { 0x0000989c, 0x00f50000, 0x00f50000 },
28882 -    { 0x0000989c, 0x00dc0000, 0x00dc0000 },
28883 -    { 0x0000989c, 0x00110000, 0x00110000 },
28884 -    { 0x0000989c, 0x006100a8, 0x006100a8 },
28885 -    { 0x0000989c, 0x004210a2, 0x004210a2 },
28886 -    { 0x0000989c, 0x0014008f, 0x0014008f },
28887 -    { 0x0000989c, 0x00c40003, 0x00c40003 },
28888 -    { 0x0000989c, 0x003000f2, 0x003000f2 },
28889 -    { 0x0000989c, 0x00440016, 0x00440016 },
28890 -    { 0x0000989c, 0x00410040, 0x00410040 },
28891 -    { 0x0000989c, 0x0001805e, 0x0001805e },
28892 -    { 0x0000989c, 0x0000c0ab, 0x0000c0ab },
28893 -    { 0x0000989c, 0x000000f1, 0x000000f1 },
28894 -    { 0x0000989c, 0x00002081, 0x00002081 },
28895 -    { 0x0000989c, 0x000000d4, 0x000000d4 },
28896 -    { 0x000098d0, 0x0000000f, 0x0010000f },
28897 -};
28898 -
28899 -static const u32 ar5416Bank6TPC_9160[][3] = {
28900 -    { 0x0000989c, 0x00000000, 0x00000000 },
28901 -    { 0x0000989c, 0x00000000, 0x00000000 },
28902 -    { 0x0000989c, 0x00000000, 0x00000000 },
28903 -    { 0x0000989c, 0x00e00000, 0x00e00000 },
28904 -    { 0x0000989c, 0x005e0000, 0x005e0000 },
28905 -    { 0x0000989c, 0x00120000, 0x00120000 },
28906 -    { 0x0000989c, 0x00620000, 0x00620000 },
28907 -    { 0x0000989c, 0x00020000, 0x00020000 },
28908 -    { 0x0000989c, 0x00ff0000, 0x00ff0000 },
28909 -    { 0x0000989c, 0x00ff0000, 0x00ff0000 },
28910 -    { 0x0000989c, 0x00ff0000, 0x00ff0000 },
28911 -    { 0x0000989c, 0x40ff0000, 0x40ff0000 },
28912 -    { 0x0000989c, 0x005f0000, 0x005f0000 },
28913 -    { 0x0000989c, 0x00870000, 0x00870000 },
28914 -    { 0x0000989c, 0x00f90000, 0x00f90000 },
28915 -    { 0x0000989c, 0x007b0000, 0x007b0000 },
28916 -    { 0x0000989c, 0x00ff0000, 0x00ff0000 },
28917 -    { 0x0000989c, 0x00f50000, 0x00f50000 },
28918 -    { 0x0000989c, 0x00dc0000, 0x00dc0000 },
28919 -    { 0x0000989c, 0x00110000, 0x00110000 },
28920 -    { 0x0000989c, 0x006100a8, 0x006100a8 },
28921 -    { 0x0000989c, 0x00423022, 0x00423022 },
28922 -    { 0x0000989c, 0x2014008f, 0x2014008f },
28923 -    { 0x0000989c, 0x00c40002, 0x00c40002 },
28924 -    { 0x0000989c, 0x003000f2, 0x003000f2 },
28925 -    { 0x0000989c, 0x00440016, 0x00440016 },
28926 -    { 0x0000989c, 0x00410040, 0x00410040 },
28927 -    { 0x0000989c, 0x0001805e, 0x0001805e },
28928 -    { 0x0000989c, 0x0000c0ab, 0x0000c0ab },
28929 -    { 0x0000989c, 0x000000e1, 0x000000e1 },
28930 -    { 0x0000989c, 0x00007080, 0x00007080 },
28931 -    { 0x0000989c, 0x000000d4, 0x000000d4 },
28932 -    { 0x000098d0, 0x0000000f, 0x0010000f },
28933 -};
28934 -
28935 -static const u32 ar5416Bank7_9160[][2] = {
28936 -    { 0x0000989c, 0x00000500 },
28937 -    { 0x0000989c, 0x00000800 },
28938 -    { 0x000098cc, 0x0000000e },
28939 -};
28940 -
28941 -static u32 ar5416Addac_9160[][2] = {
28942 -    {0x0000989c,  0x00000000 },
28943 -    {0x0000989c,  0x00000000 },
28944 -    {0x0000989c,  0x00000000 },
28945 -    {0x0000989c,  0x00000000 },
28946 -    {0x0000989c,  0x00000000 },
28947 -    {0x0000989c,  0x00000000 },
28948 -    {0x0000989c,  0x000000c0 },
28949 -    {0x0000989c,  0x00000018 },
28950 -    {0x0000989c,  0x00000004 },
28951 -    {0x0000989c,  0x00000000 },
28952 -    {0x0000989c,  0x00000000 },
28953 -    {0x0000989c,  0x00000000 },
28954 -    {0x0000989c,  0x00000000 },
28955 -    {0x0000989c,  0x00000000 },
28956 -    {0x0000989c,  0x00000000 },
28957 -    {0x0000989c,  0x00000000 },
28958 -    {0x0000989c,  0x00000000 },
28959 -    {0x0000989c,  0x00000000 },
28960 -    {0x0000989c,  0x00000000 },
28961 -    {0x0000989c,  0x00000000 },
28962 -    {0x0000989c,  0x00000000 },
28963 -    {0x0000989c,  0x000000c0 },
28964 -    {0x0000989c,  0x00000019 },
28965 -    {0x0000989c,  0x00000004 },
28966 -    {0x0000989c,  0x00000000 },
28967 -    {0x0000989c,  0x00000000 },
28968 -    {0x0000989c,  0x00000000 },
28969 -    {0x0000989c,  0x00000004 },
28970 -    {0x0000989c,  0x00000003 },
28971 -    {0x0000989c,  0x00000008 },
28972 -    {0x0000989c,  0x00000000 },
28973 -    {0x000098cc,  0x00000000 },
28974 -};
28975 -
28976 -static u32 ar5416Addac_91601_1[][2] = {
28977 -    {0x0000989c,  0x00000000 },
28978 -    {0x0000989c,  0x00000000 },
28979 -    {0x0000989c,  0x00000000 },
28980 -    {0x0000989c,  0x00000000 },
28981 -    {0x0000989c,  0x00000000 },
28982 -    {0x0000989c,  0x00000000 },
28983 -    {0x0000989c,  0x000000c0 },
28984 -    {0x0000989c,  0x00000018 },
28985 -    {0x0000989c,  0x00000004 },
28986 -    {0x0000989c,  0x00000000 },
28987 -    {0x0000989c,  0x00000000 },
28988 -    {0x0000989c,  0x00000000 },
28989 -    {0x0000989c,  0x00000000 },
28990 -    {0x0000989c,  0x00000000 },
28991 -    {0x0000989c,  0x00000000 },
28992 -    {0x0000989c,  0x00000000 },
28993 -    {0x0000989c,  0x00000000 },
28994 -    {0x0000989c,  0x00000000 },
28995 -    {0x0000989c,  0x00000000 },
28996 -    {0x0000989c,  0x00000000 },
28997 -    {0x0000989c,  0x00000000 },
28998 -    {0x0000989c,  0x000000c0 },
28999 -    {0x0000989c,  0x00000019 },
29000 -    {0x0000989c,  0x00000004 },
29001 -    {0x0000989c,  0x00000000 },
29002 -    {0x0000989c,  0x00000000 },
29003 -    {0x0000989c,  0x00000000 },
29004 -    {0x0000989c,  0x00000000 },
29005 -    {0x0000989c,  0x00000000 },
29006 -    {0x0000989c,  0x00000000 },
29007 -    {0x0000989c,  0x00000000 },
29008 -    {0x000098cc,  0x00000000 },
29009 -};
29010 -
29011 -/* XXX 9280 1 */
29012 -static const u32 ar9280Modes_9280[][6] = {
29013 -    { 0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160, 0x000001e0 },
29014 -    { 0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c, 0x000001e0 },
29015 -    { 0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38, 0x00001180 },
29016 -    { 0x000010f0, 0x0000a000, 0x00014000, 0x00016000, 0x0000b000, 0x00014008 },
29017 -    { 0x00008014, 0x03e803e8, 0x07d007d0, 0x10801080, 0x08400840, 0x06e006e0 },
29018 -    { 0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b, 0x0988004f },
29019 -    { 0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300, 0x00000303 },
29020 -    { 0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200, 0x02020200 },
29021 -    { 0x00009824, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
29022 -    { 0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001 },
29023 -    { 0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
29024 -    { 0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000007 },
29025 -    { 0x00009844, 0x1372161e, 0x1372161e, 0x137216a0, 0x137216a0, 0x137216a0 },
29026 -    { 0x00009848, 0x00028566, 0x00028566, 0x00028563, 0x00028563, 0x00028563 },
29027 -    { 0x0000a848, 0x00028566, 0x00028566, 0x00028563, 0x00028563, 0x00028563 },
29028 -    { 0x00009850, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2 },
29029 -    { 0x00009858, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e },
29030 -    { 0x0000985c, 0x3139605e, 0x3139605e, 0x3139605e, 0x3139605e, 0x3139605e },
29031 -    { 0x00009860, 0x00049d18, 0x00049d18, 0x00049d20, 0x00049d20, 0x00049d18 },
29032 -    { 0x0000c864, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00 },
29033 -    { 0x00009868, 0x5ac64190, 0x5ac64190, 0x5ac64190, 0x5ac64190, 0x5ac64190 },
29034 -    { 0x0000986c, 0x06903081, 0x06903081, 0x06903881, 0x06903881, 0x06903881 },
29035 -    { 0x00009914, 0x000007d0, 0x000007d0, 0x00000898, 0x00000898, 0x000007d0 },
29036 -    { 0x00009918, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b, 0x00000016 },
29037 -    { 0x00009924, 0xd00a8a07, 0xd00a8a07, 0xd00a8a0d, 0xd00a8a0d, 0xd00a8a0d },
29038 -    { 0x00009944, 0xdfbc1010, 0xdfbc1010, 0xdfbc1010, 0xdfbc1010, 0xdfbc1010 },
29039 -    { 0x00009960, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010 },
29040 -    { 0x0000a960, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010 },
29041 -    { 0x00009964, 0x00000210, 0x00000210, 0x00000210, 0x00000210, 0x00000210 },
29042 -    { 0x0000c9b8, 0x0000001a, 0x0000001a, 0x0000001a, 0x0000001a, 0x0000001a },
29043 -    { 0x0000c9bc, 0x00000600, 0x00000600, 0x00000c00, 0x00000c00, 0x00000c00 },
29044 -    { 0x000099c0, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4 },
29045 -    { 0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77 },
29046 -    { 0x000099c8, 0x60f6532c, 0x60f6532c, 0x60f6532c, 0x60f6532c, 0x60f6532c },
29047 -    { 0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8 },
29048 -    { 0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384, 0x00046384 },
29049 -    { 0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
29050 -    { 0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
29051 -    { 0x00009a00, 0x00008184, 0x00008184, 0x00000214, 0x00000214, 0x00000214 },
29052 -    { 0x00009a04, 0x00008188, 0x00008188, 0x00000218, 0x00000218, 0x00000218 },
29053 -    { 0x00009a08, 0x0000818c, 0x0000818c, 0x00000224, 0x00000224, 0x00000224 },
29054 -    { 0x00009a0c, 0x00008190, 0x00008190, 0x00000228, 0x00000228, 0x00000228 },
29055 -    { 0x00009a10, 0x00008194, 0x00008194, 0x0000022c, 0x0000022c, 0x0000022c },
29056 -    { 0x00009a14, 0x00008200, 0x00008200, 0x00000230, 0x00000230, 0x00000230 },
29057 -    { 0x00009a18, 0x00008204, 0x00008204, 0x000002a4, 0x000002a4, 0x000002a4 },
29058 -    { 0x00009a1c, 0x00008208, 0x00008208, 0x000002a8, 0x000002a8, 0x000002a8 },
29059 -    { 0x00009a20, 0x0000820c, 0x0000820c, 0x000002ac, 0x000002ac, 0x000002ac },
29060 -    { 0x00009a24, 0x00008210, 0x00008210, 0x000002b0, 0x000002b0, 0x000002b0 },
29061 -    { 0x00009a28, 0x00008214, 0x00008214, 0x000002b4, 0x000002b4, 0x000002b4 },
29062 -    { 0x00009a2c, 0x00008280, 0x00008280, 0x000002b8, 0x000002b8, 0x000002b8 },
29063 -    { 0x00009a30, 0x00008284, 0x00008284, 0x00000390, 0x00000390, 0x00000390 },
29064 -    { 0x00009a34, 0x00008288, 0x00008288, 0x00000394, 0x00000394, 0x00000394 },
29065 -    { 0x00009a38, 0x0000828c, 0x0000828c, 0x00000398, 0x00000398, 0x00000398 },
29066 -    { 0x00009a3c, 0x00008290, 0x00008290, 0x00000334, 0x00000334, 0x00000334 },
29067 -    { 0x00009a40, 0x00008300, 0x00008300, 0x00000338, 0x00000338, 0x00000338 },
29068 -    { 0x00009a44, 0x00008304, 0x00008304, 0x000003ac, 0x000003ac, 0x000003ac },
29069 -    { 0x00009a48, 0x00008308, 0x00008308, 0x000003b0, 0x000003b0, 0x000003b0 },
29070 -    { 0x00009a4c, 0x0000830c, 0x0000830c, 0x000003b4, 0x000003b4, 0x000003b4 },
29071 -    { 0x00009a50, 0x00008310, 0x00008310, 0x000003b8, 0x000003b8, 0x000003b8 },
29072 -    { 0x00009a54, 0x00008314, 0x00008314, 0x000003a5, 0x000003a5, 0x000003a5 },
29073 -    { 0x00009a58, 0x00008380, 0x00008380, 0x000003a9, 0x000003a9, 0x000003a9 },
29074 -    { 0x00009a5c, 0x00008384, 0x00008384, 0x000003ad, 0x000003ad, 0x000003ad },
29075 -    { 0x00009a60, 0x00008388, 0x00008388, 0x00008194, 0x00008194, 0x00008194 },
29076 -    { 0x00009a64, 0x0000838c, 0x0000838c, 0x000081a0, 0x000081a0, 0x000081a0 },
29077 -    { 0x00009a68, 0x00008390, 0x00008390, 0x0000820c, 0x0000820c, 0x0000820c },
29078 -    { 0x00009a6c, 0x00008394, 0x00008394, 0x000081a8, 0x000081a8, 0x000081a8 },
29079 -    { 0x00009a70, 0x0000a380, 0x0000a380, 0x00008284, 0x00008284, 0x00008284 },
29080 -    { 0x00009a74, 0x0000a384, 0x0000a384, 0x00008288, 0x00008288, 0x00008288 },
29081 -    { 0x00009a78, 0x0000a388, 0x0000a388, 0x00008224, 0x00008224, 0x00008224 },
29082 -    { 0x00009a7c, 0x0000a38c, 0x0000a38c, 0x00008290, 0x00008290, 0x00008290 },
29083 -    { 0x00009a80, 0x0000a390, 0x0000a390, 0x00008300, 0x00008300, 0x00008300 },
29084 -    { 0x00009a84, 0x0000a394, 0x0000a394, 0x00008304, 0x00008304, 0x00008304 },
29085 -    { 0x00009a88, 0x0000a780, 0x0000a780, 0x00008308, 0x00008308, 0x00008308 },
29086 -    { 0x00009a8c, 0x0000a784, 0x0000a784, 0x0000830c, 0x0000830c, 0x0000830c },
29087 -    { 0x00009a90, 0x0000a788, 0x0000a788, 0x00008380, 0x00008380, 0x00008380 },
29088 -    { 0x00009a94, 0x0000a78c, 0x0000a78c, 0x00008384, 0x00008384, 0x00008384 },
29089 -    { 0x00009a98, 0x0000a790, 0x0000a790, 0x00008700, 0x00008700, 0x00008700 },
29090 -    { 0x00009a9c, 0x0000a794, 0x0000a794, 0x00008704, 0x00008704, 0x00008704 },
29091 -    { 0x00009aa0, 0x0000ab84, 0x0000ab84, 0x00008708, 0x00008708, 0x00008708 },
29092 -    { 0x00009aa4, 0x0000ab88, 0x0000ab88, 0x0000870c, 0x0000870c, 0x0000870c },
29093 -    { 0x00009aa8, 0x0000ab8c, 0x0000ab8c, 0x00008780, 0x00008780, 0x00008780 },
29094 -    { 0x00009aac, 0x0000ab90, 0x0000ab90, 0x00008784, 0x00008784, 0x00008784 },
29095 -    { 0x00009ab0, 0x0000ab94, 0x0000ab94, 0x00008b00, 0x00008b00, 0x00008b00 },
29096 -    { 0x00009ab4, 0x0000af80, 0x0000af80, 0x00008b04, 0x00008b04, 0x00008b04 },
29097 -    { 0x00009ab8, 0x0000af84, 0x0000af84, 0x00008b08, 0x00008b08, 0x00008b08 },
29098 -    { 0x00009abc, 0x0000af88, 0x0000af88, 0x00008b0c, 0x00008b0c, 0x00008b0c },
29099 -    { 0x00009ac0, 0x0000af8c, 0x0000af8c, 0x00008b80, 0x00008b80, 0x00008b80 },
29100 -    { 0x00009ac4, 0x0000af90, 0x0000af90, 0x00008b84, 0x00008b84, 0x00008b84 },
29101 -    { 0x00009ac8, 0x0000af94, 0x0000af94, 0x00008b88, 0x00008b88, 0x00008b88 },
29102 -    { 0x00009acc, 0x0000b380, 0x0000b380, 0x00008b8c, 0x00008b8c, 0x00008b8c },
29103 -    { 0x00009ad0, 0x0000b384, 0x0000b384, 0x00008b90, 0x00008b90, 0x00008b90 },
29104 -    { 0x00009ad4, 0x0000b388, 0x0000b388, 0x00008f80, 0x00008f80, 0x00008f80 },
29105 -    { 0x00009ad8, 0x0000b38c, 0x0000b38c, 0x00008f84, 0x00008f84, 0x00008f84 },
29106 -    { 0x00009adc, 0x0000b390, 0x0000b390, 0x00008f88, 0x00008f88, 0x00008f88 },
29107 -    { 0x00009ae0, 0x0000b394, 0x0000b394, 0x00008f8c, 0x00008f8c, 0x00008f8c },
29108 -    { 0x00009ae4, 0x0000b398, 0x0000b398, 0x00008f90, 0x00008f90, 0x00008f90 },
29109 -    { 0x00009ae8, 0x0000b780, 0x0000b780, 0x0000930c, 0x0000930c, 0x0000930c },
29110 -    { 0x00009aec, 0x0000b784, 0x0000b784, 0x00009310, 0x00009310, 0x00009310 },
29111 -    { 0x00009af0, 0x0000b788, 0x0000b788, 0x00009384, 0x00009384, 0x00009384 },
29112 -    { 0x00009af4, 0x0000b78c, 0x0000b78c, 0x00009388, 0x00009388, 0x00009388 },
29113 -    { 0x00009af8, 0x0000b790, 0x0000b790, 0x00009324, 0x00009324, 0x00009324 },
29114 -    { 0x00009afc, 0x0000b794, 0x0000b794, 0x00009704, 0x00009704, 0x00009704 },
29115 -    { 0x00009b00, 0x0000b798, 0x0000b798, 0x000096a4, 0x000096a4, 0x000096a4 },
29116 -    { 0x00009b04, 0x0000d784, 0x0000d784, 0x000096a8, 0x000096a8, 0x000096a8 },
29117 -    { 0x00009b08, 0x0000d788, 0x0000d788, 0x00009710, 0x00009710, 0x00009710 },
29118 -    { 0x00009b0c, 0x0000d78c, 0x0000d78c, 0x00009714, 0x00009714, 0x00009714 },
29119 -    { 0x00009b10, 0x0000d790, 0x0000d790, 0x00009720, 0x00009720, 0x00009720 },
29120 -    { 0x00009b14, 0x0000f780, 0x0000f780, 0x00009724, 0x00009724, 0x00009724 },
29121 -    { 0x00009b18, 0x0000f784, 0x0000f784, 0x00009728, 0x00009728, 0x00009728 },
29122 -    { 0x00009b1c, 0x0000f788, 0x0000f788, 0x0000972c, 0x0000972c, 0x0000972c },
29123 -    { 0x00009b20, 0x0000f78c, 0x0000f78c, 0x000097a0, 0x000097a0, 0x000097a0 },
29124 -    { 0x00009b24, 0x0000f790, 0x0000f790, 0x000097a4, 0x000097a4, 0x000097a4 },
29125 -    { 0x00009b28, 0x0000f794, 0x0000f794, 0x000097a8, 0x000097a8, 0x000097a8 },
29126 -    { 0x00009b2c, 0x0000f7a4, 0x0000f7a4, 0x000097b0, 0x000097b0, 0x000097b0 },
29127 -    { 0x00009b30, 0x0000f7a8, 0x0000f7a8, 0x000097b4, 0x000097b4, 0x000097b4 },
29128 -    { 0x00009b34, 0x0000f7ac, 0x0000f7ac, 0x000097b8, 0x000097b8, 0x000097b8 },
29129 -    { 0x00009b38, 0x0000f7b0, 0x0000f7b0, 0x000097a5, 0x000097a5, 0x000097a5 },
29130 -    { 0x00009b3c, 0x0000f7b4, 0x0000f7b4, 0x000097a9, 0x000097a9, 0x000097a9 },
29131 -    { 0x00009b40, 0x0000f7a1, 0x0000f7a1, 0x000097ad, 0x000097ad, 0x000097ad },
29132 -    { 0x00009b44, 0x0000f7a5, 0x0000f7a5, 0x000097b1, 0x000097b1, 0x000097b1 },
29133 -    { 0x00009b48, 0x0000f7a9, 0x0000f7a9, 0x000097b5, 0x000097b5, 0x000097b5 },
29134 -    { 0x00009b4c, 0x0000f7ad, 0x0000f7ad, 0x000097b9, 0x000097b9, 0x000097b9 },
29135 -    { 0x00009b50, 0x0000f7b1, 0x0000f7b1, 0x000097c5, 0x000097c5, 0x000097c5 },
29136 -    { 0x00009b54, 0x0000f7b5, 0x0000f7b5, 0x000097c9, 0x000097c9, 0x000097c9 },
29137 -    { 0x00009b58, 0x0000f7c5, 0x0000f7c5, 0x000097d1, 0x000097d1, 0x000097d1 },
29138 -    { 0x00009b5c, 0x0000f7c9, 0x0000f7c9, 0x000097d5, 0x000097d5, 0x000097d5 },
29139 -    { 0x00009b60, 0x0000f7cd, 0x0000f7cd, 0x000097d9, 0x000097d9, 0x000097d9 },
29140 -    { 0x00009b64, 0x0000f7d1, 0x0000f7d1, 0x000097c6, 0x000097c6, 0x000097c6 },
29141 -    { 0x00009b68, 0x0000f7d5, 0x0000f7d5, 0x000097ca, 0x000097ca, 0x000097ca },
29142 -    { 0x00009b6c, 0x0000f7c2, 0x0000f7c2, 0x000097ce, 0x000097ce, 0x000097ce },
29143 -    { 0x00009b70, 0x0000f7c6, 0x0000f7c6, 0x000097d2, 0x000097d2, 0x000097d2 },
29144 -    { 0x00009b74, 0x0000f7ca, 0x0000f7ca, 0x000097d6, 0x000097d6, 0x000097d6 },
29145 -    { 0x00009b78, 0x0000f7ce, 0x0000f7ce, 0x000097c3, 0x000097c3, 0x000097c3 },
29146 -    { 0x00009b7c, 0x0000f7d2, 0x0000f7d2, 0x000097c7, 0x000097c7, 0x000097c7 },
29147 -    { 0x00009b80, 0x0000f7d6, 0x0000f7d6, 0x000097cb, 0x000097cb, 0x000097cb },
29148 -    { 0x00009b84, 0x0000f7c3, 0x0000f7c3, 0x000097cf, 0x000097cf, 0x000097cf },
29149 -    { 0x00009b88, 0x0000f7c7, 0x0000f7c7, 0x000097d7, 0x000097d7, 0x000097d7 },
29150 -    { 0x00009b8c, 0x0000f7cb, 0x0000f7cb, 0x000097db, 0x000097db, 0x000097db },
29151 -    { 0x00009b90, 0x0000f7d3, 0x0000f7d3, 0x000097db, 0x000097db, 0x000097db },
29152 -    { 0x00009b94, 0x0000f7d7, 0x0000f7d7, 0x000097db, 0x000097db, 0x000097db },
29153 -    { 0x00009b98, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
29154 -    { 0x00009b9c, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
29155 -    { 0x00009ba0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
29156 -    { 0x00009ba4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
29157 -    { 0x00009ba8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
29158 -    { 0x00009bac, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
29159 -    { 0x00009bb0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
29160 -    { 0x00009bb4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
29161 -    { 0x00009bb8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
29162 -    { 0x00009bbc, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
29163 -    { 0x00009bc0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
29164 -    { 0x00009bc4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
29165 -    { 0x00009bc8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
29166 -    { 0x00009bcc, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
29167 -    { 0x00009bd0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
29168 -    { 0x00009bd4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
29169 -    { 0x00009bd8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
29170 -    { 0x00009bdc, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
29171 -    { 0x00009be0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
29172 -    { 0x00009be4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
29173 -    { 0x00009be8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
29174 -    { 0x00009bec, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
29175 -    { 0x00009bf0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
29176 -    { 0x00009bf4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
29177 -    { 0x00009bf8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
29178 -    { 0x00009bfc, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
29179 -    { 0x0000a204, 0x00000444, 0x00000444, 0x00000444, 0x00000444, 0x00000444 },
29180 -    { 0x0000a208, 0x803e4788, 0x803e4788, 0x803e4788, 0x803e4788, 0x803e4788 },
29181 -    { 0x0000a20c, 0x000c6019, 0x000c6019, 0x000c6019, 0x000c6019, 0x000c6019 },
29182 -    { 0x0000b20c, 0x000c6019, 0x000c6019, 0x000c6019, 0x000c6019, 0x000c6019 },
29183 -    { 0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a },
29184 -    { 0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000 },
29185 -    { 0x0000a274, 0x0a19c652, 0x0a19c652, 0x0a1aa652, 0x0a1aa652, 0x0a1aa652 },
29186 -    { 0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
29187 -    { 0x0000a304, 0x00003002, 0x00003002, 0x00003002, 0x00003002, 0x00003002 },
29188 -    { 0x0000a308, 0x00006004, 0x00006004, 0x00008009, 0x00008009, 0x00008009 },
29189 -    { 0x0000a30c, 0x0000a006, 0x0000a006, 0x0000b00b, 0x0000b00b, 0x0000b00b },
29190 -    { 0x0000a310, 0x0000e012, 0x0000e012, 0x0000e012, 0x0000e012, 0x0000e012 },
29191 -    { 0x0000a314, 0x00011014, 0x00011014, 0x00012048, 0x00012048, 0x00012048 },
29192 -    { 0x0000a318, 0x0001504a, 0x0001504a, 0x0001604a, 0x0001604a, 0x0001604a },
29193 -    { 0x0000a31c, 0x0001904c, 0x0001904c, 0x0001a211, 0x0001a211, 0x0001a211 },
29194 -    { 0x0000a320, 0x0001c04e, 0x0001c04e, 0x0001e213, 0x0001e213, 0x0001e213 },
29195 -    { 0x0000a324, 0x00020092, 0x00020092, 0x0002121b, 0x0002121b, 0x0002121b },
29196 -    { 0x0000a328, 0x0002410a, 0x0002410a, 0x00024412, 0x00024412, 0x00024412 },
29197 -    { 0x0000a32c, 0x0002710c, 0x0002710c, 0x00028414, 0x00028414, 0x00028414 },
29198 -    { 0x0000a330, 0x0002b18b, 0x0002b18b, 0x0002b44a, 0x0002b44a, 0x0002b44a },
29199 -    { 0x0000a334, 0x0002e1cc, 0x0002e1cc, 0x00030649, 0x00030649, 0x00030649 },
29200 -    { 0x0000a338, 0x000321ec, 0x000321ec, 0x0003364b, 0x0003364b, 0x0003364b },
29201 -    { 0x0000a33c, 0x000321ec, 0x000321ec, 0x00038a49, 0x00038a49, 0x00038a49 },
29202 -    { 0x0000a340, 0x000321ec, 0x000321ec, 0x0003be48, 0x0003be48, 0x0003be48 },
29203 -    { 0x0000a344, 0x000321ec, 0x000321ec, 0x0003ee4a, 0x0003ee4a, 0x0003ee4a },
29204 -    { 0x0000a348, 0x000321ec, 0x000321ec, 0x00042e88, 0x00042e88, 0x00042e88 },
29205 -    { 0x0000a34c, 0x000321ec, 0x000321ec, 0x00046e8a, 0x00046e8a, 0x00046e8a },
29206 -    { 0x0000a350, 0x000321ec, 0x000321ec, 0x00049ec9, 0x00049ec9, 0x00049ec9 },
29207 -    { 0x0000a354, 0x000321ec, 0x000321ec, 0x0004bf42, 0x0004bf42, 0x0004bf42 },
29208 -    { 0x0000784c, 0x0e4f048c, 0x0e4f048c, 0x0e4d048c, 0x0e4d048c, 0x0e4d048c },
29209 -    { 0x00007854, 0x12031828, 0x12031828, 0x12035828, 0x12035828, 0x12035828 },
29210 -    { 0x00007870, 0x807ec400, 0x807ec400, 0x807ec000, 0x807ec000, 0x807ec000 },
29211 -    { 0x0000788c, 0x00010000, 0x00010000, 0x00110000, 0x00110000, 0x00110000 },
29212 -};
29213 -
29214 -static const u32 ar9280Common_9280[][2] = {
29215 -    { 0x0000000c, 0x00000000 },
29216 -    { 0x00000030, 0x00020015 },
29217 -    { 0x00000034, 0x00000005 },
29218 -    { 0x00000040, 0x00000000 },
29219 -    { 0x00000044, 0x00000008 },
29220 -    { 0x00000048, 0x00000008 },
29221 -    { 0x0000004c, 0x00000010 },
29222 -    { 0x00000050, 0x00000000 },
29223 -    { 0x00000054, 0x0000001f },
29224 -    { 0x00000800, 0x00000000 },
29225 -    { 0x00000804, 0x00000000 },
29226 -    { 0x00000808, 0x00000000 },
29227 -    { 0x0000080c, 0x00000000 },
29228 -    { 0x00000810, 0x00000000 },
29229 -    { 0x00000814, 0x00000000 },
29230 -    { 0x00000818, 0x00000000 },
29231 -    { 0x0000081c, 0x00000000 },
29232 -    { 0x00000820, 0x00000000 },
29233 -    { 0x00000824, 0x00000000 },
29234 -    { 0x00001040, 0x002ffc0f },
29235 -    { 0x00001044, 0x002ffc0f },
29236 -    { 0x00001048, 0x002ffc0f },
29237 -    { 0x0000104c, 0x002ffc0f },
29238 -    { 0x00001050, 0x002ffc0f },
29239 -    { 0x00001054, 0x002ffc0f },
29240 -    { 0x00001058, 0x002ffc0f },
29241 -    { 0x0000105c, 0x002ffc0f },
29242 -    { 0x00001060, 0x002ffc0f },
29243 -    { 0x00001064, 0x002ffc0f },
29244 -    { 0x00001230, 0x00000000 },
29245 -    { 0x00001270, 0x00000000 },
29246 -    { 0x00001038, 0x00000000 },
29247 -    { 0x00001078, 0x00000000 },
29248 -    { 0x000010b8, 0x00000000 },
29249 -    { 0x000010f8, 0x00000000 },
29250 -    { 0x00001138, 0x00000000 },
29251 -    { 0x00001178, 0x00000000 },
29252 -    { 0x000011b8, 0x00000000 },
29253 -    { 0x000011f8, 0x00000000 },
29254 -    { 0x00001238, 0x00000000 },
29255 -    { 0x00001278, 0x00000000 },
29256 -    { 0x000012b8, 0x00000000 },
29257 -    { 0x000012f8, 0x00000000 },
29258 -    { 0x00001338, 0x00000000 },
29259 -    { 0x00001378, 0x00000000 },
29260 -    { 0x000013b8, 0x00000000 },
29261 -    { 0x000013f8, 0x00000000 },
29262 -    { 0x00001438, 0x00000000 },
29263 -    { 0x00001478, 0x00000000 },
29264 -    { 0x000014b8, 0x00000000 },
29265 -    { 0x000014f8, 0x00000000 },
29266 -    { 0x00001538, 0x00000000 },
29267 -    { 0x00001578, 0x00000000 },
29268 -    { 0x000015b8, 0x00000000 },
29269 -    { 0x000015f8, 0x00000000 },
29270 -    { 0x00001638, 0x00000000 },
29271 -    { 0x00001678, 0x00000000 },
29272 -    { 0x000016b8, 0x00000000 },
29273 -    { 0x000016f8, 0x00000000 },
29274 -    { 0x00001738, 0x00000000 },
29275 -    { 0x00001778, 0x00000000 },
29276 -    { 0x000017b8, 0x00000000 },
29277 -    { 0x000017f8, 0x00000000 },
29278 -    { 0x0000103c, 0x00000000 },
29279 -    { 0x0000107c, 0x00000000 },
29280 -    { 0x000010bc, 0x00000000 },
29281 -    { 0x000010fc, 0x00000000 },
29282 -    { 0x0000113c, 0x00000000 },
29283 -    { 0x0000117c, 0x00000000 },
29284 -    { 0x000011bc, 0x00000000 },
29285 -    { 0x000011fc, 0x00000000 },
29286 -    { 0x0000123c, 0x00000000 },
29287 -    { 0x0000127c, 0x00000000 },
29288 -    { 0x000012bc, 0x00000000 },
29289 -    { 0x000012fc, 0x00000000 },
29290 -    { 0x0000133c, 0x00000000 },
29291 -    { 0x0000137c, 0x00000000 },
29292 -    { 0x000013bc, 0x00000000 },
29293 -    { 0x000013fc, 0x00000000 },
29294 -    { 0x0000143c, 0x00000000 },
29295 -    { 0x0000147c, 0x00000000 },
29296 -    { 0x00004030, 0x00000002 },
29297 -    { 0x0000403c, 0x00000002 },
29298 -    { 0x00004024, 0x0000001f },
29299 -    { 0x00007010, 0x00000033 },
29300 -    { 0x00007038, 0x000004c2 },
29301 -    { 0x00008004, 0x00000000 },
29302 -    { 0x00008008, 0x00000000 },
29303 -    { 0x0000800c, 0x00000000 },
29304 -    { 0x00008018, 0x00000700 },
29305 -    { 0x00008020, 0x00000000 },
29306 -    { 0x00008038, 0x00000000 },
29307 -    { 0x0000803c, 0x00000000 },
29308 -    { 0x00008048, 0x40000000 },
29309 -    { 0x00008054, 0x00000000 },
29310 -    { 0x00008058, 0x00000000 },
29311 -    { 0x0000805c, 0x000fc78f },
29312 -    { 0x00008060, 0x0000000f },
29313 -    { 0x00008064, 0x00000000 },
29314 -    { 0x00008070, 0x00000000 },
29315 -    { 0x000080c0, 0x2a82301a },
29316 -    { 0x000080c4, 0x05dc01e0 },
29317 -    { 0x000080c8, 0x1f402710 },
29318 -    { 0x000080cc, 0x01f40000 },
29319 -    { 0x000080d0, 0x00001e00 },
29320 -    { 0x000080d4, 0x00000000 },
29321 -    { 0x000080d8, 0x00400000 },
29322 -    { 0x000080e0, 0xffffffff },
29323 -    { 0x000080e4, 0x0000ffff },
29324 -    { 0x000080e8, 0x003f3f3f },
29325 -    { 0x000080ec, 0x00000000 },
29326 -    { 0x000080f0, 0x00000000 },
29327 -    { 0x000080f4, 0x00000000 },
29328 -    { 0x000080f8, 0x00000000 },
29329 -    { 0x000080fc, 0x00020000 },
29330 -    { 0x00008100, 0x00020000 },
29331 -    { 0x00008104, 0x00000001 },
29332 -    { 0x00008108, 0x00000052 },
29333 -    { 0x0000810c, 0x00000000 },
29334 -    { 0x00008110, 0x00000168 },
29335 -    { 0x00008118, 0x000100aa },
29336 -    { 0x0000811c, 0x00003210 },
29337 -    { 0x00008120, 0x08f04800 },
29338 -    { 0x00008124, 0x00000000 },
29339 -    { 0x00008128, 0x00000000 },
29340 -    { 0x0000812c, 0x00000000 },
29341 -    { 0x00008130, 0x00000000 },
29342 -    { 0x00008134, 0x00000000 },
29343 -    { 0x00008138, 0x00000000 },
29344 -    { 0x0000813c, 0x00000000 },
29345 -    { 0x00008144, 0x00000000 },
29346 -    { 0x00008168, 0x00000000 },
29347 -    { 0x0000816c, 0x00000000 },
29348 -    { 0x00008170, 0x32143320 },
29349 -    { 0x00008174, 0xfaa4fa50 },
29350 -    { 0x00008178, 0x00000100 },
29351 -    { 0x0000817c, 0x00000000 },
29352 -    { 0x000081c4, 0x00000000 },
29353 -    { 0x000081d0, 0x00003210 },
29354 -    { 0x000081ec, 0x00000000 },
29355 -    { 0x000081f0, 0x00000000 },
29356 -    { 0x000081f4, 0x00000000 },
29357 -    { 0x000081f8, 0x00000000 },
29358 -    { 0x000081fc, 0x00000000 },
29359 -    { 0x00008200, 0x00000000 },
29360 -    { 0x00008204, 0x00000000 },
29361 -    { 0x00008208, 0x00000000 },
29362 -    { 0x0000820c, 0x00000000 },
29363 -    { 0x00008210, 0x00000000 },
29364 -    { 0x00008214, 0x00000000 },
29365 -    { 0x00008218, 0x00000000 },
29366 -    { 0x0000821c, 0x00000000 },
29367 -    { 0x00008220, 0x00000000 },
29368 -    { 0x00008224, 0x00000000 },
29369 -    { 0x00008228, 0x00000000 },
29370 -    { 0x0000822c, 0x00000000 },
29371 -    { 0x00008230, 0x00000000 },
29372 -    { 0x00008234, 0x00000000 },
29373 -    { 0x00008238, 0x00000000 },
29374 -    { 0x0000823c, 0x00000000 },
29375 -    { 0x00008240, 0x00100000 },
29376 -    { 0x00008244, 0x0010f400 },
29377 -    { 0x00008248, 0x00000100 },
29378 -    { 0x0000824c, 0x0001e800 },
29379 -    { 0x00008250, 0x00000000 },
29380 -    { 0x00008254, 0x00000000 },
29381 -    { 0x00008258, 0x00000000 },
29382 -    { 0x0000825c, 0x400000ff },
29383 -    { 0x00008260, 0x00080922 },
29384 -    { 0x00008270, 0x00000000 },
29385 -    { 0x00008274, 0x40000000 },
29386 -    { 0x00008278, 0x003e4180 },
29387 -    { 0x0000827c, 0x00000000 },
29388 -    { 0x00008284, 0x0000002c },
29389 -    { 0x00008288, 0x0000002c },
29390 -    { 0x0000828c, 0x00000000 },
29391 -    { 0x00008294, 0x00000000 },
29392 -    { 0x00008298, 0x00000000 },
29393 -    { 0x00008300, 0x00000000 },
29394 -    { 0x00008304, 0x00000000 },
29395 -    { 0x00008308, 0x00000000 },
29396 -    { 0x0000830c, 0x00000000 },
29397 -    { 0x00008310, 0x00000000 },
29398 -    { 0x00008314, 0x00000000 },
29399 -    { 0x00008318, 0x00000000 },
29400 -    { 0x00008328, 0x00000000 },
29401 -    { 0x0000832c, 0x00000007 },
29402 -    { 0x00008330, 0x00000302 },
29403 -    { 0x00008334, 0x00000e00 },
29404 -    { 0x00008338, 0x00000000 },
29405 -    { 0x0000833c, 0x00000000 },
29406 -    { 0x00008340, 0x000107ff },
29407 -    { 0x00008344, 0x00000000 },
29408 -    { 0x00009808, 0x00000000 },
29409 -    { 0x0000980c, 0xaf268e30 },
29410 -    { 0x00009810, 0xfd14e000 },
29411 -    { 0x00009814, 0x9c0a9f6b },
29412 -    { 0x0000981c, 0x00000000 },
29413 -    { 0x0000982c, 0x0000a000 },
29414 -    { 0x00009830, 0x00000000 },
29415 -    { 0x0000983c, 0x00200400 },
29416 -    { 0x00009840, 0x206a01ae },
29417 -    { 0x0000984c, 0x0040233c },
29418 -    { 0x0000a84c, 0x0040233c },
29419 -    { 0x00009854, 0x00000044 },
29420 -    { 0x00009900, 0x00000000 },
29421 -    { 0x00009904, 0x00000000 },
29422 -    { 0x00009908, 0x00000000 },
29423 -    { 0x0000990c, 0x00000000 },
29424 -    { 0x0000991c, 0x10000fff },
29425 -    { 0x00009920, 0x04900000 },
29426 -    { 0x0000a920, 0x04900000 },
29427 -    { 0x00009928, 0x00000001 },
29428 -    { 0x0000992c, 0x00000004 },
29429 -    { 0x00009934, 0x1e1f2022 },
29430 -    { 0x00009938, 0x0a0b0c0d },
29431 -    { 0x0000993c, 0x00000000 },
29432 -    { 0x00009948, 0x9280c00a },
29433 -    { 0x0000994c, 0x00020028 },
29434 -    { 0x00009954, 0xe250a51e },
29435 -    { 0x00009958, 0x3388ffff },
29436 -    { 0x00009940, 0x00781204 },
29437 -    { 0x0000c95c, 0x004b6a8e },
29438 -    { 0x0000c968, 0x000003ce },
29439 -    { 0x00009970, 0x190fb514 },
29440 -    { 0x00009974, 0x00000000 },
29441 -    { 0x00009978, 0x00000001 },
29442 -    { 0x0000997c, 0x00000000 },
29443 -    { 0x00009980, 0x00000000 },
29444 -    { 0x00009984, 0x00000000 },
29445 -    { 0x00009988, 0x00000000 },
29446 -    { 0x0000998c, 0x00000000 },
29447 -    { 0x00009990, 0x00000000 },
29448 -    { 0x00009994, 0x00000000 },
29449 -    { 0x00009998, 0x00000000 },
29450 -    { 0x0000999c, 0x00000000 },
29451 -    { 0x000099a0, 0x00000000 },
29452 -    { 0x000099a4, 0x00000001 },
29453 -    { 0x000099a8, 0x201fff00 },
29454 -    { 0x000099ac, 0x006f00c4 },
29455 -    { 0x000099b0, 0x03051000 },
29456 -    { 0x000099b4, 0x00000820 },
29457 -    { 0x000099dc, 0x00000000 },
29458 -    { 0x000099e0, 0x00000000 },
29459 -    { 0x000099e4, 0xaaaaaaaa },
29460 -    { 0x000099e8, 0x3c466478 },
29461 -    { 0x000099ec, 0x0cc80caa },
29462 -    { 0x000099fc, 0x00001042 },
29463 -    { 0x0000a210, 0x4080a333 },
29464 -    { 0x0000a214, 0x40206c10 },
29465 -    { 0x0000a218, 0x009c4060 },
29466 -    { 0x0000a220, 0x01834061 },
29467 -    { 0x0000a224, 0x00000400 },
29468 -    { 0x0000a228, 0x000003b5 },
29469 -    { 0x0000a22c, 0x23277200 },
29470 -    { 0x0000a234, 0x20202020 },
29471 -    { 0x0000a238, 0x20202020 },
29472 -    { 0x0000a23c, 0x13c889af },
29473 -    { 0x0000a240, 0x38490a20 },
29474 -    { 0x0000a244, 0x00007bb6 },
29475 -    { 0x0000a248, 0x0fff3ffc },
29476 -    { 0x0000a24c, 0x00000001 },
29477 -    { 0x0000a250, 0x001da000 },
29478 -    { 0x0000a254, 0x00000000 },
29479 -    { 0x0000a258, 0x0cdbd380 },
29480 -    { 0x0000a25c, 0x0f0f0f01 },
29481 -    { 0x0000a260, 0xdfa91f01 },
29482 -    { 0x0000a268, 0x00000000 },
29483 -    { 0x0000a26c, 0x0ebae9c6 },
29484 -    { 0x0000b26c, 0x0ebae9c6 },
29485 -    { 0x0000d270, 0x00820820 },
29486 -    { 0x0000a278, 0x1ce739ce },
29487 -    { 0x0000a27c, 0x050701ce },
29488 -    { 0x0000a358, 0x7999aa0f },
29489 -    { 0x0000d35c, 0x07ffffef },
29490 -    { 0x0000d360, 0x0fffffe7 },
29491 -    { 0x0000d364, 0x17ffffe5 },
29492 -    { 0x0000d368, 0x1fffffe4 },
29493 -    { 0x0000d36c, 0x37ffffe3 },
29494 -    { 0x0000d370, 0x3fffffe3 },
29495 -    { 0x0000d374, 0x57ffffe3 },
29496 -    { 0x0000d378, 0x5fffffe2 },
29497 -    { 0x0000d37c, 0x7fffffe2 },
29498 -    { 0x0000d380, 0x7f3c7bba },
29499 -    { 0x0000d384, 0xf3307ff0 },
29500 -    { 0x0000a388, 0x0c000000 },
29501 -    { 0x0000a38c, 0x20202020 },
29502 -    { 0x0000a390, 0x20202020 },
29503 -    { 0x0000a394, 0x1ce739ce },
29504 -    { 0x0000a398, 0x000001ce },
29505 -    { 0x0000a39c, 0x00000001 },
29506 -    { 0x0000a3a0, 0x00000000 },
29507 -    { 0x0000a3a4, 0x00000000 },
29508 -    { 0x0000a3a8, 0x00000000 },
29509 -    { 0x0000a3ac, 0x00000000 },
29510 -    { 0x0000a3b0, 0x00000000 },
29511 -    { 0x0000a3b4, 0x00000000 },
29512 -    { 0x0000a3b8, 0x00000000 },
29513 -    { 0x0000a3bc, 0x00000000 },
29514 -    { 0x0000a3c0, 0x00000000 },
29515 -    { 0x0000a3c4, 0x00000000 },
29516 -    { 0x0000a3c8, 0x00000246 },
29517 -    { 0x0000a3cc, 0x20202020 },
29518 -    { 0x0000a3d0, 0x20202020 },
29519 -    { 0x0000a3d4, 0x20202020 },
29520 -    { 0x0000a3dc, 0x1ce739ce },
29521 -    { 0x0000a3e0, 0x000001ce },
29522 -    { 0x0000a3e4, 0x00000000 },
29523 -    { 0x0000a3e8, 0x18c43433 },
29524 -    { 0x0000a3ec, 0x00f38081 },
29525 -    { 0x00007800, 0x00040000 },
29526 -    { 0x00007804, 0xdb005012 },
29527 -    { 0x00007808, 0x04924914 },
29528 -    { 0x0000780c, 0x21084210 },
29529 -    { 0x00007810, 0x6d801300 },
29530 -    { 0x00007814, 0x0019beff },
29531 -    { 0x00007818, 0x07e40000 },
29532 -    { 0x0000781c, 0x00492000 },
29533 -    { 0x00007820, 0x92492480 },
29534 -    { 0x00007824, 0x00040000 },
29535 -    { 0x00007828, 0xdb005012 },
29536 -    { 0x0000782c, 0x04924914 },
29537 -    { 0x00007830, 0x21084210 },
29538 -    { 0x00007834, 0x6d801300 },
29539 -    { 0x00007838, 0x0019beff },
29540 -    { 0x0000783c, 0x07e40000 },
29541 -    { 0x00007840, 0x00492000 },
29542 -    { 0x00007844, 0x92492480 },
29543 -    { 0x00007848, 0x00120000 },
29544 -    { 0x00007850, 0x54214514 },
29545 -    { 0x00007858, 0x92592692 },
29546 -    { 0x00007860, 0x52802000 },
29547 -    { 0x00007864, 0x0a8e370e },
29548 -    { 0x00007868, 0xc0102850 },
29549 -    { 0x0000786c, 0x812d4000 },
29550 -    { 0x00007874, 0x001b6db0 },
29551 -    { 0x00007878, 0x00376b63 },
29552 -    { 0x0000787c, 0x06db6db6 },
29553 -    { 0x00007880, 0x006d8000 },
29554 -    { 0x00007884, 0xffeffffe },
29555 -    { 0x00007888, 0xffeffffe },
29556 -    { 0x00007890, 0x00060aeb },
29557 -    { 0x00007894, 0x5a108000 },
29558 -    { 0x00007898, 0x2a850160 },
29559 -};
29560 -
29561 -/* XXX 9280 2 */
29562 -static const u32 ar9280Modes_9280_2[][6] = {
29563 -    { 0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160, 0x000001e0 },
29564 -    { 0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c, 0x000001e0 },
29565 -    { 0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38, 0x00001180 },
29566 -    { 0x000010f0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008 },
29567 -    { 0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00, 0x06e006e0 },
29568 -    { 0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b, 0x0988004f },
29569 -    { 0x00008120, 0x08f04800, 0x08f04800, 0x08f04810, 0x08f04810, 0x08f04810 },
29570 -    { 0x000081d0, 0x00003210, 0x00003210, 0x0000320a, 0x0000320a, 0x0000320a },
29571 -    { 0x00008318, 0x00003e80, 0x00007d00, 0x00006880, 0x00003440, 0x00006880 },
29572 -    { 0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300, 0x00000303 },
29573 -    { 0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200, 0x02020200 },
29574 -    { 0x00009824, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e },
29575 -    { 0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001 },
29576 -    { 0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
29577 -    { 0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000007 },
29578 -    { 0x00009840, 0x206a022e, 0x206a022e, 0x206a012e, 0x206a012e, 0x206a012e },
29579 -    { 0x00009844, 0x0372161e, 0x0372161e, 0x037216a0, 0x037216a0, 0x037216a0 },
29580 -    { 0x00009850, 0x6c4000e2, 0x6d4000e2, 0x6d4000e2, 0x6c4000e2, 0x6c4000e2 },
29581 -    { 0x00009858, 0x7ec88d2e, 0x7ec88d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e },
29582 -    { 0x0000985c, 0x31395d5e, 0x3139605e, 0x3139605e, 0x31395d5e, 0x31395d5e },
29583 -    { 0x00009860, 0x00048d18, 0x00048d18, 0x00048d20, 0x00048d20, 0x00048d18 },
29584 -    { 0x00009864, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00 },
29585 -    { 0x00009868, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0 },
29586 -    { 0x0000986c, 0x06903081, 0x06903081, 0x06903881, 0x06903881, 0x06903881 },
29587 -    { 0x00009914, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898, 0x000007d0 },
29588 -    { 0x00009918, 0x0000000a, 0x00000014, 0x00000268, 0x0000000b, 0x00000016 },
29589 -    { 0x00009924, 0xd00a8a0b, 0xd00a8a0b, 0xd00a8a0d, 0xd00a8a0d, 0xd00a8a0d },
29590 -    { 0x00009944, 0xffbc1010, 0xffbc1010, 0xffbc1010, 0xffbc1010, 0xffbc1010 },
29591 -    { 0x00009960, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010 },
29592 -    { 0x0000a960, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010 },
29593 -    { 0x00009964, 0x00000210, 0x00000210, 0x00000210, 0x00000210, 0x00000210 },
29594 -    { 0x0000c968, 0x000003b5, 0x000003b5, 0x000003ce, 0x000003ce, 0x000003ce },
29595 -    { 0x000099b8, 0x0000001c, 0x0000001c, 0x0000001c, 0x0000001c, 0x0000001c },
29596 -    { 0x000099bc, 0x00000a00, 0x00000a00, 0x00000c00, 0x00000c00, 0x00000c00 },
29597 -    { 0x000099c0, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4 },
29598 -    { 0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77 },
29599 -    { 0x000099c8, 0x60f65329, 0x60f65329, 0x60f65329, 0x60f65329, 0x60f65329 },
29600 -    { 0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8 },
29601 -    { 0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384, 0x00046384 },
29602 -    { 0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
29603 -    { 0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
29604 -    { 0x0000a204, 0x00000444, 0x00000444, 0x00000444, 0x00000444, 0x00000444 },
29605 -    { 0x0000a20c, 0x00000014, 0x00000014, 0x0001f019, 0x0001f019, 0x0001f019 },
29606 -    { 0x0000b20c, 0x00000014, 0x00000014, 0x0001f019, 0x0001f019, 0x0001f019 },
29607 -    { 0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a },
29608 -    { 0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000 },
29609 -    { 0x0000a23c, 0x13c88000, 0x13c88000, 0x13c88001, 0x13c88000, 0x13c88000 },
29610 -    { 0x0000a250, 0x001ff000, 0x001ff000, 0x0004a000, 0x0004a000, 0x0004a000 },
29611 -    { 0x0000a358, 0x7999aa02, 0x7999aa02, 0x7999aa0e, 0x7999aa0e, 0x7999aa0e },
29612 -    { 0x0000a388, 0x0c000000, 0x0c000000, 0x08000000, 0x0c000000, 0x0c000000 },
29613 -    { 0x0000a3d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
29614 -    { 0x00007894, 0x5a508000, 0x5a508000, 0x5a508000, 0x5a508000, 0x5a508000 },
29615 -};
29616 -
29617 -static const u32 ar9280Common_9280_2[][2] = {
29618 -    { 0x0000000c, 0x00000000 },
29619 -    { 0x00000030, 0x00020015 },
29620 -    { 0x00000034, 0x00000005 },
29621 -    { 0x00000040, 0x00000000 },
29622 -    { 0x00000044, 0x00000008 },
29623 -    { 0x00000048, 0x00000008 },
29624 -    { 0x0000004c, 0x00000010 },
29625 -    { 0x00000050, 0x00000000 },
29626 -    { 0x00000054, 0x0000001f },
29627 -    { 0x00000800, 0x00000000 },
29628 -    { 0x00000804, 0x00000000 },
29629 -    { 0x00000808, 0x00000000 },
29630 -    { 0x0000080c, 0x00000000 },
29631 -    { 0x00000810, 0x00000000 },
29632 -    { 0x00000814, 0x00000000 },
29633 -    { 0x00000818, 0x00000000 },
29634 -    { 0x0000081c, 0x00000000 },
29635 -    { 0x00000820, 0x00000000 },
29636 -    { 0x00000824, 0x00000000 },
29637 -    { 0x00001040, 0x002ffc0f },
29638 -    { 0x00001044, 0x002ffc0f },
29639 -    { 0x00001048, 0x002ffc0f },
29640 -    { 0x0000104c, 0x002ffc0f },
29641 -    { 0x00001050, 0x002ffc0f },
29642 -    { 0x00001054, 0x002ffc0f },
29643 -    { 0x00001058, 0x002ffc0f },
29644 -    { 0x0000105c, 0x002ffc0f },
29645 -    { 0x00001060, 0x002ffc0f },
29646 -    { 0x00001064, 0x002ffc0f },
29647 -    { 0x00001230, 0x00000000 },
29648 -    { 0x00001270, 0x00000000 },
29649 -    { 0x00001038, 0x00000000 },
29650 -    { 0x00001078, 0x00000000 },
29651 -    { 0x000010b8, 0x00000000 },
29652 -    { 0x000010f8, 0x00000000 },
29653 -    { 0x00001138, 0x00000000 },
29654 -    { 0x00001178, 0x00000000 },
29655 -    { 0x000011b8, 0x00000000 },
29656 -    { 0x000011f8, 0x00000000 },
29657 -    { 0x00001238, 0x00000000 },
29658 -    { 0x00001278, 0x00000000 },
29659 -    { 0x000012b8, 0x00000000 },
29660 -    { 0x000012f8, 0x00000000 },
29661 -    { 0x00001338, 0x00000000 },
29662 -    { 0x00001378, 0x00000000 },
29663 -    { 0x000013b8, 0x00000000 },
29664 -    { 0x000013f8, 0x00000000 },
29665 -    { 0x00001438, 0x00000000 },
29666 -    { 0x00001478, 0x00000000 },
29667 -    { 0x000014b8, 0x00000000 },
29668 -    { 0x000014f8, 0x00000000 },
29669 -    { 0x00001538, 0x00000000 },
29670 -    { 0x00001578, 0x00000000 },
29671 -    { 0x000015b8, 0x00000000 },
29672 -    { 0x000015f8, 0x00000000 },
29673 -    { 0x00001638, 0x00000000 },
29674 -    { 0x00001678, 0x00000000 },
29675 -    { 0x000016b8, 0x00000000 },
29676 -    { 0x000016f8, 0x00000000 },
29677 -    { 0x00001738, 0x00000000 },
29678 -    { 0x00001778, 0x00000000 },
29679 -    { 0x000017b8, 0x00000000 },
29680 -    { 0x000017f8, 0x00000000 },
29681 -    { 0x0000103c, 0x00000000 },
29682 -    { 0x0000107c, 0x00000000 },
29683 -    { 0x000010bc, 0x00000000 },
29684 -    { 0x000010fc, 0x00000000 },
29685 -    { 0x0000113c, 0x00000000 },
29686 -    { 0x0000117c, 0x00000000 },
29687 -    { 0x000011bc, 0x00000000 },
29688 -    { 0x000011fc, 0x00000000 },
29689 -    { 0x0000123c, 0x00000000 },
29690 -    { 0x0000127c, 0x00000000 },
29691 -    { 0x000012bc, 0x00000000 },
29692 -    { 0x000012fc, 0x00000000 },
29693 -    { 0x0000133c, 0x00000000 },
29694 -    { 0x0000137c, 0x00000000 },
29695 -    { 0x000013bc, 0x00000000 },
29696 -    { 0x000013fc, 0x00000000 },
29697 -    { 0x0000143c, 0x00000000 },
29698 -    { 0x0000147c, 0x00000000 },
29699 -    { 0x00004030, 0x00000002 },
29700 -    { 0x0000403c, 0x00000002 },
29701 -    { 0x00004024, 0x0000001f },
29702 -    { 0x00004060, 0x00000000 },
29703 -    { 0x00004064, 0x00000000 },
29704 -    { 0x00007010, 0x00000033 },
29705 -    { 0x00007034, 0x00000002 },
29706 -    { 0x00007038, 0x000004c2 },
29707 -    { 0x00008004, 0x00000000 },
29708 -    { 0x00008008, 0x00000000 },
29709 -    { 0x0000800c, 0x00000000 },
29710 -    { 0x00008018, 0x00000700 },
29711 -    { 0x00008020, 0x00000000 },
29712 -    { 0x00008038, 0x00000000 },
29713 -    { 0x0000803c, 0x00000000 },
29714 -    { 0x00008048, 0x40000000 },
29715 -    { 0x00008054, 0x00000000 },
29716 -    { 0x00008058, 0x00000000 },
29717 -    { 0x0000805c, 0x000fc78f },
29718 -    { 0x00008060, 0x0000000f },
29719 -    { 0x00008064, 0x00000000 },
29720 -    { 0x00008070, 0x00000000 },
29721 -    { 0x000080c0, 0x2a80001a },
29722 -    { 0x000080c4, 0x05dc01e0 },
29723 -    { 0x000080c8, 0x1f402710 },
29724 -    { 0x000080cc, 0x01f40000 },
29725 -    { 0x000080d0, 0x00001e00 },
29726 -    { 0x000080d4, 0x00000000 },
29727 -    { 0x000080d8, 0x00400000 },
29728 -    { 0x000080e0, 0xffffffff },
29729 -    { 0x000080e4, 0x0000ffff },
29730 -    { 0x000080e8, 0x003f3f3f },
29731 -    { 0x000080ec, 0x00000000 },
29732 -    { 0x000080f0, 0x00000000 },
29733 -    { 0x000080f4, 0x00000000 },
29734 -    { 0x000080f8, 0x00000000 },
29735 -    { 0x000080fc, 0x00020000 },
29736 -    { 0x00008100, 0x00020000 },
29737 -    { 0x00008104, 0x00000001 },
29738 -    { 0x00008108, 0x00000052 },
29739 -    { 0x0000810c, 0x00000000 },
29740 -    { 0x00008110, 0x00000168 },
29741 -    { 0x00008118, 0x000100aa },
29742 -    { 0x0000811c, 0x00003210 },
29743 -    { 0x00008124, 0x00000000 },
29744 -    { 0x00008128, 0x00000000 },
29745 -    { 0x0000812c, 0x00000000 },
29746 -    { 0x00008130, 0x00000000 },
29747 -    { 0x00008134, 0x00000000 },
29748 -    { 0x00008138, 0x00000000 },
29749 -    { 0x0000813c, 0x00000000 },
29750 -    { 0x00008144, 0xffffffff },
29751 -    { 0x00008168, 0x00000000 },
29752 -    { 0x0000816c, 0x00000000 },
29753 -    { 0x00008170, 0x32143320 },
29754 -    { 0x00008174, 0xfaa4fa50 },
29755 -    { 0x00008178, 0x00000100 },
29756 -    { 0x0000817c, 0x00000000 },
29757 -    { 0x000081c0, 0x00000000 },
29758 -    { 0x000081ec, 0x00000000 },
29759 -    { 0x000081f0, 0x00000000 },
29760 -    { 0x000081f4, 0x00000000 },
29761 -    { 0x000081f8, 0x00000000 },
29762 -    { 0x000081fc, 0x00000000 },
29763 -    { 0x00008200, 0x00000000 },
29764 -    { 0x00008204, 0x00000000 },
29765 -    { 0x00008208, 0x00000000 },
29766 -    { 0x0000820c, 0x00000000 },
29767 -    { 0x00008210, 0x00000000 },
29768 -    { 0x00008214, 0x00000000 },
29769 -    { 0x00008218, 0x00000000 },
29770 -    { 0x0000821c, 0x00000000 },
29771 -    { 0x00008220, 0x00000000 },
29772 -    { 0x00008224, 0x00000000 },
29773 -    { 0x00008228, 0x00000000 },
29774 -    { 0x0000822c, 0x00000000 },
29775 -    { 0x00008230, 0x00000000 },
29776 -    { 0x00008234, 0x00000000 },
29777 -    { 0x00008238, 0x00000000 },
29778 -    { 0x0000823c, 0x00000000 },
29779 -    { 0x00008240, 0x00100000 },
29780 -    { 0x00008244, 0x0010f400 },
29781 -    { 0x00008248, 0x00000100 },
29782 -    { 0x0000824c, 0x0001e800 },
29783 -    { 0x00008250, 0x00000000 },
29784 -    { 0x00008254, 0x00000000 },
29785 -    { 0x00008258, 0x00000000 },
29786 -    { 0x0000825c, 0x400000ff },
29787 -    { 0x00008260, 0x00080922 },
29788 -    { 0x00008264, 0xa8a00010 },
29789 -    { 0x00008270, 0x00000000 },
29790 -    { 0x00008274, 0x40000000 },
29791 -    { 0x00008278, 0x003e4180 },
29792 -    { 0x0000827c, 0x00000000 },
29793 -    { 0x00008284, 0x0000002c },
29794 -    { 0x00008288, 0x0000002c },
29795 -    { 0x0000828c, 0x00000000 },
29796 -    { 0x00008294, 0x00000000 },
29797 -    { 0x00008298, 0x00000000 },
29798 -    { 0x0000829c, 0x00000000 },
29799 -    { 0x00008300, 0x00000040 },
29800 -    { 0x00008314, 0x00000000 },
29801 -    { 0x00008328, 0x00000000 },
29802 -    { 0x0000832c, 0x00000007 },
29803 -    { 0x00008330, 0x00000302 },
29804 -    { 0x00008334, 0x00000e00 },
29805 -    { 0x00008338, 0x00ff0000 },
29806 -    { 0x0000833c, 0x00000000 },
29807 -    { 0x00008340, 0x000107ff },
29808 -    { 0x00008344, 0x00481043 },
29809 -    { 0x00009808, 0x00000000 },
29810 -    { 0x0000980c, 0xafa68e30 },
29811 -    { 0x00009810, 0xfd14e000 },
29812 -    { 0x00009814, 0x9c0a9f6b },
29813 -    { 0x0000981c, 0x00000000 },
29814 -    { 0x0000982c, 0x0000a000 },
29815 -    { 0x00009830, 0x00000000 },
29816 -    { 0x0000983c, 0x00200400 },
29817 -    { 0x0000984c, 0x0040233c },
29818 -    { 0x0000a84c, 0x0040233c },
29819 -    { 0x00009854, 0x00000044 },
29820 -    { 0x00009900, 0x00000000 },
29821 -    { 0x00009904, 0x00000000 },
29822 -    { 0x00009908, 0x00000000 },
29823 -    { 0x0000990c, 0x00000000 },
29824 -    { 0x00009910, 0x01002310 },
29825 -    { 0x0000991c, 0x10000fff },
29826 -    { 0x00009920, 0x04900000 },
29827 -    { 0x0000a920, 0x04900000 },
29828 -    { 0x00009928, 0x00000001 },
29829 -    { 0x0000992c, 0x00000004 },
29830 -    { 0x00009934, 0x1e1f2022 },
29831 -    { 0x00009938, 0x0a0b0c0d },
29832 -    { 0x0000993c, 0x00000000 },
29833 -    { 0x00009948, 0x9280c00a },
29834 -    { 0x0000994c, 0x00020028 },
29835 -    { 0x00009954, 0x5f3ca3de },
29836 -    { 0x00009958, 0x2108ecff },
29837 -    { 0x00009940, 0x14750604 },
29838 -    { 0x0000c95c, 0x004b6a8e },
29839 -    { 0x00009970, 0x190fb515 },
29840 -    { 0x00009974, 0x00000000 },
29841 -    { 0x00009978, 0x00000001 },
29842 -    { 0x0000997c, 0x00000000 },
29843 -    { 0x00009980, 0x00000000 },
29844 -    { 0x00009984, 0x00000000 },
29845 -    { 0x00009988, 0x00000000 },
29846 -    { 0x0000998c, 0x00000000 },
29847 -    { 0x00009990, 0x00000000 },
29848 -    { 0x00009994, 0x00000000 },
29849 -    { 0x00009998, 0x00000000 },
29850 -    { 0x0000999c, 0x00000000 },
29851 -    { 0x000099a0, 0x00000000 },
29852 -    { 0x000099a4, 0x00000001 },
29853 -    { 0x000099a8, 0x201fff00 },
29854 -    { 0x000099ac, 0x006f0000 },
29855 -    { 0x000099b0, 0x03051000 },
29856 -    { 0x000099b4, 0x00000820 },
29857 -    { 0x000099dc, 0x00000000 },
29858 -    { 0x000099e0, 0x00000000 },
29859 -    { 0x000099e4, 0xaaaaaaaa },
29860 -    { 0x000099e8, 0x3c466478 },
29861 -    { 0x000099ec, 0x0cc80caa },
29862 -    { 0x000099f0, 0x00000000 },
29863 -    { 0x000099fc, 0x00001042 },
29864 -    { 0x0000a208, 0x803e4788 },
29865 -    { 0x0000a210, 0x4080a333 },
29866 -    { 0x0000a214, 0x40206c10 },
29867 -    { 0x0000a218, 0x009c4060 },
29868 -    { 0x0000a220, 0x01834061 },
29869 -    { 0x0000a224, 0x00000400 },
29870 -    { 0x0000a228, 0x000003b5 },
29871 -    { 0x0000a22c, 0x233f7180 },
29872 -    { 0x0000a234, 0x20202020 },
29873 -    { 0x0000a238, 0x20202020 },
29874 -    { 0x0000a240, 0x38490a20 },
29875 -    { 0x0000a244, 0x00007bb6 },
29876 -    { 0x0000a248, 0x0fff3ffc },
29877 -    { 0x0000a24c, 0x00000000 },
29878 -    { 0x0000a254, 0x00000000 },
29879 -    { 0x0000a258, 0x0cdbd380 },
29880 -    { 0x0000a25c, 0x0f0f0f01 },
29881 -    { 0x0000a260, 0xdfa91f01 },
29882 -    { 0x0000a268, 0x00000000 },
29883 -    { 0x0000a26c, 0x0e79e5c6 },
29884 -    { 0x0000b26c, 0x0e79e5c6 },
29885 -    { 0x0000d270, 0x00820820 },
29886 -    { 0x0000a278, 0x1ce739ce },
29887 -    { 0x0000d35c, 0x07ffffef },
29888 -    { 0x0000d360, 0x0fffffe7 },
29889 -    { 0x0000d364, 0x17ffffe5 },
29890 -    { 0x0000d368, 0x1fffffe4 },
29891 -    { 0x0000d36c, 0x37ffffe3 },
29892 -    { 0x0000d370, 0x3fffffe3 },
29893 -    { 0x0000d374, 0x57ffffe3 },
29894 -    { 0x0000d378, 0x5fffffe2 },
29895 -    { 0x0000d37c, 0x7fffffe2 },
29896 -    { 0x0000d380, 0x7f3c7bba },
29897 -    { 0x0000d384, 0xf3307ff0 },
29898 -    { 0x0000a38c, 0x20202020 },
29899 -    { 0x0000a390, 0x20202020 },
29900 -    { 0x0000a394, 0x1ce739ce },
29901 -    { 0x0000a398, 0x000001ce },
29902 -    { 0x0000a39c, 0x00000001 },
29903 -    { 0x0000a3a0, 0x00000000 },
29904 -    { 0x0000a3a4, 0x00000000 },
29905 -    { 0x0000a3a8, 0x00000000 },
29906 -    { 0x0000a3ac, 0x00000000 },
29907 -    { 0x0000a3b0, 0x00000000 },
29908 -    { 0x0000a3b4, 0x00000000 },
29909 -    { 0x0000a3b8, 0x00000000 },
29910 -    { 0x0000a3bc, 0x00000000 },
29911 -    { 0x0000a3c0, 0x00000000 },
29912 -    { 0x0000a3c4, 0x00000000 },
29913 -    { 0x0000a3c8, 0x00000246 },
29914 -    { 0x0000a3cc, 0x20202020 },
29915 -    { 0x0000a3d0, 0x20202020 },
29916 -    { 0x0000a3d4, 0x20202020 },
29917 -    { 0x0000a3dc, 0x1ce739ce },
29918 -    { 0x0000a3e0, 0x000001ce },
29919 -    { 0x0000a3e4, 0x00000000 },
29920 -    { 0x0000a3e8, 0x18c43433 },
29921 -    { 0x0000a3ec, 0x00f70081 },
29922 -    { 0x00007800, 0x00040000 },
29923 -    { 0x00007804, 0xdb005012 },
29924 -    { 0x00007808, 0x04924914 },
29925 -    { 0x0000780c, 0x21084210 },
29926 -    { 0x00007810, 0x6d801300 },
29927 -    { 0x00007818, 0x07e41000 },
29928 -    { 0x00007824, 0x00040000 },
29929 -    { 0x00007828, 0xdb005012 },
29930 -    { 0x0000782c, 0x04924914 },
29931 -    { 0x00007830, 0x21084210 },
29932 -    { 0x00007834, 0x6d801300 },
29933 -    { 0x0000783c, 0x07e40000 },
29934 -    { 0x00007848, 0x00100000 },
29935 -    { 0x0000784c, 0x773f0567 },
29936 -    { 0x00007850, 0x54214514 },
29937 -    { 0x00007854, 0x12035828 },
29938 -    { 0x00007858, 0x9259269a },
29939 -    { 0x00007860, 0x52802000 },
29940 -    { 0x00007864, 0x0a8e370e },
29941 -    { 0x00007868, 0xc0102850 },
29942 -    { 0x0000786c, 0x812d4000 },
29943 -    { 0x00007870, 0x807ec400 },
29944 -    { 0x00007874, 0x001b6db0 },
29945 -    { 0x00007878, 0x00376b63 },
29946 -    { 0x0000787c, 0x06db6db6 },
29947 -    { 0x00007880, 0x006d8000 },
29948 -    { 0x00007884, 0xffeffffe },
29949 -    { 0x00007888, 0xffeffffe },
29950 -    { 0x0000788c, 0x00010000 },
29951 -    { 0x00007890, 0x02060aeb },
29952 -    { 0x00007898, 0x2a850160 },
29953 -};
29954 -
29955 -static const u32 ar9280Modes_fast_clock_9280_2[][3] = {
29956 -    { 0x00001030, 0x00000268, 0x000004d0 },
29957 -    { 0x00001070, 0x0000018c, 0x00000318 },
29958 -    { 0x000010b0, 0x00000fd0, 0x00001fa0 },
29959 -    { 0x00008014, 0x044c044c, 0x08980898 },
29960 -    { 0x0000801c, 0x148ec02b, 0x148ec057 },
29961 -    { 0x00008318, 0x000044c0, 0x00008980 },
29962 -    { 0x00009820, 0x02020200, 0x02020200 },
29963 -    { 0x00009824, 0x01000f0f, 0x01000f0f },
29964 -    { 0x00009828, 0x0b020001, 0x0b020001 },
29965 -    { 0x00009834, 0x00000f0f, 0x00000f0f },
29966 -    { 0x00009844, 0x03721821, 0x03721821 },
29967 -    { 0x00009914, 0x00000898, 0x00001130 },
29968 -    { 0x00009918, 0x0000000b, 0x00000016 },
29969 -};
29970 -
29971 -static const u32 ar9280Modes_backoff_23db_rxgain_9280_2[][6] = {
29972 -    { 0x00009a00, 0x00008184, 0x00008184, 0x00000290, 0x00000290, 0x00000290 },
29973 -    { 0x00009a04, 0x00008188, 0x00008188, 0x00000300, 0x00000300, 0x00000300 },
29974 -    { 0x00009a08, 0x0000818c, 0x0000818c, 0x00000304, 0x00000304, 0x00000304 },
29975 -    { 0x00009a0c, 0x00008190, 0x00008190, 0x00000308, 0x00000308, 0x00000308 },
29976 -    { 0x00009a10, 0x00008194, 0x00008194, 0x0000030c, 0x0000030c, 0x0000030c },
29977 -    { 0x00009a14, 0x00008200, 0x00008200, 0x00008000, 0x00008000, 0x00008000 },
29978 -    { 0x00009a18, 0x00008204, 0x00008204, 0x00008004, 0x00008004, 0x00008004 },
29979 -    { 0x00009a1c, 0x00008208, 0x00008208, 0x00008008, 0x00008008, 0x00008008 },
29980 -    { 0x00009a20, 0x0000820c, 0x0000820c, 0x0000800c, 0x0000800c, 0x0000800c },
29981 -    { 0x00009a24, 0x00008210, 0x00008210, 0x00008080, 0x00008080, 0x00008080 },
29982 -    { 0x00009a28, 0x00008214, 0x00008214, 0x00008084, 0x00008084, 0x00008084 },
29983 -    { 0x00009a2c, 0x00008280, 0x00008280, 0x00008088, 0x00008088, 0x00008088 },
29984 -    { 0x00009a30, 0x00008284, 0x00008284, 0x0000808c, 0x0000808c, 0x0000808c },
29985 -    { 0x00009a34, 0x00008288, 0x00008288, 0x00008100, 0x00008100, 0x00008100 },
29986 -    { 0x00009a38, 0x0000828c, 0x0000828c, 0x00008104, 0x00008104, 0x00008104 },
29987 -    { 0x00009a3c, 0x00008290, 0x00008290, 0x00008108, 0x00008108, 0x00008108 },
29988 -    { 0x00009a40, 0x00008300, 0x00008300, 0x0000810c, 0x0000810c, 0x0000810c },
29989 -    { 0x00009a44, 0x00008304, 0x00008304, 0x00008110, 0x00008110, 0x00008110 },
29990 -    { 0x00009a48, 0x00008308, 0x00008308, 0x00008114, 0x00008114, 0x00008114 },
29991 -    { 0x00009a4c, 0x0000830c, 0x0000830c, 0x00008180, 0x00008180, 0x00008180 },
29992 -    { 0x00009a50, 0x00008310, 0x00008310, 0x00008184, 0x00008184, 0x00008184 },
29993 -    { 0x00009a54, 0x00008314, 0x00008314, 0x00008188, 0x00008188, 0x00008188 },
29994 -    { 0x00009a58, 0x00008380, 0x00008380, 0x0000818c, 0x0000818c, 0x0000818c },
29995 -    { 0x00009a5c, 0x00008384, 0x00008384, 0x00008190, 0x00008190, 0x00008190 },
29996 -    { 0x00009a60, 0x00008388, 0x00008388, 0x00008194, 0x00008194, 0x00008194 },
29997 -    { 0x00009a64, 0x0000838c, 0x0000838c, 0x000081a0, 0x000081a0, 0x000081a0 },
29998 -    { 0x00009a68, 0x00008390, 0x00008390, 0x0000820c, 0x0000820c, 0x0000820c },
29999 -    { 0x00009a6c, 0x00008394, 0x00008394, 0x000081a8, 0x000081a8, 0x000081a8 },
30000 -    { 0x00009a70, 0x0000a380, 0x0000a380, 0x00008284, 0x00008284, 0x00008284 },
30001 -    { 0x00009a74, 0x0000a384, 0x0000a384, 0x00008288, 0x00008288, 0x00008288 },
30002 -    { 0x00009a78, 0x0000a388, 0x0000a388, 0x00008224, 0x00008224, 0x00008224 },
30003 -    { 0x00009a7c, 0x0000a38c, 0x0000a38c, 0x00008290, 0x00008290, 0x00008290 },
30004 -    { 0x00009a80, 0x0000a390, 0x0000a390, 0x00008300, 0x00008300, 0x00008300 },
30005 -    { 0x00009a84, 0x0000a394, 0x0000a394, 0x00008304, 0x00008304, 0x00008304 },
30006 -    { 0x00009a88, 0x0000a780, 0x0000a780, 0x00008308, 0x00008308, 0x00008308 },
30007 -    { 0x00009a8c, 0x0000a784, 0x0000a784, 0x0000830c, 0x0000830c, 0x0000830c },
30008 -    { 0x00009a90, 0x0000a788, 0x0000a788, 0x00008380, 0x00008380, 0x00008380 },
30009 -    { 0x00009a94, 0x0000a78c, 0x0000a78c, 0x00008384, 0x00008384, 0x00008384 },
30010 -    { 0x00009a98, 0x0000a790, 0x0000a790, 0x00008700, 0x00008700, 0x00008700 },
30011 -    { 0x00009a9c, 0x0000a794, 0x0000a794, 0x00008704, 0x00008704, 0x00008704 },
30012 -    { 0x00009aa0, 0x0000ab84, 0x0000ab84, 0x00008708, 0x00008708, 0x00008708 },
30013 -    { 0x00009aa4, 0x0000ab88, 0x0000ab88, 0x0000870c, 0x0000870c, 0x0000870c },
30014 -    { 0x00009aa8, 0x0000ab8c, 0x0000ab8c, 0x00008780, 0x00008780, 0x00008780 },
30015 -    { 0x00009aac, 0x0000ab90, 0x0000ab90, 0x00008784, 0x00008784, 0x00008784 },
30016 -    { 0x00009ab0, 0x0000ab94, 0x0000ab94, 0x00008b00, 0x00008b00, 0x00008b00 },
30017 -    { 0x00009ab4, 0x0000af80, 0x0000af80, 0x00008b04, 0x00008b04, 0x00008b04 },
30018 -    { 0x00009ab8, 0x0000af84, 0x0000af84, 0x00008b08, 0x00008b08, 0x00008b08 },
30019 -    { 0x00009abc, 0x0000af88, 0x0000af88, 0x00008b0c, 0x00008b0c, 0x00008b0c },
30020 -    { 0x00009ac0, 0x0000af8c, 0x0000af8c, 0x00008b10, 0x00008b10, 0x00008b10 },
30021 -    { 0x00009ac4, 0x0000af90, 0x0000af90, 0x00008b14, 0x00008b14, 0x00008b14 },
30022 -    { 0x00009ac8, 0x0000af94, 0x0000af94, 0x00008b01, 0x00008b01, 0x00008b01 },
30023 -    { 0x00009acc, 0x0000b380, 0x0000b380, 0x00008b05, 0x00008b05, 0x00008b05 },
30024 -    { 0x00009ad0, 0x0000b384, 0x0000b384, 0x00008b09, 0x00008b09, 0x00008b09 },
30025 -    { 0x00009ad4, 0x0000b388, 0x0000b388, 0x00008b0d, 0x00008b0d, 0x00008b0d },
30026 -    { 0x00009ad8, 0x0000b38c, 0x0000b38c, 0x00008b11, 0x00008b11, 0x00008b11 },
30027 -    { 0x00009adc, 0x0000b390, 0x0000b390, 0x00008b15, 0x00008b15, 0x00008b15 },
30028 -    { 0x00009ae0, 0x0000b394, 0x0000b394, 0x00008b02, 0x00008b02, 0x00008b02 },
30029 -    { 0x00009ae4, 0x0000b398, 0x0000b398, 0x00008b06, 0x00008b06, 0x00008b06 },
30030 -    { 0x00009ae8, 0x0000b780, 0x0000b780, 0x00008b0a, 0x00008b0a, 0x00008b0a },
30031 -    { 0x00009aec, 0x0000b784, 0x0000b784, 0x00008b0e, 0x00008b0e, 0x00008b0e },
30032 -    { 0x00009af0, 0x0000b788, 0x0000b788, 0x00008b12, 0x00008b12, 0x00008b12 },
30033 -    { 0x00009af4, 0x0000b78c, 0x0000b78c, 0x00008b16, 0x00008b16, 0x00008b16 },
30034 -    { 0x00009af8, 0x0000b790, 0x0000b790, 0x00008b03, 0x00008b03, 0x00008b03 },
30035 -    { 0x00009afc, 0x0000b794, 0x0000b794, 0x00008b07, 0x00008b07, 0x00008b07 },
30036 -    { 0x00009b00, 0x0000b798, 0x0000b798, 0x00008b0b, 0x00008b0b, 0x00008b0b },
30037 -    { 0x00009b04, 0x0000d784, 0x0000d784, 0x00008b0f, 0x00008b0f, 0x00008b0f },
30038 -    { 0x00009b08, 0x0000d788, 0x0000d788, 0x00008b13, 0x00008b13, 0x00008b13 },
30039 -    { 0x00009b0c, 0x0000d78c, 0x0000d78c, 0x00008b17, 0x00008b17, 0x00008b17 },
30040 -    { 0x00009b10, 0x0000d790, 0x0000d790, 0x00008b23, 0x00008b23, 0x00008b23 },
30041 -    { 0x00009b14, 0x0000f780, 0x0000f780, 0x00008b27, 0x00008b27, 0x00008b27 },
30042 -    { 0x00009b18, 0x0000f784, 0x0000f784, 0x00008b2b, 0x00008b2b, 0x00008b2b },
30043 -    { 0x00009b1c, 0x0000f788, 0x0000f788, 0x00008b2f, 0x00008b2f, 0x00008b2f },
30044 -    { 0x00009b20, 0x0000f78c, 0x0000f78c, 0x00008b33, 0x00008b33, 0x00008b33 },
30045 -    { 0x00009b24, 0x0000f790, 0x0000f790, 0x00008b37, 0x00008b37, 0x00008b37 },
30046 -    { 0x00009b28, 0x0000f794, 0x0000f794, 0x00008b43, 0x00008b43, 0x00008b43 },
30047 -    { 0x00009b2c, 0x0000f7a4, 0x0000f7a4, 0x00008b47, 0x00008b47, 0x00008b47 },
30048 -    { 0x00009b30, 0x0000f7a8, 0x0000f7a8, 0x00008b4b, 0x00008b4b, 0x00008b4b },
30049 -    { 0x00009b34, 0x0000f7ac, 0x0000f7ac, 0x00008b4f, 0x00008b4f, 0x00008b4f },
30050 -    { 0x00009b38, 0x0000f7b0, 0x0000f7b0, 0x00008b53, 0x00008b53, 0x00008b53 },
30051 -    { 0x00009b3c, 0x0000f7b4, 0x0000f7b4, 0x00008b57, 0x00008b57, 0x00008b57 },
30052 -    { 0x00009b40, 0x0000f7a1, 0x0000f7a1, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30053 -    { 0x00009b44, 0x0000f7a5, 0x0000f7a5, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30054 -    { 0x00009b48, 0x0000f7a9, 0x0000f7a9, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30055 -    { 0x00009b4c, 0x0000f7ad, 0x0000f7ad, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30056 -    { 0x00009b50, 0x0000f7b1, 0x0000f7b1, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30057 -    { 0x00009b54, 0x0000f7b5, 0x0000f7b5, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30058 -    { 0x00009b58, 0x0000f7c5, 0x0000f7c5, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30059 -    { 0x00009b5c, 0x0000f7c9, 0x0000f7c9, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30060 -    { 0x00009b60, 0x0000f7cd, 0x0000f7cd, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30061 -    { 0x00009b64, 0x0000f7d1, 0x0000f7d1, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30062 -    { 0x00009b68, 0x0000f7d5, 0x0000f7d5, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30063 -    { 0x00009b6c, 0x0000f7c2, 0x0000f7c2, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30064 -    { 0x00009b70, 0x0000f7c6, 0x0000f7c6, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30065 -    { 0x00009b74, 0x0000f7ca, 0x0000f7ca, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30066 -    { 0x00009b78, 0x0000f7ce, 0x0000f7ce, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30067 -    { 0x00009b7c, 0x0000f7d2, 0x0000f7d2, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30068 -    { 0x00009b80, 0x0000f7d6, 0x0000f7d6, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30069 -    { 0x00009b84, 0x0000f7c3, 0x0000f7c3, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30070 -    { 0x00009b88, 0x0000f7c7, 0x0000f7c7, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30071 -    { 0x00009b8c, 0x0000f7cb, 0x0000f7cb, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30072 -    { 0x00009b90, 0x0000f7d3, 0x0000f7d3, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30073 -    { 0x00009b94, 0x0000f7d7, 0x0000f7d7, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30074 -    { 0x00009b98, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30075 -    { 0x00009b9c, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30076 -    { 0x00009ba0, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30077 -    { 0x00009ba4, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30078 -    { 0x00009ba8, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30079 -    { 0x00009bac, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30080 -    { 0x00009bb0, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30081 -    { 0x00009bb4, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30082 -    { 0x00009bb8, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30083 -    { 0x00009bbc, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30084 -    { 0x00009bc0, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30085 -    { 0x00009bc4, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30086 -    { 0x00009bc8, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30087 -    { 0x00009bcc, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30088 -    { 0x00009bd0, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30089 -    { 0x00009bd4, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30090 -    { 0x00009bd8, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30091 -    { 0x00009bdc, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30092 -    { 0x00009be0, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30093 -    { 0x00009be4, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30094 -    { 0x00009be8, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30095 -    { 0x00009bec, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30096 -    { 0x00009bf0, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30097 -    { 0x00009bf4, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30098 -    { 0x00009bf8, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30099 -    { 0x00009bfc, 0x0000f7db, 0x0000f7db, 0x00008b5b, 0x00008b5b, 0x00008b5b },
30100 -    { 0x00009848, 0x00001066, 0x00001066, 0x00001050, 0x00001050, 0x00001050 },
30101 -    { 0x0000a848, 0x00001066, 0x00001066, 0x00001050, 0x00001050, 0x00001050 },
30102 -};
30103 -
30104 -static const u32 ar9280Modes_original_rxgain_9280_2[][6] = {
30105 -    { 0x00009a00, 0x00008184, 0x00008184, 0x00000290, 0x00000290, 0x00000290 },
30106 -    { 0x00009a04, 0x00008188, 0x00008188, 0x00000300, 0x00000300, 0x00000300 },
30107 -    { 0x00009a08, 0x0000818c, 0x0000818c, 0x00000304, 0x00000304, 0x00000304 },
30108 -    { 0x00009a0c, 0x00008190, 0x00008190, 0x00000308, 0x00000308, 0x00000308 },
30109 -    { 0x00009a10, 0x00008194, 0x00008194, 0x0000030c, 0x0000030c, 0x0000030c },
30110 -    { 0x00009a14, 0x00008200, 0x00008200, 0x00008000, 0x00008000, 0x00008000 },
30111 -    { 0x00009a18, 0x00008204, 0x00008204, 0x00008004, 0x00008004, 0x00008004 },
30112 -    { 0x00009a1c, 0x00008208, 0x00008208, 0x00008008, 0x00008008, 0x00008008 },
30113 -    { 0x00009a20, 0x0000820c, 0x0000820c, 0x0000800c, 0x0000800c, 0x0000800c },
30114 -    { 0x00009a24, 0x00008210, 0x00008210, 0x00008080, 0x00008080, 0x00008080 },
30115 -    { 0x00009a28, 0x00008214, 0x00008214, 0x00008084, 0x00008084, 0x00008084 },
30116 -    { 0x00009a2c, 0x00008280, 0x00008280, 0x00008088, 0x00008088, 0x00008088 },
30117 -    { 0x00009a30, 0x00008284, 0x00008284, 0x0000808c, 0x0000808c, 0x0000808c },
30118 -    { 0x00009a34, 0x00008288, 0x00008288, 0x00008100, 0x00008100, 0x00008100 },
30119 -    { 0x00009a38, 0x0000828c, 0x0000828c, 0x00008104, 0x00008104, 0x00008104 },
30120 -    { 0x00009a3c, 0x00008290, 0x00008290, 0x00008108, 0x00008108, 0x00008108 },
30121 -    { 0x00009a40, 0x00008300, 0x00008300, 0x0000810c, 0x0000810c, 0x0000810c },
30122 -    { 0x00009a44, 0x00008304, 0x00008304, 0x00008110, 0x00008110, 0x00008110 },
30123 -    { 0x00009a48, 0x00008308, 0x00008308, 0x00008114, 0x00008114, 0x00008114 },
30124 -    { 0x00009a4c, 0x0000830c, 0x0000830c, 0x00008180, 0x00008180, 0x00008180 },
30125 -    { 0x00009a50, 0x00008310, 0x00008310, 0x00008184, 0x00008184, 0x00008184 },
30126 -    { 0x00009a54, 0x00008314, 0x00008314, 0x00008188, 0x00008188, 0x00008188 },
30127 -    { 0x00009a58, 0x00008380, 0x00008380, 0x0000818c, 0x0000818c, 0x0000818c },
30128 -    { 0x00009a5c, 0x00008384, 0x00008384, 0x00008190, 0x00008190, 0x00008190 },
30129 -    { 0x00009a60, 0x00008388, 0x00008388, 0x00008194, 0x00008194, 0x00008194 },
30130 -    { 0x00009a64, 0x0000838c, 0x0000838c, 0x000081a0, 0x000081a0, 0x000081a0 },
30131 -    { 0x00009a68, 0x00008390, 0x00008390, 0x0000820c, 0x0000820c, 0x0000820c },
30132 -    { 0x00009a6c, 0x00008394, 0x00008394, 0x000081a8, 0x000081a8, 0x000081a8 },
30133 -    { 0x00009a70, 0x0000a380, 0x0000a380, 0x00008284, 0x00008284, 0x00008284 },
30134 -    { 0x00009a74, 0x0000a384, 0x0000a384, 0x00008288, 0x00008288, 0x00008288 },
30135 -    { 0x00009a78, 0x0000a388, 0x0000a388, 0x00008224, 0x00008224, 0x00008224 },
30136 -    { 0x00009a7c, 0x0000a38c, 0x0000a38c, 0x00008290, 0x00008290, 0x00008290 },
30137 -    { 0x00009a80, 0x0000a390, 0x0000a390, 0x00008300, 0x00008300, 0x00008300 },
30138 -    { 0x00009a84, 0x0000a394, 0x0000a394, 0x00008304, 0x00008304, 0x00008304 },
30139 -    { 0x00009a88, 0x0000a780, 0x0000a780, 0x00008308, 0x00008308, 0x00008308 },
30140 -    { 0x00009a8c, 0x0000a784, 0x0000a784, 0x0000830c, 0x0000830c, 0x0000830c },
30141 -    { 0x00009a90, 0x0000a788, 0x0000a788, 0x00008380, 0x00008380, 0x00008380 },
30142 -    { 0x00009a94, 0x0000a78c, 0x0000a78c, 0x00008384, 0x00008384, 0x00008384 },
30143 -    { 0x00009a98, 0x0000a790, 0x0000a790, 0x00008700, 0x00008700, 0x00008700 },
30144 -    { 0x00009a9c, 0x0000a794, 0x0000a794, 0x00008704, 0x00008704, 0x00008704 },
30145 -    { 0x00009aa0, 0x0000ab84, 0x0000ab84, 0x00008708, 0x00008708, 0x00008708 },
30146 -    { 0x00009aa4, 0x0000ab88, 0x0000ab88, 0x0000870c, 0x0000870c, 0x0000870c },
30147 -    { 0x00009aa8, 0x0000ab8c, 0x0000ab8c, 0x00008780, 0x00008780, 0x00008780 },
30148 -    { 0x00009aac, 0x0000ab90, 0x0000ab90, 0x00008784, 0x00008784, 0x00008784 },
30149 -    { 0x00009ab0, 0x0000ab94, 0x0000ab94, 0x00008b00, 0x00008b00, 0x00008b00 },
30150 -    { 0x00009ab4, 0x0000af80, 0x0000af80, 0x00008b04, 0x00008b04, 0x00008b04 },
30151 -    { 0x00009ab8, 0x0000af84, 0x0000af84, 0x00008b08, 0x00008b08, 0x00008b08 },
30152 -    { 0x00009abc, 0x0000af88, 0x0000af88, 0x00008b0c, 0x00008b0c, 0x00008b0c },
30153 -    { 0x00009ac0, 0x0000af8c, 0x0000af8c, 0x00008b80, 0x00008b80, 0x00008b80 },
30154 -    { 0x00009ac4, 0x0000af90, 0x0000af90, 0x00008b84, 0x00008b84, 0x00008b84 },
30155 -    { 0x00009ac8, 0x0000af94, 0x0000af94, 0x00008b88, 0x00008b88, 0x00008b88 },
30156 -    { 0x00009acc, 0x0000b380, 0x0000b380, 0x00008b8c, 0x00008b8c, 0x00008b8c },
30157 -    { 0x00009ad0, 0x0000b384, 0x0000b384, 0x00008b90, 0x00008b90, 0x00008b90 },
30158 -    { 0x00009ad4, 0x0000b388, 0x0000b388, 0x00008f80, 0x00008f80, 0x00008f80 },
30159 -    { 0x00009ad8, 0x0000b38c, 0x0000b38c, 0x00008f84, 0x00008f84, 0x00008f84 },
30160 -    { 0x00009adc, 0x0000b390, 0x0000b390, 0x00008f88, 0x00008f88, 0x00008f88 },
30161 -    { 0x00009ae0, 0x0000b394, 0x0000b394, 0x00008f8c, 0x00008f8c, 0x00008f8c },
30162 -    { 0x00009ae4, 0x0000b398, 0x0000b398, 0x00008f90, 0x00008f90, 0x00008f90 },
30163 -    { 0x00009ae8, 0x0000b780, 0x0000b780, 0x0000930c, 0x0000930c, 0x0000930c },
30164 -    { 0x00009aec, 0x0000b784, 0x0000b784, 0x00009310, 0x00009310, 0x00009310 },
30165 -    { 0x00009af0, 0x0000b788, 0x0000b788, 0x00009384, 0x00009384, 0x00009384 },
30166 -    { 0x00009af4, 0x0000b78c, 0x0000b78c, 0x00009388, 0x00009388, 0x00009388 },
30167 -    { 0x00009af8, 0x0000b790, 0x0000b790, 0x00009324, 0x00009324, 0x00009324 },
30168 -    { 0x00009afc, 0x0000b794, 0x0000b794, 0x00009704, 0x00009704, 0x00009704 },
30169 -    { 0x00009b00, 0x0000b798, 0x0000b798, 0x000096a4, 0x000096a4, 0x000096a4 },
30170 -    { 0x00009b04, 0x0000d784, 0x0000d784, 0x000096a8, 0x000096a8, 0x000096a8 },
30171 -    { 0x00009b08, 0x0000d788, 0x0000d788, 0x00009710, 0x00009710, 0x00009710 },
30172 -    { 0x00009b0c, 0x0000d78c, 0x0000d78c, 0x00009714, 0x00009714, 0x00009714 },
30173 -    { 0x00009b10, 0x0000d790, 0x0000d790, 0x00009720, 0x00009720, 0x00009720 },
30174 -    { 0x00009b14, 0x0000f780, 0x0000f780, 0x00009724, 0x00009724, 0x00009724 },
30175 -    { 0x00009b18, 0x0000f784, 0x0000f784, 0x00009728, 0x00009728, 0x00009728 },
30176 -    { 0x00009b1c, 0x0000f788, 0x0000f788, 0x0000972c, 0x0000972c, 0x0000972c },
30177 -    { 0x00009b20, 0x0000f78c, 0x0000f78c, 0x000097a0, 0x000097a0, 0x000097a0 },
30178 -    { 0x00009b24, 0x0000f790, 0x0000f790, 0x000097a4, 0x000097a4, 0x000097a4 },
30179 -    { 0x00009b28, 0x0000f794, 0x0000f794, 0x000097a8, 0x000097a8, 0x000097a8 },
30180 -    { 0x00009b2c, 0x0000f7a4, 0x0000f7a4, 0x000097b0, 0x000097b0, 0x000097b0 },
30181 -    { 0x00009b30, 0x0000f7a8, 0x0000f7a8, 0x000097b4, 0x000097b4, 0x000097b4 },
30182 -    { 0x00009b34, 0x0000f7ac, 0x0000f7ac, 0x000097b8, 0x000097b8, 0x000097b8 },
30183 -    { 0x00009b38, 0x0000f7b0, 0x0000f7b0, 0x000097a5, 0x000097a5, 0x000097a5 },
30184 -    { 0x00009b3c, 0x0000f7b4, 0x0000f7b4, 0x000097a9, 0x000097a9, 0x000097a9 },
30185 -    { 0x00009b40, 0x0000f7a1, 0x0000f7a1, 0x000097ad, 0x000097ad, 0x000097ad },
30186 -    { 0x00009b44, 0x0000f7a5, 0x0000f7a5, 0x000097b1, 0x000097b1, 0x000097b1 },
30187 -    { 0x00009b48, 0x0000f7a9, 0x0000f7a9, 0x000097b5, 0x000097b5, 0x000097b5 },
30188 -    { 0x00009b4c, 0x0000f7ad, 0x0000f7ad, 0x000097b9, 0x000097b9, 0x000097b9 },
30189 -    { 0x00009b50, 0x0000f7b1, 0x0000f7b1, 0x000097c5, 0x000097c5, 0x000097c5 },
30190 -    { 0x00009b54, 0x0000f7b5, 0x0000f7b5, 0x000097c9, 0x000097c9, 0x000097c9 },
30191 -    { 0x00009b58, 0x0000f7c5, 0x0000f7c5, 0x000097d1, 0x000097d1, 0x000097d1 },
30192 -    { 0x00009b5c, 0x0000f7c9, 0x0000f7c9, 0x000097d5, 0x000097d5, 0x000097d5 },
30193 -    { 0x00009b60, 0x0000f7cd, 0x0000f7cd, 0x000097d9, 0x000097d9, 0x000097d9 },
30194 -    { 0x00009b64, 0x0000f7d1, 0x0000f7d1, 0x000097c6, 0x000097c6, 0x000097c6 },
30195 -    { 0x00009b68, 0x0000f7d5, 0x0000f7d5, 0x000097ca, 0x000097ca, 0x000097ca },
30196 -    { 0x00009b6c, 0x0000f7c2, 0x0000f7c2, 0x000097ce, 0x000097ce, 0x000097ce },
30197 -    { 0x00009b70, 0x0000f7c6, 0x0000f7c6, 0x000097d2, 0x000097d2, 0x000097d2 },
30198 -    { 0x00009b74, 0x0000f7ca, 0x0000f7ca, 0x000097d6, 0x000097d6, 0x000097d6 },
30199 -    { 0x00009b78, 0x0000f7ce, 0x0000f7ce, 0x000097c3, 0x000097c3, 0x000097c3 },
30200 -    { 0x00009b7c, 0x0000f7d2, 0x0000f7d2, 0x000097c7, 0x000097c7, 0x000097c7 },
30201 -    { 0x00009b80, 0x0000f7d6, 0x0000f7d6, 0x000097cb, 0x000097cb, 0x000097cb },
30202 -    { 0x00009b84, 0x0000f7c3, 0x0000f7c3, 0x000097cf, 0x000097cf, 0x000097cf },
30203 -    { 0x00009b88, 0x0000f7c7, 0x0000f7c7, 0x000097d7, 0x000097d7, 0x000097d7 },
30204 -    { 0x00009b8c, 0x0000f7cb, 0x0000f7cb, 0x000097db, 0x000097db, 0x000097db },
30205 -    { 0x00009b90, 0x0000f7d3, 0x0000f7d3, 0x000097db, 0x000097db, 0x000097db },
30206 -    { 0x00009b94, 0x0000f7d7, 0x0000f7d7, 0x000097db, 0x000097db, 0x000097db },
30207 -    { 0x00009b98, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
30208 -    { 0x00009b9c, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
30209 -    { 0x00009ba0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
30210 -    { 0x00009ba4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
30211 -    { 0x00009ba8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
30212 -    { 0x00009bac, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
30213 -    { 0x00009bb0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
30214 -    { 0x00009bb4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
30215 -    { 0x00009bb8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
30216 -    { 0x00009bbc, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
30217 -    { 0x00009bc0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
30218 -    { 0x00009bc4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
30219 -    { 0x00009bc8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
30220 -    { 0x00009bcc, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
30221 -    { 0x00009bd0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
30222 -    { 0x00009bd4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
30223 -    { 0x00009bd8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
30224 -    { 0x00009bdc, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
30225 -    { 0x00009be0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
30226 -    { 0x00009be4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
30227 -    { 0x00009be8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
30228 -    { 0x00009bec, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
30229 -    { 0x00009bf0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
30230 -    { 0x00009bf4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
30231 -    { 0x00009bf8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
30232 -    { 0x00009bfc, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db },
30233 -    { 0x00009848, 0x00001066, 0x00001066, 0x00001063, 0x00001063, 0x00001063 },
30234 -    { 0x0000a848, 0x00001066, 0x00001066, 0x00001063, 0x00001063, 0x00001063 },
30235 -};
30236 -
30237 -static const u32 ar9280Modes_backoff_13db_rxgain_9280_2[][6] = {
30238 -    { 0x00009a00, 0x00008184, 0x00008184, 0x00000290, 0x00000290, 0x00000290 },
30239 -    { 0x00009a04, 0x00008188, 0x00008188, 0x00000300, 0x00000300, 0x00000300 },
30240 -    { 0x00009a08, 0x0000818c, 0x0000818c, 0x00000304, 0x00000304, 0x00000304 },
30241 -    { 0x00009a0c, 0x00008190, 0x00008190, 0x00000308, 0x00000308, 0x00000308 },
30242 -    { 0x00009a10, 0x00008194, 0x00008194, 0x0000030c, 0x0000030c, 0x0000030c },
30243 -    { 0x00009a14, 0x00008200, 0x00008200, 0x00008000, 0x00008000, 0x00008000 },
30244 -    { 0x00009a18, 0x00008204, 0x00008204, 0x00008004, 0x00008004, 0x00008004 },
30245 -    { 0x00009a1c, 0x00008208, 0x00008208, 0x00008008, 0x00008008, 0x00008008 },
30246 -    { 0x00009a20, 0x0000820c, 0x0000820c, 0x0000800c, 0x0000800c, 0x0000800c },
30247 -    { 0x00009a24, 0x00008210, 0x00008210, 0x00008080, 0x00008080, 0x00008080 },
30248 -    { 0x00009a28, 0x00008214, 0x00008214, 0x00008084, 0x00008084, 0x00008084 },
30249 -    { 0x00009a2c, 0x00008280, 0x00008280, 0x00008088, 0x00008088, 0x00008088 },
30250 -    { 0x00009a30, 0x00008284, 0x00008284, 0x0000808c, 0x0000808c, 0x0000808c },
30251 -    { 0x00009a34, 0x00008288, 0x00008288, 0x00008100, 0x00008100, 0x00008100 },
30252 -    { 0x00009a38, 0x0000828c, 0x0000828c, 0x00008104, 0x00008104, 0x00008104 },
30253 -    { 0x00009a3c, 0x00008290, 0x00008290, 0x00008108, 0x00008108, 0x00008108 },
30254 -    { 0x00009a40, 0x00008300, 0x00008300, 0x0000810c, 0x0000810c, 0x0000810c },
30255 -    { 0x00009a44, 0x00008304, 0x00008304, 0x00008110, 0x00008110, 0x00008110 },
30256 -    { 0x00009a48, 0x00008308, 0x00008308, 0x00008114, 0x00008114, 0x00008114 },
30257 -    { 0x00009a4c, 0x0000830c, 0x0000830c, 0x00008180, 0x00008180, 0x00008180 },
30258 -    { 0x00009a50, 0x00008310, 0x00008310, 0x00008184, 0x00008184, 0x00008184 },
30259 -    { 0x00009a54, 0x00008314, 0x00008314, 0x00008188, 0x00008188, 0x00008188 },
30260 -    { 0x00009a58, 0x00008380, 0x00008380, 0x0000818c, 0x0000818c, 0x0000818c },
30261 -    { 0x00009a5c, 0x00008384, 0x00008384, 0x00008190, 0x00008190, 0x00008190 },
30262 -    { 0x00009a60, 0x00008388, 0x00008388, 0x00008194, 0x00008194, 0x00008194 },
30263 -    { 0x00009a64, 0x0000838c, 0x0000838c, 0x000081a0, 0x000081a0, 0x000081a0 },
30264 -    { 0x00009a68, 0x00008390, 0x00008390, 0x0000820c, 0x0000820c, 0x0000820c },
30265 -    { 0x00009a6c, 0x00008394, 0x00008394, 0x000081a8, 0x000081a8, 0x000081a8 },
30266 -    { 0x00009a70, 0x0000a380, 0x0000a380, 0x00008284, 0x00008284, 0x00008284 },
30267 -    { 0x00009a74, 0x0000a384, 0x0000a384, 0x00008288, 0x00008288, 0x00008288 },
30268 -    { 0x00009a78, 0x0000a388, 0x0000a388, 0x00008224, 0x00008224, 0x00008224 },
30269 -    { 0x00009a7c, 0x0000a38c, 0x0000a38c, 0x00008290, 0x00008290, 0x00008290 },
30270 -    { 0x00009a80, 0x0000a390, 0x0000a390, 0x00008300, 0x00008300, 0x00008300 },
30271 -    { 0x00009a84, 0x0000a394, 0x0000a394, 0x00008304, 0x00008304, 0x00008304 },
30272 -    { 0x00009a88, 0x0000a780, 0x0000a780, 0x00008308, 0x00008308, 0x00008308 },
30273 -    { 0x00009a8c, 0x0000a784, 0x0000a784, 0x0000830c, 0x0000830c, 0x0000830c },
30274 -    { 0x00009a90, 0x0000a788, 0x0000a788, 0x00008380, 0x00008380, 0x00008380 },
30275 -    { 0x00009a94, 0x0000a78c, 0x0000a78c, 0x00008384, 0x00008384, 0x00008384 },
30276 -    { 0x00009a98, 0x0000a790, 0x0000a790, 0x00008700, 0x00008700, 0x00008700 },
30277 -    { 0x00009a9c, 0x0000a794, 0x0000a794, 0x00008704, 0x00008704, 0x00008704 },
30278 -    { 0x00009aa0, 0x0000ab84, 0x0000ab84, 0x00008708, 0x00008708, 0x00008708 },
30279 -    { 0x00009aa4, 0x0000ab88, 0x0000ab88, 0x0000870c, 0x0000870c, 0x0000870c },
30280 -    { 0x00009aa8, 0x0000ab8c, 0x0000ab8c, 0x00008780, 0x00008780, 0x00008780 },
30281 -    { 0x00009aac, 0x0000ab90, 0x0000ab90, 0x00008784, 0x00008784, 0x00008784 },
30282 -    { 0x00009ab0, 0x0000ab94, 0x0000ab94, 0x00008b00, 0x00008b00, 0x00008b00 },
30283 -    { 0x00009ab4, 0x0000af80, 0x0000af80, 0x00008b04, 0x00008b04, 0x00008b04 },
30284 -    { 0x00009ab8, 0x0000af84, 0x0000af84, 0x00008b08, 0x00008b08, 0x00008b08 },
30285 -    { 0x00009abc, 0x0000af88, 0x0000af88, 0x00008b0c, 0x00008b0c, 0x00008b0c },
30286 -    { 0x00009ac0, 0x0000af8c, 0x0000af8c, 0x00008b80, 0x00008b80, 0x00008b80 },
30287 -    { 0x00009ac4, 0x0000af90, 0x0000af90, 0x00008b84, 0x00008b84, 0x00008b84 },
30288 -    { 0x00009ac8, 0x0000af94, 0x0000af94, 0x00008b88, 0x00008b88, 0x00008b88 },
30289 -    { 0x00009acc, 0x0000b380, 0x0000b380, 0x00008b8c, 0x00008b8c, 0x00008b8c },
30290 -    { 0x00009ad0, 0x0000b384, 0x0000b384, 0x00008b90, 0x00008b90, 0x00008b90 },
30291 -    { 0x00009ad4, 0x0000b388, 0x0000b388, 0x00008f80, 0x00008f80, 0x00008f80 },
30292 -    { 0x00009ad8, 0x0000b38c, 0x0000b38c, 0x00008f84, 0x00008f84, 0x00008f84 },
30293 -    { 0x00009adc, 0x0000b390, 0x0000b390, 0x00008f88, 0x00008f88, 0x00008f88 },
30294 -    { 0x00009ae0, 0x0000b394, 0x0000b394, 0x00008f8c, 0x00008f8c, 0x00008f8c },
30295 -    { 0x00009ae4, 0x0000b398, 0x0000b398, 0x00008f90, 0x00008f90, 0x00008f90 },
30296 -    { 0x00009ae8, 0x0000b780, 0x0000b780, 0x00009310, 0x00009310, 0x00009310 },
30297 -    { 0x00009aec, 0x0000b784, 0x0000b784, 0x00009314, 0x00009314, 0x00009314 },
30298 -    { 0x00009af0, 0x0000b788, 0x0000b788, 0x00009320, 0x00009320, 0x00009320 },
30299 -    { 0x00009af4, 0x0000b78c, 0x0000b78c, 0x00009324, 0x00009324, 0x00009324 },
30300 -    { 0x00009af8, 0x0000b790, 0x0000b790, 0x00009328, 0x00009328, 0x00009328 },
30301 -    { 0x00009afc, 0x0000b794, 0x0000b794, 0x0000932c, 0x0000932c, 0x0000932c },
30302 -    { 0x00009b00, 0x0000b798, 0x0000b798, 0x00009330, 0x00009330, 0x00009330 },
30303 -    { 0x00009b04, 0x0000d784, 0x0000d784, 0x00009334, 0x00009334, 0x00009334 },
30304 -    { 0x00009b08, 0x0000d788, 0x0000d788, 0x00009321, 0x00009321, 0x00009321 },
30305 -    { 0x00009b0c, 0x0000d78c, 0x0000d78c, 0x00009325, 0x00009325, 0x00009325 },
30306 -    { 0x00009b10, 0x0000d790, 0x0000d790, 0x00009329, 0x00009329, 0x00009329 },
30307 -    { 0x00009b14, 0x0000f780, 0x0000f780, 0x0000932d, 0x0000932d, 0x0000932d },
30308 -    { 0x00009b18, 0x0000f784, 0x0000f784, 0x00009331, 0x00009331, 0x00009331 },
30309 -    { 0x00009b1c, 0x0000f788, 0x0000f788, 0x00009335, 0x00009335, 0x00009335 },
30310 -    { 0x00009b20, 0x0000f78c, 0x0000f78c, 0x00009322, 0x00009322, 0x00009322 },
30311 -    { 0x00009b24, 0x0000f790, 0x0000f790, 0x00009326, 0x00009326, 0x00009326 },
30312 -    { 0x00009b28, 0x0000f794, 0x0000f794, 0x0000932a, 0x0000932a, 0x0000932a },
30313 -    { 0x00009b2c, 0x0000f7a4, 0x0000f7a4, 0x0000932e, 0x0000932e, 0x0000932e },
30314 -    { 0x00009b30, 0x0000f7a8, 0x0000f7a8, 0x00009332, 0x00009332, 0x00009332 },
30315 -    { 0x00009b34, 0x0000f7ac, 0x0000f7ac, 0x00009336, 0x00009336, 0x00009336 },
30316 -    { 0x00009b38, 0x0000f7b0, 0x0000f7b0, 0x00009323, 0x00009323, 0x00009323 },
30317 -    { 0x00009b3c, 0x0000f7b4, 0x0000f7b4, 0x00009327, 0x00009327, 0x00009327 },
30318 -    { 0x00009b40, 0x0000f7a1, 0x0000f7a1, 0x0000932b, 0x0000932b, 0x0000932b },
30319 -    { 0x00009b44, 0x0000f7a5, 0x0000f7a5, 0x0000932f, 0x0000932f, 0x0000932f },
30320 -    { 0x00009b48, 0x0000f7a9, 0x0000f7a9, 0x00009333, 0x00009333, 0x00009333 },
30321 -    { 0x00009b4c, 0x0000f7ad, 0x0000f7ad, 0x00009337, 0x00009337, 0x00009337 },
30322 -    { 0x00009b50, 0x0000f7b1, 0x0000f7b1, 0x00009343, 0x00009343, 0x00009343 },
30323 -    { 0x00009b54, 0x0000f7b5, 0x0000f7b5, 0x00009347, 0x00009347, 0x00009347 },
30324 -    { 0x00009b58, 0x0000f7c5, 0x0000f7c5, 0x0000934b, 0x0000934b, 0x0000934b },
30325 -    { 0x00009b5c, 0x0000f7c9, 0x0000f7c9, 0x0000934f, 0x0000934f, 0x0000934f },
30326 -    { 0x00009b60, 0x0000f7cd, 0x0000f7cd, 0x00009353, 0x00009353, 0x00009353 },
30327 -    { 0x00009b64, 0x0000f7d1, 0x0000f7d1, 0x00009357, 0x00009357, 0x00009357 },
30328 -    { 0x00009b68, 0x0000f7d5, 0x0000f7d5, 0x0000935b, 0x0000935b, 0x0000935b },
30329 -    { 0x00009b6c, 0x0000f7c2, 0x0000f7c2, 0x0000935b, 0x0000935b, 0x0000935b },
30330 -    { 0x00009b70, 0x0000f7c6, 0x0000f7c6, 0x0000935b, 0x0000935b, 0x0000935b },
30331 -    { 0x00009b74, 0x0000f7ca, 0x0000f7ca, 0x0000935b, 0x0000935b, 0x0000935b },
30332 -    { 0x00009b78, 0x0000f7ce, 0x0000f7ce, 0x0000935b, 0x0000935b, 0x0000935b },
30333 -    { 0x00009b7c, 0x0000f7d2, 0x0000f7d2, 0x0000935b, 0x0000935b, 0x0000935b },
30334 -    { 0x00009b80, 0x0000f7d6, 0x0000f7d6, 0x0000935b, 0x0000935b, 0x0000935b },
30335 -    { 0x00009b84, 0x0000f7c3, 0x0000f7c3, 0x0000935b, 0x0000935b, 0x0000935b },
30336 -    { 0x00009b88, 0x0000f7c7, 0x0000f7c7, 0x0000935b, 0x0000935b, 0x0000935b },
30337 -    { 0x00009b8c, 0x0000f7cb, 0x0000f7cb, 0x0000935b, 0x0000935b, 0x0000935b },
30338 -    { 0x00009b90, 0x0000f7d3, 0x0000f7d3, 0x0000935b, 0x0000935b, 0x0000935b },
30339 -    { 0x00009b94, 0x0000f7d7, 0x0000f7d7, 0x0000935b, 0x0000935b, 0x0000935b },
30340 -    { 0x00009b98, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
30341 -    { 0x00009b9c, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
30342 -    { 0x00009ba0, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
30343 -    { 0x00009ba4, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
30344 -    { 0x00009ba8, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
30345 -    { 0x00009bac, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
30346 -    { 0x00009bb0, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
30347 -    { 0x00009bb4, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
30348 -    { 0x00009bb8, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
30349 -    { 0x00009bbc, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
30350 -    { 0x00009bc0, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
30351 -    { 0x00009bc4, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
30352 -    { 0x00009bc8, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
30353 -    { 0x00009bcc, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
30354 -    { 0x00009bd0, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
30355 -    { 0x00009bd4, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
30356 -    { 0x00009bd8, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
30357 -    { 0x00009bdc, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
30358 -    { 0x00009be0, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
30359 -    { 0x00009be4, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
30360 -    { 0x00009be8, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
30361 -    { 0x00009bec, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
30362 -    { 0x00009bf0, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
30363 -    { 0x00009bf4, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
30364 -    { 0x00009bf8, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
30365 -    { 0x00009bfc, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b },
30366 -    { 0x00009848, 0x00001066, 0x00001066, 0x0000105a, 0x0000105a, 0x0000105a },
30367 -    { 0x0000a848, 0x00001066, 0x00001066, 0x0000105a, 0x0000105a, 0x0000105a },
30368 -};
30369 -
30370 -static const u32 ar9280Modes_high_power_tx_gain_9280_2[][6] = {
30371 -    { 0x0000a274, 0x0a19e652, 0x0a19e652, 0x0a1aa652, 0x0a1aa652, 0x0a1aa652 },
30372 -    { 0x0000a27c, 0x050739ce, 0x050739ce, 0x050739ce, 0x050739ce, 0x050739ce },
30373 -    { 0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
30374 -    { 0x0000a304, 0x00003002, 0x00003002, 0x00004002, 0x00004002, 0x00004002 },
30375 -    { 0x0000a308, 0x00006004, 0x00006004, 0x00007008, 0x00007008, 0x00007008 },
30376 -    { 0x0000a30c, 0x0000a006, 0x0000a006, 0x0000c010, 0x0000c010, 0x0000c010 },
30377 -    { 0x0000a310, 0x0000e012, 0x0000e012, 0x00010012, 0x00010012, 0x00010012 },
30378 -    { 0x0000a314, 0x00011014, 0x00011014, 0x00013014, 0x00013014, 0x00013014 },
30379 -    { 0x0000a318, 0x0001504a, 0x0001504a, 0x0001820a, 0x0001820a, 0x0001820a },
30380 -    { 0x0000a31c, 0x0001904c, 0x0001904c, 0x0001b211, 0x0001b211, 0x0001b211 },
30381 -    { 0x0000a320, 0x0001c04e, 0x0001c04e, 0x0001e213, 0x0001e213, 0x0001e213 },
30382 -    { 0x0000a324, 0x00021092, 0x00021092, 0x00022411, 0x00022411, 0x00022411 },
30383 -    { 0x0000a328, 0x0002510a, 0x0002510a, 0x00025413, 0x00025413, 0x00025413 },
30384 -    { 0x0000a32c, 0x0002910c, 0x0002910c, 0x00029811, 0x00029811, 0x00029811 },
30385 -    { 0x0000a330, 0x0002c18b, 0x0002c18b, 0x0002c813, 0x0002c813, 0x0002c813 },
30386 -    { 0x0000a334, 0x0002f1cc, 0x0002f1cc, 0x00030a14, 0x00030a14, 0x00030a14 },
30387 -    { 0x0000a338, 0x000321eb, 0x000321eb, 0x00035a50, 0x00035a50, 0x00035a50 },
30388 -    { 0x0000a33c, 0x000341ec, 0x000341ec, 0x00039c4c, 0x00039c4c, 0x00039c4c },
30389 -    { 0x0000a340, 0x000341ec, 0x000341ec, 0x0003de8a, 0x0003de8a, 0x0003de8a },
30390 -    { 0x0000a344, 0x000341ec, 0x000341ec, 0x00042e92, 0x00042e92, 0x00042e92 },
30391 -    { 0x0000a348, 0x000341ec, 0x000341ec, 0x00046ed2, 0x00046ed2, 0x00046ed2 },
30392 -    { 0x0000a34c, 0x000341ec, 0x000341ec, 0x0004bed5, 0x0004bed5, 0x0004bed5 },
30393 -    { 0x0000a350, 0x000341ec, 0x000341ec, 0x0004ff54, 0x0004ff54, 0x0004ff54 },
30394 -    { 0x0000a354, 0x000341ec, 0x000341ec, 0x00055fd5, 0x00055fd5, 0x00055fd5 },
30395 -    { 0x00007814, 0x00198eff, 0x00198eff, 0x00198eff, 0x00198eff, 0x00198eff },
30396 -    { 0x00007838, 0x00198eff, 0x00198eff, 0x00198eff, 0x00198eff, 0x00198eff },
30397 -    { 0x0000781c, 0x00172000, 0x00172000, 0x00172000, 0x00172000, 0x00172000 },
30398 -    { 0x00007840, 0x00172000, 0x00172000, 0x00172000, 0x00172000, 0x00172000 },
30399 -    { 0x00007820, 0xf258a480, 0xf258a480, 0xf258a480, 0xf258a480, 0xf258a480 },
30400 -    { 0x00007844, 0xf258a480, 0xf258a480, 0xf258a480, 0xf258a480, 0xf258a480 },
30401 -};
30402 -
30403 -static const u32 ar9280Modes_original_tx_gain_9280_2[][6] = {
30404 -    { 0x0000a274, 0x0a19c652, 0x0a19c652, 0x0a1aa652, 0x0a1aa652, 0x0a1aa652 },
30405 -    { 0x0000a27c, 0x050701ce, 0x050701ce, 0x050701ce, 0x050701ce, 0x050701ce },
30406 -    { 0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
30407 -    { 0x0000a304, 0x00003002, 0x00003002, 0x00003002, 0x00003002, 0x00003002 },
30408 -    { 0x0000a308, 0x00006004, 0x00006004, 0x00008009, 0x00008009, 0x00008009 },
30409 -    { 0x0000a30c, 0x0000a006, 0x0000a006, 0x0000b00b, 0x0000b00b, 0x0000b00b },
30410 -    { 0x0000a310, 0x0000e012, 0x0000e012, 0x0000e012, 0x0000e012, 0x0000e012 },
30411 -    { 0x0000a314, 0x00011014, 0x00011014, 0x00012048, 0x00012048, 0x00012048 },
30412 -    { 0x0000a318, 0x0001504a, 0x0001504a, 0x0001604a, 0x0001604a, 0x0001604a },
30413 -    { 0x0000a31c, 0x0001904c, 0x0001904c, 0x0001a211, 0x0001a211, 0x0001a211 },
30414 -    { 0x0000a320, 0x0001c04e, 0x0001c04e, 0x0001e213, 0x0001e213, 0x0001e213 },
30415 -    { 0x0000a324, 0x00020092, 0x00020092, 0x0002121b, 0x0002121b, 0x0002121b },
30416 -    { 0x0000a328, 0x0002410a, 0x0002410a, 0x00024412, 0x00024412, 0x00024412 },
30417 -    { 0x0000a32c, 0x0002710c, 0x0002710c, 0x00028414, 0x00028414, 0x00028414 },
30418 -    { 0x0000a330, 0x0002b18b, 0x0002b18b, 0x0002b44a, 0x0002b44a, 0x0002b44a },
30419 -    { 0x0000a334, 0x0002e1cc, 0x0002e1cc, 0x00030649, 0x00030649, 0x00030649 },
30420 -    { 0x0000a338, 0x000321ec, 0x000321ec, 0x0003364b, 0x0003364b, 0x0003364b },
30421 -    { 0x0000a33c, 0x000321ec, 0x000321ec, 0x00038a49, 0x00038a49, 0x00038a49 },
30422 -    { 0x0000a340, 0x000321ec, 0x000321ec, 0x0003be48, 0x0003be48, 0x0003be48 },
30423 -    { 0x0000a344, 0x000321ec, 0x000321ec, 0x0003ee4a, 0x0003ee4a, 0x0003ee4a },
30424 -    { 0x0000a348, 0x000321ec, 0x000321ec, 0x00042e88, 0x00042e88, 0x00042e88 },
30425 -    { 0x0000a34c, 0x000321ec, 0x000321ec, 0x00046e8a, 0x00046e8a, 0x00046e8a },
30426 -    { 0x0000a350, 0x000321ec, 0x000321ec, 0x00049ec9, 0x00049ec9, 0x00049ec9 },
30427 -    { 0x0000a354, 0x000321ec, 0x000321ec, 0x0004bf42, 0x0004bf42, 0x0004bf42 },
30428 -    { 0x00007814, 0x0019beff, 0x0019beff, 0x0019beff, 0x0019beff, 0x0019beff },
30429 -    { 0x00007838, 0x0019beff, 0x0019beff, 0x0019beff, 0x0019beff, 0x0019beff },
30430 -    { 0x0000781c, 0x00392000, 0x00392000, 0x00392000, 0x00392000, 0x00392000 },
30431 -    { 0x00007840, 0x00392000, 0x00392000, 0x00392000, 0x00392000, 0x00392000 },
30432 -    { 0x00007820, 0x92592480, 0x92592480, 0x92592480, 0x92592480, 0x92592480 },
30433 -    { 0x00007844, 0x92592480, 0x92592480, 0x92592480, 0x92592480, 0x92592480 },
30434 -};
30435 -
30436 -static const u32 ar9280PciePhy_clkreq_off_L1_9280[][2] = {
30437 -    {0x00004040,  0x9248fd00 },
30438 -    {0x00004040,  0x24924924 },
30439 -    {0x00004040,  0xa8000019 },
30440 -    {0x00004040,  0x13160820 },
30441 -    {0x00004040,  0xe5980560 },
30442 -    {0x00004040,  0xc01dcffc },
30443 -    {0x00004040,  0x1aaabe41 },
30444 -    {0x00004040,  0xbe105554 },
30445 -    {0x00004040,  0x00043007 },
30446 -    {0x00004044,  0x00000000 },
30447 -};
30448 -
30449 -static const u32 ar9280PciePhy_clkreq_always_on_L1_9280[][2] = {
30450 -    {0x00004040,  0x9248fd00 },
30451 -    {0x00004040,  0x24924924 },
30452 -    {0x00004040,  0xa8000019 },
30453 -    {0x00004040,  0x13160820 },
30454 -    {0x00004040,  0xe5980560 },
30455 -    {0x00004040,  0xc01dcffd },
30456 -    {0x00004040,  0x1aaabe41 },
30457 -    {0x00004040,  0xbe105554 },
30458 -    {0x00004040,  0x00043007 },
30459 -    {0x00004044,  0x00000000 },
30460 -};
30461 -
30462 -/* AR9285 Revsion 10*/
30463 -static const u_int32_t ar9285Modes_9285[][6] = {
30464 -    { 0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160, 0x000001e0 },
30465 -    { 0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c, 0x000001e0 },
30466 -    { 0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38, 0x00001180 },
30467 -    { 0x000010f0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008 },
30468 -    { 0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00, 0x06e006e0 },
30469 -    { 0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b, 0x0988004f },
30470 -    { 0x00008318, 0x00003e80, 0x00007d00, 0x00006880, 0x00003440, 0x00006880 },
30471 -    { 0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300, 0x00000303 },
30472 -    { 0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200, 0x02020200 },
30473 -    { 0x00009824, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
30474 -    { 0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001 },
30475 -    { 0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
30476 -    { 0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000007 },
30477 -    { 0x00009840, 0x206a012e, 0x206a012e, 0x206a012e, 0x206a012e, 0x206a012e },
30478 -    { 0x00009844, 0x0372161e, 0x0372161e, 0x03720020, 0x03720020, 0x037216a0 },
30479 -    { 0x00009848, 0x00001066, 0x00001066, 0x0000004e, 0x0000004e, 0x00001059 },
30480 -    { 0x00009850, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2 },
30481 -    { 0x00009858, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e },
30482 -    { 0x0000985c, 0x3139605e, 0x3139605e, 0x3136605e, 0x3136605e, 0x3139605e },
30483 -    { 0x00009860, 0x00058d18, 0x00058d18, 0x00058d20, 0x00058d20, 0x00058d18 },
30484 -    { 0x00009864, 0x0000fe00, 0x0000fe00, 0x0001ce00, 0x0001ce00, 0x0001ce00 },
30485 -    { 0x00009868, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0 },
30486 -    { 0x0000986c, 0x06903081, 0x06903081, 0x06903881, 0x06903881, 0x06903881 },
30487 -    { 0x00009914, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898, 0x000007d0 },
30488 -    { 0x00009918, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b, 0x00000016 },
30489 -    { 0x00009924, 0xd00a8007, 0xd00a8007, 0xd00a800d, 0xd00a800d, 0xd00a800d },
30490 -    { 0x00009944, 0xdfbc1010, 0xdfbc1010, 0xdfbc1020, 0xdfbc1020, 0xdfbc1010 },
30491 -    { 0x00009960, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
30492 -    { 0x00009964, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
30493 -    { 0x000099b8, 0x00cf4d1c, 0x00cf4d1c, 0x00cf4d1c, 0x00cf4d1c, 0x00cf4d1c },
30494 -    { 0x000099bc, 0x00000600, 0x00000600, 0x00000c00, 0x00000c00, 0x00000c00 },
30495 -    { 0x000099c0, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4 },
30496 -    { 0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77 },
30497 -    { 0x000099c8, 0x60f65329, 0x60f65329, 0x60f65329, 0x60f65329, 0x60f65329 },
30498 -    { 0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8 },
30499 -    { 0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384, 0x00046384 },
30500 -    { 0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
30501 -    { 0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
30502 -    { 0x00009a00, 0x00000000, 0x00000000, 0x00068084, 0x00068084, 0x00000000 },
30503 -    { 0x00009a04, 0x00000000, 0x00000000, 0x00068088, 0x00068088, 0x00000000 },
30504 -    { 0x00009a08, 0x00000000, 0x00000000, 0x0006808c, 0x0006808c, 0x00000000 },
30505 -    { 0x00009a0c, 0x00000000, 0x00000000, 0x00068100, 0x00068100, 0x00000000 },
30506 -    { 0x00009a10, 0x00000000, 0x00000000, 0x00068104, 0x00068104, 0x00000000 },
30507 -    { 0x00009a14, 0x00000000, 0x00000000, 0x00068108, 0x00068108, 0x00000000 },
30508 -    { 0x00009a18, 0x00000000, 0x00000000, 0x0006810c, 0x0006810c, 0x00000000 },
30509 -    { 0x00009a1c, 0x00000000, 0x00000000, 0x00068110, 0x00068110, 0x00000000 },
30510 -    { 0x00009a20, 0x00000000, 0x00000000, 0x00068114, 0x00068114, 0x00000000 },
30511 -    { 0x00009a24, 0x00000000, 0x00000000, 0x00068180, 0x00068180, 0x00000000 },
30512 -    { 0x00009a28, 0x00000000, 0x00000000, 0x00068184, 0x00068184, 0x00000000 },
30513 -    { 0x00009a2c, 0x00000000, 0x00000000, 0x00068188, 0x00068188, 0x00000000 },
30514 -    { 0x00009a30, 0x00000000, 0x00000000, 0x0006818c, 0x0006818c, 0x00000000 },
30515 -    { 0x00009a34, 0x00000000, 0x00000000, 0x00068190, 0x00068190, 0x00000000 },
30516 -    { 0x00009a38, 0x00000000, 0x00000000, 0x00068194, 0x00068194, 0x00000000 },
30517 -    { 0x00009a3c, 0x00000000, 0x00000000, 0x000681a0, 0x000681a0, 0x00000000 },
30518 -    { 0x00009a40, 0x00000000, 0x00000000, 0x0006820c, 0x0006820c, 0x00000000 },
30519 -    { 0x00009a44, 0x00000000, 0x00000000, 0x000681a8, 0x000681a8, 0x00000000 },
30520 -    { 0x00009a48, 0x00000000, 0x00000000, 0x00068284, 0x00068284, 0x00000000 },
30521 -    { 0x00009a4c, 0x00000000, 0x00000000, 0x00068288, 0x00068288, 0x00000000 },
30522 -    { 0x00009a50, 0x00000000, 0x00000000, 0x00068220, 0x00068220, 0x00000000 },
30523 -    { 0x00009a54, 0x00000000, 0x00000000, 0x00068290, 0x00068290, 0x00000000 },
30524 -    { 0x00009a58, 0x00000000, 0x00000000, 0x00068300, 0x00068300, 0x00000000 },
30525 -    { 0x00009a5c, 0x00000000, 0x00000000, 0x00068304, 0x00068304, 0x00000000 },
30526 -    { 0x00009a60, 0x00000000, 0x00000000, 0x00068308, 0x00068308, 0x00000000 },
30527 -    { 0x00009a64, 0x00000000, 0x00000000, 0x0006830c, 0x0006830c, 0x00000000 },
30528 -    { 0x00009a68, 0x00000000, 0x00000000, 0x00068380, 0x00068380, 0x00000000 },
30529 -    { 0x00009a6c, 0x00000000, 0x00000000, 0x00068384, 0x00068384, 0x00000000 },
30530 -    { 0x00009a70, 0x00000000, 0x00000000, 0x00068700, 0x00068700, 0x00000000 },
30531 -    { 0x00009a74, 0x00000000, 0x00000000, 0x00068704, 0x00068704, 0x00000000 },
30532 -    { 0x00009a78, 0x00000000, 0x00000000, 0x00068708, 0x00068708, 0x00000000 },
30533 -    { 0x00009a7c, 0x00000000, 0x00000000, 0x0006870c, 0x0006870c, 0x00000000 },
30534 -    { 0x00009a80, 0x00000000, 0x00000000, 0x00068780, 0x00068780, 0x00000000 },
30535 -    { 0x00009a84, 0x00000000, 0x00000000, 0x00068784, 0x00068784, 0x00000000 },
30536 -    { 0x00009a88, 0x00000000, 0x00000000, 0x00068b04, 0x00068b04, 0x00000000 },
30537 -    { 0x00009a8c, 0x00000000, 0x00000000, 0x00068b08, 0x00068b08, 0x00000000 },
30538 -    { 0x00009a90, 0x00000000, 0x00000000, 0x00068b08, 0x00068b08, 0x00000000 },
30539 -    { 0x00009a94, 0x00000000, 0x00000000, 0x00068b0c, 0x00068b0c, 0x00000000 },
30540 -    { 0x00009a98, 0x00000000, 0x00000000, 0x00068b80, 0x00068b80, 0x00000000 },
30541 -    { 0x00009a9c, 0x00000000, 0x00000000, 0x00068b84, 0x00068b84, 0x00000000 },
30542 -    { 0x00009aa0, 0x00000000, 0x00000000, 0x00068b88, 0x00068b88, 0x00000000 },
30543 -    { 0x00009aa4, 0x00000000, 0x00000000, 0x00068b8c, 0x00068b8c, 0x00000000 },
30544 -    { 0x00009aa8, 0x00000000, 0x00000000, 0x000b8b90, 0x000b8b90, 0x00000000 },
30545 -    { 0x00009aac, 0x00000000, 0x00000000, 0x000b8f80, 0x000b8f80, 0x00000000 },
30546 -    { 0x00009ab0, 0x00000000, 0x00000000, 0x000b8f84, 0x000b8f84, 0x00000000 },
30547 -    { 0x00009ab4, 0x00000000, 0x00000000, 0x000b8f88, 0x000b8f88, 0x00000000 },
30548 -    { 0x00009ab8, 0x00000000, 0x00000000, 0x000b8f8c, 0x000b8f8c, 0x00000000 },
30549 -    { 0x00009abc, 0x00000000, 0x00000000, 0x000b8f90, 0x000b8f90, 0x00000000 },
30550 -    { 0x00009ac0, 0x00000000, 0x00000000, 0x000bb30c, 0x000bb30c, 0x00000000 },
30551 -    { 0x00009ac4, 0x00000000, 0x00000000, 0x000bb310, 0x000bb310, 0x00000000 },
30552 -    { 0x00009ac8, 0x00000000, 0x00000000, 0x000bb384, 0x000bb384, 0x00000000 },
30553 -    { 0x00009acc, 0x00000000, 0x00000000, 0x000bb388, 0x000bb388, 0x00000000 },
30554 -    { 0x00009ad0, 0x00000000, 0x00000000, 0x000bb324, 0x000bb324, 0x00000000 },
30555 -    { 0x00009ad4, 0x00000000, 0x00000000, 0x000bb704, 0x000bb704, 0x00000000 },
30556 -    { 0x00009ad8, 0x00000000, 0x00000000, 0x000f96a4, 0x000f96a4, 0x00000000 },
30557 -    { 0x00009adc, 0x00000000, 0x00000000, 0x000f96a8, 0x000f96a8, 0x00000000 },
30558 -    { 0x00009ae0, 0x00000000, 0x00000000, 0x000f9710, 0x000f9710, 0x00000000 },
30559 -    { 0x00009ae4, 0x00000000, 0x00000000, 0x000f9714, 0x000f9714, 0x00000000 },
30560 -    { 0x00009ae8, 0x00000000, 0x00000000, 0x000f9720, 0x000f9720, 0x00000000 },
30561 -    { 0x00009aec, 0x00000000, 0x00000000, 0x000f9724, 0x000f9724, 0x00000000 },
30562 -    { 0x00009af0, 0x00000000, 0x00000000, 0x000f9728, 0x000f9728, 0x00000000 },
30563 -    { 0x00009af4, 0x00000000, 0x00000000, 0x000f972c, 0x000f972c, 0x00000000 },
30564 -    { 0x00009af8, 0x00000000, 0x00000000, 0x000f97a0, 0x000f97a0, 0x00000000 },
30565 -    { 0x00009afc, 0x00000000, 0x00000000, 0x000f97a4, 0x000f97a4, 0x00000000 },
30566 -    { 0x00009b00, 0x00000000, 0x00000000, 0x000fb7a8, 0x000fb7a8, 0x00000000 },
30567 -    { 0x00009b04, 0x00000000, 0x00000000, 0x000fb7b0, 0x000fb7b0, 0x00000000 },
30568 -    { 0x00009b08, 0x00000000, 0x00000000, 0x000fb7b4, 0x000fb7b4, 0x00000000 },
30569 -    { 0x00009b0c, 0x00000000, 0x00000000, 0x000fb7b8, 0x000fb7b8, 0x00000000 },
30570 -    { 0x00009b10, 0x00000000, 0x00000000, 0x000fb7a5, 0x000fb7a5, 0x00000000 },
30571 -    { 0x00009b14, 0x00000000, 0x00000000, 0x000fb7a9, 0x000fb7a9, 0x00000000 },
30572 -    { 0x00009b18, 0x00000000, 0x00000000, 0x000fb7ad, 0x000fb7ad, 0x00000000 },
30573 -    { 0x00009b1c, 0x00000000, 0x00000000, 0x000fb7b1, 0x000fb7b1, 0x00000000 },
30574 -    { 0x00009b20, 0x00000000, 0x00000000, 0x000fb7b5, 0x000fb7b5, 0x00000000 },
30575 -    { 0x00009b24, 0x00000000, 0x00000000, 0x000fb7b9, 0x000fb7b9, 0x00000000 },
30576 -    { 0x00009b28, 0x00000000, 0x00000000, 0x000fb7c5, 0x000fb7c5, 0x00000000 },
30577 -    { 0x00009b2c, 0x00000000, 0x00000000, 0x000fb7c9, 0x000fb7c9, 0x00000000 },
30578 -    { 0x00009b30, 0x00000000, 0x00000000, 0x000fb7d1, 0x000fb7d1, 0x00000000 },
30579 -    { 0x00009b34, 0x00000000, 0x00000000, 0x000fb7d5, 0x000fb7d5, 0x00000000 },
30580 -    { 0x00009b38, 0x00000000, 0x00000000, 0x000fb7d9, 0x000fb7d9, 0x00000000 },
30581 -    { 0x00009b3c, 0x00000000, 0x00000000, 0x000fb7c6, 0x000fb7c6, 0x00000000 },
30582 -    { 0x00009b40, 0x00000000, 0x00000000, 0x000fb7ca, 0x000fb7ca, 0x00000000 },
30583 -    { 0x00009b44, 0x00000000, 0x00000000, 0x000fb7ce, 0x000fb7ce, 0x00000000 },
30584 -    { 0x00009b48, 0x00000000, 0x00000000, 0x000fb7d2, 0x000fb7d2, 0x00000000 },
30585 -    { 0x00009b4c, 0x00000000, 0x00000000, 0x000fb7d6, 0x000fb7d6, 0x00000000 },
30586 -    { 0x00009b50, 0x00000000, 0x00000000, 0x000fb7c3, 0x000fb7c3, 0x00000000 },
30587 -    { 0x00009b54, 0x00000000, 0x00000000, 0x000fb7c7, 0x000fb7c7, 0x00000000 },
30588 -    { 0x00009b58, 0x00000000, 0x00000000, 0x000fb7cb, 0x000fb7cb, 0x00000000 },
30589 -    { 0x00009b5c, 0x00000000, 0x00000000, 0x000fb7cf, 0x000fb7cf, 0x00000000 },
30590 -    { 0x00009b60, 0x00000000, 0x00000000, 0x000fb7d7, 0x000fb7d7, 0x00000000 },
30591 -    { 0x00009b64, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30592 -    { 0x00009b68, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30593 -    { 0x00009b6c, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30594 -    { 0x00009b70, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30595 -    { 0x00009b74, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30596 -    { 0x00009b78, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30597 -    { 0x00009b7c, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30598 -    { 0x00009b80, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30599 -    { 0x00009b84, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30600 -    { 0x00009b88, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30601 -    { 0x00009b8c, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30602 -    { 0x00009b90, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30603 -    { 0x00009b94, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30604 -    { 0x00009b98, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30605 -    { 0x00009b9c, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30606 -    { 0x00009ba0, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30607 -    { 0x00009ba4, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30608 -    { 0x00009ba8, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30609 -    { 0x00009bac, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30610 -    { 0x00009bb0, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30611 -    { 0x00009bb4, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30612 -    { 0x00009bb8, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30613 -    { 0x00009bbc, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30614 -    { 0x00009bc0, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30615 -    { 0x00009bc4, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30616 -    { 0x00009bc8, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30617 -    { 0x00009bcc, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30618 -    { 0x00009bd0, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30619 -    { 0x00009bd4, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30620 -    { 0x00009bd8, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30621 -    { 0x00009bdc, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30622 -    { 0x00009be0, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30623 -    { 0x00009be4, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30624 -    { 0x00009be8, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30625 -    { 0x00009bec, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30626 -    { 0x00009bf0, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30627 -    { 0x00009bf4, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30628 -    { 0x00009bf8, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30629 -    { 0x00009bfc, 0x00000000, 0x00000000, 0x000fb7db, 0x000fb7db, 0x00000000 },
30630 -    { 0x0000aa00, 0x00000000, 0x00000000, 0x0006801c, 0x0006801c, 0x00000000 },
30631 -    { 0x0000aa04, 0x00000000, 0x00000000, 0x00068080, 0x00068080, 0x00000000 },
30632 -    { 0x0000aa08, 0x00000000, 0x00000000, 0x00068084, 0x00068084, 0x00000000 },
30633 -    { 0x0000aa0c, 0x00000000, 0x00000000, 0x00068088, 0x00068088, 0x00000000 },
30634 -    { 0x0000aa10, 0x00000000, 0x00000000, 0x0006808c, 0x0006808c, 0x00000000 },
30635 -    { 0x0000aa14, 0x00000000, 0x00000000, 0x00068100, 0x00068100, 0x00000000 },
30636 -    { 0x0000aa18, 0x00000000, 0x00000000, 0x00068104, 0x00068104, 0x00000000 },
30637 -    { 0x0000aa1c, 0x00000000, 0x00000000, 0x00068108, 0x00068108, 0x00000000 },
30638 -    { 0x0000aa20, 0x00000000, 0x00000000, 0x0006810c, 0x0006810c, 0x00000000 },
30639 -    { 0x0000aa24, 0x00000000, 0x00000000, 0x00068110, 0x00068110, 0x00000000 },
30640 -    { 0x0000aa28, 0x00000000, 0x00000000, 0x00068110, 0x00068110, 0x00000000 },
30641 -    { 0x0000aa2c, 0x00000000, 0x00000000, 0x00068180, 0x00068180, 0x00000000 },
30642 -    { 0x0000aa30, 0x00000000, 0x00000000, 0x00068184, 0x00068184, 0x00000000 },
30643 -    { 0x0000aa34, 0x00000000, 0x00000000, 0x00068188, 0x00068188, 0x00000000 },
30644 -    { 0x0000aa38, 0x00000000, 0x00000000, 0x0006818c, 0x0006818c, 0x00000000 },
30645 -    { 0x0000aa3c, 0x00000000, 0x00000000, 0x00068190, 0x00068190, 0x00000000 },
30646 -    { 0x0000aa40, 0x00000000, 0x00000000, 0x00068194, 0x00068194, 0x00000000 },
30647 -    { 0x0000aa44, 0x00000000, 0x00000000, 0x000681a0, 0x000681a0, 0x00000000 },
30648 -    { 0x0000aa48, 0x00000000, 0x00000000, 0x0006820c, 0x0006820c, 0x00000000 },
30649 -    { 0x0000aa4c, 0x00000000, 0x00000000, 0x000681a8, 0x000681a8, 0x00000000 },
30650 -    { 0x0000aa50, 0x00000000, 0x00000000, 0x000681ac, 0x000681ac, 0x00000000 },
30651 -    { 0x0000aa54, 0x00000000, 0x00000000, 0x0006821c, 0x0006821c, 0x00000000 },
30652 -    { 0x0000aa58, 0x00000000, 0x00000000, 0x00068224, 0x00068224, 0x00000000 },
30653 -    { 0x0000aa5c, 0x00000000, 0x00000000, 0x00068290, 0x00068290, 0x00000000 },
30654 -    { 0x0000aa60, 0x00000000, 0x00000000, 0x00068300, 0x00068300, 0x00000000 },
30655 -    { 0x0000aa64, 0x00000000, 0x00000000, 0x00068308, 0x00068308, 0x00000000 },
30656 -    { 0x0000aa68, 0x00000000, 0x00000000, 0x0006830c, 0x0006830c, 0x00000000 },
30657 -    { 0x0000aa6c, 0x00000000, 0x00000000, 0x00068310, 0x00068310, 0x00000000 },
30658 -    { 0x0000aa70, 0x00000000, 0x00000000, 0x00068788, 0x00068788, 0x00000000 },
30659 -    { 0x0000aa74, 0x00000000, 0x00000000, 0x0006878c, 0x0006878c, 0x00000000 },
30660 -    { 0x0000aa78, 0x00000000, 0x00000000, 0x00068790, 0x00068790, 0x00000000 },
30661 -    { 0x0000aa7c, 0x00000000, 0x00000000, 0x00068794, 0x00068794, 0x00000000 },
30662 -    { 0x0000aa80, 0x00000000, 0x00000000, 0x00068798, 0x00068798, 0x00000000 },
30663 -    { 0x0000aa84, 0x00000000, 0x00000000, 0x0006879c, 0x0006879c, 0x00000000 },
30664 -    { 0x0000aa88, 0x00000000, 0x00000000, 0x00068b89, 0x00068b89, 0x00000000 },
30665 -    { 0x0000aa8c, 0x00000000, 0x00000000, 0x00068b8d, 0x00068b8d, 0x00000000 },
30666 -    { 0x0000aa90, 0x00000000, 0x00000000, 0x00068b91, 0x00068b91, 0x00000000 },
30667 -    { 0x0000aa94, 0x00000000, 0x00000000, 0x00068b95, 0x00068b95, 0x00000000 },
30668 -    { 0x0000aa98, 0x00000000, 0x00000000, 0x00068b99, 0x00068b99, 0x00000000 },
30669 -    { 0x0000aa9c, 0x00000000, 0x00000000, 0x00068ba5, 0x00068ba5, 0x00000000 },
30670 -    { 0x0000aaa0, 0x00000000, 0x00000000, 0x00068ba9, 0x00068ba9, 0x00000000 },
30671 -    { 0x0000aaa4, 0x00000000, 0x00000000, 0x00068bad, 0x00068bad, 0x00000000 },
30672 -    { 0x0000aaa8, 0x00000000, 0x00000000, 0x000b8b0c, 0x000b8b0c, 0x00000000 },
30673 -    { 0x0000aaac, 0x00000000, 0x00000000, 0x000b8f10, 0x000b8f10, 0x00000000 },
30674 -    { 0x0000aab0, 0x00000000, 0x00000000, 0x000b8f14, 0x000b8f14, 0x00000000 },
30675 -    { 0x0000aab4, 0x00000000, 0x00000000, 0x000b8f84, 0x000b8f84, 0x00000000 },
30676 -    { 0x0000aab8, 0x00000000, 0x00000000, 0x000b8f84, 0x000b8f84, 0x00000000 },
30677 -    { 0x0000aabc, 0x00000000, 0x00000000, 0x000b8f88, 0x000b8f88, 0x00000000 },
30678 -    { 0x0000aac0, 0x00000000, 0x00000000, 0x000bb380, 0x000bb380, 0x00000000 },
30679 -    { 0x0000aac4, 0x00000000, 0x00000000, 0x000bb384, 0x000bb384, 0x00000000 },
30680 -    { 0x0000aac8, 0x00000000, 0x00000000, 0x000bb388, 0x000bb388, 0x00000000 },
30681 -    { 0x0000aacc, 0x00000000, 0x00000000, 0x000bb38c, 0x000bb38c, 0x00000000 },
30682 -    { 0x0000aad0, 0x00000000, 0x00000000, 0x000bb394, 0x000bb394, 0x00000000 },
30683 -    { 0x0000aad4, 0x00000000, 0x00000000, 0x000bb798, 0x000bb798, 0x00000000 },
30684 -    { 0x0000aad8, 0x00000000, 0x00000000, 0x000f970c, 0x000f970c, 0x00000000 },
30685 -    { 0x0000aadc, 0x00000000, 0x00000000, 0x000f9710, 0x000f9710, 0x00000000 },
30686 -    { 0x0000aae0, 0x00000000, 0x00000000, 0x000f9714, 0x000f9714, 0x00000000 },
30687 -    { 0x0000aae4, 0x00000000, 0x00000000, 0x000f9718, 0x000f9718, 0x00000000 },
30688 -    { 0x0000aae8, 0x00000000, 0x00000000, 0x000f9705, 0x000f9705, 0x00000000 },
30689 -    { 0x0000aaec, 0x00000000, 0x00000000, 0x000f9709, 0x000f9709, 0x00000000 },
30690 -    { 0x0000aaf0, 0x00000000, 0x00000000, 0x000f970d, 0x000f970d, 0x00000000 },
30691 -    { 0x0000aaf4, 0x00000000, 0x00000000, 0x000f9711, 0x000f9711, 0x00000000 },
30692 -    { 0x0000aaf8, 0x00000000, 0x00000000, 0x000f9715, 0x000f9715, 0x00000000 },
30693 -    { 0x0000aafc, 0x00000000, 0x00000000, 0x000f9719, 0x000f9719, 0x00000000 },
30694 -    { 0x0000ab00, 0x00000000, 0x00000000, 0x000fb7a4, 0x000fb7a4, 0x00000000 },
30695 -    { 0x0000ab04, 0x00000000, 0x00000000, 0x000fb7a8, 0x000fb7a8, 0x00000000 },
30696 -    { 0x0000ab08, 0x00000000, 0x00000000, 0x000fb7ac, 0x000fb7ac, 0x00000000 },
30697 -    { 0x0000ab0c, 0x00000000, 0x00000000, 0x000fb7ac, 0x000fb7ac, 0x00000000 },
30698 -    { 0x0000ab10, 0x00000000, 0x00000000, 0x000fb7b0, 0x000fb7b0, 0x00000000 },
30699 -    { 0x0000ab14, 0x00000000, 0x00000000, 0x000fb7b8, 0x000fb7b8, 0x00000000 },
30700 -    { 0x0000ab18, 0x00000000, 0x00000000, 0x000fb7bc, 0x000fb7bc, 0x00000000 },
30701 -    { 0x0000ab1c, 0x00000000, 0x00000000, 0x000fb7a1, 0x000fb7a1, 0x00000000 },
30702 -    { 0x0000ab20, 0x00000000, 0x00000000, 0x000fb7a5, 0x000fb7a5, 0x00000000 },
30703 -    { 0x0000ab24, 0x00000000, 0x00000000, 0x000fb7a9, 0x000fb7a9, 0x00000000 },
30704 -    { 0x0000ab28, 0x00000000, 0x00000000, 0x000fb7b1, 0x000fb7b1, 0x00000000 },
30705 -    { 0x0000ab2c, 0x00000000, 0x00000000, 0x000fb7b5, 0x000fb7b5, 0x00000000 },
30706 -    { 0x0000ab30, 0x00000000, 0x00000000, 0x000fb7bd, 0x000fb7bd, 0x00000000 },
30707 -    { 0x0000ab34, 0x00000000, 0x00000000, 0x000fb7c9, 0x000fb7c9, 0x00000000 },
30708 -    { 0x0000ab38, 0x00000000, 0x00000000, 0x000fb7cd, 0x000fb7cd, 0x00000000 },
30709 -    { 0x0000ab3c, 0x00000000, 0x00000000, 0x000fb7d1, 0x000fb7d1, 0x00000000 },
30710 -    { 0x0000ab40, 0x00000000, 0x00000000, 0x000fb7d9, 0x000fb7d9, 0x00000000 },
30711 -    { 0x0000ab44, 0x00000000, 0x00000000, 0x000fb7c2, 0x000fb7c2, 0x00000000 },
30712 -    { 0x0000ab48, 0x00000000, 0x00000000, 0x000fb7c6, 0x000fb7c6, 0x00000000 },
30713 -    { 0x0000ab4c, 0x00000000, 0x00000000, 0x000fb7ca, 0x000fb7ca, 0x00000000 },
30714 -    { 0x0000ab50, 0x00000000, 0x00000000, 0x000fb7ce, 0x000fb7ce, 0x00000000 },
30715 -    { 0x0000ab54, 0x00000000, 0x00000000, 0x000fb7d2, 0x000fb7d2, 0x00000000 },
30716 -    { 0x0000ab58, 0x00000000, 0x00000000, 0x000fb7d6, 0x000fb7d6, 0x00000000 },
30717 -    { 0x0000ab5c, 0x00000000, 0x00000000, 0x000fb7c3, 0x000fb7c3, 0x00000000 },
30718 -    { 0x0000ab60, 0x00000000, 0x00000000, 0x000fb7cb, 0x000fb7cb, 0x00000000 },
30719 -    { 0x0000ab64, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30720 -    { 0x0000ab68, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30721 -    { 0x0000ab6c, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30722 -    { 0x0000ab70, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30723 -    { 0x0000ab74, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30724 -    { 0x0000ab78, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30725 -    { 0x0000ab7c, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30726 -    { 0x0000ab80, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30727 -    { 0x0000ab84, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30728 -    { 0x0000ab88, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30729 -    { 0x0000ab8c, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30730 -    { 0x0000ab90, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30731 -    { 0x0000ab94, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30732 -    { 0x0000ab98, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30733 -    { 0x0000ab9c, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30734 -    { 0x0000aba0, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30735 -    { 0x0000aba4, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30736 -    { 0x0000aba8, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30737 -    { 0x0000abac, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30738 -    { 0x0000abb0, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30739 -    { 0x0000abb4, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30740 -    { 0x0000abb8, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30741 -    { 0x0000abbc, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30742 -    { 0x0000abc0, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30743 -    { 0x0000abc4, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30744 -    { 0x0000abc8, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30745 -    { 0x0000abcc, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30746 -    { 0x0000abd0, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30747 -    { 0x0000abd4, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30748 -    { 0x0000abd8, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30749 -    { 0x0000abdc, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30750 -    { 0x0000abe0, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30751 -    { 0x0000abe4, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30752 -    { 0x0000abe8, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30753 -    { 0x0000abec, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30754 -    { 0x0000abf0, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30755 -    { 0x0000abf4, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30756 -    { 0x0000abf8, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30757 -    { 0x0000abfc, 0x00000000, 0x00000000, 0x000fb7d3, 0x000fb7d3, 0x00000000 },
30758 -    { 0x0000a204, 0x00000004, 0x00000004, 0x00000004, 0x00000004, 0x00000004 },
30759 -    { 0x0000a20c, 0x00000014, 0x00000014, 0x00000000, 0x00000000, 0x0001f000 },
30760 -    { 0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a },
30761 -    { 0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000 },
30762 -    { 0x0000a250, 0x001ff000, 0x001ff000, 0x001ca000, 0x001ca000, 0x001da000 },
30763 -    { 0x0000a274, 0x0a81c652, 0x0a81c652, 0x0a820652, 0x0a820652, 0x0a82a652 },
30764 -    { 0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
30765 -    { 0x0000a304, 0x00000000, 0x00000000, 0x00007201, 0x00007201, 0x00000000 },
30766 -    { 0x0000a308, 0x00000000, 0x00000000, 0x00010408, 0x00010408, 0x00000000 },
30767 -    { 0x0000a30c, 0x00000000, 0x00000000, 0x0001860a, 0x0001860a, 0x00000000 },
30768 -    { 0x0000a310, 0x00000000, 0x00000000, 0x00020818, 0x00020818, 0x00000000 },
30769 -    { 0x0000a314, 0x00000000, 0x00000000, 0x00024858, 0x00024858, 0x00000000 },
30770 -    { 0x0000a318, 0x00000000, 0x00000000, 0x00026859, 0x00026859, 0x00000000 },
30771 -    { 0x0000a31c, 0x00000000, 0x00000000, 0x0002985b, 0x0002985b, 0x00000000 },
30772 -    { 0x0000a320, 0x00000000, 0x00000000, 0x0002c89a, 0x0002c89a, 0x00000000 },
30773 -    { 0x0000a324, 0x00000000, 0x00000000, 0x0002e89b, 0x0002e89b, 0x00000000 },
30774 -    { 0x0000a328, 0x00000000, 0x00000000, 0x0003089c, 0x0003089c, 0x00000000 },
30775 -    { 0x0000a32c, 0x00000000, 0x00000000, 0x0003289d, 0x0003289d, 0x00000000 },
30776 -    { 0x0000a330, 0x00000000, 0x00000000, 0x0003489e, 0x0003489e, 0x00000000 },
30777 -    { 0x0000a334, 0x00000000, 0x00000000, 0x000388de, 0x000388de, 0x00000000 },
30778 -    { 0x0000a338, 0x00000000, 0x00000000, 0x0003b91e, 0x0003b91e, 0x00000000 },
30779 -    { 0x0000a33c, 0x00000000, 0x00000000, 0x0003d95e, 0x0003d95e, 0x00000000 },
30780 -    { 0x0000a340, 0x00000000, 0x00000000, 0x000419df, 0x000419df, 0x00000000 },
30781 -    { 0x0000a344, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
30782 -    { 0x0000a358, 0x7999aa02, 0x7999aa02, 0x7999aa0e, 0x7999aa0e, 0x7999aa0e },
30783 -};
30784 -
30785 -static const u_int32_t ar9285Common_9285[][2] = {
30786 -    { 0x0000000c, 0x00000000 },
30787 -    { 0x00000030, 0x00020045 },
30788 -    { 0x00000034, 0x00000005 },
30789 -    { 0x00000040, 0x00000000 },
30790 -    { 0x00000044, 0x00000008 },
30791 -    { 0x00000048, 0x00000008 },
30792 -    { 0x0000004c, 0x00000010 },
30793 -    { 0x00000050, 0x00000000 },
30794 -    { 0x00000054, 0x0000001f },
30795 -    { 0x00000800, 0x00000000 },
30796 -    { 0x00000804, 0x00000000 },
30797 -    { 0x00000808, 0x00000000 },
30798 -    { 0x0000080c, 0x00000000 },
30799 -    { 0x00000810, 0x00000000 },
30800 -    { 0x00000814, 0x00000000 },
30801 -    { 0x00000818, 0x00000000 },
30802 -    { 0x0000081c, 0x00000000 },
30803 -    { 0x00000820, 0x00000000 },
30804 -    { 0x00000824, 0x00000000 },
30805 -    { 0x00001040, 0x002ffc0f },
30806 -    { 0x00001044, 0x002ffc0f },
30807 -    { 0x00001048, 0x002ffc0f },
30808 -    { 0x0000104c, 0x002ffc0f },
30809 -    { 0x00001050, 0x002ffc0f },
30810 -    { 0x00001054, 0x002ffc0f },
30811 -    { 0x00001058, 0x002ffc0f },
30812 -    { 0x0000105c, 0x002ffc0f },
30813 -    { 0x00001060, 0x002ffc0f },
30814 -    { 0x00001064, 0x002ffc0f },
30815 -    { 0x00001230, 0x00000000 },
30816 -    { 0x00001270, 0x00000000 },
30817 -    { 0x00001038, 0x00000000 },
30818 -    { 0x00001078, 0x00000000 },
30819 -    { 0x000010b8, 0x00000000 },
30820 -    { 0x000010f8, 0x00000000 },
30821 -    { 0x00001138, 0x00000000 },
30822 -    { 0x00001178, 0x00000000 },
30823 -    { 0x000011b8, 0x00000000 },
30824 -    { 0x000011f8, 0x00000000 },
30825 -    { 0x00001238, 0x00000000 },
30826 -    { 0x00001278, 0x00000000 },
30827 -    { 0x000012b8, 0x00000000 },
30828 -    { 0x000012f8, 0x00000000 },
30829 -    { 0x00001338, 0x00000000 },
30830 -    { 0x00001378, 0x00000000 },
30831 -    { 0x000013b8, 0x00000000 },
30832 -    { 0x000013f8, 0x00000000 },
30833 -    { 0x00001438, 0x00000000 },
30834 -    { 0x00001478, 0x00000000 },
30835 -    { 0x000014b8, 0x00000000 },
30836 -    { 0x000014f8, 0x00000000 },
30837 -    { 0x00001538, 0x00000000 },
30838 -    { 0x00001578, 0x00000000 },
30839 -    { 0x000015b8, 0x00000000 },
30840 -    { 0x000015f8, 0x00000000 },
30841 -    { 0x00001638, 0x00000000 },
30842 -    { 0x00001678, 0x00000000 },
30843 -    { 0x000016b8, 0x00000000 },
30844 -    { 0x000016f8, 0x00000000 },
30845 -    { 0x00001738, 0x00000000 },
30846 -    { 0x00001778, 0x00000000 },
30847 -    { 0x000017b8, 0x00000000 },
30848 -    { 0x000017f8, 0x00000000 },
30849 -    { 0x0000103c, 0x00000000 },
30850 -    { 0x0000107c, 0x00000000 },
30851 -    { 0x000010bc, 0x00000000 },
30852 -    { 0x000010fc, 0x00000000 },
30853 -    { 0x0000113c, 0x00000000 },
30854 -    { 0x0000117c, 0x00000000 },
30855 -    { 0x000011bc, 0x00000000 },
30856 -    { 0x000011fc, 0x00000000 },
30857 -    { 0x0000123c, 0x00000000 },
30858 -    { 0x0000127c, 0x00000000 },
30859 -    { 0x000012bc, 0x00000000 },
30860 -    { 0x000012fc, 0x00000000 },
30861 -    { 0x0000133c, 0x00000000 },
30862 -    { 0x0000137c, 0x00000000 },
30863 -    { 0x000013bc, 0x00000000 },
30864 -    { 0x000013fc, 0x00000000 },
30865 -    { 0x0000143c, 0x00000000 },
30866 -    { 0x0000147c, 0x00000000 },
30867 -    { 0x00004030, 0x00000002 },
30868 -    { 0x0000403c, 0x00000002 },
30869 -    { 0x00004024, 0x0000001f },
30870 -    { 0x00004060, 0x00000000 },
30871 -    { 0x00004064, 0x00000000 },
30872 -    { 0x00007010, 0x00000031 },
30873 -    { 0x00007034, 0x00000002 },
30874 -    { 0x00007038, 0x000004c2 },
30875 -    { 0x00008004, 0x00000000 },
30876 -    { 0x00008008, 0x00000000 },
30877 -    { 0x0000800c, 0x00000000 },
30878 -    { 0x00008018, 0x00000700 },
30879 -    { 0x00008020, 0x00000000 },
30880 -    { 0x00008038, 0x00000000 },
30881 -    { 0x0000803c, 0x00000000 },
30882 -    { 0x00008048, 0x00000000 },
30883 -    { 0x00008054, 0x00000000 },
30884 -    { 0x00008058, 0x00000000 },
30885 -    { 0x0000805c, 0x000fc78f },
30886 -    { 0x00008060, 0x0000000f },
30887 -    { 0x00008064, 0x00000000 },
30888 -    { 0x00008070, 0x00000000 },
30889 -    { 0x000080c0, 0x2a80001a },
30890 -    { 0x000080c4, 0x05dc01e0 },
30891 -    { 0x000080c8, 0x1f402710 },
30892 -    { 0x000080cc, 0x01f40000 },
30893 -    { 0x000080d0, 0x00001e00 },
30894 -    { 0x000080d4, 0x00000000 },
30895 -    { 0x000080d8, 0x00400000 },
30896 -    { 0x000080e0, 0xffffffff },
30897 -    { 0x000080e4, 0x0000ffff },
30898 -    { 0x000080e8, 0x003f3f3f },
30899 -    { 0x000080ec, 0x00000000 },
30900 -    { 0x000080f0, 0x00000000 },
30901 -    { 0x000080f4, 0x00000000 },
30902 -    { 0x000080f8, 0x00000000 },
30903 -    { 0x000080fc, 0x00020000 },
30904 -    { 0x00008100, 0x00020000 },
30905 -    { 0x00008104, 0x00000001 },
30906 -    { 0x00008108, 0x00000052 },
30907 -    { 0x0000810c, 0x00000000 },
30908 -    { 0x00008110, 0x00000168 },
30909 -    { 0x00008118, 0x000100aa },
30910 -    { 0x0000811c, 0x00003210 },
30911 -    { 0x00008120, 0x08f04800 },
30912 -    { 0x00008124, 0x00000000 },
30913 -    { 0x00008128, 0x00000000 },
30914 -    { 0x0000812c, 0x00000000 },
30915 -    { 0x00008130, 0x00000000 },
30916 -    { 0x00008134, 0x00000000 },
30917 -    { 0x00008138, 0x00000000 },
30918 -    { 0x0000813c, 0x00000000 },
30919 -    { 0x00008144, 0x00000000 },
30920 -    { 0x00008168, 0x00000000 },
30921 -    { 0x0000816c, 0x00000000 },
30922 -    { 0x00008170, 0x32143320 },
30923 -    { 0x00008174, 0xfaa4fa50 },
30924 -    { 0x00008178, 0x00000100 },
30925 -    { 0x0000817c, 0x00000000 },
30926 -    { 0x000081c0, 0x00000000 },
30927 -    { 0x000081d0, 0x00003210 },
30928 -    { 0x000081ec, 0x00000000 },
30929 -    { 0x000081f0, 0x00000000 },
30930 -    { 0x000081f4, 0x00000000 },
30931 -    { 0x000081f8, 0x00000000 },
30932 -    { 0x000081fc, 0x00000000 },
30933 -    { 0x00008200, 0x00000000 },
30934 -    { 0x00008204, 0x00000000 },
30935 -    { 0x00008208, 0x00000000 },
30936 -    { 0x0000820c, 0x00000000 },
30937 -    { 0x00008210, 0x00000000 },
30938 -    { 0x00008214, 0x00000000 },
30939 -    { 0x00008218, 0x00000000 },
30940 -    { 0x0000821c, 0x00000000 },
30941 -    { 0x00008220, 0x00000000 },
30942 -    { 0x00008224, 0x00000000 },
30943 -    { 0x00008228, 0x00000000 },
30944 -    { 0x0000822c, 0x00000000 },
30945 -    { 0x00008230, 0x00000000 },
30946 -    { 0x00008234, 0x00000000 },
30947 -    { 0x00008238, 0x00000000 },
30948 -    { 0x0000823c, 0x00000000 },
30949 -    { 0x00008240, 0x00100000 },
30950 -    { 0x00008244, 0x0010f400 },
30951 -    { 0x00008248, 0x00000100 },
30952 -    { 0x0000824c, 0x0001e800 },
30953 -    { 0x00008250, 0x00000000 },
30954 -    { 0x00008254, 0x00000000 },
30955 -    { 0x00008258, 0x00000000 },
30956 -    { 0x0000825c, 0x400000ff },
30957 -    { 0x00008260, 0x00080922 },
30958 -    { 0x00008264, 0xa8a00010 },
30959 -    { 0x00008270, 0x00000000 },
30960 -    { 0x00008274, 0x40000000 },
30961 -    { 0x00008278, 0x003e4180 },
30962 -    { 0x0000827c, 0x00000000 },
30963 -    { 0x00008284, 0x0000002c },
30964 -    { 0x00008288, 0x0000002c },
30965 -    { 0x0000828c, 0x00000000 },
30966 -    { 0x00008294, 0x00000000 },
30967 -    { 0x00008298, 0x00000000 },
30968 -    { 0x0000829c, 0x00000000 },
30969 -    { 0x00008300, 0x00000040 },
30970 -    { 0x00008314, 0x00000000 },
30971 -    { 0x00008328, 0x00000000 },
30972 -    { 0x0000832c, 0x00000001 },
30973 -    { 0x00008330, 0x00000302 },
30974 -    { 0x00008334, 0x00000e00 },
30975 -    { 0x00008338, 0x00000000 },
30976 -    { 0x0000833c, 0x00000000 },
30977 -    { 0x00008340, 0x00010380 },
30978 -    { 0x00008344, 0x00481043 },
30979 -    { 0x00009808, 0x00000000 },
30980 -    { 0x0000980c, 0xafe68e30 },
30981 -    { 0x00009810, 0xfd14e000 },
30982 -    { 0x00009814, 0x9c0a9f6b },
30983 -    { 0x0000981c, 0x00000000 },
30984 -    { 0x0000982c, 0x0000a000 },
30985 -    { 0x00009830, 0x00000000 },
30986 -    { 0x0000983c, 0x00200400 },
30987 -    { 0x0000984c, 0x0040233c },
30988 -    { 0x00009854, 0x00000044 },
30989 -    { 0x00009900, 0x00000000 },
30990 -    { 0x00009904, 0x00000000 },
30991 -    { 0x00009908, 0x00000000 },
30992 -    { 0x0000990c, 0x00000000 },
30993 -    { 0x00009910, 0x01002310 },
30994 -    { 0x0000991c, 0x10000fff },
30995 -    { 0x00009920, 0x04900000 },
30996 -    { 0x00009928, 0x00000001 },
30997 -    { 0x0000992c, 0x00000004 },
30998 -    { 0x00009934, 0x1e1f2022 },
30999 -    { 0x00009938, 0x0a0b0c0d },
31000 -    { 0x0000993c, 0x00000000 },
31001 -    { 0x00009940, 0x14750604 },
31002 -    { 0x00009948, 0x9280c00a },
31003 -    { 0x0000994c, 0x00020028 },
31004 -    { 0x00009954, 0x5f3ca3de },
31005 -    { 0x00009958, 0x2108ecff },
31006 -    { 0x00009968, 0x000003ce },
31007 -    { 0x00009970, 0x1927b515 },
31008 -    { 0x00009974, 0x00000000 },
31009 -    { 0x00009978, 0x00000001 },
31010 -    { 0x0000997c, 0x00000000 },
31011 -    { 0x00009980, 0x00000000 },
31012 -    { 0x00009984, 0x00000000 },
31013 -    { 0x00009988, 0x00000000 },
31014 -    { 0x0000998c, 0x00000000 },
31015 -    { 0x00009990, 0x00000000 },
31016 -    { 0x00009994, 0x00000000 },
31017 -    { 0x00009998, 0x00000000 },
31018 -    { 0x0000999c, 0x00000000 },
31019 -    { 0x000099a0, 0x00000000 },
31020 -    { 0x000099a4, 0x00000001 },
31021 -    { 0x000099a8, 0x201fff00 },
31022 -    { 0x000099ac, 0x2def0a00 },
31023 -    { 0x000099b0, 0x03051000 },
31024 -    { 0x000099b4, 0x00000820 },
31025 -    { 0x000099dc, 0x00000000 },
31026 -    { 0x000099e0, 0x00000000 },
31027 -    { 0x000099e4, 0xaaaaaaaa },
31028 -    { 0x000099e8, 0x3c466478 },
31029 -    { 0x000099ec, 0x0cc80caa },
31030 -    { 0x000099f0, 0x00000000 },
31031 -    { 0x0000a208, 0x803e6788 },
31032 -    { 0x0000a210, 0x4080a333 },
31033 -    { 0x0000a214, 0x00206c10 },
31034 -    { 0x0000a218, 0x009c4060 },
31035 -    { 0x0000a220, 0x01834061 },
31036 -    { 0x0000a224, 0x00000400 },
31037 -    { 0x0000a228, 0x000003b5 },
31038 -    { 0x0000a22c, 0x00000000 },
31039 -    { 0x0000a234, 0x20202020 },
31040 -    { 0x0000a238, 0x20202020 },
31041 -    { 0x0000a244, 0x00000000 },
31042 -    { 0x0000a248, 0xfffffffc },
31043 -    { 0x0000a24c, 0x00000000 },
31044 -    { 0x0000a254, 0x00000000 },
31045 -    { 0x0000a258, 0x0ccb5380 },
31046 -    { 0x0000a25c, 0x15151501 },
31047 -    { 0x0000a260, 0xdfa90f01 },
31048 -    { 0x0000a268, 0x00000000 },
31049 -    { 0x0000a26c, 0x0ebae9e6 },
31050 -    { 0x0000d270, 0x0d820820 },
31051 -    { 0x0000a278, 0x39ce739c },
31052 -    { 0x0000a27c, 0x050e039c },
31053 -    { 0x0000d35c, 0x07ffffef },
31054 -    { 0x0000d360, 0x0fffffe7 },
31055 -    { 0x0000d364, 0x17ffffe5 },
31056 -    { 0x0000d368, 0x1fffffe4 },
31057 -    { 0x0000d36c, 0x37ffffe3 },
31058 -    { 0x0000d370, 0x3fffffe3 },
31059 -    { 0x0000d374, 0x57ffffe3 },
31060 -    { 0x0000d378, 0x5fffffe2 },
31061 -    { 0x0000d37c, 0x7fffffe2 },
31062 -    { 0x0000d380, 0x7f3c7bba },
31063 -    { 0x0000d384, 0xf3307ff0 },
31064 -    { 0x0000a388, 0x0c000000 },
31065 -    { 0x0000a38c, 0x20202020 },
31066 -    { 0x0000a390, 0x20202020 },
31067 -    { 0x0000a394, 0x39ce739c },
31068 -    { 0x0000a398, 0x0000039c },
31069 -    { 0x0000a39c, 0x00000001 },
31070 -    { 0x0000a3a0, 0x00000000 },
31071 -    { 0x0000a3a4, 0x00000000 },
31072 -    { 0x0000a3a8, 0x00000000 },
31073 -    { 0x0000a3ac, 0x00000000 },
31074 -    { 0x0000a3b0, 0x00000000 },
31075 -    { 0x0000a3b4, 0x00000000 },
31076 -    { 0x0000a3b8, 0x00000000 },
31077 -    { 0x0000a3bc, 0x00000000 },
31078 -    { 0x0000a3c0, 0x00000000 },
31079 -    { 0x0000a3c4, 0x00000000 },
31080 -    { 0x0000a3cc, 0x20202020 },
31081 -    { 0x0000a3d0, 0x20202020 },
31082 -    { 0x0000a3d4, 0x20202020 },
31083 -    { 0x0000a3dc, 0x39ce739c },
31084 -    { 0x0000a3e0, 0x0000039c },
31085 -    { 0x0000a3e4, 0x00000000 },
31086 -    { 0x0000a3e8, 0x18c43433 },
31087 -    { 0x0000a3ec, 0x00f70081 },
31088 -    { 0x00007800, 0x00140000 },
31089 -    { 0x00007804, 0x0e4548d8 },
31090 -    { 0x00007808, 0x54214514 },
31091 -    { 0x0000780c, 0x02025820 },
31092 -    { 0x00007810, 0x71c0d388 },
31093 -    { 0x00007814, 0x924934a8 },
31094 -    { 0x0000781c, 0x00000000 },
31095 -    { 0x00007820, 0x00000c04 },
31096 -    { 0x00007824, 0x00d86fff },
31097 -    { 0x00007828, 0x26d2491b },
31098 -    { 0x0000782c, 0x6e36d97b },
31099 -    { 0x00007830, 0xedb6d96c },
31100 -    { 0x00007834, 0x71400086 },
31101 -    { 0x00007838, 0xfac68800 },
31102 -    { 0x0000783c, 0x0001fffe },
31103 -    { 0x00007840, 0xffeb1a20 },
31104 -    { 0x00007844, 0x000c0db6 },
31105 -    { 0x00007848, 0x6db61b6f },
31106 -    { 0x0000784c, 0x6d9b66db },
31107 -    { 0x00007850, 0x6d8c6dba },
31108 -    { 0x00007854, 0x00040000 },
31109 -    { 0x00007858, 0xdb003012 },
31110 -    { 0x0000785c, 0x04924914 },
31111 -    { 0x00007860, 0x21084210 },
31112 -    { 0x00007864, 0xf7d7ffde },
31113 -    { 0x00007868, 0xc2034080 },
31114 -    { 0x0000786c, 0x48609eb4 },
31115 -    { 0x00007870, 0x10142c00 },
31116 -};
31117 -
31118 -static const u_int32_t ar9285PciePhy_clkreq_always_on_L1_9285[][2] = {
31119 -    {0x00004040,  0x9248fd00 },
31120 -    {0x00004040,  0x24924924 },
31121 -    {0x00004040,  0xa8000019 },
31122 -    {0x00004040,  0x13160820 },
31123 -    {0x00004040,  0xe5980560 },
31124 -    {0x00004040,  0xc01dcffd },
31125 -    {0x00004040,  0x1aaabe41 },
31126 -    {0x00004040,  0xbe105554 },
31127 -    {0x00004040,  0x00043007 },
31128 -    {0x00004044,  0x00000000 },
31129 -};
31130 -
31131 -static const u_int32_t ar9285PciePhy_clkreq_off_L1_9285[][2] = {
31132 -    {0x00004040,  0x9248fd00 },
31133 -    {0x00004040,  0x24924924 },
31134 -    {0x00004040,  0xa8000019 },
31135 -    {0x00004040,  0x13160820 },
31136 -    {0x00004040,  0xe5980560 },
31137 -    {0x00004040,  0xc01dcffc },
31138 -    {0x00004040,  0x1aaabe41 },
31139 -    {0x00004040,  0xbe105554 },
31140 -    {0x00004040,  0x00043007 },
31141 -    {0x00004044,  0x00000000 },
31142 -};
31143 -
31144 -/* AR9285 v1_2 PCI Register Writes.  Created: 04/13/09 */
31145 -static const u_int32_t ar9285Modes_9285_1_2[][6] = {
31146 -    /* Address      5G-HT20     5G-HT40     2G-HT40     2G-HT20     Turbo   */
31147 -    { 0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160, 0x000001e0 },
31148 -    { 0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c, 0x000001e0 },
31149 -    { 0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38, 0x00001180 },
31150 -    { 0x000010f0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008 },
31151 -    { 0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00, 0x06e006e0 },
31152 -    { 0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b, 0x0988004f },
31153 -    { 0x00008318, 0x00003e80, 0x00007d00, 0x00006880, 0x00003440, 0x00006880 },
31154 -    { 0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300, 0x00000303 },
31155 -    { 0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200, 0x02020200 },
31156 -    { 0x00009824, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e },
31157 -    { 0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001 },
31158 -    { 0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
31159 -    { 0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000007 },
31160 -    { 0x00009840, 0x206a012e, 0x206a012e, 0x206a012e, 0x206a012e, 0x206a012e },
31161 -    { 0x00009844, 0x0372161e, 0x0372161e, 0x03721620, 0x03721620, 0x037216a0 },
31162 -    { 0x00009848, 0x00001066, 0x00001066, 0x00001053, 0x00001053, 0x00001059 },
31163 -    { 0x0000a848, 0x00001066, 0x00001066, 0x00001053, 0x00001053, 0x00001059 },
31164 -    { 0x00009850, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2 },
31165 -    { 0x00009858, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e },
31166 -    { 0x0000985c, 0x3139605e, 0x3139605e, 0x3137605e, 0x3137605e, 0x3139605e },
31167 -    { 0x00009860, 0x00058d18, 0x00058d18, 0x00058d20, 0x00058d20, 0x00058d18 },
31168 -    { 0x00009864, 0x0000fe00, 0x0000fe00, 0x0001ce00, 0x0001ce00, 0x0001ce00 },
31169 -    { 0x00009868, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0 },
31170 -    { 0x0000986c, 0x06903081, 0x06903081, 0x06903881, 0x06903881, 0x06903881 },
31171 -    { 0x00009914, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898, 0x000007d0 },
31172 -    { 0x00009918, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b, 0x00000016 },
31173 -    { 0x00009924, 0xd00a8007, 0xd00a8007, 0xd00a800d, 0xd00a800d, 0xd00a800d },
31174 -    { 0x00009944, 0xffbc1010, 0xffbc1010, 0xffbc1020, 0xffbc1020, 0xffbc1010 },
31175 -    { 0x00009960, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
31176 -    { 0x00009964, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
31177 -    { 0x000099b8, 0x0000421c, 0x0000421c, 0x0000421c, 0x0000421c, 0x0000421c },
31178 -    { 0x000099bc, 0x00000600, 0x00000600, 0x00000c00, 0x00000c00, 0x00000c00 },
31179 -    { 0x000099c0, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4 },
31180 -    { 0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77 },
31181 -    { 0x000099c8, 0x6af6532f, 0x6af6532f, 0x6af6532f, 0x6af6532f, 0x6af6532f },
31182 -    { 0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8 },
31183 -    { 0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384, 0x00046384 },
31184 -    { 0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
31185 -    { 0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
31186 -    { 0x00009a00, 0x00000000, 0x00000000, 0x00058084, 0x00058084, 0x00000000 },
31187 -    { 0x00009a04, 0x00000000, 0x00000000, 0x00058088, 0x00058088, 0x00000000 },
31188 -    { 0x00009a08, 0x00000000, 0x00000000, 0x0005808c, 0x0005808c, 0x00000000 },
31189 -    { 0x00009a0c, 0x00000000, 0x00000000, 0x00058100, 0x00058100, 0x00000000 },
31190 -    { 0x00009a10, 0x00000000, 0x00000000, 0x00058104, 0x00058104, 0x00000000 },
31191 -    { 0x00009a14, 0x00000000, 0x00000000, 0x00058108, 0x00058108, 0x00000000 },
31192 -    { 0x00009a18, 0x00000000, 0x00000000, 0x0005810c, 0x0005810c, 0x00000000 },
31193 -    { 0x00009a1c, 0x00000000, 0x00000000, 0x00058110, 0x00058110, 0x00000000 },
31194 -    { 0x00009a20, 0x00000000, 0x00000000, 0x00058114, 0x00058114, 0x00000000 },
31195 -    { 0x00009a24, 0x00000000, 0x00000000, 0x00058180, 0x00058180, 0x00000000 },
31196 -    { 0x00009a28, 0x00000000, 0x00000000, 0x00058184, 0x00058184, 0x00000000 },
31197 -    { 0x00009a2c, 0x00000000, 0x00000000, 0x00058188, 0x00058188, 0x00000000 },
31198 -    { 0x00009a30, 0x00000000, 0x00000000, 0x0005818c, 0x0005818c, 0x00000000 },
31199 -    { 0x00009a34, 0x00000000, 0x00000000, 0x00058190, 0x00058190, 0x00000000 },
31200 -    { 0x00009a38, 0x00000000, 0x00000000, 0x00058194, 0x00058194, 0x00000000 },
31201 -    { 0x00009a3c, 0x00000000, 0x00000000, 0x000581a0, 0x000581a0, 0x00000000 },
31202 -    { 0x00009a40, 0x00000000, 0x00000000, 0x0005820c, 0x0005820c, 0x00000000 },
31203 -    { 0x00009a44, 0x00000000, 0x00000000, 0x000581a8, 0x000581a8, 0x00000000 },
31204 -    { 0x00009a48, 0x00000000, 0x00000000, 0x00058284, 0x00058284, 0x00000000 },
31205 -    { 0x00009a4c, 0x00000000, 0x00000000, 0x00058288, 0x00058288, 0x00000000 },
31206 -    { 0x00009a50, 0x00000000, 0x00000000, 0x00058224, 0x00058224, 0x00000000 },
31207 -    { 0x00009a54, 0x00000000, 0x00000000, 0x00058290, 0x00058290, 0x00000000 },
31208 -    { 0x00009a58, 0x00000000, 0x00000000, 0x00058300, 0x00058300, 0x00000000 },
31209 -    { 0x00009a5c, 0x00000000, 0x00000000, 0x00058304, 0x00058304, 0x00000000 },
31210 -    { 0x00009a60, 0x00000000, 0x00000000, 0x00058308, 0x00058308, 0x00000000 },
31211 -    { 0x00009a64, 0x00000000, 0x00000000, 0x0005830c, 0x0005830c, 0x00000000 },
31212 -    { 0x00009a68, 0x00000000, 0x00000000, 0x00058380, 0x00058380, 0x00000000 },
31213 -    { 0x00009a6c, 0x00000000, 0x00000000, 0x00058384, 0x00058384, 0x00000000 },
31214 -    { 0x00009a70, 0x00000000, 0x00000000, 0x00068700, 0x00068700, 0x00000000 },
31215 -    { 0x00009a74, 0x00000000, 0x00000000, 0x00068704, 0x00068704, 0x00000000 },
31216 -    { 0x00009a78, 0x00000000, 0x00000000, 0x00068708, 0x00068708, 0x00000000 },
31217 -    { 0x00009a7c, 0x00000000, 0x00000000, 0x0006870c, 0x0006870c, 0x00000000 },
31218 -    { 0x00009a80, 0x00000000, 0x00000000, 0x00068780, 0x00068780, 0x00000000 },
31219 -    { 0x00009a84, 0x00000000, 0x00000000, 0x00068784, 0x00068784, 0x00000000 },
31220 -    { 0x00009a88, 0x00000000, 0x00000000, 0x00078b00, 0x00078b00, 0x00000000 },
31221 -    { 0x00009a8c, 0x00000000, 0x00000000, 0x00078b04, 0x00078b04, 0x00000000 },
31222 -    { 0x00009a90, 0x00000000, 0x00000000, 0x00078b08, 0x00078b08, 0x00000000 },
31223 -    { 0x00009a94, 0x00000000, 0x00000000, 0x00078b0c, 0x00078b0c, 0x00000000 },
31224 -    { 0x00009a98, 0x00000000, 0x00000000, 0x00078b80, 0x00078b80, 0x00000000 },
31225 -    { 0x00009a9c, 0x00000000, 0x00000000, 0x00078b84, 0x00078b84, 0x00000000 },
31226 -    { 0x00009aa0, 0x00000000, 0x00000000, 0x00078b88, 0x00078b88, 0x00000000 },
31227 -    { 0x00009aa4, 0x00000000, 0x00000000, 0x00078b8c, 0x00078b8c, 0x00000000 },
31228 -    { 0x00009aa8, 0x00000000, 0x00000000, 0x00078b90, 0x00078b90, 0x00000000 },
31229 -    { 0x00009aac, 0x00000000, 0x00000000, 0x000caf80, 0x000caf80, 0x00000000 },
31230 -    { 0x00009ab0, 0x00000000, 0x00000000, 0x000caf84, 0x000caf84, 0x00000000 },
31231 -    { 0x00009ab4, 0x00000000, 0x00000000, 0x000caf88, 0x000caf88, 0x00000000 },
31232 -    { 0x00009ab8, 0x00000000, 0x00000000, 0x000caf8c, 0x000caf8c, 0x00000000 },
31233 -    { 0x00009abc, 0x00000000, 0x00000000, 0x000caf90, 0x000caf90, 0x00000000 },
31234 -    { 0x00009ac0, 0x00000000, 0x00000000, 0x000db30c, 0x000db30c, 0x00000000 },
31235 -    { 0x00009ac4, 0x00000000, 0x00000000, 0x000db310, 0x000db310, 0x00000000 },
31236 -    { 0x00009ac8, 0x00000000, 0x00000000, 0x000db384, 0x000db384, 0x00000000 },
31237 -    { 0x00009acc, 0x00000000, 0x00000000, 0x000db388, 0x000db388, 0x00000000 },
31238 -    { 0x00009ad0, 0x00000000, 0x00000000, 0x000db324, 0x000db324, 0x00000000 },
31239 -    { 0x00009ad4, 0x00000000, 0x00000000, 0x000eb704, 0x000eb704, 0x00000000 },
31240 -    { 0x00009ad8, 0x00000000, 0x00000000, 0x000eb6a4, 0x000eb6a4, 0x00000000 },
31241 -    { 0x00009adc, 0x00000000, 0x00000000, 0x000eb6a8, 0x000eb6a8, 0x00000000 },
31242 -    { 0x00009ae0, 0x00000000, 0x00000000, 0x000eb710, 0x000eb710, 0x00000000 },
31243 -    { 0x00009ae4, 0x00000000, 0x00000000, 0x000eb714, 0x000eb714, 0x00000000 },
31244 -    { 0x00009ae8, 0x00000000, 0x00000000, 0x000eb720, 0x000eb720, 0x00000000 },
31245 -    { 0x00009aec, 0x00000000, 0x00000000, 0x000eb724, 0x000eb724, 0x00000000 },
31246 -    { 0x00009af0, 0x00000000, 0x00000000, 0x000eb728, 0x000eb728, 0x00000000 },
31247 -    { 0x00009af4, 0x00000000, 0x00000000, 0x000eb72c, 0x000eb72c, 0x00000000 },
31248 -    { 0x00009af8, 0x00000000, 0x00000000, 0x000eb7a0, 0x000eb7a0, 0x00000000 },
31249 -    { 0x00009afc, 0x00000000, 0x00000000, 0x000eb7a4, 0x000eb7a4, 0x00000000 },
31250 -    { 0x00009b00, 0x00000000, 0x00000000, 0x000eb7a8, 0x000eb7a8, 0x00000000 },
31251 -    { 0x00009b04, 0x00000000, 0x00000000, 0x000eb7b0, 0x000eb7b0, 0x00000000 },
31252 -    { 0x00009b08, 0x00000000, 0x00000000, 0x000eb7b4, 0x000eb7b4, 0x00000000 },
31253 -    { 0x00009b0c, 0x00000000, 0x00000000, 0x000eb7b8, 0x000eb7b8, 0x00000000 },
31254 -    { 0x00009b10, 0x00000000, 0x00000000, 0x000eb7a5, 0x000eb7a5, 0x00000000 },
31255 -    { 0x00009b14, 0x00000000, 0x00000000, 0x000eb7a9, 0x000eb7a9, 0x00000000 },
31256 -    { 0x00009b18, 0x00000000, 0x00000000, 0x000eb7ad, 0x000eb7ad, 0x00000000 },
31257 -    { 0x00009b1c, 0x00000000, 0x00000000, 0x000eb7b1, 0x000eb7b1, 0x00000000 },
31258 -    { 0x00009b20, 0x00000000, 0x00000000, 0x000eb7b5, 0x000eb7b5, 0x00000000 },
31259 -    { 0x00009b24, 0x00000000, 0x00000000, 0x000eb7b9, 0x000eb7b9, 0x00000000 },
31260 -    { 0x00009b28, 0x00000000, 0x00000000, 0x000eb7c5, 0x000eb7c5, 0x00000000 },
31261 -    { 0x00009b2c, 0x00000000, 0x00000000, 0x000eb7c9, 0x000eb7c9, 0x00000000 },
31262 -    { 0x00009b30, 0x00000000, 0x00000000, 0x000eb7d1, 0x000eb7d1, 0x00000000 },
31263 -    { 0x00009b34, 0x00000000, 0x00000000, 0x000eb7d5, 0x000eb7d5, 0x00000000 },
31264 -    { 0x00009b38, 0x00000000, 0x00000000, 0x000eb7d9, 0x000eb7d9, 0x00000000 },
31265 -    { 0x00009b3c, 0x00000000, 0x00000000, 0x000eb7c6, 0x000eb7c6, 0x00000000 },
31266 -    { 0x00009b40, 0x00000000, 0x00000000, 0x000eb7ca, 0x000eb7ca, 0x00000000 },
31267 -    { 0x00009b44, 0x00000000, 0x00000000, 0x000eb7ce, 0x000eb7ce, 0x00000000 },
31268 -    { 0x00009b48, 0x00000000, 0x00000000, 0x000eb7d2, 0x000eb7d2, 0x00000000 },
31269 -    { 0x00009b4c, 0x00000000, 0x00000000, 0x000eb7d6, 0x000eb7d6, 0x00000000 },
31270 -    { 0x00009b50, 0x00000000, 0x00000000, 0x000eb7c3, 0x000eb7c3, 0x00000000 },
31271 -    { 0x00009b54, 0x00000000, 0x00000000, 0x000eb7c7, 0x000eb7c7, 0x00000000 },
31272 -    { 0x00009b58, 0x00000000, 0x00000000, 0x000eb7cb, 0x000eb7cb, 0x00000000 },
31273 -    { 0x00009b5c, 0x00000000, 0x00000000, 0x000eb7cf, 0x000eb7cf, 0x00000000 },
31274 -    { 0x00009b60, 0x00000000, 0x00000000, 0x000eb7d7, 0x000eb7d7, 0x00000000 },
31275 -    { 0x00009b64, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31276 -    { 0x00009b68, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31277 -    { 0x00009b6c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31278 -    { 0x00009b70, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31279 -    { 0x00009b74, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31280 -    { 0x00009b78, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31281 -    { 0x00009b7c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31282 -    { 0x00009b80, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31283 -    { 0x00009b84, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31284 -    { 0x00009b88, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31285 -    { 0x00009b8c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31286 -    { 0x00009b90, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31287 -    { 0x00009b94, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31288 -    { 0x00009b98, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31289 -    { 0x00009b9c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31290 -    { 0x00009ba0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31291 -    { 0x00009ba4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31292 -    { 0x00009ba8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31293 -    { 0x00009bac, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31294 -    { 0x00009bb0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31295 -    { 0x00009bb4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31296 -    { 0x00009bb8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31297 -    { 0x00009bbc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31298 -    { 0x00009bc0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31299 -    { 0x00009bc4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31300 -    { 0x00009bc8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31301 -    { 0x00009bcc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31302 -    { 0x00009bd0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31303 -    { 0x00009bd4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31304 -    { 0x00009bd8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31305 -    { 0x00009bdc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31306 -    { 0x00009be0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31307 -    { 0x00009be4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31308 -    { 0x00009be8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31309 -    { 0x00009bec, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31310 -    { 0x00009bf0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31311 -    { 0x00009bf4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31312 -    { 0x00009bf8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31313 -    { 0x00009bfc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31314 -    { 0x0000aa00, 0x00000000, 0x00000000, 0x00058084, 0x00058084, 0x00000000 },
31315 -    { 0x0000aa04, 0x00000000, 0x00000000, 0x00058088, 0x00058088, 0x00000000 },
31316 -    { 0x0000aa08, 0x00000000, 0x00000000, 0x0005808c, 0x0005808c, 0x00000000 },
31317 -    { 0x0000aa0c, 0x00000000, 0x00000000, 0x00058100, 0x00058100, 0x00000000 },
31318 -    { 0x0000aa10, 0x00000000, 0x00000000, 0x00058104, 0x00058104, 0x00000000 },
31319 -    { 0x0000aa14, 0x00000000, 0x00000000, 0x00058108, 0x00058108, 0x00000000 },
31320 -    { 0x0000aa18, 0x00000000, 0x00000000, 0x0005810c, 0x0005810c, 0x00000000 },
31321 -    { 0x0000aa1c, 0x00000000, 0x00000000, 0x00058110, 0x00058110, 0x00000000 },
31322 -    { 0x0000aa20, 0x00000000, 0x00000000, 0x00058114, 0x00058114, 0x00000000 },
31323 -    { 0x0000aa24, 0x00000000, 0x00000000, 0x00058180, 0x00058180, 0x00000000 },
31324 -    { 0x0000aa28, 0x00000000, 0x00000000, 0x00058184, 0x00058184, 0x00000000 },
31325 -    { 0x0000aa2c, 0x00000000, 0x00000000, 0x00058188, 0x00058188, 0x00000000 },
31326 -    { 0x0000aa30, 0x00000000, 0x00000000, 0x0005818c, 0x0005818c, 0x00000000 },
31327 -    { 0x0000aa34, 0x00000000, 0x00000000, 0x00058190, 0x00058190, 0x00000000 },
31328 -    { 0x0000aa38, 0x00000000, 0x00000000, 0x00058194, 0x00058194, 0x00000000 },
31329 -    { 0x0000aa3c, 0x00000000, 0x00000000, 0x000581a0, 0x000581a0, 0x00000000 },
31330 -    { 0x0000aa40, 0x00000000, 0x00000000, 0x0005820c, 0x0005820c, 0x00000000 },
31331 -    { 0x0000aa44, 0x00000000, 0x00000000, 0x000581a8, 0x000581a8, 0x00000000 },
31332 -    { 0x0000aa48, 0x00000000, 0x00000000, 0x00058284, 0x00058284, 0x00000000 },
31333 -    { 0x0000aa4c, 0x00000000, 0x00000000, 0x00058288, 0x00058288, 0x00000000 },
31334 -    { 0x0000aa50, 0x00000000, 0x00000000, 0x00058224, 0x00058224, 0x00000000 },
31335 -    { 0x0000aa54, 0x00000000, 0x00000000, 0x00058290, 0x00058290, 0x00000000 },
31336 -    { 0x0000aa58, 0x00000000, 0x00000000, 0x00058300, 0x00058300, 0x00000000 },
31337 -    { 0x0000aa5c, 0x00000000, 0x00000000, 0x00058304, 0x00058304, 0x00000000 },
31338 -    { 0x0000aa60, 0x00000000, 0x00000000, 0x00058308, 0x00058308, 0x00000000 },
31339 -    { 0x0000aa64, 0x00000000, 0x00000000, 0x0005830c, 0x0005830c, 0x00000000 },
31340 -    { 0x0000aa68, 0x00000000, 0x00000000, 0x00058380, 0x00058380, 0x00000000 },
31341 -    { 0x0000aa6c, 0x00000000, 0x00000000, 0x00058384, 0x00058384, 0x00000000 },
31342 -    { 0x0000aa70, 0x00000000, 0x00000000, 0x00068700, 0x00068700, 0x00000000 },
31343 -    { 0x0000aa74, 0x00000000, 0x00000000, 0x00068704, 0x00068704, 0x00000000 },
31344 -    { 0x0000aa78, 0x00000000, 0x00000000, 0x00068708, 0x00068708, 0x00000000 },
31345 -    { 0x0000aa7c, 0x00000000, 0x00000000, 0x0006870c, 0x0006870c, 0x00000000 },
31346 -    { 0x0000aa80, 0x00000000, 0x00000000, 0x00068780, 0x00068780, 0x00000000 },
31347 -    { 0x0000aa84, 0x00000000, 0x00000000, 0x00068784, 0x00068784, 0x00000000 },
31348 -    { 0x0000aa88, 0x00000000, 0x00000000, 0x00078b00, 0x00078b00, 0x00000000 },
31349 -    { 0x0000aa8c, 0x00000000, 0x00000000, 0x00078b04, 0x00078b04, 0x00000000 },
31350 -    { 0x0000aa90, 0x00000000, 0x00000000, 0x00078b08, 0x00078b08, 0x00000000 },
31351 -    { 0x0000aa94, 0x00000000, 0x00000000, 0x00078b0c, 0x00078b0c, 0x00000000 },
31352 -    { 0x0000aa98, 0x00000000, 0x00000000, 0x00078b80, 0x00078b80, 0x00000000 },
31353 -    { 0x0000aa9c, 0x00000000, 0x00000000, 0x00078b84, 0x00078b84, 0x00000000 },
31354 -    { 0x0000aaa0, 0x00000000, 0x00000000, 0x00078b88, 0x00078b88, 0x00000000 },
31355 -    { 0x0000aaa4, 0x00000000, 0x00000000, 0x00078b8c, 0x00078b8c, 0x00000000 },
31356 -    { 0x0000aaa8, 0x00000000, 0x00000000, 0x00078b90, 0x00078b90, 0x00000000 },
31357 -    { 0x0000aaac, 0x00000000, 0x00000000, 0x000caf80, 0x000caf80, 0x00000000 },
31358 -    { 0x0000aab0, 0x00000000, 0x00000000, 0x000caf84, 0x000caf84, 0x00000000 },
31359 -    { 0x0000aab4, 0x00000000, 0x00000000, 0x000caf88, 0x000caf88, 0x00000000 },
31360 -    { 0x0000aab8, 0x00000000, 0x00000000, 0x000caf8c, 0x000caf8c, 0x00000000 },
31361 -    { 0x0000aabc, 0x00000000, 0x00000000, 0x000caf90, 0x000caf90, 0x00000000 },
31362 -    { 0x0000aac0, 0x00000000, 0x00000000, 0x000db30c, 0x000db30c, 0x00000000 },
31363 -    { 0x0000aac4, 0x00000000, 0x00000000, 0x000db310, 0x000db310, 0x00000000 },
31364 -    { 0x0000aac8, 0x00000000, 0x00000000, 0x000db384, 0x000db384, 0x00000000 },
31365 -    { 0x0000aacc, 0x00000000, 0x00000000, 0x000db388, 0x000db388, 0x00000000 },
31366 -    { 0x0000aad0, 0x00000000, 0x00000000, 0x000db324, 0x000db324, 0x00000000 },
31367 -    { 0x0000aad4, 0x00000000, 0x00000000, 0x000eb704, 0x000eb704, 0x00000000 },
31368 -    { 0x0000aad8, 0x00000000, 0x00000000, 0x000eb6a4, 0x000eb6a4, 0x00000000 },
31369 -    { 0x0000aadc, 0x00000000, 0x00000000, 0x000eb6a8, 0x000eb6a8, 0x00000000 },
31370 -    { 0x0000aae0, 0x00000000, 0x00000000, 0x000eb710, 0x000eb710, 0x00000000 },
31371 -    { 0x0000aae4, 0x00000000, 0x00000000, 0x000eb714, 0x000eb714, 0x00000000 },
31372 -    { 0x0000aae8, 0x00000000, 0x00000000, 0x000eb720, 0x000eb720, 0x00000000 },
31373 -    { 0x0000aaec, 0x00000000, 0x00000000, 0x000eb724, 0x000eb724, 0x00000000 },
31374 -    { 0x0000aaf0, 0x00000000, 0x00000000, 0x000eb728, 0x000eb728, 0x00000000 },
31375 -    { 0x0000aaf4, 0x00000000, 0x00000000, 0x000eb72c, 0x000eb72c, 0x00000000 },
31376 -    { 0x0000aaf8, 0x00000000, 0x00000000, 0x000eb7a0, 0x000eb7a0, 0x00000000 },
31377 -    { 0x0000aafc, 0x00000000, 0x00000000, 0x000eb7a4, 0x000eb7a4, 0x00000000 },
31378 -    { 0x0000ab00, 0x00000000, 0x00000000, 0x000eb7a8, 0x000eb7a8, 0x00000000 },
31379 -    { 0x0000ab04, 0x00000000, 0x00000000, 0x000eb7b0, 0x000eb7b0, 0x00000000 },
31380 -    { 0x0000ab08, 0x00000000, 0x00000000, 0x000eb7b4, 0x000eb7b4, 0x00000000 },
31381 -    { 0x0000ab0c, 0x00000000, 0x00000000, 0x000eb7b8, 0x000eb7b8, 0x00000000 },
31382 -    { 0x0000ab10, 0x00000000, 0x00000000, 0x000eb7a5, 0x000eb7a5, 0x00000000 },
31383 -    { 0x0000ab14, 0x00000000, 0x00000000, 0x000eb7a9, 0x000eb7a9, 0x00000000 },
31384 -    { 0x0000ab18, 0x00000000, 0x00000000, 0x000eb7ad, 0x000eb7ad, 0x00000000 },
31385 -    { 0x0000ab1c, 0x00000000, 0x00000000, 0x000eb7b1, 0x000eb7b1, 0x00000000 },
31386 -    { 0x0000ab20, 0x00000000, 0x00000000, 0x000eb7b5, 0x000eb7b5, 0x00000000 },
31387 -    { 0x0000ab24, 0x00000000, 0x00000000, 0x000eb7b9, 0x000eb7b9, 0x00000000 },
31388 -    { 0x0000ab28, 0x00000000, 0x00000000, 0x000eb7c5, 0x000eb7c5, 0x00000000 },
31389 -    { 0x0000ab2c, 0x00000000, 0x00000000, 0x000eb7c9, 0x000eb7c9, 0x00000000 },
31390 -    { 0x0000ab30, 0x00000000, 0x00000000, 0x000eb7d1, 0x000eb7d1, 0x00000000 },
31391 -    { 0x0000ab34, 0x00000000, 0x00000000, 0x000eb7d5, 0x000eb7d5, 0x00000000 },
31392 -    { 0x0000ab38, 0x00000000, 0x00000000, 0x000eb7d9, 0x000eb7d9, 0x00000000 },
31393 -    { 0x0000ab3c, 0x00000000, 0x00000000, 0x000eb7c6, 0x000eb7c6, 0x00000000 },
31394 -    { 0x0000ab40, 0x00000000, 0x00000000, 0x000eb7ca, 0x000eb7ca, 0x00000000 },
31395 -    { 0x0000ab44, 0x00000000, 0x00000000, 0x000eb7ce, 0x000eb7ce, 0x00000000 },
31396 -    { 0x0000ab48, 0x00000000, 0x00000000, 0x000eb7d2, 0x000eb7d2, 0x00000000 },
31397 -    { 0x0000ab4c, 0x00000000, 0x00000000, 0x000eb7d6, 0x000eb7d6, 0x00000000 },
31398 -    { 0x0000ab50, 0x00000000, 0x00000000, 0x000eb7c3, 0x000eb7c3, 0x00000000 },
31399 -    { 0x0000ab54, 0x00000000, 0x00000000, 0x000eb7c7, 0x000eb7c7, 0x00000000 },
31400 -    { 0x0000ab58, 0x00000000, 0x00000000, 0x000eb7cb, 0x000eb7cb, 0x00000000 },
31401 -    { 0x0000ab5c, 0x00000000, 0x00000000, 0x000eb7cf, 0x000eb7cf, 0x00000000 },
31402 -    { 0x0000ab60, 0x00000000, 0x00000000, 0x000eb7d7, 0x000eb7d7, 0x00000000 },
31403 -    { 0x0000ab64, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31404 -    { 0x0000ab68, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31405 -    { 0x0000ab6c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31406 -    { 0x0000ab70, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31407 -    { 0x0000ab74, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31408 -    { 0x0000ab78, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31409 -    { 0x0000ab7c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31410 -    { 0x0000ab80, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31411 -    { 0x0000ab84, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31412 -    { 0x0000ab88, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31413 -    { 0x0000ab8c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31414 -    { 0x0000ab90, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31415 -    { 0x0000ab94, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31416 -    { 0x0000ab98, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31417 -    { 0x0000ab9c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31418 -    { 0x0000aba0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31419 -    { 0x0000aba4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31420 -    { 0x0000aba8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31421 -    { 0x0000abac, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31422 -    { 0x0000abb0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31423 -    { 0x0000abb4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31424 -    { 0x0000abb8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31425 -    { 0x0000abbc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31426 -    { 0x0000abc0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31427 -    { 0x0000abc4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31428 -    { 0x0000abc8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31429 -    { 0x0000abcc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31430 -    { 0x0000abd0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31431 -    { 0x0000abd4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31432 -    { 0x0000abd8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31433 -    { 0x0000abdc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31434 -    { 0x0000abe0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31435 -    { 0x0000abe4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31436 -    { 0x0000abe8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31437 -    { 0x0000abec, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31438 -    { 0x0000abf0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31439 -    { 0x0000abf4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31440 -    { 0x0000abf8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31441 -    { 0x0000abfc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
31442 -    { 0x0000a204, 0x00000004, 0x00000004, 0x00000004, 0x00000004, 0x00000004 },
31443 -    { 0x0000a20c, 0x00000014, 0x00000014, 0x0001f000, 0x0001f000, 0x0001f000 },
31444 -    { 0x0000b20c, 0x00000014, 0x00000014, 0x0001f000, 0x0001f000, 0x0001f000 },
31445 -    { 0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a },
31446 -    { 0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000 },
31447 -    { 0x0000a250, 0x0004f000, 0x0004f000, 0x0004a000, 0x0004a000, 0x0004a000 },
31448 -    { 0x0000a358, 0x7999aa02, 0x7999aa02, 0x7999aa0e, 0x7999aa0e, 0x7999aa0e },
31449 -};
31450 -
31451 -static const u_int32_t ar9285Common_9285_1_2[][2] = {
31452 -    { 0x0000000c, 0x00000000 },
31453 -    { 0x00000030, 0x00020045 },
31454 -    { 0x00000034, 0x00000005 },
31455 -    { 0x00000040, 0x00000000 },
31456 -    { 0x00000044, 0x00000008 },
31457 -    { 0x00000048, 0x00000008 },
31458 -    { 0x0000004c, 0x00000010 },
31459 -    { 0x00000050, 0x00000000 },
31460 -    { 0x00000054, 0x0000001f },
31461 -    { 0x00000800, 0x00000000 },
31462 -    { 0x00000804, 0x00000000 },
31463 -    { 0x00000808, 0x00000000 },
31464 -    { 0x0000080c, 0x00000000 },
31465 -    { 0x00000810, 0x00000000 },
31466 -    { 0x00000814, 0x00000000 },
31467 -    { 0x00000818, 0x00000000 },
31468 -    { 0x0000081c, 0x00000000 },
31469 -    { 0x00000820, 0x00000000 },
31470 -    { 0x00000824, 0x00000000 },
31471 -    { 0x00001040, 0x002ffc0f },
31472 -    { 0x00001044, 0x002ffc0f },
31473 -    { 0x00001048, 0x002ffc0f },
31474 -    { 0x0000104c, 0x002ffc0f },
31475 -    { 0x00001050, 0x002ffc0f },
31476 -    { 0x00001054, 0x002ffc0f },
31477 -    { 0x00001058, 0x002ffc0f },
31478 -    { 0x0000105c, 0x002ffc0f },
31479 -    { 0x00001060, 0x002ffc0f },
31480 -    { 0x00001064, 0x002ffc0f },
31481 -    { 0x00001230, 0x00000000 },
31482 -    { 0x00001270, 0x00000000 },
31483 -    { 0x00001038, 0x00000000 },
31484 -    { 0x00001078, 0x00000000 },
31485 -    { 0x000010b8, 0x00000000 },
31486 -    { 0x000010f8, 0x00000000 },
31487 -    { 0x00001138, 0x00000000 },
31488 -    { 0x00001178, 0x00000000 },
31489 -    { 0x000011b8, 0x00000000 },
31490 -    { 0x000011f8, 0x00000000 },
31491 -    { 0x00001238, 0x00000000 },
31492 -    { 0x00001278, 0x00000000 },
31493 -    { 0x000012b8, 0x00000000 },
31494 -    { 0x000012f8, 0x00000000 },
31495 -    { 0x00001338, 0x00000000 },
31496 -    { 0x00001378, 0x00000000 },
31497 -    { 0x000013b8, 0x00000000 },
31498 -    { 0x000013f8, 0x00000000 },
31499 -    { 0x00001438, 0x00000000 },
31500 -    { 0x00001478, 0x00000000 },
31501 -    { 0x000014b8, 0x00000000 },
31502 -    { 0x000014f8, 0x00000000 },
31503 -    { 0x00001538, 0x00000000 },
31504 -    { 0x00001578, 0x00000000 },
31505 -    { 0x000015b8, 0x00000000 },
31506 -    { 0x000015f8, 0x00000000 },
31507 -    { 0x00001638, 0x00000000 },
31508 -    { 0x00001678, 0x00000000 },
31509 -    { 0x000016b8, 0x00000000 },
31510 -    { 0x000016f8, 0x00000000 },
31511 -    { 0x00001738, 0x00000000 },
31512 -    { 0x00001778, 0x00000000 },
31513 -    { 0x000017b8, 0x00000000 },
31514 -    { 0x000017f8, 0x00000000 },
31515 -    { 0x0000103c, 0x00000000 },
31516 -    { 0x0000107c, 0x00000000 },
31517 -    { 0x000010bc, 0x00000000 },
31518 -    { 0x000010fc, 0x00000000 },
31519 -    { 0x0000113c, 0x00000000 },
31520 -    { 0x0000117c, 0x00000000 },
31521 -    { 0x000011bc, 0x00000000 },
31522 -    { 0x000011fc, 0x00000000 },
31523 -    { 0x0000123c, 0x00000000 },
31524 -    { 0x0000127c, 0x00000000 },
31525 -    { 0x000012bc, 0x00000000 },
31526 -    { 0x000012fc, 0x00000000 },
31527 -    { 0x0000133c, 0x00000000 },
31528 -    { 0x0000137c, 0x00000000 },
31529 -    { 0x000013bc, 0x00000000 },
31530 -    { 0x000013fc, 0x00000000 },
31531 -    { 0x0000143c, 0x00000000 },
31532 -    { 0x0000147c, 0x00000000 },
31533 -    { 0x00004030, 0x00000002 },
31534 -    { 0x0000403c, 0x00000002 },
31535 -    { 0x00004024, 0x0000001f },
31536 -    { 0x00004060, 0x00000000 },
31537 -    { 0x00004064, 0x00000000 },
31538 -    { 0x00007010, 0x00000031 },
31539 -    { 0x00007034, 0x00000002 },
31540 -    { 0x00007038, 0x000004c2 },
31541 -    { 0x00008004, 0x00000000 },
31542 -    { 0x00008008, 0x00000000 },
31543 -    { 0x0000800c, 0x00000000 },
31544 -    { 0x00008018, 0x00000700 },
31545 -    { 0x00008020, 0x00000000 },
31546 -    { 0x00008038, 0x00000000 },
31547 -    { 0x0000803c, 0x00000000 },
31548 -    { 0x00008048, 0x00000000 },
31549 -    { 0x00008054, 0x00000000 },
31550 -    { 0x00008058, 0x00000000 },
31551 -    { 0x0000805c, 0x000fc78f },
31552 -    { 0x00008060, 0x0000000f },
31553 -    { 0x00008064, 0x00000000 },
31554 -    { 0x00008070, 0x00000000 },
31555 -    { 0x000080c0, 0x2a80001a },
31556 -    { 0x000080c4, 0x05dc01e0 },
31557 -    { 0x000080c8, 0x1f402710 },
31558 -    { 0x000080cc, 0x01f40000 },
31559 -    { 0x000080d0, 0x00001e00 },
31560 -    { 0x000080d4, 0x00000000 },
31561 -    { 0x000080d8, 0x00400000 },
31562 -    { 0x000080e0, 0xffffffff },
31563 -    { 0x000080e4, 0x0000ffff },
31564 -    { 0x000080e8, 0x003f3f3f },
31565 -    { 0x000080ec, 0x00000000 },
31566 -    { 0x000080f0, 0x00000000 },
31567 -    { 0x000080f4, 0x00000000 },
31568 -    { 0x000080f8, 0x00000000 },
31569 -    { 0x000080fc, 0x00020000 },
31570 -    { 0x00008100, 0x00020000 },
31571 -    { 0x00008104, 0x00000001 },
31572 -    { 0x00008108, 0x00000052 },
31573 -    { 0x0000810c, 0x00000000 },
31574 -    { 0x00008110, 0x00000168 },
31575 -    { 0x00008118, 0x000100aa },
31576 -    { 0x0000811c, 0x00003210 },
31577 -    { 0x00008120, 0x08f04810 },
31578 -    { 0x00008124, 0x00000000 },
31579 -    { 0x00008128, 0x00000000 },
31580 -    { 0x0000812c, 0x00000000 },
31581 -    { 0x00008130, 0x00000000 },
31582 -    { 0x00008134, 0x00000000 },
31583 -    { 0x00008138, 0x00000000 },
31584 -    { 0x0000813c, 0x00000000 },
31585 -    { 0x00008144, 0xffffffff },
31586 -    { 0x00008168, 0x00000000 },
31587 -    { 0x0000816c, 0x00000000 },
31588 -    { 0x00008170, 0x32143320 },
31589 -    { 0x00008174, 0xfaa4fa50 },
31590 -    { 0x00008178, 0x00000100 },
31591 -    { 0x0000817c, 0x00000000 },
31592 -    { 0x000081c0, 0x00000000 },
31593 -    { 0x000081d0, 0x0000320a },
31594 -    { 0x000081ec, 0x00000000 },
31595 -    { 0x000081f0, 0x00000000 },
31596 -    { 0x000081f4, 0x00000000 },
31597 -    { 0x000081f8, 0x00000000 },
31598 -    { 0x000081fc, 0x00000000 },
31599 -    { 0x00008200, 0x00000000 },
31600 -    { 0x00008204, 0x00000000 },
31601 -    { 0x00008208, 0x00000000 },
31602 -    { 0x0000820c, 0x00000000 },
31603 -    { 0x00008210, 0x00000000 },
31604 -    { 0x00008214, 0x00000000 },
31605 -    { 0x00008218, 0x00000000 },
31606 -    { 0x0000821c, 0x00000000 },
31607 -    { 0x00008220, 0x00000000 },
31608 -    { 0x00008224, 0x00000000 },
31609 -    { 0x00008228, 0x00000000 },
31610 -    { 0x0000822c, 0x00000000 },
31611 -    { 0x00008230, 0x00000000 },
31612 -    { 0x00008234, 0x00000000 },
31613 -    { 0x00008238, 0x00000000 },
31614 -    { 0x0000823c, 0x00000000 },
31615 -    { 0x00008240, 0x00100000 },
31616 -    { 0x00008244, 0x0010f400 },
31617 -    { 0x00008248, 0x00000100 },
31618 -    { 0x0000824c, 0x0001e800 },
31619 -    { 0x00008250, 0x00000000 },
31620 -    { 0x00008254, 0x00000000 },
31621 -    { 0x00008258, 0x00000000 },
31622 -    { 0x0000825c, 0x400000ff },
31623 -    { 0x00008260, 0x00080922 },
31624 -    { 0x00008264, 0x88a00010 },
31625 -    { 0x00008270, 0x00000000 },
31626 -    { 0x00008274, 0x40000000 },
31627 -    { 0x00008278, 0x003e4180 },
31628 -    { 0x0000827c, 0x00000000 },
31629 -    { 0x00008284, 0x0000002c },
31630 -    { 0x00008288, 0x0000002c },
31631 -    { 0x0000828c, 0x00000000 },
31632 -    { 0x00008294, 0x00000000 },
31633 -    { 0x00008298, 0x00000000 },
31634 -    { 0x0000829c, 0x00000000 },
31635 -    { 0x00008300, 0x00000040 },
31636 -    { 0x00008314, 0x00000000 },
31637 -    { 0x00008328, 0x00000000 },
31638 -    { 0x0000832c, 0x00000001 },
31639 -    { 0x00008330, 0x00000302 },
31640 -    { 0x00008334, 0x00000e00 },
31641 -    { 0x00008338, 0x00ff0000 },
31642 -    { 0x0000833c, 0x00000000 },
31643 -    { 0x00008340, 0x00010380 },
31644 -    { 0x00008344, 0x00481043 },
31645 -    { 0x00009808, 0x00000000 },
31646 -    { 0x0000980c, 0xafe68e30 },
31647 -    { 0x00009810, 0xfd14e000 },
31648 -    { 0x00009814, 0x9c0a9f6b },
31649 -    { 0x0000981c, 0x00000000 },
31650 -    { 0x0000982c, 0x0000a000 },
31651 -    { 0x00009830, 0x00000000 },
31652 -    { 0x0000983c, 0x00200400 },
31653 -    { 0x0000984c, 0x0040233c },
31654 -    { 0x00009854, 0x00000044 },
31655 -    { 0x00009900, 0x00000000 },
31656 -    { 0x00009904, 0x00000000 },
31657 -    { 0x00009908, 0x00000000 },
31658 -    { 0x0000990c, 0x00000000 },
31659 -    { 0x00009910, 0x01002310 },
31660 -    { 0x0000991c, 0x10000fff },
31661 -    { 0x00009920, 0x04900000 },
31662 -    { 0x00009928, 0x00000001 },
31663 -    { 0x0000992c, 0x00000004 },
31664 -    { 0x00009934, 0x1e1f2022 },
31665 -    { 0x00009938, 0x0a0b0c0d },
31666 -    { 0x0000993c, 0x00000000 },
31667 -    { 0x00009940, 0x14750604 },
31668 -    { 0x00009948, 0x9280c00a },
31669 -    { 0x0000994c, 0x00020028 },
31670 -    { 0x00009954, 0x5f3ca3de },
31671 -    { 0x00009958, 0x2108ecff },
31672 -    { 0x00009968, 0x000003ce },
31673 -    { 0x00009970, 0x192bb514 },
31674 -    { 0x00009974, 0x00000000 },
31675 -    { 0x00009978, 0x00000001 },
31676 -    { 0x0000997c, 0x00000000 },
31677 -    { 0x00009980, 0x00000000 },
31678 -    { 0x00009984, 0x00000000 },
31679 -    { 0x00009988, 0x00000000 },
31680 -    { 0x0000998c, 0x00000000 },
31681 -    { 0x00009990, 0x00000000 },
31682 -    { 0x00009994, 0x00000000 },
31683 -    { 0x00009998, 0x00000000 },
31684 -    { 0x0000999c, 0x00000000 },
31685 -    { 0x000099a0, 0x00000000 },
31686 -    { 0x000099a4, 0x00000001 },
31687 -    { 0x000099a8, 0x201fff00 },
31688 -    { 0x000099ac, 0x2def0400 },
31689 -    { 0x000099b0, 0x03051000 },
31690 -    { 0x000099b4, 0x00000820 },
31691 -    { 0x000099dc, 0x00000000 },
31692 -    { 0x000099e0, 0x00000000 },
31693 -    { 0x000099e4, 0xaaaaaaaa },
31694 -    { 0x000099e8, 0x3c466478 },
31695 -    { 0x000099ec, 0x0cc80caa },
31696 -    { 0x000099f0, 0x00000000 },
31697 -    { 0x0000a208, 0x803e68c8 },
31698 -    { 0x0000a210, 0x4080a333 },
31699 -    { 0x0000a214, 0x00206c10 },
31700 -    { 0x0000a218, 0x009c4060 },
31701 -    { 0x0000a220, 0x01834061 },
31702 -    { 0x0000a224, 0x00000400 },
31703 -    { 0x0000a228, 0x000003b5 },
31704 -    { 0x0000a22c, 0x00000000 },
31705 -    { 0x0000a234, 0x20202020 },
31706 -    { 0x0000a238, 0x20202020 },
31707 -    { 0x0000a244, 0x00000000 },
31708 -    { 0x0000a248, 0xfffffffc },
31709 -    { 0x0000a24c, 0x00000000 },
31710 -    { 0x0000a254, 0x00000000 },
31711 -    { 0x0000a258, 0x0ccb5380 },
31712 -    { 0x0000a25c, 0x15151501 },
31713 -    { 0x0000a260, 0xdfa90f01 },
31714 -    { 0x0000a268, 0x00000000 },
31715 -    { 0x0000a26c, 0x0ebae9e6 },
31716 -    { 0x0000d270, 0x0d820820 },
31717 -    { 0x0000d35c, 0x07ffffef },
31718 -    { 0x0000d360, 0x0fffffe7 },
31719 -    { 0x0000d364, 0x17ffffe5 },
31720 -    { 0x0000d368, 0x1fffffe4 },
31721 -    { 0x0000d36c, 0x37ffffe3 },
31722 -    { 0x0000d370, 0x3fffffe3 },
31723 -    { 0x0000d374, 0x57ffffe3 },
31724 -    { 0x0000d378, 0x5fffffe2 },
31725 -    { 0x0000d37c, 0x7fffffe2 },
31726 -    { 0x0000d380, 0x7f3c7bba },
31727 -    { 0x0000d384, 0xf3307ff0 },
31728 -    { 0x0000a388, 0x0c000000 },
31729 -    { 0x0000a38c, 0x20202020 },
31730 -    { 0x0000a390, 0x20202020 },
31731 -    { 0x0000a39c, 0x00000001 },
31732 -    { 0x0000a3a0, 0x00000000 },
31733 -    { 0x0000a3a4, 0x00000000 },
31734 -    { 0x0000a3a8, 0x00000000 },
31735 -    { 0x0000a3ac, 0x00000000 },
31736 -    { 0x0000a3b0, 0x00000000 },
31737 -    { 0x0000a3b4, 0x00000000 },
31738 -    { 0x0000a3b8, 0x00000000 },
31739 -    { 0x0000a3bc, 0x00000000 },
31740 -    { 0x0000a3c0, 0x00000000 },
31741 -    { 0x0000a3c4, 0x00000000 },
31742 -    { 0x0000a3cc, 0x20202020 },
31743 -    { 0x0000a3d0, 0x20202020 },
31744 -    { 0x0000a3d4, 0x20202020 },
31745 -    { 0x0000a3e4, 0x00000000 },
31746 -    { 0x0000a3e8, 0x18c43433 },
31747 -    { 0x0000a3ec, 0x00f70081 },
31748 -    { 0x00007800, 0x00140000 },
31749 -    { 0x00007804, 0x0e4548d8 },
31750 -    { 0x00007808, 0x54214514 },
31751 -    { 0x0000780c, 0x02025830 },
31752 -    { 0x00007810, 0x71c0d388 },
31753 -    { 0x0000781c, 0x00000000 },
31754 -    { 0x00007824, 0x00d86fff },
31755 -    { 0x0000782c, 0x6e36d97b },
31756 -    { 0x00007834, 0x71400087 },
31757 -    { 0x00007844, 0x000c0db6 },
31758 -    { 0x00007848, 0x6db6246f },
31759 -    { 0x0000784c, 0x6d9b66db },
31760 -    { 0x00007850, 0x6d8c6dba },
31761 -    { 0x00007854, 0x00040000 },
31762 -    { 0x00007858, 0xdb003012 },
31763 -    { 0x0000785c, 0x04924914 },
31764 -    { 0x00007860, 0x21084210 },
31765 -    { 0x00007864, 0xf7d7ffde },
31766 -    { 0x00007868, 0xc2034080 },
31767 -    { 0x00007870, 0x10142c00 },
31768 -};
31769 -
31770 -static const u_int32_t ar9285Modes_high_power_tx_gain_9285_1_2[][6] = {
31771 -    /* Address      5G-HT20     5G-HT40     2G-HT40     2G-HT20     Turbo   */
31772 -    { 0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
31773 -    { 0x0000a304, 0x00000000, 0x00000000, 0x00006200, 0x00006200, 0x00000000 },
31774 -    { 0x0000a308, 0x00000000, 0x00000000, 0x00008201, 0x00008201, 0x00000000 },
31775 -    { 0x0000a30c, 0x00000000, 0x00000000, 0x0000b240, 0x0000b240, 0x00000000 },
31776 -    { 0x0000a310, 0x00000000, 0x00000000, 0x0000d241, 0x0000d241, 0x00000000 },
31777 -    { 0x0000a314, 0x00000000, 0x00000000, 0x0000f600, 0x0000f600, 0x00000000 },
31778 -    { 0x0000a318, 0x00000000, 0x00000000, 0x00012800, 0x00012800, 0x00000000 },
31779 -    { 0x0000a31c, 0x00000000, 0x00000000, 0x00016802, 0x00016802, 0x00000000 },
31780 -    { 0x0000a320, 0x00000000, 0x00000000, 0x0001b805, 0x0001b805, 0x00000000 },
31781 -    { 0x0000a324, 0x00000000, 0x00000000, 0x00021a80, 0x00021a80, 0x00000000 },
31782 -    { 0x0000a328, 0x00000000, 0x00000000, 0x00028b00, 0x00028b00, 0x00000000 },
31783 -    { 0x0000a32c, 0x00000000, 0x00000000, 0x0002ab40, 0x0002ab40, 0x00000000 },
31784 -    { 0x0000a330, 0x00000000, 0x00000000, 0x0002cd80, 0x0002cd80, 0x00000000 },
31785 -    { 0x0000a334, 0x00000000, 0x00000000, 0x00033d82, 0x00033d82, 0x00000000 },
31786 -    { 0x0000a338, 0x0003891e, 0x0003891e, 0x0003891e, 0x0003891e, 0x00000000 },
31787 -    { 0x0000a33c, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x00000000 },
31788 -    { 0x0000a340, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
31789 -    { 0x0000a344, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
31790 -    { 0x0000a348, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
31791 -    { 0x0000a34c, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
31792 -    { 0x0000a350, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
31793 -    { 0x0000a354, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
31794 -    { 0x00007814, 0x924934a8, 0x924934a8, 0x924934a8, 0x924934a8, 0x924934a8 },
31795 -    { 0x00007828, 0x26d2491b, 0x26d2491b, 0x26d2491b, 0x26d2491b, 0x26d2491b },
31796 -    { 0x00007830, 0xedb6d96e, 0xedb6d96e, 0xedb6d96e, 0xedb6d96e, 0xedb6d96e },
31797 -    { 0x00007838, 0xfac68803, 0xfac68803, 0xfac68803, 0xfac68803, 0xfac68803 },
31798 -    { 0x0000783c, 0x0001fffe, 0x0001fffe, 0x0001fffe, 0x0001fffe, 0x0001fffe },
31799 -    { 0x00007840, 0xffeb1a20, 0xffeb1a20, 0xffeb1a20, 0xffeb1a20, 0xffeb1a20 },
31800 -    { 0x0000786c, 0x08609ebe, 0x08609ebe, 0x08609ebe, 0x08609ebe, 0x08609ebe },
31801 -    { 0x00007820, 0x00000c00, 0x00000c00, 0x00000c00, 0x00000c00, 0x00000c00 },
31802 -    { 0x0000a274, 0x0a22a652, 0x0a22a652, 0x0a216652, 0x0a216652, 0x0a22a652 },
31803 -    { 0x0000a278, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7 },
31804 -    { 0x0000a27c, 0x050380e7, 0x050380e7, 0x050380e7, 0x050380e7, 0x050380e7 },
31805 -    { 0x0000a394, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7 },
31806 -    { 0x0000a398, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7 },
31807 -    { 0x0000a3dc, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7 },
31808 -    { 0x0000a3e0, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7 },
31809 -};
31810 -
31811 -static const u_int32_t ar9285Modes_original_tx_gain_9285_1_2[][6] = {
31812 -    /* Address      5G-HT20     5G-HT40     2G-HT40     2G-HT20     Turbo   */
31813 -    { 0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
31814 -    { 0x0000a304, 0x00000000, 0x00000000, 0x00009200, 0x00009200, 0x00000000 },
31815 -    { 0x0000a308, 0x00000000, 0x00000000, 0x00010208, 0x00010208, 0x00000000 },
31816 -    { 0x0000a30c, 0x00000000, 0x00000000, 0x00019608, 0x00019608, 0x00000000 },
31817 -    { 0x0000a310, 0x00000000, 0x00000000, 0x00022618, 0x00022618, 0x00000000 },
31818 -    { 0x0000a314, 0x00000000, 0x00000000, 0x0002a6c9, 0x0002a6c9, 0x00000000 },
31819 -    { 0x0000a318, 0x00000000, 0x00000000, 0x00031710, 0x00031710, 0x00000000 },
31820 -    { 0x0000a31c, 0x00000000, 0x00000000, 0x00035718, 0x00035718, 0x00000000 },
31821 -    { 0x0000a320, 0x00000000, 0x00000000, 0x00038758, 0x00038758, 0x00000000 },
31822 -    { 0x0000a324, 0x00000000, 0x00000000, 0x0003c75a, 0x0003c75a, 0x00000000 },
31823 -    { 0x0000a328, 0x00000000, 0x00000000, 0x0004075c, 0x0004075c, 0x00000000 },
31824 -    { 0x0000a32c, 0x00000000, 0x00000000, 0x0004475e, 0x0004475e, 0x00000000 },
31825 -    { 0x0000a330, 0x00000000, 0x00000000, 0x0004679f, 0x0004679f, 0x00000000 },
31826 -    { 0x0000a334, 0x00000000, 0x00000000, 0x000487df, 0x000487df, 0x00000000 },
31827 -    { 0x0000a338, 0x0003891e, 0x0003891e, 0x0003891e, 0x0003891e, 0x00000000 },
31828 -    { 0x0000a33c, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x00000000 },
31829 -    { 0x0000a340, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
31830 -    { 0x0000a344, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
31831 -    { 0x0000a348, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
31832 -    { 0x0000a34c, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
31833 -    { 0x0000a350, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
31834 -    { 0x0000a354, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
31835 -    { 0x00007814, 0x924934a8, 0x924934a8, 0x924934a8, 0x924934a8, 0x924934a8 },
31836 -    { 0x00007828, 0x26d2491b, 0x26d2491b, 0x26d2491b, 0x26d2491b, 0x26d2491b },
31837 -    { 0x00007830, 0xedb6d96e, 0xedb6d96e, 0xedb6d96e, 0xedb6d96e, 0xedb6d96e },
31838 -    { 0x00007838, 0xfac68801, 0xfac68801, 0xfac68801, 0xfac68801, 0xfac68801 },
31839 -    { 0x0000783c, 0x0001fffe, 0x0001fffe, 0x0001fffe, 0x0001fffe, 0x0001fffe },
31840 -    { 0x00007840, 0xffeb1a20, 0xffeb1a20, 0xffeb1a20, 0xffeb1a20, 0xffeb1a20 },
31841 -    { 0x0000786c, 0x48609eb4, 0x48609eb4, 0x48609eb4, 0x48609eb4, 0x48609eb4 },
31842 -    { 0x00007820, 0x00000c04, 0x00000c04, 0x00000c04, 0x00000c04, 0x00000c04 },
31843 -    { 0x0000a274, 0x0a21c652, 0x0a21c652, 0x0a21a652, 0x0a21a652, 0x0a22a652 },
31844 -    { 0x0000a278, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c },
31845 -    { 0x0000a27c, 0x050e039c, 0x050e039c, 0x050e039c, 0x050e039c, 0x050e039c },
31846 -    { 0x0000a394, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c },
31847 -    { 0x0000a398, 0x0000039c, 0x0000039c, 0x0000039c, 0x0000039c, 0x0000039c },
31848 -    { 0x0000a3dc, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c },
31849 -    { 0x0000a3e0, 0x0000039c, 0x0000039c, 0x0000039c, 0x0000039c, 0x0000039c },
31850 -};
31851 -
31852 -static const u_int32_t ar9285Modes_XE2_0_normal_power[][6] = {
31853 -    { 0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
31854 -    { 0x0000a304, 0x00000000, 0x00000000, 0x00009200, 0x00009200, 0x00000000 },
31855 -    { 0x0000a308, 0x00000000, 0x00000000, 0x00010208, 0x00010208, 0x00000000 },
31856 -    { 0x0000a30c, 0x00000000, 0x00000000, 0x00019608, 0x00019608, 0x00000000 },
31857 -    { 0x0000a310, 0x00000000, 0x00000000, 0x00022618, 0x00022618, 0x00000000 },
31858 -    { 0x0000a314, 0x00000000, 0x00000000, 0x0002a6c9, 0x0002a6c9, 0x00000000 },
31859 -    { 0x0000a318, 0x00000000, 0x00000000, 0x00031710, 0x00031710, 0x00000000 },
31860 -    { 0x0000a31c, 0x00000000, 0x00000000, 0x00035718, 0x00035718, 0x00000000 },
31861 -    { 0x0000a320, 0x00000000, 0x00000000, 0x00038758, 0x00038758, 0x00000000 },
31862 -    { 0x0000a324, 0x00000000, 0x00000000, 0x0003c75a, 0x0003c75a, 0x00000000 },
31863 -    { 0x0000a328, 0x00000000, 0x00000000, 0x0004075c, 0x0004075c, 0x00000000 },
31864 -    { 0x0000a32c, 0x00000000, 0x00000000, 0x0004475e, 0x0004475e, 0x00000000 },
31865 -    { 0x0000a330, 0x00000000, 0x00000000, 0x0004679f, 0x0004679f, 0x00000000 },
31866 -    { 0x0000a334, 0x00000000, 0x00000000, 0x000487df, 0x000487df, 0x00000000 },
31867 -    { 0x0000a338, 0x0003891e, 0x0003891e, 0x0003891e, 0x0003891e, 0x00000000 },
31868 -    { 0x0000a33c, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x00000000 },
31869 -    { 0x0000a340, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
31870 -    { 0x0000a344, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
31871 -    { 0x0000a348, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
31872 -    { 0x0000a34c, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
31873 -    { 0x0000a350, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
31874 -    { 0x0000a354, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
31875 -    { 0x00007814, 0x92497ca8, 0x92497ca8, 0x92497ca8, 0x92497ca8, 0x92497ca8 },
31876 -    { 0x00007828, 0x4ad2491b, 0x4ad2491b, 0x2ad2491b, 0x4ad2491b, 0x4ad2491b },
31877 -    { 0x00007830, 0xedb6da6e, 0xedb6da6e, 0xedb6da6e, 0xedb6da6e, 0xedb6dbae },
31878 -    { 0x00007838, 0xdac71441, 0xdac71441, 0xdac71441, 0xdac71441, 0xdac71441 },
31879 -    { 0x0000783c, 0x2481f6fe, 0x2481f6fe, 0x2481f6fe, 0x2481f6fe, 0x2481f6fe },
31880 -    { 0x00007840, 0xba5f638c, 0xba5f638c, 0xba5f638c, 0xba5f638c, 0xba5f638c },
31881 -    { 0x0000786c, 0x48609eb4, 0x48609eb4, 0x48609eb4, 0x48609eb4, 0x48609eb4 },
31882 -    { 0x00007820, 0x00000c04, 0x00000c04, 0x00000c04, 0x00000c04, 0x00000c04 },
31883 -    { 0x0000a274, 0x0a21c652, 0x0a21c652, 0x0a21a652, 0x0a21a652, 0x0a22a652 },
31884 -    { 0x0000a278, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c },
31885 -    { 0x0000a27c, 0x050e039c, 0x050e039c, 0x050e039c, 0x050e039c, 0x050e039c },
31886 -    { 0x0000a394, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c },
31887 -    { 0x0000a398, 0x0000039c, 0x0000039c, 0x0000039c, 0x0000039c, 0x0000039c },
31888 -    { 0x0000a3dc, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c },
31889 -    { 0x0000a3e0, 0x0000039c, 0x0000039c, 0x0000039c, 0x0000039c, 0x0000039c },
31890 -};
31891 -
31892 -static const u_int32_t ar9285Modes_XE2_0_high_power[][6] = {
31893 -    { 0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
31894 -    { 0x0000a304, 0x00000000, 0x00000000, 0x00006200, 0x00006200, 0x00000000 },
31895 -    { 0x0000a308, 0x00000000, 0x00000000, 0x00008201, 0x00008201, 0x00000000 },
31896 -    { 0x0000a30c, 0x00000000, 0x00000000, 0x0000b240, 0x0000b240, 0x00000000 },
31897 -    { 0x0000a310, 0x00000000, 0x00000000, 0x0000d241, 0x0000d241, 0x00000000 },
31898 -    { 0x0000a314, 0x00000000, 0x00000000, 0x0000f600, 0x0000f600, 0x00000000 },
31899 -    { 0x0000a318, 0x00000000, 0x00000000, 0x00012800, 0x00012800, 0x00000000 },
31900 -    { 0x0000a31c, 0x00000000, 0x00000000, 0x00016802, 0x00016802, 0x00000000 },
31901 -    { 0x0000a320, 0x00000000, 0x00000000, 0x0001b805, 0x0001b805, 0x00000000 },
31902 -    { 0x0000a324, 0x00000000, 0x00000000, 0x00021a80, 0x00021a80, 0x00000000 },
31903 -    { 0x0000a328, 0x00000000, 0x00000000, 0x00028b00, 0x00028b00, 0x00000000 },
31904 -    { 0x0000a32c, 0x00000000, 0x00000000, 0x0002ab40, 0x0002ab40, 0x00000000 },
31905 -    { 0x0000a330, 0x00000000, 0x00000000, 0x0002cd80, 0x0002cd80, 0x00000000 },
31906 -    { 0x0000a334, 0x00000000, 0x00000000, 0x00033d82, 0x00033d82, 0x00000000 },
31907 -    { 0x0000a338, 0x0003891e, 0x0003891e, 0x0003891e, 0x0003891e, 0x00000000 },
31908 -    { 0x0000a33c, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x00000000 },
31909 -    { 0x0000a340, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
31910 -    { 0x0000a344, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
31911 -    { 0x0000a348, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
31912 -    { 0x0000a34c, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
31913 -    { 0x0000a350, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
31914 -    { 0x0000a354, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
31915 -    { 0x00007814, 0x92497ca8, 0x92497ca8, 0x92497ca8, 0x92497ca8, 0x92497ca8 },
31916 -    { 0x00007828, 0x4ad2491b, 0x4ad2491b, 0x2ad2491b, 0x4ad2491b, 0x4ad2491b },
31917 -    { 0x00007830, 0xedb6da6e, 0xedb6da6e, 0xedb6da6e, 0xedb6da6e, 0xedb6da6e },
31918 -    { 0x00007838, 0xdac71443, 0xdac71443, 0xdac71443, 0xdac71443, 0xdac71443 },
31919 -    { 0x0000783c, 0x2481f6fe, 0x2481f6fe, 0x2481f6fe, 0x2481f6fe, 0x2481f6fe },
31920 -    { 0x00007840, 0xba5f638c, 0xba5f638c, 0xba5f638c, 0xba5f638c, 0xba5f638c },
31921 -    { 0x0000786c, 0x08609ebe, 0x08609ebe, 0x08609ebe, 0x08609ebe, 0x08609ebe },
31922 -    { 0x00007820, 0x00000c00, 0x00000c00, 0x00000c00, 0x00000c00, 0x00000c00 },
31923 -    { 0x0000a274, 0x0a22a652, 0x0a22a652, 0x0a216652, 0x0a216652, 0x0a22a652 },
31924 -    { 0x0000a278, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7 },
31925 -    { 0x0000a27c, 0x050380e7, 0x050380e7, 0x050380e7, 0x050380e7, 0x050380e7 },
31926 -    { 0x0000a394, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7 },
31927 -    { 0x0000a398, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7 },
31928 -    { 0x0000a3dc, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7 },
31929 -    { 0x0000a3e0, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7 },
31930 -};
31931 -
31932 -static const u_int32_t ar9285PciePhy_clkreq_always_on_L1_9285_1_2[][2] = {
31933 -    {0x00004040,  0x9248fd00 },
31934 -    {0x00004040,  0x24924924 },
31935 -    {0x00004040,  0xa8000019 },
31936 -    {0x00004040,  0x13160820 },
31937 -    {0x00004040,  0xe5980560 },
31938 -    {0x00004040,  0xc01dcffd },
31939 -    {0x00004040,  0x1aaabe41 },
31940 -    {0x00004040,  0xbe105554 },
31941 -    {0x00004040,  0x00043007 },
31942 -    {0x00004044,  0x00000000 },
31943 -};
31944 -
31945 -static const u_int32_t ar9285PciePhy_clkreq_off_L1_9285_1_2[][2] = {
31946 -    {0x00004040,  0x9248fd00 },
31947 -    {0x00004040,  0x24924924 },
31948 -    {0x00004040,  0xa8000019 },
31949 -    {0x00004040,  0x13160820 },
31950 -    {0x00004040,  0xe5980560 },
31951 -    {0x00004040,  0xc01dcffc },
31952 -    {0x00004040,  0x1aaabe41 },
31953 -    {0x00004040,  0xbe105554 },
31954 -    {0x00004040,  0x00043007 },
31955 -    {0x00004044,  0x00000000 },
31956 -};
31957 -
31958 -/* AR9287 Revision 10 */
31959 -static const u_int32_t ar9287Modes_9287_1_0[][6] = {
31960 -    /* Address      5G-HT20     5G-HT40     2G-HT40     2G-HT20     Turbo   */
31961 -    { 0x00001030, 0x00000000, 0x00000000, 0x000002c0, 0x00000160, 0x000001e0 },
31962 -    { 0x00001070, 0x00000000, 0x00000000, 0x00000318, 0x0000018c, 0x000001e0 },
31963 -    { 0x000010b0, 0x00000000, 0x00000000, 0x00007c70, 0x00003e38, 0x00001180 },
31964 -    { 0x000010f0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008 },
31965 -    { 0x00008014, 0x00000000, 0x00000000, 0x10801600, 0x08400b00, 0x06e006e0 },
31966 -    { 0x0000801c, 0x00000000, 0x00000000, 0x12e00057, 0x12e0002b, 0x0988004f },
31967 -    { 0x00008120, 0x08f04800, 0x08f04800, 0x08f04810, 0x08f04810, 0x08f04810 },
31968 -    { 0x000081d0, 0x00003200, 0x00003200, 0x0000320a, 0x0000320a, 0x0000320a },
31969 -    { 0x00008318, 0x00000000, 0x00000000, 0x00006880, 0x00003440, 0x00006880 },
31970 -    { 0x00009804, 0x00000000, 0x00000000, 0x000003c4, 0x00000300, 0x00000303 },
31971 -    { 0x00009820, 0x00000000, 0x00000000, 0x02020200, 0x02020200, 0x02020200 },
31972 -    { 0x00009824, 0x00000000, 0x00000000, 0x01000e0e, 0x01000e0e, 0x01000e0e },
31973 -    { 0x00009828, 0x00000000, 0x00000000, 0x0a020001, 0x0a020001, 0x0a020001 },
31974 -    { 0x00009834, 0x00000000, 0x00000000, 0x00000e0e, 0x00000e0e, 0x00000e0e },
31975 -    { 0x00009838, 0x00000003, 0x00000003, 0x00000007, 0x00000007, 0x00000007 },
31976 -    { 0x00009840, 0x206a002e, 0x206a002e, 0x206a012e, 0x206a012e, 0x206a012e },
31977 -    { 0x00009844, 0x03720000, 0x03720000, 0x037216a0, 0x037216a0, 0x037216a0 },
31978 -    { 0x00009850, 0x60000000, 0x60000000, 0x6d4000e2, 0x6c4000e2, 0x6c4000e2 },
31979 -    { 0x00009858, 0x7c000d00, 0x7c000d00, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e },
31980 -    { 0x0000985c, 0x3100005e, 0x3100005e, 0x3139605e, 0x31395d5e, 0x31395d5e },
31981 -    { 0x00009860, 0x00058d00, 0x00058d00, 0x00058d20, 0x00058d20, 0x00058d18 },
31982 -    { 0x00009864, 0x00000e00, 0x00000e00, 0x0001ce00, 0x0001ce00, 0x0001ce00 },
31983 -    { 0x00009868, 0x000040c0, 0x000040c0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0 },
31984 -    { 0x0000986c, 0x00000080, 0x00000080, 0x06903881, 0x06903881, 0x06903881 },
31985 -    { 0x00009914, 0x00000000, 0x00000000, 0x00001130, 0x00000898, 0x000007d0 },
31986 -    { 0x00009918, 0x00000000, 0x00000000, 0x00000016, 0x0000000b, 0x00000016 },
31987 -    { 0x00009924, 0xd00a8a01, 0xd00a8a01, 0xd00a8a0d, 0xd00a8a0d, 0xd00a8a0d },
31988 -    { 0x00009944, 0xefbc0000, 0xefbc0000, 0xefbc1010, 0xefbc1010, 0xefbc1010 },
31989 -    { 0x00009960, 0x00000000, 0x00000000, 0x00000010, 0x00000010, 0x00000010 },
31990 -    { 0x0000a960, 0x00000000, 0x00000000, 0x00000010, 0x00000010, 0x00000010 },
31991 -    { 0x00009964, 0x00000000, 0x00000000, 0x00000210, 0x00000210, 0x00000210 },
31992 -    { 0x0000c968, 0x00000200, 0x00000200, 0x000003ce, 0x000003ce, 0x000003ce },
31993 -    { 0x000099b8, 0x00000000, 0x00000000, 0x0000001c, 0x0000001c, 0x0000001c },
31994 -    { 0x000099bc, 0x00000000, 0x00000000, 0x00000c00, 0x00000c00, 0x00000c00 },
31995 -    { 0x000099c0, 0x00000000, 0x00000000, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4 },
31996 -    { 0x0000a204, 0x00000440, 0x00000440, 0x00000444, 0x00000444, 0x00000444 },
31997 -    { 0x0000a20c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
31998 -    { 0x0000b20c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
31999 -    { 0x0000a21c, 0x1803800a, 0x1803800a, 0x1883800a, 0x1883800a, 0x1883800a },
32000 -    { 0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000 },
32001 -    { 0x0000a250, 0x00000000, 0x00000000, 0x0004a000, 0x0004a000, 0x0004a000 },
32002 -    { 0x0000a358, 0x7999aa02, 0x7999aa02, 0x7999aa0e, 0x7999aa0e, 0x7999aa0e },
32003 -    { 0x0000a3d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
32004 -};
32005 -
32006 -static const u_int32_t ar9287Common_9287_1_0[][2] = {
32007 -    { 0x0000000c, 0x00000000 },
32008 -    { 0x00000030, 0x00020015 },
32009 -    { 0x00000034, 0x00000005 },
32010 -    { 0x00000040, 0x00000000 },
32011 -    { 0x00000044, 0x00000008 },
32012 -    { 0x00000048, 0x00000008 },
32013 -    { 0x0000004c, 0x00000010 },
32014 -    { 0x00000050, 0x00000000 },
32015 -    { 0x00000054, 0x0000001f },
32016 -    { 0x00000800, 0x00000000 },
32017 -    { 0x00000804, 0x00000000 },
32018 -    { 0x00000808, 0x00000000 },
32019 -    { 0x0000080c, 0x00000000 },
32020 -    { 0x00000810, 0x00000000 },
32021 -    { 0x00000814, 0x00000000 },
32022 -    { 0x00000818, 0x00000000 },
32023 -    { 0x0000081c, 0x00000000 },
32024 -    { 0x00000820, 0x00000000 },
32025 -    { 0x00000824, 0x00000000 },
32026 -    { 0x00001040, 0x002ffc0f },
32027 -    { 0x00001044, 0x002ffc0f },
32028 -    { 0x00001048, 0x002ffc0f },
32029 -    { 0x0000104c, 0x002ffc0f },
32030 -    { 0x00001050, 0x002ffc0f },
32031 -    { 0x00001054, 0x002ffc0f },
32032 -    { 0x00001058, 0x002ffc0f },
32033 -    { 0x0000105c, 0x002ffc0f },
32034 -    { 0x00001060, 0x002ffc0f },
32035 -    { 0x00001064, 0x002ffc0f },
32036 -    { 0x00001230, 0x00000000 },
32037 -    { 0x00001270, 0x00000000 },
32038 -    { 0x00001038, 0x00000000 },
32039 -    { 0x00001078, 0x00000000 },
32040 -    { 0x000010b8, 0x00000000 },
32041 -    { 0x000010f8, 0x00000000 },
32042 -    { 0x00001138, 0x00000000 },
32043 -    { 0x00001178, 0x00000000 },
32044 -    { 0x000011b8, 0x00000000 },
32045 -    { 0x000011f8, 0x00000000 },
32046 -    { 0x00001238, 0x00000000 },
32047 -    { 0x00001278, 0x00000000 },
32048 -    { 0x000012b8, 0x00000000 },
32049 -    { 0x000012f8, 0x00000000 },
32050 -    { 0x00001338, 0x00000000 },
32051 -    { 0x00001378, 0x00000000 },
32052 -    { 0x000013b8, 0x00000000 },
32053 -    { 0x000013f8, 0x00000000 },
32054 -    { 0x00001438, 0x00000000 },
32055 -    { 0x00001478, 0x00000000 },
32056 -    { 0x000014b8, 0x00000000 },
32057 -    { 0x000014f8, 0x00000000 },
32058 -    { 0x00001538, 0x00000000 },
32059 -    { 0x00001578, 0x00000000 },
32060 -    { 0x000015b8, 0x00000000 },
32061 -    { 0x000015f8, 0x00000000 },
32062 -    { 0x00001638, 0x00000000 },
32063 -    { 0x00001678, 0x00000000 },
32064 -    { 0x000016b8, 0x00000000 },
32065 -    { 0x000016f8, 0x00000000 },
32066 -    { 0x00001738, 0x00000000 },
32067 -    { 0x00001778, 0x00000000 },
32068 -    { 0x000017b8, 0x00000000 },
32069 -    { 0x000017f8, 0x00000000 },
32070 -    { 0x0000103c, 0x00000000 },
32071 -    { 0x0000107c, 0x00000000 },
32072 -    { 0x000010bc, 0x00000000 },
32073 -    { 0x000010fc, 0x00000000 },
32074 -    { 0x0000113c, 0x00000000 },
32075 -    { 0x0000117c, 0x00000000 },
32076 -    { 0x000011bc, 0x00000000 },
32077 -    { 0x000011fc, 0x00000000 },
32078 -    { 0x0000123c, 0x00000000 },
32079 -    { 0x0000127c, 0x00000000 },
32080 -    { 0x000012bc, 0x00000000 },
32081 -    { 0x000012fc, 0x00000000 },
32082 -    { 0x0000133c, 0x00000000 },
32083 -    { 0x0000137c, 0x00000000 },
32084 -    { 0x000013bc, 0x00000000 },
32085 -    { 0x000013fc, 0x00000000 },
32086 -    { 0x0000143c, 0x00000000 },
32087 -    { 0x0000147c, 0x00000000 },
32088 -    { 0x00004030, 0x00000002 },
32089 -    { 0x0000403c, 0x00000002 },
32090 -    { 0x00004024, 0x0000001f },
32091 -    { 0x00004060, 0x00000000 },
32092 -    { 0x00004064, 0x00000000 },
32093 -    { 0x00007010, 0x00000033 },
32094 -    { 0x00007020, 0x00000000 },
32095 -    { 0x00007034, 0x00000002 },
32096 -    { 0x00007038, 0x000004c2 },
32097 -    { 0x00008004, 0x00000000 },
32098 -    { 0x00008008, 0x00000000 },
32099 -    { 0x0000800c, 0x00000000 },
32100 -    { 0x00008018, 0x00000700 },
32101 -    { 0x00008020, 0x00000000 },
32102 -    { 0x00008038, 0x00000000 },
32103 -    { 0x0000803c, 0x00000000 },
32104 -    { 0x00008048, 0x40000000 },
32105 -    { 0x00008054, 0x00000000 },
32106 -    { 0x00008058, 0x00000000 },
32107 -    { 0x0000805c, 0x000fc78f },
32108 -    { 0x00008060, 0x0000000f },
32109 -    { 0x00008064, 0x00000000 },
32110 -    { 0x00008070, 0x00000000 },
32111 -    { 0x000080c0, 0x2a80001a },
32112 -    { 0x000080c4, 0x05dc01e0 },
32113 -    { 0x000080c8, 0x1f402710 },
32114 -    { 0x000080cc, 0x01f40000 },
32115 -    { 0x000080d0, 0x00001e00 },
32116 -    { 0x000080d4, 0x00000000 },
32117 -    { 0x000080d8, 0x00400000 },
32118 -    { 0x000080e0, 0xffffffff },
32119 -    { 0x000080e4, 0x0000ffff },
32120 -    { 0x000080e8, 0x003f3f3f },
32121 -    { 0x000080ec, 0x00000000 },
32122 -    { 0x000080f0, 0x00000000 },
32123 -    { 0x000080f4, 0x00000000 },
32124 -    { 0x000080f8, 0x00000000 },
32125 -    { 0x000080fc, 0x00020000 },
32126 -    { 0x00008100, 0x00020000 },
32127 -    { 0x00008104, 0x00000001 },
32128 -    { 0x00008108, 0x00000052 },
32129 -    { 0x0000810c, 0x00000000 },
32130 -    { 0x00008110, 0x00000168 },
32131 -    { 0x00008118, 0x000100aa },
32132 -    { 0x0000811c, 0x00003210 },
32133 -    { 0x00008124, 0x00000000 },
32134 -    { 0x00008128, 0x00000000 },
32135 -    { 0x0000812c, 0x00000000 },
32136 -    { 0x00008130, 0x00000000 },
32137 -    { 0x00008134, 0x00000000 },
32138 -    { 0x00008138, 0x00000000 },
32139 -    { 0x0000813c, 0x00000000 },
32140 -    { 0x00008144, 0xffffffff },
32141 -    { 0x00008168, 0x00000000 },
32142 -    { 0x0000816c, 0x00000000 },
32143 -    { 0x00008170, 0x18487320 },
32144 -    { 0x00008174, 0xfaa4fa50 },
32145 -    { 0x00008178, 0x00000100 },
32146 -    { 0x0000817c, 0x00000000 },
32147 -    { 0x000081c0, 0x00000000 },
32148 -    { 0x000081c4, 0x00000000 },
32149 -    { 0x000081d4, 0x00000000 },
32150 -    { 0x000081ec, 0x00000000 },
32151 -    { 0x000081f0, 0x00000000 },
32152 -    { 0x000081f4, 0x00000000 },
32153 -    { 0x000081f8, 0x00000000 },
32154 -    { 0x000081fc, 0x00000000 },
32155 -    { 0x00008200, 0x00000000 },
32156 -    { 0x00008204, 0x00000000 },
32157 -    { 0x00008208, 0x00000000 },
32158 -    { 0x0000820c, 0x00000000 },
32159 -    { 0x00008210, 0x00000000 },
32160 -    { 0x00008214, 0x00000000 },
32161 -    { 0x00008218, 0x00000000 },
32162 -    { 0x0000821c, 0x00000000 },
32163 -    { 0x00008220, 0x00000000 },
32164 -    { 0x00008224, 0x00000000 },
32165 -    { 0x00008228, 0x00000000 },
32166 -    { 0x0000822c, 0x00000000 },
32167 -    { 0x00008230, 0x00000000 },
32168 -    { 0x00008234, 0x00000000 },
32169 -    { 0x00008238, 0x00000000 },
32170 -    { 0x0000823c, 0x00000000 },
32171 -    { 0x00008240, 0x00100000 },
32172 -    { 0x00008244, 0x0010f400 },
32173 -    { 0x00008248, 0x00000100 },
32174 -    { 0x0000824c, 0x0001e800 },
32175 -    { 0x00008250, 0x00000000 },
32176 -    { 0x00008254, 0x00000000 },
32177 -    { 0x00008258, 0x00000000 },
32178 -    { 0x0000825c, 0x400000ff },
32179 -    { 0x00008260, 0x00080922 },
32180 -    { 0x00008264, 0xa8a00010 },
32181 -    { 0x00008270, 0x00000000 },
32182 -    { 0x00008274, 0x40000000 },
32183 -    { 0x00008278, 0x003e4180 },
32184 -    { 0x0000827c, 0x00000000 },
32185 -    { 0x00008284, 0x0000002c },
32186 -    { 0x00008288, 0x0000002c },
32187 -    { 0x0000828c, 0x000000ff },
32188 -    { 0x00008294, 0x00000000 },
32189 -    { 0x00008298, 0x00000000 },
32190 -    { 0x0000829c, 0x00000000 },
32191 -    { 0x00008300, 0x00000040 },
32192 -    { 0x00008314, 0x00000000 },
32193 -    { 0x00008328, 0x00000000 },
32194 -    { 0x0000832c, 0x00000007 },
32195 -    { 0x00008330, 0x00000302 },
32196 -    { 0x00008334, 0x00000e00 },
32197 -    { 0x00008338, 0x00ff0000 },
32198 -    { 0x0000833c, 0x00000000 },
32199 -    { 0x00008340, 0x000107ff },
32200 -    { 0x00008344, 0x01c81043 },
32201 -    { 0x00008360, 0xffffffff },
32202 -    { 0x00008364, 0xffffffff },
32203 -    { 0x00008368, 0x00000000 },
32204 -    { 0x00008370, 0x00000000 },
32205 -    { 0x00008374, 0x000000ff },
32206 -    { 0x00008378, 0x00000000 },
32207 -    { 0x0000837c, 0x00000000 },
32208 -    { 0x00008380, 0xffffffff },
32209 -    { 0x00008384, 0xffffffff },
32210 -    { 0x00008390, 0x0fffffff },
32211 -    { 0x00008394, 0x0fffffff },
32212 -    { 0x00008398, 0x00000000 },
32213 -    { 0x0000839c, 0x00000000 },
32214 -    { 0x000083a0, 0x00000000 },
32215 -    { 0x00009808, 0x00000000 },
32216 -    { 0x0000980c, 0xafe68e30 },
32217 -    { 0x00009810, 0xfd14e000 },
32218 -    { 0x00009814, 0x9c0a9f6b },
32219 -    { 0x0000981c, 0x00000000 },
32220 -    { 0x0000982c, 0x0000a000 },
32221 -    { 0x00009830, 0x00000000 },
32222 -    { 0x0000983c, 0x00200400 },
32223 -    { 0x0000984c, 0x0040233c },
32224 -    { 0x0000a84c, 0x0040233c },
32225 -    { 0x00009854, 0x00000044 },
32226 -    { 0x00009900, 0x00000000 },
32227 -    { 0x00009904, 0x00000000 },
32228 -    { 0x00009908, 0x00000000 },
32229 -    { 0x0000990c, 0x00000000 },
32230 -    { 0x00009910, 0x10002310 },
32231 -    { 0x0000991c, 0x10000fff },
32232 -    { 0x00009920, 0x04900000 },
32233 -    { 0x0000a920, 0x04900000 },
32234 -    { 0x00009928, 0x00000001 },
32235 -    { 0x0000992c, 0x00000004 },
32236 -    { 0x00009930, 0x00000000 },
32237 -    { 0x0000a930, 0x00000000 },
32238 -    { 0x00009934, 0x1e1f2022 },
32239 -    { 0x00009938, 0x0a0b0c0d },
32240 -    { 0x0000993c, 0x00000000 },
32241 -    { 0x00009948, 0x9280c00a },
32242 -    { 0x0000994c, 0x00020028 },
32243 -    { 0x00009954, 0x5f3ca3de },
32244 -    { 0x00009958, 0x0108ecff },
32245 -    { 0x00009940, 0x14750604 },
32246 -    { 0x0000c95c, 0x004b6a8e },
32247 -    { 0x00009970, 0x990bb515 },
32248 -    { 0x00009974, 0x00000000 },
32249 -    { 0x00009978, 0x00000001 },
32250 -    { 0x0000997c, 0x00000000 },
32251 -    { 0x000099a0, 0x00000000 },
32252 -    { 0x000099a4, 0x00000001 },
32253 -    { 0x000099a8, 0x201fff00 },
32254 -    { 0x000099ac, 0x0c6f0000 },
32255 -    { 0x000099b0, 0x03051000 },
32256 -    { 0x000099b4, 0x00000820 },
32257 -    { 0x000099c4, 0x06336f77 },
32258 -    { 0x000099c8, 0x6af65329 },
32259 -    { 0x000099cc, 0x08f186c8 },
32260 -    { 0x000099d0, 0x00046384 },
32261 -    { 0x000099dc, 0x00000000 },
32262 -    { 0x000099e0, 0x00000000 },
32263 -    { 0x000099e4, 0xaaaaaaaa },
32264 -    { 0x000099e8, 0x3c466478 },
32265 -    { 0x000099ec, 0x0cc80caa },
32266 -    { 0x000099f0, 0x00000000 },
32267 -    { 0x000099fc, 0x00001042 },
32268 -    { 0x0000a1f4, 0x00fffeff },
32269 -    { 0x0000a1f8, 0x00f5f9ff },
32270 -    { 0x0000a1fc, 0xb79f6427 },
32271 -    { 0x0000a208, 0x803e4788 },
32272 -    { 0x0000a210, 0x4080a333 },
32273 -    { 0x0000a214, 0x40206c10 },
32274 -    { 0x0000a218, 0x009c4060 },
32275 -    { 0x0000a220, 0x01834061 },
32276 -    { 0x0000a224, 0x00000400 },
32277 -    { 0x0000a228, 0x000003b5 },
32278 -    { 0x0000a22c, 0x233f7180 },
32279 -    { 0x0000a234, 0x20202020 },
32280 -    { 0x0000a238, 0x20202020 },
32281 -    { 0x0000a23c, 0x13c889af },
32282 -    { 0x0000a240, 0x38490a20 },
32283 -    { 0x0000a244, 0x00000000 },
32284 -    { 0x0000a248, 0xfffffffc },
32285 -    { 0x0000a24c, 0x00000000 },
32286 -    { 0x0000a254, 0x00000000 },
32287 -    { 0x0000a258, 0x0cdbd380 },
32288 -    { 0x0000a25c, 0x0f0f0f01 },
32289 -    { 0x0000a260, 0xdfa91f01 },
32290 -    { 0x0000a264, 0x00418a11 },
32291 -    { 0x0000b264, 0x00418a11 },
32292 -    { 0x0000a268, 0x00000000 },
32293 -    { 0x0000a26c, 0x0e79e5c6 },
32294 -    { 0x0000b26c, 0x0e79e5c6 },
32295 -    { 0x0000d270, 0x00820820 },
32296 -    { 0x0000a278, 0x1ce739ce },
32297 -    { 0x0000a27c, 0x050701ce },
32298 -    { 0x0000d35c, 0x07ffffef },
32299 -    { 0x0000d360, 0x0fffffe7 },
32300 -    { 0x0000d364, 0x17ffffe5 },
32301 -    { 0x0000d368, 0x1fffffe4 },
32302 -    { 0x0000d36c, 0x37ffffe3 },
32303 -    { 0x0000d370, 0x3fffffe3 },
32304 -    { 0x0000d374, 0x57ffffe3 },
32305 -    { 0x0000d378, 0x5fffffe2 },
32306 -    { 0x0000d37c, 0x7fffffe2 },
32307 -    { 0x0000d380, 0x7f3c7bba },
32308 -    { 0x0000d384, 0xf3307ff0 },
32309 -    { 0x0000a388, 0x0c000000 },
32310 -    { 0x0000a38c, 0x20202020 },
32311 -    { 0x0000a390, 0x20202020 },
32312 -    { 0x0000a394, 0x1ce739ce },
32313 -    { 0x0000a398, 0x000001ce },
32314 -    { 0x0000b398, 0x000001ce },
32315 -    { 0x0000a39c, 0x00000001 },
32316 -    { 0x0000a3c8, 0x00000246 },
32317 -    { 0x0000a3cc, 0x20202020 },
32318 -    { 0x0000a3d0, 0x20202020 },
32319 -    { 0x0000a3d4, 0x20202020 },
32320 -    { 0x0000a3dc, 0x1ce739ce },
32321 -    { 0x0000a3e0, 0x000001ce },
32322 -    { 0x0000a3e4, 0x00000000 },
32323 -    { 0x0000a3e8, 0x18c43433 },
32324 -    { 0x0000a3ec, 0x00f70081 },
32325 -    { 0x0000a3f0, 0x01036a1e },
32326 -    { 0x0000a3f4, 0x00000000 },
32327 -    { 0x0000b3f4, 0x00000000 },
32328 -    { 0x0000a7d8, 0x00000001 },
32329 -    { 0x00007800, 0x00000800 },
32330 -    { 0x00007804, 0x6c35ffb0 },
32331 -    { 0x00007808, 0x6db6c000 },
32332 -    { 0x0000780c, 0x6db6cb30 },
32333 -    { 0x00007810, 0x6db6cb6c },
32334 -    { 0x00007814, 0x0501e200 },
32335 -    { 0x00007818, 0x0094128d },
32336 -    { 0x0000781c, 0x976ee392 },
32337 -    { 0x00007820, 0xf75ff6fc },
32338 -    { 0x00007824, 0x00040000 },
32339 -    { 0x00007828, 0xdb003012 },
32340 -    { 0x0000782c, 0x04924914 },
32341 -    { 0x00007830, 0x21084210 },
32342 -    { 0x00007834, 0x00140000 },
32343 -    { 0x00007838, 0x0e4548d8 },
32344 -    { 0x0000783c, 0x54214514 },
32345 -    { 0x00007840, 0x02025820 },
32346 -    { 0x00007844, 0x71c0d388 },
32347 -    { 0x00007848, 0x934934a8 },
32348 -    { 0x00007850, 0x00000000 },
32349 -    { 0x00007854, 0x00000800 },
32350 -    { 0x00007858, 0x6c35ffb0 },
32351 -    { 0x0000785c, 0x6db6c000 },
32352 -    { 0x00007860, 0x6db6cb2c },
32353 -    { 0x00007864, 0x6db6cb6c },
32354 -    { 0x00007868, 0x0501e200 },
32355 -    { 0x0000786c, 0x0094128d },
32356 -    { 0x00007870, 0x976ee392 },
32357 -    { 0x00007874, 0xf75ff6fc },
32358 -    { 0x00007878, 0x00040000 },
32359 -    { 0x0000787c, 0xdb003012 },
32360 -    { 0x00007880, 0x04924914 },
32361 -    { 0x00007884, 0x21084210 },
32362 -    { 0x00007888, 0x001b6db0 },
32363 -    { 0x0000788c, 0x00376b63 },
32364 -    { 0x00007890, 0x06db6db6 },
32365 -    { 0x00007894, 0x006d8000 },
32366 -    { 0x00007898, 0x48100000 },
32367 -    { 0x0000789c, 0x00000000 },
32368 -    { 0x000078a0, 0x08000000 },
32369 -    { 0x000078a4, 0x0007ffd8 },
32370 -    { 0x000078a8, 0x0007ffd8 },
32371 -    { 0x000078ac, 0x001c0020 },
32372 -    { 0x000078b0, 0x000611eb },
32373 -    { 0x000078b4, 0x40008080 },
32374 -    { 0x000078b8, 0x2a850160 },
32375 -};
32376 -
32377 -static const u_int32_t ar9287Modes_tx_gain_9287_1_0[][6] = {
32378 -    /* Address      5G-HT20     5G-HT40     2G-HT40     2G-HT20     Turbo   */
32379 -    { 0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
32380 -    { 0x0000a304, 0x00000000, 0x00000000, 0x00004002, 0x00004002, 0x00004002 },
32381 -    { 0x0000a308, 0x00000000, 0x00000000, 0x00008004, 0x00008004, 0x00008004 },
32382 -    { 0x0000a30c, 0x00000000, 0x00000000, 0x0000c00a, 0x0000c00a, 0x0000c00a },
32383 -    { 0x0000a310, 0x00000000, 0x00000000, 0x0001000c, 0x0001000c, 0x0001000c },
32384 -    { 0x0000a314, 0x00000000, 0x00000000, 0x0001420b, 0x0001420b, 0x0001420b },
32385 -    { 0x0000a318, 0x00000000, 0x00000000, 0x0001824a, 0x0001824a, 0x0001824a },
32386 -    { 0x0000a31c, 0x00000000, 0x00000000, 0x0001c44a, 0x0001c44a, 0x0001c44a },
32387 -    { 0x0000a320, 0x00000000, 0x00000000, 0x0002064a, 0x0002064a, 0x0002064a },
32388 -    { 0x0000a324, 0x00000000, 0x00000000, 0x0002484a, 0x0002484a, 0x0002484a },
32389 -    { 0x0000a328, 0x00000000, 0x00000000, 0x00028a4a, 0x00028a4a, 0x00028a4a },
32390 -    { 0x0000a32c, 0x00000000, 0x00000000, 0x0002cc4a, 0x0002cc4a, 0x0002cc4a },
32391 -    { 0x0000a330, 0x00000000, 0x00000000, 0x00030e4a, 0x00030e4a, 0x00030e4a },
32392 -    { 0x0000a334, 0x00000000, 0x00000000, 0x00034e8a, 0x00034e8a, 0x00034e8a },
32393 -    { 0x0000a338, 0x00000000, 0x00000000, 0x00038e8c, 0x00038e8c, 0x00038e8c },
32394 -    { 0x0000a33c, 0x00000000, 0x00000000, 0x0003cecc, 0x0003cecc, 0x0003cecc },
32395 -    { 0x0000a340, 0x00000000, 0x00000000, 0x00040ed4, 0x00040ed4, 0x00040ed4 },
32396 -    { 0x0000a344, 0x00000000, 0x00000000, 0x00044edc, 0x00044edc, 0x00044edc },
32397 -    { 0x0000a348, 0x00000000, 0x00000000, 0x00048ede, 0x00048ede, 0x00048ede },
32398 -    { 0x0000a34c, 0x00000000, 0x00000000, 0x0004cf1e, 0x0004cf1e, 0x0004cf1e },
32399 -    { 0x0000a350, 0x00000000, 0x00000000, 0x00050f5e, 0x00050f5e, 0x00050f5e },
32400 -    { 0x0000a354, 0x00000000, 0x00000000, 0x00054f9e, 0x00054f9e, 0x00054f9e },
32401 -    { 0x0000a780, 0x00000000, 0x00000000, 0x00000060, 0x00000060, 0x00000060 },
32402 -    { 0x0000a784, 0x00000000, 0x00000000, 0x00004062, 0x00004062, 0x00004062 },
32403 -    { 0x0000a788, 0x00000000, 0x00000000, 0x00008064, 0x00008064, 0x00008064 },
32404 -    { 0x0000a78c, 0x00000000, 0x00000000, 0x0000c0a4, 0x0000c0a4, 0x0000c0a4 },
32405 -    { 0x0000a790, 0x00000000, 0x00000000, 0x000100b0, 0x000100b0, 0x000100b0 },
32406 -    { 0x0000a794, 0x00000000, 0x00000000, 0x000140b2, 0x000140b2, 0x000140b2 },
32407 -    { 0x0000a798, 0x00000000, 0x00000000, 0x000180b4, 0x000180b4, 0x000180b4 },
32408 -    { 0x0000a79c, 0x00000000, 0x00000000, 0x0001c0f4, 0x0001c0f4, 0x0001c0f4 },
32409 -    { 0x0000a7a0, 0x00000000, 0x00000000, 0x00020134, 0x00020134, 0x00020134 },
32410 -    { 0x0000a7a4, 0x00000000, 0x00000000, 0x000240fe, 0x000240fe, 0x000240fe },
32411 -    { 0x0000a7a8, 0x00000000, 0x00000000, 0x0002813e, 0x0002813e, 0x0002813e },
32412 -    { 0x0000a7ac, 0x00000000, 0x00000000, 0x0002c17e, 0x0002c17e, 0x0002c17e },
32413 -    { 0x0000a7b0, 0x00000000, 0x00000000, 0x000301be, 0x000301be, 0x000301be },
32414 -    { 0x0000a7b4, 0x00000000, 0x00000000, 0x000341fe, 0x000341fe, 0x000341fe },
32415 -    { 0x0000a7b8, 0x00000000, 0x00000000, 0x000341fe, 0x000341fe, 0x000341fe },
32416 -    { 0x0000a7bc, 0x00000000, 0x00000000, 0x000341fe, 0x000341fe, 0x000341fe },
32417 -    { 0x0000a7c0, 0x00000000, 0x00000000, 0x000341fe, 0x000341fe, 0x000341fe },
32418 -    { 0x0000a7c4, 0x00000000, 0x00000000, 0x000341fe, 0x000341fe, 0x000341fe },
32419 -    { 0x0000a7c8, 0x00000000, 0x00000000, 0x000341fe, 0x000341fe, 0x000341fe },
32420 -    { 0x0000a7cc, 0x00000000, 0x00000000, 0x000341fe, 0x000341fe, 0x000341fe },
32421 -    { 0x0000a7d0, 0x00000000, 0x00000000, 0x000341fe, 0x000341fe, 0x000341fe },
32422 -    { 0x0000a7d4, 0x00000000, 0x00000000, 0x000341fe, 0x000341fe, 0x000341fe },
32423 -    { 0x0000a274, 0x0a180000, 0x0a180000, 0x0a1aa000, 0x0a1aa000, 0x0a1aa000 },
32424 -};
32425 -
32426 -
32427 -static const u_int32_t ar9287Modes_rx_gain_9287_1_0[][6] = {
32428 -    /* Address      5G-HT20     5G-HT40     2G-HT40     2G-HT20     Turbo   */
32429 -    { 0x00009a00, 0x00000000, 0x00000000, 0x0000a120, 0x0000a120, 0x0000a120 },
32430 -    { 0x00009a04, 0x00000000, 0x00000000, 0x0000a124, 0x0000a124, 0x0000a124 },
32431 -    { 0x00009a08, 0x00000000, 0x00000000, 0x0000a128, 0x0000a128, 0x0000a128 },
32432 -    { 0x00009a0c, 0x00000000, 0x00000000, 0x0000a12c, 0x0000a12c, 0x0000a12c },
32433 -    { 0x00009a10, 0x00000000, 0x00000000, 0x0000a130, 0x0000a130, 0x0000a130 },
32434 -    { 0x00009a14, 0x00000000, 0x00000000, 0x0000a194, 0x0000a194, 0x0000a194 },
32435 -    { 0x00009a18, 0x00000000, 0x00000000, 0x0000a198, 0x0000a198, 0x0000a198 },
32436 -    { 0x00009a1c, 0x00000000, 0x00000000, 0x0000a20c, 0x0000a20c, 0x0000a20c },
32437 -    { 0x00009a20, 0x00000000, 0x00000000, 0x0000a210, 0x0000a210, 0x0000a210 },
32438 -    { 0x00009a24, 0x00000000, 0x00000000, 0x0000a284, 0x0000a284, 0x0000a284 },
32439 -    { 0x00009a28, 0x00000000, 0x00000000, 0x0000a288, 0x0000a288, 0x0000a288 },
32440 -    { 0x00009a2c, 0x00000000, 0x00000000, 0x0000a28c, 0x0000a28c, 0x0000a28c },
32441 -    { 0x00009a30, 0x00000000, 0x00000000, 0x0000a290, 0x0000a290, 0x0000a290 },
32442 -    { 0x00009a34, 0x00000000, 0x00000000, 0x0000a294, 0x0000a294, 0x0000a294 },
32443 -    { 0x00009a38, 0x00000000, 0x00000000, 0x0000a2a0, 0x0000a2a0, 0x0000a2a0 },
32444 -    { 0x00009a3c, 0x00000000, 0x00000000, 0x0000a2a4, 0x0000a2a4, 0x0000a2a4 },
32445 -    { 0x00009a40, 0x00000000, 0x00000000, 0x0000a2a8, 0x0000a2a8, 0x0000a2a8 },
32446 -    { 0x00009a44, 0x00000000, 0x00000000, 0x0000a2ac, 0x0000a2ac, 0x0000a2ac },
32447 -    { 0x00009a48, 0x00000000, 0x00000000, 0x0000a2b0, 0x0000a2b0, 0x0000a2b0 },
32448 -    { 0x00009a4c, 0x00000000, 0x00000000, 0x0000a2b4, 0x0000a2b4, 0x0000a2b4 },
32449 -    { 0x00009a50, 0x00000000, 0x00000000, 0x0000a2b8, 0x0000a2b8, 0x0000a2b8 },
32450 -    { 0x00009a54, 0x00000000, 0x00000000, 0x0000a2c4, 0x0000a2c4, 0x0000a2c4 },
32451 -    { 0x00009a58, 0x00000000, 0x00000000, 0x0000a708, 0x0000a708, 0x0000a708 },
32452 -    { 0x00009a5c, 0x00000000, 0x00000000, 0x0000a70c, 0x0000a70c, 0x0000a70c },
32453 -    { 0x00009a60, 0x00000000, 0x00000000, 0x0000a710, 0x0000a710, 0x0000a710 },
32454 -    { 0x00009a64, 0x00000000, 0x00000000, 0x0000ab04, 0x0000ab04, 0x0000ab04 },
32455 -    { 0x00009a68, 0x00000000, 0x00000000, 0x0000ab08, 0x0000ab08, 0x0000ab08 },
32456 -    { 0x00009a6c, 0x00000000, 0x00000000, 0x0000ab0c, 0x0000ab0c, 0x0000ab0c },
32457 -    { 0x00009a70, 0x00000000, 0x00000000, 0x0000ab10, 0x0000ab10, 0x0000ab10 },
32458 -    { 0x00009a74, 0x00000000, 0x00000000, 0x0000ab14, 0x0000ab14, 0x0000ab14 },
32459 -    { 0x00009a78, 0x00000000, 0x00000000, 0x0000ab18, 0x0000ab18, 0x0000ab18 },
32460 -    { 0x00009a7c, 0x00000000, 0x00000000, 0x0000ab8c, 0x0000ab8c, 0x0000ab8c },
32461 -    { 0x00009a80, 0x00000000, 0x00000000, 0x0000ab90, 0x0000ab90, 0x0000ab90 },
32462 -    { 0x00009a84, 0x00000000, 0x00000000, 0x0000ab94, 0x0000ab94, 0x0000ab94 },
32463 -    { 0x00009a88, 0x00000000, 0x00000000, 0x0000ab98, 0x0000ab98, 0x0000ab98 },
32464 -    { 0x00009a8c, 0x00000000, 0x00000000, 0x0000aba4, 0x0000aba4, 0x0000aba4 },
32465 -    { 0x00009a90, 0x00000000, 0x00000000, 0x0000aba8, 0x0000aba8, 0x0000aba8 },
32466 -    { 0x00009a94, 0x00000000, 0x00000000, 0x0000cb04, 0x0000cb04, 0x0000cb04 },
32467 -    { 0x00009a98, 0x00000000, 0x00000000, 0x0000cb08, 0x0000cb08, 0x0000cb08 },
32468 -    { 0x00009a9c, 0x00000000, 0x00000000, 0x0000cb0c, 0x0000cb0c, 0x0000cb0c },
32469 -    { 0x00009aa0, 0x00000000, 0x00000000, 0x0000cb10, 0x0000cb10, 0x0000cb10 },
32470 -    { 0x00009aa4, 0x00000000, 0x00000000, 0x0000cb14, 0x0000cb14, 0x0000cb14 },
32471 -    { 0x00009aa8, 0x00000000, 0x00000000, 0x0000cb18, 0x0000cb18, 0x0000cb18 },
32472 -    { 0x00009aac, 0x00000000, 0x00000000, 0x0000cb8c, 0x0000cb8c, 0x0000cb8c },
32473 -    { 0x00009ab0, 0x00000000, 0x00000000, 0x0000cb90, 0x0000cb90, 0x0000cb90 },
32474 -    { 0x00009ab4, 0x00000000, 0x00000000, 0x0000cf18, 0x0000cf18, 0x0000cf18 },
32475 -    { 0x00009ab8, 0x00000000, 0x00000000, 0x0000cf24, 0x0000cf24, 0x0000cf24 },
32476 -    { 0x00009abc, 0x00000000, 0x00000000, 0x0000cf28, 0x0000cf28, 0x0000cf28 },
32477 -    { 0x00009ac0, 0x00000000, 0x00000000, 0x0000d314, 0x0000d314, 0x0000d314 },
32478 -    { 0x00009ac4, 0x00000000, 0x00000000, 0x0000d318, 0x0000d318, 0x0000d318 },
32479 -    { 0x00009ac8, 0x00000000, 0x00000000, 0x0000d38c, 0x0000d38c, 0x0000d38c },
32480 -    { 0x00009acc, 0x00000000, 0x00000000, 0x0000d390, 0x0000d390, 0x0000d390 },
32481 -    { 0x00009ad0, 0x00000000, 0x00000000, 0x0000d394, 0x0000d394, 0x0000d394 },
32482 -    { 0x00009ad4, 0x00000000, 0x00000000, 0x0000d398, 0x0000d398, 0x0000d398 },
32483 -    { 0x00009ad8, 0x00000000, 0x00000000, 0x0000d3a4, 0x0000d3a4, 0x0000d3a4 },
32484 -    { 0x00009adc, 0x00000000, 0x00000000, 0x0000d3a8, 0x0000d3a8, 0x0000d3a8 },
32485 -    { 0x00009ae0, 0x00000000, 0x00000000, 0x0000d3ac, 0x0000d3ac, 0x0000d3ac },
32486 -    { 0x00009ae4, 0x00000000, 0x00000000, 0x0000d3b0, 0x0000d3b0, 0x0000d3b0 },
32487 -    { 0x00009ae8, 0x00000000, 0x00000000, 0x0000f380, 0x0000f380, 0x0000f380 },
32488 -    { 0x00009aec, 0x00000000, 0x00000000, 0x0000f384, 0x0000f384, 0x0000f384 },
32489 -    { 0x00009af0, 0x00000000, 0x00000000, 0x0000f388, 0x0000f388, 0x0000f388 },
32490 -    { 0x00009af4, 0x00000000, 0x00000000, 0x0000f710, 0x0000f710, 0x0000f710 },
32491 -    { 0x00009af8, 0x00000000, 0x00000000, 0x0000f714, 0x0000f714, 0x0000f714 },
32492 -    { 0x00009afc, 0x00000000, 0x00000000, 0x0000f718, 0x0000f718, 0x0000f718 },
32493 -    { 0x00009b00, 0x00000000, 0x00000000, 0x0000fb10, 0x0000fb10, 0x0000fb10 },
32494 -    { 0x00009b04, 0x00000000, 0x00000000, 0x0000fb14, 0x0000fb14, 0x0000fb14 },
32495 -    { 0x00009b08, 0x00000000, 0x00000000, 0x0000fb18, 0x0000fb18, 0x0000fb18 },
32496 -    { 0x00009b0c, 0x00000000, 0x00000000, 0x0000fb8c, 0x0000fb8c, 0x0000fb8c },
32497 -    { 0x00009b10, 0x00000000, 0x00000000, 0x0000fb90, 0x0000fb90, 0x0000fb90 },
32498 -    { 0x00009b14, 0x00000000, 0x00000000, 0x0000fb94, 0x0000fb94, 0x0000fb94 },
32499 -    { 0x00009b18, 0x00000000, 0x00000000, 0x0000ff8c, 0x0000ff8c, 0x0000ff8c },
32500 -    { 0x00009b1c, 0x00000000, 0x00000000, 0x0000ff90, 0x0000ff90, 0x0000ff90 },
32501 -    { 0x00009b20, 0x00000000, 0x00000000, 0x0000ff94, 0x0000ff94, 0x0000ff94 },
32502 -    { 0x00009b24, 0x00000000, 0x00000000, 0x0000ffa0, 0x0000ffa0, 0x0000ffa0 },
32503 -    { 0x00009b28, 0x00000000, 0x00000000, 0x0000ffa4, 0x0000ffa4, 0x0000ffa4 },
32504 -    { 0x00009b2c, 0x00000000, 0x00000000, 0x0000ffa8, 0x0000ffa8, 0x0000ffa8 },
32505 -    { 0x00009b30, 0x00000000, 0x00000000, 0x0000ffac, 0x0000ffac, 0x0000ffac },
32506 -    { 0x00009b34, 0x00000000, 0x00000000, 0x0000ffb0, 0x0000ffb0, 0x0000ffb0 },
32507 -    { 0x00009b38, 0x00000000, 0x00000000, 0x0000ffb4, 0x0000ffb4, 0x0000ffb4 },
32508 -    { 0x00009b3c, 0x00000000, 0x00000000, 0x0000ffa1, 0x0000ffa1, 0x0000ffa1 },
32509 -    { 0x00009b40, 0x00000000, 0x00000000, 0x0000ffa5, 0x0000ffa5, 0x0000ffa5 },
32510 -    { 0x00009b44, 0x00000000, 0x00000000, 0x0000ffa9, 0x0000ffa9, 0x0000ffa9 },
32511 -    { 0x00009b48, 0x00000000, 0x00000000, 0x0000ffad, 0x0000ffad, 0x0000ffad },
32512 -    { 0x00009b4c, 0x00000000, 0x00000000, 0x0000ffb1, 0x0000ffb1, 0x0000ffb1 },
32513 -    { 0x00009b50, 0x00000000, 0x00000000, 0x0000ffb5, 0x0000ffb5, 0x0000ffb5 },
32514 -    { 0x00009b54, 0x00000000, 0x00000000, 0x0000ffb9, 0x0000ffb9, 0x0000ffb9 },
32515 -    { 0x00009b58, 0x00000000, 0x00000000, 0x0000ffc5, 0x0000ffc5, 0x0000ffc5 },
32516 -    { 0x00009b5c, 0x00000000, 0x00000000, 0x0000ffc9, 0x0000ffc9, 0x0000ffc9 },
32517 -    { 0x00009b60, 0x00000000, 0x00000000, 0x0000ffcd, 0x0000ffcd, 0x0000ffcd },
32518 -    { 0x00009b64, 0x00000000, 0x00000000, 0x0000ffd1, 0x0000ffd1, 0x0000ffd1 },
32519 -    { 0x00009b68, 0x00000000, 0x00000000, 0x0000ffd5, 0x0000ffd5, 0x0000ffd5 },
32520 -    { 0x00009b6c, 0x00000000, 0x00000000, 0x0000ffc2, 0x0000ffc2, 0x0000ffc2 },
32521 -    { 0x00009b70, 0x00000000, 0x00000000, 0x0000ffc6, 0x0000ffc6, 0x0000ffc6 },
32522 -    { 0x00009b74, 0x00000000, 0x00000000, 0x0000ffca, 0x0000ffca, 0x0000ffca },
32523 -    { 0x00009b78, 0x00000000, 0x00000000, 0x0000ffce, 0x0000ffce, 0x0000ffce },
32524 -    { 0x00009b7c, 0x00000000, 0x00000000, 0x0000ffd2, 0x0000ffd2, 0x0000ffd2 },
32525 -    { 0x00009b80, 0x00000000, 0x00000000, 0x0000ffd6, 0x0000ffd6, 0x0000ffd6 },
32526 -    { 0x00009b84, 0x00000000, 0x00000000, 0x0000ffda, 0x0000ffda, 0x0000ffda },
32527 -    { 0x00009b88, 0x00000000, 0x00000000, 0x0000ffc7, 0x0000ffc7, 0x0000ffc7 },
32528 -    { 0x00009b8c, 0x00000000, 0x00000000, 0x0000ffcb, 0x0000ffcb, 0x0000ffcb },
32529 -    { 0x00009b90, 0x00000000, 0x00000000, 0x0000ffcf, 0x0000ffcf, 0x0000ffcf },
32530 -    { 0x00009b94, 0x00000000, 0x00000000, 0x0000ffd3, 0x0000ffd3, 0x0000ffd3 },
32531 -    { 0x00009b98, 0x00000000, 0x00000000, 0x0000ffd7, 0x0000ffd7, 0x0000ffd7 },
32532 -    { 0x00009b9c, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32533 -    { 0x00009ba0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32534 -    { 0x00009ba4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32535 -    { 0x00009ba8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32536 -    { 0x00009bac, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32537 -    { 0x00009bb0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32538 -    { 0x00009bb4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32539 -    { 0x00009bb8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32540 -    { 0x00009bbc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32541 -    { 0x00009bc0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32542 -    { 0x00009bc4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32543 -    { 0x00009bc8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32544 -    { 0x00009bcc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32545 -    { 0x00009bd0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32546 -    { 0x00009bd4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32547 -    { 0x00009bd8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32548 -    { 0x00009bdc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32549 -    { 0x00009be0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32550 -    { 0x00009be4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32551 -    { 0x00009be8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32552 -    { 0x00009bec, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32553 -    { 0x00009bf0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32554 -    { 0x00009bf4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32555 -    { 0x00009bf8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32556 -    { 0x00009bfc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32557 -    { 0x0000aa00, 0x00000000, 0x00000000, 0x0000a120, 0x0000a120, 0x0000a120 },
32558 -    { 0x0000aa04, 0x00000000, 0x00000000, 0x0000a124, 0x0000a124, 0x0000a124 },
32559 -    { 0x0000aa08, 0x00000000, 0x00000000, 0x0000a128, 0x0000a128, 0x0000a128 },
32560 -    { 0x0000aa0c, 0x00000000, 0x00000000, 0x0000a12c, 0x0000a12c, 0x0000a12c },
32561 -    { 0x0000aa10, 0x00000000, 0x00000000, 0x0000a130, 0x0000a130, 0x0000a130 },
32562 -    { 0x0000aa14, 0x00000000, 0x00000000, 0x0000a194, 0x0000a194, 0x0000a194 },
32563 -    { 0x0000aa18, 0x00000000, 0x00000000, 0x0000a198, 0x0000a198, 0x0000a198 },
32564 -    { 0x0000aa1c, 0x00000000, 0x00000000, 0x0000a20c, 0x0000a20c, 0x0000a20c },
32565 -    { 0x0000aa20, 0x00000000, 0x00000000, 0x0000a210, 0x0000a210, 0x0000a210 },
32566 -    { 0x0000aa24, 0x00000000, 0x00000000, 0x0000a284, 0x0000a284, 0x0000a284 },
32567 -    { 0x0000aa28, 0x00000000, 0x00000000, 0x0000a288, 0x0000a288, 0x0000a288 },
32568 -    { 0x0000aa2c, 0x00000000, 0x00000000, 0x0000a28c, 0x0000a28c, 0x0000a28c },
32569 -    { 0x0000aa30, 0x00000000, 0x00000000, 0x0000a290, 0x0000a290, 0x0000a290 },
32570 -    { 0x0000aa34, 0x00000000, 0x00000000, 0x0000a294, 0x0000a294, 0x0000a294 },
32571 -    { 0x0000aa38, 0x00000000, 0x00000000, 0x0000a2a0, 0x0000a2a0, 0x0000a2a0 },
32572 -    { 0x0000aa3c, 0x00000000, 0x00000000, 0x0000a2a4, 0x0000a2a4, 0x0000a2a4 },
32573 -    { 0x0000aa40, 0x00000000, 0x00000000, 0x0000a2a8, 0x0000a2a8, 0x0000a2a8 },
32574 -    { 0x0000aa44, 0x00000000, 0x00000000, 0x0000a2ac, 0x0000a2ac, 0x0000a2ac },
32575 -    { 0x0000aa48, 0x00000000, 0x00000000, 0x0000a2b0, 0x0000a2b0, 0x0000a2b0 },
32576 -    { 0x0000aa4c, 0x00000000, 0x00000000, 0x0000a2b4, 0x0000a2b4, 0x0000a2b4 },
32577 -    { 0x0000aa50, 0x00000000, 0x00000000, 0x0000a2b8, 0x0000a2b8, 0x0000a2b8 },
32578 -    { 0x0000aa54, 0x00000000, 0x00000000, 0x0000a2c4, 0x0000a2c4, 0x0000a2c4 },
32579 -    { 0x0000aa58, 0x00000000, 0x00000000, 0x0000a708, 0x0000a708, 0x0000a708 },
32580 -    { 0x0000aa5c, 0x00000000, 0x00000000, 0x0000a70c, 0x0000a70c, 0x0000a70c },
32581 -    { 0x0000aa60, 0x00000000, 0x00000000, 0x0000a710, 0x0000a710, 0x0000a710 },
32582 -    { 0x0000aa64, 0x00000000, 0x00000000, 0x0000ab04, 0x0000ab04, 0x0000ab04 },
32583 -    { 0x0000aa68, 0x00000000, 0x00000000, 0x0000ab08, 0x0000ab08, 0x0000ab08 },
32584 -    { 0x0000aa6c, 0x00000000, 0x00000000, 0x0000ab0c, 0x0000ab0c, 0x0000ab0c },
32585 -    { 0x0000aa70, 0x00000000, 0x00000000, 0x0000ab10, 0x0000ab10, 0x0000ab10 },
32586 -    { 0x0000aa74, 0x00000000, 0x00000000, 0x0000ab14, 0x0000ab14, 0x0000ab14 },
32587 -    { 0x0000aa78, 0x00000000, 0x00000000, 0x0000ab18, 0x0000ab18, 0x0000ab18 },
32588 -    { 0x0000aa7c, 0x00000000, 0x00000000, 0x0000ab8c, 0x0000ab8c, 0x0000ab8c },
32589 -    { 0x0000aa80, 0x00000000, 0x00000000, 0x0000ab90, 0x0000ab90, 0x0000ab90 },
32590 -    { 0x0000aa84, 0x00000000, 0x00000000, 0x0000ab94, 0x0000ab94, 0x0000ab94 },
32591 -    { 0x0000aa88, 0x00000000, 0x00000000, 0x0000ab98, 0x0000ab98, 0x0000ab98 },
32592 -    { 0x0000aa8c, 0x00000000, 0x00000000, 0x0000aba4, 0x0000aba4, 0x0000aba4 },
32593 -    { 0x0000aa90, 0x00000000, 0x00000000, 0x0000aba8, 0x0000aba8, 0x0000aba8 },
32594 -    { 0x0000aa94, 0x00000000, 0x00000000, 0x0000cb04, 0x0000cb04, 0x0000cb04 },
32595 -    { 0x0000aa98, 0x00000000, 0x00000000, 0x0000cb08, 0x0000cb08, 0x0000cb08 },
32596 -    { 0x0000aa9c, 0x00000000, 0x00000000, 0x0000cb0c, 0x0000cb0c, 0x0000cb0c },
32597 -    { 0x0000aaa0, 0x00000000, 0x00000000, 0x0000cb10, 0x0000cb10, 0x0000cb10 },
32598 -    { 0x0000aaa4, 0x00000000, 0x00000000, 0x0000cb14, 0x0000cb14, 0x0000cb14 },
32599 -    { 0x0000aaa8, 0x00000000, 0x00000000, 0x0000cb18, 0x0000cb18, 0x0000cb18 },
32600 -    { 0x0000aaac, 0x00000000, 0x00000000, 0x0000cb8c, 0x0000cb8c, 0x0000cb8c },
32601 -    { 0x0000aab0, 0x00000000, 0x00000000, 0x0000cb90, 0x0000cb90, 0x0000cb90 },
32602 -    { 0x0000aab4, 0x00000000, 0x00000000, 0x0000cf18, 0x0000cf18, 0x0000cf18 },
32603 -    { 0x0000aab8, 0x00000000, 0x00000000, 0x0000cf24, 0x0000cf24, 0x0000cf24 },
32604 -    { 0x0000aabc, 0x00000000, 0x00000000, 0x0000cf28, 0x0000cf28, 0x0000cf28 },
32605 -    { 0x0000aac0, 0x00000000, 0x00000000, 0x0000d314, 0x0000d314, 0x0000d314 },
32606 -    { 0x0000aac4, 0x00000000, 0x00000000, 0x0000d318, 0x0000d318, 0x0000d318 },
32607 -    { 0x0000aac8, 0x00000000, 0x00000000, 0x0000d38c, 0x0000d38c, 0x0000d38c },
32608 -    { 0x0000aacc, 0x00000000, 0x00000000, 0x0000d390, 0x0000d390, 0x0000d390 },
32609 -    { 0x0000aad0, 0x00000000, 0x00000000, 0x0000d394, 0x0000d394, 0x0000d394 },
32610 -    { 0x0000aad4, 0x00000000, 0x00000000, 0x0000d398, 0x0000d398, 0x0000d398 },
32611 -    { 0x0000aad8, 0x00000000, 0x00000000, 0x0000d3a4, 0x0000d3a4, 0x0000d3a4 },
32612 -    { 0x0000aadc, 0x00000000, 0x00000000, 0x0000d3a8, 0x0000d3a8, 0x0000d3a8 },
32613 -    { 0x0000aae0, 0x00000000, 0x00000000, 0x0000d3ac, 0x0000d3ac, 0x0000d3ac },
32614 -    { 0x0000aae4, 0x00000000, 0x00000000, 0x0000d3b0, 0x0000d3b0, 0x0000d3b0 },
32615 -    { 0x0000aae8, 0x00000000, 0x00000000, 0x0000f380, 0x0000f380, 0x0000f380 },
32616 -    { 0x0000aaec, 0x00000000, 0x00000000, 0x0000f384, 0x0000f384, 0x0000f384 },
32617 -    { 0x0000aaf0, 0x00000000, 0x00000000, 0x0000f388, 0x0000f388, 0x0000f388 },
32618 -    { 0x0000aaf4, 0x00000000, 0x00000000, 0x0000f710, 0x0000f710, 0x0000f710 },
32619 -    { 0x0000aaf8, 0x00000000, 0x00000000, 0x0000f714, 0x0000f714, 0x0000f714 },
32620 -    { 0x0000aafc, 0x00000000, 0x00000000, 0x0000f718, 0x0000f718, 0x0000f718 },
32621 -    { 0x0000ab00, 0x00000000, 0x00000000, 0x0000fb10, 0x0000fb10, 0x0000fb10 },
32622 -    { 0x0000ab04, 0x00000000, 0x00000000, 0x0000fb14, 0x0000fb14, 0x0000fb14 },
32623 -    { 0x0000ab08, 0x00000000, 0x00000000, 0x0000fb18, 0x0000fb18, 0x0000fb18 },
32624 -    { 0x0000ab0c, 0x00000000, 0x00000000, 0x0000fb8c, 0x0000fb8c, 0x0000fb8c },
32625 -    { 0x0000ab10, 0x00000000, 0x00000000, 0x0000fb90, 0x0000fb90, 0x0000fb90 },
32626 -    { 0x0000ab14, 0x00000000, 0x00000000, 0x0000fb94, 0x0000fb94, 0x0000fb94 },
32627 -    { 0x0000ab18, 0x00000000, 0x00000000, 0x0000ff8c, 0x0000ff8c, 0x0000ff8c },
32628 -    { 0x0000ab1c, 0x00000000, 0x00000000, 0x0000ff90, 0x0000ff90, 0x0000ff90 },
32629 -    { 0x0000ab20, 0x00000000, 0x00000000, 0x0000ff94, 0x0000ff94, 0x0000ff94 },
32630 -    { 0x0000ab24, 0x00000000, 0x00000000, 0x0000ffa0, 0x0000ffa0, 0x0000ffa0 },
32631 -    { 0x0000ab28, 0x00000000, 0x00000000, 0x0000ffa4, 0x0000ffa4, 0x0000ffa4 },
32632 -    { 0x0000ab2c, 0x00000000, 0x00000000, 0x0000ffa8, 0x0000ffa8, 0x0000ffa8 },
32633 -    { 0x0000ab30, 0x00000000, 0x00000000, 0x0000ffac, 0x0000ffac, 0x0000ffac },
32634 -    { 0x0000ab34, 0x00000000, 0x00000000, 0x0000ffb0, 0x0000ffb0, 0x0000ffb0 },
32635 -    { 0x0000ab38, 0x00000000, 0x00000000, 0x0000ffb4, 0x0000ffb4, 0x0000ffb4 },
32636 -    { 0x0000ab3c, 0x00000000, 0x00000000, 0x0000ffa1, 0x0000ffa1, 0x0000ffa1 },
32637 -    { 0x0000ab40, 0x00000000, 0x00000000, 0x0000ffa5, 0x0000ffa5, 0x0000ffa5 },
32638 -    { 0x0000ab44, 0x00000000, 0x00000000, 0x0000ffa9, 0x0000ffa9, 0x0000ffa9 },
32639 -    { 0x0000ab48, 0x00000000, 0x00000000, 0x0000ffad, 0x0000ffad, 0x0000ffad },
32640 -    { 0x0000ab4c, 0x00000000, 0x00000000, 0x0000ffb1, 0x0000ffb1, 0x0000ffb1 },
32641 -    { 0x0000ab50, 0x00000000, 0x00000000, 0x0000ffb5, 0x0000ffb5, 0x0000ffb5 },
32642 -    { 0x0000ab54, 0x00000000, 0x00000000, 0x0000ffb9, 0x0000ffb9, 0x0000ffb9 },
32643 -    { 0x0000ab58, 0x00000000, 0x00000000, 0x0000ffc5, 0x0000ffc5, 0x0000ffc5 },
32644 -    { 0x0000ab5c, 0x00000000, 0x00000000, 0x0000ffc9, 0x0000ffc9, 0x0000ffc9 },
32645 -    { 0x0000ab60, 0x00000000, 0x00000000, 0x0000ffcd, 0x0000ffcd, 0x0000ffcd },
32646 -    { 0x0000ab64, 0x00000000, 0x00000000, 0x0000ffd1, 0x0000ffd1, 0x0000ffd1 },
32647 -    { 0x0000ab68, 0x00000000, 0x00000000, 0x0000ffd5, 0x0000ffd5, 0x0000ffd5 },
32648 -    { 0x0000ab6c, 0x00000000, 0x00000000, 0x0000ffc2, 0x0000ffc2, 0x0000ffc2 },
32649 -    { 0x0000ab70, 0x00000000, 0x00000000, 0x0000ffc6, 0x0000ffc6, 0x0000ffc6 },
32650 -    { 0x0000ab74, 0x00000000, 0x00000000, 0x0000ffca, 0x0000ffca, 0x0000ffca },
32651 -    { 0x0000ab78, 0x00000000, 0x00000000, 0x0000ffce, 0x0000ffce, 0x0000ffce },
32652 -    { 0x0000ab7c, 0x00000000, 0x00000000, 0x0000ffd2, 0x0000ffd2, 0x0000ffd2 },
32653 -    { 0x0000ab80, 0x00000000, 0x00000000, 0x0000ffd6, 0x0000ffd6, 0x0000ffd6 },
32654 -    { 0x0000ab84, 0x00000000, 0x00000000, 0x0000ffda, 0x0000ffda, 0x0000ffda },
32655 -    { 0x0000ab88, 0x00000000, 0x00000000, 0x0000ffc7, 0x0000ffc7, 0x0000ffc7 },
32656 -    { 0x0000ab8c, 0x00000000, 0x00000000, 0x0000ffcb, 0x0000ffcb, 0x0000ffcb },
32657 -    { 0x0000ab90, 0x00000000, 0x00000000, 0x0000ffcf, 0x0000ffcf, 0x0000ffcf },
32658 -    { 0x0000ab94, 0x00000000, 0x00000000, 0x0000ffd3, 0x0000ffd3, 0x0000ffd3 },
32659 -    { 0x0000ab98, 0x00000000, 0x00000000, 0x0000ffd7, 0x0000ffd7, 0x0000ffd7 },
32660 -    { 0x0000ab9c, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32661 -    { 0x0000aba0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32662 -    { 0x0000aba4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32663 -    { 0x0000aba8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32664 -    { 0x0000abac, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32665 -    { 0x0000abb0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32666 -    { 0x0000abb4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32667 -    { 0x0000abb8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32668 -    { 0x0000abbc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32669 -    { 0x0000abc0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32670 -    { 0x0000abc4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32671 -    { 0x0000abc8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32672 -    { 0x0000abcc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32673 -    { 0x0000abd0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32674 -    { 0x0000abd4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32675 -    { 0x0000abd8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32676 -    { 0x0000abdc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32677 -    { 0x0000abe0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32678 -    { 0x0000abe4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32679 -    { 0x0000abe8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32680 -    { 0x0000abec, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32681 -    { 0x0000abf0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32682 -    { 0x0000abf4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32683 -    { 0x0000abf8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32684 -    { 0x0000abfc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
32685 -    { 0x00009848, 0x00000000, 0x00000000, 0x00001067, 0x00001067, 0x00001067 },
32686 -    { 0x0000a848, 0x00000000, 0x00000000, 0x00001067, 0x00001067, 0x00001067 },
32687 -};
32688 -
32689 -static const u_int32_t ar9287PciePhy_clkreq_always_on_L1_9287_1_0[][2] = {
32690 -    {0x00004040,  0x9248fd00 },
32691 -    {0x00004040,  0x24924924 },
32692 -    {0x00004040,  0xa8000019 },
32693 -    {0x00004040,  0x13160820 },
32694 -    {0x00004040,  0xe5980560 },
32695 -    {0x00004040,  0xc01dcffd },
32696 -    {0x00004040,  0x1aaabe41 },
32697 -    {0x00004040,  0xbe105554 },
32698 -    {0x00004040,  0x00043007 },
32699 -    {0x00004044,  0x00000000 },
32700 -};
32701 -
32702 -static const u_int32_t ar9287PciePhy_clkreq_off_L1_9287_1_0[][2] = {
32703 -    {0x00004040,  0x9248fd00 },
32704 -    {0x00004040,  0x24924924 },
32705 -    {0x00004040,  0xa8000019 },
32706 -    {0x00004040,  0x13160820 },
32707 -    {0x00004040,  0xe5980560 },
32708 -    {0x00004040,  0xc01dcffc },
32709 -    {0x00004040,  0x1aaabe41 },
32710 -    {0x00004040,  0xbe105554 },
32711 -    {0x00004040,  0x00043007 },
32712 -    {0x00004044,  0x00000000 },
32713 -};
32714 -
32715 -/* AR9287 Revision 11 */
32716 -
32717 -static const u_int32_t ar9287Modes_9287_1_1[][6] = {
32718 -    /* Address      5G-HT20     5G-HT40     2G-HT40     2G-HT20     Turbo   */
32719 -    { 0x00001030, 0x00000000, 0x00000000, 0x000002c0, 0x00000160, 0x000001e0 },
32720 -    { 0x00001070, 0x00000000, 0x00000000, 0x00000318, 0x0000018c, 0x000001e0 },
32721 -    { 0x000010b0, 0x00000000, 0x00000000, 0x00007c70, 0x00003e38, 0x00001180 },
32722 -    { 0x000010f0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008 },
32723 -    { 0x00008014, 0x00000000, 0x00000000, 0x10801600, 0x08400b00, 0x06e006e0 },
32724 -    { 0x0000801c, 0x00000000, 0x00000000, 0x12e00057, 0x12e0002b, 0x0988004f },
32725 -    { 0x00008120, 0x08f04800, 0x08f04800, 0x08f04810, 0x08f04810, 0x08f04810 },
32726 -    { 0x000081d0, 0x00003200, 0x00003200, 0x0000320a, 0x0000320a, 0x0000320a },
32727 -    { 0x00008318, 0x00000000, 0x00000000, 0x00006880, 0x00003440, 0x00006880 },
32728 -    { 0x00009804, 0x00000000, 0x00000000, 0x000003c4, 0x00000300, 0x00000303 },
32729 -    { 0x00009820, 0x00000000, 0x00000000, 0x02020200, 0x02020200, 0x02020200 },
32730 -    { 0x00009824, 0x00000000, 0x00000000, 0x01000e0e, 0x01000e0e, 0x01000e0e },
32731 -    { 0x00009828, 0x00000000, 0x00000000, 0x3a020001, 0x3a020001, 0x3a020001 },
32732 -    { 0x00009834, 0x00000000, 0x00000000, 0x00000e0e, 0x00000e0e, 0x00000e0e },
32733 -    { 0x00009838, 0x00000003, 0x00000003, 0x00000007, 0x00000007, 0x00000007 },
32734 -    { 0x00009840, 0x206a002e, 0x206a002e, 0x206a012e, 0x206a012e, 0x206a012e },
32735 -    { 0x00009844, 0x03720000, 0x03720000, 0x037216a0, 0x037216a0, 0x037216a0 },
32736 -    { 0x00009850, 0x60000000, 0x60000000, 0x6d4000e2, 0x6c4000e2, 0x6c4000e2 },
32737 -    { 0x00009858, 0x7c000d00, 0x7c000d00, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e },
32738 -    { 0x0000985c, 0x3100005e, 0x3100005e, 0x3139605e, 0x31395d5e, 0x31395d5e },
32739 -    { 0x00009860, 0x00058d00, 0x00058d00, 0x00058d20, 0x00058d20, 0x00058d18 },
32740 -    { 0x00009864, 0x00000e00, 0x00000e00, 0x0001ce00, 0x0001ce00, 0x0001ce00 },
32741 -    { 0x00009868, 0x000040c0, 0x000040c0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0 },
32742 -    { 0x0000986c, 0x00000080, 0x00000080, 0x06903881, 0x06903881, 0x06903881 },
32743 -    { 0x00009914, 0x00000000, 0x00000000, 0x00001130, 0x00000898, 0x000007d0 },
32744 -    { 0x00009918, 0x00000000, 0x00000000, 0x00000016, 0x0000000b, 0x00000016 },
32745 -    { 0x00009924, 0xd00a8a01, 0xd00a8a01, 0xd00a8a0d, 0xd00a8a0d, 0xd00a8a0d },
32746 -    { 0x00009944, 0xefbc0000, 0xefbc0000, 0xefbc1010, 0xefbc1010, 0xefbc1010 },
32747 -    { 0x00009960, 0x00000000, 0x00000000, 0x00000010, 0x00000010, 0x00000010 },
32748 -    { 0x0000a960, 0x00000000, 0x00000000, 0x00000010, 0x00000010, 0x00000010 },
32749 -    { 0x00009964, 0x00000000, 0x00000000, 0x00000210, 0x00000210, 0x00000210 },
32750 -    { 0x0000c968, 0x00000200, 0x00000200, 0x000003ce, 0x000003ce, 0x000003ce },
32751 -    { 0x000099b8, 0x00000000, 0x00000000, 0x0000001c, 0x0000001c, 0x0000001c },
32752 -    { 0x000099bc, 0x00000000, 0x00000000, 0x00000c00, 0x00000c00, 0x00000c00 },
32753 -    { 0x000099c0, 0x00000000, 0x00000000, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4 },
32754 -    { 0x0000a204, 0x00000440, 0x00000440, 0x00000444, 0x00000444, 0x00000444 },
32755 -    { 0x0000a20c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
32756 -    { 0x0000b20c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
32757 -    { 0x0000a21c, 0x1803800a, 0x1803800a, 0x1883800a, 0x1883800a, 0x1883800a },
32758 -    { 0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000 },
32759 -    { 0x0000a250, 0x00000000, 0x00000000, 0x0004a000, 0x0004a000, 0x0004a000 },
32760 -    { 0x0000a358, 0x7999aa02, 0x7999aa02, 0x7999aa0e, 0x7999aa0e, 0x7999aa0e },
32761 -    { 0x0000a3d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
32762 -};
32763 -
32764 -static const u_int32_t ar9287Common_9287_1_1[][2] = {
32765 -    { 0x0000000c, 0x00000000 },
32766 -    { 0x00000030, 0x00020015 },
32767 -    { 0x00000034, 0x00000005 },
32768 -    { 0x00000040, 0x00000000 },
32769 -    { 0x00000044, 0x00000008 },
32770 -    { 0x00000048, 0x00000008 },
32771 -    { 0x0000004c, 0x00000010 },
32772 -    { 0x00000050, 0x00000000 },
32773 -    { 0x00000054, 0x0000001f },
32774 -    { 0x00000800, 0x00000000 },
32775 -    { 0x00000804, 0x00000000 },
32776 -    { 0x00000808, 0x00000000 },
32777 -    { 0x0000080c, 0x00000000 },
32778 -    { 0x00000810, 0x00000000 },
32779 -    { 0x00000814, 0x00000000 },
32780 -    { 0x00000818, 0x00000000 },
32781 -    { 0x0000081c, 0x00000000 },
32782 -    { 0x00000820, 0x00000000 },
32783 -    { 0x00000824, 0x00000000 },
32784 -    { 0x00001040, 0x002ffc0f },
32785 -    { 0x00001044, 0x002ffc0f },
32786 -    { 0x00001048, 0x002ffc0f },
32787 -    { 0x0000104c, 0x002ffc0f },
32788 -    { 0x00001050, 0x002ffc0f },
32789 -    { 0x00001054, 0x002ffc0f },
32790 -    { 0x00001058, 0x002ffc0f },
32791 -    { 0x0000105c, 0x002ffc0f },
32792 -    { 0x00001060, 0x002ffc0f },
32793 -    { 0x00001064, 0x002ffc0f },
32794 -    { 0x00001230, 0x00000000 },
32795 -    { 0x00001270, 0x00000000 },
32796 -    { 0x00001038, 0x00000000 },
32797 -    { 0x00001078, 0x00000000 },
32798 -    { 0x000010b8, 0x00000000 },
32799 -    { 0x000010f8, 0x00000000 },
32800 -    { 0x00001138, 0x00000000 },
32801 -    { 0x00001178, 0x00000000 },
32802 -    { 0x000011b8, 0x00000000 },
32803 -    { 0x000011f8, 0x00000000 },
32804 -    { 0x00001238, 0x00000000 },
32805 -    { 0x00001278, 0x00000000 },
32806 -    { 0x000012b8, 0x00000000 },
32807 -    { 0x000012f8, 0x00000000 },
32808 -    { 0x00001338, 0x00000000 },
32809 -    { 0x00001378, 0x00000000 },
32810 -    { 0x000013b8, 0x00000000 },
32811 -    { 0x000013f8, 0x00000000 },
32812 -    { 0x00001438, 0x00000000 },
32813 -    { 0x00001478, 0x00000000 },
32814 -    { 0x000014b8, 0x00000000 },
32815 -    { 0x000014f8, 0x00000000 },
32816 -    { 0x00001538, 0x00000000 },
32817 -    { 0x00001578, 0x00000000 },
32818 -    { 0x000015b8, 0x00000000 },
32819 -    { 0x000015f8, 0x00000000 },
32820 -    { 0x00001638, 0x00000000 },
32821 -    { 0x00001678, 0x00000000 },
32822 -    { 0x000016b8, 0x00000000 },
32823 -    { 0x000016f8, 0x00000000 },
32824 -    { 0x00001738, 0x00000000 },
32825 -    { 0x00001778, 0x00000000 },
32826 -    { 0x000017b8, 0x00000000 },
32827 -    { 0x000017f8, 0x00000000 },
32828 -    { 0x0000103c, 0x00000000 },
32829 -    { 0x0000107c, 0x00000000 },
32830 -    { 0x000010bc, 0x00000000 },
32831 -    { 0x000010fc, 0x00000000 },
32832 -    { 0x0000113c, 0x00000000 },
32833 -    { 0x0000117c, 0x00000000 },
32834 -    { 0x000011bc, 0x00000000 },
32835 -    { 0x000011fc, 0x00000000 },
32836 -    { 0x0000123c, 0x00000000 },
32837 -    { 0x0000127c, 0x00000000 },
32838 -    { 0x000012bc, 0x00000000 },
32839 -    { 0x000012fc, 0x00000000 },
32840 -    { 0x0000133c, 0x00000000 },
32841 -    { 0x0000137c, 0x00000000 },
32842 -    { 0x000013bc, 0x00000000 },
32843 -    { 0x000013fc, 0x00000000 },
32844 -    { 0x0000143c, 0x00000000 },
32845 -    { 0x0000147c, 0x00000000 },
32846 -    { 0x00004030, 0x00000002 },
32847 -    { 0x0000403c, 0x00000002 },
32848 -    { 0x00004024, 0x0000001f },
32849 -    { 0x00004060, 0x00000000 },
32850 -    { 0x00004064, 0x00000000 },
32851 -    { 0x00007010, 0x00000033 },
32852 -    { 0x00007020, 0x00000000 },
32853 -    { 0x00007034, 0x00000002 },
32854 -    { 0x00007038, 0x000004c2 },
32855 -    { 0x00008004, 0x00000000 },
32856 -    { 0x00008008, 0x00000000 },
32857 -    { 0x0000800c, 0x00000000 },
32858 -    { 0x00008018, 0x00000700 },
32859 -    { 0x00008020, 0x00000000 },
32860 -    { 0x00008038, 0x00000000 },
32861 -    { 0x0000803c, 0x00000000 },
32862 -    { 0x00008048, 0x40000000 },
32863 -    { 0x00008054, 0x00000000 },
32864 -    { 0x00008058, 0x00000000 },
32865 -    { 0x0000805c, 0x000fc78f },
32866 -    { 0x00008060, 0x0000000f },
32867 -    { 0x00008064, 0x00000000 },
32868 -    { 0x00008070, 0x00000000 },
32869 -    { 0x000080c0, 0x2a80001a },
32870 -    { 0x000080c4, 0x05dc01e0 },
32871 -    { 0x000080c8, 0x1f402710 },
32872 -    { 0x000080cc, 0x01f40000 },
32873 -    { 0x000080d0, 0x00001e00 },
32874 -    { 0x000080d4, 0x00000000 },
32875 -    { 0x000080d8, 0x00400000 },
32876 -    { 0x000080e0, 0xffffffff },
32877 -    { 0x000080e4, 0x0000ffff },
32878 -    { 0x000080e8, 0x003f3f3f },
32879 -    { 0x000080ec, 0x00000000 },
32880 -    { 0x000080f0, 0x00000000 },
32881 -    { 0x000080f4, 0x00000000 },
32882 -    { 0x000080f8, 0x00000000 },
32883 -    { 0x000080fc, 0x00020000 },
32884 -    { 0x00008100, 0x00020000 },
32885 -    { 0x00008104, 0x00000001 },
32886 -    { 0x00008108, 0x00000052 },
32887 -    { 0x0000810c, 0x00000000 },
32888 -    { 0x00008110, 0x00000168 },
32889 -    { 0x00008118, 0x000100aa },
32890 -    { 0x0000811c, 0x00003210 },
32891 -    { 0x00008124, 0x00000000 },
32892 -    { 0x00008128, 0x00000000 },
32893 -    { 0x0000812c, 0x00000000 },
32894 -    { 0x00008130, 0x00000000 },
32895 -    { 0x00008134, 0x00000000 },
32896 -    { 0x00008138, 0x00000000 },
32897 -    { 0x0000813c, 0x00000000 },
32898 -    { 0x00008144, 0xffffffff },
32899 -    { 0x00008168, 0x00000000 },
32900 -    { 0x0000816c, 0x00000000 },
32901 -    { 0x00008170, 0x18487320 },
32902 -    { 0x00008174, 0xfaa4fa50 },
32903 -    { 0x00008178, 0x00000100 },
32904 -    { 0x0000817c, 0x00000000 },
32905 -    { 0x000081c0, 0x00000000 },
32906 -    { 0x000081c4, 0x00000000 },
32907 -    { 0x000081d4, 0x00000000 },
32908 -    { 0x000081ec, 0x00000000 },
32909 -    { 0x000081f0, 0x00000000 },
32910 -    { 0x000081f4, 0x00000000 },
32911 -    { 0x000081f8, 0x00000000 },
32912 -    { 0x000081fc, 0x00000000 },
32913 -    { 0x00008200, 0x00000000 },
32914 -    { 0x00008204, 0x00000000 },
32915 -    { 0x00008208, 0x00000000 },
32916 -    { 0x0000820c, 0x00000000 },
32917 -    { 0x00008210, 0x00000000 },
32918 -    { 0x00008214, 0x00000000 },
32919 -    { 0x00008218, 0x00000000 },
32920 -    { 0x0000821c, 0x00000000 },
32921 -    { 0x00008220, 0x00000000 },
32922 -    { 0x00008224, 0x00000000 },
32923 -    { 0x00008228, 0x00000000 },
32924 -    { 0x0000822c, 0x00000000 },
32925 -    { 0x00008230, 0x00000000 },
32926 -    { 0x00008234, 0x00000000 },
32927 -    { 0x00008238, 0x00000000 },
32928 -    { 0x0000823c, 0x00000000 },
32929 -    { 0x00008240, 0x00100000 },
32930 -    { 0x00008244, 0x0010f400 },
32931 -    { 0x00008248, 0x00000100 },
32932 -    { 0x0000824c, 0x0001e800 },
32933 -    { 0x00008250, 0x00000000 },
32934 -    { 0x00008254, 0x00000000 },
32935 -    { 0x00008258, 0x00000000 },
32936 -    { 0x0000825c, 0x400000ff },
32937 -    { 0x00008260, 0x00080922 },
32938 -    { 0x00008264, 0x88a00010 },
32939 -    { 0x00008270, 0x00000000 },
32940 -    { 0x00008274, 0x40000000 },
32941 -    { 0x00008278, 0x003e4180 },
32942 -    { 0x0000827c, 0x00000000 },
32943 -    { 0x00008284, 0x0000002c },
32944 -    { 0x00008288, 0x0000002c },
32945 -    { 0x0000828c, 0x000000ff },
32946 -    { 0x00008294, 0x00000000 },
32947 -    { 0x00008298, 0x00000000 },
32948 -    { 0x0000829c, 0x00000000 },
32949 -    { 0x00008300, 0x00000040 },
32950 -    { 0x00008314, 0x00000000 },
32951 -    { 0x00008328, 0x00000000 },
32952 -    { 0x0000832c, 0x00000007 },
32953 -    { 0x00008330, 0x00000302 },
32954 -    { 0x00008334, 0x00000e00 },
32955 -    { 0x00008338, 0x00ff0000 },
32956 -    { 0x0000833c, 0x00000000 },
32957 -    { 0x00008340, 0x000107ff },
32958 -    { 0x00008344, 0x01c81043 },
32959 -    { 0x00008360, 0xffffffff },
32960 -    { 0x00008364, 0xffffffff },
32961 -    { 0x00008368, 0x00000000 },
32962 -    { 0x00008370, 0x00000000 },
32963 -    { 0x00008374, 0x000000ff },
32964 -    { 0x00008378, 0x00000000 },
32965 -    { 0x0000837c, 0x00000000 },
32966 -    { 0x00008380, 0xffffffff },
32967 -    { 0x00008384, 0xffffffff },
32968 -    { 0x00008390, 0x0fffffff },
32969 -    { 0x00008394, 0x0fffffff },
32970 -    { 0x00008398, 0x00000000 },
32971 -    { 0x0000839c, 0x00000000 },
32972 -    { 0x000083a0, 0x00000000 },
32973 -    { 0x00009808, 0x00000000 },
32974 -    { 0x0000980c, 0xafe68e30 },
32975 -    { 0x00009810, 0xfd14e000 },
32976 -    { 0x00009814, 0x9c0a9f6b },
32977 -    { 0x0000981c, 0x00000000 },
32978 -    { 0x0000982c, 0x0000a000 },
32979 -    { 0x00009830, 0x00000000 },
32980 -    { 0x0000983c, 0x00200400 },
32981 -    { 0x0000984c, 0x0040233c },
32982 -    { 0x0000a84c, 0x0040233c },
32983 -    { 0x00009854, 0x00000044 },
32984 -    { 0x00009900, 0x00000000 },
32985 -    { 0x00009904, 0x00000000 },
32986 -    { 0x00009908, 0x00000000 },
32987 -    { 0x0000990c, 0x00000000 },
32988 -    { 0x00009910, 0x10002310 },
32989 -    { 0x0000991c, 0x10000fff },
32990 -    { 0x00009920, 0x04900000 },
32991 -    { 0x0000a920, 0x04900000 },
32992 -    { 0x00009928, 0x00000001 },
32993 -    { 0x0000992c, 0x00000004 },
32994 -    { 0x00009930, 0x00000000 },
32995 -    { 0x0000a930, 0x00000000 },
32996 -    { 0x00009934, 0x1e1f2022 },
32997 -    { 0x00009938, 0x0a0b0c0d },
32998 -    { 0x0000993c, 0x00000000 },
32999 -    { 0x00009948, 0x9280c00a },
33000 -    { 0x0000994c, 0x00020028 },
33001 -    { 0x00009954, 0x5f3ca3de },
33002 -    { 0x00009958, 0x0108ecff },
33003 -    { 0x00009940, 0x14750604 },
33004 -    { 0x0000c95c, 0x004b6a8e },
33005 -    { 0x00009970, 0x990bb514 },
33006 -    { 0x00009974, 0x00000000 },
33007 -    { 0x00009978, 0x00000001 },
33008 -    { 0x0000997c, 0x00000000 },
33009 -    { 0x000099a0, 0x00000000 },
33010 -    { 0x000099a4, 0x00000001 },
33011 -    { 0x000099a8, 0x201fff00 },
33012 -    { 0x000099ac, 0x0c6f0000 },
33013 -    { 0x000099b0, 0x03051000 },
33014 -    { 0x000099b4, 0x00000820 },
33015 -    { 0x000099c4, 0x06336f77 },
33016 -    { 0x000099c8, 0x6af6532f },
33017 -    { 0x000099cc, 0x08f186c8 },
33018 -    { 0x000099d0, 0x00046384 },
33019 -    { 0x000099dc, 0x00000000 },
33020 -    { 0x000099e0, 0x00000000 },
33021 -    { 0x000099e4, 0xaaaaaaaa },
33022 -    { 0x000099e8, 0x3c466478 },
33023 -    { 0x000099ec, 0x0cc80caa },
33024 -    { 0x000099f0, 0x00000000 },
33025 -    { 0x000099fc, 0x00001042 },
33026 -    { 0x0000a208, 0x803e4788 },
33027 -    { 0x0000a210, 0x4080a333 },
33028 -    { 0x0000a214, 0x40206c10 },
33029 -    { 0x0000a218, 0x009c4060 },
33030 -    { 0x0000a220, 0x01834061 },
33031 -    { 0x0000a224, 0x00000400 },
33032 -    { 0x0000a228, 0x000003b5 },
33033 -    { 0x0000a22c, 0x233f7180 },
33034 -    { 0x0000a234, 0x20202020 },
33035 -    { 0x0000a238, 0x20202020 },
33036 -    { 0x0000a23c, 0x13c889af },
33037 -    { 0x0000a240, 0x38490a20 },
33038 -    { 0x0000a244, 0x00000000 },
33039 -    { 0x0000a248, 0xfffffffc },
33040 -    { 0x0000a24c, 0x00000000 },
33041 -    { 0x0000a254, 0x00000000 },
33042 -    { 0x0000a258, 0x0cdbd380 },
33043 -    { 0x0000a25c, 0x0f0f0f01 },
33044 -    { 0x0000a260, 0xdfa91f01 },
33045 -    { 0x0000a264, 0x00418a11 },
33046 -    { 0x0000b264, 0x00418a11 },
33047 -    { 0x0000a268, 0x00000000 },
33048 -    { 0x0000a26c, 0x0e79e5c6 },
33049 -    { 0x0000b26c, 0x0e79e5c6 },
33050 -    { 0x0000d270, 0x00820820 },
33051 -    { 0x0000a278, 0x1ce739ce },
33052 -    { 0x0000a27c, 0x050701ce },
33053 -    { 0x0000d35c, 0x07ffffef },
33054 -    { 0x0000d360, 0x0fffffe7 },
33055 -    { 0x0000d364, 0x17ffffe5 },
33056 -    { 0x0000d368, 0x1fffffe4 },
33057 -    { 0x0000d36c, 0x37ffffe3 },
33058 -    { 0x0000d370, 0x3fffffe3 },
33059 -    { 0x0000d374, 0x57ffffe3 },
33060 -    { 0x0000d378, 0x5fffffe2 },
33061 -    { 0x0000d37c, 0x7fffffe2 },
33062 -    { 0x0000d380, 0x7f3c7bba },
33063 -    { 0x0000d384, 0xf3307ff0 },
33064 -    { 0x0000a388, 0x0c000000 },
33065 -    { 0x0000a38c, 0x20202020 },
33066 -    { 0x0000a390, 0x20202020 },
33067 -    { 0x0000a394, 0x1ce739ce },
33068 -    { 0x0000a398, 0x000001ce },
33069 -    { 0x0000b398, 0x000001ce },
33070 -    { 0x0000a39c, 0x00000001 },
33071 -    { 0x0000a3c8, 0x00000246 },
33072 -    { 0x0000a3cc, 0x20202020 },
33073 -    { 0x0000a3d0, 0x20202020 },
33074 -    { 0x0000a3d4, 0x20202020 },
33075 -    { 0x0000a3dc, 0x1ce739ce },
33076 -    { 0x0000a3e0, 0x000001ce },
33077 -    { 0x0000a3e4, 0x00000000 },
33078 -    { 0x0000a3e8, 0x18c43433 },
33079 -    { 0x0000a3ec, 0x00f70081 },
33080 -    { 0x0000a3f0, 0x01036a1e },
33081 -    { 0x0000a3f4, 0x00000000 },
33082 -    { 0x0000b3f4, 0x00000000 },
33083 -    { 0x0000a7d8, 0x000003f1 },
33084 -    { 0x00007800, 0x00000800 },
33085 -    { 0x00007804, 0x6c35ffd2 },
33086 -    { 0x00007808, 0x6db6c000 },
33087 -    { 0x0000780c, 0x6db6cb30 },
33088 -    { 0x00007810, 0x6db6cb6c },
33089 -    { 0x00007814, 0x0501e200 },
33090 -    { 0x00007818, 0x0094128d },
33091 -    { 0x0000781c, 0x976ee392 },
33092 -    { 0x00007820, 0xf75ff6fc },
33093 -    { 0x00007824, 0x00040000 },
33094 -    { 0x00007828, 0xdb003012 },
33095 -    { 0x0000782c, 0x04924914 },
33096 -    { 0x00007830, 0x21084210 },
33097 -    { 0x00007834, 0x00140000 },
33098 -    { 0x00007838, 0x0e4548d8 },
33099 -    { 0x0000783c, 0x54214514 },
33100 -    { 0x00007840, 0x02025830 },
33101 -    { 0x00007844, 0x71c0d388 },
33102 -    { 0x00007848, 0x934934a8 },
33103 -    { 0x00007850, 0x00000000 },
33104 -    { 0x00007854, 0x00000800 },
33105 -    { 0x00007858, 0x6c35ffd2 },
33106 -    { 0x0000785c, 0x6db6c000 },
33107 -    { 0x00007860, 0x6db6cb30 },
33108 -    { 0x00007864, 0x6db6cb6c },
33109 -    { 0x00007868, 0x0501e200 },
33110 -    { 0x0000786c, 0x0094128d },
33111 -    { 0x00007870, 0x976ee392 },
33112 -    { 0x00007874, 0xf75ff6fc },
33113 -    { 0x00007878, 0x00040000 },
33114 -    { 0x0000787c, 0xdb003012 },
33115 -    { 0x00007880, 0x04924914 },
33116 -    { 0x00007884, 0x21084210 },
33117 -    { 0x00007888, 0x001b6db0 },
33118 -    { 0x0000788c, 0x00376b63 },
33119 -    { 0x00007890, 0x06db6db6 },
33120 -    { 0x00007894, 0x006d8000 },
33121 -    { 0x00007898, 0x48100000 },
33122 -    { 0x0000789c, 0x00000000 },
33123 -    { 0x000078a0, 0x08000000 },
33124 -    { 0x000078a4, 0x0007ffd8 },
33125 -    { 0x000078a8, 0x0007ffd8 },
33126 -    { 0x000078ac, 0x001c0020 },
33127 -    { 0x000078b0, 0x00060aeb },
33128 -    { 0x000078b4, 0x40008080 },
33129 -    { 0x000078b8, 0x2a850160 },
33130 -};
33131 -
33132 -/*
33133 - * For Japanese regulatory requirements, 2484 MHz requires the following three
33134 - * registers be programmed differently from the channel between 2412 and 2472 MHz.
33135 - */
33136 -static const u_int32_t ar9287Common_normal_cck_fir_coeff_92871_1[][2] = {
33137 -    { 0x0000a1f4, 0x00fffeff },
33138 -    { 0x0000a1f8, 0x00f5f9ff },
33139 -    { 0x0000a1fc, 0xb79f6427 },
33140 -};
33141 -
33142 -static const u_int32_t ar9287Common_japan_2484_cck_fir_coeff_92871_1[][2] = {
33143 -    { 0x0000a1f4, 0x00000000 },
33144 -    { 0x0000a1f8, 0xefff0301 },
33145 -    { 0x0000a1fc, 0xca9228ee },
33146 -};
33147 -
33148 -static const u_int32_t ar9287Modes_tx_gain_9287_1_1[][6] = {
33149 -    /* Address      5G-HT20     5G-HT40     2G-HT40     2G-HT20     Turbo   */
33150 -    { 0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
33151 -    { 0x0000a304, 0x00000000, 0x00000000, 0x00004002, 0x00004002, 0x00004002 },
33152 -    { 0x0000a308, 0x00000000, 0x00000000, 0x00008004, 0x00008004, 0x00008004 },
33153 -    { 0x0000a30c, 0x00000000, 0x00000000, 0x0000c00a, 0x0000c00a, 0x0000c00a },
33154 -    { 0x0000a310, 0x00000000, 0x00000000, 0x0001000c, 0x0001000c, 0x0001000c },
33155 -    { 0x0000a314, 0x00000000, 0x00000000, 0x0001420b, 0x0001420b, 0x0001420b },
33156 -    { 0x0000a318, 0x00000000, 0x00000000, 0x0001824a, 0x0001824a, 0x0001824a },
33157 -    { 0x0000a31c, 0x00000000, 0x00000000, 0x0001c44a, 0x0001c44a, 0x0001c44a },
33158 -    { 0x0000a320, 0x00000000, 0x00000000, 0x0002064a, 0x0002064a, 0x0002064a },
33159 -    { 0x0000a324, 0x00000000, 0x00000000, 0x0002484a, 0x0002484a, 0x0002484a },
33160 -    { 0x0000a328, 0x00000000, 0x00000000, 0x00028a4a, 0x00028a4a, 0x00028a4a },
33161 -    { 0x0000a32c, 0x00000000, 0x00000000, 0x0002cc4a, 0x0002cc4a, 0x0002cc4a },
33162 -    { 0x0000a330, 0x00000000, 0x00000000, 0x00030e4a, 0x00030e4a, 0x00030e4a },
33163 -    { 0x0000a334, 0x00000000, 0x00000000, 0x00034e8a, 0x00034e8a, 0x00034e8a },
33164 -    { 0x0000a338, 0x00000000, 0x00000000, 0x00038e8c, 0x00038e8c, 0x00038e8c },
33165 -    { 0x0000a33c, 0x00000000, 0x00000000, 0x0003cecc, 0x0003cecc, 0x0003cecc },
33166 -    { 0x0000a340, 0x00000000, 0x00000000, 0x00040ed4, 0x00040ed4, 0x00040ed4 },
33167 -    { 0x0000a344, 0x00000000, 0x00000000, 0x00044edc, 0x00044edc, 0x00044edc },
33168 -    { 0x0000a348, 0x00000000, 0x00000000, 0x00048ede, 0x00048ede, 0x00048ede },
33169 -    { 0x0000a34c, 0x00000000, 0x00000000, 0x0004cf1e, 0x0004cf1e, 0x0004cf1e },
33170 -    { 0x0000a350, 0x00000000, 0x00000000, 0x00050f5e, 0x00050f5e, 0x00050f5e },
33171 -    { 0x0000a354, 0x00000000, 0x00000000, 0x00054f9e, 0x00054f9e, 0x00054f9e },
33172 -    { 0x0000a780, 0x00000000, 0x00000000, 0x00000062, 0x00000062, 0x00000062 },
33173 -    { 0x0000a784, 0x00000000, 0x00000000, 0x00004064, 0x00004064, 0x00004064 },
33174 -    { 0x0000a788, 0x00000000, 0x00000000, 0x000080a4, 0x000080a4, 0x000080a4 },
33175 -    { 0x0000a78c, 0x00000000, 0x00000000, 0x0000c0aa, 0x0000c0aa, 0x0000c0aa },
33176 -    { 0x0000a790, 0x00000000, 0x00000000, 0x000100ac, 0x000100ac, 0x000100ac },
33177 -    { 0x0000a794, 0x00000000, 0x00000000, 0x000140b4, 0x000140b4, 0x000140b4 },
33178 -    { 0x0000a798, 0x00000000, 0x00000000, 0x000180f4, 0x000180f4, 0x000180f4 },
33179 -    { 0x0000a79c, 0x00000000, 0x00000000, 0x0001c134, 0x0001c134, 0x0001c134 },
33180 -    { 0x0000a7a0, 0x00000000, 0x00000000, 0x00020174, 0x00020174, 0x00020174 },
33181 -    { 0x0000a7a4, 0x00000000, 0x00000000, 0x0002417c, 0x0002417c, 0x0002417c },
33182 -    { 0x0000a7a8, 0x00000000, 0x00000000, 0x0002817e, 0x0002817e, 0x0002817e },
33183 -    { 0x0000a7ac, 0x00000000, 0x00000000, 0x0002c1be, 0x0002c1be, 0x0002c1be },
33184 -    { 0x0000a7b0, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe },
33185 -    { 0x0000a7b4, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe },
33186 -    { 0x0000a7b8, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe },
33187 -    { 0x0000a7bc, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe },
33188 -    { 0x0000a7c0, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe },
33189 -    { 0x0000a7c4, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe },
33190 -    { 0x0000a7c8, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe },
33191 -    { 0x0000a7cc, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe },
33192 -    { 0x0000a7d0, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe },
33193 -    { 0x0000a7d4, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe },
33194 -    { 0x0000a274, 0x0a180000, 0x0a180000, 0x0a1aa000, 0x0a1aa000, 0x0a1aa000 },
33195 -};
33196 -
33197 -static const u_int32_t ar9287Modes_rx_gain_9287_1_1[][6] = {
33198 -    /* Address      5G-HT20     5G-HT40     2G-HT40     2G-HT20     Turbo   */
33199 -    { 0x00009a00, 0x00000000, 0x00000000, 0x0000a120, 0x0000a120, 0x0000a120 },
33200 -    { 0x00009a04, 0x00000000, 0x00000000, 0x0000a124, 0x0000a124, 0x0000a124 },
33201 -    { 0x00009a08, 0x00000000, 0x00000000, 0x0000a128, 0x0000a128, 0x0000a128 },
33202 -    { 0x00009a0c, 0x00000000, 0x00000000, 0x0000a12c, 0x0000a12c, 0x0000a12c },
33203 -    { 0x00009a10, 0x00000000, 0x00000000, 0x0000a130, 0x0000a130, 0x0000a130 },
33204 -    { 0x00009a14, 0x00000000, 0x00000000, 0x0000a194, 0x0000a194, 0x0000a194 },
33205 -    { 0x00009a18, 0x00000000, 0x00000000, 0x0000a198, 0x0000a198, 0x0000a198 },
33206 -    { 0x00009a1c, 0x00000000, 0x00000000, 0x0000a20c, 0x0000a20c, 0x0000a20c },
33207 -    { 0x00009a20, 0x00000000, 0x00000000, 0x0000a210, 0x0000a210, 0x0000a210 },
33208 -    { 0x00009a24, 0x00000000, 0x00000000, 0x0000a284, 0x0000a284, 0x0000a284 },
33209 -    { 0x00009a28, 0x00000000, 0x00000000, 0x0000a288, 0x0000a288, 0x0000a288 },
33210 -    { 0x00009a2c, 0x00000000, 0x00000000, 0x0000a28c, 0x0000a28c, 0x0000a28c },
33211 -    { 0x00009a30, 0x00000000, 0x00000000, 0x0000a290, 0x0000a290, 0x0000a290 },
33212 -    { 0x00009a34, 0x00000000, 0x00000000, 0x0000a294, 0x0000a294, 0x0000a294 },
33213 -    { 0x00009a38, 0x00000000, 0x00000000, 0x0000a2a0, 0x0000a2a0, 0x0000a2a0 },
33214 -    { 0x00009a3c, 0x00000000, 0x00000000, 0x0000a2a4, 0x0000a2a4, 0x0000a2a4 },
33215 -    { 0x00009a40, 0x00000000, 0x00000000, 0x0000a2a8, 0x0000a2a8, 0x0000a2a8 },
33216 -    { 0x00009a44, 0x00000000, 0x00000000, 0x0000a2ac, 0x0000a2ac, 0x0000a2ac },
33217 -    { 0x00009a48, 0x00000000, 0x00000000, 0x0000a2b0, 0x0000a2b0, 0x0000a2b0 },
33218 -    { 0x00009a4c, 0x00000000, 0x00000000, 0x0000a2b4, 0x0000a2b4, 0x0000a2b4 },
33219 -    { 0x00009a50, 0x00000000, 0x00000000, 0x0000a2b8, 0x0000a2b8, 0x0000a2b8 },
33220 -    { 0x00009a54, 0x00000000, 0x00000000, 0x0000a2c4, 0x0000a2c4, 0x0000a2c4 },
33221 -    { 0x00009a58, 0x00000000, 0x00000000, 0x0000a708, 0x0000a708, 0x0000a708 },
33222 -    { 0x00009a5c, 0x00000000, 0x00000000, 0x0000a70c, 0x0000a70c, 0x0000a70c },
33223 -    { 0x00009a60, 0x00000000, 0x00000000, 0x0000a710, 0x0000a710, 0x0000a710 },
33224 -    { 0x00009a64, 0x00000000, 0x00000000, 0x0000ab04, 0x0000ab04, 0x0000ab04 },
33225 -    { 0x00009a68, 0x00000000, 0x00000000, 0x0000ab08, 0x0000ab08, 0x0000ab08 },
33226 -    { 0x00009a6c, 0x00000000, 0x00000000, 0x0000ab0c, 0x0000ab0c, 0x0000ab0c },
33227 -    { 0x00009a70, 0x00000000, 0x00000000, 0x0000ab10, 0x0000ab10, 0x0000ab10 },
33228 -    { 0x00009a74, 0x00000000, 0x00000000, 0x0000ab14, 0x0000ab14, 0x0000ab14 },
33229 -    { 0x00009a78, 0x00000000, 0x00000000, 0x0000ab18, 0x0000ab18, 0x0000ab18 },
33230 -    { 0x00009a7c, 0x00000000, 0x00000000, 0x0000ab8c, 0x0000ab8c, 0x0000ab8c },
33231 -    { 0x00009a80, 0x00000000, 0x00000000, 0x0000ab90, 0x0000ab90, 0x0000ab90 },
33232 -    { 0x00009a84, 0x00000000, 0x00000000, 0x0000ab94, 0x0000ab94, 0x0000ab94 },
33233 -    { 0x00009a88, 0x00000000, 0x00000000, 0x0000ab98, 0x0000ab98, 0x0000ab98 },
33234 -    { 0x00009a8c, 0x00000000, 0x00000000, 0x0000aba4, 0x0000aba4, 0x0000aba4 },
33235 -    { 0x00009a90, 0x00000000, 0x00000000, 0x0000aba8, 0x0000aba8, 0x0000aba8 },
33236 -    { 0x00009a94, 0x00000000, 0x00000000, 0x0000cb04, 0x0000cb04, 0x0000cb04 },
33237 -    { 0x00009a98, 0x00000000, 0x00000000, 0x0000cb08, 0x0000cb08, 0x0000cb08 },
33238 -    { 0x00009a9c, 0x00000000, 0x00000000, 0x0000cb0c, 0x0000cb0c, 0x0000cb0c },
33239 -    { 0x00009aa0, 0x00000000, 0x00000000, 0x0000cb10, 0x0000cb10, 0x0000cb10 },
33240 -    { 0x00009aa4, 0x00000000, 0x00000000, 0x0000cb14, 0x0000cb14, 0x0000cb14 },
33241 -    { 0x00009aa8, 0x00000000, 0x00000000, 0x0000cb18, 0x0000cb18, 0x0000cb18 },
33242 -    { 0x00009aac, 0x00000000, 0x00000000, 0x0000cb8c, 0x0000cb8c, 0x0000cb8c },
33243 -    { 0x00009ab0, 0x00000000, 0x00000000, 0x0000cb90, 0x0000cb90, 0x0000cb90 },
33244 -    { 0x00009ab4, 0x00000000, 0x00000000, 0x0000cf18, 0x0000cf18, 0x0000cf18 },
33245 -    { 0x00009ab8, 0x00000000, 0x00000000, 0x0000cf24, 0x0000cf24, 0x0000cf24 },
33246 -    { 0x00009abc, 0x00000000, 0x00000000, 0x0000cf28, 0x0000cf28, 0x0000cf28 },
33247 -    { 0x00009ac0, 0x00000000, 0x00000000, 0x0000d314, 0x0000d314, 0x0000d314 },
33248 -    { 0x00009ac4, 0x00000000, 0x00000000, 0x0000d318, 0x0000d318, 0x0000d318 },
33249 -    { 0x00009ac8, 0x00000000, 0x00000000, 0x0000d38c, 0x0000d38c, 0x0000d38c },
33250 -    { 0x00009acc, 0x00000000, 0x00000000, 0x0000d390, 0x0000d390, 0x0000d390 },
33251 -    { 0x00009ad0, 0x00000000, 0x00000000, 0x0000d394, 0x0000d394, 0x0000d394 },
33252 -    { 0x00009ad4, 0x00000000, 0x00000000, 0x0000d398, 0x0000d398, 0x0000d398 },
33253 -    { 0x00009ad8, 0x00000000, 0x00000000, 0x0000d3a4, 0x0000d3a4, 0x0000d3a4 },
33254 -    { 0x00009adc, 0x00000000, 0x00000000, 0x0000d3a8, 0x0000d3a8, 0x0000d3a8 },
33255 -    { 0x00009ae0, 0x00000000, 0x00000000, 0x0000d3ac, 0x0000d3ac, 0x0000d3ac },
33256 -    { 0x00009ae4, 0x00000000, 0x00000000, 0x0000d3b0, 0x0000d3b0, 0x0000d3b0 },
33257 -    { 0x00009ae8, 0x00000000, 0x00000000, 0x0000f380, 0x0000f380, 0x0000f380 },
33258 -    { 0x00009aec, 0x00000000, 0x00000000, 0x0000f384, 0x0000f384, 0x0000f384 },
33259 -    { 0x00009af0, 0x00000000, 0x00000000, 0x0000f388, 0x0000f388, 0x0000f388 },
33260 -    { 0x00009af4, 0x00000000, 0x00000000, 0x0000f710, 0x0000f710, 0x0000f710 },
33261 -    { 0x00009af8, 0x00000000, 0x00000000, 0x0000f714, 0x0000f714, 0x0000f714 },
33262 -    { 0x00009afc, 0x00000000, 0x00000000, 0x0000f718, 0x0000f718, 0x0000f718 },
33263 -    { 0x00009b00, 0x00000000, 0x00000000, 0x0000fb10, 0x0000fb10, 0x0000fb10 },
33264 -    { 0x00009b04, 0x00000000, 0x00000000, 0x0000fb14, 0x0000fb14, 0x0000fb14 },
33265 -    { 0x00009b08, 0x00000000, 0x00000000, 0x0000fb18, 0x0000fb18, 0x0000fb18 },
33266 -    { 0x00009b0c, 0x00000000, 0x00000000, 0x0000fb8c, 0x0000fb8c, 0x0000fb8c },
33267 -    { 0x00009b10, 0x00000000, 0x00000000, 0x0000fb90, 0x0000fb90, 0x0000fb90 },
33268 -    { 0x00009b14, 0x00000000, 0x00000000, 0x0000fb94, 0x0000fb94, 0x0000fb94 },
33269 -    { 0x00009b18, 0x00000000, 0x00000000, 0x0000ff8c, 0x0000ff8c, 0x0000ff8c },
33270 -    { 0x00009b1c, 0x00000000, 0x00000000, 0x0000ff90, 0x0000ff90, 0x0000ff90 },
33271 -    { 0x00009b20, 0x00000000, 0x00000000, 0x0000ff94, 0x0000ff94, 0x0000ff94 },
33272 -    { 0x00009b24, 0x00000000, 0x00000000, 0x0000ffa0, 0x0000ffa0, 0x0000ffa0 },
33273 -    { 0x00009b28, 0x00000000, 0x00000000, 0x0000ffa4, 0x0000ffa4, 0x0000ffa4 },
33274 -    { 0x00009b2c, 0x00000000, 0x00000000, 0x0000ffa8, 0x0000ffa8, 0x0000ffa8 },
33275 -    { 0x00009b30, 0x00000000, 0x00000000, 0x0000ffac, 0x0000ffac, 0x0000ffac },
33276 -    { 0x00009b34, 0x00000000, 0x00000000, 0x0000ffb0, 0x0000ffb0, 0x0000ffb0 },
33277 -    { 0x00009b38, 0x00000000, 0x00000000, 0x0000ffb4, 0x0000ffb4, 0x0000ffb4 },
33278 -    { 0x00009b3c, 0x00000000, 0x00000000, 0x0000ffa1, 0x0000ffa1, 0x0000ffa1 },
33279 -    { 0x00009b40, 0x00000000, 0x00000000, 0x0000ffa5, 0x0000ffa5, 0x0000ffa5 },
33280 -    { 0x00009b44, 0x00000000, 0x00000000, 0x0000ffa9, 0x0000ffa9, 0x0000ffa9 },
33281 -    { 0x00009b48, 0x00000000, 0x00000000, 0x0000ffad, 0x0000ffad, 0x0000ffad },
33282 -    { 0x00009b4c, 0x00000000, 0x00000000, 0x0000ffb1, 0x0000ffb1, 0x0000ffb1 },
33283 -    { 0x00009b50, 0x00000000, 0x00000000, 0x0000ffb5, 0x0000ffb5, 0x0000ffb5 },
33284 -    { 0x00009b54, 0x00000000, 0x00000000, 0x0000ffb9, 0x0000ffb9, 0x0000ffb9 },
33285 -    { 0x00009b58, 0x00000000, 0x00000000, 0x0000ffc5, 0x0000ffc5, 0x0000ffc5 },
33286 -    { 0x00009b5c, 0x00000000, 0x00000000, 0x0000ffc9, 0x0000ffc9, 0x0000ffc9 },
33287 -    { 0x00009b60, 0x00000000, 0x00000000, 0x0000ffcd, 0x0000ffcd, 0x0000ffcd },
33288 -    { 0x00009b64, 0x00000000, 0x00000000, 0x0000ffd1, 0x0000ffd1, 0x0000ffd1 },
33289 -    { 0x00009b68, 0x00000000, 0x00000000, 0x0000ffd5, 0x0000ffd5, 0x0000ffd5 },
33290 -    { 0x00009b6c, 0x00000000, 0x00000000, 0x0000ffc2, 0x0000ffc2, 0x0000ffc2 },
33291 -    { 0x00009b70, 0x00000000, 0x00000000, 0x0000ffc6, 0x0000ffc6, 0x0000ffc6 },
33292 -    { 0x00009b74, 0x00000000, 0x00000000, 0x0000ffca, 0x0000ffca, 0x0000ffca },
33293 -    { 0x00009b78, 0x00000000, 0x00000000, 0x0000ffce, 0x0000ffce, 0x0000ffce },
33294 -    { 0x00009b7c, 0x00000000, 0x00000000, 0x0000ffd2, 0x0000ffd2, 0x0000ffd2 },
33295 -    { 0x00009b80, 0x00000000, 0x00000000, 0x0000ffd6, 0x0000ffd6, 0x0000ffd6 },
33296 -    { 0x00009b84, 0x00000000, 0x00000000, 0x0000ffda, 0x0000ffda, 0x0000ffda },
33297 -    { 0x00009b88, 0x00000000, 0x00000000, 0x0000ffc7, 0x0000ffc7, 0x0000ffc7 },
33298 -    { 0x00009b8c, 0x00000000, 0x00000000, 0x0000ffcb, 0x0000ffcb, 0x0000ffcb },
33299 -    { 0x00009b90, 0x00000000, 0x00000000, 0x0000ffcf, 0x0000ffcf, 0x0000ffcf },
33300 -    { 0x00009b94, 0x00000000, 0x00000000, 0x0000ffd3, 0x0000ffd3, 0x0000ffd3 },
33301 -    { 0x00009b98, 0x00000000, 0x00000000, 0x0000ffd7, 0x0000ffd7, 0x0000ffd7 },
33302 -    { 0x00009b9c, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33303 -    { 0x00009ba0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33304 -    { 0x00009ba4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33305 -    { 0x00009ba8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33306 -    { 0x00009bac, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33307 -    { 0x00009bb0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33308 -    { 0x00009bb4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33309 -    { 0x00009bb8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33310 -    { 0x00009bbc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33311 -    { 0x00009bc0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33312 -    { 0x00009bc4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33313 -    { 0x00009bc8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33314 -    { 0x00009bcc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33315 -    { 0x00009bd0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33316 -    { 0x00009bd4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33317 -    { 0x00009bd8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33318 -    { 0x00009bdc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33319 -    { 0x00009be0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33320 -    { 0x00009be4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33321 -    { 0x00009be8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33322 -    { 0x00009bec, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33323 -    { 0x00009bf0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33324 -    { 0x00009bf4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33325 -    { 0x00009bf8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33326 -    { 0x00009bfc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33327 -    { 0x0000aa00, 0x00000000, 0x00000000, 0x0000a120, 0x0000a120, 0x0000a120 },
33328 -    { 0x0000aa04, 0x00000000, 0x00000000, 0x0000a124, 0x0000a124, 0x0000a124 },
33329 -    { 0x0000aa08, 0x00000000, 0x00000000, 0x0000a128, 0x0000a128, 0x0000a128 },
33330 -    { 0x0000aa0c, 0x00000000, 0x00000000, 0x0000a12c, 0x0000a12c, 0x0000a12c },
33331 -    { 0x0000aa10, 0x00000000, 0x00000000, 0x0000a130, 0x0000a130, 0x0000a130 },
33332 -    { 0x0000aa14, 0x00000000, 0x00000000, 0x0000a194, 0x0000a194, 0x0000a194 },
33333 -    { 0x0000aa18, 0x00000000, 0x00000000, 0x0000a198, 0x0000a198, 0x0000a198 },
33334 -    { 0x0000aa1c, 0x00000000, 0x00000000, 0x0000a20c, 0x0000a20c, 0x0000a20c },
33335 -    { 0x0000aa20, 0x00000000, 0x00000000, 0x0000a210, 0x0000a210, 0x0000a210 },
33336 -    { 0x0000aa24, 0x00000000, 0x00000000, 0x0000a284, 0x0000a284, 0x0000a284 },
33337 -    { 0x0000aa28, 0x00000000, 0x00000000, 0x0000a288, 0x0000a288, 0x0000a288 },
33338 -    { 0x0000aa2c, 0x00000000, 0x00000000, 0x0000a28c, 0x0000a28c, 0x0000a28c },
33339 -    { 0x0000aa30, 0x00000000, 0x00000000, 0x0000a290, 0x0000a290, 0x0000a290 },
33340 -    { 0x0000aa34, 0x00000000, 0x00000000, 0x0000a294, 0x0000a294, 0x0000a294 },
33341 -    { 0x0000aa38, 0x00000000, 0x00000000, 0x0000a2a0, 0x0000a2a0, 0x0000a2a0 },
33342 -    { 0x0000aa3c, 0x00000000, 0x00000000, 0x0000a2a4, 0x0000a2a4, 0x0000a2a4 },
33343 -    { 0x0000aa40, 0x00000000, 0x00000000, 0x0000a2a8, 0x0000a2a8, 0x0000a2a8 },
33344 -    { 0x0000aa44, 0x00000000, 0x00000000, 0x0000a2ac, 0x0000a2ac, 0x0000a2ac },
33345 -    { 0x0000aa48, 0x00000000, 0x00000000, 0x0000a2b0, 0x0000a2b0, 0x0000a2b0 },
33346 -    { 0x0000aa4c, 0x00000000, 0x00000000, 0x0000a2b4, 0x0000a2b4, 0x0000a2b4 },
33347 -    { 0x0000aa50, 0x00000000, 0x00000000, 0x0000a2b8, 0x0000a2b8, 0x0000a2b8 },
33348 -    { 0x0000aa54, 0x00000000, 0x00000000, 0x0000a2c4, 0x0000a2c4, 0x0000a2c4 },
33349 -    { 0x0000aa58, 0x00000000, 0x00000000, 0x0000a708, 0x0000a708, 0x0000a708 },
33350 -    { 0x0000aa5c, 0x00000000, 0x00000000, 0x0000a70c, 0x0000a70c, 0x0000a70c },
33351 -    { 0x0000aa60, 0x00000000, 0x00000000, 0x0000a710, 0x0000a710, 0x0000a710 },
33352 -    { 0x0000aa64, 0x00000000, 0x00000000, 0x0000ab04, 0x0000ab04, 0x0000ab04 },
33353 -    { 0x0000aa68, 0x00000000, 0x00000000, 0x0000ab08, 0x0000ab08, 0x0000ab08 },
33354 -    { 0x0000aa6c, 0x00000000, 0x00000000, 0x0000ab0c, 0x0000ab0c, 0x0000ab0c },
33355 -    { 0x0000aa70, 0x00000000, 0x00000000, 0x0000ab10, 0x0000ab10, 0x0000ab10 },
33356 -    { 0x0000aa74, 0x00000000, 0x00000000, 0x0000ab14, 0x0000ab14, 0x0000ab14 },
33357 -    { 0x0000aa78, 0x00000000, 0x00000000, 0x0000ab18, 0x0000ab18, 0x0000ab18 },
33358 -    { 0x0000aa7c, 0x00000000, 0x00000000, 0x0000ab8c, 0x0000ab8c, 0x0000ab8c },
33359 -    { 0x0000aa80, 0x00000000, 0x00000000, 0x0000ab90, 0x0000ab90, 0x0000ab90 },
33360 -    { 0x0000aa84, 0x00000000, 0x00000000, 0x0000ab94, 0x0000ab94, 0x0000ab94 },
33361 -    { 0x0000aa88, 0x00000000, 0x00000000, 0x0000ab98, 0x0000ab98, 0x0000ab98 },
33362 -    { 0x0000aa8c, 0x00000000, 0x00000000, 0x0000aba4, 0x0000aba4, 0x0000aba4 },
33363 -    { 0x0000aa90, 0x00000000, 0x00000000, 0x0000aba8, 0x0000aba8, 0x0000aba8 },
33364 -    { 0x0000aa94, 0x00000000, 0x00000000, 0x0000cb04, 0x0000cb04, 0x0000cb04 },
33365 -    { 0x0000aa98, 0x00000000, 0x00000000, 0x0000cb08, 0x0000cb08, 0x0000cb08 },
33366 -    { 0x0000aa9c, 0x00000000, 0x00000000, 0x0000cb0c, 0x0000cb0c, 0x0000cb0c },
33367 -    { 0x0000aaa0, 0x00000000, 0x00000000, 0x0000cb10, 0x0000cb10, 0x0000cb10 },
33368 -    { 0x0000aaa4, 0x00000000, 0x00000000, 0x0000cb14, 0x0000cb14, 0x0000cb14 },
33369 -    { 0x0000aaa8, 0x00000000, 0x00000000, 0x0000cb18, 0x0000cb18, 0x0000cb18 },
33370 -    { 0x0000aaac, 0x00000000, 0x00000000, 0x0000cb8c, 0x0000cb8c, 0x0000cb8c },
33371 -    { 0x0000aab0, 0x00000000, 0x00000000, 0x0000cb90, 0x0000cb90, 0x0000cb90 },
33372 -    { 0x0000aab4, 0x00000000, 0x00000000, 0x0000cf18, 0x0000cf18, 0x0000cf18 },
33373 -    { 0x0000aab8, 0x00000000, 0x00000000, 0x0000cf24, 0x0000cf24, 0x0000cf24 },
33374 -    { 0x0000aabc, 0x00000000, 0x00000000, 0x0000cf28, 0x0000cf28, 0x0000cf28 },
33375 -    { 0x0000aac0, 0x00000000, 0x00000000, 0x0000d314, 0x0000d314, 0x0000d314 },
33376 -    { 0x0000aac4, 0x00000000, 0x00000000, 0x0000d318, 0x0000d318, 0x0000d318 },
33377 -    { 0x0000aac8, 0x00000000, 0x00000000, 0x0000d38c, 0x0000d38c, 0x0000d38c },
33378 -    { 0x0000aacc, 0x00000000, 0x00000000, 0x0000d390, 0x0000d390, 0x0000d390 },
33379 -    { 0x0000aad0, 0x00000000, 0x00000000, 0x0000d394, 0x0000d394, 0x0000d394 },
33380 -    { 0x0000aad4, 0x00000000, 0x00000000, 0x0000d398, 0x0000d398, 0x0000d398 },
33381 -    { 0x0000aad8, 0x00000000, 0x00000000, 0x0000d3a4, 0x0000d3a4, 0x0000d3a4 },
33382 -    { 0x0000aadc, 0x00000000, 0x00000000, 0x0000d3a8, 0x0000d3a8, 0x0000d3a8 },
33383 -    { 0x0000aae0, 0x00000000, 0x00000000, 0x0000d3ac, 0x0000d3ac, 0x0000d3ac },
33384 -    { 0x0000aae4, 0x00000000, 0x00000000, 0x0000d3b0, 0x0000d3b0, 0x0000d3b0 },
33385 -    { 0x0000aae8, 0x00000000, 0x00000000, 0x0000f380, 0x0000f380, 0x0000f380 },
33386 -    { 0x0000aaec, 0x00000000, 0x00000000, 0x0000f384, 0x0000f384, 0x0000f384 },
33387 -    { 0x0000aaf0, 0x00000000, 0x00000000, 0x0000f388, 0x0000f388, 0x0000f388 },
33388 -    { 0x0000aaf4, 0x00000000, 0x00000000, 0x0000f710, 0x0000f710, 0x0000f710 },
33389 -    { 0x0000aaf8, 0x00000000, 0x00000000, 0x0000f714, 0x0000f714, 0x0000f714 },
33390 -    { 0x0000aafc, 0x00000000, 0x00000000, 0x0000f718, 0x0000f718, 0x0000f718 },
33391 -    { 0x0000ab00, 0x00000000, 0x00000000, 0x0000fb10, 0x0000fb10, 0x0000fb10 },
33392 -    { 0x0000ab04, 0x00000000, 0x00000000, 0x0000fb14, 0x0000fb14, 0x0000fb14 },
33393 -    { 0x0000ab08, 0x00000000, 0x00000000, 0x0000fb18, 0x0000fb18, 0x0000fb18 },
33394 -    { 0x0000ab0c, 0x00000000, 0x00000000, 0x0000fb8c, 0x0000fb8c, 0x0000fb8c },
33395 -    { 0x0000ab10, 0x00000000, 0x00000000, 0x0000fb90, 0x0000fb90, 0x0000fb90 },
33396 -    { 0x0000ab14, 0x00000000, 0x00000000, 0x0000fb94, 0x0000fb94, 0x0000fb94 },
33397 -    { 0x0000ab18, 0x00000000, 0x00000000, 0x0000ff8c, 0x0000ff8c, 0x0000ff8c },
33398 -    { 0x0000ab1c, 0x00000000, 0x00000000, 0x0000ff90, 0x0000ff90, 0x0000ff90 },
33399 -    { 0x0000ab20, 0x00000000, 0x00000000, 0x0000ff94, 0x0000ff94, 0x0000ff94 },
33400 -    { 0x0000ab24, 0x00000000, 0x00000000, 0x0000ffa0, 0x0000ffa0, 0x0000ffa0 },
33401 -    { 0x0000ab28, 0x00000000, 0x00000000, 0x0000ffa4, 0x0000ffa4, 0x0000ffa4 },
33402 -    { 0x0000ab2c, 0x00000000, 0x00000000, 0x0000ffa8, 0x0000ffa8, 0x0000ffa8 },
33403 -    { 0x0000ab30, 0x00000000, 0x00000000, 0x0000ffac, 0x0000ffac, 0x0000ffac },
33404 -    { 0x0000ab34, 0x00000000, 0x00000000, 0x0000ffb0, 0x0000ffb0, 0x0000ffb0 },
33405 -    { 0x0000ab38, 0x00000000, 0x00000000, 0x0000ffb4, 0x0000ffb4, 0x0000ffb4 },
33406 -    { 0x0000ab3c, 0x00000000, 0x00000000, 0x0000ffa1, 0x0000ffa1, 0x0000ffa1 },
33407 -    { 0x0000ab40, 0x00000000, 0x00000000, 0x0000ffa5, 0x0000ffa5, 0x0000ffa5 },
33408 -    { 0x0000ab44, 0x00000000, 0x00000000, 0x0000ffa9, 0x0000ffa9, 0x0000ffa9 },
33409 -    { 0x0000ab48, 0x00000000, 0x00000000, 0x0000ffad, 0x0000ffad, 0x0000ffad },
33410 -    { 0x0000ab4c, 0x00000000, 0x00000000, 0x0000ffb1, 0x0000ffb1, 0x0000ffb1 },
33411 -    { 0x0000ab50, 0x00000000, 0x00000000, 0x0000ffb5, 0x0000ffb5, 0x0000ffb5 },
33412 -    { 0x0000ab54, 0x00000000, 0x00000000, 0x0000ffb9, 0x0000ffb9, 0x0000ffb9 },
33413 -    { 0x0000ab58, 0x00000000, 0x00000000, 0x0000ffc5, 0x0000ffc5, 0x0000ffc5 },
33414 -    { 0x0000ab5c, 0x00000000, 0x00000000, 0x0000ffc9, 0x0000ffc9, 0x0000ffc9 },
33415 -    { 0x0000ab60, 0x00000000, 0x00000000, 0x0000ffcd, 0x0000ffcd, 0x0000ffcd },
33416 -    { 0x0000ab64, 0x00000000, 0x00000000, 0x0000ffd1, 0x0000ffd1, 0x0000ffd1 },
33417 -    { 0x0000ab68, 0x00000000, 0x00000000, 0x0000ffd5, 0x0000ffd5, 0x0000ffd5 },
33418 -    { 0x0000ab6c, 0x00000000, 0x00000000, 0x0000ffc2, 0x0000ffc2, 0x0000ffc2 },
33419 -    { 0x0000ab70, 0x00000000, 0x00000000, 0x0000ffc6, 0x0000ffc6, 0x0000ffc6 },
33420 -    { 0x0000ab74, 0x00000000, 0x00000000, 0x0000ffca, 0x0000ffca, 0x0000ffca },
33421 -    { 0x0000ab78, 0x00000000, 0x00000000, 0x0000ffce, 0x0000ffce, 0x0000ffce },
33422 -    { 0x0000ab7c, 0x00000000, 0x00000000, 0x0000ffd2, 0x0000ffd2, 0x0000ffd2 },
33423 -    { 0x0000ab80, 0x00000000, 0x00000000, 0x0000ffd6, 0x0000ffd6, 0x0000ffd6 },
33424 -    { 0x0000ab84, 0x00000000, 0x00000000, 0x0000ffda, 0x0000ffda, 0x0000ffda },
33425 -    { 0x0000ab88, 0x00000000, 0x00000000, 0x0000ffc7, 0x0000ffc7, 0x0000ffc7 },
33426 -    { 0x0000ab8c, 0x00000000, 0x00000000, 0x0000ffcb, 0x0000ffcb, 0x0000ffcb },
33427 -    { 0x0000ab90, 0x00000000, 0x00000000, 0x0000ffcf, 0x0000ffcf, 0x0000ffcf },
33428 -    { 0x0000ab94, 0x00000000, 0x00000000, 0x0000ffd3, 0x0000ffd3, 0x0000ffd3 },
33429 -    { 0x0000ab98, 0x00000000, 0x00000000, 0x0000ffd7, 0x0000ffd7, 0x0000ffd7 },
33430 -    { 0x0000ab9c, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33431 -    { 0x0000aba0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33432 -    { 0x0000aba4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33433 -    { 0x0000aba8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33434 -    { 0x0000abac, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33435 -    { 0x0000abb0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33436 -    { 0x0000abb4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33437 -    { 0x0000abb8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33438 -    { 0x0000abbc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33439 -    { 0x0000abc0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33440 -    { 0x0000abc4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33441 -    { 0x0000abc8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33442 -    { 0x0000abcc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33443 -    { 0x0000abd0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33444 -    { 0x0000abd4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33445 -    { 0x0000abd8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33446 -    { 0x0000abdc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33447 -    { 0x0000abe0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33448 -    { 0x0000abe4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33449 -    { 0x0000abe8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33450 -    { 0x0000abec, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33451 -    { 0x0000abf0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33452 -    { 0x0000abf4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33453 -    { 0x0000abf8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33454 -    { 0x0000abfc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb },
33455 -    { 0x00009848, 0x00000000, 0x00000000, 0x00001067, 0x00001067, 0x00001067 },
33456 -    { 0x0000a848, 0x00000000, 0x00000000, 0x00001067, 0x00001067, 0x00001067 },
33457 -};
33458 -
33459 -static const u_int32_t ar9287PciePhy_clkreq_always_on_L1_9287_1_1[][2] = {
33460 -    {0x00004040,  0x9248fd00 },
33461 -    {0x00004040,  0x24924924 },
33462 -    {0x00004040,  0xa8000019 },
33463 -    {0x00004040,  0x13160820 },
33464 -    {0x00004040,  0xe5980560 },
33465 -    {0x00004040,  0xc01dcffd },
33466 -    {0x00004040,  0x1aaabe41 },
33467 -    {0x00004040,  0xbe105554 },
33468 -    {0x00004040,  0x00043007 },
33469 -    {0x00004044,  0x00000000 },
33470 -};
33471 -
33472 -static const u_int32_t ar9287PciePhy_clkreq_off_L1_9287_1_1[][2] = {
33473 -    {0x00004040,  0x9248fd00 },
33474 -    {0x00004040,  0x24924924 },
33475 -    {0x00004040,  0xa8000019 },
33476 -    {0x00004040,  0x13160820 },
33477 -    {0x00004040,  0xe5980560 },
33478 -    {0x00004040,  0xc01dcffc },
33479 -    {0x00004040,  0x1aaabe41 },
33480 -    {0x00004040,  0xbe105554 },
33481 -    {0x00004040,  0x00043007 },
33482 -    {0x00004044,  0x00000000 },
33483 -};
33484 -
33485 -
33486 -/* AR9271 initialization values automaticaly created: 06/04/09 */
33487 -static const u_int32_t ar9271Modes_9271[][6] = {
33488 -    { 0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160, 0x000001e0 },
33489 -    { 0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c, 0x000001e0 },
33490 -    { 0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38, 0x00001180 },
33491 -    { 0x000010f0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008 },
33492 -    { 0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00, 0x06e006e0 },
33493 -    { 0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b, 0x0988004f },
33494 -    { 0x00008318, 0x00003e80, 0x00007d00, 0x00006880, 0x00003440, 0x00006880 },
33495 -    { 0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300, 0x00000303 },
33496 -    { 0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200, 0x02020200 },
33497 -    { 0x00009824, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e },
33498 -    { 0x00009828, 0x3a020001, 0x3a020001, 0x3a020001, 0x3a020001, 0x3a020001 },
33499 -    { 0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e },
33500 -    { 0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000007 },
33501 -    { 0x00009840, 0x206a012e, 0x206a012e, 0x206a012e, 0x206a012e, 0x206a012e },
33502 -    { 0x00009844, 0x0372161e, 0x0372161e, 0x03721620, 0x03721620, 0x037216a0 },
33503 -    { 0x00009848, 0x00001066, 0x00001066, 0x00001053, 0x00001053, 0x00001059 },
33504 -    { 0x0000a848, 0x00001066, 0x00001066, 0x00001053, 0x00001053, 0x00001059 },
33505 -    { 0x00009850, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2 },
33506 -    { 0x00009858, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e },
33507 -    { 0x0000985c, 0x3139605e, 0x3139605e, 0x3137605e, 0x3137605e, 0x3139605e },
33508 -    { 0x00009860, 0x00058d18, 0x00058d18, 0x00058d18, 0x00058d18, 0x00058d18 },
33509 -    { 0x00009864, 0x0000fe00, 0x0000fe00, 0x0001ce00, 0x0001ce00, 0x0001ce00 },
33510 -    { 0x00009868, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0 },
33511 -    { 0x0000986c, 0x06903081, 0x06903081, 0x06903881, 0x06903881, 0x06903881 },
33512 -    { 0x00009910, 0x30002310, 0x30002310, 0x30002310, 0x30002310, 0x30002310 },
33513 -    { 0x00009914, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898, 0x000007d0 },
33514 -    { 0x00009918, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b, 0x00000016 },
33515 -    { 0x00009924, 0xd00a8007, 0xd00a8007, 0xd00a800d, 0xd00a800d, 0xd00a800d },
33516 -    { 0x00009944, 0xffbc1010, 0xffbc1010, 0xffbc1020, 0xffbc1020, 0xffbc1010 },
33517 -    { 0x00009960, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
33518 -    { 0x00009964, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
33519 -    { 0x000099b8, 0x0000421c, 0x0000421c, 0x0000421c, 0x0000421c, 0x0000421c },
33520 -    { 0x000099bc, 0x00000600, 0x00000600, 0x00000c00, 0x00000c00, 0x00000c00 },
33521 -    { 0x000099c0, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4 },
33522 -    { 0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77 },
33523 -    { 0x000099c8, 0x6af6532f, 0x6af6532f, 0x6af6532f, 0x6af6532f, 0x6af6532f },
33524 -    { 0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8 },
33525 -    { 0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384, 0x00046384 },
33526 -    { 0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
33527 -    { 0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
33528 -    { 0x00009a00, 0x00000000, 0x00000000, 0x00058084, 0x00058084, 0x00000000 },
33529 -    { 0x00009a04, 0x00000000, 0x00000000, 0x00058088, 0x00058088, 0x00000000 },
33530 -    { 0x00009a08, 0x00000000, 0x00000000, 0x0005808c, 0x0005808c, 0x00000000 },
33531 -    { 0x00009a0c, 0x00000000, 0x00000000, 0x00058100, 0x00058100, 0x00000000 },
33532 -    { 0x00009a10, 0x00000000, 0x00000000, 0x00058104, 0x00058104, 0x00000000 },
33533 -    { 0x00009a14, 0x00000000, 0x00000000, 0x00058108, 0x00058108, 0x00000000 },
33534 -    { 0x00009a18, 0x00000000, 0x00000000, 0x0005810c, 0x0005810c, 0x00000000 },
33535 -    { 0x00009a1c, 0x00000000, 0x00000000, 0x00058110, 0x00058110, 0x00000000 },
33536 -    { 0x00009a20, 0x00000000, 0x00000000, 0x00058114, 0x00058114, 0x00000000 },
33537 -    { 0x00009a24, 0x00000000, 0x00000000, 0x00058180, 0x00058180, 0x00000000 },
33538 -    { 0x00009a28, 0x00000000, 0x00000000, 0x00058184, 0x00058184, 0x00000000 },
33539 -    { 0x00009a2c, 0x00000000, 0x00000000, 0x00058188, 0x00058188, 0x00000000 },
33540 -    { 0x00009a30, 0x00000000, 0x00000000, 0x0005818c, 0x0005818c, 0x00000000 },
33541 -    { 0x00009a34, 0x00000000, 0x00000000, 0x00058190, 0x00058190, 0x00000000 },
33542 -    { 0x00009a38, 0x00000000, 0x00000000, 0x00058194, 0x00058194, 0x00000000 },
33543 -    { 0x00009a3c, 0x00000000, 0x00000000, 0x000581a0, 0x000581a0, 0x00000000 },
33544 -    { 0x00009a40, 0x00000000, 0x00000000, 0x0005820c, 0x0005820c, 0x00000000 },
33545 -    { 0x00009a44, 0x00000000, 0x00000000, 0x000581a8, 0x000581a8, 0x00000000 },
33546 -    { 0x00009a48, 0x00000000, 0x00000000, 0x00058284, 0x00058284, 0x00000000 },
33547 -    { 0x00009a4c, 0x00000000, 0x00000000, 0x00058288, 0x00058288, 0x00000000 },
33548 -    { 0x00009a50, 0x00000000, 0x00000000, 0x00058224, 0x00058224, 0x00000000 },
33549 -    { 0x00009a54, 0x00000000, 0x00000000, 0x00058290, 0x00058290, 0x00000000 },
33550 -    { 0x00009a58, 0x00000000, 0x00000000, 0x00058300, 0x00058300, 0x00000000 },
33551 -    { 0x00009a5c, 0x00000000, 0x00000000, 0x00058304, 0x00058304, 0x00000000 },
33552 -    { 0x00009a60, 0x00000000, 0x00000000, 0x00058308, 0x00058308, 0x00000000 },
33553 -    { 0x00009a64, 0x00000000, 0x00000000, 0x0005830c, 0x0005830c, 0x00000000 },
33554 -    { 0x00009a68, 0x00000000, 0x00000000, 0x00058380, 0x00058380, 0x00000000 },
33555 -    { 0x00009a6c, 0x00000000, 0x00000000, 0x00058384, 0x00058384, 0x00000000 },
33556 -    { 0x00009a70, 0x00000000, 0x00000000, 0x00068700, 0x00068700, 0x00000000 },
33557 -    { 0x00009a74, 0x00000000, 0x00000000, 0x00068704, 0x00068704, 0x00000000 },
33558 -    { 0x00009a78, 0x00000000, 0x00000000, 0x00068708, 0x00068708, 0x00000000 },
33559 -    { 0x00009a7c, 0x00000000, 0x00000000, 0x0006870c, 0x0006870c, 0x00000000 },
33560 -    { 0x00009a80, 0x00000000, 0x00000000, 0x00068780, 0x00068780, 0x00000000 },
33561 -    { 0x00009a84, 0x00000000, 0x00000000, 0x00068784, 0x00068784, 0x00000000 },
33562 -    { 0x00009a88, 0x00000000, 0x00000000, 0x00078b00, 0x00078b00, 0x00000000 },
33563 -    { 0x00009a8c, 0x00000000, 0x00000000, 0x00078b04, 0x00078b04, 0x00000000 },
33564 -    { 0x00009a90, 0x00000000, 0x00000000, 0x00078b08, 0x00078b08, 0x00000000 },
33565 -    { 0x00009a94, 0x00000000, 0x00000000, 0x00078b0c, 0x00078b0c, 0x00000000 },
33566 -    { 0x00009a98, 0x00000000, 0x00000000, 0x00078b80, 0x00078b80, 0x00000000 },
33567 -    { 0x00009a9c, 0x00000000, 0x00000000, 0x00078b84, 0x00078b84, 0x00000000 },
33568 -    { 0x00009aa0, 0x00000000, 0x00000000, 0x00078b88, 0x00078b88, 0x00000000 },
33569 -    { 0x00009aa4, 0x00000000, 0x00000000, 0x00078b8c, 0x00078b8c, 0x00000000 },
33570 -    { 0x00009aa8, 0x00000000, 0x00000000, 0x00078b90, 0x00078b90, 0x00000000 },
33571 -    { 0x00009aac, 0x00000000, 0x00000000, 0x000caf80, 0x000caf80, 0x00000000 },
33572 -    { 0x00009ab0, 0x00000000, 0x00000000, 0x000caf84, 0x000caf84, 0x00000000 },
33573 -    { 0x00009ab4, 0x00000000, 0x00000000, 0x000caf88, 0x000caf88, 0x00000000 },
33574 -    { 0x00009ab8, 0x00000000, 0x00000000, 0x000caf8c, 0x000caf8c, 0x00000000 },
33575 -    { 0x00009abc, 0x00000000, 0x00000000, 0x000caf90, 0x000caf90, 0x00000000 },
33576 -    { 0x00009ac0, 0x00000000, 0x00000000, 0x000db30c, 0x000db30c, 0x00000000 },
33577 -    { 0x00009ac4, 0x00000000, 0x00000000, 0x000db310, 0x000db310, 0x00000000 },
33578 -    { 0x00009ac8, 0x00000000, 0x00000000, 0x000db384, 0x000db384, 0x00000000 },
33579 -    { 0x00009acc, 0x00000000, 0x00000000, 0x000db388, 0x000db388, 0x00000000 },
33580 -    { 0x00009ad0, 0x00000000, 0x00000000, 0x000db324, 0x000db324, 0x00000000 },
33581 -    { 0x00009ad4, 0x00000000, 0x00000000, 0x000eb704, 0x000eb704, 0x00000000 },
33582 -    { 0x00009ad8, 0x00000000, 0x00000000, 0x000eb6a4, 0x000eb6a4, 0x00000000 },
33583 -    { 0x00009adc, 0x00000000, 0x00000000, 0x000eb6a8, 0x000eb6a8, 0x00000000 },
33584 -    { 0x00009ae0, 0x00000000, 0x00000000, 0x000eb710, 0x000eb710, 0x00000000 },
33585 -    { 0x00009ae4, 0x00000000, 0x00000000, 0x000eb714, 0x000eb714, 0x00000000 },
33586 -    { 0x00009ae8, 0x00000000, 0x00000000, 0x000eb720, 0x000eb720, 0x00000000 },
33587 -    { 0x00009aec, 0x00000000, 0x00000000, 0x000eb724, 0x000eb724, 0x00000000 },
33588 -    { 0x00009af0, 0x00000000, 0x00000000, 0x000eb728, 0x000eb728, 0x00000000 },
33589 -    { 0x00009af4, 0x00000000, 0x00000000, 0x000eb72c, 0x000eb72c, 0x00000000 },
33590 -    { 0x00009af8, 0x00000000, 0x00000000, 0x000eb7a0, 0x000eb7a0, 0x00000000 },
33591 -    { 0x00009afc, 0x00000000, 0x00000000, 0x000eb7a4, 0x000eb7a4, 0x00000000 },
33592 -    { 0x00009b00, 0x00000000, 0x00000000, 0x000eb7a8, 0x000eb7a8, 0x00000000 },
33593 -    { 0x00009b04, 0x00000000, 0x00000000, 0x000eb7b0, 0x000eb7b0, 0x00000000 },
33594 -    { 0x00009b08, 0x00000000, 0x00000000, 0x000eb7b4, 0x000eb7b4, 0x00000000 },
33595 -    { 0x00009b0c, 0x00000000, 0x00000000, 0x000eb7b8, 0x000eb7b8, 0x00000000 },
33596 -    { 0x00009b10, 0x00000000, 0x00000000, 0x000eb7a5, 0x000eb7a5, 0x00000000 },
33597 -    { 0x00009b14, 0x00000000, 0x00000000, 0x000eb7a9, 0x000eb7a9, 0x00000000 },
33598 -    { 0x00009b18, 0x00000000, 0x00000000, 0x000eb7ad, 0x000eb7ad, 0x00000000 },
33599 -    { 0x00009b1c, 0x00000000, 0x00000000, 0x000eb7b1, 0x000eb7b1, 0x00000000 },
33600 -    { 0x00009b20, 0x00000000, 0x00000000, 0x000eb7b5, 0x000eb7b5, 0x00000000 },
33601 -    { 0x00009b24, 0x00000000, 0x00000000, 0x000eb7b9, 0x000eb7b9, 0x00000000 },
33602 -    { 0x00009b28, 0x00000000, 0x00000000, 0x000eb7c5, 0x000eb7c5, 0x00000000 },
33603 -    { 0x00009b2c, 0x00000000, 0x00000000, 0x000eb7c9, 0x000eb7c9, 0x00000000 },
33604 -    { 0x00009b30, 0x00000000, 0x00000000, 0x000eb7d1, 0x000eb7d1, 0x00000000 },
33605 -    { 0x00009b34, 0x00000000, 0x00000000, 0x000eb7d5, 0x000eb7d5, 0x00000000 },
33606 -    { 0x00009b38, 0x00000000, 0x00000000, 0x000eb7d9, 0x000eb7d9, 0x00000000 },
33607 -    { 0x00009b3c, 0x00000000, 0x00000000, 0x000eb7c6, 0x000eb7c6, 0x00000000 },
33608 -    { 0x00009b40, 0x00000000, 0x00000000, 0x000eb7ca, 0x000eb7ca, 0x00000000 },
33609 -    { 0x00009b44, 0x00000000, 0x00000000, 0x000eb7ce, 0x000eb7ce, 0x00000000 },
33610 -    { 0x00009b48, 0x00000000, 0x00000000, 0x000eb7d2, 0x000eb7d2, 0x00000000 },
33611 -    { 0x00009b4c, 0x00000000, 0x00000000, 0x000eb7d6, 0x000eb7d6, 0x00000000 },
33612 -    { 0x00009b50, 0x00000000, 0x00000000, 0x000eb7c3, 0x000eb7c3, 0x00000000 },
33613 -    { 0x00009b54, 0x00000000, 0x00000000, 0x000eb7c7, 0x000eb7c7, 0x00000000 },
33614 -    { 0x00009b58, 0x00000000, 0x00000000, 0x000eb7cb, 0x000eb7cb, 0x00000000 },
33615 -    { 0x00009b5c, 0x00000000, 0x00000000, 0x000eb7cf, 0x000eb7cf, 0x00000000 },
33616 -    { 0x00009b60, 0x00000000, 0x00000000, 0x000eb7d7, 0x000eb7d7, 0x00000000 },
33617 -    { 0x00009b64, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33618 -    { 0x00009b68, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33619 -    { 0x00009b6c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33620 -    { 0x00009b70, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33621 -    { 0x00009b74, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33622 -    { 0x00009b78, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33623 -    { 0x00009b7c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33624 -    { 0x00009b80, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33625 -    { 0x00009b84, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33626 -    { 0x00009b88, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33627 -    { 0x00009b8c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33628 -    { 0x00009b90, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33629 -    { 0x00009b94, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33630 -    { 0x00009b98, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33631 -    { 0x00009b9c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33632 -    { 0x00009ba0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33633 -    { 0x00009ba4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33634 -    { 0x00009ba8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33635 -    { 0x00009bac, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33636 -    { 0x00009bb0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33637 -    { 0x00009bb4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33638 -    { 0x00009bb8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33639 -    { 0x00009bbc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33640 -    { 0x00009bc0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33641 -    { 0x00009bc4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33642 -    { 0x00009bc8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33643 -    { 0x00009bcc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33644 -    { 0x00009bd0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33645 -    { 0x00009bd4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33646 -    { 0x00009bd8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33647 -    { 0x00009bdc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33648 -    { 0x00009be0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33649 -    { 0x00009be4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33650 -    { 0x00009be8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33651 -    { 0x00009bec, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33652 -    { 0x00009bf0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33653 -    { 0x00009bf4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33654 -    { 0x00009bf8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33655 -    { 0x00009bfc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33656 -    { 0x0000aa00, 0x00000000, 0x00000000, 0x00058084, 0x00058084, 0x00000000 },
33657 -    { 0x0000aa04, 0x00000000, 0x00000000, 0x00058088, 0x00058088, 0x00000000 },
33658 -    { 0x0000aa08, 0x00000000, 0x00000000, 0x0005808c, 0x0005808c, 0x00000000 },
33659 -    { 0x0000aa0c, 0x00000000, 0x00000000, 0x00058100, 0x00058100, 0x00000000 },
33660 -    { 0x0000aa10, 0x00000000, 0x00000000, 0x00058104, 0x00058104, 0x00000000 },
33661 -    { 0x0000aa14, 0x00000000, 0x00000000, 0x00058108, 0x00058108, 0x00000000 },
33662 -    { 0x0000aa18, 0x00000000, 0x00000000, 0x0005810c, 0x0005810c, 0x00000000 },
33663 -    { 0x0000aa1c, 0x00000000, 0x00000000, 0x00058110, 0x00058110, 0x00000000 },
33664 -    { 0x0000aa20, 0x00000000, 0x00000000, 0x00058114, 0x00058114, 0x00000000 },
33665 -    { 0x0000aa24, 0x00000000, 0x00000000, 0x00058180, 0x00058180, 0x00000000 },
33666 -    { 0x0000aa28, 0x00000000, 0x00000000, 0x00058184, 0x00058184, 0x00000000 },
33667 -    { 0x0000aa2c, 0x00000000, 0x00000000, 0x00058188, 0x00058188, 0x00000000 },
33668 -    { 0x0000aa30, 0x00000000, 0x00000000, 0x0005818c, 0x0005818c, 0x00000000 },
33669 -    { 0x0000aa34, 0x00000000, 0x00000000, 0x00058190, 0x00058190, 0x00000000 },
33670 -    { 0x0000aa38, 0x00000000, 0x00000000, 0x00058194, 0x00058194, 0x00000000 },
33671 -    { 0x0000aa3c, 0x00000000, 0x00000000, 0x000581a0, 0x000581a0, 0x00000000 },
33672 -    { 0x0000aa40, 0x00000000, 0x00000000, 0x0005820c, 0x0005820c, 0x00000000 },
33673 -    { 0x0000aa44, 0x00000000, 0x00000000, 0x000581a8, 0x000581a8, 0x00000000 },
33674 -    { 0x0000aa48, 0x00000000, 0x00000000, 0x00058284, 0x00058284, 0x00000000 },
33675 -    { 0x0000aa4c, 0x00000000, 0x00000000, 0x00058288, 0x00058288, 0x00000000 },
33676 -    { 0x0000aa50, 0x00000000, 0x00000000, 0x00058224, 0x00058224, 0x00000000 },
33677 -    { 0x0000aa54, 0x00000000, 0x00000000, 0x00058290, 0x00058290, 0x00000000 },
33678 -    { 0x0000aa58, 0x00000000, 0x00000000, 0x00058300, 0x00058300, 0x00000000 },
33679 -    { 0x0000aa5c, 0x00000000, 0x00000000, 0x00058304, 0x00058304, 0x00000000 },
33680 -    { 0x0000aa60, 0x00000000, 0x00000000, 0x00058308, 0x00058308, 0x00000000 },
33681 -    { 0x0000aa64, 0x00000000, 0x00000000, 0x0005830c, 0x0005830c, 0x00000000 },
33682 -    { 0x0000aa68, 0x00000000, 0x00000000, 0x00058380, 0x00058380, 0x00000000 },
33683 -    { 0x0000aa6c, 0x00000000, 0x00000000, 0x00058384, 0x00058384, 0x00000000 },
33684 -    { 0x0000aa70, 0x00000000, 0x00000000, 0x00068700, 0x00068700, 0x00000000 },
33685 -    { 0x0000aa74, 0x00000000, 0x00000000, 0x00068704, 0x00068704, 0x00000000 },
33686 -    { 0x0000aa78, 0x00000000, 0x00000000, 0x00068708, 0x00068708, 0x00000000 },
33687 -    { 0x0000aa7c, 0x00000000, 0x00000000, 0x0006870c, 0x0006870c, 0x00000000 },
33688 -    { 0x0000aa80, 0x00000000, 0x00000000, 0x00068780, 0x00068780, 0x00000000 },
33689 -    { 0x0000aa84, 0x00000000, 0x00000000, 0x00068784, 0x00068784, 0x00000000 },
33690 -    { 0x0000aa88, 0x00000000, 0x00000000, 0x00078b00, 0x00078b00, 0x00000000 },
33691 -    { 0x0000aa8c, 0x00000000, 0x00000000, 0x00078b04, 0x00078b04, 0x00000000 },
33692 -    { 0x0000aa90, 0x00000000, 0x00000000, 0x00078b08, 0x00078b08, 0x00000000 },
33693 -    { 0x0000aa94, 0x00000000, 0x00000000, 0x00078b0c, 0x00078b0c, 0x00000000 },
33694 -    { 0x0000aa98, 0x00000000, 0x00000000, 0x00078b80, 0x00078b80, 0x00000000 },
33695 -    { 0x0000aa9c, 0x00000000, 0x00000000, 0x00078b84, 0x00078b84, 0x00000000 },
33696 -    { 0x0000aaa0, 0x00000000, 0x00000000, 0x00078b88, 0x00078b88, 0x00000000 },
33697 -    { 0x0000aaa4, 0x00000000, 0x00000000, 0x00078b8c, 0x00078b8c, 0x00000000 },
33698 -    { 0x0000aaa8, 0x00000000, 0x00000000, 0x00078b90, 0x00078b90, 0x00000000 },
33699 -    { 0x0000aaac, 0x00000000, 0x00000000, 0x000caf80, 0x000caf80, 0x00000000 },
33700 -    { 0x0000aab0, 0x00000000, 0x00000000, 0x000caf84, 0x000caf84, 0x00000000 },
33701 -    { 0x0000aab4, 0x00000000, 0x00000000, 0x000caf88, 0x000caf88, 0x00000000 },
33702 -    { 0x0000aab8, 0x00000000, 0x00000000, 0x000caf8c, 0x000caf8c, 0x00000000 },
33703 -    { 0x0000aabc, 0x00000000, 0x00000000, 0x000caf90, 0x000caf90, 0x00000000 },
33704 -    { 0x0000aac0, 0x00000000, 0x00000000, 0x000db30c, 0x000db30c, 0x00000000 },
33705 -    { 0x0000aac4, 0x00000000, 0x00000000, 0x000db310, 0x000db310, 0x00000000 },
33706 -    { 0x0000aac8, 0x00000000, 0x00000000, 0x000db384, 0x000db384, 0x00000000 },
33707 -    { 0x0000aacc, 0x00000000, 0x00000000, 0x000db388, 0x000db388, 0x00000000 },
33708 -    { 0x0000aad0, 0x00000000, 0x00000000, 0x000db324, 0x000db324, 0x00000000 },
33709 -    { 0x0000aad4, 0x00000000, 0x00000000, 0x000eb704, 0x000eb704, 0x00000000 },
33710 -    { 0x0000aad8, 0x00000000, 0x00000000, 0x000eb6a4, 0x000eb6a4, 0x00000000 },
33711 -    { 0x0000aadc, 0x00000000, 0x00000000, 0x000eb6a8, 0x000eb6a8, 0x00000000 },
33712 -    { 0x0000aae0, 0x00000000, 0x00000000, 0x000eb710, 0x000eb710, 0x00000000 },
33713 -    { 0x0000aae4, 0x00000000, 0x00000000, 0x000eb714, 0x000eb714, 0x00000000 },
33714 -    { 0x0000aae8, 0x00000000, 0x00000000, 0x000eb720, 0x000eb720, 0x00000000 },
33715 -    { 0x0000aaec, 0x00000000, 0x00000000, 0x000eb724, 0x000eb724, 0x00000000 },
33716 -    { 0x0000aaf0, 0x00000000, 0x00000000, 0x000eb728, 0x000eb728, 0x00000000 },
33717 -    { 0x0000aaf4, 0x00000000, 0x00000000, 0x000eb72c, 0x000eb72c, 0x00000000 },
33718 -    { 0x0000aaf8, 0x00000000, 0x00000000, 0x000eb7a0, 0x000eb7a0, 0x00000000 },
33719 -    { 0x0000aafc, 0x00000000, 0x00000000, 0x000eb7a4, 0x000eb7a4, 0x00000000 },
33720 -    { 0x0000ab00, 0x00000000, 0x00000000, 0x000eb7a8, 0x000eb7a8, 0x00000000 },
33721 -    { 0x0000ab04, 0x00000000, 0x00000000, 0x000eb7b0, 0x000eb7b0, 0x00000000 },
33722 -    { 0x0000ab08, 0x00000000, 0x00000000, 0x000eb7b4, 0x000eb7b4, 0x00000000 },
33723 -    { 0x0000ab0c, 0x00000000, 0x00000000, 0x000eb7b8, 0x000eb7b8, 0x00000000 },
33724 -    { 0x0000ab10, 0x00000000, 0x00000000, 0x000eb7a5, 0x000eb7a5, 0x00000000 },
33725 -    { 0x0000ab14, 0x00000000, 0x00000000, 0x000eb7a9, 0x000eb7a9, 0x00000000 },
33726 -    { 0x0000ab18, 0x00000000, 0x00000000, 0x000eb7ad, 0x000eb7ad, 0x00000000 },
33727 -    { 0x0000ab1c, 0x00000000, 0x00000000, 0x000eb7b1, 0x000eb7b1, 0x00000000 },
33728 -    { 0x0000ab20, 0x00000000, 0x00000000, 0x000eb7b5, 0x000eb7b5, 0x00000000 },
33729 -    { 0x0000ab24, 0x00000000, 0x00000000, 0x000eb7b9, 0x000eb7b9, 0x00000000 },
33730 -    { 0x0000ab28, 0x00000000, 0x00000000, 0x000eb7c5, 0x000eb7c5, 0x00000000 },
33731 -    { 0x0000ab2c, 0x00000000, 0x00000000, 0x000eb7c9, 0x000eb7c9, 0x00000000 },
33732 -    { 0x0000ab30, 0x00000000, 0x00000000, 0x000eb7d1, 0x000eb7d1, 0x00000000 },
33733 -    { 0x0000ab34, 0x00000000, 0x00000000, 0x000eb7d5, 0x000eb7d5, 0x00000000 },
33734 -    { 0x0000ab38, 0x00000000, 0x00000000, 0x000eb7d9, 0x000eb7d9, 0x00000000 },
33735 -    { 0x0000ab3c, 0x00000000, 0x00000000, 0x000eb7c6, 0x000eb7c6, 0x00000000 },
33736 -    { 0x0000ab40, 0x00000000, 0x00000000, 0x000eb7ca, 0x000eb7ca, 0x00000000 },
33737 -    { 0x0000ab44, 0x00000000, 0x00000000, 0x000eb7ce, 0x000eb7ce, 0x00000000 },
33738 -    { 0x0000ab48, 0x00000000, 0x00000000, 0x000eb7d2, 0x000eb7d2, 0x00000000 },
33739 -    { 0x0000ab4c, 0x00000000, 0x00000000, 0x000eb7d6, 0x000eb7d6, 0x00000000 },
33740 -    { 0x0000ab50, 0x00000000, 0x00000000, 0x000eb7c3, 0x000eb7c3, 0x00000000 },
33741 -    { 0x0000ab54, 0x00000000, 0x00000000, 0x000eb7c7, 0x000eb7c7, 0x00000000 },
33742 -    { 0x0000ab58, 0x00000000, 0x00000000, 0x000eb7cb, 0x000eb7cb, 0x00000000 },
33743 -    { 0x0000ab5c, 0x00000000, 0x00000000, 0x000eb7cf, 0x000eb7cf, 0x00000000 },
33744 -    { 0x0000ab60, 0x00000000, 0x00000000, 0x000eb7d7, 0x000eb7d7, 0x00000000 },
33745 -    { 0x0000ab64, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33746 -    { 0x0000ab68, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33747 -    { 0x0000ab6c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33748 -    { 0x0000ab70, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33749 -    { 0x0000ab74, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33750 -    { 0x0000ab78, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33751 -    { 0x0000ab7c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33752 -    { 0x0000ab80, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33753 -    { 0x0000ab84, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33754 -    { 0x0000ab88, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33755 -    { 0x0000ab8c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33756 -    { 0x0000ab90, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33757 -    { 0x0000ab94, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33758 -    { 0x0000ab98, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33759 -    { 0x0000ab9c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33760 -    { 0x0000aba0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33761 -    { 0x0000aba4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33762 -    { 0x0000aba8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33763 -    { 0x0000abac, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33764 -    { 0x0000abb0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33765 -    { 0x0000abb4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33766 -    { 0x0000abb8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33767 -    { 0x0000abbc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33768 -    { 0x0000abc0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33769 -    { 0x0000abc4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33770 -    { 0x0000abc8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33771 -    { 0x0000abcc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33772 -    { 0x0000abd0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33773 -    { 0x0000abd4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33774 -    { 0x0000abd8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33775 -    { 0x0000abdc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33776 -    { 0x0000abe0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33777 -    { 0x0000abe4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33778 -    { 0x0000abe8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33779 -    { 0x0000abec, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33780 -    { 0x0000abf0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33781 -    { 0x0000abf4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33782 -    { 0x0000abf8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33783 -    { 0x0000abfc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000 },
33784 -    { 0x0000a204, 0x00000004, 0x00000004, 0x00000004, 0x00000004, 0x00000004 },
33785 -    { 0x0000a20c, 0x00000014, 0x00000014, 0x0001f000, 0x0001f000, 0x0001f000 },
33786 -    { 0x0000b20c, 0x00000014, 0x00000014, 0x0001f000, 0x0001f000, 0x0001f000 },
33787 -    { 0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a },
33788 -    { 0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000 },
33789 -    { 0x0000a250, 0x0004f000, 0x0004f000, 0x0004a000, 0x0004a000, 0x0004a000 },
33790 -    { 0x0000a358, 0x7999aa02, 0x7999aa02, 0x7999aa0e, 0x7999aa0e, 0x7999aa0e },
33791 -};
33792 -
33793 -static const u_int32_t ar9271Common_9271[][2] = {
33794 -    { 0x0000000c, 0x00000000 },
33795 -    { 0x00000030, 0x00020045 },
33796 -    { 0x00000034, 0x00000005 },
33797 -    { 0x00000040, 0x00000000 },
33798 -    { 0x00000044, 0x00000008 },
33799 -    { 0x00000048, 0x00000008 },
33800 -    { 0x0000004c, 0x00000010 },
33801 -    { 0x00000050, 0x00000000 },
33802 -    { 0x00000054, 0x0000001f },
33803 -    { 0x00000800, 0x00000000 },
33804 -    { 0x00000804, 0x00000000 },
33805 -    { 0x00000808, 0x00000000 },
33806 -    { 0x0000080c, 0x00000000 },
33807 -    { 0x00000810, 0x00000000 },
33808 -    { 0x00000814, 0x00000000 },
33809 -    { 0x00000818, 0x00000000 },
33810 -    { 0x0000081c, 0x00000000 },
33811 -    { 0x00000820, 0x00000000 },
33812 -    { 0x00000824, 0x00000000 },
33813 -    { 0x00001040, 0x002ffc0f },
33814 -    { 0x00001044, 0x002ffc0f },
33815 -    { 0x00001048, 0x002ffc0f },
33816 -    { 0x0000104c, 0x002ffc0f },
33817 -    { 0x00001050, 0x002ffc0f },
33818 -    { 0x00001054, 0x002ffc0f },
33819 -    { 0x00001058, 0x002ffc0f },
33820 -    { 0x0000105c, 0x002ffc0f },
33821 -    { 0x00001060, 0x002ffc0f },
33822 -    { 0x00001064, 0x002ffc0f },
33823 -    { 0x00001230, 0x00000000 },
33824 -    { 0x00001270, 0x00000000 },
33825 -    { 0x00001038, 0x00000000 },
33826 -    { 0x00001078, 0x00000000 },
33827 -    { 0x000010b8, 0x00000000 },
33828 -    { 0x000010f8, 0x00000000 },
33829 -    { 0x00001138, 0x00000000 },
33830 -    { 0x00001178, 0x00000000 },
33831 -    { 0x000011b8, 0x00000000 },
33832 -    { 0x000011f8, 0x00000000 },
33833 -    { 0x00001238, 0x00000000 },
33834 -    { 0x00001278, 0x00000000 },
33835 -    { 0x000012b8, 0x00000000 },
33836 -    { 0x000012f8, 0x00000000 },
33837 -    { 0x00001338, 0x00000000 },
33838 -    { 0x00001378, 0x00000000 },
33839 -    { 0x000013b8, 0x00000000 },
33840 -    { 0x000013f8, 0x00000000 },
33841 -    { 0x00001438, 0x00000000 },
33842 -    { 0x00001478, 0x00000000 },
33843 -    { 0x000014b8, 0x00000000 },
33844 -    { 0x000014f8, 0x00000000 },
33845 -    { 0x00001538, 0x00000000 },
33846 -    { 0x00001578, 0x00000000 },
33847 -    { 0x000015b8, 0x00000000 },
33848 -    { 0x000015f8, 0x00000000 },
33849 -    { 0x00001638, 0x00000000 },
33850 -    { 0x00001678, 0x00000000 },
33851 -    { 0x000016b8, 0x00000000 },
33852 -    { 0x000016f8, 0x00000000 },
33853 -    { 0x00001738, 0x00000000 },
33854 -    { 0x00001778, 0x00000000 },
33855 -    { 0x000017b8, 0x00000000 },
33856 -    { 0x000017f8, 0x00000000 },
33857 -    { 0x0000103c, 0x00000000 },
33858 -    { 0x0000107c, 0x00000000 },
33859 -    { 0x000010bc, 0x00000000 },
33860 -    { 0x000010fc, 0x00000000 },
33861 -    { 0x0000113c, 0x00000000 },
33862 -    { 0x0000117c, 0x00000000 },
33863 -    { 0x000011bc, 0x00000000 },
33864 -    { 0x000011fc, 0x00000000 },
33865 -    { 0x0000123c, 0x00000000 },
33866 -    { 0x0000127c, 0x00000000 },
33867 -    { 0x000012bc, 0x00000000 },
33868 -    { 0x000012fc, 0x00000000 },
33869 -    { 0x0000133c, 0x00000000 },
33870 -    { 0x0000137c, 0x00000000 },
33871 -    { 0x000013bc, 0x00000000 },
33872 -    { 0x000013fc, 0x00000000 },
33873 -    { 0x0000143c, 0x00000000 },
33874 -    { 0x0000147c, 0x00000000 },
33875 -    { 0x00004030, 0x00000002 },
33876 -    { 0x0000403c, 0x00000002 },
33877 -    { 0x00004024, 0x0000001f },
33878 -    { 0x00004060, 0x00000000 },
33879 -    { 0x00004064, 0x00000000 },
33880 -    { 0x00008004, 0x00000000 },
33881 -    { 0x00008008, 0x00000000 },
33882 -    { 0x0000800c, 0x00000000 },
33883 -    { 0x00008018, 0x00000700 },
33884 -    { 0x00008020, 0x00000000 },
33885 -    { 0x00008038, 0x00000000 },
33886 -    { 0x0000803c, 0x00000000 },
33887 -    { 0x00008048, 0x00000000 },
33888 -    { 0x00008054, 0x00000000 },
33889 -    { 0x00008058, 0x00000000 },
33890 -    { 0x0000805c, 0x000fc78f },
33891 -    { 0x00008060, 0x0000000f },
33892 -    { 0x00008064, 0x00000000 },
33893 -    { 0x00008070, 0x00000000 },
33894 -    { 0x000080b0, 0x00000000 },
33895 -    { 0x000080b4, 0x00000000 },
33896 -    { 0x000080b8, 0x00000000 },
33897 -    { 0x000080bc, 0x00000000 },
33898 -    { 0x000080c0, 0x2a80001a },
33899 -    { 0x000080c4, 0x05dc01e0 },
33900 -    { 0x000080c8, 0x1f402710 },
33901 -    { 0x000080cc, 0x01f40000 },
33902 -    { 0x000080d0, 0x00001e00 },
33903 -    { 0x000080d4, 0x00000000 },
33904 -    { 0x000080d8, 0x00400000 },
33905 -    { 0x000080e0, 0xffffffff },
33906 -    { 0x000080e4, 0x0000ffff },
33907 -    { 0x000080e8, 0x003f3f3f },
33908 -    { 0x000080ec, 0x00000000 },
33909 -    { 0x000080f0, 0x00000000 },
33910 -    { 0x000080f4, 0x00000000 },
33911 -    { 0x000080f8, 0x00000000 },
33912 -    { 0x000080fc, 0x00020000 },
33913 -    { 0x00008100, 0x00020000 },
33914 -    { 0x00008104, 0x00000001 },
33915 -    { 0x00008108, 0x00000052 },
33916 -    { 0x0000810c, 0x00000000 },
33917 -    { 0x00008110, 0x00000168 },
33918 -    { 0x00008118, 0x000100aa },
33919 -    { 0x0000811c, 0x00003210 },
33920 -    { 0x00008120, 0x08f04810 },
33921 -    { 0x00008124, 0x00000000 },
33922 -    { 0x00008128, 0x00000000 },
33923 -    { 0x0000812c, 0x00000000 },
33924 -    { 0x00008130, 0x00000000 },
33925 -    { 0x00008134, 0x00000000 },
33926 -    { 0x00008138, 0x00000000 },
33927 -    { 0x0000813c, 0x00000000 },
33928 -    { 0x00008144, 0xffffffff },
33929 -    { 0x00008168, 0x00000000 },
33930 -    { 0x0000816c, 0x00000000 },
33931 -    { 0x00008170, 0x32143320 },
33932 -    { 0x00008174, 0xfaa4fa50 },
33933 -    { 0x00008178, 0x00000100 },
33934 -    { 0x0000817c, 0x00000000 },
33935 -    { 0x000081c0, 0x00000000 },
33936 -    { 0x000081d0, 0x0000320a },
33937 -    { 0x000081ec, 0x00000000 },
33938 -    { 0x000081f0, 0x00000000 },
33939 -    { 0x000081f4, 0x00000000 },
33940 -    { 0x000081f8, 0x00000000 },
33941 -    { 0x000081fc, 0x00000000 },
33942 -    { 0x00008200, 0x00000000 },
33943 -    { 0x00008204, 0x00000000 },
33944 -    { 0x00008208, 0x00000000 },
33945 -    { 0x0000820c, 0x00000000 },
33946 -    { 0x00008210, 0x00000000 },
33947 -    { 0x00008214, 0x00000000 },
33948 -    { 0x00008218, 0x00000000 },
33949 -    { 0x0000821c, 0x00000000 },
33950 -    { 0x00008220, 0x00000000 },
33951 -    { 0x00008224, 0x00000000 },
33952 -    { 0x00008228, 0x00000000 },
33953 -    { 0x0000822c, 0x00000000 },
33954 -    { 0x00008230, 0x00000000 },
33955 -    { 0x00008234, 0x00000000 },
33956 -    { 0x00008238, 0x00000000 },
33957 -    { 0x0000823c, 0x00000000 },
33958 -    { 0x00008240, 0x00100000 },
33959 -    { 0x00008244, 0x0010f400 },
33960 -    { 0x00008248, 0x00000100 },
33961 -    { 0x0000824c, 0x0001e800 },
33962 -    { 0x00008250, 0x00000000 },
33963 -    { 0x00008254, 0x00000000 },
33964 -    { 0x00008258, 0x00000000 },
33965 -    { 0x0000825c, 0x400000ff },
33966 -    { 0x00008260, 0x00080922 },
33967 -    { 0x00008264, 0xa8a00010 },
33968 -    { 0x00008270, 0x00000000 },
33969 -    { 0x00008274, 0x40000000 },
33970 -    { 0x00008278, 0x003e4180 },
33971 -    { 0x0000827c, 0x00000000 },
33972 -    { 0x00008284, 0x0000002c },
33973 -    { 0x00008288, 0x0000002c },
33974 -    { 0x0000828c, 0x00000000 },
33975 -    { 0x00008294, 0x00000000 },
33976 -    { 0x00008298, 0x00000000 },
33977 -    { 0x0000829c, 0x00000000 },
33978 -    { 0x00008300, 0x00000040 },
33979 -    { 0x00008314, 0x00000000 },
33980 -    { 0x00008328, 0x00000000 },
33981 -    { 0x0000832c, 0x00000001 },
33982 -    { 0x00008330, 0x00000302 },
33983 -    { 0x00008334, 0x00000e00 },
33984 -    { 0x00008338, 0x00ff0000 },
33985 -    { 0x0000833c, 0x00000000 },
33986 -    { 0x00008340, 0x00010380 },
33987 -    { 0x00008344, 0x00581043 },
33988 -    { 0x00007010, 0x00000030 },
33989 -    { 0x00007034, 0x00000002 },
33990 -    { 0x00007038, 0x000004c2 },
33991 -    { 0x00007800, 0x00140000 },
33992 -    { 0x00007804, 0x0e4548d8 },
33993 -    { 0x00007808, 0x54214514 },
33994 -    { 0x0000780c, 0x02025820 },
33995 -    { 0x00007810, 0x71c0d388 },
33996 -    { 0x00007814, 0x924934a8 },
33997 -    { 0x0000781c, 0x00000000 },
33998 -    { 0x00007828, 0x66964300 },
33999 -    { 0x0000782c, 0x8db6d961 },
34000 -    { 0x00007830, 0x8db6d96c },
34001 -    { 0x00007834, 0x6140008b },
34002 -    { 0x0000783c, 0x72ee0a72 },
34003 -    { 0x00007840, 0xbbfffffc },
34004 -    { 0x00007844, 0x000c0db6 },
34005 -    { 0x00007848, 0x6db61b6f },
34006 -    { 0x0000784c, 0x6d9b66db },
34007 -    { 0x00007850, 0x6d8c6dba },
34008 -    { 0x00007854, 0x00040000 },
34009 -    { 0x00007858, 0xdb003012 },
34010 -    { 0x0000785c, 0x04924914 },
34011 -    { 0x00007860, 0x21084210 },
34012 -    { 0x00007864, 0xf7d7ffde },
34013 -    { 0x00007868, 0xc2034080 },
34014 -    { 0x00007870, 0x10142c00 },
34015 -    { 0x00009808, 0x00000000 },
34016 -    { 0x0000980c, 0xafe68e30 },
34017 -    { 0x00009810, 0xfd14e000 },
34018 -    { 0x00009814, 0x9c0a9f6b },
34019 -    { 0x0000981c, 0x00000000 },
34020 -    { 0x0000982c, 0x0000a000 },
34021 -    { 0x00009830, 0x00000000 },
34022 -    { 0x0000983c, 0x00200400 },
34023 -    { 0x0000984c, 0x0040233c },
34024 -    { 0x00009854, 0x00000044 },
34025 -    { 0x00009900, 0x00000000 },
34026 -    { 0x00009904, 0x00000000 },
34027 -    { 0x00009908, 0x00000000 },
34028 -    { 0x0000990c, 0x00000000 },
34029 -    { 0x0000991c, 0x10000fff },
34030 -    { 0x00009920, 0x04900000 },
34031 -    { 0x00009928, 0x00000001 },
34032 -    { 0x0000992c, 0x00000004 },
34033 -    { 0x00009934, 0x1e1f2022 },
34034 -    { 0x00009938, 0x0a0b0c0d },
34035 -    { 0x0000993c, 0x00000000 },
34036 -    { 0x00009940, 0x14750604 },
34037 -    { 0x00009948, 0x9280c00a },
34038 -    { 0x0000994c, 0x00020028 },
34039 -    { 0x00009954, 0x5f3ca3de },
34040 -    { 0x00009958, 0x0108ecff },
34041 -    { 0x00009968, 0x000003ce },
34042 -    { 0x00009970, 0x192bb514 },
34043 -    { 0x00009974, 0x00000000 },
34044 -    { 0x00009978, 0x00000001 },
34045 -    { 0x0000997c, 0x00000000 },
34046 -    { 0x00009980, 0x00000000 },
34047 -    { 0x00009984, 0x00000000 },
34048 -    { 0x00009988, 0x00000000 },
34049 -    { 0x0000998c, 0x00000000 },
34050 -    { 0x00009990, 0x00000000 },
34051 -    { 0x00009994, 0x00000000 },
34052 -    { 0x00009998, 0x00000000 },
34053 -    { 0x0000999c, 0x00000000 },
34054 -    { 0x000099a0, 0x00000000 },
34055 -    { 0x000099a4, 0x00000001 },
34056 -    { 0x000099a8, 0x201fff00 },
34057 -    { 0x000099ac, 0x2def0400 },
34058 -    { 0x000099b0, 0x03051000 },
34059 -    { 0x000099b4, 0x00000820 },
34060 -    { 0x000099dc, 0x00000000 },
34061 -    { 0x000099e0, 0x00000000 },
34062 -    { 0x000099e4, 0xaaaaaaaa },
34063 -    { 0x000099e8, 0x3c466478 },
34064 -    { 0x000099ec, 0x0cc80caa },
34065 -    { 0x000099f0, 0x00000000 },
34066 -    { 0x0000a208, 0x803e68c8 },
34067 -    { 0x0000a210, 0x4080a333 },
34068 -    { 0x0000a214, 0x00206c10 },
34069 -    { 0x0000a218, 0x009c4060 },
34070 -    { 0x0000a220, 0x01834061 },
34071 -    { 0x0000a224, 0x00000400 },
34072 -    { 0x0000a228, 0x000003b5 },
34073 -    { 0x0000a22c, 0x00000000 },
34074 -    { 0x0000a234, 0x20202020 },
34075 -    { 0x0000a238, 0x20202020 },
34076 -    { 0x0000a244, 0x00000000 },
34077 -    { 0x0000a248, 0xfffffffc },
34078 -    { 0x0000a24c, 0x00000000 },
34079 -    { 0x0000a254, 0x00000000 },
34080 -    { 0x0000a258, 0x0ccb5380 },
34081 -    { 0x0000a25c, 0x15151501 },
34082 -    { 0x0000a260, 0xdfa90f01 },
34083 -    { 0x0000a268, 0x00000000 },
34084 -    { 0x0000a26c, 0x0ebae9e6 },
34085 -    { 0x0000a388, 0x0c000000 },
34086 -    { 0x0000a38c, 0x20202020 },
34087 -    { 0x0000a390, 0x20202020 },
34088 -    { 0x0000a39c, 0x00000001 },
34089 -    { 0x0000a3a0, 0x00000000 },
34090 -    { 0x0000a3a4, 0x00000000 },
34091 -    { 0x0000a3a8, 0x00000000 },
34092 -    { 0x0000a3ac, 0x00000000 },
34093 -    { 0x0000a3b0, 0x00000000 },
34094 -    { 0x0000a3b4, 0x00000000 },
34095 -    { 0x0000a3b8, 0x00000000 },
34096 -    { 0x0000a3bc, 0x00000000 },
34097 -    { 0x0000a3c0, 0x00000000 },
34098 -    { 0x0000a3c4, 0x00000000 },
34099 -    { 0x0000a3cc, 0x20202020 },
34100 -    { 0x0000a3d0, 0x20202020 },
34101 -    { 0x0000a3d4, 0x20202020 },
34102 -    { 0x0000a3e4, 0x00000000 },
34103 -    { 0x0000a3e8, 0x18c43433 },
34104 -    { 0x0000a3ec, 0x00f70081 },
34105 -    { 0x0000a3f0, 0x01036a2f },
34106 -    { 0x0000a3f4, 0x00000000 },
34107 -    { 0x0000d270, 0x0d820820 },
34108 -    { 0x0000d35c, 0x07ffffef },
34109 -    { 0x0000d360, 0x0fffffe7 },
34110 -    { 0x0000d364, 0x17ffffe5 },
34111 -    { 0x0000d368, 0x1fffffe4 },
34112 -    { 0x0000d36c, 0x37ffffe3 },
34113 -    { 0x0000d370, 0x3fffffe3 },
34114 -    { 0x0000d374, 0x57ffffe3 },
34115 -    { 0x0000d378, 0x5fffffe2 },
34116 -    { 0x0000d37c, 0x7fffffe2 },
34117 -    { 0x0000d380, 0x7f3c7bba },
34118 -    { 0x0000d384, 0xf3307ff0 },
34119 -};
34120 -
34121 -static const u_int32_t ar9271Common_normal_cck_fir_coeff_9271[][2] = {
34122 -    { 0x0000a1f4, 0x00fffeff },
34123 -    { 0x0000a1f8, 0x00f5f9ff },
34124 -    { 0x0000a1fc, 0xb79f6427 },
34125 -};
34126 -
34127 -static const u_int32_t ar9271Common_japan_2484_cck_fir_coeff_9271[][2] = {
34128 -    { 0x0000a1f4, 0x00000000 },
34129 -    { 0x0000a1f8, 0xefff0301 },
34130 -    { 0x0000a1fc, 0xca9228ee },
34131 -};
34132 -
34133 -static const u_int32_t ar9271Modes_9271_1_0_only[][6] = {
34134 -    { 0x00009910, 0x30002311, 0x30002311, 0x30002311, 0x30002311, 0x30002311 },
34135 -    { 0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001 },
34136 -};
34137 -
34138 -static const u_int32_t ar9271Modes_9271_ANI_reg[][6] = {
34139 -    { 0x00009850, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2 },
34140 -    { 0x0000985c, 0x3139605e, 0x3139605e, 0x3137605e, 0x3137605e, 0x3139605e },
34141 -    { 0x00009858, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e },
34142 -    { 0x0000986c, 0x06903881, 0x06903881, 0x06903881, 0x06903881, 0x06903881 },
34143 -    { 0x00009868, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0 },
34144 -    { 0x0000a208, 0x803e68c8, 0x803e68c8, 0x803e68c8, 0x803e68c8, 0x803e68c8 },
34145 -    { 0x00009924, 0xd00a8007, 0xd00a8007, 0xd00a800d, 0xd00a800d, 0xd00a800d },
34146 -    { 0x000099c0, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4 },
34147 -};
34148 -
34149 -static const u_int32_t ar9271Modes_normal_power_tx_gain_9271[][6] = {
34150 -    { 0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
34151 -    { 0x0000a304, 0x00000000, 0x00000000, 0x00009200, 0x00009200, 0x00000000 },
34152 -    { 0x0000a308, 0x00000000, 0x00000000, 0x00010208, 0x00010208, 0x00000000 },
34153 -    { 0x0000a30c, 0x00000000, 0x00000000, 0x00019608, 0x00019608, 0x00000000 },
34154 -    { 0x0000a310, 0x00000000, 0x00000000, 0x0001e610, 0x0001e610, 0x00000000 },
34155 -    { 0x0000a314, 0x00000000, 0x00000000, 0x0002d6d0, 0x0002d6d0, 0x00000000 },
34156 -    { 0x0000a318, 0x00000000, 0x00000000, 0x00039758, 0x00039758, 0x00000000 },
34157 -    { 0x0000a31c, 0x00000000, 0x00000000, 0x0003b759, 0x0003b759, 0x00000000 },
34158 -    { 0x0000a320, 0x00000000, 0x00000000, 0x0003d75a, 0x0003d75a, 0x00000000 },
34159 -    { 0x0000a324, 0x00000000, 0x00000000, 0x0004175c, 0x0004175c, 0x00000000 },
34160 -    { 0x0000a328, 0x00000000, 0x00000000, 0x0004575e, 0x0004575e, 0x00000000 },
34161 -    { 0x0000a32c, 0x00000000, 0x00000000, 0x0004979f, 0x0004979f, 0x00000000 },
34162 -    { 0x0000a330, 0x00000000, 0x00000000, 0x0004d7df, 0x0004d7df, 0x00000000 },
34163 -    { 0x0000a334, 0x000368de, 0x000368de, 0x000368de, 0x000368de, 0x00000000 },
34164 -    { 0x0000a338, 0x0003891e, 0x0003891e, 0x0003891e, 0x0003891e, 0x00000000 },
34165 -    { 0x0000a33c, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x00000000 },
34166 -    { 0x0000a340, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
34167 -    { 0x0000a344, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
34168 -    { 0x0000a348, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
34169 -    { 0x0000a34c, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
34170 -    { 0x0000a350, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
34171 -    { 0x0000a354, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
34172 -    { 0x00007838, 0x00000029, 0x00000029, 0x00000029, 0x00000029, 0x00000029 },
34173 -    { 0x00007824, 0x00d8abff, 0x00d8abff, 0x00d8abff, 0x00d8abff, 0x00d8abff },
34174 -    { 0x0000786c, 0x48609eb4, 0x48609eb4, 0x48609eb4, 0x48609eb4, 0x48609eb4 },
34175 -    { 0x00007820, 0x00000c04, 0x00000c04, 0x00000c04, 0x00000c04, 0x00000c04 },
34176 -    { 0x0000a274, 0x0a21c652, 0x0a21c652, 0x0a218652, 0x0a218652, 0x0a22a652 },
34177 -    { 0x0000a278, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd },
34178 -    { 0x0000a27c, 0x050e83bd, 0x050e83bd, 0x050e83bd, 0x050e83bd, 0x050e83bd },
34179 -    { 0x0000a394, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd },
34180 -    { 0x0000a398, 0x000003bd, 0x000003bd, 0x000003bd, 0x000003bd, 0x000003bd },
34181 -    { 0x0000a3dc, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd },
34182 -    { 0x0000a3e0, 0x000003bd, 0x000003bd, 0x000003bd, 0x000003bd, 0x000003bd },
34183 -};
34184 -
34185 -static const u_int32_t ar9271Modes_high_power_tx_gain_9271[][6] = {
34186 -    { 0x0000a300, 0x00000000, 0x00000000, 0x00010000, 0x00010000, 0x00000000 },
34187 -    { 0x0000a304, 0x00000000, 0x00000000, 0x00016200, 0x00016200, 0x00000000 },
34188 -    { 0x0000a308, 0x00000000, 0x00000000, 0x00018201, 0x00018201, 0x00000000 },
34189 -    { 0x0000a30c, 0x00000000, 0x00000000, 0x0001b240, 0x0001b240, 0x00000000 },
34190 -    { 0x0000a310, 0x00000000, 0x00000000, 0x0001d241, 0x0001d241, 0x00000000 },
34191 -    { 0x0000a314, 0x00000000, 0x00000000, 0x0001f600, 0x0001f600, 0x00000000 },
34192 -    { 0x0000a318, 0x00000000, 0x00000000, 0x00022800, 0x00022800, 0x00000000 },
34193 -    { 0x0000a31c, 0x00000000, 0x00000000, 0x00026802, 0x00026802, 0x00000000 },
34194 -    { 0x0000a320, 0x00000000, 0x00000000, 0x0002b805, 0x0002b805, 0x00000000 },
34195 -    { 0x0000a324, 0x00000000, 0x00000000, 0x0002ea41, 0x0002ea41, 0x00000000 },
34196 -    { 0x0000a328, 0x00000000, 0x00000000, 0x00038b00, 0x00038b00, 0x00000000 },
34197 -    { 0x0000a32c, 0x00000000, 0x00000000, 0x0003ab40, 0x0003ab40, 0x00000000 },
34198 -    { 0x0000a330, 0x00000000, 0x00000000, 0x0003cd80, 0x0003cd80, 0x00000000 },
34199 -    { 0x0000a334, 0x000368de, 0x000368de, 0x000368de, 0x000368de, 0x00000000 },
34200 -    { 0x0000a338, 0x0003891e, 0x0003891e, 0x0003891e, 0x0003891e, 0x00000000 },
34201 -    { 0x0000a33c, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x00000000 },
34202 -    { 0x0000a340, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
34203 -    { 0x0000a344, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
34204 -    { 0x0000a348, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
34205 -    { 0x0000a34c, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
34206 -    { 0x0000a350, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
34207 -    { 0x0000a354, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000 },
34208 -    { 0x00007838, 0x0000002b, 0x0000002b, 0x0000002b, 0x0000002b, 0x0000002b },
34209 -    { 0x00007824, 0x00d8a7ff, 0x00d8a7ff, 0x00d8a7ff, 0x00d8a7ff, 0x00d8a7ff },
34210 -    { 0x0000786c, 0x08609eb6, 0x08609eb6, 0x08609eba, 0x08609eba, 0x08609eb6 },
34211 -    { 0x00007820, 0x00000c00, 0x00000c00, 0x00000c00, 0x00000c00, 0x00000c00 },
34212 -    { 0x0000a274, 0x0a22a652, 0x0a22a652, 0x0a212652, 0x0a212652, 0x0a22a652 },
34213 -    { 0x0000a278, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7 },
34214 -    { 0x0000a27c, 0x05018063, 0x05038063, 0x05018063, 0x05018063, 0x05018063 },
34215 -    { 0x0000a394, 0x06318c63, 0x06318c63, 0x06318c63, 0x06318c63, 0x06318c63 },
34216 -    { 0x0000a398, 0x00000063, 0x00000063, 0x00000063, 0x00000063, 0x00000063 },
34217 -    { 0x0000a3dc, 0x06318c63, 0x06318c63, 0x06318c63, 0x06318c63, 0x06318c63 },
34218 -    { 0x0000a3e0, 0x00000063, 0x00000063, 0x00000063, 0x00000063, 0x00000063 },
34219 -};
34220 diff --git a/drivers/net/wireless/ath/ath9k/mac.c b/drivers/net/wireless/ath/ath9k/mac.c
34221 index 4a2060e..c0a9a71 100644
34222 --- a/drivers/net/wireless/ath/ath9k/mac.c
34223 +++ b/drivers/net/wireless/ath/ath9k/mac.c
34224 @@ -207,281 +207,6 @@ bool ath9k_hw_stoptxdma(struct ath_hw *ah, u32 q)
34225  }
34226  EXPORT_SYMBOL(ath9k_hw_stoptxdma);
34227  
34228 -void ath9k_hw_filltxdesc(struct ath_hw *ah, struct ath_desc *ds,
34229 -                        u32 segLen, bool firstSeg,
34230 -                        bool lastSeg, const struct ath_desc *ds0)
34231 -{
34232 -       struct ar5416_desc *ads = AR5416DESC(ds);
34233 -
34234 -       if (firstSeg) {
34235 -               ads->ds_ctl1 |= segLen | (lastSeg ? 0 : AR_TxMore);
34236 -       } else if (lastSeg) {
34237 -               ads->ds_ctl0 = 0;
34238 -               ads->ds_ctl1 = segLen;
34239 -               ads->ds_ctl2 = AR5416DESC_CONST(ds0)->ds_ctl2;
34240 -               ads->ds_ctl3 = AR5416DESC_CONST(ds0)->ds_ctl3;
34241 -       } else {
34242 -               ads->ds_ctl0 = 0;
34243 -               ads->ds_ctl1 = segLen | AR_TxMore;
34244 -               ads->ds_ctl2 = 0;
34245 -               ads->ds_ctl3 = 0;
34246 -       }
34247 -       ads->ds_txstatus0 = ads->ds_txstatus1 = 0;
34248 -       ads->ds_txstatus2 = ads->ds_txstatus3 = 0;
34249 -       ads->ds_txstatus4 = ads->ds_txstatus5 = 0;
34250 -       ads->ds_txstatus6 = ads->ds_txstatus7 = 0;
34251 -       ads->ds_txstatus8 = ads->ds_txstatus9 = 0;
34252 -}
34253 -EXPORT_SYMBOL(ath9k_hw_filltxdesc);
34254 -
34255 -void ath9k_hw_cleartxdesc(struct ath_hw *ah, struct ath_desc *ds)
34256 -{
34257 -       struct ar5416_desc *ads = AR5416DESC(ds);
34258 -
34259 -       ads->ds_txstatus0 = ads->ds_txstatus1 = 0;
34260 -       ads->ds_txstatus2 = ads->ds_txstatus3 = 0;
34261 -       ads->ds_txstatus4 = ads->ds_txstatus5 = 0;
34262 -       ads->ds_txstatus6 = ads->ds_txstatus7 = 0;
34263 -       ads->ds_txstatus8 = ads->ds_txstatus9 = 0;
34264 -}
34265 -EXPORT_SYMBOL(ath9k_hw_cleartxdesc);
34266 -
34267 -int ath9k_hw_txprocdesc(struct ath_hw *ah, struct ath_desc *ds,
34268 -                       struct ath_tx_status *ts)
34269 -{
34270 -       struct ar5416_desc *ads = AR5416DESC(ds);
34271 -
34272 -       if ((ads->ds_txstatus9 & AR_TxDone) == 0)
34273 -               return -EINPROGRESS;
34274 -
34275 -       ts->ts_seqnum = MS(ads->ds_txstatus9, AR_SeqNum);
34276 -       ts->ts_tstamp = ads->AR_SendTimestamp;
34277 -       ts->ts_status = 0;
34278 -       ts->ts_flags = 0;
34279 -
34280 -       if (ads->ds_txstatus1 & AR_FrmXmitOK)
34281 -               ts->ts_status |= ATH9K_TX_ACKED;
34282 -       if (ads->ds_txstatus1 & AR_ExcessiveRetries)
34283 -               ts->ts_status |= ATH9K_TXERR_XRETRY;
34284 -       if (ads->ds_txstatus1 & AR_Filtered)
34285 -               ts->ts_status |= ATH9K_TXERR_FILT;
34286 -       if (ads->ds_txstatus1 & AR_FIFOUnderrun) {
34287 -               ts->ts_status |= ATH9K_TXERR_FIFO;
34288 -               ath9k_hw_updatetxtriglevel(ah, true);
34289 -       }
34290 -       if (ads->ds_txstatus9 & AR_TxOpExceeded)
34291 -               ts->ts_status |= ATH9K_TXERR_XTXOP;
34292 -       if (ads->ds_txstatus1 & AR_TxTimerExpired)
34293 -               ts->ts_status |= ATH9K_TXERR_TIMER_EXPIRED;
34294 -
34295 -       if (ads->ds_txstatus1 & AR_DescCfgErr)
34296 -               ts->ts_flags |= ATH9K_TX_DESC_CFG_ERR;
34297 -       if (ads->ds_txstatus1 & AR_TxDataUnderrun) {
34298 -               ts->ts_flags |= ATH9K_TX_DATA_UNDERRUN;
34299 -               ath9k_hw_updatetxtriglevel(ah, true);
34300 -       }
34301 -       if (ads->ds_txstatus1 & AR_TxDelimUnderrun) {
34302 -               ts->ts_flags |= ATH9K_TX_DELIM_UNDERRUN;
34303 -               ath9k_hw_updatetxtriglevel(ah, true);
34304 -       }
34305 -       if (ads->ds_txstatus0 & AR_TxBaStatus) {
34306 -               ts->ts_flags |= ATH9K_TX_BA;
34307 -               ts->ba_low = ads->AR_BaBitmapLow;
34308 -               ts->ba_high = ads->AR_BaBitmapHigh;
34309 -       }
34310 -
34311 -       ts->ts_rateindex = MS(ads->ds_txstatus9, AR_FinalTxIdx);
34312 -       switch (ts->ts_rateindex) {
34313 -       case 0:
34314 -               ts->ts_ratecode = MS(ads->ds_ctl3, AR_XmitRate0);
34315 -               break;
34316 -       case 1:
34317 -               ts->ts_ratecode = MS(ads->ds_ctl3, AR_XmitRate1);
34318 -               break;
34319 -       case 2:
34320 -               ts->ts_ratecode = MS(ads->ds_ctl3, AR_XmitRate2);
34321 -               break;
34322 -       case 3:
34323 -               ts->ts_ratecode = MS(ads->ds_ctl3, AR_XmitRate3);
34324 -               break;
34325 -       }
34326 -
34327 -       ts->ts_rssi = MS(ads->ds_txstatus5, AR_TxRSSICombined);
34328 -       ts->ts_rssi_ctl0 = MS(ads->ds_txstatus0, AR_TxRSSIAnt00);
34329 -       ts->ts_rssi_ctl1 = MS(ads->ds_txstatus0, AR_TxRSSIAnt01);
34330 -       ts->ts_rssi_ctl2 = MS(ads->ds_txstatus0, AR_TxRSSIAnt02);
34331 -       ts->ts_rssi_ext0 = MS(ads->ds_txstatus5, AR_TxRSSIAnt10);
34332 -       ts->ts_rssi_ext1 = MS(ads->ds_txstatus5, AR_TxRSSIAnt11);
34333 -       ts->ts_rssi_ext2 = MS(ads->ds_txstatus5, AR_TxRSSIAnt12);
34334 -       ts->evm0 = ads->AR_TxEVM0;
34335 -       ts->evm1 = ads->AR_TxEVM1;
34336 -       ts->evm2 = ads->AR_TxEVM2;
34337 -       ts->ts_shortretry = MS(ads->ds_txstatus1, AR_RTSFailCnt);
34338 -       ts->ts_longretry = MS(ads->ds_txstatus1, AR_DataFailCnt);
34339 -       ts->ts_virtcol = MS(ads->ds_txstatus1, AR_VirtRetryCnt);
34340 -       ts->ts_antenna = 0;
34341 -
34342 -       return 0;
34343 -}
34344 -EXPORT_SYMBOL(ath9k_hw_txprocdesc);
34345 -
34346 -void ath9k_hw_set11n_txdesc(struct ath_hw *ah, struct ath_desc *ds,
34347 -                           u32 pktLen, enum ath9k_pkt_type type, u32 txPower,
34348 -                           u32 keyIx, enum ath9k_key_type keyType, u32 flags)
34349 -{
34350 -       struct ar5416_desc *ads = AR5416DESC(ds);
34351 -
34352 -       txPower += ah->txpower_indexoffset;
34353 -       if (txPower > 63)
34354 -               txPower = 63;
34355 -
34356 -       ads->ds_ctl0 = (pktLen & AR_FrameLen)
34357 -               | (flags & ATH9K_TXDESC_VMF ? AR_VirtMoreFrag : 0)
34358 -               | SM(txPower, AR_XmitPower)
34359 -               | (flags & ATH9K_TXDESC_VEOL ? AR_VEOL : 0)
34360 -               | (flags & ATH9K_TXDESC_CLRDMASK ? AR_ClrDestMask : 0)
34361 -               | (flags & ATH9K_TXDESC_INTREQ ? AR_TxIntrReq : 0)
34362 -               | (keyIx != ATH9K_TXKEYIX_INVALID ? AR_DestIdxValid : 0);
34363 -
34364 -       ads->ds_ctl1 =
34365 -               (keyIx != ATH9K_TXKEYIX_INVALID ? SM(keyIx, AR_DestIdx) : 0)
34366 -               | SM(type, AR_FrameType)
34367 -               | (flags & ATH9K_TXDESC_NOACK ? AR_NoAck : 0)
34368 -               | (flags & ATH9K_TXDESC_EXT_ONLY ? AR_ExtOnly : 0)
34369 -               | (flags & ATH9K_TXDESC_EXT_AND_CTL ? AR_ExtAndCtl : 0);
34370 -
34371 -       ads->ds_ctl6 = SM(keyType, AR_EncrType);
34372 -
34373 -       if (AR_SREV_9285(ah) || AR_SREV_9271(ah)) {
34374 -               ads->ds_ctl8 = 0;
34375 -               ads->ds_ctl9 = 0;
34376 -               ads->ds_ctl10 = 0;
34377 -               ads->ds_ctl11 = 0;
34378 -       }
34379 -}
34380 -EXPORT_SYMBOL(ath9k_hw_set11n_txdesc);
34381 -
34382 -void ath9k_hw_set11n_ratescenario(struct ath_hw *ah, struct ath_desc *ds,
34383 -                                 struct ath_desc *lastds,
34384 -                                 u32 durUpdateEn, u32 rtsctsRate,
34385 -                                 u32 rtsctsDuration,
34386 -                                 struct ath9k_11n_rate_series series[],
34387 -                                 u32 nseries, u32 flags)
34388 -{
34389 -       struct ar5416_desc *ads = AR5416DESC(ds);
34390 -       struct ar5416_desc *last_ads = AR5416DESC(lastds);
34391 -       u32 ds_ctl0;
34392 -
34393 -       if (flags & (ATH9K_TXDESC_RTSENA | ATH9K_TXDESC_CTSENA)) {
34394 -               ds_ctl0 = ads->ds_ctl0;
34395 -
34396 -               if (flags & ATH9K_TXDESC_RTSENA) {
34397 -                       ds_ctl0 &= ~AR_CTSEnable;
34398 -                       ds_ctl0 |= AR_RTSEnable;
34399 -               } else {
34400 -                       ds_ctl0 &= ~AR_RTSEnable;
34401 -                       ds_ctl0 |= AR_CTSEnable;
34402 -               }
34403 -
34404 -               ads->ds_ctl0 = ds_ctl0;
34405 -       } else {
34406 -               ads->ds_ctl0 =
34407 -                       (ads->ds_ctl0 & ~(AR_RTSEnable | AR_CTSEnable));
34408 -       }
34409 -
34410 -       ads->ds_ctl2 = set11nTries(series, 0)
34411 -               | set11nTries(series, 1)
34412 -               | set11nTries(series, 2)
34413 -               | set11nTries(series, 3)
34414 -               | (durUpdateEn ? AR_DurUpdateEna : 0)
34415 -               | SM(0, AR_BurstDur);
34416 -
34417 -       ads->ds_ctl3 = set11nRate(series, 0)
34418 -               | set11nRate(series, 1)
34419 -               | set11nRate(series, 2)
34420 -               | set11nRate(series, 3);
34421 -
34422 -       ads->ds_ctl4 = set11nPktDurRTSCTS(series, 0)
34423 -               | set11nPktDurRTSCTS(series, 1);
34424 -
34425 -       ads->ds_ctl5 = set11nPktDurRTSCTS(series, 2)
34426 -               | set11nPktDurRTSCTS(series, 3);
34427 -
34428 -       ads->ds_ctl7 = set11nRateFlags(series, 0)
34429 -               | set11nRateFlags(series, 1)
34430 -               | set11nRateFlags(series, 2)
34431 -               | set11nRateFlags(series, 3)
34432 -               | SM(rtsctsRate, AR_RTSCTSRate);
34433 -       last_ads->ds_ctl2 = ads->ds_ctl2;
34434 -       last_ads->ds_ctl3 = ads->ds_ctl3;
34435 -}
34436 -EXPORT_SYMBOL(ath9k_hw_set11n_ratescenario);
34437 -
34438 -void ath9k_hw_set11n_aggr_first(struct ath_hw *ah, struct ath_desc *ds,
34439 -                               u32 aggrLen)
34440 -{
34441 -       struct ar5416_desc *ads = AR5416DESC(ds);
34442 -
34443 -       ads->ds_ctl1 |= (AR_IsAggr | AR_MoreAggr);
34444 -       ads->ds_ctl6 &= ~AR_AggrLen;
34445 -       ads->ds_ctl6 |= SM(aggrLen, AR_AggrLen);
34446 -}
34447 -EXPORT_SYMBOL(ath9k_hw_set11n_aggr_first);
34448 -
34449 -void ath9k_hw_set11n_aggr_middle(struct ath_hw *ah, struct ath_desc *ds,
34450 -                                u32 numDelims)
34451 -{
34452 -       struct ar5416_desc *ads = AR5416DESC(ds);
34453 -       unsigned int ctl6;
34454 -
34455 -       ads->ds_ctl1 |= (AR_IsAggr | AR_MoreAggr);
34456 -
34457 -       ctl6 = ads->ds_ctl6;
34458 -       ctl6 &= ~AR_PadDelim;
34459 -       ctl6 |= SM(numDelims, AR_PadDelim);
34460 -       ads->ds_ctl6 = ctl6;
34461 -}
34462 -EXPORT_SYMBOL(ath9k_hw_set11n_aggr_middle);
34463 -
34464 -void ath9k_hw_set11n_aggr_last(struct ath_hw *ah, struct ath_desc *ds)
34465 -{
34466 -       struct ar5416_desc *ads = AR5416DESC(ds);
34467 -
34468 -       ads->ds_ctl1 |= AR_IsAggr;
34469 -       ads->ds_ctl1 &= ~AR_MoreAggr;
34470 -       ads->ds_ctl6 &= ~AR_PadDelim;
34471 -}
34472 -EXPORT_SYMBOL(ath9k_hw_set11n_aggr_last);
34473 -
34474 -void ath9k_hw_clr11n_aggr(struct ath_hw *ah, struct ath_desc *ds)
34475 -{
34476 -       struct ar5416_desc *ads = AR5416DESC(ds);
34477 -
34478 -       ads->ds_ctl1 &= (~AR_IsAggr & ~AR_MoreAggr);
34479 -}
34480 -EXPORT_SYMBOL(ath9k_hw_clr11n_aggr);
34481 -
34482 -void ath9k_hw_set11n_burstduration(struct ath_hw *ah, struct ath_desc *ds,
34483 -                                  u32 burstDuration)
34484 -{
34485 -       struct ar5416_desc *ads = AR5416DESC(ds);
34486 -
34487 -       ads->ds_ctl2 &= ~AR_BurstDur;
34488 -       ads->ds_ctl2 |= SM(burstDuration, AR_BurstDur);
34489 -}
34490 -EXPORT_SYMBOL(ath9k_hw_set11n_burstduration);
34491 -
34492 -void ath9k_hw_set11n_virtualmorefrag(struct ath_hw *ah, struct ath_desc *ds,
34493 -                                    u32 vmf)
34494 -{
34495 -       struct ar5416_desc *ads = AR5416DESC(ds);
34496 -
34497 -       if (vmf)
34498 -               ads->ds_ctl0 |= AR_VirtMoreFrag;
34499 -       else
34500 -               ads->ds_ctl0 &= ~AR_VirtMoreFrag;
34501 -}
34502 -
34503  void ath9k_hw_gettxintrtxqs(struct ath_hw *ah, u32 *txqs)
34504  {
34505         *txqs &= ah->intr_txqs;
34506 @@ -796,6 +521,12 @@ bool ath9k_hw_resettxqueue(struct ath_hw *ah, u32 q)
34507                              AR_D_MISC_ARB_LOCKOUT_CNTRL_S)
34508                           | AR_D_MISC_BEACON_USE
34509                           | AR_D_MISC_POST_FR_BKOFF_DIS);
34510 +               /* cwmin and cwmax should be 0 for beacon queue */
34511 +               if (AR_SREV_9300_20_OR_LATER(ah)) {
34512 +                       REG_WRITE(ah, AR_DLCL_IFS(q), SM(0, AR_D_LCL_IFS_CWMIN)
34513 +                                 | SM(0, AR_D_LCL_IFS_CWMAX)
34514 +                                 | SM(qi->tqi_aifs, AR_D_LCL_IFS_AIFS));
34515 +               }
34516                 break;
34517         case ATH9K_TX_QUEUE_CAB:
34518                 REG_WRITE(ah, AR_QMISC(q), REG_READ(ah, AR_QMISC(q))
34519 @@ -832,6 +563,9 @@ bool ath9k_hw_resettxqueue(struct ath_hw *ah, u32 q)
34520                           AR_D_MISC_POST_FR_BKOFF_DIS);
34521         }
34522  
34523 +       if (AR_SREV_9300_20_OR_LATER(ah))
34524 +               REG_WRITE(ah, AR_Q_DESC_CRCCHK, AR_Q_DESC_CRCCHK_EN);
34525 +
34526         if (qi->tqi_qflags & TXQ_FLAG_TXOKINT_ENABLE)
34527                 ah->txok_interrupt_mask |= 1 << q;
34528         else
34529 @@ -999,12 +733,6 @@ void ath9k_hw_putrxbuf(struct ath_hw *ah, u32 rxdp)
34530  }
34531  EXPORT_SYMBOL(ath9k_hw_putrxbuf);
34532  
34533 -void ath9k_hw_rxena(struct ath_hw *ah)
34534 -{
34535 -       REG_WRITE(ah, AR_CR, AR_CR_RXE);
34536 -}
34537 -EXPORT_SYMBOL(ath9k_hw_rxena);
34538 -
34539  void ath9k_hw_startpcureceive(struct ath_hw *ah)
34540  {
34541         ath9k_enable_mib_counters(ah);
34542 @@ -1023,6 +751,14 @@ void ath9k_hw_stoppcurecv(struct ath_hw *ah)
34543  }
34544  EXPORT_SYMBOL(ath9k_hw_stoppcurecv);
34545  
34546 +void ath9k_hw_abortpcurecv(struct ath_hw *ah)
34547 +{
34548 +       REG_SET_BIT(ah, AR_DIAG_SW, AR_DIAG_RX_ABORT | AR_DIAG_RX_DIS);
34549 +
34550 +       ath9k_hw_disable_mib_counters(ah);
34551 +}
34552 +EXPORT_SYMBOL(ath9k_hw_abortpcurecv);
34553 +
34554  bool ath9k_hw_stopdmarecv(struct ath_hw *ah)
34555  {
34556  #define AH_RX_STOP_DMA_TIMEOUT 10000   /* usec */
34557 @@ -1068,3 +804,140 @@ int ath9k_hw_beaconq_setup(struct ath_hw *ah)
34558         return ath9k_hw_setuptxqueue(ah, ATH9K_TX_QUEUE_BEACON, &qi);
34559  }
34560  EXPORT_SYMBOL(ath9k_hw_beaconq_setup);
34561 +
34562 +bool ath9k_hw_intrpend(struct ath_hw *ah)
34563 +{
34564 +       u32 host_isr;
34565 +
34566 +       if (AR_SREV_9100(ah))
34567 +               return true;
34568 +
34569 +       host_isr = REG_READ(ah, AR_INTR_ASYNC_CAUSE);
34570 +       if ((host_isr & AR_INTR_MAC_IRQ) && (host_isr != AR_INTR_SPURIOUS))
34571 +               return true;
34572 +
34573 +       host_isr = REG_READ(ah, AR_INTR_SYNC_CAUSE);
34574 +       if ((host_isr & AR_INTR_SYNC_DEFAULT)
34575 +           && (host_isr != AR_INTR_SPURIOUS))
34576 +               return true;
34577 +
34578 +       return false;
34579 +}
34580 +EXPORT_SYMBOL(ath9k_hw_intrpend);
34581 +
34582 +enum ath9k_int ath9k_hw_set_interrupts(struct ath_hw *ah,
34583 +                                             enum ath9k_int ints)
34584 +{
34585 +       enum ath9k_int omask = ah->imask;
34586 +       u32 mask, mask2;
34587 +       struct ath9k_hw_capabilities *pCap = &ah->caps;
34588 +       struct ath_common *common = ath9k_hw_common(ah);
34589 +
34590 +       ath_print(common, ATH_DBG_INTERRUPT, "0x%x => 0x%x\n", omask, ints);
34591 +
34592 +       if (omask & ATH9K_INT_GLOBAL) {
34593 +               ath_print(common, ATH_DBG_INTERRUPT, "disable IER\n");
34594 +               REG_WRITE(ah, AR_IER, AR_IER_DISABLE);
34595 +               (void) REG_READ(ah, AR_IER);
34596 +               if (!AR_SREV_9100(ah)) {
34597 +                       REG_WRITE(ah, AR_INTR_ASYNC_ENABLE, 0);
34598 +                       (void) REG_READ(ah, AR_INTR_ASYNC_ENABLE);
34599 +
34600 +                       REG_WRITE(ah, AR_INTR_SYNC_ENABLE, 0);
34601 +                       (void) REG_READ(ah, AR_INTR_SYNC_ENABLE);
34602 +               }
34603 +       }
34604 +
34605 +       /* TODO: global int Ref count */
34606 +       mask = ints & ATH9K_INT_COMMON;
34607 +       mask2 = 0;
34608 +
34609 +       if (ints & ATH9K_INT_TX) {
34610 +               if (ah->config.tx_intr_mitigation)
34611 +                       mask |= AR_IMR_TXMINTR | AR_IMR_TXINTM;
34612 +               if (ah->txok_interrupt_mask)
34613 +                       mask |= AR_IMR_TXOK;
34614 +               if (ah->txdesc_interrupt_mask)
34615 +                       mask |= AR_IMR_TXDESC;
34616 +               if (ah->txerr_interrupt_mask)
34617 +                       mask |= AR_IMR_TXERR;
34618 +               if (ah->txeol_interrupt_mask)
34619 +                       mask |= AR_IMR_TXEOL;
34620 +       }
34621 +       if (ints & ATH9K_INT_RX) {
34622 +               if (AR_SREV_9300_20_OR_LATER(ah)) {
34623 +                       mask |= AR_IMR_RXERR | AR_IMR_RXOK_HP;
34624 +                       if (ah->config.rx_intr_mitigation) {
34625 +                               mask &= ~AR_IMR_RXOK_LP;
34626 +                               mask |=  AR_IMR_RXMINTR | AR_IMR_RXINTM;
34627 +                       } else {
34628 +                               mask |= AR_IMR_RXOK_LP;
34629 +                       }
34630 +               } else {
34631 +                       if (ah->config.rx_intr_mitigation)
34632 +                               mask |= AR_IMR_RXMINTR | AR_IMR_RXINTM;
34633 +                       else
34634 +                               mask |= AR_IMR_RXOK | AR_IMR_RXDESC;
34635 +               }
34636 +               if (!(pCap->hw_caps & ATH9K_HW_CAP_AUTOSLEEP))
34637 +                       mask |= AR_IMR_GENTMR;
34638 +       }
34639 +
34640 +       if (ints & (ATH9K_INT_BMISC)) {
34641 +               mask |= AR_IMR_BCNMISC;
34642 +               if (ints & ATH9K_INT_TIM)
34643 +                       mask2 |= AR_IMR_S2_TIM;
34644 +               if (ints & ATH9K_INT_DTIM)
34645 +                       mask2 |= AR_IMR_S2_DTIM;
34646 +               if (ints & ATH9K_INT_DTIMSYNC)
34647 +                       mask2 |= AR_IMR_S2_DTIMSYNC;
34648 +               if (ints & ATH9K_INT_CABEND)
34649 +                       mask2 |= AR_IMR_S2_CABEND;
34650 +               if (ints & ATH9K_INT_TSFOOR)
34651 +                       mask2 |= AR_IMR_S2_TSFOOR;
34652 +       }
34653 +
34654 +       if (ints & (ATH9K_INT_GTT | ATH9K_INT_CST)) {
34655 +               mask |= AR_IMR_BCNMISC;
34656 +               if (ints & ATH9K_INT_GTT)
34657 +                       mask2 |= AR_IMR_S2_GTT;
34658 +               if (ints & ATH9K_INT_CST)
34659 +                       mask2 |= AR_IMR_S2_CST;
34660 +       }
34661 +
34662 +       ath_print(common, ATH_DBG_INTERRUPT, "new IMR 0x%x\n", mask);
34663 +       REG_WRITE(ah, AR_IMR, mask);
34664 +       ah->imrs2_reg &= ~(AR_IMR_S2_TIM | AR_IMR_S2_DTIM | AR_IMR_S2_DTIMSYNC |
34665 +                          AR_IMR_S2_CABEND | AR_IMR_S2_CABTO |
34666 +                          AR_IMR_S2_TSFOOR | AR_IMR_S2_GTT | AR_IMR_S2_CST);
34667 +       ah->imrs2_reg |= mask2;
34668 +       REG_WRITE(ah, AR_IMR_S2, ah->imrs2_reg);
34669 +
34670 +       if (!(pCap->hw_caps & ATH9K_HW_CAP_AUTOSLEEP)) {
34671 +               if (ints & ATH9K_INT_TIM_TIMER)
34672 +                       REG_SET_BIT(ah, AR_IMR_S5, AR_IMR_S5_TIM_TIMER);
34673 +               else
34674 +                       REG_CLR_BIT(ah, AR_IMR_S5, AR_IMR_S5_TIM_TIMER);
34675 +       }
34676 +
34677 +       if (ints & ATH9K_INT_GLOBAL) {
34678 +               ath_print(common, ATH_DBG_INTERRUPT, "enable IER\n");
34679 +               REG_WRITE(ah, AR_IER, AR_IER_ENABLE);
34680 +               if (!AR_SREV_9100(ah)) {
34681 +                       REG_WRITE(ah, AR_INTR_ASYNC_ENABLE,
34682 +                                 AR_INTR_MAC_IRQ);
34683 +                       REG_WRITE(ah, AR_INTR_ASYNC_MASK, AR_INTR_MAC_IRQ);
34684 +
34685 +
34686 +                       REG_WRITE(ah, AR_INTR_SYNC_ENABLE,
34687 +                                 AR_INTR_SYNC_DEFAULT);
34688 +                       REG_WRITE(ah, AR_INTR_SYNC_MASK,
34689 +                                 AR_INTR_SYNC_DEFAULT);
34690 +               }
34691 +               ath_print(common, ATH_DBG_INTERRUPT, "AR_IMR 0x%x IER 0x%x\n",
34692 +                         REG_READ(ah, AR_IMR), REG_READ(ah, AR_IER));
34693 +       }
34694 +
34695 +       return omask;
34696 +}
34697 +EXPORT_SYMBOL(ath9k_hw_set_interrupts);
34698 diff --git a/drivers/net/wireless/ath/ath9k/mac.h b/drivers/net/wireless/ath/ath9k/mac.h
34699 index 68dbd7a..bf27dde 100644
34700 --- a/drivers/net/wireless/ath/ath9k/mac.h
34701 +++ b/drivers/net/wireless/ath/ath9k/mac.h
34702 @@ -86,7 +86,6 @@
34703  #define ATH9K_TX_DESC_CFG_ERR      0x04
34704  #define ATH9K_TX_DATA_UNDERRUN     0x08
34705  #define ATH9K_TX_DELIM_UNDERRUN    0x10
34706 -#define ATH9K_TX_SW_ABORTED        0x40
34707  #define ATH9K_TX_SW_FILTERED       0x80
34708  
34709  /* 64 bytes */
34710 @@ -117,7 +116,10 @@ struct ath_tx_status {
34711         int8_t ts_rssi_ext0;
34712         int8_t ts_rssi_ext1;
34713         int8_t ts_rssi_ext2;
34714 -       u8 pad[3];
34715 +       u8 qid;
34716 +       u16 desc_id;
34717 +       u8 tid;
34718 +       u8 pad[2];
34719         u32 ba_low;
34720         u32 ba_high;
34721         u32 evm0;
34722 @@ -148,6 +150,8 @@ struct ath_rx_status {
34723         u32 evm0;
34724         u32 evm1;
34725         u32 evm2;
34726 +       u32 evm3;
34727 +       u32 evm4;
34728  };
34729  
34730  struct ath_htc_rx_status {
34731 @@ -259,7 +263,8 @@ struct ath_desc {
34732  #define ATH9K_TXDESC_EXT_AND_CTL       0x0080
34733  #define ATH9K_TXDESC_VMF               0x0100
34734  #define ATH9K_TXDESC_FRAG_IS_ON        0x0200
34735 -#define ATH9K_TXDESC_CAB               0x0400
34736 +#define ATH9K_TXDESC_LOWRXCHAIN                0x0400
34737 +#define ATH9K_TXDESC_LDPC              0x00010000
34738  
34739  #define ATH9K_RXDESC_INTREQ            0x0020
34740  
34741 @@ -353,7 +358,8 @@ struct ar5416_desc {
34742  #define AR_DestIdxValid     0x40000000
34743  #define AR_CTSEnable        0x80000000
34744  
34745 -#define AR_BufLen           0x00000fff
34746 +#define AR_BufLen           AR_SREV_9300_20_OR_LATER(ah) ? 0x0fff0000 : \
34747 +                                                          0x00000fff
34748  #define AR_TxMore           0x00001000
34749  #define AR_DestIdx          0x000fe000
34750  #define AR_DestIdx_S        13
34751 @@ -410,6 +416,7 @@ struct ar5416_desc {
34752  #define AR_EncrType         0x0c000000
34753  #define AR_EncrType_S       26
34754  #define AR_TxCtlRsvd61      0xf0000000
34755 +#define AR_LDPC             0x80000000
34756  
34757  #define AR_2040_0           0x00000001
34758  #define AR_GI0              0x00000002
34759 @@ -493,7 +500,6 @@ struct ar5416_desc {
34760  
34761  #define AR_RxCTLRsvd00  0xffffffff
34762  
34763 -#define AR_BufLen       0x00000fff
34764  #define AR_RxCtlRsvd00  0x00001000
34765  #define AR_RxIntrReq    0x00002000
34766  #define AR_RxCtlRsvd01  0xffffc000
34767 @@ -689,31 +695,6 @@ void ath9k_hw_txstart(struct ath_hw *ah, u32 q);
34768  u32 ath9k_hw_numtxpending(struct ath_hw *ah, u32 q);
34769  bool ath9k_hw_updatetxtriglevel(struct ath_hw *ah, bool bIncTrigLevel);
34770  bool ath9k_hw_stoptxdma(struct ath_hw *ah, u32 q);
34771 -void ath9k_hw_filltxdesc(struct ath_hw *ah, struct ath_desc *ds,
34772 -                        u32 segLen, bool firstSeg,
34773 -                        bool lastSeg, const struct ath_desc *ds0);
34774 -void ath9k_hw_cleartxdesc(struct ath_hw *ah, struct ath_desc *ds);
34775 -int ath9k_hw_txprocdesc(struct ath_hw *ah, struct ath_desc *ds,
34776 -                       struct ath_tx_status *ts);
34777 -void ath9k_hw_set11n_txdesc(struct ath_hw *ah, struct ath_desc *ds,
34778 -                           u32 pktLen, enum ath9k_pkt_type type, u32 txPower,
34779 -                           u32 keyIx, enum ath9k_key_type keyType, u32 flags);
34780 -void ath9k_hw_set11n_ratescenario(struct ath_hw *ah, struct ath_desc *ds,
34781 -                                 struct ath_desc *lastds,
34782 -                                 u32 durUpdateEn, u32 rtsctsRate,
34783 -                                 u32 rtsctsDuration,
34784 -                                 struct ath9k_11n_rate_series series[],
34785 -                                 u32 nseries, u32 flags);
34786 -void ath9k_hw_set11n_aggr_first(struct ath_hw *ah, struct ath_desc *ds,
34787 -                               u32 aggrLen);
34788 -void ath9k_hw_set11n_aggr_middle(struct ath_hw *ah, struct ath_desc *ds,
34789 -                                u32 numDelims);
34790 -void ath9k_hw_set11n_aggr_last(struct ath_hw *ah, struct ath_desc *ds);
34791 -void ath9k_hw_clr11n_aggr(struct ath_hw *ah, struct ath_desc *ds);
34792 -void ath9k_hw_set11n_burstduration(struct ath_hw *ah, struct ath_desc *ds,
34793 -                                  u32 burstDuration);
34794 -void ath9k_hw_set11n_virtualmorefrag(struct ath_hw *ah, struct ath_desc *ds,
34795 -                                    u32 vmf);
34796  void ath9k_hw_gettxintrtxqs(struct ath_hw *ah, u32 *txqs);
34797  bool ath9k_hw_set_txq_props(struct ath_hw *ah, int q,
34798                             const struct ath9k_tx_queue_info *qinfo);
34799 @@ -729,10 +710,17 @@ void ath9k_hw_setuprxdesc(struct ath_hw *ah, struct ath_desc *ds,
34800                           u32 size, u32 flags);
34801  bool ath9k_hw_setrxabort(struct ath_hw *ah, bool set);
34802  void ath9k_hw_putrxbuf(struct ath_hw *ah, u32 rxdp);
34803 -void ath9k_hw_rxena(struct ath_hw *ah);
34804  void ath9k_hw_startpcureceive(struct ath_hw *ah);
34805  void ath9k_hw_stoppcurecv(struct ath_hw *ah);
34806 +void ath9k_hw_abortpcurecv(struct ath_hw *ah);
34807  bool ath9k_hw_stopdmarecv(struct ath_hw *ah);
34808  int ath9k_hw_beaconq_setup(struct ath_hw *ah);
34809  
34810 +/* Interrupt Handling */
34811 +bool ath9k_hw_intrpend(struct ath_hw *ah);
34812 +enum ath9k_int ath9k_hw_set_interrupts(struct ath_hw *ah,
34813 +                                      enum ath9k_int ints);
34814 +
34815 +void ar9002_hw_attach_mac_ops(struct ath_hw *ah);
34816 +
34817  #endif /* MAC_H */
34818 diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
34819 index f7ef114..dd2896f 100644
34820 --- a/drivers/net/wireless/ath/ath9k/main.c
34821 +++ b/drivers/net/wireless/ath/ath9k/main.c
34822 @@ -401,6 +401,7 @@ void ath9k_tasklet(unsigned long data)
34823         struct ath_common *common = ath9k_hw_common(ah);
34824  
34825         u32 status = sc->intrstatus;
34826 +       u32 rxmask;
34827  
34828         ath9k_ps_wakeup(sc);
34829  
34830 @@ -410,14 +411,30 @@ void ath9k_tasklet(unsigned long data)
34831                 return;
34832         }
34833  
34834 -       if (status & (ATH9K_INT_RX | ATH9K_INT_RXEOL | ATH9K_INT_RXORN)) {
34835 +       if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
34836 +               rxmask = (ATH9K_INT_RXHP | ATH9K_INT_RXLP | ATH9K_INT_RXEOL |
34837 +                         ATH9K_INT_RXORN);
34838 +       else
34839 +               rxmask = (ATH9K_INT_RX | ATH9K_INT_RXEOL | ATH9K_INT_RXORN);
34840 +
34841 +       if (status & rxmask) {
34842                 spin_lock_bh(&sc->rx.rxflushlock);
34843 -               ath_rx_tasklet(sc, 0);
34844 +
34845 +               /* Check for high priority Rx first */
34846 +               if ((ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) &&
34847 +                   (status & ATH9K_INT_RXHP))
34848 +                       ath_rx_tasklet(sc, 0, true);
34849 +
34850 +               ath_rx_tasklet(sc, 0, false);
34851                 spin_unlock_bh(&sc->rx.rxflushlock);
34852         }
34853  
34854 -       if (status & ATH9K_INT_TX)
34855 -               ath_tx_tasklet(sc);
34856 +       if (status & ATH9K_INT_TX) {
34857 +               if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
34858 +                       ath_tx_edma_tasklet(sc);
34859 +               else
34860 +                       ath_tx_tasklet(sc);
34861 +       }
34862  
34863         if ((status & ATH9K_INT_TSFOOR) && sc->ps_enabled) {
34864                 /*
34865 @@ -445,6 +462,8 @@ irqreturn_t ath_isr(int irq, void *dev)
34866                 ATH9K_INT_RXORN |               \
34867                 ATH9K_INT_RXEOL |               \
34868                 ATH9K_INT_RX |                  \
34869 +               ATH9K_INT_RXLP |                \
34870 +               ATH9K_INT_RXHP |                \
34871                 ATH9K_INT_TX |                  \
34872                 ATH9K_INT_BMISS |               \
34873                 ATH9K_INT_CST |                 \
34874 @@ -496,7 +515,8 @@ irqreturn_t ath_isr(int irq, void *dev)
34875          * If a FATAL or RXORN interrupt is received, we have to reset the
34876          * chip immediately.
34877          */
34878 -       if (status & (ATH9K_INT_FATAL | ATH9K_INT_RXORN))
34879 +       if ((status & ATH9K_INT_FATAL) || ((status & ATH9K_INT_RXORN) &&
34880 +           !(ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)))
34881                 goto chip_reset;
34882  
34883         if (status & ATH9K_INT_SWBA)
34884 @@ -505,6 +525,13 @@ irqreturn_t ath_isr(int irq, void *dev)
34885         if (status & ATH9K_INT_TXURN)
34886                 ath9k_hw_updatetxtriglevel(ah, true);
34887  
34888 +       if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) {
34889 +               if (status & ATH9K_INT_RXEOL) {
34890 +                       ah->imask &= ~(ATH9K_INT_RXEOL | ATH9K_INT_RXORN);
34891 +                       ath9k_hw_set_interrupts(ah, ah->imask);
34892 +               }
34893 +       }
34894 +
34895         if (status & ATH9K_INT_MIB) {
34896                 /*
34897                  * Disable interrupts until we service the MIB
34898 @@ -537,6 +564,18 @@ chip_reset:
34899         if (sched) {
34900                 /* turn off every interrupt except SWBA */
34901                 ath9k_hw_set_interrupts(ah, (ah->imask & ATH9K_INT_SWBA));
34902 +
34903 +               if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
34904 +                       ath9k_hw_set_interrupts(ah,
34905 +                                               ah->imask & (ATH9K_INT_GLOBAL |
34906 +                                               ATH9K_INT_RXEOL |
34907 +                                               ATH9K_INT_RXORN |
34908 +                                               ATH9K_INT_SWBA));
34909 +               else
34910 +                       /* turn off every interrupt except SWBA */
34911 +                       ath9k_hw_set_interrupts(ah,
34912 +                                               (ah->imask & ATH9K_INT_SWBA));
34913 +
34914                 tasklet_schedule(&sc->intr_tq);
34915         }
34916  
34917 @@ -1162,9 +1201,14 @@ static int ath9k_start(struct ieee80211_hw *hw)
34918         }
34919  
34920         /* Setup our intr mask. */
34921 -       ah->imask = ATH9K_INT_RX | ATH9K_INT_TX
34922 -               | ATH9K_INT_RXEOL | ATH9K_INT_RXORN
34923 -               | ATH9K_INT_FATAL | ATH9K_INT_GLOBAL;
34924 +       ah->imask = ATH9K_INT_TX | ATH9K_INT_RXEOL |
34925 +                   ATH9K_INT_RXORN | ATH9K_INT_FATAL |
34926 +                   ATH9K_INT_GLOBAL;
34927 +
34928 +       if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
34929 +               ah->imask |= ATH9K_INT_RXHP | ATH9K_INT_RXLP;
34930 +       else
34931 +               ah->imask |= ATH9K_INT_RX;
34932  
34933         if (ah->caps.hw_caps & ATH9K_HW_CAP_GTT)
34934                 ah->imask |= ATH9K_INT_GTT;
34935 diff --git a/drivers/net/wireless/ath/ath9k/pci.c b/drivers/net/wireless/ath/ath9k/pci.c
34936 index 1ec836c..257b10b 100644
34937 --- a/drivers/net/wireless/ath/ath9k/pci.c
34938 +++ b/drivers/net/wireless/ath/ath9k/pci.c
34939 @@ -28,6 +28,7 @@ static DEFINE_PCI_DEVICE_TABLE(ath_pci_id_table) = {
34940         { PCI_VDEVICE(ATHEROS, 0x002C) }, /* PCI-E 802.11n bonded out */
34941         { PCI_VDEVICE(ATHEROS, 0x002D) }, /* PCI   */
34942         { PCI_VDEVICE(ATHEROS, 0x002E) }, /* PCI-E */
34943 +       { PCI_VDEVICE(ATHEROS, 0x0030) }, /* PCI-E  AR9300 */
34944         { 0 }
34945  };
34946  
34947 diff --git a/drivers/net/wireless/ath/ath9k/phy.c b/drivers/net/wireless/ath/ath9k/phy.c
34948 deleted file mode 100644
34949 index c3b5939..0000000
34950 --- a/drivers/net/wireless/ath/ath9k/phy.c
34951 +++ /dev/null
34952 @@ -1,976 +0,0 @@
34953 -/*
34954 - * Copyright (c) 2008-2009 Atheros Communications Inc.
34955 - *
34956 - * Permission to use, copy, modify, and/or distribute this software for any
34957 - * purpose with or without fee is hereby granted, provided that the above
34958 - * copyright notice and this permission notice appear in all copies.
34959 - *
34960 - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
34961 - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
34962 - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
34963 - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
34964 - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
34965 - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
34966 - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
34967 - */
34968 -
34969 -/**
34970 - * DOC: Programming Atheros 802.11n analog front end radios
34971 - *
34972 - * AR5416 MAC based PCI devices and AR518 MAC based PCI-Express
34973 - * devices have either an external AR2133 analog front end radio for single
34974 - * band 2.4 GHz communication or an AR5133 analog front end radio for dual
34975 - * band 2.4 GHz / 5 GHz communication.
34976 - *
34977 - * All devices after the AR5416 and AR5418 family starting with the AR9280
34978 - * have their analog front radios, MAC/BB and host PCIe/USB interface embedded
34979 - * into a single-chip and require less programming.
34980 - *
34981 - * The following single-chips exist with a respective embedded radio:
34982 - *
34983 - * AR9280 - 11n dual-band 2x2 MIMO for PCIe
34984 - * AR9281 - 11n single-band 1x2 MIMO for PCIe
34985 - * AR9285 - 11n single-band 1x1 for PCIe
34986 - * AR9287 - 11n single-band 2x2 MIMO for PCIe
34987 - *
34988 - * AR9220 - 11n dual-band 2x2 MIMO for PCI
34989 - * AR9223 - 11n single-band 2x2 MIMO for PCI
34990 - *
34991 - * AR9287 - 11n single-band 1x1 MIMO for USB
34992 - */
34993 -
34994 -#include "hw.h"
34995 -
34996 -/**
34997 - * ath9k_hw_write_regs - ??
34998 - *
34999 - * @ah: atheros hardware structure
35000 - * @freqIndex:
35001 - * @regWrites:
35002 - *
35003 - * Used for both the chipsets with an external AR2133/AR5133 radios and
35004 - * single-chip devices.
35005 - */
35006 -void ath9k_hw_write_regs(struct ath_hw *ah, u32 freqIndex, int regWrites)
35007 -{
35008 -       REG_WRITE_ARRAY(&ah->iniBB_RfGain, freqIndex, regWrites);
35009 -}
35010 -
35011 -/**
35012 - * ath9k_hw_ar9280_set_channel - set channel on single-chip device
35013 - * @ah: atheros hardware structure
35014 - * @chan:
35015 - *
35016 - * This is the function to change channel on single-chip devices, that is
35017 - * all devices after ar9280.
35018 - *
35019 - * This function takes the channel value in MHz and sets
35020 - * hardware channel value. Assumes writes have been enabled to analog bus.
35021 - *
35022 - * Actual Expression,
35023 - *
35024 - * For 2GHz channel,
35025 - * Channel Frequency = (3/4) * freq_ref * (chansel[8:0] + chanfrac[16:0]/2^17)
35026 - * (freq_ref = 40MHz)
35027 - *
35028 - * For 5GHz channel,
35029 - * Channel Frequency = (3/2) * freq_ref * (chansel[8:0] + chanfrac[16:0]/2^10)
35030 - * (freq_ref = 40MHz/(24>>amodeRefSel))
35031 - */
35032 -int ath9k_hw_ar9280_set_channel(struct ath_hw *ah, struct ath9k_channel *chan)
35033 -{
35034 -       u16 bMode, fracMode, aModeRefSel = 0;
35035 -       u32 freq, ndiv, channelSel = 0, channelFrac = 0, reg32 = 0;
35036 -       struct chan_centers centers;
35037 -       u32 refDivA = 24;
35038 -
35039 -       ath9k_hw_get_channel_centers(ah, chan, &centers);
35040 -       freq = centers.synth_center;
35041 -
35042 -       reg32 = REG_READ(ah, AR_PHY_SYNTH_CONTROL);
35043 -       reg32 &= 0xc0000000;
35044 -
35045 -       if (freq < 4800) { /* 2 GHz, fractional mode */
35046 -               u32 txctl;
35047 -               int regWrites = 0;
35048 -
35049 -               bMode = 1;
35050 -               fracMode = 1;
35051 -               aModeRefSel = 0;
35052 -               channelSel = (freq * 0x10000) / 15;
35053 -
35054 -               if (AR_SREV_9287_11_OR_LATER(ah)) {
35055 -                       if (freq == 2484) {
35056 -                               /* Enable channel spreading for channel 14 */
35057 -                               REG_WRITE_ARRAY(&ah->iniCckfirJapan2484,
35058 -                                               1, regWrites);
35059 -                       } else {
35060 -                               REG_WRITE_ARRAY(&ah->iniCckfirNormal,
35061 -                                               1, regWrites);
35062 -                       }
35063 -               } else {
35064 -                       txctl = REG_READ(ah, AR_PHY_CCK_TX_CTRL);
35065 -                       if (freq == 2484) {
35066 -                               /* Enable channel spreading for channel 14 */
35067 -                               REG_WRITE(ah, AR_PHY_CCK_TX_CTRL,
35068 -                                         txctl | AR_PHY_CCK_TX_CTRL_JAPAN);
35069 -                       } else {
35070 -                               REG_WRITE(ah, AR_PHY_CCK_TX_CTRL,
35071 -                                         txctl &~ AR_PHY_CCK_TX_CTRL_JAPAN);
35072 -                       }
35073 -               }
35074 -       } else {
35075 -               bMode = 0;
35076 -               fracMode = 0;
35077 -
35078 -               switch(ah->eep_ops->get_eeprom(ah, EEP_FRAC_N_5G)) {
35079 -               case 0:
35080 -                       if ((freq % 20) == 0) {
35081 -                               aModeRefSel = 3;
35082 -                       } else if ((freq % 10) == 0) {
35083 -                               aModeRefSel = 2;
35084 -                       }
35085 -                       if (aModeRefSel)
35086 -                               break;
35087 -               case 1:
35088 -               default:
35089 -                       aModeRefSel = 0;
35090 -                       /*
35091 -                        * Enable 2G (fractional) mode for channels
35092 -                        * which are 5MHz spaced.
35093 -                        */
35094 -                       fracMode = 1;
35095 -                       refDivA = 1;
35096 -                       channelSel = (freq * 0x8000) / 15;
35097 -
35098 -                       /* RefDivA setting */
35099 -                       REG_RMW_FIELD(ah, AR_AN_SYNTH9,
35100 -                                     AR_AN_SYNTH9_REFDIVA, refDivA);
35101 -
35102 -               }
35103 -
35104 -               if (!fracMode) {
35105 -                       ndiv = (freq * (refDivA >> aModeRefSel)) / 60;
35106 -                       channelSel = ndiv & 0x1ff;
35107 -                       channelFrac = (ndiv & 0xfffffe00) * 2;
35108 -                       channelSel = (channelSel << 17) | channelFrac;
35109 -               }
35110 -       }
35111 -
35112 -       reg32 = reg32 |
35113 -           (bMode << 29) |
35114 -           (fracMode << 28) | (aModeRefSel << 26) | (channelSel);
35115 -
35116 -       REG_WRITE(ah, AR_PHY_SYNTH_CONTROL, reg32);
35117 -
35118 -       ah->curchan = chan;
35119 -       ah->curchan_rad_index = -1;
35120 -
35121 -       return 0;
35122 -}
35123 -
35124 -/**
35125 - * ath9k_hw_9280_spur_mitigate - convert baseband spur frequency
35126 - * @ah: atheros hardware structure
35127 - * @chan:
35128 - *
35129 - * For single-chip solutions. Converts to baseband spur frequency given the
35130 - * input channel frequency and compute register settings below.
35131 - */
35132 -void ath9k_hw_9280_spur_mitigate(struct ath_hw *ah, struct ath9k_channel *chan)
35133 -{
35134 -       int bb_spur = AR_NO_SPUR;
35135 -       int freq;
35136 -       int bin, cur_bin;
35137 -       int bb_spur_off, spur_subchannel_sd;
35138 -       int spur_freq_sd;
35139 -       int spur_delta_phase;
35140 -       int denominator;
35141 -       int upper, lower, cur_vit_mask;
35142 -       int tmp, newVal;
35143 -       int i;
35144 -       int pilot_mask_reg[4] = { AR_PHY_TIMING7, AR_PHY_TIMING8,
35145 -                         AR_PHY_PILOT_MASK_01_30, AR_PHY_PILOT_MASK_31_60
35146 -       };
35147 -       int chan_mask_reg[4] = { AR_PHY_TIMING9, AR_PHY_TIMING10,
35148 -                        AR_PHY_CHANNEL_MASK_01_30, AR_PHY_CHANNEL_MASK_31_60
35149 -       };
35150 -       int inc[4] = { 0, 100, 0, 0 };
35151 -       struct chan_centers centers;
35152 -
35153 -       int8_t mask_m[123];
35154 -       int8_t mask_p[123];
35155 -       int8_t mask_amt;
35156 -       int tmp_mask;
35157 -       int cur_bb_spur;
35158 -       bool is2GHz = IS_CHAN_2GHZ(chan);
35159 -
35160 -       memset(&mask_m, 0, sizeof(int8_t) * 123);
35161 -       memset(&mask_p, 0, sizeof(int8_t) * 123);
35162 -
35163 -       ath9k_hw_get_channel_centers(ah, chan, &centers);
35164 -       freq = centers.synth_center;
35165 -
35166 -       ah->config.spurmode = SPUR_ENABLE_EEPROM;
35167 -       for (i = 0; i < AR_EEPROM_MODAL_SPURS; i++) {
35168 -               cur_bb_spur = ah->eep_ops->get_spur_channel(ah, i, is2GHz);
35169 -
35170 -               if (is2GHz)
35171 -                       cur_bb_spur = (cur_bb_spur / 10) + AR_BASE_FREQ_2GHZ;
35172 -               else
35173 -                       cur_bb_spur = (cur_bb_spur / 10) + AR_BASE_FREQ_5GHZ;
35174 -
35175 -               if (AR_NO_SPUR == cur_bb_spur)
35176 -                       break;
35177 -               cur_bb_spur = cur_bb_spur - freq;
35178 -
35179 -               if (IS_CHAN_HT40(chan)) {
35180 -                       if ((cur_bb_spur > -AR_SPUR_FEEQ_BOUND_HT40) &&
35181 -                           (cur_bb_spur < AR_SPUR_FEEQ_BOUND_HT40)) {
35182 -                               bb_spur = cur_bb_spur;
35183 -                               break;
35184 -                       }
35185 -               } else if ((cur_bb_spur > -AR_SPUR_FEEQ_BOUND_HT20) &&
35186 -                          (cur_bb_spur < AR_SPUR_FEEQ_BOUND_HT20)) {
35187 -                       bb_spur = cur_bb_spur;
35188 -                       break;
35189 -               }
35190 -       }
35191 -
35192 -       if (AR_NO_SPUR == bb_spur) {
35193 -               REG_CLR_BIT(ah, AR_PHY_FORCE_CLKEN_CCK,
35194 -                           AR_PHY_FORCE_CLKEN_CCK_MRC_MUX);
35195 -               return;
35196 -       } else {
35197 -               REG_CLR_BIT(ah, AR_PHY_FORCE_CLKEN_CCK,
35198 -                           AR_PHY_FORCE_CLKEN_CCK_MRC_MUX);
35199 -       }
35200 -
35201 -       bin = bb_spur * 320;
35202 -
35203 -       tmp = REG_READ(ah, AR_PHY_TIMING_CTRL4(0));
35204 -
35205 -       newVal = tmp | (AR_PHY_TIMING_CTRL4_ENABLE_SPUR_RSSI |
35206 -                       AR_PHY_TIMING_CTRL4_ENABLE_SPUR_FILTER |
35207 -                       AR_PHY_TIMING_CTRL4_ENABLE_CHAN_MASK |
35208 -                       AR_PHY_TIMING_CTRL4_ENABLE_PILOT_MASK);
35209 -       REG_WRITE(ah, AR_PHY_TIMING_CTRL4(0), newVal);
35210 -
35211 -       newVal = (AR_PHY_SPUR_REG_MASK_RATE_CNTL |
35212 -                 AR_PHY_SPUR_REG_ENABLE_MASK_PPM |
35213 -                 AR_PHY_SPUR_REG_MASK_RATE_SELECT |
35214 -                 AR_PHY_SPUR_REG_ENABLE_VIT_SPUR_RSSI |
35215 -                 SM(SPUR_RSSI_THRESH, AR_PHY_SPUR_REG_SPUR_RSSI_THRESH));
35216 -       REG_WRITE(ah, AR_PHY_SPUR_REG, newVal);
35217 -
35218 -       if (IS_CHAN_HT40(chan)) {
35219 -               if (bb_spur < 0) {
35220 -                       spur_subchannel_sd = 1;
35221 -                       bb_spur_off = bb_spur + 10;
35222 -               } else {
35223 -                       spur_subchannel_sd = 0;
35224 -                       bb_spur_off = bb_spur - 10;
35225 -               }
35226 -       } else {
35227 -               spur_subchannel_sd = 0;
35228 -               bb_spur_off = bb_spur;
35229 -       }
35230 -
35231 -       if (IS_CHAN_HT40(chan))
35232 -               spur_delta_phase =
35233 -                       ((bb_spur * 262144) /
35234 -                        10) & AR_PHY_TIMING11_SPUR_DELTA_PHASE;
35235 -       else
35236 -               spur_delta_phase =
35237 -                       ((bb_spur * 524288) /
35238 -                        10) & AR_PHY_TIMING11_SPUR_DELTA_PHASE;
35239 -
35240 -       denominator = IS_CHAN_2GHZ(chan) ? 44 : 40;
35241 -       spur_freq_sd = ((bb_spur_off * 2048) / denominator) & 0x3ff;
35242 -
35243 -       newVal = (AR_PHY_TIMING11_USE_SPUR_IN_AGC |
35244 -                 SM(spur_freq_sd, AR_PHY_TIMING11_SPUR_FREQ_SD) |
35245 -                 SM(spur_delta_phase, AR_PHY_TIMING11_SPUR_DELTA_PHASE));
35246 -       REG_WRITE(ah, AR_PHY_TIMING11, newVal);
35247 -
35248 -       newVal = spur_subchannel_sd << AR_PHY_SFCORR_SPUR_SUBCHNL_SD_S;
35249 -       REG_WRITE(ah, AR_PHY_SFCORR_EXT, newVal);
35250 -
35251 -       cur_bin = -6000;
35252 -       upper = bin + 100;
35253 -       lower = bin - 100;
35254 -
35255 -       for (i = 0; i < 4; i++) {
35256 -               int pilot_mask = 0;
35257 -               int chan_mask = 0;
35258 -               int bp = 0;
35259 -               for (bp = 0; bp < 30; bp++) {
35260 -                       if ((cur_bin > lower) && (cur_bin < upper)) {
35261 -                               pilot_mask = pilot_mask | 0x1 << bp;
35262 -                               chan_mask = chan_mask | 0x1 << bp;
35263 -                       }
35264 -                       cur_bin += 100;
35265 -               }
35266 -               cur_bin += inc[i];
35267 -               REG_WRITE(ah, pilot_mask_reg[i], pilot_mask);
35268 -               REG_WRITE(ah, chan_mask_reg[i], chan_mask);
35269 -       }
35270 -
35271 -       cur_vit_mask = 6100;
35272 -       upper = bin + 120;
35273 -       lower = bin - 120;
35274 -
35275 -       for (i = 0; i < 123; i++) {
35276 -               if ((cur_vit_mask > lower) && (cur_vit_mask < upper)) {
35277 -
35278 -                       /* workaround for gcc bug #37014 */
35279 -                       volatile int tmp_v = abs(cur_vit_mask - bin);
35280 -
35281 -                       if (tmp_v < 75)
35282 -                               mask_amt = 1;
35283 -                       else
35284 -                               mask_amt = 0;
35285 -                       if (cur_vit_mask < 0)
35286 -                               mask_m[abs(cur_vit_mask / 100)] = mask_amt;
35287 -                       else
35288 -                               mask_p[cur_vit_mask / 100] = mask_amt;
35289 -               }
35290 -               cur_vit_mask -= 100;
35291 -       }
35292 -
35293 -       tmp_mask = (mask_m[46] << 30) | (mask_m[47] << 28)
35294 -               | (mask_m[48] << 26) | (mask_m[49] << 24)
35295 -               | (mask_m[50] << 22) | (mask_m[51] << 20)
35296 -               | (mask_m[52] << 18) | (mask_m[53] << 16)
35297 -               | (mask_m[54] << 14) | (mask_m[55] << 12)
35298 -               | (mask_m[56] << 10) | (mask_m[57] << 8)
35299 -               | (mask_m[58] << 6) | (mask_m[59] << 4)
35300 -               | (mask_m[60] << 2) | (mask_m[61] << 0);
35301 -       REG_WRITE(ah, AR_PHY_BIN_MASK_1, tmp_mask);
35302 -       REG_WRITE(ah, AR_PHY_VIT_MASK2_M_46_61, tmp_mask);
35303 -
35304 -       tmp_mask = (mask_m[31] << 28)
35305 -               | (mask_m[32] << 26) | (mask_m[33] << 24)
35306 -               | (mask_m[34] << 22) | (mask_m[35] << 20)
35307 -               | (mask_m[36] << 18) | (mask_m[37] << 16)
35308 -               | (mask_m[48] << 14) | (mask_m[39] << 12)
35309 -               | (mask_m[40] << 10) | (mask_m[41] << 8)
35310 -               | (mask_m[42] << 6) | (mask_m[43] << 4)
35311 -               | (mask_m[44] << 2) | (mask_m[45] << 0);
35312 -       REG_WRITE(ah, AR_PHY_BIN_MASK_2, tmp_mask);
35313 -       REG_WRITE(ah, AR_PHY_MASK2_M_31_45, tmp_mask);
35314 -
35315 -       tmp_mask = (mask_m[16] << 30) | (mask_m[16] << 28)
35316 -               | (mask_m[18] << 26) | (mask_m[18] << 24)
35317 -               | (mask_m[20] << 22) | (mask_m[20] << 20)
35318 -               | (mask_m[22] << 18) | (mask_m[22] << 16)
35319 -               | (mask_m[24] << 14) | (mask_m[24] << 12)
35320 -               | (mask_m[25] << 10) | (mask_m[26] << 8)
35321 -               | (mask_m[27] << 6) | (mask_m[28] << 4)
35322 -               | (mask_m[29] << 2) | (mask_m[30] << 0);
35323 -       REG_WRITE(ah, AR_PHY_BIN_MASK_3, tmp_mask);
35324 -       REG_WRITE(ah, AR_PHY_MASK2_M_16_30, tmp_mask);
35325 -
35326 -       tmp_mask = (mask_m[0] << 30) | (mask_m[1] << 28)
35327 -               | (mask_m[2] << 26) | (mask_m[3] << 24)
35328 -               | (mask_m[4] << 22) | (mask_m[5] << 20)
35329 -               | (mask_m[6] << 18) | (mask_m[7] << 16)
35330 -               | (mask_m[8] << 14) | (mask_m[9] << 12)
35331 -               | (mask_m[10] << 10) | (mask_m[11] << 8)
35332 -               | (mask_m[12] << 6) | (mask_m[13] << 4)
35333 -               | (mask_m[14] << 2) | (mask_m[15] << 0);
35334 -       REG_WRITE(ah, AR_PHY_MASK_CTL, tmp_mask);
35335 -       REG_WRITE(ah, AR_PHY_MASK2_M_00_15, tmp_mask);
35336 -
35337 -       tmp_mask = (mask_p[15] << 28)
35338 -               | (mask_p[14] << 26) | (mask_p[13] << 24)
35339 -               | (mask_p[12] << 22) | (mask_p[11] << 20)
35340 -               | (mask_p[10] << 18) | (mask_p[9] << 16)
35341 -               | (mask_p[8] << 14) | (mask_p[7] << 12)
35342 -               | (mask_p[6] << 10) | (mask_p[5] << 8)
35343 -               | (mask_p[4] << 6) | (mask_p[3] << 4)
35344 -               | (mask_p[2] << 2) | (mask_p[1] << 0);
35345 -       REG_WRITE(ah, AR_PHY_BIN_MASK2_1, tmp_mask);
35346 -       REG_WRITE(ah, AR_PHY_MASK2_P_15_01, tmp_mask);
35347 -
35348 -       tmp_mask = (mask_p[30] << 28)
35349 -               | (mask_p[29] << 26) | (mask_p[28] << 24)
35350 -               | (mask_p[27] << 22) | (mask_p[26] << 20)
35351 -               | (mask_p[25] << 18) | (mask_p[24] << 16)
35352 -               | (mask_p[23] << 14) | (mask_p[22] << 12)
35353 -               | (mask_p[21] << 10) | (mask_p[20] << 8)
35354 -               | (mask_p[19] << 6) | (mask_p[18] << 4)
35355 -               | (mask_p[17] << 2) | (mask_p[16] << 0);
35356 -       REG_WRITE(ah, AR_PHY_BIN_MASK2_2, tmp_mask);
35357 -       REG_WRITE(ah, AR_PHY_MASK2_P_30_16, tmp_mask);
35358 -
35359 -       tmp_mask = (mask_p[45] << 28)
35360 -               | (mask_p[44] << 26) | (mask_p[43] << 24)
35361 -               | (mask_p[42] << 22) | (mask_p[41] << 20)
35362 -               | (mask_p[40] << 18) | (mask_p[39] << 16)
35363 -               | (mask_p[38] << 14) | (mask_p[37] << 12)
35364 -               | (mask_p[36] << 10) | (mask_p[35] << 8)
35365 -               | (mask_p[34] << 6) | (mask_p[33] << 4)
35366 -               | (mask_p[32] << 2) | (mask_p[31] << 0);
35367 -       REG_WRITE(ah, AR_PHY_BIN_MASK2_3, tmp_mask);
35368 -       REG_WRITE(ah, AR_PHY_MASK2_P_45_31, tmp_mask);
35369 -
35370 -       tmp_mask = (mask_p[61] << 30) | (mask_p[60] << 28)
35371 -               | (mask_p[59] << 26) | (mask_p[58] << 24)
35372 -               | (mask_p[57] << 22) | (mask_p[56] << 20)
35373 -               | (mask_p[55] << 18) | (mask_p[54] << 16)
35374 -               | (mask_p[53] << 14) | (mask_p[52] << 12)
35375 -               | (mask_p[51] << 10) | (mask_p[50] << 8)
35376 -               | (mask_p[49] << 6) | (mask_p[48] << 4)
35377 -               | (mask_p[47] << 2) | (mask_p[46] << 0);
35378 -       REG_WRITE(ah, AR_PHY_BIN_MASK2_4, tmp_mask);
35379 -       REG_WRITE(ah, AR_PHY_MASK2_P_61_45, tmp_mask);
35380 -}
35381 -
35382 -/* All code below is for non single-chip solutions */
35383 -
35384 -/**
35385 - * ath9k_phy_modify_rx_buffer() - perform analog swizzling of parameters
35386 - * @rfbuf:
35387 - * @reg32:
35388 - * @numBits:
35389 - * @firstBit:
35390 - * @column:
35391 - *
35392 - * Performs analog "swizzling" of parameters into their location.
35393 - * Used on external AR2133/AR5133 radios.
35394 - */
35395 -static void ath9k_phy_modify_rx_buffer(u32 *rfBuf, u32 reg32,
35396 -                                      u32 numBits, u32 firstBit,
35397 -                                      u32 column)
35398 -{
35399 -       u32 tmp32, mask, arrayEntry, lastBit;
35400 -       int32_t bitPosition, bitsLeft;
35401 -
35402 -       tmp32 = ath9k_hw_reverse_bits(reg32, numBits);
35403 -       arrayEntry = (firstBit - 1) / 8;
35404 -       bitPosition = (firstBit - 1) % 8;
35405 -       bitsLeft = numBits;
35406 -       while (bitsLeft > 0) {
35407 -               lastBit = (bitPosition + bitsLeft > 8) ?
35408 -                   8 : bitPosition + bitsLeft;
35409 -               mask = (((1 << lastBit) - 1) ^ ((1 << bitPosition) - 1)) <<
35410 -                   (column * 8);
35411 -               rfBuf[arrayEntry] &= ~mask;
35412 -               rfBuf[arrayEntry] |= ((tmp32 << bitPosition) <<
35413 -                                     (column * 8)) & mask;
35414 -               bitsLeft -= 8 - bitPosition;
35415 -               tmp32 = tmp32 >> (8 - bitPosition);
35416 -               bitPosition = 0;
35417 -               arrayEntry++;
35418 -       }
35419 -}
35420 -
35421 -/*
35422 - * Fix on 2.4 GHz band for orientation sensitivity issue by increasing
35423 - * rf_pwd_icsyndiv.
35424 - *
35425 - * Theoretical Rules:
35426 - *   if 2 GHz band
35427 - *      if forceBiasAuto
35428 - *         if synth_freq < 2412
35429 - *            bias = 0
35430 - *         else if 2412 <= synth_freq <= 2422
35431 - *            bias = 1
35432 - *         else // synth_freq > 2422
35433 - *            bias = 2
35434 - *      else if forceBias > 0
35435 - *         bias = forceBias & 7
35436 - *      else
35437 - *         no change, use value from ini file
35438 - *   else
35439 - *      no change, invalid band
35440 - *
35441 - *  1st Mod:
35442 - *    2422 also uses value of 2
35443 - *    <approved>
35444 - *
35445 - *  2nd Mod:
35446 - *    Less than 2412 uses value of 0, 2412 and above uses value of 2
35447 - */
35448 -static void ath9k_hw_force_bias(struct ath_hw *ah, u16 synth_freq)
35449 -{
35450 -       struct ath_common *common = ath9k_hw_common(ah);
35451 -       u32 tmp_reg;
35452 -       int reg_writes = 0;
35453 -       u32 new_bias = 0;
35454 -
35455 -       if (!AR_SREV_5416(ah) || synth_freq >= 3000) {
35456 -               return;
35457 -       }
35458 -
35459 -       BUG_ON(AR_SREV_9280_10_OR_LATER(ah));
35460 -
35461 -       if (synth_freq < 2412)
35462 -               new_bias = 0;
35463 -       else if (synth_freq < 2422)
35464 -               new_bias = 1;
35465 -       else
35466 -               new_bias = 2;
35467 -
35468 -       /* pre-reverse this field */
35469 -       tmp_reg = ath9k_hw_reverse_bits(new_bias, 3);
35470 -
35471 -       ath_print(common, ATH_DBG_CONFIG,
35472 -                 "Force rf_pwd_icsyndiv to %1d on %4d\n",
35473 -                 new_bias, synth_freq);
35474 -
35475 -       /* swizzle rf_pwd_icsyndiv */
35476 -       ath9k_phy_modify_rx_buffer(ah->analogBank6Data, tmp_reg, 3, 181, 3);
35477 -
35478 -       /* write Bank 6 with new params */
35479 -       REG_WRITE_RF_ARRAY(&ah->iniBank6, ah->analogBank6Data, reg_writes);
35480 -}
35481 -
35482 -/**
35483 - * ath9k_hw_set_channel - tune to a channel on the external AR2133/AR5133 radios
35484 - * @ah: atheros hardware stucture
35485 - * @chan:
35486 - *
35487 - * For the external AR2133/AR5133 radios, takes the MHz channel value and set
35488 - * the channel value. Assumes writes enabled to analog bus and bank6 register
35489 - * cache in ah->analogBank6Data.
35490 - */
35491 -int ath9k_hw_set_channel(struct ath_hw *ah, struct ath9k_channel *chan)
35492 -{
35493 -       struct ath_common *common = ath9k_hw_common(ah);
35494 -       u32 channelSel = 0;
35495 -       u32 bModeSynth = 0;
35496 -       u32 aModeRefSel = 0;
35497 -       u32 reg32 = 0;
35498 -       u16 freq;
35499 -       struct chan_centers centers;
35500 -
35501 -       ath9k_hw_get_channel_centers(ah, chan, &centers);
35502 -       freq = centers.synth_center;
35503 -
35504 -       if (freq < 4800) {
35505 -               u32 txctl;
35506 -
35507 -               if (((freq - 2192) % 5) == 0) {
35508 -                       channelSel = ((freq - 672) * 2 - 3040) / 10;
35509 -                       bModeSynth = 0;
35510 -               } else if (((freq - 2224) % 5) == 0) {
35511 -                       channelSel = ((freq - 704) * 2 - 3040) / 10;
35512 -                       bModeSynth = 1;
35513 -               } else {
35514 -                       ath_print(common, ATH_DBG_FATAL,
35515 -                                 "Invalid channel %u MHz\n", freq);
35516 -                       return -EINVAL;
35517 -               }
35518 -
35519 -               channelSel = (channelSel << 2) & 0xff;
35520 -               channelSel = ath9k_hw_reverse_bits(channelSel, 8);
35521 -
35522 -               txctl = REG_READ(ah, AR_PHY_CCK_TX_CTRL);
35523 -               if (freq == 2484) {
35524 -
35525 -                       REG_WRITE(ah, AR_PHY_CCK_TX_CTRL,
35526 -                                 txctl | AR_PHY_CCK_TX_CTRL_JAPAN);
35527 -               } else {
35528 -                       REG_WRITE(ah, AR_PHY_CCK_TX_CTRL,
35529 -                                 txctl & ~AR_PHY_CCK_TX_CTRL_JAPAN);
35530 -               }
35531 -
35532 -       } else if ((freq % 20) == 0 && freq >= 5120) {
35533 -               channelSel =
35534 -                   ath9k_hw_reverse_bits(((freq - 4800) / 20 << 2), 8);
35535 -               aModeRefSel = ath9k_hw_reverse_bits(1, 2);
35536 -       } else if ((freq % 10) == 0) {
35537 -               channelSel =
35538 -                   ath9k_hw_reverse_bits(((freq - 4800) / 10 << 1), 8);
35539 -               if (AR_SREV_9100(ah) || AR_SREV_9160_10_OR_LATER(ah))
35540 -                       aModeRefSel = ath9k_hw_reverse_bits(2, 2);
35541 -               else
35542 -                       aModeRefSel = ath9k_hw_reverse_bits(1, 2);
35543 -       } else if ((freq % 5) == 0) {
35544 -               channelSel = ath9k_hw_reverse_bits((freq - 4800) / 5, 8);
35545 -               aModeRefSel = ath9k_hw_reverse_bits(1, 2);
35546 -       } else {
35547 -               ath_print(common, ATH_DBG_FATAL,
35548 -                         "Invalid channel %u MHz\n", freq);
35549 -               return -EINVAL;
35550 -       }
35551 -
35552 -       ath9k_hw_force_bias(ah, freq);
35553 -
35554 -       reg32 =
35555 -           (channelSel << 8) | (aModeRefSel << 2) | (bModeSynth << 1) |
35556 -           (1 << 5) | 0x1;
35557 -
35558 -       REG_WRITE(ah, AR_PHY(0x37), reg32);
35559 -
35560 -       ah->curchan = chan;
35561 -       ah->curchan_rad_index = -1;
35562 -
35563 -       return 0;
35564 -}
35565 -
35566 -/**
35567 - * ath9k_hw_spur_mitigate - convert baseband spur frequency for external radios
35568 - * @ah: atheros hardware structure
35569 - * @chan:
35570 - *
35571 - * For non single-chip solutions. Converts to baseband spur frequency given the
35572 - * input channel frequency and compute register settings below.
35573 - */
35574 -void ath9k_hw_spur_mitigate(struct ath_hw *ah, struct ath9k_channel *chan)
35575 -{
35576 -       int bb_spur = AR_NO_SPUR;
35577 -       int bin, cur_bin;
35578 -       int spur_freq_sd;
35579 -       int spur_delta_phase;
35580 -       int denominator;
35581 -       int upper, lower, cur_vit_mask;
35582 -       int tmp, new;
35583 -       int i;
35584 -       int pilot_mask_reg[4] = { AR_PHY_TIMING7, AR_PHY_TIMING8,
35585 -                         AR_PHY_PILOT_MASK_01_30, AR_PHY_PILOT_MASK_31_60
35586 -       };
35587 -       int chan_mask_reg[4] = { AR_PHY_TIMING9, AR_PHY_TIMING10,
35588 -                        AR_PHY_CHANNEL_MASK_01_30, AR_PHY_CHANNEL_MASK_31_60
35589 -       };
35590 -       int inc[4] = { 0, 100, 0, 0 };
35591 -
35592 -       int8_t mask_m[123];
35593 -       int8_t mask_p[123];
35594 -       int8_t mask_amt;
35595 -       int tmp_mask;
35596 -       int cur_bb_spur;
35597 -       bool is2GHz = IS_CHAN_2GHZ(chan);
35598 -
35599 -       memset(&mask_m, 0, sizeof(int8_t) * 123);
35600 -       memset(&mask_p, 0, sizeof(int8_t) * 123);
35601 -
35602 -       for (i = 0; i < AR_EEPROM_MODAL_SPURS; i++) {
35603 -               cur_bb_spur = ah->eep_ops->get_spur_channel(ah, i, is2GHz);
35604 -               if (AR_NO_SPUR == cur_bb_spur)
35605 -                       break;
35606 -               cur_bb_spur = cur_bb_spur - (chan->channel * 10);
35607 -               if ((cur_bb_spur > -95) && (cur_bb_spur < 95)) {
35608 -                       bb_spur = cur_bb_spur;
35609 -                       break;
35610 -               }
35611 -       }
35612 -
35613 -       if (AR_NO_SPUR == bb_spur)
35614 -               return;
35615 -
35616 -       bin = bb_spur * 32;
35617 -
35618 -       tmp = REG_READ(ah, AR_PHY_TIMING_CTRL4(0));
35619 -       new = tmp | (AR_PHY_TIMING_CTRL4_ENABLE_SPUR_RSSI |
35620 -                    AR_PHY_TIMING_CTRL4_ENABLE_SPUR_FILTER |
35621 -                    AR_PHY_TIMING_CTRL4_ENABLE_CHAN_MASK |
35622 -                    AR_PHY_TIMING_CTRL4_ENABLE_PILOT_MASK);
35623 -
35624 -       REG_WRITE(ah, AR_PHY_TIMING_CTRL4(0), new);
35625 -
35626 -       new = (AR_PHY_SPUR_REG_MASK_RATE_CNTL |
35627 -              AR_PHY_SPUR_REG_ENABLE_MASK_PPM |
35628 -              AR_PHY_SPUR_REG_MASK_RATE_SELECT |
35629 -              AR_PHY_SPUR_REG_ENABLE_VIT_SPUR_RSSI |
35630 -              SM(SPUR_RSSI_THRESH, AR_PHY_SPUR_REG_SPUR_RSSI_THRESH));
35631 -       REG_WRITE(ah, AR_PHY_SPUR_REG, new);
35632 -
35633 -       spur_delta_phase = ((bb_spur * 524288) / 100) &
35634 -               AR_PHY_TIMING11_SPUR_DELTA_PHASE;
35635 -
35636 -       denominator = IS_CHAN_2GHZ(chan) ? 440 : 400;
35637 -       spur_freq_sd = ((bb_spur * 2048) / denominator) & 0x3ff;
35638 -
35639 -       new = (AR_PHY_TIMING11_USE_SPUR_IN_AGC |
35640 -              SM(spur_freq_sd, AR_PHY_TIMING11_SPUR_FREQ_SD) |
35641 -              SM(spur_delta_phase, AR_PHY_TIMING11_SPUR_DELTA_PHASE));
35642 -       REG_WRITE(ah, AR_PHY_TIMING11, new);
35643 -
35644 -       cur_bin = -6000;
35645 -       upper = bin + 100;
35646 -       lower = bin - 100;
35647 -
35648 -       for (i = 0; i < 4; i++) {
35649 -               int pilot_mask = 0;
35650 -               int chan_mask = 0;
35651 -               int bp = 0;
35652 -               for (bp = 0; bp < 30; bp++) {
35653 -                       if ((cur_bin > lower) && (cur_bin < upper)) {
35654 -                               pilot_mask = pilot_mask | 0x1 << bp;
35655 -                               chan_mask = chan_mask | 0x1 << bp;
35656 -                       }
35657 -                       cur_bin += 100;
35658 -               }
35659 -               cur_bin += inc[i];
35660 -               REG_WRITE(ah, pilot_mask_reg[i], pilot_mask);
35661 -               REG_WRITE(ah, chan_mask_reg[i], chan_mask);
35662 -       }
35663 -
35664 -       cur_vit_mask = 6100;
35665 -       upper = bin + 120;
35666 -       lower = bin - 120;
35667 -
35668 -       for (i = 0; i < 123; i++) {
35669 -               if ((cur_vit_mask > lower) && (cur_vit_mask < upper)) {
35670 -
35671 -                       /* workaround for gcc bug #37014 */
35672 -                       volatile int tmp_v = abs(cur_vit_mask - bin);
35673 -
35674 -                       if (tmp_v < 75)
35675 -                               mask_amt = 1;
35676 -                       else
35677 -                               mask_amt = 0;
35678 -                       if (cur_vit_mask < 0)
35679 -                               mask_m[abs(cur_vit_mask / 100)] = mask_amt;
35680 -                       else
35681 -                               mask_p[cur_vit_mask / 100] = mask_amt;
35682 -               }
35683 -               cur_vit_mask -= 100;
35684 -       }
35685 -
35686 -       tmp_mask = (mask_m[46] << 30) | (mask_m[47] << 28)
35687 -               | (mask_m[48] << 26) | (mask_m[49] << 24)
35688 -               | (mask_m[50] << 22) | (mask_m[51] << 20)
35689 -               | (mask_m[52] << 18) | (mask_m[53] << 16)
35690 -               | (mask_m[54] << 14) | (mask_m[55] << 12)
35691 -               | (mask_m[56] << 10) | (mask_m[57] << 8)
35692 -               | (mask_m[58] << 6) | (mask_m[59] << 4)
35693 -               | (mask_m[60] << 2) | (mask_m[61] << 0);
35694 -       REG_WRITE(ah, AR_PHY_BIN_MASK_1, tmp_mask);
35695 -       REG_WRITE(ah, AR_PHY_VIT_MASK2_M_46_61, tmp_mask);
35696 -
35697 -       tmp_mask = (mask_m[31] << 28)
35698 -               | (mask_m[32] << 26) | (mask_m[33] << 24)
35699 -               | (mask_m[34] << 22) | (mask_m[35] << 20)
35700 -               | (mask_m[36] << 18) | (mask_m[37] << 16)
35701 -               | (mask_m[48] << 14) | (mask_m[39] << 12)
35702 -               | (mask_m[40] << 10) | (mask_m[41] << 8)
35703 -               | (mask_m[42] << 6) | (mask_m[43] << 4)
35704 -               | (mask_m[44] << 2) | (mask_m[45] << 0);
35705 -       REG_WRITE(ah, AR_PHY_BIN_MASK_2, tmp_mask);
35706 -       REG_WRITE(ah, AR_PHY_MASK2_M_31_45, tmp_mask);
35707 -
35708 -       tmp_mask = (mask_m[16] << 30) | (mask_m[16] << 28)
35709 -               | (mask_m[18] << 26) | (mask_m[18] << 24)
35710 -               | (mask_m[20] << 22) | (mask_m[20] << 20)
35711 -               | (mask_m[22] << 18) | (mask_m[22] << 16)
35712 -               | (mask_m[24] << 14) | (mask_m[24] << 12)
35713 -               | (mask_m[25] << 10) | (mask_m[26] << 8)
35714 -               | (mask_m[27] << 6) | (mask_m[28] << 4)
35715 -               | (mask_m[29] << 2) | (mask_m[30] << 0);
35716 -       REG_WRITE(ah, AR_PHY_BIN_MASK_3, tmp_mask);
35717 -       REG_WRITE(ah, AR_PHY_MASK2_M_16_30, tmp_mask);
35718 -
35719 -       tmp_mask = (mask_m[0] << 30) | (mask_m[1] << 28)
35720 -               | (mask_m[2] << 26) | (mask_m[3] << 24)
35721 -               | (mask_m[4] << 22) | (mask_m[5] << 20)
35722 -               | (mask_m[6] << 18) | (mask_m[7] << 16)
35723 -               | (mask_m[8] << 14) | (mask_m[9] << 12)
35724 -               | (mask_m[10] << 10) | (mask_m[11] << 8)
35725 -               | (mask_m[12] << 6) | (mask_m[13] << 4)
35726 -               | (mask_m[14] << 2) | (mask_m[15] << 0);
35727 -       REG_WRITE(ah, AR_PHY_MASK_CTL, tmp_mask);
35728 -       REG_WRITE(ah, AR_PHY_MASK2_M_00_15, tmp_mask);
35729 -
35730 -       tmp_mask = (mask_p[15] << 28)
35731 -               | (mask_p[14] << 26) | (mask_p[13] << 24)
35732 -               | (mask_p[12] << 22) | (mask_p[11] << 20)
35733 -               | (mask_p[10] << 18) | (mask_p[9] << 16)
35734 -               | (mask_p[8] << 14) | (mask_p[7] << 12)
35735 -               | (mask_p[6] << 10) | (mask_p[5] << 8)
35736 -               | (mask_p[4] << 6) | (mask_p[3] << 4)
35737 -               | (mask_p[2] << 2) | (mask_p[1] << 0);
35738 -       REG_WRITE(ah, AR_PHY_BIN_MASK2_1, tmp_mask);
35739 -       REG_WRITE(ah, AR_PHY_MASK2_P_15_01, tmp_mask);
35740 -
35741 -       tmp_mask = (mask_p[30] << 28)
35742 -               | (mask_p[29] << 26) | (mask_p[28] << 24)
35743 -               | (mask_p[27] << 22) | (mask_p[26] << 20)
35744 -               | (mask_p[25] << 18) | (mask_p[24] << 16)
35745 -               | (mask_p[23] << 14) | (mask_p[22] << 12)
35746 -               | (mask_p[21] << 10) | (mask_p[20] << 8)
35747 -               | (mask_p[19] << 6) | (mask_p[18] << 4)
35748 -               | (mask_p[17] << 2) | (mask_p[16] << 0);
35749 -       REG_WRITE(ah, AR_PHY_BIN_MASK2_2, tmp_mask);
35750 -       REG_WRITE(ah, AR_PHY_MASK2_P_30_16, tmp_mask);
35751 -
35752 -       tmp_mask = (mask_p[45] << 28)
35753 -               | (mask_p[44] << 26) | (mask_p[43] << 24)
35754 -               | (mask_p[42] << 22) | (mask_p[41] << 20)
35755 -               | (mask_p[40] << 18) | (mask_p[39] << 16)
35756 -               | (mask_p[38] << 14) | (mask_p[37] << 12)
35757 -               | (mask_p[36] << 10) | (mask_p[35] << 8)
35758 -               | (mask_p[34] << 6) | (mask_p[33] << 4)
35759 -               | (mask_p[32] << 2) | (mask_p[31] << 0);
35760 -       REG_WRITE(ah, AR_PHY_BIN_MASK2_3, tmp_mask);
35761 -       REG_WRITE(ah, AR_PHY_MASK2_P_45_31, tmp_mask);
35762 -
35763 -       tmp_mask = (mask_p[61] << 30) | (mask_p[60] << 28)
35764 -               | (mask_p[59] << 26) | (mask_p[58] << 24)
35765 -               | (mask_p[57] << 22) | (mask_p[56] << 20)
35766 -               | (mask_p[55] << 18) | (mask_p[54] << 16)
35767 -               | (mask_p[53] << 14) | (mask_p[52] << 12)
35768 -               | (mask_p[51] << 10) | (mask_p[50] << 8)
35769 -               | (mask_p[49] << 6) | (mask_p[48] << 4)
35770 -               | (mask_p[47] << 2) | (mask_p[46] << 0);
35771 -       REG_WRITE(ah, AR_PHY_BIN_MASK2_4, tmp_mask);
35772 -       REG_WRITE(ah, AR_PHY_MASK2_P_61_45, tmp_mask);
35773 -}
35774 -
35775 -/**
35776 - * ath9k_hw_rf_alloc_ext_banks - allocates banks for external radio programming
35777 - * @ah: atheros hardware structure
35778 - *
35779 - * Only required for older devices with external AR2133/AR5133 radios.
35780 - */
35781 -int ath9k_hw_rf_alloc_ext_banks(struct ath_hw *ah)
35782 -{
35783 -#define ATH_ALLOC_BANK(bank, size) do { \
35784 -               bank = kzalloc((sizeof(u32) * size), GFP_KERNEL); \
35785 -               if (!bank) { \
35786 -                       ath_print(common, ATH_DBG_FATAL, \
35787 -                                 "Cannot allocate RF banks\n"); \
35788 -                       return -ENOMEM; \
35789 -               } \
35790 -       } while (0);
35791 -
35792 -       struct ath_common *common = ath9k_hw_common(ah);
35793 -
35794 -       BUG_ON(AR_SREV_9280_10_OR_LATER(ah));
35795 -
35796 -       ATH_ALLOC_BANK(ah->analogBank0Data, ah->iniBank0.ia_rows);
35797 -       ATH_ALLOC_BANK(ah->analogBank1Data, ah->iniBank1.ia_rows);
35798 -       ATH_ALLOC_BANK(ah->analogBank2Data, ah->iniBank2.ia_rows);
35799 -       ATH_ALLOC_BANK(ah->analogBank3Data, ah->iniBank3.ia_rows);
35800 -       ATH_ALLOC_BANK(ah->analogBank6Data, ah->iniBank6.ia_rows);
35801 -       ATH_ALLOC_BANK(ah->analogBank6TPCData, ah->iniBank6TPC.ia_rows);
35802 -       ATH_ALLOC_BANK(ah->analogBank7Data, ah->iniBank7.ia_rows);
35803 -       ATH_ALLOC_BANK(ah->addac5416_21,
35804 -                      ah->iniAddac.ia_rows * ah->iniAddac.ia_columns);
35805 -       ATH_ALLOC_BANK(ah->bank6Temp, ah->iniBank6.ia_rows);
35806 -
35807 -       return 0;
35808 -#undef ATH_ALLOC_BANK
35809 -}
35810 -
35811 -
35812 -/**
35813 - * ath9k_hw_rf_free_ext_banks - Free memory for analog bank scratch buffers
35814 - * @ah: atheros hardware struture
35815 - * For the external AR2133/AR5133 radios banks.
35816 - */
35817 -void
35818 -ath9k_hw_rf_free_ext_banks(struct ath_hw *ah)
35819 -{
35820 -#define ATH_FREE_BANK(bank) do { \
35821 -               kfree(bank); \
35822 -               bank = NULL; \
35823 -       } while (0);
35824 -
35825 -       BUG_ON(AR_SREV_9280_10_OR_LATER(ah));
35826 -
35827 -       ATH_FREE_BANK(ah->analogBank0Data);
35828 -       ATH_FREE_BANK(ah->analogBank1Data);
35829 -       ATH_FREE_BANK(ah->analogBank2Data);
35830 -       ATH_FREE_BANK(ah->analogBank3Data);
35831 -       ATH_FREE_BANK(ah->analogBank6Data);
35832 -       ATH_FREE_BANK(ah->analogBank6TPCData);
35833 -       ATH_FREE_BANK(ah->analogBank7Data);
35834 -       ATH_FREE_BANK(ah->addac5416_21);
35835 -       ATH_FREE_BANK(ah->bank6Temp);
35836 -
35837 -#undef ATH_FREE_BANK
35838 -}
35839 -
35840 -/* *
35841 - * ath9k_hw_set_rf_regs - programs rf registers based on EEPROM
35842 - * @ah: atheros hardware structure
35843 - * @chan:
35844 - * @modesIndex:
35845 - *
35846 - * Used for the external AR2133/AR5133 radios.
35847 - *
35848 - * Reads the EEPROM header info from the device structure and programs
35849 - * all rf registers. This routine requires access to the analog
35850 - * rf device. This is not required for single-chip devices.
35851 - */
35852 -bool ath9k_hw_set_rf_regs(struct ath_hw *ah, struct ath9k_channel *chan,
35853 -                         u16 modesIndex)
35854 -{
35855 -       u32 eepMinorRev;
35856 -       u32 ob5GHz = 0, db5GHz = 0;
35857 -       u32 ob2GHz = 0, db2GHz = 0;
35858 -       int regWrites = 0;
35859 -
35860 -       /*
35861 -        * Software does not need to program bank data
35862 -        * for single chip devices, that is AR9280 or anything
35863 -        * after that.
35864 -        */
35865 -       if (AR_SREV_9280_10_OR_LATER(ah))
35866 -               return true;
35867 -
35868 -       /* Setup rf parameters */
35869 -       eepMinorRev = ah->eep_ops->get_eeprom(ah, EEP_MINOR_REV);
35870 -
35871 -       /* Setup Bank 0 Write */
35872 -       RF_BANK_SETUP(ah->analogBank0Data, &ah->iniBank0, 1);
35873 -
35874 -       /* Setup Bank 1 Write */
35875 -       RF_BANK_SETUP(ah->analogBank1Data, &ah->iniBank1, 1);
35876 -
35877 -       /* Setup Bank 2 Write */
35878 -       RF_BANK_SETUP(ah->analogBank2Data, &ah->iniBank2, 1);
35879 -
35880 -       /* Setup Bank 6 Write */
35881 -       RF_BANK_SETUP(ah->analogBank3Data, &ah->iniBank3,
35882 -                     modesIndex);
35883 -       {
35884 -               int i;
35885 -               for (i = 0; i < ah->iniBank6TPC.ia_rows; i++) {
35886 -                       ah->analogBank6Data[i] =
35887 -                           INI_RA(&ah->iniBank6TPC, i, modesIndex);
35888 -               }
35889 -       }
35890 -
35891 -       /* Only the 5 or 2 GHz OB/DB need to be set for a mode */
35892 -       if (eepMinorRev >= 2) {
35893 -               if (IS_CHAN_2GHZ(chan)) {
35894 -                       ob2GHz = ah->eep_ops->get_eeprom(ah, EEP_OB_2);
35895 -                       db2GHz = ah->eep_ops->get_eeprom(ah, EEP_DB_2);
35896 -                       ath9k_phy_modify_rx_buffer(ah->analogBank6Data,
35897 -                                                  ob2GHz, 3, 197, 0);
35898 -                       ath9k_phy_modify_rx_buffer(ah->analogBank6Data,
35899 -                                                  db2GHz, 3, 194, 0);
35900 -               } else {
35901 -                       ob5GHz = ah->eep_ops->get_eeprom(ah, EEP_OB_5);
35902 -                       db5GHz = ah->eep_ops->get_eeprom(ah, EEP_DB_5);
35903 -                       ath9k_phy_modify_rx_buffer(ah->analogBank6Data,
35904 -                                                  ob5GHz, 3, 203, 0);
35905 -                       ath9k_phy_modify_rx_buffer(ah->analogBank6Data,
35906 -                                                  db5GHz, 3, 200, 0);
35907 -               }
35908 -       }
35909 -
35910 -       /* Setup Bank 7 Setup */
35911 -       RF_BANK_SETUP(ah->analogBank7Data, &ah->iniBank7, 1);
35912 -
35913 -       /* Write Analog registers */
35914 -       REG_WRITE_RF_ARRAY(&ah->iniBank0, ah->analogBank0Data,
35915 -                          regWrites);
35916 -       REG_WRITE_RF_ARRAY(&ah->iniBank1, ah->analogBank1Data,
35917 -                          regWrites);
35918 -       REG_WRITE_RF_ARRAY(&ah->iniBank2, ah->analogBank2Data,
35919 -                          regWrites);
35920 -       REG_WRITE_RF_ARRAY(&ah->iniBank3, ah->analogBank3Data,
35921 -                          regWrites);
35922 -       REG_WRITE_RF_ARRAY(&ah->iniBank6TPC, ah->analogBank6Data,
35923 -                          regWrites);
35924 -       REG_WRITE_RF_ARRAY(&ah->iniBank7, ah->analogBank7Data,
35925 -                          regWrites);
35926 -
35927 -       return true;
35928 -}
35929 diff --git a/drivers/net/wireless/ath/ath9k/phy.h b/drivers/net/wireless/ath/ath9k/phy.h
35930 index 0132e4c..e724c2c 100644
35931 --- a/drivers/net/wireless/ath/ath9k/phy.h
35932 +++ b/drivers/net/wireless/ath/ath9k/phy.h
35933 @@ -17,504 +17,15 @@
35934  #ifndef PHY_H
35935  #define PHY_H
35936  
35937 -/* Common between single chip and non single-chip solutions */
35938 -void ath9k_hw_write_regs(struct ath_hw *ah, u32 freqIndex, int regWrites);
35939 -
35940 -/* Single chip radio settings */
35941 -int ath9k_hw_ar9280_set_channel(struct ath_hw *ah, struct ath9k_channel *chan);
35942 -void ath9k_hw_9280_spur_mitigate(struct ath_hw *ah, struct ath9k_channel *chan);
35943 -
35944 -/* Routines below are for non single-chip solutions */
35945 -int ath9k_hw_set_channel(struct ath_hw *ah, struct ath9k_channel *chan);
35946 -void ath9k_hw_spur_mitigate(struct ath_hw *ah, struct ath9k_channel *chan);
35947 -
35948 -int ath9k_hw_rf_alloc_ext_banks(struct ath_hw *ah);
35949 -void ath9k_hw_rf_free_ext_banks(struct ath_hw *ah);
35950 -
35951 -bool ath9k_hw_set_rf_regs(struct ath_hw *ah,
35952 -                         struct ath9k_channel *chan,
35953 -                         u16 modesIndex);
35954 +#define CHANSEL_DIV            15
35955 +#define CHANSEL_2G(_freq)      (((_freq) * 0x10000) / CHANSEL_DIV)
35956 +#define CHANSEL_5G(_freq)      (((_freq) * 0x8000) / CHANSEL_DIV)
35957  
35958  #define AR_PHY_BASE     0x9800
35959  #define AR_PHY(_n)      (AR_PHY_BASE + ((_n)<<2))
35960  
35961 -#define AR_PHY_TEST             0x9800
35962 -#define PHY_AGC_CLR             0x10000000
35963 -#define RFSILENT_BB             0x00002000
35964 -
35965 -#define AR_PHY_TURBO                0x9804
35966 -#define AR_PHY_FC_TURBO_MODE        0x00000001
35967 -#define AR_PHY_FC_TURBO_SHORT       0x00000002
35968 -#define AR_PHY_FC_DYN2040_EN        0x00000004
35969 -#define AR_PHY_FC_DYN2040_PRI_ONLY  0x00000008
35970 -#define AR_PHY_FC_DYN2040_PRI_CH    0x00000010
35971 -/* For 25 MHz channel spacing -- not used but supported by hw */
35972 -#define AR_PHY_FC_DYN2040_EXT_CH    0x00000020
35973 -#define AR_PHY_FC_HT_EN             0x00000040
35974 -#define AR_PHY_FC_SHORT_GI_40       0x00000080
35975 -#define AR_PHY_FC_WALSH             0x00000100
35976 -#define AR_PHY_FC_SINGLE_HT_LTF1    0x00000200
35977 -#define AR_PHY_FC_ENABLE_DAC_FIFO   0x00000800
35978 -
35979 -#define AR_PHY_TEST2               0x9808
35980 -
35981 -#define AR_PHY_TIMING2           0x9810
35982 -#define AR_PHY_TIMING3           0x9814
35983 -#define AR_PHY_TIMING3_DSC_MAN   0xFFFE0000
35984 -#define AR_PHY_TIMING3_DSC_MAN_S 17
35985 -#define AR_PHY_TIMING3_DSC_EXP   0x0001E000
35986 -#define AR_PHY_TIMING3_DSC_EXP_S 13
35987 -
35988 -#define AR_PHY_CHIP_ID            0x9818
35989 -#define AR_PHY_CHIP_ID_REV_0      0x80
35990 -#define AR_PHY_CHIP_ID_REV_1      0x81
35991 -#define AR_PHY_CHIP_ID_9160_REV_0 0xb0
35992 -
35993 -#define AR_PHY_ACTIVE       0x981C
35994 -#define AR_PHY_ACTIVE_EN    0x00000001
35995 -#define AR_PHY_ACTIVE_DIS   0x00000000
35996 -
35997 -#define AR_PHY_RF_CTL2             0x9824
35998 -#define AR_PHY_TX_END_DATA_START   0x000000FF
35999 -#define AR_PHY_TX_END_DATA_START_S 0
36000 -#define AR_PHY_TX_END_PA_ON        0x0000FF00
36001 -#define AR_PHY_TX_END_PA_ON_S      8
36002 -
36003 -#define AR_PHY_RF_CTL3                  0x9828
36004 -#define AR_PHY_TX_END_TO_A2_RX_ON       0x00FF0000
36005 -#define AR_PHY_TX_END_TO_A2_RX_ON_S     16
36006 -
36007 -#define AR_PHY_ADC_CTL                  0x982C
36008 -#define AR_PHY_ADC_CTL_OFF_INBUFGAIN    0x00000003
36009 -#define AR_PHY_ADC_CTL_OFF_INBUFGAIN_S  0
36010 -#define AR_PHY_ADC_CTL_OFF_PWDDAC       0x00002000
36011 -#define AR_PHY_ADC_CTL_OFF_PWDBANDGAP   0x00004000
36012 -#define AR_PHY_ADC_CTL_OFF_PWDADC       0x00008000
36013 -#define AR_PHY_ADC_CTL_ON_INBUFGAIN     0x00030000
36014 -#define AR_PHY_ADC_CTL_ON_INBUFGAIN_S   16
36015 -
36016 -#define AR_PHY_ADC_SERIAL_CTL       0x9830
36017 -#define AR_PHY_SEL_INTERNAL_ADDAC   0x00000000
36018 -#define AR_PHY_SEL_EXTERNAL_RADIO   0x00000001
36019 -
36020 -#define AR_PHY_RF_CTL4                    0x9834
36021 -#define AR_PHY_RF_CTL4_TX_END_XPAB_OFF    0xFF000000
36022 -#define AR_PHY_RF_CTL4_TX_END_XPAB_OFF_S  24
36023 -#define AR_PHY_RF_CTL4_TX_END_XPAA_OFF    0x00FF0000
36024 -#define AR_PHY_RF_CTL4_TX_END_XPAA_OFF_S  16
36025 -#define AR_PHY_RF_CTL4_FRAME_XPAB_ON      0x0000FF00
36026 -#define AR_PHY_RF_CTL4_FRAME_XPAB_ON_S    8
36027 -#define AR_PHY_RF_CTL4_FRAME_XPAA_ON      0x000000FF
36028 -#define AR_PHY_RF_CTL4_FRAME_XPAA_ON_S    0
36029 -
36030 -#define AR_PHY_TSTDAC_CONST               0x983c
36031 -
36032 -#define AR_PHY_SETTLING          0x9844
36033 -#define AR_PHY_SETTLING_SWITCH   0x00003F80
36034 -#define AR_PHY_SETTLING_SWITCH_S 7
36035 -
36036 -#define AR_PHY_RXGAIN                   0x9848
36037 -#define AR_PHY_RXGAIN_TXRX_ATTEN        0x0003F000
36038 -#define AR_PHY_RXGAIN_TXRX_ATTEN_S      12
36039 -#define AR_PHY_RXGAIN_TXRX_RF_MAX       0x007C0000
36040 -#define AR_PHY_RXGAIN_TXRX_RF_MAX_S     18
36041 -#define AR9280_PHY_RXGAIN_TXRX_ATTEN    0x00003F80
36042 -#define AR9280_PHY_RXGAIN_TXRX_ATTEN_S  7
36043 -#define AR9280_PHY_RXGAIN_TXRX_MARGIN   0x001FC000
36044 -#define AR9280_PHY_RXGAIN_TXRX_MARGIN_S 14
36045 -
36046 -#define AR_PHY_DESIRED_SZ           0x9850
36047 -#define AR_PHY_DESIRED_SZ_ADC       0x000000FF
36048 -#define AR_PHY_DESIRED_SZ_ADC_S     0
36049 -#define AR_PHY_DESIRED_SZ_PGA       0x0000FF00
36050 -#define AR_PHY_DESIRED_SZ_PGA_S     8
36051 -#define AR_PHY_DESIRED_SZ_TOT_DES   0x0FF00000
36052 -#define AR_PHY_DESIRED_SZ_TOT_DES_S 20
36053 -
36054 -#define AR_PHY_FIND_SIG           0x9858
36055 -#define AR_PHY_FIND_SIG_FIRSTEP   0x0003F000
36056 -#define AR_PHY_FIND_SIG_FIRSTEP_S 12
36057 -#define AR_PHY_FIND_SIG_FIRPWR    0x03FC0000
36058 -#define AR_PHY_FIND_SIG_FIRPWR_S  18
36059 -
36060 -#define AR_PHY_AGC_CTL1                  0x985C
36061 -#define AR_PHY_AGC_CTL1_COARSE_LOW       0x00007F80
36062 -#define AR_PHY_AGC_CTL1_COARSE_LOW_S     7
36063 -#define AR_PHY_AGC_CTL1_COARSE_HIGH      0x003F8000
36064 -#define AR_PHY_AGC_CTL1_COARSE_HIGH_S    15
36065 -
36066 -#define AR_PHY_AGC_CONTROL               0x9860
36067 -#define AR_PHY_AGC_CONTROL_CAL           0x00000001
36068 -#define AR_PHY_AGC_CONTROL_NF            0x00000002
36069 -#define AR_PHY_AGC_CONTROL_ENABLE_NF     0x00008000
36070 -#define AR_PHY_AGC_CONTROL_FLTR_CAL      0x00010000
36071 -#define AR_PHY_AGC_CONTROL_NO_UPDATE_NF  0x00020000
36072 -
36073 -#define AR_PHY_CCA                  0x9864
36074 -#define AR_PHY_MINCCA_PWR           0x0FF80000
36075 -#define AR_PHY_MINCCA_PWR_S         19
36076 -#define AR_PHY_CCA_THRESH62         0x0007F000
36077 -#define AR_PHY_CCA_THRESH62_S       12
36078 -#define AR9280_PHY_MINCCA_PWR       0x1FF00000
36079 -#define AR9280_PHY_MINCCA_PWR_S     20
36080 -#define AR9280_PHY_CCA_THRESH62     0x000FF000
36081 -#define AR9280_PHY_CCA_THRESH62_S   12
36082 -
36083 -#define AR_PHY_SFCORR_LOW                    0x986C
36084 -#define AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW  0x00000001
36085 -#define AR_PHY_SFCORR_LOW_M2COUNT_THR_LOW    0x00003F00
36086 -#define AR_PHY_SFCORR_LOW_M2COUNT_THR_LOW_S  8
36087 -#define AR_PHY_SFCORR_LOW_M1_THRESH_LOW      0x001FC000
36088 -#define AR_PHY_SFCORR_LOW_M1_THRESH_LOW_S    14
36089 -#define AR_PHY_SFCORR_LOW_M2_THRESH_LOW      0x0FE00000
36090 -#define AR_PHY_SFCORR_LOW_M2_THRESH_LOW_S    21
36091 -
36092 -#define AR_PHY_SFCORR                0x9868
36093 -#define AR_PHY_SFCORR_M2COUNT_THR    0x0000001F
36094 -#define AR_PHY_SFCORR_M2COUNT_THR_S  0
36095 -#define AR_PHY_SFCORR_M1_THRESH      0x00FE0000
36096 -#define AR_PHY_SFCORR_M1_THRESH_S    17
36097 -#define AR_PHY_SFCORR_M2_THRESH      0x7F000000
36098 -#define AR_PHY_SFCORR_M2_THRESH_S    24
36099 -
36100 -#define AR_PHY_SLEEP_CTR_CONTROL    0x9870
36101 -#define AR_PHY_SLEEP_CTR_LIMIT      0x9874
36102 -#define AR_PHY_SYNTH_CONTROL        0x9874
36103 -#define AR_PHY_SLEEP_SCAL           0x9878
36104 -
36105 -#define AR_PHY_PLL_CTL          0x987c
36106 -#define AR_PHY_PLL_CTL_40       0xaa
36107 -#define AR_PHY_PLL_CTL_40_5413  0x04
36108 -#define AR_PHY_PLL_CTL_44       0xab
36109 -#define AR_PHY_PLL_CTL_44_2133  0xeb
36110 -#define AR_PHY_PLL_CTL_40_2133  0xea
36111 -
36112 -#define AR_PHY_SPECTRAL_SCAN                   0x9910  /* AR9280 spectral scan configuration register */
36113 -#define        AR_PHY_SPECTRAL_SCAN_ENABLE             0x1
36114 -#define AR_PHY_SPECTRAL_SCAN_ENA               0x00000001  /* Enable spectral scan, reg 68, bit 0 */
36115 -#define AR_PHY_SPECTRAL_SCAN_ENA_S             0  /* Enable spectral scan, reg 68, bit 0 */
36116 -#define AR_PHY_SPECTRAL_SCAN_ACTIVE            0x00000002  /* Activate spectral scan reg 68, bit 1*/
36117 -#define AR_PHY_SPECTRAL_SCAN_ACTIVE_S          1  /* Activate spectral scan reg 68, bit 1*/
36118 -#define AR_PHY_SPECTRAL_SCAN_FFT_PERIOD                0x000000F0  /* Interval for FFT reports, reg 68, bits 4-7*/
36119 -#define AR_PHY_SPECTRAL_SCAN_FFT_PERIOD_S      4
36120 -#define AR_PHY_SPECTRAL_SCAN_PERIOD            0x0000FF00  /* Interval for FFT reports, reg 68, bits 8-15*/
36121 -#define AR_PHY_SPECTRAL_SCAN_PERIOD_S          8
36122 -#define AR_PHY_SPECTRAL_SCAN_COUNT             0x00FF0000  /* Number of reports, reg 68, bits 16-23*/
36123 -#define AR_PHY_SPECTRAL_SCAN_COUNT_S           16
36124 -#define AR_PHY_SPECTRAL_SCAN_SHORT_REPEAT      0x01000000  /* Short repeat, reg 68, bit 24*/
36125 -#define AR_PHY_SPECTRAL_SCAN_SHORT_REPEAT_S    24  /* Short repeat, reg 68, bit 24*/
36126 -
36127 -#define AR_PHY_RX_DELAY           0x9914
36128 -#define AR_PHY_SEARCH_START_DELAY 0x9918
36129 -#define AR_PHY_RX_DELAY_DELAY     0x00003FFF
36130 -
36131 -#define AR_PHY_TIMING_CTRL4(_i)     (0x9920 + ((_i) << 12))
36132 -#define AR_PHY_TIMING_CTRL4_IQCORR_Q_Q_COFF 0x01F
36133 -#define AR_PHY_TIMING_CTRL4_IQCORR_Q_Q_COFF_S   0
36134 -#define AR_PHY_TIMING_CTRL4_IQCORR_Q_I_COFF 0x7E0
36135 -#define AR_PHY_TIMING_CTRL4_IQCORR_Q_I_COFF_S   5
36136 -#define AR_PHY_TIMING_CTRL4_IQCORR_ENABLE   0x800
36137 -#define AR_PHY_TIMING_CTRL4_IQCAL_LOG_COUNT_MAX 0xF000
36138 -#define AR_PHY_TIMING_CTRL4_IQCAL_LOG_COUNT_MAX_S   12
36139 -#define AR_PHY_TIMING_CTRL4_DO_CAL    0x10000
36140 -
36141 -#define AR_PHY_TIMING_CTRL4_ENABLE_SPUR_RSSI   0x80000000
36142 -#define        AR_PHY_TIMING_CTRL4_ENABLE_SPUR_FILTER  0x40000000
36143 -#define        AR_PHY_TIMING_CTRL4_ENABLE_CHAN_MASK    0x20000000
36144 -#define        AR_PHY_TIMING_CTRL4_ENABLE_PILOT_MASK   0x10000000
36145 -
36146 -#define AR_PHY_TIMING5               0x9924
36147 -#define AR_PHY_TIMING5_CYCPWR_THR1   0x000000FE
36148 -#define AR_PHY_TIMING5_CYCPWR_THR1_S 1
36149 -
36150 -#define AR_PHY_POWER_TX_RATE1               0x9934
36151 -#define AR_PHY_POWER_TX_RATE2               0x9938
36152 -#define AR_PHY_POWER_TX_RATE_MAX            0x993c
36153 -#define AR_PHY_POWER_TX_RATE_MAX_TPC_ENABLE 0x00000040
36154 -
36155 -#define AR_PHY_FRAME_CTL            0x9944
36156 -#define AR_PHY_FRAME_CTL_TX_CLIP    0x00000038
36157 -#define AR_PHY_FRAME_CTL_TX_CLIP_S  3
36158 -
36159 -#define AR_PHY_TXPWRADJ                   0x994C
36160 -#define AR_PHY_TXPWRADJ_CCK_GAIN_DELTA    0x00000FC0
36161 -#define AR_PHY_TXPWRADJ_CCK_GAIN_DELTA_S  6
36162 -#define AR_PHY_TXPWRADJ_CCK_PCDAC_INDEX   0x00FC0000
36163 -#define AR_PHY_TXPWRADJ_CCK_PCDAC_INDEX_S 18
36164 -
36165 -#define AR_PHY_RADAR_EXT      0x9940
36166 -#define AR_PHY_RADAR_EXT_ENA  0x00004000
36167 -
36168 -#define AR_PHY_RADAR_0          0x9954
36169 -#define AR_PHY_RADAR_0_ENA      0x00000001
36170 -#define AR_PHY_RADAR_0_FFT_ENA  0x80000000
36171 -#define AR_PHY_RADAR_0_INBAND   0x0000003e
36172 -#define AR_PHY_RADAR_0_INBAND_S 1
36173 -#define AR_PHY_RADAR_0_PRSSI    0x00000FC0
36174 -#define AR_PHY_RADAR_0_PRSSI_S  6
36175 -#define AR_PHY_RADAR_0_HEIGHT   0x0003F000
36176 -#define AR_PHY_RADAR_0_HEIGHT_S 12
36177 -#define AR_PHY_RADAR_0_RRSSI    0x00FC0000
36178 -#define AR_PHY_RADAR_0_RRSSI_S  18
36179 -#define AR_PHY_RADAR_0_FIRPWR   0x7F000000
36180 -#define AR_PHY_RADAR_0_FIRPWR_S 24
36181 -
36182 -#define AR_PHY_RADAR_1                  0x9958
36183 -#define AR_PHY_RADAR_1_RELPWR_ENA       0x00800000
36184 -#define AR_PHY_RADAR_1_USE_FIR128       0x00400000
36185 -#define AR_PHY_RADAR_1_RELPWR_THRESH    0x003F0000
36186 -#define AR_PHY_RADAR_1_RELPWR_THRESH_S  16
36187 -#define AR_PHY_RADAR_1_BLOCK_CHECK      0x00008000
36188 -#define AR_PHY_RADAR_1_MAX_RRSSI        0x00004000
36189 -#define AR_PHY_RADAR_1_RELSTEP_CHECK    0x00002000
36190 -#define AR_PHY_RADAR_1_RELSTEP_THRESH   0x00001F00
36191 -#define AR_PHY_RADAR_1_RELSTEP_THRESH_S 8
36192 -#define AR_PHY_RADAR_1_MAXLEN           0x000000FF
36193 -#define AR_PHY_RADAR_1_MAXLEN_S         0
36194 -
36195 -#define AR_PHY_SWITCH_CHAIN_0     0x9960
36196 -#define AR_PHY_SWITCH_COM         0x9964
36197 -
36198 -#define AR_PHY_SIGMA_DELTA            0x996C
36199 -#define AR_PHY_SIGMA_DELTA_ADC_SEL    0x00000003
36200 -#define AR_PHY_SIGMA_DELTA_ADC_SEL_S  0
36201 -#define AR_PHY_SIGMA_DELTA_FILT2      0x000000F8
36202 -#define AR_PHY_SIGMA_DELTA_FILT2_S    3
36203 -#define AR_PHY_SIGMA_DELTA_FILT1      0x00001F00
36204 -#define AR_PHY_SIGMA_DELTA_FILT1_S    8
36205 -#define AR_PHY_SIGMA_DELTA_ADC_CLIP   0x01FFE000
36206 -#define AR_PHY_SIGMA_DELTA_ADC_CLIP_S 13
36207 -
36208 -#define AR_PHY_RESTART          0x9970
36209 -#define AR_PHY_RESTART_DIV_GC   0x001C0000
36210 -#define AR_PHY_RESTART_DIV_GC_S 18
36211 -
36212 -#define AR_PHY_RFBUS_REQ        0x997C
36213 -#define AR_PHY_RFBUS_REQ_EN     0x00000001
36214 -
36215 -#define        AR_PHY_TIMING7                  0x9980
36216 -#define        AR_PHY_TIMING8                  0x9984
36217 -#define        AR_PHY_TIMING8_PILOT_MASK_2     0x000FFFFF
36218 -#define        AR_PHY_TIMING8_PILOT_MASK_2_S   0
36219 -
36220 -#define        AR_PHY_BIN_MASK2_1      0x9988
36221 -#define        AR_PHY_BIN_MASK2_2      0x998c
36222 -#define        AR_PHY_BIN_MASK2_3      0x9990
36223 -#define        AR_PHY_BIN_MASK2_4      0x9994
36224 -
36225 -#define        AR_PHY_BIN_MASK_1       0x9900
36226 -#define        AR_PHY_BIN_MASK_2       0x9904
36227 -#define        AR_PHY_BIN_MASK_3       0x9908
36228 -
36229 -#define        AR_PHY_MASK_CTL         0x990c
36230 -
36231 -#define        AR_PHY_BIN_MASK2_4_MASK_4       0x00003FFF
36232 -#define        AR_PHY_BIN_MASK2_4_MASK_4_S     0
36233 -
36234 -#define        AR_PHY_TIMING9                  0x9998
36235 -#define        AR_PHY_TIMING10                 0x999c
36236 -#define        AR_PHY_TIMING10_PILOT_MASK_2    0x000FFFFF
36237 -#define        AR_PHY_TIMING10_PILOT_MASK_2_S  0
36238 -
36239 -#define        AR_PHY_TIMING11                         0x99a0
36240 -#define        AR_PHY_TIMING11_SPUR_DELTA_PHASE        0x000FFFFF
36241 -#define        AR_PHY_TIMING11_SPUR_DELTA_PHASE_S      0
36242 -#define        AR_PHY_TIMING11_SPUR_FREQ_SD            0x3FF00000
36243 -#define        AR_PHY_TIMING11_SPUR_FREQ_SD_S          20
36244 -#define AR_PHY_TIMING11_USE_SPUR_IN_AGC                0x40000000
36245 -#define AR_PHY_TIMING11_USE_SPUR_IN_SELFCOR    0x80000000
36246 -
36247 -#define AR_PHY_RX_CHAINMASK     0x99a4
36248 -#define AR_PHY_NEW_ADC_DC_GAIN_CORR(_i) (0x99b4 + ((_i) << 12))
36249 -#define AR_PHY_NEW_ADC_GAIN_CORR_ENABLE 0x40000000
36250 -#define AR_PHY_NEW_ADC_DC_OFFSET_CORR_ENABLE 0x80000000
36251 -
36252 -#define AR_PHY_MULTICHAIN_GAIN_CTL          0x99ac
36253 -#define AR_PHY_9285_ANT_DIV_CTL_ALL         0x7f000000
36254 -#define AR_PHY_9285_ANT_DIV_CTL             0x01000000
36255 -#define AR_PHY_9285_ANT_DIV_CTL_S           24
36256 -#define AR_PHY_9285_ANT_DIV_ALT_LNACONF     0x06000000
36257 -#define AR_PHY_9285_ANT_DIV_ALT_LNACONF_S   25
36258 -#define AR_PHY_9285_ANT_DIV_MAIN_LNACONF    0x18000000
36259 -#define AR_PHY_9285_ANT_DIV_MAIN_LNACONF_S  27
36260 -#define AR_PHY_9285_ANT_DIV_ALT_GAINTB      0x20000000
36261 -#define AR_PHY_9285_ANT_DIV_ALT_GAINTB_S    29
36262 -#define AR_PHY_9285_ANT_DIV_MAIN_GAINTB     0x40000000
36263 -#define AR_PHY_9285_ANT_DIV_MAIN_GAINTB_S   30
36264 -#define AR_PHY_9285_ANT_DIV_LNA1            2
36265 -#define AR_PHY_9285_ANT_DIV_LNA2            1
36266 -#define AR_PHY_9285_ANT_DIV_LNA1_PLUS_LNA2  3
36267 -#define AR_PHY_9285_ANT_DIV_LNA1_MINUS_LNA2 0
36268 -#define AR_PHY_9285_ANT_DIV_GAINTB_0        0
36269 -#define AR_PHY_9285_ANT_DIV_GAINTB_1        1
36270 -
36271 -#define AR_PHY_EXT_CCA0             0x99b8
36272 -#define AR_PHY_EXT_CCA0_THRESH62    0x000000FF
36273 -#define AR_PHY_EXT_CCA0_THRESH62_S  0
36274 -
36275 -#define AR_PHY_EXT_CCA                  0x99bc
36276 -#define AR_PHY_EXT_CCA_CYCPWR_THR1      0x0000FE00
36277 -#define AR_PHY_EXT_CCA_CYCPWR_THR1_S    9
36278 -#define AR_PHY_EXT_CCA_THRESH62         0x007F0000
36279 -#define AR_PHY_EXT_CCA_THRESH62_S       16
36280 -#define AR_PHY_EXT_MINCCA_PWR           0xFF800000
36281 -#define AR_PHY_EXT_MINCCA_PWR_S         23
36282 -#define AR9280_PHY_EXT_MINCCA_PWR       0x01FF0000
36283 -#define AR9280_PHY_EXT_MINCCA_PWR_S     16
36284 -
36285 -#define AR_PHY_SFCORR_EXT                 0x99c0
36286 -#define AR_PHY_SFCORR_EXT_M1_THRESH       0x0000007F
36287 -#define AR_PHY_SFCORR_EXT_M1_THRESH_S     0
36288 -#define AR_PHY_SFCORR_EXT_M2_THRESH       0x00003F80
36289 -#define AR_PHY_SFCORR_EXT_M2_THRESH_S     7
36290 -#define AR_PHY_SFCORR_EXT_M1_THRESH_LOW   0x001FC000
36291 -#define AR_PHY_SFCORR_EXT_M1_THRESH_LOW_S 14
36292 -#define AR_PHY_SFCORR_EXT_M2_THRESH_LOW   0x0FE00000
36293 -#define AR_PHY_SFCORR_EXT_M2_THRESH_LOW_S 21
36294 -#define AR_PHY_SFCORR_SPUR_SUBCHNL_SD_S   28
36295 -
36296 -#define AR_PHY_HALFGI           0x99D0
36297 -#define AR_PHY_HALFGI_DSC_MAN   0x0007FFF0
36298 -#define AR_PHY_HALFGI_DSC_MAN_S 4
36299 -#define AR_PHY_HALFGI_DSC_EXP   0x0000000F
36300 -#define AR_PHY_HALFGI_DSC_EXP_S 0
36301 -
36302 -#define AR_PHY_CHAN_INFO_MEMORY               0x99DC
36303 -#define AR_PHY_CHAN_INFO_MEMORY_CAPTURE_MASK  0x0001
36304 -
36305 -#define AR_PHY_HEAVY_CLIP_ENABLE         0x99E0
36306 -
36307 -#define AR_PHY_HEAVY_CLIP_FACTOR_RIFS    0x99EC
36308 -#define AR_PHY_RIFS_INIT_DELAY         0x03ff0000
36309 -
36310 -#define AR_PHY_M_SLEEP      0x99f0
36311 -#define AR_PHY_REFCLKDLY    0x99f4
36312 -#define AR_PHY_REFCLKPD     0x99f8
36313 -
36314 -#define AR_PHY_CALMODE      0x99f0
36315 -
36316 -#define AR_PHY_CALMODE_IQ           0x00000000
36317 -#define AR_PHY_CALMODE_ADC_GAIN     0x00000001
36318 -#define AR_PHY_CALMODE_ADC_DC_PER   0x00000002
36319 -#define AR_PHY_CALMODE_ADC_DC_INIT  0x00000003
36320 -
36321 -#define AR_PHY_CAL_MEAS_0(_i)     (0x9c10 + ((_i) << 12))
36322 -#define AR_PHY_CAL_MEAS_1(_i)     (0x9c14 + ((_i) << 12))
36323 -#define AR_PHY_CAL_MEAS_2(_i)     (0x9c18 + ((_i) << 12))
36324 -#define AR_PHY_CAL_MEAS_3(_i)     (0x9c1c + ((_i) << 12))
36325 -
36326 -#define AR_PHY_CURRENT_RSSI 0x9c1c
36327 -#define AR9280_PHY_CURRENT_RSSI 0x9c3c
36328 -
36329 -#define AR_PHY_RFBUS_GRANT       0x9C20
36330 -#define AR_PHY_RFBUS_GRANT_EN    0x00000001
36331 -
36332 -#define AR_PHY_CHAN_INFO_GAIN_DIFF             0x9CF4
36333 -#define AR_PHY_CHAN_INFO_GAIN_DIFF_UPPER_LIMIT 320
36334 -
36335 -#define AR_PHY_CHAN_INFO_GAIN          0x9CFC
36336 -
36337 -#define AR_PHY_MODE         0xA200
36338 -#define AR_PHY_MODE_ASYNCFIFO 0x80
36339 -#define AR_PHY_MODE_AR2133  0x08
36340 -#define AR_PHY_MODE_AR5111  0x00
36341 -#define AR_PHY_MODE_AR5112  0x08
36342 -#define AR_PHY_MODE_DYNAMIC 0x04
36343 -#define AR_PHY_MODE_RF2GHZ  0x02
36344 -#define AR_PHY_MODE_RF5GHZ  0x00
36345 -#define AR_PHY_MODE_CCK     0x01
36346 -#define AR_PHY_MODE_OFDM    0x00
36347 -#define AR_PHY_MODE_DYN_CCK_DISABLE 0x100
36348 -
36349 -#define AR_PHY_CCK_TX_CTRL       0xA204
36350 -#define AR_PHY_CCK_TX_CTRL_JAPAN 0x00000010
36351 -#define AR_PHY_CCK_TX_CTRL_TX_DAC_SCALE_CCK         0x0000000C
36352 -#define AR_PHY_CCK_TX_CTRL_TX_DAC_SCALE_CCK_S       2
36353 -
36354 -#define AR_PHY_CCK_DETECT                           0xA208
36355 -#define AR_PHY_CCK_DETECT_WEAK_SIG_THR_CCK          0x0000003F
36356 -#define AR_PHY_CCK_DETECT_WEAK_SIG_THR_CCK_S        0
36357 -/* [12:6] settling time for antenna switch */
36358 -#define AR_PHY_CCK_DETECT_ANT_SWITCH_TIME           0x00001FC0
36359 -#define AR_PHY_CCK_DETECT_ANT_SWITCH_TIME_S         6
36360 -#define AR_PHY_CCK_DETECT_BB_ENABLE_ANT_FAST_DIV    0x2000
36361 -#define AR_PHY_CCK_DETECT_BB_ENABLE_ANT_FAST_DIV_S  13
36362 -
36363 -#define AR_PHY_GAIN_2GHZ                0xA20C
36364 -#define AR_PHY_GAIN_2GHZ_RXTX_MARGIN    0x00FC0000
36365 -#define AR_PHY_GAIN_2GHZ_RXTX_MARGIN_S  18
36366 -#define AR_PHY_GAIN_2GHZ_BSW_MARGIN     0x00003C00
36367 -#define AR_PHY_GAIN_2GHZ_BSW_MARGIN_S   10
36368 -#define AR_PHY_GAIN_2GHZ_BSW_ATTEN      0x0000001F
36369 -#define AR_PHY_GAIN_2GHZ_BSW_ATTEN_S    0
36370 -
36371 -#define AR_PHY_GAIN_2GHZ_XATTEN2_MARGIN     0x003E0000
36372 -#define AR_PHY_GAIN_2GHZ_XATTEN2_MARGIN_S   17
36373 -#define AR_PHY_GAIN_2GHZ_XATTEN1_MARGIN     0x0001F000
36374 -#define AR_PHY_GAIN_2GHZ_XATTEN1_MARGIN_S   12
36375 -#define AR_PHY_GAIN_2GHZ_XATTEN2_DB         0x00000FC0
36376 -#define AR_PHY_GAIN_2GHZ_XATTEN2_DB_S       6
36377 -#define AR_PHY_GAIN_2GHZ_XATTEN1_DB         0x0000003F
36378 -#define AR_PHY_GAIN_2GHZ_XATTEN1_DB_S       0
36379 -
36380 -#define AR_PHY_CCK_RXCTRL4  0xA21C
36381 -#define AR_PHY_CCK_RXCTRL4_FREQ_EST_SHORT   0x01F80000
36382 -#define AR_PHY_CCK_RXCTRL4_FREQ_EST_SHORT_S 19
36383 -
36384 -#define AR_PHY_DAG_CTRLCCK  0xA228
36385 -#define AR_PHY_DAG_CTRLCCK_EN_RSSI_THR  0x00000200
36386 -#define AR_PHY_DAG_CTRLCCK_RSSI_THR     0x0001FC00
36387 -#define AR_PHY_DAG_CTRLCCK_RSSI_THR_S   10
36388 -
36389 -#define AR_PHY_FORCE_CLKEN_CCK              0xA22C
36390 -#define AR_PHY_FORCE_CLKEN_CCK_MRC_MUX      0x00000040
36391 -
36392 -#define AR_PHY_POWER_TX_RATE3   0xA234
36393 -#define AR_PHY_POWER_TX_RATE4   0xA238
36394 -
36395 -#define AR_PHY_SCRM_SEQ_XR       0xA23C
36396 -#define AR_PHY_HEADER_DETECT_XR  0xA240
36397 -#define AR_PHY_CHIRP_DETECTED_XR 0xA244
36398 -#define AR_PHY_BLUETOOTH         0xA254
36399 -
36400 -#define AR_PHY_TPCRG1   0xA258
36401 -#define AR_PHY_TPCRG1_NUM_PD_GAIN   0x0000c000
36402 -#define AR_PHY_TPCRG1_NUM_PD_GAIN_S 14
36403 -
36404 -#define AR_PHY_TPCRG1_PD_GAIN_1    0x00030000
36405 -#define AR_PHY_TPCRG1_PD_GAIN_1_S  16
36406 -#define AR_PHY_TPCRG1_PD_GAIN_2    0x000C0000
36407 -#define AR_PHY_TPCRG1_PD_GAIN_2_S  18
36408 -#define AR_PHY_TPCRG1_PD_GAIN_3    0x00300000
36409 -#define AR_PHY_TPCRG1_PD_GAIN_3_S  20
36410 -
36411 -#define AR_PHY_TPCRG1_PD_CAL_ENABLE   0x00400000
36412 -#define AR_PHY_TPCRG1_PD_CAL_ENABLE_S 22
36413 -
36414 -#define AR_PHY_TX_PWRCTRL4       0xa264
36415 -#define AR_PHY_TX_PWRCTRL_PD_AVG_VALID     0x00000001
36416 -#define AR_PHY_TX_PWRCTRL_PD_AVG_VALID_S   0
36417 -#define AR_PHY_TX_PWRCTRL_PD_AVG_OUT       0x000001FE
36418 -#define AR_PHY_TX_PWRCTRL_PD_AVG_OUT_S     1
36419 -
36420 -#define AR_PHY_TX_PWRCTRL6_0     0xa270
36421 -#define AR_PHY_TX_PWRCTRL6_1     0xb270
36422 -#define AR_PHY_TX_PWRCTRL_ERR_EST_MODE     0x03000000
36423 -#define AR_PHY_TX_PWRCTRL_ERR_EST_MODE_S   24
36424 -
36425 -#define AR_PHY_TX_PWRCTRL7       0xa274
36426  #define AR_PHY_TX_PWRCTRL_TX_GAIN_TAB_MAX   0x0007E000
36427  #define AR_PHY_TX_PWRCTRL_TX_GAIN_TAB_MAX_S 13
36428 -#define AR_PHY_TX_PWRCTRL_INIT_TX_GAIN     0x01F80000
36429 -#define AR_PHY_TX_PWRCTRL_INIT_TX_GAIN_S   19
36430 -
36431 -#define AR_PHY_TX_PWRCTRL9       0xa27C
36432 -#define AR_PHY_TX_DESIRED_SCALE_CCK        0x00007C00
36433 -#define AR_PHY_TX_DESIRED_SCALE_CCK_S      10
36434 -#define AR_PHY_TX_PWRCTRL9_RES_DC_REMOVAL  0x80000000
36435 -#define AR_PHY_TX_PWRCTRL9_RES_DC_REMOVAL_S 31
36436 -
36437 -#define AR_PHY_TX_GAIN_TBL1      0xa300
36438  #define AR_PHY_TX_GAIN_CLC       0x0000001E
36439  #define AR_PHY_TX_GAIN_CLC_S     1
36440  #define AR_PHY_TX_GAIN           0x0007F000
36441 @@ -526,91 +37,6 @@ bool ath9k_hw_set_rf_regs(struct ath_hw *ah,
36442  #define AR_PHY_CLC_Q0        0x0000ffd0
36443  #define AR_PHY_CLC_Q0_S      5
36444  
36445 -#define AR_PHY_CH0_TX_PWRCTRL11  0xa398
36446 -#define AR_PHY_CH1_TX_PWRCTRL11  0xb398
36447 -#define AR_PHY_TX_PWRCTRL_OLPC_TEMP_COMP   0x0000FC00
36448 -#define AR_PHY_TX_PWRCTRL_OLPC_TEMP_COMP_S 10
36449 -
36450 -#define AR_PHY_VIT_MASK2_M_46_61 0xa3a0
36451 -#define AR_PHY_MASK2_M_31_45     0xa3a4
36452 -#define AR_PHY_MASK2_M_16_30     0xa3a8
36453 -#define AR_PHY_MASK2_M_00_15     0xa3ac
36454 -#define AR_PHY_MASK2_P_15_01     0xa3b8
36455 -#define AR_PHY_MASK2_P_30_16     0xa3bc
36456 -#define AR_PHY_MASK2_P_45_31     0xa3c0
36457 -#define AR_PHY_MASK2_P_61_45     0xa3c4
36458 -#define AR_PHY_SPUR_REG          0x994c
36459 -
36460 -#define AR_PHY_SPUR_REG_MASK_RATE_CNTL       (0xFF << 18)
36461 -#define AR_PHY_SPUR_REG_MASK_RATE_CNTL_S     18
36462 -
36463 -#define AR_PHY_SPUR_REG_ENABLE_MASK_PPM      0x20000
36464 -#define AR_PHY_SPUR_REG_MASK_RATE_SELECT     (0xFF << 9)
36465 -#define AR_PHY_SPUR_REG_MASK_RATE_SELECT_S   9
36466 -#define AR_PHY_SPUR_REG_ENABLE_VIT_SPUR_RSSI 0x100
36467 -#define AR_PHY_SPUR_REG_SPUR_RSSI_THRESH     0x7F
36468 -#define AR_PHY_SPUR_REG_SPUR_RSSI_THRESH_S   0
36469 -
36470 -#define AR_PHY_PILOT_MASK_01_30   0xa3b0
36471 -#define AR_PHY_PILOT_MASK_31_60   0xa3b4
36472 -
36473 -#define AR_PHY_CHANNEL_MASK_01_30 0x99d4
36474 -#define AR_PHY_CHANNEL_MASK_31_60 0x99d8
36475 -
36476 -#define AR_PHY_ANALOG_SWAP      0xa268
36477 -#define AR_PHY_SWAP_ALT_CHAIN   0x00000040
36478 -
36479 -#define AR_PHY_TPCRG5   0xA26C
36480 -#define AR_PHY_TPCRG5_PD_GAIN_OVERLAP       0x0000000F
36481 -#define AR_PHY_TPCRG5_PD_GAIN_OVERLAP_S     0
36482 -#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_1    0x000003F0
36483 -#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_1_S  4
36484 -#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_2    0x0000FC00
36485 -#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_2_S  10
36486 -#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_3    0x003F0000
36487 -#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_3_S  16
36488 -#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_4    0x0FC00000
36489 -#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_4_S  22
36490 -
36491 -/* Carrier leak calibration control, do it after AGC calibration */
36492 -#define AR_PHY_CL_CAL_CTL       0xA358
36493 -#define AR_PHY_CL_CAL_ENABLE    0x00000002
36494 -#define AR_PHY_PARALLEL_CAL_ENABLE    0x00000001
36495 -
36496 -#define AR_PHY_POWER_TX_RATE5   0xA38C
36497 -#define AR_PHY_POWER_TX_RATE6   0xA390
36498 -
36499 -#define AR_PHY_CAL_CHAINMASK    0xA39C
36500 -
36501 -#define AR_PHY_POWER_TX_SUB     0xA3C8
36502 -#define AR_PHY_POWER_TX_RATE7   0xA3CC
36503 -#define AR_PHY_POWER_TX_RATE8   0xA3D0
36504 -#define AR_PHY_POWER_TX_RATE9   0xA3D4
36505 -
36506 -#define AR_PHY_XPA_CFG         0xA3D8
36507 -#define AR_PHY_FORCE_XPA_CFG   0x000000001
36508 -#define AR_PHY_FORCE_XPA_CFG_S 0
36509 -
36510 -#define AR_PHY_CH1_CCA          0xa864
36511 -#define AR_PHY_CH1_MINCCA_PWR   0x0FF80000
36512 -#define AR_PHY_CH1_MINCCA_PWR_S 19
36513 -#define AR9280_PHY_CH1_MINCCA_PWR   0x1FF00000
36514 -#define AR9280_PHY_CH1_MINCCA_PWR_S 20
36515 -
36516 -#define AR_PHY_CH2_CCA          0xb864
36517 -#define AR_PHY_CH2_MINCCA_PWR   0x0FF80000
36518 -#define AR_PHY_CH2_MINCCA_PWR_S 19
36519 -
36520 -#define AR_PHY_CH1_EXT_CCA          0xa9bc
36521 -#define AR_PHY_CH1_EXT_MINCCA_PWR   0xFF800000
36522 -#define AR_PHY_CH1_EXT_MINCCA_PWR_S 23
36523 -#define AR9280_PHY_CH1_EXT_MINCCA_PWR   0x01FF0000
36524 -#define AR9280_PHY_CH1_EXT_MINCCA_PWR_S 16
36525 -
36526 -#define AR_PHY_CH2_EXT_CCA          0xb9bc
36527 -#define AR_PHY_CH2_EXT_MINCCA_PWR   0xFF800000
36528 -#define AR_PHY_CH2_EXT_MINCCA_PWR_S 23
36529 -
36530  #define REG_WRITE_RF_ARRAY(iniarray, regData, regWr) do {               \
36531                 int r;                                                  \
36532                 for (r = 0; r < ((iniarray)->ia_rows); r++) {           \
36533 @@ -625,6 +51,7 @@ bool ath9k_hw_set_rf_regs(struct ath_hw *ah,
36534  #define ANTSWAP_AB 0x0001
36535  #define REDUCE_CHAIN_0 0x00000050
36536  #define REDUCE_CHAIN_1 0x00000051
36537 +#define AR_PHY_CHIP_ID 0x9818
36538  
36539  #define RF_BANK_SETUP(_bank, _iniarray, _col) do {                     \
36540                 int i;                                                  \
36541 @@ -632,4 +59,7 @@ bool ath9k_hw_set_rf_regs(struct ath_hw *ah,
36542                         (_bank)[i] = INI_RA((_iniarray), i, _col);;     \
36543         } while (0)
36544  
36545 +#define        AR_PHY_TIMING11_SPUR_FREQ_SD            0x3FF00000
36546 +#define        AR_PHY_TIMING11_SPUR_FREQ_SD_S          20
36547 +
36548  #endif
36549 diff --git a/drivers/net/wireless/ath/ath9k/rc.c b/drivers/net/wireless/ath/ath9k/rc.c
36550 index 3c4b5d2..f10bd06 100644
36551 --- a/drivers/net/wireless/ath/ath9k/rc.c
36552 +++ b/drivers/net/wireless/ath/ath9k/rc.c
36553 @@ -689,6 +689,15 @@ static void ath_get_rate(void *priv, struct ieee80211_sta *sta, void *priv_sta,
36554         rate_table = sc->cur_rate_table;
36555         rix = ath_rc_get_highest_rix(sc, ath_rc_priv, rate_table, &is_probe);
36556  
36557 +       /*
36558 +        * If we're in HT mode and both us and our peer supports LDPC.
36559 +        * We don't need to check our own device's capabilities as our own
36560 +        * ht capabilities would have already been intersected with our peer's.
36561 +        */
36562 +       if (conf_is_ht(&sc->hw->conf) &&
36563 +           (sta->ht_cap.cap & IEEE80211_HT_CAP_LDPC_CODING))
36564 +               tx_info->flags |= IEEE80211_TX_CTL_LDPC;
36565 +
36566         if (is_probe) {
36567                 /* set one try for probe rates. For the
36568                  * probes don't enable rts */
36569 diff --git a/drivers/net/wireless/ath/ath9k/recv.c b/drivers/net/wireless/ath/ath9k/recv.c
36570 index 94560e2..9c01c0b 100644
36571 --- a/drivers/net/wireless/ath/ath9k/recv.c
36572 +++ b/drivers/net/wireless/ath/ath9k/recv.c
36573 @@ -16,6 +16,8 @@
36574  
36575  #include "ath9k.h"
36576  
36577 +#define SKB_CB_ATHBUF(__skb)   (*((struct ath_buf **)__skb->cb))
36578 +
36579  static struct ieee80211_hw * ath_get_virt_hw(struct ath_softc *sc,
36580                                              struct ieee80211_hdr *hdr)
36581  {
36582 @@ -115,56 +117,246 @@ static void ath_opmode_init(struct ath_softc *sc)
36583         ath9k_hw_setmcastfilter(ah, mfilt[0], mfilt[1]);
36584  }
36585  
36586 -int ath_rx_init(struct ath_softc *sc, int nbufs)
36587 +static bool ath_rx_edma_buf_link(struct ath_softc *sc,
36588 +                                enum ath9k_rx_qtype qtype)
36589  {
36590 -       struct ath_common *common = ath9k_hw_common(sc->sc_ah);
36591 +       struct ath_hw *ah = sc->sc_ah;
36592 +       struct ath_rx_edma *rx_edma;
36593         struct sk_buff *skb;
36594         struct ath_buf *bf;
36595 -       int error = 0;
36596  
36597 -       spin_lock_init(&sc->rx.rxflushlock);
36598 -       sc->sc_flags &= ~SC_OP_RXFLUSH;
36599 -       spin_lock_init(&sc->rx.rxbuflock);
36600 +       rx_edma = &sc->rx.rx_edma[qtype];
36601 +       if (skb_queue_len(&rx_edma->rx_fifo) >= rx_edma->rx_fifo_hwsize)
36602 +               return false;
36603  
36604 -       common->rx_bufsize = roundup(IEEE80211_MAX_MPDU_LEN,
36605 -                                    min(common->cachelsz, (u16)64));
36606 +       bf = list_first_entry(&sc->rx.rxbuf, struct ath_buf, list);
36607 +       list_del_init(&bf->list);
36608  
36609 -       ath_print(common, ATH_DBG_CONFIG, "cachelsz %u rxbufsize %u\n",
36610 -                 common->cachelsz, common->rx_bufsize);
36611 +       skb = bf->bf_mpdu;
36612 +
36613 +       ATH_RXBUF_RESET(bf);
36614 +       memset(skb->data, 0, ah->caps.rx_status_len);
36615 +       dma_sync_single_for_cpu(sc->dev, bf->bf_buf_addr,
36616 +                               ah->caps.rx_status_len, DMA_TO_DEVICE);
36617  
36618 -       /* Initialize rx descriptors */
36619 +       SKB_CB_ATHBUF(skb) = bf;
36620 +       ath9k_hw_addrxbuf_edma(ah, bf->bf_buf_addr, qtype);
36621 +       skb_queue_tail(&rx_edma->rx_fifo, skb);
36622  
36623 -       error = ath_descdma_setup(sc, &sc->rx.rxdma, &sc->rx.rxbuf,
36624 -                                 "rx", nbufs, 1);
36625 -       if (error != 0) {
36626 -               ath_print(common, ATH_DBG_FATAL,
36627 -                         "failed to allocate rx descriptors: %d\n", error);
36628 -               goto err;
36629 +       return true;
36630 +}
36631 +
36632 +static void ath_rx_addbuffer_edma(struct ath_softc *sc,
36633 +                                 enum ath9k_rx_qtype qtype, int size)
36634 +{
36635 +       struct ath_rx_edma *rx_edma;
36636 +       struct ath_common *common = ath9k_hw_common(sc->sc_ah);
36637 +       u32 nbuf = 0;
36638 +
36639 +       rx_edma = &sc->rx.rx_edma[qtype];
36640 +       if (list_empty(&sc->rx.rxbuf)) {
36641 +               ath_print(common, ATH_DBG_QUEUE, "No free rx buf available\n");
36642 +               return;
36643         }
36644  
36645 +       while (!list_empty(&sc->rx.rxbuf)) {
36646 +               nbuf++;
36647 +
36648 +               if (!ath_rx_edma_buf_link(sc, qtype))
36649 +                       break;
36650 +
36651 +               if (nbuf >= size)
36652 +                       break;
36653 +       }
36654 +}
36655 +
36656 +static void ath_rx_remove_buffer(struct ath_softc *sc,
36657 +                                enum ath9k_rx_qtype qtype)
36658 +{
36659 +       struct ath_buf *bf;
36660 +       struct ath_rx_edma *rx_edma;
36661 +       struct sk_buff *skb;
36662 +
36663 +       rx_edma = &sc->rx.rx_edma[qtype];
36664 +
36665 +       while ((skb = skb_dequeue(&rx_edma->rx_fifo)) != NULL) {
36666 +               bf = SKB_CB_ATHBUF(skb);
36667 +               BUG_ON(!bf);
36668 +               list_add_tail(&bf->list, &sc->rx.rxbuf);
36669 +       }
36670 +}
36671 +
36672 +static void ath_rx_edma_cleanup(struct ath_softc *sc)
36673 +{
36674 +       struct ath_buf *bf;
36675 +
36676 +       ath_rx_remove_buffer(sc, ATH9K_RX_QUEUE_LP);
36677 +       ath_rx_remove_buffer(sc, ATH9K_RX_QUEUE_HP);
36678 +
36679         list_for_each_entry(bf, &sc->rx.rxbuf, list) {
36680 +               if (bf->bf_mpdu)
36681 +                       dev_kfree_skb_any(bf->bf_mpdu);
36682 +       }
36683 +
36684 +       INIT_LIST_HEAD(&sc->rx.rxbuf);
36685 +
36686 +       kfree(sc->rx.rx_bufptr);
36687 +       sc->rx.rx_bufptr = NULL;
36688 +}
36689 +
36690 +static void ath_rx_edma_init_queue(struct ath_rx_edma *rx_edma, int size)
36691 +{
36692 +       skb_queue_head_init(&rx_edma->rx_fifo);
36693 +       skb_queue_head_init(&rx_edma->rx_buffers);
36694 +       rx_edma->rx_fifo_hwsize = size;
36695 +}
36696 +
36697 +static int ath_rx_edma_init(struct ath_softc *sc, int nbufs)
36698 +{
36699 +       struct ath_common *common = ath9k_hw_common(sc->sc_ah);
36700 +       struct ath_hw *ah = sc->sc_ah;
36701 +       struct sk_buff *skb;
36702 +       struct ath_buf *bf;
36703 +       int error = 0, i;
36704 +       u32 size;
36705 +
36706 +
36707 +       common->rx_bufsize = roundup(IEEE80211_MAX_MPDU_LEN +
36708 +                                    ah->caps.rx_status_len,
36709 +                                    min(common->cachelsz, (u16)64));
36710 +
36711 +       ath9k_hw_set_rx_bufsize(ah, common->rx_bufsize -
36712 +                                   ah->caps.rx_status_len);
36713 +
36714 +       ath_rx_edma_init_queue(&sc->rx.rx_edma[ATH9K_RX_QUEUE_LP],
36715 +                              ah->caps.rx_lp_qdepth);
36716 +       ath_rx_edma_init_queue(&sc->rx.rx_edma[ATH9K_RX_QUEUE_HP],
36717 +                              ah->caps.rx_hp_qdepth);
36718 +
36719 +       size = sizeof(struct ath_buf) * nbufs;
36720 +       bf = kzalloc(size, GFP_KERNEL);
36721 +       if (!bf)
36722 +               return -ENOMEM;
36723 +
36724 +       INIT_LIST_HEAD(&sc->rx.rxbuf);
36725 +       sc->rx.rx_bufptr = bf;
36726 +
36727 +       for (i = 0; i < nbufs; i++, bf++) {
36728                 skb = ath_rxbuf_alloc(common, common->rx_bufsize, GFP_KERNEL);
36729 -               if (skb == NULL) {
36730 +               if (!skb) {
36731                         error = -ENOMEM;
36732 -                       goto err;
36733 +                       goto rx_init_fail;
36734                 }
36735  
36736 +               memset(skb->data, 0, common->rx_bufsize);
36737                 bf->bf_mpdu = skb;
36738 +
36739                 bf->bf_buf_addr = dma_map_single(sc->dev, skb->data,
36740                                                  common->rx_bufsize,
36741 -                                                DMA_FROM_DEVICE);
36742 +                                                DMA_BIDIRECTIONAL);
36743                 if (unlikely(dma_mapping_error(sc->dev,
36744 -                                              bf->bf_buf_addr))) {
36745 -                       dev_kfree_skb_any(skb);
36746 -                       bf->bf_mpdu = NULL;
36747 +                                               bf->bf_buf_addr))) {
36748 +                               dev_kfree_skb_any(skb);
36749 +                               bf->bf_mpdu = NULL;
36750 +                               ath_print(common, ATH_DBG_FATAL,
36751 +                                       "dma_mapping_error() on RX init\n");
36752 +                               error = -ENOMEM;
36753 +                               goto rx_init_fail;
36754 +               }
36755 +
36756 +               list_add_tail(&bf->list, &sc->rx.rxbuf);
36757 +       }
36758 +
36759 +       return 0;
36760 +
36761 +rx_init_fail:
36762 +       ath_rx_edma_cleanup(sc);
36763 +       return error;
36764 +}
36765 +
36766 +static void ath_edma_start_recv(struct ath_softc *sc)
36767 +{
36768 +       spin_lock_bh(&sc->rx.rxbuflock);
36769 +
36770 +       ath9k_hw_rxena(sc->sc_ah);
36771 +
36772 +       ath_rx_addbuffer_edma(sc, ATH9K_RX_QUEUE_HP,
36773 +                             sc->rx.rx_edma[ATH9K_RX_QUEUE_HP].rx_fifo_hwsize);
36774 +
36775 +       ath_rx_addbuffer_edma(sc, ATH9K_RX_QUEUE_LP,
36776 +                             sc->rx.rx_edma[ATH9K_RX_QUEUE_LP].rx_fifo_hwsize);
36777 +
36778 +       spin_unlock_bh(&sc->rx.rxbuflock);
36779 +
36780 +       ath_opmode_init(sc);
36781 +
36782 +       ath9k_hw_startpcureceive(sc->sc_ah);
36783 +}
36784 +
36785 +static void ath_edma_stop_recv(struct ath_softc *sc)
36786 +{
36787 +       spin_lock_bh(&sc->rx.rxbuflock);
36788 +       ath_rx_remove_buffer(sc, ATH9K_RX_QUEUE_HP);
36789 +       ath_rx_remove_buffer(sc, ATH9K_RX_QUEUE_LP);
36790 +       spin_unlock_bh(&sc->rx.rxbuflock);
36791 +}
36792 +
36793 +int ath_rx_init(struct ath_softc *sc, int nbufs)
36794 +{
36795 +       struct ath_common *common = ath9k_hw_common(sc->sc_ah);
36796 +       struct sk_buff *skb;
36797 +       struct ath_buf *bf;
36798 +       int error = 0;
36799 +
36800 +       spin_lock_init(&sc->rx.rxflushlock);
36801 +       sc->sc_flags &= ~SC_OP_RXFLUSH;
36802 +       spin_lock_init(&sc->rx.rxbuflock);
36803 +
36804 +       if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) {
36805 +               return ath_rx_edma_init(sc, nbufs);
36806 +       } else {
36807 +               common->rx_bufsize = roundup(IEEE80211_MAX_MPDU_LEN,
36808 +                               min(common->cachelsz, (u16)64));
36809 +
36810 +               ath_print(common, ATH_DBG_CONFIG, "cachelsz %u rxbufsize %u\n",
36811 +                               common->cachelsz, common->rx_bufsize);
36812 +
36813 +               /* Initialize rx descriptors */
36814 +
36815 +               error = ath_descdma_setup(sc, &sc->rx.rxdma, &sc->rx.rxbuf,
36816 +                               "rx", nbufs, 1, 0);
36817 +               if (error != 0) {
36818                         ath_print(common, ATH_DBG_FATAL,
36819 -                                 "dma_mapping_error() on RX init\n");
36820 -                       error = -ENOMEM;
36821 +                                 "failed to allocate rx descriptors: %d\n",
36822 +                                 error);
36823                         goto err;
36824                 }
36825 -               bf->bf_dmacontext = bf->bf_buf_addr;
36826 +
36827 +               list_for_each_entry(bf, &sc->rx.rxbuf, list) {
36828 +                       skb = ath_rxbuf_alloc(common, common->rx_bufsize,
36829 +                                             GFP_KERNEL);
36830 +                       if (skb == NULL) {
36831 +                               error = -ENOMEM;
36832 +                               goto err;
36833 +                       }
36834 +
36835 +                       bf->bf_mpdu = skb;
36836 +                       bf->bf_buf_addr = dma_map_single(sc->dev, skb->data,
36837 +                                       common->rx_bufsize,
36838 +                                       DMA_FROM_DEVICE);
36839 +                       if (unlikely(dma_mapping_error(sc->dev,
36840 +                                                       bf->bf_buf_addr))) {
36841 +                               dev_kfree_skb_any(skb);
36842 +                               bf->bf_mpdu = NULL;
36843 +                               ath_print(common, ATH_DBG_FATAL,
36844 +                                         "dma_mapping_error() on RX init\n");
36845 +                               error = -ENOMEM;
36846 +                               goto err;
36847 +                       }
36848 +                       bf->bf_dmacontext = bf->bf_buf_addr;
36849 +               }
36850 +               sc->rx.rxlink = NULL;
36851         }
36852 -       sc->rx.rxlink = NULL;
36853  
36854  err:
36855         if (error)
36856 @@ -180,17 +372,23 @@ void ath_rx_cleanup(struct ath_softc *sc)
36857         struct sk_buff *skb;
36858         struct ath_buf *bf;
36859  
36860 -       list_for_each_entry(bf, &sc->rx.rxbuf, list) {
36861 -               skb = bf->bf_mpdu;
36862 -               if (skb) {
36863 -                       dma_unmap_single(sc->dev, bf->bf_buf_addr,
36864 -                                        common->rx_bufsize, DMA_FROM_DEVICE);
36865 -                       dev_kfree_skb(skb);
36866 +       if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) {
36867 +               ath_rx_edma_cleanup(sc);
36868 +               return;
36869 +       } else {
36870 +               list_for_each_entry(bf, &sc->rx.rxbuf, list) {
36871 +                       skb = bf->bf_mpdu;
36872 +                       if (skb) {
36873 +                               dma_unmap_single(sc->dev, bf->bf_buf_addr,
36874 +                                               common->rx_bufsize,
36875 +                                               DMA_FROM_DEVICE);
36876 +                               dev_kfree_skb(skb);
36877 +                       }
36878                 }
36879 -       }
36880  
36881 -       if (sc->rx.rxdma.dd_desc_len != 0)
36882 -               ath_descdma_cleanup(sc, &sc->rx.rxdma, &sc->rx.rxbuf);
36883 +               if (sc->rx.rxdma.dd_desc_len != 0)
36884 +                       ath_descdma_cleanup(sc, &sc->rx.rxdma, &sc->rx.rxbuf);
36885 +       }
36886  }
36887  
36888  /*
36889 @@ -273,6 +471,11 @@ int ath_startrecv(struct ath_softc *sc)
36890         struct ath_hw *ah = sc->sc_ah;
36891         struct ath_buf *bf, *tbf;
36892  
36893 +       if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) {
36894 +               ath_edma_start_recv(sc);
36895 +               return 0;
36896 +       }
36897 +
36898         spin_lock_bh(&sc->rx.rxbuflock);
36899         if (list_empty(&sc->rx.rxbuf))
36900                 goto start_recv;
36901 @@ -306,7 +509,12 @@ bool ath_stoprecv(struct ath_softc *sc)
36902         ath9k_hw_stoppcurecv(ah);
36903         ath9k_hw_setrxfilter(ah, 0);
36904         stopped = ath9k_hw_stopdmarecv(ah);
36905 -       sc->rx.rxlink = NULL;
36906 +
36907 +       if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) {
36908 +               ath_edma_stop_recv(sc);
36909 +       } else {
36910 +               sc->rx.rxlink = NULL;
36911 +       }
36912  
36913         return stopped;
36914  }
36915 @@ -315,7 +523,9 @@ void ath_flushrecv(struct ath_softc *sc)
36916  {
36917         spin_lock_bh(&sc->rx.rxflushlock);
36918         sc->sc_flags |= SC_OP_RXFLUSH;
36919 -       ath_rx_tasklet(sc, 1);
36920 +       if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
36921 +               ath_rx_tasklet(sc, 1, true);
36922 +       ath_rx_tasklet(sc, 1, false);
36923         sc->sc_flags &= ~SC_OP_RXFLUSH;
36924         spin_unlock_bh(&sc->rx.rxflushlock);
36925  }
36926 @@ -469,14 +679,147 @@ static void ath_rx_send_to_mac80211(struct ieee80211_hw *hw,
36927                 ieee80211_rx(hw, skb);
36928  }
36929  
36930 -int ath_rx_tasklet(struct ath_softc *sc, int flush)
36931 +static bool ath_edma_get_buffers(struct ath_softc *sc,
36932 +                                enum ath9k_rx_qtype qtype)
36933  {
36934 -#define PA2DESC(_sc, _pa)                                               \
36935 -       ((struct ath_desc *)((caddr_t)(_sc)->rx.rxdma.dd_desc +         \
36936 -                            ((_pa) - (_sc)->rx.rxdma.dd_desc_paddr)))
36937 +       struct ath_rx_edma *rx_edma = &sc->rx.rx_edma[qtype];
36938 +       struct ath_hw *ah = sc->sc_ah;
36939 +       struct ath_common *common = ath9k_hw_common(ah);
36940 +       struct sk_buff *skb;
36941 +       struct ath_buf *bf;
36942 +       int ret;
36943 +
36944 +       skb = skb_peek(&rx_edma->rx_fifo);
36945 +       if (!skb)
36946 +               return false;
36947 +
36948 +       bf = SKB_CB_ATHBUF(skb);
36949 +       BUG_ON(!bf);
36950 +
36951 +       dma_sync_single_for_device(sc->dev, bf->bf_buf_addr,
36952 +                               common->rx_bufsize, DMA_FROM_DEVICE);
36953 +
36954 +       ret = ath9k_hw_process_rxdesc_edma(ah, NULL, skb->data);
36955 +       if (ret == -EINPROGRESS)
36956 +               return false;
36957 +
36958 +       __skb_unlink(skb, &rx_edma->rx_fifo);
36959 +       if (ret == -EINVAL) {
36960 +               /* corrupt descriptor, skip this one and the following one */
36961 +               list_add_tail(&bf->list, &sc->rx.rxbuf);
36962 +               ath_rx_edma_buf_link(sc, qtype);
36963 +               skb = skb_peek(&rx_edma->rx_fifo);
36964 +               if (!skb)
36965 +                       return true;
36966 +
36967 +               bf = SKB_CB_ATHBUF(skb);
36968 +               BUG_ON(!bf);
36969 +
36970 +               __skb_unlink(skb, &rx_edma->rx_fifo);
36971 +               list_add_tail(&bf->list, &sc->rx.rxbuf);
36972 +               ath_rx_edma_buf_link(sc, qtype);
36973 +       }
36974 +       skb_queue_tail(&rx_edma->rx_buffers, skb);
36975 +
36976 +       return true;
36977 +}
36978  
36979 +static struct ath_buf *ath_edma_get_next_rx_buf(struct ath_softc *sc,
36980 +                                               struct ath_rx_status *rs,
36981 +                                               enum ath9k_rx_qtype qtype)
36982 +{
36983 +       struct ath_rx_edma *rx_edma = &sc->rx.rx_edma[qtype];
36984 +       struct sk_buff *skb;
36985         struct ath_buf *bf;
36986 +
36987 +       while (ath_edma_get_buffers(sc, qtype));
36988 +       skb = __skb_dequeue(&rx_edma->rx_buffers);
36989 +       if (!skb)
36990 +               return NULL;
36991 +
36992 +       bf = SKB_CB_ATHBUF(skb);
36993 +       ath9k_hw_process_rxdesc_edma(sc->sc_ah, rs, skb->data);
36994 +       return bf;
36995 +}
36996 +
36997 +static struct ath_buf *ath_get_next_rx_buf(struct ath_softc *sc,
36998 +                                          struct ath_rx_status *rs)
36999 +{
37000 +       struct ath_hw *ah = sc->sc_ah;
37001 +       struct ath_common *common = ath9k_hw_common(ah);
37002         struct ath_desc *ds;
37003 +       struct ath_buf *bf;
37004 +       int ret;
37005 +
37006 +       if (list_empty(&sc->rx.rxbuf)) {
37007 +               sc->rx.rxlink = NULL;
37008 +               return NULL;
37009 +       }
37010 +
37011 +       bf = list_first_entry(&sc->rx.rxbuf, struct ath_buf, list);
37012 +       ds = bf->bf_desc;
37013 +
37014 +       /*
37015 +        * Must provide the virtual address of the current
37016 +        * descriptor, the physical address, and the virtual
37017 +        * address of the next descriptor in the h/w chain.
37018 +        * This allows the HAL to look ahead to see if the
37019 +        * hardware is done with a descriptor by checking the
37020 +        * done bit in the following descriptor and the address
37021 +        * of the current descriptor the DMA engine is working
37022 +        * on.  All this is necessary because of our use of
37023 +        * a self-linked list to avoid rx overruns.
37024 +        */
37025 +       ret = ath9k_hw_rxprocdesc(ah, ds, rs, 0);
37026 +       if (ret == -EINPROGRESS) {
37027 +               struct ath_rx_status trs;
37028 +               struct ath_buf *tbf;
37029 +               struct ath_desc *tds;
37030 +
37031 +               memset(&trs, 0, sizeof(trs));
37032 +               if (list_is_last(&bf->list, &sc->rx.rxbuf)) {
37033 +                       sc->rx.rxlink = NULL;
37034 +                       return NULL;
37035 +               }
37036 +
37037 +               tbf = list_entry(bf->list.next, struct ath_buf, list);
37038 +
37039 +               /*
37040 +                * On some hardware the descriptor status words could
37041 +                * get corrupted, including the done bit. Because of
37042 +                * this, check if the next descriptor's done bit is
37043 +                * set or not.
37044 +                *
37045 +                * If the next descriptor's done bit is set, the current
37046 +                * descriptor has been corrupted. Force s/w to discard
37047 +                * this descriptor and continue...
37048 +                */
37049 +
37050 +               tds = tbf->bf_desc;
37051 +               ret = ath9k_hw_rxprocdesc(ah, tds, &trs, 0);
37052 +               if (ret == -EINPROGRESS)
37053 +                       return NULL;
37054 +       }
37055 +
37056 +       if (!bf->bf_mpdu)
37057 +               return bf;
37058 +
37059 +       /*
37060 +        * Synchronize the DMA transfer with CPU before
37061 +        * 1. accessing the frame
37062 +        * 2. requeueing the same buffer to h/w
37063 +        */
37064 +       dma_sync_single_for_cpu(sc->dev, bf->bf_buf_addr,
37065 +                       common->rx_bufsize,
37066 +                       DMA_FROM_DEVICE);
37067 +
37068 +       return bf;
37069 +}
37070 +
37071 +
37072 +int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp)
37073 +{
37074 +       struct ath_buf *bf;
37075         struct sk_buff *skb = NULL, *requeue_skb;
37076         struct ieee80211_rx_status *rxs;
37077         struct ath_hw *ah = sc->sc_ah;
37078 @@ -491,7 +834,16 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush)
37079         int retval;
37080         bool decrypt_error = false;
37081         struct ath_rx_status rs;
37082 +       enum ath9k_rx_qtype qtype;
37083 +       bool edma = !!(ah->caps.hw_caps & ATH9K_HW_CAP_EDMA);
37084 +       int dma_type;
37085  
37086 +       if (edma)
37087 +               dma_type = DMA_FROM_DEVICE;
37088 +       else
37089 +               dma_type = DMA_BIDIRECTIONAL;
37090 +
37091 +       qtype = hp ? ATH9K_RX_QUEUE_HP : ATH9K_RX_QUEUE_LP;
37092         spin_lock_bh(&sc->rx.rxbuflock);
37093  
37094         do {
37095 @@ -499,71 +851,19 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush)
37096                 if ((sc->sc_flags & SC_OP_RXFLUSH) && (flush == 0))
37097                         break;
37098  
37099 -               if (list_empty(&sc->rx.rxbuf)) {
37100 -                       sc->rx.rxlink = NULL;
37101 -                       break;
37102 -               }
37103 -
37104 -               bf = list_first_entry(&sc->rx.rxbuf, struct ath_buf, list);
37105 -               ds = bf->bf_desc;
37106 -
37107 -               /*
37108 -                * Must provide the virtual address of the current
37109 -                * descriptor, the physical address, and the virtual
37110 -                * address of the next descriptor in the h/w chain.
37111 -                * This allows the HAL to look ahead to see if the
37112 -                * hardware is done with a descriptor by checking the
37113 -                * done bit in the following descriptor and the address
37114 -                * of the current descriptor the DMA engine is working
37115 -                * on.  All this is necessary because of our use of
37116 -                * a self-linked list to avoid rx overruns.
37117 -                */
37118                 memset(&rs, 0, sizeof(rs));
37119 -               retval = ath9k_hw_rxprocdesc(ah, ds, &rs, 0);
37120 -               if (retval == -EINPROGRESS) {
37121 -                       struct ath_rx_status trs;
37122 -                       struct ath_buf *tbf;
37123 -                       struct ath_desc *tds;
37124 -
37125 -                       memset(&trs, 0, sizeof(trs));
37126 -                       if (list_is_last(&bf->list, &sc->rx.rxbuf)) {
37127 -                               sc->rx.rxlink = NULL;
37128 -                               break;
37129 -                       }
37130 +               if (edma)
37131 +                       bf = ath_edma_get_next_rx_buf(sc, &rs, qtype);
37132 +               else
37133 +                       bf = ath_get_next_rx_buf(sc, &rs);
37134  
37135 -                       tbf = list_entry(bf->list.next, struct ath_buf, list);
37136 -
37137 -                       /*
37138 -                        * On some hardware the descriptor status words could
37139 -                        * get corrupted, including the done bit. Because of
37140 -                        * this, check if the next descriptor's done bit is
37141 -                        * set or not.
37142 -                        *
37143 -                        * If the next descriptor's done bit is set, the current
37144 -                        * descriptor has been corrupted. Force s/w to discard
37145 -                        * this descriptor and continue...
37146 -                        */
37147 -
37148 -                       tds = tbf->bf_desc;
37149 -                       retval = ath9k_hw_rxprocdesc(ah, tds, &trs, 0);
37150 -                       if (retval == -EINPROGRESS) {
37151 -                               break;
37152 -                       }
37153 -               }
37154 +               if (!bf)
37155 +                       break;
37156  
37157                 skb = bf->bf_mpdu;
37158                 if (!skb)
37159                         continue;
37160  
37161 -               /*
37162 -                * Synchronize the DMA transfer with CPU before
37163 -                * 1. accessing the frame
37164 -                * 2. requeueing the same buffer to h/w
37165 -                */
37166 -               dma_sync_single_for_cpu(sc->dev, bf->bf_buf_addr,
37167 -                               common->rx_bufsize,
37168 -                               DMA_FROM_DEVICE);
37169 -
37170                 hdr = (struct ieee80211_hdr *) skb->data;
37171                 rxs =  IEEE80211_SKB_RXCB(skb);
37172  
37173 @@ -597,9 +897,11 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush)
37174                 /* Unmap the frame */
37175                 dma_unmap_single(sc->dev, bf->bf_buf_addr,
37176                                  common->rx_bufsize,
37177 -                                DMA_FROM_DEVICE);
37178 +                                dma_type);
37179  
37180 -               skb_put(skb, rs.rs_datalen);
37181 +               skb_put(skb, rs.rs_datalen + ah->caps.rx_status_len);
37182 +               if (ah->caps.rx_status_len)
37183 +                       skb_pull(skb, ah->caps.rx_status_len);
37184  
37185                 ath9k_cmn_rx_skb_postprocess(common, skb, &rs,
37186                                              rxs, decrypt_error);
37187 @@ -608,7 +910,7 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush)
37188                 bf->bf_mpdu = requeue_skb;
37189                 bf->bf_buf_addr = dma_map_single(sc->dev, requeue_skb->data,
37190                                                  common->rx_bufsize,
37191 -                                                DMA_FROM_DEVICE);
37192 +                                                dma_type);
37193                 if (unlikely(dma_mapping_error(sc->dev,
37194                           bf->bf_buf_addr))) {
37195                         dev_kfree_skb_any(requeue_skb);
37196 @@ -639,12 +941,16 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush)
37197                 ath_rx_send_to_mac80211(hw, sc, skb, rxs);
37198  
37199  requeue:
37200 -               list_move_tail(&bf->list, &sc->rx.rxbuf);
37201 -               ath_rx_buf_link(sc, bf);
37202 +               if (edma) {
37203 +                       list_add_tail(&bf->list, &sc->rx.rxbuf);
37204 +                       ath_rx_edma_buf_link(sc, qtype);
37205 +               } else {
37206 +                       list_move_tail(&bf->list, &sc->rx.rxbuf);
37207 +                       ath_rx_buf_link(sc, bf);
37208 +               }
37209         } while (1);
37210  
37211         spin_unlock_bh(&sc->rx.rxbuflock);
37212  
37213         return 0;
37214 -#undef PA2DESC
37215  }
37216 diff --git a/drivers/net/wireless/ath/ath9k/reg.h b/drivers/net/wireless/ath/ath9k/reg.h
37217 index 7e36ad7..7fc1ddf 100644
37218 --- a/drivers/net/wireless/ath/ath9k/reg.h
37219 +++ b/drivers/net/wireless/ath/ath9k/reg.h
37220 @@ -20,7 +20,7 @@
37221  #include "../reg.h"
37222  
37223  #define AR_CR                0x0008
37224 -#define AR_CR_RXE            0x00000004
37225 +#define AR_CR_RXE            (AR_SREV_9300_20_OR_LATER(ah) ? 0x0000000c : 0x00000004)
37226  #define AR_CR_RXD            0x00000020
37227  #define AR_CR_SWI            0x00000040
37228  
37229 @@ -39,6 +39,12 @@
37230  #define AR_CFG_PCI_MASTER_REQ_Q_THRESH         0x00060000
37231  #define AR_CFG_PCI_MASTER_REQ_Q_THRESH_S       17
37232  
37233 +#define AR_RXBP_THRESH       0x0018
37234 +#define AR_RXBP_THRESH_HP    0x0000000f
37235 +#define AR_RXBP_THRESH_HP_S  0
37236 +#define AR_RXBP_THRESH_LP    0x00003f00
37237 +#define AR_RXBP_THRESH_LP_S  8
37238 +
37239  #define AR_MIRT              0x0020
37240  #define AR_MIRT_VAL          0x0000ffff
37241  #define AR_MIRT_VAL_S        16
37242 @@ -144,6 +150,9 @@
37243  #define AR_MACMISC_MISC_OBS_BUS_MSB_S   15
37244  #define AR_MACMISC_MISC_OBS_BUS_1       1
37245  
37246 +#define AR_DATABUF_SIZE                0x0060
37247 +#define AR_DATABUF_SIZE_MASK   0x00000FFF
37248 +
37249  #define AR_GTXTO    0x0064
37250  #define AR_GTXTO_TIMEOUT_COUNTER    0x0000FFFF
37251  #define AR_GTXTO_TIMEOUT_LIMIT      0xFFFF0000
37252 @@ -160,9 +169,14 @@
37253  #define AR_CST_TIMEOUT_LIMIT      0xFFFF0000
37254  #define AR_CST_TIMEOUT_LIMIT_S    16
37255  
37256 +#define AR_HP_RXDP 0x0074
37257 +#define AR_LP_RXDP 0x0078
37258 +
37259  #define AR_ISR               0x0080
37260  #define AR_ISR_RXOK          0x00000001
37261  #define AR_ISR_RXDESC        0x00000002
37262 +#define AR_ISR_HP_RXOK      0x00000001
37263 +#define AR_ISR_LP_RXOK      0x00000002
37264  #define AR_ISR_RXERR         0x00000004
37265  #define AR_ISR_RXNOPKT       0x00000008
37266  #define AR_ISR_RXEOL         0x00000010
37267 @@ -232,7 +246,6 @@
37268  #define AR_ISR_S5_TIMER_THRESH      0x0007FE00
37269  #define AR_ISR_S5_TIM_TIMER         0x00000010
37270  #define AR_ISR_S5_DTIM_TIMER        0x00000020
37271 -#define AR_ISR_S5_S                 0x00d8
37272  #define AR_IMR_S5                   0x00b8
37273  #define AR_IMR_S5_TIM_TIMER         0x00000010
37274  #define AR_IMR_S5_DTIM_TIMER        0x00000020
37275 @@ -240,7 +253,6 @@
37276  #define AR_ISR_S5_GENTIMER_TRIG_S   0
37277  #define AR_ISR_S5_GENTIMER_THRESH   0xFF800000
37278  #define AR_ISR_S5_GENTIMER_THRESH_S 16
37279 -#define AR_ISR_S5_S                 0x00d8
37280  #define AR_IMR_S5_GENTIMER_TRIG     0x0000FF80
37281  #define AR_IMR_S5_GENTIMER_TRIG_S   0
37282  #define AR_IMR_S5_GENTIMER_THRESH   0xFF800000
37283 @@ -249,6 +261,8 @@
37284  #define AR_IMR               0x00a0
37285  #define AR_IMR_RXOK          0x00000001
37286  #define AR_IMR_RXDESC        0x00000002
37287 +#define AR_IMR_RXOK_HP      0x00000001
37288 +#define AR_IMR_RXOK_LP      0x00000002
37289  #define AR_IMR_RXERR         0x00000004
37290  #define AR_IMR_RXNOPKT       0x00000008
37291  #define AR_IMR_RXEOL         0x00000010
37292 @@ -332,10 +346,10 @@
37293  #define AR_ISR_S1_QCU_TXEOL    0x03FF0000
37294  #define AR_ISR_S1_QCU_TXEOL_S  16
37295  
37296 -#define AR_ISR_S2_S           0x00cc
37297 -#define AR_ISR_S3_S           0x00d0
37298 -#define AR_ISR_S4_S           0x00d4
37299 -#define AR_ISR_S5_S           0x00d8
37300 +#define AR_ISR_S2_S           (AR_SREV_9300_20_OR_LATER(ah) ? 0x00d0 : 0x00cc)
37301 +#define AR_ISR_S3_S           (AR_SREV_9300_20_OR_LATER(ah) ? 0x00d4 : 0x00d0)
37302 +#define AR_ISR_S4_S           (AR_SREV_9300_20_OR_LATER(ah) ? 0x00d8 : 0x00d4)
37303 +#define AR_ISR_S5_S           (AR_SREV_9300_20_OR_LATER(ah) ? 0x00dc : 0x00d8)
37304  #define AR_DMADBG_0           0x00e0
37305  #define AR_DMADBG_1           0x00e4
37306  #define AR_DMADBG_2           0x00e8
37307 @@ -369,6 +383,9 @@
37308  #define AR_Q9_TXDP           0x0824
37309  #define AR_QTXDP(_i)    (AR_Q0_TXDP + ((_i)<<2))
37310  
37311 +#define AR_Q_STATUS_RING_START 0x830
37312 +#define AR_Q_STATUS_RING_END   0x834
37313 +
37314  #define AR_Q_TXE             0x0840
37315  #define AR_Q_TXE_M           0x000003FF
37316  
37317 @@ -461,6 +478,9 @@
37318  #define AR_Q_RDYTIMESHDN    0x0a40
37319  #define AR_Q_RDYTIMESHDN_M  0x000003FF
37320  
37321 +/* MAC Descriptor CRC check */
37322 +#define AR_Q_DESC_CRCCHK    0xa44
37323 +#define AR_Q_DESC_CRCCHK_EN 1 /* Enable CRC check on the descriptor fetched from host */
37324  
37325  #define AR_NUM_DCU      10
37326  #define AR_DCU_0        0x0001
37327 @@ -759,6 +779,8 @@
37328  #define AR_SREV_VERSION_9271                   0x140
37329  #define AR_SREV_REVISION_9271_10               0
37330  #define AR_SREV_REVISION_9271_11               1
37331 +#define AR_SREV_VERSION_9300                  0x1c0
37332 +#define AR_SREV_REVISION_9300_20              2 /* 2.0 and 2.1 */
37333  
37334  #define AR_SREV_5416(_ah) \
37335         (((_ah)->hw_version.macVersion == AR_SREV_VERSION_5416_PCI) || \
37336 @@ -844,6 +866,15 @@
37337  #define AR_SREV_9271_11(_ah) \
37338      (AR_SREV_9271(_ah) && \
37339       ((_ah)->hw_version.macRev == AR_SREV_REVISION_9271_11))
37340 +#define AR_SREV_9300(_ah) \
37341 +       (((_ah)->hw_version.macVersion == AR_SREV_VERSION_9300))
37342 +#define AR_SREV_9300_20(_ah) \
37343 +       (((_ah)->hw_version.macVersion == AR_SREV_VERSION_9300) && \
37344 +        ((_ah)->hw_version.macRev == AR_SREV_REVISION_9300_20))
37345 +#define AR_SREV_9300_20_OR_LATER(_ah) \
37346 +       (((_ah)->hw_version.macVersion > AR_SREV_VERSION_9300) || \
37347 +        (((_ah)->hw_version.macVersion == AR_SREV_VERSION_9300) && \
37348 +         ((_ah)->hw_version.macRev >= AR_SREV_REVISION_9300_20)))
37349  
37350  #define AR_SREV_9285E_20(_ah) \
37351      (AR_SREV_9285_12_OR_LATER(_ah) && \
37352 @@ -945,6 +976,7 @@ enum {
37353  #define AR9285_NUM_GPIO                          12
37354  #define AR9287_NUM_GPIO                          11
37355  #define AR9271_NUM_GPIO                          16
37356 +#define AR9300_NUM_GPIO                          17
37357  
37358  #define AR_GPIO_IN_OUT                           0x4048
37359  #define AR_GPIO_IN_VAL                           0x0FFFC000
37360 @@ -957,19 +989,21 @@ enum {
37361  #define AR9287_GPIO_IN_VAL_S                     11
37362  #define AR9271_GPIO_IN_VAL                       0xFFFF0000
37363  #define AR9271_GPIO_IN_VAL_S                     16
37364 +#define AR9300_GPIO_IN_VAL                       0x0001FFFF
37365 +#define AR9300_GPIO_IN_VAL_S                     0
37366  
37367 -#define AR_GPIO_OE_OUT                           0x404c
37368 +#define AR_GPIO_OE_OUT                           (AR_SREV_9300_20_OR_LATER(ah) ? 0x4050 : 0x404c)
37369  #define AR_GPIO_OE_OUT_DRV                       0x3
37370  #define AR_GPIO_OE_OUT_DRV_NO                    0x0
37371  #define AR_GPIO_OE_OUT_DRV_LOW                   0x1
37372  #define AR_GPIO_OE_OUT_DRV_HI                    0x2
37373  #define AR_GPIO_OE_OUT_DRV_ALL                   0x3
37374  
37375 -#define AR_GPIO_INTR_POL                         0x4050
37376 -#define AR_GPIO_INTR_POL_VAL                     0x00001FFF
37377 +#define AR_GPIO_INTR_POL                         (AR_SREV_9300_20_OR_LATER(ah) ? 0x4058 : 0x4050)
37378 +#define AR_GPIO_INTR_POL_VAL                     0x0001FFFF
37379  #define AR_GPIO_INTR_POL_VAL_S                   0
37380  
37381 -#define AR_GPIO_INPUT_EN_VAL                     0x4054
37382 +#define AR_GPIO_INPUT_EN_VAL                     (AR_SREV_9300_20_OR_LATER(ah) ? 0x405c : 0x4054)
37383  #define AR_GPIO_INPUT_EN_VAL_BT_PRIORITY_DEF     0x00000004
37384  #define AR_GPIO_INPUT_EN_VAL_BT_PRIORITY_S       2
37385  #define AR_GPIO_INPUT_EN_VAL_BT_FREQUENCY_DEF    0x00000008
37386 @@ -987,13 +1021,13 @@ enum {
37387  #define AR_GPIO_RTC_RESET_OVERRIDE_ENABLE        0x00010000
37388  #define AR_GPIO_JTAG_DISABLE                     0x00020000
37389  
37390 -#define AR_GPIO_INPUT_MUX1                       0x4058
37391 +#define AR_GPIO_INPUT_MUX1                       (AR_SREV_9300_20_OR_LATER(ah) ? 0x4060 : 0x4058)
37392  #define AR_GPIO_INPUT_MUX1_BT_ACTIVE             0x000f0000
37393  #define AR_GPIO_INPUT_MUX1_BT_ACTIVE_S           16
37394  #define AR_GPIO_INPUT_MUX1_BT_PRIORITY           0x00000f00
37395  #define AR_GPIO_INPUT_MUX1_BT_PRIORITY_S         8
37396  
37397 -#define AR_GPIO_INPUT_MUX2                       0x405c
37398 +#define AR_GPIO_INPUT_MUX2                       (AR_SREV_9300_20_OR_LATER(ah) ? 0x4064 : 0x405c)
37399  #define AR_GPIO_INPUT_MUX2_CLK25                 0x0000000f
37400  #define AR_GPIO_INPUT_MUX2_CLK25_S               0
37401  #define AR_GPIO_INPUT_MUX2_RFSILENT              0x000000f0
37402 @@ -1001,13 +1035,13 @@ enum {
37403  #define AR_GPIO_INPUT_MUX2_RTC_RESET             0x00000f00
37404  #define AR_GPIO_INPUT_MUX2_RTC_RESET_S           8
37405  
37406 -#define AR_GPIO_OUTPUT_MUX1                      0x4060
37407 -#define AR_GPIO_OUTPUT_MUX2                      0x4064
37408 -#define AR_GPIO_OUTPUT_MUX3                      0x4068
37409 +#define AR_GPIO_OUTPUT_MUX1                      (AR_SREV_9300_20_OR_LATER(ah) ? 0x4068 : 0x4060)
37410 +#define AR_GPIO_OUTPUT_MUX2                      (AR_SREV_9300_20_OR_LATER(ah) ? 0x406c : 0x4064)
37411 +#define AR_GPIO_OUTPUT_MUX3                      (AR_SREV_9300_20_OR_LATER(ah) ? 0x4070 : 0x4068)
37412  
37413 -#define AR_INPUT_STATE                           0x406c
37414 +#define AR_INPUT_STATE                           (AR_SREV_9300_20_OR_LATER(ah) ? 0x4074 : 0x406c)
37415  
37416 -#define AR_EEPROM_STATUS_DATA                    0x407c
37417 +#define AR_EEPROM_STATUS_DATA                    (AR_SREV_9300_20_OR_LATER(ah) ? 0x4084 : 0x407c)
37418  #define AR_EEPROM_STATUS_DATA_VAL                0x0000ffff
37419  #define AR_EEPROM_STATUS_DATA_VAL_S              0
37420  #define AR_EEPROM_STATUS_DATA_BUSY               0x00010000
37421 @@ -1015,13 +1049,24 @@ enum {
37422  #define AR_EEPROM_STATUS_DATA_PROT_ACCESS        0x00040000
37423  #define AR_EEPROM_STATUS_DATA_ABSENT_ACCESS      0x00080000
37424  
37425 -#define AR_OBS                  0x4080
37426 +#define AR_OBS                  (AR_SREV_9300_20_OR_LATER(ah) ? 0x4088 : 0x4080)
37427  
37428 -#define AR_GPIO_PDPU                             0x4088
37429 +#define AR_GPIO_PDPU                             (AR_SREV_9300_20_OR_LATER(ah) ? 0x4090 : 0x4088)
37430  
37431 -#define AR_PCIE_MSI                              0x4094
37432 +#define AR_PCIE_MSI                              (AR_SREV_9300_20_OR_LATER(ah) ? 0x40a4 : 0x4094)
37433  #define AR_PCIE_MSI_ENABLE                       0x00000001
37434  
37435 +#define AR_INTR_PRIO_SYNC_ENABLE  0x40c4
37436 +#define AR_INTR_PRIO_ASYNC_MASK   0x40c8
37437 +#define AR_INTR_PRIO_SYNC_MASK    0x40cc
37438 +#define AR_INTR_PRIO_ASYNC_ENABLE 0x40d4
37439 +
37440 +#define AR_RTC_9300_PLL_DIV          0x000003ff
37441 +#define AR_RTC_9300_PLL_DIV_S        0
37442 +#define AR_RTC_9300_PLL_REFDIV       0x00003C00
37443 +#define AR_RTC_9300_PLL_REFDIV_S     10
37444 +#define AR_RTC_9300_PLL_CLKSEL       0x0000C000
37445 +#define AR_RTC_9300_PLL_CLKSEL_S     14
37446  
37447  #define AR_RTC_9160_PLL_DIV    0x000003ff
37448  #define AR_RTC_9160_PLL_DIV_S   0
37449 @@ -1039,6 +1084,16 @@ enum {
37450  #define AR_RTC_RC_COLD_RESET    0x00000004
37451  #define AR_RTC_RC_WARM_RESET    0x00000008
37452  
37453 +/* Crystal Control */
37454 +#define AR_RTC_XTAL_CONTROL     0x7004
37455 +
37456 +/* Reg Control 0 */
37457 +#define AR_RTC_REG_CONTROL0     0x7008
37458 +
37459 +/* Reg Control 1 */
37460 +#define AR_RTC_REG_CONTROL1     0x700c
37461 +#define AR_RTC_REG_CONTROL1_SWREG_PROGRAM       0x00000001
37462 +
37463  #define AR_RTC_PLL_CONTROL \
37464         ((AR_SREV_9100(ah)) ? (AR_RTC_BASE + 0x0014) : 0x7014)
37465  
37466 @@ -1069,6 +1124,7 @@ enum {
37467  #define AR_RTC_SLEEP_CLK \
37468         ((AR_SREV_9100(ah)) ? (AR_RTC_BASE + 0x0048) : 0x7048)
37469  #define AR_RTC_FORCE_DERIVED_CLK    0x2
37470 +#define AR_RTC_FORCE_SWREG_PRD      0x00000004
37471  
37472  #define AR_RTC_FORCE_WAKE \
37473         ((AR_SREV_9100(ah)) ? (AR_RTC_BASE + 0x004c) : 0x704c)
37474 @@ -1533,7 +1589,7 @@ enum {
37475  #define AR_TSFOOR_THRESHOLD       0x813c
37476  #define AR_TSFOOR_THRESHOLD_VAL   0x0000FFFF
37477  
37478 -#define AR_PHY_ERR_EIFS_MASK   8144
37479 +#define AR_PHY_ERR_EIFS_MASK   0x8144
37480  
37481  #define AR_PHY_ERR_3           0x8168
37482  #define AR_PHY_ERR_3_COUNT     0x00FFFFFF
37483 @@ -1599,24 +1655,26 @@ enum {
37484  #define AR_FIRST_NDP_TIMER                  7
37485  #define AR_NDP2_PERIOD                      0x81a0
37486  #define AR_NDP2_TIMER_MODE                  0x81c0
37487 -#define AR_NEXT_TBTT_TIMER                  0x8200
37488 -#define AR_NEXT_DMA_BEACON_ALERT            0x8204
37489 -#define AR_NEXT_SWBA                        0x8208
37490 -#define AR_NEXT_CFP                         0x8208
37491 -#define AR_NEXT_HCF                         0x820C
37492 -#define AR_NEXT_TIM                         0x8210
37493 -#define AR_NEXT_DTIM                        0x8214
37494 -#define AR_NEXT_QUIET_TIMER                 0x8218
37495 -#define AR_NEXT_NDP_TIMER                   0x821C
37496 -
37497 -#define AR_BEACON_PERIOD                    0x8220
37498 -#define AR_DMA_BEACON_PERIOD                0x8224
37499 -#define AR_SWBA_PERIOD                      0x8228
37500 -#define AR_HCF_PERIOD                       0x822C
37501 -#define AR_TIM_PERIOD                       0x8230
37502 -#define AR_DTIM_PERIOD                      0x8234
37503 -#define AR_QUIET_PERIOD                     0x8238
37504 -#define AR_NDP_PERIOD                       0x823C
37505 +
37506 +#define AR_GEN_TIMERS(_i)                   (0x8200 + ((_i) << 2))
37507 +#define AR_NEXT_TBTT_TIMER                  AR_GEN_TIMERS(0)
37508 +#define AR_NEXT_DMA_BEACON_ALERT            AR_GEN_TIMERS(1)
37509 +#define AR_NEXT_SWBA                        AR_GEN_TIMERS(2)
37510 +#define AR_NEXT_CFP                         AR_GEN_TIMERS(2)
37511 +#define AR_NEXT_HCF                         AR_GEN_TIMERS(3)
37512 +#define AR_NEXT_TIM                         AR_GEN_TIMERS(4)
37513 +#define AR_NEXT_DTIM                        AR_GEN_TIMERS(5)
37514 +#define AR_NEXT_QUIET_TIMER                 AR_GEN_TIMERS(6)
37515 +#define AR_NEXT_NDP_TIMER                   AR_GEN_TIMERS(7)
37516 +
37517 +#define AR_BEACON_PERIOD                    AR_GEN_TIMERS(8)
37518 +#define AR_DMA_BEACON_PERIOD                AR_GEN_TIMERS(9)
37519 +#define AR_SWBA_PERIOD                      AR_GEN_TIMERS(10)
37520 +#define AR_HCF_PERIOD                       AR_GEN_TIMERS(11)
37521 +#define AR_TIM_PERIOD                       AR_GEN_TIMERS(12)
37522 +#define AR_DTIM_PERIOD                      AR_GEN_TIMERS(13)
37523 +#define AR_QUIET_PERIOD                     AR_GEN_TIMERS(14)
37524 +#define AR_NDP_PERIOD                       AR_GEN_TIMERS(15)
37525  
37526  #define AR_TIMER_MODE                       0x8240
37527  #define AR_TBTT_TIMER_EN                    0x00000001
37528 @@ -1730,4 +1788,32 @@ enum {
37529  #define AR9271_CORE_CLOCK      117   /* clock to 117Mhz */
37530  #define AR9271_TARGET_BAUD_RATE        19200 /* 115200 */
37531  
37532 +#define AR_AGG_WEP_ENABLE_FIX          0x00000008  /* This allows the use of AR_AGG_WEP_ENABLE */
37533 +#define AR_ADHOC_MCAST_KEYID_ENABLE     0x00000040  /* This bit enables the Multicast search
37534 +                                                    * based on both MAC Address and Key ID.
37535 +                                                    * If bit is 0, then Multicast search is
37536 +                                                    * based on MAC address only.
37537 +                                                    * For Merlin and above only.
37538 +                                                    */
37539 +#define AR_AGG_WEP_ENABLE               0x00020000  /* This field enables AGG_WEP feature,
37540 +                                                    * when it is enable, AGG_WEP would takes
37541 +                                                    * charge of the encryption interface of
37542 +                                                    * pcu_txsm.
37543 +                                                    */
37544 +
37545 +#define AR9300_SM_BASE                         0xa200
37546 +#define AR9002_PHY_AGC_CONTROL                 0x9860
37547 +#define AR9003_PHY_AGC_CONTROL                 AR9300_SM_BASE + 0xc4
37548 +#define AR_PHY_AGC_CONTROL                     (AR_SREV_9300_20_OR_LATER(ah) ? AR9003_PHY_AGC_CONTROL : AR9002_PHY_AGC_CONTROL)
37549 +#define AR_PHY_AGC_CONTROL_CAL                 0x00000001  /* do internal calibration */
37550 +#define AR_PHY_AGC_CONTROL_NF                  0x00000002  /* do noise-floor calibration */
37551 +#define AR_PHY_AGC_CONTROL_OFFSET_CAL          0x00000800  /* allow offset calibration */
37552 +#define AR_PHY_AGC_CONTROL_ENABLE_NF           0x00008000  /* enable noise floor calibration to happen */
37553 +#define AR_PHY_AGC_CONTROL_FLTR_CAL            0x00010000  /* allow tx filter calibration */
37554 +#define AR_PHY_AGC_CONTROL_NO_UPDATE_NF                0x00020000  /* don't update noise floor automatically */
37555 +#define AR_PHY_AGC_CONTROL_EXT_NF_PWR_MEAS     0x00040000  /* extend noise floor power measurement */
37556 +#define AR_PHY_AGC_CONTROL_CLC_SUCCESS         0x00080000  /* carrier leak calibration done */
37557 +#define AR_PHY_AGC_CONTROL_YCOK_MAX            0x000003c0
37558 +#define AR_PHY_AGC_CONTROL_YCOK_MAX_S          6
37559 +
37560  #endif
37561 diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c
37562 index 02df4cb..c0de453 100644
37563 --- a/drivers/net/wireless/ath/ath9k/xmit.c
37564 +++ b/drivers/net/wireless/ath/ath9k/xmit.c
37565 @@ -91,7 +91,6 @@ static int ath_max_4ms_framelen[3][16] = {
37566         }
37567  };
37568  
37569 -
37570  /*********************/
37571  /* Aggregation logic */
37572  /*********************/
37573 @@ -279,7 +278,7 @@ static struct ath_buf* ath_clone_txbuf(struct ath_softc *sc, struct ath_buf *bf)
37574         tbf->aphy = bf->aphy;
37575         tbf->bf_mpdu = bf->bf_mpdu;
37576         tbf->bf_buf_addr = bf->bf_buf_addr;
37577 -       *(tbf->bf_desc) = *(bf->bf_desc);
37578 +       memcpy(tbf->bf_desc, bf->bf_desc, sc->sc_ah->caps.tx_desc_len);
37579         tbf->bf_state = bf->bf_state;
37580         tbf->bf_dmacontext = bf->bf_dmacontext;
37581  
37582 @@ -358,8 +357,7 @@ static void ath_tx_complete_aggr(struct ath_softc *sc, struct ath_txq *txq,
37583                         /* transmit completion */
37584                         acked_cnt++;
37585                 } else {
37586 -                       if (!(tid->state & AGGR_CLEANUP) &&
37587 -                           ts->ts_flags != ATH9K_TX_SW_ABORTED) {
37588 +                       if (!(tid->state & AGGR_CLEANUP) && !bf_last->bf_tx_aborted) {
37589                                 if (bf->bf_retries < ATH_MAX_SW_RETRIES) {
37590                                         ath_tx_set_retry(sc, txq, bf);
37591                                         txpending = 1;
37592 @@ -378,7 +376,8 @@ static void ath_tx_complete_aggr(struct ath_softc *sc, struct ath_txq *txq,
37593                         }
37594                 }
37595  
37596 -               if (bf_next == NULL) {
37597 +               if (!(sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) &&
37598 +                   bf_next == NULL) {
37599                         /*
37600                          * Make sure the last desc is reclaimed if it
37601                          * not a holding desc.
37602 @@ -412,7 +411,8 @@ static void ath_tx_complete_aggr(struct ath_softc *sc, struct ath_txq *txq,
37603                                 !txfail, sendbar);
37604                 } else {
37605                         /* retry the un-acked ones */
37606 -                       if (bf->bf_next == NULL && bf_last->bf_stale) {
37607 +                       if (!(sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) &&
37608 +                           bf->bf_next == NULL && bf_last->bf_stale) {
37609                                 struct ath_buf *tbf;
37610  
37611                                 tbf = ath_clone_txbuf(sc, bf_last);
37612 @@ -665,7 +665,7 @@ static enum ATH_AGGR_STATUS ath_tx_form_aggr(struct ath_softc *sc,
37613                 bpad = PADBYTES(al_delta) + (ndelim << 2);
37614  
37615                 bf->bf_next = NULL;
37616 -               bf->bf_desc->ds_link = 0;
37617 +               ath9k_hw_set_desc_link(sc->sc_ah, bf->bf_desc, 0);
37618  
37619                 /* link buffers of this frame to the aggregate */
37620                 ath_tx_addto_baw(sc, tid, bf);
37621 @@ -673,7 +673,8 @@ static enum ATH_AGGR_STATUS ath_tx_form_aggr(struct ath_softc *sc,
37622                 list_move_tail(&bf->list, bf_q);
37623                 if (bf_prev) {
37624                         bf_prev->bf_next = bf;
37625 -                       bf_prev->bf_desc->ds_link = bf->bf_daddr;
37626 +                       ath9k_hw_set_desc_link(sc->sc_ah, bf_prev->bf_desc,
37627 +                                              bf->bf_daddr);
37628                 }
37629                 bf_prev = bf;
37630  
37631 @@ -853,7 +854,7 @@ struct ath_txq *ath_txq_setup(struct ath_softc *sc, int qtype, int subtype)
37632         struct ath_hw *ah = sc->sc_ah;
37633         struct ath_common *common = ath9k_hw_common(ah);
37634         struct ath9k_tx_queue_info qi;
37635 -       int qnum;
37636 +       int qnum, i;
37637  
37638         memset(&qi, 0, sizeof(qi));
37639         qi.tqi_subtype = subtype;
37640 @@ -877,11 +878,16 @@ struct ath_txq *ath_txq_setup(struct ath_softc *sc, int qtype, int subtype)
37641          * The UAPSD queue is an exception, since we take a desc-
37642          * based intr on the EOSP frames.
37643          */
37644 -       if (qtype == ATH9K_TX_QUEUE_UAPSD)
37645 -               qi.tqi_qflags = TXQ_FLAG_TXDESCINT_ENABLE;
37646 -       else
37647 -               qi.tqi_qflags = TXQ_FLAG_TXEOLINT_ENABLE |
37648 -                       TXQ_FLAG_TXDESCINT_ENABLE;
37649 +       if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) {
37650 +               qi.tqi_qflags = TXQ_FLAG_TXOKINT_ENABLE |
37651 +                               TXQ_FLAG_TXERRINT_ENABLE;
37652 +       } else {
37653 +               if (qtype == ATH9K_TX_QUEUE_UAPSD)
37654 +                       qi.tqi_qflags = TXQ_FLAG_TXDESCINT_ENABLE;
37655 +               else
37656 +                       qi.tqi_qflags = TXQ_FLAG_TXEOLINT_ENABLE |
37657 +                                       TXQ_FLAG_TXDESCINT_ENABLE;
37658 +       }
37659         qnum = ath9k_hw_setuptxqueue(ah, qtype, &qi);
37660         if (qnum == -1) {
37661                 /*
37662 @@ -908,6 +914,11 @@ struct ath_txq *ath_txq_setup(struct ath_softc *sc, int qtype, int subtype)
37663                 txq->axq_depth = 0;
37664                 txq->axq_tx_inprogress = false;
37665                 sc->tx.txqsetup |= 1<<qnum;
37666 +
37667 +               txq->txq_headidx = txq->txq_tailidx = 0;
37668 +               for (i = 0; i < ATH_TXFIFO_DEPTH; i++)
37669 +                       INIT_LIST_HEAD(&txq->txq_fifo[i]);
37670 +               INIT_LIST_HEAD(&txq->txq_fifo_pending);
37671         }
37672         return &sc->tx.txq[qnum];
37673  }
37674 @@ -1035,36 +1046,64 @@ void ath_draintxq(struct ath_softc *sc, struct ath_txq *txq, bool retry_tx)
37675         struct ath_tx_status ts;
37676  
37677         memset(&ts, 0, sizeof(ts));
37678 -       if (!retry_tx)
37679 -               ts.ts_flags = ATH9K_TX_SW_ABORTED;
37680 -
37681         INIT_LIST_HEAD(&bf_head);
37682  
37683         for (;;) {
37684                 spin_lock_bh(&txq->axq_lock);
37685  
37686 -               if (list_empty(&txq->axq_q)) {
37687 -                       txq->axq_link = NULL;
37688 -                       spin_unlock_bh(&txq->axq_lock);
37689 -                       break;
37690 -               }
37691 +               if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) {
37692 +                       if (list_empty(&txq->txq_fifo[txq->txq_tailidx])) {
37693 +                               if (list_empty(&txq->txq_fifo_pending)) {
37694 +                                       txq->txq_headidx = txq->txq_tailidx = 0;
37695 +                                       spin_unlock_bh(&txq->axq_lock);
37696 +                                       break;
37697 +                               }
37698  
37699 -               bf = list_first_entry(&txq->axq_q, struct ath_buf, list);
37700 +                               bf = list_first_entry(&txq->txq_fifo[txq->txq_tailidx],
37701 +                                     struct ath_buf, list);
37702  
37703 -               if (bf->bf_stale) {
37704 -                       list_del(&bf->list);
37705 -                       spin_unlock_bh(&txq->axq_lock);
37706 +                               list_cut_position(
37707 +                                       &txq->txq_fifo[txq->txq_tailidx],
37708 +                                       &txq->txq_fifo_pending,
37709 +                                       &bf->bf_lastbf->list);
37710 +                       } else {
37711 +                               bf = list_first_entry(&txq->txq_fifo[txq->txq_tailidx],
37712 +                                       struct ath_buf, list);
37713 +                       }
37714 +               } else {
37715 +                       if (list_empty(&txq->axq_q)) {
37716 +                               txq->axq_link = NULL;
37717 +                               spin_unlock_bh(&txq->axq_lock);
37718 +                               break;
37719 +                       }
37720 +                       bf = list_first_entry(&txq->axq_q, struct ath_buf,
37721 +                                             list);
37722  
37723 -                       spin_lock_bh(&sc->tx.txbuflock);
37724 -                       list_add_tail(&bf->list, &sc->tx.txbuf);
37725 -                       spin_unlock_bh(&sc->tx.txbuflock);
37726 -                       continue;
37727 +                       if (bf->bf_stale) {
37728 +                               list_del(&bf->list);
37729 +                               spin_unlock_bh(&txq->axq_lock);
37730 +
37731 +                               spin_lock_bh(&sc->tx.txbuflock);
37732 +                               list_add_tail(&bf->list, &sc->tx.txbuf);
37733 +                               spin_unlock_bh(&sc->tx.txbuflock);
37734 +                               continue;
37735 +                       }
37736                 }
37737  
37738                 lastbf = bf->bf_lastbf;
37739 +               if (!retry_tx)
37740 +                       lastbf->bf_tx_aborted = true;
37741 +
37742  
37743 -               /* remove ath_buf's of the same mpdu from txq */
37744 -               list_cut_position(&bf_head, &txq->axq_q, &lastbf->list);
37745 +               if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) {
37746 +                       list_cut_position(&bf_head,
37747 +                                         &txq->txq_fifo[txq->txq_tailidx],
37748 +                                         &lastbf->list);
37749 +                       INCR(txq->txq_tailidx, ATH_TXFIFO_DEPTH);
37750 +               } else {
37751 +                       /* remove ath_buf's of the same mpdu from txq */
37752 +                       list_cut_position(&bf_head, &txq->axq_q, &lastbf->list);
37753 +               }
37754                 txq->axq_depth--;
37755  
37756                 spin_unlock_bh(&txq->axq_lock);
37757 @@ -1224,25 +1263,46 @@ static void ath_tx_txqaddbuf(struct ath_softc *sc, struct ath_txq *txq,
37758  
37759         bf = list_first_entry(head, struct ath_buf, list);
37760  
37761 -       list_splice_tail_init(head, &txq->axq_q);
37762 -       txq->axq_depth++;
37763 -
37764         ath_print(common, ATH_DBG_QUEUE,
37765                   "qnum: %d, txq depth: %d\n", txq->axq_qnum, txq->axq_depth);
37766  
37767 -       if (txq->axq_link == NULL) {
37768 +       if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) {
37769 +               if (txq->axq_depth >= ATH_TXFIFO_DEPTH) {
37770 +                       list_splice_tail_init(head, &txq->txq_fifo_pending);
37771 +                       return;
37772 +               }
37773 +               if (!list_empty(&txq->txq_fifo[txq->txq_headidx]))
37774 +                       ath_print(common, ATH_DBG_XMIT,
37775 +                                 "Initializing tx fifo %d which is non-empty\n",
37776 +                                 txq->txq_headidx);
37777 +               INIT_LIST_HEAD(&txq->txq_fifo[txq->txq_headidx]);
37778 +               list_splice_init(head, &txq->txq_fifo[txq->txq_headidx]);
37779 +               INCR(txq->txq_headidx, ATH_TXFIFO_DEPTH);
37780                 ath9k_hw_puttxbuf(ah, txq->axq_qnum, bf->bf_daddr);
37781                 ath_print(common, ATH_DBG_XMIT,
37782                           "TXDP[%u] = %llx (%p)\n",
37783                           txq->axq_qnum, ito64(bf->bf_daddr), bf->bf_desc);
37784         } else {
37785 -               *txq->axq_link = bf->bf_daddr;
37786 -               ath_print(common, ATH_DBG_XMIT, "link[%u] (%p)=%llx (%p)\n",
37787 -                         txq->axq_qnum, txq->axq_link,
37788 -                         ito64(bf->bf_daddr), bf->bf_desc);
37789 +               list_splice_tail_init(head, &txq->axq_q);
37790 +
37791 +               if (txq->axq_link == NULL) {
37792 +                       ath9k_hw_puttxbuf(ah, txq->axq_qnum, bf->bf_daddr);
37793 +                       ath_print(common, ATH_DBG_XMIT,
37794 +                                       "TXDP[%u] = %llx (%p)\n",
37795 +                                       txq->axq_qnum, ito64(bf->bf_daddr),
37796 +                                       bf->bf_desc);
37797 +               } else {
37798 +                       *txq->axq_link = bf->bf_daddr;
37799 +                       ath_print(common, ATH_DBG_XMIT,
37800 +                                       "link[%u] (%p)=%llx (%p)\n",
37801 +                                       txq->axq_qnum, txq->axq_link,
37802 +                                       ito64(bf->bf_daddr), bf->bf_desc);
37803 +               }
37804 +               ath9k_hw_get_desc_link(ah, bf->bf_lastbf->bf_desc,
37805 +                                      &txq->axq_link);
37806 +               ath9k_hw_txstart(ah, txq->axq_qnum);
37807         }
37808 -       txq->axq_link = &(bf->bf_lastbf->bf_desc->ds_link);
37809 -       ath9k_hw_txstart(ah, txq->axq_qnum);
37810 +       txq->axq_depth++;
37811  }
37812  
37813  static struct ath_buf *ath_tx_get_buffer(struct ath_softc *sc)
37814 @@ -1408,8 +1468,7 @@ static void assign_aggr_tid_seqno(struct sk_buff *skb,
37815         INCR(tid->seq_next, IEEE80211_SEQ_MAX);
37816  }
37817  
37818 -static int setup_tx_flags(struct ath_softc *sc, struct sk_buff *skb,
37819 -                         struct ath_txq *txq)
37820 +static int setup_tx_flags(struct sk_buff *skb, bool use_ldpc)
37821  {
37822         struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb);
37823         int flags = 0;
37824 @@ -1420,6 +1479,9 @@ static int setup_tx_flags(struct ath_softc *sc, struct sk_buff *skb,
37825         if (tx_info->flags & IEEE80211_TX_CTL_NO_ACK)
37826                 flags |= ATH9K_TXDESC_NOACK;
37827  
37828 +       if (use_ldpc)
37829 +               flags |= ATH9K_TXDESC_LDPC;
37830 +
37831         return flags;
37832  }
37833  
37834 @@ -1571,6 +1633,7 @@ static int ath_tx_setup_buffer(struct ieee80211_hw *hw, struct ath_buf *bf,
37835         int hdrlen;
37836         __le16 fc;
37837         int padpos, padsize;
37838 +       bool use_ldpc = false;
37839  
37840         tx_info->pad[0] = 0;
37841         switch (txctl->frame_type) {
37842 @@ -1597,10 +1660,13 @@ static int ath_tx_setup_buffer(struct ieee80211_hw *hw, struct ath_buf *bf,
37843                 bf->bf_frmlen -= padsize;
37844         }
37845  
37846 -       if (conf_is_ht(&hw->conf))
37847 +       if (conf_is_ht(&hw->conf)) {
37848                 bf->bf_state.bf_type |= BUF_HT;
37849 +               if (tx_info->flags & IEEE80211_TX_CTL_LDPC)
37850 +                       use_ldpc = true;
37851 +       }
37852  
37853 -       bf->bf_flags = setup_tx_flags(sc, skb, txctl->txq);
37854 +       bf->bf_flags = setup_tx_flags(skb, use_ldpc);
37855  
37856         bf->bf_keytype = get_hw_crypto_keytype(skb);
37857         if (bf->bf_keytype != ATH9K_KEY_TYPE_CLEAR) {
37858 @@ -1659,8 +1725,7 @@ static void ath_tx_start_dma(struct ath_softc *sc, struct ath_buf *bf,
37859         list_add_tail(&bf->list, &bf_head);
37860  
37861         ds = bf->bf_desc;
37862 -       ds->ds_link = 0;
37863 -       ds->ds_data = bf->bf_buf_addr;
37864 +       ath9k_hw_set_desc_link(ah, ds, 0);
37865  
37866         ath9k_hw_set11n_txdesc(ah, ds, bf->bf_frmlen, frm_type, MAX_RATE_POWER,
37867                                bf->bf_keyix, bf->bf_keytype, bf->bf_flags);
37868 @@ -1669,7 +1734,9 @@ static void ath_tx_start_dma(struct ath_softc *sc, struct ath_buf *bf,
37869                             skb->len,   /* segment length */
37870                             true,       /* first segment */
37871                             true,       /* last segment */
37872 -                           ds);        /* first descriptor */
37873 +                           ds,         /* first descriptor */
37874 +                           bf->bf_buf_addr,
37875 +                           txctl->txq->axq_qnum);
37876  
37877         spin_lock_bh(&txctl->txq->axq_lock);
37878  
37879 @@ -1896,7 +1963,7 @@ static int ath_tx_num_badfrms(struct ath_softc *sc, struct ath_buf *bf,
37880         int nbad = 0;
37881         int isaggr = 0;
37882  
37883 -       if (ts->ts_flags == ATH9K_TX_SW_ABORTED)
37884 +       if (bf->bf_tx_aborted)
37885                 return 0;
37886  
37887         isaggr = bf_isaggr(bf);
37888 @@ -2138,10 +2205,119 @@ void ath_tx_tasklet(struct ath_softc *sc)
37889         }
37890  }
37891  
37892 +void ath_tx_edma_tasklet(struct ath_softc *sc)
37893 +{
37894 +       struct ath_tx_status txs;
37895 +       struct ath_common *common = ath9k_hw_common(sc->sc_ah);
37896 +       struct ath_hw *ah = sc->sc_ah;
37897 +       struct ath_txq *txq;
37898 +       struct ath_buf *bf, *lastbf;
37899 +       struct list_head bf_head;
37900 +       int status;
37901 +       int txok;
37902 +
37903 +       for (;;) {
37904 +               status = ath9k_hw_txprocdesc(ah, NULL, (void *)&txs);
37905 +               if (status == -EINPROGRESS)
37906 +                       break;
37907 +               if (status == -EIO) {
37908 +                       ath_print(common, ATH_DBG_XMIT,
37909 +                                 "Error processing tx status\n");
37910 +                       break;
37911 +               }
37912 +
37913 +               /* Skip beacon completions */
37914 +               if (txs.qid == sc->beacon.beaconq)
37915 +                       continue;
37916 +
37917 +               txq = &sc->tx.txq[txs.qid];
37918 +
37919 +               spin_lock_bh(&txq->axq_lock);
37920 +               if (list_empty(&txq->txq_fifo[txq->txq_tailidx])) {
37921 +                       spin_unlock_bh(&txq->axq_lock);
37922 +                       return;
37923 +               }
37924 +
37925 +               bf = list_first_entry(&txq->txq_fifo[txq->txq_tailidx],
37926 +                                     struct ath_buf, list);
37927 +               lastbf = bf->bf_lastbf;
37928 +
37929 +               INIT_LIST_HEAD(&bf_head);
37930 +               list_cut_position(&bf_head, &txq->txq_fifo[txq->txq_tailidx],
37931 +                                 &lastbf->list);
37932 +               INCR(txq->txq_tailidx, ATH_TXFIFO_DEPTH);
37933 +               txq->axq_depth--;
37934 +               txq->axq_tx_inprogress = false;
37935 +               spin_unlock_bh(&txq->axq_lock);
37936 +
37937 +               txok = !(txs.ts_status & ATH9K_TXERR_MASK);
37938 +
37939 +               if (!bf_isampdu(bf)) {
37940 +                       bf->bf_retries = txs.ts_longretry;
37941 +                       if (txs.ts_status & ATH9K_TXERR_XRETRY)
37942 +                               bf->bf_state.bf_type |= BUF_XRETRY;
37943 +                       ath_tx_rc_status(bf, &txs, 0, txok, true);
37944 +               }
37945 +
37946 +               if (bf_isampdu(bf))
37947 +                       ath_tx_complete_aggr(sc, txq, bf, &bf_head, &txs, txok);
37948 +               else
37949 +                       ath_tx_complete_buf(sc, bf, txq, &bf_head,
37950 +                                           &txs, txok, 0);
37951 +
37952 +               spin_lock_bh(&txq->axq_lock);
37953 +               if (!list_empty(&txq->txq_fifo_pending)) {
37954 +                       INIT_LIST_HEAD(&bf_head);
37955 +                       bf = list_first_entry(&txq->txq_fifo_pending,
37956 +                               struct ath_buf, list);
37957 +                       list_cut_position(&bf_head, &txq->txq_fifo_pending,
37958 +                               &bf->bf_lastbf->list);
37959 +                       ath_tx_txqaddbuf(sc, txq, &bf_head);
37960 +               } else if (sc->sc_flags & SC_OP_TXAGGR)
37961 +                       ath_txq_schedule(sc, txq);
37962 +               spin_unlock_bh(&txq->axq_lock);
37963 +       }
37964 +}
37965 +
37966  /*****************/
37967  /* Init, Cleanup */
37968  /*****************/
37969  
37970 +static int ath_txstatus_setup(struct ath_softc *sc, int size)
37971 +{
37972 +       struct ath_descdma *dd = &sc->txsdma;
37973 +       u8 txs_len = sc->sc_ah->caps.txs_len;
37974 +
37975 +       dd->dd_desc_len = size * txs_len;
37976 +       dd->dd_desc = dma_alloc_coherent(sc->dev, dd->dd_desc_len,
37977 +                                        &dd->dd_desc_paddr, GFP_KERNEL);
37978 +       if (!dd->dd_desc)
37979 +               return -ENOMEM;
37980 +
37981 +       return 0;
37982 +}
37983 +
37984 +static int ath_tx_edma_init(struct ath_softc *sc)
37985 +{
37986 +       int err;
37987 +
37988 +       err = ath_txstatus_setup(sc, ATH_TXSTATUS_RING_SIZE);
37989 +       if (!err)
37990 +               ath9k_hw_setup_statusring(sc->sc_ah, sc->txsdma.dd_desc,
37991 +                                         sc->txsdma.dd_desc_paddr,
37992 +                                         ATH_TXSTATUS_RING_SIZE);
37993 +
37994 +       return err;
37995 +}
37996 +
37997 +static void ath_tx_edma_cleanup(struct ath_softc *sc)
37998 +{
37999 +       struct ath_descdma *dd = &sc->txsdma;
38000 +
38001 +       dma_free_coherent(sc->dev, dd->dd_desc_len, dd->dd_desc,
38002 +                         dd->dd_desc_paddr);
38003 +}
38004 +
38005  int ath_tx_init(struct ath_softc *sc, int nbufs)
38006  {
38007         struct ath_common *common = ath9k_hw_common(sc->sc_ah);
38008 @@ -2150,7 +2326,7 @@ int ath_tx_init(struct ath_softc *sc, int nbufs)
38009         spin_lock_init(&sc->tx.txbuflock);
38010  
38011         error = ath_descdma_setup(sc, &sc->tx.txdma, &sc->tx.txbuf,
38012 -                                 "tx", nbufs, 1);
38013 +                                 "tx", nbufs, 1, 1);
38014         if (error != 0) {
38015                 ath_print(common, ATH_DBG_FATAL,
38016                           "Failed to allocate tx descriptors: %d\n", error);
38017 @@ -2158,7 +2334,7 @@ int ath_tx_init(struct ath_softc *sc, int nbufs)
38018         }
38019  
38020         error = ath_descdma_setup(sc, &sc->beacon.bdma, &sc->beacon.bbuf,
38021 -                                 "beacon", ATH_BCBUF, 1);
38022 +                                 "beacon", ATH_BCBUF, 1, 1);
38023         if (error != 0) {
38024                 ath_print(common, ATH_DBG_FATAL,
38025                           "Failed to allocate beacon descriptors: %d\n", error);
38026 @@ -2167,6 +2343,12 @@ int ath_tx_init(struct ath_softc *sc, int nbufs)
38027  
38028         INIT_DELAYED_WORK(&sc->tx_complete_work, ath_tx_complete_poll_work);
38029  
38030 +       if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) {
38031 +               error = ath_tx_edma_init(sc);
38032 +               if (error)
38033 +                       goto err;
38034 +       }
38035 +
38036  err:
38037         if (error != 0)
38038                 ath_tx_cleanup(sc);
38039 @@ -2181,6 +2363,9 @@ void ath_tx_cleanup(struct ath_softc *sc)
38040  
38041         if (sc->tx.txdma.dd_desc_len != 0)
38042                 ath_descdma_cleanup(sc, &sc->tx.txdma, &sc->tx.txbuf);
38043 +
38044 +       if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
38045 +               ath_tx_edma_cleanup(sc);
38046  }
38047  
38048  void ath_tx_node_init(struct ath_softc *sc, struct ath_node *an)
38049 diff --git a/include/net/mac80211.h b/include/net/mac80211.h
38050 index dcf3c5f..75056dd 100644
38051 --- a/include/net/mac80211.h
38052 +++ b/include/net/mac80211.h
38053 @@ -274,6 +274,7 @@ struct ieee80211_bss_conf {
38054   * @IEEE80211_TX_INTFL_NL80211_FRAME_TX: Frame was requested through nl80211
38055   *     MLME command (internal to mac80211 to figure out whether to send TX
38056   *     status to user space)
38057 + * @IEEE80211_TX_CTL_LDPC: tells the driver to use LDPC for this frame
38058   */
38059  enum mac80211_tx_control_flags {
38060         IEEE80211_TX_CTL_REQ_TX_STATUS          = BIT(0),
38061 @@ -297,6 +298,7 @@ enum mac80211_tx_control_flags {
38062         IEEE80211_TX_INTFL_RETRANSMISSION       = BIT(19),
38063         IEEE80211_TX_INTFL_HAS_RADIOTAP         = BIT(20),
38064         IEEE80211_TX_INTFL_NL80211_FRAME_TX     = BIT(21),
38065 +       IEEE80211_TX_CTL_LDPC                   = BIT(22),
38066  };
38067  
38068  /**