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()
824 ath9k_htc_ps_wakeup(priv); in ath9k_htc_ani_work()
836 ath9k_htc_ps_restore(priv); in ath9k_htc_ani_work()
850 ieee80211_queue_delayed_work(common->hw, &priv->ani_work, in ath9k_htc_ani_work()
863 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_tx() local
864 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_tx()
881 slot = ath9k_htc_tx_get_slot(priv); in ath9k_htc_tx()
887 ret = ath9k_htc_tx_start(priv, control->sta, skb, slot, false); in ath9k_htc_tx()
893 ath9k_htc_check_stop_queues(priv); in ath9k_htc_tx()
898 ath9k_htc_tx_clear_slot(priv, slot); in ath9k_htc_tx()
905 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_start() local
906 struct ath_hw *ah = priv->ah; in ath9k_htc_start()
915 mutex_lock(&priv->mutex); in ath9k_htc_start()
922 ath9k_htc_setpower(priv, ATH9K_PM_AWAKE); in ath9k_htc_start()
933 mutex_unlock(&priv->mutex); in ath9k_htc_start()
937 ath9k_cmn_update_txpow(ah, priv->curtxpow, priv->txpowlimit, in ath9k_htc_start()
938 &priv->curtxpow); in ath9k_htc_start()
940 mode = ath9k_htc_get_curmode(priv, init_channel); in ath9k_htc_start()
946 ath9k_host_rx_init(priv); in ath9k_htc_start()
948 ret = ath9k_htc_update_cap_target(priv, 0); in ath9k_htc_start()
954 htc_start(priv->htc); in ath9k_htc_start()
956 spin_lock_bh(&priv->tx.tx_lock); in ath9k_htc_start()
957 priv->tx.flags &= ~ATH9K_HTC_OP_TX_QUEUES_STOP; in ath9k_htc_start()
958 spin_unlock_bh(&priv->tx.tx_lock); in ath9k_htc_start()
962 mod_timer(&priv->tx.cleanup_timer, in ath9k_htc_start()
965 ath9k_htc_start_btcoex(priv); in ath9k_htc_start()
967 mutex_unlock(&priv->mutex); in ath9k_htc_start()
974 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_stop() local
975 struct ath_hw *ah = priv->ah; in ath9k_htc_stop()
980 mutex_lock(&priv->mutex); in ath9k_htc_stop()
984 mutex_unlock(&priv->mutex); in ath9k_htc_stop()
988 ath9k_htc_ps_wakeup(priv); in ath9k_htc_stop()
994 tasklet_kill(&priv->rx_tasklet); in ath9k_htc_stop()
996 del_timer_sync(&priv->tx.cleanup_timer); in ath9k_htc_stop()
997 ath9k_htc_tx_drain(priv); in ath9k_htc_stop()
998 ath9k_wmi_event_drain(priv); in ath9k_htc_stop()
1000 mutex_unlock(&priv->mutex); in ath9k_htc_stop()
1003 cancel_work_sync(&priv->fatal_work); in ath9k_htc_stop()
1004 cancel_work_sync(&priv->ps_work); in ath9k_htc_stop()
1007 cancel_work_sync(&priv->led_work); in ath9k_htc_stop()
1009 ath9k_htc_stop_ani(priv); in ath9k_htc_stop()
1011 mutex_lock(&priv->mutex); in ath9k_htc_stop()
1013 ath9k_htc_stop_btcoex(priv); in ath9k_htc_stop()
1016 if (priv->ah->is_monitoring) in ath9k_htc_stop()
1017 ath9k_htc_remove_monitor_interface(priv); in ath9k_htc_stop()
1021 ath9k_htc_ps_restore(priv); in ath9k_htc_stop()
1022 ath9k_htc_setpower(priv, ATH9K_PM_FULL_SLEEP); in ath9k_htc_stop()
1027 mutex_unlock(&priv->mutex); in ath9k_htc_stop()
1033 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_add_interface() local
1035 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_add_interface()
1040 mutex_lock(&priv->mutex); in ath9k_htc_add_interface()
1042 ath9k_htc_ps_wakeup(priv); in ath9k_htc_add_interface()
1067 avp->index = hvif.index = ffz(priv->vif_slot); in ath9k_htc_add_interface()
1077 ret = ath9k_htc_add_station(priv, vif, NULL); in ath9k_htc_add_interface()
1083 ath9k_htc_set_mac_bssid_mask(priv, vif); in ath9k_htc_add_interface()
1085 priv->vif_slot |= (1 << avp->index); in ath9k_htc_add_interface()
1086 priv->nvifs++; in ath9k_htc_add_interface()
1088 INC_VIF(priv, vif->type); in ath9k_htc_add_interface()
1093 ath9k_htc_assign_bslot(priv, vif); in ath9k_htc_add_interface()
1095 ath9k_htc_set_opmode(priv); in ath9k_htc_add_interface()
1097 if ((priv->ah->opmode == NL80211_IFTYPE_AP) && in ath9k_htc_add_interface()
1099 ath9k_hw_set_tsfadjust(priv->ah, true); in ath9k_htc_add_interface()
1100 ath9k_htc_start_ani(priv); in ath9k_htc_add_interface()
1107 ath9k_htc_ps_restore(priv); in ath9k_htc_add_interface()
1108 mutex_unlock(&priv->mutex); in ath9k_htc_add_interface()
1116 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_remove_interface() local
1117 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_remove_interface()
1123 mutex_lock(&priv->mutex); in ath9k_htc_remove_interface()
1124 ath9k_htc_ps_wakeup(priv); in ath9k_htc_remove_interface()
1134 priv->nvifs--; in ath9k_htc_remove_interface()
1135 priv->vif_slot &= ~(1 << avp->index); in ath9k_htc_remove_interface()
1137 ath9k_htc_remove_station(priv, vif, NULL); in ath9k_htc_remove_interface()
1139 DEC_VIF(priv, vif->type); in ath9k_htc_remove_interface()
1144 ath9k_htc_remove_bslot(priv, vif); in ath9k_htc_remove_interface()
1146 ath9k_htc_set_opmode(priv); in ath9k_htc_remove_interface()
1148 ath9k_htc_set_mac_bssid_mask(priv, vif); in ath9k_htc_remove_interface()
1153 if ((vif->type == NL80211_IFTYPE_AP) && (priv->num_ap_vif == 0)) { in ath9k_htc_remove_interface()
1154 priv->rearm_ani = false; in ath9k_htc_remove_interface()
1156 priv->hw, IEEE80211_IFACE_ITER_RESUME_ALL, in ath9k_htc_remove_interface()
1157 ath9k_htc_vif_iter, priv); in ath9k_htc_remove_interface()
1158 if (!priv->rearm_ani) in ath9k_htc_remove_interface()
1159 ath9k_htc_stop_ani(priv); in ath9k_htc_remove_interface()
1164 ath9k_htc_ps_restore(priv); in ath9k_htc_remove_interface()
1165 mutex_unlock(&priv->mutex); in ath9k_htc_remove_interface()
1170 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_config() local
1171 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_config()
1176 mutex_lock(&priv->mutex); in ath9k_htc_config()
1177 ath9k_htc_ps_wakeup(priv); in ath9k_htc_config()
1180 mutex_lock(&priv->htc_pm_lock); in ath9k_htc_config()
1182 priv->ps_idle = !!(conf->flags & IEEE80211_CONF_IDLE); in ath9k_htc_config()
1183 if (!priv->ps_idle) in ath9k_htc_config()
1186 mutex_unlock(&priv->htc_pm_lock); in ath9k_htc_config()
1195 !priv->ah->is_monitoring) in ath9k_htc_config()
1196 ath9k_htc_add_monitor_interface(priv); in ath9k_htc_config()
1197 else if (priv->ah->is_monitoring) in ath9k_htc_config()
1198 ath9k_htc_remove_monitor_interface(priv); in ath9k_htc_config()
1208 ath9k_cmn_get_channel(hw, priv->ah, &hw->conf.chandef); in ath9k_htc_config()
1209 if (ath9k_htc_set_channel(priv, hw, &priv->ah->channels[pos]) < 0) { in ath9k_htc_config()
1219 ath9k_htc_setpower(priv, ATH9K_PM_NETWORK_SLEEP); in ath9k_htc_config()
1220 priv->ps_enabled = true; in ath9k_htc_config()
1222 priv->ps_enabled = false; in ath9k_htc_config()
1223 cancel_work_sync(&priv->ps_work); in ath9k_htc_config()
1224 ath9k_htc_setpower(priv, ATH9K_PM_AWAKE); in ath9k_htc_config()
1229 priv->txpowlimit = 2 * conf->power_level; in ath9k_htc_config()
1230 ath9k_cmn_update_txpow(priv->ah, priv->curtxpow, in ath9k_htc_config()
1231 priv->txpowlimit, &priv->curtxpow); in ath9k_htc_config()
1235 ath9k_htc_ps_restore(priv); in ath9k_htc_config()
1236 mutex_unlock(&priv->mutex); in ath9k_htc_config()
1255 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_configure_filter() local
1256 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_configure_filter()
1259 mutex_lock(&priv->mutex); in ath9k_htc_configure_filter()
1264 ath_dbg(ath9k_hw_common(priv->ah), ANY, in ath9k_htc_configure_filter()
1266 mutex_unlock(&priv->mutex); in ath9k_htc_configure_filter()
1269 ath9k_htc_ps_wakeup(priv); in ath9k_htc_configure_filter()
1271 priv->rxfilter = *total_flags; in ath9k_htc_configure_filter()
1272 rfilt = ath9k_htc_calcrxfilter(priv); in ath9k_htc_configure_filter()
1273 ath9k_hw_setrxfilter(priv->ah, rfilt); in ath9k_htc_configure_filter()
1275 ath_dbg(ath9k_hw_common(priv->ah), CONFIG, "Set HW RX filter: 0x%x\n", in ath9k_htc_configure_filter()
1278 ath9k_htc_ps_restore(priv); in ath9k_htc_configure_filter()
1279 mutex_unlock(&priv->mutex); in ath9k_htc_configure_filter()
1288 struct ath9k_htc_priv *priv = ista->htc_priv; in ath9k_htc_sta_rc_update_work() local
1289 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_sta_rc_update_work()
1292 mutex_lock(&priv->mutex); in ath9k_htc_sta_rc_update_work()
1293 ath9k_htc_ps_wakeup(priv); in ath9k_htc_sta_rc_update_work()
1296 ath9k_htc_setup_rate(priv, sta, &trate); in ath9k_htc_sta_rc_update_work()
1297 if (!ath9k_htc_send_rate_cmd(priv, &trate)) in ath9k_htc_sta_rc_update_work()
1306 ath9k_htc_ps_restore(priv); in ath9k_htc_sta_rc_update_work()
1307 mutex_unlock(&priv->mutex); in ath9k_htc_sta_rc_update_work()
1314 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_sta_add() local
1318 mutex_lock(&priv->mutex); in ath9k_htc_sta_add()
1319 ath9k_htc_ps_wakeup(priv); in ath9k_htc_sta_add()
1320 ret = ath9k_htc_add_station(priv, vif, sta); in ath9k_htc_sta_add()
1323 ista->htc_priv = priv; in ath9k_htc_sta_add()
1324 ath9k_htc_init_rate(priv, sta); in ath9k_htc_sta_add()
1326 ath9k_htc_ps_restore(priv); in ath9k_htc_sta_add()
1327 mutex_unlock(&priv->mutex); in ath9k_htc_sta_add()
1336 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_sta_remove() local
1342 mutex_lock(&priv->mutex); in ath9k_htc_sta_remove()
1343 ath9k_htc_ps_wakeup(priv); in ath9k_htc_sta_remove()
1344 htc_sta_drain(priv->htc, ista->index); in ath9k_htc_sta_remove()
1345 ret = ath9k_htc_remove_station(priv, vif, sta); in ath9k_htc_sta_remove()
1346 ath9k_htc_ps_restore(priv); in ath9k_htc_sta_remove()
1347 mutex_unlock(&priv->mutex); in ath9k_htc_sta_remove()
1368 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_conf_tx() local
1369 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_conf_tx()
1376 mutex_lock(&priv->mutex); in ath9k_htc_conf_tx()
1377 ath9k_htc_ps_wakeup(priv); in ath9k_htc_conf_tx()
1386 qnum = get_hw_qnum(queue, priv->hwq_map); in ath9k_htc_conf_tx()
1393 ret = ath_htc_txq_update(priv, qnum, &qi); in ath9k_htc_conf_tx()
1399 if ((priv->ah->opmode == NL80211_IFTYPE_ADHOC) && in ath9k_htc_conf_tx()
1400 (qnum == priv->hwq_map[IEEE80211_AC_BE])) in ath9k_htc_conf_tx()
1401 ath9k_htc_beaconq_config(priv); in ath9k_htc_conf_tx()
1403 ath9k_htc_ps_restore(priv); in ath9k_htc_conf_tx()
1404 mutex_unlock(&priv->mutex); in ath9k_htc_conf_tx()
1415 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_set_key() local
1416 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_set_key()
1437 mutex_lock(&priv->mutex); in ath9k_htc_set_key()
1439 ath9k_htc_ps_wakeup(priv); in ath9k_htc_set_key()
1450 if (priv->ah->sw_mgmt_crypto_tx && in ath9k_htc_set_key()
1463 ath9k_htc_ps_restore(priv); in ath9k_htc_set_key()
1464 mutex_unlock(&priv->mutex); in ath9k_htc_set_key()
1469 static void ath9k_htc_set_bssid(struct ath9k_htc_priv *priv) in ath9k_htc_set_bssid() argument
1471 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_set_bssid()
1473 ath9k_hw_write_associd(priv->ah); in ath9k_htc_set_bssid()
1480 struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *)data; in ath9k_htc_bss_iter() local
1481 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_bss_iter()
1492 static void ath9k_htc_choose_set_bssid(struct ath9k_htc_priv *priv) in ath9k_htc_choose_set_bssid() argument
1494 if (priv->num_sta_assoc_vif == 1) { in ath9k_htc_choose_set_bssid()
1496 priv->hw, IEEE80211_IFACE_ITER_RESUME_ALL, in ath9k_htc_choose_set_bssid()
1497 ath9k_htc_bss_iter, priv); in ath9k_htc_choose_set_bssid()
1498 ath9k_htc_set_bssid(priv); in ath9k_htc_choose_set_bssid()
1507 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_bss_info_changed() local
1508 struct ath_hw *ah = priv->ah; in ath9k_htc_bss_info_changed()
1512 mutex_lock(&priv->mutex); in ath9k_htc_bss_info_changed()
1513 ath9k_htc_ps_wakeup(priv); in ath9k_htc_bss_info_changed()
1520 priv->num_sta_assoc_vif++ : priv->num_sta_assoc_vif--; in ath9k_htc_bss_info_changed()
1525 if (priv->ah->opmode == NL80211_IFTYPE_STATION) { in ath9k_htc_bss_info_changed()
1526 ath9k_htc_choose_set_bssid(priv); in ath9k_htc_bss_info_changed()
1527 if (bss_conf->assoc && (priv->num_sta_assoc_vif == 1)) in ath9k_htc_bss_info_changed()
1528 ath9k_htc_start_ani(priv); in ath9k_htc_bss_info_changed()
1529 else if (priv->num_sta_assoc_vif == 0) in ath9k_htc_bss_info_changed()
1530 ath9k_htc_stop_ani(priv); in ath9k_htc_bss_info_changed()
1535 if (priv->ah->opmode == NL80211_IFTYPE_ADHOC) { in ath9k_htc_bss_info_changed()
1538 ath9k_htc_set_bssid(priv); in ath9k_htc_bss_info_changed()
1545 ath9k_htc_set_tsfadjust(priv, vif); in ath9k_htc_bss_info_changed()
1546 priv->cur_beacon_conf.enable_beacon = 1; in ath9k_htc_bss_info_changed()
1547 ath9k_htc_beacon_config(priv, vif); in ath9k_htc_bss_info_changed()
1555 if ((priv->num_ap_vif + priv->num_mbss_vif <= 1) || in ath9k_htc_bss_info_changed()
1556 priv->num_ibss_vif) { in ath9k_htc_bss_info_changed()
1560 priv->cur_beacon_conf.enable_beacon = 0; in ath9k_htc_bss_info_changed()
1561 ath9k_htc_beacon_config(priv, vif); in ath9k_htc_bss_info_changed()
1569 if (priv->nvifs == 1 && in ath9k_htc_bss_info_changed()
1570 ((priv->ah->opmode == NL80211_IFTYPE_AP && in ath9k_htc_bss_info_changed()
1572 priv->num_ap_vif == 1) || in ath9k_htc_bss_info_changed()
1573 (priv->ah->opmode == NL80211_IFTYPE_MESH_POINT && in ath9k_htc_bss_info_changed()
1575 priv->num_mbss_vif == 1))) { in ath9k_htc_bss_info_changed()
1576 set_bit(OP_TSF_RESET, &priv->op_flags); in ath9k_htc_bss_info_changed()
1581 ath9k_htc_beacon_config(priv, vif); in ath9k_htc_bss_info_changed()
1595 priv->beacon.slottime = slottime; in ath9k_htc_bss_info_changed()
1596 priv->beacon.updateslot = UPDATE; in ath9k_htc_bss_info_changed()
1604 ath9k_htc_update_rate(priv, vif, bss_conf); in ath9k_htc_bss_info_changed()
1606 ath9k_htc_ps_restore(priv); in ath9k_htc_bss_info_changed()
1607 mutex_unlock(&priv->mutex); in ath9k_htc_bss_info_changed()
1613 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_get_tsf() local
1616 mutex_lock(&priv->mutex); in ath9k_htc_get_tsf()
1617 ath9k_htc_ps_wakeup(priv); in ath9k_htc_get_tsf()
1618 tsf = ath9k_hw_gettsf64(priv->ah); in ath9k_htc_get_tsf()
1619 ath9k_htc_ps_restore(priv); in ath9k_htc_get_tsf()
1620 mutex_unlock(&priv->mutex); in ath9k_htc_get_tsf()
1628 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_set_tsf() local
1630 mutex_lock(&priv->mutex); in ath9k_htc_set_tsf()
1631 ath9k_htc_ps_wakeup(priv); in ath9k_htc_set_tsf()
1632 ath9k_hw_settsf64(priv->ah, tsf); in ath9k_htc_set_tsf()
1633 ath9k_htc_ps_restore(priv); in ath9k_htc_set_tsf()
1634 mutex_unlock(&priv->mutex); in ath9k_htc_set_tsf()
1640 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_reset_tsf() local
1642 mutex_lock(&priv->mutex); in ath9k_htc_reset_tsf()
1643 ath9k_htc_ps_wakeup(priv); in ath9k_htc_reset_tsf()
1644 ath9k_hw_reset_tsf(priv->ah); in ath9k_htc_reset_tsf()
1645 ath9k_htc_ps_restore(priv); in ath9k_htc_reset_tsf()
1646 mutex_unlock(&priv->mutex); in ath9k_htc_reset_tsf()
1655 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_ampdu_action() local
1659 mutex_lock(&priv->mutex); in ath9k_htc_ampdu_action()
1660 ath9k_htc_ps_wakeup(priv); in ath9k_htc_ampdu_action()
1668 ret = ath9k_htc_tx_aggr_oper(priv, vif, sta, action, tid); in ath9k_htc_ampdu_action()
1675 ath9k_htc_tx_aggr_oper(priv, vif, sta, action, tid); in ath9k_htc_ampdu_action()
1680 spin_lock_bh(&priv->tx.tx_lock); in ath9k_htc_ampdu_action()
1682 spin_unlock_bh(&priv->tx.tx_lock); in ath9k_htc_ampdu_action()
1685 ath_err(ath9k_hw_common(priv->ah), "Unknown AMPDU action\n"); in ath9k_htc_ampdu_action()
1688 ath9k_htc_ps_restore(priv); in ath9k_htc_ampdu_action()
1689 mutex_unlock(&priv->mutex); in ath9k_htc_ampdu_action()
1698 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_sw_scan_start() local
1699 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_sw_scan_start()
1701 mutex_lock(&priv->mutex); in ath9k_htc_sw_scan_start()
1702 spin_lock_bh(&priv->beacon_lock); in ath9k_htc_sw_scan_start()
1704 spin_unlock_bh(&priv->beacon_lock); in ath9k_htc_sw_scan_start()
1705 cancel_work_sync(&priv->ps_work); in ath9k_htc_sw_scan_start()
1706 ath9k_htc_stop_ani(priv); in ath9k_htc_sw_scan_start()
1707 mutex_unlock(&priv->mutex); in ath9k_htc_sw_scan_start()
1713 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_sw_scan_complete() local
1714 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_sw_scan_complete()
1716 mutex_lock(&priv->mutex); in ath9k_htc_sw_scan_complete()
1717 spin_lock_bh(&priv->beacon_lock); in ath9k_htc_sw_scan_complete()
1719 spin_unlock_bh(&priv->beacon_lock); in ath9k_htc_sw_scan_complete()
1720 ath9k_htc_ps_wakeup(priv); in ath9k_htc_sw_scan_complete()
1721 ath9k_htc_vif_reconfig(priv); in ath9k_htc_sw_scan_complete()
1722 ath9k_htc_ps_restore(priv); in ath9k_htc_sw_scan_complete()
1723 mutex_unlock(&priv->mutex); in ath9k_htc_sw_scan_complete()
1734 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_set_coverage_class() local
1736 mutex_lock(&priv->mutex); in ath9k_htc_set_coverage_class()
1737 ath9k_htc_ps_wakeup(priv); in ath9k_htc_set_coverage_class()
1738 priv->ah->coverage_class = coverage_class; in ath9k_htc_set_coverage_class()
1739 ath9k_hw_init_global_settings(priv->ah); in ath9k_htc_set_coverage_class()
1740 ath9k_htc_ps_restore(priv); in ath9k_htc_set_coverage_class()
1741 mutex_unlock(&priv->mutex); in ath9k_htc_set_coverage_class()
1753 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_set_bitrate_mask() local
1754 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_set_bitrate_mask()
1796 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_get_stats() local
1797 struct ath_hw *ah = priv->ah; in ath9k_htc_get_stats()
1808 struct base_eep_header *ath9k_htc_get_eeprom_base(struct ath9k_htc_priv *priv) in ath9k_htc_get_eeprom_base() argument
1817 if (AR_SREV_9271(priv->ah)) in ath9k_htc_get_eeprom_base()
1819 &priv->ah->eeprom.map4k.baseEepHeader; in ath9k_htc_get_eeprom_base()
1820 else if (priv->ah->hw_version.usbdev == AR9280_USB) in ath9k_htc_get_eeprom_base()
1822 &priv->ah->eeprom.def.baseEepHeader; in ath9k_htc_get_eeprom_base()
1823 else if (priv->ah->hw_version.usbdev == AR9287_USB) in ath9k_htc_get_eeprom_base()
1825 &priv->ah->eeprom.map9287.baseEepHeader; in ath9k_htc_get_eeprom_base()
1833 struct ath9k_htc_priv *priv = hw->priv; in ath9k_htc_get_antenna() local
1834 struct base_eep_header *pBase = ath9k_htc_get_eeprom_base(priv); in ath9k_htc_get_antenna()