diff options
-rw-r--r-- | board/ipe337/Makefile | 1 | ||||
-rw-r--r-- | board/ipe337/cmd_alternate.c | 51 |
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 + |