Lines Matching refs:sta

142 void ieee80211_assign_tid_tx(struct sta_info *sta, int tid,  in ieee80211_assign_tid_tx()  argument
145 lockdep_assert_held(&sta->ampdu_mlme.mtx); in ieee80211_assign_tid_tx()
146 lockdep_assert_held(&sta->lock); in ieee80211_assign_tid_tx()
147 rcu_assign_pointer(sta->ampdu_mlme.tid_tx[tid], tid_tx); in ieee80211_assign_tid_tx()
190 ieee80211_agg_stop_txq(struct sta_info *sta, int tid) in ieee80211_agg_stop_txq() argument
192 struct ieee80211_txq *txq = sta->sta.txq[tid]; in ieee80211_agg_stop_txq()
211 ieee80211_agg_start_txq(struct sta_info *sta, int tid, bool enable) in ieee80211_agg_start_txq() argument
213 struct ieee80211_txq *txq = sta->sta.txq[tid]; in ieee80211_agg_start_txq()
229 schedule_and_wake_txq(sta->sdata->local, txqi); in ieee80211_agg_start_txq()
268 static void ieee80211_remove_tid_tx(struct sta_info *sta, int tid) in ieee80211_remove_tid_tx() argument
272 lockdep_assert_held(&sta->ampdu_mlme.mtx); in ieee80211_remove_tid_tx()
273 lockdep_assert_held(&sta->lock); in ieee80211_remove_tid_tx()
275 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_remove_tid_tx()
287 ieee80211_agg_splice_packets(sta->sdata, tid_tx, tid); in ieee80211_remove_tid_tx()
290 ieee80211_assign_tid_tx(sta, tid, NULL); in ieee80211_remove_tid_tx()
292 ieee80211_agg_splice_finish(sta->sdata, tid); in ieee80211_remove_tid_tx()
293 ieee80211_agg_start_txq(sta, tid, false); in ieee80211_remove_tid_tx()
298 int ___ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid, in ___ieee80211_stop_tx_ba_session() argument
301 struct ieee80211_local *local = sta->local; in ___ieee80211_stop_tx_ba_session()
304 .sta = &sta->sta, in ___ieee80211_stop_tx_ba_session()
313 lockdep_assert_held(&sta->ampdu_mlme.mtx); in ___ieee80211_stop_tx_ba_session()
329 spin_lock_bh(&sta->lock); in ___ieee80211_stop_tx_ba_session()
332 tid_tx = sta->ampdu_mlme.tid_start_tx[tid]; in ___ieee80211_stop_tx_ba_session()
334 sta->ampdu_mlme.tid_start_tx[tid] = NULL; in ___ieee80211_stop_tx_ba_session()
336 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ___ieee80211_stop_tx_ba_session()
338 spin_unlock_bh(&sta->lock); in ___ieee80211_stop_tx_ba_session()
347 spin_unlock_bh(&sta->lock); in ___ieee80211_stop_tx_ba_session()
351 ret = drv_ampdu_action(local, sta->sdata, &params); in ___ieee80211_stop_tx_ba_session()
358 ieee80211_assign_tid_tx(sta, tid, NULL); in ___ieee80211_stop_tx_ba_session()
359 spin_unlock_bh(&sta->lock); in ___ieee80211_stop_tx_ba_session()
366 ieee80211_agg_stop_txq(sta, tid); in ___ieee80211_stop_tx_ba_session()
368 spin_unlock_bh(&sta->lock); in ___ieee80211_stop_tx_ba_session()
370 ht_dbg(sta->sdata, "Tx BA session stop requested for %pM tid %u\n", in ___ieee80211_stop_tx_ba_session()
371 sta->sta.addr, tid); in ___ieee80211_stop_tx_ba_session()
403 ret = drv_ampdu_action(local, sta->sdata, &params); in ___ieee80211_stop_tx_ba_session()
434 struct sta_info *sta = tid_tx->sta; in sta_addba_resp_timer_expired() local
439 ht_dbg(sta->sdata, in sta_addba_resp_timer_expired()
441 sta->sta.addr, tid); in sta_addba_resp_timer_expired()
445 ht_dbg(sta->sdata, "addBA response timer expired on %pM tid %d\n", in sta_addba_resp_timer_expired()
446 sta->sta.addr, tid); in sta_addba_resp_timer_expired()
448 ieee80211_stop_tx_ba_session(&sta->sta, tid); in sta_addba_resp_timer_expired()
451 static void ieee80211_send_addba_with_timeout(struct sta_info *sta, in ieee80211_send_addba_with_timeout() argument
454 struct ieee80211_sub_if_data *sdata = sta->sdata; in ieee80211_send_addba_with_timeout()
455 struct ieee80211_local *local = sta->local; in ieee80211_send_addba_with_timeout()
462 sta->sta.addr, tid); in ieee80211_send_addba_with_timeout()
464 spin_lock_bh(&sta->lock); in ieee80211_send_addba_with_timeout()
465 sta->ampdu_mlme.last_addba_req_time[tid] = jiffies; in ieee80211_send_addba_with_timeout()
466 sta->ampdu_mlme.addba_req_num[tid]++; in ieee80211_send_addba_with_timeout()
467 spin_unlock_bh(&sta->lock); in ieee80211_send_addba_with_timeout()
469 if (sta->sta.he_cap.has_he) { in ieee80211_send_addba_with_timeout()
482 ieee80211_send_addba_request(sdata, sta->sta.addr, tid, in ieee80211_send_addba_with_timeout()
484 sta->tid_seq[tid] >> 4, in ieee80211_send_addba_with_timeout()
490 void ieee80211_tx_ba_session_handle_start(struct sta_info *sta, int tid) in ieee80211_tx_ba_session_handle_start() argument
493 struct ieee80211_local *local = sta->local; in ieee80211_tx_ba_session_handle_start()
494 struct ieee80211_sub_if_data *sdata = sta->sdata; in ieee80211_tx_ba_session_handle_start()
496 .sta = &sta->sta, in ieee80211_tx_ba_session_handle_start()
505 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_tx_ba_session_handle_start()
514 ieee80211_agg_stop_txq(sta, tid); in ieee80211_tx_ba_session_handle_start()
524 params.ssn = sta->tid_seq[tid] >> 4; in ieee80211_tx_ba_session_handle_start()
538 sta->sta.addr, tid); in ieee80211_tx_ba_session_handle_start()
539 spin_lock_bh(&sta->lock); in ieee80211_tx_ba_session_handle_start()
541 ieee80211_assign_tid_tx(sta, tid, NULL); in ieee80211_tx_ba_session_handle_start()
543 spin_unlock_bh(&sta->lock); in ieee80211_tx_ba_session_handle_start()
545 ieee80211_agg_start_txq(sta, tid, false); in ieee80211_tx_ba_session_handle_start()
551 ieee80211_send_addba_with_timeout(sta, tid_tx); in ieee80211_tx_ba_session_handle_start()
561 struct sta_info *sta = tid_tx->sta; in sta_tx_agg_session_timer_expired() local
575 ht_dbg(sta->sdata, "tx session timer expired on %pM tid %d\n", in sta_tx_agg_session_timer_expired()
576 sta->sta.addr, tid); in sta_tx_agg_session_timer_expired()
578 ieee80211_stop_tx_ba_session(&sta->sta, tid); in sta_tx_agg_session_timer_expired()
584 struct sta_info *sta = container_of(pubsta, struct sta_info, sta); in ieee80211_start_tx_ba_session() local
585 struct ieee80211_sub_if_data *sdata = sta->sdata; in ieee80211_start_tx_ba_session()
592 if (WARN(sta->reserved_tid == tid, in ieee80211_start_tx_ba_session()
597 sta->sdata->vif.bss_conf.chandef.chan->band != NL80211_BAND_6GHZ) in ieee80211_start_tx_ba_session()
621 if (test_sta_flag(sta, WLAN_STA_BLOCK_BA)) { in ieee80211_start_tx_ba_session()
624 sta->sta.addr, tid); in ieee80211_start_tx_ba_session()
640 if (sta->sdata->vif.type == NL80211_IFTYPE_ADHOC && in ieee80211_start_tx_ba_session()
641 !sta->sta.ht_cap.ht_supported) { in ieee80211_start_tx_ba_session()
648 spin_lock_bh(&sta->lock); in ieee80211_start_tx_ba_session()
651 if (sta->ampdu_mlme.addba_req_num[tid] > HT_AGG_MAX_RETRIES) { in ieee80211_start_tx_ba_session()
661 if (sta->ampdu_mlme.addba_req_num[tid] > HT_AGG_BURST_RETRIES && in ieee80211_start_tx_ba_session()
662 time_before(jiffies, sta->ampdu_mlme.last_addba_req_time[tid] + in ieee80211_start_tx_ba_session()
666 sta->ampdu_mlme.addba_req_num[tid], sta->sta.addr, tid); in ieee80211_start_tx_ba_session()
671 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_start_tx_ba_session()
673 if (tid_tx || sta->ampdu_mlme.tid_start_tx[tid]) { in ieee80211_start_tx_ba_session()
676 sta->sta.addr, tid); in ieee80211_start_tx_ba_session()
692 tid_tx->sta = sta; in ieee80211_start_tx_ba_session()
703 sta->ampdu_mlme.dialog_token_allocator++; in ieee80211_start_tx_ba_session()
704 tid_tx->dialog_token = sta->ampdu_mlme.dialog_token_allocator; in ieee80211_start_tx_ba_session()
710 sta->ampdu_mlme.tid_start_tx[tid] = tid_tx; in ieee80211_start_tx_ba_session()
712 ieee80211_queue_work(&local->hw, &sta->ampdu_mlme.work); in ieee80211_start_tx_ba_session()
716 spin_unlock_bh(&sta->lock); in ieee80211_start_tx_ba_session()
722 struct sta_info *sta, u16 tid) in ieee80211_agg_tx_operational() argument
726 .sta = &sta->sta, in ieee80211_agg_tx_operational()
733 lockdep_assert_held(&sta->ampdu_mlme.mtx); in ieee80211_agg_tx_operational()
735 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_agg_tx_operational()
739 ht_dbg(sta->sdata, "Aggregation is on for %pM tid %d\n", in ieee80211_agg_tx_operational()
740 sta->sta.addr, tid); in ieee80211_agg_tx_operational()
742 drv_ampdu_action(local, sta->sdata, &params); in ieee80211_agg_tx_operational()
748 spin_lock_bh(&sta->lock); in ieee80211_agg_tx_operational()
750 ieee80211_agg_splice_packets(sta->sdata, tid_tx, tid); in ieee80211_agg_tx_operational()
757 ieee80211_agg_splice_finish(sta->sdata, tid); in ieee80211_agg_tx_operational()
759 spin_unlock_bh(&sta->lock); in ieee80211_agg_tx_operational()
761 ieee80211_agg_start_txq(sta, tid, true); in ieee80211_agg_tx_operational()
764 void ieee80211_start_tx_ba_cb(struct sta_info *sta, int tid, in ieee80211_start_tx_ba_cb() argument
767 struct ieee80211_sub_if_data *sdata = sta->sdata; in ieee80211_start_tx_ba_cb()
774 ieee80211_send_addba_with_timeout(sta, tid_tx); in ieee80211_start_tx_ba_cb()
780 ieee80211_agg_tx_operational(local, sta, tid); in ieee80211_start_tx_ba_cb()
785 const u8 *ra, u16 tid, struct sta_info **sta) in ieee80211_lookup_tid_tx() argument
795 *sta = sta_info_get_bss(sdata, ra); in ieee80211_lookup_tid_tx()
796 if (!*sta) { in ieee80211_lookup_tid_tx()
801 tid_tx = rcu_dereference((*sta)->ampdu_mlme.tid_tx[tid]); in ieee80211_lookup_tid_tx()
814 struct sta_info *sta; in ieee80211_start_tx_ba_cb_irqsafe() local
820 tid_tx = ieee80211_lookup_tid_tx(sdata, ra, tid, &sta); in ieee80211_start_tx_ba_cb_irqsafe()
825 ieee80211_queue_work(&local->hw, &sta->ampdu_mlme.work); in ieee80211_start_tx_ba_cb_irqsafe()
831 int __ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid, in __ieee80211_stop_tx_ba_session() argument
836 mutex_lock(&sta->ampdu_mlme.mtx); in __ieee80211_stop_tx_ba_session()
838 ret = ___ieee80211_stop_tx_ba_session(sta, tid, reason); in __ieee80211_stop_tx_ba_session()
840 mutex_unlock(&sta->ampdu_mlme.mtx); in __ieee80211_stop_tx_ba_session()
847 struct sta_info *sta = container_of(pubsta, struct sta_info, sta); in ieee80211_stop_tx_ba_session() local
848 struct ieee80211_sub_if_data *sdata = sta->sdata; in ieee80211_stop_tx_ba_session()
861 spin_lock_bh(&sta->lock); in ieee80211_stop_tx_ba_session()
862 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_stop_tx_ba_session()
869 WARN(sta->reserved_tid == tid, in ieee80211_stop_tx_ba_session()
879 ieee80211_queue_work(&local->hw, &sta->ampdu_mlme.work); in ieee80211_stop_tx_ba_session()
882 spin_unlock_bh(&sta->lock); in ieee80211_stop_tx_ba_session()
887 void ieee80211_stop_tx_ba_cb(struct sta_info *sta, int tid, in ieee80211_stop_tx_ba_cb() argument
890 struct ieee80211_sub_if_data *sdata = sta->sdata; in ieee80211_stop_tx_ba_cb()
894 sta->sta.addr, tid); in ieee80211_stop_tx_ba_cb()
896 spin_lock_bh(&sta->lock); in ieee80211_stop_tx_ba_cb()
901 sta->sta.addr, tid); in ieee80211_stop_tx_ba_cb()
908 ieee80211_remove_tid_tx(sta, tid); in ieee80211_stop_tx_ba_cb()
911 spin_unlock_bh(&sta->lock); in ieee80211_stop_tx_ba_cb()
914 ieee80211_send_delba(sdata, sta->sta.addr, tid, in ieee80211_stop_tx_ba_cb()
923 struct sta_info *sta; in ieee80211_stop_tx_ba_cb_irqsafe() local
929 tid_tx = ieee80211_lookup_tid_tx(sdata, ra, tid, &sta); in ieee80211_stop_tx_ba_cb_irqsafe()
934 ieee80211_queue_work(&local->hw, &sta->ampdu_mlme.work); in ieee80211_stop_tx_ba_cb_irqsafe()
942 struct sta_info *sta, in ieee80211_process_addba_resp() argument
957 txq = sta->sta.txq[tid]; in ieee80211_process_addba_resp()
961 mutex_lock(&sta->ampdu_mlme.mtx); in ieee80211_process_addba_resp()
963 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_process_addba_resp()
968 ht_dbg(sta->sdata, "wrong addBA response token, %pM tid %d\n", in ieee80211_process_addba_resp()
969 sta->sta.addr, tid); in ieee80211_process_addba_resp()
975 ht_dbg(sta->sdata, "switched off addBA timer for %pM tid %d\n", in ieee80211_process_addba_resp()
976 sta->sta.addr, tid); in ieee80211_process_addba_resp()
985 ht_dbg(sta->sdata, in ieee80211_process_addba_resp()
987 sta->sta.addr, tid); in ieee80211_process_addba_resp()
1009 ieee80211_agg_tx_operational(local, sta, tid); in ieee80211_process_addba_resp()
1011 sta->ampdu_mlme.addba_req_num[tid] = 0; in ieee80211_process_addba_resp()
1023 ___ieee80211_stop_tx_ba_session(sta, tid, AGG_STOP_DECLINED); in ieee80211_process_addba_resp()
1027 mutex_unlock(&sta->ampdu_mlme.mtx); in ieee80211_process_addba_resp()