/** @file Copyright (c) 2017 - 2019, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include #include #include #include #include #include #include EFI_STATUS TestPointCheckAcpiGcdResource ( VOID ); 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")); } VOID TestPointDumpGcd ( OUT EFI_GCD_MEMORY_SPACE_DESCRIPTOR **GcdMemoryMap, OPTIONAL OUT UINTN *GcdMemoryMapNumberOfDescriptors, OPTIONAL OUT EFI_GCD_IO_SPACE_DESCRIPTOR **GcdIoMap, OPTIONAL OUT UINTN *GcdIoMapNumberOfDescriptors, OPTIONAL IN BOOLEAN DumpPrint ) { EFI_STATUS Status; EFI_GCD_MEMORY_SPACE_DESCRIPTOR *MemoryMap; EFI_GCD_IO_SPACE_DESCRIPTOR *IoMap; UINTN NumberOfDescriptors; UINTN Index; if (GcdMemoryMap != NULL) { *GcdMemoryMap = NULL; *GcdMemoryMapNumberOfDescriptors = 0; } if (GcdIoMap != NULL) { *GcdIoMap = NULL; *GcdIoMapNumberOfDescriptors = 0; } if (DumpPrint) { 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)) { if (DumpPrint) { PrintMemoryDescriptorHeader (); for (Index = 0; Index < NumberOfDescriptors; Index++) { PrintMemoryDescriptor (&MemoryMap[Index]); } } if (GcdMemoryMap != NULL) { *GcdMemoryMap = AllocateCopyPool (NumberOfDescriptors * sizeof(EFI_GCD_MEMORY_SPACE_DESCRIPTOR), MemoryMap); *GcdMemoryMapNumberOfDescriptors = NumberOfDescriptors; } } if (DumpPrint) { DEBUG ((DEBUG_INFO, "GCD IO:\n")); } NumberOfDescriptors = 0; IoMap = NULL; Status = gDS->GetIoSpaceMap ( &NumberOfDescriptors, &IoMap ); if (!EFI_ERROR (Status)) { if (DumpPrint) { PrintIoDescriptorHeader (); for (Index = 0; Index < NumberOfDescriptors; Index++) { PrintIoDescriptor (&IoMap[Index]); } } if (GcdMemoryMap != NULL) { if (GcdIoMap != NULL) { *GcdIoMap = AllocateCopyPool (NumberOfDescriptors * sizeof(EFI_GCD_IO_SPACE_DESCRIPTOR), IoMap); } *GcdIoMapNumberOfDescriptors = NumberOfDescriptors; } } if (DumpPrint) { DEBUG ((DEBUG_INFO, "==== TestPointDumpGcd - Exit\n")); } return ; }