[PATCH 1/1] efi_driver: provide driver binding protocol to bind function
Heinrich Schuchardt
heinrich.schuchardt at canonical.com
Thu Oct 6 12:56:57 CEST 2022
On 10/6/22 11:29, Ilias Apalodimas wrote:
> 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?
I guess you miss: efi_driver: reformat efi_block_device.c
Cf.
https://source.denx.de/u-boot/custodians/u-boot-efi/-/commits/efi-2023-01
Best regards
Heinrich
>
> 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