wcn36xx: Track dpu signature per sta
authorPontus Fuchs <pontus.fuchs@gmail.com>
Wed, 12 Feb 2014 19:04:47 +0000 (19:04 +0000)
committerJohn W. Linville <linville@tuxdriver.com>
Thu, 13 Feb 2014 20:20:17 +0000 (15:20 -0500)
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>
drivers/net/wireless/ath/wcn36xx/smd.c
drivers/net/wireless/ath/wcn36xx/txrx.c
drivers/net/wireless/ath/wcn36xx/wcn36xx.h

index c7da55c94f31aadc98bda35ced400d31e63fe449..7bf0ef8a1f56f176e14cf0a7905410a0593362a3 100644 (file)
@@ -902,11 +902,12 @@ static int wcn36xx_smd_config_sta_rsp(struct wcn36xx *wcn,
 
        sta_priv->sta_index = params->sta_index;
        sta_priv->dpu_desc_index = params->dpu_index;
+       sta_priv->ucast_dpu_sign = params->uc_ucast_sig;
 
        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->p2p);
+                   params->uc_ucast_sig, params->p2p);
 
        return 0;
 }
index 6194c42b44eefd7cfec33ec5900e9c1422514f70..32bb26a0db2abf429de627c32aabac9f453b7227 100644 (file)
@@ -131,6 +131,7 @@ static void wcn36xx_set_tx_data(struct wcn36xx_tx_bd *bd,
                                   struct ieee80211_vif,
                                   drv_priv);
 
+               bd->dpu_sign = sta_priv->ucast_dpu_sign;
                if (vif->type == NL80211_IFTYPE_STATION) {
                        bd->sta_index = sta_priv->bss_sta_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);
                bd->sta_index = __vif_priv->self_sta_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) ||
           (sta_priv && !sta_priv->is_data_encrypted))
                bd->dpu_ne = 1;
index 644710556a978157f3659996b2a71a32ee0d81d0..f0fb81dfd17b9d8547f2925d85cf007207f305f8 100644 (file)
@@ -159,6 +159,7 @@ struct wcn36xx_sta {
        u16 tid;
        u8 sta_index;
        u8 dpu_desc_index;
+       u8 ucast_dpu_sign;
        u8 bss_sta_index;
        u8 bss_dpu_desc_index;
        bool is_data_encrypted;