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 | olio-uboot-2014.01-045fa1e1142552799ad3203e9e0bc22a11e866ea.tar.xz olio-uboot-2014.01-045fa1e1142552799ad3203e9e0bc22a11e866ea.zip | |
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 c38302d44..c865d6d8a 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( |