* send test command to firmware
*
* @wl: wl struct
- * @buf: buffer containing the command, without headers, no dma requirements
+ * @buf: buffer containing the command, with all headers, must work with dma
* @len: length of the buffer
* @answer: is answer needed
- *
- * FIXME: cmd_test users need to be converted to the new interface
*/
int wl12xx_cmd_test(struct wl12xx *wl, void *buf, size_t buf_len, u8 answer)
{
- struct wl12xx_command *cmd;
- size_t cmd_len;
int ret;
wl12xx_debug(DEBUG_CMD, "cmd test");
- cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
- if (!cmd) {
- ret = -ENOMEM;
- goto out;
- }
-
- memcpy(cmd->parameters, buf, buf_len);
-
- /* FIXME: ugly */
- cmd_len = sizeof(struct wl12xx_cmd_header) + buf_len;
+ ret = wl12xx_cmd_send(wl, CMD_TEST, buf, buf_len);
- ret = wl12xx_cmd_send(wl, CMD_TEST, cmd, cmd_len);
if (ret < 0) {
wl12xx_warning("TEST command failed");
- goto out;
+ return ret;
}
if (answer) {
+ struct wl12xx_command *cmd_answer;
+
/*
* The test command got in, we can read the answer.
* The answer would be a wl12xx_command, where the
wl12xx_ps_elp_wakeup(wl);
- wl12xx_spi_mem_read(wl, wl->cmd_box_addr, cmd, cmd_len);
+ wl12xx_spi_mem_read(wl, wl->cmd_box_addr, buf, buf_len);
wl12xx_ps_elp_sleep(wl);
- if (cmd->header.status != CMD_STATUS_SUCCESS)
+ cmd_answer = buf;
+
+ if (cmd_answer->header.status != CMD_STATUS_SUCCESS)
wl12xx_error("TEST command answer error: %d",
- cmd->header.status);
- memcpy(buf, cmd->parameters, buf_len);
+ cmd_answer->header.status);
}
-out:
- kfree(cmd);
- return ret;
+ return 0;
}
/**