mirror of https://github.com/acidanthera/audk.git
ArmPlatformPkg/Bds: Use unaligned read to access OptionalData in EFI_LOAD_OPTION
EFI_LOAD_OPTION is a packed structure. Accessing to the non aligned double word requires to use ReadUnaligned32() function. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11916 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
aa95e2f79c
commit
c60ea9a873
|
@ -436,7 +436,7 @@ BootMenuMain (
|
||||||
|
|
||||||
Print(L"\t- %s\n",DevicePathTxt);
|
Print(L"\t- %s\n",DevicePathTxt);
|
||||||
if (BootOption->OptionalData != NULL) {
|
if (BootOption->OptionalData != NULL) {
|
||||||
Print(L"\t- LoaderType: %d\n",BootOption->OptionalData->LoaderType);
|
Print(L"\t- LoaderType: %d\n", ReadUnaligned32 (&BootOption->OptionalData->LoaderType));
|
||||||
if (BootOption->OptionalData->Arguments != NULL) {
|
if (BootOption->OptionalData->Arguments != NULL) {
|
||||||
Print(L"\t- Arguments: %a\n",BootOption->OptionalData->Arguments);
|
Print(L"\t- Arguments: %a\n",BootOption->OptionalData->Arguments);
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,20 +21,22 @@ BootOptionStart (
|
||||||
IN BDS_LOAD_OPTION *BootOption
|
IN BDS_LOAD_OPTION *BootOption
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
EFI_DEVICE_PATH* FdtDevicePath;
|
EFI_DEVICE_PATH* FdtDevicePath;
|
||||||
EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL *EfiDevicePathFromTextProtocol;
|
EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL* EfiDevicePathFromTextProtocol;
|
||||||
|
UINT32 LoaderType;
|
||||||
|
|
||||||
Status = EFI_UNSUPPORTED;
|
Status = EFI_UNSUPPORTED;
|
||||||
|
LoaderType = ReadUnaligned32 (&BootOption->OptionalData->LoaderType);
|
||||||
|
|
||||||
if (BootOption->OptionalData->LoaderType == BDS_LOADER_EFI_APPLICATION) {
|
if (LoaderType == BDS_LOADER_EFI_APPLICATION) {
|
||||||
// Need to connect every drivers to ensure no dependencies are missing for the application
|
// Need to connect every drivers to ensure no dependencies are missing for the application
|
||||||
BdsConnectAllDrivers();
|
BdsConnectAllDrivers();
|
||||||
|
|
||||||
Status = BdsStartEfiApplication (mImageHandle, BootOption->FilePathList);
|
Status = BdsStartEfiApplication (mImageHandle, BootOption->FilePathList);
|
||||||
} else if (BootOption->OptionalData->LoaderType == BDS_LOADER_KERNEL_LINUX_ATAG) {
|
} else if (LoaderType == BDS_LOADER_KERNEL_LINUX_ATAG) {
|
||||||
Status = BdsBootLinux (BootOption->FilePathList, BootOption->OptionalData->Arguments, NULL);
|
Status = BdsBootLinux (BootOption->FilePathList, BootOption->OptionalData->Arguments, NULL);
|
||||||
} else if (BootOption->OptionalData->LoaderType == BDS_LOADER_KERNEL_LINUX_FDT) {
|
} else if (LoaderType == BDS_LOADER_KERNEL_LINUX_FDT) {
|
||||||
// Convert the FDT path into a Device Path
|
// Convert the FDT path into a Device Path
|
||||||
Status = gBS->LocateProtocol (&gEfiDevicePathFromTextProtocolGuid, NULL, (VOID **)&EfiDevicePathFromTextProtocol);
|
Status = gBS->LocateProtocol (&gEfiDevicePathFromTextProtocolGuid, NULL, (VOID **)&EfiDevicePathFromTextProtocol);
|
||||||
ASSERT_EFI_ERROR(Status);
|
ASSERT_EFI_ERROR(Status);
|
||||||
|
@ -178,12 +180,12 @@ BootOptionAllocateBootIndex (
|
||||||
STATIC
|
STATIC
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
BootOptionSetFields (
|
BootOptionSetFields (
|
||||||
IN BDS_LOAD_OPTION *BootOption,
|
IN BDS_LOAD_OPTION* BootOption,
|
||||||
IN UINT32 Attributes,
|
IN UINT32 Attributes,
|
||||||
IN CHAR16* BootDescription,
|
IN CHAR16* BootDescription,
|
||||||
IN EFI_DEVICE_PATH_PROTOCOL* DevicePath,
|
IN EFI_DEVICE_PATH_PROTOCOL* DevicePath,
|
||||||
IN BDS_LOADER_TYPE BootType,
|
IN BDS_LOADER_TYPE BootType,
|
||||||
IN CHAR8* BootArguments
|
IN CHAR8* BootArguments
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_LOAD_OPTION EfiLoadOption;
|
EFI_LOAD_OPTION EfiLoadOption;
|
||||||
|
@ -273,17 +275,17 @@ BootOptionSetFields (
|
||||||
|
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
BootOptionCreate (
|
BootOptionCreate (
|
||||||
IN UINT32 Attributes,
|
IN UINT32 Attributes,
|
||||||
IN CHAR16* BootDescription,
|
IN CHAR16* BootDescription,
|
||||||
IN EFI_DEVICE_PATH_PROTOCOL* DevicePath,
|
IN EFI_DEVICE_PATH_PROTOCOL* DevicePath,
|
||||||
IN BDS_LOADER_TYPE BootType,
|
IN BDS_LOADER_TYPE BootType,
|
||||||
IN CHAR8* BootArguments,
|
IN CHAR8* BootArguments,
|
||||||
OUT BDS_LOAD_OPTION **BdsLoadOption
|
OUT BDS_LOAD_OPTION **BdsLoadOption
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
BDS_LOAD_OPTION *BootOption;
|
BDS_LOAD_OPTION *BootOption;
|
||||||
CHAR16 BootVariableName[9];
|
CHAR16 BootVariableName[9];
|
||||||
UINT16 *BootOrder;
|
UINT16 *BootOrder;
|
||||||
UINTN BootOrderSize;
|
UINTN BootOrderSize;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue