public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [PATCH] MdePkg/UefiLib: Simplify protocol un/installation abstraction
@ 2019-02-04 20:16 Ashish Singhal
  2019-02-19 16:19 ` Ashish Singhal
  0 siblings, 1 reply; 4+ messages in thread
From: Ashish Singhal @ 2019-02-04 20:16 UTC (permalink / raw)
  To: edk2-devel; +Cc: michael.d.kinney, liming.gao, Ashish Singhal

Add helper functions to operate upon protocol installation and
uninstallation instead of every function doing it by itself.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ashish Singhal <ashishsingha@nvidia.com>
---
 MdePkg/Library/UefiLib/UefiDriverModel.c | 2040 +++++-------------------------
 1 file changed, 342 insertions(+), 1698 deletions(-)

diff --git a/MdePkg/Library/UefiLib/UefiDriverModel.c b/MdePkg/Library/UefiLib/UefiDriverModel.c
index 262d8bc..268edf7 100644
--- a/MdePkg/Library/UefiLib/UefiDriverModel.c
+++ b/MdePkg/Library/UefiLib/UefiDriverModel.c
@@ -17,6 +17,290 @@
 
 #include "UefiLibInternal.h"
 
+
+#define MAX_SUPPORTED_PROTOCOLS 7
+typedef struct {
+  EFI_GUID *Guid;
+  VOID     *Interface;
+} EFI_PROCESS_PROTOCOL;
+
+
+static
+EFI_STATUS
+EFIAPI
+EfiLibProcessProtocols (
+  IN CONST EFI_HANDLE                         ImageHandle,
+  IN EFI_DRIVER_BINDING_PROTOCOL              *DriverBinding,
+  IN EFI_HANDLE                               DriverBindingHandle,
+  IN BOOLEAN                                  Install,
+  IN CONST EFI_PROCESS_PROTOCOL               *ProtocolArray
+  )
+{
+  ASSERT (DriverBinding != NULL);
+  ASSERT (ProtocolArray != NULL);
+
+  if (Install) {
+    //
+    // Update the ImageHandle and DriverBindingHandle fields of the Driver Binding Protocol
+    //
+    DriverBinding->ImageHandle         = ImageHandle;
+    DriverBinding->DriverBindingHandle = DriverBindingHandle;
+
+    return gBS->InstallMultipleProtocolInterfaces (
+                  &DriverBinding->DriverBindingHandle,
+                  ProtocolArray[0].Guid, ProtocolArray[0].Interface,
+                  ProtocolArray[1].Guid, ProtocolArray[1].Interface,
+                  ProtocolArray[2].Guid, ProtocolArray[2].Interface,
+                  ProtocolArray[3].Guid, ProtocolArray[3].Interface,
+                  ProtocolArray[4].Guid, ProtocolArray[4].Interface,
+                  ProtocolArray[5].Guid, ProtocolArray[5].Interface,
+                  ProtocolArray[6].Guid, ProtocolArray[6].Interface,
+                  NULL
+                  );
+  } else {
+    return gBS->UninstallMultipleProtocolInterfaces (
+                  DriverBinding->DriverBindingHandle,
+                  ProtocolArray[0].Guid, ProtocolArray[0].Interface,
+                  ProtocolArray[1].Guid, ProtocolArray[1].Interface,
+                  ProtocolArray[2].Guid, ProtocolArray[2].Interface,
+                  ProtocolArray[3].Guid, ProtocolArray[3].Interface,
+                  ProtocolArray[4].Guid, ProtocolArray[4].Interface,
+                  ProtocolArray[5].Guid, ProtocolArray[5].Interface,
+                  ProtocolArray[6].Guid, ProtocolArray[6].Interface,
+                  NULL
+                  );
+  }
+}
+
+
+
+static
+EFI_STATUS
+EFIAPI
+EfiLibProcessAllDriverProtocols (
+  IN CONST EFI_HANDLE                         ImageHandle,
+  IN EFI_DRIVER_BINDING_PROTOCOL              *DriverBinding,
+  IN EFI_HANDLE                               DriverBindingHandle,
+  IN BOOLEAN                                  Install,
+  IN CONST EFI_COMPONENT_NAME_PROTOCOL        *ComponentName,
+  IN CONST EFI_DRIVER_CONFIGURATION_PROTOCOL  *DriverConfiguration,
+  IN CONST EFI_DRIVER_DIAGNOSTICS_PROTOCOL    *DriverDiagnostics
+  )
+{
+  EFI_STATUS           Status;
+  EFI_PROCESS_PROTOCOL ProtocolArray[MAX_SUPPORTED_PROTOCOLS];
+  UINT8                ProtocolCount;
+
+  ASSERT (DriverBinding != NULL);
+
+  //
+  // ZI the ProtocolArray structure. Both InstallMultipleProtocolInterfaces
+  // and UninstallMultipleProtocolInterfaces would stop processing ProtocolArray
+  // elements as soon as they encounter a NULL.
+  //
+  ZeroMem(ProtocolArray, sizeof(ProtocolArray));
+  ProtocolCount = 0;
+
+  //
+  // Populate ProtocolArray with valid protocol interfaces.
+  //
+  ProtocolArray[ProtocolCount].Guid = &gEfiDriverBindingProtocolGuid;
+  ProtocolArray[ProtocolCount].Interface = DriverBinding;
+  ProtocolCount++;
+
+  if (ComponentName != NULL && !FeaturePcdGet(PcdComponentNameDisable)) {
+    ProtocolArray[ProtocolCount].Guid = &gEfiComponentNameProtocolGuid;
+    ProtocolArray[ProtocolCount].Interface = (VOID *)ComponentName;
+    ProtocolCount++;
+  }
+
+  if (DriverConfiguration != NULL) {
+    ProtocolArray[ProtocolCount].Guid = &gEfiDriverConfigurationProtocolGuid;
+    ProtocolArray[ProtocolCount].Interface = (VOID *)DriverConfiguration;
+    ProtocolCount++;
+  }
+
+  if (DriverDiagnostics != NULL && !FeaturePcdGet(PcdDriverDiagnosticsDisable)) {
+    ProtocolArray[ProtocolCount].Guid = &gEfiDriverDiagnosticsProtocolGuid;
+    ProtocolArray[ProtocolCount].Interface = (VOID *)DriverDiagnostics;
+    ProtocolCount++;
+  }
+
+  Status = EfiLibProcessProtocols (
+             ImageHandle,
+             DriverBinding,
+             DriverBindingHandle,
+             Install,
+             ProtocolArray
+             );
+
+  //
+  // ASSERT if the call to InstallMultipleProtocolInterfaces() or
+  // UninstallMultipleProtocolInterfaces() failed
+  //
+  ASSERT_EFI_ERROR (Status);
+
+  return Status;
+}
+
+
+
+static
+EFI_STATUS
+EFIAPI
+EfiLibProcessDriverBindingComponentName2 (
+  IN CONST EFI_HANDLE                         ImageHandle,
+  IN EFI_DRIVER_BINDING_PROTOCOL              *DriverBinding,
+  IN EFI_HANDLE                               DriverBindingHandle,
+  IN BOOLEAN                                  Install,
+  IN CONST EFI_COMPONENT_NAME_PROTOCOL        *ComponentName,
+  IN CONST EFI_COMPONENT_NAME2_PROTOCOL       *ComponentName2
+  )
+{
+  EFI_STATUS           Status;
+  EFI_PROCESS_PROTOCOL ProtocolArray[MAX_SUPPORTED_PROTOCOLS];
+  UINT8                ProtocolCount;
+
+  ASSERT (DriverBinding != NULL);
+
+  //
+  // ZI the ProtocolArray structure. Both InstallMultipleProtocolInterfaces
+  // and UninstallMultipleProtocolInterfaces would stop processing ProtocolArray
+  // elements as soon as they encounter a NULL.
+  //
+  ZeroMem(ProtocolArray, sizeof(ProtocolArray));
+  ProtocolCount = 0;
+
+  //
+  // Populate ProtocolArray with valid protocol interfaces.
+  //
+  ProtocolArray[ProtocolCount].Guid = &gEfiDriverBindingProtocolGuid;
+  ProtocolArray[ProtocolCount].Interface = DriverBinding;
+  ProtocolCount++;
+
+  if (ComponentName != NULL && !FeaturePcdGet(PcdComponentNameDisable)) {
+    ProtocolArray[ProtocolCount].Guid = &gEfiComponentNameProtocolGuid;
+    ProtocolArray[ProtocolCount].Interface = (VOID *)ComponentName;
+    ProtocolCount++;
+  }
+
+  if (ComponentName2 != NULL && !FeaturePcdGet(PcdComponentName2Disable)) {
+    ProtocolArray[ProtocolCount].Guid = &gEfiComponentName2ProtocolGuid;
+    ProtocolArray[ProtocolCount].Interface = (VOID *)ComponentName2;
+    ProtocolCount++;
+  }
+
+  Status = EfiLibProcessProtocols (
+             ImageHandle,
+             DriverBinding,
+             DriverBindingHandle,
+             Install,
+             ProtocolArray
+             );
+
+  //
+  // ASSERT if the call to InstallMultipleProtocolInterfaces() or
+  // UninstallMultipleProtocolInterfaces() failed
+  //
+  ASSERT_EFI_ERROR (Status);
+
+  return Status;
+}
+
+
+
+static
+EFI_STATUS
+EFIAPI
+EfiLibProcessAllDriverProtocols2 (
+  IN CONST EFI_HANDLE                         ImageHandle,
+  IN EFI_DRIVER_BINDING_PROTOCOL              *DriverBinding,
+  IN EFI_HANDLE                               DriverBindingHandle,
+  IN BOOLEAN                                  Install,
+  IN CONST EFI_COMPONENT_NAME_PROTOCOL        *ComponentName,
+  IN CONST EFI_COMPONENT_NAME2_PROTOCOL       *ComponentName2,
+  IN CONST EFI_DRIVER_CONFIGURATION_PROTOCOL  *DriverConfiguration,
+  IN CONST EFI_DRIVER_CONFIGURATION2_PROTOCOL *DriverConfiguration2,
+  IN CONST EFI_DRIVER_DIAGNOSTICS_PROTOCOL    *DriverDiagnostics,
+  IN CONST EFI_DRIVER_DIAGNOSTICS2_PROTOCOL   *DriverDiagnostics2
+  )
+{
+  EFI_STATUS           Status;
+  EFI_PROCESS_PROTOCOL ProtocolArray[MAX_SUPPORTED_PROTOCOLS];
+  UINT8                ProtocolCount;
+
+  ASSERT (DriverBinding != NULL);
+
+  //
+  // ZI the ProtocolArray structure. Both InstallMultipleProtocolInterfaces
+  // and UninstallMultipleProtocolInterfaces would stop processing ProtocolArray
+  // elements as soon as they encounter a NULL.
+  //
+  ZeroMem(ProtocolArray, sizeof(ProtocolArray));
+  ProtocolCount = 0;
+
+  //
+  // Populate ProtocolArray with valid protocol interfaces.
+  //
+  ProtocolArray[ProtocolCount].Guid = &gEfiDriverBindingProtocolGuid;
+  ProtocolArray[ProtocolCount].Interface = DriverBinding;
+  ProtocolCount++;
+
+  if (ComponentName != NULL && !FeaturePcdGet(PcdComponentNameDisable)) {
+    ProtocolArray[ProtocolCount].Guid = &gEfiComponentNameProtocolGuid;
+    ProtocolArray[ProtocolCount].Interface = (VOID *)ComponentName;
+    ProtocolCount++;
+  }
+
+  if (ComponentName2 != NULL && !FeaturePcdGet(PcdComponentName2Disable)) {
+    ProtocolArray[ProtocolCount].Guid = &gEfiComponentName2ProtocolGuid;
+    ProtocolArray[ProtocolCount].Interface = (VOID *)ComponentName2;
+    ProtocolCount++;
+  }
+
+  if (DriverConfiguration != NULL) {
+    ProtocolArray[ProtocolCount].Guid = &gEfiDriverConfigurationProtocolGuid;
+    ProtocolArray[ProtocolCount].Interface = (VOID *)DriverConfiguration;
+    ProtocolCount++;
+  }
+
+  if (DriverConfiguration2 != NULL) {
+    ProtocolArray[ProtocolCount].Guid = &gEfiDriverConfiguration2ProtocolGuid;
+    ProtocolArray[ProtocolCount].Interface = (VOID *)DriverConfiguration2;
+    ProtocolCount++;
+  }
+
+  if (DriverDiagnostics != NULL && !FeaturePcdGet(PcdDriverDiagnosticsDisable)) {
+    ProtocolArray[ProtocolCount].Guid = &gEfiDriverDiagnosticsProtocolGuid;
+    ProtocolArray[ProtocolCount].Interface = (VOID *)DriverDiagnostics;
+    ProtocolCount++;
+  }
+
+  if (DriverDiagnostics2 != NULL && !FeaturePcdGet(PcdDriverDiagnostics2Disable)) {
+    ProtocolArray[ProtocolCount].Guid = &gEfiDriverDiagnostics2ProtocolGuid;
+    ProtocolArray[ProtocolCount].Interface = (VOID *)DriverDiagnostics2;
+    ProtocolCount++;
+  }
+
+  Status = EfiLibProcessProtocols (
+             ImageHandle,
+             DriverBinding,
+             DriverBindingHandle,
+             Install,
+             ProtocolArray
+             );
+
+  //
+  // ASSERT if the call to InstallMultipleProtocolInterfaces() or
+  // UninstallMultipleProtocolInterfaces() failed
+  //
+  ASSERT_EFI_ERROR (Status);
+
+  return Status;
+}
+
+
+
 /**
   Installs and completes the initialization of a Driver Binding Protocol instance.
 
@@ -148,96 +432,15 @@ EfiLibInstallAllDriverProtocols (
   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;
+  return EfiLibProcessAllDriverProtocols (
+           ImageHandle,
+           DriverBinding,
+           DriverBindingHandle,
+           TRUE,
+           ComponentName,
+           DriverConfiguration,
+           DriverDiagnostics
+           );
 }
 
 
@@ -267,90 +470,15 @@ EfiLibUninstallAllDriverProtocols (
   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;
+  return EfiLibProcessAllDriverProtocols (
+           NULL,
+           DriverBinding,
+           NULL,
+           FALSE,
+           ComponentName,
+           DriverConfiguration,
+           DriverDiagnostics
+           );
 }
 
 
@@ -389,56 +517,14 @@ EfiLibInstallDriverBindingComponentName2 (
   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;
+  return EfiLibProcessDriverBindingComponentName2 (
+           ImageHandle,
+           DriverBinding,
+           DriverBindingHandle,
+           TRUE,
+           ComponentName,
+           ComponentName2
+           );
 }
 
 
@@ -465,50 +551,14 @@ EfiLibUninstallDriverBindingComponentName2 (
   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;
+  return EfiLibProcessDriverBindingComponentName2 (
+           NULL,
+           DriverBinding,
+           NULL,
+           FALSE,
+           ComponentName,
+           ComponentName2
+           );
 }
 
 
@@ -557,724 +607,18 @@ EfiLibInstallAllDriverProtocols2 (
   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;
+  return EfiLibProcessAllDriverProtocols2 (
+           ImageHandle,
+           DriverBinding,
+           DriverBindingHandle,
+           TRUE,
+           ComponentName,
+           ComponentName2,
+           DriverConfiguration,
+           DriverConfiguration2,
+           DriverDiagnostics,
+           DriverDiagnostics2
+           );
 }
 
 
@@ -1311,716 +655,16 @@ EfiLibUninstallAllDriverProtocols2 (
   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;
+  return EfiLibProcessAllDriverProtocols2 (
+           NULL,
+           DriverBinding,
+           NULL,
+           FALSE,
+           ComponentName,
+           ComponentName2,
+           DriverConfiguration,
+           DriverConfiguration2,
+           DriverDiagnostics,
+           DriverDiagnostics2
+           );
 }
-- 
2.7.4



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] MdePkg/UefiLib: Simplify protocol un/installation abstraction
  2019-02-04 20:16 [PATCH] MdePkg/UefiLib: Simplify protocol un/installation abstraction Ashish Singhal
@ 2019-02-19 16:19 ` Ashish Singhal
  2019-02-19 19:56   ` Kinney, Michael D
  0 siblings, 1 reply; 4+ messages in thread
From: Ashish Singhal @ 2019-02-19 16:19 UTC (permalink / raw)
  To: edk2-devel@lists.01.org; +Cc: michael.d.kinney@intel.com, liming.gao@intel.com

Hello Mike/Lao,

Were you able to have a look at this?

Thanks
Ashish

-----Original Message-----
From: Ashish Singhal <ashishsingha@nvidia.com> 
Sent: Monday, February 4, 2019 1:16 PM
To: edk2-devel@lists.01.org
Cc: michael.d.kinney@intel.com; liming.gao@intel.com; Ashish Singhal <ashishsingha@nvidia.com>
Subject: [PATCH] MdePkg/UefiLib: Simplify protocol un/installation abstraction

Add helper functions to operate upon protocol installation and
uninstallation instead of every function doing it by itself.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ashish Singhal <ashishsingha@nvidia.com>
---
 MdePkg/Library/UefiLib/UefiDriverModel.c | 2040 +++++-------------------------
 1 file changed, 342 insertions(+), 1698 deletions(-)

diff --git a/MdePkg/Library/UefiLib/UefiDriverModel.c b/MdePkg/Library/UefiLib/UefiDriverModel.c
index 262d8bc..268edf7 100644
--- a/MdePkg/Library/UefiLib/UefiDriverModel.c
+++ b/MdePkg/Library/UefiLib/UefiDriverModel.c
@@ -17,6 +17,290 @@
 
 #include "UefiLibInternal.h"
 
+
+#define MAX_SUPPORTED_PROTOCOLS 7
+typedef struct {
+  EFI_GUID *Guid;
+  VOID     *Interface;
+} EFI_PROCESS_PROTOCOL;
+
+
+static
+EFI_STATUS
+EFIAPI
+EfiLibProcessProtocols (
+  IN CONST EFI_HANDLE                         ImageHandle,
+  IN EFI_DRIVER_BINDING_PROTOCOL              *DriverBinding,
+  IN EFI_HANDLE                               DriverBindingHandle,
+  IN BOOLEAN                                  Install,
+  IN CONST EFI_PROCESS_PROTOCOL               *ProtocolArray
+  )
+{
+  ASSERT (DriverBinding != NULL);
+  ASSERT (ProtocolArray != NULL);
+
+  if (Install) {
+    //
+    // Update the ImageHandle and DriverBindingHandle fields of the Driver Binding Protocol
+    //
+    DriverBinding->ImageHandle         = ImageHandle;
+    DriverBinding->DriverBindingHandle = DriverBindingHandle;
+
+    return gBS->InstallMultipleProtocolInterfaces (
+                  &DriverBinding->DriverBindingHandle,
+                  ProtocolArray[0].Guid, ProtocolArray[0].Interface,
+                  ProtocolArray[1].Guid, ProtocolArray[1].Interface,
+                  ProtocolArray[2].Guid, ProtocolArray[2].Interface,
+                  ProtocolArray[3].Guid, ProtocolArray[3].Interface,
+                  ProtocolArray[4].Guid, ProtocolArray[4].Interface,
+                  ProtocolArray[5].Guid, ProtocolArray[5].Interface,
+                  ProtocolArray[6].Guid, ProtocolArray[6].Interface,
+                  NULL
+                  );
+  } else {
+    return gBS->UninstallMultipleProtocolInterfaces (
+                  DriverBinding->DriverBindingHandle,
+                  ProtocolArray[0].Guid, ProtocolArray[0].Interface,
+                  ProtocolArray[1].Guid, ProtocolArray[1].Interface,
+                  ProtocolArray[2].Guid, ProtocolArray[2].Interface,
+                  ProtocolArray[3].Guid, ProtocolArray[3].Interface,
+                  ProtocolArray[4].Guid, ProtocolArray[4].Interface,
+                  ProtocolArray[5].Guid, ProtocolArray[5].Interface,
+                  ProtocolArray[6].Guid, ProtocolArray[6].Interface,
+                  NULL
+                  );
+  }
+}
+
+
+
+static
+EFI_STATUS
+EFIAPI
+EfiLibProcessAllDriverProtocols (
+  IN CONST EFI_HANDLE                         ImageHandle,
+  IN EFI_DRIVER_BINDING_PROTOCOL              *DriverBinding,
+  IN EFI_HANDLE                               DriverBindingHandle,
+  IN BOOLEAN                                  Install,
+  IN CONST EFI_COMPONENT_NAME_PROTOCOL        *ComponentName,
+  IN CONST EFI_DRIVER_CONFIGURATION_PROTOCOL  *DriverConfiguration,
+  IN CONST EFI_DRIVER_DIAGNOSTICS_PROTOCOL    *DriverDiagnostics
+  )
+{
+  EFI_STATUS           Status;
+  EFI_PROCESS_PROTOCOL ProtocolArray[MAX_SUPPORTED_PROTOCOLS];
+  UINT8                ProtocolCount;
+
+  ASSERT (DriverBinding != NULL);
+
+  //
+  // ZI the ProtocolArray structure. Both InstallMultipleProtocolInterfaces
+  // and UninstallMultipleProtocolInterfaces would stop processing ProtocolArray
+  // elements as soon as they encounter a NULL.
+  //
+  ZeroMem(ProtocolArray, sizeof(ProtocolArray));
+  ProtocolCount = 0;
+
+  //
+  // Populate ProtocolArray with valid protocol interfaces.
+  //
+  ProtocolArray[ProtocolCount].Guid = &gEfiDriverBindingProtocolGuid;
+  ProtocolArray[ProtocolCount].Interface = DriverBinding;
+  ProtocolCount++;
+
+  if (ComponentName != NULL && !FeaturePcdGet(PcdComponentNameDisable)) {
+    ProtocolArray[ProtocolCount].Guid = &gEfiComponentNameProtocolGuid;
+    ProtocolArray[ProtocolCount].Interface = (VOID *)ComponentName;
+    ProtocolCount++;
+  }
+
+  if (DriverConfiguration != NULL) {
+    ProtocolArray[ProtocolCount].Guid = &gEfiDriverConfigurationProtocolGuid;
+    ProtocolArray[ProtocolCount].Interface = (VOID *)DriverConfiguration;
+    ProtocolCount++;
+  }
+
+  if (DriverDiagnostics != NULL && !FeaturePcdGet(PcdDriverDiagnosticsDisable)) {
+    ProtocolArray[ProtocolCount].Guid = &gEfiDriverDiagnosticsProtocolGuid;
+    ProtocolArray[ProtocolCount].Interface = (VOID *)DriverDiagnostics;
+    ProtocolCount++;
+  }
+
+  Status = EfiLibProcessProtocols (
+             ImageHandle,
+             DriverBinding,
+             DriverBindingHandle,
+             Install,
+             ProtocolArray
+             );
+
+  //
+  // ASSERT if the call to InstallMultipleProtocolInterfaces() or
+  // UninstallMultipleProtocolInterfaces() failed
+  //
+  ASSERT_EFI_ERROR (Status);
+
+  return Status;
+}
+
+
+
+static
+EFI_STATUS
+EFIAPI
+EfiLibProcessDriverBindingComponentName2 (
+  IN CONST EFI_HANDLE                         ImageHandle,
+  IN EFI_DRIVER_BINDING_PROTOCOL              *DriverBinding,
+  IN EFI_HANDLE                               DriverBindingHandle,
+  IN BOOLEAN                                  Install,
+  IN CONST EFI_COMPONENT_NAME_PROTOCOL        *ComponentName,
+  IN CONST EFI_COMPONENT_NAME2_PROTOCOL       *ComponentName2
+  )
+{
+  EFI_STATUS           Status;
+  EFI_PROCESS_PROTOCOL ProtocolArray[MAX_SUPPORTED_PROTOCOLS];
+  UINT8                ProtocolCount;
+
+  ASSERT (DriverBinding != NULL);
+
+  //
+  // ZI the ProtocolArray structure. Both InstallMultipleProtocolInterfaces
+  // and UninstallMultipleProtocolInterfaces would stop processing ProtocolArray
+  // elements as soon as they encounter a NULL.
+  //
+  ZeroMem(ProtocolArray, sizeof(ProtocolArray));
+  ProtocolCount = 0;
+
+  //
+  // Populate ProtocolArray with valid protocol interfaces.
+  //
+  ProtocolArray[ProtocolCount].Guid = &gEfiDriverBindingProtocolGuid;
+  ProtocolArray[ProtocolCount].Interface = DriverBinding;
+  ProtocolCount++;
+
+  if (ComponentName != NULL && !FeaturePcdGet(PcdComponentNameDisable)) {
+    ProtocolArray[ProtocolCount].Guid = &gEfiComponentNameProtocolGuid;
+    ProtocolArray[ProtocolCount].Interface = (VOID *)ComponentName;
+    ProtocolCount++;
+  }
+
+  if (ComponentName2 != NULL && !FeaturePcdGet(PcdComponentName2Disable)) {
+    ProtocolArray[ProtocolCount].Guid = &gEfiComponentName2ProtocolGuid;
+    ProtocolArray[ProtocolCount].Interface = (VOID *)ComponentName2;
+    ProtocolCount++;
+  }
+
+  Status = EfiLibProcessProtocols (
+             ImageHandle,
+             DriverBinding,
+             DriverBindingHandle,
+             Install,
+             ProtocolArray
+             );
+
+  //
+  // ASSERT if the call to InstallMultipleProtocolInterfaces() or
+  // UninstallMultipleProtocolInterfaces() failed
+  //
+  ASSERT_EFI_ERROR (Status);
+
+  return Status;
+}
+
+
+
+static
+EFI_STATUS
+EFIAPI
+EfiLibProcessAllDriverProtocols2 (
+  IN CONST EFI_HANDLE                         ImageHandle,
+  IN EFI_DRIVER_BINDING_PROTOCOL              *DriverBinding,
+  IN EFI_HANDLE                               DriverBindingHandle,
+  IN BOOLEAN                                  Install,
+  IN CONST EFI_COMPONENT_NAME_PROTOCOL        *ComponentName,
+  IN CONST EFI_COMPONENT_NAME2_PROTOCOL       *ComponentName2,
+  IN CONST EFI_DRIVER_CONFIGURATION_PROTOCOL  *DriverConfiguration,
+  IN CONST EFI_DRIVER_CONFIGURATION2_PROTOCOL *DriverConfiguration2,
+  IN CONST EFI_DRIVER_DIAGNOSTICS_PROTOCOL    *DriverDiagnostics,
+  IN CONST EFI_DRIVER_DIAGNOSTICS2_PROTOCOL   *DriverDiagnostics2
+  )
+{
+  EFI_STATUS           Status;
+  EFI_PROCESS_PROTOCOL ProtocolArray[MAX_SUPPORTED_PROTOCOLS];
+  UINT8                ProtocolCount;
+
+  ASSERT (DriverBinding != NULL);
+
+  //
+  // ZI the ProtocolArray structure. Both InstallMultipleProtocolInterfaces
+  // and UninstallMultipleProtocolInterfaces would stop processing ProtocolArray
+  // elements as soon as they encounter a NULL.
+  //
+  ZeroMem(ProtocolArray, sizeof(ProtocolArray));
+  ProtocolCount = 0;
+
+  //
+  // Populate ProtocolArray with valid protocol interfaces.
+  //
+  ProtocolArray[ProtocolCount].Guid = &gEfiDriverBindingProtocolGuid;
+  ProtocolArray[ProtocolCount].Interface = DriverBinding;
+  ProtocolCount++;
+
+  if (ComponentName != NULL && !FeaturePcdGet(PcdComponentNameDisable)) {
+    ProtocolArray[ProtocolCount].Guid = &gEfiComponentNameProtocolGuid;
+    ProtocolArray[ProtocolCount].Interface = (VOID *)ComponentName;
+    ProtocolCount++;
+  }
+
+  if (ComponentName2 != NULL && !FeaturePcdGet(PcdComponentName2Disable)) {
+    ProtocolArray[ProtocolCount].Guid = &gEfiComponentName2ProtocolGuid;
+    ProtocolArray[ProtocolCount].Interface = (VOID *)ComponentName2;
+    ProtocolCount++;
+  }
+
+  if (DriverConfiguration != NULL) {
+    ProtocolArray[ProtocolCount].Guid = &gEfiDriverConfigurationProtocolGuid;
+    ProtocolArray[ProtocolCount].Interface = (VOID *)DriverConfiguration;
+    ProtocolCount++;
+  }
+
+  if (DriverConfiguration2 != NULL) {
+    ProtocolArray[ProtocolCount].Guid = &gEfiDriverConfiguration2ProtocolGuid;
+    ProtocolArray[ProtocolCount].Interface = (VOID *)DriverConfiguration2;
+    ProtocolCount++;
+  }
+
+  if (DriverDiagnostics != NULL && !FeaturePcdGet(PcdDriverDiagnosticsDisable)) {
+    ProtocolArray[ProtocolCount].Guid = &gEfiDriverDiagnosticsProtocolGuid;
+    ProtocolArray[ProtocolCount].Interface = (VOID *)DriverDiagnostics;
+    ProtocolCount++;
+  }
+
+  if (DriverDiagnostics2 != NULL && !FeaturePcdGet(PcdDriverDiagnostics2Disable)) {
+    ProtocolArray[ProtocolCount].Guid = &gEfiDriverDiagnostics2ProtocolGuid;
+    ProtocolArray[ProtocolCount].Interface = (VOID *)DriverDiagnostics2;
+    ProtocolCount++;
+  }
+
+  Status = EfiLibProcessProtocols (
+             ImageHandle,
+             DriverBinding,
+             DriverBindingHandle,
+             Install,
+             ProtocolArray
+             );
+
+  //
+  // ASSERT if the call to InstallMultipleProtocolInterfaces() or
+  // UninstallMultipleProtocolInterfaces() failed
+  //
+  ASSERT_EFI_ERROR (Status);
+
+  return Status;
+}
+
+
+
 /**
   Installs and completes the initialization of a Driver Binding Protocol instance.
 
@@ -148,96 +432,15 @@ EfiLibInstallAllDriverProtocols (
   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;
+  return EfiLibProcessAllDriverProtocols (
+           ImageHandle,
+           DriverBinding,
+           DriverBindingHandle,
+           TRUE,
+           ComponentName,
+           DriverConfiguration,
+           DriverDiagnostics
+           );
 }
 
 
@@ -267,90 +470,15 @@ EfiLibUninstallAllDriverProtocols (
   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;
+  return EfiLibProcessAllDriverProtocols (
+           NULL,
+           DriverBinding,
+           NULL,
+           FALSE,
+           ComponentName,
+           DriverConfiguration,
+           DriverDiagnostics
+           );
 }
 
 
@@ -389,56 +517,14 @@ EfiLibInstallDriverBindingComponentName2 (
   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;
+  return EfiLibProcessDriverBindingComponentName2 (
+           ImageHandle,
+           DriverBinding,
+           DriverBindingHandle,
+           TRUE,
+           ComponentName,
+           ComponentName2
+           );
 }
 
 
@@ -465,50 +551,14 @@ EfiLibUninstallDriverBindingComponentName2 (
   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;
+  return EfiLibProcessDriverBindingComponentName2 (
+           NULL,
+           DriverBinding,
+           NULL,
+           FALSE,
+           ComponentName,
+           ComponentName2
+           );
 }
 
 
@@ -557,724 +607,18 @@ EfiLibInstallAllDriverProtocols2 (
   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;
+  return EfiLibProcessAllDriverProtocols2 (
+           ImageHandle,
+           DriverBinding,
+           DriverBindingHandle,
+           TRUE,
+           ComponentName,
+           ComponentName2,
+           DriverConfiguration,
+           DriverConfiguration2,
+           DriverDiagnostics,
+           DriverDiagnostics2
+           );
 }
 
 
@@ -1311,716 +655,16 @@ EfiLibUninstallAllDriverProtocols2 (
   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;
+  return EfiLibProcessAllDriverProtocols2 (
+           NULL,
+           DriverBinding,
+           NULL,
+           FALSE,
+           ComponentName,
+           ComponentName2,
+           DriverConfiguration,
+           DriverConfiguration2,
+           DriverDiagnostics,
+           DriverDiagnostics2
+           );
 }
-- 
2.7.4

-----------------------------------------------------------------------------------
This email message is for the sole use of the intended recipient(s) and may contain
confidential information.  Any unauthorized review, use, disclosure or distribution
is prohibited.  If you are not the intended recipient, please contact the sender by
reply email and destroy all copies of the original message.
-----------------------------------------------------------------------------------


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] MdePkg/UefiLib: Simplify protocol un/installation abstraction
  2019-02-19 16:19 ` Ashish Singhal
