summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorHeinrich Schuchardt <heinrich.schuchardt@canonical.com>2022-10-04 16:19:30 +0200
committerHeinrich Schuchardt <heinrich.schuchardt@canonical.com>2022-10-06 22:54:57 +0200
commita6d4f704ad4ae91f66d1901877f072f762812c39 (patch)
treebf41c592cfa66c80ca9212ee622e79fe89aadad1 /lib
parentf3290be388aa12971ba3cabc969b8d3c94ea7035 (diff)
efi_driver: carve out function to create block device
* 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>
Diffstat (limited to 'lib')
-rw-r--r--lib/efi_driver/efi_block_device.c32
1 files changed, 25 insertions, 7 deletions
diff --git a/lib/efi_driver/efi_block_device.c b/lib/efi_driver/efi_block_device.c
index 9ccc148590..10f3cb90c4 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 = 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,