iwlwifi: activate status ready timeout only for run time ucode
authorRon Rindjunsky <ron.rindjunsky@intel.com>
Thu, 29 May 2008 08:35:06 +0000 (16:35 +0800)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 3 Jun 2008 19:00:23 +0000 (15:00 -0400)
This patch makes driver state timeout checks on ucode alive response
only if run time ucode have been loaded.

Signed-off-by: Ron Rindjunsky <ron.rindjunsky@intel.com>
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/iwlwifi/iwl-4965.c
drivers/net/wireless/iwlwifi/iwl-5000.c
drivers/net/wireless/iwlwifi/iwl4965-base.c

index 1b3e82ff90cb0419e64cfb57b59ffbc415f9df55..3bb6ac588aafd0f50d686eae12d079f912e8dd7a 100644 (file)
@@ -156,6 +156,8 @@ static int iwl4965_load_bsm(struct iwl_priv *priv)
 
        IWL_DEBUG_INFO("Begin load bsm\n");
 
+       priv->ucode_type = UCODE_RT;
+
        /* make sure bootstrap program is no larger than BSM's SRAM size */
        if (len > IWL_MAX_BSM_SIZE)
                return -EINVAL;
@@ -221,8 +223,6 @@ static int iwl4965_load_bsm(struct iwl_priv *priv)
 
        iwl_release_nic_access(priv);
 
-       priv->ucode_type = UCODE_INIT;
-
        return 0;
 }
 
@@ -269,8 +269,6 @@ static int iwl4965_set_ucode_ptrs(struct iwl_priv *priv)
 
        IWL_DEBUG_INFO("Runtime uCode pointers are set.\n");
 
-       priv->ucode_type = UCODE_RT;
-
        return ret;
 }
 
index eb6141e6edbcda62f05cb68f8c4e71fd4c3d88fc..685a84e5a021abd7ef99827b87be2f72bd90ed09 100644 (file)
@@ -804,8 +804,11 @@ static int iwl5000_alive_notify(struct iwl_priv *priv)
 
        iwl5000_send_Xtal_calib(priv);
 
-       if (priv->ucode_type == UCODE_RT)
+       if (priv->ucode_type == UCODE_RT) {
                iwl5000_send_calib_results(priv);
+               set_bit(STATUS_READY, &priv->status);
+               priv->is_open = 1;
+       }
 
        return 0;
 }
index b3c1807234898ce3270863a119484256973c44ba..af8394c4b2dfcf430e02654914e226ef9fc21d58 100644 (file)
@@ -4074,21 +4074,23 @@ static int iwl4965_mac_start(struct ieee80211_hw *hw)
        if (test_bit(STATUS_IN_SUSPEND, &priv->status))
                return 0;
 
-       /* Wait for START_ALIVE from ucode. Otherwise callbacks from
+       /* Wait for START_ALIVE from Run Time ucode. Otherwise callbacks from
         * mac80211 will not be run successfully. */
-       ret = wait_event_interruptible_timeout(priv->wait_command_queue,
-                       test_bit(STATUS_READY, &priv->status),
-                       UCODE_READY_TIMEOUT);
-       if (!ret) {
-               if (!test_bit(STATUS_READY, &priv->status)) {
-                       IWL_ERROR("Wait for START_ALIVE timeout after %dms.\n",
-                                 jiffies_to_msecs(UCODE_READY_TIMEOUT));
-                       ret = -ETIMEDOUT;
-                       goto out_release_irq;
+       if (priv->ucode_type == UCODE_RT) {
+               ret = wait_event_interruptible_timeout(priv->wait_command_queue,
+                               test_bit(STATUS_READY, &priv->status),
+                               UCODE_READY_TIMEOUT);
+               if (!ret) {
+                       if (!test_bit(STATUS_READY, &priv->status)) {
+                               IWL_ERROR("START_ALIVE timeout after %dms.\n",
+                                       jiffies_to_msecs(UCODE_READY_TIMEOUT));
+                               ret = -ETIMEDOUT;
+                               goto out_release_irq;
+                       }
                }
-       }
 
-       priv->is_open = 1;
+               priv->is_open = 1;
+       }
        IWL_DEBUG_MAC80211("leave\n");
        return 0;