mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-11-27 12:15:19 +01:00
7c0aa811ec
Signed-off-by: Sergey Isakov <isakov-sl@bk.ru>
2021 lines
108 KiB
C
2021 lines
108 KiB
C
/** @file
|
|
Library functions that abstract driver model protocols
|
|
installation and uninstallation.
|
|
|
|
Copyright (c) 2019, NVIDIA Corporation. All rights reserved.
|
|
Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
|
|
**/
|
|
|
|
|
|
#include "UefiLibInternal.h"
|
|
|
|
/**
|
|
Installs and completes the initialization of a Driver Binding Protocol instance.
|
|
|
|
Installs the Driver Binding Protocol specified by DriverBinding onto the handle
|
|
specified by DriverBindingHandle. If DriverBindingHandle is NULL, then DriverBinding
|
|
is installed onto a newly created handle. DriverBindingHandle is typically the same
|
|
as the driver's ImageHandle, but it can be different if the driver produces multiple
|
|
Driver Binding Protocols.
|
|
If DriverBinding is NULL, then ASSERT().
|
|
If DriverBinding can not be installed onto a handle, then ASSERT().
|
|
|
|
@param ImageHandle The image handle of the driver.
|
|
@param SystemTable The EFI System Table that was passed to the driver's entry point.
|
|
@param DriverBinding A Driver Binding Protocol instance that this driver is producing.
|
|
@param DriverBindingHandle The handle that DriverBinding is to be installed onto. If this
|
|
parameter is NULL, then a new handle is created.
|
|
|
|
@retval EFI_SUCCESS The protocol installation successfully completed.
|
|
@retval EFI_OUT_OF_RESOURCES There was not enough system resources to install the protocol.
|
|
@retval Others Status from gBS->InstallMultipleProtocolInterfaces().
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
EfiLibInstallDriverBinding (
|
|
IN CONST EFI_HANDLE ImageHandle,
|
|
IN CONST EFI_SYSTEM_TABLE *SystemTable,
|
|
IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding,
|
|
IN EFI_HANDLE DriverBindingHandle
|
|
)
|
|
{
|
|
EFI_STATUS Status;
|
|
|
|
ASSERT (DriverBinding != NULL);
|
|
|
|
//
|
|
// Update the ImageHandle and DriverBindingHandle fields of the Driver Binding Protocol
|
|
//
|
|
DriverBinding->ImageHandle = ImageHandle;
|
|
DriverBinding->DriverBindingHandle = DriverBindingHandle;
|
|
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
NULL
|
|
);
|
|
//
|
|
// ASSERT if the call to InstallMultipleProtocolInterfaces() failed
|
|
//
|
|
ASSERT_EFI_ERROR (Status);
|
|
|
|
return Status;
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
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
|
|
optionally installs the Component Name, Driver Configuration and Driver Diagnostics Protocols.
|
|
|
|
Initializes a driver by installing the Driver Binding Protocol together with the
|
|
optional Component Name, optional Driver Configure and optional Driver Diagnostic
|
|
Protocols onto the driver's DriverBindingHandle. If DriverBindingHandle is NULL,
|
|
then the protocols are installed onto a newly created handle. DriverBindingHandle
|
|
is typically the same as the driver's ImageHandle, but it can be different if the
|
|
driver produces multiple Driver Binding Protocols.
|
|
If DriverBinding is NULL, then ASSERT().
|
|
If the installation fails, then ASSERT().
|
|
|
|
@param ImageHandle The image handle of the driver.
|
|
@param SystemTable The EFI System Table that was passed to the driver's entry point.
|
|
@param DriverBinding A Driver Binding Protocol instance that this driver is producing.
|
|
@param DriverBindingHandle The handle that DriverBinding is to be installed onto. If this
|
|
parameter is NULL, then a new handle is created.
|
|
@param ComponentName A Component Name Protocol instance that this driver is producing.
|
|
@param DriverConfiguration A Driver Configuration Protocol instance that this driver is producing.
|
|
@param DriverDiagnostics A Driver Diagnostics Protocol instance that this driver is producing.
|
|
|
|
@retval EFI_SUCCESS The protocol installation successfully completed.
|
|
@retval EFI_OUT_OF_RESOURCES There was not enough memory in pool to install all the protocols.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
EfiLibInstallAllDriverProtocols (
|
|
IN CONST EFI_HANDLE ImageHandle,
|
|
IN CONST EFI_SYSTEM_TABLE *SystemTable,
|
|
IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding,
|
|
IN EFI_HANDLE DriverBindingHandle,
|
|
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);
|
|
|
|
//
|
|
// Update the ImageHandle and DriverBindingHandle fields of the Driver Binding Protocol
|
|
//
|
|
DriverBinding->ImageHandle = ImageHandle;
|
|
DriverBinding->DriverBindingHandle = DriverBindingHandle;
|
|
|
|
if (DriverDiagnostics == NULL || FeaturePcdGet(PcdDriverDiagnosticsDisable)) {
|
|
if (DriverConfiguration == NULL) {
|
|
if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentNameProtocolGuid, ComponentName,
|
|
NULL
|
|
);
|
|
}
|
|
} else {
|
|
if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentNameProtocolGuid, ComponentName,
|
|
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
|
|
NULL
|
|
);
|
|
}
|
|
}
|
|
} else {
|
|
if (DriverConfiguration == NULL) {
|
|
if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentNameProtocolGuid, ComponentName,
|
|
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
|
|
NULL
|
|
);
|
|
}
|
|
} else {
|
|
if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
|
|
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentNameProtocolGuid, ComponentName,
|
|
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
|
|
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
|
|
NULL
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
//
|
|
// ASSERT if the call to InstallMultipleProtocolInterfaces() failed
|
|
//
|
|
ASSERT_EFI_ERROR (Status);
|
|
|
|
return Status;
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
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.
|
|
|
|
Initializes a driver by installing the Driver Binding Protocol together with the
|
|
optional Component Name and optional Component Name 2 protocols onto the driver's
|
|
DriverBindingHandle. If DriverBindingHandle is NULL, then the protocols are installed
|
|
onto a newly created handle. DriverBindingHandle is typically the same as the driver's
|
|
ImageHandle, but it can be different if the driver produces multiple Driver Binding Protocols.
|
|
If DriverBinding is NULL, then ASSERT().
|
|
If the installation fails, then ASSERT().
|
|
|
|
@param ImageHandle The image handle of the driver.
|
|
@param SystemTable The EFI System Table that was passed to the driver's entry point.
|
|
@param DriverBinding A Driver Binding Protocol instance that this driver is producing.
|
|
@param DriverBindingHandle The handle that DriverBinding is to be installed onto. If this
|
|
parameter is NULL, then a new handle is created.
|
|
@param ComponentName A Component Name Protocol instance that this driver is producing.
|
|
@param ComponentName2 A Component Name 2 Protocol instance that this driver is producing.
|
|
|
|
@retval EFI_SUCCESS The protocol installation successfully completed.
|
|
@retval EFI_OUT_OF_RESOURCES There was not enough memory in pool to install all the protocols.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
EfiLibInstallDriverBindingComponentName2 (
|
|
IN CONST EFI_HANDLE ImageHandle,
|
|
IN CONST EFI_SYSTEM_TABLE *SystemTable,
|
|
IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding,
|
|
IN EFI_HANDLE DriverBindingHandle,
|
|
IN CONST EFI_COMPONENT_NAME_PROTOCOL *ComponentName, OPTIONAL
|
|
IN CONST EFI_COMPONENT_NAME2_PROTOCOL *ComponentName2 OPTIONAL
|
|
)
|
|
{
|
|
EFI_STATUS Status;
|
|
|
|
ASSERT (DriverBinding != NULL);
|
|
|
|
//
|
|
// Update the ImageHandle and DriverBindingHandle fields of the Driver Binding Protocol
|
|
//
|
|
DriverBinding->ImageHandle = ImageHandle;
|
|
DriverBinding->DriverBindingHandle = DriverBindingHandle;
|
|
|
|
if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
|
|
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentName2ProtocolGuid, ComponentName2,
|
|
NULL
|
|
);
|
|
}
|
|
} else {
|
|
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentNameProtocolGuid, ComponentName,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentNameProtocolGuid, ComponentName,
|
|
&gEfiComponentName2ProtocolGuid, ComponentName2,
|
|
NULL
|
|
);
|
|
}
|
|
}
|
|
|
|
//
|
|
// ASSERT if the call to InstallMultipleProtocolInterfaces() failed
|
|
//
|
|
ASSERT_EFI_ERROR (Status);
|
|
|
|
return Status;
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
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
|
|
Configuration, Driver Configuration 2, Driver Diagnostics, and Driver Diagnostics 2 Protocols.
|
|
|
|
Initializes a driver by installing the Driver Binding Protocol together with the optional
|
|
Component Name, optional Component Name 2, optional Driver Configuration, optional Driver Configuration 2,
|
|
optional Driver Diagnostic, and optional Driver Diagnostic 2 Protocols onto the driver's DriverBindingHandle.
|
|
DriverBindingHandle is typically the same as the driver's ImageHandle, but it can be different if the driver
|
|
produces multiple Driver Binding Protocols.
|
|
If DriverBinding is NULL, then ASSERT().
|
|
If the installation fails, then ASSERT().
|
|
|
|
|
|
@param ImageHandle The image handle of the driver.
|
|
@param SystemTable The EFI System Table that was passed to the driver's entry point.
|
|
@param DriverBinding A Driver Binding Protocol instance that this driver is producing.
|
|
@param DriverBindingHandle The handle that DriverBinding is to be installed onto. If this
|
|
parameter is NULL, then a new handle is created.
|
|
@param ComponentName A Component Name Protocol instance that this driver is producing.
|
|
@param ComponentName2 A Component Name 2 Protocol instance that this driver is producing.
|
|
@param DriverConfiguration A Driver Configuration Protocol instance that this driver is producing.
|
|
@param DriverConfiguration2 A Driver Configuration Protocol 2 instance that this driver is producing.
|
|
@param DriverDiagnostics A Driver Diagnostics Protocol instance that this driver is producing.
|
|
@param DriverDiagnostics2 A Driver Diagnostics Protocol 2 instance that this driver is producing.
|
|
|
|
@retval EFI_SUCCESS The protocol installation successfully completed.
|
|
@retval EFI_OUT_OF_RESOURCES There was not enough memory in pool to install all the protocols.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
EfiLibInstallAllDriverProtocols2 (
|
|
IN CONST EFI_HANDLE ImageHandle,
|
|
IN CONST EFI_SYSTEM_TABLE *SystemTable,
|
|
IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding,
|
|
IN EFI_HANDLE DriverBindingHandle,
|
|
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);
|
|
|
|
//
|
|
// Update the ImageHandle and DriverBindingHandle fields of the Driver Binding Protocol
|
|
//
|
|
DriverBinding->ImageHandle = ImageHandle;
|
|
DriverBinding->DriverBindingHandle = DriverBindingHandle;
|
|
|
|
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->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentName2ProtocolGuid, ComponentName2,
|
|
NULL
|
|
);
|
|
}
|
|
} else {
|
|
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentNameProtocolGuid, ComponentName,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentNameProtocolGuid, ComponentName,
|
|
&gEfiComponentName2ProtocolGuid, ComponentName2,
|
|
NULL
|
|
);
|
|
}
|
|
}
|
|
} else {
|
|
if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
|
|
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentName2ProtocolGuid, ComponentName2,
|
|
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
|
|
NULL
|
|
);
|
|
}
|
|
} else {
|
|
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentNameProtocolGuid, ComponentName,
|
|
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&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->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentName2ProtocolGuid, ComponentName2,
|
|
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
|
|
NULL
|
|
);
|
|
}
|
|
} else {
|
|
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentNameProtocolGuid, ComponentName,
|
|
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentNameProtocolGuid, ComponentName,
|
|
&gEfiComponentName2ProtocolGuid, ComponentName2,
|
|
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
|
|
NULL
|
|
);
|
|
}
|
|
}
|
|
} else {
|
|
if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
|
|
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
|
|
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentName2ProtocolGuid, ComponentName2,
|
|
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
|
|
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
|
|
NULL
|
|
);
|
|
}
|
|
} else {
|
|
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentNameProtocolGuid, ComponentName,
|
|
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
|
|
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&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->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentName2ProtocolGuid, ComponentName2,
|
|
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
|
|
NULL
|
|
);
|
|
}
|
|
} else {
|
|
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentNameProtocolGuid, ComponentName,
|
|
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentNameProtocolGuid, ComponentName,
|
|
&gEfiComponentName2ProtocolGuid, ComponentName2,
|
|
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
|
|
NULL
|
|
);
|
|
}
|
|
}
|
|
} else {
|
|
if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
|
|
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
|
|
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentName2ProtocolGuid, ComponentName2,
|
|
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
|
|
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
|
|
NULL
|
|
);
|
|
}
|
|
} else {
|
|
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentNameProtocolGuid, ComponentName,
|
|
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
|
|
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&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->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
|
|
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentName2ProtocolGuid, ComponentName2,
|
|
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
|
|
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
|
|
NULL
|
|
);
|
|
}
|
|
} else {
|
|
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentNameProtocolGuid, ComponentName,
|
|
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
|
|
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&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->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
|
|
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
|
|
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentName2ProtocolGuid, ComponentName2,
|
|
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
|
|
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
|
|
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
|
|
NULL
|
|
);
|
|
}
|
|
} else {
|
|
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentNameProtocolGuid, ComponentName,
|
|
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
|
|
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
|
|
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&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->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentName2ProtocolGuid, ComponentName2,
|
|
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
|
|
NULL
|
|
);
|
|
}
|
|
} else {
|
|
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentNameProtocolGuid, ComponentName,
|
|
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentNameProtocolGuid, ComponentName,
|
|
&gEfiComponentName2ProtocolGuid, ComponentName2,
|
|
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
|
|
NULL
|
|
);
|
|
}
|
|
}
|
|
} else {
|
|
if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
|
|
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
|
|
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentName2ProtocolGuid, ComponentName2,
|
|
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
|
|
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
|
|
NULL
|
|
);
|
|
}
|
|
} else {
|
|
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentNameProtocolGuid, ComponentName,
|
|
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
|
|
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&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->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
|
|
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentName2ProtocolGuid, ComponentName2,
|
|
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
|
|
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
|
|
NULL
|
|
);
|
|
}
|
|
} else {
|
|
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentNameProtocolGuid, ComponentName,
|
|
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
|
|
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&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->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
|
|
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
|
|
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentName2ProtocolGuid, ComponentName2,
|
|
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
|
|
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
|
|
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
|
|
NULL
|
|
);
|
|
}
|
|
} else {
|
|
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentNameProtocolGuid, ComponentName,
|
|
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
|
|
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
|
|
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&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->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
|
|
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentName2ProtocolGuid, ComponentName2,
|
|
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
|
|
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
|
|
NULL
|
|
);
|
|
}
|
|
} else {
|
|
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentNameProtocolGuid, ComponentName,
|
|
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
|
|
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&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->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
|
|
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
|
|
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentName2ProtocolGuid, ComponentName2,
|
|
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
|
|
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
|
|
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
|
|
NULL
|
|
);
|
|
}
|
|
} else {
|
|
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentNameProtocolGuid, ComponentName,
|
|
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
|
|
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
|
|
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&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->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
|
|
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
|
|
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentName2ProtocolGuid, ComponentName2,
|
|
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
|
|
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
|
|
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
|
|
NULL
|
|
);
|
|
}
|
|
} else {
|
|
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentNameProtocolGuid, ComponentName,
|
|
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
|
|
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
|
|
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&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->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
|
|
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
|
|
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
|
|
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentName2ProtocolGuid, ComponentName2,
|
|
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
|
|
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
|
|
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
|
|
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
|
|
NULL
|
|
);
|
|
}
|
|
} else {
|
|
if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentNameProtocolGuid, ComponentName,
|
|
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
|
|
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
|
|
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
|
|
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
|
|
NULL
|
|
);
|
|
} else {
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&DriverBinding->DriverBindingHandle,
|
|
&gEfiDriverBindingProtocolGuid, DriverBinding,
|
|
&gEfiComponentNameProtocolGuid, ComponentName,
|
|
&gEfiComponentName2ProtocolGuid, ComponentName2,
|
|
&gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
|
|
&gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,
|
|
&gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
|
|
&gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
|
|
NULL
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//
|
|
// ASSERT if the call to InstallMultipleProtocolInterfaces() failed
|
|
//
|
|
ASSERT_EFI_ERROR (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;
|
|
}
|