diff options
| author | Pontus Fuchs <pontus.fuchs@gmail.com> | 2014-02-12 14:04:47 -0500 |
|---|---|---|
| committer | John W. Linville <linville@tuxdriver.com> | 2014-02-13 15:20:17 -0500 |
| commit | 82cad2a0b047bf4ee3e6088944ab0199a009bcdb (patch) | |
| tree | 9025576aa0f337fbd756478a18586e7a3515b6e9 | |
| parent | 2ba0b46175967a40773f8be15f6678307fa3f45a (diff) | |
wcn36xx: Track dpu signature per sta
This fixes problems seen with multiple softap clients and reconnecting
softap clients.
Signed-off-by: Pontus Fuchs <pontus.fuchs@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
| -rw-r--r-- | drivers/net/wireless/ath/wcn36xx/smd.c | 5 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/wcn36xx/txrx.c | 4 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/wcn36xx/wcn36xx.h | 1 |
3 files changed, 6 insertions, 4 deletions
diff --git a/drivers/net/wireless/ath/wcn36xx/smd.c b/drivers/net/wireless/ath/wcn36xx/smd.c index c7da55c94f31..7bf0ef8a1f56 100644 --- a/drivers/net/wireless/ath/wcn36xx/smd.c +++ b/drivers/net/wireless/ath/wcn36xx/smd.c | |||
| @@ -902,11 +902,12 @@ static int wcn36xx_smd_config_sta_rsp(struct wcn36xx *wcn, | |||
| 902 | 902 | ||
| 903 | sta_priv->sta_index = params->sta_index; | 903 | sta_priv->sta_index = params->sta_index; |
| 904 | sta_priv->dpu_desc_index = params->dpu_index; | 904 | sta_priv->dpu_desc_index = params->dpu_index; |
| 905 | sta_priv->ucast_dpu_sign = params->uc_ucast_sig; | ||
| 905 | 906 | ||
| 906 | wcn36xx_dbg(WCN36XX_DBG_HAL, | 907 | wcn36xx_dbg(WCN36XX_DBG_HAL, |
| 907 | "hal config sta rsp status %d sta_index %d bssid_index %d p2p %d\n", | 908 | "hal config sta rsp status %d sta_index %d bssid_index %d uc_ucast_sig %d p2p %d\n", |
| 908 | params->status, params->sta_index, params->bssid_index, | 909 | params->status, params->sta_index, params->bssid_index, |
| 909 | params->p2p); | 910 | params->uc_ucast_sig, params->p2p); |
| 910 | 911 | ||
| 911 | return 0; | 912 | return 0; |
| 912 | } | 913 | } |
diff --git a/drivers/net/wireless/ath/wcn36xx/txrx.c b/drivers/net/wireless/ath/wcn36xx/txrx.c index 6194c42b44ee..32bb26a0db2a 100644 --- a/drivers/net/wireless/ath/wcn36xx/txrx.c +++ b/drivers/net/wireless/ath/wcn36xx/txrx.c | |||
| @@ -131,6 +131,7 @@ static void wcn36xx_set_tx_data(struct wcn36xx_tx_bd *bd, | |||
| 131 | struct ieee80211_vif, | 131 | struct ieee80211_vif, |
| 132 | drv_priv); | 132 | drv_priv); |
| 133 | 133 | ||
| 134 | bd->dpu_sign = sta_priv->ucast_dpu_sign; | ||
| 134 | if (vif->type == NL80211_IFTYPE_STATION) { | 135 | if (vif->type == NL80211_IFTYPE_STATION) { |
| 135 | bd->sta_index = sta_priv->bss_sta_index; | 136 | bd->sta_index = sta_priv->bss_sta_index; |
| 136 | bd->dpu_desc_idx = sta_priv->bss_dpu_desc_index; | 137 | bd->dpu_desc_idx = sta_priv->bss_dpu_desc_index; |
| @@ -144,10 +145,9 @@ static void wcn36xx_set_tx_data(struct wcn36xx_tx_bd *bd, | |||
| 144 | __vif_priv = get_vif_by_addr(wcn, hdr->addr2); | 145 | __vif_priv = get_vif_by_addr(wcn, hdr->addr2); |
| 145 | bd->sta_index = __vif_priv->self_sta_index; | 146 | bd->sta_index = __vif_priv->self_sta_index; |
| 146 | bd->dpu_desc_idx = __vif_priv->self_dpu_desc_index; | 147 | bd->dpu_desc_idx = __vif_priv->self_dpu_desc_index; |
| 148 | bd->dpu_sign = __vif_priv->self_ucast_dpu_sign; | ||
| 147 | } | 149 | } |
| 148 | 150 | ||
| 149 | bd->dpu_sign = __vif_priv->self_ucast_dpu_sign; | ||
| 150 | |||
| 151 | if (ieee80211_is_nullfunc(hdr->frame_control) || | 151 | if (ieee80211_is_nullfunc(hdr->frame_control) || |
| 152 | (sta_priv && !sta_priv->is_data_encrypted)) | 152 | (sta_priv && !sta_priv->is_data_encrypted)) |
| 153 | bd->dpu_ne = 1; | 153 | bd->dpu_ne = 1; |
diff --git a/drivers/net/wireless/ath/wcn36xx/wcn36xx.h b/drivers/net/wireless/ath/wcn36xx/wcn36xx.h index 644710556a97..f0fb81dfd17b 100644 --- a/drivers/net/wireless/ath/wcn36xx/wcn36xx.h +++ b/drivers/net/wireless/ath/wcn36xx/wcn36xx.h | |||
| @@ -159,6 +159,7 @@ struct wcn36xx_sta { | |||
| 159 | u16 tid; | 159 | u16 tid; |
| 160 | u8 sta_index; | 160 | u8 sta_index; |
| 161 | u8 dpu_desc_index; | 161 | u8 dpu_desc_index; |
| 162 | u8 ucast_dpu_sign; | ||
| 162 | u8 bss_sta_index; | 163 | u8 bss_sta_index; |
| 163 | u8 bss_dpu_desc_index; | 164 | u8 bss_dpu_desc_index; |
| 164 | bool is_data_encrypted; | 165 | bool is_data_encrypted; |
