VOID\r
);\r
\r
+/**\r
+ Initialize cached Mmram Ranges from HOB.\r
+\r
+ @retval EFI_UNSUPPORTED The routine is unable to extract MMRAM information.\r
+ @retval EFI_SUCCESS MmRanges are populated successfully.\r
+\r
+**/\r
+EFI_STATUS\r
+MmMemLibInternalPopulateMmramRanges (\r
+ VOID\r
+ );\r
+\r
+/**\r
+ Deinitialize cached Mmram Ranges.\r
+\r
+**/\r
+VOID\r
+MmMemLibInternalFreeMmramRanges (\r
+ VOID\r
+ );\r
+\r
/**\r
This function check if the buffer is valid per processor architecture and not overlap with MMRAM.\r
\r
IN EFI_MM_SYSTEM_TABLE *MmSystemTable\r
)\r
{\r
+ EFI_STATUS Status;\r
\r
//\r
// Calculate and save maximum support address\r
//\r
MmMemLibInternalCalculateMaximumSupportAddress ();\r
\r
+ //\r
+ // Initialize cached Mmram Ranges from HOB.\r
+ //\r
+ Status = MmMemLibInternalPopulateMmramRanges ();\r
+\r
+ return Status;\r
+}\r
+\r
+/**\r
+ Destructor for Mm Mem library.\r
+\r
+ @param ImageHandle The image handle of the process.\r
+ @param MmSystemTable The EFI System Table pointer.\r
+\r
+ @retval EFI_SUCCESS The constructor always returns EFI_SUCCESS.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+MemLibDestructor (\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_MM_SYSTEM_TABLE *MmSystemTable\r
+ )\r
+{\r
+\r
+ //\r
+ // Deinitialize cached Mmram Ranges.\r
+ //\r
+ MmMemLibInternalFreeMmramRanges ();\r
+\r
return EFI_SUCCESS;\r
}\r