ArmPlatformPkg/Bds: Fix various bugs in the new BDS
The errors were: - uncaught returned error - used of uninitialized variables ArmPlatformPkg/Bds: Implement the update of MemMap Boot Device git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11830 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@@ -258,8 +258,13 @@ BootOptionSetFields (
|
||||
CopyMem (&((BDS_LOADER_OPTIONAL_DATA*)EfiLoadOptionPtr)->Arguments, BootArguments, AsciiStrSize(BootArguments));
|
||||
BootOption->OptionalData = (BDS_LOADER_OPTIONAL_DATA *)EfiLoadOptionPtr;
|
||||
|
||||
// If this function is called at the creation of the Boot Device entry (not at the update) the
|
||||
// BootOption->LoadOptionSize must be zero then we get a new BootIndex for this entry
|
||||
if (BootOption->LoadOptionSize == 0) {
|
||||
BootOption->LoadOptionIndex = BootOptionAllocateBootIndex();
|
||||
}
|
||||
|
||||
// Fill the EFI Load option fields
|
||||
BootOption->LoadOptionIndex = BootOptionAllocateBootIndex();
|
||||
BootOption->LoadOption = EfiLoadOption;
|
||||
BootOption->LoadOptionSize = EfiLoadOptionSize;
|
||||
|
||||
@@ -341,20 +346,20 @@ BootOptionUpdate (
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
BDS_LOAD_OPTION *BootOption;
|
||||
CHAR16 BootVariableName[9];
|
||||
|
||||
// Update the BDS Load Option structure
|
||||
BootOptionSetFields (BdsLoadOption, Attributes, BootDescription, DevicePath, BootType, BootArguments);
|
||||
|
||||
// Update the related environment variables
|
||||
UnicodeSPrint (BootVariableName, 9 * sizeof(CHAR16), L"Boot%04X", BootOption->LoadOptionIndex);
|
||||
UnicodeSPrint (BootVariableName, 9 * sizeof(CHAR16), L"Boot%04X", BdsLoadOption->LoadOptionIndex);
|
||||
|
||||
Status = gRT->SetVariable (
|
||||
BootVariableName,
|
||||
&gEfiGlobalVariableGuid,
|
||||
EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
|
||||
BootOption->LoadOptionSize,
|
||||
BootOption->LoadOption
|
||||
BdsLoadOption->LoadOptionSize,
|
||||
BdsLoadOption->LoadOption
|
||||
);
|
||||
|
||||
return Status;
|
||||
|
@@ -386,7 +386,7 @@ BdsLoadOptionFileSystemUpdateDevicePath (
|
||||
|
||||
Print(L"File path of the EFI Application or the kernel: ");
|
||||
UnicodeStrToAsciiStr (EndingDevicePath->PathName,AsciiBootFilePath);
|
||||
Status = EditHIInputAscii(AsciiBootFilePath,BOOT_DEVICE_FILEPATH_MAX);
|
||||
Status = EditHIInputAscii (AsciiBootFilePath,BOOT_DEVICE_FILEPATH_MAX);
|
||||
if (EFI_ERROR(Status)) {
|
||||
return Status;
|
||||
}
|
||||
@@ -567,9 +567,40 @@ BdsLoadOptionMemMapUpdateDevicePath (
|
||||
OUT UINT32 *Attributes
|
||||
)
|
||||
{
|
||||
ASSERT(0);
|
||||
//TODO: Implement me
|
||||
return EFI_SUCCESS;
|
||||
EFI_STATUS Status;
|
||||
CHAR8 AsciiStartingAddress[BOOT_DEVICE_ADDRESS_MAX];
|
||||
CHAR8 AsciiEndingAddress[BOOT_DEVICE_ADDRESS_MAX];
|
||||
MEMMAP_DEVICE_PATH* EndingDevicePath;
|
||||
EFI_DEVICE_PATH* DevicePath;
|
||||
|
||||
DevicePath = DuplicateDevicePath (BootOption->FilePathList);
|
||||
EndingDevicePath = (MEMMAP_DEVICE_PATH*)GetLastDevicePathNode (DevicePath);
|
||||
|
||||
Print(L"Starting Address of the binary: ");
|
||||
AsciiSPrint (AsciiStartingAddress,BOOT_DEVICE_ADDRESS_MAX,"0x%X",(UINTN)EndingDevicePath->StartingAddress);
|
||||
Status = EditHIInputAscii (AsciiStartingAddress,BOOT_DEVICE_ADDRESS_MAX);
|
||||
if (EFI_ERROR(Status)) {
|
||||
return EFI_ABORTED;
|
||||
}
|
||||
|
||||
Print(L"Ending Address of the binary: ");
|
||||
AsciiSPrint (AsciiEndingAddress,BOOT_DEVICE_ADDRESS_MAX,"0x%X",(UINTN)EndingDevicePath->EndingAddress);
|
||||
Status = EditHIInputAscii (AsciiEndingAddress,BOOT_DEVICE_ADDRESS_MAX);
|
||||
if (EFI_ERROR(Status)) {
|
||||
return EFI_ABORTED;
|
||||
}
|
||||
|
||||
EndingDevicePath->StartingAddress = AsciiStrHexToUint64 (AsciiStartingAddress);
|
||||
EndingDevicePath->EndingAddress = AsciiStrHexToUint64 (AsciiEndingAddress);
|
||||
|
||||
Status = BootDeviceGetType (NULL, BootType, Attributes);
|
||||
if (EFI_ERROR(Status)) {
|
||||
FreePool(DevicePath);
|
||||
} else {
|
||||
*NewDevicePath = DevicePath;
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
BOOLEAN
|
||||
|
Reference in New Issue
Block a user