diff options
author | Stephen Warren <swarren@nvidia.com> | 2012-10-22 06:43:51 +0000 |
---|---|---|
committer | Tom Rini <trini@ti.com> | 2012-10-29 14:21:20 -0700 |
commit | 045fa1e1142552799ad3203e9e0bc22a11e866ea (patch) | |
tree | 038b783c8efac14c0caffa128f37b77a48c9f407 /common/cmd_fat.c | |
parent | 03e2ecf6b83e43803f7eed9547d0973b7eb1c8fc (diff) | |
download | u-boot-imx-045fa1e1142552799ad3203e9e0bc22a11e866ea.zip u-boot-imx-045fa1e1142552799ad3203e9e0bc22a11e866ea.tar.gz u-boot-imx-045fa1e1142552799ad3203e9e0bc22a11e866ea.tar.bz2 |
fs: add filesystem switch libary, implement ls and fsload commands
Implement "ls" and "fsload" commands that act like {fat,ext2}{ls,load},
and transparently handle either file-system. This scheme could easily be
extended to other filesystem types; I only didn't do it for zfs because
I don't have any filesystems of that type to test with.
Replace the implementation of {fat,ext[24]}{ls,load} with this new code
too.
Signed-off-by: Stephen Warren <swarren@nvidia.com>
Diffstat (limited to 'common/cmd_fat.c')
-rw-r--r-- | common/cmd_fat.c | 76 |
1 files changed, 3 insertions, 73 deletions
diff --git a/common/cmd_fat.c b/common/cmd_fat.c index c38302d..c865d6d 100644 --- a/common/cmd_fat.c +++ b/common/cmd_fat.c @@ -31,54 +31,11 @@ #include <ata.h> #include <part.h> #include <fat.h> - +#include <fs.h> int do_fat_fsload (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { - long size; - unsigned long offset; - unsigned long count = 0; - unsigned long pos = 0; - char buf [12]; - block_dev_desc_t *dev_desc=NULL; - disk_partition_t info; - int part, dev; - - if (argc < 5) { - printf("usage: fatload <interface> [<dev[:part]>] " - "<addr> <filename> [bytes [pos]]\n"); - return 1; - } - - part = get_device_and_partition(argv[1], argv[2], &dev_desc, &info, 1); - if (part < 0) - return 1; - - dev = dev_desc->dev; - if (fat_set_blk_dev(dev_desc, &info) != 0) { - printf("\n** Unable to use %s %d:%d for fatload **\n", - argv[1], dev, part); - return 1; - } - offset = simple_strtoul(argv[3], NULL, 16); - if (argc >= 6) - count = simple_strtoul(argv[5], NULL, 16); - if (argc >= 7) - pos = simple_strtoul(argv[6], NULL, 16); - size = file_fat_read_at(argv[4], pos, (unsigned char *)offset, count); - - if(size==-1) { - printf("\n** Unable to read \"%s\" from %s %d:%d **\n", - argv[4], argv[1], dev, part); - return 1; - } - - printf("\n%ld bytes read\n", size); - - sprintf(buf, "%lX", size); - setenv("filesize", buf); - - return 0; + return do_fsload(cmdtp, flag, argc, argv, FS_TYPE_FAT); } @@ -96,34 +53,7 @@ U_BOOT_CMD( int do_fat_ls (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { - char *filename = "/"; - int ret, dev, part; - block_dev_desc_t *dev_desc=NULL; - disk_partition_t info; - - if (argc < 2) { - printf("usage: fatls <interface> [<dev[:part]>] [directory]\n"); - return 0; - } - - part = get_device_and_partition(argv[1], argv[2], &dev_desc, &info, 1); - if (part < 0) - return 1; - - dev = dev_desc->dev; - if (fat_set_blk_dev(dev_desc, &info) != 0) { - printf("\n** Unable to use %s %d:%d for fatls **\n", - argv[1], dev, part); - return 1; - } - if (argc == 4) - ret = file_fat_ls(argv[3]); - else - ret = file_fat_ls(filename); - - if(ret!=0) - printf("No Fat FS detected\n"); - return ret; + return do_ls(cmdtp, flag, argc, argv, FS_TYPE_FAT); } U_BOOT_CMD( |