/** @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.
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; }