/** @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 #include /** Dump HSTI info @param[in] HstiData - Pointer to HSTI data **/ VOID DumpHsti ( IN VOID *HstiData ) { ADAPTER_INFO_PLATFORM_SECURITY *Hsti; UINT8 *SecurityFeatures; CHAR16 *ErrorString; UINTN Index; CHAR16 ErrorChar; Hsti = HstiData; DEBUG ((DEBUG_INFO, "HSTI\n")); DEBUG ((DEBUG_INFO, " Version - 0x%08x\n", Hsti->Version)); DEBUG ((DEBUG_INFO, " Role - 0x%08x\n", Hsti->Role)); DEBUG ((DEBUG_INFO, " ImplementationID - %S\n", Hsti->ImplementationID)); DEBUG ((DEBUG_INFO, " SecurityFeaturesSize - 0x%08x\n", Hsti->SecurityFeaturesSize)); SecurityFeatures = (UINT8 *) (Hsti + 1); DEBUG ((DEBUG_INFO, " SecurityFeaturesImplemented - ")); for (Index = 0; Index < Hsti->SecurityFeaturesSize; Index++) { DEBUG ((DEBUG_INFO, "%02x ", SecurityFeatures[Index])); } DEBUG ((DEBUG_INFO, "\n")); SecurityFeatures = (UINT8 *) (SecurityFeatures + Hsti->SecurityFeaturesSize); DEBUG ((DEBUG_INFO, " SecurityFeaturesVerified - ")); for (Index = 0; Index < Hsti->SecurityFeaturesSize; Index++) { DEBUG ((DEBUG_INFO, "%02x ", SecurityFeatures[Index])); } DEBUG ((DEBUG_INFO, "\n")); ErrorString = (CHAR16 *) (SecurityFeatures + Hsti->SecurityFeaturesSize); DEBUG ((DEBUG_INFO, " ErrorString - \"")); CopyMem (&ErrorChar, ErrorString, sizeof (ErrorChar)); for (; ErrorChar != 0;) { DEBUG ((DEBUG_INFO, "%c", ErrorChar)); ErrorString++; CopyMem (&ErrorChar, ErrorString, sizeof (ErrorChar)); } DEBUG ((DEBUG_INFO, "\"\n")); } UINT32 mRole[] = { PLATFORM_SECURITY_ROLE_PLATFORM_REFERENCE, PLATFORM_SECURITY_ROLE_PLATFORM_IBV, PLATFORM_SECURITY_ROLE_IMPLEMENTOR_OEM, PLATFORM_SECURITY_ROLE_IMPLEMENTOR_ODM, }; EFI_STATUS TestPointCheckHsti ( VOID ) { VOID *Hsti; UINTN HstiSize; EFI_STATUS Status; UINTN Index; BOOLEAN Result; Result = TRUE; DEBUG ((DEBUG_INFO, "==== TestPointCheckHsti - Enter\n")); for (Index = 0; Index < sizeof(mRole)/sizeof(mRole[0]); Index++) { Status = HstiLibGetTable (mRole[Index], NULL, &Hsti, &HstiSize); if (EFI_ERROR (Status)) { DEBUG ((DEBUG_ERROR, "HSTI (Role - 0x%08x) not found!\n", mRole[Index])); if (mRole[Index] <= PLATFORM_SECURITY_ROLE_PLATFORM_IBV) { Result = FALSE; } continue; } DumpHsti (Hsti); FreePool (Hsti); } DEBUG ((DEBUG_INFO, "==== TestPointCheckHsti - Exit\n")); if (!Result) { TestPointLibAppendErrorString ( PLATFORM_TEST_POINT_ROLE_PLATFORM_IBV, NULL, TEST_POINT_BYTE8_READY_TO_BOOT_HSTI_TABLE_FUNCTIONAL_ERROR_CODE \ TEST_POINT_READY_TO_BOOT \ TEST_POINT_BYTE8_READY_TO_BOOT_HSTI_TABLE_FUNCTIONAL_ERROR_STRING ); return EFI_NOT_FOUND; } return EFI_SUCCESS; }