diff options
author | Rasmus Villemoes <rasmus.villemoes@prevas.dk> | 2023-03-02 09:12:22 +0100 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2023-03-17 15:44:01 -0400 |
commit | 8311ac5fe0831ae26ffb68fab6b927b18d7036d2 (patch) | |
tree | c80868ec8479684f271e142c8e518cff5c275998 /cmd/read.c | |
parent | fca7db5b801ff4e3d67e0d40c7302cf7cf68b478 (diff) |
cmd: introduce 'write' command
It's almost no extra code to hook up a buddy to the 'read' command. In
fact, since the command is passed its own 'struct cmd_tbl', we can use
the exact same callback, and let it figure out for itself whether it
was invoked as "read" or "write".
Reviewed-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
Diffstat (limited to 'cmd/read.c')
-rw-r--r-- | cmd/read.c | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/cmd/read.c b/cmd/read.c index 8645db49bb..1218e7acfd 100644 --- a/cmd/read.c +++ b/cmd/read.c @@ -13,14 +13,14 @@ #include <mapmem.h> #include <part.h> -int do_read(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) +static int +do_rw(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) { struct blk_desc *dev_desc = NULL; struct disk_partition part_info; ulong offset, limit; + uint blk, cnt, res; void *addr; - uint blk; - uint cnt; int part; if (argc != 6) { @@ -47,20 +47,35 @@ int do_read(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) } if (cnt + blk > limit) { - printf("Read out of range\n"); + printf("%s out of range\n", cmdtp->name); return 1; } - if (blk_dread(dev_desc, offset + blk, cnt, addr) != cnt) { - printf("Error reading blocks\n"); + if (IS_ENABLED(CONFIG_CMD_WRITE) && !strcmp(cmdtp->name, "write")) + res = blk_dwrite(dev_desc, offset + blk, cnt, addr); + else + res = blk_dread(dev_desc, offset + blk, cnt, addr); + + if (res != cnt) { + printf("%s error\n", cmdtp->name); return 1; } return 0; } +#ifdef CONFIG_CMD_READ U_BOOT_CMD( - read, 6, 0, do_read, + read, 6, 0, do_rw, "Load binary data from a partition", "<interface> <dev[:part|#partname]> addr blk# cnt" ); +#endif + +#ifdef CONFIG_CMD_WRITE +U_BOOT_CMD( + write, 6, 0, do_rw, + "Store binary data to a partition", + "<interface> <dev[:part|#partname]> addr blk# cnt" +); +#endif |