diff options
| author | nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2010-07-11 03:50:46 +0000 | 
|---|---|---|
| committer | nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2010-07-11 03:50:46 +0000 | 
| commit | b03d47c1079d0dba26dfd3179f76eed6576841d0 (patch) | |
| tree | 644acbdd6ddac63ffee535ab141f4382e6047ae2 /package/mac80211/patches/524-ath9k_aggr_status_validate.patch | |
| parent | af2bb2e258876d56a6e5f2452e55c4057b6c09b2 (diff) | |
ath9k: add another batch of stability updates and misc fixes
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@22123 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/mac80211/patches/524-ath9k_aggr_status_validate.patch')
| -rw-r--r-- | package/mac80211/patches/524-ath9k_aggr_status_validate.patch | 51 | 
1 files changed, 51 insertions, 0 deletions
diff --git a/package/mac80211/patches/524-ath9k_aggr_status_validate.patch b/package/mac80211/patches/524-ath9k_aggr_status_validate.patch new file mode 100644 index 000000000..e6ea97e97 --- /dev/null +++ b/package/mac80211/patches/524-ath9k_aggr_status_validate.patch @@ -0,0 +1,51 @@ +--- a/drivers/net/wireless/ath/ath9k/ar9002_mac.c ++++ b/drivers/net/wireless/ath/ath9k/ar9002_mac.c +@@ -287,6 +287,7 @@ static int ar9002_hw_proc_txdesc(struct  + 	ts->ts_shortretry = MS(ads->ds_txstatus1, AR_RTSFailCnt); + 	ts->ts_longretry = MS(ads->ds_txstatus1, AR_DataFailCnt); + 	ts->ts_virtcol = MS(ads->ds_txstatus1, AR_VirtRetryCnt); ++	ts->tid = MS(ads->ds_txstatus9, AR_TxTid); + 	ts->ts_antenna = 0; +  + 	return 0; +--- a/drivers/net/wireless/ath/ath9k/ar9003_mac.h ++++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.h +@@ -33,9 +33,6 @@ + #define AR_TxDescId_S	16 + #define AR_TxPtrChkSum	0x0000ffff +  +-#define AR_TxTid	0xf0000000 +-#define AR_TxTid_S	28 +- + #define AR_LowRxChain	0x00004000 +  + #define AR_Not_Sounding	0x20000000 +--- a/drivers/net/wireless/ath/ath9k/mac.h ++++ b/drivers/net/wireless/ath/ath9k/mac.h +@@ -485,6 +485,9 @@ struct ar5416_desc { + #define AR_TxRSSICombined   0xff000000 + #define AR_TxRSSICombined_S 24 +  ++#define AR_TxTid	0xf0000000 ++#define AR_TxTid_S	28 ++ + #define AR_TxEVM0           ds_txstatus5 + #define AR_TxEVM1           ds_txstatus6 + #define AR_TxEVM2           ds_txstatus7 +--- a/drivers/net/wireless/ath/ath9k/xmit.c ++++ b/drivers/net/wireless/ath/ath9k/xmit.c +@@ -355,6 +355,14 @@ static void ath_tx_complete_aggr(struct  + 	an = (struct ath_node *)sta->drv_priv; + 	tid = ATH_AN_2_TID(an, bf->bf_tidno); +  ++	/* ++	 * The hardware occasionally sends a tx status for the wrong TID. ++	 * In this case, the BA status cannot be considered valid and all ++	 * subframes need to be retransmitted ++	 */ ++	if (bf->bf_tidno != ts->tid) ++		txok = false; ++ + 	isaggr = bf_isaggr(bf); + 	memset(ba, 0, WME_BA_BMP_SIZE >> 3); +   | 
