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 hseq = r->head_seq_num; in wil_rx_reorder()
134 if (r->first_time) { in wil_rx_reorder()
135 r->first_time = false; in wil_rx_reorder()
136 if (seq != r->head_seq_num) { in wil_rx_reorder()
137 if (seq_less(seq, r->head_seq_num)) { in wil_rx_reorder()
140 seq, r->head_seq_num); in wil_rx_reorder()
141 r->first_time = true; in wil_rx_reorder()
147 seq, r->head_seq_num); in wil_rx_reorder()
148 r->head_seq_num = seq; in wil_rx_reorder()
149 r->ssn = seq; in wil_rx_reorder()
154 if (seq_less(seq, r->head_seq_num)) { in wil_rx_reorder()
155 r->ssn_last_drop = seq; in wil_rx_reorder()
164 if (!seq_less(seq, r->head_seq_num + r->buf_size)) { in wil_rx_reorder()
165 hseq = seq_inc(seq_sub(seq, r->buf_size)); in wil_rx_reorder()
167 wil_release_reorder_frames(wil, r, hseq); in wil_rx_reorder()
172 index = reorder_index(r, seq); in wil_rx_reorder()
175 if (r->reorder_buf[index]) { in wil_rx_reorder()
186 if (seq == r->head_seq_num && r->stored_mpdu_num == 0) { in wil_rx_reorder()
187 r->head_seq_num = seq_inc(r->head_seq_num); in wil_rx_reorder()
193 r->reorder_buf[index] = skb; in wil_rx_reorder()
194 r->reorder_time[index] = jiffies; in wil_rx_reorder()
195 r->stored_mpdu_num++; in wil_rx_reorder()
196 wil_reorder_release(wil, r); in wil_rx_reorder()
205 struct wil_tid_ampdu_rx *r = kzalloc(sizeof(*r), GFP_KERNEL); in wil_tid_ampdu_rx_alloc() local
207 if (!r) in wil_tid_ampdu_rx_alloc()
210 r->reorder_buf = in wil_tid_ampdu_rx_alloc()
212 r->reorder_time = in wil_tid_ampdu_rx_alloc()
214 if (!r->reorder_buf || !r->reorder_time) { in wil_tid_ampdu_rx_alloc()
215 kfree(r->reorder_buf); in wil_tid_ampdu_rx_alloc()
216 kfree(r->reorder_time); in wil_tid_ampdu_rx_alloc()
217 kfree(r); in wil_tid_ampdu_rx_alloc()
221 r->ssn = ssn; in wil_tid_ampdu_rx_alloc()
222 r->head_seq_num = ssn; in wil_tid_ampdu_rx_alloc()
223 r->buf_size = size; in wil_tid_ampdu_rx_alloc()
224 r->stored_mpdu_num = 0; in wil_tid_ampdu_rx_alloc()
225 r->first_time = true; in wil_tid_ampdu_rx_alloc()
226 return r; in wil_tid_ampdu_rx_alloc()
230 struct wil_tid_ampdu_rx *r) in wil_tid_ampdu_rx_free() argument
232 if (!r) in wil_tid_ampdu_rx_free()
234 wil_release_reorder_frames(wil, r, r->head_seq_num + r->buf_size); in wil_tid_ampdu_rx_free()
235 kfree(r->reorder_buf); in wil_tid_ampdu_rx_free()
236 kfree(r->reorder_time); in wil_tid_ampdu_rx_free()
237 kfree(r); in wil_tid_ampdu_rx_free()
295 struct wil_tid_ampdu_rx *r; in wil_back_rx_handle() local
332 r = wil_tid_ampdu_rx_alloc(wil, agg_wsize, ssn); in wil_back_rx_handle()
335 sta->tid_rx[tid] = r; in wil_back_rx_handle()