Browse Source

rt2x00: Correctly initialize AID during set_key()

Request the AID from hardware and provide this id
to the driver (in case they need it).

Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Ivo van Doorn 16 years ago
parent
commit
73a5267087
1 changed files with 12 additions and 0 deletions
  1. 12 0
      drivers/net/wireless/rt2x00/rt2x00mac.c

+ 12 - 0
drivers/net/wireless/rt2x00/rt2x00mac.c

@@ -487,6 +487,7 @@ int rt2x00mac_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
 		      struct ieee80211_key_conf *key)
 {
 	struct rt2x00_dev *rt2x00dev = hw->priv;
+	struct ieee80211_sta *sta;
 	int (*set_key) (struct rt2x00_dev *rt2x00dev,
 			struct rt2x00lib_crypto *crypto,
 			struct ieee80211_key_conf *key);
@@ -536,6 +537,17 @@ int rt2x00mac_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
 	} else
 		memcpy(&crypto.key, &key->key[0], key->keylen);
 
+	/*
+	 * Discover the Association ID from mac80211.
+	 * Some drivers need this information when updating the
+	 * hardware key (either adding or removing).
+	 */
+	rcu_read_lock();
+	sta = ieee80211_find_sta(hw, address);
+	if (sta)
+		crypto.aid = sta->aid;
+	rcu_read_unlock();
+
 	/*
 	 * Each BSS has a maximum of 4 shared keys.
 	 * Shared key index values: