[PATCH 1/2] Configure bss when encryption is set
Eugene Krasnikov
k.eugene.e at gmail.com
Wed Jun 26 05:27:48 EDT 2013
Before setting keys update HW with encryption type.
Signed-off-by: Eugene Krasnikov <k.eugene.e at gmail.com>
---
main.c | 21 ++++++++++++++-------
smd.c | 2 +-
wcn36xx.h | 2 +-
3 files changed, 16 insertions(+), 9 deletions(-)
diff --git a/main.c b/main.c
index 00d6931..cd8d525 100644
--- a/main.c
+++ b/main.c
@@ -355,7 +355,6 @@ static int wcn36xx_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
{
struct wcn36xx *wcn = hw->priv;
int ret = 0;
- enum ani_ed_type enc_type;
wcn36xx_dbg(WCN36XX_DBG_MAC, "mac80211 set key");
wcn36xx_dbg(WCN36XX_DBG_MAC, "Key: cmd=0x%x algo:0x%x, "
"id:%d, len:%d flags 0x%x",
@@ -367,10 +366,10 @@ static int wcn36xx_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
switch (key_conf->cipher) {
case WLAN_CIPHER_SUITE_CCMP:
- enc_type = WCN36XX_HAL_ED_CCMP;
+ wcn->encrypt_type = WCN36XX_HAL_ED_CCMP;
break;
case WLAN_CIPHER_SUITE_TKIP:
- enc_type = WCN36XX_HAL_ED_TKIP;
+ wcn->encrypt_type = WCN36XX_HAL_ED_TKIP;
break;
default:
wcn36xx_error("Unsupported key type 0x%x",
@@ -382,16 +381,24 @@ static int wcn36xx_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
switch (cmd) {
case SET_KEY:
+ /* Reconfigure bss with encrypt_type */
+ if (IEEE80211_KEY_FLAG_PAIRWISE & key_conf->flags)
+ wcn36xx_smd_config_bss(wcn,
+ NL80211_IFTYPE_STATION,
+ sta->addr,
+ true,
+ wcn->beacon_interval);
+
if (WCN36XX_STA_KEY == wcn->en_state) {
wcn36xx_smd_set_stakey(wcn,
- enc_type,
+ wcn->encrypt_type,
key_conf->keyidx,
key_conf->keylen,
key_conf->key);
wcn->en_state = WCN36XX_BSS_KEY;
} else {
wcn36xx_smd_set_bsskey(wcn,
- enc_type,
+ wcn->encrypt_type,
key_conf->keyidx,
key_conf->keylen,
key_conf->key);
@@ -400,14 +407,14 @@ static int wcn36xx_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
case DISABLE_KEY:
if (WCN36XX_BSS_KEY == wcn->en_state) {
wcn36xx_smd_remove_bsskey(wcn,
- enc_type,
+ wcn->encrypt_type,
key_conf->keyidx);
wcn->en_state = WCN36XX_STA_KEY;
} else {
/* do not remove key if disassociated */
if (wcn->aid)
wcn36xx_smd_remove_stakey(wcn,
- enc_type,
+ wcn->encrypt_type,
key_conf->keyidx);
}
break;
diff --git a/smd.c b/smd.c
index 2bb272a..1f64a67 100644
--- a/smd.c
+++ b/smd.c
@@ -763,7 +763,7 @@ int wcn36xx_smd_config_bss(struct wcn36xx *wcn, enum nl80211_iftype type,
sizeof(wcn->supported_rates));
sta->rmf = 0;
- sta->encrypt_type = 0;
+ sta->encrypt_type = wcn->encrypt_type;
sta->action = 0;
sta->uapsd = 0;
sta->max_sp_len = 0;
diff --git a/wcn36xx.h b/wcn36xx.h
index a81ef84..c0bf667 100644
--- a/wcn36xx.h
+++ b/wcn36xx.h
@@ -116,7 +116,7 @@ struct wcn36xx {
u16 aid;
struct wcn36xx_vif *current_vif;
u16 beacon_interval;
-
+ enum ani_ed_type encrypt_type;
u8 fw_revision;
u8 fw_version;
u8 fw_minor;
--
1.7.11.3
More information about the wcn36xx
mailing list