mirror of https://github.com/acidanthera/audk.git
ArmPlatformPkg/Bds: Corrected boot type detection
Corrected the detection of file system and memory map boot option types. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ronald Cron <ronald.cron@arm.com> Reviewed-By: Olivier Martin <olivier.martin@arm.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15717 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
66982010ed
commit
22a50a13e5
|
@ -458,16 +458,47 @@ BdsLoadOptionFileSystemUpdateDevicePath (
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Check if a boot option path is a file system boot option path or not.
|
||||||
|
|
||||||
|
The device specified by the beginning of the path has to support the Simple File
|
||||||
|
System protocol. Furthermore, the remaining part of the path has to be composed of
|
||||||
|
a single node of type MEDIA_DEVICE_PATH and sub-type MEDIA_FILEPATH_DP.
|
||||||
|
|
||||||
|
@param[in] DevicePath Complete device path of a boot option.
|
||||||
|
|
||||||
|
@retval FALSE The boot option path has not been identified as that of a
|
||||||
|
file system boot option.
|
||||||
|
@retval TRUE The boot option path is a file system boot option.
|
||||||
|
**/
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
BdsLoadOptionFileSystemIsSupported (
|
BdsLoadOptionFileSystemIsSupported (
|
||||||
IN EFI_DEVICE_PATH *DevicePath
|
IN EFI_DEVICE_PATH *DevicePath
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_DEVICE_PATH* DevicePathNode;
|
EFI_STATUS Status;
|
||||||
|
EFI_HANDLE Handle;
|
||||||
|
EFI_DEVICE_PATH *RemainingDevicePath;
|
||||||
|
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *FileProtocol;
|
||||||
|
|
||||||
DevicePathNode = GetLastDevicePathNode (DevicePath);
|
Status = BdsConnectDevicePath (DevicePath, &Handle, &RemainingDevicePath);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
return IS_DEVICE_PATH_NODE(DevicePathNode,MEDIA_DEVICE_PATH,MEDIA_FILEPATH_DP);
|
Status = gBS->HandleProtocol (
|
||||||
|
Handle,
|
||||||
|
&gEfiSimpleFileSystemProtocolGuid,
|
||||||
|
(VOID **)(&FileProtocol)
|
||||||
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!IS_DEVICE_PATH_NODE (RemainingDevicePath, MEDIA_DEVICE_PATH, MEDIA_FILEPATH_DP))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC
|
STATIC
|
||||||
|
@ -643,16 +674,47 @@ BdsLoadOptionMemMapUpdateDevicePath (
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Check if a boot option path is a memory map boot option path or not.
|
||||||
|
|
||||||
|
The device specified by the beginning of the path has to support the BlockIo
|
||||||
|
protocol. Furthermore, the remaining part of the path has to be composed of
|
||||||
|
a single node of type HARDWARE_DEVICE_PATH and sub-type HW_MEMMAP_DP.
|
||||||
|
|
||||||
|
@param[in] DevicePath Complete device path of a boot option.
|
||||||
|
|
||||||
|
@retval FALSE The boot option path has not been identified as that of a
|
||||||
|
memory map boot option.
|
||||||
|
@retval TRUE The boot option path is a a memory map boot option.
|
||||||
|
**/
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
BdsLoadOptionMemMapIsSupported (
|
BdsLoadOptionMemMapIsSupported (
|
||||||
IN EFI_DEVICE_PATH *DevicePath
|
IN EFI_DEVICE_PATH *DevicePath
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_DEVICE_PATH* DevicePathNode;
|
EFI_STATUS Status;
|
||||||
|
EFI_HANDLE Handle;
|
||||||
|
EFI_DEVICE_PATH *RemainingDevicePath;
|
||||||
|
EFI_BLOCK_IO_PROTOCOL *BlockIoProtocol;
|
||||||
|
|
||||||
DevicePathNode = GetLastDevicePathNode (DevicePath);
|
Status = BdsConnectDevicePath (DevicePath, &Handle, &RemainingDevicePath);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
return IS_DEVICE_PATH_NODE(DevicePathNode,HARDWARE_DEVICE_PATH,HW_MEMMAP_DP);
|
Status = gBS->HandleProtocol (
|
||||||
|
Handle,
|
||||||
|
&gEfiBlockIoProtocolGuid,
|
||||||
|
(VOID **)(&BlockIoProtocol)
|
||||||
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!IS_DEVICE_PATH_NODE (RemainingDevicePath, HARDWARE_DEVICE_PATH, HW_MEMMAP_DP))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
|
@ -748,7 +810,7 @@ BdsLoadOptionPxeUpdateDevicePath (
|
||||||
|
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
BdsLoadOptionPxeIsSupported (
|
BdsLoadOptionPxeIsSupported (
|
||||||
IN EFI_DEVICE_PATH *DevicePath
|
IN EFI_DEVICE_PATH *DevicePath
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
|
Loading…
Reference in New Issue