aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/libertas/cmdresp.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/libertas/cmdresp.c')
-rw-r--r--drivers/net/wireless/libertas/cmdresp.c23
1 files changed, 8 insertions, 15 deletions
diff --git a/drivers/net/wireless/libertas/cmdresp.c b/drivers/net/wireless/libertas/cmdresp.c
index 22a697363381..20ca38c7f870 100644
--- a/drivers/net/wireless/libertas/cmdresp.c
+++ b/drivers/net/wireless/libertas/cmdresp.c
@@ -880,22 +880,15 @@ int lbs_process_rx_command(struct lbs_private *priv)
880 goto done; 880 goto done;
881 } 881 }
882 882
883 if (adapter->cur_cmd->pdata_size) { 883 spin_unlock_irqrestore(&adapter->driver_lock, flags);
884 struct cmd_ds_gen *r = (struct cmd_ds_gen *)resp; 884
885 u16 sz = cpu_to_le16(resp->size) - S_DS_GEN; 885 if (adapter->cur_cmd && adapter->cur_cmd->callback)
886 if (sz > *adapter->cur_cmd->pdata_size) { 886 ret = adapter->cur_cmd->callback(respcmd, resp, priv);
887 lbs_pr_err("response 0x%04x doesn't fit into " 887 else
888 "buffer (%d > %d)\n", respcmd,
889 sz, *adapter->cur_cmd->pdata_size);
890 sz = *adapter->cur_cmd->pdata_size;
891 }
892 memcpy(adapter->cur_cmd->pdata_buf, r->cmdresp, sz);
893 *adapter->cur_cmd->pdata_size = sz;
894 } else {
895 spin_unlock_irqrestore(&adapter->driver_lock, flags);
896 ret = handle_cmd_response(respcmd, resp, priv); 888 ret = handle_cmd_response(respcmd, resp, priv);
897 spin_lock_irqsave(&adapter->driver_lock, flags); 889
898 } 890 spin_lock_irqsave(&adapter->driver_lock, flags);
891
899 if (adapter->cur_cmd) { 892 if (adapter->cur_cmd) {
900 /* Clean up and Put current command back to cmdfreeq */ 893 /* Clean up and Put current command back to cmdfreeq */
901 __lbs_cleanup_and_insert_cmd(priv, adapter->cur_cmd); 894 __lbs_cleanup_and_insert_cmd(priv, adapter->cur_cmd);