MdeModulePkg/UefiBootManagerLib: Expose *GetLoadOptionBuffer() API

Expose EfiBootManagerGetLoadOptionBuffer() API.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
This commit is contained in:
Ruiyu Ni
2016-04-21 13:28:31 +08:00
parent d0a23f9f86
commit 4ed2440d44
4 changed files with 29 additions and 26 deletions

View File

@ -1,7 +1,7 @@
/** @file /** @file
Provide Boot Manager related library APIs. Provide Boot Manager related library APIs.
Copyright (c) 2011 - 2015, Intel Corporation. All rights reserved.<BR> Copyright (c) 2011 - 2016, Intel Corporation. All rights reserved.<BR>
(C) Copyright 2015-2016 Hewlett Packard Enterprise Development LP<BR> (C) Copyright 2015-2016 Hewlett Packard Enterprise Development LP<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
@ -431,6 +431,27 @@ EfiBootManagerGetBootManagerMenu (
EFI_BOOT_MANAGER_LOAD_OPTION *BootOption EFI_BOOT_MANAGER_LOAD_OPTION *BootOption
); );
/**
Get the load option by its device path.
@param FilePath The device path pointing to a load option.
It could be a short-form device path.
@param FullPath Return the full device path of the load option after
short-form device path expanding.
Caller is responsible to free it.
@param FileSize Return the load option size.
@return The load option buffer. Caller is responsible to free the memory.
**/
VOID *
EFIAPI
EfiBootManagerGetLoadOptionBuffer (
IN EFI_DEVICE_PATH_PROTOCOL *FilePath,
OUT EFI_DEVICE_PATH_PROTOCOL **FullPath,
OUT UINTN *FileSize
);
/** /**
The function enumerates all the legacy boot options, creates them and The function enumerates all the legacy boot options, creates them and
registers them in the BootOrder variable. registers them in the BootOrder variable.

View File

@ -586,7 +586,7 @@ BmExpandUsbDevicePath (
for (Index = 0; (Index < HandleCount) && (FileBuffer == NULL); Index++) { for (Index = 0; (Index < HandleCount) && (FileBuffer == NULL); Index++) {
FullDevicePath = AppendDevicePath (DevicePathFromHandle (Handles[Index]), RemainingDevicePath); FullDevicePath = AppendDevicePath (DevicePathFromHandle (Handles[Index]), RemainingDevicePath);
FileBuffer = BmGetLoadOptionBuffer (FullDevicePath, FullPath, FileSize); FileBuffer = EfiBootManagerGetLoadOptionBuffer (FullDevicePath, FullPath, FileSize);
FreePool (FullDevicePath); FreePool (FullDevicePath);
} }
@ -851,7 +851,7 @@ BmExpandPartitionDevicePath (
Status = EfiBootManagerConnectDevicePath (Instance, NULL); Status = EfiBootManagerConnectDevicePath (Instance, NULL);
if (!EFI_ERROR (Status)) { if (!EFI_ERROR (Status)) {
TempDevicePath = AppendDevicePath (Instance, NextDevicePathNode (FilePath)); TempDevicePath = AppendDevicePath (Instance, NextDevicePathNode (FilePath));
FileBuffer = BmGetLoadOptionBuffer (TempDevicePath, FullPath, FileSize); FileBuffer = EfiBootManagerGetLoadOptionBuffer (TempDevicePath, FullPath, FileSize);
FreePool (TempDevicePath); FreePool (TempDevicePath);
if (FileBuffer != NULL) { if (FileBuffer != NULL) {
@ -911,7 +911,7 @@ BmExpandPartitionDevicePath (
// Find the matched partition device path // Find the matched partition device path
// //
TempDevicePath = AppendDevicePath (BlockIoDevicePath, NextDevicePathNode (FilePath)); TempDevicePath = AppendDevicePath (BlockIoDevicePath, NextDevicePathNode (FilePath));
FileBuffer = BmGetLoadOptionBuffer (TempDevicePath, FullPath, FileSize); FileBuffer = EfiBootManagerGetLoadOptionBuffer (TempDevicePath, FullPath, FileSize);
FreePool (TempDevicePath); FreePool (TempDevicePath);
if (FileBuffer != NULL) { if (FileBuffer != NULL) {
@ -1425,7 +1425,8 @@ BmGetFileBufferFromLoadFiles (
@return The load option buffer. Caller is responsible to free the memory. @return The load option buffer. Caller is responsible to free the memory.
**/ **/
VOID * VOID *
BmGetLoadOptionBuffer ( EFIAPI
EfiBootManagerGetLoadOptionBuffer (
IN EFI_DEVICE_PATH_PROTOCOL *FilePath, IN EFI_DEVICE_PATH_PROTOCOL *FilePath,
OUT EFI_DEVICE_PATH_PROTOCOL **FullPath, OUT EFI_DEVICE_PATH_PROTOCOL **FullPath,
OUT UINTN *FileSize OUT UINTN *FileSize
@ -1648,7 +1649,7 @@ EfiBootManagerBoot (
RamDiskDevicePath = NULL; RamDiskDevicePath = NULL;
if (DevicePathType (BootOption->FilePath) != BBS_DEVICE_PATH) { if (DevicePathType (BootOption->FilePath) != BBS_DEVICE_PATH) {
Status = EFI_NOT_FOUND; Status = EFI_NOT_FOUND;
FileBuffer = BmGetLoadOptionBuffer (BootOption->FilePath, &FilePath, &FileSize); FileBuffer = EfiBootManagerGetLoadOptionBuffer (BootOption->FilePath, &FilePath, &FileSize);
if (FileBuffer != NULL) { if (FileBuffer != NULL) {
RamDiskDevicePath = BmGetRamDiskDevicePath (FilePath); RamDiskDevicePath = BmGetRamDiskDevicePath (FilePath);
} }

View File

@ -1281,7 +1281,7 @@ EfiBootManagerProcessLoadOption (
mBmLoadOptionName[LoadOption->OptionType], LoadOption->OptionNumber mBmLoadOptionName[LoadOption->OptionType], LoadOption->OptionNumber
)); ));
ImageHandle = NULL; ImageHandle = NULL;
FileBuffer = BmGetLoadOptionBuffer (LoadOption->FilePath, &FilePath, &FileSize); FileBuffer = EfiBootManagerGetLoadOptionBuffer (LoadOption->FilePath, &FilePath, &FileSize);
DEBUG_CODE ( DEBUG_CODE (
if (FileBuffer != NULL && CompareMem (LoadOption->FilePath, FilePath, GetDevicePathSize (FilePath)) != 0) { if (FileBuffer != NULL && CompareMem (LoadOption->FilePath, FilePath, GetDevicePathSize (FilePath)) != 0) {
DEBUG ((EFI_D_INFO, "[Bds] DevicePath expand: ")); DEBUG ((EFI_D_INFO, "[Bds] DevicePath expand: "));

View File

@ -310,25 +310,6 @@ BmSetVariableAndReportStatusCodeOnError (
IN VOID *Data IN VOID *Data
); );
/**
Get the load option by its device path.
@param FilePath The device path pointing to a load option.
It could be a short-form device path.
@param FullPath Return the full device path of the load option after
short-form device path expanding.
Caller is responsible to free it.
@param FileSize Return the load option size.
@return The load option buffer. Caller is responsible to free the memory.
**/
VOID *
BmGetLoadOptionBuffer (
IN EFI_DEVICE_PATH_PROTOCOL *FilePath,
OUT EFI_DEVICE_PATH_PROTOCOL **FullPath,
OUT UINTN *FileSize
);
/** /**
Return whether the PE header of the load option is valid or not. Return whether the PE header of the load option is valid or not.