0) Change the PEI core behavior to not install FV HOB for each FV INFO PPI installed. This allows more freedom to platform developer to choose to expose which FV to PEI core or DXE core.

1) Split MdePkg/Include/Library/PiLib.h to DxePiLib.h and PeiPiLib.h. These two library classes are for DXE phase and PEI phase.
2) Update the API names in DxePiLib and PeiPiLib to be longer ones to be more meaningfull and to avoid name collisions. 

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@4067 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
qwang12 2007-10-10 02:08:22 +00:00
parent 10dde96f95
commit 166152e85c
6 changed files with 172 additions and 455 deletions

View File

@ -17,94 +17,13 @@
#include <Pi/PiFirmwareFile.h>
/**
Allocate and fill a buffer with an image identified by a Firmware File GUID name and a Firmware Section type.
The Firmware Volumes to search for the Firmware File can be specified to be either all Firmware Volumes
in the system, or the Firmware Volume which contains the Firmware File specified by an image handle.
If ImageHandle is NULL, all Firmware Volumes in the system will be searched. If ImageHandle is not NULL,
ImageHandle is interpreted as EFI_PEI_FILE_HANDLE for the implementation of this function for PEI phase.
The input parameter ImageHandle is interpreted as EFI_HANDLE, on which an EFI_LOADED_IMAGE_PROTOCOL
is installed, for the implementation of this function for DXE phase. The search always starts from the FV
identified by ImageHandle. If WithinImageFv is TRUE, search will only be performed on the first FV. If WithinImageFv
is FALSE, search will continue on other FVs if it fails on the first FV. The search order of Firmware Volumes is
deterministic but arbitrary if no new firmware volume is added into the system between each search.
The search order for the section type specified by SectionType in the Firmware File is using a depth-first
and left-to-right algorithm through all sections. The first section found to match SectionType will be returned.
If SectionType is EFI_SECTION_PE32, EFI_SECTION_PE32 will be used as Firmware Section type
to read Firmware Section data from the Firmware File. If no such section exists, the function will try
to read a Firmware File named with NameGuid. If no such file exists, EFI_NOT_FOUND is returned.
If SectionType is EFI_SECTION_TE, EFI_SECTION_TE will be used as Firmware Section type to read Firmware Section
data from the Firmware File. If no such section exists, EFI_SECTION_PE32 will be used as Firmware Section type to
read Firmware Section data from the Firmware File. If no such section exists, the function will try to read a Firmware
File named with NameGuid. If no such file exists, EFI_NOT_FOUND is returned.
The data and size is returned by Buffer and Size. The caller is responsible to free the Buffer allocated
by this function. This function can only be called at TPL_NOTIFY and below.
If ImageHandle is NULL and WithinImage is TRUE, then ASSERT ();
If NameGuid is NULL, then ASSERT();
If Buffer is NULL, then ASSERT();
If Size is NULL, then ASSERT().
@param NameGuid The GUID name of a Firmware File.
@param SectionType The Firmware Section type.
@param Buffer On output, Buffer contains the the data read from the section in the Firmware File found.
@param Size On output, the size of Buffer.
@retval EFI_SUCCESS The image is found and data and size is returned.
@retval EFI_NOT_FOUND The image specified by NameGuid and SectionType can't be found.
@retval EFI_OUT_OF_RESOURCES There were not enough resources to allocate the output data buffer or complete the operations.
@retval EFI_DEVICE_ERROR A hardware error occurs during reading from the Firmware Volume.
@retval EFI_ACCESS_DENIED The firmware volume containing the searched Firmware File is configured to disallow reads.
**/
EFI_STATUS
EFIAPI
GetSectionFromFvFile (
IN CONST VOID* ImageHandle OPTIONAL,
IN CONST EFI_GUID *NameGuid,
IN EFI_SECTION_TYPE SectionType,
OUT VOID **Buffer,
OUT UINTN *Size,
IN BOOLEAN WithImageFv
)
;
/**
Identify the device handle from which the Image is loaded from. As this device handle is passed to
GetSectionFromFv as the identifier for a Firmware Volume, an EFI_FIRMWARE_VOLUME2_PROTOCOL
protocol instance should be located succesfully by calling gBS->HandleProtocol ().
This function locates the EFI_LOADED_IMAGE_PROTOCOL instance installed
on ImageHandle. It then returns EFI_LOADED_IMAGE_PROTOCOL.DeviceHandle.
If ImageHandle is NULL, then ASSERT ();
If failed to locate a EFI_LOADED_IMAGE_PROTOCOL on ImageHandle, then ASSERT ();
@param ImageHandle The firmware allocated handle for UEFI image.
@retval EFI_HANDLE The device handle from which the Image is loaded from.
**/
EFI_HANDLE
EFIAPI
ImageHandleToFvHandle (
EFI_HANDLE ImageHandle
)
;
/**
Allocate and fill a buffer from the Firmware Section identified by a Firmware File GUID name and a Firmware
Section type and instance number from the any Firmware Volumes in the system.
Section type and instance number from any Firmware Volumes in the system.
The function will read the first Firmware Section found sepcifed by NameGuid and SectionType from the
any Firmware Volume in the system.
The function will read the first Firmware Section sepcifed by NameGuid, SectionType and Instance by searching
for all Firmware Volumes in the system.
The search order for Firmware Volumes in the system is determistic but abitrary if no new Firmware Volume is installed
into the system. The search order for the section specified by SectionType within a Firmware File is defined by
@ -139,60 +58,7 @@ ImageHandleToFvHandle (
EFI_STATUS
EFIAPI
GetSectionFromAnyFv (
IN CONST EFI_GUID *NameGuid,
IN EFI_SECTION_TYPE SectionType,
IN UINTN Instance,
OUT VOID **Buffer,
OUT UINTN *Size
)
;
/**
Allocate and fill a buffer from a Firmware Section identified by a Firmware File GUID name, a Firmware
Section type and instance number from the specified Firmware Volume.
This functions first locate the EFI_FIRMWARE_VOLUME2_PROTOCOL protocol instance on FvHandle in order to
carry out the Firmware Volume read operation. The function then reads the Firmware Section found sepcifed
by NameGuid, SectionType and Instance.
The search order for the section specified by SectionType within a Firmware File is defined by
EFI_FIRMWARE_VOLUME2_PROTOCOL.ReadSection (). Please check Section 2.4 of Volume 3: Platform Initialization
Shared Architectural Elements for detailes.
If SectionType is EFI_SECTION_TE, EFI_SECTION_TE will be used as Firmware Section type to read Firmware Section
data from the Firmware File. If no such section exists, EFI_SECTION_PE32 will be used as Firmware Section type to
read Firmware Section data from the Firmware File. If no such section specified is found to match ,
EFI_NOT_FOUND is returned.
The data and size is returned by Buffer and Size. The caller is responsible to free the Buffer allocated
by this function. This function can be only called at TPL_NOTIFY and below.
If FvHandle is NULL, then ASSERT ();
If NameGuid is NULL, then ASSERT();
If Buffer is NULL, then ASSERT();
If Size is NULL, then ASSERT().
@param FvHandle The device handle that contains a instance of EFI_FIRMWARE_VOLUME2_PROTOCOL instance.
@param NameGuid The GUID name of a Firmware File.
@param SectionType The Firmware Section type.
@param Instance The instance number of Firmware Section to read from starting from 0.
@param Buffer On output, Buffer contains the the data read from the section in the Firmware File found.
@param Size On output, the size of Buffer.
@retval EFI_SUCCESS The image is found and data and size is returned.
@retval EFI_UNSUPPORTED FvHandle does not support EFI_FIRMWARE_VOLUME2_PROTOCOL.
@retval EFI_NOT_FOUND The image specified by NameGuid and SectionType can't be found.
@retval EFI_OUT_OF_RESOURCES There were not enough resources to allocate the output data buffer or complete the operations.
@retval EFI_DEVICE_ERROR A hardware error occurs during reading from the Firmware Volume.
@retval EFI_ACCESS_DENIED The firmware volume containing the searched Firmware File is configured to disallow reads.
**/
EFI_STATUS
EFIAPI
GetSectionFromFv (
IN EFI_HANDLE FvHandle,
PiLibGetSectionFromAnyFv (
IN CONST EFI_GUID *NameGuid,
IN EFI_SECTION_TYPE SectionType,
IN UINTN Instance,
@ -243,7 +109,7 @@ GetSectionFromFv (
EFI_STATUS
EFIAPI
GetSectionFromCurrentFv (
PiLibGetSectionFromCurrentFv (
IN CONST EFI_GUID *NameGuid,
IN EFI_SECTION_TYPE SectionType,
IN UINTN Instance,
@ -295,7 +161,7 @@ GetSectionFromCurrentFv (
EFI_STATUS
EFIAPI
GetSectionFromCurrentFfs (
PiLibGetSectionFromCurrentFfs (
IN EFI_SECTION_TYPE SectionType,
IN UINTN Instance,
OUT VOID **Buffer,

View File

@ -17,13 +17,36 @@
#include <Pi/PiFirmwareFile.h>
/**
Install a EFI_PEI_FIRMWARE_VOLUME_INFO PPI to inform PEI core about the existence of a new Firmware Volume.
The function allocate the EFI_PEI_PPI_DESCRIPTOR structure and update the fields accordingly to parameter passed
in and install the PPI.
@param FvStart Unique identifier of the format of the memory-mapped firmware volume. If NULL is specified,
EFI_FIRMWARE_FILE_SYSTEM2_GUID is used as the Format GUID.
@param FvInfo Points to a buffer which allows the EFI_PEI_FIRMWARE_VOLUME_PPI to
process the volume. The format of this buffer is specific to the FvFormat. For
memory-mapped firmware volumes, this typically points to the first byte of the
firmware volume.
@param FvInfoSize Size of the data provided by FvInfo. For memory-mapped firmware volumes, this is
typically the size of the firmware volume.
@param ParentFvName, ParentFileName If the firmware volume originally came from a firmware file, then these point to the
parent firmware volume name and firmware volume file. If it did not originally come
from a firmware file, these should be NULL
@retval VOID
**/
VOID
EFIAPI
PeiPiLibBuildPiFvInfoPpi (
IN EFI_PHYSICAL_ADDRESS FvStart,
IN UINT64 FvLength,
IN EFI_GUID *ParentFvName,
IN EFI_GUID *PraentFileName
PiLibInstallFvInfoPpi (
IN EFI_GUID *FvFormat, OPTIONAL
IN VOID *FvInfo,
IN UINT32 FvInfoSize,
IN EFI_GUID *ParentFvName, OPTIONAL
IN EFI_GUID *PraentFileName OPTIONAL
);
#endif

View File

@ -16,248 +16,29 @@
#include <Library/DebugLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/UefiBootServicesTableLib.h>
#include <Library/PiLib.h>
#include <Library/DxePiLib.h>
#include <Protocol/FirmwareVolume2.h>
#include <Protocol/LoadedImage.h>
/**
Internal function which read the image specified by Firmware File GUID name and
the Firmware Section tyep from a specified Firmware Volume
Identify the device handle from which the Image is loaded from. As this device handle is passed to
GetSectionFromFv as the identifier for a Firmware Volume, an EFI_FIRMWARE_VOLUME2_PROTOCOL
protocol instance should be located succesfully by calling gBS->HandleProtocol ().
This function locates the EFI_LOADED_IMAGE_PROTOCOL instance installed
on ImageHandle. It then returns EFI_LOADED_IMAGE_PROTOCOL.DeviceHandle.
If ImageHandle is NULL, then ASSERT ();
If failed to locate a EFI_LOADED_IMAGE_PROTOCOL on ImageHandle, then ASSERT ();
@param ImageHandle The firmware allocated handle for UEFI image.
@param Fv The Firmware Volume Protocol instance.
@param NameGuid The GUID name of a Firmware File.
@param SectionType The Firmware Section type.
@param Buffer On output, Buffer contains the the data read from the section in the Firmware File found.
@param Size On output, the size of Buffer.
@retval EFI_SUCCESS The image is found and data and size is returned.
@retval EFI_NOT_FOUND The image specified by NameGuid and SectionType can't be found.
@retval EFI_OUT_OF_RESOURCES There were not enough resources to allocate the output data buffer or complete the operations.
@retval EFI_DEVICE_ERROR A hardware error occurs during reading from the Firmware Volume.
@retval EFI_ACCESS_DENIED The firmware volume containing the searched Firmware File is configured to disallow reads.
@retval EFI_HANDLE The device handle from which the Image is loaded from.
**/
STATIC
EFI_STATUS
InternalGetImageFromFv (
IN EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv,
IN CONST EFI_GUID *NameGuid,
IN EFI_SECTION_TYPE SectionType,
OUT VOID **Buffer,
OUT UINTN *Size
)
{
EFI_STATUS Status;
EFI_FV_FILETYPE FileType;
EFI_FV_FILE_ATTRIBUTES Attributes;
UINT32 AuthenticationStatus;
//
// Read desired section content in NameGuid file
//
*Buffer = NULL;
*Size = 0;
Status = Fv->ReadSection (
Fv,
NameGuid,
SectionType,
0,
Buffer,
Size,
&AuthenticationStatus
);
if (EFI_ERROR (Status) && (SectionType == EFI_SECTION_TE)) {
//
// Try reading PE32 section, since the TE section does not exist
//
*Buffer = NULL;
*Size = 0;
Status = Fv->ReadSection (
Fv,
NameGuid,
EFI_SECTION_PE32,
0,
Buffer,
Size,
&AuthenticationStatus
);
}
if (EFI_ERROR (Status) &&
((SectionType == EFI_SECTION_TE) || (SectionType == EFI_SECTION_PE32))) {
//
// Try reading raw file, since the desired section does not exist
//
*Buffer = NULL;
*Size = 0;
Status = Fv->ReadFile (
Fv,
NameGuid,
Buffer,
Size,
&FileType,
&Attributes,
&AuthenticationStatus
);
}
return Status;
}
/**
Allocate and fill a buffer with an image identified by a Firmware File GUID name and a Firmware Section type.
The Firmware Volumes to search for the Firmware File can be specified to be either all Firmware Volumes
in the system, or the Firmware Volume which contains the Firmware File specified by an image handle.
If ImageHandle is NULL, all Firmware Volumes in the system will be searched. If ImageHandle is not NULL,
ImageHandle is interpreted as EFI_PEI_FILE_HANDLE for the implementation of this function for PEI phase.
The input parameter ImageHandle is interpreted as EFI_HANDLE, on which an EFI_LOADED_IMAGE_PROTOCOL
is installed, for the implementation of this function for DXE phase. The search always starts from the FV
identified by ImageHandle. If WithinImageFv is TRUE, search will only be performed on the first FV. If WithinImageFv
is FALSE, search will continue on other FVs if it fails on the first FV. The search order of Firmware Volumes is
deterministic but arbitrary if no new firmware volume is added into the system between each search.
The search order for the section type specified by SectionType in the Firmware File is using a depth-first
and left-to-right algorithm through all sections. The first section found to match SectionType will be returned.
If SectionType is EFI_SECTION_PE32, EFI_SECTION_PE32 will be used as Firmware Section type
to read Firmware Section data from the Firmware File. If no such section exists, the function will try
to read a Firmware File named with NameGuid. If no such file exists, EFI_NOT_FOUND is returned.
If SectionType is EFI_SECTION_TE, EFI_SECTION_TE will be used as Firmware Section type to read Firmware Section
data from the Firmware File. If no such section exists, EFI_SECTION_PE32 will be used as Firmware Section type to
read Firmware Section data from the Firmware File. If no such section exists, the function will try to read a Firmware
File named with NameGuid. If no such file exists, EFI_NOT_FOUND is returned.
The data and size is returned by Buffer and Size. The caller is responsible to free the Buffer allocated
by this function. This function can only be called at TPL_NOTIFY and below.
If ImageHandle is NULL and WithinImage is TRUE, then ASSERT ();
If NameGuid is NULL, then ASSERT();
If Buffer is NULL, then ASSERT();
If Size is NULL, then ASSERT().
@param NameGuid The GUID name of a Firmware File.
@param SectionType The Firmware Section type.
@param Buffer On output, Buffer contains the the data read from the section in the Firmware File found.
@param Size On output, the size of Buffer.
@retval EFI_SUCCESS The image is found and data and size is returned.
@retval EFI_NOT_FOUND The image specified by NameGuid and SectionType can't be found.
@retval EFI_OUT_OF_RESOURCES There were not enough resources to allocate the output data buffer or complete the operations.
@retval EFI_DEVICE_ERROR A hardware error occurs during reading from the Firmware Volume.
@retval EFI_ACCESS_DENIED The firmware volume containing the searched Firmware File is configured to disallow reads.
**/
EFI_STATUS
EFIAPI
GetSectionFromFvFile (
IN CONST VOID *ImageHandle,
IN CONST EFI_GUID *NameGuid,
IN EFI_SECTION_TYPE SectionType,
OUT VOID **Buffer,
OUT UINTN *Size,
IN BOOLEAN WithinImageFv
)
{
EFI_STATUS Status;
EFI_HANDLE *HandleBuffer;
UINTN HandleCount;
UINTN Index;
EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;
EFI_FIRMWARE_VOLUME2_PROTOCOL *ImageFv;
EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv;
ASSERT (NameGuid != NULL);
ASSERT (Buffer != NULL);
ASSERT (Size != NULL);
ASSERT (!(ImageHandle == NULL && WithinImageFv));
Status = EFI_NOT_FOUND;
ImageFv = NULL;
if (ImageHandle != NULL) {
Status = gBS->HandleProtocol (
(EFI_HANDLE *) ImageHandle,
&gEfiLoadedImageProtocolGuid,
(VOID **) &LoadedImage
);
if (EFI_ERROR (Status)) {
return Status;
}
Status = gBS->HandleProtocol (
LoadedImage->DeviceHandle,
&gEfiFirmwareVolume2ProtocolGuid,
(VOID **) &ImageFv
);
if (!EFI_ERROR (Status)) {
Status = InternalGetImageFromFv (ImageFv, NameGuid, SectionType, Buffer, Size);
}
}
if (Status == EFI_SUCCESS || WithinImageFv) {
return Status;
}
HandleBuffer = NULL;
Status = gBS->LocateHandleBuffer (
ByProtocol,
&gEfiFirmwareVolume2ProtocolGuid,
NULL,
&HandleCount,
&HandleBuffer
);
if (EFI_ERROR (Status)) {
goto Done;
}
//
// Find desired image in all Fvs
//
for (Index = 0; Index < HandleCount; ++Index) {
Status = gBS->HandleProtocol (
HandleBuffer[Index],
&gEfiFirmwareVolume2ProtocolGuid,
(VOID**)&Fv
);
if (EFI_ERROR (Status)) {
goto Done;
}
if (ImageFv != NULL && Fv == ImageFv) {
continue;
}
Status = InternalGetImageFromFv (Fv, NameGuid, SectionType, Buffer, Size);
if (!EFI_ERROR (Status)) {
goto Done;
}
}
//
// Not found image
//
if (Index == HandleCount) {
Status = EFI_NOT_FOUND;
}
Done:
if (HandleBuffer != NULL) {
FreePool(HandleBuffer);
}
return Status;
}
EFI_HANDLE
EFIAPI
ImageHandleToFvHandle (
InternalImageHandleToFvHandle (
EFI_HANDLE ImageHandle
)
{
@ -278,9 +59,113 @@ ImageHandleToFvHandle (
}
/**
Allocate and fill a buffer from a Firmware Section identified by a Firmware File GUID name, a Firmware
Section type and instance number from the specified Firmware Volume.
This functions first locate the EFI_FIRMWARE_VOLUME2_PROTOCOL protocol instance on FvHandle in order to
carry out the Firmware Volume read operation. The function then reads the Firmware Section found sepcifed
by NameGuid, SectionType and Instance.
The search order for the section specified by SectionType within a Firmware File is defined by
EFI_FIRMWARE_VOLUME2_PROTOCOL.ReadSection (). Please check Section 2.4 of Volume 3: Platform Initialization
Shared Architectural Elements for detailes.
If SectionType is EFI_SECTION_TE, EFI_SECTION_TE will be used as Firmware Section type to read Firmware Section
data from the Firmware File. If no such section exists, EFI_SECTION_PE32 will be used as Firmware Section type to
read Firmware Section data from the Firmware File. If no such section specified is found to match ,
EFI_NOT_FOUND is returned.
The data and size is returned by Buffer and Size. The caller is responsible to free the Buffer allocated
by this function. This function can be only called at TPL_NOTIFY and below.
If FvHandle is NULL, then ASSERT ();
If NameGuid is NULL, then ASSERT();
If Buffer is NULL, then ASSERT();
If Size is NULL, then ASSERT().
@param FvHandle The device handle that contains a instance of EFI_FIRMWARE_VOLUME2_PROTOCOL instance.
@param NameGuid The GUID name of a Firmware File.
@param SectionType The Firmware Section type.
@param Instance The instance number of Firmware Section to read from starting from 0.
@param Buffer On output, Buffer contains the the data read from the section in the Firmware File found.
@param Size On output, the size of Buffer.
@retval EFI_SUCCESS The image is found and data and size is returned.
@retval EFI_UNSUPPORTED FvHandle does not support EFI_FIRMWARE_VOLUME2_PROTOCOL.
@retval EFI_NOT_FOUND The image specified by NameGuid and SectionType can't be found.
@retval EFI_OUT_OF_RESOURCES There were not enough resources to allocate the output data buffer or complete the operations.
@retval EFI_DEVICE_ERROR A hardware error occurs during reading from the Firmware Volume.
@retval EFI_ACCESS_DENIED The firmware volume containing the searched Firmware File is configured to disallow reads.
**/
EFI_STATUS
GetSectionFromFv (
IN EFI_HANDLE FvHandle,
IN CONST EFI_GUID *NameGuid,
IN EFI_SECTION_TYPE SectionType,
IN UINTN Instance,
OUT VOID **Buffer,
OUT UINTN *Size
)
{
EFI_STATUS Status;
EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv;
UINT32 AuthenticationStatus;
ASSERT (FvHandle != NULL);
Status = gBS->HandleProtocol (
FvHandle,
&gEfiFirmwareVolume2ProtocolGuid,
(VOID **) &Fv
);
if (EFI_ERROR (Status)) {
return Status;
}
//
// Read desired section content in NameGuid file
//
*Buffer = NULL;
*Size = 0;
Status = Fv->ReadSection (
Fv,
NameGuid,
SectionType,
0,
Buffer,
Size,
&AuthenticationStatus
);
if (EFI_ERROR (Status) && (SectionType == EFI_SECTION_TE)) {
//
// Try reading PE32 section, if the required section is TE type
//
*Buffer = NULL;
*Size = 0;
Status = Fv->ReadSection (
Fv,
NameGuid,
EFI_SECTION_PE32,
0,
Buffer,
Size,
&AuthenticationStatus
);
}
return Status;
}
EFI_STATUS
EFIAPI
GetSectionFromAnyFv (
PiLibGetSectionFromAnyFv (
IN CONST EFI_GUID *NameGuid,
IN EFI_SECTION_TYPE SectionType,
IN UINTN Instance,
@ -301,7 +186,7 @@ GetSectionFromAnyFv (
// so that this implementation of GetSectionFromAnyFv
// will locate the FFS faster.
//
FvHandle = ImageHandleToFvHandle (gImageHandle);
FvHandle = InternalImageHandleToFvHandle (gImageHandle);
Status = GetSectionFromFv (
FvHandle,
NameGuid,
@ -365,71 +250,10 @@ Done:
}
EFI_STATUS
EFIAPI
GetSectionFromFv (
IN EFI_HANDLE FvHandle,
IN CONST EFI_GUID *NameGuid,
IN EFI_SECTION_TYPE SectionType,
IN UINTN Instance,
OUT VOID **Buffer,
OUT UINTN *Size
)
{
EFI_STATUS Status;
EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv;
UINT32 AuthenticationStatus;
ASSERT (FvHandle != NULL);
Status = gBS->HandleProtocol (
FvHandle,
&gEfiFirmwareVolume2ProtocolGuid,
(VOID **) &Fv
);
if (EFI_ERROR (Status)) {
return Status;
}
//
// Read desired section content in NameGuid file
//
*Buffer = NULL;
*Size = 0;
Status = Fv->ReadSection (
Fv,
NameGuid,
SectionType,
0,
Buffer,
Size,
&AuthenticationStatus
);
if (EFI_ERROR (Status) && (SectionType == EFI_SECTION_TE)) {
//
// Try reading PE32 section, if the required section is TE type
//
*Buffer = NULL;
*Size = 0;
Status = Fv->ReadSection (
Fv,
NameGuid,
EFI_SECTION_PE32,
0,
Buffer,
Size,
&AuthenticationStatus
);
}
return Status;
}
EFI_STATUS
EFIAPI
GetSectionFromCurrentFv (
PiLibGetSectionFromCurrentFv (
IN CONST EFI_GUID *NameGuid,
IN EFI_SECTION_TYPE SectionType,
IN UINTN Instance,
@ -438,7 +262,7 @@ GetSectionFromCurrentFv (
)
{
return GetSectionFromFv(
ImageHandleToFvHandle(gImageHandle),
InternalImageHandleToFvHandle(gImageHandle),
NameGuid,
SectionType,
Instance,
@ -451,7 +275,7 @@ GetSectionFromCurrentFv (
EFI_STATUS
EFIAPI
GetSectionFromCurrentFfs (
PiLibGetSectionFromCurrentFfs (
IN EFI_SECTION_TYPE SectionType,
IN UINTN Instance,
OUT VOID **Buffer,
@ -459,7 +283,7 @@ GetSectionFromCurrentFfs (
)
{
return GetSectionFromFv(
ImageHandleToFvHandle(gImageHandle),
InternalImageHandleToFvHandle(gImageHandle),
&gEfiCallerIdGuid,
SectionType,
Instance,

View File

@ -21,7 +21,7 @@
FILE_GUID = EE680C58-FFC0-4a5d-858F-66FF9C84BC9F
MODULE_TYPE = DXE_DRIVER
VERSION_STRING = 1.0
LIBRARY_CLASS = PiLib|DXE_CORE DXE_DRIVER DXE_RUNTIME_DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER
LIBRARY_CLASS = DxePiLib|DXE_CORE DXE_DRIVER DXE_RUNTIME_DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER
EDK_RELEASE_VERSION = 0x00020000
EFI_SPECIFICATION_VERSION = 0x00020000

View File

@ -21,9 +21,10 @@
#include <Library/MemoryAllocationLib.h>
#include <Library/PeiServicesLib.h>
#include <Library/PeiPiLib.h>
#include <Library/BaseMemoryLib.h>
STATIC CONST EFI_PEI_FIRMWARE_VOLUME_INFO_PPI mFvInfoPpiTemplate = {
CONST EFI_PEI_FIRMWARE_VOLUME_INFO_PPI mFvInfoPpiTemplate = {
EFI_FIRMWARE_FILE_SYSTEM2_GUID,
NULL,
0, //FvInfoSize
@ -33,11 +34,12 @@ STATIC CONST EFI_PEI_FIRMWARE_VOLUME_INFO_PPI mFvInfoPpiTemplate = {
VOID
EFIAPI
PeiPiLibBuildPiFvInfoPpi (
IN EFI_PHYSICAL_ADDRESS FvStart,
IN UINT64 FvLength,
IN EFI_GUID *ParentFvName,
IN EFI_GUID *ParentFileName
PiLibInstallFvInfoPpi (
IN EFI_GUID *FvFormat, OPTIONAL
IN VOID *FvInfo,
IN UINT32 FvInfoSize,
IN EFI_GUID *ParentFvName, OPTIONAL
IN EFI_GUID *ParentFileName OPTIONAL
) {
EFI_STATUS Status;
@ -47,8 +49,11 @@ PeiPiLibBuildPiFvInfoPpi (
FvInfoPpi = AllocateCopyPool (sizeof (*FvInfoPpi), &mFvInfoPpiTemplate);
ASSERT( FvInfoPpi != NULL);
FvInfoPpi->FvInfo = (VOID *) (UINTN) FvStart;
FvInfoPpi->FvInfoSize = (UINT32) FvLength;
if (FvFormat != NULL) {
CopyMem (&FvInfoPpi->FvFormat, FvFormat, sizeof (*FvFormat));
}
FvInfoPpi->FvInfo = (VOID *) (UINTN) FvInfo;
FvInfoPpi->FvInfoSize = (UINT32) FvInfoSize;
FvInfoPpi->ParentFvName = ParentFvName;
FvInfoPpi->ParentFileName = ParentFileName;
@ -62,6 +67,5 @@ PeiPiLibBuildPiFvInfoPpi (
Status = PeiServicesInstallPpi (FvInfoPpiDescriptor);
ASSERT_EFI_ERROR (Status);
}

View File

@ -21,7 +21,7 @@
FILE_GUID = 6196FE81-4FA4-469a-B759-2C4DFE935B79
MODULE_TYPE = PEIM
VERSION_STRING = 1.0
LIBRARY_CLASS = PiLib|PEIM
LIBRARY_CLASS = DxePiLib|PEIM
EDK_RELEASE_VERSION = 0x00020000
EFI_SPECIFICATION_VERSION = 0x00020000