mirror of https://github.com/acidanthera/audk.git
Fixed some alignment faults in IPF platform
Signed-off-by: Eric Dong <eric.dong@intel.com> Reviewed-by: Carsey Jaben <jaben.carsey@intel.com> git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@14081 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
cc7f6cf32f
commit
0b6cb335fa
|
@ -249,7 +249,7 @@ SmbiosPrintStructure (
|
|||
PRINT_PENDING_STRING (Struct, Type0, BiosReleaseDate);
|
||||
ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIOS_SIZE), gShellDebug1HiiHandle, 64 * (Struct->Type0->BiosSize + 1));
|
||||
|
||||
DisplayBiosCharacteristics (*(UINT64 *) &(Struct->Type0->BiosCharacteristics), Option);
|
||||
DisplayBiosCharacteristics (ReadUnaligned64 ((UINT64 *) (UINTN) &(Struct->Type0->BiosCharacteristics)), Option);
|
||||
|
||||
if (Struct->Hdr->Length > 0x12) {
|
||||
DisplayBiosCharacteristicsExt1 (Struct->Type0->BIOSCharacteristicsExtensionBytes[0], Option);
|
||||
|
@ -416,7 +416,7 @@ SmbiosPrintStructure (
|
|||
PRINT_STRUCT_VALUE_H (Struct, Type7, InstalledSize);
|
||||
PRINT_STRUCT_VALUE_H (Struct, Type7, SupportedSRAMType);
|
||||
PRINT_STRUCT_VALUE_H (Struct, Type7, CurrentSRAMType);
|
||||
DisplayCacheSRAMType (*(UINT16 *) &(Struct->Type7->CurrentSRAMType), Option);
|
||||
DisplayCacheSRAMType (ReadUnaligned16 ((UINT16 *) (UINTN) &(Struct->Type7->CurrentSRAMType)), Option);
|
||||
PRINT_STRUCT_VALUE_H (Struct, Type7, CacheSpeed);
|
||||
DisplayCacheErrCorrectingType (Struct->Type7->ErrorCorrectionType, Option);
|
||||
DisplayCacheSystemCacheType (Struct->Type7->SystemCacheType, Option);
|
||||
|
@ -633,7 +633,7 @@ SmbiosPrintStructure (
|
|||
PRINT_PENDING_STRING (Struct, Type17, DeviceLocator);
|
||||
PRINT_PENDING_STRING (Struct, Type17, BankLocator);
|
||||
DisplayMemoryDeviceType (Struct->Type17->MemoryType, Option);
|
||||
DisplayMemoryDeviceTypeDetail (*(UINT16 *) &(Struct->Type17->TypeDetail), Option);
|
||||
DisplayMemoryDeviceTypeDetail (ReadUnaligned16 ((UINT16 *) (UINTN) &(Struct->Type17->TypeDetail)), Option);
|
||||
PRINT_STRUCT_VALUE_H (Struct, Type17, Speed);
|
||||
PRINT_PENDING_STRING (Struct, Type17, Manufacturer);
|
||||
PRINT_PENDING_STRING (Struct, Type17, SerialNumber);
|
||||
|
|
|
@ -486,6 +486,8 @@ ShellOpenFileByDevicePath(
|
|||
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *EfiSimpleFileSystemProtocol;
|
||||
EFI_FILE_PROTOCOL *Handle1;
|
||||
EFI_FILE_PROTOCOL *Handle2;
|
||||
CHAR16 *FnafPathName;
|
||||
UINTN PathLen;
|
||||
|
||||
if (FilePath == NULL || FileHandle == NULL || DeviceHandle == NULL) {
|
||||
return (EFI_INVALID_PARAMETER);
|
||||
|
@ -551,13 +553,36 @@ ShellOpenFileByDevicePath(
|
|||
Handle2 = Handle1;
|
||||
Handle1 = NULL;
|
||||
|
||||
//
|
||||
// File Name Alignment Fix (FNAF)
|
||||
// Handle2->Open may be incapable of handling a unaligned CHAR16 data.
|
||||
// The structure pointed to by FilePath may be not CHAR16 aligned.
|
||||
// This code copies the potentially unaligned PathName data from the
|
||||
// FilePath structure to the aligned FnafPathName for use in the
|
||||
// calls to Handl2->Open.
|
||||
//
|
||||
|
||||
//
|
||||
// Determine length of PathName, in bytes.
|
||||
//
|
||||
PathLen = DevicePathNodeLength (*FilePath) - SIZE_OF_FILEPATH_DEVICE_PATH;
|
||||
|
||||
//
|
||||
// Allocate memory for the aligned copy of the string Extra allocation is to allow for forced alignment
|
||||
// Copy bytes from possibly unaligned location to aligned location
|
||||
//
|
||||
FnafPathName = AllocateCopyPool(PathLen, (UINT8 *)((FILEPATH_DEVICE_PATH*)*FilePath)->PathName);
|
||||
if (FnafPathName == NULL) {
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
}
|
||||
|
||||
//
|
||||
// Try to test opening an existing file
|
||||
//
|
||||
Status = Handle2->Open (
|
||||
Handle2,
|
||||
&Handle1,
|
||||
((FILEPATH_DEVICE_PATH*)*FilePath)->PathName,
|
||||
FnafPathName,
|
||||
OpenMode &~EFI_FILE_MODE_CREATE,
|
||||
0
|
||||
);
|
||||
|
@ -569,11 +594,17 @@ ShellOpenFileByDevicePath(
|
|||
Status = Handle2->Open (
|
||||
Handle2,
|
||||
&Handle1,
|
||||
((FILEPATH_DEVICE_PATH*)*FilePath)->PathName,
|
||||
FnafPathName,
|
||||
OpenMode,
|
||||
Attributes
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
// Free the alignment buffer
|
||||
//
|
||||
FreePool(FnafPathName);
|
||||
|
||||
//
|
||||
// Close the last node
|
||||
//
|
||||
|
|
Loading…
Reference in New Issue