Lines Matching refs:priv

21 void ath9k_htc_beaconq_config(struct ath9k_htc_priv *priv)  in ath9k_htc_beaconq_config()  argument
23 struct ath_hw *ah = priv->ah; in ath9k_htc_beaconq_config()
29 ath9k_hw_get_txq_props(ah, priv->beacon.beaconq, &qi); in ath9k_htc_beaconq_config()
31 if (priv->ah->opmode == NL80211_IFTYPE_AP || in ath9k_htc_beaconq_config()
32 priv->ah->opmode == NL80211_IFTYPE_MESH_POINT) { in ath9k_htc_beaconq_config()
36 } else if (priv->ah->opmode == NL80211_IFTYPE_ADHOC) { in ath9k_htc_beaconq_config()
37 int qnum = priv->hwq_map[IEEE80211_AC_BE]; in ath9k_htc_beaconq_config()
57 if (!ath9k_hw_set_txq_props(ah, priv->beacon.beaconq, &qi)) { in ath9k_htc_beaconq_config()
59 "Unable to update beacon queue %u!\n", priv->beacon.beaconq); in ath9k_htc_beaconq_config()
61 ath9k_hw_resettxqueue(ah, priv->beacon.beaconq); in ath9k_htc_beaconq_config()
68 static void ath9k_htc_beacon_init(struct ath9k_htc_priv *priv, in ath9k_htc_beacon_init() argument
72 struct ath_hw *ah = priv->ah; in ath9k_htc_beacon_init()
85 ath9k_htc_beaconq_config(priv); in ath9k_htc_beacon_init()
87 priv->beacon.bmisscnt = 0; in ath9k_htc_beacon_init()
92 static void ath9k_htc_beacon_config_sta(struct ath9k_htc_priv *priv, in ath9k_htc_beacon_config_sta() argument
101 if (ath9k_cmn_beacon_config_sta(priv->ah, bss_conf, &bs) == -EPERM) in ath9k_htc_beacon_config_sta()
105 ath9k_hw_set_sta_beacon_timers(priv->ah, &bs); in ath9k_htc_beacon_config_sta()
111 static void ath9k_htc_beacon_config_ap(struct ath9k_htc_priv *priv, in ath9k_htc_beacon_config_ap() argument
114 struct ath_hw *ah = priv->ah; in ath9k_htc_beacon_config_ap()
118 ath9k_htc_beacon_init(priv, conf, false); in ath9k_htc_beacon_config_ap()
121 static void ath9k_htc_beacon_config_adhoc(struct ath9k_htc_priv *priv, in ath9k_htc_beacon_config_adhoc() argument
124 struct ath_hw *ah = priv->ah; in ath9k_htc_beacon_config_adhoc()
128 ath9k_htc_beacon_init(priv, conf, conf->ibss_creator); in ath9k_htc_beacon_config_adhoc()
137 static void ath9k_htc_send_buffered(struct ath9k_htc_priv *priv, in ath9k_htc_send_buffered() argument
140 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_send_buffered()
146 spin_lock_bh(&priv->beacon_lock); in ath9k_htc_send_buffered()
148 vif = priv->beacon.bslot[slot]; in ath9k_htc_send_buffered()
150 skb = ieee80211_get_buffered_bc(priv->hw, vif); in ath9k_htc_send_buffered()
166 tx_slot = ath9k_htc_tx_get_slot(priv); in ath9k_htc_send_buffered()
173 ret = ath9k_htc_tx_start(priv, NULL, skb, tx_slot, true); in ath9k_htc_send_buffered()
175 ath9k_htc_tx_clear_slot(priv, tx_slot); in ath9k_htc_send_buffered()
180 spin_lock_bh(&priv->tx.tx_lock); in ath9k_htc_send_buffered()
181 priv->tx.queued_cnt++; in ath9k_htc_send_buffered()
182 spin_unlock_bh(&priv->tx.tx_lock); in ath9k_htc_send_buffered()
185 skb = ieee80211_get_buffered_bc(priv->hw, vif); in ath9k_htc_send_buffered()
188 spin_unlock_bh(&priv->beacon_lock); in ath9k_htc_send_buffered()
191 static void ath9k_htc_send_beacon(struct ath9k_htc_priv *priv, in ath9k_htc_send_beacon() argument
194 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_send_beacon()
207 spin_lock_bh(&priv->beacon_lock); in ath9k_htc_send_beacon()
209 vif = priv->beacon.bslot[slot]; in ath9k_htc_send_beacon()
213 spin_unlock_bh(&priv->beacon_lock); in ath9k_htc_send_beacon()
218 beacon = ieee80211_beacon_get(priv->hw, vif); in ath9k_htc_send_beacon()
220 spin_unlock_bh(&priv->beacon_lock); in ath9k_htc_send_beacon()
244 tx_ctl->epid = priv->beacon_ep; in ath9k_htc_send_beacon()
250 ret = htc_send(priv->htc, beacon); in ath9k_htc_send_beacon()
259 spin_unlock_bh(&priv->beacon_lock); in ath9k_htc_send_beacon()
262 static int ath9k_htc_choose_bslot(struct ath9k_htc_priv *priv, in ath9k_htc_choose_bslot() argument
265 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_choose_bslot()
271 intval = priv->cur_beacon_conf.beacon_interval; in ath9k_htc_choose_bslot()
285 void ath9k_htc_swba(struct ath9k_htc_priv *priv, in ath9k_htc_swba() argument
288 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_swba()
292 priv->beacon.bmisscnt++; in ath9k_htc_swba()
293 if (priv->beacon.bmisscnt > BSTUCK_THRESHOLD) { in ath9k_htc_swba()
295 ieee80211_queue_work(priv->hw, in ath9k_htc_swba()
296 &priv->fatal_work); in ath9k_htc_swba()
301 if (priv->beacon.bmisscnt) { in ath9k_htc_swba()
304 priv->beacon.bmisscnt); in ath9k_htc_swba()
305 priv->beacon.bmisscnt = 0; in ath9k_htc_swba()
308 slot = ath9k_htc_choose_bslot(priv, swba); in ath9k_htc_swba()
309 spin_lock_bh(&priv->beacon_lock); in ath9k_htc_swba()
310 if (priv->beacon.bslot[slot] == NULL) { in ath9k_htc_swba()
311 spin_unlock_bh(&priv->beacon_lock); in ath9k_htc_swba()
314 spin_unlock_bh(&priv->beacon_lock); in ath9k_htc_swba()
316 ath9k_htc_send_buffered(priv, slot); in ath9k_htc_swba()
317 ath9k_htc_send_beacon(priv, slot); in ath9k_htc_swba()
320 void ath9k_htc_assign_bslot(struct ath9k_htc_priv *priv, in ath9k_htc_assign_bslot() argument
323 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_assign_bslot()
327 spin_lock_bh(&priv->beacon_lock); in ath9k_htc_assign_bslot()
329 if (priv->beacon.bslot[i] == NULL) { in ath9k_htc_assign_bslot()
335 priv->beacon.bslot[avp->bslot] = vif; in ath9k_htc_assign_bslot()
336 spin_unlock_bh(&priv->beacon_lock); in ath9k_htc_assign_bslot()
342 void ath9k_htc_remove_bslot(struct ath9k_htc_priv *priv, in ath9k_htc_remove_bslot() argument
345 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_remove_bslot()
348 spin_lock_bh(&priv->beacon_lock); in ath9k_htc_remove_bslot()
349 priv->beacon.bslot[avp->bslot] = NULL; in ath9k_htc_remove_bslot()
350 spin_unlock_bh(&priv->beacon_lock); in ath9k_htc_remove_bslot()
360 void ath9k_htc_set_tsfadjust(struct ath9k_htc_priv *priv, in ath9k_htc_set_tsfadjust() argument
363 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_set_tsfadjust()
365 struct ath_beacon_config *cur_conf = &priv->cur_beacon_conf; in ath9k_htc_set_tsfadjust()
393 static bool ath9k_htc_check_beacon_config(struct ath9k_htc_priv *priv, in ath9k_htc_check_beacon_config() argument
396 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_check_beacon_config()
397 struct ath_beacon_config *cur_conf = &priv->cur_beacon_conf; in ath9k_htc_check_beacon_config()
406 if ((priv->ah->opmode == NL80211_IFTYPE_AP) && in ath9k_htc_check_beacon_config()
407 (priv->num_ap_vif > 1) && in ath9k_htc_check_beacon_config()
419 if (priv->num_ap_vif && in ath9k_htc_check_beacon_config()
430 if ((priv->ah->opmode == NL80211_IFTYPE_STATION) && in ath9k_htc_check_beacon_config()
431 (priv->num_sta_vif > 1) && in ath9k_htc_check_beacon_config()
435 priv->hw, IEEE80211_IFACE_ITER_RESUME_ALL, in ath9k_htc_check_beacon_config()
448 void ath9k_htc_beacon_config(struct ath9k_htc_priv *priv, in ath9k_htc_beacon_config() argument
451 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_beacon_config()
452 struct ath_beacon_config *cur_conf = &priv->cur_beacon_conf; in ath9k_htc_beacon_config()
456 if (!ath9k_htc_check_beacon_config(priv, vif)) in ath9k_htc_beacon_config()
469 ath9k_htc_beacon_config_sta(priv, cur_conf); in ath9k_htc_beacon_config()
473 ath9k_htc_beacon_config_adhoc(priv, cur_conf); in ath9k_htc_beacon_config()
477 ath9k_htc_beacon_config_ap(priv, cur_conf); in ath9k_htc_beacon_config()
485 void ath9k_htc_beacon_reconfig(struct ath9k_htc_priv *priv) in ath9k_htc_beacon_reconfig() argument
487 struct ath_common *common = ath9k_hw_common(priv->ah); in ath9k_htc_beacon_reconfig()
488 struct ath_beacon_config *cur_conf = &priv->cur_beacon_conf; in ath9k_htc_beacon_reconfig()
490 switch (priv->ah->opmode) { in ath9k_htc_beacon_reconfig()
492 ath9k_htc_beacon_config_sta(priv, cur_conf); in ath9k_htc_beacon_reconfig()
495 ath9k_htc_beacon_config_adhoc(priv, cur_conf); in ath9k_htc_beacon_reconfig()
499 ath9k_htc_beacon_config_ap(priv, cur_conf); in ath9k_htc_beacon_reconfig()