Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=18c52e7c3e3d0e7fbddd0334b58030bb89554cb9
Commit:     18c52e7c3e3d0e7fbddd0334b58030bb89554cb9
Parent:     8538823f7c692c98e8b7e19cb580faa56e25e89f
Author:     David Woodhouse <[EMAIL PROTECTED]>
AuthorDate: Mon Dec 17 16:03:58 2007 -0500
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Mon Jan 28 15:07:46 2008 -0800

    libertas: make lbs_submit_command always 'succeed' and set command timer
    
    Even if it fails, we want to wait a while and try again, with an
    ultimate timeout if it the condition persists. So again, just use the
    standard command timeout behaviour.
    
    Signed-off-by: David Woodhouse <[EMAIL PROTECTED]>
    Signed-off-by: John W. Linville <[EMAIL PROTECTED]>
---
 drivers/net/wireless/libertas/cmd.c |   42 ++++++++++++++++------------------
 1 files changed, 20 insertions(+), 22 deletions(-)

diff --git a/drivers/net/wireless/libertas/cmd.c 
b/drivers/net/wireless/libertas/cmd.c
index 10c60ba..0ae9851 100644
--- a/drivers/net/wireless/libertas/cmd.c
+++ b/drivers/net/wireless/libertas/cmd.c
@@ -1199,14 +1199,15 @@ done:
        lbs_deb_leave(LBS_DEB_HOST);
 }
 
-static int lbs_submit_command(struct lbs_private *priv,
-                             struct cmd_ctrl_node *cmdnode)
+static void lbs_submit_command(struct lbs_private *priv,
+                              struct cmd_ctrl_node *cmdnode)
 {
        unsigned long flags;
        struct cmd_header *cmd;
-       int ret = -1;
-       u16 cmdsize;
-       u16 command;
+       uint16_t cmdsize;
+       uint16_t command;
+       int timeo = 5 * HZ;
+       int ret;
 
        lbs_deb_enter(LBS_DEB_HOST);
 
@@ -1220,33 +1221,30 @@ static int lbs_submit_command(struct lbs_private *priv,
        cmdsize = le16_to_cpu(cmd->size);
        command = le16_to_cpu(cmd->command);
 
+       /* These commands take longer */
+       if (command == CMD_802_11_SCAN || command == CMD_802_11_ASSOCIATE ||
+           command == CMD_802_11_AUTHENTICATE)
+               timeo = 10 * HZ;
+
        lbs_deb_host("DNLD_CMD: command 0x%04x, seq %d, size %d, jiffies %lu\n",
                     command, le16_to_cpu(cmd->seqnum), cmdsize, jiffies);
        lbs_deb_hex(LBS_DEB_HOST, "DNLD_CMD", (void *) cmdnode->cmdbuf, 
cmdsize);
 
        ret = priv->hw_host_to_card(priv, MVMS_CMD, (u8 *) cmd, cmdsize);
+
        if (ret) {
                lbs_pr_info("DNLD_CMD: hw_host_to_card failed: %d\n", ret);
-               spin_lock_irqsave(&priv->driver_lock, flags);
-               lbs_complete_command(priv, priv->cur_cmd, ret);
-               spin_unlock_irqrestore(&priv->driver_lock, flags);
-               goto done;
-       }
-
-       lbs_deb_cmd("DNLD_CMD: sent command 0x%04x, jiffies %lu\n", command, 
jiffies);
+               /* Let the timer kick in and retry, and potentially reset
+                  the whole thing if the condition persists */
+               timeo = HZ;
+       } else
+               lbs_deb_cmd("DNLD_CMD: sent command 0x%04x, jiffies %lu\n",
+                           command, jiffies);
 
        /* Setup the timer after transmit command */
-       if (command == CMD_802_11_SCAN || command == CMD_802_11_AUTHENTICATE
-           || command == CMD_802_11_ASSOCIATE)
-               mod_timer(&priv->command_timer, jiffies + (10*HZ));
-       else
-               mod_timer(&priv->command_timer, jiffies + (5*HZ));
-
-       ret = 0;
+       mod_timer(&priv->command_timer, jiffies + timeo);
 
-done:
-       lbs_deb_leave_args(LBS_DEB_HOST, "ret %d", ret);
-       return ret;
+       lbs_deb_leave(LBS_DEB_HOST);
 }
 
 static int lbs_cmd_mac_control(struct lbs_private *priv,
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to