efi_driver: carve out function to create block device
authorHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Tue, 4 Oct 2022 14:19:30 +0000 (16:19 +0200)
committerHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Thu, 6 Oct 2022 20:54:57 +0000 (22:54 +0200)
* 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

index 9ccc148..10f3cb9 100644 (file)
@@ -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 = EFI_SUCCESS;
+       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,