ath9k: Enable WoW only for supported models
[pandora-kernel.git] / drivers / net / wireless / ath / ath9k / init.c
1 /*
2  * Copyright (c) 2008-2011 Atheros Communications Inc.
3  *
4  * Permission to use, copy, modify, and/or distribute this software for any
5  * purpose with or without fee is hereby granted, provided that the above
6  * copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15  */
16
17 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
18
19 #include <linux/dma-mapping.h>
20 #include <linux/slab.h>
21 #include <linux/ath9k_platform.h>
22 #include <linux/module.h>
23 #include <linux/relay.h>
24 #include <net/ieee80211_radiotap.h>
25
26 #include "ath9k.h"
27
28 struct ath9k_eeprom_ctx {
29         struct completion complete;
30         struct ath_hw *ah;
31 };
32
33 static char *dev_info = "ath9k";
34
35 MODULE_AUTHOR("Atheros Communications");
36 MODULE_DESCRIPTION("Support for Atheros 802.11n wireless LAN cards.");
37 MODULE_SUPPORTED_DEVICE("Atheros 802.11n WLAN cards");
38 MODULE_LICENSE("Dual BSD/GPL");
39
40 static unsigned int ath9k_debug = ATH_DBG_DEFAULT;
41 module_param_named(debug, ath9k_debug, uint, 0);
42 MODULE_PARM_DESC(debug, "Debugging mask");
43
44 int ath9k_modparam_nohwcrypt;
45 module_param_named(nohwcrypt, ath9k_modparam_nohwcrypt, int, 0444);
46 MODULE_PARM_DESC(nohwcrypt, "Disable hardware encryption");
47
48 int led_blink;
49 module_param_named(blink, led_blink, int, 0444);
50 MODULE_PARM_DESC(blink, "Enable LED blink on activity");
51
52 static int ath9k_btcoex_enable;
53 module_param_named(btcoex_enable, ath9k_btcoex_enable, int, 0444);
54 MODULE_PARM_DESC(btcoex_enable, "Enable wifi-BT coexistence");
55
56 static int ath9k_enable_diversity;
57 module_param_named(enable_diversity, ath9k_enable_diversity, int, 0444);
58 MODULE_PARM_DESC(enable_diversity, "Enable Antenna diversity for AR9565");
59
60 bool is_ath9k_unloaded;
61 /* We use the hw_value as an index into our private channel structure */
62
63 #define CHAN2G(_freq, _idx)  { \
64         .band = IEEE80211_BAND_2GHZ, \
65         .center_freq = (_freq), \
66         .hw_value = (_idx), \
67         .max_power = 20, \
68 }
69
70 #define CHAN5G(_freq, _idx) { \
71         .band = IEEE80211_BAND_5GHZ, \
72         .center_freq = (_freq), \
73         .hw_value = (_idx), \
74         .max_power = 20, \
75 }
76
77 /* Some 2 GHz radios are actually tunable on 2312-2732
78  * on 5 MHz steps, we support the channels which we know
79  * we have calibration data for all cards though to make
80  * this static */
81 static const struct ieee80211_channel ath9k_2ghz_chantable[] = {
82         CHAN2G(2412, 0), /* Channel 1 */
83         CHAN2G(2417, 1), /* Channel 2 */
84         CHAN2G(2422, 2), /* Channel 3 */
85         CHAN2G(2427, 3), /* Channel 4 */
86         CHAN2G(2432, 4), /* Channel 5 */
87         CHAN2G(2437, 5), /* Channel 6 */
88         CHAN2G(2442, 6), /* Channel 7 */
89         CHAN2G(2447, 7), /* Channel 8 */
90         CHAN2G(2452, 8), /* Channel 9 */
91         CHAN2G(2457, 9), /* Channel 10 */
92         CHAN2G(2462, 10), /* Channel 11 */
93         CHAN2G(2467, 11), /* Channel 12 */
94         CHAN2G(2472, 12), /* Channel 13 */
95         CHAN2G(2484, 13), /* Channel 14 */
96 };
97
98 /* Some 5 GHz radios are actually tunable on XXXX-YYYY
99  * on 5 MHz steps, we support the channels which we know
100  * we have calibration data for all cards though to make
101  * this static */
102 static const struct ieee80211_channel ath9k_5ghz_chantable[] = {
103         /* _We_ call this UNII 1 */
104         CHAN5G(5180, 14), /* Channel 36 */
105         CHAN5G(5200, 15), /* Channel 40 */
106         CHAN5G(5220, 16), /* Channel 44 */
107         CHAN5G(5240, 17), /* Channel 48 */
108         /* _We_ call this UNII 2 */
109         CHAN5G(5260, 18), /* Channel 52 */
110         CHAN5G(5280, 19), /* Channel 56 */
111         CHAN5G(5300, 20), /* Channel 60 */
112         CHAN5G(5320, 21), /* Channel 64 */
113         /* _We_ call this "Middle band" */
114         CHAN5G(5500, 22), /* Channel 100 */
115         CHAN5G(5520, 23), /* Channel 104 */
116         CHAN5G(5540, 24), /* Channel 108 */
117         CHAN5G(5560, 25), /* Channel 112 */
118         CHAN5G(5580, 26), /* Channel 116 */
119         CHAN5G(5600, 27), /* Channel 120 */
120         CHAN5G(5620, 28), /* Channel 124 */
121         CHAN5G(5640, 29), /* Channel 128 */
122         CHAN5G(5660, 30), /* Channel 132 */
123         CHAN5G(5680, 31), /* Channel 136 */
124         CHAN5G(5700, 32), /* Channel 140 */
125         /* _We_ call this UNII 3 */
126         CHAN5G(5745, 33), /* Channel 149 */
127         CHAN5G(5765, 34), /* Channel 153 */
128         CHAN5G(5785, 35), /* Channel 157 */
129         CHAN5G(5805, 36), /* Channel 161 */
130         CHAN5G(5825, 37), /* Channel 165 */
131 };
132
133 /* Atheros hardware rate code addition for short premble */
134 #define SHPCHECK(__hw_rate, __flags) \
135         ((__flags & IEEE80211_RATE_SHORT_PREAMBLE) ? (__hw_rate | 0x04 ) : 0)
136
137 #define RATE(_bitrate, _hw_rate, _flags) {              \
138         .bitrate        = (_bitrate),                   \
139         .flags          = (_flags),                     \
140         .hw_value       = (_hw_rate),                   \
141         .hw_value_short = (SHPCHECK(_hw_rate, _flags))  \
142 }
143
144 static struct ieee80211_rate ath9k_legacy_rates[] = {
145         RATE(10, 0x1b, 0),
146         RATE(20, 0x1a, IEEE80211_RATE_SHORT_PREAMBLE),
147         RATE(55, 0x19, IEEE80211_RATE_SHORT_PREAMBLE),
148         RATE(110, 0x18, IEEE80211_RATE_SHORT_PREAMBLE),
149         RATE(60, 0x0b, 0),
150         RATE(90, 0x0f, 0),
151         RATE(120, 0x0a, 0),
152         RATE(180, 0x0e, 0),
153         RATE(240, 0x09, 0),
154         RATE(360, 0x0d, 0),
155         RATE(480, 0x08, 0),
156         RATE(540, 0x0c, 0),
157 };
158
159 #ifdef CONFIG_MAC80211_LEDS
160 static const struct ieee80211_tpt_blink ath9k_tpt_blink[] = {
161         { .throughput = 0 * 1024, .blink_time = 334 },
162         { .throughput = 1 * 1024, .blink_time = 260 },
163         { .throughput = 5 * 1024, .blink_time = 220 },
164         { .throughput = 10 * 1024, .blink_time = 190 },
165         { .throughput = 20 * 1024, .blink_time = 170 },
166         { .throughput = 50 * 1024, .blink_time = 150 },
167         { .throughput = 70 * 1024, .blink_time = 130 },
168         { .throughput = 100 * 1024, .blink_time = 110 },
169         { .throughput = 200 * 1024, .blink_time = 80 },
170         { .throughput = 300 * 1024, .blink_time = 50 },
171 };
172 #endif
173
174 static void ath9k_deinit_softc(struct ath_softc *sc);
175
176 /*
177  * Read and write, they both share the same lock. We do this to serialize
178  * reads and writes on Atheros 802.11n PCI devices only. This is required
179  * as the FIFO on these devices can only accept sanely 2 requests.
180  */
181
182 static void ath9k_iowrite32(void *hw_priv, u32 val, u32 reg_offset)
183 {
184         struct ath_hw *ah = (struct ath_hw *) hw_priv;
185         struct ath_common *common = ath9k_hw_common(ah);
186         struct ath_softc *sc = (struct ath_softc *) common->priv;
187
188         if (NR_CPUS > 1 && ah->config.serialize_regmode == SER_REG_MODE_ON) {
189                 unsigned long flags;
190                 spin_lock_irqsave(&sc->sc_serial_rw, flags);
191                 iowrite32(val, sc->mem + reg_offset);
192                 spin_unlock_irqrestore(&sc->sc_serial_rw, flags);
193         } else
194                 iowrite32(val, sc->mem + reg_offset);
195 }
196
197 static unsigned int ath9k_ioread32(void *hw_priv, u32 reg_offset)
198 {
199         struct ath_hw *ah = (struct ath_hw *) hw_priv;
200         struct ath_common *common = ath9k_hw_common(ah);
201         struct ath_softc *sc = (struct ath_softc *) common->priv;
202         u32 val;
203
204         if (NR_CPUS > 1 && ah->config.serialize_regmode == SER_REG_MODE_ON) {
205                 unsigned long flags;
206                 spin_lock_irqsave(&sc->sc_serial_rw, flags);
207                 val = ioread32(sc->mem + reg_offset);
208                 spin_unlock_irqrestore(&sc->sc_serial_rw, flags);
209         } else
210                 val = ioread32(sc->mem + reg_offset);
211         return val;
212 }
213
214 static unsigned int __ath9k_reg_rmw(struct ath_softc *sc, u32 reg_offset,
215                                     u32 set, u32 clr)
216 {
217         u32 val;
218
219         val = ioread32(sc->mem + reg_offset);
220         val &= ~clr;
221         val |= set;
222         iowrite32(val, sc->mem + reg_offset);
223
224         return val;
225 }
226
227 static unsigned int ath9k_reg_rmw(void *hw_priv, u32 reg_offset, u32 set, u32 clr)
228 {
229         struct ath_hw *ah = (struct ath_hw *) hw_priv;
230         struct ath_common *common = ath9k_hw_common(ah);
231         struct ath_softc *sc = (struct ath_softc *) common->priv;
232         unsigned long uninitialized_var(flags);
233         u32 val;
234
235         if (NR_CPUS > 1 && ah->config.serialize_regmode == SER_REG_MODE_ON) {
236                 spin_lock_irqsave(&sc->sc_serial_rw, flags);
237                 val = __ath9k_reg_rmw(sc, reg_offset, set, clr);
238                 spin_unlock_irqrestore(&sc->sc_serial_rw, flags);
239         } else
240                 val = __ath9k_reg_rmw(sc, reg_offset, set, clr);
241
242         return val;
243 }
244
245 /**************************/
246 /*     Initialization     */
247 /**************************/
248
249 static void setup_ht_cap(struct ath_softc *sc,
250                          struct ieee80211_sta_ht_cap *ht_info)
251 {
252         struct ath_hw *ah = sc->sc_ah;
253         struct ath_common *common = ath9k_hw_common(ah);
254         u8 tx_streams, rx_streams;
255         int i, max_streams;
256
257         ht_info->ht_supported = true;
258         ht_info->cap = IEEE80211_HT_CAP_SUP_WIDTH_20_40 |
259                        IEEE80211_HT_CAP_SM_PS |
260                        IEEE80211_HT_CAP_SGI_40 |
261                        IEEE80211_HT_CAP_DSSSCCK40;
262
263         if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_LDPC)
264                 ht_info->cap |= IEEE80211_HT_CAP_LDPC_CODING;
265
266         if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_SGI_20)
267                 ht_info->cap |= IEEE80211_HT_CAP_SGI_20;
268
269         ht_info->ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
270         ht_info->ampdu_density = IEEE80211_HT_MPDU_DENSITY_8;
271
272         if (AR_SREV_9330(ah) || AR_SREV_9485(ah) || AR_SREV_9565(ah))
273                 max_streams = 1;
274         else if (AR_SREV_9462(ah))
275                 max_streams = 2;
276         else if (AR_SREV_9300_20_OR_LATER(ah))
277                 max_streams = 3;
278         else
279                 max_streams = 2;
280
281         if (AR_SREV_9280_20_OR_LATER(ah)) {
282                 if (max_streams >= 2)
283                         ht_info->cap |= IEEE80211_HT_CAP_TX_STBC;
284                 ht_info->cap |= (1 << IEEE80211_HT_CAP_RX_STBC_SHIFT);
285         }
286
287         /* set up supported mcs set */
288         memset(&ht_info->mcs, 0, sizeof(ht_info->mcs));
289         tx_streams = ath9k_cmn_count_streams(ah->txchainmask, max_streams);
290         rx_streams = ath9k_cmn_count_streams(ah->rxchainmask, max_streams);
291
292         ath_dbg(common, CONFIG, "TX streams %d, RX streams: %d\n",
293                 tx_streams, rx_streams);
294
295         if (tx_streams != rx_streams) {
296                 ht_info->mcs.tx_params |= IEEE80211_HT_MCS_TX_RX_DIFF;
297                 ht_info->mcs.tx_params |= ((tx_streams - 1) <<
298                                 IEEE80211_HT_MCS_TX_MAX_STREAMS_SHIFT);
299         }
300
301         for (i = 0; i < rx_streams; i++)
302                 ht_info->mcs.rx_mask[i] = 0xff;
303
304         ht_info->mcs.tx_params |= IEEE80211_HT_MCS_TX_DEFINED;
305 }
306
307 static void ath9k_reg_notifier(struct wiphy *wiphy,
308                                struct regulatory_request *request)
309 {
310         struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
311         struct ath_softc *sc = hw->priv;
312         struct ath_hw *ah = sc->sc_ah;
313         struct ath_regulatory *reg = ath9k_hw_regulatory(ah);
314
315         ath_reg_notifier_apply(wiphy, request, reg);
316
317         /* Set tx power */
318         if (ah->curchan) {
319                 sc->config.txpowlimit = 2 * ah->curchan->chan->max_power;
320                 ath9k_ps_wakeup(sc);
321                 ath9k_hw_set_txpowerlimit(ah, sc->config.txpowlimit, false);
322                 sc->curtxpow = ath9k_hw_regulatory(ah)->power_limit;
323                 /* synchronize DFS detector if regulatory domain changed */
324                 if (sc->dfs_detector != NULL)
325                         sc->dfs_detector->set_dfs_domain(sc->dfs_detector,
326                                                          request->dfs_region);
327                 ath9k_ps_restore(sc);
328         }
329 }
330
331 /*
332  *  This function will allocate both the DMA descriptor structure, and the
333  *  buffers it contains.  These are used to contain the descriptors used
334  *  by the system.
335 */
336 int ath_descdma_setup(struct ath_softc *sc, struct ath_descdma *dd,
337                       struct list_head *head, const char *name,
338                       int nbuf, int ndesc, bool is_tx)
339 {
340         struct ath_common *common = ath9k_hw_common(sc->sc_ah);
341         u8 *ds;
342         struct ath_buf *bf;
343         int i, bsize, desc_len;
344
345         ath_dbg(common, CONFIG, "%s DMA: %u buffers %u desc/buf\n",
346                 name, nbuf, ndesc);
347
348         INIT_LIST_HEAD(head);
349
350         if (is_tx)
351                 desc_len = sc->sc_ah->caps.tx_desc_len;
352         else
353                 desc_len = sizeof(struct ath_desc);
354
355         /* ath_desc must be a multiple of DWORDs */
356         if ((desc_len % 4) != 0) {
357                 ath_err(common, "ath_desc not DWORD aligned\n");
358                 BUG_ON((desc_len % 4) != 0);
359                 return -ENOMEM;
360         }
361
362         dd->dd_desc_len = desc_len * nbuf * ndesc;
363
364         /*
365          * Need additional DMA memory because we can't use
366          * descriptors that cross the 4K page boundary. Assume
367          * one skipped descriptor per 4K page.
368          */
369         if (!(sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_4KB_SPLITTRANS)) {
370                 u32 ndesc_skipped =
371                         ATH_DESC_4KB_BOUND_NUM_SKIPPED(dd->dd_desc_len);
372                 u32 dma_len;
373
374                 while (ndesc_skipped) {
375                         dma_len = ndesc_skipped * desc_len;
376                         dd->dd_desc_len += dma_len;
377
378                         ndesc_skipped = ATH_DESC_4KB_BOUND_NUM_SKIPPED(dma_len);
379                 }
380         }
381
382         /* allocate descriptors */
383         dd->dd_desc = dmam_alloc_coherent(sc->dev, dd->dd_desc_len,
384                                           &dd->dd_desc_paddr, GFP_KERNEL);
385         if (!dd->dd_desc)
386                 return -ENOMEM;
387
388         ds = (u8 *) dd->dd_desc;
389         ath_dbg(common, CONFIG, "%s DMA map: %p (%u) -> %llx (%u)\n",
390                 name, ds, (u32) dd->dd_desc_len,
391                 ito64(dd->dd_desc_paddr), /*XXX*/(u32) dd->dd_desc_len);
392
393         /* allocate buffers */
394         bsize = sizeof(struct ath_buf) * nbuf;
395         bf = devm_kzalloc(sc->dev, bsize, GFP_KERNEL);
396         if (!bf)
397                 return -ENOMEM;
398
399         for (i = 0; i < nbuf; i++, bf++, ds += (desc_len * ndesc)) {
400                 bf->bf_desc = ds;
401                 bf->bf_daddr = DS2PHYS(dd, ds);
402
403                 if (!(sc->sc_ah->caps.hw_caps &
404                       ATH9K_HW_CAP_4KB_SPLITTRANS)) {
405                         /*
406                          * Skip descriptor addresses which can cause 4KB
407                          * boundary crossing (addr + length) with a 32 dword
408                          * descriptor fetch.
409                          */
410                         while (ATH_DESC_4KB_BOUND_CHECK(bf->bf_daddr)) {
411                                 BUG_ON((caddr_t) bf->bf_desc >=
412                                        ((caddr_t) dd->dd_desc +
413                                         dd->dd_desc_len));
414
415                                 ds += (desc_len * ndesc);
416                                 bf->bf_desc = ds;
417                                 bf->bf_daddr = DS2PHYS(dd, ds);
418                         }
419                 }
420                 list_add_tail(&bf->list, head);
421         }
422         return 0;
423 }
424
425 static int ath9k_init_queues(struct ath_softc *sc)
426 {
427         int i = 0;
428
429         sc->beacon.beaconq = ath9k_hw_beaconq_setup(sc->sc_ah);
430         sc->beacon.cabq = ath_txq_setup(sc, ATH9K_TX_QUEUE_CAB, 0);
431
432         sc->config.cabqReadytime = ATH_CABQ_READY_TIME;
433         ath_cabq_update(sc);
434
435         sc->tx.uapsdq = ath_txq_setup(sc, ATH9K_TX_QUEUE_UAPSD, 0);
436
437         for (i = 0; i < IEEE80211_NUM_ACS; i++) {
438                 sc->tx.txq_map[i] = ath_txq_setup(sc, ATH9K_TX_QUEUE_DATA, i);
439                 sc->tx.txq_map[i]->mac80211_qnum = i;
440                 sc->tx.txq_max_pending[i] = ATH_MAX_QDEPTH;
441         }
442         return 0;
443 }
444
445 static int ath9k_init_channels_rates(struct ath_softc *sc)
446 {
447         void *channels;
448
449         BUILD_BUG_ON(ARRAY_SIZE(ath9k_2ghz_chantable) +
450                      ARRAY_SIZE(ath9k_5ghz_chantable) !=
451                      ATH9K_NUM_CHANNELS);
452
453         if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_2GHZ) {
454                 channels = devm_kzalloc(sc->dev,
455                         sizeof(ath9k_2ghz_chantable), GFP_KERNEL);
456                 if (!channels)
457                     return -ENOMEM;
458
459                 memcpy(channels, ath9k_2ghz_chantable,
460                        sizeof(ath9k_2ghz_chantable));
461                 sc->sbands[IEEE80211_BAND_2GHZ].channels = channels;
462                 sc->sbands[IEEE80211_BAND_2GHZ].band = IEEE80211_BAND_2GHZ;
463                 sc->sbands[IEEE80211_BAND_2GHZ].n_channels =
464                         ARRAY_SIZE(ath9k_2ghz_chantable);
465                 sc->sbands[IEEE80211_BAND_2GHZ].bitrates = ath9k_legacy_rates;
466                 sc->sbands[IEEE80211_BAND_2GHZ].n_bitrates =
467                         ARRAY_SIZE(ath9k_legacy_rates);
468         }
469
470         if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_5GHZ) {
471                 channels = devm_kzalloc(sc->dev,
472                         sizeof(ath9k_5ghz_chantable), GFP_KERNEL);
473                 if (!channels)
474                         return -ENOMEM;
475
476                 memcpy(channels, ath9k_5ghz_chantable,
477                        sizeof(ath9k_5ghz_chantable));
478                 sc->sbands[IEEE80211_BAND_5GHZ].channels = channels;
479                 sc->sbands[IEEE80211_BAND_5GHZ].band = IEEE80211_BAND_5GHZ;
480                 sc->sbands[IEEE80211_BAND_5GHZ].n_channels =
481                         ARRAY_SIZE(ath9k_5ghz_chantable);
482                 sc->sbands[IEEE80211_BAND_5GHZ].bitrates =
483                         ath9k_legacy_rates + 4;
484                 sc->sbands[IEEE80211_BAND_5GHZ].n_bitrates =
485                         ARRAY_SIZE(ath9k_legacy_rates) - 4;
486         }
487         return 0;
488 }
489
490 static void ath9k_init_misc(struct ath_softc *sc)
491 {
492         struct ath_common *common = ath9k_hw_common(sc->sc_ah);
493         int i = 0;
494
495         setup_timer(&common->ani.timer, ath_ani_calibrate, (unsigned long)sc);
496
497         sc->last_rssi = ATH_RSSI_DUMMY_MARKER;
498         sc->config.txpowlimit = ATH_TXPOWER_MAX;
499         memcpy(common->bssidmask, ath_bcast_mac, ETH_ALEN);
500         sc->beacon.slottime = ATH9K_SLOT_TIME_9;
501
502         for (i = 0; i < ARRAY_SIZE(sc->beacon.bslot); i++)
503                 sc->beacon.bslot[i] = NULL;
504
505         if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_ANT_DIV_COMB)
506                 sc->ant_comb.count = ATH_ANT_DIV_COMB_INIT_COUNT;
507
508         sc->spec_config.enabled = 0;
509         sc->spec_config.short_repeat = true;
510         sc->spec_config.count = 8;
511         sc->spec_config.endless = false;
512         sc->spec_config.period = 0xFF;
513         sc->spec_config.fft_period = 0xF;
514 }
515
516 static void ath9k_init_platform(struct ath_softc *sc)
517 {
518         struct ath_hw *ah = sc->sc_ah;
519         struct ath_common *common = ath9k_hw_common(ah);
520
521         if (common->bus_ops->ath_bus_type != ATH_PCI)
522                 return;
523
524         if (sc->driver_data & (ATH9K_PCI_CUS198 |
525                                ATH9K_PCI_CUS230)) {
526                 ah->config.xlna_gpio = 9;
527                 ah->config.xatten_margin_cfg = true;
528
529                 ath_info(common, "Set parameters for %s\n",
530                          (sc->driver_data & ATH9K_PCI_CUS198) ?
531                          "CUS198" : "CUS230");
532         } else if (sc->driver_data & ATH9K_PCI_CUS217) {
533                 ath_info(common, "CUS217 card detected\n");
534         }
535 }
536
537 static void ath9k_eeprom_request_cb(const struct firmware *eeprom_blob,
538                                     void *ctx)
539 {
540         struct ath9k_eeprom_ctx *ec = ctx;
541
542         if (eeprom_blob)
543                 ec->ah->eeprom_blob = eeprom_blob;
544
545         complete(&ec->complete);
546 }
547
548 static int ath9k_eeprom_request(struct ath_softc *sc, const char *name)
549 {
550         struct ath9k_eeprom_ctx ec;
551         struct ath_hw *ah = ah = sc->sc_ah;
552         int err;
553
554         /* try to load the EEPROM content asynchronously */
555         init_completion(&ec.complete);
556         ec.ah = sc->sc_ah;
557
558         err = request_firmware_nowait(THIS_MODULE, 1, name, sc->dev, GFP_KERNEL,
559                                       &ec, ath9k_eeprom_request_cb);
560         if (err < 0) {
561                 ath_err(ath9k_hw_common(ah),
562                         "EEPROM request failed\n");
563                 return err;
564         }
565
566         wait_for_completion(&ec.complete);
567
568         if (!ah->eeprom_blob) {
569                 ath_err(ath9k_hw_common(ah),
570                         "Unable to load EEPROM file %s\n", name);
571                 return -EINVAL;
572         }
573
574         return 0;
575 }
576
577 static void ath9k_eeprom_release(struct ath_softc *sc)
578 {
579         release_firmware(sc->sc_ah->eeprom_blob);
580 }
581
582 static int ath9k_init_softc(u16 devid, struct ath_softc *sc,
583                             const struct ath_bus_ops *bus_ops)
584 {
585         struct ath9k_platform_data *pdata = sc->dev->platform_data;
586         struct ath_hw *ah = NULL;
587         struct ath_common *common;
588         int ret = 0, i;
589         int csz = 0;
590
591         ah = devm_kzalloc(sc->dev, sizeof(struct ath_hw), GFP_KERNEL);
592         if (!ah)
593                 return -ENOMEM;
594
595         ah->dev = sc->dev;
596         ah->hw = sc->hw;
597         ah->hw_version.devid = devid;
598         ah->reg_ops.read = ath9k_ioread32;
599         ah->reg_ops.write = ath9k_iowrite32;
600         ah->reg_ops.rmw = ath9k_reg_rmw;
601         atomic_set(&ah->intr_ref_cnt, -1);
602         sc->sc_ah = ah;
603
604         sc->dfs_detector = dfs_pattern_detector_init(ah, NL80211_DFS_UNSET);
605
606         if (!pdata) {
607                 ah->ah_flags |= AH_USE_EEPROM;
608                 sc->sc_ah->led_pin = -1;
609         } else {
610                 sc->sc_ah->gpio_mask = pdata->gpio_mask;
611                 sc->sc_ah->gpio_val = pdata->gpio_val;
612                 sc->sc_ah->led_pin = pdata->led_pin;
613                 ah->is_clk_25mhz = pdata->is_clk_25mhz;
614                 ah->get_mac_revision = pdata->get_mac_revision;
615                 ah->external_reset = pdata->external_reset;
616         }
617
618         common = ath9k_hw_common(ah);
619         common->ops = &ah->reg_ops;
620         common->bus_ops = bus_ops;
621         common->ah = ah;
622         common->hw = sc->hw;
623         common->priv = sc;
624         common->debug_mask = ath9k_debug;
625         common->btcoex_enabled = ath9k_btcoex_enable == 1;
626         common->disable_ani = false;
627
628         /*
629          * Platform quirks.
630          */
631         ath9k_init_platform(sc);
632
633         /*
634          * Enable Antenna diversity only when BTCOEX is disabled
635          * and the user manually requests the feature.
636          */
637         if (!common->btcoex_enabled && ath9k_enable_diversity)
638                 common->antenna_diversity = 1;
639
640         spin_lock_init(&common->cc_lock);
641
642         spin_lock_init(&sc->sc_serial_rw);
643         spin_lock_init(&sc->sc_pm_lock);
644         mutex_init(&sc->mutex);
645         tasklet_init(&sc->intr_tq, ath9k_tasklet, (unsigned long)sc);
646         tasklet_init(&sc->bcon_tasklet, ath9k_beacon_tasklet,
647                      (unsigned long)sc);
648
649         INIT_WORK(&sc->hw_reset_work, ath_reset_work);
650         INIT_WORK(&sc->hw_check_work, ath_hw_check);
651         INIT_WORK(&sc->paprd_work, ath_paprd_calibrate);
652         INIT_DELAYED_WORK(&sc->hw_pll_work, ath_hw_pll_work);
653         setup_timer(&sc->rx_poll_timer, ath_rx_poll, (unsigned long)sc);
654
655         /*
656          * Cache line size is used to size and align various
657          * structures used to communicate with the hardware.
658          */
659         ath_read_cachesize(common, &csz);
660         common->cachelsz = csz << 2; /* convert to bytes */
661
662         if (pdata && pdata->eeprom_name) {
663                 ret = ath9k_eeprom_request(sc, pdata->eeprom_name);
664                 if (ret)
665                         return ret;
666         }
667
668         /* Initializes the hardware for all supported chipsets */
669         ret = ath9k_hw_init(ah);
670         if (ret)
671                 goto err_hw;
672
673         if (pdata && pdata->macaddr)
674                 memcpy(common->macaddr, pdata->macaddr, ETH_ALEN);
675
676         ret = ath9k_init_queues(sc);
677         if (ret)
678                 goto err_queues;
679
680         ret =  ath9k_init_btcoex(sc);
681         if (ret)
682                 goto err_btcoex;
683
684         ret = ath9k_init_channels_rates(sc);
685         if (ret)
686                 goto err_btcoex;
687
688         ath9k_cmn_init_crypto(sc->sc_ah);
689         ath9k_init_misc(sc);
690         ath_fill_led_pin(sc);
691
692         if (common->bus_ops->aspm_init)
693                 common->bus_ops->aspm_init(common);
694
695         return 0;
696
697 err_btcoex:
698         for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++)
699                 if (ATH_TXQ_SETUP(sc, i))
700                         ath_tx_cleanupq(sc, &sc->tx.txq[i]);
701 err_queues:
702         ath9k_hw_deinit(ah);
703 err_hw:
704         ath9k_eeprom_release(sc);
705         return ret;
706 }
707
708 static void ath9k_init_band_txpower(struct ath_softc *sc, int band)
709 {
710         struct ieee80211_supported_band *sband;
711         struct ieee80211_channel *chan;
712         struct ath_hw *ah = sc->sc_ah;
713         int i;
714
715         sband = &sc->sbands[band];
716         for (i = 0; i < sband->n_channels; i++) {
717                 chan = &sband->channels[i];
718                 ah->curchan = &ah->channels[chan->hw_value];
719                 ath9k_cmn_update_ichannel(ah->curchan, chan, NL80211_CHAN_HT20);
720                 ath9k_hw_set_txpowerlimit(ah, MAX_RATE_POWER, true);
721         }
722 }
723
724 static void ath9k_init_txpower_limits(struct ath_softc *sc)
725 {
726         struct ath_hw *ah = sc->sc_ah;
727         struct ath9k_channel *curchan = ah->curchan;
728
729         if (ah->caps.hw_caps & ATH9K_HW_CAP_2GHZ)
730                 ath9k_init_band_txpower(sc, IEEE80211_BAND_2GHZ);
731         if (ah->caps.hw_caps & ATH9K_HW_CAP_5GHZ)
732                 ath9k_init_band_txpower(sc, IEEE80211_BAND_5GHZ);
733
734         ah->curchan = curchan;
735 }
736
737 void ath9k_reload_chainmask_settings(struct ath_softc *sc)
738 {
739         if (!(sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT))
740                 return;
741
742         if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_2GHZ)
743                 setup_ht_cap(sc, &sc->sbands[IEEE80211_BAND_2GHZ].ht_cap);
744         if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_5GHZ)
745                 setup_ht_cap(sc, &sc->sbands[IEEE80211_BAND_5GHZ].ht_cap);
746 }
747
748 static const struct ieee80211_iface_limit if_limits[] = {
749         { .max = 2048,  .types = BIT(NL80211_IFTYPE_STATION) |
750                                  BIT(NL80211_IFTYPE_P2P_CLIENT) |
751                                  BIT(NL80211_IFTYPE_WDS) },
752         { .max = 8,     .types =
753 #ifdef CONFIG_MAC80211_MESH
754                                  BIT(NL80211_IFTYPE_MESH_POINT) |
755 #endif
756                                  BIT(NL80211_IFTYPE_AP) |
757                                  BIT(NL80211_IFTYPE_P2P_GO) },
758 };
759
760
761 static const struct ieee80211_iface_limit if_dfs_limits[] = {
762         { .max = 1,     .types = BIT(NL80211_IFTYPE_AP) },
763 };
764
765 static const struct ieee80211_iface_combination if_comb[] = {
766         {
767                 .limits = if_limits,
768                 .n_limits = ARRAY_SIZE(if_limits),
769                 .max_interfaces = 2048,
770                 .num_different_channels = 1,
771                 .beacon_int_infra_match = true,
772         },
773         {
774                 .limits = if_dfs_limits,
775                 .n_limits = ARRAY_SIZE(if_dfs_limits),
776                 .max_interfaces = 1,
777                 .num_different_channels = 1,
778                 .beacon_int_infra_match = true,
779                 .radar_detect_widths =  BIT(NL80211_CHAN_NO_HT) |
780                                         BIT(NL80211_CHAN_HT20),
781         }
782 };
783
784 #ifdef CONFIG_PM
785 static const struct wiphy_wowlan_support ath9k_wowlan_support = {
786         .flags = WIPHY_WOWLAN_MAGIC_PKT | WIPHY_WOWLAN_DISCONNECT,
787         .n_patterns = MAX_NUM_USER_PATTERN,
788         .pattern_min_len = 1,
789         .pattern_max_len = MAX_PATTERN_SIZE,
790 };
791 #endif
792
793 void ath9k_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw)
794 {
795         struct ath_hw *ah = sc->sc_ah;
796         struct ath_common *common = ath9k_hw_common(ah);
797
798         hw->flags = IEEE80211_HW_RX_INCLUDES_FCS |
799                 IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING |
800                 IEEE80211_HW_SIGNAL_DBM |
801                 IEEE80211_HW_SUPPORTS_PS |
802                 IEEE80211_HW_PS_NULLFUNC_STACK |
803                 IEEE80211_HW_SPECTRUM_MGMT |
804                 IEEE80211_HW_REPORTS_TX_ACK_STATUS |
805                 IEEE80211_HW_SUPPORTS_RC_TABLE;
806
807         if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT) {
808                 hw->flags |= IEEE80211_HW_AMPDU_AGGREGATION;
809
810                 if (AR_SREV_9280_20_OR_LATER(ah))
811                         hw->radiotap_mcs_details |=
812                                 IEEE80211_RADIOTAP_MCS_HAVE_STBC;
813         }
814
815         if (AR_SREV_9160_10_OR_LATER(sc->sc_ah) || ath9k_modparam_nohwcrypt)
816                 hw->flags |= IEEE80211_HW_MFP_CAPABLE;
817
818         hw->wiphy->features |= NL80211_FEATURE_ACTIVE_MONITOR;
819
820         hw->wiphy->interface_modes =
821                 BIT(NL80211_IFTYPE_P2P_GO) |
822                 BIT(NL80211_IFTYPE_P2P_CLIENT) |
823                 BIT(NL80211_IFTYPE_AP) |
824                 BIT(NL80211_IFTYPE_WDS) |
825                 BIT(NL80211_IFTYPE_STATION) |
826                 BIT(NL80211_IFTYPE_ADHOC) |
827                 BIT(NL80211_IFTYPE_MESH_POINT);
828
829         hw->wiphy->iface_combinations = if_comb;
830         hw->wiphy->n_iface_combinations = ARRAY_SIZE(if_comb);
831
832         hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
833
834         hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN;
835         hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_TDLS;
836         hw->wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
837
838 #ifdef CONFIG_PM_SLEEP
839         if ((ah->caps.hw_caps & ATH9K_HW_WOW_DEVICE_CAPABLE) &&
840             (sc->driver_data & ATH9K_PCI_WOW) &&
841             device_can_wakeup(sc->dev))
842                 hw->wiphy->wowlan = &ath9k_wowlan_support;
843
844         atomic_set(&sc->wow_sleep_proc_intr, -1);
845         atomic_set(&sc->wow_got_bmiss_intr, -1);
846 #endif
847
848         hw->queues = 4;
849         hw->max_rates = 4;
850         hw->channel_change_time = 5000;
851         hw->max_listen_interval = 1;
852         hw->max_rate_tries = 10;
853         hw->sta_data_size = sizeof(struct ath_node);
854         hw->vif_data_size = sizeof(struct ath_vif);
855
856         hw->wiphy->available_antennas_rx = BIT(ah->caps.max_rxchains) - 1;
857         hw->wiphy->available_antennas_tx = BIT(ah->caps.max_txchains) - 1;
858
859         /* single chain devices with rx diversity */
860         if (ah->caps.hw_caps & ATH9K_HW_CAP_ANT_DIV_COMB)
861                 hw->wiphy->available_antennas_rx = BIT(0) | BIT(1);
862
863         sc->ant_rx = hw->wiphy->available_antennas_rx;
864         sc->ant_tx = hw->wiphy->available_antennas_tx;
865
866         if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_2GHZ)
867                 hw->wiphy->bands[IEEE80211_BAND_2GHZ] =
868                         &sc->sbands[IEEE80211_BAND_2GHZ];
869         if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_5GHZ)
870                 hw->wiphy->bands[IEEE80211_BAND_5GHZ] =
871                         &sc->sbands[IEEE80211_BAND_5GHZ];
872
873         ath9k_reload_chainmask_settings(sc);
874
875         SET_IEEE80211_PERM_ADDR(hw, common->macaddr);
876 }
877
878 int ath9k_init_device(u16 devid, struct ath_softc *sc,
879                     const struct ath_bus_ops *bus_ops)
880 {
881         struct ieee80211_hw *hw = sc->hw;
882         struct ath_common *common;
883         struct ath_hw *ah;
884         int error = 0;
885         struct ath_regulatory *reg;
886
887         /* Bring up device */
888         error = ath9k_init_softc(devid, sc, bus_ops);
889         if (error)
890                 return error;
891
892         ah = sc->sc_ah;
893         common = ath9k_hw_common(ah);
894         ath9k_set_hw_capab(sc, hw);
895
896         /* Initialize regulatory */
897         error = ath_regd_init(&common->regulatory, sc->hw->wiphy,
898                               ath9k_reg_notifier);
899         if (error)
900                 goto deinit;
901
902         reg = &common->regulatory;
903
904         /* Setup TX DMA */
905         error = ath_tx_init(sc, ATH_TXBUF);
906         if (error != 0)
907                 goto deinit;
908
909         /* Setup RX DMA */
910         error = ath_rx_init(sc, ATH_RXBUF);
911         if (error != 0)
912                 goto deinit;
913
914         ath9k_init_txpower_limits(sc);
915
916 #ifdef CONFIG_MAC80211_LEDS
917         /* must be initialized before ieee80211_register_hw */
918         sc->led_cdev.default_trigger = ieee80211_create_tpt_led_trigger(sc->hw,
919                 IEEE80211_TPT_LEDTRIG_FL_RADIO, ath9k_tpt_blink,
920                 ARRAY_SIZE(ath9k_tpt_blink));
921 #endif
922
923         /* Register with mac80211 */
924         error = ieee80211_register_hw(hw);
925         if (error)
926                 goto rx_cleanup;
927
928         error = ath9k_init_debug(ah);
929         if (error) {
930                 ath_err(common, "Unable to create debugfs files\n");
931                 goto unregister;
932         }
933
934         /* Handle world regulatory */
935         if (!ath_is_world_regd(reg)) {
936                 error = regulatory_hint(hw->wiphy, reg->alpha2);
937                 if (error)
938                         goto debug_cleanup;
939         }
940
941         ath_init_leds(sc);
942         ath_start_rfkill_poll(sc);
943
944         return 0;
945
946 debug_cleanup:
947         ath9k_deinit_debug(sc);
948 unregister:
949         ieee80211_unregister_hw(hw);
950 rx_cleanup:
951         ath_rx_cleanup(sc);
952 deinit:
953         ath9k_deinit_softc(sc);
954         return error;
955 }
956
957 /*****************************/
958 /*     De-Initialization     */
959 /*****************************/
960
961 static void ath9k_deinit_softc(struct ath_softc *sc)
962 {
963         int i = 0;
964
965         ath9k_deinit_btcoex(sc);
966
967         for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++)
968                 if (ATH_TXQ_SETUP(sc, i))
969                         ath_tx_cleanupq(sc, &sc->tx.txq[i]);
970
971         ath9k_hw_deinit(sc->sc_ah);
972         if (sc->dfs_detector != NULL)
973                 sc->dfs_detector->exit(sc->dfs_detector);
974
975         ath9k_eeprom_release(sc);
976 }
977
978 void ath9k_deinit_device(struct ath_softc *sc)
979 {
980         struct ieee80211_hw *hw = sc->hw;
981
982         ath9k_ps_wakeup(sc);
983
984         wiphy_rfkill_stop_polling(sc->hw->wiphy);
985         ath_deinit_leds(sc);
986
987         ath9k_ps_restore(sc);
988
989         ath9k_deinit_debug(sc);
990         ieee80211_unregister_hw(hw);
991         ath_rx_cleanup(sc);
992         ath9k_deinit_softc(sc);
993 }
994
995 /************************/
996 /*     Module Hooks     */
997 /************************/
998
999 static int __init ath9k_init(void)
1000 {
1001         int error;
1002
1003         /* Register rate control algorithm */
1004         error = ath_rate_control_register();
1005         if (error != 0) {
1006                 pr_err("Unable to register rate control algorithm: %d\n",
1007                        error);
1008                 goto err_out;
1009         }
1010
1011         error = ath_pci_init();
1012         if (error < 0) {
1013                 pr_err("No PCI devices found, driver not installed\n");
1014                 error = -ENODEV;
1015                 goto err_rate_unregister;
1016         }
1017
1018         error = ath_ahb_init();
1019         if (error < 0) {
1020                 error = -ENODEV;
1021                 goto err_pci_exit;
1022         }
1023
1024         return 0;
1025
1026  err_pci_exit:
1027         ath_pci_exit();
1028
1029  err_rate_unregister:
1030         ath_rate_control_unregister();
1031  err_out:
1032         return error;
1033 }
1034 module_init(ath9k_init);
1035
1036 static void __exit ath9k_exit(void)
1037 {
1038         is_ath9k_unloaded = true;
1039         ath_ahb_exit();
1040         ath_pci_exit();
1041         ath_rate_control_unregister();
1042         pr_info("%s: Driver unloaded\n", dev_info);
1043 }
1044 module_exit(ath9k_exit);