[PATCH 1/2] disk: part: Add API to get partitions with specific driver

Simon Glass sjg at chromium.org
Mon Jun 26 11:07:37 CEST 2023


Hi Joshua,

On Fri, 23 Jun 2023 at 21:01, Joshua Watt <jpewhacker at gmail.com> wrote:
>
> Adds part_driver_get_type() API which can be used to force a specific
> driver to be used when getting partition information instead of relying
> on auto detection.
>
> Signed-off-by: Joshua Watt <JPEWhacker at gmail.com>
> ---
>  disk/part.c    | 38 +++++++++++++++++++++++++++++++-------
>  include/part.h |  2 ++
>  2 files changed, 33 insertions(+), 7 deletions(-)
>
> diff --git a/disk/part.c b/disk/part.c
> index 35300df590..1f8c786ca5 100644
> --- a/disk/part.c
> +++ b/disk/part.c
> @@ -26,6 +26,22 @@
>  /* Check all partition types */
>  #define PART_TYPE_ALL          -1
>
> +static struct part_driver *part_driver_get_type(int part_type)
> +{
> +       struct part_driver *drv =
> +               ll_entry_start(struct part_driver, part_driver);
> +       const int n_ents = ll_entry_count(struct part_driver, part_driver);
> +       struct part_driver *entry;
> +
> +       for (entry = drv; entry != drv + n_ents; entry++) {
> +               if (part_type == entry->part_type)
> +                       return entry;
> +       }
> +
> +       /* Not found */
> +       return NULL;
> +}
> +
>  static struct part_driver *part_driver_lookup_type(struct blk_desc *dev_desc)
>  {
>         struct part_driver *drv =
> @@ -44,10 +60,7 @@ static struct part_driver *part_driver_lookup_type(struct blk_desc *dev_desc)
>                         }
>                 }
>         } else {
> -               for (entry = drv; entry != drv + n_ents; entry++) {
> -                       if (dev_desc->part_type == entry->part_type)
> -                               return entry;
> -               }
> +               return part_driver_get_type(dev_desc->part_type);
>         }
>
>         /* Not found */
> @@ -306,8 +319,8 @@ void part_print(struct blk_desc *dev_desc)
>                 drv->print(dev_desc);
>  }
>
> -int part_get_info(struct blk_desc *dev_desc, int part,
> -                      struct disk_partition *info)
> +int part_get_info_by_type(struct blk_desc *dev_desc, int part, int part_type,
> +                         struct disk_partition *info)
>  {
>         struct part_driver *drv;
>
> @@ -320,7 +333,12 @@ int part_get_info(struct blk_desc *dev_desc, int part,
>                 info->type_guid[0] = 0;
>  #endif
>
> -               drv = part_driver_lookup_type(dev_desc);
> +               if (part_type == PART_TYPE_UNKNOWN) {
> +                       drv = part_driver_lookup_type(dev_desc);
> +               } else {
> +                       drv = part_driver_get_type(part_type);
> +               }
> +
>                 if (!drv) {
>                         debug("## Unknown partition table type %x\n",
>                               dev_desc->part_type);
> @@ -340,6 +358,12 @@ int part_get_info(struct blk_desc *dev_desc, int part,
>         return -ENOENT;
>  }
>
> +int part_get_info(struct blk_desc *dev_desc, int part,
> +                 struct disk_partition *info)
> +{
> +       return part_get_info_by_type(dev_desc, part, PART_TYPE_UNKNOWN, info);
> +}
> +
>  int part_get_info_whole_disk(struct blk_desc *dev_desc,
>                              struct disk_partition *info)
>  {
> diff --git a/include/part.h b/include/part.h
> index be75c73549..f150c84206 100644
> --- a/include/part.h
> +++ b/include/part.h
> @@ -106,6 +106,8 @@ struct blk_desc *blk_get_dev(const char *ifname, int dev);
>  struct blk_desc *mg_disk_get_dev(int dev);
>
>  /* disk/part.c */
> +int part_get_info_by_type(struct blk_desc *dev_desc, int part, int part_type,
> +                         struct disk_partition *info);

Please can you add a full comment?

Also please add a test to test/dm/part.c for your new function[1]

>  int part_get_info(struct blk_desc *dev_desc, int part,
>                   struct disk_partition *info);
>  /**
> --
> 2.33.0
>

Regards,
Simon


More information about the U-Boot mailing list