]> git.proxmox.com Git - mirror_edk2.git/blame_incremental - SecurityPkg/Library/Tpm2CommandLib/Tpm2Startup.c
SecurityPkg: Add DEBUG messages for TPM2Startup
[mirror_edk2.git] / SecurityPkg / Library / Tpm2CommandLib / Tpm2Startup.c
... / ...
CommitLineData
1/** @file\r
2 Implement TPM2 Startup related command.\r
3\r
4Copyright (c) 2013 - 2016, Intel Corporation. All rights reserved. <BR>\r
5(C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>\r
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
63 TPM_RC ResponseCode;\r
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
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
79 DEBUG ((DEBUG_INFO, "TPM2Startup: TPM_RC_SUCCESS\n"));\r
80 return EFI_SUCCESS;\r
81 case TPM_RC_INITIALIZE:\r
82 // TPM_RC_INITIALIZE can be returned if Tpm2Startup is not required.\r
83 DEBUG ((DEBUG_INFO, "TPM2Startup: TPM_RC_INITIALIZE\n"));\r
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
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
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
125\r
126 return EFI_SUCCESS;\r
127}\r