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>
This commit is contained in:
Arik Nemtsov 2011-04-18 14:15:23 +03:00 committed by Luciano Coelho
parent 521a4a2326
commit f482b76202
1 changed files with 6 additions and 3 deletions

View File

@ -76,7 +76,7 @@ int wl1271_cmd_send(struct wl1271 *wl, u16 id, void *buf, size_t len,
if (time_after(jiffies, timeout)) { if (time_after(jiffies, timeout)) {
wl1271_error("command complete timeout"); wl1271_error("command complete timeout");
ret = -ETIMEDOUT; ret = -ETIMEDOUT;
goto out; goto fail;
} }
poll_count++; poll_count++;
@ -96,14 +96,17 @@ int wl1271_cmd_send(struct wl1271 *wl, u16 id, void *buf, size_t len,
status = le16_to_cpu(cmd->status); status = le16_to_cpu(cmd->status);
if (status != CMD_STATUS_SUCCESS) { if (status != CMD_STATUS_SUCCESS) {
wl1271_error("command execute failure %d", status); wl1271_error("command execute failure %d", status);
ieee80211_queue_work(wl->hw, &wl->recovery_work);
ret = -EIO; ret = -EIO;
goto fail;
} }
wl1271_write32(wl, ACX_REG_INTERRUPT_ACK, wl1271_write32(wl, ACX_REG_INTERRUPT_ACK,
WL1271_ACX_INTR_CMD_COMPLETE); WL1271_ACX_INTR_CMD_COMPLETE);
return 0;
out: fail:
WARN_ON(1);
ieee80211_queue_work(wl->hw, &wl->recovery_work);
return ret; return ret;
} }