Lines Matching refs:tid_agg_rx
1091 static inline bool ieee80211_rx_reorder_ready(struct tid_ampdu_rx *tid_agg_rx, in ieee80211_rx_reorder_ready() argument
1094 struct sk_buff_head *frames = &tid_agg_rx->reorder_buf[index]; in ieee80211_rx_reorder_ready()
1098 if (tid_agg_rx->reorder_buf_filtered & BIT_ULL(index)) in ieee80211_rx_reorder_ready()
1112 struct tid_ampdu_rx *tid_agg_rx, in ieee80211_release_reorder_frame() argument
1116 struct sk_buff_head *skb_list = &tid_agg_rx->reorder_buf[index]; in ieee80211_release_reorder_frame()
1120 lockdep_assert_held(&tid_agg_rx->reorder_lock); in ieee80211_release_reorder_frame()
1125 if (!ieee80211_rx_reorder_ready(tid_agg_rx, index)) { in ieee80211_release_reorder_frame()
1131 tid_agg_rx->stored_mpdu_num--; in ieee80211_release_reorder_frame()
1139 tid_agg_rx->reorder_buf_filtered &= ~BIT_ULL(index); in ieee80211_release_reorder_frame()
1140 tid_agg_rx->head_seq_num = ieee80211_sn_inc(tid_agg_rx->head_seq_num); in ieee80211_release_reorder_frame()
1144 struct tid_ampdu_rx *tid_agg_rx, in ieee80211_release_reorder_frames() argument
1150 lockdep_assert_held(&tid_agg_rx->reorder_lock); in ieee80211_release_reorder_frames()
1152 while (ieee80211_sn_less(tid_agg_rx->head_seq_num, head_seq_num)) { in ieee80211_release_reorder_frames()
1153 index = tid_agg_rx->head_seq_num % tid_agg_rx->buf_size; in ieee80211_release_reorder_frames()
1154 ieee80211_release_reorder_frame(sdata, tid_agg_rx, index, in ieee80211_release_reorder_frames()
1171 struct tid_ampdu_rx *tid_agg_rx, in ieee80211_sta_reorder_release() argument
1176 lockdep_assert_held(&tid_agg_rx->reorder_lock); in ieee80211_sta_reorder_release()
1179 index = tid_agg_rx->head_seq_num % tid_agg_rx->buf_size; in ieee80211_sta_reorder_release()
1180 if (!ieee80211_rx_reorder_ready(tid_agg_rx, index) && in ieee80211_sta_reorder_release()
1181 tid_agg_rx->stored_mpdu_num) { in ieee80211_sta_reorder_release()
1187 for (j = (index + 1) % tid_agg_rx->buf_size; j != index; in ieee80211_sta_reorder_release()
1188 j = (j + 1) % tid_agg_rx->buf_size) { in ieee80211_sta_reorder_release()
1189 if (!ieee80211_rx_reorder_ready(tid_agg_rx, j)) { in ieee80211_sta_reorder_release()
1194 !time_after(jiffies, tid_agg_rx->reorder_time[j] + in ieee80211_sta_reorder_release()
1199 for (i = (index + 1) % tid_agg_rx->buf_size; i != j; in ieee80211_sta_reorder_release()
1200 i = (i + 1) % tid_agg_rx->buf_size) in ieee80211_sta_reorder_release()
1201 __skb_queue_purge(&tid_agg_rx->reorder_buf[i]); in ieee80211_sta_reorder_release()
1205 ieee80211_release_reorder_frame(sdata, tid_agg_rx, j, in ieee80211_sta_reorder_release()
1211 tid_agg_rx->head_seq_num = in ieee80211_sta_reorder_release()
1212 (tid_agg_rx->head_seq_num + in ieee80211_sta_reorder_release()
1216 } else while (ieee80211_rx_reorder_ready(tid_agg_rx, index)) { in ieee80211_sta_reorder_release()
1217 ieee80211_release_reorder_frame(sdata, tid_agg_rx, index, in ieee80211_sta_reorder_release()
1219 index = tid_agg_rx->head_seq_num % tid_agg_rx->buf_size; in ieee80211_sta_reorder_release()
1222 if (tid_agg_rx->stored_mpdu_num) { in ieee80211_sta_reorder_release()
1223 j = index = tid_agg_rx->head_seq_num % tid_agg_rx->buf_size; in ieee80211_sta_reorder_release()
1225 for (; j != (index - 1) % tid_agg_rx->buf_size; in ieee80211_sta_reorder_release()
1226 j = (j + 1) % tid_agg_rx->buf_size) { in ieee80211_sta_reorder_release()
1227 if (ieee80211_rx_reorder_ready(tid_agg_rx, j)) in ieee80211_sta_reorder_release()
1233 if (!tid_agg_rx->removed) in ieee80211_sta_reorder_release()
1234 mod_timer(&tid_agg_rx->reorder_timer, in ieee80211_sta_reorder_release()
1235 tid_agg_rx->reorder_time[j] + 1 + in ieee80211_sta_reorder_release()
1238 del_timer(&tid_agg_rx->reorder_timer); in ieee80211_sta_reorder_release()
1248 struct tid_ampdu_rx *tid_agg_rx, in ieee80211_sta_manage_reorder_buf() argument
1260 spin_lock(&tid_agg_rx->reorder_lock); in ieee80211_sta_manage_reorder_buf()
1266 if (unlikely(tid_agg_rx->auto_seq)) { in ieee80211_sta_manage_reorder_buf()
1267 tid_agg_rx->auto_seq = false; in ieee80211_sta_manage_reorder_buf()
1268 tid_agg_rx->ssn = mpdu_seq_num; in ieee80211_sta_manage_reorder_buf()
1269 tid_agg_rx->head_seq_num = mpdu_seq_num; in ieee80211_sta_manage_reorder_buf()
1272 buf_size = tid_agg_rx->buf_size; in ieee80211_sta_manage_reorder_buf()
1273 head_seq_num = tid_agg_rx->head_seq_num; in ieee80211_sta_manage_reorder_buf()
1279 if (unlikely(!tid_agg_rx->started)) { in ieee80211_sta_manage_reorder_buf()
1284 tid_agg_rx->started = true; in ieee80211_sta_manage_reorder_buf()
1301 ieee80211_release_reorder_frames(sdata, tid_agg_rx, in ieee80211_sta_manage_reorder_buf()
1307 index = mpdu_seq_num % tid_agg_rx->buf_size; in ieee80211_sta_manage_reorder_buf()
1310 if (ieee80211_rx_reorder_ready(tid_agg_rx, index)) { in ieee80211_sta_manage_reorder_buf()
1321 if (mpdu_seq_num == tid_agg_rx->head_seq_num && in ieee80211_sta_manage_reorder_buf()
1322 tid_agg_rx->stored_mpdu_num == 0) { in ieee80211_sta_manage_reorder_buf()
1324 tid_agg_rx->head_seq_num = in ieee80211_sta_manage_reorder_buf()
1325 ieee80211_sn_inc(tid_agg_rx->head_seq_num); in ieee80211_sta_manage_reorder_buf()
1331 __skb_queue_tail(&tid_agg_rx->reorder_buf[index], skb); in ieee80211_sta_manage_reorder_buf()
1333 tid_agg_rx->reorder_time[index] = jiffies; in ieee80211_sta_manage_reorder_buf()
1334 tid_agg_rx->stored_mpdu_num++; in ieee80211_sta_manage_reorder_buf()
1335 ieee80211_sta_reorder_release(sdata, tid_agg_rx, frames); in ieee80211_sta_manage_reorder_buf()
1339 spin_unlock(&tid_agg_rx->reorder_lock); in ieee80211_sta_manage_reorder_buf()
1354 struct tid_ampdu_rx *tid_agg_rx; in ieee80211_rx_reorder_ampdu() local
1374 tid_agg_rx = rcu_dereference(sta->ampdu_mlme.tid_rx[tid]); in ieee80211_rx_reorder_ampdu()
1375 if (!tid_agg_rx) { in ieee80211_rx_reorder_ampdu()
1396 if (tid_agg_rx->timeout) in ieee80211_rx_reorder_ampdu()
1397 tid_agg_rx->last_rx = jiffies; in ieee80211_rx_reorder_ampdu()
1414 if (ieee80211_sta_manage_reorder_buf(rx->sdata, tid_agg_rx, skb, in ieee80211_rx_reorder_ampdu()
3062 struct tid_ampdu_rx *tid_agg_rx; in ieee80211_rx_h_ctrl() local
3092 tid_agg_rx = rcu_dereference(rx->sta->ampdu_mlme.tid_rx[tid]); in ieee80211_rx_h_ctrl()
3093 if (!tid_agg_rx) in ieee80211_rx_h_ctrl()
3102 if (tid_agg_rx->timeout) in ieee80211_rx_h_ctrl()
3103 mod_timer(&tid_agg_rx->session_timer, in ieee80211_rx_h_ctrl()
3104 TU_TO_EXP_TIME(tid_agg_rx->timeout)); in ieee80211_rx_h_ctrl()
3106 spin_lock(&tid_agg_rx->reorder_lock); in ieee80211_rx_h_ctrl()
3108 ieee80211_release_reorder_frames(rx->sdata, tid_agg_rx, in ieee80211_rx_h_ctrl()
3110 spin_unlock(&tid_agg_rx->reorder_lock); in ieee80211_rx_h_ctrl()
3941 struct tid_ampdu_rx *tid_agg_rx; in ieee80211_release_reorder_timeout() local
3943 tid_agg_rx = rcu_dereference(sta->ampdu_mlme.tid_rx[tid]); in ieee80211_release_reorder_timeout()
3944 if (!tid_agg_rx) in ieee80211_release_reorder_timeout()
3949 spin_lock(&tid_agg_rx->reorder_lock); in ieee80211_release_reorder_timeout()
3950 ieee80211_sta_reorder_release(sta->sdata, tid_agg_rx, &frames); in ieee80211_release_reorder_timeout()
3951 spin_unlock(&tid_agg_rx->reorder_lock); in ieee80211_release_reorder_timeout()
3970 struct tid_ampdu_rx *tid_agg_rx; in ieee80211_mark_rx_ba_filtered_frames() local
3991 tid_agg_rx = rcu_dereference(sta->ampdu_mlme.tid_rx[tid]); in ieee80211_mark_rx_ba_filtered_frames()
3992 if (!tid_agg_rx) in ieee80211_mark_rx_ba_filtered_frames()
3995 spin_lock_bh(&tid_agg_rx->reorder_lock); in ieee80211_mark_rx_ba_filtered_frames()
4001 release = (tid_agg_rx->head_seq_num + tid_agg_rx->buf_size) % in ieee80211_mark_rx_ba_filtered_frames()
4003 ieee80211_release_reorder_frames(sta->sdata, tid_agg_rx, in ieee80211_mark_rx_ba_filtered_frames()
4006 tid_agg_rx->head_seq_num = ssn; in ieee80211_mark_rx_ba_filtered_frames()
4008 ieee80211_release_reorder_frames(sta->sdata, tid_agg_rx, ssn, in ieee80211_mark_rx_ba_filtered_frames()
4014 diff = (tid_agg_rx->head_seq_num - ssn) & IEEE80211_SN_MASK; in ieee80211_mark_rx_ba_filtered_frames()
4015 if (diff >= tid_agg_rx->buf_size) { in ieee80211_mark_rx_ba_filtered_frames()
4016 tid_agg_rx->reorder_buf_filtered = 0; in ieee80211_mark_rx_ba_filtered_frames()
4023 for (i = 0; i < tid_agg_rx->buf_size; i++) { in ieee80211_mark_rx_ba_filtered_frames()
4024 int index = (ssn + i) % tid_agg_rx->buf_size; in ieee80211_mark_rx_ba_filtered_frames()
4026 tid_agg_rx->reorder_buf_filtered &= ~BIT_ULL(index); in ieee80211_mark_rx_ba_filtered_frames()
4028 tid_agg_rx->reorder_buf_filtered |= BIT_ULL(index); in ieee80211_mark_rx_ba_filtered_frames()
4032 ieee80211_sta_reorder_release(sta->sdata, tid_agg_rx, &frames); in ieee80211_mark_rx_ba_filtered_frames()
4035 spin_unlock_bh(&tid_agg_rx->reorder_lock); in ieee80211_mark_rx_ba_filtered_frames()