From c75cf5d14ab781baac7c5287334955eee4075d73 Mon Sep 17 00:00:00 2001
From: nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Date: Wed, 7 Sep 2011 06:06:34 +0000
Subject: [PATCH] mac80211: fix an endian issue in BlockAckReq handling

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@28190 3c298f89-4303-0410-b956-a3cf2f4a3e73
---
 .../patches/560-mac80211_defer_bar_tx.patch   | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/package/mac80211/patches/560-mac80211_defer_bar_tx.patch b/package/mac80211/patches/560-mac80211_defer_bar_tx.patch
index 9bf89183e..15f812c6f 100644
--- a/package/mac80211/patches/560-mac80211_defer_bar_tx.patch
+++ b/package/mac80211/patches/560-mac80211_defer_bar_tx.patch
@@ -73,13 +73,26 @@
  /*
   * Use a static threshold for now, best value to be determined
   * by testing ...
-@@ -254,10 +286,13 @@ void ieee80211_tx_status(struct ieee8021
+@@ -246,6 +278,8 @@ void ieee80211_tx_status(struct ieee8021
+ 		}
+ 
+ 		if (!acked && ieee80211_is_back_req(fc)) {
++			u16 control;
++
+ 			/*
+ 			 * BAR failed, let's tear down the BA session as a
+ 			 * last resort as some STAs (Intel 5100 on Windows)
+@@ -253,11 +287,15 @@ void ieee80211_tx_status(struct ieee8021
+ 			 * correctly.
  			 */
  			bar = (struct ieee80211_bar *) skb->data;
- 			if (!(bar->control & IEEE80211_BAR_CTRL_MULTI_TID)) {
+-			if (!(bar->control & IEEE80211_BAR_CTRL_MULTI_TID)) {
+-				tid = (bar->control &
++			control = le16_to_cpu(bar->control);
++			if (!(control & IEEE80211_BAR_CTRL_MULTI_TID)) {
 +				u16 ssn = le16_to_cpu(bar->start_seq_num);
 +
- 				tid = (bar->control &
++				tid = (control &
  				       IEEE80211_BAR_CTRL_TID_INFO_MASK) >>
  				      IEEE80211_BAR_CTRL_TID_INFO_SHIFT;
 -				ieee80211_stop_tx_ba_session(&sta->sta, tid);
-- 
2.20.1