diff options
author | nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2011-04-20 18:14:35 +0000 |
---|---|---|
committer | nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2011-04-20 18:14:35 +0000 |
commit | 83ef4a5fc6aa15e649ac8e18113ef2d41888039b (patch) | |
tree | f19cbced5cf203a403fd0ff0f146c034c8b79490 /package/mac80211/patches/571-ath9k_assign_unencrypted_ps_keyidx.patch | |
parent | 2be8e603e027c718d8fc66c352c861d3dc9bb662 (diff) |
mac80211: update to wireless-testing 2011-04-19, contains several beacon related fixes for ath9k
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@26744 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/mac80211/patches/571-ath9k_assign_unencrypted_ps_keyidx.patch')
-rw-r--r-- | package/mac80211/patches/571-ath9k_assign_unencrypted_ps_keyidx.patch | 119 |
1 files changed, 0 insertions, 119 deletions
diff --git a/package/mac80211/patches/571-ath9k_assign_unencrypted_ps_keyidx.patch b/package/mac80211/patches/571-ath9k_assign_unencrypted_ps_keyidx.patch deleted file mode 100644 index 7996f33f6..000000000 --- a/package/mac80211/patches/571-ath9k_assign_unencrypted_ps_keyidx.patch +++ /dev/null @@ -1,119 +0,0 @@ ---- a/drivers/net/wireless/ath/ath9k/ath9k.h -+++ b/drivers/net/wireless/ath/ath9k/ath9k.h -@@ -256,6 +256,8 @@ struct ath_node { - #endif - struct ath_atx_tid tid[WME_NUM_TID]; - struct ath_atx_ac ac[WME_NUM_AC]; -+ int ps_key; -+ - u16 maxampdu; - u8 mpdudensity; - ---- a/drivers/net/wireless/ath/ath9k/main.c -+++ b/drivers/net/wireless/ath/ath9k/main.c -@@ -1775,18 +1775,37 @@ static int ath9k_sta_add(struct ieee8021 - struct ieee80211_sta *sta) - { - struct ath_softc *sc = hw->priv; -+ struct ath_common *common = ath9k_hw_common(sc->sc_ah); -+ struct ath_node *an = (struct ath_node *) sta->drv_priv; -+ struct ieee80211_key_conf ps_key = { }; - - ath_node_attach(sc, sta); -+ an->ps_key = ath_key_config(common, vif, sta, &ps_key); - - return 0; - } - -+static void ath9k_del_ps_key(struct ath_softc *sc, -+ struct ieee80211_vif *vif, -+ struct ieee80211_sta *sta) -+{ -+ struct ath_common *common = ath9k_hw_common(sc->sc_ah); -+ struct ath_node *an = (struct ath_node *) sta->drv_priv; -+ struct ieee80211_key_conf ps_key = { .hw_key_idx = an->ps_key }; -+ -+ if (!an->ps_key) -+ return; -+ -+ ath_key_delete(common, &ps_key); -+} -+ - static int ath9k_sta_remove(struct ieee80211_hw *hw, - struct ieee80211_vif *vif, - struct ieee80211_sta *sta) - { - struct ath_softc *sc = hw->priv; - -+ ath9k_del_ps_key(sc, vif, sta); - ath_node_detach(sc, sta); - - return 0; -@@ -1889,6 +1908,9 @@ static int ath9k_set_key(struct ieee8021 - - switch (cmd) { - case SET_KEY: -+ if (sta) -+ ath9k_del_ps_key(sc, vif, sta); -+ - ret = ath_key_config(common, vif, sta, key); - if (ret >= 0) { - key->hw_key_idx = ret; ---- a/drivers/net/wireless/ath/key.c -+++ b/drivers/net/wireless/ath/key.c -@@ -483,6 +483,9 @@ int ath_key_config(struct ath_common *co - memset(&hk, 0, sizeof(hk)); - - switch (key->cipher) { -+ case 0: -+ hk.kv_type = ATH_CIPHER_CLR; -+ break; - case WLAN_CIPHER_SUITE_WEP40: - case WLAN_CIPHER_SUITE_WEP104: - hk.kv_type = ATH_CIPHER_WEP; -@@ -498,7 +501,8 @@ int ath_key_config(struct ath_common *co - } - - hk.kv_len = key->keylen; -- memcpy(hk.kv_val, key->key, key->keylen); -+ if (key->keylen) -+ memcpy(hk.kv_val, key->key, key->keylen); - - if (!(key->flags & IEEE80211_KEY_FLAG_PAIRWISE)) { - switch (vif->type) { ---- a/drivers/net/wireless/ath/ath9k/xmit.c -+++ b/drivers/net/wireless/ath/ath9k/xmit.c -@@ -1526,7 +1526,7 @@ static void setup_frame_info(struct ieee - struct ieee80211_key_conf *hw_key = tx_info->control.hw_key; - struct ieee80211_hdr *hdr; - struct ath_frame_info *fi = get_frame_info(skb); -- struct ath_node *an; -+ struct ath_node *an = NULL; - struct ath_atx_tid *tid; - enum ath9k_key_type keytype; - u16 seqno = 0; -@@ -1534,11 +1534,13 @@ static void setup_frame_info(struct ieee - - keytype = ath9k_cmn_get_hw_crypto_keytype(skb); - -+ if (sta) -+ an = (struct ath_node *) sta->drv_priv; -+ - hdr = (struct ieee80211_hdr *)skb->data; -- if (sta && ieee80211_is_data_qos(hdr->frame_control) && -+ if (an && ieee80211_is_data_qos(hdr->frame_control) && - conf_is_ht(&hw->conf) && (sc->sc_flags & SC_OP_TXAGGR)) { - -- an = (struct ath_node *) sta->drv_priv; - tidno = ieee80211_get_qos_ctl(hdr)[0] & IEEE80211_QOS_CTL_TID_MASK; - - /* -@@ -1554,6 +1556,8 @@ static void setup_frame_info(struct ieee - memset(fi, 0, sizeof(*fi)); - if (hw_key) - fi->keyix = hw_key->hw_key_idx; -+ else if (an && ieee80211_is_data(hdr->frame_control) && an->ps_key > 0) -+ fi->keyix = an->ps_key; - else - fi->keyix = ATH9K_TXKEYIX_INVALID; - fi->keytype = keytype; |