mirror of https://github.com/acidanthera/audk.git
Enhance DxeCore LocateDevicePath() boot service to handle muli-instance device path.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9294 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
47e1a80bbc
commit
dc07b3d549
|
@ -1,7 +1,7 @@
|
|||
/** @file
|
||||
Locate handle functions
|
||||
|
||||
Copyright (c) 2006 - 2008, Intel Corporation. <BR>
|
||||
Copyright (c) 2006 - 2009, Intel Corporation. <BR>
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
|
@ -451,7 +451,19 @@ CoreLocateDevicePath (
|
|||
|
||||
*Device = NULL;
|
||||
SourcePath = *DevicePath;
|
||||
SourceSize = GetDevicePathSize (SourcePath) - sizeof(EFI_DEVICE_PATH_PROTOCOL);
|
||||
TmpDevicePath = SourcePath;
|
||||
while (!IsDevicePathEnd (TmpDevicePath)) {
|
||||
if (IsDevicePathEndInstance (TmpDevicePath)) {
|
||||
//
|
||||
// If DevicePath is a multi-instance device path,
|
||||
// the function will operate on the first instance
|
||||
//
|
||||
break;
|
||||
}
|
||||
TmpDevicePath = NextDevicePathNode (TmpDevicePath);
|
||||
}
|
||||
|
||||
SourceSize = (UINTN) TmpDevicePath - (UINTN) SourcePath;
|
||||
|
||||
//
|
||||
// The source path can only have 1 instance
|
||||
|
@ -487,7 +499,7 @@ CoreLocateDevicePath (
|
|||
if ((Size <= SourceSize) && CompareMem (SourcePath, TmpDevicePath, Size) == 0) {
|
||||
//
|
||||
// If the size is equal to the best match, then we
|
||||
// have a duplice device path for 2 different device
|
||||
// have a duplicate device path for 2 different device
|
||||
// handles
|
||||
//
|
||||
ASSERT (Size != BestMatch);
|
||||
|
|
Loading…
Reference in New Issue