]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - drivers/net/wireless/ath/ath9k/main.c
4d8dc9ff5a75bf0e45bb3fa7a59dc37762f803d3
[karo-tx-linux.git] / drivers / net / wireless / ath / ath9k / main.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/nl80211.h>
18 #include <linux/delay.h>
19 #include "ath9k.h"
20 #include "btcoex.h"
21
22 static void ath9k_set_assoc_state(struct ath_softc *sc,
23                                   struct ieee80211_vif *vif);
24
25 u8 ath9k_parse_mpdudensity(u8 mpdudensity)
26 {
27         /*
28          * 802.11n D2.0 defined values for "Minimum MPDU Start Spacing":
29          *   0 for no restriction
30          *   1 for 1/4 us
31          *   2 for 1/2 us
32          *   3 for 1 us
33          *   4 for 2 us
34          *   5 for 4 us
35          *   6 for 8 us
36          *   7 for 16 us
37          */
38         switch (mpdudensity) {
39         case 0:
40                 return 0;
41         case 1:
42         case 2:
43         case 3:
44                 /* Our lower layer calculations limit our precision to
45                    1 microsecond */
46                 return 1;
47         case 4:
48                 return 2;
49         case 5:
50                 return 4;
51         case 6:
52                 return 8;
53         case 7:
54                 return 16;
55         default:
56                 return 0;
57         }
58 }
59
60 static bool ath9k_has_pending_frames(struct ath_softc *sc, struct ath_txq *txq)
61 {
62         bool pending = false;
63
64         spin_lock_bh(&txq->axq_lock);
65
66         if (txq->axq_depth || !list_empty(&txq->axq_acq))
67                 pending = true;
68
69         spin_unlock_bh(&txq->axq_lock);
70         return pending;
71 }
72
73 static bool ath9k_setpower(struct ath_softc *sc, enum ath9k_power_mode mode)
74 {
75         unsigned long flags;
76         bool ret;
77
78         spin_lock_irqsave(&sc->sc_pm_lock, flags);
79         ret = ath9k_hw_setpower(sc->sc_ah, mode);
80         spin_unlock_irqrestore(&sc->sc_pm_lock, flags);
81
82         return ret;
83 }
84
85 void ath9k_ps_wakeup(struct ath_softc *sc)
86 {
87         struct ath_common *common = ath9k_hw_common(sc->sc_ah);
88         unsigned long flags;
89         enum ath9k_power_mode power_mode;
90
91         spin_lock_irqsave(&sc->sc_pm_lock, flags);
92         if (++sc->ps_usecount != 1)
93                 goto unlock;
94
95         power_mode = sc->sc_ah->power_mode;
96         ath9k_hw_setpower(sc->sc_ah, ATH9K_PM_AWAKE);
97
98         /*
99          * While the hardware is asleep, the cycle counters contain no
100          * useful data. Better clear them now so that they don't mess up
101          * survey data results.
102          */
103         if (power_mode != ATH9K_PM_AWAKE) {
104                 spin_lock(&common->cc_lock);
105                 ath_hw_cycle_counters_update(common);
106                 memset(&common->cc_survey, 0, sizeof(common->cc_survey));
107                 memset(&common->cc_ani, 0, sizeof(common->cc_ani));
108                 spin_unlock(&common->cc_lock);
109         }
110
111  unlock:
112         spin_unlock_irqrestore(&sc->sc_pm_lock, flags);
113 }
114
115 void ath9k_ps_restore(struct ath_softc *sc)
116 {
117         struct ath_common *common = ath9k_hw_common(sc->sc_ah);
118         enum ath9k_power_mode mode;
119         unsigned long flags;
120         bool reset;
121
122         spin_lock_irqsave(&sc->sc_pm_lock, flags);
123         if (--sc->ps_usecount != 0)
124                 goto unlock;
125
126         if (sc->ps_idle) {
127                 ath9k_hw_setrxabort(sc->sc_ah, 1);
128                 ath9k_hw_stopdmarecv(sc->sc_ah, &reset);
129                 mode = ATH9K_PM_FULL_SLEEP;
130         } else if (sc->ps_enabled &&
131                    !(sc->ps_flags & (PS_WAIT_FOR_BEACON |
132                                      PS_WAIT_FOR_CAB |
133                                      PS_WAIT_FOR_PSPOLL_DATA |
134                                      PS_WAIT_FOR_TX_ACK))) {
135                 mode = ATH9K_PM_NETWORK_SLEEP;
136                 if (ath9k_hw_btcoex_is_enabled(sc->sc_ah))
137                         ath9k_btcoex_stop_gen_timer(sc);
138         } else {
139                 goto unlock;
140         }
141
142         spin_lock(&common->cc_lock);
143         ath_hw_cycle_counters_update(common);
144         spin_unlock(&common->cc_lock);
145
146         ath9k_hw_setpower(sc->sc_ah, mode);
147
148  unlock:
149         spin_unlock_irqrestore(&sc->sc_pm_lock, flags);
150 }
151
152 static void __ath_cancel_work(struct ath_softc *sc)
153 {
154         cancel_work_sync(&sc->paprd_work);
155         cancel_work_sync(&sc->hw_check_work);
156         cancel_delayed_work_sync(&sc->tx_complete_work);
157         cancel_delayed_work_sync(&sc->hw_pll_work);
158
159 #ifdef CONFIG_ATH9K_BTCOEX_SUPPORT
160         if (ath9k_hw_mci_is_enabled(sc->sc_ah))
161                 cancel_work_sync(&sc->mci_work);
162 #endif
163 }
164
165 static void ath_cancel_work(struct ath_softc *sc)
166 {
167         __ath_cancel_work(sc);
168         cancel_work_sync(&sc->hw_reset_work);
169 }
170
171 static void ath_restart_work(struct ath_softc *sc)
172 {
173         ieee80211_queue_delayed_work(sc->hw, &sc->tx_complete_work, 0);
174
175         if (AR_SREV_9340(sc->sc_ah) || AR_SREV_9485(sc->sc_ah) ||
176             AR_SREV_9550(sc->sc_ah))
177                 ieee80211_queue_delayed_work(sc->hw, &sc->hw_pll_work,
178                                      msecs_to_jiffies(ATH_PLL_WORK_INTERVAL));
179
180         ath_start_rx_poll(sc, 3);
181         ath_start_ani(sc);
182 }
183
184 static bool ath_prepare_reset(struct ath_softc *sc, bool retry_tx, bool flush)
185 {
186         struct ath_hw *ah = sc->sc_ah;
187         bool ret = true;
188
189         ieee80211_stop_queues(sc->hw);
190
191         sc->hw_busy_count = 0;
192         ath_stop_ani(sc);
193         del_timer_sync(&sc->rx_poll_timer);
194
195         ath9k_debug_samp_bb_mac(sc);
196         ath9k_hw_disable_interrupts(ah);
197
198         if (!ath_stoprecv(sc))
199                 ret = false;
200
201         if (!ath_drain_all_txq(sc, retry_tx))
202                 ret = false;
203
204         if (!flush) {
205                 if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
206                         ath_rx_tasklet(sc, 1, true);
207                 ath_rx_tasklet(sc, 1, false);
208         } else {
209                 ath_flushrecv(sc);
210         }
211
212         return ret;
213 }
214
215 static bool ath_complete_reset(struct ath_softc *sc, bool start)
216 {
217         struct ath_hw *ah = sc->sc_ah;
218         struct ath_common *common = ath9k_hw_common(ah);
219         unsigned long flags;
220
221         if (ath_startrecv(sc) != 0) {
222                 ath_err(common, "Unable to restart recv logic\n");
223                 return false;
224         }
225
226         ath9k_cmn_update_txpow(ah, sc->curtxpow,
227                                sc->config.txpowlimit, &sc->curtxpow);
228
229         clear_bit(SC_OP_HW_RESET, &sc->sc_flags);
230         ath9k_hw_set_interrupts(ah);
231         ath9k_hw_enable_interrupts(ah);
232
233         if (!(sc->hw->conf.flags & IEEE80211_CONF_OFFCHANNEL) && start) {
234                 if (!test_bit(SC_OP_BEACONS, &sc->sc_flags))
235                         goto work;
236
237                 ath9k_set_beacon(sc);
238
239                 if (ah->opmode == NL80211_IFTYPE_STATION &&
240                     test_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags)) {
241                         spin_lock_irqsave(&sc->sc_pm_lock, flags);
242                         sc->ps_flags |= PS_BEACON_SYNC | PS_WAIT_FOR_BEACON;
243                         spin_unlock_irqrestore(&sc->sc_pm_lock, flags);
244                 }
245         work:
246                 ath_restart_work(sc);
247         }
248
249         if ((ah->caps.hw_caps & ATH9K_HW_CAP_ANT_DIV_COMB) && sc->ant_rx != 3)
250                 ath_ant_comb_update(sc);
251
252         ieee80211_wake_queues(sc->hw);
253
254         return true;
255 }
256
257 static int ath_reset_internal(struct ath_softc *sc, struct ath9k_channel *hchan,
258                               bool retry_tx)
259 {
260         struct ath_hw *ah = sc->sc_ah;
261         struct ath_common *common = ath9k_hw_common(ah);
262         struct ath9k_hw_cal_data *caldata = NULL;
263         bool fastcc = true;
264         bool flush = false;
265         int r;
266
267         __ath_cancel_work(sc);
268
269         spin_lock_bh(&sc->sc_pcu_lock);
270
271         if (!(sc->hw->conf.flags & IEEE80211_CONF_OFFCHANNEL)) {
272                 fastcc = false;
273                 caldata = &sc->caldata;
274         }
275
276         if (!hchan) {
277                 fastcc = false;
278                 flush = true;
279                 hchan = ah->curchan;
280         }
281
282         if (!ath_prepare_reset(sc, retry_tx, flush))
283                 fastcc = false;
284
285         ath_dbg(common, CONFIG, "Reset to %u MHz, HT40: %d fastcc: %d\n",
286                 hchan->channel, IS_CHAN_HT40(hchan), fastcc);
287
288         r = ath9k_hw_reset(ah, hchan, caldata, fastcc);
289         if (r) {
290                 ath_err(common,
291                         "Unable to reset channel, reset status %d\n", r);
292                 goto out;
293         }
294
295         if (!ath_complete_reset(sc, true))
296                 r = -EIO;
297
298 out:
299         spin_unlock_bh(&sc->sc_pcu_lock);
300         return r;
301 }
302
303
304 /*
305  * Set/change channels.  If the channel is really being changed, it's done
306  * by reseting the chip.  To accomplish this we must first cleanup any pending
307  * DMA, then restart stuff.
308 */
309 static int ath_set_channel(struct ath_softc *sc, struct ieee80211_hw *hw,
310                     struct ath9k_channel *hchan)
311 {
312         int r;
313
314         if (test_bit(SC_OP_INVALID, &sc->sc_flags))
315                 return -EIO;
316
317         r = ath_reset_internal(sc, hchan, false);
318
319         return r;
320 }
321
322 static void ath_node_attach(struct ath_softc *sc, struct ieee80211_sta *sta,
323                             struct ieee80211_vif *vif)
324 {
325         struct ath_node *an;
326         u8 density;
327         an = (struct ath_node *)sta->drv_priv;
328
329 #ifdef CONFIG_ATH9K_DEBUGFS
330         spin_lock(&sc->nodes_lock);
331         list_add(&an->list, &sc->nodes);
332         spin_unlock(&sc->nodes_lock);
333 #endif
334         an->sta = sta;
335         an->vif = vif;
336
337         if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT) {
338                 ath_tx_node_init(sc, an);
339                 an->maxampdu = 1 << (IEEE80211_HT_MAX_AMPDU_FACTOR +
340                                      sta->ht_cap.ampdu_factor);
341                 density = ath9k_parse_mpdudensity(sta->ht_cap.ampdu_density);
342                 an->mpdudensity = density;
343         }
344 }
345
346 static void ath_node_detach(struct ath_softc *sc, struct ieee80211_sta *sta)
347 {
348         struct ath_node *an = (struct ath_node *)sta->drv_priv;
349
350 #ifdef CONFIG_ATH9K_DEBUGFS
351         spin_lock(&sc->nodes_lock);
352         list_del(&an->list);
353         spin_unlock(&sc->nodes_lock);
354         an->sta = NULL;
355 #endif
356
357         if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT)
358                 ath_tx_node_cleanup(sc, an);
359 }
360
361 void ath9k_tasklet(unsigned long data)
362 {
363         struct ath_softc *sc = (struct ath_softc *)data;
364         struct ath_hw *ah = sc->sc_ah;
365         struct ath_common *common = ath9k_hw_common(ah);
366         enum ath_reset_type type;
367         unsigned long flags;
368         u32 status = sc->intrstatus;
369         u32 rxmask;
370
371         ath9k_ps_wakeup(sc);
372         spin_lock(&sc->sc_pcu_lock);
373
374         if ((status & ATH9K_INT_FATAL) ||
375             (status & ATH9K_INT_BB_WATCHDOG)) {
376
377                 if (status & ATH9K_INT_FATAL)
378                         type = RESET_TYPE_FATAL_INT;
379                 else
380                         type = RESET_TYPE_BB_WATCHDOG;
381
382                 ath9k_queue_reset(sc, type);
383                 goto out;
384         }
385
386         spin_lock_irqsave(&sc->sc_pm_lock, flags);
387         if ((status & ATH9K_INT_TSFOOR) && sc->ps_enabled) {
388                 /*
389                  * TSF sync does not look correct; remain awake to sync with
390                  * the next Beacon.
391                  */
392                 ath_dbg(common, PS, "TSFOOR - Sync with next Beacon\n");
393                 sc->ps_flags |= PS_WAIT_FOR_BEACON | PS_BEACON_SYNC;
394         }
395         spin_unlock_irqrestore(&sc->sc_pm_lock, flags);
396
397         if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
398                 rxmask = (ATH9K_INT_RXHP | ATH9K_INT_RXLP | ATH9K_INT_RXEOL |
399                           ATH9K_INT_RXORN);
400         else
401                 rxmask = (ATH9K_INT_RX | ATH9K_INT_RXEOL | ATH9K_INT_RXORN);
402
403         if (status & rxmask) {
404                 /* Check for high priority Rx first */
405                 if ((ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) &&
406                     (status & ATH9K_INT_RXHP))
407                         ath_rx_tasklet(sc, 0, true);
408
409                 ath_rx_tasklet(sc, 0, false);
410         }
411
412         if (status & ATH9K_INT_TX) {
413                 if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
414                         ath_tx_edma_tasklet(sc);
415                 else
416                         ath_tx_tasklet(sc);
417         }
418
419         ath9k_btcoex_handle_interrupt(sc, status);
420
421 out:
422         /* re-enable hardware interrupt */
423         ath9k_hw_enable_interrupts(ah);
424
425         spin_unlock(&sc->sc_pcu_lock);
426         ath9k_ps_restore(sc);
427 }
428
429 irqreturn_t ath_isr(int irq, void *dev)
430 {
431 #define SCHED_INTR (                            \
432                 ATH9K_INT_FATAL |               \
433                 ATH9K_INT_BB_WATCHDOG |         \
434                 ATH9K_INT_RXORN |               \
435                 ATH9K_INT_RXEOL |               \
436                 ATH9K_INT_RX |                  \
437                 ATH9K_INT_RXLP |                \
438                 ATH9K_INT_RXHP |                \
439                 ATH9K_INT_TX |                  \
440                 ATH9K_INT_BMISS |               \
441                 ATH9K_INT_CST |                 \
442                 ATH9K_INT_TSFOOR |              \
443                 ATH9K_INT_GENTIMER |            \
444                 ATH9K_INT_MCI)
445
446         struct ath_softc *sc = dev;
447         struct ath_hw *ah = sc->sc_ah;
448         struct ath_common *common = ath9k_hw_common(ah);
449         enum ath9k_int status;
450         bool sched = false;
451
452         /*
453          * The hardware is not ready/present, don't
454          * touch anything. Note this can happen early
455          * on if the IRQ is shared.
456          */
457         if (test_bit(SC_OP_INVALID, &sc->sc_flags))
458                 return IRQ_NONE;
459
460         /* shared irq, not for us */
461
462         if (!ath9k_hw_intrpend(ah))
463                 return IRQ_NONE;
464
465         if(test_bit(SC_OP_HW_RESET, &sc->sc_flags))
466                 return IRQ_HANDLED;
467
468         /*
469          * Figure out the reason(s) for the interrupt.  Note
470          * that the hal returns a pseudo-ISR that may include
471          * bits we haven't explicitly enabled so we mask the
472          * value to insure we only process bits we requested.
473          */
474         ath9k_hw_getisr(ah, &status);   /* NB: clears ISR too */
475         status &= ah->imask;    /* discard unasked-for bits */
476
477         /*
478          * If there are no status bits set, then this interrupt was not
479          * for me (should have been caught above).
480          */
481         if (!status)
482                 return IRQ_NONE;
483
484         /* Cache the status */
485         sc->intrstatus = status;
486
487         if (status & SCHED_INTR)
488                 sched = true;
489
490 #ifdef CONFIG_PM_SLEEP
491         if (status & ATH9K_INT_BMISS) {
492                 if (atomic_read(&sc->wow_sleep_proc_intr) == 0) {
493                         ath_dbg(common, ANY, "during WoW we got a BMISS\n");
494                         atomic_inc(&sc->wow_got_bmiss_intr);
495                         atomic_dec(&sc->wow_sleep_proc_intr);
496                 }
497         ath_dbg(common, INTERRUPT, "beacon miss interrupt\n");
498         }
499 #endif
500
501         /*
502          * If a FATAL or RXORN interrupt is received, we have to reset the
503          * chip immediately.
504          */
505         if ((status & ATH9K_INT_FATAL) || ((status & ATH9K_INT_RXORN) &&
506             !(ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)))
507                 goto chip_reset;
508
509         if ((ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) &&
510             (status & ATH9K_INT_BB_WATCHDOG)) {
511
512                 spin_lock(&common->cc_lock);
513                 ath_hw_cycle_counters_update(common);
514                 ar9003_hw_bb_watchdog_dbg_info(ah);
515                 spin_unlock(&common->cc_lock);
516
517                 goto chip_reset;
518         }
519
520         if (status & ATH9K_INT_SWBA)
521                 tasklet_schedule(&sc->bcon_tasklet);
522
523         if (status & ATH9K_INT_TXURN)
524                 ath9k_hw_updatetxtriglevel(ah, true);
525
526         if (status & ATH9K_INT_RXEOL) {
527                 ah->imask &= ~(ATH9K_INT_RXEOL | ATH9K_INT_RXORN);
528                 ath9k_hw_set_interrupts(ah);
529         }
530
531         if (!(ah->caps.hw_caps & ATH9K_HW_CAP_AUTOSLEEP))
532                 if (status & ATH9K_INT_TIM_TIMER) {
533                         if (ATH_DBG_WARN_ON_ONCE(sc->ps_idle))
534                                 goto chip_reset;
535                         /* Clear RxAbort bit so that we can
536                          * receive frames */
537                         ath9k_setpower(sc, ATH9K_PM_AWAKE);
538                         spin_lock(&sc->sc_pm_lock);
539                         ath9k_hw_setrxabort(sc->sc_ah, 0);
540                         sc->ps_flags |= PS_WAIT_FOR_BEACON;
541                         spin_unlock(&sc->sc_pm_lock);
542                 }
543
544 chip_reset:
545
546         ath_debug_stat_interrupt(sc, status);
547
548         if (sched) {
549                 /* turn off every interrupt */
550                 ath9k_hw_disable_interrupts(ah);
551                 tasklet_schedule(&sc->intr_tq);
552         }
553
554         return IRQ_HANDLED;
555
556 #undef SCHED_INTR
557 }
558
559 static int ath_reset(struct ath_softc *sc, bool retry_tx)
560 {
561         int r;
562
563         ath9k_ps_wakeup(sc);
564
565         r = ath_reset_internal(sc, NULL, retry_tx);
566
567         if (retry_tx) {
568                 int i;
569                 for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) {
570                         if (ATH_TXQ_SETUP(sc, i)) {
571                                 spin_lock_bh(&sc->tx.txq[i].axq_lock);
572                                 ath_txq_schedule(sc, &sc->tx.txq[i]);
573                                 spin_unlock_bh(&sc->tx.txq[i].axq_lock);
574                         }
575                 }
576         }
577
578         ath9k_ps_restore(sc);
579
580         return r;
581 }
582
583 void ath9k_queue_reset(struct ath_softc *sc, enum ath_reset_type type)
584 {
585 #ifdef CONFIG_ATH9K_DEBUGFS
586         RESET_STAT_INC(sc, type);
587 #endif
588         set_bit(SC_OP_HW_RESET, &sc->sc_flags);
589         ieee80211_queue_work(sc->hw, &sc->hw_reset_work);
590 }
591
592 void ath_reset_work(struct work_struct *work)
593 {
594         struct ath_softc *sc = container_of(work, struct ath_softc, hw_reset_work);
595
596         ath_reset(sc, true);
597 }
598
599 /**********************/
600 /* mac80211 callbacks */
601 /**********************/
602
603 static int ath9k_start(struct ieee80211_hw *hw)
604 {
605         struct ath_softc *sc = hw->priv;
606         struct ath_hw *ah = sc->sc_ah;
607         struct ath_common *common = ath9k_hw_common(ah);
608         struct ieee80211_channel *curchan = hw->conf.channel;
609         struct ath9k_channel *init_channel;
610         int r;
611
612         ath_dbg(common, CONFIG,
613                 "Starting driver with initial channel: %d MHz\n",
614                 curchan->center_freq);
615
616         ath9k_ps_wakeup(sc);
617         mutex_lock(&sc->mutex);
618
619         init_channel = ath9k_cmn_get_curchannel(hw, ah);
620
621         /* Reset SERDES registers */
622         ath9k_hw_configpcipowersave(ah, false);
623
624         /*
625          * The basic interface to setting the hardware in a good
626          * state is ``reset''.  On return the hardware is known to
627          * be powered up and with interrupts disabled.  This must
628          * be followed by initialization of the appropriate bits
629          * and then setup of the interrupt mask.
630          */
631         spin_lock_bh(&sc->sc_pcu_lock);
632
633         atomic_set(&ah->intr_ref_cnt, -1);
634
635         r = ath9k_hw_reset(ah, init_channel, ah->caldata, false);
636         if (r) {
637                 ath_err(common,
638                         "Unable to reset hardware; reset status %d (freq %u MHz)\n",
639                         r, curchan->center_freq);
640                 spin_unlock_bh(&sc->sc_pcu_lock);
641                 goto mutex_unlock;
642         }
643
644         /* Setup our intr mask. */
645         ah->imask = ATH9K_INT_TX | ATH9K_INT_RXEOL |
646                     ATH9K_INT_RXORN | ATH9K_INT_FATAL |
647                     ATH9K_INT_GLOBAL;
648
649         if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
650                 ah->imask |= ATH9K_INT_RXHP |
651                              ATH9K_INT_RXLP |
652                              ATH9K_INT_BB_WATCHDOG;
653         else
654                 ah->imask |= ATH9K_INT_RX;
655
656         ah->imask |= ATH9K_INT_GTT;
657
658         if (ah->caps.hw_caps & ATH9K_HW_CAP_HT)
659                 ah->imask |= ATH9K_INT_CST;
660
661         ath_mci_enable(sc);
662
663         clear_bit(SC_OP_INVALID, &sc->sc_flags);
664         sc->sc_ah->is_monitoring = false;
665
666         if (!ath_complete_reset(sc, false)) {
667                 r = -EIO;
668                 spin_unlock_bh(&sc->sc_pcu_lock);
669                 goto mutex_unlock;
670         }
671
672         if (ah->led_pin >= 0) {
673                 ath9k_hw_cfg_output(ah, ah->led_pin,
674                                     AR_GPIO_OUTPUT_MUX_AS_OUTPUT);
675                 ath9k_hw_set_gpio(ah, ah->led_pin, 0);
676         }
677
678         /*
679          * Reset key cache to sane defaults (all entries cleared) instead of
680          * semi-random values after suspend/resume.
681          */
682         ath9k_cmn_init_crypto(sc->sc_ah);
683
684         spin_unlock_bh(&sc->sc_pcu_lock);
685
686         if (ah->caps.pcie_lcr_extsync_en && common->bus_ops->extn_synch_en)
687                 common->bus_ops->extn_synch_en(common);
688
689 mutex_unlock:
690         mutex_unlock(&sc->mutex);
691
692         ath9k_ps_restore(sc);
693
694         return r;
695 }
696
697 static void ath9k_tx(struct ieee80211_hw *hw,
698                      struct ieee80211_tx_control *control,
699                      struct sk_buff *skb)
700 {
701         struct ath_softc *sc = hw->priv;
702         struct ath_common *common = ath9k_hw_common(sc->sc_ah);
703         struct ath_tx_control txctl;
704         struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
705         unsigned long flags;
706
707         if (sc->ps_enabled) {
708                 /*
709                  * mac80211 does not set PM field for normal data frames, so we
710                  * need to update that based on the current PS mode.
711                  */
712                 if (ieee80211_is_data(hdr->frame_control) &&
713                     !ieee80211_is_nullfunc(hdr->frame_control) &&
714                     !ieee80211_has_pm(hdr->frame_control)) {
715                         ath_dbg(common, PS,
716                                 "Add PM=1 for a TX frame while in PS mode\n");
717                         hdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_PM);
718                 }
719         }
720
721         if (unlikely(sc->sc_ah->power_mode == ATH9K_PM_NETWORK_SLEEP)) {
722                 /*
723                  * We are using PS-Poll and mac80211 can request TX while in
724                  * power save mode. Need to wake up hardware for the TX to be
725                  * completed and if needed, also for RX of buffered frames.
726                  */
727                 ath9k_ps_wakeup(sc);
728                 spin_lock_irqsave(&sc->sc_pm_lock, flags);
729                 if (!(sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_AUTOSLEEP))
730                         ath9k_hw_setrxabort(sc->sc_ah, 0);
731                 if (ieee80211_is_pspoll(hdr->frame_control)) {
732                         ath_dbg(common, PS,
733                                 "Sending PS-Poll to pick a buffered frame\n");
734                         sc->ps_flags |= PS_WAIT_FOR_PSPOLL_DATA;
735                 } else {
736                         ath_dbg(common, PS, "Wake up to complete TX\n");
737                         sc->ps_flags |= PS_WAIT_FOR_TX_ACK;
738                 }
739                 /*
740                  * The actual restore operation will happen only after
741                  * the ps_flags bit is cleared. We are just dropping
742                  * the ps_usecount here.
743                  */
744                 spin_unlock_irqrestore(&sc->sc_pm_lock, flags);
745                 ath9k_ps_restore(sc);
746         }
747
748         /*
749          * Cannot tx while the hardware is in full sleep, it first needs a full
750          * chip reset to recover from that
751          */
752         if (unlikely(sc->sc_ah->power_mode == ATH9K_PM_FULL_SLEEP)) {
753                 ath_err(common, "TX while HW is in FULL_SLEEP mode\n");
754                 goto exit;
755         }
756
757         memset(&txctl, 0, sizeof(struct ath_tx_control));
758         txctl.txq = sc->tx.txq_map[skb_get_queue_mapping(skb)];
759         txctl.sta = control->sta;
760
761         ath_dbg(common, XMIT, "transmitting packet, skb: %p\n", skb);
762
763         if (ath_tx_start(hw, skb, &txctl) != 0) {
764                 ath_dbg(common, XMIT, "TX failed\n");
765                 TX_STAT_INC(txctl.txq->axq_qnum, txfailed);
766                 goto exit;
767         }
768
769         return;
770 exit:
771         dev_kfree_skb_any(skb);
772 }
773
774 static void ath9k_stop(struct ieee80211_hw *hw)
775 {
776         struct ath_softc *sc = hw->priv;
777         struct ath_hw *ah = sc->sc_ah;
778         struct ath_common *common = ath9k_hw_common(ah);
779         bool prev_idle;
780
781         mutex_lock(&sc->mutex);
782
783         ath_cancel_work(sc);
784         del_timer_sync(&sc->rx_poll_timer);
785
786         if (test_bit(SC_OP_INVALID, &sc->sc_flags)) {
787                 ath_dbg(common, ANY, "Device not present\n");
788                 mutex_unlock(&sc->mutex);
789                 return;
790         }
791
792         /* Ensure HW is awake when we try to shut it down. */
793         ath9k_ps_wakeup(sc);
794
795         spin_lock_bh(&sc->sc_pcu_lock);
796
797         /* prevent tasklets to enable interrupts once we disable them */
798         ah->imask &= ~ATH9K_INT_GLOBAL;
799
800         /* make sure h/w will not generate any interrupt
801          * before setting the invalid flag. */
802         ath9k_hw_disable_interrupts(ah);
803
804         spin_unlock_bh(&sc->sc_pcu_lock);
805
806         /* we can now sync irq and kill any running tasklets, since we already
807          * disabled interrupts and not holding a spin lock */
808         synchronize_irq(sc->irq);
809         tasklet_kill(&sc->intr_tq);
810         tasklet_kill(&sc->bcon_tasklet);
811
812         prev_idle = sc->ps_idle;
813         sc->ps_idle = true;
814
815         spin_lock_bh(&sc->sc_pcu_lock);
816
817         if (ah->led_pin >= 0) {
818                 ath9k_hw_set_gpio(ah, ah->led_pin, 1);
819                 ath9k_hw_cfg_gpio_input(ah, ah->led_pin);
820         }
821
822         ath_prepare_reset(sc, false, true);
823
824         if (sc->rx.frag) {
825                 dev_kfree_skb_any(sc->rx.frag);
826                 sc->rx.frag = NULL;
827         }
828
829         if (!ah->curchan)
830                 ah->curchan = ath9k_cmn_get_curchannel(hw, ah);
831
832         ath9k_hw_reset(ah, ah->curchan, ah->caldata, false);
833         ath9k_hw_phy_disable(ah);
834
835         ath9k_hw_configpcipowersave(ah, true);
836
837         spin_unlock_bh(&sc->sc_pcu_lock);
838
839         ath9k_ps_restore(sc);
840
841         set_bit(SC_OP_INVALID, &sc->sc_flags);
842         sc->ps_idle = prev_idle;
843
844         mutex_unlock(&sc->mutex);
845
846         ath_dbg(common, CONFIG, "Driver halt\n");
847 }
848
849 bool ath9k_uses_beacons(int type)
850 {
851         switch (type) {
852         case NL80211_IFTYPE_AP:
853         case NL80211_IFTYPE_ADHOC:
854         case NL80211_IFTYPE_MESH_POINT:
855                 return true;
856         default:
857                 return false;
858         }
859 }
860
861 static void ath9k_vif_iter(void *data, u8 *mac, struct ieee80211_vif *vif)
862 {
863         struct ath9k_vif_iter_data *iter_data = data;
864         int i;
865
866         if (iter_data->hw_macaddr)
867                 for (i = 0; i < ETH_ALEN; i++)
868                         iter_data->mask[i] &=
869                                 ~(iter_data->hw_macaddr[i] ^ mac[i]);
870
871         switch (vif->type) {
872         case NL80211_IFTYPE_AP:
873                 iter_data->naps++;
874                 break;
875         case NL80211_IFTYPE_STATION:
876                 iter_data->nstations++;
877                 break;
878         case NL80211_IFTYPE_ADHOC:
879                 iter_data->nadhocs++;
880                 break;
881         case NL80211_IFTYPE_MESH_POINT:
882                 iter_data->nmeshes++;
883                 break;
884         case NL80211_IFTYPE_WDS:
885                 iter_data->nwds++;
886                 break;
887         default:
888                 break;
889         }
890 }
891
892 static void ath9k_sta_vif_iter(void *data, u8 *mac, struct ieee80211_vif *vif)
893 {
894         struct ath_softc *sc = data;
895         struct ath_vif *avp = (void *)vif->drv_priv;
896
897         if (vif->type != NL80211_IFTYPE_STATION)
898                 return;
899
900         if (avp->primary_sta_vif)
901                 ath9k_set_assoc_state(sc, vif);
902 }
903
904 /* Called with sc->mutex held. */
905 void ath9k_calculate_iter_data(struct ieee80211_hw *hw,
906                                struct ieee80211_vif *vif,
907                                struct ath9k_vif_iter_data *iter_data)
908 {
909         struct ath_softc *sc = hw->priv;
910         struct ath_hw *ah = sc->sc_ah;
911         struct ath_common *common = ath9k_hw_common(ah);
912
913         /*
914          * Use the hardware MAC address as reference, the hardware uses it
915          * together with the BSSID mask when matching addresses.
916          */
917         memset(iter_data, 0, sizeof(*iter_data));
918         iter_data->hw_macaddr = common->macaddr;
919         memset(&iter_data->mask, 0xff, ETH_ALEN);
920
921         if (vif)
922                 ath9k_vif_iter(iter_data, vif->addr, vif);
923
924         /* Get list of all active MAC addresses */
925         ieee80211_iterate_active_interfaces_atomic(sc->hw, ath9k_vif_iter,
926                                                    iter_data);
927 }
928
929 /* Called with sc->mutex held. */
930 static void ath9k_calculate_summary_state(struct ieee80211_hw *hw,
931                                           struct ieee80211_vif *vif)
932 {
933         struct ath_softc *sc = hw->priv;
934         struct ath_hw *ah = sc->sc_ah;
935         struct ath_common *common = ath9k_hw_common(ah);
936         struct ath9k_vif_iter_data iter_data;
937         enum nl80211_iftype old_opmode = ah->opmode;
938
939         ath9k_calculate_iter_data(hw, vif, &iter_data);
940
941         memcpy(common->bssidmask, iter_data.mask, ETH_ALEN);
942         ath_hw_setbssidmask(common);
943
944         if (iter_data.naps > 0) {
945                 ath9k_hw_set_tsfadjust(ah, true);
946                 ah->opmode = NL80211_IFTYPE_AP;
947         } else {
948                 ath9k_hw_set_tsfadjust(ah, false);
949
950                 if (iter_data.nmeshes)
951                         ah->opmode = NL80211_IFTYPE_MESH_POINT;
952                 else if (iter_data.nwds)
953                         ah->opmode = NL80211_IFTYPE_AP;
954                 else if (iter_data.nadhocs)
955                         ah->opmode = NL80211_IFTYPE_ADHOC;
956                 else
957                         ah->opmode = NL80211_IFTYPE_STATION;
958         }
959
960         ath9k_hw_setopmode(ah);
961
962         if ((iter_data.nstations + iter_data.nadhocs + iter_data.nmeshes) > 0)
963                 ah->imask |= ATH9K_INT_TSFOOR;
964         else
965                 ah->imask &= ~ATH9K_INT_TSFOOR;
966
967         ath9k_hw_set_interrupts(ah);
968
969         /*
970          * If we are changing the opmode to STATION,
971          * a beacon sync needs to be done.
972          */
973         if (ah->opmode == NL80211_IFTYPE_STATION &&
974             old_opmode == NL80211_IFTYPE_AP &&
975             test_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags)) {
976                 ieee80211_iterate_active_interfaces_atomic(sc->hw,
977                                                    ath9k_sta_vif_iter, sc);
978         }
979 }
980
981 static int ath9k_add_interface(struct ieee80211_hw *hw,
982                                struct ieee80211_vif *vif)
983 {
984         struct ath_softc *sc = hw->priv;
985         struct ath_hw *ah = sc->sc_ah;
986         struct ath_common *common = ath9k_hw_common(ah);
987         int ret = 0;
988
989         ath9k_ps_wakeup(sc);
990         mutex_lock(&sc->mutex);
991
992         switch (vif->type) {
993         case NL80211_IFTYPE_STATION:
994         case NL80211_IFTYPE_WDS:
995         case NL80211_IFTYPE_ADHOC:
996         case NL80211_IFTYPE_AP:
997         case NL80211_IFTYPE_MESH_POINT:
998                 break;
999         default:
1000                 ath_err(common, "Interface type %d not yet supported\n",
1001                         vif->type);
1002                 ret = -EOPNOTSUPP;
1003                 goto out;
1004         }
1005
1006         if (ath9k_uses_beacons(vif->type)) {
1007                 if (sc->nbcnvifs >= ATH_BCBUF) {
1008                         ath_err(common, "Not enough beacon buffers when adding"
1009                                 " new interface of type: %i\n",
1010                                 vif->type);
1011                         ret = -ENOBUFS;
1012                         goto out;
1013                 }
1014         }
1015
1016         ath_dbg(common, CONFIG, "Attach a VIF of type: %d\n", vif->type);
1017
1018         sc->nvifs++;
1019
1020         ath9k_calculate_summary_state(hw, vif);
1021         if (ath9k_uses_beacons(vif->type))
1022                 ath9k_beacon_assign_slot(sc, vif);
1023
1024 out:
1025         mutex_unlock(&sc->mutex);
1026         ath9k_ps_restore(sc);
1027         return ret;
1028 }
1029
1030 static int ath9k_change_interface(struct ieee80211_hw *hw,
1031                                   struct ieee80211_vif *vif,
1032                                   enum nl80211_iftype new_type,
1033                                   bool p2p)
1034 {
1035         struct ath_softc *sc = hw->priv;
1036         struct ath_common *common = ath9k_hw_common(sc->sc_ah);
1037         int ret = 0;
1038
1039         ath_dbg(common, CONFIG, "Change Interface\n");
1040
1041         mutex_lock(&sc->mutex);
1042         ath9k_ps_wakeup(sc);
1043
1044         if (ath9k_uses_beacons(new_type) &&
1045             !ath9k_uses_beacons(vif->type)) {
1046                 if (sc->nbcnvifs >= ATH_BCBUF) {
1047                         ath_err(common, "No beacon slot available\n");
1048                         ret = -ENOBUFS;
1049                         goto out;
1050                 }
1051         }
1052
1053         if (ath9k_uses_beacons(vif->type))
1054                 ath9k_beacon_remove_slot(sc, vif);
1055
1056         vif->type = new_type;
1057         vif->p2p = p2p;
1058
1059         ath9k_calculate_summary_state(hw, vif);
1060         if (ath9k_uses_beacons(vif->type))
1061                 ath9k_beacon_assign_slot(sc, vif);
1062
1063 out:
1064         ath9k_ps_restore(sc);
1065         mutex_unlock(&sc->mutex);
1066         return ret;
1067 }
1068
1069 static void ath9k_remove_interface(struct ieee80211_hw *hw,
1070                                    struct ieee80211_vif *vif)
1071 {
1072         struct ath_softc *sc = hw->priv;
1073         struct ath_common *common = ath9k_hw_common(sc->sc_ah);
1074
1075         ath_dbg(common, CONFIG, "Detach Interface\n");
1076
1077         ath9k_ps_wakeup(sc);
1078         mutex_lock(&sc->mutex);
1079
1080         sc->nvifs--;
1081
1082         if (ath9k_uses_beacons(vif->type))
1083                 ath9k_beacon_remove_slot(sc, vif);
1084
1085         ath9k_calculate_summary_state(hw, NULL);
1086
1087         mutex_unlock(&sc->mutex);
1088         ath9k_ps_restore(sc);
1089 }
1090
1091 static void ath9k_enable_ps(struct ath_softc *sc)
1092 {
1093         struct ath_hw *ah = sc->sc_ah;
1094         struct ath_common *common = ath9k_hw_common(ah);
1095
1096         sc->ps_enabled = true;
1097         if (!(ah->caps.hw_caps & ATH9K_HW_CAP_AUTOSLEEP)) {
1098                 if ((ah->imask & ATH9K_INT_TIM_TIMER) == 0) {
1099                         ah->imask |= ATH9K_INT_TIM_TIMER;
1100                         ath9k_hw_set_interrupts(ah);
1101                 }
1102                 ath9k_hw_setrxabort(ah, 1);
1103         }
1104         ath_dbg(common, PS, "PowerSave enabled\n");
1105 }
1106
1107 static void ath9k_disable_ps(struct ath_softc *sc)
1108 {
1109         struct ath_hw *ah = sc->sc_ah;
1110         struct ath_common *common = ath9k_hw_common(ah);
1111
1112         sc->ps_enabled = false;
1113         ath9k_hw_setpower(ah, ATH9K_PM_AWAKE);
1114         if (!(ah->caps.hw_caps & ATH9K_HW_CAP_AUTOSLEEP)) {
1115                 ath9k_hw_setrxabort(ah, 0);
1116                 sc->ps_flags &= ~(PS_WAIT_FOR_BEACON |
1117                                   PS_WAIT_FOR_CAB |
1118                                   PS_WAIT_FOR_PSPOLL_DATA |
1119                                   PS_WAIT_FOR_TX_ACK);
1120                 if (ah->imask & ATH9K_INT_TIM_TIMER) {
1121                         ah->imask &= ~ATH9K_INT_TIM_TIMER;
1122                         ath9k_hw_set_interrupts(ah);
1123                 }
1124         }
1125         ath_dbg(common, PS, "PowerSave disabled\n");
1126 }
1127
1128 static int ath9k_config(struct ieee80211_hw *hw, u32 changed)
1129 {
1130         struct ath_softc *sc = hw->priv;
1131         struct ath_hw *ah = sc->sc_ah;
1132         struct ath_common *common = ath9k_hw_common(ah);
1133         struct ieee80211_conf *conf = &hw->conf;
1134         bool reset_channel = false;
1135
1136         ath9k_ps_wakeup(sc);
1137         mutex_lock(&sc->mutex);
1138
1139         if (changed & IEEE80211_CONF_CHANGE_IDLE) {
1140                 sc->ps_idle = !!(conf->flags & IEEE80211_CONF_IDLE);
1141                 if (sc->ps_idle) {
1142                         ath_cancel_work(sc);
1143                         ath9k_stop_btcoex(sc);
1144                 } else {
1145                         ath9k_start_btcoex(sc);
1146                         /*
1147                          * The chip needs a reset to properly wake up from
1148                          * full sleep
1149                          */
1150                         reset_channel = ah->chip_fullsleep;
1151                 }
1152         }
1153
1154         /*
1155          * We just prepare to enable PS. We have to wait until our AP has
1156          * ACK'd our null data frame to disable RX otherwise we'll ignore
1157          * those ACKs and end up retransmitting the same null data frames.
1158          * IEEE80211_CONF_CHANGE_PS is only passed by mac80211 for STA mode.
1159          */
1160         if (changed & IEEE80211_CONF_CHANGE_PS) {
1161                 unsigned long flags;
1162                 spin_lock_irqsave(&sc->sc_pm_lock, flags);
1163                 if (conf->flags & IEEE80211_CONF_PS)
1164                         ath9k_enable_ps(sc);
1165                 else
1166                         ath9k_disable_ps(sc);
1167                 spin_unlock_irqrestore(&sc->sc_pm_lock, flags);
1168         }
1169
1170         if (changed & IEEE80211_CONF_CHANGE_MONITOR) {
1171                 if (conf->flags & IEEE80211_CONF_MONITOR) {
1172                         ath_dbg(common, CONFIG, "Monitor mode is enabled\n");
1173                         sc->sc_ah->is_monitoring = true;
1174                 } else {
1175                         ath_dbg(common, CONFIG, "Monitor mode is disabled\n");
1176                         sc->sc_ah->is_monitoring = false;
1177                 }
1178         }
1179
1180         if ((changed & IEEE80211_CONF_CHANGE_CHANNEL) || reset_channel) {
1181                 struct ieee80211_channel *curchan = hw->conf.channel;
1182                 int pos = curchan->hw_value;
1183                 int old_pos = -1;
1184                 unsigned long flags;
1185
1186                 if (ah->curchan)
1187                         old_pos = ah->curchan - &ah->channels[0];
1188
1189                 ath_dbg(common, CONFIG, "Set channel: %d MHz type: %d\n",
1190                         curchan->center_freq, conf->channel_type);
1191
1192                 /* update survey stats for the old channel before switching */
1193                 spin_lock_irqsave(&common->cc_lock, flags);
1194                 ath_update_survey_stats(sc);
1195                 spin_unlock_irqrestore(&common->cc_lock, flags);
1196
1197                 /*
1198                  * Preserve the current channel values, before updating
1199                  * the same channel
1200                  */
1201                 if (ah->curchan && (old_pos == pos))
1202                         ath9k_hw_getnf(ah, ah->curchan);
1203
1204                 ath9k_cmn_update_ichannel(&sc->sc_ah->channels[pos],
1205                                           curchan, conf->channel_type);
1206
1207                 /*
1208                  * If the operating channel changes, change the survey in-use flags
1209                  * along with it.
1210                  * Reset the survey data for the new channel, unless we're switching
1211                  * back to the operating channel from an off-channel operation.
1212                  */
1213                 if (!(hw->conf.flags & IEEE80211_CONF_OFFCHANNEL) &&
1214                     sc->cur_survey != &sc->survey[pos]) {
1215
1216                         if (sc->cur_survey)
1217                                 sc->cur_survey->filled &= ~SURVEY_INFO_IN_USE;
1218
1219                         sc->cur_survey = &sc->survey[pos];
1220
1221                         memset(sc->cur_survey, 0, sizeof(struct survey_info));
1222                         sc->cur_survey->filled |= SURVEY_INFO_IN_USE;
1223                 } else if (!(sc->survey[pos].filled & SURVEY_INFO_IN_USE)) {
1224                         memset(&sc->survey[pos], 0, sizeof(struct survey_info));
1225                 }
1226
1227                 if (ath_set_channel(sc, hw, &sc->sc_ah->channels[pos]) < 0) {
1228                         ath_err(common, "Unable to set channel\n");
1229                         mutex_unlock(&sc->mutex);
1230                         ath9k_ps_restore(sc);
1231                         return -EINVAL;
1232                 }
1233
1234                 /*
1235                  * The most recent snapshot of channel->noisefloor for the old
1236                  * channel is only available after the hardware reset. Copy it to
1237                  * the survey stats now.
1238                  */
1239                 if (old_pos >= 0)
1240                         ath_update_survey_nf(sc, old_pos);
1241         }
1242
1243         if (changed & IEEE80211_CONF_CHANGE_POWER) {
1244                 ath_dbg(common, CONFIG, "Set power: %d\n", conf->power_level);
1245                 sc->config.txpowlimit = 2 * conf->power_level;
1246                 ath9k_cmn_update_txpow(ah, sc->curtxpow,
1247                                        sc->config.txpowlimit, &sc->curtxpow);
1248         }
1249
1250         mutex_unlock(&sc->mutex);
1251         ath9k_ps_restore(sc);
1252
1253         return 0;
1254 }
1255
1256 #define SUPPORTED_FILTERS                       \
1257         (FIF_PROMISC_IN_BSS |                   \
1258         FIF_ALLMULTI |                          \
1259         FIF_CONTROL |                           \
1260         FIF_PSPOLL |                            \
1261         FIF_OTHER_BSS |                         \
1262         FIF_BCN_PRBRESP_PROMISC |               \
1263         FIF_PROBE_REQ |                         \
1264         FIF_FCSFAIL)
1265
1266 /* FIXME: sc->sc_full_reset ? */
1267 static void ath9k_configure_filter(struct ieee80211_hw *hw,
1268                                    unsigned int changed_flags,
1269                                    unsigned int *total_flags,
1270                                    u64 multicast)
1271 {
1272         struct ath_softc *sc = hw->priv;
1273         u32 rfilt;
1274
1275         changed_flags &= SUPPORTED_FILTERS;
1276         *total_flags &= SUPPORTED_FILTERS;
1277
1278         sc->rx.rxfilter = *total_flags;
1279         ath9k_ps_wakeup(sc);
1280         rfilt = ath_calcrxfilter(sc);
1281         ath9k_hw_setrxfilter(sc->sc_ah, rfilt);
1282         ath9k_ps_restore(sc);
1283
1284         ath_dbg(ath9k_hw_common(sc->sc_ah), CONFIG, "Set HW RX filter: 0x%x\n",
1285                 rfilt);
1286 }
1287
1288 static int ath9k_sta_add(struct ieee80211_hw *hw,
1289                          struct ieee80211_vif *vif,
1290                          struct ieee80211_sta *sta)
1291 {
1292         struct ath_softc *sc = hw->priv;
1293         struct ath_common *common = ath9k_hw_common(sc->sc_ah);
1294         struct ath_node *an = (struct ath_node *) sta->drv_priv;
1295         struct ieee80211_key_conf ps_key = { };
1296
1297         ath_node_attach(sc, sta, vif);
1298
1299         if (vif->type != NL80211_IFTYPE_AP &&
1300             vif->type != NL80211_IFTYPE_AP_VLAN)
1301                 return 0;
1302
1303         an->ps_key = ath_key_config(common, vif, sta, &ps_key);
1304
1305         return 0;
1306 }
1307
1308 static void ath9k_del_ps_key(struct ath_softc *sc,
1309                              struct ieee80211_vif *vif,
1310                              struct ieee80211_sta *sta)
1311 {
1312         struct ath_common *common = ath9k_hw_common(sc->sc_ah);
1313         struct ath_node *an = (struct ath_node *) sta->drv_priv;
1314         struct ieee80211_key_conf ps_key = { .hw_key_idx = an->ps_key };
1315
1316         if (!an->ps_key)
1317             return;
1318
1319         ath_key_delete(common, &ps_key);
1320 }
1321
1322 static int ath9k_sta_remove(struct ieee80211_hw *hw,
1323                             struct ieee80211_vif *vif,
1324                             struct ieee80211_sta *sta)
1325 {
1326         struct ath_softc *sc = hw->priv;
1327
1328         ath9k_del_ps_key(sc, vif, sta);
1329         ath_node_detach(sc, sta);
1330
1331         return 0;
1332 }
1333
1334 static void ath9k_sta_notify(struct ieee80211_hw *hw,
1335                          struct ieee80211_vif *vif,
1336                          enum sta_notify_cmd cmd,
1337                          struct ieee80211_sta *sta)
1338 {
1339         struct ath_softc *sc = hw->priv;
1340         struct ath_node *an = (struct ath_node *) sta->drv_priv;
1341
1342         if (!sta->ht_cap.ht_supported)
1343                 return;
1344
1345         switch (cmd) {
1346         case STA_NOTIFY_SLEEP:
1347                 an->sleeping = true;
1348                 ath_tx_aggr_sleep(sta, sc, an);
1349                 break;
1350         case STA_NOTIFY_AWAKE:
1351                 an->sleeping = false;
1352                 ath_tx_aggr_wakeup(sc, an);
1353                 break;
1354         }
1355 }
1356
1357 static int ath9k_conf_tx(struct ieee80211_hw *hw,
1358                          struct ieee80211_vif *vif, u16 queue,
1359                          const struct ieee80211_tx_queue_params *params)
1360 {
1361         struct ath_softc *sc = hw->priv;
1362         struct ath_common *common = ath9k_hw_common(sc->sc_ah);
1363         struct ath_txq *txq;
1364         struct ath9k_tx_queue_info qi;
1365         int ret = 0;
1366
1367         if (queue >= WME_NUM_AC)
1368                 return 0;
1369
1370         txq = sc->tx.txq_map[queue];
1371
1372         ath9k_ps_wakeup(sc);
1373         mutex_lock(&sc->mutex);
1374
1375         memset(&qi, 0, sizeof(struct ath9k_tx_queue_info));
1376
1377         qi.tqi_aifs = params->aifs;
1378         qi.tqi_cwmin = params->cw_min;
1379         qi.tqi_cwmax = params->cw_max;
1380         qi.tqi_burstTime = params->txop * 32;
1381
1382         ath_dbg(common, CONFIG,
1383                 "Configure tx [queue/halq] [%d/%d], aifs: %d, cw_min: %d, cw_max: %d, txop: %d\n",
1384                 queue, txq->axq_qnum, params->aifs, params->cw_min,
1385                 params->cw_max, params->txop);
1386
1387         ath_update_max_aggr_framelen(sc, queue, qi.tqi_burstTime);
1388         ret = ath_txq_update(sc, txq->axq_qnum, &qi);
1389         if (ret)
1390                 ath_err(common, "TXQ Update failed\n");
1391
1392         mutex_unlock(&sc->mutex);
1393         ath9k_ps_restore(sc);
1394
1395         return ret;
1396 }
1397
1398 static int ath9k_set_key(struct ieee80211_hw *hw,
1399                          enum set_key_cmd cmd,
1400                          struct ieee80211_vif *vif,
1401                          struct ieee80211_sta *sta,
1402                          struct ieee80211_key_conf *key)
1403 {
1404         struct ath_softc *sc = hw->priv;
1405         struct ath_common *common = ath9k_hw_common(sc->sc_ah);
1406         int ret = 0;
1407
1408         if (ath9k_modparam_nohwcrypt)
1409                 return -ENOSPC;
1410
1411         if ((vif->type == NL80211_IFTYPE_ADHOC ||
1412              vif->type == NL80211_IFTYPE_MESH_POINT) &&
1413             (key->cipher == WLAN_CIPHER_SUITE_TKIP ||
1414              key->cipher == WLAN_CIPHER_SUITE_CCMP) &&
1415             !(key->flags & IEEE80211_KEY_FLAG_PAIRWISE)) {
1416                 /*
1417                  * For now, disable hw crypto for the RSN IBSS group keys. This
1418                  * could be optimized in the future to use a modified key cache
1419                  * design to support per-STA RX GTK, but until that gets
1420                  * implemented, use of software crypto for group addressed
1421                  * frames is a acceptable to allow RSN IBSS to be used.
1422                  */
1423                 return -EOPNOTSUPP;
1424         }
1425
1426         mutex_lock(&sc->mutex);
1427         ath9k_ps_wakeup(sc);
1428         ath_dbg(common, CONFIG, "Set HW Key\n");
1429
1430         switch (cmd) {
1431         case SET_KEY:
1432                 if (sta)
1433                         ath9k_del_ps_key(sc, vif, sta);
1434
1435                 ret = ath_key_config(common, vif, sta, key);
1436                 if (ret >= 0) {
1437                         key->hw_key_idx = ret;
1438                         /* push IV and Michael MIC generation to stack */
1439                         key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
1440                         if (key->cipher == WLAN_CIPHER_SUITE_TKIP)
1441                                 key->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIC;
1442                         if (sc->sc_ah->sw_mgmt_crypto &&
1443                             key->cipher == WLAN_CIPHER_SUITE_CCMP)
1444                                 key->flags |= IEEE80211_KEY_FLAG_SW_MGMT;
1445                         ret = 0;
1446                 }
1447                 break;
1448         case DISABLE_KEY:
1449                 ath_key_delete(common, key);
1450                 break;
1451         default:
1452                 ret = -EINVAL;
1453         }
1454
1455         ath9k_ps_restore(sc);
1456         mutex_unlock(&sc->mutex);
1457
1458         return ret;
1459 }
1460
1461 static void ath9k_set_assoc_state(struct ath_softc *sc,
1462                                   struct ieee80211_vif *vif)
1463 {
1464         struct ath_common *common = ath9k_hw_common(sc->sc_ah);
1465         struct ath_vif *avp = (void *)vif->drv_priv;
1466         struct ieee80211_bss_conf *bss_conf = &vif->bss_conf;
1467         unsigned long flags;
1468
1469         set_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags);
1470         avp->primary_sta_vif = true;
1471
1472         /*
1473          * Set the AID, BSSID and do beacon-sync only when
1474          * the HW opmode is STATION.
1475          *
1476          * But the primary bit is set above in any case.
1477          */
1478         if (sc->sc_ah->opmode != NL80211_IFTYPE_STATION)
1479                 return;
1480
1481         memcpy(common->curbssid, bss_conf->bssid, ETH_ALEN);
1482         common->curaid = bss_conf->aid;
1483         ath9k_hw_write_associd(sc->sc_ah);
1484
1485         sc->last_rssi = ATH_RSSI_DUMMY_MARKER;
1486         sc->sc_ah->stats.avgbrssi = ATH_RSSI_DUMMY_MARKER;
1487
1488         spin_lock_irqsave(&sc->sc_pm_lock, flags);
1489         sc->ps_flags |= PS_BEACON_SYNC | PS_WAIT_FOR_BEACON;
1490         spin_unlock_irqrestore(&sc->sc_pm_lock, flags);
1491
1492         ath_dbg(common, CONFIG,
1493                 "Primary Station interface: %pM, BSSID: %pM\n",
1494                 vif->addr, common->curbssid);
1495 }
1496
1497 static void ath9k_bss_assoc_iter(void *data, u8 *mac, struct ieee80211_vif *vif)
1498 {
1499         struct ath_softc *sc = data;
1500         struct ieee80211_bss_conf *bss_conf = &vif->bss_conf;
1501
1502         if (test_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags))
1503                 return;
1504
1505         if (bss_conf->assoc)
1506                 ath9k_set_assoc_state(sc, vif);
1507 }
1508
1509 static void ath9k_bss_info_changed(struct ieee80211_hw *hw,
1510                                    struct ieee80211_vif *vif,
1511                                    struct ieee80211_bss_conf *bss_conf,
1512                                    u32 changed)
1513 {
1514 #define CHECK_ANI                               \
1515         (BSS_CHANGED_ASSOC |                    \
1516          BSS_CHANGED_IBSS |                     \
1517          BSS_CHANGED_BEACON_ENABLED)
1518
1519         struct ath_softc *sc = hw->priv;
1520         struct ath_hw *ah = sc->sc_ah;
1521         struct ath_common *common = ath9k_hw_common(ah);
1522         struct ath_vif *avp = (void *)vif->drv_priv;
1523         int slottime;
1524
1525         ath9k_ps_wakeup(sc);
1526         mutex_lock(&sc->mutex);
1527
1528         if (changed & BSS_CHANGED_ASSOC) {
1529                 ath_dbg(common, CONFIG, "BSSID %pM Changed ASSOC %d\n",
1530                         bss_conf->bssid, bss_conf->assoc);
1531
1532                 if (avp->primary_sta_vif && !bss_conf->assoc) {
1533                         clear_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags);
1534                         avp->primary_sta_vif = false;
1535
1536                         if (ah->opmode == NL80211_IFTYPE_STATION)
1537                                 clear_bit(SC_OP_BEACONS, &sc->sc_flags);
1538                 }
1539
1540                 ieee80211_iterate_active_interfaces_atomic(sc->hw,
1541                                                    ath9k_bss_assoc_iter, sc);
1542
1543                 if (!test_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags) &&
1544                     ah->opmode == NL80211_IFTYPE_STATION) {
1545                         memset(common->curbssid, 0, ETH_ALEN);
1546                         common->curaid = 0;
1547                         ath9k_hw_write_associd(sc->sc_ah);
1548                 }
1549         }
1550
1551         if (changed & BSS_CHANGED_IBSS) {
1552                 memcpy(common->curbssid, bss_conf->bssid, ETH_ALEN);
1553                 common->curaid = bss_conf->aid;
1554                 ath9k_hw_write_associd(sc->sc_ah);
1555         }
1556
1557         if ((changed & BSS_CHANGED_BEACON_ENABLED) ||
1558             (changed & BSS_CHANGED_BEACON_INT)) {
1559                 if (ah->opmode == NL80211_IFTYPE_AP &&
1560                     bss_conf->enable_beacon)
1561                         ath9k_set_tsfadjust(sc, vif);
1562                 if (ath9k_allow_beacon_config(sc, vif))
1563                         ath9k_beacon_config(sc, vif, changed);
1564         }
1565
1566         if (changed & BSS_CHANGED_ERP_SLOT) {
1567                 if (bss_conf->use_short_slot)
1568                         slottime = 9;
1569                 else
1570                         slottime = 20;
1571                 if (vif->type == NL80211_IFTYPE_AP) {
1572                         /*
1573                          * Defer update, so that connected stations can adjust
1574                          * their settings at the same time.
1575                          * See beacon.c for more details
1576                          */
1577                         sc->beacon.slottime = slottime;
1578                         sc->beacon.updateslot = UPDATE;
1579                 } else {
1580                         ah->slottime = slottime;
1581                         ath9k_hw_init_global_settings(ah);
1582                 }
1583         }
1584
1585         if (changed & CHECK_ANI)
1586                 ath_check_ani(sc);
1587
1588         mutex_unlock(&sc->mutex);
1589         ath9k_ps_restore(sc);
1590
1591 #undef CHECK_ANI
1592 }
1593
1594 static u64 ath9k_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
1595 {
1596         struct ath_softc *sc = hw->priv;
1597         u64 tsf;
1598
1599         mutex_lock(&sc->mutex);
1600         ath9k_ps_wakeup(sc);
1601         tsf = ath9k_hw_gettsf64(sc->sc_ah);
1602         ath9k_ps_restore(sc);
1603         mutex_unlock(&sc->mutex);
1604
1605         return tsf;
1606 }
1607
1608 static void ath9k_set_tsf(struct ieee80211_hw *hw,
1609                           struct ieee80211_vif *vif,
1610                           u64 tsf)
1611 {
1612         struct ath_softc *sc = hw->priv;
1613
1614         mutex_lock(&sc->mutex);
1615         ath9k_ps_wakeup(sc);
1616         ath9k_hw_settsf64(sc->sc_ah, tsf);
1617         ath9k_ps_restore(sc);
1618         mutex_unlock(&sc->mutex);
1619 }
1620
1621 static void ath9k_reset_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
1622 {
1623         struct ath_softc *sc = hw->priv;
1624
1625         mutex_lock(&sc->mutex);
1626
1627         ath9k_ps_wakeup(sc);
1628         ath9k_hw_reset_tsf(sc->sc_ah);
1629         ath9k_ps_restore(sc);
1630
1631         mutex_unlock(&sc->mutex);
1632 }
1633
1634 static int ath9k_ampdu_action(struct ieee80211_hw *hw,
1635                               struct ieee80211_vif *vif,
1636                               enum ieee80211_ampdu_mlme_action action,
1637                               struct ieee80211_sta *sta,
1638                               u16 tid, u16 *ssn, u8 buf_size)
1639 {
1640         struct ath_softc *sc = hw->priv;
1641         int ret = 0;
1642
1643         local_bh_disable();
1644
1645         switch (action) {
1646         case IEEE80211_AMPDU_RX_START:
1647                 break;
1648         case IEEE80211_AMPDU_RX_STOP:
1649                 break;
1650         case IEEE80211_AMPDU_TX_START:
1651                 ath9k_ps_wakeup(sc);
1652                 ret = ath_tx_aggr_start(sc, sta, tid, ssn);
1653                 if (!ret)
1654                         ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid);
1655                 ath9k_ps_restore(sc);
1656                 break;
1657         case IEEE80211_AMPDU_TX_STOP:
1658                 ath9k_ps_wakeup(sc);
1659                 ath_tx_aggr_stop(sc, sta, tid);
1660                 ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid);
1661                 ath9k_ps_restore(sc);
1662                 break;
1663         case IEEE80211_AMPDU_TX_OPERATIONAL:
1664                 ath9k_ps_wakeup(sc);
1665                 ath_tx_aggr_resume(sc, sta, tid);
1666                 ath9k_ps_restore(sc);
1667                 break;
1668         default:
1669                 ath_err(ath9k_hw_common(sc->sc_ah), "Unknown AMPDU action\n");
1670         }
1671
1672         local_bh_enable();
1673
1674         return ret;
1675 }
1676
1677 static int ath9k_get_survey(struct ieee80211_hw *hw, int idx,
1678                              struct survey_info *survey)
1679 {
1680         struct ath_softc *sc = hw->priv;
1681         struct ath_common *common = ath9k_hw_common(sc->sc_ah);
1682         struct ieee80211_supported_band *sband;
1683         struct ieee80211_channel *chan;
1684         unsigned long flags;
1685         int pos;
1686
1687         spin_lock_irqsave(&common->cc_lock, flags);
1688         if (idx == 0)
1689                 ath_update_survey_stats(sc);
1690
1691         sband = hw->wiphy->bands[IEEE80211_BAND_2GHZ];
1692         if (sband && idx >= sband->n_channels) {
1693                 idx -= sband->n_channels;
1694                 sband = NULL;
1695         }
1696
1697         if (!sband)
1698                 sband = hw->wiphy->bands[IEEE80211_BAND_5GHZ];
1699
1700         if (!sband || idx >= sband->n_channels) {
1701                 spin_unlock_irqrestore(&common->cc_lock, flags);
1702                 return -ENOENT;
1703         }
1704
1705         chan = &sband->channels[idx];
1706         pos = chan->hw_value;
1707         memcpy(survey, &sc->survey[pos], sizeof(*survey));
1708         survey->channel = chan;
1709         spin_unlock_irqrestore(&common->cc_lock, flags);
1710
1711         return 0;
1712 }
1713
1714 static void ath9k_set_coverage_class(struct ieee80211_hw *hw, u8 coverage_class)
1715 {
1716         struct ath_softc *sc = hw->priv;
1717         struct ath_hw *ah = sc->sc_ah;
1718
1719         mutex_lock(&sc->mutex);
1720         ah->coverage_class = coverage_class;
1721
1722         ath9k_ps_wakeup(sc);
1723         ath9k_hw_init_global_settings(ah);
1724         ath9k_ps_restore(sc);
1725
1726         mutex_unlock(&sc->mutex);
1727 }
1728
1729 static void ath9k_flush(struct ieee80211_hw *hw, bool drop)
1730 {
1731         struct ath_softc *sc = hw->priv;
1732         struct ath_hw *ah = sc->sc_ah;
1733         struct ath_common *common = ath9k_hw_common(ah);
1734         int timeout = 200; /* ms */
1735         int i, j;
1736         bool drain_txq;
1737
1738         mutex_lock(&sc->mutex);
1739         cancel_delayed_work_sync(&sc->tx_complete_work);
1740
1741         if (ah->ah_flags & AH_UNPLUGGED) {
1742                 ath_dbg(common, ANY, "Device has been unplugged!\n");
1743                 mutex_unlock(&sc->mutex);
1744                 return;
1745         }
1746
1747         if (test_bit(SC_OP_INVALID, &sc->sc_flags)) {
1748                 ath_dbg(common, ANY, "Device not present\n");
1749                 mutex_unlock(&sc->mutex);
1750                 return;
1751         }
1752
1753         for (j = 0; j < timeout; j++) {
1754                 bool npend = false;
1755
1756                 if (j)
1757                         usleep_range(1000, 2000);
1758
1759                 for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) {
1760                         if (!ATH_TXQ_SETUP(sc, i))
1761                                 continue;
1762
1763                         npend = ath9k_has_pending_frames(sc, &sc->tx.txq[i]);
1764
1765                         if (npend)
1766                                 break;
1767                 }
1768
1769                 if (!npend)
1770                     break;
1771         }
1772
1773         if (drop) {
1774                 ath9k_ps_wakeup(sc);
1775                 spin_lock_bh(&sc->sc_pcu_lock);
1776                 drain_txq = ath_drain_all_txq(sc, false);
1777                 spin_unlock_bh(&sc->sc_pcu_lock);
1778
1779                 if (!drain_txq)
1780                         ath_reset(sc, false);
1781
1782                 ath9k_ps_restore(sc);
1783                 ieee80211_wake_queues(hw);
1784         }
1785
1786         ieee80211_queue_delayed_work(hw, &sc->tx_complete_work, 0);
1787         mutex_unlock(&sc->mutex);
1788 }
1789
1790 static bool ath9k_tx_frames_pending(struct ieee80211_hw *hw)
1791 {
1792         struct ath_softc *sc = hw->priv;
1793         int i;
1794
1795         for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) {
1796                 if (!ATH_TXQ_SETUP(sc, i))
1797                         continue;
1798
1799                 if (ath9k_has_pending_frames(sc, &sc->tx.txq[i]))
1800                         return true;
1801         }
1802         return false;
1803 }
1804
1805 static int ath9k_tx_last_beacon(struct ieee80211_hw *hw)
1806 {
1807         struct ath_softc *sc = hw->priv;
1808         struct ath_hw *ah = sc->sc_ah;
1809         struct ieee80211_vif *vif;
1810         struct ath_vif *avp;
1811         struct ath_buf *bf;
1812         struct ath_tx_status ts;
1813         bool edma = !!(ah->caps.hw_caps & ATH9K_HW_CAP_EDMA);
1814         int status;
1815
1816         vif = sc->beacon.bslot[0];
1817         if (!vif)
1818                 return 0;
1819
1820         if (!vif->bss_conf.enable_beacon)
1821                 return 0;
1822
1823         avp = (void *)vif->drv_priv;
1824
1825         if (!sc->beacon.tx_processed && !edma) {
1826                 tasklet_disable(&sc->bcon_tasklet);
1827
1828                 bf = avp->av_bcbuf;
1829                 if (!bf || !bf->bf_mpdu)
1830                         goto skip;
1831
1832                 status = ath9k_hw_txprocdesc(ah, bf->bf_desc, &ts);
1833                 if (status == -EINPROGRESS)
1834                         goto skip;
1835
1836                 sc->beacon.tx_processed = true;
1837                 sc->beacon.tx_last = !(ts.ts_status & ATH9K_TXERR_MASK);
1838
1839 skip:
1840                 tasklet_enable(&sc->bcon_tasklet);
1841         }
1842
1843         return sc->beacon.tx_last;
1844 }
1845
1846 static int ath9k_get_stats(struct ieee80211_hw *hw,
1847                            struct ieee80211_low_level_stats *stats)
1848 {
1849         struct ath_softc *sc = hw->priv;
1850         struct ath_hw *ah = sc->sc_ah;
1851         struct ath9k_mib_stats *mib_stats = &ah->ah_mibStats;
1852
1853         stats->dot11ACKFailureCount = mib_stats->ackrcv_bad;
1854         stats->dot11RTSFailureCount = mib_stats->rts_bad;
1855         stats->dot11FCSErrorCount = mib_stats->fcs_bad;
1856         stats->dot11RTSSuccessCount = mib_stats->rts_good;
1857         return 0;
1858 }
1859
1860 static u32 fill_chainmask(u32 cap, u32 new)
1861 {
1862         u32 filled = 0;
1863         int i;
1864
1865         for (i = 0; cap && new; i++, cap >>= 1) {
1866                 if (!(cap & BIT(0)))
1867                         continue;
1868
1869                 if (new & BIT(0))
1870                         filled |= BIT(i);
1871
1872                 new >>= 1;
1873         }
1874
1875         return filled;
1876 }
1877
1878 static bool validate_antenna_mask(struct ath_hw *ah, u32 val)
1879 {
1880         switch (val & 0x7) {
1881         case 0x1:
1882         case 0x3:
1883         case 0x7:
1884                 return true;
1885         case 0x2:
1886                 return (ah->caps.rx_chainmask == 1);
1887         default:
1888                 return false;
1889         }
1890 }
1891
1892 static int ath9k_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant)
1893 {
1894         struct ath_softc *sc = hw->priv;
1895         struct ath_hw *ah = sc->sc_ah;
1896
1897         if (ah->caps.rx_chainmask != 1)
1898                 rx_ant |= tx_ant;
1899
1900         if (!validate_antenna_mask(ah, rx_ant) || !tx_ant)
1901                 return -EINVAL;
1902
1903         sc->ant_rx = rx_ant;
1904         sc->ant_tx = tx_ant;
1905
1906         if (ah->caps.rx_chainmask == 1)
1907                 return 0;
1908
1909         /* AR9100 runs into calibration issues if not all rx chains are enabled */
1910         if (AR_SREV_9100(ah))
1911                 ah->rxchainmask = 0x7;
1912         else
1913                 ah->rxchainmask = fill_chainmask(ah->caps.rx_chainmask, rx_ant);
1914
1915         ah->txchainmask = fill_chainmask(ah->caps.tx_chainmask, tx_ant);
1916         ath9k_reload_chainmask_settings(sc);
1917
1918         return 0;
1919 }
1920
1921 static int ath9k_get_antenna(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant)
1922 {
1923         struct ath_softc *sc = hw->priv;
1924
1925         *tx_ant = sc->ant_tx;
1926         *rx_ant = sc->ant_rx;
1927         return 0;
1928 }
1929
1930 #ifdef CONFIG_ATH9K_DEBUGFS
1931
1932 /* Ethtool support for get-stats */
1933
1934 #define AMKSTR(nm) #nm "_BE", #nm "_BK", #nm "_VI", #nm "_VO"
1935 static const char ath9k_gstrings_stats[][ETH_GSTRING_LEN] = {
1936         "tx_pkts_nic",
1937         "tx_bytes_nic",
1938         "rx_pkts_nic",
1939         "rx_bytes_nic",
1940         AMKSTR(d_tx_pkts),
1941         AMKSTR(d_tx_bytes),
1942         AMKSTR(d_tx_mpdus_queued),
1943         AMKSTR(d_tx_mpdus_completed),
1944         AMKSTR(d_tx_mpdu_xretries),
1945         AMKSTR(d_tx_aggregates),
1946         AMKSTR(d_tx_ampdus_queued_hw),
1947         AMKSTR(d_tx_ampdus_queued_sw),
1948         AMKSTR(d_tx_ampdus_completed),
1949         AMKSTR(d_tx_ampdu_retries),
1950         AMKSTR(d_tx_ampdu_xretries),
1951         AMKSTR(d_tx_fifo_underrun),
1952         AMKSTR(d_tx_op_exceeded),
1953         AMKSTR(d_tx_timer_expiry),
1954         AMKSTR(d_tx_desc_cfg_err),
1955         AMKSTR(d_tx_data_underrun),
1956         AMKSTR(d_tx_delim_underrun),
1957
1958         "d_rx_decrypt_crc_err",
1959         "d_rx_phy_err",
1960         "d_rx_mic_err",
1961         "d_rx_pre_delim_crc_err",
1962         "d_rx_post_delim_crc_err",
1963         "d_rx_decrypt_busy_err",
1964
1965         "d_rx_phyerr_radar",
1966         "d_rx_phyerr_ofdm_timing",
1967         "d_rx_phyerr_cck_timing",
1968
1969 };
1970 #define ATH9K_SSTATS_LEN ARRAY_SIZE(ath9k_gstrings_stats)
1971
1972 static void ath9k_get_et_strings(struct ieee80211_hw *hw,
1973                                  struct ieee80211_vif *vif,
1974                                  u32 sset, u8 *data)
1975 {
1976         if (sset == ETH_SS_STATS)
1977                 memcpy(data, *ath9k_gstrings_stats,
1978                        sizeof(ath9k_gstrings_stats));
1979 }
1980
1981 static int ath9k_get_et_sset_count(struct ieee80211_hw *hw,
1982                                    struct ieee80211_vif *vif, int sset)
1983 {
1984         if (sset == ETH_SS_STATS)
1985                 return ATH9K_SSTATS_LEN;
1986         return 0;
1987 }
1988
1989 #define PR_QNUM(_n) (sc->tx.txq_map[_n]->axq_qnum)
1990 #define AWDATA(elem)                                                    \
1991         do {                                                            \
1992                 data[i++] = sc->debug.stats.txstats[PR_QNUM(WME_AC_BE)].elem; \
1993                 data[i++] = sc->debug.stats.txstats[PR_QNUM(WME_AC_BK)].elem; \
1994                 data[i++] = sc->debug.stats.txstats[PR_QNUM(WME_AC_VI)].elem; \
1995                 data[i++] = sc->debug.stats.txstats[PR_QNUM(WME_AC_VO)].elem; \
1996         } while (0)
1997
1998 #define AWDATA_RX(elem)                                         \
1999         do {                                                    \
2000                 data[i++] = sc->debug.stats.rxstats.elem;       \
2001         } while (0)
2002
2003 static void ath9k_get_et_stats(struct ieee80211_hw *hw,
2004                                struct ieee80211_vif *vif,
2005                                struct ethtool_stats *stats, u64 *data)
2006 {
2007         struct ath_softc *sc = hw->priv;
2008         int i = 0;
2009
2010         data[i++] = (sc->debug.stats.txstats[PR_QNUM(WME_AC_BE)].tx_pkts_all +
2011                      sc->debug.stats.txstats[PR_QNUM(WME_AC_BK)].tx_pkts_all +
2012                      sc->debug.stats.txstats[PR_QNUM(WME_AC_VI)].tx_pkts_all +
2013                      sc->debug.stats.txstats[PR_QNUM(WME_AC_VO)].tx_pkts_all);
2014         data[i++] = (sc->debug.stats.txstats[PR_QNUM(WME_AC_BE)].tx_bytes_all +
2015                      sc->debug.stats.txstats[PR_QNUM(WME_AC_BK)].tx_bytes_all +
2016                      sc->debug.stats.txstats[PR_QNUM(WME_AC_VI)].tx_bytes_all +
2017                      sc->debug.stats.txstats[PR_QNUM(WME_AC_VO)].tx_bytes_all);
2018         AWDATA_RX(rx_pkts_all);
2019         AWDATA_RX(rx_bytes_all);
2020
2021         AWDATA(tx_pkts_all);
2022         AWDATA(tx_bytes_all);
2023         AWDATA(queued);
2024         AWDATA(completed);
2025         AWDATA(xretries);
2026         AWDATA(a_aggr);
2027         AWDATA(a_queued_hw);
2028         AWDATA(a_queued_sw);
2029         AWDATA(a_completed);
2030         AWDATA(a_retries);
2031         AWDATA(a_xretries);
2032         AWDATA(fifo_underrun);
2033         AWDATA(xtxop);
2034         AWDATA(timer_exp);
2035         AWDATA(desc_cfg_err);
2036         AWDATA(data_underrun);
2037         AWDATA(delim_underrun);
2038
2039         AWDATA_RX(decrypt_crc_err);
2040         AWDATA_RX(phy_err);
2041         AWDATA_RX(mic_err);
2042         AWDATA_RX(pre_delim_crc_err);
2043         AWDATA_RX(post_delim_crc_err);
2044         AWDATA_RX(decrypt_busy_err);
2045
2046         AWDATA_RX(phy_err_stats[ATH9K_PHYERR_RADAR]);
2047         AWDATA_RX(phy_err_stats[ATH9K_PHYERR_OFDM_TIMING]);
2048         AWDATA_RX(phy_err_stats[ATH9K_PHYERR_CCK_TIMING]);
2049
2050         WARN_ON(i != ATH9K_SSTATS_LEN);
2051 }
2052
2053 /* End of ethtool get-stats functions */
2054
2055 #endif
2056
2057
2058 #ifdef CONFIG_PM_SLEEP
2059
2060 static void ath9k_wow_map_triggers(struct ath_softc *sc,
2061                                    struct cfg80211_wowlan *wowlan,
2062                                    u32 *wow_triggers)
2063 {
2064         if (wowlan->disconnect)
2065                 *wow_triggers |= AH_WOW_LINK_CHANGE |
2066                                  AH_WOW_BEACON_MISS;
2067         if (wowlan->magic_pkt)
2068                 *wow_triggers |= AH_WOW_MAGIC_PATTERN_EN;
2069
2070         if (wowlan->n_patterns)
2071                 *wow_triggers |= AH_WOW_USER_PATTERN_EN;
2072
2073         sc->wow_enabled = *wow_triggers;
2074
2075 }
2076
2077 static void ath9k_wow_add_disassoc_deauth_pattern(struct ath_softc *sc)
2078 {
2079         struct ath_hw *ah = sc->sc_ah;
2080         struct ath_common *common = ath9k_hw_common(ah);
2081         struct ath9k_hw_capabilities *pcaps = &ah->caps;
2082         int pattern_count = 0;
2083         int i, byte_cnt;
2084         u8 dis_deauth_pattern[MAX_PATTERN_SIZE];
2085         u8 dis_deauth_mask[MAX_PATTERN_SIZE];
2086
2087         memset(dis_deauth_pattern, 0, MAX_PATTERN_SIZE);
2088         memset(dis_deauth_mask, 0, MAX_PATTERN_SIZE);
2089
2090         /*
2091          * Create Dissassociate / Deauthenticate packet filter
2092          *
2093          *     2 bytes        2 byte    6 bytes   6 bytes  6 bytes
2094          *  +--------------+----------+---------+--------+--------+----
2095          *  + Frame Control+ Duration +   DA    +  SA    +  BSSID +
2096          *  +--------------+----------+---------+--------+--------+----
2097          *
2098          * The above is the management frame format for disassociate/
2099          * deauthenticate pattern, from this we need to match the first byte
2100          * of 'Frame Control' and DA, SA, and BSSID fields
2101          * (skipping 2nd byte of FC and Duration feild.
2102          *
2103          * Disassociate pattern
2104          * --------------------
2105          * Frame control = 00 00 1010
2106          * DA, SA, BSSID = x:x:x:x:x:x
2107          * Pattern will be A0000000 | x:x:x:x:x:x | x:x:x:x:x:x
2108          *                          | x:x:x:x:x:x  -- 22 bytes
2109          *
2110          * Deauthenticate pattern
2111          * ----------------------
2112          * Frame control = 00 00 1100
2113          * DA, SA, BSSID = x:x:x:x:x:x
2114          * Pattern will be C0000000 | x:x:x:x:x:x | x:x:x:x:x:x
2115          *                          | x:x:x:x:x:x  -- 22 bytes
2116          */
2117
2118         /* Create Disassociate Pattern first */
2119
2120         byte_cnt = 0;
2121
2122         /* Fill out the mask with all FF's */
2123
2124         for (i = 0; i < MAX_PATTERN_MASK_SIZE; i++)
2125                 dis_deauth_mask[i] = 0xff;
2126
2127         /* copy the first byte of frame control field */
2128         dis_deauth_pattern[byte_cnt] = 0xa0;
2129         byte_cnt++;
2130
2131         /* skip 2nd byte of frame control and Duration field */
2132         byte_cnt += 3;
2133
2134         /*
2135          * need not match the destination mac address, it can be a broadcast
2136          * mac address or an unicast to this station
2137          */
2138         byte_cnt += 6;
2139
2140         /* copy the source mac address */
2141         memcpy((dis_deauth_pattern + byte_cnt), common->curbssid, ETH_ALEN);
2142
2143         byte_cnt += 6;
2144
2145         /* copy the bssid, its same as the source mac address */
2146
2147         memcpy((dis_deauth_pattern + byte_cnt), common->curbssid, ETH_ALEN);
2148
2149         /* Create Disassociate pattern mask */
2150
2151         if (pcaps->hw_caps & ATH9K_HW_WOW_PATTERN_MATCH_EXACT) {
2152
2153                 if (pcaps->hw_caps & ATH9K_HW_WOW_PATTERN_MATCH_DWORD) {
2154                         /*
2155                          * for AR9280, because of hardware limitation, the
2156                          * first 4 bytes have to be matched for all patterns.
2157                          * the mask for disassociation and de-auth pattern
2158                          * matching need to enable the first 4 bytes.
2159                          * also the duration field needs to be filled.
2160                          */
2161                         dis_deauth_mask[0] = 0xf0;
2162
2163                         /*
2164                          * fill in duration field
2165                          FIXME: what is the exact value ?
2166                          */
2167                         dis_deauth_pattern[2] = 0xff;
2168                         dis_deauth_pattern[3] = 0xff;
2169                 } else {
2170                         dis_deauth_mask[0] = 0xfe;
2171                 }
2172
2173                 dis_deauth_mask[1] = 0x03;
2174                 dis_deauth_mask[2] = 0xc0;
2175         } else {
2176                 dis_deauth_mask[0] = 0xef;
2177                 dis_deauth_mask[1] = 0x3f;
2178                 dis_deauth_mask[2] = 0x00;
2179                 dis_deauth_mask[3] = 0xfc;
2180         }
2181
2182         ath_dbg(common, WOW, "Adding disassoc/deauth patterns for WoW\n");
2183
2184         ath9k_hw_wow_apply_pattern(ah, dis_deauth_pattern, dis_deauth_mask,
2185                                    pattern_count, byte_cnt);
2186
2187         pattern_count++;
2188         /*
2189          * for de-authenticate pattern, only the first byte of the frame
2190          * control field gets changed from 0xA0 to 0xC0
2191          */
2192         dis_deauth_pattern[0] = 0xC0;
2193
2194         ath9k_hw_wow_apply_pattern(ah, dis_deauth_pattern, dis_deauth_mask,
2195                                    pattern_count, byte_cnt);
2196
2197 }
2198
2199 static void ath9k_wow_add_pattern(struct ath_softc *sc,
2200                                   struct cfg80211_wowlan *wowlan)
2201 {
2202         struct ath_hw *ah = sc->sc_ah;
2203         struct ath9k_wow_pattern *wow_pattern = NULL;
2204         struct cfg80211_wowlan_trig_pkt_pattern *patterns = wowlan->patterns;
2205         int mask_len;
2206         s8 i = 0;
2207
2208         if (!wowlan->n_patterns)
2209                 return;
2210
2211         /*
2212          * Add the new user configured patterns
2213          */
2214         for (i = 0; i < wowlan->n_patterns; i++) {
2215
2216                 wow_pattern = kzalloc(sizeof(*wow_pattern), GFP_KERNEL);
2217
2218                 if (!wow_pattern)
2219                         return;
2220
2221                 /*
2222                  * TODO: convert the generic user space pattern to
2223                  * appropriate chip specific/802.11 pattern.
2224                  */
2225
2226                 mask_len = DIV_ROUND_UP(wowlan->patterns[i].pattern_len, 8);
2227                 memset(wow_pattern->pattern_bytes, 0, MAX_PATTERN_SIZE);
2228                 memset(wow_pattern->mask_bytes, 0, MAX_PATTERN_SIZE);
2229                 memcpy(wow_pattern->pattern_bytes, patterns[i].pattern,
2230                        patterns[i].pattern_len);
2231                 memcpy(wow_pattern->mask_bytes, patterns[i].mask, mask_len);
2232                 wow_pattern->pattern_len = patterns[i].pattern_len;
2233
2234                 /*
2235                  * just need to take care of deauth and disssoc pattern,
2236                  * make sure we don't overwrite them.
2237                  */
2238
2239                 ath9k_hw_wow_apply_pattern(ah, wow_pattern->pattern_bytes,
2240                                            wow_pattern->mask_bytes,
2241                                            i + 2,
2242                                            wow_pattern->pattern_len);
2243                 kfree(wow_pattern);
2244
2245         }
2246
2247 }
2248
2249 static int ath9k_suspend(struct ieee80211_hw *hw,
2250                          struct cfg80211_wowlan *wowlan)
2251 {
2252         struct ath_softc *sc = hw->priv;
2253         struct ath_hw *ah = sc->sc_ah;
2254         struct ath_common *common = ath9k_hw_common(ah);
2255         u32 wow_triggers_enabled = 0;
2256         int ret = 0;
2257
2258         mutex_lock(&sc->mutex);
2259
2260         ath_cancel_work(sc);
2261         del_timer_sync(&common->ani.timer);
2262         del_timer_sync(&sc->rx_poll_timer);
2263
2264         if (test_bit(SC_OP_INVALID, &sc->sc_flags)) {
2265                 ath_dbg(common, ANY, "Device not present\n");
2266                 ret = -EINVAL;
2267                 goto fail_wow;
2268         }
2269
2270         if (WARN_ON(!wowlan)) {
2271                 ath_dbg(common, WOW, "None of the WoW triggers enabled\n");
2272                 ret = -EINVAL;
2273                 goto fail_wow;
2274         }
2275
2276         if (!device_can_wakeup(sc->dev)) {
2277                 ath_dbg(common, WOW, "device_can_wakeup failed, WoW is not enabled\n");
2278                 ret = 1;
2279                 goto fail_wow;
2280         }
2281
2282         /*
2283          * none of the sta vifs are associated
2284          * and we are not currently handling multivif
2285          * cases, for instance we have to seperately
2286          * configure 'keep alive frame' for each
2287          * STA.
2288          */
2289
2290         if (!test_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags)) {
2291                 ath_dbg(common, WOW, "None of the STA vifs are associated\n");
2292                 ret = 1;
2293                 goto fail_wow;
2294         }
2295
2296         if (sc->nvifs > 1) {
2297                 ath_dbg(common, WOW, "WoW for multivif is not yet supported\n");
2298                 ret = 1;
2299                 goto fail_wow;
2300         }
2301
2302         ath9k_wow_map_triggers(sc, wowlan, &wow_triggers_enabled);
2303
2304         ath_dbg(common, WOW, "WoW triggers enabled 0x%x\n",
2305                 wow_triggers_enabled);
2306
2307         ath9k_ps_wakeup(sc);
2308
2309         ath9k_stop_btcoex(sc);
2310
2311         /*
2312          * Enable wake up on recieving disassoc/deauth
2313          * frame by default.
2314          */
2315         ath9k_wow_add_disassoc_deauth_pattern(sc);
2316
2317         if (wow_triggers_enabled & AH_WOW_USER_PATTERN_EN)
2318                 ath9k_wow_add_pattern(sc, wowlan);
2319
2320         spin_lock_bh(&sc->sc_pcu_lock);
2321         /*
2322          * To avoid false wake, we enable beacon miss interrupt only
2323          * when we go to sleep. We save the current interrupt mask
2324          * so we can restore it after the system wakes up
2325          */
2326         sc->wow_intr_before_sleep = ah->imask;
2327         ah->imask &= ~ATH9K_INT_GLOBAL;
2328         ath9k_hw_disable_interrupts(ah);
2329         ah->imask = ATH9K_INT_BMISS | ATH9K_INT_GLOBAL;
2330         ath9k_hw_set_interrupts(ah);
2331         ath9k_hw_enable_interrupts(ah);
2332
2333         spin_unlock_bh(&sc->sc_pcu_lock);
2334
2335         /*
2336          * we can now sync irq and kill any running tasklets, since we already
2337          * disabled interrupts and not holding a spin lock
2338          */
2339         synchronize_irq(sc->irq);
2340         tasklet_kill(&sc->intr_tq);
2341
2342         ath9k_hw_wow_enable(ah, wow_triggers_enabled);
2343
2344         ath9k_ps_restore(sc);
2345         ath_dbg(common, ANY, "WoW enabled in ath9k\n");
2346         atomic_inc(&sc->wow_sleep_proc_intr);
2347
2348 fail_wow:
2349         mutex_unlock(&sc->mutex);
2350         return ret;
2351 }
2352
2353 static int ath9k_resume(struct ieee80211_hw *hw)
2354 {
2355         struct ath_softc *sc = hw->priv;
2356         struct ath_hw *ah = sc->sc_ah;
2357         struct ath_common *common = ath9k_hw_common(ah);
2358         u32 wow_status;
2359
2360         mutex_lock(&sc->mutex);
2361
2362         ath9k_ps_wakeup(sc);
2363
2364         spin_lock_bh(&sc->sc_pcu_lock);
2365
2366         ath9k_hw_disable_interrupts(ah);
2367         ah->imask = sc->wow_intr_before_sleep;
2368         ath9k_hw_set_interrupts(ah);
2369         ath9k_hw_enable_interrupts(ah);
2370
2371         spin_unlock_bh(&sc->sc_pcu_lock);
2372
2373         wow_status = ath9k_hw_wow_wakeup(ah);
2374
2375         if (atomic_read(&sc->wow_got_bmiss_intr) == 0) {
2376                 /*
2377                  * some devices may not pick beacon miss
2378                  * as the reason they woke up so we add
2379                  * that here for that shortcoming.
2380                  */
2381                 wow_status |= AH_WOW_BEACON_MISS;
2382                 atomic_dec(&sc->wow_got_bmiss_intr);
2383                 ath_dbg(common, ANY, "Beacon miss interrupt picked up during WoW sleep\n");
2384         }
2385
2386         atomic_dec(&sc->wow_sleep_proc_intr);
2387
2388         if (wow_status) {
2389                 ath_dbg(common, ANY, "Waking up due to WoW triggers %s with WoW status = %x\n",
2390                         ath9k_hw_wow_event_to_string(wow_status), wow_status);
2391         }
2392
2393         ath_restart_work(sc);
2394         ath9k_start_btcoex(sc);
2395
2396         ath9k_ps_restore(sc);
2397         mutex_unlock(&sc->mutex);
2398
2399         return 0;
2400 }
2401
2402 static void ath9k_set_wakeup(struct ieee80211_hw *hw, bool enabled)
2403 {
2404         struct ath_softc *sc = hw->priv;
2405
2406         mutex_lock(&sc->mutex);
2407         device_init_wakeup(sc->dev, 1);
2408         device_set_wakeup_enable(sc->dev, enabled);
2409         mutex_unlock(&sc->mutex);
2410 }
2411
2412 #endif
2413
2414 struct ieee80211_ops ath9k_ops = {
2415         .tx                 = ath9k_tx,
2416         .start              = ath9k_start,
2417         .stop               = ath9k_stop,
2418         .add_interface      = ath9k_add_interface,
2419         .change_interface   = ath9k_change_interface,
2420         .remove_interface   = ath9k_remove_interface,
2421         .config             = ath9k_config,
2422         .configure_filter   = ath9k_configure_filter,
2423         .sta_add            = ath9k_sta_add,
2424         .sta_remove         = ath9k_sta_remove,
2425         .sta_notify         = ath9k_sta_notify,
2426         .conf_tx            = ath9k_conf_tx,
2427         .bss_info_changed   = ath9k_bss_info_changed,
2428         .set_key            = ath9k_set_key,
2429         .get_tsf            = ath9k_get_tsf,
2430         .set_tsf            = ath9k_set_tsf,
2431         .reset_tsf          = ath9k_reset_tsf,
2432         .ampdu_action       = ath9k_ampdu_action,
2433         .get_survey         = ath9k_get_survey,
2434         .rfkill_poll        = ath9k_rfkill_poll_state,
2435         .set_coverage_class = ath9k_set_coverage_class,
2436         .flush              = ath9k_flush,
2437         .tx_frames_pending  = ath9k_tx_frames_pending,
2438         .tx_last_beacon     = ath9k_tx_last_beacon,
2439         .get_stats          = ath9k_get_stats,
2440         .set_antenna        = ath9k_set_antenna,
2441         .get_antenna        = ath9k_get_antenna,
2442
2443 #ifdef CONFIG_PM_SLEEP
2444         .suspend            = ath9k_suspend,
2445         .resume             = ath9k_resume,
2446         .set_wakeup         = ath9k_set_wakeup,
2447 #endif
2448
2449 #ifdef CONFIG_ATH9K_DEBUGFS
2450         .get_et_sset_count  = ath9k_get_et_sset_count,
2451         .get_et_stats  = ath9k_get_et_stats,
2452         .get_et_strings  = ath9k_get_et_strings,
2453 #endif
2454 };