aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/mwifiex/cmdevt.c
diff options
context:
space:
mode:
authorJohn W. Linville <linville@tuxdriver.com>2011-05-16 14:55:42 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-05-16 19:32:19 -0400
commite00cf3b9eb7839b952e434a75bff6b99e47337ac (patch)
treeef583ab8ac09bf703026650d4bc7777e6a3864d3 /drivers/net/wireless/mwifiex/cmdevt.c
parent1a8218e96271790a07dd7065a2ef173e0f67e328 (diff)
parent3b8ab88acaceb505aa06ef3bbf3a73b92470ae78 (diff)
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6 into for-davem
Conflicts: drivers/net/wireless/iwlwifi/iwl-agn-tx.c net/mac80211/sta_info.h
Diffstat (limited to 'drivers/net/wireless/mwifiex/cmdevt.c')
-rw-r--r--drivers/net/wireless/mwifiex/cmdevt.c51
1 files changed, 25 insertions, 26 deletions
diff --git a/drivers/net/wireless/mwifiex/cmdevt.c b/drivers/net/wireless/mwifiex/cmdevt.c
index 776146a104e..cd89fed206a 100644
--- a/drivers/net/wireless/mwifiex/cmdevt.c
+++ b/drivers/net/wireless/mwifiex/cmdevt.c
@@ -91,7 +91,7 @@ mwifiex_clean_cmd_node(struct mwifiex_adapter *adapter,
91 cmd_node->wait_q_enabled = false; 91 cmd_node->wait_q_enabled = false;
92 92
93 if (cmd_node->resp_skb) { 93 if (cmd_node->resp_skb) {
94 mwifiex_recv_complete(adapter, cmd_node->resp_skb, 0); 94 dev_kfree_skb_any(cmd_node->resp_skb);
95 cmd_node->resp_skb = NULL; 95 cmd_node->resp_skb = NULL;
96 } 96 }
97} 97}
@@ -128,7 +128,7 @@ static int mwifiex_dnld_cmd_to_fw(struct mwifiex_private *priv,
128{ 128{
129 129
130 struct mwifiex_adapter *adapter = priv->adapter; 130 struct mwifiex_adapter *adapter = priv->adapter;
131 int ret = 0; 131 int ret;
132 struct host_cmd_ds_command *host_cmd; 132 struct host_cmd_ds_command *host_cmd;
133 uint16_t cmd_code; 133 uint16_t cmd_code;
134 uint16_t cmd_size; 134 uint16_t cmd_size;
@@ -222,25 +222,24 @@ static int mwifiex_dnld_cmd_to_fw(struct mwifiex_private *priv,
222 */ 222 */
223static int mwifiex_dnld_sleep_confirm_cmd(struct mwifiex_adapter *adapter) 223static int mwifiex_dnld_sleep_confirm_cmd(struct mwifiex_adapter *adapter)
224{ 224{
225 int ret = 0; 225 int ret;
226 u16 cmd_len = 0;
227 struct mwifiex_private *priv; 226 struct mwifiex_private *priv;
228 struct mwifiex_opt_sleep_confirm_buffer *sleep_cfm_buf = 227 struct mwifiex_opt_sleep_confirm *sleep_cfm_buf =
229 (struct mwifiex_opt_sleep_confirm_buffer *) 228 (struct mwifiex_opt_sleep_confirm *)
230 adapter->sleep_cfm->data; 229 adapter->sleep_cfm->data;
231 cmd_len = sizeof(struct mwifiex_opt_sleep_confirm);
232 priv = mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_ANY); 230 priv = mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_ANY);
233 231
234 sleep_cfm_buf->ps_cfm_sleep.seq_num = 232 sleep_cfm_buf->seq_num =
235 cpu_to_le16((HostCmd_SET_SEQ_NO_BSS_INFO 233 cpu_to_le16((HostCmd_SET_SEQ_NO_BSS_INFO
236 (adapter->seq_num, priv->bss_num, 234 (adapter->seq_num, priv->bss_num,
237 priv->bss_type))); 235 priv->bss_type)));
238 adapter->seq_num++; 236 adapter->seq_num++;
239 237
238 skb_push(adapter->sleep_cfm, INTF_HEADER_LEN);
240 ret = adapter->if_ops.host_to_card(adapter, MWIFIEX_TYPE_CMD, 239 ret = adapter->if_ops.host_to_card(adapter, MWIFIEX_TYPE_CMD,
241 adapter->sleep_cfm->data, 240 adapter->sleep_cfm->data,
242 adapter->sleep_cfm->len + 241 adapter->sleep_cfm->len, NULL);
243 INTF_HEADER_LEN, NULL); 242 skb_pull(adapter->sleep_cfm, INTF_HEADER_LEN);
244 243
245 if (ret == -1) { 244 if (ret == -1) {
246 dev_err(adapter->dev, "SLEEP_CFM: failed\n"); 245 dev_err(adapter->dev, "SLEEP_CFM: failed\n");
@@ -249,14 +248,14 @@ static int mwifiex_dnld_sleep_confirm_cmd(struct mwifiex_adapter *adapter)
249 } 248 }
250 if (GET_BSS_ROLE(mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_ANY)) 249 if (GET_BSS_ROLE(mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_ANY))
251 == MWIFIEX_BSS_ROLE_STA) { 250 == MWIFIEX_BSS_ROLE_STA) {
252 if (!sleep_cfm_buf->ps_cfm_sleep.resp_ctrl) 251 if (!sleep_cfm_buf->resp_ctrl)
253 /* Response is not needed for sleep 252 /* Response is not needed for sleep
254 confirm command */ 253 confirm command */
255 adapter->ps_state = PS_STATE_SLEEP; 254 adapter->ps_state = PS_STATE_SLEEP;
256 else 255 else
257 adapter->ps_state = PS_STATE_SLEEP_CFM; 256 adapter->ps_state = PS_STATE_SLEEP_CFM;
258 257
259 if (!sleep_cfm_buf->ps_cfm_sleep.resp_ctrl 258 if (!sleep_cfm_buf->resp_ctrl
260 && (adapter->is_hs_configured 259 && (adapter->is_hs_configured
261 && !adapter->sleep_period.period)) { 260 && !adapter->sleep_period.period)) {
262 adapter->pm_wakeup_card_req = true; 261 adapter->pm_wakeup_card_req = true;
@@ -292,7 +291,7 @@ int mwifiex_alloc_cmd_buffer(struct mwifiex_adapter *adapter)
292 if (!cmd_array) { 291 if (!cmd_array) {
293 dev_err(adapter->dev, "%s: failed to alloc cmd_array\n", 292 dev_err(adapter->dev, "%s: failed to alloc cmd_array\n",
294 __func__); 293 __func__);
295 return -1; 294 return -ENOMEM;
296 } 295 }
297 296
298 adapter->cmd_pool = cmd_array; 297 adapter->cmd_pool = cmd_array;
@@ -340,7 +339,7 @@ int mwifiex_free_cmd_buffer(struct mwifiex_adapter *adapter)
340 } 339 }
341 if (!cmd_array[i].resp_skb) 340 if (!cmd_array[i].resp_skb)
342 continue; 341 continue;
343 mwifiex_recv_complete(adapter, cmd_array[i].resp_skb, 0); 342 dev_kfree_skb_any(cmd_array[i].resp_skb);
344 } 343 }
345 /* Release struct cmd_ctrl_node */ 344 /* Release struct cmd_ctrl_node */
346 if (adapter->cmd_pool) { 345 if (adapter->cmd_pool) {
@@ -364,13 +363,13 @@ int mwifiex_free_cmd_buffer(struct mwifiex_adapter *adapter)
364 */ 363 */
365int mwifiex_process_event(struct mwifiex_adapter *adapter) 364int mwifiex_process_event(struct mwifiex_adapter *adapter)
366{ 365{
367 int ret = 0; 366 int ret;
368 struct mwifiex_private *priv = 367 struct mwifiex_private *priv =
369 mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_ANY); 368 mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_ANY);
370 struct sk_buff *skb = adapter->event_skb; 369 struct sk_buff *skb = adapter->event_skb;
371 u32 eventcause = adapter->event_cause; 370 u32 eventcause = adapter->event_cause;
372 struct timeval tstamp; 371 struct timeval tstamp;
373 struct mwifiex_rxinfo *rx_info = NULL; 372 struct mwifiex_rxinfo *rx_info;
374 373
375 /* Save the last event to debug log */ 374 /* Save the last event to debug log */
376 adapter->dbg.last_event_index = 375 adapter->dbg.last_event_index =
@@ -403,7 +402,7 @@ int mwifiex_process_event(struct mwifiex_adapter *adapter)
403 adapter->event_cause = 0; 402 adapter->event_cause = 0;
404 adapter->event_skb = NULL; 403 adapter->event_skb = NULL;
405 404
406 mwifiex_recv_complete(adapter, skb, 0); 405 dev_kfree_skb_any(skb);
407 406
408 return ret; 407 return ret;
409} 408}
@@ -446,10 +445,10 @@ int mwifiex_send_cmd_sync(struct mwifiex_private *priv, uint16_t cmd_no,
446int mwifiex_send_cmd_async(struct mwifiex_private *priv, uint16_t cmd_no, 445int mwifiex_send_cmd_async(struct mwifiex_private *priv, uint16_t cmd_no,
447 u16 cmd_action, u32 cmd_oid, void *data_buf) 446 u16 cmd_action, u32 cmd_oid, void *data_buf)
448{ 447{
449 int ret = 0; 448 int ret;
450 struct mwifiex_adapter *adapter = priv->adapter; 449 struct mwifiex_adapter *adapter = priv->adapter;
451 struct cmd_ctrl_node *cmd_node = NULL; 450 struct cmd_ctrl_node *cmd_node;
452 struct host_cmd_ds_command *cmd_ptr = NULL; 451 struct host_cmd_ds_command *cmd_ptr;
453 452
454 if (!adapter) { 453 if (!adapter) {
455 pr_err("PREP_CMD: adapter is NULL\n"); 454 pr_err("PREP_CMD: adapter is NULL\n");
@@ -605,8 +604,8 @@ mwifiex_insert_cmd_to_pending_q(struct mwifiex_adapter *adapter,
605 */ 604 */
606int mwifiex_exec_next_cmd(struct mwifiex_adapter *adapter) 605int mwifiex_exec_next_cmd(struct mwifiex_adapter *adapter)
607{ 606{
608 struct mwifiex_private *priv = NULL; 607 struct mwifiex_private *priv;
609 struct cmd_ctrl_node *cmd_node = NULL; 608 struct cmd_ctrl_node *cmd_node;
610 int ret = 0; 609 int ret = 0;
611 struct host_cmd_ds_command *host_cmd; 610 struct host_cmd_ds_command *host_cmd;
612 unsigned long cmd_flags; 611 unsigned long cmd_flags;
@@ -673,7 +672,7 @@ int mwifiex_exec_next_cmd(struct mwifiex_adapter *adapter)
673 */ 672 */
674int mwifiex_process_cmdresp(struct mwifiex_adapter *adapter) 673int mwifiex_process_cmdresp(struct mwifiex_adapter *adapter)
675{ 674{
676 struct host_cmd_ds_command *resp = NULL; 675 struct host_cmd_ds_command *resp;
677 struct mwifiex_private *priv = 676 struct mwifiex_private *priv =
678 mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_ANY); 677 mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_ANY);
679 int ret = 0; 678 int ret = 0;
@@ -805,7 +804,7 @@ mwifiex_cmd_timeout_func(unsigned long function_context)
805{ 804{
806 struct mwifiex_adapter *adapter = 805 struct mwifiex_adapter *adapter =
807 (struct mwifiex_adapter *) function_context; 806 (struct mwifiex_adapter *) function_context;
808 struct cmd_ctrl_node *cmd_node = NULL; 807 struct cmd_ctrl_node *cmd_node;
809 struct timeval tstamp; 808 struct timeval tstamp;
810 809
811 adapter->num_cmd_timeout++; 810 adapter->num_cmd_timeout++;
@@ -877,7 +876,7 @@ mwifiex_cmd_timeout_func(unsigned long function_context)
877void 876void
878mwifiex_cancel_all_pending_cmd(struct mwifiex_adapter *adapter) 877mwifiex_cancel_all_pending_cmd(struct mwifiex_adapter *adapter)
879{ 878{
880 struct cmd_ctrl_node *cmd_node = NULL, *tmp_node = NULL; 879 struct cmd_ctrl_node *cmd_node = NULL, *tmp_node;
881 unsigned long flags; 880 unsigned long flags;
882 881
883 /* Cancel current cmd */ 882 /* Cancel current cmd */
@@ -1160,7 +1159,7 @@ int mwifiex_cmd_enh_power_mode(struct mwifiex_private *priv,
1160{ 1159{
1161 struct host_cmd_ds_802_11_ps_mode_enh *psmode_enh = 1160 struct host_cmd_ds_802_11_ps_mode_enh *psmode_enh =
1162 &cmd->params.psmode_enh; 1161 &cmd->params.psmode_enh;
1163 u8 *tlv = NULL; 1162 u8 *tlv;
1164 u16 cmd_size = 0; 1163 u16 cmd_size = 0;
1165 1164
1166 cmd->command = cpu_to_le16(HostCmd_CMD_802_11_PS_MODE_ENH); 1165 cmd->command = cpu_to_le16(HostCmd_CMD_802_11_PS_MODE_ENH);