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

Simon Glass
2023-06-26T09:09:01Z

Hi Joshua,

On Fri, 23 Jun 2023 at 21:01, Joshua Watt <jpewhacker@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@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