]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ArmPkg/BdsLib: Add support to pass argument to a loaded EFI application
authoroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 9 Sep 2011 10:53:42 +0000 (10:53 +0000)
committeroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 9 Sep 2011 10:53:42 +0000 (10:53 +0000)
OptionalData argument has to be set in the Loaded Image Protocol of the
new EFI application.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12313 6f19259b-4bc3-4df7-8a09-765794883524

ArmPkg/Include/Library/BdsLib.h
ArmPkg/Library/BdsLib/BdsAppLoader.c
ArmPkg/Library/BdsLib/BdsFilePath.c
ArmPlatformPkg/Bds/BootMenu.c
ArmPlatformPkg/Bds/BootOption.c

index 91c67e726ee75287c50c116d46537894e1177cea..bbbdae895bb936aa4823a4be40cd651ea5d9f5eb 100644 (file)
@@ -100,7 +100,9 @@ BdsBootLinux (
 EFI_STATUS\r
 BdsStartEfiApplication (\r
   IN EFI_HANDLE                  ParentImageHandle,\r
-  IN EFI_DEVICE_PATH_PROTOCOL    *DevicePath\r
+  IN EFI_DEVICE_PATH_PROTOCOL    *DevicePath,\r
+  IN UINTN                       LoadOptionsSize,\r
+  IN VOID*                       LoadOptions\r
   );\r
 \r
 /**\r
@@ -116,7 +118,9 @@ BdsStartEfiApplication (
 EFI_STATUS\r
 BdsLoadApplication (\r
   IN EFI_HANDLE                  ParentImageHandle,\r
-  IN CHAR16*                     EfiApp\r
+  IN CHAR16*                     EfiApp,\r
+  IN UINTN                       LoadOptionsSize,\r
+  IN VOID*                       LoadOptions\r
   );\r
 \r
 #endif\r
index 8b778b27f714e165f9d71db03abe3b727751006d..4f359cda10b66708b1ac1c223e85a35a4b2d06f8 100644 (file)
@@ -105,7 +105,9 @@ BdsLoadFileFromFirmwareVolume (
 EFI_STATUS
 BdsLoadApplication (
   IN EFI_HANDLE                  ParentImageHandle,
-  IN CHAR16*                     EfiApp
+  IN CHAR16*                     EfiApp,
+  IN UINTN                       LoadOptionsSize,
+  IN VOID*                       LoadOptions
   )
 {
   EFI_STATUS                      Status;
@@ -133,7 +135,7 @@ BdsLoadApplication (
     Status = BdsLoadFileFromFirmwareVolume (Handles[HandleIndex], EfiApp, EFI_FV_FILETYPE_APPLICATION, &EfiAppDevicePath);
     if (!EFI_ERROR (Status)) {
       // Start the application
-      Status = BdsStartEfiApplication (ParentImageHandle, EfiAppDevicePath);
+      Status = BdsStartEfiApplication (ParentImageHandle, EfiAppDevicePath, LoadOptionsSize, LoadOptions);
       return Status;
     }
   }
index 720ae7b9da0d5ae5f052b9f11e10520e7a20a074..9136941edec7b5e2a8c9016104e53cd2fab0100d 100644 (file)
@@ -16,6 +16,7 @@
 
 #include <Protocol/UsbIo.h>
 #include <Protocol/DiskIo.h>
+#include <Protocol/LoadedImage.h>
 
 #define IS_DEVICE_PATH_NODE(node,type,subtype) (((node)->Type == (type)) && ((node)->SubType == (subtype)))
 
@@ -856,16 +857,19 @@ BdsLoadImage (
 EFI_STATUS
 BdsStartEfiApplication (
   IN EFI_HANDLE                  ParentImageHandle,
-  IN EFI_DEVICE_PATH_PROTOCOL    *DevicePath
+  IN EFI_DEVICE_PATH_PROTOCOL    *DevicePath,
+  IN UINTN                       LoadOptionsSize,
+  IN VOID*                       LoadOptions
   )
 {
   EFI_STATUS                   Status;
   EFI_HANDLE                   ImageHandle;
   EFI_PHYSICAL_ADDRESS         BinaryBuffer;
   UINTN                        BinarySize;
+  EFI_LOADED_IMAGE_PROTOCOL*   LoadedImage;
 
   // Find the nearest supported file loader
-  Status = BdsLoadImage (DevicePath, AllocateAnyPages,&BinaryBuffer,&BinarySize);
+  Status = BdsLoadImage (DevicePath, AllocateAnyPages, &BinaryBuffer, &BinarySize);
   if (EFI_ERROR(Status)) {
     return Status;
   }
@@ -876,6 +880,17 @@ BdsStartEfiApplication (
     return Status;
   }
 
+  // Passed LoadOptions to the EFI Application
+  if (LoadOptionsSize != 0) {
+    Status = gBS->HandleProtocol (ImageHandle, &gEfiLoadedImageProtocolGuid, (VOID **) &LoadedImage);
+    if (EFI_ERROR(Status)) {
+      return Status;
+    }
+
+    LoadedImage->LoadOptionsSize  = LoadOptionsSize;
+    LoadedImage->LoadOptions      = LoadOptions;
+  }
+
   // Before calling the image, enable the Watchdog Timer for  the 5 Minute period
   gBS->SetWatchdogTimer (5 * 60, 0x0000, 0x00, NULL);
   // Start the image
index d583c02256219a8410adda0b6ee061f0bb6ad02e..ad2e91455457845e64e60cfa5cc52c55c7cc3b96 100644 (file)
@@ -478,7 +478,7 @@ BootEBL (
   EFI_STATUS Status;\r
 \r
   // Start EFI Shell\r
-  Status = BdsLoadApplication(mImageHandle, L"Ebl");\r
+  Status = BdsLoadApplication (mImageHandle, L"Ebl", 0, NULL);\r
   if (Status == EFI_NOT_FOUND) {\r
     Print (L"Error: EFI Application not found.\n");\r
   } else if (EFI_ERROR(Status)) {\r
index 6a5f010abe85467cbcf36a74e8c453c98b2c98e0..9354e01d26e5b789a3b2deaca79ea109642bc2ba 100644 (file)
@@ -85,7 +85,7 @@ BootOptionStart (
                                 FdtDevicePath);\r
     }\r
   } else {\r
-    Status = BdsStartEfiApplication (mImageHandle, BootOption->FilePathList);\r
+    Status = BdsStartEfiApplication (mImageHandle, BootOption->FilePathList, BootOption->OptionalDataSize, BootOption->OptionalData);\r
   }\r
 \r
   return Status;\r