summaryrefslogtreecommitdiffstats
path: root/board/ipe337/cmd_alternate.c
diff options
context:
space:
mode:
authorSascha Hauer <sha@octopus.labnet.pengutronix.de>2007-09-27 16:34:00 +0200
committerSascha Hauer <sha@octopus.labnet.pengutronix.de>2007-09-27 16:34:00 +0200
commit26b4200ba5b87699435f167f12fe4532bf66ba4a (patch)
treef6811a54d3e5d410d84c6ab636dc7423fa6cf5d3 /board/ipe337/cmd_alternate.c
parent79ed00ba92a0c2dd209d94e0550d582897ca176e (diff)
downloadbarebox-26b4200ba5b87699435f167f12fe4532bf66ba4a.tar.gz
barebox-26b4200ba5b87699435f167f12fe4532bf66ba4a.tar.xz
add alternate command for ipe337 board
Diffstat (limited to 'board/ipe337/cmd_alternate.c')
-rw-r--r--board/ipe337/cmd_alternate.c51
1 files changed, 51 insertions, 0 deletions
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
+