Lines Matching refs:sta

144 void ieee80211_assign_tid_tx(struct sta_info *sta, int tid,  in ieee80211_assign_tid_tx()  argument
147 lockdep_assert_held(&sta->ampdu_mlme.mtx); in ieee80211_assign_tid_tx()
148 lockdep_assert_held(&sta->lock); in ieee80211_assign_tid_tx()
149 rcu_assign_pointer(sta->ampdu_mlme.tid_tx[tid], tid_tx); in ieee80211_assign_tid_tx()
192 ieee80211_agg_stop_txq(struct sta_info *sta, int tid) in ieee80211_agg_stop_txq() argument
194 struct ieee80211_txq *txq = sta->sta.txq[tid]; in ieee80211_agg_stop_txq()
209 ieee80211_agg_start_txq(struct sta_info *sta, int tid, bool enable) in ieee80211_agg_start_txq() argument
211 struct ieee80211_txq *txq = sta->sta.txq[tid]; in ieee80211_agg_start_txq()
225 drv_wake_tx_queue(sta->sdata->local, txqi); in ieee80211_agg_start_txq()
262 static void ieee80211_remove_tid_tx(struct sta_info *sta, int tid) in ieee80211_remove_tid_tx() argument
266 lockdep_assert_held(&sta->ampdu_mlme.mtx); in ieee80211_remove_tid_tx()
267 lockdep_assert_held(&sta->lock); in ieee80211_remove_tid_tx()
269 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_remove_tid_tx()
281 ieee80211_agg_splice_packets(sta->sdata, tid_tx, tid); in ieee80211_remove_tid_tx()
284 ieee80211_assign_tid_tx(sta, tid, NULL); in ieee80211_remove_tid_tx()
286 ieee80211_agg_splice_finish(sta->sdata, tid); in ieee80211_remove_tid_tx()
287 ieee80211_agg_start_txq(sta, tid, false); in ieee80211_remove_tid_tx()
292 int ___ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid, in ___ieee80211_stop_tx_ba_session() argument
295 struct ieee80211_local *local = sta->local; in ___ieee80211_stop_tx_ba_session()
300 lockdep_assert_held(&sta->ampdu_mlme.mtx); in ___ieee80211_stop_tx_ba_session()
316 spin_lock_bh(&sta->lock); in ___ieee80211_stop_tx_ba_session()
318 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ___ieee80211_stop_tx_ba_session()
320 spin_unlock_bh(&sta->lock); in ___ieee80211_stop_tx_ba_session()
329 spin_unlock_bh(&sta->lock); in ___ieee80211_stop_tx_ba_session()
332 ret = drv_ampdu_action(local, sta->sdata, in ___ieee80211_stop_tx_ba_session()
334 &sta->sta, tid, NULL, 0); in ___ieee80211_stop_tx_ba_session()
341 ieee80211_assign_tid_tx(sta, tid, NULL); in ___ieee80211_stop_tx_ba_session()
342 spin_unlock_bh(&sta->lock); in ___ieee80211_stop_tx_ba_session()
349 spin_unlock_bh(&sta->lock); in ___ieee80211_stop_tx_ba_session()
351 ht_dbg(sta->sdata, "Tx BA session stop requested for %pM tid %u\n", in ___ieee80211_stop_tx_ba_session()
352 sta->sta.addr, tid); in ___ieee80211_stop_tx_ba_session()
383 ret = drv_ampdu_action(local, sta->sdata, action, in ___ieee80211_stop_tx_ba_session()
384 &sta->sta, tid, NULL, 0); in ___ieee80211_stop_tx_ba_session()
419 struct sta_info *sta = container_of((void *)data, in sta_addba_resp_timer_expired() local
425 tid_tx = rcu_dereference(sta->ampdu_mlme.tid_tx[tid]); in sta_addba_resp_timer_expired()
429 ht_dbg(sta->sdata, in sta_addba_resp_timer_expired()
431 sta->sta.addr, tid); in sta_addba_resp_timer_expired()
435 ht_dbg(sta->sdata, "addBA response timer expired on %pM tid %d\n", in sta_addba_resp_timer_expired()
436 sta->sta.addr, tid); in sta_addba_resp_timer_expired()
438 ieee80211_stop_tx_ba_session(&sta->sta, tid); in sta_addba_resp_timer_expired()
442 void ieee80211_tx_ba_session_handle_start(struct sta_info *sta, int tid) in ieee80211_tx_ba_session_handle_start() argument
445 struct ieee80211_local *local = sta->local; in ieee80211_tx_ba_session_handle_start()
446 struct ieee80211_sub_if_data *sdata = sta->sdata; in ieee80211_tx_ba_session_handle_start()
450 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_tx_ba_session_handle_start()
459 ieee80211_agg_stop_txq(sta, tid); in ieee80211_tx_ba_session_handle_start()
469 start_seq_num = sta->tid_seq[tid] >> 4; in ieee80211_tx_ba_session_handle_start()
472 &sta->sta, tid, &start_seq_num, 0); in ieee80211_tx_ba_session_handle_start()
476 sta->sta.addr, tid); in ieee80211_tx_ba_session_handle_start()
477 spin_lock_bh(&sta->lock); in ieee80211_tx_ba_session_handle_start()
479 ieee80211_assign_tid_tx(sta, tid, NULL); in ieee80211_tx_ba_session_handle_start()
481 spin_unlock_bh(&sta->lock); in ieee80211_tx_ba_session_handle_start()
483 ieee80211_agg_start_txq(sta, tid, false); in ieee80211_tx_ba_session_handle_start()
492 sta->sta.addr, tid); in ieee80211_tx_ba_session_handle_start()
494 spin_lock_bh(&sta->lock); in ieee80211_tx_ba_session_handle_start()
495 sta->ampdu_mlme.last_addba_req_time[tid] = jiffies; in ieee80211_tx_ba_session_handle_start()
496 sta->ampdu_mlme.addba_req_num[tid]++; in ieee80211_tx_ba_session_handle_start()
497 spin_unlock_bh(&sta->lock); in ieee80211_tx_ba_session_handle_start()
500 ieee80211_send_addba_request(sdata, sta->sta.addr, tid, in ieee80211_tx_ba_session_handle_start()
518 struct sta_info *sta = container_of(timer_to_id, struct sta_info, in sta_tx_agg_session_timer_expired() local
524 tid_tx = rcu_dereference(sta->ampdu_mlme.tid_tx[*ptid]); in sta_tx_agg_session_timer_expired()
539 ht_dbg(sta->sdata, "tx session timer expired on %pM tid %d\n", in sta_tx_agg_session_timer_expired()
540 sta->sta.addr, (u16)*ptid); in sta_tx_agg_session_timer_expired()
542 ieee80211_stop_tx_ba_session(&sta->sta, *ptid); in sta_tx_agg_session_timer_expired()
548 struct sta_info *sta = container_of(pubsta, struct sta_info, sta); in ieee80211_start_tx_ba_session() local
549 struct ieee80211_sub_if_data *sdata = sta->sdata; in ieee80211_start_tx_ba_session()
556 if (WARN(sta->reserved_tid == tid, in ieee80211_start_tx_ba_session()
581 if (test_sta_flag(sta, WLAN_STA_BLOCK_BA)) { in ieee80211_start_tx_ba_session()
584 sta->sta.addr, tid); in ieee80211_start_tx_ba_session()
600 if (sta->sdata->vif.type == NL80211_IFTYPE_ADHOC && in ieee80211_start_tx_ba_session()
601 !sta->sta.ht_cap.ht_supported) { in ieee80211_start_tx_ba_session()
608 spin_lock_bh(&sta->lock); in ieee80211_start_tx_ba_session()
611 if (sta->ampdu_mlme.addba_req_num[tid] > HT_AGG_MAX_RETRIES) { in ieee80211_start_tx_ba_session()
621 if (sta->ampdu_mlme.addba_req_num[tid] > HT_AGG_BURST_RETRIES && in ieee80211_start_tx_ba_session()
622 time_before(jiffies, sta->ampdu_mlme.last_addba_req_time[tid] + in ieee80211_start_tx_ba_session()
626 sta->ampdu_mlme.addba_req_num[tid], sta->sta.addr, tid); in ieee80211_start_tx_ba_session()
631 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_start_tx_ba_session()
633 if (tid_tx || sta->ampdu_mlme.tid_start_tx[tid]) { in ieee80211_start_tx_ba_session()
636 sta->sta.addr, tid); in ieee80211_start_tx_ba_session()
655 tid_tx->addba_resp_timer.data = (unsigned long)&sta->timer_to_tid[tid]; in ieee80211_start_tx_ba_session()
660 tid_tx->session_timer.data = (unsigned long)&sta->timer_to_tid[tid]; in ieee80211_start_tx_ba_session()
664 sta->ampdu_mlme.dialog_token_allocator++; in ieee80211_start_tx_ba_session()
665 tid_tx->dialog_token = sta->ampdu_mlme.dialog_token_allocator; in ieee80211_start_tx_ba_session()
671 sta->ampdu_mlme.tid_start_tx[tid] = tid_tx; in ieee80211_start_tx_ba_session()
673 ieee80211_queue_work(&local->hw, &sta->ampdu_mlme.work); in ieee80211_start_tx_ba_session()
677 spin_unlock_bh(&sta->lock); in ieee80211_start_tx_ba_session()
683 struct sta_info *sta, u16 tid) in ieee80211_agg_tx_operational() argument
687 lockdep_assert_held(&sta->ampdu_mlme.mtx); in ieee80211_agg_tx_operational()
689 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_agg_tx_operational()
691 ht_dbg(sta->sdata, "Aggregation is on for %pM tid %d\n", in ieee80211_agg_tx_operational()
692 sta->sta.addr, tid); in ieee80211_agg_tx_operational()
694 drv_ampdu_action(local, sta->sdata, in ieee80211_agg_tx_operational()
696 &sta->sta, tid, NULL, tid_tx->buf_size); in ieee80211_agg_tx_operational()
702 spin_lock_bh(&sta->lock); in ieee80211_agg_tx_operational()
704 ieee80211_agg_splice_packets(sta->sdata, tid_tx, tid); in ieee80211_agg_tx_operational()
711 ieee80211_agg_splice_finish(sta->sdata, tid); in ieee80211_agg_tx_operational()
713 spin_unlock_bh(&sta->lock); in ieee80211_agg_tx_operational()
715 ieee80211_agg_start_txq(sta, tid, true); in ieee80211_agg_tx_operational()
722 struct sta_info *sta; in ieee80211_start_tx_ba_cb() local
734 sta = sta_info_get_bss(sdata, ra); in ieee80211_start_tx_ba_cb()
735 if (!sta) { in ieee80211_start_tx_ba_cb()
741 mutex_lock(&sta->ampdu_mlme.mtx); in ieee80211_start_tx_ba_cb()
742 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_start_tx_ba_cb()
753 ieee80211_agg_tx_operational(local, sta, tid); in ieee80211_start_tx_ba_cb()
756 mutex_unlock(&sta->ampdu_mlme.mtx); in ieee80211_start_tx_ba_cb()
781 int __ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid, in __ieee80211_stop_tx_ba_session() argument
786 mutex_lock(&sta->ampdu_mlme.mtx); in __ieee80211_stop_tx_ba_session()
788 ret = ___ieee80211_stop_tx_ba_session(sta, tid, reason); in __ieee80211_stop_tx_ba_session()
790 mutex_unlock(&sta->ampdu_mlme.mtx); in __ieee80211_stop_tx_ba_session()
797 struct sta_info *sta = container_of(pubsta, struct sta_info, sta); in ieee80211_stop_tx_ba_session() local
798 struct ieee80211_sub_if_data *sdata = sta->sdata; in ieee80211_stop_tx_ba_session()
811 spin_lock_bh(&sta->lock); in ieee80211_stop_tx_ba_session()
812 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_stop_tx_ba_session()
819 WARN(sta->reserved_tid == tid, in ieee80211_stop_tx_ba_session()
829 ieee80211_queue_work(&local->hw, &sta->ampdu_mlme.work); in ieee80211_stop_tx_ba_session()
832 spin_unlock_bh(&sta->lock); in ieee80211_stop_tx_ba_session()
841 struct sta_info *sta; in ieee80211_stop_tx_ba_cb() local
857 sta = sta_info_get_bss(sdata, ra); in ieee80211_stop_tx_ba_cb()
858 if (!sta) { in ieee80211_stop_tx_ba_cb()
863 mutex_lock(&sta->ampdu_mlme.mtx); in ieee80211_stop_tx_ba_cb()
864 spin_lock_bh(&sta->lock); in ieee80211_stop_tx_ba_cb()
865 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_stop_tx_ba_cb()
870 sta->sta.addr, tid); in ieee80211_stop_tx_ba_cb()
877 ieee80211_remove_tid_tx(sta, tid); in ieee80211_stop_tx_ba_cb()
880 spin_unlock_bh(&sta->lock); in ieee80211_stop_tx_ba_cb()
886 mutex_unlock(&sta->ampdu_mlme.mtx); in ieee80211_stop_tx_ba_cb()
914 struct sta_info *sta, in ieee80211_process_addba_resp() argument
926 mutex_lock(&sta->ampdu_mlme.mtx); in ieee80211_process_addba_resp()
928 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_process_addba_resp()
933 ht_dbg(sta->sdata, "wrong addBA response token, %pM tid %d\n", in ieee80211_process_addba_resp()
934 sta->sta.addr, tid); in ieee80211_process_addba_resp()
940 ht_dbg(sta->sdata, "switched off addBA timer for %pM tid %d\n", in ieee80211_process_addba_resp()
941 sta->sta.addr, tid); in ieee80211_process_addba_resp()
950 ht_dbg(sta->sdata, in ieee80211_process_addba_resp()
952 sta->sta.addr, tid); in ieee80211_process_addba_resp()
973 ieee80211_agg_tx_operational(local, sta, tid); in ieee80211_process_addba_resp()
975 sta->ampdu_mlme.addba_req_num[tid] = 0; in ieee80211_process_addba_resp()
984 ___ieee80211_stop_tx_ba_session(sta, tid, AGG_STOP_DECLINED); in ieee80211_process_addba_resp()
988 mutex_unlock(&sta->ampdu_mlme.mtx); in ieee80211_process_addba_resp()