Lines Matching refs:sc
60 static bool ath9k_has_pending_frames(struct ath_softc *sc, struct ath_txq *txq, in ath9k_has_pending_frames() argument
78 acq = &sc->cur_chan->acq[txq->mac80211_qnum]; in ath9k_has_pending_frames()
87 static bool ath9k_setpower(struct ath_softc *sc, enum ath9k_power_mode mode) in ath9k_setpower() argument
92 spin_lock_irqsave(&sc->sc_pm_lock, flags); in ath9k_setpower()
93 ret = ath9k_hw_setpower(sc->sc_ah, mode); in ath9k_setpower()
94 spin_unlock_irqrestore(&sc->sc_pm_lock, flags); in ath9k_setpower()
101 struct ath_softc *sc = from_timer(sc, t, sleep_timer); in ath_ps_full_sleep() local
102 struct ath_common *common = ath9k_hw_common(sc->sc_ah); in ath_ps_full_sleep()
110 ath9k_hw_setrxabort(sc->sc_ah, 1); in ath_ps_full_sleep()
111 ath9k_hw_stopdmarecv(sc->sc_ah, &reset); in ath_ps_full_sleep()
113 ath9k_hw_setpower(sc->sc_ah, ATH9K_PM_FULL_SLEEP); in ath_ps_full_sleep()
116 void ath9k_ps_wakeup(struct ath_softc *sc) in ath9k_ps_wakeup() argument
118 struct ath_common *common = ath9k_hw_common(sc->sc_ah); in ath9k_ps_wakeup()
122 spin_lock_irqsave(&sc->sc_pm_lock, flags); in ath9k_ps_wakeup()
123 if (++sc->ps_usecount != 1) in ath9k_ps_wakeup()
126 del_timer_sync(&sc->sleep_timer); in ath9k_ps_wakeup()
127 power_mode = sc->sc_ah->power_mode; in ath9k_ps_wakeup()
128 ath9k_hw_setpower(sc->sc_ah, ATH9K_PM_AWAKE); in ath9k_ps_wakeup()
143 spin_unlock_irqrestore(&sc->sc_pm_lock, flags); in ath9k_ps_wakeup()
146 void ath9k_ps_restore(struct ath_softc *sc) in ath9k_ps_restore() argument
148 struct ath_common *common = ath9k_hw_common(sc->sc_ah); in ath9k_ps_restore()
152 spin_lock_irqsave(&sc->sc_pm_lock, flags); in ath9k_ps_restore()
153 if (--sc->ps_usecount != 0) in ath9k_ps_restore()
156 if (sc->ps_idle) { in ath9k_ps_restore()
157 mod_timer(&sc->sleep_timer, jiffies + HZ / 10); in ath9k_ps_restore()
161 if (sc->ps_enabled && in ath9k_ps_restore()
162 !(sc->ps_flags & (PS_WAIT_FOR_BEACON | in ath9k_ps_restore()
168 if (ath9k_hw_btcoex_is_enabled(sc->sc_ah)) in ath9k_ps_restore()
169 ath9k_btcoex_stop_gen_timer(sc); in ath9k_ps_restore()
178 ath9k_hw_setpower(sc->sc_ah, mode); in ath9k_ps_restore()
181 spin_unlock_irqrestore(&sc->sc_pm_lock, flags); in ath9k_ps_restore()
184 static void __ath_cancel_work(struct ath_softc *sc) in __ath_cancel_work() argument
186 cancel_work_sync(&sc->paprd_work); in __ath_cancel_work()
187 cancel_delayed_work_sync(&sc->hw_check_work); in __ath_cancel_work()
188 cancel_delayed_work_sync(&sc->hw_pll_work); in __ath_cancel_work()
191 if (ath9k_hw_mci_is_enabled(sc->sc_ah)) in __ath_cancel_work()
192 cancel_work_sync(&sc->mci_work); in __ath_cancel_work()
196 void ath_cancel_work(struct ath_softc *sc) in ath_cancel_work() argument
198 __ath_cancel_work(sc); in ath_cancel_work()
199 cancel_work_sync(&sc->hw_reset_work); in ath_cancel_work()
202 void ath_restart_work(struct ath_softc *sc) in ath_restart_work() argument
204 ieee80211_queue_delayed_work(sc->hw, &sc->hw_check_work, in ath_restart_work()
207 if (AR_SREV_9340(sc->sc_ah) || AR_SREV_9330(sc->sc_ah)) in ath_restart_work()
208 ieee80211_queue_delayed_work(sc->hw, &sc->hw_pll_work, in ath_restart_work()
211 ath_start_ani(sc); in ath_restart_work()
214 static bool ath_prepare_reset(struct ath_softc *sc) in ath_prepare_reset() argument
216 struct ath_hw *ah = sc->sc_ah; in ath_prepare_reset()
219 ieee80211_stop_queues(sc->hw); in ath_prepare_reset()
220 ath_stop_ani(sc); in ath_prepare_reset()
224 ret &= ath_stoprecv(sc); in ath_prepare_reset()
225 ret &= ath_drain_all_txq(sc); in ath_prepare_reset()
227 ret &= ath_drain_all_txq(sc); in ath_prepare_reset()
228 ret &= ath_stoprecv(sc); in ath_prepare_reset()
234 static bool ath_complete_reset(struct ath_softc *sc, bool start) in ath_complete_reset() argument
236 struct ath_hw *ah = sc->sc_ah; in ath_complete_reset()
240 ath9k_calculate_summary_state(sc, sc->cur_chan); in ath_complete_reset()
241 ath_startrecv(sc); in ath_complete_reset()
242 ath9k_cmn_update_txpow(ah, sc->cur_chan->cur_txpower, in ath_complete_reset()
243 sc->cur_chan->txpower, in ath_complete_reset()
244 &sc->cur_chan->cur_txpower); in ath_complete_reset()
247 if (!sc->cur_chan->offchannel && start) { in ath_complete_reset()
249 if (sc->cur_chan->tsf_val) { in ath_complete_reset()
252 offset = ath9k_hw_get_tsf_offset(&sc->cur_chan->tsf_ts, in ath_complete_reset()
254 ath9k_hw_settsf64(ah, sc->cur_chan->tsf_val + offset); in ath_complete_reset()
263 spin_lock_irqsave(&sc->sc_pm_lock, flags); in ath_complete_reset()
264 sc->ps_flags |= PS_BEACON_SYNC | PS_WAIT_FOR_BEACON; in ath_complete_reset()
265 spin_unlock_irqrestore(&sc->sc_pm_lock, flags); in ath_complete_reset()
267 ath9k_set_beacon(sc); in ath_complete_reset()
270 ath_restart_work(sc); in ath_complete_reset()
271 ath_txq_schedule_all(sc); in ath_complete_reset()
274 sc->gtt_cnt = 0; in ath_complete_reset()
278 ieee80211_wake_queues(sc->hw); in ath_complete_reset()
279 ath9k_p2p_ps_timer(sc); in ath_complete_reset()
284 static int ath_reset_internal(struct ath_softc *sc, struct ath9k_channel *hchan) in ath_reset_internal() argument
286 struct ath_hw *ah = sc->sc_ah; in ath_reset_internal()
292 __ath_cancel_work(sc); in ath_reset_internal()
294 disable_irq(sc->irq); in ath_reset_internal()
295 tasklet_disable(&sc->intr_tq); in ath_reset_internal()
296 tasklet_disable(&sc->bcon_tasklet); in ath_reset_internal()
297 spin_lock_bh(&sc->sc_pcu_lock); in ath_reset_internal()
299 if (!sc->cur_chan->offchannel) { in ath_reset_internal()
301 caldata = &sc->cur_chan->caldata; in ath_reset_internal()
311 hchan = ath9k_cmn_get_channel(sc->hw, ah, &sc->cur_chan->chandef); in ath_reset_internal()
314 if (!ath_prepare_reset(sc)) in ath_reset_internal()
320 spin_lock_bh(&sc->chan_lock); in ath_reset_internal()
321 sc->cur_chandef = sc->cur_chan->chandef; in ath_reset_internal()
322 spin_unlock_bh(&sc->chan_lock); in ath_reset_internal()
333 ath9k_queue_reset(sc, RESET_TYPE_BB_HANG); in ath_reset_internal()
338 if (ath9k_hw_mci_is_enabled(sc->sc_ah) && in ath_reset_internal()
339 sc->cur_chan->offchannel) in ath_reset_internal()
340 ath9k_mci_set_txpower(sc, true, false); in ath_reset_internal()
342 if (!ath_complete_reset(sc, true)) in ath_reset_internal()
346 enable_irq(sc->irq); in ath_reset_internal()
347 spin_unlock_bh(&sc->sc_pcu_lock); in ath_reset_internal()
348 tasklet_enable(&sc->bcon_tasklet); in ath_reset_internal()
349 tasklet_enable(&sc->intr_tq); in ath_reset_internal()
354 static void ath_node_attach(struct ath_softc *sc, struct ieee80211_sta *sta, in ath_node_attach() argument
360 an->sc = sc; in ath_node_attach()
365 ath_tx_node_init(sc, an); in ath_node_attach()
367 ath_dynack_node_init(sc->sc_ah, an); in ath_node_attach()
370 static void ath_node_detach(struct ath_softc *sc, struct ieee80211_sta *sta) in ath_node_detach() argument
373 ath_tx_node_cleanup(sc, an); in ath_node_detach()
375 ath_dynack_node_deinit(sc->sc_ah, an); in ath_node_detach()
380 struct ath_softc *sc = from_tasklet(sc, t, intr_tq); in ath9k_tasklet() local
381 struct ath_hw *ah = sc->sc_ah; in ath9k_tasklet()
388 spin_lock_irqsave(&sc->intr_lock, flags); in ath9k_tasklet()
389 status = sc->intrstatus; in ath9k_tasklet()
390 sc->intrstatus = 0; in ath9k_tasklet()
391 spin_unlock_irqrestore(&sc->intr_lock, flags); in ath9k_tasklet()
393 ath9k_ps_wakeup(sc); in ath9k_tasklet()
394 spin_lock(&sc->sc_pcu_lock); in ath9k_tasklet()
398 ath9k_queue_reset(sc, type); in ath9k_tasklet()
412 ath9k_queue_reset(sc, type); in ath9k_tasklet()
421 sc->gtt_cnt++; in ath9k_tasklet()
423 if ((sc->gtt_cnt >= MAX_GTT_CNT) && !ath9k_hw_check_alive(ah)) { in ath9k_tasklet()
425 ath9k_queue_reset(sc, type); in ath9k_tasklet()
432 spin_lock_irqsave(&sc->sc_pm_lock, flags); in ath9k_tasklet()
433 if ((status & ATH9K_INT_TSFOOR) && sc->ps_enabled) { in ath9k_tasklet()
439 sc->ps_flags |= PS_WAIT_FOR_BEACON | PS_BEACON_SYNC; in ath9k_tasklet()
441 spin_unlock_irqrestore(&sc->sc_pm_lock, flags); in ath9k_tasklet()
453 ath_rx_tasklet(sc, 0, true); in ath9k_tasklet()
455 ath_rx_tasklet(sc, 0, false); in ath9k_tasklet()
466 sc->gtt_cnt = 0; in ath9k_tasklet()
468 ath_tx_edma_tasklet(sc); in ath9k_tasklet()
470 ath_tx_tasklet(sc); in ath9k_tasklet()
473 wake_up(&sc->tx_wait); in ath9k_tasklet()
477 ath_gen_timer_isr(sc->sc_ah); in ath9k_tasklet()
479 ath9k_btcoex_handle_interrupt(sc, status); in ath9k_tasklet()
484 spin_unlock(&sc->sc_pcu_lock); in ath9k_tasklet()
485 ath9k_ps_restore(sc); in ath9k_tasklet()
506 struct ath_softc *sc = dev; in ath_isr() local
507 struct ath_hw *ah = sc->sc_ah; in ath_isr()
532 ath9k_debug_sync_cause(sc, sync_cause); in ath_isr()
536 ath9k_hw_kill_interrupts(sc->sc_ah); in ath_isr()
548 spin_lock(&sc->intr_lock); in ath_isr()
549 sc->intrstatus |= status; in ath_isr()
550 spin_unlock(&sc->intr_lock); in ath_isr()
567 tasklet_schedule(&sc->bcon_tasklet); in ath_isr()
579 if (ATH_DBG_WARN_ON_ONCE(sc->ps_idle)) in ath_isr()
583 ath9k_setpower(sc, ATH9K_PM_AWAKE); in ath_isr()
584 spin_lock(&sc->sc_pm_lock); in ath_isr()
585 ath9k_hw_setrxabort(sc->sc_ah, 0); in ath_isr()
586 sc->ps_flags |= PS_WAIT_FOR_BEACON; in ath_isr()
587 spin_unlock(&sc->sc_pm_lock); in ath_isr()
592 ath_debug_stat_interrupt(sc, status); in ath_isr()
597 tasklet_schedule(&sc->intr_tq); in ath_isr()
609 int ath_reset(struct ath_softc *sc, struct ath9k_channel *hchan) in ath_reset() argument
611 struct ath_common *common = ath9k_hw_common(sc->sc_ah); in ath_reset()
614 ath9k_hw_kill_interrupts(sc->sc_ah); in ath_reset()
617 ath9k_ps_wakeup(sc); in ath_reset()
618 r = ath_reset_internal(sc, hchan); in ath_reset()
619 ath9k_ps_restore(sc); in ath_reset()
629 void ath9k_queue_reset(struct ath_softc *sc, enum ath_reset_type type) in ath9k_queue_reset() argument
631 struct ath_common *common = ath9k_hw_common(sc->sc_ah); in ath9k_queue_reset()
633 RESET_STAT_INC(sc, type); in ath9k_queue_reset()
635 ath9k_hw_kill_interrupts(sc->sc_ah); in ath9k_queue_reset()
637 ieee80211_queue_work(sc->hw, &sc->hw_reset_work); in ath9k_queue_reset()
642 struct ath_softc *sc = container_of(work, struct ath_softc, hw_reset_work); in ath_reset_work() local
644 ath9k_ps_wakeup(sc); in ath_reset_work()
645 ath_reset_internal(sc, NULL); in ath_reset_work()
646 ath9k_ps_restore(sc); in ath_reset_work()
655 struct ath_softc *sc = hw->priv; in ath9k_start() local
656 struct ath_hw *ah = sc->sc_ah; in ath9k_start()
658 struct ieee80211_channel *curchan = sc->cur_chan->chandef.chan; in ath9k_start()
659 struct ath_chanctx *ctx = sc->cur_chan; in ath9k_start()
667 ath9k_ps_wakeup(sc); in ath9k_start()
668 mutex_lock(&sc->mutex); in ath9k_start()
671 sc->cur_chandef = hw->conf.chandef; in ath9k_start()
683 spin_lock_bh(&sc->sc_pcu_lock); in ath9k_start()
719 ath_mci_enable(sc); in ath9k_start()
722 sc->sc_ah->is_monitoring = false; in ath9k_start()
724 if (!ath_complete_reset(sc, false)) in ath9k_start()
738 ath9k_cmn_init_crypto(sc->sc_ah); in ath9k_start()
742 spin_unlock_bh(&sc->sc_pcu_lock); in ath9k_start()
744 ath9k_rng_start(sc); in ath9k_start()
746 mutex_unlock(&sc->mutex); in ath9k_start()
748 ath9k_ps_restore(sc); in ath9k_start()
757 struct ath_softc *sc = hw->priv; in ath9k_tx() local
758 struct ath_common *common = ath9k_hw_common(sc->sc_ah); in ath9k_tx()
763 if (sc->ps_enabled) { in ath9k_tx()
777 if (unlikely(sc->sc_ah->power_mode == ATH9K_PM_NETWORK_SLEEP)) { in ath9k_tx()
783 ath9k_ps_wakeup(sc); in ath9k_tx()
784 spin_lock_irqsave(&sc->sc_pm_lock, flags); in ath9k_tx()
785 if (!(sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_AUTOSLEEP)) in ath9k_tx()
786 ath9k_hw_setrxabort(sc->sc_ah, 0); in ath9k_tx()
790 sc->ps_flags |= PS_WAIT_FOR_PSPOLL_DATA; in ath9k_tx()
793 sc->ps_flags |= PS_WAIT_FOR_TX_ACK; in ath9k_tx()
800 spin_unlock_irqrestore(&sc->sc_pm_lock, flags); in ath9k_tx()
801 ath9k_ps_restore(sc); in ath9k_tx()
808 if (unlikely(sc->sc_ah->power_mode == ATH9K_PM_FULL_SLEEP)) { in ath9k_tx()
814 txctl.txq = sc->tx.txq_map[skb_get_queue_mapping(skb)]; in ath9k_tx()
821 TX_STAT_INC(sc, txctl.txq->axq_qnum, txfailed); in ath9k_tx()
849 static bool ath9k_txq_has_key(struct ath_softc *sc, u32 keyix) in ath9k_txq_has_key() argument
851 struct ath_hw *ah = sc->sc_ah; in ath9k_txq_has_key()
857 if (!ATH_TXQ_SETUP(sc, i)) in ath9k_txq_has_key()
859 txq = &sc->tx.txq[i]; in ath9k_txq_has_key()
865 ath_txq_lock(sc, txq); in ath9k_txq_has_key()
867 if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) { in ath9k_txq_has_key()
878 ath_txq_unlock(sc, txq); in ath9k_txq_has_key()
884 static void ath9k_pending_key_del(struct ath_softc *sc, u8 keyix) in ath9k_pending_key_del() argument
886 struct ath_hw *ah = sc->sc_ah; in ath9k_pending_key_del()
890 ath9k_txq_has_key(sc, keyix)) in ath9k_pending_key_del()
900 struct ath_softc *sc = hw->priv; in ath9k_stop() local
901 struct ath_hw *ah = sc->sc_ah; in ath9k_stop()
906 ath9k_deinit_channel_context(sc); in ath9k_stop()
908 mutex_lock(&sc->mutex); in ath9k_stop()
910 ath9k_rng_stop(sc); in ath9k_stop()
912 ath_cancel_work(sc); in ath9k_stop()
916 mutex_unlock(&sc->mutex); in ath9k_stop()
921 ath9k_ps_wakeup(sc); in ath9k_stop()
923 spin_lock_bh(&sc->sc_pcu_lock); in ath9k_stop()
932 spin_unlock_bh(&sc->sc_pcu_lock); in ath9k_stop()
936 synchronize_irq(sc->irq); in ath9k_stop()
937 tasklet_kill(&sc->intr_tq); in ath9k_stop()
938 tasklet_kill(&sc->bcon_tasklet); in ath9k_stop()
940 prev_idle = sc->ps_idle; in ath9k_stop()
941 sc->ps_idle = true; in ath9k_stop()
943 spin_lock_bh(&sc->sc_pcu_lock); in ath9k_stop()
951 ath_prepare_reset(sc); in ath9k_stop()
953 if (sc->rx.frag) { in ath9k_stop()
954 dev_kfree_skb_any(sc->rx.frag); in ath9k_stop()
955 sc->rx.frag = NULL; in ath9k_stop()
960 &sc->cur_chan->chandef); in ath9k_stop()
970 spin_unlock_bh(&sc->sc_pcu_lock); in ath9k_stop()
973 ath9k_pending_key_del(sc, i); in ath9k_stop()
978 ath9k_cmn_init_crypto(sc->sc_ah); in ath9k_stop()
980 ath9k_ps_restore(sc); in ath9k_stop()
982 sc->ps_idle = prev_idle; in ath9k_stop()
984 mutex_unlock(&sc->mutex); in ath9k_stop()
1064 static void ath9k_update_bssid_mask(struct ath_softc *sc, in ath9k_update_bssid_mask() argument
1068 struct ath_common *common = ath9k_hw_common(sc->sc_ah); in ath9k_update_bssid_mask()
1088 sc->hw->wiphy->perm_addr[i]); in ath9k_update_bssid_mask()
1093 void ath9k_calculate_iter_data(struct ath_softc *sc, in ath9k_calculate_iter_data() argument
1110 ath9k_update_bssid_mask(sc, ctx, iter_data); in ath9k_calculate_iter_data()
1113 static void ath9k_set_assoc_state(struct ath_softc *sc, in ath9k_set_assoc_state() argument
1116 struct ath_common *common = ath9k_hw_common(sc->sc_ah); in ath9k_set_assoc_state()
1124 ath9k_hw_write_associd(sc->sc_ah); in ath9k_set_assoc_state()
1128 sc->sc_ah->stats.avgbrssi = ATH_RSSI_DUMMY_MARKER; in ath9k_set_assoc_state()
1130 spin_lock_irqsave(&sc->sc_pm_lock, flags); in ath9k_set_assoc_state()
1131 sc->ps_flags |= PS_BEACON_SYNC | PS_WAIT_FOR_BEACON; in ath9k_set_assoc_state()
1132 spin_unlock_irqrestore(&sc->sc_pm_lock, flags); in ath9k_set_assoc_state()
1135 if (ath9k_hw_mci_is_enabled(sc->sc_ah)) in ath9k_set_assoc_state()
1136 ath9k_mci_update_wlan_channels(sc, false); in ath9k_set_assoc_state()
1144 static void ath9k_set_offchannel_state(struct ath_softc *sc) in ath9k_set_offchannel_state() argument
1146 struct ath_hw *ah = sc->sc_ah; in ath9k_set_offchannel_state()
1150 ath9k_ps_wakeup(sc); in ath9k_set_offchannel_state()
1152 if (sc->offchannel.state < ATH_OFFCHANNEL_ROC_START) in ath9k_set_offchannel_state()
1153 vif = sc->offchannel.scan_vif; in ath9k_set_offchannel_state()
1155 vif = sc->offchannel.roc_vif; in ath9k_set_offchannel_state()
1171 ath9k_hw_write_associd(sc->sc_ah); in ath9k_set_offchannel_state()
1176 ath9k_ps_restore(sc); in ath9k_set_offchannel_state()
1181 void ath9k_calculate_summary_state(struct ath_softc *sc, in ath9k_calculate_summary_state() argument
1184 struct ath_hw *ah = sc->sc_ah; in ath9k_calculate_summary_state()
1188 ath_chanctx_check_active(sc, ctx); in ath9k_calculate_summary_state()
1190 if (ctx != sc->cur_chan) in ath9k_calculate_summary_state()
1194 if (ctx == &sc->offchannel.chan) in ath9k_calculate_summary_state()
1195 return ath9k_set_offchannel_state(sc); in ath9k_calculate_summary_state()
1198 ath9k_ps_wakeup(sc); in ath9k_calculate_summary_state()
1199 ath9k_calculate_iter_data(sc, ctx, &iter_data); in ath9k_calculate_summary_state()
1213 ath9k_beacon_ensure_primary_slot(sc); in ath9k_calculate_summary_state()
1242 ath9k_set_assoc_state(sc, iter_data.primary_sta, in ath9k_calculate_summary_state()
1249 ath9k_hw_write_associd(sc->sc_ah); in ath9k_calculate_summary_state()
1250 if (ath9k_hw_mci_is_enabled(sc->sc_ah)) in ath9k_calculate_summary_state()
1251 ath9k_mci_update_wlan_channels(sc, true); in ath9k_calculate_summary_state()
1254 sc->nbcnvifs = iter_data.nbcnvifs; in ath9k_calculate_summary_state()
1255 ath9k_beacon_config(sc, iter_data.primary_beacon_vif, in ath9k_calculate_summary_state()
1273 ath9k_ps_restore(sc); in ath9k_calculate_summary_state()
1288 void ath9k_set_txpower(struct ath_softc *sc, struct ieee80211_vif *vif) in ath9k_set_txpower() argument
1291 struct ath_hw *ah = sc->sc_ah; in ath9k_set_txpower()
1294 ath9k_ps_wakeup(sc); in ath9k_set_txpower()
1298 sc->hw, IEEE80211_IFACE_ITER_RESUME_ALL, in ath9k_set_txpower()
1301 power = sc->hw->conf.power_level; in ath9k_set_txpower()
1303 power = sc->hw->conf.power_level; in ath9k_set_txpower()
1305 sc->cur_chan->txpower = 2 * power; in ath9k_set_txpower()
1306 ath9k_hw_set_txpowerlimit(ah, sc->cur_chan->txpower, false); in ath9k_set_txpower()
1307 sc->cur_chan->cur_txpower = reg->max_power_level; in ath9k_set_txpower()
1308 ath9k_ps_restore(sc); in ath9k_set_txpower()
1332 struct ath_softc *sc = hw->priv; in ath9k_add_interface() local
1333 struct ath_hw *ah = sc->sc_ah; in ath9k_add_interface()
1338 mutex_lock(&sc->mutex); in ath9k_add_interface()
1340 if (sc->cur_chan->nvifs >= 1) { in ath9k_add_interface()
1341 mutex_unlock(&sc->mutex); in ath9k_add_interface()
1344 sc->tx99_vif = vif; in ath9k_add_interface()
1348 sc->cur_chan->nvifs++; in ath9k_add_interface()
1354 ath9k_beacon_assign_slot(sc, vif); in ath9k_add_interface()
1358 avp->chanctx = sc->cur_chan; in ath9k_add_interface()
1362 ath9k_calculate_summary_state(sc, avp->chanctx); in ath9k_add_interface()
1366 ath9k_set_txpower(sc, vif); in ath9k_add_interface()
1368 an->sc = sc; in ath9k_add_interface()
1372 ath_tx_node_init(sc, an); in ath9k_add_interface()
1374 mutex_unlock(&sc->mutex); in ath9k_add_interface()
1383 struct ath_softc *sc = hw->priv; in ath9k_change_interface() local
1384 struct ath_common *common = ath9k_hw_common(sc->sc_ah); in ath9k_change_interface()
1387 mutex_lock(&sc->mutex); in ath9k_change_interface()
1390 mutex_unlock(&sc->mutex); in ath9k_change_interface()
1397 ath9k_beacon_remove_slot(sc, vif); in ath9k_change_interface()
1403 ath9k_beacon_assign_slot(sc, vif); in ath9k_change_interface()
1406 ath9k_calculate_summary_state(sc, avp->chanctx); in ath9k_change_interface()
1408 ath9k_set_txpower(sc, vif); in ath9k_change_interface()
1410 mutex_unlock(&sc->mutex); in ath9k_change_interface()
1417 struct ath_softc *sc = hw->priv; in ath9k_remove_interface() local
1418 struct ath_common *common = ath9k_hw_common(sc->sc_ah); in ath9k_remove_interface()
1423 mutex_lock(&sc->mutex); in ath9k_remove_interface()
1425 ath9k_p2p_remove_vif(sc, vif); in ath9k_remove_interface()
1427 sc->cur_chan->nvifs--; in ath9k_remove_interface()
1428 sc->tx99_vif = NULL; in ath9k_remove_interface()
1433 ath9k_beacon_remove_slot(sc, vif); in ath9k_remove_interface()
1435 ath_tx_node_cleanup(sc, &avp->mcast_node); in ath9k_remove_interface()
1437 ath9k_calculate_summary_state(sc, avp->chanctx); in ath9k_remove_interface()
1439 ath9k_set_txpower(sc, NULL); in ath9k_remove_interface()
1441 mutex_unlock(&sc->mutex); in ath9k_remove_interface()
1444 static void ath9k_enable_ps(struct ath_softc *sc) in ath9k_enable_ps() argument
1446 struct ath_hw *ah = sc->sc_ah; in ath9k_enable_ps()
1452 sc->ps_enabled = true; in ath9k_enable_ps()
1463 static void ath9k_disable_ps(struct ath_softc *sc) in ath9k_disable_ps() argument
1465 struct ath_hw *ah = sc->sc_ah; in ath9k_disable_ps()
1471 sc->ps_enabled = false; in ath9k_disable_ps()
1475 sc->ps_flags &= ~(PS_WAIT_FOR_BEACON | in ath9k_disable_ps()
1489 struct ath_softc *sc = hw->priv; in ath9k_config() local
1490 struct ath_hw *ah = sc->sc_ah; in ath9k_config()
1493 struct ath_chanctx *ctx = sc->cur_chan; in ath9k_config()
1495 ath9k_ps_wakeup(sc); in ath9k_config()
1496 mutex_lock(&sc->mutex); in ath9k_config()
1499 sc->ps_idle = !!(conf->flags & IEEE80211_CONF_IDLE); in ath9k_config()
1500 if (sc->ps_idle) { in ath9k_config()
1501 ath_cancel_work(sc); in ath9k_config()
1502 ath9k_stop_btcoex(sc); in ath9k_config()
1504 ath9k_start_btcoex(sc); in ath9k_config()
1509 ath_chanctx_set_channel(sc, ctx, &ctx->chandef); in ath9k_config()
1521 spin_lock_irqsave(&sc->sc_pm_lock, flags); in ath9k_config()
1523 ath9k_enable_ps(sc); in ath9k_config()
1525 ath9k_disable_ps(sc); in ath9k_config()
1526 spin_unlock_irqrestore(&sc->sc_pm_lock, flags); in ath9k_config()
1532 sc->sc_ah->is_monitoring = true; in ath9k_config()
1535 sc->sc_ah->is_monitoring = false; in ath9k_config()
1541 ath_chanctx_set_channel(sc, ctx, &hw->conf.chandef); in ath9k_config()
1545 ath9k_set_txpower(sc, NULL); in ath9k_config()
1547 mutex_unlock(&sc->mutex); in ath9k_config()
1548 ath9k_ps_restore(sc); in ath9k_config()
1569 struct ath_softc *sc = hw->priv; in ath9k_configure_filter() local
1575 spin_lock_bh(&sc->chan_lock); in ath9k_configure_filter()
1576 ath_for_each_chanctx(sc, ctx) in ath9k_configure_filter()
1579 sc->offchannel.chan.rxfilter = *total_flags; in ath9k_configure_filter()
1581 spin_unlock_bh(&sc->chan_lock); in ath9k_configure_filter()
1583 ath9k_ps_wakeup(sc); in ath9k_configure_filter()
1584 rfilt = ath_calcrxfilter(sc); in ath9k_configure_filter()
1585 ath9k_hw_setrxfilter(sc->sc_ah, rfilt); in ath9k_configure_filter()
1586 ath9k_ps_restore(sc); in ath9k_configure_filter()
1588 ath_dbg(ath9k_hw_common(sc->sc_ah), CONFIG, "Set HW RX filter: 0x%x\n", in ath9k_configure_filter()
1596 struct ath_softc *sc = hw->priv; in ath9k_sta_add() local
1597 struct ath_common *common = ath9k_hw_common(sc->sc_ah); in ath9k_sta_add()
1602 ath_node_attach(sc, sta, vif); in ath9k_sta_add()
1617 static void ath9k_del_ps_key(struct ath_softc *sc, in ath9k_del_ps_key() argument
1621 struct ath_common *common = ath9k_hw_common(sc->sc_ah); in ath9k_del_ps_key()
1636 struct ath_softc *sc = hw->priv; in ath9k_sta_remove() local
1638 ath9k_del_ps_key(sc, vif, sta); in ath9k_sta_remove()
1639 ath_node_detach(sc, sta); in ath9k_sta_remove()
1650 struct ath_softc *sc = hw->priv; in ath9k_sta_state() local
1651 struct ath_common *common = ath9k_hw_common(sc->sc_ah); in ath9k_sta_state()
1670 ath_chanctx_event(sc, vif, in ath9k_sta_state()
1696 struct ath_softc *sc = hw->priv; in ath9k_sta_notify() local
1702 ath_tx_aggr_sleep(sta, sc, an); in ath9k_sta_notify()
1703 ath9k_sta_set_tx_filter(sc->sc_ah, an, true); in ath9k_sta_notify()
1706 ath9k_sta_set_tx_filter(sc->sc_ah, an, false); in ath9k_sta_notify()
1708 ath_tx_aggr_wakeup(sc, an); in ath9k_sta_notify()
1718 struct ath_softc *sc = hw->priv; in ath9k_conf_tx() local
1719 struct ath_common *common = ath9k_hw_common(sc->sc_ah); in ath9k_conf_tx()
1727 txq = sc->tx.txq_map[queue]; in ath9k_conf_tx()
1729 ath9k_ps_wakeup(sc); in ath9k_conf_tx()
1730 mutex_lock(&sc->mutex); in ath9k_conf_tx()
1744 ath_update_max_aggr_framelen(sc, queue, qi.tqi_burstTime); in ath9k_conf_tx()
1745 ret = ath_txq_update(sc, txq->axq_qnum, &qi); in ath9k_conf_tx()
1749 mutex_unlock(&sc->mutex); in ath9k_conf_tx()
1750 ath9k_ps_restore(sc); in ath9k_conf_tx()
1761 struct ath_softc *sc = hw->priv; in ath9k_set_key() local
1762 struct ath_common *common = ath9k_hw_common(sc->sc_ah); in ath9k_set_key()
1793 mutex_lock(&sc->mutex); in ath9k_set_key()
1794 ath9k_ps_wakeup(sc); in ath9k_set_key()
1803 ath9k_pending_key_del(sc, i); in ath9k_set_key()
1808 ath9k_del_ps_key(sc, vif, sta); in ath9k_set_key()
1818 if (sc->sc_ah->sw_mgmt_crypto_tx && in ath9k_set_key()
1834 if (ath9k_txq_has_key(sc, key->hw_key_idx)) { in ath9k_set_key()
1838 set_bit(key->hw_key_idx, sc->sc_ah->pending_del_keymap); in ath9k_set_key()
1857 ath9k_ps_restore(sc); in ath9k_set_key()
1858 mutex_unlock(&sc->mutex); in ath9k_set_key()
1873 struct ath_softc *sc = hw->priv; in ath9k_bss_info_changed() local
1874 struct ath_hw *ah = sc->sc_ah; in ath9k_bss_info_changed()
1879 ath9k_ps_wakeup(sc); in ath9k_bss_info_changed()
1880 mutex_lock(&sc->mutex); in ath9k_bss_info_changed()
1890 ath9k_calculate_summary_state(sc, avp->chanctx); in ath9k_bss_info_changed()
1897 ath9k_hw_write_associd(sc->sc_ah); in ath9k_bss_info_changed()
1903 ath9k_calculate_summary_state(sc, avp->chanctx); in ath9k_bss_info_changed()
1906 if ((avp->chanctx == sc->cur_chan) && in ath9k_bss_info_changed()
1919 sc->beacon.slottime = slottime; in ath9k_bss_info_changed()
1920 sc->beacon.updateslot = UPDATE; in ath9k_bss_info_changed()
1928 ath9k_p2p_bss_info_changed(sc, vif); in ath9k_bss_info_changed()
1931 ath_check_ani(sc); in ath9k_bss_info_changed()
1936 ath9k_set_txpower(sc, vif); in ath9k_bss_info_changed()
1939 mutex_unlock(&sc->mutex); in ath9k_bss_info_changed()
1940 ath9k_ps_restore(sc); in ath9k_bss_info_changed()
1947 struct ath_softc *sc = hw->priv; in ath9k_get_tsf() local
1951 mutex_lock(&sc->mutex); in ath9k_get_tsf()
1952 ath9k_ps_wakeup(sc); in ath9k_get_tsf()
1954 if (sc->cur_chan == avp->chanctx) { in ath9k_get_tsf()
1955 tsf = ath9k_hw_gettsf64(sc->sc_ah); in ath9k_get_tsf()
1957 tsf = sc->cur_chan->tsf_val + in ath9k_get_tsf()
1958 ath9k_hw_get_tsf_offset(&sc->cur_chan->tsf_ts, NULL); in ath9k_get_tsf()
1961 ath9k_ps_restore(sc); in ath9k_get_tsf()
1962 mutex_unlock(&sc->mutex); in ath9k_get_tsf()
1971 struct ath_softc *sc = hw->priv; in ath9k_set_tsf() local
1974 mutex_lock(&sc->mutex); in ath9k_set_tsf()
1975 ath9k_ps_wakeup(sc); in ath9k_set_tsf()
1978 if (sc->cur_chan == avp->chanctx) in ath9k_set_tsf()
1979 ath9k_hw_settsf64(sc->sc_ah, tsf); in ath9k_set_tsf()
1981 ath9k_ps_restore(sc); in ath9k_set_tsf()
1982 mutex_unlock(&sc->mutex); in ath9k_set_tsf()
1987 struct ath_softc *sc = hw->priv; in ath9k_reset_tsf() local
1990 mutex_lock(&sc->mutex); in ath9k_reset_tsf()
1992 ath9k_ps_wakeup(sc); in ath9k_reset_tsf()
1994 if (sc->cur_chan == avp->chanctx) in ath9k_reset_tsf()
1995 ath9k_hw_reset_tsf(sc->sc_ah); in ath9k_reset_tsf()
1997 ath9k_ps_restore(sc); in ath9k_reset_tsf()
1999 mutex_unlock(&sc->mutex); in ath9k_reset_tsf()
2006 struct ath_softc *sc = hw->priv; in ath9k_ampdu_action() local
2007 struct ath_common *common = ath9k_hw_common(sc->sc_ah); in ath9k_ampdu_action()
2017 mutex_lock(&sc->mutex); in ath9k_ampdu_action()
2031 ath9k_ps_wakeup(sc); in ath9k_ampdu_action()
2032 ret = ath_tx_aggr_start(sc, sta, tid, ssn); in ath9k_ampdu_action()
2035 ath9k_ps_restore(sc); in ath9k_ampdu_action()
2042 ath9k_ps_wakeup(sc); in ath9k_ampdu_action()
2043 ath_tx_aggr_stop(sc, sta, tid); in ath9k_ampdu_action()
2046 ath9k_ps_restore(sc); in ath9k_ampdu_action()
2054 ath_err(ath9k_hw_common(sc->sc_ah), "Unknown AMPDU action\n"); in ath9k_ampdu_action()
2057 mutex_unlock(&sc->mutex); in ath9k_ampdu_action()
2065 struct ath_softc *sc = hw->priv; in ath9k_get_survey() local
2066 struct ath_common *common = ath9k_hw_common(sc->sc_ah); in ath9k_get_survey()
2077 ath_update_survey_stats(sc); in ath9k_get_survey()
2095 memcpy(survey, &sc->survey[pos], sizeof(*survey)); in ath9k_get_survey()
2102 static void ath9k_enable_dynack(struct ath_softc *sc) in ath9k_enable_dynack() argument
2106 struct ath_hw *ah = sc->sc_ah; in ath9k_enable_dynack()
2111 rfilt = ath_calcrxfilter(sc); in ath9k_enable_dynack()
2119 struct ath_softc *sc = hw->priv; in ath9k_set_coverage_class() local
2120 struct ath_hw *ah = sc->sc_ah; in ath9k_set_coverage_class()
2125 mutex_lock(&sc->mutex); in ath9k_set_coverage_class()
2133 rfilt = ath_calcrxfilter(sc); in ath9k_set_coverage_class()
2136 ath9k_ps_wakeup(sc); in ath9k_set_coverage_class()
2138 ath9k_ps_restore(sc); in ath9k_set_coverage_class()
2140 ath9k_enable_dynack(sc); in ath9k_set_coverage_class()
2143 mutex_unlock(&sc->mutex); in ath9k_set_coverage_class()
2146 static bool ath9k_has_tx_pending(struct ath_softc *sc, in ath9k_has_tx_pending() argument
2152 if (!ATH_TXQ_SETUP(sc, i)) in ath9k_has_tx_pending()
2155 npend = ath9k_has_pending_frames(sc, &sc->tx.txq[i], in ath9k_has_tx_pending()
2167 struct ath_softc *sc = hw->priv; in ath9k_flush() local
2168 struct ath_common *common = ath9k_hw_common(sc->sc_ah); in ath9k_flush()
2188 mutex_lock(&sc->mutex); in ath9k_flush()
2190 mutex_unlock(&sc->mutex); in ath9k_flush()
2196 struct ath_softc *sc = hw->priv; in __ath9k_flush() local
2197 struct ath_hw *ah = sc->sc_ah; in __ath9k_flush()
2202 cancel_delayed_work_sync(&sc->hw_check_work); in __ath9k_flush()
2214 spin_lock_bh(&sc->chan_lock); in __ath9k_flush()
2218 timeout = sc->cur_chan->flush_timeout; in __ath9k_flush()
2219 spin_unlock_bh(&sc->chan_lock); in __ath9k_flush()
2224 if (wait_event_timeout(sc->tx_wait, !ath9k_has_tx_pending(sc, sw_pending), in __ath9k_flush()
2229 ath9k_ps_wakeup(sc); in __ath9k_flush()
2230 spin_lock_bh(&sc->sc_pcu_lock); in __ath9k_flush()
2231 drain_txq = ath_drain_all_txq(sc); in __ath9k_flush()
2232 spin_unlock_bh(&sc->sc_pcu_lock); in __ath9k_flush()
2235 ath_reset(sc, NULL); in __ath9k_flush()
2237 ath9k_ps_restore(sc); in __ath9k_flush()
2240 ieee80211_queue_delayed_work(hw, &sc->hw_check_work, in __ath9k_flush()
2246 struct ath_softc *sc = hw->priv; in ath9k_tx_frames_pending() local
2248 return ath9k_has_tx_pending(sc, true); in ath9k_tx_frames_pending()
2253 struct ath_softc *sc = hw->priv; in ath9k_tx_last_beacon() local
2254 struct ath_hw *ah = sc->sc_ah; in ath9k_tx_last_beacon()
2262 vif = sc->beacon.bslot[0]; in ath9k_tx_last_beacon()
2271 if (!sc->beacon.tx_processed && !edma) { in ath9k_tx_last_beacon()
2272 tasklet_disable(&sc->bcon_tasklet); in ath9k_tx_last_beacon()
2282 sc->beacon.tx_processed = true; in ath9k_tx_last_beacon()
2283 sc->beacon.tx_last = !(ts.ts_status & ATH9K_TXERR_MASK); in ath9k_tx_last_beacon()
2286 tasklet_enable(&sc->bcon_tasklet); in ath9k_tx_last_beacon()
2289 return sc->beacon.tx_last; in ath9k_tx_last_beacon()
2295 struct ath_softc *sc = hw->priv; in ath9k_get_stats() local
2296 struct ath_hw *ah = sc->sc_ah; in ath9k_get_stats()
2343 struct ath_softc *sc = hw->priv; in ath9k_set_antenna() local
2344 struct ath_hw *ah = sc->sc_ah; in ath9k_set_antenna()
2352 sc->ant_rx = rx_ant; in ath9k_set_antenna()
2353 sc->ant_tx = tx_ant; in ath9k_set_antenna()
2372 struct ath_softc *sc = hw->priv; in ath9k_get_antenna() local
2374 *tx_ant = sc->ant_tx; in ath9k_get_antenna()
2375 *rx_ant = sc->ant_rx; in ath9k_get_antenna()
2383 struct ath_softc *sc = hw->priv; in ath9k_sw_scan_start() local
2384 struct ath_common *common = ath9k_hw_common(sc->sc_ah); in ath9k_sw_scan_start()
2391 struct ath_softc *sc = hw->priv; in ath9k_sw_scan_complete() local
2392 struct ath_common *common = ath9k_hw_common(sc->sc_ah); in ath9k_sw_scan_complete()
2398 static void ath9k_cancel_pending_offchannel(struct ath_softc *sc) in ath9k_cancel_pending_offchannel() argument
2400 struct ath_common *common = ath9k_hw_common(sc->sc_ah); in ath9k_cancel_pending_offchannel()
2402 if (sc->offchannel.roc_vif) { in ath9k_cancel_pending_offchannel()
2406 del_timer_sync(&sc->offchannel.timer); in ath9k_cancel_pending_offchannel()
2407 if (sc->offchannel.state >= ATH_OFFCHANNEL_ROC_START) in ath9k_cancel_pending_offchannel()
2408 ath_roc_complete(sc, ATH_ROC_COMPLETE_ABORT); in ath9k_cancel_pending_offchannel()
2415 del_timer_sync(&sc->offchannel.timer); in ath9k_cancel_pending_offchannel()
2416 ath_scan_complete(sc, true); in ath9k_cancel_pending_offchannel()
2424 struct ath_softc *sc = hw->priv; in ath9k_hw_scan() local
2425 struct ath_common *common = ath9k_hw_common(sc->sc_ah); in ath9k_hw_scan()
2428 mutex_lock(&sc->mutex); in ath9k_hw_scan()
2430 if (WARN_ON(sc->offchannel.scan_req)) { in ath9k_hw_scan()
2435 ath9k_ps_wakeup(sc); in ath9k_hw_scan()
2437 sc->offchannel.scan_vif = vif; in ath9k_hw_scan()
2438 sc->offchannel.scan_req = req; in ath9k_hw_scan()
2439 sc->offchannel.scan_idx = 0; in ath9k_hw_scan()
2444 if (sc->offchannel.state == ATH_OFFCHANNEL_IDLE) { in ath9k_hw_scan()
2446 ath_offchannel_next(sc); in ath9k_hw_scan()
2450 mutex_unlock(&sc->mutex); in ath9k_hw_scan()
2458 struct ath_softc *sc = hw->priv; in ath9k_cancel_hw_scan() local
2459 struct ath_common *common = ath9k_hw_common(sc->sc_ah); in ath9k_cancel_hw_scan()
2463 mutex_lock(&sc->mutex); in ath9k_cancel_hw_scan()
2464 del_timer_sync(&sc->offchannel.timer); in ath9k_cancel_hw_scan()
2465 ath_scan_complete(sc, true); in ath9k_cancel_hw_scan()
2466 mutex_unlock(&sc->mutex); in ath9k_cancel_hw_scan()
2474 struct ath_softc *sc = hw->priv; in ath9k_remain_on_channel() local
2475 struct ath_common *common = ath9k_hw_common(sc->sc_ah); in ath9k_remain_on_channel()
2478 mutex_lock(&sc->mutex); in ath9k_remain_on_channel()
2480 if (WARN_ON(sc->offchannel.roc_vif)) { in ath9k_remain_on_channel()
2485 ath9k_ps_wakeup(sc); in ath9k_remain_on_channel()
2486 sc->offchannel.roc_vif = vif; in ath9k_remain_on_channel()
2487 sc->offchannel.roc_chan = chan; in ath9k_remain_on_channel()
2488 sc->offchannel.roc_duration = duration; in ath9k_remain_on_channel()
2494 if (sc->offchannel.state == ATH_OFFCHANNEL_IDLE) { in ath9k_remain_on_channel()
2496 ath_offchannel_next(sc); in ath9k_remain_on_channel()
2500 mutex_unlock(&sc->mutex); in ath9k_remain_on_channel()
2508 struct ath_softc *sc = hw->priv; in ath9k_cancel_remain_on_channel() local
2509 struct ath_common *common = ath9k_hw_common(sc->sc_ah); in ath9k_cancel_remain_on_channel()
2511 mutex_lock(&sc->mutex); in ath9k_cancel_remain_on_channel()
2514 del_timer_sync(&sc->offchannel.timer); in ath9k_cancel_remain_on_channel()
2516 if (sc->offchannel.roc_vif) { in ath9k_cancel_remain_on_channel()
2517 if (sc->offchannel.state >= ATH_OFFCHANNEL_ROC_START) in ath9k_cancel_remain_on_channel()
2518 ath_roc_complete(sc, ATH_ROC_COMPLETE_CANCEL); in ath9k_cancel_remain_on_channel()
2521 mutex_unlock(&sc->mutex); in ath9k_cancel_remain_on_channel()
2529 struct ath_softc *sc = hw->priv; in ath9k_add_chanctx() local
2530 struct ath_common *common = ath9k_hw_common(sc->sc_ah); in ath9k_add_chanctx()
2534 mutex_lock(&sc->mutex); in ath9k_add_chanctx()
2536 ath_for_each_chanctx(sc, ctx) { in ath9k_add_chanctx()
2543 pos = ctx - &sc->chanctx[0]; in ath9k_add_chanctx()
2550 ath_chanctx_set_channel(sc, ctx, &conf->def); in ath9k_add_chanctx()
2552 mutex_unlock(&sc->mutex); in ath9k_add_chanctx()
2556 mutex_unlock(&sc->mutex); in ath9k_add_chanctx()
2564 struct ath_softc *sc = hw->priv; in ath9k_remove_chanctx() local
2565 struct ath_common *common = ath9k_hw_common(sc->sc_ah); in ath9k_remove_chanctx()
2568 mutex_lock(&sc->mutex); in ath9k_remove_chanctx()
2576 ath_chanctx_event(sc, NULL, ATH_CHANCTX_EVENT_UNASSIGN); in ath9k_remove_chanctx()
2578 mutex_unlock(&sc->mutex); in ath9k_remove_chanctx()
2585 struct ath_softc *sc = hw->priv; in ath9k_change_chanctx() local
2586 struct ath_common *common = ath9k_hw_common(sc->sc_ah); in ath9k_change_chanctx()
2589 mutex_lock(&sc->mutex); in ath9k_change_chanctx()
2593 ath_chanctx_set_channel(sc, ctx, &conf->def); in ath9k_change_chanctx()
2594 mutex_unlock(&sc->mutex); in ath9k_change_chanctx()
2602 struct ath_softc *sc = hw->priv; in ath9k_assign_vif_chanctx() local
2603 struct ath_common *common = ath9k_hw_common(sc->sc_ah); in ath9k_assign_vif_chanctx()
2608 ath9k_cancel_pending_offchannel(sc); in ath9k_assign_vif_chanctx()
2610 mutex_lock(&sc->mutex); in ath9k_assign_vif_chanctx()
2620 ath9k_calculate_summary_state(sc, ctx); in ath9k_assign_vif_chanctx()
2624 mutex_unlock(&sc->mutex); in ath9k_assign_vif_chanctx()
2634 struct ath_softc *sc = hw->priv; in ath9k_unassign_vif_chanctx() local
2635 struct ath_common *common = ath9k_hw_common(sc->sc_ah); in ath9k_unassign_vif_chanctx()
2640 ath9k_cancel_pending_offchannel(sc); in ath9k_unassign_vif_chanctx()
2642 mutex_lock(&sc->mutex); in ath9k_unassign_vif_chanctx()
2652 ath9k_calculate_summary_state(sc, ctx); in ath9k_unassign_vif_chanctx()
2656 mutex_unlock(&sc->mutex); in ath9k_unassign_vif_chanctx()
2663 struct ath_softc *sc = hw->priv; in ath9k_mgd_prepare_tx() local
2664 struct ath_common *common = ath9k_hw_common(sc->sc_ah); in ath9k_mgd_prepare_tx()
2678 mutex_lock(&sc->mutex); in ath9k_mgd_prepare_tx()
2680 spin_lock_bh(&sc->chan_lock); in ath9k_mgd_prepare_tx()
2681 if (sc->next_chan || (sc->cur_chan != avp->chanctx)) in ath9k_mgd_prepare_tx()
2683 spin_unlock_bh(&sc->chan_lock); in ath9k_mgd_prepare_tx()
2688 ath9k_cancel_pending_offchannel(sc); in ath9k_mgd_prepare_tx()
2690 go_ctx = ath_is_go_chanctx_present(sc); in ath9k_mgd_prepare_tx()
2697 spin_lock_bh(&sc->chan_lock); in ath9k_mgd_prepare_tx()
2698 sc->sched.mgd_prepare_tx = true; in ath9k_mgd_prepare_tx()
2701 spin_unlock_bh(&sc->chan_lock); in ath9k_mgd_prepare_tx()
2704 init_completion(&sc->go_beacon); in ath9k_mgd_prepare_tx()
2706 mutex_unlock(&sc->mutex); in ath9k_mgd_prepare_tx()
2708 if (wait_for_completion_timeout(&sc->go_beacon, in ath9k_mgd_prepare_tx()
2713 spin_lock_bh(&sc->chan_lock); in ath9k_mgd_prepare_tx()
2714 sc->sched.mgd_prepare_tx = false; in ath9k_mgd_prepare_tx()
2715 spin_unlock_bh(&sc->chan_lock); in ath9k_mgd_prepare_tx()
2718 mutex_lock(&sc->mutex); in ath9k_mgd_prepare_tx()
2725 spin_lock_bh(&sc->chan_lock); in ath9k_mgd_prepare_tx()
2726 sc->next_chan = avp->chanctx; in ath9k_mgd_prepare_tx()
2727 sc->sched.state = ATH_CHANCTX_STATE_FORCE_ACTIVE; in ath9k_mgd_prepare_tx()
2728 spin_unlock_bh(&sc->chan_lock); in ath9k_mgd_prepare_tx()
2730 ath_chanctx_set_next(sc, true); in ath9k_mgd_prepare_tx()
2732 mutex_unlock(&sc->mutex); in ath9k_mgd_prepare_tx()
2757 struct ath_softc *sc = hw->priv; in ath9k_get_txpower() local
2760 mutex_lock(&sc->mutex); in ath9k_get_txpower()
2764 *dbm = sc->cur_chan->cur_txpower; in ath9k_get_txpower()
2765 mutex_unlock(&sc->mutex); in ath9k_get_txpower()