From 18f31ada8d5f02a42408dfe4092a8bcc71fc4ed9 Mon Sep 17 00:00:00 2001 From: Jordan Justen Date: Sat, 1 Feb 2014 21:22:25 +0000 Subject: [PATCH] OvmfPkg/PlatformPei: Add XenPublishRamRegions This will be called from a unified MemDetect function. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jordan Justen Reviewed-by: Wei Liu git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15203 6f19259b-4bc3-4df7-8a09-765794883524 --- OvmfPkg/PlatformPei/Platform.c | 41 +-------------------------- OvmfPkg/PlatformPei/Platform.h | 7 ++--- OvmfPkg/PlatformPei/Xen.c | 52 ++++++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+), 44 deletions(-) diff --git a/OvmfPkg/PlatformPei/Platform.c b/OvmfPkg/PlatformPei/Platform.c index 6166226481..743044d29e 100644 --- a/OvmfPkg/PlatformPei/Platform.c +++ b/OvmfPkg/PlatformPei/Platform.c @@ -34,10 +34,6 @@ #include #include #include -#include -#include -#include -#include #include "Platform.h" #include "Cmos.h" @@ -172,12 +168,6 @@ XenMemMapInitialization ( VOID ) { - EFI_E820_ENTRY64 *E820Map; - UINT32 E820EntriesCount; - EFI_STATUS Status; - - DEBUG ((EFI_D_INFO, "Using memory map provided by Xen\n")); - // // Create Memory Type Information HOB // @@ -203,36 +193,7 @@ XenMemMapInitialization ( // AddIoMemoryRangeHob (0x0A0000, BASE_1MB); - // - // Parse RAM in E820 map - // - Status = XenGetE820Map(&E820Map, &E820EntriesCount); - - ASSERT_EFI_ERROR (Status); - - if (E820EntriesCount > 0) { - EFI_E820_ENTRY64 *Entry; - UINT32 Loop; - - for (Loop = 0; Loop < E820EntriesCount; Loop++) { - Entry = E820Map + Loop; - - // - // Only care about RAM - // - if (Entry->Type != EfiAcpiAddressRangeMemory) { - continue; - } - - if (Entry->BaseAddr >= BASE_4GB) { - AddUntestedMemoryBaseSizeHob (Entry->BaseAddr, Entry->Length); - } else { - AddMemoryBaseSizeHob (Entry->BaseAddr, Entry->Length); - } - - MtrrSetMemoryAttribute (Entry->BaseAddr, Entry->Length, CacheWriteBack); - } - } + XenPublishRamRegions (); } diff --git a/OvmfPkg/PlatformPei/Platform.h b/OvmfPkg/PlatformPei/Platform.h index 4b72ee6b72..fa1a4bfe36 100644 --- a/OvmfPkg/PlatformPei/Platform.h +++ b/OvmfPkg/PlatformPei/Platform.h @@ -86,10 +86,9 @@ XenDetect ( extern BOOLEAN mXen; -EFI_STATUS -XenGetE820Map ( - EFI_E820_ENTRY64 **Entries, - UINT32 *Count +VOID +XenPublishRamRegions ( + VOID ); #endif // _PLATFORM_PEI_H_INCLUDED_ diff --git a/OvmfPkg/PlatformPei/Xen.c b/OvmfPkg/PlatformPei/Xen.c index da3133bb9b..3a2e358661 100644 --- a/OvmfPkg/PlatformPei/Xen.c +++ b/OvmfPkg/PlatformPei/Xen.c @@ -27,6 +27,9 @@ #include #include #include +#include +#include +#include #include "Platform.h" #include "Xen.h" @@ -149,6 +152,55 @@ XenDetect ( return FALSE; } + +VOID +XenPublishRamRegions ( + VOID + ) +{ + EFI_E820_ENTRY64 *E820Map; + UINT32 E820EntriesCount; + EFI_STATUS Status; + + if (!mXen) { + return; + } + + DEBUG ((EFI_D_INFO, "Using memory map provided by Xen\n")); + + // + // Parse RAM in E820 map + // + Status = XenGetE820Map (&E820Map, &E820EntriesCount); + + ASSERT_EFI_ERROR (Status); + + if (E820EntriesCount > 0) { + EFI_E820_ENTRY64 *Entry; + UINT32 Loop; + + for (Loop = 0; Loop < E820EntriesCount; Loop++) { + Entry = E820Map + Loop; + + // + // Only care about RAM + // + if (Entry->Type != EfiAcpiAddressRangeMemory) { + continue; + } + + if (Entry->BaseAddr >= BASE_4GB) { + AddUntestedMemoryBaseSizeHob (Entry->BaseAddr, Entry->Length); + } else { + AddMemoryBaseSizeHob (Entry->BaseAddr, Entry->Length); + } + + MtrrSetMemoryAttribute (Entry->BaseAddr, Entry->Length, CacheWriteBack); + } + } +} + + /** Perform Xen PEI initialization. -- 2.39.2