unsigned int i;
/* copies cmd, len and extra fields */
- resp->hdr.hdr_data = cmd->hdr.hdr_data;
+ resp->hdr.len = cmd->hdr.len;
+ resp->hdr.cmd = cmd->hdr.cmd;
+ resp->hdr.ext = cmd->hdr.ext;
+ resp->hdr.seq |= cmd->hdr.seq;
- switch (cmd->hdr.cmd) {
+ switch (cmd->hdr.cmd & ~CARL9170_CMD_ASYNC_FLAG) {
case CARL9170_CMD_RREG:
for (i = 0; i < (cmd->hdr.len / 4); i++)
resp->rreg_res.vals[i] = get(cmd->rreg.regs[i]);
break;
case CARL9170_CMD_SWRST:
- resp->hdr.len = 0;
+ /*
+ * Command has no payload, so the response
+ * has no payload either.
+ * resp->hdr.len = 0;
+ */
fw.wlan.mac_reset = CARL9170_MAC_RESET_FORCE;
break;
case CARL9170_CMD_REBOOT:
/*
- * reboot does not return and generates no response
* resp->len = 0;
*/
-
- reboot();
+ fw.reboot = 1;
break;
case CARL9170_CMD_READ_TSF:
#ifdef CONFIG_CARL9170FW_CAB_QUEUE
case CARL9170_CMD_FLUSH_CAB:
resp->hdr.len = 0;
- fw.wlan.cab_flush_trigger = CARL9170_CAB_TRIGGER_ARMED;
- fw.wlan.cab_flush_time = get_clock_counter() +
- CARL9170_TBTT_DELTA;
+
+ if (cmd->cab_flush.mode & CARL9170_CAB_FLUSH_CAB_TRIGGER) {
+ wlan_cab_modify_dtim_beacon(cmd->cab_flush.vif_id);
+ set(AR9170_MAC_REG_BCN_CTRL, AR9170_BCN_CTRL_READY);
+ } else {
+ wlan_cab_flush_queue(cmd->cab_flush.vif_id);
+ if (fw.wlan.cab_flush_vif == cmd->cab_flush.vif_id)
+ fw.wlan.cab_flush_trigger = CARL9170_CAB_TRIGGER_EMPTY;
+ }
break;
#endif /* CONFIG_CARL9170FW_CAB_QUEUE */
#ifdef CONFIG_CARL9170FW_SECURITY_ENGINE
case CARL9170_CMD_EKEY:
- resp->hdr.len = 1;
+ resp->hdr.len = 0;
set_key(&cmd->setkey);
break;
case CARL9170_CMD_DKEY:
- /* Disable Key */
- resp->hdr.len = 1;
+ resp->hdr.len = 0;
disable_key(&cmd->disablekey);
break;
#endif /* CONFIG_CARL9170FW_SECURIT_ENGINE */
break;
case CARL9170_CMD_FREQ_START:
- resp->hdr.len = 0;
+ /*
+ * resp->hdr.len = 0;
+ */
rf_notify_set_channel();
break;
# endif /* CONFIG_CARL9170FW_PSM */
#endif /* CONFIG_CARL9170FW_RADIO_FUNCTIOS */
-#ifdef CONFIG_CARL9170FW_USB_WATCHDOG
- case CARL9170_CMD_USB_WD:
- resp->hdr.len = 4;
- fw.usb.watchdog.state = le32_to_cpu(cmd->watchdog.state);
- break;
-
-#endif /* CONFIG_CARL9170FW_USB_WATCHDOG */
-
default:
break;
}