diff --git a/MdeModulePkg/Bus/Pci/UndiRuntimeDxe/Undi32.h b/MdeModulePkg/Bus/Pci/UndiRuntimeDxe/Undi32.h index 05f3844a81..b997873a39 100644 --- a/MdeModulePkg/Bus/Pci/UndiRuntimeDxe/Undi32.h +++ b/MdeModulePkg/Bus/Pci/UndiRuntimeDxe/Undi32.h @@ -28,6 +28,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include #include #include +#include #include diff --git a/MdeModulePkg/Bus/Usb/UsbBusDxe/UsbUtility.c b/MdeModulePkg/Bus/Usb/UsbBusDxe/UsbUtility.c index ad84da90e7..24653f0625 100644 --- a/MdeModulePkg/Bus/Usb/UsbBusDxe/UsbUtility.c +++ b/MdeModulePkg/Bus/Usb/UsbBusDxe/UsbUtility.c @@ -759,7 +759,7 @@ GetUsbDPFromFullDP ( // Get the Usb part first Begin node in full device path // UsbDevicePathBeginPtr = DevicePath; - while ( (!EfiIsDevicePathEnd (UsbDevicePathBeginPtr))&& + while ( (!IsDevicePathEnd (UsbDevicePathBeginPtr))&& ((UsbDevicePathBeginPtr->Type != MESSAGING_DEVICE_PATH) || (UsbDevicePathBeginPtr->SubType != MSG_USB_DP && UsbDevicePathBeginPtr->SubType != MSG_USB_CLASS_DP @@ -773,7 +773,7 @@ GetUsbDPFromFullDP ( // Get the Usb part first End node in full device path // UsbDevicePathEndPtr = UsbDevicePathBeginPtr; - while ((!EfiIsDevicePathEnd (UsbDevicePathEndPtr))&& + while ((!IsDevicePathEnd (UsbDevicePathEndPtr))&& (UsbDevicePathEndPtr->Type == MESSAGING_DEVICE_PATH) && (UsbDevicePathEndPtr->SubType == MSG_USB_DP || UsbDevicePathEndPtr->SubType == MSG_USB_CLASS_DP diff --git a/MdeModulePkg/Core/Dxe/Dispatcher/Dispatcher.c b/MdeModulePkg/Core/Dxe/Dispatcher/Dispatcher.c index b2faff1a86..f1f940716c 100644 --- a/MdeModulePkg/Core/Dxe/Dispatcher/Dispatcher.c +++ b/MdeModulePkg/Core/Dxe/Dispatcher/Dispatcher.c @@ -691,9 +691,7 @@ CoreFvToDevicePath ( // Build a device path to the file in the FV to pass into gBS->LoadImage // EfiInitializeFwVolDevicepathNode (&mFvDevicePath.File, DriverName); - mFvDevicePath.End.Type = EFI_END_ENTIRE_DEVICE_PATH; - mFvDevicePath.End.SubType = END_ENTIRE_DEVICE_PATH_SUBTYPE; - SetDevicePathNodeLength (&mFvDevicePath.End, sizeof (EFI_DEVICE_PATH_PROTOCOL)); + SetDevicePathEndNode (&mFvDevicePath.End); FileNameDevicePath = AppendDevicePath ( FvDevicePath, @@ -1046,9 +1044,7 @@ CoreFwVolEventProtocolNotify ( // be initialized completely. // EfiInitializeFwVolDevicepathNode (&mFvDevicePath.File, &NameGuid); - mFvDevicePath.End.Type = EFI_END_ENTIRE_DEVICE_PATH; - mFvDevicePath.End.SubType = END_ENTIRE_DEVICE_PATH_SUBTYPE; - SetDevicePathNodeLength (&mFvDevicePath.End, sizeof (EFI_DEVICE_PATH_PROTOCOL)); + SetDevicePathEndNode (&mFvDevicePath.End); gDxeCoreLoadedImage->FilePath = DuplicateDevicePath ( (EFI_DEVICE_PATH_PROTOCOL *)&mFvDevicePath diff --git a/MdeModulePkg/Include/Library/GenericBdsLib.h b/MdeModulePkg/Include/Library/GenericBdsLib.h index 76b7f9484f..fd46f8af74 100644 --- a/MdeModulePkg/Include/Library/GenericBdsLib.h +++ b/MdeModulePkg/Include/Library/GenericBdsLib.h @@ -505,22 +505,6 @@ BdsLibConnectConsoleVariable ( // // Bds device path related lib functions // -/** - Function unpacks a device path data structure so that all the nodes - of a device path are naturally aligned. - - @param DevPath A pointer to a device path data structure - - @return If the memory for the device path is successfully allocated, then a - pointer to the new device path is returned. Otherwise, NULL is returned. - -**/ -EFI_DEVICE_PATH_PROTOCOL * -EFIAPI -BdsLibUnpackDevicePath ( - IN EFI_DEVICE_PATH_PROTOCOL *DevPath - ); - /** Delete the instance in Multi which matches partly with Single instance diff --git a/MdeModulePkg/Library/DxeNetLib/DxeNetLib.c b/MdeModulePkg/Library/DxeNetLib/DxeNetLib.c index 7c7dd74694..4eeab90e05 100644 --- a/MdeModulePkg/Library/DxeNetLib/DxeNetLib.c +++ b/MdeModulePkg/Library/DxeNetLib/DxeNetLib.c @@ -38,7 +38,7 @@ Abstract: #include #include #include - +#include EFI_DPC_PROTOCOL *mDpc = NULL; diff --git a/MdeModulePkg/Library/DxeNetLib/DxeNetLib.inf b/MdeModulePkg/Library/DxeNetLib/DxeNetLib.inf index db2c318afb..1f148b2539 100644 --- a/MdeModulePkg/Library/DxeNetLib/DxeNetLib.inf +++ b/MdeModulePkg/Library/DxeNetLib/DxeNetLib.inf @@ -51,7 +51,8 @@ UefiRuntimeServicesTableLib UefiLib MemoryAllocationLib - + DevicePathLib + [Protocols] gEfiSimpleNetworkProtocolGuid # PROTOCOL ALWAYS_CONSUMED gEfiNicIp4ConfigProtocolGuid # PROTOCOL ALWAYS_CONSUMED diff --git a/MdeModulePkg/Library/DxePlatDriOverLib/PlatDriOverLib.c b/MdeModulePkg/Library/DxePlatDriOverLib/PlatDriOverLib.c index 21bfb8a7c2..b746c68bf5 100644 --- a/MdeModulePkg/Library/DxePlatDriOverLib/PlatDriOverLib.c +++ b/MdeModulePkg/Library/DxePlatDriOverLib/PlatDriOverLib.c @@ -1590,9 +1590,9 @@ UpdateFvFileDevicePath ( // TempDevicePath = *DevicePath; LastDeviceNode = TempDevicePath; - while (!EfiIsDevicePathEnd (TempDevicePath)) { - LastDeviceNode = TempDevicePath; - TempDevicePath = EfiNextDevicePathNode (TempDevicePath); + while (!IsDevicePathEnd (TempDevicePath)) { + LastDeviceNode = TempDevicePath; + TempDevicePath = NextDevicePathNode (TempDevicePath); } GuidPoint = EfiGetNameGuidFromFwVolDevicePathNode ((MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *) LastDeviceNode); if (GuidPoint == NULL) { @@ -1618,7 +1618,7 @@ UpdateFvFileDevicePath ( // TempDevicePath = *DevicePath; HasFvNode = FALSE; - while (!EfiIsDevicePathEnd (TempDevicePath)) { + while (!IsDevicePathEnd (TempDevicePath)) { // // Use old Device Path // @@ -1627,7 +1627,7 @@ UpdateFvFileDevicePath ( HasFvNode = TRUE; break; } - TempDevicePath = EfiNextDevicePathNode (TempDevicePath); + TempDevicePath = NextDevicePathNode (TempDevicePath); } if (!HasFvNode) { diff --git a/MdeModulePkg/Library/ExtendedHiiLib/ExtendedHiiLib.c b/MdeModulePkg/Library/ExtendedHiiLib/ExtendedHiiLib.c index b29e13a375..a3970ecf74 100644 --- a/MdeModulePkg/Library/ExtendedHiiLib/ExtendedHiiLib.c +++ b/MdeModulePkg/Library/ExtendedHiiLib/ExtendedHiiLib.c @@ -21,6 +21,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include #include #include +#include #include diff --git a/MdeModulePkg/Library/ExtendedHiiLib/ExtendedHiiLib.inf b/MdeModulePkg/Library/ExtendedHiiLib/ExtendedHiiLib.inf index 65c71baf34..f5a7fc2ca3 100644 --- a/MdeModulePkg/Library/ExtendedHiiLib/ExtendedHiiLib.inf +++ b/MdeModulePkg/Library/ExtendedHiiLib/ExtendedHiiLib.inf @@ -42,7 +42,8 @@ DebugLib PcdLib UefiRuntimeServicesTableLib - + DevicePathLib + [Protocols] gEfiDevicePathProtocolGuid diff --git a/MdeModulePkg/Library/GenericBdsLib/BdsBoot.c b/MdeModulePkg/Library/GenericBdsLib/BdsBoot.c index c8b2c59f52..efaf82addc 100644 --- a/MdeModulePkg/Library/GenericBdsLib/BdsBoot.c +++ b/MdeModulePkg/Library/GenericBdsLib/BdsBoot.c @@ -523,7 +523,6 @@ MatchPartitionDevicePathNode ( ) { HARDDRIVE_DEVICE_PATH *TmpHdPath; - HARDDRIVE_DEVICE_PATH *TempPath; EFI_DEVICE_PATH_PROTOCOL *DevicePath; BOOLEAN Match; EFI_DEVICE_PATH_PROTOCOL *BlockIoHdDevicePathNode; @@ -559,20 +558,19 @@ MatchPartitionDevicePathNode ( // See if the harddrive device path in blockio matches the orig Hard Drive Node // TmpHdPath = (HARDDRIVE_DEVICE_PATH *) BlockIoHdDevicePathNode; - TempPath = (HARDDRIVE_DEVICE_PATH *) BdsLibUnpackDevicePath ((EFI_DEVICE_PATH_PROTOCOL *) HardDriveDevicePath); Match = FALSE; // // Check for the match // - if ((TmpHdPath->MBRType == TempPath->MBRType) && - (TmpHdPath->SignatureType == TempPath->SignatureType)) { + if ((TmpHdPath->MBRType == HardDriveDevicePath->MBRType) && + (TmpHdPath->SignatureType == HardDriveDevicePath->SignatureType)) { switch (TmpHdPath->SignatureType) { case SIGNATURE_TYPE_GUID: - Match = CompareGuid ((EFI_GUID *)TmpHdPath->Signature, (EFI_GUID *)TempPath->Signature); + Match = CompareGuid ((EFI_GUID *)TmpHdPath->Signature, (EFI_GUID *)HardDriveDevicePath->Signature); break; case SIGNATURE_TYPE_MBR: - Match = (BOOLEAN)(*((UINT32 *)(&(TmpHdPath->Signature[0]))) == *(UINT32 *)(&(TempPath->Signature[0]))); + Match = (BOOLEAN)(*((UINT32 *)(&(TmpHdPath->Signature[0]))) == ReadUnaligned32((UINT32 *)(&(HardDriveDevicePath->Signature[0])))); break; default: Match = FALSE; @@ -1624,9 +1622,9 @@ BdsLibIsValidEFIBootOptDevicePath ( // If the boot option point to a file, it is a valid EFI boot option, // and assume it is ready to boot now // - while (!EfiIsDevicePathEnd (TempDevicePath)) { + while (!IsDevicePathEnd (TempDevicePath)) { LastDeviceNode = TempDevicePath; - TempDevicePath = EfiNextDevicePathNode (TempDevicePath); + TempDevicePath = NextDevicePathNode (TempDevicePath); } if ((DevicePathType (LastDeviceNode) == MEDIA_DEVICE_PATH) && (DevicePathSubType (LastDeviceNode) == MEDIA_FILEPATH_DP)) { @@ -1765,9 +1763,9 @@ BdsLibUpdateFvFileDevicePath ( // TempDevicePath = *DevicePath; LastDeviceNode = TempDevicePath; - while (!EfiIsDevicePathEnd (TempDevicePath)) { + while (!IsDevicePathEnd (TempDevicePath)) { LastDeviceNode = TempDevicePath; - TempDevicePath = EfiNextDevicePathNode (TempDevicePath); + TempDevicePath = NextDevicePathNode (TempDevicePath); } GuidPoint = EfiGetNameGuidFromFwVolDevicePathNode ( (MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *) LastDeviceNode diff --git a/MdeModulePkg/Library/GenericBdsLib/DevicePath.c b/MdeModulePkg/Library/GenericBdsLib/DevicePath.c index affb009d4b..f420625fc9 100644 --- a/MdeModulePkg/Library/GenericBdsLib/DevicePath.c +++ b/MdeModulePkg/Library/GenericBdsLib/DevicePath.c @@ -112,75 +112,6 @@ CatPrint ( return Str->str; } - -/** - Function unpacks a device path data structure so that all the nodes - of a device path are naturally aligned. - - @param DevPath A pointer to a device path data structure - - @return A ponter to new device If the memory for the device path is successfully allocated, then a - pointer to the new device path is returned. Otherwise, NULL is returned. - -**/ -EFI_DEVICE_PATH_PROTOCOL * -EFIAPI -BdsLibUnpackDevicePath ( - IN EFI_DEVICE_PATH_PROTOCOL *DevPath - ) -{ - EFI_DEVICE_PATH_PROTOCOL *Src; - EFI_DEVICE_PATH_PROTOCOL *Dest; - EFI_DEVICE_PATH_PROTOCOL *NewPath; - UINTN Size; - - // - // Walk device path and round sizes to valid boundries - // - Src = DevPath; - Size = 0; - for (;;) { - Size += DevicePathNodeLength (Src); - Size += ALIGN_SIZE (Size); - - if (IsDevicePathEnd (Src)) { - break; - } - - Src = NextDevicePathNode (Src); - } - // - // Allocate space for the unpacked path - // - NewPath = AllocateZeroPool (Size); - if (NewPath != NULL) { - - ASSERT (((UINTN) NewPath) % MIN_ALIGNMENT_SIZE == 0); - - // - // Copy each node - // - Src = DevPath; - Dest = NewPath; - for (;;) { - Size = DevicePathNodeLength (Src); - CopyMem (Dest, Src, Size); - Size += ALIGN_SIZE (Size); - SetDevicePathNodeLength (Dest, Size); - Dest->Type |= EFI_DP_TYPE_UNPACKED; - Dest = (EFI_DEVICE_PATH_PROTOCOL *) (((UINT8 *) Dest) + Size); - - if (IsDevicePathEnd (Src)) { - break; - } - - Src = NextDevicePathNode (Src); - } - } - - return NewPath; -} - /** Convert Device Path to a Unicode string for printing. @@ -1545,12 +1476,6 @@ DevicePathToStr ( return ToText; } - // - // Unpacked the device path - // - DevPath = BdsLibUnpackDevicePath (DevPath); - ASSERT (DevPath); - // // Process each device path node // diff --git a/MdeModulePkg/Universal/BdsDxe/BootMaint/Variable.c b/MdeModulePkg/Universal/BdsDxe/BootMaint/Variable.c index 622093c8bb..a211ae2417 100644 --- a/MdeModulePkg/Universal/BdsDxe/BootMaint/Variable.c +++ b/MdeModulePkg/Universal/BdsDxe/BootMaint/Variable.c @@ -1257,7 +1257,7 @@ Var_UpdateBBSOption ( NewOptionSize = sizeof (UINT32) + sizeof (UINT16) + StrSize (DescString) + sizeof (BBS_BBS_DEVICE_PATH); NewOptionSize += AsciiStrLen (DescAsciiString) + - EFI_END_DEVICE_PATH_LENGTH + sizeof (BBS_TABLE) + sizeof (UINT16); + END_DEVICE_PATH_LENGTH + sizeof (BBS_TABLE) + sizeof (UINT16); UnicodeSPrint (VarName, 100, L"Boot%04x", Index); @@ -1300,7 +1300,7 @@ Var_UpdateBBSOption ( // *((UINT16 *) TempPtr) = (UINT16) (sizeof (BBS_BBS_DEVICE_PATH) + AsciiStrLen (DescAsciiString) + - EFI_END_DEVICE_PATH_LENGTH); + END_DEVICE_PATH_LENGTH); TempPtr += sizeof (UINT16); @@ -1343,9 +1343,9 @@ Var_UpdateBBSOption ( CopyMem ( TempPtr, EndDevicePath, - EFI_END_DEVICE_PATH_LENGTH + END_DEVICE_PATH_LENGTH ); - TempPtr += EFI_END_DEVICE_PATH_LENGTH; + TempPtr += END_DEVICE_PATH_LENGTH; // // Now TempPtr point to optional data, i.e. Bbs Table diff --git a/MdeModulePkg/Universal/DebugPortDxe/DebugPort.c b/MdeModulePkg/Universal/DebugPortDxe/DebugPort.c index 932c772d48..0ddbf1ed2a 100644 --- a/MdeModulePkg/Universal/DebugPortDxe/DebugPort.c +++ b/MdeModulePkg/Universal/DebugPortDxe/DebugPort.c @@ -73,11 +73,11 @@ GetDebugPortVariable ( DebugPortDevice->DebugPortVariable ); DevicePath = (EFI_DEVICE_PATH_PROTOCOL *) DebugPortDevice->DebugPortVariable; - while (!EfiIsDevicePathEnd (DevicePath) && !IS_UART_DEVICEPATH (DevicePath)) { - DevicePath = EfiNextDevicePathNode (DevicePath); + while (!IsDevicePathEnd (DevicePath) && !IS_UART_DEVICEPATH (DevicePath)) { + DevicePath = NextDevicePathNode (DevicePath); } - if (EfiIsDevicePathEnd (DevicePath)) { + if (IsDevicePathEnd (DevicePath)) { FreePool (gDebugPortDevice->DebugPortVariable); DebugPortDevice->DebugPortVariable = NULL; } else { diff --git a/MdeModulePkg/Universal/DevicePathDxe/DevicePathToText.c b/MdeModulePkg/Universal/DevicePathDxe/DevicePathToText.c index a1d560cfd5..a9f6afcf4a 100644 --- a/MdeModulePkg/Universal/DevicePathDxe/DevicePathToText.c +++ b/MdeModulePkg/Universal/DevicePathDxe/DevicePathToText.c @@ -14,76 +14,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include "DevicePath.h" -/** - Function unpacks a device path data structure so that all the nodes of a device path - are naturally aligned. - - @param DevPath A pointer to a device path data structure - - @return If the memory for the device path is successfully allocated, then a pointer to the - new device path is returned. Otherwise, NULL is returned. - -**/ -EFI_DEVICE_PATH_PROTOCOL * -UnpackDevicePath ( - IN CONST EFI_DEVICE_PATH_PROTOCOL *DevPath - ) -{ - CONST EFI_DEVICE_PATH_PROTOCOL *Src; - EFI_DEVICE_PATH_PROTOCOL *Dest; - EFI_DEVICE_PATH_PROTOCOL *NewPath; - UINTN Size; - - if (DevPath == NULL) { - return NULL; - } - // - // Walk device path and round sizes to valid boundries - // - Src = DevPath; - Size = 0; - for (;;) { - Size += DevicePathNodeLength (Src); - Size += ALIGN_SIZE (Size); - - if (IsDevicePathEnd (Src)) { - break; - } - - Src = (EFI_DEVICE_PATH_PROTOCOL *) NextDevicePathNode (Src); - } - // - // Allocate space for the unpacked path - // - NewPath = AllocateZeroPool (Size); - if (NewPath != NULL) { - - ASSERT (((UINTN) NewPath) % MIN_ALIGNMENT_SIZE == 0); - - // - // Copy each node - // - Src = DevPath; - Dest = NewPath; - for (;;) { - Size = DevicePathNodeLength (Src); - CopyMem (Dest, Src, Size); - Size += ALIGN_SIZE (Size); - SetDevicePathNodeLength (Dest, Size); - Dest->Type |= EFI_DP_TYPE_UNPACKED; - Dest = (EFI_DEVICE_PATH_PROTOCOL *) (((UINT8 *) Dest) + Size); - - if (IsDevicePathEnd (Src)) { - break; - } - - Src = (EFI_DEVICE_PATH_PROTOCOL *) NextDevicePathNode (Src); - } - } - - return NewPath; -} - /** Adjusts the size of a previously allocated buffer. @@ -1853,7 +1783,7 @@ ConvertDevicePathToText ( { POOL_PRINT Str; EFI_DEVICE_PATH_PROTOCOL *DevPathNode; - EFI_DEVICE_PATH_PROTOCOL *UnpackDevPath; + EFI_DEVICE_PATH_PROTOCOL *AlignedDevPathNode; UINTN Index; UINTN NewSize; VOID (*DumpNode) (POOL_PRINT *, VOID *, BOOLEAN, BOOLEAN); @@ -1864,16 +1794,10 @@ ConvertDevicePathToText ( ZeroMem (&Str, sizeof (Str)); - // - // Unpacked the device path - // - UnpackDevPath = UnpackDevicePath ((EFI_DEVICE_PATH_PROTOCOL *) DevicePath); - ASSERT (UnpackDevPath != NULL); - // // Process each device path node // - DevPathNode = UnpackDevPath; + DevPathNode = (EFI_DEVICE_PATH_PROTOCOL *) DevicePath; while (!IsDevicePathEnd (DevPathNode)) { // // Find the handler to dump this device path node @@ -1902,20 +1826,19 @@ ConvertDevicePathToText ( CatPrint (&Str, L"/"); } } + + AlignedDevPathNode = AllocateCopyPool (DevicePathNodeLength (DevPathNode), DevPathNode); // // Print this node of the device path // - DumpNode (&Str, DevPathNode, DisplayOnly, AllowShortcuts); - + DumpNode (&Str, AlignedDevPathNode, DisplayOnly, AllowShortcuts); + FreePool (AlignedDevPathNode); + // // Next device path node // DevPathNode = NextDevicePathNode (DevPathNode); } - // - // Shrink pool used for string allocation - // - FreePool (UnpackDevPath); NewSize = (Str.Len + 1) * sizeof (CHAR16); Str.Str = ReallocatePool (Str.Str, NewSize, NewSize); diff --git a/MdeModulePkg/Universal/Disk/PartitionDxe/Mbr.c b/MdeModulePkg/Universal/Disk/PartitionDxe/Mbr.c index 51fdca4254..21d1163ab7 100644 --- a/MdeModulePkg/Universal/Disk/PartitionDxe/Mbr.c +++ b/MdeModulePkg/Universal/Disk/PartitionDxe/Mbr.c @@ -163,9 +163,9 @@ PartitionInstallMbrChildHandles ( LastDevicePathNode = NULL; ZeroMem (&ParentHdDev, sizeof (ParentHdDev)); DevicePathNode = DevicePath; - while (!EfiIsDevicePathEnd (DevicePathNode)) { + while (!IsDevicePathEnd (DevicePathNode)) { LastDevicePathNode = DevicePathNode; - DevicePathNode = EfiNextDevicePathNode (DevicePathNode); + DevicePathNode = NextDevicePathNode (DevicePathNode); } if (LastDevicePathNode != NULL) { diff --git a/MdeModulePkg/Universal/FirmwareVolume/FaultTolerantWriteDxe/FtwLite.h b/MdeModulePkg/Universal/FirmwareVolume/FaultTolerantWriteDxe/FtwLite.h index 2a5195bb4f..a7cc406c32 100644 --- a/MdeModulePkg/Universal/FirmwareVolume/FaultTolerantWriteDxe/FtwLite.h +++ b/MdeModulePkg/Universal/FirmwareVolume/FaultTolerantWriteDxe/FtwLite.h @@ -31,6 +31,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include #include #include +#include #include diff --git a/MdeModulePkg/Universal/FirmwareVolume/FaultTolerantWriteDxe/FtwLite.inf b/MdeModulePkg/Universal/FirmwareVolume/FaultTolerantWriteDxe/FtwLite.inf index 6011c74d14..113f6eda90 100644 --- a/MdeModulePkg/Universal/FirmwareVolume/FaultTolerantWriteDxe/FtwLite.inf +++ b/MdeModulePkg/Universal/FirmwareVolume/FaultTolerantWriteDxe/FtwLite.inf @@ -63,7 +63,8 @@ UefiDriverEntryPoint DebugLib PcdLib - + DevicePathLib + [Guids] gEfiSystemNvDataFvGuid # ALWAYS_CONSUMED diff --git a/MdeModulePkg/Universal/Network/IScsiDxe/IScsiExtScsiPassThru.c b/MdeModulePkg/Universal/Network/IScsiDxe/IScsiExtScsiPassThru.c index 2e99efc032..e1d2bc0e3c 100644 --- a/MdeModulePkg/Universal/Network/IScsiDxe/IScsiExtScsiPassThru.c +++ b/MdeModulePkg/Universal/Network/IScsiDxe/IScsiExtScsiPassThru.c @@ -188,7 +188,7 @@ IScsiExtScsiPassThruBuildDevicePath ( Node->DevPath.Type = MESSAGING_DEVICE_PATH; Node->DevPath.SubType = MSG_ISCSI_DP; - SetDevicePathNodeLength (&Node->DevPath, DevPathNodeLen); + SetDevicePathNodeLength (&Node->DevPath, (UINT16)DevPathNodeLen); // // 0 for TCP, others are reserved. diff --git a/MdeModulePkg/Universal/PlatformDriverOverride/PlatOverMngr/PlatOverMngr.c b/MdeModulePkg/Universal/PlatformDriverOverride/PlatOverMngr/PlatOverMngr.c index 5269c35198..5d9bfe127a 100644 --- a/MdeModulePkg/Universal/PlatformDriverOverride/PlatOverMngr/PlatOverMngr.c +++ b/MdeModulePkg/Universal/PlatformDriverOverride/PlatOverMngr/PlatOverMngr.c @@ -340,8 +340,8 @@ GetImageName ( ) { EFI_STATUS Status; - EFI_DEVICE_PATH_PROTOCOL *DevPath; EFI_DEVICE_PATH_PROTOCOL *DevPathNode; + EFI_DEVICE_PATH_PROTOCOL *AlignedDevPathNode; MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *FvFilePath; VOID *Buffer; UINTN BufferSize; @@ -357,21 +357,24 @@ GetImageName ( return NULL; } - DevPath = UnpackDevicePath (Image->FilePath); + DevPathNode = Image->FilePath; - if (DevPath == NULL) { + if (DevPathNode == NULL) { return NULL; } - DevPathNode = DevPath; - while (!IsDevicePathEnd (DevPathNode)) { + // + // Make sure device path node is aligned when accessing it's FV Name Guid field. + // + AlignedDevPathNode = AllocateCopyPool (DevicePathNodeLength(DevPathNode), DevPathNode); + // // Find the Fv File path // - NameGuid = EfiGetNameGuidFromFwVolDevicePathNode ((MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *)DevPathNode); + NameGuid = EfiGetNameGuidFromFwVolDevicePathNode ((MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *)AlignedDevPathNode); if (NameGuid != NULL) { - FvFilePath = (MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *) DevPathNode; + FvFilePath = (MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *) AlignedDevPathNode; Status = gBS->HandleProtocol ( Image->DeviceHandle, &gEfiFirmwareVolume2ProtocolGuid, @@ -388,18 +391,21 @@ GetImageName ( &AuthenticationStatus ); if (!EFI_ERROR (Status)) { + FreePool (AlignedDevPathNode); break; } Buffer = NULL; } } + + FreePool (AlignedDevPathNode); + // // Next device path node // DevPathNode = NextDevicePathNode (DevPathNode); } - gBS->FreePool (DevPath); return Buffer; } @@ -1316,74 +1322,6 @@ PlatOverMngrCallback ( return EFI_SUCCESS; } -/** - Function unpacks a device path data structure so that all the nodes - of a device path are naturally aligned. - - @param DevPath A pointer to a device path data structure - - @return If the memory for the device path is successfully allocated, then a - @return pointer to the new device path is returned. Otherwise, NULL is returned. - -**/ -EFI_DEVICE_PATH_PROTOCOL * -UnpackDevicePath ( - IN EFI_DEVICE_PATH_PROTOCOL *DevPath - ) -{ - EFI_DEVICE_PATH_PROTOCOL *Src; - EFI_DEVICE_PATH_PROTOCOL *Dest; - EFI_DEVICE_PATH_PROTOCOL *NewPath; - UINTN Size; - - // - // Walk device path and round sizes to valid boundries - // - Src = DevPath; - Size = 0; - for (;;) { - Size += DevicePathNodeLength (Src); - Size += ALIGN_SIZE (Size); - - if (IsDevicePathEnd (Src)) { - break; - } - - Src = NextDevicePathNode (Src); - } - // - // Allocate space for the unpacked path - // - NewPath = AllocateZeroPool (Size); - if (NewPath) { - - ASSERT (((UINTN) NewPath) % MIN_ALIGNMENT_SIZE == 0); - - // - // Copy each node - // - Src = DevPath; - Dest = NewPath; - for (;;) { - Size = DevicePathNodeLength (Src); - CopyMem (Dest, Src, Size); - Size += ALIGN_SIZE (Size); - SetDevicePathNodeLength (Dest, Size); - Dest->Type |= EFI_DP_TYPE_UNPACKED; - Dest = (EFI_DEVICE_PATH_PROTOCOL *) (((UINT8 *) Dest) + Size); - - if (IsDevicePathEnd (Src)) { - break; - } - - Src = NextDevicePathNode (Src); - } - } - - return NewPath; -} - - /** Get the description string by device path. diff --git a/MdeModulePkg/Universal/PlatformDriverOverride/PlatOverMngr/PlatOverMngr.h b/MdeModulePkg/Universal/PlatformDriverOverride/PlatOverMngr/PlatOverMngr.h index 793f9d83c9..5ac780c8bf 100644 --- a/MdeModulePkg/Universal/PlatformDriverOverride/PlatOverMngr/PlatOverMngr.h +++ b/MdeModulePkg/Universal/PlatformDriverOverride/PlatOverMngr/PlatOverMngr.h @@ -49,6 +49,7 @@ Abstract: #include #include #include +#include #define MIN_ALIGNMENT_SIZE 4 #define ALIGN_SIZE(a) ((a % MIN_ALIGNMENT_SIZE) ? MIN_ALIGNMENT_SIZE - (a % MIN_ALIGNMENT_SIZE) : 0) @@ -171,10 +172,4 @@ DevicePathToStr ( EFI_DEVICE_PATH_PROTOCOL *DevPath ); - -EFI_DEVICE_PATH_PROTOCOL * -UnpackDevicePath ( - IN EFI_DEVICE_PATH_PROTOCOL *DevPath - ); - #endif diff --git a/MdeModulePkg/Universal/PlatformDriverOverride/PlatOverMngr/PlatOverMngr.inf b/MdeModulePkg/Universal/PlatformDriverOverride/PlatOverMngr/PlatOverMngr.inf index f4b37825d5..3f529133b1 100644 --- a/MdeModulePkg/Universal/PlatformDriverOverride/PlatOverMngr/PlatOverMngr.inf +++ b/MdeModulePkg/Universal/PlatformDriverOverride/PlatOverMngr/PlatOverMngr.inf @@ -58,7 +58,8 @@ HiiLib ExtendedHiiLib UefiRuntimeServicesTableLib - + DevicePathLib + [Protocols] gEfiLoadedImageProtocolGuid # PROTOCOL ALWAYS_CONSUMED gEfiPciIoProtocolGuid # PROTOCOL ALWAYS_CONSUMED