From 05177bef4474c8ff9c82e3fe40176ba9a59f9277 Mon Sep 17 00:00:00 2001 From: yshang1 Date: Thu, 19 Jul 2007 08:26:33 +0000 Subject: Rename the MemoryTest Pei and Dxe. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@3361 6f19259b-4bc3-4df7-8a09-765794883524 --- .../MemoryTest/NullMemoryTestDxe/NullMemoryTest.c | 214 +++++++++++++++++++++ .../MemoryTest/NullMemoryTestDxe/NullMemoryTest.h | 124 ++++++++++++ .../NullMemoryTestDxe/NullMemoryTestDxe.inf | 50 +++++ .../NullMemoryTestDxe/NullMemoryTestDxe.msa | 64 ++++++ 4 files changed, 452 insertions(+) create mode 100644 MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTest.c create mode 100644 MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTest.h create mode 100644 MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf create mode 100644 MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.msa (limited to 'MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe') diff --git a/MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTest.c b/MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTest.c new file mode 100644 index 0000000000..7a20a41312 --- /dev/null +++ b/MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTest.c @@ -0,0 +1,214 @@ +/*++ + +Copyright (c) 2006 - 2007, 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: + + NullMemoryTest.c + +Abstract: + +--*/ + + +#include "NullMemoryTest.h" + +// +// Module global members +// +UINT64 mTestedSystemMemory = 0; +UINT64 mTotalSystemMemory = 0; +EFI_HANDLE mGenericMemoryTestHandle; + +// +// Driver entry here +// +EFI_GENERIC_MEMORY_TEST_PROTOCOL mGenericMemoryTest = { + InitializeMemoryTest, + GenPerformMemoryTest, + GenMemoryTestFinished, + GenCompatibleRangeTest +}; + +EFI_STATUS +EFIAPI +GenericMemoryTestEntryPoint ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +/*++ + +Routine Description: + + The generic memory test driver's entry point, it can initialize private data + to default value + +Arguments: + + ImageHandle of the loaded driver + Pointer to the System Table + +Returns: + + Status + + EFI_SUCCESS - Protocol successfully installed + EFI_OUT_OF_RESOURCES - Can not allocate protocol data structure in base + memory + +--*/ +{ + EFI_STATUS Status; + + // + // Install the protocol + // + Status = gBS->InstallProtocolInterface ( + &mGenericMemoryTestHandle, + &gEfiGenericMemTestProtocolGuid, + EFI_NATIVE_INTERFACE, + &mGenericMemoryTest + ); + + return Status; +} +// +// EFI_GENERIC_MEMORY_TEST_PROTOCOL implementation +// +EFI_STATUS +EFIAPI +InitializeMemoryTest ( + IN EFI_GENERIC_MEMORY_TEST_PROTOCOL *This, + IN EXTENDMEM_COVERAGE_LEVEL Level, + OUT BOOLEAN *RequireSoftECCInit + ) +/*++ + +Routine Description: + +Arguments: + +Returns: + +--*/ +{ + UINTN NumberOfDescriptors; + EFI_GCD_MEMORY_SPACE_DESCRIPTOR *MemorySpaceMap; + UINTN Index; + + gDS->GetMemorySpaceMap (&NumberOfDescriptors, &MemorySpaceMap); + for (Index = 0; Index < NumberOfDescriptors; Index++) { + if (MemorySpaceMap[Index].GcdMemoryType == EfiGcdMemoryTypeReserved && + (MemorySpaceMap[Index].Capabilities & (EFI_MEMORY_PRESENT | EFI_MEMORY_INITIALIZED | EFI_MEMORY_TESTED)) == + (EFI_MEMORY_PRESENT | EFI_MEMORY_INITIALIZED) + ) { + gDS->RemoveMemorySpace ( + MemorySpaceMap[Index].BaseAddress, + MemorySpaceMap[Index].Length + ); + + gDS->AddMemorySpace ( + EfiGcdMemoryTypeSystemMemory, + MemorySpaceMap[Index].BaseAddress, + MemorySpaceMap[Index].Length, + MemorySpaceMap[Index].Capabilities &~ + (EFI_MEMORY_PRESENT | EFI_MEMORY_INITIALIZED | EFI_MEMORY_TESTED | EFI_MEMORY_RUNTIME) + ); + + mTestedSystemMemory += MemorySpaceMap[Index].Length; + mTotalSystemMemory += MemorySpaceMap[Index].Length; + } else if (MemorySpaceMap[Index].GcdMemoryType == EfiGcdMemoryTypeSystemMemory) { + mTotalSystemMemory += MemorySpaceMap[Index].Length; + } + } + + FreePool (MemorySpaceMap); + + *RequireSoftECCInit = FALSE; + return EFI_SUCCESS; +} + +EFI_STATUS +EFIAPI +GenPerformMemoryTest ( + IN EFI_GENERIC_MEMORY_TEST_PROTOCOL *This, + IN OUT UINT64 *TestedMemorySize, + OUT UINT64 *TotalMemorySize, + OUT BOOLEAN *ErrorOut, + IN BOOLEAN TestAbort + ) +/*++ + +Routine Description: + +Arguments: + +Returns: + +--*/ +{ + *ErrorOut = FALSE; + *TestedMemorySize = mTestedSystemMemory; + *TotalMemorySize = mTotalSystemMemory; + + return EFI_NOT_FOUND; + +} + +EFI_STATUS +EFIAPI +GenMemoryTestFinished ( + IN EFI_GENERIC_MEMORY_TEST_PROTOCOL *This + ) +/*++ + +Routine Description: + +Arguments: + +Returns: + +--*/ +{ + return EFI_SUCCESS; +} + +EFI_STATUS +EFIAPI +GenCompatibleRangeTest ( + IN EFI_GENERIC_MEMORY_TEST_PROTOCOL *This, + IN EFI_PHYSICAL_ADDRESS StartAddress, + IN UINT64 Length + ) +/*++ + +Routine Description: + +Arguments: + +Returns: + +--*/ +{ + EFI_GCD_MEMORY_SPACE_DESCRIPTOR descriptor; + + gDS->GetMemorySpaceDescriptor (StartAddress, &descriptor); + + gDS->RemoveMemorySpace (StartAddress, Length); + + gDS->AddMemorySpace ( + EfiGcdMemoryTypeSystemMemory, + StartAddress, + Length, + descriptor.Capabilities &~(EFI_MEMORY_PRESENT | EFI_MEMORY_INITIALIZED | EFI_MEMORY_TESTED | EFI_MEMORY_RUNTIME) + ); + + return EFI_SUCCESS; +} diff --git a/MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTest.h b/MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTest.h new file mode 100644 index 0000000000..4b04381812 --- /dev/null +++ b/MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTest.h @@ -0,0 +1,124 @@ +/*++ + +Copyright (c) 2006, 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: + + NullMemoryTest.h + +Abstract: + The generic memory test driver definition + +--*/ + +#ifndef _NULL_MEMORY_TEST_H +#define _NULL_MEMORY_TEST_H + +// +// The package level header files this module uses +// +#include + +// +// The protocols, PPI and GUID defintions for this module +// +#include +// +// The Library classes this module consumes +// +#include +#include +#include +#include +#include + +// +// attributes for reserved memory before it is promoted to system memory +// +#define EFI_MEMORY_PRESENT 0x0100000000000000ULL +#define EFI_MEMORY_INITIALIZED 0x0200000000000000ULL +#define EFI_MEMORY_TESTED 0x0400000000000000ULL + + +// +// Some global define +// +#define GENERIC_CACHELINE_SIZE 0x40 + +// +// The SPARSE_SPAN_SIZE size can not small then the MonoTestSize +// +#define TEST_BLOCK_SIZE 0x2000000 +#define QUICK_SPAN_SIZE (TEST_BLOCK_SIZE >> 2) +#define SPARSE_SPAN_SIZE (TEST_BLOCK_SIZE >> 4) + +// +// This structure records every nontested memory range parsed through GCD +// service. +// +#define EFI_NONTESTED_MEMORY_RANGE_SIGNATURE EFI_SIGNATURE_32 ('N', 'T', 'M', 'E') +typedef struct { + UINTN Signature; + LIST_ENTRY Link; + EFI_PHYSICAL_ADDRESS StartAddress; + UINT64 Length; + UINT64 Capabilities; + BOOLEAN Above4G; + BOOLEAN AlreadyMapped; +} NONTESTED_MEMORY_RANGE; + +#define NONTESTED_MEMORY_RANGE_FROM_LINK(link) \ + CR(link, NONTESTED_MEMORY_RANGE, Link, EFI_NONTESTED_MEMORY_RANGE_SIGNATURE) + +// +// This is the memory test driver's structure definition +// +#define EFI_GENERIC_MEMORY_TEST_PRIVATE_SIGNATURE EFI_SIGNATURE_32 ('G', 'E', 'M', 'T') + +// +// Function Prototypes +// +EFI_STATUS +EFIAPI +InitializeMemoryTest ( + IN EFI_GENERIC_MEMORY_TEST_PROTOCOL *This, + IN EXTENDMEM_COVERAGE_LEVEL Level, + OUT BOOLEAN *RequireSoftECCInit + ) +; + +EFI_STATUS +EFIAPI +GenPerformMemoryTest ( + IN EFI_GENERIC_MEMORY_TEST_PROTOCOL *This, + IN OUT UINT64 *TestedMemorySize, + OUT UINT64 *TotalMemorySize, + OUT BOOLEAN *ErrorOut, + IN BOOLEAN TestAbort + ) +; + +EFI_STATUS +EFIAPI +GenMemoryTestFinished ( + IN EFI_GENERIC_MEMORY_TEST_PROTOCOL *This + ) +; + +EFI_STATUS +EFIAPI +GenCompatibleRangeTest ( + IN EFI_GENERIC_MEMORY_TEST_PROTOCOL *This, + IN EFI_PHYSICAL_ADDRESS StartAddress, + IN UINT64 Length + ) +; + +#endif diff --git a/MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf b/MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf new file mode 100644 index 0000000000..fb0c7ee9fa --- /dev/null +++ b/MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf @@ -0,0 +1,50 @@ +#/** @file +# Component description file for NullMemoryTest module. +# +# This driver installs EFI_GENERIC_MEMORY_TEST_PROTOCOL to +# provide simple generic memory test functions. +# Copyright (c) 2006 - 2007, 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. +# +# +#**/ + +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = NullMemoryTestDxe + FILE_GUID = 96B5C032-DF4C-4b6e-8232-438DCF448D0E + MODULE_TYPE = DXE_DRIVER + VERSION_STRING = 1.0 + EDK_RELEASE_VERSION = 0x00020000 + EFI_SPECIFICATION_VERSION = 0x00020000 + + ENTRY_POINT = GenericMemoryTestEntryPoint + +# VALID_ARCHITECTURES = IA32 X64 IPF EBC + +[Sources.common] + NullMemoryTest.h + NullMemoryTest.c + +[Packages] + MdeModulePkg/MdeModulePkg.dec + MdePkg/MdePkg.dec + +[LibraryClasses] + MemoryAllocationLib + UefiBootServicesTableLib + DxeServicesTableLib + UefiDriverEntryPoint + DebugLib + +[Protocols] + gEfiGenericMemTestProtocolGuid # PROTOCOL ALWAYS_PRODUCED + +[Depex] + TRUE \ No newline at end of file diff --git a/MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.msa b/MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.msa new file mode 100644 index 0000000000..ade8ce1050 --- /dev/null +++ b/MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.msa @@ -0,0 +1,64 @@ + + + + NullMemoryTest + DXE_DRIVER + 96B5C032-DF4C-4b6e-8232-438DCF448D0E + 1.0 + Component description file for NullMemoryTest module. + This driver installs EFI_GENERIC_MEMORY_TEST_PROTOCOL to + provide simple generic memory test functions. + Copyright (c) 2006 - 2007, 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. + FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052 + + + IA32 X64 IPF EBC + false + NullMemoryTest + + + + DebugLib + + + UefiDriverEntryPoint + + + DxeServicesTableLib + + + UefiBootServicesTableLib + + + MemoryAllocationLib + + + + Common.h + NullMemoryTest.c + NullMemoryTest.h + NullMemoryTest.dxs + + + + + + + + gEfiGenericMemTestProtocolGuid + + + + EFI_SPECIFICATION_VERSION 0x00020000 + EDK_RELEASE_VERSION 0x00020000 + + GenericMemoryTestEntryPoint + + + -- cgit v1.2.3