diff options
Diffstat (limited to 'UnitTestFrameworkPkg/Library/UnitTestPeiServicesTablePointerLib/UnitTestPeiServicesTablePointerLib.c')
| -rw-r--r-- | UnitTestFrameworkPkg/Library/UnitTestPeiServicesTablePointerLib/UnitTestPeiServicesTablePointerLib.c | 374 |
1 files changed, 187 insertions, 187 deletions
diff --git a/UnitTestFrameworkPkg/Library/UnitTestPeiServicesTablePointerLib/UnitTestPeiServicesTablePointerLib.c b/UnitTestFrameworkPkg/Library/UnitTestPeiServicesTablePointerLib/UnitTestPeiServicesTablePointerLib.c index a1b982fbae..882fe350d7 100644 --- a/UnitTestFrameworkPkg/Library/UnitTestPeiServicesTablePointerLib/UnitTestPeiServicesTablePointerLib.c +++ b/UnitTestFrameworkPkg/Library/UnitTestPeiServicesTablePointerLib/UnitTestPeiServicesTablePointerLib.c @@ -1,187 +1,187 @@ -/** @file
- This library supports a PEI Service table Pointer library implementation that
- allows code dependent upon PEI Service to operate in an isolated execution environment
- such as within the context of a host-based unit test framework.
-
- Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include "UnitTestPeiServicesTablePointerLib.h"
-
-///
-/// Pei service instance
-///
-EFI_PEI_SERVICES mPeiServices = {
- {
- PEI_SERVICES_SIGNATURE,
- PEI_SERVICES_REVISION,
- sizeof (EFI_PEI_SERVICES),
- 0,
- 0
- },
- UnitTestInstallPpi, // InstallPpi
- UnitTestReInstallPpi, // ReInstallPpi
- UnitTestLocatePpi, // LocatePpi
- UnitTestNotifyPpi, // NotifyPpi
-
- UnitTestGetBootMode, // GetBootMode
- UnitTestSetBootMode, // SetBootMode
-
- UnitTestGetHobList, // GetHobList
- UnitTestCreateHob, // CreateHob
-
- UnitTestFfsFindNextVolume, // FfsFindNextVolume
- UnitTestFfsFindNextFile, // FfsFindNextFile
- UnitTestFfsFindSectionData, // FfsFindSectionData
-
- UnitTestInstallPeiMemory, // InstallPeiMemory
- UnitTestAllocatePages, // AllocatePages
- UnitTestAllocatePool, // AllocatePool
- (EFI_PEI_COPY_MEM)CopyMem,
- (EFI_PEI_SET_MEM)SetMem,
-
- UnitTestReportStatusCode, // ReportStatusCode
- UnitTestResetSystem, // ResetSystem
-
- NULL, // CpuIo
- NULL, // PciCfg
-
- UnitTestFfsFindFileByName, // FfsFindFileByName
- UnitTestFfsGetFileInfo, // FfsGetFileInfo
- UnitTestFfsGetVolumeInfo, // FfsGetVolumeInfo
- UnitTestRegisterForShadow, // RegisterForShadow
- UnitTestFfsFindSectionData3, // FfsFindSectionData3
- UnitTestFfsGetFileInfo2, // FfsGetFileInfo2
- UnitTestResetSystem2, // ResetSystem2
- UnitTestFreePages, // FreePages
-};
-
-PEI_CORE_INSTANCE mPrivateData;
-UINT8 mHobBuffer[MAX_HOB_SIZE];
-VOID *mPeiServicesPointer;
-
-/**
- Clear Buffer For Global Data.
-**/
-VOID
-ClearGlobalData (
- VOID
- )
-{
- ZeroMem (&mPrivateData, sizeof (mPrivateData));
- mPrivateData.PpiData.PpiList.MaxCount = MAX_PPI_COUNT;
- mPrivateData.PpiData.CallbackNotifyList.MaxCount = MAX_PPI_COUNT;
- mPrivateData.PpiData.DispatchNotifyList.MaxCount = MAX_PPI_COUNT;
-
- ZeroMem (mHobBuffer, MAX_HOB_SIZE);
- mPrivateData.HobList.Raw = mHobBuffer;
- UnitTestCoreBuildHobHandoffInfoTable (0, (EFI_PHYSICAL_ADDRESS)(UINTN)mHobBuffer, MAX_HOB_SIZE);
-}
-
-/**
- Resets the entire platform.
-
- @param[in] ResetType The type of reset to perform.
- @param[in] ResetStatus The status code for the reset.
- @param[in] DataSize The size, in bytes, of ResetData.
- @param[in] ResetData For a ResetType of EfiResetCold, EfiResetWarm, or EfiResetShutdown
- the data buffer starts with a Null-terminated string, optionally
- followed by additional binary data. The string is a description
- that the caller may use to further indicate the reason for the
- system reset.
-
-**/
-VOID
-EFIAPI
-UnitTestResetSystem2 (
- IN EFI_RESET_TYPE ResetType,
- IN EFI_STATUS ResetStatus,
- IN UINTN DataSize,
- IN VOID *ResetData OPTIONAL
- )
-{
- ClearGlobalData ();
-}
-
-/**
- Retrieves the cached value of the PEI Services Table pointer.
-
- Returns the cached value of the PEI Services Table pointer in a CPU specific manner
- as specified in the CPU binding section of the Platform Initialization Pre-EFI
- Initialization Core Interface Specification.
-
- If the cached PEI Services Table pointer is NULL, then ASSERT().
-
- @return The pointer to PeiServices.
-
-**/
-CONST EFI_PEI_SERVICES **
-EFIAPI
-GetPeiServicesTablePointer (
- VOID
- )
-{
- mPeiServicesPointer = &mPeiServices;
- return (CONST EFI_PEI_SERVICES **)&mPeiServicesPointer;
-}
-
-/**
- Caches a pointer PEI Services Table.
-
- Caches the pointer to the PEI Services Table specified by PeiServicesTablePointer
- in a CPU specific manner as specified in the CPU binding section of the Platform Initialization
- Pre-EFI Initialization Core Interface Specification.
-
- If PeiServicesTablePointer is NULL, then ASSERT().
-
- @param PeiServicesTablePointer The address of PeiServices pointer.
-**/
-VOID
-EFIAPI
-SetPeiServicesTablePointer (
- IN CONST EFI_PEI_SERVICES **PeiServicesTablePointer
- )
-{
- ASSERT (FALSE);
-}
-
-/**
- Perform CPU specific actions required to migrate the PEI Services Table
- pointer from temporary RAM to permanent RAM.
-
- For IA32 CPUs, the PEI Services Table pointer is stored in the 4 bytes
- immediately preceding the Interrupt Descriptor Table (IDT) in memory.
- For X64 CPUs, the PEI Services Table pointer is stored in the 8 bytes
- immediately preceding the Interrupt Descriptor Table (IDT) in memory.
- For Itanium and ARM CPUs, a the PEI Services Table Pointer is stored in
- a dedicated CPU register. This means that there is no memory storage
- associated with storing the PEI Services Table pointer, so no additional
- migration actions are required for Itanium or ARM CPUs.
-
-**/
-VOID
-EFIAPI
-MigratePeiServicesTablePointer (
- VOID
- )
-{
- ASSERT (FALSE);
-}
-
-/**
- The constructor function init PeiServicesTable with clean buffer.
-
- @retval EFI_SUCCESS The constructor always returns EFI_SUCCESS.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestPeiServicesTablePointerLibConstructor (
- VOID
- )
-{
- ClearGlobalData ();
- return EFI_SUCCESS;
-}
+/** @file + This library supports a PEI Service table Pointer library implementation that + allows code dependent upon PEI Service to operate in an isolated execution environment + such as within the context of a host-based unit test framework. + + Copyright (c) 2023, Intel Corporation. All rights reserved.<BR> + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "UnitTestPeiServicesTablePointerLib.h" + +/// +/// Pei service instance +/// +EFI_PEI_SERVICES mPeiServices = { + { + PEI_SERVICES_SIGNATURE, + PEI_SERVICES_REVISION, + sizeof (EFI_PEI_SERVICES), + 0, + 0 + }, + UnitTestInstallPpi, // InstallPpi + UnitTestReInstallPpi, // ReInstallPpi + UnitTestLocatePpi, // LocatePpi + UnitTestNotifyPpi, // NotifyPpi + + UnitTestGetBootMode, // GetBootMode + UnitTestSetBootMode, // SetBootMode + + UnitTestGetHobList, // GetHobList + UnitTestCreateHob, // CreateHob + + UnitTestFfsFindNextVolume, // FfsFindNextVolume + UnitTestFfsFindNextFile, // FfsFindNextFile + UnitTestFfsFindSectionData, // FfsFindSectionData + + UnitTestInstallPeiMemory, // InstallPeiMemory + UnitTestAllocatePages, // AllocatePages + UnitTestAllocatePool, // AllocatePool + (EFI_PEI_COPY_MEM)CopyMem, + (EFI_PEI_SET_MEM)SetMem, + + UnitTestReportStatusCode, // ReportStatusCode + UnitTestResetSystem, // ResetSystem + + NULL, // CpuIo + NULL, // PciCfg + + UnitTestFfsFindFileByName, // FfsFindFileByName + UnitTestFfsGetFileInfo, // FfsGetFileInfo + UnitTestFfsGetVolumeInfo, // FfsGetVolumeInfo + UnitTestRegisterForShadow, // RegisterForShadow + UnitTestFfsFindSectionData3, // FfsFindSectionData3 + UnitTestFfsGetFileInfo2, // FfsGetFileInfo2 + UnitTestResetSystem2, // ResetSystem2 + UnitTestFreePages, // FreePages +}; + +PEI_CORE_INSTANCE mPrivateData; +UINT8 mHobBuffer[MAX_HOB_SIZE]; +VOID *mPeiServicesPointer; + +/** + Clear Buffer For Global Data. +**/ +VOID +ClearGlobalData ( + VOID + ) +{ + ZeroMem (&mPrivateData, sizeof (mPrivateData)); + mPrivateData.PpiData.PpiList.MaxCount = MAX_PPI_COUNT; + mPrivateData.PpiData.CallbackNotifyList.MaxCount = MAX_PPI_COUNT; + mPrivateData.PpiData.DispatchNotifyList.MaxCount = MAX_PPI_COUNT; + + ZeroMem (mHobBuffer, MAX_HOB_SIZE); + mPrivateData.HobList.Raw = mHobBuffer; + UnitTestCoreBuildHobHandoffInfoTable (0, (EFI_PHYSICAL_ADDRESS)(UINTN)mHobBuffer, MAX_HOB_SIZE); +} + +/** + Resets the entire platform. + + @param[in] ResetType The type of reset to perform. + @param[in] ResetStatus The status code for the reset. + @param[in] DataSize The size, in bytes, of ResetData. + @param[in] ResetData For a ResetType of EfiResetCold, EfiResetWarm, or EfiResetShutdown + the data buffer starts with a Null-terminated string, optionally + followed by additional binary data. The string is a description + that the caller may use to further indicate the reason for the + system reset. + +**/ +VOID +EFIAPI +UnitTestResetSystem2 ( + IN EFI_RESET_TYPE ResetType, + IN EFI_STATUS ResetStatus, + IN UINTN DataSize, + IN VOID *ResetData OPTIONAL + ) +{ + ClearGlobalData (); +} + +/** + Retrieves the cached value of the PEI Services Table pointer. + + Returns the cached value of the PEI Services Table pointer in a CPU specific manner + as specified in the CPU binding section of the Platform Initialization Pre-EFI + Initialization Core Interface Specification. + + If the cached PEI Services Table pointer is NULL, then ASSERT(). + + @return The pointer to PeiServices. + +**/ +CONST EFI_PEI_SERVICES ** +EFIAPI +GetPeiServicesTablePointer ( + VOID + ) +{ + mPeiServicesPointer = &mPeiServices; + return (CONST EFI_PEI_SERVICES **)&mPeiServicesPointer; +} + +/** + Caches a pointer PEI Services Table. + + Caches the pointer to the PEI Services Table specified by PeiServicesTablePointer + in a CPU specific manner as specified in the CPU binding section of the Platform Initialization + Pre-EFI Initialization Core Interface Specification. + + If PeiServicesTablePointer is NULL, then ASSERT(). + + @param PeiServicesTablePointer The address of PeiServices pointer. +**/ +VOID +EFIAPI +SetPeiServicesTablePointer ( + IN CONST EFI_PEI_SERVICES **PeiServicesTablePointer + ) +{ + ASSERT (FALSE); +} + +/** + Perform CPU specific actions required to migrate the PEI Services Table + pointer from temporary RAM to permanent RAM. + + For IA32 CPUs, the PEI Services Table pointer is stored in the 4 bytes + immediately preceding the Interrupt Descriptor Table (IDT) in memory. + For X64 CPUs, the PEI Services Table pointer is stored in the 8 bytes + immediately preceding the Interrupt Descriptor Table (IDT) in memory. + For Itanium and ARM CPUs, a the PEI Services Table Pointer is stored in + a dedicated CPU register. This means that there is no memory storage + associated with storing the PEI Services Table pointer, so no additional + migration actions are required for Itanium or ARM CPUs. + +**/ +VOID +EFIAPI +MigratePeiServicesTablePointer ( + VOID + ) +{ + ASSERT (FALSE); +} + +/** + The constructor function init PeiServicesTable with clean buffer. + + @retval EFI_SUCCESS The constructor always returns EFI_SUCCESS. + +**/ +EFI_STATUS +EFIAPI +UnitTestPeiServicesTablePointerLibConstructor ( + VOID + ) +{ + ClearGlobalData (); + return EFI_SUCCESS; +} |
