diff mbox series

[1/1] efi_driver: carve out function to create block device

Message ID 20221004142925.133557-1-heinrich.schuchardt@canonical.com
State Accepted, archived
Delegated to: Heinrich Schuchardt
Headers show
Series [1/1] efi_driver: carve out function to create block device | expand

Commit Message

Heinrich Schuchardt Oct. 4, 2022, 2:29 p.m. UTC
* Carve out function efi_bl_create_block_device() from efi_bl_bind().
* Add a check for U-Boot devices to efi_bl_bind().

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
---
 lib/efi_driver/efi_block_device.c | 32 ++++++++++++++++++++++++-------
 lib/efi_driver/efi_uclass.c       |  9 ---------
 2 files changed, 25 insertions(+), 16 deletions(-)

Comments

Ilias Apalodimas Oct. 5, 2022, 8:49 a.m. UTC | #1
Hi Heinrich, 

On Tue, Oct 04, 2022 at 04:29:25PM +0200, Heinrich Schuchardt wrote:
> * Carve out function efi_bl_create_block_device() from efi_bl_bind().
> * Add a check for U-Boot devices to efi_bl_bind().

What the code does is obvious here,  can we slightly change the commit
message and explain why this is needed?  Readability?

> 
> Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
> ---
>  lib/efi_driver/efi_block_device.c | 32 ++++++++++++++++++++++++-------
>  lib/efi_driver/efi_uclass.c       |  9 ---------
>  2 files changed, 25 insertions(+), 16 deletions(-)
> 
> diff --git a/lib/efi_driver/efi_block_device.c b/lib/efi_driver/efi_block_device.c
> index 9ccc148590..3103040870 100644
> --- a/lib/efi_driver/efi_block_device.c
> +++ b/lib/efi_driver/efi_block_device.c
> @@ -114,21 +114,16 @@ static ulong efi_bl_write(struct udevice *dev, lbaint_t blknr, lbaint_t blkcnt,
>   * @interface:	block io protocol
>   * Return:	status code
>   */
> -static efi_status_t efi_bl_bind(efi_handle_t handle, void *interface)
> +static efi_status_t
> +efi_bl_create_block_device(efi_handle_t handle, void *interface)
>  {
>  	struct udevice *bdev = NULL, *parent = dm_root();
>  	efi_status_t ret;
>  	int devnum;
>  	char *name;
> -	struct efi_object *obj = efi_search_obj(handle);
>  	struct efi_block_io *io = interface;
>  	struct efi_blk_plat *plat;
>  
> -	EFI_PRINT("%s: handle %p, interface %p\n", __func__, handle, io);
> -
> -	if (!obj || !interface)
> -		return EFI_INVALID_PARAMETER;
> -
>  	devnum = blk_find_max_devnum(UCLASS_EFI_LOADER);
>  	if (devnum == -ENODEV)
>  		devnum = 0;
> @@ -176,6 +171,29 @@ err:
>  	return ret;
>  }
>  
> +/**
> + * efi_bl_bind() - bind to a block io protocol
> + *
> + * @handle:	handle
> + * @interface:	block io protocol
> + * Return:	status code
> + */
> +static efi_status_t efi_bl_bind(efi_handle_t handle, void *interface)
> +{
> +	efi_status_t ret;
> +	struct efi_object *obj = efi_search_obj(handle);
> +
> +	EFI_PRINT("%s: handle %p, interface %p\n", __func__, handle, interface);
> +
> +	if (!obj || !interface)
> +		return EFI_INVALID_PARAMETER;
> +
> +	if (!handle->dev)
> +		ret = efi_bl_create_block_device(handle, interface);

Keeping in mind devices should usually be bound once (unless we reinit the
subsystem) should we print something here?
Also ret need to be initialized on the declaration.

> +
> +	return ret;
> +}
> +
>  /* Block device driver operators */
>  static const struct blk_ops efi_blk_ops = {
>  	.read	= efi_bl_read,
> -- 
> 2.37.2
> 

Thanks
/Ilias
diff mbox series

Patch

diff --git a/lib/efi_driver/efi_block_device.c b/lib/efi_driver/efi_block_device.c
index 9ccc148590..3103040870 100644
--- a/lib/efi_driver/efi_block_device.c
+++ b/lib/efi_driver/efi_block_device.c
@@ -114,21 +114,16 @@  static ulong efi_bl_write(struct udevice *dev, lbaint_t blknr, lbaint_t blkcnt,
  * @interface:	block io protocol
  * Return:	status code
  */
-static efi_status_t efi_bl_bind(efi_handle_t handle, void *interface)
+static efi_status_t
+efi_bl_create_block_device(efi_handle_t handle, void *interface)
 {
 	struct udevice *bdev = NULL, *parent = dm_root();
 	efi_status_t ret;
 	int devnum;
 	char *name;
-	struct efi_object *obj = efi_search_obj(handle);
 	struct efi_block_io *io = interface;
 	struct efi_blk_plat *plat;
 
-	EFI_PRINT("%s: handle %p, interface %p\n", __func__, handle, io);
-
-	if (!obj || !interface)
-		return EFI_INVALID_PARAMETER;
-
 	devnum = blk_find_max_devnum(UCLASS_EFI_LOADER);
 	if (devnum == -ENODEV)
 		devnum = 0;
@@ -176,6 +171,29 @@  err:
 	return ret;
 }
 
+/**
+ * efi_bl_bind() - bind to a block io protocol
+ *
+ * @handle:	handle
+ * @interface:	block io protocol
+ * Return:	status code
+ */
+static efi_status_t efi_bl_bind(efi_handle_t handle, void *interface)
+{
+	efi_status_t ret;
+	struct efi_object *obj = efi_search_obj(handle);
+
+	EFI_PRINT("%s: handle %p, interface %p\n", __func__, handle, interface);
+
+	if (!obj || !interface)
+		return EFI_INVALID_PARAMETER;
+
+	if (!handle->dev)
+		ret = efi_bl_create_block_device(handle, interface);
+
+	return ret;
+}
+
 /* Block device driver operators */
 static const struct blk_ops efi_blk_ops = {
 	.read	= efi_bl_read,