mwifiex: store permanant mac address in adapter structure
[deliverable/linux.git] / drivers / net / wireless / mwifiex / main.c
index 2568395f02760e92da0d963449620f8422c30a21..cb9cab2b0ec0a2990e9f3774e736bb93e4c167a6 100644 (file)
@@ -83,9 +83,8 @@ static int mwifiex_register(void *card, struct mwifiex_if_ops *if_ops,
        }
        mwifiex_init_lock_list(adapter);
 
-       init_timer(&adapter->cmd_timer);
-       adapter->cmd_timer.function = mwifiex_cmd_timeout_func;
-       adapter->cmd_timer.data = (unsigned long) adapter;
+       setup_timer(&adapter->cmd_timer, mwifiex_cmd_timeout_func,
+                   (unsigned long)adapter);
 
        return 0;
 
@@ -237,6 +236,7 @@ process_start:
                    (is_command_pending(adapter) ||
                     !mwifiex_wmm_lists_empty(adapter))) {
                        adapter->pm_wakeup_fw_try = true;
+                       mod_timer(&adapter->wakeup_timer, jiffies + (HZ*3));
                        adapter->if_ops.wakeup(adapter);
                        continue;
                }
@@ -244,6 +244,7 @@ process_start:
                if (IS_CARD_RX_RCVD(adapter)) {
                        adapter->data_received = false;
                        adapter->pm_wakeup_fw_try = false;
+                       del_timer_sync(&adapter->wakeup_timer);
                        if (adapter->ps_state == PS_STATE_SLEEP)
                                adapter->ps_state = PS_STATE_AWAKE;
                } else {
@@ -561,7 +562,8 @@ static int mwifiex_init_hw_fw(struct mwifiex_adapter *adapter)
 static int
 mwifiex_open(struct net_device *dev)
 {
-       netif_tx_start_all_queues(dev);
+       netif_carrier_off(dev);
+
        return 0;
 }
 
@@ -966,7 +968,6 @@ void mwifiex_init_priv_params(struct mwifiex_private *priv,
        /* Initialize private structure */
        priv->current_key_index = 0;
        priv->media_connected = false;
-       memset(&priv->nick_name, 0, sizeof(priv->nick_name));
        memset(priv->mgmt_ie, 0,
               sizeof(struct mwifiex_ie) * MAX_MGMT_IE_INDEX);
        priv->beacon_idx = MWIFIEX_AUTO_IDX_MASK;
@@ -974,6 +975,7 @@ void mwifiex_init_priv_params(struct mwifiex_private *priv,
        priv->assocresp_idx = MWIFIEX_AUTO_IDX_MASK;
        priv->rsn_idx = MWIFIEX_AUTO_IDX_MASK;
        priv->num_tx_timeout = 0;
+       ether_addr_copy(priv->curr_addr, priv->adapter->perm_addr);
        memcpy(dev->dev_addr, priv->curr_addr, ETH_ALEN);
 
        if (GET_BSS_ROLE(priv) == MWIFIEX_BSS_ROLE_STA ||
@@ -1166,6 +1168,8 @@ int mwifiex_remove_card(struct mwifiex_adapter *adapter, struct semaphore *sem)
 
        adapter->surprise_removed = true;
 
+       mwifiex_terminate_workqueue(adapter);
+
        /* Stop data */
        for (i = 0; i < adapter->priv_num; i++) {
                priv = adapter->priv[i];
@@ -1200,16 +1204,15 @@ int mwifiex_remove_card(struct mwifiex_adapter *adapter, struct semaphore *sem)
                        continue;
 
                rtnl_lock();
-               if (priv->wdev && priv->netdev)
-                       mwifiex_del_virtual_intf(adapter->wiphy, priv->wdev);
+               if (priv->netdev &&
+                   priv->wdev.iftype != NL80211_IFTYPE_UNSPECIFIED)
+                       mwifiex_del_virtual_intf(adapter->wiphy, &priv->wdev);
                rtnl_unlock();
        }
 
        wiphy_unregister(adapter->wiphy);
        wiphy_free(adapter->wiphy);
 
-       mwifiex_terminate_workqueue(adapter);
-
        /* Unregister device */
        dev_dbg(adapter->dev, "info: unregister device\n");
        if (adapter->if_ops.unregister_dev)
This page took 0.041266 seconds and 5 git commands to generate.