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
This commit is contained in:
@@ -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
|
||||
|
@@ -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
|
||||
//
|
||||
|
Reference in New Issue
Block a user