+/**\r
+ Internal Function. Allocate n pages from given free page node.\r
+\r
+ @param Pages The free page node.\r
+ @param NumberOfPages Number of pages to be allocated.\r
+ @param MaxAddress Request to allocate memory below this address.\r
+\r
+ @return Memory address of allocated pages.\r
+\r
+**/\r
+UINTN\r
+InternalAllocPagesOnOneNode (\r
+ IN OUT FREE_PAGE_LIST *Pages,\r
+ IN UINTN NumberOfPages,\r
+ IN UINTN MaxAddress\r
+ );\r
+\r
+/**\r
+ Update SMM memory map entry.\r
+\r
+ @param[in] Type The type of allocation to perform.\r
+ @param[in] Memory The base of memory address.\r
+ @param[in] NumberOfPages The number of pages to allocate.\r
+ @param[in] AddRegion If this memory is new added region.\r
+**/\r
+VOID\r
+ConvertSmmMemoryMapEntry (\r
+ IN EFI_MEMORY_TYPE Type,\r
+ IN EFI_PHYSICAL_ADDRESS Memory,\r
+ IN UINTN NumberOfPages,\r
+ IN BOOLEAN AddRegion\r
+ );\r
+\r
+/**\r
+ Internal function. Moves any memory descriptors that are on the\r
+ temporary descriptor stack to heap.\r
+\r
+**/\r
+VOID\r
+CoreFreeMemoryMapStack (\r
+ VOID\r
+ );\r
+\r
+/**\r
+ Frees previous allocated pages.\r
+\r
+ @param[in] Memory Base address of memory being freed.\r
+ @param[in] NumberOfPages The number of pages to free.\r
+ @param[in] AddRegion If this memory is new added region.\r
+\r
+ @retval EFI_NOT_FOUND Could not find the entry that covers the range.\r
+ @retval EFI_INVALID_PARAMETER Address not aligned, Address is zero or NumberOfPages is zero.\r
+ @return EFI_SUCCESS Pages successfully freed.\r
+\r
+**/\r
+EFI_STATUS\r
+SmmInternalFreePagesEx (\r
+ IN EFI_PHYSICAL_ADDRESS Memory,\r
+ IN UINTN NumberOfPages,\r
+ IN BOOLEAN AddRegion\r
+ );\r
+\r
+/**\r
+ Hook function used to set all Guard pages after entering SMM mode.\r
+**/\r
+VOID\r
+SmmEntryPointMemoryManagementHook (\r
+ VOID\r
+ );\r
+\r