diff mbox series

[14/21] efi_driver: efi_uclass: Add unbind method to efi_driver_ops

Message ID 20250122170858.961359-15-adriano.cordova@canonical.com
State Changes Requested, archived
Delegated to: Heinrich Schuchardt
Headers show
Series EFI driver to support multiple network interfaces | expand

Commit Message

Adriano Cordova Jan. 22, 2025, 5:08 p.m. UTC
This way when the stop() method of the EFI driver gets called
whatever bind() did can be cleaned up.

Signed-off-by: Adriano Cordova <adriano.cordova@canonical.com>
---
 include/efi_driver.h        | 4 ++++
 lib/efi_driver/efi_uclass.c | 4 ++++
 2 files changed, 8 insertions(+)
diff mbox series

Patch

diff --git a/include/efi_driver.h b/include/efi_driver.h
index 63a95e4cf8..8f785f7945 100644
--- a/include/efi_driver.h
+++ b/include/efi_driver.h
@@ -36,6 +36,8 @@  struct efi_driver_binding_extended_protocol {
  *			driver binding protocol.
  * @bind:		Function called by the EFI uclass to attach the
  *			driver to EFI driver to a handle.
+ * @unbind:		Function called by the EFI uclass to detach the
+ *			driver to EFI driver to a handle.
  */
 struct efi_driver_ops {
 	const efi_guid_t *protocol;
@@ -43,6 +45,8 @@  struct efi_driver_ops {
 	efi_status_t (*init)(struct efi_driver_binding_extended_protocol *this);
 	efi_status_t (*bind)(struct efi_driver_binding_extended_protocol *this,
 			     efi_handle_t handle, void *interface);
+	efi_status_t (*unbind)(struct efi_driver_binding_extended_protocol *this,
+			       efi_handle_t handle);
 };
 
 #endif /* _EFI_DRIVER_H */
diff --git a/lib/efi_driver/efi_uclass.c b/lib/efi_driver/efi_uclass.c
index 6553141f4e..393d62d3ba 100644
--- a/lib/efi_driver/efi_uclass.c
+++ b/lib/efi_driver/efi_uclass.c
@@ -247,6 +247,10 @@  static efi_status_t EFIAPI efi_uc_stop(
 	if (ret != EFI_SUCCESS)
 		log_err("Cannot free EFI memory pool\n");
 
+	ret = bp->ops->unbind(bp, controller_handle);
+	if (ret != EFI_SUCCESS)
+		goto out;
+
 	/* Detach driver from controller */
 	ret = efi_close_protocol(controller_handle, bp->ops->protocol,
 				 this->driver_binding_handle,