From 49ba9447c92d6fca214476381107a180d08e59d1 Mon Sep 17 00:00:00 2001 From: jljusten Date: Wed, 27 May 2009 21:10:18 +0000 Subject: Add initial version of Open Virtual Machine Firmware (OVMF) platform. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8398 6f19259b-4bc3-4df7-8a09-765794883524 --- OvmfPkg/PlatformPei/MemDetect.c | 100 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 OvmfPkg/PlatformPei/MemDetect.c (limited to 'OvmfPkg/PlatformPei/MemDetect.c') diff --git a/OvmfPkg/PlatformPei/MemDetect.c b/OvmfPkg/PlatformPei/MemDetect.c new file mode 100644 index 0000000000..daa83a0014 --- /dev/null +++ b/OvmfPkg/PlatformPei/MemDetect.c @@ -0,0 +1,100 @@ +/**@file + Memory Detection for Virtual Machines. + + Copyright (c) 2006 - 2009, Intel Corporation + All rights reserved. This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +Module Name: + + MemDetect.c + +**/ + +// +// The package level header files this module uses +// +#include + +// +// The Library classes this module consumes +// +#include +#include +#include +#include +#include + +#include "Platform.h" +#include "Cmos.h" + +STATIC +UINTN +GetSystemMemorySize ( + ) +{ + UINT8 Cmos0x34; + UINT8 Cmos0x35; + + // + // CMOS 0x34/0x35 specifies the system memory above 16 MB. + // * CMOS(0x35) is the high byte + // * CMOS(0x34) is the low byte + // * The size is specified in 64kb chunks + // * Since this is memory above 16MB, the 16MB must be added + // into the calculation to get the total memory size. + // + + Cmos0x34 = (UINT8) CmosRead8 (0x34); + Cmos0x35 = (UINT8) CmosRead8 (0x35); + + return ((((Cmos0x35 << 8) + Cmos0x34) << 16) + SIZE_16MB); +} + + +/** + Peform Memory Detection + + @return EFI_SUCCESS The PEIM initialized successfully. + +**/ +EFI_STATUS +MemDetect ( + ) +{ + EFI_STATUS Status; + EFI_PHYSICAL_ADDRESS MemoryBase; + UINT64 MemorySize; + UINT64 TotalMemorySize; + + DEBUG ((EFI_D_ERROR, "MemDetect called\n")); + + // + // Determine total memory size available + // + TotalMemorySize = (UINT64)GetSystemMemorySize (); + + MemoryBase = 0x800000; + MemorySize = TotalMemorySize - MemoryBase - 0x100000; + + // + // Publish this memory to the PEI Core + // + Status = PublishSystemMemory(MemoryBase, MemorySize); + ASSERT_EFI_ERROR (Status); + + // + // Create memory HOBs + // + AddMemoryBaseSizeHob (MemoryBase, MemorySize); + AddMemoryRangeHob (0x100000, 0x800000); + AddMemoryRangeHob (0x000000, 0x0A0000); + + return EFI_SUCCESS; +} + -- cgit v1.2.3