+++ /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