\r
UINT8 mPhysMemAddressWidth;\r
\r
+STATIC UINT32 mS3AcpiReservedMemoryBase;\r
+STATIC UINT32 mS3AcpiReservedMemorySize;\r
+\r
UINT32\r
GetSystemMemorySizeBelow4gb (\r
VOID\r
UINT64 LowerMemorySize;\r
UINT32 PeiMemoryCap;\r
\r
+ LowerMemorySize = GetSystemMemorySizeBelow4gb ();\r
+ if (FeaturePcdGet (PcdSmmSmramRequire)) {\r
+ //\r
+ // TSEG is chipped from the end of low RAM\r
+ //\r
+ LowerMemorySize -= FixedPcdGet8 (PcdQ35TsegMbytes) * SIZE_1MB;\r
+ }\r
+\r
+ //\r
+ // If S3 is supported, then the S3 permanent PEI memory is placed next,\r
+ // downwards. Its size is primarily dictated by CpuMpPei. The formula below\r
+ // is an approximation.\r
+ //\r
+ if (mS3Supported) {\r
+ mS3AcpiReservedMemorySize = SIZE_512KB +\r
+ PcdGet32 (PcdCpuMaxLogicalProcessorNumber) *\r
+ PcdGet32 (PcdCpuApStackSize);\r
+ mS3AcpiReservedMemoryBase = LowerMemorySize - mS3AcpiReservedMemorySize;\r
+ LowerMemorySize = mS3AcpiReservedMemoryBase;\r
+ }\r
+\r
if (mBootMode == BOOT_ON_S3_RESUME) {\r
- MemoryBase = PcdGet32 (PcdS3AcpiReservedMemoryBase);\r
- MemorySize = PcdGet32 (PcdS3AcpiReservedMemorySize);\r
+ MemoryBase = mS3AcpiReservedMemoryBase;\r
+ MemorySize = mS3AcpiReservedMemorySize;\r
} else {\r
- LowerMemorySize = GetSystemMemorySizeBelow4gb ();\r
- if (FeaturePcdGet (PcdSmmSmramRequire)) {\r
- //\r
- // TSEG is chipped from the end of low RAM\r
- //\r
- LowerMemorySize -= FixedPcdGet8 (PcdQ35TsegMbytes) * SIZE_1MB;\r
- }\r
-\r
PeiMemoryCap = GetPeiMemoryCap ();\r
DEBUG ((EFI_D_INFO, "%a: mPhysMemAddressWidth=%d PeiMemoryCap=%u KB\n",\r
__FUNCTION__, mPhysMemAddressWidth, PeiMemoryCap >> 10));\r
// This is the memory range that will be used for PEI on S3 resume\r
//\r
BuildMemoryAllocationHob (\r
- (EFI_PHYSICAL_ADDRESS)(UINTN) PcdGet32 (PcdS3AcpiReservedMemoryBase),\r
- (UINT64)(UINTN) PcdGet32 (PcdS3AcpiReservedMemorySize),\r
+ mS3AcpiReservedMemoryBase,\r
+ mS3AcpiReservedMemorySize,\r
EfiACPIMemoryNVS\r
);\r
\r
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfPeiMemFvSize\r
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfDxeMemFvBase\r
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfDxeMemFvSize\r
- gUefiOvmfPkgTokenSpaceGuid.PcdS3AcpiReservedMemoryBase\r
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamBase\r
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamSize\r
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesBase\r
gUefiOvmfPkgTokenSpaceGuid.PcdPciMmio64Size\r
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfDecompressionScratchEnd\r
gUefiOvmfPkgTokenSpaceGuid.PcdQ35TsegMbytes\r
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdS3AcpiReservedMemorySize\r
gEfiMdePkgTokenSpaceGuid.PcdGuidedExtractHandlerTableAddress\r
gEfiMdeModulePkgTokenSpaceGuid.PcdVariableStoreSize\r
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize\r
gEfiMdeModulePkgTokenSpaceGuid.PcdPropertiesTableEnable\r
gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiS3Enable\r
gUefiCpuPkgTokenSpaceGuid.PcdCpuLocalApicBaseAddress\r
+ gUefiCpuPkgTokenSpaceGuid.PcdCpuMaxLogicalProcessorNumber\r
+ gUefiCpuPkgTokenSpaceGuid.PcdCpuApStackSize\r
\r
[FixedPcd]\r
gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress\r