diff options
author | klu2 <klu2@6f19259b-4bc3-4df7-8a09-765794883524> | 2008-11-11 15:42:40 +0000 |
---|---|---|
committer | klu2 <klu2@6f19259b-4bc3-4df7-8a09-765794883524> | 2008-11-11 15:42:40 +0000 |
commit | 1232b21473646661a4ac1ae4b7bf5113d4613e83 (patch) | |
tree | d941add025ac902858b1aa8cf38ffaa055baa41b | |
parent | e5dab01618850f8c8be029336ad93dcd1680865f (diff) | |
download | edk2-platforms-1232b21473646661a4ac1ae4b7bf5113d4613e83.tar.xz |
1, Add <Library/DevicePathLib.h> for all source that use device path utility macros
2, Add DevicePathLib library class to module's INF that use device path utility macros
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@6456 6f19259b-4bc3-4df7-8a09-765794883524
21 files changed, 61 insertions, 295 deletions
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 <Library/BaseMemoryLib.h>
#include <Library/UefiBootServicesTableLib.h>
#include <Library/UefiLib.h>
+#include <Library/DevicePathLib.h>
#include <IndustryStandard/Pci.h>
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 @@ -506,22 +506,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
@param Multi A pointer to a multi-instance device path data
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 <Library/UefiRuntimeServicesTableLib.h>
#include <Library/UefiLib.h>
#include <Library/MemoryAllocationLib.h>
-
+#include <Library/DevicePathLib.h>
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 <Library/DebugLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/UefiBootServicesTableLib.h>
+#include <Library/DevicePathLib.h>
#include <MdeModuleHii.h>
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.
@@ -1546,12 +1477,6 @@ DevicePathToStr ( }
//
- // Unpacked the device path
- //
- DevPath = BdsLibUnpackDevicePath (DevPath);
- ASSERT (DevPath);
-
- //
// Process each device path node
//
DevPathNode = DevPath;
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 @@ -15,76 +15,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.
@param OldPool A pointer to the buffer whose size is being adjusted.
@@ -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);
@@ -1865,15 +1795,9 @@ 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 <Library/BaseMemoryLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/UefiBootServicesTableLib.h>
+#include <Library/DevicePathLib.h>
#include <WorkingBlockHeader.h>
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;
}
@@ -1317,74 +1323,6 @@ PlatOverMngrCallback ( }
/**
- 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.
@param DevPath The input 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 <Library/HiiLib.h>
#include <Library/ExtendedHiiLib.h>
#include <Library/UefiRuntimeServicesTableLib.h>
+#include <Library/DevicePathLib.h>
#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
|