Browse Source

mac80211: update to wireless-testing 2010-05-24

SVN-Revision: 21568
Felix Fietkau 15 years ago
parent
commit
b674689a98

+ 4 - 3
package/mac80211/Makefile

@@ -10,12 +10,12 @@ include $(INCLUDE_DIR)/kernel.mk
 
 PKG_NAME:=mac80211
 
-PKG_VERSION:=2010-05-12
+PKG_VERSION:=2010-05-24
 PKG_RELEASE:=1
 PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources
 #	http://www.orbit-lab.org/kernel/compat-wireless-2.6/2010/11 \
 #	http://wireless.kernel.org/download/compat-wireless-2.6
-PKG_MD5SUM:=73e2aa6b917bdb0bae079433fe26a500
+PKG_MD5SUM:=3d465dc6e0213964d0349f61c485817f
 
 PKG_SOURCE:=compat-wireless-$(PKG_VERSION).tar.bz2
 PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/compat-wireless-$(PKG_VERSION)
@@ -777,7 +777,7 @@ BUILDFLAGS:= \
 	$(if $(CONFIG_LEDS_TRIGGERS), -DCONFIG_MAC80211_LEDS -DCONFIG_LEDS_TRIGGERS -DCONFIG_B43_LEDS -DCONFIG_B43LEGACY_LEDS -DCONFIG_AR9170_LEDS) \
 	-DCONFIG_B43_HWRNG -DCONFIG_B43LEGACY_HWRNG \
 	$(if $(CONFIG_PACKAGE_MAC80211_DEBUGFS),-DCONFIG_MAC80211_DEBUGFS -DCONFIG_ATH9K_DEBUGFS) \
-	$(if $(CONFIG_PACKAGE_ATH_DEBUG),-DCONFIG_ATH_DEBUG) \
+	$(if $(CONFIG_PACKAGE_ATH_DEBUG),-DCONFIG_ATH_DEBUG -DCONFIG_ATH9K_PKTLOG) \
 	-D__CONFIG_MAC80211_RC_DEFAULT=minstrel \
 	-DCONFIG_MAC80211_RC_MINSTREL_HT \
 	$(if $(CONFIG_ATH_USER_REGD),-DATH_USER_REGD=1) \
@@ -815,6 +815,7 @@ MAKE_OPTS:= \
 	CONFIG_B43LEGACY=$(if $(CONFIG_PACKAGE_kmod-b43legacy),m) \
 	CONFIG_ATH_COMMON=$(if $(CONFIG_PACKAGE_kmod-ath),m) \
 	CONFIG_ATH_DEBUG=$(if $(CONFIG_PACKAGE_ATH_DEBUG),y) \
+	CONFIG_ATH9K_PKTLOG=$(if $(CONFIG_PACKAGE_ATH_DEBUG),y) \
 	CONFIG_ATH5K=$(if $(CONFIG_PACKAGE_kmod-ath5k),m) \
 	CONFIG_ATH9K=$(if $(CONFIG_PACKAGE_kmod-ath9k),m) \
 	CONFIG_ATH9K_DEBUGFS=$(if $(CONFIG_PACKAGE_MAC80211_DEBUGFS),y) \

+ 1 - 1
package/mac80211/patches/005-disable_ssb_build.patch

@@ -1,6 +1,6 @@
 --- a/Makefile
 +++ b/Makefile
-@@ -28,7 +28,7 @@ obj-$(CONFIG_COMPAT_WIRELESS_MODULES) +=
+@@ -30,7 +30,7 @@ obj-$(CONFIG_COMPAT_WIRELESS_MODULES) +=
  obj-$(CONFIG_COMPAT_NET_USB_MODULES) += drivers/net/usb/
  
  obj-$(CONFIG_COMPAT_NETWORK_MODULES) += drivers/net/

+ 1 - 1
package/mac80211/patches/110-disable_usb_compat.patch

