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>
This commit is contained in:
Pontus Fuchs 2014-02-12 19:04:47 +00:00 committed by John W. Linville
parent 2ba0b46175
commit 82cad2a0b0
3 changed files with 6 additions and 4 deletions

View File

@ -902,11 +902,12 @@ static int wcn36xx_smd_config_sta_rsp(struct wcn36xx *wcn,
sta_priv->sta_index = params->sta_index; sta_priv->sta_index = params->sta_index;
sta_priv->dpu_desc_index = params->dpu_index; sta_priv->dpu_desc_index = params->dpu_index;
sta_priv->ucast_dpu_sign = params->uc_ucast_sig;
wcn36xx_dbg(WCN36XX_DBG_HAL, wcn36xx_dbg(WCN36XX_DBG_HAL,
"hal config sta rsp status %d sta_index %d bssid_index %d p2p %d\n", "hal config sta rsp status %d sta_index %d bssid_index %d uc_ucast_sig %d p2p %d\n",
params->status, params->sta_index, params->bssid_index, params->status, params->sta_index, params->bssid_index,
params->p2p); params->uc_ucast_sig, params->p2p);
return 0; return 0;
} }

View File

@ -131,6 +131,7 @@ static void wcn36xx_set_tx_data(struct wcn36xx_tx_bd *bd,
struct ieee80211_vif, struct ieee80211_vif,
drv_priv); drv_priv);
bd->dpu_sign = sta_priv->ucast_dpu_sign;
if (vif->type == NL80211_IFTYPE_STATION) { if (vif->type == NL80211_IFTYPE_STATION) {
bd->sta_index = sta_priv->bss_sta_index; bd->sta_index = sta_priv->bss_sta_index;
bd->dpu_desc_idx = sta_priv->bss_dpu_desc_index; 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,
__vif_priv = get_vif_by_addr(wcn, hdr->addr2); __vif_priv = get_vif_by_addr(wcn, hdr->addr2);
bd->sta_index = __vif_priv->self_sta_index; bd->sta_index = __vif_priv->self_sta_index;
bd->dpu_desc_idx = __vif_priv->self_dpu_desc_index; bd->dpu_desc_idx = __vif_priv->self_dpu_desc_index;
bd->dpu_sign = __vif_priv->self_ucast_dpu_sign;
} }
bd->dpu_sign = __vif_priv->self_ucast_dpu_sign;
if (ieee80211_is_nullfunc(hdr->frame_control) || if (ieee80211_is_nullfunc(hdr->frame_control) ||
(sta_priv && !sta_priv->is_data_encrypted)) (sta_priv && !sta_priv->is_data_encrypted))
bd->dpu_ne = 1; bd->dpu_ne = 1;

View File

@ -159,6 +159,7 @@ struct wcn36xx_sta {
u16 tid; u16 tid;
u8 sta_index; u8 sta_index;
u8 dpu_desc_index; u8 dpu_desc_index;
u8 ucast_dpu_sign;
u8 bss_sta_index; u8 bss_sta_index;
u8 bss_dpu_desc_index; u8 bss_dpu_desc_index;
bool is_data_encrypted; bool is_data_encrypted;