/** @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 ;
}