diff options
Diffstat (limited to 'common/cmd_fat.c')
| -rw-r--r-- | common/cmd_fat.c | 123 | 
1 files changed, 48 insertions, 75 deletions
| diff --git a/common/cmd_fat.c b/common/cmd_fat.c index 559a16d61..55585c6cf 100644 --- a/common/cmd_fat.c +++ b/common/cmd_fat.c @@ -37,43 +37,35 @@ int do_fat_fsload (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  {  	long size;  	unsigned long offset; -	unsigned long count; +	unsigned long count = 0; +	unsigned long pos = 0;  	char buf [12];  	block_dev_desc_t *dev_desc=NULL; -	int dev=0; -	int part=1; -	char *ep; +	disk_partition_t info; +	int part, dev;  	if (argc < 5) { -		printf( "usage: fatload <interface> <dev[:part]> " -			"<addr> <filename> [bytes]\n"); +		printf("usage: fatload <interface> [<dev[:part]>] " +			"<addr> <filename> [bytes [pos]]\n");  		return 1;  	} -	dev = (int)simple_strtoul(argv[2], &ep, 16); -	dev_desc = get_dev(argv[1],dev); -	if (dev_desc == NULL) { -		puts("\n** Invalid boot device **\n"); +	part = get_device_and_partition(argv[1], argv[2], &dev_desc, &info, 1); +	if (part < 0)  		return 1; -	} -	if (*ep) { -		if (*ep != ':') { -			puts("\n** Invalid boot device, use `dev[:part]' **\n"); -			return 1; -		} -		part = (int)simple_strtoul(++ep, NULL, 16); -	} + +	dev = dev_desc->dev;  	if (fat_register_device(dev_desc,part)!=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) +	if (argc >= 6)  		count = simple_strtoul(argv[5], NULL, 16); -	else -		count = 0; -	size = file_fat_read(argv[4], (unsigned char *)offset, count); +	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", @@ -91,39 +83,34 @@ int do_fat_fsload (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  U_BOOT_CMD( -	fatload,	6,	0,	do_fat_fsload, +	fatload,	7,	0,	do_fat_fsload,  	"load binary file from a dos filesystem", -	"<interface> <dev[:part]>  <addr> <filename> [bytes]\n" -	"    - load binary file 'filename' from 'dev' on 'interface'\n" -	"      to address 'addr' from dos filesystem" +	"<interface> [<dev[:part]>]  <addr> <filename> [bytes [pos]]\n" +	"    - Load binary file 'filename' from 'dev' on 'interface'\n" +	"      to address 'addr' from dos filesystem.\n" +	"      'pos' gives the file position to start loading from.\n" +	"      If 'pos' is omitted, 0 is used. 'pos' requires 'bytes'.\n" +	"      'bytes' gives the size to load. If 'bytes' is 0 or omitted,\n" +	"      the load stops on end of file."  );  int do_fat_ls (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  {  	char *filename = "/"; -	int ret; -	int dev=0; -	int part=1; -	char *ep; +	int ret, dev, part;  	block_dev_desc_t *dev_desc=NULL; +	disk_partition_t info; -	if (argc < 3) { -		printf("usage: fatls <interface> <dev[:part]> [directory]\n"); +	if (argc < 2) { +		printf("usage: fatls <interface> [<dev[:part]>] [directory]\n");  		return 0;  	} -	dev = (int)simple_strtoul(argv[2], &ep, 16); -	dev_desc = get_dev(argv[1],dev); -	if (dev_desc == NULL) { -		puts("\n** Invalid boot device **\n"); + +	part = get_device_and_partition(argv[1], argv[2], &dev_desc, &info, 1); +	if (part < 0)  		return 1; -	} -	if (*ep) { -		if (*ep != ':') { -			puts("\n** Invalid boot device, use `dev[:part]' **\n"); -			return 1; -		} -		part = (int)simple_strtoul(++ep, NULL, 16); -	} + +	dev = dev_desc->dev;  	if (fat_register_device(dev_desc,part)!=0) {  		printf("\n** Unable to use %s %d:%d for fatls **\n",  			argv[1], dev, part); @@ -142,34 +129,26 @@ int do_fat_ls (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  U_BOOT_CMD(  	fatls,	4,	1,	do_fat_ls,  	"list files in a directory (default /)", -	"<interface> <dev[:part]> [directory]\n" +	"<interface> [<dev[:part]>] [directory]\n"  	"    - list files from 'dev' on 'interface' in a 'directory'"  );  int do_fat_fsinfo (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  { -	int dev=0; -	int part=1; -	char *ep; -	block_dev_desc_t *dev_desc=NULL; +	int dev, part; +	block_dev_desc_t *dev_desc; +	disk_partition_t info;  	if (argc < 2) { -		printf("usage: fatinfo <interface> <dev[:part]>\n"); +		printf("usage: fatinfo <interface> [<dev[:part]>]\n");  		return 0;  	} -	dev = (int)simple_strtoul(argv[2], &ep, 16); -	dev_desc = get_dev(argv[1],dev); -	if (dev_desc == NULL) { -		puts("\n** Invalid boot device **\n"); + +	part = get_device_and_partition(argv[1], argv[2], &dev_desc, &info, 1); +	if (part < 0)  		return 1; -	} -	if (*ep) { -		if (*ep != ':') { -			puts("\n** Invalid boot device, use `dev[:part]' **\n"); -			return 1; -		} -		part = (int)simple_strtoul(++ep, NULL, 16); -	} + +	dev = dev_desc->dev;  	if (fat_register_device(dev_desc,part)!=0) {  		printf("\n** Unable to use %s %d:%d for fatinfo **\n",  			argv[1], dev, part); @@ -181,7 +160,7 @@ int do_fat_fsinfo (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  U_BOOT_CMD(  	fatinfo,	3,	1,	do_fat_fsinfo,  	"print information about filesystem", -	"<interface> <dev[:part]>\n" +	"<interface> [<dev[:part]>]\n"  	"    - print information about filesystem from 'dev' on 'interface'"  ); @@ -193,6 +172,7 @@ static int do_fat_fswrite(cmd_tbl_t *cmdtp, int flag,  	unsigned long addr;  	unsigned long count;  	block_dev_desc_t *dev_desc = NULL; +	disk_partition_t info;  	int dev = 0;  	int part = 1;  	char *ep; @@ -200,19 +180,12 @@ static int do_fat_fswrite(cmd_tbl_t *cmdtp, int flag,  	if (argc < 5)  		return cmd_usage(cmdtp); -	dev = (int)simple_strtoul(argv[2], &ep, 16); -	dev_desc = get_dev(argv[1], dev); -	if (dev_desc == NULL) { -		puts("\n** Invalid boot device **\n"); +	part = get_device_and_partition(argv[1], argv[2], &dev_desc, &info, 1); +	if (part < 0)  		return 1; -	} -	if (*ep) { -		if (*ep != ':') { -			puts("\n** Invalid boot device, use `dev[:part]' **\n"); -			return 1; -		} -		part = (int)simple_strtoul(++ep, NULL, 16); -	} + +	dev = dev_desc->dev; +  	if (fat_register_device(dev_desc, part) != 0) {  		printf("\n** Unable to use %s %d:%d for fatwrite **\n",  			argv[1], dev, part); |