]> git.proxmox.com Git - mirror_edk2.git/blame - SecurityPkg/Library/Tpm12CommandLib/Tpm12Startup.c
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / SecurityPkg / Library / Tpm12CommandLib / Tpm12Startup.c
CommitLineData
c1d93242
JY
1/** @file\r
2 Implement TPM1.2 Startup related command.\r
3\r
4Copyright (c) 2013, Intel Corporation. All rights reserved. <BR>\r
f060d160 5(C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>\r
289b714b 6SPDX-License-Identifier: BSD-2-Clause-Patent\r
c1d93242
JY
7\r
8**/\r
9\r
83b9662f 10#include <PiPei.h>\r
c1d93242
JY
11#include <Library/BaseMemoryLib.h>\r
12#include <Library/BaseLib.h>\r
13#include <Library/Tpm12DeviceLib.h>\r
f060d160 14#include <Library/DebugLib.h>\r
c1d93242
JY
15\r
16#pragma pack(1)\r
17\r
18typedef struct {\r
c411b485
MK
19 TPM_RQU_COMMAND_HDR Hdr;\r
20 TPM_STARTUP_TYPE TpmSt;\r
c1d93242
JY
21} TPM_CMD_START_UP;\r
22\r
c1d93242
JY
23#pragma pack()\r
24\r
25/**\r
26 Send Startup command to TPM1.2.\r
27\r
28 @param TpmSt Startup Type.\r
29\r
30 @retval EFI_SUCCESS Operation completed successfully.\r
31 @retval EFI_DEVICE_ERROR Unexpected device behavior.\r
32**/\r
33EFI_STATUS\r
34EFIAPI\r
35Tpm12Startup (\r
83b9662f 36 IN TPM_STARTUP_TYPE TpmSt\r
c1d93242
JY
37 )\r
38{\r
83b9662f
MK
39 EFI_STATUS Status;\r
40 TPM_CMD_START_UP Command;\r
41 TPM_RSP_COMMAND_HDR Response;\r
42 UINT32 Length;\r
c1d93242
JY
43\r
44 //\r
45 // send Tpm command TPM_ORD_Startup\r
46 //\r
83b9662f
MK
47 Command.Hdr.tag = SwapBytes16 (TPM_TAG_RQU_COMMAND);\r
48 Command.Hdr.paramSize = SwapBytes32 (sizeof (Command));\r
49 Command.Hdr.ordinal = SwapBytes32 (TPM_ORD_Startup);\r
50 Command.TpmSt = SwapBytes16 (TpmSt);\r
c411b485
MK
51 Length = sizeof (Response);\r
52 Status = Tpm12SubmitCommand (sizeof (Command), (UINT8 *)&Command, &Length, (UINT8 *)&Response);\r
c1d93242
JY
53 if (EFI_ERROR (Status)) {\r
54 return Status;\r
55 }\r
c411b485
MK
56\r
57 switch (SwapBytes32 (Response.returnCode)) {\r
58 case TPM_SUCCESS:\r
59 DEBUG ((DEBUG_INFO, "TPM12Startup: TPM_SUCCESS\n"));\r
60 return EFI_SUCCESS;\r
61 case TPM_INVALID_POSTINIT:\r
62 // In warm reset, TPM may response TPM_INVALID_POSTINIT\r
63 DEBUG ((DEBUG_INFO, "TPM12Startup: TPM_INVALID_POSTINIT\n"));\r
64 return EFI_SUCCESS;\r
65 default:\r
66 return EFI_DEVICE_ERROR;\r
c1d93242 67 }\r
9318b08e
JY
68}\r
69\r
70/**\r
71 Send SaveState command to TPM1.2.\r
72\r
73 @retval EFI_SUCCESS Operation completed successfully.\r
74 @retval EFI_DEVICE_ERROR Unexpected device behavior.\r
75**/\r
76EFI_STATUS\r
77EFIAPI\r
78Tpm12SaveState (\r
79 VOID\r
80 )\r
81{\r
83b9662f
MK
82 EFI_STATUS Status;\r
83 TPM_RQU_COMMAND_HDR Command;\r
84 TPM_RSP_COMMAND_HDR Response;\r
85 UINT32 Length;\r
9318b08e
JY
86\r
87 //\r
88 // send Tpm command TPM_ORD_SaveState\r
89 //\r
c411b485
MK
90 Command.tag = SwapBytes16 (TPM_TAG_RQU_COMMAND);\r
91 Command.paramSize = SwapBytes32 (sizeof (Command));\r
92 Command.ordinal = SwapBytes32 (TPM_ORD_SaveState);\r
93 Length = sizeof (Response);\r
94 Status = Tpm12SubmitCommand (sizeof (Command), (UINT8 *)&Command, &Length, (UINT8 *)&Response);\r
9318b08e
JY
95 if (EFI_ERROR (Status)) {\r
96 return Status;\r
97 }\r
c411b485 98\r
83b9662f 99 switch (SwapBytes32 (Response.returnCode)) {\r
c411b485
MK
100 case TPM_SUCCESS:\r
101 return EFI_SUCCESS;\r
102 default:\r
103 return EFI_DEVICE_ERROR;\r
9318b08e
JY
104 }\r
105}\r