diff options
Diffstat (limited to 'package')
21 files changed, 253 insertions, 909 deletions
diff --git a/package/mac80211/Makefile b/package/mac80211/Makefile index 6b0e9c855..e53123487 100644 --- a/package/mac80211/Makefile +++ b/package/mac80211/Makefile @@ -10,10 +10,10 @@ include $(INCLUDE_DIR)/kernel.mk  PKG_NAME:=mac80211 -PKG_VERSION:=2012-02-23 +PKG_VERSION:=2012-02-27  PKG_RELEASE:=1  PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources -PKG_MD5SUM:=dc01b316954e7c9f2ea50c09bb68138e +PKG_MD5SUM:=ccd51c46813c25090ce657c8b7c67615  PKG_SOURCE:=compat-wireless-$(PKG_VERSION).tar.bz2  PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/compat-wireless-$(PKG_VERSION) diff --git a/package/mac80211/patches/300-pending_work.patch b/package/mac80211/patches/300-pending_work.patch index 219db50c2..25ebbb68c 100644 --- a/package/mac80211/patches/300-pending_work.patch +++ b/package/mac80211/patches/300-pending_work.patch @@ -1,597 +1,163 @@ ---- a/drivers/net/wireless/ath/ath9k/ar9001_initvals.h -+++ b/drivers/net/wireless/ath/ath9k/ar9001_initvals.h -@@ -459,97 +459,6 @@ static const u32 ar5416Common_9100[][2]  - 	{0x0000a3e0, 0x000001ce}, - }; -  --static const u32 ar5416Bank0_9100[][2] = { --	/* Addr      allmodes  */ --	{0x000098b0, 0x1e5795e5}, --	{0x000098e0, 0x02008020}, --}; -- --static const u32 ar5416BB_RfGain_9100[][3] = { --	/* Addr      5G_HT20     5G_HT40   */ --	{0x00009a00, 0x00000000, 0x00000000}, --	{0x00009a04, 0x00000040, 0x00000040}, --	{0x00009a08, 0x00000080, 0x00000080}, --	{0x00009a0c, 0x000001a1, 0x00000141}, --	{0x00009a10, 0x000001e1, 0x00000181}, --	{0x00009a14, 0x00000021, 0x000001c1}, --	{0x00009a18, 0x00000061, 0x00000001}, --	{0x00009a1c, 0x00000168, 0x00000041}, --	{0x00009a20, 0x000001a8, 0x000001a8}, --	{0x00009a24, 0x000001e8, 0x000001e8}, --	{0x00009a28, 0x00000028, 0x00000028}, --	{0x00009a2c, 0x00000068, 0x00000068}, --	{0x00009a30, 0x00000189, 0x000000a8}, --	{0x00009a34, 0x000001c9, 0x00000169}, --	{0x00009a38, 0x00000009, 0x000001a9}, --	{0x00009a3c, 0x00000049, 0x000001e9}, --	{0x00009a40, 0x00000089, 0x00000029}, --	{0x00009a44, 0x00000170, 0x00000069}, --	{0x00009a48, 0x000001b0, 0x00000190}, --	{0x00009a4c, 0x000001f0, 0x000001d0}, --	{0x00009a50, 0x00000030, 0x00000010}, --	{0x00009a54, 0x00000070, 0x00000050}, --	{0x00009a58, 0x00000191, 0x00000090}, --	{0x00009a5c, 0x000001d1, 0x00000151}, --	{0x00009a60, 0x00000011, 0x00000191}, --	{0x00009a64, 0x00000051, 0x000001d1}, --	{0x00009a68, 0x00000091, 0x00000011}, --	{0x00009a6c, 0x000001b8, 0x00000051}, --	{0x00009a70, 0x000001f8, 0x00000198}, --	{0x00009a74, 0x00000038, 0x000001d8}, --	{0x00009a78, 0x00000078, 0x00000018}, --	{0x00009a7c, 0x00000199, 0x00000058}, --	{0x00009a80, 0x000001d9, 0x00000098}, --	{0x00009a84, 0x00000019, 0x00000159}, --	{0x00009a88, 0x00000059, 0x00000199}, --	{0x00009a8c, 0x00000099, 0x000001d9}, --	{0x00009a90, 0x000000d9, 0x00000019}, --	{0x00009a94, 0x000000f9, 0x00000059}, --	{0x00009a98, 0x000000f9, 0x00000099}, --	{0x00009a9c, 0x000000f9, 0x000000d9}, --	{0x00009aa0, 0x000000f9, 0x000000f9}, --	{0x00009aa4, 0x000000f9, 0x000000f9}, --	{0x00009aa8, 0x000000f9, 0x000000f9}, --	{0x00009aac, 0x000000f9, 0x000000f9}, --	{0x00009ab0, 0x000000f9, 0x000000f9}, --	{0x00009ab4, 0x000000f9, 0x000000f9}, --	{0x00009ab8, 0x000000f9, 0x000000f9}, --	{0x00009abc, 0x000000f9, 0x000000f9}, --	{0x00009ac0, 0x000000f9, 0x000000f9}, --	{0x00009ac4, 0x000000f9, 0x000000f9}, --	{0x00009ac8, 0x000000f9, 0x000000f9}, --	{0x00009acc, 0x000000f9, 0x000000f9}, --	{0x00009ad0, 0x000000f9, 0x000000f9}, --	{0x00009ad4, 0x000000f9, 0x000000f9}, --	{0x00009ad8, 0x000000f9, 0x000000f9}, --	{0x00009adc, 0x000000f9, 0x000000f9}, --	{0x00009ae0, 0x000000f9, 0x000000f9}, --	{0x00009ae4, 0x000000f9, 0x000000f9}, --	{0x00009ae8, 0x000000f9, 0x000000f9}, --	{0x00009aec, 0x000000f9, 0x000000f9}, --	{0x00009af0, 0x000000f9, 0x000000f9}, --	{0x00009af4, 0x000000f9, 0x000000f9}, --	{0x00009af8, 0x000000f9, 0x000000f9}, --	{0x00009afc, 0x000000f9, 0x000000f9}, --}; -- --static const u32 ar5416Bank1_9100[][2] = { --	/* Addr      allmodes  */ --	{0x000098b0, 0x02108421}, --	{0x000098ec, 0x00000008}, --}; -- --static const u32 ar5416Bank2_9100[][2] = { --	/* Addr      allmodes  */ --	{0x000098b0, 0x0e73ff17}, --	{0x000098e0, 0x00000420}, --}; -- --static const u32 ar5416Bank3_9100[][3] = { --	/* Addr      5G_HT20     5G_HT40   */ --	{0x000098f0, 0x01400018, 0x01c00018}, --}; +--- a/drivers/net/wireless/ath/ath9k/ar9003_mac.c ++++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.c +@@ -510,7 +510,11 @@ int ath9k_hw_process_rxdesc_edma(struct  + 		 */ + 		if (rxsp->status11 & AR_CRCErr) + 			rxs->rs_status |= ATH9K_RXERR_CRC; +-		else if (rxsp->status11 & AR_PHYErr) { ++		else if (rxsp->status11 & AR_DecryptCRCErr) ++			rxs->rs_status |= ATH9K_RXERR_DECRYPT; ++		else if (rxsp->status11 & AR_MichaelErr) ++			rxs->rs_status |= ATH9K_RXERR_MIC; ++		if (rxsp->status11 & AR_PHYErr) { + 			phyerr = MS(rxsp->status11, AR_PHYErrCode); + 			/* + 			 * If we reach a point here where AR_PostDelimCRCErr is +@@ -532,11 +536,7 @@ int ath9k_hw_process_rxdesc_edma(struct  + 				rxs->rs_status |= ATH9K_RXERR_PHY; + 				rxs->rs_phyerr = phyerr; + 			}  - - static const u32 ar5416Bank6_9100[][3] = { - 	/* Addr      5G_HT20     5G_HT40   */ - 	{0x0000989c, 0x00000000, 0x00000000}, -@@ -624,13 +533,6 @@ static const u32 ar5416Bank6TPC_9100[][3 - 	{0x000098d0, 0x0000000f, 0x0010000f}, - }; +-		} else if (rxsp->status11 & AR_DecryptCRCErr) +-			rxs->rs_status |= ATH9K_RXERR_DECRYPT; +-		else if (rxsp->status11 & AR_MichaelErr) +-			rxs->rs_status |= ATH9K_RXERR_MIC; ++		}; + 	} --static const u32 ar5416Bank7_9100[][2] = { --	/* Addr      allmodes  */ --	{0x0000989c, 0x00000500}, --	{0x0000989c, 0x00000800}, --	{0x000098cc, 0x0000000e}, --}; -- - static const u32 ar5416Addac_9100[][2] = { - 	/* Addr      allmodes  */ - 	{0x0000989c, 0x00000000}, -@@ -1113,178 +1015,6 @@ static const u32 ar5416Common_9160[][2]  - 	{0x0000a3e0, 0x000001ce}, - }; + 	if (rxsp->status11 & AR_KeyMiss) +--- a/drivers/net/wireless/ath/carl9170/tx.c ++++ b/drivers/net/wireless/ath/carl9170/tx.c +@@ -1236,6 +1236,7 @@ static bool carl9170_tx_ps_drop(struct a + { + 	struct ieee80211_sta *sta; + 	struct carl9170_sta_info *sta_info; ++	struct ieee80211_tx_info *tx_info; --static const u32 ar5416Bank0_9160[][2] = { --	/* Addr      allmodes  */ --	{0x000098b0, 0x1e5795e5}, --	{0x000098e0, 0x02008020}, --}; -- --static const u32 ar5416BB_RfGain_9160[][3] = { --	/* Addr      5G_HT20     5G_HT40   */ --	{0x00009a00, 0x00000000, 0x00000000}, --	{0x00009a04, 0x00000040, 0x00000040}, --	{0x00009a08, 0x00000080, 0x00000080}, --	{0x00009a0c, 0x000001a1, 0x00000141}, --	{0x00009a10, 0x000001e1, 0x00000181}, --	{0x00009a14, 0x00000021, 0x000001c1}, --	{0x00009a18, 0x00000061, 0x00000001}, --	{0x00009a1c, 0x00000168, 0x00000041}, --	{0x00009a20, 0x000001a8, 0x000001a8}, --	{0x00009a24, 0x000001e8, 0x000001e8}, --	{0x00009a28, 0x00000028, 0x00000028}, --	{0x00009a2c, 0x00000068, 0x00000068}, --	{0x00009a30, 0x00000189, 0x000000a8}, --	{0x00009a34, 0x000001c9, 0x00000169}, --	{0x00009a38, 0x00000009, 0x000001a9}, --	{0x00009a3c, 0x00000049, 0x000001e9}, --	{0x00009a40, 0x00000089, 0x00000029}, --	{0x00009a44, 0x00000170, 0x00000069}, --	{0x00009a48, 0x000001b0, 0x00000190}, --	{0x00009a4c, 0x000001f0, 0x000001d0}, --	{0x00009a50, 0x00000030, 0x00000010}, --	{0x00009a54, 0x00000070, 0x00000050}, --	{0x00009a58, 0x00000191, 0x00000090}, --	{0x00009a5c, 0x000001d1, 0x00000151}, --	{0x00009a60, 0x00000011, 0x00000191}, --	{0x00009a64, 0x00000051, 0x000001d1}, --	{0x00009a68, 0x00000091, 0x00000011}, --	{0x00009a6c, 0x000001b8, 0x00000051}, --	{0x00009a70, 0x000001f8, 0x00000198}, --	{0x00009a74, 0x00000038, 0x000001d8}, --	{0x00009a78, 0x00000078, 0x00000018}, --	{0x00009a7c, 0x00000199, 0x00000058}, --	{0x00009a80, 0x000001d9, 0x00000098}, --	{0x00009a84, 0x00000019, 0x00000159}, --	{0x00009a88, 0x00000059, 0x00000199}, --	{0x00009a8c, 0x00000099, 0x000001d9}, --	{0x00009a90, 0x000000d9, 0x00000019}, --	{0x00009a94, 0x000000f9, 0x00000059}, --	{0x00009a98, 0x000000f9, 0x00000099}, --	{0x00009a9c, 0x000000f9, 0x000000d9}, --	{0x00009aa0, 0x000000f9, 0x000000f9}, --	{0x00009aa4, 0x000000f9, 0x000000f9}, --	{0x00009aa8, 0x000000f9, 0x000000f9}, --	{0x00009aac, 0x000000f9, 0x000000f9}, --	{0x00009ab0, 0x000000f9, 0x000000f9}, --	{0x00009ab4, 0x000000f9, 0x000000f9}, --	{0x00009ab8, 0x000000f9, 0x000000f9}, --	{0x00009abc, 0x000000f9, 0x000000f9}, --	{0x00009ac0, 0x000000f9, 0x000000f9}, --	{0x00009ac4, 0x000000f9, 0x000000f9}, --	{0x00009ac8, 0x000000f9, 0x000000f9}, --	{0x00009acc, 0x000000f9, 0x000000f9}, --	{0x00009ad0, 0x000000f9, 0x000000f9}, --	{0x00009ad4, 0x000000f9, 0x000000f9}, --	{0x00009ad8, 0x000000f9, 0x000000f9}, --	{0x00009adc, 0x000000f9, 0x000000f9}, --	{0x00009ae0, 0x000000f9, 0x000000f9}, --	{0x00009ae4, 0x000000f9, 0x000000f9}, --	{0x00009ae8, 0x000000f9, 0x000000f9}, --	{0x00009aec, 0x000000f9, 0x000000f9}, --	{0x00009af0, 0x000000f9, 0x000000f9}, --	{0x00009af4, 0x000000f9, 0x000000f9}, --	{0x00009af8, 0x000000f9, 0x000000f9}, --	{0x00009afc, 0x000000f9, 0x000000f9}, --}; -- --static const u32 ar5416Bank1_9160[][2] = { --	/* Addr      allmodes  */ --	{0x000098b0, 0x02108421}, --	{0x000098ec, 0x00000008}, --}; -- --static const u32 ar5416Bank2_9160[][2] = { --	/* Addr      allmodes  */ --	{0x000098b0, 0x0e73ff17}, --	{0x000098e0, 0x00000420}, --}; -- --static const u32 ar5416Bank3_9160[][3] = { --	/* Addr      5G_HT20     5G_HT40   */ --	{0x000098f0, 0x01400018, 0x01c00018}, --}; -- --static const u32 ar5416Bank6_9160[][3] = { --	/* Addr      5G_HT20     5G_HT40   */ --	{0x0000989c, 0x00000000, 0x00000000}, --	{0x0000989c, 0x00000000, 0x00000000}, --	{0x0000989c, 0x00000000, 0x00000000}, --	{0x0000989c, 0x00e00000, 0x00e00000}, --	{0x0000989c, 0x005e0000, 0x005e0000}, --	{0x0000989c, 0x00120000, 0x00120000}, --	{0x0000989c, 0x00620000, 0x00620000}, --	{0x0000989c, 0x00020000, 0x00020000}, --	{0x0000989c, 0x00ff0000, 0x00ff0000}, --	{0x0000989c, 0x00ff0000, 0x00ff0000}, --	{0x0000989c, 0x00ff0000, 0x00ff0000}, --	{0x0000989c, 0x40ff0000, 0x40ff0000}, --	{0x0000989c, 0x005f0000, 0x005f0000}, --	{0x0000989c, 0x00870000, 0x00870000}, --	{0x0000989c, 0x00f90000, 0x00f90000}, --	{0x0000989c, 0x007b0000, 0x007b0000}, --	{0x0000989c, 0x00ff0000, 0x00ff0000}, --	{0x0000989c, 0x00f50000, 0x00f50000}, --	{0x0000989c, 0x00dc0000, 0x00dc0000}, --	{0x0000989c, 0x00110000, 0x00110000}, --	{0x0000989c, 0x006100a8, 0x006100a8}, --	{0x0000989c, 0x004210a2, 0x004210a2}, --	{0x0000989c, 0x0014008f, 0x0014008f}, --	{0x0000989c, 0x00c40003, 0x00c40003}, --	{0x0000989c, 0x003000f2, 0x003000f2}, --	{0x0000989c, 0x00440016, 0x00440016}, --	{0x0000989c, 0x00410040, 0x00410040}, --	{0x0000989c, 0x0001805e, 0x0001805e}, --	{0x0000989c, 0x0000c0ab, 0x0000c0ab}, --	{0x0000989c, 0x000000f1, 0x000000f1}, --	{0x0000989c, 0x00002081, 0x00002081}, --	{0x0000989c, 0x000000d4, 0x000000d4}, --	{0x000098d0, 0x0000000f, 0x0010000f}, --}; -- --static const u32 ar5416Bank6TPC_9160[][3] = { --	/* Addr      5G_HT20     5G_HT40   */ --	{0x0000989c, 0x00000000, 0x00000000}, --	{0x0000989c, 0x00000000, 0x00000000}, --	{0x0000989c, 0x00000000, 0x00000000}, --	{0x0000989c, 0x00e00000, 0x00e00000}, --	{0x0000989c, 0x005e0000, 0x005e0000}, --	{0x0000989c, 0x00120000, 0x00120000}, --	{0x0000989c, 0x00620000, 0x00620000}, --	{0x0000989c, 0x00020000, 0x00020000}, --	{0x0000989c, 0x00ff0000, 0x00ff0000}, --	{0x0000989c, 0x00ff0000, 0x00ff0000}, --	{0x0000989c, 0x00ff0000, 0x00ff0000}, --	{0x0000989c, 0x40ff0000, 0x40ff0000}, --	{0x0000989c, 0x005f0000, 0x005f0000}, --	{0x0000989c, 0x00870000, 0x00870000}, --	{0x0000989c, 0x00f90000, 0x00f90000}, --	{0x0000989c, 0x007b0000, 0x007b0000}, --	{0x0000989c, 0x00ff0000, 0x00ff0000}, --	{0x0000989c, 0x00f50000, 0x00f50000}, --	{0x0000989c, 0x00dc0000, 0x00dc0000}, --	{0x0000989c, 0x00110000, 0x00110000}, --	{0x0000989c, 0x006100a8, 0x006100a8}, --	{0x0000989c, 0x00423022, 0x00423022}, --	{0x0000989c, 0x2014008f, 0x2014008f}, --	{0x0000989c, 0x00c40002, 0x00c40002}, --	{0x0000989c, 0x003000f2, 0x003000f2}, --	{0x0000989c, 0x00440016, 0x00440016}, --	{0x0000989c, 0x00410040, 0x00410040}, --	{0x0000989c, 0x0001805e, 0x0001805e}, --	{0x0000989c, 0x0000c0ab, 0x0000c0ab}, --	{0x0000989c, 0x000000e1, 0x000000e1}, --	{0x0000989c, 0x00007080, 0x00007080}, --	{0x0000989c, 0x000000d4, 0x000000d4}, --	{0x000098d0, 0x0000000f, 0x0010000f}, --}; -- --static const u32 ar5416Bank7_9160[][2] = { --	/* Addr      allmodes  */ --	{0x0000989c, 0x00000500}, --	{0x0000989c, 0x00000800}, --	{0x000098cc, 0x0000000e}, --}; -- - static const u32 ar5416Addac_9160[][2] = { - 	/* Addr      allmodes  */ - 	{0x0000989c, 0x00000000}, ---- a/drivers/net/wireless/ath/ath9k/ar9002_hw.c -+++ b/drivers/net/wireless/ath/ath9k/ar9002_hw.c -@@ -35,11 +35,11 @@ static void ar9002_hw_init_mode_regs(str - 		INIT_INI_ARRAY(&ah->iniCommon, ar9271Common_9271, - 			       ARRAY_SIZE(ar9271Common_9271), 2); - 		INIT_INI_ARRAY(&ah->iniCommon_normal_cck_fir_coeff_9271, --			       ar9271Common_normal_cck_fir_coeff_9271, --			       ARRAY_SIZE(ar9271Common_normal_cck_fir_coeff_9271), 2); -+			       ar9287Common_normal_cck_fir_coeff_9287_1_1, -+			       ARRAY_SIZE(ar9287Common_normal_cck_fir_coeff_9287_1_1), 2); - 		INIT_INI_ARRAY(&ah->iniCommon_japan_2484_cck_fir_coeff_9271, --			       ar9271Common_japan_2484_cck_fir_coeff_9271, --			       ARRAY_SIZE(ar9271Common_japan_2484_cck_fir_coeff_9271), 2); -+			       ar9287Common_japan_2484_cck_fir_coeff_9287_1_1, -+			       ARRAY_SIZE(ar9287Common_japan_2484_cck_fir_coeff_9287_1_1), 2); - 		INIT_INI_ARRAY(&ah->iniModes_9271_1_0_only, - 			       ar9271Modes_9271_1_0_only, - 			       ARRAY_SIZE(ar9271Modes_9271_1_0_only), 5); -@@ -54,53 +54,31 @@ static void ar9002_hw_init_mode_regs(str - 		return; - 	} + 	rcu_read_lock(); + 	sta = __carl9170_get_tx_sta(ar, skb); +@@ -1243,12 +1244,13 @@ static bool carl9170_tx_ps_drop(struct a + 		goto out_rcu; -+	if (ah->config.pcie_clock_req) -+		INIT_INI_ARRAY(&ah->iniPcieSerdes, -+			   ar9280PciePhy_clkreq_off_L1_9280, -+			   ARRAY_SIZE(ar9280PciePhy_clkreq_off_L1_9280), 2); -+	else -+		INIT_INI_ARRAY(&ah->iniPcieSerdes, -+			   ar9280PciePhy_clkreq_always_on_L1_9280, -+			   ARRAY_SIZE(ar9280PciePhy_clkreq_always_on_L1_9280), 2); -+ - 	if (AR_SREV_9287_11_OR_LATER(ah)) { - 		INIT_INI_ARRAY(&ah->iniModes, ar9287Modes_9287_1_1, - 				ARRAY_SIZE(ar9287Modes_9287_1_1), 5); - 		INIT_INI_ARRAY(&ah->iniCommon, ar9287Common_9287_1_1, - 				ARRAY_SIZE(ar9287Common_9287_1_1), 2); --		if (ah->config.pcie_clock_req) --			INIT_INI_ARRAY(&ah->iniPcieSerdes, --			ar9287PciePhy_clkreq_off_L1_9287_1_1, --			ARRAY_SIZE(ar9287PciePhy_clkreq_off_L1_9287_1_1), 2); --		else --			INIT_INI_ARRAY(&ah->iniPcieSerdes, --			ar9287PciePhy_clkreq_always_on_L1_9287_1_1, --			ARRAY_SIZE(ar9287PciePhy_clkreq_always_on_L1_9287_1_1), --					2); - 	} else if (AR_SREV_9285_12_OR_LATER(ah)) { -- -- - 		INIT_INI_ARRAY(&ah->iniModes, ar9285Modes_9285_1_2, - 			       ARRAY_SIZE(ar9285Modes_9285_1_2), 5); - 		INIT_INI_ARRAY(&ah->iniCommon, ar9285Common_9285_1_2, - 			       ARRAY_SIZE(ar9285Common_9285_1_2), 2); -- --		if (ah->config.pcie_clock_req) { --			INIT_INI_ARRAY(&ah->iniPcieSerdes, --			ar9285PciePhy_clkreq_off_L1_9285_1_2, --			ARRAY_SIZE(ar9285PciePhy_clkreq_off_L1_9285_1_2), 2); --		} else { --			INIT_INI_ARRAY(&ah->iniPcieSerdes, --			ar9285PciePhy_clkreq_always_on_L1_9285_1_2, --			ARRAY_SIZE(ar9285PciePhy_clkreq_always_on_L1_9285_1_2), --				  2); --		} - 	} else if (AR_SREV_9280_20_OR_LATER(ah)) { - 		INIT_INI_ARRAY(&ah->iniModes, ar9280Modes_9280_2, - 			       ARRAY_SIZE(ar9280Modes_9280_2), 5); - 		INIT_INI_ARRAY(&ah->iniCommon, ar9280Common_9280_2, - 			       ARRAY_SIZE(ar9280Common_9280_2), 2); + 	sta_info = (void *) sta->drv_priv; +-	if (unlikely(sta_info->sleeping)) { +-		struct ieee80211_tx_info *tx_info; ++	tx_info = IEEE80211_SKB_CB(skb); --		if (ah->config.pcie_clock_req) { --			INIT_INI_ARRAY(&ah->iniPcieSerdes, --			       ar9280PciePhy_clkreq_off_L1_9280, --			       ARRAY_SIZE(ar9280PciePhy_clkreq_off_L1_9280), 2); --		} else { --			INIT_INI_ARRAY(&ah->iniPcieSerdes, --			       ar9280PciePhy_clkreq_always_on_L1_9280, --			       ARRAY_SIZE(ar9280PciePhy_clkreq_always_on_L1_9280), 2); --		} - 		INIT_INI_ARRAY(&ah->iniModesAdditional, - 			       ar9280Modes_fast_clock_9280_2, - 			       ARRAY_SIZE(ar9280Modes_fast_clock_9280_2), 3); -@@ -109,22 +87,6 @@ static void ar9002_hw_init_mode_regs(str - 			       ARRAY_SIZE(ar5416Modes_9160), 5); - 		INIT_INI_ARRAY(&ah->iniCommon, ar5416Common_9160, - 			       ARRAY_SIZE(ar5416Common_9160), 2); --		INIT_INI_ARRAY(&ah->iniBank0, ar5416Bank0_9160, --			       ARRAY_SIZE(ar5416Bank0_9160), 2); --		INIT_INI_ARRAY(&ah->iniBB_RfGain, ar5416BB_RfGain_9160, --			       ARRAY_SIZE(ar5416BB_RfGain_9160), 3); --		INIT_INI_ARRAY(&ah->iniBank1, ar5416Bank1_9160, --			       ARRAY_SIZE(ar5416Bank1_9160), 2); --		INIT_INI_ARRAY(&ah->iniBank2, ar5416Bank2_9160, --			       ARRAY_SIZE(ar5416Bank2_9160), 2); --		INIT_INI_ARRAY(&ah->iniBank3, ar5416Bank3_9160, --			       ARRAY_SIZE(ar5416Bank3_9160), 3); --		INIT_INI_ARRAY(&ah->iniBank6, ar5416Bank6_9160, --			       ARRAY_SIZE(ar5416Bank6_9160), 3); --		INIT_INI_ARRAY(&ah->iniBank6TPC, ar5416Bank6TPC_9160, --			       ARRAY_SIZE(ar5416Bank6TPC_9160), 3); --		INIT_INI_ARRAY(&ah->iniBank7, ar5416Bank7_9160, --			       ARRAY_SIZE(ar5416Bank7_9160), 2); - 		if (AR_SREV_9160_11(ah)) { - 			INIT_INI_ARRAY(&ah->iniAddac, - 				       ar5416Addac_9160_1_1, -@@ -138,22 +100,8 @@ static void ar9002_hw_init_mode_regs(str - 			       ARRAY_SIZE(ar5416Modes_9100), 5); - 		INIT_INI_ARRAY(&ah->iniCommon, ar5416Common_9100, - 			       ARRAY_SIZE(ar5416Common_9100), 2); --		INIT_INI_ARRAY(&ah->iniBank0, ar5416Bank0_9100, --			       ARRAY_SIZE(ar5416Bank0_9100), 2); --		INIT_INI_ARRAY(&ah->iniBB_RfGain, ar5416BB_RfGain_9100, --			       ARRAY_SIZE(ar5416BB_RfGain_9100), 3); --		INIT_INI_ARRAY(&ah->iniBank1, ar5416Bank1_9100, --			       ARRAY_SIZE(ar5416Bank1_9100), 2); --		INIT_INI_ARRAY(&ah->iniBank2, ar5416Bank2_9100, --			       ARRAY_SIZE(ar5416Bank2_9100), 2); --		INIT_INI_ARRAY(&ah->iniBank3, ar5416Bank3_9100, --			       ARRAY_SIZE(ar5416Bank3_9100), 3); - 		INIT_INI_ARRAY(&ah->iniBank6, ar5416Bank6_9100, - 			       ARRAY_SIZE(ar5416Bank6_9100), 3); --		INIT_INI_ARRAY(&ah->iniBank6TPC, ar5416Bank6TPC_9100, --			       ARRAY_SIZE(ar5416Bank6TPC_9100), 3); --		INIT_INI_ARRAY(&ah->iniBank7, ar5416Bank7_9100, --			       ARRAY_SIZE(ar5416Bank7_9100), 2); - 		INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac_9100, - 			       ARRAY_SIZE(ar5416Addac_9100), 2); - 	} else { -@@ -161,24 +109,37 @@ static void ar9002_hw_init_mode_regs(str - 			       ARRAY_SIZE(ar5416Modes), 5); - 		INIT_INI_ARRAY(&ah->iniCommon, ar5416Common, - 			       ARRAY_SIZE(ar5416Common), 2); --		INIT_INI_ARRAY(&ah->iniBank0, ar5416Bank0, --			       ARRAY_SIZE(ar5416Bank0), 2); -+		INIT_INI_ARRAY(&ah->iniBank6TPC, ar5416Bank6TPC, -+			       ARRAY_SIZE(ar5416Bank6TPC), 3); -+		INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac, -+			       ARRAY_SIZE(ar5416Addac), 2); -+	} -+ -+	if (!AR_SREV_9280_20_OR_LATER(ah)) { -+		/* Common for AR5416, AR913x, AR9160 */ - 		INIT_INI_ARRAY(&ah->iniBB_RfGain, ar5416BB_RfGain, - 			       ARRAY_SIZE(ar5416BB_RfGain), 3); -+ -+		INIT_INI_ARRAY(&ah->iniBank0, ar5416Bank0, -+			       ARRAY_SIZE(ar5416Bank0), 2); - 		INIT_INI_ARRAY(&ah->iniBank1, ar5416Bank1, - 			       ARRAY_SIZE(ar5416Bank1), 2); - 		INIT_INI_ARRAY(&ah->iniBank2, ar5416Bank2, - 			       ARRAY_SIZE(ar5416Bank2), 2); - 		INIT_INI_ARRAY(&ah->iniBank3, ar5416Bank3, - 			       ARRAY_SIZE(ar5416Bank3), 3); --		INIT_INI_ARRAY(&ah->iniBank6, ar5416Bank6, --			       ARRAY_SIZE(ar5416Bank6), 3); --		INIT_INI_ARRAY(&ah->iniBank6TPC, ar5416Bank6TPC, --			       ARRAY_SIZE(ar5416Bank6TPC), 3); - 		INIT_INI_ARRAY(&ah->iniBank7, ar5416Bank7, - 			       ARRAY_SIZE(ar5416Bank7), 2); --		INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac, --			       ARRAY_SIZE(ar5416Addac), 2); -+ -+		/* Common for AR5416, AR9160 */ -+		if (!AR_SREV_9100(ah)) -+			INIT_INI_ARRAY(&ah->iniBank6, ar5416Bank6, -+				       ARRAY_SIZE(ar5416Bank6), 3); -+ -+		/* Common for AR913x, AR9160 */ -+		if (!AR_SREV_5416(ah)) -+			INIT_INI_ARRAY(&ah->iniBank6TPC, ar5416Bank6TPC_9100, -+				       ARRAY_SIZE(ar5416Bank6TPC_9100), 3); - 	} ++	if (unlikely(sta_info->sleeping) && ++	    !(tx_info->flags & (IEEE80211_TX_CTL_NO_PS_BUFFER | ++				IEEE80211_TX_CTL_CLEAR_PS_FILT))) { + 		rcu_read_unlock(); - 	/* iniAddac needs to be modified for these chips */ ---- a/drivers/net/wireless/ath/ath9k/ar9002_initvals.h -+++ b/drivers/net/wireless/ath/ath9k/ar9002_initvals.h -@@ -925,34 +925,6 @@ static const u32 ar9280PciePhy_clkreq_al - 	{0x00004044, 0x00000000}, - }; +-		tx_info = IEEE80211_SKB_CB(skb); + 		if (tx_info->flags & IEEE80211_TX_CTL_AMPDU) + 			atomic_dec(&ar->tx_ampdu_upload); --static const u32 ar9285PciePhy_clkreq_always_on_L1_9285[][2] = { --	/* Addr      allmodes  */ --	{0x00004040, 0x9248fd00}, --	{0x00004040, 0x24924924}, --	{0x00004040, 0xa8000019}, --	{0x00004040, 0x13160820}, --	{0x00004040, 0xe5980560}, --	{0x00004040, 0xc01dcffd}, --	{0x00004040, 0x1aaabe41}, --	{0x00004040, 0xbe105554}, --	{0x00004040, 0x00043007}, --	{0x00004044, 0x00000000}, --}; -- --static const u32 ar9285PciePhy_clkreq_off_L1_9285[][2] = { --	/* Addr      allmodes  */ --	{0x00004040, 0x9248fd00}, --	{0x00004040, 0x24924924}, --	{0x00004040, 0xa8000019}, --	{0x00004040, 0x13160820}, --	{0x00004040, 0xe5980560}, --	{0x00004040, 0xc01dcffc}, --	{0x00004040, 0x1aaabe41}, --	{0x00004040, 0xbe105554}, --	{0x00004040, 0x00043007}, --	{0x00004044, 0x00000000}, --}; -- - static const u32 ar9285Modes_9285_1_2[][5] = { - 	/* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */ - 	{0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160}, -@@ -1743,34 +1715,6 @@ static const u32 ar9285Modes_XE2_0_high_ - 	{0x0000a3e0, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7}, - }; +--- a/drivers/net/wireless/iwlegacy/4965-mac.c ++++ b/drivers/net/wireless/iwlegacy/4965-mac.c +@@ -1694,7 +1694,7 @@ il4965_tx_skb(struct il_priv *il, struct + 		sta_priv = (void *)sta->drv_priv; --static const u32 ar9285PciePhy_clkreq_always_on_L1_9285_1_2[][2] = { --	/* Addr      allmodes  */ --	{0x00004040, 0x9248fd00}, --	{0x00004040, 0x24924924}, --	{0x00004040, 0xa8000019}, --	{0x00004040, 0x13160820}, --	{0x00004040, 0xe5980560}, --	{0x00004040, 0xc01dcffd}, --	{0x00004040, 0x1aaabe41}, --	{0x00004040, 0xbe105554}, --	{0x00004040, 0x00043007}, --	{0x00004044, 0x00000000}, --}; -- --static const u32 ar9285PciePhy_clkreq_off_L1_9285_1_2[][2] = { --	/* Addr      allmodes  */ --	{0x00004040, 0x9248fd00}, --	{0x00004040, 0x24924924}, --	{0x00004040, 0xa8000019}, --	{0x00004040, 0x13160820}, --	{0x00004040, 0xe5980560}, --	{0x00004040, 0xc01dcffc}, --	{0x00004040, 0x1aaabe41}, --	{0x00004040, 0xbe105554}, --	{0x00004040, 0x00043007}, --	{0x00004044, 0x00000000}, --}; -- - static const u32 ar9287Modes_9287_1_1[][5] = { - 	/* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */ - 	{0x00001030, 0x00000000, 0x00000000, 0x000002c0, 0x00000160}, -@@ -2512,34 +2456,6 @@ static const u32 ar9287Modes_rx_gain_928 - 	{0x0000a848, 0x00000000, 0x00000000, 0x00001067, 0x00001067}, - }; + 	if (sta_priv && sta_priv->asleep && +-	    (info->flags & IEEE80211_TX_CTL_POLL_RESPONSE)) { ++	    (info->flags & IEEE80211_TX_CTL_NO_PS_BUFFER)) { + 		/* + 		 * This sends an asynchronous command to the device, + 		 * but we can rely on it being processed before the +--- a/drivers/net/wireless/iwlwifi/iwl-agn-tx.c ++++ b/drivers/net/wireless/iwlwifi/iwl-agn-tx.c +@@ -322,7 +322,7 @@ int iwlagn_tx_skb(struct iwl_priv *priv, + 		sta_priv = (void *)info->control.sta->drv_priv; --static const u32 ar9287PciePhy_clkreq_always_on_L1_9287_1_1[][2] = { --	/* Addr      allmodes  */ --	{0x00004040, 0x9248fd00}, --	{0x00004040, 0x24924924}, --	{0x00004040, 0xa8000019}, --	{0x00004040, 0x13160820}, --	{0x00004040, 0xe5980560}, --	{0x00004040, 0xc01dcffd}, --	{0x00004040, 0x1aaabe41}, --	{0x00004040, 0xbe105554}, --	{0x00004040, 0x00043007}, --	{0x00004044, 0x00000000}, --}; -- --static const u32 ar9287PciePhy_clkreq_off_L1_9287_1_1[][2] = { --	/* Addr      allmodes  */ --	{0x00004040, 0x9248fd00}, --	{0x00004040, 0x24924924}, --	{0x00004040, 0xa8000019}, --	{0x00004040, 0x13160820}, --	{0x00004040, 0xe5980560}, --	{0x00004040, 0xc01dcffc}, --	{0x00004040, 0x1aaabe41}, --	{0x00004040, 0xbe105554}, --	{0x00004040, 0x00043007}, --	{0x00004044, 0x00000000}, --}; -- - static const u32 ar9271Modes_9271[][5] = { - 	/* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */ - 	{0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160}, -@@ -3176,20 +3092,6 @@ static const u32 ar9271Common_9271[][2]  - 	{0x0000d384, 0xf3307ff0}, - }; + 	if (sta_priv && sta_priv->asleep && +-	    (info->flags & IEEE80211_TX_CTL_POLL_RESPONSE)) { ++	    (info->flags & IEEE80211_TX_CTL_NO_PS_BUFFER)) { + 		/* + 		 * This sends an asynchronous command to the device, + 		 * but we can rely on it being processed before the +@@ -331,6 +331,10 @@ int iwlagn_tx_skb(struct iwl_priv *priv, + 		 * counter. + 		 * For now set the counter to just 1 since we do not + 		 * support uAPSD yet. ++		 * ++		 * FIXME: If we get two non-bufferable frames one ++		 * after the other, we might only send out one of ++		 * them because this is racy. + 		 */ + 		iwl_sta_modify_sleep_tx_count(priv, sta_id, 1); + 	} +--- a/drivers/net/wireless/p54/txrx.c ++++ b/drivers/net/wireless/p54/txrx.c +@@ -690,7 +690,7 @@ static void p54_tx_80211_header(struct p + 	if (!(info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ)) + 		*flags |= P54_HDR_FLAG_DATA_OUT_SEQNR; --static const u32 ar9271Common_normal_cck_fir_coeff_9271[][2] = { --	/* Addr      allmodes  */ --	{0x0000a1f4, 0x00fffeff}, --	{0x0000a1f8, 0x00f5f9ff}, --	{0x0000a1fc, 0xb79f6427}, --}; -- --static const u32 ar9271Common_japan_2484_cck_fir_coeff_9271[][2] = { --	/* Addr      allmodes  */ --	{0x0000a1f4, 0x00000000}, --	{0x0000a1f8, 0xefff0301}, --	{0x0000a1fc, 0xca9228ee}, --}; -- - static const u32 ar9271Modes_9271_1_0_only[][5] = { - 	/* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */ - 	{0x00009910, 0x30002311, 0x30002311, 0x30002311, 0x30002311}, +-	if (info->flags & IEEE80211_TX_CTL_POLL_RESPONSE) ++	if (info->flags & IEEE80211_TX_CTL_NO_PS_BUFFER) + 		*flags |= P54_HDR_FLAG_DATA_OUT_NOCANCEL; +  + 	if (info->flags & IEEE80211_TX_CTL_CLEAR_PS_FILT) +--- a/include/net/mac80211.h ++++ b/include/net/mac80211.h +@@ -341,9 +341,9 @@ struct ieee80211_bss_conf { +  *	used to indicate that a frame was already retried due to PS +  * @IEEE80211_TX_INTFL_DONT_ENCRYPT: completely internal to mac80211, +  *	used to indicate frame should not be encrypted +- * @IEEE80211_TX_CTL_POLL_RESPONSE: This frame is a response to a poll +- *	frame (PS-Poll or uAPSD) and should be sent although the station +- *	is in powersave mode. ++ * @IEEE80211_TX_CTL_NO_PS_BUFFER: This frame is a response to a poll ++ *	frame (PS-Poll or uAPSD) or a non-bufferable MMPDU and must ++ *	be sent although the station is in powersave mode. +  * @IEEE80211_TX_CTL_MORE_FRAMES: More frames will be passed to the +  *	transmit function after the current frame, this can be used +  *	by drivers to kick the DMA queue only if unset or when the +@@ -399,7 +399,7 @@ enum mac80211_tx_control_flags { + 	IEEE80211_TX_INTFL_NEED_TXPROCESSING	= BIT(14), + 	IEEE80211_TX_INTFL_RETRIED		= BIT(15), + 	IEEE80211_TX_INTFL_DONT_ENCRYPT		= BIT(16), +-	IEEE80211_TX_CTL_POLL_RESPONSE		= BIT(17), ++	IEEE80211_TX_CTL_NO_PS_BUFFER		= BIT(17), + 	IEEE80211_TX_CTL_MORE_FRAMES		= BIT(18), + 	IEEE80211_TX_INTFL_RETRANSMISSION	= BIT(19), + 	/* hole at 20, use later */ +@@ -425,7 +425,7 @@ enum mac80211_tx_control_flags { + 	IEEE80211_TX_CTL_SEND_AFTER_DTIM | IEEE80211_TX_CTL_AMPDU |	      \ + 	IEEE80211_TX_STAT_TX_FILTERED |	IEEE80211_TX_STAT_ACK |		      \ + 	IEEE80211_TX_STAT_AMPDU | IEEE80211_TX_STAT_AMPDU_NO_BACK |	      \ +-	IEEE80211_TX_CTL_RATE_CTRL_PROBE | IEEE80211_TX_CTL_POLL_RESPONSE |   \ ++	IEEE80211_TX_CTL_RATE_CTRL_PROBE | IEEE80211_TX_CTL_NO_PS_BUFFER |    \ + 	IEEE80211_TX_CTL_MORE_FRAMES | IEEE80211_TX_CTL_LDPC |		      \ + 	IEEE80211_TX_CTL_STBC | IEEE80211_TX_STATUS_EOSP) +  +@@ -1634,7 +1634,7 @@ void ieee80211_free_txskb(struct ieee802 +  * the station sends a PS-Poll or a uAPSD trigger frame, mac80211 +  * will inform the driver of this with the @allow_buffered_frames +  * callback; this callback is optional. mac80211 will then transmit +- * the frames as usual and set the %IEEE80211_TX_CTL_POLL_RESPONSE ++ * the frames as usual and set the %IEEE80211_TX_CTL_NO_PS_BUFFER +  * on each frame. The last frame in the service period (or the only +  * response to a PS-Poll) also has %IEEE80211_TX_STATUS_EOSP set to +  * indicate that it ends the service period; as this frame must have +@@ -1642,6 +1642,9 @@ void ieee80211_free_txskb(struct ieee802 +  * When TX status is reported for this frame, the service period is +  * marked has having ended and a new one can be started by the peer. +  * ++ * Additionally, non-bufferable MMPDUs can also be transmitted by ++ * mac80211 with the %IEEE80211_TX_CTL_NO_PS_BUFFER set in them. ++ * +  * Another race condition can happen on some devices like iwlwifi +  * when there are frames queued for the station and it wakes up +  * or polls; the frames that are already queued could end up being +@@ -2140,7 +2143,7 @@ enum ieee80211_frame_release_type { +  * @allow_buffered_frames: Prepare device to allow the given number of frames +  *	to go out to the given station. The frames will be sent by mac80211 +  *	via the usual TX path after this call. The TX information for frames +- *	released will also have the %IEEE80211_TX_CTL_POLL_RESPONSE flag set ++ *	released will also have the %IEEE80211_TX_CTL_NO_PS_BUFFER flag set +  *	and the last one will also have %IEEE80211_TX_STATUS_EOSP set. In case +  *	frames from multiple TIDs are released and the driver might reorder +  *	them between the TIDs, it must set the %IEEE80211_TX_STATUS_EOSP flag  --- a/net/mac80211/agg-rx.c  +++ b/net/mac80211/agg-rx.c  @@ -187,6 +187,8 @@ static void ieee80211_send_addba_resp(st @@ -688,16 +254,7 @@    err_stop:   	if (!local->open_count)   		drv_stop(local); -@@ -654,6 +630,8 @@ static void ieee80211_teardown_sdata(str -  - 	if (ieee80211_vif_is_mesh(&sdata->vif)) - 		mesh_rmc_free(sdata); -+	else if (sdata->vif.type == NL80211_IFTYPE_STATION) -+		ieee80211_mgd_teardown(sdata); -  - 	flushed = sta_info_flush(local, sdata); - 	WARN_ON(flushed); -@@ -720,6 +698,70 @@ static void ieee80211_if_setup(struct ne +@@ -722,6 +698,70 @@ static void ieee80211_if_setup(struct ne   	dev->destructor = free_netdev;   } @@ -768,7 +325,7 @@   static void ieee80211_iface_work(struct work_struct *work)   {   	struct ieee80211_sub_if_data *sdata = -@@ -824,6 +866,9 @@ static void ieee80211_iface_work(struct  +@@ -826,6 +866,9 @@ static void ieee80211_iface_work(struct    				break;   			ieee80211_mesh_rx_queued_mgmt(sdata, skb);   			break; @@ -780,7 +337,7 @@   			break;  --- a/net/mac80211/rx.c  +++ b/net/mac80211/rx.c -@@ -2281,6 +2281,7 @@ ieee80211_rx_h_action(struct ieee80211_r +@@ -2282,6 +2282,7 @@ ieee80211_rx_h_action(struct ieee80211_r   		    sdata->vif.type != NL80211_IFTYPE_MESH_POINT &&   		    sdata->vif.type != NL80211_IFTYPE_AP_VLAN &&   		    sdata->vif.type != NL80211_IFTYPE_AP && @@ -788,7 +345,7 @@   		    sdata->vif.type != NL80211_IFTYPE_ADHOC)   			break; -@@ -2491,14 +2492,15 @@ ieee80211_rx_h_mgmt(struct ieee80211_rx_ +@@ -2492,14 +2493,15 @@ ieee80211_rx_h_mgmt(struct ieee80211_rx_   	if (!ieee80211_vif_is_mesh(&sdata->vif) &&   	    sdata->vif.type != NL80211_IFTYPE_ADHOC && @@ -806,7 +363,7 @@   		break;   	case cpu_to_le16(IEEE80211_STYPE_ASSOC_RESP):   	case cpu_to_le16(IEEE80211_STYPE_REASSOC_RESP): -@@ -2852,10 +2854,16 @@ static int prepare_for_handlers(struct i +@@ -2853,10 +2855,16 @@ static int prepare_for_handlers(struct i   		}   		break;   	case NL80211_IFTYPE_WDS: @@ -825,231 +382,9 @@   		break;   	default:   		/* should never get here */ ---- a/net/mac80211/sta_info.h -+++ b/net/mac80211/sta_info.h -@@ -31,7 +31,6 @@ -  * @WLAN_STA_SHORT_PREAMBLE: Station is capable of receiving short-preamble -  *	frames. -  * @WLAN_STA_WME: Station is a QoS-STA. -- * @WLAN_STA_WDS: Station is one of our WDS peers. -  * @WLAN_STA_CLEAR_PS_FILT: Clear PS filter in hardware (using the -  *	IEEE80211_TX_CTL_CLEAR_PS_FILT control flag) when the next -  *	frame to this station is transmitted. -@@ -62,7 +61,6 @@ enum ieee80211_sta_info_flags { - 	WLAN_STA_AUTHORIZED, - 	WLAN_STA_SHORT_PREAMBLE, - 	WLAN_STA_WME, --	WLAN_STA_WDS, - 	WLAN_STA_CLEAR_PS_FILT, - 	WLAN_STA_MFP, - 	WLAN_STA_BLOCK_BA, ---- a/drivers/net/wireless/ath/ath9k/ar9003_mac.c -+++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.c -@@ -530,7 +530,11 @@ int ath9k_hw_process_rxdesc_edma(struct  - 		 */ - 		if (rxsp->status11 & AR_CRCErr) - 			rxs->rs_status |= ATH9K_RXERR_CRC; --		else if (rxsp->status11 & AR_PHYErr) { -+		else if (rxsp->status11 & AR_DecryptCRCErr) -+			rxs->rs_status |= ATH9K_RXERR_DECRYPT; -+		else if (rxsp->status11 & AR_MichaelErr) -+			rxs->rs_status |= ATH9K_RXERR_MIC; -+		if (rxsp->status11 & AR_PHYErr) { - 			phyerr = MS(rxsp->status11, AR_PHYErrCode); - 			/* - 			 * If we reach a point here where AR_PostDelimCRCErr is -@@ -552,11 +556,7 @@ int ath9k_hw_process_rxdesc_edma(struct  - 				rxs->rs_status |= ATH9K_RXERR_PHY; - 				rxs->rs_phyerr = phyerr; - 			} -- --		} else if (rxsp->status11 & AR_DecryptCRCErr) --			rxs->rs_status |= ATH9K_RXERR_DECRYPT; --		else if (rxsp->status11 & AR_MichaelErr) --			rxs->rs_status |= ATH9K_RXERR_MIC; -+		}; - 	} -  - 	if (rxsp->status11 & AR_KeyMiss) ---- a/drivers/net/wireless/ath/carl9170/tx.c -+++ b/drivers/net/wireless/ath/carl9170/tx.c -@@ -1236,6 +1236,7 @@ static bool carl9170_tx_ps_drop(struct a - { - 	struct ieee80211_sta *sta; - 	struct carl9170_sta_info *sta_info; -+	struct ieee80211_tx_info *tx_info; -  - 	rcu_read_lock(); - 	sta = __carl9170_get_tx_sta(ar, skb); -@@ -1243,12 +1244,13 @@ static bool carl9170_tx_ps_drop(struct a - 		goto out_rcu; -  - 	sta_info = (void *) sta->drv_priv; --	if (unlikely(sta_info->sleeping)) { --		struct ieee80211_tx_info *tx_info; -+	tx_info = IEEE80211_SKB_CB(skb); -  -+	if (unlikely(sta_info->sleeping) && -+	    !(tx_info->flags & (IEEE80211_TX_CTL_NO_PS_BUFFER | -+				IEEE80211_TX_CTL_CLEAR_PS_FILT))) { - 		rcu_read_unlock(); -  --		tx_info = IEEE80211_SKB_CB(skb); - 		if (tx_info->flags & IEEE80211_TX_CTL_AMPDU) - 			atomic_dec(&ar->tx_ampdu_upload); -  ---- a/drivers/net/wireless/iwlegacy/4965-mac.c -+++ b/drivers/net/wireless/iwlegacy/4965-mac.c -@@ -1694,7 +1694,7 @@ il4965_tx_skb(struct il_priv *il, struct - 		sta_priv = (void *)sta->drv_priv; -  - 	if (sta_priv && sta_priv->asleep && --	    (info->flags & IEEE80211_TX_CTL_POLL_RESPONSE)) { -+	    (info->flags & IEEE80211_TX_CTL_NO_PS_BUFFER)) { - 		/* - 		 * This sends an asynchronous command to the device, - 		 * but we can rely on it being processed before the ---- a/drivers/net/wireless/iwlwifi/iwl-agn-tx.c -+++ b/drivers/net/wireless/iwlwifi/iwl-agn-tx.c -@@ -322,7 +322,7 @@ int iwlagn_tx_skb(struct iwl_priv *priv, - 		sta_priv = (void *)info->control.sta->drv_priv; -  - 	if (sta_priv && sta_priv->asleep && --	    (info->flags & IEEE80211_TX_CTL_POLL_RESPONSE)) { -+	    (info->flags & IEEE80211_TX_CTL_NO_PS_BUFFER)) { - 		/* - 		 * This sends an asynchronous command to the device, - 		 * but we can rely on it being processed before the -@@ -331,6 +331,10 @@ int iwlagn_tx_skb(struct iwl_priv *priv, - 		 * counter. - 		 * For now set the counter to just 1 since we do not - 		 * support uAPSD yet. -+		 * -+		 * FIXME: If we get two non-bufferable frames one -+		 * after the other, we might only send out one of -+		 * them because this is racy. - 		 */ - 		iwl_sta_modify_sleep_tx_count(priv, sta_id, 1); - 	} ---- a/drivers/net/wireless/p54/txrx.c -+++ b/drivers/net/wireless/p54/txrx.c -@@ -690,7 +690,7 @@ static void p54_tx_80211_header(struct p - 	if (!(info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ)) - 		*flags |= P54_HDR_FLAG_DATA_OUT_SEQNR; -  --	if (info->flags & IEEE80211_TX_CTL_POLL_RESPONSE) -+	if (info->flags & IEEE80211_TX_CTL_NO_PS_BUFFER) - 		*flags |= P54_HDR_FLAG_DATA_OUT_NOCANCEL; -  - 	if (info->flags & IEEE80211_TX_CTL_CLEAR_PS_FILT) ---- a/include/net/mac80211.h -+++ b/include/net/mac80211.h -@@ -341,9 +341,9 @@ struct ieee80211_bss_conf { -  *	used to indicate that a frame was already retried due to PS -  * @IEEE80211_TX_INTFL_DONT_ENCRYPT: completely internal to mac80211, -  *	used to indicate frame should not be encrypted -- * @IEEE80211_TX_CTL_POLL_RESPONSE: This frame is a response to a poll -- *	frame (PS-Poll or uAPSD) and should be sent although the station -- *	is in powersave mode. -+ * @IEEE80211_TX_CTL_NO_PS_BUFFER: This frame is a response to a poll -+ *	frame (PS-Poll or uAPSD) or a non-bufferable MMPDU and must -+ *	be sent although the station is in powersave mode. -  * @IEEE80211_TX_CTL_MORE_FRAMES: More frames will be passed to the -  *	transmit function after the current frame, this can be used -  *	by drivers to kick the DMA queue only if unset or when the -@@ -399,7 +399,7 @@ enum mac80211_tx_control_flags { - 	IEEE80211_TX_INTFL_NEED_TXPROCESSING	= BIT(14), - 	IEEE80211_TX_INTFL_RETRIED		= BIT(15), - 	IEEE80211_TX_INTFL_DONT_ENCRYPT		= BIT(16), --	IEEE80211_TX_CTL_POLL_RESPONSE		= BIT(17), -+	IEEE80211_TX_CTL_NO_PS_BUFFER		= BIT(17), - 	IEEE80211_TX_CTL_MORE_FRAMES		= BIT(18), - 	IEEE80211_TX_INTFL_RETRANSMISSION	= BIT(19), - 	/* hole at 20, use later */ -@@ -425,7 +425,7 @@ enum mac80211_tx_control_flags { - 	IEEE80211_TX_CTL_SEND_AFTER_DTIM | IEEE80211_TX_CTL_AMPDU |	      \ - 	IEEE80211_TX_STAT_TX_FILTERED |	IEEE80211_TX_STAT_ACK |		      \ - 	IEEE80211_TX_STAT_AMPDU | IEEE80211_TX_STAT_AMPDU_NO_BACK |	      \ --	IEEE80211_TX_CTL_RATE_CTRL_PROBE | IEEE80211_TX_CTL_POLL_RESPONSE |   \ -+	IEEE80211_TX_CTL_RATE_CTRL_PROBE | IEEE80211_TX_CTL_NO_PS_BUFFER |    \ - 	IEEE80211_TX_CTL_MORE_FRAMES | IEEE80211_TX_CTL_LDPC |		      \ - 	IEEE80211_TX_CTL_STBC | IEEE80211_TX_STATUS_EOSP) -  -@@ -1634,7 +1634,7 @@ void ieee80211_free_txskb(struct ieee802 -  * the station sends a PS-Poll or a uAPSD trigger frame, mac80211 -  * will inform the driver of this with the @allow_buffered_frames -  * callback; this callback is optional. mac80211 will then transmit -- * the frames as usual and set the %IEEE80211_TX_CTL_POLL_RESPONSE -+ * the frames as usual and set the %IEEE80211_TX_CTL_NO_PS_BUFFER -  * on each frame. The last frame in the service period (or the only -  * response to a PS-Poll) also has %IEEE80211_TX_STATUS_EOSP set to -  * indicate that it ends the service period; as this frame must have -@@ -1642,6 +1642,9 @@ void ieee80211_free_txskb(struct ieee802 -  * When TX status is reported for this frame, the service period is -  * marked has having ended and a new one can be started by the peer. -  * -+ * Additionally, non-bufferable MMPDUs can also be transmitted by -+ * mac80211 with the %IEEE80211_TX_CTL_NO_PS_BUFFER set in them. -+ * -  * Another race condition can happen on some devices like iwlwifi -  * when there are frames queued for the station and it wakes up -  * or polls; the frames that are already queued could end up being -@@ -2140,7 +2143,7 @@ enum ieee80211_frame_release_type { -  * @allow_buffered_frames: Prepare device to allow the given number of frames -  *	to go out to the given station. The frames will be sent by mac80211 -  *	via the usual TX path after this call. The TX information for frames -- *	released will also have the %IEEE80211_TX_CTL_POLL_RESPONSE flag set -+ *	released will also have the %IEEE80211_TX_CTL_NO_PS_BUFFER flag set -  *	and the last one will also have %IEEE80211_TX_STATUS_EOSP set. In case -  *	frames from multiple TIDs are released and the driver might reorder -  *	them between the TIDs, it must set the %IEEE80211_TX_STATUS_EOSP flag ---- a/net/mac80211/ieee80211_i.h -+++ b/net/mac80211/ieee80211_i.h -@@ -1183,6 +1183,7 @@ void ieee80211_sta_rx_queued_mgmt(struct - 				  struct sk_buff *skb); - void ieee80211_sta_reset_beacon_monitor(struct ieee80211_sub_if_data *sdata); - void ieee80211_sta_reset_conn_monitor(struct ieee80211_sub_if_data *sdata); -+void ieee80211_mgd_teardown(struct ieee80211_sub_if_data *sdata); -  - /* IBSS code */ - void ieee80211_ibss_notify_scan_completed(struct ieee80211_local *local); ---- a/net/mac80211/mlme.c -+++ b/net/mac80211/mlme.c -@@ -3496,6 +3496,19 @@ int ieee80211_mgd_disassoc(struct ieee80 - 	return 0; - } -  -+void ieee80211_mgd_teardown(struct ieee80211_sub_if_data *sdata) -+{ -+	struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; -+ -+	mutex_lock(&ifmgd->mtx); -+	if (ifmgd->assoc_data) -+		ieee80211_destroy_assoc_data(sdata, false); -+	if (ifmgd->auth_data) -+		ieee80211_destroy_auth_data(sdata, false); -+	del_timer_sync(&ifmgd->timer); -+	mutex_unlock(&ifmgd->mtx); -+} -+ - void ieee80211_cqm_rssi_notify(struct ieee80211_vif *vif, - 			       enum nl80211_cqm_rssi_threshold_event rssi_event, - 			       gfp_t gfp)  --- a/net/mac80211/sta_info.c  +++ b/net/mac80211/sta_info.c -@@ -865,8 +865,10 @@ int sta_info_flush(struct ieee80211_loca -  - 	mutex_lock(&local->sta_mtx); - 	list_for_each_entry_safe(sta, tmp, &local->sta_list, list) { --		if (!sdata || sdata == sta->sdata) -+		if (!sdata || sdata == sta->sdata) { - 			WARN_ON(__sta_info_destroy(sta)); -+			ret++; -+		} - 	} - 	mutex_unlock(&local->sta_mtx); -  -@@ -1048,7 +1050,7 @@ static void ieee80211_send_null_response +@@ -1050,7 +1050,7 @@ static void ieee80211_send_null_response   	 * exchange. Also set EOSP to indicate this packet   	 * ends the poll/service period.   	 */ @@ -1058,7 +393,7 @@   		       IEEE80211_TX_STATUS_EOSP |   		       IEEE80211_TX_CTL_REQ_TX_STATUS; -@@ -1175,7 +1177,7 @@ ieee80211_sta_ps_deliver_response(struct +@@ -1177,7 +1177,7 @@ ieee80211_sta_ps_deliver_response(struct   			 * STA may still remain is PS mode after this frame   			 * exchange.   			 */ @@ -1067,6 +402,24 @@   			/*   			 * Use MoreData flag to indicate whether there are +--- a/net/mac80211/sta_info.h ++++ b/net/mac80211/sta_info.h +@@ -31,7 +31,6 @@ +  * @WLAN_STA_SHORT_PREAMBLE: Station is capable of receiving short-preamble +  *	frames. +  * @WLAN_STA_WME: Station is a QoS-STA. +- * @WLAN_STA_WDS: Station is one of our WDS peers. +  * @WLAN_STA_CLEAR_PS_FILT: Clear PS filter in hardware (using the +  *	IEEE80211_TX_CTL_CLEAR_PS_FILT control flag) when the next +  *	frame to this station is transmitted. +@@ -62,7 +61,6 @@ enum ieee80211_sta_info_flags { + 	WLAN_STA_AUTHORIZED, + 	WLAN_STA_SHORT_PREAMBLE, + 	WLAN_STA_WME, +-	WLAN_STA_WDS, + 	WLAN_STA_CLEAR_PS_FILT, + 	WLAN_STA_MFP, + 	WLAN_STA_BLOCK_BA,  --- a/net/mac80211/tx.c  +++ b/net/mac80211/tx.c  @@ -448,18 +448,23 @@ ieee80211_tx_h_unicast_ps_buf(struct iee diff --git a/package/mac80211/patches/403-ath9k-fix-invalid-mac-address-handling.patch b/package/mac80211/patches/403-ath9k-fix-invalid-mac-address-handling.patch index 65853b970..a9232f214 100644 --- a/package/mac80211/patches/403-ath9k-fix-invalid-mac-address-handling.patch +++ b/package/mac80211/patches/403-ath9k-fix-invalid-mac-address-handling.patch @@ -8,7 +8,7 @@   #include <asm/unaligned.h>   #include "hw.h" -@@ -465,8 +466,16 @@ static int ath9k_hw_init_macaddr(struct  +@@ -466,8 +467,16 @@ static int ath9k_hw_init_macaddr(struct    		common->macaddr[2 * i] = eeval >> 8;   		common->macaddr[2 * i + 1] = eeval & 0xff;   	} diff --git a/package/mac80211/patches/410-ath9k_allow_adhoc_and_ap.patch b/package/mac80211/patches/410-ath9k_allow_adhoc_and_ap.patch index afe784115..6a3999570 100644 --- a/package/mac80211/patches/410-ath9k_allow_adhoc_and_ap.patch +++ b/package/mac80211/patches/410-ath9k_allow_adhoc_and_ap.patch @@ -1,6 +1,6 @@  --- a/drivers/net/wireless/ath/ath9k/main.c  +++ b/drivers/net/wireless/ath/ath9k/main.c -@@ -1450,15 +1450,6 @@ static int ath9k_add_interface(struct ie +@@ -1430,15 +1430,6 @@ static int ath9k_add_interface(struct ie   		}   	} @@ -16,7 +16,7 @@   	ath_dbg(common, CONFIG, "Attach a VIF of type: %d\n", vif->type);   	sc->nvifs++; -@@ -1483,15 +1474,6 @@ static int ath9k_change_interface(struct +@@ -1463,15 +1454,6 @@ static int ath9k_change_interface(struct   	mutex_lock(&sc->mutex);   	ath9k_ps_wakeup(sc); diff --git a/package/mac80211/patches/500-ath9k_eeprom_debugfs.patch b/package/mac80211/patches/500-ath9k_eeprom_debugfs.patch index 354598ea4..3bdcb2aac 100644 --- a/package/mac80211/patches/500-ath9k_eeprom_debugfs.patch +++ b/package/mac80211/patches/500-ath9k_eeprom_debugfs.patch @@ -1,6 +1,6 @@  --- a/drivers/net/wireless/ath/ath9k/debug.c  +++ b/drivers/net/wireless/ath/ath9k/debug.c -@@ -1616,6 +1616,53 @@ static const struct file_operations fops +@@ -1552,6 +1552,53 @@ static const struct file_operations fops   }; @@ -54,13 +54,12 @@   int ath9k_init_debug(struct ath_hw *ah)   {   	struct ath_common *common = ath9k_hw_common(ah); -@@ -1677,6 +1724,9 @@ int ath9k_init_debug(struct ath_hw *ah) +@@ -1613,5 +1660,8 @@ int ath9k_init_debug(struct ath_hw *ah)   	debugfs_create_u32("gpio_val", S_IRUSR | S_IWUSR,   			   sc->debug.debugfs_phy, &sc->sc_ah->gpio_val);  +	debugfs_create_file("eeprom", S_IRUSR, sc->debug.debugfs_phy, sc,  +			    &fops_eeprom);  + - 	sc->debug.regidx = 0; - 	memset(&sc->debug.bb_mac_samp, 0, sizeof(sc->debug.bb_mac_samp)); - 	sc->debug.sampidx = 0; + 	return 0; + } diff --git a/package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch b/package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch index 82f586642..092ab5714 100644 --- a/package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch +++ b/package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch @@ -1,6 +1,6 @@  --- a/drivers/net/wireless/ath/ath9k/hw.c  +++ b/drivers/net/wireless/ath/ath9k/hw.c -@@ -1794,8 +1794,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st +@@ -1745,8 +1745,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st   	REG_WRITE(ah, AR_OBS, 8);   	if (ah->config.rx_intr_mitigation) { diff --git a/package/mac80211/patches/511-ath9k_increase_bcbuf.patch b/package/mac80211/patches/511-ath9k_increase_bcbuf.patch index 6d54d7a30..9adf07a40 100644 --- a/package/mac80211/patches/511-ath9k_increase_bcbuf.patch +++ b/package/mac80211/patches/511-ath9k_increase_bcbuf.patch @@ -11,7 +11,7 @@   #define IEEE80211_MS_TO_TU(x)           (((x) * 1000) / 1024)  --- a/drivers/net/wireless/ath/ath9k/hw.c  +++ b/drivers/net/wireless/ath/ath9k/hw.c -@@ -388,8 +388,8 @@ static void ath9k_hw_init_config(struct  +@@ -389,8 +389,8 @@ static void ath9k_hw_init_config(struct    {   	int i; diff --git a/package/mac80211/patches/513-ath9k_channelbw_debugfs.patch b/package/mac80211/patches/513-ath9k_channelbw_debugfs.patch index 1dcb9b244..527ef3b52 100644 --- a/package/mac80211/patches/513-ath9k_channelbw_debugfs.patch +++ b/package/mac80211/patches/513-ath9k_channelbw_debugfs.patch @@ -1,6 +1,6 @@  --- a/drivers/net/wireless/ath/ath9k/ath9k.h  +++ b/drivers/net/wireless/ath/ath9k/ath9k.h -@@ -595,6 +595,7 @@ struct ath_softc { +@@ -625,6 +625,7 @@ struct ath_softc {   	struct ieee80211_hw *hw;   	struct device *dev; @@ -8,7 +8,7 @@   	int chan_idx;   	int chan_is_ht;   	struct survey_info *cur_survey; -@@ -659,6 +660,7 @@ struct ath_softc { +@@ -692,6 +693,7 @@ struct ath_softc {   	u8 ant_tx, ant_rx;   }; @@ -18,7 +18,7 @@  --- a/drivers/net/wireless/ath/ath9k/debug.c  +++ b/drivers/net/wireless/ath/ath9k/debug.c -@@ -1663,6 +1663,50 @@ static const struct file_operations fops +@@ -1599,6 +1599,50 @@ static const struct file_operations fops   	.owner = THIS_MODULE   }; @@ -69,19 +69,18 @@   int ath9k_init_debug(struct ath_hw *ah)   {   	struct ath_common *common = ath9k_hw_common(ah); -@@ -1727,6 +1771,9 @@ int ath9k_init_debug(struct ath_hw *ah) +@@ -1663,5 +1707,8 @@ int ath9k_init_debug(struct ath_hw *ah)   	debugfs_create_file("eeprom", S_IRUSR, sc->debug.debugfs_phy, sc,   			    &fops_eeprom);  +	debugfs_create_file("chanbw", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy,  +			    sc, &fops_chanbw);  + - 	sc->debug.regidx = 0; - 	memset(&sc->debug.bb_mac_samp, 0, sizeof(sc->debug.bb_mac_samp)); - 	sc->debug.sampidx = 0; + 	return 0; + }  --- a/drivers/net/wireless/ath/ath9k/main.c  +++ b/drivers/net/wireless/ath/ath9k/main.c -@@ -1555,7 +1555,7 @@ static void ath9k_disable_ps(struct ath_ +@@ -1535,7 +1535,7 @@ static void ath9k_disable_ps(struct ath_   } @@ -90,7 +89,7 @@   {   	struct ath_softc *sc = hw->priv;   	struct ath_hw *ah = sc->sc_ah; -@@ -1599,9 +1599,11 @@ static int ath9k_config(struct ieee80211 +@@ -1579,9 +1579,11 @@ static int ath9k_config(struct ieee80211   	if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {   		struct ieee80211_channel *curchan = hw->conf.channel; @@ -102,7 +101,7 @@   		if (ah->curchan)   			old_pos = ah->curchan - &ah->channels[0]; -@@ -1649,7 +1651,23 @@ static int ath9k_config(struct ieee80211 +@@ -1629,7 +1631,23 @@ static int ath9k_config(struct ieee80211   			memset(&sc->survey[pos], 0, sizeof(struct survey_info));   		} @@ -129,7 +128,7 @@   			return -EINVAL;  --- a/drivers/net/wireless/ath/ath9k/hw.c  +++ b/drivers/net/wireless/ath/ath9k/hw.c -@@ -1608,6 +1608,10 @@ int ath9k_hw_reset(struct ath_hw *ah, st +@@ -1570,6 +1570,10 @@ int ath9k_hw_reset(struct ath_hw *ah, st   	    caldata->rtt_hist.num_readings)   		allow_fbs = true; diff --git a/package/mac80211/patches/531-ath9k_cur_txpower.patch b/package/mac80211/patches/531-ath9k_cur_txpower.patch index 35de44103..46f2004ae 100644 --- a/package/mac80211/patches/531-ath9k_cur_txpower.patch +++ b/package/mac80211/patches/531-ath9k_cur_txpower.patch @@ -1,6 +1,6 @@  --- a/drivers/net/wireless/ath/ath9k/main.c  +++ b/drivers/net/wireless/ath/ath9k/main.c -@@ -1673,6 +1673,8 @@ int ath9k_config(struct ieee80211_hw *hw +@@ -1653,6 +1653,8 @@ int ath9k_config(struct ieee80211_hw *hw   			return -EINVAL;   		} @@ -9,7 +9,7 @@   		/*   		 * The most recent snapshot of channel->noisefloor for the old   		 * channel is only available after the hardware reset. Copy it to -@@ -1687,6 +1689,7 @@ int ath9k_config(struct ieee80211_hw *hw +@@ -1667,6 +1669,7 @@ int ath9k_config(struct ieee80211_hw *hw   		sc->config.txpowlimit = 2 * conf->power_level;   		ath9k_cmn_update_txpow(ah, sc->curtxpow,   				       sc->config.txpowlimit, &sc->curtxpow); diff --git a/package/mac80211/patches/540-ath9k_limit_qlen.patch b/package/mac80211/patches/540-ath9k_limit_qlen.patch index 737591f5a..bf1811bae 100644 --- a/package/mac80211/patches/540-ath9k_limit_qlen.patch +++ b/package/mac80211/patches/540-ath9k_limit_qlen.patch @@ -20,8 +20,8 @@   	spinlock_t txbuflock;  --- a/drivers/net/wireless/ath/ath9k/debug.c  +++ b/drivers/net/wireless/ath/ath9k/debug.c -@@ -1732,6 +1732,10 @@ int ath9k_init_debug(struct ath_hw *ah) - 			    sc, &fops_wiphy); +@@ -1666,6 +1666,10 @@ int ath9k_init_debug(struct ath_hw *ah) + 			    &fops_interrupt);   	debugfs_create_file("xmit", S_IRUSR, sc->debug.debugfs_phy, sc,   			    &fops_xmit);  +	debugfs_create_u32("qlen_single", S_IRUSR | S_IWUSR, @@ -57,7 +57,7 @@   	while (bf) {   		u16 seqno = bf->bf_state.seqno; -@@ -885,6 +895,7 @@ static enum ATH_AGGR_STATUS ath_tx_form_ +@@ -884,6 +894,7 @@ static enum ATH_AGGR_STATUS ath_tx_form_   			ath_tx_addto_baw(sc, tid, seqno);   		bf->bf_state.ndelim = ndelim; @@ -65,7 +65,7 @@   		__skb_unlink(skb, &tid->buf_q);   		list_add_tail(&bf->list, bf_q);   		if (bf_prev) -@@ -1740,6 +1751,8 @@ static void ath_tx_send_ampdu(struct ath +@@ -1739,6 +1750,8 @@ static void ath_tx_send_ampdu(struct ath   	/* Add sub-frame to BAW */   	ath_tx_addto_baw(sc, tid, bf->bf_state.seqno); @@ -74,7 +74,7 @@   	/* Queue to h/w without aggregation */   	TX_STAT_INC(txctl->txq->axq_qnum, a_queued_hw);   	bf->bf_lastbf = bf; -@@ -1864,22 +1877,11 @@ error: +@@ -1863,22 +1876,11 @@ error:   /* FIXME: tx power */   static void ath_tx_start_dma(struct ath_softc *sc, struct sk_buff *skb, @@ -99,7 +99,7 @@   	if ((tx_info->flags & IEEE80211_TX_CTL_AMPDU) && tid) {   		/* -@@ -1911,6 +1913,7 @@ int ath_tx_start(struct ieee80211_hw *hw +@@ -1910,6 +1912,7 @@ int ath_tx_start(struct ieee80211_hw *hw   	struct ieee80211_vif *vif = info->control.vif;   	struct ath_softc *sc = hw->priv;   	struct ath_txq *txq = txctl->txq; @@ -107,7 +107,7 @@   	int padpos, padsize;   	int frmlen = skb->len + FCS_LEN;   	int q; -@@ -1953,6 +1956,24 @@ int ath_tx_start(struct ieee80211_hw *hw +@@ -1952,6 +1955,24 @@ int ath_tx_start(struct ieee80211_hw *hw   	setup_frame_info(hw, skb, frmlen); @@ -132,7 +132,7 @@   	/*   	 * At this point, the vif, hw_key and sta pointers in the tx control   	 * info are no longer valid (overwritten by the ath_frame_info data. -@@ -1967,7 +1988,7 @@ int ath_tx_start(struct ieee80211_hw *hw +@@ -1966,7 +1987,7 @@ int ath_tx_start(struct ieee80211_hw *hw   		txq->stopped = true;   	} diff --git a/package/mac80211/patches/541-ath9k_ar9280_cold_reset.patch b/package/mac80211/patches/541-ath9k_ar9280_cold_reset.patch index 70889d69d..d6146e50a 100644 --- a/package/mac80211/patches/541-ath9k_ar9280_cold_reset.patch +++ b/package/mac80211/patches/541-ath9k_ar9280_cold_reset.patch @@ -1,6 +1,6 @@  --- a/drivers/net/wireless/ath/ath9k/hw.c  +++ b/drivers/net/wireless/ath/ath9k/hw.c -@@ -1394,10 +1394,16 @@ static bool ath9k_hw_set_reset_reg(struc +@@ -1395,10 +1395,16 @@ static bool ath9k_hw_set_reset_reg(struc   static bool ath9k_hw_chip_reset(struct ath_hw *ah,   				struct ath9k_channel *chan)   { diff --git a/package/mac80211/patches/542-ath9k_fix_half_quarter_rx_latency.patch b/package/mac80211/patches/542-ath9k_fix_half_quarter_rx_latency.patch index 8b1e0436d..45246ea46 100644 --- a/package/mac80211/patches/542-ath9k_fix_half_quarter_rx_latency.patch +++ b/package/mac80211/patches/542-ath9k_fix_half_quarter_rx_latency.patch @@ -1,6 +1,6 @@  --- a/drivers/net/wireless/ath/ath9k/hw.c  +++ b/drivers/net/wireless/ath/ath9k/hw.c -@@ -1005,16 +1005,26 @@ void ath9k_hw_init_global_settings(struc +@@ -1006,16 +1006,26 @@ void ath9k_hw_init_global_settings(struc   	if (IS_CHAN_HALF_RATE(chan)) {   		eifs = 175; diff --git a/package/mac80211/patches/543-ath9k_fix_half_quarter_sifs.patch b/package/mac80211/patches/543-ath9k_fix_half_quarter_sifs.patch index 3f2b360f2..6bde7659f 100644 --- a/package/mac80211/patches/543-ath9k_fix_half_quarter_sifs.patch +++ b/package/mac80211/patches/543-ath9k_fix_half_quarter_sifs.patch @@ -1,6 +1,6 @@  --- a/drivers/net/wireless/ath/ath9k/hw.c  +++ b/drivers/net/wireless/ath/ath9k/hw.c -@@ -1006,31 +1006,35 @@ void ath9k_hw_init_global_settings(struc +@@ -1007,31 +1007,35 @@ void ath9k_hw_init_global_settings(struc   	if (IS_CHAN_HALF_RATE(chan)) {   		eifs = 175; diff --git a/package/mac80211/patches/550-ath9k_debug_remove_packet_rssi.patch b/package/mac80211/patches/550-ath9k_debug_remove_packet_rssi.patch index 087757db4..01d64ba2e 100644 --- a/package/mac80211/patches/550-ath9k_debug_remove_packet_rssi.patch +++ b/package/mac80211/patches/550-ath9k_debug_remove_packet_rssi.patch @@ -1,42 +1,35 @@  --- a/drivers/net/wireless/ath/ath9k/debug.c  +++ b/drivers/net/wireless/ath/ath9k/debug.c -@@ -969,34 +969,6 @@ static ssize_t read_file_recv(struct fil - 			"%18s : %10u\n", "DECRYPT BUSY ERR", - 			sc->debug.stats.rxstats.decrypt_busy_err); +@@ -942,27 +942,6 @@ static ssize_t read_file_recv(struct fil + 	PHY_ERR("HT-RATE ERR", ATH9K_PHYERR_HT_RATE_ILLEGAL); --	len += snprintf(buf + len, size - len, --			"%18s : %10d\n", "RSSI-CTL0", + 	len += snprintf(buf + len, size - len, +-			"%22s : %10d\n", "RSSI-CTL0",  -			sc->debug.stats.rxstats.rs_rssi_ctl0); --  -	len += snprintf(buf + len, size - len, --			"%18s : %10d\n", "RSSI-CTL1", +-			"%22s : %10d\n", "RSSI-CTL1",  -			sc->debug.stats.rxstats.rs_rssi_ctl1); --  -	len += snprintf(buf + len, size - len, --			"%18s : %10d\n", "RSSI-CTL2", +-			"%22s : %10d\n", "RSSI-CTL2",  -			sc->debug.stats.rxstats.rs_rssi_ctl2); --  -	len += snprintf(buf + len, size - len, --			"%18s : %10d\n", "RSSI-EXT0", +-			"%22s : %10d\n", "RSSI-EXT0",  -			sc->debug.stats.rxstats.rs_rssi_ext0); --  -	len += snprintf(buf + len, size - len, --			"%18s : %10d\n", "RSSI-EXT1", +-			"%22s : %10d\n", "RSSI-EXT1",  -			sc->debug.stats.rxstats.rs_rssi_ext1); --  -	len += snprintf(buf + len, size - len, --			"%18s : %10d\n", "RSSI-EXT2", +-			"%22s : %10d\n", "RSSI-EXT2",  -			sc->debug.stats.rxstats.rs_rssi_ext2); --  -	len += snprintf(buf + len, size - len, --			"%18s : %10d\n", "Rx Antenna", +-			"%22s : %10d\n", "Rx Antenna",  -			sc->debug.stats.rxstats.rs_antenna); -- - 	PHY_ERR("UNDERRUN", ATH9K_PHYERR_UNDERRUN); - 	PHY_ERR("TIMING", ATH9K_PHYERR_TIMING); - 	PHY_ERR("PARITY", ATH9K_PHYERR_PARITY); -@@ -1073,16 +1045,6 @@ void ath_debug_stat_rx(struct ath_softc  - 		RX_PHY_ERR_INC(phyerr); +-	len += snprintf(buf + len, size - len, + 			"%22s : %10u\n", "RX-Pkts-All", + 			sc->debug.stats.rxstats.rx_pkts_all); + 	len += snprintf(buf + len, size - len, +@@ -1009,16 +988,6 @@ void ath_debug_stat_rx(struct ath_softc  + 			RX_PHY_ERR_INC(rs->rs_phyerr);   	}  -	sc->debug.stats.rxstats.rs_rssi_ctl0 = rs->rs_rssi_ctl0; diff --git a/package/mac80211/patches/551-ath9k_per_chain_signal_strength.patch b/package/mac80211/patches/551-ath9k_per_chain_signal_strength.patch index f5ec64a52..778a1d0b4 100644 --- a/package/mac80211/patches/551-ath9k_per_chain_signal_strength.patch +++ b/package/mac80211/patches/551-ath9k_per_chain_signal_strength.patch @@ -37,7 +37,7 @@  --- a/net/mac80211/rx.c  +++ b/net/mac80211/rx.c -@@ -1269,6 +1269,7 @@ ieee80211_rx_h_sta_process(struct ieee80 +@@ -1270,6 +1270,7 @@ ieee80211_rx_h_sta_process(struct ieee80   	struct sk_buff *skb = rx->skb;   	struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);   	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; @@ -45,7 +45,7 @@   	if (!sta)   		return RX_CONTINUE; -@@ -1311,6 +1312,19 @@ ieee80211_rx_h_sta_process(struct ieee80 +@@ -1312,6 +1313,19 @@ ieee80211_rx_h_sta_process(struct ieee80   	sta->last_signal = status->signal;   	ewma_add(&sta->avg_signal, -status->signal); @@ -189,7 +189,7 @@   	/* Record packet only when both main_rssi and  alt_rssi is positive */  --- a/drivers/net/wireless/ath/ath9k/ar9003_mac.c  +++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.c -@@ -483,12 +483,12 @@ int ath9k_hw_process_rxdesc_edma(struct  +@@ -463,12 +463,12 @@ int ath9k_hw_process_rxdesc_edma(struct    	/* XXX: Keycache */   	rxs->rs_rssi = MS(rxsp->status5, AR_RxRSSICombined); @@ -250,7 +250,7 @@   	if (ads.ds_rxstatus8 & AR_RxKeyIdxValid)  --- a/drivers/net/wireless/ath/ath9k/debug.c  +++ b/drivers/net/wireless/ath/ath9k/debug.c -@@ -1047,12 +1047,12 @@ void ath_debug_stat_rx(struct ath_softc  +@@ -990,12 +990,12 @@ void ath_debug_stat_rx(struct ath_softc    	spin_lock(&sc->debug.samp_lock);   	RX_SAMP_DBG(jiffies) = jiffies; diff --git a/package/mac80211/patches/560-ath9k_extra_leds.patch b/package/mac80211/patches/560-ath9k_extra_leds.patch index adf2a0e88..ed749ed13 100644 --- a/package/mac80211/patches/560-ath9k_extra_leds.patch +++ b/package/mac80211/patches/560-ath9k_extra_leds.patch @@ -1,6 +1,6 @@  --- a/drivers/net/wireless/ath/ath9k/ath9k.h  +++ b/drivers/net/wireless/ath/ath9k/ath9k.h -@@ -475,6 +475,9 @@ void ath9k_btcoex_timer_pause(struct ath +@@ -505,6 +505,9 @@ static inline u16 ath9k_btcoex_aggr_limi   #ifdef CONFIG_MAC80211_LEDS   void ath_init_leds(struct ath_softc *sc);   void ath_deinit_leds(struct ath_softc *sc); @@ -10,7 +10,7 @@   #else   static inline void ath_init_leds(struct ath_softc *sc)   { -@@ -595,6 +598,13 @@ struct ath9k_vif_iter_data { +@@ -625,6 +628,13 @@ struct ath9k_vif_iter_data {   	int nothers;   /* number of vifs not specified above. */   }; @@ -24,7 +24,7 @@   struct ath_softc {   	struct ieee80211_hw *hw;   	struct device *dev; -@@ -638,9 +648,8 @@ struct ath_softc { +@@ -668,9 +678,8 @@ struct ath_softc {   	struct ieee80211_supported_band sbands[IEEE80211_NUM_BANDS];   #ifdef CONFIG_MAC80211_LEDS @@ -171,7 +171,7 @@  --- a/drivers/net/wireless/ath/ath9k/init.c  +++ b/drivers/net/wireless/ath/ath9k/init.c -@@ -817,7 +817,7 @@ int ath9k_init_device(u16 devid, struct  +@@ -757,7 +757,7 @@ int ath9k_init_device(u16 devid, struct    #ifdef CONFIG_MAC80211_LEDS   	/* must be initialized before ieee80211_register_hw */ @@ -182,7 +182,7 @@   #endif  --- a/drivers/net/wireless/ath/ath9k/debug.c  +++ b/drivers/net/wireless/ath/ath9k/debug.c -@@ -1304,6 +1304,61 @@ static const struct file_operations fops +@@ -1247,6 +1247,61 @@ static const struct file_operations fops   	.llseek = default_llseek,   }; @@ -244,7 +244,7 @@   void ath9k_debug_samp_bb_mac(struct ath_softc *sc)   {   #define ATH_SAMP_DBG(c) (sc->debug.bb_mac_samp[sc->debug.sampidx].c) -@@ -1728,6 +1783,11 @@ int ath9k_init_debug(struct ath_hw *ah) +@@ -1671,6 +1726,11 @@ int ath9k_init_debug(struct ath_hw *ah)   	debugfs_create_file("samples", S_IRUSR, sc->debug.debugfs_phy, sc,   			    &fops_samps); diff --git a/package/mac80211/patches/571-ath9k_beacon_fix.patch b/package/mac80211/patches/571-ath9k_beacon_fix.patch index e7c2b0094..96b80600f 100644 --- a/package/mac80211/patches/571-ath9k_beacon_fix.patch +++ b/package/mac80211/patches/571-ath9k_beacon_fix.patch @@ -1,6 +1,6 @@  --- a/drivers/net/wireless/ath/ath9k/ar9003_mac.c  +++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.c -@@ -346,7 +346,6 @@ static bool ar9003_hw_get_isr(struct ath +@@ -326,7 +326,6 @@ static bool ar9003_hw_get_isr(struct ath   static int ar9003_hw_proc_txdesc(struct ath_hw *ah, void *ds,   				 struct ath_tx_status *ts)   { @@ -8,7 +8,7 @@   	struct ar9003_txs *ads;   	u32 status; -@@ -356,11 +355,7 @@ static int ar9003_hw_proc_txdesc(struct  +@@ -336,11 +335,7 @@ static int ar9003_hw_proc_txdesc(struct    	if ((status & AR_TxDone) == 0)   		return -EINPROGRESS; @@ -21,7 +21,7 @@   	if ((MS(ads->ds_info, AR_DescId) != ATHEROS_VENDOR_ID) ||   	    (MS(ads->ds_info, AR_TxRxDesc) != 1)) { -@@ -374,6 +369,7 @@ static int ar9003_hw_proc_txdesc(struct  +@@ -354,6 +349,7 @@ static int ar9003_hw_proc_txdesc(struct    	ts->ts_seqnum = MS(status, AR_SeqNum);   	ts->tid = MS(status, AR_TxTid); @@ -77,7 +77,7 @@   EXPORT_SYMBOL(ath9k_hw_beaconq_setup);  --- a/drivers/net/wireless/ath/ath9k/main.c  +++ b/drivers/net/wireless/ath/ath9k/main.c -@@ -2323,6 +2323,7 @@ static int ath9k_tx_last_beacon(struct i +@@ -2303,6 +2303,7 @@ static int ath9k_tx_last_beacon(struct i   	struct ath_vif *avp;   	struct ath_buf *bf;   	struct ath_tx_status ts; @@ -85,7 +85,7 @@   	int status;   	vif = sc->beacon.bslot[0]; -@@ -2333,7 +2334,7 @@ static int ath9k_tx_last_beacon(struct i +@@ -2313,7 +2314,7 @@ static int ath9k_tx_last_beacon(struct i   	if (!avp->is_bslot_active)   		return 0; @@ -96,7 +96,7 @@   		bf = avp->av_bcbuf;  --- a/drivers/net/wireless/ath/ath9k/xmit.c  +++ b/drivers/net/wireless/ath/ath9k/xmit.c -@@ -2318,9 +2318,12 @@ void ath_tx_edma_tasklet(struct ath_soft +@@ -2317,9 +2317,12 @@ void ath_tx_edma_tasklet(struct ath_soft   			break;   		} diff --git a/package/mac80211/patches/580-mac80211_ignore_bad_signal_values.patch b/package/mac80211/patches/580-mac80211_ignore_bad_signal_values.patch index b6d88b0ba..cfc151629 100644 --- a/package/mac80211/patches/580-mac80211_ignore_bad_signal_values.patch +++ b/package/mac80211/patches/580-mac80211_ignore_bad_signal_values.patch @@ -19,7 +19,7 @@   /**  --- a/net/mac80211/rx.c  +++ b/net/mac80211/rx.c -@@ -176,7 +176,8 @@ ieee80211_add_rx_radiotap_header(struct  +@@ -177,7 +177,8 @@ ieee80211_add_rx_radiotap_header(struct    	pos += 2;   	/* IEEE80211_RADIOTAP_DBM_ANTSIGNAL */ @@ -29,7 +29,7 @@   		*pos = status->signal;   		rthdr->it_present |=   			cpu_to_le32(1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL); -@@ -1309,8 +1310,10 @@ ieee80211_rx_h_sta_process(struct ieee80 +@@ -1310,8 +1311,10 @@ ieee80211_rx_h_sta_process(struct ieee80   	sta->rx_fragments++;   	sta->rx_bytes += rx->skb->len; diff --git a/package/mac80211/patches/603-rt2x00-introduce-rt2x00eeprom.patch b/package/mac80211/patches/603-rt2x00-introduce-rt2x00eeprom.patch index 801d53adc..31e33b781 100644 --- a/package/mac80211/patches/603-rt2x00-introduce-rt2x00eeprom.patch +++ b/package/mac80211/patches/603-rt2x00-introduce-rt2x00eeprom.patch @@ -101,7 +101,7 @@  +}  --- a/drivers/net/wireless/rt2x00/rt2x00.h  +++ b/drivers/net/wireless/rt2x00/rt2x00.h -@@ -554,6 +554,7 @@ struct rt2x00lib_ops { +@@ -560,6 +560,7 @@ struct rt2x00lib_ops {   			       const u8 *data, const size_t len);   	int (*load_firmware) (struct rt2x00_dev *rt2x00dev,   			      const u8 *data, const size_t len); @@ -109,7 +109,7 @@   	/*   	 * Device initialization/deinitialization handlers. -@@ -706,6 +707,7 @@ enum rt2x00_capability_flags { +@@ -713,6 +714,7 @@ enum rt2x00_capability_flags {   	REQUIRE_SW_SEQNO,   	REQUIRE_HT_TX_DESC,   	REQUIRE_PS_AUTOWAKE, @@ -117,7 +117,7 @@   	/*   	 * Capabilities -@@ -960,6 +962,11 @@ struct rt2x00_dev { +@@ -968,6 +970,11 @@ struct rt2x00_dev {   	const struct firmware *fw;   	/* @@ -131,7 +131,7 @@   	DECLARE_KFIFO_PTR(txstatus_fifo, u32);  --- a/drivers/net/wireless/rt2x00/rt2x00lib.h  +++ b/drivers/net/wireless/rt2x00/rt2x00lib.h -@@ -309,6 +309,22 @@ static inline void rt2x00lib_free_firmwa +@@ -322,6 +322,22 @@ static inline void rt2x00lib_free_firmwa   #endif /* CONFIG_RT2X00_LIB_FIRMWARE */   /* @@ -229,7 +229,7 @@    * Initialization functions.    */   static bool rt2800pci_get_entry_state(struct queue_entry *entry) -@@ -1040,6 +1044,7 @@ static const struct rt2x00lib_ops rt2800 +@@ -1052,6 +1056,7 @@ static const struct rt2x00lib_ops rt2800   	.get_firmware_name	= rt2800pci_get_firmware_name,   	.check_firmware		= rt2800_check_firmware,   	.load_firmware		= rt2800_load_firmware, @@ -239,7 +239,7 @@   	.get_entry_state	= rt2800pci_get_entry_state,  --- a/drivers/net/wireless/rt2x00/rt2x00dev.c  +++ b/drivers/net/wireless/rt2x00/rt2x00dev.c -@@ -1157,6 +1157,10 @@ int rt2x00lib_probe_dev(struct rt2x00_de +@@ -1161,6 +1161,10 @@ int rt2x00lib_probe_dev(struct rt2x00_de   		    BIT(NL80211_IFTYPE_MESH_POINT) |   		    BIT(NL80211_IFTYPE_WDS); @@ -250,7 +250,7 @@   	/*   	 * Initialize work.   	 */ -@@ -1280,6 +1284,11 @@ void rt2x00lib_remove_dev(struct rt2x00_ +@@ -1284,6 +1288,11 @@ void rt2x00lib_remove_dev(struct rt2x00_   	 */   	if (rt2x00dev->drv_data)   		kfree(rt2x00dev->drv_data); diff --git a/package/mac80211/patches/605-rt2x00-pci-eeprom.patch b/package/mac80211/patches/605-rt2x00-pci-eeprom.patch index 51af67eb7..088d47409 100644 --- a/package/mac80211/patches/605-rt2x00-pci-eeprom.patch +++ b/package/mac80211/patches/605-rt2x00-pci-eeprom.patch @@ -9,7 +9,7 @@   {   	memcpy(rt2x00dev->eeprom, rt2x00dev->eeprom_file->data, EEPROM_SIZE);   } -@@ -926,8 +926,9 @@ static int rt2800pci_validate_eeprom(str +@@ -938,8 +938,9 @@ static int rt2800pci_validate_eeprom(str   	/*   	 * Read EEPROM into buffer   	 */ diff --git a/package/mac80211/patches/607-rt2x00-allow_disabling_bands_through_platform_data.patch b/package/mac80211/patches/607-rt2x00-allow_disabling_bands_through_platform_data.patch index 9243c8be6..9056076bd 100644 --- a/package/mac80211/patches/607-rt2x00-allow_disabling_bands_through_platform_data.patch +++ b/package/mac80211/patches/607-rt2x00-allow_disabling_bands_through_platform_data.patch @@ -12,7 +12,7 @@   #endif /* _RT2X00_PLATFORM_H */  --- a/drivers/net/wireless/rt2x00/rt2x00dev.c  +++ b/drivers/net/wireless/rt2x00/rt2x00dev.c -@@ -825,6 +825,22 @@ static int rt2x00lib_probe_hw_modes(stru +@@ -829,6 +829,22 @@ static int rt2x00lib_probe_hw_modes(stru   	unsigned int num_rates;   	unsigned int i; @@ -37,7 +37,7 @@   		num_rates += 4;  --- a/drivers/net/wireless/rt2x00/rt2x00.h  +++ b/drivers/net/wireless/rt2x00/rt2x00.h -@@ -419,6 +419,7 @@ struct hw_mode_spec { +@@ -425,6 +425,7 @@ struct hw_mode_spec {   	unsigned int supported_bands;   #define SUPPORT_BAND_2GHZ	0x00000001   #define SUPPORT_BAND_5GHZ	0x00000002  | 
