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, &params))
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);
199 static void ieee80211_send_addba_resp(struct sta_info *sta, u8 *da, u16 tid,
204 struct ieee80211_sub_if_data *sdata = sta->sdata;
247 if (sta->sta.deflink.he_cap.has_he && addbaext)
253 void ___ieee80211_start_rx_ba_session(struct sta_info *sta,
259 struct ieee80211_local *local = sta->sdata->local;
262 .sta = &sta->sta,
274 ht_dbg(sta->sdata,
276 sta->sta.addr, tid);
280 if (!sta->sta.deflink.ht_cap.ht_supported &&
281 !sta->sta.deflink.he_cap.has_he) {
282 ht_dbg(sta->sdata,
284 sta->sta.addr, tid);
289 if (test_sta_flag(sta, WLAN_STA_BLOCK_BA)) {
290 ht_dbg(sta->sdata,
292 sta->sta.addr, tid);
296 if (sta->sta.deflink.eht_cap.has_eht)
298 else if (sta->sta.deflink.he_cap.has_he)
308 (!(sta->sta.deflink.ht_cap.cap & IEEE80211_HT_CAP_DELAY_BA))) ||
311 ht_dbg_ratelimited(sta->sdata,
313 sta->sta.addr, tid, ba_policy, buf_size);
321 if (buf_size > sta->sta.max_rx_aggregation_subframes)
322 buf_size = sta->sta.max_rx_aggregation_subframes;
325 ht_dbg(sta->sdata, "AddBA Req buf_size=%d for %pM\n",
326 buf_size, sta->sta.addr);
329 lockdep_assert_held(&sta->ampdu_mlme.mtx);
331 if (test_bit(tid, sta->ampdu_mlme.agg_session_valid)) {
332 if (sta->ampdu_mlme.tid_rx_token[tid] == dialog_token) {
335 ht_dbg_ratelimited(sta->sdata,
337 sta->sta.addr, tid);
344 tid_rx = rcu_dereference(sta->ampdu_mlme.tid_rx[tid]);
353 ht_dbg_ratelimited(sta->sdata,
355 sta->sta.addr, tid);
358 ___ieee80211_stop_rx_ba_session(sta, tid, WLAN_BACK_RECIPIENT,
364 ret = drv_ampdu_action(local, sta->sdata, &params);
365 ht_dbg(sta->sdata,
367 sta->sta.addr, tid, ret);
403 ret = drv_ampdu_action(local, sta->sdata, &params);
404 ht_dbg(sta->sdata, "Rx A-MPDU request on %pM tid %d result %d\n",
405 sta->sta.addr, tid, ret);
423 tid_agg_rx->sta = sta;
427 rcu_assign_pointer(sta->ampdu_mlme.tid_rx[tid], tid_agg_rx);
436 __set_bit(tid, sta->ampdu_mlme.agg_session_valid);
437 __clear_bit(tid, sta->ampdu_mlme.unexpected_agg);
438 sta->ampdu_mlme.tid_rx_token[tid] = dialog_token;
442 ieee80211_send_addba_resp(sta, sta->sta.addr, tid,
447 static void __ieee80211_start_rx_ba_session(struct sta_info *sta,
454 mutex_lock(&sta->ampdu_mlme.mtx);
455 ___ieee80211_start_rx_ba_session(sta, dialog_token, timeout,
458 mutex_unlock(&sta->ampdu_mlme.mtx);
462 struct sta_info *sta,
491 if (sta->sta.deflink.eht_cap.has_eht && elems && elems->addba_ext_ie) {
498 __ieee80211_start_rx_ba_session(sta, dialog_token, timeout,
511 struct sta_info *sta;
514 sta = sta_info_get_bss(sdata, addr);
515 if (!sta)
518 set_bit(tid, sta->ampdu_mlme.tid_rx_manage_offl);
519 ieee80211_queue_work(&local->hw, &sta->ampdu_mlme.work);
530 struct sta_info *sta;
533 sta = sta_info_get_bss(sdata, addr);
534 if (!sta)
537 set_bit(tid, sta->ampdu_mlme.tid_rx_timer_expired);
538 ieee80211_queue_work(&local->hw, &sta->ampdu_mlme.work);