--- /dev/null
+/** @file\r
+ Get TPM 2.0 physical presence information.\r
+ \r
+ This library will get TPM 2.0 physical presence information.\r
+\r
+Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials \r
+are licensed and made available under the terms and conditions of the BSD License \r
+which accompanies this distribution. The full text of the license may be found at \r
+http://opensource.org/licenses/bsd-license.php\r
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#include <PiPei.h>\r
+\r
+#include <Guid/Tcg2PhysicalPresenceData.h>\r
+#include <Ppi/ReadOnlyVariable2.h>\r
+\r
+#include <Library/DebugLib.h>\r
+#include <Library/PeiServicesLib.h>\r
+#include <Library/PeiServicesTablePointerLib.h>\r
+#include <Library/Tcg2PhysicalPresenceLib.h>\r
+\r
+/**\r
+ Return TPM2 ManagementFlags set by PP interface.\r
+\r
+ @retval ManagementFlags TPM2 Management Flags.\r
+**/\r
+UINT32\r
+EFIAPI\r
+Tcg2PhysicalPresenceLibGetManagementFlags (\r
+ VOID\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+ EFI_PEI_READ_ONLY_VARIABLE2_PPI *VariablePpi;\r
+ EFI_TCG2_PHYSICAL_PRESENCE_FLAGS PpiFlags;\r
+ UINTN DataSize;\r
+ \r
+ Status = PeiServicesLocatePpi (&gEfiPeiReadOnlyVariable2PpiGuid, 0, NULL, (VOID **) &VariablePpi);\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
+ DataSize = sizeof (EFI_TCG2_PHYSICAL_PRESENCE_FLAGS);\r
+ Status = VariablePpi->GetVariable (\r
+ VariablePpi,\r
+ TCG2_PHYSICAL_PRESENCE_FLAGS_VARIABLE,\r
+ &gEfiTcg2PhysicalPresenceGuid,\r
+ NULL,\r
+ &DataSize,\r
+ &PpiFlags\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ PpiFlags.PPFlags = TCG2_BIOS_TPM_MANAGEMENT_FLAG_DEFAULT;\r
+ }\r
+ return PpiFlags.PPFlags;\r
+}\r