diff mbox

[U-Boot,v3,2/2] common: cmd_part: start and size sub-commands introduction

Message ID 1434396905-6086-2-git-send-email-contact@paulk.fr
State Accepted
Delegated to: Tom Rini
Headers show

Commit Message

Paul Kocialkowski June 15, 2015, 7:35 p.m. UTC
This introduces the part start and part size sub-commands. The purpose of these
is to store the start block and size of a partition in a variable, given the
device and partition number.

This allows reading raw data that fits a single partition more easily.
For instance, this could be used to figure out the start block and size of a
kernel partition when a partition table is present, given the partition number.

Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
---
 common/cmd_part.c | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 77 insertions(+), 1 deletion(-)

Comments

Stephen Warren June 15, 2015, 11:19 p.m. UTC | #1
On 06/15/2015 01:35 PM, Paul Kocialkowski wrote:
> This introduces the part start and part size sub-commands. The purpose of these
> is to store the start block and size of a partition in a variable, given the
> device and partition number.
>
> This allows reading raw data that fits a single partition more easily.
> For instance, this could be used to figure out the start block and size of a
> kernel partition when a partition table is present, given the partition number.

The series,
Acked-by: Stephen Warren <swarren@nvidia.com>
Tom Rini June 19, 2015, 8:25 p.m. UTC | #2
On Mon, Jun 15, 2015 at 09:35:05PM +0200, Paul Kocialkowski wrote:

> This introduces the part start and part size sub-commands. The purpose of these
> is to store the start block and size of a partition in a variable, given the
> device and partition number.
> 
> This allows reading raw data that fits a single partition more easily.
> For instance, this could be used to figure out the start block and size of a
> kernel partition when a partition table is present, given the partition number.
> 
> Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
> Acked-by: Stephen Warren <swarren@nvidia.com>

After changing it to use LBAF instead of "%lx" to fix some warnings,
applied to u-boot/master, thanks!
diff mbox

Patch

diff --git a/common/cmd_part.c b/common/cmd_part.c
index 4bdbf90..8085d26 100644
--- a/common/cmd_part.c
+++ b/common/cmd_part.c
@@ -112,6 +112,74 @@  static int do_part_list(int argc, char * const argv[])
 	return 0;
 }
 
+static int do_part_start(int argc, char * const argv[])
+{
+	block_dev_desc_t *desc;
+	disk_partition_t info;
+	char buf[512] = { 0 };
+	int part;
+	int err;
+	int ret;
+
+	if (argc < 3)
+		return CMD_RET_USAGE;
+	if (argc > 4)
+		return CMD_RET_USAGE;
+
+	part = simple_strtoul(argv[2], NULL, 0);
+
+	ret = get_device(argv[0], argv[1], &desc);
+	if (ret < 0)
+		return 1;
+
+	err = get_partition_info(desc, part, &info);
+	if (err)
+		return 1;
+
+	snprintf(buf, sizeof(buf), "%lx", info.start);
+
+	if (argc > 3)
+		setenv(argv[3], buf);
+	else
+		printf("%s\n", buf);
+
+	return 0;
+}
+
+static int do_part_size(int argc, char * const argv[])
+{
+	block_dev_desc_t *desc;
+	disk_partition_t info;
+	char buf[512] = { 0 };
+	int part;
+	int err;
+	int ret;
+
+	if (argc < 3)
+		return CMD_RET_USAGE;
+	if (argc > 4)
+		return CMD_RET_USAGE;
+
+	part = simple_strtoul(argv[2], NULL, 0);
+
+	ret = get_device(argv[0], argv[1], &desc);
+	if (ret < 0)
+		return 1;
+
+	err = get_partition_info(desc, part, &info);
+	if (err)
+		return 1;
+
+	snprintf(buf, sizeof(buf), "%lx", info.size);
+
+	if (argc > 3)
+		setenv(argv[3], buf);
+	else
+		printf("%s\n", buf);
+
+	return 0;
+}
+
 static int do_part(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
 	if (argc < 2)
@@ -121,6 +189,10 @@  static int do_part(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 		return do_part_uuid(argc - 2, argv + 2);
 	else if (!strcmp(argv[1], "list"))
 		return do_part_list(argc - 2, argv + 2);
+	else if (!strcmp(argv[1], "start"))
+		return do_part_start(argc - 2, argv + 2);
+	else if (!strcmp(argv[1], "size"))
+		return do_part_size(argc - 2, argv + 2);
 
 	return CMD_RET_USAGE;
 }
@@ -136,5 +208,9 @@  U_BOOT_CMD(
 	"    - print a device's partition table\n"
 	"part list <interface> <dev> [flags] <varname>\n"
 	"    - set environment variable to the list of partitions\n"
-	"      flags can be -bootable (list only bootable partitions)"
+	"      flags can be -bootable (list only bootable partitions)\n"
+	"part start <interface> <dev> <part> <varname>\n"
+	"    - set environment variable to the start of the partition (in blocks)\n"
+	"part size <interface> <dev> <part> <varname>\n"
+	"    - set environment variable to the size of the partition (in blocks)"
 );