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