diff options
author | Arik Nemtsov <arik@wizery.com> | 2011-04-18 07:15:23 -0400 |
---|---|---|
committer | Luciano Coelho <coelho@ti.com> | 2011-05-02 03:31:03 -0400 |
commit | f482b76202f4ac0f62a77b0e55ac1a1cfe480e2b (patch) | |
tree | 66e05222e0298a33097d6a75fd3970f86024fac7 | |
parent | 521a4a23261354885c01bf75b42150629004ed83 (diff) |
wl12xx: schedule recovery on command timeout
We use a long timeout (2 seconds) when sending commands to the FW.
When a command times out, it means the FW is stuck, and we should
commence recovery.
This should make recovery times shorter as we'll recover on the first
timeout indication.
Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
-rw-r--r-- | drivers/net/wireless/wl12xx/cmd.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/net/wireless/wl12xx/cmd.c b/drivers/net/wireless/wl12xx/cmd.c index a9ffdd86f9b8..d8596ae3a64f 100644 --- a/drivers/net/wireless/wl12xx/cmd.c +++ b/drivers/net/wireless/wl12xx/cmd.c | |||
@@ -76,7 +76,7 @@ int wl1271_cmd_send(struct wl1271 *wl, u16 id, void *buf, size_t len, | |||
76 | if (time_after(jiffies, timeout)) { | 76 | if (time_after(jiffies, timeout)) { |
77 | wl1271_error("command complete timeout"); | 77 | wl1271_error("command complete timeout"); |
78 | ret = -ETIMEDOUT; | 78 | ret = -ETIMEDOUT; |
79 | goto out; | 79 | goto fail; |
80 | } | 80 | } |
81 | 81 | ||
82 | poll_count++; | 82 | poll_count++; |
@@ -96,14 +96,17 @@ int wl1271_cmd_send(struct wl1271 *wl, u16 id, void *buf, size_t len, | |||
96 | status = le16_to_cpu(cmd->status); | 96 | status = le16_to_cpu(cmd->status); |
97 | if (status != CMD_STATUS_SUCCESS) { | 97 | if (status != CMD_STATUS_SUCCESS) { |
98 | wl1271_error("command execute failure %d", status); | 98 | wl1271_error("command execute failure %d", status); |
99 | ieee80211_queue_work(wl->hw, &wl->recovery_work); | ||
100 | ret = -EIO; | 99 | ret = -EIO; |
100 | goto fail; | ||
101 | } | 101 | } |
102 | 102 | ||
103 | wl1271_write32(wl, ACX_REG_INTERRUPT_ACK, | 103 | wl1271_write32(wl, ACX_REG_INTERRUPT_ACK, |
104 | WL1271_ACX_INTR_CMD_COMPLETE); | 104 | WL1271_ACX_INTR_CMD_COMPLETE); |
105 | return 0; | ||
105 | 106 | ||
106 | out: | 107 | fail: |
108 | WARN_ON(1); | ||
109 | ieee80211_queue_work(wl->hw, &wl->recovery_work); | ||
107 | return ret; | 110 | return ret; |
108 | } | 111 | } |
109 | 112 | ||