/** @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 VOID DumpTestPoint ( IN VOID *TestPointData ) { ADAPTER_INFO_PLATFORM_TEST_POINT *TestPoint; UINT8 *Features; CHAR16 *ErrorString; UINTN Index; CHAR16 ErrorChar; TestPoint = TestPointData; Print (L"TestPoint\n"); Print (L" Version - 0x%08x\n", TestPoint->Version); Print (L" Role - 0x%08x\n", TestPoint->Role); Print (L" ImplementationID - %S\n", TestPoint->ImplementationID); Print (L" FeaturesSize - 0x%08x\n", TestPoint->FeaturesSize); Features = (UINT8 *)(TestPoint + 1); Print (L" FeaturesImplemented - "); for (Index = 0; Index < TestPoint->FeaturesSize; Index++) { Print (L"%02x ", Features[Index]); } Print (L"\n"); Features = (UINT8 *)(Features + TestPoint->FeaturesSize); Print (L" FeaturesVerified - "); for (Index = 0; Index < TestPoint->FeaturesSize; Index++) { Print (L"%02x ", Features[Index]); } Print (L"\n"); ErrorString = (CHAR16 *)(Features + TestPoint->FeaturesSize); Print (L" ErrorString - \""); CopyMem (&ErrorChar, ErrorString, sizeof(ErrorChar)); for (; ErrorChar != 0;) { if (ErrorChar == L'\r') { Print (L"\\r"); } else if (ErrorChar == L'\n') { Print (L"\\n"); } else { Print (L"%c", ErrorChar); } ErrorString++; CopyMem (&ErrorChar, ErrorString, sizeof(ErrorChar)); } Print (L"\"\n"); } VOID DumpTestPointDataDxe ( IN UINT32 Role OPTIONAL, IN CHAR16 *ImplementationID OPTIONAL ) { EFI_STATUS Status; EFI_ADAPTER_INFORMATION_PROTOCOL *Aip; UINTN NoHandles; EFI_HANDLE *Handles; UINTN Index; EFI_GUID *InfoTypesBuffer; UINTN InfoTypesBufferCount; UINTN InfoTypesIndex; EFI_ADAPTER_INFORMATION_PROTOCOL *AipCandidate; VOID *InformationBlock; UINTN InformationBlockSize; ADAPTER_INFO_PLATFORM_TEST_POINT *TestPoint; Status = gBS->LocateHandleBuffer ( ByProtocol, &gEfiAdapterInformationProtocolGuid, NULL, &NoHandles, &Handles ); if (EFI_ERROR (Status)) { return ; } TestPoint = NULL; Aip = NULL; InformationBlock = NULL; InformationBlockSize = 0; for (Index = 0; Index < NoHandles; Index++) { Status = gBS->HandleProtocol ( Handles[Index], &gEfiAdapterInformationProtocolGuid, (VOID **)&Aip ); if (EFI_ERROR (Status)) { continue; } // // Check AIP // Status = Aip->GetSupportedTypes ( Aip, &InfoTypesBuffer, &InfoTypesBufferCount ); if (EFI_ERROR (Status)) { continue; } AipCandidate = NULL; for (InfoTypesIndex = 0; InfoTypesIndex < InfoTypesBufferCount; InfoTypesIndex++) { if (CompareGuid (&InfoTypesBuffer[InfoTypesIndex], &gAdapterInfoPlatformTestPointGuid)) { AipCandidate = Aip; break; } } FreePool (InfoTypesBuffer); if (AipCandidate == NULL) { continue; } // // Check Role // Aip = AipCandidate; Status = Aip->GetInformation ( Aip, &gAdapterInfoPlatformTestPointGuid, &InformationBlock, &InformationBlockSize ); if (EFI_ERROR (Status)) { continue; } TestPoint = InformationBlock; if ((Role == 0) || ((TestPoint->Role == Role) && ((ImplementationID == NULL) || (StrCmp (ImplementationID, TestPoint->ImplementationID) == 0)))) { DumpTestPoint (TestPoint); } FreePool (InformationBlock); } FreePool (Handles); } EFI_STATUS EFIAPI TestPointDumpAppEntrypoint ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { DumpTestPointDataDxe (0, NULL); return EFI_SUCCESS; }