#include <Ppi/Security2.h>\r
#include <Ppi/TemporaryRamSupport.h>\r
#include <Ppi/TemporaryRamDone.h>\r
+#include <Ppi/SecHobData.h>\r
#include <Library/DebugLib.h>\r
#include <Library/PeiCoreEntryPoint.h>\r
#include <Library/BaseLib.h>\r
BOOLEAN HeapOffsetPositive;\r
UINTN StackOffset;\r
BOOLEAN StackOffsetPositive;\r
+ //\r
+ // Information for migrating memory pages allocated in pre-memory phase.\r
+ //\r
+ HOLE_MEMORY_DATA MemoryPages;\r
PEICORE_FUNCTION_POINTER ShadowedPeiCore;\r
CACHE_SECTION_DATA CacheSection;\r
//\r
\r
//\r
// Temp Memory Range is not covered by PeiTempMem and Stack.\r
- // Those Memory Range will be migrated into phisical memory. \r
+ // Those Memory Range will be migrated into physical memory.\r
//\r
HOLE_MEMORY_DATA HoleData[HOLE_MAX_NUMBER];\r
};\r
\r
/**\r
\r
- Migrate the Hob list from the temporary memory stack to PEI installed memory.\r
+ Migrate the Hob list from the temporary memory to PEI installed memory.\r
\r
@param SecCoreData Points to a data structure containing SEC to PEI handoff data, such as the size \r
and location of temporary RAM, the stack location and the BFV location.\r
IN UINT64 MemoryLength\r
);\r
\r
+/**\r
+ Install SEC HOB data to the HOB List.\r
+\r
+ @param PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.\r
+ @param SecHobList Pointer to SEC HOB List.\r
+\r
+ @return EFI_SUCCESS Success to install SEC HOB data.\r
+ @retval EFI_OUT_OF_RESOURCES If there is no more memory to grow the Hoblist.\r
+\r
+**/\r
+EFI_STATUS\r
+PeiInstallSecHobData (\r
+ IN CONST EFI_PEI_SERVICES **PeiServices,\r
+ IN EFI_HOB_GENERIC_HEADER *SecHobList\r
+ );\r
+\r
\r
//\r
// FFS Fw Volume support functions\r
);\r
\r
/**\r
+ Migrate memory pages allocated in pre-memory phase.\r
+ Copy memory pages at temporary heap top to permanent heap top.\r
\r
- Memory allocation service on permanent memory,\r
- not usable prior to the memory installation.\r
+ @param[in] Private Pointer to the private data passed in from caller.\r
+ @param[in] TemporaryRamMigrated Temporary memory has been migrated to permanent memory.\r
\r
+**/\r
+VOID\r
+MigrateMemoryPages (\r
+ IN PEI_CORE_INSTANCE *Private,\r
+ IN BOOLEAN TemporaryRamMigrated\r
+ );\r
\r
- @param PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.\r
- @param MemoryType Type of memory to allocate.\r
- @param Pages Number of pages to allocate.\r
- @param Memory Pointer of memory allocated.\r
+/**\r
+ Migrate MemoryBaseAddress in memory allocation HOBs\r
+ from the temporary memory to PEI installed memory.\r
\r
- @retval EFI_SUCCESS The allocation was successful\r
- @retval EFI_INVALID_PARAMETER Only AllocateAnyAddress is supported.\r
- @retval EFI_NOT_AVAILABLE_YET Called with permanent memory not available\r
- @retval EFI_OUT_OF_RESOURCES There is not enough HOB heap to satisfy the requirement\r
- to allocate the number of pages.\r
+ @param[in] PrivateData Pointer to PeiCore's private data structure.\r
+\r
+**/\r
+VOID\r
+ConvertMemoryAllocationHobs (\r
+ IN PEI_CORE_INSTANCE *PrivateData\r
+ );\r
+\r
+/**\r
+ The purpose of the service is to publish an interface that allows\r
+ PEIMs to allocate memory ranges that are managed by the PEI Foundation.\r
+\r
+ Prior to InstallPeiMemory() being called, PEI will allocate pages from the heap.\r
+ After InstallPeiMemory() is called, PEI will allocate pages within the region\r
+ of memory provided by InstallPeiMemory() service in a best-effort fashion.\r
+ Location-specific allocations are not managed by the PEI foundation code.\r
+\r
+ @param PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.\r
+ @param MemoryType The type of memory to allocate.\r
+ @param Pages The number of contiguous 4 KB pages to allocate.\r
+ @param Memory Pointer to a physical address. On output, the address is set to the base\r
+ of the page range that was allocated.\r
+\r
+ @retval EFI_SUCCESS The memory range was successfully allocated.\r
+ @retval EFI_OUT_OF_RESOURCES The pages could not be allocated.\r
+ @retval EFI_INVALID_PARAMETER Type is not equal to EfiLoaderCode, EfiLoaderData, EfiRuntimeServicesCode,\r
+ EfiRuntimeServicesData, EfiBootServicesCode, EfiBootServicesData,\r
+ EfiACPIReclaimMemory, EfiReservedMemoryType, or EfiACPIMemoryNVS.\r
\r
**/\r
EFI_STATUS\r
EFIAPI\r
PeiAllocatePages (\r
- IN CONST EFI_PEI_SERVICES **PeiServices,\r
- IN EFI_MEMORY_TYPE MemoryType,\r
- IN UINTN Pages,\r
- OUT EFI_PHYSICAL_ADDRESS *Memory\r
+ IN CONST EFI_PEI_SERVICES **PeiServices,\r
+ IN EFI_MEMORY_TYPE MemoryType,\r
+ IN UINTN Pages,\r
+ OUT EFI_PHYSICAL_ADDRESS *Memory\r
+ );\r
+\r
+/**\r
+ Frees memory pages.\r
+\r
+ @param[in] PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.\r
+ @param[in] Memory The base physical address of the pages to be freed.\r
+ @param[in] Pages The number of contiguous 4 KB pages to free.\r
+\r
+ @retval EFI_SUCCESS The requested pages were freed.\r
+ @retval EFI_INVALID_PARAMETER Memory is not a page-aligned address or Pages is invalid.\r
+ @retval EFI_NOT_FOUND The requested memory pages were not allocated with\r
+ AllocatePages().\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+PeiFreePages (\r
+ IN CONST EFI_PEI_SERVICES **PeiServices,\r
+ IN EFI_PHYSICAL_ADDRESS Memory,\r
+ IN UINTN Pages\r
);\r
\r
/**\r