Lines Matching refs:priv
24 static enum htc_phymode ath9k_htc_get_curmode(struct ath9k_htc_priv *priv, in ath9k_htc_get_curmode() argument
33 bool ath9k_htc_setpower(struct ath9k_htc_priv *priv, in ath9k_htc_setpower() argument
38 mutex_lock(&priv->htc_pm_lock); in ath9k_htc_setpower()
39 ret = ath9k_hw_setpower(priv->ah, mode); in ath9k_htc_setpower()
40 mutex_unlock(&priv->htc_pm_lock); in ath9k_htc_setpower()
45 void ath9k_htc_ps_wakeup(struct ath9k_htc_priv *priv) in ath9k_htc_ps_wakeup() argument
47 mutex_lock(&priv->htc_pm_lock); in ath9k_htc_ps_wakeup()
48 if (++priv->ps_usecount != 1) in ath9k_htc_ps_wakeup()
50 ath9k_hw_setpower(priv->ah, ATH9K_PM_AWAKE); in ath9k_htc_ps_wakeup()
53 mutex_unlock(&priv->htc_pm_lock); in ath9k_htc_ps_wakeup()
56 void ath9k_htc_ps_restore(struct ath9k_htc_priv *priv) in ath9k_htc_ps_restore() argument
60 mutex_lock(&priv->htc_pm_lock); in ath9k_htc_ps_restore()
61 if (--priv->ps_usecount != 0) in ath9k_htc_ps_restore()
64 if (priv->ps_idle) { in ath9k_htc_ps_restore()
65 ath9k_hw_setrxabort(priv->ah, true); in ath9k_htc_ps_restore()
66 ath9k_hw_stopdmarecv(priv->ah, &reset); in ath9k_htc_ps_restore()
67 ath9k_hw_setpower(priv->ah, ATH9K_PM_FULL_SLEEP); in ath9k_htc_ps_restore()
68 } else if (priv->ps_enabled) { in ath9k_htc_ps_restore()
69 ath9k_hw_setpower(priv->ah, ATH9K_PM_NETWORK_SLEEP); in ath9k_htc_ps_restore()
73 mutex_unlock(&priv->htc_pm_lock); in ath9k_htc_ps_restore()
78 struct ath9k_htc_priv *priv = in ath9k_ps_work() local
81 ath9k_htc_setpower(priv, ATH9K_PM_AWAKE); in ath9k_ps_work()
88 ath9k_htc_setpower(priv, ATH9K_PM_NETWORK_SLEEP); in ath9k_ps_work()
93 struct ath9k_htc_priv *priv = data; in ath9k_htc_vif_iter() local
99 priv->reconfig_beacon = true; in ath9k_htc_vif_iter()
100 priv->rearm_ani = true; in ath9k_htc_vif_iter()
104 priv->rearm_ani = true; in ath9k_htc_vif_iter()
105 priv->reconfig_beacon = true; in ath9k_htc_vif_iter()
109 static void ath9k_htc_vif_reconfig(struct ath9k_htc_priv *priv) in ath9k_htc_vif_reconfig() argument
111 priv->rearm_ani = false; in ath9k_htc_vif_reconfig()
112 priv->reconfig_beacon = false; in ath9k_htc_vif_reconfig()
115 priv->hw, IEEE80211_IFACE_ITER_RESUME_ALL, in ath9k_htc_vif_reconfig()
116 ath9k_htc_vif_iter, priv); in ath9k_htc_vif_reconfig()
117 if (priv->rearm_ani) in ath9k_htc_vif_reconfig()
118 ath9k_htc_start_ani(priv); in ath9k_htc_vif_reconfig()
120 if (priv->reconfig_beacon) { in ath9k_htc_vif_reconfig()
121 ath9k_htc_ps_wakeup(priv); in ath9k_htc_vif_reconfig()
122 ath9k_htc_beacon_reconfig(priv); in ath9k_htc_vif_reconfig()
123 ath9k_htc_ps_restore(priv); in ath9k_htc_vif_reconfig()
140 static void ath9k_htc_set_mac_bssid_mask(struct ath9k_htc_priv *priv, in ath9k_htc_set_mac_bssid_mask() argument
143 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_set_mac_bssid_mask()
159 priv->hw, IEEE80211_IFACE_ITER_RESUME_ALL, in ath9k_htc_set_mac_bssid_mask()
170 static void ath9k_htc_set_opmode(struct ath9k_htc_priv *priv) in ath9k_htc_set_opmode() argument
172 if (priv->num_ibss_vif) in ath9k_htc_set_opmode()
173 priv->ah->opmode = NL80211_IFTYPE_ADHOC; in ath9k_htc_set_opmode()
174 else if (priv->num_ap_vif) in ath9k_htc_set_opmode()
175 priv->ah->opmode = NL80211_IFTYPE_AP; in ath9k_htc_set_opmode()
176 else if (priv->num_mbss_vif) in ath9k_htc_set_opmode()
177 priv->ah->opmode = NL80211_IFTYPE_MESH_POINT; in ath9k_htc_set_opmode()
179 priv->ah->opmode = NL80211_IFTYPE_STATION; in ath9k_htc_set_opmode()
181 ath9k_hw_setopmode(priv->ah); in ath9k_htc_set_opmode()
184 void ath9k_htc_reset(struct ath9k_htc_priv *priv) in ath9k_htc_reset() argument
186 struct ath_hw *ah = priv->ah; in ath9k_htc_reset()
188 struct ieee80211_channel *channel = priv->hw->conf.chandef.chan; in ath9k_htc_reset()
195 mutex_lock(&priv->mutex); in ath9k_htc_reset()
196 ath9k_htc_ps_wakeup(priv); in ath9k_htc_reset()
198 ath9k_htc_stop_ani(priv); in ath9k_htc_reset()
199 ieee80211_stop_queues(priv->hw); in ath9k_htc_reset()
201 del_timer_sync(&priv->tx.cleanup_timer); in ath9k_htc_reset()
202 ath9k_htc_tx_drain(priv); in ath9k_htc_reset()
208 ath9k_wmi_event_drain(priv); in ath9k_htc_reset()
210 caldata = &priv->caldata; in ath9k_htc_reset()
218 ath9k_cmn_update_txpow(ah, priv->curtxpow, priv->txpowlimit, in ath9k_htc_reset()
219 &priv->curtxpow); in ath9k_htc_reset()
222 ath9k_host_rx_init(priv); in ath9k_htc_reset()
224 mode = ath9k_htc_get_curmode(priv, ah->curchan); in ath9k_htc_reset()
229 htc_start(priv->htc); in ath9k_htc_reset()
230 ath9k_htc_vif_reconfig(priv); in ath9k_htc_reset()
231 ieee80211_wake_queues(priv->hw); in ath9k_htc_reset()
233 mod_timer(&priv->tx.cleanup_timer, in ath9k_htc_reset()
236 ath9k_htc_ps_restore(priv); in ath9k_htc_reset()
237 mutex_unlock(&priv->mutex); in ath9k_htc_reset()
240 static int ath9k_htc_set_channel(struct ath9k_htc_priv *priv, in ath9k_htc_set_channel() argument
244 struct ath_hw *ah = priv->ah; in ath9k_htc_set_channel()
260 ath9k_htc_ps_wakeup(priv); in ath9k_htc_set_channel()
262 ath9k_htc_stop_ani(priv); in ath9k_htc_set_channel()
263 del_timer_sync(&priv->tx.cleanup_timer); in ath9k_htc_set_channel()
264 ath9k_htc_tx_drain(priv); in ath9k_htc_set_channel()
270 ath9k_wmi_event_drain(priv); in ath9k_htc_set_channel()
274 priv->ah->curchan->channel, in ath9k_htc_set_channel()
279 caldata = &priv->caldata; in ath9k_htc_set_channel()
289 ath9k_cmn_update_txpow(ah, priv->curtxpow, priv->txpowlimit, in ath9k_htc_set_channel()
290 &priv->curtxpow); in ath9k_htc_set_channel()
296 ath9k_host_rx_init(priv); in ath9k_htc_set_channel()
298 mode = ath9k_htc_get_curmode(priv, hchan); in ath9k_htc_set_channel()
308 htc_start(priv->htc); in ath9k_htc_set_channel()
312 ath9k_htc_vif_reconfig(priv); in ath9k_htc_set_channel()
314 mod_timer(&priv->tx.cleanup_timer, in ath9k_htc_set_channel()
319 priv->spec_priv.spectral_mode == SPECTRAL_CHANSCAN) in ath9k_htc_set_channel()
320 ath9k_cmn_spectral_scan_trigger(common, &priv->spec_priv); in ath9k_htc_set_channel()
322 ath9k_htc_ps_restore(priv); in ath9k_htc_set_channel()
333 static void __ath9k_htc_remove_monitor_interface(struct ath9k_htc_priv *priv) in __ath9k_htc_remove_monitor_interface() argument
335 struct ath_common *common = ath9k_hw_common(priv->ah); in __ath9k_htc_remove_monitor_interface()
342 hvif.index = priv->mon_vif_idx; in __ath9k_htc_remove_monitor_interface()
346 priv->mon_vif_idx); in __ath9k_htc_remove_monitor_interface()
349 priv->nvifs--; in __ath9k_htc_remove_monitor_interface()
350 priv->vif_slot &= ~(1 << priv->mon_vif_idx); in __ath9k_htc_remove_monitor_interface()
353 static int ath9k_htc_add_monitor_interface(struct ath9k_htc_priv *priv) in ath9k_htc_add_monitor_interface() argument
355 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_add_monitor_interface()
361 if ((priv->nvifs >= ATH9K_HTC_MAX_VIF) || in ath9k_htc_add_monitor_interface()
362 (priv->nstations >= ATH9K_HTC_MAX_STA)) { in ath9k_htc_add_monitor_interface()
367 sta_idx = ffz(priv->sta_slot); in ath9k_htc_add_monitor_interface()
380 hvif.index = ffz(priv->vif_slot); in ath9k_htc_add_monitor_interface()
390 priv->mon_vif_idx = hvif.index; in ath9k_htc_add_monitor_interface()
391 priv->vif_slot |= (1 << hvif.index); in ath9k_htc_add_monitor_interface()
397 if (!priv->nvifs) in ath9k_htc_add_monitor_interface()
398 priv->ah->opmode = NL80211_IFTYPE_MONITOR; in ath9k_htc_add_monitor_interface()
400 priv->nvifs++; in ath9k_htc_add_monitor_interface()
420 priv->sta_slot |= (1 << sta_idx); in ath9k_htc_add_monitor_interface()
421 priv->nstations++; in ath9k_htc_add_monitor_interface()
422 priv->vif_sta_pos[priv->mon_vif_idx] = sta_idx; in ath9k_htc_add_monitor_interface()
423 priv->ah->is_monitoring = true; in ath9k_htc_add_monitor_interface()
427 priv->mon_vif_idx, sta_idx); in ath9k_htc_add_monitor_interface()
435 __ath9k_htc_remove_monitor_interface(priv); in ath9k_htc_add_monitor_interface()
442 static int ath9k_htc_remove_monitor_interface(struct ath9k_htc_priv *priv) in ath9k_htc_remove_monitor_interface() argument
444 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_remove_monitor_interface()
448 __ath9k_htc_remove_monitor_interface(priv); in ath9k_htc_remove_monitor_interface()
450 sta_idx = priv->vif_sta_pos[priv->mon_vif_idx]; in ath9k_htc_remove_monitor_interface()
458 priv->sta_slot &= ~(1 << sta_idx); in ath9k_htc_remove_monitor_interface()
459 priv->nstations--; in ath9k_htc_remove_monitor_interface()
460 priv->ah->is_monitoring = false; in ath9k_htc_remove_monitor_interface()
464 priv->mon_vif_idx, sta_idx); in ath9k_htc_remove_monitor_interface()
469 static int ath9k_htc_add_station(struct ath9k_htc_priv *priv, in ath9k_htc_add_station() argument
473 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_add_station()
481 if (priv->nstations >= ATH9K_HTC_MAX_STA) in ath9k_htc_add_station()
484 sta_idx = ffz(priv->sta_slot); in ath9k_htc_add_station()
527 priv->sta_slot |= (1 << sta_idx); in ath9k_htc_add_station()
528 priv->nstations++; in ath9k_htc_add_station()
530 priv->vif_sta_pos[avp->index] = sta_idx; in ath9k_htc_add_station()
535 static int ath9k_htc_remove_station(struct ath9k_htc_priv *priv, in ath9k_htc_remove_station() argument
539 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_remove_station()
549 sta_idx = priv->vif_sta_pos[avp->index]; in ath9k_htc_remove_station()
571 priv->sta_slot &= ~(1 << sta_idx); in ath9k_htc_remove_station()
572 priv->nstations--; in ath9k_htc_remove_station()
577 int ath9k_htc_update_cap_target(struct ath9k_htc_priv *priv, in ath9k_htc_update_cap_target() argument
589 tcap.tx_chainmask = priv->ah->caps.tx_chainmask; in ath9k_htc_update_cap_target()
596 static void ath9k_htc_setup_rate(struct ath9k_htc_priv *priv, in ath9k_htc_setup_rate() argument
605 sband = priv->hw->wiphy->bands[priv->hw->conf.chandef.chan->band]; in ath9k_htc_setup_rate()
631 (conf_is_ht40(&priv->hw->conf))) in ath9k_htc_setup_rate()
633 if (conf_is_ht40(&priv->hw->conf) && in ath9k_htc_setup_rate()
636 else if (conf_is_ht20(&priv->hw->conf) && in ath9k_htc_setup_rate()
646 static int ath9k_htc_send_rate_cmd(struct ath9k_htc_priv *priv, in ath9k_htc_send_rate_cmd() argument
649 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_send_rate_cmd()
662 static void ath9k_htc_init_rate(struct ath9k_htc_priv *priv, in ath9k_htc_init_rate() argument
665 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_init_rate()
670 ath9k_htc_setup_rate(priv, sta, &trate); in ath9k_htc_init_rate()
671 ret = ath9k_htc_send_rate_cmd(priv, &trate); in ath9k_htc_init_rate()
678 static void ath9k_htc_update_rate(struct ath9k_htc_priv *priv, in ath9k_htc_update_rate() argument
682 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_update_rate()
695 ath9k_htc_setup_rate(priv, sta, &trate); in ath9k_htc_update_rate()
698 ret = ath9k_htc_send_rate_cmd(priv, &trate); in ath9k_htc_update_rate()
705 static int ath9k_htc_tx_aggr_oper(struct ath9k_htc_priv *priv, in ath9k_htc_tx_aggr_oper() argument
711 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_tx_aggr_oper()
738 spin_lock_bh(&priv->tx.tx_lock); in ath9k_htc_tx_aggr_oper()
740 spin_unlock_bh(&priv->tx.tx_lock); in ath9k_htc_tx_aggr_oper()
749 void ath9k_htc_start_ani(struct ath9k_htc_priv *priv) in ath9k_htc_start_ani() argument
751 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_start_ani()
760 ieee80211_queue_delayed_work(common->hw, &priv->ani_work, in ath9k_htc_start_ani()
764 void ath9k_htc_stop_ani(struct ath9k_htc_priv *priv) in ath9k_htc_stop_ani() argument
766 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_stop_ani()
767 cancel_delayed_work_sync(&priv->ani_work); in ath9k_htc_stop_ani()
773 struct ath9k_htc_priv *priv = in ath9k_htc_ani_work() local
775 struct ath_hw *ah = priv->ah; in ath9k_htc_ani_work()
827 ath9k_htc_ps_wakeup(priv); in ath9k_htc_ani_work()
839 ath9k_htc_ps_restore(priv); in ath9k_htc_ani_work()
857 ieee80211_queue_delayed_work(common->hw, &priv->ani_work, in ath9k_htc_ani_work()
870 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_tx() local
871 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_tx()
888 slot = ath9k_htc_tx_get_slot(priv); in ath9k_htc_tx()
894 ret = ath9k_htc_tx_start(priv, control->sta, skb, slot, false); in ath9k_htc_tx()
900 ath9k_htc_check_stop_queues(priv); in ath9k_htc_tx()
905 ath9k_htc_tx_clear_slot(priv, slot); in ath9k_htc_tx()
912 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_start() local
913 struct ath_hw *ah = priv->ah; in ath9k_htc_start()
922 mutex_lock(&priv->mutex); in ath9k_htc_start()
929 ath9k_htc_setpower(priv, ATH9K_PM_AWAKE); in ath9k_htc_start()
940 mutex_unlock(&priv->mutex); in ath9k_htc_start()
944 ath9k_cmn_update_txpow(ah, priv->curtxpow, priv->txpowlimit, in ath9k_htc_start()
945 &priv->curtxpow); in ath9k_htc_start()
947 mode = ath9k_htc_get_curmode(priv, init_channel); in ath9k_htc_start()
953 ath9k_host_rx_init(priv); in ath9k_htc_start()
955 ret = ath9k_htc_update_cap_target(priv, 0); in ath9k_htc_start()
961 htc_start(priv->htc); in ath9k_htc_start()
963 spin_lock_bh(&priv->tx.tx_lock); in ath9k_htc_start()
964 priv->tx.flags &= ~ATH9K_HTC_OP_TX_QUEUES_STOP; in ath9k_htc_start()
965 spin_unlock_bh(&priv->tx.tx_lock); in ath9k_htc_start()
969 mod_timer(&priv->tx.cleanup_timer, in ath9k_htc_start()
972 ath9k_htc_start_btcoex(priv); in ath9k_htc_start()
974 mutex_unlock(&priv->mutex); in ath9k_htc_start()
981 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_stop() local
982 struct ath_hw *ah = priv->ah; in ath9k_htc_stop()
987 mutex_lock(&priv->mutex); in ath9k_htc_stop()
991 mutex_unlock(&priv->mutex); in ath9k_htc_stop()
995 ath9k_htc_ps_wakeup(priv); in ath9k_htc_stop()
1001 tasklet_kill(&priv->rx_tasklet); in ath9k_htc_stop()
1003 del_timer_sync(&priv->tx.cleanup_timer); in ath9k_htc_stop()
1004 ath9k_htc_tx_drain(priv); in ath9k_htc_stop()
1005 ath9k_wmi_event_drain(priv); in ath9k_htc_stop()
1007 mutex_unlock(&priv->mutex); in ath9k_htc_stop()
1010 cancel_work_sync(&priv->fatal_work); in ath9k_htc_stop()
1011 cancel_work_sync(&priv->ps_work); in ath9k_htc_stop()
1014 cancel_work_sync(&priv->led_work); in ath9k_htc_stop()
1016 ath9k_htc_stop_ani(priv); in ath9k_htc_stop()
1018 mutex_lock(&priv->mutex); in ath9k_htc_stop()
1020 ath9k_htc_stop_btcoex(priv); in ath9k_htc_stop()
1023 if (priv->ah->is_monitoring) in ath9k_htc_stop()
1024 ath9k_htc_remove_monitor_interface(priv); in ath9k_htc_stop()
1028 ath9k_htc_ps_restore(priv); in ath9k_htc_stop()
1029 ath9k_htc_setpower(priv, ATH9K_PM_FULL_SLEEP); in ath9k_htc_stop()
1034 mutex_unlock(&priv->mutex); in ath9k_htc_stop()
1040 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_add_interface() local
1042 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_add_interface()
1047 mutex_lock(&priv->mutex); in ath9k_htc_add_interface()
1049 ath9k_htc_ps_wakeup(priv); in ath9k_htc_add_interface()
1074 avp->index = hvif.index = ffz(priv->vif_slot); in ath9k_htc_add_interface()
1084 ret = ath9k_htc_add_station(priv, vif, NULL); in ath9k_htc_add_interface()
1090 ath9k_htc_set_mac_bssid_mask(priv, vif); in ath9k_htc_add_interface()
1092 priv->vif_slot |= (1 << avp->index); in ath9k_htc_add_interface()
1093 priv->nvifs++; in ath9k_htc_add_interface()
1095 INC_VIF(priv, vif->type); in ath9k_htc_add_interface()
1100 ath9k_htc_assign_bslot(priv, vif); in ath9k_htc_add_interface()
1102 ath9k_htc_set_opmode(priv); in ath9k_htc_add_interface()
1104 if ((priv->ah->opmode == NL80211_IFTYPE_AP) && in ath9k_htc_add_interface()
1106 ath9k_hw_set_tsfadjust(priv->ah, true); in ath9k_htc_add_interface()
1107 ath9k_htc_start_ani(priv); in ath9k_htc_add_interface()
1114 ath9k_htc_ps_restore(priv); in ath9k_htc_add_interface()
1115 mutex_unlock(&priv->mutex); in ath9k_htc_add_interface()
1123 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_remove_interface() local
1124 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_remove_interface()
1130 mutex_lock(&priv->mutex); in ath9k_htc_remove_interface()
1131 ath9k_htc_ps_wakeup(priv); in ath9k_htc_remove_interface()
1141 priv->nvifs--; in ath9k_htc_remove_interface()
1142 priv->vif_slot &= ~(1 << avp->index); in ath9k_htc_remove_interface()
1144 if (priv->csa_vif == vif) in ath9k_htc_remove_interface()
1145 priv->csa_vif = NULL; in ath9k_htc_remove_interface()
1147 ath9k_htc_remove_station(priv, vif, NULL); in ath9k_htc_remove_interface()
1149 DEC_VIF(priv, vif->type); in ath9k_htc_remove_interface()
1154 ath9k_htc_remove_bslot(priv, vif); in ath9k_htc_remove_interface()
1156 ath9k_htc_set_opmode(priv); in ath9k_htc_remove_interface()
1158 ath9k_htc_set_mac_bssid_mask(priv, vif); in ath9k_htc_remove_interface()
1163 if ((vif->type == NL80211_IFTYPE_AP) && (priv->num_ap_vif == 0)) { in ath9k_htc_remove_interface()
1164 priv->rearm_ani = false; in ath9k_htc_remove_interface()
1166 priv->hw, IEEE80211_IFACE_ITER_RESUME_ALL, in ath9k_htc_remove_interface()
1167 ath9k_htc_vif_iter, priv); in ath9k_htc_remove_interface()
1168 if (!priv->rearm_ani) in ath9k_htc_remove_interface()
1169 ath9k_htc_stop_ani(priv); in ath9k_htc_remove_interface()
1174 ath9k_htc_ps_restore(priv); in ath9k_htc_remove_interface()
1175 mutex_unlock(&priv->mutex); in ath9k_htc_remove_interface()
1180 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_config() local
1181 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_config()
1186 mutex_lock(&priv->mutex); in ath9k_htc_config()
1187 ath9k_htc_ps_wakeup(priv); in ath9k_htc_config()
1190 mutex_lock(&priv->htc_pm_lock); in ath9k_htc_config()
1192 priv->ps_idle = !!(conf->flags & IEEE80211_CONF_IDLE); in ath9k_htc_config()
1193 if (!priv->ps_idle) in ath9k_htc_config()
1196 mutex_unlock(&priv->htc_pm_lock); in ath9k_htc_config()
1205 !priv->ah->is_monitoring) in ath9k_htc_config()
1206 ath9k_htc_add_monitor_interface(priv); in ath9k_htc_config()
1207 else if (priv->ah->is_monitoring) in ath9k_htc_config()
1208 ath9k_htc_remove_monitor_interface(priv); in ath9k_htc_config()
1218 ath9k_cmn_get_channel(hw, priv->ah, &hw->conf.chandef); in ath9k_htc_config()
1219 if (ath9k_htc_set_channel(priv, hw, &priv->ah->channels[pos]) < 0) { in ath9k_htc_config()
1229 ath9k_htc_setpower(priv, ATH9K_PM_NETWORK_SLEEP); in ath9k_htc_config()
1230 priv->ps_enabled = true; in ath9k_htc_config()
1232 priv->ps_enabled = false; in ath9k_htc_config()
1233 cancel_work_sync(&priv->ps_work); in ath9k_htc_config()
1234 ath9k_htc_setpower(priv, ATH9K_PM_AWAKE); in ath9k_htc_config()
1239 priv->txpowlimit = 2 * conf->power_level; in ath9k_htc_config()
1240 ath9k_cmn_update_txpow(priv->ah, priv->curtxpow, in ath9k_htc_config()
1241 priv->txpowlimit, &priv->curtxpow); in ath9k_htc_config()
1245 ath9k_htc_ps_restore(priv); in ath9k_htc_config()
1246 mutex_unlock(&priv->mutex); in ath9k_htc_config()
1264 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_configure_filter() local
1265 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_configure_filter()
1268 mutex_lock(&priv->mutex); in ath9k_htc_configure_filter()
1273 ath_dbg(ath9k_hw_common(priv->ah), ANY, in ath9k_htc_configure_filter()
1275 mutex_unlock(&priv->mutex); in ath9k_htc_configure_filter()
1278 ath9k_htc_ps_wakeup(priv); in ath9k_htc_configure_filter()
1280 priv->rxfilter = *total_flags; in ath9k_htc_configure_filter()
1281 rfilt = ath9k_htc_calcrxfilter(priv); in ath9k_htc_configure_filter()
1282 ath9k_hw_setrxfilter(priv->ah, rfilt); in ath9k_htc_configure_filter()
1284 ath_dbg(ath9k_hw_common(priv->ah), CONFIG, "Set HW RX filter: 0x%x\n", in ath9k_htc_configure_filter()
1287 ath9k_htc_ps_restore(priv); in ath9k_htc_configure_filter()
1288 mutex_unlock(&priv->mutex); in ath9k_htc_configure_filter()
1297 struct ath9k_htc_priv *priv = ista->htc_priv; in ath9k_htc_sta_rc_update_work() local
1298 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_sta_rc_update_work()
1301 mutex_lock(&priv->mutex); in ath9k_htc_sta_rc_update_work()
1302 ath9k_htc_ps_wakeup(priv); in ath9k_htc_sta_rc_update_work()
1305 ath9k_htc_setup_rate(priv, sta, &trate); in ath9k_htc_sta_rc_update_work()
1306 if (!ath9k_htc_send_rate_cmd(priv, &trate)) in ath9k_htc_sta_rc_update_work()
1315 ath9k_htc_ps_restore(priv); in ath9k_htc_sta_rc_update_work()
1316 mutex_unlock(&priv->mutex); in ath9k_htc_sta_rc_update_work()
1323 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_sta_add() local
1327 mutex_lock(&priv->mutex); in ath9k_htc_sta_add()
1328 ath9k_htc_ps_wakeup(priv); in ath9k_htc_sta_add()
1329 ret = ath9k_htc_add_station(priv, vif, sta); in ath9k_htc_sta_add()
1332 ista->htc_priv = priv; in ath9k_htc_sta_add()
1333 ath9k_htc_init_rate(priv, sta); in ath9k_htc_sta_add()
1335 ath9k_htc_ps_restore(priv); in ath9k_htc_sta_add()
1336 mutex_unlock(&priv->mutex); in ath9k_htc_sta_add()
1345 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_sta_remove() local
1351 mutex_lock(&priv->mutex); in ath9k_htc_sta_remove()
1352 ath9k_htc_ps_wakeup(priv); in ath9k_htc_sta_remove()
1353 htc_sta_drain(priv->htc, ista->index); in ath9k_htc_sta_remove()
1354 ret = ath9k_htc_remove_station(priv, vif, sta); in ath9k_htc_sta_remove()
1355 ath9k_htc_ps_restore(priv); in ath9k_htc_sta_remove()
1356 mutex_unlock(&priv->mutex); in ath9k_htc_sta_remove()
1377 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_conf_tx() local
1378 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_conf_tx()
1385 mutex_lock(&priv->mutex); in ath9k_htc_conf_tx()
1386 ath9k_htc_ps_wakeup(priv); in ath9k_htc_conf_tx()
1395 qnum = get_hw_qnum(queue, priv->hwq_map); in ath9k_htc_conf_tx()
1402 ret = ath_htc_txq_update(priv, qnum, &qi); in ath9k_htc_conf_tx()
1408 if ((priv->ah->opmode == NL80211_IFTYPE_ADHOC) && in ath9k_htc_conf_tx()
1409 (qnum == priv->hwq_map[IEEE80211_AC_BE])) in ath9k_htc_conf_tx()
1410 ath9k_htc_beaconq_config(priv); in ath9k_htc_conf_tx()
1412 ath9k_htc_ps_restore(priv); in ath9k_htc_conf_tx()
1413 mutex_unlock(&priv->mutex); in ath9k_htc_conf_tx()
1424 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_set_key() local
1425 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_set_key()
1446 mutex_lock(&priv->mutex); in ath9k_htc_set_key()
1448 ath9k_htc_ps_wakeup(priv); in ath9k_htc_set_key()
1459 if (priv->ah->sw_mgmt_crypto_tx && in ath9k_htc_set_key()
1472 ath9k_htc_ps_restore(priv); in ath9k_htc_set_key()
1473 mutex_unlock(&priv->mutex); in ath9k_htc_set_key()
1478 static void ath9k_htc_set_bssid(struct ath9k_htc_priv *priv) in ath9k_htc_set_bssid() argument
1480 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_set_bssid()
1482 ath9k_hw_write_associd(priv->ah); in ath9k_htc_set_bssid()
1489 struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *)data; in ath9k_htc_bss_iter() local
1490 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_bss_iter()
1501 static void ath9k_htc_choose_set_bssid(struct ath9k_htc_priv *priv) in ath9k_htc_choose_set_bssid() argument
1503 if (priv->num_sta_assoc_vif == 1) { in ath9k_htc_choose_set_bssid()
1505 priv->hw, IEEE80211_IFACE_ITER_RESUME_ALL, in ath9k_htc_choose_set_bssid()
1506 ath9k_htc_bss_iter, priv); in ath9k_htc_choose_set_bssid()
1507 ath9k_htc_set_bssid(priv); in ath9k_htc_choose_set_bssid()
1516 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_bss_info_changed() local
1517 struct ath_hw *ah = priv->ah; in ath9k_htc_bss_info_changed()
1521 mutex_lock(&priv->mutex); in ath9k_htc_bss_info_changed()
1522 ath9k_htc_ps_wakeup(priv); in ath9k_htc_bss_info_changed()
1529 priv->num_sta_assoc_vif++ : priv->num_sta_assoc_vif--; in ath9k_htc_bss_info_changed()
1534 if (priv->ah->opmode == NL80211_IFTYPE_STATION) { in ath9k_htc_bss_info_changed()
1535 ath9k_htc_choose_set_bssid(priv); in ath9k_htc_bss_info_changed()
1536 if (bss_conf->assoc && (priv->num_sta_assoc_vif == 1)) in ath9k_htc_bss_info_changed()
1537 ath9k_htc_start_ani(priv); in ath9k_htc_bss_info_changed()
1538 else if (priv->num_sta_assoc_vif == 0) in ath9k_htc_bss_info_changed()
1539 ath9k_htc_stop_ani(priv); in ath9k_htc_bss_info_changed()
1544 if (priv->ah->opmode == NL80211_IFTYPE_ADHOC) { in ath9k_htc_bss_info_changed()
1547 ath9k_htc_set_bssid(priv); in ath9k_htc_bss_info_changed()
1554 ath9k_htc_set_tsfadjust(priv, vif); in ath9k_htc_bss_info_changed()
1555 priv->cur_beacon_conf.enable_beacon = 1; in ath9k_htc_bss_info_changed()
1556 ath9k_htc_beacon_config(priv, vif); in ath9k_htc_bss_info_changed()
1564 if ((priv->num_ap_vif + priv->num_mbss_vif <= 1) || in ath9k_htc_bss_info_changed()
1565 priv->num_ibss_vif) { in ath9k_htc_bss_info_changed()
1569 priv->cur_beacon_conf.enable_beacon = 0; in ath9k_htc_bss_info_changed()
1570 ath9k_htc_beacon_config(priv, vif); in ath9k_htc_bss_info_changed()
1578 if (priv->nvifs == 1 && in ath9k_htc_bss_info_changed()
1579 ((priv->ah->opmode == NL80211_IFTYPE_AP && in ath9k_htc_bss_info_changed()
1581 priv->num_ap_vif == 1) || in ath9k_htc_bss_info_changed()
1582 (priv->ah->opmode == NL80211_IFTYPE_MESH_POINT && in ath9k_htc_bss_info_changed()
1584 priv->num_mbss_vif == 1))) { in ath9k_htc_bss_info_changed()
1585 set_bit(OP_TSF_RESET, &priv->op_flags); in ath9k_htc_bss_info_changed()
1590 ath9k_htc_beacon_config(priv, vif); in ath9k_htc_bss_info_changed()
1604 priv->beacon.slottime = slottime; in ath9k_htc_bss_info_changed()
1605 priv->beacon.updateslot = UPDATE; in ath9k_htc_bss_info_changed()
1613 ath9k_htc_update_rate(priv, vif, bss_conf); in ath9k_htc_bss_info_changed()
1615 ath9k_htc_ps_restore(priv); in ath9k_htc_bss_info_changed()
1616 mutex_unlock(&priv->mutex); in ath9k_htc_bss_info_changed()
1622 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_get_tsf() local
1625 mutex_lock(&priv->mutex); in ath9k_htc_get_tsf()
1626 ath9k_htc_ps_wakeup(priv); in ath9k_htc_get_tsf()
1627 tsf = ath9k_hw_gettsf64(priv->ah); in ath9k_htc_get_tsf()
1628 ath9k_htc_ps_restore(priv); in ath9k_htc_get_tsf()
1629 mutex_unlock(&priv->mutex); in ath9k_htc_get_tsf()
1637 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_set_tsf() local
1639 mutex_lock(&priv->mutex); in ath9k_htc_set_tsf()
1640 ath9k_htc_ps_wakeup(priv); in ath9k_htc_set_tsf()
1641 ath9k_hw_settsf64(priv->ah, tsf); in ath9k_htc_set_tsf()
1642 ath9k_htc_ps_restore(priv); in ath9k_htc_set_tsf()
1643 mutex_unlock(&priv->mutex); in ath9k_htc_set_tsf()
1649 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_reset_tsf() local
1651 mutex_lock(&priv->mutex); in ath9k_htc_reset_tsf()
1652 ath9k_htc_ps_wakeup(priv); in ath9k_htc_reset_tsf()
1653 ath9k_hw_reset_tsf(priv->ah); in ath9k_htc_reset_tsf()
1654 ath9k_htc_ps_restore(priv); in ath9k_htc_reset_tsf()
1655 mutex_unlock(&priv->mutex); in ath9k_htc_reset_tsf()
1664 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_ampdu_action() local
1668 mutex_lock(&priv->mutex); in ath9k_htc_ampdu_action()
1669 ath9k_htc_ps_wakeup(priv); in ath9k_htc_ampdu_action()
1677 ret = ath9k_htc_tx_aggr_oper(priv, vif, sta, action, tid); in ath9k_htc_ampdu_action()
1684 ath9k_htc_tx_aggr_oper(priv, vif, sta, action, tid); in ath9k_htc_ampdu_action()
1689 spin_lock_bh(&priv->tx.tx_lock); in ath9k_htc_ampdu_action()
1691 spin_unlock_bh(&priv->tx.tx_lock); in ath9k_htc_ampdu_action()
1694 ath_err(ath9k_hw_common(priv->ah), "Unknown AMPDU action\n"); in ath9k_htc_ampdu_action()
1697 ath9k_htc_ps_restore(priv); in ath9k_htc_ampdu_action()
1698 mutex_unlock(&priv->mutex); in ath9k_htc_ampdu_action()
1707 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_sw_scan_start() local
1708 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_sw_scan_start()
1710 mutex_lock(&priv->mutex); in ath9k_htc_sw_scan_start()
1711 spin_lock_bh(&priv->beacon_lock); in ath9k_htc_sw_scan_start()
1713 spin_unlock_bh(&priv->beacon_lock); in ath9k_htc_sw_scan_start()
1714 cancel_work_sync(&priv->ps_work); in ath9k_htc_sw_scan_start()
1715 ath9k_htc_stop_ani(priv); in ath9k_htc_sw_scan_start()
1716 mutex_unlock(&priv->mutex); in ath9k_htc_sw_scan_start()
1722 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_sw_scan_complete() local
1723 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_sw_scan_complete()
1725 mutex_lock(&priv->mutex); in ath9k_htc_sw_scan_complete()
1726 spin_lock_bh(&priv->beacon_lock); in ath9k_htc_sw_scan_complete()
1728 spin_unlock_bh(&priv->beacon_lock); in ath9k_htc_sw_scan_complete()
1729 ath9k_htc_ps_wakeup(priv); in ath9k_htc_sw_scan_complete()
1730 ath9k_htc_vif_reconfig(priv); in ath9k_htc_sw_scan_complete()
1731 ath9k_htc_ps_restore(priv); in ath9k_htc_sw_scan_complete()
1732 mutex_unlock(&priv->mutex); in ath9k_htc_sw_scan_complete()
1743 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_set_coverage_class() local
1745 mutex_lock(&priv->mutex); in ath9k_htc_set_coverage_class()
1746 ath9k_htc_ps_wakeup(priv); in ath9k_htc_set_coverage_class()
1747 priv->ah->coverage_class = coverage_class; in ath9k_htc_set_coverage_class()
1748 ath9k_hw_init_global_settings(priv->ah); in ath9k_htc_set_coverage_class()
1749 ath9k_htc_ps_restore(priv); in ath9k_htc_set_coverage_class()
1750 mutex_unlock(&priv->mutex); in ath9k_htc_set_coverage_class()
1762 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_set_bitrate_mask() local
1763 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_set_bitrate_mask()
1805 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_get_stats() local
1806 struct ath_hw *ah = priv->ah; in ath9k_htc_get_stats()
1817 struct base_eep_header *ath9k_htc_get_eeprom_base(struct ath9k_htc_priv *priv) in ath9k_htc_get_eeprom_base() argument
1826 if (AR_SREV_9271(priv->ah)) in ath9k_htc_get_eeprom_base()
1828 &priv->ah->eeprom.map4k.baseEepHeader; in ath9k_htc_get_eeprom_base()
1829 else if (priv->ah->hw_version.usbdev == AR9280_USB) in ath9k_htc_get_eeprom_base()
1831 &priv->ah->eeprom.def.baseEepHeader; in ath9k_htc_get_eeprom_base()
1832 else if (priv->ah->hw_version.usbdev == AR9287_USB) in ath9k_htc_get_eeprom_base()
1834 &priv->ah->eeprom.map9287.baseEepHeader; in ath9k_htc_get_eeprom_base()
1842 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_get_antenna() local
1843 struct base_eep_header *pBase = ath9k_htc_get_eeprom_base(priv); in ath9k_htc_get_antenna()
1858 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_channel_switch_beacon() local
1861 if (WARN_ON(priv->csa_vif)) in ath9k_htc_channel_switch_beacon()
1864 priv->csa_vif = vif; in ath9k_htc_channel_switch_beacon()