aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorHelmut Schaa <helmut.schaa@googlemail.com>2011-09-08 08:38:36 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-09-14 13:56:57 -0400
commitaf35323db6a177514ef6c77b961bf9db31648cd9 (patch)
treecedce48d4181199385a4650d66c0e77a3204ee9a /drivers/net
parenta2b1328a23c57fbb9c51e6660a11049c35d151f9 (diff)
rt2x00: Forbid aggregation for STAs not programmed into the hw
If a STA is not known by the hw (i.e. has no WCID assigned) don't allow aggregation since this might mess up tx status reports and we won't be able to distinguish the reports of multiple WCID-less STAs. Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com> Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/wireless/rt2x00/rt2800lib.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index 0e21aaf53bb4..9ff58231abcd 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -4484,8 +4484,19 @@ int rt2800_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
4484 struct ieee80211_sta *sta, u16 tid, u16 *ssn, 4484 struct ieee80211_sta *sta, u16 tid, u16 *ssn,
4485 u8 buf_size) 4485 u8 buf_size)
4486{ 4486{
4487 struct rt2x00_sta *sta_priv = (struct rt2x00_sta *)sta->drv_priv;
4487 int ret = 0; 4488 int ret = 0;
4488 4489
4490 /*
4491 * Don't allow aggregation for stations the hardware isn't aware
4492 * of because tx status reports for frames to an unknown station
4493 * always contain wcid=255 and thus we can't distinguish between
4494 * multiple stations which leads to unwanted situations when the
4495 * hw reorders frames due to aggregation.
4496 */
4497 if (sta_priv->wcid < 0)
4498 return 1;
4499
4489 switch (action) { 4500 switch (action) {
4490 case IEEE80211_AMPDU_RX_START: 4501 case IEEE80211_AMPDU_RX_START:
4491 case IEEE80211_AMPDU_RX_STOP: 4502 case IEEE80211_AMPDU_RX_STOP: