/** @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 #include VOID DumpCharArray ( IN CHAR8 *Ch, IN UINTN Size ); VOID DumpAcpiTableHeader ( IN EFI_ACPI_DESCRIPTION_HEADER *Table ); BOOLEAN IsMmioExit ( IN EFI_PHYSICAL_ADDRESS BaseAddress, IN UINT64 Length, IN BOOLEAN CheckAllocated ); VOID DumpAcpiTpm2 ( IN EFI_TPM2_ACPI_TABLE *Tpm2 ) { DumpAcpiTableHeader (&Tpm2->Header); DEBUG ((DEBUG_INFO, " ")); DEBUG ((DEBUG_INFO, " Flags=0x%08x ControlArea=0x%016lx StartMethod=0x%08x\n", Tpm2->Flags, Tpm2->AddressOfControlArea, Tpm2->StartMethod)); } VOID DumpAcpiTcpaClient ( IN EFI_TCG_CLIENT_ACPI_TABLE *TcpaClient ) { DumpAcpiTableHeader (&TcpaClient->Header); DEBUG ((DEBUG_INFO, " ")); DEBUG ((DEBUG_INFO, " PlatformClass=0x%04x Laml=0x%08x Lasa=0x%016lx\n", TcpaClient->PlatformClass, TcpaClient->Laml, TcpaClient->Lasa)); } VOID DumpAcpiTcpaServer ( IN EFI_TCG_SERVER_ACPI_TABLE *TcpaServer ) { DumpAcpiTableHeader (&TcpaServer->Header); DEBUG ((DEBUG_INFO, " ")); DEBUG ((DEBUG_INFO, " PlatformClass=0x%04x Laml=0x%016lx Lasa=0x%016lx\n", TcpaServer->PlatformClass, TcpaServer->Laml, TcpaServer->Lasa)); } VOID DumpAcpiTcpa ( IN EFI_ACPI_DESCRIPTION_HEADER *Tcpa ) { EFI_TCG_CLIENT_ACPI_TABLE *TcpaClient; TcpaClient = (VOID *)Tcpa; switch (TcpaClient->PlatformClass) { case TCG_PLATFORM_TYPE_CLIENT: DumpAcpiTcpaClient((VOID *)Tcpa); break; case TCG_PLATFORM_TYPE_SERVER: DumpAcpiTcpaServer((VOID *)Tcpa); break; default: DumpAcpiTableHeader (Tcpa); DEBUG ((DEBUG_INFO, " ")); DEBUG ((DEBUG_INFO, " PlatformClass=0x%04x\n", TcpaClient->PlatformClass)); break; } } EFI_STATUS CheckAcpiTpm2 ( IN EFI_TPM2_ACPI_TABLE *Tpm2 ) { switch (Tpm2->StartMethod) { case EFI_TPM2_ACPI_TABLE_START_METHOD_TIS: if (!IsMmioExit (0xFED40000, SIZE_4KB, TRUE)) { DEBUG ((DEBUG_ERROR, "TPM2 resource (0x%x) is not reported correctly.\n", 0xFED40000)); return EFI_NOT_STARTED; } break; default: break; } return EFI_SUCCESS; } EFI_STATUS CheckAcpiTcpaClient ( IN EFI_TCG_CLIENT_ACPI_TABLE *TcpaClient ) { if (!IsMmioExit (0xFED40000, SIZE_4KB, TRUE)) { DEBUG ((DEBUG_ERROR, "TCPA.client resource (0x%x) is not reported correctly.\n", 0xFED40000)); return EFI_NOT_STARTED; } return EFI_SUCCESS; } EFI_STATUS CheckAcpiTcpaServer ( IN EFI_TCG_SERVER_ACPI_TABLE *TcpaServer ) { if (!IsMmioExit (TcpaServer->BaseAddress.Address, SIZE_4KB, TRUE)) { DEBUG ((DEBUG_ERROR, "TCPA.server resource (0x%x) is not reported correctly.\n", 0xFED40000)); return EFI_NOT_STARTED; } return EFI_SUCCESS; } EFI_STATUS CheckAcpiTcpa ( IN EFI_ACPI_DESCRIPTION_HEADER *Tcpa ) { EFI_TCG_CLIENT_ACPI_TABLE *TcpaClient; TcpaClient = (VOID *)Tcpa; switch (TcpaClient->PlatformClass) { case TCG_PLATFORM_TYPE_CLIENT: return CheckAcpiTcpaClient((VOID *)Tcpa); break; case TCG_PLATFORM_TYPE_SERVER: return CheckAcpiTcpaServer((VOID *)Tcpa); break; default: break; } return EFI_UNSUPPORTED; }