Lines Matching refs:sta
145 void ieee80211_assign_tid_tx(struct sta_info *sta, int tid, in ieee80211_assign_tid_tx() argument
148 lockdep_assert_held(&sta->ampdu_mlme.mtx); in ieee80211_assign_tid_tx()
149 lockdep_assert_held(&sta->lock); in ieee80211_assign_tid_tx()
150 rcu_assign_pointer(sta->ampdu_mlme.tid_tx[tid], tid_tx); in ieee80211_assign_tid_tx()
193 ieee80211_agg_stop_txq(struct sta_info *sta, int tid) in ieee80211_agg_stop_txq() argument
195 struct ieee80211_txq *txq = sta->sta.txq[tid]; in ieee80211_agg_stop_txq()
210 ieee80211_agg_start_txq(struct sta_info *sta, int tid, bool enable) in ieee80211_agg_start_txq() argument
212 struct ieee80211_txq *txq = sta->sta.txq[tid]; in ieee80211_agg_start_txq()
226 drv_wake_tx_queue(sta->sdata->local, txqi); in ieee80211_agg_start_txq()
263 static void ieee80211_remove_tid_tx(struct sta_info *sta, int tid) in ieee80211_remove_tid_tx() argument
267 lockdep_assert_held(&sta->ampdu_mlme.mtx); in ieee80211_remove_tid_tx()
268 lockdep_assert_held(&sta->lock); in ieee80211_remove_tid_tx()
270 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_remove_tid_tx()
282 ieee80211_agg_splice_packets(sta->sdata, tid_tx, tid); in ieee80211_remove_tid_tx()
285 ieee80211_assign_tid_tx(sta, tid, NULL); in ieee80211_remove_tid_tx()
287 ieee80211_agg_splice_finish(sta->sdata, tid); in ieee80211_remove_tid_tx()
288 ieee80211_agg_start_txq(sta, tid, false); in ieee80211_remove_tid_tx()
293 int ___ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid, in ___ieee80211_stop_tx_ba_session() argument
296 struct ieee80211_local *local = sta->local; in ___ieee80211_stop_tx_ba_session()
301 lockdep_assert_held(&sta->ampdu_mlme.mtx); in ___ieee80211_stop_tx_ba_session()
317 spin_lock_bh(&sta->lock); in ___ieee80211_stop_tx_ba_session()
319 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ___ieee80211_stop_tx_ba_session()
321 spin_unlock_bh(&sta->lock); in ___ieee80211_stop_tx_ba_session()
330 spin_unlock_bh(&sta->lock); in ___ieee80211_stop_tx_ba_session()
333 ret = drv_ampdu_action(local, sta->sdata, in ___ieee80211_stop_tx_ba_session()
335 &sta->sta, tid, NULL, 0, false); in ___ieee80211_stop_tx_ba_session()
342 ieee80211_assign_tid_tx(sta, tid, NULL); in ___ieee80211_stop_tx_ba_session()
343 spin_unlock_bh(&sta->lock); in ___ieee80211_stop_tx_ba_session()
350 spin_unlock_bh(&sta->lock); in ___ieee80211_stop_tx_ba_session()
352 ht_dbg(sta->sdata, "Tx BA session stop requested for %pM tid %u\n", in ___ieee80211_stop_tx_ba_session()
353 sta->sta.addr, tid); in ___ieee80211_stop_tx_ba_session()
384 ret = drv_ampdu_action(local, sta->sdata, action, in ___ieee80211_stop_tx_ba_session()
385 &sta->sta, tid, NULL, 0, false); in ___ieee80211_stop_tx_ba_session()
420 struct sta_info *sta = container_of((void *)data, in sta_addba_resp_timer_expired() local
426 tid_tx = rcu_dereference(sta->ampdu_mlme.tid_tx[tid]); in sta_addba_resp_timer_expired()
430 ht_dbg(sta->sdata, in sta_addba_resp_timer_expired()
432 sta->sta.addr, tid); in sta_addba_resp_timer_expired()
436 ht_dbg(sta->sdata, "addBA response timer expired on %pM tid %d\n", in sta_addba_resp_timer_expired()
437 sta->sta.addr, tid); in sta_addba_resp_timer_expired()
439 ieee80211_stop_tx_ba_session(&sta->sta, tid); in sta_addba_resp_timer_expired()
443 void ieee80211_tx_ba_session_handle_start(struct sta_info *sta, int tid) in ieee80211_tx_ba_session_handle_start() argument
446 struct ieee80211_local *local = sta->local; in ieee80211_tx_ba_session_handle_start()
447 struct ieee80211_sub_if_data *sdata = sta->sdata; in ieee80211_tx_ba_session_handle_start()
451 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_tx_ba_session_handle_start()
460 ieee80211_agg_stop_txq(sta, tid); in ieee80211_tx_ba_session_handle_start()
470 start_seq_num = sta->tid_seq[tid] >> 4; in ieee80211_tx_ba_session_handle_start()
473 &sta->sta, tid, &start_seq_num, 0, false); in ieee80211_tx_ba_session_handle_start()
477 sta->sta.addr, tid); in ieee80211_tx_ba_session_handle_start()
478 spin_lock_bh(&sta->lock); in ieee80211_tx_ba_session_handle_start()
480 ieee80211_assign_tid_tx(sta, tid, NULL); in ieee80211_tx_ba_session_handle_start()
482 spin_unlock_bh(&sta->lock); in ieee80211_tx_ba_session_handle_start()
484 ieee80211_agg_start_txq(sta, tid, false); in ieee80211_tx_ba_session_handle_start()
493 sta->sta.addr, tid); in ieee80211_tx_ba_session_handle_start()
495 spin_lock_bh(&sta->lock); in ieee80211_tx_ba_session_handle_start()
496 sta->ampdu_mlme.last_addba_req_time[tid] = jiffies; in ieee80211_tx_ba_session_handle_start()
497 sta->ampdu_mlme.addba_req_num[tid]++; in ieee80211_tx_ba_session_handle_start()
498 spin_unlock_bh(&sta->lock); in ieee80211_tx_ba_session_handle_start()
501 ieee80211_send_addba_request(sdata, sta->sta.addr, tid, in ieee80211_tx_ba_session_handle_start()
519 struct sta_info *sta = container_of(timer_to_id, struct sta_info, in sta_tx_agg_session_timer_expired() local
525 tid_tx = rcu_dereference(sta->ampdu_mlme.tid_tx[*ptid]); in sta_tx_agg_session_timer_expired()
540 ht_dbg(sta->sdata, "tx session timer expired on %pM tid %d\n", in sta_tx_agg_session_timer_expired()
541 sta->sta.addr, (u16)*ptid); in sta_tx_agg_session_timer_expired()
543 ieee80211_stop_tx_ba_session(&sta->sta, *ptid); in sta_tx_agg_session_timer_expired()
549 struct sta_info *sta = container_of(pubsta, struct sta_info, sta); in ieee80211_start_tx_ba_session() local
550 struct ieee80211_sub_if_data *sdata = sta->sdata; in ieee80211_start_tx_ba_session()
557 if (WARN(sta->reserved_tid == tid, in ieee80211_start_tx_ba_session()
582 if (test_sta_flag(sta, WLAN_STA_BLOCK_BA)) { in ieee80211_start_tx_ba_session()
585 sta->sta.addr, tid); in ieee80211_start_tx_ba_session()
601 if (sta->sdata->vif.type == NL80211_IFTYPE_ADHOC && in ieee80211_start_tx_ba_session()
602 !sta->sta.ht_cap.ht_supported) { in ieee80211_start_tx_ba_session()
609 spin_lock_bh(&sta->lock); in ieee80211_start_tx_ba_session()
612 if (sta->ampdu_mlme.addba_req_num[tid] > HT_AGG_MAX_RETRIES) { in ieee80211_start_tx_ba_session()
622 if (sta->ampdu_mlme.addba_req_num[tid] > HT_AGG_BURST_RETRIES && in ieee80211_start_tx_ba_session()
623 time_before(jiffies, sta->ampdu_mlme.last_addba_req_time[tid] + in ieee80211_start_tx_ba_session()
627 sta->ampdu_mlme.addba_req_num[tid], sta->sta.addr, tid); in ieee80211_start_tx_ba_session()
632 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_start_tx_ba_session()
634 if (tid_tx || sta->ampdu_mlme.tid_start_tx[tid]) { in ieee80211_start_tx_ba_session()
637 sta->sta.addr, tid); in ieee80211_start_tx_ba_session()
656 tid_tx->addba_resp_timer.data = (unsigned long)&sta->timer_to_tid[tid]; in ieee80211_start_tx_ba_session()
661 tid_tx->session_timer.data = (unsigned long)&sta->timer_to_tid[tid]; in ieee80211_start_tx_ba_session()
665 sta->ampdu_mlme.dialog_token_allocator++; in ieee80211_start_tx_ba_session()
666 tid_tx->dialog_token = sta->ampdu_mlme.dialog_token_allocator; in ieee80211_start_tx_ba_session()
672 sta->ampdu_mlme.tid_start_tx[tid] = tid_tx; in ieee80211_start_tx_ba_session()
674 ieee80211_queue_work(&local->hw, &sta->ampdu_mlme.work); in ieee80211_start_tx_ba_session()
678 spin_unlock_bh(&sta->lock); in ieee80211_start_tx_ba_session()
684 struct sta_info *sta, u16 tid) in ieee80211_agg_tx_operational() argument
688 lockdep_assert_held(&sta->ampdu_mlme.mtx); in ieee80211_agg_tx_operational()
690 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_agg_tx_operational()
692 ht_dbg(sta->sdata, "Aggregation is on for %pM tid %d\n", in ieee80211_agg_tx_operational()
693 sta->sta.addr, tid); in ieee80211_agg_tx_operational()
695 drv_ampdu_action(local, sta->sdata, in ieee80211_agg_tx_operational()
697 &sta->sta, tid, NULL, tid_tx->buf_size, in ieee80211_agg_tx_operational()
704 spin_lock_bh(&sta->lock); in ieee80211_agg_tx_operational()
706 ieee80211_agg_splice_packets(sta->sdata, tid_tx, tid); in ieee80211_agg_tx_operational()
713 ieee80211_agg_splice_finish(sta->sdata, tid); in ieee80211_agg_tx_operational()
715 spin_unlock_bh(&sta->lock); in ieee80211_agg_tx_operational()
717 ieee80211_agg_start_txq(sta, tid, true); in ieee80211_agg_tx_operational()
724 struct sta_info *sta; in ieee80211_start_tx_ba_cb() local
736 sta = sta_info_get_bss(sdata, ra); in ieee80211_start_tx_ba_cb()
737 if (!sta) { in ieee80211_start_tx_ba_cb()
743 mutex_lock(&sta->ampdu_mlme.mtx); in ieee80211_start_tx_ba_cb()
744 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_start_tx_ba_cb()
755 ieee80211_agg_tx_operational(local, sta, tid); in ieee80211_start_tx_ba_cb()
758 mutex_unlock(&sta->ampdu_mlme.mtx); in ieee80211_start_tx_ba_cb()
783 int __ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid, in __ieee80211_stop_tx_ba_session() argument
788 mutex_lock(&sta->ampdu_mlme.mtx); in __ieee80211_stop_tx_ba_session()
790 ret = ___ieee80211_stop_tx_ba_session(sta, tid, reason); in __ieee80211_stop_tx_ba_session()
792 mutex_unlock(&sta->ampdu_mlme.mtx); in __ieee80211_stop_tx_ba_session()
799 struct sta_info *sta = container_of(pubsta, struct sta_info, sta); in ieee80211_stop_tx_ba_session() local
800 struct ieee80211_sub_if_data *sdata = sta->sdata; in ieee80211_stop_tx_ba_session()
813 spin_lock_bh(&sta->lock); in ieee80211_stop_tx_ba_session()
814 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_stop_tx_ba_session()
821 WARN(sta->reserved_tid == tid, in ieee80211_stop_tx_ba_session()
831 ieee80211_queue_work(&local->hw, &sta->ampdu_mlme.work); in ieee80211_stop_tx_ba_session()
834 spin_unlock_bh(&sta->lock); in ieee80211_stop_tx_ba_session()
843 struct sta_info *sta; in ieee80211_stop_tx_ba_cb() local
859 sta = sta_info_get_bss(sdata, ra); in ieee80211_stop_tx_ba_cb()
860 if (!sta) { in ieee80211_stop_tx_ba_cb()
865 mutex_lock(&sta->ampdu_mlme.mtx); in ieee80211_stop_tx_ba_cb()
866 spin_lock_bh(&sta->lock); in ieee80211_stop_tx_ba_cb()
867 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_stop_tx_ba_cb()
872 sta->sta.addr, tid); in ieee80211_stop_tx_ba_cb()
879 ieee80211_remove_tid_tx(sta, tid); in ieee80211_stop_tx_ba_cb()
882 spin_unlock_bh(&sta->lock); in ieee80211_stop_tx_ba_cb()
888 mutex_unlock(&sta->ampdu_mlme.mtx); in ieee80211_stop_tx_ba_cb()
916 struct sta_info *sta, in ieee80211_process_addba_resp() argument
931 mutex_lock(&sta->ampdu_mlme.mtx); in ieee80211_process_addba_resp()
933 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_process_addba_resp()
938 ht_dbg(sta->sdata, "wrong addBA response token, %pM tid %d\n", in ieee80211_process_addba_resp()
939 sta->sta.addr, tid); in ieee80211_process_addba_resp()
945 ht_dbg(sta->sdata, "switched off addBA timer for %pM tid %d\n", in ieee80211_process_addba_resp()
946 sta->sta.addr, tid); in ieee80211_process_addba_resp()
955 ht_dbg(sta->sdata, in ieee80211_process_addba_resp()
957 sta->sta.addr, tid); in ieee80211_process_addba_resp()
979 ieee80211_agg_tx_operational(local, sta, tid); in ieee80211_process_addba_resp()
981 sta->ampdu_mlme.addba_req_num[tid] = 0; in ieee80211_process_addba_resp()
990 ___ieee80211_stop_tx_ba_session(sta, tid, AGG_STOP_DECLINED); in ieee80211_process_addba_resp()
994 mutex_unlock(&sta->ampdu_mlme.mtx); in ieee80211_process_addba_resp()