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