Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 150187
b: refs/heads/master
c: 2d3babd
h: refs/heads/master
i:
  150185: 4b01dfc
  150183: f9a31f0
v: v3
  • Loading branch information
Jouni Malinen authored and John W. Linville committed May 6, 2009
1 parent 97b6032 commit 0a93aab
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 40 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 358623c22c9fd837b3b1b444377037f72553dc9f
refs/heads/master: 2d3babd11f91501f49c6af212e6795bd8954f4d4
70 changes: 31 additions & 39 deletions trunk/net/mac80211/rx.c
Original file line number Diff line number Diff line change
Expand Up @@ -2284,6 +2284,34 @@ static inline u16 seq_sub(u16 sq1, u16 sq2)
}


static void ieee80211_release_reorder_frame(struct ieee80211_hw *hw,
struct tid_ampdu_rx *tid_agg_rx,
int index)
{
struct ieee80211_supported_band *sband;
struct ieee80211_rate *rate;
struct ieee80211_rx_status status;

if (!tid_agg_rx->reorder_buf[index])
goto no_frame;

/* release the reordered frames to stack */
memcpy(&status, tid_agg_rx->reorder_buf[index]->cb, sizeof(status));
sband = hw->wiphy->bands[status.band];
if (status.flag & RX_FLAG_HT)
rate = sband->bitrates; /* TODO: HT rates */
else
rate = &sband->bitrates[status.rate_idx];
__ieee80211_rx_handle_packet(hw, tid_agg_rx->reorder_buf[index],
&status, rate);
tid_agg_rx->stored_mpdu_num--;
tid_agg_rx->reorder_buf[index] = NULL;

no_frame:
tid_agg_rx->head_seq_num = seq_inc(tid_agg_rx->head_seq_num);
}


/*
* As it function blongs to Rx path it must be called with
* the proper rcu_read_lock protection for its flow.
Expand All @@ -2295,12 +2323,8 @@ static u8 ieee80211_sta_manage_reorder_buf(struct ieee80211_hw *hw,
u16 mpdu_seq_num,
int bar_req)
{
struct ieee80211_local *local = hw_to_local(hw);
struct ieee80211_rx_status status;
u16 head_seq_num, buf_size;
int index;
struct ieee80211_supported_band *sband;
struct ieee80211_rate *rate;

buf_size = tid_agg_rx->buf_size;
head_seq_num = tid_agg_rx->head_seq_num;
Expand All @@ -2325,28 +2349,8 @@ static u8 ieee80211_sta_manage_reorder_buf(struct ieee80211_hw *hw,
index = seq_sub(tid_agg_rx->head_seq_num,
tid_agg_rx->ssn)
% tid_agg_rx->buf_size;

if (tid_agg_rx->reorder_buf[index]) {
/* release the reordered frames to stack */
memcpy(&status,
tid_agg_rx->reorder_buf[index]->cb,
sizeof(status));
sband = local->hw.wiphy->bands[status.band];
if (status.flag & RX_FLAG_HT) {
/* TODO: HT rates */
rate = sband->bitrates;
} else {
rate = &sband->bitrates
[status.rate_idx];
}
__ieee80211_rx_handle_packet(hw,
tid_agg_rx->reorder_buf[index],
&status, rate);
tid_agg_rx->stored_mpdu_num--;
tid_agg_rx->reorder_buf[index] = NULL;
}
tid_agg_rx->head_seq_num =
seq_inc(tid_agg_rx->head_seq_num);
ieee80211_release_reorder_frame(hw, tid_agg_rx,
index);
}
if (bar_req)
return 1;
Expand Down Expand Up @@ -2380,19 +2384,7 @@ static u8 ieee80211_sta_manage_reorder_buf(struct ieee80211_hw *hw,
index = seq_sub(tid_agg_rx->head_seq_num, tid_agg_rx->ssn)
% tid_agg_rx->buf_size;
while (tid_agg_rx->reorder_buf[index]) {
/* release the reordered frame back to stack */
memcpy(&status, tid_agg_rx->reorder_buf[index]->cb,
sizeof(status));
sband = local->hw.wiphy->bands[status.band];
if (status.flag & RX_FLAG_HT)
rate = sband->bitrates; /* TODO: HT rates */
else
rate = &sband->bitrates[status.rate_idx];
__ieee80211_rx_handle_packet(hw, tid_agg_rx->reorder_buf[index],
&status, rate);
tid_agg_rx->stored_mpdu_num--;
tid_agg_rx->reorder_buf[index] = NULL;
tid_agg_rx->head_seq_num = seq_inc(tid_agg_rx->head_seq_num);
ieee80211_release_reorder_frame(hw, tid_agg_rx, index);
index = seq_sub(tid_agg_rx->head_seq_num,
tid_agg_rx->ssn) % tid_agg_rx->buf_size;
}
Expand Down

0 comments on commit 0a93aab

Please sign in to comment.