Lines Matching refs:r
38 static inline int reorder_index(struct wil_tid_ampdu_rx *r, u16 seq) in reorder_index() argument
40 return seq_sub(seq, r->ssn) % r->buf_size; in reorder_index()
44 struct wil_tid_ampdu_rx *r, in wil_release_reorder_frame() argument
48 struct sk_buff *skb = r->reorder_buf[index]; in wil_release_reorder_frame()
54 r->stored_mpdu_num--; in wil_release_reorder_frame()
55 r->reorder_buf[index] = NULL; in wil_release_reorder_frame()
59 r->head_seq_num = seq_inc(r->head_seq_num); in wil_release_reorder_frame()
63 struct wil_tid_ampdu_rx *r, in wil_release_reorder_frames() argument
74 while (seq_less(r->head_seq_num, hseq) && r->stored_mpdu_num) { in wil_release_reorder_frames()
75 index = reorder_index(r, r->head_seq_num); in wil_release_reorder_frames()
76 wil_release_reorder_frame(wil, r, index); in wil_release_reorder_frames()
78 r->head_seq_num = hseq; in wil_release_reorder_frames()
82 struct wil_tid_ampdu_rx *r) in wil_reorder_release() argument
84 int index = reorder_index(r, r->head_seq_num); in wil_reorder_release()
86 while (r->reorder_buf[index]) { in wil_reorder_release()
87 wil_release_reorder_frame(wil, r, index); in wil_reorder_release()
88 index = reorder_index(r, r->head_seq_num); in wil_reorder_release()
104 struct wil_tid_ampdu_rx *r; in wil_rx_reorder() local
118 r = sta->tid_rx[tid]; in wil_rx_reorder()
119 if (!r) { in wil_rx_reorder()
124 r->total++; in wil_rx_reorder()
125 hseq = r->head_seq_num; in wil_rx_reorder()
135 if (r->first_time) { in wil_rx_reorder()
136 r->first_time = false; in wil_rx_reorder()
137 if (seq != r->head_seq_num) { in wil_rx_reorder()
138 if (seq_less(seq, r->head_seq_num)) { in wil_rx_reorder()
141 seq, r->head_seq_num); in wil_rx_reorder()
142 r->first_time = true; in wil_rx_reorder()
148 seq, r->head_seq_num); in wil_rx_reorder()
149 r->head_seq_num = seq; in wil_rx_reorder()
150 r->ssn = seq; in wil_rx_reorder()
155 if (seq_less(seq, r->head_seq_num)) { in wil_rx_reorder()
156 r->ssn_last_drop = seq; in wil_rx_reorder()
157 r->drop_old++; in wil_rx_reorder()
159 seq, r->head_seq_num); in wil_rx_reorder()
168 if (!seq_less(seq, r->head_seq_num + r->buf_size)) { in wil_rx_reorder()
169 hseq = seq_inc(seq_sub(seq, r->buf_size)); in wil_rx_reorder()
171 wil_release_reorder_frames(wil, r, hseq); in wil_rx_reorder()
176 index = reorder_index(r, seq); in wil_rx_reorder()
179 if (r->reorder_buf[index]) { in wil_rx_reorder()
180 r->drop_dup++; in wil_rx_reorder()
192 if (seq == r->head_seq_num && r->stored_mpdu_num == 0) { in wil_rx_reorder()
193 r->head_seq_num = seq_inc(r->head_seq_num); in wil_rx_reorder()
199 r->reorder_buf[index] = skb; in wil_rx_reorder()
200 r->reorder_time[index] = jiffies; in wil_rx_reorder()
201 r->stored_mpdu_num++; in wil_rx_reorder()
202 wil_reorder_release(wil, r); in wil_rx_reorder()
212 struct wil_tid_ampdu_rx *r; in wil_rx_bar() local
216 r = sta->tid_rx[tid]; in wil_rx_bar()
217 if (!r) { in wil_rx_bar()
221 if (seq_less(seq, r->head_seq_num)) { in wil_rx_bar()
223 seq, r->head_seq_num); in wil_rx_bar()
227 cid, tid, seq, r->head_seq_num); in wil_rx_bar()
228 wil_release_reorder_frames(wil, r, seq); in wil_rx_bar()
237 struct wil_tid_ampdu_rx *r = kzalloc(sizeof(*r), GFP_KERNEL); in wil_tid_ampdu_rx_alloc() local
239 if (!r) in wil_tid_ampdu_rx_alloc()
242 r->reorder_buf = in wil_tid_ampdu_rx_alloc()
244 r->reorder_time = in wil_tid_ampdu_rx_alloc()
246 if (!r->reorder_buf || !r->reorder_time) { in wil_tid_ampdu_rx_alloc()
247 kfree(r->reorder_buf); in wil_tid_ampdu_rx_alloc()
248 kfree(r->reorder_time); in wil_tid_ampdu_rx_alloc()
249 kfree(r); in wil_tid_ampdu_rx_alloc()
253 r->ssn = ssn; in wil_tid_ampdu_rx_alloc()
254 r->head_seq_num = ssn; in wil_tid_ampdu_rx_alloc()
255 r->buf_size = size; in wil_tid_ampdu_rx_alloc()
256 r->stored_mpdu_num = 0; in wil_tid_ampdu_rx_alloc()
257 r->first_time = true; in wil_tid_ampdu_rx_alloc()
258 return r; in wil_tid_ampdu_rx_alloc()
262 struct wil_tid_ampdu_rx *r) in wil_tid_ampdu_rx_free() argument
264 if (!r) in wil_tid_ampdu_rx_free()
266 wil_release_reorder_frames(wil, r, r->head_seq_num + r->buf_size); in wil_tid_ampdu_rx_free()
267 kfree(r->reorder_buf); in wil_tid_ampdu_rx_free()
268 kfree(r->reorder_time); in wil_tid_ampdu_rx_free()
269 kfree(r); in wil_tid_ampdu_rx_free()
327 struct wil_tid_ampdu_rx *r; in wil_back_rx_handle() local
364 r = wil_tid_ampdu_rx_alloc(wil, agg_wsize, ssn); in wil_back_rx_handle()
367 sta->tid_rx[tid] = r; in wil_back_rx_handle()