@ 2019-02-19 19:56   ` Kinney, Michael D
  2019-02-25 19:09     ` Ashish Singhal
  0 siblings, 1 reply; 4+ messages in thread
From: Kinney, Michael D @ 2019-02-19 19:56 UTC (permalink / raw)
  To: Ashish Singhal, edk2-devel@lists.01.org, Kinney, Michael D; +Cc: Gao, Liming

Ashish,

Thanks for looking at simplifying this logic again.

I have not had a chance to run the size analysis yet.

I will get back to you in a couple of days.

Thanks,

Mike

> -----Original Message-----
> From: Ashish Singhal [mailto:ashishsingha@nvidia.com]
> Sent: Tuesday, February 19, 2019 8:19 AM
> To: edk2-devel@lists.01.org
> Cc: Kinney, Michael D <michael.d.kinney@intel.com>;
> Gao, Liming <liming.gao@intel.com>
> Subject: RE: [PATCH] MdePkg/UefiLib: Simplify protocol
> un/installation abstraction
> 
> Hello Mike/Lao,
> 
> Were you able to have a look at this?
> 
> Thanks
> Ashish
> 
> -----Original Message-----
> From: Ashish Singhal <ashishsingha@nvidia.com>
> Sent: Monday, February 4, 2019 1:16 PM
> To: edk2-devel@lists.01.org
> Cc: michael.d.kinney@intel.com; liming.gao@intel.com;
> Ashish Singhal <ashishsingha@nvidia.com>
> Subject: [PATCH] MdePkg/UefiLib: Simplify protocol
> un/installation abstraction
> 
> Add helper functions to operate upon protocol
> installation and
> uninstallation instead of every function doing it by
> itself.
> 
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Ashish Singhal <ashishsingha@nvidia.com>
> ---
>  MdePkg/Library/UefiLib/UefiDriverModel.c | 2040 +++++-
> ------------------------
>  1 file changed, 342 insertions(+), 1698 deletions(-)
> 
> diff --git a/MdePkg/Library/UefiLib/UefiDriverModel.c
> b/MdePkg/Library/UefiLib/UefiDriverModel.c
> index 262d8bc..268edf7 100644
> --- a/MdePkg/Library/UefiLib/UefiDriverModel.c
> +++ b/MdePkg/Library/UefiLib/UefiDriverModel.c
> @@ -17,6 +17,290 @@
> 
>  #include "UefiLibInternal.h"
> 
> +
> +#define MAX_SUPPORTED_PROTOCOLS 7
> +typedef struct {
> +  EFI_GUID *Guid;
> +  VOID     *Interface;
> +} EFI_PROCESS_PROTOCOL;
> +
> +
> +static
> +EFI_STATUS
> +EFIAPI
> +EfiLibProcessProtocols (
> +  IN CONST EFI_HANDLE
> ImageHandle,
> +  IN EFI_DRIVER_BINDING_PROTOCOL
> *DriverBinding,
> +  IN EFI_HANDLE
> DriverBindingHandle,
> +  IN BOOLEAN                                  Install,
> +  IN CONST EFI_PROCESS_PROTOCOL
> *ProtocolArray
> +  )
> +{
> +  ASSERT (DriverBinding != NULL);
> +  ASSERT (ProtocolArray != NULL);
> +
> +  if (Install) {
> +    //
> +    // Update the ImageHandle and DriverBindingHandle
> fields of the Driver Binding Protocol
> +    //
> +    DriverBinding->ImageHandle         = ImageHandle;
> +    DriverBinding->DriverBindingHandle =
> DriverBindingHandle;
> +
> +    return gBS->InstallMultipleProtocolInterfaces (
> +                  &DriverBinding->DriverBindingHandle,
> +                  ProtocolArray[0].Guid,
> ProtocolArray[0].Interface,
> +                  ProtocolArray[1].Guid,
> ProtocolArray[1].Interface,
> +                  ProtocolArray[2].Guid,
> ProtocolArray[2].Interface,
> +                  ProtocolArray[3].Guid,
> ProtocolArray[3].Interface,
> +                  ProtocolArray[4].Guid,
> ProtocolArray[4].Interface,
> +                  ProtocolArray[5].Guid,
> ProtocolArray[5].Interface,
> +                  ProtocolArray[6].Guid,
> ProtocolArray[6].Interface,
> +                  NULL
> +                  );
> +  } else {
> +    return gBS->UninstallMultipleProtocolInterfaces (
> +                  DriverBinding->DriverBindingHandle,
> +                  ProtocolArray[0].Guid,
> ProtocolArray[0].Interface,
> +                  ProtocolArray[1].Guid,
> ProtocolArray[1].Interface,
> +                  ProtocolArray[2].Guid,
> ProtocolArray[2].Interface,
> +                  ProtocolArray[3].Guid,
> ProtocolArray[3].Interface,
> +                  ProtocolArray[4].Guid,
> ProtocolArray[4].Interface,
> +                  ProtocolArray[5].Guid,
> ProtocolArray[5].Interface,
> +                  ProtocolArray[6].Guid,
> ProtocolArray[6].Interface,
> +                  NULL
> +                  );
> +  }
> +}
> +
> +
> +
> +static
> +EFI_STATUS
> +EFIAPI
> +EfiLibProcessAllDriverProtocols (
> +  IN CONST EFI_HANDLE
> ImageHandle,
> +  IN EFI_DRIVER_BINDING_PROTOCOL
> *DriverBinding,
> +  IN EFI_HANDLE
> DriverBindingHandle,
> +  IN BOOLEAN                                  Install,
> +  IN CONST EFI_COMPONENT_NAME_PROTOCOL
> *ComponentName,
> +  IN CONST EFI_DRIVER_CONFIGURATION_PROTOCOL
> *DriverConfiguration,
> +  IN CONST EFI_DRIVER_DIAGNOSTICS_PROTOCOL
> *DriverDiagnostics
> +  )
> +{
> +  EFI_STATUS           Status;
> +  EFI_PROCESS_PROTOCOL
> ProtocolArray[MAX_SUPPORTED_PROTOCOLS];
> +  UINT8                ProtocolCount;
> +
> +  ASSERT (DriverBinding != NULL);
> +
> +  //
> +  // ZI the ProtocolArray structure. Both
> InstallMultipleProtocolInterfaces
> +  // and UninstallMultipleProtocolInterfaces would
> stop processing ProtocolArray
> +  // elements as soon as they encounter a NULL.
> +  //
> +  ZeroMem(ProtocolArray, sizeof(ProtocolArray));
> +  ProtocolCount = 0;
> +
> +  //
> +  // Populate ProtocolArray with valid protocol
> interfaces.
> +  //
> +  ProtocolArray[ProtocolCount].Guid =
> &gEfiDriverBindingProtocolGuid;
> +  ProtocolArray[ProtocolCount].Interface =
> DriverBinding;
> +  ProtocolCount++;
> +
> +  if (ComponentName != NULL &&
> !FeaturePcdGet(PcdComponentNameDisable)) {
> +    ProtocolArray[ProtocolCount].Guid =
> &gEfiComponentNameProtocolGuid;
> +    ProtocolArray[ProtocolCount].Interface = (VOID
> *)ComponentName;
> +    ProtocolCount++;
> +  }
> +
> +  if (DriverConfiguration != NULL) {
> +    ProtocolArray[ProtocolCount].Guid =
> &gEfiDriverConfigurationProtocolGuid;
> +    ProtocolArray[ProtocolCount].Interface = (VOID
> *)DriverConfiguration;
> +    ProtocolCount++;
> +  }
> +
> +  if (DriverDiagnostics != NULL &&
> !FeaturePcdGet(PcdDriverDiagnosticsDisable)) {
> +    ProtocolArray[ProtocolCount].Guid =
> &gEfiDriverDiagnosticsProtocolGuid;
> +    ProtocolArray[ProtocolCount].Interface = (VOID
> *)DriverDiagnostics;
> +    ProtocolCount++;
> +  }
> +
> +  Status = EfiLibProcessProtocols (
> +             ImageHandle,
> +             DriverBinding,
> +             DriverBindingHandle,
> +             Install,
> +             ProtocolArray
> +             );
> +
> +  //
> +  // ASSERT if the call to
> InstallMultipleProtocolInterfaces() or
> +  // UninstallMultipleProtocolInterfaces() failed
> +  //
> +  ASSERT_EFI_ERROR (Status);
> +
> +  return Status;
> +}
> +
> +
> +
> +static
> +EFI_STATUS
> +EFIAPI
> +EfiLibProcessDriverBindingComponentName2 (
> +  IN CONST EFI_HANDLE
> ImageHandle,
> +  IN EFI_DRIVER_BINDING_PROTOCOL
> *DriverBinding,
> +  IN EFI_HANDLE
> DriverBindingHandle,
> +  IN BOOLEAN                                  Install,
> +  IN CONST EFI_COMPONENT_NAME_PROTOCOL
> *ComponentName,
> +  IN CONST EFI_COMPONENT_NAME2_PROTOCOL
> *ComponentName2
> +  )
> +{
> +  EFI_STATUS           Status;
> +  EFI_PROCESS_PROTOCOL
> ProtocolArray[MAX_SUPPORTED_PROTOCOLS];
> +  UINT8                ProtocolCount;
> +
> +  ASSERT (DriverBinding != NULL);
> +
> +  //
> +  // ZI the ProtocolArray structure. Both
> InstallMultipleProtocolInterfaces
> +  // and UninstallMultipleProtocolInterfaces would
> stop processing ProtocolArray
> +  // elements as soon as they encounter a NULL.
> +  //
> +  ZeroMem(ProtocolArray, sizeof(ProtocolArray));
> +  ProtocolCount = 0;
> +
> +  //
> +  // Populate ProtocolArray with valid protocol
> interfaces.
> +  //
> +  ProtocolArray[ProtocolCount].Guid =
> &gEfiDriverBindingProtocolGuid;
> +  ProtocolArray[ProtocolCount].Interface =
> DriverBinding;
> +  ProtocolCount++;
> +
> +  if (ComponentName != NULL &&
> !FeaturePcdGet(PcdComponentNameDisable)) {
> +    ProtocolArray[ProtocolCount].Guid =
> &gEfiComponentNameProtocolGuid;
> +    ProtocolArray[ProtocolCount].Interface = (VOID
> *)ComponentName;
> +    ProtocolCount++;
> +  }
> +
> +  if (ComponentName2 != NULL &&
> !FeaturePcdGet(PcdComponentName2Disable)) {
> +    ProtocolArray[ProtocolCount].Guid =
> &gEfiComponentName2ProtocolGuid;
> +    ProtocolArray[ProtocolCount].Interface = (VOID
> *)ComponentName2;
> +    ProtocolCount++;
> +  }
> +
> +  Status = EfiLibProcessProtocols (
> +             ImageHandle,
> +             DriverBinding,
> +             DriverBindingHandle,
> +             Install,
> +             ProtocolArray
> +             );
> +
> +  //
> +  // ASSERT if the call to
> InstallMultipleProtocolInterfaces() or
> +  // UninstallMultipleProtocolInterfaces() failed
> +  //
> +  ASSERT_EFI_ERROR (Status);
> +
> +  return Status;
> +}
> +
> +
> +
> +static
> +EFI_STATUS
> +EFIAPI
> +EfiLibProcessAllDriverProtocols2 (
> +  IN CONST EFI_HANDLE
> ImageHandle,
> +  IN EFI_DRIVER_BINDING_PROTOCOL
> *DriverBinding,
> +  IN EFI_HANDLE
> DriverBindingHandle,
> +  IN BOOLEAN                                  Install,
> +  IN CONST EFI_COMPONENT_NAME_PROTOCOL
> *ComponentName,
> +  IN CONST EFI_COMPONENT_NAME2_PROTOCOL
> *ComponentName2,
> +  IN CONST EFI_DRIVER_CONFIGURATION_PROTOCOL
> *DriverConfiguration,
> +  IN CONST EFI_DRIVER_CONFIGURATION2_PROTOCOL
> *DriverConfiguration2,
> +  IN CONST EFI_DRIVER_DIAGNOSTICS_PROTOCOL
> *DriverDiagnostics,
> +  IN CONST EFI_DRIVER_DIAGNOSTICS2_PROTOCOL
> *DriverDiagnostics2
> +  )
> +{
> +  EFI_STATUS           Status;
> +  EFI_PROCESS_PROTOCOL
> ProtocolArray[MAX_SUPPORTED_PROTOCOLS];
> +  UINT8                ProtocolCount;
> +
> +  ASSERT (DriverBinding != NULL);
> +
> +  //
> +  // ZI the ProtocolArray structure. Both
> InstallMultipleProtocolInterfaces
> +  // and UninstallMultipleProtocolInterfaces would
> stop processing ProtocolArray
> +  // elements as soon as they encounter a NULL.
> +  //
> +  ZeroMem(ProtocolArray, sizeof(ProtocolArray));
> +  ProtocolCount = 0;
> +
> +  //
> +  // Populate ProtocolArray with valid protocol
> interfaces.
> +  //
> +  ProtocolArray[ProtocolCount].Guid =
> &gEfiDriverBindingProtocolGuid;
> +  ProtocolArray[ProtocolCount].Interface =
> DriverBinding;
> +  ProtocolCount++;
> +
> +  if (ComponentName != NULL &&
> !FeaturePcdGet(PcdComponentNameDisable)) {
> +    ProtocolArray[ProtocolCount].Guid =
> &gEfiComponentNameProtocolGuid;
> +    ProtocolArray[ProtocolCount].Interface = (VOID
> *)ComponentName;
> +    ProtocolCount++;
> +  }
> +
> +  if (ComponentName2 != NULL &&
> !FeaturePcdGet(PcdComponentName2Disable)) {
> +    ProtocolArray[ProtocolCount].Guid =
> &gEfiComponentName2ProtocolGuid;
> +    ProtocolArray[ProtocolCount].Interface = (VOID
> *)ComponentName2;
> +    ProtocolCount++;
> +  }
> +
> +  if (DriverConfiguration != NULL) {
> +    ProtocolArray[ProtocolCount].Guid =
> &gEfiDriverConfigurationProtocolGuid;
> +    ProtocolArray[ProtocolCount].Interface = (VOID
> *)DriverConfiguration;
> +    ProtocolCount++;
> +  }
> +
> +  if (DriverConfiguration2 != NULL) {
> +    ProtocolArray[ProtocolCount].Guid =
> &gEfiDriverConfiguration2ProtocolGuid;
> +    ProtocolArray[ProtocolCount].Interface = (VOID
> *)DriverConfiguration2;
> +    ProtocolCount++;
> +  }
> +
> +  if (DriverDiagnostics != NULL &&
> !FeaturePcdGet(PcdDriverDiagnosticsDisable)) {
> +    ProtocolArray[ProtocolCount].Guid =
> &gEfiDriverDiagnosticsProtocolGuid;
> +    ProtocolArray[ProtocolCount].Interface = (VOID
> *)DriverDiagnostics;
> +    ProtocolCount++;
> +  }
> +
> +  if (DriverDiagnostics2 != NULL &&
> !FeaturePcdGet(PcdDriverDiagnostics2Disable)) {
> +    ProtocolArray[ProtocolCount].Guid =
> &gEfiDriverDiagnostics2ProtocolGuid;
> +    ProtocolArray[ProtocolCount].Interface = (VOID
> *)DriverDiagnostics2;
> +    ProtocolCount++;
> +  }
> +
> +  Status = EfiLibProcessProtocols (
> +             ImageHandle,
> +             DriverBinding,
> +             DriverBindingHandle,
> +             Install,
> +             ProtocolArray
> +             );
> +
> +  //
> +  // ASSERT if the call to
> InstallMultipleProtocolInterfaces() or
> +  // UninstallMultipleProtocolInterfaces() failed
> +  //
> +  ASSERT_EFI_ERROR (Status);
> +
> +  return Status;
> +}
> +
> +
> +
>  /**
>    Installs and completes the initialization of a
> Driver Binding Protocol instance.
> 
> @@ -148,96 +432,15 @@ EfiLibInstallAllDriverProtocols (
>    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;
> +  return EfiLibProcessAllDriverProtocols (
> +           ImageHandle,
> +           DriverBinding,
> +           DriverBindingHandle,
> +           TRUE,
> +           ComponentName,
> +           DriverConfiguration,
> +           DriverDiagnostics
> +           );
>  }
> 
> 
> @@ -267,90 +470,15 @@ EfiLibUninstallAllDriverProtocols
> (
>    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;
> +  return EfiLibProcessAllDriverProtocols (
> +           NULL,
> +           DriverBinding,
> +           NULL,
> +           FALSE,
> +           ComponentName,
> +           DriverConfiguration,
> +           DriverDiagnostics
> +           );
>  }
> 
> 
> @@ -389,56 +517,14 @@
> EfiLibInstallDriverBindingComponentName2 (
>    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;
> +  return EfiLibProcessDriverBindingComponentName2 (
> +           ImageHandle,
> +           DriverBinding,
> +           DriverBindingHandle,
> +           TRUE,
> +           ComponentName,
> +           ComponentName2
> +           );
>  }
> 
> 
> @@ -465,50 +551,14 @@
> EfiLibUninstallDriverBindingComponentName2 (
>    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;
> +  return EfiLibProcessDriverBindingComponentName2 (
> +           NULL,
> +           DriverBinding,
> +           NULL,
> +           FALSE,
> +           ComponentName,
> +           ComponentName2
> +           );
>  }
> 
> 
> @@ -557,724 +607,18 @@ EfiLibInstallAllDriverProtocols2
> (
>    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;
> +  return EfiLibProcessAllDriverProtocols2 (
> +           ImageHandle,
> +           DriverBinding,
> +           DriverBindingHandle,
> +           TRUE,
> +           ComponentName,
> +           ComponentName2,
> +           DriverConfiguration,
> +           DriverConfiguration2,
> +           DriverDiagnostics,
> +           DriverDiagnostics2
> +           );
>  }
> 
> 
> @@ -1311,716 +655,16 @@
> EfiLibUninstallAllDriverProtocols2 (
>    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;
> +  return EfiLibProcessAllDriverProtocols2 (
> +           NULL,
> +           DriverBinding,
> +           NULL,
> +           FALSE,
> +           ComponentName,
> +           ComponentName2,
> +           DriverConfiguration,
> +           DriverConfiguration2,
> +           DriverDiagnostics,
> +           DriverDiagnostics2
> +           );
>  }
> --
> 2.7.4
> 
> -------------------------------------------------------
> ----------------------------
> This email message is for the sole use of the intended
> recipient(s) and may contain
> confidential information.  Any unauthorized review,
> use, disclosure or distribution
> is prohibited.  If you are not the intended recipient,
> please contact the sender by
> reply email and destroy all copies of the original
> message.
> -------------------------------------------------------
> ----------------------------


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] MdePkg/UefiLib: Simplify protocol un/installation abstraction
  2019-02-19 19:56   ` Kinney, Michael D
@ 2019-02-25 19:09     ` Ashish Singhal
  0 siblings, 0 replies; 4+ messages in thread
From: Ashish Singhal @ 2019-02-25 19:09 UTC (permalink / raw)
  To: Kinney, Michael D, edk2-devel@lists.01.org; +Cc: Gao, Liming

Mike,

Do you have any update on this change yet?

Thanks
Ashish

-----Original Message-----
From: Kinney, Michael D <michael.d.kinney@intel.com> 
Sent: Tuesday, February 19, 2019 12:56 PM
To: Ashish Singhal <ashishsingha@nvidia.com>; edk2-devel@lists.01.org; Kinney, Michael D <michael.d.kinney@intel.com>
Cc: Gao, Liming <liming.gao@intel.com>
Subject: RE: [PATCH] MdePkg/UefiLib: Simplify protocol un/installation abstraction

Ashish,

Thanks for looking at simplifying this logic again.

I have not had a chance to run the size analysis yet.

I will get back to you in a couple of days.

Thanks,

Mike

> -----Original Message-----
> From: Ashish Singhal [mailto:ashishsingha@nvidia.com]
> Sent: Tuesday, February 19, 2019 8:19 AM
> To: edk2-devel@lists.01.org
> Cc: Kinney, Michael D <michael.d.kinney@intel.com>;
> Gao, Liming <liming.gao@intel.com>
> Subject: RE: [PATCH] MdePkg/UefiLib: Simplify protocol
> un/installation abstraction
> 
> Hello Mike/Lao,
> 
> Were you able to have a look at this?
> 
> Thanks
> Ashish
> 
> -----Original Message-----
> From: Ashish Singhal <ashishsingha@nvidia.com>
> Sent: Monday, February 4, 2019 1:16 PM
> To: edk2-devel@lists.01.org
> Cc: michael.d.kinney@intel.com; liming.gao@intel.com;
> Ashish Singhal <ashishsingha@nvidia.com>
> Subject: [PATCH] MdePkg/UefiLib: Simplify protocol
> un/installation abstraction
> 
> Add helper functions to operate upon protocol
> installation and
> uninstallation instead of every function doing it by
> itself.
> 
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Ashish Singhal <ashishsingha@nvidia.com>
> ---
>  MdePkg/Library/UefiLib/UefiDriverModel.c | 2040 +++++-
> ------------------------
>  1 file changed, 342 insertions(+), 1698 deletions(-)
> 
> diff --git a/MdePkg/Library/UefiLib/UefiDriverModel.c
> b/MdePkg/Library/UefiLib/UefiDriverModel.c
> index 262d8bc..268edf7 100644
> --- a/MdePkg/Library/UefiLib/UefiDriverModel.c
> +++ b/MdePkg/Library/UefiLib/UefiDriverModel.c
> @@ -17,6 +17,290 @@
> 
>  #include "UefiLibInternal.h"
> 
> +
> +#define MAX_SUPPORTED_PROTOCOLS 7
> +typedef struct {
> +  EFI_GUID *Guid;
> +  VOID     *Interface;
> +} EFI_PROCESS_PROTOCOL;
> +
> +
> +static
> +EFI_STATUS
> +EFIAPI
> +EfiLibProcessProtocols (
> +  IN CONST EFI_HANDLE
> ImageHandle,
> +  IN EFI_DRIVER_BINDING_PROTOCOL
> *DriverBinding,
> +  IN EFI_HANDLE
> DriverBindingHandle,
> +  IN BOOLEAN                                  Install,
> +  IN CONST EFI_PROCESS_PROTOCOL
> *ProtocolArray
> +  )
> +{
> +  ASSERT (DriverBinding != NULL);
> +  ASSERT (ProtocolArray != NULL);
> +
> +  if (Install) {
> +    //
> +    // Update the ImageHandle and DriverBindingHandle
> fields of the Driver Binding Protocol
> +    //
> +    DriverBinding->ImageHandle         = ImageHandle;
> +    DriverBinding->DriverBindingHandle =
> DriverBindingHandle;
> +
> +    return gBS->InstallMultipleProtocolInterfaces (
> +                  &DriverBinding->DriverBindingHandle,
> +                  ProtocolArray[0].Guid,
> ProtocolArray[0].Interface,
> +                  ProtocolArray[1].Guid,
> ProtocolArray[1].Interface,
> +                  ProtocolArray[2].Guid,
> ProtocolArray[2].Interface,
> +                  ProtocolArray[3].Guid,
> ProtocolArray[3].Interface,
> +                  ProtocolArray[4].Guid,
> ProtocolArray[4].Interface,
> +                  ProtocolArray[5].Guid,
> ProtocolArray[5].Interface,
> +                  ProtocolArray[6].Guid,
> ProtocolArray[6].Interface,
> +                  NULL
> +                  );
> +  } else {
> +    return gBS->UninstallMultipleProtocolInterfaces (
> +                  DriverBinding->DriverBindingHandle,
> +                  ProtocolArray[0].Guid,
> ProtocolArray[0].Interface,
> +                  ProtocolArray[1].Guid,
> ProtocolArray[1].Interface,
> +                  ProtocolArray[2].Guid,
> ProtocolArray[2].Interface,
> +                  ProtocolArray[3].Guid,
> ProtocolArray[3].Interface,
> +                  ProtocolArray[4].Guid,
> ProtocolArray[4].Interface,
> +                  ProtocolArray[5].Guid,
> ProtocolArray[5].Interface,
> +                  ProtocolArray[6].Guid,
> ProtocolArray[6].Interface,
> +                  NULL
> +                  );
> +  }
> +}
> +
> +
> +
> +static
> +EFI_STATUS
> +EFIAPI
> +EfiLibProcessAllDriverProtocols (
> +  IN CONST EFI_HANDLE
> ImageHandle,
> +  IN EFI_DRIVER_BINDING_PROTOCOL
> *DriverBinding,
> +  IN EFI_HANDLE
> DriverBindingHandle,
> +  IN BOOLEAN                                  Install,
> +  IN CONST EFI_COMPONENT_NAME_PROTOCOL
> *ComponentName,
> +  IN CONST EFI_DRIVER_CONFIGURATION_PROTOCOL
> *DriverConfiguration,
> +  IN CONST EFI_DRIVER_DIAGNOSTICS_PROTOCOL
> *DriverDiagnostics
> +  )
> +{
> +  EFI_STATUS           Status;
> +  EFI_PROCESS_PROTOCOL
> ProtocolArray[MAX_SUPPORTED_PROTOCOLS];
> +  UINT8                ProtocolCount;
> +
> +  ASSERT (DriverBinding != NULL);
> +
> +  //
> +  // ZI the ProtocolArray structure. Both
> InstallMultipleProtocolInterfaces
> +  // and UninstallMultipleProtocolInterfaces would
> stop processing ProtocolArray
> +  // elements as soon as they encounter a NULL.
> +  //
> +  ZeroMem(ProtocolArray, sizeof(ProtocolArray));
> +  ProtocolCount = 0;
> +
> +  //
> +  // Populate ProtocolArray with valid protocol
> interfaces.
> +  //
> +  ProtocolArray[ProtocolCount].Guid =
> &gEfiDriverBindingProtocolGuid;
> +  ProtocolArray[ProtocolCount].Interface =
> DriverBinding;
> +  ProtocolCount++;
> +
> +  if (ComponentName != NULL &&
> !FeaturePcdGet(PcdComponentNameDisable)) {
> +    ProtocolArray[ProtocolCount].Guid =
> &gEfiComponentNameProtocolGuid;
> +    ProtocolArray[ProtocolCount].Interface = (VOID
> *)ComponentName;
> +    ProtocolCount++;
> +  }
> +
> +  if (DriverConfiguration != NULL) {
> +    ProtocolArray[ProtocolCount].Guid =
> &gEfiDriverConfigurationProtocolGuid;
> +    ProtocolArray[ProtocolCount].Interface = (VOID
> *)DriverConfiguration;
> +    ProtocolCount++;
> +  }
> +
> +  if (DriverDiagnostics != NULL &&
> !FeaturePcdGet(PcdDriverDiagnosticsDisable)) {
> +    ProtocolArray[ProtocolCount].Guid =
> &gEfiDriverDiagnosticsProtocolGuid;
> +    ProtocolArray[ProtocolCount].Interface = (VOID
> *)DriverDiagnostics;
> +    ProtocolCount++;
> +  }
> +
> +  Status = EfiLibProcessProtocols (
> +             ImageHandle,
> +             DriverBinding,
> +             DriverBindingHandle,
> +             Install,
> +             ProtocolArray
> +             );
> +
> +  //
> +  // ASSERT if the call to
> InstallMultipleProtocolInterfaces() or
> +  // UninstallMultipleProtocolInterfaces() failed
> +  //
> +  ASSERT_EFI_ERROR (Status);
> +
> +  return Status;
> +}
> +
> +
> +
> +static
> +EFI_STATUS
> +EFIAPI
> +EfiLibProcessDriverBindingComponentName2 (
> +  IN CONST EFI_HANDLE
> ImageHandle,
> +  IN EFI_DRIVER_BINDING_PROTOCOL
> *DriverBinding,
> +  IN EFI_HANDLE
> DriverBindingHandle,
> +  IN BOOLEAN                                  Install,
> +  IN CONST EFI_COMPONENT_NAME_PROTOCOL
> *ComponentName,
> +  IN CONST EFI_COMPONENT_NAME2_PROTOCOL
> *ComponentName2
> +  )
> +{
> +  EFI_STATUS           Status;
> +  EFI_PROCESS_PROTOCOL
> ProtocolArray[MAX_SUPPORTED_PROTOCOLS];
> +  UINT8                ProtocolCount;
> +
> +  ASSERT (DriverBinding != NULL);
> +
> +  //
> +  // ZI the ProtocolArray structure. Both
> InstallMultipleProtocolInterfaces
> +  // and UninstallMultipleProtocolInterfaces would
> stop processing ProtocolArray
> +  // elements as soon as they encounter a NULL.
> +  //
> +  ZeroMem(ProtocolArray, sizeof(ProtocolArray));
> +  ProtocolCount = 0;
> +
> +  //
> +  // Populate ProtocolArray with valid protocol
> interfaces.
> +  //
> +  ProtocolArray[ProtocolCount].Guid =
> &gEfiDriverBindingProtocolGuid;
> +  ProtocolArray[ProtocolCount].Interface =
> DriverBinding;
> +  ProtocolCount++;
> +
> +  if (ComponentName != NULL &&
> !FeaturePcdGet(PcdComponentNameDisable)) {
> +    ProtocolArray[ProtocolCount].Guid =
> &gEfiComponentNameProtocolGuid;
> +    ProtocolArray[ProtocolCount].Interface = (VOID
> *)ComponentName;
> +    ProtocolCount++;
> +  }
> +
> +  if (ComponentName2 != NULL &&
> !FeaturePcdGet(PcdComponentName2Disable)) {
> +    ProtocolArray[ProtocolCount].Guid =
> &gEfiComponentName2ProtocolGuid;
> +    ProtocolArray[ProtocolCount].Interface = (VOID
> *)ComponentName2;
> +    ProtocolCount++;
> +  }
> +
> +  Status = EfiLibProcessProtocols (
> +             ImageHandle,
> +             DriverBinding,
> +             DriverBindingHandle,
> +             Install,
> +             ProtocolArray
> +             );
> +
> +  //
> +  // ASSERT if the call to
> InstallMultipleProtocolInterfaces() or
> +  // UninstallMultipleProtocolInterfaces() failed
> +  //
> +  ASSERT_EFI_ERROR (Status);
> +
> +  return Status;
> +}
> +
> +
> +
> +static
> +EFI_STATUS
> +EFIAPI
> +EfiLibProcessAllDriverProtocols2 (
> +  IN CONST EFI_HANDLE
> ImageHandle,
> +  IN EFI_DRIVER_BINDING_PROTOCOL
> *DriverBinding,
> +  IN EFI_HANDLE
> DriverBindingHandle,
> +  IN BOOLEAN                                  Install,
> +  IN CONST EFI_COMPONENT_NAME_PROTOCOL
> *ComponentName,
> +  IN CONST EFI_COMPONENT_NAME2_PROTOCOL
> *ComponentName2,
> +  IN CONST EFI_DRIVER_CONFIGURATION_PROTOCOL
> *DriverConfiguration,
> +  IN CONST EFI_DRIVER_CONFIGURATION2_PROTOCOL
> *DriverConfiguration2,
> +  IN CONST EFI_DRIVER_DIAGNOSTICS_PROTOCOL
> *DriverDiagnostics,
> +  IN CONST EFI_DRIVER_DIAGNOSTICS2_PROTOCOL
> *DriverDiagnostics2
> +  )
> +{
> +  EFI_STATUS           Status;
> +  EFI_PROCESS_PROTOCOL
> ProtocolArray[MAX_SUPPORTED_PROTOCOLS];
> +  UINT8                ProtocolCount;
> +
> +  ASSERT (DriverBinding != NULL);
> +
> +  //
> +  // ZI the ProtocolArray structure. Both
> InstallMultipleProtocolInterfaces
> +  // and UninstallMultipleProtocolInterfaces would
> stop processing ProtocolArray
> +  // elements as soon as they encounter a NULL.
> +  //
> +  ZeroMem(ProtocolArray, sizeof(ProtocolArray));
> +  ProtocolCount = 0;
> +
> +  //
> +  // Populate ProtocolArray with valid protocol
> interfaces.
> +  //
> +  ProtocolArray[ProtocolCount].Guid =
> &gEfiDriverBindingProtocolGuid;
> +  ProtocolArray[ProtocolCount].Interface =
> DriverBinding;
> +  ProtocolCount++;
> +
> +  if (ComponentName != NULL &&
> !FeaturePcdGet(PcdComponentNameDisable)) {
> +    ProtocolArray[ProtocolCount].Guid =
> &gEfiComponentNameProtocolGuid;
> +    ProtocolArray[ProtocolCount].Interface = (VOID
> *)ComponentName;
> +    ProtocolCount++;
> +  }
> +
> +  if (ComponentName2 != NULL &&
> !FeaturePcdGet(PcdComponentName2Disable)) {
> +    ProtocolArray[ProtocolCount].Guid =
> &gEfiComponentName2ProtocolGuid;
> +    ProtocolArray[ProtocolCount].Interface = (VOID
> *)ComponentName2;
> +    ProtocolCount++;
> +  }
> +
> +  if (DriverConfiguration != NULL) {
> +    ProtocolArray[ProtocolCount].Guid =
> &gEfiDriverConfigurationProtocolGuid;
> +    ProtocolArray[ProtocolCount].Interface = (VOID
> *)DriverConfiguration;
> +    ProtocolCount++;
> +  }
> +
> +  if (DriverConfiguration2 != NULL) {
> +    ProtocolArray[ProtocolCount].Guid =
> &gEfiDriverConfiguration2ProtocolGuid;
> +    ProtocolArray[ProtocolCount].Interface = (VOID
> *)DriverConfiguration2;
> +    ProtocolCount++;
> +  }
> +
> +  if (DriverDiagnostics != NULL &&
> !FeaturePcdGet(PcdDriverDiagnosticsDisable)) {
> +    ProtocolArray[ProtocolCount].Guid =
> &gEfiDriverDiagnosticsProtocolGuid;
> +    ProtocolArray[ProtocolCount].Interface = (VOID
> *)DriverDiagnostics;
> +    ProtocolCount++;
> +  }
> +
> +  if (DriverDiagnostics2 != NULL &&
> !FeaturePcdGet(PcdDriverDiagnostics2Disable)) {
> +    ProtocolArray[ProtocolCount].Guid =
> &gEfiDriverDiagnostics2ProtocolGuid;
> +    ProtocolArray[ProtocolCount].Interface = (VOID
> *)DriverDiagnostics2;
> +    ProtocolCount++;
> +  }
> +
> +  Status = EfiLibProcessProtocols (
> +             ImageHandle,
> +             DriverBinding,
> +             DriverBindingHandle,
> +             Install,
> +             ProtocolArray
> +             );
> +
> +  //
> +  // ASSERT if the call to
> InstallMultipleProtocolInterfaces() or
> +  // UninstallMultipleProtocolInterfaces() failed
> +  //
> +  ASSERT_EFI_ERROR (Status);
> +
> +  return Status;
> +}
> +
> +
> +
>  /**
>    Installs and completes the initialization of a
> Driver Binding Protocol instance.
> 
> @@ -148,96 +432,15 @@ EfiLibInstallAllDriverProtocols (
>    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;
> +  return EfiLibProcessAllDriverProtocols (
> +           ImageHandle,
> +           DriverBinding,
> +           DriverBindingHandle,
> +           TRUE,
> +           ComponentName,
> +           DriverConfiguration,
> +           DriverDiagnostics
> +           );
>  }
> 
> 
> @@ -267,90 +470,15 @@ EfiLibUninstallAllDriverProtocols
> (
>    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;
> +  return EfiLibProcessAllDriverProtocols (
> +           NULL,
> +           DriverBinding,
> +           NULL,
> +           FALSE,
> +           ComponentName,
> +           DriverConfiguration,
> +           DriverDiagnostics
> +           );
>  }
> 
> 
> @@ -389,56 +517,14 @@
> EfiLibInstallDriverBindingComponentName2 (
>    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;
> +  return EfiLibProcessDriverBindingComponentName2 (
> +           ImageHandle,
> +           DriverBinding,
> +           DriverBindingHandle,
> +           TRUE,
> +           ComponentName,
> +           ComponentName2
> +           );
>  }
> 
> 
> @@ -465,50 +551,14 @@
> EfiLibUninstallDriverBindingComponentName2 (
>    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;
> +  return EfiLibProcessDriverBindingComponentName2 (
> +           NULL,
> +           DriverBinding,
> +           NULL,
> +           FALSE,
> +           ComponentName,
> +           ComponentName2
> +           );
>  }
> 
> 
> @@ -557,724 +607,18 @@ EfiLibInstallAllDriverProtocols2
> (
>    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;
> +  return EfiLibProcessAllDriverProtocols2 (
> +           ImageHandle,
> +           DriverBinding,
> +           DriverBindingHandle,
> +           TRUE,
> +           ComponentName,
> +           ComponentName2,
> +           DriverConfiguration,
> +           DriverConfiguration2,
> +           DriverDiagnostics,
> +           DriverDiagnostics2
> +           );
>  }
> 
> 
> @@ -1311,716 +655,16 @@
> EfiLibUninstallAllDriverProtocols2 (
>    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;
> +  return EfiLibProcessAllDriverProtocols2 (
> +           NULL,
> +           DriverBinding,
> +           NULL,
> +           FALSE,
> +           ComponentName,
> +           ComponentName2,
> +           DriverConfiguration,
> +           DriverConfiguration2,
> +           DriverDiagnostics,
> +           DriverDiagnostics2
> +           );
>  }
> --
> 2.7.4
> 
> -------------------------------------------------------
> ----------------------------
> This email message is for the sole use of the intended
> recipient(s) and may contain
> confidential information.  Any unauthorized review,
> use, disclosure or distribution
> is prohibited.  If you are not the intended recipient,
> please contact the sender by
> reply email and destroy all copies of the original
> message.
> -------------------------------------------------------
> ----------------------------


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2019-02-25 19:15 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-02-04 20:16 [PATCH] MdePkg/UefiLib: Simplify protocol un/installation abstraction Ashish Singhal
2019-02-19 16:19 ` Ashish Singhal
2019-02-19 19:56   ` Kinney, Michael D
2019-02-25 19:09     ` Ashish Singhal

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox