wireless: 60g protocol constants
[carl9170fw.git] / tools / carlu / src / cmd.c
index 56b9f8b7c956d7b79773abddf9efa7fe528c467f..bb87399bb27d01620a0fb46352dd86d703316e06 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * carl9170user - userspace testing utility for ar9170 devices
+ * carlu - userspace testing utility for ar9170 devices
  *
  * Abstraction Layer for FW/HW command interface
  *
- * Copyright 2009, 2010 Christian Lamparter <chunkeey@googlemail.com>
+ * Copyright 2009-2011 Christian Lamparter <chunkeey@googlemail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -116,11 +116,40 @@ int carlu_cmd_mem_dump(struct carlu *ar, const uint32_t start,
        return 0;
 }
 
+int carlu_cmd_mem_watch(struct carlu *ar, const uint32_t mem,
+                       const unsigned int len, void *_buf)
+{
+#define RW     8       /* number of words to read at once */
+#define RB     (sizeof(uint32_t) * RW)
+       uint8_t *buf = _buf;
+       unsigned int i, j, block;
+       int err;
+       __le32 offsets[RW];
+
+       for (i = 0; i < (len + RB - 1) / RB; i++) {
+               block = min_t(unsigned int, (len - RB * i) / sizeof(uint32_t), RW);
+               for (j = 0; j < block; j++)
+                       offsets[j] = cpu_to_le32(mem);
+
+               err = carlusb_cmd(ar, CARL9170_CMD_RREG,
+                                   (void *) &offsets, block * sizeof(uint32_t),
+                                   (void *) buf + RB * i, RB);
+
+               if (err)
+                       return err;
+       }
+
+#undef RW
+#undef RB
+
+       return 0;
+}
+
 int carlu_cmd_write_mem(struct carlu *ar, const uint32_t addr,
                        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),