]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Add loaded Image device paths for EFI Drivers loaded from PCI Option ROM.
authorgikidy <gikidy@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 3 Apr 2009 08:13:16 +0000 (08:13 +0000)
committergikidy <gikidy@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 3 Apr 2009 08:13:16 +0000 (08:13 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8022 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Core/Dxe/DxeMain.h
MdeModulePkg/Core/Dxe/DxeMain.inf
MdeModulePkg/Core/Dxe/Image/ImageFile.c

index 1680e7d83056083d63d4c6ea55817677cec1cc29..d499ab48500dfd04f1a81a21b1d9a295e1beb373 100644 (file)
@@ -25,6 +25,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #include <Protocol/DevicePath.h>\r
 #include <Protocol/Runtime.h>\r
 #include <Protocol/LoadFile.h>\r
+#include <Protocol/LoadFile2.h>\r
 #include <Protocol/DriverBinding.h>\r
 #include <Protocol/VariableWrite.h>\r
 #include <Protocol/PlatformDriverOverride.h>\r
index ead72162f89a49d168f4c78c765312043f801afa..9baef70b7e1e2c570f2b4ca5e372832253c78c4d 100644 (file)
   gEfiLoadPeImageProtocolGuid                   ## PRODUCES\r
   gEfiSimpleFileSystemProtocolGuid              ## CONSUMES\r
   gEfiLoadFileProtocolGuid                      ## CONSUMES\r
+  gEfiLoadFile2ProtocolGuid                     ## CONSUMES\r
   gEfiResetArchProtocolGuid                     ## CONSUMES\r
   gEfiRealTimeClockArchProtocolGuid             ## CONSUMES\r
   gEfiRuntimeArchProtocolGuid                   ## CONSUMES\r
index b132cf49d59f192e0d63ab416c01782d01bbd10f..9c6729a8fdc6071561a599ce7b0ee5ea4e97a9e6 100644 (file)
@@ -90,6 +90,7 @@ CoreOpenImageFile (
   EFI_FILE_HANDLE                   FileHandle;\r
   EFI_FILE_HANDLE                   LastHandle;\r
   EFI_LOAD_FILE_PROTOCOL            *LoadFile;\r
+  EFI_LOAD_FILE2_PROTOCOL           *LoadFile2;\r
   EFI_FIRMWARE_VOLUME2_PROTOCOL     *FwVol;\r
   EFI_SECTION_TYPE                  SectionType;\r
   UINT8                             *Pe32Buffer;\r
@@ -315,6 +316,52 @@ CoreOpenImageFile (
     }\r
   }\r
 \r
+  //\r
+  // Try LoadFile2 style\r
+  //\r
+  if (!BootPolicy) {\r
+    TempFilePath = *FilePath;\r
+    Status = CoreDevicePathToInterface (\r
+               &gEfiLoadFile2ProtocolGuid,\r
+               &TempFilePath,\r
+               (VOID*)&LoadFile2,\r
+               DeviceHandle\r
+               );\r
+    if (!EFI_ERROR (Status)) {\r
+      //\r
+      // Call LoadFile2 with the correct buffer size\r
+      //    \r
+      ASSERT (ImageFileHandle->SourceSize == 0);\r
+      ASSERT (ImageFileHandle->Source == NULL);\r
+      \r
+      Status = LoadFile2->LoadFile (\r
+                           LoadFile2,\r
+                           TempFilePath,\r
+                           BootPolicy,\r
+                           &ImageFileHandle->SourceSize,\r
+                           ImageFileHandle->Source\r
+                           );\r
+      if (Status == EFI_BUFFER_TOO_SMALL) {\r
+        ImageFileHandle->Source = AllocatePool (ImageFileHandle->SourceSize);\r
+        if (ImageFileHandle->Source == NULL) {\r
+        Status = EFI_OUT_OF_RESOURCES;\r
+        } else {\r
+          Status = LoadFile2->LoadFile (\r
+                               LoadFile2,\r
+                               TempFilePath,\r
+                               BootPolicy,\r
+                               &ImageFileHandle->SourceSize,\r
+                               ImageFileHandle->Source\r
+                               );\r
+        }\r
+      }\r
+\r
+      if (!EFI_ERROR (Status)) {\r
+        ImageFileHandle->FreeBuffer = TRUE;\r
+        goto Done;\r
+      }\r
+    }\r
+  }\r
 \r
   //\r
   // Try LoadFile style\r