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