--- /dev/null
+/*++\r
+\r
+Copyright (c) 2006 - 2007, Intel Corporation \r
+All rights reserved. This program and the accompanying materials \r
+are licensed and made available under the terms and conditions of the BSD License \r
+which accompanies this distribution. The full text of the license may be found at \r
+http://opensource.org/licenses/bsd-license.php \r
+ \r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+\r
+Module Name:\r
+\r
+ NullMemoryTest.c\r
+ \r
+Abstract:\r
+\r
+--*/\r
+\r
+\r
+#include "NullMemoryTest.h"\r
+\r
+//\r
+// Module global members\r
+//\r
+UINT64 mTestedSystemMemory = 0;\r
+UINT64 mTotalSystemMemory = 0;\r
+EFI_HANDLE mGenericMemoryTestHandle;\r
+\r
+//\r
+// Driver entry here\r
+//\r
+EFI_GENERIC_MEMORY_TEST_PROTOCOL mGenericMemoryTest = {\r
+ InitializeMemoryTest,\r
+ GenPerformMemoryTest,\r
+ GenMemoryTestFinished,\r
+ GenCompatibleRangeTest\r
+};\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+GenericMemoryTestEntryPoint (\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ The generic memory test driver's entry point, it can initialize private data\r
+ to default value\r
+\r
+Arguments:\r
+\r
+ ImageHandle of the loaded driver\r
+ Pointer to the System Table\r
+\r
+Returns:\r
+\r
+ Status\r
+\r
+ EFI_SUCCESS - Protocol successfully installed\r
+ EFI_OUT_OF_RESOURCES - Can not allocate protocol data structure in base\r
+ memory\r
+\r
+--*/\r
+{\r
+ EFI_STATUS Status;\r
+\r
+ //\r
+ // Install the protocol\r
+ //\r
+ Status = gBS->InstallProtocolInterface (\r
+ &mGenericMemoryTestHandle,\r
+ &gEfiGenericMemTestProtocolGuid,\r
+ EFI_NATIVE_INTERFACE,\r
+ &mGenericMemoryTest\r
+ );\r
+\r
+ return Status;\r
+}\r
+//\r
+// EFI_GENERIC_MEMORY_TEST_PROTOCOL implementation\r
+//\r
+EFI_STATUS\r
+EFIAPI\r
+InitializeMemoryTest (\r
+ IN EFI_GENERIC_MEMORY_TEST_PROTOCOL *This,\r
+ IN EXTENDMEM_COVERAGE_LEVEL Level,\r
+ OUT BOOLEAN *RequireSoftECCInit\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+Arguments:\r
+\r
+Returns:\r
+\r
+--*/\r
+{\r
+ UINTN NumberOfDescriptors;\r
+ EFI_GCD_MEMORY_SPACE_DESCRIPTOR *MemorySpaceMap;\r
+ UINTN Index;\r
+\r
+ gDS->GetMemorySpaceMap (&NumberOfDescriptors, &MemorySpaceMap);\r
+ for (Index = 0; Index < NumberOfDescriptors; Index++) {\r
+ if (MemorySpaceMap[Index].GcdMemoryType == EfiGcdMemoryTypeReserved &&\r
+ (MemorySpaceMap[Index].Capabilities & (EFI_MEMORY_PRESENT | EFI_MEMORY_INITIALIZED | EFI_MEMORY_TESTED)) ==\r
+ (EFI_MEMORY_PRESENT | EFI_MEMORY_INITIALIZED)\r
+ ) {\r
+ gDS->RemoveMemorySpace (\r
+ MemorySpaceMap[Index].BaseAddress,\r
+ MemorySpaceMap[Index].Length\r
+ );\r
+\r
+ gDS->AddMemorySpace (\r
+ EfiGcdMemoryTypeSystemMemory,\r
+ MemorySpaceMap[Index].BaseAddress,\r
+ MemorySpaceMap[Index].Length,\r
+ MemorySpaceMap[Index].Capabilities &~\r
+ (EFI_MEMORY_PRESENT | EFI_MEMORY_INITIALIZED | EFI_MEMORY_TESTED | EFI_MEMORY_RUNTIME)\r
+ );\r
+\r
+ mTestedSystemMemory += MemorySpaceMap[Index].Length;\r
+ mTotalSystemMemory += MemorySpaceMap[Index].Length;\r
+ } else if (MemorySpaceMap[Index].GcdMemoryType == EfiGcdMemoryTypeSystemMemory) {\r
+ mTotalSystemMemory += MemorySpaceMap[Index].Length;\r
+ }\r
+ }\r
+\r
+ FreePool (MemorySpaceMap);\r
+\r
+ *RequireSoftECCInit = FALSE;\r
+ return EFI_SUCCESS;\r
+}\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+GenPerformMemoryTest (\r
+ IN EFI_GENERIC_MEMORY_TEST_PROTOCOL *This,\r
+ IN OUT UINT64 *TestedMemorySize,\r
+ OUT UINT64 *TotalMemorySize,\r
+ OUT BOOLEAN *ErrorOut,\r
+ IN BOOLEAN TestAbort\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+Arguments:\r
+\r
+Returns:\r
+\r
+--*/\r
+{\r
+ *ErrorOut = FALSE;\r
+ *TestedMemorySize = mTestedSystemMemory;\r
+ *TotalMemorySize = mTotalSystemMemory;\r
+\r
+ return EFI_NOT_FOUND;\r
+\r
+}\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+GenMemoryTestFinished (\r
+ IN EFI_GENERIC_MEMORY_TEST_PROTOCOL *This\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+Arguments:\r
+\r
+Returns:\r
+\r
+--*/\r
+{\r
+ return EFI_SUCCESS;\r
+}\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+GenCompatibleRangeTest (\r
+ IN EFI_GENERIC_MEMORY_TEST_PROTOCOL *This,\r
+ IN EFI_PHYSICAL_ADDRESS StartAddress,\r
+ IN UINT64 Length\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+Arguments:\r
+\r
+Returns:\r
+\r
+--*/\r
+{\r
+ EFI_GCD_MEMORY_SPACE_DESCRIPTOR descriptor;\r
+\r
+ gDS->GetMemorySpaceDescriptor (StartAddress, &descriptor);\r
+\r
+ gDS->RemoveMemorySpace (StartAddress, Length);\r
+\r
+ gDS->AddMemorySpace (\r
+ EfiGcdMemoryTypeSystemMemory,\r
+ StartAddress,\r
+ Length,\r
+ descriptor.Capabilities &~(EFI_MEMORY_PRESENT | EFI_MEMORY_INITIALIZED | EFI_MEMORY_TESTED | EFI_MEMORY_RUNTIME)\r
+ );\r
+\r
+ return EFI_SUCCESS;\r
+}\r