* [U-Boot] [PATCH 2/3] gpt: add optional parameter guid in gpt command
@ 2015-10-13 14:23 Patrick Delaunay
2015-10-15 20:58 ` Rob Herring
0 siblings, 1 reply; 5+ messages in thread
From: Patrick Delaunay @ 2015-10-13 14:23 UTC (permalink / raw)
To: u-boot
code under flag CONFIG_PARTITION_TYPE_GUID
add parameter guid to select partition type guid
example of use with gpt command :
partitions = uuid_disk=${uuid_gpt_disk};name=boot,start=0x4400,
size=0x6bc00,uuid=${uuid_gpt_boot};name=root,start=0x70000,
size=0x7538ba00,uuid=${uuid_gpt_root},
guid=0fc63daf-8483-4772-8e79-3d69d8477de4;
gpt write mmc 0 $partitions
Signed-off-by: Patrick Delaunay <patrick.delaunay73@gmail.com>
---
common/cmd_gpt.c | 17 +++++++++++++++++
disk/part.c | 9 +++++++++
disk/part_efi.c | 25 +++++++++++++++++++++++++
include/part.h | 3 +++
4 files changed, 54 insertions(+)
diff --git a/common/cmd_gpt.c b/common/cmd_gpt.c
index c56fe15..1e8f927 100644
--- a/common/cmd_gpt.c
+++ b/common/cmd_gpt.c
@@ -218,6 +218,23 @@ static int set_gpt_info(block_dev_desc_t *dev_desc,
strcpy((char *)parts[i].uuid, p);
free(val);
}
+#ifdef CONFIG_PARTITION_TYPE_GUID
+ /* guid */
+ val = extract_val(tok, "guid");
+ if (val) {
+ /* 'guid' is optional */
+ if (extract_env(val, &p))
+ p = val;
+ if (strlen(p) >= sizeof(parts[i].guid)) {
+ printf("Wrong guid format for partition %d\n",
+ i);
+ errno = -4;
+ goto err;
+ }
+ strcpy((char *)parts[i].guid, p);
+ free(val);
+ }
+#endif
/* name */
val = extract_val(tok, "name");
if (!val) { /* name is mandatory */
diff --git a/disk/part.c b/disk/part.c
index 43485c9..316454d 100644
--- a/disk/part.c
+++ b/disk/part.c
@@ -391,6 +391,9 @@ int get_partition_info(block_dev_desc_t *dev_desc, int
part,
/* The common case is no UUID support */
info->uuid[0] = 0;
#endif
+#ifdef CONFIG_PARTITION_TYPE_GUIDS
+ info->guid[0] = 0;
+#endif
switch (dev_desc->part_type) {
#ifdef CONFIG_MAC_PARTITION
@@ -526,6 +529,9 @@ int get_device_and_partition(const char *ifname, const
char *dev_part_str,
#ifdef CONFIG_PARTITION_UUIDS
info->uuid[0] = 0;
#endif
+#ifdef CONFIG_PARTITION_TYPE_GUIDS
+ info->guid[0] = 0;
+#endif
return 0;
}
@@ -610,6 +616,9 @@ int get_device_and_partition(const char *ifname, const
char *dev_part_str,
#ifdef CONFIG_PARTITION_UUIDS
info->uuid[0] = 0;
#endif
+#ifdef CONFIG_PARTITION_TYPE_GUIDS
+ info->guid[0] = 0;
+#endif
ret = 0;
goto cleanup;
diff --git a/disk/part_efi.c b/disk/part_efi.c
index 15627f2..25bf8f9 100644
--- a/disk/part_efi.c
+++ b/disk/part_efi.c
@@ -283,6 +283,10 @@ int get_partition_info_efi(block_dev_desc_t *
dev_desc, int part,
uuid_bin_to_str(gpt_pte[part - 1].unique_partition_guid.b, info->uuid,
UUID_STR_FORMAT_GUID);
#endif
+#ifdef CONFIG_PARTITION_TYPE_GUID
+ uuid_bin_to_str(gpt_pte[part - 1].partition_type_guid.b, info->guid,
+ UUID_STR_FORMAT_GUID);
+#endif
debug("%s: start 0x" LBAF ", size 0x" LBAF ", name %s\n", __func__,
info->start, info->size, info->name);
@@ -419,6 +423,10 @@ int gpt_fill_pte(gpt_header *gpt_h, gpt_entry *gpt_e,
char *str_uuid;
unsigned char *bin_uuid;
#endif
+#ifdef CONFIG_PARTITION_TYPE_GUID
+ char *str_guid;
+ unsigned char *bin_guid;
+#endif
for (i = 0; i < parts; i++) {
/* partition starting lba */
@@ -445,9 +453,26 @@ int gpt_fill_pte(gpt_header *gpt_h, gpt_entry *gpt_e,
else
gpt_e[i].ending_lba = cpu_to_le64(offset - 1);
+#ifdef CONFIG_PARTITION_TYPE_GUID
+ str_guid = partitions[i].guid;
+ bin_guid = gpt_e[i].partition_type_guid.b;
+ if (strlen(str_guid)) {
+ if (uuid_str_to_bin(str_guid, bin_guid,
+ UUID_STR_FORMAT_GUID)) {
+ printf("Partition no. %d: invalid type guid: %s\n",
+ i, str_guid);
+ return -1;
+ }
+ } else {
+ /* default partition type GUID */
+ memcpy(bin_guid,
+ &PARTITION_BASIC_DATA_GUID, 16);
+ }
+#else
/* partition type GUID */
memcpy(gpt_e[i].partition_type_guid.b,
&PARTITION_BASIC_DATA_GUID, 16);
+#endif
#ifdef CONFIG_PARTITION_UUIDS
str_uuid = partitions[i].uuid;
diff --git a/include/part.h b/include/part.h
index 8ea9b30..d57d284 100644
--- a/include/part.h
+++ b/include/part.h
@@ -93,6 +93,9 @@ typedef struct disk_partition {
#ifdef CONFIG_PARTITION_UUIDS
char uuid[37]; /* filesystem UUID as string, if exists */
#endif
+#ifdef CONFIG_PARTITION_TYPE_GUID
+ char guid[37]; /* type GUID as string, if exists */
+#endif
} disk_partition_t;
/* Misc _get_dev functions */
--
1.9.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [U-Boot] [PATCH 2/3] gpt: add optional parameter guid in gpt command
2015-10-13 14:23 [U-Boot] [PATCH 2/3] gpt: add optional parameter guid in gpt command Patrick Delaunay
@ 2015-10-15 20:58 ` Rob Herring
2015-10-15 21:46 ` Tom Rini
0 siblings, 1 reply; 5+ messages in thread
From: Rob Herring @ 2015-10-15 20:58 UTC (permalink / raw)
To: u-boot
On Tue, Oct 13, 2015 at 9:23 AM, Patrick Delaunay
<patrick.delaunay73@gmail.com> wrote:
> code under flag CONFIG_PARTITION_TYPE_GUID
> add parameter guid to select partition type guid
>
> example of use with gpt command :
>
> partitions = uuid_disk=${uuid_gpt_disk};name=boot,start=0x4400,
> size=0x6bc00,uuid=${uuid_gpt_boot};name=root,start=0x70000,
> size=0x7538ba00,uuid=${uuid_gpt_root},
> guid=0fc63daf-8483-4772-8e79-3d69d8477de4;
The mixture of UUID and GUID is confusing. What we want are the
GUIDs/UUIDs for unique ID and the partition type. I would just call
the partition type "type". This would allow the same format to be used
for MBR partitions if someone wanted to do support for that.
Rob
>
> gpt write mmc 0 $partitions
>
> Signed-off-by: Patrick Delaunay <patrick.delaunay73@gmail.com>
> ---
>
> common/cmd_gpt.c | 17 +++++++++++++++++
> disk/part.c | 9 +++++++++
> disk/part_efi.c | 25 +++++++++++++++++++++++++
> include/part.h | 3 +++
> 4 files changed, 54 insertions(+)
>
> diff --git a/common/cmd_gpt.c b/common/cmd_gpt.c
> index c56fe15..1e8f927 100644
> --- a/common/cmd_gpt.c
> +++ b/common/cmd_gpt.c
> @@ -218,6 +218,23 @@ static int set_gpt_info(block_dev_desc_t *dev_desc,
> strcpy((char *)parts[i].uuid, p);
> free(val);
> }
> +#ifdef CONFIG_PARTITION_TYPE_GUID
> + /* guid */
> + val = extract_val(tok, "guid");
> + if (val) {
> + /* 'guid' is optional */
> + if (extract_env(val, &p))
> + p = val;
> + if (strlen(p) >= sizeof(parts[i].guid)) {
> + printf("Wrong guid format for partition %d\n",
> + i);
> + errno = -4;
> + goto err;
> + }
> + strcpy((char *)parts[i].guid, p);
> + free(val);
> + }
> +#endif
> /* name */
> val = extract_val(tok, "name");
> if (!val) { /* name is mandatory */
> diff --git a/disk/part.c b/disk/part.c
> index 43485c9..316454d 100644
> --- a/disk/part.c
> +++ b/disk/part.c
> @@ -391,6 +391,9 @@ int get_partition_info(block_dev_desc_t *dev_desc, int
> part,
> /* The common case is no UUID support */
> info->uuid[0] = 0;
> #endif
> +#ifdef CONFIG_PARTITION_TYPE_GUIDS
> + info->guid[0] = 0;
> +#endif
>
> switch (dev_desc->part_type) {
> #ifdef CONFIG_MAC_PARTITION
> @@ -526,6 +529,9 @@ int get_device_and_partition(const char *ifname, const
> char *dev_part_str,
> #ifdef CONFIG_PARTITION_UUIDS
> info->uuid[0] = 0;
> #endif
> +#ifdef CONFIG_PARTITION_TYPE_GUIDS
> + info->guid[0] = 0;
> +#endif
>
> return 0;
> }
> @@ -610,6 +616,9 @@ int get_device_and_partition(const char *ifname, const
> char *dev_part_str,
> #ifdef CONFIG_PARTITION_UUIDS
> info->uuid[0] = 0;
> #endif
> +#ifdef CONFIG_PARTITION_TYPE_GUIDS
> + info->guid[0] = 0;
> +#endif
>
> ret = 0;
> goto cleanup;
> diff --git a/disk/part_efi.c b/disk/part_efi.c
> index 15627f2..25bf8f9 100644
> --- a/disk/part_efi.c
> +++ b/disk/part_efi.c
> @@ -283,6 +283,10 @@ int get_partition_info_efi(block_dev_desc_t * dev_desc,
> int part,
> uuid_bin_to_str(gpt_pte[part - 1].unique_partition_guid.b, info->uuid,
> UUID_STR_FORMAT_GUID);
> #endif
> +#ifdef CONFIG_PARTITION_TYPE_GUID
> + uuid_bin_to_str(gpt_pte[part - 1].partition_type_guid.b, info->guid,
> + UUID_STR_FORMAT_GUID);
> +#endif
>
> debug("%s: start 0x" LBAF ", size 0x" LBAF ", name %s\n", __func__,
> info->start, info->size, info->name);
> @@ -419,6 +423,10 @@ int gpt_fill_pte(gpt_header *gpt_h, gpt_entry *gpt_e,
> char *str_uuid;
> unsigned char *bin_uuid;
> #endif
> +#ifdef CONFIG_PARTITION_TYPE_GUID
> + char *str_guid;
> + unsigned char *bin_guid;
> +#endif
>
> for (i = 0; i < parts; i++) {
> /* partition starting lba */
> @@ -445,9 +453,26 @@ int gpt_fill_pte(gpt_header *gpt_h, gpt_entry *gpt_e,
> else
> gpt_e[i].ending_lba = cpu_to_le64(offset - 1);
>
> +#ifdef CONFIG_PARTITION_TYPE_GUID
> + str_guid = partitions[i].guid;
> + bin_guid = gpt_e[i].partition_type_guid.b;
> + if (strlen(str_guid)) {
> + if (uuid_str_to_bin(str_guid, bin_guid,
> + UUID_STR_FORMAT_GUID)) {
> + printf("Partition no. %d: invalid type guid: %s\n",
> + i, str_guid);
> + return -1;
> + }
> + } else {
> + /* default partition type GUID */
> + memcpy(bin_guid,
> + &PARTITION_BASIC_DATA_GUID, 16);
> + }
> +#else
> /* partition type GUID */
> memcpy(gpt_e[i].partition_type_guid.b,
> &PARTITION_BASIC_DATA_GUID, 16);
> +#endif
>
> #ifdef CONFIG_PARTITION_UUIDS
> str_uuid = partitions[i].uuid;
> diff --git a/include/part.h b/include/part.h
> index 8ea9b30..d57d284 100644
> --- a/include/part.h
> +++ b/include/part.h
> @@ -93,6 +93,9 @@ typedef struct disk_partition {
> #ifdef CONFIG_PARTITION_UUIDS
> char uuid[37]; /* filesystem UUID as string, if exists */
> #endif
> +#ifdef CONFIG_PARTITION_TYPE_GUID
> + char guid[37]; /* type GUID as string, if exists */
> +#endif
> } disk_partition_t;
>
> /* Misc _get_dev functions */
> --
> 1.9.1
>
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* [U-Boot] [PATCH 2/3] gpt: add optional parameter guid in gpt command
2015-10-15 20:58 ` Rob Herring
@ 2015-10-15 21:46 ` Tom Rini
2015-10-19 14:59 ` Patrick Delaunay
0 siblings, 1 reply; 5+ messages in thread
From: Tom Rini @ 2015-10-15 21:46 UTC (permalink / raw)
To: u-boot
On Thu, Oct 15, 2015 at 03:58:24PM -0500, Rob Herring wrote:
> On Tue, Oct 13, 2015 at 9:23 AM, Patrick Delaunay
> <patrick.delaunay73@gmail.com> wrote:
> > code under flag CONFIG_PARTITION_TYPE_GUID
> > add parameter guid to select partition type guid
> >
> > example of use with gpt command :
> >
> > partitions = uuid_disk=${uuid_gpt_disk};name=boot,start=0x4400,
> > size=0x6bc00,uuid=${uuid_gpt_boot};name=root,start=0x70000,
> > size=0x7538ba00,uuid=${uuid_gpt_root},
> > guid=0fc63daf-8483-4772-8e79-3d69d8477de4;
>
> The mixture of UUID and GUID is confusing. What we want are the
> GUIDs/UUIDs for unique ID and the partition type. I would just call
> the partition type "type". This would allow the same format to be used
> for MBR partitions if someone wanted to do support for that.
... and if someone wants to add MBR support, there's enough use cases
for it (mainly around flashing/factory stuff) that I wouldn't object.
So yes, lets do this with that kind of thing in mind.
--
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/20151015/60c1846b/attachment.sig>
^ permalink raw reply [flat|nested] 5+ messages in thread
* [U-Boot] [PATCH 2/3] gpt: add optional parameter guid in gpt command
2015-10-15 21:46 ` Tom Rini
@ 2015-10-19 14:59 ` Patrick Delaunay
2015-10-20 18:02 ` Tom Rini
0 siblings, 1 reply; 5+ messages in thread
From: Patrick Delaunay @ 2015-10-19 14:59 UTC (permalink / raw)
To: u-boot
2015-10-15 23:46 GMT+02:00 Tom Rini <trini@konsulko.com>:
> On Thu, Oct 15, 2015 at 03:58:24PM -0500, Rob Herring wrote:
> > On Tue, Oct 13, 2015 at 9:23 AM, Patrick Delaunay
> > <patrick.delaunay73@gmail.com> wrote:
> > > code under flag CONFIG_PARTITION_TYPE_GUID
> > > add parameter guid to select partition type guid
> > >
> > > example of use with gpt command :
> > >
> > > partitions = uuid_disk=${uuid_gpt_disk};name=boot,start=0x4400,
> > > size=0x6bc00,uuid=${uuid_gpt_boot};name=root,start=0x70000,
> > > size=0x7538ba00,uuid=${uuid_gpt_root},
> > > guid=0fc63daf-8483-4772-8e79-3d69d8477de4;
> >
> > The mixture of UUID and GUID is confusing. What we want are the
> > GUIDs/UUIDs for unique ID and the partition type. I would just call
> > the partition type "type". This would allow the same format to be used
> > for MBR partitions if someone wanted to do support for that.
>
> ... and if someone wants to add MBR support, there's enough use cases
> for it (mainly around flashing/factory stuff) that I wouldn't object.
> So yes, lets do this with that kind of thing in mind.
>
Hi,
if you prefer, I can modify the parameter name to "type" as proposed in a
version 2 of the patchset.
partitions =
uuid_disk=${uuid_gpt_disk}; \
name=boot,start=0x4400,size=0x6bc00,uuid=${uuid_gpt_boot}; \
name=root,start=0x70000,size=0x7538ba00,uuid=${uuid_gpt_root},type=0fc63daf-8483-4772-8e79-3d69d8477de4;
and to be coherent, I will also modify the field in the struct
disk_partition_t to type_guid
+#ifdef CONFIG_PARTITION_TYPE_GUID
+ char type_guid[37]; /* type GUID as string, if exists */
+#endif
} disk_partition_t;
Patrick
^ permalink raw reply [flat|nested] 5+ messages in thread
* [U-Boot] [PATCH 2/3] gpt: add optional parameter guid in gpt command
2015-10-19 14:59 ` Patrick Delaunay
@ 2015-10-20 18:02 ` Tom Rini
0 siblings, 0 replies; 5+ messages in thread
From: Tom Rini @ 2015-10-20 18:02 UTC (permalink / raw)
To: u-boot
On Mon, Oct 19, 2015 at 04:59:28PM +0200, Patrick Delaunay wrote:
> 2015-10-15 23:46 GMT+02:00 Tom Rini <trini@konsulko.com>:
>
> > On Thu, Oct 15, 2015 at 03:58:24PM -0500, Rob Herring wrote:
> > > On Tue, Oct 13, 2015 at 9:23 AM, Patrick Delaunay
> > > <patrick.delaunay73@gmail.com> wrote:
> > > > code under flag CONFIG_PARTITION_TYPE_GUID
> > > > add parameter guid to select partition type guid
> > > >
> > > > example of use with gpt command :
> > > >
> > > > partitions = uuid_disk=${uuid_gpt_disk};name=boot,start=0x4400,
> > > > size=0x6bc00,uuid=${uuid_gpt_boot};name=root,start=0x70000,
> > > > size=0x7538ba00,uuid=${uuid_gpt_root},
> > > > guid=0fc63daf-8483-4772-8e79-3d69d8477de4;
> > >
> > > The mixture of UUID and GUID is confusing. What we want are the
> > > GUIDs/UUIDs for unique ID and the partition type. I would just call
> > > the partition type "type". This would allow the same format to be used
> > > for MBR partitions if someone wanted to do support for that.
> >
> > ... and if someone wants to add MBR support, there's enough use cases
> > for it (mainly around flashing/factory stuff) that I wouldn't object.
> > So yes, lets do this with that kind of thing in mind.
> >
>
>
> Hi,
>
> if you prefer, I can modify the parameter name to "type" as proposed in a
> version 2 of the patchset.
>
> partitions =
> uuid_disk=${uuid_gpt_disk}; \
> name=boot,start=0x4400,size=0x6bc00,uuid=${uuid_gpt_boot}; \
>
> name=root,start=0x70000,size=0x7538ba00,uuid=${uuid_gpt_root},type=0fc63daf-8483-4772-8e79-3d69d8477de4;
>
> and to be coherent, I will also modify the field in the struct
> disk_partition_t to type_guid
>
> +#ifdef CONFIG_PARTITION_TYPE_GUID
> + char type_guid[37]; /* type GUID as string, if exists */
> +#endif
> } disk_partition_t;
Sounds like a plan, thanks!
--
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/20151020/2ceffdbd/attachment.sig>
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2015-10-20 18:02 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-10-13 14:23 [U-Boot] [PATCH 2/3] gpt: add optional parameter guid in gpt command Patrick Delaunay
2015-10-15 20:58 ` Rob Herring
2015-10-15 21:46 ` Tom Rini
2015-10-19 14:59 ` Patrick Delaunay
2015-10-20 18:02 ` Tom Rini
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox