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