mirror of https://github.com/acidanthera/audk.git
ConfigRouting should get driver handle by device path in all drivers database in system, not only in Hii Package list database.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8284 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
8d579453d3
commit
326c6b7130
|
@ -1,7 +1,7 @@
|
||||||
/** @file
|
/** @file
|
||||||
Implementation of interfaces function for EFI_HII_CONFIG_ROUTING_PROTOCOL.
|
Implementation of interfaces function for EFI_HII_CONFIG_ROUTING_PROTOCOL.
|
||||||
|
|
||||||
Copyright (c) 2007 - 2008, Intel Corporation
|
Copyright (c) 2007 - 2009, Intel Corporation
|
||||||
All rights reserved. This program and the accompanying materials
|
All rights reserved. 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
|
||||||
|
@ -506,16 +506,12 @@ HiiConfigRoutingExtractConfig (
|
||||||
OUT EFI_STRING *Results
|
OUT EFI_STRING *Results
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
HII_DATABASE_PRIVATE_DATA *Private;
|
|
||||||
EFI_STRING StringPtr;
|
EFI_STRING StringPtr;
|
||||||
EFI_STRING ConfigRequest;
|
EFI_STRING ConfigRequest;
|
||||||
UINTN Length;
|
UINTN Length;
|
||||||
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
||||||
|
EFI_DEVICE_PATH_PROTOCOL *TempDevicePath;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
LIST_ENTRY *Link;
|
|
||||||
HII_DATABASE_RECORD *Database;
|
|
||||||
UINT8 *DevicePathPkg;
|
|
||||||
UINT8 *CurrentDevicePath;
|
|
||||||
EFI_HANDLE DriverHandle;
|
EFI_HANDLE DriverHandle;
|
||||||
EFI_HII_CONFIG_ACCESS_PROTOCOL *ConfigAccess;
|
EFI_HII_CONFIG_ACCESS_PROTOCOL *ConfigAccess;
|
||||||
EFI_STRING AccessProgress;
|
EFI_STRING AccessProgress;
|
||||||
|
@ -531,7 +527,6 @@ HiiConfigRoutingExtractConfig (
|
||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
Private = CONFIG_ROUTING_DATABASE_PRIVATE_DATA_FROM_THIS (This);
|
|
||||||
StringPtr = Request;
|
StringPtr = Request;
|
||||||
*Progress = StringPtr;
|
*Progress = StringPtr;
|
||||||
|
|
||||||
|
@ -585,33 +580,20 @@ HiiConfigRoutingExtractConfig (
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Find driver which matches the routing data.
|
// Find driver handle by device path
|
||||||
//
|
//
|
||||||
DriverHandle = NULL;
|
DriverHandle = NULL;
|
||||||
for (Link = Private->DatabaseList.ForwardLink;
|
TempDevicePath = DevicePath;
|
||||||
Link != &Private->DatabaseList;
|
Status = gBS->LocateDevicePath (
|
||||||
Link = Link->ForwardLink
|
&gEfiDevicePathProtocolGuid,
|
||||||
) {
|
&TempDevicePath,
|
||||||
Database = CR (Link, HII_DATABASE_RECORD, DatabaseEntry, HII_DATABASE_RECORD_SIGNATURE);
|
&DriverHandle
|
||||||
|
);
|
||||||
if ((DevicePathPkg = Database->PackageList->DevicePathPkg) != NULL) {
|
|
||||||
CurrentDevicePath = DevicePathPkg + sizeof (EFI_HII_PACKAGE_HEADER);
|
|
||||||
if (CompareMem (
|
|
||||||
DevicePath,
|
|
||||||
CurrentDevicePath,
|
|
||||||
GetDevicePathSize ((EFI_DEVICE_PATH_PROTOCOL *) CurrentDevicePath)
|
|
||||||
) == 0) {
|
|
||||||
DriverHandle = Database->DriverHandle;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
FreePool (DevicePath);
|
FreePool (DevicePath);
|
||||||
|
|
||||||
if (DriverHandle == NULL) {
|
if (EFI_ERROR (Status) || (DriverHandle == NULL)) {
|
||||||
//
|
//
|
||||||
// Routing data does not match any known driver.
|
// Cannot find any known driver.
|
||||||
// Set Progress to the 'G' in "GUID" of the routing header.
|
// Set Progress to the 'G' in "GUID" of the routing header.
|
||||||
//
|
//
|
||||||
*Progress = StringPtr;
|
*Progress = StringPtr;
|
||||||
|
@ -822,16 +804,12 @@ HiiConfigRoutingRouteConfig (
|
||||||
OUT EFI_STRING *Progress
|
OUT EFI_STRING *Progress
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
HII_DATABASE_PRIVATE_DATA *Private;
|
|
||||||
EFI_STRING StringPtr;
|
EFI_STRING StringPtr;
|
||||||
EFI_STRING ConfigResp;
|
EFI_STRING ConfigResp;
|
||||||
UINTN Length;
|
UINTN Length;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
||||||
LIST_ENTRY *Link;
|
EFI_DEVICE_PATH_PROTOCOL *TempDevicePath;
|
||||||
HII_DATABASE_RECORD *Database;
|
|
||||||
UINT8 *DevicePathPkg;
|
|
||||||
UINT8 *CurrentDevicePath;
|
|
||||||
EFI_HANDLE DriverHandle;
|
EFI_HANDLE DriverHandle;
|
||||||
EFI_HII_CONFIG_ACCESS_PROTOCOL *ConfigAccess;
|
EFI_HII_CONFIG_ACCESS_PROTOCOL *ConfigAccess;
|
||||||
EFI_STRING AccessProgress;
|
EFI_STRING AccessProgress;
|
||||||
|
@ -845,7 +823,6 @@ HiiConfigRoutingRouteConfig (
|
||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
Private = CONFIG_ROUTING_DATABASE_PRIVATE_DATA_FROM_THIS (This);
|
|
||||||
StringPtr = Configuration;
|
StringPtr = Configuration;
|
||||||
*Progress = StringPtr;
|
*Progress = StringPtr;
|
||||||
|
|
||||||
|
@ -891,33 +868,20 @@ HiiConfigRoutingRouteConfig (
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Find driver which matches the routing data.
|
// Find driver handle by device path
|
||||||
//
|
//
|
||||||
DriverHandle = NULL;
|
DriverHandle = NULL;
|
||||||
for (Link = Private->DatabaseList.ForwardLink;
|
TempDevicePath = DevicePath;
|
||||||
Link != &Private->DatabaseList;
|
Status = gBS->LocateDevicePath (
|
||||||
Link = Link->ForwardLink
|
&gEfiDevicePathProtocolGuid,
|
||||||
) {
|
&TempDevicePath,
|
||||||
Database = CR (Link, HII_DATABASE_RECORD, DatabaseEntry, HII_DATABASE_RECORD_SIGNATURE);
|
&DriverHandle
|
||||||
|
);
|
||||||
if ((DevicePathPkg = Database->PackageList->DevicePathPkg) != NULL) {
|
|
||||||
CurrentDevicePath = DevicePathPkg + sizeof (EFI_HII_PACKAGE_HEADER);
|
|
||||||
if (CompareMem (
|
|
||||||
DevicePath,
|
|
||||||
CurrentDevicePath,
|
|
||||||
GetDevicePathSize ((EFI_DEVICE_PATH_PROTOCOL *) CurrentDevicePath)
|
|
||||||
) == 0) {
|
|
||||||
DriverHandle = Database->DriverHandle;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
FreePool (DevicePath);
|
FreePool (DevicePath);
|
||||||
|
|
||||||
if (DriverHandle == NULL) {
|
if (EFI_ERROR (Status) || (DriverHandle == NULL)) {
|
||||||
//
|
//
|
||||||
// Routing data does not match any known driver.
|
// Cannot find any known driver.
|
||||||
// Set Progress to the 'G' in "GUID" of the routing header.
|
// Set Progress to the 'G' in "GUID" of the routing header.
|
||||||
//
|
//
|
||||||
*Progress = StringPtr;
|
*Progress = StringPtr;
|
||||||
|
@ -1018,7 +982,6 @@ HiiBlockToConfig (
|
||||||
OUT EFI_STRING *Progress
|
OUT EFI_STRING *Progress
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
HII_DATABASE_PRIVATE_DATA *Private;
|
|
||||||
EFI_STRING StringPtr;
|
EFI_STRING StringPtr;
|
||||||
UINTN Length;
|
UINTN Length;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
@ -1042,10 +1005,6 @@ HiiBlockToConfig (
|
||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Private = CONFIG_ROUTING_DATABASE_PRIVATE_DATA_FROM_THIS (This);
|
|
||||||
ASSERT (Private != NULL);
|
|
||||||
|
|
||||||
StringPtr = ConfigRequest;
|
StringPtr = ConfigRequest;
|
||||||
ValueStr = NULL;
|
ValueStr = NULL;
|
||||||
Value = NULL;
|
Value = NULL;
|
||||||
|
|
Loading…
Reference in New Issue