MdePkg/UefiLib: Abstract driver model protocol uninstallation

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 <ashishsingha@nvidia.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
Ashish Singhal 2019-01-10 04:58:34 +08:00 committed by Liming Gao
parent 938cf4c33a
commit 0290fca20f
2 changed files with 1074 additions and 1 deletions

View File

@ -12,6 +12,7 @@
of size reduction when compiler optimization is disabled. If MDEPKG_NDEBUG is 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. 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> Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials are licensed and made available under This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution. the terms and conditions of the BSD License that accompanies this distribution.
@ -1283,6 +1284,7 @@ AsciiPrintXY (
... ...
); );
/** /**
Installs and completes the initialization of a Driver Binding Protocol instance. Installs and completes the initialization of a Driver Binding Protocol instance.
@ -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 Installs and completes the initialization of a Driver Binding Protocol instance and
optionally installs the Component Name, Driver Configuration and Driver Diagnostics Protocols. optionally installs the Component Name, Driver Configuration and Driver Diagnostics Protocols.
@ -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. Installs Driver Binding Protocol with optional Component Name and Component Name 2 Protocols.
@ -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 Installs Driver Binding Protocol with optional Component Name, Component Name 2, Driver
Configuration, Driver Configuration 2, Driver Diagnostics, and Driver Diagnostics 2 Protocols. Configuration, Driver Configuration 2, Driver Diagnostics, and Driver Diagnostics 2 Protocols.
@ -1434,6 +1503,40 @@ EfiLibInstallAllDriverProtocols2 (
IN CONST EFI_DRIVER_DIAGNOSTICS2_PROTOCOL *DriverDiagnostics2 OPTIONAL 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 Appends a formatted Unicode string to a Null-terminated Unicode string

View File

@ -1,7 +1,8 @@
/** @file /** @file
Library functions that abstract driver model protocols Library functions that abstract driver model protocols
installation. installation and uninstallation.
Copyright (c) 2019, NVIDIA Corporation. All rights reserved.
Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR> Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials are This program and the accompanying materials are
licensed and made available under the terms and conditions of the BSD License licensed and made available under the terms and conditions of the BSD License
@ -71,6 +72,44 @@ 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
)
{
EFI_STATUS Status;
ASSERT (DriverBinding != NULL);
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
NULL
);
//
// ASSERT if the call to UninstallMultipleProtocolInterfaces() failed
//
ASSERT_EFI_ERROR (Status);
return Status;
}
/** /**
Installs and completes the initialization of a Driver Binding Protocol instance and Installs and completes the initialization of a Driver Binding Protocol instance and
optionally installs the Component Name, Driver Configuration and Driver Diagnostics Protocols. optionally installs the Component Name, Driver Configuration and Driver Diagnostics Protocols.
@ -203,6 +242,119 @@ 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
)
{
EFI_STATUS Status;
ASSERT (DriverBinding != NULL);
if (DriverDiagnostics == NULL || FeaturePcdGet(PcdDriverDiagnosticsDisable)) {
if (DriverConfiguration == NULL) {
if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
NULL
);
}
} else {
if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
NULL
);
}
}
} else {
if (DriverConfiguration == NULL) {
if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
NULL
);
}
} else {
if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
NULL
);
}
}
}
//
// ASSERT if the call to UninstallMultipleProtocolInterfaces() failed
//
ASSERT_EFI_ERROR (Status);
return Status;
}
/** /**
Installs Driver Binding Protocol with optional Component Name and Component Name 2 Protocols. Installs Driver Binding Protocol with optional Component Name and Component Name 2 Protocols.
@ -291,6 +443,76 @@ 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
)
{
EFI_STATUS Status;
ASSERT (DriverBinding != NULL);
if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentName2ProtocolGuid, ComponentName2,
NULL
);
}
} else {
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
&gEfiComponentName2ProtocolGuid, ComponentName2,
NULL
);
}
}
//
// ASSERT if the call to UninstallMultipleProtocolInterfaces() failed
//
ASSERT_EFI_ERROR (Status);
return Status;
}
/** /**
Installs Driver Binding Protocol with optional Component Name, Component Name 2, Driver Installs Driver Binding Protocol with optional Component Name, Component Name 2, Driver
Configuration, Driver Configuration 2, Driver Diagnostics, and Driver Diagnostics 2 Protocols. Configuration, Driver Configuration 2, Driver Diagnostics, and Driver Diagnostics 2 Protocols.
@ -1054,3 +1276,751 @@ EfiLibInstallAllDriverProtocols2 (
return Status; return Status;
} }
/**
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
)
{
EFI_STATUS Status;
ASSERT (DriverBinding != NULL);
if (DriverConfiguration2 == NULL) {
if (DriverConfiguration == NULL) {
if (DriverDiagnostics == NULL || FeaturePcdGet(PcdDriverDiagnosticsDisable)) {
if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {
if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentName2ProtocolGuid, ComponentName2,
NULL
);
}
} else {
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
&gEfiComponentName2ProtocolGuid, ComponentName2,
NULL
);
}
}
} else {
if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentName2ProtocolGuid, ComponentName2,
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
NULL
);
}
} else {
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
&gEfiComponentName2ProtocolGuid, ComponentName2,
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
NULL
);
}
}
}
} else {
if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {
if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentName2ProtocolGuid, ComponentName2,
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
NULL
);
}
} else {
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
&gEfiComponentName2ProtocolGuid, ComponentName2,
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
NULL
);
}
}
} else {
if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentName2ProtocolGuid, ComponentName2,
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
NULL
);
}
} else {
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
&gEfiComponentName2ProtocolGuid, ComponentName2,
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
NULL
);
}
}
}
}
} else {
if (DriverDiagnostics == NULL || FeaturePcdGet(PcdDriverDiagnosticsDisable)) {
if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {
if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentName2ProtocolGuid, ComponentName2,
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
NULL
);
}
} else {
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
&gEfiComponentName2ProtocolGuid, ComponentName2,
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
NULL
);
}
}
} else {
if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentName2ProtocolGuid, ComponentName2,
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
NULL
);
}
} else {
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
&gEfiComponentName2ProtocolGuid, ComponentName2,
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
NULL
);
}
}
}
} else {
if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {
if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentName2ProtocolGuid, ComponentName2,
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
NULL
);
}
} else {
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
&gEfiComponentName2ProtocolGuid, ComponentName2,
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
NULL
);
}
}
} else {
if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentName2ProtocolGuid, ComponentName2,
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
NULL
);
}
} else {
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
&gEfiComponentName2ProtocolGuid, ComponentName2,
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
NULL
);
}
}
}
}
}
} else {
if (DriverConfiguration == NULL) {
if (DriverDiagnostics == NULL || FeaturePcdGet(PcdDriverDiagnosticsDisable)) {
if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {
if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentName2ProtocolGuid, ComponentName2,
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
NULL
);
}
} else {
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
&gEfiComponentName2ProtocolGuid, ComponentName2,
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
NULL
);
}
}
} else {
if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentName2ProtocolGuid, ComponentName2,
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
NULL
);
}
} else {
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
&gEfiComponentName2ProtocolGuid, ComponentName2,
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
NULL
);
}
}
}
} else {
if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {
if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentName2ProtocolGuid, ComponentName2,
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
NULL
);
}
} else {
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
&gEfiComponentName2ProtocolGuid, ComponentName2,
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
NULL
);
}
}
} else {
if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentName2ProtocolGuid, ComponentName2,
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
NULL
);
}
} else {
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
&gEfiComponentName2ProtocolGuid, ComponentName2,
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
NULL
);
}
}
}
}
} else {
if (DriverDiagnostics == NULL || FeaturePcdGet(PcdDriverDiagnosticsDisable)) {
if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {
if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentName2ProtocolGuid, ComponentName2,
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
NULL
);
}
} else {
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
&gEfiComponentName2ProtocolGuid, ComponentName2,
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
NULL
);
}
}
} else {
if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentName2ProtocolGuid, ComponentName2,
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
NULL
);
}
} else {
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
&gEfiComponentName2ProtocolGuid, ComponentName2,
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
NULL
);
}
}
}
} else {
if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {
if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentName2ProtocolGuid, ComponentName2,
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
NULL
);
}
} else {
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
&gEfiComponentName2ProtocolGuid, ComponentName2,
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
NULL
);
}
}
} else {
if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentName2ProtocolGuid, ComponentName2,
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
NULL
);
}
} else {
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
NULL
);
} else {
Status = gBS->UninstallMultipleProtocolInterfaces (
DriverBinding->DriverBindingHandle,
&gEfiDriverBindingProtocolGuid, DriverBinding,
&gEfiComponentNameProtocolGuid, ComponentName,
&gEfiComponentName2ProtocolGuid, ComponentName2,
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
NULL
);
}
}
}
}
}
}
//
// ASSERT if the call to UninstallMultipleProtocolInterfaces() failed
//
ASSERT_EFI_ERROR (Status);
return Status;
}