summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--board/ipe337/Makefile1
-rw-r--r--board/ipe337/cmd_alternate.c51
2 files changed, 52 insertions, 0 deletions
diff --git a/board/ipe337/Makefile b/board/ipe337/Makefile
index 448133ceb4..e161238123 100644
--- a/board/ipe337/Makefile
+++ b/board/ipe337/Makefile
@@ -1,3 +1,4 @@
obj-y += ipe337.o
+obj-y += cmd_alternate.o
extra-y += u-boot.lds
diff --git a/board/ipe337/cmd_alternate.c b/board/ipe337/cmd_alternate.c
new file mode 100644
index 0000000000..fc43953315
--- /dev/null
+++ b/board/ipe337/cmd_alternate.c
@@ -0,0 +1,51 @@
+#include <common.h>
+#include <command.h>
+#include <linux/stat.h>
+#include <malloc.h>
+#include <fs.h>
+
+static int do_alternate (cmd_tbl_t *cmdtp, int argc, char *argv[])
+{
+ void *buf;
+ size_t size;
+ ulong *ptr, val = 0, bitcount = 0;
+
+ if (argc != 2) {
+ u_boot_cmd_usage(cmdtp);
+ return 1;
+ }
+
+ buf = read_file(argv[1], &size);
+ if (!buf)
+ return 1;
+
+ ptr = buf;
+
+ while ((ulong)ptr <= (ulong)buf + size && !(val = *ptr++))
+ bitcount += 32;
+
+ if (val) {
+ do {
+ if (val & 1)
+ break;
+ bitcount++;
+ } while (val >>= 1);
+ }
+
+ printf("bitcount : %d\n", bitcount);
+
+ free(buf);
+ return bitcount & 1 ? 2 : 3;
+}
+
+static __maybe_unused char cmd_alternate_help[] =
+"Usage: alternate <file>\n"
+"\n";
+
+U_BOOT_CMD_START(alternate)
+ .maxargs = CONFIG_MAXARGS,
+ .cmd = do_alternate,
+ .usage = "count zero bits in a file",
+ U_BOOT_CMD_HELP(cmd_alternate_help)
+U_BOOT_CMD_END
+