/** @file\r
Library functions that abstract driver model protocols\r
- installation.\r
+ installation and uninstallation.\r
\r
+ Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\r
Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
This program and the accompanying materials are\r
licensed and made available under the terms and conditions of the BSD License\r
}\r
\r
\r
+\r
+/**\r
+ Uninstalls a Driver Binding Protocol instance.\r
+\r
+ If DriverBinding is NULL, then ASSERT().\r
+ If DriverBinding can not be uninstalled, then ASSERT().\r
+\r
+ @param DriverBinding A Driver Binding Protocol instance that this driver produced.\r
+\r
+ @retval EFI_SUCCESS The protocol uninstallation successfully completed.\r
+ @retval Others Status from gBS->UninstallMultipleProtocolInterfaces().\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+EfiLibUninstallDriverBinding (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+\r
+ ASSERT (DriverBinding != NULL);\r
+\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ NULL\r
+ );\r
+ //\r
+ // ASSERT if the call to UninstallMultipleProtocolInterfaces() failed\r
+ //\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
+ return Status;\r
+}\r
+\r
+\r
+\r
/**\r
Installs and completes the initialization of a Driver Binding Protocol instance and\r
optionally installs the Component Name, Driver Configuration and Driver Diagnostics Protocols.\r
\r
\r
\r
+/**\r
+ Uninstalls a Driver Binding Protocol instance and optionally uninstalls the\r
+ Component Name, Driver Configuration and Driver Diagnostics Protocols.\r
+\r
+ If DriverBinding is NULL, then ASSERT().\r
+ If the uninstallation fails, then ASSERT().\r
+\r
+ @param DriverBinding A Driver Binding Protocol instance that this driver produced.\r
+ @param ComponentName A Component Name Protocol instance that this driver produced.\r
+ @param DriverConfiguration A Driver Configuration Protocol instance that this driver produced.\r
+ @param DriverDiagnostics A Driver Diagnostics Protocol instance that this driver produced.\r
+\r
+ @retval EFI_SUCCESS The protocol uninstallation successfully completed.\r
+ @retval Others Status from gBS->UninstallMultipleProtocolInterfaces().\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+EfiLibUninstallAllDriverProtocols (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding,\r
+ IN CONST EFI_COMPONENT_NAME_PROTOCOL *ComponentName, OPTIONAL\r
+ IN CONST EFI_DRIVER_CONFIGURATION_PROTOCOL *DriverConfiguration, OPTIONAL\r
+ IN CONST EFI_DRIVER_DIAGNOSTICS_PROTOCOL *DriverDiagnostics OPTIONAL\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+\r
+ ASSERT (DriverBinding != NULL);\r
+\r
+ if (DriverDiagnostics == NULL || FeaturePcdGet(PcdDriverDiagnosticsDisable)) {\r
+ if (DriverConfiguration == NULL) {\r
+ if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ NULL\r
+ );\r
+ }\r
+ } else {\r
+ if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+ NULL\r
+ );\r
+ }\r
+ }\r
+ } else {\r
+ if (DriverConfiguration == NULL) {\r
+ if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+ NULL\r
+ );\r
+ }\r
+ } else {\r
+ if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+ &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+ &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+ NULL\r
+ );\r
+ }\r
+ }\r
+ }\r
+\r
+ //\r
+ // ASSERT if the call to UninstallMultipleProtocolInterfaces() failed\r
+ //\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
+ return Status;\r
+}\r
+\r
+\r
+\r
/**\r
Installs Driver Binding Protocol with optional Component Name and Component Name 2 Protocols.\r
\r
\r
\r
\r
+/**\r
+ Uninstalls Driver Binding Protocol with optional Component Name and Component Name 2 Protocols.\r
+\r
+ If DriverBinding is NULL, then ASSERT().\r
+ If the uninstallation fails, then ASSERT().\r
+\r
+ @param DriverBinding A Driver Binding Protocol instance that this driver produced.\r
+ @param ComponentName A Component Name Protocol instance that this driver produced.\r
+ @param ComponentName2 A Component Name 2 Protocol instance that this driver produced.\r
+\r
+ @retval EFI_SUCCESS The protocol installation successfully completed.\r
+ @retval Others Status from gBS->UninstallMultipleProtocolInterfaces().\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+EfiLibUninstallDriverBindingComponentName2 (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding,\r
+ IN CONST EFI_COMPONENT_NAME_PROTOCOL *ComponentName, OPTIONAL\r
+ IN CONST EFI_COMPONENT_NAME2_PROTOCOL *ComponentName2 OPTIONAL\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+\r
+ ASSERT (DriverBinding != NULL);\r
+\r
+ if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+ if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+ NULL\r
+ );\r
+ }\r
+ } else {\r
+ if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+ NULL\r
+ );\r
+ }\r
+ }\r
+\r
+ //\r
+ // ASSERT if the call to UninstallMultipleProtocolInterfaces() failed\r
+ //\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
+ return Status;\r
+}\r
+\r
+\r
+\r
/**\r
Installs Driver Binding Protocol with optional Component Name, Component Name 2, Driver\r
Configuration, Driver Configuration 2, Driver Diagnostics, and Driver Diagnostics 2 Protocols.\r
\r
return Status;\r
}\r
+\r
+\r
+\r
+/**\r
+ Uninstalls Driver Binding Protocol with optional Component Name, Component Name 2, Driver\r
+ Configuration, Driver Configuration 2, Driver Diagnostics, and Driver Diagnostics 2 Protocols.\r
+\r
+ If DriverBinding is NULL, then ASSERT().\r
+ If the installation fails, then ASSERT().\r
+\r
+\r
+ @param DriverBinding A Driver Binding Protocol instance that this driver produced.\r
+ @param ComponentName A Component Name Protocol instance that this driver produced.\r
+ @param ComponentName2 A Component Name 2 Protocol instance that this driver produced.\r
+ @param DriverConfiguration A Driver Configuration Protocol instance that this driver produced.\r
+ @param DriverConfiguration2 A Driver Configuration Protocol 2 instance that this driver produced.\r
+ @param DriverDiagnostics A Driver Diagnostics Protocol instance that this driver produced.\r
+ @param DriverDiagnostics2 A Driver Diagnostics Protocol 2 instance that this driver produced.\r
+\r
+ @retval EFI_SUCCESS The protocol uninstallation successfully completed.\r
+ @retval Others Status from gBS->UninstallMultipleProtocolInterfaces().\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+EfiLibUninstallAllDriverProtocols2 (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding,\r
+ IN CONST EFI_COMPONENT_NAME_PROTOCOL *ComponentName, OPTIONAL\r
+ IN CONST EFI_COMPONENT_NAME2_PROTOCOL *ComponentName2, OPTIONAL\r
+ IN CONST EFI_DRIVER_CONFIGURATION_PROTOCOL *DriverConfiguration, OPTIONAL\r
+ IN CONST EFI_DRIVER_CONFIGURATION2_PROTOCOL *DriverConfiguration2, OPTIONAL\r
+ IN CONST EFI_DRIVER_DIAGNOSTICS_PROTOCOL *DriverDiagnostics, OPTIONAL\r
+ IN CONST EFI_DRIVER_DIAGNOSTICS2_PROTOCOL *DriverDiagnostics2 OPTIONAL\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+\r
+ ASSERT (DriverBinding != NULL);\r
+\r
+ if (DriverConfiguration2 == NULL) {\r
+ if (DriverConfiguration == NULL) {\r
+ if (DriverDiagnostics == NULL || FeaturePcdGet(PcdDriverDiagnosticsDisable)) {\r
+ if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {\r
+ if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+ if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+ NULL\r
+ );\r
+ }\r
+ } else {\r
+ if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+ NULL\r
+ );\r
+ }\r
+ }\r
+ } else {\r
+ if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+ if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+ &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ }\r
+ } else {\r
+ if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+ &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ }\r
+ }\r
+ }\r
+ } else {\r
+ if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {\r
+ if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+ if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+ &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+ NULL\r
+ );\r
+ }\r
+ } else {\r
+ if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+ &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+ NULL\r
+ );\r
+ }\r
+ }\r
+ } else {\r
+ if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+ if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+ &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+ &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+ &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ }\r
+ } else {\r
+ if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+ &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+ &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+ &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ } else {\r
+ if (DriverDiagnostics == NULL || FeaturePcdGet(PcdDriverDiagnosticsDisable)) {\r
+ if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {\r
+ if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+ if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+ &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+ NULL\r
+ );\r
+ }\r
+ } else {\r
+ if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+ &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+ NULL\r
+ );\r
+ }\r
+ }\r
+ } else {\r
+ if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+ if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+ &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+ &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+ &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ }\r
+ } else {\r
+ if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+ &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+ &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+ &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ }\r
+ }\r
+ }\r
+ } else {\r
+ if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {\r
+ if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+ if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+ &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+ &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+ &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+ NULL\r
+ );\r
+ }\r
+ } else {\r
+ if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+ &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+ &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+ &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+ NULL\r
+ );\r
+ }\r
+ }\r
+ } else {\r
+ if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+ if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+ &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+ &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+ &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+ &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+ &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ }\r
+ } else {\r
+ if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+ &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+ &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+ &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+ &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+ &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ } else {\r
+ if (DriverConfiguration == NULL) {\r
+ if (DriverDiagnostics == NULL || FeaturePcdGet(PcdDriverDiagnosticsDisable)) {\r
+ if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {\r
+ if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+ if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+ &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+ NULL\r
+ );\r
+ }\r
+ } else {\r
+ if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+ &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+ NULL\r
+ );\r
+ }\r
+ }\r
+ } else {\r
+ if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+ if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+ &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+ &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+ &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ }\r
+ } else {\r
+ if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+ &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+ &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+ &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ }\r
+ }\r
+ }\r
+ } else {\r
+ if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {\r
+ if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+ if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+ &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+ &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+ &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+ NULL\r
+ );\r
+ }\r
+ } else {\r
+ if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+ &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+ &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+ &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+ NULL\r
+ );\r
+ }\r
+ }\r
+ } else {\r
+ if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+ if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+ &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+ &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+ &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+ &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+ &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ }\r
+ } else {\r
+ if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+ &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+ &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+ &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+ &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+ &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ } else {\r
+ if (DriverDiagnostics == NULL || FeaturePcdGet(PcdDriverDiagnosticsDisable)) {\r
+ if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {\r
+ if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+ if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+ &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+ &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+ &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+ NULL\r
+ );\r
+ }\r
+ } else {\r
+ if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+ &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+ &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+ &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+ NULL\r
+ );\r
+ }\r
+ }\r
+ } else {\r
+ if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+ if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+ &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+ &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+ &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+ &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+ &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ }\r
+ } else {\r
+ if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+ &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+ &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+ &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+ &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+ &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ }\r
+ }\r
+ }\r
+ } else {\r
+ if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {\r
+ if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+ if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+ &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+ &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+ &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+ &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+ &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+ NULL\r
+ );\r
+ }\r
+ } else {\r
+ if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+ &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+ &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+ &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+ &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+ &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+ NULL\r
+ );\r
+ }\r
+ }\r
+ } else {\r
+ if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+ if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+ &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+ &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+ &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+ &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+ &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+ &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+ &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ }\r
+ } else {\r
+ if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+ &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+ &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+ &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+ &gEfiComponentNameProtocolGuid, ComponentName,\r
+ &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+ &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+ &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+ &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+ &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ //\r
+ // ASSERT if the call to UninstallMultipleProtocolInterfaces() failed\r
+ //\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
+ return Status;\r
+}\r