]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Library/UefiDriverModelLib/UefiDriverModelLib.c
Fill the ImageHandle and DriverBindingHandle field of Driver Binding Protocol before...
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Library / EdkIIGlueLib / Library / UefiDriverModelLib / UefiDriverModelLib.c
index c82736c74be3280182f874e7fbdef669a1b898ff..d5af3d69cc2435c430468290bb5b6d775a3d96f5 100644 (file)
@@ -1,6 +1,6 @@
 /*++\r
 \r
-Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2004 - 2013, Intel Corporation. All rights reserved.<BR>\r
 This program and the accompanying materials                          \r
 are 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
@@ -40,23 +40,26 @@ UefiDriverModelLibConstructor (
   )\r
 {\r
   EFI_STATUS                   Status = EFI_UNSUPPORTED;\r
-  EFI_HANDLE                   DriverBindingHandle;\r
   EFI_DRIVER_BINDING_PROTOCOL  *DriverBinding;\r
 \r
   //\r
+  // The Driver Binding Protocol must never be NULL\r
+  //\r
+  DriverBinding = (EFI_DRIVER_BINDING_PROTOCOL *) _gDriverModelProtocolList[0].DriverBinding;\r
+  ASSERT(DriverBinding != NULL);\r
+\r
+  //\r
+  // Update the ImageHandle and DriverBindingHandle fields of the Driver Binding Protocol\r
   // Install the first Driver Bindng Protocol onto ImageHandle\r
   //\r
-  DriverBindingHandle = ImageHandle;\r
+  DriverBinding->ImageHandle         = ImageHandle;\r
+  DriverBinding->DriverBindingHandle = ImageHandle;\r
 \r
   //\r
   // See if onle one Driver Binding Protocol is advertised by the driver\r
   // EdkIIGlueLib: _gDriverModelProtocolListEntries is always 1\r
   //\r
 \r
-  //\r
-  // The Driver Binding Protocol must never be NULL\r
-  //\r
-  ASSERT(_gDriverModelProtocolList[0].DriverBinding != NULL);\r
 \r
   //\r
   // Check for all 8 possible combinations of the ComponentName, DriverConfiguration, and DriverDiagnostics Protocol\r
@@ -68,14 +71,14 @@ UefiDriverModelLibConstructor (
       if (_gDriverModelProtocolList[0].DriverConfiguration == NULL) {\r
         if (_gDriverModelProtocolList[0].ComponentName == NULL) {\r
           Status = gBS->InstallMultipleProtocolInterfaces (\r
-                          &DriverBindingHandle,\r
-                          &gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
+                          &DriverBinding->DriverBindingHandle,\r
+                          &gEfiDriverBindingProtocolGuid, DriverBinding,\r
                           NULL\r
                           );\r
         } else {\r
           Status = gBS->InstallMultipleProtocolInterfaces (\r
-                          &DriverBindingHandle,\r
-                          &gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
+                          &DriverBinding->DriverBindingHandle,\r
+                          &gEfiDriverBindingProtocolGuid, DriverBinding,\r
                           &gEfiComponentNameProtocolGuid, (EFI_COMPONENT_NAME_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName,\r
                           NULL\r
                           );\r
@@ -83,15 +86,15 @@ UefiDriverModelLibConstructor (
       } else {\r
         if (_gDriverModelProtocolList[0].ComponentName == NULL) {\r
           Status = gBS->InstallMultipleProtocolInterfaces (\r
-                          &DriverBindingHandle,\r
-                          &gEfiDriverBindingProtocolGuid,       (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
+                          &DriverBinding->DriverBindingHandle,\r
+                          &gEfiDriverBindingProtocolGuid,       DriverBinding,\r
                           &gEfiDriverConfigurationProtocolGuid, (EFI_DRIVER_CONFIGURATION_PROTOCOL *)_gDriverModelProtocolList[0].DriverConfiguration,\r
                           NULL\r
                           );\r
         } else {\r
           Status = gBS->InstallMultipleProtocolInterfaces (\r
-                          &DriverBindingHandle,\r
-                          &gEfiDriverBindingProtocolGuid,       (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
+                          &DriverBinding->DriverBindingHandle,\r
+                          &gEfiDriverBindingProtocolGuid,       DriverBinding,\r
                           &gEfiComponentNameProtocolGuid,       (EFI_COMPONENT_NAME_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName,\r
                           &gEfiDriverConfigurationProtocolGuid, (EFI_DRIVER_CONFIGURATION_PROTOCOL *)_gDriverModelProtocolList[0].DriverConfiguration,\r
                           NULL\r
@@ -102,15 +105,15 @@ UefiDriverModelLibConstructor (
       if (_gDriverModelProtocolList[0].DriverConfiguration == NULL) {\r
         if (_gDriverModelProtocolList[0].ComponentName == NULL) {\r
           Status = gBS->InstallMultipleProtocolInterfaces (\r
-                          &DriverBindingHandle,\r
-                          &gEfiDriverBindingProtocolGuid,     (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
+                          &DriverBinding->DriverBindingHandle,\r
+                          &gEfiDriverBindingProtocolGuid,     DriverBinding,\r
                           &gEfiDriverDiagnosticsProtocolGuid, (EFI_DRIVER_DIAGNOSTICS_PROTOCOL *)_gDriverModelProtocolList[0].DriverDiagnostics,\r
                           NULL\r
                           );\r
         } else {\r
           Status = gBS->InstallMultipleProtocolInterfaces (\r
-                          &DriverBindingHandle,\r
-                          &gEfiDriverBindingProtocolGuid,     (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
+                          &DriverBinding->DriverBindingHandle,\r
+                          &gEfiDriverBindingProtocolGuid,     DriverBinding,\r
                           &gEfiComponentNameProtocolGuid,     (EFI_COMPONENT_NAME_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName,\r
                           &gEfiDriverDiagnosticsProtocolGuid, (EFI_DRIVER_DIAGNOSTICS_PROTOCOL *)_gDriverModelProtocolList[0].DriverDiagnostics,\r
                           NULL\r
@@ -119,16 +122,16 @@ UefiDriverModelLibConstructor (
       } else {\r
         if (_gDriverModelProtocolList[0].ComponentName == NULL) {\r
           Status = gBS->InstallMultipleProtocolInterfaces (\r
-                          &DriverBindingHandle,\r
-                          &gEfiDriverBindingProtocolGuid,       (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
+                          &DriverBinding->DriverBindingHandle,\r
+                          &gEfiDriverBindingProtocolGuid,       DriverBinding,\r
                           &gEfiDriverConfigurationProtocolGuid, (EFI_DRIVER_CONFIGURATION_PROTOCOL *)_gDriverModelProtocolList[0].DriverConfiguration,\r
                           &gEfiDriverDiagnosticsProtocolGuid,   (EFI_DRIVER_DIAGNOSTICS_PROTOCOL *)_gDriverModelProtocolList[0].DriverDiagnostics,\r
                           NULL\r
                           );\r
         } else {\r
           Status = gBS->InstallMultipleProtocolInterfaces (\r
-                          &DriverBindingHandle,\r
-                          &gEfiDriverBindingProtocolGuid,       (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
+                          &DriverBinding->DriverBindingHandle,\r
+                          &gEfiDriverBindingProtocolGuid,       DriverBinding,\r
                           &gEfiComponentNameProtocolGuid,       (EFI_COMPONENT_NAME_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName,\r
                           &gEfiDriverConfigurationProtocolGuid, (EFI_DRIVER_CONFIGURATION_PROTOCOL *)_gDriverModelProtocolList[0].DriverConfiguration,\r
                           &gEfiDriverDiagnosticsProtocolGuid,   (EFI_DRIVER_DIAGNOSTICS_PROTOCOL *)_gDriverModelProtocolList[0].DriverDiagnostics,\r
@@ -144,14 +147,14 @@ UefiDriverModelLibConstructor (
       if (_gDriverModelProtocolList[0].DriverConfiguration2== NULL) {\r
         if (_gDriverModelProtocolList[0].ComponentName2== NULL) {\r
           Status = gBS->InstallMultipleProtocolInterfaces (\r
-                          &DriverBindingHandle,\r
-                          &gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
+                          &DriverBinding->DriverBindingHandle,\r
+                          &gEfiDriverBindingProtocolGuid, DriverBinding,\r
                           NULL\r
                           );\r
         } else {\r
           Status = gBS->InstallMultipleProtocolInterfaces (\r
-                          &DriverBindingHandle,\r
-                          &gEfiDriverBindingProtocolGuid,  (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
+                          &DriverBinding->DriverBindingHandle,\r
+                          &gEfiDriverBindingProtocolGuid,  DriverBinding,\r
                           &gEfiComponentName2ProtocolGuid, (EFI_COMPONENT_NAME2_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName2,\r
                           NULL\r
                           );\r
@@ -159,15 +162,15 @@ UefiDriverModelLibConstructor (
       } else {\r
         if (_gDriverModelProtocolList[0].ComponentName2 == NULL) {\r
           Status = gBS->InstallMultipleProtocolInterfaces (\r
-                          &DriverBindingHandle,\r
-                          &gEfiDriverBindingProtocolGuid,        (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
+                          &DriverBinding->DriverBindingHandle,\r
+                          &gEfiDriverBindingProtocolGuid,        DriverBinding,\r
                           &gEfiDriverConfiguration2ProtocolGuid, (EFI_DRIVER_CONFIGURATION2_PROTOCOL *)_gDriverModelProtocolList[0].DriverConfiguration2,\r
                           NULL\r
                           );\r
         } else {\r
           Status = gBS->InstallMultipleProtocolInterfaces (\r
-                          &DriverBindingHandle,\r
-                          &gEfiDriverBindingProtocolGuid,        (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
+                          &DriverBinding->DriverBindingHandle,\r
+                          &gEfiDriverBindingProtocolGuid,        DriverBinding,\r
                           &gEfiComponentName2ProtocolGuid,       (EFI_COMPONENT_NAME2_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName2,\r
                           &gEfiDriverConfiguration2ProtocolGuid, (EFI_DRIVER_CONFIGURATION2_PROTOCOL *)_gDriverModelProtocolList[0].DriverConfiguration2,\r
                           NULL\r
@@ -178,15 +181,15 @@ UefiDriverModelLibConstructor (
       if (_gDriverModelProtocolList[0].DriverConfiguration2 == NULL) {\r
         if (_gDriverModelProtocolList[0].ComponentName2 == NULL) {\r
           Status = gBS->InstallMultipleProtocolInterfaces (\r
-                          &DriverBindingHandle,\r
-                          &gEfiDriverBindingProtocolGuid,      (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
+                          &DriverBinding->DriverBindingHandle,\r
+                          &gEfiDriverBindingProtocolGuid,      DriverBinding,\r
                           &gEfiDriverDiagnostics2ProtocolGuid, (EFI_DRIVER_DIAGNOSTICS2_PROTOCOL *)_gDriverModelProtocolList[0].DriverDiagnostics2,\r
                           NULL\r
                           );\r
         } else {\r
           Status = gBS->InstallMultipleProtocolInterfaces (\r
-                          &DriverBindingHandle,\r
-                          &gEfiDriverBindingProtocolGuid,      (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
+                          &DriverBinding->DriverBindingHandle,\r
+                          &gEfiDriverBindingProtocolGuid,      DriverBinding,\r
                           &gEfiComponentName2ProtocolGuid,     (EFI_COMPONENT_NAME2_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName2,\r
                           &gEfiDriverDiagnostics2ProtocolGuid, (EFI_DRIVER_DIAGNOSTICS2_PROTOCOL *)_gDriverModelProtocolList[0].DriverDiagnostics2,\r
                           NULL\r
@@ -195,16 +198,16 @@ UefiDriverModelLibConstructor (
       } else {\r
         if (_gDriverModelProtocolList[0].ComponentName2 == NULL) {\r
           Status = gBS->InstallMultipleProtocolInterfaces (\r
-                          &DriverBindingHandle,\r
-                          &gEfiDriverBindingProtocolGuid,        (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
+                          &DriverBinding->DriverBindingHandle,\r
+                          &gEfiDriverBindingProtocolGuid,        DriverBinding,\r
                           &gEfiDriverConfiguration2ProtocolGuid, (EFI_DRIVER_CONFIGURATION2_PROTOCOL *)_gDriverModelProtocolList[0].DriverConfiguration2,\r
                           &gEfiDriverDiagnostics2ProtocolGuid,   (EFI_DRIVER_DIAGNOSTICS2_PROTOCOL *)_gDriverModelProtocolList[0].DriverDiagnostics2,\r
                           NULL\r
                           );\r
         } else {\r
           Status = gBS->InstallMultipleProtocolInterfaces (\r
-                          &DriverBindingHandle,\r
-                          &gEfiDriverBindingProtocolGuid,        (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
+                          &DriverBinding->DriverBindingHandle,\r
+                          &gEfiDriverBindingProtocolGuid,        DriverBinding,\r
                           &gEfiComponentName2ProtocolGuid,       (EFI_COMPONENT_NAME2_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName2,\r
                           &gEfiDriverConfiguration2ProtocolGuid, (EFI_DRIVER_CONFIGURATION2_PROTOCOL *)_gDriverModelProtocolList[0].DriverConfiguration2,\r
                           &gEfiDriverDiagnostics2ProtocolGuid,   (EFI_DRIVER_DIAGNOSTICS2_PROTOCOL *)_gDriverModelProtocolList[0].DriverDiagnostics2,\r
@@ -219,16 +222,7 @@ UefiDriverModelLibConstructor (
   // ASSERT if the call to InstallMultipleProtocolInterfaces() failed\r
   //\r
   ASSERT_EFI_ERROR (Status);\r
-\r
-  //\r
-  // Update the ImageHandle and DriverBindingHandle fields of the Driver Binding Protocol\r
-  //\r
-  DriverBinding = (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding;\r
-  DriverBinding->ImageHandle         = ImageHandle;\r
-  DriverBinding->DriverBindingHandle = DriverBindingHandle;\r
-\r
-  \r
-  return EFI_SUCCESS;\r
+  return Status;\r
 }\r
 \r
 /**\r