In most of all usages, we can avoid using blk_desc which is expected
to be data private to the device not be accessed outside device drivers.

Signed-off-by: AKASHI Takahiro <takahiro.aka...@linaro.org>
---
 lib/efi_loader/efi_disk.c | 25 ++++++++++++-------------
 1 file changed, 12 insertions(+), 13 deletions(-)

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

Reply via email to