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
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
EFI_STATUS
BdsLoadApplication (
IN EFI_HANDLE ParentImageHandle,
- IN CHAR16* EfiApp
+ IN CHAR16* EfiApp,
+ IN UINTN LoadOptionsSize,
+ IN VOID* LoadOptions
)
{
EFI_STATUS Status;
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;
}
}
#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)))
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;
}
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
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