diff options
author | qwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524> | 2007-10-10 02:08:22 +0000 |
---|---|---|
committer | qwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524> | 2007-10-10 02:08:22 +0000 |
commit | 166152e85cd99bf4d3d9158b5c3455e4e0f7bb12 (patch) | |
tree | 78cbdee059c1802f73e3d6a90ffd56153b014816 /MdePkg | |
parent | 10dde96f9548bc11d01b46750293aba336d5d1c6 (diff) | |
download | edk2-166152e85cd99bf4d3d9158b5c3455e4e0f7bb12.tar.gz edk2-166152e85cd99bf4d3d9158b5c3455e4e0f7bb12.tar.bz2 edk2-166152e85cd99bf4d3d9158b5c3455e4e0f7bb12.zip |
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
Diffstat (limited to 'MdePkg')
-rw-r--r-- | MdePkg/Include/Library/DxePiLib.h (renamed from MdePkg/Include/Library/PiLib.h) | 146 | ||||
-rw-r--r-- | MdePkg/Include/Library/PeiPiLib.h | 33 | ||||
-rw-r--r-- | MdePkg/Library/DxePiLib/DxePiLib.c | 384 | ||||
-rw-r--r-- | MdePkg/Library/DxePiLib/DxePiLib.inf | 2 | ||||
-rw-r--r-- | MdePkg/Library/PeiPiLib/PeiPiLib.c | 22 | ||||
-rw-r--r-- | MdePkg/Library/PeiPiLib/PeiPiLib.inf | 2 |
6 files changed, 153 insertions, 436 deletions
diff --git a/MdePkg/Include/Library/PiLib.h b/MdePkg/Include/Library/DxePiLib.h index 8aaad25058..01cebeb084 100644 --- a/MdePkg/Include/Library/PiLib.h +++ b/MdePkg/Include/Library/DxePiLib.h @@ -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,
diff --git a/MdePkg/Include/Library/PeiPiLib.h b/MdePkg/Include/Library/PeiPiLib.h index a34fd50c10..a1b472ac69 100644 --- a/MdePkg/Include/Library/PeiPiLib.h +++ b/MdePkg/Include/Library/PeiPiLib.h @@ -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
diff --git a/MdePkg/Library/DxePiLib/DxePiLib.c b/MdePkg/Library/DxePiLib/DxePiLib.c index 32e0337c19..d35937a1b5 100644 --- a/MdePkg/Library/DxePiLib/DxePiLib.c +++ b/MdePkg/Library/DxePiLib/DxePiLib.c @@ -16,43 +16,115 @@ #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_HANDLE
+InternalImageHandleToFvHandle (
+ EFI_HANDLE ImageHandle
+ )
+{
+ EFI_STATUS Status;
+ EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;
+
+ ASSERT (ImageHandle != NULL);
+
+ Status = gBS->HandleProtocol (
+ (EFI_HANDLE *) ImageHandle,
+ &gEfiLoadedImageProtocolGuid,
+ (VOID **) &LoadedImage
+ );
+
+ ASSERT_EFI_ERROR (Status);
+
+ return LoadedImage->DeviceHandle;
+
+}
+
+/**
+ 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
-InternalGetImageFromFv (
- IN EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv,
- IN CONST EFI_GUID *NameGuid,
- IN EFI_SECTION_TYPE SectionType,
- OUT VOID **Buffer,
- OUT UINTN *Size
+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_FV_FILETYPE FileType;
- EFI_FV_FILE_ATTRIBUTES Attributes;
- UINT32 AuthenticationStatus;
+ 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
@@ -71,7 +143,7 @@ InternalGetImageFromFv ( if (EFI_ERROR (Status) && (SectionType == EFI_SECTION_TE)) {
//
- // Try reading PE32 section, since the TE section does not exist
+ // Try reading PE32 section, if the required section is TE type
//
*Buffer = NULL;
*Size = 0;
@@ -86,201 +158,14 @@ InternalGetImageFromFv ( );
}
- 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 (
- EFI_HANDLE ImageHandle
- )
-{
- EFI_STATUS Status;
- EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;
-
- ASSERT (ImageHandle != NULL);
-
- Status = gBS->HandleProtocol (
- (EFI_HANDLE *) ImageHandle,
- &gEfiLoadedImageProtocolGuid,
- (VOID **) &LoadedImage
- );
-
- ASSERT_EFI_ERROR (Status);
-
- return LoadedImage->DeviceHandle;
-}
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,
diff --git a/MdePkg/Library/DxePiLib/DxePiLib.inf b/MdePkg/Library/DxePiLib/DxePiLib.inf index e459e046a1..c1d0a716d2 100644 --- a/MdePkg/Library/DxePiLib/DxePiLib.inf +++ b/MdePkg/Library/DxePiLib/DxePiLib.inf @@ -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
diff --git a/MdePkg/Library/PeiPiLib/PeiPiLib.c b/MdePkg/Library/PeiPiLib/PeiPiLib.c index 49894dfe4d..d1e8611365 100644 --- a/MdePkg/Library/PeiPiLib/PeiPiLib.c +++ b/MdePkg/Library/PeiPiLib/PeiPiLib.c @@ -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);
-
}
diff --git a/MdePkg/Library/PeiPiLib/PeiPiLib.inf b/MdePkg/Library/PeiPiLib/PeiPiLib.inf index 61e90612eb..94ddc75b1e 100644 --- a/MdePkg/Library/PeiPiLib/PeiPiLib.inf +++ b/MdePkg/Library/PeiPiLib/PeiPiLib.inf @@ -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
|