aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/ath9k/wmi.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/ath/ath9k/wmi.c')
-rw-r--r--drivers/net/wireless/ath/ath9k/wmi.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/drivers/net/wireless/ath/ath9k/wmi.c b/drivers/net/wireless/ath/ath9k/wmi.c
index 67a2f8c88829..ca533b4321bd 100644
--- a/drivers/net/wireless/ath/ath9k/wmi.c
+++ b/drivers/net/wireless/ath/ath9k/wmi.c
@@ -227,7 +227,7 @@ static void ath9k_wmi_ctrl_rx(void *priv, struct sk_buff *skb,
227 227
228 /* Check if there has been a timeout. */ 228 /* Check if there has been a timeout. */
229 spin_lock(&wmi->wmi_lock); 229 spin_lock(&wmi->wmi_lock);
230 if (cmd_id != wmi->last_cmd_id) { 230 if (be16_to_cpu(hdr->seq_no) != wmi->last_seq_id) {
231 spin_unlock(&wmi->wmi_lock); 231 spin_unlock(&wmi->wmi_lock);
232 goto free_skb; 232 goto free_skb;
233 } 233 }
@@ -275,11 +275,16 @@ static int ath9k_wmi_cmd_issue(struct wmi *wmi,
275 enum wmi_cmd_id cmd, u16 len) 275 enum wmi_cmd_id cmd, u16 len)
276{ 276{
277 struct wmi_cmd_hdr *hdr; 277 struct wmi_cmd_hdr *hdr;
278 unsigned long flags;
278 279
279 hdr = (struct wmi_cmd_hdr *) skb_push(skb, sizeof(struct wmi_cmd_hdr)); 280 hdr = (struct wmi_cmd_hdr *) skb_push(skb, sizeof(struct wmi_cmd_hdr));
280 hdr->command_id = cpu_to_be16(cmd); 281 hdr->command_id = cpu_to_be16(cmd);
281 hdr->seq_no = cpu_to_be16(++wmi->tx_seq_id); 282 hdr->seq_no = cpu_to_be16(++wmi->tx_seq_id);
282 283
284 spin_lock_irqsave(&wmi->wmi_lock, flags);
285 wmi->last_seq_id = wmi->tx_seq_id;
286 spin_unlock_irqrestore(&wmi->wmi_lock, flags);
287
283 return htc_send_epid(wmi->htc, skb, wmi->ctrl_epid); 288 return htc_send_epid(wmi->htc, skb, wmi->ctrl_epid);
284} 289}
285 290
@@ -295,7 +300,6 @@ int ath9k_wmi_cmd(struct wmi *wmi, enum wmi_cmd_id cmd_id,
295 struct sk_buff *skb; 300 struct sk_buff *skb;
296 u8 *data; 301 u8 *data;
297 int time_left, ret = 0; 302 int time_left, ret = 0;
298 unsigned long flags;
299 303
300 if (ah->ah_flags & AH_UNPLUGGED) 304 if (ah->ah_flags & AH_UNPLUGGED)
301 return 0; 305 return 0;
@@ -323,10 +327,6 @@ int ath9k_wmi_cmd(struct wmi *wmi, enum wmi_cmd_id cmd_id,
323 wmi->cmd_rsp_buf = rsp_buf; 327 wmi->cmd_rsp_buf = rsp_buf;
324 wmi->cmd_rsp_len = rsp_len; 328 wmi->cmd_rsp_len = rsp_len;
325 329
326 spin_lock_irqsave(&wmi->wmi_lock, flags);
327 wmi->last_cmd_id = cmd_id;
328 spin_unlock_irqrestore(&wmi->wmi_lock, flags);
329
330 ret = ath9k_wmi_cmd_issue(wmi, skb, cmd_id, cmd_len); 330 ret = ath9k_wmi_cmd_issue(wmi, skb, cmd_id, cmd_len);
331 if (ret) 331 if (ret)
332 goto out; 332 goto out;