-/**\r
-\r
- This function returns the size, in bytes, required for the DXE phase.\r
-\r
- @param PeiServices PEI Services table.\r
- @param Size Pointer to the size, in bytes, required for the DXE phase.\r
-\r
- @return None\r
-\r
-**/\r
-VOID\r
-RetriveRequiredMemorySize (\r
- IN EFI_PEI_SERVICES **PeiServices,\r
- OUT UINTN *Size\r
- )\r
-{\r
- EFI_PEI_HOB_POINTERS Hob;\r
- EFI_MEMORY_TYPE_INFORMATION *MemoryData;\r
- UINT8 Index;\r
- UINTN TempPageNum;\r
-\r
- MemoryData = NULL;\r
- TempPageNum = 0;\r
- Index = 0;\r
-\r
- PeiServicesGetHobList ((VOID **)&Hob.Raw);\r
- while (!END_OF_HOB_LIST (Hob)) {\r
- if (Hob.Header->HobType == EFI_HOB_TYPE_GUID_EXTENSION &&\r
- CompareGuid (&Hob.Guid->Name, &gEfiMemoryTypeInformationGuid)\r
- ) {\r
- MemoryData = (EFI_MEMORY_TYPE_INFORMATION *) (Hob.Raw + sizeof (EFI_HOB_GENERIC_HEADER) + sizeof (EFI_GUID));\r
- break;\r
- }\r
-\r
- Hob.Raw = GET_NEXT_HOB (Hob);\r
- }\r
- //\r
- // Platform PEIM should supply such a information. Generic PEIM doesn't assume any default value\r
- //\r
- if (!MemoryData) {\r
- return ;\r
- }\r
-\r
- while (MemoryData[Index].Type != EfiMaxMemoryType) {\r
- //\r
- // Accumulate default memory size requirements\r
- //\r
- TempPageNum += MemoryData[Index].NumberOfPages;\r
- Index++;\r
- }\r
-\r
- if (TempPageNum == 0) {\r
- return ;\r
- }\r
-\r
- //\r
- // Add additional pages used by DXE memory manager\r
- //\r
- (*Size) = (TempPageNum + EDKII_DXE_MEM_SIZE_PAGES) * EFI_PAGE_SIZE;\r
-\r
- return ;\r
-}\r
-\r