carlu: random number generator test
authorChristian Lamparter <chunkeey@googlemail.com>
Thu, 13 Jan 2011 13:58:41 +0000 (14:58 +0100)
committerChristian Lamparter <chunkeey@googlemail.com>
Thu, 13 Jan 2011 14:02:14 +0000 (15:02 +0100)
Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
tools/carlu/src/cmd.c
tools/carlu/src/cmd.h
tools/carlu/src/main.c
tools/carlu/src/test.c
tools/carlu/src/test.h

index 81702b3fd94740e8275b29da88b23b7bcf42563c..d77feea940e5c61ef9f8b0467e0504bdfd282061 100644 (file)
@@ -116,6 +116,35 @@ 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)
 {
index 72028b3b42f14e30d9de3a4a95b62fd197396706..b201ee4116eac9c53740b63d1e664333735145a7 100644 (file)
@@ -32,6 +32,8 @@ int carlu_cmd_mem_dump(struct carlu *ar, const uint32_t start,
                        const unsigned int len, void *_buf);
 int carlu_cmd_write_mem(struct carlu *ar, const uint32_t addr,
                        const uint32_t val);
+int carlu_cmd_mem_watch(struct carlu *ar, const uint32_t mem,
+                        const unsigned int len, void *_buf);
 
 struct carl9170_cmd *carlu_cmd_buf(struct carlu *ar,
        const enum carl9170_cmd_oids cmd, const unsigned int len);
index 65bcfbcd4411f336f427402587d0501a0951fbb7..ffc1407dcfcaaf684d131442e0abaa3ab2b86e8a 100644 (file)
@@ -161,6 +161,33 @@ out:
        return err ? EXIT_FAILURE : EXIT_SUCCESS;
 }
 
+static int carlu_run_random_test(void)
+{
+       struct carlu *carl = NULL;
+       int err;
+
+       err = carlu_init();
+       if (err)
+               goto out;
+
+       carl = carlusb_probe();
+       if (IS_ERR_OR_NULL(carl)) {
+               err = PTR_ERR(carl);
+               goto out;
+       }
+
+       err = carlu_random_test(carl);
+       if (err)
+               goto out_close;
+
+out_close:
+       carlusb_close(carl);
+
+out:
+       carlu_exit();
+       return err ? EXIT_FAILURE : EXIT_SUCCESS;
+}
+
 static int carlu_run_loop_test(void)
 {
        struct carlu *carl;
@@ -236,6 +263,7 @@ static const struct menu_struct menu[] = {
              MENU_ITEM('p', carlu_probe_all, "probe all possible devices."),
              MENU_ITEM('t', carlu_run_loop_test, "run tx/rx test."),
              MENU_ITEM('g', carlu_run_gpio_test, "flash the leds."),
+             MENU_ITEM('r', carlu_run_random_test, "get random numbers."),
 };
 
 static int show_help(void)
index 148f89a0540556d32c4549db065da251f5121246..e453eb37c7439a5e17b35fa9df55925edef7a2d8 100644 (file)
@@ -220,3 +220,18 @@ int carlu_gpio_test(struct carlu *ar)
        CHK(carlu_cmd_read_mem(ar, AR9170_GPIO_REG_PORT_DATA, &gpio));
        info("GPIO state:%x\n", gpio);
 }
+
+int carlu_random_test(struct carlu *ar)
+{
+       uint32_t buf[4096];
+       int err, i;
+
+       err = carlu_cmd_mem_watch(ar, AR9170_RAND_REG_NUM, sizeof(buf), buf);
+       if (err)
+               return err;
+
+       for (i = 0; i < ARRAY_SIZE(buf); i++)
+               info("%.2x %.2x ", buf[i] & 0xff, buf[i] >> 8);
+
+       info("\n");
+}
index 645b55b5bb5d9869efe282be1a343178cb3615e5..5e4abe926a8f81f0f363f59164a0fab8ec299370 100644 (file)
@@ -30,5 +30,6 @@ void carlu_loopback_test(struct carlu *ar, const unsigned int total_runs,
                         const unsigned int max_len);
 
 int carlu_gpio_test(struct carlu *ar);
+int carlu_random_test(struct carlu *ar);
 
 #endif /* __CARL9170USER_TEST_H */