浏览代码

libertas: discard DEFER responses to commands; let the timeout trigger

When the firmware returns 0x0004, it wants us to try again later. We can
achieve that simply by throwing out the response and letting the command
timeout code kick in.

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
David Woodhouse 17 年之前
父节点
当前提交
8538823f7c
共有 1 个文件被更改,包括 10 次插入0 次删除
  1. 10 0
      drivers/net/wireless/libertas/cmdresp.c

+ 10 - 0
drivers/net/wireless/libertas/cmdresp.c

@@ -665,6 +665,16 @@ int lbs_process_rx_command(struct lbs_private *priv)
 		goto done;
 	}
 
+	if (resp->result == cpu_to_le16(0x0004)) {
+		/* 0x0004 means -EAGAIN. Drop the response, let it time out
+		   and be resubmitted */
+		lbs_pr_info("Firmware returns DEFER to command %x. Will let it time out...\n",
+			    le16_to_cpu(resp->command));
+		spin_unlock_irqrestore(&priv->driver_lock, flags);
+		ret = -1;
+		goto done;
+	}
+
 	/* Now we got response from FW, cancel the command timer */
 	del_timer(&priv->command_timer);
 	priv->cmd_timed_out = 0;