diff options
| -rw-r--r-- | common/cmd_gpt.c | 45 | 
1 files changed, 19 insertions, 26 deletions
| diff --git a/common/cmd_gpt.c b/common/cmd_gpt.c index a46f5cc34..1f12e6deb 100644 --- a/common/cmd_gpt.c +++ b/common/cmd_gpt.c @@ -11,7 +11,6 @@  #include <common.h>  #include <malloc.h>  #include <command.h> -#include <mmc.h>  #include <part_efi.h>  #include <exports.h>  #include <linux/ctype.h> @@ -122,7 +121,7 @@ static int set_gpt_info(block_dev_desc_t *dev_desc,  	int errno = 0;  	uint64_t size_ll, start_ll; -	debug("%s: MMC lba num: 0x%x %d\n", __func__, +	debug("%s:  lba num: 0x%x %d\n", __func__,  	      (unsigned int)dev_desc->lba, (unsigned int)dev_desc->lba);  	if (str_part == NULL) @@ -235,25 +234,18 @@ err:  	return errno;  } -static int gpt_mmc_default(int dev, const char *str_part) +static int gpt_default(block_dev_desc_t *blk_dev_desc, const char *str_part)  {  	int ret;  	char *str_disk_guid;  	u8 part_count = 0;  	disk_partition_t *partitions = NULL; -	struct mmc *mmc = find_mmc_device(dev); - -	if (mmc == NULL) { -		printf("%s: mmc dev %d NOT available\n", __func__, dev); -		return CMD_RET_FAILURE; -	} -  	if (!str_part)  		return -1;  	/* fill partitions */ -	ret = set_gpt_info(&mmc->block_dev, str_part, +	ret = set_gpt_info(blk_dev_desc, str_part,  			&str_disk_guid, &partitions, &part_count);  	if (ret) {  		if (ret == -1) @@ -266,7 +258,7 @@ static int gpt_mmc_default(int dev, const char *str_part)  	}  	/* save partitions layout to disk */ -	gpt_restore(&mmc->block_dev, str_disk_guid, partitions, part_count); +	gpt_restore(blk_dev_desc, str_disk_guid, partitions, part_count);  	free(str_disk_guid);  	free(partitions); @@ -287,27 +279,28 @@ static int do_gpt(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  {  	int ret = CMD_RET_SUCCESS;  	int dev = 0; -	char *pstr; +	char *ep; +	block_dev_desc_t *blk_dev_desc;  	if (argc < 5)  		return CMD_RET_USAGE;  	/* command: 'write' */  	if ((strcmp(argv[1], "write") == 0) && (argc == 5)) { -		/* device: 'mmc' */ -		if (strcmp(argv[2], "mmc") == 0) { -			/* check if 'dev' is a number */ -			for (pstr = argv[3]; *pstr != '\0'; pstr++) -				if (!isdigit(*pstr)) { -					printf("'%s' is not a number\n", -						argv[3]); -					return CMD_RET_USAGE; -				} -			dev = (int)simple_strtoul(argv[3], NULL, 10); -			/* write to mmc */ -			if (gpt_mmc_default(dev, argv[4])) -				return CMD_RET_FAILURE; +		dev = (int)simple_strtoul(argv[3], &ep, 10); +		if (!ep || ep[0] != '\0') { +			printf("'%s' is not a number\n", argv[3]); +			return CMD_RET_USAGE;  		} +		blk_dev_desc = get_dev(argv[2], dev); +		if (!blk_dev_desc) { +			printf("%s: %s dev %d NOT available\n", +			       __func__, argv[2], dev); +			return CMD_RET_FAILURE; +		} + +		if (gpt_default(blk_dev_desc, argv[4])) +			return CMD_RET_FAILURE;  	} else {  		return CMD_RET_USAGE;  	} |