#include "debug.h"
#include "fwcmd.h"
#include "eeprom.h"
+#include "cmd.h"
int carlu_cmd_echo(struct carlu *ar, const uint32_t message)
{
return ret;
}
+struct carl9170_cmd *carlu_cmd_buf(struct carlu *ar,
+ const enum carl9170_cmd_oids cmd, const unsigned int len)
+{
+ struct carl9170_cmd *tmp;
+
+ if (len % 4 || (sizeof(struct carl9170_cmd_head) + len > 64))
+ return ERR_PTR(-EINVAL);
+
+ tmp = malloc(sizeof(struct carl9170_cmd_head) + len);
+ if (tmp) {
+ tmp->hdr.cmd = cmd;
+ tmp->hdr.len = len;
+ }
+ return tmp;
+}
+
int carlu_cmd_reboot(struct carlu *ar)
{
+ struct carl9170_cmd *reboot;
int err;
- err = carlusb_cmd(ar, CARL9170_CMD_REBOOT,
- NULL, 0, NULL, 0);
+ /* sure, we could put the struct on the stack too. */
+ reboot = carlu_cmd_buf(ar, CARL9170_CMD_REBOOT_ASYNC, 0);
+ if (IS_ERR_OR_NULL(reboot))
+ return reboot ? PTR_ERR(reboot) : -ENOMEM;
- if (err == -ETIMEDOUT)
- return 0;
-
- return err ? err : -1;
+ err = carlusb_cmd_async(ar, reboot, true);
+ return err;
}
int carlu_cmd_mem_dump(struct carlu *ar, const uint32_t start,
const uint32_t val)
{
int err;
- __le32 msg, block[2] = { addr, val };
+ __le32 msg, block[2] = { cpu_to_le32(addr), cpu_to_le32(val) };
err = carlusb_cmd(ar, CARL9170_CMD_WREG,
(void *) &block, sizeof(block),
return err;
}
+int carlu_cmd_read_mem(struct carlu *ar, const uint32_t _addr,
+ uint32_t *val)
+{
+ int err;
+ __le32 msg, addr = { cpu_to_le32(_addr) };
+ err = carlusb_cmd(ar, CARL9170_CMD_RREG, (void *) &addr, sizeof(addr),
+ (void *) &msg, sizeof(msg));
+
+ *val = le32_to_cpu(msg);
+ return err;
+}
+
int carlu_cmd_read_eeprom(struct carlu *ar)
{