]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/GenericMemoryTest/NullMemoryTestDxe/NullMemoryTest.c
Adjust directory structures.
[mirror_edk2.git] / MdeModulePkg / Universal / GenericMemoryTest / NullMemoryTestDxe / NullMemoryTest.c
diff --git a/MdeModulePkg/Universal/GenericMemoryTest/NullMemoryTestDxe/NullMemoryTest.c b/MdeModulePkg/Universal/GenericMemoryTest/NullMemoryTestDxe/NullMemoryTest.c
new file mode 100644 (file)
index 0000000..7a20a41
--- /dev/null
@@ -0,0 +1,214 @@
+/*++\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