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 TPM2
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
17 #include <Guid/TpmInstance.h>
18 #include <Library/DebugLib.h>
19 #include <Library/PeiServicesLib.h>
20 #include <Library/Tpm2DeviceLib.h>
21 #include <Ppi/TpmInitialized.h>
23 STATIC CONST EFI_PEI_PPI_DESCRIPTOR mTpmSelectedPpi
= {
24 (EFI_PEI_PPI_DESCRIPTOR_PPI
| EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST
),
25 &gEfiTpmDeviceSelectedGuid
,
29 STATIC CONST EFI_PEI_PPI_DESCRIPTOR mTpmInitializationDonePpiList
= {
30 EFI_PEI_PPI_DESCRIPTOR_PPI
| EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST
,
31 &gPeiTpmInitializationDonePpiGuid
,
36 The entry point for Tcg2 configuration driver.
38 @param FileHandle Handle of the file being invoked.
39 @param PeiServices Describes the list of possible PEI Services.
43 Tcg2ConfigPeimEntryPoint (
44 IN EFI_PEI_FILE_HANDLE FileHandle
,
45 IN CONST EFI_PEI_SERVICES
**PeiServices
51 DEBUG ((DEBUG_INFO
, "%a\n", __FUNCTION__
));
53 Status
= Tpm2RequestUseTpm ();
54 if (!EFI_ERROR (Status
)) {
55 DEBUG ((DEBUG_INFO
, "%a: TPM2 detected\n", __FUNCTION__
));
56 Size
= sizeof (gEfiTpmDeviceInstanceTpm20DtpmGuid
);
60 &gEfiTpmDeviceInstanceTpm20DtpmGuid
62 ASSERT_EFI_ERROR (Status
);
64 DEBUG ((DEBUG_INFO
, "%a: no TPM2 detected\n", __FUNCTION__
));
66 // If no TPM2 was detected, we still need to install
67 // TpmInitializationDonePpi. Namely, Tcg2Pei will exit early upon seeing
68 // the default (all-bits-zero) contents of PcdTpmInstanceGuid, thus we have
69 // to install the PPI in its place, in order to unblock any dependent
72 Status
= PeiServicesInstallPpi (&mTpmInitializationDonePpiList
);
73 ASSERT_EFI_ERROR (Status
);
79 Status
= PeiServicesInstallPpi (&mTpmSelectedPpi
);
80 ASSERT_EFI_ERROR (Status
);