Lines Matching defs:tid_agg_rx

1079 static inline bool ieee80211_rx_reorder_ready(struct tid_ampdu_rx *tid_agg_rx,
1082 struct sk_buff_head *frames = &tid_agg_rx->reorder_buf[index];
1086 if (tid_agg_rx->reorder_buf_filtered &&
1087 tid_agg_rx->reorder_buf_filtered & BIT_ULL(index))
1101 struct tid_ampdu_rx *tid_agg_rx,
1105 struct sk_buff_head *skb_list = &tid_agg_rx->reorder_buf[index];
1109 lockdep_assert_held(&tid_agg_rx->reorder_lock);
1114 if (!ieee80211_rx_reorder_ready(tid_agg_rx, index)) {
1120 tid_agg_rx->stored_mpdu_num--;
1128 if (tid_agg_rx->reorder_buf_filtered)
1129 tid_agg_rx->reorder_buf_filtered &= ~BIT_ULL(index);
1130 tid_agg_rx->head_seq_num = ieee80211_sn_inc(tid_agg_rx->head_seq_num);
1134 struct tid_ampdu_rx *tid_agg_rx,
1140 lockdep_assert_held(&tid_agg_rx->reorder_lock);
1142 while (ieee80211_sn_less(tid_agg_rx->head_seq_num, head_seq_num)) {
1143 index = tid_agg_rx->head_seq_num % tid_agg_rx->buf_size;
1144 ieee80211_release_reorder_frame(sdata, tid_agg_rx, index,
1156 * Callers must hold tid_agg_rx->reorder_lock.
1161 struct tid_ampdu_rx *tid_agg_rx,
1166 lockdep_assert_held(&tid_agg_rx->reorder_lock);
1169 index = tid_agg_rx->head_seq_num % tid_agg_rx->buf_size;
1170 if (!ieee80211_rx_reorder_ready(tid_agg_rx, index) &&
1171 tid_agg_rx->stored_mpdu_num) {
1177 for (j = (index + 1) % tid_agg_rx->buf_size; j != index;
1178 j = (j + 1) % tid_agg_rx->buf_size) {
1179 if (!ieee80211_rx_reorder_ready(tid_agg_rx, j)) {
1184 !time_after(jiffies, tid_agg_rx->reorder_time[j] +
1189 for (i = (index + 1) % tid_agg_rx->buf_size; i != j;
1190 i = (i + 1) % tid_agg_rx->buf_size)
1191 __skb_queue_purge(&tid_agg_rx->reorder_buf[i]);
1195 ieee80211_release_reorder_frame(sdata, tid_agg_rx, j,
1201 tid_agg_rx->head_seq_num =
1202 (tid_agg_rx->head_seq_num +
1206 } else while (ieee80211_rx_reorder_ready(tid_agg_rx, index)) {
1207 ieee80211_release_reorder_frame(sdata, tid_agg_rx, index,
1209 index = tid_agg_rx->head_seq_num % tid_agg_rx->buf_size;
1212 if (tid_agg_rx->stored_mpdu_num) {
1213 j = index = tid_agg_rx->head_seq_num % tid_agg_rx->buf_size;
1215 for (; j != (index - 1) % tid_agg_rx->buf_size;
1216 j = (j + 1) % tid_agg_rx->buf_size) {
1217 if (ieee80211_rx_reorder_ready(tid_agg_rx, j))
1223 if (!tid_agg_rx->removed)
1224 mod_timer(&tid_agg_rx->reorder_timer,
1225 tid_agg_rx->reorder_time[j] + 1 +
1228 del_timer(&tid_agg_rx->reorder_timer);
1238 struct tid_ampdu_rx *tid_agg_rx,
1250 spin_lock(&tid_agg_rx->reorder_lock);
1256 if (unlikely(tid_agg_rx->auto_seq)) {
1257 tid_agg_rx->auto_seq = false;
1258 tid_agg_rx->ssn = mpdu_seq_num;
1259 tid_agg_rx->head_seq_num = mpdu_seq_num;
1262 buf_size = tid_agg_rx->buf_size;
1263 head_seq_num = tid_agg_rx->head_seq_num;
1269 if (unlikely(!tid_agg_rx->started)) {
1274 tid_agg_rx->started = true;
1291 ieee80211_release_reorder_frames(sdata, tid_agg_rx,
1297 index = mpdu_seq_num % tid_agg_rx->buf_size;
1300 if (ieee80211_rx_reorder_ready(tid_agg_rx, index)) {
1311 if (mpdu_seq_num == tid_agg_rx->head_seq_num &&
1312 tid_agg_rx->stored_mpdu_num == 0) {
1314 tid_agg_rx->head_seq_num =
1315 ieee80211_sn_inc(tid_agg_rx->head_seq_num);
1321 __skb_queue_tail(&tid_agg_rx->reorder_buf[index], skb);
1323 tid_agg_rx->reorder_time[index] = jiffies;
1324 tid_agg_rx->stored_mpdu_num++;
1325 ieee80211_sta_reorder_release(sdata, tid_agg_rx, frames);
1329 spin_unlock(&tid_agg_rx->reorder_lock);
1343 struct tid_ampdu_rx *tid_agg_rx;
1363 tid_agg_rx = rcu_dereference(sta->ampdu_mlme.tid_rx[tid]);
1364 if (!tid_agg_rx) {
1385 if (tid_agg_rx->timeout)
1386 tid_agg_rx->last_rx = jiffies;
1397 * RX packet at a time, and thus own tid_agg_rx. All
1402 if (ieee80211_sta_manage_reorder_buf(rx->sdata, tid_agg_rx, skb,
3205 struct tid_ampdu_rx *tid_agg_rx;
3235 tid_agg_rx = rcu_dereference(rx->sta->ampdu_mlme.tid_rx[tid]);
3236 if (!tid_agg_rx)
3245 if (tid_agg_rx->timeout)
3246 mod_timer(&tid_agg_rx->session_timer,
3247 TU_TO_EXP_TIME(tid_agg_rx->timeout));
3249 spin_lock(&tid_agg_rx->reorder_lock);
3251 ieee80211_release_reorder_frames(rx->sdata, tid_agg_rx,
3253 spin_unlock(&tid_agg_rx->reorder_lock);
4236 struct tid_ampdu_rx *tid_agg_rx;
4246 tid_agg_rx = rcu_dereference(sta->ampdu_mlme.tid_rx[tid]);
4247 if (!tid_agg_rx)
4252 spin_lock(&tid_agg_rx->reorder_lock);
4253 ieee80211_sta_reorder_release(sta->sdata, tid_agg_rx, &frames);
4254 spin_unlock(&tid_agg_rx->reorder_lock);
4274 struct tid_ampdu_rx *tid_agg_rx;
4299 tid_agg_rx = rcu_dereference(sta->ampdu_mlme.tid_rx[tid]);
4300 if (!tid_agg_rx)
4303 spin_lock_bh(&tid_agg_rx->reorder_lock);
4309 release = (tid_agg_rx->head_seq_num + tid_agg_rx->buf_size) %
4311 ieee80211_release_reorder_frames(sta->sdata, tid_agg_rx,
4314 tid_agg_rx->head_seq_num = ssn;
4316 ieee80211_release_reorder_frames(sta->sdata, tid_agg_rx, ssn,
4321 * it can be tid_agg_rx->buf_size behind and still be valid */
4322 diff = (tid_agg_rx->head_seq_num - ssn) & IEEE80211_SN_MASK;
4323 if (diff >= tid_agg_rx->buf_size) {
4324 tid_agg_rx->reorder_buf_filtered = 0;
4331 for (i = 0; i < tid_agg_rx->buf_size; i++) {
4332 int index = (ssn + i) % tid_agg_rx->buf_size;
4334 tid_agg_rx->reorder_buf_filtered &= ~BIT_ULL(index);
4336 tid_agg_rx->reorder_buf_filtered |= BIT_ULL(index);
4340 ieee80211_sta_reorder_release(sta->sdata, tid_agg_rx, &frames);
4343 spin_unlock_bh(&tid_agg_rx->reorder_lock);