@@ -11,7 +11,7 @@
  {
 --- a/compat/compat-2.6.29.c
 +++ b/compat/compat-2.6.29.c
-@@ -53,7 +53,7 @@ void netdev_attach_ops(struct net_device
+@@ -50,7 +50,7 @@ void netdev_attach_ops(struct net_device
  EXPORT_SYMBOL(netdev_attach_ops);
  
  #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23))

+ 1 - 1
package/mac80211/patches/201-ath5k-WAR-for-AR71xx-PCI-bug.patch

@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath5k/reset.c
 +++ b/drivers/net/wireless/ath/ath5k/reset.c
-@@ -1377,10 +1377,18 @@ int ath5k_hw_reset(struct ath5k_hw *ah, 
+@@ -1374,10 +1374,18 @@ int ath5k_hw_reset(struct ath5k_hw *ah, 
  	 * guess we can tweak it and see how it goes ;-)
  	 */
  	if (ah->ah_version != AR5K_AR5210) {

+ 1 - 1
package/mac80211/patches/404-ath_regd_optional.patch

@@ -10,7 +10,7 @@
  #include "regd_common.h"
  
  /*
-@@ -588,3 +591,5 @@ u32 ath_regd_get_band_ctl(struct ath_reg
+@@ -587,3 +590,5 @@ u32 ath_regd_get_band_ctl(struct ath_reg
  	}
  }
  EXPORT_SYMBOL(ath_regd_get_band_ctl);

+ 1 - 1
package/mac80211/patches/405-ath9k-read-eeprom-data-from-platform-data-on-pci-bus.patch

@@ -8,7 +8,7 @@
  #include "ath9k.h"
  
  static DEFINE_PCI_DEVICE_TABLE(ath_pci_id_table) = {
-@@ -53,21 +54,36 @@ static void ath_pci_read_cachesize(struc
+@@ -52,21 +53,36 @@ static void ath_pci_read_cachesize(struc
  
  static bool ath_pci_eeprom_read(struct ath_common *common, u32 off, u16 *data)
  {

File diff suppressed because it is too large
+ 3088 - 108
package/mac80211/patches/500-pending_work.patch


+ 1 - 1
package/mac80211/patches/510-ath9k_use_minstrel.patch

@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/init.c
 +++ b/drivers/net/wireless/ath/ath9k/init.c
-@@ -686,7 +686,11 @@ void ath9k_set_hw_capab(struct ath_softc
+@@ -689,7 +689,11 @@ void ath9k_set_hw_capab(struct ath_softc
  	hw->sta_data_size = sizeof(struct ath_node);
  	hw->vif_data_size = sizeof(struct ath_vif);
  

+ 36 - 0
package/mac80211/patches/520-ath0k_hw_mcast_search.patch

@@ -0,0 +1,36 @@
+--- a/drivers/net/wireless/ath/ath9k/hw.c
++++ b/drivers/net/wireless/ath/ath9k/hw.c
+@@ -1497,6 +1497,7 @@ EXPORT_SYMBOL(ath9k_hw_keyreset);
+ bool ath9k_hw_keysetmac(struct ath_hw *ah, u16 entry, const u8 *mac)
+ {
+ 	u32 macHi, macLo;
++	u32 unicast_flag = AR_KEYTABLE_VALID;
+ 
+ 	if (entry >= ah->caps.keycache_size) {
+ 		ath_print(ath9k_hw_common(ah), ATH_DBG_FATAL,
+@@ -1505,6 +1506,16 @@ bool ath9k_hw_keysetmac(struct ath_hw *a
+ 	}
+ 
+ 	if (mac != NULL) {
++		/*
++		 * AR_KEYTABLE_VALID indicates that the address is a unicast
++		 * address, which must match the transmitter address for
++		 * decrypting frames.
++		 * Not setting this bit allows the hardware to use the key
++		 * for multicast frame decryption.
++		 */
++		if (mac[0] & 0x01)
++			unicast_flag = 0;
++
+ 		macHi = (mac[5] << 8) | mac[4];
+ 		macLo = (mac[3] << 24) |
+ 			(mac[2] << 16) |
+@@ -1517,7 +1528,7 @@ bool ath9k_hw_keysetmac(struct ath_hw *a
+ 		macLo = macHi = 0;
+ 	}
+ 	REG_WRITE(ah, AR_KEYTABLE_MAC0(entry), macLo);
+-	REG_WRITE(ah, AR_KEYTABLE_MAC1(entry), macHi | AR_KEYTABLE_VALID);
++	REG_WRITE(ah, AR_KEYTABLE_MAC1(entry), macHi | unicast_flag);
+ 
+ 	return true;
+ }

+ 72 - 0
package/mac80211/patches/521-ath9k_common-use_mcast_search.patch

@@ -0,0 +1,72 @@
+--- a/drivers/net/wireless/ath/ath9k/common.c
++++ b/drivers/net/wireless/ath/ath9k/common.c
+@@ -211,10 +211,14 @@ static int ath_reserve_key_cache_slot_tk
+ 	return -1;
+ }
+ 
+-static int ath_reserve_key_cache_slot(struct ath_common *common)
++static int ath_reserve_key_cache_slot(struct ath_common *common,
++				      enum ieee80211_key_alg alg)
+ {
+ 	int i;
+ 
++	if (alg == ALG_TKIP)
++		return ath_reserve_key_cache_slot_tkip(common);
++
+ 	/* First, try to find slots that would not be available for TKIP. */
+ 	if (common->splitmic) {
+ 		for (i = IEEE80211_WEP_NKID; i < common->keymax / 4; i++) {
+@@ -283,6 +287,7 @@ int ath9k_cmn_key_config(struct ath_comm
+ 	struct ath_hw *ah = common->ah;
+ 	struct ath9k_keyval hk;
+ 	const u8 *mac = NULL;
++	u8 gmac[ETH_ALEN];
+ 	int ret = 0;
+ 	int idx;
+ 
+@@ -306,9 +311,23 @@ int ath9k_cmn_key_config(struct ath_comm
+ 	memcpy(hk.kv_val, key->key, key->keylen);
+ 
+ 	if (!(key->flags & IEEE80211_KEY_FLAG_PAIRWISE)) {
+-		/* For now, use the default keys for broadcast keys. This may
+-		 * need to change with virtual interfaces. */
+-		idx = key->keyidx;
++		switch (vif->type) {
++		case NL80211_IFTYPE_AP:
++			memcpy(gmac, vif->addr, ETH_ALEN);
++			gmac[0] |= 0x01;
++			mac = gmac;
++			idx = ath_reserve_key_cache_slot(common, key->alg);
++			break;
++		case NL80211_IFTYPE_ADHOC:
++			memcpy(gmac, sta->addr, ETH_ALEN);
++			gmac[0] |= 0x01;
++			mac = gmac;
++			idx = ath_reserve_key_cache_slot(common, key->alg);
++			break;
++		default:
++			idx = key->keyidx;
++			break;
++		}
+ 	} else if (key->keyidx) {
+ 		if (WARN_ON(!sta))
+ 			return -EOPNOTSUPP;
+@@ -325,14 +344,12 @@ int ath9k_cmn_key_config(struct ath_comm
+ 			return -EOPNOTSUPP;
+ 		mac = sta->addr;
+ 
+-		if (key->alg == ALG_TKIP)
+-			idx = ath_reserve_key_cache_slot_tkip(common);
+-		else
+-			idx = ath_reserve_key_cache_slot(common);
+-		if (idx < 0)
+-			return -ENOSPC; /* no free key cache entries */
++		idx = ath_reserve_key_cache_slot(common, key->alg);
+ 	}
+ 
++	if (idx < 0)
++		return -ENOSPC; /* no free key cache entries */
++
+ 	if (key->alg == ALG_TKIP)
+ 		ret = ath_setkey_tkip(common, idx, key->key, &hk, mac,
+ 				      vif->type == NL80211_IFTYPE_AP);

+ 255 - 0
package/mac80211/patches/522-ath9k_remove_duplicate_code.patch

@@ -0,0 +1,255 @@
+--- a/drivers/net/wireless/ath/ath9k/main.c
++++ b/drivers/net/wireless/ath/ath9k/main.c
+@@ -622,234 +622,6 @@ static u32 ath_get_extchanmode(struct at
+ 	return chanmode;
+ }
+ 
+-static int ath_setkey_tkip(struct ath_common *common, u16 keyix, const u8 *key,
+-			   struct ath9k_keyval *hk, const u8 *addr,
+-			   bool authenticator)
+-{
+-	struct ath_hw *ah = common->ah;
+-	const u8 *key_rxmic;
+-	const u8 *key_txmic;
+-
+-	key_txmic = key + NL80211_TKIP_DATA_OFFSET_TX_MIC_KEY;
+-	key_rxmic = key + NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY;
+-
+-	if (addr == NULL) {
+-		/*
+-		 * Group key installation - only two key cache entries are used
+-		 * regardless of splitmic capability since group key is only
+-		 * used either for TX or RX.
+-		 */
+-		if (authenticator) {
+-			memcpy(hk->kv_mic, key_txmic, sizeof(hk->kv_mic));
+-			memcpy(hk->kv_txmic, key_txmic, sizeof(hk->kv_mic));
+-		} else {
+-			memcpy(hk->kv_mic, key_rxmic, sizeof(hk->kv_mic));
+-			memcpy(hk->kv_txmic, key_rxmic, sizeof(hk->kv_mic));
+-		}
+-		return ath9k_hw_set_keycache_entry(ah, keyix, hk, addr);
+-	}
+-	if (!common->splitmic) {
+-		/* TX and RX keys share the same key cache entry. */
+-		memcpy(hk->kv_mic, key_rxmic, sizeof(hk->kv_mic));
+-		memcpy(hk->kv_txmic, key_txmic, sizeof(hk->kv_txmic));
+-		return ath9k_hw_set_keycache_entry(ah, keyix, hk, addr);
+-	}
+-
+-	/* Separate key cache entries for TX and RX */
+-
+-	/* TX key goes at first index, RX key at +32. */
+-	memcpy(hk->kv_mic, key_txmic, sizeof(hk->kv_mic));
+-	if (!ath9k_hw_set_keycache_entry(ah, keyix, hk, NULL)) {
+-		/* TX MIC entry failed. No need to proceed further */
+-		ath_print(common, ATH_DBG_FATAL,
+-			  "Setting TX MIC Key Failed\n");
+-		return 0;
+-	}
+-
+-	memcpy(hk->kv_mic, key_rxmic, sizeof(hk->kv_mic));
+-	/* XXX delete tx key on failure? */
+-	return ath9k_hw_set_keycache_entry(ah, keyix + 32, hk, addr);
+-}
+-
+-static int ath_reserve_key_cache_slot_tkip(struct ath_common *common)
+-{
+-	int i;
+-
+-	for (i = IEEE80211_WEP_NKID; i < common->keymax / 2; i++) {
+-		if (test_bit(i, common->keymap) ||
+-		    test_bit(i + 64, common->keymap))
+-			continue; /* At least one part of TKIP key allocated */
+-		if (common->splitmic &&
+-		    (test_bit(i + 32, common->keymap) ||
+-		     test_bit(i + 64 + 32, common->keymap)))
+-			continue; /* At least one part of TKIP key allocated */
+-
+-		/* Found a free slot for a TKIP key */
+-		return i;
+-	}
+-	return -1;
+-}
+-
+-static int ath_reserve_key_cache_slot(struct ath_common *common)
+-{
+-	int i;
+-
+-	/* First, try to find slots that would not be available for TKIP. */
+-	if (common->splitmic) {
+-		for (i = IEEE80211_WEP_NKID; i < common->keymax / 4; i++) {
+-			if (!test_bit(i, common->keymap) &&
+-			    (test_bit(i + 32, common->keymap) ||
+-			     test_bit(i + 64, common->keymap) ||
+-			     test_bit(i + 64 + 32, common->keymap)))
+-				return i;
+-			if (!test_bit(i + 32, common->keymap) &&
+-			    (test_bit(i, common->keymap) ||
+-			     test_bit(i + 64, common->keymap) ||
+-			     test_bit(i + 64 + 32, common->keymap)))
+-				return i + 32;
+-			if (!test_bit(i + 64, common->keymap) &&
+-			    (test_bit(i , common->keymap) ||
+-			     test_bit(i + 32, common->keymap) ||
+-			     test_bit(i + 64 + 32, common->keymap)))
+-				return i + 64;
+-			if (!test_bit(i + 64 + 32, common->keymap) &&
+-			    (test_bit(i, common->keymap) ||
+-			     test_bit(i + 32, common->keymap) ||
+-			     test_bit(i + 64, common->keymap)))
+-				return i + 64 + 32;
+-		}
+-	} else {
+-		for (i = IEEE80211_WEP_NKID; i < common->keymax / 2; i++) {
+-			if (!test_bit(i, common->keymap) &&
+-			    test_bit(i + 64, common->keymap))
+-				return i;
+-			if (test_bit(i, common->keymap) &&
+-			    !test_bit(i + 64, common->keymap))
+-				return i + 64;
+-		}
+-	}
+-
+-	/* No partially used TKIP slots, pick any available slot */
+-	for (i = IEEE80211_WEP_NKID; i < common->keymax; i++) {
+-		/* Do not allow slots that could be needed for TKIP group keys
+-		 * to be used. This limitation could be removed if we know that
+-		 * TKIP will not be used. */
+-		if (i >= 64 && i < 64 + IEEE80211_WEP_NKID)
+-			continue;
+-		if (common->splitmic) {
+-			if (i >= 32 && i < 32 + IEEE80211_WEP_NKID)
+-				continue;
+-			if (i >= 64 + 32 && i < 64 + 32 + IEEE80211_WEP_NKID)
+-				continue;
+-		}
+-
+-		if (!test_bit(i, common->keymap))
+-			return i; /* Found a free slot for a key */
+-	}
+-
+-	/* No free slot found */
+-	return -1;
+-}
+-
+-static int ath_key_config(struct ath_common *common,
+-			  struct ieee80211_vif *vif,
+-			  struct ieee80211_sta *sta,
+-			  struct ieee80211_key_conf *key)
+-{
+-	struct ath_hw *ah = common->ah;
+-	struct ath9k_keyval hk;
+-	const u8 *mac = NULL;
+-	int ret = 0;
+-	int idx;
+-
+-	memset(&hk, 0, sizeof(hk));
+-
+-	switch (key->alg) {
+-	case ALG_WEP:
+-		hk.kv_type = ATH9K_CIPHER_WEP;
+-		break;
+-	case ALG_TKIP:
+-		hk.kv_type = ATH9K_CIPHER_TKIP;
+-		break;
+-	case ALG_CCMP:
+-		hk.kv_type = ATH9K_CIPHER_AES_CCM;
+-		break;
+-	default:
+-		return -EOPNOTSUPP;
+-	}
+-
+-	hk.kv_len = key->keylen;
+-	memcpy(hk.kv_val, key->key, key->keylen);
+-
+-	if (!(key->flags & IEEE80211_KEY_FLAG_PAIRWISE)) {
+-		/* For now, use the default keys for broadcast keys. This may
+-		 * need to change with virtual interfaces. */
+-		idx = key->keyidx;
+-	} else if (key->keyidx) {
+-		if (WARN_ON(!sta))
+-			return -EOPNOTSUPP;
+-		mac = sta->addr;
+-
+-		if (vif->type != NL80211_IFTYPE_AP) {
+-			/* Only keyidx 0 should be used with unicast key, but
+-			 * allow this for client mode for now. */
+-			idx = key->keyidx;
+-		} else
+-			return -EIO;
+-	} else {
+-		if (WARN_ON(!sta))
+-			return -EOPNOTSUPP;
+-		mac = sta->addr;
+-
+-		if (key->alg == ALG_TKIP)
+-			idx = ath_reserve_key_cache_slot_tkip(common);
+-		else
+-			idx = ath_reserve_key_cache_slot(common);
+-		if (idx < 0)
+-			return -ENOSPC; /* no free key cache entries */
+-	}
+-
+-	if (key->alg == ALG_TKIP)
+-		ret = ath_setkey_tkip(common, idx, key->key, &hk, mac,
+-				      vif->type == NL80211_IFTYPE_AP);
+-	else
+-		ret = ath9k_hw_set_keycache_entry(ah, idx, &hk, mac);
+-
+-	if (!ret)
+-		return -EIO;
+-
+-	set_bit(idx, common->keymap);
+-	if (key->alg == ALG_TKIP) {
+-		set_bit(idx + 64, common->keymap);
+-		if (common->splitmic) {
+-			set_bit(idx + 32, common->keymap);
+-			set_bit(idx + 64 + 32, common->keymap);
+-		}
+-	}
+-
+-	return idx;
+-}
+-
+-static void ath_key_delete(struct ath_common *common, struct ieee80211_key_conf *key)
+-{
+-	struct ath_hw *ah = common->ah;
+-
+-	ath9k_hw_keyreset(ah, key->hw_key_idx);
+-	if (key->hw_key_idx < IEEE80211_WEP_NKID)
+-		return;
+-
+-	clear_bit(key->hw_key_idx, common->keymap);
+-	if (key->alg != ALG_TKIP)
+-		return;
+-
+-	clear_bit(key->hw_key_idx + 64, common->keymap);
+-	if (common->splitmic) {
+-		ath9k_hw_keyreset(ah, key->hw_key_idx + 32);
+-		clear_bit(key->hw_key_idx + 32, common->keymap);
+-		clear_bit(key->hw_key_idx + 64 + 32, common->keymap);
+-	}
+-}
+-
+ static void ath9k_bss_assoc_info(struct ath_softc *sc,
+ 				 struct ieee80211_vif *vif,
+ 				 struct ieee80211_bss_conf *bss_conf)
+@@ -1814,7 +1586,7 @@ static int ath9k_set_key(struct ieee8021
+ 
+ 	switch (cmd) {
+ 	case SET_KEY:
+-		ret = ath_key_config(common, vif, sta, key);
++		ret = ath9k_cmn_key_config(common, vif, sta, key);
+ 		if (ret >= 0) {
+ 			key->hw_key_idx = ret;
+ 			/* push IV and Michael MIC generation to stack */
+@@ -1827,7 +1599,7 @@ static int ath9k_set_key(struct ieee8021
+ 		}
+ 		break;
+ 	case DISABLE_KEY:
+-		ath_key_delete(common, key);
++		ath9k_cmn_key_delete(common, key);
+ 		break;
+ 	default:
+ 		ret = -EINVAL;

+ 0 - 11
package/mac80211/patches/601-rt2x00-lib-use-rt2x00dev-irq.patch

@@ -1,11 +0,0 @@
---- a/drivers/net/wireless/rt2x00/rt2x00pci.c
-+++ b/drivers/net/wireless/rt2x00/rt2x00pci.c
-@@ -206,7 +206,7 @@ void rt2x00pci_uninitialize(struct rt2x0
- 	/*
- 	 * Free irq line.
- 	 */
--	free_irq(to_pci_dev(rt2x00dev->dev)->irq, rt2x00dev);
-+	free_irq(rt2x00dev->irq, rt2x00dev);
- 
- 	/*
- 	 * Free DMA

+ 0 - 0
package/mac80211/patches/602-rt2x00-remove-mcu-requests-for-soc.patch → package/mac80211/patches/601-rt2x00-remove-mcu-requests-for-soc.patch


+ 1 - 1
package/mac80211/patches/700-mwl8k-missing-pci-id-for-WNR854T.patch

@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/mwl8k.c
 +++ b/drivers/net/wireless/mwl8k.c
-@@ -3850,6 +3850,7 @@ MODULE_FIRMWARE("mwl8k/helper_8366.fw");
+@@ -3882,6 +3882,7 @@ MODULE_FIRMWARE("mwl8k/helper_8366.fw");
  MODULE_FIRMWARE("mwl8k/fmimage_8366.fw");
  
  static DEFINE_PCI_DEVICE_TABLE(mwl8k_pci_id_table) = {

Some files were not shown because too many files changed in this diff