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