/** 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; }
/** Peform Memory Detection for QEMU / KVM **/ STATIC VOID QemuInitializeRam ( VOID ) { UINT64 LowerMemorySize; UINT64 UpperMemorySize; DEBUG ((EFI_D_INFO, "%a called\n", __FUNCTION__)); // // Determine total memory size available // LowerMemorySize = GetSystemMemorySizeBelow4gb (); UpperMemorySize = GetSystemMemorySizeAbove4gb (); if (mBootMode != BOOT_ON_S3_RESUME) { // // Create memory HOBs // AddMemoryRangeHob (BASE_1MB, LowerMemorySize); AddMemoryRangeHob (0, BASE_512KB + BASE_128KB); } MtrrSetMemoryAttribute (BASE_1MB, LowerMemorySize - BASE_1MB, CacheWriteBack); MtrrSetMemoryAttribute (0, BASE_512KB + BASE_128KB, CacheWriteBack); if (UpperMemorySize != 0) { if (mBootMode != BOOT_ON_S3_RESUME) { AddUntestedMemoryBaseSizeHob (BASE_4GB, UpperMemorySize); } MtrrSetMemoryAttribute (BASE_4GB, UpperMemorySize, CacheWriteBack); } }