]> git.proxmox.com Git - mirror_edk2.git/blame - SecurityPkg/Library/Tpm2CommandLib/Tpm2Startup.c
SecurityPkg: Add DEBUG messages for TPM2Startup
[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
c1d93242
JY
6This program and the accompanying materials\r
7are licensed and made available under the terms and conditions of the BSD License\r
8which accompanies this distribution. The full text of the license may be found at\r
9http://opensource.org/licenses/bsd-license.php\r
10\r
11THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13\r
14**/\r
15\r
16#include <IndustryStandard/UefiTcgPlatform.h>\r
17#include <Library/Tpm2CommandLib.h>\r
18#include <Library/Tpm2DeviceLib.h>\r
19#include <Library/BaseMemoryLib.h>\r
20#include <Library/BaseLib.h>\r
21#include <Library/DebugLib.h>\r
22\r
23#pragma pack(1)\r
24\r
25typedef struct {\r
26 TPM2_COMMAND_HEADER Header;\r
27 TPM_SU StartupType;\r
28} TPM2_STARTUP_COMMAND;\r
29\r
30typedef struct {\r
31 TPM2_RESPONSE_HEADER Header;\r
32} TPM2_STARTUP_RESPONSE;\r
33\r
34typedef struct {\r
35 TPM2_COMMAND_HEADER Header;\r
36 TPM_SU ShutdownType;\r
37} TPM2_SHUTDOWN_COMMAND;\r
38\r
39typedef struct {\r
40 TPM2_RESPONSE_HEADER Header;\r
41} TPM2_SHUTDOWN_RESPONSE;\r
42\r
43#pragma pack()\r
44\r
45/**\r
46 Send Startup command to TPM2.\r
47\r
48 @param[in] StartupType TPM_SU_CLEAR or TPM_SU_STATE\r
49\r
50 @retval EFI_SUCCESS Operation completed successfully.\r
51 @retval EFI_DEVICE_ERROR Unexpected device behavior.\r
52**/\r
53EFI_STATUS\r
54EFIAPI\r
55Tpm2Startup (\r
56 IN TPM_SU StartupType\r
57 )\r
58{\r
59 EFI_STATUS Status;\r
60 TPM2_STARTUP_COMMAND Cmd;\r
61 TPM2_STARTUP_RESPONSE Res;\r
62 UINT32 ResultBufSize;\r
f1e95ab8 63 TPM_RC ResponseCode;\r
c1d93242
JY
64\r
65 Cmd.Header.tag = SwapBytes16(TPM_ST_NO_SESSIONS);\r
66 Cmd.Header.paramSize = SwapBytes32(sizeof(Cmd));\r
67 Cmd.Header.commandCode = SwapBytes32(TPM_CC_Startup);\r
68 Cmd.StartupType = SwapBytes16(StartupType);\r
69\r
70 ResultBufSize = sizeof(Res);\r
71 Status = Tpm2SubmitCommand (sizeof(Cmd), (UINT8 *)&Cmd, &ResultBufSize, (UINT8 *)&Res);\r
f1e95ab8
JY
72 if (EFI_ERROR(Status)) {\r
73 return Status;\r
74 }\r
75\r
76 ResponseCode = SwapBytes32(Res.Header.responseCode);\r
77 switch (ResponseCode) {\r
78 case TPM_RC_SUCCESS:\r
148bd4e3
SEHM
79 DEBUG ((DEBUG_INFO, "TPM2Startup: TPM_RC_SUCCESS\n"));\r
80 return EFI_SUCCESS;\r
f1e95ab8
JY
81 case TPM_RC_INITIALIZE:\r
82 // TPM_RC_INITIALIZE can be returned if Tpm2Startup is not required.\r
148bd4e3 83 DEBUG ((DEBUG_INFO, "TPM2Startup: TPM_RC_INITIALIZE\n"));\r
f1e95ab8
JY
84 return EFI_SUCCESS;\r
85 default:\r
86 DEBUG ((EFI_D_ERROR, "Tpm2Startup: Response Code error! 0x%08x\r\n", ResponseCode));\r
87 return EFI_DEVICE_ERROR;\r
88 }\r
c1d93242
JY
89}\r
90\r
91/**\r
92 Send Shutdown command to TPM2.\r
93\r
94 @param[in] ShutdownType TPM_SU_CLEAR or TPM_SU_STATE.\r
95\r
96 @retval EFI_SUCCESS Operation completed successfully.\r
97 @retval EFI_DEVICE_ERROR Unexpected device behavior.\r
98**/\r
99EFI_STATUS\r
100EFIAPI\r
101Tpm2Shutdown (\r
102 IN TPM_SU ShutdownType\r
103 )\r
104{\r
105 EFI_STATUS Status;\r
106 TPM2_SHUTDOWN_COMMAND Cmd;\r
107 TPM2_SHUTDOWN_RESPONSE Res;\r
108 UINT32 ResultBufSize;\r
109\r
110 Cmd.Header.tag = SwapBytes16(TPM_ST_NO_SESSIONS);\r
111 Cmd.Header.paramSize = SwapBytes32(sizeof(Cmd));\r
112 Cmd.Header.commandCode = SwapBytes32(TPM_CC_Shutdown);\r
113 Cmd.ShutdownType = SwapBytes16(ShutdownType);\r
114\r
115 ResultBufSize = sizeof(Res);\r
116 Status = Tpm2SubmitCommand (sizeof(Cmd), (UINT8 *)&Cmd, &ResultBufSize, (UINT8 *)&Res);\r
f1e95ab8
JY
117 if (EFI_ERROR(Status)) {\r
118 return Status;\r
119 }\r
120\r
121 if (SwapBytes32(Res.Header.responseCode) != TPM_RC_SUCCESS) {\r
122 DEBUG ((EFI_D_ERROR, "Tpm2Shutdown: Response Code error! 0x%08x\r\n", SwapBytes32(Res.Header.responseCode)));\r
123 return EFI_DEVICE_ERROR;\r
124 }\r
c1d93242 125\r
f1e95ab8 126 return EFI_SUCCESS;\r
c1d93242 127}\r