提交 619f0fdf 编写于 作者: E Egbert Eich 提交者: Tom Rini

cmd/gpt: Support gpt command for all devices

The gpt command was only implemented for mmc devices. There is no reason
why this command should not be generalized and be applied all other
storage device classes.
This change both simplifies the implementation and eliminates a
build failure for systems that don't support mmcs.
Signed-off-by: NEgbert Eich <eich@suse.com>
Tested-by: NPiotr Wilczek <p.wilczek@samsung.com>
[trini: Change coding style slightly]
Signed-off-by: NTom Rini <trini@ti.com>
上级 9e224080
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
#include <common.h> #include <common.h>
#include <malloc.h> #include <malloc.h>
#include <command.h> #include <command.h>
#include <mmc.h>
#include <part_efi.h> #include <part_efi.h>
#include <exports.h> #include <exports.h>
#include <linux/ctype.h> #include <linux/ctype.h>
...@@ -122,7 +121,7 @@ static int set_gpt_info(block_dev_desc_t *dev_desc, ...@@ -122,7 +121,7 @@ static int set_gpt_info(block_dev_desc_t *dev_desc,
int errno = 0; int errno = 0;
uint64_t size_ll, start_ll; 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); (unsigned int)dev_desc->lba, (unsigned int)dev_desc->lba);
if (str_part == NULL) if (str_part == NULL)
...@@ -235,25 +234,18 @@ err: ...@@ -235,25 +234,18 @@ err:
return errno; 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; int ret;
char *str_disk_guid; char *str_disk_guid;
u8 part_count = 0; u8 part_count = 0;
disk_partition_t *partitions = NULL; 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) if (!str_part)
return -1; return -1;
/* fill partitions */ /* 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); &str_disk_guid, &partitions, &part_count);
if (ret) { if (ret) {
if (ret == -1) if (ret == -1)
...@@ -266,7 +258,7 @@ static int gpt_mmc_default(int dev, const char *str_part) ...@@ -266,7 +258,7 @@ static int gpt_mmc_default(int dev, const char *str_part)
} }
/* save partitions layout to disk */ /* 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(str_disk_guid);
free(partitions); free(partitions);
...@@ -287,27 +279,28 @@ static int do_gpt(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) ...@@ -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 ret = CMD_RET_SUCCESS;
int dev = 0; int dev = 0;
char *pstr; char *ep;
block_dev_desc_t *blk_dev_desc;
if (argc < 5) if (argc < 5)
return CMD_RET_USAGE; return CMD_RET_USAGE;
/* command: 'write' */ /* command: 'write' */
if ((strcmp(argv[1], "write") == 0) && (argc == 5)) { if ((strcmp(argv[1], "write") == 0) && (argc == 5)) {
/* device: 'mmc' */ dev = (int)simple_strtoul(argv[3], &ep, 10);
if (strcmp(argv[2], "mmc") == 0) { if (!ep || ep[0] != '\0') {
/* check if 'dev' is a number */ printf("'%s' is not a number\n", argv[3]);
for (pstr = argv[3]; *pstr != '\0'; pstr++) return CMD_RET_USAGE;
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;
} }
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 { } else {
return CMD_RET_USAGE; return CMD_RET_USAGE;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册