mirror of https://github.com/acidanthera/audk.git
Enhance the ConPlatform driver's matching algorithm to manage the console controller when it shares the same parent with a certain instance in the "ConOut".
Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com> Reviewed-by: Elvin Li <elvin.li@intel.com> git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13356 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
25918452ed
commit
19f508823e
|
@ -2,7 +2,7 @@
|
||||||
Console Platform DXE Driver, install Console Device Guids and update Console
|
Console Platform DXE Driver, install Console Device Guids and update Console
|
||||||
Environment Variables.
|
Environment Variables.
|
||||||
|
|
||||||
Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
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
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
|
@ -771,6 +771,53 @@ ConPlatformGetVariable (
|
||||||
return Buffer;
|
return Buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Function returns TRUE when the two input device paths point to the two
|
||||||
|
GOP child handles that have the same parent.
|
||||||
|
|
||||||
|
@param Left A pointer to a device path data structure.
|
||||||
|
@param Right A pointer to a device path data structure.
|
||||||
|
|
||||||
|
@retval TRUE Left and Right share the same parent.
|
||||||
|
@retval FALSE Left and Right don't share the same parent or either of them is not
|
||||||
|
a GOP device path.
|
||||||
|
**/
|
||||||
|
BOOLEAN
|
||||||
|
IsGopSibling (
|
||||||
|
IN EFI_DEVICE_PATH_PROTOCOL *Left,
|
||||||
|
IN EFI_DEVICE_PATH_PROTOCOL *Right
|
||||||
|
)
|
||||||
|
{
|
||||||
|
EFI_DEVICE_PATH_PROTOCOL *NodeLeft;
|
||||||
|
EFI_DEVICE_PATH_PROTOCOL *NodeRight;
|
||||||
|
|
||||||
|
for (NodeLeft = Left; !IsDevicePathEndType (NodeLeft); NodeLeft = NextDevicePathNode (NodeLeft)) {
|
||||||
|
if (DevicePathType (NodeLeft) == ACPI_DEVICE_PATH && DevicePathSubType (NodeLeft) == ACPI_ADR_DP) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IsDevicePathEndType (NodeLeft)) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (NodeRight = Right; !IsDevicePathEndType (NodeRight); NodeRight = NextDevicePathNode (NodeRight)) {
|
||||||
|
if (DevicePathType (NodeRight) == ACPI_DEVICE_PATH && DevicePathSubType (NodeRight) == ACPI_ADR_DP) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IsDevicePathEndType (NodeRight)) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (((UINTN) NodeLeft - (UINTN) Left) != ((UINTN) NodeRight - (UINTN) Right)) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (BOOLEAN) (CompareMem (Left, Right, (UINTN) NodeLeft - (UINTN) Left) == 0);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Function compares a device path data structure to that of all the nodes of a
|
Function compares a device path data structure to that of all the nodes of a
|
||||||
second device path instance.
|
second device path instance.
|
||||||
|
@ -830,7 +877,7 @@ ConPlatformMatchDevicePaths (
|
||||||
// Search for the match of 'Single' in 'Multi'
|
// Search for the match of 'Single' in 'Multi'
|
||||||
//
|
//
|
||||||
while (DevicePathInst != NULL) {
|
while (DevicePathInst != NULL) {
|
||||||
if (CompareMem (Single, DevicePathInst, Size) == 0) {
|
if ((CompareMem (Single, DevicePathInst, Size) == 0) || IsGopSibling (Single, DevicePathInst)) {
|
||||||
if (!Delete) {
|
if (!Delete) {
|
||||||
//
|
//
|
||||||
// If Delete is FALSE, return EFI_SUCCESS if Single is found in Multi.
|
// If Delete is FALSE, return EFI_SUCCESS if Single is found in Multi.
|
||||||
|
|
Loading…
Reference in New Issue