2 * Copyright (c) 2008-2011 Atheros Communications Inc.
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.
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.
17 #include <linux/nl80211.h>
18 #include <linux/delay.h>
22 static void ath9k_set_assoc_state(struct ath_softc *sc,
23 struct ieee80211_vif *vif);
25 u8 ath9k_parse_mpdudensity(u8 mpdudensity)
28 * 802.11n D2.0 defined values for "Minimum MPDU Start Spacing":
29 * 0 for no restriction
38 switch (mpdudensity) {
44 /* Our lower layer calculations limit our precision to
60 static bool ath9k_has_pending_frames(struct ath_softc *sc, struct ath_txq *txq)
64 spin_lock_bh(&txq->axq_lock);
66 if (txq->axq_depth || !list_empty(&txq->axq_acq))
69 spin_unlock_bh(&txq->axq_lock);
73 static bool ath9k_setpower(struct ath_softc *sc, enum ath9k_power_mode mode)
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);
85 void ath9k_ps_wakeup(struct ath_softc *sc)
87 struct ath_common *common = ath9k_hw_common(sc->sc_ah);
89 enum ath9k_power_mode power_mode;
91 spin_lock_irqsave(&sc->sc_pm_lock, flags);
92 if (++sc->ps_usecount != 1)
95 power_mode = sc->sc_ah->power_mode;
96 ath9k_hw_setpower(sc->sc_ah, ATH9K_PM_AWAKE);
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.
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);
112 spin_unlock_irqrestore(&sc->sc_pm_lock, flags);
115 void ath9k_ps_restore(struct ath_softc *sc)
117 struct ath_common *common = ath9k_hw_common(sc->sc_ah);
118 enum ath9k_power_mode mode;
122 spin_lock_irqsave(&sc->sc_pm_lock, flags);
123 if (--sc->ps_usecount != 0)
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 |
133 PS_WAIT_FOR_PSPOLL_DATA |
136 mode = ATH9K_PM_NETWORK_SLEEP;
137 if (ath9k_hw_btcoex_is_enabled(sc->sc_ah))
138 ath9k_btcoex_stop_gen_timer(sc);
143 spin_lock(&common->cc_lock);
144 ath_hw_cycle_counters_update(common);
145 spin_unlock(&common->cc_lock);
147 ath9k_hw_setpower(sc->sc_ah, mode);
150 spin_unlock_irqrestore(&sc->sc_pm_lock, flags);
153 static void __ath_cancel_work(struct ath_softc *sc)
155 cancel_work_sync(&sc->paprd_work);
156 cancel_work_sync(&sc->hw_check_work);
157 cancel_delayed_work_sync(&sc->tx_complete_work);
158 cancel_delayed_work_sync(&sc->hw_pll_work);
160 #ifdef CONFIG_ATH9K_BTCOEX_SUPPORT
161 if (ath9k_hw_mci_is_enabled(sc->sc_ah))
162 cancel_work_sync(&sc->mci_work);
166 static void ath_cancel_work(struct ath_softc *sc)
168 __ath_cancel_work(sc);
169 cancel_work_sync(&sc->hw_reset_work);
172 static void ath_restart_work(struct ath_softc *sc)
174 ieee80211_queue_delayed_work(sc->hw, &sc->tx_complete_work, 0);
176 if (AR_SREV_9340(sc->sc_ah) || AR_SREV_9330(sc->sc_ah))
177 ieee80211_queue_delayed_work(sc->hw, &sc->hw_pll_work,
178 msecs_to_jiffies(ATH_PLL_WORK_INTERVAL));
180 ath_start_rx_poll(sc, 3);
184 static bool ath_prepare_reset(struct ath_softc *sc)
186 struct ath_hw *ah = sc->sc_ah;
189 ieee80211_stop_queues(sc->hw);
191 sc->hw_busy_count = 0;
193 del_timer_sync(&sc->rx_poll_timer);
195 ath9k_hw_disable_interrupts(ah);
197 if (!ath_drain_all_txq(sc))
200 if (!ath_stoprecv(sc))
206 static bool ath_complete_reset(struct ath_softc *sc, bool start)
208 struct ath_hw *ah = sc->sc_ah;
209 struct ath_common *common = ath9k_hw_common(ah);
213 if (ath_startrecv(sc) != 0) {
214 ath_err(common, "Unable to restart recv logic\n");
218 ath9k_cmn_update_txpow(ah, sc->curtxpow,
219 sc->config.txpowlimit, &sc->curtxpow);
221 clear_bit(SC_OP_HW_RESET, &sc->sc_flags);
222 ath9k_hw_set_interrupts(ah);
223 ath9k_hw_enable_interrupts(ah);
225 if (!(sc->hw->conf.flags & IEEE80211_CONF_OFFCHANNEL) && start) {
226 if (!test_bit(SC_OP_BEACONS, &sc->sc_flags))
229 if (ah->opmode == NL80211_IFTYPE_STATION &&
230 test_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags)) {
231 spin_lock_irqsave(&sc->sc_pm_lock, flags);
232 sc->ps_flags |= PS_BEACON_SYNC | PS_WAIT_FOR_BEACON;
233 spin_unlock_irqrestore(&sc->sc_pm_lock, flags);
235 ath9k_set_beacon(sc);
238 ath_restart_work(sc);
240 for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) {
241 if (!ATH_TXQ_SETUP(sc, i))
244 spin_lock_bh(&sc->tx.txq[i].axq_lock);
245 ath_txq_schedule(sc, &sc->tx.txq[i]);
246 spin_unlock_bh(&sc->tx.txq[i].axq_lock);
250 ieee80211_wake_queues(sc->hw);
255 static int ath_reset_internal(struct ath_softc *sc, struct ath9k_channel *hchan)
257 struct ath_hw *ah = sc->sc_ah;
258 struct ath_common *common = ath9k_hw_common(ah);
259 struct ath9k_hw_cal_data *caldata = NULL;
263 __ath_cancel_work(sc);
265 tasklet_disable(&sc->intr_tq);
266 spin_lock_bh(&sc->sc_pcu_lock);
268 if (!(sc->hw->conf.flags & IEEE80211_CONF_OFFCHANNEL)) {
270 caldata = &sc->caldata;
278 if (!ath_prepare_reset(sc))
281 ath_dbg(common, CONFIG, "Reset to %u MHz, HT40: %d fastcc: %d\n",
282 hchan->channel, IS_CHAN_HT40(hchan), fastcc);
284 r = ath9k_hw_reset(ah, hchan, caldata, fastcc);
287 "Unable to reset channel, reset status %d\n", r);
289 ath9k_hw_enable_interrupts(ah);
290 ath9k_queue_reset(sc, RESET_TYPE_BB_HANG);
295 if (ath9k_hw_mci_is_enabled(sc->sc_ah) &&
296 (sc->hw->conf.flags & IEEE80211_CONF_OFFCHANNEL))
297 ath9k_mci_set_txpower(sc, true, false);
299 if (!ath_complete_reset(sc, true))
303 spin_unlock_bh(&sc->sc_pcu_lock);
304 tasklet_enable(&sc->intr_tq);
311 * Set/change channels. If the channel is really being changed, it's done
312 * by reseting the chip. To accomplish this we must first cleanup any pending
313 * DMA, then restart stuff.
315 static int ath_set_channel(struct ath_softc *sc, struct cfg80211_chan_def *chandef)
317 struct ath_hw *ah = sc->sc_ah;
318 struct ath_common *common = ath9k_hw_common(ah);
319 struct ieee80211_hw *hw = sc->hw;
320 struct ath9k_channel *hchan;
321 struct ieee80211_channel *chan = chandef->chan;
324 int pos = chan->hw_value;
328 if (test_bit(SC_OP_INVALID, &sc->sc_flags))
331 offchannel = !!(hw->conf.flags & IEEE80211_CONF_OFFCHANNEL);
334 old_pos = ah->curchan - &ah->channels[0];
336 ath_dbg(common, CONFIG, "Set channel: %d MHz width: %d\n",
337 chan->center_freq, chandef->width);
339 /* update survey stats for the old channel before switching */
340 spin_lock_irqsave(&common->cc_lock, flags);
341 ath_update_survey_stats(sc);
342 spin_unlock_irqrestore(&common->cc_lock, flags);
344 ath9k_cmn_get_channel(hw, ah, chandef);
347 * If the operating channel changes, change the survey in-use flags
349 * Reset the survey data for the new channel, unless we're switching
350 * back to the operating channel from an off-channel operation.
352 if (!offchannel && sc->cur_survey != &sc->survey[pos]) {
354 sc->cur_survey->filled &= ~SURVEY_INFO_IN_USE;
356 sc->cur_survey = &sc->survey[pos];
358 memset(sc->cur_survey, 0, sizeof(struct survey_info));
359 sc->cur_survey->filled |= SURVEY_INFO_IN_USE;
360 } else if (!(sc->survey[pos].filled & SURVEY_INFO_IN_USE)) {
361 memset(&sc->survey[pos], 0, sizeof(struct survey_info));
364 hchan = &sc->sc_ah->channels[pos];
365 r = ath_reset_internal(sc, hchan);
370 * The most recent snapshot of channel->noisefloor for the old
371 * channel is only available after the hardware reset. Copy it to
372 * the survey stats now.
375 ath_update_survey_nf(sc, old_pos);
378 * Enable radar pulse detection if on a DFS channel. Spectral
379 * scanning and radar detection can not be used concurrently.
381 if (hw->conf.radar_enabled) {
384 /* set HW specific DFS configuration */
385 ath9k_hw_set_radar_params(ah);
386 rxfilter = ath9k_hw_getrxfilter(ah);
387 rxfilter |= ATH9K_RX_FILTER_PHYRADAR |
388 ATH9K_RX_FILTER_PHYERR;
389 ath9k_hw_setrxfilter(ah, rxfilter);
390 ath_dbg(common, DFS, "DFS enabled at freq %d\n",
393 /* perform spectral scan if requested. */
394 if (test_bit(SC_OP_SCANNING, &sc->sc_flags) &&
395 sc->spectral_mode == SPECTRAL_CHANSCAN)
396 ath9k_spectral_scan_trigger(hw);
402 static void ath_node_attach(struct ath_softc *sc, struct ieee80211_sta *sta,
403 struct ieee80211_vif *vif)
406 an = (struct ath_node *)sta->drv_priv;
412 ath_tx_node_init(sc, an);
414 if (sta->ht_cap.ht_supported) {
415 an->maxampdu = 1 << (IEEE80211_HT_MAX_AMPDU_FACTOR +
416 sta->ht_cap.ampdu_factor);
417 an->mpdudensity = ath9k_parse_mpdudensity(sta->ht_cap.ampdu_density);
421 static void ath_node_detach(struct ath_softc *sc, struct ieee80211_sta *sta)
423 struct ath_node *an = (struct ath_node *)sta->drv_priv;
424 ath_tx_node_cleanup(sc, an);
427 void ath9k_tasklet(unsigned long data)
429 struct ath_softc *sc = (struct ath_softc *)data;
430 struct ath_hw *ah = sc->sc_ah;
431 struct ath_common *common = ath9k_hw_common(ah);
432 enum ath_reset_type type;
434 u32 status = sc->intrstatus;
438 spin_lock(&sc->sc_pcu_lock);
440 if ((status & ATH9K_INT_FATAL) ||
441 (status & ATH9K_INT_BB_WATCHDOG)) {
443 if (status & ATH9K_INT_FATAL)
444 type = RESET_TYPE_FATAL_INT;
446 type = RESET_TYPE_BB_WATCHDOG;
448 ath9k_queue_reset(sc, type);
451 * Increment the ref. counter here so that
452 * interrupts are enabled in the reset routine.
454 atomic_inc(&ah->intr_ref_cnt);
455 ath_dbg(common, ANY, "FATAL: Skipping interrupts\n");
459 spin_lock_irqsave(&sc->sc_pm_lock, flags);
460 if ((status & ATH9K_INT_TSFOOR) && sc->ps_enabled) {
462 * TSF sync does not look correct; remain awake to sync with
465 ath_dbg(common, PS, "TSFOOR - Sync with next Beacon\n");
466 sc->ps_flags |= PS_WAIT_FOR_BEACON | PS_BEACON_SYNC;
468 spin_unlock_irqrestore(&sc->sc_pm_lock, flags);
470 if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
471 rxmask = (ATH9K_INT_RXHP | ATH9K_INT_RXLP | ATH9K_INT_RXEOL |
474 rxmask = (ATH9K_INT_RX | ATH9K_INT_RXEOL | ATH9K_INT_RXORN);
476 if (status & rxmask) {
477 /* Check for high priority Rx first */
478 if ((ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) &&
479 (status & ATH9K_INT_RXHP))
480 ath_rx_tasklet(sc, 0, true);
482 ath_rx_tasklet(sc, 0, false);
485 if (status & ATH9K_INT_TX) {
486 if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
487 ath_tx_edma_tasklet(sc);
492 ath9k_btcoex_handle_interrupt(sc, status);
494 /* re-enable hardware interrupt */
495 ath9k_hw_enable_interrupts(ah);
497 spin_unlock(&sc->sc_pcu_lock);
498 ath9k_ps_restore(sc);
501 irqreturn_t ath_isr(int irq, void *dev)
503 #define SCHED_INTR ( \
505 ATH9K_INT_BB_WATCHDOG | \
515 ATH9K_INT_GENTIMER | \
518 struct ath_softc *sc = dev;
519 struct ath_hw *ah = sc->sc_ah;
520 struct ath_common *common = ath9k_hw_common(ah);
521 enum ath9k_int status;
525 * The hardware is not ready/present, don't
526 * touch anything. Note this can happen early
527 * on if the IRQ is shared.
529 if (test_bit(SC_OP_INVALID, &sc->sc_flags))
532 /* shared irq, not for us */
534 if (!ath9k_hw_intrpend(ah))
537 if (test_bit(SC_OP_HW_RESET, &sc->sc_flags)) {
538 ath9k_hw_kill_interrupts(ah);
543 * Figure out the reason(s) for the interrupt. Note
544 * that the hal returns a pseudo-ISR that may include
545 * bits we haven't explicitly enabled so we mask the
546 * value to insure we only process bits we requested.
548 ath9k_hw_getisr(ah, &status); /* NB: clears ISR too */
549 status &= ah->imask; /* discard unasked-for bits */
552 * If there are no status bits set, then this interrupt was not
553 * for me (should have been caught above).
558 /* Cache the status */
559 sc->intrstatus = status;
561 if (status & SCHED_INTR)
565 * If a FATAL or RXORN interrupt is received, we have to reset the
568 if ((status & ATH9K_INT_FATAL) || ((status & ATH9K_INT_RXORN) &&
569 !(ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)))
572 if ((ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) &&
573 (status & ATH9K_INT_BB_WATCHDOG)) {
575 spin_lock(&common->cc_lock);
576 ath_hw_cycle_counters_update(common);
577 ar9003_hw_bb_watchdog_dbg_info(ah);
578 spin_unlock(&common->cc_lock);
582 #ifdef CONFIG_PM_SLEEP
583 if (status & ATH9K_INT_BMISS) {
584 if (atomic_read(&sc->wow_sleep_proc_intr) == 0) {
585 ath_dbg(common, ANY, "during WoW we got a BMISS\n");
586 atomic_inc(&sc->wow_got_bmiss_intr);
587 atomic_dec(&sc->wow_sleep_proc_intr);
591 if (status & ATH9K_INT_SWBA)
592 tasklet_schedule(&sc->bcon_tasklet);
594 if (status & ATH9K_INT_TXURN)
595 ath9k_hw_updatetxtriglevel(ah, true);
597 if (status & ATH9K_INT_RXEOL) {
598 ah->imask &= ~(ATH9K_INT_RXEOL | ATH9K_INT_RXORN);
599 ath9k_hw_set_interrupts(ah);
602 if (!(ah->caps.hw_caps & ATH9K_HW_CAP_AUTOSLEEP))
603 if (status & ATH9K_INT_TIM_TIMER) {
604 if (ATH_DBG_WARN_ON_ONCE(sc->ps_idle))
606 /* Clear RxAbort bit so that we can
608 ath9k_setpower(sc, ATH9K_PM_AWAKE);
609 spin_lock(&sc->sc_pm_lock);
610 ath9k_hw_setrxabort(sc->sc_ah, 0);
611 sc->ps_flags |= PS_WAIT_FOR_BEACON;
612 spin_unlock(&sc->sc_pm_lock);
617 ath_debug_stat_interrupt(sc, status);
620 /* turn off every interrupt */
621 ath9k_hw_disable_interrupts(ah);
622 tasklet_schedule(&sc->intr_tq);
630 static int ath_reset(struct ath_softc *sc)
635 r = ath_reset_internal(sc, NULL);
636 ath9k_ps_restore(sc);
641 void ath9k_queue_reset(struct ath_softc *sc, enum ath_reset_type type)
643 #ifdef CONFIG_ATH9K_DEBUGFS
644 RESET_STAT_INC(sc, type);
646 set_bit(SC_OP_HW_RESET, &sc->sc_flags);
647 ieee80211_queue_work(sc->hw, &sc->hw_reset_work);
650 void ath_reset_work(struct work_struct *work)
652 struct ath_softc *sc = container_of(work, struct ath_softc, hw_reset_work);
657 /**********************/
658 /* mac80211 callbacks */
659 /**********************/
661 static int ath9k_start(struct ieee80211_hw *hw)
663 struct ath_softc *sc = hw->priv;
664 struct ath_hw *ah = sc->sc_ah;
665 struct ath_common *common = ath9k_hw_common(ah);
666 struct ieee80211_channel *curchan = hw->conf.chandef.chan;
667 struct ath9k_channel *init_channel;
670 ath_dbg(common, CONFIG,
671 "Starting driver with initial channel: %d MHz\n",
672 curchan->center_freq);
675 mutex_lock(&sc->mutex);
677 init_channel = ath9k_cmn_get_channel(hw, ah, &hw->conf.chandef);
679 /* Reset SERDES registers */
680 ath9k_hw_configpcipowersave(ah, false);
683 * The basic interface to setting the hardware in a good
684 * state is ``reset''. On return the hardware is known to
685 * be powered up and with interrupts disabled. This must
686 * be followed by initialization of the appropriate bits
687 * and then setup of the interrupt mask.
689 spin_lock_bh(&sc->sc_pcu_lock);
691 atomic_set(&ah->intr_ref_cnt, -1);
693 r = ath9k_hw_reset(ah, init_channel, ah->caldata, false);
696 "Unable to reset hardware; reset status %d (freq %u MHz)\n",
697 r, curchan->center_freq);
698 ah->reset_power_on = false;
701 /* Setup our intr mask. */
702 ah->imask = ATH9K_INT_TX | ATH9K_INT_RXEOL |
703 ATH9K_INT_RXORN | ATH9K_INT_FATAL |
706 if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
707 ah->imask |= ATH9K_INT_RXHP |
709 ATH9K_INT_BB_WATCHDOG;
711 ah->imask |= ATH9K_INT_RX;
713 ah->imask |= ATH9K_INT_GTT;
715 if (ah->caps.hw_caps & ATH9K_HW_CAP_HT)
716 ah->imask |= ATH9K_INT_CST;
720 clear_bit(SC_OP_INVALID, &sc->sc_flags);
721 sc->sc_ah->is_monitoring = false;
723 if (!ath_complete_reset(sc, false))
724 ah->reset_power_on = false;
726 if (ah->led_pin >= 0) {
727 ath9k_hw_cfg_output(ah, ah->led_pin,
728 AR_GPIO_OUTPUT_MUX_AS_OUTPUT);
729 ath9k_hw_set_gpio(ah, ah->led_pin, 0);
733 * Reset key cache to sane defaults (all entries cleared) instead of
734 * semi-random values after suspend/resume.
736 ath9k_cmn_init_crypto(sc->sc_ah);
738 spin_unlock_bh(&sc->sc_pcu_lock);
740 mutex_unlock(&sc->mutex);
742 ath9k_ps_restore(sc);
747 static void ath9k_tx(struct ieee80211_hw *hw,
748 struct ieee80211_tx_control *control,
751 struct ath_softc *sc = hw->priv;
752 struct ath_common *common = ath9k_hw_common(sc->sc_ah);
753 struct ath_tx_control txctl;
754 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
757 if (sc->ps_enabled) {
759 * mac80211 does not set PM field for normal data frames, so we
760 * need to update that based on the current PS mode.
762 if (ieee80211_is_data(hdr->frame_control) &&
763 !ieee80211_is_nullfunc(hdr->frame_control) &&
764 !ieee80211_has_pm(hdr->frame_control)) {
766 "Add PM=1 for a TX frame while in PS mode\n");
767 hdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_PM);
771 if (unlikely(sc->sc_ah->power_mode == ATH9K_PM_NETWORK_SLEEP)) {
773 * We are using PS-Poll and mac80211 can request TX while in
774 * power save mode. Need to wake up hardware for the TX to be
775 * completed and if needed, also for RX of buffered frames.
778 spin_lock_irqsave(&sc->sc_pm_lock, flags);
779 if (!(sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_AUTOSLEEP))
780 ath9k_hw_setrxabort(sc->sc_ah, 0);
781 if (ieee80211_is_pspoll(hdr->frame_control)) {
783 "Sending PS-Poll to pick a buffered frame\n");
784 sc->ps_flags |= PS_WAIT_FOR_PSPOLL_DATA;
786 ath_dbg(common, PS, "Wake up to complete TX\n");
787 sc->ps_flags |= PS_WAIT_FOR_TX_ACK;
790 * The actual restore operation will happen only after
791 * the ps_flags bit is cleared. We are just dropping
792 * the ps_usecount here.
794 spin_unlock_irqrestore(&sc->sc_pm_lock, flags);
795 ath9k_ps_restore(sc);
799 * Cannot tx while the hardware is in full sleep, it first needs a full
800 * chip reset to recover from that
802 if (unlikely(sc->sc_ah->power_mode == ATH9K_PM_FULL_SLEEP)) {
803 ath_err(common, "TX while HW is in FULL_SLEEP mode\n");
807 memset(&txctl, 0, sizeof(struct ath_tx_control));
808 txctl.txq = sc->tx.txq_map[skb_get_queue_mapping(skb)];
809 txctl.sta = control->sta;
811 ath_dbg(common, XMIT, "transmitting packet, skb: %p\n", skb);
813 if (ath_tx_start(hw, skb, &txctl) != 0) {
814 ath_dbg(common, XMIT, "TX failed\n");
815 TX_STAT_INC(txctl.txq->axq_qnum, txfailed);
821 ieee80211_free_txskb(hw, skb);
824 static void ath9k_stop(struct ieee80211_hw *hw)
826 struct ath_softc *sc = hw->priv;
827 struct ath_hw *ah = sc->sc_ah;
828 struct ath_common *common = ath9k_hw_common(ah);
831 mutex_lock(&sc->mutex);
834 del_timer_sync(&sc->rx_poll_timer);
836 if (test_bit(SC_OP_INVALID, &sc->sc_flags)) {
837 ath_dbg(common, ANY, "Device not present\n");
838 mutex_unlock(&sc->mutex);
842 /* Ensure HW is awake when we try to shut it down. */
845 spin_lock_bh(&sc->sc_pcu_lock);
847 /* prevent tasklets to enable interrupts once we disable them */
848 ah->imask &= ~ATH9K_INT_GLOBAL;
850 /* make sure h/w will not generate any interrupt
851 * before setting the invalid flag. */
852 ath9k_hw_disable_interrupts(ah);
854 spin_unlock_bh(&sc->sc_pcu_lock);
856 /* we can now sync irq and kill any running tasklets, since we already
857 * disabled interrupts and not holding a spin lock */
858 synchronize_irq(sc->irq);
859 tasklet_kill(&sc->intr_tq);
860 tasklet_kill(&sc->bcon_tasklet);
862 prev_idle = sc->ps_idle;
865 spin_lock_bh(&sc->sc_pcu_lock);
867 if (ah->led_pin >= 0) {
868 ath9k_hw_set_gpio(ah, ah->led_pin, 1);
869 ath9k_hw_cfg_gpio_input(ah, ah->led_pin);
872 ath_prepare_reset(sc);
875 dev_kfree_skb_any(sc->rx.frag);
880 ah->curchan = ath9k_cmn_get_channel(hw, ah, &hw->conf.chandef);
882 ath9k_hw_reset(ah, ah->curchan, ah->caldata, false);
883 ath9k_hw_phy_disable(ah);
885 ath9k_hw_configpcipowersave(ah, true);
887 spin_unlock_bh(&sc->sc_pcu_lock);
889 ath9k_ps_restore(sc);
891 set_bit(SC_OP_INVALID, &sc->sc_flags);
892 sc->ps_idle = prev_idle;
894 mutex_unlock(&sc->mutex);
896 ath_dbg(common, CONFIG, "Driver halt\n");
899 static bool ath9k_uses_beacons(int type)
902 case NL80211_IFTYPE_AP:
903 case NL80211_IFTYPE_ADHOC:
904 case NL80211_IFTYPE_MESH_POINT:
911 static void ath9k_vif_iter(void *data, u8 *mac, struct ieee80211_vif *vif)
913 struct ath9k_vif_iter_data *iter_data = data;
916 if (iter_data->has_hw_macaddr) {
917 for (i = 0; i < ETH_ALEN; i++)
918 iter_data->mask[i] &=
919 ~(iter_data->hw_macaddr[i] ^ mac[i]);
921 memcpy(iter_data->hw_macaddr, mac, ETH_ALEN);
922 iter_data->has_hw_macaddr = true;
926 case NL80211_IFTYPE_AP:
929 case NL80211_IFTYPE_STATION:
930 iter_data->nstations++;
932 case NL80211_IFTYPE_ADHOC:
933 iter_data->nadhocs++;
935 case NL80211_IFTYPE_MESH_POINT:
936 iter_data->nmeshes++;
938 case NL80211_IFTYPE_WDS:
946 static void ath9k_sta_vif_iter(void *data, u8 *mac, struct ieee80211_vif *vif)
948 struct ath_softc *sc = data;
949 struct ath_vif *avp = (void *)vif->drv_priv;
951 if (vif->type != NL80211_IFTYPE_STATION)
954 if (avp->primary_sta_vif)
955 ath9k_set_assoc_state(sc, vif);
958 /* Called with sc->mutex held. */
959 void ath9k_calculate_iter_data(struct ieee80211_hw *hw,
960 struct ieee80211_vif *vif,
961 struct ath9k_vif_iter_data *iter_data)
963 struct ath_softc *sc = hw->priv;
964 struct ath_hw *ah = sc->sc_ah;
965 struct ath_common *common = ath9k_hw_common(ah);
968 * Pick the MAC address of the first interface as the new hardware
969 * MAC address. The hardware will use it together with the BSSID mask
970 * when matching addresses.
972 memset(iter_data, 0, sizeof(*iter_data));
973 memset(&iter_data->mask, 0xff, ETH_ALEN);
976 ath9k_vif_iter(iter_data, vif->addr, vif);
978 /* Get list of all active MAC addresses */
979 ieee80211_iterate_active_interfaces_atomic(
980 sc->hw, IEEE80211_IFACE_ITER_RESUME_ALL,
981 ath9k_vif_iter, iter_data);
983 memcpy(common->macaddr, iter_data->hw_macaddr, ETH_ALEN);
986 /* Called with sc->mutex held. */
987 static void ath9k_calculate_summary_state(struct ieee80211_hw *hw,
988 struct ieee80211_vif *vif)
990 struct ath_softc *sc = hw->priv;
991 struct ath_hw *ah = sc->sc_ah;
992 struct ath_common *common = ath9k_hw_common(ah);
993 struct ath9k_vif_iter_data iter_data;
994 enum nl80211_iftype old_opmode = ah->opmode;
996 ath9k_calculate_iter_data(hw, vif, &iter_data);
998 memcpy(common->bssidmask, iter_data.mask, ETH_ALEN);
999 ath_hw_setbssidmask(common);
1001 if (iter_data.naps > 0) {
1002 ath9k_hw_set_tsfadjust(ah, true);
1003 ah->opmode = NL80211_IFTYPE_AP;
1005 ath9k_hw_set_tsfadjust(ah, false);
1007 if (iter_data.nmeshes)
1008 ah->opmode = NL80211_IFTYPE_MESH_POINT;
1009 else if (iter_data.nwds)
1010 ah->opmode = NL80211_IFTYPE_AP;
1011 else if (iter_data.nadhocs)
1012 ah->opmode = NL80211_IFTYPE_ADHOC;
1014 ah->opmode = NL80211_IFTYPE_STATION;
1017 ath9k_hw_setopmode(ah);
1019 if ((iter_data.nstations + iter_data.nadhocs + iter_data.nmeshes) > 0)
1020 ah->imask |= ATH9K_INT_TSFOOR;
1022 ah->imask &= ~ATH9K_INT_TSFOOR;
1024 ath9k_hw_set_interrupts(ah);
1027 * If we are changing the opmode to STATION,
1028 * a beacon sync needs to be done.
1030 if (ah->opmode == NL80211_IFTYPE_STATION &&
1031 old_opmode == NL80211_IFTYPE_AP &&
1032 test_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags)) {
1033 ieee80211_iterate_active_interfaces_atomic(
1034 sc->hw, IEEE80211_IFACE_ITER_RESUME_ALL,
1035 ath9k_sta_vif_iter, sc);
1039 static int ath9k_add_interface(struct ieee80211_hw *hw,
1040 struct ieee80211_vif *vif)
1042 struct ath_softc *sc = hw->priv;
1043 struct ath_hw *ah = sc->sc_ah;
1044 struct ath_common *common = ath9k_hw_common(ah);
1045 struct ath_vif *avp = (void *)vif->drv_priv;
1046 struct ath_node *an = &avp->mcast_node;
1048 mutex_lock(&sc->mutex);
1050 if (config_enabled(CONFIG_ATH9K_TX99)) {
1051 if (sc->nvifs >= 1) {
1052 mutex_unlock(&sc->mutex);
1058 ath_dbg(common, CONFIG, "Attach a VIF of type: %d\n", vif->type);
1061 ath9k_ps_wakeup(sc);
1062 ath9k_calculate_summary_state(hw, vif);
1063 ath9k_ps_restore(sc);
1065 if (ath9k_uses_beacons(vif->type))
1066 ath9k_beacon_assign_slot(sc, vif);
1071 an->no_ps_filter = true;
1072 ath_tx_node_init(sc, an);
1074 mutex_unlock(&sc->mutex);
1078 static int ath9k_change_interface(struct ieee80211_hw *hw,
1079 struct ieee80211_vif *vif,
1080 enum nl80211_iftype new_type,
1083 struct ath_softc *sc = hw->priv;
1084 struct ath_common *common = ath9k_hw_common(sc->sc_ah);
1086 mutex_lock(&sc->mutex);
1088 if (config_enabled(CONFIG_ATH9K_TX99)) {
1089 mutex_unlock(&sc->mutex);
1093 ath_dbg(common, CONFIG, "Change Interface\n");
1095 if (ath9k_uses_beacons(vif->type))
1096 ath9k_beacon_remove_slot(sc, vif);
1098 vif->type = new_type;
1101 ath9k_ps_wakeup(sc);
1102 ath9k_calculate_summary_state(hw, vif);
1103 ath9k_ps_restore(sc);
1105 if (ath9k_uses_beacons(vif->type))
1106 ath9k_beacon_assign_slot(sc, vif);
1108 mutex_unlock(&sc->mutex);
1112 static void ath9k_remove_interface(struct ieee80211_hw *hw,
1113 struct ieee80211_vif *vif)
1115 struct ath_softc *sc = hw->priv;
1116 struct ath_common *common = ath9k_hw_common(sc->sc_ah);
1117 struct ath_vif *avp = (void *)vif->drv_priv;
1119 ath_dbg(common, CONFIG, "Detach Interface\n");
1121 mutex_lock(&sc->mutex);
1124 sc->tx99_vif = NULL;
1126 if (ath9k_uses_beacons(vif->type))
1127 ath9k_beacon_remove_slot(sc, vif);
1129 if (sc->csa_vif == vif)
1132 ath9k_ps_wakeup(sc);
1133 ath9k_calculate_summary_state(hw, NULL);
1134 ath9k_ps_restore(sc);
1136 ath_tx_node_cleanup(sc, &avp->mcast_node);
1138 mutex_unlock(&sc->mutex);
1141 static void ath9k_enable_ps(struct ath_softc *sc)
1143 struct ath_hw *ah = sc->sc_ah;
1144 struct ath_common *common = ath9k_hw_common(ah);
1146 if (config_enabled(CONFIG_ATH9K_TX99))
1149 sc->ps_enabled = true;
1150 if (!(ah->caps.hw_caps & ATH9K_HW_CAP_AUTOSLEEP)) {
1151 if ((ah->imask & ATH9K_INT_TIM_TIMER) == 0) {
1152 ah->imask |= ATH9K_INT_TIM_TIMER;
1153 ath9k_hw_set_interrupts(ah);
1155 ath9k_hw_setrxabort(ah, 1);
1157 ath_dbg(common, PS, "PowerSave enabled\n");
1160 static void ath9k_disable_ps(struct ath_softc *sc)
1162 struct ath_hw *ah = sc->sc_ah;
1163 struct ath_common *common = ath9k_hw_common(ah);
1165 if (config_enabled(CONFIG_ATH9K_TX99))
1168 sc->ps_enabled = false;
1169 ath9k_hw_setpower(ah, ATH9K_PM_AWAKE);
1170 if (!(ah->caps.hw_caps & ATH9K_HW_CAP_AUTOSLEEP)) {
1171 ath9k_hw_setrxabort(ah, 0);
1172 sc->ps_flags &= ~(PS_WAIT_FOR_BEACON |
1174 PS_WAIT_FOR_PSPOLL_DATA |
1175 PS_WAIT_FOR_TX_ACK);
1176 if (ah->imask & ATH9K_INT_TIM_TIMER) {
1177 ah->imask &= ~ATH9K_INT_TIM_TIMER;
1178 ath9k_hw_set_interrupts(ah);
1181 ath_dbg(common, PS, "PowerSave disabled\n");
1184 void ath9k_spectral_scan_trigger(struct ieee80211_hw *hw)
1186 struct ath_softc *sc = hw->priv;
1187 struct ath_hw *ah = sc->sc_ah;
1188 struct ath_common *common = ath9k_hw_common(ah);
1191 if (config_enabled(CONFIG_ATH9K_TX99))
1194 if (!ath9k_hw_ops(ah)->spectral_scan_trigger) {
1195 ath_err(common, "spectrum analyzer not implemented on this hardware\n");
1199 ath9k_ps_wakeup(sc);
1200 rxfilter = ath9k_hw_getrxfilter(ah);
1201 ath9k_hw_setrxfilter(ah, rxfilter |
1202 ATH9K_RX_FILTER_PHYRADAR |
1203 ATH9K_RX_FILTER_PHYERR);
1205 /* TODO: usually this should not be neccesary, but for some reason
1206 * (or in some mode?) the trigger must be called after the
1207 * configuration, otherwise the register will have its values reset
1208 * (on my ar9220 to value 0x01002310)
1210 ath9k_spectral_scan_config(hw, sc->spectral_mode);
1211 ath9k_hw_ops(ah)->spectral_scan_trigger(ah);
1212 ath9k_ps_restore(sc);
1215 int ath9k_spectral_scan_config(struct ieee80211_hw *hw,
1216 enum spectral_mode spectral_mode)
1218 struct ath_softc *sc = hw->priv;
1219 struct ath_hw *ah = sc->sc_ah;
1220 struct ath_common *common = ath9k_hw_common(ah);
1222 if (!ath9k_hw_ops(ah)->spectral_scan_trigger) {
1223 ath_err(common, "spectrum analyzer not implemented on this hardware\n");
1227 switch (spectral_mode) {
1228 case SPECTRAL_DISABLED:
1229 sc->spec_config.enabled = 0;
1231 case SPECTRAL_BACKGROUND:
1232 /* send endless samples.
1233 * TODO: is this really useful for "background"?
1235 sc->spec_config.endless = 1;
1236 sc->spec_config.enabled = 1;
1238 case SPECTRAL_CHANSCAN:
1239 case SPECTRAL_MANUAL:
1240 sc->spec_config.endless = 0;
1241 sc->spec_config.enabled = 1;
1247 ath9k_ps_wakeup(sc);
1248 ath9k_hw_ops(ah)->spectral_scan_config(ah, &sc->spec_config);
1249 ath9k_ps_restore(sc);
1251 sc->spectral_mode = spectral_mode;
1256 static int ath9k_config(struct ieee80211_hw *hw, u32 changed)
1258 struct ath_softc *sc = hw->priv;
1259 struct ath_hw *ah = sc->sc_ah;
1260 struct ath_common *common = ath9k_hw_common(ah);
1261 struct ieee80211_conf *conf = &hw->conf;
1262 bool reset_channel = false;
1264 ath9k_ps_wakeup(sc);
1265 mutex_lock(&sc->mutex);
1267 if (changed & IEEE80211_CONF_CHANGE_IDLE) {
1268 sc->ps_idle = !!(conf->flags & IEEE80211_CONF_IDLE);
1270 ath_cancel_work(sc);
1271 ath9k_stop_btcoex(sc);
1273 ath9k_start_btcoex(sc);
1275 * The chip needs a reset to properly wake up from
1278 reset_channel = ah->chip_fullsleep;
1283 * We just prepare to enable PS. We have to wait until our AP has
1284 * ACK'd our null data frame to disable RX otherwise we'll ignore
1285 * those ACKs and end up retransmitting the same null data frames.
1286 * IEEE80211_CONF_CHANGE_PS is only passed by mac80211 for STA mode.
1288 if (changed & IEEE80211_CONF_CHANGE_PS) {
1289 unsigned long flags;
1290 spin_lock_irqsave(&sc->sc_pm_lock, flags);
1291 if (conf->flags & IEEE80211_CONF_PS)
1292 ath9k_enable_ps(sc);
1294 ath9k_disable_ps(sc);
1295 spin_unlock_irqrestore(&sc->sc_pm_lock, flags);
1298 if (changed & IEEE80211_CONF_CHANGE_MONITOR) {
1299 if (conf->flags & IEEE80211_CONF_MONITOR) {
1300 ath_dbg(common, CONFIG, "Monitor mode is enabled\n");
1301 sc->sc_ah->is_monitoring = true;
1303 ath_dbg(common, CONFIG, "Monitor mode is disabled\n");
1304 sc->sc_ah->is_monitoring = false;
1308 if ((changed & IEEE80211_CONF_CHANGE_CHANNEL) || reset_channel) {
1309 if (ath_set_channel(sc, &hw->conf.chandef) < 0) {
1310 ath_err(common, "Unable to set channel\n");
1311 mutex_unlock(&sc->mutex);
1312 ath9k_ps_restore(sc);
1317 if (changed & IEEE80211_CONF_CHANGE_POWER) {
1318 ath_dbg(common, CONFIG, "Set power: %d\n", conf->power_level);
1319 sc->config.txpowlimit = 2 * conf->power_level;
1320 ath9k_cmn_update_txpow(ah, sc->curtxpow,
1321 sc->config.txpowlimit, &sc->curtxpow);
1324 mutex_unlock(&sc->mutex);
1325 ath9k_ps_restore(sc);
1330 #define SUPPORTED_FILTERS \
1331 (FIF_PROMISC_IN_BSS | \
1336 FIF_BCN_PRBRESP_PROMISC | \
1340 /* FIXME: sc->sc_full_reset ? */
1341 static void ath9k_configure_filter(struct ieee80211_hw *hw,
1342 unsigned int changed_flags,
1343 unsigned int *total_flags,
1346 struct ath_softc *sc = hw->priv;
1349 changed_flags &= SUPPORTED_FILTERS;
1350 *total_flags &= SUPPORTED_FILTERS;
1352 sc->rx.rxfilter = *total_flags;
1353 ath9k_ps_wakeup(sc);
1354 rfilt = ath_calcrxfilter(sc);
1355 ath9k_hw_setrxfilter(sc->sc_ah, rfilt);
1356 ath9k_ps_restore(sc);
1358 ath_dbg(ath9k_hw_common(sc->sc_ah), CONFIG, "Set HW RX filter: 0x%x\n",
1362 static int ath9k_sta_add(struct ieee80211_hw *hw,
1363 struct ieee80211_vif *vif,
1364 struct ieee80211_sta *sta)
1366 struct ath_softc *sc = hw->priv;
1367 struct ath_common *common = ath9k_hw_common(sc->sc_ah);
1368 struct ath_node *an = (struct ath_node *) sta->drv_priv;
1369 struct ieee80211_key_conf ps_key = { };
1372 ath_node_attach(sc, sta, vif);
1374 if (vif->type != NL80211_IFTYPE_AP &&
1375 vif->type != NL80211_IFTYPE_AP_VLAN)
1378 key = ath_key_config(common, vif, sta, &ps_key);
1385 static void ath9k_del_ps_key(struct ath_softc *sc,
1386 struct ieee80211_vif *vif,
1387 struct ieee80211_sta *sta)
1389 struct ath_common *common = ath9k_hw_common(sc->sc_ah);
1390 struct ath_node *an = (struct ath_node *) sta->drv_priv;
1391 struct ieee80211_key_conf ps_key = { .hw_key_idx = an->ps_key };
1396 ath_key_delete(common, &ps_key);
1400 static int ath9k_sta_remove(struct ieee80211_hw *hw,
1401 struct ieee80211_vif *vif,
1402 struct ieee80211_sta *sta)
1404 struct ath_softc *sc = hw->priv;
1406 ath9k_del_ps_key(sc, vif, sta);
1407 ath_node_detach(sc, sta);
1412 static void ath9k_sta_notify(struct ieee80211_hw *hw,
1413 struct ieee80211_vif *vif,
1414 enum sta_notify_cmd cmd,
1415 struct ieee80211_sta *sta)
1417 struct ath_softc *sc = hw->priv;
1418 struct ath_node *an = (struct ath_node *) sta->drv_priv;
1421 case STA_NOTIFY_SLEEP:
1422 an->sleeping = true;
1423 ath_tx_aggr_sleep(sta, sc, an);
1425 case STA_NOTIFY_AWAKE:
1426 an->sleeping = false;
1427 ath_tx_aggr_wakeup(sc, an);
1432 static int ath9k_conf_tx(struct ieee80211_hw *hw,
1433 struct ieee80211_vif *vif, u16 queue,
1434 const struct ieee80211_tx_queue_params *params)
1436 struct ath_softc *sc = hw->priv;
1437 struct ath_common *common = ath9k_hw_common(sc->sc_ah);
1438 struct ath_txq *txq;
1439 struct ath9k_tx_queue_info qi;
1442 if (queue >= IEEE80211_NUM_ACS)
1445 txq = sc->tx.txq_map[queue];
1447 ath9k_ps_wakeup(sc);
1448 mutex_lock(&sc->mutex);
1450 memset(&qi, 0, sizeof(struct ath9k_tx_queue_info));
1452 qi.tqi_aifs = params->aifs;
1453 qi.tqi_cwmin = params->cw_min;
1454 qi.tqi_cwmax = params->cw_max;
1455 qi.tqi_burstTime = params->txop * 32;
1457 ath_dbg(common, CONFIG,
1458 "Configure tx [queue/halq] [%d/%d], aifs: %d, cw_min: %d, cw_max: %d, txop: %d\n",
1459 queue, txq->axq_qnum, params->aifs, params->cw_min,
1460 params->cw_max, params->txop);
1462 ath_update_max_aggr_framelen(sc, queue, qi.tqi_burstTime);
1463 ret = ath_txq_update(sc, txq->axq_qnum, &qi);
1465 ath_err(common, "TXQ Update failed\n");
1467 mutex_unlock(&sc->mutex);
1468 ath9k_ps_restore(sc);
1473 static int ath9k_set_key(struct ieee80211_hw *hw,
1474 enum set_key_cmd cmd,
1475 struct ieee80211_vif *vif,
1476 struct ieee80211_sta *sta,
1477 struct ieee80211_key_conf *key)
1479 struct ath_softc *sc = hw->priv;
1480 struct ath_common *common = ath9k_hw_common(sc->sc_ah);
1483 if (ath9k_modparam_nohwcrypt)
1486 if ((vif->type == NL80211_IFTYPE_ADHOC ||
1487 vif->type == NL80211_IFTYPE_MESH_POINT) &&
1488 (key->cipher == WLAN_CIPHER_SUITE_TKIP ||
1489 key->cipher == WLAN_CIPHER_SUITE_CCMP) &&
1490 !(key->flags & IEEE80211_KEY_FLAG_PAIRWISE)) {
1492 * For now, disable hw crypto for the RSN IBSS group keys. This
1493 * could be optimized in the future to use a modified key cache
1494 * design to support per-STA RX GTK, but until that gets
1495 * implemented, use of software crypto for group addressed
1496 * frames is a acceptable to allow RSN IBSS to be used.
1501 mutex_lock(&sc->mutex);
1502 ath9k_ps_wakeup(sc);
1503 ath_dbg(common, CONFIG, "Set HW Key\n");
1508 ath9k_del_ps_key(sc, vif, sta);
1510 ret = ath_key_config(common, vif, sta, key);
1512 key->hw_key_idx = ret;
1513 /* push IV and Michael MIC generation to stack */
1514 key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
1515 if (key->cipher == WLAN_CIPHER_SUITE_TKIP)
1516 key->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIC;
1517 if (sc->sc_ah->sw_mgmt_crypto &&
1518 key->cipher == WLAN_CIPHER_SUITE_CCMP)
1519 key->flags |= IEEE80211_KEY_FLAG_SW_MGMT_TX;
1524 ath_key_delete(common, key);
1530 ath9k_ps_restore(sc);
1531 mutex_unlock(&sc->mutex);
1536 static void ath9k_set_assoc_state(struct ath_softc *sc,
1537 struct ieee80211_vif *vif)
1539 struct ath_common *common = ath9k_hw_common(sc->sc_ah);
1540 struct ath_vif *avp = (void *)vif->drv_priv;
1541 struct ieee80211_bss_conf *bss_conf = &vif->bss_conf;
1542 unsigned long flags;
1544 set_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags);
1545 avp->primary_sta_vif = true;
1548 * Set the AID, BSSID and do beacon-sync only when
1549 * the HW opmode is STATION.
1551 * But the primary bit is set above in any case.
1553 if (sc->sc_ah->opmode != NL80211_IFTYPE_STATION)
1556 memcpy(common->curbssid, bss_conf->bssid, ETH_ALEN);
1557 common->curaid = bss_conf->aid;
1558 ath9k_hw_write_associd(sc->sc_ah);
1560 sc->last_rssi = ATH_RSSI_DUMMY_MARKER;
1561 sc->sc_ah->stats.avgbrssi = ATH_RSSI_DUMMY_MARKER;
1563 spin_lock_irqsave(&sc->sc_pm_lock, flags);
1564 sc->ps_flags |= PS_BEACON_SYNC | PS_WAIT_FOR_BEACON;
1565 spin_unlock_irqrestore(&sc->sc_pm_lock, flags);
1567 if (ath9k_hw_mci_is_enabled(sc->sc_ah))
1568 ath9k_mci_update_wlan_channels(sc, false);
1570 ath_dbg(common, CONFIG,
1571 "Primary Station interface: %pM, BSSID: %pM\n",
1572 vif->addr, common->curbssid);
1575 static void ath9k_bss_assoc_iter(void *data, u8 *mac, struct ieee80211_vif *vif)
1577 struct ath_softc *sc = data;
1578 struct ieee80211_bss_conf *bss_conf = &vif->bss_conf;
1580 if (test_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags))
1583 if (bss_conf->assoc)
1584 ath9k_set_assoc_state(sc, vif);
1587 static void ath9k_bss_info_changed(struct ieee80211_hw *hw,
1588 struct ieee80211_vif *vif,
1589 struct ieee80211_bss_conf *bss_conf,
1593 (BSS_CHANGED_ASSOC | \
1594 BSS_CHANGED_IBSS | \
1595 BSS_CHANGED_BEACON_ENABLED)
1597 struct ath_softc *sc = hw->priv;
1598 struct ath_hw *ah = sc->sc_ah;
1599 struct ath_common *common = ath9k_hw_common(ah);
1600 struct ath_vif *avp = (void *)vif->drv_priv;
1603 ath9k_ps_wakeup(sc);
1604 mutex_lock(&sc->mutex);
1606 if (changed & BSS_CHANGED_ASSOC) {
1607 ath_dbg(common, CONFIG, "BSSID %pM Changed ASSOC %d\n",
1608 bss_conf->bssid, bss_conf->assoc);
1610 if (avp->primary_sta_vif && !bss_conf->assoc) {
1611 clear_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags);
1612 avp->primary_sta_vif = false;
1614 if (ah->opmode == NL80211_IFTYPE_STATION)
1615 clear_bit(SC_OP_BEACONS, &sc->sc_flags);
1618 ieee80211_iterate_active_interfaces_atomic(
1619 sc->hw, IEEE80211_IFACE_ITER_RESUME_ALL,
1620 ath9k_bss_assoc_iter, sc);
1622 if (!test_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags) &&
1623 ah->opmode == NL80211_IFTYPE_STATION) {
1624 memset(common->curbssid, 0, ETH_ALEN);
1626 ath9k_hw_write_associd(sc->sc_ah);
1627 if (ath9k_hw_mci_is_enabled(sc->sc_ah))
1628 ath9k_mci_update_wlan_channels(sc, true);
1632 if (changed & BSS_CHANGED_IBSS) {
1633 memcpy(common->curbssid, bss_conf->bssid, ETH_ALEN);
1634 common->curaid = bss_conf->aid;
1635 ath9k_hw_write_associd(sc->sc_ah);
1638 if ((changed & BSS_CHANGED_BEACON_ENABLED) ||
1639 (changed & BSS_CHANGED_BEACON_INT)) {
1640 if (ah->opmode == NL80211_IFTYPE_AP &&
1641 bss_conf->enable_beacon)
1642 ath9k_set_tsfadjust(sc, vif);
1643 if (ath9k_allow_beacon_config(sc, vif))
1644 ath9k_beacon_config(sc, vif, changed);
1647 if (changed & BSS_CHANGED_ERP_SLOT) {
1648 if (bss_conf->use_short_slot)
1652 if (vif->type == NL80211_IFTYPE_AP) {
1654 * Defer update, so that connected stations can adjust
1655 * their settings at the same time.
1656 * See beacon.c for more details
1658 sc->beacon.slottime = slottime;
1659 sc->beacon.updateslot = UPDATE;
1661 ah->slottime = slottime;
1662 ath9k_hw_init_global_settings(ah);
1666 if (changed & CHECK_ANI)
1669 mutex_unlock(&sc->mutex);
1670 ath9k_ps_restore(sc);
1675 static u64 ath9k_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
1677 struct ath_softc *sc = hw->priv;
1680 mutex_lock(&sc->mutex);
1681 ath9k_ps_wakeup(sc);
1682 tsf = ath9k_hw_gettsf64(sc->sc_ah);
1683 ath9k_ps_restore(sc);
1684 mutex_unlock(&sc->mutex);
1689 static void ath9k_set_tsf(struct ieee80211_hw *hw,
1690 struct ieee80211_vif *vif,
1693 struct ath_softc *sc = hw->priv;
1695 mutex_lock(&sc->mutex);
1696 ath9k_ps_wakeup(sc);
1697 ath9k_hw_settsf64(sc->sc_ah, tsf);
1698 ath9k_ps_restore(sc);
1699 mutex_unlock(&sc->mutex);
1702 static void ath9k_reset_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
1704 struct ath_softc *sc = hw->priv;
1706 mutex_lock(&sc->mutex);
1708 ath9k_ps_wakeup(sc);
1709 ath9k_hw_reset_tsf(sc->sc_ah);
1710 ath9k_ps_restore(sc);
1712 mutex_unlock(&sc->mutex);
1715 static int ath9k_ampdu_action(struct ieee80211_hw *hw,
1716 struct ieee80211_vif *vif,
1717 enum ieee80211_ampdu_mlme_action action,
1718 struct ieee80211_sta *sta,
1719 u16 tid, u16 *ssn, u8 buf_size)
1721 struct ath_softc *sc = hw->priv;
1725 mutex_lock(&sc->mutex);
1728 case IEEE80211_AMPDU_RX_START:
1730 case IEEE80211_AMPDU_RX_STOP:
1732 case IEEE80211_AMPDU_TX_START:
1733 ath9k_ps_wakeup(sc);
1734 ret = ath_tx_aggr_start(sc, sta, tid, ssn);
1736 ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid);
1737 ath9k_ps_restore(sc);
1739 case IEEE80211_AMPDU_TX_STOP_FLUSH:
1740 case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT:
1742 case IEEE80211_AMPDU_TX_STOP_CONT:
1743 ath9k_ps_wakeup(sc);
1744 ath_tx_aggr_stop(sc, sta, tid);
1746 ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid);
1747 ath9k_ps_restore(sc);
1749 case IEEE80211_AMPDU_TX_OPERATIONAL:
1750 ath9k_ps_wakeup(sc);
1751 ath_tx_aggr_resume(sc, sta, tid);
1752 ath9k_ps_restore(sc);
1755 ath_err(ath9k_hw_common(sc->sc_ah), "Unknown AMPDU action\n");
1758 mutex_unlock(&sc->mutex);
1763 static int ath9k_get_survey(struct ieee80211_hw *hw, int idx,
1764 struct survey_info *survey)
1766 struct ath_softc *sc = hw->priv;
1767 struct ath_common *common = ath9k_hw_common(sc->sc_ah);
1768 struct ieee80211_supported_band *sband;
1769 struct ieee80211_channel *chan;
1770 unsigned long flags;
1773 if (config_enabled(CONFIG_ATH9K_TX99))
1776 spin_lock_irqsave(&common->cc_lock, flags);
1778 ath_update_survey_stats(sc);
1780 sband = hw->wiphy->bands[IEEE80211_BAND_2GHZ];
1781 if (sband && idx >= sband->n_channels) {
1782 idx -= sband->n_channels;
1787 sband = hw->wiphy->bands[IEEE80211_BAND_5GHZ];
1789 if (!sband || idx >= sband->n_channels) {
1790 spin_unlock_irqrestore(&common->cc_lock, flags);
1794 chan = &sband->channels[idx];
1795 pos = chan->hw_value;
1796 memcpy(survey, &sc->survey[pos], sizeof(*survey));
1797 survey->channel = chan;
1798 spin_unlock_irqrestore(&common->cc_lock, flags);
1803 static void ath9k_set_coverage_class(struct ieee80211_hw *hw, u8 coverage_class)
1805 struct ath_softc *sc = hw->priv;
1806 struct ath_hw *ah = sc->sc_ah;
1808 if (config_enabled(CONFIG_ATH9K_TX99))
1811 mutex_lock(&sc->mutex);
1812 ah->coverage_class = coverage_class;
1814 ath9k_ps_wakeup(sc);
1815 ath9k_hw_init_global_settings(ah);
1816 ath9k_ps_restore(sc);
1818 mutex_unlock(&sc->mutex);
1821 static void ath9k_flush(struct ieee80211_hw *hw, u32 queues, bool drop)
1823 struct ath_softc *sc = hw->priv;
1824 struct ath_hw *ah = sc->sc_ah;
1825 struct ath_common *common = ath9k_hw_common(ah);
1826 int timeout = 200; /* ms */
1830 mutex_lock(&sc->mutex);
1831 cancel_delayed_work_sync(&sc->tx_complete_work);
1833 if (ah->ah_flags & AH_UNPLUGGED) {
1834 ath_dbg(common, ANY, "Device has been unplugged!\n");
1835 mutex_unlock(&sc->mutex);
1839 if (test_bit(SC_OP_INVALID, &sc->sc_flags)) {
1840 ath_dbg(common, ANY, "Device not present\n");
1841 mutex_unlock(&sc->mutex);
1845 for (j = 0; j < timeout; j++) {
1849 usleep_range(1000, 2000);
1851 for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) {
1852 if (!ATH_TXQ_SETUP(sc, i))
1855 npend = ath9k_has_pending_frames(sc, &sc->tx.txq[i]);
1866 ath9k_ps_wakeup(sc);
1867 spin_lock_bh(&sc->sc_pcu_lock);
1868 drain_txq = ath_drain_all_txq(sc);
1869 spin_unlock_bh(&sc->sc_pcu_lock);
1874 ath9k_ps_restore(sc);
1875 ieee80211_wake_queues(hw);
1878 ieee80211_queue_delayed_work(hw, &sc->tx_complete_work, 0);
1879 mutex_unlock(&sc->mutex);
1882 static bool ath9k_tx_frames_pending(struct ieee80211_hw *hw)
1884 struct ath_softc *sc = hw->priv;
1887 for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) {
1888 if (!ATH_TXQ_SETUP(sc, i))
1891 if (ath9k_has_pending_frames(sc, &sc->tx.txq[i]))
1897 static int ath9k_tx_last_beacon(struct ieee80211_hw *hw)
1899 struct ath_softc *sc = hw->priv;
1900 struct ath_hw *ah = sc->sc_ah;
1901 struct ieee80211_vif *vif;
1902 struct ath_vif *avp;
1904 struct ath_tx_status ts;
1905 bool edma = !!(ah->caps.hw_caps & ATH9K_HW_CAP_EDMA);
1908 vif = sc->beacon.bslot[0];
1912 if (!vif->bss_conf.enable_beacon)
1915 avp = (void *)vif->drv_priv;
1917 if (!sc->beacon.tx_processed && !edma) {
1918 tasklet_disable(&sc->bcon_tasklet);
1921 if (!bf || !bf->bf_mpdu)
1924 status = ath9k_hw_txprocdesc(ah, bf->bf_desc, &ts);
1925 if (status == -EINPROGRESS)
1928 sc->beacon.tx_processed = true;
1929 sc->beacon.tx_last = !(ts.ts_status & ATH9K_TXERR_MASK);
1932 tasklet_enable(&sc->bcon_tasklet);
1935 return sc->beacon.tx_last;
1938 static int ath9k_get_stats(struct ieee80211_hw *hw,
1939 struct ieee80211_low_level_stats *stats)
1941 struct ath_softc *sc = hw->priv;
1942 struct ath_hw *ah = sc->sc_ah;
1943 struct ath9k_mib_stats *mib_stats = &ah->ah_mibStats;
1945 stats->dot11ACKFailureCount = mib_stats->ackrcv_bad;
1946 stats->dot11RTSFailureCount = mib_stats->rts_bad;
1947 stats->dot11FCSErrorCount = mib_stats->fcs_bad;
1948 stats->dot11RTSSuccessCount = mib_stats->rts_good;
1952 static u32 fill_chainmask(u32 cap, u32 new)
1957 for (i = 0; cap && new; i++, cap >>= 1) {
1958 if (!(cap & BIT(0)))
1970 static bool validate_antenna_mask(struct ath_hw *ah, u32 val)
1972 if (AR_SREV_9300_20_OR_LATER(ah))
1975 switch (val & 0x7) {
1981 return (ah->caps.rx_chainmask == 1);
1987 static int ath9k_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant)
1989 struct ath_softc *sc = hw->priv;
1990 struct ath_hw *ah = sc->sc_ah;
1992 if (ah->caps.rx_chainmask != 1)
1995 if (!validate_antenna_mask(ah, rx_ant) || !tx_ant)
1998 sc->ant_rx = rx_ant;
1999 sc->ant_tx = tx_ant;
2001 if (ah->caps.rx_chainmask == 1)
2004 /* AR9100 runs into calibration issues if not all rx chains are enabled */
2005 if (AR_SREV_9100(ah))
2006 ah->rxchainmask = 0x7;
2008 ah->rxchainmask = fill_chainmask(ah->caps.rx_chainmask, rx_ant);
2010 ah->txchainmask = fill_chainmask(ah->caps.tx_chainmask, tx_ant);
2011 ath9k_reload_chainmask_settings(sc);
2016 static int ath9k_get_antenna(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant)
2018 struct ath_softc *sc = hw->priv;
2020 *tx_ant = sc->ant_tx;
2021 *rx_ant = sc->ant_rx;
2025 #ifdef CONFIG_PM_SLEEP
2027 static void ath9k_wow_map_triggers(struct ath_softc *sc,
2028 struct cfg80211_wowlan *wowlan,
2031 if (wowlan->disconnect)
2032 *wow_triggers |= AH_WOW_LINK_CHANGE |
2034 if (wowlan->magic_pkt)
2035 *wow_triggers |= AH_WOW_MAGIC_PATTERN_EN;
2037 if (wowlan->n_patterns)
2038 *wow_triggers |= AH_WOW_USER_PATTERN_EN;
2040 sc->wow_enabled = *wow_triggers;
2044 static void ath9k_wow_add_disassoc_deauth_pattern(struct ath_softc *sc)
2046 struct ath_hw *ah = sc->sc_ah;
2047 struct ath_common *common = ath9k_hw_common(ah);
2048 int pattern_count = 0;
2050 u8 dis_deauth_pattern[MAX_PATTERN_SIZE];
2051 u8 dis_deauth_mask[MAX_PATTERN_SIZE];
2053 memset(dis_deauth_pattern, 0, MAX_PATTERN_SIZE);
2054 memset(dis_deauth_mask, 0, MAX_PATTERN_SIZE);
2057 * Create Dissassociate / Deauthenticate packet filter
2059 * 2 bytes 2 byte 6 bytes 6 bytes 6 bytes
2060 * +--------------+----------+---------+--------+--------+----
2061 * + Frame Control+ Duration + DA + SA + BSSID +
2062 * +--------------+----------+---------+--------+--------+----
2064 * The above is the management frame format for disassociate/
2065 * deauthenticate pattern, from this we need to match the first byte
2066 * of 'Frame Control' and DA, SA, and BSSID fields
2067 * (skipping 2nd byte of FC and Duration feild.
2069 * Disassociate pattern
2070 * --------------------
2071 * Frame control = 00 00 1010
2072 * DA, SA, BSSID = x:x:x:x:x:x
2073 * Pattern will be A0000000 | x:x:x:x:x:x | x:x:x:x:x:x
2074 * | x:x:x:x:x:x -- 22 bytes
2076 * Deauthenticate pattern
2077 * ----------------------
2078 * Frame control = 00 00 1100
2079 * DA, SA, BSSID = x:x:x:x:x:x
2080 * Pattern will be C0000000 | x:x:x:x:x:x | x:x:x:x:x:x
2081 * | x:x:x:x:x:x -- 22 bytes
2084 /* Create Disassociate Pattern first */
2088 /* Fill out the mask with all FF's */
2090 for (i = 0; i < MAX_PATTERN_MASK_SIZE; i++)
2091 dis_deauth_mask[i] = 0xff;
2093 /* copy the first byte of frame control field */
2094 dis_deauth_pattern[byte_cnt] = 0xa0;
2097 /* skip 2nd byte of frame control and Duration field */
2101 * need not match the destination mac address, it can be a broadcast
2102 * mac address or an unicast to this station
2106 /* copy the source mac address */
2107 memcpy((dis_deauth_pattern + byte_cnt), common->curbssid, ETH_ALEN);
2111 /* copy the bssid, its same as the source mac address */
2113 memcpy((dis_deauth_pattern + byte_cnt), common->curbssid, ETH_ALEN);
2115 /* Create Disassociate pattern mask */
2117 dis_deauth_mask[0] = 0xfe;
2118 dis_deauth_mask[1] = 0x03;
2119 dis_deauth_mask[2] = 0xc0;
2121 ath_dbg(common, WOW, "Adding disassoc/deauth patterns for WoW\n");
2123 ath9k_hw_wow_apply_pattern(ah, dis_deauth_pattern, dis_deauth_mask,
2124 pattern_count, byte_cnt);
2128 * for de-authenticate pattern, only the first byte of the frame
2129 * control field gets changed from 0xA0 to 0xC0
2131 dis_deauth_pattern[0] = 0xC0;
2133 ath9k_hw_wow_apply_pattern(ah, dis_deauth_pattern, dis_deauth_mask,
2134 pattern_count, byte_cnt);
2138 static void ath9k_wow_add_pattern(struct ath_softc *sc,
2139 struct cfg80211_wowlan *wowlan)
2141 struct ath_hw *ah = sc->sc_ah;
2142 struct ath9k_wow_pattern *wow_pattern = NULL;
2143 struct cfg80211_pkt_pattern *patterns = wowlan->patterns;
2147 if (!wowlan->n_patterns)
2151 * Add the new user configured patterns
2153 for (i = 0; i < wowlan->n_patterns; i++) {
2155 wow_pattern = kzalloc(sizeof(*wow_pattern), GFP_KERNEL);
2161 * TODO: convert the generic user space pattern to
2162 * appropriate chip specific/802.11 pattern.
2165 mask_len = DIV_ROUND_UP(wowlan->patterns[i].pattern_len, 8);
2166 memset(wow_pattern->pattern_bytes, 0, MAX_PATTERN_SIZE);
2167 memset(wow_pattern->mask_bytes, 0, MAX_PATTERN_SIZE);
2168 memcpy(wow_pattern->pattern_bytes, patterns[i].pattern,
2169 patterns[i].pattern_len);
2170 memcpy(wow_pattern->mask_bytes, patterns[i].mask, mask_len);
2171 wow_pattern->pattern_len = patterns[i].pattern_len;
2174 * just need to take care of deauth and disssoc pattern,
2175 * make sure we don't overwrite them.
2178 ath9k_hw_wow_apply_pattern(ah, wow_pattern->pattern_bytes,
2179 wow_pattern->mask_bytes,
2181 wow_pattern->pattern_len);
2188 static int ath9k_suspend(struct ieee80211_hw *hw,
2189 struct cfg80211_wowlan *wowlan)
2191 struct ath_softc *sc = hw->priv;
2192 struct ath_hw *ah = sc->sc_ah;
2193 struct ath_common *common = ath9k_hw_common(ah);
2194 u32 wow_triggers_enabled = 0;
2197 mutex_lock(&sc->mutex);
2199 ath_cancel_work(sc);
2201 del_timer_sync(&sc->rx_poll_timer);
2203 if (test_bit(SC_OP_INVALID, &sc->sc_flags)) {
2204 ath_dbg(common, ANY, "Device not present\n");
2209 if (WARN_ON(!wowlan)) {
2210 ath_dbg(common, WOW, "None of the WoW triggers enabled\n");
2215 if (!device_can_wakeup(sc->dev)) {
2216 ath_dbg(common, WOW, "device_can_wakeup failed, WoW is not enabled\n");
2222 * none of the sta vifs are associated
2223 * and we are not currently handling multivif
2224 * cases, for instance we have to seperately
2225 * configure 'keep alive frame' for each
2229 if (!test_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags)) {
2230 ath_dbg(common, WOW, "None of the STA vifs are associated\n");
2235 if (sc->nvifs > 1) {
2236 ath_dbg(common, WOW, "WoW for multivif is not yet supported\n");
2241 ath9k_wow_map_triggers(sc, wowlan, &wow_triggers_enabled);
2243 ath_dbg(common, WOW, "WoW triggers enabled 0x%x\n",
2244 wow_triggers_enabled);
2246 ath9k_ps_wakeup(sc);
2248 ath9k_stop_btcoex(sc);
2251 * Enable wake up on recieving disassoc/deauth
2254 ath9k_wow_add_disassoc_deauth_pattern(sc);
2256 if (wow_triggers_enabled & AH_WOW_USER_PATTERN_EN)
2257 ath9k_wow_add_pattern(sc, wowlan);
2259 spin_lock_bh(&sc->sc_pcu_lock);
2261 * To avoid false wake, we enable beacon miss interrupt only
2262 * when we go to sleep. We save the current interrupt mask
2263 * so we can restore it after the system wakes up
2265 sc->wow_intr_before_sleep = ah->imask;
2266 ah->imask &= ~ATH9K_INT_GLOBAL;
2267 ath9k_hw_disable_interrupts(ah);
2268 ah->imask = ATH9K_INT_BMISS | ATH9K_INT_GLOBAL;
2269 ath9k_hw_set_interrupts(ah);
2270 ath9k_hw_enable_interrupts(ah);
2272 spin_unlock_bh(&sc->sc_pcu_lock);
2275 * we can now sync irq and kill any running tasklets, since we already
2276 * disabled interrupts and not holding a spin lock
2278 synchronize_irq(sc->irq);
2279 tasklet_kill(&sc->intr_tq);
2281 ath9k_hw_wow_enable(ah, wow_triggers_enabled);
2283 ath9k_ps_restore(sc);
2284 ath_dbg(common, ANY, "WoW enabled in ath9k\n");
2285 atomic_inc(&sc->wow_sleep_proc_intr);
2288 mutex_unlock(&sc->mutex);
2292 static int ath9k_resume(struct ieee80211_hw *hw)
2294 struct ath_softc *sc = hw->priv;
2295 struct ath_hw *ah = sc->sc_ah;
2296 struct ath_common *common = ath9k_hw_common(ah);
2299 mutex_lock(&sc->mutex);
2301 ath9k_ps_wakeup(sc);
2303 spin_lock_bh(&sc->sc_pcu_lock);
2305 ath9k_hw_disable_interrupts(ah);
2306 ah->imask = sc->wow_intr_before_sleep;
2307 ath9k_hw_set_interrupts(ah);
2308 ath9k_hw_enable_interrupts(ah);
2310 spin_unlock_bh(&sc->sc_pcu_lock);
2312 wow_status = ath9k_hw_wow_wakeup(ah);
2314 if (atomic_read(&sc->wow_got_bmiss_intr) == 0) {
2316 * some devices may not pick beacon miss
2317 * as the reason they woke up so we add
2318 * that here for that shortcoming.
2320 wow_status |= AH_WOW_BEACON_MISS;
2321 atomic_dec(&sc->wow_got_bmiss_intr);
2322 ath_dbg(common, ANY, "Beacon miss interrupt picked up during WoW sleep\n");
2325 atomic_dec(&sc->wow_sleep_proc_intr);
2328 ath_dbg(common, ANY, "Waking up due to WoW triggers %s with WoW status = %x\n",
2329 ath9k_hw_wow_event_to_string(wow_status), wow_status);
2332 ath_restart_work(sc);
2333 ath9k_start_btcoex(sc);
2335 ath9k_ps_restore(sc);
2336 mutex_unlock(&sc->mutex);
2341 static void ath9k_set_wakeup(struct ieee80211_hw *hw, bool enabled)
2343 struct ath_softc *sc = hw->priv;
2345 mutex_lock(&sc->mutex);
2346 device_init_wakeup(sc->dev, 1);
2347 device_set_wakeup_enable(sc->dev, enabled);
2348 mutex_unlock(&sc->mutex);
2352 static void ath9k_sw_scan_start(struct ieee80211_hw *hw)
2354 struct ath_softc *sc = hw->priv;
2355 set_bit(SC_OP_SCANNING, &sc->sc_flags);
2358 static void ath9k_sw_scan_complete(struct ieee80211_hw *hw)
2360 struct ath_softc *sc = hw->priv;
2361 clear_bit(SC_OP_SCANNING, &sc->sc_flags);
2364 static void ath9k_channel_switch_beacon(struct ieee80211_hw *hw,
2365 struct ieee80211_vif *vif,
2366 struct cfg80211_chan_def *chandef)
2368 struct ath_softc *sc = hw->priv;
2370 /* mac80211 does not support CSA in multi-if cases (yet) */
2371 if (WARN_ON(sc->csa_vif))
2377 static void ath9k_tx99_stop(struct ath_softc *sc)
2379 struct ath_hw *ah = sc->sc_ah;
2380 struct ath_common *common = ath9k_hw_common(ah);
2382 ath_drain_all_txq(sc);
2385 ath9k_hw_set_interrupts(ah);
2386 ath9k_hw_enable_interrupts(ah);
2388 ieee80211_wake_queues(sc->hw);
2390 kfree_skb(sc->tx99_skb);
2391 sc->tx99_skb = NULL;
2392 sc->tx99_state = false;
2394 ath9k_hw_tx99_stop(sc->sc_ah);
2395 ath_dbg(common, XMIT, "TX99 stopped\n");
2398 static struct sk_buff *ath9k_build_tx99_skb(struct ath_softc *sc)
2400 static u8 PN9Data[] = {0xff, 0x87, 0xb8, 0x59, 0xb7, 0xa1, 0xcc, 0x24,
2401 0x57, 0x5e, 0x4b, 0x9c, 0x0e, 0xe9, 0xea, 0x50,
2402 0x2a, 0xbe, 0xb4, 0x1b, 0xb6, 0xb0, 0x5d, 0xf1,
2403 0xe6, 0x9a, 0xe3, 0x45, 0xfd, 0x2c, 0x53, 0x18,
2404 0x0c, 0xca, 0xc9, 0xfb, 0x49, 0x37, 0xe5, 0xa8,
2405 0x51, 0x3b, 0x2f, 0x61, 0xaa, 0x72, 0x18, 0x84,
2406 0x02, 0x23, 0x23, 0xab, 0x63, 0x89, 0x51, 0xb3,
2407 0xe7, 0x8b, 0x72, 0x90, 0x4c, 0xe8, 0xfb, 0xc0};
2409 struct ieee80211_hw *hw = sc->hw;
2410 struct ieee80211_hdr *hdr;
2411 struct ieee80211_tx_info *tx_info;
2412 struct sk_buff *skb;
2414 skb = alloc_skb(len, GFP_KERNEL);
2420 memset(skb->data, 0, len);
2422 hdr = (struct ieee80211_hdr *)skb->data;
2423 hdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_DATA);
2424 hdr->duration_id = 0;
2426 memcpy(hdr->addr1, hw->wiphy->perm_addr, ETH_ALEN);
2427 memcpy(hdr->addr2, hw->wiphy->perm_addr, ETH_ALEN);
2428 memcpy(hdr->addr3, hw->wiphy->perm_addr, ETH_ALEN);
2430 hdr->seq_ctrl |= cpu_to_le16(sc->tx.seq_no);
2432 tx_info = IEEE80211_SKB_CB(skb);
2433 memset(tx_info, 0, sizeof(*tx_info));
2434 tx_info->band = hw->conf.chandef.chan->band;
2435 tx_info->flags = IEEE80211_TX_CTL_NO_ACK;
2436 tx_info->control.vif = sc->tx99_vif;
2438 memcpy(skb->data + sizeof(*hdr), PN9Data, sizeof(PN9Data));
2443 void ath9k_tx99_deinit(struct ath_softc *sc)
2447 ath9k_ps_wakeup(sc);
2448 ath9k_tx99_stop(sc);
2449 ath9k_ps_restore(sc);
2452 int ath9k_tx99_init(struct ath_softc *sc)
2454 struct ieee80211_hw *hw = sc->hw;
2455 struct ath_hw *ah = sc->sc_ah;
2456 struct ath_common *common = ath9k_hw_common(ah);
2457 struct ath_tx_control txctl;
2460 if (sc->sc_flags & SC_OP_INVALID) {
2462 "driver is in invalid state unable to use TX99");
2466 sc->tx99_skb = ath9k_build_tx99_skb(sc);
2470 memset(&txctl, 0, sizeof(txctl));
2471 txctl.txq = sc->tx.txq_map[IEEE80211_AC_VO];
2475 ath9k_ps_wakeup(sc);
2477 ath9k_hw_disable_interrupts(ah);
2478 atomic_set(&ah->intr_ref_cnt, -1);
2479 ath_drain_all_txq(sc);
2482 sc->tx99_state = true;
2484 ieee80211_stop_queues(hw);
2486 if (sc->tx99_power == MAX_RATE_POWER + 1)
2487 sc->tx99_power = MAX_RATE_POWER;
2489 ath9k_hw_tx99_set_txpower(ah, sc->tx99_power);
2490 r = ath9k_tx99_send(sc, sc->tx99_skb, &txctl);
2492 ath_dbg(common, XMIT, "Failed to xmit TX99 skb\n");
2496 ath_dbg(common, XMIT, "TX99 xmit started using %d ( %ddBm)\n",
2498 sc->tx99_power / 2);
2500 /* We leave the harware awake as it will be chugging on */
2505 struct ieee80211_ops ath9k_ops = {
2507 .start = ath9k_start,
2509 .add_interface = ath9k_add_interface,
2510 .change_interface = ath9k_change_interface,
2511 .remove_interface = ath9k_remove_interface,
2512 .config = ath9k_config,
2513 .configure_filter = ath9k_configure_filter,
2514 .sta_add = ath9k_sta_add,
2515 .sta_remove = ath9k_sta_remove,
2516 .sta_notify = ath9k_sta_notify,
2517 .conf_tx = ath9k_conf_tx,
2518 .bss_info_changed = ath9k_bss_info_changed,
2519 .set_key = ath9k_set_key,
2520 .get_tsf = ath9k_get_tsf,
2521 .set_tsf = ath9k_set_tsf,
2522 .reset_tsf = ath9k_reset_tsf,
2523 .ampdu_action = ath9k_ampdu_action,
2524 .get_survey = ath9k_get_survey,
2525 .rfkill_poll = ath9k_rfkill_poll_state,
2526 .set_coverage_class = ath9k_set_coverage_class,
2527 .flush = ath9k_flush,
2528 .tx_frames_pending = ath9k_tx_frames_pending,
2529 .tx_last_beacon = ath9k_tx_last_beacon,
2530 .release_buffered_frames = ath9k_release_buffered_frames,
2531 .get_stats = ath9k_get_stats,
2532 .set_antenna = ath9k_set_antenna,
2533 .get_antenna = ath9k_get_antenna,
2535 #ifdef CONFIG_PM_SLEEP
2536 .suspend = ath9k_suspend,
2537 .resume = ath9k_resume,
2538 .set_wakeup = ath9k_set_wakeup,
2541 #ifdef CONFIG_ATH9K_DEBUGFS
2542 .get_et_sset_count = ath9k_get_et_sset_count,
2543 .get_et_stats = ath9k_get_et_stats,
2544 .get_et_strings = ath9k_get_et_strings,
2547 #if defined(CONFIG_MAC80211_DEBUGFS) && defined(CONFIG_ATH9K_DEBUGFS)
2548 .sta_add_debugfs = ath9k_sta_add_debugfs,
2550 .sw_scan_start = ath9k_sw_scan_start,
2551 .sw_scan_complete = ath9k_sw_scan_complete,
2552 .channel_switch_beacon = ath9k_channel_switch_beacon,