carlu: random number generator test
[carl9170fw.git] / tools / carlu / src / cmd.c
index d83c107bdae9353f8395ef975d0e1bcfbea91dfb..d77feea940e5c61ef9f8b0467e0504bdfd282061 100644 (file)
@@ -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),
@@ -128,6 +157,18 @@ int carlu_cmd_write_mem(struct carlu *ar, const uint32_t addr,
        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)
 {