[RFC PATCH 01/10] GPT: Add function to get gpt header and partition entries
Sughosh Ganu
sughosh.ganu at linaro.org
Wed Dec 8 08:40:51 CET 2021
hi Patrick,
On Tue, 7 Dec 2021 at 21:05, Patrick DELAUNAY <patrick.delaunay at foss.st.com>
wrote:
> Hi Sugosh
>
> On 11/25/21 8:01 AM, Sughosh Ganu wrote:
>
> Add function to get the gpt header and partition entries filled. These
>
> would be used subsequently for multi bank firmware update support on
>
> devices where the images reside on GPT partitions.
>
>
>
> Signed-off-by: Sughosh Ganu <sughosh.ganu at linaro.org> <sughosh.ganu at linaro.org>
>
> ---
>
> disk/part_efi.c | 10 ++++++++++
>
> include/part.h | 14 ++++++++++++++
>
> 2 files changed, 24 insertions(+)
>
>
>
> diff --git a/disk/part_efi.c b/disk/part_efi.c
>
> index 0ca7effc32..792b9218a9 100644
>
> --- a/disk/part_efi.c
>
> +++ b/disk/part_efi.c
>
> @@ -216,6 +216,16 @@ int get_disk_guid(struct blk_desc * dev_desc, char *guid)
>
> return 0;
>
> }
>
> +int get_gpt_hdr_parts(struct blk_desc *desc, gpt_header *gpt_head,
>
> + gpt_entry **gpt_pte)
>
> +{
>
> + /* This function validates and fills in the GPT header and PTE's */
>
> + if (find_valid_gpt(desc, gpt_head, gpt_pte) != 1)
>
> + return -EINVAL;
>
> +
>
> + return 0;
>
> +}
>
> +
>
> void part_print_efi(struct blk_desc *dev_desc)
>
> {
>
> ALLOC_CACHE_ALIGN_BUFFER_PAD(gpt_header, gpt_head, 1, dev_desc->blksz);
>
> diff --git a/include/part.h b/include/part.h
>
> index b66b07a1f0..8e86485b97 100644
>
> --- a/include/part.h
>
> +++ b/include/part.h
>
> @@ -345,6 +345,20 @@ struct part_driver {
>
> #if CONFIG_IS_ENABLED(EFI_PARTITION)
>
> /* disk/part_efi.c */
>
> +
>
> +/**
>
> + * get_gpt_hdr_parts() - Get information on the GPT Header and
>
> + * Partition Table Entries
>
> + *
>
> + * @param desc - block device descriptor
>
> + * @param gpt_h - pointer to GPT header representation
>
>
>
> gpt_h need to be allocated / DMA alligned by caller
>
>
Will add this comment to the description.
>
>
> + * @param gpt_e - pointer to GPT partition table entries
>
>
>
> gpt_e is allocated in this fucntion need to freed by caller
>
>
Will add this comment to the description.
>
>
> + *
>
> + * @return - zero on success, otherwise error
>
> + */
>
> +int get_gpt_hdr_parts(struct blk_desc *desc, gpt_header *gpt_head,
>
> + gpt_entry **gpt_pte);
>
> +
>
> /**
>
> * write_gpt_table() - Write the GUID Partition Table to disk
>
> *
>
> no need to export the low level function "find_valid_gpt"
>
>
find_valid_gpt is not being exported. It is defined statically in
part_efi.c. Do i misunderstand your comment?
>
>
> the same services are already provided by part_get_info() ?
>
> ST Restricted
>
> 2 information are used in the serie
>
>
>
> => gpt_head->num_partition_entries
>
> => &gpt_pte[i].partition_type_guid
>
>
>
>
>
> type_guid is available in disk_partition,
>
> and num_partition_entries is not needed (replaced by MAX_SEARCH_PARTITIONS)
>
>
>
> something like:
>
>
>
> struct disk_partition info;
>
>
>
> for (p = 1; p < MAX_SEARCH_PARTITIONS; p++) {
>
> if (part_get_info(desc, p, &info))
>
> continue;
>
> => info.type_guid
>
> }
>
>
I had actually explored using part_get_info. But the type_guid field is
actually a char string. While I need the guid value to compare it using
guidcmp. Which is the reason I introduced get_gpt_hdr_parts.
-sughosh
>
> Regards
>
>
>
> Patrick
>
>
More information about the U-Boot
mailing list