[RFC 11/22] efi_loader: disk: use udevice instead of blk_desc

Simon Glass sjg at chromium.org
Sun Oct 10 16:14:17 CEST 2021


On Thu, 30 Sept 2021 at 23:04, AKASHI Takahiro
<takahiro.akashi at linaro.org> wrote:
>
> In most of all usages, we can avoid accessing blk_desc which is eventually
> an internal data structure to be hided outside block device drivers.
>
> Signed-off-by: AKASHI Takahiro <takahiro.akashi at linaro.org>
> ---
>  lib/efi_loader/efi_disk.c | 25 ++++++++++++-------------
>  1 file changed, 12 insertions(+), 13 deletions(-)
>

Reviewed-by: Simon Glass <sjg at chromium.org>

But needs updating to use media_read() or similar


> diff --git a/lib/efi_loader/efi_disk.c b/lib/efi_loader/efi_disk.c
> index 988907ecb910..dfa6f898d586 100644
> --- a/lib/efi_loader/efi_disk.c
> +++ b/lib/efi_loader/efi_disk.c
> @@ -45,7 +45,7 @@ struct efi_disk_obj {
>         unsigned int part;
>         struct efi_simple_file_system_protocol *volume;
>         lbaint_t offset;
> -       struct blk_desc *desc;
> +       struct udevice *dev; /* TODO: move it to efi_object */
>  };
>
>  /**
> @@ -80,14 +80,12 @@ static efi_status_t efi_disk_rw_blocks(struct efi_block_io *this,
>                         void *buffer, enum efi_disk_direction direction)
>  {
>         struct efi_disk_obj *diskobj;
> -       struct blk_desc *desc;
>         int blksz;
>         int blocks;
>         unsigned long n;
>
>         diskobj = container_of(this, struct efi_disk_obj, ops);
> -       desc = (struct blk_desc *) diskobj->desc;
> -       blksz = desc->blksz;
> +       blksz = diskobj->media.block_size;
>         blocks = buffer_size / blksz;
>         lba += diskobj->offset;
>
> @@ -99,9 +97,9 @@ static efi_status_t efi_disk_rw_blocks(struct efi_block_io *this,
>                 return EFI_BAD_BUFFER_SIZE;
>
>         if (direction == EFI_DISK_READ)
> -               n = blk_dread(desc, lba, blocks, buffer);
> +               n = blk_read(diskobj->dev, lba, blocks, buffer);
>         else
> -               n = blk_dwrite(desc, lba, blocks, buffer);
> +               n = blk_write(diskobj->dev, lba, blocks, buffer);
>
>         /* We don't do interrupts, so check for timers cooperatively */
>         efi_timer_check();
> @@ -443,7 +441,6 @@ static efi_status_t efi_disk_add_dev(
>         diskobj->ops = block_io_disk_template;
>         diskobj->ifname = if_typename;
>         diskobj->dev_index = dev_index;
> -       diskobj->desc = desc;
>
>         /* Fill in EFI IO Media info (for read/write callbacks) */
>         diskobj->media.removable_media = desc->removable;
> @@ -647,20 +644,22 @@ bool efi_disk_is_system_part(efi_handle_t handle)
>  {
>         struct efi_handler *handler;
>         struct efi_disk_obj *diskobj;
> -       struct disk_partition info;
> +       struct udevice *dev;
> +       struct disk_part *part;
>         efi_status_t ret;
> -       int r;
>
>         /* check if this is a block device */
>         ret = efi_search_protocol(handle, &efi_block_io_guid, &handler);
>         if (ret != EFI_SUCCESS)
>                 return false;
>
> +       /* find a partition udevice */
>         diskobj = container_of(handle, struct efi_disk_obj, header);
> -
> -       r = part_get_info(diskobj->desc, diskobj->part, &info);
> -       if (r)
> +       dev = diskobj->dev;
> +       if (!dev || dev->driver->id != UCLASS_PARTITION)
>                 return false;
>
> -       return !!(info.bootable & PART_EFI_SYSTEM_PARTITION);
> +       part = dev_get_uclass_plat(dev);
> +
> +       return !!(part->gpt_part_info.bootable & PART_EFI_SYSTEM_PARTITION);
>  }
> --
> 2.33.0
>


More information about the U-Boot mailing list