[PATCH 1/1] efi_driver: provide driver binding protocol to bind function
Ilias Apalodimas
ilias.apalodimas at linaro.org
Thu Oct 6 11:29:44 CEST 2022
Hi Heinrich,
On Tue, Oct 04, 2022 at 07:21:02PM +0200, Heinrich Schuchardt wrote:
> DisconnectController() is based on the open protocol information created
> when the driver opens a protocol with BY_CHILD_CONTROLLER or BY_DRIVER.
>
> To create an open protocol information it is required to supply the handle
> of the driver as agent handle. This information is available as field
> DriverBindingHandle in the driver binding protocol.
>
> Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt at canonical.com>
This doesn't seem to apply on current -master. Is there a patch that needs
to be applied before that?
Thanks
/Ilias
> ---
> include/efi_driver.h | 29 +++++++++++++++--------------
> lib/efi_driver/efi_block_device.c | 5 ++++-
> lib/efi_driver/efi_uclass.c | 2 +-
> 3 files changed, 20 insertions(+), 16 deletions(-)
>
> diff --git a/include/efi_driver.h b/include/efi_driver.h
> index de38abe83b..71e0d3194e 100644
> --- a/include/efi_driver.h
> +++ b/include/efi_driver.h
> @@ -10,6 +10,19 @@
>
> #include <efi_loader.h>
>
> +/**
> + * struct efi_driver_binding_extended_protocol - extended driver binding protocol
> + *
> + * This structure adds internal fields to the driver binding protocol.
> + *
> + * @bp: driver binding protocol
> + * @ops: operations supported by the driver
> + */
> +struct efi_driver_binding_extended_protocol {
> + struct efi_driver_binding_protocol bp;
> + const struct efi_driver_ops *ops;
> +};
> +
> /**
> * struct efi_driver_ops - operations support by an EFI driver
> *
> @@ -25,20 +38,8 @@
> struct efi_driver_ops {
> const efi_guid_t *protocol;
> const efi_guid_t *child_protocol;
> - efi_status_t (*bind)(efi_handle_t handle, void *interface);
> -};
> -
> -/**
> - * struct efi_driver_binding_extended_protocol - extended driver binding protocol
> - *
> - * This structure adds internal fields to the driver binding protocol.
> - *
> - * @bp: driver binding protocol
> - * @ops: operations supported by the driver
> - */
> -struct efi_driver_binding_extended_protocol {
> - struct efi_driver_binding_protocol bp;
> - const struct efi_driver_ops *ops;
> + efi_status_t (*bind)(struct efi_driver_binding_extended_protocol *this,
> + efi_handle_t handle, void *interface);
> };
>
> #endif /* _EFI_DRIVER_H */
> diff --git a/lib/efi_driver/efi_block_device.c b/lib/efi_driver/efi_block_device.c
> index e9eabbde58..f440067f70 100644
> --- a/lib/efi_driver/efi_block_device.c
> +++ b/lib/efi_driver/efi_block_device.c
> @@ -174,11 +174,14 @@ err:
> /**
> * efi_bl_bind() - bind to a block io protocol
> *
> + * @this: driver binding protocol
> * @handle: handle
> * @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_bind(
> + struct efi_driver_binding_extended_protocol *this,
> + efi_handle_t handle, void *interface)
> {
> efi_status_t ret = EFI_SUCCESS;
> struct efi_object *obj = efi_search_obj(handle);
> diff --git a/lib/efi_driver/efi_uclass.c b/lib/efi_driver/efi_uclass.c
> index aabee0e260..0a16c594e3 100644
> --- a/lib/efi_driver/efi_uclass.c
> +++ b/lib/efi_driver/efi_uclass.c
> @@ -146,7 +146,7 @@ static efi_status_t EFIAPI efi_uc_start(
> ret = check_node_type(controller_handle);
> if (ret != EFI_SUCCESS)
> goto err;
> - ret = bp->ops->bind(controller_handle, interface);
> + ret = bp->ops->bind(bp, controller_handle, interface);
> if (ret == EFI_SUCCESS)
> goto out;
>
> --
> 2.37.2
>
More information about the U-Boot
mailing list