/** Publish PEI core memory @return EFI_SUCCESS The PEIM initialized successfully. **/ EFI_STATUS PublishPeiMemory ( VOID ) { EFI_STATUS Status; EFI_PHYSICAL_ADDRESS MemoryBase; UINT64 MemorySize; UINT64 LowerMemorySize; if (mBootMode == BOOT_ON_S3_RESUME) { MemoryBase = PcdGet32 (PcdS3AcpiReservedMemoryBase); MemorySize = PcdGet32 (PcdS3AcpiReservedMemorySize); } else { LowerMemorySize = GetSystemMemorySizeBelow4gb (); // // Determine the range of memory to use during PEI // MemoryBase = PcdGet32 (PcdOvmfDxeMemFvBase) + PcdGet32 (PcdOvmfDxeMemFvSize); MemorySize = LowerMemorySize - MemoryBase; if (MemorySize > SIZE_64MB) { MemoryBase = LowerMemorySize - SIZE_64MB; MemorySize = SIZE_64MB; } } // // Publish this memory to the PEI Core // Status = PublishSystemMemory(MemoryBase, MemorySize); ASSERT_EFI_ERROR (Status); return Status; }
/** Peform Memory Detection @return EFI_SUCCESS The PEIM initialized successfully. **/ EFI_PHYSICAL_ADDRESS MemDetect ( ) { EFI_STATUS Status; EFI_PHYSICAL_ADDRESS MemoryBase; UINT64 MemorySize; UINT64 LowerMemorySize; UINT64 UpperMemorySize; DEBUG ((EFI_D_ERROR, "MemDetect called\n")); // // Determine total memory size available // LowerMemorySize = GetSystemMemorySizeBelow4gb (); UpperMemorySize = GetSystemMemorySizeAbove4gb (); // // Determine the range of memory to use during PEI // MemoryBase = PcdGet32 (PcdOvmfMemFvBase) + PcdGet32 (PcdOvmfMemFvSize); MemorySize = LowerMemorySize - MemoryBase; if (MemorySize > SIZE_64MB) { MemoryBase = LowerMemorySize - SIZE_64MB; MemorySize = SIZE_64MB; } // // Publish this memory to the PEI Core // Status = PublishSystemMemory(MemoryBase, MemorySize); ASSERT_EFI_ERROR (Status); // // Create memory HOBs // AddMemoryBaseSizeHob (MemoryBase, MemorySize); AddMemoryRangeHob (BASE_1MB, MemoryBase); AddMemoryRangeHob (0, BASE_512KB + BASE_128KB); MtrrSetMemoryAttribute (BASE_1MB, MemoryBase + MemorySize - BASE_1MB, CacheWriteBack); MtrrSetMemoryAttribute (0, BASE_512KB + BASE_128KB, CacheWriteBack); if (UpperMemorySize != 0) { AddUntestedMemoryBaseSizeHob (BASE_4GB, UpperMemorySize); MtrrSetMemoryAttribute (BASE_4GB, UpperMemorySize, CacheWriteBack); } return MemoryBase + MemorySize; }