Lines Matching refs:sta
58 void ___ieee80211_stop_rx_ba_session(struct sta_info *sta, u16 tid,
61 struct ieee80211_local *local = sta->local;
64 .sta = &sta->sta,
72 lockdep_assert_held(&sta->ampdu_mlme.mtx);
74 tid_rx = rcu_dereference_protected(sta->ampdu_mlme.tid_rx[tid],
75 lockdep_is_held(&sta->ampdu_mlme.mtx));
77 if (!test_bit(tid, sta->ampdu_mlme.agg_session_valid))
80 RCU_INIT_POINTER(sta->ampdu_mlme.tid_rx[tid], NULL);
81 __clear_bit(tid, sta->ampdu_mlme.agg_session_valid);
83 ht_dbg(sta->sdata,
85 sta->sta.addr, tid,
89 if (drv_ampdu_action(local, sta->sdata, ¶ms))
90 sdata_info(sta->sdata,
92 sta->sta.addr, tid);
96 ieee80211_send_delba(sta->sdata, sta->sta.addr,
117 void __ieee80211_stop_rx_ba_session(struct sta_info *sta, u16 tid,
120 mutex_lock(&sta->ampdu_mlme.mtx);
121 ___ieee80211_stop_rx_ba_session(sta, tid, initiator, reason, tx);
122 mutex_unlock(&sta->ampdu_mlme.mtx);
129 struct sta_info *sta;
133 sta = sta_info_get_bss(sdata, addr);
134 if (!sta) {
141 set_bit(i, sta->ampdu_mlme.tid_rx_stop_requested);
143 ieee80211_queue_work(&sta->local->hw, &sta->ampdu_mlme.work);
155 struct sta_info *sta = tid_rx->sta;
165 ht_dbg(sta->sdata, "RX session timer expired on %pM tid %d\n",
166 sta->sta.addr, tid);
168 set_bit(tid, sta->ampdu_mlme.tid_rx_timer_expired);
169 ieee80211_queue_work(&sta->local->hw, &sta->ampdu_mlme.work);
177 ieee80211_release_reorder_timeout(tid_rx->sta, tid_rx->tid);
215 static void ieee80211_send_addba_resp(struct sta_info *sta, u8 *da, u16 tid,
220 struct ieee80211_sub_if_data *sdata = sta->sdata;
263 if (sta->sta.he_cap.has_he && addbaext)
269 void ___ieee80211_start_rx_ba_session(struct sta_info *sta,
275 struct ieee80211_local *local = sta->sdata->local;
278 .sta = &sta->sta,
290 ht_dbg(sta->sdata,
292 sta->sta.addr, tid);
296 if (!sta->sta.ht_cap.ht_supported &&
297 sta->sdata->vif.bss_conf.chandef.chan->band != NL80211_BAND_6GHZ) {
298 ht_dbg(sta->sdata,
300 sta->sta.addr, tid);
305 if (test_sta_flag(sta, WLAN_STA_BLOCK_BA)) {
306 ht_dbg(sta->sdata,
308 sta->sta.addr, tid);
312 if (sta->sta.he_cap.has_he)
322 (!(sta->sta.ht_cap.cap & IEEE80211_HT_CAP_DELAY_BA))) ||
325 ht_dbg_ratelimited(sta->sdata,
327 sta->sta.addr, tid, ba_policy, buf_size);
335 if (buf_size > sta->sta.max_rx_aggregation_subframes)
336 buf_size = sta->sta.max_rx_aggregation_subframes;
339 ht_dbg(sta->sdata, "AddBA Req buf_size=%d for %pM\n",
340 buf_size, sta->sta.addr);
343 lockdep_assert_held(&sta->ampdu_mlme.mtx);
345 if (test_bit(tid, sta->ampdu_mlme.agg_session_valid)) {
346 if (sta->ampdu_mlme.tid_rx_token[tid] == dialog_token) {
349 ht_dbg_ratelimited(sta->sdata,
351 sta->sta.addr, tid);
358 tid_rx = rcu_dereference(sta->ampdu_mlme.tid_rx[tid]);
367 ht_dbg_ratelimited(sta->sdata,
369 sta->sta.addr, tid);
372 ___ieee80211_stop_rx_ba_session(sta, tid, WLAN_BACK_RECIPIENT,
378 ret = drv_ampdu_action(local, sta->sdata, ¶ms);
379 ht_dbg(sta->sdata,
381 sta->sta.addr, tid, ret);
417 ret = drv_ampdu_action(local, sta->sdata, ¶ms);
418 ht_dbg(sta->sdata, "Rx A-MPDU request on %pM tid %d result %d\n",
419 sta->sta.addr, tid, ret);
437 tid_agg_rx->sta = sta;
441 rcu_assign_pointer(sta->ampdu_mlme.tid_rx[tid], tid_agg_rx);
450 __set_bit(tid, sta->ampdu_mlme.agg_session_valid);
451 __clear_bit(tid, sta->ampdu_mlme.unexpected_agg);
452 sta->ampdu_mlme.tid_rx_token[tid] = dialog_token;
456 ieee80211_send_addba_resp(sta, sta->sta.addr, tid,
461 static void __ieee80211_start_rx_ba_session(struct sta_info *sta,
468 mutex_lock(&sta->ampdu_mlme.mtx);
469 ___ieee80211_start_rx_ba_session(sta, dialog_token, timeout,
472 mutex_unlock(&sta->ampdu_mlme.mtx);
476 struct sta_info *sta,
505 __ieee80211_start_rx_ba_session(sta, dialog_token, timeout,
516 struct sta_info *sta;
519 sta = sta_info_get_bss(sdata, addr);
520 if (!sta)
523 set_bit(tid, sta->ampdu_mlme.tid_rx_manage_offl);
524 ieee80211_queue_work(&local->hw, &sta->ampdu_mlme.work);
535 struct sta_info *sta;
538 sta = sta_info_get_bss(sdata, addr);
539 if (!sta)
542 set_bit(tid, sta->ampdu_mlme.tid_rx_timer_expired);
543 ieee80211_queue_work(&local->hw, &sta->ampdu_mlme.work);