/** @file
Copyright (c) 2017, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include
#include
#include
#include
#include
#include
#include
#include
#include
CHAR8 *mFwTypeString[] = {
" Unknown ",
" System ",
" Device ",
" Driver ",
};
CHAR8 *mLastAttemptStatusString[] = {
"Success",
"Error: Unsuccessful",
"Error: Insufficient Resources",
"Error: Incorrect Version",
"Error: Invalid Format",
"Error: Auth Error",
"Error: Power Event AC",
"Error: Power Event Battery",
};
STATIC CHAR8 mUnknownStr[11];
CHAR8 *
FwTypeToString(
IN UINT32 FwType
)
{
if (FwType < sizeof(mFwTypeString) / sizeof(mFwTypeString[0])) {
return mFwTypeString[FwType];
} else {
AsciiSPrint(mUnknownStr, sizeof(mUnknownStr), "[%08x]", FwType);
return mUnknownStr;
}
}
CHAR8 *
LastAttemptStatusToString(
IN UINT32 LastAttemptStatus
)
{
if (LastAttemptStatus < sizeof(mLastAttemptStatusString) / sizeof(mLastAttemptStatusString[0])) {
return mLastAttemptStatusString[LastAttemptStatus];
} else {
return "Error: Unknown";
}
}
VOID
DumpEsrt (
IN EFI_SYSTEM_RESOURCE_TABLE *Esrt
)
{
UINTN Index;
EFI_SYSTEM_RESOURCE_ENTRY *EsrtEntry;
DEBUG ((DEBUG_INFO, "ESRT Table:"));
DEBUG ((DEBUG_INFO, " Count=0x%x", Esrt->FwResourceCount));
DEBUG ((DEBUG_INFO, " CountMax=0x%x", Esrt->FwResourceCountMax));
DEBUG ((DEBUG_INFO, " Version=0x%lx\n", Esrt->FwResourceVersion));
DEBUG ((DEBUG_INFO, " FwClass FwType Version LowestVer Flags AttemptVer Attempt\n"));
//DEBUG ((DEBUG_INFO, " 00000000-0000-0000-0000-000000000000 [00000000] 0x00000000 0x00000000 0x00000000 0x00000000 Success\n"));
EsrtEntry = (VOID *)(Esrt + 1);
for (Index = 0; Index < Esrt->FwResourceCount; Index++) {
DEBUG ((DEBUG_INFO, " %g ", &EsrtEntry->FwClass));
DEBUG ((DEBUG_INFO, FwTypeToString(EsrtEntry->FwType)));
DEBUG ((DEBUG_INFO, " 0x%08x", EsrtEntry->FwVersion));
DEBUG ((DEBUG_INFO, " 0x%08x", EsrtEntry->LowestSupportedFwVersion));
DEBUG ((DEBUG_INFO, " 0x%08x", EsrtEntry->CapsuleFlags));
DEBUG ((DEBUG_INFO, " 0x%08x ", EsrtEntry->LastAttemptVersion));
DEBUG ((DEBUG_INFO, LastAttemptStatusToString(EsrtEntry->LastAttemptStatus)));
DEBUG ((DEBUG_INFO, "\n"));
EsrtEntry++;
}
}
EFI_STATUS
TestPointCheckEsrt (
VOID
)
{
EFI_STATUS Status;
EFI_SYSTEM_RESOURCE_TABLE *Esrt;
DEBUG ((DEBUG_INFO, "==== TestPointCheckEsrt - Enter\n"));
Status = EfiGetSystemConfigurationTable (&gEfiSystemResourceTableGuid, (VOID **)&Esrt);
if (!EFI_ERROR(Status)) {
DumpEsrt(Esrt);
} else {
TestPointLibAppendErrorString (
PLATFORM_TEST_POINT_ROLE_PLATFORM_IBV,
NULL,
TEST_POINT_BYTE8_READY_TO_BOOT_ESRT_TABLE_FUNCTIONAL_ERROR_CODE \
TEST_POINT_READY_TO_BOOT \
TEST_POINT_BYTE8_READY_TO_BOOT_ESRT_TABLE_FUNCTIONAL_ERROR_STRING
);
}
DEBUG ((DEBUG_INFO, "==== TestPointCheckEsrt - Exit\n"));
return Status;
}