/** @file
Returns the platform specific configuration for the QEMU PPI.
Caution: This module requires additional review when modified.
This driver will have external input - variable.
This external input must be validated carefully to avoid security issue.
Copyright (C) 2018, Red Hat, Inc.
Copyright (c) 2018, IBM Corporation. All rights reserved.
Copyright (c) 2013 - 2016, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include
#include
#include
#include
#include
#include
#include
/**
Reads QEMU PPI config from TcgPhysicalPresenceInfoHobGuid.
@param[out] The Config structure to read to.
@param[out] The PPIinMMIO is True when the PPI is in MMIO memory space
@retval EFI_SUCCESS Operation completed successfully.
@retval EFI_PROTOCOL_ERROR Invalid HOB entry.
**/
EFI_STATUS
TpmPPIPlatformReadConfig (
OUT QEMU_FWCFG_TPM_CONFIG *Config,
OUT BOOLEAN *PPIinMMIO
)
{
EFI_HOB_GUID_TYPE *GuidHob;
TCG_PHYSICAL_PRESENCE_INFO *pPPInfo;
//
// Find the TPM Physical Presence HOB
//
GuidHob = GetFirstGuidHob (&gEfiTcgPhysicalPresenceInfoHobGuid);
if (GuidHob == NULL) {
return EFI_NOT_FOUND;
}
pPPInfo = (TCG_PHYSICAL_PRESENCE_INFO *)GET_GUID_HOB_DATA (GuidHob);
if (pPPInfo->PpiAddress == 0 || pPPInfo->PpiAddress == ~0) {
return EFI_NOT_FOUND;
} else {
Config->PpiAddress = pPPInfo->PpiAddress;
}
if (pPPInfo->TpmVersion == UEFIPAYLOAD_TPM_VERSION_1_2) {
Config->TpmVersion = QEMU_TPM_VERSION_1_2;
} else if (pPPInfo->TpmVersion == UEFIPAYLOAD_TPM_VERSION_2) {
Config->TpmVersion = QEMU_TPM_VERSION_2;
} else {
return EFI_UNSUPPORTED;
}
if (pPPInfo->PpiVersion == UEFIPAYLOAD_TPM_PPI_VERSION_NONE) {
Config->PpiVersion = QEMU_TPM_PPI_VERSION_NONE;
} else if (pPPInfo->PpiVersion == UEFIPAYLOAD_TPM_PPI_VERSION_1_30) {
Config->PpiVersion = QEMU_TPM_PPI_VERSION_1_30;
} else {
return EFI_UNSUPPORTED;
}
*PPIinMMIO = FALSE;
return EFI_SUCCESS;
}