]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/UefiLib/UefiDriverModel.c
MdePkg/ProcessorBind: add defines for page allocation granularity
[mirror_edk2.git] / MdePkg / Library / UefiLib / UefiDriverModel.c
index 0a72d263ad9138862feeb88f5c66d4ecf18e35f5..fb6067eac2263e379affcf2a9532d4029d615df3 100644 (file)
@@ -2,54 +2,63 @@
   Library functions that abstract driver model protocols\r
   installation.\r
 \r
-  Copyright (c) 2006 - 2007, Intel Corporation<BR> All rights\r
-  reserved. This program and the accompanying materials are\r
+  Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>\r
+  This program and the accompanying materials are\r
   licensed and made available under the terms and conditions of the BSD License\r
   which accompanies this distribution.  The full text of the license may be found at\r
-  http://opensource.org/licenses/bsd-license.php\r
+  http://opensource.org/licenses/bsd-license.php.\r
   \r
   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 \r
 **/ \r
 \r
-//\r
-// Include common header file for this module.\r
-//\r
+\r
 #include "UefiLibInternal.h"\r
 \r
 /**\r
-  Intialize a driver by installing the Driver Binding Protocol onto the\r
-  driver's DriverBindingHandle.  This is typically the same as the driver's\r
-  ImageHandle, but it can be different if the driver produces multiple\r
-  DriverBinding Protocols.  This function also initializes the EFI Driver\r
-  Library that initializes the global variables gST, gBS, gRT.\r
-\r
-  @param  ImageHandle          The image handle of the driver\r
-  @param  SystemTable          The EFI System Table that was passed to the driver's entry point\r
-  @param  DriverBinding        A Driver Binding Protocol instance that this driver is producing\r
-  @param  DriverBindingHandle  The handle that DriverBinding is to be installe onto.  If this\r
+  Installs and completes the initialization of a Driver Binding Protocol instance.\r
+  \r
+  Installs the Driver Binding Protocol specified by DriverBinding onto the handle\r
+  specified by DriverBindingHandle. If DriverBindingHandle is NULL, then DriverBinding\r
+  is installed onto a newly created handle. DriverBindingHandle is typically the same\r
+  as the driver's ImageHandle, but it can be different if the driver produces multiple\r
+  Driver Binding Protocols. \r
+  If DriverBinding is NULL, then ASSERT(). \r
+  If DriverBinding can not be installed onto a handle, then ASSERT().\r
+\r
+  @param  ImageHandle          The image handle of the driver.\r
+  @param  SystemTable          The EFI System Table that was passed to the driver's entry point.\r
+  @param  DriverBinding        A Driver Binding Protocol instance that this driver is producing.\r
+  @param  DriverBindingHandle  The handle that DriverBinding is to be installed onto.  If this\r
                                parameter is NULL, then a new handle is created.\r
 \r
-  @retval EFI_SUCCESS          DriverBinding is installed onto DriverBindingHandle\r
-  @retval Other                Status from gBS->InstallProtocolInterface()\r
+  @retval EFI_SUCCESS           The protocol installation successfully completed.\r
+  @retval EFI_OUT_OF_RESOURCES  There was not enough system resources to install the protocol.\r
+  @retval Others                Status from gBS->InstallMultipleProtocolInterfaces().\r
 \r
 **/\r
 EFI_STATUS\r
 EFIAPI\r
 EfiLibInstallDriverBinding (\r
-  IN const EFI_HANDLE             ImageHandle,\r
-  IN const EFI_SYSTEM_TABLE       *SystemTable,\r
+  IN CONST EFI_HANDLE             ImageHandle,\r
+  IN CONST EFI_SYSTEM_TABLE       *SystemTable,\r
   IN EFI_DRIVER_BINDING_PROTOCOL  *DriverBinding,\r
   IN EFI_HANDLE                   DriverBindingHandle\r
   )\r
 {\r
   EFI_STATUS  Status;\r
 \r
-  ASSERT (NULL != DriverBinding);\r
+  ASSERT (DriverBinding != NULL);\r
+\r
+  //\r
+  // Update the ImageHandle and DriverBindingHandle fields of the Driver Binding Protocol\r
+  //\r
+  DriverBinding->ImageHandle         = ImageHandle;\r
+  DriverBinding->DriverBindingHandle = DriverBindingHandle;\r
 \r
   Status = gBS->InstallMultipleProtocolInterfaces (\r
-                  &DriverBindingHandle,\r
+                  &DriverBinding->DriverBindingHandle,\r
                   &gEfiDriverBindingProtocolGuid, DriverBinding,\r
                   NULL\r
                   );\r
@@ -58,62 +67,69 @@ EfiLibInstallDriverBinding (
   //\r
   ASSERT_EFI_ERROR (Status);\r
 \r
-  //\r
-  // Update the ImageHandle and DriverBindingHandle fields of the Driver Binding Protocol\r
-  //\r
-  DriverBinding->ImageHandle         = ImageHandle;\r
-  DriverBinding->DriverBindingHandle = DriverBindingHandle;\r
-\r
   return Status;\r
 }\r
 \r
+\r
 /**\r
-  Intialize a driver by installing the Driver Binding Protocol onto the\r
-  driver's DriverBindingHandle.  This is typically the same as the driver's\r
-  ImageHandle, but it can be different if the driver produces multiple\r
-  DriverBinding Protocols.  This function also initializes the EFI Driver\r
-  Library that initializes the global variables gST, gBS, gRT.\r
-\r
-  @ImageHandle                 The image handle of the driver\r
-  @SystemTable                 The EFI System Table that was passed to the driver's entry point\r
-  @DriverBinding               A Driver Binding Protocol instance that this driver is producing\r
-  @DriverBindingHandle         The handle that DriverBinding is to be installe onto.  If this\r
+  Installs and completes the initialization of a Driver Binding Protocol instance and\r
+  optionally installs the Component Name, Driver Configuration and Driver Diagnostics Protocols.\r
+\r
+  Initializes a driver by installing the Driver Binding Protocol together with the\r
+  optional Component Name, optional Driver Configure and optional Driver Diagnostic\r
+  Protocols onto the driver's DriverBindingHandle. If DriverBindingHandle is NULL,\r
+  then the protocols are  installed onto a newly created handle. DriverBindingHandle\r
+  is typically the same as the driver's ImageHandle, but it can be different if the\r
+  driver produces multiple Driver Binding Protocols. \r
+  If DriverBinding is NULL, then ASSERT(). \r
+  If the installation fails, then ASSERT().\r
+  \r
+  @param  ImageHandle          The image handle of the driver.\r
+  @param  SystemTable          The EFI System Table that was passed to the driver's entry point.\r
+  @param  DriverBinding        A Driver Binding Protocol instance that this driver is producing.\r
+  @param  DriverBindingHandle  The handle that DriverBinding is to be installed onto.  If this\r
                                parameter is NULL, then a new handle is created.\r
-  @ComponentName               A Component Name Protocol instance that this driver is producing\r
-  @DriverConfiguration         A Driver Configuration Protocol instance that this driver is producing\r
-  @DriverDiagnostics           A Driver Diagnostics Protocol instance that this driver is producing\r
+  @param  ComponentName        A Component Name Protocol instance that this driver is producing.\r
+  @param  DriverConfiguration  A Driver Configuration Protocol instance that this driver is producing.\r
+  @param  DriverDiagnostics    A Driver Diagnostics Protocol instance that this driver is producing.\r
 \r
-  @retval EFI_SUCCESS          DriverBinding is installed onto DriverBindingHandle\r
-  @retval Other                Status from gBS->InstallProtocolInterface()\r
+  @retval EFI_SUCCESS           The protocol installation successfully completed.\r
+  @retval EFI_OUT_OF_RESOURCES  There was not enough memory in pool to install all the protocols.\r
 \r
 **/\r
 EFI_STATUS\r
 EFIAPI\r
 EfiLibInstallAllDriverProtocols (\r
-  IN const EFI_HANDLE                         ImageHandle,\r
-  IN const EFI_SYSTEM_TABLE                   *SystemTable,\r
+  IN CONST EFI_HANDLE                         ImageHandle,\r
+  IN CONST EFI_SYSTEM_TABLE                   *SystemTable,\r
   IN EFI_DRIVER_BINDING_PROTOCOL              *DriverBinding,\r
   IN EFI_HANDLE                               DriverBindingHandle,\r
-  IN const EFI_COMPONENT_NAME_PROTOCOL        *ComponentName,       OPTIONAL\r
-  IN const EFI_DRIVER_CONFIGURATION_PROTOCOL  *DriverConfiguration, OPTIONAL\r
-  IN const EFI_DRIVER_DIAGNOSTICS_PROTOCOL    *DriverDiagnostics    OPTIONAL\r
+  IN CONST EFI_COMPONENT_NAME_PROTOCOL        *ComponentName,       OPTIONAL\r
+  IN CONST EFI_DRIVER_CONFIGURATION_PROTOCOL  *DriverConfiguration, OPTIONAL\r
+  IN CONST EFI_DRIVER_DIAGNOSTICS_PROTOCOL    *DriverDiagnostics    OPTIONAL\r
   )\r
 {\r
   EFI_STATUS  Status;\r
 \r
-  ASSERT (NULL != DriverBinding);\r
+  ASSERT (DriverBinding != NULL);\r
 \r
+  //\r
+  // Update the ImageHandle and DriverBindingHandle fields of the Driver Binding Protocol\r
+  //\r
+  DriverBinding->ImageHandle         = ImageHandle;\r
+  DriverBinding->DriverBindingHandle = DriverBindingHandle;\r
+  \r
   if (DriverDiagnostics == NULL || FeaturePcdGet(PcdDriverDiagnosticsDisable)) {\r
     if (DriverConfiguration == NULL) {\r
       if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
         Status = gBS->InstallMultipleProtocolInterfaces (\r
-                        &DriverBindingHandle,\r
+                        &DriverBinding->DriverBindingHandle,\r
                         &gEfiDriverBindingProtocolGuid, DriverBinding,\r
                         NULL\r
                         );\r
       } else {\r
         Status = gBS->InstallMultipleProtocolInterfaces (\r
-                        &DriverBindingHandle,\r
+                        &DriverBinding->DriverBindingHandle,\r
                         &gEfiDriverBindingProtocolGuid, DriverBinding,\r
                         &gEfiComponentNameProtocolGuid, ComponentName,\r
                         NULL\r
@@ -122,14 +138,14 @@ EfiLibInstallAllDriverProtocols (
     } else {\r
       if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
         Status = gBS->InstallMultipleProtocolInterfaces (\r
-                        &DriverBindingHandle,\r
+                        &DriverBinding->DriverBindingHandle,\r
                         &gEfiDriverBindingProtocolGuid,       DriverBinding,\r
                         &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
                         NULL\r
                         );\r
       } else {\r
         Status = gBS->InstallMultipleProtocolInterfaces (\r
-                        &DriverBindingHandle,\r
+                        &DriverBinding->DriverBindingHandle,\r
                         &gEfiDriverBindingProtocolGuid,       DriverBinding,\r
                         &gEfiComponentNameProtocolGuid,       ComponentName,\r
                         &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
@@ -141,14 +157,14 @@ EfiLibInstallAllDriverProtocols (
     if (DriverConfiguration == NULL) {\r
       if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
         Status = gBS->InstallMultipleProtocolInterfaces (\r
-                        &DriverBindingHandle,\r
+                        &DriverBinding->DriverBindingHandle,\r
                         &gEfiDriverBindingProtocolGuid,     DriverBinding,\r
                         &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
                         NULL\r
                         );\r
       } else {\r
         Status = gBS->InstallMultipleProtocolInterfaces (\r
-                        &DriverBindingHandle,\r
+                        &DriverBinding->DriverBindingHandle,\r
                         &gEfiDriverBindingProtocolGuid,     DriverBinding,\r
                         &gEfiComponentNameProtocolGuid,     ComponentName,\r
                         &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
@@ -158,7 +174,7 @@ EfiLibInstallAllDriverProtocols (
     } else {\r
       if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
        Status = gBS->InstallMultipleProtocolInterfaces (\r
-                        &DriverBindingHandle,\r
+                        &DriverBinding->DriverBindingHandle,\r
                         &gEfiDriverBindingProtocolGuid,       DriverBinding,\r
                         &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
                         &gEfiDriverDiagnosticsProtocolGuid,   DriverDiagnostics,\r
@@ -166,7 +182,7 @@ EfiLibInstallAllDriverProtocols (
                         );\r
       } else {\r
         Status = gBS->InstallMultipleProtocolInterfaces (\r
-                        &DriverBindingHandle,\r
+                        &DriverBinding->DriverBindingHandle,\r
                         &gEfiDriverBindingProtocolGuid,       DriverBinding,\r
                         &gEfiComponentNameProtocolGuid,       ComponentName,\r
                         &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
@@ -182,382 +198,849 @@ EfiLibInstallAllDriverProtocols (
   //\r
   ASSERT_EFI_ERROR (Status);\r
 \r
+  return Status;\r
+}\r
+\r
+\r
+\r
+/**\r
+  Installs Driver Binding Protocol with optional Component Name and Component Name 2 Protocols.\r
+\r
+  Initializes a driver by installing the Driver Binding Protocol together with the\r
+  optional Component Name and optional Component Name 2 protocols onto the driver's\r
+  DriverBindingHandle.  If DriverBindingHandle is NULL, then the protocols are installed\r
+  onto a newly created handle.  DriverBindingHandle is typically the same as the driver's\r
+  ImageHandle, but it can be different if the driver produces multiple Driver Binding Protocols. \r
+  If DriverBinding is NULL, then ASSERT(). \r
+  If the installation fails, then ASSERT().\r
+\r
+  @param  ImageHandle          The image handle of the driver.\r
+  @param  SystemTable          The EFI System Table that was passed to the driver's entry point.\r
+  @param  DriverBinding        A Driver Binding Protocol instance that this driver is producing.\r
+  @param  DriverBindingHandle  The handle that DriverBinding is to be installed onto.  If this\r
+                               parameter is NULL, then a new handle is created.\r
+  @param  ComponentName        A Component Name Protocol instance that this driver is producing.\r
+  @param  ComponentName2       A Component Name 2 Protocol instance that this driver is producing.\r
+\r
+  @retval EFI_SUCCESS           The protocol installation successfully completed.\r
+  @retval EFI_OUT_OF_RESOURCES  There was not enough memory in pool to install all the protocols.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+EfiLibInstallDriverBindingComponentName2 (\r
+  IN CONST EFI_HANDLE                         ImageHandle,\r
+  IN CONST EFI_SYSTEM_TABLE                   *SystemTable,\r
+  IN EFI_DRIVER_BINDING_PROTOCOL              *DriverBinding,\r
+  IN EFI_HANDLE                               DriverBindingHandle,\r
+  IN CONST EFI_COMPONENT_NAME_PROTOCOL        *ComponentName,       OPTIONAL\r
+  IN CONST EFI_COMPONENT_NAME2_PROTOCOL       *ComponentName2       OPTIONAL\r
+  )\r
+{\r
+  EFI_STATUS  Status;\r
+\r
+  ASSERT (DriverBinding != NULL);\r
+\r
   //\r
   // Update the ImageHandle and DriverBindingHandle fields of the Driver Binding Protocol\r
   //\r
   DriverBinding->ImageHandle         = ImageHandle;\r
   DriverBinding->DriverBindingHandle = DriverBindingHandle;\r
 \r
+  if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+    if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+      Status = gBS->InstallMultipleProtocolInterfaces (\r
+                      &DriverBinding->DriverBindingHandle,\r
+                      &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                      NULL\r
+                      );\r
+      } else {\r
+      Status = gBS->InstallMultipleProtocolInterfaces (\r
+                      &DriverBinding->DriverBindingHandle,\r
+                      &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                      &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+                      NULL\r
+                      );\r
+     }\r
+  } else {\r
+     if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+       Status = gBS->InstallMultipleProtocolInterfaces (\r
+                       &DriverBinding->DriverBindingHandle,\r
+                       &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                       &gEfiComponentNameProtocolGuid, ComponentName,\r
+                       NULL\r
+                       );\r
+     } else {\r
+       Status = gBS->InstallMultipleProtocolInterfaces (\r
+                       &DriverBinding->DriverBindingHandle,\r
+                       &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                       &gEfiComponentNameProtocolGuid, ComponentName,\r
+                       &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+                       NULL\r
+                       );\r
+    }\r
+  }\r
+\r
+  //\r
+  // ASSERT if the call to InstallMultipleProtocolInterfaces() failed\r
+  //\r
+  ASSERT_EFI_ERROR (Status);\r
+\r
   return Status;\r
 }\r
 \r
 \r
+\r
 /**\r
-  Intialize a driver by installing the Driver Binding Protocol onto the\r
-  driver's DriverBindingHandle.  This is typically the same as the driver's\r
-  ImageHandle, but it can be different if the driver produces multiple\r
-  DriverBinding Protocols.  This function also initializes the EFI Driver\r
-  Library that initializes the global variables gST, gBS, gRT.\r
-\r
-  @ImageHandle                 The image handle of the driver\r
-  @SystemTable                 The EFI System Table that was passed to the driver's entry point\r
-  @DriverBinding               A Driver Binding Protocol instance that this driver is producing\r
-  @DriverBindingHandle         The handle that DriverBinding is to be installe onto.  If this\r
-                               parameter is NULL, then a new handle is created.\r
-  @ComponentName               A Component Name Protocol instance that this driver is producing\r
-  @DriverConfiguration         A Driver Configuration Protocol instance that this driver is producing\r
-  @DriverDiagnostics           A Driver Diagnostics Protocol instance that this driver is producing\r
+  Installs Driver Binding Protocol with optional Component Name, Component Name 2, Driver\r
+  Configuration, Driver Configuration 2, Driver Diagnostics, and Driver Diagnostics 2 Protocols.\r
+\r
+  Initializes a driver by installing the Driver Binding Protocol together with the optional\r
+  Component Name, optional Component Name 2, optional Driver Configuration, optional Driver Configuration 2,\r
+  optional Driver Diagnostic, and optional Driver Diagnostic 2 Protocols onto the driver's DriverBindingHandle.\r
+  DriverBindingHandle is typically the same as the driver's ImageHandle, but it can be different if the driver\r
+  produces multiple Driver Binding Protocols. \r
+  If DriverBinding is NULL, then ASSERT(). \r
+  If the installation fails, then ASSERT().\r
 \r
-  @retval EFI_SUCCESS          DriverBinding is installed onto DriverBindingHandle\r
-  @retval Other                Status from gBS->InstallProtocolInterface()\r
+\r
+  @param  ImageHandle           The image handle of the driver.\r
+  @param  SystemTable           The EFI System Table that was passed to the driver's entry point.\r
+  @param  DriverBinding         A Driver Binding Protocol instance that this driver is producing.\r
+  @param  DriverBindingHandle   The handle that DriverBinding is to be installed onto.  If this\r
+                                parameter is NULL, then a new handle is created.\r
+  @param  ComponentName         A Component Name Protocol instance that this driver is producing.\r
+  @param  ComponentName2        A Component Name 2 Protocol instance that this driver is producing.\r
+  @param  DriverConfiguration   A Driver Configuration Protocol instance that this driver is producing.\r
+  @param  DriverConfiguration2  A Driver Configuration Protocol 2 instance that this driver is producing.\r
+  @param  DriverDiagnostics     A Driver Diagnostics Protocol instance that this driver is producing.\r
+  @param  DriverDiagnostics2    A Driver Diagnostics Protocol 2 instance that this driver is producing.\r
+\r
+  @retval EFI_SUCCESS           The protocol installation successfully completed.\r
+  @retval EFI_OUT_OF_RESOURCES  There was not enough memory in pool to install all the protocols.\r
 \r
 **/\r
 EFI_STATUS\r
 EFIAPI\r
 EfiLibInstallAllDriverProtocols2 (\r
-  IN const EFI_HANDLE                         ImageHandle,\r
-  IN const EFI_SYSTEM_TABLE                   *SystemTable,\r
+  IN CONST EFI_HANDLE                         ImageHandle,\r
+  IN CONST EFI_SYSTEM_TABLE                   *SystemTable,\r
   IN EFI_DRIVER_BINDING_PROTOCOL              *DriverBinding,\r
   IN EFI_HANDLE                               DriverBindingHandle,\r
-  IN const EFI_COMPONENT_NAME_PROTOCOL        *ComponentName,       OPTIONAL\r
-  IN const EFI_COMPONENT_NAME2_PROTOCOL       *ComponentName2,      OPTIONAL\r
-  IN const EFI_DRIVER_CONFIGURATION_PROTOCOL  *DriverConfiguration, OPTIONAL\r
-  IN const EFI_DRIVER_DIAGNOSTICS_PROTOCOL    *DriverDiagnostics,   OPTIONAL\r
-  IN const EFI_DRIVER_DIAGNOSTICS2_PROTOCOL   *DriverDiagnostics2   OPTIONAL\r
+  IN CONST EFI_COMPONENT_NAME_PROTOCOL        *ComponentName,        OPTIONAL\r
+  IN CONST EFI_COMPONENT_NAME2_PROTOCOL       *ComponentName2,       OPTIONAL\r
+  IN CONST EFI_DRIVER_CONFIGURATION_PROTOCOL  *DriverConfiguration,  OPTIONAL\r
+  IN CONST EFI_DRIVER_CONFIGURATION2_PROTOCOL *DriverConfiguration2, OPTIONAL\r
+  IN CONST EFI_DRIVER_DIAGNOSTICS_PROTOCOL    *DriverDiagnostics,    OPTIONAL\r
+  IN CONST EFI_DRIVER_DIAGNOSTICS2_PROTOCOL   *DriverDiagnostics2    OPTIONAL\r
   )\r
 {\r
   EFI_STATUS  Status;\r
 \r
-  ASSERT (NULL != DriverBinding);\r
-\r
-  if (DriverConfiguration == NULL) {\r
-    if (DriverDiagnostics == NULL || FeaturePcdGet(PcdDriverDiagnosticsDisable)) {\r
-      if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {\r
-        if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
-          if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
-            Status = gBS->InstallMultipleProtocolInterfaces (\r
-                            &DriverBindingHandle,\r
-                            &gEfiDriverBindingProtocolGuid, DriverBinding,\r
-                            NULL\r
-                            );\r
+  ASSERT (DriverBinding != NULL); \r
+\r
+  //\r
+  // Update the ImageHandle and DriverBindingHandle fields of the Driver Binding Protocol\r
+  //\r
+  DriverBinding->ImageHandle         = ImageHandle;\r
+  DriverBinding->DriverBindingHandle = DriverBindingHandle;\r
+  \r
+  if (DriverConfiguration2 == NULL) {\r
+    if (DriverConfiguration == NULL) {\r
+      if (DriverDiagnostics == NULL || FeaturePcdGet(PcdDriverDiagnosticsDisable)) {\r
+        if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {\r
+          if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+            if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              NULL\r
+                              );\r
+            } else {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+                              NULL\r
+                              );\r
+            }\r
           } else {\r
-            Status = gBS->InstallMultipleProtocolInterfaces (\r
-                            &DriverBindingHandle,\r
-                            &gEfiDriverBindingProtocolGuid, DriverBinding,\r
-                            &gEfiComponentName2ProtocolGuid, ComponentName2,\r
-                            NULL\r
-                            );\r
+            if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentNameProtocolGuid, ComponentName,\r
+                              NULL\r
+                              );\r
+            } else {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentNameProtocolGuid, ComponentName,\r
+                              &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+                              NULL\r
+                              );\r
+            }\r
           }\r
         } else {\r
-          if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
-            Status = gBS->InstallMultipleProtocolInterfaces (\r
-                            &DriverBindingHandle,\r
-                            &gEfiDriverBindingProtocolGuid, DriverBinding,\r
-                            &gEfiComponentNameProtocolGuid, ComponentName,\r
-                            NULL\r
-                            );\r
+          if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+            if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+                              NULL\r
+                              );\r
+            } else {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+                              &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+                              NULL\r
+                              );\r
+            }\r
           } else {\r
-            Status = gBS->InstallMultipleProtocolInterfaces (\r
-                            &DriverBindingHandle,\r
-                            &gEfiDriverBindingProtocolGuid, DriverBinding,\r
-                            &gEfiComponentNameProtocolGuid, ComponentName,\r
-                            &gEfiComponentName2ProtocolGuid, ComponentName2,\r
-                            NULL\r
-                            );\r
+            if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentNameProtocolGuid, ComponentName,\r
+                              &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+                              NULL\r
+                              );\r
+            } else {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentNameProtocolGuid, ComponentName,\r
+                              &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+                              &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+                              NULL\r
+                              );\r
+            }\r
           }\r
         }\r
       } else {\r
-        if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
-          if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
-            Status = gBS->InstallMultipleProtocolInterfaces (\r
-                            &DriverBindingHandle,\r
-                            &gEfiDriverBindingProtocolGuid, DriverBinding,\r
-                            &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
-                            NULL\r
-                            );\r
+        if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {\r
+          if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+            if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+                              NULL\r
+                              );\r
+            } else {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+                              &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+                              NULL\r
+                              );\r
+            }\r
           } else {\r
-            Status = gBS->InstallMultipleProtocolInterfaces (\r
-                            &DriverBindingHandle,\r
-                            &gEfiDriverBindingProtocolGuid, DriverBinding,\r
-                            &gEfiComponentName2ProtocolGuid, ComponentName2,\r
-                            &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
-                            NULL\r
-                            );\r
+            if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentNameProtocolGuid, ComponentName,\r
+                              &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+                              NULL\r
+                              );\r
+            } else {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentNameProtocolGuid, ComponentName,\r
+                              &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+                              &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+                              NULL\r
+                              );\r
+            }\r
           }\r
         } else {\r
-          if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
-            Status = gBS->InstallMultipleProtocolInterfaces (\r
-                            &DriverBindingHandle,\r
-                            &gEfiDriverBindingProtocolGuid, DriverBinding,\r
-                            &gEfiComponentNameProtocolGuid, ComponentName,\r
-                            &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
-                            NULL\r
-                            );\r
+          if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+            if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+                              &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+                              NULL\r
+                              );\r
+            } else {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+                              &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+                              &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+                              NULL\r
+                              );\r
+            }\r
           } else {\r
-            Status = gBS->InstallMultipleProtocolInterfaces (\r
-                            &DriverBindingHandle,\r
-                            &gEfiDriverBindingProtocolGuid, DriverBinding,\r
-                            &gEfiComponentNameProtocolGuid, ComponentName,\r
-                            &gEfiComponentName2ProtocolGuid, ComponentName2,\r
-                            &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
-                            NULL\r
-                            );\r
+            if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentNameProtocolGuid, ComponentName,\r
+                              &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+                              &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+                              NULL\r
+                              );\r
+            } else {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentNameProtocolGuid, ComponentName,\r
+                              &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+                              &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+                              &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+                              NULL\r
+                              );\r
+            }\r
           }\r
         }\r
       }\r
     } else {\r
-      if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {\r
-        if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
-          if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
-            Status = gBS->InstallMultipleProtocolInterfaces (\r
-                            &DriverBindingHandle,\r
-                            &gEfiDriverBindingProtocolGuid, DriverBinding,\r
-                            &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
-                            NULL\r
-                            );\r
+      if (DriverDiagnostics == NULL || FeaturePcdGet(PcdDriverDiagnosticsDisable)) {\r
+        if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {\r
+          if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+            if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+                              NULL\r
+                              );\r
+            } else {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+                              &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+                              NULL\r
+                              );\r
+            }\r
           } else {\r
-            Status = gBS->InstallMultipleProtocolInterfaces (\r
-                            &DriverBindingHandle,\r
-                            &gEfiDriverBindingProtocolGuid, DriverBinding,\r
-                            &gEfiComponentName2ProtocolGuid, ComponentName2,\r
-                            &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
-                            NULL\r
-                            );\r
+            if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentNameProtocolGuid, ComponentName,\r
+                              &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+                              NULL\r
+                              );\r
+            } else {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentNameProtocolGuid, ComponentName,\r
+                              &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+                              &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+                              NULL\r
+                              );\r
+            }\r
           }\r
         } else {\r
-          if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
-            Status = gBS->InstallMultipleProtocolInterfaces (\r
-                            &DriverBindingHandle,\r
-                            &gEfiDriverBindingProtocolGuid, DriverBinding,\r
-                            &gEfiComponentNameProtocolGuid, ComponentName,\r
-                            &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
-                            NULL\r
-                            );\r
+          if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+            if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+                              &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+                              NULL\r
+                              );\r
+            } else {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+                              &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+                              &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+                              NULL\r
+                              );\r
+            }\r
           } else {\r
-            Status = gBS->InstallMultipleProtocolInterfaces (\r
-                            &DriverBindingHandle,\r
-                            &gEfiDriverBindingProtocolGuid, DriverBinding,\r
-                            &gEfiComponentNameProtocolGuid, ComponentName,\r
-                            &gEfiComponentName2ProtocolGuid, ComponentName2,\r
-                            &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
-                            NULL\r
-                            );\r
+            if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentNameProtocolGuid, ComponentName,\r
+                              &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+                              &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+                              NULL\r
+                              );\r
+            } else {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentNameProtocolGuid, ComponentName,\r
+                              &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+                              &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+                              &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+                              NULL\r
+                              );\r
+            }\r
           }\r
         }\r
       } else {\r
-        if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
-          if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
-            Status = gBS->InstallMultipleProtocolInterfaces (\r
-                            &DriverBindingHandle,\r
-                            &gEfiDriverBindingProtocolGuid, DriverBinding,\r
-                            &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
-                            &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
-                            NULL\r
-                            );\r
+        if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {\r
+          if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+            if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+                              &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+                              NULL\r
+                              );\r
+            } else {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+                              &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+                              &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+                              NULL\r
+                              );\r
+            }\r
           } else {\r
-            Status = gBS->InstallMultipleProtocolInterfaces (\r
-                            &DriverBindingHandle,\r
-                            &gEfiDriverBindingProtocolGuid, DriverBinding,\r
-                            &gEfiComponentName2ProtocolGuid, ComponentName2,\r
-                            &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
-                            &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
-                            NULL\r
-                            );\r
+            if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentNameProtocolGuid, ComponentName,\r
+                              &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+                              &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+                              NULL\r
+                              );\r
+            } else {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentNameProtocolGuid, ComponentName,\r
+                              &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+                              &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+                              &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+                              NULL\r
+                              );\r
+            }\r
           }\r
         } else {\r
-          if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
-            Status = gBS->InstallMultipleProtocolInterfaces (\r
-                            &DriverBindingHandle,\r
-                            &gEfiDriverBindingProtocolGuid, DriverBinding,\r
-                            &gEfiComponentNameProtocolGuid, ComponentName,\r
-                            &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
-                            &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
-                            NULL\r
-                            );\r
+          if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+            if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+                              &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+                              &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+                              NULL\r
+                              );\r
+            } else {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+                              &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+                              &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+                              &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+                              NULL\r
+                              );\r
+            }\r
           } else {\r
-            Status = gBS->InstallMultipleProtocolInterfaces (\r
-                            &DriverBindingHandle,\r
-                            &gEfiDriverBindingProtocolGuid, DriverBinding,\r
-                            &gEfiComponentNameProtocolGuid, ComponentName,\r
-                            &gEfiComponentName2ProtocolGuid, ComponentName2,\r
-                            &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
-                            &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
-                            NULL\r
-                            );\r
+            if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentNameProtocolGuid, ComponentName,\r
+                              &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+                              &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+                              &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+                              NULL\r
+                              );\r
+            } else {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentNameProtocolGuid, ComponentName,\r
+                              &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+                              &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+                              &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+                              &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+                              NULL\r
+                              );\r
+            }\r
           }\r
         }\r
       }\r
     }\r
   } else {\r
-    if (DriverDiagnostics == NULL || FeaturePcdGet(PcdDriverDiagnosticsDisable)) {\r
-      if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {\r
-        if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
-          if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
-            Status = gBS->InstallMultipleProtocolInterfaces (\r
-                            &DriverBindingHandle,\r
-                            &gEfiDriverBindingProtocolGuid, DriverBinding,\r
-                            &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
-                            NULL\r
-                            );\r
+    if (DriverConfiguration == NULL) {\r
+      if (DriverDiagnostics == NULL || FeaturePcdGet(PcdDriverDiagnosticsDisable)) {\r
+        if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {\r
+          if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+            if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+                              NULL\r
+                              );\r
+            } else {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+                              &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+                              NULL\r
+                              );\r
+            }\r
           } else {\r
-            Status = gBS->InstallMultipleProtocolInterfaces (\r
-                            &DriverBindingHandle,\r
-                            &gEfiDriverBindingProtocolGuid, DriverBinding,\r
-                            &gEfiComponentName2ProtocolGuid, ComponentName2,\r
-                            &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
-                            NULL\r
-                            );\r
+            if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentNameProtocolGuid, ComponentName,\r
+                              &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+                              NULL\r
+                              );\r
+            } else {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentNameProtocolGuid, ComponentName,\r
+                              &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+                              &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+                              NULL\r
+                              );\r
+            }\r
           }\r
         } else {\r
-          if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
-            Status = gBS->InstallMultipleProtocolInterfaces (\r
-                            &DriverBindingHandle,\r
-                            &gEfiDriverBindingProtocolGuid, DriverBinding,\r
-                            &gEfiComponentNameProtocolGuid, ComponentName,\r
-                            &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
-                            NULL\r
-                            );\r
+          if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+            if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+                              &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+                              NULL\r
+                              );\r
+            } else {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+                              &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+                              &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+                              NULL\r
+                              );\r
+            }\r
           } else {\r
-            Status = gBS->InstallMultipleProtocolInterfaces (\r
-                            &DriverBindingHandle,\r
-                            &gEfiDriverBindingProtocolGuid, DriverBinding,\r
-                            &gEfiComponentNameProtocolGuid, ComponentName,\r
-                            &gEfiComponentName2ProtocolGuid, ComponentName2,\r
-                            &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
-                            NULL\r
-                            );\r
+            if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentNameProtocolGuid, ComponentName,\r
+                              &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+                              &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+                              NULL\r
+                              );\r
+            } else {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentNameProtocolGuid, ComponentName,\r
+                              &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+                              &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+                              &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+                              NULL\r
+                              );\r
+            }\r
           }\r
         }\r
       } else {\r
-        if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
-          if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
-            Status = gBS->InstallMultipleProtocolInterfaces (\r
-                            &DriverBindingHandle,\r
-                            &gEfiDriverBindingProtocolGuid, DriverBinding,\r
-                            &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
-                            &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
-                            NULL\r
-                            );\r
+        if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {\r
+          if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+            if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+                              &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+                              NULL\r
+                              );\r
+            } else {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+                              &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+                              &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+                              NULL\r
+                              );\r
+            }\r
           } else {\r
-            Status = gBS->InstallMultipleProtocolInterfaces (\r
-                            &DriverBindingHandle,\r
-                            &gEfiDriverBindingProtocolGuid, DriverBinding,\r
-                            &gEfiComponentName2ProtocolGuid, ComponentName2,\r
-                            &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
-                            &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
-                            NULL\r
-                            );\r
+            if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentNameProtocolGuid, ComponentName,\r
+                              &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+                              &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+                              NULL\r
+                              );\r
+            } else {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentNameProtocolGuid, ComponentName,\r
+                              &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+                              &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+                              &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+                              NULL\r
+                              );\r
+            }\r
           }\r
         } else {\r
-          if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
-            Status = gBS->InstallMultipleProtocolInterfaces (\r
-                            &DriverBindingHandle,\r
-                            &gEfiDriverBindingProtocolGuid, DriverBinding,\r
-                            &gEfiComponentNameProtocolGuid, ComponentName,\r
-                            &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
-                            &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
-                            NULL\r
-                            );\r
+          if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+            if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+                              &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+                              &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+                              NULL\r
+                              );\r
+            } else {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+                              &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+                              &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+                              &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+                              NULL\r
+                              );\r
+            }\r
           } else {\r
-            Status = gBS->InstallMultipleProtocolInterfaces (\r
-                            &DriverBindingHandle,\r
-                            &gEfiDriverBindingProtocolGuid, DriverBinding,\r
-                            &gEfiComponentNameProtocolGuid, ComponentName,\r
-                            &gEfiComponentName2ProtocolGuid, ComponentName2,\r
-                            &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
-                            &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
-                            NULL\r
-                            );\r
+            if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentNameProtocolGuid, ComponentName,\r
+                              &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+                              &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+                              &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+                              NULL\r
+                              );\r
+            } else {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentNameProtocolGuid, ComponentName,\r
+                              &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+                              &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+                              &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+                              &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+                              NULL\r
+                              );\r
+            }\r
           }\r
         }\r
       }\r
     } else {\r
-      if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {\r
-        if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
-          if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
-            Status = gBS->InstallMultipleProtocolInterfaces (\r
-                            &DriverBindingHandle,\r
-                            &gEfiDriverBindingProtocolGuid, DriverBinding,\r
-                            &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
-                            &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
-                            NULL\r
-                            );\r
+      if (DriverDiagnostics == NULL || FeaturePcdGet(PcdDriverDiagnosticsDisable)) {\r
+        if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {\r
+          if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+            if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+                              &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+                              NULL\r
+                              );\r
+            } else {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+                              &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+                              &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+                              NULL\r
+                              );\r
+            }\r
           } else {\r
-            Status = gBS->InstallMultipleProtocolInterfaces (\r
-                            &DriverBindingHandle,\r
-                            &gEfiDriverBindingProtocolGuid, DriverBinding,\r
-                            &gEfiComponentName2ProtocolGuid, ComponentName2,\r
-                            &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
-                            &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
-                            NULL\r
-                            );\r
+            if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentNameProtocolGuid, ComponentName,\r
+                              &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+                              &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+                              NULL\r
+                              );\r
+            } else {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentNameProtocolGuid, ComponentName,\r
+                              &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+                              &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+                              &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+                              NULL\r
+                              );\r
+            }\r
           }\r
         } else {\r
-          if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
-            Status = gBS->InstallMultipleProtocolInterfaces (\r
-                            &DriverBindingHandle,\r
-                            &gEfiDriverBindingProtocolGuid, DriverBinding,\r
-                            &gEfiComponentNameProtocolGuid, ComponentName,\r
-                            &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
-                            &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
-                            NULL\r
-                            );\r
+          if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+            if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+                              &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+                              &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+                              NULL\r
+                              );\r
+            } else {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+                              &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+                              &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+                              &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+                              NULL\r
+                              );\r
+            }\r
           } else {\r
-            Status = gBS->InstallMultipleProtocolInterfaces (\r
-                            &DriverBindingHandle,\r
-                            &gEfiDriverBindingProtocolGuid, DriverBinding,\r
-                            &gEfiComponentNameProtocolGuid, ComponentName,\r
-                            &gEfiComponentName2ProtocolGuid, ComponentName2,\r
-                            &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
-                            &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
-                            NULL\r
-                            );\r
+            if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentNameProtocolGuid, ComponentName,\r
+                              &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+                              &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+                              &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+                              NULL\r
+                              );\r
+            } else {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentNameProtocolGuid, ComponentName,\r
+                              &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+                              &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+                              &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+                              &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+                              NULL\r
+                              );\r
+            }\r
           }\r
         }\r
       } else {\r
-        if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
-          if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
-            Status = gBS->InstallMultipleProtocolInterfaces (\r
-                            &DriverBindingHandle,\r
-                            &gEfiDriverBindingProtocolGuid, DriverBinding,\r
-                            &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
-                            &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
-                            &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
-                            NULL\r
-                            );\r
+        if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {\r
+          if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+            if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+                              &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+                              &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+                              NULL\r
+                              );\r
+            } else {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+                              &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+                              &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+                              &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+                              NULL\r
+                              );\r
+            }\r
           } else {\r
-            Status = gBS->InstallMultipleProtocolInterfaces (\r
-                            &DriverBindingHandle,\r
-                            &gEfiDriverBindingProtocolGuid, DriverBinding,\r
-                            &gEfiComponentName2ProtocolGuid, ComponentName2,\r
-                            &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
-                            &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
-                            &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
-                            NULL\r
-                            );\r
+            if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentNameProtocolGuid, ComponentName,\r
+                              &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+                              &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+                              &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+                              NULL\r
+                              );\r
+            } else {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentNameProtocolGuid, ComponentName,\r
+                              &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+                              &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+                              &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+                              &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+                              NULL\r
+                              );\r
+            }\r
           }\r
         } else {\r
-          if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
-            Status = gBS->InstallMultipleProtocolInterfaces (\r
-                            &DriverBindingHandle,\r
-                            &gEfiDriverBindingProtocolGuid, DriverBinding,\r
-                            &gEfiComponentNameProtocolGuid, ComponentName,\r
-                            &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
-                            &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
-                            &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
-                            NULL\r
-                            );\r
+          if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
+            if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+                              &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+                              &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+                              &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+                              NULL\r
+                              );\r
+            } else {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+                              &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+                              &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+                              &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+                              &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+                              NULL\r
+                              );\r
+            }\r
           } else {\r
-            Status = gBS->InstallMultipleProtocolInterfaces (\r
-                            &DriverBindingHandle,\r
-                            &gEfiDriverBindingProtocolGuid, DriverBinding,\r
-                            &gEfiComponentNameProtocolGuid, ComponentName,\r
-                            &gEfiComponentName2ProtocolGuid, ComponentName2,\r
-                            &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
-                            &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
-                            &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
-                            NULL\r
-                            );\r
+            if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentNameProtocolGuid, ComponentName,\r
+                              &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+                              &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+                              &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+                              &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+                              NULL\r
+                              );\r
+            } else {\r
+              Status = gBS->InstallMultipleProtocolInterfaces (\r
+                              &DriverBinding->DriverBindingHandle,\r
+                              &gEfiDriverBindingProtocolGuid, DriverBinding,\r
+                              &gEfiComponentNameProtocolGuid, ComponentName,\r
+                              &gEfiComponentName2ProtocolGuid, ComponentName2,\r
+                              &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
+                              &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
+                              &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
+                              &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
+                              NULL\r
+                              );\r
+            }\r
           }\r
         }\r
       }\r
@@ -569,13 +1052,5 @@ EfiLibInstallAllDriverProtocols2 (
   //\r
   ASSERT_EFI_ERROR (Status);\r
 \r
-  //\r
-  // Update the ImageHandle and DriverBindingHandle fields of the Driver Binding Protocol\r
-  //\r
-  DriverBinding->ImageHandle         = ImageHandle;\r
-  DriverBinding->DriverBindingHandle = DriverBindingHandle;\r
-\r
   return Status;\r
 }\r
-\r
-\r