]> git.proxmox.com Git - mirror_edk2.git/blame - SecurityPkg/Library/Tpm2CommandLib/Tpm2Startup.c
SecurityPkg: Change use of EFI_D_* to DEBUG_*
[mirror_edk2.git] / SecurityPkg / Library / Tpm2CommandLib / Tpm2Startup.c
CommitLineData
c1d93242
JY
1/** @file\r
2 Implement TPM2 Startup related command.\r
3\r
f1e95ab8 4Copyright (c) 2013 - 2016, Intel Corporation. All rights reserved. <BR>\r
148bd4e3 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
10#include <IndustryStandard/UefiTcgPlatform.h>\r
11#include <Library/Tpm2CommandLib.h>\r
12#include <Library/Tpm2DeviceLib.h>\r
13#include <Library/BaseMemoryLib.h>\r
14#include <Library/BaseLib.h>\r
15#include <Library/DebugLib.h>\r
16\r
17#pragma pack(1)\r
18\r
19typedef struct {\r
20 TPM2_COMMAND_HEADER Header;\r
21 TPM_SU StartupType;\r
22} TPM2_STARTUP_COMMAND;\r
23\r
24typedef struct {\r
25 TPM2_RESPONSE_HEADER Header;\r
26} TPM2_STARTUP_RESPONSE;\r
27\r
28typedef struct {\r
29 TPM2_COMMAND_HEADER Header;\r
30 TPM_SU ShutdownType;\r
31} TPM2_SHUTDOWN_COMMAND;\r
32\r
33typedef struct {\r
34 TPM2_RESPONSE_HEADER Header;\r
35} TPM2_SHUTDOWN_RESPONSE;\r
36\r
37#pragma pack()\r
38\r
39/**\r
40 Send Startup command to TPM2.\r
41\r
42 @param[in] StartupType TPM_SU_CLEAR or TPM_SU_STATE\r
43\r
44 @retval EFI_SUCCESS Operation completed successfully.\r
45 @retval EFI_DEVICE_ERROR Unexpected device behavior.\r
46**/\r
47EFI_STATUS\r
48EFIAPI\r
49Tpm2Startup (\r
50 IN TPM_SU StartupType\r
51 )\r
52{\r
53 EFI_STATUS Status;\r
54 TPM2_STARTUP_COMMAND Cmd;\r
55 TPM2_STARTUP_RESPONSE Res;\r
56 UINT32 ResultBufSize;\r
f1e95ab8 57 TPM_RC ResponseCode;\r
c1d93242
JY
58\r
59 Cmd.Header.tag = SwapBytes16(TPM_ST_NO_SESSIONS);\r
60 Cmd.Header.paramSize = SwapBytes32(sizeof(Cmd));\r
61 Cmd.Header.commandCode = SwapBytes32(TPM_CC_Startup);\r
62 Cmd.StartupType = SwapBytes16(StartupType);\r
63\r
64 ResultBufSize = sizeof(Res);\r
65 Status = Tpm2SubmitCommand (sizeof(Cmd), (UINT8 *)&Cmd, &ResultBufSize, (UINT8 *)&Res);\r
f1e95ab8
JY
66 if (EFI_ERROR(Status)) {\r
67 return Status;\r
68 }\r
69\r
70 ResponseCode = SwapBytes32(Res.Header.responseCode);\r
71 switch (ResponseCode) {\r
72 case TPM_RC_SUCCESS:\r
148bd4e3
SEHM
73 DEBUG ((DEBUG_INFO, "TPM2Startup: TPM_RC_SUCCESS\n"));\r
74 return EFI_SUCCESS;\r
f1e95ab8
JY
75 case TPM_RC_INITIALIZE:\r
76 // TPM_RC_INITIALIZE can be returned if Tpm2Startup is not required.\r
148bd4e3 77 DEBUG ((DEBUG_INFO, "TPM2Startup: TPM_RC_INITIALIZE\n"));\r
f1e95ab8
JY
78 return EFI_SUCCESS;\r
79 default:\r
e905fbb0 80 DEBUG ((DEBUG_ERROR, "Tpm2Startup: Response Code error! 0x%08x\r\n", ResponseCode));\r
f1e95ab8
JY
81 return EFI_DEVICE_ERROR;\r
82 }\r
c1d93242
JY
83}\r
84\r
85/**\r
86 Send Shutdown command to TPM2.\r
87\r
88 @param[in] ShutdownType TPM_SU_CLEAR or TPM_SU_STATE.\r
89\r
90 @retval EFI_SUCCESS Operation completed successfully.\r
91 @retval EFI_DEVICE_ERROR Unexpected device behavior.\r
92**/\r
93EFI_STATUS\r
94EFIAPI\r
95Tpm2Shutdown (\r
96 IN TPM_SU ShutdownType\r
97 )\r
98{\r
99 EFI_STATUS Status;\r
100 TPM2_SHUTDOWN_COMMAND Cmd;\r
101 TPM2_SHUTDOWN_RESPONSE Res;\r
102 UINT32 ResultBufSize;\r
103\r
104 Cmd.Header.tag = SwapBytes16(TPM_ST_NO_SESSIONS);\r
105 Cmd.Header.paramSize = SwapBytes32(sizeof(Cmd));\r
106 Cmd.Header.commandCode = SwapBytes32(TPM_CC_Shutdown);\r
107 Cmd.ShutdownType = SwapBytes16(ShutdownType);\r
108\r
109 ResultBufSize = sizeof(Res);\r
110 Status = Tpm2SubmitCommand (sizeof(Cmd), (UINT8 *)&Cmd, &ResultBufSize, (UINT8 *)&Res);\r
f1e95ab8
JY
111 if (EFI_ERROR(Status)) {\r
112 return Status;\r
113 }\r
114\r
115 if (SwapBytes32(Res.Header.responseCode) != TPM_RC_SUCCESS) {\r
e905fbb0 116 DEBUG ((DEBUG_ERROR, "Tpm2Shutdown: Response Code error! 0x%08x\r\n", SwapBytes32(Res.Header.responseCode)));\r
f1e95ab8
JY
117 return EFI_DEVICE_ERROR;\r
118 }\r
c1d93242 119\r
f1e95ab8 120 return EFI_SUCCESS;\r
c1d93242 121}\r