]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Core/Pei/PeiMain.h
UefiCpuPkg: Fix comment typo for MtrrLibApplyFixedMtrrs function
[mirror_edk2.git] / MdeModulePkg / Core / Pei / PeiMain.h
index e95b1c3d8cd77057a1646d9c516b2227d7c00001..fef3753e4b3b3c4b1473360eef16e0a217b5484e 100644 (file)
@@ -30,6 +30,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #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
@@ -232,6 +233,10 @@ struct _PEI_CORE_INSTANCE {
   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
@@ -262,7 +267,7 @@ struct _PEI_CORE_INSTANCE {
 \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
@@ -422,7 +427,7 @@ InitializePpiServices (
 \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
@@ -721,6 +726,22 @@ PeiCoreBuildHobHandoffInfoTable (
   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
@@ -860,30 +881,81 @@ PeiInstallPeiMemory (
   );\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