+ return Status;\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,\r
+ DriverBinding,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentName2ProtocolGuid,\r
+ ComponentName2,\r
+ NULL\r
+ );\r
+ }\r
+ } else {\r
+ if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentNameProtocolGuid,\r
+ ComponentName,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentNameProtocolGuid,\r
+ ComponentName,\r
+ &gEfiComponentName2ProtocolGuid,\r
+ 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,\r
+ DriverBinding,\r
+ &gEfiDriverDiagnostics2ProtocolGuid,\r
+ DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentName2ProtocolGuid,\r
+ ComponentName2,\r
+ &gEfiDriverDiagnostics2ProtocolGuid,\r
+ DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ }\r
+ } else {\r
+ if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentNameProtocolGuid,\r
+ ComponentName,\r
+ &gEfiDriverDiagnostics2ProtocolGuid,\r
+ DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentNameProtocolGuid,\r
+ ComponentName,\r
+ &gEfiComponentName2ProtocolGuid,\r
+ ComponentName2,\r
+ &gEfiDriverDiagnostics2ProtocolGuid,\r
+ 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,\r
+ DriverBinding,\r
+ &gEfiDriverDiagnosticsProtocolGuid,\r
+ DriverDiagnostics,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentName2ProtocolGuid,\r
+ ComponentName2,\r
+ &gEfiDriverDiagnosticsProtocolGuid,\r
+ DriverDiagnostics,\r
+ NULL\r
+ );\r
+ }\r
+ } else {\r
+ if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentNameProtocolGuid,\r
+ ComponentName,\r
+ &gEfiDriverDiagnosticsProtocolGuid,\r
+ DriverDiagnostics,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentNameProtocolGuid,\r
+ ComponentName,\r
+ &gEfiComponentName2ProtocolGuid,\r
+ ComponentName2,\r
+ &gEfiDriverDiagnosticsProtocolGuid,\r
+ 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,\r
+ DriverBinding,\r
+ &gEfiDriverDiagnosticsProtocolGuid,\r
+ DriverDiagnostics,\r
+ &gEfiDriverDiagnostics2ProtocolGuid,\r
+ DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentName2ProtocolGuid,\r
+ ComponentName2,\r
+ &gEfiDriverDiagnosticsProtocolGuid,\r
+ DriverDiagnostics,\r
+ &gEfiDriverDiagnostics2ProtocolGuid,\r
+ DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ }\r
+ } else {\r
+ if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentNameProtocolGuid,\r
+ ComponentName,\r
+ &gEfiDriverDiagnosticsProtocolGuid,\r
+ DriverDiagnostics,\r
+ &gEfiDriverDiagnostics2ProtocolGuid,\r
+ DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentNameProtocolGuid,\r
+ ComponentName,\r
+ &gEfiComponentName2ProtocolGuid,\r
+ ComponentName2,\r
+ &gEfiDriverDiagnosticsProtocolGuid,\r
+ DriverDiagnostics,\r
+ &gEfiDriverDiagnostics2ProtocolGuid,\r
+ 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,\r
+ DriverBinding,\r
+ &gEfiDriverConfigurationProtocolGuid,\r
+ DriverConfiguration,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentName2ProtocolGuid,\r
+ ComponentName2,\r
+ &gEfiDriverConfigurationProtocolGuid,\r
+ DriverConfiguration,\r
+ NULL\r
+ );\r
+ }\r
+ } else {\r
+ if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentNameProtocolGuid,\r
+ ComponentName,\r
+ &gEfiDriverConfigurationProtocolGuid,\r
+ DriverConfiguration,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentNameProtocolGuid,\r
+ ComponentName,\r
+ &gEfiComponentName2ProtocolGuid,\r
+ ComponentName2,\r
+ &gEfiDriverConfigurationProtocolGuid,\r
+ 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,\r
+ DriverBinding,\r
+ &gEfiDriverConfigurationProtocolGuid,\r
+ DriverConfiguration,\r
+ &gEfiDriverDiagnostics2ProtocolGuid,\r
+ DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentName2ProtocolGuid,\r
+ ComponentName2,\r
+ &gEfiDriverConfigurationProtocolGuid,\r
+ DriverConfiguration,\r
+ &gEfiDriverDiagnostics2ProtocolGuid,\r
+ DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ }\r
+ } else {\r
+ if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentNameProtocolGuid,\r
+ ComponentName,\r
+ &gEfiDriverConfigurationProtocolGuid,\r
+ DriverConfiguration,\r
+ &gEfiDriverDiagnostics2ProtocolGuid,\r
+ DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentNameProtocolGuid,\r
+ ComponentName,\r
+ &gEfiComponentName2ProtocolGuid,\r
+ ComponentName2,\r
+ &gEfiDriverConfigurationProtocolGuid,\r
+ DriverConfiguration,\r
+ &gEfiDriverDiagnostics2ProtocolGuid,\r
+ 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,\r
+ DriverBinding,\r
+ &gEfiDriverConfigurationProtocolGuid,\r
+ DriverConfiguration,\r
+ &gEfiDriverDiagnosticsProtocolGuid,\r
+ DriverDiagnostics,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentName2ProtocolGuid,\r
+ ComponentName2,\r
+ &gEfiDriverConfigurationProtocolGuid,\r
+ DriverConfiguration,\r
+ &gEfiDriverDiagnosticsProtocolGuid,\r
+ DriverDiagnostics,\r
+ NULL\r
+ );\r
+ }\r
+ } else {\r
+ if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentNameProtocolGuid,\r
+ ComponentName,\r
+ &gEfiDriverConfigurationProtocolGuid,\r
+ DriverConfiguration,\r
+ &gEfiDriverDiagnosticsProtocolGuid,\r
+ DriverDiagnostics,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentNameProtocolGuid,\r
+ ComponentName,\r
+ &gEfiComponentName2ProtocolGuid,\r
+ ComponentName2,\r
+ &gEfiDriverConfigurationProtocolGuid,\r
+ DriverConfiguration,\r
+ &gEfiDriverDiagnosticsProtocolGuid,\r
+ 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,\r
+ DriverBinding,\r
+ &gEfiDriverConfigurationProtocolGuid,\r
+ DriverConfiguration,\r
+ &gEfiDriverDiagnosticsProtocolGuid,\r
+ DriverDiagnostics,\r
+ &gEfiDriverDiagnostics2ProtocolGuid,\r
+ DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentName2ProtocolGuid,\r
+ ComponentName2,\r
+ &gEfiDriverConfigurationProtocolGuid,\r
+ DriverConfiguration,\r
+ &gEfiDriverDiagnosticsProtocolGuid,\r
+ DriverDiagnostics,\r
+ &gEfiDriverDiagnostics2ProtocolGuid,\r
+ DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ }\r
+ } else {\r
+ if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentNameProtocolGuid,\r
+ ComponentName,\r
+ &gEfiDriverConfigurationProtocolGuid,\r
+ DriverConfiguration,\r
+ &gEfiDriverDiagnosticsProtocolGuid,\r
+ DriverDiagnostics,\r
+ &gEfiDriverDiagnostics2ProtocolGuid,\r
+ DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentNameProtocolGuid,\r
+ ComponentName,\r
+ &gEfiComponentName2ProtocolGuid,\r
+ ComponentName2,\r
+ &gEfiDriverConfigurationProtocolGuid,\r
+ DriverConfiguration,\r
+ &gEfiDriverDiagnosticsProtocolGuid,\r
+ DriverDiagnostics,\r
+ &gEfiDriverDiagnostics2ProtocolGuid,\r
+ 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,\r
+ DriverBinding,\r
+ &gEfiDriverConfiguration2ProtocolGuid,\r
+ DriverConfiguration2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentName2ProtocolGuid,\r
+ ComponentName2,\r
+ &gEfiDriverConfiguration2ProtocolGuid,\r
+ DriverConfiguration2,\r
+ NULL\r
+ );\r
+ }\r
+ } else {\r
+ if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentNameProtocolGuid,\r
+ ComponentName,\r
+ &gEfiDriverConfiguration2ProtocolGuid,\r
+ DriverConfiguration2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentNameProtocolGuid,\r
+ ComponentName,\r
+ &gEfiComponentName2ProtocolGuid,\r
+ ComponentName2,\r
+ &gEfiDriverConfiguration2ProtocolGuid,\r
+ 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,\r
+ DriverBinding,\r
+ &gEfiDriverDiagnostics2ProtocolGuid,\r
+ DriverDiagnostics2,\r
+ &gEfiDriverConfiguration2ProtocolGuid,\r
+ DriverConfiguration2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentName2ProtocolGuid,\r
+ ComponentName2,\r
+ &gEfiDriverConfiguration2ProtocolGuid,\r
+ DriverConfiguration2,\r
+ &gEfiDriverDiagnostics2ProtocolGuid,\r
+ DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ }\r
+ } else {\r
+ if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentNameProtocolGuid,\r
+ ComponentName,\r
+ &gEfiDriverConfiguration2ProtocolGuid,\r
+ DriverConfiguration2,\r
+ &gEfiDriverDiagnostics2ProtocolGuid,\r
+ DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentNameProtocolGuid,\r
+ ComponentName,\r
+ &gEfiComponentName2ProtocolGuid,\r
+ ComponentName2,\r
+ &gEfiDriverConfiguration2ProtocolGuid,\r
+ DriverConfiguration2,\r
+ &gEfiDriverDiagnostics2ProtocolGuid,\r
+ 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,\r
+ DriverBinding,\r
+ &gEfiDriverDiagnosticsProtocolGuid,\r
+ DriverDiagnostics,\r
+ &gEfiDriverConfiguration2ProtocolGuid,\r
+ DriverConfiguration2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentName2ProtocolGuid,\r
+ ComponentName2,\r
+ &gEfiDriverConfiguration2ProtocolGuid,\r
+ DriverConfiguration2,\r
+ &gEfiDriverDiagnosticsProtocolGuid,\r
+ DriverDiagnostics,\r
+ NULL\r
+ );\r
+ }\r
+ } else {\r
+ if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentNameProtocolGuid,\r
+ ComponentName,\r
+ &gEfiDriverDiagnosticsProtocolGuid,\r
+ DriverDiagnostics,\r
+ &gEfiDriverConfiguration2ProtocolGuid,\r
+ DriverConfiguration2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentNameProtocolGuid,\r
+ ComponentName,\r
+ &gEfiComponentName2ProtocolGuid,\r
+ ComponentName2,\r
+ &gEfiDriverConfiguration2ProtocolGuid,\r
+ DriverConfiguration2,\r
+ &gEfiDriverDiagnosticsProtocolGuid,\r
+ 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,\r
+ DriverBinding,\r
+ &gEfiDriverConfiguration2ProtocolGuid,\r
+ DriverConfiguration2,\r
+ &gEfiDriverDiagnosticsProtocolGuid,\r
+ DriverDiagnostics,\r
+ &gEfiDriverDiagnostics2ProtocolGuid,\r
+ DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentName2ProtocolGuid,\r
+ ComponentName2,\r
+ &gEfiDriverConfiguration2ProtocolGuid,\r
+ DriverConfiguration2,\r
+ &gEfiDriverDiagnosticsProtocolGuid,\r
+ DriverDiagnostics,\r
+ &gEfiDriverDiagnostics2ProtocolGuid,\r
+ DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ }\r
+ } else {\r
+ if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentNameProtocolGuid,\r
+ ComponentName,\r
+ &gEfiDriverConfiguration2ProtocolGuid,\r
+ DriverConfiguration2,\r
+ &gEfiDriverDiagnosticsProtocolGuid,\r
+ DriverDiagnostics,\r
+ &gEfiDriverDiagnostics2ProtocolGuid,\r
+ DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentNameProtocolGuid,\r
+ ComponentName,\r
+ &gEfiComponentName2ProtocolGuid,\r
+ ComponentName2,\r
+ &gEfiDriverConfiguration2ProtocolGuid,\r
+ DriverConfiguration2,\r
+ &gEfiDriverDiagnosticsProtocolGuid,\r
+ DriverDiagnostics,\r
+ &gEfiDriverDiagnostics2ProtocolGuid,\r
+ 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,\r
+ DriverBinding,\r
+ &gEfiDriverConfigurationProtocolGuid,\r
+ DriverConfiguration,\r
+ &gEfiDriverConfiguration2ProtocolGuid,\r
+ DriverConfiguration2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentName2ProtocolGuid,\r
+ ComponentName2,\r
+ &gEfiDriverConfigurationProtocolGuid,\r
+ DriverConfiguration,\r
+ &gEfiDriverConfiguration2ProtocolGuid,\r
+ DriverConfiguration2,\r
+ NULL\r
+ );\r
+ }\r
+ } else {\r
+ if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentNameProtocolGuid,\r
+ ComponentName,\r
+ &gEfiDriverConfigurationProtocolGuid,\r
+ DriverConfiguration,\r
+ &gEfiDriverConfiguration2ProtocolGuid,\r
+ DriverConfiguration2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentNameProtocolGuid,\r
+ ComponentName,\r
+ &gEfiComponentName2ProtocolGuid,\r
+ ComponentName2,\r
+ &gEfiDriverConfigurationProtocolGuid,\r
+ DriverConfiguration,\r
+ &gEfiDriverConfiguration2ProtocolGuid,\r
+ 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,\r
+ DriverBinding,\r
+ &gEfiDriverConfigurationProtocolGuid,\r
+ DriverConfiguration,\r
+ &gEfiDriverConfiguration2ProtocolGuid,\r
+ DriverConfiguration2,\r
+ &gEfiDriverDiagnostics2ProtocolGuid,\r
+ DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentName2ProtocolGuid,\r
+ ComponentName2,\r
+ &gEfiDriverConfigurationProtocolGuid,\r
+ DriverConfiguration,\r
+ &gEfiDriverConfiguration2ProtocolGuid,\r
+ DriverConfiguration2,\r
+ &gEfiDriverDiagnostics2ProtocolGuid,\r
+ DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ }\r
+ } else {\r
+ if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentNameProtocolGuid,\r
+ ComponentName,\r
+ &gEfiDriverConfigurationProtocolGuid,\r
+ DriverConfiguration,\r
+ &gEfiDriverConfiguration2ProtocolGuid,\r
+ DriverConfiguration2,\r
+ &gEfiDriverDiagnostics2ProtocolGuid,\r
+ DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentNameProtocolGuid,\r
+ ComponentName,\r
+ &gEfiComponentName2ProtocolGuid,\r
+ ComponentName2,\r
+ &gEfiDriverConfigurationProtocolGuid,\r
+ DriverConfiguration,\r
+ &gEfiDriverConfiguration2ProtocolGuid,\r
+ DriverConfiguration2,\r
+ &gEfiDriverDiagnostics2ProtocolGuid,\r
+ 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,\r
+ DriverBinding,\r
+ &gEfiDriverConfigurationProtocolGuid,\r
+ DriverConfiguration,\r
+ &gEfiDriverConfiguration2ProtocolGuid,\r
+ DriverConfiguration2,\r
+ &gEfiDriverDiagnosticsProtocolGuid,\r
+ DriverDiagnostics,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentName2ProtocolGuid,\r
+ ComponentName2,\r
+ &gEfiDriverConfigurationProtocolGuid,\r
+ DriverConfiguration,\r
+ &gEfiDriverConfiguration2ProtocolGuid,\r
+ DriverConfiguration2,\r
+ &gEfiDriverDiagnosticsProtocolGuid,\r
+ DriverDiagnostics,\r
+ NULL\r
+ );\r
+ }\r
+ } else {\r
+ if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentNameProtocolGuid,\r
+ ComponentName,\r
+ &gEfiDriverConfigurationProtocolGuid,\r
+ DriverConfiguration,\r
+ &gEfiDriverConfiguration2ProtocolGuid,\r
+ DriverConfiguration2,\r
+ &gEfiDriverDiagnosticsProtocolGuid,\r
+ DriverDiagnostics,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentNameProtocolGuid,\r
+ ComponentName,\r
+ &gEfiComponentName2ProtocolGuid,\r
+ ComponentName2,\r
+ &gEfiDriverConfigurationProtocolGuid,\r
+ DriverConfiguration,\r
+ &gEfiDriverConfiguration2ProtocolGuid,\r
+ DriverConfiguration2,\r
+ &gEfiDriverDiagnosticsProtocolGuid,\r
+ 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,\r
+ DriverBinding,\r
+ &gEfiDriverConfigurationProtocolGuid,\r
+ DriverConfiguration,\r
+ &gEfiDriverConfiguration2ProtocolGuid,\r
+ DriverConfiguration2,\r
+ &gEfiDriverDiagnosticsProtocolGuid,\r
+ DriverDiagnostics,\r
+ &gEfiDriverDiagnostics2ProtocolGuid,\r
+ DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentName2ProtocolGuid,\r
+ ComponentName2,\r
+ &gEfiDriverConfigurationProtocolGuid,\r
+ DriverConfiguration,\r
+ &gEfiDriverConfiguration2ProtocolGuid,\r
+ DriverConfiguration2,\r
+ &gEfiDriverDiagnosticsProtocolGuid,\r
+ DriverDiagnostics,\r
+ &gEfiDriverDiagnostics2ProtocolGuid,\r
+ DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ }\r
+ } else {\r
+ if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentNameProtocolGuid,\r
+ ComponentName,\r
+ &gEfiDriverConfigurationProtocolGuid,\r
+ DriverConfiguration,\r
+ &gEfiDriverConfiguration2ProtocolGuid,\r
+ DriverConfiguration2,\r
+ &gEfiDriverDiagnosticsProtocolGuid,\r
+ DriverDiagnostics,\r
+ &gEfiDriverDiagnostics2ProtocolGuid,\r
+ DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ } else {\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverBinding->DriverBindingHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ DriverBinding,\r
+ &gEfiComponentNameProtocolGuid,\r
+ ComponentName,\r
+ &gEfiComponentName2ProtocolGuid,\r
+ ComponentName2,\r
+ &gEfiDriverConfigurationProtocolGuid,\r
+ DriverConfiguration,\r
+ &gEfiDriverConfiguration2ProtocolGuid,\r
+ DriverConfiguration2,\r
+ &gEfiDriverDiagnosticsProtocolGuid,\r
+ DriverDiagnostics,\r
+ &gEfiDriverDiagnostics2ProtocolGuid,\r
+ DriverDiagnostics2,\r
+ NULL\r
+ );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r