]> git.proxmox.com Git - mirror_edk2.git/blame - SecurityPkg/Library/Tpm2CommandLib/Tpm2Startup.c
SecurityPkg: Apply uncrustify changes
[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
c411b485
MK
20 TPM2_COMMAND_HEADER Header;\r
21 TPM_SU StartupType;\r
c1d93242
JY
22} TPM2_STARTUP_COMMAND;\r
23\r
24typedef struct {\r
c411b485 25 TPM2_RESPONSE_HEADER Header;\r
c1d93242
JY
26} TPM2_STARTUP_RESPONSE;\r
27\r
28typedef struct {\r
c411b485
MK
29 TPM2_COMMAND_HEADER Header;\r
30 TPM_SU ShutdownType;\r
c1d93242
JY
31} TPM2_SHUTDOWN_COMMAND;\r
32\r
33typedef struct {\r
c411b485 34 TPM2_RESPONSE_HEADER Header;\r
c1d93242
JY
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
c411b485 50 IN TPM_SU StartupType\r
c1d93242
JY
51 )\r
52{\r
c411b485
MK
53 EFI_STATUS Status;\r
54 TPM2_STARTUP_COMMAND Cmd;\r
55 TPM2_STARTUP_RESPONSE Res;\r
56 UINT32 ResultBufSize;\r
57 TPM_RC ResponseCode;\r
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
66 if (EFI_ERROR (Status)) {\r
f1e95ab8
JY
67 return Status;\r
68 }\r
69\r
c411b485
MK
70 ResponseCode = SwapBytes32 (Res.Header.responseCode);\r
71 switch (ResponseCode) {\r
72 case TPM_RC_SUCCESS:\r
73 DEBUG ((DEBUG_INFO, "TPM2Startup: TPM_RC_SUCCESS\n"));\r
74 return EFI_SUCCESS;\r
75 case TPM_RC_INITIALIZE:\r
76 // TPM_RC_INITIALIZE can be returned if Tpm2Startup is not required.\r
77 DEBUG ((DEBUG_INFO, "TPM2Startup: TPM_RC_INITIALIZE\n"));\r
78 return EFI_SUCCESS;\r
79 default:\r
80 DEBUG ((DEBUG_ERROR, "Tpm2Startup: Response Code error! 0x%08x\r\n", ResponseCode));\r
81 return EFI_DEVICE_ERROR;\r
f1e95ab8 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
c411b485 96 IN TPM_SU ShutdownType\r
c1d93242
JY
97 )\r
98{\r
c411b485
MK
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
111 if (EFI_ERROR (Status)) {\r
f1e95ab8
JY
112 return Status;\r
113 }\r
114\r
c411b485
MK
115 if (SwapBytes32 (Res.Header.responseCode) != TPM_RC_SUCCESS) {\r
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