summaryrefslogtreecommitdiff
path: root/Platform/Intel/MinPlatformPkg/Test/Library/TestPointCheckLib/DxeDumpGcd.c
diff options
context:
space:
mode:
Diffstat (limited to 'Platform/Intel/MinPlatformPkg/Test/Library/TestPointCheckLib/DxeDumpGcd.c')
-rw-r--r--Platform/Intel/MinPlatformPkg/Test/Library/TestPointCheckLib/DxeDumpGcd.c230
1 files changed, 230 insertions, 0 deletions
diff --git a/Platform/Intel/MinPlatformPkg/Test/Library/TestPointCheckLib/DxeDumpGcd.c b/Platform/Intel/MinPlatformPkg/Test/Library/TestPointCheckLib/DxeDumpGcd.c
new file mode 100644
index 0000000000..46fde33ab1
--- /dev/null
+++ b/Platform/Intel/MinPlatformPkg/Test/Library/TestPointCheckLib/DxeDumpGcd.c
@@ -0,0 +1,230 @@
+/** @file
+
+Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+This program and the accompanying materials are licensed and made available under
+the terms and conditions of the BSD License that 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.
+
+**/
+
+#include <Uefi.h>
+#include <PiDxe.h>
+#include <Library/TestPointCheckLib.h>
+#include <Library/TestPointLib.h>
+#include <Library/DebugLib.h>
+#include <Library/DxeServicesTableLib.h>
+
+CHAR8 *mGcdMemoryTypeShortName[] = {
+ " NE ",
+ " RSVD",
+ " SYS ",
+ " MMIO",
+ " PERS",
+ " RELI",
+};
+
+CHAR8 mUnknownStr[11];
+
+CHAR8 *
+ShortNameOfGcdMemoryType(
+ IN UINT32 Type
+ )
+{
+ if (Type < sizeof(mGcdMemoryTypeShortName) / sizeof(mGcdMemoryTypeShortName[0])) {
+ return mGcdMemoryTypeShortName[Type];
+ } else {
+ return " ???? ";
+ }
+}
+
+CHAR8 *mGcdIoTypeShortName[] = {
+ " NE ",
+ " RSVD",
+ " SYS ",
+};
+
+CHAR8 *
+ShortNameOfGcdIoType(
+ IN UINT32 Type
+ )
+{
+ if (Type < sizeof(mGcdIoTypeShortName) / sizeof(mGcdIoTypeShortName[0])) {
+ return mGcdIoTypeShortName[Type];
+ } else {
+ return " ???? ";
+ }
+}
+
+VOID
+PrintBitMask (
+ IN UINT64 Bit,
+ IN UINT64 Capabilities,
+ IN UINT64 Attributes
+ )
+{
+ if ((Capabilities & Bit) != 0) {
+ if ((Attributes & Bit) != 0) {
+ DEBUG ((DEBUG_INFO, "1"));
+ } else {
+ DEBUG ((DEBUG_INFO, "0"));
+ }
+ } else {
+ DEBUG ((DEBUG_INFO, "-"));
+ }
+}
+
+VOID
+PrintMemoryDescriptorHeader (
+ VOID
+ )
+{
+ if (sizeof(UINT64) == sizeof(UINTN)) {
+ DEBUG ((DEBUG_INFO, " U \n"));
+ DEBUG ((DEBUG_INFO, " RRMNXRWCWWWU \n"));
+ DEBUG ((DEBUG_INFO, "Base Address End Address Type TORVPPPEBTCC Image Device \n"));
+ DEBUG ((DEBUG_INFO, "================ ================ ==== ============ ================ ================\n"));
+ } else {
+ DEBUG ((DEBUG_INFO, " U \n"));
+ DEBUG ((DEBUG_INFO, " RRMNXRWCWWWU \n"));
+ DEBUG ((DEBUG_INFO, "Base Address End Address Type TORVPPPEBTCC Image Device \n"));
+ DEBUG ((DEBUG_INFO, "================ ================ ==== ============ ======== ========\n"));
+ }
+}
+
+VOID
+PrintMemoryDescriptor (
+ EFI_GCD_MEMORY_SPACE_DESCRIPTOR *MemoryDescriptor
+ )
+{
+ DEBUG ((DEBUG_INFO,
+ "%016lx-%016lx",
+ MemoryDescriptor->BaseAddress,
+ MemoryDescriptor->BaseAddress + MemoryDescriptor->Length - 1
+ ));
+
+ DEBUG ((DEBUG_INFO, ShortNameOfGcdMemoryType(MemoryDescriptor->GcdMemoryType)));
+ DEBUG ((DEBUG_INFO, " "));
+
+ if (MemoryDescriptor->GcdMemoryType != EfiGcdMemoryTypeNonExistent) {
+ PrintBitMask (EFI_MEMORY_RUNTIME, MemoryDescriptor->Capabilities, MemoryDescriptor->Attributes);
+ PrintBitMask (EFI_MEMORY_RO, MemoryDescriptor->Capabilities, MemoryDescriptor->Attributes);
+ PrintBitMask (EFI_MEMORY_MORE_RELIABLE, MemoryDescriptor->Capabilities, MemoryDescriptor->Attributes);
+ PrintBitMask (EFI_MEMORY_NV, MemoryDescriptor->Capabilities, MemoryDescriptor->Attributes);
+ PrintBitMask (EFI_MEMORY_XP, MemoryDescriptor->Capabilities, MemoryDescriptor->Attributes);
+ PrintBitMask (EFI_MEMORY_RP, MemoryDescriptor->Capabilities, MemoryDescriptor->Attributes);
+ PrintBitMask (EFI_MEMORY_WP, MemoryDescriptor->Capabilities, MemoryDescriptor->Attributes);
+ PrintBitMask (EFI_MEMORY_UCE, MemoryDescriptor->Capabilities, MemoryDescriptor->Attributes);
+ PrintBitMask (EFI_MEMORY_WB, MemoryDescriptor->Capabilities, MemoryDescriptor->Attributes);
+ PrintBitMask (EFI_MEMORY_WT, MemoryDescriptor->Capabilities, MemoryDescriptor->Attributes);
+ PrintBitMask (EFI_MEMORY_WC, MemoryDescriptor->Capabilities, MemoryDescriptor->Attributes);
+ PrintBitMask (EFI_MEMORY_UC, MemoryDescriptor->Capabilities, MemoryDescriptor->Attributes);
+ } else {
+ DEBUG ((DEBUG_INFO, " "));
+ }
+
+ if (sizeof(UINT64) == sizeof(UINTN)) {
+ if (MemoryDescriptor->ImageHandle != NULL) {
+ DEBUG ((DEBUG_INFO, " %016lx", (UINT64)(UINTN)MemoryDescriptor->ImageHandle));
+ if (MemoryDescriptor->DeviceHandle != NULL) {
+ DEBUG ((DEBUG_INFO, " %016lx", (UINT64)(UINTN)MemoryDescriptor->ImageHandle));
+ }
+ }
+ } else {
+ if (MemoryDescriptor->ImageHandle != NULL) {
+ DEBUG ((DEBUG_INFO, " %08x", MemoryDescriptor->ImageHandle));
+ if (MemoryDescriptor->DeviceHandle != NULL) {
+ DEBUG ((DEBUG_INFO, " %08x", MemoryDescriptor->ImageHandle));
+ }
+ }
+ }
+
+ DEBUG ((DEBUG_INFO, "\n"));
+}
+
+VOID
+PrintIoDescriptorHeader (
+ VOID
+ )
+{
+ DEBUG ((DEBUG_INFO, "Base Address End Address Type Image Device \n"));
+ DEBUG ((DEBUG_INFO, "================ ================ ==== ======== ========\n"));
+}
+
+VOID
+PrintIoDescriptor (
+ EFI_GCD_IO_SPACE_DESCRIPTOR *IoDescriptor
+ )
+{
+ DEBUG ((DEBUG_INFO,
+ "%016lx-%016lx",
+ IoDescriptor->BaseAddress,
+ IoDescriptor->BaseAddress + IoDescriptor->Length - 1
+ ));
+
+ DEBUG ((DEBUG_INFO, ShortNameOfGcdIoType (IoDescriptor->GcdIoType)));
+
+ if (IoDescriptor->ImageHandle != NULL) {
+ DEBUG ((DEBUG_INFO, " %08x", IoDescriptor->ImageHandle));
+ if (IoDescriptor->DeviceHandle != NULL) {
+ DEBUG ((DEBUG_INFO, " %08x", IoDescriptor->ImageHandle));
+ }
+ }
+
+ DEBUG ((DEBUG_INFO, "\n"));
+}
+
+EFI_STATUS
+TestPointDumpGcd (
+ VOID
+ )
+{
+ EFI_STATUS Status;
+ EFI_GCD_MEMORY_SPACE_DESCRIPTOR *MemoryMap;
+ EFI_GCD_IO_SPACE_DESCRIPTOR *IoMap;
+ UINTN NumberOfDescriptors;
+ UINTN Index;
+
+ DEBUG ((DEBUG_INFO, "==== TestPointDumpGcd - Enter\n"));
+ DEBUG ((DEBUG_INFO, "GCD MEM:\n"));
+ NumberOfDescriptors = 0;
+ MemoryMap = NULL;
+ Status = gDS->GetMemorySpaceMap (
+ &NumberOfDescriptors,
+ &MemoryMap
+ );
+ if (!EFI_ERROR (Status)) {
+ PrintMemoryDescriptorHeader ();
+ for (Index = 0; Index < NumberOfDescriptors; Index++) {
+ PrintMemoryDescriptor (&MemoryMap[Index]);
+ }
+ } else {
+ TestPointLibAppendErrorString (
+ PLATFORM_TEST_POINT_ROLE_PLATFORM_IBV,
+ NULL,
+ TEST_POINT_BYTE2_END_OF_DXE_ERROR_CODE_3 TEST_POINT_END_OF_DXE TEST_POINT_BYTE2_END_OF_DXE_ERROR_STRING_3
+ );
+ goto Done;
+ }
+
+ DEBUG ((DEBUG_INFO, "GCD IO:\n"));
+ NumberOfDescriptors = 0;
+ IoMap = NULL;
+ Status = gDS->GetIoSpaceMap (
+ &NumberOfDescriptors,
+ &IoMap
+ );
+ if (!EFI_ERROR (Status)) {
+ PrintIoDescriptorHeader ();
+ for (Index = 0; Index < NumberOfDescriptors; Index++) {
+ PrintIoDescriptor (&IoMap[Index]);
+ }
+ }
+
+Done:
+ DEBUG ((DEBUG_INFO, "==== TestPointDumpGcd - Exit\n"));
+ return Status;
+}