]> git.proxmox.com Git - mirror_edk2.git/blobdiff - SecurityPkg/Library/Tpm12CommandLib/Tpm12Startup.c
SecurityPkg/Tpm12CommandLib: Add TPM 1.2 commands used by TCG modules
[mirror_edk2.git] / SecurityPkg / Library / Tpm12CommandLib / Tpm12Startup.c
index afbe02e382972b68b7a7cc4f90c97ca00e9496a6..bc10e4586a68ac31914039347def2464f6a09621 100644 (file)
@@ -12,8 +12,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
 **/\r
 \r
-#include <Uefi.h>\r
-#include <IndustryStandard/Tpm12.h>\r
+#include <PiPei.h>\r
 #include <Library/BaseMemoryLib.h>\r
 #include <Library/BaseLib.h>\r
 #include <Library/Tpm12DeviceLib.h>\r
@@ -25,18 +24,6 @@ typedef struct {
   TPM_STARTUP_TYPE      TpmSt;\r
 } TPM_CMD_START_UP;\r
 \r
-typedef struct {\r
-  TPM_RSP_COMMAND_HDR   Hdr;\r
-} TPM_RSP_START_UP;\r
-\r
-typedef struct {\r
-  TPM_RQU_COMMAND_HDR   Hdr;\r
-} TPM_CMD_SAVE_STATE;\r
-\r
-typedef struct {\r
-  TPM_RSP_COMMAND_HDR   Hdr;\r
-} TPM_RSP_SAVE_STATE;\r
-\r
 #pragma pack()\r
 \r
 /**\r
@@ -50,32 +37,27 @@ typedef struct {
 EFI_STATUS\r
 EFIAPI\r
 Tpm12Startup (\r
-  IN TPM_STARTUP_TYPE          TpmSt\r
+  IN TPM_STARTUP_TYPE  TpmSt\r
   )\r
 {\r
-  EFI_STATUS                        Status;\r
-  UINT32                            TpmRecvSize;\r
-  UINT32                            TpmSendSize;\r
-  TPM_CMD_START_UP                  SendBuffer;\r
-  TPM_RSP_START_UP                  RecvBuffer;\r
-  UINT32                            ReturnCode;\r
+  EFI_STATUS           Status;\r
+  TPM_CMD_START_UP     Command;\r
+  TPM_RSP_COMMAND_HDR  Response;\r
+  UINT32               Length;\r
 \r
   //\r
   // send Tpm command TPM_ORD_Startup\r
   //\r
-  TpmRecvSize               = sizeof (TPM_RSP_START_UP);\r
-  TpmSendSize               = sizeof (TPM_CMD_START_UP);\r
-  SendBuffer.Hdr.tag        = SwapBytes16 (TPM_TAG_RQU_COMMAND);\r
-  SendBuffer.Hdr.paramSize  = SwapBytes32 (TpmSendSize);\r
-  SendBuffer.Hdr.ordinal    = SwapBytes32 (TPM_ORD_Startup);\r
-  SendBuffer.TpmSt          = SwapBytes16 (TpmSt);\r
-\r
-  Status = Tpm12SubmitCommand (TpmSendSize, (UINT8 *)&SendBuffer, &TpmRecvSize, (UINT8 *)&RecvBuffer);\r
+  Command.Hdr.tag       = SwapBytes16 (TPM_TAG_RQU_COMMAND);\r
+  Command.Hdr.paramSize = SwapBytes32 (sizeof (Command));\r
+  Command.Hdr.ordinal   = SwapBytes32 (TPM_ORD_Startup);\r
+  Command.TpmSt         = SwapBytes16 (TpmSt);\r
+  Length = sizeof (Response);\r
+  Status = Tpm12SubmitCommand (sizeof (Command), (UINT8 *)&Command, &Length, (UINT8 *)&Response);\r
   if (EFI_ERROR (Status)) {\r
     return Status;\r
   }\r
-  ReturnCode = SwapBytes32(RecvBuffer.Hdr.returnCode);\r
-  switch (ReturnCode) {\r
+  switch (SwapBytes32(Response.returnCode)) {\r
   case TPM_SUCCESS:\r
   case TPM_INVALID_POSTINIT:\r
     // In warm reset, TPM may response TPM_INVALID_POSTINIT\r
@@ -97,28 +79,23 @@ Tpm12SaveState (
   VOID\r
   )\r
 {\r
-  EFI_STATUS                        Status;\r
-  UINT32                            TpmRecvSize;\r
-  UINT32                            TpmSendSize;\r
-  TPM_CMD_SAVE_STATE                SendBuffer;\r
-  TPM_RSP_SAVE_STATE                RecvBuffer;\r
-  UINT32                            ReturnCode;\r
+  EFI_STATUS           Status;\r
+  TPM_RQU_COMMAND_HDR  Command;\r
+  TPM_RSP_COMMAND_HDR  Response;\r
+  UINT32               Length;\r
 \r
   //\r
   // send Tpm command TPM_ORD_SaveState\r
   //\r
-  TpmRecvSize               = sizeof (TPM_RSP_SAVE_STATE);\r
-  TpmSendSize               = sizeof (TPM_CMD_SAVE_STATE);\r
-  SendBuffer.Hdr.tag        = SwapBytes16 (TPM_TAG_RQU_COMMAND);\r
-  SendBuffer.Hdr.paramSize  = SwapBytes32 (TpmSendSize);\r
-  SendBuffer.Hdr.ordinal    = SwapBytes32 (TPM_ORD_SaveState);\r
-\r
-  Status = Tpm12SubmitCommand (TpmSendSize, (UINT8 *)&SendBuffer, &TpmRecvSize, (UINT8 *)&RecvBuffer);\r
+  Command.tag        = SwapBytes16 (TPM_TAG_RQU_COMMAND);\r
+  Command.paramSize  = SwapBytes32 (sizeof (Command));\r
+  Command.ordinal    = SwapBytes32 (TPM_ORD_SaveState);\r
+  Length = sizeof (Response);\r
+  Status = Tpm12SubmitCommand (sizeof (Command), (UINT8 *)&Command, &Length, (UINT8 *)&Response);\r
   if (EFI_ERROR (Status)) {\r
     return Status;\r
   }\r
-  ReturnCode = SwapBytes32(RecvBuffer.Hdr.returnCode);\r
-  switch (ReturnCode) {\r
+  switch (SwapBytes32 (Response.returnCode)) {\r
   case TPM_SUCCESS:\r
     return EFI_SUCCESS;\r
   default:\r