Message ID | 20211001050228.55183-23-takahiro.akashi@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | None | expand |
On Thu, 30 Sept 2021 at 23:04, AKASHI Takahiro <takahiro.akashi@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@linaro.org> > --- > lib/efi_loader/efi_disk.c | 25 ++++++++++++------------- > 1 file changed, 12 insertions(+), 13 deletions(-) > Reviewed-by: Simon Glass <sjg@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 >
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); }
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@linaro.org> --- lib/efi_loader/efi_disk.c | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) -- 2.33.0