4 In SecurityPkg, this module initializes the TPM device type based on a UEFI
5 variable and/or hardware detection. In OvmfPkg, the module only performs TPM
8 Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
9 Copyright (C) 2018, Red Hat, Inc.
11 SPDX-License-Identifier: BSD-2-Clause-Patent
16 #include <Guid/TpmInstance.h>
17 #include <Library/DebugLib.h>
18 #include <Library/PeiServicesLib.h>
19 #include <Library/Tpm2DeviceLib.h>
20 #include <Ppi/TpmInitialized.h>
22 #include "Tpm12Support.h"
24 STATIC CONST EFI_PEI_PPI_DESCRIPTOR mTpmSelectedPpi
= {
25 (EFI_PEI_PPI_DESCRIPTOR_PPI
| EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST
),
26 &gEfiTpmDeviceSelectedGuid
,
30 STATIC CONST EFI_PEI_PPI_DESCRIPTOR mTpmInitializationDonePpiList
= {
31 EFI_PEI_PPI_DESCRIPTOR_PPI
| EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST
,
32 &gPeiTpmInitializationDonePpiGuid
,
37 The entry point for Tcg2 configuration driver.
39 @param FileHandle Handle of the file being invoked.
40 @param PeiServices Describes the list of possible PEI Services.
44 Tcg2ConfigPeimEntryPoint (
45 IN EFI_PEI_FILE_HANDLE FileHandle
,
46 IN CONST EFI_PEI_SERVICES
**PeiServices
52 DEBUG ((DEBUG_INFO
, "%a\n", __FUNCTION__
));
54 Status
= InternalTpm12Detect ();
55 if (!EFI_ERROR (Status
)) {
56 DEBUG ((DEBUG_INFO
, "%a: TPM1.2 detected\n", __FUNCTION__
));
57 Size
= sizeof (gEfiTpmDeviceInstanceTpm12Guid
);
61 &gEfiTpmDeviceInstanceTpm12Guid
63 ASSERT_EFI_ERROR (Status
);
65 Status
= Tpm2RequestUseTpm ();
66 if (!EFI_ERROR (Status
)) {
67 DEBUG ((DEBUG_INFO
, "%a: TPM2 detected\n", __FUNCTION__
));
68 Size
= sizeof (gEfiTpmDeviceInstanceTpm20DtpmGuid
);
72 &gEfiTpmDeviceInstanceTpm20DtpmGuid
74 ASSERT_EFI_ERROR (Status
);
76 DEBUG ((DEBUG_INFO
, "%a: no TPM detected\n", __FUNCTION__
));
78 // If no TPM2 was detected, we still need to install
79 // TpmInitializationDonePpi. Namely, Tcg2Pei will exit early upon seeing
80 // the default (all-bits-zero) contents of PcdTpmInstanceGuid, thus we have
81 // to install the PPI in its place, in order to unblock any dependent
84 Status
= PeiServicesInstallPpi (&mTpmInitializationDonePpiList
);
85 ASSERT_EFI_ERROR (Status
);
92 Status
= PeiServicesInstallPpi (&mTpmSelectedPpi
);
93 ASSERT_EFI_ERROR (Status
);