Skip to contentSkip to conversation

common: cmd_part: Proper alignment

PATCH New Paul Kocialkowski 3 participants 5 messages Jun 15, 2015 – Jun 19, 2015

lore
Share & tools
lore
#0 lore raw

PATCH v3 1/2 common: cmd_part: Proper alignment

This fixes a misaligned declaration.

---
 common/cmd_part.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
common/cmd_part.c +1 -1
index 8483c12..4bdbf90 100644
@@ -88,7 +88,7 @@ static int do_part_list(int argc, char * const argv[])
 	if (var != NULL) {
 		int p;
 		char str[512] = { '\0', };
-	  disk_partition_t info;
+		disk_partition_t info;
 
 		for (p = 1; p < 128; p++) {
 			char t[5];
Signature · 1 line
1.9.1
#1 lore raw

PATCH v3 2/2 common: cmd_part: start and size sub-commands introduction

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.

---
 common/cmd_part.c | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 77 insertions(+), 1 deletion(-)
common/cmd_part.c +77 -1
index 4bdbf90..8085d26 100644
@@ -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)"
 );
Signature · 1 line
1.9.1
#2 lore raw

PATCH v3 2/2 common: cmd_part: start and size sub-commands introduction

Quoted 7 lines · Paul Kocialkowski

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,

#3 lore raw

PATCH v3 2/2 common: cmd_part: start and size sub-commands introduction

In reply to Paul Kocialkowski
Quoted 10 lines · Paul Kocialkowski

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.

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

Signature · 8 lines
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150619/8b2a5a0b/attachment.sig>
#4 lore raw

PATCH v3 1/2 common: cmd_part: Proper alignment

In reply to Paul Kocialkowski
Quoted 3 lines · Paul Kocialkowski

This fixes a misaligned declaration.

Applied to u-boot/master, thanks!

Signature · 8 lines
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150619/671ef3d8/attachment.sig>