OSDN Git Service

mac80211: wait for beacon before enabling powersave
[uclinux-h8/linux.git] / drivers / net / wireless / mwl8k.c
index 68546ca..f0f08f3 100644 (file)
@@ -3881,12 +3881,16 @@ static void mwl8k_finalize_join_worker(struct work_struct *work)
        struct mwl8k_priv *priv =
                container_of(work, struct mwl8k_priv, finalize_join_worker);
        struct sk_buff *skb = priv->beacon_skb;
-       struct mwl8k_vif *mwl8k_vif;
+       struct ieee80211_mgmt *mgmt = (void *)skb->data;
+       int len = skb->len - offsetof(struct ieee80211_mgmt, u.beacon.variable);
+       const u8 *tim = cfg80211_find_ie(WLAN_EID_TIM,
+                                        mgmt->u.beacon.variable, len);
+       int dtim_period = 1;
+
+       if (tim && tim[1] >= 2)
+               dtim_period = tim[3];
 
-       mwl8k_vif = mwl8k_first_vif(priv);
-       if (mwl8k_vif != NULL)
-               mwl8k_cmd_finalize_join(priv->hw, skb->data, skb->len,
-                                       mwl8k_vif->vif->bss_conf.dtim_period);
+       mwl8k_cmd_finalize_join(priv->hw, skb->data, skb->len, dtim_period);
 
        dev_kfree_skb(skb);
        priv->beacon_skb = NULL;