Skip to content

Commit

Permalink
MdePkg/UefiLib: Abstract driver model protocol uninstallation
Browse files Browse the repository at this point in the history
Provided functions in UEFILib that abstract driver model protocol
uninstallation. This helps drivers to install and uninstall protocols
using a library to keep things seemless.

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1429

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ashish Singhal <[email protected]>
Reviewed-by: Liming Gao <[email protected]>
  • Loading branch information
ashishsingha authored and lgao4 committed Jan 10, 2019
1 parent 938cf4c commit 0290fca
Show file tree
Hide file tree
Showing 2 changed files with 1,074 additions and 1 deletion.
103 changes: 103 additions & 0 deletions MdePkg/Include/Library/UefiLib.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
of size reduction when compiler optimization is disabled. If MDEPKG_NDEBUG is
defined, then debug and assert related macros wrapped by it are the NULL implementations.
Copyright (c) 2019, NVIDIA Corporation. All rights reserved.
Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
Expand Down Expand Up @@ -1283,6 +1284,7 @@ AsciiPrintXY (
...
);


/**
Installs and completes the initialization of a Driver Binding Protocol instance.
Expand Down Expand Up @@ -1315,6 +1317,25 @@ EfiLibInstallDriverBinding (
);


/**
Uninstalls a Driver Binding Protocol instance.
If DriverBinding is NULL, then ASSERT().
If DriverBinding can not be uninstalled, then ASSERT().
@param DriverBinding A Driver Binding Protocol instance that this driver produced.
@retval EFI_SUCCESS The protocol uninstallation successfully completed.
@retval Others Status from gBS->UninstallMultipleProtocolInterfaces().
**/
EFI_STATUS
EFIAPI
EfiLibUninstallDriverBinding (
IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding
);


/**
Installs and completes the initialization of a Driver Binding Protocol instance and
optionally installs the Component Name, Driver Configuration and Driver Diagnostics Protocols.
Expand Down Expand Up @@ -1354,6 +1375,31 @@ EfiLibInstallAllDriverProtocols (
);


/**
Uninstalls a Driver Binding Protocol instance and optionally uninstalls the
Component Name, Driver Configuration and Driver Diagnostics Protocols.
If DriverBinding is NULL, then ASSERT().
If the uninstallation fails, then ASSERT().
@param DriverBinding A Driver Binding Protocol instance that this driver produced.
@param ComponentName A Component Name Protocol instance that this driver produced.
@param DriverConfiguration A Driver Configuration Protocol instance that this driver produced.
@param DriverDiagnostics A Driver Diagnostics Protocol instance that this driver produced.
@retval EFI_SUCCESS The protocol uninstallation successfully completed.
@retval Others Status from gBS->UninstallMultipleProtocolInterfaces().
**/
EFI_STATUS
EFIAPI
EfiLibUninstallAllDriverProtocols (
IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding,
IN CONST EFI_COMPONENT_NAME_PROTOCOL *ComponentName, OPTIONAL
IN CONST EFI_DRIVER_CONFIGURATION_PROTOCOL *DriverConfiguration, OPTIONAL
IN CONST EFI_DRIVER_DIAGNOSTICS_PROTOCOL *DriverDiagnostics OPTIONAL
);


/**
Installs Driver Binding Protocol with optional Component Name and Component Name 2 Protocols.
Expand Down Expand Up @@ -1390,6 +1436,29 @@ EfiLibInstallDriverBindingComponentName2 (
);


/**
Uninstalls Driver Binding Protocol with optional Component Name and Component Name 2 Protocols.
If DriverBinding is NULL, then ASSERT().
If the uninstallation fails, then ASSERT().
@param DriverBinding A Driver Binding Protocol instance that this driver produced.
@param ComponentName A Component Name Protocol instance that this driver produced.
@param ComponentName2 A Component Name 2 Protocol instance that this driver produced.
@retval EFI_SUCCESS The protocol installation successfully completed.
@retval Others Status from gBS->UninstallMultipleProtocolInterfaces().
**/
EFI_STATUS
EFIAPI
EfiLibUninstallDriverBindingComponentName2 (
IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding,
IN CONST EFI_COMPONENT_NAME_PROTOCOL *ComponentName, OPTIONAL
IN CONST EFI_COMPONENT_NAME2_PROTOCOL *ComponentName2 OPTIONAL
);


/**
Installs Driver Binding Protocol with optional Component Name, Component Name 2, Driver
Configuration, Driver Configuration 2, Driver Diagnostics, and Driver Diagnostics 2 Protocols.
Expand Down Expand Up @@ -1434,6 +1503,40 @@ EfiLibInstallAllDriverProtocols2 (
IN CONST EFI_DRIVER_DIAGNOSTICS2_PROTOCOL *DriverDiagnostics2 OPTIONAL
);


/**
Uninstalls Driver Binding Protocol with optional Component Name, Component Name 2, Driver
Configuration, Driver Configuration 2, Driver Diagnostics, and Driver Diagnostics 2 Protocols.
If DriverBinding is NULL, then ASSERT().
If the installation fails, then ASSERT().
@param DriverBinding A Driver Binding Protocol instance that this driver produced.
@param ComponentName A Component Name Protocol instance that this driver produced.
@param ComponentName2 A Component Name 2 Protocol instance that this driver produced.
@param DriverConfiguration A Driver Configuration Protocol instance that this driver produced.
@param DriverConfiguration2 A Driver Configuration Protocol 2 instance that this driver produced.
@param DriverDiagnostics A Driver Diagnostics Protocol instance that this driver produced.
@param DriverDiagnostics2 A Driver Diagnostics Protocol 2 instance that this driver produced.
@retval EFI_SUCCESS The protocol uninstallation successfully completed.
@retval Others Status from gBS->UninstallMultipleProtocolInterfaces().
**/
EFI_STATUS
EFIAPI
EfiLibUninstallAllDriverProtocols2 (
IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding,
IN CONST EFI_COMPONENT_NAME_PROTOCOL *ComponentName, OPTIONAL
IN CONST EFI_COMPONENT_NAME2_PROTOCOL *ComponentName2, OPTIONAL
IN CONST EFI_DRIVER_CONFIGURATION_PROTOCOL *DriverConfiguration, OPTIONAL
IN CONST EFI_DRIVER_CONFIGURATION2_PROTOCOL *DriverConfiguration2, OPTIONAL
IN CONST EFI_DRIVER_DIAGNOSTICS_PROTOCOL *DriverDiagnostics, OPTIONAL
IN CONST EFI_DRIVER_DIAGNOSTICS2_PROTOCOL *DriverDiagnostics2 OPTIONAL
);


/**
Appends a formatted Unicode string to a Null-terminated Unicode string
Expand Down
Loading

0 comments on commit 0290fca

Please sign in to comment.