}
/* Store the response code to cur_cmd_retcode. */
- adapter->cur_cmd_retcode = result;;
+ adapter->cur_cmd_retcode = result;
if (respcmd == CMD_RET(CMD_802_11_PS_MODE)) {
struct cmd_ds_802_11_ps_mode *psmode = &resp->params.psmode;
goto done;
}
- if (adapter->cur_cmd->cmdflags & CMD_F_HOSTCMD) {
- /* Copy the response back to response buffer */
- memcpy(adapter->cur_cmd->pdata_buf, resp,
- le16_to_cpu(resp->size));
- adapter->cur_cmd->cmdflags &= ~CMD_F_HOSTCMD;
- }
-
/* If the command is not successful, cleanup and return failure */
if ((result != 0 || !(respcmd & 0x8000))) {
lbs_deb_host("CMD_RESP: error 0x%04x in command reply 0x%04x\n",
goto done;
}
- spin_unlock_irqrestore(&adapter->driver_lock, flags);
-
- ret = handle_cmd_response(respcmd, resp, priv);
-
- spin_lock_irqsave(&adapter->driver_lock, flags);
+ if (adapter->cur_cmd->pdata_size) {
+ struct cmd_ds_gen *r = (struct cmd_ds_gen *)resp;
+ u16 sz = cpu_to_le16(resp->size) - S_DS_GEN;
+ if (sz > *adapter->cur_cmd->pdata_size) {
+ lbs_pr_err("response 0x%04x doesn't fit into "
+ "buffer (%d > %d)\n", respcmd,
+ sz, *adapter->cur_cmd->pdata_size);
+ sz = *adapter->cur_cmd->pdata_size;
+ }
+ memcpy(adapter->cur_cmd->pdata_buf, r->cmdresp, sz);
+ *adapter->cur_cmd->pdata_size = sz;
+ } else {
+ spin_unlock_irqrestore(&adapter->driver_lock, flags);
+ ret = handle_cmd_response(respcmd, resp, priv);
+ spin_lock_irqsave(&adapter->driver_lock, flags);
+ }
if (adapter->cur_cmd) {
/* Clean up and Put current command back to cmdfreeq */
__lbs_cleanup_and_insert_cmd(priv, adapter->cur_cmd);
lbs_deb_enter(LBS_DEB_CMD);
spin_lock_irq(&adapter->driver_lock);
- eventcause = adapter->eventcause;
+ eventcause = adapter->eventcause >> SBI_EVENT_CAUSE_SHIFT;
spin_unlock_irq(&adapter->driver_lock);
- lbs_deb_cmd("event cause 0x%x\n", eventcause);
+ lbs_deb_cmd("event cause %d\n", eventcause);
- switch (eventcause >> SBI_EVENT_CAUSE_SHIFT) {
+ switch (eventcause) {
case MACREG_INT_CODE_LINK_SENSED:
lbs_deb_cmd("EVENT: MACREG_INT_CODE_LINK_SENSED\n");
break;
lbs_mac_event_disconnected(priv);
break;
- case MACREG_INT_CODE_LINK_LOSE_NO_SCAN:
+ case MACREG_INT_CODE_LINK_LOST_NO_SCAN:
lbs_deb_cmd("EVENT: link lost\n");
lbs_mac_event_disconnected(priv);
break;
break;
default:
- lbs_pr_alert("EVENT: unknown event id 0x%04x\n",
- eventcause >> SBI_EVENT_CAUSE_SHIFT);
+ lbs_pr_alert("EVENT: unknown event id %d\n", eventcause);
break;
}